mirror of
https://github.com/charlesthobe/chdman.git
synced 2024-11-24 07:25:31 +00:00
adding missing 3rd party and includes
This commit is contained in:
parent
54f293f89e
commit
1322e3c2d0
18
3rdparty/nanosvg/LICENSE.txt
vendored
Normal file
18
3rdparty/nanosvg/LICENSE.txt
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Copyright (c) 2013-14 Mikko Mononen memon@inside.org
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
102
3rdparty/nanosvg/README.md
vendored
Normal file
102
3rdparty/nanosvg/README.md
vendored
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
*This project is not actively maintained.*
|
||||||
|
|
||||||
|
Nano SVG
|
||||||
|
==========
|
||||||
|
|
||||||
|
## Parser
|
||||||
|
|
||||||
|
![screenshot of some splines rendered with the sample program](/example/screenshot-1.png?raw=true)
|
||||||
|
|
||||||
|
NanoSVG is a simple stupid single-header-file SVG parse. The output of the parser is a list of cubic bezier shapes.
|
||||||
|
|
||||||
|
The library suits well for anything from rendering scalable icons in your editor application to prototyping a game.
|
||||||
|
|
||||||
|
NanoSVG supports a wide range of SVG features, but something may be missing, feel free to create a pull request!
|
||||||
|
|
||||||
|
The shapes in the SVG images are transformed by the viewBox and converted to specified units.
|
||||||
|
That is, you should get the same looking data as your designed in your favorite app.
|
||||||
|
|
||||||
|
NanoSVG can return the paths in few different units. For example if you want to render an image, you may choose
|
||||||
|
to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters.
|
||||||
|
|
||||||
|
The units passed to NanoSVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'.
|
||||||
|
DPI (dots-per-inch) controls how the unit conversion is done.
|
||||||
|
|
||||||
|
If you don't know or care about the units stuff, "px" and 96 should get you going.
|
||||||
|
|
||||||
|
## Rasterizer
|
||||||
|
|
||||||
|
![screenshot of tiger.svg rendered with NanoSVG rasterizer](/example/screenshot-2.png?raw=true)
|
||||||
|
|
||||||
|
The parser library is accompanied with really simpler SVG rasterizer. Currently it only renders flat filled shapes.
|
||||||
|
|
||||||
|
The intended usage for the rasterizer is to for example bake icons of different size into a texture. The rasterizer is not particular fast or accurate, but it's small and packed in one header file.
|
||||||
|
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
|
||||||
|
``` C
|
||||||
|
// Load
|
||||||
|
struct NSVGimage* image;
|
||||||
|
image = nsvgParseFromFile("test.svg", "px", 96);
|
||||||
|
printf("size: %f x %f\n", image->width, image->height);
|
||||||
|
// Use...
|
||||||
|
for (shape = image->shapes; shape != NULL; shape = shape->next) {
|
||||||
|
for (path = shape->paths; path != NULL; path = path->next) {
|
||||||
|
for (i = 0; i < path->npts-1; i += 3) {
|
||||||
|
float* p = &path->pts[i*2];
|
||||||
|
drawCubicBez(p[0],p[1], p[2],p[3], p[4],p[5], p[6],p[7]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Delete
|
||||||
|
nsvgDelete(image);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using NanoSVG in your project
|
||||||
|
|
||||||
|
In order to use NanoSVG in your own project, just copy nanosvg.h to your project.
|
||||||
|
In one C/C++ define `NANOSVG_IMPLEMENTATION` before including the library to expand the NanoSVG implementation in that file.
|
||||||
|
NanoSVG depends on `stdio.h` ,`string.h` and `math.h`, they should be included where the implementation is expanded before including NanoSVG.
|
||||||
|
|
||||||
|
``` C
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#define NANOSVG_IMPLEMENTATION // Expands implementation
|
||||||
|
#include "nanosvg.h"
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, NanoSVG parses only the most common colors. In order to get support for full list of [SVG color keywords](http://www.w3.org/TR/SVG11/types.html#ColorKeywords), define `NANOSVG_ALL_COLOR_KEYWORDS` before expanding the implementation.
|
||||||
|
|
||||||
|
``` C
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#define NANOSVG_ALL_COLOR_KEYWORDS // Include full list of color keywords.
|
||||||
|
#define NANOSVG_IMPLEMENTATION // Expands implementation
|
||||||
|
#include "nanosvg.h"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Compiling Example Project
|
||||||
|
|
||||||
|
In order to compile the demo project, your will need to install [GLFW](http://www.glfw.org/) to compile.
|
||||||
|
|
||||||
|
NanoSVG demo project uses [premake4](http://industriousone.com/premake) to build platform specific projects, now is good time to install it if you don't have it already. To build the example, navigate into the root folder in your favorite terminal, then:
|
||||||
|
|
||||||
|
- *OS X*: `premake4 xcode4`
|
||||||
|
- *Windows*: `premake4 vs2010`
|
||||||
|
- *Linux*: `premake4 gmake`
|
||||||
|
|
||||||
|
See premake4 documentation for full list of supported build file types. The projects will be created in `build` folder. An example of building and running the example on OS X:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ premake4 gmake
|
||||||
|
$ cd build/
|
||||||
|
$ make
|
||||||
|
$ ./example
|
||||||
|
```
|
||||||
|
|
||||||
|
# License
|
||||||
|
|
||||||
|
The library is licensed under [zlib license](LICENSE.txt)
|
730
3rdparty/nanosvg/example/23.svg
vendored
Normal file
730
3rdparty/nanosvg/example/23.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 94 KiB |
97
3rdparty/nanosvg/example/drawing.svg
vendored
Normal file
97
3rdparty/nanosvg/example/drawing.svg
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1000"
|
||||||
|
height="1000"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="drawing.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.35"
|
||||||
|
inkscape:cx="375"
|
||||||
|
inkscape:cy="520"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="751"
|
||||||
|
inkscape:window-height="578"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="22"
|
||||||
|
inkscape:window-maximized="0" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-52.362183)">
|
||||||
|
<path
|
||||||
|
style="fill:#ff5555;stroke:#000000;stroke-width:10.62107277px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 131.73911,422.01626 c 0,146.85769 43.82213,215.39128 201.5818,141.96244 157.75968,-73.42885 188.43518,-107.69564 354.95926,78.32409 166.5241,186.01973 210.34624,244.76282 162.1419,-122.3814 -48.20435,-367.1442 -4.38221,34.26679 -131.46641,-24.47627 C 591.87149,436.70204 732.10231,191.93923 543.66715,187.04398 355.23198,182.14871 574.34264,265.36807 534.90271,368.16845 495.4628,470.96883 355.23198,627.61702 311.40985,475.8641 267.58772,324.11115 193.09009,333.90166 131.73911,422.01626 z"
|
||||||
|
id="path2985"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00ffff;stroke:#000000;stroke-width:10.62107277px;"
|
||||||
|
id="rect2987"
|
||||||
|
width="390.01697"
|
||||||
|
height="200.70551"
|
||||||
|
x="228.14781"
|
||||||
|
y="539.50238" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#00ffff"
|
||||||
|
id="path3008"
|
||||||
|
sodipodi:cx="157.14285"
|
||||||
|
sodipodi:cy="168.57143"
|
||||||
|
sodipodi:rx="57.142857"
|
||||||
|
sodipodi:ry="88.571426"
|
||||||
|
d="m 214.28571,168.57143 a 57.142857,88.571426 0 1 1 -114.285714,0 57.142857,88.571426 0 1 1 114.285714,0 z"
|
||||||
|
transform="translate(188.57143,138.07647)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00ff00"
|
||||||
|
id="rect3010"
|
||||||
|
width="371.42856"
|
||||||
|
height="145.71428"
|
||||||
|
x="261.66104"
|
||||||
|
y="945.44141"
|
||||||
|
transform="matrix(0.948958,-0.31540248,0.31540248,0.948958,0,0)"
|
||||||
|
ry="51.42857" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#00ff00"
|
||||||
|
id="path3038"
|
||||||
|
sodipodi:cx="200"
|
||||||
|
sodipodi:cy="177.14285"
|
||||||
|
sodipodi:rx="54.285713"
|
||||||
|
sodipodi:ry="54.285713"
|
||||||
|
d="m 254.28571,177.14285 a 54.285713,54.285713 0 1 1 -108.57142,0 54.285713,54.285713 0 1 1 108.57142,0 z"
|
||||||
|
transform="translate(0,52.362183)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
258
3rdparty/nanosvg/example/example1.c
vendored
Normal file
258
3rdparty/nanosvg/example/example1.c
vendored
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2013 Mikko Mononen memon@inside.org
|
||||||
|
//
|
||||||
|
// This software is provided 'as-is', without any express or implied
|
||||||
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
// arising from the use of this software.
|
||||||
|
// Permission is granted to anyone to use this software for any purpose,
|
||||||
|
// including commercial applications, and to alter it and redistribute it
|
||||||
|
// freely, subject to the following restrictions:
|
||||||
|
// 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
// claim that you wrote the original software. If you use this software
|
||||||
|
// in a product, an acknowledgment in the product documentation would be
|
||||||
|
// appreciated but is not required.
|
||||||
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
// misrepresented as being the original software.
|
||||||
|
// 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <float.h>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
#define NANOSVG_IMPLEMENTATION
|
||||||
|
#include "nanosvg.h"
|
||||||
|
|
||||||
|
NSVGimage* g_image = NULL;
|
||||||
|
|
||||||
|
static unsigned char bgColor[4] = {205,202,200,255};
|
||||||
|
static unsigned char lineColor[4] = {0,160,192,255};
|
||||||
|
|
||||||
|
static float distPtSeg(float x, float y, float px, float py, float qx, float qy)
|
||||||
|
{
|
||||||
|
float pqx, pqy, dx, dy, d, t;
|
||||||
|
pqx = qx-px;
|
||||||
|
pqy = qy-py;
|
||||||
|
dx = x-px;
|
||||||
|
dy = y-py;
|
||||||
|
d = pqx*pqx + pqy*pqy;
|
||||||
|
t = pqx*dx + pqy*dy;
|
||||||
|
if (d > 0) t /= d;
|
||||||
|
if (t < 0) t = 0;
|
||||||
|
else if (t > 1) t = 1;
|
||||||
|
dx = px + t*pqx - x;
|
||||||
|
dy = py + t*pqy - y;
|
||||||
|
return dx*dx + dy*dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cubicBez(float x1, float y1, float x2, float y2,
|
||||||
|
float x3, float y3, float x4, float y4,
|
||||||
|
float tol, int level)
|
||||||
|
{
|
||||||
|
float x12,y12,x23,y23,x34,y34,x123,y123,x234,y234,x1234,y1234;
|
||||||
|
float d;
|
||||||
|
|
||||||
|
if (level > 12) return;
|
||||||
|
|
||||||
|
x12 = (x1+x2)*0.5f;
|
||||||
|
y12 = (y1+y2)*0.5f;
|
||||||
|
x23 = (x2+x3)*0.5f;
|
||||||
|
y23 = (y2+y3)*0.5f;
|
||||||
|
x34 = (x3+x4)*0.5f;
|
||||||
|
y34 = (y3+y4)*0.5f;
|
||||||
|
x123 = (x12+x23)*0.5f;
|
||||||
|
y123 = (y12+y23)*0.5f;
|
||||||
|
x234 = (x23+x34)*0.5f;
|
||||||
|
y234 = (y23+y34)*0.5f;
|
||||||
|
x1234 = (x123+x234)*0.5f;
|
||||||
|
y1234 = (y123+y234)*0.5f;
|
||||||
|
|
||||||
|
d = distPtSeg(x1234, y1234, x1,y1, x4,y4);
|
||||||
|
if (d > tol*tol) {
|
||||||
|
cubicBez(x1,y1, x12,y12, x123,y123, x1234,y1234, tol, level+1);
|
||||||
|
cubicBez(x1234,y1234, x234,y234, x34,y34, x4,y4, tol, level+1);
|
||||||
|
} else {
|
||||||
|
glVertex2f(x4, y4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawPath(float* pts, int npts, char closed, float tol)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glColor4ubv(lineColor);
|
||||||
|
glVertex2f(pts[0], pts[1]);
|
||||||
|
for (i = 0; i < npts-1; i += 3) {
|
||||||
|
float* p = &pts[i*2];
|
||||||
|
cubicBez(p[0],p[1], p[2],p[3], p[4],p[5], p[6],p[7], tol, 0);
|
||||||
|
}
|
||||||
|
if (closed) {
|
||||||
|
glVertex2f(pts[0], pts[1]);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawControlPts(float* pts, int npts)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// Control lines
|
||||||
|
glColor4ubv(lineColor);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
for (i = 0; i < npts-1; i += 3) {
|
||||||
|
float* p = &pts[i*2];
|
||||||
|
glVertex2f(p[0],p[1]);
|
||||||
|
glVertex2f(p[2],p[3]);
|
||||||
|
glVertex2f(p[4],p[5]);
|
||||||
|
glVertex2f(p[6],p[7]);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
// Points
|
||||||
|
glPointSize(6.0f);
|
||||||
|
glColor4ubv(lineColor);
|
||||||
|
|
||||||
|
glBegin(GL_POINTS);
|
||||||
|
glVertex2f(pts[0],pts[1]);
|
||||||
|
for (i = 0; i < npts-1; i += 3) {
|
||||||
|
float* p = &pts[i*2];
|
||||||
|
glVertex2f(p[6],p[7]);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
// Points
|
||||||
|
glPointSize(3.0f);
|
||||||
|
|
||||||
|
glBegin(GL_POINTS);
|
||||||
|
glColor4ubv(bgColor);
|
||||||
|
glVertex2f(pts[0],pts[1]);
|
||||||
|
for (i = 0; i < npts-1; i += 3) {
|
||||||
|
float* p = &pts[i*2];
|
||||||
|
glColor4ubv(lineColor);
|
||||||
|
glVertex2f(p[2],p[3]);
|
||||||
|
glVertex2f(p[4],p[5]);
|
||||||
|
glColor4ubv(bgColor);
|
||||||
|
glVertex2f(p[6],p[7]);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawframe(GLFWwindow* window)
|
||||||
|
{
|
||||||
|
int width = 0, height = 0;
|
||||||
|
float view[4], cx, cy, hw, hh, aspect, px;
|
||||||
|
NSVGshape* shape;
|
||||||
|
NSVGpath* path;
|
||||||
|
|
||||||
|
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||||
|
glfwGetFramebufferSize(window, &width, &height);
|
||||||
|
|
||||||
|
glViewport(0, 0, width, height);
|
||||||
|
glClearColor(220.0f/255.0f, 220.0f/255.0f, 220.0f/255.0f, 1.0f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
|
||||||
|
// Fit view to bounds
|
||||||
|
cx = g_image->width*0.5f;
|
||||||
|
cy = g_image->height*0.5f;
|
||||||
|
hw = g_image->width*0.5f;
|
||||||
|
hh = g_image->height*0.5f;
|
||||||
|
|
||||||
|
if (width/hw < height/hh) {
|
||||||
|
aspect = (float)height / (float)width;
|
||||||
|
view[0] = cx - hw * 1.2f;
|
||||||
|
view[2] = cx + hw * 1.2f;
|
||||||
|
view[1] = cy - hw * 1.2f * aspect;
|
||||||
|
view[3] = cy + hw * 1.2f * aspect;
|
||||||
|
} else {
|
||||||
|
aspect = (float)width / (float)height;
|
||||||
|
view[0] = cx - hh * 1.2f * aspect;
|
||||||
|
view[2] = cx + hh * 1.2f * aspect;
|
||||||
|
view[1] = cy - hh * 1.2f;
|
||||||
|
view[3] = cy + hh * 1.2f;
|
||||||
|
}
|
||||||
|
// Size of one pixel.
|
||||||
|
px = (view[2] - view[1]) / (float)width;
|
||||||
|
|
||||||
|
glOrtho(view[0], view[2], view[3], view[1], -1, 1);
|
||||||
|
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
glColor4ub(255,255,255,255);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
// Draw bounds
|
||||||
|
glColor4ub(0,0,0,64);
|
||||||
|
glBegin(GL_LINE_LOOP);
|
||||||
|
glVertex2f(0, 0);
|
||||||
|
glVertex2f(g_image->width, 0);
|
||||||
|
glVertex2f(g_image->width, g_image->height);
|
||||||
|
glVertex2f(0, g_image->height);
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
for (shape = g_image->shapes; shape != NULL; shape = shape->next) {
|
||||||
|
for (path = shape->paths; path != NULL; path = path->next) {
|
||||||
|
drawPath(path->pts, path->npts, path->closed, px * 1.5f);
|
||||||
|
drawControlPts(path->pts, path->npts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glfwSwapBuffers(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
void resizecb(GLFWwindow* window, int width, int height)
|
||||||
|
{
|
||||||
|
// Update and render
|
||||||
|
NSVG_NOTUSED(width);
|
||||||
|
NSVG_NOTUSED(height);
|
||||||
|
drawframe(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
GLFWwindow* window;
|
||||||
|
const GLFWvidmode* mode;
|
||||||
|
|
||||||
|
if (!glfwInit())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
|
||||||
|
window = glfwCreateWindow(mode->width - 40, mode->height - 80, "Nano SVG", NULL, NULL);
|
||||||
|
if (!window)
|
||||||
|
{
|
||||||
|
printf("Could not open window\n");
|
||||||
|
glfwTerminate();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
glfwSetFramebufferSizeCallback(window, resizecb);
|
||||||
|
glfwMakeContextCurrent(window);
|
||||||
|
glEnable(GL_POINT_SMOOTH);
|
||||||
|
glEnable(GL_LINE_SMOOTH);
|
||||||
|
|
||||||
|
|
||||||
|
g_image = nsvgParseFromFile("../example/nano.svg", "px", 96.0f);
|
||||||
|
if (g_image == NULL) {
|
||||||
|
printf("Could not open SVG image.\n");
|
||||||
|
glfwTerminate();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!glfwWindowShouldClose(window))
|
||||||
|
{
|
||||||
|
drawframe(window);
|
||||||
|
glfwPollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
nsvgDelete(g_image);
|
||||||
|
|
||||||
|
glfwTerminate();
|
||||||
|
return 0;
|
||||||
|
}
|
69
3rdparty/nanosvg/example/example2.c
vendored
Normal file
69
3rdparty/nanosvg/example/example2.c
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2013 Mikko Mononen memon@inside.org
|
||||||
|
//
|
||||||
|
// This software is provided 'as-is', without any express or implied
|
||||||
|
// warranty. In no event will the authors be held liable for any damages
|
||||||
|
// arising from the use of this software.
|
||||||
|
// Permission is granted to anyone to use this software for any purpose,
|
||||||
|
// including commercial applications, and to alter it and redistribute it
|
||||||
|
// freely, subject to the following restrictions:
|
||||||
|
// 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
// claim that you wrote the original software. If you use this software
|
||||||
|
// in a product, an acknowledgment in the product documentation would be
|
||||||
|
// appreciated but is not required.
|
||||||
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
// misrepresented as being the original software.
|
||||||
|
// 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <float.h>
|
||||||
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||||
|
#include "stb_image_write.h"
|
||||||
|
#define NANOSVG_IMPLEMENTATION
|
||||||
|
#include "nanosvg.h"
|
||||||
|
#define NANOSVGRAST_IMPLEMENTATION
|
||||||
|
#include "nanosvgrast.h"
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
NSVGimage *image = NULL;
|
||||||
|
NSVGrasterizer *rast = NULL;
|
||||||
|
unsigned char* img = NULL;
|
||||||
|
int w, h;
|
||||||
|
const char* filename = "../example/23.svg";
|
||||||
|
|
||||||
|
printf("parsing %s\n", filename);
|
||||||
|
image = nsvgParseFromFile(filename, "px", 96.0f);
|
||||||
|
if (image == NULL) {
|
||||||
|
printf("Could not open SVG image.\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
w = (int)image->width;
|
||||||
|
h = (int)image->height;
|
||||||
|
|
||||||
|
rast = nsvgCreateRasterizer();
|
||||||
|
if (rast == NULL) {
|
||||||
|
printf("Could not init rasterizer.\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
img = malloc(w*h*4);
|
||||||
|
if (img == NULL) {
|
||||||
|
printf("Could not alloc image buffer.\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("rasterizing image %d x %d\n", w, h);
|
||||||
|
nsvgRasterize(rast, image, 0,0,1, img, w, h, w*4);
|
||||||
|
|
||||||
|
printf("writing svg.png\n");
|
||||||
|
stbi_write_png("svg.png", w, h, 4, img, w*4);
|
||||||
|
|
||||||
|
error:
|
||||||
|
nsvgDeleteRasterizer(rast);
|
||||||
|
nsvgDelete(image);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
27
3rdparty/nanosvg/example/nano.svg
vendored
Normal file
27
3rdparty/nanosvg/example/nano.svg
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="640px" height="480px" viewBox="0 0 640 480" enable-background="new 0 0 640 480" xml:space="preserve">
|
||||||
|
<path d="M282.658,250.271c0,5.31-1.031,10.156-3.087,14.543c-2.059,4.387-4.984,8.152-8.774,11.293
|
||||||
|
c-3.793,3.144-8.477,5.58-14.055,7.312c-5.581,1.731-11.836,2.601-18.767,2.601c-9.968,0-18.605-1.572-25.917-4.713
|
||||||
|
s-13.299-6.986-17.955-11.536l13.812-15.111c4.116,3.684,8.584,6.499,13.405,8.449c4.819,1.95,9.993,2.925,15.518,2.925
|
||||||
|
c5.525,0,9.856-1.219,12.999-3.656c3.141-2.438,4.712-5.769,4.712-9.993c0-2.056-0.3-3.844-0.894-5.361
|
||||||
|
c-0.596-1.517-1.653-2.925-3.168-4.226c-1.518-1.3-3.549-2.519-6.093-3.655c-2.546-1.138-5.768-2.301-9.668-3.494
|
||||||
|
c-6.5-2.056-11.943-4.25-16.33-6.58c-4.387-2.328-7.937-4.9-10.643-7.719c-2.709-2.815-4.659-5.931-5.849-9.343
|
||||||
|
c-1.193-3.412-1.788-7.23-1.788-11.455c0-5.2,1.082-9.831,3.25-13.893c2.166-4.062,5.144-7.5,8.937-10.318
|
||||||
|
c3.791-2.815,8.178-4.956,13.162-6.418c4.981-1.462,10.343-2.193,16.086-2.193c8.449,0,15.842,1.247,22.179,3.737
|
||||||
|
c6.337,2.493,11.997,6.121,16.98,10.887l-12.674,14.624c-7.583-6.281-15.655-9.424-24.21-9.424c-4.875,0-8.721,0.95-11.537,2.844
|
||||||
|
c-2.818,1.896-4.225,4.578-4.225,8.043c0,1.843,0.297,3.412,0.894,4.712c0.594,1.3,1.65,2.519,3.168,3.656
|
||||||
|
c1.516,1.137,3.656,2.249,6.418,3.331c2.763,1.084,6.309,2.33,10.643,3.736c5.306,1.734,10.046,3.631,14.218,5.688
|
||||||
|
c4.169,2.06,7.662,4.524,10.48,7.394c2.815,2.871,4.981,6.174,6.5,9.911C281.898,240.603,282.658,245.071,282.658,250.271z
|
||||||
|
M335.953,260.833l20.637-90.181h27.46l-32.011,112.604h-33.634l-32.173-112.604h28.598l20.311,90.181H335.953z M437.832,286.019
|
||||||
|
c-16.357,0-28.896-5.01-37.615-15.03c-8.722-10.019-13.081-24.779-13.081-44.278c0-9.531,1.407-17.98,4.225-25.348
|
||||||
|
c2.815-7.366,6.688-13.54,11.618-18.524c4.928-4.981,10.668-8.747,17.223-11.293c6.555-2.544,13.568-3.818,21.043-3.818
|
||||||
|
c8.23,0,15.436,1.3,21.611,3.899c6.174,2.6,11.537,5.959,16.086,10.075l-14.137,14.624c-3.467-3.032-6.906-5.281-10.318-6.744
|
||||||
|
s-7.393-2.193-11.941-2.193c-4.01,0-7.693,0.731-11.051,2.193s-6.256,3.793-8.691,6.987c-2.438,3.196-4.334,7.287-5.688,12.268
|
||||||
|
c-1.355,4.984-2.031,10.996-2.031,18.037c0,7.367,0.486,13.567,1.463,18.604c0.975,5.037,2.408,9.1,4.305,12.187
|
||||||
|
c1.895,3.087,4.307,5.309,7.23,6.662c2.926,1.355,6.338,2.031,10.238,2.031c5.631,0,10.613-1.244,14.947-3.737v-25.186h-14.785
|
||||||
|
l-2.6-18.849h43.547v55.57c-5.85,3.793-12.297,6.718-19.336,8.774C453.051,284.987,445.631,286.019,437.832,286.019z M523.5,151.5
|
||||||
|
c0-6.627-5.373-12-12-12h-343c-6.627,0-12,5.373-12,12v150c0,6.627,5.373,12,12,12h343c6.627,0,12-5.373,12-12V151.5z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
BIN
3rdparty/nanosvg/example/screenshot-1.png
vendored
Normal file
BIN
3rdparty/nanosvg/example/screenshot-1.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 59 KiB |
BIN
3rdparty/nanosvg/example/screenshot-2.png
vendored
Normal file
BIN
3rdparty/nanosvg/example/screenshot-2.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 154 KiB |
511
3rdparty/nanosvg/example/stb_image_write.h
vendored
Normal file
511
3rdparty/nanosvg/example/stb_image_write.h
vendored
Normal file
@ -0,0 +1,511 @@
|
|||||||
|
/* stbiw-0.92 - public domain - http://nothings.org/stb/stb_image_write.h
|
||||||
|
writes out PNG/BMP/TGA images to C stdio - Sean Barrett 2010
|
||||||
|
no warranty implied; use at your own risk
|
||||||
|
|
||||||
|
|
||||||
|
Before including,
|
||||||
|
|
||||||
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||||
|
|
||||||
|
in the file that you want to have the implementation.
|
||||||
|
|
||||||
|
|
||||||
|
ABOUT:
|
||||||
|
|
||||||
|
This header file is a library for writing images to C stdio. It could be
|
||||||
|
adapted to write to memory or a general streaming interface; let me know.
|
||||||
|
|
||||||
|
The PNG output is not optimal; it is 20-50% larger than the file
|
||||||
|
written by a decent optimizing implementation. This library is designed
|
||||||
|
for source code compactness and simplicitly, not optimal image file size
|
||||||
|
or run-time performance.
|
||||||
|
|
||||||
|
USAGE:
|
||||||
|
|
||||||
|
There are three functions, one for each image file format:
|
||||||
|
|
||||||
|
int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
|
||||||
|
int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
|
||||||
|
int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
|
||||||
|
|
||||||
|
Each function returns 0 on failure and non-0 on success.
|
||||||
|
|
||||||
|
The functions create an image file defined by the parameters. The image
|
||||||
|
is a rectangle of pixels stored from left-to-right, top-to-bottom.
|
||||||
|
Each pixel contains 'comp' channels of data stored interleaved with 8-bits
|
||||||
|
per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is
|
||||||
|
monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall.
|
||||||
|
The *data pointer points to the first byte of the top-left-most pixel.
|
||||||
|
For PNG, "stride_in_bytes" is the distance in bytes from the first byte of
|
||||||
|
a row of pixels to the first byte of the next row of pixels.
|
||||||
|
|
||||||
|
PNG creates output files with the same number of components as the input.
|
||||||
|
The BMP and TGA formats expand Y to RGB in the file format. BMP does not
|
||||||
|
output alpha.
|
||||||
|
|
||||||
|
PNG supports writing rectangles of data even when the bytes storing rows of
|
||||||
|
data are not consecutive in memory (e.g. sub-rectangles of a larger image),
|
||||||
|
by supplying the stride between the beginning of adjacent rows. The other
|
||||||
|
formats do not. (Thus you cannot write a native-format BMP through the BMP
|
||||||
|
writer, both because it is in BGR order and because it may have padding
|
||||||
|
at the end of the line.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INCLUDE_STB_IMAGE_WRITE_H
|
||||||
|
#define INCLUDE_STB_IMAGE_WRITE_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
|
||||||
|
extern int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
|
||||||
|
extern int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif//INCLUDE_STB_IMAGE_WRITE_H
|
||||||
|
|
||||||
|
#ifdef STB_IMAGE_WRITE_IMPLEMENTATION
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
typedef unsigned int stbiw_uint32;
|
||||||
|
typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1];
|
||||||
|
|
||||||
|
static void writefv(FILE *f, const char *fmt, va_list v)
|
||||||
|
{
|
||||||
|
while (*fmt) {
|
||||||
|
switch (*fmt++) {
|
||||||
|
case ' ': break;
|
||||||
|
case '1': { unsigned char x = (unsigned char) va_arg(v, int); fputc(x,f); break; }
|
||||||
|
case '2': { int x = va_arg(v,int); unsigned char b[2];
|
||||||
|
b[0] = (unsigned char) x; b[1] = (unsigned char) (x>>8);
|
||||||
|
fwrite(b,2,1,f); break; }
|
||||||
|
case '4': { stbiw_uint32 x = va_arg(v,int); unsigned char b[4];
|
||||||
|
b[0]=(unsigned char)x; b[1]=(unsigned char)(x>>8);
|
||||||
|
b[2]=(unsigned char)(x>>16); b[3]=(unsigned char)(x>>24);
|
||||||
|
fwrite(b,4,1,f); break; }
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void write3(FILE *f, unsigned char a, unsigned char b, unsigned char c)
|
||||||
|
{
|
||||||
|
unsigned char arr[3];
|
||||||
|
arr[0] = a, arr[1] = b, arr[2] = c;
|
||||||
|
fwrite(arr, 3, 1, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad)
|
||||||
|
{
|
||||||
|
unsigned char bg[3] = { 255, 0, 255}, px[3];
|
||||||
|
stbiw_uint32 zero = 0;
|
||||||
|
int i,j,k, j_end;
|
||||||
|
|
||||||
|
if (y <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (vdir < 0)
|
||||||
|
j_end = -1, j = y-1;
|
||||||
|
else
|
||||||
|
j_end = y, j = 0;
|
||||||
|
|
||||||
|
for (; j != j_end; j += vdir) {
|
||||||
|
for (i=0; i < x; ++i) {
|
||||||
|
unsigned char *d = (unsigned char *) data + (j*x+i)*comp;
|
||||||
|
if (write_alpha < 0)
|
||||||
|
fwrite(&d[comp-1], 1, 1, f);
|
||||||
|
switch (comp) {
|
||||||
|
case 1:
|
||||||
|
case 2: write3(f, d[0],d[0],d[0]);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (!write_alpha) {
|
||||||
|
// composite against pink background
|
||||||
|
for (k=0; k < 3; ++k)
|
||||||
|
px[k] = bg[k] + ((d[k] - bg[k]) * d[3])/255;
|
||||||
|
write3(f, px[1-rgb_dir],px[1],px[1+rgb_dir]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 3:
|
||||||
|
write3(f, d[1-rgb_dir],d[1],d[1+rgb_dir]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (write_alpha > 0)
|
||||||
|
fwrite(&d[comp-1], 1, 1, f);
|
||||||
|
}
|
||||||
|
fwrite(&zero,scanline_pad,1,f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, int comp, void *data, int alpha, int pad, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
if (y < 0 || x < 0) return 0;
|
||||||
|
f = fopen(filename, "wb");
|
||||||
|
if (f) {
|
||||||
|
va_list v;
|
||||||
|
va_start(v, fmt);
|
||||||
|
writefv(f, fmt, v);
|
||||||
|
va_end(v);
|
||||||
|
write_pixels(f,rgb_dir,vdir,x,y,comp,data,alpha,pad);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
return f != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data)
|
||||||
|
{
|
||||||
|
int pad = (-x*3) & 3;
|
||||||
|
return outfile(filename,-1,-1,x,y,comp,(void *) data,0,pad,
|
||||||
|
"11 4 22 4" "4 44 22 444444",
|
||||||
|
'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header
|
||||||
|
40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header
|
||||||
|
}
|
||||||
|
|
||||||
|
int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data)
|
||||||
|
{
|
||||||
|
int has_alpha = !(comp & 1);
|
||||||
|
return outfile(filename, -1,-1, x, y, comp, (void *) data, has_alpha, 0,
|
||||||
|
"111 221 2222 11", 0,0,2, 0,0,0, 0,0,x,y, 24+8*has_alpha, 8*has_alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
// stretchy buffer; stbi__sbpush() == vector<>::push_back() -- stbi__sbcount() == vector<>::size()
|
||||||
|
#define stbi__sbraw(a) ((int *) (a) - 2)
|
||||||
|
#define stbi__sbm(a) stbi__sbraw(a)[0]
|
||||||
|
#define stbi__sbn(a) stbi__sbraw(a)[1]
|
||||||
|
|
||||||
|
#define stbi__sbneedgrow(a,n) ((a)==0 || stbi__sbn(a)+n >= stbi__sbm(a))
|
||||||
|
#define stbi__sbmaybegrow(a,n) (stbi__sbneedgrow(a,(n)) ? stbi__sbgrow(a,n) : 0)
|
||||||
|
#define stbi__sbgrow(a,n) stbi__sbgrowf((void **) &(a), (n), sizeof(*(a)))
|
||||||
|
|
||||||
|
#define stbi__sbpush(a, v) (stbi__sbmaybegrow(a,1), (a)[stbi__sbn(a)++] = (v))
|
||||||
|
#define stbi__sbcount(a) ((a) ? stbi__sbn(a) : 0)
|
||||||
|
#define stbi__sbfree(a) ((a) ? free(stbi__sbraw(a)),0 : 0)
|
||||||
|
|
||||||
|
static void *stbi__sbgrowf(void **arr, int increment, int itemsize)
|
||||||
|
{
|
||||||
|
int m = *arr ? 2*stbi__sbm(*arr)+increment : increment+1;
|
||||||
|
void *p = realloc(*arr ? stbi__sbraw(*arr) : 0, itemsize * m + sizeof(int)*2);
|
||||||
|
assert(p);
|
||||||
|
if (p) {
|
||||||
|
if (!*arr) ((int *) p)[1] = 0;
|
||||||
|
*arr = (void *) ((int *) p + 2);
|
||||||
|
stbi__sbm(*arr) = m;
|
||||||
|
}
|
||||||
|
return *arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned char *stbi__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount)
|
||||||
|
{
|
||||||
|
while (*bitcount >= 8) {
|
||||||
|
stbi__sbpush(data, (unsigned char) *bitbuffer);
|
||||||
|
*bitbuffer >>= 8;
|
||||||
|
*bitcount -= 8;
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int stbi__zlib_bitrev(int code, int codebits)
|
||||||
|
{
|
||||||
|
int res=0;
|
||||||
|
while (codebits--) {
|
||||||
|
res = (res << 1) | (code & 1);
|
||||||
|
code >>= 1;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int stbi__zlib_countm(unsigned char *a, unsigned char *b, int limit)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i=0; i < limit && i < 258; ++i)
|
||||||
|
if (a[i] != b[i]) break;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int stbi__zhash(unsigned char *data)
|
||||||
|
{
|
||||||
|
stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16);
|
||||||
|
hash ^= hash << 3;
|
||||||
|
hash += hash >> 5;
|
||||||
|
hash ^= hash << 4;
|
||||||
|
hash += hash >> 17;
|
||||||
|
hash ^= hash << 25;
|
||||||
|
hash += hash >> 6;
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define stbi__zlib_flush() (out = stbi__zlib_flushf(out, &bitbuf, &bitcount))
|
||||||
|
#define stbi__zlib_add(code,codebits) \
|
||||||
|
(bitbuf |= (code) << bitcount, bitcount += (codebits), stbi__zlib_flush())
|
||||||
|
#define stbi__zlib_huffa(b,c) stbi__zlib_add(stbi__zlib_bitrev(b,c),c)
|
||||||
|
// default huffman tables
|
||||||
|
#define stbi__zlib_huff1(n) stbi__zlib_huffa(0x30 + (n), 8)
|
||||||
|
#define stbi__zlib_huff2(n) stbi__zlib_huffa(0x190 + (n)-144, 9)
|
||||||
|
#define stbi__zlib_huff3(n) stbi__zlib_huffa(0 + (n)-256,7)
|
||||||
|
#define stbi__zlib_huff4(n) stbi__zlib_huffa(0xc0 + (n)-280,8)
|
||||||
|
#define stbi__zlib_huff(n) ((n) <= 143 ? stbi__zlib_huff1(n) : (n) <= 255 ? stbi__zlib_huff2(n) : (n) <= 279 ? stbi__zlib_huff3(n) : stbi__zlib_huff4(n))
|
||||||
|
#define stbi__zlib_huffb(n) ((n) <= 143 ? stbi__zlib_huff1(n) : stbi__zlib_huff2(n))
|
||||||
|
|
||||||
|
#define stbi__ZHASH 16384
|
||||||
|
|
||||||
|
unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality)
|
||||||
|
{
|
||||||
|
static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 };
|
||||||
|
static unsigned char lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 };
|
||||||
|
static unsigned short distc[] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 };
|
||||||
|
static unsigned char disteb[] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 };
|
||||||
|
unsigned int bitbuf=0;
|
||||||
|
int i,j, bitcount=0;
|
||||||
|
unsigned char *out = NULL;
|
||||||
|
unsigned char **hash_table[stbi__ZHASH]; // 64KB on the stack!
|
||||||
|
if (quality < 5) quality = 5;
|
||||||
|
|
||||||
|
stbi__sbpush(out, 0x78); // DEFLATE 32K window
|
||||||
|
stbi__sbpush(out, 0x5e); // FLEVEL = 1
|
||||||
|
stbi__zlib_add(1,1); // BFINAL = 1
|
||||||
|
stbi__zlib_add(1,2); // BTYPE = 1 -- fixed huffman
|
||||||
|
|
||||||
|
for (i=0; i < stbi__ZHASH; ++i)
|
||||||
|
hash_table[i] = NULL;
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
while (i < data_len-3) {
|
||||||
|
// hash next 3 bytes of data to be compressed
|
||||||
|
int h = stbi__zhash(data+i)&(stbi__ZHASH-1), best=3;
|
||||||
|
unsigned char *bestloc = 0;
|
||||||
|
unsigned char **hlist = hash_table[h];
|
||||||
|
int n = stbi__sbcount(hlist);
|
||||||
|
for (j=0; j < n; ++j) {
|
||||||
|
if (hlist[j]-data > i-32768) { // if entry lies within window
|
||||||
|
int d = stbi__zlib_countm(hlist[j], data+i, data_len-i);
|
||||||
|
if (d >= best) best=d,bestloc=hlist[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// when hash table entry is too long, delete half the entries
|
||||||
|
if (hash_table[h] && stbi__sbn(hash_table[h]) == 2*quality) {
|
||||||
|
memcpy(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality);
|
||||||
|
stbi__sbn(hash_table[h]) = quality;
|
||||||
|
}
|
||||||
|
stbi__sbpush(hash_table[h],data+i);
|
||||||
|
|
||||||
|
if (bestloc) {
|
||||||
|
// "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal
|
||||||
|
h = stbi__zhash(data+i+1)&(stbi__ZHASH-1);
|
||||||
|
hlist = hash_table[h];
|
||||||
|
n = stbi__sbcount(hlist);
|
||||||
|
for (j=0; j < n; ++j) {
|
||||||
|
if (hlist[j]-data > i-32767) {
|
||||||
|
int e = stbi__zlib_countm(hlist[j], data+i+1, data_len-i-1);
|
||||||
|
if (e > best) { // if next match is better, bail on current match
|
||||||
|
bestloc = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bestloc) {
|
||||||
|
int d = data+i - bestloc; // distance back
|
||||||
|
assert(d <= 32767 && best <= 258);
|
||||||
|
for (j=0; best > lengthc[j+1]-1; ++j);
|
||||||
|
stbi__zlib_huff(j+257);
|
||||||
|
if (lengtheb[j]) stbi__zlib_add(best - lengthc[j], lengtheb[j]);
|
||||||
|
for (j=0; d > distc[j+1]-1; ++j);
|
||||||
|
stbi__zlib_add(stbi__zlib_bitrev(j,5),5);
|
||||||
|
if (disteb[j]) stbi__zlib_add(d - distc[j], disteb[j]);
|
||||||
|
i += best;
|
||||||
|
} else {
|
||||||
|
stbi__zlib_huffb(data[i]);
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// write out final bytes
|
||||||
|
for (;i < data_len; ++i)
|
||||||
|
stbi__zlib_huffb(data[i]);
|
||||||
|
stbi__zlib_huff(256); // end of block
|
||||||
|
// pad with 0 bits to byte boundary
|
||||||
|
while (bitcount)
|
||||||
|
stbi__zlib_add(0,1);
|
||||||
|
|
||||||
|
for (i=0; i < stbi__ZHASH; ++i)
|
||||||
|
(void) stbi__sbfree(hash_table[i]);
|
||||||
|
|
||||||
|
{
|
||||||
|
// compute adler32 on input
|
||||||
|
unsigned int i=0, s1=1, s2=0, blocklen = data_len % 5552;
|
||||||
|
int j=0;
|
||||||
|
while (j < data_len) {
|
||||||
|
for (i=0; i < blocklen; ++i) s1 += data[j+i], s2 += s1;
|
||||||
|
s1 %= 65521, s2 %= 65521;
|
||||||
|
j += blocklen;
|
||||||
|
blocklen = 5552;
|
||||||
|
}
|
||||||
|
stbi__sbpush(out, (unsigned char) (s2 >> 8));
|
||||||
|
stbi__sbpush(out, (unsigned char) s2);
|
||||||
|
stbi__sbpush(out, (unsigned char) (s1 >> 8));
|
||||||
|
stbi__sbpush(out, (unsigned char) s1);
|
||||||
|
}
|
||||||
|
*out_len = stbi__sbn(out);
|
||||||
|
// make returned pointer freeable
|
||||||
|
memmove(stbi__sbraw(out), out, *out_len);
|
||||||
|
return (unsigned char *) stbi__sbraw(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int stbi__crc32(unsigned char *buffer, int len)
|
||||||
|
{
|
||||||
|
static unsigned int crc_table[256];
|
||||||
|
unsigned int crc = ~0u;
|
||||||
|
int i,j;
|
||||||
|
if (crc_table[1] == 0)
|
||||||
|
for(i=0; i < 256; i++)
|
||||||
|
for (crc_table[i]=i, j=0; j < 8; ++j)
|
||||||
|
crc_table[i] = (crc_table[i] >> 1) ^ (crc_table[i] & 1 ? 0xedb88320 : 0);
|
||||||
|
for (i=0; i < len; ++i)
|
||||||
|
crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)];
|
||||||
|
return ~crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define stbi__wpng4(o,a,b,c,d) ((o)[0]=(unsigned char)(a),(o)[1]=(unsigned char)(b),(o)[2]=(unsigned char)(c),(o)[3]=(unsigned char)(d),(o)+=4)
|
||||||
|
#define stbi__wp32(data,v) stbi__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v));
|
||||||
|
#define stbi__wptag(data,s) stbi__wpng4(data, s[0],s[1],s[2],s[3])
|
||||||
|
|
||||||
|
static void stbi__wpcrc(unsigned char **data, int len)
|
||||||
|
{
|
||||||
|
unsigned int crc = stbi__crc32(*data - len - 4, len+4);
|
||||||
|
stbi__wp32(*data, crc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned char stbi__paeth(int a, int b, int c)
|
||||||
|
{
|
||||||
|
int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c);
|
||||||
|
if (pa <= pb && pa <= pc) return (unsigned char) a;
|
||||||
|
if (pb <= pc) return (unsigned char) b;
|
||||||
|
return (unsigned char) c;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *stbi_write_png_to_mem(unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len)
|
||||||
|
{
|
||||||
|
int ctype[5] = { -1, 0, 4, 2, 6 };
|
||||||
|
unsigned char sig[8] = { 137,80,78,71,13,10,26,10 };
|
||||||
|
unsigned char *out,*o, *filt, *zlib;
|
||||||
|
signed char *line_buffer;
|
||||||
|
int i,j,k,p,zlen;
|
||||||
|
|
||||||
|
if (stride_bytes == 0)
|
||||||
|
stride_bytes = x * n;
|
||||||
|
|
||||||
|
filt = (unsigned char *) malloc((x*n+1) * y); if (!filt) return 0;
|
||||||
|
line_buffer = (signed char *) malloc(x * n); if (!line_buffer) { free(filt); return 0; }
|
||||||
|
for (j=0; j < y; ++j) {
|
||||||
|
static int mapping[] = { 0,1,2,3,4 };
|
||||||
|
static int firstmap[] = { 0,1,0,5,6 };
|
||||||
|
int *mymap = j ? mapping : firstmap;
|
||||||
|
int best = 0, bestval = 0x7fffffff;
|
||||||
|
for (p=0; p < 2; ++p) {
|
||||||
|
for (k= p?best:0; k < 5; ++k) {
|
||||||
|
int type = mymap[k],est=0;
|
||||||
|
unsigned char *z = pixels + stride_bytes*j;
|
||||||
|
for (i=0; i < n; ++i)
|
||||||
|
switch (type) {
|
||||||
|
case 0: line_buffer[i] = z[i]; break;
|
||||||
|
case 1: line_buffer[i] = z[i]; break;
|
||||||
|
case 2: line_buffer[i] = z[i] - z[i-stride_bytes]; break;
|
||||||
|
case 3: line_buffer[i] = z[i] - (z[i-stride_bytes]>>1); break;
|
||||||
|
case 4: line_buffer[i] = (signed char) (z[i] - stbi__paeth(0,z[i-stride_bytes],0)); break;
|
||||||
|
case 5: line_buffer[i] = z[i]; break;
|
||||||
|
case 6: line_buffer[i] = z[i]; break;
|
||||||
|
}
|
||||||
|
for (i=n; i < x*n; ++i) {
|
||||||
|
switch (type) {
|
||||||
|
case 0: line_buffer[i] = z[i]; break;
|
||||||
|
case 1: line_buffer[i] = z[i] - z[i-n]; break;
|
||||||
|
case 2: line_buffer[i] = z[i] - z[i-stride_bytes]; break;
|
||||||
|
case 3: line_buffer[i] = z[i] - ((z[i-n] + z[i-stride_bytes])>>1); break;
|
||||||
|
case 4: line_buffer[i] = z[i] - stbi__paeth(z[i-n], z[i-stride_bytes], z[i-stride_bytes-n]); break;
|
||||||
|
case 5: line_buffer[i] = z[i] - (z[i-n]>>1); break;
|
||||||
|
case 6: line_buffer[i] = z[i] - stbi__paeth(z[i-n], 0,0); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (p) break;
|
||||||
|
for (i=0; i < x*n; ++i)
|
||||||
|
est += abs((signed char) line_buffer[i]);
|
||||||
|
if (est < bestval) { bestval = est; best = k; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// when we get here, best contains the filter type, and line_buffer contains the data
|
||||||
|
filt[j*(x*n+1)] = (unsigned char) best;
|
||||||
|
memcpy(filt+j*(x*n+1)+1, line_buffer, x*n);
|
||||||
|
}
|
||||||
|
free(line_buffer);
|
||||||
|
zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, 8); // increase 8 to get smaller but use more memory
|
||||||
|
free(filt);
|
||||||
|
if (!zlib) return 0;
|
||||||
|
|
||||||
|
// each tag requires 12 bytes of overhead
|
||||||
|
out = (unsigned char *) malloc(8 + 12+13 + 12+zlen + 12);
|
||||||
|
if (!out) return 0;
|
||||||
|
*out_len = 8 + 12+13 + 12+zlen + 12;
|
||||||
|
|
||||||
|
o=out;
|
||||||
|
memcpy(o,sig,8); o+= 8;
|
||||||
|
stbi__wp32(o, 13); // header length
|
||||||
|
stbi__wptag(o, "IHDR");
|
||||||
|
stbi__wp32(o, x);
|
||||||
|
stbi__wp32(o, y);
|
||||||
|
*o++ = 8;
|
||||||
|
*o++ = (unsigned char) ctype[n];
|
||||||
|
*o++ = 0;
|
||||||
|
*o++ = 0;
|
||||||
|
*o++ = 0;
|
||||||
|
stbi__wpcrc(&o,13);
|
||||||
|
|
||||||
|
stbi__wp32(o, zlen);
|
||||||
|
stbi__wptag(o, "IDAT");
|
||||||
|
memcpy(o, zlib, zlen); o += zlen; free(zlib);
|
||||||
|
stbi__wpcrc(&o, zlen);
|
||||||
|
|
||||||
|
stbi__wp32(o,0);
|
||||||
|
stbi__wptag(o, "IEND");
|
||||||
|
stbi__wpcrc(&o,0);
|
||||||
|
|
||||||
|
assert(o == out + *out_len);
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
int len;
|
||||||
|
unsigned char *png = stbi_write_png_to_mem((unsigned char *) data, stride_bytes, x, y, comp, &len);
|
||||||
|
if (!png) return 0;
|
||||||
|
f = fopen(filename, "wb");
|
||||||
|
if (!f) { free(png); return 0; }
|
||||||
|
fwrite(png, 1, len, f);
|
||||||
|
fclose(f);
|
||||||
|
free(png);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif // STB_IMAGE_WRITE_IMPLEMENTATION
|
||||||
|
|
||||||
|
/* Revision history
|
||||||
|
|
||||||
|
0.92 (2010-08-01)
|
||||||
|
casts to unsigned char to fix warnings
|
||||||
|
0.91 (2010-07-17)
|
||||||
|
first public release
|
||||||
|
0.90 first internal release
|
||||||
|
*/
|
56
3rdparty/nanosvg/premake4.lua
vendored
Normal file
56
3rdparty/nanosvg/premake4.lua
vendored
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
local action = _ACTION or ""
|
||||||
|
|
||||||
|
solution "nanosvg"
|
||||||
|
location ( "build" )
|
||||||
|
configurations { "Debug", "Release" }
|
||||||
|
platforms {"native", "x64", "x32"}
|
||||||
|
|
||||||
|
project "example1"
|
||||||
|
kind "ConsoleApp"
|
||||||
|
language "C++"
|
||||||
|
files { "example/example1.c", "example/*.h", "src/*.h" }
|
||||||
|
includedirs { "example", "src" }
|
||||||
|
targetdir("build")
|
||||||
|
|
||||||
|
configuration { "linux" }
|
||||||
|
links { "X11","Xrandr", "rt", "GL", "GLU", "pthread", "glfw" }
|
||||||
|
|
||||||
|
configuration { "windows" }
|
||||||
|
links { "glu32","opengl32", "gdi32", "winmm", "user32" }
|
||||||
|
|
||||||
|
configuration { "macosx" }
|
||||||
|
links { "glfw3" }
|
||||||
|
linkoptions { "-framework OpenGL", "-framework Cocoa", "-framework IOKit", "-framework CoreVideo" }
|
||||||
|
|
||||||
|
configuration "Debug"
|
||||||
|
defines { "DEBUG" }
|
||||||
|
flags { "Symbols", "ExtraWarnings"}
|
||||||
|
|
||||||
|
configuration "Release"
|
||||||
|
defines { "NDEBUG" }
|
||||||
|
flags { "Optimize", "ExtraWarnings"}
|
||||||
|
|
||||||
|
project "example2"
|
||||||
|
kind "ConsoleApp"
|
||||||
|
language "C++"
|
||||||
|
files { "example/example2.c", "example/*.h", "src/*.h" }
|
||||||
|
includedirs { "example", "src" }
|
||||||
|
targetdir("build")
|
||||||
|
|
||||||
|
configuration { "linux" }
|
||||||
|
links { "X11","Xrandr", "rt", "pthread" }
|
||||||
|
|
||||||
|
configuration { "windows" }
|
||||||
|
links { "winmm", "user32" }
|
||||||
|
|
||||||
|
configuration { "macosx" }
|
||||||
|
linkoptions { "-framework Cocoa", "-framework IOKit" }
|
||||||
|
|
||||||
|
configuration "Debug"
|
||||||
|
defines { "DEBUG" }
|
||||||
|
flags { "Symbols", "ExtraWarnings"}
|
||||||
|
|
||||||
|
configuration "Release"
|
||||||
|
defines { "NDEBUG" }
|
||||||
|
flags { "Optimize", "ExtraWarnings"}
|
3057
3rdparty/nanosvg/src/nanosvg.h
vendored
Normal file
3057
3rdparty/nanosvg/src/nanosvg.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1452
3rdparty/nanosvg/src/nanosvgrast.h
vendored
Normal file
1452
3rdparty/nanosvg/src/nanosvgrast.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
143
output.txt
Normal file
143
output.txt
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Creating ../../../../linux_gcc/bin/x64/Release
|
||||||
|
Compiling 3rdparty/lzma/C/7zAlloc.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zArcIn.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zBuf.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zBuf2.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zCrc.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zCrcOpt.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zDec.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zFile.c...
|
||||||
|
Compiling 3rdparty/lzma/C/7zStream.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Aes.c...
|
||||||
|
Compiling 3rdparty/lzma/C/AesOpt.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Alloc.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Bcj2.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Bra.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Bra86.c...
|
||||||
|
Compiling 3rdparty/lzma/C/BraIA64.c...
|
||||||
|
Compiling 3rdparty/lzma/C/CpuArch.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Delta.c...
|
||||||
|
Compiling 3rdparty/lzma/C/LzFind.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Lzma2Dec.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Lzma2Enc.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Lzma86Dec.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Lzma86Enc.c...
|
||||||
|
Compiling 3rdparty/lzma/C/LzmaDec.c...
|
||||||
|
Compiling 3rdparty/lzma/C/LzmaEnc.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Ppmd7.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Ppmd7Dec.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Ppmd7Enc.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Sha256.c...
|
||||||
|
Compiling 3rdparty/lzma/C/Sort.c...
|
||||||
|
Archiving lib7z.a...
|
||||||
|
bash$ mkfile=expat.make
|
||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Compiling 3rdparty/expat/lib/xmlparse.c...
|
||||||
|
Compiling 3rdparty/expat/lib/xmlrole.c...
|
||||||
|
Compiling 3rdparty/expat/lib/xmltok.c...
|
||||||
|
Archiving libexpat.a...
|
||||||
|
bash$ mkfile=flac.make
|
||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/bitmath.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/bitreader.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/bitwriter.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/cpu.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/crc.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/fixed.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/float.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/format.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/lpc.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/md5.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/memory.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/stream_decoder.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/stream_encoder.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/stream_encoder_framing.c...
|
||||||
|
Compiling 3rdparty/libflac/src/libFLAC/window.c...
|
||||||
|
Archiving libflac.a...
|
||||||
|
bash$ mkfile=ocore_sdl.make
|
||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Creating ../../../../linux_gcc/bin/x64/Release/mame_mame
|
||||||
|
Compiling src/osd/modules/osdmodule.cpp...
|
||||||
|
Compiling src/osd/osdcore.cpp...
|
||||||
|
Compiling src/osd/osdsync.cpp...
|
||||||
|
Compiling src/osd/strconv.cpp...
|
||||||
|
Compiling src/osd/modules/file/posixdir.cpp...
|
||||||
|
Compiling src/osd/modules/file/posixfile.cpp...
|
||||||
|
Compiling src/osd/modules/file/posixptty.cpp...
|
||||||
|
Compiling src/osd/modules/file/posixsocket.cpp...
|
||||||
|
Compiling src/osd/modules/lib/osdlib_unix.cpp...
|
||||||
|
Archiving libocore_sdl.a...
|
||||||
|
bash$ mkfile=utf8proc.make
|
||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Compiling 3rdparty/utf8proc/utf8proc.c...
|
||||||
|
Archiving libutf8proc.a...
|
||||||
|
bash$ mkfile=ut
|
||||||
|
utf8proc.make utils.make
|
||||||
|
bash$ mkfile=utils.make
|
||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Compiling src/lib/util/avhuff.cpp...
|
||||||
|
Compiling src/lib/util/aviio.cpp...
|
||||||
|
Compiling src/lib/util/bitmap.cpp...
|
||||||
|
Compiling src/lib/util/cdrom.cpp...
|
||||||
|
Compiling src/lib/util/chd.cpp...
|
||||||
|
Compiling src/lib/util/chdcd.cpp...
|
||||||
|
Compiling src/lib/util/chdcodec.cpp...
|
||||||
|
Compiling src/lib/util/corealloc.cpp...
|
||||||
|
Compiling src/lib/util/corefile.cpp...
|
||||||
|
Compiling src/lib/util/corestr.cpp...
|
||||||
|
Compiling src/lib/util/coreutil.cpp...
|
||||||
|
Compiling src/lib/util/delegate.cpp...
|
||||||
|
Compiling src/lib/util/disasmintf.cpp...
|
||||||
|
Compiling src/lib/util/dynamicclass.cpp...
|
||||||
|
Compiling src/lib/util/flac.cpp...
|
||||||
|
Compiling src/lib/util/harddisk.cpp...
|
||||||
|
Compiling src/lib/util/hash.cpp...
|
||||||
|
Compiling src/lib/util/hashing.cpp...
|
||||||
|
Compiling src/lib/util/huffman.cpp...
|
||||||
|
Compiling src/lib/util/ioprocs.cpp...
|
||||||
|
Compiling src/lib/util/ioprocsfilter.cpp...
|
||||||
|
Compiling src/lib/util/jedparse.cpp...
|
||||||
|
Compiling src/lib/util/language.cpp...
|
||||||
|
Compiling src/lib/util/md5.cpp...
|
||||||
|
Compiling src/lib/util/msdib.cpp...
|
||||||
|
Compiling src/lib/util/nanosvg.cpp...
|
||||||
|
Compiling src/lib/util/opresolv.cpp...
|
||||||
|
Compiling src/lib/util/options.cpp...
|
||||||
|
Compiling src/lib/util/palette.cpp...
|
||||||
|
Compiling src/lib/util/path.cpp...
|
||||||
|
Compiling src/lib/util/path_to_regex.cpp...
|
||||||
|
Compiling src/lib/util/plaparse.cpp...
|
||||||
|
Compiling src/lib/util/png.cpp...
|
||||||
|
Compiling src/lib/util/strformat.cpp...
|
||||||
|
Compiling src/lib/util/timeconv.cpp...
|
||||||
|
Compiling src/lib/util/un7z.cpp...
|
||||||
|
Compiling src/lib/util/unicode.cpp...
|
||||||
|
Compiling src/lib/util/unzip.cpp...
|
||||||
|
Compiling src/lib/util/vbiparse.cpp...
|
||||||
|
Compiling src/lib/util/vecstream.cpp...
|
||||||
|
Compiling src/lib/util/wavwrite.cpp...
|
||||||
|
Compiling src/lib/util/xmlfile.cpp...
|
||||||
|
Compiling src/lib/util/zippath.cpp...
|
||||||
|
Archiving libutils.a...
|
||||||
|
bash$ mkfile=zlib.make
|
||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Compiling 3rdparty/zlib/adler32.c...
|
||||||
|
Compiling 3rdparty/zlib/compress.c...
|
||||||
|
Compiling 3rdparty/zlib/crc32.c...
|
||||||
|
Compiling 3rdparty/zlib/deflate.c...
|
||||||
|
Compiling 3rdparty/zlib/infback.c...
|
||||||
|
Compiling 3rdparty/zlib/inffast.c...
|
||||||
|
Compiling 3rdparty/zlib/inflate.c...
|
||||||
|
Compiling 3rdparty/zlib/inftrees.c...
|
||||||
|
Compiling 3rdparty/zlib/trees.c...
|
||||||
|
Compiling 3rdparty/zlib/uncompr.c...
|
||||||
|
Compiling 3rdparty/zlib/zutil.c...
|
||||||
|
Archiving libzlib.a...
|
||||||
|
bash$ mkfile=chdman.make
|
||||||
|
bash$ make -f "$mkfile" -j$(nproc) config=release64 CPPFLAGS=-I/usr/include/x86_64-linux-gnu/
|
||||||
|
Compiling src/tools/chdman.cpp...
|
||||||
|
Compiling generated/version.cpp...
|
||||||
|
Linking chdman...
|
||||||
|
bash$
|
||||||
|
|
702
src/icludes/frontend/mame/audit.cpp
Normal file
702
src/icludes/frontend/mame/audit.cpp
Normal file
@ -0,0 +1,702 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
audit.cpp
|
||||||
|
|
||||||
|
ROM set auditing functions.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "audit.h"
|
||||||
|
|
||||||
|
#include "sound/samples.h"
|
||||||
|
|
||||||
|
#include "emuopts.h"
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "romload.h"
|
||||||
|
#include "softlist_dev.h"
|
||||||
|
|
||||||
|
#include "chd.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
//#define VERBOSE 1
|
||||||
|
#define LOG_OUTPUT_FUNC osd_printf_verbose
|
||||||
|
#include "logmacro.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct parent_rom
|
||||||
|
{
|
||||||
|
parent_rom(device_type t, rom_entry const *r) : type(t), name(r->name()), hashes(r->hashdata()), length(rom_file_size(r)) { }
|
||||||
|
|
||||||
|
std::reference_wrapper<std::remove_reference_t<device_type> > type;
|
||||||
|
std::string name;
|
||||||
|
util::hash_collection hashes;
|
||||||
|
uint64_t length;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class parent_rom_vector : public std::vector<parent_rom>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using std::vector<parent_rom>::vector;
|
||||||
|
|
||||||
|
void remove_redundant_parents()
|
||||||
|
{
|
||||||
|
while (!empty())
|
||||||
|
{
|
||||||
|
// find where the next parent starts
|
||||||
|
auto const last(
|
||||||
|
std::find_if(
|
||||||
|
std::next(cbegin()),
|
||||||
|
cend(),
|
||||||
|
[this] (parent_rom const &r) { return &front().type.get() != &r.type.get(); }));
|
||||||
|
|
||||||
|
// examine dumped ROMs in this generation
|
||||||
|
for (auto i = cbegin(); last != i; ++i)
|
||||||
|
{
|
||||||
|
if (!i->hashes.flag(util::hash_collection::FLAG_NO_DUMP))
|
||||||
|
{
|
||||||
|
auto const match(
|
||||||
|
std::find_if(
|
||||||
|
last,
|
||||||
|
cend(),
|
||||||
|
[&i] (parent_rom const &r) { return (i->length == r.length) && (i->hashes == r.hashes); }));
|
||||||
|
if (cend() == match)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
erase(cbegin(), last);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::add_pointer_t<device_type> find_shared_device(device_t ¤t, std::string_view name, util::hash_collection const &hashes, uint64_t length) const
|
||||||
|
{
|
||||||
|
// if we're examining a child device, it will always have a perfect match
|
||||||
|
if (current.owner())
|
||||||
|
return ¤t.type();
|
||||||
|
|
||||||
|
// scan backwards through parents for a matching definition
|
||||||
|
bool const dumped(!hashes.flag(util::hash_collection::FLAG_NO_DUMP));
|
||||||
|
std::add_pointer_t<device_type> best(nullptr);
|
||||||
|
for (const_reverse_iterator it = crbegin(); crend() != it; ++it)
|
||||||
|
{
|
||||||
|
if (it->length == length)
|
||||||
|
{
|
||||||
|
if (dumped)
|
||||||
|
{
|
||||||
|
if (it->hashes == hashes)
|
||||||
|
return &it->type.get();
|
||||||
|
}
|
||||||
|
else if (it->name == name)
|
||||||
|
{
|
||||||
|
if (it->hashes.flag(util::hash_collection::FLAG_NO_DUMP))
|
||||||
|
return &it->type.get();
|
||||||
|
else if (!best)
|
||||||
|
best = &it->type.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return best;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<std::add_pointer_t<device_type>, bool> actual_matches_shared(device_t ¤t, media_auditor::audit_record const &record)
|
||||||
|
{
|
||||||
|
// no result if no matching file was found
|
||||||
|
if ((record.status() != media_auditor::audit_status::GOOD) && (record.status() != media_auditor::audit_status::FOUND_INVALID))
|
||||||
|
return std::make_pair(nullptr, false);
|
||||||
|
|
||||||
|
// if we're examining a child device, scan it first
|
||||||
|
bool matches_device_undumped(false);
|
||||||
|
if (current.owner())
|
||||||
|
{
|
||||||
|
for (const rom_entry *region = rom_first_region(current); region; region = rom_next_region(region))
|
||||||
|
{
|
||||||
|
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
|
||||||
|
{
|
||||||
|
if (rom_file_size(rom) == record.actual_length())
|
||||||
|
{
|
||||||
|
util::hash_collection const hashes(rom->hashdata());
|
||||||
|
if (hashes == record.actual_hashes())
|
||||||
|
return std::make_pair(¤t.type(), empty());
|
||||||
|
else if (hashes.flag(util::hash_collection::FLAG_NO_DUMP) && (rom->name() == record.name()))
|
||||||
|
matches_device_undumped = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// look for a matching parent ROM
|
||||||
|
std::add_pointer_t<device_type> closest_bad(nullptr);
|
||||||
|
for (const_reverse_iterator it = crbegin(); crend() != it; ++it)
|
||||||
|
{
|
||||||
|
if (it->length == record.actual_length())
|
||||||
|
{
|
||||||
|
if (it->hashes == record.actual_hashes())
|
||||||
|
return std::make_pair(&it->type.get(), it->type.get() == front().type.get());
|
||||||
|
else if (it->hashes.flag(util::hash_collection::FLAG_NO_DUMP) && (it->name == record.name()))
|
||||||
|
closest_bad = &it->type.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fall back to the nearest bad dump
|
||||||
|
if (closest_bad)
|
||||||
|
return std::make_pair(closest_bad, front().type.get() == *closest_bad);
|
||||||
|
else if (matches_device_undumped)
|
||||||
|
return std::make_pair(¤t.type(), empty());
|
||||||
|
else
|
||||||
|
return std::make_pair(nullptr, false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// CORE FUNCTIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// media_auditor - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_auditor::media_auditor(const driver_enumerator &enumerator)
|
||||||
|
: m_enumerator(enumerator)
|
||||||
|
, m_validation(AUDIT_VALIDATE_FULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_media - audit the media described by the
|
||||||
|
// currently-enumerated driver
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_auditor::summary media_auditor::audit_media(const char *validation)
|
||||||
|
{
|
||||||
|
// start fresh
|
||||||
|
m_record_list.clear();
|
||||||
|
|
||||||
|
// store validation for later
|
||||||
|
m_validation = validation;
|
||||||
|
|
||||||
|
// first walk the parent chain for required ROMs
|
||||||
|
parent_rom_vector parentroms;
|
||||||
|
for (auto drvindex = m_enumerator.find(m_enumerator.driver().parent); 0 <= drvindex; drvindex = m_enumerator.find(m_enumerator.driver(drvindex).parent))
|
||||||
|
{
|
||||||
|
game_driver const &parent(m_enumerator.driver(drvindex));
|
||||||
|
LOG("Checking parent %s for ROM files\n", parent.type.shortname());
|
||||||
|
std::vector<rom_entry> const roms(rom_build_entries(parent.rom));
|
||||||
|
for (rom_entry const *region = rom_first_region(&roms.front()); region; region = rom_next_region(region))
|
||||||
|
{
|
||||||
|
for (rom_entry const *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
|
||||||
|
{
|
||||||
|
LOG("Adding parent ROM %s\n", rom->name());
|
||||||
|
parentroms.emplace_back(parent.type, rom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parentroms.remove_redundant_parents();
|
||||||
|
|
||||||
|
// count ROMs required/found
|
||||||
|
std::size_t found(0);
|
||||||
|
std::size_t required(0);
|
||||||
|
std::size_t shared_found(0);
|
||||||
|
std::size_t shared_required(0);
|
||||||
|
std::size_t parent_found(0);
|
||||||
|
|
||||||
|
// iterate over devices and regions
|
||||||
|
std::vector<std::string> searchpath;
|
||||||
|
for (device_t &device : device_enumerator(m_enumerator.config()->root_device()))
|
||||||
|
{
|
||||||
|
searchpath.clear();
|
||||||
|
|
||||||
|
// now iterate over regions and ROMs within
|
||||||
|
for (const rom_entry *region = rom_first_region(device); region; region = rom_next_region(region))
|
||||||
|
{
|
||||||
|
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
|
||||||
|
{
|
||||||
|
if (searchpath.empty())
|
||||||
|
{
|
||||||
|
LOG("Audit media for device %s(%s)\n", device.shortname(), device.tag());
|
||||||
|
searchpath = device.searchpath();
|
||||||
|
}
|
||||||
|
|
||||||
|
// look for a matching parent or device ROM
|
||||||
|
std::string const &name(rom->name());
|
||||||
|
util::hash_collection const hashes(rom->hashdata());
|
||||||
|
bool const dumped(!hashes.flag(util::hash_collection::FLAG_NO_DUMP));
|
||||||
|
std::add_pointer_t<device_type> const shared_device(parentroms.find_shared_device(device, name, hashes, rom_file_size(rom)));
|
||||||
|
if (shared_device)
|
||||||
|
LOG("File '%s' %s%sdumped shared with %s\n", name, ROM_ISOPTIONAL(rom) ? "optional " : "", dumped ? "" : "un", shared_device->shortname());
|
||||||
|
else
|
||||||
|
LOG("File '%s' %s%sdumped\n", name, ROM_ISOPTIONAL(rom) ? "optional " : "", dumped ? "" : "un");
|
||||||
|
|
||||||
|
// count the number of files with hashes
|
||||||
|
if (dumped && !ROM_ISOPTIONAL(rom))
|
||||||
|
{
|
||||||
|
required++;
|
||||||
|
if (shared_device)
|
||||||
|
shared_required++;
|
||||||
|
}
|
||||||
|
|
||||||
|
audit_record *record(nullptr);
|
||||||
|
if (ROMREGION_ISROMDATA(region))
|
||||||
|
record = &audit_one_rom(searchpath, rom);
|
||||||
|
else if (ROMREGION_ISDISKDATA(region))
|
||||||
|
record = &audit_one_disk(rom, device);
|
||||||
|
|
||||||
|
if (record)
|
||||||
|
{
|
||||||
|
// see if the actual content found belongs to a parent
|
||||||
|
auto const matchesshared(parentroms.actual_matches_shared(device, *record));
|
||||||
|
if (matchesshared.first)
|
||||||
|
LOG("Actual ROM file shared with %sparent %s\n", matchesshared.second ? "immediate " : "", matchesshared.first->shortname());
|
||||||
|
|
||||||
|
// count the number of files that are found.
|
||||||
|
if ((record->status() == audit_status::GOOD) || ((record->status() == audit_status::FOUND_INVALID) && !matchesshared.first))
|
||||||
|
{
|
||||||
|
found++;
|
||||||
|
if (shared_device)
|
||||||
|
shared_found++;
|
||||||
|
if (matchesshared.second)
|
||||||
|
parent_found++;
|
||||||
|
}
|
||||||
|
|
||||||
|
record->set_shared_device(shared_device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!searchpath.empty())
|
||||||
|
LOG("Total required=%u (shared=%u) found=%u (shared=%u parent=%u)\n", required, shared_required, found, shared_found, parent_found);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we only find files that are in the parent & either the set has no unique files or the parent is not found, then assume we don't have the set at all
|
||||||
|
if ((found == shared_found) && required && ((required != shared_required) || !parent_found))
|
||||||
|
{
|
||||||
|
m_record_list.clear();
|
||||||
|
return NOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return a summary
|
||||||
|
return summarize(m_enumerator.driver().name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_device - audit the device
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_auditor::summary media_auditor::audit_device(device_t &device, const char *validation)
|
||||||
|
{
|
||||||
|
// start fresh
|
||||||
|
m_record_list.clear();
|
||||||
|
|
||||||
|
// store validation for later
|
||||||
|
m_validation = validation;
|
||||||
|
|
||||||
|
std::size_t found = 0;
|
||||||
|
std::size_t required = 0;
|
||||||
|
|
||||||
|
std::vector<std::string> searchpath;
|
||||||
|
audit_regions(
|
||||||
|
[this, &device, &searchpath] (rom_entry const *region, rom_entry const *rom) -> audit_record const *
|
||||||
|
{
|
||||||
|
if (ROMREGION_ISROMDATA(region))
|
||||||
|
{
|
||||||
|
if (searchpath.empty())
|
||||||
|
searchpath = device.searchpath();
|
||||||
|
return &audit_one_rom(searchpath, rom);
|
||||||
|
}
|
||||||
|
else if (ROMREGION_ISDISKDATA(region))
|
||||||
|
{
|
||||||
|
return &audit_one_disk(rom, device);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rom_first_region(device),
|
||||||
|
found,
|
||||||
|
required);
|
||||||
|
|
||||||
|
if ((found == 0) && (required > 0))
|
||||||
|
{
|
||||||
|
m_record_list.clear();
|
||||||
|
return NOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return a summary
|
||||||
|
return summarize(device.shortname());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_software
|
||||||
|
//-------------------------------------------------
|
||||||
|
media_auditor::summary media_auditor::audit_software(software_list_device &swlist, const software_info &swinfo, const char *validation)
|
||||||
|
{
|
||||||
|
// start fresh
|
||||||
|
m_record_list.clear();
|
||||||
|
|
||||||
|
// store validation for later
|
||||||
|
m_validation = validation;
|
||||||
|
|
||||||
|
std::size_t found = 0;
|
||||||
|
std::size_t required = 0;
|
||||||
|
|
||||||
|
// now iterate over software parts
|
||||||
|
std::vector<std::string> searchpath;
|
||||||
|
auto const do_audit =
|
||||||
|
[this, &swlist, &swinfo, &searchpath] (rom_entry const *region, rom_entry const *rom) -> audit_record const *
|
||||||
|
{
|
||||||
|
if (ROMREGION_ISROMDATA(region))
|
||||||
|
{
|
||||||
|
if (searchpath.empty())
|
||||||
|
searchpath = rom_load_manager::get_software_searchpath(swlist, swinfo);
|
||||||
|
return &audit_one_rom(searchpath, rom);
|
||||||
|
}
|
||||||
|
else if (ROMREGION_ISDISKDATA(region))
|
||||||
|
{
|
||||||
|
return &audit_one_disk(rom, swlist, swinfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for (const software_part &part : swinfo.parts())
|
||||||
|
audit_regions(do_audit, part.romdata().data(), found, required);
|
||||||
|
|
||||||
|
if ((found == 0) && (required > 0))
|
||||||
|
{
|
||||||
|
m_record_list.clear();
|
||||||
|
return NOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return a summary
|
||||||
|
return summarize(swlist.list_name().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_samples - validate the samples for the
|
||||||
|
// currently-enumerated driver
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_auditor::summary media_auditor::audit_samples()
|
||||||
|
{
|
||||||
|
// start fresh
|
||||||
|
m_record_list.clear();
|
||||||
|
|
||||||
|
std::size_t required = 0;
|
||||||
|
std::size_t found = 0;
|
||||||
|
|
||||||
|
// iterate over sample entries
|
||||||
|
for (samples_device &device : samples_device_enumerator(m_enumerator.config()->root_device()))
|
||||||
|
{
|
||||||
|
// by default we just search using the driver name
|
||||||
|
std::string searchpath(m_enumerator.driver().name);
|
||||||
|
|
||||||
|
// add the alternate path if present
|
||||||
|
samples_iterator iter(device);
|
||||||
|
if (iter.altbasename() != nullptr)
|
||||||
|
searchpath.append(";").append(iter.altbasename());
|
||||||
|
|
||||||
|
// iterate over samples in this entry
|
||||||
|
for (const char *samplename = iter.first(); samplename; samplename = iter.next())
|
||||||
|
{
|
||||||
|
required++;
|
||||||
|
|
||||||
|
// create a new record
|
||||||
|
audit_record &record = *m_record_list.emplace(m_record_list.end(), samplename, media_type::SAMPLE);
|
||||||
|
|
||||||
|
// look for the files
|
||||||
|
emu_file file(m_enumerator.options().sample_path(), OPEN_FLAG_READ | OPEN_FLAG_NO_PRELOAD);
|
||||||
|
path_iterator path(searchpath);
|
||||||
|
std::string curpath;
|
||||||
|
while (path.next(curpath, samplename))
|
||||||
|
{
|
||||||
|
// attempt to access the file (.flac) or (.wav)
|
||||||
|
std::error_condition filerr = file.open(curpath + ".flac");
|
||||||
|
if (filerr)
|
||||||
|
filerr = file.open(curpath + ".wav");
|
||||||
|
|
||||||
|
if (!filerr)
|
||||||
|
{
|
||||||
|
record.set_status(audit_status::GOOD, audit_substatus::GOOD);
|
||||||
|
found++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((found == 0) && (required > 0))
|
||||||
|
{
|
||||||
|
m_record_list.clear();
|
||||||
|
return NOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return a summary
|
||||||
|
return summarize(m_enumerator.driver().name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// summary - generate a summary, with an optional
|
||||||
|
// string format
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_auditor::summary media_auditor::summarize(const char *name, std::ostream *output) const
|
||||||
|
{
|
||||||
|
if (m_record_list.empty())
|
||||||
|
return NONE_NEEDED;
|
||||||
|
|
||||||
|
// loop over records
|
||||||
|
summary overall_status = CORRECT;
|
||||||
|
for (audit_record const &record : m_record_list)
|
||||||
|
{
|
||||||
|
// skip anything that's fine
|
||||||
|
if (record.substatus() == audit_substatus::GOOD)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// output the game name, file name, and length (if applicable)
|
||||||
|
if (output)
|
||||||
|
{
|
||||||
|
if (name)
|
||||||
|
util::stream_format(*output, "%-12s: %s", name, record.name());
|
||||||
|
else
|
||||||
|
util::stream_format(*output, "%s", record.name());
|
||||||
|
if (record.expected_length() > 0)
|
||||||
|
util::stream_format(*output, " (%d bytes)", record.expected_length());
|
||||||
|
*output << " - ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// use the substatus for finer details
|
||||||
|
summary best_new_status = INCORRECT;
|
||||||
|
switch (record.substatus())
|
||||||
|
{
|
||||||
|
case audit_substatus::GOOD_NEEDS_REDUMP:
|
||||||
|
if (output) *output << "NEEDS REDUMP\n";
|
||||||
|
best_new_status = BEST_AVAILABLE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case audit_substatus::FOUND_NODUMP:
|
||||||
|
if (output) *output << "NO GOOD DUMP KNOWN\n";
|
||||||
|
best_new_status = BEST_AVAILABLE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case audit_substatus::FOUND_BAD_CHECKSUM:
|
||||||
|
if (output)
|
||||||
|
{
|
||||||
|
util::stream_format(*output, "INCORRECT CHECKSUM:\n");
|
||||||
|
util::stream_format(*output, "EXPECTED: %s\n", record.expected_hashes().macro_string());
|
||||||
|
util::stream_format(*output, " FOUND: %s\n", record.actual_hashes().macro_string());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case audit_substatus::FOUND_WRONG_LENGTH:
|
||||||
|
if (output) util::stream_format(*output, "INCORRECT LENGTH: %d bytes\n", record.actual_length());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case audit_substatus::NOT_FOUND:
|
||||||
|
if (output)
|
||||||
|
{
|
||||||
|
std::add_pointer_t<device_type> const shared_device = record.shared_device();
|
||||||
|
if (shared_device)
|
||||||
|
util::stream_format(*output, "NOT FOUND (%s)\n", shared_device->shortname());
|
||||||
|
else
|
||||||
|
util::stream_format(*output, "NOT FOUND\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case audit_substatus::NOT_FOUND_NODUMP:
|
||||||
|
if (output) *output << "NOT FOUND - NO GOOD DUMP KNOWN\n";
|
||||||
|
best_new_status = BEST_AVAILABLE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case audit_substatus::NOT_FOUND_OPTIONAL:
|
||||||
|
if (output) *output << "NOT FOUND BUT OPTIONAL\n";
|
||||||
|
best_new_status = BEST_AVAILABLE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// downgrade the overall status if necessary
|
||||||
|
overall_status = (std::max)(overall_status, best_new_status);
|
||||||
|
}
|
||||||
|
return overall_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_regions - validate/count for regions
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void media_auditor::audit_regions(T do_audit, const rom_entry *region, std::size_t &found, std::size_t &required)
|
||||||
|
{
|
||||||
|
// now iterate over regions
|
||||||
|
std::vector<std::string> searchpath;
|
||||||
|
for ( ; region; region = rom_next_region(region))
|
||||||
|
{
|
||||||
|
// now iterate over rom definitions
|
||||||
|
for (rom_entry const *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
|
||||||
|
{
|
||||||
|
// count the number of files with hashes
|
||||||
|
util::hash_collection const hashes(rom->hashdata());
|
||||||
|
if (!hashes.flag(util::hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
|
||||||
|
required++;
|
||||||
|
|
||||||
|
audit_record const *const record = do_audit(region, rom);
|
||||||
|
|
||||||
|
// count the number of files that are found.
|
||||||
|
if (record && ((record->status() == audit_status::GOOD) || (record->status() == audit_status::FOUND_INVALID)))
|
||||||
|
found++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_one_rom - validate a single ROM entry
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_auditor::audit_record &media_auditor::audit_one_rom(const std::vector<std::string> &searchpath, const rom_entry *rom)
|
||||||
|
{
|
||||||
|
// allocate and append a new record
|
||||||
|
audit_record &record = *m_record_list.emplace(m_record_list.end(), *rom, media_type::ROM);
|
||||||
|
|
||||||
|
// see if we have a CRC and extract it if so
|
||||||
|
uint32_t crc = 0;
|
||||||
|
bool const has_crc = record.expected_hashes().crc(crc);
|
||||||
|
|
||||||
|
// find the file and checksum it, getting the file length along the way
|
||||||
|
emu_file file(m_enumerator.options().media_path(), searchpath, OPEN_FLAG_READ | OPEN_FLAG_NO_PRELOAD);
|
||||||
|
file.set_restrict_to_mediapath(1);
|
||||||
|
|
||||||
|
// open the file if we can
|
||||||
|
std::error_condition filerr;
|
||||||
|
if (has_crc)
|
||||||
|
filerr = file.open(record.name(), crc);
|
||||||
|
else
|
||||||
|
filerr = file.open(record.name());
|
||||||
|
|
||||||
|
// if it worked, get the actual length and hashes, then stop
|
||||||
|
if (!filerr)
|
||||||
|
record.set_actual(file.hashes(m_validation), file.size());
|
||||||
|
|
||||||
|
// compute the final status
|
||||||
|
compute_status(record, rom, record.actual_length() != 0);
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_one_disk - validate a single disk entry
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename... T>
|
||||||
|
media_auditor::audit_record &media_auditor::audit_one_disk(const rom_entry *rom, T &&... args)
|
||||||
|
{
|
||||||
|
// allocate and append a new record
|
||||||
|
audit_record &record = *m_record_list.emplace(m_record_list.end(), *rom, media_type::DISK);
|
||||||
|
|
||||||
|
// open the disk
|
||||||
|
chd_file source;
|
||||||
|
const std::error_condition err = rom_load_manager::open_disk_image(m_enumerator.options(), std::forward<T>(args)..., rom, source);
|
||||||
|
|
||||||
|
// if we succeeded, get the hashes
|
||||||
|
if (!err)
|
||||||
|
{
|
||||||
|
util::hash_collection hashes;
|
||||||
|
|
||||||
|
// if there's a SHA1 hash, add them to the output hash
|
||||||
|
if (source.sha1() != util::sha1_t::null)
|
||||||
|
hashes.add_sha1(source.sha1());
|
||||||
|
|
||||||
|
// update the actual values
|
||||||
|
record.set_actual(hashes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// compute the final status
|
||||||
|
compute_status(record, rom, !err);
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// compute_status - compute a detailed status
|
||||||
|
// based on the information we have
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_auditor::compute_status(audit_record &record, const rom_entry *rom, bool found)
|
||||||
|
{
|
||||||
|
// if not found, provide more details
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
if (record.expected_hashes().flag(util::hash_collection::FLAG_NO_DUMP))
|
||||||
|
record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND_NODUMP);
|
||||||
|
else if (ROM_ISOPTIONAL(rom))
|
||||||
|
record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND_OPTIONAL);
|
||||||
|
else
|
||||||
|
record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (record.expected_length() != record.actual_length())
|
||||||
|
record.set_status(audit_status::FOUND_INVALID, audit_substatus::FOUND_WRONG_LENGTH);
|
||||||
|
else if (record.expected_hashes().flag(util::hash_collection::FLAG_NO_DUMP))
|
||||||
|
record.set_status(audit_status::GOOD, audit_substatus::FOUND_NODUMP);
|
||||||
|
else if (record.expected_hashes() != record.actual_hashes())
|
||||||
|
record.set_status(audit_status::FOUND_INVALID, audit_substatus::FOUND_BAD_CHECKSUM);
|
||||||
|
else if (record.expected_hashes().flag(util::hash_collection::FLAG_BAD_DUMP))
|
||||||
|
record.set_status(audit_status::GOOD, audit_substatus::GOOD_NEEDS_REDUMP);
|
||||||
|
else
|
||||||
|
record.set_status(audit_status::GOOD, audit_substatus::GOOD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// audit_record - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_auditor::audit_record::audit_record(const rom_entry &media, media_type type)
|
||||||
|
: m_type(type)
|
||||||
|
, m_status(audit_status::UNVERIFIED)
|
||||||
|
, m_substatus(audit_substatus::UNVERIFIED)
|
||||||
|
, m_name(media.name())
|
||||||
|
, m_explength(rom_file_size(&media))
|
||||||
|
, m_length(0)
|
||||||
|
, m_exphashes(media.hashdata())
|
||||||
|
, m_hashes()
|
||||||
|
, m_shared_device(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
media_auditor::audit_record::audit_record(const char *name, media_type type)
|
||||||
|
: m_type(type)
|
||||||
|
, m_status(audit_status::UNVERIFIED)
|
||||||
|
, m_substatus(audit_substatus::UNVERIFIED)
|
||||||
|
, m_name(name)
|
||||||
|
, m_explength(0)
|
||||||
|
, m_length(0)
|
||||||
|
, m_exphashes()
|
||||||
|
, m_hashes()
|
||||||
|
, m_shared_device(nullptr)
|
||||||
|
{
|
||||||
|
}
|
177
src/icludes/frontend/mame/audit.h
Normal file
177
src/icludes/frontend/mame/audit.h
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
audit.h
|
||||||
|
|
||||||
|
ROM, disk, and sample auditing functions.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_AUDIT_H
|
||||||
|
#define MAME_FRONTEND_AUDIT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <iosfwd>
|
||||||
|
#include <list>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// CONSTANTS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// hashes to use for validation
|
||||||
|
#define AUDIT_VALIDATE_FAST "R" /* CRC only */
|
||||||
|
#define AUDIT_VALIDATE_FULL "RS" /* CRC + SHA1 */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
// forward declarations
|
||||||
|
class driver_enumerator;
|
||||||
|
class software_list_device;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> media_auditor
|
||||||
|
|
||||||
|
// class which manages auditing of items
|
||||||
|
class media_auditor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum class media_type
|
||||||
|
{
|
||||||
|
ROM = 0,
|
||||||
|
DISK,
|
||||||
|
SAMPLE
|
||||||
|
};
|
||||||
|
|
||||||
|
// status values
|
||||||
|
enum class audit_status
|
||||||
|
{
|
||||||
|
GOOD = 0,
|
||||||
|
FOUND_INVALID,
|
||||||
|
NOT_FOUND,
|
||||||
|
UNVERIFIED = 100
|
||||||
|
};
|
||||||
|
|
||||||
|
// substatus values
|
||||||
|
enum class audit_substatus
|
||||||
|
{
|
||||||
|
GOOD = 0,
|
||||||
|
GOOD_NEEDS_REDUMP,
|
||||||
|
FOUND_NODUMP,
|
||||||
|
FOUND_BAD_CHECKSUM,
|
||||||
|
FOUND_WRONG_LENGTH,
|
||||||
|
NOT_FOUND,
|
||||||
|
NOT_FOUND_NODUMP,
|
||||||
|
NOT_FOUND_OPTIONAL,
|
||||||
|
UNVERIFIED = 100
|
||||||
|
};
|
||||||
|
|
||||||
|
// summary values
|
||||||
|
enum summary
|
||||||
|
{
|
||||||
|
CORRECT = 0,
|
||||||
|
NONE_NEEDED,
|
||||||
|
BEST_AVAILABLE,
|
||||||
|
INCORRECT,
|
||||||
|
NOTFOUND
|
||||||
|
};
|
||||||
|
|
||||||
|
// holds the result of auditing a single item
|
||||||
|
class audit_record
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// media types
|
||||||
|
// construction/destruction
|
||||||
|
audit_record(const rom_entry &media, media_type type);
|
||||||
|
audit_record(const char *name, media_type type);
|
||||||
|
audit_record(const audit_record &) = default;
|
||||||
|
audit_record(audit_record &&) = default;
|
||||||
|
audit_record &operator=(const audit_record &) = default;
|
||||||
|
audit_record &operator=(audit_record &&) = default;
|
||||||
|
|
||||||
|
// getters
|
||||||
|
media_type type() const { return m_type; }
|
||||||
|
audit_status status() const { return m_status; }
|
||||||
|
audit_substatus substatus() const { return m_substatus; }
|
||||||
|
const std::string &name() const { return m_name; }
|
||||||
|
uint64_t expected_length() const { return m_explength; }
|
||||||
|
uint64_t actual_length() const { return m_length; }
|
||||||
|
const util::hash_collection &expected_hashes() const { return m_exphashes; }
|
||||||
|
const util::hash_collection &actual_hashes() const { return m_hashes; }
|
||||||
|
std::add_pointer_t<device_type> shared_device() const { return m_shared_device; }
|
||||||
|
|
||||||
|
// setters
|
||||||
|
void set_status(audit_status status, audit_substatus substatus)
|
||||||
|
{
|
||||||
|
m_status = status;
|
||||||
|
m_substatus = substatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_actual(const util::hash_collection &hashes, uint64_t length = 0)
|
||||||
|
{
|
||||||
|
m_hashes = hashes;
|
||||||
|
m_length = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_actual(util::hash_collection &&hashes, uint64_t length = 0)
|
||||||
|
{
|
||||||
|
m_hashes = std::move(hashes);
|
||||||
|
m_length = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_shared_device(std::add_pointer_t<device_type> shared_device)
|
||||||
|
{
|
||||||
|
m_shared_device = shared_device;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal state
|
||||||
|
media_type m_type; // type of item that was audited
|
||||||
|
audit_status m_status; // status of audit on this item
|
||||||
|
audit_substatus m_substatus; // finer-detail status
|
||||||
|
std::string m_name; // name of item
|
||||||
|
uint64_t m_explength; // expected length of item
|
||||||
|
uint64_t m_length; // actual length of item
|
||||||
|
util::hash_collection m_exphashes; // expected hash data
|
||||||
|
util::hash_collection m_hashes; // actual hash information
|
||||||
|
std::add_pointer_t<device_type> m_shared_device; // device that shares the ROM
|
||||||
|
};
|
||||||
|
using record_list = std::list<audit_record>;
|
||||||
|
|
||||||
|
// construction/destruction
|
||||||
|
media_auditor(const driver_enumerator &enumerator);
|
||||||
|
|
||||||
|
// getters
|
||||||
|
const record_list &records() const { return m_record_list; }
|
||||||
|
|
||||||
|
// audit operations
|
||||||
|
summary audit_media(const char *validation = AUDIT_VALIDATE_FULL);
|
||||||
|
summary audit_device(device_t &device, const char *validation = AUDIT_VALIDATE_FULL);
|
||||||
|
summary audit_software(software_list_device &swlist, const software_info &swinfo, const char *validation = AUDIT_VALIDATE_FULL);
|
||||||
|
summary audit_samples();
|
||||||
|
summary summarize(const char *name, std::ostream *output = nullptr) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal helpers
|
||||||
|
template <typename T> void audit_regions(T do_audit, const rom_entry *region, std::size_t &found, std::size_t &required);
|
||||||
|
audit_record &audit_one_rom(const std::vector<std::string> &searchpath, const rom_entry *rom);
|
||||||
|
template <typename... T> audit_record &audit_one_disk(const rom_entry *rom, T &&... args);
|
||||||
|
void compute_status(audit_record &record, const rom_entry *rom, bool found);
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
record_list m_record_list;
|
||||||
|
const driver_enumerator & m_enumerator;
|
||||||
|
const char * m_validation;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_AUDIT_H
|
1461
src/icludes/frontend/mame/cheat.cpp
Normal file
1461
src/icludes/frontend/mame/cheat.cpp
Normal file
File diff suppressed because it is too large
Load Diff
353
src/icludes/frontend/mame/cheat.h
Normal file
353
src/icludes/frontend/mame/cheat.h
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
cheat.h
|
||||||
|
|
||||||
|
Cheat system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_CHEAT_H
|
||||||
|
#define MAME_FRONTEND_CHEAT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "debug/express.h"
|
||||||
|
#include "ui/text.h"
|
||||||
|
#include "xmlfile.h"
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// CONSTANTS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
enum script_state
|
||||||
|
{
|
||||||
|
SCRIPT_STATE_OFF = 0,
|
||||||
|
SCRIPT_STATE_ON,
|
||||||
|
SCRIPT_STATE_RUN,
|
||||||
|
SCRIPT_STATE_CHANGE,
|
||||||
|
SCRIPT_STATE_COUNT
|
||||||
|
};
|
||||||
|
DECLARE_ENUM_INCDEC_OPERATORS(script_state)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
class cheat_manager;
|
||||||
|
class mame_ui_manager;
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> number_and_format
|
||||||
|
|
||||||
|
// helper class to remember a format along with a number
|
||||||
|
class number_and_format
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
constexpr number_and_format(
|
||||||
|
uint64_t value = 0,
|
||||||
|
util::xml::data_node::int_format format = util::xml::data_node::int_format::DECIMAL)
|
||||||
|
: m_value(value)
|
||||||
|
, m_format(format)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// copyable/movable
|
||||||
|
constexpr number_and_format(number_and_format const &) = default;
|
||||||
|
number_and_format(number_and_format &&) = default;
|
||||||
|
number_and_format &operator=(number_and_format const &) = default;
|
||||||
|
number_and_format &operator=(number_and_format &&) = default;
|
||||||
|
|
||||||
|
// pass-through to look like a regular number
|
||||||
|
operator uint64_t &() { return m_value; }
|
||||||
|
operator const uint64_t &() const { return m_value; }
|
||||||
|
|
||||||
|
// format the number according to its format
|
||||||
|
std::string format() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal state
|
||||||
|
uint64_t m_value;
|
||||||
|
util::xml::data_node::int_format m_format;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> cheat_parameter
|
||||||
|
|
||||||
|
// a parameter for a cheat, which can be set in the UI
|
||||||
|
class cheat_parameter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
cheat_parameter(
|
||||||
|
cheat_manager &manager,
|
||||||
|
symbol_table &symbols,
|
||||||
|
std::string const &filename,
|
||||||
|
util::xml::data_node const ¶mnode);
|
||||||
|
|
||||||
|
// queries
|
||||||
|
char const *text();
|
||||||
|
bool has_itemlist() const { return !m_itemlist.empty(); }
|
||||||
|
bool is_minimum() const { return (m_itemlist.empty() ? m_minval : m_itemlist.front().value()) == m_value; }
|
||||||
|
bool is_maximum() const { return (m_itemlist.empty() ? m_maxval : m_itemlist.back().value()) == m_value; }
|
||||||
|
|
||||||
|
// state setters
|
||||||
|
bool set_minimum_state();
|
||||||
|
bool set_prev_state();
|
||||||
|
bool set_next_state();
|
||||||
|
|
||||||
|
// actions
|
||||||
|
void save(emu_file &cheatfile) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// a single item in a parameter item list
|
||||||
|
class item
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
item(const char *text, uint64_t value, util::xml::data_node::int_format valformat)
|
||||||
|
: m_text(text)
|
||||||
|
, m_value(value, valformat)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// copyable/movable
|
||||||
|
item(item const &) = default;
|
||||||
|
item(item &&) = default;
|
||||||
|
item &operator=(item const &) = default;
|
||||||
|
item &operator=(item &&) = default;
|
||||||
|
|
||||||
|
// getters
|
||||||
|
number_and_format const &value() const { return m_value; }
|
||||||
|
char const *text() const { return m_text.c_str(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal state
|
||||||
|
std::string m_text; // name of the item
|
||||||
|
number_and_format m_value; // value of the item
|
||||||
|
};
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
number_and_format m_minval; // minimum value
|
||||||
|
number_and_format m_maxval; // maximum value
|
||||||
|
number_and_format m_stepval; // step value
|
||||||
|
uint64_t m_value; // live value of the parameter
|
||||||
|
std::string m_curtext; // holding for a value string
|
||||||
|
std::vector<item> m_itemlist; // list of items
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> cheat_script
|
||||||
|
|
||||||
|
// a script entry, specifying which state to execute under
|
||||||
|
class cheat_script
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
cheat_script(
|
||||||
|
cheat_manager &manager,
|
||||||
|
symbol_table &symbols,
|
||||||
|
std::string const &filename,
|
||||||
|
util::xml::data_node const &scriptnode);
|
||||||
|
|
||||||
|
// getters
|
||||||
|
script_state state() const { return m_state; }
|
||||||
|
|
||||||
|
// actions
|
||||||
|
void execute(cheat_manager &manager, uint64_t &argindex);
|
||||||
|
void save(emu_file &cheatfile) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// an entry within the script
|
||||||
|
class script_entry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
script_entry(
|
||||||
|
cheat_manager &manager,
|
||||||
|
symbol_table &symbols,
|
||||||
|
std::string const &filename,
|
||||||
|
util::xml::data_node const &entrynode,
|
||||||
|
bool isaction);
|
||||||
|
|
||||||
|
// actions
|
||||||
|
void execute(cheat_manager &manager, uint64_t &argindex);
|
||||||
|
void save(emu_file &cheatfile) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// an argument for output
|
||||||
|
class output_argument
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
output_argument(
|
||||||
|
cheat_manager &manager,
|
||||||
|
symbol_table &symbols,
|
||||||
|
std::string const &filename,
|
||||||
|
util::xml::data_node const &argnode);
|
||||||
|
|
||||||
|
// getters
|
||||||
|
int count() const { return m_count; }
|
||||||
|
int values(uint64_t &argindex, uint64_t *result);
|
||||||
|
|
||||||
|
// actions
|
||||||
|
void save(emu_file &cheatfile) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal state
|
||||||
|
parsed_expression m_expression; // expression for argument
|
||||||
|
uint64_t m_count; // number of repetitions
|
||||||
|
};
|
||||||
|
|
||||||
|
// internal helpers
|
||||||
|
void validate_format(std::string const &filename, int line);
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
parsed_expression m_condition; // condition under which this is executed
|
||||||
|
parsed_expression m_expression; // expression to execute
|
||||||
|
std::string m_format; // string format to print
|
||||||
|
std::vector<std::unique_ptr<output_argument>> m_arglist; // list of arguments
|
||||||
|
int8_t m_line; // which line to print on
|
||||||
|
ui::text_layout::text_justify m_justify; // justification when printing
|
||||||
|
|
||||||
|
// constants
|
||||||
|
static constexpr int MAX_ARGUMENTS = 32;
|
||||||
|
};
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
std::vector<std::unique_ptr<script_entry>> m_entrylist; // list of actions to perform
|
||||||
|
script_state m_state; // which state this script is for
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> cheat_entry
|
||||||
|
|
||||||
|
// a single cheat
|
||||||
|
class cheat_entry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
cheat_entry(cheat_manager &manager, symbol_table &globaltable, std::string const &filename, util::xml::data_node const &cheatnode);
|
||||||
|
~cheat_entry();
|
||||||
|
|
||||||
|
// getters
|
||||||
|
cheat_manager &manager() const { return m_manager; }
|
||||||
|
script_state state() const { return m_state; }
|
||||||
|
const char *description() const { return m_description.c_str(); }
|
||||||
|
const char *comment() const { return m_comment.c_str(); }
|
||||||
|
|
||||||
|
// script detection
|
||||||
|
bool has_run_script() const { return (m_run_script != nullptr); }
|
||||||
|
bool has_on_script() const { return (m_on_script != nullptr); }
|
||||||
|
bool has_off_script() const { return (m_off_script != nullptr); }
|
||||||
|
bool has_change_script() const { return (m_change_script != nullptr); }
|
||||||
|
|
||||||
|
// script execution
|
||||||
|
void execute_off_script() { if (has_off_script()) m_off_script->execute(m_manager, m_argindex); }
|
||||||
|
void execute_on_script() { if (has_on_script()) m_on_script->execute(m_manager, m_argindex); }
|
||||||
|
void execute_run_script() { if (has_run_script()) m_run_script->execute(m_manager, m_argindex); }
|
||||||
|
void execute_change_script() { if (has_change_script()) m_change_script->execute(m_manager, m_argindex); }
|
||||||
|
|
||||||
|
// cheat classification
|
||||||
|
bool is_text_only() const { return (m_parameter == nullptr && !has_run_script() && !has_off_script() && !has_on_script()); }
|
||||||
|
bool is_oneshot() const { return (m_parameter == nullptr && !has_run_script() && !has_off_script() && has_on_script()); }
|
||||||
|
bool is_onoff() const { return (m_parameter == nullptr && (has_run_script() || (has_off_script() && has_on_script()))); }
|
||||||
|
bool is_value_parameter() const { return (m_parameter != nullptr && !m_parameter->has_itemlist()); }
|
||||||
|
bool is_itemlist_parameter() const { return (m_parameter != nullptr && m_parameter->has_itemlist()); }
|
||||||
|
bool is_oneshot_parameter() const { return (m_parameter != nullptr && !has_run_script() && !has_off_script() && has_change_script()); }
|
||||||
|
bool is_duplicate() const;
|
||||||
|
|
||||||
|
// actions
|
||||||
|
bool activate();
|
||||||
|
bool select_default_state();
|
||||||
|
bool select_previous_state();
|
||||||
|
bool select_next_state();
|
||||||
|
void save(emu_file &cheatfile) const;
|
||||||
|
|
||||||
|
// UI helpers
|
||||||
|
void menu_text(std::string &description, std::string &state, uint32_t &flags);
|
||||||
|
|
||||||
|
// per-frame update
|
||||||
|
void frame_update() { if (m_state == SCRIPT_STATE_RUN) execute_run_script(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal helpers
|
||||||
|
bool set_state(script_state newstate);
|
||||||
|
std::unique_ptr<cheat_script> &script_for_state(script_state state);
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
cheat_manager & m_manager; // reference to our manager
|
||||||
|
std::string m_description; // string description/menu title
|
||||||
|
std::string m_comment; // comment data
|
||||||
|
std::unique_ptr<cheat_parameter> m_parameter; // parameter
|
||||||
|
std::unique_ptr<cheat_script> m_on_script; // script to run when turning on
|
||||||
|
std::unique_ptr<cheat_script> m_off_script; // script to run when turning off
|
||||||
|
std::unique_ptr<cheat_script> m_change_script; // script to run when value changes
|
||||||
|
std::unique_ptr<cheat_script> m_run_script; // script to run each frame when on
|
||||||
|
symbol_table m_symbols; // symbol table for this cheat
|
||||||
|
script_state m_state; // current cheat state
|
||||||
|
uint32_t m_numtemp; // number of temporary variables
|
||||||
|
uint64_t m_argindex; // argument index variable
|
||||||
|
|
||||||
|
// constants
|
||||||
|
static constexpr int DEFAULT_TEMP_VARIABLES = 10;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> cheat_manager
|
||||||
|
|
||||||
|
// private machine-global data
|
||||||
|
class cheat_manager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
cheat_manager(running_machine &machine);
|
||||||
|
|
||||||
|
// getters
|
||||||
|
running_machine &machine() const { return m_machine; }
|
||||||
|
bool enabled() const { return !m_disabled; }
|
||||||
|
std::vector<std::unique_ptr<cheat_entry>> const &entries() const { return m_cheatlist; }
|
||||||
|
|
||||||
|
// setters
|
||||||
|
void set_enable(bool enable);
|
||||||
|
|
||||||
|
// actions
|
||||||
|
void reload();
|
||||||
|
bool save_all(std::string const &filename);
|
||||||
|
void render_text(mame_ui_manager &mui, render_container &container);
|
||||||
|
|
||||||
|
// output helpers
|
||||||
|
std::string &get_output_string(int row, ui::text_layout::text_justify justify);
|
||||||
|
|
||||||
|
// global helpers
|
||||||
|
static std::string quote_expression(parsed_expression const &expression);
|
||||||
|
static uint64_t execute_frombcd(int params, uint64_t const *param);
|
||||||
|
static uint64_t execute_tobcd(int params, uint64_t const *param);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal helpers
|
||||||
|
void frame_update();
|
||||||
|
void load_cheats(std::string const &filename);
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
running_machine & m_machine; // reference to our machine
|
||||||
|
std::vector<std::unique_ptr<cheat_entry>> m_cheatlist; // cheat list
|
||||||
|
uint64_t m_framecount; // frame count
|
||||||
|
std::vector<std::string> m_output; // array of output strings
|
||||||
|
std::vector<ui::text_layout::text_justify> m_justify; // justification for each string
|
||||||
|
uint8_t m_numlines; // number of lines available for output
|
||||||
|
int8_t m_lastline; // last line used for output
|
||||||
|
bool m_disabled; // true if the cheat engine is disabled
|
||||||
|
symbol_table m_symtable; // global symbol table
|
||||||
|
|
||||||
|
// constants
|
||||||
|
static constexpr int CHEAT_VERSION = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MAME_FRONTEND_CHEAT_H */
|
1788
src/icludes/frontend/mame/clifront.cpp
Normal file
1788
src/icludes/frontend/mame/clifront.cpp
Normal file
File diff suppressed because it is too large
Load Diff
85
src/icludes/frontend/mame/clifront.h
Normal file
85
src/icludes/frontend/mame/clifront.h
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
clifront.h
|
||||||
|
|
||||||
|
Command-line interface frontend for MAME.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_CLIFRONT_H
|
||||||
|
#define MAME_FRONTEND_CLIFRONT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "emuopts.h"
|
||||||
|
|
||||||
|
// don't include osd_interface in header files
|
||||||
|
class osd_interface;
|
||||||
|
class mame_machine_manager;
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
// cli_frontend handles command-line processing and emulator execution
|
||||||
|
class cli_frontend
|
||||||
|
{
|
||||||
|
static const char s_softlist_xml_dtd[];
|
||||||
|
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
cli_frontend(emu_options &options, osd_interface &osd);
|
||||||
|
~cli_frontend();
|
||||||
|
|
||||||
|
// execute based on the incoming argc/argv
|
||||||
|
int execute(std::vector<std::string> &args);
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct info_command_struct
|
||||||
|
{
|
||||||
|
const char *option;
|
||||||
|
int min_args;
|
||||||
|
int max_args;
|
||||||
|
void (cli_frontend::*function)(const std::vector<std::string> &args);
|
||||||
|
const char *usage;
|
||||||
|
};
|
||||||
|
|
||||||
|
// commands
|
||||||
|
void listxml(const std::vector<std::string> &args);
|
||||||
|
void listfull(const std::vector<std::string> &args);
|
||||||
|
void listsource(const std::vector<std::string> &args);
|
||||||
|
void listclones(const std::vector<std::string> &args);
|
||||||
|
void listbrothers(const std::vector<std::string> &args);
|
||||||
|
void listcrc(const std::vector<std::string> &args);
|
||||||
|
void listroms(const std::vector<std::string> &args);
|
||||||
|
void listsamples(const std::vector<std::string> &args);
|
||||||
|
void listdevices(const std::vector<std::string> &args);
|
||||||
|
void listslots(const std::vector<std::string> &args);
|
||||||
|
void listmedia(const std::vector<std::string> &args);
|
||||||
|
void listsoftware(const std::vector<std::string> &args);
|
||||||
|
void verifysoftware(const std::vector<std::string> &args);
|
||||||
|
void verifyroms(const std::vector<std::string> &args);
|
||||||
|
void verifysamples(const std::vector<std::string> &args);
|
||||||
|
void romident(const std::vector<std::string> &args);
|
||||||
|
void getsoftlist(const std::vector<std::string> &args);
|
||||||
|
void verifysoftlist(const std::vector<std::string> &args);
|
||||||
|
void version(const std::vector<std::string> &args);
|
||||||
|
|
||||||
|
// internal helpers
|
||||||
|
template <typename T, typename U> void apply_action(const std::vector<std::string> &args, T &&drvact, U &&devact);
|
||||||
|
template <typename T> void apply_device_action(const std::vector<std::string> &args, T &&action);
|
||||||
|
void execute_commands(std::string_view exename);
|
||||||
|
void display_help(std::string_view exename);
|
||||||
|
void output_single_softlist(std::ostream &out, software_list_device &swlist);
|
||||||
|
void start_execution(mame_machine_manager *manager, const std::vector<std::string> &args);
|
||||||
|
static const info_command_struct *find_command(const std::string &s);
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
emu_options & m_options;
|
||||||
|
osd_interface & m_osd;
|
||||||
|
int m_result;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_CLIFRONT_H
|
2233
src/icludes/frontend/mame/infoxml.cpp
Normal file
2233
src/icludes/frontend/mame/infoxml.cpp
Normal file
File diff suppressed because it is too large
Load Diff
45
src/icludes/frontend/mame/infoxml.h
Normal file
45
src/icludes/frontend/mame/infoxml.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
info.h
|
||||||
|
|
||||||
|
Dumps the MAME internal data as an XML file.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_MAME_INFOXML_H
|
||||||
|
#define MAME_FRONTEND_MAME_INFOXML_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "emuopts.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// FUNCTION PROTOTYPES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// helper class to putput
|
||||||
|
class info_xml_creator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
info_xml_creator(emu_options const &options, bool dtd = true);
|
||||||
|
|
||||||
|
// output
|
||||||
|
void output(std::ostream &out, const std::vector<std::string> &patterns);
|
||||||
|
void output(std::ostream &out, const std::function<bool(const char *shortname, bool &done)> &filter = { }, bool include_devices = true);
|
||||||
|
|
||||||
|
static char const *feature_name(device_t::feature_type feature);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal state
|
||||||
|
emu_options m_lookup_options;
|
||||||
|
bool m_dtd;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_MAME_INFOXML_H
|
514
src/icludes/frontend/mame/iptseqpoll.cpp
Normal file
514
src/icludes/frontend/mame/iptseqpoll.cpp
Normal file
@ -0,0 +1,514 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb, Aaron Giles
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "iptseqpoll.h"
|
||||||
|
|
||||||
|
#include "inputdev.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
|
input_code_poller::input_code_poller(input_manager &manager) noexcept :
|
||||||
|
m_manager(manager),
|
||||||
|
m_axis_memory(),
|
||||||
|
m_switch_memory()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input_code_poller::~input_code_poller()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void input_code_poller::reset()
|
||||||
|
{
|
||||||
|
// iterate over device classes and devices
|
||||||
|
m_axis_memory.clear();
|
||||||
|
m_switch_memory.clear();
|
||||||
|
for (input_device_class classno = DEVICE_CLASS_FIRST_VALID; DEVICE_CLASS_LAST_VALID >= classno; ++classno)
|
||||||
|
{
|
||||||
|
input_class &devclass(m_manager.device_class(classno));
|
||||||
|
if (devclass.enabled())
|
||||||
|
{
|
||||||
|
for (int devnum = 0; devclass.maxindex() >= devnum; ++devnum)
|
||||||
|
{
|
||||||
|
// fetch the device; ignore if nullptr
|
||||||
|
input_device *const device(devclass.device(devnum));
|
||||||
|
if (device)
|
||||||
|
{
|
||||||
|
// iterate over items within each device
|
||||||
|
for (input_item_id itemid = ITEM_ID_FIRST_VALID; device->maxitem() >= itemid; ++itemid)
|
||||||
|
{
|
||||||
|
// for any non-switch items, set memory to the current value
|
||||||
|
input_device_item *const item(device->item(itemid));
|
||||||
|
if (item && (item->itemclass() != ITEM_CLASS_SWITCH))
|
||||||
|
m_axis_memory.emplace_back(item, m_manager.code_value(item->code()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::sort(m_axis_memory.begin(), m_axis_memory.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool input_code_poller::code_pressed_once(input_code code, bool moved)
|
||||||
|
{
|
||||||
|
// look for the code in the memory
|
||||||
|
bool const pressed(m_manager.code_pressed(code));
|
||||||
|
auto const found(std::lower_bound(m_switch_memory.begin(), m_switch_memory.end(), code));
|
||||||
|
if ((m_switch_memory.end() != found) && (*found == code))
|
||||||
|
{
|
||||||
|
// if no longer pressed, clear entry
|
||||||
|
if (!pressed)
|
||||||
|
m_switch_memory.erase(found);
|
||||||
|
|
||||||
|
// always return false
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we get here, we were not previously pressed; if still not pressed, return false
|
||||||
|
if (!pressed || !moved)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// otherwise, add the code to the memory and return true
|
||||||
|
m_switch_memory.emplace(found, code);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
axis_code_poller::axis_code_poller(input_manager &manager) noexcept :
|
||||||
|
input_code_poller(manager),
|
||||||
|
m_axis_active()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void axis_code_poller::reset()
|
||||||
|
{
|
||||||
|
input_code_poller::reset();
|
||||||
|
m_axis_active.clear();
|
||||||
|
m_axis_active.resize(m_axis_memory.size(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input_code axis_code_poller::poll()
|
||||||
|
{
|
||||||
|
// iterate over the axis items we found
|
||||||
|
for (std::size_t i = 0; m_axis_memory.size() > i; ++i)
|
||||||
|
{
|
||||||
|
auto &memory = m_axis_memory[i];
|
||||||
|
input_code code = memory.first->code();
|
||||||
|
if (!memory.first->check_axis(code.item_modifier(), memory.second))
|
||||||
|
{
|
||||||
|
m_axis_active[i] = false;
|
||||||
|
}
|
||||||
|
else if (!m_axis_active[i])
|
||||||
|
{
|
||||||
|
if (code.item_class() == ITEM_CLASS_ABSOLUTE)
|
||||||
|
{
|
||||||
|
m_axis_active[i] = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// can only cycle modifiers on a relative item with append
|
||||||
|
m_axis_memory.erase(m_axis_memory.begin() + i);
|
||||||
|
m_axis_active.erase(m_axis_active.begin() + i);
|
||||||
|
}
|
||||||
|
if (!m_manager.device_class(memory.first->device().devclass()).multi())
|
||||||
|
code.set_device_index(0);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// iterate over device classes and devices, skipping disabled classes
|
||||||
|
for (input_device_class classno = DEVICE_CLASS_FIRST_VALID; DEVICE_CLASS_LAST_VALID >= classno; ++classno)
|
||||||
|
{
|
||||||
|
input_class &devclass(m_manager.device_class(classno));
|
||||||
|
if (!devclass.enabled())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int devnum = 0; devclass.maxindex() >= devnum; ++devnum)
|
||||||
|
{
|
||||||
|
// fetch the device; ignore if nullptr
|
||||||
|
input_device *const device(devclass.device(devnum));
|
||||||
|
if (!device)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// iterate over items within each device
|
||||||
|
for (input_item_id itemid = ITEM_ID_FIRST_VALID; device->maxitem() >= itemid; ++itemid)
|
||||||
|
{
|
||||||
|
input_device_item *const item(device->item(itemid));
|
||||||
|
if (!item)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
input_code code = item->code();
|
||||||
|
if (item->itemclass() == ITEM_CLASS_SWITCH)
|
||||||
|
{
|
||||||
|
// item is natively a switch, poll it
|
||||||
|
if (code_pressed_once(code, true))
|
||||||
|
return code;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if nothing, return an invalid code
|
||||||
|
return INPUT_CODE_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
switch_code_poller::switch_code_poller(input_manager &manager) noexcept :
|
||||||
|
input_code_poller(manager)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input_code switch_code_poller::poll()
|
||||||
|
{
|
||||||
|
// iterate over device classes and devices, skipping disabled classes
|
||||||
|
for (input_device_class classno = DEVICE_CLASS_FIRST_VALID; DEVICE_CLASS_LAST_VALID >= classno; ++classno)
|
||||||
|
{
|
||||||
|
input_class &devclass(m_manager.device_class(classno));
|
||||||
|
if (!devclass.enabled())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int devnum = 0; devclass.maxindex() >= devnum; ++devnum)
|
||||||
|
{
|
||||||
|
// fetch the device; ignore if nullptr
|
||||||
|
input_device *const device(devclass.device(devnum));
|
||||||
|
if (!device)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// iterate over items within each device
|
||||||
|
for (input_item_id itemid = ITEM_ID_FIRST_VALID; device->maxitem() >= itemid; ++itemid)
|
||||||
|
{
|
||||||
|
input_device_item *const item(device->item(itemid));
|
||||||
|
if (!item)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
input_code code = item->code();
|
||||||
|
if (item->itemclass() == ITEM_CLASS_SWITCH)
|
||||||
|
{
|
||||||
|
// item is natively a switch, poll it
|
||||||
|
if (code_pressed_once(code, true))
|
||||||
|
return code;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto const memory(std::lower_bound(
|
||||||
|
m_axis_memory.begin(),
|
||||||
|
m_axis_memory.end(),
|
||||||
|
item,
|
||||||
|
[] (auto const &x, auto const &y) { return x.first < y; }));
|
||||||
|
if ((m_axis_memory.end() == memory) || (item != memory->first))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// poll axes digitally
|
||||||
|
bool const moved(item->check_axis(code.item_modifier(), memory->second));
|
||||||
|
code.set_item_class(ITEM_CLASS_SWITCH);
|
||||||
|
if ((classno == DEVICE_CLASS_JOYSTICK) && (code.item_id() == ITEM_ID_XAXIS))
|
||||||
|
{
|
||||||
|
// joystick X axis - check with left/right modifiers
|
||||||
|
code.set_item_modifier(ITEM_MODIFIER_LEFT);
|
||||||
|
if (code_pressed_once(code, moved))
|
||||||
|
return code;
|
||||||
|
code.set_item_modifier(ITEM_MODIFIER_RIGHT);
|
||||||
|
if (code_pressed_once(code, moved))
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
else if ((classno == DEVICE_CLASS_JOYSTICK) && (code.item_id() == ITEM_ID_YAXIS))
|
||||||
|
{
|
||||||
|
// if this is a joystick Y axis, check with up/down modifiers
|
||||||
|
code.set_item_modifier(ITEM_MODIFIER_UP);
|
||||||
|
if (code_pressed_once(code, moved))
|
||||||
|
return code;
|
||||||
|
code.set_item_modifier(ITEM_MODIFIER_DOWN);
|
||||||
|
if (code_pressed_once(code, moved))
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// any other axis, check with pos/neg modifiers
|
||||||
|
code.set_item_modifier(ITEM_MODIFIER_POS);
|
||||||
|
if (code_pressed_once(code, moved))
|
||||||
|
return code;
|
||||||
|
code.set_item_modifier(ITEM_MODIFIER_NEG);
|
||||||
|
if (code_pressed_once(code, moved))
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if nothing, return an invalid code
|
||||||
|
return INPUT_CODE_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
keyboard_code_poller::keyboard_code_poller(input_manager &manager) noexcept :
|
||||||
|
input_code_poller(manager)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input_code keyboard_code_poller::poll()
|
||||||
|
{
|
||||||
|
// iterate over devices in keyboard class
|
||||||
|
input_class &devclass = m_manager.device_class(DEVICE_CLASS_KEYBOARD);
|
||||||
|
for (int devnum = 0; devclass.maxindex() >= devnum; ++devnum)
|
||||||
|
{
|
||||||
|
// fetch the device; ignore if nullptr
|
||||||
|
input_device *const device(devclass.device(devnum));
|
||||||
|
if (device)
|
||||||
|
{
|
||||||
|
// iterate over items within each device
|
||||||
|
for (input_item_id itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem(); ++itemid)
|
||||||
|
{
|
||||||
|
// iterate over items within each device
|
||||||
|
for (input_item_id itemid = ITEM_ID_FIRST_VALID; device->maxitem() >= itemid; ++itemid)
|
||||||
|
{
|
||||||
|
input_device_item *const item = device->item(itemid);
|
||||||
|
if (item && (item->itemclass() == ITEM_CLASS_SWITCH))
|
||||||
|
{
|
||||||
|
input_code const code = item->code();
|
||||||
|
if (code_pressed_once(code, true))
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if nothing, return an invalid code
|
||||||
|
return INPUT_CODE_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
input_sequence_poller::input_sequence_poller() noexcept :
|
||||||
|
m_sequence(),
|
||||||
|
m_last_ticks(0),
|
||||||
|
m_modified(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input_sequence_poller::~input_sequence_poller()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void input_sequence_poller::start()
|
||||||
|
{
|
||||||
|
// start with an empty sequence
|
||||||
|
m_sequence.reset();
|
||||||
|
|
||||||
|
// reset the recording count and the clock
|
||||||
|
m_last_ticks = 0;
|
||||||
|
m_modified = false;
|
||||||
|
do_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void input_sequence_poller::start(input_seq const &startseq)
|
||||||
|
{
|
||||||
|
// grab the starting sequence to append to, and append an OR if it isn't empty
|
||||||
|
m_sequence = startseq;
|
||||||
|
if (input_seq::end_code != m_sequence[0])
|
||||||
|
m_sequence += input_seq::or_code;
|
||||||
|
|
||||||
|
// reset the recording count and the clock
|
||||||
|
m_last_ticks = 0;
|
||||||
|
m_modified = false;
|
||||||
|
do_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool input_sequence_poller::poll()
|
||||||
|
{
|
||||||
|
// if we got a new code to append it, append it and reset the timer
|
||||||
|
input_code const newcode = do_poll();
|
||||||
|
osd_ticks_t const newticks = osd_ticks();
|
||||||
|
if (INPUT_CODE_INVALID != newcode)
|
||||||
|
{
|
||||||
|
m_sequence += newcode;
|
||||||
|
m_last_ticks = newticks;
|
||||||
|
m_modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we've recorded at least one item and one second has passed, we're done
|
||||||
|
if (m_last_ticks && ((m_last_ticks + osd_ticks_per_second()) < newticks))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// return false to indicate we are still polling
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
axis_sequence_poller::axis_sequence_poller(input_manager &manager) noexcept :
|
||||||
|
input_sequence_poller(),
|
||||||
|
m_code_poller(manager)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void axis_sequence_poller::do_start()
|
||||||
|
{
|
||||||
|
// wait for any inputs that are already active to be released
|
||||||
|
m_code_poller.reset();
|
||||||
|
for (input_code dummycode = KEYCODE_ENTER; INPUT_CODE_INVALID != dummycode; )
|
||||||
|
dummycode = m_code_poller.poll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input_code axis_sequence_poller::do_poll()
|
||||||
|
{
|
||||||
|
// absolute/relative case: see if we have an analog change of sufficient amount
|
||||||
|
int const curlen = m_sequence.length();
|
||||||
|
input_code lastcode = m_sequence[curlen - 1];
|
||||||
|
bool const has_or = input_seq::or_code == lastcode;
|
||||||
|
if (has_or)
|
||||||
|
lastcode = m_sequence[curlen - 2];
|
||||||
|
input_code newcode = m_code_poller.poll();
|
||||||
|
|
||||||
|
// if not empty, see if it's the same control again to cycle modifiers
|
||||||
|
if ((INPUT_CODE_INVALID != newcode) && curlen)
|
||||||
|
{
|
||||||
|
input_item_class const newclass = newcode.item_class();
|
||||||
|
input_code last_nomodifier = lastcode;
|
||||||
|
last_nomodifier.set_item_modifier(ITEM_MODIFIER_NONE);
|
||||||
|
if (newcode == last_nomodifier)
|
||||||
|
{
|
||||||
|
if (ITEM_CLASS_ABSOLUTE == newclass)
|
||||||
|
{
|
||||||
|
// increment the modifier, wrapping back to none
|
||||||
|
switch (lastcode.item_modifier())
|
||||||
|
{
|
||||||
|
case ITEM_MODIFIER_NONE:
|
||||||
|
newcode.set_item_modifier(ITEM_MODIFIER_POS);
|
||||||
|
break;
|
||||||
|
case ITEM_MODIFIER_POS:
|
||||||
|
newcode.set_item_modifier(ITEM_MODIFIER_NEG);
|
||||||
|
break;
|
||||||
|
case ITEM_MODIFIER_NEG:
|
||||||
|
newcode.set_item_modifier(ITEM_MODIFIER_REVERSE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case ITEM_MODIFIER_REVERSE:
|
||||||
|
newcode.set_item_modifier(ITEM_MODIFIER_NONE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// back up over the previous code so we can re-append
|
||||||
|
if (has_or)
|
||||||
|
m_sequence.backspace();
|
||||||
|
m_sequence.backspace();
|
||||||
|
}
|
||||||
|
else if (ITEM_CLASS_RELATIVE == newclass)
|
||||||
|
{
|
||||||
|
// increment the modifier, wrapping back to none
|
||||||
|
switch (lastcode.item_modifier())
|
||||||
|
{
|
||||||
|
case ITEM_MODIFIER_NONE:
|
||||||
|
newcode.set_item_modifier(ITEM_MODIFIER_REVERSE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case ITEM_MODIFIER_REVERSE:
|
||||||
|
newcode.set_item_modifier(ITEM_MODIFIER_NONE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// back up over the previous code so we can re-append
|
||||||
|
if (has_or)
|
||||||
|
m_sequence.backspace();
|
||||||
|
m_sequence.backspace();
|
||||||
|
}
|
||||||
|
else if (!has_or && (ITEM_CLASS_SWITCH == newclass))
|
||||||
|
{
|
||||||
|
// back up over the existing code
|
||||||
|
m_sequence.backspace();
|
||||||
|
|
||||||
|
// if there was a NOT preceding it, delete it as well, otherwise append a fresh one
|
||||||
|
if (m_sequence[curlen - 2] == input_seq::not_code)
|
||||||
|
m_sequence.backspace();
|
||||||
|
else
|
||||||
|
m_sequence += input_seq::not_code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!has_or && (ITEM_CLASS_SWITCH == newclass))
|
||||||
|
{
|
||||||
|
// ignore switches following axes
|
||||||
|
if (ITEM_CLASS_SWITCH != lastcode.item_class())
|
||||||
|
{
|
||||||
|
// hack to stop it timing out so user can cancel
|
||||||
|
m_sequence.backspace();
|
||||||
|
newcode = lastcode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// hack to stop it timing out before assigning an axis
|
||||||
|
if (ITEM_CLASS_SWITCH == newcode.item_class())
|
||||||
|
{
|
||||||
|
m_sequence += newcode;
|
||||||
|
set_modified();
|
||||||
|
return INPUT_CODE_INVALID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return newcode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
switch_sequence_poller::switch_sequence_poller(input_manager &manager) noexcept :
|
||||||
|
input_sequence_poller(),
|
||||||
|
m_code_poller(manager)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void switch_sequence_poller::do_start()
|
||||||
|
{
|
||||||
|
// wait for any inputs that are already active to be released
|
||||||
|
m_code_poller.reset();
|
||||||
|
for (input_code dummycode = KEYCODE_ENTER; INPUT_CODE_INVALID != dummycode; )
|
||||||
|
dummycode = m_code_poller.poll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input_code switch_sequence_poller::do_poll()
|
||||||
|
{
|
||||||
|
// switch case: see if we have a new code to process
|
||||||
|
int const curlen = m_sequence.length();
|
||||||
|
input_code lastcode = m_sequence[curlen - 1];
|
||||||
|
input_code newcode = m_code_poller.poll();
|
||||||
|
if (INPUT_CODE_INVALID != newcode)
|
||||||
|
{
|
||||||
|
// if code is duplicate, toggle the NOT state on the code
|
||||||
|
if (curlen && (newcode == lastcode))
|
||||||
|
{
|
||||||
|
// back up over the existing code
|
||||||
|
m_sequence.backspace();
|
||||||
|
|
||||||
|
// if there was a NOT preceding it, delete it as well, otherwise append a fresh one
|
||||||
|
if (m_sequence[curlen - 2] == input_seq::not_code)
|
||||||
|
m_sequence.backspace();
|
||||||
|
else
|
||||||
|
m_sequence += input_seq::not_code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newcode;
|
||||||
|
}
|
123
src/icludes/frontend/mame/iptseqpoll.h
Normal file
123
src/icludes/frontend/mame/iptseqpoll.h
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb,Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
iptseqpoll.h
|
||||||
|
|
||||||
|
Helper for letting the user select input sequences.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_IPTSEQPOLL_H
|
||||||
|
#define MAME_FRONTEND_IPTSEQPOLL_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
class input_code_poller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~input_code_poller();
|
||||||
|
|
||||||
|
virtual void reset();
|
||||||
|
virtual input_code poll() = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
input_code_poller(input_manager &manager) noexcept;
|
||||||
|
|
||||||
|
bool code_pressed_once(input_code code, bool moved);
|
||||||
|
|
||||||
|
input_manager &m_manager;
|
||||||
|
std::vector<std::pair<input_device_item *, s32> > m_axis_memory;
|
||||||
|
std::vector<input_code> m_switch_memory;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class axis_code_poller : public input_code_poller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
axis_code_poller(input_manager &manager) noexcept;
|
||||||
|
|
||||||
|
virtual void reset() override;
|
||||||
|
virtual input_code poll() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<bool> m_axis_active;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class switch_code_poller : public input_code_poller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
switch_code_poller(input_manager &manager) noexcept;
|
||||||
|
|
||||||
|
virtual input_code poll() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class keyboard_code_poller : public input_code_poller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
keyboard_code_poller(input_manager &manager) noexcept;
|
||||||
|
|
||||||
|
virtual input_code poll() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class input_sequence_poller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~input_sequence_poller();
|
||||||
|
|
||||||
|
void start();
|
||||||
|
void start(input_seq const &startseq);
|
||||||
|
bool poll();
|
||||||
|
|
||||||
|
input_seq const &sequence() const noexcept { return m_sequence; }
|
||||||
|
bool valid() const noexcept { return m_sequence.is_valid(); }
|
||||||
|
bool modified() const noexcept { return m_modified; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
input_sequence_poller() noexcept;
|
||||||
|
|
||||||
|
void set_modified() noexcept { m_modified = true; }
|
||||||
|
|
||||||
|
input_seq m_sequence;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void do_start() = 0;
|
||||||
|
virtual input_code do_poll() = 0;
|
||||||
|
|
||||||
|
osd_ticks_t m_last_ticks;
|
||||||
|
bool m_modified;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class axis_sequence_poller : public input_sequence_poller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
axis_sequence_poller(input_manager &manager) noexcept;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void do_start() override;
|
||||||
|
virtual input_code do_poll() override;
|
||||||
|
|
||||||
|
axis_code_poller m_code_poller;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class switch_sequence_poller : public input_sequence_poller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
switch_sequence_poller(input_manager &manager) noexcept;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void do_start() override;
|
||||||
|
virtual input_code do_poll() override;
|
||||||
|
|
||||||
|
switch_code_poller m_code_poller;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_IPTSEQPOLL_H
|
41
src/icludes/frontend/mame/language.cpp
Normal file
41
src/icludes/frontend/mame/language.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
language.cpp
|
||||||
|
|
||||||
|
Multi-language support.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "language.h"
|
||||||
|
|
||||||
|
#include "emuopts.h"
|
||||||
|
|
||||||
|
#include "corestr.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
void load_translation(emu_options &m_options)
|
||||||
|
{
|
||||||
|
util::unload_translation();
|
||||||
|
|
||||||
|
std::string name = m_options.language();
|
||||||
|
if (name.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
strreplace(name, " ", "_");
|
||||||
|
strreplace(name, "(", "");
|
||||||
|
strreplace(name, ")", "");
|
||||||
|
emu_file file(m_options.language_path(), OPEN_FLAG_READ);
|
||||||
|
if (file.open(name + PATH_SEPARATOR "strings.mo"))
|
||||||
|
{
|
||||||
|
osd_printf_error("Error opening translation file %s\n", name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
osd_printf_verbose("Loading translation file %s\n", file.fullpath());
|
||||||
|
util::load_translation(file);
|
||||||
|
}
|
22
src/icludes/frontend/mame/language.h
Normal file
22
src/icludes/frontend/mame/language.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
language.h
|
||||||
|
|
||||||
|
Multi-language support.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_MAME_LANGUAGE_H
|
||||||
|
#define MAME_FRONTEND_MAME_LANGUAGE_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "util/language.h"
|
||||||
|
|
||||||
|
|
||||||
|
void load_translation(emu_options &options);
|
||||||
|
|
||||||
|
using util::lang_translate;
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_MAME_LANGUAGE_H
|
1941
src/icludes/frontend/mame/luaengine.cpp
Normal file
1941
src/icludes/frontend/mame/luaengine.cpp
Normal file
File diff suppressed because it is too large
Load Diff
181
src/icludes/frontend/mame/luaengine.h
Normal file
181
src/icludes/frontend/mame/luaengine.h
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
luaengine.h
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_MAME_LUAENGINE_H
|
||||||
|
#define MAME_FRONTEND_MAME_LUAENGINE_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <condition_variable>
|
||||||
|
#include <functional>
|
||||||
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
#include <optional>
|
||||||
|
#include <string>
|
||||||
|
#include <tuple>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#define SOL_SAFE_USERTYPE 1
|
||||||
|
#include "sol/sol.hpp"
|
||||||
|
|
||||||
|
struct lua_State;
|
||||||
|
|
||||||
|
class lua_engine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// helper structures
|
||||||
|
template <typename T> struct devenum;
|
||||||
|
template <typename T> struct simple_list_wrapper;
|
||||||
|
template <typename T> struct tag_object_ptr_map;
|
||||||
|
template <typename T> using standard_tag_object_ptr_map = tag_object_ptr_map<std::unordered_map<std::string, std::unique_ptr<T> > >;
|
||||||
|
template <typename T> struct immutable_container_helper;
|
||||||
|
template <typename T, typename C, typename I = typename C::iterator> struct immutable_collection_helper;
|
||||||
|
template <typename T, typename C, typename I = typename C::iterator> struct immutable_sequence_helper;
|
||||||
|
|
||||||
|
// construction/destruction
|
||||||
|
lua_engine();
|
||||||
|
~lua_engine();
|
||||||
|
|
||||||
|
void initialize();
|
||||||
|
void load_script(const char *filename);
|
||||||
|
void load_string(const char *value);
|
||||||
|
|
||||||
|
bool frame_hook();
|
||||||
|
|
||||||
|
std::optional<long> menu_populate(const std::string &menu, std::vector<std::tuple<std::string, std::string, std::string> > &menu_list, std::string &flags);
|
||||||
|
std::pair<bool, std::optional<long> > menu_callback(const std::string &menu, int index, const std::string &event);
|
||||||
|
|
||||||
|
void set_machine(running_machine *machine);
|
||||||
|
std::vector<std::string> &get_menu() { return m_menu; }
|
||||||
|
void attach_notifiers();
|
||||||
|
void on_frame_done();
|
||||||
|
void on_sound_update();
|
||||||
|
void on_periodic();
|
||||||
|
bool on_missing_mandatory_image(const std::string &instance_name);
|
||||||
|
void on_machine_before_load_settings();
|
||||||
|
|
||||||
|
template <typename T, typename U>
|
||||||
|
bool call_plugin(const std::string &name, T &&in, U &out)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
sol::object outobj = call_plugin(name, sol::make_object(sol(), std::forward<T>(in)));
|
||||||
|
if (outobj.is<U>())
|
||||||
|
{
|
||||||
|
out = outobj.as<U>();
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename U>
|
||||||
|
bool call_plugin(const std::string &name, T &&in, std::vector<U> &out)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
sol::object outobj = call_plugin(name, sol::make_object(sol(), std::forward<T>(in)));
|
||||||
|
if (outobj.is<sol::table>())
|
||||||
|
{
|
||||||
|
for (auto &entry : outobj.as<sol::table>())
|
||||||
|
{
|
||||||
|
if (entry.second.template is<U>())
|
||||||
|
{
|
||||||
|
out.push_back(entry.second.template as<U>());
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this can also check if a returned table contains type T
|
||||||
|
template <typename T, typename U>
|
||||||
|
bool call_plugin_check(const std::string &name, U &&in, bool table = false)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
sol::object outobj = call_plugin(name, sol::make_object(sol(), std::forward<U>(in)));
|
||||||
|
if (outobj.is<T>() && !table)
|
||||||
|
ret = true;
|
||||||
|
else if (outobj.is<sol::table>() && table)
|
||||||
|
{
|
||||||
|
// check just one entry, checking the whole thing shouldn't be necessary as this only supports homogeneous tables
|
||||||
|
if (outobj.as<sol::table>().begin().operator*().second.template is<T>())
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void call_plugin_set(const std::string &name, T &&in)
|
||||||
|
{
|
||||||
|
call_plugin(name, sol::make_object(sol(), std::forward<T>(in)));
|
||||||
|
}
|
||||||
|
|
||||||
|
sol::state_view &sol() const { return *m_sol_state; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
template<typename T, size_t SIZE> class enum_parser;
|
||||||
|
|
||||||
|
struct addr_space;
|
||||||
|
|
||||||
|
struct save_item {
|
||||||
|
void *base;
|
||||||
|
unsigned int size;
|
||||||
|
unsigned int count;
|
||||||
|
unsigned int valcount;
|
||||||
|
unsigned int blockcount;
|
||||||
|
unsigned int stride;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct context
|
||||||
|
{
|
||||||
|
context() { busy = false; yield = false; }
|
||||||
|
std::string result;
|
||||||
|
std::condition_variable sync;
|
||||||
|
bool busy;
|
||||||
|
bool yield;
|
||||||
|
};
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
lua_State *m_lua_state;
|
||||||
|
std::unique_ptr<sol::state_view> m_sol_state;
|
||||||
|
running_machine *m_machine;
|
||||||
|
|
||||||
|
std::vector<std::string> m_menu;
|
||||||
|
|
||||||
|
template <typename R, typename T, typename D>
|
||||||
|
auto make_simple_callback_setter(void (T::*setter)(delegate<R ()> &&), D &&dflt, const char *name, const char *desc);
|
||||||
|
|
||||||
|
running_machine &machine() const { return *m_machine; }
|
||||||
|
|
||||||
|
void on_machine_prestart();
|
||||||
|
void on_machine_start();
|
||||||
|
void on_machine_stop();
|
||||||
|
void on_machine_pause();
|
||||||
|
void on_machine_resume();
|
||||||
|
void on_machine_frame();
|
||||||
|
|
||||||
|
void resume(void *ptr, int nparam);
|
||||||
|
void register_function(sol::function func, const char *id);
|
||||||
|
int enumerate_functions(const char *id, std::function<bool(const sol::protected_function &func)> &&callback);
|
||||||
|
bool execute_function(const char *id);
|
||||||
|
sol::object call_plugin(const std::string &name, sol::object in);
|
||||||
|
|
||||||
|
void close();
|
||||||
|
|
||||||
|
void run(sol::load_result res);
|
||||||
|
|
||||||
|
template <typename TFunc, typename... TArgs>
|
||||||
|
sol::protected_function_result invoke(TFunc &&func, TArgs&&... args);
|
||||||
|
|
||||||
|
void initialize_debug(sol::table &emu);
|
||||||
|
void initialize_input(sol::table &emu);
|
||||||
|
void initialize_memory(sol::table &emu);
|
||||||
|
void initialize_render(sol::table &emu);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_MAME_LUAENGINE_H
|
536
src/icludes/frontend/mame/luaengine.ipp
Normal file
536
src/icludes/frontend/mame/luaengine.ipp
Normal file
@ -0,0 +1,536 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
luaengine.ipp
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_MAME_LUAENGINE_IPP
|
||||||
|
#define MAME_FRONTEND_MAME_LUAENGINE_IPP
|
||||||
|
|
||||||
|
#include "luaengine.h"
|
||||||
|
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
|
#include <lua.hpp>
|
||||||
|
|
||||||
|
#include <system_error>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct lua_engine::simple_list_wrapper
|
||||||
|
{
|
||||||
|
simple_list_wrapper(simple_list<T> const &l) : list(l) { }
|
||||||
|
|
||||||
|
simple_list<T> const &list;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct lua_engine::tag_object_ptr_map
|
||||||
|
{
|
||||||
|
tag_object_ptr_map(T const &m) : map(m) { }
|
||||||
|
|
||||||
|
T const ↦
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
namespace sol {
|
||||||
|
|
||||||
|
class buffer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// sol does lua_settop(0), save userdata buffer in registry if necessary
|
||||||
|
buffer(int size, lua_State *L)
|
||||||
|
{
|
||||||
|
ptr = luaL_buffinitsize(L, &buff, size);
|
||||||
|
len = size;
|
||||||
|
if(buff.b != buff.initb)
|
||||||
|
{
|
||||||
|
lua_pushvalue(L, -1);
|
||||||
|
lua_setfield(L, LUA_REGISTRYINDEX, "sol::buffer_temp");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
~buffer()
|
||||||
|
{
|
||||||
|
lua_State *L = buff.L;
|
||||||
|
if(lua_getfield(L, LUA_REGISTRYINDEX, "sol::buffer_temp") != LUA_TNIL)
|
||||||
|
{
|
||||||
|
lua_pushnil(L);
|
||||||
|
lua_setfield(L, LUA_REGISTRYINDEX, "sol::buffer_temp");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lua_pop(L, -1);
|
||||||
|
|
||||||
|
luaL_pushresultsize(&buff, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_len(int size) { len = size; }
|
||||||
|
int get_len() { return len; }
|
||||||
|
char *get_ptr() { return ptr; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
luaL_Buffer buff;
|
||||||
|
int len;
|
||||||
|
char *ptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// don't convert core_optons to a table directly
|
||||||
|
template <> struct is_container<core_options> : std::false_type { };
|
||||||
|
|
||||||
|
// buffer customisation
|
||||||
|
sol::buffer *sol_lua_get(sol::types<buffer *>, lua_State *L, int index, sol::stack::record &tracking);
|
||||||
|
int sol_lua_push(sol::types<buffer *>, lua_State *L, buffer *value);
|
||||||
|
|
||||||
|
|
||||||
|
// these things should be treated as containers
|
||||||
|
template <typename T> struct is_container<lua_engine::devenum<T> > : std::true_type { };
|
||||||
|
template <typename T> struct is_container<lua_engine::simple_list_wrapper<T> > : std::true_type { };
|
||||||
|
template <typename T> struct is_container<lua_engine::tag_object_ptr_map<T> > : std::true_type { };
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T> struct usertype_container<lua_engine::devenum<T> >;
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct usertype_container<lua_engine::simple_list_wrapper<T> > : lua_engine::immutable_collection_helper<lua_engine::simple_list_wrapper<T>, simple_list<T> const, typename simple_list<T>::auto_iterator>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
static int next_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
typename usertype_container::indexed_iterator &i(stack::unqualified_get<user<typename usertype_container::indexed_iterator> >(L, 1));
|
||||||
|
if (i.src.end() == i.it)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
int result;
|
||||||
|
result = stack::push(L, i.ix + 1);
|
||||||
|
result += stack::push_reference(L, *i.it);
|
||||||
|
++i;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int at(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::simple_list_wrapper<T> &self(usertype_container::get_self(L));
|
||||||
|
std::ptrdiff_t const index(stack::unqualified_get<std::ptrdiff_t>(L, 2));
|
||||||
|
if ((0 >= index) || (self.list.count() < index))
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
else
|
||||||
|
return stack::push_reference(L, *self.list.find(index - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get(lua_State *L) { return at(L); }
|
||||||
|
static int index_get(lua_State *L) { return at(L); }
|
||||||
|
|
||||||
|
static int index_of(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::simple_list_wrapper<T> &self(usertype_container::get_self(L));
|
||||||
|
T &target(stack::unqualified_get<T>(L, 2));
|
||||||
|
int const found(self.list.indexof(target));
|
||||||
|
if (0 > found)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
else
|
||||||
|
return stack::push(L, found + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int size(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::simple_list_wrapper<T> &self(usertype_container::get_self(L));
|
||||||
|
return stack::push(L, self.list.count());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int empty(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::simple_list_wrapper<T> &self(usertype_container::get_self(L));
|
||||||
|
return stack::push(L, self.list.empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int next(lua_State *L) { return stack::push(L, next_pairs); }
|
||||||
|
static int pairs(lua_State *L) { return ipairs(L); }
|
||||||
|
|
||||||
|
static int ipairs(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::simple_list_wrapper<T> &self(usertype_container::get_self(L));
|
||||||
|
stack::push(L, next_pairs);
|
||||||
|
stack::push<user<typename usertype_container::indexed_iterator> >(L, self.list, self.list.begin());
|
||||||
|
stack::push(L, lua_nil);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct usertype_container<lua_engine::tag_object_ptr_map<T> > : lua_engine::immutable_collection_helper<lua_engine::tag_object_ptr_map<T>, T const, typename T::const_iterator>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
template <bool Indexed>
|
||||||
|
static int next_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
typename usertype_container::indexed_iterator &i(stack::unqualified_get<user<typename usertype_container::indexed_iterator> >(L, 1));
|
||||||
|
if (i.src.end() == i.it)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
int result;
|
||||||
|
if constexpr (Indexed)
|
||||||
|
result = stack::push(L, i.ix + 1);
|
||||||
|
else
|
||||||
|
result = stack::push(L, i.it->first);
|
||||||
|
result += stack::push_reference(L, *i.it->second);
|
||||||
|
++i;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool Indexed>
|
||||||
|
static int start_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::tag_object_ptr_map<T> &self(usertype_container::get_self(L));
|
||||||
|
stack::push(L, next_pairs<Indexed>);
|
||||||
|
stack::push<user<typename usertype_container::indexed_iterator> >(L, self.map, self.map.begin());
|
||||||
|
stack::push(L, lua_nil);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int at(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::tag_object_ptr_map<T> &self(usertype_container::get_self(L));
|
||||||
|
std::ptrdiff_t const index(stack::unqualified_get<std::ptrdiff_t>(L, 2));
|
||||||
|
if ((0 >= index) || (self.map.size() < index))
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
auto const found(std::next(self.map.begin(), index - 1));
|
||||||
|
if (!found->second)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
else
|
||||||
|
return stack::push_reference(L, *found->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::tag_object_ptr_map<T> &self(usertype_container::get_self(L));
|
||||||
|
char const *const tag(stack::unqualified_get<char const *>(L));
|
||||||
|
auto const found(self.map.find(tag));
|
||||||
|
if ((self.map.end() == found) || !found->second)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
else
|
||||||
|
return stack::push_reference(L, *found->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_get(lua_State *L)
|
||||||
|
{
|
||||||
|
return get(L);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_of(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::tag_object_ptr_map<T> &self(usertype_container::get_self(L));
|
||||||
|
auto &obj(stack::unqualified_get<decltype(*self.map.begin()->second)>(L, 2));
|
||||||
|
auto it(self.map.begin());
|
||||||
|
std::ptrdiff_t ix(0);
|
||||||
|
while ((self.map.end() != it) && (it->second.get() != &obj))
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
++ix;
|
||||||
|
}
|
||||||
|
if (self.map.end() == it)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
else
|
||||||
|
return stack::push(L, ix + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int size(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::tag_object_ptr_map<T> &self(usertype_container::get_self(L));
|
||||||
|
return stack::push(L, self.map.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int empty(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_engine::tag_object_ptr_map<T> &self(usertype_container::get_self(L));
|
||||||
|
return stack::push(L, self.map.empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int next(lua_State *L) { return stack::push(L, next_pairs<false>); }
|
||||||
|
static int pairs(lua_State *L) { return start_pairs<false>(L); }
|
||||||
|
static int ipairs(lua_State *L) { return start_pairs<true>(L); }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sol
|
||||||
|
|
||||||
|
|
||||||
|
// automatically convert std::error_condition to string
|
||||||
|
int sol_lua_push(sol::types<std::error_condition>, lua_State &L, std::error_condition &&value);
|
||||||
|
|
||||||
|
// enums to automatically convert to strings
|
||||||
|
int sol_lua_push(sol::types<map_handler_type>, lua_State *L, map_handler_type &&value);
|
||||||
|
int sol_lua_push(sol::types<image_init_result>, lua_State *L, image_init_result &&value);
|
||||||
|
int sol_lua_push(sol::types<image_verify_result>, lua_State *L, image_verify_result &&value);
|
||||||
|
int sol_lua_push(sol::types<endianness_t>, lua_State *L, endianness_t &&value);
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct lua_engine::immutable_container_helper
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
static T &get_self(lua_State *L)
|
||||||
|
{
|
||||||
|
auto p(sol::stack::unqualified_check_get<T *>(L, 1));
|
||||||
|
if (!p)
|
||||||
|
luaL_error(L, "sol: 'self' is not of type '%s' (pass 'self' as first argument with ':' or call on proper type)", sol::detail::demangle<T>().c_str());
|
||||||
|
if (!*p)
|
||||||
|
luaL_error(L, "sol: 'self' argument is nil (pass 'self' as first argument with ':' or call on a '%s' type", sol::detail::demangle<T>().c_str());
|
||||||
|
return **p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int set(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'set(key, value)' on type '%s': container is not modifiable", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_set(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'container[key] = value' on type '%s': container is not modifiable", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int add(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'add' on type '%s': container is not modifiable", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int insert(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'insert' on type '%s': container is not modifiable", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int find(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'find' on type '%s': no supported comparison operator for the value type", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_of(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'index_of' on type '%s': no supported comparison operator for the value type", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int clear(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'clear' on type '%s': container is not modifiable", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int erase(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'erase' on type '%s': container is not modifiable", sol::detail::demangle<T>().c_str());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, typename C, typename I>
|
||||||
|
struct lua_engine::immutable_collection_helper : immutable_container_helper<T>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
using iterator = I;
|
||||||
|
|
||||||
|
struct indexed_iterator
|
||||||
|
{
|
||||||
|
indexed_iterator(C &s, iterator i) : src(s), it(i), ix(0U) { }
|
||||||
|
|
||||||
|
C &src;
|
||||||
|
iterator it;
|
||||||
|
std::size_t ix;
|
||||||
|
|
||||||
|
indexed_iterator &operator++()
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
++ix;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, typename C, typename I>
|
||||||
|
struct lua_engine::immutable_sequence_helper : immutable_collection_helper<T, C, I>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
template <bool Indexed>
|
||||||
|
static int next_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
auto &i(sol::stack::unqualified_get<sol::user<typename immutable_sequence_helper::indexed_iterator> >(L, 1));
|
||||||
|
if (i.src.end() == i.it)
|
||||||
|
return sol::stack::push(L, sol::lua_nil);
|
||||||
|
int result;
|
||||||
|
if constexpr (Indexed)
|
||||||
|
result = sol::stack::push(L, i.ix + 1);
|
||||||
|
else
|
||||||
|
result = T::push_key(L, i.it, i.ix);
|
||||||
|
result += sol::stack::push_reference(L, T::unwrap(i.it));
|
||||||
|
++i;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool Indexed>
|
||||||
|
static int start_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
T &self(immutable_sequence_helper::get_self(L));
|
||||||
|
sol::stack::push(L, next_pairs<Indexed>);
|
||||||
|
sol::stack::push<sol::user<typename immutable_sequence_helper::indexed_iterator> >(L, self.items(), self.items().begin());
|
||||||
|
sol::stack::push(L, sol::lua_nil);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int at(lua_State *L)
|
||||||
|
{
|
||||||
|
T &self(immutable_sequence_helper::get_self(L));
|
||||||
|
std::ptrdiff_t const index(sol::stack::unqualified_get<std::ptrdiff_t>(L, 2));
|
||||||
|
if ((0 >= index) || (self.items().size() < index))
|
||||||
|
return sol::stack::push(L, sol::lua_nil);
|
||||||
|
else
|
||||||
|
return sol::stack::push_reference(L, T::unwrap(std::next(self.items().begin(), index - 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_of(lua_State *L)
|
||||||
|
{
|
||||||
|
T &self(immutable_sequence_helper::get_self(L));
|
||||||
|
auto it(self.items().begin());
|
||||||
|
std::ptrdiff_t ix(0);
|
||||||
|
auto const &item(sol::stack::unqualified_get<decltype(T::unwrap(it))>(L, 2));
|
||||||
|
while ((self.items().end() != it) && (&item != &T::unwrap(it)))
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
++ix;
|
||||||
|
}
|
||||||
|
if (self.items().end() == it)
|
||||||
|
return sol::stack::push(L, sol::lua_nil);
|
||||||
|
else
|
||||||
|
return sol::stack::push(L, ix + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int size(lua_State *L)
|
||||||
|
{
|
||||||
|
T &self(immutable_sequence_helper::get_self(L));
|
||||||
|
return sol::stack::push(L, self.items().size());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int empty(lua_State *L)
|
||||||
|
{
|
||||||
|
T &self(immutable_sequence_helper::get_self(L));
|
||||||
|
return sol::stack::push(L, self.items().empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int next(lua_State *L) { return sol::stack::push(L, next_pairs<false>); }
|
||||||
|
static int pairs(lua_State *L) { return start_pairs<false>(L); }
|
||||||
|
static int ipairs(lua_State *L) { return start_pairs<true>(L); }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct lua_engine::addr_space
|
||||||
|
{
|
||||||
|
addr_space(address_space &s, device_memory_interface &d) : space(s), dev(d) { }
|
||||||
|
|
||||||
|
template <typename T> T mem_read(offs_t address);
|
||||||
|
template <typename T> void mem_write(offs_t address, T val);
|
||||||
|
template <typename T> T log_mem_read(offs_t address);
|
||||||
|
template <typename T> void log_mem_write(offs_t address, T val);
|
||||||
|
template <typename T> T direct_mem_read(offs_t address);
|
||||||
|
template <typename T> void direct_mem_write(offs_t address, T val);
|
||||||
|
|
||||||
|
address_space &space;
|
||||||
|
device_memory_interface &dev;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, size_t SIZE>
|
||||||
|
class lua_engine::enum_parser
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
constexpr enum_parser(std::initializer_list<std::pair<std::string_view, T> > values)
|
||||||
|
{
|
||||||
|
if (values.size() != SIZE)
|
||||||
|
throw false && "size template argument incorrectly specified";
|
||||||
|
std::copy(values.begin(), values.end(), m_map.begin());
|
||||||
|
}
|
||||||
|
|
||||||
|
T operator()(std::string_view text) const
|
||||||
|
{
|
||||||
|
auto iter = std::find_if(
|
||||||
|
m_map.begin() + 1,
|
||||||
|
m_map.end(),
|
||||||
|
[&text] (const auto &x) { return text == x.first; });
|
||||||
|
if (iter == m_map.end())
|
||||||
|
iter = m_map.begin();
|
||||||
|
return iter->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::array<std::pair<std::string_view, T>, SIZE> m_map;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// make_simple_callback_setter - make a callback
|
||||||
|
// setter for simple cases
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename R, typename T, typename D>
|
||||||
|
auto lua_engine::make_simple_callback_setter(void (T::*setter)(delegate<R ()> &&), D &&dflt, const char *name, const char *desc)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
[this, setter, dflt, name, desc] (T &self, sol::object cb)
|
||||||
|
{
|
||||||
|
if (cb == sol::lua_nil)
|
||||||
|
{
|
||||||
|
(self.*setter)(delegate<R ()>());
|
||||||
|
}
|
||||||
|
else if (cb.is<sol::protected_function>())
|
||||||
|
{
|
||||||
|
(self.*setter)(delegate<R ()>(
|
||||||
|
[this, dflt, desc, cbfunc = cb.as<sol::protected_function>()] () -> R
|
||||||
|
{
|
||||||
|
if constexpr (std::is_same_v<R, void>)
|
||||||
|
{
|
||||||
|
(void)dflt;
|
||||||
|
(void)desc;
|
||||||
|
invoke(cbfunc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto result(invoke(cbfunc).get<sol::optional<R> >());
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
return *result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
osd_printf_error("[LUA ERROR] invalid return from %s callback\n", desc);
|
||||||
|
return dflt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
osd_printf_error("[LUA ERROR] must call %s with function or nil\n", name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// invoke - invokes a function, wrapping profiler
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename TFunc, typename... TArgs>
|
||||||
|
inline sol::protected_function_result lua_engine::invoke(TFunc &&func, TArgs &&... args)
|
||||||
|
{
|
||||||
|
g_profiler.start(PROFILER_LUA);
|
||||||
|
sol::protected_function_result result = func(std::forward<TArgs>(args)...);
|
||||||
|
g_profiler.stop();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_MAME_LUAENGINE_IPP
|
241
src/icludes/frontend/mame/luaengine_debug.cpp
Normal file
241
src/icludes/frontend/mame/luaengine_debug.cpp
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic,Luca Bruno
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
luaengine.cpp
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "luaengine.ipp"
|
||||||
|
|
||||||
|
#include "debug/debugcon.h"
|
||||||
|
#include "debug/debugcpu.h"
|
||||||
|
#include "debug/debugvw.h"
|
||||||
|
#include "debug/points.h"
|
||||||
|
#include "debug/textbuf.h"
|
||||||
|
#include "debugger.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct wrap_textbuf
|
||||||
|
{
|
||||||
|
wrap_textbuf(text_buffer const &buf) : textbuf(buf) { }
|
||||||
|
|
||||||
|
std::reference_wrapper<const text_buffer> textbuf;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <bool Enable>
|
||||||
|
sol::object do_breakpoint_enable(device_debug &dev, sol::this_state s, sol::object index)
|
||||||
|
{
|
||||||
|
if (index == sol::lua_nil)
|
||||||
|
{
|
||||||
|
dev.breakpoint_enable_all(Enable);
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_DISASSEMBLY);
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_BREAK_POINTS);
|
||||||
|
return sol::lua_nil;
|
||||||
|
}
|
||||||
|
else if (index.is<int>())
|
||||||
|
{
|
||||||
|
bool result(dev.breakpoint_enable(index.as<int>(), Enable));
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_DISASSEMBLY);
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_BREAK_POINTS);
|
||||||
|
}
|
||||||
|
return sol::make_object(s, result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
osd_printf_error("[LUA ERROR] must call bpenable with integer or nil\n");
|
||||||
|
return sol::lua_nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <bool Enable>
|
||||||
|
sol::object do_watchpoint_enable(device_debug &dev, sol::this_state s, sol::object index)
|
||||||
|
{
|
||||||
|
if (index == sol::lua_nil)
|
||||||
|
{
|
||||||
|
dev.watchpoint_enable_all(Enable);
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_WATCH_POINTS);
|
||||||
|
return sol::lua_nil;
|
||||||
|
}
|
||||||
|
else if (index.is<int>())
|
||||||
|
{
|
||||||
|
bool result(dev.watchpoint_enable(index.as<int>(), Enable));
|
||||||
|
if (result)
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_WATCH_POINTS);
|
||||||
|
return sol::make_object(s, result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
osd_printf_error("[LUA ERROR] must call wpenable with integer or nil");
|
||||||
|
return sol::lua_nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
void lua_engine::initialize_debug(sol::table &emu)
|
||||||
|
{
|
||||||
|
|
||||||
|
static const enum_parser<read_or_write, 4> s_read_or_write_parser =
|
||||||
|
{
|
||||||
|
{ "r", read_or_write::READ },
|
||||||
|
{ "w", read_or_write::WRITE },
|
||||||
|
{ "rw", read_or_write::READWRITE },
|
||||||
|
{ "wr", read_or_write::READWRITE }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
auto debugger_type = sol().registry().new_usertype<debugger_manager>("debugger", sol::no_constructor);
|
||||||
|
debugger_type["command"] = [] (debugger_manager &debug, std::string const &cmd) { debug.console().execute_command(cmd, false); };
|
||||||
|
debugger_type["consolelog"] = sol::property([] (debugger_manager &debug) { return wrap_textbuf(debug.console().get_console_textbuf()); });
|
||||||
|
debugger_type["errorlog"] = sol::property([](debugger_manager &debug) { return wrap_textbuf(debug.console().get_errorlog_textbuf()); });
|
||||||
|
debugger_type["visible_cpu"] = sol::property(
|
||||||
|
[](debugger_manager &debug) { return debug.console().get_visible_cpu(); },
|
||||||
|
[](debugger_manager &debug, device_t &dev) { debug.console().set_visible_cpu(&dev); });
|
||||||
|
debugger_type["execution_state"] = sol::property(
|
||||||
|
[] (debugger_manager &debug) { return debug.cpu().is_stopped() ? "stop" : "run"; },
|
||||||
|
[] (debugger_manager &debug, std::string const &state)
|
||||||
|
{
|
||||||
|
if (state == "stop")
|
||||||
|
debug.cpu().set_execution_stopped();
|
||||||
|
else
|
||||||
|
debug.cpu().set_execution_running();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/* wrap_textbuf library (requires debugger to be active)
|
||||||
|
*
|
||||||
|
* manager:machine():debugger().consolelog
|
||||||
|
* manager:machine():debugger().errorlog
|
||||||
|
*
|
||||||
|
* log[index] - get log entry
|
||||||
|
* #log - entry count
|
||||||
|
*/
|
||||||
|
|
||||||
|
sol().registry().new_usertype<wrap_textbuf>("text_buffer", "new", sol::no_constructor,
|
||||||
|
"__metatable", [](){},
|
||||||
|
"__newindex", [](){},
|
||||||
|
"__index", [](wrap_textbuf &buf, int index) { return text_buffer_get_seqnum_line(buf.textbuf, index - 1); },
|
||||||
|
"__len", [](wrap_textbuf &buf) { return text_buffer_num_lines(buf.textbuf) + text_buffer_line_index_to_seqnum(buf.textbuf, 0) - 1; });
|
||||||
|
|
||||||
|
|
||||||
|
auto device_debug_type = sol().registry().new_usertype<device_debug>("device_debug", sol::no_constructor);
|
||||||
|
device_debug_type["step"] =
|
||||||
|
[] (device_debug &dev, sol::object num)
|
||||||
|
{
|
||||||
|
int steps = 1;
|
||||||
|
if (num.is<int>())
|
||||||
|
steps = num.as<int>();
|
||||||
|
dev.single_step(steps);
|
||||||
|
};
|
||||||
|
device_debug_type["go"] = &device_debug::go;
|
||||||
|
device_debug_type["bpset"] =
|
||||||
|
[] (device_debug &dev, offs_t address, char const *cond, char const *act)
|
||||||
|
{
|
||||||
|
int result(dev.breakpoint_set(address, cond, act));
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_DISASSEMBLY);
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_BREAK_POINTS);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
device_debug_type["bpclear"] = sol::overload(
|
||||||
|
[] (device_debug &dev, int index)
|
||||||
|
{
|
||||||
|
bool result(dev.breakpoint_clear(index));
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_DISASSEMBLY);
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_BREAK_POINTS);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
[] (device_debug &dev)
|
||||||
|
{
|
||||||
|
dev.breakpoint_clear_all();
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_DISASSEMBLY);
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_BREAK_POINTS);
|
||||||
|
});
|
||||||
|
device_debug_type["bpenable"] = &do_breakpoint_enable<true>;
|
||||||
|
device_debug_type["bpdisable"] = &do_breakpoint_enable<false>;
|
||||||
|
device_debug_type["bplist"] =
|
||||||
|
[this] (device_debug &dev)
|
||||||
|
{
|
||||||
|
sol::table table = sol().create_table();
|
||||||
|
for (auto const &bpp : dev.breakpoint_list())
|
||||||
|
table[bpp.second->index()] = sol::make_reference(sol(), *bpp.second);
|
||||||
|
return table;
|
||||||
|
};
|
||||||
|
device_debug_type["wpset"] =
|
||||||
|
[] (device_debug &dev, addr_space &sp, std::string const &type, offs_t addr, offs_t len, char const *cond, char const *act)
|
||||||
|
{
|
||||||
|
read_or_write wptype = s_read_or_write_parser(type);
|
||||||
|
int result(dev.watchpoint_set(sp.space, wptype, addr, len, cond, act));
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_WATCH_POINTS);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
device_debug_type["wpclear"] = sol::overload(
|
||||||
|
[] (device_debug &dev, int index)
|
||||||
|
{
|
||||||
|
bool result(dev.watchpoint_clear(index));
|
||||||
|
if (result)
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_WATCH_POINTS);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
[] (device_debug &dev)
|
||||||
|
{
|
||||||
|
dev.watchpoint_clear_all();
|
||||||
|
dev.device().machine().debug_view().update_all(DVT_WATCH_POINTS);
|
||||||
|
});
|
||||||
|
device_debug_type["wpenable"] = &do_watchpoint_enable<true>;
|
||||||
|
device_debug_type["wpdisable"] = &do_watchpoint_enable<false>;
|
||||||
|
device_debug_type["wplist"] =
|
||||||
|
[this] (device_debug &dev, addr_space &sp)
|
||||||
|
{
|
||||||
|
sol::table table = sol().create_table();
|
||||||
|
for (auto &wpp : dev.watchpoint_vector(sp.space.spacenum()))
|
||||||
|
table[wpp->index()] = sol::make_reference(sol(), *wpp);
|
||||||
|
return table;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
auto breakpoint_type = sol().registry().new_usertype<debug_breakpoint>("breakpoint", sol::no_constructor);
|
||||||
|
breakpoint_type["index"] = sol::property(&debug_breakpoint::index);
|
||||||
|
breakpoint_type["enabled"] = sol::property(&debug_breakpoint::enabled);
|
||||||
|
breakpoint_type["address"] = sol::property(&debug_breakpoint::address);
|
||||||
|
breakpoint_type["condition"] = sol::property(&debug_breakpoint::condition);
|
||||||
|
breakpoint_type["action"] = sol::property(&debug_breakpoint::action);
|
||||||
|
|
||||||
|
|
||||||
|
auto watchpoint_type = sol().registry().new_usertype<debug_watchpoint>("watchpoint", sol::no_constructor);
|
||||||
|
watchpoint_type["index"] = sol::property(&debug_watchpoint::index);
|
||||||
|
watchpoint_type["enabled"] = sol::property(&debug_watchpoint::enabled);
|
||||||
|
watchpoint_type["type"] = sol::property(
|
||||||
|
[] (debug_watchpoint &wp) -> char const *
|
||||||
|
{
|
||||||
|
switch (wp.type())
|
||||||
|
{
|
||||||
|
case read_or_write::READ:
|
||||||
|
return "r";
|
||||||
|
case read_or_write::WRITE:
|
||||||
|
return "w";
|
||||||
|
case read_or_write::READWRITE:
|
||||||
|
return "rw";
|
||||||
|
default: // huh?
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
watchpoint_type["address"] = sol::property(&debug_watchpoint::address);
|
||||||
|
watchpoint_type["length"] = sol::property(&debug_watchpoint::length);
|
||||||
|
watchpoint_type["condition"] = sol::property(&debug_watchpoint::condition);
|
||||||
|
watchpoint_type["action"] = sol::property(&debug_watchpoint::action);
|
||||||
|
|
||||||
|
}
|
481
src/icludes/frontend/mame/luaengine_input.cpp
Normal file
481
src/icludes/frontend/mame/luaengine_input.cpp
Normal file
@ -0,0 +1,481 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic,Luca Bruno
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
luaengine_input.cpp
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "luaengine.ipp"
|
||||||
|
|
||||||
|
#include "iptseqpoll.h"
|
||||||
|
|
||||||
|
#include "inputdev.h"
|
||||||
|
#include "natkeyboard.h"
|
||||||
|
#include "render.h"
|
||||||
|
#include "uiinput.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct natkbd_kbd_dev
|
||||||
|
{
|
||||||
|
natkbd_kbd_dev(natural_keyboard &m, std::size_t i) : manager(m), index(i) { }
|
||||||
|
|
||||||
|
natural_keyboard &manager;
|
||||||
|
std::size_t index;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct natkbd_kbd_list
|
||||||
|
{
|
||||||
|
natkbd_kbd_list(natural_keyboard &m) : manager(m) { }
|
||||||
|
|
||||||
|
natural_keyboard &manager;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
namespace sol {
|
||||||
|
|
||||||
|
template <> struct is_container<natkbd_kbd_list> : std::true_type { };
|
||||||
|
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct usertype_container<natkbd_kbd_list> : lua_engine::immutable_container_helper<natkbd_kbd_list>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
template <bool Indexed>
|
||||||
|
static int next_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
natkbd_kbd_dev &i(stack::unqualified_get<user<natkbd_kbd_dev> >(L, 1));
|
||||||
|
if (i.manager.keyboard_count() <= i.index)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
int result;
|
||||||
|
if constexpr (Indexed)
|
||||||
|
result = stack::push(L, i.index + 1);
|
||||||
|
else
|
||||||
|
result = stack::push(L, i.manager.keyboard_device(i.index).tag());
|
||||||
|
result += stack::push(L, i);
|
||||||
|
++i.index;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool Indexed>
|
||||||
|
static int start_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
natkbd_kbd_list &self(get_self(L));
|
||||||
|
stack::push(L, next_pairs<Indexed>);
|
||||||
|
stack::push<user<natkbd_kbd_dev> >(L, self.manager, 0);
|
||||||
|
stack::push(L, lua_nil);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int at(lua_State *L)
|
||||||
|
{
|
||||||
|
natkbd_kbd_list &self(get_self(L));
|
||||||
|
std::ptrdiff_t const index(stack::unqualified_get<std::ptrdiff_t>(L, 2));
|
||||||
|
if ((0 < index) && (self.manager.keyboard_count() >= index))
|
||||||
|
return stack::push(L, natkbd_kbd_dev(self.manager, index - 1));
|
||||||
|
else
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get(lua_State *L)
|
||||||
|
{
|
||||||
|
natkbd_kbd_list &self(get_self(L));
|
||||||
|
char const *const tag(stack::unqualified_get<char const *>(L));
|
||||||
|
for (std::size_t i = 0; self.manager.keyboard_count() > i; ++i)
|
||||||
|
{
|
||||||
|
if (!std::strcmp(self.manager.keyboard_device(i).tag(), tag))
|
||||||
|
return stack::push(L, natkbd_kbd_dev(self.manager, i));
|
||||||
|
}
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_get(lua_State *L)
|
||||||
|
{
|
||||||
|
return get(L);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int size(lua_State *L)
|
||||||
|
{
|
||||||
|
natkbd_kbd_list &self(get_self(L));
|
||||||
|
return stack::push(L, self.manager.keyboard_count());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int empty(lua_State *L)
|
||||||
|
{
|
||||||
|
natkbd_kbd_list &self(get_self(L));
|
||||||
|
return stack::push(L, !self.manager.keyboard_count());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int next(lua_State *L) { return stack::push(L, next_pairs<false>); }
|
||||||
|
static int pairs(lua_State *L) { return start_pairs<false>(L); }
|
||||||
|
static int ipairs(lua_State *L) { return start_pairs<true>(L); }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sol
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// initialize_input - register input user types
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void lua_engine::initialize_input(sol::table &emu)
|
||||||
|
{
|
||||||
|
|
||||||
|
static const enum_parser<input_seq_type, 3> s_seq_type_parser =
|
||||||
|
{
|
||||||
|
{ "standard", SEQ_TYPE_STANDARD },
|
||||||
|
{ "increment", SEQ_TYPE_INCREMENT },
|
||||||
|
{ "decrement", SEQ_TYPE_DECREMENT },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
auto ioport_manager_type = sol().registry().new_usertype<ioport_manager>("ioport", sol::no_constructor);
|
||||||
|
ioport_manager_type["count_players"] = &ioport_manager::count_players;
|
||||||
|
ioport_manager_type["type_pressed"] = sol::overload(
|
||||||
|
&ioport_manager::type_pressed,
|
||||||
|
[] (ioport_manager &im, ioport_type type) { return im.type_pressed(type, 0); });
|
||||||
|
ioport_manager_type["type_name"] = sol::overload(
|
||||||
|
&ioport_manager::type_name,
|
||||||
|
[] (ioport_manager &im, ioport_type type) { return im.type_name(type, 0); });
|
||||||
|
ioport_manager_type["type_group"] = sol::overload(
|
||||||
|
&ioport_manager::type_group,
|
||||||
|
[] (ioport_manager &im, ioport_type type) { return im.type_group(type, 0); });
|
||||||
|
ioport_manager_type["type_seq"] =
|
||||||
|
[] (ioport_manager &im, ioport_type type, std::optional<int> player, std::optional<char const *> seq_type_string)
|
||||||
|
{
|
||||||
|
if (!player)
|
||||||
|
player = 0;
|
||||||
|
input_seq_type seq_type = seq_type_string ? s_seq_type_parser(*seq_type_string) : SEQ_TYPE_STANDARD;
|
||||||
|
return im.type_seq(type, *player, seq_type);
|
||||||
|
};
|
||||||
|
ioport_manager_type["set_type_seq"] =
|
||||||
|
[] (ioport_manager &im, ioport_type type, std::optional<int> player, std::optional<char const *> seq_type_string, input_seq const &seq)
|
||||||
|
{
|
||||||
|
if (!player)
|
||||||
|
player = 0;
|
||||||
|
input_seq_type seq_type = seq_type_string ? s_seq_type_parser(*seq_type_string) : SEQ_TYPE_STANDARD;
|
||||||
|
im.set_type_seq(type, *player, seq_type, seq);
|
||||||
|
};
|
||||||
|
ioport_manager_type["token_to_input_type"] =
|
||||||
|
[] (ioport_manager &im, std::string const &string)
|
||||||
|
{
|
||||||
|
int player;
|
||||||
|
ioport_type const type = im.token_to_input_type(string.c_str(), player);
|
||||||
|
return std::make_tuple(type, player);
|
||||||
|
};
|
||||||
|
ioport_manager_type["input_type_to_token"] = sol::overload(
|
||||||
|
&ioport_manager::input_type_to_token,
|
||||||
|
[] (ioport_manager &im, ioport_type type) { return im.input_type_to_token(type, 0); });
|
||||||
|
ioport_manager_type["ports"] = sol::property([] (ioport_manager &im) { return tag_object_ptr_map<ioport_list>(im.ports()); });
|
||||||
|
|
||||||
|
|
||||||
|
auto natkeyboard_type = sol().registry().new_usertype<natural_keyboard>("natkeyboard", sol::no_constructor);
|
||||||
|
natkeyboard_type["post"] = [] (natural_keyboard &nat, std::string const &text) { nat.post_utf8(text); };
|
||||||
|
natkeyboard_type["post_coded"] = [] (natural_keyboard &nat, std::string const &text) { nat.post_coded(text); };
|
||||||
|
natkeyboard_type["paste"] = &natural_keyboard::paste;
|
||||||
|
natkeyboard_type["dump"] = static_cast<std::string (natural_keyboard::*)() const>(&natural_keyboard::dump);
|
||||||
|
natkeyboard_type["empty"] = sol::property(&natural_keyboard::empty);
|
||||||
|
natkeyboard_type["full"] = sol::property(&natural_keyboard::full);
|
||||||
|
natkeyboard_type["can_post"] = sol::property(&natural_keyboard::can_post);
|
||||||
|
natkeyboard_type["is_posting"] = sol::property(&natural_keyboard::is_posting);
|
||||||
|
natkeyboard_type["in_use"] = sol::property(&natural_keyboard::in_use, &natural_keyboard::set_in_use);
|
||||||
|
natkeyboard_type["keyboards"] = sol::property([] (natural_keyboard &nat) { return natkbd_kbd_list(nat); });
|
||||||
|
|
||||||
|
|
||||||
|
auto natkbddev_type = sol().registry().new_usertype<natkbd_kbd_dev>("natkeyboard_device", sol::no_constructor);
|
||||||
|
natkbddev_type["device"] = sol::property([] (natkbd_kbd_dev const &kbd) -> device_t & { return kbd.manager.keyboard_device(kbd.index); });
|
||||||
|
natkbddev_type["tag"] = sol::property([] (natkbd_kbd_dev const &kbd) { return kbd.manager.keyboard_device(kbd.index).tag(); });
|
||||||
|
natkbddev_type["basetag"] = sol::property([] (natkbd_kbd_dev const &kbd) { return kbd.manager.keyboard_device(kbd.index).basetag(); });
|
||||||
|
natkbddev_type["name"] = sol::property([] (natkbd_kbd_dev const &kbd) { return kbd.manager.keyboard_device(kbd.index).name(); });
|
||||||
|
natkbddev_type["shortname"] = sol::property([] (natkbd_kbd_dev const &kbd) { return kbd.manager.keyboard_device(kbd.index).shortname(); });
|
||||||
|
natkbddev_type["is_keypad"] = sol::property([] (natkbd_kbd_dev const &kbd) { return kbd.manager.keyboard_is_keypad(kbd.index); });
|
||||||
|
natkbddev_type["enabled"] = sol::property(
|
||||||
|
[] (natkbd_kbd_dev const &kbd) { return kbd.manager.keyboard_enabled(kbd.index); },
|
||||||
|
[] (natkbd_kbd_dev &kbd, bool enable)
|
||||||
|
{
|
||||||
|
if (enable)
|
||||||
|
kbd.manager.enable_keyboard(kbd.index);
|
||||||
|
else
|
||||||
|
kbd.manager.disable_keyboard(kbd.index);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
auto ioport_port_type = sol().registry().new_usertype<ioport_port>("ioport_port", sol::no_constructor);
|
||||||
|
ioport_port_type["read"] = &ioport_port::read;
|
||||||
|
ioport_port_type["write"] = &ioport_port::write;
|
||||||
|
ioport_port_type["field"] = &ioport_port::field;
|
||||||
|
ioport_port_type["device"] = sol::property(&ioport_port::device);
|
||||||
|
ioport_port_type["tag"] = sol::property(&ioport_port::tag);
|
||||||
|
ioport_port_type["active"] = sol::property(&ioport_port::active);
|
||||||
|
ioport_port_type["live"] = sol::property(&ioport_port::live);
|
||||||
|
ioport_port_type["fields"] = sol::property(
|
||||||
|
[this] (ioport_port &p)
|
||||||
|
{
|
||||||
|
sol::table f_table = sol().create_table();
|
||||||
|
// parse twice for custom and default names, default has priority
|
||||||
|
for (ioport_field &field : p.fields())
|
||||||
|
{
|
||||||
|
if (field.type_class() != INPUT_CLASS_INTERNAL)
|
||||||
|
f_table[field.name()] = &field;
|
||||||
|
}
|
||||||
|
for (ioport_field &field : p.fields())
|
||||||
|
{
|
||||||
|
if (field.type_class() != INPUT_CLASS_INTERNAL)
|
||||||
|
{
|
||||||
|
if (field.specific_name())
|
||||||
|
f_table[field.specific_name()] = &field;
|
||||||
|
else
|
||||||
|
f_table[field.manager().type_name(field.type(), field.player())] = &field;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return f_table;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
auto ioport_field_type = sol().registry().new_usertype<ioport_field>("ioport_field", sol::no_constructor);
|
||||||
|
ioport_field_type["set_value"] = &ioport_field::set_value;
|
||||||
|
ioport_field_type["set_input_seq"] =
|
||||||
|
[] (ioport_field &f, std::string const &seq_type_string, const input_seq &seq)
|
||||||
|
{
|
||||||
|
input_seq_type seq_type = s_seq_type_parser(seq_type_string);
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
f.get_user_settings(settings);
|
||||||
|
settings.seq[seq_type] = seq;
|
||||||
|
if (seq.is_default())
|
||||||
|
settings.cfg[seq_type].clear();
|
||||||
|
else if (!seq.length())
|
||||||
|
settings.cfg[seq_type] = "NONE";
|
||||||
|
else
|
||||||
|
settings.cfg[seq_type] = f.port().device().machine().input().seq_to_tokens(seq);
|
||||||
|
f.set_user_settings(settings);
|
||||||
|
};
|
||||||
|
ioport_field_type["input_seq"] =
|
||||||
|
[] (ioport_field &f, std::string const &seq_type_string)
|
||||||
|
{
|
||||||
|
input_seq_type seq_type = s_seq_type_parser(seq_type_string);
|
||||||
|
return f.seq(seq_type);
|
||||||
|
};
|
||||||
|
ioport_field_type["set_default_input_seq"] =
|
||||||
|
[] (ioport_field &f, std::string const &seq_type_string, input_seq const &seq)
|
||||||
|
{
|
||||||
|
input_seq_type seq_type = s_seq_type_parser(seq_type_string);
|
||||||
|
f.set_defseq(seq_type, seq);
|
||||||
|
};
|
||||||
|
ioport_field_type["default_input_seq"] =
|
||||||
|
[] (ioport_field &f, const std::string &seq_type_string)
|
||||||
|
{
|
||||||
|
input_seq_type seq_type = s_seq_type_parser(seq_type_string);
|
||||||
|
return f.defseq(seq_type);
|
||||||
|
};
|
||||||
|
ioport_field_type["keyboard_codes"] =
|
||||||
|
[this] (ioport_field &f, int which)
|
||||||
|
{
|
||||||
|
sol::table result = sol().create_table();
|
||||||
|
int index = 1;
|
||||||
|
for (char32_t code : f.keyboard_codes(which))
|
||||||
|
result[index++] = code;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
ioport_field_type["device"] = sol::property(&ioport_field::device);
|
||||||
|
ioport_field_type["port"] = sol::property(&ioport_field::port);
|
||||||
|
ioport_field_type["live"] = sol::property(&ioport_field::live);
|
||||||
|
ioport_field_type["type"] = sol::property(&ioport_field::type);
|
||||||
|
ioport_field_type["name"] = sol::property(&ioport_field::name);
|
||||||
|
ioport_field_type["default_name"] = sol::property(
|
||||||
|
[] (ioport_field &f)
|
||||||
|
{
|
||||||
|
return f.specific_name() ? f.specific_name() : f.manager().type_name(f.type(), f.player());
|
||||||
|
});
|
||||||
|
ioport_field_type["player"] = sol::property(&ioport_field::player, &ioport_field::set_player);
|
||||||
|
ioport_field_type["mask"] = sol::property(&ioport_field::mask);
|
||||||
|
ioport_field_type["defvalue"] = sol::property(&ioport_field::defvalue);
|
||||||
|
ioport_field_type["sensitivity"] = sol::property(&ioport_field::sensitivity);
|
||||||
|
ioport_field_type["way"] = sol::property(&ioport_field::way);
|
||||||
|
ioport_field_type["type_class"] = sol::property(
|
||||||
|
[] (ioport_field &f)
|
||||||
|
{
|
||||||
|
switch (f.type_class())
|
||||||
|
{
|
||||||
|
case INPUT_CLASS_KEYBOARD: return "keyboard";
|
||||||
|
case INPUT_CLASS_CONTROLLER: return "controller";
|
||||||
|
case INPUT_CLASS_CONFIG: return "config";
|
||||||
|
case INPUT_CLASS_DIPSWITCH: return "dipswitch";
|
||||||
|
case INPUT_CLASS_MISC: return "misc";
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
throw false;
|
||||||
|
});
|
||||||
|
ioport_field_type["is_analog"] = sol::property(&ioport_field::is_analog);
|
||||||
|
ioport_field_type["is_digital_joystick"] = sol::property(&ioport_field::is_digital_joystick);
|
||||||
|
ioport_field_type["enabled"] = sol::property(&ioport_field::enabled);
|
||||||
|
ioport_field_type["optional"] = sol::property(&ioport_field::optional);
|
||||||
|
ioport_field_type["cocktail"] = sol::property(&ioport_field::cocktail);
|
||||||
|
ioport_field_type["toggle"] = sol::property(&ioport_field::toggle);
|
||||||
|
ioport_field_type["rotated"] = sol::property(&ioport_field::rotated);
|
||||||
|
ioport_field_type["analog_reverse"] = sol::property(&ioport_field::analog_reverse);
|
||||||
|
ioport_field_type["analog_reset"] = sol::property(&ioport_field::analog_reset);
|
||||||
|
ioport_field_type["analog_wraps"] = sol::property(&ioport_field::analog_wraps);
|
||||||
|
ioport_field_type["analog_invert"] = sol::property(&ioport_field::analog_invert);
|
||||||
|
ioport_field_type["impulse"] = sol::property(&ioport_field::impulse);
|
||||||
|
ioport_field_type["crosshair_scale"] = sol::property(&ioport_field::crosshair_scale, &ioport_field::set_crosshair_scale);
|
||||||
|
ioport_field_type["crosshair_offset"] = sol::property(&ioport_field::crosshair_offset, &ioport_field::set_crosshair_offset);
|
||||||
|
ioport_field_type["user_value"] = sol::property(
|
||||||
|
[] (ioport_field &f)
|
||||||
|
{
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
f.get_user_settings(settings);
|
||||||
|
return settings.value;
|
||||||
|
},
|
||||||
|
[] (ioport_field &f, ioport_value val)
|
||||||
|
{
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
f.get_user_settings(settings);
|
||||||
|
settings.value = val;
|
||||||
|
f.set_user_settings(settings);
|
||||||
|
});
|
||||||
|
ioport_field_type["settings"] = sol::property(
|
||||||
|
[this] (ioport_field &f)
|
||||||
|
{
|
||||||
|
sol::table result = sol().create_table();
|
||||||
|
for (ioport_setting const &setting : f.settings())
|
||||||
|
if (setting.enabled())
|
||||||
|
result[setting.value()] = setting.name();
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
auto ioport_field_live_type = sol().registry().new_usertype<ioport_field_live>("ioport_field_live", sol::no_constructor);
|
||||||
|
ioport_field_live_type["name"] = &ioport_field_live::name;
|
||||||
|
|
||||||
|
|
||||||
|
auto input_type = sol().registry().new_usertype<input_manager>("input", sol::no_constructor);
|
||||||
|
input_type["code_value"] = &input_manager::code_value;
|
||||||
|
input_type["code_pressed"] = &input_manager::code_pressed;
|
||||||
|
input_type["code_pressed_once"] = &input_manager::code_pressed_once;
|
||||||
|
input_type["code_name"] = &input_manager::code_name;
|
||||||
|
input_type["code_to_token"] = &input_manager::code_to_token;
|
||||||
|
input_type["code_from_token"] = &input_manager::code_from_token;
|
||||||
|
input_type["seq_pressed"] = &input_manager::seq_pressed;
|
||||||
|
input_type["seq_clean"] = &input_manager::seq_clean;
|
||||||
|
input_type["seq_name"] = &input_manager::seq_name;
|
||||||
|
input_type["seq_to_tokens"] = &input_manager::seq_to_tokens;
|
||||||
|
input_type["seq_from_tokens"] =
|
||||||
|
[] (input_manager &input, std::string_view tokens)
|
||||||
|
{
|
||||||
|
input_seq seq;
|
||||||
|
input.seq_from_tokens(seq, tokens);
|
||||||
|
return seq;
|
||||||
|
};
|
||||||
|
input_type["axis_code_poller"] = [] (input_manager &input) { return std::unique_ptr<input_code_poller>(new axis_code_poller(input)); };
|
||||||
|
input_type["switch_code_poller"] = [] (input_manager &input) { return std::unique_ptr<input_code_poller>(new switch_code_poller(input)); };
|
||||||
|
input_type["keyboard_code_poller"] = [] (input_manager &input) { return std::unique_ptr<input_code_poller>(new keyboard_code_poller(input)); };
|
||||||
|
input_type["axis_sequence_poller"] = [] (input_manager &input) { return std::unique_ptr<input_sequence_poller>(new axis_sequence_poller(input)); };
|
||||||
|
input_type["switch_sequence_poller"] = [] (input_manager &input) { return std::unique_ptr<input_sequence_poller>(new switch_sequence_poller(input)); };
|
||||||
|
input_type["device_classes"] = sol::property(
|
||||||
|
[this] (input_manager &input)
|
||||||
|
{
|
||||||
|
sol::table result = sol().create_table();
|
||||||
|
for (input_device_class devclass_id = DEVICE_CLASS_FIRST_VALID; devclass_id <= DEVICE_CLASS_LAST_VALID; devclass_id++)
|
||||||
|
{
|
||||||
|
input_class &devclass = input.device_class(devclass_id);
|
||||||
|
result[devclass.name()] = &devclass;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
auto codepoll_type = sol().registry().new_usertype<input_code_poller>("input_code_poller", sol::no_constructor);
|
||||||
|
codepoll_type["reset"] = &input_code_poller::reset;
|
||||||
|
codepoll_type["poll"] = &input_code_poller::poll;
|
||||||
|
|
||||||
|
|
||||||
|
auto seqpoll_type = sol().registry().new_usertype<input_sequence_poller>("input_seq_poller", sol::no_constructor);
|
||||||
|
seqpoll_type["start"] = sol::overload(
|
||||||
|
[] (input_sequence_poller &poller) { return poller.start(); },
|
||||||
|
[] (input_sequence_poller &poller, input_seq const &seq) { return poller.start(seq); });
|
||||||
|
seqpoll_type["poll"] = &input_sequence_poller::poll;
|
||||||
|
seqpoll_type["sequence"] = sol::property(&input_sequence_poller::sequence);
|
||||||
|
seqpoll_type["valid"] = sol::property(&input_sequence_poller::valid);
|
||||||
|
seqpoll_type["modified"] = sol::property(&input_sequence_poller::modified);
|
||||||
|
|
||||||
|
|
||||||
|
auto iptseq_type = emu.new_usertype<input_seq>(
|
||||||
|
"input_seq",
|
||||||
|
sol::call_constructor, sol::constructors<input_seq(), input_seq(input_seq const &)>());
|
||||||
|
iptseq_type["reset"] = &input_seq::reset;
|
||||||
|
iptseq_type["set_default"] = &input_seq::set_default;
|
||||||
|
iptseq_type["empty"] = sol::property(&input_seq::empty);
|
||||||
|
iptseq_type["length"] = sol::property(&input_seq::length);
|
||||||
|
iptseq_type["is_valid"] = sol::property(&input_seq::is_valid);
|
||||||
|
iptseq_type["is_default"] = sol::property(&input_seq::is_default);
|
||||||
|
|
||||||
|
|
||||||
|
auto input_class_type = sol().registry().new_usertype<input_class>("input_class", sol::no_constructor);
|
||||||
|
input_class_type["name"] = sol::property(&input_class::name);
|
||||||
|
input_class_type["enabled"] = sol::property(&input_class::enabled);
|
||||||
|
input_class_type["multi"] = sol::property(&input_class::multi);
|
||||||
|
input_class_type["devices"] = sol::property(
|
||||||
|
[this] (input_class &devclass)
|
||||||
|
{
|
||||||
|
sol::table result = sol().create_table();
|
||||||
|
int index = 1;
|
||||||
|
for (int devindex = 0; devindex <= devclass.maxindex(); devindex++)
|
||||||
|
{
|
||||||
|
input_device *const dev = devclass.device(devindex);
|
||||||
|
if (dev)
|
||||||
|
result[index++] = dev;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
auto input_device_type = sol().registry().new_usertype<input_device>("input_device", sol::no_constructor);
|
||||||
|
input_device_type["name"] = sol::property(&input_device::name);
|
||||||
|
input_device_type["id"] = sol::property(&input_device::id);
|
||||||
|
input_device_type["devindex"] = sol::property(&input_device::devindex);
|
||||||
|
input_device_type["items"] = sol::property(
|
||||||
|
[this] (input_device &dev)
|
||||||
|
{
|
||||||
|
sol::table result = sol().create_table();
|
||||||
|
for (input_item_id id = ITEM_ID_FIRST_VALID; id < dev.maxitem(); id++)
|
||||||
|
{
|
||||||
|
input_device_item *item = dev.item(id);
|
||||||
|
if (item)
|
||||||
|
result[id] = dev.item(id);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
auto input_device_item_type = sol().registry().new_usertype<input_device_item>("input_device_item", sol::no_constructor);
|
||||||
|
input_device_item_type["name"] = sol::property(&input_device_item::name);
|
||||||
|
input_device_item_type["code"] = sol::property(&input_device_item::code);
|
||||||
|
input_device_item_type["token"] = sol::property(&input_device_item::token);
|
||||||
|
input_device_item_type["current"] = sol::property(&input_device_item::current);
|
||||||
|
|
||||||
|
|
||||||
|
auto uiinput_type = sol().registry().new_usertype<ui_input_manager>("uiinput", sol::no_constructor);
|
||||||
|
uiinput_type["find_mouse"] =
|
||||||
|
[] (ui_input_manager &ui)
|
||||||
|
{
|
||||||
|
int32_t x, y;
|
||||||
|
bool button;
|
||||||
|
render_target *rt = ui.find_mouse(&x, &y, &button);
|
||||||
|
return std::make_tuple(x, y, button, rt);
|
||||||
|
};
|
||||||
|
uiinput_type["pressed"] = &ui_input_manager::pressed;
|
||||||
|
uiinput_type["pressed_repeat"] = &ui_input_manager::pressed_repeat;
|
||||||
|
uiinput_type["presses_enabled"] = sol::property(&ui_input_manager::presses_enabled, &ui_input_manager::set_presses_enabled);
|
||||||
|
|
||||||
|
}
|
608
src/icludes/frontend/mame/luaengine_mem.cpp
Normal file
608
src/icludes/frontend/mame/luaengine_mem.cpp
Normal file
@ -0,0 +1,608 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic,Luca Bruno
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
luaengine_input.cpp
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "luaengine.ipp"
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// region_read - templated region readers for <sign>,<size>
|
||||||
|
// -> manager:machine():memory().regions[":maincpu"]:read_i8(0xC000)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T region_read(memory_region ®ion, offs_t address)
|
||||||
|
{
|
||||||
|
T mem_content = 0;
|
||||||
|
const offs_t lowmask = region.bytewidth() - 1;
|
||||||
|
for (int i = 0; i < sizeof(T); i++)
|
||||||
|
{
|
||||||
|
int addr = region.endianness() == ENDIANNESS_LITTLE ? address + sizeof(T) - 1 - i : address + i;
|
||||||
|
if (addr < region.bytes())
|
||||||
|
{
|
||||||
|
if constexpr (sizeof(T) > 1)
|
||||||
|
mem_content <<= 8;
|
||||||
|
if (region.endianness() == ENDIANNESS_BIG)
|
||||||
|
mem_content |= region.as_u8((BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask));
|
||||||
|
else
|
||||||
|
mem_content |= region.as_u8((BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mem_content;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// region_write - templated region writer for <sign>,<size>
|
||||||
|
// -> manager:machine():memory().regions[":maincpu"]:write_u16(0xC000, 0xF00D)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void region_write(memory_region ®ion, offs_t address, T val)
|
||||||
|
{
|
||||||
|
const offs_t lowmask = region.bytewidth() - 1;
|
||||||
|
for (int i = 0; i < sizeof(T); i++)
|
||||||
|
{
|
||||||
|
int addr = region.endianness() == ENDIANNESS_BIG ? address + sizeof(T) - 1 - i : address + i;
|
||||||
|
if (addr < region.bytes())
|
||||||
|
{
|
||||||
|
if (region.endianness() == ENDIANNESS_BIG)
|
||||||
|
region.base()[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
|
||||||
|
else
|
||||||
|
region.base()[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
|
||||||
|
if constexpr (sizeof(T) > 1)
|
||||||
|
val >>= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// share_read - templated share readers for <sign>,<size>
|
||||||
|
// -> manager:machine():memory().shares[":maincpu"]:read_i8(0xC000)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T share_read(memory_share &share, offs_t address)
|
||||||
|
{
|
||||||
|
T mem_content = 0;
|
||||||
|
const offs_t lowmask = share.bytewidth() - 1;
|
||||||
|
u8 *ptr = (u8 *)share.ptr();
|
||||||
|
for (int i = 0; i < sizeof(T); i++)
|
||||||
|
{
|
||||||
|
int addr = share.endianness() == ENDIANNESS_LITTLE ? address + sizeof(T) - 1 - i : address + i;
|
||||||
|
if (addr < share.bytes())
|
||||||
|
{
|
||||||
|
if constexpr (sizeof(T) > 1)
|
||||||
|
mem_content <<= 8;
|
||||||
|
if (share.endianness() == ENDIANNESS_BIG)
|
||||||
|
mem_content |= ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)];
|
||||||
|
else
|
||||||
|
mem_content |= ptr[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mem_content;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// share_write - templated share writer for <sign>,<size>
|
||||||
|
// -> manager:machine():memory().shares[":maincpu"]:write_u16(0xC000, 0xF00D)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void share_write(memory_share &share, offs_t address, T val)
|
||||||
|
{
|
||||||
|
const offs_t lowmask = share.bytewidth() - 1;
|
||||||
|
u8 *ptr = (u8 *)share.ptr();
|
||||||
|
for (int i = 0; i < sizeof(T); i++)
|
||||||
|
{
|
||||||
|
int addr = share.endianness() == ENDIANNESS_BIG ? address + sizeof(T) - 1 - i : address + i;
|
||||||
|
if (addr < share.bytes())
|
||||||
|
{
|
||||||
|
if (share.endianness() == ENDIANNESS_BIG)
|
||||||
|
ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
|
||||||
|
else
|
||||||
|
ptr[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
|
||||||
|
if constexpr (sizeof(T) > 1)
|
||||||
|
val >>= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// sol_lua_push - automatically convert
|
||||||
|
// map_handler_type to a string
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
int sol_lua_push(sol::types<map_handler_type>, lua_State *L, map_handler_type &&value)
|
||||||
|
{
|
||||||
|
const char *typestr;
|
||||||
|
switch(value)
|
||||||
|
{
|
||||||
|
case AMH_NONE:
|
||||||
|
typestr = "none";
|
||||||
|
break;
|
||||||
|
case AMH_RAM:
|
||||||
|
typestr = "ram";
|
||||||
|
break;
|
||||||
|
case AMH_ROM:
|
||||||
|
typestr = "rom";
|
||||||
|
break;
|
||||||
|
case AMH_NOP:
|
||||||
|
typestr = "nop";
|
||||||
|
break;
|
||||||
|
case AMH_UNMAP:
|
||||||
|
typestr = "unmap";
|
||||||
|
break;
|
||||||
|
case AMH_DEVICE_DELEGATE:
|
||||||
|
case AMH_DEVICE_DELEGATE_M:
|
||||||
|
case AMH_DEVICE_DELEGATE_S:
|
||||||
|
case AMH_DEVICE_DELEGATE_SM:
|
||||||
|
case AMH_DEVICE_DELEGATE_MO:
|
||||||
|
case AMH_DEVICE_DELEGATE_SMO:
|
||||||
|
typestr = "delegate";
|
||||||
|
break;
|
||||||
|
case AMH_PORT:
|
||||||
|
typestr = "port";
|
||||||
|
break;
|
||||||
|
case AMH_BANK:
|
||||||
|
typestr = "bank";
|
||||||
|
break;
|
||||||
|
case AMH_DEVICE_SUBMAP:
|
||||||
|
typestr = "submap";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
typestr = "unknown";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return sol::stack::push(L, typestr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// sol_lua_push - automatically convert
|
||||||
|
// endianness_t to a string
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
int sol_lua_push(sol::types<endianness_t>, lua_State *L, endianness_t &&value)
|
||||||
|
{
|
||||||
|
return sol::stack::push(L, util::endian_to_string_view(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mem_read - templated memory readers for <sign>,<size>
|
||||||
|
// -> manager:machine().devices[":maincpu"].spaces["program"]:read_i8(0xC000)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T lua_engine::addr_space::mem_read(offs_t address)
|
||||||
|
{
|
||||||
|
T mem_content = 0;
|
||||||
|
switch (sizeof(mem_content) * 8)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
mem_content = space.read_byte(address);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
if (WORD_ALIGNED(address))
|
||||||
|
mem_content = space.read_word(address);
|
||||||
|
else
|
||||||
|
mem_content = space.read_word_unaligned(address);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
if (DWORD_ALIGNED(address))
|
||||||
|
mem_content = space.read_dword(address);
|
||||||
|
else
|
||||||
|
mem_content = space.read_dword_unaligned(address);
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
if (QWORD_ALIGNED(address))
|
||||||
|
mem_content = space.read_qword(address);
|
||||||
|
else
|
||||||
|
mem_content = space.read_qword_unaligned(address);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mem_content;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mem_write - templated memory writer for <sign>,<size>
|
||||||
|
// -> manager:machine().devices[":maincpu"].spaces["program"]:write_u16(0xC000, 0xF00D)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void lua_engine::addr_space::mem_write(offs_t address, T val)
|
||||||
|
{
|
||||||
|
switch (sizeof(val) * 8)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
space.write_byte(address, val);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
if (WORD_ALIGNED(address))
|
||||||
|
space.write_word(address, val);
|
||||||
|
else
|
||||||
|
space.write_word_unaligned(address, val);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
if (DWORD_ALIGNED(address))
|
||||||
|
space.write_dword(address, val);
|
||||||
|
else
|
||||||
|
space.write_dword_unaligned(address, val);
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
if (QWORD_ALIGNED(address))
|
||||||
|
space.write_qword(address, val);
|
||||||
|
else
|
||||||
|
space.write_qword_unaligned(address, val);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// log_mem_read - templated logical memory readers for <sign>,<size>
|
||||||
|
// -> manager:machine().devices[":maincpu"].spaces["program"]:read_log_i8(0xC000)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T lua_engine::addr_space::log_mem_read(offs_t address)
|
||||||
|
{
|
||||||
|
if (!dev.translate(space.spacenum(), TRANSLATE_READ_DEBUG, address))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
T mem_content = 0;
|
||||||
|
switch (sizeof(mem_content) * 8)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
mem_content = space.read_byte(address);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
if (WORD_ALIGNED(address))
|
||||||
|
mem_content = space.read_word(address);
|
||||||
|
else
|
||||||
|
mem_content = space.read_word_unaligned(address);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
if (DWORD_ALIGNED(address))
|
||||||
|
mem_content = space.read_dword(address);
|
||||||
|
else
|
||||||
|
mem_content = space.read_dword_unaligned(address);
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
if (QWORD_ALIGNED(address))
|
||||||
|
mem_content = space.read_qword(address);
|
||||||
|
else
|
||||||
|
mem_content = space.read_qword_unaligned(address);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mem_content;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// log_mem_write - templated logical memory writer for <sign>,<size>
|
||||||
|
// -> manager:machine().devices[":maincpu"].spaces["program"]:write_log_u16(0xC000, 0xF00D)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void lua_engine::addr_space::log_mem_write(offs_t address, T val)
|
||||||
|
{
|
||||||
|
if (!dev.translate(space.spacenum(), TRANSLATE_WRITE_DEBUG, address))
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (sizeof(val) * 8)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
space.write_byte(address, val);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
if (WORD_ALIGNED(address))
|
||||||
|
space.write_word(address, val);
|
||||||
|
else
|
||||||
|
space.write_word_unaligned(address, val);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
if (DWORD_ALIGNED(address))
|
||||||
|
space.write_dword(address, val);
|
||||||
|
else
|
||||||
|
space.write_dword_unaligned(address, val);
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
if (QWORD_ALIGNED(address))
|
||||||
|
space.write_qword(address, val);
|
||||||
|
else
|
||||||
|
space.write_qword_unaligned(address, val);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mem_direct_read - templated direct memory readers for <sign>,<size>
|
||||||
|
// -> manager:machine().devices[":maincpu"].spaces["program"]:read_direct_i8(0xC000)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T lua_engine::addr_space::direct_mem_read(offs_t address)
|
||||||
|
{
|
||||||
|
T mem_content = 0;
|
||||||
|
const offs_t lowmask = space.data_width() / 8 - 1;
|
||||||
|
for (int i = 0; i < sizeof(T); i++)
|
||||||
|
{
|
||||||
|
int addr = space.endianness() == ENDIANNESS_LITTLE ? address + sizeof(T) - 1 - i : address + i;
|
||||||
|
u8 *base = (u8 *)space.get_read_ptr(addr & ~lowmask);
|
||||||
|
if (base)
|
||||||
|
{
|
||||||
|
if constexpr (sizeof(T) > 1)
|
||||||
|
mem_content <<= 8;
|
||||||
|
if (space.endianness() == ENDIANNESS_BIG)
|
||||||
|
mem_content |= base[BYTE8_XOR_BE(addr) & lowmask];
|
||||||
|
else
|
||||||
|
mem_content |= base[BYTE8_XOR_LE(addr) & lowmask];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mem_content;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mem_direct_write - templated memory writer for <sign>,<size>
|
||||||
|
// -> manager:machine().devices[":maincpu"].spaces["program"]:write_direct_u16(0xC000, 0xF00D)
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void lua_engine::addr_space::direct_mem_write(offs_t address, T val)
|
||||||
|
{
|
||||||
|
const offs_t lowmask = space.data_width() / 8 - 1;
|
||||||
|
for (int i = 0; i < sizeof(T); i++)
|
||||||
|
{
|
||||||
|
int addr = space.endianness() == ENDIANNESS_BIG ? address + sizeof(T) - 1 - i : address + i;
|
||||||
|
u8 *base = (u8 *)space.get_read_ptr(addr & ~lowmask);
|
||||||
|
if (base)
|
||||||
|
{
|
||||||
|
if (space.endianness() == ENDIANNESS_BIG)
|
||||||
|
base[BYTE8_XOR_BE(addr) & lowmask] = val & 0xff;
|
||||||
|
else
|
||||||
|
base[BYTE8_XOR_LE(addr) & lowmask] = val & 0xff;
|
||||||
|
if constexpr (sizeof(T) > 1)
|
||||||
|
val >>= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// initialize_memory - register memory user types
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void lua_engine::initialize_memory(sol::table &emu)
|
||||||
|
{
|
||||||
|
|
||||||
|
auto addr_space_type = sol().registry().new_usertype<addr_space>("addr_space", sol::no_constructor);
|
||||||
|
addr_space_type["read_i8"] = &addr_space::mem_read<s8>;
|
||||||
|
addr_space_type["read_u8"] = &addr_space::mem_read<u8>;
|
||||||
|
addr_space_type["read_i16"] = &addr_space::mem_read<s16>;
|
||||||
|
addr_space_type["read_u16"] = &addr_space::mem_read<u16>;
|
||||||
|
addr_space_type["read_i32"] = &addr_space::mem_read<s32>;
|
||||||
|
addr_space_type["read_u32"] = &addr_space::mem_read<u32>;
|
||||||
|
addr_space_type["read_i64"] = &addr_space::mem_read<s64>;
|
||||||
|
addr_space_type["read_u64"] = &addr_space::mem_read<u64>;
|
||||||
|
addr_space_type["write_i8"] = &addr_space::mem_write<s8>;
|
||||||
|
addr_space_type["write_u8"] = &addr_space::mem_write<u8>;
|
||||||
|
addr_space_type["write_i16"] = &addr_space::mem_write<s16>;
|
||||||
|
addr_space_type["write_u16"] = &addr_space::mem_write<u16>;
|
||||||
|
addr_space_type["write_i32"] = &addr_space::mem_write<s32>;
|
||||||
|
addr_space_type["write_u32"] = &addr_space::mem_write<u32>;
|
||||||
|
addr_space_type["write_i64"] = &addr_space::mem_write<s64>;
|
||||||
|
addr_space_type["write_u64"] = &addr_space::mem_write<u64>;
|
||||||
|
addr_space_type["readv_i8"] = &addr_space::log_mem_read<s8>;
|
||||||
|
addr_space_type["readv_u8"] = &addr_space::log_mem_read<u8>;
|
||||||
|
addr_space_type["readv_i16"] = &addr_space::log_mem_read<s16>;
|
||||||
|
addr_space_type["readv_u16"] = &addr_space::log_mem_read<u16>;
|
||||||
|
addr_space_type["readv_i32"] = &addr_space::log_mem_read<s32>;
|
||||||
|
addr_space_type["readv_u32"] = &addr_space::log_mem_read<u32>;
|
||||||
|
addr_space_type["readv_i64"] = &addr_space::log_mem_read<s64>;
|
||||||
|
addr_space_type["readv_u64"] = &addr_space::log_mem_read<u64>;
|
||||||
|
addr_space_type["writev_i8"] = &addr_space::log_mem_write<s8>;
|
||||||
|
addr_space_type["writev_u8"] = &addr_space::log_mem_write<u8>;
|
||||||
|
addr_space_type["writev_i16"] = &addr_space::log_mem_write<s16>;
|
||||||
|
addr_space_type["writev_u16"] = &addr_space::log_mem_write<u16>;
|
||||||
|
addr_space_type["writev_i32"] = &addr_space::log_mem_write<s32>;
|
||||||
|
addr_space_type["writev_u32"] = &addr_space::log_mem_write<u32>;
|
||||||
|
addr_space_type["writev_i64"] = &addr_space::log_mem_write<s64>;
|
||||||
|
addr_space_type["writev_u64"] = &addr_space::log_mem_write<u64>;
|
||||||
|
addr_space_type["read_direct_i8"] = &addr_space::direct_mem_read<s8>;
|
||||||
|
addr_space_type["read_direct_u8"] = &addr_space::direct_mem_read<u8>;
|
||||||
|
addr_space_type["read_direct_i16"] = &addr_space::direct_mem_read<s16>;
|
||||||
|
addr_space_type["read_direct_u16"] = &addr_space::direct_mem_read<u16>;
|
||||||
|
addr_space_type["read_direct_i32"] = &addr_space::direct_mem_read<s32>;
|
||||||
|
addr_space_type["read_direct_u32"] = &addr_space::direct_mem_read<u32>;
|
||||||
|
addr_space_type["read_direct_i64"] = &addr_space::direct_mem_read<s64>;
|
||||||
|
addr_space_type["read_direct_u64"] = &addr_space::direct_mem_read<u64>;
|
||||||
|
addr_space_type["write_direct_i8"] = &addr_space::direct_mem_write<s8>;
|
||||||
|
addr_space_type["write_direct_u8"] = &addr_space::direct_mem_write<u8>;
|
||||||
|
addr_space_type["write_direct_i16"] = &addr_space::direct_mem_write<s16>;
|
||||||
|
addr_space_type["write_direct_u16"] = &addr_space::direct_mem_write<u16>;
|
||||||
|
addr_space_type["write_direct_i32"] = &addr_space::direct_mem_write<s32>;
|
||||||
|
addr_space_type["write_direct_u32"] = &addr_space::direct_mem_write<u32>;
|
||||||
|
addr_space_type["write_direct_i64"] = &addr_space::direct_mem_write<s64>;
|
||||||
|
addr_space_type["write_direct_u64"] = &addr_space::direct_mem_write<u64>;
|
||||||
|
addr_space_type["read_range"] =
|
||||||
|
[] (addr_space &sp, sol::this_state s, u64 first, u64 last, int width, sol::object opt_step) -> sol::object
|
||||||
|
{
|
||||||
|
lua_State *L = s;
|
||||||
|
luaL_Buffer buff;
|
||||||
|
offs_t space_size = sp.space.addrmask();
|
||||||
|
u64 step = 1;
|
||||||
|
if (opt_step.is<u64>())
|
||||||
|
{
|
||||||
|
step = opt_step.as<u64>();
|
||||||
|
if (step < 1 || step > last - first)
|
||||||
|
{
|
||||||
|
luaL_error(L, "Invalid step");
|
||||||
|
return sol::lua_nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (first > space_size || last > space_size || last < first)
|
||||||
|
{
|
||||||
|
luaL_error(L, "Invalid offset");
|
||||||
|
return sol::lua_nil;
|
||||||
|
}
|
||||||
|
int byte_count = width / 8 * (last - first + 1) / step;
|
||||||
|
switch (width)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
{
|
||||||
|
u8 *dest = (u8 *)luaL_buffinitsize(L, &buff, byte_count);
|
||||||
|
for ( ; first <= last; first += step)
|
||||||
|
*dest++ = sp.mem_read<u8>(first);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 16:
|
||||||
|
{
|
||||||
|
u16 *dest = (u16 *)luaL_buffinitsize(L, &buff, byte_count);
|
||||||
|
for ( ; first <= last; first += step)
|
||||||
|
*dest++ = sp.mem_read<u16>(first);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 32:
|
||||||
|
{
|
||||||
|
u32 *dest = (u32 *)luaL_buffinitsize(L, &buff, byte_count);
|
||||||
|
for(; first <= last; first += step)
|
||||||
|
*dest++ = sp.mem_read<u32>(first);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 64:
|
||||||
|
{
|
||||||
|
u64 *dest = (u64 *)luaL_buffinitsize(L, &buff, byte_count);
|
||||||
|
for(; first <= last; first += step)
|
||||||
|
*dest++ = sp.mem_read<u64>(first);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
luaL_error(L, "Invalid width. Must be 8/16/32/64");
|
||||||
|
return sol::lua_nil;
|
||||||
|
}
|
||||||
|
luaL_pushresultsize(&buff, byte_count);
|
||||||
|
return sol::make_reference(L, sol::stack_reference(L, -1));
|
||||||
|
};
|
||||||
|
addr_space_type["name"] = sol::property([] (addr_space &sp) { return sp.space.name(); });
|
||||||
|
addr_space_type["shift"] = sol::property([] (addr_space &sp) { return sp.space.addr_shift(); });
|
||||||
|
addr_space_type["index"] = sol::property([] (addr_space &sp) { return sp.space.spacenum(); });
|
||||||
|
addr_space_type["address_mask"] = sol::property([] (addr_space &sp) { return sp.space.addrmask(); });
|
||||||
|
addr_space_type["data_width"] = sol::property([] (addr_space &sp) { return sp.space.data_width(); });
|
||||||
|
addr_space_type["endianness"] = sol::property([] (addr_space &sp) { return sp.space.endianness(); });
|
||||||
|
addr_space_type["map"] = sol::property([] (addr_space &sp) { return sp.space.map(); });
|
||||||
|
|
||||||
|
|
||||||
|
auto addrmap_type = sol().registry().new_usertype<address_map>("addrmap", sol::no_constructor);
|
||||||
|
addrmap_type["spacenum"] = sol::readonly(&address_map::m_spacenum);
|
||||||
|
addrmap_type["device"] = sol::readonly(&address_map::m_device);
|
||||||
|
addrmap_type["unmap_value"] = sol::readonly(&address_map::m_unmapval);
|
||||||
|
addrmap_type["global_mask"] = sol::readonly(&address_map::m_globalmask);
|
||||||
|
addrmap_type["entries"] = sol::property([] (address_map &m) { return simple_list_wrapper<address_map_entry>(m.m_entrylist); });
|
||||||
|
|
||||||
|
|
||||||
|
auto mapentry_type = sol().registry().new_usertype<address_map_entry>("mapentry", sol::no_constructor);
|
||||||
|
mapentry_type["address_start"] = sol::readonly(&address_map_entry::m_addrstart);
|
||||||
|
mapentry_type["address_end"] = sol::readonly(&address_map_entry::m_addrend);
|
||||||
|
mapentry_type["address_mirror"] = sol::readonly(&address_map_entry::m_addrmirror);
|
||||||
|
mapentry_type["address_mask"] = sol::readonly(&address_map_entry::m_addrmask);
|
||||||
|
mapentry_type["mask"] = sol::readonly(&address_map_entry::m_mask);
|
||||||
|
mapentry_type["cswidth"] = sol::readonly(&address_map_entry::m_cswidth);
|
||||||
|
mapentry_type["read"] = sol::readonly(&address_map_entry::m_read);
|
||||||
|
mapentry_type["write"] = sol::readonly(&address_map_entry::m_write);
|
||||||
|
mapentry_type["share"] = sol::readonly(&address_map_entry::m_share);
|
||||||
|
mapentry_type["region"] = sol::readonly(&address_map_entry::m_region);
|
||||||
|
mapentry_type["region_offset"] = sol::readonly(&address_map_entry::m_rgnoffs);
|
||||||
|
|
||||||
|
|
||||||
|
auto handler_data_type = sol().registry().new_usertype<map_handler_data>("handlerdata", sol::no_constructor);
|
||||||
|
handler_data_type["handlertype"] = sol::property([] (map_handler_data const &hd) { return hd.m_type; }); // can't use member pointer or won't be converted to string
|
||||||
|
handler_data_type["bits"] = sol::readonly(&map_handler_data::m_bits);
|
||||||
|
handler_data_type["name"] = sol::readonly(&map_handler_data::m_name);
|
||||||
|
handler_data_type["tag"] = sol::readonly(&map_handler_data::m_tag);
|
||||||
|
|
||||||
|
|
||||||
|
auto memory_type = sol().registry().new_usertype<memory_manager>("memory", sol::no_constructor);
|
||||||
|
memory_type["banks"] = sol::property([] (memory_manager &mm) { return standard_tag_object_ptr_map<memory_bank>(mm.banks()); });
|
||||||
|
memory_type["regions"] = sol::property([] (memory_manager &mm) { return standard_tag_object_ptr_map<memory_region>(mm.regions()); });
|
||||||
|
memory_type["shares"] = sol::property([] (memory_manager &mm) { return standard_tag_object_ptr_map<memory_share>(mm.shares()); });
|
||||||
|
|
||||||
|
|
||||||
|
auto bank_type = sol().registry().new_usertype<memory_bank>("membank", sol::no_constructor);
|
||||||
|
bank_type["tag"] = sol::property(&memory_bank::tag);
|
||||||
|
bank_type["entry"] = sol::property(&memory_bank::entry, &memory_bank::set_entry);
|
||||||
|
|
||||||
|
|
||||||
|
auto region_type = sol().registry().new_usertype<memory_region>("region", sol::no_constructor);
|
||||||
|
region_type["read_i8"] = ®ion_read<s8>;
|
||||||
|
region_type["read_u8"] = ®ion_read<u8>;
|
||||||
|
region_type["read_i16"] = ®ion_read<s16>;
|
||||||
|
region_type["read_u16"] = ®ion_read<u16>;
|
||||||
|
region_type["read_i32"] = ®ion_read<s32>;
|
||||||
|
region_type["read_u32"] = ®ion_read<u32>;
|
||||||
|
region_type["read_i64"] = ®ion_read<s64>;
|
||||||
|
region_type["read_u64"] = ®ion_read<u64>;
|
||||||
|
region_type["write_i8"] = ®ion_write<s8>;
|
||||||
|
region_type["write_u8"] = ®ion_write<u8>;
|
||||||
|
region_type["write_i16"] = ®ion_write<s16>;
|
||||||
|
region_type["write_u16"] = ®ion_write<u16>;
|
||||||
|
region_type["write_i32"] = ®ion_write<s32>;
|
||||||
|
region_type["write_u32"] = ®ion_write<u32>;
|
||||||
|
region_type["write_i64"] = ®ion_write<s64>;
|
||||||
|
region_type["write_u64"] = ®ion_write<u64>;
|
||||||
|
region_type["tag"] = sol::property(&memory_region::name);
|
||||||
|
region_type["size"] = sol::property(&memory_region::bytes);
|
||||||
|
region_type["length"] = sol::property([] (memory_region &r) { return r.bytes() / r.bytewidth(); });
|
||||||
|
region_type["endianness"] = sol::property(&memory_region::endianness);
|
||||||
|
region_type["bitwidth"] = sol::property(&memory_region::bitwidth);
|
||||||
|
region_type["bytewidth"] = sol::property(&memory_region::bytewidth);
|
||||||
|
|
||||||
|
|
||||||
|
auto share_type = sol().registry().new_usertype<memory_share>("share", sol::no_constructor);
|
||||||
|
share_type["read_i8"] = &share_read<s8>;
|
||||||
|
share_type["read_u8"] = &share_read<u8>;
|
||||||
|
share_type["read_i16"] = &share_read<s16>;
|
||||||
|
share_type["read_u16"] = &share_read<u16>;
|
||||||
|
share_type["read_i32"] = &share_read<s32>;
|
||||||
|
share_type["read_u32"] = &share_read<u32>;
|
||||||
|
share_type["read_i64"] = &share_read<s64>;
|
||||||
|
share_type["read_u64"] = &share_read<u64>;
|
||||||
|
share_type["write_i8"] = &share_write<s8>;
|
||||||
|
share_type["write_u8"] = &share_write<u8>;
|
||||||
|
share_type["write_i16"] = &share_write<s16>;
|
||||||
|
share_type["write_u16"] = &share_write<u16>;
|
||||||
|
share_type["write_i32"] = &share_write<s32>;
|
||||||
|
share_type["write_u32"] = &share_write<u32>;
|
||||||
|
share_type["write_i64"] = &share_write<s64>;
|
||||||
|
share_type["write_u64"] = &share_write<u64>;
|
||||||
|
share_type["tag"] = sol::property(&memory_share::name);
|
||||||
|
share_type["size"] = sol::property(&memory_share::bytes);
|
||||||
|
share_type["length"] = sol::property([] (memory_share &s) { return s.bytes() / s.bytewidth(); });
|
||||||
|
share_type["endianness"] = sol::property(&memory_share::endianness);
|
||||||
|
share_type["bitwidth"] = sol::property(&memory_share::bitwidth);
|
||||||
|
share_type["bytewidth"] = sol::property(&memory_share::bytewidth);
|
||||||
|
|
||||||
|
}
|
518
src/icludes/frontend/mame/luaengine_render.cpp
Normal file
518
src/icludes/frontend/mame/luaengine_render.cpp
Normal file
@ -0,0 +1,518 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
luaengine_render.cpp
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "luaengine.ipp"
|
||||||
|
|
||||||
|
#include "mame.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "render.h"
|
||||||
|
#include "rendlay.h"
|
||||||
|
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
struct layout_file_views
|
||||||
|
{
|
||||||
|
layout_file_views(layout_file &f) : file(f) { }
|
||||||
|
layout_file::view_list &items() { return file.views(); }
|
||||||
|
|
||||||
|
static layout_view &unwrap(layout_file::view_list::iterator const &it) { return *it; }
|
||||||
|
static int push_key(lua_State *L, layout_file::view_list::iterator const &it, std::size_t ix) { return sol::stack::push_reference(L, it->unqualified_name()); }
|
||||||
|
|
||||||
|
layout_file &file;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct layout_view_items
|
||||||
|
{
|
||||||
|
layout_view_items(layout_view &v) : view(v) { }
|
||||||
|
layout_view::item_list &items() { return view.items(); }
|
||||||
|
|
||||||
|
static layout_view_item &unwrap(layout_view::item_list::iterator const &it) { return *it; }
|
||||||
|
static int push_key(lua_State *L, layout_view::item_list::iterator const &it, std::size_t ix) { return sol::stack::push(L, ix + 1); }
|
||||||
|
|
||||||
|
layout_view &view;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct render_target_view_names
|
||||||
|
{
|
||||||
|
render_target_view_names(render_target &t) : target(t), count(-1) { }
|
||||||
|
|
||||||
|
render_target ⌖
|
||||||
|
int count;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
namespace sol {
|
||||||
|
|
||||||
|
template <> struct is_container<layout_file_views> : std::true_type { };
|
||||||
|
template <> struct is_container<layout_view_items> : std::true_type { };
|
||||||
|
template <> struct is_container<render_target_view_names> : std::true_type { };
|
||||||
|
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct usertype_container<layout_file_views> : lua_engine::immutable_sequence_helper<layout_file_views, layout_file::view_list>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static int get(lua_State *L)
|
||||||
|
{
|
||||||
|
layout_file_views &self(get_self(L));
|
||||||
|
char const *const name(stack::unqualified_get<char const *>(L));
|
||||||
|
auto const found(std::find_if(
|
||||||
|
self.file.views().begin(),
|
||||||
|
self.file.views().end(),
|
||||||
|
[&name] (layout_view &v) { return v.unqualified_name() == name; }));
|
||||||
|
if (self.file.views().end() != found)
|
||||||
|
return stack::push_reference(L, *found);
|
||||||
|
else
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_get(lua_State *L)
|
||||||
|
{
|
||||||
|
return get(L);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct usertype_container<layout_view_items> : lua_engine::immutable_sequence_helper<layout_view_items, layout_view::item_list>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static int get(lua_State *L)
|
||||||
|
{
|
||||||
|
layout_view_items &self(get_self(L));
|
||||||
|
char const *const id(stack::unqualified_get<char const *>(L));
|
||||||
|
layout_view_item *const item(self.view.get_item(id));
|
||||||
|
if (item)
|
||||||
|
return stack::push_reference(L, *item);
|
||||||
|
else
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_get(lua_State *L)
|
||||||
|
{
|
||||||
|
return get(L);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
return luaL_error(L, "sol: cannot call 'pairs' on type '%s': not iterable by ID", sol::detail::demangle<layout_view_items>().c_str());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct usertype_container<render_target_view_names> : lua_engine::immutable_container_helper<render_target_view_names>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
struct iterator
|
||||||
|
{
|
||||||
|
iterator(render_target &t, unsigned i) : target(t), index(i) { }
|
||||||
|
|
||||||
|
render_target ⌖
|
||||||
|
unsigned index;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int next_pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
iterator &i(stack::unqualified_get<user<iterator> >(L, 1));
|
||||||
|
char const *name(i.target.view_name(i.index));
|
||||||
|
if (!name)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
int result = stack::push(L, i.index + 1);
|
||||||
|
result += stack::push(L, name);
|
||||||
|
++i.index;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int at(lua_State *L)
|
||||||
|
{
|
||||||
|
render_target_view_names &self(get_self(L));
|
||||||
|
unsigned const index(stack::unqualified_get<unsigned>(L, 2));
|
||||||
|
return stack::push(L, self.target.view_name(index - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get(lua_State *L)
|
||||||
|
{
|
||||||
|
return at(L);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_get(lua_State *L)
|
||||||
|
{
|
||||||
|
return at(L);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int find(lua_State *L)
|
||||||
|
{
|
||||||
|
render_target_view_names &self(get_self(L));
|
||||||
|
char const *const key(stack::unqualified_get<char const *>(L, 2));
|
||||||
|
for (unsigned i = 0; ; ++i)
|
||||||
|
{
|
||||||
|
char const *const name(self.target.view_name(i));
|
||||||
|
if (!name)
|
||||||
|
return stack::push(L, lua_nil);
|
||||||
|
else if (!std::strcmp(key, name))
|
||||||
|
return stack::push(L, i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int index_of(lua_State *L)
|
||||||
|
{
|
||||||
|
return find(L);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int size(lua_State *L)
|
||||||
|
{
|
||||||
|
render_target_view_names &self(get_self(L));
|
||||||
|
if (0 > self.count)
|
||||||
|
for (self.count = 0; self.target.view_name(self.count); ++self.count) { }
|
||||||
|
return stack::push(L, self.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int empty(lua_State *L)
|
||||||
|
{
|
||||||
|
render_target_view_names &self(get_self(L));
|
||||||
|
return stack::push(L, !self.target.view_name(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int next(lua_State *L)
|
||||||
|
{
|
||||||
|
return stack::push(L, next_pairs);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pairs(lua_State *L)
|
||||||
|
{
|
||||||
|
render_target_view_names &self(get_self(L));
|
||||||
|
stack::push(L, next_pairs);
|
||||||
|
stack::push<user<iterator> >(L, self.target, 0);
|
||||||
|
stack::push(L, lua_nil);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ipairs(lua_State *L)
|
||||||
|
{
|
||||||
|
return pairs(L);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sol
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// initialize_render - register render user types
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void lua_engine::initialize_render(sol::table &emu)
|
||||||
|
{
|
||||||
|
|
||||||
|
auto bounds_type = emu.new_usertype<render_bounds>(
|
||||||
|
"render_bounds",
|
||||||
|
sol::call_constructor, sol::initializers(
|
||||||
|
[] (render_bounds &b) { new (&b) render_bounds{ 0.0F, 0.0F, 1.0F, 1.0F }; },
|
||||||
|
[] (render_bounds &b, float x0, float y0, float x1, float y1) { new (&b) render_bounds{ x0, y0, x1, y1 }; }));
|
||||||
|
bounds_type["includes"] = &render_bounds::includes;
|
||||||
|
bounds_type["set_xy"] = &render_bounds::set_xy;
|
||||||
|
bounds_type["set_wh"] = &render_bounds::set_wh;
|
||||||
|
bounds_type["x0"] = &render_bounds::x0;
|
||||||
|
bounds_type["y0"] = &render_bounds::y0;
|
||||||
|
bounds_type["x1"] = &render_bounds::x1;
|
||||||
|
bounds_type["y1"] = &render_bounds::y1;
|
||||||
|
bounds_type["width"] = sol::property(&render_bounds::width, [] (render_bounds &b, float w) { b.x1 = b.x0 + w; });
|
||||||
|
bounds_type["height"] = sol::property(&render_bounds::height, [] (render_bounds &b, float h) { b.y1 = b.y0 + h; });
|
||||||
|
bounds_type["aspect"] = sol::property(&render_bounds::aspect);
|
||||||
|
|
||||||
|
|
||||||
|
auto color_type = emu.new_usertype<render_color>(
|
||||||
|
"render_color",
|
||||||
|
sol::call_constructor, sol::initializers(
|
||||||
|
[] (render_color &c) { new (&c) render_color{ 1.0F, 1.0F, 1.0F, 1.0F }; },
|
||||||
|
[] (render_color &c, float a, float r, float g, float b) { new (&c) render_color{ a, r, g, b }; }));
|
||||||
|
color_type["set"] = &render_color::set;
|
||||||
|
color_type["a"] = &render_color::a;
|
||||||
|
color_type["r"] = &render_color::r;
|
||||||
|
color_type["g"] = &render_color::g;
|
||||||
|
color_type["b"] = &render_color::b;
|
||||||
|
|
||||||
|
|
||||||
|
auto layout_view_type = sol().registry().new_usertype<layout_view>("layout_view", sol::no_constructor);
|
||||||
|
layout_view_type["has_screen"] = &layout_view::has_screen;
|
||||||
|
layout_view_type["set_prepare_items_callback"] =
|
||||||
|
make_simple_callback_setter<void>(
|
||||||
|
&layout_view::set_prepare_items_callback,
|
||||||
|
nullptr,
|
||||||
|
"set_prepare_items_callback",
|
||||||
|
nullptr);
|
||||||
|
layout_view_type["set_preload_callback"] =
|
||||||
|
make_simple_callback_setter<void>(
|
||||||
|
&layout_view::set_preload_callback,
|
||||||
|
nullptr,
|
||||||
|
"set_preload_callback",
|
||||||
|
nullptr);
|
||||||
|
layout_view_type["set_recomputed_callback"] =
|
||||||
|
make_simple_callback_setter<void>(
|
||||||
|
&layout_view::set_recomputed_callback,
|
||||||
|
nullptr,
|
||||||
|
"set_recomputed_callback",
|
||||||
|
nullptr);
|
||||||
|
layout_view_type["items"] = sol::property([] (layout_view &v) { return layout_view_items(v); });
|
||||||
|
layout_view_type["name"] = sol::property(&layout_view::name);
|
||||||
|
layout_view_type["unqualified_name"] = sol::property(&layout_view::unqualified_name);
|
||||||
|
layout_view_type["visible_screen_count"] = sol::property(&layout_view::visible_screen_count);
|
||||||
|
layout_view_type["effective_aspect"] = sol::property(&layout_view::effective_aspect);
|
||||||
|
layout_view_type["bounds"] = sol::property(&layout_view::bounds);
|
||||||
|
layout_view_type["has_art"] = sol::property(&layout_view::has_art);
|
||||||
|
|
||||||
|
|
||||||
|
auto layout_view_item_type = sol().registry().new_usertype<layout_view_item>("layout_item", sol::no_constructor);
|
||||||
|
layout_view_item_type["set_state"] = &layout_view_item::set_state;
|
||||||
|
layout_view_item_type["set_element_state_callback"] =
|
||||||
|
make_simple_callback_setter<int>(
|
||||||
|
&layout_view_item::set_element_state_callback,
|
||||||
|
[] () { return 0; },
|
||||||
|
"set_element_state_callback",
|
||||||
|
"element state");
|
||||||
|
layout_view_item_type["set_animation_state_callback"] =
|
||||||
|
make_simple_callback_setter<int>(
|
||||||
|
&layout_view_item::set_animation_state_callback,
|
||||||
|
[] () { return 0; },
|
||||||
|
"set_animation_state_callback",
|
||||||
|
"animation state");
|
||||||
|
layout_view_item_type["set_bounds_callback"] =
|
||||||
|
make_simple_callback_setter<render_bounds>(
|
||||||
|
&layout_view_item::set_bounds_callback,
|
||||||
|
[] () { return render_bounds{ 0.0f, 0.0f, 1.0f, 1.0f }; },
|
||||||
|
"set_bounds_callback",
|
||||||
|
"bounds");
|
||||||
|
layout_view_item_type["set_color_callback"] =
|
||||||
|
make_simple_callback_setter<render_color>(
|
||||||
|
&layout_view_item::set_color_callback,
|
||||||
|
[] () { return render_color{ 1.0f, 1.0f, 1.0f, 1.0f }; },
|
||||||
|
"set_color_callback",
|
||||||
|
"color");
|
||||||
|
layout_view_item_type["set_scroll_size_x_callback"] =
|
||||||
|
make_simple_callback_setter<float>(
|
||||||
|
&layout_view_item::set_scroll_size_x_callback,
|
||||||
|
[] () { return 1.0f; },
|
||||||
|
"set_scroll_size_x_callback",
|
||||||
|
"horizontal scroll window size");
|
||||||
|
layout_view_item_type["set_scroll_size_y_callback"] =
|
||||||
|
make_simple_callback_setter<float>(
|
||||||
|
&layout_view_item::set_scroll_size_y_callback,
|
||||||
|
[] () { return 1.0f; },
|
||||||
|
"set_scroll_size_y_callback",
|
||||||
|
"vertical scroll window size");
|
||||||
|
layout_view_item_type["set_scroll_pos_x_callback"] =
|
||||||
|
make_simple_callback_setter<float>(
|
||||||
|
&layout_view_item::set_scroll_pos_x_callback,
|
||||||
|
[] () { return 1.0f; },
|
||||||
|
"set_scroll_pos_x_callback",
|
||||||
|
"horizontal scroll position");
|
||||||
|
layout_view_item_type["set_scroll_pos_y_callback"] =
|
||||||
|
make_simple_callback_setter<float>(
|
||||||
|
&layout_view_item::set_scroll_pos_y_callback,
|
||||||
|
[] () { return 1.0f; },
|
||||||
|
"set_scroll_pos_y_callback",
|
||||||
|
"vertical scroll position");
|
||||||
|
layout_view_item_type["id"] = sol::property(
|
||||||
|
[] (layout_view_item &i, sol::this_state s) -> sol::object
|
||||||
|
{
|
||||||
|
if (i.id().empty())
|
||||||
|
return sol::lua_nil;
|
||||||
|
else
|
||||||
|
return sol::make_object(s, i.id());
|
||||||
|
});
|
||||||
|
layout_view_item_type["bounds_animated"] = sol::property(&layout_view_item::bounds_animated);
|
||||||
|
layout_view_item_type["color_animated"] = sol::property(&layout_view_item::color_animated);
|
||||||
|
layout_view_item_type["bounds"] = sol::property(&layout_view_item::bounds);
|
||||||
|
layout_view_item_type["color"] = sol::property(&layout_view_item::color);
|
||||||
|
layout_view_item_type["scroll_wrap_x"] = sol::property(&layout_view_item::scroll_wrap_x);
|
||||||
|
layout_view_item_type["scroll_wrap_y"] = sol::property(&layout_view_item::scroll_wrap_y);
|
||||||
|
layout_view_item_type["scroll_size_x"] = sol::property(
|
||||||
|
&layout_view_item::scroll_size_x,
|
||||||
|
&layout_view_item::set_scroll_size_x);
|
||||||
|
layout_view_item_type["scroll_size_y"] = sol::property(
|
||||||
|
&layout_view_item::scroll_size_y,
|
||||||
|
&layout_view_item::set_scroll_size_y);
|
||||||
|
layout_view_item_type["scroll_pos_x"] = sol::property(
|
||||||
|
&layout_view_item::scroll_pos_x,
|
||||||
|
&layout_view_item::set_scroll_pos_y);
|
||||||
|
layout_view_item_type["scroll_pos_y"] = sol::property(
|
||||||
|
&layout_view_item::scroll_pos_y,
|
||||||
|
&layout_view_item::set_scroll_pos_y);
|
||||||
|
layout_view_item_type["blend_mode"] = sol::property(&layout_view_item::blend_mode);
|
||||||
|
layout_view_item_type["orientation"] = sol::property(&layout_view_item::orientation);
|
||||||
|
layout_view_item_type["element_state"] = sol::property(&layout_view_item::element_state);
|
||||||
|
layout_view_item_type["animation_state"] = sol::property(&layout_view_item::animation_state);
|
||||||
|
|
||||||
|
|
||||||
|
auto layout_file_type = sol().registry().new_usertype<layout_file>("layout_file", sol::no_constructor);
|
||||||
|
layout_file_type["set_resolve_tags_callback"] =
|
||||||
|
make_simple_callback_setter<void>(
|
||||||
|
&layout_file::set_resolve_tags_callback,
|
||||||
|
nullptr,
|
||||||
|
"set_resolve_tags_callback",
|
||||||
|
nullptr);
|
||||||
|
layout_file_type["device"] = sol::property(&layout_file::device);
|
||||||
|
layout_file_type["views"] = sol::property([] (layout_file &f) { return layout_file_views(f); });
|
||||||
|
|
||||||
|
|
||||||
|
auto target_type = sol().registry().new_usertype<render_target>("target", sol::no_constructor);
|
||||||
|
target_type["index"] = sol::property([] (render_target const &t) { return t.index() + 1; });
|
||||||
|
target_type["width"] = sol::property(&render_target::width);
|
||||||
|
target_type["height"] = sol::property(&render_target::height);
|
||||||
|
target_type["pixel_aspect"] = sol::property(&render_target::pixel_aspect);
|
||||||
|
target_type["hidden"] = sol::property(&render_target::hidden);
|
||||||
|
target_type["is_ui_target"] = sol::property(&render_target::is_ui_target);
|
||||||
|
target_type["max_update_rate"] = sol::property(&render_target::max_update_rate, &render_target::set_max_update_rate);
|
||||||
|
target_type["orientation"] = sol::property(&render_target::orientation, &render_target::set_orientation);
|
||||||
|
target_type["view_names"] = sol::property([] (render_target &t) { return render_target_view_names(t); });
|
||||||
|
target_type["current_view"] = sol::property(&render_target::current_view);
|
||||||
|
target_type["view_index"] = sol::property(
|
||||||
|
[] (render_target const &t) { return t.view() + 1; },
|
||||||
|
[] (render_target &t, unsigned v) { t.set_view(v - 1); });
|
||||||
|
target_type["visibility_mask"] = sol::property(&render_target::visibility_mask);
|
||||||
|
target_type["screen_overlay"] = sol::property(&render_target::screen_overlay_enabled, &render_target::set_screen_overlay_enabled);
|
||||||
|
target_type["zoom_to_screen"] = sol::property(&render_target::zoom_to_screen, &render_target::set_zoom_to_screen);
|
||||||
|
|
||||||
|
|
||||||
|
auto render_container_type = sol().registry().new_usertype<render_container>("render_container", sol::no_constructor);
|
||||||
|
render_container_type["draw_box"] =
|
||||||
|
[] (render_container &ctnr, float x1, float y1, float x2, float y2, std::optional<uint32_t> fgcolor, std::optional<uint32_t> bgcolor)
|
||||||
|
{
|
||||||
|
x1 = std::clamp(x1, 0.0f, 1.0f);
|
||||||
|
y1 = std::clamp(y1, 0.0f, 1.0f);
|
||||||
|
x2 = std::clamp(x2, 0.0f, 1.0f);
|
||||||
|
y2 = std::clamp(y2, 0.0f, 1.0f);
|
||||||
|
mame_ui_manager &ui(mame_machine_manager::instance()->ui());
|
||||||
|
if (!fgcolor)
|
||||||
|
fgcolor = ui.colors().text_color();
|
||||||
|
if (!bgcolor)
|
||||||
|
bgcolor = ui.colors().background_color();
|
||||||
|
ui.draw_outlined_box(ctnr, x1, y1, x2, y2, *fgcolor, *bgcolor);
|
||||||
|
};
|
||||||
|
render_container_type["draw_line"] =
|
||||||
|
[] (render_container &ctnr, float x1, float y1, float x2, float y2, std::optional<uint32_t> color)
|
||||||
|
{
|
||||||
|
x1 = std::clamp(x1, 0.0f, 1.0f);
|
||||||
|
y1 = std::clamp(y1, 0.0f, 1.0f);
|
||||||
|
x2 = std::clamp(x2, 0.0f, 1.0f);
|
||||||
|
y2 = std::clamp(y2, 0.0f, 1.0f);
|
||||||
|
if (!color)
|
||||||
|
color = mame_machine_manager::instance()->ui().colors().text_color();
|
||||||
|
ctnr.add_line(x1, y1, x2, y2, UI_LINE_WIDTH, rgb_t(*color), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
};
|
||||||
|
render_container_type["draw_text"] =
|
||||||
|
[this] (render_container &ctnr, sol::object xobj, float y, char const *msg, std::optional<uint32_t> fgcolor, std::optional<uint32_t> bgcolor)
|
||||||
|
{
|
||||||
|
auto justify = ui::text_layout::text_justify::LEFT;
|
||||||
|
float x = 0;
|
||||||
|
if (xobj.is<float>())
|
||||||
|
{
|
||||||
|
x = std::clamp(xobj.as<float>(), 0.0f, 1.0f);
|
||||||
|
}
|
||||||
|
else if (xobj.is<char const *>())
|
||||||
|
{
|
||||||
|
char const *const justifystr(xobj.as<char const *>());
|
||||||
|
if (!strcmp(justifystr, "left"))
|
||||||
|
justify = ui::text_layout::text_justify::LEFT;
|
||||||
|
else if (!strcmp(justifystr, "right"))
|
||||||
|
justify = ui::text_layout::text_justify::RIGHT;
|
||||||
|
else if (!strcmp(justifystr, "center"))
|
||||||
|
justify = ui::text_layout::text_justify::CENTER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
luaL_error(m_lua_state, "Error in param 1 to draw_text");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
y = std::clamp(y, 0.0f, 1.0f);
|
||||||
|
mame_ui_manager &ui(mame_machine_manager::instance()->ui());
|
||||||
|
if (!fgcolor)
|
||||||
|
fgcolor = ui.colors().text_color();
|
||||||
|
if (!bgcolor)
|
||||||
|
bgcolor = 0;
|
||||||
|
ui.draw_text_full(
|
||||||
|
ctnr,
|
||||||
|
msg,
|
||||||
|
x, y, (1.0f - x),
|
||||||
|
justify, ui::text_layout::word_wrapping::WORD,
|
||||||
|
mame_ui_manager::OPAQUE_, *fgcolor, *bgcolor);
|
||||||
|
};
|
||||||
|
render_container_type["user_settings"] = sol::property(&render_container::get_user_settings, &render_container::set_user_settings);
|
||||||
|
render_container_type["orientation"] = sol::property(
|
||||||
|
&render_container::orientation,
|
||||||
|
[] (render_container &c, int v)
|
||||||
|
{
|
||||||
|
render_container::user_settings s(c.get_user_settings());
|
||||||
|
s.m_orientation = v;
|
||||||
|
c.set_user_settings(s);
|
||||||
|
});
|
||||||
|
render_container_type["xscale"] = sol::property(
|
||||||
|
&render_container::xscale,
|
||||||
|
[] (render_container &c, float v)
|
||||||
|
{
|
||||||
|
render_container::user_settings s(c.get_user_settings());
|
||||||
|
s.m_xscale = v;
|
||||||
|
c.set_user_settings(s);
|
||||||
|
});
|
||||||
|
render_container_type["yscale"] = sol::property(
|
||||||
|
&render_container::yscale,
|
||||||
|
[] (render_container &c, float v)
|
||||||
|
{
|
||||||
|
render_container::user_settings s(c.get_user_settings());
|
||||||
|
s.m_yscale = v;
|
||||||
|
c.set_user_settings(s);
|
||||||
|
});
|
||||||
|
render_container_type["xoffset"] = sol::property(
|
||||||
|
&render_container::xoffset,
|
||||||
|
[] (render_container &c, float v)
|
||||||
|
{
|
||||||
|
render_container::user_settings s(c.get_user_settings());
|
||||||
|
s.m_xoffset = v;
|
||||||
|
c.set_user_settings(s);
|
||||||
|
});
|
||||||
|
render_container_type["yoffset"] = sol::property(
|
||||||
|
&render_container::yoffset,
|
||||||
|
[] (render_container &c, float v)
|
||||||
|
{
|
||||||
|
render_container::user_settings s(c.get_user_settings());
|
||||||
|
s.m_yoffset = v;
|
||||||
|
c.set_user_settings(s);
|
||||||
|
});
|
||||||
|
render_container_type["is_empty"] = sol::property(&render_container::is_empty);
|
||||||
|
|
||||||
|
|
||||||
|
auto user_settings_type = sol().registry().new_usertype<render_container::user_settings>("render_container_settings", sol::no_constructor);
|
||||||
|
user_settings_type["orientation"] = &render_container::user_settings::m_orientation;
|
||||||
|
user_settings_type["brightness"] = &render_container::user_settings::m_brightness;
|
||||||
|
user_settings_type["contrast"] = &render_container::user_settings::m_contrast;
|
||||||
|
user_settings_type["gamma"] = &render_container::user_settings::m_gamma;
|
||||||
|
user_settings_type["xscale"] = &render_container::user_settings::m_xscale;
|
||||||
|
user_settings_type["yscale"] = &render_container::user_settings::m_yscale;
|
||||||
|
user_settings_type["xoffset"] = &render_container::user_settings::m_xoffset;
|
||||||
|
user_settings_type["yoffset"] = &render_container::user_settings::m_yoffset;
|
||||||
|
|
||||||
|
|
||||||
|
auto render_type = sol().registry().new_usertype<render_manager>("render", sol::no_constructor);
|
||||||
|
render_type["max_update_rate"] = sol::property(&render_manager::max_update_rate);
|
||||||
|
render_type["ui_target"] = sol::property(&render_manager::ui_target);
|
||||||
|
render_type["ui_container"] = sol::property(&render_manager::ui_container);
|
||||||
|
render_type["targets"] = sol::property([] (render_manager &m) { return simple_list_wrapper<render_target>(m.targets()); });
|
||||||
|
|
||||||
|
}
|
446
src/icludes/frontend/mame/mame.cpp
Normal file
446
src/icludes/frontend/mame/mame.cpp
Normal file
@ -0,0 +1,446 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
mame.c
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "mame.h"
|
||||||
|
|
||||||
|
#include "ui/inifile.h"
|
||||||
|
#include "ui/selgame.h"
|
||||||
|
#include "ui/simpleselgame.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "cheat.h"
|
||||||
|
#include "clifront.h"
|
||||||
|
#include "emuopts.h"
|
||||||
|
#include "luaengine.h"
|
||||||
|
#include "mameopts.h"
|
||||||
|
#include "pluginopts.h"
|
||||||
|
#include "rendlay.h"
|
||||||
|
#include "validity.h"
|
||||||
|
|
||||||
|
#include "corestr.h"
|
||||||
|
#include "xmlfile.h"
|
||||||
|
|
||||||
|
#include "osdepend.h"
|
||||||
|
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// MACHINE MANAGER
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
mame_machine_manager *mame_machine_manager::s_manager = nullptr;
|
||||||
|
|
||||||
|
mame_machine_manager* mame_machine_manager::instance(emu_options &options, osd_interface &osd)
|
||||||
|
{
|
||||||
|
if (!s_manager)
|
||||||
|
s_manager = new mame_machine_manager(options, osd);
|
||||||
|
|
||||||
|
return s_manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
mame_machine_manager* mame_machine_manager::instance()
|
||||||
|
{
|
||||||
|
return s_manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mame_machine_manager - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
mame_machine_manager::mame_machine_manager(emu_options &options,osd_interface &osd) :
|
||||||
|
machine_manager(options, osd),
|
||||||
|
m_plugins(std::make_unique<plugin_options>()),
|
||||||
|
m_lua(std::make_unique<lua_engine>()),
|
||||||
|
m_new_driver_pending(nullptr),
|
||||||
|
m_firstrun(true),
|
||||||
|
m_autoboot_timer(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ~mame_machine_manager - destructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
mame_machine_manager::~mame_machine_manager()
|
||||||
|
{
|
||||||
|
m_lua.reset();
|
||||||
|
s_manager = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
GLOBAL VARIABLES
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mame_schedule_new_driver - schedule a new game to
|
||||||
|
// be loaded
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mame_machine_manager::schedule_new_driver(const game_driver &driver)
|
||||||
|
{
|
||||||
|
m_new_driver_pending = &driver;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
CORE IMPLEMENTATION
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// update_machine
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mame_machine_manager::update_machine()
|
||||||
|
{
|
||||||
|
m_lua->set_machine(m_machine);
|
||||||
|
m_lua->attach_notifiers();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// split
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
static std::vector<std::string> split(const std::string &text, char sep)
|
||||||
|
{
|
||||||
|
std::vector<std::string> tokens;
|
||||||
|
std::size_t start = 0, end = 0;
|
||||||
|
while ((end = text.find(sep, start)) != std::string::npos)
|
||||||
|
{
|
||||||
|
std::string temp = text.substr(start, end - start);
|
||||||
|
if (temp != "") tokens.push_back(temp);
|
||||||
|
start = end + 1;
|
||||||
|
}
|
||||||
|
std::string temp = text.substr(start);
|
||||||
|
if (temp != "") tokens.push_back(temp);
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// start_luaengine
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mame_machine_manager::start_luaengine()
|
||||||
|
{
|
||||||
|
if (options().plugins())
|
||||||
|
{
|
||||||
|
// scan all plugin directories
|
||||||
|
path_iterator iter(options().plugins_path());
|
||||||
|
std::string pluginpath;
|
||||||
|
while (iter.next(pluginpath))
|
||||||
|
{
|
||||||
|
// user may specify environment variables; subsitute them
|
||||||
|
osd_subst_env(pluginpath, pluginpath);
|
||||||
|
|
||||||
|
// and then scan the directory recursively
|
||||||
|
m_plugins->scan_directory(pluginpath, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// parse the file
|
||||||
|
// attempt to open the output file
|
||||||
|
emu_file file(options().ini_path(), OPEN_FLAG_READ);
|
||||||
|
if (!file.open("plugin.ini"))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_plugins->parse_ini_file((util::core_file&)file);
|
||||||
|
}
|
||||||
|
catch (options_exception &)
|
||||||
|
{
|
||||||
|
osd_printf_error("**Error loading plugin.ini**\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// process includes
|
||||||
|
for (const std::string &incl : split(options().plugin(), ','))
|
||||||
|
{
|
||||||
|
plugin_options::plugin *p = m_plugins->find(incl);
|
||||||
|
if (!p)
|
||||||
|
fatalerror("Fatal error: Could not load plugin: %s\n", incl);
|
||||||
|
p->m_start = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// process excludes
|
||||||
|
for (const std::string &excl : split(options().no_plugin(), ','))
|
||||||
|
{
|
||||||
|
plugin_options::plugin *p = m_plugins->find(excl);
|
||||||
|
if (!p)
|
||||||
|
fatalerror("Fatal error: Unknown plugin: %s\n", excl);
|
||||||
|
p->m_start = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we have a special way to open the console plugin
|
||||||
|
if (options().console())
|
||||||
|
{
|
||||||
|
plugin_options::plugin *p = m_plugins->find(OPTION_CONSOLE);
|
||||||
|
if (!p)
|
||||||
|
fatalerror("Fatal error: Console plugin not found.\n");
|
||||||
|
|
||||||
|
p->m_start = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_lua->initialize();
|
||||||
|
|
||||||
|
{
|
||||||
|
emu_file file(options().plugins_path(), OPEN_FLAG_READ);
|
||||||
|
std::error_condition const filerr = file.open("boot.lua");
|
||||||
|
if (!filerr)
|
||||||
|
{
|
||||||
|
std::string exppath;
|
||||||
|
osd_subst_env(exppath, std::string(file.fullpath()));
|
||||||
|
m_lua->load_script(exppath.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// execute - run the core emulation
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
int mame_machine_manager::execute()
|
||||||
|
{
|
||||||
|
bool started_empty = false;
|
||||||
|
|
||||||
|
bool firstgame = true;
|
||||||
|
|
||||||
|
// loop across multiple hard resets
|
||||||
|
bool exit_pending = false;
|
||||||
|
int error = EMU_ERR_NONE;
|
||||||
|
|
||||||
|
while (error == EMU_ERR_NONE && !exit_pending)
|
||||||
|
{
|
||||||
|
m_new_driver_pending = nullptr;
|
||||||
|
|
||||||
|
// if no driver, use the internal empty driver
|
||||||
|
const game_driver *system = mame_options::system(m_options);
|
||||||
|
if (system == nullptr)
|
||||||
|
{
|
||||||
|
system = &GAME_NAME(___empty);
|
||||||
|
if (firstgame)
|
||||||
|
started_empty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
firstgame = false;
|
||||||
|
|
||||||
|
// parse any INI files as the first thing
|
||||||
|
if (m_options.read_config())
|
||||||
|
{
|
||||||
|
// but first, revert out any potential game-specific INI settings from previous runs via the internal UI
|
||||||
|
m_options.revert(OPTION_PRIORITY_INI);
|
||||||
|
|
||||||
|
std::ostringstream errors;
|
||||||
|
mame_options::parse_standard_inis(m_options, errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
// otherwise, perform validity checks before anything else
|
||||||
|
bool is_empty = (system == &GAME_NAME(___empty));
|
||||||
|
if (!is_empty)
|
||||||
|
{
|
||||||
|
validity_checker valid(m_options, true);
|
||||||
|
valid.set_verbose(false);
|
||||||
|
valid.check_shared_source(*system);
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the machine configuration
|
||||||
|
machine_config config(*system, m_options);
|
||||||
|
|
||||||
|
// create the machine structure and driver
|
||||||
|
running_machine machine(config, *this);
|
||||||
|
|
||||||
|
set_machine(&machine);
|
||||||
|
|
||||||
|
// run the machine
|
||||||
|
error = machine.run(is_empty);
|
||||||
|
m_firstrun = false;
|
||||||
|
|
||||||
|
// check the state of the machine
|
||||||
|
if (m_new_driver_pending)
|
||||||
|
{
|
||||||
|
// set up new system name and adjust device options accordingly
|
||||||
|
m_options.set_system_name(m_new_driver_pending->name);
|
||||||
|
m_firstrun = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (machine.exit_pending())
|
||||||
|
m_options.set_system_name("");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (machine.exit_pending() && (!started_empty || is_empty))
|
||||||
|
exit_pending = true;
|
||||||
|
|
||||||
|
// machine will go away when we exit scope
|
||||||
|
set_machine(nullptr);
|
||||||
|
}
|
||||||
|
// return an error
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
TIMER_CALLBACK_MEMBER(mame_machine_manager::autoboot_callback)
|
||||||
|
{
|
||||||
|
if (strlen(options().autoboot_script())!=0) {
|
||||||
|
mame_machine_manager::instance()->lua()->load_script(options().autoboot_script());
|
||||||
|
}
|
||||||
|
else if (strlen(options().autoboot_command())!=0) {
|
||||||
|
std::string cmd = std::string(options().autoboot_command());
|
||||||
|
strreplace(cmd, "'", "\\'");
|
||||||
|
std::string val = std::string("emu.keypost('").append(cmd).append("')");
|
||||||
|
mame_machine_manager::instance()->lua()->load_string(val.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mame_machine_manager::reset()
|
||||||
|
{
|
||||||
|
// setup autoboot if needed
|
||||||
|
m_autoboot_timer->adjust(attotime(options().autoboot_delay(),0),0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui_manager* mame_machine_manager::create_ui(running_machine& machine)
|
||||||
|
{
|
||||||
|
m_ui = std::make_unique<mame_ui_manager>(machine);
|
||||||
|
m_ui->init();
|
||||||
|
|
||||||
|
machine.add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(&mame_machine_manager::reset, this));
|
||||||
|
|
||||||
|
m_ui->set_startup_text("Initializing...", true);
|
||||||
|
|
||||||
|
return m_ui.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mame_machine_manager::ui_initialize(running_machine& machine)
|
||||||
|
{
|
||||||
|
m_ui->initialize(machine);
|
||||||
|
|
||||||
|
// display the startup screens
|
||||||
|
m_ui->display_startup_screens(m_firstrun);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mame_machine_manager::before_load_settings(running_machine& machine)
|
||||||
|
{
|
||||||
|
m_lua->on_machine_before_load_settings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mame_machine_manager::create_custom(running_machine& machine)
|
||||||
|
{
|
||||||
|
// start the inifile manager
|
||||||
|
m_inifile = std::make_unique<inifile_manager>(m_ui->options());
|
||||||
|
|
||||||
|
// allocate autoboot timer
|
||||||
|
m_autoboot_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(mame_machine_manager::autoboot_callback), this));
|
||||||
|
|
||||||
|
// start favorite manager
|
||||||
|
m_favorite = std::make_unique<favorite_manager>(m_ui->options());
|
||||||
|
}
|
||||||
|
|
||||||
|
void mame_machine_manager::load_cheatfiles(running_machine& machine)
|
||||||
|
{
|
||||||
|
// set up the cheat engine
|
||||||
|
m_cheat = std::make_unique<cheat_manager>(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// missing_mandatory_images - search for devices
|
||||||
|
// which need an image to be loaded
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
std::vector<std::reference_wrapper<const std::string>> mame_machine_manager::missing_mandatory_images()
|
||||||
|
{
|
||||||
|
std::vector<std::reference_wrapper<const std::string>> results;
|
||||||
|
assert(m_machine);
|
||||||
|
|
||||||
|
// make sure that any required image has a mounted file
|
||||||
|
for (device_image_interface &image : image_interface_enumerator(m_machine->root_device()))
|
||||||
|
{
|
||||||
|
if (image.must_be_loaded())
|
||||||
|
{
|
||||||
|
if (m_machine->options().image_option(image.instance_name()).value().empty())
|
||||||
|
{
|
||||||
|
// this is a missing image; give LUA plugins a chance to handle it
|
||||||
|
if (!lua()->on_missing_mandatory_image(image.instance_name()))
|
||||||
|
results.push_back(std::reference_wrapper<const std::string>(image.instance_name()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * emulator_info::get_bare_build_version() { return bare_build_version; }
|
||||||
|
const char * emulator_info::get_build_version() { return build_version; }
|
||||||
|
|
||||||
|
void emulator_info::display_ui_chooser(running_machine& machine)
|
||||||
|
{
|
||||||
|
// force the UI to show the game select screen
|
||||||
|
mame_ui_manager &mui = mame_machine_manager::instance()->ui();
|
||||||
|
render_container &container = machine.render().ui_container();
|
||||||
|
if (machine.options().ui() == emu_options::UI_SIMPLE)
|
||||||
|
ui::simple_menu_select_game::force_game_select(mui, container);
|
||||||
|
else
|
||||||
|
ui::menu_select_game::force_game_select(mui, container);
|
||||||
|
}
|
||||||
|
|
||||||
|
int emulator_info::start_frontend(emu_options &options, osd_interface &osd, std::vector<std::string> &args)
|
||||||
|
{
|
||||||
|
cli_frontend frontend(options, osd);
|
||||||
|
return frontend.execute(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
int emulator_info::start_frontend(emu_options &options, osd_interface &osd, int argc, char *argv[])
|
||||||
|
{
|
||||||
|
std::vector<std::string> args(argv, argv + argc);
|
||||||
|
return start_frontend(options, osd, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void emulator_info::draw_user_interface(running_machine& machine)
|
||||||
|
{
|
||||||
|
mame_machine_manager::instance()->ui().update_and_render(machine.render().ui_container());
|
||||||
|
}
|
||||||
|
|
||||||
|
void emulator_info::periodic_check()
|
||||||
|
{
|
||||||
|
return mame_machine_manager::instance()->lua()->on_periodic();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool emulator_info::frame_hook()
|
||||||
|
{
|
||||||
|
return mame_machine_manager::instance()->lua()->frame_hook();
|
||||||
|
}
|
||||||
|
|
||||||
|
void emulator_info::sound_hook()
|
||||||
|
{
|
||||||
|
return mame_machine_manager::instance()->lua()->on_sound_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void emulator_info::layout_script_cb(layout_file &file, const char *script)
|
||||||
|
{
|
||||||
|
// TODO: come up with a better way to pass multiple arguments to plugin
|
||||||
|
//mame_machine_manager::instance()->lua()->call_plugin_set("layout", std::make_tuple(&file, script->get_value()));
|
||||||
|
auto &lua(mame_machine_manager::instance()->lua()->sol());
|
||||||
|
sol::object obj = lua.registry()["cb_layout"];
|
||||||
|
if (obj.is<sol::protected_function>())
|
||||||
|
{
|
||||||
|
auto res = obj.as<sol::protected_function>()(sol::make_reference(lua, &file), sol::make_reference(lua, script));
|
||||||
|
if (!res.valid())
|
||||||
|
{
|
||||||
|
sol::error err = res;
|
||||||
|
osd_printf_error("[LUA ERROR] in call_plugin: %s\n", err.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool emulator_info::standalone() { return false; }
|
97
src/icludes/frontend/mame/mame.h
Normal file
97
src/icludes/frontend/mame/mame.h
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
mame.h
|
||||||
|
|
||||||
|
Controls execution of the core MAME system.
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_MAME_MAME_H
|
||||||
|
#define MAME_FRONTEND_MAME_MAME_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class plugin_options;
|
||||||
|
class osd_interface;
|
||||||
|
|
||||||
|
class lua_engine;
|
||||||
|
class cheat_manager;
|
||||||
|
class inifile_manager;
|
||||||
|
class favorite_manager;
|
||||||
|
class mame_ui_manager;
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// ======================> machine_manager
|
||||||
|
|
||||||
|
class mame_machine_manager : public machine_manager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static mame_machine_manager *instance(emu_options &options, osd_interface &osd);
|
||||||
|
static mame_machine_manager *instance();
|
||||||
|
~mame_machine_manager();
|
||||||
|
|
||||||
|
plugin_options &plugins() const { return *m_plugins; }
|
||||||
|
lua_engine *lua() { return m_lua.get(); }
|
||||||
|
|
||||||
|
virtual void update_machine() override;
|
||||||
|
|
||||||
|
void reset();
|
||||||
|
TIMER_CALLBACK_MEMBER(autoboot_callback);
|
||||||
|
|
||||||
|
virtual ui_manager* create_ui(running_machine& machine) override;
|
||||||
|
|
||||||
|
virtual void create_custom(running_machine& machine) override;
|
||||||
|
|
||||||
|
virtual void load_cheatfiles(running_machine& machine) override;
|
||||||
|
|
||||||
|
virtual void ui_initialize(running_machine& machine) override;
|
||||||
|
|
||||||
|
virtual void before_load_settings(running_machine& machine) override;
|
||||||
|
|
||||||
|
std::vector<std::reference_wrapper<const std::string>> missing_mandatory_images();
|
||||||
|
|
||||||
|
/* execute as configured by the OPTION_SYSTEMNAME option on the specified options */
|
||||||
|
int execute();
|
||||||
|
void start_luaengine();
|
||||||
|
void schedule_new_driver(const game_driver &driver);
|
||||||
|
mame_ui_manager& ui() const { assert(m_ui != nullptr); return *m_ui; }
|
||||||
|
cheat_manager &cheat() const { assert(m_cheat != nullptr); return *m_cheat; }
|
||||||
|
inifile_manager &inifile() const { assert(m_inifile != nullptr); return *m_inifile; }
|
||||||
|
favorite_manager &favorite() const { assert(m_favorite != nullptr); return *m_favorite; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// construction
|
||||||
|
mame_machine_manager(emu_options &options, osd_interface &osd);
|
||||||
|
mame_machine_manager(mame_machine_manager const &) = delete;
|
||||||
|
mame_machine_manager(mame_machine_manager &&) = delete;
|
||||||
|
mame_machine_manager &operator=(mame_machine_manager const &) = delete;
|
||||||
|
mame_machine_manager &operator=(mame_machine_manager &&) = delete;
|
||||||
|
|
||||||
|
std::unique_ptr<plugin_options> m_plugins; // pointer to plugin options
|
||||||
|
std::unique_ptr<lua_engine> m_lua;
|
||||||
|
|
||||||
|
const game_driver * m_new_driver_pending; // pointer to the next pending driver
|
||||||
|
bool m_firstrun;
|
||||||
|
|
||||||
|
static mame_machine_manager *s_manager;
|
||||||
|
emu_timer *m_autoboot_timer; // autoboot timer
|
||||||
|
std::unique_ptr<mame_ui_manager> m_ui; // internal data from ui.cpp
|
||||||
|
std::unique_ptr<cheat_manager> m_cheat; // internal data from cheat.cpp
|
||||||
|
std::unique_ptr<inifile_manager> m_inifile; // internal data from inifile.c for INIs
|
||||||
|
std::unique_ptr<favorite_manager> m_favorite; // internal data from inifile.c for favorites
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// GLOBAL VARIABLES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
extern const char build_version[];
|
||||||
|
extern const char bare_build_version[];
|
||||||
|
extern const char bare_vcs_revision[];
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_MAME_MAME_H
|
210
src/icludes/frontend/mame/mameopts.cpp
Normal file
210
src/icludes/frontend/mame/mameopts.cpp
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
mameopts.cpp
|
||||||
|
|
||||||
|
Options file and command line management.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "mameopts.h"
|
||||||
|
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "screen.h"
|
||||||
|
#include "softlist_dev.h"
|
||||||
|
#include "zippath.h"
|
||||||
|
#include "hashfile.h"
|
||||||
|
#include "clifront.h"
|
||||||
|
|
||||||
|
#include <cctype>
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// parse_standard_inis - parse the standard set
|
||||||
|
// of INI files
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mame_options::parse_standard_inis(emu_options &options, std::ostream &error_stream, const game_driver *driver)
|
||||||
|
{
|
||||||
|
// parse the INI file defined by the platform (e.g., "mame.ini")
|
||||||
|
// we do this twice so that the first file can change the INI path
|
||||||
|
parse_one_ini(options, emulator_info::get_configname(), OPTION_PRIORITY_MAME_INI);
|
||||||
|
parse_one_ini(options, emulator_info::get_configname(), OPTION_PRIORITY_MAME_INI, &error_stream);
|
||||||
|
|
||||||
|
// debug mode: parse "debug.ini" as well
|
||||||
|
if (options.debug())
|
||||||
|
parse_one_ini(options, "debug", OPTION_PRIORITY_DEBUG_INI, &error_stream);
|
||||||
|
|
||||||
|
// if we have a valid system driver, parse system-specific INI files
|
||||||
|
game_driver const *const cursystem = !driver ? system(options) : driver;
|
||||||
|
if (!cursystem)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// parse "vertical.ini" or "horizont.ini"
|
||||||
|
if (cursystem->flags & ORIENTATION_SWAP_XY)
|
||||||
|
parse_one_ini(options, "vertical", OPTION_PRIORITY_ORIENTATION_INI, &error_stream);
|
||||||
|
else
|
||||||
|
parse_one_ini(options, "horizont", OPTION_PRIORITY_ORIENTATION_INI, &error_stream);
|
||||||
|
|
||||||
|
switch (cursystem->flags & machine_flags::MASK_TYPE)
|
||||||
|
{
|
||||||
|
case machine_flags::TYPE_ARCADE:
|
||||||
|
parse_one_ini(options, "arcade", OPTION_PRIORITY_SYSTYPE_INI, &error_stream);
|
||||||
|
break;
|
||||||
|
case machine_flags::TYPE_CONSOLE:
|
||||||
|
parse_one_ini(options ,"console", OPTION_PRIORITY_SYSTYPE_INI, &error_stream);
|
||||||
|
break;
|
||||||
|
case machine_flags::TYPE_COMPUTER:
|
||||||
|
parse_one_ini(options, "computer", OPTION_PRIORITY_SYSTYPE_INI, &error_stream);
|
||||||
|
break;
|
||||||
|
case machine_flags::TYPE_OTHER:
|
||||||
|
parse_one_ini(options, "othersys", OPTION_PRIORITY_SYSTYPE_INI, &error_stream);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
machine_config config(*cursystem, options);
|
||||||
|
for (const screen_device &device : screen_device_enumerator(config.root_device()))
|
||||||
|
{
|
||||||
|
// parse "raster.ini" for raster games
|
||||||
|
if (device.screen_type() == SCREEN_TYPE_RASTER)
|
||||||
|
{
|
||||||
|
parse_one_ini(options, "raster", OPTION_PRIORITY_SCREEN_INI, &error_stream);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// parse "vector.ini" for vector games
|
||||||
|
if (device.screen_type() == SCREEN_TYPE_VECTOR)
|
||||||
|
{
|
||||||
|
parse_one_ini(options, "vector", OPTION_PRIORITY_SCREEN_INI, &error_stream);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// parse "lcd.ini" for lcd games
|
||||||
|
if (device.screen_type() == SCREEN_TYPE_LCD)
|
||||||
|
{
|
||||||
|
parse_one_ini(options, "lcd", OPTION_PRIORITY_SCREEN_INI, &error_stream);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// next parse "source/<sourcefile>.ini"
|
||||||
|
std::string sourcename = std::string(core_filename_extract_base(cursystem->type.source(), true)).insert(0, "source" PATH_SEPARATOR);
|
||||||
|
parse_one_ini(options, sourcename.c_str(), OPTION_PRIORITY_SOURCE_INI, &error_stream);
|
||||||
|
|
||||||
|
// then parse the grandparent, parent, and system-specific INIs
|
||||||
|
int parent = driver_list::clone(*cursystem);
|
||||||
|
int gparent = (parent != -1) ? driver_list::clone(parent) : -1;
|
||||||
|
if (gparent != -1)
|
||||||
|
parse_one_ini(options, driver_list::driver(gparent).name, OPTION_PRIORITY_GPARENT_INI, &error_stream);
|
||||||
|
if (parent != -1)
|
||||||
|
parse_one_ini(options, driver_list::driver(parent).name, OPTION_PRIORITY_PARENT_INI, &error_stream);
|
||||||
|
parse_one_ini(options, cursystem->name, OPTION_PRIORITY_DRIVER_INI, &error_stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// system - return a pointer to the specified
|
||||||
|
// system driver, or nullptr if no match
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
const game_driver *mame_options::system(const emu_options &options)
|
||||||
|
{
|
||||||
|
int index = driver_list::find(std::string(core_filename_extract_base(options.system_name(), true)).c_str());
|
||||||
|
return (index != -1) ? &driver_list::driver(index) : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// parse_one_ini - parse a single INI file
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mame_options::parse_one_ini(emu_options &options, const char *basename, int priority, std::ostream *error_stream)
|
||||||
|
{
|
||||||
|
// don't parse if it has been disabled
|
||||||
|
if (!options.read_config())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// open the file; if we fail, that's ok
|
||||||
|
emu_file file(options.ini_path(), OPEN_FLAG_READ);
|
||||||
|
osd_printf_verbose("Attempting load of %s.ini\n", basename);
|
||||||
|
std::error_condition const filerr = file.open(std::string(basename) + ".ini");
|
||||||
|
if (filerr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// parse the file
|
||||||
|
osd_printf_verbose("Parsing %s.ini\n", basename);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
options.parse_ini_file((util::core_file&)file, priority, priority < OPTION_PRIORITY_DRIVER_INI, false);
|
||||||
|
}
|
||||||
|
catch (options_exception &ex)
|
||||||
|
{
|
||||||
|
if (error_stream)
|
||||||
|
util::stream_format(*error_stream, "While parsing %s:\n%s\n", file.fullpath(), ex.message());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate_hashpath_from_args_and_inis
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mame_options::populate_hashpath_from_args_and_inis(emu_options &options, const std::vector<std::string> &args)
|
||||||
|
{
|
||||||
|
// The existence of this function comes from the fact that for softlist options to be properly
|
||||||
|
// evaluated, we need to have the hashpath variable set. The problem is that the hashpath may
|
||||||
|
// be set anywhere on the command line, but also in any of the myriad INI files that we parse, some
|
||||||
|
// of which may be system specific (e.g. - nes.ini) or otherwise influenced by the system (e.g. - vector.ini)
|
||||||
|
//
|
||||||
|
// I think that it is terrible that we have to do a completely independent pass on the command line and every
|
||||||
|
// argument simply because any one of these things might be setting - hashpath.Unless we invest the effort in
|
||||||
|
// building some sort of "late binding" apparatus for options(e.g. - delay evaluation of softlist options until
|
||||||
|
// we've scoured all INIs for hashpath) that can completely straddle the command line and the INI worlds, doing
|
||||||
|
// this is the best that we can do IMO.
|
||||||
|
|
||||||
|
// parse the command line
|
||||||
|
emu_options temp_options(emu_options::option_support::GENERAL_AND_SYSTEM);
|
||||||
|
|
||||||
|
// pick up whatever changes the osd did to the default inipath
|
||||||
|
temp_options.set_default_value(OPTION_INIPATH, options.ini_path());
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
temp_options.parse_command_line(args, OPTION_PRIORITY_CMDLINE, true);
|
||||||
|
}
|
||||||
|
catch (options_exception &)
|
||||||
|
{
|
||||||
|
// Something is very long; we have bigger problems than -hashpath possibly
|
||||||
|
// being in never-never land. Punt and let the main code fail
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we have an auxillary verb, hashpath is irrelevant
|
||||||
|
if (!temp_options.command().empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// read INI files
|
||||||
|
if (temp_options.read_config())
|
||||||
|
{
|
||||||
|
std::ostringstream error_stream;
|
||||||
|
parse_standard_inis(temp_options, error_stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
// and fish out hashpath
|
||||||
|
const auto entry = temp_options.get_entry(OPTION_HASHPATH);
|
||||||
|
if (entry)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
options.set_value(OPTION_HASHPATH, entry->value(), entry->priority());
|
||||||
|
}
|
||||||
|
catch (options_exception &)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
64
src/icludes/frontend/mame/mameopts.h
Normal file
64
src/icludes/frontend/mame/mameopts.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
mameopts.h
|
||||||
|
|
||||||
|
Options file and command line management.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_MAMEOPTS_H
|
||||||
|
#define MAME_FRONTEND_MAMEOPTS_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "emuopts.h"
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// CONSTANTS
|
||||||
|
//**************************************************************************
|
||||||
|
#undef OPTION_PRIORITY_CMDLINE
|
||||||
|
|
||||||
|
// option priorities
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
// command-line options are HIGH priority
|
||||||
|
OPTION_PRIORITY_SUBCMD = OPTION_PRIORITY_HIGH,
|
||||||
|
OPTION_PRIORITY_CMDLINE,
|
||||||
|
|
||||||
|
// INI-based options are NORMAL priority, in increasing order:
|
||||||
|
OPTION_PRIORITY_MAME_INI = OPTION_PRIORITY_NORMAL + 1,
|
||||||
|
OPTION_PRIORITY_DEBUG_INI,
|
||||||
|
OPTION_PRIORITY_ORIENTATION_INI,
|
||||||
|
OPTION_PRIORITY_SYSTYPE_INI,
|
||||||
|
OPTION_PRIORITY_SCREEN_INI,
|
||||||
|
OPTION_PRIORITY_SOURCE_INI,
|
||||||
|
OPTION_PRIORITY_GPARENT_INI,
|
||||||
|
OPTION_PRIORITY_PARENT_INI,
|
||||||
|
OPTION_PRIORITY_DRIVER_INI,
|
||||||
|
OPTION_PRIORITY_INI,
|
||||||
|
};
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// forward references
|
||||||
|
class game_driver;
|
||||||
|
class software_part;
|
||||||
|
|
||||||
|
class mame_options
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// parsing wrappers
|
||||||
|
static void parse_standard_inis(emu_options &options, std::ostream &error_stream, const game_driver *driver = nullptr);
|
||||||
|
static const game_driver *system(const emu_options &options);
|
||||||
|
static void populate_hashpath_from_args_and_inis(emu_options &options, const std::vector<std::string> &args);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// INI parsing helper
|
||||||
|
static void parse_one_ini(emu_options &options, const char *basename, int priority, std::ostream *error_stream = nullptr);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_MAMEOPTS_H
|
436
src/icludes/frontend/mame/media_ident.cpp
Normal file
436
src/icludes/frontend/mame/media_ident.cpp
Normal file
@ -0,0 +1,436 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
media_ident.c
|
||||||
|
|
||||||
|
Media identify.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "media_ident.h"
|
||||||
|
#include "softlist_dev.h"
|
||||||
|
|
||||||
|
#include "jedparse.h"
|
||||||
|
#include "unzip.h"
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// MEDIA IDENTIFIER
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
void media_identifier::file_info::match(
|
||||||
|
device_t const &device,
|
||||||
|
romload::file const &rom,
|
||||||
|
util::hash_collection const &hashes)
|
||||||
|
{
|
||||||
|
if (hashes == m_hashes)
|
||||||
|
{
|
||||||
|
m_matches.emplace_back(
|
||||||
|
device.shortname(),
|
||||||
|
device.name(),
|
||||||
|
rom.get_name(),
|
||||||
|
hashes.flag(util::hash_collection::FLAG_BAD_DUMP),
|
||||||
|
device.owner());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void media_identifier::file_info::match(
|
||||||
|
std::string const &list,
|
||||||
|
software_info const &software,
|
||||||
|
rom_entry const &rom,
|
||||||
|
util::hash_collection const &hashes)
|
||||||
|
{
|
||||||
|
if (hashes == m_hashes)
|
||||||
|
{
|
||||||
|
m_matches.emplace_back(
|
||||||
|
util::string_format("%s:%s", list, software.shortname()),
|
||||||
|
std::string(software.longname()),
|
||||||
|
std::string(rom.name()),
|
||||||
|
hashes.flag(util::hash_collection::FLAG_BAD_DUMP),
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// media_identifier - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
media_identifier::media_identifier(emu_options &options)
|
||||||
|
: m_drivlist(options)
|
||||||
|
, m_total(0)
|
||||||
|
, m_matches(0)
|
||||||
|
, m_nonroms(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// identify - identify a directory, ZIP file,
|
||||||
|
// or raw file
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::identify(const char *filename)
|
||||||
|
{
|
||||||
|
std::vector<file_info> info;
|
||||||
|
collect_files(info, filename);
|
||||||
|
match_hashes(info);
|
||||||
|
print_results(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// identify_file - identify a file
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::identify_file(const char *name)
|
||||||
|
{
|
||||||
|
std::vector<file_info> info;
|
||||||
|
digest_file(info, name);
|
||||||
|
match_hashes(info);
|
||||||
|
print_results(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// identify_data - identify a buffer full of
|
||||||
|
// data; if it comes from a .JED file, parse the
|
||||||
|
// fusemap into raw data first
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::identify_data(const char *name, const uint8_t *data, std::size_t length)
|
||||||
|
{
|
||||||
|
assert(data != nullptr && length != 0);
|
||||||
|
|
||||||
|
std::vector<file_info> info;
|
||||||
|
digest_data(info, name, data, length);
|
||||||
|
match_hashes(info);
|
||||||
|
print_results(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// collect_files - pre-process files for
|
||||||
|
// identification
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::collect_files(std::vector<file_info> &info, char const *path)
|
||||||
|
{
|
||||||
|
// first try to open as a directory
|
||||||
|
osd::directory::ptr const directory = osd::directory::open(path);
|
||||||
|
if (directory)
|
||||||
|
{
|
||||||
|
// iterate over all files in the directory
|
||||||
|
for (osd::directory::entry const *entry = directory->read(); entry; entry = directory->read())
|
||||||
|
{
|
||||||
|
if (entry->type == osd::directory::entry::entry_type::FILE)
|
||||||
|
{
|
||||||
|
std::string const curfile = std::string(path).append(PATH_SEPARATOR).append(entry->name);
|
||||||
|
collect_files(info, curfile.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (core_filename_ends_with(path, ".7z") || core_filename_ends_with(path, ".zip"))
|
||||||
|
{
|
||||||
|
// first attempt to examine it as a valid zip/7z file
|
||||||
|
util::archive_file::ptr archive;
|
||||||
|
std::error_condition err;
|
||||||
|
if (core_filename_ends_with(path, ".7z"))
|
||||||
|
err = util::archive_file::open_7z(path, archive);
|
||||||
|
else
|
||||||
|
err = util::archive_file::open_zip(path, archive);
|
||||||
|
|
||||||
|
if (!err && archive)
|
||||||
|
{
|
||||||
|
std::vector<std::uint8_t> data;
|
||||||
|
|
||||||
|
// loop over entries in the .7z, skipping empty files and directories
|
||||||
|
for (int i = archive->first_file(); i >= 0; i = archive->next_file())
|
||||||
|
{
|
||||||
|
std::uint64_t const length(archive->current_uncompressed_length());
|
||||||
|
if (!archive->current_is_directory() && length)
|
||||||
|
{
|
||||||
|
std::string const curfile = std::string(path).append(PATH_SEPARATOR).append(archive->current_name());
|
||||||
|
if (std::uint32_t(length) == length)
|
||||||
|
{
|
||||||
|
// decompress data into RAM and identify it
|
||||||
|
try
|
||||||
|
{
|
||||||
|
data.resize(std::size_t(length));
|
||||||
|
err = archive->decompress(&data[0], std::uint32_t(length));
|
||||||
|
if (!err)
|
||||||
|
digest_data(info, curfile.c_str(), &data[0], length);
|
||||||
|
else
|
||||||
|
osd_printf_error("%s: error decompressing file (%s:%d %s)\n", curfile, err.category().name(), err.value(), err.message());
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// resizing the buffer could cause a bad_alloc if archive contains large files
|
||||||
|
osd_printf_error("%s: error decompressing file\n", curfile);
|
||||||
|
}
|
||||||
|
data.clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
osd_printf_error("%s: file too large to decompress into memory\n", curfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
osd_printf_error("%s: error opening archive\n", path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear out any cached files
|
||||||
|
util::archive_file::cache_clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// otherwise, identify as a raw file
|
||||||
|
digest_file(info, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// digest_file - calculate hashes for a single
|
||||||
|
// file
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::digest_file(std::vector<file_info> &info, char const *path)
|
||||||
|
{
|
||||||
|
// CHD files need to be parsed and their hashes extracted from the header
|
||||||
|
if (core_filename_ends_with(path, ".chd"))
|
||||||
|
{
|
||||||
|
// attempt to open as a CHD; fail if not
|
||||||
|
chd_file chd;
|
||||||
|
std::error_condition const err = chd.open(path);
|
||||||
|
m_total++;
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
osd_printf_info("%-20s NOT A CHD\n", core_filename_extract_base(path));
|
||||||
|
m_nonroms++;
|
||||||
|
}
|
||||||
|
else if (!chd.compressed())
|
||||||
|
{
|
||||||
|
osd_printf_info("%-20s is a writeable CHD\n", core_filename_extract_base(path));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// otherwise, get the hash collection for this CHD
|
||||||
|
util::hash_collection hashes;
|
||||||
|
if (chd.sha1() != util::sha1_t::null)
|
||||||
|
hashes.add_sha1(chd.sha1());
|
||||||
|
info.emplace_back(path, chd.logical_bytes(), std::move(hashes), file_flavour::CHD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if this is a '.jed' file, process it into raw bits first
|
||||||
|
if (core_filename_ends_with(path, ".jed"))
|
||||||
|
{
|
||||||
|
// load the file and process if it opens and has a valid length
|
||||||
|
util::core_file::ptr file;
|
||||||
|
if (!util::core_file::open(path, OPEN_FLAG_READ, file))
|
||||||
|
{
|
||||||
|
jed_data jed;
|
||||||
|
if (JEDERR_NONE == jed_parse(*file, &jed))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// now determine the new data length and allocate temporary memory for it
|
||||||
|
std::vector<uint8_t> tempjed(jedbin_output(&jed, nullptr, 0));
|
||||||
|
jedbin_output(&jed, &tempjed[0], tempjed.size());
|
||||||
|
util::hash_collection hashes;
|
||||||
|
hashes.compute(&tempjed[0], tempjed.size(), util::hash_collection::HASH_TYPES_CRC_SHA1);
|
||||||
|
info.emplace_back(path, tempjed.size(), std::move(hashes), file_flavour::JED);
|
||||||
|
m_total++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// load the file and process if it opens and has a valid length
|
||||||
|
util::core_file::ptr file;
|
||||||
|
if (util::core_file::open(path, OPEN_FLAG_READ, file) || !file)
|
||||||
|
{
|
||||||
|
osd_printf_error("%s: error opening file\n", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::uint64_t length;
|
||||||
|
if (file->length(length))
|
||||||
|
{
|
||||||
|
osd_printf_error("%s: error getting file length\n", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
util::hash_collection hashes;
|
||||||
|
hashes.begin(util::hash_collection::HASH_TYPES_CRC_SHA1);
|
||||||
|
std::uint8_t buf[1024];
|
||||||
|
for (std::uint64_t remaining = length; remaining; )
|
||||||
|
{
|
||||||
|
std::size_t const block = std::min<std::uint64_t>(remaining, sizeof(buf));
|
||||||
|
std::size_t actual;
|
||||||
|
if (file->read(buf, block, actual) || !actual)
|
||||||
|
{
|
||||||
|
osd_printf_error("%s: error reading file\n", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
remaining -= actual;
|
||||||
|
hashes.buffer(buf, actual);
|
||||||
|
}
|
||||||
|
hashes.end();
|
||||||
|
info.emplace_back(path, length, std::move(hashes), file_flavour::RAW);
|
||||||
|
m_total++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// digest_data - calculate hashes for data in
|
||||||
|
// memory
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::digest_data(std::vector<file_info> &info, char const *name, void const *data, std::uint64_t length)
|
||||||
|
{
|
||||||
|
util::hash_collection hashes;
|
||||||
|
|
||||||
|
// if this is a '.jed' file, process it into raw bits first
|
||||||
|
if (core_filename_ends_with(name, ".jed"))
|
||||||
|
{
|
||||||
|
jed_data jed;
|
||||||
|
if (JEDERR_NONE == jed_parse(*util::ram_read(data, length), &jed))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// now determine the new data length and allocate temporary memory for it
|
||||||
|
std::vector<uint8_t> tempjed(jedbin_output(&jed, nullptr, 0));
|
||||||
|
jedbin_output(&jed, &tempjed[0], tempjed.size());
|
||||||
|
hashes.compute(&tempjed[0], tempjed.size(), util::hash_collection::HASH_TYPES_CRC_SHA1);
|
||||||
|
info.emplace_back(name, tempjed.size(), std::move(hashes), file_flavour::JED);
|
||||||
|
m_total++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hashes.compute(reinterpret_cast<std::uint8_t const *>(data), length, util::hash_collection::HASH_TYPES_CRC_SHA1);
|
||||||
|
info.emplace_back(name, length, std::move(hashes), file_flavour::RAW);
|
||||||
|
m_total++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// match_hashes - find known dumps that mach
|
||||||
|
// collected hashes
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::match_hashes(std::vector<file_info> &info)
|
||||||
|
{
|
||||||
|
if (info.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto match_device =
|
||||||
|
[&info, listnames = std::unordered_set<std::string>()] (device_t &device) mutable
|
||||||
|
{
|
||||||
|
// iterate over regions and files within the region
|
||||||
|
for (romload::region const ®ion : romload::entries(device.rom_region()).get_regions())
|
||||||
|
{
|
||||||
|
for (romload::file const &rom : region.get_files())
|
||||||
|
{
|
||||||
|
util::hash_collection const romhashes(rom.get_hashdata());
|
||||||
|
if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
|
||||||
|
{
|
||||||
|
for (file_info &file : info)
|
||||||
|
file.match(device, rom, romhashes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// next iterate over softlists
|
||||||
|
for (software_list_device &swlistdev : software_list_device_enumerator(device))
|
||||||
|
{
|
||||||
|
if (!listnames.insert(swlistdev.list_name()).second)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (software_info const &swinfo : swlistdev.get_info())
|
||||||
|
{
|
||||||
|
for (software_part const &part : swinfo.parts())
|
||||||
|
{
|
||||||
|
for (rom_entry const *region = part.romdata().data(); region; region = rom_next_region(region))
|
||||||
|
{
|
||||||
|
for (rom_entry const *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
|
||||||
|
{
|
||||||
|
util::hash_collection romhashes(rom->hashdata());
|
||||||
|
if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
|
||||||
|
{
|
||||||
|
for (file_info &file : info)
|
||||||
|
file.match(swlistdev.list_name(), swinfo, *rom, romhashes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// iterate over drivers
|
||||||
|
m_drivlist.reset();
|
||||||
|
while (m_drivlist.next())
|
||||||
|
match_device(m_drivlist.config()->root_device());
|
||||||
|
|
||||||
|
// iterator over registered device types
|
||||||
|
machine_config config(GAME_NAME(___empty), m_drivlist.options());
|
||||||
|
machine_config::token const tok(config.begin_configuration(config.root_device()));
|
||||||
|
for (device_type type : registered_device_types)
|
||||||
|
{
|
||||||
|
match_device(*config.device_add("_tmp", type, 0));
|
||||||
|
config.device_remove("_tmp");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// print_results - print info on files that were
|
||||||
|
// found to match known dumps
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void media_identifier::print_results(std::vector<file_info> const &info)
|
||||||
|
{
|
||||||
|
for (file_info const &file : info)
|
||||||
|
{
|
||||||
|
osd_printf_info("%-20s ", core_filename_extract_base(file.name()));
|
||||||
|
if (file.matches().empty())
|
||||||
|
{
|
||||||
|
osd_printf_info("NO MATCH\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool first = true;
|
||||||
|
m_matches++;
|
||||||
|
for (match_data const &match : file.matches())
|
||||||
|
{
|
||||||
|
if (!first)
|
||||||
|
osd_printf_info("%-20s ", "");
|
||||||
|
first = false;
|
||||||
|
osd_printf_info(
|
||||||
|
"= %s%-20s %-10s %s%s\n",
|
||||||
|
match.bad() ? "(BAD) " : "",
|
||||||
|
match.romname().c_str(),
|
||||||
|
match.shortname().c_str(),
|
||||||
|
match.fullname().c_str(),
|
||||||
|
match.device() ? " (device)" : "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
132
src/icludes/frontend/mame/media_ident.h
Normal file
132
src/icludes/frontend/mame/media_ident.h
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
media_ident.h
|
||||||
|
|
||||||
|
Media identify.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_MEDIA_IDENT_H
|
||||||
|
#define MAME_FRONTEND_MEDIA_IDENT_H
|
||||||
|
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "romload.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
// media_identifier class identifies media by hash via a search in
|
||||||
|
// the driver database
|
||||||
|
class media_identifier
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
media_identifier(emu_options &options);
|
||||||
|
|
||||||
|
// getters
|
||||||
|
unsigned total() const { return m_total; }
|
||||||
|
unsigned matches() const { return m_matches; }
|
||||||
|
unsigned nonroms() const { return m_nonroms; }
|
||||||
|
|
||||||
|
// operations
|
||||||
|
void reset() { m_total = m_matches = m_nonroms = 0; }
|
||||||
|
void identify(const char *name);
|
||||||
|
void identify_file(const char *name);
|
||||||
|
void identify_data(const char *name, const uint8_t *data, std::size_t length);
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum class file_flavour
|
||||||
|
{
|
||||||
|
RAW,
|
||||||
|
JED,
|
||||||
|
CHD
|
||||||
|
};
|
||||||
|
|
||||||
|
class match_data
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
match_data(
|
||||||
|
std::string &&shortname,
|
||||||
|
std::string &&fullname,
|
||||||
|
std::string &&romname,
|
||||||
|
bool bad,
|
||||||
|
bool device)
|
||||||
|
: m_shortname(std::move(shortname))
|
||||||
|
, m_fullname(std::move(fullname))
|
||||||
|
, m_romname(std::move(romname))
|
||||||
|
, m_bad(bad)
|
||||||
|
, m_device(device)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
match_data(match_data const &) = default;
|
||||||
|
match_data(match_data &&) = default;
|
||||||
|
match_data &operator=(match_data const &) = default;
|
||||||
|
match_data &operator=(match_data &&) = default;
|
||||||
|
|
||||||
|
std::string const &shortname() const { return m_shortname; }
|
||||||
|
std::string const &fullname() const { return m_fullname; }
|
||||||
|
std::string const &romname() const { return m_romname; }
|
||||||
|
bool bad() const { return m_bad; }
|
||||||
|
bool device() const { return m_device; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string m_shortname;
|
||||||
|
std::string m_fullname;
|
||||||
|
std::string m_romname;
|
||||||
|
bool m_bad;
|
||||||
|
bool m_device;
|
||||||
|
};
|
||||||
|
|
||||||
|
class file_info
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
file_info(
|
||||||
|
std::string &&name,
|
||||||
|
std::uint64_t length,
|
||||||
|
util::hash_collection &&hashes,
|
||||||
|
file_flavour flavour)
|
||||||
|
: m_name(std::move(name))
|
||||||
|
, m_length(length)
|
||||||
|
, m_hashes(std::move(hashes))
|
||||||
|
, m_flavour(flavour)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
file_info(file_info const &) = default;
|
||||||
|
file_info(file_info &&) = default;
|
||||||
|
file_info &operator=(file_info const &) = default;
|
||||||
|
file_info &operator=(file_info &&) = default;
|
||||||
|
|
||||||
|
std::string const &name() const { return m_name; }
|
||||||
|
std::uint64_t length() const { return m_length; }
|
||||||
|
util::hash_collection const &hashes() const { return m_hashes; }
|
||||||
|
file_flavour flavour() const { return m_flavour; }
|
||||||
|
std::vector<match_data> const &matches() const { return m_matches; }
|
||||||
|
|
||||||
|
void match(device_t const &device, romload::file const &rom, util::hash_collection const &hashes);
|
||||||
|
void match(std::string const &list, software_info const &software, rom_entry const &rom, util::hash_collection const &hashes);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string m_name;
|
||||||
|
std::uint64_t m_length;
|
||||||
|
util::hash_collection m_hashes;
|
||||||
|
file_flavour m_flavour;
|
||||||
|
std::vector<match_data> m_matches;
|
||||||
|
};
|
||||||
|
|
||||||
|
void collect_files(std::vector<file_info> &info, char const *path);
|
||||||
|
void digest_file(std::vector<file_info> &info, char const *path);
|
||||||
|
void digest_data(std::vector<file_info> &info, char const *name, void const *data, std::uint64_t length);
|
||||||
|
void match_hashes(std::vector<file_info> &info);
|
||||||
|
void print_results(std::vector<file_info> const &info);
|
||||||
|
|
||||||
|
driver_enumerator m_drivlist;
|
||||||
|
unsigned m_total;
|
||||||
|
unsigned m_matches;
|
||||||
|
unsigned m_nonroms;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MAME_FRONTEND_MEDIA_IDENT_H */
|
180
src/icludes/frontend/mame/pluginopts.cpp
Normal file
180
src/icludes/frontend/mame/pluginopts.cpp
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
pluginopts.cpp
|
||||||
|
|
||||||
|
Plugin options manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "pluginopts.h"
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
|
#include <rapidjson/document.h>
|
||||||
|
#include <rapidjson/error/en.h>
|
||||||
|
#include <rapidjson/istreamwrapper.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// PLUGIN OPTIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// plugin_options - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
plugin_options::plugin_options()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// scan_directory
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void plugin_options::scan_directory(const std::string &path, bool recursive)
|
||||||
|
{
|
||||||
|
// first try to open as a directory
|
||||||
|
osd::directory::ptr directory = osd::directory::open(path);
|
||||||
|
if (directory)
|
||||||
|
{
|
||||||
|
// iterate over all files in the directory
|
||||||
|
for (const osd::directory::entry *entry = directory->read(); entry != nullptr; entry = directory->read())
|
||||||
|
{
|
||||||
|
if (entry->type == osd::directory::entry::entry_type::FILE && !strcmp(entry->name, "plugin.json"))
|
||||||
|
{
|
||||||
|
std::string curfile = std::string(path).append(PATH_SEPARATOR).append(entry->name);
|
||||||
|
load_plugin(curfile);
|
||||||
|
}
|
||||||
|
else if (entry->type == osd::directory::entry::entry_type::DIR)
|
||||||
|
{
|
||||||
|
if (recursive && strcmp(entry->name, ".") && strcmp(entry->name, ".."))
|
||||||
|
scan_directory(path + PATH_SEPARATOR + entry->name, recursive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// load_plugin
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
bool plugin_options::load_plugin(const std::string &path)
|
||||||
|
{
|
||||||
|
std::ifstream ifs(path);
|
||||||
|
rapidjson::IStreamWrapper isw(ifs);
|
||||||
|
rapidjson::Document document;
|
||||||
|
document.ParseStream<0>(isw);
|
||||||
|
|
||||||
|
if (document.HasParseError())
|
||||||
|
{
|
||||||
|
const std::string error(GetParseError_En(document.GetParseError()));
|
||||||
|
osd_printf_error("Unable to parse plugin definition file %s. Errors returned:\n%s", path, error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!document["plugin"].IsObject())
|
||||||
|
{
|
||||||
|
osd_printf_error("Bad plugin definition file %s:\n", path);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t last_path_sep = path.find_last_of(PATH_SEPARATOR[0]);
|
||||||
|
std::string dir = last_path_sep != std::string::npos
|
||||||
|
? path.substr(0, last_path_sep)
|
||||||
|
: ".";
|
||||||
|
|
||||||
|
plugin p;
|
||||||
|
p.m_name = document["plugin"]["name"].GetString();
|
||||||
|
p.m_description = document["plugin"]["description"].GetString();
|
||||||
|
p.m_type = document["plugin"]["type"].GetString();
|
||||||
|
p.m_directory = std::move(dir);
|
||||||
|
p.m_start = false;
|
||||||
|
if (document["plugin"].HasMember("start") && (std::string(document["plugin"]["start"].GetString()) == "true"))
|
||||||
|
p.m_start = true;
|
||||||
|
|
||||||
|
m_plugins.push_back(std::move(p));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// find
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
plugin_options::plugin *plugin_options::find(const std::string &name)
|
||||||
|
{
|
||||||
|
auto iter = std::find_if(
|
||||||
|
m_plugins.begin(),
|
||||||
|
m_plugins.end(),
|
||||||
|
[&name](const plugin &p) { return name == p.m_name; });
|
||||||
|
|
||||||
|
return iter != m_plugins.end()
|
||||||
|
? &*iter
|
||||||
|
: nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// create_core_options
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
static core_options create_core_options(const plugin_options &plugin_opts)
|
||||||
|
{
|
||||||
|
// we're sort of abusing core_options to just get INI file parsing, so we'll build a
|
||||||
|
// core_options structure for the sole purpose of parsing an INI file, and then reflect
|
||||||
|
// the data back
|
||||||
|
static const options_entry s_option_entries[] =
|
||||||
|
{
|
||||||
|
{ nullptr, nullptr, OPTION_HEADER, "PLUGINS OPTIONS" },
|
||||||
|
{ nullptr }
|
||||||
|
};
|
||||||
|
|
||||||
|
core_options opts;
|
||||||
|
opts.add_entries(s_option_entries);
|
||||||
|
|
||||||
|
// create an entry for each option
|
||||||
|
for (const plugin_options::plugin &p : plugin_opts.plugins())
|
||||||
|
{
|
||||||
|
opts.add_entry(
|
||||||
|
{ p.m_name },
|
||||||
|
nullptr,
|
||||||
|
core_options::option_type::BOOLEAN,
|
||||||
|
p.m_start ? "1" : "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
return opts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// parse_ini_file
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void plugin_options::parse_ini_file(util::core_file &inifile)
|
||||||
|
{
|
||||||
|
core_options opts = create_core_options(*this);
|
||||||
|
|
||||||
|
// parse the INI file
|
||||||
|
opts.parse_ini_file(inifile, OPTION_PRIORITY_NORMAL, true, true);
|
||||||
|
|
||||||
|
// and reflect these options back
|
||||||
|
for (plugin &p : m_plugins)
|
||||||
|
p.m_start = opts.bool_value(p.m_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// output_ini
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
std::string plugin_options::output_ini() const
|
||||||
|
{
|
||||||
|
core_options opts = create_core_options(*this);
|
||||||
|
return opts.output_ini();
|
||||||
|
}
|
53
src/icludes/frontend/mame/pluginopts.h
Normal file
53
src/icludes/frontend/mame/pluginopts.h
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
pluginopts.cpp
|
||||||
|
|
||||||
|
Plugin options manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_PLUGINOPTS_H
|
||||||
|
#define MAME_FRONTEND_PLUGINOPTS_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> plugin_options
|
||||||
|
|
||||||
|
class plugin_options
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct plugin
|
||||||
|
{
|
||||||
|
std::string m_name;
|
||||||
|
std::string m_description;
|
||||||
|
std::string m_type;
|
||||||
|
std::string m_directory;
|
||||||
|
bool m_start;
|
||||||
|
};
|
||||||
|
|
||||||
|
plugin_options();
|
||||||
|
|
||||||
|
// accessors
|
||||||
|
std::list<plugin> &plugins() { return m_plugins; }
|
||||||
|
const std::list<plugin> &plugins() const { return m_plugins; }
|
||||||
|
|
||||||
|
// methods
|
||||||
|
void scan_directory(const std::string &path, bool recursive);
|
||||||
|
bool load_plugin(const std::string &path);
|
||||||
|
plugin *find(const std::string &name);
|
||||||
|
|
||||||
|
// INI functionality
|
||||||
|
void parse_ini_file(util::core_file &inifile);
|
||||||
|
std::string output_ini() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::list<plugin> m_plugins;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_PLUGINOPTS_H
|
123
src/icludes/frontend/mame/ui/about.cpp
Normal file
123
src/icludes/frontend/mame/ui/about.cpp
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/about.cpp
|
||||||
|
|
||||||
|
About box
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/about.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "mame.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
#include "copying.ipp"
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
ABOUT BOX
|
||||||
|
**************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_about::menu_about(mame_ui_manager &mui, render_container &container)
|
||||||
|
: menu_textbox(mui, container)
|
||||||
|
, m_header{
|
||||||
|
util::string_format(
|
||||||
|
#ifdef MAME_DEBUG
|
||||||
|
_("about-header", "%1$s %2$s (%3$s%4$sP%5$s, debug)"),
|
||||||
|
#else
|
||||||
|
_("about-header", "%1$s %2$s (%3$s%4$sP%5$s)"),
|
||||||
|
#endif
|
||||||
|
emulator_info::get_appname(),
|
||||||
|
bare_build_version,
|
||||||
|
(sizeof(int) == sizeof(void *)) ? "I" : "",
|
||||||
|
(sizeof(long) == sizeof(void *)) ? "L" : (sizeof(long long) == sizeof(void *)) ? "LL" : "",
|
||||||
|
sizeof(void *) * 8),
|
||||||
|
util::string_format(_("about-header", "Revision: %1$s"), bare_vcs_revision) }
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_CUSTOM_NAV);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_about::~menu_about()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_about::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
// draw the title
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(m_header), std::end(m_header),
|
||||||
|
origx1, origx2, origy1 - top, origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate_text - populate the about box text
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_about::populate_text(std::optional<text_layout> &layout, float &width, int &lines)
|
||||||
|
{
|
||||||
|
if (!layout || (layout->width() != width))
|
||||||
|
{
|
||||||
|
rgb_t const color = ui().colors().text_color();
|
||||||
|
layout.emplace(ui().create_layout(container(), width));
|
||||||
|
for (char const *const *line = copying_text; *line; ++line)
|
||||||
|
{
|
||||||
|
layout->add_text(*line, color);
|
||||||
|
layout->add_text("\n", color);
|
||||||
|
}
|
||||||
|
lines = layout->lines();
|
||||||
|
}
|
||||||
|
width = layout->actual_width();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate - populates the about modal
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_about::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// make space for the title and revision
|
||||||
|
customtop = (ui().get_line_height() * m_header.size()) + (ui().box_tb_border() * 3.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle - manages inputs in the about modal
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_about::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (ev)
|
||||||
|
handle_key(ev->iptkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
45
src/icludes/frontend/mame/ui/about.h
Normal file
45
src/icludes/frontend/mame/ui/about.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/about.h
|
||||||
|
|
||||||
|
About box
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_ABOUT_H
|
||||||
|
#define MAME_FRONTEND_UI_ABOUT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/text.h"
|
||||||
|
#include "ui/textbox.h"
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_about : public menu_textbox
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_about(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_about() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
virtual void populate_text(std::optional<text_layout> &layout, float &width, int &lines) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::vector<std::string> const m_header;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_ABOUT_H
|
478
src/icludes/frontend/mame/ui/analogipt.cpp
Normal file
478
src/icludes/frontend/mame/ui/analogipt.cpp
Normal file
@ -0,0 +1,478 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Vas Crabb
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/analogipt.cpp
|
||||||
|
|
||||||
|
Analog inputs menu.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/analogipt.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iterator>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
inline menu_analog::item_data::item_data(ioport_field &f, int t) noexcept
|
||||||
|
: field(f)
|
||||||
|
, type(t)
|
||||||
|
, defvalue(
|
||||||
|
(ANALOG_ITEM_KEYSPEED == t) ? f.delta() :
|
||||||
|
(ANALOG_ITEM_CENTERSPEED == t) ? f.centerdelta() :
|
||||||
|
(ANALOG_ITEM_REVERSE == t) ? f.analog_reverse() :
|
||||||
|
(ANALOG_ITEM_SENSITIVITY == t) ? f.sensitivity() :
|
||||||
|
-1)
|
||||||
|
, min((ANALOG_ITEM_SENSITIVITY == t) ? 1 : 0)
|
||||||
|
, max((ANALOG_ITEM_REVERSE == t) ? 1 : std::max(defvalue * 4, 255))
|
||||||
|
, cur(-1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline menu_analog::field_data::field_data(ioport_field &f) noexcept
|
||||||
|
: field(f)
|
||||||
|
, range(f.maxval() - f.minval())
|
||||||
|
, neutral(float(f.analog_reverse() ? (f.maxval() - f.defvalue()) : (f.defvalue() - f.minval())) / range)
|
||||||
|
, origin((f.analog_wraps() && (f.defvalue() != f.minval()) && (f.defvalue() != f.maxval())) ? 0.0f : neutral)
|
||||||
|
, shift(0U)
|
||||||
|
, show_neutral((f.defvalue() != f.minval()) && (f.defvalue() != f.maxval()))
|
||||||
|
{
|
||||||
|
for (ioport_value m = f.mask(); m && !BIT(m, 0); m >>= 1, ++shift) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu_analog::menu_analog(mame_ui_manager &mui, render_container &container)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_item_data()
|
||||||
|
, m_field_data()
|
||||||
|
, m_prompt()
|
||||||
|
, m_visible_fields(0U)
|
||||||
|
, m_top_field(0)
|
||||||
|
, m_hide_menu(false)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu_analog::~menu_analog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_analog::custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2)
|
||||||
|
{
|
||||||
|
// work out how much space to use for field names
|
||||||
|
float const aspect(machine().render().ui_aspect(&container()));
|
||||||
|
float const extrawidth(0.4f + (((ui().box_lr_border() * 2.0f) + ui().get_line_height()) * aspect));
|
||||||
|
float const nameavail(1.0f - (ui().box_lr_border() * 2.0f * aspect) - extrawidth);
|
||||||
|
float namewidth(0.0f);
|
||||||
|
for (field_data &data : m_field_data)
|
||||||
|
namewidth = (std::min)((std::max)(ui().get_string_width(data.field.get().name()), namewidth), nameavail);
|
||||||
|
|
||||||
|
// make a box or two
|
||||||
|
rgb_t const fgcolor(ui().colors().text_color());
|
||||||
|
float const lineheight(ui().get_line_height());
|
||||||
|
float const border(ui().box_tb_border());
|
||||||
|
float const boxleft((1.0f - namewidth - extrawidth) / 2.0f);
|
||||||
|
float const boxright(boxleft + namewidth + extrawidth);
|
||||||
|
float boxtop;
|
||||||
|
float boxbottom;
|
||||||
|
float firstliney;
|
||||||
|
int visible_fields;
|
||||||
|
if (m_hide_menu)
|
||||||
|
{
|
||||||
|
if (m_prompt.empty())
|
||||||
|
m_prompt = util::string_format(_("Press %s to show menu"), ui().get_general_input_setting(IPT_UI_ON_SCREEN_DISPLAY));
|
||||||
|
draw_text_box(
|
||||||
|
&m_prompt, &m_prompt + 1,
|
||||||
|
boxleft, boxright, y - top, y - top + lineheight + (border * 2.0f),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
fgcolor, ui().colors().background_color(), 1.0f);
|
||||||
|
boxtop = y - top + lineheight + (border * 3.0f);
|
||||||
|
firstliney = y - top + lineheight + (border * 4.0f);
|
||||||
|
visible_fields = std::min<int>(m_field_data.size(), int((y2 + bottom - border - firstliney) / lineheight));
|
||||||
|
boxbottom = firstliney + (lineheight * visible_fields) + border;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
boxtop = y2 + border;
|
||||||
|
boxbottom = y2 + bottom;
|
||||||
|
firstliney = y2 + (border * 2.0f);
|
||||||
|
visible_fields = m_visible_fields;
|
||||||
|
}
|
||||||
|
ui().draw_outlined_box(container(), boxleft, boxtop, boxright, boxbottom, ui().colors().background_color());
|
||||||
|
|
||||||
|
// force the field being configured to be visible
|
||||||
|
ioport_field *const selfield(selectedref ? &reinterpret_cast<item_data *>(selectedref)->field.get() : nullptr);
|
||||||
|
if (!m_hide_menu && selfield)
|
||||||
|
{
|
||||||
|
auto const found(
|
||||||
|
std::find_if(
|
||||||
|
m_field_data.begin(),
|
||||||
|
m_field_data.end(),
|
||||||
|
[selfield] (field_data const &d) { return &d.field.get() == selfield; }));
|
||||||
|
if (m_field_data.end() != found)
|
||||||
|
{
|
||||||
|
auto const i(std::distance(m_field_data.begin(), found));
|
||||||
|
if (m_top_field > i)
|
||||||
|
m_top_field = i;
|
||||||
|
if ((m_top_field + visible_fields) <= i)
|
||||||
|
m_top_field = i - m_visible_fields + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (0 > m_top_field)
|
||||||
|
m_top_field = 0;
|
||||||
|
if ((m_top_field + visible_fields) > m_field_data.size())
|
||||||
|
m_top_field = m_field_data.size() - visible_fields;
|
||||||
|
|
||||||
|
// show live fields
|
||||||
|
namewidth += lineheight * aspect;
|
||||||
|
float const nameleft(boxleft + (ui().box_lr_border() * aspect));
|
||||||
|
float const indleft(nameleft + namewidth);
|
||||||
|
float const indright(indleft + 0.4f);
|
||||||
|
for (unsigned line = 0; visible_fields > line; ++line)
|
||||||
|
{
|
||||||
|
// draw arrows if scrolling is possible and menu is hidden
|
||||||
|
float const liney(firstliney + (lineheight * line));
|
||||||
|
if (m_hide_menu)
|
||||||
|
{
|
||||||
|
bool const uparrow(!line && m_top_field);
|
||||||
|
bool const downarrow(((visible_fields - 1) == line) && ((m_field_data.size() - 1) > (line + m_top_field)));
|
||||||
|
if (uparrow || downarrow)
|
||||||
|
{
|
||||||
|
float const arrowwidth = lineheight * aspect;
|
||||||
|
draw_arrow(
|
||||||
|
0.5f * (nameleft + indright - arrowwidth), liney + (0.25f * lineheight),
|
||||||
|
0.5f * (nameleft + indright + arrowwidth), liney + (0.75f * lineheight),
|
||||||
|
fgcolor, line ? (ROT0 ^ ORIENTATION_FLIP_Y) : ROT0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the field name, using the selected colour if it's being configured
|
||||||
|
field_data &data(m_field_data[line + m_top_field]);
|
||||||
|
bool const selected(&data.field.get() == selfield);
|
||||||
|
rgb_t const fieldcolor(selected ? ui().colors().selected_color() : fgcolor);
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
data.field.get().name(),
|
||||||
|
nameleft, liney, namewidth,
|
||||||
|
text_layout::text_justify::LEFT, text_layout::word_wrapping::NEVER,
|
||||||
|
mame_ui_manager::NORMAL, fieldcolor, ui().colors().text_bg_color());
|
||||||
|
|
||||||
|
ioport_value cur(0U);
|
||||||
|
data.field.get().live().analog->read(cur);
|
||||||
|
cur = (cur >> data.shift) - data.field.get().minval();
|
||||||
|
float fill(float(cur) / data.range);
|
||||||
|
if (data.field.get().analog_reverse())
|
||||||
|
fill = 1.0f - fill;
|
||||||
|
|
||||||
|
float const indtop(liney + (lineheight * 0.2f));
|
||||||
|
float const indbottom(liney + (lineheight * 0.8f));
|
||||||
|
if (data.origin > fill)
|
||||||
|
container().add_rect(indleft + (fill * 0.4f), indtop, indleft + (data.origin * 0.4f), indbottom, fgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
else
|
||||||
|
container().add_rect(indleft + (data.origin * 0.4f), indtop, indleft + (fill * 0.4f), indbottom, fgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
container().add_line(indleft, indtop, indright, indtop, UI_LINE_WIDTH, fgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
container().add_line(indright, indtop, indright, indbottom, UI_LINE_WIDTH, fgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
container().add_line(indright, indbottom, indleft, indbottom, UI_LINE_WIDTH, fgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
container().add_line(indleft, indbottom, indleft, indtop, UI_LINE_WIDTH, fgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
if (data.show_neutral)
|
||||||
|
container().add_line(indleft + (data.neutral * 0.4f), indtop, indleft + (data.neutral * 0.4f), indbottom, UI_LINE_WIDTH, fgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_analog::menu_activated()
|
||||||
|
{
|
||||||
|
// scripts could have changed something in the mean time
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_analog::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// handle events
|
||||||
|
if (ev)
|
||||||
|
{
|
||||||
|
if (IPT_UI_ON_SCREEN_DISPLAY == ev->iptkey)
|
||||||
|
{
|
||||||
|
m_hide_menu = !m_hide_menu;
|
||||||
|
set_process_flags(PROCESS_LR_REPEAT | (m_hide_menu ? (PROCESS_CUSTOM_NAV | PROCESS_CUSTOM_ONLY) : 0));
|
||||||
|
}
|
||||||
|
else if (m_hide_menu)
|
||||||
|
{
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
case IPT_UI_UP:
|
||||||
|
--m_top_field;
|
||||||
|
break;
|
||||||
|
case IPT_UI_DOWN:
|
||||||
|
++m_top_field;
|
||||||
|
break;
|
||||||
|
case IPT_UI_HOME:
|
||||||
|
m_top_field = 0;
|
||||||
|
break;
|
||||||
|
case IPT_UI_END:
|
||||||
|
m_top_field = m_field_data.size();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ev->itemref)
|
||||||
|
{
|
||||||
|
item_data &data(*reinterpret_cast<item_data *>(ev->itemref));
|
||||||
|
int newval(data.cur);
|
||||||
|
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
// if selected, reset to default value
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
case IPT_UI_CLEAR:
|
||||||
|
newval = data.defvalue;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// left decrements
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
newval -= machine().input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// right increments
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
newval += machine().input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// move to first item for previous device
|
||||||
|
case IPT_UI_PREV_GROUP:
|
||||||
|
{
|
||||||
|
auto current = std::distance(m_item_data.data(), &data);
|
||||||
|
device_t const *dev(&data.field.get().device());
|
||||||
|
bool found_break = false;
|
||||||
|
while (0 < current)
|
||||||
|
{
|
||||||
|
if (!found_break)
|
||||||
|
{
|
||||||
|
device_t const *prev(&m_item_data[--current].field.get().device());
|
||||||
|
if (prev != dev)
|
||||||
|
{
|
||||||
|
dev = prev;
|
||||||
|
found_break = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (&m_item_data[current - 1].field.get().device() != dev)
|
||||||
|
{
|
||||||
|
set_selection(&m_item_data[current]);
|
||||||
|
set_top_line(selected_index() - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--current;
|
||||||
|
}
|
||||||
|
if (found_break && !current)
|
||||||
|
{
|
||||||
|
set_selection(&m_item_data[current]);
|
||||||
|
set_top_line(selected_index() - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// move to first item for next device
|
||||||
|
case IPT_UI_NEXT_GROUP:
|
||||||
|
{
|
||||||
|
auto current = std::distance(m_item_data.data(), &data);
|
||||||
|
device_t const *const dev(&data.field.get().device());
|
||||||
|
while (m_item_data.size() > ++current)
|
||||||
|
{
|
||||||
|
if (&m_item_data[current].field.get().device() != dev)
|
||||||
|
{
|
||||||
|
set_selection(&m_item_data[current]);
|
||||||
|
set_top_line(selected_index() - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// clamp to range
|
||||||
|
newval = std::clamp(newval, data.min, data.max);
|
||||||
|
|
||||||
|
// if things changed, update
|
||||||
|
if (newval != data.cur)
|
||||||
|
{
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
|
||||||
|
// get the settings and set the new value
|
||||||
|
data.field.get().get_user_settings(settings);
|
||||||
|
switch (data.type)
|
||||||
|
{
|
||||||
|
case ANALOG_ITEM_KEYSPEED: settings.delta = newval; break;
|
||||||
|
case ANALOG_ITEM_CENTERSPEED: settings.centerdelta = newval; break;
|
||||||
|
case ANALOG_ITEM_REVERSE: settings.reverse = newval; break;
|
||||||
|
case ANALOG_ITEM_SENSITIVITY: settings.sensitivity = newval; break;
|
||||||
|
}
|
||||||
|
data.field.get().set_user_settings(settings);
|
||||||
|
data.cur = newval;
|
||||||
|
|
||||||
|
// update the menu item
|
||||||
|
ev->item->set_subtext(item_text(data.type, newval));
|
||||||
|
ev->item->set_flags((data.cur <= data.min) ? FLAG_RIGHT_ARROW : (data.cur >= data.max) ? FLAG_LEFT_ARROW : FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_analog::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// loop over input ports
|
||||||
|
if (m_item_data.empty())
|
||||||
|
find_fields();
|
||||||
|
|
||||||
|
device_t *prev_owner(nullptr);
|
||||||
|
ioport_field *field(nullptr);
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
|
||||||
|
// add the items
|
||||||
|
std::string text;
|
||||||
|
for (item_data &data : m_item_data)
|
||||||
|
{
|
||||||
|
// get the user settings
|
||||||
|
if (&data.field.get() != field)
|
||||||
|
{
|
||||||
|
field = &data.field.get();
|
||||||
|
field->get_user_settings(settings);
|
||||||
|
|
||||||
|
if (&field->device() != prev_owner)
|
||||||
|
{
|
||||||
|
prev_owner = &field->device();
|
||||||
|
if (prev_owner->owner())
|
||||||
|
item_append(string_format(_("%1$s [root%2$s]"), prev_owner->type().fullname(), prev_owner->tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
|
||||||
|
else
|
||||||
|
item_append(string_format(_("[root%1$s]"), prev_owner->tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// determine the properties of this item
|
||||||
|
switch (data.type)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ANALOG_ITEM_KEYSPEED:
|
||||||
|
text = string_format(_("%1$s Increment/Decrement Speed"), field->name());
|
||||||
|
data.cur = settings.delta;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ANALOG_ITEM_CENTERSPEED:
|
||||||
|
text = string_format(_("%1$s Auto-centering Speed"), field->name());
|
||||||
|
data.cur = settings.centerdelta;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ANALOG_ITEM_REVERSE:
|
||||||
|
text = string_format(_("%1$s Reverse"), field->name());
|
||||||
|
data.cur = settings.reverse;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ANALOG_ITEM_SENSITIVITY:
|
||||||
|
text = string_format(_("%1$s Sensitivity"), field->name());
|
||||||
|
data.cur = settings.sensitivity;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// append a menu item
|
||||||
|
item_append(
|
||||||
|
std::move(text),
|
||||||
|
item_text(data.type, data.cur),
|
||||||
|
(data.cur <= data.min) ? FLAG_RIGHT_ARROW : (data.cur >= data.max) ? FLAG_LEFT_ARROW : FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW,
|
||||||
|
&data);
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
// space for live display
|
||||||
|
custombottom = (ui().get_line_height() * m_visible_fields) + (ui().box_tb_border() * 3.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_analog::find_fields()
|
||||||
|
{
|
||||||
|
assert(m_field_data.empty());
|
||||||
|
|
||||||
|
// collect analog fields
|
||||||
|
for (auto &port : machine().ioport().ports())
|
||||||
|
{
|
||||||
|
for (ioport_field &field : port.second->fields())
|
||||||
|
{
|
||||||
|
if (field.is_analog() && field.enabled())
|
||||||
|
{
|
||||||
|
// based on the type, determine if we enable autocenter
|
||||||
|
bool use_autocenter = false;
|
||||||
|
switch (field.type())
|
||||||
|
{
|
||||||
|
case IPT_POSITIONAL:
|
||||||
|
case IPT_POSITIONAL_V:
|
||||||
|
use_autocenter = !field.analog_wraps();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_AD_STICK_X:
|
||||||
|
case IPT_AD_STICK_Y:
|
||||||
|
case IPT_AD_STICK_Z:
|
||||||
|
case IPT_PADDLE:
|
||||||
|
case IPT_PADDLE_V:
|
||||||
|
case IPT_PEDAL:
|
||||||
|
case IPT_PEDAL2:
|
||||||
|
case IPT_PEDAL3:
|
||||||
|
use_autocenter = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// iterate over types
|
||||||
|
for (int type = 0; type < ANALOG_ITEM_COUNT; type++)
|
||||||
|
{
|
||||||
|
if ((ANALOG_ITEM_CENTERSPEED != type) || use_autocenter)
|
||||||
|
m_item_data.emplace_back(field, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_field_data.emplace_back(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// restrict live display to 40% height plus borders
|
||||||
|
if ((ui().get_line_height() * m_field_data.size()) > 0.4f)
|
||||||
|
m_visible_fields = unsigned(0.4f / ui().get_line_height());
|
||||||
|
else
|
||||||
|
m_visible_fields = m_field_data.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string menu_analog::item_text(int type, int value)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ANALOG_ITEM_KEYSPEED:
|
||||||
|
return string_format("%d", value);
|
||||||
|
|
||||||
|
case ANALOG_ITEM_CENTERSPEED:
|
||||||
|
return string_format("%d", value);
|
||||||
|
|
||||||
|
case ANALOG_ITEM_REVERSE:
|
||||||
|
return value ? _("On") : _("Off");
|
||||||
|
|
||||||
|
case ANALOG_ITEM_SENSITIVITY:
|
||||||
|
return string_format("%d", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
86
src/icludes/frontend/mame/ui/analogipt.h
Normal file
86
src/icludes/frontend/mame/ui/analogipt.h
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/analogipt.h
|
||||||
|
|
||||||
|
Analog inputs menu.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_ANALOGIPT_H
|
||||||
|
#define MAME_FRONTEND_UI_ANALOGIPT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_analog : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_analog(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_analog() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
ANALOG_ITEM_KEYSPEED = 0,
|
||||||
|
ANALOG_ITEM_CENTERSPEED,
|
||||||
|
ANALOG_ITEM_REVERSE,
|
||||||
|
ANALOG_ITEM_SENSITIVITY,
|
||||||
|
ANALOG_ITEM_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
struct item_data
|
||||||
|
{
|
||||||
|
item_data(ioport_field &f, int t) noexcept;
|
||||||
|
|
||||||
|
std::reference_wrapper<ioport_field> field;
|
||||||
|
int type;
|
||||||
|
int defvalue;
|
||||||
|
int min, max;
|
||||||
|
int cur;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct field_data
|
||||||
|
{
|
||||||
|
field_data(ioport_field &f) noexcept;
|
||||||
|
|
||||||
|
std::reference_wrapper<ioport_field> field;
|
||||||
|
float range;
|
||||||
|
float neutral;
|
||||||
|
float origin;
|
||||||
|
u8 shift;
|
||||||
|
bool show_neutral;
|
||||||
|
};
|
||||||
|
|
||||||
|
using item_data_vector = std::vector<item_data>;
|
||||||
|
using field_data_vector = std::vector<field_data>;
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void find_fields();
|
||||||
|
|
||||||
|
static std::string item_text(int type, int value);
|
||||||
|
|
||||||
|
item_data_vector m_item_data;
|
||||||
|
field_data_vector m_field_data;
|
||||||
|
std::string m_prompt;
|
||||||
|
unsigned m_visible_fields;
|
||||||
|
int m_top_field;
|
||||||
|
bool m_hide_menu;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_ANALOGIPT_H
|
240
src/icludes/frontend/mame/ui/auditmenu.cpp
Normal file
240
src/icludes/frontend/mame/ui/auditmenu.cpp
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota, Vas Crabb
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/auditmenu.cpp
|
||||||
|
|
||||||
|
Internal UI user interface.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/auditmenu.h"
|
||||||
|
|
||||||
|
#include "ui/systemlist.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "audit.h"
|
||||||
|
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "uiinput.h"
|
||||||
|
|
||||||
|
#include "util/corestr.h"
|
||||||
|
|
||||||
|
#include <numeric>
|
||||||
|
#include <sstream>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
|
||||||
|
extern const char UI_VERSION_TAG[];
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
void *const ITEMREF_START_FULL = reinterpret_cast<void *>(std::uintptr_t(1));
|
||||||
|
void *const ITEMREF_START_FAST = reinterpret_cast<void *>(std::uintptr_t(2));
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
menu_audit::menu_audit(mame_ui_manager &mui, render_container &container)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_availablesorted(system_list::instance().sorted_list())
|
||||||
|
, m_unavailable(
|
||||||
|
std::accumulate(
|
||||||
|
m_availablesorted.begin(),
|
||||||
|
m_availablesorted.end(),
|
||||||
|
std::size_t(0),
|
||||||
|
[] (std::size_t n, ui_system_info const &info) { return n + (info.available ? 0 : 1); }))
|
||||||
|
, m_future()
|
||||||
|
, m_next(0)
|
||||||
|
, m_audited(0)
|
||||||
|
, m_current(nullptr)
|
||||||
|
, m_cancel(false)
|
||||||
|
, m_phase(phase::CONFIRMATION)
|
||||||
|
, m_fast(true)
|
||||||
|
{
|
||||||
|
std::string filename(emulator_info::get_configname());
|
||||||
|
filename += "_avail.ini";
|
||||||
|
m_prompt = util::string_format(_("Results will be saved to %1$s"), filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_audit::~menu_audit()
|
||||||
|
{
|
||||||
|
m_cancel.store(true);
|
||||||
|
for (auto &future : m_future)
|
||||||
|
{
|
||||||
|
if (future.valid())
|
||||||
|
future.wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_audit::custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2)
|
||||||
|
{
|
||||||
|
switch (m_phase)
|
||||||
|
{
|
||||||
|
case phase::CONFIRMATION:
|
||||||
|
if ((ITEMREF_START_FAST == selectedref) || (ITEMREF_START_FULL == selectedref))
|
||||||
|
{
|
||||||
|
draw_text_box(
|
||||||
|
&m_prompt, &m_prompt + 1,
|
||||||
|
x, x2, y2 + ui().box_tb_border(), y2 + bottom,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::NEVER, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case phase::AUDIT:
|
||||||
|
{
|
||||||
|
// there's a race here between the total audited being updated and the next driver pointer being loaded
|
||||||
|
// it doesn't matter because we redraw on every frame anyway so it sorts itself out very quickly
|
||||||
|
ui_system_info const *const system(m_current.load());
|
||||||
|
std::size_t const audited(m_audited.load());
|
||||||
|
std::size_t const total(m_fast ? m_unavailable : m_availablesorted.size());
|
||||||
|
std::ostringstream text;
|
||||||
|
util::stream_format(text,
|
||||||
|
_("Auditing media for machine %2$u of %3$u...\n%1$s"),
|
||||||
|
system ? std::string_view(system->description) : std::string_view(),
|
||||||
|
(std::min)(audited + 1, total),
|
||||||
|
total);
|
||||||
|
text << '\n' << m_prompt;
|
||||||
|
ui().draw_text_box(
|
||||||
|
container(),
|
||||||
|
std::move(text).str(),
|
||||||
|
text_layout::text_justify::CENTER,
|
||||||
|
0.5f, 0.5f,
|
||||||
|
ui().colors().background_color());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case phase::CANCELLATION:
|
||||||
|
ui().draw_text_box(
|
||||||
|
container(),
|
||||||
|
util::string_format(
|
||||||
|
_("Cancel audit?\n\nPress %1$s to cancel\nPress %2$s to continue"),
|
||||||
|
ui().get_general_input_setting(IPT_UI_SELECT),
|
||||||
|
ui().get_general_input_setting(IPT_UI_CANCEL)),
|
||||||
|
text_layout::text_justify::CENTER,
|
||||||
|
0.5f, 0.5f,
|
||||||
|
UI_RED_COLOR);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool menu_audit::custom_ui_cancel()
|
||||||
|
{
|
||||||
|
return m_phase != phase::CONFIRMATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_audit::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
if (m_unavailable && (m_availablesorted.size() != m_unavailable))
|
||||||
|
item_append(util::string_format(_("Audit media for %1$u machines marked unavailable"), m_unavailable), 0, ITEMREF_START_FAST);
|
||||||
|
item_append(util::string_format(_("Audit media for all %1$u machines"), m_availablesorted.size()), 0, ITEMREF_START_FULL);
|
||||||
|
item_append(menu_item_type::SEPARATOR, 0);
|
||||||
|
custombottom = (ui().get_line_height() * 1.0f) + (ui().box_tb_border() * 3.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_audit::handle(event const *ev)
|
||||||
|
{
|
||||||
|
switch (m_phase)
|
||||||
|
{
|
||||||
|
case phase::CONFIRMATION:
|
||||||
|
if (ev && (IPT_UI_SELECT == ev->iptkey))
|
||||||
|
{
|
||||||
|
if ((ITEMREF_START_FULL == ev->itemref) || (ITEMREF_START_FAST == ev->itemref))
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_CUSTOM_ONLY | PROCESS_NOINPUT);
|
||||||
|
m_phase = phase::AUDIT;
|
||||||
|
m_fast = ITEMREF_START_FAST == ev->itemref;
|
||||||
|
m_prompt = util::string_format(_("Press %1$s to cancel\n"), ui().get_general_input_setting(IPT_UI_CANCEL));
|
||||||
|
m_future.resize(std::thread::hardware_concurrency());
|
||||||
|
for (auto &future : m_future)
|
||||||
|
future = std::async(std::launch::async, [this] () { return do_audit(); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case phase::AUDIT:
|
||||||
|
case phase::CANCELLATION:
|
||||||
|
if ((m_next.load() >= m_availablesorted.size()) || m_cancel.load())
|
||||||
|
{
|
||||||
|
bool done(true);
|
||||||
|
for (auto &future : m_future)
|
||||||
|
done = future.get() && done;
|
||||||
|
m_future.clear();
|
||||||
|
if (done)
|
||||||
|
{
|
||||||
|
save_available_machines();
|
||||||
|
reset_parent(reset_options::SELECT_FIRST);
|
||||||
|
}
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
else if (machine().ui_input().pressed(IPT_UI_CANCEL))
|
||||||
|
{
|
||||||
|
if (phase::AUDIT == m_phase)
|
||||||
|
m_phase = phase::CANCELLATION;
|
||||||
|
else
|
||||||
|
m_phase = phase::AUDIT;
|
||||||
|
}
|
||||||
|
else if ((phase::CANCELLATION == m_phase) && machine().ui_input().pressed(IPT_UI_SELECT))
|
||||||
|
{
|
||||||
|
m_cancel.store(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool menu_audit::do_audit()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
std::size_t const i(m_next.fetch_add(1));
|
||||||
|
if (m_availablesorted.size() <= i)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
ui_system_info &info(m_availablesorted[i]);
|
||||||
|
if (!m_fast || !info.available)
|
||||||
|
{
|
||||||
|
if (m_cancel.load())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_current.store(&info);
|
||||||
|
driver_enumerator enumerator(machine().options(), info.driver->name);
|
||||||
|
enumerator.next();
|
||||||
|
media_auditor auditor(enumerator);
|
||||||
|
media_auditor::summary const summary(auditor.audit_media(AUDIT_VALIDATE_FAST));
|
||||||
|
info.available = (summary == media_auditor::CORRECT) || (summary == media_auditor::BEST_AVAILABLE) || (summary == media_auditor::NONE_NEEDED);
|
||||||
|
|
||||||
|
// if everything looks good, include the driver
|
||||||
|
info.available = (summary == media_auditor::CORRECT) || (summary == media_auditor::BEST_AVAILABLE) || (summary == media_auditor::NONE_NEEDED);
|
||||||
|
++m_audited;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_audit::save_available_machines()
|
||||||
|
{
|
||||||
|
// attempt to open the output file
|
||||||
|
emu_file file(ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||||
|
if (!file.open(std::string(emulator_info::get_configname()) + "_avail.ini"))
|
||||||
|
{
|
||||||
|
// generate header
|
||||||
|
file.printf("#\n%s%s\n#\n\n", UI_VERSION_TAG, emulator_info::get_bare_build_version());
|
||||||
|
|
||||||
|
// generate available list
|
||||||
|
for (ui_system_info const &info : m_availablesorted)
|
||||||
|
{
|
||||||
|
if (info.available)
|
||||||
|
file.printf("%s\n", info.driver->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
58
src/icludes/frontend/mame/ui/auditmenu.h
Normal file
58
src/icludes/frontend/mame/ui/auditmenu.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota, Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/auditmenu.h
|
||||||
|
|
||||||
|
Internal UI user interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_AUDITMENU_H
|
||||||
|
#define MAME_FRONTEND_UI_AUDITMENU_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
|
#include <future>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_audit : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_audit(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_audit() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual bool custom_ui_cancel() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum class phase { CONFIRMATION, AUDIT, CANCELLATION };
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
bool do_audit();
|
||||||
|
void save_available_machines();
|
||||||
|
|
||||||
|
std::string m_prompt;
|
||||||
|
std::vector<std::reference_wrapper<ui_system_info> > const &m_availablesorted;
|
||||||
|
std::size_t const m_unavailable;
|
||||||
|
std::vector<std::future<bool> > m_future;
|
||||||
|
std::atomic<std::size_t> m_next;
|
||||||
|
std::atomic<std::size_t> m_audited;
|
||||||
|
std::atomic<ui_system_info const *> m_current;
|
||||||
|
std::atomic<bool> m_cancel;
|
||||||
|
phase m_phase;
|
||||||
|
bool m_fast;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_AUDITMENU_H
|
146
src/icludes/frontend/mame/ui/barcode.cpp
Normal file
146
src/icludes/frontend/mame/ui/barcode.cpp
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Fabio Priuli
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/barcode.cpp
|
||||||
|
|
||||||
|
"Barcode Reader" control
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/barcode.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// itemrefs for key menu items
|
||||||
|
#define ITEMREF_NEW_BARCODE ((void *) 0x0001)
|
||||||
|
#define ITEMREF_ENTER_BARCODE ((void *) 0x0002)
|
||||||
|
#define ITEMREF_SELECT_READER ((void *) 0x0003)
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
|
||||||
|
BARCODE READER MENU
|
||||||
|
|
||||||
|
**************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_barcode_reader::menu_barcode_reader(mame_ui_manager &mui, render_container &container, barcode_reader_device *device)
|
||||||
|
: menu_device_control<barcode_reader_device>(mui, container, device)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_barcode_reader::~menu_barcode_reader()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate - populates the barcode input menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_barcode_reader::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
if (current_device())
|
||||||
|
{
|
||||||
|
std::string buffer;
|
||||||
|
const char *new_barcode;
|
||||||
|
|
||||||
|
// selected device
|
||||||
|
item_append(current_display_name(), current_display_flags(), ITEMREF_SELECT_READER);
|
||||||
|
|
||||||
|
// append the "New Barcode" item
|
||||||
|
if (get_selection_ref() == ITEMREF_NEW_BARCODE)
|
||||||
|
{
|
||||||
|
buffer.append(m_barcode_buffer);
|
||||||
|
new_barcode = buffer.c_str();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_barcode = m_barcode_buffer.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(_("New Barcode:"), new_barcode, 0, ITEMREF_NEW_BARCODE);
|
||||||
|
|
||||||
|
// finish up the menu
|
||||||
|
item_append(_("Enter Code"), 0, ITEMREF_ENTER_BARCODE);
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
customtop = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle - manages inputs in the barcode input menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_barcode_reader::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the event
|
||||||
|
if (ev)
|
||||||
|
{
|
||||||
|
// handle selections
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
if (ev->itemref == ITEMREF_SELECT_READER)
|
||||||
|
previous();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
if (ev->itemref == ITEMREF_SELECT_READER)
|
||||||
|
next();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
if (ev->itemref == ITEMREF_ENTER_BARCODE)
|
||||||
|
{
|
||||||
|
std::string tmp_file(m_barcode_buffer);
|
||||||
|
//printf("code %s\n", m_barcode_buffer);
|
||||||
|
if (!current_device()->is_valid(tmp_file.length()))
|
||||||
|
ui().popup_time(5, "%s", _("Barcode length invalid!"));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_device()->write_code(tmp_file.c_str(), tmp_file.length());
|
||||||
|
// if sending was successful, reset char buffer
|
||||||
|
m_barcode_buffer.clear();
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_CLEAR:
|
||||||
|
if (get_selection_ref() == ITEMREF_NEW_BARCODE)
|
||||||
|
{
|
||||||
|
m_barcode_buffer.clear();
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_SPECIAL:
|
||||||
|
if (get_selection_ref() == ITEMREF_NEW_BARCODE)
|
||||||
|
{
|
||||||
|
if (input_character(m_barcode_buffer, ev->unichar, uchar_is_digit))
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
35
src/icludes/frontend/mame/ui/barcode.h
Normal file
35
src/icludes/frontend/mame/ui/barcode.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Fabio Priuli
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/barcode.h
|
||||||
|
|
||||||
|
"Barcode Reader" control
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_BARCODE_H
|
||||||
|
#define MAME_FRONTEND_UI_BARCODE_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "machine/bcreader.h"
|
||||||
|
#include "ui/devctrl.h"
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_barcode_reader : public menu_device_control<barcode_reader_device> {
|
||||||
|
public:
|
||||||
|
menu_barcode_reader(mame_ui_manager &mui, render_container &container, barcode_reader_device *device);
|
||||||
|
virtual ~menu_barcode_reader() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::string m_barcode_buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_BARCODE_H
|
147
src/icludes/frontend/mame/ui/cheatopt.cpp
Normal file
147
src/icludes/frontend/mame/ui/cheatopt.cpp
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/cheatopt.cpp
|
||||||
|
|
||||||
|
Internal menu for the cheat interface.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/cheatopt.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "cheat.h"
|
||||||
|
#include "mame.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// itemrefs for key menu items
|
||||||
|
#define ITEMREF_CHEATS_RESET_ALL ((void *) 0x0001)
|
||||||
|
#define ITEMREF_CHEATS_RELOAD_ALL ((void *) 0x0002)
|
||||||
|
#define ITEMREF_CHEATS_FIRST_ITEM ((void *) 0x0003)
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_cheat - handle the cheat menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_cheat::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// handle events
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
// clear cheat comment on any movement or keypress
|
||||||
|
machine().popmessage();
|
||||||
|
|
||||||
|
if ((ev->itemref == ITEMREF_CHEATS_RESET_ALL || ev->itemref == ITEMREF_CHEATS_RELOAD_ALL) && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
// handle reset all + reset all cheats for reload all option
|
||||||
|
for (auto &curcheat : mame_machine_manager::instance()->cheat().entries())
|
||||||
|
if (curcheat->select_default_state())
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
else if (ev->itemref >= ITEMREF_CHEATS_FIRST_ITEM)
|
||||||
|
{
|
||||||
|
// handle individual cheats
|
||||||
|
cheat_entry *curcheat = reinterpret_cast<cheat_entry *>(ev->itemref);
|
||||||
|
const char *string;
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
// if selected, activate a oneshot
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
changed = curcheat->activate();
|
||||||
|
break;
|
||||||
|
|
||||||
|
// if cleared, reset to default value
|
||||||
|
case IPT_UI_CLEAR:
|
||||||
|
changed = curcheat->select_default_state();
|
||||||
|
break;
|
||||||
|
|
||||||
|
// left decrements
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
changed = curcheat->select_previous_state();
|
||||||
|
break;
|
||||||
|
|
||||||
|
// right increments
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
changed = curcheat->select_next_state();
|
||||||
|
break;
|
||||||
|
|
||||||
|
// bring up display comment if one exists
|
||||||
|
case IPT_UI_DISPLAY_COMMENT:
|
||||||
|
case IPT_UI_UP:
|
||||||
|
case IPT_UI_DOWN:
|
||||||
|
string = curcheat->comment();
|
||||||
|
if (string && *string)
|
||||||
|
machine().popmessage(_("Cheat Comment:\n%s"), string);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle reload all
|
||||||
|
if (ev->itemref == ITEMREF_CHEATS_RELOAD_ALL && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
// re-init cheat engine and thus reload cheats/cheats have already been turned off by here
|
||||||
|
mame_machine_manager::instance()->cheat().reload();
|
||||||
|
|
||||||
|
// display the reloaded cheats
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
machine().popmessage(_("All cheats reloaded"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// if things changed, update
|
||||||
|
if (changed)
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_cheat_populate - populate the cheat menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_cheat::menu_cheat(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_cheat::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
/* iterate over cheats */
|
||||||
|
std::string text;
|
||||||
|
std::string subtext;
|
||||||
|
|
||||||
|
// add cheats
|
||||||
|
if (!mame_machine_manager::instance()->cheat().entries().empty()) {
|
||||||
|
for (auto &curcheat : mame_machine_manager::instance()->cheat().entries())
|
||||||
|
{
|
||||||
|
uint32_t flags;
|
||||||
|
curcheat->menu_text(text, subtext, flags);
|
||||||
|
if (text == MENU_SEPARATOR_ITEM)
|
||||||
|
item_append(menu_item_type::SEPARATOR, flags);
|
||||||
|
else
|
||||||
|
item_append(text, subtext, flags, curcheat.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add a separator */
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
/* add a reset all option */
|
||||||
|
item_append(_("Reset All"), 0, (void *)ITEMREF_CHEATS_RESET_ALL);
|
||||||
|
|
||||||
|
/* add a reload all cheats option */
|
||||||
|
item_append(_("Reload All"), 0, (void *)ITEMREF_CHEATS_RELOAD_ALL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_cheat::~menu_cheat()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
33
src/icludes/frontend/mame/ui/cheatopt.h
Normal file
33
src/icludes/frontend/mame/ui/cheatopt.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/cheatopt.h
|
||||||
|
|
||||||
|
Internal menu for the cheat interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_CHEATOPT_H
|
||||||
|
#define MAME_FRONTEND_UI_CHEATOPT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_cheat : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_cheat(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_cheat() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_CHEATOPT_H
|
514
src/icludes/frontend/mame/ui/confswitch.cpp
Normal file
514
src/icludes/frontend/mame/ui/confswitch.cpp
Normal file
@ -0,0 +1,514 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Vas Crabb
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/confswitch.cpp
|
||||||
|
|
||||||
|
Configuration/DIP switches menu.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/confswitch.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
CONSTANTS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
// DIP switch rendering parameters in terms of line height
|
||||||
|
constexpr float DIP_SWITCH_HEIGHT = 1.6f;
|
||||||
|
constexpr float DIP_SWITCH_SPACING = DIP_SWITCH_HEIGHT / 5.0f;
|
||||||
|
constexpr float SINGLE_TOGGLE_SWITCH_FIELD_WIDTH = DIP_SWITCH_HEIGHT / 2.0f;
|
||||||
|
constexpr float SINGLE_TOGGLE_SWITCH_WIDTH = SINGLE_TOGGLE_SWITCH_FIELD_WIDTH * 0.8f;
|
||||||
|
// make the switch nub 80% of the width space and 1/2 of the switch height
|
||||||
|
constexpr float SINGLE_TOGGLE_SWITCH_HEIGHT = (DIP_SWITCH_HEIGHT / 2.0f) * 0.8f;
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_confswitch
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_confswitch::field_descriptor::field_descriptor(ioport_field &f) noexcept
|
||||||
|
: field(f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu_confswitch::switch_group_descriptor::switch_group_descriptor(ioport_field const &f, ioport_diplocation const &loc) noexcept
|
||||||
|
: name(loc.name())
|
||||||
|
, owner(f.device())
|
||||||
|
, mask(0U)
|
||||||
|
, state(0U)
|
||||||
|
{
|
||||||
|
std::fill(std::begin(toggles), std::end(toggles), toggle{ nullptr, 0U });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool menu_confswitch::switch_group_descriptor::matches(ioport_field const &f, ioport_diplocation const &loc) const noexcept
|
||||||
|
{
|
||||||
|
return (&owner.get() == &f.device()) && !strcmp(loc.name(), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline unsigned menu_confswitch::switch_group_descriptor::switch_count() const noexcept
|
||||||
|
{
|
||||||
|
return (sizeof(mask) * 8) - count_leading_zeros_32(mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu_confswitch::menu_confswitch(mame_ui_manager &mui, render_container &container, uint32_t type)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_fields()
|
||||||
|
, m_switch_groups()
|
||||||
|
, m_active_switch_groups(0U)
|
||||||
|
, m_type(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu_confswitch::~menu_confswitch()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_confswitch::menu_activated()
|
||||||
|
{
|
||||||
|
// switches can have input assignments, and scripts are a thing
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_confswitch::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// locate relevant fields if necessary
|
||||||
|
if (m_fields.empty())
|
||||||
|
find_fields();
|
||||||
|
|
||||||
|
// reset switch group masks
|
||||||
|
m_active_switch_groups = 0U;
|
||||||
|
for (switch_group_descriptor &group : m_switch_groups)
|
||||||
|
group.mask = group.state = 0U;
|
||||||
|
|
||||||
|
// loop over input ports and set up the current values
|
||||||
|
device_t *prev_owner(nullptr);
|
||||||
|
for (field_descriptor &desc : m_fields)
|
||||||
|
{
|
||||||
|
ioport_field &field(desc.field);
|
||||||
|
if (field.enabled())
|
||||||
|
{
|
||||||
|
if (!field.settings().empty())
|
||||||
|
{
|
||||||
|
// add a device heading if necessary
|
||||||
|
if (&field.device() != prev_owner)
|
||||||
|
{
|
||||||
|
prev_owner = &field.device();
|
||||||
|
if (prev_owner->owner())
|
||||||
|
item_append(string_format(_("%1$s [root%2$s]"), prev_owner->type().fullname(), prev_owner->tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
|
||||||
|
else
|
||||||
|
item_append(string_format(_("[root%1$s]"), prev_owner->tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the left/right flags appropriately
|
||||||
|
uint32_t flags(0U);
|
||||||
|
if (field.has_previous_setting())
|
||||||
|
flags |= FLAG_LEFT_ARROW;
|
||||||
|
if (field.has_next_setting())
|
||||||
|
flags |= FLAG_RIGHT_ARROW;
|
||||||
|
|
||||||
|
// add the menu item
|
||||||
|
item_append(field.name(), field.setting_name(), flags, &field);
|
||||||
|
}
|
||||||
|
|
||||||
|
// track switch groups
|
||||||
|
if (!field.diplocations().empty())
|
||||||
|
{
|
||||||
|
// get current settings
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
field.get_user_settings(settings);
|
||||||
|
|
||||||
|
// iterate over each bit in the field
|
||||||
|
ioport_value accummask(field.mask());
|
||||||
|
for (ioport_diplocation const &loc : field.diplocations())
|
||||||
|
{
|
||||||
|
// find the matching switch group
|
||||||
|
switch_group_descriptor &group(
|
||||||
|
*std::find_if(
|
||||||
|
m_switch_groups.begin(),
|
||||||
|
m_switch_groups.end(), [&field, &loc] (switch_group_descriptor const &sw) { return sw.matches(field, loc); }));
|
||||||
|
|
||||||
|
// count if this is the first switch in the group
|
||||||
|
if (!group.mask)
|
||||||
|
++m_active_switch_groups;
|
||||||
|
|
||||||
|
// apply the bits
|
||||||
|
ioport_value const mask(accummask & ~(accummask - 1));
|
||||||
|
group.toggles[loc.number() - 1].field = &field;
|
||||||
|
group.toggles[loc.number() - 1].mask = mask;
|
||||||
|
group.mask |= uint32_t(1) << (loc.number() - 1);
|
||||||
|
if (((settings.value & mask) && !loc.inverted()) || (!(settings.value & mask) && loc.inverted()))
|
||||||
|
group.state |= uint32_t(1) << (loc.number() - 1);
|
||||||
|
|
||||||
|
// clear the relevant bit in the accumulated mask
|
||||||
|
accummask &= ~mask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(_("Reset Machine"), 0, (void *)1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_confswitch::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// handle events
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
if (uintptr_t(ev->itemref) == 1U)
|
||||||
|
{
|
||||||
|
// reset
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
machine().schedule_hard_reset();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// actual settings
|
||||||
|
ioport_field &field(*reinterpret_cast<ioport_field *>(ev->itemref));
|
||||||
|
bool changed(false);
|
||||||
|
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
// if selected, reset to default value
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
{
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
field.get_user_settings(settings);
|
||||||
|
settings.value = field.defvalue();
|
||||||
|
field.set_user_settings(settings);
|
||||||
|
}
|
||||||
|
changed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// left goes to previous setting
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
field.select_previous_setting();
|
||||||
|
changed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// right goes to next setting
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
field.select_next_setting();
|
||||||
|
changed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// trick to get previous group - depend on headings having null reference
|
||||||
|
case IPT_UI_PREV_GROUP:
|
||||||
|
{
|
||||||
|
auto current = selected_index();
|
||||||
|
bool found_break = false;
|
||||||
|
while (0 < current)
|
||||||
|
{
|
||||||
|
if (!found_break)
|
||||||
|
{
|
||||||
|
if (!item(--current).ref())
|
||||||
|
found_break = true;
|
||||||
|
}
|
||||||
|
else if (!item(current - 1).ref())
|
||||||
|
{
|
||||||
|
set_selected_index(current);
|
||||||
|
set_top_line(current - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// trick to get next group - depend on special item references
|
||||||
|
case IPT_UI_NEXT_GROUP:
|
||||||
|
{
|
||||||
|
auto current = selected_index();
|
||||||
|
while (item_count() > ++current)
|
||||||
|
{
|
||||||
|
if (!item(current).ref())
|
||||||
|
{
|
||||||
|
if ((item_count() > (current + 1)) && (uintptr_t(item(current + 1).ref()) != 1))
|
||||||
|
{
|
||||||
|
set_selected_index(current + 1);
|
||||||
|
set_top_line(current);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if anything changed, rebuild the menu, trying to stay on the same field
|
||||||
|
if (changed)
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_confswitch::find_fields()
|
||||||
|
{
|
||||||
|
assert(m_fields.empty());
|
||||||
|
assert(m_switch_groups.empty());
|
||||||
|
|
||||||
|
// find relevant input ports
|
||||||
|
for (auto &port : machine().ioport().ports())
|
||||||
|
{
|
||||||
|
for (ioport_field &field : port.second->fields())
|
||||||
|
{
|
||||||
|
if (field.type() == m_type)
|
||||||
|
{
|
||||||
|
m_fields.emplace_back(field);
|
||||||
|
|
||||||
|
// iterate over locations
|
||||||
|
for (ioport_diplocation const &loc : field.diplocations())
|
||||||
|
{
|
||||||
|
auto const found(
|
||||||
|
std::find_if(
|
||||||
|
m_switch_groups.begin(),
|
||||||
|
m_switch_groups.end(), [&field, &loc] (switch_group_descriptor const &sw) { return sw.matches(field, loc); }));
|
||||||
|
if (m_switch_groups.end() == found)
|
||||||
|
m_switch_groups.emplace_back(field, loc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_settings_dip_switches
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_settings_dip_switches::menu_settings_dip_switches(mame_ui_manager &mui, render_container &container)
|
||||||
|
: menu_confswitch(mui, container, IPT_DIPSWITCH)
|
||||||
|
, m_switch_group_y()
|
||||||
|
, m_visible_switch_groups(0U)
|
||||||
|
, m_single_width(0.0f)
|
||||||
|
, m_nub_width(0.0f)
|
||||||
|
, m_first_nub(0.0f)
|
||||||
|
, m_clickable_height(0.0f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu_settings_dip_switches::~menu_settings_dip_switches()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_settings_dip_switches::custom_render(void *selectedref, float top, float bottom, float x1, float y1, float x2, float y2)
|
||||||
|
{
|
||||||
|
// catch if no DIP locations have to be drawn
|
||||||
|
if (!m_visible_switch_groups)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// calculate optimal width
|
||||||
|
float const aspect(machine().render().ui_aspect(&container()));
|
||||||
|
float const lineheight(ui().get_line_height());
|
||||||
|
float const maxwidth(1.0f - (ui().box_lr_border() * 2.0f * aspect));
|
||||||
|
m_single_width = (lineheight * SINGLE_TOGGLE_SWITCH_FIELD_WIDTH * aspect);
|
||||||
|
float width(0.0f);
|
||||||
|
unsigned maxswitches(0U);
|
||||||
|
for (switch_group_descriptor const &group : switch_groups())
|
||||||
|
{
|
||||||
|
if (group.mask)
|
||||||
|
{
|
||||||
|
maxswitches = (std::max)(group.switch_count(), maxswitches);
|
||||||
|
float const namewidth(ui().get_string_width(group.name));
|
||||||
|
float const switchwidth(m_single_width * maxswitches);
|
||||||
|
width = (std::min)((std::max)(namewidth + switchwidth + (lineheight * aspect), width), maxwidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw extra menu area
|
||||||
|
float const boxwidth((std::max)(width + (ui().box_lr_border() * 2.0f * aspect), x2 - x1));
|
||||||
|
float const boxleft((1.0f - boxwidth) * 0.5f);
|
||||||
|
ui().draw_outlined_box(container(), boxleft, y2 + ui().box_tb_border(), boxleft + boxwidth, y2 + bottom, ui().colors().background_color());
|
||||||
|
|
||||||
|
// calculate centred layout
|
||||||
|
float const nameleft((1.0f - width) * 0.5f);
|
||||||
|
float const switchleft(nameleft + width - (m_single_width * maxswitches));
|
||||||
|
float const namewidth(width - (m_single_width * maxswitches) - (lineheight * aspect));
|
||||||
|
|
||||||
|
// iterate over switch groups
|
||||||
|
ioport_field *const field((uintptr_t(selectedref) != 1U) ? reinterpret_cast<ioport_field *>(selectedref) : nullptr);
|
||||||
|
float const nubheight(lineheight * SINGLE_TOGGLE_SWITCH_HEIGHT);
|
||||||
|
m_nub_width = lineheight * SINGLE_TOGGLE_SWITCH_WIDTH * aspect;
|
||||||
|
float const ygap(lineheight * ((DIP_SWITCH_HEIGHT * 0.5f) - SINGLE_TOGGLE_SWITCH_HEIGHT) * 0.5f);
|
||||||
|
float const xgap((m_single_width + (UI_LINE_WIDTH * 0.5f) - m_nub_width) * 0.5f);
|
||||||
|
m_first_nub = switchleft + xgap;
|
||||||
|
m_clickable_height = (lineheight * DIP_SWITCH_HEIGHT) - (ygap * 2.0f);
|
||||||
|
unsigned line(0U);
|
||||||
|
for (unsigned n = 0; switch_groups().size() > n; ++n)
|
||||||
|
{
|
||||||
|
switch_group_descriptor const &group(switch_groups()[n]);
|
||||||
|
if (group.mask)
|
||||||
|
{
|
||||||
|
// determine the mask of selected bits
|
||||||
|
uint32_t selectedmask(0U);
|
||||||
|
if (field)
|
||||||
|
{
|
||||||
|
for (ioport_diplocation const &loc : field->diplocations())
|
||||||
|
if (group.matches(*field, loc))
|
||||||
|
selectedmask |= uint32_t(1) << (loc.number() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the name
|
||||||
|
float const liney(y2 + (ui().box_tb_border() * 2.0f) + (lineheight * (DIP_SWITCH_HEIGHT + DIP_SWITCH_SPACING) * line));
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
group.name,
|
||||||
|
nameleft, liney + (lineheight * (DIP_SWITCH_HEIGHT - 1.0f) / 2.0f), namewidth,
|
||||||
|
text_layout::text_justify::RIGHT, text_layout::word_wrapping::NEVER,
|
||||||
|
mame_ui_manager::NORMAL, ui().colors().text_color(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
|
||||||
|
// draw the group outline
|
||||||
|
float const switchbottom(liney + (DIP_SWITCH_HEIGHT * lineheight));
|
||||||
|
unsigned const cnt(group.switch_count());
|
||||||
|
ui().draw_outlined_box(
|
||||||
|
container(),
|
||||||
|
switchleft, liney, switchleft + (m_single_width * cnt), switchbottom,
|
||||||
|
ui().colors().background_color());
|
||||||
|
for (unsigned i = 1; cnt > i; ++i)
|
||||||
|
{
|
||||||
|
container().add_line(
|
||||||
|
switchleft + (m_single_width * i), liney, switchleft + (m_single_width * i), switchbottom,
|
||||||
|
UI_LINE_WIDTH, ui().colors().text_color(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
}
|
||||||
|
|
||||||
|
// compute top and bottom for on and off positions
|
||||||
|
float const yoff(liney + UI_LINE_WIDTH + ygap);
|
||||||
|
float const yon(switchbottom - UI_LINE_WIDTH - ygap - nubheight);
|
||||||
|
m_switch_group_y[n] = yoff;
|
||||||
|
|
||||||
|
// draw the switch nubs
|
||||||
|
for (unsigned toggle = 0; cnt > toggle; ++toggle)
|
||||||
|
{
|
||||||
|
float const nubleft(switchleft + (m_single_width * toggle) + xgap);
|
||||||
|
if (BIT(group.mask, toggle))
|
||||||
|
{
|
||||||
|
float const nubtop(BIT(group.state, toggle) ? yon : yoff);
|
||||||
|
container().add_rect(
|
||||||
|
nubleft, nubtop, nubleft + m_nub_width, nubtop + nubheight,
|
||||||
|
BIT(selectedmask, toggle) ? ui().colors().dipsw_color() : ui().colors().text_color(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
container().add_rect(
|
||||||
|
nubleft, yoff, nubleft + m_nub_width, yon + nubheight,
|
||||||
|
ui().colors().unavailable_color(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// limit the number of visible switch groups
|
||||||
|
if (++line >= m_visible_switch_groups)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool menu_settings_dip_switches::custom_mouse_down()
|
||||||
|
{
|
||||||
|
if (!m_visible_switch_groups || (get_mouse_x() < m_first_nub))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
float const x(get_mouse_x() - m_first_nub);
|
||||||
|
float const y(get_mouse_y());
|
||||||
|
for (unsigned n = 0U, line = 0U; (switch_groups().size() > n) && (m_visible_switch_groups > line); ++n)
|
||||||
|
{
|
||||||
|
switch_group_descriptor const &group(switch_groups()[n]);
|
||||||
|
if (group.mask)
|
||||||
|
{
|
||||||
|
++line;
|
||||||
|
if ((y >= m_switch_group_y[n]) && (y < (m_switch_group_y[n] + m_clickable_height)))
|
||||||
|
{
|
||||||
|
unsigned const cnt(group.switch_count());
|
||||||
|
for (unsigned i = 0U; cnt > i; ++i)
|
||||||
|
{
|
||||||
|
if (BIT(group.mask, i))
|
||||||
|
{
|
||||||
|
float const xstart(float(i) * m_single_width);
|
||||||
|
if ((x >= xstart) && (x < (xstart + m_nub_width)))
|
||||||
|
{
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
group.toggles[i].field->get_user_settings(settings);
|
||||||
|
settings.value ^= group.toggles[i].mask;
|
||||||
|
group.toggles[i].field->set_user_settings(settings);
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_settings_dip_switches::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// let the base class add items
|
||||||
|
menu_confswitch::populate(customtop, custombottom);
|
||||||
|
|
||||||
|
// use up to about 70% of height for DIP switch display
|
||||||
|
if (active_switch_groups())
|
||||||
|
{
|
||||||
|
m_switch_group_y.resize(switch_groups().size());
|
||||||
|
float const lineheight(ui().get_line_height());
|
||||||
|
float const groupheight(DIP_SWITCH_HEIGHT * lineheight);
|
||||||
|
float const groupspacing(DIP_SWITCH_SPACING * lineheight);
|
||||||
|
if ((active_switch_groups() * (groupheight + groupspacing)) > 0.7f)
|
||||||
|
m_visible_switch_groups = unsigned(0.7f / (groupheight + groupspacing));
|
||||||
|
else
|
||||||
|
m_visible_switch_groups = active_switch_groups();
|
||||||
|
custombottom = (m_visible_switch_groups * groupheight) + ((m_visible_switch_groups - 1) * groupspacing) + (ui().box_tb_border() * 3.0f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_visible_switch_groups = 0U;
|
||||||
|
custombottom = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_settings_machine_config
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_settings_machine_config::menu_settings_machine_config(mame_ui_manager &mui, render_container &container) : menu_confswitch(mui, container, IPT_CONFIG)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_settings_machine_config::~menu_settings_machine_config()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ui
|
109
src/icludes/frontend/mame/ui/confswitch.h
Normal file
109
src/icludes/frontend/mame/ui/confswitch.h
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/confswitch.h
|
||||||
|
|
||||||
|
Configuration/DIP switches menu.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_CONFSWITCH_H
|
||||||
|
#define MAME_FRONTEND_UI_CONFSWITCH_H
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_confswitch : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~menu_confswitch() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
struct field_descriptor
|
||||||
|
{
|
||||||
|
field_descriptor(ioport_field &f) noexcept;
|
||||||
|
|
||||||
|
std::reference_wrapper<ioport_field> field;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct switch_group_descriptor
|
||||||
|
{
|
||||||
|
struct toggle
|
||||||
|
{
|
||||||
|
ioport_field *field;
|
||||||
|
ioport_value mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
switch_group_descriptor(ioport_field const &f, ioport_diplocation const &loc) noexcept;
|
||||||
|
|
||||||
|
bool matches(ioport_field const &f, ioport_diplocation const &loc) const noexcept;
|
||||||
|
unsigned switch_count() const noexcept;
|
||||||
|
|
||||||
|
char const *name;
|
||||||
|
std::reference_wrapper<device_t> owner;
|
||||||
|
toggle toggles[32];
|
||||||
|
uint32_t mask;
|
||||||
|
uint32_t state;
|
||||||
|
};
|
||||||
|
|
||||||
|
using field_vector = std::vector<field_descriptor>;
|
||||||
|
using switch_group_vector = std::vector<switch_group_descriptor>;
|
||||||
|
|
||||||
|
menu_confswitch(mame_ui_manager &mui, render_container &container, uint32_t type);
|
||||||
|
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
|
||||||
|
field_vector const &fields() { return m_fields; }
|
||||||
|
switch_group_vector const &switch_groups() { return m_switch_groups; }
|
||||||
|
unsigned active_switch_groups() const { return m_active_switch_groups; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void find_fields();
|
||||||
|
|
||||||
|
field_vector m_fields;
|
||||||
|
switch_group_vector m_switch_groups;
|
||||||
|
unsigned m_active_switch_groups;
|
||||||
|
int const m_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_settings_dip_switches : public menu_confswitch
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_settings_dip_switches(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_settings_dip_switches() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual bool custom_mouse_down() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
|
||||||
|
std::vector<float> m_switch_group_y;
|
||||||
|
unsigned m_visible_switch_groups;
|
||||||
|
float m_single_width;
|
||||||
|
float m_nub_width;
|
||||||
|
float m_first_nub;
|
||||||
|
float m_clickable_height;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_settings_machine_config : public menu_confswitch
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_settings_machine_config(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_settings_machine_config();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_CONFSWITCH_H
|
1136
src/icludes/frontend/mame/ui/custui.cpp
Normal file
1136
src/icludes/frontend/mame/ui/custui.cpp
Normal file
File diff suppressed because it is too large
Load Diff
185
src/icludes/frontend/mame/ui/custui.h
Normal file
185
src/icludes/frontend/mame/ui/custui.h
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/custui.h
|
||||||
|
|
||||||
|
Internal UI user interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_CUSTUI_H
|
||||||
|
#define MAME_FRONTEND_UI_CUSTUI_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// Custom UI menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_custom_ui : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_custom_ui(mame_ui_manager &mui, render_container &container, std::function<void ()> &&handler);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual void menu_dismissed() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void find_languages();
|
||||||
|
void find_sysnames();
|
||||||
|
|
||||||
|
std::function<void ()> m_handler;
|
||||||
|
std::vector<std::string> m_languages;
|
||||||
|
std::vector<std::string> m_sysnames;
|
||||||
|
std::size_t m_currlang;
|
||||||
|
std::size_t m_currsysnames;
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// Font UI menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_font_ui : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_font_ui(mame_ui_manager &mui, render_container &container, std::function<void (bool)> &&handler);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual void menu_dismissed() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void list();
|
||||||
|
|
||||||
|
std::function<void (bool)> m_handler;
|
||||||
|
std::vector<std::pair<std::string, std::string> > m_fonts;
|
||||||
|
int const m_font_min, m_font_max;
|
||||||
|
int m_font_size;
|
||||||
|
float const m_info_min, m_info_max;
|
||||||
|
float m_info_size;
|
||||||
|
bool m_changed;
|
||||||
|
|
||||||
|
std::uint16_t m_actual;
|
||||||
|
#ifdef UI_WINDOWS
|
||||||
|
bool m_bold, m_italic;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// Colors UI menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_colors_ui : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_colors_ui(mame_ui_manager &mui, render_container &container);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual void menu_dismissed() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
MUI_BACKGROUND_COLOR = 1,
|
||||||
|
MUI_BORDER_COLOR,
|
||||||
|
MUI_CLONE_COLOR,
|
||||||
|
MUI_DIPSW_COLOR,
|
||||||
|
MUI_GFXVIEWER_BG_COLOR,
|
||||||
|
MUI_MOUSEDOWN_BG_COLOR,
|
||||||
|
MUI_MOUSEDOWN_COLOR,
|
||||||
|
MUI_MOUSEOVER_BG_COLOR,
|
||||||
|
MUI_MOUSEOVER_COLOR,
|
||||||
|
MUI_SELECTED_BG_COLOR,
|
||||||
|
MUI_SELECTED_COLOR,
|
||||||
|
MUI_SLIDER_COLOR,
|
||||||
|
MUI_SUBITEM_COLOR,
|
||||||
|
MUI_TEXT_BG_COLOR,
|
||||||
|
MUI_TEXT_COLOR,
|
||||||
|
MUI_UNAVAILABLE_COLOR,
|
||||||
|
MUI_RESTORE
|
||||||
|
};
|
||||||
|
|
||||||
|
struct s_color_table
|
||||||
|
{
|
||||||
|
rgb_t color;
|
||||||
|
const char *option;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
s_color_table m_color_table[MUI_RESTORE];
|
||||||
|
void restore_colors();
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ARGB UI menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_rgb_ui : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_rgb_ui(mame_ui_manager &mui, render_container &container, rgb_t *color, std::string &&title);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
RGB_ALPHA = 1,
|
||||||
|
RGB_RED,
|
||||||
|
RGB_GREEN,
|
||||||
|
RGB_BLUE,
|
||||||
|
PALETTE_CHOOSE
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void inkey_special(const event *menu_event);
|
||||||
|
|
||||||
|
rgb_t *m_color;
|
||||||
|
std::string m_search;
|
||||||
|
bool m_key_active;
|
||||||
|
int m_lock_ref;
|
||||||
|
std::string m_title;
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// Palette UI menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_palette_sel : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_palette_sel(mame_ui_manager &mui, render_container &container, rgb_t &_color);
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
static std::pair<const char *, const char *> const s_palette[];
|
||||||
|
rgb_t &m_original;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_CUSTUI_H
|
411
src/icludes/frontend/mame/ui/datmenu.cpp
Normal file
411
src/icludes/frontend/mame/ui/datmenu.cpp
Normal file
@ -0,0 +1,411 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota, Vas Crabb
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/datmenu.cpp
|
||||||
|
|
||||||
|
Internal UI user interface.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/datmenu.h"
|
||||||
|
|
||||||
|
#include "ui/systemlist.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
#include "luaengine.h"
|
||||||
|
#include "mame.h"
|
||||||
|
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "rendfont.h"
|
||||||
|
#include "softlist.h"
|
||||||
|
#include "uiinput.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <limits>
|
||||||
|
#include <string_view>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_dats_view::menu_dats_view(mame_ui_manager &mui, render_container &container, const ui_system_info *system)
|
||||||
|
: menu_textbox(mui, container)
|
||||||
|
, m_system(!system ? &system_list::instance().systems()[driver_list::find(mui.machine().system().name)] : system)
|
||||||
|
, m_swinfo(nullptr)
|
||||||
|
, m_issoft(false)
|
||||||
|
, m_actual(0)
|
||||||
|
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_ALWAYS | PROCESS_CUSTOM_NAV);
|
||||||
|
for (device_image_interface& image : image_interface_enumerator(mui.machine().root_device()))
|
||||||
|
{
|
||||||
|
if (image.filename())
|
||||||
|
{
|
||||||
|
m_list = strensure(image.software_list_name());
|
||||||
|
m_short = image.software_entry()->shortname();
|
||||||
|
m_long = image.software_entry()->longname();
|
||||||
|
m_parent = image.software_entry()->parentname();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::vector<std::string> lua_list;
|
||||||
|
if (mame_machine_manager::instance()->lua()->call_plugin("data_list", system ? system->driver->name : "", lua_list))
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
for (std::string& item : lua_list)
|
||||||
|
{
|
||||||
|
std::string version;
|
||||||
|
mame_machine_manager::instance()->lua()->call_plugin("data_version", count, version);
|
||||||
|
m_items_list.emplace_back(item.c_str(), count, std::move(version));
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_dats_view::menu_dats_view(mame_ui_manager &mui, render_container &container, const ui_software_info &swinfo)
|
||||||
|
: menu_textbox(mui, container)
|
||||||
|
, m_system(nullptr)
|
||||||
|
, m_swinfo(&swinfo)
|
||||||
|
, m_issoft(true)
|
||||||
|
, m_actual(0)
|
||||||
|
, m_list(swinfo.listname)
|
||||||
|
, m_short(swinfo.shortname)
|
||||||
|
, m_long(swinfo.longname)
|
||||||
|
, m_parent(swinfo.parentname)
|
||||||
|
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_ALWAYS | PROCESS_CUSTOM_NAV);
|
||||||
|
if (!swinfo.infotext.empty())
|
||||||
|
m_items_list.emplace_back(_("Software List Info"), 0, "");
|
||||||
|
std::vector<std::string> lua_list;
|
||||||
|
if (mame_machine_manager::instance()->lua()->call_plugin("data_list", std::string(m_short).append(1, ',').append(m_list).c_str(), lua_list))
|
||||||
|
{
|
||||||
|
int count = 1;
|
||||||
|
for (std::string &item : lua_list)
|
||||||
|
{
|
||||||
|
std::string version;
|
||||||
|
mame_machine_manager::instance()->lua()->call_plugin("data_version", count - 1, version);
|
||||||
|
m_items_list.emplace_back(item.c_str(), count, std::move(version));
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_dats_view::~menu_dats_view()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// add text to layout
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_dats_view::add_info_text(text_layout &layout, std::string_view text, rgb_t color, float size)
|
||||||
|
{
|
||||||
|
char justify = 'l'; // left justify by default
|
||||||
|
if ((text.length() > 3) && (text[0] == '#') && (text[1] == 'j'))
|
||||||
|
{
|
||||||
|
auto const eol = text.find('\n');
|
||||||
|
if ((std::string_view::npos != eol) && (2 < eol))
|
||||||
|
{
|
||||||
|
justify = text[2];
|
||||||
|
text.remove_prefix(eol + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('2' == justify)
|
||||||
|
{
|
||||||
|
while (!text.empty())
|
||||||
|
{
|
||||||
|
// pop a line from the front
|
||||||
|
auto const eol = text.find('\n');
|
||||||
|
std::string_view const line = (std::string_view::npos != eol)
|
||||||
|
? text.substr(0, eol + 1)
|
||||||
|
: text;
|
||||||
|
text.remove_prefix(line.length());
|
||||||
|
|
||||||
|
// split on the first tab
|
||||||
|
auto const split = line.find('\t');
|
||||||
|
if (std::string_view::npos != split)
|
||||||
|
{
|
||||||
|
layout.add_text(line.substr(0, split), text_layout::text_justify::LEFT, color, rgb_t::transparent(), size);
|
||||||
|
layout.add_text(" ", text_layout::text_justify::LEFT, color, rgb_t::transparent(), size);
|
||||||
|
layout.add_text(line.substr(split + 1), text_layout::text_justify::RIGHT, color, rgb_t::transparent(), size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
layout.add_text(line, text_layout::text_justify::LEFT, color, rgb_t::transparent(), size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// use the same alignment for all the text
|
||||||
|
auto const j =
|
||||||
|
('c' == justify) ? text_layout::text_justify::CENTER :
|
||||||
|
('r' == justify) ? text_layout::text_justify::RIGHT :
|
||||||
|
text_layout::text_justify::LEFT;
|
||||||
|
layout.add_text(text, j, color, rgb_t::transparent(), size);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_dats_view::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (ev)
|
||||||
|
{
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
if (m_actual > 0)
|
||||||
|
{
|
||||||
|
m_actual--;
|
||||||
|
reset_layout();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
if ((m_actual + 1) < m_items_list.size())
|
||||||
|
{
|
||||||
|
m_actual++;
|
||||||
|
reset_layout();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
handle_key(ev->iptkey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_dats_view::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
customtop = 2.0f * ui().get_line_height() + 4.0f * ui().box_tb_border();
|
||||||
|
custombottom = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_dats_view::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
float maxwidth = origx2 - origx1;
|
||||||
|
float width;
|
||||||
|
std::string_view const driver = m_issoft ? m_swinfo->longname : m_system->description;
|
||||||
|
|
||||||
|
float const lr_border = ui().box_lr_border() * machine().render().ui_aspect(&container());
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
driver,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
ui::text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE,
|
||||||
|
mame_ui_manager::NONE, rgb_t::white(), rgb_t::black(), &width, nullptr);
|
||||||
|
width += 2 * lr_border;
|
||||||
|
maxwidth = std::max(maxwidth, width);
|
||||||
|
|
||||||
|
// compute our bounds
|
||||||
|
float x1 = 0.5f - 0.5f * maxwidth;
|
||||||
|
float x2 = x1 + maxwidth;
|
||||||
|
float y1 = origy1 - top;
|
||||||
|
float y2 = origy1 - 2.0f * ui().box_tb_border() - ui().get_line_height();
|
||||||
|
|
||||||
|
// draw a box
|
||||||
|
ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR);
|
||||||
|
|
||||||
|
// take off the borders
|
||||||
|
x1 += lr_border;
|
||||||
|
x2 -= lr_border;
|
||||||
|
y1 += ui().box_tb_border();
|
||||||
|
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
driver,
|
||||||
|
x1, y1, x2 - x1,
|
||||||
|
text_layout::text_justify::CENTER, ui::text_layout::word_wrapping::NEVER,
|
||||||
|
mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color());
|
||||||
|
|
||||||
|
maxwidth = 0;
|
||||||
|
for (auto const &elem : m_items_list)
|
||||||
|
{
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
elem.label,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::NEVER,
|
||||||
|
mame_ui_manager::NONE, rgb_t::white(), rgb_t::black(),
|
||||||
|
&width, nullptr);
|
||||||
|
maxwidth += width;
|
||||||
|
}
|
||||||
|
|
||||||
|
float space = (1.0f - maxwidth) / (m_items_list.size() * 2);
|
||||||
|
|
||||||
|
// compute our bounds
|
||||||
|
x1 -= lr_border;
|
||||||
|
x2 += lr_border;
|
||||||
|
y1 = y2 + ui().box_tb_border();
|
||||||
|
y2 += ui().get_line_height() + 2.0f * ui().box_tb_border();
|
||||||
|
|
||||||
|
// draw a box
|
||||||
|
ui().draw_outlined_box(container(), x1, y1, x2, y2, ui().colors().background_color());
|
||||||
|
|
||||||
|
// take off the borders
|
||||||
|
y1 += ui().box_tb_border();
|
||||||
|
|
||||||
|
// draw the text within it
|
||||||
|
int x = 0;
|
||||||
|
for (auto const &elem : m_items_list)
|
||||||
|
{
|
||||||
|
x1 += space;
|
||||||
|
if (mouse_in_rect(x1 - (space / 2), y1, x1 + width + (space / 2), y2))
|
||||||
|
set_hover(HOVER_INFO_TEXT + 1 + x);
|
||||||
|
|
||||||
|
rgb_t const fcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0x00) : ui().colors().text_color();
|
||||||
|
rgb_t const bcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0xff) : ui().colors().text_bg_color();
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
elem.label,
|
||||||
|
x1, y1, 1.0f,
|
||||||
|
text_layout::text_justify::LEFT, text_layout::word_wrapping::NEVER,
|
||||||
|
mame_ui_manager::NONE, fcolor, bcolor,
|
||||||
|
&width, nullptr);
|
||||||
|
|
||||||
|
if (bcolor != ui().colors().text_bg_color())
|
||||||
|
{
|
||||||
|
ui().draw_textured_box(
|
||||||
|
container(),
|
||||||
|
x1 - (space / 2), y1, x1 + width + (space / 2), y2,
|
||||||
|
bcolor, rgb_t(255, 43, 43, 43),
|
||||||
|
hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
elem.label,
|
||||||
|
x1, y1, 1.0f,
|
||||||
|
text_layout::text_justify::LEFT, text_layout::word_wrapping::NEVER,
|
||||||
|
mame_ui_manager::NORMAL, fcolor, bcolor,
|
||||||
|
&width, nullptr);
|
||||||
|
x1 += width + space;
|
||||||
|
++x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
if (!m_items_list.empty())
|
||||||
|
{
|
||||||
|
std::string const revision(util::string_format(_("Revision: %1$s"), m_items_list[m_actual].revision));
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
revision,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE,
|
||||||
|
mame_ui_manager::NONE, rgb_t::white(), rgb_t::black(),
|
||||||
|
&width, nullptr);
|
||||||
|
width += 2 * lr_border;
|
||||||
|
maxwidth = std::max(origx2 - origx1, width);
|
||||||
|
|
||||||
|
// compute our bounds
|
||||||
|
x1 = 0.5f - 0.5f * maxwidth;
|
||||||
|
x2 = x1 + maxwidth;
|
||||||
|
y1 = origy2 + ui().box_tb_border();
|
||||||
|
y2 = origy2 + bottom;
|
||||||
|
|
||||||
|
// draw a box
|
||||||
|
ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR);
|
||||||
|
|
||||||
|
// take off the borders
|
||||||
|
x1 += lr_border;
|
||||||
|
x2 -= lr_border;
|
||||||
|
y1 += ui().box_tb_border();
|
||||||
|
|
||||||
|
// draw the text within it
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(),
|
||||||
|
revision,
|
||||||
|
x1, y1, x2 - x1,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE,
|
||||||
|
mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// custom mouse click handling
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
bool menu_dats_view::custom_mouse_down()
|
||||||
|
{
|
||||||
|
if ((hover() > HOVER_INFO_TEXT) && ((hover() - HOVER_INFO_TEXT) <= m_items_list.size()))
|
||||||
|
{
|
||||||
|
if ((hover() - HOVER_INFO_TEXT - 1) != m_actual)
|
||||||
|
{
|
||||||
|
m_actual = hover() - HOVER_INFO_TEXT - 1;
|
||||||
|
reset(reset_options::SELECT_FIRST);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate selected DAT text
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_dats_view::populate_text(std::optional<text_layout> &layout, float &width, int &lines)
|
||||||
|
{
|
||||||
|
if (!layout || (layout->width() != width))
|
||||||
|
{
|
||||||
|
std::string buffer;
|
||||||
|
if (!m_items_list.empty())
|
||||||
|
{
|
||||||
|
if (m_issoft)
|
||||||
|
get_data_sw(buffer);
|
||||||
|
else
|
||||||
|
get_data(buffer);
|
||||||
|
}
|
||||||
|
layout.emplace(ui().create_layout(container(), width));
|
||||||
|
add_info_text(*layout, buffer, ui().colors().text_color());
|
||||||
|
lines = std::numeric_limits<int>::max();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// load data from DATs
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_dats_view::get_data(std::string &buffer)
|
||||||
|
{
|
||||||
|
mame_machine_manager::instance()->lua()->call_plugin("data", m_items_list[m_actual].option, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_dats_view::get_data_sw(std::string &buffer)
|
||||||
|
{
|
||||||
|
if (m_items_list[m_actual].option == 0)
|
||||||
|
buffer = m_swinfo->infotext;
|
||||||
|
else
|
||||||
|
mame_machine_manager::instance()->lua()->call_plugin("data", m_items_list[m_actual].option - 1, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
77
src/icludes/frontend/mame/ui/datmenu.h
Normal file
77
src/icludes/frontend/mame/ui/datmenu.h
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota, Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/datmenu.h
|
||||||
|
|
||||||
|
Internal UI user interface.
|
||||||
|
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_DATMENU_H
|
||||||
|
#define MAME_FRONTEND_UI_DATMENU_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/text.h"
|
||||||
|
#include "ui/textbox.h"
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
struct ui_software_info;
|
||||||
|
struct ui_system_info;
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// class dats menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_dats_view : public menu_textbox
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_dats_view(mame_ui_manager &mui, render_container &container, const ui_software_info &swinfo);
|
||||||
|
menu_dats_view(mame_ui_manager &mui, render_container &container, const ui_system_info *system = nullptr);
|
||||||
|
virtual ~menu_dats_view() override;
|
||||||
|
|
||||||
|
static void add_info_text(text_layout &layout, std::string_view text, rgb_t color, float size = 1.0f);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual bool custom_mouse_down() override;
|
||||||
|
|
||||||
|
virtual void populate_text(std::optional<text_layout> &layout, float &width, int &lines) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct list_items
|
||||||
|
{
|
||||||
|
list_items(std::string &&l, int i, std::string &&rev) : label(std::move(l)), option(i), revision(std::move(rev)) { }
|
||||||
|
|
||||||
|
std::string label;
|
||||||
|
int option;
|
||||||
|
std::string revision;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void get_data(std::string &buffer);
|
||||||
|
void get_data_sw(std::string &buffer);
|
||||||
|
|
||||||
|
ui_system_info const *const m_system;
|
||||||
|
ui_software_info const *const m_swinfo;
|
||||||
|
bool const m_issoft;
|
||||||
|
int m_actual;
|
||||||
|
std::string m_list, m_short, m_long, m_parent;
|
||||||
|
std::vector<list_items> m_items_list;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_DATMENU_H
|
273
src/icludes/frontend/mame/ui/defimg.ipp
Normal file
273
src/icludes/frontend/mame/ui/defimg.ipp
Normal file
@ -0,0 +1,273 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
#ifndef MAME_FRONTEND_UI_DEFIMG_IPP
|
||||||
|
#define MAME_FRONTEND_UI_DEFIMG_IPP
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
namespace {
|
||||||
|
// TODO: move this to an external image file and zlib compress it into a souce file as part of the build process
|
||||||
|
|
||||||
|
uint32_t const no_avail_bmp[] = {
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x01231f20, 0x04231f20, 0x11231f20, 0x2e231f20, 0x62231f20, 0x8e231f20, 0xb4231f20, 0xd4231f20, 0xe5231f20, 0xf2231f20, 0xfd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfd231f20, 0xf2231f20, 0xe5231f20, 0xd4231f20, 0xb4231f20, 0x8e231f20, 0x62231f20, 0x2e231f20, 0x11231f20, 0x04231f20, 0x01231f20, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x00000000, 0x06231f20, 0x1c231f20, 0x49231f20, 0x8c231f20, 0xc4231f20, 0xf0231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf0231f20, 0xc4231f20, 0x8c231f20, 0x49231f20, 0x1c231f20, 0x06231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x04231f20, 0x32231f20, 0x7b231f20, 0xc2231f20, 0xf3231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf3231f20, 0xc2231f20, 0x7b231f20, 0x32231f20, 0x04231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30231f20, 0x8e231f20, 0xd6231f20, 0xfd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfd231f20, 0xd6231f20, 0x8e231f20, 0x30231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x0e231f20, 0x73231f20, 0xd8231f20, 0xfb231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfb231f20, 0xd8231f20, 0x73231f20, 0x0e231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x29231f20, 0xb6231f20, 0xfb231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfb231f20, 0xb6231f20, 0x29231f20, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x03231f20, 0x4f231f20, 0xdd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xdd231f20, 0x4f231f20, 0x03231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x0a231f20, 0x72231f20, 0xf4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf4231f20, 0x72231f20, 0x0a231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10231f20, 0x84231f20, 0xf5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff1e191a, 0xff1e1a1b, 0xff211c1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf5231f20, 0x84231f20, 0x10231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x0a231f20, 0x84231f20, 0xf5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1c1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff1b1718, 0xff1b1718, 0xff1c1819, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff393637, 0xff7c7a7a, 0xff827f80, 0xff7d7b7c, 0xff494647, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf5231f20, 0x84231f20, 0x0a231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x03231f20, 0x74231f20, 0xf5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3b3839, 0xff585656, 0xff5a5757, 0xff5a5757, 0xff5b5858, 0xff4b4949, 0xff272325, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff464243, 0xff5a5858, 0xff5a5758, 0xff565253, 0xff312d2e, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff575355, 0xffececec, 0xfff7f7f7, 0xffededed, 0xff7a7878, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf5231f20, 0x74231f20, 0x03231f20, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x51231f20, 0xf4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff807d7e, 0xfff1f1f1, 0xfff6f6f6, 0xfff6f6f6, 0xfff9f9f9, 0xffe1e0e0, 0xff565354, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffa9a7a7, 0xfff6f6f6, 0xfff6f6f6, 0xffe6e6e6, 0xff575455, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf4231f20, 0x51231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a231f20, 0xde231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff848283, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa6a4a5, 0xff2c2729, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffedecec, 0xff5a5758, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff595556, 0xfff6f6f6, 0xffffffff, 0xfff6f6f6, 0xff7e7c7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xde231f20, 0x2a231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x0e231f20, 0xb5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xff585556, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff524f50, 0xffdbdbdb, 0xffe5e4e5, 0xffdcdbdb, 0xff737071, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xb5231f20, 0x0e231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x73231f20, 0xfb231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb4b3b4, 0xff282425, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2e2b2c, 0xff4f4c4d, 0xff524f50, 0xff504d4e, 0xff363334, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfb231f20, 0x73231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000,
|
||||||
|
0x00000000, 0x00231f20, 0x00000000, 0x30231f20, 0xd8231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfffdfdfd, 0xffededed, 0xfffdfdfd, 0xffffffff, 0xfff9fafa, 0xff646162, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff1e1a1b, 0xff1e1a1b, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xd8231f20, 0x30231f20, 0x00000000, 0x00231f20, 0x00000000,
|
||||||
|
0x00231f20, 0x00000000, 0x05231f20, 0x8e231f20, 0xfa231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xffadacac, 0xffdbdbdb, 0xffffffff, 0xffffffff, 0xffc8c7c7, 0xff2b2628, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1c1718, 0xff1a1617, 0xff1b1718, 0xff1b1718, 0xff1a1617, 0xff1d191a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1d191a, 0xff1a1617, 0xff1b1718, 0xff1a1617, 0xff1b1718, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1c1819, 0xff1a1517, 0xff1b1718, 0xff1a1517, 0xff1c1719, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff1c1819, 0xff191516, 0xff1a1617, 0xff1a1617, 0xff191516, 0xff1b1718, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1c1819, 0xff1a1617, 0xff1b1718, 0xff1a1617, 0xff1a1617, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1d191a, 0xff1a1516, 0xff1a1617, 0xff1b1718, 0xff191516, 0xff1b1718, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfa231f20, 0x8e231f20, 0x05231f20, 0x00000000, 0x00231f20,
|
||||||
|
0x00000000, 0x00000000, 0x32231f20, 0xd8231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff7f7f7, 0xff858384, 0xff949393, 0xfffdfefd, 0xffffffff, 0xfffdfdfd, 0xff767475, 0xff1c1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff252122, 0xff413e3f, 0xff6e6c6c, 0xff8f8d8d, 0xff9c9b9b, 0xff9b9999, 0xff898787, 0xff646061, 0xff383435, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff292526, 0xff393637, 0xff3b3839, 0xff3a3738, 0xff2c292a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231e1f, 0xff2f2b2c, 0xff3a3738, 0xff3b3839, 0xff393536, 0xff282425, 0xff221e1f, 0xff201c1d, 0xff302d2e, 0xff5f5c5d, 0xff8a8788, 0xff9b9a9a, 0xff989797, 0xff7c7a7a, 0xff454243, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff373334, 0xff666465, 0xff8e8c8c, 0xff9b999a, 0xff918f8f, 0xff716f6f, 0xff3b3839, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff231f20, 0xff302c2d, 0xff4e4a4b, 0xff706e6f, 0xff8b898a, 0xff999797, 0xff999797, 0xff8e8c8d, 0xff767374, 0xff494646, 0xff2b2728, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff332f30, 0xff636061, 0xff8d8b8b, 0xff9c9a9b, 0xff989697, 0xff807f7f, 0xff524f4f, 0xff2a2627, 0xff211d1e, 0xff221e1f, 0xff2e2a2b, 0xff3b3738, 0xff3b3839, 0xff383536, 0xff292526, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff393636, 0xff646162, 0xff878485, 0xff989697, 0xff9d9b9b, 0xff908e8e, 0xff716e6e, 0xff423f3f, 0xff252122, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xd8231f20, 0x32231f20, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x06231f20, 0x7c231f20, 0xfc231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7b797a, 0xff4a4647, 0xffdedede, 0xffffffff, 0xffffffff, 0xffd1d0d1, 0xff363233, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff252122, 0xff504e4f, 0xffaaa9a9, 0xffececed, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe1e0e1, 0xff949293, 0xff403c3d, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1718, 0xff555253, 0xffe9e9e9, 0xfff4f4f4, 0xffebebeb, 0xff787676, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff8b898a, 0xffeff0f0, 0xfff3f3f3, 0xffdddddd, 0xff4c4a4a, 0xff242021, 0xff716f6f, 0xffd4d2d3, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xff9c9b9c, 0xff393536, 0xff201c1d, 0xff231f20, 0xff211d1e, 0xff322f30, 0xff848282, 0xffe0dede, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff838182, 0xff2f2b2c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2b2728, 0xff605d5e, 0xffa2a1a1, 0xffd8d7d7, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff6f5f5, 0xffc4c3c3, 0xff6c696a, 0xff2d292a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2f2b2c, 0xff7c797a, 0xffd9d8d8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f7f7, 0xffbdbcbc, 0xff5a5757, 0xff1f1a1b, 0xff817e7f, 0xfff2f1f1, 0xfff3f2f2, 0xffdedede, 0xff524e4f, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff474344, 0xff9a9899, 0xffe3e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeeedee, 0xffaaa9a9, 0xff4e4b4b, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfc231f20, 0x7c231f20, 0x06231f20, 0x00000000,
|
||||||
|
0x00000000, 0x1c231f20, 0xc3231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7e7c7d, 0xff1d181a, 0xff9a9898, 0xfffbfbfb, 0xffffffff, 0xfff9f9f9, 0xff848182, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff272324, 0xff7d7a7b, 0xffe9e9e9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffdfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd4d3d4, 0xff605d5e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff595656, 0xfff7f7f7, 0xffffffff, 0xfff7f7f7, 0xff7e7c7d, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff939191, 0xfffbfbfb, 0xffffffff, 0xffeae9e9, 0xff5d5a5b, 0xff8c8a8a, 0xfff8f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbab9b9, 0xff3b3738, 0xff1b1718, 0xff3c3939, 0xffb3b2b2, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xff959293, 0xff2b2728, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff484445, 0xffe6e6e6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfefe, 0xfffafafa, 0xfffcfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xff9d9b9b, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff383435, 0xffa7a6a6, 0xfffefdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xfff8f8f8, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xff696767, 0xff8b8989, 0xfffcfcfc, 0xffffffff, 0xffeaeaea, 0xff555253, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff262222, 0xff727071, 0xffdedede, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e4, 0xff757273, 0xff252122, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xc3231f20, 0x1c231f20, 0x00000000,
|
||||||
|
0x01231f20, 0x49231f20, 0xf4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff807d7e, 0xff161213, 0xff474444, 0xffdfdedf, 0xffffffff, 0xffffffff, 0xffd1d0d0, 0xff413d3e, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff828080, 0xfff4f3f3, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xffcecdcd, 0xff9c9a9a, 0xff868585, 0xff8a8787, 0xffa6a4a4, 0xffdddcdc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe0dfe0, 0xff5f5c5d, 0xff1f1b1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffececec, 0xffadabac, 0xfff2f2f2, 0xffffffff, 0xffd3d2d2, 0xffa6a4a5, 0xff908e8f, 0xff929191, 0xffb4b3b3, 0xffeeeeee, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xff959394, 0xff363333, 0xffb0afb0, 0xffffffff, 0xfffafafa, 0xffc9c8c9, 0xffa09e9f, 0xff8f8c8d, 0xff969494, 0xffbdbcbc, 0xfff6f5f6, 0xffffffff, 0xffffffff, 0xfff7f7f7, 0xff686667, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff4b4949, 0xffefeeef, 0xffffffff, 0xffdddddd, 0xffbab9ba, 0xff9e9c9d, 0xff8b898a, 0xff848182, 0xff868484, 0xff999797, 0xffbebdbe, 0xfff0f0ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xff949293, 0xff262223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2e2a2b, 0xff9f9d9e, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xfff1f1f1, 0xffb7b5b6, 0xff8d8b8c, 0xff7f7c7d, 0xff878586, 0xffaaa8a9, 0xffe2e1e2, 0xffffffff, 0xffdbdbdb, 0xffbcbbbb, 0xfffcfcfc, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff221e1f, 0xff807e7e, 0xfff0f0f0, 0xffffffff, 0xffffffff, 0xfff7f7f7, 0xffcac9c9, 0xff9e9c9c, 0xff888686, 0xff858282, 0xff959393, 0xffc0bfbf, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xffecebeb, 0xff726f70, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf4231f20, 0x49231f20, 0x01231f20,
|
||||||
|
0x04231f20, 0x8c231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff807d7e, 0xff1b1718, 0xff1e191a, 0xff8f8d8e, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xff888687, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d1a1b, 0xff5c5959, 0xffe6e5e5, 0xffffffff, 0xffffffff, 0xfff6f5f6, 0xff979495, 0xff3f3c3c, 0xff272424, 0xff221f20, 0xff221e1f, 0xff2b2728, 0xff4d494a, 0xffb6b5b5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc9c8c8, 0xff3f3b3c, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xfffcfcfc, 0xfff9f9f9, 0xfff4f4f4, 0xff918e8f, 0xff413e3f, 0xff2b2728, 0xff242021, 0xff242021, 0xff2d2a2a, 0xff6c6a6a, 0xffeae9e9, 0xffffffff, 0xffffffff, 0xffdcdcdc, 0xffb1afb0, 0xfff7f7f7, 0xffececec, 0xff7b797a, 0xff393536, 0xff292526, 0xff231f20, 0xff262223, 0xff343031, 0xff7f7d7d, 0xfff4f4f4, 0xffffffff, 0xffffffff, 0xffc1c0c0, 0xff292526, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff454243, 0xffb1afb0, 0xff7e7b7c, 0xff494647, 0xff332f30, 0xff292526, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff272224, 0xff343031, 0xff656263, 0xffd1d0d0, 0xffffffff, 0xffffffff, 0xfff2f2f2, 0xff545152, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff6c6a6b, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xffe4e3e4, 0xff6b6869, 0xff302c2d, 0xff241f20, 0xff221e1f, 0xff221e1f, 0xff2c2829, 0xff565253, 0xffc2c2c2, 0xffffffff, 0xfff8f8f8, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191b, 0xff666264, 0xffe9e8e9, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff7b7879, 0xff3b3738, 0xff282425, 0xff221e1f, 0xff221e1f, 0xff252122, 0xff353132, 0xff777575, 0xffe9e9e9, 0xffffffff, 0xffffffff, 0xffd5d4d4, 0xff4a4647, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0x8c231f20, 0x04231f20,
|
||||||
|
0x11231f20, 0xc4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff1f1b1c, 0xff383535, 0xffdcdbdb, 0xffffffff, 0xffffffff, 0xffd3d3d3, 0xff434041, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2c2829, 0xffb0afaf, 0xfffefefe, 0xffffffff, 0xfffcfcfc, 0xff9e9d9d, 0xff282525, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff383435, 0xffc7c7c7, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xff848383, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffffffff, 0xfffaf9f9, 0xff918f8f, 0xff2a2627, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff8a8889, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xfffdfdfd, 0xfff6f7f7, 0xff6b6969, 0xff211d1e, 0xff221d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2a2727, 0xffa3a1a1, 0xffffffff, 0xffffffff, 0xfff6f6f6, 0xff4d4a4b, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff282425, 0xff302c2d, 0xff242021, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231e1f, 0xff221e1f, 0xff221e1f, 0xff524f4f, 0xffdddddd, 0xffffffff, 0xffffffff, 0xffa5a4a4, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff312d2e, 0xffbfbebe, 0xffffffff, 0xffffffff, 0xfff5f4f5, 0xff625f60, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff4b4849, 0xffd5d4d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff363333, 0xffc1c1c1, 0xffffffff, 0xffffffff, 0xffededed, 0xff666464, 0xff211d1e, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1f1b1c, 0xff706e6e, 0xfff9f9f9, 0xffffffff, 0xfffdfdfd, 0xff908e8f, 0xff272223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xc4231f20, 0x11231f20,
|
||||||
|
0x2e231f20, 0xf0231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff1c1819, 0xff7d7b7b, 0xffffffff, 0xffffffff, 0xffffffff, 0xff8a8788, 0xff252122, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff535051, 0xffe2e1e1, 0xffffffff, 0xffffffff, 0xffd9d9d9, 0xff393636, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff5b5859, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff383435, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffffffff, 0xffcbcacb, 0xff3b3839, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff3f3b3c, 0xffeeedee, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa6a5a5, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221f1f, 0xff615e5e, 0xfff2f2f2, 0xffffffff, 0xffffffff, 0xff797677, 0xff1b1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff262223, 0xff939191, 0xffffffff, 0xffffffff, 0xffdedede, 0xff2f2b2c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff575354, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xffa1a09f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201d1e, 0xff817f81, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211c1e, 0xff6c696a, 0xffefefef, 0xffffffff, 0xffffffff, 0xff989797, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xffb1b0b0, 0xffffffff, 0xffffffff, 0xffcccbcb, 0xff3b3738, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf0231f20, 0x2e231f20,
|
||||||
|
0x62231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff211d1e, 0xff2f2c2d, 0xffcdcdcd, 0xffffffff, 0xffffffff, 0xffdddddd, 0xff423f40, 0xff211d1e, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff7d7b7b, 0xfff9f9f9, 0xffffffff, 0xffffffff, 0xff8f8e8e, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffbdbcbd, 0xffffffff, 0xffffffff, 0xffeaeaea, 0xff565353, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xfff9f9f9, 0xff918f90, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff282425, 0xffcdcccc, 0xffffffff, 0xffffffff, 0xfff7f7f7, 0xff5d5b5b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff474444, 0xffdad9d9, 0xffffffff, 0xffffffff, 0xff999898, 0xff1b1618, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff1f1b1c, 0xff696768, 0xfff0f0ef, 0xffffffff, 0xfff5f5f5, 0xff4c494a, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff8a8989, 0xffffffff, 0xffffffff, 0xfff7f7f7, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff454242, 0xffdedede, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2a2627, 0xffa19fa0, 0xffffffff, 0xffffffff, 0xffeeeded, 0xff444040, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff626060, 0xffffffff, 0xffffffff, 0xffeeeeee, 0xff575354, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0x62231f20,
|
||||||
|
0x8e231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff6e6b6b, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xff959394, 0xff211d1e, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2a2627, 0xffa09f9f, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xff535051, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1a1617, 0xff7e7b7c, 0xffffffff, 0xffffffff, 0xfffefefe, 0xff737172, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xfff2f2f1, 0xff686666, 0xff1c1719, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xffb7b5b5, 0xffffffff, 0xffffffff, 0xffdbdbdb, 0xff423f3f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3b3738, 0xffcecdcd, 0xffffffff, 0xffffffff, 0xffa7a6a6, 0xff1e1a1b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1f1b1c, 0xff2c2729, 0xff3b3839, 0xff4c4849, 0xff575455, 0xff5c595a, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5d5a5b, 0xff8b898a, 0xffefefef, 0xffffffff, 0xfffbfbfb, 0xff646162, 0xff1b1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xffb2b1b2, 0xffffffff, 0xffffffff, 0xffd5d4d4, 0xff373435, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff272324, 0xffbebdbd, 0xfffefefe, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff383435, 0xffc7c7c7, 0xffffffff, 0xffffffff, 0xffc3c2c2, 0xff201c1d, 0xff1d191a, 0xff1f1b1c, 0xff1e1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1c1819, 0xff3a3738, 0xffeeeeee, 0xffffffff, 0xffffffff, 0xff706e6e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0x8e231f20,
|
||||||
|
0xb4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff312e2e, 0xffbcbbbb, 0xffffffff, 0xffffffff, 0xffebebeb, 0xff4a4748, 0xff1e1a1b, 0xff221e1f, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff302d2e, 0xffb9b8b9, 0xffffffff, 0xffffffff, 0xffe6e6e6, 0xff343031, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff565254, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xff8f8c8d, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffededed, 0xff575454, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201d1e, 0xffafadae, 0xffffffff, 0xffffffff, 0xffcac9ca, 0xff373334, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff383535, 0xffc9c8c8, 0xffffffff, 0xffffffff, 0xffafadae, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff393536, 0xff777475, 0xffacaaaa, 0xffcccacb, 0xffdddddc, 0xffe5e5e5, 0xffe9e9e9, 0xffebebeb, 0xffebebeb, 0xffebebeb, 0xffebeaeb, 0xfff0f0f0, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xff706d6e, 0xff191516, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2c292a, 0xffcccbcc, 0xffffffff, 0xffffffff, 0xffbab9b9, 0xff2b2829, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xffa2a0a0, 0xfffcfcfc, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff484445, 0xffdcdcdc, 0xffffffff, 0xffffffff, 0xffc8c7c8, 0xff716f6f, 0xff747172, 0xff747273, 0xff747273, 0xff757273, 0xff757273, 0xff757273, 0xff767373, 0xff757374, 0xff767374, 0xff757273, 0xff828081, 0xffeeedee, 0xffffffff, 0xffffffff, 0xff858283, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xb4231f20,
|
||||||
|
0xd4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff686566, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xffabaaaa, 0xff211c1d, 0xff211d1e, 0xff221e1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff343031, 0xffc6c5c5, 0xffffffff, 0xffffffff, 0xffd4d4d4, 0xff2a2627, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff413e3f, 0xfff6f6f5, 0xffffffff, 0xffffffff, 0xff9f9e9e, 0xff272223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff524e4f, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadabac, 0xffffffff, 0xffffffff, 0xffc4c3c4, 0xff322f30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff5d5a5b, 0xffc8c7c8, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff322e2f, 0xffdbdada, 0xffffffff, 0xffffffff, 0xffaeacac, 0xff282425, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d191a, 0xff908e8f, 0xfffbfbfb, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff545151, 0xffe9e9e9, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xfff1f1f1, 0xfff2f1f2, 0xfff2f1f2, 0xfff2f1f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff3f3f3, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xff8d8c8c, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xd4231f20,
|
||||||
|
0xe5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff322e2f, 0xffb6b5b5, 0xffffffff, 0xffffffff, 0xfff3f3f3, 0xff5a5858, 0xff1a1617, 0xff221f1f, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373434, 0xffcac9c9, 0xffffffff, 0xffffffff, 0xffcbcacb, 0xff282425, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff3b3738, 0xfff2f1f2, 0xffffffff, 0xffffffff, 0xffa5a4a4, 0xff262223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff565454, 0xffe2e1e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff3f3f3, 0xffd1d0d0, 0xffb3b1b1, 0xffa19f9f, 0xff989696, 0xff939191, 0xff929091, 0xff918f90, 0xffafaeaf, 0xfff4f4f4, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff322f30, 0xffdfdede, 0xffffffff, 0xffffffff, 0xffa9a7a8, 0xff282425, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1c1819, 0xff8b8989, 0xfffbfbfb, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff595758, 0xfff0efef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff929091, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xe5231f20,
|
||||||
|
0xf2231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff676566, 0xffececec, 0xffffffff, 0xffffffff, 0xffb9b8b8, 0xff262223, 0xff201c1c, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff353233, 0xffc7c6c7, 0xffffffff, 0xffffffff, 0xffd2d1d1, 0xff2a2627, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff3f3b3c, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xffa2a0a1, 0xff262223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2e2a2b, 0xffc2c1c1, 0xffffffff, 0xffffffff, 0xfff5f4f4, 0xff9b9a9a, 0xff464344, 0xff2a2627, 0xff221e1f, 0xff1d191a, 0xff1c1819, 0xff1c1819, 0xff1c1819, 0xff1a1516, 0xff5c595a, 0xffe9e8e9, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff302c2d, 0xffd7d7d7, 0xffffffff, 0xffffffff, 0xffb1b0b0, 0xff292526, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e191a, 0xff959393, 0xfffcfcfc, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff585556, 0xffeeedee, 0xffffffff, 0xffffffff, 0xffc1c0c0, 0xff848282, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff898788, 0xff8b898a, 0xff565253, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf2231f20,
|
||||||
|
0xfd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff2c2829, 0xffb6b5b5, 0xfffefefe, 0xffffffff, 0xfff1f1f1, 0xff666364, 0xff1c1819, 0xffafadad, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff312e2f, 0xffbdbcbd, 0xffffffff, 0xffffffff, 0xffe1e0e1, 0xff302c2d, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff4f4b4c, 0xfffaf9f9, 0xffffffff, 0xffffffff, 0xff949292, 0xff262223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff5d5a5b, 0xfffffefe, 0xffffffff, 0xfffefefe, 0xff8c898a, 0xff201c1d, 0xff1d191a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff6a6768, 0xffefefef, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2a2627, 0xffc6c5c5, 0xffffffff, 0xffffffff, 0xffc1c0c0, 0xff2e2a2b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xffa9a8a8, 0xfffdfdfd, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff4f4c4d, 0xffe4e4e4, 0xffffffff, 0xffffffff, 0xff999797, 0xff100c0d, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff181415, 0xff171314, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfd231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff5f5d5d, 0xffeeeeee, 0xffffffff, 0xfffefefe, 0xffb9b7b8, 0xff302d2e, 0xffacabab, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2c2829, 0xffa8a6a6, 0xffffffff, 0xffffffff, 0xfff4f4f4, 0xff494647, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff726f70, 0xffffffff, 0xffffffff, 0xffffffff, 0xff7a7878, 0xff241f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff908e8e, 0xffffffff, 0xffffffff, 0xffdcdbdb, 0xff434041, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff7f7c7d, 0xfff9f9f9, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xffa8a6a7, 0xffffffff, 0xffffffff, 0xffe0dfdf, 0xff3f3b3c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff2d2a2b, 0xffc8c8c8, 0xfffefefe, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3f3c3d, 0xffd3d2d2, 0xffffffff, 0xffffffff, 0xffc7c5c6, 0xff262223, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242021, 0xffaeacad, 0xffffffff, 0xffffffff, 0xffeeeeee, 0xff6c6a6a, 0xffadabab, 0xfffdfdfd, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242121, 0xff868484, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xff7e7b7c, 0xff191516, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xffacaaab, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xff5d595a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xffa7a5a6, 0xffffffff, 0xffffffff, 0xffc6c5c5, 0xff343132, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2b2829, 0xffa9a8a8, 0xffffffff, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff7b7878, 0xffffffff, 0xffffffff, 0xfffefefe, 0xff696667, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff555153, 0xffe6e5e5, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2f2b2c, 0xffb2b1b1, 0xffffffff, 0xffffffff, 0xfff1f1f1, 0xff4a4748, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff4e4a4b, 0xffefeeee, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xffc1c0c1, 0xfffcfcfc, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff5d5a5b, 0xffe9e8e9, 0xffffffff, 0xffffffff, 0xffc7c6c6, 0xff2b2627, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff464243, 0xffebebeb, 0xffffffff, 0xffffffff, 0xffcfcece, 0xff3e3a3b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xffa8a6a6, 0xffffffff, 0xffffffff, 0xffcbcaca, 0xff383435, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4e4b4b, 0xffe3e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff484546, 0xffe8e8e8, 0xffffffff, 0xffffffff, 0xffc3c2c2, 0xff292627, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262223, 0xff9e9c9c, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff7f7c7d, 0xfff8f7f8, 0xffffffff, 0xffffffff, 0xffa3a1a1, 0xff1e1a1c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff9c9a9a, 0xffffffff, 0xffffffff, 0xfff5f5f5, 0xfff0f0f0, 0xfffefefe, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff343031, 0xffbfbebe, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xff807e7f, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff262223, 0xffafadae, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xff949293, 0xff272324, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff949192, 0xffffffff, 0xffffffff, 0xffecebec, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2c2829, 0xffb1afaf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2a2627, 0xffa6a4a5, 0xffffffff, 0xffffffff, 0xffffffff, 0xff939192, 0xff201c1d, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff211d1e, 0xff6c6a6a, 0xffebebeb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff444041, 0xffd5d4d4, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xff716e6f, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff221e1f, 0xff2d292a, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff403d3e, 0xffe4e4e4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff706d6e, 0xfff0eff0, 0xffffffff, 0xffffffff, 0xffe9e9e9, 0xff706e6f, 0xff282425, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff302c2d, 0xff969494, 0xfffafaf9, 0xffffffff, 0xffffffff, 0xffdad9d9, 0xff4d494a, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xfffdfcfc, 0xffffffff, 0xffffffff, 0xffbbb9b9, 0xff3a3738, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff373334, 0xffa5a3a3, 0xffffffff, 0xfffefefe, 0xfffefefe, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff534f50, 0xffe0dfe0, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xffa2a0a1, 0xff433f40, 0xff2a2627, 0xff252122, 0xff282425, 0xff3a3738, 0xff807d7e, 0xffeaeaea, 0xfffefefe, 0xffeeeded, 0xfffefefe, 0xffffffff, 0xffe9e8e8, 0xff555252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201b1c, 0xff7e7b7c, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xffe9e9e9, 0xff7c7a7a, 0xff302c2d, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff242021, 0xff2e2a2b, 0xff4f4c4d, 0xff9f9e9f, 0xff9c9a9b, 0xff2f2b2c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231e1f, 0xff1e1b1c, 0xff848282, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xff7f7d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff8b898a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffececec, 0xff595658, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff272425, 0xffa3a1a1, 0xfffafafa, 0xffffffff, 0xffffffff, 0xfff3f2f3, 0xffaaa9a9, 0xff6c6a6a, 0xff585556, 0xff5b5859, 0xff797677, 0xffc2c1c1, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffefeeee, 0xff7b7979, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xfff5f5f5, 0xffffffff, 0xfff5f5f5, 0xff7d7b7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff929090, 0xfffafafa, 0xffffffff, 0xffe9e9e9, 0xff514d4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffadacad, 0xffffffff, 0xffffffff, 0xffc4c3c3, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373435, 0xffc8c7c7, 0xffffffff, 0xffffffff, 0xffb0aeaf, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2e2a2b, 0xffc4c3c3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcccccc, 0xff7b7878, 0xff575354, 0xff524e4f, 0xff5c595a, 0xff848282, 0xffd2d1d1, 0xffffffff, 0xfff5f5f5, 0xffcbcbcb, 0xffeeeeee, 0xffffffff, 0xffffffff, 0xff777475, 0xff181415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff7c797a, 0xffedeced, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xffbebdbe, 0xffaeadae, 0xffb8b7b7, 0xffdddcdc, 0xffffffff, 0xffffffff, 0xffbfbebf, 0xffa5a3a4, 0xfffbfbfb, 0xffffffff, 0xffe9e8e8, 0xff545252, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff282325, 0xff9e9d9d, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xffc6c5c5, 0xff888687, 0xff636161, 0xff585556, 0xff575455, 0xff5e5b5c, 0xff726f70, 0xff959293, 0xffc3c2c2, 0xfff4f3f3, 0xffffffff, 0xffb5b4b4, 0xff2f2b2c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff858383, 0xfff8f7f7, 0xffffffff, 0xfff9f9f9, 0xff807d7e, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3f3c3c, 0xffd5d4d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffededed, 0xff5a5758, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff332f30, 0xffa4a3a3, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xfff0f1f1, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeae9e9, 0xff858383, 0xff252222, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585656, 0xfff6f6f6, 0xffffffff, 0xfff6f6f6, 0xff7e7c7c, 0xff201d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff939191, 0xfffbfbfb, 0xffffffff, 0xffeaeaea, 0xff524e4f, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffaeacad, 0xffffffff, 0xffffffff, 0xffc5c4c4, 0xff322e30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff383435, 0xffc9c8c9, 0xffffffff, 0xffffffff, 0xffb1afb0, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff585556, 0xffdedddd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xffe9e9e9, 0xfff4f4f4, 0xffffffff, 0xffffffff, 0xfffafafa, 0xffa4a3a3, 0xff706d6e, 0xffe6e6e6, 0xffffffff, 0xffffffff, 0xff787576, 0xff181415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff272324, 0xff7e7b7d, 0xffdfdede, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xffc2c1c1, 0xff494747, 0xff8a8788, 0xfffbfbfb, 0xffffffff, 0xffe7e6e6, 0xff514e4f, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff2c2829, 0xff918f8f, 0xffe9e9e9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffafafa, 0xfff0f0f0, 0xffefefef, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffadabac, 0xff2e2a2b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff828181, 0xfff5f5f5, 0xfffcfcfc, 0xfff7f7f7, 0xff7e7b7c, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff817f7f, 0xfff8f8f8, 0xfffdfefe, 0xfffcfcfc, 0xfffcfdfc, 0xffebeaeb, 0xff595656, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201b1d, 0xff2e2a2b, 0xff787575, 0xffcccbcc, 0xfffbfafb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff4f4f3, 0xffbab9b9, 0xff625e5f, 0xff252122, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585555, 0xfff2f2f2, 0xfffefdfd, 0xfff3f4f4, 0xff7c7a7a, 0xff211c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff908e8f, 0xfff9f8f8, 0xfffcfcfc, 0xffe7e6e6, 0xff504d4e, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211c1d, 0xffacaaaa, 0xffffffff, 0xffffffff, 0xffc3c2c2, 0xff322e2f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff383435, 0xffc7c5c6, 0xffffffff, 0xffffffff, 0xffafadad, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff232020, 0xff5b5959, 0xffc0bfbf, 0xfffafafa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdddcdd, 0xff888686, 0xff302c2d, 0xff5a5657, 0xffe7e7e7, 0xfffefefe, 0xfffffffe, 0xff767475, 0xff191415, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242021, 0xff535051, 0xff9d9b9b, 0xffd2d1d2, 0xffeeeeee, 0xfff9fafa, 0xfff7f7f7, 0xffe7e7e7, 0xffc4c3c4, 0xff858384, 0xff3d3a3b, 0xff1b1819, 0xff989797, 0xfffcfcfc, 0xffffffff, 0xffe1e0e1, 0xff4a4647, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff272324, 0xff5e5b5c, 0xffafadae, 0xffeaeaea, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff5f5f5, 0xffd1d1d1, 0xff9f9d9e, 0xff565454, 0xff262223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3b3738, 0xff575455, 0xff585556, 0xff575556, 0xff393637, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff312d2e, 0xff545152, 0xff595657, 0xff585556, 0xff585556, 0xff545152, 0xff302c2d, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff3a3637, 0xff656263, 0xff949292, 0xffb1b0b0, 0xffbdbcbc, 0xffbcbaba, 0xffacabab, 0xff898787, 0xff595656, 0xff322e2f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff302c2d, 0xff565353, 0xff595556, 0xff565454, 0xff393536, 0xff221f1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3e3a3b, 0xff585556, 0xff585556, 0xff535051, 0xff2e2b2b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff454142, 0xff5a5859, 0xff5a5758, 0xff4a4748, 0xff272324, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff282425, 0xff4b4748, 0xff595657, 0xff5a5758, 0xff454243, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff363233, 0xff666464, 0xff9a9798, 0xffb4b3b4, 0xffbdbcbc, 0xffb7b6b6, 0xffa09e9e, 0xff737172, 0xff434041, 0xff262223, 0xff211d1e, 0xff312d2e, 0xff535051, 0xff595656, 0xff595556, 0xff383435, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff292526, 0xff3b3738, 0xff4e4b4c, 0xff565454, 0xff555253, 0xff4a4647, 0xff353132, 0xff252122, 0xff1f1b1c, 0xff231e1f, 0xffb5b4b4, 0xfffefefe, 0xffffffff, 0xffd5d4d4, 0xff3a3738, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff2e2a2b, 0xff4d4a4a, 0xff787676, 0xff9e9c9d, 0xffb5b4b4, 0xffbdbcbd, 0xffbababa, 0xffb1b0b1, 0xff9c9a9b, 0xff7d7b7b, 0xff575455, 0xff3b3838, 0xff292526, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff221f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff252122, 0xff292526, 0xff272425, 0xff231f20, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211e1f, 0xff211d1e, 0xff221e1f, 0xff221f1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221f1f, 0xff221d1f, 0xff221e1f, 0xff252122, 0xff282425, 0xff262223, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff3c393a, 0xffd5d5d5, 0xffffffff, 0xfffefefe, 0xffbebdbe, 0xff272324, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff262223, 0xff292526, 0xff272425, 0xff242021, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff7b7879, 0xfff4f3f3, 0xffffffff, 0xfffbfbfb, 0xff8e8b8c, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff322e2f, 0xff312d2e, 0xff211d1e, 0xff1f1b1c, 0xff201c1d, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff211d1e, 0xff1f1b1c, 0xff221e1f, 0xff555253, 0xffd6d5d5, 0xffffffff, 0xffffffff, 0xffeaeaea, 0xff4c484a, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff727070, 0xffafadae, 0xff777475, 0xff494647, 0xff302c2d, 0xff231f20, 0xff221e1f, 0xff211e1f, 0xff2a2627, 0xff434040, 0xff7b7879, 0xffd5d4d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9b9999, 0xff201d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff838181, 0xfffafafa, 0xfff4f3f4, 0xffdbd9da, 0xffc0bfbf, 0xffacabab, 0xffa3a2a2, 0xffa8a6a6, 0xffb8b6b7, 0xffd5d4d4, 0xfff4f4f4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbcbbbc, 0xff353133, 0xff201b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff828080, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xfffcfcfc, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfefe, 0xffacaaab, 0xff3c3839, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff434041, 0xff939191, 0xffcdcccd, 0xffedecec, 0xfff7f7f7, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xffebebeb, 0xffbcbbbc, 0xff696666, 0xff2a2627, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1d191a, 0xff272324, 0xff3d3a3b, 0xff5a5758, 0xff6e6c6c, 0xff797677, 0xff7b797a, 0xff737172, 0xff605d5e, 0xff3f3b3b, 0xff231f20, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1e1a1b, 0xff1b1718, 0xff191516, 0xff181415, 0xff181415, 0xff181415, 0xff1b1718, 0xff1f1a1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2d292a, 0xff5e5c5d, 0xff696566, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696666, 0xff696566, 0xff696666, 0xff514e4f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff787576, 0xffe8e7e7, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff4f4f4, 0xffd1d1d1, 0xff464344, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff4b4849, 0xffd6d6d6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xffa2a1a1, 0xff292526, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2e2a2b, 0xffaaa8a9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefdfd, 0xfff7f6f7, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfffafafa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeaeaea, 0xff656263, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff737071, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e3e4, 0xff686566, 0xff423e3f, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff454142, 0xff464344, 0xffa19f9f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff383435, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff464344, 0xffdedddd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdedede, 0xff484546, 0xff1a1617, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1e1a1b, 0xff201c1d, 0xff8d8a8b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xff828080, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2b2829, 0xffb4b2b3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdfdedf, 0xff4c494a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff908d8d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff4b4748, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2e2a2b, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464243, 0xff464244, 0xff423f40, 0xff2b2728, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d191a, 0xff868485, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdfdedf, 0xff4c494a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff8f8d8d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb4b3b3, 0xff272425, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff838181, 0xffdadada, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d8, 0xffd9d8d9, 0xffcfcecf, 0xff676464, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1f1a1b, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1e1a1b, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff585556, 0xffeaeaea, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdfdedf, 0xff4c494a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff8f8d8d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xff787677, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff332f30, 0xffd7d5d6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa9a7a8, 0xff2b2728, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2e2b2b, 0xff413d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff423e3f, 0xff383535, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff343132, 0xffc5c3c3, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdfdedf, 0xff4c494a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff8f8d8d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdfdfdf, 0xff423e3f, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff737072, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdcdbdb, 0xff4a4748, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211e1f, 0xff969394, 0xfffaf9f9, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff8f8f8, 0xffcdcccc, 0xff332f30, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff252021, 0xff908e8e, 0xfff9f8f8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdfdedf, 0xff4c484a, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff8f8d8d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffa8a7a7, 0xff262122, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2b2728, 0xffbbb9b9, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xff7d7b7b, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff312d2e, 0xffd6d5d5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f7f7, 0xff4c494a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff5d5a5b, 0xffe5e5e5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdfdedf, 0xff4c4849, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff8f8d8e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffefeeef, 0xff696667, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff5a5758, 0xffe8e7e8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbfbdbe, 0xff302c2d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff5b5858, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff787676, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff393536, 0xffc0bebf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffededed, 0xff9b999a, 0xff828080, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848283, 0xff848282, 0xff868383, 0xffc1c0c0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc5c3c4, 0xff3c3839, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262323, 0xff9a9999, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff3f3f3, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d191a, 0xff9c9b9a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa8a6a6, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221f1f, 0xff231f20, 0xff908e8e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffeffff, 0xfffefefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xfffffefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffafafa, 0xff8a8889, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff444142, 0xffd4d3d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9b999a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff312d2e, 0xffdfdede, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdad9da, 0xff2c2829, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff676565, 0xfffafafa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffebeaea, 0xff585555, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff807e7e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeae9e9, 0xff3d393a, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff332f30, 0xff777575, 0xff7d7b7c, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7c7a7a, 0xff7e7b7c, 0xff757273, 0xff2b2728, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff767374, 0xffa19f9f, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xff9c9a9b, 0xffa09e9f, 0xff615f60, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff272223, 0xff605d5e, 0xff8a8888, 0xff878686, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff878585, 0xff888686, 0xff878485, 0xff3e3a3b, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1b1718, 0xff1c1819, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e191a, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1e1a1b, 0xff221f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d191a, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff1a1617, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff201b1c, 0xff242021, 0xff302c2d, 0xff3e3b3c, 0xff4a4747, 0xff555253, 0xff5e5b5b, 0xff5f5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5f5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5e5c5d, 0xff5f5c5d, 0xff5e5a5b, 0xff555252, 0xff4a4647, 0xff3e3a3b, 0xff2f2b2c, 0xff231f20, 0xff201c1d, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1d191a, 0xff2d2a2b, 0xff575455, 0xff848283, 0xffb4b3b4, 0xffd2d1d2, 0xffdfdede, 0xffeaeaea, 0xfff4f4f4, 0xfff6f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f3f4, 0xffeaeaea, 0xffdeddde, 0xffd0d0d0, 0xffb2b1b1, 0xff818080, 0xff555253, 0xff2b2829, 0xff1d191a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e191a, 0xff242021, 0xff605d5e, 0xffb5b3b3, 0xffe5e5e5, 0xfffaf9fa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xffe4e3e4, 0xffb0afb0, 0xff5c5959, 0xff231e20, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff3f3b3c, 0xffaaa9a9, 0xffececec, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xffebeaea, 0xffa6a4a6, 0xff3c3839, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4e4a4b, 0xffcccacb, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xffc8c7c7, 0xff4b4848, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff585556, 0xffdbdadb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd8d7d8, 0xff555253, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1c1c, 0xff484546, 0xffd7d6d6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd4d3d3, 0xff474344, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff383434, 0xffc3c2c2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff373333, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff9c9a9a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9a9898, 0xff1e1a1b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff514e4e, 0xffebebeb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeaeaea, 0xff504c4d, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff252122, 0xffaaa9aa, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xffaaa9a9, 0xff252122, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff4a4748, 0xffe0dfe0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe0dfdf, 0xff4a4747, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff787676, 0xfff4f3f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff3f3f3, 0xff777575, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2a2627, 0xffa8a6a6, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffa6a5a5, 0xff292526, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff373435, 0xffc5c4c4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc3c2c2, 0xff363333, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff3f3c3d, 0xffd2d1d2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd2d1d1, 0xff3f3b3c, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4a4748, 0xffdcdbdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdcdbdb, 0xff4a4748, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211c1e, 0xff535052, 0xffe3e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e2e2, 0xff535051, 0xff211c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff555252, 0xffe4e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff555253, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfff5f4f5, 0xffececec, 0xffe4e3e4, 0xffdcdbdb, 0xffdbdada, 0xffe3e3e3, 0xffececec, 0xfff5f4f5, 0xfffcfcfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211c1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff1f1f1, 0xffd2d1d1, 0xffafaeae, 0xff8a8889, 0xff6f6d6e, 0xff646162, 0xff5c595a, 0xff555253, 0xff4e4a4b, 0xff464344, 0xff454343, 0xff4d4a4b, 0xff555252, 0xff5c595a, 0xff646263, 0xff706e6f, 0xff898787, 0xffaeadad, 0xffd1d0d0, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e2e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xffd0cfd0, 0xff949293, 0xff696667, 0xff474444, 0xff343031, 0xff272324, 0xff242021, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff282324, 0xff343031, 0xff464243, 0xff686566, 0xff929091, 0xffcccbcb, 0xfff9f9f9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545151, 0xffe2e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xfff8f7f7, 0xffdddcdc, 0xffa09f9f, 0xff5a5757, 0xff2b2829, 0xff1d191a, 0xff1e1a1b, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff1e1a1b, 0xff1d191a, 0xff2a2627, 0xff575454, 0xff9d9b9c, 0xffdcdadb, 0xfff7f7f7, 0xfffefdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff535051, 0xffe2e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffebebeb, 0xffb6b5b5, 0xff6c696a, 0xff353132, 0xff1d191a, 0xff1c1819, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1d191a, 0xff1c1819, 0xff333030, 0xff6a6767, 0xffb1b0b0, 0xffe9e9e9, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211c1e, 0xff525050, 0xffe2e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xffaeacad, 0xff605d5e, 0xff272324, 0xff1a1617, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff1a1617, 0xff252223, 0xff5c595a, 0xffa9a8a8, 0xffe5e5e5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff524f50, 0xffe2e1e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffefeeef, 0xffa7a6a6, 0xff5d5a5a, 0xff2c2829, 0xff1e1a1b, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1e1a1b, 0xff2b2728, 0xff5a5757, 0xffa3a1a2, 0xffecebeb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff524f50, 0xffe2e1e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcdcccd, 0xff605d5d, 0xff2b2728, 0xff211d1e, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221d1e, 0xff211d1e, 0xff2a2627, 0xff595657, 0xffc3c3c3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff524f50, 0xffe2e1e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f7f7, 0xff999797, 0xff343132, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff332f30, 0xff928f90, 0xfff3f2f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff524f50, 0xffe1e1e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffd6d5d5, 0xff666464, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff221e1f, 0xff646061, 0xffd3d2d2, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff524e4f, 0xffe1e1e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffaf9fa, 0xffb6b4b5, 0xff423f3f, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1c1718, 0xff3e3a3b, 0xffb2b0b1, 0xfff9f9f9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff514e4f, 0xffe1e0e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f7f8, 0xffa2a0a1, 0xff353233, 0xff1c191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff302c2d, 0xff9a9899, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff504e4e, 0xffe1e0e0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff4f3f3, 0xff888687, 0xff2d292a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff2a2728, 0xff827f7f, 0xffefefef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff504d4e, 0xffe1e0e0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffecebec, 0xff716e6f, 0xff272324, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff272425, 0xff6f6d6e, 0xffe7e7e7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff504d4e, 0xffe0e0e0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff1f0f1, 0xff726f70, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff716f6f, 0xffeeeeee, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff504d4e, 0xffe0dfe0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff4f4f4, 0xff8a8888, 0xff262223, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221d1e, 0xff888686, 0xfff4f4f4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff504d4d, 0xffe0dfdf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xff9f9d9d, 0xff2b2727, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff201c1d, 0xff211d1e, 0xff252222, 0xff2e2a2b, 0xff333031, 0xff363334, 0xff3a3738, 0xff3b3738, 0xff373334, 0xff343031, 0xff2f2b2c, 0xff262223, 0xff211e1f, 0xff1f1b1c, 0xff201b1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff242122, 0xff999797, 0xfffafafa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff504c4d, 0xffe0dfdf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffaeacac, 0xff312d2e, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1d1819, 0xff242021, 0xff3c3839, 0xff5d5b5b, 0xff7b7979, 0xff959393, 0xffafadad, 0xffbebdbd, 0xffc6c5c5, 0xffcdcccc, 0xffcecdcd, 0xffc7c6c6, 0xffbfbebe, 0xffb1afaf, 0xff979595, 0xff7d7a7c, 0xff615d5e, 0xff3e3a3b, 0xff252122, 0xff1d191a, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff2a2728, 0xffa4a2a2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff504c4d, 0xffe0dfdf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcbcaca, 0xff383535, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1c1819, 0xff343031, 0xff6f6c6d, 0xffa6a5a5, 0xffcecdce, 0xffe8e8e8, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f7f7, 0xffe9e9e9, 0xffd0d0d0, 0xffa9a8a8, 0xff737070, 0xff363334, 0xff1c1819, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff333031, 0xffbbb9ba, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4f4c4c, 0xffdfdfdf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffefefef, 0xff555253, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1b1718, 0xff3b3839, 0xff8b8888, 0xffd2d1d1, 0xfff3f3f3, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xfff4f4f4, 0xffd6d5d5, 0xff8f8d8e, 0xff403d3d, 0xff1d1819, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221d1e, 0xff4e4b4c, 0xffe2e1e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4f4b4c, 0xffdfdedf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff868384, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff2f2b2c, 0xff807d7d, 0xffe0e0e0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffe3e3e3, 0xff858384, 0xff322e2f, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff7f7c7d, 0xfff8f8f8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4e4b4c, 0xffdfdede, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbab9b9, 0xff312d2e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff272324, 0xff5b5858, 0xffc6c5c5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcbcbcb, 0xff5f5c5d, 0xff282425, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff332f30, 0xffb5b3b4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e4, 0xff555252, 0xff211c1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff423e3f, 0xffaaa8a9, 0xffc2c1c1, 0xffc0bebf, 0xffc0bfbf, 0xffc0bfbf, 0xffc0bfbf, 0xffc0bfbf, 0xffc0bfbf, 0xffc0bfbf, 0xffc0bfbf, 0xffc1bfbf, 0xffc1bfbf, 0xffc1bfbf, 0xffc1bfbf, 0xffc1bfbf, 0xffc1bfbf, 0xffc1bfc0, 0xffc1bfc0, 0xffc1c0c0, 0xffc1c0c0, 0xffc1c0c0, 0xffc1c0c0, 0xffc1c0c0, 0xffc1c0c0, 0xffc1c0c0, 0xffc1c0c0, 0xffc1c0c1, 0xffc1c0c1, 0xffc1c0c1, 0xffc1c0c1, 0xffc1c0c1, 0xffc2c1c1, 0xffc2c1c1, 0xffc2c1c1, 0xffc2c1c1, 0xffc2c1c1, 0xffc2c1c1, 0xffc2c1c1, 0xffc2c1c1, 0xffc3c1c2, 0xffc3c1c2, 0xffc3c2c2, 0xffc3c2c2, 0xffc3c2c2, 0xffc3c2c2, 0xffc3c2c2, 0xffc3c2c2, 0xffc3c2c2, 0xffc3c2c2, 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffc3c3c3, 0xffc3c3c3, 0xffc3c3c3, 0xffc4c3c3, 0xffc4c3c3, 0xffc4c3c3, 0xffc4c3c3, 0xffc4c3c3, 0xffc4c3c3, 0xffc5c3c4, 0xffc5c3c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc5c4c4, 0xffc7c6c6, 0xffbab9ba, 0xff524f50, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff343031, 0xff888686, 0xffeaeaea, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xff8f8e8e, 0xff383435, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1a1b, 0xff535051, 0xffc0bfc0, 0xffd2d1d1, 0xffd1d1d1, 0xffd1d1d1, 0xffd1d1d1, 0xffd2d1d1, 0xffd2d1d1, 0xffd2d1d1, 0xffd2d1d1, 0xffd2d1d1, 0xffd3d2d2, 0xffd3d2d2, 0xffd3d2d2, 0xffd3d2d2, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d3d3, 0xffd3d3d3, 0xffd3d3d3, 0xffd4d3d3, 0xffd4d3d3, 0xffd3d3d3, 0xffd4d4d4, 0xffd5d4d4, 0xffd5d4d4, 0xffd5d4d4, 0xffd5d4d4, 0xffd5d4d4, 0xffd5d4d4, 0xffd5d4d4, 0xffd5d4d4, 0xffd5d4d5, 0xffd5d5d5, 0xffd5d5d5, 0xffd6d5d5, 0xffd6d5d6, 0xffd6d6d6, 0xffd6d6d6, 0xffd6d6d6, 0xffd7d6d6, 0xffd7d6d6, 0xffd7d6d6, 0xffd7d6d6, 0xffdad9d9, 0xffc3c2c2, 0xff4b4849, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff2d292a, 0xff2e2b2c, 0xff2f2a2c, 0xff2f2b2c, 0xff2f2b2c, 0xff2f2b2c, 0xff2f2b2c, 0xff2f2b2c, 0xff2f2b2c, 0xff2f2b2c, 0xff2f2c2c, 0xff2f2c2c, 0xff2f2c2c, 0xff2f2c2d, 0xff2f2c2d, 0xff2f2c2d, 0xff2f2c2d, 0xff2f2c2d, 0xff302c2d, 0xff302c2d, 0xff302c2d, 0xff302c2d, 0xff302c2d, 0xff302c2d, 0xff302c2d, 0xff302c2d, 0xff302d2e, 0xff302d2e, 0xff302d2e, 0xff302d2e, 0xff302d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312d2e, 0xff312e2f, 0xff312e2f, 0xff312e2f, 0xff312e2f, 0xff312e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322e2f, 0xff322f2f, 0xff322f30, 0xff322f30, 0xff322f30, 0xff322f30, 0xff322f30, 0xff332f30, 0xff332f30, 0xff332f30, 0xff332f30, 0xff332f30, 0xff332f30, 0xff332f30, 0xff332f30, 0xff333030, 0xff333030, 0xff343030, 0xff343031, 0xff2f2c2d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff413e3f, 0xffb2b1b2, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefffe, 0xffbbbaba, 0xff4b4748, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xff373435, 0xff3e3a3b, 0xff3e3a3b, 0xff3e3a3b, 0xff3e3b3b, 0xff3e3b3b, 0xff3f3b3b, 0xff3f3b3c, 0xff3f3b3c, 0xff3f3c3c, 0xff3f3b3c, 0xff3f3b3d, 0xff3f3c3d, 0xff3f3c3d, 0xff403c3d, 0xff403c3d, 0xff403c3d, 0xff403c3d, 0xff403d3d, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff403d3e, 0xff413d3e, 0xff413d3e, 0xff413d3e, 0xff413e3f, 0xff413e3f, 0xff413e3f, 0xff413e3f, 0xff413e3f, 0xff413e3f, 0xff423e3f, 0xff423e3f, 0xff423f3f, 0xff423f40, 0xff423f40, 0xff423f40, 0xff423f40, 0xff423f40, 0xff433f40, 0xff433f40, 0xff433f40, 0xff433f40, 0xff434041, 0xff3f3c3d, 0xff2a2627, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211c1e, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff211c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff211c1d, 0xff231e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff4f4c4d, 0xffcac8c8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcfcece, 0xff585556, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff4f4c4d, 0xffd3d3d3, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd9d8d8, 0xff555152, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff454242, 0xffcacaca, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd1d1d1, 0xff464343, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff444041, 0xffa3a1a2, 0xffb6b4b5, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb4b2b3, 0xffb6b4b5, 0xff5b5859, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff373334, 0xffb8b7b7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc4c3c4, 0xff373334, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff464243, 0xffadabab, 0xffb0afaf, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb0aeae, 0xffb1b0b0, 0xffa2a0a1, 0xff474445, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff575454, 0xffeae9ea, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff1f1f1, 0xff464344, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262223, 0xff928f90, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa19fa0, 0xff262223, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff383435, 0xffdedddd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0efef, 0xff5e5b5c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211c1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa6a5a5, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff696667, 0xfff4f4f4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xff7a7778, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff8d8b8c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff5c5959, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xff585556, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454143, 0xffdeddde, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e2e2, 0xff535050, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff504c4d, 0xffe9e8e9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff5c5959, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc5c5c5, 0xff2c2829, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xffadabab, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xffb3b1b1, 0xff2a2627, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2f2b2c, 0xffb5b4b4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xff5c5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff8e8b8c, 0xff211e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff5a5758, 0xfff0f0f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffebebeb, 0xff636161, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff838182, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e8e8, 0xff5b5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f7f7, 0xff5b5959, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2a2627, 0xffb2b1b2, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb2b0b0, 0xff312d2e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff5c5959, 0xffe9e8e8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e8e8, 0xff5b5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd4d4d4, 0xff3c3839, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff5c5a5b, 0xffe9e9e9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffecebec, 0xff5d5a5b, 0xff221d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff3d393a, 0xffcccbcb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e8e8, 0xff5b5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa9a7a8, 0xff2b2728, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff252122, 0xff989696, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff979596, 0xff272324, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff282325, 0xffa6a4a4, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e8e8, 0xff5b5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff828080, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff3d393a, 0xffcccacb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd3d2d2, 0xff3a3637, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201b1d, 0xff817f80, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e8, 0xff5b5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff3f3f3, 0xff6a6767, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff666364, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xff666465, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff656263, 0xffeeeded, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e8, 0xff5b5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e2e2, 0xff545152, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff272224, 0xff908e8f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9b9999, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff4c494a, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e8, 0xff5a5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd2d2d2, 0xff413d3e, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2e292a, 0xffb5b4b4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc4c2c3, 0xff292526, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff373334, 0xffd1d0d0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e8, 0xff5a5859, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbebdbd, 0xff343031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff3d3a3a, 0xffd7d6d6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeae9e9, 0xff3b3838, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff262223, 0xffbdbcbc, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e7, 0xff5a5758, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb1afb0, 0xff2d292a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff514d4e, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfcfc, 0xff5a5758, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xffadabac, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e7, 0xff5a5758, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa9a8a8, 0xff292627, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff5f5c5d, 0xfffdfefd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff706e6f, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201b1d, 0xffa2a0a0, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e7, 0xff5a5758, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa1a0a0, 0xff252122, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff6c6a6b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff7e7c7d, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff979595, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e7, 0xff5a5758, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xff999798, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff7b7879, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff8d8b8b, 0xff191516, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d1819, 0xff8c8a8b, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe8e7e7, 0xff5a5757, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xff929191, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff868384, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff989697, 0xff1b1618, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff848182, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xff5a5757, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xff969595, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff827f80, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff949292, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff888687, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xff5a5757, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xff9e9d9d, 0xff241f21, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff777576, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff8a8788, 0xff191516, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d191a, 0xff929090, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xff5a5757, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa5a3a5, 0xff272324, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff6a6768, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff7c7a7a, 0xff1b1618, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1a1b, 0xff9b9a9a, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xff5a5757, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffadabab, 0xff2b2728, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545051, 0xfff7f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xff615e5e, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xffa4a3a4, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xff5a5757, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb9b8b8, 0xff312e2e, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff444243, 0xffe2e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff5f5f5, 0xff444142, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xffb5b4b4, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff5a5657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcecdcd, 0xff3d393a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff353132, 0xffc9c7c8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdbdada, 0xff312e2f, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff2f2b2c, 0xffcbcaca, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff595657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdedddd, 0xff4c494a, 0xff211d1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff292526, 0xffa1a0a0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffadacac, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff423f3f, 0xffdbdada, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff595657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffececec, 0xff605d5d, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff767374, 0xfffafafa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff7a7778, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff565354, 0xffe8e8e8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff595657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffafafa, 0xff767475, 0xff221f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4e4a4b, 0xffdfdede, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e9e9, 0xff4a4748, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e191b, 0xff6f6d6d, 0xfff1f0f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff595657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9c9b9b, 0xff282526, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2e2a2b, 0xffb2b0b1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb5b3b4, 0xff2d292a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff969495, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff595657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc6c5c5, 0xff343031, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff797677, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffafafa, 0xff777575, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff312e2f, 0xffbbbaba, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff595657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e8e9, 0xff4c4849, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff3c393a, 0xffd0cfcf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcfcece, 0xff413e3f, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff494646, 0xffdbdada, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff595657, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff716e6f, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d1a1b, 0xff878585, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xff8a8989, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff6a6768, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e6e6, 0xff585656, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffafadae, 0xff252123, 0xff231e20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff373335, 0xffd2d2d2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd2d2d2, 0xff423e3f, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff282425, 0xff9c9a9a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e6e6, 0xff585556, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffebebeb, 0xff423f3f, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff686566, 0xfffafbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xff797677, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3e3a3b, 0xffd4d3d3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e6e6, 0xff585556, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff838081, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xffa7a5a6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbab9b9, 0xff292525, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff6a6768, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e6, 0xff585556, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcbcaca, 0xff292627, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff393536, 0xffcecdce, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdbdbdb, 0xff434041, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff262223, 0xffaeadad, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e6, 0xff585556, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffafafa, 0xff656264, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff595657, 0xffe2e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffececec, 0xff636162, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff4d4a4a, 0xffeeeeee, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e6, 0xff585556, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff292525, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff71706f, 0xffebeaea, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff1f0f0, 0xff787576, 0xff221f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xffa5a4a4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e5, 0xff585555, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff2f2f2, 0xff676465, 0xff1c1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262223, 0xff7e7c7c, 0xfff2f2f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff4f4f4, 0xff827f80, 0xff282425, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff4d4a4b, 0xfff0f0f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e5, 0xff585555, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffb8b7b7, 0xff2b2729, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff797777, 0xfff2f2f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff2f1f2, 0xff807e7f, 0xff282425, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201b1c, 0xffa9a7a7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e5, 0xff585555, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffefefef, 0xff6d6b6b, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff6c696a, 0xffe7e7e7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeae9e9, 0xff777475, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff5c595a, 0xfff0efef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e5, 0xff585455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc4c3c4, 0xff3b3839, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1c1819, 0xff4f4c4d, 0xffc4c3c3, 0xfffbfafb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xffcccacb, 0xff585656, 0xff1c1819, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff322e2f, 0xffbebdbd, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e5, 0xff585455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xff858384, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff373435, 0xff929091, 0xffe1e0e0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff999797, 0xff3b3839, 0xff1c1819, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff7d7a7a, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e5e5, 0xff575455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe1e0e0, 0xff4e4b4c, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201b1c, 0xff252122, 0xff565354, 0xffa9a7a8, 0xffededed, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xffaeacad, 0xff5a5758, 0xff272324, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff484546, 0xffd4d3d3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e5e5, 0xff575455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc1c0c0, 0xff302d2e, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff2d292a, 0xff575354, 0xffa5a4a4, 0xffebebeb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffefefef, 0xffadabac, 0xff5b5959, 0xff2e2b2c, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2e2b2b, 0xffaeacad, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e5e5, 0xff575455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9d9b9c, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff272324, 0xff444142, 0xff838182, 0xffcac9ca, 0xfff2f2f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff3f3f4, 0xffcdcccd, 0xff888686, 0xff474444, 0xff282425, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff838182, 0xfffdfefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e5e5, 0xff575455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9fafa, 0xff747172, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1e191a, 0xff272425, 0xff454243, 0xff767373, 0xffa3a1a2, 0xffc4c3c3, 0xffdddbdc, 0xffe7e6e6, 0xffebebeb, 0xffefefef, 0xffefefef, 0xffecebeb, 0xffe7e7e7, 0xffdedede, 0xffc5c4c5, 0xffa6a4a5, 0xff7a7777, 0xff494546, 0xff292526, 0xff1e1a1b, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1a1c, 0xff5c595a, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e5, 0xff575455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe6e5e5, 0xff5f5c5d, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e191a, 0xff1a1517, 0xff1d191a, 0xff242021, 0xff302c2d, 0xff413d3e, 0xff4a4747, 0xff524f50, 0xff535051, 0xff4b4748, 0xff423e3f, 0xff312e2e, 0xff252122, 0xff1e1a1b, 0xff1a1517, 0xff1d191a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231e20, 0xff1f1b1b, 0xff4e4c4c, 0xffdddcdc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e5, 0xff575455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd7d7d7, 0xff565354, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1f1b1c, 0xff1e1a1b, 0xff1d191a, 0xff1c1819, 0xff1c1819, 0xff1d1819, 0xff1e1a1b, 0xff1f1b1c, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff4b4849, 0xffd0d0d0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e5e5, 0xff575455, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcccccc, 0xff4a4748, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff444041, 0xffc5c4c4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e5e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcccbcb, 0xff484546, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff433f40, 0xffc1c0c0, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e5e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdad9d9, 0xff504d4e, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff454243, 0xffcccacb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff5e5c5c, 0xff211e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221d1e, 0xff504d4e, 0xffd6d6d6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e9ea, 0xff7d7b7b, 0xff2e2a2b, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff2a2627, 0xff726f6f, 0xffe2e2e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff6f5f6, 0xffa4a3a4, 0xff423e3f, 0xff1e1a1b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d191a, 0xff3c3839, 0xff9b9a9a, 0xfff3f2f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe5e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffcac9ca, 0xff666464, 0xff231e1f, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff211d1e, 0xff5d5b5b, 0xffc3c2c2, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0efef, 0xffa9a8a9, 0xff433f40, 0xff1c1718, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1b1718, 0xff393637, 0xff9d9c9c, 0xffececec, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffe3e1e1, 0xff7e7b7b, 0xff2f2b2c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201b1d, 0xff2b2628, 0xff737171, 0xffdcdcdc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcccbcb, 0xff727070, 0xff363233, 0xff241f20, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff332f30, 0xff6b696a, 0xffc5c4c5, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff565354, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcac9ca, 0xff7d7a7b, 0xff484445, 0xff2b2728, 0xff201c1d, 0xff1f1b1c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff1f1b1c, 0xff2a2627, 0xff444142, 0xff767374, 0xffc3c2c2, 0xfffcfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff565254, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfcfd, 0xffdad9d9, 0xffa9a7a8, 0xff716e6f, 0xff413d3e, 0xff252122, 0xff1d191a, 0xff1b1718, 0xff1f1b1c, 0xff221d1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff1c1819, 0xff1d1819, 0xff242021, 0xff3d3a3b, 0xff6c6a6b, 0xffa4a2a3, 0xffd6d5d6, 0xfff9fafa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff565254, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff1f1f1, 0xffd5d3d3, 0xffb0aeaf, 0xff838182, 0xff575455, 0xff322e30, 0xff221d1f, 0xff1c1819, 0xff191516, 0xff1b1718, 0xff1e1a1b, 0xff1f1b1c, 0xff201c1d, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211c1d, 0xff201c1d, 0xff1f1b1c, 0xff1e1a1b, 0xff1b1718, 0xff191516, 0xff1b1718, 0xff201c1d, 0xff302d2d, 0xff545253, 0xff7f7d7d, 0xffadabab, 0xffd2d1d1, 0xffefefef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff565253, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xfff8f8f8, 0xffeeeeee, 0xffd8d7d7, 0xffb7b6b6, 0xff989697, 0xff7a7778, 0xff5d595a, 0xff444041, 0xff363334, 0xff2f2c2d, 0xff2c2829, 0xff2a2526, 0xff292627, 0xff2c2829, 0xff2f2b2c, 0xff363234, 0xff413e3f, 0xff5b5758, 0xff777576, 0xff959494, 0xffb5b4b4, 0xffd5d5d5, 0xffededed, 0xfff8f7f7, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e3, 0xff565253, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xfff0f0f0, 0xffececec, 0xffe7e7e7, 0xffdedede, 0xffd4d3d3, 0xffd3d2d2, 0xffdddddc, 0xffe7e6e6, 0xffebebeb, 0xffefefef, 0xfff8f8f8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff555253, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e3e4, 0xff555253, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff545152, 0xffe3e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e3e4, 0xff555253, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211c1d, 0xff555252, 0xffe4e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4e3e4, 0xff565253, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff524f50, 0xffe2e1e2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe2e1e2, 0xff524f50, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff484445, 0xffdad9d9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdad9d9, 0xff474445, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff3d3a3b, 0xffd0cfd0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcfcfcf, 0xff3d3a3a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff363233, 0xffc1bfc0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbfbebe, 0xff343132, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff272324, 0xff9e9c9d, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xff9d9b9b, 0xff272223, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff6d6a6b, 0xfff0f0f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xff6c696a, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff403d3e, 0xffd9d8d8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd9d8d8, 0xff403c3d, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff969495, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xff959394, 0xff201b1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff3e3a3b, 0xffdedddd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdddcdd, 0xff3d393a, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff807e7f, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xff7e7c7c, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff292526, 0xffa5a3a4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa2a1a1, 0xff282525, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff363233, 0xffb9b8b8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb6b4b5, 0xff343132, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff423e3f, 0xffb8b6b6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb3b2b2, 0xff3f3c3c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff353132, 0xffa4a3a4, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffaf9fa, 0xffa09e9f, 0xff333031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff292526, 0xff7c7979, 0xffd9d9d9, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xffd7d5d6, 0xff777474, 0xff272324, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1b1617, 0xff3a3636, 0xff8e8c8d, 0xffd1d0d0, 0xffebebeb, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffafafa, 0xffeaeaea, 0xffcecdce, 0xff8a8888, 0xff373333, 0xff1a1617, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1f1a1c, 0xff393536, 0xff625f60, 0xff929090, 0xffb2b0b1, 0xffc2c0c1, 0xffcecece, 0xffd7d6d6, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd8d7d7, 0xffd7d6d6, 0xffcecdcd, 0xffc0bfc0, 0xffb1afb0, 0xff908e8e, 0xff605c5d, 0xff373334, 0xff1e1a1b, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff1e1a1b, 0xff242021, 0xff2e2a2b, 0xff363233, 0xff3d393a, 0xff434041, 0xff454242, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454142, 0xff454242, 0xff434041, 0xff3c393a, 0xff363233, 0xff2e2a2b, 0xff231f20, 0xff1e1a1b, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff232021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff232020, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff232020, 0xff232021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff232021, 0xff232021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff252122, 0xff252122, 0xff262223, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff393536, 0xffa1a0a0, 0xffb3b2b3, 0xffb1b0b0, 0xff726f70, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff4c4849, 0xffa9a7a7, 0xffb3b2b2, 0xffb2b0b0, 0xff5b5859, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff787576, 0xffb4b2b2, 0xffb4b2b3, 0xffa09e9f, 0xff312d2e, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff8c8a8b, 0xffb5b3b3, 0xffb4b2b3, 0xff898788, 0xff2e2a2b, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff322e2f, 0xff807d7e, 0xff8d8b8c, 0xff8d8b8b, 0xff8e8c8d, 0xff625f60, 0xff262323, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff464343, 0xffebebeb, 0xffffffff, 0xffffffff, 0xffa09e9f, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff646162, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xff7c7a7b, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa9a7a7, 0xffffffff, 0xffffffff, 0xffe8e8e8, 0xff393536, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff252022, 0xffcac9ca, 0xffffffff, 0xffffffff, 0xffc5c4c5, 0xff343132, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff6b6869, 0xfff4f4f4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcbcaca, 0xff3b3839, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff383535, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c2c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff262223, 0xffacabab, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff6f5f5, 0xff666364, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff464343, 0xffebebea, 0xffffffff, 0xffffffff, 0xffa09e9e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff383535, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff4a4747, 0xffdddcdc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa6a4a5, 0xff282425, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff393536, 0xffa4a2a3, 0xffb6b4b5, 0xffb4b2b3, 0xff727071, 0xff211e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff383535, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211e1f, 0xff7e7c7e, 0xfff6f6f6, 0xffffffff, 0xfff8f8f8, 0xffd8d7d7, 0xfffdfdfd, 0xffffffff, 0xffe4e3e3, 0xff413d3e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff242021, 0xff241f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff383535, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff322e2f, 0xffb8b7b7, 0xffffffff, 0xffffffff, 0xffd7d7d7, 0xff656263, 0xfff0f0f0, 0xffffffff, 0xffffffff, 0xff7c797a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff383535, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff211d1e, 0xff211c1d, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff555353, 0xffe7e7e6, 0xffffffff, 0xffffffff, 0xff939292, 0xff2c2829, 0xffc3c1c2, 0xffffffff, 0xffffffff, 0xffc7c6c6, 0xff292627, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff1d191a, 0xff211d1e, 0xff282425, 0xff343031, 0xff3b3738, 0xff3e3a3b, 0xff3a3738, 0xff353132, 0xff282425, 0xff201b1d, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1e1a1b, 0xff1f1a1b, 0xff242021, 0xff2e2a2b, 0xff383435, 0xff3d393a, 0xff3d393a, 0xff383536, 0xff2f2c2d, 0xff221f20, 0xff1e1a1b, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff383535, 0xff1f1a1c, 0xff1f1b1c, 0xff201c1d, 0xff2c282a, 0xff393637, 0xff3e3a3b, 0xff3c3839, 0xff312d2e, 0xff231f20, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1e1a1b, 0xff211d1e, 0xff2c292a, 0xff383535, 0xff3d3a3a, 0xff3e3a3b, 0xff373435, 0xff2b2728, 0xff201c1d, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff8d8b8c, 0xffffffff, 0xffffffff, 0xfff3f4f4, 0xff4d494b, 0xff201c1d, 0xff868485, 0xfffefefe, 0xffffffff, 0xfff9f8f8, 0xff585556, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff454243, 0xff8a8889, 0xff8b8989, 0xff8b898a, 0xff464344, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff565354, 0xff8d8b8c, 0xff8b8a89, 0xff848283, 0xff363233, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1f, 0xff373334, 0xff5f5c5d, 0xff878586, 0xffa8a7a7, 0xffbebcbd, 0xffcbc9ca, 0xffd0d0d0, 0xffcbcaca, 0xffbfbebe, 0xffa6a4a4, 0xff7b7879, 0xff3f3c3d, 0xff1e1a1b, 0xff221d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211c1d, 0xff332f30, 0xff7d7b7c, 0xff8a8888, 0xff898787, 0xff5b5858, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff282425, 0xff4a4647, 0xff727070, 0xff999797, 0xffb3b1b2, 0xffc5c4c4, 0xffcfcece, 0xffcfcdce, 0xffc6c5c5, 0xffb6b4b5, 0xff939292, 0xff5f5d5d, 0xff2b2728, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff373434, 0xff1a1617, 0xff3c3839, 0xff7d7b7b, 0xffaeadad, 0xffc7c6c7, 0xffd1d0d0, 0xffcccbcb, 0xffb9b8b8, 0xff8f8d8e, 0xff4d494a, 0xff1f1b1c, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff242021, 0xff514d4e, 0xff8a8788, 0xffb0aeaf, 0xffc5c4c4, 0xffcfcece, 0xffd0cfcf, 0xffc5c4c4, 0xffacabab, 0xff807d7e, 0xff423f40, 0xff1d1a1b, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff363233, 0xffcdcccc, 0xffffffff, 0xffffffff, 0xffbdbcbc, 0xff272324, 0xff201c1d, 0xff524f50, 0xffe3e2e3, 0xffffffff, 0xffffffff, 0xffa4a2a2, 0xff1e191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff4e4b4b, 0xffe1e0e0, 0xfffcfcfc, 0xfffefefe, 0xff9d9b9c, 0xff1e1a1b, 0xff231e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff282425, 0xffbab9b9, 0xfffefefe, 0xfffefefe, 0xffcccbcb, 0xff363233, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221d1f, 0xff7e7c7d, 0xffcfcece, 0xffeaeaea, 0xfff7f7f8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xfff5f5f5, 0xffd7d7d7, 0xff7c7a7b, 0xff221f20, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e191a, 0xff434041, 0xffdfdedf, 0xfff9f8f8, 0xfff5f5f5, 0xff989697, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff413e3e, 0xffabaaaa, 0xffdfdfdf, 0xfff1f1f1, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xffebebeb, 0xffb4b3b3, 0xff454142, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff363334, 0xff585556, 0xffcac9c9, 0xfff5f4f5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffafafa, 0xffdfdede, 0xff858283, 0xff252223, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff393536, 0xff9f9d9d, 0xffe3e2e3, 0xfff9f8f9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff6f5f6, 0xffd7d6d6, 0xff7c7a7a, 0xff252021, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff625f60, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xff757374, 0xff1f1b1c, 0xff221e1f, 0xff302c2d, 0xffb6b5b5, 0xffffffff, 0xffffffff, 0xffe3e3e3, 0xff3b3738, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff302c2d, 0xffb4b3b3, 0xffffffff, 0xffffffff, 0xffe2e2e2, 0xff363233, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff4d4a4b, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xff929090, 0xff252223, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff231f20, 0xffb7b7b7, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xfff3f3f4, 0xfff2f2f2, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff8f8f8, 0xff949393, 0xff221d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b9a9a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff585556, 0xffe5e4e4, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfff5f6f5, 0xfff2f2f3, 0xfff3f3f3, 0xfffbfafb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd8d7d7, 0xff484445, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e1e1, 0xff6b6869, 0xffdadada, 0xffffffff, 0xffffffff, 0xfff9faf9, 0xfff1f1f1, 0xfff2f2f2, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff5f4f5, 0xff918f90, 0xff262122, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff444142, 0xffcdcccd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xfff3f3f3, 0xfff3f3f3, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff4f3f4, 0xff929091, 0xff272324, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xffa9a8a9, 0xffffffff, 0xffffffff, 0xffe0dfdf, 0xff403c3d, 0xff221e1f, 0xff231f20, 0xff201c1d, 0xff7e7c7c, 0xfff5f5f5, 0xffffffff, 0xfffcfcfc, 0xff7b787a, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff797878, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xff747272, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff949293, 0xffffffff, 0xffffffff, 0xffebeaeb, 0xff585455, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff231f20, 0xffb8b6b7, 0xfff7f7f7, 0xffd5d5d5, 0xff9c9b9b, 0xff6f6d6d, 0xff514e4f, 0xff413e3f, 0xff3e3a3b, 0xff4b4849, 0xff726f70, 0xffb6b5b5, 0xfff2f2f2, 0xffffffff, 0xffffffff, 0xfff5f5f5, 0xff6f6c6d, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff595656, 0xffe4e4e4, 0xffedecec, 0xffbbbaba, 0xff848282, 0xff5f5d5d, 0xff484445, 0xff3e3a3b, 0xff423e3f, 0xff5a5758, 0xff8e8c8d, 0xffd8d8d8, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffc5c4c4, 0xff2e2a2b, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfff0f0f0, 0xffd7d7d7, 0xffffffff, 0xffeeeded, 0xff9e9c9c, 0xff575354, 0xff3a3738, 0xff3d3a3b, 0xff646061, 0xffb7b5b5, 0xfff7f6f6, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xff716e6f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff3c3839, 0xffd1d0d1, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xffd7d6d6, 0xff8d8b8b, 0xff575455, 0xff413e3e, 0xff413e3f, 0xff5d5a5b, 0xffa2a0a0, 0xffedecec, 0xffffffff, 0xffffffff, 0xfff2f2f2, 0xff777575, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff403c3d, 0xffe9e9e9, 0xffffffff, 0xffffffff, 0xffa5a4a4, 0xff292525, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff484546, 0xffdedddd, 0xffffffff, 0xfffefefe, 0xffbfbebe, 0xff2a2627, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff494546, 0xffd9d8d8, 0xffffffff, 0xffffffff, 0xffbcbbbc, 0xff242122, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff322e2f, 0xffd9dad9, 0xffffffff, 0xffffffff, 0xffbdbcbd, 0xff343132, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262122, 0xff817f7f, 0xff6a6768, 0xff2d292a, 0xff1b1718, 0xff1a1517, 0xff1d191a, 0xff1f1b1c, 0xff1f1b1c, 0xff1e1a1b, 0xff1a1617, 0xff231f20, 0xff767274, 0xffe8e8e8, 0xffffffff, 0xffffffff, 0xffc7c5c6, 0xff332f31, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff494647, 0xff858383, 0xff484546, 0xff231e20, 0xff191516, 0xff1c1819, 0xff1e1a1b, 0xff1f1b1c, 0xff1f1b1c, 0xff1c1819, 0xff1b1718, 0xff3d393a, 0xffb0afaf, 0xfffbfbfb, 0xffffffff, 0xfffdfdfd, 0xff777576, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe2e1e1, 0xff686666, 0xff1f1b1c, 0xff1c1819, 0xff1f1b1c, 0xff1f1b1c, 0xff1a1617, 0xff242021, 0xff8c8a8b, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xffcdcccc, 0xff3f3c3d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff282425, 0xffadabab, 0xffffffff, 0xffffffff, 0xfff8f7f8, 0xffa7a6a6, 0xff393637, 0xff1b1618, 0xff1c1819, 0xff1f1b1c, 0xff1f1b1c, 0xff1b1718, 0xff1b1718, 0xff605d5e, 0xffe0dfe0, 0xffffffff, 0xffffffff, 0xffd4d3d3, 0xff434041, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff838181, 0xffffffff, 0xffffffff, 0xfff5f5f5, 0xff686566, 0xff221f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff252223, 0xffaeadae, 0xfffdfdfd, 0xffffffff, 0xffe8e8e8, 0xff575455, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff282526, 0xffa9a8a8, 0xfffdfdfd, 0xffffffff, 0xffededed, 0xff4f4b4c, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff6b696a, 0xfffcfcfc, 0xffffffff, 0xfff9f9f9, 0xff858283, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff221e1f, 0xff1c1819, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1b1718, 0xff888687, 0xfffbfbfb, 0xffffffff, 0xffecebeb, 0xff625e60, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff241f21, 0xff1e1a1b, 0xff1d191a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff3e3a3b, 0xffcfcece, 0xffffffff, 0xffffffff, 0xffbebdbe, 0xff272324, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffffffff, 0xfff3f3f3, 0xff7e7b7c, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff221e20, 0xffa5a3a3, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xff7a7878, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff656262, 0xffeeeeee, 0xffffffff, 0xfffefefe, 0xffb6b4b5, 0xff302d2e, 0xff1d1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1a1516, 0xff686566, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xff807e7f, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff2a2728, 0xffcecdcd, 0xffffffff, 0xffffffff, 0xffcecdcd, 0xff3e3b3b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff6d6b6c, 0xfff6f6f6, 0xffffffff, 0xfffafafa, 0xff939292, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff6d6a6b, 0xfff2f2f2, 0xffffffff, 0xfffbfbfb, 0xff918e8f, 0xff1e1a1b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff221e1f, 0xffb4b2b2, 0xffffffff, 0xffffffff, 0xffe0dfdf, 0xff504c4d, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff3a3637, 0xffe6e5e6, 0xffffffff, 0xfff9f9f9, 0xff898788, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1c1819, 0xff8f8c8d, 0xfffafafa, 0xffffffff, 0xffe0dfdf, 0xff423f40, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfffefefe, 0xffc9c8c9, 0xff343031, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff423e3f, 0xffe7e7e7, 0xffffffff, 0xffffffff, 0xffb9b8b8, 0xff2e2a2b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff282526, 0xffa9a7a7, 0xfffdfdfd, 0xffffffff, 0xffededed, 0xff545152, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff252222, 0xffb5b4b3, 0xffffffff, 0xffffffff, 0xffbcbcbc, 0xff2e2a2b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20,
|
||||||
|
0xfd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff5f5d5d, 0xfff8f8f8, 0xffffffff, 0xfffefefe, 0xff999798, 0xff272324, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff343132, 0xffdad9d9, 0xffffffff, 0xffffffff, 0xffcac9c9, 0xff3b3738, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff383435, 0xffd4d3d4, 0xffffffff, 0xffffffff, 0xffcac9c9, 0xff353132, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff484545, 0xffe5e5e5, 0xffffffff, 0xfffefefe, 0xffb4b2b2, 0xff2b2727, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1d191a, 0xff191516, 0xff191516, 0xff1b1718, 0xff1c1819, 0xff1d191a, 0xff1d191a, 0xff1b1718, 0xff201b1c, 0xffc9c8c9, 0xffffffff, 0xffffffff, 0xffa4a3a3, 0xff292526, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1b1718, 0xff181415, 0xff1a1517, 0xff1c1819, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff130f10, 0xff686566, 0xfff6f6f6, 0xffffffff, 0xffededed, 0xff5d5a5a, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfffbfbfb, 0xff8e8c8d, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xffaba9aa, 0xffffffff, 0xffffffff, 0xffe6e5e5, 0xff413f40, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff413e3f, 0xffd3d2d3, 0xffffffff, 0xffffffff, 0xffbfbebe, 0xff252122, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff757374, 0xffffffff, 0xffffffff, 0xffe4e4e4, 0xff3f3c3d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfd231f20,
|
||||||
|
0xf2231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201b1c, 0xffa8a7a7, 0xffffffff, 0xffffffff, 0xffeaeaea, 0xff625f60, 0xff201b1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff999898, 0xffffffff, 0xffffffff, 0xffeeeeee, 0xff676466, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff999898, 0xfffdfdfd, 0xffffffff, 0xffebebeb, 0xff636161, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1d191b, 0xff858384, 0xfff8f7f7, 0xffffffff, 0xfff5f5f5, 0xff767475, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff2d292a, 0xff504d4e, 0xff767474, 0xff8e8c8d, 0xff989797, 0xffa09e9f, 0xffa1a0a0, 0xffa1a0a0, 0xffa09f9f, 0xffa1a0a0, 0xffe4e4e4, 0xffffffff, 0xffffffff, 0xffb1afb0, 0xff2e2b2c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201b1c, 0xff221f20, 0xff3c3839, 0xff636061, 0xff838182, 0xff949292, 0xff9d9c9c, 0xffa1a0a0, 0xffa1a0a0, 0xffa1a0a0, 0xff9d9c9c, 0xffbdbcbc, 0xfffbfbfb, 0xffffffff, 0xfff1f1f1, 0xff6a6768, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfff7f7f7, 0xff636060, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff7b7979, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xff5a5758, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff5c5959, 0xffe7e7e7, 0xffffffff, 0xffffffff, 0xff908e8f, 0xff171213, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff201c1d, 0xff1e1a1b, 0xff555253, 0xfffbfbfb, 0xffffffff, 0xfffafafa, 0xff514e4f, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf2231f20,
|
||||||
|
0xe5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff403d3e, 0xffdfdfdf, 0xffffffff, 0xffffffff, 0xffc8c7c7, 0xff353233, 0xff201b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff514f4f, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xffa19f9f, 0xff2a2627, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff555153, 0xfff2f1f1, 0xffffffff, 0xfffdfdfd, 0xff9d9b9b, 0xff272324, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff302c2d, 0xffc0bfbf, 0xffffffff, 0xffffffff, 0xffdcdcdc, 0xff3d3a3b, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff373334, 0xff888586, 0xffd3d2d2, 0xfff9f8f8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbab9b9, 0xff332f30, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262223, 0xff5a5757, 0xffb0afaf, 0xffebeaea, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff3f3f3, 0xff747172, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffebebeb, 0xff494647, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff5a5859, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xff737171, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff706e6f, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xffcdcccc, 0xffa6a4a4, 0xffaaa9a9, 0xffaaa8aa, 0xffaaa9a9, 0xffaaa9a9, 0xffaba9a9, 0xffaba9aa, 0xffabaaaa, 0xffababaa, 0xffacabaa, 0xffabaaab, 0xffbdbcbc, 0xfffcfcfc, 0xffffffff, 0xfffefeff, 0xff625e5f, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xe5231f20,
|
||||||
|
0xd4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff7d7a7b, 0xfff7f7f7, 0xffffffff, 0xfffafafa, 0xff959393, 0xff242021, 0xff282425, 0xff292526, 0xff292526, 0xff292526, 0xff292526, 0xff292526, 0xff272324, 0xff2b2728, 0xffc7c6c6, 0xffffffff, 0xffffffff, 0xffd9d8d8, 0xff433f40, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff252223, 0xffc5c3c4, 0xffffffff, 0xffffffff, 0xffd0d0d0, 0xff403d3e, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff5a5758, 0xffe8e7e7, 0xffffffff, 0xffffffff, 0xffa3a2a2, 0xff1e1a1b, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff565354, 0xffcfcece, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xfff7f7f7, 0xfff1f1f1, 0xffeeedee, 0xffececec, 0xffecebeb, 0xffecebeb, 0xffecebeb, 0xfffaf9f9, 0xffffffff, 0xffffffff, 0xffbcbbbc, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2f2b2c, 0xff8f8d8d, 0xfff3f2f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xfff4f4f4, 0xffefefef, 0xffededed, 0xffecebeb, 0xffecebeb, 0xffebeaeb, 0xfff1f1f1, 0xfffefefe, 0xffffffff, 0xfff4f4f4, 0xff787676, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe5e5e5, 0xff3e3b3b, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff4f4c4c, 0xfff8f8f8, 0xffffffff, 0xffffffff, 0xff827f80, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff7c7a7a, 0xfffbfafa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff686565, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xd4231f20,
|
||||||
|
0xb4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2e2a2b, 0xffbab8b9, 0xfffefefe, 0xffffffff, 0xfffafafa, 0xffbbb9ba, 0xff979696, 0xff9b9a9a, 0xff9b9a9a, 0xff9b9a9a, 0xff9b9a9a, 0xff9b9a9a, 0xff9b9a9a, 0xff9c9a9a, 0xff979696, 0xffcfcfcf, 0xffffffff, 0xffffffff, 0xfffefefe, 0xff757273, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1717, 0xff7a7778, 0xffffffff, 0xffffffff, 0xfff4f4f4, 0xff6d6a6b, 0xff231e1f, 0xff231f20, 0xff221e1f, 0xff252122, 0xff918f8f, 0xfffcfbfb, 0xffffffff, 0xfff7f7f7, 0xff5b5859, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff494647, 0xffd3d2d2, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xffcccccc, 0xffa1a0a0, 0xff848383, 0xff726f70, 0xff676465, 0xff625f60, 0xff605d5e, 0xff5f5c5d, 0xff625e5f, 0xffd3d2d2, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff272324, 0xff858383, 0xfff8f8f8, 0xffffffff, 0xffffffff, 0xffe8e7e7, 0xffb6b5b5, 0xff929191, 0xff7b7879, 0xff6c6969, 0xff656263, 0xff615e5f, 0xff615e5e, 0xff5a5758, 0xff908e8e, 0xfff8f8f8, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe3e3e3, 0xff3b3838, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221d1e, 0xff4d4a4b, 0xfff6f6f6, 0xffffffff, 0xffffffff, 0xff848182, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff807d7e, 0xfffdfdfd, 0xffffffff, 0xffffffff, 0xffe9e8e8, 0xffdfdede, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dfdf, 0xffe1e0e0, 0xffe0e0e0, 0xff5e5b5c, 0xff211c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xb4231f20,
|
||||||
|
0x8e231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff565354, 0xffe4e3e3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffb9b8b8, 0xff2a2627, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff3a3738, 0xffe4e3e4, 0xffffffff, 0xffffffff, 0xffa8a6a7, 0xff2b2728, 0xff231f20, 0xff221e1f, 0xff3a3637, 0xffc7c6c6, 0xffffffff, 0xffffffff, 0xffcbcbcb, 0xff292527, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff272324, 0xff9b9999, 0xfffdfdfd, 0xffffffff, 0xfff9f8f8, 0xff949192, 0xff3d393a, 0xff262223, 0xff201c1d, 0xff1e1a1b, 0xff1e1a1b, 0xff1e191a, 0xff1d191a, 0xff1b1718, 0xff1f1b1c, 0xffc6c5c5, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff484445, 0xffdadada, 0xffffffff, 0xffffffff, 0xffd4d2d2, 0xff5c595a, 0xff2f2b2c, 0xff221e1f, 0xff1f1b1c, 0xff1e1a1b, 0xff1e1a1b, 0xff1d191a, 0xff1d191a, 0xff140f10, 0xff656363, 0xfff5f5f5, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe7e7e7, 0xff423e3f, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff534f50, 0xfffafbfb, 0xffffffff, 0xffffffff, 0xff7c797a, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff7b7879, 0xfffafafa, 0xffffffff, 0xffffffff, 0xff8c8a8a, 0xff484545, 0xff504d4e, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4d, 0xff504d4e, 0xff504d4e, 0xff312e2e, 0xff221f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0x8e231f20,
|
||||||
|
0x62231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff8e8b8b, 0xfffcfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff2f1f2, 0xff4d4a4b, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xffa2a1a1, 0xffffffff, 0xffffffff, 0xffe1e0e0, 0xff434041, 0xff221e1f, 0xff221e1f, 0xff625f5f, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xff818080, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff3f3b3c, 0xffcfcecf, 0xffffffff, 0xffffffff, 0xffbdbcbc, 0xff292526, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff292627, 0xffd8d7d7, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff232021, 0xff757273, 0xfffdfdfd, 0xffffffff, 0xfffafafa, 0xff5f5d5d, 0xff1e1a1b, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff787676, 0xfff7f7f7, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfff1f1f1, 0xff545152, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff686566, 0xffffffff, 0xffffffff, 0xffffffff, 0xff676566, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff6d6a6b, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xff858384, 0xff171213, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff211d1e, 0xff231e20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0x62231f20,
|
||||||
|
0x2e231f20, 0xf0231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff393536, 0xffc6c5c5, 0xffffffff, 0xffffffff, 0xfff0f0f0, 0xffa6a4a5, 0xffa2a0a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa3a1a1, 0xffa2a1a2, 0xffb6b4b4, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xff929192, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff5b5758, 0xfff9fafa, 0xffffffff, 0xffffffff, 0xff7a7878, 0xff211d1e, 0xff272324, 0xff9d9b9c, 0xffffffff, 0xffffffff, 0xffebeaea, 0xff3f3c3d, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff535051, 0xffe2e2e2, 0xffffffff, 0xffffffff, 0xff7f7d7d, 0xff1a1517, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffededed, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xff979697, 0xffffffff, 0xffffffff, 0xffd5d5d6, 0xff312d2e, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201b1c, 0xff9c9a9b, 0xfffbfbfb, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfff9f9f9, 0xff747272, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201b1c, 0xff8f8d8e, 0xffffffff, 0xffffffff, 0xfff5f4f4, 0xff4d4a4b, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff555152, 0xffe3e2e2, 0xffffffff, 0xffffffff, 0xffb7b6b6, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf0231f20, 0x2e231f20,
|
||||||
|
0x11231f20, 0xc4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221f20, 0xff605e5f, 0xfff1f1f1, 0xffffffff, 0xffffffff, 0xffacabab, 0xff1a1718, 0xff1c1819, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff1d191a, 0xff353232, 0xffcccccc, 0xffffffff, 0xffffffff, 0xffdad9da, 0xff322e2f, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff312e2f, 0xffc9c8c8, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff292526, 0xff3c3839, 0xffdad9da, 0xffffffff, 0xffffffff, 0xffaba9aa, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff5e5b5c, 0xffeaeaea, 0xffffffff, 0xffffffff, 0xff6d6b6b, 0xff1b1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1b1718, 0xff7e7c7d, 0xfffefdfe, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252223, 0xffa6a4a5, 0xffffffff, 0xffffffff, 0xffc6c4c4, 0xff2b2829, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff363233, 0xffcacaca, 0xffffffff, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfffdfdfd, 0xffaaa9aa, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff2c2829, 0xffc9c7c8, 0xffffffff, 0xffffffff, 0xffd1d1d1, 0xff383435, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff383536, 0xffc6c5c6, 0xffffffff, 0xffffffff, 0xffe7e7e7, 0xff464344, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xc4231f20, 0x11231f20,
|
||||||
|
0x04231f20, 0x8c231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff272324, 0xff9f9d9d, 0xffffffff, 0xffffffff, 0xfffefefe, 0xff646262, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff272324, 0xff959393, 0xffffffff, 0xffffffff, 0xffffffff, 0xff6d6a6b, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff878586, 0xffffffff, 0xffffffff, 0xfff6f6f6, 0xff4d4a4a, 0xff6a6869, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xff656262, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff595657, 0xffe7e7e6, 0xffffffff, 0xffffffff, 0xff858384, 0xff181416, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff393536, 0xffcdcccc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff252122, 0xffa09e9e, 0xffffffff, 0xffffffff, 0xffdad9d9, 0xff332f30, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff201c1d, 0xff777575, 0xfff2f2f2, 0xffffffff, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffe0e0e0, 0xff4f4c4d, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff686566, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xff9c9b9b, 0xff272324, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff908f8f, 0xfffafafa, 0xffffffff, 0xfffcfcfc, 0xffa09e9e, 0xff262223, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0x8c231f20, 0x04231f20,
|
||||||
|
0x01231f20, 0x49231f20, 0xf4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff3d3a3b, 0xffdddddd, 0xffffffff, 0xffffffff, 0xffd8d7d7, 0xff322e2f, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221d1e, 0xff605d5e, 0xffececec, 0xffffffff, 0xffffffff, 0xffb9b7b8, 0xff221e20, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff504c4d, 0xffe6e5e5, 0xffffffff, 0xffffffff, 0xff9c9a9b, 0xffb4b2b2, 0xffffffff, 0xffffffff, 0xffd0cfcf, 0xff373334, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff474344, 0xffd8d7d7, 0xffffffff, 0xffffffff, 0xffcbcaca, 0xff322e2f, 0xff1b1718, 0xff211d1e, 0xff221e1f, 0xff221e1f, 0xff211d1e, 0xff1c1819, 0xff2f2b2c, 0xffa09e9f, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff242021, 0xff828081, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xff737171, 0xff1b1617, 0xff1f1b1c, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff1f1b1c, 0xff1f1b1c, 0xff575555, 0xffd7d6d6, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffffffff, 0xfffefefe, 0xffafaeaf, 0xff343132, 0xff1d191a, 0xff211d1e, 0xff221e1f, 0xff221e1f, 0xff201c1d, 0xff1a1617, 0xff474344, 0xffd5d4d4, 0xffffffff, 0xffffffff, 0xffebeaea, 0xff5b5858, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff454343, 0xffd9d8d9, 0xffffffff, 0xffffffff, 0xffefefef, 0xff828081, 0xff2a2627, 0xff1c1819, 0xff201c1d, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff201c1d, 0xff1e191b, 0xff1c1819, 0xff272424, 0xff524f50, 0xff4b4848, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf4231f20, 0x49231f20, 0x01231f20,
|
||||||
|
0x00000000, 0x1c231f20, 0xc3231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff757273, 0xffffffff, 0xffffffff, 0xffffffff, 0xff969495, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff393537, 0xffc7c6c6, 0xffffffff, 0xffffffff, 0xffececec, 0xff4c4949, 0xff1c1819, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff302c2d, 0xffb4b3b3, 0xffffffff, 0xffffffff, 0xffeeedee, 0xfff3f3f3, 0xffffffff, 0xffffffff, 0xff918f90, 0xff262223, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2d292a, 0xffafadae, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xffacabab, 0xff434041, 0xff211d1e, 0xff1d191a, 0xff1e1a1b, 0xff262223, 0xff504d4e, 0xffadabab, 0xfff7f7f7, 0xfffbfbfb, 0xfff2f2f2, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff555252, 0xffeaeae9, 0xffffffff, 0xffffffff, 0xffe3e2e2, 0xff726f70, 0xff2b2828, 0xff1e1a1b, 0xff1d191a, 0xff201b1c, 0xff332f30, 0xff777475, 0xffd8d7d7, 0xffffffff, 0xfff3f2f2, 0xfffdfdfd, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xfffafafa, 0xfff7f8f8, 0xfffbfbfb, 0xffafaeae, 0xff4c494a, 0xff242021, 0xff1d191a, 0xff1e1a1b, 0xff282425, 0xff615e5f, 0xffcbcacb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffa3a1a2, 0xff2c2829, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c3c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff726f70, 0xfff5f5f5, 0xffffffff, 0xffffffff, 0xfff0efef, 0xffa9a7a7, 0xff5a5757, 0xff2d2a2b, 0xff211c1d, 0xff1e1a1b, 0xff1f1b1c, 0xff211d1e, 0xff2a2627, 0xff434041, 0xff706d6e, 0xffaba9aa, 0xffe1e1e1, 0xff868384, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xc3231f20, 0x1c231f20, 0x00000000,
|
||||||
|
0x00000000, 0x06231f20, 0x7c231f20, 0xfc231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262223, 0xffc0bebf, 0xffffffff, 0xffffffff, 0xfff5f4f4, 0xff575455, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff949293, 0xfffafafa, 0xffffffff, 0xfffbfbfb, 0xff908e8e, 0xff1c1819, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff7a7879, 0xfff6f5f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe9e9e9, 0xff595657, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201b1c, 0xff605e5e, 0xffebeaea, 0xffffffff, 0xffffffff, 0xfffbfbfb, 0xffdfdedf, 0xffb4b3b3, 0xff9b9999, 0xffa1a0a0, 0xffc0bfbf, 0xffe6e6e6, 0xfffdfdfd, 0xffffffff, 0xffa5a2a3, 0xffc8c6c7, 0xffffffff, 0xffffffff, 0xffbcbbbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b999a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f5f, 0xffedecec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2d292a, 0xffa3a1a1, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff1f1f1, 0xffcbcbcb, 0xffa4a3a3, 0xff9a9999, 0xffadabac, 0xffd4d3d3, 0xfff3f3f3, 0xffffffff, 0xffdfdfdf, 0xff9e9c9d, 0xfff6f6f6, 0xffffffff, 0xfff4f4f4, 0xff777576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe6e5e5, 0xffa09f9e, 0xfffcfcfc, 0xfffdfdfd, 0xffe4e4e4, 0xffbbbaba, 0xff9f9d9d, 0xffa3a0a2, 0xffc5c4c4, 0xffececec, 0xfffefefe, 0xffffffff, 0xffffffff, 0xffcccbcb, 0xff433f40, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242022, 0xffc4c2c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff333031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff242021, 0xff807e7e, 0xfff9f8f8, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xffececec, 0xffd0d0d0, 0xffb2b0b0, 0xffa4a1a2, 0xffa6a3a5, 0xffb5b3b4, 0xffcdcccd, 0xffe2e1e1, 0xfff3f3f3, 0xfffdfdfd, 0xffffffff, 0xff8b8a8a, 0xff242121, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfc231f20, 0x7c231f20, 0x06231f20, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x32231f20, 0xd8231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e191a, 0xff514e4f, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffc5c4c5, 0xff332f30, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff5c5a5a, 0xffebebeb, 0xffffffff, 0xffffffff, 0xffcdcdcd, 0xff343032, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff484546, 0xffdbdada, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbdbcbd, 0xff343132, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff807e7f, 0xfff2f2f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffdfdfd, 0xffabaaaa, 0xff363233, 0xffc1bfc0, 0xffffffff, 0xffffffff, 0xffbcbcbb, 0xff343031, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff454142, 0xffe5e5e5, 0xffffffff, 0xfffbfbfb, 0xff9b9a9a, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1d191a, 0xff615f60, 0xffededec, 0xffffffff, 0xfffafafa, 0xff797778, 0xff1a1617, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff3e3b3c, 0xffc0bebf, 0xfffdfdfe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe7e6e6, 0xff666364, 0xff656263, 0xfff5f5f5, 0xffffffff, 0xfff4f4f4, 0xff787576, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff232021, 0xffa5a3a3, 0xfffefefe, 0xffffffff, 0xffe2e2e2, 0xff464244, 0xff9e9d9d, 0xfffbfbfb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd1cfcf, 0xff4b4849, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242122, 0xffc5c4c4, 0xffffffff, 0xffffffff, 0xffc0bfbf, 0xff343031, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff696767, 0xffdddddd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff9f9f9, 0xff7d7b7c, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xd8231f20, 0x32231f20, 0x00000000, 0x00000000,
|
||||||
|
0x00231f20, 0x00000000, 0x05231f20, 0x8e231f20, 0xfa231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1c1819, 0xff7f7d7d, 0xffe1e0e1, 0xffdbdbdb, 0xffdedede, 0xff7f7d7e, 0xff252122, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff302d2e, 0xffb2b1b1, 0xffdcdbdb, 0xffdbdbdb, 0xffcccccc, 0xff555253, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff282425, 0xff9b9999, 0xffdbdbdb, 0xffdbdbdb, 0xffdbdbdb, 0xffd9d8d9, 0xff7b797a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff656263, 0xffc7c6c7, 0xffeeeeee, 0xfff7f6f6, 0xfff8f8f8, 0xfff8f8f8, 0xfff6f6f6, 0xfff0f0f0, 0xffd4d3d3, 0xff838181, 0xff2b2728, 0xff211d1e, 0xffa7a5a6, 0xffe0dfdf, 0xffdedddd, 0xffa3a2a2, 0xff312d2e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff3f3b3c, 0xffc5c4c4, 0xffdcdcdc, 0xffd9d9d9, 0xff888586, 0xff211d1e, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff575455, 0xffcfcdcf, 0xffdbdbdb, 0xffdbd9da, 0xff6b696a, 0xff1b1718, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff363333, 0xff999797, 0xffe0dfe0, 0xfff5f4f4, 0xfff8f7f7, 0xfff9f8f8, 0xfff8f8f8, 0xfff5f5f5, 0xffe7e6e7, 0xffb6b5b5, 0xff535052, 0xff181415, 0xff595556, 0xffd4d3d3, 0xffdbdbdb, 0xffd4d4d4, 0xff696668, 0xff1e1a1b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff231f20, 0xff8f8d8e, 0xffdcdbdb, 0xffdddcdc, 0xffc3c2c2, 0xff322f30, 0xff272425, 0xff828080, 0xffd6d6d6, 0xfff1f1f1, 0xfff7f7f7, 0xfff9f9f9, 0xfff8f8f8, 0xfff5f5f5, 0xffe3e3e3, 0xff9e9d9d, 0xff393536, 0xff1d191a, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff242021, 0xffaaa8a9, 0xffdedede, 0xffdddcdc, 0xffa6a4a5, 0xff312d2e, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1e1a1b, 0xff3c3839, 0xff918f8f, 0xffd3d2d3, 0xffededed, 0xfff5f5f5, 0xfff8f8f8, 0xfff9f9f9, 0xfff8f8f8, 0xfff7f6f6, 0xfff4f3f3, 0xffe8e8e8, 0xffd0cece, 0xff9e9c9c, 0xff5c5959, 0xff2b2829, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfa231f20, 0x8e231f20, 0x05231f20, 0x00000000, 0x00231f20,
|
||||||
|
0x00000000, 0x00231f20, 0x00000000, 0x30231f20, 0xd8231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff322e2f, 0xff373435, 0xff363334, 0xff363334, 0xff292526, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff302b2c, 0xff373334, 0xff363334, 0xff363334, 0xff2c2829, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff2c2829, 0xff363334, 0xff363334, 0xff363334, 0xff353233, 0xff282526, 0xff231e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1c1819, 0xff2b2829, 0xff585556, 0xff7b7878, 0xff8a8888, 0xff8b8989, 0xff7b797a, 0xff5e5b5b, 0xff343132, 0xff1d191a, 0xff201c1d, 0xff231f20, 0xff302d2e, 0xff373335, 0xff373334, 0xff312d2e, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff262223, 0xff343132, 0xff373334, 0xff363334, 0xff2d2a2b, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff292526, 0xff353132, 0xff363334, 0xff363334, 0xff2a2728, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1f1a1b, 0xff403d3e, 0xff6b6869, 0xff848283, 0xff8c8a8a, 0xff868384, 0xff6f6d6d, 0xff4b4748, 0xff242122, 0xff1d191a, 0xff221e1f, 0xff292526, 0xff363233, 0xff373334, 0xff363233, 0xff2a2728, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff2e2a2b, 0xff373334, 0xff373334, 0xff343131, 0xff252122, 0xff201c1d, 0xff1d191a, 0xff373334, 0xff625f60, 0xff807e7e, 0xff8c8a8b, 0xff888686, 0xff6f6c6d, 0xff433f40, 0xff1f1b1c, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff312e2f, 0xff373334, 0xff373334, 0xff312d2e, 0xff242021, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1d191a, 0xff322e2f, 0xff565354, 0xff737172, 0xff878485, 0xff8d8b8b, 0xff888687, 0xff7d7b7c, 0xff676464, 0xff4d494a, 0xff2d292a, 0xff1d191a, 0xff1c1819, 0xff221d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xd8231f20, 0x30231f20, 0x00000000, 0x00231f20, 0x00000000,
|
||||||
|
0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x73231f20, 0xfb231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1c1819, 0xff1c1819, 0xff1e1a1b, 0xff1e1a1b, 0xff1d181a, 0xff1b1718, 0xff1f1b1c, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1f1b1c, 0xff1f1b1c, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff221d1e, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1e1a1b, 0xff1b1718, 0xff1d191a, 0xff1e1a1b, 0xff1d191a, 0xff1b1718, 0xff1d191a, 0xff211d1e, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff1f1b1c, 0xff1f1b1c, 0xff1f1b1c, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff211d1e, 0xff1f1b1c, 0xff1f1b1c, 0xff201b1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1b1718, 0xff1d191a, 0xff1e1a1b, 0xff1e1a1b, 0xff1c1718, 0xff1d191a, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff201c1d, 0xff1f1b1c, 0xff1f1b1c, 0xff201c1d, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff1f1b1c, 0xff1c1718, 0xff1c1819, 0xff1e191a, 0xff1f1a1b, 0xff1e1a1b, 0xff1d1819, 0xff1b1718, 0xff1d191a, 0xff201c1d, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfb231f20, 0x73231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x0e231f20, 0xb5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff221e1f, 0xff221e1f, 0xff221e1f, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xb5231f20, 0x0e231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a231f20, 0xde231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xde231f20, 0x2a231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x51231f20, 0xf4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf4231f20, 0x51231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x03231f20, 0x74231f20, 0xf5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf5231f20, 0x74231f20, 0x03231f20, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x0a231f20, 0x84231f20, 0xf5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf5231f20, 0x84231f20, 0x0a231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10231f20, 0x84231f20, 0xf5231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf5231f20, 0x84231f20, 0x10231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x0a231f20, 0x72231f20, 0xf4231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf4231f20, 0x72231f20, 0x0a231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x03231f20, 0x4f231f20, 0xdd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xdd231f20, 0x4f231f20, 0x03231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x29231f20, 0xb6231f20, 0xfb231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfb231f20, 0xb6231f20, 0x29231f20, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x0e231f20, 0x73231f20, 0xd8231f20, 0xfb231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfb231f20, 0xd8231f20, 0x73231f20, 0x0e231f20, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30231f20, 0x8e231f20, 0xd6231f20, 0xfd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfd231f20, 0xd6231f20, 0x8e231f20, 0x30231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x04231f20, 0x32231f20, 0x7b231f20, 0xc2231f20, 0xf3231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf3231f20, 0xc2231f20, 0x7b231f20, 0x32231f20, 0x04231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x00000000, 0x06231f20, 0x1c231f20, 0x49231f20, 0x8c231f20, 0xc4231f20, 0xf0231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xf0231f20, 0xc4231f20, 0x8c231f20, 0x49231f20, 0x1c231f20, 0x06231f20, 0x00000000, 0x00000000, 0x00231f20, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x01231f20, 0x04231f20, 0x11231f20, 0x2e231f20, 0x62231f20, 0x8e231f20, 0xb4231f20, 0xd4231f20, 0xe5231f20, 0xf2231f20, 0xfd231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xff231f20, 0xfd231f20, 0xf2231f20, 0xe5231f20, 0xd4231f20, 0xb4231f20, 0x8e231f20, 0x62231f20, 0x2e231f20, 0x11231f20, 0x04231f20, 0x01231f20, 0x00000000, 0x00000000, 0x00000000, 0x00231f20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_DEFIMG_IPP
|
159
src/icludes/frontend/mame/ui/devctrl.h
Normal file
159
src/icludes/frontend/mame/ui/devctrl.h
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/devctrl.h
|
||||||
|
|
||||||
|
Device specific control menu
|
||||||
|
This source provides a base class for any device which need a specific
|
||||||
|
submenu and which can occur multiple times in the same driver (at the
|
||||||
|
moment, cassette tapes and barcode readers, in future possibly other like
|
||||||
|
printers)
|
||||||
|
The base class contains calls to get the total number of devices of
|
||||||
|
the same kind connected to the driver, and shortcuts to switch current
|
||||||
|
device to next one or previous one attached. This allows, for instance,
|
||||||
|
users to pass from a device to another one by simply pressing left/right
|
||||||
|
and the menu is rebuilt accordingly, without the need of a preliminary
|
||||||
|
submenu listing available devices of the same kind.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_DEVCTRL_H
|
||||||
|
#define MAME_FRONTEND_UI_DEVCTRL_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
template<class DeviceType>
|
||||||
|
class menu_device_control : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_device_control(mame_ui_manager &mui, render_container &container, DeviceType *device);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
DeviceType *current_device() { return m_device; }
|
||||||
|
int count() { return m_count; }
|
||||||
|
|
||||||
|
int current_index();
|
||||||
|
void previous();
|
||||||
|
void next();
|
||||||
|
std::string current_display_name();
|
||||||
|
uint32_t current_display_flags();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// device enumerator
|
||||||
|
typedef device_type_enumerator<DeviceType> enumerator;
|
||||||
|
|
||||||
|
DeviceType * m_device;
|
||||||
|
int m_count;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template<class DeviceType>
|
||||||
|
menu_device_control<DeviceType>::menu_device_control(mame_ui_manager &mui, render_container &container, DeviceType *device)
|
||||||
|
: menu(mui, container)
|
||||||
|
{
|
||||||
|
enumerator iter(mui.machine().root_device());
|
||||||
|
m_count = iter.count();
|
||||||
|
m_device = device ? device : iter.first();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// current_index
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template<class DeviceType>
|
||||||
|
int menu_device_control<DeviceType>::current_index()
|
||||||
|
{
|
||||||
|
enumerator iter(machine().root_device());
|
||||||
|
return iter.indexof(*m_device);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// previous
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template<class DeviceType>
|
||||||
|
void menu_device_control<DeviceType>::previous()
|
||||||
|
{
|
||||||
|
// left arrow - rotate left through devices
|
||||||
|
if (m_device && (1 < m_count))
|
||||||
|
{
|
||||||
|
enumerator iter(machine().root_device());
|
||||||
|
int index = iter.indexof(*m_device);
|
||||||
|
if (index > 0)
|
||||||
|
index--;
|
||||||
|
else
|
||||||
|
index = m_count - 1;
|
||||||
|
m_device = iter.byindex(index);
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// next
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template<class DeviceType>
|
||||||
|
void menu_device_control<DeviceType>::next()
|
||||||
|
{
|
||||||
|
// right arrow - rotate right through cassette devices
|
||||||
|
if (m_device && (1 < m_count))
|
||||||
|
{
|
||||||
|
enumerator iter(machine().root_device());
|
||||||
|
int index = iter.indexof(*m_device);
|
||||||
|
if (index < m_count - 1)
|
||||||
|
index++;
|
||||||
|
else
|
||||||
|
index = 0;
|
||||||
|
m_device = iter.byindex(index);
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// current_display_name
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template<class DeviceType>
|
||||||
|
std::string menu_device_control<DeviceType>::current_display_name()
|
||||||
|
{
|
||||||
|
std::string display_name;
|
||||||
|
display_name.assign(current_device()->name());
|
||||||
|
if (count() > 1)
|
||||||
|
display_name.append(string_format(" %d", current_index() + 1));
|
||||||
|
return display_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// current_display_flags
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template<class DeviceType>
|
||||||
|
uint32_t menu_device_control<DeviceType>::current_display_flags()
|
||||||
|
{
|
||||||
|
uint32_t flags = 0;
|
||||||
|
if (count() > 1)
|
||||||
|
{
|
||||||
|
if (current_index() > 0)
|
||||||
|
flags |= FLAG_LEFT_ARROW;
|
||||||
|
if (current_index() < count() - 1)
|
||||||
|
flags |= FLAG_RIGHT_ARROW;
|
||||||
|
}
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_DEVCTRL_H
|
365
src/icludes/frontend/mame/ui/devopt.cpp
Normal file
365
src/icludes/frontend/mame/ui/devopt.cpp
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/devopt.cpp
|
||||||
|
|
||||||
|
Internal menu for the device configuration.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/devopt.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "romload.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
device_config - handle the game information
|
||||||
|
menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_device_config::menu_device_config(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
device_slot_interface *slot,
|
||||||
|
device_slot_interface::slot_option const *option)
|
||||||
|
: menu_textbox(mui, container)
|
||||||
|
, m_option(option)
|
||||||
|
, m_mounted(machine().root_device().subdevice(slot->device().subtag(option->name())) != nullptr)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_CUSTOM_NAV);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_device_config::~menu_device_config()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_device_config::populate_text(std::optional<text_layout> &layout, float &width, int &lines)
|
||||||
|
{
|
||||||
|
if (!layout || (layout->width() != width))
|
||||||
|
{
|
||||||
|
rgb_t const color = ui().colors().text_color();
|
||||||
|
layout.emplace(ui().create_layout(container(), width));
|
||||||
|
|
||||||
|
machine_config &mconfig(const_cast<machine_config &>(machine().config()));
|
||||||
|
machine_config::token const tok(mconfig.begin_configuration(mconfig.root_device()));
|
||||||
|
device_t *const dev = mconfig.device_add(m_option->name(), m_option->devtype(), 0);
|
||||||
|
for (device_t &d : device_enumerator(*dev))
|
||||||
|
if (!d.configured())
|
||||||
|
d.config_complete();
|
||||||
|
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
m_mounted
|
||||||
|
? _("[This option is currently mounted in the running system]\n\nOption: %1$s\nDevice: %2$s\n\nThe selected option enables the following items:\n")
|
||||||
|
: _("[This option is NOT currently mounted in the running system]\n\nOption: %1$s\nDevice: %2$s\n\nIf you select this option, the following items will be enabled:\n"),
|
||||||
|
m_option->name(),
|
||||||
|
dev->name()),
|
||||||
|
color);
|
||||||
|
|
||||||
|
// loop over all CPUs
|
||||||
|
execute_interface_enumerator execiter(*dev);
|
||||||
|
if (execiter.count() > 0)
|
||||||
|
{
|
||||||
|
layout->add_text(_("* CPU:\n"), color);
|
||||||
|
std::unordered_set<std::string> exectags;
|
||||||
|
for (device_execute_interface &exec : execiter)
|
||||||
|
{
|
||||||
|
if (!exectags.insert(exec.device().tag()).second)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// get cpu specific clock that takes internal multiplier/dividers into account
|
||||||
|
u32 clock = exec.device().clock();
|
||||||
|
|
||||||
|
// count how many identical CPUs we have
|
||||||
|
int count = 1;
|
||||||
|
const char *name = exec.device().name();
|
||||||
|
for (device_execute_interface &scan : execiter)
|
||||||
|
{
|
||||||
|
if (exec.device().type() == scan.device().type() && strcmp(name, scan.device().name()) == 0 && exec.device().clock() == scan.device().clock())
|
||||||
|
if (exectags.insert(scan.device().tag()).second)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string hz(std::to_string(clock));
|
||||||
|
int d = (clock >= 1'000'000'000) ? 9 : (clock >= 1'000'000) ? 6 : (clock >= 1000) ? 3 : 0;
|
||||||
|
if (d > 0)
|
||||||
|
{
|
||||||
|
size_t dpos = hz.length() - d;
|
||||||
|
hz.insert(dpos, ".");
|
||||||
|
size_t last = hz.find_last_not_of('0');
|
||||||
|
hz = hz.substr(0, last + (last != dpos ? 1 : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// if more than one, prepend a #x in front of the CPU name and display clock
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
(count > 1)
|
||||||
|
? ((clock != 0) ? " %1$d" UTF8_MULTIPLY "%2$s %3$s" UTF8_NBSP "%4$s\n" : " %1$d" UTF8_MULTIPLY "%2$s\n")
|
||||||
|
: ((clock != 0) ? " %2$s %3$s" UTF8_NBSP "%4$s\n" : " %2$s\n"),
|
||||||
|
count, name, hz,
|
||||||
|
(d == 9) ? _("GHz") : (d == 6) ? _("MHz") : (d == 3) ? _("kHz") : _("Hz")),
|
||||||
|
color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// display screen information
|
||||||
|
screen_device_enumerator scriter(*dev);
|
||||||
|
if (scriter.count() > 0)
|
||||||
|
{
|
||||||
|
layout->add_text(_("* Video:\n"), color);
|
||||||
|
for (screen_device &screen : scriter)
|
||||||
|
{
|
||||||
|
if (screen.screen_type() == SCREEN_TYPE_VECTOR)
|
||||||
|
{
|
||||||
|
layout->add_text(util::string_format(_(" Screen '%1$s': Vector\n"), screen.tag()), color);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const u32 rate = u32(screen.frame_period().as_hz() * 1'000'000 + 0.5);
|
||||||
|
const bool valid = rate >= 1'000'000;
|
||||||
|
std::string hz(valid ? std::to_string(rate) : "?");
|
||||||
|
if (valid)
|
||||||
|
{
|
||||||
|
size_t dpos = hz.length() - 6;
|
||||||
|
hz.insert(dpos, ".");
|
||||||
|
size_t last = hz.find_last_not_of('0');
|
||||||
|
hz = hz.substr(0, last + (last != dpos ? 1 : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
const rectangle &visarea = screen.visible_area();
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
(screen.orientation() & ORIENTATION_SWAP_XY)
|
||||||
|
? _(" Screen '%1$s': %2$d \xC3\x97 %3$d (V) %4$s\xC2\xA0Hz\n")
|
||||||
|
: _(" Screen '%1$s': %2$d \xC3\x97 %3$d (H) %4$s\xC2\xA0Hz\n"),
|
||||||
|
screen.tag(),
|
||||||
|
visarea.width(),
|
||||||
|
visarea.height(),
|
||||||
|
hz),
|
||||||
|
color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// loop over all sound chips
|
||||||
|
sound_interface_enumerator snditer(*dev);
|
||||||
|
if (snditer.count() > 0)
|
||||||
|
{
|
||||||
|
layout->add_text(_("* Sound:\n"), color);
|
||||||
|
std::unordered_set<std::string> soundtags;
|
||||||
|
for (device_sound_interface &sound : snditer)
|
||||||
|
{
|
||||||
|
if (!sound.issound() || !soundtags.insert(sound.device().tag()).second)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// count how many identical sound chips we have
|
||||||
|
int count = 1;
|
||||||
|
for (device_sound_interface &scan : snditer)
|
||||||
|
{
|
||||||
|
if (sound.device().type() == scan.device().type() && sound.device().clock() == scan.device().clock())
|
||||||
|
if (soundtags.insert(scan.device().tag()).second)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
const u32 clock = sound.device().clock();
|
||||||
|
std::string hz(std::to_string(clock));
|
||||||
|
int d = (clock >= 1'000'000'000) ? 9 : (clock >= 1'000'000) ? 6 : (clock >= 1000) ? 3 : 0;
|
||||||
|
if (d > 0)
|
||||||
|
{
|
||||||
|
size_t dpos = hz.length() - d;
|
||||||
|
hz.insert(dpos, ".");
|
||||||
|
size_t last = hz.find_last_not_of('0');
|
||||||
|
hz = hz.substr(0, last + (last != dpos ? 1 : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// if more than one, prepend a #x in front of the name and display clock
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
(count > 1)
|
||||||
|
? ((clock != 0) ? " %1$d" UTF8_MULTIPLY "%2$s %3$s" UTF8_NBSP "%4$s\n" : " %1$d" UTF8_MULTIPLY "%2$s\n")
|
||||||
|
: ((clock != 0) ? " %2$s %3$s" UTF8_NBSP "%4$s\n" : " %2$s\n"),
|
||||||
|
count, sound.device().name(), hz,
|
||||||
|
(d == 9) ? _("GHz") : (d == 6) ? _("MHz") : (d == 3) ? _("kHz") : _("Hz")),
|
||||||
|
color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scan for BIOS settings
|
||||||
|
int bios = 0;
|
||||||
|
if (dev->rom_region())
|
||||||
|
{
|
||||||
|
// first loop through roms in search of default bios (shortname)
|
||||||
|
char const *bios_str(nullptr);
|
||||||
|
for (const tiny_rom_entry *rom = dev->rom_region(); !ROMENTRY_ISEND(rom); ++rom)
|
||||||
|
{
|
||||||
|
if (ROMENTRY_ISDEFAULT_BIOS(rom))
|
||||||
|
bios_str = rom->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// then loop again to count bios options and to get the default bios complete name
|
||||||
|
char const *bios_desc(nullptr);
|
||||||
|
for (romload::system_bios const &rom : romload::entries(dev->rom_region()).get_system_bioses())
|
||||||
|
{
|
||||||
|
bios++;
|
||||||
|
if (bios_str && !std::strcmp(bios_str, rom.get_name()))
|
||||||
|
bios_desc = rom.get_description();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bios)
|
||||||
|
{
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
_("* BIOS settings:\n %1$d options [default: %2$s]\n"),
|
||||||
|
bios,
|
||||||
|
bios_desc ? bios_desc : bios_str ? bios_str : ""),
|
||||||
|
color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int input = 0, input_mj = 0, input_hana = 0, input_gamble = 0, input_analog = 0, input_adjust = 0;
|
||||||
|
int input_keypad = 0, input_keyboard = 0, dips = 0, confs = 0;
|
||||||
|
std::string errors;
|
||||||
|
std::ostringstream dips_opt, confs_opt;
|
||||||
|
ioport_list portlist;
|
||||||
|
for (device_t &iptdev : device_enumerator(*dev))
|
||||||
|
portlist.append(iptdev, errors);
|
||||||
|
|
||||||
|
// check if the device adds inputs to the system
|
||||||
|
for (auto &port : portlist)
|
||||||
|
for (ioport_field &field : port.second->fields())
|
||||||
|
{
|
||||||
|
if (field.type() >= IPT_MAHJONG_FIRST && field.type() < IPT_MAHJONG_LAST)
|
||||||
|
input_mj++;
|
||||||
|
else if (field.type() >= IPT_HANAFUDA_FIRST && field.type() < IPT_HANAFUDA_LAST)
|
||||||
|
input_hana++;
|
||||||
|
else if (field.type() >= IPT_GAMBLING_FIRST && field.type() < IPT_GAMBLING_LAST)
|
||||||
|
input_gamble++;
|
||||||
|
else if (field.type() >= IPT_ANALOG_FIRST && field.type() < IPT_ANALOG_LAST)
|
||||||
|
input_analog++;
|
||||||
|
else if (field.type() == IPT_ADJUSTER)
|
||||||
|
input_adjust++;
|
||||||
|
else if (field.type() == IPT_KEYPAD)
|
||||||
|
input_keypad++;
|
||||||
|
else if (field.type() == IPT_KEYBOARD)
|
||||||
|
input_keyboard++;
|
||||||
|
else if (field.type() >= IPT_START1 && field.type() < IPT_UI_FIRST)
|
||||||
|
input++;
|
||||||
|
else if (field.type() == IPT_DIPSWITCH)
|
||||||
|
{
|
||||||
|
dips++;
|
||||||
|
bool def(false);
|
||||||
|
for (ioport_setting const &setting : field.settings())
|
||||||
|
{
|
||||||
|
if (setting.value() == field.defvalue())
|
||||||
|
{
|
||||||
|
def = true;
|
||||||
|
util::stream_format(dips_opt, _(" %1$s [default: %2$s]\n"), field.name(), setting.name());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!def)
|
||||||
|
util::stream_format(dips_opt, _(" %1$s\n"), field.name());
|
||||||
|
}
|
||||||
|
else if (field.type() == IPT_CONFIG)
|
||||||
|
{
|
||||||
|
confs++;
|
||||||
|
bool def(false);
|
||||||
|
for (ioport_setting const &setting : field.settings())
|
||||||
|
{
|
||||||
|
if (setting.value() == field.defvalue())
|
||||||
|
{
|
||||||
|
def = true;
|
||||||
|
util::stream_format(confs_opt, _(" %1$s [default: %2$s]\n"), field.name(), setting.name());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!def)
|
||||||
|
util::stream_format(confs_opt, _(" %1$s\n"), field.name());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dips)
|
||||||
|
{
|
||||||
|
layout->add_text(_("* DIP switch settings:\n"), color);
|
||||||
|
layout->add_text(std::move(dips_opt).str(), color);
|
||||||
|
}
|
||||||
|
if (confs)
|
||||||
|
{
|
||||||
|
layout->add_text(_("* Configuration settings:\n"), color);
|
||||||
|
layout->add_text(std::move(confs_opt).str(), color);
|
||||||
|
}
|
||||||
|
if (input || input_mj || input_hana || input_gamble || input_analog || input_adjust || input_keypad || input_keyboard)
|
||||||
|
layout->add_text(_("* Input device(s):\n"), color);
|
||||||
|
if (input)
|
||||||
|
layout->add_text(util::string_format(_(" User inputs [%1$d inputs]\n"), input), color);
|
||||||
|
if (input_mj)
|
||||||
|
layout->add_text(util::string_format(_(" Mahjong inputs [%1$d inputs]\n"), input_mj), color);
|
||||||
|
if (input_hana)
|
||||||
|
layout->add_text(util::string_format(_(" Hanafuda inputs [%1$d inputs]\n"), input_hana), color);
|
||||||
|
if (input_gamble)
|
||||||
|
layout->add_text(util::string_format(_(" Gambling inputs [%1$d inputs]\n"), input_gamble), color);
|
||||||
|
if (input_analog)
|
||||||
|
layout->add_text(util::string_format(_(" Analog inputs [%1$d inputs]\n"), input_analog), color);
|
||||||
|
if (input_adjust)
|
||||||
|
layout->add_text(util::string_format(_(" Adjuster inputs [%1$d inputs]\n"), input_adjust), color);
|
||||||
|
if (input_keypad)
|
||||||
|
layout->add_text(util::string_format(_(" Keypad inputs [%1$d inputs]\n"), input_keypad), color);
|
||||||
|
if (input_keyboard)
|
||||||
|
layout->add_text(util::string_format(_(" Keyboard inputs [%1$d inputs]\n"), input_keyboard), color);
|
||||||
|
|
||||||
|
image_interface_enumerator imgiter(*dev);
|
||||||
|
if (imgiter.count() > 0)
|
||||||
|
{
|
||||||
|
layout->add_text(_("* Media Options:\n"), color);
|
||||||
|
for (const device_image_interface &imagedev : imgiter)
|
||||||
|
{
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
_(" %1$s [tag: %2$s]\n"),
|
||||||
|
imagedev.image_type_name(),
|
||||||
|
imagedev.device().tag()),
|
||||||
|
color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slot_interface_enumerator slotiter(*dev);
|
||||||
|
if (slotiter.count() > 0)
|
||||||
|
{
|
||||||
|
layout->add_text(_("* Slot Options:\n"), color);
|
||||||
|
for (const device_slot_interface &slot : slotiter)
|
||||||
|
{
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
_(" %1$s [default: %2$s]\n"),
|
||||||
|
slot.device().tag(),
|
||||||
|
slot.default_option() ? slot.default_option() : "----"),
|
||||||
|
color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((execiter.count() + scriter.count() + snditer.count() + imgiter.count() + slotiter.count() + bios + dips + confs
|
||||||
|
+ input + input_mj + input_hana + input_gamble + input_analog + input_adjust + input_keypad + input_keyboard) == 0)
|
||||||
|
layout->add_text(_("[None]\n"), color);
|
||||||
|
|
||||||
|
mconfig.device_remove(m_option->name());
|
||||||
|
lines = layout->lines();
|
||||||
|
}
|
||||||
|
width = layout->actual_width();
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_device_config::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_device_config::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (ev)
|
||||||
|
handle_key(ev->iptkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
40
src/icludes/frontend/mame/ui/devopt.h
Normal file
40
src/icludes/frontend/mame/ui/devopt.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/devopt.h
|
||||||
|
|
||||||
|
Internal menu for the device configuration.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_DEVOPT_H
|
||||||
|
#define MAME_FRONTEND_UI_DEVOPT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/textbox.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_device_config : public menu_textbox
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_device_config(mame_ui_manager &mui, render_container &container, device_slot_interface *slot, device_slot_interface::slot_option const *option);
|
||||||
|
virtual ~menu_device_config() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void populate_text(std::optional<text_layout> &layout, float &width, int &lines) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
device_slot_interface::slot_option const *const m_option;
|
||||||
|
bool const m_mounted;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_DEVOPT_H
|
519
src/icludes/frontend/mame/ui/dirmenu.cpp
Normal file
519
src/icludes/frontend/mame/ui/dirmenu.cpp
Normal file
@ -0,0 +1,519 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/dirmenu.cpp
|
||||||
|
|
||||||
|
Internal UI user interface.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/dirmenu.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
#include "ui/optsmenu.h"
|
||||||
|
|
||||||
|
#include "emuopts.h"
|
||||||
|
#include "mame.h"
|
||||||
|
|
||||||
|
#include "corestr.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
static int ADDING = 1;
|
||||||
|
static int CHANGE = 2;
|
||||||
|
|
||||||
|
struct folders_entry
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
const char *option;
|
||||||
|
const int action;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const folders_entry s_folders[] =
|
||||||
|
{
|
||||||
|
{ N_p("path-option", "ROMs"), OPTION_MEDIAPATH, ADDING },
|
||||||
|
{ N_p("path-option", "Software Media"), OPTION_SWPATH, CHANGE },
|
||||||
|
{ N_p("path-option", "Sound Samples"), OPTION_SAMPLEPATH, ADDING },
|
||||||
|
{ N_p("path-option", "Artwork"), OPTION_ARTPATH, ADDING },
|
||||||
|
{ N_p("path-option", "Crosshairs"), OPTION_CROSSHAIRPATH, ADDING },
|
||||||
|
{ N_p("path-option", "Cheat Files"), OPTION_CHEATPATH, ADDING },
|
||||||
|
{ N_p("path-option", "Plugins"), OPTION_PLUGINSPATH, ADDING },
|
||||||
|
{ N_p("path-option", "UI Translations"), OPTION_LANGUAGEPATH, CHANGE },
|
||||||
|
{ N_p("path-option", "INIs"), OPTION_INIPATH, ADDING },
|
||||||
|
{ N_p("path-option", "UI Settings"), OPTION_UI_PATH, CHANGE },
|
||||||
|
{ N_p("path-option", "Plugin Data"), OPTION_PLUGINDATAPATH, CHANGE },
|
||||||
|
{ N_p("path-option", "DATs"), OPTION_HISTORY_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Category INIs"), OPTION_CATEGORYINI_PATH, CHANGE },
|
||||||
|
{ N_p("path-option", "Snapshots"), OPTION_SNAPSHOT_DIRECTORY, ADDING },
|
||||||
|
{ N_p("path-option", "Icons"), OPTION_ICONS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Control Panels"), OPTION_CPANELS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Cabinets"), OPTION_CABINETS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Marquees"), OPTION_MARQUEES_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "PCBs"), OPTION_PCBS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Flyers"), OPTION_FLYERS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Title Screens"), OPTION_TITLES_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Game Endings"), OPTION_ENDS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Bosses"), OPTION_BOSSES_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Artwork Previews"), OPTION_ARTPREV_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Select"), OPTION_SELECT_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Game Over Screens"), OPTION_GAMEOVER_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "HowTo"), OPTION_HOWTO_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Logos"), OPTION_LOGOS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Scores"), OPTION_SCORES_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Versus"), OPTION_VERSUS_PATH, ADDING },
|
||||||
|
{ N_p("path-option", "Covers"), OPTION_COVER_PATH, ADDING }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
MENU DIRECTORY
|
||||||
|
**************************************************/
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_directory::menu_directory(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_directory::~menu_directory()
|
||||||
|
{
|
||||||
|
ui().save_ui_options();
|
||||||
|
ui_globals::reset = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_directory::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<menu_display_actual>(ui(), container(), selected_index());
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_directory::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
for (auto & elem : s_folders)
|
||||||
|
item_append(_("path-option", elem.name), 0, (void *)(uintptr_t)elem.action);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
customtop = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_directory::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
char const *const toptext[] = { _("Folders Setup") };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(toptext), std::end(toptext),
|
||||||
|
origx1, origx2, origy1 - top, origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
MENU DISPLAY PATH
|
||||||
|
**************************************************/
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_display_actual::menu_display_actual(mame_ui_manager &mui, render_container &container, int ref)
|
||||||
|
: menu(mui, container), m_ref(ref)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_display_actual::~menu_display_actual()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_display_actual::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
switch ((uintptr_t)ev->itemref)
|
||||||
|
{
|
||||||
|
case REMOVE:
|
||||||
|
menu::stack_push<menu_remove_folder>(ui(), container(), m_ref);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ADD_CHANGE:
|
||||||
|
menu::stack_push<menu_add_change_folder>(ui(), container(), m_ref);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_display_actual::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
m_heading[0] = string_format(_("Current %1$s Folders"), _("path-option", s_folders[m_ref].name));
|
||||||
|
if (ui().options().exists(s_folders[m_ref].option))
|
||||||
|
m_searchpath.assign(ui().options().value(s_folders[m_ref].option));
|
||||||
|
else
|
||||||
|
m_searchpath.assign(machine().options().value(s_folders[m_ref].option));
|
||||||
|
|
||||||
|
path_iterator path(m_searchpath);
|
||||||
|
std::string curpath;
|
||||||
|
m_folders.clear();
|
||||||
|
while (path.next(curpath, nullptr))
|
||||||
|
m_folders.push_back(curpath);
|
||||||
|
|
||||||
|
item_append((s_folders[m_ref].action == CHANGE) ? _("Change Folder") : _("Add Folder"), 0, (void *)ADD_CHANGE);
|
||||||
|
|
||||||
|
if (m_folders.size() > 1)
|
||||||
|
item_append(_("Remove Folder"), 0, (void *)REMOVE);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
customtop = (m_folders.size() + 1) * ui().get_line_height() + 6.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_display_actual::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
float const lineheight(ui().get_line_height());
|
||||||
|
float const maxwidth(draw_text_box(
|
||||||
|
std::begin(m_folders), std::end(m_folders),
|
||||||
|
origx1, origx2, origy1 - (3.0f * ui().box_tb_border()) - (m_folders.size() * lineheight), origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), ui().colors().background_color(), 1.0f));
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(m_heading), std::end(m_heading),
|
||||||
|
0.5f * (1.0f - maxwidth), 0.5f * (1.0f + maxwidth), origy1 - top, origy1 - top + lineheight + (2.0f * ui().box_tb_border()),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
MENU ADD FOLDER
|
||||||
|
**************************************************/
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_add_change_folder::menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref) : menu(mui, container)
|
||||||
|
{
|
||||||
|
m_ref = ref;
|
||||||
|
m_change = (s_folders[ref].action == CHANGE);
|
||||||
|
m_search.clear();
|
||||||
|
|
||||||
|
// configure the starting path
|
||||||
|
osd_get_full_path(m_current_path, ".");
|
||||||
|
|
||||||
|
std::string searchpath;
|
||||||
|
if (mui.options().exists(s_folders[m_ref].option))
|
||||||
|
searchpath = mui.options().value(s_folders[m_ref].option);
|
||||||
|
else
|
||||||
|
searchpath = mui.machine().options().value(s_folders[m_ref].option);
|
||||||
|
|
||||||
|
path_iterator path(searchpath);
|
||||||
|
std::string curpath;
|
||||||
|
while (path.next(curpath, nullptr))
|
||||||
|
m_folders.push_back(curpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_add_change_folder::~menu_add_change_folder()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_add_change_folder::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
int index = (uintptr_t)ev->itemref - 1;
|
||||||
|
const menu_item &pitem = item(index);
|
||||||
|
|
||||||
|
// go up to the parent path
|
||||||
|
if (pitem.text() == "..")
|
||||||
|
{
|
||||||
|
size_t first_sep = m_current_path.find_first_of(PATH_SEPARATOR[0]);
|
||||||
|
size_t last_sep = m_current_path.find_last_of(PATH_SEPARATOR[0]);
|
||||||
|
if (first_sep != last_sep)
|
||||||
|
m_current_path.erase(++last_sep);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if isn't a drive, appends the directory
|
||||||
|
if (pitem.subtext() != "[DRIVE]")
|
||||||
|
{
|
||||||
|
if (m_current_path[m_current_path.length() - 1] == PATH_SEPARATOR[0])
|
||||||
|
m_current_path.append(pitem.text());
|
||||||
|
else
|
||||||
|
m_current_path.append(PATH_SEPARATOR).append(pitem.text());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_current_path = pitem.text();
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset the char buffer also in this case
|
||||||
|
m_search.clear();
|
||||||
|
reset(reset_options::SELECT_FIRST);
|
||||||
|
}
|
||||||
|
else if (ev->iptkey == IPT_SPECIAL)
|
||||||
|
{
|
||||||
|
bool update_selected = false;
|
||||||
|
|
||||||
|
if (ev->unichar == 0x09)
|
||||||
|
{
|
||||||
|
// Tab key, save current path
|
||||||
|
std::string error_string;
|
||||||
|
if (m_change)
|
||||||
|
{
|
||||||
|
if (ui().options().exists(s_folders[m_ref].option))
|
||||||
|
ui().options().set_value(s_folders[m_ref].option, m_current_path, OPTION_PRIORITY_CMDLINE);
|
||||||
|
else if (machine().options().value(s_folders[m_ref].option) != m_current_path)
|
||||||
|
{
|
||||||
|
machine().options().set_value(s_folders[m_ref].option, m_current_path, OPTION_PRIORITY_CMDLINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_folders.push_back(m_current_path);
|
||||||
|
std::string tmppath;
|
||||||
|
for (int x = 0; x < m_folders.size(); ++x)
|
||||||
|
{
|
||||||
|
tmppath.append(m_folders[x]);
|
||||||
|
if (x != m_folders.size() - 1)
|
||||||
|
tmppath.append(";");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ui().options().exists(s_folders[m_ref].option))
|
||||||
|
ui().options().set_value(s_folders[m_ref].option, tmppath, OPTION_PRIORITY_CMDLINE);
|
||||||
|
else if (machine().options().value(s_folders[m_ref].option) != tmppath)
|
||||||
|
{
|
||||||
|
machine().options().set_value(s_folders[m_ref].option, tmppath, OPTION_PRIORITY_CMDLINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reset_parent(reset_options::SELECT_FIRST);
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if it's any other key and we're not maxed out, update
|
||||||
|
update_selected = input_character(m_search, ev->unichar, uchar_is_printable);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for entries which matches our search buffer
|
||||||
|
if (update_selected)
|
||||||
|
{
|
||||||
|
const int cur_selected = selected_index();
|
||||||
|
int entry, bestmatch = 0;
|
||||||
|
|
||||||
|
// from current item to the end
|
||||||
|
for (entry = cur_selected; entry < item_count(); entry++)
|
||||||
|
if (item(entry).ref() && !m_search.empty())
|
||||||
|
{
|
||||||
|
int match = 0;
|
||||||
|
for (int i = 0; i < m_search.size() + 1; i++)
|
||||||
|
{
|
||||||
|
if (core_strnicmp(item(entry).text().c_str(), m_search.data(), i) == 0)
|
||||||
|
match = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match > bestmatch)
|
||||||
|
{
|
||||||
|
bestmatch = match;
|
||||||
|
set_selected_index(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// and from the first item to current one
|
||||||
|
for (entry = 0; entry < cur_selected; entry++)
|
||||||
|
{
|
||||||
|
if (item(entry).ref() && !m_search.empty())
|
||||||
|
{
|
||||||
|
int match = 0;
|
||||||
|
for (int i = 0; i < m_search.size() + 1; i++)
|
||||||
|
{
|
||||||
|
if (core_strnicmp(item(entry).text().c_str(), m_search.data(), i) == 0)
|
||||||
|
match = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match > bestmatch)
|
||||||
|
{
|
||||||
|
bestmatch = match;
|
||||||
|
set_selected_index(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
centre_selection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ev->iptkey == IPT_UI_CANCEL)
|
||||||
|
{
|
||||||
|
// reset the char buffer also in this case
|
||||||
|
m_search.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_add_change_folder::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// open a path
|
||||||
|
file_enumerator path(m_current_path.c_str());
|
||||||
|
const osd::directory::entry *dirent;
|
||||||
|
int folders_count = 0;
|
||||||
|
|
||||||
|
// add the drives
|
||||||
|
for (std::string const &volume_name : osd_get_volume_names())
|
||||||
|
item_append(volume_name, "[DRIVE]", 0, (void *)(uintptr_t)++folders_count);
|
||||||
|
|
||||||
|
// add the directories
|
||||||
|
while ((dirent = path.next()) != nullptr)
|
||||||
|
{
|
||||||
|
if (dirent->type == osd::directory::entry::entry_type::DIR && strcmp(dirent->name, ".") != 0)
|
||||||
|
item_append(dirent->name, "[DIR]", 0, (void *)(uintptr_t)++folders_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
// configure the custom rendering
|
||||||
|
customtop = 2.0f * ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
custombottom = 1.0f * ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_add_change_folder::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
std::string const toptext[] = {
|
||||||
|
util::string_format(
|
||||||
|
m_change ? _("Change %1$s Folder - Search: %2$s_") : _("Add %1$s Folder - Search: %2$s_"),
|
||||||
|
_("path-option", s_folders[m_ref].name),
|
||||||
|
m_search),
|
||||||
|
m_current_path };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(toptext), std::end(toptext),
|
||||||
|
origx1, origx2, origy1 - top, origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::NEVER, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
|
||||||
|
// bottom text
|
||||||
|
char const *const bottomtext[] = { _("Press TAB to set") };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(bottomtext), std::end(bottomtext),
|
||||||
|
origx1, origx2, origy2 + ui().box_tb_border(), origy2 + bottom,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), ui().colors().background_color(), 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
MENU REMOVE FOLDER
|
||||||
|
**************************************************/
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_remove_folder::menu_remove_folder(mame_ui_manager &mui, render_container &container, int ref) : menu(mui, container)
|
||||||
|
{
|
||||||
|
m_ref = ref;
|
||||||
|
if (mui.options().exists(s_folders[m_ref].option))
|
||||||
|
m_searchpath.assign(mui.options().value(s_folders[m_ref].option));
|
||||||
|
else
|
||||||
|
m_searchpath.assign(mui.machine().options().value(s_folders[m_ref].option));
|
||||||
|
|
||||||
|
path_iterator path(m_searchpath);
|
||||||
|
std::string curpath;
|
||||||
|
while (path.next(curpath, nullptr))
|
||||||
|
m_folders.push_back(curpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_remove_folder::~menu_remove_folder()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_remove_folder::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
std::string tmppath, error_string;
|
||||||
|
m_folders.erase(m_folders.begin() + selected_index());
|
||||||
|
for (int x = 0; x < m_folders.size(); ++x)
|
||||||
|
{
|
||||||
|
tmppath.append(m_folders[x]);
|
||||||
|
if (x < m_folders.size() - 1)
|
||||||
|
tmppath.append(";");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ui().options().exists(s_folders[m_ref].option))
|
||||||
|
ui().options().set_value(s_folders[m_ref].option, tmppath, OPTION_PRIORITY_CMDLINE);
|
||||||
|
else if (machine().options().value(s_folders[m_ref].option) != tmppath)
|
||||||
|
{
|
||||||
|
machine().options().set_value(s_folders[m_ref].option, tmppath, OPTION_PRIORITY_CMDLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
reset_parent(reset_options::REMEMBER_REF);
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_remove_folder::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
int folders_count = 0;
|
||||||
|
for (auto & elem : m_folders)
|
||||||
|
item_append(elem, 0, (void *)(uintptr_t)++folders_count);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
customtop = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_remove_folder::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
std::string const toptext[] = {string_format(_("Remove %1$s Folder"), _("path-option", s_folders[m_ref].name)) };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(toptext), std::end(toptext),
|
||||||
|
origx1, origx2, origy1 - top, origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
119
src/icludes/frontend/mame/ui/dirmenu.h
Normal file
119
src/icludes/frontend/mame/ui/dirmenu.h
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/dirmenu.h
|
||||||
|
|
||||||
|
Internal UI user interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_DIRMENU_H
|
||||||
|
#define MAME_FRONTEND_UI_DIRMENU_H
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// class directory menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_directory : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_directory(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_directory() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// class directory specific menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_display_actual : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_display_actual(mame_ui_manager &mui, render_container &container, int selectedref);
|
||||||
|
virtual ~menu_display_actual() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
ADD_CHANGE = 1,
|
||||||
|
REMOVE,
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::string m_heading[1], m_searchpath;
|
||||||
|
std::vector<std::string> m_folders;
|
||||||
|
int m_ref;
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// class remove folder menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_remove_folder : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_remove_folder(mame_ui_manager &mui, render_container &container, int ref);
|
||||||
|
virtual ~menu_remove_folder() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::string m_searchpath;
|
||||||
|
int m_ref;
|
||||||
|
std::vector<std::string> m_folders;
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// class add / change folder menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_add_change_folder : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref);
|
||||||
|
virtual ~menu_add_change_folder() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
virtual bool custom_ui_cancel() override { return !m_search.empty(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
int m_ref;
|
||||||
|
std::string m_current_path;
|
||||||
|
std::string m_search;
|
||||||
|
bool m_change;
|
||||||
|
std::vector<std::string> m_folders;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_DIRMENU_H
|
339
src/icludes/frontend/mame/ui/filecreate.cpp
Normal file
339
src/icludes/frontend/mame/ui/filecreate.cpp
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/filecreate.cpp
|
||||||
|
|
||||||
|
MAME's clunky built-in file manager
|
||||||
|
|
||||||
|
TODO
|
||||||
|
- Support image creation arguments
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/filecreate.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
#include "zippath.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
CONSTANTS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
// conditional compilation to enable chosing of image formats - this is not
|
||||||
|
// yet fully implemented
|
||||||
|
#define ENABLE_FORMATS 0
|
||||||
|
|
||||||
|
// itemrefs for key menu items
|
||||||
|
#define ITEMREF_NEW_IMAGE_NAME ((void *) 0x0001)
|
||||||
|
#define ITEMREF_CREATE ((void *) 0x0002)
|
||||||
|
#define ITEMREF_FORMAT ((void *) 0x0003)
|
||||||
|
#define ITEMREF_NO ((void *) 0x0004)
|
||||||
|
#define ITEMREF_YES ((void *) 0x0005)
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
MENU HELPERS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
CONFIRM SAVE AS MENU
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_confirm_save_as::menu_confirm_save_as(mame_ui_manager &mui, render_container &container, bool *yes)
|
||||||
|
: menu(mui, container)
|
||||||
|
{
|
||||||
|
m_yes = yes;
|
||||||
|
*m_yes = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_confirm_save_as::~menu_confirm_save_as()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_confirm_save_as::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
item_append(_("File Already Exists - Override?"), FLAG_DISABLE, nullptr);
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(_("No"), 0, ITEMREF_NO);
|
||||||
|
item_append(_("Yes"), 0, ITEMREF_YES);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle - confirm save as menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_confirm_save_as::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the event
|
||||||
|
if (ev && (ev->iptkey == IPT_UI_SELECT))
|
||||||
|
{
|
||||||
|
if (ev->itemref == ITEMREF_YES)
|
||||||
|
*m_yes = true;
|
||||||
|
|
||||||
|
// no matter what, pop out
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
FILE CREATE MENU
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_create::menu_file_create(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool &ok)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_ok(ok)
|
||||||
|
, m_current_directory(current_directory)
|
||||||
|
, m_current_file(current_file)
|
||||||
|
, m_current_format(nullptr)
|
||||||
|
{
|
||||||
|
m_image = image;
|
||||||
|
m_ok = true;
|
||||||
|
|
||||||
|
m_filename.reserve(1024);
|
||||||
|
m_filename = core_filename_extract_base(current_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_create::~menu_file_create()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// custom_render - perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_create::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
extra_text_render(top, bottom, origx1, origy1, origx2, origy2,
|
||||||
|
m_current_directory,
|
||||||
|
std::string_view());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate - populates the file creator menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_create::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
std::string buffer;
|
||||||
|
const image_device_format *format;
|
||||||
|
const std::string *new_image_name;
|
||||||
|
|
||||||
|
// append the "New Image Name" item
|
||||||
|
if (get_selection_ref() == ITEMREF_NEW_IMAGE_NAME)
|
||||||
|
{
|
||||||
|
buffer = m_filename + "_";
|
||||||
|
new_image_name = &buffer;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_image_name = &m_filename;
|
||||||
|
}
|
||||||
|
item_append(_("New Image Name:"), *new_image_name, 0, ITEMREF_NEW_IMAGE_NAME);
|
||||||
|
|
||||||
|
// do we support multiple formats?
|
||||||
|
if (ENABLE_FORMATS) format = m_image->formatlist().front().get();
|
||||||
|
if (ENABLE_FORMATS && (format != nullptr))
|
||||||
|
{
|
||||||
|
item_append(_("Image Format:"), m_current_format->description(), 0, ITEMREF_FORMAT);
|
||||||
|
m_current_format = format;
|
||||||
|
}
|
||||||
|
|
||||||
|
// finish up the menu
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(_("Create"), 0, ITEMREF_CREATE);
|
||||||
|
|
||||||
|
customtop = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle - file creator menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_create::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the event
|
||||||
|
if (ev)
|
||||||
|
{
|
||||||
|
// handle selections
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
if ((ev->itemref == ITEMREF_CREATE) || (ev->itemref == ITEMREF_NEW_IMAGE_NAME))
|
||||||
|
{
|
||||||
|
std::string tmp_file(m_filename);
|
||||||
|
if (tmp_file.find('.') != -1 && tmp_file.find('.') < tmp_file.length() - 1)
|
||||||
|
{
|
||||||
|
m_current_file = m_filename;
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ui().popup_time(1, "%s", _("Please enter a file extension too"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_SPECIAL:
|
||||||
|
if (get_selection_ref() == ITEMREF_NEW_IMAGE_NAME)
|
||||||
|
{
|
||||||
|
input_character(m_filename, ev->unichar, &osd_is_valid_filename_char);
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IPT_UI_CANCEL:
|
||||||
|
m_ok = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
SELECT FORMAT MENU
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_select_format::menu_select_format(mame_ui_manager &mui, render_container &container, const std::vector<floppy_image_format_t *> &formats, int ext_match, floppy_image_format_t **result)
|
||||||
|
: menu(mui, container)
|
||||||
|
{
|
||||||
|
m_formats = formats;
|
||||||
|
m_ext_match = ext_match;
|
||||||
|
m_result = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_select_format::~menu_select_format()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_select_format::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
item_append(_("Select image format"), FLAG_DISABLE, nullptr);
|
||||||
|
for (unsigned int i = 0; i != m_formats.size(); i++)
|
||||||
|
{
|
||||||
|
floppy_image_format_t *fmt = m_formats[i];
|
||||||
|
|
||||||
|
if (i && i == m_ext_match)
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(fmt->description(), fmt->name(), 0, fmt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_select_format::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
*m_result = (floppy_image_format_t *)ev->itemref;
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
SELECT FORMAT MENU
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_select_floppy_init::menu_select_floppy_init(mame_ui_manager &mui, render_container &container, const std::vector<floppy_image_device::fs_info> &fs, int *result)
|
||||||
|
: menu(mui, container),
|
||||||
|
m_fs(fs),
|
||||||
|
m_result(result)
|
||||||
|
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_select_floppy_init::~menu_select_floppy_init()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_select_floppy_init::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
item_append(_("Select initial contents"), FLAG_DISABLE, nullptr);
|
||||||
|
int id = 0;
|
||||||
|
for (const auto &fmt : m_fs)
|
||||||
|
item_append(fmt.m_description, fmt.m_name, 0, (void *)(uintptr_t)(id++));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_select_floppy_init::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
*m_result = int(uintptr_t(ev->itemref));
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ui
|
104
src/icludes/frontend/mame/ui/filecreate.h
Normal file
104
src/icludes/frontend/mame/ui/filecreate.h
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/filecreate.h
|
||||||
|
|
||||||
|
MESS's clunky built-in file manager
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_FILECREATE_H
|
||||||
|
#define MAME_FRONTEND_UI_FILECREATE_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
#include "imagedev/floppy.h"
|
||||||
|
|
||||||
|
|
||||||
|
class floppy_image_format_t;
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// ======================> menu_confirm_save_as
|
||||||
|
|
||||||
|
class menu_confirm_save_as : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_confirm_save_as(mame_ui_manager &mui, render_container &container, bool *yes);
|
||||||
|
virtual ~menu_confirm_save_as() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
bool *m_yes;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> menu_file_create
|
||||||
|
|
||||||
|
class menu_file_create : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_file_create(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool &ok);
|
||||||
|
virtual ~menu_file_create() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
bool & m_ok;
|
||||||
|
device_image_interface * m_image;
|
||||||
|
std::string & m_current_directory;
|
||||||
|
std::string & m_current_file;
|
||||||
|
const image_device_format * m_current_format;
|
||||||
|
std::string m_filename;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ======================> menu_select_format
|
||||||
|
|
||||||
|
class menu_select_format : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_select_format(mame_ui_manager &mui, render_container &container,
|
||||||
|
const std::vector<floppy_image_format_t *> &formats, int ext_match, floppy_image_format_t **result);
|
||||||
|
virtual ~menu_select_format() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
std::vector<floppy_image_format_t *> m_formats;
|
||||||
|
int m_ext_match;
|
||||||
|
floppy_image_format_t * *m_result;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ======================> menu_select_floppy_init
|
||||||
|
|
||||||
|
class menu_select_floppy_init : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_select_floppy_init(mame_ui_manager &mui, render_container &container,
|
||||||
|
const std::vector<floppy_image_device::fs_info> &fs, int *result);
|
||||||
|
virtual ~menu_select_floppy_init() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
const std::vector<floppy_image_device::fs_info> &m_fs;
|
||||||
|
int * m_result;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_FILECREATE_H
|
202
src/icludes/frontend/mame/ui/filemngr.cpp
Normal file
202
src/icludes/frontend/mame/ui/filemngr.cpp
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/filemngr.cpp
|
||||||
|
|
||||||
|
MESS's clunky built-in file manager
|
||||||
|
|
||||||
|
TODO
|
||||||
|
- Restrict directory listing by file extension
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/filemngr.h"
|
||||||
|
|
||||||
|
#include "ui/filesel.h"
|
||||||
|
#include "ui/floppycntrl.h"
|
||||||
|
#include "ui/imgcntrl.h"
|
||||||
|
#include "ui/miscmenu.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "softlist.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
FILE MANAGER
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_manager::menu_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings)
|
||||||
|
: menu(mui, container)
|
||||||
|
, selected_device(nullptr)
|
||||||
|
, m_warnings(warnings ? warnings : "")
|
||||||
|
{
|
||||||
|
// The warning string is used when accessing from the force_file_manager call, i.e.
|
||||||
|
// when the file manager is loaded top front in the case of mandatory image devices
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_manager::~menu_file_manager()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// custom_render - perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_manager::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
// access the path
|
||||||
|
std::string_view path = selected_device && selected_device->exists() ? selected_device->filename() : std::string_view();
|
||||||
|
extra_text_render(top, bottom, origx1, origy1, origx2, origy2, std::string_view(), path);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_file_manager::fill_image_line(device_image_interface *img, std::string &instance, std::string &filename)
|
||||||
|
{
|
||||||
|
// get the image type/id
|
||||||
|
instance = string_format("%s (%s)", img->instance_name(), img->brief_instance_name());
|
||||||
|
|
||||||
|
// get the base name
|
||||||
|
if (img->basename() != nullptr)
|
||||||
|
{
|
||||||
|
filename.assign(img->basename());
|
||||||
|
|
||||||
|
// if the image has been loaded through softlist, also show the loaded part
|
||||||
|
if (img->loaded_through_softlist())
|
||||||
|
{
|
||||||
|
const software_part *tmp = img->part_entry();
|
||||||
|
if (!tmp->name().empty())
|
||||||
|
{
|
||||||
|
filename.append(" (");
|
||||||
|
filename.append(tmp->name());
|
||||||
|
// also check if this part has a specific part_id (e.g. "Map Disc", "Bonus Disc", etc.), and in case display it
|
||||||
|
if (img->get_feature("part_id") != nullptr)
|
||||||
|
{
|
||||||
|
filename.append(": ");
|
||||||
|
filename.append(img->get_feature("part_id"));
|
||||||
|
}
|
||||||
|
filename.append(")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
filename.assign("---");
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_manager::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
std::string tmp_inst, tmp_name;
|
||||||
|
|
||||||
|
if (!m_warnings.empty())
|
||||||
|
item_append(m_warnings, FLAG_DISABLE, nullptr);
|
||||||
|
|
||||||
|
// cycle through all devices for this system
|
||||||
|
bool missing_mandatory = false;
|
||||||
|
std::unordered_set<std::string> devtags;
|
||||||
|
for (device_t &dev : device_enumerator(machine().root_device()))
|
||||||
|
{
|
||||||
|
bool tag_appended = false;
|
||||||
|
if (!devtags.insert(dev.tag()).second)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// check whether it owns an image interface
|
||||||
|
image_interface_enumerator subiter(dev);
|
||||||
|
if (subiter.first() != nullptr)
|
||||||
|
{
|
||||||
|
// if so, cycle through all its image interfaces
|
||||||
|
for (device_image_interface &scan : subiter)
|
||||||
|
{
|
||||||
|
if (!scan.user_loadable())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// if it is a child device, and not something further down the device tree, we want it in the menu!
|
||||||
|
if (strcmp(scan.device().owner()->tag(), dev.tag()) == 0)
|
||||||
|
if (devtags.insert(scan.device().tag()).second)
|
||||||
|
{
|
||||||
|
if (!scan.basename() && scan.must_be_loaded())
|
||||||
|
missing_mandatory = true;
|
||||||
|
|
||||||
|
// check whether we already had some devices with the same owner: if not, output the owner tag!
|
||||||
|
if (!tag_appended)
|
||||||
|
{
|
||||||
|
item_append(string_format(_("[root%1$s]"), dev.tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
|
||||||
|
tag_appended = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// finally, append the image interface to the menu
|
||||||
|
fill_image_line(&scan, tmp_inst, tmp_name);
|
||||||
|
item_append(tmp_inst, tmp_name, 0, (void *)&scan);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
if (m_warnings.empty() || !missing_mandatory)
|
||||||
|
item_append(m_warnings.empty() ? _("Reset Machine") : _("Start Machine"), 0, (void *)1);
|
||||||
|
|
||||||
|
custombottom = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_manager::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref && (ev->iptkey == IPT_UI_SELECT))
|
||||||
|
{
|
||||||
|
if ((uintptr_t)ev->itemref == 1)
|
||||||
|
{
|
||||||
|
machine().schedule_hard_reset();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
selected_device = (device_image_interface *) ev->itemref;
|
||||||
|
if (selected_device)
|
||||||
|
{
|
||||||
|
floppy_image_device *floppy_device = dynamic_cast<floppy_image_device *>(selected_device);
|
||||||
|
if (floppy_device)
|
||||||
|
menu::stack_push<menu_control_floppy_image>(ui(), container(), *floppy_device);
|
||||||
|
else
|
||||||
|
menu::stack_push<menu_control_device_image>(ui(), container(), *selected_device);
|
||||||
|
|
||||||
|
// reset the existing menu
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// force file manager menu
|
||||||
|
void menu_file_manager::force_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings)
|
||||||
|
{
|
||||||
|
// drop any existing menus and start the file manager
|
||||||
|
menu::stack_reset(mui);
|
||||||
|
menu::stack_push_special_main<menu_file_manager>(mui, container, warnings);
|
||||||
|
mui.show_menu();
|
||||||
|
|
||||||
|
// make sure MAME is paused
|
||||||
|
mui.machine().pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
46
src/icludes/frontend/mame/ui/filemngr.h
Normal file
46
src/icludes/frontend/mame/ui/filemngr.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/filemngr.h
|
||||||
|
|
||||||
|
MESS's clunky built-in file manager
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_FILEMNGR_H
|
||||||
|
#define MAME_FRONTEND_UI_FILEMNGR_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_file_manager : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string current_directory;
|
||||||
|
std::string current_file;
|
||||||
|
device_image_interface *selected_device;
|
||||||
|
|
||||||
|
static void force_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings);
|
||||||
|
|
||||||
|
menu_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings);
|
||||||
|
virtual ~menu_file_manager();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void fill_image_line(device_image_interface *img, std::string &instance, std::string &filename);
|
||||||
|
|
||||||
|
std::string const m_warnings;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_FILEMNGR_H
|
590
src/icludes/frontend/mame/ui/filesel.cpp
Normal file
590
src/icludes/frontend/mame/ui/filesel.cpp
Normal file
@ -0,0 +1,590 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/filesel.cpp
|
||||||
|
|
||||||
|
MAME's clunky built-in file manager
|
||||||
|
|
||||||
|
TODO
|
||||||
|
- Restrict empty slot if image required
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/filesel.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
#include "imagedev/floppy.h"
|
||||||
|
|
||||||
|
#include "corestr.h"
|
||||||
|
#include "zippath.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
CONSTANTS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
// conditional compilation to enable chosing of image formats - this is not
|
||||||
|
// yet fully implemented
|
||||||
|
#define ENABLE_FORMATS 0
|
||||||
|
|
||||||
|
// time (in seconds) to display errors
|
||||||
|
#define ERROR_MESSAGE_TIME 5
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
FILE SELECTOR MENU
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_selector::menu_file_selector(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, menu_file_selector::result &result)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_image(image)
|
||||||
|
, m_current_directory(current_directory)
|
||||||
|
, m_current_file(current_file)
|
||||||
|
, m_has_empty(has_empty)
|
||||||
|
, m_has_softlist(has_softlist)
|
||||||
|
, m_has_create(has_create)
|
||||||
|
, m_result(result)
|
||||||
|
{
|
||||||
|
(void)m_image;
|
||||||
|
set_process_flags(PROCESS_IGNOREPAUSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_selector::~menu_file_selector()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// custom_render - perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_selector::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
// lay out extra text
|
||||||
|
auto layout = ui().create_layout(container());
|
||||||
|
layout.add_text(m_current_directory);
|
||||||
|
|
||||||
|
// position this extra text
|
||||||
|
float x1, y1, x2, y2;
|
||||||
|
extra_text_position(origx1, origx2, origy1, top, layout, -1, x1, y1, x2, y2);
|
||||||
|
|
||||||
|
// draw a box
|
||||||
|
ui().draw_outlined_box(container(), x1, y1, x2, y2, ui().colors().background_color());
|
||||||
|
|
||||||
|
// take off the borders
|
||||||
|
x1 += ui().box_lr_border() * machine().render().ui_aspect(&container());
|
||||||
|
y1 += ui().box_tb_border();
|
||||||
|
|
||||||
|
size_t hit_start = 0, hit_span = 0;
|
||||||
|
if (is_mouse_hit()
|
||||||
|
&& layout.hit_test(get_mouse_x() - x1, get_mouse_y() - y1, hit_start, hit_span)
|
||||||
|
&& m_current_directory.substr(hit_start, hit_span) != PATH_SEPARATOR)
|
||||||
|
{
|
||||||
|
// we're hovering over a directory! highlight it
|
||||||
|
auto target_dir_start = m_current_directory.rfind(PATH_SEPARATOR, hit_start) + 1;
|
||||||
|
auto target_dir_end = m_current_directory.find(PATH_SEPARATOR, hit_start + hit_span);
|
||||||
|
m_hover_directory = m_current_directory.substr(0, target_dir_end + strlen(PATH_SEPARATOR));
|
||||||
|
|
||||||
|
// highlight the text in question
|
||||||
|
rgb_t fgcolor = ui().colors().mouseover_color();
|
||||||
|
rgb_t bgcolor = ui().colors().mouseover_bg_color();
|
||||||
|
layout.restyle(target_dir_start, target_dir_end - target_dir_start, &fgcolor, &bgcolor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// we are not hovering over anything
|
||||||
|
m_hover_directory.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the text within it
|
||||||
|
layout.emit(container(), x1, y1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// custom_mouse_down - perform our special mouse down
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
bool menu_file_selector::custom_mouse_down()
|
||||||
|
{
|
||||||
|
if (m_hover_directory.length() > 0)
|
||||||
|
{
|
||||||
|
m_current_directory = m_hover_directory;
|
||||||
|
reset(reset_options::SELECT_FIRST);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// compare_file_selector_entries - sorting proc
|
||||||
|
// for file selector entries
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
int menu_file_selector::compare_entries(const file_selector_entry *e1, const file_selector_entry *e2)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
const char *e1_basename = e1->basename.c_str();
|
||||||
|
const char *e2_basename = e2->basename.c_str();
|
||||||
|
|
||||||
|
if (e1->type < e2->type)
|
||||||
|
{
|
||||||
|
result = -1;
|
||||||
|
}
|
||||||
|
else if (e1->type > e2->type)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = core_stricmp(e1_basename, e2_basename);
|
||||||
|
if (result == 0)
|
||||||
|
{
|
||||||
|
result = strcmp(e1_basename, e2_basename);
|
||||||
|
if (result == 0)
|
||||||
|
{
|
||||||
|
if (e1 < e2)
|
||||||
|
result = -1;
|
||||||
|
else if (e1 > e2)
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// append_entry - appends a new
|
||||||
|
// file selector entry to an entry list
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_selector::file_selector_entry &menu_file_selector::append_entry(
|
||||||
|
file_selector_entry_type entry_type,
|
||||||
|
const std::string &entry_basename,
|
||||||
|
const std::string &entry_fullpath)
|
||||||
|
{
|
||||||
|
return append_entry(entry_type, std::string(entry_basename), std::string(entry_fullpath));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// append_entry - appends a new
|
||||||
|
// file selector entry to an entry list
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_selector::file_selector_entry &menu_file_selector::append_entry(
|
||||||
|
file_selector_entry_type entry_type,
|
||||||
|
std::string &&entry_basename,
|
||||||
|
std::string &&entry_fullpath)
|
||||||
|
{
|
||||||
|
// allocate a new entry
|
||||||
|
file_selector_entry entry;
|
||||||
|
entry.type = entry_type;
|
||||||
|
entry.basename = std::move(entry_basename);
|
||||||
|
entry.fullpath = std::move(entry_fullpath);
|
||||||
|
|
||||||
|
// find the end of the list
|
||||||
|
return m_entrylist.emplace_back(std::move(entry));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// append_dirent_entry - appends
|
||||||
|
// a menu item for a file selector entry
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_file_selector::file_selector_entry *menu_file_selector::append_dirent_entry(const osd::directory::entry *dirent)
|
||||||
|
{
|
||||||
|
file_selector_entry_type entry_type;
|
||||||
|
switch (dirent->type)
|
||||||
|
{
|
||||||
|
case osd::directory::entry::entry_type::FILE:
|
||||||
|
entry_type = SELECTOR_ENTRY_TYPE_FILE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case osd::directory::entry::entry_type::DIR:
|
||||||
|
entry_type = SELECTOR_ENTRY_TYPE_DIRECTORY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// exceptional case; do not add a menu item
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// determine the full path
|
||||||
|
std::string buffer = util::zippath_combine(m_current_directory, dirent->name);
|
||||||
|
|
||||||
|
// create the file selector entry
|
||||||
|
return &append_entry(
|
||||||
|
entry_type,
|
||||||
|
dirent->name,
|
||||||
|
std::move(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// append_entry_menu_item - appends
|
||||||
|
// a menu item for a file selector entry
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_selector::append_entry_menu_item(const file_selector_entry *entry)
|
||||||
|
{
|
||||||
|
std::string text;
|
||||||
|
std::string subtext;
|
||||||
|
|
||||||
|
switch(entry->type)
|
||||||
|
{
|
||||||
|
case SELECTOR_ENTRY_TYPE_EMPTY:
|
||||||
|
text = _("[empty slot]");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_CREATE:
|
||||||
|
text = _("[create]");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_SOFTWARE_LIST:
|
||||||
|
text = _("[software list]");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_DRIVE:
|
||||||
|
text = entry->basename;
|
||||||
|
subtext = "[DRIVE]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_DIRECTORY:
|
||||||
|
text = entry->basename;
|
||||||
|
subtext = "[DIR]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_FILE:
|
||||||
|
text = entry->basename;
|
||||||
|
subtext = "[FILE]";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
item_append(std::move(text), std::move(subtext), 0, (void *) entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// select_item
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_selector::select_item(const file_selector_entry &entry)
|
||||||
|
{
|
||||||
|
switch (entry.type)
|
||||||
|
{
|
||||||
|
case SELECTOR_ENTRY_TYPE_EMPTY:
|
||||||
|
// empty slot - unload
|
||||||
|
m_result = result::EMPTY;
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_CREATE:
|
||||||
|
// create
|
||||||
|
m_result = result::CREATE;
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_SOFTWARE_LIST:
|
||||||
|
m_result = result::SOFTLIST;
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_DRIVE:
|
||||||
|
case SELECTOR_ENTRY_TYPE_DIRECTORY:
|
||||||
|
{
|
||||||
|
// drive/directory - first check the path
|
||||||
|
util::zippath_directory::ptr dir;
|
||||||
|
std::error_condition const err = util::zippath_directory::open(entry.fullpath, dir);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
// this path is problematic; present the user with an error and bail
|
||||||
|
ui().popup_time(1, _("Error accessing %s"), entry.fullpath);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_current_directory.assign(entry.fullpath);
|
||||||
|
reset(reset_options::SELECT_FIRST);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECTOR_ENTRY_TYPE_FILE:
|
||||||
|
// file
|
||||||
|
m_current_file.assign(entry.fullpath);
|
||||||
|
m_result = result::FILE;
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// type_search_char
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_selector::type_search_char(char32_t ch)
|
||||||
|
{
|
||||||
|
std::string const current(m_filename);
|
||||||
|
if (input_character(m_filename, ch, uchar_is_printable))
|
||||||
|
{
|
||||||
|
ui().popup_time(ERROR_MESSAGE_TIME, "%s", m_filename);
|
||||||
|
|
||||||
|
file_selector_entry const *const cur_selected(reinterpret_cast<file_selector_entry const *>(get_selection_ref()));
|
||||||
|
|
||||||
|
// if it's a perfect match for the current selection, don't move it
|
||||||
|
if (!cur_selected || core_strnicmp(cur_selected->basename.c_str(), m_filename.c_str(), m_filename.size()))
|
||||||
|
{
|
||||||
|
std::string::size_type bestmatch(0);
|
||||||
|
file_selector_entry const *selected_entry(cur_selected);
|
||||||
|
for (auto &entry : m_entrylist)
|
||||||
|
{
|
||||||
|
// TODO: more efficient "common prefix" code
|
||||||
|
std::string::size_type match(0);
|
||||||
|
for (std::string::size_type i = 1; m_filename.size() >= i; ++i)
|
||||||
|
{
|
||||||
|
if (!core_strnicmp(entry.basename.c_str(), m_filename.c_str(), i))
|
||||||
|
match = i;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match > bestmatch)
|
||||||
|
{
|
||||||
|
bestmatch = match;
|
||||||
|
selected_entry = &entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selected_entry && (selected_entry != cur_selected))
|
||||||
|
{
|
||||||
|
set_selection((void *)selected_entry);
|
||||||
|
centre_selection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_selector::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
const file_selector_entry *selected_entry = nullptr;
|
||||||
|
|
||||||
|
// clear out the menu entries
|
||||||
|
m_entrylist.clear();
|
||||||
|
|
||||||
|
// open the directory
|
||||||
|
util::zippath_directory::ptr directory;
|
||||||
|
std::error_condition const err = util::zippath_directory::open(m_current_directory, directory);
|
||||||
|
|
||||||
|
// add the "[empty slot]" entry if available
|
||||||
|
if (m_has_empty)
|
||||||
|
append_entry(SELECTOR_ENTRY_TYPE_EMPTY, "", "");
|
||||||
|
|
||||||
|
// add the "[create]" entry
|
||||||
|
if (m_has_create && directory && !directory->is_archive())
|
||||||
|
append_entry(SELECTOR_ENTRY_TYPE_CREATE, "", "");
|
||||||
|
|
||||||
|
// add and select the "[software list]" entry if available
|
||||||
|
if (m_has_softlist)
|
||||||
|
selected_entry = &append_entry(SELECTOR_ENTRY_TYPE_SOFTWARE_LIST, "", "");
|
||||||
|
|
||||||
|
// add the drives
|
||||||
|
for (std::string const &volume_name : osd_get_volume_names())
|
||||||
|
append_entry(SELECTOR_ENTRY_TYPE_DRIVE, volume_name, volume_name);
|
||||||
|
|
||||||
|
// mark first filename entry
|
||||||
|
std::size_t const first = m_entrylist.size() + 1;
|
||||||
|
|
||||||
|
// build the menu for each item
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
osd_printf_verbose(
|
||||||
|
"menu_file_selector::populate: error opening directory '%s' (%s:%d %s)\n",
|
||||||
|
m_current_directory, err.category().name(), err.value(), err.message());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (osd::directory::entry const *dirent = directory->readdir(); dirent; dirent = directory->readdir())
|
||||||
|
{
|
||||||
|
// append a dirent entry
|
||||||
|
file_selector_entry const *entry = append_dirent_entry(dirent);
|
||||||
|
if (entry)
|
||||||
|
{
|
||||||
|
// set the selected item to be the first non-parent directory or file
|
||||||
|
if (!selected_entry && strcmp(dirent->name, ".."))
|
||||||
|
selected_entry = entry;
|
||||||
|
|
||||||
|
// do we have to select this file?
|
||||||
|
if (!core_stricmp(m_current_file.c_str(), dirent->name))
|
||||||
|
selected_entry = entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
directory.reset();
|
||||||
|
|
||||||
|
if (m_entrylist.size() > first)
|
||||||
|
{
|
||||||
|
// sort the menu entries
|
||||||
|
const std::collate<wchar_t> &coll = std::use_facet<std::collate<wchar_t>>(std::locale());
|
||||||
|
std::sort(
|
||||||
|
m_entrylist.begin() + first,
|
||||||
|
m_entrylist.end(),
|
||||||
|
[&coll] (file_selector_entry const &x, file_selector_entry const &y)
|
||||||
|
{
|
||||||
|
std::wstring const xstr = wstring_from_utf8(x.basename);
|
||||||
|
std::wstring const ystr = wstring_from_utf8(y.basename);
|
||||||
|
return coll.compare(xstr.data(), xstr.data()+xstr.size(), ystr.data(), ystr.data()+ystr.size()) < 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// append all of the menu entries
|
||||||
|
for (file_selector_entry const &entry : m_entrylist)
|
||||||
|
append_entry_menu_item(&entry);
|
||||||
|
|
||||||
|
// set the selection (if we have one)
|
||||||
|
if (selected_entry)
|
||||||
|
set_selection((void *)selected_entry);
|
||||||
|
|
||||||
|
// set up custom render proc
|
||||||
|
customtop = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_file_selector::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev)
|
||||||
|
{
|
||||||
|
if (ev->iptkey == IPT_SPECIAL)
|
||||||
|
{
|
||||||
|
// if it's any other key and we're not maxed out, update
|
||||||
|
type_search_char(ev->unichar);
|
||||||
|
}
|
||||||
|
else if (ev->iptkey == IPT_UI_CANCEL)
|
||||||
|
{
|
||||||
|
// reset the char buffer also in this case
|
||||||
|
if (!m_filename.empty())
|
||||||
|
{
|
||||||
|
m_filename.clear();
|
||||||
|
ui().popup_time(ERROR_MESSAGE_TIME, "%s", m_filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ev->itemref && (ev->iptkey == IPT_UI_SELECT))
|
||||||
|
{
|
||||||
|
// handle selections
|
||||||
|
select_item(*reinterpret_cast<file_selector_entry const *>(ev->itemref));
|
||||||
|
|
||||||
|
// reset the char buffer when pressing IPT_UI_SELECT
|
||||||
|
m_filename.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
SELECT RW
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_select_rw::menu_select_rw(mame_ui_manager &mui, render_container &container,
|
||||||
|
bool can_in_place, result &result)
|
||||||
|
: menu(mui, container),
|
||||||
|
m_can_in_place(can_in_place),
|
||||||
|
m_result(result)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_select_rw::~menu_select_rw()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_select_rw::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
item_append(_("Select access mode"), FLAG_DISABLE, nullptr);
|
||||||
|
item_append(_("Read-only"), 0, itemref_from_result(result::READONLY));
|
||||||
|
if (m_can_in_place)
|
||||||
|
item_append(_("Read-write"), 0, itemref_from_result(result::READWRITE));
|
||||||
|
item_append(_("Read this image, write to another image"), 0, itemref_from_result(result::WRITE_OTHER));
|
||||||
|
item_append(_("Read this image, write to diff"), 0, itemref_from_result(result::WRITE_DIFF));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_select_rw::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
m_result = result_from_itemref(ev->itemref);
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// itemref_from_result
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void *menu_select_rw::itemref_from_result(menu_select_rw::result result)
|
||||||
|
{
|
||||||
|
return (void *)(uintptr_t)(unsigned int)result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// result_from_itemref
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_select_rw::result menu_select_rw::result_from_itemref(void *itemref)
|
||||||
|
{
|
||||||
|
return (menu_select_rw::result) (unsigned int) (uintptr_t)itemref;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ui
|
133
src/icludes/frontend/mame/ui/filesel.h
Normal file
133
src/icludes/frontend/mame/ui/filesel.h
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/filesel.h
|
||||||
|
|
||||||
|
MESS's clunky built-in file manager
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_FILESEL_H
|
||||||
|
#define MAME_FRONTEND_UI_FILESEL_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// ======================> menu_file_selector
|
||||||
|
|
||||||
|
class menu_file_selector : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum class result
|
||||||
|
{
|
||||||
|
INVALID = -1,
|
||||||
|
EMPTY = 0x1000,
|
||||||
|
SOFTLIST,
|
||||||
|
CREATE,
|
||||||
|
FILE
|
||||||
|
};
|
||||||
|
|
||||||
|
menu_file_selector(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
device_image_interface *image,
|
||||||
|
std::string ¤t_directory,
|
||||||
|
std::string ¤t_file,
|
||||||
|
bool has_empty,
|
||||||
|
bool has_softlist,
|
||||||
|
bool has_create,
|
||||||
|
result &result);
|
||||||
|
virtual ~menu_file_selector() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual bool custom_ui_cancel() override { return !m_filename.empty(); }
|
||||||
|
virtual bool custom_mouse_down() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum file_selector_entry_type
|
||||||
|
{
|
||||||
|
SELECTOR_ENTRY_TYPE_EMPTY,
|
||||||
|
SELECTOR_ENTRY_TYPE_CREATE,
|
||||||
|
SELECTOR_ENTRY_TYPE_SOFTWARE_LIST,
|
||||||
|
SELECTOR_ENTRY_TYPE_DRIVE,
|
||||||
|
SELECTOR_ENTRY_TYPE_DIRECTORY,
|
||||||
|
SELECTOR_ENTRY_TYPE_FILE
|
||||||
|
};
|
||||||
|
|
||||||
|
struct file_selector_entry
|
||||||
|
{
|
||||||
|
file_selector_entry() = default;
|
||||||
|
file_selector_entry(file_selector_entry &&) = default;
|
||||||
|
file_selector_entry &operator=(file_selector_entry &&) = default;
|
||||||
|
|
||||||
|
file_selector_entry_type type = SELECTOR_ENTRY_TYPE_EMPTY;
|
||||||
|
std::string basename;
|
||||||
|
std::string fullpath;
|
||||||
|
};
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
device_image_interface *const m_image;
|
||||||
|
std::string & m_current_directory;
|
||||||
|
std::string & m_current_file;
|
||||||
|
bool const m_has_empty;
|
||||||
|
bool const m_has_softlist;
|
||||||
|
bool const m_has_create;
|
||||||
|
result & m_result;
|
||||||
|
std::vector<file_selector_entry> m_entrylist;
|
||||||
|
std::string m_hover_directory;
|
||||||
|
std::string m_filename;
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
// methods
|
||||||
|
int compare_entries(const file_selector_entry *e1, const file_selector_entry *e2);
|
||||||
|
file_selector_entry &append_entry(file_selector_entry_type entry_type, const std::string &entry_basename, const std::string &entry_fullpath);
|
||||||
|
file_selector_entry &append_entry(file_selector_entry_type entry_type, std::string &&entry_basename, std::string &&entry_fullpath);
|
||||||
|
file_selector_entry *append_dirent_entry(const osd::directory::entry *dirent);
|
||||||
|
void append_entry_menu_item(const file_selector_entry *entry);
|
||||||
|
void select_item(const file_selector_entry &entry);
|
||||||
|
void type_search_char(char32_t ch);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> menu_select_rw
|
||||||
|
|
||||||
|
class menu_select_rw : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum class result
|
||||||
|
{
|
||||||
|
INVALID = -1,
|
||||||
|
READONLY = 0x3000,
|
||||||
|
READWRITE,
|
||||||
|
WRITE_OTHER,
|
||||||
|
WRITE_DIFF
|
||||||
|
};
|
||||||
|
menu_select_rw(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
bool can_in_place,
|
||||||
|
result &result);
|
||||||
|
virtual ~menu_select_rw() override;
|
||||||
|
|
||||||
|
static void *itemref_from_result(result result);
|
||||||
|
static result result_from_itemref(void *itemref);
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
bool m_can_in_place;
|
||||||
|
result & m_result;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_FILESEL_H
|
188
src/icludes/frontend/mame/ui/floppycntrl.cpp
Normal file
188
src/icludes/frontend/mame/ui/floppycntrl.cpp
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Olivier Galibert
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/floppycntrl.cpp
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "ui/filesel.h"
|
||||||
|
#include "ui/filecreate.h"
|
||||||
|
#include "ui/floppycntrl.h"
|
||||||
|
|
||||||
|
#include "zippath.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
IMPLEMENTATION
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
menu_control_floppy_image::menu_control_floppy_image(mame_ui_manager &mui, render_container &container, device_image_interface &image) :
|
||||||
|
menu_control_device_image(mui, container, image),
|
||||||
|
fd(dynamic_cast<floppy_image_device &>(image)),
|
||||||
|
input_format(nullptr),
|
||||||
|
output_format(nullptr),
|
||||||
|
create_fs(nullptr),
|
||||||
|
input_filename(),
|
||||||
|
output_filename()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_control_floppy_image::~menu_control_floppy_image()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_control_floppy_image::do_load_create()
|
||||||
|
{
|
||||||
|
if(input_filename.compare("")==0) {
|
||||||
|
image_init_result err = fd.create(output_filename, nullptr, nullptr);
|
||||||
|
if (err != image_init_result::PASS) {
|
||||||
|
machine().popmessage("Error: %s", fd.error());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (create_fs) {
|
||||||
|
// HACK: ensure the floppy_image structure is created since device_image_interface may not otherwise do so during "init phase"
|
||||||
|
err = fd.finish_load();
|
||||||
|
if (err == image_init_result::PASS) {
|
||||||
|
fs_meta_data meta;
|
||||||
|
fd.init_fs(create_fs, meta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
image_init_result err = fd.load(input_filename);
|
||||||
|
if ((err == image_init_result::PASS) && (output_filename.compare("") != 0))
|
||||||
|
err = fd.reopen_for_write(output_filename) ? image_init_result::FAIL : image_init_result::PASS;
|
||||||
|
if (err != image_init_result::PASS) {
|
||||||
|
machine().popmessage("Error: %s", fd.error());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(output_format)
|
||||||
|
fd.setup_write(output_format);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_control_floppy_image::hook_load(const std::string &filename)
|
||||||
|
{
|
||||||
|
input_filename = filename;
|
||||||
|
input_format = static_cast<floppy_image_device &>(m_image).identify(filename);
|
||||||
|
|
||||||
|
if (!input_format)
|
||||||
|
{
|
||||||
|
machine().popmessage("Error: %s\n", m_image.error());
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool can_in_place = input_format->supports_save();
|
||||||
|
if(can_in_place) {
|
||||||
|
std::string tmp_path;
|
||||||
|
util::core_file::ptr tmp_file;
|
||||||
|
// attempt to open the file for writing but *without* create
|
||||||
|
std::error_condition const filerr = util::zippath_fopen(filename, OPEN_FLAG_READ | OPEN_FLAG_WRITE, tmp_file, tmp_path);
|
||||||
|
if(!filerr)
|
||||||
|
tmp_file.reset();
|
||||||
|
else
|
||||||
|
can_in_place = false;
|
||||||
|
}
|
||||||
|
m_submenu_result.rw = menu_select_rw::result::INVALID;
|
||||||
|
menu::stack_push<menu_select_rw>(ui(), container(), can_in_place, m_submenu_result.rw);
|
||||||
|
m_state = SELECT_RW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_control_floppy_image::menu_activated()
|
||||||
|
{
|
||||||
|
switch (m_state) {
|
||||||
|
case DO_CREATE: {
|
||||||
|
std::vector<floppy_image_format_t *> format_array;
|
||||||
|
for(floppy_image_format_t *i : fd.get_formats()) {
|
||||||
|
if(!i->supports_save())
|
||||||
|
continue;
|
||||||
|
if (i->extension_matches(m_current_file.c_str()))
|
||||||
|
format_array.push_back(i);
|
||||||
|
}
|
||||||
|
int ext_match = format_array.size();
|
||||||
|
for(floppy_image_format_t *i : fd.get_formats()) {
|
||||||
|
if(!i->supports_save())
|
||||||
|
continue;
|
||||||
|
if (!i->extension_matches(m_current_file.c_str()))
|
||||||
|
format_array.push_back(i);
|
||||||
|
}
|
||||||
|
output_format = nullptr;
|
||||||
|
menu::stack_push<menu_select_format>(ui(), container(), format_array, ext_match, &output_format);
|
||||||
|
|
||||||
|
m_state = SELECT_FORMAT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SELECT_FORMAT:
|
||||||
|
if(!output_format) {
|
||||||
|
m_state = START_FILE;
|
||||||
|
menu_activated();
|
||||||
|
} else {
|
||||||
|
const auto &fs = fd.get_create_fs();
|
||||||
|
output_filename = util::zippath_combine(m_current_directory, m_current_file);
|
||||||
|
if(fs.size() == 1) {
|
||||||
|
create_fs = &fs[0];
|
||||||
|
do_load_create();
|
||||||
|
stack_pop();
|
||||||
|
} else {
|
||||||
|
m_submenu_result.i = -1;
|
||||||
|
menu::stack_push<menu_select_floppy_init>(ui(), container(), fs, &m_submenu_result.i);
|
||||||
|
m_state = SELECT_INIT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_INIT:
|
||||||
|
if(m_submenu_result.i == -1) {
|
||||||
|
m_state = START_FILE;
|
||||||
|
menu_activated();
|
||||||
|
} else {
|
||||||
|
create_fs = &fd.get_create_fs()[m_submenu_result.i];
|
||||||
|
do_load_create();
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_RW:
|
||||||
|
switch(m_submenu_result.rw) {
|
||||||
|
case menu_select_rw::result::READONLY:
|
||||||
|
do_load_create();
|
||||||
|
fd.setup_write(nullptr);
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_select_rw::result::READWRITE:
|
||||||
|
output_format = input_format;
|
||||||
|
do_load_create();
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_select_rw::result::WRITE_DIFF:
|
||||||
|
machine().popmessage("Sorry, diffs are not supported yet\n");
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_select_rw::result::WRITE_OTHER:
|
||||||
|
menu::stack_push<menu_file_create>(ui(), container(), &m_image, m_current_directory, m_current_file, m_create_ok);
|
||||||
|
m_state = CHECK_CREATE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_select_rw::result::INVALID:
|
||||||
|
m_state = START_FILE;
|
||||||
|
menu_activated();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
menu_control_device_image::menu_activated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
46
src/icludes/frontend/mame/ui/floppycntrl.h
Normal file
46
src/icludes/frontend/mame/ui/floppycntrl.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Olivier Galibert
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/floppycntrl.h
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_FLOPPYCNTRL_H
|
||||||
|
#define MAME_FRONTEND_UI_FLOPPYCNTRL_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/imgcntrl.h"
|
||||||
|
|
||||||
|
#include "imagedev/floppy.h"
|
||||||
|
#include "formats/flopimg.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_control_floppy_image : public menu_control_device_image
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_control_floppy_image(mame_ui_manager &ui, render_container &container, device_image_interface &image);
|
||||||
|
virtual ~menu_control_floppy_image() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum { SELECT_FORMAT = LAST_ID, SELECT_MEDIA, SELECT_INIT, SELECT_RW };
|
||||||
|
|
||||||
|
floppy_image_device &fd;
|
||||||
|
floppy_image_format_t *input_format, *output_format;
|
||||||
|
const floppy_image_device::fs_info *create_fs;
|
||||||
|
std::string input_filename, output_filename;
|
||||||
|
|
||||||
|
void do_load_create();
|
||||||
|
virtual void hook_load(const std::string &filename) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_FLOPPYCNTRL_H
|
333
src/icludes/frontend/mame/ui/icorender.cpp
Normal file
333
src/icludes/frontend/mame/ui/icorender.cpp
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota, Victor Laskin
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/icorender.h
|
||||||
|
|
||||||
|
Windows icon file parser.
|
||||||
|
|
||||||
|
Previously based on code by Victor Laskin (victor.laskin@gmail.com)
|
||||||
|
http://vitiy.info/Code/ico.cpp
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
* Add variant that loads all images from the file
|
||||||
|
* Allow size hint for choosing best candidate
|
||||||
|
* Allow selecting amongst candidates based on colour depth
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "icorender.h"
|
||||||
|
|
||||||
|
#include "util/msdib.h"
|
||||||
|
#include "util/png.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
// need to set LOG_OUTPUT_FUNC or LOG_OUTPUT_STREAM because there's no logerror outside devices
|
||||||
|
#define LOG_OUTPUT_FUNC osd_printf_verbose
|
||||||
|
|
||||||
|
#define LOG_GENERAL (1U << 0)
|
||||||
|
|
||||||
|
//#define VERBOSE (LOG_GENERAL | LOG_DIB)
|
||||||
|
|
||||||
|
#include "logmacro.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// ICO file header
|
||||||
|
struct icon_dir_t
|
||||||
|
{
|
||||||
|
uint16_t reserved; // must be 0
|
||||||
|
uint16_t type; // 1 for icon or 2 for cursor
|
||||||
|
uint16_t count; // number of images in the file
|
||||||
|
};
|
||||||
|
|
||||||
|
// ICO file directory entry
|
||||||
|
struct icon_dir_entry_t
|
||||||
|
{
|
||||||
|
constexpr unsigned get_width() const { return width ? width : 256U; }
|
||||||
|
constexpr unsigned get_height() const { return height ? height : 256U; }
|
||||||
|
|
||||||
|
void byteswap()
|
||||||
|
{
|
||||||
|
planes = little_endianize_int16(planes);
|
||||||
|
bpp = little_endianize_int16(bpp);
|
||||||
|
size = little_endianize_int32(size);
|
||||||
|
offset = little_endianize_int32(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t width; // 0 means 256
|
||||||
|
uint8_t height; // 0 means 256
|
||||||
|
uint8_t colors; // for indexed colour, or 0 for direct colour
|
||||||
|
uint8_t reserved; // documentation says this should be 0 but .NET writes 255
|
||||||
|
uint16_t planes; // or hotspot X for cursor
|
||||||
|
uint16_t bpp; // 0 to infer from image data, or hotspot Y for cursor
|
||||||
|
uint32_t size; // image data size in bytes
|
||||||
|
uint32_t offset; // offset to image data from start of file
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool load_ico_png(util::core_file &fp, icon_dir_entry_t const &dir, bitmap_argb32 &bitmap)
|
||||||
|
{
|
||||||
|
// skip out if the data isn't a reasonable size - PNG magic alone is eight bytes
|
||||||
|
if (9U >= dir.size)
|
||||||
|
return false;
|
||||||
|
fp.seek(dir.offset, SEEK_SET);
|
||||||
|
std::error_condition const err(util::png_read_bitmap(fp, bitmap));
|
||||||
|
if (!err)
|
||||||
|
{
|
||||||
|
// found valid PNG image
|
||||||
|
assert(bitmap.valid());
|
||||||
|
if ((dir.get_width() == bitmap.width()) && ((dir.get_height() == bitmap.height())))
|
||||||
|
{
|
||||||
|
LOG("Loaded %d*%d pixel PNG image from ICO file\n", bitmap.width(), bitmap.height());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(
|
||||||
|
"Loaded %d*%d pixel PNG image from ICO file (directory indicated %u*%u)\n",
|
||||||
|
bitmap.width(),
|
||||||
|
bitmap.height(),
|
||||||
|
dir.get_width(),
|
||||||
|
dir.get_height());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (util::png_error::BAD_SIGNATURE == err)
|
||||||
|
{
|
||||||
|
// doesn't look like PNG data - just fall back to DIB without the file header
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// invalid PNG data or I/O error
|
||||||
|
LOG(
|
||||||
|
"Error %s:%d %s reading PNG image data from ICO file at offset %u (directory size %u)\n",
|
||||||
|
err.category().name(),
|
||||||
|
err.value(),
|
||||||
|
err.message(),
|
||||||
|
dir.offset,
|
||||||
|
dir.size);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool load_ico_dib(util::core_file &fp, icon_dir_entry_t const &dir, bitmap_argb32 &bitmap)
|
||||||
|
{
|
||||||
|
fp.seek(dir.offset, SEEK_SET);
|
||||||
|
util::msdib_error const err(util::msdib_read_bitmap_data(fp, bitmap, dir.size, dir.get_height()));
|
||||||
|
switch (err)
|
||||||
|
{
|
||||||
|
case util::msdib_error::NONE:
|
||||||
|
// found valid DIB image
|
||||||
|
assert(bitmap.valid());
|
||||||
|
if ((dir.get_width() == bitmap.width()) && ((dir.get_height() == bitmap.height())))
|
||||||
|
{
|
||||||
|
LOG("Loaded %d*%d pixel DIB image from ICO file\n", bitmap.width(), bitmap.height());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(
|
||||||
|
"Loaded %d*%d pixel DIB image from ICO file (directory indicated %u*%u)\n",
|
||||||
|
bitmap.width(),
|
||||||
|
bitmap.height(),
|
||||||
|
dir.get_width(),
|
||||||
|
dir.get_height());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// invalid DIB data or I/O error
|
||||||
|
LOG(
|
||||||
|
"Error %u reading DIB image data from ICO file at offset %u (directory size %u)\n",
|
||||||
|
unsigned(err),
|
||||||
|
dir.offset,
|
||||||
|
dir.size);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool load_ico_image(util::core_file &fp, unsigned index, icon_dir_entry_t const &dir, bitmap_argb32 &bitmap)
|
||||||
|
{
|
||||||
|
// try loading PNG image data (contains PNG file magic if used), and then fall back
|
||||||
|
if (load_ico_png(fp, dir, bitmap))
|
||||||
|
{
|
||||||
|
LOG("Successfully loaded PNG image from ICO file entry %u\n", index);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (load_ico_dib(fp, dir, bitmap))
|
||||||
|
{
|
||||||
|
LOG("Successfully loaded DIB image from ICO file entry %u\n", index);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no luck
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool load_ico_image(util::core_file &fp, unsigned count, unsigned index, bitmap_argb32 &bitmap)
|
||||||
|
{
|
||||||
|
// read the directory entry
|
||||||
|
std::error_condition err;
|
||||||
|
size_t actual;
|
||||||
|
icon_dir_entry_t dir;
|
||||||
|
err = fp.seek(sizeof(icon_dir_t) + (sizeof(icon_dir_entry_t) * index), SEEK_SET);
|
||||||
|
if (!err)
|
||||||
|
err = fp.read(&dir, sizeof(dir), actual);
|
||||||
|
if (err || (sizeof(dir) != actual))
|
||||||
|
{
|
||||||
|
LOG("Failed to read ICO file directory entry %u\n", index);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
dir.byteswap();
|
||||||
|
if ((sizeof(icon_dir_t) + (sizeof(icon_dir_entry_t) * count)) > dir.offset)
|
||||||
|
{
|
||||||
|
LOG(
|
||||||
|
"ICO file image %u data starting at %u overlaps %u bytes of file header and directory\n",
|
||||||
|
index,
|
||||||
|
dir.offset,
|
||||||
|
sizeof(icon_dir_t) + (sizeof(icon_dir_entry_t) * count));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return load_ico_image(fp, index, dir, bitmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
int images_in_ico(util::core_file &fp)
|
||||||
|
{
|
||||||
|
// read and check the icon file header
|
||||||
|
std::error_condition err;
|
||||||
|
size_t actual;
|
||||||
|
icon_dir_t header;
|
||||||
|
err = fp.seek(0, SEEK_SET);
|
||||||
|
if (!err)
|
||||||
|
err = fp.read(&header, sizeof(header), actual);
|
||||||
|
if (err || (sizeof(header) != actual))
|
||||||
|
{
|
||||||
|
LOG("Failed to read ICO file header\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
header.reserved = little_endianize_int16(header.reserved);
|
||||||
|
header.type = little_endianize_int16(header.type);
|
||||||
|
header.count = little_endianize_int16(header.count);
|
||||||
|
if (0U != header.reserved)
|
||||||
|
{
|
||||||
|
LOG("Invalid ICO file header reserved field %u (expected 0)\n", header.reserved);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ((1U != header.type) && (2U != header.type))
|
||||||
|
{
|
||||||
|
LOG("Invalid ICO file header type field %u (expected 1 or 2)\n", header.type);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return int(unsigned(little_endianize_int16(header.count)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void render_load_ico(util::core_file &fp, unsigned index, bitmap_argb32 &bitmap)
|
||||||
|
{
|
||||||
|
// check that these things haven't been padded somehow
|
||||||
|
static_assert(sizeof(icon_dir_t) == 6U, "compiler has applied padding to icon_dir_t");
|
||||||
|
static_assert(sizeof(icon_dir_entry_t) == 16U, "compiler has applied padding to icon_dir_entry_t");
|
||||||
|
|
||||||
|
// read and check the icon file header, then try to load the specified image
|
||||||
|
int const count(images_in_ico(fp));
|
||||||
|
if (0 > count)
|
||||||
|
{
|
||||||
|
// images_in_ico already logged an error
|
||||||
|
}
|
||||||
|
else if (index >= count)
|
||||||
|
{
|
||||||
|
osd_printf_verbose("Requested image %u from ICO file containing %d images\n", index, count);
|
||||||
|
}
|
||||||
|
else if (load_ico_image(fp, count, index, bitmap))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bitmap.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void render_load_ico_first(util::core_file &fp, bitmap_argb32 &bitmap)
|
||||||
|
{
|
||||||
|
int const count(images_in_ico(fp));
|
||||||
|
for (int i = 0; count > i; ++i)
|
||||||
|
{
|
||||||
|
if (load_ico_image(fp, count, i, bitmap))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bitmap.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void render_load_ico_highest_detail(util::core_file &fp, bitmap_argb32 &bitmap)
|
||||||
|
{
|
||||||
|
// read and check the icon file header - logs a message on error
|
||||||
|
int const count(images_in_ico(fp));
|
||||||
|
if (0 <= count)
|
||||||
|
{
|
||||||
|
// now load all the directory entries
|
||||||
|
size_t const dir_bytes(sizeof(icon_dir_entry_t) * count);
|
||||||
|
std::unique_ptr<icon_dir_entry_t []> dir(new (std::nothrow) icon_dir_entry_t [count]);
|
||||||
|
std::unique_ptr<unsigned []> index(new (std::nothrow) unsigned [count]);
|
||||||
|
size_t actual;
|
||||||
|
if (count && (!dir || !index || fp.read(dir.get(), dir_bytes, actual) || (dir_bytes != actual)))
|
||||||
|
{
|
||||||
|
LOG("Failed to read ICO file directory entries\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// byteswap and sort by (pixels, depth)
|
||||||
|
for (int i = 0; count > i; ++i)
|
||||||
|
{
|
||||||
|
dir[i].byteswap();
|
||||||
|
index[i] = i;
|
||||||
|
}
|
||||||
|
std::stable_sort(
|
||||||
|
index.get(),
|
||||||
|
index.get() + count,
|
||||||
|
[&dir] (unsigned x, unsigned y)
|
||||||
|
{
|
||||||
|
unsigned const x_pixels(dir[x].get_width() * dir[x].get_height());
|
||||||
|
unsigned const y_pixels(dir[y].get_width() * dir[y].get_height());
|
||||||
|
if (x_pixels > y_pixels)
|
||||||
|
return true;
|
||||||
|
else if (x_pixels < y_pixels)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return dir[x].bpp > dir[y].bpp;
|
||||||
|
});
|
||||||
|
|
||||||
|
// walk down until something works
|
||||||
|
for (int i = 0; count > i; ++i)
|
||||||
|
{
|
||||||
|
LOG(
|
||||||
|
"Try loading ICO file entry %u: %u*%u, %u bits per pixel\n",
|
||||||
|
index[i],
|
||||||
|
dir[index[i]].get_width(),
|
||||||
|
dir[index[i]].get_height(),
|
||||||
|
dir[index[i]].bpp);
|
||||||
|
if (load_ico_image(fp, index[i], dir[index[i]], bitmap))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bitmap.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
34
src/icludes/frontend/mame/ui/icorender.h
Normal file
34
src/icludes/frontend/mame/ui/icorender.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/icorender.h
|
||||||
|
|
||||||
|
Windows icon file parser.
|
||||||
|
|
||||||
|
File handles passed to these functions must support read and seek
|
||||||
|
operations.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_MAME_UI_ICORENDER_H
|
||||||
|
#define MAME_FRONTEND_MAME_UI_ICORENDER_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// get number of images in icon file (-1 on error)
|
||||||
|
int images_in_ico(util::core_file &fp);
|
||||||
|
|
||||||
|
// load specified icon from file (zero-based)
|
||||||
|
void render_load_ico(util::core_file &fp, unsigned index, bitmap_argb32 &bitmap);
|
||||||
|
|
||||||
|
// load first supported icon from file
|
||||||
|
void render_load_ico_first(util::core_file &fp, bitmap_argb32 &bitmap);
|
||||||
|
|
||||||
|
// load highest detail supported icon from file
|
||||||
|
void render_load_ico_highest_detail(util::core_file &fp, bitmap_argb32 &bitmap);
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_MAME_UI_ICORENDER_H
|
380
src/icludes/frontend/mame/ui/imgcntrl.cpp
Normal file
380
src/icludes/frontend/mame/ui/imgcntrl.cpp
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/imgcntrl.cpp
|
||||||
|
|
||||||
|
MAME's clunky built-in file manager
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "ui/imgcntrl.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/filesel.h"
|
||||||
|
#include "ui/filecreate.h"
|
||||||
|
#include "ui/swlist.h"
|
||||||
|
|
||||||
|
#include "audit.h"
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "emuopts.h"
|
||||||
|
#include "image.h"
|
||||||
|
#include "softlist_dev.h"
|
||||||
|
#include "zippath.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
/***************************************************************************
|
||||||
|
IMPLEMENTATION
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_control_device_image::menu_control_device_image(mame_ui_manager &mui, render_container &container, device_image_interface &image)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_image(image)
|
||||||
|
, m_create_ok(false)
|
||||||
|
, m_create_confirmed(false)
|
||||||
|
{
|
||||||
|
m_submenu_result.i = -1;
|
||||||
|
|
||||||
|
if (m_image.software_list_name())
|
||||||
|
m_sld = software_list_device::find_by_name(mui.machine().config(), m_image.software_list_name());
|
||||||
|
else
|
||||||
|
m_sld = nullptr;
|
||||||
|
m_swi = m_image.software_entry();
|
||||||
|
m_swp = m_image.part_entry();
|
||||||
|
|
||||||
|
if (m_swi != nullptr)
|
||||||
|
{
|
||||||
|
m_state = START_OTHER_PART;
|
||||||
|
m_current_directory = m_image.working_directory();
|
||||||
|
|
||||||
|
// check to see if we've never initialized the working directory
|
||||||
|
if (m_current_directory.empty())
|
||||||
|
{
|
||||||
|
m_current_directory = machine().image().setup_working_directory();
|
||||||
|
m_image.set_working_directory(m_current_directory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_state = START_FILE;
|
||||||
|
|
||||||
|
// if the image exists, set the working directory to the parent directory
|
||||||
|
if (m_image.exists())
|
||||||
|
{
|
||||||
|
m_current_file.assign(m_image.filename());
|
||||||
|
m_current_directory = util::zippath_parent(m_current_file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_current_directory = m_image.working_directory();
|
||||||
|
|
||||||
|
// check to see if we've never initialized the working directory
|
||||||
|
if (m_current_directory.empty())
|
||||||
|
{
|
||||||
|
m_current_directory = machine().image().setup_working_directory();
|
||||||
|
m_image.set_working_directory(m_current_directory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check to see if the path exists; if not then set to current directory
|
||||||
|
util::zippath_directory::ptr dir;
|
||||||
|
if (util::zippath_directory::open(m_current_directory, dir))
|
||||||
|
osd_get_full_path(m_current_directory, ".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_control_device_image::~menu_control_device_image()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// test_create - creates a new disk image
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_control_device_image::test_create(bool &can_create, bool &need_confirm)
|
||||||
|
{
|
||||||
|
// assemble the full path
|
||||||
|
auto path = util::zippath_combine(m_current_directory, m_current_file);
|
||||||
|
|
||||||
|
// does a file or a directory exist at the path
|
||||||
|
auto entry = osd_stat(path);
|
||||||
|
auto file_type = (entry != nullptr) ? entry->type : osd::directory::entry::entry_type::NONE;
|
||||||
|
|
||||||
|
switch(file_type)
|
||||||
|
{
|
||||||
|
case osd::directory::entry::entry_type::NONE:
|
||||||
|
// no file/dir here - always create
|
||||||
|
can_create = true;
|
||||||
|
need_confirm = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case osd::directory::entry::entry_type::FILE:
|
||||||
|
// a file exists here - ask for permission from the user
|
||||||
|
can_create = true;
|
||||||
|
need_confirm = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case osd::directory::entry::entry_type::DIR:
|
||||||
|
// a directory exists here - we can't save over it
|
||||||
|
ui().popup_time(5, "%s", _("Cannot save over directory"));
|
||||||
|
can_create = false;
|
||||||
|
need_confirm = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
can_create = false;
|
||||||
|
need_confirm = false;
|
||||||
|
fatalerror("Unexpected\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// load_software_part
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_control_device_image::load_software_part()
|
||||||
|
{
|
||||||
|
std::string temp_name = string_format("%s:%s:%s", m_sld->list_name(), m_swi->shortname(), m_swp->name());
|
||||||
|
|
||||||
|
driver_enumerator drivlist(machine().options(), machine().options().system_name());
|
||||||
|
drivlist.next();
|
||||||
|
media_auditor auditor(drivlist);
|
||||||
|
media_auditor::summary summary = auditor.audit_software(*m_sld, *m_swi, AUDIT_VALIDATE_FAST);
|
||||||
|
// if everything looks good, load software
|
||||||
|
if (summary == media_auditor::CORRECT || summary == media_auditor::BEST_AVAILABLE || summary == media_auditor::NONE_NEEDED)
|
||||||
|
{
|
||||||
|
m_image.load_software(temp_name);
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
machine().popmessage(_("The software selected is missing one or more required ROM or CHD images.\nPlease acquire the correct files or select a different one."));
|
||||||
|
m_state = SELECT_SOFTLIST;
|
||||||
|
menu_activated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// hook_load
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_control_device_image::hook_load(const std::string &name)
|
||||||
|
{
|
||||||
|
m_image.load(name);
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_control_device_image::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
throw emu_fatalerror("menu_control_device_image::populate: Shouldn't get here!");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_control_device_image::handle(event const *ev)
|
||||||
|
{
|
||||||
|
throw emu_fatalerror("menu_control_device_image::handle: Shouldn't get here!");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// menu_activated
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_control_device_image::menu_activated()
|
||||||
|
{
|
||||||
|
switch(m_state)
|
||||||
|
{
|
||||||
|
case START_FILE:
|
||||||
|
m_submenu_result.filesel = menu_file_selector::result::INVALID;
|
||||||
|
menu::stack_push<menu_file_selector>(ui(), container(), &m_image, m_current_directory, m_current_file, true, m_image.image_interface()!=nullptr, m_image.is_creatable(), m_submenu_result.filesel);
|
||||||
|
m_state = SELECT_FILE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case START_SOFTLIST:
|
||||||
|
m_sld = nullptr;
|
||||||
|
menu::stack_push<menu_software>(ui(), container(), m_image.image_interface(), &m_sld);
|
||||||
|
m_state = SELECT_SOFTLIST;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case START_OTHER_PART:
|
||||||
|
m_submenu_result.swparts = menu_software_parts::result::INVALID;
|
||||||
|
menu::stack_push<menu_software_parts>(ui(), container(), m_swi, m_swp->interface().c_str(), &m_swp, true, m_submenu_result.swparts);
|
||||||
|
m_state = SELECT_OTHER_PART;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_SOFTLIST:
|
||||||
|
if (!m_sld)
|
||||||
|
{
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_software_info_name.clear();
|
||||||
|
menu::stack_push<menu_software_list>(ui(), container(), m_sld, m_image.image_interface(), m_software_info_name);
|
||||||
|
m_state = SELECT_PARTLIST;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_PARTLIST:
|
||||||
|
m_swi = m_sld->find(m_software_info_name);
|
||||||
|
if (!m_swi)
|
||||||
|
{
|
||||||
|
m_state = START_SOFTLIST;
|
||||||
|
menu_activated();
|
||||||
|
}
|
||||||
|
else if (m_swi->has_multiple_parts(m_image.image_interface()))
|
||||||
|
{
|
||||||
|
m_submenu_result.swparts = menu_software_parts::result::INVALID;
|
||||||
|
m_swp = nullptr;
|
||||||
|
menu::stack_push<menu_software_parts>(ui(), container(), m_swi, m_image.image_interface(), &m_swp, false, m_submenu_result.swparts);
|
||||||
|
m_state = SELECT_ONE_PART;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_swp = m_swi->find_part("", m_image.image_interface());
|
||||||
|
load_software_part();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_ONE_PART:
|
||||||
|
switch (m_submenu_result.swparts)
|
||||||
|
{
|
||||||
|
case menu_software_parts::result::ENTRY:
|
||||||
|
load_software_part();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: // return to list
|
||||||
|
m_state = SELECT_SOFTLIST;
|
||||||
|
menu_activated();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_OTHER_PART:
|
||||||
|
switch (m_submenu_result.swparts)
|
||||||
|
{
|
||||||
|
case menu_software_parts::result::ENTRY:
|
||||||
|
load_software_part();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_software_parts::result::FMGR:
|
||||||
|
m_state = START_FILE;
|
||||||
|
menu_activated();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_software_parts::result::EMPTY:
|
||||||
|
m_image.unload();
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_software_parts::result::SWLIST:
|
||||||
|
m_state = START_SOFTLIST;
|
||||||
|
menu_activated();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_software_parts::result::INVALID: // return to system
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_FILE:
|
||||||
|
switch (m_submenu_result.filesel)
|
||||||
|
{
|
||||||
|
case menu_file_selector::result::EMPTY:
|
||||||
|
m_image.unload();
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_file_selector::result::FILE:
|
||||||
|
hook_load(m_current_file);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_file_selector::result::CREATE:
|
||||||
|
menu::stack_push<menu_file_create>(ui(), container(), &m_image, m_current_directory, m_current_file, m_create_ok);
|
||||||
|
m_state = CHECK_CREATE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case menu_file_selector::result::SOFTLIST:
|
||||||
|
m_state = START_SOFTLIST;
|
||||||
|
menu_activated();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: // return to system
|
||||||
|
stack_pop();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CREATE_FILE:
|
||||||
|
{
|
||||||
|
bool can_create, need_confirm;
|
||||||
|
test_create(can_create, need_confirm);
|
||||||
|
if (can_create)
|
||||||
|
{
|
||||||
|
if (need_confirm)
|
||||||
|
{
|
||||||
|
menu::stack_push<menu_confirm_save_as>(ui(), container(), &m_create_confirmed);
|
||||||
|
m_state = CREATE_CONFIRM;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_state = DO_CREATE;
|
||||||
|
menu_activated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_state = START_FILE;
|
||||||
|
menu_activated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CREATE_CONFIRM:
|
||||||
|
m_state = m_create_confirmed ? DO_CREATE : START_FILE;
|
||||||
|
menu_activated();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHECK_CREATE:
|
||||||
|
m_state = m_create_ok ? CREATE_FILE : START_FILE;
|
||||||
|
menu_activated();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DO_CREATE:
|
||||||
|
{
|
||||||
|
auto path = util::zippath_combine(m_current_directory, m_current_file);
|
||||||
|
image_init_result err = m_image.create(path, nullptr, nullptr);
|
||||||
|
if (err != image_init_result::PASS)
|
||||||
|
machine().popmessage("Error: %s", m_image.error());
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
78
src/icludes/frontend/mame/ui/imgcntrl.h
Normal file
78
src/icludes/frontend/mame/ui/imgcntrl.h
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/imgcntrl.h
|
||||||
|
|
||||||
|
MESS's clunky built-in file manager
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_IMAGECNTRL_H
|
||||||
|
#define MAME_FRONTEND_UI_IMAGECNTRL_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/filesel.h"
|
||||||
|
#include "ui/menu.h"
|
||||||
|
#include "ui/swlist.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// ======================> menu_control_device_image
|
||||||
|
|
||||||
|
class menu_control_device_image : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_control_device_image(mame_ui_manager &mui, render_container &container, device_image_interface &image);
|
||||||
|
virtual ~menu_control_device_image() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
START_FILE, START_OTHER_PART, START_SOFTLIST,
|
||||||
|
SELECT_PARTLIST, SELECT_ONE_PART, SELECT_OTHER_PART,
|
||||||
|
SELECT_FILE, CREATE_FILE, CREATE_CONFIRM, CHECK_CREATE, DO_CREATE, SELECT_SOFTLIST,
|
||||||
|
LAST_ID
|
||||||
|
};
|
||||||
|
|
||||||
|
// this is a single union that contains all of the different types of
|
||||||
|
// results we could get from child menus
|
||||||
|
union
|
||||||
|
{
|
||||||
|
menu_file_selector::result filesel;
|
||||||
|
menu_software_parts::result swparts;
|
||||||
|
menu_select_rw::result rw;
|
||||||
|
int i;
|
||||||
|
} m_submenu_result;
|
||||||
|
|
||||||
|
// instance variables - made protected so they can be shared with floppycntrl.cpp
|
||||||
|
int m_state;
|
||||||
|
device_image_interface & m_image;
|
||||||
|
std::string m_current_directory;
|
||||||
|
std::string m_current_file;
|
||||||
|
bool m_create_ok;
|
||||||
|
|
||||||
|
// methods
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
virtual void hook_load(const std::string &filename);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// instance variables
|
||||||
|
bool m_create_confirmed;
|
||||||
|
const software_info * m_swi;
|
||||||
|
const software_part * m_swp;
|
||||||
|
class software_list_device * m_sld;
|
||||||
|
std::string m_software_info_name;
|
||||||
|
|
||||||
|
// methods
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
void test_create(bool &can_create, bool &need_confirm);
|
||||||
|
void load_software_part();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_IMAGECNTRL_H
|
685
src/icludes/frontend/mame/ui/info.cpp
Normal file
685
src/icludes/frontend/mame/ui/info.cpp
Normal file
@ -0,0 +1,685 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/info.cpp
|
||||||
|
|
||||||
|
System and image info screens
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/info.h"
|
||||||
|
|
||||||
|
#include "ui/systemlist.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "romload.h"
|
||||||
|
#include "softlist.h"
|
||||||
|
#include "emuopts.h"
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
#include <sstream>
|
||||||
|
#include <type_traits>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
constexpr machine_flags::type MACHINE_ERRORS = machine_flags::NOT_WORKING | machine_flags::MECHANICAL;
|
||||||
|
constexpr machine_flags::type MACHINE_WARNINGS = machine_flags::NO_COCKTAIL | machine_flags::REQUIRES_ARTWORK;
|
||||||
|
constexpr machine_flags::type MACHINE_BTANB = machine_flags::NO_SOUND_HW | machine_flags::IS_INCOMPLETE;
|
||||||
|
|
||||||
|
constexpr std::pair<device_t::feature_type, char const *> FEATURE_NAMES[] = {
|
||||||
|
{ device_t::feature::PROTECTION, N_p("emulation-feature", "protection") },
|
||||||
|
{ device_t::feature::TIMING, N_p("emulation-feature", "timing") },
|
||||||
|
{ device_t::feature::GRAPHICS, N_p("emulation-feature", "graphics") },
|
||||||
|
{ device_t::feature::PALETTE, N_p("emulation-feature", "color palette") },
|
||||||
|
{ device_t::feature::SOUND, N_p("emulation-feature", "sound") },
|
||||||
|
{ device_t::feature::CAPTURE, N_p("emulation-feature", "capture hardware") },
|
||||||
|
{ device_t::feature::CAMERA, N_p("emulation-feature", "camera") },
|
||||||
|
{ device_t::feature::MICROPHONE, N_p("emulation-feature", "microphone") },
|
||||||
|
{ device_t::feature::CONTROLS, N_p("emulation-feature", "controls") },
|
||||||
|
{ device_t::feature::KEYBOARD, N_p("emulation-feature", "keyboard") },
|
||||||
|
{ device_t::feature::MOUSE, N_p("emulation-feature", "mouse") },
|
||||||
|
{ device_t::feature::MEDIA, N_p("emulation-feature", "media") },
|
||||||
|
{ device_t::feature::DISK, N_p("emulation-feature", "disk") },
|
||||||
|
{ device_t::feature::PRINTER, N_p("emulation-feature", "printer") },
|
||||||
|
{ device_t::feature::TAPE, N_p("emulation-feature", "magnetic tape") },
|
||||||
|
{ device_t::feature::PUNCH, N_p("emulation-feature", "punch tape") },
|
||||||
|
{ device_t::feature::DRUM, N_p("emulation-feature", "magnetic drum") },
|
||||||
|
{ device_t::feature::ROM, N_p("emulation-feature", "solid state storage") },
|
||||||
|
{ device_t::feature::COMMS, N_p("emulation-feature", "communications") },
|
||||||
|
{ device_t::feature::LAN, N_p("emulation-feature", "LAN") },
|
||||||
|
{ device_t::feature::WAN, N_p("emulation-feature", "WAN") } };
|
||||||
|
|
||||||
|
void get_general_warnings(std::ostream &buf, running_machine &machine, machine_flags::type flags, device_t::feature_type unemulated, device_t::feature_type imperfect)
|
||||||
|
{
|
||||||
|
// add a warning if any ROMs were loaded with warnings
|
||||||
|
bool bad_roms(false);
|
||||||
|
if (machine.rom_load().warnings() > 0)
|
||||||
|
{
|
||||||
|
bad_roms = true;
|
||||||
|
buf << _("One or more ROMs/CHDs for this machine are incorrect. The machine may not run correctly.\n");
|
||||||
|
}
|
||||||
|
if (!machine.rom_load().software_load_warnings_message().empty())
|
||||||
|
{
|
||||||
|
bad_roms = true;
|
||||||
|
buf << machine.rom_load().software_load_warnings_message();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we have at least one warning flag, print the general header
|
||||||
|
if ((machine.rom_load().knownbad() > 0) || (flags & (MACHINE_ERRORS | MACHINE_WARNINGS | MACHINE_BTANB)) || unemulated || imperfect)
|
||||||
|
{
|
||||||
|
if (bad_roms)
|
||||||
|
buf << '\n';
|
||||||
|
buf << _("There are known problems with this machine\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// add a warning if any ROMs are flagged BAD_DUMP/NO_DUMP
|
||||||
|
if (machine.rom_load().knownbad() > 0)
|
||||||
|
buf << _("One or more ROMs/CHDs for this machine have not been correctly dumped.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void get_device_warnings(std::ostream &buf, device_t::feature_type unemulated, device_t::feature_type imperfect)
|
||||||
|
{
|
||||||
|
// add line for unemulated features
|
||||||
|
if (unemulated)
|
||||||
|
{
|
||||||
|
buf << _("Completely unemulated features: ");
|
||||||
|
bool first = true;
|
||||||
|
for (auto const &feature : FEATURE_NAMES)
|
||||||
|
{
|
||||||
|
if (unemulated & feature.first)
|
||||||
|
{
|
||||||
|
util::stream_format(buf, first ? _("%s") : _(", %s"), _("emulation-feature", feature.second));
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
// add line for imperfect features
|
||||||
|
if (imperfect)
|
||||||
|
{
|
||||||
|
buf << _("Imperfectly emulated features: ");
|
||||||
|
bool first = true;
|
||||||
|
for (auto const &feature : FEATURE_NAMES)
|
||||||
|
{
|
||||||
|
if (imperfect & feature.first)
|
||||||
|
{
|
||||||
|
util::stream_format(buf, first ? _("%s") : _(", %s"), _("emulation-feature", feature.second));
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf << '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void get_system_warnings(std::ostream &buf, running_machine &machine, machine_flags::type flags, device_t::feature_type unemulated, device_t::feature_type imperfect)
|
||||||
|
{
|
||||||
|
// start with the unemulated/imperfect features
|
||||||
|
get_device_warnings(buf, unemulated, imperfect);
|
||||||
|
|
||||||
|
// add one line per machine warning flag
|
||||||
|
if (flags & ::machine_flags::NO_COCKTAIL)
|
||||||
|
buf << _("Screen flipping in cocktail mode is not supported.\n");
|
||||||
|
if (flags & ::machine_flags::REQUIRES_ARTWORK)
|
||||||
|
buf << _("This machine requires external artwork files.\n");
|
||||||
|
if (flags & ::machine_flags::IS_INCOMPLETE)
|
||||||
|
buf << _("This machine was never completed. It may exhibit strange behavior or missing elements that are not bugs in the emulation.\n");
|
||||||
|
if (flags & ::machine_flags::NO_SOUND_HW)
|
||||||
|
buf << _("This machine has no sound hardware, MAME will produce no sounds, this is expected behaviour.\n");
|
||||||
|
|
||||||
|
// these are more severe warnings
|
||||||
|
if (flags & ::machine_flags::NOT_WORKING)
|
||||||
|
buf << _("\nTHIS MACHINE DOESN'T WORK. The emulation for this machine is not yet complete. There is nothing you can do to fix this problem except wait for the developers to improve the emulation.\n");
|
||||||
|
if (flags & ::machine_flags::MECHANICAL)
|
||||||
|
buf << _("\nElements of this machine cannot be emulated as they require physical interaction or consist of mechanical devices. It is not possible to fully experience this machine.\n");
|
||||||
|
|
||||||
|
if ((flags & MACHINE_ERRORS) || ((machine.system().type.unemulated_features() | machine.system().type.imperfect_features()) & device_t::feature::PROTECTION))
|
||||||
|
{
|
||||||
|
// find the parent of this driver
|
||||||
|
driver_enumerator drivlist(machine.options());
|
||||||
|
int maindrv = drivlist.find(machine.system());
|
||||||
|
int clone_of = drivlist.non_bios_clone(maindrv);
|
||||||
|
if (clone_of != -1)
|
||||||
|
maindrv = clone_of;
|
||||||
|
|
||||||
|
// scan the driver list for any working clones and add them
|
||||||
|
bool foundworking = false;
|
||||||
|
while (drivlist.next())
|
||||||
|
{
|
||||||
|
if (drivlist.current() == maindrv || drivlist.clone() == maindrv)
|
||||||
|
{
|
||||||
|
game_driver const &driver(drivlist.driver());
|
||||||
|
if (!(driver.flags & MACHINE_ERRORS) && !((driver.type.unemulated_features() | driver.type.imperfect_features()) & device_t::feature::PROTECTION))
|
||||||
|
{
|
||||||
|
// this one works, add a header and display the name of the clone
|
||||||
|
if (!foundworking)
|
||||||
|
util::stream_format(buf, _("\n\nThere are working clones of this machine: %s"), driver.name);
|
||||||
|
else
|
||||||
|
util::stream_format(buf, _(", %s"), driver.name);
|
||||||
|
foundworking = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (foundworking)
|
||||||
|
buf << '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// machine_static_info - constructors
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
machine_static_info::machine_static_info(const ui_options &options, machine_config const &config)
|
||||||
|
: machine_static_info(options, config, nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
machine_static_info::machine_static_info(const ui_options &options, machine_config const &config, ioport_list const &ports)
|
||||||
|
: machine_static_info(options, config, &ports)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
machine_static_info::machine_static_info(const ui_options &options, machine_config const &config, ioport_list const *ports)
|
||||||
|
: m_options(options)
|
||||||
|
, m_flags(config.gamedrv().flags)
|
||||||
|
, m_unemulated_features(config.gamedrv().type.unemulated_features())
|
||||||
|
, m_imperfect_features(config.gamedrv().type.imperfect_features())
|
||||||
|
, m_has_bioses(false)
|
||||||
|
, m_has_dips(false)
|
||||||
|
, m_has_configs(false)
|
||||||
|
, m_has_keyboard(false)
|
||||||
|
, m_has_test_switch(false)
|
||||||
|
, m_has_analog(false)
|
||||||
|
{
|
||||||
|
ioport_list local_ports;
|
||||||
|
std::string sink;
|
||||||
|
for (device_t &device : device_enumerator(config.root_device()))
|
||||||
|
{
|
||||||
|
// the "no sound hardware" warning doesn't make sense when you plug in a sound card
|
||||||
|
if (dynamic_cast<device_sound_interface *>(&device))
|
||||||
|
m_flags &= ~::machine_flags::NO_SOUND_HW;
|
||||||
|
|
||||||
|
// build overall emulation status
|
||||||
|
m_unemulated_features |= device.type().unemulated_features();
|
||||||
|
m_imperfect_features |= device.type().imperfect_features();
|
||||||
|
|
||||||
|
// look for BIOS options
|
||||||
|
device_t const *const parent(device.owner());
|
||||||
|
device_slot_interface const *const slot(dynamic_cast<device_slot_interface const *>(parent));
|
||||||
|
if (!parent || (slot && (slot->get_card_device() == &device)))
|
||||||
|
{
|
||||||
|
for (tiny_rom_entry const *rom = device.rom_region(); !m_has_bioses && rom && !ROMENTRY_ISEND(rom); ++rom)
|
||||||
|
{
|
||||||
|
if (ROMENTRY_ISSYSTEM_BIOS(rom))
|
||||||
|
m_has_bioses = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we don't have ports passed in, build here
|
||||||
|
if (!ports)
|
||||||
|
local_ports.append(device, sink);
|
||||||
|
}
|
||||||
|
|
||||||
|
// suppress "requires external artwork" warning when external artwork was loaded
|
||||||
|
if (config.root_device().has_running_machine())
|
||||||
|
{
|
||||||
|
for (render_target *target = config.root_device().machine().render().first_target(); target != nullptr; target = target->next())
|
||||||
|
if (!target->hidden() && target->external_artwork())
|
||||||
|
{
|
||||||
|
m_flags &= ~::machine_flags::REQUIRES_ARTWORK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// unemulated trumps imperfect when aggregating (always be pessimistic)
|
||||||
|
m_imperfect_features &= ~m_unemulated_features;
|
||||||
|
|
||||||
|
// scan the input port array to see what options we need to enable
|
||||||
|
for (ioport_list::value_type const &port : (ports ? *ports : local_ports))
|
||||||
|
{
|
||||||
|
for (ioport_field const &field : port.second->fields())
|
||||||
|
{
|
||||||
|
switch (field.type())
|
||||||
|
{
|
||||||
|
case IPT_DIPSWITCH: m_has_dips = true; break;
|
||||||
|
case IPT_CONFIG: m_has_configs = true; break;
|
||||||
|
case IPT_KEYBOARD: m_has_keyboard = true; break;
|
||||||
|
case IPT_SERVICE: m_has_test_switch = true; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (field.is_analog())
|
||||||
|
m_has_analog = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// has_warnings - returns true if the system has
|
||||||
|
// issues that warrant a yellow/red message
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
bool machine_static_info::has_warnings() const
|
||||||
|
{
|
||||||
|
return (machine_flags() & (MACHINE_ERRORS | MACHINE_WARNINGS)) || unemulated_features() || imperfect_features();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// has_severe_warnings - returns true if the
|
||||||
|
// system has issues that warrant a red message
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
bool machine_static_info::has_severe_warnings() const
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(machine_flags() & MACHINE_ERRORS) ||
|
||||||
|
(unemulated_features() & (device_t::feature::PROTECTION | device_t::feature::GRAPHICS | device_t::feature::SOUND)) ||
|
||||||
|
(imperfect_features() & device_t::feature::PROTECTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// status_color - returns suitable colour for
|
||||||
|
// driver status box
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
rgb_t machine_static_info::status_color() const
|
||||||
|
{
|
||||||
|
if (has_severe_warnings())
|
||||||
|
return UI_RED_COLOR;
|
||||||
|
else if ((machine_flags() & MACHINE_WARNINGS & ~::machine_flags::REQUIRES_ARTWORK) || unemulated_features() || imperfect_features())
|
||||||
|
return UI_YELLOW_COLOR;
|
||||||
|
else
|
||||||
|
return UI_GREEN_COLOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// warnings_color - returns suitable colour for
|
||||||
|
// warning message based on severity
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
rgb_t machine_static_info::warnings_color() const
|
||||||
|
{
|
||||||
|
if (has_severe_warnings())
|
||||||
|
return UI_RED_COLOR;
|
||||||
|
else if ((machine_flags() & MACHINE_WARNINGS) || unemulated_features() || imperfect_features())
|
||||||
|
return UI_YELLOW_COLOR;
|
||||||
|
else
|
||||||
|
return m_options.background_color();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// machine_info - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
machine_info::machine_info(running_machine &machine)
|
||||||
|
: machine_static_info(dynamic_cast<mame_ui_manager *>(&machine.ui())->options(), machine.config(), machine.ioport().ports())
|
||||||
|
, m_machine(machine)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
TEXT GENERATORS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// warnings_string - print the warning flags
|
||||||
|
// text to the given buffer
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
std::string machine_info::warnings_string() const
|
||||||
|
{
|
||||||
|
std::ostringstream buf;
|
||||||
|
get_general_warnings(buf, m_machine, machine_flags(), unemulated_features(), imperfect_features());
|
||||||
|
get_system_warnings(buf, m_machine, machine_flags(), unemulated_features(), imperfect_features());
|
||||||
|
return buf.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// game_info_string - return the game info text
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
std::string machine_info::game_info_string() const
|
||||||
|
{
|
||||||
|
std::ostringstream buf;
|
||||||
|
|
||||||
|
// print description, manufacturer, and CPU:
|
||||||
|
util::stream_format(buf, _("%1$s\n%2$s %3$s\nDriver: %4$s\n\nCPU:\n"),
|
||||||
|
system_list::instance().systems()[driver_list::find(m_machine.system().name)].description,
|
||||||
|
m_machine.system().year,
|
||||||
|
m_machine.system().manufacturer,
|
||||||
|
core_filename_extract_base(m_machine.system().type.source()));
|
||||||
|
|
||||||
|
// loop over all CPUs
|
||||||
|
execute_interface_enumerator execiter(m_machine.root_device());
|
||||||
|
std::unordered_set<std::string> exectags;
|
||||||
|
for (device_execute_interface &exec : execiter)
|
||||||
|
{
|
||||||
|
if (!exectags.insert(exec.device().tag()).second)
|
||||||
|
continue;
|
||||||
|
// get cpu specific clock that takes internal multiplier/dividers into account
|
||||||
|
u32 clock = exec.device().clock();
|
||||||
|
|
||||||
|
// count how many identical CPUs we have
|
||||||
|
int count = 1;
|
||||||
|
const char *name = exec.device().name();
|
||||||
|
for (device_execute_interface &scan : execiter)
|
||||||
|
{
|
||||||
|
if (exec.device().type() == scan.device().type() && strcmp(name, scan.device().name()) == 0 && exec.device().clock() == scan.device().clock())
|
||||||
|
if (exectags.insert(scan.device().tag()).second)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string hz(std::to_string(clock));
|
||||||
|
int d = (clock >= 1'000'000'000) ? 9 : (clock >= 1'000'000) ? 6 : (clock >= 1000) ? 3 : 0;
|
||||||
|
if (d > 0)
|
||||||
|
{
|
||||||
|
size_t dpos = hz.length() - d;
|
||||||
|
hz.insert(dpos, ".");
|
||||||
|
size_t last = hz.find_last_not_of('0');
|
||||||
|
hz = hz.substr(0, last + (last != dpos ? 1 : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// if more than one, prepend a #x in front of the CPU name and display clock
|
||||||
|
util::stream_format(buf,
|
||||||
|
(count > 1)
|
||||||
|
? ((clock != 0) ? "%1$d" UTF8_MULTIPLY "%2$s %3$s" UTF8_NBSP "%4$s\n" : "%1$d" UTF8_MULTIPLY "%2$s\n")
|
||||||
|
: ((clock != 0) ? "%2$s %3$s" UTF8_NBSP "%4$s\n" : "%2$s\n"),
|
||||||
|
count, name, hz,
|
||||||
|
(d == 9) ? _("GHz") : (d == 6) ? _("MHz") : (d == 3) ? _("kHz") : _("Hz"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// loop over all sound chips
|
||||||
|
sound_interface_enumerator snditer(m_machine.root_device());
|
||||||
|
std::unordered_set<std::string> soundtags;
|
||||||
|
bool found_sound = false;
|
||||||
|
for (device_sound_interface &sound : snditer)
|
||||||
|
{
|
||||||
|
if (!sound.issound() || !soundtags.insert(sound.device().tag()).second)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// append the Sound: string
|
||||||
|
if (!found_sound)
|
||||||
|
buf << _("\nSound:\n");
|
||||||
|
found_sound = true;
|
||||||
|
|
||||||
|
// count how many identical sound chips we have
|
||||||
|
int count = 1;
|
||||||
|
for (device_sound_interface &scan : snditer)
|
||||||
|
{
|
||||||
|
if (sound.device().type() == scan.device().type() && sound.device().clock() == scan.device().clock())
|
||||||
|
if (soundtags.insert(scan.device().tag()).second)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
const u32 clock = sound.device().clock();
|
||||||
|
std::string hz(std::to_string(clock));
|
||||||
|
int d = (clock >= 1'000'000'000) ? 9 : (clock >= 1'000'000) ? 6 : (clock >= 1000) ? 3 : 0;
|
||||||
|
if (d > 0)
|
||||||
|
{
|
||||||
|
size_t dpos = hz.length() - d;
|
||||||
|
hz.insert(dpos, ".");
|
||||||
|
size_t last = hz.find_last_not_of('0');
|
||||||
|
hz = hz.substr(0, last + (last != dpos ? 1 : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// if more than one, prepend a #x in front of the soundchip name and display clock
|
||||||
|
util::stream_format(buf,
|
||||||
|
(count > 1)
|
||||||
|
? ((clock != 0) ? "%1$d" UTF8_MULTIPLY "%2$s %3$s" UTF8_NBSP "%4$s\n" : "%1$d" UTF8_MULTIPLY "%2$s\n")
|
||||||
|
: ((clock != 0) ? "%2$s %3$s" UTF8_NBSP "%4$s\n" : "%2$s\n"),
|
||||||
|
count, sound.device().name(), hz,
|
||||||
|
(d == 9) ? _("GHz") : (d == 6) ? _("MHz") : (d == 3) ? _("kHz") : _("Hz"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// display screen information
|
||||||
|
buf << _("\nVideo:\n");
|
||||||
|
screen_device_enumerator scriter(m_machine.root_device());
|
||||||
|
int scrcount = scriter.count();
|
||||||
|
if (scrcount == 0)
|
||||||
|
buf << _("None\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (screen_device &screen : scriter)
|
||||||
|
{
|
||||||
|
std::string detail;
|
||||||
|
if (screen.screen_type() == SCREEN_TYPE_VECTOR)
|
||||||
|
detail = _("Vector");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const u32 rate = u32(screen.frame_period().as_hz() * 1'000'000 + 0.5);
|
||||||
|
const bool valid = rate >= 1'000'000;
|
||||||
|
std::string hz(valid ? std::to_string(rate) : "?");
|
||||||
|
if (valid)
|
||||||
|
{
|
||||||
|
size_t dpos = hz.length() - 6;
|
||||||
|
hz.insert(dpos, ".");
|
||||||
|
size_t last = hz.find_last_not_of('0');
|
||||||
|
hz = hz.substr(0, last + (last != dpos ? 1 : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
const rectangle &visarea = screen.visible_area();
|
||||||
|
detail = string_format("%d " UTF8_MULTIPLY " %d (%s) %s" UTF8_NBSP "Hz",
|
||||||
|
visarea.width(), visarea.height(),
|
||||||
|
(screen.orientation() & ORIENTATION_SWAP_XY) ? "V" : "H",
|
||||||
|
hz);
|
||||||
|
}
|
||||||
|
|
||||||
|
util::stream_format(buf,
|
||||||
|
(scrcount > 1) ? _("%1$s: %2$s\n") : _("%2$s\n"),
|
||||||
|
get_screen_desc(screen), detail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// get_screen_desc - returns the description for
|
||||||
|
// a given screen
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
std::string machine_info::get_screen_desc(screen_device &screen) const
|
||||||
|
{
|
||||||
|
if (screen_device_enumerator(m_machine.root_device()).count() > 1)
|
||||||
|
return string_format(_("Screen '%1$s'"), screen.tag());
|
||||||
|
else
|
||||||
|
return _("Screen");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_game_info - handle the game information menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_game_info::menu_game_info(mame_ui_manager &mui, render_container &container) : menu_textbox(mui, container)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_CUSTOM_NAV);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_game_info::~menu_game_info()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_game_info::populate_text(std::optional<text_layout> &layout, float &width, int &lines)
|
||||||
|
{
|
||||||
|
if (!layout || (layout->width() != width))
|
||||||
|
{
|
||||||
|
rgb_t const color = ui().colors().text_color();
|
||||||
|
layout.emplace(ui().create_layout(container(), width));
|
||||||
|
layout->add_text(ui().machine_info().game_info_string(), color);
|
||||||
|
lines = layout->lines();
|
||||||
|
}
|
||||||
|
width = layout->actual_width();
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_game_info::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_game_info::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (ev)
|
||||||
|
handle_key(ev->iptkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_warn_info - handle the emulation warnings menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_warn_info::menu_warn_info(mame_ui_manager &mui, render_container &container) : menu_textbox(mui, container)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_CUSTOM_NAV);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_warn_info::~menu_warn_info()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_warn_info::populate_text(std::optional<text_layout> &layout, float &width, int &lines)
|
||||||
|
{
|
||||||
|
if (!layout || (layout->width() != width))
|
||||||
|
{
|
||||||
|
std::ostringstream buf;
|
||||||
|
std::set<std::add_pointer_t<device_type> > seen;
|
||||||
|
bool first(!machine().rom_load().knownbad());
|
||||||
|
|
||||||
|
machine_info const &info(ui().machine_info());
|
||||||
|
device_t &root(machine().root_device());
|
||||||
|
get_general_warnings(buf, machine(), info.machine_flags(), info.unemulated_features(), info.imperfect_features());
|
||||||
|
if ((info.machine_flags() & (MACHINE_ERRORS | MACHINE_WARNINGS | MACHINE_BTANB)) || root.type().unemulated_features() || root.type().imperfect_features())
|
||||||
|
{
|
||||||
|
seen.insert(&root.type());
|
||||||
|
if (!first)
|
||||||
|
buf << '\n';
|
||||||
|
first = false;
|
||||||
|
util::stream_format(buf, _("%1$s:\n"), root.name());
|
||||||
|
get_system_warnings(buf, machine(), info.machine_flags(), root.type().unemulated_features(), root.type().imperfect_features());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (device_t const &device : device_enumerator(root))
|
||||||
|
{
|
||||||
|
if ((device.type().unemulated_features() || device.type().imperfect_features()) && seen.insert(&device.type()).second)
|
||||||
|
{
|
||||||
|
if (!first)
|
||||||
|
buf << '\n';
|
||||||
|
first = false;
|
||||||
|
util::stream_format(buf, _("%1$s:\n"), device.name());
|
||||||
|
get_device_warnings(buf, device.type().unemulated_features(), device.type().imperfect_features());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rgb_t const color(ui().colors().text_color());
|
||||||
|
layout.emplace(ui().create_layout(container(), width));
|
||||||
|
layout->add_text(std::move(buf).str(), color);
|
||||||
|
lines = layout->lines();
|
||||||
|
}
|
||||||
|
width = layout->actual_width();
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_warn_info::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_warn_info::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (ev)
|
||||||
|
handle_key(ev->iptkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_image_info - handle the image information menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_image_info::menu_image_info(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_image_info::~menu_image_info()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_image_info::menu_activated()
|
||||||
|
{
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_image_info::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
ui_system_info const &system(system_list::instance().systems()[driver_list::find(machine().system().name)]);
|
||||||
|
item_append(system.description, FLAG_DISABLE, nullptr);
|
||||||
|
item_append(std::string(), FLAG_DISABLE, nullptr);
|
||||||
|
|
||||||
|
for (device_image_interface &image : image_interface_enumerator(machine().root_device()))
|
||||||
|
image_info(&image);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_image_info::handle(event const *ev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
image_info - display image info for a specific
|
||||||
|
image interface device
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_image_info::image_info(device_image_interface *image)
|
||||||
|
{
|
||||||
|
if (image->exists())
|
||||||
|
{
|
||||||
|
// display device type and filename
|
||||||
|
item_append(image->brief_instance_name(), image->basename(), 0, nullptr);
|
||||||
|
|
||||||
|
// if image has been loaded through softlist, let's add some more info
|
||||||
|
if (image->loaded_through_softlist())
|
||||||
|
{
|
||||||
|
software_info const &swinfo(*image->software_entry());
|
||||||
|
|
||||||
|
// display full name, publisher and year
|
||||||
|
item_append(swinfo.longname(), FLAG_DISABLE, nullptr);
|
||||||
|
item_append(string_format("%1$s, %2$s", swinfo.publisher(), swinfo.year()), FLAG_DISABLE, nullptr);
|
||||||
|
|
||||||
|
// display supported information, if available
|
||||||
|
switch (swinfo.supported())
|
||||||
|
{
|
||||||
|
case software_support::UNSUPPORTED:
|
||||||
|
item_append(_("Not supported"), FLAG_DISABLE, nullptr);
|
||||||
|
break;
|
||||||
|
case software_support::PARTIALLY_SUPPORTED:
|
||||||
|
item_append(_("Partially supported"), FLAG_DISABLE, nullptr);
|
||||||
|
break;
|
||||||
|
case software_support::SUPPORTED:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item_append(image->brief_instance_name(), _("[empty]"), 0, nullptr);
|
||||||
|
}
|
||||||
|
item_append(std::string(), FLAG_DISABLE, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
139
src/icludes/frontend/mame/ui/info.h
Normal file
139
src/icludes/frontend/mame/ui/info.h
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/info.h
|
||||||
|
|
||||||
|
System and image info screens
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_INFO_H
|
||||||
|
#define MAME_FRONTEND_UI_INFO_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/textbox.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class machine_static_info
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction
|
||||||
|
machine_static_info(const ui_options &options, machine_config const &config);
|
||||||
|
|
||||||
|
// overall emulation status
|
||||||
|
::machine_flags::type machine_flags() const { return m_flags; }
|
||||||
|
device_t::feature_type unemulated_features() const { return m_unemulated_features; }
|
||||||
|
device_t::feature_type imperfect_features() const { return m_imperfect_features; }
|
||||||
|
|
||||||
|
// has... getters
|
||||||
|
bool has_bioses() const { return m_has_bioses; }
|
||||||
|
|
||||||
|
// has input types getters
|
||||||
|
bool has_dips() const { return m_has_dips; }
|
||||||
|
bool has_configs() const { return m_has_configs; }
|
||||||
|
bool has_keyboard() const { return m_has_keyboard; }
|
||||||
|
bool has_test_switch() const { return m_has_test_switch; }
|
||||||
|
bool has_analog() const { return m_has_analog; }
|
||||||
|
|
||||||
|
// warning severity indications
|
||||||
|
bool has_warnings() const;
|
||||||
|
bool has_severe_warnings() const;
|
||||||
|
rgb_t status_color() const;
|
||||||
|
rgb_t warnings_color() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
machine_static_info(const ui_options &options, machine_config const &config, ioport_list const &ports);
|
||||||
|
|
||||||
|
private:
|
||||||
|
machine_static_info(const ui_options &options, machine_config const &config, ioport_list const *ports);
|
||||||
|
|
||||||
|
const ui_options & m_options;
|
||||||
|
|
||||||
|
// overall feature status
|
||||||
|
::machine_flags::type m_flags;
|
||||||
|
device_t::feature_type m_unemulated_features;
|
||||||
|
device_t::feature_type m_imperfect_features;
|
||||||
|
|
||||||
|
// has...
|
||||||
|
bool m_has_bioses;
|
||||||
|
|
||||||
|
// has input types
|
||||||
|
bool m_has_dips;
|
||||||
|
bool m_has_configs;
|
||||||
|
bool m_has_keyboard;
|
||||||
|
bool m_has_test_switch;
|
||||||
|
bool m_has_analog;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class machine_info : public machine_static_info
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction
|
||||||
|
machine_info(running_machine &machine);
|
||||||
|
|
||||||
|
// text generators
|
||||||
|
std::string warnings_string() const;
|
||||||
|
std::string game_info_string() const;
|
||||||
|
std::string get_screen_desc(screen_device &screen) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// reference to machine
|
||||||
|
running_machine & m_machine;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_game_info : public menu_textbox
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_game_info(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_game_info() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void populate_text(std::optional<text_layout> &layout, float &width, int &lines) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_warn_info : public menu_textbox
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_warn_info(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_warn_info() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void populate_text(std::optional<text_layout> &layout, float &width, int &lines) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_image_info : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_image_info(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_image_info() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
void image_info(device_image_interface *image);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_INFO_H
|
48
src/icludes/frontend/mame/ui/info_pty.cpp
Normal file
48
src/icludes/frontend/mame/ui/info_pty.cpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:F.Ulivi
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/info_pty.cpp
|
||||||
|
|
||||||
|
Information screen on pseudo terminals
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/info_pty.h"
|
||||||
|
|
||||||
|
#include "dipty.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
menu_pty_info::menu_pty_info(mame_ui_manager &mui, render_container &container) :
|
||||||
|
menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_pty_info::~menu_pty_info()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_pty_info::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
item_append(_("Pseudo terminals"), FLAG_DISABLE, nullptr);
|
||||||
|
item_append(std::string(), FLAG_DISABLE, nullptr);
|
||||||
|
|
||||||
|
for (device_pty_interface &pty : pty_interface_enumerator(machine().root_device()))
|
||||||
|
{
|
||||||
|
const char *port_name = pty.device().owner()->tag() + 1;
|
||||||
|
if (pty.is_open())
|
||||||
|
item_append(port_name, pty.slave_name(), FLAG_DISABLE, nullptr);
|
||||||
|
else
|
||||||
|
item_append(port_name, _("[failed]"), FLAG_DISABLE, nullptr);
|
||||||
|
item_append(std::string(), FLAG_DISABLE, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_pty_info::handle(event const *ev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
33
src/icludes/frontend/mame/ui/info_pty.h
Normal file
33
src/icludes/frontend/mame/ui/info_pty.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:F.Ulivi
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/info_pty.h
|
||||||
|
|
||||||
|
Information screen on pseudo terminals
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_INFO_PTY_H
|
||||||
|
#define MAME_FRONTEND_UI_INFO_PTY_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_pty_info : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_pty_info(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_pty_info() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_INFO_PTY_H
|
575
src/icludes/frontend/mame/ui/inifile.cpp
Normal file
575
src/icludes/frontend/mame/ui/inifile.cpp
Normal file
@ -0,0 +1,575 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota, Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/inifile.cpp
|
||||||
|
|
||||||
|
UI INIs file manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/inifile.h"
|
||||||
|
|
||||||
|
#include "ui/moptions.h"
|
||||||
|
|
||||||
|
#include "language.h"
|
||||||
|
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "softlist_dev.h"
|
||||||
|
|
||||||
|
#include "corestr.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstring>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
char const FAVORITE_FILENAME[] = "favorites.ini";
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
inifile_manager::inifile_manager(ui_options &options)
|
||||||
|
: m_options(options)
|
||||||
|
, m_ini_index()
|
||||||
|
{
|
||||||
|
// scan directories and create index
|
||||||
|
file_enumerator path(m_options.categoryini_path());
|
||||||
|
for (osd::directory::entry const *dir = path.next(); dir; dir = path.next())
|
||||||
|
{
|
||||||
|
std::string name(dir->name);
|
||||||
|
if (core_filename_ends_with(name, ".ini"))
|
||||||
|
{
|
||||||
|
emu_file file(m_options.categoryini_path(), OPEN_FLAG_READ);
|
||||||
|
if (!file.open(name))
|
||||||
|
{
|
||||||
|
init_category(std::move(name), file);
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::stable_sort(m_ini_index.begin(), m_ini_index.end(), [] (auto const &x, auto const &y) { return 0 > core_stricmp(x.first.c_str(), y.first.c_str()); });
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// load and indexing ini files
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void inifile_manager::load_ini_category(size_t file, size_t category, std::unordered_set<game_driver const *> &result) const
|
||||||
|
{
|
||||||
|
std::string const &filename(m_ini_index[file].first);
|
||||||
|
emu_file fp(m_options.categoryini_path(), OPEN_FLAG_READ);
|
||||||
|
if (fp.open(filename))
|
||||||
|
{
|
||||||
|
osd_printf_error("Failed to open category file %s for reading\n", filename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t const offset(m_ini_index[file].second[category].second);
|
||||||
|
if (fp.seek(offset, SEEK_SET) || (fp.tell() != offset))
|
||||||
|
{
|
||||||
|
fp.close();
|
||||||
|
osd_printf_error("Failed to seek to category offset in file %s\n", filename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char rbuf[MAX_CHAR_INFO];
|
||||||
|
while (fp.gets(rbuf, MAX_CHAR_INFO) && rbuf[0] && ('[' != rbuf[0]))
|
||||||
|
{
|
||||||
|
auto const tail(std::find_if(std::begin(rbuf), std::prev(std::end(rbuf)), [] (char ch) { return !ch || ('\r' == ch) || ('\n' == ch); }));
|
||||||
|
*tail = '\0';
|
||||||
|
int const dfind(driver_list::find(rbuf));
|
||||||
|
if (0 <= dfind)
|
||||||
|
result.emplace(&driver_list::driver(dfind));
|
||||||
|
}
|
||||||
|
|
||||||
|
fp.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// initialize category
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void inifile_manager::init_category(std::string &&filename, emu_file &file)
|
||||||
|
{
|
||||||
|
categoryindex index;
|
||||||
|
char rbuf[MAX_CHAR_INFO];
|
||||||
|
std::string name;
|
||||||
|
while (file.gets(rbuf, std::size(rbuf)))
|
||||||
|
{
|
||||||
|
if ('[' == rbuf[0])
|
||||||
|
{
|
||||||
|
auto const head(std::next(std::begin(rbuf)));
|
||||||
|
auto const tail(std::find_if(head, std::end(rbuf), [] (char ch) { return !ch || (']' == ch); }));
|
||||||
|
name.assign(head, tail);
|
||||||
|
if ("FOLDER_SETTINGS" != name)
|
||||||
|
index.emplace_back(std::move(name), file.tell());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::stable_sort(index.begin(), index.end(), [] (auto const &x, auto const &y) { return 0 > core_stricmp(x.first.c_str(), y.first.c_str()); });
|
||||||
|
if (!index.empty())
|
||||||
|
m_ini_index.emplace_back(std::move(filename), std::move(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
FAVORITE MANAGER
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
bool favorite_manager::favorite_compare::operator()(ui_software_info const &lhs, ui_software_info const &rhs) const
|
||||||
|
{
|
||||||
|
assert(lhs.driver);
|
||||||
|
assert(rhs.driver);
|
||||||
|
|
||||||
|
if (!lhs.startempty)
|
||||||
|
{
|
||||||
|
if (rhs.startempty)
|
||||||
|
return false;
|
||||||
|
else if (lhs.listname < rhs.listname)
|
||||||
|
return true;
|
||||||
|
else if (lhs.listname > rhs.listname)
|
||||||
|
return false;
|
||||||
|
else if (lhs.shortname < rhs.shortname)
|
||||||
|
return true;
|
||||||
|
else if (lhs.shortname > rhs.shortname)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (!rhs.startempty)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0 > std::strncmp(lhs.driver->name, rhs.driver->name, std::size(lhs.driver->name));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool favorite_manager::favorite_compare::operator()(ui_software_info const &lhs, game_driver const &rhs) const
|
||||||
|
{
|
||||||
|
assert(lhs.driver);
|
||||||
|
|
||||||
|
if (!lhs.startempty)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return 0 > std::strncmp(lhs.driver->name, rhs.name, std::size(rhs.name));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool favorite_manager::favorite_compare::operator()(game_driver const &lhs, ui_software_info const &rhs) const
|
||||||
|
{
|
||||||
|
assert(rhs.driver);
|
||||||
|
|
||||||
|
if (!rhs.startempty)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return 0 > std::strncmp(lhs.name, rhs.driver->name, std::size(lhs.name));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool favorite_manager::favorite_compare::operator()(ui_software_info const &lhs, running_software_key const &rhs) const
|
||||||
|
{
|
||||||
|
assert(lhs.driver);
|
||||||
|
assert(std::get<1>(rhs));
|
||||||
|
|
||||||
|
if (lhs.startempty)
|
||||||
|
return true;
|
||||||
|
else if (lhs.listname < std::get<1>(rhs))
|
||||||
|
return true;
|
||||||
|
else if (lhs.listname > std::get<1>(rhs))
|
||||||
|
return false;
|
||||||
|
else if (lhs.shortname < std::get<2>(rhs))
|
||||||
|
return true;
|
||||||
|
else if (lhs.shortname > std::get<2>(rhs))
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return 0 > std::strncmp(lhs.driver->name, std::get<0>(rhs).name, std::size(lhs.driver->name));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool favorite_manager::favorite_compare::operator()(running_software_key const &lhs, ui_software_info const &rhs) const
|
||||||
|
{
|
||||||
|
assert(std::get<1>(lhs));
|
||||||
|
assert(rhs.driver);
|
||||||
|
|
||||||
|
if (rhs.startempty)
|
||||||
|
return false;
|
||||||
|
else if (std::get<1>(lhs) < rhs.listname)
|
||||||
|
return true;
|
||||||
|
else if (std::get<1>(lhs) > rhs.listname)
|
||||||
|
return false;
|
||||||
|
else if (std::get<2>(lhs) < rhs.shortname)
|
||||||
|
return true;
|
||||||
|
else if (std::get<2>(lhs) > rhs.shortname)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return 0 > std::strncmp(std::get<0>(lhs).name, rhs.driver->name, std::size(rhs.driver->name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// construction/destruction
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
favorite_manager::favorite_manager(ui_options &options)
|
||||||
|
: m_options(options)
|
||||||
|
, m_favorites()
|
||||||
|
, m_sorted()
|
||||||
|
, m_need_sort(true)
|
||||||
|
{
|
||||||
|
emu_file file(m_options.ui_path(), OPEN_FLAG_READ);
|
||||||
|
if (!file.open(FAVORITE_FILENAME))
|
||||||
|
{
|
||||||
|
char readbuf[1024];
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
|
||||||
|
while (readbuf[0] == '[')
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
|
||||||
|
while (file.gets(readbuf, std::size(readbuf)))
|
||||||
|
{
|
||||||
|
ui_software_info tmpmatches;
|
||||||
|
tmpmatches.shortname = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.longname = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.parentname = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.year = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.publisher = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.supported = software_support(atoi(readbuf));
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.part = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
chartrimcarriage(readbuf);
|
||||||
|
auto dx = driver_list::find(readbuf);
|
||||||
|
if (0 > dx)
|
||||||
|
continue;
|
||||||
|
tmpmatches.driver = &driver_list::driver(dx);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.listname = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.interface = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.instance = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.startempty = atoi(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.parentlongname = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
//tmpmatches.usage = chartrimcarriage(readbuf); TODO: recover multi-line info
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.devicetype = chartrimcarriage(readbuf);
|
||||||
|
file.gets(readbuf, std::size(readbuf));
|
||||||
|
tmpmatches.available = atoi(readbuf);
|
||||||
|
|
||||||
|
// need to populate this, it isn't displayed anywhere else
|
||||||
|
tmpmatches.infotext.append(tmpmatches.longname);
|
||||||
|
tmpmatches.infotext.append(1, '\n');
|
||||||
|
tmpmatches.infotext.append(_("swlist-info", "Software list/item"));
|
||||||
|
tmpmatches.infotext.append(1, '\n');
|
||||||
|
tmpmatches.infotext.append(tmpmatches.listname);
|
||||||
|
tmpmatches.infotext.append(1, ':');
|
||||||
|
tmpmatches.infotext.append(tmpmatches.shortname);
|
||||||
|
|
||||||
|
m_favorites.emplace(std::move(tmpmatches));
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// add
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void favorite_manager::add_favorite_system(game_driver const &driver)
|
||||||
|
{
|
||||||
|
add_impl(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
void favorite_manager::add_favorite_software(ui_software_info const &swinfo)
|
||||||
|
{
|
||||||
|
add_impl(swinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void favorite_manager::add_favorite(running_machine &machine)
|
||||||
|
{
|
||||||
|
apply_running_machine(
|
||||||
|
machine,
|
||||||
|
[this, &machine] (game_driver const &driver, device_image_interface *imagedev, software_info const *software, bool &done)
|
||||||
|
{
|
||||||
|
if (imagedev)
|
||||||
|
{
|
||||||
|
// creating this is fairly expensive, but we'll assume this usually succeeds
|
||||||
|
software_part const *const part(imagedev->part_entry());
|
||||||
|
assert(software);
|
||||||
|
assert(part);
|
||||||
|
ui_software_info info(
|
||||||
|
*software,
|
||||||
|
*part,
|
||||||
|
driver,
|
||||||
|
imagedev->software_list_name(),
|
||||||
|
imagedev->instance_name(),
|
||||||
|
strensure(imagedev->image_type_name()));
|
||||||
|
|
||||||
|
// assume it's available if it's mounted
|
||||||
|
info.available = true;
|
||||||
|
|
||||||
|
// look up the parent in the list if necessary (eugh, O(n) walk)
|
||||||
|
if (!info.parentname.empty())
|
||||||
|
{
|
||||||
|
auto const listdev = software_list_device::find_by_name(machine.config(), info.listname);
|
||||||
|
assert(listdev);
|
||||||
|
for (software_info const &other : listdev->get_info())
|
||||||
|
{
|
||||||
|
if (other.shortname() == info.parentname)
|
||||||
|
{
|
||||||
|
info.parentlongname = other.longname();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// hooray for move semantics!
|
||||||
|
add_impl(std::move(info));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
add_impl(driver);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> void favorite_manager::add_impl(T &&key)
|
||||||
|
{
|
||||||
|
auto const ins(m_favorites.emplace(std::forward<T>(key)));
|
||||||
|
if (ins.second)
|
||||||
|
{
|
||||||
|
if (!m_sorted.empty())
|
||||||
|
m_sorted.emplace_back(std::ref(*ins.first));
|
||||||
|
m_need_sort = true;
|
||||||
|
save_favorites();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// check
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
bool favorite_manager::is_favorite_system(game_driver const &driver) const
|
||||||
|
{
|
||||||
|
return check_impl(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool favorite_manager::is_favorite_software(ui_software_info const &swinfo) const
|
||||||
|
{
|
||||||
|
auto found(m_favorites.lower_bound(swinfo));
|
||||||
|
if ((m_favorites.end() != found) && (found->listname == swinfo.listname) && (found->shortname == swinfo.shortname))
|
||||||
|
return true;
|
||||||
|
else if (m_favorites.begin() == found)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// need to back up and check for matching software with lexically earlier driver
|
||||||
|
--found;
|
||||||
|
return (found->listname == swinfo.listname) && (found->shortname == swinfo.shortname);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool favorite_manager::is_favorite(running_machine &machine) const
|
||||||
|
{
|
||||||
|
bool result(false);
|
||||||
|
apply_running_machine(
|
||||||
|
machine,
|
||||||
|
[this, &result] (game_driver const &driver, device_image_interface *imagedev, software_info const *software, bool &done)
|
||||||
|
{
|
||||||
|
assert(!result);
|
||||||
|
result = imagedev
|
||||||
|
? check_impl(running_software_key(driver, imagedev->software_list_name(), software->shortname()))
|
||||||
|
: check_impl(driver);
|
||||||
|
done = done || result;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool favorite_manager::is_favorite_system_software(ui_software_info const &swinfo) const
|
||||||
|
{
|
||||||
|
return check_impl(swinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> bool favorite_manager::check_impl(T const &key) const
|
||||||
|
{
|
||||||
|
return m_favorites.find(key) != m_favorites.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// remove
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void favorite_manager::remove_favorite_system(game_driver const &driver)
|
||||||
|
{
|
||||||
|
remove_impl(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
void favorite_manager::remove_favorite_software(ui_software_info const &swinfo)
|
||||||
|
{
|
||||||
|
remove_impl(swinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void favorite_manager::remove_favorite(running_machine &machine)
|
||||||
|
{
|
||||||
|
apply_running_machine(
|
||||||
|
machine,
|
||||||
|
[this] (game_driver const &driver, device_image_interface *imagedev, software_info const *software, bool &done)
|
||||||
|
{
|
||||||
|
done = imagedev
|
||||||
|
? remove_impl(running_software_key(driver, imagedev->software_list_name(), software->shortname()))
|
||||||
|
: remove_impl(driver);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> bool favorite_manager::remove_impl(T const &key)
|
||||||
|
{
|
||||||
|
auto const found(m_favorites.find(key));
|
||||||
|
if (m_favorites.end() != found)
|
||||||
|
{
|
||||||
|
m_favorites.erase(found);
|
||||||
|
m_sorted.clear();
|
||||||
|
m_need_sort = true;
|
||||||
|
save_favorites();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// implementation
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void favorite_manager::apply_running_machine(running_machine &machine, T &&action)
|
||||||
|
{
|
||||||
|
bool done(false);
|
||||||
|
|
||||||
|
// TODO: this should be changed - it interacts poorly with cartslots on arcade systems
|
||||||
|
if ((machine.system().flags & machine_flags::MASK_TYPE) == machine_flags::TYPE_ARCADE)
|
||||||
|
{
|
||||||
|
action(machine.system(), nullptr, nullptr, done);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool have_software(false);
|
||||||
|
for (device_image_interface &image_dev : image_interface_enumerator(machine.root_device()))
|
||||||
|
{
|
||||||
|
software_info const *const sw(image_dev.software_entry());
|
||||||
|
if (image_dev.exists() && image_dev.loaded_through_softlist() && sw)
|
||||||
|
{
|
||||||
|
assert(image_dev.software_list_name());
|
||||||
|
|
||||||
|
have_software = true;
|
||||||
|
action(machine.system(), &image_dev, sw, done);
|
||||||
|
if (done)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!have_software)
|
||||||
|
action(machine.system(), nullptr, nullptr, done);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void favorite_manager::update_sorted()
|
||||||
|
{
|
||||||
|
if (m_need_sort)
|
||||||
|
{
|
||||||
|
if (m_sorted.empty())
|
||||||
|
std::copy(m_favorites.begin(), m_favorites.end(), std::back_inserter(m_sorted));
|
||||||
|
|
||||||
|
assert(m_favorites.size() == m_sorted.size());
|
||||||
|
std::stable_sort(
|
||||||
|
m_sorted.begin(),
|
||||||
|
m_sorted.end(),
|
||||||
|
[] (ui_software_info const &lhs, ui_software_info const &rhs) -> bool
|
||||||
|
{
|
||||||
|
assert(lhs.driver);
|
||||||
|
assert(rhs.driver);
|
||||||
|
|
||||||
|
int cmp;
|
||||||
|
|
||||||
|
cmp = core_stricmp(lhs.longname.c_str(), rhs.longname.c_str());
|
||||||
|
if (0 > cmp)
|
||||||
|
return true;
|
||||||
|
else if (0 < cmp)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
cmp = core_stricmp(lhs.driver->type.fullname(), rhs.driver->type.fullname());
|
||||||
|
if (0 > cmp)
|
||||||
|
return true;
|
||||||
|
else if (0 < cmp)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
cmp = std::strcmp(lhs.listname.c_str(), rhs.listname.c_str());
|
||||||
|
if (0 > cmp)
|
||||||
|
return true;
|
||||||
|
else if (0 < cmp)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
m_need_sort = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void favorite_manager::save_favorites()
|
||||||
|
{
|
||||||
|
// attempt to open the output file
|
||||||
|
emu_file file(m_options.ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||||
|
if (!file.open(FAVORITE_FILENAME))
|
||||||
|
{
|
||||||
|
if (m_favorites.empty())
|
||||||
|
{
|
||||||
|
// delete it if there are no favorites
|
||||||
|
file.remove_on_close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// generate the favorite INI
|
||||||
|
file.puts("[ROOT_FOLDER]\n[Favorite]\n\n");
|
||||||
|
util::ovectorstream buf;
|
||||||
|
for (ui_software_info const &info : m_favorites)
|
||||||
|
{
|
||||||
|
buf.clear();
|
||||||
|
buf.rdbuf()->clear();
|
||||||
|
|
||||||
|
buf << info.shortname << '\n';
|
||||||
|
buf << info.longname << '\n';
|
||||||
|
buf << info.parentname << '\n';
|
||||||
|
buf << info.year << '\n';
|
||||||
|
buf << info.publisher << '\n';
|
||||||
|
util::stream_format(buf, "%d\n", int(info.supported));
|
||||||
|
buf << info.part << '\n';
|
||||||
|
util::stream_format(buf, "%s\n", info.driver->name);
|
||||||
|
buf << info.listname << '\n';
|
||||||
|
buf << info.interface << '\n';
|
||||||
|
buf << info.instance << '\n';
|
||||||
|
util::stream_format(buf, "%d\n", info.startempty);
|
||||||
|
buf << info.parentlongname << '\n';
|
||||||
|
buf << '\n'; //buf << info.usage << '\n'; TODO: store multi-line info in a recoverable format
|
||||||
|
buf << info.devicetype << '\n';
|
||||||
|
util::stream_format(buf, "%d\n", info.available);
|
||||||
|
|
||||||
|
file.puts(util::buf_to_string_view(buf));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
}
|
128
src/icludes/frontend/mame/ui/inifile.h
Normal file
128
src/icludes/frontend/mame/ui/inifile.h
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota, Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/inifile.h
|
||||||
|
|
||||||
|
UI INIs file manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_INIFILE_H
|
||||||
|
#define MAME_FRONTEND_UI_INIFILE_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <set>
|
||||||
|
#include <tuple>
|
||||||
|
#include <type_traits>
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// INIFILE MANAGER
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class ui_options;
|
||||||
|
|
||||||
|
class inifile_manager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
inifile_manager(ui_options &options);
|
||||||
|
|
||||||
|
// load systems from category
|
||||||
|
void load_ini_category(size_t file, size_t category, std::unordered_set<game_driver const *> &result) const;
|
||||||
|
|
||||||
|
// getters
|
||||||
|
size_t get_file_count() const { return m_ini_index.size(); }
|
||||||
|
std::string const &get_file_name(size_t file) const { return m_ini_index[file].first; }
|
||||||
|
size_t get_category_count(size_t file) const { return m_ini_index[file].second.size(); }
|
||||||
|
std::string const &get_category_name(size_t file, size_t category) const { return m_ini_index[file].second[category].first; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// ini file structure
|
||||||
|
using categoryindex = std::vector<std::pair<std::string, int64_t>>;
|
||||||
|
|
||||||
|
void init_category(std::string &&filename, emu_file &file);
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
ui_options &m_options;
|
||||||
|
std::vector<std::pair<std::string, categoryindex> > m_ini_index;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// FAVORITE MANAGER
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class favorite_manager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
favorite_manager(ui_options &options);
|
||||||
|
|
||||||
|
// add
|
||||||
|
void add_favorite_system(game_driver const &driver);
|
||||||
|
void add_favorite_software(ui_software_info const &swinfo);
|
||||||
|
void add_favorite(running_machine &machine);
|
||||||
|
|
||||||
|
// check
|
||||||
|
bool is_favorite_system(game_driver const &driver) const;
|
||||||
|
bool is_favorite_software(ui_software_info const &swinfo) const;
|
||||||
|
bool is_favorite_system_software(ui_software_info const &swinfo) const;
|
||||||
|
bool is_favorite(running_machine &machine) const;
|
||||||
|
|
||||||
|
// remove
|
||||||
|
void remove_favorite_system(game_driver const &driver);
|
||||||
|
void remove_favorite_software(ui_software_info const &swinfo);
|
||||||
|
void remove_favorite(running_machine &machine);
|
||||||
|
|
||||||
|
// walk
|
||||||
|
template <typename T> void apply(T &&action)
|
||||||
|
{
|
||||||
|
for (auto const &item : m_favorites)
|
||||||
|
action(item);
|
||||||
|
}
|
||||||
|
template <typename T> void apply_sorted(T &&action)
|
||||||
|
{
|
||||||
|
update_sorted();
|
||||||
|
for (auto const &item : m_sorted)
|
||||||
|
action(item.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
using running_software_key = std::tuple<game_driver const &, char const *, std::string const &>;
|
||||||
|
|
||||||
|
struct favorite_compare
|
||||||
|
{
|
||||||
|
using is_transparent = std::true_type;
|
||||||
|
|
||||||
|
bool operator()(ui_software_info const &lhs, ui_software_info const &rhs) const;
|
||||||
|
bool operator()(ui_software_info const &lhs, game_driver const &rhs) const;
|
||||||
|
bool operator()(game_driver const &lhs, ui_software_info const &rhs) const;
|
||||||
|
bool operator()(ui_software_info const &lhs, running_software_key const &rhs) const;
|
||||||
|
bool operator()(running_software_key const &lhs, ui_software_info const &rhs) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
using favorites_set = std::set<ui_software_info, favorite_compare>;
|
||||||
|
using sorted_favorites = std::vector<std::reference_wrapper<ui_software_info const> >;
|
||||||
|
|
||||||
|
// implementation
|
||||||
|
template <typename T> static void apply_running_machine(running_machine &machine, T &&action);
|
||||||
|
template <typename T> void add_impl(T &&key);
|
||||||
|
template <typename T> bool check_impl(T const &key) const;
|
||||||
|
template <typename T> bool remove_impl(T const &key);
|
||||||
|
void update_sorted();
|
||||||
|
void save_favorites();
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
ui_options &m_options;
|
||||||
|
favorites_set m_favorites;
|
||||||
|
sorted_favorites m_sorted;
|
||||||
|
bool m_need_sort;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_INIFILE_H
|
599
src/icludes/frontend/mame/ui/inputmap.cpp
Normal file
599
src/icludes/frontend/mame/ui/inputmap.cpp
Normal file
@ -0,0 +1,599 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/inputmap.cpp
|
||||||
|
|
||||||
|
Internal menus for input mappings.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/inputmap.h"
|
||||||
|
|
||||||
|
#include "uiinput.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_input_groups - handle the input groups
|
||||||
|
menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_input_groups::menu_input_groups(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_input_groups::~menu_input_groups()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input_groups::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// build up the menu
|
||||||
|
item_append(_("User Interface"), 0, (void *)uintptr_t(IPG_UI + 1));
|
||||||
|
for (int player = 0; player < MAX_PLAYERS; player++)
|
||||||
|
{
|
||||||
|
auto s = string_format(_("Player %1$d Controls"), player + 1);
|
||||||
|
item_append(s, 0, (void *)uintptr_t(IPG_PLAYER1 + player + 1));
|
||||||
|
}
|
||||||
|
item_append(_("Other Controls"), 0, (void *)uintptr_t(IPG_OTHER + 1));
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input_groups::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && (ev->iptkey == IPT_UI_SELECT))
|
||||||
|
menu::stack_push<menu_input_general>(ui(), container(), int(uintptr_t(ev->itemref) - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_input_general - handle the general
|
||||||
|
input menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_input_general::menu_input_general(mame_ui_manager &mui, render_container &container, int _group)
|
||||||
|
: menu_input(mui, container)
|
||||||
|
, group(_group)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_input_general::~menu_input_general()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input_general::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
if (data.empty())
|
||||||
|
{
|
||||||
|
assert(!pollingitem);
|
||||||
|
|
||||||
|
// iterate over the input ports and add menu items
|
||||||
|
for (const input_type_entry &entry : machine().ioport().types())
|
||||||
|
{
|
||||||
|
// add if we match the group and we have a valid name
|
||||||
|
if (entry.group() == group)
|
||||||
|
{
|
||||||
|
std::string name = entry.name();
|
||||||
|
if (!name.empty())
|
||||||
|
{
|
||||||
|
// loop over all sequence types
|
||||||
|
for (input_seq_type seqtype = SEQ_TYPE_STANDARD; seqtype < SEQ_TYPE_TOTAL; ++seqtype)
|
||||||
|
{
|
||||||
|
// build an entry for the standard sequence
|
||||||
|
input_item_data &item(data.emplace_back());
|
||||||
|
item.ref = &entry;
|
||||||
|
item.seqtype = seqtype;
|
||||||
|
item.seq = machine().ioport().type_seq(entry.type(), entry.player(), seqtype);
|
||||||
|
item.defseq = &entry.defseq(seqtype);
|
||||||
|
item.group = entry.group();
|
||||||
|
item.type = ioport_manager::type_is_analog(entry.type()) ? (INPUT_TYPE_ANALOG + seqtype) : INPUT_TYPE_DIGITAL;
|
||||||
|
item.is_optional = false;
|
||||||
|
item.name = name;
|
||||||
|
item.owner = nullptr;
|
||||||
|
|
||||||
|
// stop after one, unless we're analog
|
||||||
|
if (item.type == INPUT_TYPE_DIGITAL)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (input_item_data &item : data)
|
||||||
|
{
|
||||||
|
const input_type_entry &entry(*reinterpret_cast<const input_type_entry *>(item.ref));
|
||||||
|
item.seq = machine().ioport().type_seq(entry.type(), entry.player(), item.seqtype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// populate the menu in a standard fashion
|
||||||
|
populate_sorted(customtop, custombottom);
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input_general::update_input(input_item_data &seqchangeditem)
|
||||||
|
{
|
||||||
|
const input_type_entry &entry = *reinterpret_cast<const input_type_entry *>(seqchangeditem.ref);
|
||||||
|
machine().ioport().set_type_seq(entry.type(), entry.player(), seqchangeditem.seqtype, seqchangeditem.seq);
|
||||||
|
seqchangeditem.seq = machine().ioport().type_seq(entry.type(), entry.player(), seqchangeditem.seqtype);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_input_specific - handle the game-specific
|
||||||
|
input menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_input_specific::menu_input_specific(mame_ui_manager &mui, render_container &container) : menu_input(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_input_specific::~menu_input_specific()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input_specific::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
if (data.empty())
|
||||||
|
{
|
||||||
|
assert(!pollingitem);
|
||||||
|
|
||||||
|
// iterate over the input ports and add menu items
|
||||||
|
for (auto &port : machine().ioport().ports())
|
||||||
|
{
|
||||||
|
for (ioport_field &field : port.second->fields())
|
||||||
|
{
|
||||||
|
const ioport_type_class type_class = field.type_class();
|
||||||
|
|
||||||
|
// add if it's enabled and it's a system-specific class
|
||||||
|
if (field.enabled() && (type_class == INPUT_CLASS_CONTROLLER || type_class == INPUT_CLASS_MISC || type_class == INPUT_CLASS_KEYBOARD))
|
||||||
|
{
|
||||||
|
// loop over all sequence types
|
||||||
|
for (input_seq_type seqtype = SEQ_TYPE_STANDARD; seqtype < SEQ_TYPE_TOTAL; ++seqtype)
|
||||||
|
{
|
||||||
|
// build an entry for the standard sequence
|
||||||
|
input_item_data &item(data.emplace_back());
|
||||||
|
item.ref = &field;
|
||||||
|
item.seqtype = seqtype;
|
||||||
|
item.seq = field.seq(seqtype);
|
||||||
|
item.defseq = &field.defseq(seqtype);
|
||||||
|
item.group = machine().ioport().type_group(field.type(), field.player());
|
||||||
|
item.type = field.is_analog() ? (INPUT_TYPE_ANALOG + seqtype) : INPUT_TYPE_DIGITAL;
|
||||||
|
item.is_optional = field.optional();
|
||||||
|
item.name = field.name();
|
||||||
|
item.owner = &field.device();
|
||||||
|
|
||||||
|
// stop after one, unless we're analog
|
||||||
|
if (item.type == INPUT_TYPE_DIGITAL)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort it
|
||||||
|
std::sort(
|
||||||
|
data.begin(),
|
||||||
|
data.end(),
|
||||||
|
[] (const input_item_data &i1, const input_item_data &i2)
|
||||||
|
{
|
||||||
|
int cmp = strcmp(i1.owner->tag(), i2.owner->tag());
|
||||||
|
if (cmp < 0)
|
||||||
|
return true;
|
||||||
|
if (cmp > 0)
|
||||||
|
return false;
|
||||||
|
if (i1.group < i2.group)
|
||||||
|
return true;
|
||||||
|
if (i1.group > i2.group)
|
||||||
|
return false;
|
||||||
|
const ioport_field &field1 = *reinterpret_cast<const ioport_field *>(i1.ref);
|
||||||
|
const ioport_field &field2 = *reinterpret_cast<const ioport_field *>(i2.ref);
|
||||||
|
if (field1.type() < field2.type())
|
||||||
|
return true;
|
||||||
|
if (field1.type() > field2.type())
|
||||||
|
return false;
|
||||||
|
std::vector<char32_t> codes1 = field1.keyboard_codes(0);
|
||||||
|
std::vector<char32_t> codes2 = field2.keyboard_codes(0);
|
||||||
|
if (!codes1.empty() && (codes2.empty() || codes1[0] < codes2[0]))
|
||||||
|
return true;
|
||||||
|
if (!codes2.empty() && (codes1.empty() || codes1[0] > codes2[0]))
|
||||||
|
return false;
|
||||||
|
cmp = i1.name.compare(i2.name);
|
||||||
|
if (cmp < 0)
|
||||||
|
return true;
|
||||||
|
if (cmp > 0)
|
||||||
|
return false;
|
||||||
|
return i1.type < i2.type;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (input_item_data &item : data)
|
||||||
|
{
|
||||||
|
const ioport_field &field(*reinterpret_cast<const ioport_field *>(item.ref));
|
||||||
|
item.seq = field.seq(item.seqtype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// populate the menu in a standard fashion
|
||||||
|
if (!data.empty())
|
||||||
|
populate_sorted(customtop, custombottom);
|
||||||
|
else
|
||||||
|
item_append(_("This machine has no configurable inputs."), FLAG_DISABLE, nullptr);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input_specific::update_input(input_item_data &seqchangeditem)
|
||||||
|
{
|
||||||
|
ioport_field::user_settings settings;
|
||||||
|
|
||||||
|
// yeah, the const_cast is naughty, but we know we stored a non-const reference in it
|
||||||
|
ioport_field const &field(*reinterpret_cast<ioport_field const *>(seqchangeditem.ref));
|
||||||
|
field.get_user_settings(settings);
|
||||||
|
settings.seq[seqchangeditem.seqtype] = seqchangeditem.seq;
|
||||||
|
if (seqchangeditem.seq.is_default())
|
||||||
|
settings.cfg[seqchangeditem.seqtype].clear();
|
||||||
|
else if (!seqchangeditem.seq.length())
|
||||||
|
settings.cfg[seqchangeditem.seqtype] = "NONE";
|
||||||
|
else
|
||||||
|
settings.cfg[seqchangeditem.seqtype] = machine().input().seq_to_tokens(seqchangeditem.seq);
|
||||||
|
const_cast<ioport_field &>(field).set_user_settings(settings);
|
||||||
|
seqchangeditem.seq = field.seq(seqchangeditem.seqtype);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_input - display a menu for inputs
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_input::menu_input(mame_ui_manager &mui, render_container &container)
|
||||||
|
: menu(mui, container)
|
||||||
|
, data()
|
||||||
|
, pollingitem(nullptr)
|
||||||
|
, seq_poll()
|
||||||
|
, errormsg()
|
||||||
|
, erroritem(nullptr)
|
||||||
|
, lastitem(nullptr)
|
||||||
|
, record_next(false)
|
||||||
|
, modified_ticks(0)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_ALWAYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_input::~menu_input()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input::menu_activated()
|
||||||
|
{
|
||||||
|
// scripts can change settings out from under us
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
toggle_none_default - toggle between "NONE"
|
||||||
|
and the default item
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_input::toggle_none_default(input_seq &selected_seq, input_seq &original_seq, const input_seq &selected_defseq)
|
||||||
|
{
|
||||||
|
if (original_seq.empty()) // if we used to be "none", toggle to the default value
|
||||||
|
selected_seq.set_default();
|
||||||
|
else // otherwise, toggle to "none"
|
||||||
|
selected_seq.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input::custom_render(void *selectedref, float top, float bottom, float x1, float y1, float x2, float y2)
|
||||||
|
{
|
||||||
|
if (pollingitem)
|
||||||
|
{
|
||||||
|
const std::string seqname = machine().input().seq_name(seq_poll->sequence());
|
||||||
|
char const *const text[] = { seqname.c_str() };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(text), std::end(text),
|
||||||
|
x1, x2, y2 + ui().box_tb_border(), y2 + bottom,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::NEVER, false,
|
||||||
|
ui().colors().text_color(), ui().colors().background_color(), 1.0f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (erroritem && (selectedref != erroritem))
|
||||||
|
{
|
||||||
|
errormsg.clear();
|
||||||
|
erroritem = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (erroritem)
|
||||||
|
{
|
||||||
|
char const *const text[] = { errormsg.c_str() };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(text), std::end(text),
|
||||||
|
x1, x2, y2 + ui().box_tb_border(), y2 + bottom,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::NEVER, false,
|
||||||
|
ui().colors().text_color(), UI_RED_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
else if (selectedref)
|
||||||
|
{
|
||||||
|
const input_item_data &item = *reinterpret_cast<input_item_data *>(selectedref);
|
||||||
|
if ((INPUT_TYPE_ANALOG != item.type) && machine().input().seq_pressed(item.seq))
|
||||||
|
{
|
||||||
|
char const *const text[] = { _("Pressed") };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(text), std::end(text),
|
||||||
|
x1, x2, y2 + ui().box_tb_border(), y2 + bottom,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::NEVER, false,
|
||||||
|
ui().colors().text_color(), ui().colors().background_color(), 1.0f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char const *const text[] = {
|
||||||
|
record_next ? appendprompt.c_str() : assignprompt.c_str(),
|
||||||
|
(!item.seq.empty() || item.defseq->empty()) ? clearprompt.c_str() : defaultprompt.c_str() };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(text), std::end(text),
|
||||||
|
x1, x2, y2 + ui().box_tb_border(), y2 + bottom,
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::NEVER, false,
|
||||||
|
ui().colors().text_color(), ui().colors().background_color(), 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_input::handle(event const *ev)
|
||||||
|
{
|
||||||
|
input_item_data *seqchangeditem = nullptr;
|
||||||
|
bool invalidate = false;
|
||||||
|
|
||||||
|
// process the menu
|
||||||
|
if (pollingitem)
|
||||||
|
{
|
||||||
|
// if we are polling, handle as a special case
|
||||||
|
input_item_data *const item = pollingitem;
|
||||||
|
|
||||||
|
// prevent race condition between ui_input().pressed() and poll()
|
||||||
|
if (modified_ticks == 0 && seq_poll->modified())
|
||||||
|
modified_ticks = osd_ticks();
|
||||||
|
|
||||||
|
if (machine().ui_input().pressed(IPT_UI_CANCEL))
|
||||||
|
{
|
||||||
|
// if UI_CANCEL is pressed, abort
|
||||||
|
pollingitem = nullptr;
|
||||||
|
set_process_flags(PROCESS_LR_ALWAYS);
|
||||||
|
if (!seq_poll->modified() || modified_ticks == osd_ticks())
|
||||||
|
{
|
||||||
|
// cancelled immediately - toggle between default and none
|
||||||
|
record_next = false;
|
||||||
|
toggle_none_default(item->seq, starting_seq, *item->defseq);
|
||||||
|
seqchangeditem = item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// entered something before cancelling - abandon change
|
||||||
|
invalidate = true;
|
||||||
|
}
|
||||||
|
seq_poll.reset();
|
||||||
|
}
|
||||||
|
else if (seq_poll->poll()) // poll again; if finished, update the sequence
|
||||||
|
{
|
||||||
|
pollingitem = nullptr;
|
||||||
|
set_process_flags(PROCESS_LR_ALWAYS);
|
||||||
|
if (seq_poll->valid())
|
||||||
|
{
|
||||||
|
record_next = true;
|
||||||
|
item->seq = seq_poll->sequence();
|
||||||
|
seqchangeditem = item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// entered invalid sequence - abandon change
|
||||||
|
invalidate = true;
|
||||||
|
errormsg = _("Invalid sequence entered");
|
||||||
|
erroritem = item;
|
||||||
|
}
|
||||||
|
seq_poll.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
// otherwise, handle the events
|
||||||
|
input_item_data &item = *reinterpret_cast<input_item_data *>(ev->itemref);
|
||||||
|
input_item_data *newsel = &item;
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
case IPT_UI_SELECT: // an item was selected: begin polling
|
||||||
|
set_process_flags(PROCESS_NOKEYS);
|
||||||
|
errormsg.clear();
|
||||||
|
erroritem = nullptr;
|
||||||
|
modified_ticks = 0;
|
||||||
|
pollingitem = &item;
|
||||||
|
lastitem = &item;
|
||||||
|
starting_seq = item.seq;
|
||||||
|
if (INPUT_TYPE_ANALOG == item.type)
|
||||||
|
seq_poll.reset(new axis_sequence_poller(machine().input()));
|
||||||
|
else
|
||||||
|
seq_poll.reset(new switch_sequence_poller(machine().input()));
|
||||||
|
if (record_next)
|
||||||
|
seq_poll->start(item.seq);
|
||||||
|
else
|
||||||
|
seq_poll->start();
|
||||||
|
invalidate = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_CLEAR: // if the clear key was pressed, reset the selected item
|
||||||
|
errormsg.clear();
|
||||||
|
erroritem = nullptr;
|
||||||
|
toggle_none_default(item.seq, item.seq, *item.defseq);
|
||||||
|
record_next = false;
|
||||||
|
seqchangeditem = &item;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_PREV_GROUP:
|
||||||
|
{
|
||||||
|
auto current = std::distance(data.data(), &item);
|
||||||
|
bool found_break = false;
|
||||||
|
while (0 < current)
|
||||||
|
{
|
||||||
|
if (!found_break)
|
||||||
|
{
|
||||||
|
if (data[--current].owner != item.owner)
|
||||||
|
found_break = true;
|
||||||
|
}
|
||||||
|
else if (data[current].owner != data[current - 1].owner)
|
||||||
|
{
|
||||||
|
newsel = &data[current];
|
||||||
|
set_selection(newsel);
|
||||||
|
set_top_line(selected_index() - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--current;
|
||||||
|
}
|
||||||
|
if (found_break && !current)
|
||||||
|
{
|
||||||
|
newsel = &data[current];
|
||||||
|
set_selection(newsel);
|
||||||
|
set_top_line(selected_index() - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_NEXT_GROUP:
|
||||||
|
{
|
||||||
|
auto current = std::distance(data.data(), &item);
|
||||||
|
while (data.size() > ++current)
|
||||||
|
{
|
||||||
|
if (data[current].owner != item.owner)
|
||||||
|
{
|
||||||
|
newsel = &data[current];
|
||||||
|
set_selection(newsel);
|
||||||
|
set_top_line(selected_index() - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the selection changed, reset the "record next" flag
|
||||||
|
if (newsel != lastitem)
|
||||||
|
{
|
||||||
|
if (erroritem)
|
||||||
|
{
|
||||||
|
errormsg.clear();
|
||||||
|
erroritem = nullptr;
|
||||||
|
}
|
||||||
|
record_next = false;
|
||||||
|
lastitem = &item;
|
||||||
|
}
|
||||||
|
|
||||||
|
// flip between set and append
|
||||||
|
// not very discoverable, but with the prompt it isn't completely opaque
|
||||||
|
if ((IPT_UI_LEFT == ev->iptkey) || (IPT_UI_RIGHT == ev->iptkey))
|
||||||
|
{
|
||||||
|
if (erroritem)
|
||||||
|
{
|
||||||
|
errormsg.clear();
|
||||||
|
erroritem = nullptr;
|
||||||
|
}
|
||||||
|
else if (record_next || !item.seq.empty())
|
||||||
|
{
|
||||||
|
record_next = !record_next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the sequence changed, update it
|
||||||
|
if (seqchangeditem)
|
||||||
|
{
|
||||||
|
update_input(*seqchangeditem);
|
||||||
|
|
||||||
|
// invalidate the menu to force an update
|
||||||
|
invalidate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the menu is invalidated, clear it now
|
||||||
|
if (invalidate)
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate_sorted - take a sorted list of
|
||||||
|
// input_item_data objects and build up the
|
||||||
|
// menu from them
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_input::populate_sorted(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
const char *nameformat[INPUT_TYPE_TOTAL] = { nullptr };
|
||||||
|
|
||||||
|
// create a mini lookup table for name format based on type
|
||||||
|
nameformat[INPUT_TYPE_DIGITAL] = "%1$s";
|
||||||
|
nameformat[INPUT_TYPE_ANALOG] = _("input-name", "%1$s Analog");
|
||||||
|
nameformat[INPUT_TYPE_ANALOG_INC] = _("input-name", "%1$s Analog Inc");
|
||||||
|
nameformat[INPUT_TYPE_ANALOG_DEC] = _("input-name", "%1$s Analog Dec");
|
||||||
|
|
||||||
|
// build the menu
|
||||||
|
std::string text, subtext;
|
||||||
|
const device_t *prev_owner = nullptr;
|
||||||
|
for (input_item_data &item : data)
|
||||||
|
{
|
||||||
|
// generate the name of the item itself, based off the base name and the type
|
||||||
|
assert(nameformat[item.type] != nullptr);
|
||||||
|
|
||||||
|
if (item.owner && (item.owner != prev_owner))
|
||||||
|
{
|
||||||
|
if (item.owner->owner())
|
||||||
|
item_append(string_format(_("%1$s [root%2$s]"), item.owner->type().fullname(), item.owner->tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
|
||||||
|
else
|
||||||
|
item_append(string_format(_("[root%1$s]"), item.owner->tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
|
||||||
|
prev_owner = item.owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
text = string_format(nameformat[item.type], item.name);
|
||||||
|
if (item.is_optional)
|
||||||
|
text = "(" + text + ")";
|
||||||
|
|
||||||
|
uint32_t flags = 0;
|
||||||
|
if (&item == pollingitem)
|
||||||
|
{
|
||||||
|
// if we're polling this item, use some spaces with left/right arrows
|
||||||
|
subtext = " ";
|
||||||
|
flags |= FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// otherwise, generate the sequence name and invert it if different from the default
|
||||||
|
subtext = machine().input().seq_name(item.seq);
|
||||||
|
flags |= (item.seq != *item.defseq) ? FLAG_INVERT : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the item
|
||||||
|
item_append(std::move(text), std::move(subtext), flags, &item);
|
||||||
|
}
|
||||||
|
|
||||||
|
// pre-format messages
|
||||||
|
assignprompt = util::string_format(_("Press %1$s to set\n"), ui().get_general_input_setting(IPT_UI_SELECT));
|
||||||
|
appendprompt = util::string_format(_("Press %1$s to append\n"), ui().get_general_input_setting(IPT_UI_SELECT));
|
||||||
|
clearprompt = util::string_format(_("Press %1$s to clear\n"), ui().get_general_input_setting(IPT_UI_CLEAR));
|
||||||
|
defaultprompt = util::string_format(_("Press %1$s to restore default\n"), ui().get_general_input_setting(IPT_UI_CLEAR));
|
||||||
|
|
||||||
|
// leave space for showing the input sequence below the menu
|
||||||
|
custombottom = 2.0f * ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
119
src/icludes/frontend/mame/ui/inputmap.h
Normal file
119
src/icludes/frontend/mame/ui/inputmap.h
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/inputmap.h
|
||||||
|
|
||||||
|
Internal menus for input mappings.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_INPUTMAP_H
|
||||||
|
#define MAME_FRONTEND_UI_INPUTMAP_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
#include "iptseqpoll.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_input_groups : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_input_groups(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_input_groups() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_input : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~menu_input() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
enum {
|
||||||
|
INPUT_TYPE_DIGITAL = 0,
|
||||||
|
INPUT_TYPE_ANALOG = 1,
|
||||||
|
INPUT_TYPE_ANALOG_DEC = INPUT_TYPE_ANALOG + SEQ_TYPE_DECREMENT,
|
||||||
|
INPUT_TYPE_ANALOG_INC = INPUT_TYPE_ANALOG + SEQ_TYPE_INCREMENT,
|
||||||
|
INPUT_TYPE_TOTAL = INPUT_TYPE_ANALOG + SEQ_TYPE_TOTAL
|
||||||
|
};
|
||||||
|
|
||||||
|
// internal input menu item data
|
||||||
|
struct input_item_data
|
||||||
|
{
|
||||||
|
const void * ref = nullptr; // reference to type description for global inputs or field for game inputs
|
||||||
|
input_seq_type seqtype = SEQ_TYPE_INVALID; // sequence type
|
||||||
|
input_seq seq; // copy of the live sequence
|
||||||
|
const input_seq * defseq = nullptr; // pointer to the default sequence
|
||||||
|
std::string name; // base name of the item
|
||||||
|
const device_t * owner = nullptr; // pointer to the owner of the item
|
||||||
|
ioport_group group = IPG_INVALID; // group type
|
||||||
|
uint8_t type = 0U; // type of port
|
||||||
|
bool is_optional = false; // true if this input is considered optional
|
||||||
|
};
|
||||||
|
using data_vector = std::vector<input_item_data>;
|
||||||
|
|
||||||
|
menu_input(mame_ui_manager &mui, render_container &container);
|
||||||
|
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
|
||||||
|
void populate_sorted(float &customtop, float &custombottom);
|
||||||
|
void toggle_none_default(input_seq &selected_seq, input_seq &original_seq, const input_seq &selected_defseq);
|
||||||
|
|
||||||
|
data_vector data;
|
||||||
|
input_item_data *pollingitem;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<input_sequence_poller> seq_poll;
|
||||||
|
std::string assignprompt, appendprompt;
|
||||||
|
std::string clearprompt, defaultprompt;
|
||||||
|
std::string errormsg;
|
||||||
|
input_item_data *erroritem;
|
||||||
|
input_item_data *lastitem;
|
||||||
|
bool record_next;
|
||||||
|
osd_ticks_t modified_ticks;
|
||||||
|
input_seq starting_seq;
|
||||||
|
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x1, float y1, float x2, float y2) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
virtual void update_input(input_item_data &seqchangeditem) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_input_general : public menu_input
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_input_general(mame_ui_manager &mui, render_container &container, int group);
|
||||||
|
virtual ~menu_input_general() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void update_input(input_item_data &seqchangeditem) override;
|
||||||
|
|
||||||
|
const int group;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_input_specific : public menu_input
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_input_specific(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_input_specific() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void update_input(input_item_data &seqchangeditem) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_INPUTMAP_H
|
116
src/icludes/frontend/mame/ui/keyboard.cpp
Normal file
116
src/icludes/frontend/mame/ui/keyboard.cpp
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/keyboard.cpp
|
||||||
|
|
||||||
|
Keyboard mode menu.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/keyboard.h"
|
||||||
|
|
||||||
|
#include "natkeyboard.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
constexpr uintptr_t ITEM_KBMODE = 0x00000100;
|
||||||
|
constexpr uintptr_t ITEM_KBDEV_FIRST = 0x00000200;
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
menu_keyboard_mode::menu_keyboard_mode(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_keyboard_mode::menu_activated()
|
||||||
|
{
|
||||||
|
// scripts could have changed something behind our back
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_keyboard_mode::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
natural_keyboard &natkbd(machine().natkeyboard());
|
||||||
|
|
||||||
|
if (natkbd.can_post())
|
||||||
|
{
|
||||||
|
bool const natmode(natkbd.in_use());
|
||||||
|
item_append(
|
||||||
|
_("Keyboard Mode"),
|
||||||
|
natmode ? _("Natural") : _("Emulated"),
|
||||||
|
natmode ? FLAG_LEFT_ARROW : FLAG_RIGHT_ARROW,
|
||||||
|
reinterpret_cast<void *>(ITEM_KBMODE));
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
uintptr_t ref(ITEM_KBDEV_FIRST);
|
||||||
|
for (size_t i = 0; natkbd.keyboard_count() > i; ++i, ++ref)
|
||||||
|
{
|
||||||
|
device_t &kbddev(natkbd.keyboard_device(i));
|
||||||
|
bool const enabled(natkbd.keyboard_enabled(i));
|
||||||
|
item_append(
|
||||||
|
util::string_format(
|
||||||
|
kbddev.owner() ? _("%1$s [root%2$s]") : _("[root%2$s]"),
|
||||||
|
kbddev.type().fullname(),
|
||||||
|
kbddev.tag()),
|
||||||
|
enabled ? _("Enabled") : _("Disabled"),
|
||||||
|
enabled ? FLAG_LEFT_ARROW : FLAG_RIGHT_ARROW,
|
||||||
|
reinterpret_cast<void *>(ref));
|
||||||
|
}
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_keyboard_mode::~menu_keyboard_mode()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_keyboard_mode::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (ev && uintptr_t(ev->itemref))
|
||||||
|
{
|
||||||
|
natural_keyboard &natkbd(machine().natkeyboard());
|
||||||
|
uintptr_t const ref(uintptr_t(ev->itemref));
|
||||||
|
bool left(IPT_UI_LEFT == ev->iptkey);
|
||||||
|
bool right(IPT_UI_RIGHT == ev->iptkey);
|
||||||
|
if (ITEM_KBMODE == ref)
|
||||||
|
{
|
||||||
|
if (IPT_UI_SELECT == ev->iptkey)
|
||||||
|
{
|
||||||
|
left = natkbd.in_use();
|
||||||
|
right = !left;
|
||||||
|
}
|
||||||
|
if ((left || right) && (natkbd.in_use() != right))
|
||||||
|
{
|
||||||
|
natkbd.set_in_use(right);
|
||||||
|
ev->item->set_subtext(right ? _("Natural") : _("Emulated"));
|
||||||
|
ev->item->set_flags(right ? FLAG_LEFT_ARROW : FLAG_RIGHT_ARROW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ITEM_KBDEV_FIRST <= ref)
|
||||||
|
{
|
||||||
|
auto const kbdno(ref - ITEM_KBDEV_FIRST);
|
||||||
|
if (IPT_UI_SELECT == ev->iptkey)
|
||||||
|
{
|
||||||
|
left = natkbd.keyboard_enabled(kbdno);
|
||||||
|
right = !left;
|
||||||
|
}
|
||||||
|
if ((left || right) && (natkbd.keyboard_enabled(kbdno) != right))
|
||||||
|
{
|
||||||
|
if (right)
|
||||||
|
natkbd.enable_keyboard(kbdno);
|
||||||
|
else
|
||||||
|
natkbd.disable_keyboard(kbdno);
|
||||||
|
ev->item->set_subtext(right ? _("Enabled") : _("Disabled"));
|
||||||
|
ev->item->set_flags(right ? FLAG_LEFT_ARROW : FLAG_RIGHT_ARROW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
36
src/icludes/frontend/mame/ui/keyboard.h
Normal file
36
src/icludes/frontend/mame/ui/keyboard.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/keyboard.h
|
||||||
|
|
||||||
|
Keyboard mode menu.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_KEYBOARD_H
|
||||||
|
#define MAME_FRONTEND_UI_KEYBOARD_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_keyboard_mode : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_keyboard_mode(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_keyboard_mode();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_KEYBOARD_H
|
361
src/icludes/frontend/mame/ui/mainmenu.cpp
Normal file
361
src/icludes/frontend/mame/ui/mainmenu.cpp
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/mainmenu.cpp
|
||||||
|
|
||||||
|
Internal MAME menus for the user interface.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/mainmenu.h"
|
||||||
|
|
||||||
|
#include "ui/about.h"
|
||||||
|
#include "ui/analogipt.h"
|
||||||
|
#include "ui/barcode.h"
|
||||||
|
#include "ui/cheatopt.h"
|
||||||
|
#include "ui/confswitch.h"
|
||||||
|
#include "ui/datmenu.h"
|
||||||
|
#include "ui/filemngr.h"
|
||||||
|
#include "ui/info.h"
|
||||||
|
#include "ui/info_pty.h"
|
||||||
|
#include "ui/inifile.h"
|
||||||
|
#include "ui/inputmap.h"
|
||||||
|
#include "ui/keyboard.h"
|
||||||
|
#include "ui/miscmenu.h"
|
||||||
|
#include "ui/pluginopt.h"
|
||||||
|
#include "ui/selgame.h"
|
||||||
|
#include "ui/simpleselgame.h"
|
||||||
|
#include "ui/sliders.h"
|
||||||
|
#include "ui/slotopt.h"
|
||||||
|
#include "ui/tapectrl.h"
|
||||||
|
#include "ui/videoopt.h"
|
||||||
|
|
||||||
|
#include "mame.h"
|
||||||
|
#include "luaengine.h"
|
||||||
|
|
||||||
|
#include "machine/bcreader.h"
|
||||||
|
#include "imagedev/cassette.h"
|
||||||
|
|
||||||
|
#include "crsshair.h"
|
||||||
|
#include "dipty.h"
|
||||||
|
#include "emuopts.h"
|
||||||
|
#include "natkeyboard.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
enum : unsigned {
|
||||||
|
INPUT_GROUPS,
|
||||||
|
INPUT_SPECIFIC,
|
||||||
|
SETTINGS_DIP_SWITCHES,
|
||||||
|
SETTINGS_DRIVER_CONFIG,
|
||||||
|
ANALOG,
|
||||||
|
BOOKKEEPING,
|
||||||
|
GAME_INFO,
|
||||||
|
WARN_INFO,
|
||||||
|
IMAGE_MENU_IMAGE_INFO,
|
||||||
|
IMAGE_MENU_FILE_MANAGER,
|
||||||
|
TAPE_CONTROL,
|
||||||
|
SLOT_DEVICES,
|
||||||
|
NETWORK_DEVICES,
|
||||||
|
KEYBOARD_MODE,
|
||||||
|
SLIDERS,
|
||||||
|
VIDEO_TARGETS,
|
||||||
|
VIDEO_OPTIONS,
|
||||||
|
CROSSHAIR,
|
||||||
|
CHEAT,
|
||||||
|
PLUGINS,
|
||||||
|
BIOS_SELECTION,
|
||||||
|
BARCODE_READ,
|
||||||
|
PTY_INFO,
|
||||||
|
EXTERNAL_DATS,
|
||||||
|
ADD_FAVORITE,
|
||||||
|
REMOVE_FAVORITE,
|
||||||
|
ABOUT,
|
||||||
|
QUIT_GAME,
|
||||||
|
DISMISS,
|
||||||
|
SELECT_GAME
|
||||||
|
};
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
MENU HANDLERS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_main constructor/destructor
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_main::menu_main(mame_ui_manager &mui, render_container &container)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_phase(machine_phase::PREINIT)
|
||||||
|
{
|
||||||
|
set_needs_prev_menu_item(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_main::~menu_main()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_activated - handle coming to foreground
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_main::menu_activated()
|
||||||
|
{
|
||||||
|
if (machine().phase() != m_phase)
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
populate - populate main menu items
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_main::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
m_phase = machine().phase();
|
||||||
|
|
||||||
|
item_append(_("Input (general)"), 0, (void *)INPUT_GROUPS);
|
||||||
|
|
||||||
|
item_append(_("Input (this machine)"), 0, (void *)INPUT_SPECIFIC);
|
||||||
|
|
||||||
|
if (ui().machine_info().has_analog())
|
||||||
|
item_append(_("Analog Controls"), 0, (void *)ANALOG);
|
||||||
|
if (ui().machine_info().has_dips())
|
||||||
|
item_append(_("DIP Switches"), 0, (void *)SETTINGS_DIP_SWITCHES);
|
||||||
|
if (ui().machine_info().has_configs())
|
||||||
|
item_append(_("Machine Configuration"), 0, (void *)SETTINGS_DRIVER_CONFIG);
|
||||||
|
|
||||||
|
item_append(_("Bookkeeping Info"), 0, (void *)BOOKKEEPING);
|
||||||
|
|
||||||
|
item_append(_("Machine Information"), 0, (void *)GAME_INFO);
|
||||||
|
|
||||||
|
if (ui().found_machine_warnings())
|
||||||
|
item_append(_("Warning Information"), 0, (void *)WARN_INFO);
|
||||||
|
|
||||||
|
for (device_image_interface &image : image_interface_enumerator(machine().root_device()))
|
||||||
|
{
|
||||||
|
if (image.user_loadable())
|
||||||
|
{
|
||||||
|
item_append(_("Image Information"), 0, (void *)IMAGE_MENU_IMAGE_INFO);
|
||||||
|
|
||||||
|
item_append(_("File Manager"), 0, (void *)IMAGE_MENU_FILE_MANAGER);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cassette_device_enumerator(machine().root_device()).first() != nullptr)
|
||||||
|
item_append(_("Tape Control"), 0, (void *)TAPE_CONTROL);
|
||||||
|
|
||||||
|
if (pty_interface_enumerator(machine().root_device()).first() != nullptr)
|
||||||
|
item_append(_("Pseudo Terminals"), 0, (void *)PTY_INFO);
|
||||||
|
|
||||||
|
if (ui().machine_info().has_bioses())
|
||||||
|
item_append(_("BIOS Selection"), 0, (void *)BIOS_SELECTION);
|
||||||
|
|
||||||
|
if (slot_interface_enumerator(machine().root_device()).first() != nullptr)
|
||||||
|
item_append(_("Slot Devices"), 0, (void *)SLOT_DEVICES);
|
||||||
|
|
||||||
|
if (barcode_reader_device_enumerator(machine().root_device()).first() != nullptr)
|
||||||
|
item_append(_("Barcode Reader"), 0, (void *)BARCODE_READ);
|
||||||
|
|
||||||
|
if (network_interface_enumerator(machine().root_device()).first() != nullptr)
|
||||||
|
item_append(_("Network Devices"), 0, (void*)NETWORK_DEVICES);
|
||||||
|
|
||||||
|
if (machine().natkeyboard().keyboard_count())
|
||||||
|
item_append(_("Keyboard Mode"), 0, (void *)KEYBOARD_MODE);
|
||||||
|
|
||||||
|
item_append(_("Slider Controls"), 0, (void *)SLIDERS);
|
||||||
|
|
||||||
|
item_append(_("Video Options"), 0, (void *)VIDEO_TARGETS);
|
||||||
|
|
||||||
|
if (machine().crosshair().get_usage())
|
||||||
|
item_append(_("Crosshair Options"), 0, (void *)CROSSHAIR);
|
||||||
|
|
||||||
|
if (machine().options().cheat())
|
||||||
|
item_append(_("Cheat"), 0, (void *)CHEAT);
|
||||||
|
|
||||||
|
if (machine_phase::RESET <= m_phase)
|
||||||
|
{
|
||||||
|
if (machine().options().plugins() && !mame_machine_manager::instance()->lua()->get_menu().empty())
|
||||||
|
item_append(_("Plugin Options"), 0, (void *)PLUGINS);
|
||||||
|
|
||||||
|
if (mame_machine_manager::instance()->lua()->call_plugin_check<const char *>("data_list", "", true))
|
||||||
|
item_append(_("External DAT View"), 0, (void *)EXTERNAL_DATS);
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
if (!mame_machine_manager::instance()->favorite().is_favorite(machine()))
|
||||||
|
item_append(_("Add To Favorites"), 0, (void *)ADD_FAVORITE);
|
||||||
|
else
|
||||||
|
item_append(_("Remove From Favorites"), 0, (void *)REMOVE_FAVORITE);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
item_append(string_format(_("About %1$s"), emulator_info::get_appname()), 0, (void *)ABOUT);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
// item_append(_("Quit from Machine"), 0, (void *)QUIT_GAME);
|
||||||
|
|
||||||
|
if (machine_phase::INIT == m_phase)
|
||||||
|
{
|
||||||
|
item_append(_("Start Machine"), 0, (void *)DISMISS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item_append(_("Select New Machine"), 0, (void *)SELECT_GAME);
|
||||||
|
item_append(_("Return to Machine"), 0, (void *)DISMISS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
handle - handle main menu events
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_main::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && (ev->iptkey == IPT_UI_SELECT))
|
||||||
|
{
|
||||||
|
switch (uintptr_t(ev->itemref))
|
||||||
|
{
|
||||||
|
case INPUT_GROUPS:
|
||||||
|
menu::stack_push<menu_input_groups>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case INPUT_SPECIFIC:
|
||||||
|
menu::stack_push<menu_input_specific>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SETTINGS_DIP_SWITCHES:
|
||||||
|
menu::stack_push<menu_settings_dip_switches>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SETTINGS_DRIVER_CONFIG:
|
||||||
|
menu::stack_push<menu_settings_machine_config>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ANALOG:
|
||||||
|
menu::stack_push<menu_analog>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BOOKKEEPING:
|
||||||
|
menu::stack_push<menu_bookkeeping>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_INFO:
|
||||||
|
menu::stack_push<menu_game_info>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WARN_INFO:
|
||||||
|
menu::stack_push<menu_warn_info>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IMAGE_MENU_IMAGE_INFO:
|
||||||
|
menu::stack_push<menu_image_info>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IMAGE_MENU_FILE_MANAGER:
|
||||||
|
menu::stack_push<menu_file_manager>(ui(), container(), nullptr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TAPE_CONTROL:
|
||||||
|
menu::stack_push<menu_tape_control>(ui(), container(), nullptr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PTY_INFO:
|
||||||
|
menu::stack_push<menu_pty_info>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SLOT_DEVICES:
|
||||||
|
menu::stack_push<menu_slot_devices>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NETWORK_DEVICES:
|
||||||
|
menu::stack_push<menu_network_devices>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEYBOARD_MODE:
|
||||||
|
menu::stack_push<menu_keyboard_mode>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SLIDERS:
|
||||||
|
menu::stack_push<menu_sliders>(ui(), container(), false);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIDEO_TARGETS:
|
||||||
|
menu::stack_push<menu_video_targets>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIDEO_OPTIONS:
|
||||||
|
menu::stack_push<menu_video_options>(ui(), container(), *machine().render().first_target(), false);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CROSSHAIR:
|
||||||
|
menu::stack_push<menu_crosshair>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHEAT:
|
||||||
|
menu::stack_push<menu_cheat>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PLUGINS:
|
||||||
|
menu::stack_push<menu_plugin>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT_GAME:
|
||||||
|
if (machine().options().ui() == emu_options::UI_SIMPLE)
|
||||||
|
menu::stack_push<simple_menu_select_game>(ui(), container(), nullptr);
|
||||||
|
else
|
||||||
|
menu::stack_push<menu_select_game>(ui(), container(), nullptr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ABOUT:
|
||||||
|
menu::stack_push<menu_about>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BIOS_SELECTION:
|
||||||
|
menu::stack_push<menu_bios_selection>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BARCODE_READ:
|
||||||
|
menu::stack_push<menu_barcode_reader>(ui(), container(), nullptr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXTERNAL_DATS:
|
||||||
|
menu::stack_push<menu_dats_view>(ui(), container());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ADD_FAVORITE:
|
||||||
|
mame_machine_manager::instance()->favorite().add_favorite(machine());
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case REMOVE_FAVORITE:
|
||||||
|
mame_machine_manager::instance()->favorite().remove_favorite(machine());
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case QUIT_GAME:
|
||||||
|
stack_pop();
|
||||||
|
ui().request_quit();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DISMISS:
|
||||||
|
stack_pop();
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fatalerror("ui::menu_main::handle - unknown reference\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
39
src/icludes/frontend/mame/ui/mainmenu.h
Normal file
39
src/icludes/frontend/mame/ui/mainmenu.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/mainmenu.h
|
||||||
|
|
||||||
|
Internal MAME menus for the user interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_MAINMENU_H
|
||||||
|
#define MAME_FRONTEND_UI_MAINMENU_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_main : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_main(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_main();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
machine_phase m_phase;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_MAINMENU_H
|
1315
src/icludes/frontend/mame/ui/menu.cpp
Normal file
1315
src/icludes/frontend/mame/ui/menu.cpp
Normal file
File diff suppressed because it is too large
Load Diff
429
src/icludes/frontend/mame/ui/menu.h
Normal file
429
src/icludes/frontend/mame/ui/menu.h
Normal file
@ -0,0 +1,429 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/menu.h
|
||||||
|
|
||||||
|
Internal MAME menus for the user interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_MENU_H
|
||||||
|
#define MAME_FRONTEND_UI_MENU_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/menuitem.h"
|
||||||
|
#include "ui/widgets.h"
|
||||||
|
|
||||||
|
#include "language.h"
|
||||||
|
#include "render.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
|
#include <string_view>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
TYPE DEFINITIONS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
class menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// flags for menu items
|
||||||
|
enum : uint32_t
|
||||||
|
{
|
||||||
|
FLAG_LEFT_ARROW = 1U << 0,
|
||||||
|
FLAG_RIGHT_ARROW = 1U << 1,
|
||||||
|
FLAG_INVERT = 1U << 2,
|
||||||
|
FLAG_DISABLE = 1U << 4,
|
||||||
|
FLAG_UI_HEADING = 1U << 5,
|
||||||
|
FLAG_COLOR_BOX = 1U << 6
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual ~menu();
|
||||||
|
|
||||||
|
// append a new item to the end of the menu
|
||||||
|
void item_append(const std::string &text, uint32_t flags, void *ref, menu_item_type type = menu_item_type::UNKNOWN) { item_append(std::string(text), std::string(), flags, ref, type); }
|
||||||
|
void item_append(const std::string &text, const std::string &subtext, uint32_t flags, void *ref, menu_item_type type = menu_item_type::UNKNOWN) { item_append(std::string(text), std::string(subtext), flags, ref, type); }
|
||||||
|
void item_append(std::string &&text, uint32_t flags, void *ref, menu_item_type type = menu_item_type::UNKNOWN) { item_append(text, std::string(), flags, ref, type); }
|
||||||
|
void item_append(std::string &&text, std::string &&subtext, uint32_t flags, void *ref, menu_item_type type = menu_item_type::UNKNOWN);
|
||||||
|
void item_append(menu_item item) { item_append(item.text(), item.subtext(), item.flags(), item.ref(), item.type()); }
|
||||||
|
void item_append(menu_item_type type, uint32_t flags = 0);
|
||||||
|
void item_append_on_off(const std::string &text, bool state, uint32_t flags, void *ref, menu_item_type type = menu_item_type::UNKNOWN);
|
||||||
|
|
||||||
|
// reset the menus, clearing everything
|
||||||
|
static void stack_reset(mame_ui_manager &ui) { get_global_state(ui).stack_reset(); }
|
||||||
|
|
||||||
|
// push a new menu onto the stack
|
||||||
|
template <typename T, typename... Params>
|
||||||
|
static void stack_push(Params &&... args)
|
||||||
|
{
|
||||||
|
stack_push(std::make_unique<T>(std::forward<Params>(args)...));
|
||||||
|
}
|
||||||
|
template <typename T, typename... Params>
|
||||||
|
static void stack_push_special_main(Params &&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<menu> ptr(std::make_unique<T>(std::forward<Params>(args)...));
|
||||||
|
ptr->set_special_main_menu(true);
|
||||||
|
stack_push(std::move(ptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
// pop a menu from the stack
|
||||||
|
static void stack_pop(mame_ui_manager &ui) { get_global_state(ui).stack_pop(); }
|
||||||
|
|
||||||
|
// test if one of the menus in the stack requires hide disable
|
||||||
|
static bool stack_has_special_main_menu(mame_ui_manager &ui) { return get_global_state(ui).stack_has_special_main_menu(); }
|
||||||
|
|
||||||
|
// master handler
|
||||||
|
static delegate<uint32_t (render_container &)> get_ui_handler(mame_ui_manager &mui);
|
||||||
|
|
||||||
|
// Used by sliders
|
||||||
|
void validate_selection(int scandir);
|
||||||
|
|
||||||
|
void do_handle();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
using bitmap_ptr = widgets_manager::bitmap_ptr;
|
||||||
|
using texture_ptr = widgets_manager::texture_ptr;
|
||||||
|
|
||||||
|
// flags to pass to set_process_flags
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROCESS_NOKEYS = 1 << 0,
|
||||||
|
PROCESS_LR_ALWAYS = 1 << 1,
|
||||||
|
PROCESS_LR_REPEAT = 1 << 2,
|
||||||
|
PROCESS_CUSTOM_NAV = 1 << 3,
|
||||||
|
PROCESS_CUSTOM_ONLY = 1 << 4,
|
||||||
|
PROCESS_ONLYCHAR = 1 << 5,
|
||||||
|
PROCESS_NOINPUT = 1 << 6,
|
||||||
|
PROCESS_IGNOREPAUSE = 1 << 7
|
||||||
|
};
|
||||||
|
|
||||||
|
// options for reset
|
||||||
|
enum class reset_options
|
||||||
|
{
|
||||||
|
SELECT_FIRST,
|
||||||
|
REMEMBER_POSITION,
|
||||||
|
REMEMBER_REF
|
||||||
|
};
|
||||||
|
|
||||||
|
// menu-related events
|
||||||
|
struct event
|
||||||
|
{
|
||||||
|
void *itemref; // reference for the selected item or nullptr
|
||||||
|
menu_item *item; // selected item or nullptr
|
||||||
|
int iptkey; // one of the IPT_* values from inptport.h
|
||||||
|
char32_t unichar; // unicode character if iptkey == IPT_SPECIAL
|
||||||
|
render_bounds mouse; // mouse position if iptkey == IPT_CUSTOM
|
||||||
|
};
|
||||||
|
|
||||||
|
menu(mame_ui_manager &mui, render_container &container);
|
||||||
|
|
||||||
|
mame_ui_manager &ui() const { return m_ui; }
|
||||||
|
running_machine &machine() const { return m_ui.machine(); }
|
||||||
|
render_container &container() const { return m_container; }
|
||||||
|
|
||||||
|
bool is_special_main_menu() const { return m_special_main_menu; }
|
||||||
|
bool is_one_shot() const { return m_one_shot; }
|
||||||
|
bool is_active() const { return m_active; }
|
||||||
|
|
||||||
|
void set_one_shot(bool oneshot) { m_one_shot = oneshot; }
|
||||||
|
void set_needs_prev_menu_item(bool needs) { m_needs_prev_menu_item = needs; }
|
||||||
|
void reset(reset_options options);
|
||||||
|
void reset_parent(reset_options options) { m_parent->reset(options); }
|
||||||
|
|
||||||
|
template <typename T> T *topmost_menu() const { return m_global_state.topmost_menu<T>(); }
|
||||||
|
template <typename T> static T *topmost_menu(mame_ui_manager &ui) { return get_global_state(ui).topmost_menu<T>(); }
|
||||||
|
void stack_pop() { m_global_state.stack_pop(); }
|
||||||
|
void stack_reset() { m_global_state.stack_reset(); }
|
||||||
|
bool stack_has_special_main_menu() const { return m_global_state.stack_has_special_main_menu(); }
|
||||||
|
|
||||||
|
menu_item &item(int index) { return m_items[index]; }
|
||||||
|
menu_item const &item(int index) const { return m_items[index]; }
|
||||||
|
int item_count() const { return m_items.size(); }
|
||||||
|
|
||||||
|
// retrieves the ref of the currently selected menu item or nullptr
|
||||||
|
void *get_selection_ref() const { return selection_valid() ? m_items[m_selected].ref() : nullptr; }
|
||||||
|
|
||||||
|
menu_item &selected_item() { return m_items[m_selected]; }
|
||||||
|
menu_item const &selected_item() const { return m_items[m_selected]; }
|
||||||
|
int selected_index() const { return m_selected; }
|
||||||
|
bool selection_valid() const { return (0 <= m_selected) && (m_items.size() > m_selected); }
|
||||||
|
bool is_selected(int index) const { return selection_valid() && (m_selected == index); }
|
||||||
|
bool is_first_selected() const { return 0 == m_selected; }
|
||||||
|
bool is_last_selected() const { return (m_items.size() - 1) == m_selected; }
|
||||||
|
|
||||||
|
// changes the index of the currently selected menu item
|
||||||
|
void set_selection(void *selected_itemref);
|
||||||
|
void set_selected_index(int index) { m_selected = index; }
|
||||||
|
void select_first_item();
|
||||||
|
void select_last_item();
|
||||||
|
|
||||||
|
int hover() const { return m_hover; }
|
||||||
|
void set_hover(int index) { m_hover = index; }
|
||||||
|
void clear_hover() { m_hover = m_items.size() + 1; }
|
||||||
|
|
||||||
|
// scroll position control
|
||||||
|
void set_top_line(int index) { top_line = (0 < index) ? (index - 1) : index; }
|
||||||
|
void centre_selection() { top_line = m_selected - (m_visible_lines / 2); }
|
||||||
|
|
||||||
|
// test if the given key is pressed and we haven't already reported a key
|
||||||
|
bool exclusive_input_pressed(int &iptkey, int key, int repeat);
|
||||||
|
|
||||||
|
// layout
|
||||||
|
float get_customtop() const { return m_customtop; }
|
||||||
|
float get_custombottom() const { return m_custombottom; }
|
||||||
|
|
||||||
|
// highlight
|
||||||
|
void highlight(float x0, float y0, float x1, float y1, rgb_t bgcolor);
|
||||||
|
render_texture *hilight_main_texture() { return m_global_state.hilight_main_texture(); }
|
||||||
|
|
||||||
|
// draw arrow
|
||||||
|
void draw_arrow(float x0, float y0, float x1, float y1, rgb_t fgcolor, uint32_t orientation);
|
||||||
|
|
||||||
|
// draw header and footer text
|
||||||
|
void extra_text_render(float top, float bottom, float origx1, float origy1, float origx2, float origy2, std::string_view header, std::string_view footer);
|
||||||
|
void extra_text_position(float origx1, float origx2, float origy, float yspan, text_layout &layout,
|
||||||
|
int direction, float &x1, float &y1, float &x2, float &y2);
|
||||||
|
|
||||||
|
// draw a box of text - used for the custom boxes above/below menus
|
||||||
|
template <typename Iter>
|
||||||
|
float draw_text_box(
|
||||||
|
Iter begin, Iter end,
|
||||||
|
float origx1, float origx2, float y1, float y2,
|
||||||
|
ui::text_layout::text_justify justify, ui::text_layout::word_wrapping wrap, bool scale,
|
||||||
|
rgb_t fgcolor, rgb_t bgcolor, float text_size)
|
||||||
|
{
|
||||||
|
// size up the text
|
||||||
|
float const lrborder(ui().box_lr_border() * machine().render().ui_aspect(&container()));
|
||||||
|
float const origwidth(origx2 - origx1 - (2.0f * lrborder));
|
||||||
|
float maxwidth(origwidth);
|
||||||
|
for (Iter it = begin; it != end; ++it)
|
||||||
|
{
|
||||||
|
std::string_view const &line(*it);
|
||||||
|
if (!line.empty())
|
||||||
|
{
|
||||||
|
auto layout = ui().create_layout(container(), 1.0f, justify, wrap);
|
||||||
|
layout.add_text(std::string_view(*it), rgb_t::white(), rgb_t::black(), text_size);
|
||||||
|
maxwidth = (std::max)(layout.actual_width(), maxwidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (scale && (origwidth < maxwidth))
|
||||||
|
{
|
||||||
|
text_size *= origwidth / maxwidth;
|
||||||
|
maxwidth = origwidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw containing box
|
||||||
|
float const boxleft(0.5f - (maxwidth * 0.5f) - lrborder);
|
||||||
|
float boxright(0.5f + (maxwidth * 0.5f) + lrborder);
|
||||||
|
ui().draw_outlined_box(container(), boxleft, y1, boxright, y2, bgcolor);
|
||||||
|
|
||||||
|
// inset box and draw content
|
||||||
|
float const textleft(0.5f - (maxwidth * 0.5f));
|
||||||
|
y1 += ui().box_tb_border();
|
||||||
|
for (Iter it = begin; it != end; ++it)
|
||||||
|
{
|
||||||
|
ui().draw_text_full(
|
||||||
|
container(), std::string_view(*it),
|
||||||
|
textleft, y1, maxwidth, justify, wrap,
|
||||||
|
mame_ui_manager::NORMAL, fgcolor, ui().colors().text_bg_color(),
|
||||||
|
nullptr, nullptr, text_size);
|
||||||
|
y1 += ui().get_line_height();
|
||||||
|
}
|
||||||
|
|
||||||
|
// in case you want another box of similar width
|
||||||
|
return maxwidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_background();
|
||||||
|
|
||||||
|
// draw additional menu content
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2);
|
||||||
|
|
||||||
|
// map mouse to menu coordinates
|
||||||
|
void map_mouse();
|
||||||
|
|
||||||
|
// clear the mouse position
|
||||||
|
void ignore_mouse();
|
||||||
|
|
||||||
|
bool is_mouse_hit() const { return m_mouse_hit; } // is mouse pointer inside menu's render container?
|
||||||
|
float get_mouse_x() const { return m_mouse_x; } // mouse x location in menu coordinates
|
||||||
|
float get_mouse_y() const { return m_mouse_y; } // mouse y location in menu coordinates
|
||||||
|
|
||||||
|
// mouse hit test - checks whether mouse_x is in [x0, x1) and mouse_y is in [y0, y1)
|
||||||
|
bool mouse_in_rect(float x0, float y0, float x1, float y1) const
|
||||||
|
{
|
||||||
|
return m_mouse_hit && (m_mouse_x >= x0) && (m_mouse_x < x1) && (m_mouse_y >= y0) && (m_mouse_y < y1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// overridable event handling
|
||||||
|
void set_process_flags(uint32_t flags) { m_process_flags = flags; }
|
||||||
|
virtual void handle_events(uint32_t flags, event &ev);
|
||||||
|
virtual void handle_keys(uint32_t flags, int &iptkey);
|
||||||
|
virtual bool custom_ui_cancel() { return false; }
|
||||||
|
virtual bool custom_mouse_down() { return false; }
|
||||||
|
virtual bool custom_mouse_scroll(int lines) { return false; }
|
||||||
|
|
||||||
|
// event notifications
|
||||||
|
virtual void menu_activated() { }
|
||||||
|
virtual void menu_deactivated() { }
|
||||||
|
virtual void menu_dismissed() { }
|
||||||
|
|
||||||
|
static bool is_selectable(menu_item const &item)
|
||||||
|
{
|
||||||
|
return (!(item.flags() & menu::FLAG_DISABLE) && (item.type() != menu_item_type::SEPARATOR));
|
||||||
|
}
|
||||||
|
|
||||||
|
// get arrows status
|
||||||
|
template <typename T>
|
||||||
|
static uint32_t get_arrow_flags(T min, T max, T actual)
|
||||||
|
{
|
||||||
|
return ((actual > min) ? FLAG_LEFT_ARROW : 0) | ((actual < max) ? FLAG_RIGHT_ARROW : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
class global_state : public widgets_manager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
global_state(mame_ui_manager &ui);
|
||||||
|
global_state(global_state const &) = delete;
|
||||||
|
global_state(global_state &&) = delete;
|
||||||
|
~global_state();
|
||||||
|
|
||||||
|
bitmap_argb32 *bgrnd_bitmap() { return m_bgrnd_bitmap.get(); }
|
||||||
|
render_texture *bgrnd_texture() { return m_bgrnd_texture.get(); }
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T *topmost_menu() const { return dynamic_cast<T *>(m_stack.get()); }
|
||||||
|
|
||||||
|
void stack_push(std::unique_ptr<menu> &&menu);
|
||||||
|
void stack_pop();
|
||||||
|
void stack_reset();
|
||||||
|
void clear_free_list();
|
||||||
|
bool stack_has_special_main_menu() const;
|
||||||
|
|
||||||
|
void hide_menu() { m_hide = true; }
|
||||||
|
|
||||||
|
uint32_t ui_handler(render_container &container);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
mame_ui_manager &m_ui;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bitmap_ptr m_bgrnd_bitmap;
|
||||||
|
texture_ptr m_bgrnd_texture;
|
||||||
|
|
||||||
|
std::unique_ptr<menu> m_stack;
|
||||||
|
std::unique_ptr<menu> m_free;
|
||||||
|
|
||||||
|
bool m_hide;
|
||||||
|
};
|
||||||
|
|
||||||
|
// this is to satisfy the std::any requirement that objects be copyable
|
||||||
|
class global_state_wrapper : public global_state
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
global_state_wrapper(mame_ui_manager &ui) : global_state(ui) { }
|
||||||
|
global_state_wrapper(global_state_wrapper const &that) : global_state(that.m_ui) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
// process a menu, drawing it and returning any interesting events
|
||||||
|
const event *process();
|
||||||
|
virtual void draw(uint32_t flags);
|
||||||
|
|
||||||
|
// request the specific handling of the game selection main menu
|
||||||
|
void set_special_main_menu(bool disable);
|
||||||
|
|
||||||
|
// to be implemented in derived classes
|
||||||
|
virtual void populate(float &customtop, float &custombottom) = 0;
|
||||||
|
|
||||||
|
// to be implemented in derived classes
|
||||||
|
virtual void handle(event const *ev) = 0;
|
||||||
|
|
||||||
|
// push a new menu onto the stack
|
||||||
|
static void stack_push(std::unique_ptr<menu> &&menu) { menu->m_global_state.stack_push(std::move(menu)); }
|
||||||
|
|
||||||
|
void extra_text_draw_box(float origx1, float origx2, float origy, float yspan, std::string_view text, int direction);
|
||||||
|
|
||||||
|
bool first_item_visible() const { return top_line <= 0; }
|
||||||
|
bool last_item_visible() const { return (top_line + m_visible_lines) >= m_items.size(); }
|
||||||
|
|
||||||
|
static global_state &get_global_state(mame_ui_manager &ui);
|
||||||
|
|
||||||
|
protected: // TODO: remove need to expose these - only used here and in selmenu.cpp
|
||||||
|
int top_line; // main box top line
|
||||||
|
int m_visible_lines; // main box visible lines
|
||||||
|
int m_visible_items; // number of visible items
|
||||||
|
|
||||||
|
private:
|
||||||
|
global_state &m_global_state; // reference to global state for session
|
||||||
|
mame_ui_manager &m_ui; // UI we are attached to
|
||||||
|
render_container &m_container; // render_container we render to
|
||||||
|
std::unique_ptr<menu> m_parent; // pointer to parent menu in the stack
|
||||||
|
|
||||||
|
std::vector<menu_item> m_items; // array of items
|
||||||
|
|
||||||
|
uint32_t m_process_flags; // event processing options
|
||||||
|
int m_selected; // which item is selected
|
||||||
|
int m_hover; // which item is being hovered over
|
||||||
|
bool m_special_main_menu; // true if no real emulation running under the menu
|
||||||
|
bool m_one_shot; // true for menus outside the normal stack
|
||||||
|
bool m_needs_prev_menu_item; // true to automatically create item to dismiss menu
|
||||||
|
bool m_active; // whether the menu is currently visible and topmost
|
||||||
|
|
||||||
|
event m_event; // the UI event that occurred
|
||||||
|
|
||||||
|
float m_customtop; // amount of extra height to add at the top
|
||||||
|
float m_custombottom; // amount of extra height to add at the bottom
|
||||||
|
|
||||||
|
int m_resetpos; // item index to select after repopulating
|
||||||
|
void *m_resetref; // item reference value to select after repopulating
|
||||||
|
|
||||||
|
bool m_mouse_hit;
|
||||||
|
bool m_mouse_button;
|
||||||
|
float m_mouse_x;
|
||||||
|
float m_mouse_y;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename Base = menu>
|
||||||
|
class autopause_menu : public Base
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
using Base::Base;
|
||||||
|
|
||||||
|
virtual void menu_activated() override
|
||||||
|
{
|
||||||
|
m_was_paused = this->machine().paused();
|
||||||
|
if (m_was_paused)
|
||||||
|
m_unpaused = false;
|
||||||
|
else if (!m_unpaused)
|
||||||
|
this->machine().pause();
|
||||||
|
Base::menu_activated();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void menu_deactivated() override
|
||||||
|
{
|
||||||
|
m_unpaused = !this->machine().paused();
|
||||||
|
if (!m_was_paused && !m_unpaused)
|
||||||
|
this->machine().resume();
|
||||||
|
Base::menu_deactivated();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_was_paused = false;
|
||||||
|
bool m_unpaused = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_MENU_H
|
69
src/icludes/frontend/mame/ui/menuitem.h
Normal file
69
src/icludes/frontend/mame/ui/menuitem.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/menuitem.h
|
||||||
|
|
||||||
|
Internal data representation for a UI menu item.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_MENUITEM_H
|
||||||
|
#define MAME_FRONTEND_UI_MENUITEM_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// special menu item for separators
|
||||||
|
#define MENU_SEPARATOR_ITEM "---"
|
||||||
|
|
||||||
|
// types of menu items (TODO: please expand)
|
||||||
|
enum class menu_item_type
|
||||||
|
{
|
||||||
|
UNKNOWN,
|
||||||
|
SLIDER,
|
||||||
|
SEPARATOR
|
||||||
|
};
|
||||||
|
|
||||||
|
class menu_item
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_item(menu_item const &) = default;
|
||||||
|
menu_item(menu_item &&) = default;
|
||||||
|
menu_item &operator=(menu_item const &) = default;
|
||||||
|
menu_item &operator=(menu_item &&) = default;
|
||||||
|
|
||||||
|
menu_item(menu_item_type t = menu_item_type::UNKNOWN, void *r = nullptr, uint32_t f = 0) : m_ref(r), m_flags(f), m_type(t)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
std::string const &text() const noexcept { return m_text; }
|
||||||
|
std::string const &subtext() const noexcept { return m_subtext; }
|
||||||
|
void *ref() const noexcept { return m_ref; }
|
||||||
|
uint32_t flags() const noexcept { return m_flags; }
|
||||||
|
unsigned generation() const noexcept { return m_generation; }
|
||||||
|
menu_item_type type() const noexcept { return m_type; }
|
||||||
|
|
||||||
|
template <typename... T> void set_text(T &&... args) { m_text.assign(std::forward<T>(args)...); ++m_generation; }
|
||||||
|
template <typename... T> void set_subtext(T &&... args) { m_subtext.assign(std::forward<T>(args)...); ++m_generation; }
|
||||||
|
void set_flags(uint32_t f) noexcept { m_flags = f; ++m_generation; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string m_text;
|
||||||
|
std::string m_subtext;
|
||||||
|
void *m_ref;
|
||||||
|
uint32_t m_flags;
|
||||||
|
unsigned m_generation = 0;
|
||||||
|
menu_item_type m_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_MENUITEM_H
|
953
src/icludes/frontend/mame/ui/miscmenu.cpp
Normal file
953
src/icludes/frontend/mame/ui/miscmenu.cpp
Normal file
@ -0,0 +1,953 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Maurizio Petrarota
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/miscmenu.cpp
|
||||||
|
|
||||||
|
Internal MAME menus for the user interface.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/miscmenu.h"
|
||||||
|
|
||||||
|
#include "ui/inifile.h"
|
||||||
|
#include "ui/selector.h"
|
||||||
|
#include "ui/submenu.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
#include "infoxml.h"
|
||||||
|
#include "mame.h"
|
||||||
|
|
||||||
|
#include "osdnet.h"
|
||||||
|
#include "mameopts.h"
|
||||||
|
#include "pluginopts.h"
|
||||||
|
#include "drivenum.h"
|
||||||
|
#include "romload.h"
|
||||||
|
#include "uiinput.h"
|
||||||
|
|
||||||
|
#include "corestr.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstring>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
MENU HANDLERS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_bios_selection - populates the main
|
||||||
|
bios selection menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_bios_selection::menu_bios_selection(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_bios_selection::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// cycle through all devices for this system
|
||||||
|
for (device_t &device : device_enumerator(machine().root_device()))
|
||||||
|
{
|
||||||
|
device_t const *const parent(device.owner());
|
||||||
|
device_slot_interface const *const slot(dynamic_cast<device_slot_interface const *>(parent));
|
||||||
|
if (!parent || (slot && (slot->get_card_device() == &device)))
|
||||||
|
{
|
||||||
|
tiny_rom_entry const *rom(device.rom_region());
|
||||||
|
if (rom && !ROMENTRY_ISEND(rom))
|
||||||
|
{
|
||||||
|
char const *val = nullptr;
|
||||||
|
for ( ; !ROMENTRY_ISEND(rom) && !val; rom++)
|
||||||
|
{
|
||||||
|
if (ROMENTRY_ISSYSTEM_BIOS(rom) && ROM_GETBIOSFLAGS(rom) == device.system_bios())
|
||||||
|
val = rom->hashdata;
|
||||||
|
}
|
||||||
|
if (val)
|
||||||
|
item_append(!parent ? "driver" : (device.tag() + 1), val, FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(_("Reset"), 0, (void *)1);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_bios_selection::~menu_bios_selection()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_bios_selection - menu that
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_bios_selection::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
if ((uintptr_t)ev->itemref == 1 && ev->iptkey == IPT_UI_SELECT)
|
||||||
|
machine().schedule_hard_reset();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
device_t *dev = (device_t *)ev->itemref;
|
||||||
|
int bios_val = 0;
|
||||||
|
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
// reset to default
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
bios_val = dev->default_bios();
|
||||||
|
break;
|
||||||
|
|
||||||
|
// previous/next bios setting
|
||||||
|
case IPT_UI_LEFT: case IPT_UI_RIGHT:
|
||||||
|
{
|
||||||
|
int const cnt = ([bioses = romload::entries(dev->rom_region()).get_system_bioses()] () { return std::distance(bioses.begin(), bioses.end()); })();
|
||||||
|
bios_val = dev->system_bios() + ((ev->iptkey == IPT_UI_LEFT) ? -1 : +1);
|
||||||
|
|
||||||
|
// wrap
|
||||||
|
if (bios_val < 1)
|
||||||
|
bios_val = cnt;
|
||||||
|
if (bios_val > cnt)
|
||||||
|
bios_val = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bios_val > 0)
|
||||||
|
{
|
||||||
|
dev->set_system_bios(bios_val);
|
||||||
|
if (strcmp(dev->tag(),":")==0) {
|
||||||
|
machine().options().set_value("bios", bios_val-1, OPTION_PRIORITY_CMDLINE);
|
||||||
|
} else {
|
||||||
|
const char *slot_option_name = dev->owner()->tag() + 1;
|
||||||
|
machine().options().slot_option(slot_option_name).set_bios(string_format("%d", bios_val - 1));
|
||||||
|
}
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
menu_network_devices::menu_network_devices(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_network_devices::~menu_network_devices()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_network_devices_populate - populates the main
|
||||||
|
network device menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_network_devices::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
/* cycle through all devices for this system */
|
||||||
|
for (device_network_interface &network : network_interface_enumerator(machine().root_device()))
|
||||||
|
{
|
||||||
|
int curr = network.get_interface();
|
||||||
|
const char *title = nullptr;
|
||||||
|
for(auto &entry : get_netdev_list())
|
||||||
|
{
|
||||||
|
if(entry->id==curr) {
|
||||||
|
title = entry->description;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(network.device().tag(), (title) ? title : "------", FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&network);
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_network_devices - menu that
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_network_devices::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
if (ev->iptkey == IPT_UI_LEFT || ev->iptkey == IPT_UI_RIGHT)
|
||||||
|
{
|
||||||
|
device_network_interface *network = (device_network_interface *)ev->itemref;
|
||||||
|
int curr = network->get_interface();
|
||||||
|
if (ev->iptkey == IPT_UI_LEFT)
|
||||||
|
curr--;
|
||||||
|
else
|
||||||
|
curr++;
|
||||||
|
if (curr == -2)
|
||||||
|
curr = netdev_count() - 1;
|
||||||
|
network->set_interface(curr);
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_bookkeeping - handle the bookkeeping
|
||||||
|
information menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_bookkeeping::menu_bookkeeping(mame_ui_manager &mui, render_container &container) : menu_textbox(mui, container)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_CUSTOM_NAV);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_bookkeeping::~menu_bookkeeping()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_bookkeeping::menu_activated()
|
||||||
|
{
|
||||||
|
// stuff can change while the menu is hidden
|
||||||
|
reset_layout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_bookkeeping::populate_text(std::optional<text_layout> &layout, float &width, int &lines)
|
||||||
|
{
|
||||||
|
if (!layout || (layout->width() != width))
|
||||||
|
{
|
||||||
|
rgb_t const color = ui().colors().text_color();
|
||||||
|
layout.emplace(ui().create_layout(container(), width));
|
||||||
|
|
||||||
|
// show total time first
|
||||||
|
prevtime = machine().time();
|
||||||
|
if (prevtime.seconds() >= (60 * 60))
|
||||||
|
layout->add_text(util::string_format(_("Uptime: %1$d:%2$02d:%3$02d\n\n"), prevtime.seconds() / (60 * 60), (prevtime.seconds() / 60) % 60, prevtime.seconds() % 60), color);
|
||||||
|
else
|
||||||
|
layout->add_text(util::string_format(_("Uptime: %1$d:%2$02d\n\n"), (prevtime.seconds() / 60) % 60, prevtime.seconds() % 60), color);
|
||||||
|
|
||||||
|
// show tickets at the top
|
||||||
|
int const tickets = machine().bookkeeping().get_dispensed_tickets();
|
||||||
|
if (tickets > 0)
|
||||||
|
layout->add_text(util::string_format(_("Tickets dispensed: %1$d\n\n"), tickets), color);
|
||||||
|
|
||||||
|
// loop over coin counters
|
||||||
|
for (int ctrnum = 0; ctrnum < bookkeeping_manager::COIN_COUNTERS; ctrnum++)
|
||||||
|
{
|
||||||
|
int const count = machine().bookkeeping().coin_counter_get_count(ctrnum);
|
||||||
|
bool const locked = machine().bookkeeping().coin_lockout_get_state(ctrnum);
|
||||||
|
|
||||||
|
// display the coin counter number
|
||||||
|
// display how many coins
|
||||||
|
// display whether or not we are locked out
|
||||||
|
layout->add_text(
|
||||||
|
util::string_format(
|
||||||
|
(count == 0) ? _("Coin %1$c: NA%3$s\n") : _("Coin %1$c: %2$d%3$s\n"),
|
||||||
|
ctrnum + 'A',
|
||||||
|
count,
|
||||||
|
locked ? _(" (locked)") : ""),
|
||||||
|
color);
|
||||||
|
}
|
||||||
|
|
||||||
|
lines = layout->lines();
|
||||||
|
}
|
||||||
|
width = layout->actual_width();
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_bookkeeping::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_bookkeeping::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// if the time has rolled over another second, regenerate
|
||||||
|
// TODO: what about other bookkeeping events happening with the menu open?
|
||||||
|
attotime const curtime = machine().time();
|
||||||
|
if (curtime.seconds() != prevtime.seconds())
|
||||||
|
reset_layout();
|
||||||
|
|
||||||
|
if (ev)
|
||||||
|
handle_key(ev->iptkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_crosshair - handle the crosshair settings
|
||||||
|
menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void menu_crosshair::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// handle events
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
crosshair_item_data &data(*reinterpret_cast<crosshair_item_data *>(ev->itemref));
|
||||||
|
bool changed(false);
|
||||||
|
int newval(data.cur);
|
||||||
|
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
// if selected, reset to default value
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
newval = data.defvalue;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// left decrements
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
newval -= machine().input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// right increments
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
newval += machine().input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// clamp to range
|
||||||
|
if (newval < data.min)
|
||||||
|
newval = data.min;
|
||||||
|
if (newval > data.max)
|
||||||
|
newval = data.max;
|
||||||
|
|
||||||
|
// if things changed, update
|
||||||
|
if (newval != data.cur)
|
||||||
|
{
|
||||||
|
switch (data.type)
|
||||||
|
{
|
||||||
|
// visibility state
|
||||||
|
case CROSSHAIR_ITEM_VIS:
|
||||||
|
data.crosshair->set_mode(newval);
|
||||||
|
// set visibility as specified by mode - auto mode starts with visibility off
|
||||||
|
data.crosshair->set_visible(newval == CROSSHAIR_VISIBILITY_ON);
|
||||||
|
changed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// auto time
|
||||||
|
case CROSSHAIR_ITEM_AUTO_TIME:
|
||||||
|
machine().crosshair().set_auto_time(newval);
|
||||||
|
changed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// crosshair graphic name
|
||||||
|
if (data.type == CROSSHAIR_ITEM_PIC)
|
||||||
|
{
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
{
|
||||||
|
std::vector<std::string> sel;
|
||||||
|
sel.reserve(m_pics.size() + 1);
|
||||||
|
sel.push_back("DEFAULT");
|
||||||
|
std::copy(m_pics.begin(), m_pics.end(), std::back_inserter(sel));
|
||||||
|
menu::stack_push<menu_selector>(
|
||||||
|
ui(), container(), std::move(sel), data.cur,
|
||||||
|
[this, &data] (int selection)
|
||||||
|
{
|
||||||
|
if (!selection)
|
||||||
|
data.crosshair->set_default_bitmap();
|
||||||
|
else
|
||||||
|
data.crosshair->set_bitmap_name(m_pics[selection - 1].c_str());
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
data.crosshair->set_bitmap_name(data.last_name.c_str());
|
||||||
|
changed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
data.crosshair->set_bitmap_name(data.next_name.c_str());
|
||||||
|
changed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
reset(reset_options::REMEMBER_REF); // rebuild the menu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
menu_crosshair_populate - populate the
|
||||||
|
crosshair settings menu
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
menu_crosshair::menu_crosshair(mame_ui_manager &mui, render_container &container) : menu(mui, container)
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_crosshair::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
if (m_data.empty())
|
||||||
|
{
|
||||||
|
// loop over player and add the manual items
|
||||||
|
for (int player = 0; player < MAX_PLAYERS; player++)
|
||||||
|
{
|
||||||
|
// get the user settings
|
||||||
|
render_crosshair &crosshair(machine().crosshair().get_crosshair(player));
|
||||||
|
|
||||||
|
// add menu items for usable crosshairs
|
||||||
|
if (crosshair.is_used())
|
||||||
|
{
|
||||||
|
// CROSSHAIR_ITEM_VIS - allocate a data item and fill it
|
||||||
|
crosshair_item_data &visdata(m_data.emplace_back());
|
||||||
|
visdata.crosshair = &crosshair;
|
||||||
|
visdata.type = CROSSHAIR_ITEM_VIS;
|
||||||
|
visdata.player = player;
|
||||||
|
visdata.min = CROSSHAIR_VISIBILITY_OFF;
|
||||||
|
visdata.max = CROSSHAIR_VISIBILITY_AUTO;
|
||||||
|
visdata.defvalue = CROSSHAIR_VISIBILITY_DEFAULT;
|
||||||
|
|
||||||
|
// CROSSHAIR_ITEM_PIC - allocate a data item and fill it
|
||||||
|
crosshair_item_data &picdata(m_data.emplace_back());
|
||||||
|
picdata.crosshair = &crosshair;
|
||||||
|
picdata.type = CROSSHAIR_ITEM_PIC;
|
||||||
|
picdata.player = player;
|
||||||
|
// other data item not used by this menu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CROSSHAIR_ITEM_AUTO_TIME - allocate a data item and fill it
|
||||||
|
crosshair_item_data &timedata(m_data.emplace_back());
|
||||||
|
timedata.type = CROSSHAIR_ITEM_AUTO_TIME;
|
||||||
|
timedata.min = CROSSHAIR_VISIBILITY_AUTOTIME_MIN;
|
||||||
|
timedata.max = CROSSHAIR_VISIBILITY_AUTOTIME_MAX;
|
||||||
|
timedata.defvalue = CROSSHAIR_VISIBILITY_AUTOTIME_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pics.empty())
|
||||||
|
{
|
||||||
|
// open a path to the crosshairs
|
||||||
|
file_enumerator path(machine().options().crosshair_path());
|
||||||
|
for (osd::directory::entry const *dir = path.next(); dir; dir = path.next())
|
||||||
|
{
|
||||||
|
// look for files ending in .png
|
||||||
|
size_t const length(std::strlen(dir->name));
|
||||||
|
if ((length > 4) && core_filename_ends_with(dir->name, ".png"))
|
||||||
|
m_pics.emplace_back(dir->name, length - 4);
|
||||||
|
}
|
||||||
|
std::stable_sort(
|
||||||
|
m_pics.begin(),
|
||||||
|
m_pics.end(),
|
||||||
|
[] (std::string const &a, std::string const &b) { return 0 > core_stricmp(a.c_str(), b.c_str()); });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure to keep these matched to the CROSSHAIR_VISIBILITY_xxx types
|
||||||
|
static char const *const vis_text[] = { "Off", "On", "Auto" };
|
||||||
|
|
||||||
|
bool use_auto = false;
|
||||||
|
for (crosshair_item_data &data : m_data)
|
||||||
|
{
|
||||||
|
switch (data.type)
|
||||||
|
{
|
||||||
|
case CROSSHAIR_ITEM_VIS:
|
||||||
|
{
|
||||||
|
// track if we need the auto time menu
|
||||||
|
if (data.crosshair->mode() == CROSSHAIR_VISIBILITY_AUTO)
|
||||||
|
use_auto = true;
|
||||||
|
|
||||||
|
data.cur = data.crosshair->mode();
|
||||||
|
|
||||||
|
// put on arrows
|
||||||
|
uint32_t flags(0U);
|
||||||
|
if (data.cur > data.min)
|
||||||
|
flags |= FLAG_LEFT_ARROW;
|
||||||
|
if (data.cur < data.max)
|
||||||
|
flags |= FLAG_RIGHT_ARROW;
|
||||||
|
|
||||||
|
// add CROSSHAIR_ITEM_VIS menu */
|
||||||
|
item_append(util::string_format(_("P%d Visibility"), data.player + 1), vis_text[data.crosshair->mode()], flags, &data);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CROSSHAIR_ITEM_PIC:
|
||||||
|
// search for crosshair graphics
|
||||||
|
{
|
||||||
|
// reset search flags
|
||||||
|
bool const using_default(*data.crosshair->bitmap_name() == '\0');
|
||||||
|
bool finished(false);
|
||||||
|
bool found(false);
|
||||||
|
data.cur = using_default ? 0U : 1U;
|
||||||
|
data.last_name.clear();
|
||||||
|
data.next_name.clear();
|
||||||
|
|
||||||
|
// look for the current name, then remember the name before and find the next name
|
||||||
|
for (auto it = m_pics.begin(); it != m_pics.end() && !finished; ++it)
|
||||||
|
{
|
||||||
|
// if we are using the default, then we just need to find the first in the list
|
||||||
|
if (found || using_default)
|
||||||
|
{
|
||||||
|
// get the next name
|
||||||
|
data.next_name = *it;
|
||||||
|
finished = true;
|
||||||
|
}
|
||||||
|
else if (data.crosshair->bitmap_name() == *it)
|
||||||
|
{
|
||||||
|
// we found the current name so loop once more to find the next name
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// remember last name - we will do it here in case files get added to the directory
|
||||||
|
++data.cur;
|
||||||
|
data.last_name = *it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if name not found then next item is DEFAULT
|
||||||
|
if (!found && !using_default)
|
||||||
|
{
|
||||||
|
data.cur = 0U;
|
||||||
|
data.next_name.clear();
|
||||||
|
finished = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set up the selection flags
|
||||||
|
uint32_t flags(0U);
|
||||||
|
if (finished)
|
||||||
|
flags |= FLAG_RIGHT_ARROW;
|
||||||
|
if (found)
|
||||||
|
flags |= FLAG_LEFT_ARROW;
|
||||||
|
|
||||||
|
// add CROSSHAIR_ITEM_PIC menu
|
||||||
|
item_append(util::string_format(_("P%d Crosshair"), data.player + 1), using_default ? "DEFAULT" : data.crosshair->bitmap_name(), flags, &data);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CROSSHAIR_ITEM_AUTO_TIME:
|
||||||
|
if (use_auto)
|
||||||
|
{
|
||||||
|
data.cur = machine().crosshair().auto_time();
|
||||||
|
|
||||||
|
// put on arrows in visible menu
|
||||||
|
uint32_t flags(0U);
|
||||||
|
if (data.cur > data.min)
|
||||||
|
flags |= FLAG_LEFT_ARROW;
|
||||||
|
if (data.cur < data.max)
|
||||||
|
flags |= FLAG_RIGHT_ARROW;
|
||||||
|
|
||||||
|
// add CROSSHAIR_ITEM_AUTO_TIME menu
|
||||||
|
item_append(_("Visible Delay"), util::string_format("%d", data.cur), flags, &data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// leave a blank filler line when not in auto time so size does not rescale
|
||||||
|
//item_append("", "", nullptr, nullptr);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_crosshair::~menu_crosshair()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_export::menu_export(mame_ui_manager &mui, render_container &container, std::vector<const game_driver *> &&drvlist)
|
||||||
|
: menu(mui, container), m_list(std::move(drvlist))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_export::~menu_export()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle the export menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_export::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
switch (uintptr_t(ev->itemref))
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
case 3:
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
std::string filename("exported");
|
||||||
|
emu_file infile(ui().options().ui_path(), OPEN_FLAG_READ);
|
||||||
|
if (!infile.open(filename + ".xml"))
|
||||||
|
for (int seq = 0; ; ++seq)
|
||||||
|
{
|
||||||
|
const std::string seqtext = string_format("%s_%04d", filename, seq);
|
||||||
|
if (infile.open(seqtext + ".xml"))
|
||||||
|
{
|
||||||
|
filename = seqtext;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// attempt to open the output file
|
||||||
|
emu_file file(ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||||
|
if (!file.open(filename + ".xml"))
|
||||||
|
{
|
||||||
|
const std::string fullpath(file.fullpath());
|
||||||
|
file.close();
|
||||||
|
std::ofstream pfile(fullpath);
|
||||||
|
|
||||||
|
// prepare a filter for the drivers we want to show
|
||||||
|
std::unordered_set<const game_driver *> driver_list(m_list.begin(), m_list.end());
|
||||||
|
auto filter = [&driver_list](const char *shortname, bool &)
|
||||||
|
{
|
||||||
|
auto iter = std::find_if(
|
||||||
|
driver_list.begin(),
|
||||||
|
driver_list.end(),
|
||||||
|
[shortname](const game_driver *driver) { return !strcmp(shortname, driver->name); });
|
||||||
|
return iter != driver_list.end();
|
||||||
|
};
|
||||||
|
|
||||||
|
// do we want to show devices?
|
||||||
|
bool include_devices = uintptr_t(ev->itemref) == 1;
|
||||||
|
|
||||||
|
// and do the dirty work
|
||||||
|
info_xml_creator creator(machine().options());
|
||||||
|
creator.output(pfile, filter, include_devices);
|
||||||
|
machine().popmessage(_("%s.xml saved in UI settings folder."), filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
std::string filename("exported");
|
||||||
|
emu_file infile(ui().options().ui_path(), OPEN_FLAG_READ);
|
||||||
|
if (!infile.open(filename + ".txt"))
|
||||||
|
for (int seq = 0; ; ++seq)
|
||||||
|
{
|
||||||
|
const std::string seqtext = string_format("%s_%04d", filename, seq);
|
||||||
|
if (infile.open(seqtext + ".txt"))
|
||||||
|
{
|
||||||
|
filename = seqtext;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// attempt to open the output file
|
||||||
|
emu_file file(ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||||
|
if (!file.open(filename + ".txt"))
|
||||||
|
{
|
||||||
|
// print the header
|
||||||
|
std::ostringstream buffer;
|
||||||
|
buffer << _("Name: Description:\n");
|
||||||
|
driver_enumerator drvlist(machine().options());
|
||||||
|
drvlist.exclude_all();
|
||||||
|
for (auto & elem : m_list)
|
||||||
|
drvlist.include(driver_list::find(*elem));
|
||||||
|
|
||||||
|
// iterate through drivers and output the info
|
||||||
|
while (drvlist.next())
|
||||||
|
util::stream_format(buffer, "%-18s\"%s\"\n", drvlist.driver().name, drvlist.driver().type.fullname());
|
||||||
|
file.puts(buffer.str());
|
||||||
|
file.close();
|
||||||
|
machine().popmessage(_("%s.txt saved in UI settings folder."), filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_export::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// add options items
|
||||||
|
item_append(_("Export list in XML format (like -listxml)"), 0, (void *)(uintptr_t)1);
|
||||||
|
item_append(_("Export list in XML format (like -listxml, but exclude devices)"), 0, (void *)(uintptr_t)3);
|
||||||
|
item_append(_("Export list in TXT format (like -listfull)"), 0, (void *)(uintptr_t)2);
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_machine_configure::menu_machine_configure(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
ui_system_info const &info,
|
||||||
|
std::function<void (bool, bool)> &&handler)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_handler(std::move(handler))
|
||||||
|
, m_sys(info)
|
||||||
|
, m_curbios(0)
|
||||||
|
, m_was_favorite(mame_machine_manager::instance()->favorite().is_favorite_system(*info.driver))
|
||||||
|
, m_want_favorite(m_was_favorite)
|
||||||
|
{
|
||||||
|
// parse the INI file
|
||||||
|
std::ostringstream error;
|
||||||
|
osd_setup_osd_specific_emu_options(m_opts);
|
||||||
|
mame_options::parse_standard_inis(m_opts, error, m_sys.driver);
|
||||||
|
setup_bios();
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_machine_configure::~menu_machine_configure()
|
||||||
|
{
|
||||||
|
if (m_was_favorite != m_want_favorite)
|
||||||
|
{
|
||||||
|
if (m_want_favorite)
|
||||||
|
mame_machine_manager::instance()->favorite().add_favorite_system(*m_sys.driver);
|
||||||
|
else
|
||||||
|
mame_machine_manager::instance()->favorite().remove_favorite_system(*m_sys.driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_handler)
|
||||||
|
m_handler(m_want_favorite, m_was_favorite != m_want_favorite);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle the machine options menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_machine_configure::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
switch ((uintptr_t)ev->itemref)
|
||||||
|
{
|
||||||
|
case SAVE:
|
||||||
|
{
|
||||||
|
const std::string filename(m_sys.driver->name);
|
||||||
|
emu_file file(machine().options().ini_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE);
|
||||||
|
std::error_condition const filerr = file.open(filename + ".ini");
|
||||||
|
if (!filerr)
|
||||||
|
{
|
||||||
|
std::string inistring = m_opts.output_ini();
|
||||||
|
file.puts(inistring);
|
||||||
|
ui().popup_time(2, "%s", _("\n Configuration saved \n\n"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ADDFAV:
|
||||||
|
m_want_favorite = true;
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
break;
|
||||||
|
case DELFAV:
|
||||||
|
m_want_favorite = false;
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
break;
|
||||||
|
case CONTROLLER:
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<submenu>(ui(), container(), submenu::control_options(), m_sys.driver, &m_opts);
|
||||||
|
break;
|
||||||
|
case VIDEO:
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<submenu>(ui(), container(), submenu::video_options(), m_sys.driver, &m_opts);
|
||||||
|
break;
|
||||||
|
case ADVANCED:
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<submenu>(ui(), container(), submenu::advanced_options(), m_sys.driver, &m_opts);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ev->iptkey == IPT_UI_LEFT || ev->iptkey == IPT_UI_RIGHT)
|
||||||
|
{
|
||||||
|
(ev->iptkey == IPT_UI_LEFT) ? --m_curbios : ++m_curbios;
|
||||||
|
m_opts.set_value(OPTION_BIOS, m_bios[m_curbios].second, OPTION_PRIORITY_CMDLINE);
|
||||||
|
reset(reset_options::REMEMBER_POSITION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_machine_configure::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// add options items
|
||||||
|
item_append(_("BIOS"), FLAG_DISABLE | FLAG_UI_HEADING, nullptr);
|
||||||
|
if (!m_bios.empty())
|
||||||
|
{
|
||||||
|
uint32_t arrows = get_arrow_flags(std::size_t(0), m_bios.size() - 1, m_curbios);
|
||||||
|
item_append(_("Driver"), m_bios[m_curbios].first, arrows, (void *)(uintptr_t)BIOS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
item_append(_("This machine has no BIOS."), FLAG_DISABLE, nullptr);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(_(submenu::advanced_options()[0].description), 0, (void *)(uintptr_t)ADVANCED);
|
||||||
|
item_append(_(submenu::video_options()[0].description), 0, (void *)(uintptr_t)VIDEO);
|
||||||
|
item_append(_(submenu::control_options()[0].description), 0, (void *)(uintptr_t)CONTROLLER);
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
if (!m_want_favorite)
|
||||||
|
item_append(_("Add To Favorites"), 0, (void *)ADDFAV);
|
||||||
|
else
|
||||||
|
item_append(_("Remove From Favorites"), 0, (void *)DELFAV);
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(_("Save Machine Configuration"), 0, (void *)(uintptr_t)SAVE);
|
||||||
|
|
||||||
|
customtop = 2.0f * ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_machine_configure::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
char const *const text[] = { _("Configure Machine:"), m_sys.description.c_str() };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(text), std::end(text),
|
||||||
|
origx1, origx2, origy1 - top, origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_machine_configure::setup_bios()
|
||||||
|
{
|
||||||
|
if (!m_sys.driver->rom)
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::string specbios(m_opts.bios());
|
||||||
|
char const *default_name(nullptr);
|
||||||
|
for (tiny_rom_entry const *rom = m_sys.driver->rom; !ROMENTRY_ISEND(rom); ++rom)
|
||||||
|
{
|
||||||
|
if (ROMENTRY_ISDEFAULT_BIOS(rom))
|
||||||
|
default_name = rom->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t bios_count = 0;
|
||||||
|
for (romload::system_bios const &bios : romload::entries(m_sys.driver->rom).get_system_bioses())
|
||||||
|
{
|
||||||
|
std::string name(bios.get_description());
|
||||||
|
u32 const bios_flags(bios.get_value());
|
||||||
|
std::string const bios_number(std::to_string(bios_flags - 1));
|
||||||
|
|
||||||
|
// check biosnumber and name
|
||||||
|
if ((bios_number == specbios) || (specbios == bios.get_name()))
|
||||||
|
m_curbios = bios_count;
|
||||||
|
|
||||||
|
if (default_name && !std::strcmp(bios.get_name(), default_name))
|
||||||
|
{
|
||||||
|
name.append(_(" (default)"));
|
||||||
|
if (specbios == "default")
|
||||||
|
m_curbios = bios_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_bios.emplace_back(std::move(name), bios_flags - 1);
|
||||||
|
bios_count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor / dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_plugins_configure::menu_plugins_configure(mame_ui_manager &mui, render_container &container)
|
||||||
|
: menu(mui, container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_plugins_configure::~menu_plugins_configure()
|
||||||
|
{
|
||||||
|
emu_file file_plugin(machine().options().ini_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||||
|
if (file_plugin.open("plugin.ini"))
|
||||||
|
// Can't throw in a destructor, so let's ignore silently for
|
||||||
|
// now. We shouldn't write files in a destructor in any case.
|
||||||
|
//
|
||||||
|
// throw emu_fatalerror("Unable to create file plugin.ini\n");
|
||||||
|
return;
|
||||||
|
// generate the updated INI
|
||||||
|
file_plugin.puts(mame_machine_manager::instance()->plugins().output_ini());
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle the plugins menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_plugins_configure::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
bool changed = false;
|
||||||
|
plugin_options &plugins = mame_machine_manager::instance()->plugins();
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
if (ev->iptkey == IPT_UI_LEFT || ev->iptkey == IPT_UI_RIGHT || ev->iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
plugin_options::plugin *p = plugins.find((const char*)ev->itemref);
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
p->m_start = !p->m_start;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (changed)
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_plugins_configure::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
plugin_options const &plugins = mame_machine_manager::instance()->plugins();
|
||||||
|
|
||||||
|
bool first(true);
|
||||||
|
for (auto const &curentry : plugins.plugins())
|
||||||
|
{
|
||||||
|
if ("library" != curentry.m_type)
|
||||||
|
{
|
||||||
|
first = false;
|
||||||
|
bool const enabled = curentry.m_start;
|
||||||
|
item_append_on_off(curentry.m_description, enabled, 0, (void *)(uintptr_t)curentry.m_name.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (first)
|
||||||
|
item_append(_("No plugins found"), 0, nullptr);
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
customtop = ui().get_line_height() + (3.0f * ui().box_tb_border());
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_plugins_configure::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
char const *const toptext[] = { _("Plugins") };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(toptext), std::end(toptext),
|
||||||
|
origx1, origx2, origy1 - top, origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
188
src/icludes/frontend/mame/ui/miscmenu.h
Normal file
188
src/icludes/frontend/mame/ui/miscmenu.h
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Maurizio Petrarota
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/miscmenu.h
|
||||||
|
|
||||||
|
Internal MAME menus for the user interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_MISCMENU_H
|
||||||
|
#define MAME_FRONTEND_UI_MISCMENU_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/textbox.h"
|
||||||
|
|
||||||
|
#include "crsshair.h"
|
||||||
|
#include "emuopts.h"
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
struct ui_system_info;
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_network_devices : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_network_devices(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_network_devices();
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class menu_bookkeeping : public menu_textbox
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_bookkeeping(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_bookkeeping();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void menu_activated() override;
|
||||||
|
virtual void populate_text(std::optional<text_layout> &layout, float &width, int &lines) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
attotime prevtime;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_crosshair : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_crosshair(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_crosshair();
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum {
|
||||||
|
CROSSHAIR_ITEM_VIS = 0,
|
||||||
|
CROSSHAIR_ITEM_PIC,
|
||||||
|
CROSSHAIR_ITEM_AUTO_TIME
|
||||||
|
};
|
||||||
|
|
||||||
|
/* internal crosshair menu item data */
|
||||||
|
struct crosshair_item_data
|
||||||
|
{
|
||||||
|
render_crosshair *crosshair = nullptr;
|
||||||
|
uint8_t type = 0U;
|
||||||
|
uint8_t player = 0U;
|
||||||
|
uint8_t min = 0U, max = 0U;
|
||||||
|
uint32_t cur = 0U;
|
||||||
|
uint8_t defvalue = 0U;
|
||||||
|
std::string last_name;
|
||||||
|
std::string next_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::vector<crosshair_item_data> m_data;
|
||||||
|
std::vector<std::string> m_pics;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_bios_selection : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_bios_selection(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_bios_selection();
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// export menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_export : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_export(mame_ui_manager &mui, render_container &container, std::vector<const game_driver*> &&list);
|
||||||
|
virtual ~menu_export();
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::vector<const game_driver*> m_list;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// machine configure menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_machine_configure : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_machine_configure(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
ui_system_info const &info,
|
||||||
|
std::function<void (bool, bool)> &&handler = nullptr);
|
||||||
|
virtual ~menu_machine_configure();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
using s_bios = std::vector<std::pair<std::string, int>>;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
ADDFAV = 1,
|
||||||
|
DELFAV,
|
||||||
|
SAVE,
|
||||||
|
CONTROLLER,
|
||||||
|
VIDEO,
|
||||||
|
BIOS,
|
||||||
|
ADVANCED,
|
||||||
|
LAST = ADVANCED
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
void setup_bios();
|
||||||
|
|
||||||
|
std::function<void (bool, bool)> const m_handler;
|
||||||
|
ui_system_info const &m_sys;
|
||||||
|
emu_options m_opts;
|
||||||
|
s_bios m_bios;
|
||||||
|
std::size_t m_curbios;
|
||||||
|
bool const m_was_favorite;
|
||||||
|
bool m_want_favorite;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// plugins configure menu
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
class menu_plugins_configure : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_plugins_configure(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_plugins_configure();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_MISCMENU_H
|
112
src/icludes/frontend/mame/ui/moptions.cpp
Normal file
112
src/icludes/frontend/mame/ui/moptions.cpp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/moptions.cpp
|
||||||
|
|
||||||
|
UI main options manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "options.h"
|
||||||
|
#include "ui/moptions.h"
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// UI EXTRA OPTIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
const options_entry ui_options::s_option_entries[] =
|
||||||
|
{
|
||||||
|
// search path options
|
||||||
|
{ nullptr, nullptr, OPTION_HEADER, "UI SEARCH PATH OPTIONS" },
|
||||||
|
{ OPTION_HISTORY_PATH, "history;dats;.", OPTION_STRING, "path to system/software info files" },
|
||||||
|
{ OPTION_CATEGORYINI_PATH, "folders", OPTION_STRING, "path to category ini files" },
|
||||||
|
{ OPTION_CABINETS_PATH, "cabinets;cabdevs", OPTION_STRING, "path to cabinets / devices image" },
|
||||||
|
{ OPTION_CPANELS_PATH, "cpanel", OPTION_STRING, "path to control panel image" },
|
||||||
|
{ OPTION_PCBS_PATH, "pcb", OPTION_STRING, "path to pcbs image" },
|
||||||
|
{ OPTION_FLYERS_PATH, "flyers", OPTION_STRING, "path to flyers image" },
|
||||||
|
{ OPTION_TITLES_PATH, "titles", OPTION_STRING, "path to titles image" },
|
||||||
|
{ OPTION_ENDS_PATH, "ends", OPTION_STRING, "path to ends image" },
|
||||||
|
{ OPTION_MARQUEES_PATH, "marquees", OPTION_STRING, "path to marquees image" },
|
||||||
|
{ OPTION_ARTPREV_PATH, "artwork preview;artpreview", OPTION_STRING, "path to artwork preview image" },
|
||||||
|
{ OPTION_BOSSES_PATH, "bosses", OPTION_STRING, "path to bosses image" },
|
||||||
|
{ OPTION_LOGOS_PATH, "logo", OPTION_STRING, "path to logos image" },
|
||||||
|
{ OPTION_SCORES_PATH, "scores", OPTION_STRING, "path to scores image" },
|
||||||
|
{ OPTION_VERSUS_PATH, "versus", OPTION_STRING, "path to versus image" },
|
||||||
|
{ OPTION_GAMEOVER_PATH, "gameover", OPTION_STRING, "path to gameover image" },
|
||||||
|
{ OPTION_HOWTO_PATH, "howto", OPTION_STRING, "path to howto image" },
|
||||||
|
{ OPTION_SELECT_PATH, "select", OPTION_STRING, "path to select image" },
|
||||||
|
{ OPTION_ICONS_PATH, "icons", OPTION_STRING, "path to ICOns image" },
|
||||||
|
{ OPTION_COVER_PATH, "covers", OPTION_STRING, "path to software cover image" },
|
||||||
|
{ OPTION_UI_PATH, "ui", OPTION_STRING, "path to UI files" },
|
||||||
|
|
||||||
|
// misc options
|
||||||
|
{ nullptr, nullptr, OPTION_HEADER, "UI MISC OPTIONS" },
|
||||||
|
{ OPTION_SYSTEM_NAMES, "", OPTION_STRING, "translated system names file" },
|
||||||
|
{ OPTION_SKIP_WARNINGS, "0", OPTION_BOOLEAN, "display fewer repeated warnings about imperfect emulation" },
|
||||||
|
{ OPTION_REMEMBER_LAST, "1", OPTION_BOOLEAN, "initially select last used system in main menu" },
|
||||||
|
{ OPTION_ENLARGE_SNAPS, "1", OPTION_BOOLEAN, "enlarge artwork (snapshot, title, etc.) in right panel (keeping aspect ratio)" },
|
||||||
|
{ OPTION_FORCED4X3, "1", OPTION_BOOLEAN, "force the appearance of the snapshot in the list software to 4:3" },
|
||||||
|
{ OPTION_USE_BACKGROUND, "1", OPTION_BOOLEAN, "enable background image in main view" },
|
||||||
|
{ OPTION_SKIP_BIOS_MENU, "0", OPTION_BOOLEAN, "skip bios submenu, start with configured or default" },
|
||||||
|
{ OPTION_SKIP_PARTS_MENU, "0", OPTION_BOOLEAN, "skip parts submenu, start with first part" },
|
||||||
|
{ OPTION_LAST_USED_FILTER, "", OPTION_STRING, "latest used filter" },
|
||||||
|
{ OPTION_LAST_RIGHT_PANEL "(0-1)", "0", OPTION_INTEGER, "latest right panel focus" },
|
||||||
|
{ OPTION_LAST_USED_MACHINE, "", OPTION_STRING, "latest used machine" },
|
||||||
|
{ OPTION_INFO_AUTO_AUDIT, "0", OPTION_BOOLEAN, "enable auto audit in the general info panel" },
|
||||||
|
{ OPTION_HIDE_ROMLESS, "1", OPTION_BOOLEAN, "hide romless machine from available list" },
|
||||||
|
{ OPTION_UNTHROTTLE_MUTE ";utm", "0", OPTION_BOOLEAN, "mute audio when running unthrottled" },
|
||||||
|
|
||||||
|
// UI options
|
||||||
|
{ nullptr, nullptr, OPTION_HEADER, "UI OPTIONS" },
|
||||||
|
{ OPTION_INFOS_SIZE "(0.20-1.00)", "0.75", OPTION_FLOAT, "UI right panel infos text size (0.20 - 1.00)" },
|
||||||
|
{ OPTION_FONT_ROWS "(25-40)", "30", OPTION_INTEGER, "UI font lines per screen (25 - 40)" },
|
||||||
|
{ OPTION_HIDE_PANELS "(0-3)", "0", OPTION_INTEGER, "UI hide left/right panel in main view (0 = Show all, 1 = hide left, 2 = hide right, 3 = hide both" },
|
||||||
|
{ OPTION_UI_BORDER_COLOR, "ffffffff", OPTION_STRING, "UI border color (ARGB)" },
|
||||||
|
{ OPTION_UI_BACKGROUND_COLOR, "ef101030", OPTION_STRING, "UI background color (ARGB)" },
|
||||||
|
{ OPTION_UI_CLONE_COLOR, "ff808080", OPTION_STRING, "UI clone color (ARGB)" },
|
||||||
|
{ OPTION_UI_DIPSW_COLOR, "ffffff00", OPTION_STRING, "UI dipswitch color (ARGB)" },
|
||||||
|
{ OPTION_UI_GFXVIEWER_BG_COLOR, "ef101030", OPTION_STRING, "UI gfx viewer color (ARGB)" },
|
||||||
|
{ OPTION_UI_MOUSEDOWN_BG_COLOR, "b0606000", OPTION_STRING, "UI mouse down bg color (ARGB)" },
|
||||||
|
{ OPTION_UI_MOUSEDOWN_COLOR, "ffffff80", OPTION_STRING, "UI mouse down color (ARGB)" },
|
||||||
|
{ OPTION_UI_MOUSEOVER_BG_COLOR, "70404000", OPTION_STRING, "UI mouse over bg color (ARGB)" },
|
||||||
|
{ OPTION_UI_MOUSEOVER_COLOR, "ffffff80", OPTION_STRING, "UI mouse over color (ARGB)" },
|
||||||
|
{ OPTION_UI_SELECTED_BG_COLOR, "ef808000", OPTION_STRING, "UI selected bg color (ARGB)" },
|
||||||
|
{ OPTION_UI_SELECTED_COLOR, "ffffff00", OPTION_STRING, "UI selected color (ARGB)" },
|
||||||
|
{ OPTION_UI_SLIDER_COLOR, "ffffffff", OPTION_STRING, "UI slider color (ARGB)" },
|
||||||
|
{ OPTION_UI_SUBITEM_COLOR, "ffffffff", OPTION_STRING, "UI subitem color (ARGB)" },
|
||||||
|
{ OPTION_UI_TEXT_BG_COLOR, "ef000000", OPTION_STRING, "UI text bg color (ARGB)" },
|
||||||
|
{ OPTION_UI_TEXT_COLOR, "ffffffff", OPTION_STRING, "UI text color (ARGB)" },
|
||||||
|
{ OPTION_UI_UNAVAILABLE_COLOR, "ff404040", OPTION_STRING, "UI unavailable color (ARGB)" },
|
||||||
|
{ nullptr }
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ui_options - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
ui_options::ui_options() : core_options()
|
||||||
|
{
|
||||||
|
add_entries(ui_options::s_option_entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// rgb_value - decode an RGB option
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
rgb_t ui_options::rgb_value(const char *option) const
|
||||||
|
{
|
||||||
|
// find the entry
|
||||||
|
core_options::entry::shared_const_ptr entry = get_entry(option);
|
||||||
|
|
||||||
|
// look up the value, and sanity check the result
|
||||||
|
const char *value = entry->value();
|
||||||
|
int len = strlen(value);
|
||||||
|
if (len != 8)
|
||||||
|
value = entry->default_value().c_str();
|
||||||
|
|
||||||
|
// convert to an rgb_t
|
||||||
|
return rgb_t((uint32_t)strtoul(value, nullptr, 16));
|
||||||
|
}
|
151
src/icludes/frontend/mame/ui/moptions.h
Normal file
151
src/icludes/frontend/mame/ui/moptions.h
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/moptions.h
|
||||||
|
|
||||||
|
UI main options manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAME_FRONTEND_UI_MOPTIONS_H
|
||||||
|
#define MAME_FRONTEND_UI_MOPTIONS_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
|
// core directory options
|
||||||
|
#define OPTION_HISTORY_PATH "historypath"
|
||||||
|
#define OPTION_CATEGORYINI_PATH "categorypath"
|
||||||
|
#define OPTION_CABINETS_PATH "cabinets_directory"
|
||||||
|
#define OPTION_CPANELS_PATH "cpanels_directory"
|
||||||
|
#define OPTION_PCBS_PATH "pcbs_directory"
|
||||||
|
#define OPTION_FLYERS_PATH "flyers_directory"
|
||||||
|
#define OPTION_TITLES_PATH "titles_directory"
|
||||||
|
#define OPTION_ENDS_PATH "ends_directory"
|
||||||
|
#define OPTION_MARQUEES_PATH "marquees_directory"
|
||||||
|
#define OPTION_ARTPREV_PATH "artwork_preview_directory"
|
||||||
|
#define OPTION_BOSSES_PATH "bosses_directory"
|
||||||
|
#define OPTION_LOGOS_PATH "logos_directory"
|
||||||
|
#define OPTION_SCORES_PATH "scores_directory"
|
||||||
|
#define OPTION_VERSUS_PATH "versus_directory"
|
||||||
|
#define OPTION_GAMEOVER_PATH "gameover_directory"
|
||||||
|
#define OPTION_HOWTO_PATH "howto_directory"
|
||||||
|
#define OPTION_SELECT_PATH "select_directory"
|
||||||
|
#define OPTION_ICONS_PATH "icons_directory"
|
||||||
|
#define OPTION_COVER_PATH "covers_directory"
|
||||||
|
#define OPTION_UI_PATH "ui_path"
|
||||||
|
|
||||||
|
// core misc options
|
||||||
|
#define OPTION_SYSTEM_NAMES "system_names"
|
||||||
|
#define OPTION_SKIP_WARNINGS "skip_warnings"
|
||||||
|
#define OPTION_REMEMBER_LAST "remember_last"
|
||||||
|
#define OPTION_ENLARGE_SNAPS "enlarge_snaps"
|
||||||
|
#define OPTION_FORCED4X3 "forced4x3"
|
||||||
|
#define OPTION_USE_BACKGROUND "use_background"
|
||||||
|
#define OPTION_SKIP_BIOS_MENU "skip_biosmenu"
|
||||||
|
#define OPTION_SKIP_PARTS_MENU "skip_partsmenu"
|
||||||
|
#define OPTION_LAST_USED_FILTER "last_used_filter"
|
||||||
|
#define OPTION_LAST_RIGHT_PANEL "last_right_panel"
|
||||||
|
#define OPTION_LAST_USED_MACHINE "last_used_machine"
|
||||||
|
#define OPTION_INFO_AUTO_AUDIT "info_audit_enabled"
|
||||||
|
#define OPTION_HIDE_ROMLESS "hide_romless"
|
||||||
|
#define OPTION_UNTHROTTLE_MUTE "unthrottle_mute"
|
||||||
|
|
||||||
|
|
||||||
|
// core UI options
|
||||||
|
#define OPTION_INFOS_SIZE "infos_text_size"
|
||||||
|
#define OPTION_FONT_ROWS "font_rows"
|
||||||
|
#define OPTION_HIDE_PANELS "hide_main_panel"
|
||||||
|
|
||||||
|
#define OPTION_UI_BORDER_COLOR "ui_border_color"
|
||||||
|
#define OPTION_UI_BACKGROUND_COLOR "ui_bg_color"
|
||||||
|
#define OPTION_UI_GFXVIEWER_BG_COLOR "ui_gfxviewer_color"
|
||||||
|
#define OPTION_UI_UNAVAILABLE_COLOR "ui_unavail_color"
|
||||||
|
#define OPTION_UI_TEXT_COLOR "ui_text_color"
|
||||||
|
#define OPTION_UI_TEXT_BG_COLOR "ui_text_bg_color"
|
||||||
|
#define OPTION_UI_SUBITEM_COLOR "ui_subitem_color"
|
||||||
|
#define OPTION_UI_CLONE_COLOR "ui_clone_color"
|
||||||
|
#define OPTION_UI_SELECTED_COLOR "ui_selected_color"
|
||||||
|
#define OPTION_UI_SELECTED_BG_COLOR "ui_selected_bg_color"
|
||||||
|
#define OPTION_UI_MOUSEOVER_COLOR "ui_mouseover_color"
|
||||||
|
#define OPTION_UI_MOUSEOVER_BG_COLOR "ui_mouseover_bg_color"
|
||||||
|
#define OPTION_UI_MOUSEDOWN_COLOR "ui_mousedown_color"
|
||||||
|
#define OPTION_UI_MOUSEDOWN_BG_COLOR "ui_mousedown_bg_color"
|
||||||
|
#define OPTION_UI_DIPSW_COLOR "ui_dipsw_color"
|
||||||
|
#define OPTION_UI_SLIDER_COLOR "ui_slider_color"
|
||||||
|
|
||||||
|
class ui_options : public core_options
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
ui_options();
|
||||||
|
|
||||||
|
// Search path options
|
||||||
|
const char *history_path() const { return value(OPTION_HISTORY_PATH); }
|
||||||
|
const char *categoryini_path() const { return value(OPTION_CATEGORYINI_PATH); }
|
||||||
|
const char *cabinets_directory() const { return value(OPTION_CABINETS_PATH); }
|
||||||
|
const char *cpanels_directory() const { return value(OPTION_CPANELS_PATH); }
|
||||||
|
const char *pcbs_directory() const { return value(OPTION_PCBS_PATH); }
|
||||||
|
const char *flyers_directory() const { return value(OPTION_FLYERS_PATH); }
|
||||||
|
const char *titles_directory() const { return value(OPTION_TITLES_PATH); }
|
||||||
|
const char *ends_directory() const { return value(OPTION_ENDS_PATH); }
|
||||||
|
const char *marquees_directory() const { return value(OPTION_MARQUEES_PATH); }
|
||||||
|
const char *artprev_directory() const { return value(OPTION_ARTPREV_PATH); }
|
||||||
|
const char *bosses_directory() const { return value(OPTION_BOSSES_PATH); }
|
||||||
|
const char *logos_directory() const { return value(OPTION_LOGOS_PATH); }
|
||||||
|
const char *scores_directory() const { return value(OPTION_SCORES_PATH); }
|
||||||
|
const char *versus_directory() const { return value(OPTION_VERSUS_PATH); }
|
||||||
|
const char *gameover_directory() const { return value(OPTION_GAMEOVER_PATH); }
|
||||||
|
const char *howto_directory() const { return value(OPTION_HOWTO_PATH); }
|
||||||
|
const char *select_directory() const { return value(OPTION_SELECT_PATH); }
|
||||||
|
const char *icons_directory() const { return value(OPTION_ICONS_PATH); }
|
||||||
|
const char *covers_directory() const { return value(OPTION_COVER_PATH); }
|
||||||
|
const char *ui_path() const { return value(OPTION_UI_PATH); }
|
||||||
|
|
||||||
|
// Misc options
|
||||||
|
const char *system_names() const { return value(OPTION_SYSTEM_NAMES); }
|
||||||
|
bool skip_warnings() const { return bool_value(OPTION_SKIP_WARNINGS); }
|
||||||
|
bool remember_last() const { return bool_value(OPTION_REMEMBER_LAST); }
|
||||||
|
bool enlarge_snaps() const { return bool_value(OPTION_ENLARGE_SNAPS); }
|
||||||
|
bool forced_4x3_snapshot() const { return bool_value(OPTION_FORCED4X3); }
|
||||||
|
bool use_background_image() const { return bool_value(OPTION_USE_BACKGROUND); }
|
||||||
|
bool skip_bios_menu() const { return bool_value(OPTION_SKIP_BIOS_MENU); }
|
||||||
|
bool skip_parts_menu() const { return bool_value(OPTION_SKIP_PARTS_MENU); }
|
||||||
|
const char *last_used_machine() const { return value(OPTION_LAST_USED_MACHINE); }
|
||||||
|
const char *last_used_filter() const { return value(OPTION_LAST_USED_FILTER); }
|
||||||
|
int last_right_panel() const { return int_value(OPTION_LAST_RIGHT_PANEL); }
|
||||||
|
bool info_audit() const { return bool_value(OPTION_INFO_AUTO_AUDIT); }
|
||||||
|
bool hide_romless() const { return bool_value(OPTION_HIDE_ROMLESS); }
|
||||||
|
bool unthrottle_mute() const { return bool_value(OPTION_UNTHROTTLE_MUTE); }
|
||||||
|
|
||||||
|
// UI options
|
||||||
|
float infos_size() const { return float_value(OPTION_INFOS_SIZE); }
|
||||||
|
int font_rows() const { return int_value(OPTION_FONT_ROWS); }
|
||||||
|
int hide_panels() const { return int_value(OPTION_HIDE_PANELS); }
|
||||||
|
|
||||||
|
rgb_t border_color() const { return rgb_value(OPTION_UI_BORDER_COLOR); }
|
||||||
|
rgb_t background_color() const { return rgb_value(OPTION_UI_BACKGROUND_COLOR); }
|
||||||
|
rgb_t gfxviewer_bg_color() const { return rgb_value(OPTION_UI_GFXVIEWER_BG_COLOR); }
|
||||||
|
rgb_t unavailable_color() const { return rgb_value(OPTION_UI_UNAVAILABLE_COLOR); }
|
||||||
|
rgb_t text_color() const { return rgb_value(OPTION_UI_TEXT_COLOR); }
|
||||||
|
rgb_t text_bg_color() const { return rgb_value(OPTION_UI_TEXT_BG_COLOR); }
|
||||||
|
rgb_t subitem_color() const { return rgb_value(OPTION_UI_SUBITEM_COLOR); }
|
||||||
|
rgb_t clone_color() const { return rgb_value(OPTION_UI_CLONE_COLOR); }
|
||||||
|
rgb_t selected_color() const { return rgb_value(OPTION_UI_SELECTED_COLOR); }
|
||||||
|
rgb_t selected_bg_color() const { return rgb_value(OPTION_UI_SELECTED_BG_COLOR); }
|
||||||
|
rgb_t mouseover_color() const { return rgb_value(OPTION_UI_MOUSEOVER_COLOR); }
|
||||||
|
rgb_t mouseover_bg_color() const { return rgb_value(OPTION_UI_MOUSEOVER_BG_COLOR); }
|
||||||
|
rgb_t mousedown_color() const { return rgb_value(OPTION_UI_MOUSEDOWN_COLOR); }
|
||||||
|
rgb_t mousedown_bg_color() const { return rgb_value(OPTION_UI_MOUSEDOWN_BG_COLOR); }
|
||||||
|
rgb_t dipsw_color() const { return rgb_value(OPTION_UI_DIPSW_COLOR); }
|
||||||
|
rgb_t slider_color() const { return rgb_value(OPTION_UI_SLIDER_COLOR); }
|
||||||
|
|
||||||
|
rgb_t rgb_value(const char *option) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static const options_entry s_option_entries[];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_MOPTIONS_H
|
301
src/icludes/frontend/mame/ui/optsmenu.cpp
Normal file
301
src/icludes/frontend/mame/ui/optsmenu.cpp
Normal file
@ -0,0 +1,301 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/optsmenu.cpp
|
||||||
|
|
||||||
|
UI main options menu manager.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "ui/optsmenu.h"
|
||||||
|
|
||||||
|
#include "ui/custui.h"
|
||||||
|
#include "ui/dirmenu.h"
|
||||||
|
#include "ui/inputmap.h"
|
||||||
|
#include "ui/miscmenu.h"
|
||||||
|
#include "ui/selector.h"
|
||||||
|
#include "ui/sndmenu.h"
|
||||||
|
#include "ui/submenu.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include "mame.h"
|
||||||
|
#include "mameopts.h"
|
||||||
|
#include "rendfont.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_simple_game_options::menu_simple_game_options(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
std::function<void ()> &&handler)
|
||||||
|
: menu(mui, container)
|
||||||
|
, m_handler(std::move(handler))
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_simple_game_options::~menu_simple_game_options()
|
||||||
|
{
|
||||||
|
ui().save_ui_options();
|
||||||
|
if (m_handler)
|
||||||
|
m_handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_simple_game_options::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
handle_item_event(*ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_simple_game_options::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
item_append(_(submenu::video_options()[0].description), 0, (void *)(uintptr_t)DISPLAY_MENU);
|
||||||
|
item_append(_("Sound Options"), 0, (void *)(uintptr_t)SOUND_MENU);
|
||||||
|
item_append(_(submenu::misc_options()[0].description), 0, (void *)(uintptr_t)MISC_MENU);
|
||||||
|
item_append(_(submenu::control_options()[0].description), 0, (void *)(uintptr_t)CONTROLLER_MENU);
|
||||||
|
item_append(_("General Inputs"), 0, (void *)(uintptr_t)CGI_MENU);
|
||||||
|
item_append(_(submenu::advanced_options()[0].description), 0, (void *)(uintptr_t)ADVANCED_MENU);
|
||||||
|
if (machine().options().plugins())
|
||||||
|
item_append(_("Plugins"), 0, (void *)(uintptr_t)PLUGINS_MENU);
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
item_append(_("Save Configuration"), 0, (void *)(uintptr_t)SAVE_CONFIG);
|
||||||
|
|
||||||
|
custombottom = 2.0f * ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
customtop = ui().get_line_height() + 3.0f * ui().box_tb_border();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle item
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_simple_game_options::handle_item_event(event const &menu_event)
|
||||||
|
{
|
||||||
|
switch ((uintptr_t)menu_event.itemref)
|
||||||
|
{
|
||||||
|
case MISC_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
menu::stack_push<submenu>(ui(), container(), submenu::misc_options());
|
||||||
|
ui_globals::reset = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SOUND_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
menu::stack_push<menu_sound_options>(ui(), container());
|
||||||
|
ui_globals::reset = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DISPLAY_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
menu::stack_push<submenu>(ui(), container(), submenu::video_options());
|
||||||
|
ui_globals::reset = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CONTROLLER_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<submenu>(ui(), container(), submenu::control_options());
|
||||||
|
break;
|
||||||
|
case CGI_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<menu_input_groups>(ui(), container());
|
||||||
|
break;
|
||||||
|
case ADVANCED_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
menu::stack_push<submenu>(ui(), container(), submenu::advanced_options());
|
||||||
|
ui_globals::reset = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PLUGINS_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<menu_plugins_configure>(ui(), container());
|
||||||
|
break;
|
||||||
|
case SAVE_CONFIG:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
ui().save_main_option();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// perform our special rendering
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_simple_game_options::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
|
||||||
|
{
|
||||||
|
char const *const toptext[] = { _("Settings") };
|
||||||
|
draw_text_box(
|
||||||
|
std::begin(toptext), std::end(toptext),
|
||||||
|
origx1, origx2, origy1 - top, origy1 - ui().box_tb_border(),
|
||||||
|
text_layout::text_justify::CENTER, text_layout::word_wrapping::TRUNCATE, false,
|
||||||
|
ui().colors().text_color(), UI_GREEN_COLOR, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_game_options::menu_game_options(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
machine_filter_data &filter_data,
|
||||||
|
std::function<void ()> &&handler)
|
||||||
|
: menu_simple_game_options(mui, container, std::move(handler))
|
||||||
|
, m_filter_data(filter_data)
|
||||||
|
, m_main_filter(filter_data.get_current_filter_type())
|
||||||
|
{
|
||||||
|
set_process_flags(PROCESS_LR_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// dtor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
menu_game_options::~menu_game_options()
|
||||||
|
{
|
||||||
|
m_filter_data.set_current_filter_type(m_main_filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_game_options::handle(event const *ev)
|
||||||
|
{
|
||||||
|
// process the menu
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
handle_item_event(*ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// populate
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_game_options::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
// set filter arrow
|
||||||
|
std::string fbuff;
|
||||||
|
|
||||||
|
// add filter item
|
||||||
|
uint32_t arrow_flags = get_arrow_flags<uint16_t>(machine_filter::FIRST, machine_filter::LAST, m_main_filter);
|
||||||
|
machine_filter &active_filter(m_filter_data.get_filter(m_main_filter));
|
||||||
|
item_append(_("Filter"), active_filter.display_name(), arrow_flags, (void *)(uintptr_t)FILTER_MENU);
|
||||||
|
|
||||||
|
// add subitem if the filter wants it
|
||||||
|
if (active_filter.wants_adjuster())
|
||||||
|
{
|
||||||
|
std::string name(convert_command_glyph("^!"));
|
||||||
|
item_append(name, active_filter.adjust_text(), active_filter.arrow_flags(), (void *)(FILTER_ADJUST));
|
||||||
|
}
|
||||||
|
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
// add options items
|
||||||
|
item_append(_("Customize UI"), 0, (void *)(uintptr_t)CUSTOM_MENU);
|
||||||
|
item_append(_("Configure Directories"), 0, (void *)(uintptr_t)CONF_DIR);
|
||||||
|
|
||||||
|
// add the options that don't relate to the UI
|
||||||
|
menu_simple_game_options::populate(customtop, custombottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// handle item
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void menu_game_options::handle_item_event(event const &menu_event)
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
switch ((uintptr_t)menu_event.itemref)
|
||||||
|
{
|
||||||
|
case FILTER_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_LEFT || menu_event.iptkey == IPT_UI_RIGHT)
|
||||||
|
{
|
||||||
|
(menu_event.iptkey == IPT_UI_RIGHT) ? ++m_main_filter : --m_main_filter;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
else if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
std::vector<std::string> s_sel(machine_filter::COUNT);
|
||||||
|
for (unsigned index = 0; index < s_sel.size(); ++index)
|
||||||
|
s_sel[index] = machine_filter::display_name(machine_filter::type(index));
|
||||||
|
|
||||||
|
menu::stack_push<menu_selector>(
|
||||||
|
ui(), container(), std::move(s_sel), m_main_filter,
|
||||||
|
[this] (int selection)
|
||||||
|
{
|
||||||
|
m_main_filter = machine_filter::type(selection);
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FILTER_ADJUST:
|
||||||
|
if (menu_event.iptkey == IPT_UI_LEFT)
|
||||||
|
{
|
||||||
|
changed = m_filter_data.get_filter(m_main_filter).adjust_left();
|
||||||
|
}
|
||||||
|
else if (menu_event.iptkey == IPT_UI_RIGHT)
|
||||||
|
{
|
||||||
|
changed = m_filter_data.get_filter(m_main_filter).adjust_right();
|
||||||
|
}
|
||||||
|
else if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
{
|
||||||
|
m_filter_data.get_filter(m_main_filter).show_ui(
|
||||||
|
ui(),
|
||||||
|
container(),
|
||||||
|
[this] (machine_filter &filter)
|
||||||
|
{
|
||||||
|
if (machine_filter::CUSTOM == filter.get_type())
|
||||||
|
{
|
||||||
|
emu_file file(ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||||
|
if (!file.open(util::string_format("custom_%s_filter.ini", emulator_info::get_configname())))
|
||||||
|
{
|
||||||
|
filter.save_ini(file, 0);
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CONF_DIR:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<menu_directory>(ui(), container());
|
||||||
|
break;
|
||||||
|
case CUSTOM_MENU:
|
||||||
|
if (menu_event.iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<menu_custom_ui>(ui(), container(), [this] () { reset(reset_options::REMEMBER_REF); });
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
menu_simple_game_options::handle_item_event(menu_event);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
85
src/icludes/frontend/mame/ui/optsmenu.h
Normal file
85
src/icludes/frontend/mame/ui/optsmenu.h
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Maurizio Petrarota
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/optsmenu.h
|
||||||
|
|
||||||
|
UI main options menu manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_OPTSMENU_H
|
||||||
|
#define MAME_FRONTEND_UI_OPTSMENU_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_simple_game_options : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_simple_game_options(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
std::function<void ()> &&handler);
|
||||||
|
virtual ~menu_simple_game_options() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
|
||||||
|
void handle_item_event(event const &menu_event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
DISPLAY_MENU = 1001,
|
||||||
|
SOUND_MENU,
|
||||||
|
MISC_MENU,
|
||||||
|
CONTROLLER_MENU,
|
||||||
|
CGI_MENU,
|
||||||
|
ADVANCED_MENU,
|
||||||
|
PLUGINS_MENU,
|
||||||
|
SAVE_CONFIG
|
||||||
|
};
|
||||||
|
|
||||||
|
std::function<void ()> const m_handler;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class menu_game_options : public menu_simple_game_options
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_game_options(
|
||||||
|
mame_ui_manager &mui,
|
||||||
|
render_container &container,
|
||||||
|
machine_filter_data &filter_data,
|
||||||
|
std::function<void ()> &&handler);
|
||||||
|
virtual ~menu_game_options() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
|
||||||
|
void handle_item_event(event const &menu_event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FILTER_MENU = 2001,
|
||||||
|
FILTER_ADJUST,
|
||||||
|
CONF_DIR,
|
||||||
|
CUSTOM_MENU
|
||||||
|
};
|
||||||
|
|
||||||
|
machine_filter_data &m_filter_data;
|
||||||
|
machine_filter::type m_main_filter;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_OPTSMENU_H
|
219
src/icludes/frontend/mame/ui/pluginopt.cpp
Normal file
219
src/icludes/frontend/mame/ui/pluginopt.cpp
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
|
||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
ui/pluginopt.cpp
|
||||||
|
|
||||||
|
Internal menu for the plugin interface.
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "pluginopt.h"
|
||||||
|
|
||||||
|
#include "ui/utils.h"
|
||||||
|
|
||||||
|
#include "luaengine.h"
|
||||||
|
#include "mame.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
void menu_plugin::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (ev && ev->itemref)
|
||||||
|
{
|
||||||
|
if (ev->iptkey == IPT_UI_SELECT)
|
||||||
|
menu::stack_push<menu_plugin_opt>(ui(), container(), (char *)ev->itemref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_plugin::menu_plugin(mame_ui_manager &mui, render_container &container) :
|
||||||
|
menu(mui, container),
|
||||||
|
m_plugins(mame_machine_manager::instance()->lua()->get_menu())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_plugin::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
for (auto &curplugin : m_plugins)
|
||||||
|
item_append(curplugin, 0, (void *)curplugin.c_str());
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_plugin::show_menu(mame_ui_manager &mui, render_container &container, char *menu)
|
||||||
|
{
|
||||||
|
// reset the menu stack
|
||||||
|
menu::stack_reset(mui);
|
||||||
|
|
||||||
|
// add the plugin menu entry
|
||||||
|
menu::stack_push<menu_plugin_opt>(mui, container, menu);
|
||||||
|
|
||||||
|
// force the menus on
|
||||||
|
mui.show_menu();
|
||||||
|
|
||||||
|
// make sure MAME is paused
|
||||||
|
mui.machine().pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_plugin::~menu_plugin()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_plugin_opt::menu_plugin_opt(mame_ui_manager &mui, render_container &container, std::string_view menu) :
|
||||||
|
ui::menu(mui, container),
|
||||||
|
m_menu(menu),
|
||||||
|
m_need_idle(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_plugin_opt::handle(event const *ev)
|
||||||
|
{
|
||||||
|
void *const itemref = ev ? ev->itemref : get_selection_ref();
|
||||||
|
std::string key;
|
||||||
|
if (ev)
|
||||||
|
{
|
||||||
|
switch (ev->iptkey)
|
||||||
|
{
|
||||||
|
case IPT_UI_UP:
|
||||||
|
key = "up";
|
||||||
|
break;
|
||||||
|
case IPT_UI_DOWN:
|
||||||
|
key = "down";
|
||||||
|
break;
|
||||||
|
case IPT_UI_LEFT:
|
||||||
|
key = "left";
|
||||||
|
break;
|
||||||
|
case IPT_UI_RIGHT:
|
||||||
|
key = "right";
|
||||||
|
break;
|
||||||
|
case IPT_UI_PREV_GROUP:
|
||||||
|
key = "prevgroup";
|
||||||
|
break;
|
||||||
|
case IPT_UI_NEXT_GROUP:
|
||||||
|
key = "nextgroup";
|
||||||
|
break;
|
||||||
|
case IPT_UI_SELECT:
|
||||||
|
key = "select";
|
||||||
|
break;
|
||||||
|
case IPT_UI_DISPLAY_COMMENT:
|
||||||
|
key = "comment";
|
||||||
|
break;
|
||||||
|
case IPT_UI_CLEAR:
|
||||||
|
key = "clear";
|
||||||
|
break;
|
||||||
|
case IPT_UI_CANCEL:
|
||||||
|
key = "cancel";
|
||||||
|
break;
|
||||||
|
case IPT_SPECIAL:
|
||||||
|
key = std::to_string((u32)ev->unichar);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!key.empty() || m_need_idle)
|
||||||
|
{
|
||||||
|
auto const result = mame_machine_manager::instance()->lua()->menu_callback(m_menu, uintptr_t(itemref), key);
|
||||||
|
if (result.second)
|
||||||
|
set_selection(reinterpret_cast<void *>(uintptr_t(*result.second)));
|
||||||
|
if (result.first)
|
||||||
|
reset(reset_options::REMEMBER_REF);
|
||||||
|
else if (ev && (ev->iptkey == IPT_UI_CANCEL))
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_plugin_opt::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
std::vector<std::tuple<std::string, std::string, std::string>> menu_list;
|
||||||
|
std::string flags;
|
||||||
|
auto const sel = mame_machine_manager::instance()->lua()->menu_populate(m_menu, menu_list, flags);
|
||||||
|
|
||||||
|
uintptr_t i = 1;
|
||||||
|
for (auto &item : menu_list)
|
||||||
|
{
|
||||||
|
std::string &text = std::get<0>(item);
|
||||||
|
std::string &subtext = std::get<1>(item);
|
||||||
|
std::string_view tflags = std::get<2>(item);
|
||||||
|
|
||||||
|
uint32_t item_flags_or = uint32_t(0);
|
||||||
|
uint32_t item_flags_and = ~uint32_t(0);
|
||||||
|
auto flag_start = tflags.find_first_not_of(' ');
|
||||||
|
while (std::string_view::npos != flag_start)
|
||||||
|
{
|
||||||
|
tflags.remove_prefix(flag_start);
|
||||||
|
auto const flag_end = tflags.find(' ');
|
||||||
|
auto const flag = tflags.substr(0, flag_end);
|
||||||
|
tflags.remove_prefix(flag.length());
|
||||||
|
flag_start = tflags.find_first_not_of(' ');
|
||||||
|
|
||||||
|
if (flag == "off")
|
||||||
|
item_flags_or |= FLAG_DISABLE;
|
||||||
|
else if (flag == "on")
|
||||||
|
item_flags_and &= ~FLAG_DISABLE;
|
||||||
|
else if (flag == "l")
|
||||||
|
item_flags_or |= FLAG_LEFT_ARROW;
|
||||||
|
else if (flag == "r")
|
||||||
|
item_flags_or |= FLAG_RIGHT_ARROW;
|
||||||
|
else if (flag == "lr")
|
||||||
|
item_flags_or |= FLAG_RIGHT_ARROW | FLAG_LEFT_ARROW;
|
||||||
|
else if (flag == "invert")
|
||||||
|
item_flags_or |= FLAG_INVERT;
|
||||||
|
else if (flag == "heading")
|
||||||
|
item_flags_or |= FLAG_DISABLE | FLAG_UI_HEADING;
|
||||||
|
else
|
||||||
|
osd_printf_info("menu_plugin_opt: unknown flag '%s' for item %d (%s)\n", flag, i, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text == "---")
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
else
|
||||||
|
item_append(std::move(text), std::move(subtext), item_flags_or & item_flags_and, reinterpret_cast<void *>(i));
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
item_append(menu_item_type::SEPARATOR);
|
||||||
|
|
||||||
|
if (sel)
|
||||||
|
set_selection(reinterpret_cast<void *>(uintptr_t(*sel)));
|
||||||
|
|
||||||
|
uint32_t process_flags = 0U;
|
||||||
|
m_need_idle = false;
|
||||||
|
if (!flags.empty())
|
||||||
|
{
|
||||||
|
std::string_view mflags = flags;
|
||||||
|
auto flag_start = mflags.find_first_not_of(' ');
|
||||||
|
while (std::string_view::npos != flag_start)
|
||||||
|
{
|
||||||
|
mflags.remove_prefix(flag_start);
|
||||||
|
auto const flag_end = mflags.find(' ');
|
||||||
|
auto const flag = mflags.substr(0, flag_end);
|
||||||
|
mflags.remove_prefix(flag.length());
|
||||||
|
flag_start = mflags.find_first_not_of(' ');
|
||||||
|
|
||||||
|
if (flag == "nokeys")
|
||||||
|
process_flags |= PROCESS_NOKEYS;
|
||||||
|
else if (flag == "lralways")
|
||||||
|
process_flags |= PROCESS_LR_ALWAYS;
|
||||||
|
else if (flag == "lrrepeat")
|
||||||
|
process_flags |= PROCESS_LR_REPEAT;
|
||||||
|
else if (flag == "customnav")
|
||||||
|
process_flags |= PROCESS_CUSTOM_NAV;
|
||||||
|
else if (flag == "ignorepause")
|
||||||
|
process_flags |= PROCESS_IGNOREPAUSE;
|
||||||
|
else if (flag == "idle")
|
||||||
|
m_need_idle = true;
|
||||||
|
else
|
||||||
|
osd_printf_info("menu_plugin_opt: unknown processing flag '%s'\n", flag);
|
||||||
|
}
|
||||||
|
if (process_flags & PROCESS_NOKEYS)
|
||||||
|
m_need_idle = true;
|
||||||
|
}
|
||||||
|
set_process_flags(process_flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_plugin_opt::~menu_plugin_opt()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
60
src/icludes/frontend/mame/ui/pluginopt.h
Normal file
60
src/icludes/frontend/mame/ui/pluginopt.h
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Carl
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/pluginopt.h
|
||||||
|
|
||||||
|
Internal menu for the plugin interface.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_PLUGINOPT_H
|
||||||
|
#define MAME_FRONTEND_UI_PLUGINOPT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_plugin : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_plugin(mame_ui_manager &mui, render_container &container);
|
||||||
|
|
||||||
|
static void show_menu(mame_ui_manager &mui, render_container &container, char *menu);
|
||||||
|
|
||||||
|
virtual ~menu_plugin();
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::vector<std::string> &m_plugins;
|
||||||
|
};
|
||||||
|
|
||||||
|
class menu_plugin_opt : public menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_plugin_opt(mame_ui_manager &mui, render_container &container, std::string_view menu);
|
||||||
|
virtual ~menu_plugin_opt();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool custom_ui_cancel() override { return true; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
|
||||||
|
std::string const m_menu;
|
||||||
|
bool m_need_idle;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_PLUGINOPT_H
|
61
src/icludes/frontend/mame/ui/quitmenu.cpp
Normal file
61
src/icludes/frontend/mame/ui/quitmenu.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/quitmenu.h
|
||||||
|
|
||||||
|
Menus involved in quitting MAME.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "quitmenu.h"
|
||||||
|
|
||||||
|
#include "uiinput.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
menu_confirm_quit::menu_confirm_quit(mame_ui_manager &mui, render_container &container)
|
||||||
|
: autopause_menu<>(mui, container)
|
||||||
|
{
|
||||||
|
set_one_shot(true);
|
||||||
|
set_process_flags(PROCESS_CUSTOM_ONLY | PROCESS_NOINPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
menu_confirm_quit::~menu_confirm_quit()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_confirm_quit::custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2)
|
||||||
|
{
|
||||||
|
ui().draw_text_box(
|
||||||
|
container(),
|
||||||
|
util::string_format(
|
||||||
|
_("Are you sure you want to quit?\n\n"
|
||||||
|
"Press %1$s to quit\n"
|
||||||
|
"Press %2$s to return to emulation"),
|
||||||
|
ui().get_general_input_setting(IPT_UI_SELECT),
|
||||||
|
ui().get_general_input_setting(IPT_UI_CANCEL)),
|
||||||
|
text_layout::text_justify::CENTER,
|
||||||
|
0.5f, 0.5f,
|
||||||
|
UI_RED_COLOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_confirm_quit::populate(float &customtop, float &custombottom)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu_confirm_quit::handle(event const *ev)
|
||||||
|
{
|
||||||
|
if (machine().ui_input().pressed(IPT_UI_SELECT))
|
||||||
|
machine().schedule_exit();
|
||||||
|
else if (machine().ui_input().pressed(IPT_UI_CANCEL))
|
||||||
|
stack_pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
36
src/icludes/frontend/mame/ui/quitmenu.h
Normal file
36
src/icludes/frontend/mame/ui/quitmenu.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
ui/quitmenu.h
|
||||||
|
|
||||||
|
Menus involved in quitting MAME.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef MAME_FRONTEND_UI_QUITMENU_H
|
||||||
|
#define MAME_FRONTEND_UI_QUITMENU_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/menu.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class menu_confirm_quit : public autopause_menu<>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
menu_confirm_quit(mame_ui_manager &mui, render_container &container);
|
||||||
|
virtual ~menu_confirm_quit();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void populate(float &customtop, float &custombottom) override;
|
||||||
|
virtual void handle(event const *ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
|
||||||
|
#endif // MAME_FRONTEND_UI_QUITMENU_H
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user