>Synopsis: SO_RCVLOWAT may stall a TCP connection when the window is small
>Category: kernel
>Environment:
System : OpenBSD 7.6
Details : OpenBSD 7.6 (GENERIC) #332: Mon Sep 30 08:45:17 MDT 2024
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC
Architecture: OpenBSD.amd64
Machine : amd64
>Description:
When using SO_RCVLOWAT > 1 on a TCP socket, the connection may
stall if TCP Window Scaling is in use (default), with a scaling
factor > 0, and we end up with a small window.
At line 865 in src/sys/netinet/tcp_output.c, it looks like
we "round down" the window to the closest matching power of two
based on the window scaling factor.
With a scaling factor of 6, for example, if the space left in
our window is 50 _and_ our SO_RCVLOWAT is also 50, when we
compute (win>>tp->rcv_scale) we end up with a result of zero
which is then sent to the peer, which will then think our window
is full and stop sending, meaning we never reach our low
watermark in our receive buffer.
>How-To-Repeat:
This is easier to reproduce between two hosts where 1448-bytes sized
payloads are sent (MTU 1500) with a bit of latency between, such
as Internet. Usually works for me on the first try, but
sometimes may require a few iterations.
On the client, for the sample server below, we need a payload
large enough to give us a few packets:
$ dd if=/dev/zero of=data bs=5792 count=1
$ nc -N <ip address> 9790 < data
On the server:
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <err.h>
#include <string.h>
#include <unistd.h>
void
set_lowat(int fd)
{
int lowat = 8192;
socklen_t slen;
if (setsockopt(fd, SOL_SOCKET, SO_RCVLOWAT,
&lowat, sizeof(lowat)) == -1)
err(1, "setsockopt");
slen = sizeof(lowat);
if (getsockopt(fd, SOL_SOCKET, SO_RCVLOWAT,
&lowat, &slen) == -1)
err(1, "getsockopt");
printf("effective SO_RCVLOWAT = %d\n", lowat);
}
int
main(int argc, char **argv)
{
int lsock, fd;
int one = 1;
int rcvbuf = 4096;
int port = 9790;
struct sockaddr_in sa;
char buf[16384];
ssize_t r;
if ((lsock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
err(1, "socket");
if (setsockopt(lsock, SOL_SOCKET, SO_REUSEADDR,
&one, sizeof(one)) == -1)
err(1, "setsockopt");
if (setsockopt(lsock, SOL_SOCKET, SO_DEBUG, &one, sizeof(one))
== -1)
err(1, "setsockopt");
if (setsockopt(lsock, SOL_SOCKET, SO_RCVBUF,
&rcvbuf, sizeof(rcvbuf)) == -1)
err(1, "setsockopt");
bzero(&sa, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(port);
if (bind(lsock, (struct sockaddr *)&sa, sizeof(sa)) == -1)
err(1, "bind");
if (listen(lsock, 128) == -1)
err(1, "listen");
for (;;) {
if ((fd = accept(lsock, NULL, NULL)) == -1)
err(1, "accept");
for (;;) {
if ((r = read(fd, buf, sizeof(buf))) == -1)
err(1, "read");
set_lowat(fd);
if (r == 0)
break;
printf("read %ld bytes\n", r);
}
close(fd);
}
return 0;
}
The result can be seen both by tracing the socket using trpt or
with tcpdump/wireshark on the server:
After a packet or two we tell the peer that our window is zero,
even though we do have a few bytes left in the actual buffer and
our SO_RCVLOWAT has not yet been satisfied:
# tcpdump -ni em0 port 9790
tcpdump: listening on em0, link-type EN10MB
03:22:01.445159 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: S
2658430039:2658430039(0) win 64240 <mss 1460,sackOK,timestamp 762693848
0,nop,wscale 7> (DF)
03:22:01.445243 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: S
121054232:121054232(0) ack 2658430040 win 4096 <mss
1460,nop,nop,sackOK,nop,wscale 6,nop,nop,timestamp 13257920 762693848> (DF)
03:22:01.465282 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: . ack 1 win
502 <nop,nop,timestamp 762693866 13257920> (DF)
03:22:01.465284 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: .
1:1449(1448) ack 1 win 502 <nop,nop,timestamp 762693866 13257920> (DF)
03:22:01.466269 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: P
1449:2897(1448) ack 1 win 502 <nop,nop,timestamp 762693866 13257920> (DF)
03:22:01.466285 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 2897
win 45 <nop,nop,timestamp 13257940 762693866> (DF)
03:22:01.485378 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: .
2897:4345(1448) ack 1 win 502 <nop,nop,timestamp 762693886 13257940> (DF)
03:22:01.679051 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 4345
win 22 <nop,nop,timestamp 13258160 762693886> (DF)
03:22:01.707547 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: .
2897:4345(1448) ack 1 win 502 <nop,nop,timestamp 762694109 13257940> (DF)
03:22:01.707582 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 4345
win 22 <nop,nop,timestamp 13258180 762694109> (DF)
03:22:02.015726 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: P
4345:5753(1408) ack 1 win 502 <nop,nop,timestamp 762694413 13258180> (DF)
03:22:02.209048 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 5753
win 0 <nop,nop,timestamp 13258690 762694413> (DF)
03:22:02.710715 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: . ack 1 win
502 <nop,nop,timestamp 762695113 13258690> (DF)
03:22:02.710777 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 5753
win 0 <nop,nop,timestamp 13259190 762695113> (DF)
03:22:03.642587 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: . ack 1 win
502 <nop,nop,timestamp 762696041 13259190> (DF)
03:22:03.642653 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 5753
win 0 <nop,nop,timestamp 13260120 762696041> (DF)
^^^^^
03:22:05.467426 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: . ack 1 win
502 <nop,nop,timestamp 762697865 13260120> (DF)
03:22:05.467484 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 5753
win 0 <nop,nop,timestamp 13261940 762697865> (DF)
^^^^^
03:22:09.211839 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: . ack 1 win
502 <nop,nop,timestamp 762701609 13261940> (DF)
03:22:09.211911 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 5753
win 0 <nop,nop,timestamp 13265690 762701609> (DF)
^^^^^
03:22:16.378661 XXX.XXX.XX.XXX.34522 > YY.YYY.YYY.YY.9790: . ack 1 win
502 <nop,nop,timestamp 762708777 13265690> (DF)
03:22:16.378719 YY.YYY.YYY.YY.9790 > XXX.XXX.XX.XXX.34522: . ack 5753
win 0 <nop,nop,timestamp 13272850 762708777> (DF)
^^^^^
# netstat -Aan -f inet
Active Internet connections (including servers)
PCB Proto Recv-Q Send-Q Local Address Foreign
Address TCP-State
0xffff800000ad3350 tcp 4304 0 YY.YYY.YYY.YY.9790
XXX.XXX.XX.XXX.345 ESTABLISHED
...
# trpt -ast -p 0xffff800000ad3350
...
070 ESTABLISHED:output (src=YY.YYY.YYY.YY,9790,
dst=XXX.XXX.XX.XXX,34522)7372419@9e7482d0<ACK> -> ESTABLISHED
rcv_nxt 9e7482d0 rcv_wnd 28 snd_una 7372419 snd_nxt 7372419
snd_max 7372419
snd_wl1 9e7482cf snd_wl2 7372419 snd_wnd fb00
REXMT=-2091037899 (t_rxtshft=0), PERSIST=0, 2MSL=0, REAPER=0,
DELACK=-2091038424
015 ESTABLISHED:input (src=XXX.XXX.XX.XXX,34522,
dst=YY.YYY.YYY.YY,9790)9e7482cf@7372419(win=1f6)<ACK> -> ESTABLISHED
rcv_nxt 9e7482d0 rcv_wnd 28 snd_una 7372419 snd_nxt 7372419
snd_max 7372419
^^^^^^^^^^
snd_wl1 9e7482cf snd_wl2 7372419 snd_wnd fb00
REXMT=-2091037899 (t_rxtshft=0), PERSIST=0, 2MSL=0, REAPER=0,
DELACK=-2091038424
015 ESTABLISHED:output (src=YY.YYY.YYY.YY,9790,
dst=XXX.XXX.XX.XXX,34522)7372419@9e7482d0<ACK> -> ESTABLISHED
rcv_nxt 9e7482d0 rcv_wnd 28 snd_una 7372419 snd_nxt 7372419
snd_max 7372419
^^^^^^^^^^
snd_wl1 9e7482cf snd_wl2 7372419 snd_wnd fb00
REXMT=-2091037899 (t_rxtshft=0), PERSIST=0, 2MSL=0, REAPER=0,
DELACK=-2091038424
750 ESTABLISHED:input (src=XXX.XXX.XX.XXX,34522,
dst=YY.YYY.YYY.YY,9790)9e7482cf@7372419(win=1f6)<ACK> -> ESTABLISHED
rcv_nxt 9e7482d0 rcv_wnd 28 snd_una 7372419 snd_nxt 7372419
snd_max 7372419
^^^^^^^^^^
snd_wl1 9e7482cf snd_wl2 7372419 snd_wnd fb00
REXMT=-2091037899 (t_rxtshft=0), PERSIST=0, 2MSL=0, REAPER=0,
DELACK=-2091038424
750 ESTABLISHED:output (src=YY.YYY.YYY.YY,9790,
dst=XXX.XXX.XX.XXX,34522)7372419@9e7482d0<ACK> -> ESTABLISHED
rcv_nxt 9e7482d0 rcv_wnd 28 snd_una 7372419 snd_nxt 7372419
snd_max 7372419
^^^^^^^^^^
snd_wl1 9e7482cf snd_wl2 7372419 snd_wnd fb00
REXMT=-2091037899 (t_rxtshft=0), PERSIST=0, 2MSL=0, REAPER=0,
DELACK=-2091038424
The connection remains stalled from here on. The fact that trpt
shows us a rcv_wnd of 40 bytes makes sense given that 1448 << 6
(with a window scale of 6) rounds down to 22 * 2^6 = 1408. From
this point on we're unable to inform our peer that our window is
not full at a value less than 64.
>Fix:
<how to correct or work around the problem, if known (multiple lines)>
Setting sysctl net.inet.tcp.rfc1323 to 0 works around the problem as
it disables window scaling.
It appears that soreceive() and filt_soread() in
src/sys/kern/uipc_socket.c are unaware of the
window that we advertised to our peer and will not return bytes
to the application unless the amount specified by SO_RCVLOWAT is
fulfilled, even if we advertise a window of zero in tcp_output.c.
One possible approach (maybe?) would be for those functions to
ignore the value of SO_RCVLOWAT when we advertise a zero-window
to our peer, if they somehow had awareness that they are dealing
with a TCP socket.
SENDBUG: dmesg, pcidump, acpidump and usbdevs are attached.
SENDBUG: Feel free to delete or use the -D flag if they contain sensitive
information.
dmesg:
OpenBSD 7.6 (GENERIC) #332: Mon Sep 30 08:45:17 MDT 2024
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC
real mem = 1056833536 (1007MB)
avail mem = 1001848832 (955MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.8 @ 0xf5220 (9 entries)
bios0: vendor Linode
bios0: Linode Compute Instance
acpi0 at bios0: ACPI 1.0
acpi0: sleep states S3 S4 S5
acpi0: tables DSDT FACP APIC HPET WAET
acpi0: wakeup devices
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: AMD EPYC 7642 48-Core Processor, 2300.54 MHz, 17-31-00
cpu0: cpuid 1
edx=78bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2>
ecx=f7f83203<SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,HV>
cpu0: cpuid 6 eax=4<ARAT>
cpu0: cpuid 7.0
ebx=219c01ab<FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA>
ecx=400004<UMIP> edx=ac000000<IBRS,IBPB,STIBP,SSBD>
cpu0: cpuid d.1 eax=7<XSAVEOPT,XSAVEC,XGETBV1>
cpu0: cpuid 80000001 edx=2fd3fbff<NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG>
ecx=8003f3<LAHF,CMPLEG,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,CPCTR>
cpu0: cpuid 80000008 ebx=300d205<IBPB,IBRS,STIBP,SSBD,VIRTSSBD>
cpu0: 64KB 64b/line 2-way D-cache, 64KB 64b/line 2-way I-cache
cpu0: 512KB 64b/line 16-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 8 var ranges, 88 fixed ranges
cpu0: apic clock running at 1000MHz
ioapic0 at mainbus0: apid 0 pa 0xfec00000, version 11, 24 pins
acpihpet0 at acpi0: 100000000 Hz
acpiprt0 at acpi0: bus 0 (PCI0)
"ACPI0006" at acpi0 not configured
acpipci0 at acpi0 PCI0
"PNP0A06" at acpi0 not configured
"PNP0A06" at acpi0 not configured
"PNP0A06" at acpi0 not configured
"QEMU0002" at acpi0 not configured
com0 at acpi0 COM1 addr 0x3f8/0x8 irq 4: ns16550a, 16 byte fifo
com0: console
acpicmos0 at acpi0
"ACPI0010" at acpi0 not configured
acpicpu0 at acpi0: C1(@1 halt!)
pvbus0 at mainbus0: KVM
pvclock0 at pvbus0
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel 82441FX" rev 0x02
pcib0 at pci0 dev 1 function 0 "Intel 82371SB ISA" rev 0x00
pciide0 at pci0 dev 1 function 1 "Intel 82371SB IDE" rev 0x00: DMA, channel 0
wired to compatibility, channel 1 wired to compatibility
wd0 at pciide0 channel 0 drive 0: <QEMU HARDDISK>
wd0: 16-sector PIO, LBA48, 20000MB, 40960000 sectors
wd0(pciide0:0:0): using PIO mode 4, DMA mode 2
pciide0: channel 1 disabled (no drives)
piixpm0 at pci0 dev 1 function 3 "Intel 82371AB Power" rev 0x03: apic 0 int 9
iic0 at piixpm0
vga1 at pci0 dev 2 function 0 "Cirrus Logic CL-GD5446" rev 0x00
wsdisplay at vga1 not configured
em0 at pci0 dev 3 function 0 "Intel 82540EM" rev 0x03: apic 0 int 11, address
f2:3c:95:a5:2d:c4
isa0 at pcib0
isadma0 at isa0
fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0 mux 1
pms0 at pckbc0 (aux slot)
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vscsi0 at root
scsibus1 at vscsi0: 256 targets
softraid0 at root
scsibus2 at softraid0: 256 targets
root on wd0a (adc2ce2f9850f690.a) swap on wd0b dump on wd0b
fd0 at fdc0 drive 1: density unknown
usbdevs:
usbdevs: no USB controllers found
pcidump:
Domain /dev/pci0:
0:0:0: Intel 82441FX
0x0000: Vendor ID: 8086, Product ID: 1237
0x0004: Command: 0103, Status: 0000
0x0008: Class: 06 Bridge, Subclass: 00 Host,
Interface: 00, Revision: 02
0x000c: BIST: 00, Header Type: 00, Latency Timer: 00,
Cache Line Size: 00
0x0010: BAR empty (00000000)
0x0014: BAR empty (00000000)
0x0018: BAR empty (00000000)
0x001c: BAR empty (00000000)
0x0020: BAR empty (00000000)
0x0024: BAR empty (00000000)
0x0028: Cardbus CIS: 00000000
0x002c: Subsystem Vendor ID: 1af4 Product ID: 1100
0x0030: Expansion ROM Base Address: 00000000
0x0038: 00000000
0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
0x0000: 12378086 00000103 06000002 00000000
0x0010: 00000000 00000000 00000000 00000000
0x0020: 00000000 00000000 00000000 11001af4
0x0030: 00000000 00000000 00000000 00000000
0x0040: 00000000 00000000 00000000 00000000
0x0050: 00000000 80000000 11111000 33111111
0x0060: 00000000 00000000 00000000 00000000
0x0070: 000a0000 00000000 00000000 00000000
0x0080: 00000000 00000000 00000000 00000000
0x0090: 00000000 00000000 00000000 00000000
0x00a0: 00000000 00000000 00000000 00000000
0x00b0: 00000000 00000000 00000000 00000000
0x00c0: 00000000 00000000 00000000 00000000
0x00d0: 00000000 00000000 00000000 00000000
0x00e0: 00000000 00000000 00000000 00000000
0x00f0: 00000000 00000000 00000000 00000000
0:1:0: Intel 82371SB ISA
0x0000: Vendor ID: 8086, Product ID: 7000
0x0004: Command: 0103, Status: 0200
0x0008: Class: 06 Bridge, Subclass: 01 ISA,
Interface: 00, Revision: 00
0x000c: BIST: 00, Header Type: 80, Latency Timer: 00,
Cache Line Size: 00
0x0010: BAR empty (00000000)
0x0014: BAR empty (00000000)
0x0018: BAR empty (00000000)
0x001c: BAR empty (00000000)
0x0020: BAR empty (00000000)
0x0024: BAR empty (00000000)
0x0028: Cardbus CIS: 00000000
0x002c: Subsystem Vendor ID: 1af4 Product ID: 1100
0x0030: Expansion ROM Base Address: 00000000
0x0038: 00000000
0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
0x0000: 70008086 02000103 06010000 00800000
0x0010: 00000000 00000000 00000000 00000000
0x0020: 00000000 00000000 00000000 11001af4
0x0030: 00000000 00000000 00000000 00000000
0x0040: 00000000 00000000 00000000 0003004d
0x0050: 00000000 00000000 00000000 00000000
0x0060: 0b0b0a0a 00000000 00000200 00000000
0x0070: 00000080 0c0c0000 00000002 00000000
0x0080: 00000000 00000000 00000000 00000000
0x0090: 00000000 00000000 00000000 00000000
0x00a0: 00000008 00000000 0000000f 00000000
0x00b0: 00000000 00000000 00000000 00000000
0x00c0: 00000000 00000000 00000000 00000000
0x00d0: 00000000 00000000 00000000 00000000
0x00e0: 00000000 00000000 00000000 00000000
0x00f0: 00000000 00000000 00000000 00000000
0:1:1: Intel 82371SB IDE
0x0000: Vendor ID: 8086, Product ID: 7010
0x0004: Command: 0107, Status: 0280
0x0008: Class: 01 Mass Storage, Subclass: 01 IDE,
Interface: 80, Revision: 00
0x000c: BIST: 00, Header Type: 00, Latency Timer: 00,
Cache Line Size: 00
0x0010: BAR empty (00000000)
0x0014: BAR empty (00000000)
0x0018: BAR empty (00000000)
0x001c: BAR empty (00000000)
0x0020: BAR io addr: 0x0000c040/0x0010
0x0024: BAR empty (00000000)
0x0028: Cardbus CIS: 00000000
0x002c: Subsystem Vendor ID: 1af4 Product ID: 1100
0x0030: Expansion ROM Base Address: 00000000
0x0038: 00000000
0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
0x0000: 70108086 02800107 01018000 00000000
0x0010: 00000000 00000000 00000000 00000000
0x0020: 0000c041 00000000 00000000 11001af4
0x0030: 00000000 00000000 00000000 00000000
0x0040: 0000a307 00000000 00000000 00000000
0x0050: 00000000 00000000 00000000 00000000
0x0060: 00000000 00000000 00000000 00000000
0x0070: 00000000 00000000 00000000 00000000
0x0080: 00000000 00000000 00000000 00000000
0x0090: 00000000 00000000 00000000 00000000
0x00a0: 00000000 00000000 00000000 00000000
0x00b0: 00000000 00000000 00000000 00000000
0x00c0: 00000000 00000000 00000000 00000000
0x00d0: 00000000 00000000 00000000 00000000
0x00e0: 00000000 00000000 00000000 00000000
0x00f0: 00000000 00000000 00000000 00000000
0:1:3: Intel 82371AB Power
0x0000: Vendor ID: 8086, Product ID: 7113
0x0004: Command: 0103, Status: 0280
0x0008: Class: 06 Bridge, Subclass: 80 Miscellaneous,
Interface: 00, Revision: 03
0x000c: BIST: 00, Header Type: 00, Latency Timer: 00,
Cache Line Size: 00
0x0010: BAR empty (00000000)
0x0014: BAR empty (00000000)
0x0018: BAR empty (00000000)
0x001c: BAR empty (00000000)
0x0020: BAR empty (00000000)
0x0024: BAR empty (00000000)
0x0028: Cardbus CIS: 00000000
0x002c: Subsystem Vendor ID: 1af4 Product ID: 1100
0x0030: Expansion ROM Base Address: 00000000
0x0038: 00000000
0x003c: Interrupt Pin: 01 Line: 09 Min Gnt: 00 Max Lat: 00
0x0000: 71138086 02800103 06800003 00000000
0x0010: 00000000 00000000 00000000 00000000
0x0020: 00000000 00000000 00000000 11001af4
0x0030: 00000000 00000000 00000000 00000109
0x0040: 00000601 00000000 00000000 00000000
0x0050: 00000000 00000000 02000000 10000000
0x0060: 60000000 08000000 00000000 00000000
0x0070: 00000000 00000000 00000000 00000000
0x0080: 00000001 00000000 00000000 00000000
0x0090: 00000701 00000000 00000000 00000000
0x00a0: 00000000 00000000 00000000 00000000
0x00b0: 00000000 00000000 00000000 00000000
0x00c0: 00000000 00000000 00000000 00000000
0x00d0: 00090000 00000000 00000000 00000000
0x00e0: 00000000 00000000 00000000 00000000
0x00f0: 00000000 00000000 00000000 00000000
0:2:0: Cirrus Logic CL-GD5446
0x0000: Vendor ID: 1013, Product ID: 00b8
0x0004: Command: 0107, Status: 0000
0x0008: Class: 03 Display, Subclass: 00 VGA,
Interface: 00, Revision: 00
0x000c: BIST: 00, Header Type: 00, Latency Timer: 00,
Cache Line Size: 00
0x0010: BAR mem prefetchable 32bit addr: 0xfc000000/0x02000000
0x0014: BAR mem 32bit addr: 0xfebf0000/0x00001000
0x0018: BAR empty (00000000)
0x001c: BAR empty (00000000)
0x0020: BAR empty (00000000)
0x0024: BAR empty (00000000)
0x0028: Cardbus CIS: 00000000
0x002c: Subsystem Vendor ID: 1af4 Product ID: 1100
0x0030: Expansion ROM Base Address: febe0000
0x0038: 00000000
0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
0x0000: 00b81013 00000107 03000000 00000000
0x0010: fc000008 febf0000 00000000 00000000
0x0020: 00000000 00000000 00000000 11001af4
0x0030: febe0000 00000000 00000000 00000000
0x0040: 00000000 00000000 00000000 00000000
0x0050: 00000000 00000000 00000000 00000000
0x0060: 00000000 00000000 00000000 00000000
0x0070: 00000000 00000000 00000000 00000000
0x0080: 00000000 00000000 00000000 00000000
0x0090: 00000000 00000000 00000000 00000000
0x00a0: 00000000 00000000 00000000 00000000
0x00b0: 00000000 00000000 00000000 00000000
0x00c0: 00000000 00000000 00000000 00000000
0x00d0: 00000000 00000000 00000000 00000000
0x00e0: 00000000 00000000 00000000 00000000
0x00f0: 00000000 00000000 00000000 00000000
0:3:0: Intel 82540EM
0x0000: Vendor ID: 8086, Product ID: 100e
0x0004: Command: 0107, Status: 0000
0x0008: Class: 02 Network, Subclass: 00 Ethernet,
Interface: 00, Revision: 03
0x000c: BIST: 00, Header Type: 00, Latency Timer: 00,
Cache Line Size: 00
0x0010: BAR mem 32bit addr: 0xfebc0000/0x00020000
0x0014: BAR io addr: 0x0000c000/0x0040
0x0018: BAR empty (00000000)
0x001c: BAR empty (00000000)
0x0020: BAR empty (00000000)
0x0024: BAR empty (00000000)
0x0028: Cardbus CIS: 00000000
0x002c: Subsystem Vendor ID: 1af4 Product ID: 1100
0x0030: Expansion ROM Base Address: feb80000
0x0038: 00000000
0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
0x0000: 100e8086 00000107 02000003 00000000
0x0010: febc0000 0000c001 00000000 00000000
0x0020: 00000000 00000000 00000000 11001af4
0x0030: feb80000 00000000 00000000 0000010b
0x0040: 00000000 00000000 00000000 00000000
0x0050: 00000000 00000000 00000000 00000000
0x0060: 00000000 00000000 00000000 00000000
0x0070: 00000000 00000000 00000000 00000000
0x0080: 00000000 00000000 00000000 00000000
0x0090: 00000000 00000000 00000000 00000000
0x00a0: 00000000 00000000 00000000 00000000
0x00b0: 00000000 00000000 00000000 00000000
0x00c0: 00000000 00000000 00000000 00000000
0x00d0: 00000000 00000000 00000000 00000000
0x00e0: 00000000 00000000 00000000 00000000
0x00f0: 00000000 00000000 00000000 00000000
acpidump:
begin-base64 644 APIC.3
QVBJQ3gAAAABikJPQ0hTIEJYUEMgICAgAQAAAEJYUEMBAAAAAADg/gEAAAAACAAAAQAAAAEMAAAA
AMD+AAAAAAIKAAACAAAAAAACCgAFBQAAAA0AAgoACQkAAAANAAIKAAoKAAAADQACCgALCwAAAA0A
BAb/AAAB
====
begin-base64 644 DSDT.2
RFNEVLcYAAABeEJPQ0hTIEJYUEMgICAgAQAAAEJYUEMBAAAAEEkEXABbgERCR18BCwIEAVuBC0RC
R18BREJHQggULERCVUcBmGhglmBgdIdgAWFwAGKiEJViYXCDiGBiAERCR0J1YnAKCkRCR0IQIl9T
Ql9bghtQQ0kwCF9ISUQMQdAKAwhfQURSAAhfVUlEABBMFC5fU0JfUENJMFuAUENTVAELAK4KCFuB
EFBDU1RDUENJVSBQQ0lEIFuAU0VKXwELCK4KBFuBC1NFSl9DQjBFSiBbgEJOTVIBCxCuCghbgRBC
Tk1SQ0JOVU0gUElEWCBbAUJMQ0sAFCVQQ0VKAlsjQkxDS///cGhCTlVNcHkBaQBCMEVKWydCTENL
pAAUK0FJRFgCWyNCTENL//9waEJOVU1weQFpAFBJRFhwUElEWGBbJ0JMQ0ukYBRCCVBEU00NoEQG
k2oAcBEDAQBgcABhoBqSk2gREwoQ0DfJ5VM1ek2RF+pNGcNDTaRgoAeVaQoCpGBwQUlEWIOIbAAA
g4hsAQBioBqSfZNiAJNiDP////8AfWEBYX1heQEKBwBhcGGIYAAApGCgJZNqCgdwEgUCAA0AYHBB
SURYg4hsAACDiGwBAGJwYohgAACkYBBINF9TQl8QSwpQQ0kwFEQKX1BSVABwEgKAYHAAYaJCCZVh
CoBwemEKAgBicHtyYWIACgMAY6AQk2MAcBIJBAAATE5LRABkoCSTYwGgEZNhCgRwEgkEAABMTktT
AGShDXASCQQAAExOS0EAZKARk2MKAnASCQQAAExOS0IAZKARk2MKA3ASCQQAAExOS0MAZHB9eWIK
EAAL//8AiGQAAHB7YQoDAIhkAQBwZIhgYQB1YaRgFBNJUVNUAaAJewqAaACkCgmkCgsUNklRQ1IJ
CFBSUjARDgoLiQYACQEAAAAAeQCKUFJSMAoFUFJSSaALlWgKgHBoUFJSSaRQUlIwW4JMB0xOS0EI
X0hJRAxB0AwPCF9VSUQACF9QUlMRFgoTiQ4ACQMFAAAACgAAAAsAAAB5ABQPX1NUQQCkSVFTVFBS
UTAUEV9ESVMAfVBSUTAKgFBSUTAUD19DUlMApElRQ1JQUlEwFBdfU1JTAYpoCgVQUlJJcFBSUklQ
UlEwW4JMB0xOS0IIX0hJRAxB0AwPCF9VSUQBCF9QUlMRFgoTiQ4ACQMFAAAACgAAAAsAAAB5ABQP
X1NUQQCkSVFTVFBSUTEUEV9ESVMAfVBSUTEKgFBSUTEUD19DUlMApElRQ1JQUlExFBdfU1JTAYpo
CgVQUlJJcFBSUklQUlExW4JNB0xOS0MIX0hJRAxB0AwPCF9VSUQKAghfUFJTERYKE4kOAAkDBQAA
AAoAAAALAAAAeQAUD19TVEEApElRU1RQUlEyFBFfRElTAH1QUlEyCoBQUlEyFA9fQ1JTAKRJUUNS
UFJRMhQXX1NSUwGKaAoFUFJSSXBQUlJJUFJRMluCTQdMTktECF9ISUQMQdAMDwhfVUlECgMIX1BS
UxEWChOJDgAJAwUAAAAKAAAACwAAAHkAFA9fU1RBAKRJUVNUUFJRMxQRX0RJUwB9UFJRMwqAUFJR
MxQPX0NSUwCkSVFDUlBSUTMUF19TUlMBimgKBVBSUklwUFJSSVBSUTNbgk8ETE5LUwhfSElEDEHQ
DA8IX1VJRAoECF9QUlMRDgoLiQYACQEJAAAAeQAUCV9TVEEApAoLFAZfRElTABQLX0NSUwCkX1BS
UxQGX1NSUwEQTQhfU0JfW4JFCEhQRVQIX0hJRAxB0AEDCF9VSUQAW4BIUFRNAAwAAND+CwAEW4EQ
SFBUTRNWRU5EIFBSRF8gFDZfU1RBAHBWRU5EYHBQUkRfYXpgChBgoAyRk2AAk2AL//+kAKAOkZNh
AJRhDADh9QWkAKQKDwhfQ1JTEREKDoYJAAAAAND+AAQAAHkAEBRfR1BFCF9ISUQNQUNQSTAwMDYA
EE8+X1NCX1uCSApcLwNfU0JfUENJMFBSRVMIX0hJRAxB0AoGCF9VSUQNQ1BVIEhvdHBsdWcgcmVz
b3VyY2VzAFsBQ1BMSwAIX0NSUxENCgpHAQCvAK8BDHkAW4BQUlNUAQsArwoMW4EoUFJTVEEAIENQ
RU4BQ0lOUwFDUk1WAUNFSjABQ0VKRgEAA0NDTUQIW4ESUFJTVANDU0VMIAAgQ0RBVCAUDF9JTkkI
cABDU0VMW4JNM1wuX1NCX0NQVVMIX0hJRA1BQ1BJMDAxMAAIX0NJRAxB0AoFFBFDVEZZAqAKk2gA
hkMwMDBpFEgGQ1NUQQlbI1wvBF9TQl9QQ0kwUFJFU0NQTEv//3BoXC8EX1NCX1BDSTBQUkVTQ1NF
THAAYKAak1wvBF9TQl9QQ0kwUFJFU0NQRU4BcAoPYFsnXC8EX1NCX1BDSTBQUkVTQ1BMS6RgFE0F
Q0VKMAlbI1wvBF9TQl9QQ0kwUFJFU0NQTEv//3BoXC8EX1NCX1BDSTBQUkVTQ1NFTHABXC8EX1NC
X1BDSTBQUkVTQ0VKMFsnXC8EX1NCX1BDSTBQUkVTQ1BMSxRGFkNTQ04IWyNcLwRfU0JfUENJMFBS
RVNDUExL//8IQ05FVxIC/3AAY3ABZKJEEpNkAXAAZHABYHAAYaJMDJCTYAGVYwFwAGBwY1wvBF9T
Ql9QQ0kwUFJFU0NTRUxwAFwvBF9TQl9QQ0kwUFJFU0NDTUSgF5VcLwRfU0JfUENJMFBSRVNDREFU
Y6WgCZNhCv9wAWSlcFwvBF9TQl9QQ0kwUFJFU0NEQVRjoCSTXC8EX1NCX1BDSTBQUkVTQ0lOUwFw
Y4hDTkVXYQB1YXABYKE3oDWTXC8EX1NCX1BDSTBQUkVTQ1JNVgFDVEZZYwoDcAFcLwRfU0JfUENJ
MFBSRVNDUk1WcAFgdWNwAGKiRQSVYmFwg4hDTkVXYgBjQ1RGWWMBcGNbMXBjXC8EX1NCX1BDSTBQ
UkVTQ1NFTHABXC8EX1NCX1BDSTBQUkVTQ0lOU3ViWydcLwRfU0JfUENJMFBSRVNDUExLFE0JQ09T
VAxbI1wvBF9TQl9QQ0kwUFJFU0NQTEv//3BoXC8EX1NCX1BDSTBQUkVTQ1NFTHABXC8EX1NCX1BD
STBQUkVTQ0NNRHBpXC8EX1NCX1BDSTBQUkVTQ0RBVHAKAlwvBF9TQl9QQ0kwUFJFU0NDTURwalwv
BF9TQl9QQ0kwUFJFU0NEQVRbJ1wvBF9TQl9QQ0kwUFJFU0NQTEtbgzhDMDAwAAAAAAAAFAxfU1RB
CKRDU1RBAAhfTUFUEQsKCAAIAAABAAAAFA5fT1NUC0NPU1QAaGlqFBtcLl9HUEVfRTAyAFwvA19T
Ql9DUFVTQ1NDThBDFFwuX1NCX1BDSTAIX0NSUxFACgqciA0AAgwAAAAAAP8AAAAAAUcB+Az4DAEI
iA0AAQwDAAAAAPcMAAD4DIgNAAEMAwAAAA3//wAAAPOHFwAADAMAAAAAAAAKAP//CwAAAAAAAAAC
AIcXAAAMAQAAAAAAAABA//+//gAAAAAAAMC+iisAAAwDAAAAAAAAAAAAAAAAAQAAAP///38BAAAA
AAAAAAAAAAAAAACAAAAAAHkAW4JDBEdQRTAIX0hJRA1QTlAwQTA2AAhfVUlEDUdQRTAgcmVzb3Vy
Y2VzAAhfU1RBCgsIX0NSUxENCgpHAeCv4K8BBHkAW4JKBFBIUFIIX0hJRA1QTlAwQTA2AAhfVUlE
DVBDSSBIb3RwbHVnIHJlc291cmNlcwAIX1NUQQoLCF9DUlMRDQoKRwEArgCuARh5ABApXAAIX1Mz
XxIGBAEBAAAIX1M0XxIIBAoCCgIAAAhfUzVfEgYEAAAAABA7XC5fU0JfUENJMFuCLkZXQ0YIX0hJ
RA1RRU1VMDAwMgAIX1NUQQoLCF9DUlMRDQoKRwEQBRAFAQx5ABBGz1xfU0JfEE7OUENJMAhCU0VM
AFuCL1MwMF8IX0FEUgAIQVNVTgAUHV9EU00McBIKAkJTRUxBU1VOYKRQRFNNaGlqa2BbgkMXUzA4
XwhfQURSDAAAAQAIQVNVTgEUHV9EU00McBIKAkJTRUxBU1VOYKRQRFNNaGlqa2BbgFA0MEMCCmAK
BBAsXF9TQl9bgSQvA1BDSTBTMDhfUDQwQwFQUlEwCFBSUTEIUFJRMghQUlEzCFuCNEtCRF8IX0hJ
RAxB0AMDCF9TVEEKDwhfQ1JTERgKFUcBYABgAAEBRwFkAGQAAQEiAgB5AFuCJE1PVV8IX0hJRAxB
0A8TCF9TVEEKDwhfQ1JTEQgKBSIAEHkAW4JOBEZEQzAIX0hJRAxB0AcACF9DUlMRGwoYRwHyA/ID
AARHAfcD9wMAASJAACoEAHkACF9GREURFwoUAAAAAAAAAAAAAAAAAAAAAAIAAABbgjJDT00xCF9I
SUQMQdAFAQhfVUlEAQhfU1RBCg8IX0NSUxEQCg1HAfgD+AMACCIQAHkAW4IlUlRDXwhfSElEDEHQ
CwAIX0NSUxEQCg1HAXAAcAABCCIAAXkAW4I0UzEwXwhfQURSDAAAAgAIQVNVTgoCFB1fRFNNDHAS
CgJCU0VMQVNVTmCkUERTTWhpamtgW4JPBFMxOF8IX0FEUgwAAAMACEFTVU4KAxQdX0RTTQxwEgoC
QlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCgMUEl9FSjABUENFSkJTRUxfU1VOW4JPBFMyMF8IX0FE
UgwAAAQACEFTVU4KBBQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCgQUEl9FSjAB
UENFSkJTRUxfU1VOW4JPBFMyOF8IX0FEUgwAAAUACEFTVU4KBRQdX0RTTQxwEgoCQlNFTEFTVU5g
pFBEU01oaWprYAhfU1VOCgUUEl9FSjABUENFSkJTRUxfU1VOW4JPBFMzMF8IX0FEUgwAAAYACEFT
VU4KBhQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCgYUEl9FSjABUENFSkJTRUxf
U1VOW4JPBFMzOF8IX0FEUgwAAAcACEFTVU4KBxQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWpr
YAhfU1VOCgcUEl9FSjABUENFSkJTRUxfU1VOW4JPBFM0MF8IX0FEUgwAAAgACEFTVU4KCBQdX0RT
TQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCggUEl9FSjABUENFSkJTRUxfU1VOW4JPBFM0
OF8IX0FEUgwAAAkACEFTVU4KCRQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCgkU
El9FSjABUENFSkJTRUxfU1VOW4JPBFM1MF8IX0FEUgwAAAoACEFTVU4KChQdX0RTTQxwEgoCQlNF
TEFTVU5gpFBEU01oaWprYAhfU1VOCgoUEl9FSjABUENFSkJTRUxfU1VOW4JPBFM1OF8IX0FEUgwA
AAsACEFTVU4KCxQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCgsUEl9FSjABUENF
SkJTRUxfU1VOW4JPBFM2MF8IX0FEUgwAAAwACEFTVU4KDBQdX0RTTQxwEgoCQlNFTEFTVU5gpFBE
U01oaWprYAhfU1VOCgwUEl9FSjABUENFSkJTRUxfU1VOW4JPBFM2OF8IX0FEUgwAAA0ACEFTVU4K
DRQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCg0UEl9FSjABUENFSkJTRUxfU1VO
W4JPBFM3MF8IX0FEUgwAAA4ACEFTVU4KDhQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhf
U1VOCg4UEl9FSjABUENFSkJTRUxfU1VOW4JPBFM3OF8IX0FEUgwAAA8ACEFTVU4KDxQdX0RTTQxw
EgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCg8UEl9FSjABUENFSkJTRUxfU1VOW4JPBFM4MF8I
X0FEUgwAABAACEFTVU4KEBQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChAUEl9F
SjABUENFSkJTRUxfU1VOW4JPBFM4OF8IX0FEUgwAABEACEFTVU4KERQdX0RTTQxwEgoCQlNFTEFT
VU5gpFBEU01oaWprYAhfU1VOChEUEl9FSjABUENFSkJTRUxfU1VOW4JPBFM5MF8IX0FEUgwAABIA
CEFTVU4KEhQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChIUEl9FSjABUENFSkJT
RUxfU1VOW4JPBFM5OF8IX0FEUgwAABMACEFTVU4KExQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01o
aWprYAhfU1VOChMUEl9FSjABUENFSkJTRUxfU1VOW4JPBFNBMF8IX0FEUgwAABQACEFTVU4KFBQd
X0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChQUEl9FSjABUENFSkJTRUxfU1VOW4JP
BFNBOF8IX0FEUgwAABUACEFTVU4KFRQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VO
ChUUEl9FSjABUENFSkJTRUxfU1VOW4JPBFNCMF8IX0FEUgwAABYACEFTVU4KFhQdX0RTTQxwEgoC
QlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChYUEl9FSjABUENFSkJTRUxfU1VOW4JPBFNCOF8IX0FE
UgwAABcACEFTVU4KFxQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChcUEl9FSjAB
UENFSkJTRUxfU1VOW4JPBFNDMF8IX0FEUgwAABgACEFTVU4KGBQdX0RTTQxwEgoCQlNFTEFTVU5g
pFBEU01oaWprYAhfU1VOChgUEl9FSjABUENFSkJTRUxfU1VOW4JPBFNDOF8IX0FEUgwAABkACEFT
VU4KGRQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChkUEl9FSjABUENFSkJTRUxf
U1VOW4JPBFNEMF8IX0FEUgwAABoACEFTVU4KGhQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWpr
YAhfU1VOChoUEl9FSjABUENFSkJTRUxfU1VOW4JPBFNEOF8IX0FEUgwAABsACEFTVU4KGxQdX0RT
TQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChsUEl9FSjABUENFSkJTRUxfU1VOW4JPBFNF
MF8IX0FEUgwAABwACEFTVU4KHBQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOChwU
El9FSjABUENFSkJTRUxfU1VOW4JPBFNFOF8IX0FEUgwAAB0ACEFTVU4KHRQdX0RTTQxwEgoCQlNF
TEFTVU5gpFBEU01oaWprYAhfU1VOCh0UEl9FSjABUENFSkJTRUxfU1VOW4JPBFNGMF8IX0FEUgwA
AB4ACEFTVU4KHhQdX0RTTQxwEgoCQlNFTEFTVU5gpFBEU01oaWprYAhfU1VOCh4UEl9FSjABUENF
SkJTRUxfU1VOW4JPBFNGOF8IX0FEUgwAAB8ACEFTVU4KHxQdX0RTTQxwEgoCQlNFTEFTVU5gpFBE
U01oaWprYAhfU1VOCh8UEl9FSjABUENFSkJTRUxfU1VOFEgbRFZOVAKgDHtoCggAhlMxOF9poAx7
aAoQAIZTMjBfaaAMe2gKIACGUzI4X2mgDHtoCkAAhlMzMF9poAx7aAqAAIZTMzhfaaANe2gLAAEA
hlM0MF9poA17aAsAAgCGUzQ4X2mgDXtoCwAEAIZTNTBfaaANe2gLAAgAhlM1OF9poA17aAsAEACG
UzYwX2mgDXtoCwAgAIZTNjhfaaANe2gLAEAAhlM3MF9poA17aAsAgACGUzc4X2mgD3toDAAAAQAA
hlM4MF9poA97aAwAAAIAAIZTODhfaaAPe2gMAAAEAACGUzkwX2mgD3toDAAACAAAhlM5OF9poA97
aAwAABAAAIZTQTBfaaAPe2gMAAAgAACGU0E4X2mgD3toDAAAQAAAhlNCMF9poA97aAwAAIAAAIZT
QjhfaaAPe2gMAAAAAQCGU0MwX2mgD3toDAAAAAIAhlNDOF9poA97aAwAAAAEAIZTRDBfaaAPe2gM
AAAACACGU0Q4X2mgD3toDAAAABAAhlNFMF9poA97aAwAAAAgAIZTRThfaaAPe2gMAAAAQACGU0Yw
X2mgD3toDAAAAIAAhlNGOF9pFB9QQ05UAHAAQk5VTURWTlRQQ0lVAURWTlRQQ0lECgMQP19HUEUU
OV9FMDEAWyNcLwNfU0JfUENJMEJMQ0v//1wvA19TQl9QQ0kwUENOVFsnXC8DX1NCX1BDSTBCTENL
====
begin-base64 644 FACP.1
RkFDUHQAAAABgUJPQ0hTIEJYUEMgICAgAQAAAEJYUEMBAAAAAAD+P0AA/j8BAAkAsgAAAPHwAAAA
BgAAAAAAAAQGAAAAAAAAAAAAAAgGAADgrwAAAAAAAAQCAAQEAAAA/w//DwAAAAAAAAAAMgAAAKWA
AAA=
====
begin-base64 644 HPET.4
SFBFVDgAAAABtEJPQ0hTIEJYUEMgICAgAQAAAEJYUEMBAAAAAaKGgAAAAAAAAND+AAAAAAAAAAA=
====
begin-base64 644 RSDT.0
UlNEVDQAAAABa0JPQ0hTIEJYUEMgICAgAQAAAEJYUEMBAAAA9xj+P2sZ/j/jGf4/Gxr+Pw==
====
begin-base64 644 WAET.5
V0FFVCgAAAABOUJPQ0hTIEJYUEMgICAgAQAAAEJYUEMBAAAAAgAAAA==
====
begin-base64 644 headers
ClJTRCBQVFI6IENoZWNrc3VtPTE4NCwgT0VNSUQ9Qk9DSFMsIFJldmlzaW9uPTAsIFJzZHRBZGRy
ZXNzPTB4M2ZmZTFhNDMKCgpSU0RUOiBMZW5ndGg9NTIsIFJldmlzaW9uPTEsIENoZWNrc3VtPTEw
NywKCU9FTUlEPUJPQ0hTLCBPRU0gVGFibGUgSUQ9QlhQQywgT0VNIFJldmlzaW9uPTB4MSwKCUNy
ZWF0b3IgSUQ9QlhQQywgQ3JlYXRvciBSZXZpc2lvbj0weDEKCgoJRW50cmllcz17IDB4M2ZmZTE4
ZjcsIDB4M2ZmZTE5NmIsIDB4M2ZmZTE5ZTMsIDB4M2ZmZTFhMWIgfQoKCglEU0RUPTB4M2ZmZTAw
NDAKCUlOVF9NT0RFTD1BUElDCglTQ0lfSU5UPTkKCVNNSV9DTUQ9MHhiMiwgQUNQSV9FTkFCTEU9
MHhmMSwgQUNQSV9ESVNBQkxFPTB4ZjAsIFM0QklPU19SRVE9MHgwCglQTTFhX0VWVF9CTEs9MHg2
MDAtMHg2MDMKCVBNMWFfQ05UX0JMSz0weDYwNC0weDYwNQoJUE0yX1RNUl9CTEs9MHg2MDgtMHg2
MGIKCVBNMl9HUEUwX0JMSz0weGFmZTAtMHhhZmUzCglQX0xWTDJfTEFUPTQwOTVtcywgUF9MVkwz
X0xBVD00MDk1bXMKCUZMVVNIX1NJWkU9MCwgRkxVU0hfU1RSSURFPTAKCURVVFlfT0ZGU0VUPTAs
IERVVFlfV0lEVEg9MAoJREFZX0FMUk09MCwgTU9OX0FMUk09MCwgQ0VOVFVSWT01MAoJRmxhZ3M9
e1dCSU5WRCxQUk9DX0MxLFNMUF9CVVRUT04sUlRDX1M0fQoKCkRTRFQ6IExlbmd0aD02MzI3LCBS
ZXZpc2lvbj0xLCBDaGVja3N1bT0xMjAsCglPRU1JRD1CT0NIUywgT0VNIFRhYmxlIElEPUJYUEMs
IE9FTSBSZXZpc2lvbj0weDEsCglDcmVhdG9yIElEPUJYUEMsIENyZWF0b3IgUmV2aXNpb249MHgx
CgoKQVBJQzogTGVuZ3RoPTEyMCwgUmV2aXNpb249MSwgQ2hlY2tzdW09MTM4LAoJT0VNSUQ9Qk9D
SFMsIE9FTSBUYWJsZSBJRD1CWFBDLCBPRU0gUmV2aXNpb249MHgxLAoJQ3JlYXRvciBJRD1CWFBD
LCBDcmVhdG9yIFJldmlzaW9uPTB4MQoKCkhQRVQ6IExlbmd0aD01NiwgUmV2aXNpb249MSwgQ2hl
Y2tzdW09MTgwLAoJT0VNSUQ9Qk9DSFMsIE9FTSBUYWJsZSBJRD1CWFBDLCBPRU0gUmV2aXNpb249
MHgxLAoJQ3JlYXRvciBJRD1CWFBDLCBDcmVhdG9yIFJldmlzaW9uPTB4MQoKCldBRVQ6IExlbmd0
aD00MCwgUmV2aXNpb249MSwgQ2hlY2tzdW09NTcsCglPRU1JRD1CT0NIUywgT0VNIFRhYmxlIElE
PUJYUEMsIE9FTSBSZXZpc2lvbj0weDEsCglDcmVhdG9yIElEPUJYUEMsIENyZWF0b3IgUmV2aXNp
b249MHgxCgo=
====