Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remote Retropad test for pointer device and associated buttons. #17130

Merged
merged 1 commit into from
Oct 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
231 changes: 226 additions & 5 deletions cores/libretro-net-retropad/net_retropad_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@
#define NETRETROPAD_SCREEN_KEYBOARD 1
#define NETRETROPAD_SCREEN_SENSORS 2
#define EVENT_RATE 60
#define NETRETROPAD_MOUSE 3
#define NETRETROPAD_POINTER 4
#define NETRETROPAD_LIGHTGUN 5
#define NETRETROPAD_LIGHTGUN_OLD 6

struct descriptor
{
Expand Down Expand Up @@ -91,6 +95,12 @@ static bool lux_sensor_enabled = false;
static float tilt_sensor_values[3] = {0};
static float gyro_sensor_values[3] = {0};
static float lux_sensor_value = 0.0f;
static unsigned mouse_type = 0;
static int pointer_x = 0;
static int pointer_y = 0;
static unsigned pointer_prev_x = 0;
static unsigned pointer_prev_y = 0;
static unsigned pointer_prev_color = 0;

static int s;
static int port;
Expand Down Expand Up @@ -141,16 +151,60 @@ static struct descriptor analog_button = {
.id_max = RETRO_DEVICE_ID_JOYPAD_R3
};

static struct descriptor mouse = {
.device = RETRO_DEVICE_MOUSE,
.port_min = 0,
.port_max = 0,
.index_min = 0,
.index_max = 0,
.id_min = RETRO_DEVICE_ID_MOUSE_X,
.id_max = RETRO_DEVICE_ID_MOUSE_BUTTON_5
};

static struct descriptor pointer = {
.device = RETRO_DEVICE_POINTER/* | 0x10000*/,
.port_min = 0,
.port_max = 0,
.index_min = 0,
.index_max = 0,
.id_min = RETRO_DEVICE_ID_POINTER_X,
.id_max = RETRO_DEVICE_ID_POINTER_COUNT
};

static struct descriptor lightgun = {
.device = RETRO_DEVICE_LIGHTGUN,
.port_min = 0,
.port_max = 0,
.index_min = 0,
.index_max = 0,
.id_min = RETRO_DEVICE_ID_LIGHTGUN_TRIGGER,
.id_max = RETRO_DEVICE_ID_LIGHTGUN_RELOAD
};

static struct descriptor lightgun_old = {
.device = RETRO_DEVICE_LIGHTGUN,
.port_min = 0,
.port_max = 0,
.index_min = 0,
.index_max = 0,
.id_min = RETRO_DEVICE_ID_LIGHTGUN_X,
.id_max = RETRO_DEVICE_ID_LIGHTGUN_Y
};

/* Sensors are not fed to the descriptors. */

static struct descriptor *descriptors[] = {
&joypad,
&analog,
&analog_button
&analog_button,
&mouse, /* NETRETROPAD_MOUSE */
&pointer, /* NETRETROPAD_POINTER */
&lightgun, /* NETRETROPAD_LIGHTGUN */
&lightgun_old /* NETRETROPAD_LIGHTGUN_OLD */
};

static uint16_t analog_item_colors[32];
static uint16_t sensor_item_colors[70];
static uint16_t sensor_item_colors[104];

static uint16_t combo_def[] =
{
Expand Down Expand Up @@ -571,6 +625,23 @@ static void NETRETROPAD_CORE_PREFIX(update_keyboard_cb)(bool down, unsigned keyc
}
}

static unsigned get_pixel_coordinate(int val, unsigned dimension)
{
int64_t longval = (val + 32768) * dimension;
return (unsigned) (longval / 65536);
}

static unsigned set_pixel(unsigned x, unsigned y, unsigned color)
{
unsigned old_color;
uint16_t *pixel;
pixel = frame_buf + y * 320 + x;
old_color = *pixel;
*pixel = color;
return old_color;

}

static void retropad_update_input(void)
{
unsigned i;
Expand All @@ -585,6 +656,10 @@ static void retropad_update_input(void)
/* Get current descriptor */
struct descriptor *desc = descriptors[i];

/* Only query one mouse type device */
if ( i > 2 && i != mouse_type)
continue;

/* Go through range of ports/indices/IDs */
for (port = desc->port_min; port <= desc->port_max; port++)
{
Expand Down Expand Up @@ -618,7 +693,42 @@ static void retropad_update_input(void)
/* Update state */
desc->value[offset] = state;

/* Do not send analog button state - RA side is not prepared to receive it */
if (i>2)
{
/* NETRETROPAD_CORE_PREFIX(log_cb)(RETRO_LOG_DEBUG, "Mouse state: %d %d %d (%d %d)\n",i,id, (int16_t)state,pointer_x,pointer_y); */
if (mouse_type == NETRETROPAD_MOUSE || mouse_type == NETRETROPAD_LIGHTGUN_OLD)
{
if (id == RETRO_DEVICE_ID_MOUSE_X || id == RETRO_DEVICE_ID_LIGHTGUN_X)
{
int32_t large = pointer_x + (int16_t)state*204;
if (large < -32768)
pointer_x = -32768;
else if (large > 32767)
pointer_x = 32767;
else
pointer_x = (int16_t) large;
}
else if (id == RETRO_DEVICE_ID_MOUSE_Y || id == RETRO_DEVICE_ID_LIGHTGUN_Y)
{
int32_t large = pointer_y + (int16_t)state*273;
if (large < -32768)
pointer_y = -32768;
else if (large > 32767)
pointer_y = 32767;
else
pointer_y = (int16_t) large;
}
}
else if (mouse_type == NETRETROPAD_POINTER || mouse_type == NETRETROPAD_LIGHTGUN)
{
if (id == RETRO_DEVICE_ID_POINTER_X || id == RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X)
pointer_x = (int16_t)state;
else if (id == RETRO_DEVICE_ID_POINTER_Y || id == RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y)
pointer_y = (int16_t)state;
}
}

/* Do not send extra descriptor state - RA side is not prepared to receive it */
if (i>1)
continue;

Expand Down Expand Up @@ -674,6 +784,7 @@ void NETRETROPAD_CORE_PREFIX(retro_set_environment)(retro_environment_t cb)
{ "net_retropad_ip_octet4", "IP address part 4; 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255" },
{ "net_retropad_screen", "Start screen; Retropad|Keyboard tester|Sensor tester" },
{ "net_retropad_hide_analog_mismatch", "Hide mismatching analog button inputs; True|False" },
{ "net_retropad_pointer_test", "Pointer test; Off|Mouse|Pointer|Lightgun|Old lightgun" },
{ NULL, NULL },
};
enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565;
Expand All @@ -695,14 +806,15 @@ void NETRETROPAD_CORE_PREFIX(retro_set_environment)(retro_environment_t cb)

static void netretropad_check_variables(void)
{
struct retro_variable var, var2, var3, var4, port_var, screen_var, hide_a_var;
struct retro_variable var, var2, var3, var4, port_var, screen_var, hide_a_var, mouse_var;
var.key = "net_retropad_ip_octet1";
var2.key = "net_retropad_ip_octet2";
var3.key = "net_retropad_ip_octet3";
var4.key = "net_retropad_ip_octet4";
port_var.key = "net_retropad_port";
screen_var.key = "net_retropad_screen";
hide_a_var.key = "net_retropad_hide_analog_mismatch";
mouse_var.key = "net_retropad_pointer_test";

NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &var);
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &var2);
Expand All @@ -711,6 +823,7 @@ static void netretropad_check_variables(void)
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &port_var);
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &screen_var);
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &hide_a_var);
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &mouse_var);

snprintf(server, sizeof(server), "%s.%s.%s.%s", var.value, var2.value, var3.value, var4.value);
port = atoi(port_var.value);
Expand All @@ -725,6 +838,17 @@ static void netretropad_check_variables(void)
else
hide_analog_mismatch = false;

if (mouse_var.value && strstr(mouse_var.value,"Mouse"))
mouse_type = NETRETROPAD_MOUSE;
else if (mouse_var.value && strstr(mouse_var.value,"Pointer"))
mouse_type = NETRETROPAD_POINTER;
else if (mouse_var.value && strstr(mouse_var.value,"Lightgun"))
mouse_type = NETRETROPAD_LIGHTGUN;
else if (mouse_var.value && strstr(mouse_var.value,"Old lightgun"))
mouse_type = NETRETROPAD_LIGHTGUN_OLD;
else
mouse_type = 0;

}

void NETRETROPAD_CORE_PREFIX(retro_set_audio_sample)(retro_audio_sample_t cb)
Expand Down Expand Up @@ -910,7 +1034,93 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)
sensor_item_colors[median_index] = (uint16_t)(fabsf(32*4*value)) << 11;
}
}

if (mouse_type == NETRETROPAD_MOUSE)
{
int offset;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_LEFT);
sensor_item_colors[80] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_MIDDLE);
sensor_item_colors[81] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_RIGHT);
sensor_item_colors[82] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_WHEELUP);
sensor_item_colors[83] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_WHEELDOWN);
sensor_item_colors[84] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP);
sensor_item_colors[85] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN);
sensor_item_colors[86] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_BUTTON_4);
sensor_item_colors[88] = mouse.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_BUTTON_5);
sensor_item_colors[89] = mouse.value[offset] ? 0xA000 : 0x0000;

}
else if (mouse_type == NETRETROPAD_LIGHTGUN)
{
int offset;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_AUX_A);
sensor_item_colors[70] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_AUX_B);
sensor_item_colors[71] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_AUX_C);
sensor_item_colors[72] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_TRIGGER);
sensor_item_colors[73] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_RELOAD);
sensor_item_colors[74] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_START);
sensor_item_colors[75] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_SELECT);
sensor_item_colors[76] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN);
sensor_item_colors[77] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_DPAD_UP);
sensor_item_colors[94] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_DPAD_DOWN);
sensor_item_colors[95] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_DPAD_LEFT);
sensor_item_colors[96] = lightgun.value[offset] ? 0xA000 : 0x0000;

offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_DPAD_RIGHT);
sensor_item_colors[97] = lightgun.value[offset] ? 0xA000 : 0x0000;

}
if (mouse_type == NETRETROPAD_POINTER || mouse_type == NETRETROPAD_LIGHTGUN)
{
sensor_item_colors[90] = (pointer_x == -32768) ? 0xA000 : 0x0000;
sensor_item_colors[100] = (pointer_x < -32700) ? 0xA000 : 0x0000;
sensor_item_colors[92] = (pointer_x == 32767) ? 0xA000 : 0x0000;
sensor_item_colors[102] = (pointer_x > 32700) ? 0xA000 : 0x0000;
sensor_item_colors[91] = (pointer_y == -32768) ? 0xA000 : 0x0000;
sensor_item_colors[101] = (pointer_y < -32700) ? 0xA000 : 0x0000;
sensor_item_colors[93] = (pointer_y == 32767) ? 0xA000 : 0x0000;
sensor_item_colors[103] = (pointer_y > 32700) ? 0xA000 : 0x0000;
}
if (mouse_type != 0)
sensor_item_colors[87] = (pointer_x == 0 && pointer_y == 0) ? 0xA000 : 0x0000;

/* Input test section start. */

Expand Down Expand Up @@ -1116,6 +1326,9 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)
}
else if (current_screen == NETRETROPAD_SCREEN_SENSORS)
{
unsigned pointer_x_coord = get_pixel_coordinate(pointer_x, 320);
unsigned pointer_y_coord = get_pixel_coordinate(pointer_y, 240);

for (rle = 0; rle < ARRAY_SIZE(sensor_buttons); )
{
unsigned runs;
Expand Down Expand Up @@ -1144,8 +1357,16 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)

pixel += 65;
}
}

if(pointer_x_coord != pointer_prev_x || pointer_y_coord != pointer_prev_y)
{
set_pixel(pointer_prev_x, pointer_prev_y, pointer_prev_color);
pointer_prev_color = set_pixel(pointer_x_coord, pointer_y_coord, 0xffff);
pointer_prev_x = pointer_x_coord;
pointer_prev_y = pointer_y_coord;
}
}

NETRETROPAD_CORE_PREFIX(video_cb)(frame_buf, 320, 240, 640);
retro_sleep(4);
}
Expand Down
34 changes: 17 additions & 17 deletions cores/libretro-net-retropad/remotepad.h
Original file line number Diff line number Diff line change
Expand Up @@ -700,23 +700,23 @@ static uint16_t sensor_buttons[] =
/* 102 */ 1, 255,
/* 103 */ 1, 255,
/* 104 */ 1, 255,
/* 105 */ 1, 255,
/* 106 */ 1, 255,
/* 107 */ 1, 255,
/* 108 */ 1, 255,
/* 109 */ 1, 255,
/* 110 */ 1, 255,
/* 111 */ 1, 255,
/* 112 */ 1, 255,
/* 113 */ 1, 255,
/* 114 */ 1, 255,
/* 115 */ 1, 255,
/* 116 */ 1, 255,
/* 117 */ 1, 255,
/* 118 */ 1, 255,
/* 119 */ 1, 255,
/* 120 */ 1, 255,
/* 121 */ 1, 255,
/* 105 */ 3, 220, 91, 15, 20,
/* 106 */ 31, 20, 70, 4, 5, 71, 4, 6, 72, 4, 4, 73, 6, 4, 74, 4, 6, 75, 3, 11, 76, 3, 11, 77, 3, 59, 94, 2, 8, 95, 2, 8, 96, 1, 8, 97, 1, 32, 90, 1, 1, 101, 13, 1, 92, 1, 19,
/* 107 */ 45, 19, 70, 2, 2, 70, 2, 4, 71, 2, 2, 71, 1, 4, 72, 2, 7, 73, 6, 4, 74, 2, 2, 74, 1, 4, 75, 1, 6, 75, 3, 4, 76, 1, 6, 76, 3, 4, 77, 1, 2, 77, 2, 57, 94, 4, 7, 95, 2, 7, 96, 2, 8, 97, 2, 31, 90, 1, 0, 100, 1, 13, 102, 1, 0, 92, 1, 19,
/* 108 */ 43, 19, 70, 2, 2, 70, 2, 4, 71, 4, 5, 72, 2, 9, 73, 2, 6, 74, 4, 5, 75, 4, 4, 75, 1, 5, 76, 4, 3, 76, 1, 6, 77, 1, 1, 77, 1, 1, 77, 1, 56, 94, 6, 6, 95, 2, 6, 96, 5, 4, 97, 5, 30, 90, 1, 0, 100, 1, 13, 102, 1, 0, 92, 1, 19,
/* 109 */ 41, 19, 70, 6, 4, 71, 4, 5, 72, 2, 9, 73, 2, 6, 74, 4, 6, 75, 4, 3, 75, 1, 6, 76, 4, 2, 76, 2, 5, 77, 1, 1, 77, 1, 1, 77, 1, 58, 94, 2, 6, 95, 6, 4, 96, 5, 4, 97, 5, 30, 90, 1, 0, 100, 1, 13, 102, 1, 0, 92, 1, 19,
/* 110 */ 45, 19, 70, 2, 2, 70, 2, 4, 71, 2, 2, 71, 1, 4, 72, 2, 9, 73, 2, 6, 74, 2, 2, 74, 1, 8, 75, 1, 3, 75, 1, 9, 76, 1, 2, 76, 1, 6, 77, 2, 2, 77, 1, 58, 94, 2, 7, 95, 4, 6, 96, 2, 8, 97, 2, 31, 90, 1, 0, 100, 1, 13, 102, 1, 0, 92, 1, 19,
/* 111 */ 43, 19, 70, 2, 2, 70, 2, 4, 71, 4, 6, 72, 4, 6, 73, 2, 6, 74, 2, 2, 74, 1, 5, 75, 3, 4, 75, 1, 6, 76, 3, 3, 76, 3, 5, 77, 3, 59, 94, 2, 8, 95, 2, 8, 96, 1, 8, 97, 1, 32, 90, 1, 0, 100, 1, 5, 87, 3, 5, 102, 1, 0, 92, 1, 19,
/* 112 */ 13, 219, 90, 1, 0, 100, 1, 4, 87, 1, 2, 87, 2, 4, 102, 1, 0, 92, 1, 19,
/* 113 */ 15, 219, 90, 1, 0, 100, 1, 4, 87, 1, 1, 87, 1, 1, 87, 1, 4, 102, 1, 0, 92, 1, 19,
/* 114 */ 15, 219, 90, 1, 0, 100, 1, 4, 87, 1, 1, 87, 1, 1, 87, 1, 4, 102, 1, 0, 92, 1, 19,
/* 115 */ 43, 19, 80, 2, 8, 81, 1, 4, 81, 1, 4, 82, 4, 4, 83, 2, 2, 83, 2, 4, 84, 4, 5, 85, 2, 1, 85, 1, 1, 85, 1, 8, 86, 2, 1, 86, 1, 1, 86, 1, 73, 88, 1, 5, 89, 6, 48, 90, 1, 0, 100, 1, 4, 87, 2, 2, 87, 1, 4, 102, 1, 0, 92, 1, 19,
/* 116 */ 49, 19, 80, 2, 8, 81, 6, 4, 82, 2, 2, 82, 1, 3, 83, 2, 2, 83, 2, 4, 84, 2, 2, 84, 1, 4, 85, 2, 1, 85, 1, 1, 85, 1, 2, 85, 1, 5, 86, 2, 1, 86, 1, 1, 86, 1, 1, 86, 1, 1, 86, 1, 68, 88, 2, 5, 89, 1, 53, 90, 1, 0, 100, 1, 5, 87, 3, 5, 102, 1, 0, 92, 1, 19,
/* 117 */ 45, 19, 80, 2, 8, 81, 6, 4, 82, 4, 4, 83, 2, 2, 83, 2, 4, 84, 2, 2, 84, 1, 4, 85, 2, 1, 85, 1, 1, 85, 1, 2, 85, 1, 5, 86, 2, 1, 86, 1, 1, 86, 1, 1, 86, 2, 68, 88, 1, 1, 88, 1, 5, 89, 5, 49, 90, 1, 0, 100, 1, 13, 102, 1, 0, 92, 1, 19,
/* 118 */ 47, 19, 80, 2, 8, 81, 2, 2, 81, 2, 4, 82, 2, 2, 82, 1, 3, 83, 2, 2, 83, 2, 4, 84, 2, 2, 84, 1, 4, 85, 2, 1, 85, 1, 1, 85, 1, 2, 85, 1, 5, 86, 2, 1, 86, 1, 1, 86, 1, 1, 86, 1, 68, 88, 5, 4, 89, 6, 48, 90, 1, 0, 100, 1, 13, 102, 1, 0, 92, 1, 19,
/* 119 */ 45, 19, 80, 2, 8, 81, 2, 2, 81, 2, 4, 82, 2, 2, 82, 1, 3, 83, 6, 4, 84, 2, 2, 84, 1, 4, 85, 2, 1, 85, 1, 1, 85, 1, 2, 85, 1, 5, 86, 2, 1, 86, 1, 1, 86, 1, 1, 86, 1, 71, 88, 1, 10, 89, 1, 48, 90, 1, 0, 100, 1, 13, 102, 1, 0, 92, 1, 19,
/* 120 */ 37, 19, 80, 6, 4, 81, 2, 2, 81, 2, 4, 82, 2, 2, 82, 1, 4, 83, 4, 5, 84, 4, 6, 85, 2, 1, 85, 1, 3, 85, 1, 6, 86, 2, 1, 86, 1, 2, 86, 1, 71, 88, 1, 5, 89, 5, 49, 90, 1, 1, 103, 13, 1, 92, 1, 19,
/* 121 */ 3, 220, 93, 15, 20,
/* 122 */ 1, 255,
/* 123 */ 1, 255,
/* 124 */ 1, 255,
Expand Down
Loading