softraid crypto performance regression

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

softraid crypto performance regression

m.reed
> Synopsis: softraid crypto performance regression
> Category: system
> Environment:
        System      : OpenBSD 6.1
        Details     : OpenBSD 6.1-current (GENERIC.MP) #51: Sat May  6 12:01:40
MDT 2017
                         [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP

        Architecture: OpenBSD.amd64
        Machine     : amd64
> Description:
The issue appeared after upgrading from the April 20th snapshot to
the May 6th one.  For context, my whole disk is encrypted, as
described in the FAQ
(https://www.openbsd.org/faq/faq14.html#softraidFDE);
see below for disklabel information.

With the April 20th snapshot, disk performance was fine; but with
the May 6th snapshot everything is slow. For example, where before
it took ~5 seconds for Libreoffice to open, now it takes ~30 seconds.


> How-To-Repeat:
These instructions assume that you have the same disk setup as me; see
below for my disklabel information.
1. download OpenBSD 6.1 miniroot.fs
2. dd it to a USB drive
3. boot it
4. when the OpenBSD installer prompt comes up, hit "s" for (S)hell
5. configure the existing crypto volume:
      # bioctl -c C -l /dev/sd0a softraid0
      (enter existing volume password)
      (crypto volume now mounted on /dev/sd2*)
6. mount a partition in the crypto volume:
      # mount /dev/sd2k /mnt
      # cd /mnt
7. create a blob of random data:
      # dd if=/dev/random of=random_data bs=1m count=512
8. test disk performance:
      # for i in 1 2 3; do sync && time cp random_data test$i; done
9. record results
10. repeat from step 1, replacing the 6.1 miniroot.fs with the May 6th
snapshot miniroot.fs
11. compare results

Here's my results:
   6.1:            28.89s,   36.39s,   27.63s
   May 6 snapshot: 2m12.01s, 2m16.31s, 2m30.47s

I know that many commits occurred between 6.1's release and May 6,
so, if needed, I can bisect for the problem commit. Besides that,
let me know if you need more info.


> Fix:
        Not known.



# /dev/rsd0c:
type: SCSI
disk: SCSI disk
label: M4-CT032M4SSD3
duid: b2aa6a55bf5ee149
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 3892
total sectors: 62533296
boundstart: 64
boundend: 62524980
drivedata: 0

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
   a:         62524916               64    RAID
   c:         62533296                0  unused



# /dev/rsd1c:
type: SCSI
disk: SCSI disk
label: SR CRYPTO
duid: 3b07dc2689260fe1
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 3891
total sectors: 62524388
boundstart: 64
boundend: 62508915
drivedata: 0

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
   a:          2097152               64  4.2BSD   2048 16384 12958 # /
   b:          4548352          2097216    swap                    # none
   c:         62524388                0  unused
   d:          4072032          6645568  4.2BSD   2048 16384 12958 # /tmp
   e:          6381568         10717600  4.2BSD   2048 16384 12958 # /var
   f:          4194304         17099168  4.2BSD   2048 16384 12958 # /usr
   g:          2097152         21293472  4.2BSD   2048 16384 12958 #
/usr/X11R6
   h:          8977152         23390624  4.2BSD   2048 16384 12958 #
/usr/local
   i:          3053696         32367776  4.2BSD   2048 16384 12958 #
/usr/src
   j:          4194304         35421472  4.2BSD   2048 16384 12958 #
/usr/obj
   k:         22893056         39615776  4.2BSD   2048 16384 12958 #
/home



dmesg:
OpenBSD 6.1-current (GENERIC.MP) #51: Sat May  6 12:01:40 MDT 2017
     [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 2060320768 (1964MB)
avail mem = 1992077312 (1899MB)
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.7 @ 0xeb600 (47 entries)
bios0: vendor Intel Corp. version "GKPPT10H.86A.0058.2015.0630.1349"
date 06/30/2015
bios0: Intel Corporation D33217GKE
acpi0 at bios0: rev 2
acpi0: sleep states S0 S1 S3 S4 S5
acpi0: tables DSDT FACP APIC FPDT FIDT MCFG HPET SSDT SSDT
acpi0: wakeup devices P0P1(S4) USB1(S3) USB2(S3) USB3(S3) USB4(S3)
USB5(S3) USB6(S3) USB7(S3) PXSX(S4) RP01(S4) PXSX(S4) RP02(S4) PXSX(S4)
RP03(S4) PXSX(S4) RP04(S4) [...]
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz, 1797.91 MHz
cpu0:
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,XSAVE,AVX,F16C,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,SENSOR,ARAT
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: TSC frequency 1797909400 Hz
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
cpu0: apic clock running at 99MHz
cpu0: mwait min=64, max=64, C-substates=0.2.1.1.2, IBE
cpu1 at mainbus0: apid 2 (application processor)
cpu1: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz, 1797.67 MHz
cpu1:
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,XSAVE,AVX,F16C,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,SENSOR,ARAT
cpu1: 256KB 64b/line 8-way L2 cache
cpu1: smt 0, core 1, package 0
cpu2 at mainbus0: apid 1 (application processor)
cpu2: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz, 1797.67 MHz
cpu2:
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,XSAVE,AVX,F16C,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,SENSOR,ARAT
cpu2: 256KB 64b/line 8-way L2 cache
cpu2: smt 1, core 0, package 0
cpu3 at mainbus0: apid 3 (application processor)
cpu3: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz, 1797.67 MHz
cpu3:
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,XSAVE,AVX,F16C,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,SENSOR,ARAT
cpu3: 256KB 64b/line 8-way L2 cache
cpu3: smt 1, core 1, package 0
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 24 pins
acpimcfg0 at acpi0 addr 0xf8000000, bus 0-63
acpihpet0 at acpi0: 14318179 Hz
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus -1 (P0P1)
acpiprt2 at acpi0: bus -1 (RP01)
acpiprt3 at acpi0: bus -1 (RP02)
acpiprt4 at acpi0: bus -1 (RP03)
acpiprt5 at acpi0: bus -1 (RP04)
acpiprt6 at acpi0: bus -1 (RP05)
acpiprt7 at acpi0: bus -1 (RP06)
acpiprt8 at acpi0: bus -1 (RP07)
acpiprt9 at acpi0: bus -1 (RP08)
acpiprt10 at acpi0: bus -1 (PEG0)
acpiprt11 at acpi0: bus -1 (PEG1)
acpiprt12 at acpi0: bus -1 (PEG2)
acpiprt13 at acpi0: bus -1 (PEG3)
acpiec0 at acpi0: not present
acpicpu0 at acpi0: C1(1000@1 mwait.1)
acpicpu1 at acpi0: C1(1000@1 mwait.1)
acpicpu2 at acpi0: C1(1000@1 mwait.1)
acpicpu3 at acpi0: C1(1000@1 mwait.1)
acpipwrres0 at acpi0: FN00, resource for FAN0
acpipwrres1 at acpi0: FN01, resource for FAN1
acpipwrres2 at acpi0: FN02, resource for FAN2
acpipwrres3 at acpi0: FN03, resource for FAN3
acpipwrres4 at acpi0: FN04, resource for FAN4
acpitz0 at acpi0: critical temperature is 106 degC
acpitz1 at acpi0: critical temperature is 106 degC
"INT3F0D" at acpi0 not configured
acpibtn0 at acpi0: PWRB
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
acpivideo0 at acpi0: GFX0
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Core 3G Host" rev 0x09
inteldrm0 at pci0 dev 2 function 0 "Intel HD Graphics 4000" rev 0x09
drm0 at inteldrm0
inteldrm0: msi
inteldrm0: 1920x1080, 32bpp
wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation)
wsdisplay0: screen 1-5 added (std, vt100 emulation)
"Intel 7 Series MEI" rev 0x04 at pci0 dev 22 function 0 not configured
em0 at pci0 dev 25 function 0 "Intel 82579V" rev 0x04: msi, address
ec:a8:6b:f6:5a:12
ehci0 at pci0 dev 26 function 0 "Intel 7 Series USB" rev 0x04: apic 2
int 16
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 configuration 1 interface 0 "Intel EHCI root hub" rev
2.00/1.00 addr 1
azalia0 at pci0 dev 27 function 0 "Intel 7 Series HD Audio" rev 0x04:
msi
azalia0: no supported codecs
ehci1 at pci0 dev 29 function 0 "Intel 7 Series USB" rev 0x04: apic 2
int 23
usb1 at ehci1: USB revision 2.0
uhub1 at usb1 configuration 1 interface 0 "Intel EHCI root hub" rev
2.00/1.00 addr 1
pcib0 at pci0 dev 31 function 0 "Intel QS77 LPC" rev 0x04
ahci0 at pci0 dev 31 function 2 "Intel 7 Series AHCI" rev 0x04: msi,
AHCI 1.3
ahci0: port 0: 6.0Gb/s
scsibus1 at ahci0: 32 targets
sd0 at scsibus1 targ 0 lun 0: <ATA, M4-CT032M4SSD3, 07MH> SCSI3 0/direct
fixed naa.500a0751036f1244
sd0: 30533MB, 512 bytes/sector, 62533296 sectors, thin
ichiic0 at pci0 dev 31 function 3 "Intel 7 Series SMBus" rev 0x04: apic
2 int 18
iic0 at ichiic0
spdmem0 at iic0 addr 0x50: 2GB DDR3 SDRAM PC3-10600 SO-DIMM
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
wbsio0 at isa0 port 0x4e/2: NCT6776F rev 0x33
lm1 at wbsio0 port 0xa30/8: NCT6776F
vmm0 at mainbus0: VMX/EPT
uhub2 at uhub0 port 1 configuration 1 interface 0 "Intel Rate Matching
Hub" rev 2.00/0.00 addr 2
uhub3 at uhub1 port 1 configuration 1 interface 0 "Intel Rate Matching
Hub" rev 2.00/0.00 addr 2
uhidev0 at uhub3 port 1 configuration 1 interface 0 "CM Storm Quickfire
TKL 6keys" rev 1.10/1.09 addr 3
uhidev0: iclass 3/1
ukbd0 at uhidev0: 8 variable keys, 6 key codes, country code 33
wskbd0 at ukbd0: console keyboard, using wsdisplay0
uhidev1 at uhub3 port 1 configuration 1 interface 1 "CM Storm Quickfire
TKL 6keys" rev 1.10/1.09 addr 3
uhidev1: iclass 3/0, 3 report ids
uhid0 at uhidev1 reportid 2: input=1, output=0, feature=0
uhid1 at uhidev1 reportid 3: input=3, output=0, feature=0
uhidev2 at uhub3 port 2 configuration 1 interface 0 "Logitech Gaming
Mouse G400" rev 2.00/69.00 addr 4
uhidev2: iclass 3/1
ums0 at uhidev2: 8 buttons, Z dir
wsmouse0 at ums0 mux 0
uhidev3 at uhub3 port 2 configuration 1 interface 1 "Logitech Gaming
Mouse G400" rev 2.00/69.00 addr 4
uhidev3: iclass 3/0, 142 report ids
uhid2 at uhidev3 reportid 32: input=0, output=0, feature=1
uhid3 at uhidev3 reportid 128: input=1, output=0, feature=0
uhid4 at uhidev3 reportid 142: input=0, output=0, feature=1
uhidev4 at uhub3 port 7 configuration 1 interface 0 "Binary Audio UAC1
DAC" rev 1.10/0.01 addr 5
uhidev4: iclass 3/0
uhid5 at uhidev4: input=18, output=27, feature=0
uaudio0 at uhub3 port 7 configuration 1 interface 1 "Binary Audio UAC1
DAC" rev 1.10/0.01 addr 5
uaudio0: audio rev 1.00, 2 mixer controls
audio0 at uaudio0
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
sd1 at scsibus3 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006> SCSI2 0/direct
fixed
sd1: 30529MB, 512 bytes/sector, 62524388 sectors
softraid0: volume sd1 is roaming, it used to be sd2, updating metadata
root on sd1a (3b07dc2689260fe1.a) swap on sd1b dump on sd1b

usbdevs:
Controller /dev/usb0:
addr 1: high speed, self powered, config 1, EHCI root hub(0x0000),
Intel(0x8086), rev 1.00
  port 1 addr 2: high speed, self powered, config 1, Rate Matching
Hub(0x0024), Intel(0x8087), rev 0.00
   port 1 powered
   port 2 powered
   port 3 powered
   port 4 powered
   port 5 powered
   port 6 powered
  port 2 powered
Controller /dev/usb1:
addr 1: high speed, self powered, config 1, EHCI root hub(0x0000),
Intel(0x8086), rev 1.00
  port 1 addr 2: high speed, self powered, config 1, Rate Matching
Hub(0x0024), Intel(0x8087), rev 0.00
   port 1 addr 3: full speed, power 100 mA, config 1, Quickfire TKL
6keys(0x0011), CM Storm(0x2516), rev 1.09
   port 2 addr 4: full speed, power 98 mA, config 1, Gaming Mouse
G400(0xc245), Logitech(0x046d), rev 69.00
   port 3 powered
   port 4 powered
   port 5 powered
   port 6 powered
   port 7 addr 5: full speed, power 500 mA, config 1, UAC1 DAC(0x7022),
Binary Audio(0x1852), rev 0.01
   port 8 powered
  port 2 powered

pcidump:
Domain /dev/pci0:
  0:0:0: Intel Core 3G Host
        0x0000: Vendor ID: 8086 Product ID: 0154
        0x0004: Command: 0006 Status: 2090
        0x0008: Class: 06 Subclass: 00 Interface: 00 Revision: 09
        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: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
        0x00e0: Capability 0x09: Vendor Specific
        0x0000: 01548086 20900006 06000009 00000000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 20448086
        0x0030: 00000000 000000e0 00000000 00000000
        0x0040: fed19001 00000000 fed10001 00000000
        0x0050: 00000209 00000011 7e900007 7c000001
        0x0060: f8000005 00000000 fed18001 00000000
        0x0070: 7f000000 00000000 ff000c00 0000007f
        0x0080: 00111110 00110000 0000001a 00000000
        0x0090: 00000001 00000001 00500001 00000001
        0x00a0: 80000001 00000000 00600001 00000001
        0x00b0: 7ca00001 7c800001 7c000001 7ea00001
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 010c0009 e2806193 141800d0 00000000
        0x00f0: 00000000 00000000 00090fc8 00000000
  0:2:0: Intel HD Graphics 4000
        0x0000: Vendor ID: 8086 Product ID: 0166
        0x0004: Command: 0007 Status: 0090
        0x0008: Class: 03 Subclass: 00 Interface: 00 Revision: 09
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 64bit addr: 0x00000000f7800000/0x00400000
        0x0018: BAR mem prefetchable 64bit addr: 0x00000000e0000000/0x10000000
        0x0020: BAR io addr: 0x0000f000/0x0040
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
        0x0090: Capability 0x05: Message Signalled Interrupts (MSI)
        0x00d0: Capability 0x01: Power Management
                State: D0
        0x00a4: Capability 0x13: PCI Advanced Features
        0x0000: 01668086 00900007 03000009 00000000
        0x0010: f7800004 00000000 e000000c 00000000
        0x0020: 0000f001 00000000 00000000 20448086
        0x0030: 00000000 00000090 00000000 0000010b
        0x0040: 010c0009 e2806193 141800d0 00000000
        0x0050: 00000209 00000011 00000000 7ca00001
        0x0060: 00020000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 0001d005 fee00000 00000091 00000000
        0x00a0: 00000000 03060013 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 0022a401 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00008000 00000000
        0x00f0: 00000000 00000000 00090000 7b3ec018
  0:22:0: Intel 7 Series MEI
        0x0000: Vendor ID: 8086 Product ID: 1e3a
        0x0004: Command: 0006 Status: 0010
        0x0008: Class: 07 Subclass: 80 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 64bit addr: 0x00000000f7c2c000/0x00000010
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
        0x0050: Capability 0x01: Power Management
                State: D0
        0x008c: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0000: 1e3a8086 00100006 07800004 00800000
        0x0010: f7c2c004 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 20448086
        0x0030: 00000000 00000050 00000000 0000010b
        0x0040: 1e000245 80010010 66000106 100007f0
        0x0050: c8038c01 00000008 00000000 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00800005
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 c0000002
        0x00c0: 63b64775 8cbe509b ee6bf075 9ed69ee3
        0x00d0: ac6d9190 7edd8162 5ead8c7e 99ad69f1
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00000000 00000000
  0:25:0: Intel 82579V
        0x0000: Vendor ID: 8086 Product ID: 1503
        0x0004: Command: 0007 Status: 0010
        0x0008: Class: 02 Subclass: 00 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 32bit addr: 0xf7c00000/0x00020000
        0x0014: BAR mem 32bit addr: 0xf7c29000/0x00001000
        0x0018: BAR io addr: 0x0000f080/0x0020
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 03 Min Gnt: 00 Max Lat: 00
        0x00c8: Capability 0x01: Power Management
                State: D0
        0x00d0: Capability 0x05: Message Signalled Interrupts (MSI)
        0x00e0: Capability 0x13: PCI Advanced Features
        0x0000: 15038086 00100007 02000004 00000000
        0x0010: f7c00000 f7c29000 0000f081 00000000
        0x0020: 00000000 00000000 00000000 20448086
        0x0030: 00000000 000000c8 00000000 00000103
        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 00005404 8000125a
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 c822d001 07002000
        0x00d0: 0081e005 fee00000 00000000 00000072
        0x00e0: 03060013 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00000000 00000000
  0:26:0: Intel 7 Series USB
        0x0000: Vendor ID: 8086 Product ID: 1e2d
        0x0004: Command: 0006 Status: 0290
        0x0008: Class: 0c Subclass: 03 Interface: 20 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 32bit addr: 0xf7c28000/0x00000400
        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: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
        0x0050: Capability 0x01: Power Management
                State: D0
        0x0058: Capability 0x0a: Debug Port
        0x0098: Capability 0x13: PCI Advanced Features
        0x0000: 1e2d8086 02900006 0c032004 00000000
        0x0010: f7c28000 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 20448086
        0x0030: 00000000 00000050 00000000 0000010b
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: c9c25801 00000000 20a0980a 00000000
        0x0060: 07ff2020 00000000 01000001 00082000
        0x0070: 3fdf0000 00000000 00000000 00000000
        0x0080: 00800000 930c8811 24000d30 00000000
        0x0090: 00000000 00000000 03060013 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00ffaa00 00000000 00000000
        0x00e0: 00000000 00460190 8a2a0000 080859d4
        0x00f0: 00000000 00808588 08040f87 205b1708
  0:27:0: Intel 7 Series HD Audio
        0x0000: Vendor ID: 8086 Product ID: 1e20
        0x0004: Command: 0006 Status: 0010
        0x0008: Class: 04 Subclass: 03 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 10
        0x0010: BAR mem 64bit addr: 0x00000000f7c20000/0x00004000
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 04 Min Gnt: 00 Max Lat: 00
        0x0050: Capability 0x01: Power Management
                State: D0
        0x0060: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0070: Capability 0x10: PCI Express
        0x0100: Enhanced Capability 0x02: Virtual Channel Capability
        0x0130: Enhanced Capability 0x05: Root Complex Link Declaration
        0x0000: 1e208086 00100006 04030004 00000010
        0x0010: f7c20004 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 20448086
        0x0030: 00000000 00000050 00000000 00000104
        0x0040: 45000001 00000000 00000000 00000000
        0x0050: c8426001 00000000 00000000 00000000
        0x0060: 00807005 fee00000 00000000 000000b0
        0x0070: 00910010 10000000 00100000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 01020400 40002402 82a30c00 02330010
        0x00d0: 02a30c00 02330010 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 08040f87 00000000
  0:29:0: Intel 7 Series USB
        0x0000: Vendor ID: 8086 Product ID: 1e26
        0x0004: Command: 0006 Status: 0290
        0x0008: Class: 0c Subclass: 03 Interface: 20 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 32bit addr: 0xf7c27000/0x00000400
        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: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
        0x0050: Capability 0x01: Power Management
                State: D0
        0x0058: Capability 0x0a: Debug Port
        0x0098: Capability 0x13: PCI Advanced Features
        0x0000: 1e268086 02900006 0c032004 00000000
        0x0010: f7c27000 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 20448086
        0x0030: 00000000 00000050 00000000 0000010b
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: c9c25801 00000000 20a0980a 00000000
        0x0060: 07ff2020 00000000 01000001 00002000
        0x0070: 3fdf0000 00000000 00000000 00000000
        0x0080: 00800000 930c8811 24000d30 00000000
        0x0090: 00000000 00000000 03060013 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00ffaa00 00000000 00000000
        0x00e0: 00000000 60080762 f2a20000 836f0c40
        0x00f0: 00000000 00808588 08040f87 205b1708
  0:31:0: Intel QS77 LPC
        0x0000: Vendor ID: 8086 Product ID: 1e56
        0x0004: Command: 0007 Status: 0210
        0x0008: Class: 06 Subclass: 01 Interface: 00 Revision: 04
        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: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
        0x00e0: Capability 0x09: Vendor Specific
        0x0000: 1e568086 02100007 06010004 00800000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 20448086
        0x0030: 00000000 000000e0 00000000 00000000
        0x0040: 00000401 00000080 00000501 00000011
        0x0050: 000000f8 00000000 00000000 00000000
        0x0060: 0a05800b 00000090 0b048003 0000f0f8
        0x0070: f078f078 f078f078 f078f078 f078f078
        0x0080: 24000000 00fc0a01 00000000 00000000
        0x0090: 00000000 00000500 00000000 00000000
        0x00a0: 00a00e14 00063949 00004700 80000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00112233 00004567 0000ffcf 0000002a
        0x00e0: 100c0009 00000000 066402b3 00000000
        0x00f0: fed1c001 00000000 08040f87 00000000
  0:31:2: Intel 7 Series AHCI
        0x0000: Vendor ID: 8086 Product ID: 1e03
        0x0004: Command: 0007 Status: 02b0
        0x0008: Class: 01 Subclass: 06 Interface: 01 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR io addr: 0x0000f0d0/0x0008
        0x0014: BAR io addr: 0x0000f0c0/0x0004
        0x0018: BAR io addr: 0x0000f0b0/0x0008
        0x001c: BAR io addr: 0x0000f0a0/0x0004
        0x0020: BAR io addr: 0x0000f060/0x0020
        0x0024: BAR mem 32bit addr: 0xf7c26000/0x00000800
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 02 Line: 0a Min Gnt: 00 Max Lat: 00
        0x0080: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0070: Capability 0x01: Power Management
                State: D0
        0x00a8: Capability 0x12: SATA
        0x00b0: Capability 0x13: PCI Advanced Features
        0x0000: 1e038086 02b00007 01060104 00000000
        0x0010: 0000f0d1 0000f0c1 0000f0b1 0000f0a1
        0x0020: 0000f061 f7c26000 00000000 20448086
        0x0030: 00000000 00000080 00000000 0000020a
        0x0040: 80008000 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 4003a801 00000008 00000000 00000000
        0x0080: 00017005 fee00000 00000062 00000000
        0x0090: 81013e60 3e000183 015c4208 00000000
        0x00a0: 000000e0 00000039 0010b012 00000048
        0x00b0: 03060013 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 08040f87 00000000
  0:31:3: Intel 7 Series SMBus
        0x0000: Vendor ID: 8086 Product ID: 1e22
        0x0004: Command: 0003 Status: 0280
        0x0008: Class: 0c Subclass: 05 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 64bit addr: 0x00000000f7c25000/0x00000100
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR io addr: 0x0000f040/0x0020
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 8086 Product ID: 2044
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 03 Line: 05 Min Gnt: 00 Max Lat: 00
        0x0000: 1e228086 02800003 0c050004 00000000
        0x0010: f7c25004 00000000 00000000 00000000
        0x0020: 0000f041 00000000 00000000 20448086
        0x0030: 00000000 00000000 00000000 00000305
        0x0040: 00000011 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00040403 08080000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000004 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 08040f87 00000000

acpidump:
begin-base64 644 APIC.3
QVBJQ3IAAAADL0ludGVsAEQzMzIxN0dLOgAAAEFNSSATAAEAAADg/gEAAAAACAEAAQAAAAAIAgIB
AAAAAAgDAQEAAAAACAQDAQAAAAEMAgAAAMD+AAAAAAIKAAACAAAAAAACCgAJCQAAAA0ABAb/BQAB
====
begin-base64 644 DSDT.2
RFNEVOmWAAACTEludGVsAEQzMzIxN0dLOgAAAElOVEwXEQUgCFNQMU8KTghJTzFCCwAKCElPMUwK
IAhJTzJCCyAKCElPMkwKEAhJTzNCCzAKCElPM0wKEAhJT0VTAAhTTUJTC4AFCFNNQkwKIAhQTUJT
CwAECFBNTE4KgAhHUEJTCwAFCEdQTE4KgAhTTUlQCrIIQVBDQgwAAMD+CEFQQ0wLABAIU01DUgsw
BAhIUFRCDAAA0P4ISFBUQwwE9NH+CEZMU1oMAABkAAhTUkNCDADA0f4IUkNMTgsAQAhUQ0JSDACA
0P4IVENMVAsAEAhQRUJTDAAAAPgIUEVMTgwAAAAECExBUEIMAADg/ghFR1BCDACQ0f4ITUNIQgwA
ANH+CFZUQlMMAADZ/ghWVExOCwBACEFDUEgK3ghBU1NCAAhBT1RCAAhBQVhCAAhQRUhQAQhTSFBD
AQhQRVBNAQhQRUVSAQhQRUNTAQhJVEtFAAhEUFBCDACA2f4IRFBQTAsAgAhGTUJMAQhGRFRQCgII
RlVQUwoDCEZVV1MKBAhCU0hfAAhCRUxfAQhCRUhfCgIIQlJIXwoDCEJURl8KBAhCSENfCgUIQllC
XwoGCEJQSF8KBwhCU0hTCggIQkVMQwoJCEJSSFAKCghCVEZDCgsIQkVIUAoMCEJQSFMKDQhCRUxQ
Cg4IQlRMXwoQCEJURlAKEQhCU1JfChQIQkNIXwoWCEJMUl8KGAhCTEhfChkIQk9GXwogCEJFRl8K
IQhCTExFCiIIQkxMQwojCEJMQ0EKJAhCTExTCiUIQkxMUAomCEJMTEQKJwhCSEJFCjAIQkhCQwox
CEJIQk4KMghCSEJNCjMIVFJUUAEIV0RURQEIVFJURAoCCFRSVEkKAwhHQ0REAQhEU1RBCgoIRFNM
TwoMCERTTEMKDghQSVRTChAIU0JDUwoSCFNBTFMKEwhMU1NTCioIU09PVAo1CFBEQlIKTQhUQlNX
CrwIU1JTSQqyCENTTUkKYQhEU1NQAAhNQkVDAAhISURLDU1TRlQwMDAxAAhISURNDU1TRlQwMDAz
AAhDSURLDEHQAwMIQ0lETQxB0A8DCEZIUFAACEdQRVILIAQIU1MxXwEIU1MyXwAIU1MzXwEIU1M0
XwEISU9TVAsAAAhUT1BNDAAAAAAIUk9NUwwAAOD/CFZHQUYBW4BHTlZTAAwYDj97C80BW4FAQ0dO
VlMQT1NZUxBTTUlGCFBSTTAIUFJNMQhTQ0lGCFBSTTIIUFJNMwhMQ0tGCFBSTTQIUFJNNQhQODBE
IExJRFMIUFdSUwhEQkdTCFRIT0YIQUNUMQhBQ1RUCFBTVlQIVEMxVghUQzJWCFRTUFYIQ1JUVAhE
VFNFCERUUzEIRFRTMghEVFNGCAA4UkVWTghSRVMzCAAIQVBJQwhUQ05UCFBDUDAIUENQMQhQUENN
CFBQTUYgQzY3TAhOQVRQCENNQVAIQ01CUAhMUFRQCEZEQ1AIQ01DUAhDSVJQCFNNU0MIVzM4MQhT
TUMxCElHRFMIVExTVAhDQURMCFBBREwIQ1NURRBOU1RFEFNTVEUQTkRJRAhESUQxIERJRDIgRElE
MyBESUQ0IERJRDUgS1NWMCBLU1YxCAA4QkxDUwhCUlRMCEFMU0UIQUxBRghMTE9XCExISUgIAAhF
TUFFCEVNQVAQRU1BTBAACE1FRkUIRFNUUwgAEFRQTVAIVFBNRQhNT1JECFRDR1AIUFBSUCBQUFJR
CExQUFIIR1RGMDhHVEYyOElERU0IR1RGMThCSURfCFBMSUQIAEAIQVNMQiBJQlRUCElQQVQISVRW
RghJVFZNCElQU0MISUJMQwhJQklBCElTU0MISTQwOQhJNTA5CEk2MDkISTcwOQhJUENGCElETVMI
SUYxRQhIVkNPCE5YRDEgTlhEMiBOWEQzIE5YRDQgTlhENSBOWEQ2IE5YRDcgTlhEOCBHU01JCFBB
VlAIAAhPU0NDCE5FWFAIU0JWMQhTQlYyCAAwRFNFTghFQ09OCEdQSUMIQ1RZUAhMMDFDCFZGTjAI
VkZOMQhWRk4yCFZGTjMIVkZONAhWRk41CFZGTjYIVkZONwhWRk44CFZGTjkIADBOVkdBIE5WSEEg
QU1EQSBESUQ2IERJRDcgRElEOCBFQkFTIENQU1AgRUVDUCBFVkNQIFhCQVMgT0JTMSBPQlMyIE9C
UzMgT0JTNCBPQlM1IE9CUzYgT0JTNyBPQlM4IABIBUFUTUMIUFRNQwhBVFJBCFBUUkEIUE5ITSBU
QkFCIFRCQUggUlRJUAhUU09ECEFUUEMIUFRQQwhQRkxWCEJSRVYIU0dNRAhTR0ZMCFBXT0sISExS
UwhEU0VMCEVTRUwIUFNFTAhQV0VOCFBSU1QITVhEMSBNWEQyIE1YRDMgTVhENCBNWEQ1IE1YRDYg
TVhENyBNWEQ4IEdCQVMQU0dHUAhQWEZYCFBYRFkIUFhGRAgACEFMRlAISU1PTghQRFRTCFBLR0EI
UEFNVAhBQzBGCEFDMUYIRFRTMwhEVFM0CAAgWEhDSQhYSFBNCFhUVUIgWFRVUyBYTVBCIExQTVYI
RERSRghNTTY0CFBTS0UIUFNNRQgAMEFPQUMIU0xEUiBFQ1RNIEFGTlMIEIhQA19TQl8IUFIwMBJL
ICQSDQQM//8fAABMTktGABINBAz//x8AAUxOS0QAEg4EDP//HwAKAkxOS0MAEg4EDP//HwAKA0xO
S0EAEg0EDP//FAAATE5LQQASDQQM//8dAABMTktIABINBAz//x0AAUxOS0QAEg4EDP//HQAKAkxO
S0EAEg4EDP//HQAKA0xOS0MAEg0EDP//GgAATE5LQQASDQQM//8aAAFMTktGABIOBAz//xoACgJM
TktDABIOBAz//xoACgNMTktEABINBAz//xsAAExOS0cAEg0EDP//FgAATE5LQQASDQQM//8WAAFM
TktEABIOBAz//xYACgJMTktDABIOBAz//xYACgNMTktCABINBAz//xwAAExOS0EAEg0EDP//HAAB
TE5LQgASDgQM//8cAAoCTE5LQwASDgQM//8cAAoDTE5LRAASDQQM//8BAABMTktBABINBAz//wEA
AUxOS0IAEg4EDP//AQAKAkxOS0MAEg4EDP//AQAKA0xOS0QAEg0EDP//BgAATE5LRAASDQQM//8G
AAFMTktBABIOBAz//wYACgJMTktCABIOBAz//wYACgNMTktDABINBAz//wQAAExOS0EAEg0EDP//
BAABTE5LQgASDgQM//8EAAoCTE5LQwASDgQM//8EAAoDTE5LRAASDQQM//8CAABMTktBABINBAz/
/xkAAExOS0UACEFSMDASQxwkEgsEDP//HwAAAAoVEgsEDP//HwABAAoTEgwEDP//HwAKAgAKEhIM
BAz//x8ACgMAChASCwQM//8UAAAAChASCwQM//8dAAAAChcSCwQM//8dAAEAChMSDAQM//8dAAoC
AAoQEgwEDP//HQAKAwAKEhILBAz//xoAAAAKEBILBAz//xoAAQAKFRIMBAz//xoACgIAChISDAQM
//8aAAoDAAoTEgsEDP//GwAAAAoWEgsEDP//FgAAAAoQEgsEDP//FgABAAoTEgwEDP//FgAKAgAK
EhIMBAz//xYACgMAChESCwQM//8cAAAAChASCwQM//8cAAEAChESDAQM//8cAAoCAAoSEgwEDP//
HAAKAwAKExILBAz//wEAAAAKEBILBAz//wEAAQAKERIMBAz//wEACgIAChISDAQM//8BAAoDAAoT
EgsEDP//BgAAAAoTEgsEDP//BgABAAoQEgwEDP//BgAKAgAKERIMBAz//wYACgMAChISCwQM//8E
AAAAChASCwQM//8EAAEAChESDAQM//8EAAoCAAoSEgwEDP//BAAKAwAKExILBAz//wIAAAAKEBIL
BAz//xkAAAAKFAhQUjA0EjQEEgsEC///AExOS0EAEgsEC///AUxOS0IAEgwEC///CgJMTktDABIM
BAv//woDTE5LRAAIQVIwNBIsBBIJBAv//wAAChASCQQL//8BAAoREgoEC///CgIAChISCgQL//8K
AwAKEwhQUjA1EjQEEgsEC///AExOS0IAEgsEC///AUxOS0MAEgwEC///CgJMTktEABIMBAv//woD
TE5LQQAIQVIwNRIsBBIJBAv//wAAChESCQQL//8BAAoSEgoEC///CgIAChMSCgQL//8KAwAKEAhQ
UjA2EjQEEgsEC///AExOS0MAEgsEC///AUxOS0QAEgwEC///CgJMTktBABIMBAv//woDTE5LQgAI
QVIwNhIsBBIJBAv//wAAChISCQQL//8BAAoTEgoEC///CgIAChASCgQL//8KAwAKEQhQUjA3EjQE
EgsEC///AExOS0QAEgsEC///AUxOS0EAEgwEC///CgJMTktCABIMBAv//woDTE5LQwAIQVIwNxIs
BBIJBAv//wAAChMSCQQL//8BAAoQEgoEC///CgIAChESCgQL//8KAwAKEghQUjA4EjQEEgsEC///
AExOS0EAEgsEC///AUxOS0IAEgwEC///CgJMTktDABIMBAv//woDTE5LRAAIQVIwOBIsBBIJBAv/
/wAAChASCQQL//8BAAoREgoEC///CgIAChISCgQL//8KAwAKEwhQUjA5EjQEEgsEC///AExOS0IA
EgsEC///AUxOS0MAEgwEC///CgJMTktEABIMBAv//woDTE5LQQAIQVIwORIsBBIJBAv//wAAChES
CQQL//8BAAoSEgoEC///CgIAChMSCgQL//8KAwAKEAhQUjBFEjQEEgsEC///AExOS0MAEgsEC///
AUxOS0QAEgwEC///CgJMTktBABIMBAv//woDTE5LQgAIQVIwRRIsBBIJBAv//wAAChISCQQL//8B
AAoTEgoEC///CgIAChASCgQL//8KAwAKEQhQUjBGEjQEEgsEC///AExOS0QAEgsEC///AUxOS0EA
EgwEC///CgJMTktCABIMBAv//woDTE5LQwAIQVIwRhIsBBIJBAv//wAAChMSCQQL//8BAAoQEgoE
C///CgIAChESCgQL//8KAwAKEghQUjAxEkMOEBILBAv//wBMTktGABILBAv//wFMTktHABIMBAv/
/woCTE5LSAASDAQL//8KA0xOS0UAEg0EDP//AQAATE5LRwASDQQM//8BAAFMTktGABIOBAz//wEA
CgJMTktFABIOBAz//wEACgNMTktIABINBAz//wIAAExOS0MAEg0EDP//AgABTE5LRAASDgQM//8C
AAoCTE5LQgASDgQM//8CAAoDTE5LQQASDQQM//8DAABMTktEABINBAz//wMAAUxOS0MAEg4EDP//
AwAKAkxOS0YAEg4EDP//AwAKA0xOS0cACEFSMDESQwwQEgkEC///AAAKFRIJBAv//wEAChYSCgQL
//8KAgAKFxIKBAv//woDAAoUEgsEDP//AQAAAAoWEgsEDP//AQABAAoVEgwEDP//AQAKAgAKFBIM
BAz//wEACgMAChcSCwQM//8CAAAAChISCwQM//8CAAEAChMSDAQM//8CAAoCAAoREgwEDP//AgAK
AwAKEBILBAz//wMAAAAKExILBAz//wMAAQAKEhIMBAz//wMACgIAChUSDAQM//8DAAoDAAoWCFBS
MDISNAQSCwQL//8ATE5LQQASCwQL//8BTE5LQgASDAQL//8KAkxOS0MAEgwEC///CgNMTktEAAhB
UjAyEiwEEgkEC///AAAKEBIJBAv//wEAChESCgQL//8KAgAKEhIKBAv//woDAAoTCFBSMEESNAQS
CwQL//8ATE5LQgASCwQL//8BTE5LQwASDAQL//8KAkxOS0QAEgwEC///CgNMTktBAAhBUjBBEiwE
EgkEC///AAAKERIJBAv//wEAChISCgQL//8KAgAKExIKBAv//woDAAoQCFBSMEISNAQSCwQL//8A
TE5LQwASCwQL//8BTE5LRAASDAQL//8KAkxOS0EAEgwEC///CgNMTktCAAhBUjBCEiwEEgkEC///
AAAKEhIJBAv//wEAChMSCgQL//8KAgAKEBIKBAv//woDAAoRCFBSMEMSNAQSCwQL//8ATE5LRAAS
CwQL//8BTE5LQQASDAQL//8KAkxOS0IAEgwEC///CgNMTktDAAhBUjBDEiwEEgkEC///AAAKExIJ
BAv//wEAChASCgQL//8KAgAKERIKBAv//woDAAoSCFBSU0ERCQoGI3jcGHkABlBSU0FQUlNCBlBS
U0FQUlNDBlBSU0FQUlNEBlBSU0FQUlNFBlBSU0FQUlNGBlBSU0FQUlNHBlBSU0FQUlNIW4KPjgJQ
Q0kwCF9ISUQMQdAKCAhfQ0lEDEHQCgMIX0FEUgAUCV5CTjAwAKQAFAtfQkJOAKRCTjAwCF9VSUQA
FBZfUFJUAKAKUElDTaRBUjAwpFBSMDBbgEhCVVMCAAsAAVuBSw1IQlVTAwBAIEVQRU4BAAtFUEJS
FAAgTUhFTgEADk1IQlIRACBHQ0xLAQAfRDBFTgEATwVQWEVOAVBYU1oCABdQWEJSBgAgRElFTgEA
C0RJQlIUACAAFE1FQlIMAEAGAARQTTBIAgACUE0xTAIAAlBNMUgCAAJQTTJMAgACUE0ySAIAAlBN
M0wCAAJQTTNIAgACUE00TAIAAlBNNEgCAAJQTTVMAgACUE01SAIAAlBNNkwCAAJQTTZIAgACAEgQ
ABRUVVVEEwBJBwAUVExVRAwAQAQAB0hUU0UBW4BNQ0hUAAwAANH+CwARW4EGTUNIVAEIQlVGMBFH
IAsCAogNAAIMAAAAAAD/AAAAAAGHFwABDAMAAAAAAAAAAPcMAAAAAAAA+AwAAEcB+Az4DAEIhxcA
AQwDAAAAAAANAAD//wAAAAAAAADzAACHFwAADAMAAAAAAAAKAP//CwAAAAAAAAACAIcXAAAMAwAA
AAAAAAwA/z8MAAAAAAAAQAAAhxcAAAwDAAAAAABADAD/fwwAAAAAAABAAACHFwAADAMAAAAAAIAM
AP+/DAAAAAAAAEAAAIcXAAAMAwAAAAAAwAwA//8MAAAAAAAAQAAAhxcAAAwDAAAAAAAADQD/Pw0A
AAAAAABAAACHFwAADAMAAAAAAEANAP9/DQAAAAAAAEAAAIcXAAAMAwAAAAAAgA0A/78NAAAAAAAA
QAAAhxcAAAwDAAAAAADADQD//w0AAAAAAABAAACHFwAADAMAAAAAAAAOAP8/DgAAAAAAAEAAAIcX
AAAMAwAAAAAAQA4A/38OAAAAAAAAQAAAhxcAAAwDAAAAAACADgD/vw4AAAAAAABAAACHFwAADAMA
AAAAAMAOAP//DgAAAAAAAEAAAIcXAAAMAwAAAAAAAA8A//8PAAAAAAAAAAEAhxcAAAwDAAAAAAAA
AAD//6/+AAAAAAAAsP6KKwAADAMAAAAAAAAAAAAAAQAAAAAA//8BAAAAAAAAAAAAAAAAAAAAAQAA
AAAAeQAURTlfQ1JTCItCVUYwCgpQQk1YcHR6UEVMTgoUAAoCAFBCTViLQlVGMAoOUEJMTnB0elBF
TE4KFAABAFBCTE6gFlBNMUyKQlVGMAp8QzBMTnAAQzBMTqAZk1BNMUwBjUJVRjALWANDMFJXcABD
MFJXoBZQTTFIikJVRjAKlkM0TE5wAEM0TE6gGZNQTTFIAY1CVUYwCygEQzRSV3AAQzRSV6AWUE0y
TIpCVUYwCrBDOExOcABDOExOoBmTUE0yTAGNQlVGMAv4BEM4UldwAEM4UlegFlBNMkiKQlVGMArK
Q0NMTnAAQ0NMTqAZk1BNMkgBjUJVRjALyAVDQ1JXcABDQ1JXoBZQTTNMikJVRjAK5EQwTE5wAEQw
TE6gGZNQTTNMAY1CVUYwC5gGRDBSV3AARDBSV6AWUE0zSIpCVUYwCv5ENExOcABENExOoBmTUE0z
SAGNQlVGMAtoB0Q0UldwAEQ0UlegF1BNNEyKQlVGMAsYAUQ4TE5wAEQ4TE6gGZNQTTRMAY1CVUYw
CzgIRDhSV3AARDhSV6AXUE00SIpCVUYwCzIBRENMTnAARENMTqAZk1BNNEgBjUJVRjALCAlEQ1JX
cABEQ1JXoBdQTTVMikJVRjALTAFFMExOcABFMExOoBmTUE01TAGNQlVGMAvYCUUwUldwAEUwUleg
F1BNNUiKQlVGMAtmAUU0TE5wAEU0TE6gGZNQTTVIAY1CVUYwC6gKRTRSV3AARTRSV6AXUE02TIpC
VUYwC4ABRThMTnAARThMTqAZk1BNNkwBjUJVRjALeAtFOFJXcABFOFJXoBdQTTZIikJVRjALmgFF
Q0xOcABFQ0xOoBmTUE02SAGNQlVGMAtIDEVDUldwAEVDUlegF1BNMEiKQlVGMAu0AUYwTE5wAEYw
TE6gGZNQTTBIAY1CVUYwCxgNRjBSV3AARjBSV4pCVUYwC8IBTTFNTopCVUYwC8YBTTFNWIpCVUYw
C84BTTFMTnlUTFVEChRNMU1OcnRNMU1YTTFNTgABTTFMTqAjkZNNTTY0AJKUT1NZUwvTB4pCVUYw
C/gBTVNMTnAATVNMTqFKBo9CVUYwC/gBTTJMTo9CVUYwC+ABTTJNTo9CVUYwC+gBTTJNWHAOAAAA
AAQAAABNMkxOoBWSlVRVVUQLABB5VFVVRAoUTTJNTqEPcA4AAAAAAQAAAE0yTU50ck0yTU5NMkxO
AAFNMk1YpEJVRjAIR1VJRBETChBbTdsz9x8cQJZXdEHAPddmCFNVUFAACENUUkwACFhDTlQAFEER
X09TQwxwa2CKYABDRFcximAKBENEVzKKYAoIQ0RXM6AaXi5YSENfQ1VJRGikXi5YSENfUE9TQ2lq
a6EsoCpfT1NJDVdpbmRvd3MgMjAxMgCgFpNYQ05UAF4uWEhDX1hTRUx1WENOVKBICZNoR1VJRHBD
RFcyU1VQUHBDRFczQ1RSTKAVk05FWFAAe0NUUkwM+P///0NUUkygK05FWFCgJYB7Q0RXMQEAAKAM
e0NUUkwBAE5IUEegDXtDVFJMCgQATlBNRaAQkpNpAX1DRFcxCghDRFcxoBaSk0NEVzNDVFJMfUNE
VzEKEENEVzFwQ1RSTENEVzNwQ1RSTE9TQ0OkYKEOfUNEVzEKBENEVzGkYBBEGVwuX1NCX1BDSTAU
DUFSMDAApF5eQVIwMBQNUFIwMACkXl5QUjAwFA1BUjAxAKReXkFSMDEUDVBSMDEApF5eUFIwMRQN
QVIwMgCkXl5BUjAyFA1QUjAyAKReXlBSMDIUDUFSMDQApF5eQVIwNBQNUFIwNACkXl5QUjA0FA1B
UjA1AKReXkFSMDUUDVBSMDUApF5eUFIwNRQNQVIwNgCkXl5BUjA2FA1QUjA2AKReXlBSMDYUDUFS
MDcApF5eQVIwNxQNUFIwNwCkXl5QUjA3FA1BUjA4AKReXkFSMDgUDVBSMDgApF5eUFIwOBQNQVIw
OQCkXl5BUjA5FA1QUjA5AKReXlBSMDkUDUFSMEUApF5eQVIwRRQNUFIwRQCkXl5QUjBFFA1BUjBG
AKReXkFSMEYUDVBSMEYApF5eUFIwRhQNQVIwQQCkXl5BUjBBFA1QUjBBAKReXlBSMEEUDUFSMEIA
pF5eQVIwQhQNUFIwQgCkXl5QUjBCFA1BUjBDAKReXkFSMEMUDVBSMEMApF5eUFIwQ1uCSwRUUE1Y
CF9ISUQMQdAMAQhfVUlEAQhDUlNfEREKDoYJAAAAANT+AFAAAHkAFAtfQ1JTAKRDUlNfFBFfU1RB
AKAHVFBNRqQApAoPW4KBUAFMUENCCF9BRFIMAAAfABBPWFxfU0JfW4AvA1BDSTBMUENCTFBDMQIK
QArAW4FKBC8DUENJMExQQ0JMUEMxAABAEFBBUkMIUEJSQwhQQ1JDCFBEUkMIACBQRVJDCFBGUkMI
UEdSQwhQSFJDCABAIAAIAAhYVVNCAVuCQgpMTktBCF9ISUQMQdAMDwhfVUlEARQRX0RJUwh9UEFS
QwqAUEFSQxQLX1BSUwikUFJTQRQ4X0NSUwgIUlRMQREJCgYjAAAYeQCLUlRMQQFJUlEwcABJUlEw
eQF7UEFSQwoPAElSUTCkUlRMQRQbX1NSUwmLaAFJUlEwgklSUTBgdmBwYFBBUkMUGF9TVEEIoAx7
UEFSQwqAAKQKCaEEpAoLW4JDCkxOS0IIX0hJRAxB0AwPCF9VSUQKAhQRX0RJUwh9UEJSQwqAUEJS
QxQLX1BSUwikUFJTQhQ4X0NSUwgIUlRMQhEJCgYjAAAYeQCLUlRMQgFJUlEwcABJUlEweQF7UEJS
QwoPAElSUTCkUlRMQhQbX1NSUwmLaAFJUlEwgklSUTBgdmBwYFBCUkMUGF9TVEEIoAx7UEJSQwqA
AKQKCaEEpAoLW4JDCkxOS0MIX0hJRAxB0AwPCF9VSUQKAxQRX0RJUwh9UENSQwqAUENSQxQLX1BS
UwikUFJTQxQ4X0NSUwgIUlRMQxEJCgYjAAAYeQCLUlRMQwFJUlEwcABJUlEweQF7UENSQwoPAElS
UTCkUlRMQxQbX1NSUwmLaAFJUlEwgklSUTBgdmBwYFBDUkMUGF9TVEEIoAx7UENSQwqAAKQKCaEE
pAoLW4JDCkxOS0QIX0hJRAxB0AwPCF9VSUQKBBQRX0RJUwh9UERSQwqAUERSQxQLX1BSUwikUFJT
RBQ4X0NSUwgIUlRMRBEJCgYjAAAYeQCLUlRMRAFJUlEwcABJUlEweQF7UERSQwoPAElSUTCkUlRM
RBQbX1NSUwmLaAFJUlEwgklSUTBgdmBwYFBEUkMUGF9TVEEIoAx7UERSQwqAAKQKCaEEpAoLW4JD
CkxOS0UIX0hJRAxB0AwPCF9VSUQKBRQRX0RJUwh9UEVSQwqAUEVSQxQLX1BSUwikUFJTRRQ4X0NS
UwgIUlRMRREJCgYjAAAYeQCLUlRMRQFJUlEwcABJUlEweQF7UEVSQwoPAElSUTCkUlRMRRQbX1NS
UwmLaAFJUlEwgklSUTBgdmBwYFBFUkMUGF9TVEEIoAx7UEVSQwqAAKQKCaEEpAoLW4JDCkxOS0YI
X0hJRAxB0AwPCF9VSUQKBhQRX0RJUwh9UEZSQwqAUEZSQxQLX1BSUwikUFJTRhQ4X0NSUwgIUlRM
RhEJCgYjAAAYeQCLUlRMRgFJUlEwcABJUlEweQF7UEZSQwoPAElSUTCkUlRMRhQbX1NSUwmLaAFJ
UlEwgklSUTBgdmBwYFBGUkMUGF9TVEEIoAx7UEZSQwqAAKQKCaEEpAoLW4JDCkxOS0cIX0hJRAxB
0AwPCF9VSUQKBxQRX0RJUwh9UEdSQwqAUEdSQxQLX1BSUwikUFJTRxQ4X0NSUwgIUlRMRxEJCgYj
AAAYeQCLUlRMRwFJUlEwcABJUlEweQF7UEdSQwoPAElSUTCkUlRMRxQbX1NSUwmLaAFJUlEwgklS
UTBgdmBwYFBHUkMUGF9TVEEIoAx7UEdSQwqAAKQKCaEEpAoLW4JDCkxOS0gIX0hJRAxB0AwPCF9V
SUQKCBQRX0RJUwh9UEhSQwqAUEhSQxQLX1BSUwikUFJTSBQ4X0NSUwgIUlRMSBEJCgYjAAAYeQCL
UlRMSAFJUlEwcABJUlEweQF7UEhSQwoPAElSUTCkUlRMSBQbX1NSUwmLaAFJUlEwgklSUTBgdmBw
YFBIUkMUGF9TVEEIoAx7UEhSQwqAAKQKCaEEpAoLW4BMUEMwAgpACsBbgSJMUEMwAABAIElPRDAI
SU9EMQgAQDdSQUVOAQANUkNCQRJbgj1ETUFDCF9ISUQMQdACAAhfQ1JTESgKJUcBAAAAAAEgRwGB
AIEAARFHAZMAkwABDUcBwADAAAEgKhABeQBbgiZGV0hECF9ISUQMJdQIAAhfQ1JTEREKDoYJAAAA
AAD/AAAAAXkAW4JMCkhQRVQIX0hJRAxB0AEDCF9VSUQACEJVRjAREQoOhgkAAQAA0P4ABAAAeQAU
J19TVEEAoBOSlU9TWVML0QegCEhQQUWkCg+hCqAISFBBRaQKC6QAFEYFX0NSUwigSQRIUEFFikJV
RjAKBEhQVDCgEZNIUEFTAXAMABDQ/khQVDCgEpNIUEFTCgJwDAAg0P5IUFQwoBKTSFBBUwoDcAwA
MND+SFBUMKRCVUYwW4JFCklQSUMIX0hJRAtB0AhfQ1JTEUEJCo1HASAAIAABAkcBJAAkAAECRwEo
ACgAAQJHASwALAABAkcBMAAwAAECRwE0ADQAAQJHATgAOAABAkcBPAA8AAECRwGgAKAAAQJHAaQA
pAABAkcBqACoAAECRwGsAKwAAQJHAbAAsAABAkcBtAC0AAECRwG4ALgAAQJHAbwAvAABAkcB0ATQ
BAECIgQAeQBbgkMLTERSQwhfSElEDEHQDAIIX1VJRAoCCF9DUlMRRgkKkkcBLgAuAAECRwFOAE4A
AQJHAWEAYQABAUcBYwBjAAEBRwFlAGUAAQFHAWcAZwABAUcBcABwAAEBRwGAAIAAAQFHAZIAkgAB
AUcBsgCyAAECRwGABoAGASBHAQARABEBEEcB/////wEBRwH/////AQFHAQAEAAQBVEcBWARYBAEo
RwEABQAFAYBHAU4WThYBAnkAW4IlUlRDXwhfSElEDEHQCwAIX0NSUxEQCg1HAXAAcAABCCIAAXkA
W4ItVElNUghfSElEDEHQAQAIX0NSUxEYChVHAUAAQAABBEcBUABQABAEIgEAeQBbgk8EQ1dEVAhf
SElEDCXUPw0IX0NJRAxB0AwCCEJVRjARDQoKRwFUBFQEBAR5ABQVX1NUQQigCpNXRFRFAaQKD6ED
pAAUC19DUlMIpEJVRjBbgkKBU0lPMQhfSElEDEHQDAIIX1VJRAsRAQhDUlNfESUKIkcBAAAAAAAA
RwEAAAAAAABHAQAAAAAAAEcBAAAAAAAAeQAUQhJfQ1JTAKBMBJCVU1AxTwvwA5RTUDFPCvCLQ1JT
XwoCR1BJMItDUlNfCgRHUEkxjENSU18KB0dQSUxwU1AxT0dQSTBwU1AxT0dQSTFwCgJHUElMoEIE
SU8xQotDUlNfCgpHUDEwi0NSU18KDEdQMTGMQ1JTXwoPR1BMMXBJTzFCR1AxMHBJTzFCR1AxMXBJ
TzFMR1BMMaBCBElPM0KLQ1JTXwoSR1AyMItDUlNfChRHUDIxjENSU18KF0dQTDJwSU8zQkdQMjBw
SU8zQkdQMjFwSU8zTEdQTDKgQgRJTzJCi0NSU18KGkdQMzCLQ1JTXwocR1AzMYxDUlNfCh9HUEwz
cElPMkJHUDMwcElPMkJHUDMxcElPMkxHUEwzpENSU18IRENBVBIsFQr/Cv8K/wr/Cv8K/wr/Cv8K
/wr/CgUK/wr/Cv8KBQr/Cv8K/wr/Cv8K/1sBTVVUMAAUIkVORkcBWyNNVVQw/w9wCodJTkRYcAqH
SU5EWHBoTEROXxQTRVhGRwBwCqpJTkRYWydNVVQwFCxVSElEAUVORkdDR0xEaHtPUFQwCjhgRVhG
R6AIYKQMQdAFEKEHpAxB0AUBW4BJT0lEAVNQMU8KAluBEElPSUQBSU5EWAhEQVRBCFuGQA1JTkRY
REFUQQEAOExETl8IAEgMU0NGMQhTQ0YyCFNDRjMIU0NGNAhTQ0Y1CFNDRjYIABBDS0NGCAAwQUNU
UggASBdJT0FICElPQUwISU9IMghJT0wyCABABklOVFIIABhETUNICABINVJHRTAIUkdFMQhSR0Uy
CFJHRTMIUkdFNAhSR0U1CFJHRTYIUkdFNwhSR0U4CFJHRTkIADBPUFQwCE9QVDEIT1BUMghPUFQz
CE9QVDQIT1BUNQhPUFQ2CE9QVDcIT1BUOAhPUFQ5CBQPQ0dMRAGkg4hEQ0FUaAAUTwdEU1RBAUVO
RkdDR0xEaHBBQ1RSYEVYRkegB5NgCv+kAHtgAWCgF5KVaAoQfUlPRVN5YHtoCg8AAElPRVOhDn1J
T1NUeWBoAElPU1SgBWCkCg+hK6AMkpVoChBwSU9FU2ChB3BJT1NUYHtoCg9hoAt7eQFhAGAApAoN
oQOkABRPBERDTlQCRU5GR0NHTERooByQlURNQ0gKBJKTe0RNQ0gKA2EAUkRNQWhpdWFwaUFDVFJ5
SU9BSAoIYX1JT0FMYWFSUklPaGlhCghFWEZHCENSUzEREwoQRwEAAAAAAQAiAAAqAAB5AItDUlMx
CglJUlFNjENSUzEKDERNQU2LQ1JTMQoCSU8xMYtDUlMxCgRJTzEyjENSUzEKB0xFTjEIQ1JTMhEb
ChhHAQAAAAABAEcBAAAAAAEAIgAAKgQAeQCLQ1JTMgoRSVJRRYxDUlMyChRETUFFi0NSUzIKAklP
MjGLQ1JTMgoESU8yMoxDUlMyCgdMRU4yi0NSUzIKCklPMzGLQ1JTMgoMSU8zMoxDUlMyCg9MRU4z
CENSUzQREQoORwEAAAAAAQAjAAAZeQCLQ1JTNAoJSVJRTItDUlM0CgJJT0hMi0NSUzQKBElPUkyM
Q1JTNAoGQUxNToxDUlM0CgdMRU5HFE0HRENSUwJFTkZHQ0dMRGh5SU9BSAoISU8xMX1JT0FMSU8x
MUlPMTFwSU8xMUlPMTJwCghMRU4xoA9JTlRSeQFJTlRSSVJRTaEHcABJUlFNoBKRlERNQ0gKA5Np
AHAARE1BTaEQe0RNQ0gKA2F5AWFETUFNRVhGR6RDUlMxFEUKRENSMgJFTkZHQ0dMRGh5SU9BSAoI
SU8yMX1JT0FMSU8yMUlPMjFwSU8yMUlPMjJwCghMRU4yeUlPSDIKCElPMzF9SU9MMklPMzFJTzMx
cElPMjFJTzMycAoITEVOM6APSU5UUnkBSU5UUklSUUWhB3AASVJRRaASkZRETUNICgOTaQBwAERN
QUWhEHtETUNICgNheQFhRE1BRUVYRkekQ1JTMhREBkRDUjQCRU5GR0NHTERoeUlPQUgKCElPSEx9
SU9BTElPSExJT0hMcElPSExJT1JMcAoITEVOR6AaSU5UUntJTlRSCg9JTlRSeQFJTlRSSVJRTKEH
cABJUlFMRVhGR6RDUlM0FEsIRFNSUwKLaAoJSVJRTYxoCgxETUFNi2gKAklPMTFFTkZHQ0dMRGl7
SU8xMQr/SU9BTHpJTzExCghJT0FIoBJJUlFNgklSUU1gdGABSU5UUqEHcABJTlRSoBJETUFNgkRN
QU1gdGABRE1DSKEIcAoERE1DSEVYRkdEQ05UaQFwaWKgCJRiAHRiAWIUSQpEU1IyAotoChFJUlFU
jGgKFERNQVSLaAoCSU9UMYtoCgpJT1QyRU5GR0NHTERpe0lPVDEK/0lPQUx6SU9UMQoISU9BSHtJ
T1QyCv9JT0wyeklPVDIKCElPSDKgEklSUVSCSVJRVGB0YAFJTlRSoQdwAElOVFKgEkRNQVSCRE1B
VGB0YAFETUNIoQhwCgRETUNIRVhGR0RDTlRpAXBpYqAIlGIAdGIBYhRHBkRTUjQCi2gKAklPSEyL
aAoJSVJRTEVORkdDR0xEaXtJT0hMCv9JT0FMeklPSEwKCElPQUigEklSUUyCSVJRTGB0YAFJTlRS
oQdwAElOVFJFWEZHRENOVGkBcGlioAiUYgB0YgFiCFBNRkcAFEoMU0lPUwFwDVNJT1MAWzGgSQuS
kwoFaF4uU0lPMUVORkcKCqAcS0JGR31eLlNJTzFPUFQ2ChBeLlNJTzFPUFQ2oRh7Xi5TSU8xT1BU
NgrvXi5TSU8xT1BUNqAcTVNGR31eLlNJTzFPUFQ2CiBeLlNJTzFPUFQ2oRh7Xi5TSU8xT1BUNgrf
Xi5TSU8xT1BUNnAK/14uU0lPMU9QVDNwCv9eLlNJTzFPUFQ0fQFeLlNJTzFPUFQyXi5TSU8xT1BU
Ml4uU0lPMUVYRkcUQAdTSU9XAXANU0lPVwBbMV4uU0lPMUVORkcKCnBeLlNJTzFPUFQzUE1GR3AK
/14uU0lPMU9QVDN7Xi5TSU8xT1BUNgrPXi5TSU8xT1BUNnsK/l4uU0lPMU9QVDJeLlNJTzFPUFQy
Xi5TSU8xRVhGRxQoU0lPSACgEHtQTUZHChAAhlBTMksKAqAQe1BNRkcKIACGUFMyTQoCW4JHB1BT
MksIX0hJRAxB0AMDCF9DSUQMQdADCxQYX1NUQQCgDXtJT1NUCwAEAKQKD6EDpAAIX0NSUxEYChVH
AWAAYAAAAUcBZABkAAABIgIAeQAIX1BSUxETChAxAEtgAAFLZAABIgIAOHkAFAxfUFNXAXBoS0JG
RxAJXAAIS0JGRwEUFC5QUzJLX1BSVwCkR1BSVwodCgNbgksJUFMyTQhfSElEDEHQDwMIX0NJRAxB
0A8TFBhfU1RBAKANe0lPU1QLAEAApAoPoQOkAAhDUlMxEQgKBSIAEHkACENSUzIRGAoVRwFgAGAA
AAFHAWQAZAAAASIAEHkAFB1fQ1JTAKAPe0lPU1QLAAQApENSUzGhBqRDUlMyCF9QUlMRCwoIMQAi
ABA4eQAUDF9QU1cBcGhNU0ZHEAlcAAhNU0ZHARQULlBTMk1fUFJXAKRHUFJXCh0KA1uCTRFSTVND
CF9ISUQMQdAMAghfVUlEChAIQ1JTMRFGBwpyRwEQABAAABBHASIAIgAAHkcBRABEAAAcRwFiAGIA
AAJHAWUAZQAAC0cBcgByAAAORwGAAIAAAAFHAYQAhAAAA0cBiACIAAABRwGMAIwAAANHAZAAkAAA
EEcBogCiAAAeRwHgAOAAABBHAdAE0AQAAnkACENSUzIRRgYKYkcBEAAQAAAQRwEiACIAAB5HAUQA
RAAAHEcBcgByAAAORwGAAIAAAAFHAYQAhAAAA0cBiACIAAABRwGMAIwAAANHAZAAkAAAEEcBogCi
AAAeRwHgAOAAABBHAdAE0AQAAnkAFB1fQ1JTAKAPe01CRUML//8ApENSUzGhBqRDUlMyW4IlQ09Q
UghfSElEDEHQDAQIX0NSUxEQCg1HAfAA8AAAECIAIHkAW4I2UDBQMQhfQURSDAAAHgAUD19QUlcA
pEdQUlcKCwoEFBZfUFJUAKAKUElDTaRBUjAxpFBSMDFbgh9VU0IxCF9BRFIMAQAdABQPX1BSVwCk
R1BSVwoDCgNbgh9VU0IyCF9BRFIMAgAdABQPX1BSVwCkR1BSVwoECgNbgh9VU0IzCF9BRFIMAwAd
ABQPX1BSVwCkR1BSVwoMCgNbgh9VU0I0CF9BRFIMBAAdABQPX1BSVwCkR1BSVwoOCgNbgh9VU0I1
CF9BRFIMAQAaABQPX1BSVwCkR1BSVwoFCgNbgh9VU0I2CF9BRFIMAgAaABQPX1BSVwCkR1BSVwog
CgNbgh9VU0I3CF9BRFIMAwAaABQPX1BSVwCkR1BSVwolCgNbgk0PUlAwMQhfQURSDAAAHAAIX0hQ
UBIIBAoICkABAFuAUFhDUwIKQArAW4FCBVBYQ1MAAEAITDBTRQEABwAIAA1MQVNYAQACAAZIUENF
AQApQUJQWAEAAlBEQ1gBAAJQRFNYAQABACgAEFBTUFgBAE86AB5IUEVYAVBNRVgBW4EgUFhDU0AA
QEoAAUVJRkQBAAYAOAAeSFBTWAFQTVNYAVuCF1BYU1gIX0FEUgAIX1BSVxIGAgoJCgQULUhQTUUI
oCZQTVNYcArIYKIVYHABUE1TWKAHUE1TWHZgoQRwAGCGUFhTWAoCFBZfUFJUAKAKUElDTaRBUjA0
pFBSMDRbgk0PUlAwMghfQURSDAEAHAAIX0hQUBIIBAoICkABAFuAUFhDUwIKQArAW4FCBVBYQ1MA
AEAITDBTRQEABwAIAA1MQVNYAQACAAZIUENFAQApQUJQWAEAAlBEQ1gBAAJQRFNYAQABACgAEFBT
UFgBAE86AB5IUEVYAVBNRVgBW4EgUFhDU0AAQEoAAUVJRkQBAAYAOAAeSFBTWAFQTVNYAVuCF1BY
U1gIX0FEUgAIX1BSVxIGAgoJCgQULUhQTUUIoCZQTVNYcArIYKIVYHABUE1TWKAHUE1TWHZgoQRw
AGCGUFhTWAoCFBZfUFJUAKAKUElDTaRBUjA1pFBSMDVbgk0PUlAwMwhfQURSDAIAHAAIX0hQUBII
BAoICkABAFuAUFhDUwIKQArAW4FCBVBYQ1MAAEAITDBTRQEABwAIAA1MQVNYAQACAAZIUENFAQAp
QUJQWAEAAlBEQ1gBAAJQRFNYAQABACgAEFBTUFgBAE86AB5IUEVYAVBNRVgBW4EgUFhDU0AAQEoA
AUVJRkQBAAYAOAAeSFBTWAFQTVNYAVuCF1BYU1gIX0FEUgAIX1BSVxIGAgoJCgQULUhQTUUIoCZQ
TVNYcArIYKIVYHABUE1TWKAHUE1TWHZgoQRwAGCGUFhTWAoCFBZfUFJUAKAKUElDTaRBUjA2pFBS
MDZbgk0PUlAwNAhfQURSDAMAHAAIX0hQUBIIBAoICkABAFuAUFhDUwIKQArAW4FCBVBYQ1MAAEAI
TDBTRQEABwAIAA1MQVNYAQACAAZIUENFAQApQUJQWAEAAlBEQ1gBAAJQRFNYAQABACgAEFBTUFgB
AE86AB5IUEVYAVBNRVgBW4EgUFhDU0AAQEoAAUVJRkQBAAYAOAAeSFBTWAFQTVNYAVuCF1BYU1gI
X0FEUgAIX1BSVxIGAgoJCgQULUhQTUUIoCZQTVNYcArIYKIVYHABUE1TWKAHUE1TWHZgoQRwAGCG
UFhTWAoCFBZfUFJUAKAKUElDTaRBUjA3pFBSMDdbgk0PUlAwNQhfQURSDAQAHAAIX0hQUBIIBAoI
CkABAFuAUFhDUwIKQArAW4FCBVBYQ1MAAEAITDBTRQEABwAIAA1MQVNYAQACAAZIUENFAQApQUJQ
WAEAAlBEQ1gBAAJQRFNYAQABACgAEFBTUFgBAE86AB5IUEVYAVBNRVgBW4EgUFhDU0AAQEoAAUVJ
RkQBAAYAOAAeSFBTWAFQTVNYAVuCF1BYU1gIX0FEUgAIX1BSVxIGAgoJCgQULUhQTUUIoCZQTVNY
cArIYKIVYHABUE1TWKAHUE1TWHZgoQRwAGCGUFhTWAoCFBZfUFJUAKAKUElDTaRBUjA4pFBSMDhb
gk0PUlAwNghfQURSDAUAHAAIX0hQUBIIBAoICkABAFuAUFhDUwIKQArAW4FCBVBYQ1MAAEAITDBT
RQEABwAIAA1MQVNYAQACAAZIUENFAQApQUJQWAEAAlBEQ1gBAAJQRFNYAQABACgAEFBTUFgBAE86
AB5IUEVYAVBNRVgBW4EgUFhDU0AAQEoAAUVJRkQBAAYAOAAeSFBTWAFQTVNYAVuCF1BYU1gIX0FE
UgAIX1BSVxIGAgoJCgQULUhQTUUIoCZQTVNYcArIYKIVYHABUE1TWKAHUE1TWHZgoQRwAGCGUFhT
WAoCFBZfUFJUAKAKUElDTaRBUjA5pFBSMDlbgk0PUlAwNwhfQURSDAYAHAAIX0hQUBIIBAoICkAB
AFuAUFhDUwIKQArAW4FCBVBYQ1MAAEAITDBTRQEABwAIAA1MQVNYAQACAAZIUENFAQApQUJQWAEA
AlBEQ1gBAAJQRFNYAQABACgAEFBTUFgBAE86AB5IUEVYAVBNRVgBW4EgUFhDU0AAQEoAAUVJRkQB
AAYAOAAeSFBTWAFQTVNYAVuCF1BYU1gIX0FEUgAIX1BSVxIGAgoJCgQULUhQTUUIoCZQTVNYcArI
YKIVYHABUE1TWKAHUE1TWHZgoQRwAGCGUFhTWAoCFBZfUFJUAKAKUElDTaRBUjBFpFBSMEVbgk0P
UlAwOAhfQURSDAcAHAAIX0hQUBIIBAoICkABAFuAUFhDUwIKQArAW4FCBVBYQ1MAAEAITDBTRQEA
BwAIAA1MQVNYAQACAAZIUENFAQApQUJQWAEAAlBEQ1gBAAJQRFNYAQABACgAEFBTUFgBAE86AB5I
UEVYAVBNRVgBW4EgUFhDU0AAQEoAAUVJRkQBAAYAOAAeSFBTWAFQTVNYAVuCF1BYU1gIX0FEUgAI
X1BSVxIGAgoJCgQULUhQTUUIoCZQTVNYcArIYKIVYHABUE1TWKAHUE1TWHZgoQRwAGCGUFhTWAoC
FBZfUFJUAKAKUElDTaRBUjBGpFBSMEZbgjVQRUcwCF9BRFIMAAABABQWX1BSVACgClBJQ02kQVIw
MqRQUjAyW4INUEVHUAhfQURSC///W4ImUEVHMQhfQURSDAEAAQAUFl9QUlQAoApQSUNNpEFSMEGk
UFIwQVuCJlBFRzIIX0FEUgwCAAEAFBZfUFJUAKAKUElDTaRBUjBCpFBSMEJbgiZQRUczCF9BRFIM
AAAGABQWX1BSVACgClBJQ02kQVIwQ6RQUjBDW4IPQjBENAhfQURSDAAABAAQRg9cX0dQRRQmX0wx
RABcLwRfU0JfUENJMExQQ0JTSU9IhlwuX1NCX1BXUkIKAhQYX0wwQgCGXC8DX1NCX1BDSTBQMFAx
CgIUGF9MMDMAhlwvA19TQl9QQ0kwVVNCMQoCFBhfTDA0AIZcLwNfU0JfUENJMFVTQjIKAhQYX0ww
QwCGXC8DX1NCX1BDSTBVU0IzCgIUGF9MMEUAhlwvA19TQl9QQ0kwVVNCNAoCFBhfTDA1AIZcLwNf
U0JfUENJMFVTQjUKAhQYX0wyMACGXC8DX1NCX1BDSTBVU0I2CgIUGF9MMjUAhlwvA19TQl9QQ0kw
VVNCNwoCW4ItUFdSQghfSElEDEHQDAwIX1VJRAqqCF9TVEEKCxQPX1BSVwCkR1BSVwodCgMQQihc
AFuASU9fVAELABEKEFuBJElPX1QBVFJQSRAAEAAQABBUUlAwCAAIAAgACAAIAAgACAAIW4BJT19E
AQsQCAoEW4ELSU9fRAFUUlBECFuASU9fSAELABAKBFuBC0lPX0gBVFJQSAhbgFBNSU8BUE1CUwqA
W4ElUE1JTwEAQBQAEAADR1BFMwEATAgAAVVQUlcBAC4AAUdQRUMBW4EeUE1JT0EAQBAAEAADR1BT
MwEATCAACVNDSVMBAAZbgEdQSU8BR1BCUwpkW4FLD0dQSU8BR1UwMAhHVTAxCEdVMDIIR1UwMwhH
SU8wCEdJTzEIR0lPMghHSU8zCAAgR0wwMAhHTDAxCEdMMDIIR1AyNAEAAkdQMjcBR1AyOAEAAwBA
BEdCMDAIR0IwMQhHQjAyCEdCMDMIAEAIR0lWMAhHSVYxCEdJVjIIR0lWMwhHVTA0CEdVMDUIR1Uw
NghHVTA3CEdJTzQIR0lPNQhHSU82CEdJTzcIR0wwNAhHTDA1CEdMMDYIR0wwNwgAIEdVMDgIR1Uw
OQhHVTBBCEdVMEIIR0lPOAhHSU85CEdJT0EIR0lPQghHTDA4CEdMMDkIR0wwQQhHTDBCCFuAUkNS
QgBTUkNCCwBAW4FMClJDUkITAIAACACAABAAgAICSFBBUwIABUhQQUUBAEgJAAEAAVNBVEQBU01C
RAFIREFEAQALUlAxRAFSUDJEAVJQM0QBUlA0RAFSUDVEAVJQNkQBUlA3RAFSUDhEAQBIwFVQMEQB
VVAxRAFVUDJEAVVQM0QBVVA0RAFVUDVEAVVQNkQBVVA3RAFVUDhEAVVQOUQBVVBBRAFVUEJEAVVQ
Q0QBVVBERAEAAQABEIw/AS5fU0JfUENJMFuCH0dMQU4IX0FEUgwAABkAFA9fUFJXAKRHUFJXCg0K
BFuCSlNFSEMxCF9BRFIMAAAdAFuAUFdLRQIKYgoEW4ENUFdLRQMAAVBXVUMIFBdfUFNXAaAIaHD/
UFdVQ6EHcABQV1VDFAlfUzNEAKQKAhQJX1M0RACkCgJbgkJNSFVCTghfQURSAFuCRExQUjAxCF9B
RFIBFBhfVVBDCAhVUENBEgcECv8AAACkVVBDQRQnX1BMRAgIUExEUBIWARETChCBAAAAAAAAADAc
AAAAAAAApFBMRFBbgk4EUFIxMQhfQURSARQZX1VQQwgIVVBDUBIIBAr/Cv8AAKRVUENQFCdfUExE
CAhQTERQEhYBERMKEIEAAAAAAAAA4RwAAAAAAACkUExEUFuCTwRQUjEyCF9BRFIKAhQZX1VQQwgI
VVBDUBIIBAr/Cv8AAKRVUENQFCdfUExECAhQTERQEhYBERMKEIEAAAAAAAAA4R0AAAAAAACkUExE
UFuCTwRQUjEzCF9BRFIKAxQZX1VQQwgIVVBDUBIIBAr/Cv8AAKRVUENQFCdfUExECAhQTERQEhYB
ERMKEIEAAAAAAAAA4B0AAAAAAACkUExEUFuCSwxQUjE0CF9BRFIKBBQZX1VQQwgIVVBDUBIIBAr/
Cv8AAKRVUENQFCdfUExECAhQTERQEhYBERMKEIEAAAAAAAAA4B4AAAAAAACkUExEUAZTQlYxU0RH
VhRCB19EU00MoEgGk2gREwoQj3D8pXWHpku9DLqQoexy+AhfVF8wAHCZagBfVF8woBiTX1RfMACg
CZNpAaQRAwEHoQakEQMBAKEooBaTX1RfMAGgCpNTREdWCv+kAKEDpAGhD6ANk19UXzAKAqRTREdW
pABbgksMUFIxNQhfQURSCgUUGV9VUEMICFVQQ1ASCAQK/wr/AACkVVBDUBQnX1BMRAgIUExEUBIW
ARETChCBAAAAAAAAALEeAAAAAAAApFBMRFAGU0JWMlNER1YUQgdfRFNNDKBIBpNoERMKEI9w/KV1
h6ZLvQy6kKHscvgIX1RfMABwmWoAX1RfMKAYk19UXzAAoAmTaQGkEQMBB6EGpBEDAQChKKAWk19U
XzABoAqTU0RHVgr/pAChA6QBoQ+gDZNfVF8wCgKkU0RHVqQAW4JLDFBSMTYIX0FEUgoGFBlfVVBD
CAhVUENQEggECv8K/wAApFVQQ1AUJ19QTEQICFBMRFASFgEREwoQgQAAAAAAAACxHgAAAAAAAKRQ
TERQBlNCVjFTREdWFEIHX0RTTQygSAaTaBETChCPcPyldYemS70MupCh7HL4CF9UXzAAcJlqAF9U
XzCgGJNfVF8wAKAJk2kBpBEDAQehBqQRAwEAoSigFpNfVF8wAaAKk1NER1YK/6QAoQOkAaEPoA2T
X1RfMAoCpFNER1akAFuCSwxQUjE3CF9BRFIKBxQZX1VQQwgIVVBDUBIIBAr/Cv8AAKRVUENQFCdf
UExECAhQTERQEhYBERMKEIEAAAAAAAAAsR4AAAAAAACkUExEUAZTQlYyU0RHVhRCB19EU00MoEgG
k2gREwoQj3D8pXWHpku9DLqQoexy+AhfVF8wAHCZagBfVF8woBiTX1RfMACgCZNpAaQRAwEHoQak
EQMBAKEooBaTX1RfMAGgCpNTREdWCv+kAKEDpAGhD6ANk19UXzAKAqRTREdWpABbgk8EUFIxOAhf
QURSCggUGV9VUEMICFVQQ1ASCAQK/wr/AACkVVBDUBQnX1BMRAgIUExEUBIWARETChCBAAAAAAAA
ALEeAAAAAAAApFBMRFAUD19QUlcApEdQUlcKDQoEW4JAOkVIQzIIX0FEUgwAABoAW4BQV0tFAgpi
CgRbgQ1QV0tFAwABUFdVQwYUF19QU1cBoAhocP9QV1VDoQdwAFBXVUMUCV9TM0QApAoCFAlfUzRE
AKQKAluCSDNIVUJOCF9BRFIAW4JKMlBSMDEIX0FEUgEUGF9VUEMICFVQQ0ESBwQK/wAAAKRVUENB
FCdfUExECAhQTERQEhYBERMKEIEAAAAAAAAAMBwAAAAAAACkUExEUFuCTgRQUjExCF9BRFIBFBlf
VVBDCAhVUENQEggECv8K/wAApFVQQ1AUJ19QTEQICFBMRFASFgEREwoQgQAAAAAAAADhHAAAAAAA
AKRQTERQW4JLDFBSMTIIX0FEUgoCFBlfVVBDCAhVUENQEggECv8K/wAApFVQQ1AUJ19QTEQICFBM
RFASFgEREwoQgQAAAAAAAADhHQAAAAAAAKRQTERQBlNCVjFTREdWFEIHX0RTTQygSAaTaBETChCP
cPyldYemS70MupCh7HL4CF9UXzAAcJlqAF9UXzCgGJNfVF8wAKAJk2kBpBEDAQehBqQRAwEAoSig
FpNfVF8wAaAKk1NER1YK/6QAoQOkAaEPoA2TX1RfMAoCpFNER1akAFuCSwxQUjEzCF9BRFIKAxQZ
X1VQQwgIVVBDUBIIBAr/Cv8AAKRVUENQFCdfUExECAhQTERQEhYBERMKEIEAAAAAAAAA4R0AAAAA
AACkUExEUAZTQlYyU0RHVhRCB19EU00MoEgGk2gREwoQj3D8pXWHpku9DLqQoexy+AhfVF8wAHCZ
agBfVF8woBiTX1RfMACgCZNpAaQRAwEHoQakEQMBAKEooBaTX1RfMAGgCpNTREdWCv+kAKEDpAGh
D6ANk19UXzAKAqRTREdWpABbgk8EUFIxNAhfQURSCgQUGV9VUEMICFVQQ1ASCAQK/wr/AACkVVBD
UBQnX1BMRAgIUExEUBIWARETChCBAAAAAAAAAOEeAAAAAAAApFBMRFBbgk8EUFIxNQhfQURSCgUU
GV9VUEMICFVQQ1ASCAQK/wr/AACkVVBDUBQnX1BMRAgIUExEUBIWARETChCBAAAAAAAAALEeAAAA
AAAApFBMRFBbgk8EUFIxNghfQURSCgYUGV9VUEMICFVQQ1ASCAQK/wr/AACkVVBDUBQnX1BMRAgI
UExEUBIWARETChCBAAAAAAAAALEeAAAAAAAApFBMRFAUD19QUlcApEdQUlcKDQoEW4JGYFhIQ18I
X0FEUgwAABQAW4BYUFJUAgp0CmxbgStYUFJUAwAIUE1FRQEABlBNRVMBAEAtUFIyXyBQUjJNIFBS
M18gUFIzTSAIWFJTVAAUIkNVSUQJoBmTaBETChCpEpV8BRe0TK99UGokI6txpAGkABRJBVBPU0ML
imoAQ0RXMYpqCghDRFczoBCSk2kBfUNEVzEKCENEVzGgEpNYSENJAH1DRFcxCgJDRFcxoBySe0NE
VzEBAKAMe0NEVzMBAEVTRUyhBVhTRUykahRDBlhTRUwIoEsFkZNYSENJCgKTWEhDSQoDcAFYVVNC
cAFYUlNUcABge1BSM18M8P///2B9YFhIUE1ge2BQUjNNUFIzX3AAYHtQUjJfDPD///9gfWBYSFBN
YHtgUFIyTVBSMl8UP0VTRUwIoDiRk1hIQ0kKApNYSENJCgN7UFIzXwzw////UFIzX3tQUjJfDPD/
//9QUjJfcABYVVNCcABYUlNUFBlYV0FLCKASkZNYVVNCAZNYUlNUAVhTRUwUCV9TM0QApAoCFAlf
UzREAKQKAluCR0VSSFVCCF9BRFIAW4JFCEhTUDEIX0FEUgEULF9VUEMICFVQQ1ASCAQK/woDAACg
EpJ7UFIyXwEAcACIVVBDUAAApFVQQ1AUSwRfUExECAhQTERQEhYBERMKEAHGcgAAAAAAaQyAAAAA
AACNg4hQTERQAAAKQFZJU1+gE5J7UFIyXwEAe1ZJU18AVklTX6RQTERQW4JICEhTUDIIX0FEUgoC
FC1fVVBDCAhVUENQEggECv8KAwAAoBOSe1BSMl8KAgBwAIhVUENQAACkVVBDUBRMBF9QTEQICFBM
RFASFgEREwoQAcZyAAAAAABpDAABAAAAAI2DiFBMRFAAAApAVklTX6AUkntQUjJfCgIAe1ZJU18A
VklTX6RQTERQW4JICEhTUDMIX0FEUgoDFC1fVVBDCAhVUENQEggECv8KAwAAoBOSe1BSMl8KBABw
AIhVUENQAACkVVBDUBRMBF9QTEQICFBMRFASFgEREwoQAcZyAAAAAABpDIABAAAAAI2DiFBMRFAA
AApAVklTX6AUkntQUjJfCgQAe1ZJU18AVklTX6RQTERQW4JICEhTUDQIX0FEUgoEFC1fVVBDCAhV
UENQEggECv8KAwAAoBOSe1BSMl8KCABwAIhVUENQAACkVVBDUBRMBF9QTEQICFBMRFASFgEREwoQ
AcZyAAAAAABpDAACAAAAAI2DiFBMRFAAAApAVklTX6AUkntQUjJfCggAe1ZJU18AVklTX6RQTERQ
W4JGCFNTUDEIX0FEUgoFFCxfVVBDCAhVUENQEggECv8KAwAAoBKSe1BSM18BAHAAiFVQQ1AAAKRV
UENQFEsEX1BMRAgIUExEUBIWARETChABxnIAAAAAAGkMgAAAAAAAjYOIUExEUAAACkBWSVNfoBOS
e1BSM18BAHtWSVNfAFZJU1+kUExEUFuCSAhTU1AyCF9BRFIKBhQtX1VQQwgIVVBDUBIIBAr/CgMA
AKATkntQUjNfCgIAcACIVVBDUAAApFVQQ1AUTARfUExECAhQTERQEhYBERMKEAHGcgAAAAAAaQwA
AQAAAACNg4hQTERQAAAKQFZJU1+gFJJ7UFIzXwoCAHtWSVNfAFZJU1+kUExEUFuCSAhTU1AzCF9B
RFIKBxQtX1VQQwgIVVBDUBIIBAr/CgMAAKATkntQUjNfCgQAcACIVVBDUAAApFVQQ1AUTARfUExE
CAhQTERQEhYBERMKEAHGcgAAAAAAaQyAAQAAAACNg4hQTERQAAAKQFZJU1+gFJJ7UFIzXwoEAHtW
SVNfAFZJU1+kUExEUFuCSAhTU1A0CF9BRFIKCBQtX1VQQwgIVVBDUBIIBAr/CgMAAKATkntQUjNf
CggAcACIVVBDUAAApFVQQ1AUTARfUExECAhQTERQEhYBERMKEAHGcgAAAAAAaQwAAgAAAACNg4hQ
TERQAAAKQFZJU1+gFJJ7UFIzXwoIAHtWSVNfAFZJU1+kUExEUBQPX1BSVwCkR1BSVwoNCgRbgk8E
SERFRghfQURSDAAAGwBbgEhEQVICCkwKEFuBIkhEQVICRENLQQEAB0RDS00BAAZEQ0tTAQAwAA9Q
TUVTARQPX1BSVwCkR1BSVwoNCgRbgg9TQVQwCF9BRFIMAgAfAFuCD1NBVDEIX0FEUgwFAB8AW4JE
R1NCVVMIX0FEUgwDAB8AW4BTTUJQAgpACsBbgQ1TTUJQAwACSTJDRQFbgFNNUEICCiAKBFuBDVNN
UEIDAAVTQkFSC1uAU01CSQF5U0JBUgoFAAoQW4E6U01CSQFIU1RTCAAISENPTghIQ09NCFRYU0EI
REFUMAhEQVQxCEhCRFIIUEVDUghSWFNBCFNEQVQQFEQEU1NYQgqgB1NUUlSkAHAASTJDRXAKv0hT
VFNwaFRYU0FwaUhDT01wCkhIQ09OoBJDT01QfUhTVFMK/0hTVFOkAaQAFEgEU1JYQgmgCVNUUlSk
C///cABJMkNFcAq/SFNUU3B9aAEAVFhTQXAKREhDT06gFUNPTVB9SFNUUwr/SFNUU6REQVQwpAv/
/xRKBFNXUkILoAdTVFJUpABwAEkyQ0VwCr9IU1RTcGhUWFNBcGlIQ09NcGpEQVQwcApISENPTqAS
Q09NUH1IU1RTCv9IU1RTpAGkABROBFNSREIKoAlTVFJUpAv//3AASTJDRXAKv0hTVFNwfWgBAFRY
U0FwaUhDT01wCkhIQ09OoBVDT01QfUhTVFMK/0hTVFOkREFUMKQL//8USAVTV1JXC6AHU1RSVKQA
cABJMkNFcAq/SFNUU3BoVFhTQXBpSENPTXtqCv9EQVQxe3pqCggACv9EQVQwcApMSENPTqASQ09N
UH1IU1RTCv9IU1RTpAGkABRKBVNSRFcKoAlTVFJUpAv//3AASTJDRXAKv0hTVFNwfWgBAFRYU0Fw
aUhDT01wCkxIQ09OoB9DT01QfUhTVFMK/0hTVFOkfXlEQVQwCggAREFUMQCkDP////8USglTQkxX
DKAHU1RSVKQAcGtJMkNFcAq/SFNUU3BoVFhTQXBpSENPTXCHakRBVDBwAGFwg4hqAABIQkRScApU
SENPTqJBBJSHamFwC6APYKISkJJ7SFNUUwqAAGB2YFshCjKgCZJgS0lMTKQAcAqASFNUU3VhoA+U
h2phcIOIamEASEJEUqASQ09NUH1IU1RTCv9IU1RTpAGkABRADVNCTFILCFRCVUYRBAsAAaAHU1RS
VKQAcGpJMkNFcAq/SFNUU3B9aAEAVFhTQXBpSENPTXAKVEhDT05wC6APYKISkJJ7SFNUUwqAAGB2
YFshCjKgCZJgS0lMTKQAcERBVDCIVEJVRgAAcAqASFNUU3ABYaJDBJVhg4hUQlVGAABwC6APYKIS
kJJ7SFNUUwqAAGB2YFshCjKgCZJgS0lMTKQAcEhCRFKIVEJVRmEAcAqASFNUU3VhoBVDT01QfUhT
VFMK/0hTVFOkVEJVRqQAFE8EU1RSVAhwCshgoh1goBV7SFNUUwpAAHZgWyIBoAaTYACkAaEEcABg
cAugD2CiHmCgF3tIU1RTAQB2YFshCjKgCJNgAEtJTEyhA6QApAEULUNPTVAIcAugD2CiH2CgC3tI
U1RTCgIApAGhEHZgWyEKMqAIk2AAS0lMTKQAFBxLSUxMCH1IQ09OCgJIQ09OfUhTVFMK/0hTVFMQ
QRAvA19TQl9QQ0kwTFBDQluAQ1BTQgAMGJ4tewoQW4FMBUNQU0IAUlRDWAFTQkIwB1NCQjEIU0JC
MghTQkIzCFNCQjQIU0JCNQhTQkI2CFNCQjcIU0JCOAhTQkI5CFNCQkEIU0JCQghTQkJDCFNCQkQI
U0JCRQhTQkJGCBQSU1BUUwFwAVNMUFhwAVNMUEUUG1NXQUsBcABTTFBFoAVSVENYoQiGUFdSQgoC
W4BTTUlFAVBNQlMKBFuBIlNNSUUBAApSVENTAQADUEVYUwFXQUtTAQAIUFdCVAEAB1uAU0xQUgFT
TUNSCghbgRZTTFBSAQAEU0xQRQEAH1NMUFgBABsQHy8DX1NCX1BDSTBSUDAxFA9fUFJXAKRHUFJX
CgkKBBAfLwNfU0JfUENJMFJQMDIUD19QUlcApEdQUlcKCQoEEB8vA19TQl9QQ0kwUlAwMxQPX1BS
VwCkR1BSVwoJCgQQHy8DX1NCX1BDSTBSUDA0FA9fUFJXAKRHUFJXCgkKBBAfLwNfU0JfUENJMFJQ
MDUUD19QUlcApEdQUlcKCQoEEB8vA19TQl9QQ0kwUlAwNhQPX1BSVwCkR1BSVwoJCgQQHy8DX1NC
X1BDSTBSUDA3FA9fUFJXAKRHUFJXCgkKBBAfLwNfU0JfUENJMFJQMDgUD19QUlcApEdQUlcKCQoE
W4AvBF9TQl9QQ0kwTFBDQkxQQ1ICCoAKBFuBSAZcLwRfU0JfUENJMExQQ0JMUENSAUNBRFIDAAFD
QkRSAwABTFREUgIAAkZERFIBAANDQUxFAUNCTEUBTFRMRQFGRExFAQAER0xMRQFHSExFAUtDTEUB
TUNMRQFDMUxFAUMyTEUBAAIUSwlVWERWAXAK/2AIX1RfMABwcmgAAF9UXzCgDJNfVF8wC/gDcABg
oUEHoAyTX1RfMAv4AnABYKFBBqANk19UXzALIAJwCgJgoUAFoA2TX1RfMAsoAnAKA2ChP6ANk19U
XzALOAJwCgRgoS+gDZNfVF8wC+gCcAoFYKEfoA2TX1RfMAs4A3AKBmChD6ANk19UXzAL6ANwCgdg
pGAUQiJSUklPBAhfVF8wAHByaAAAX1RfMKAqk19UXzAAcABDQUxFcFVYRFZqYKAMkpNgCv9wYENB
RFKgCGlwAUNBTEWhQB6gKpNfVF8wAXAAQ0JMRXBVWERWamCgDJKTYAr/cGBDQkRSoAhpcAFDQkxF
oUIboD+TX1RfMAoCcABMVExFoAyTagt4A3AATFREUqAMk2oLeAJwAUxURFKgDZNqC7wDcAoCTFRE
UqAIaXABTFRMRaFPFqAxk19UXzAKA3AARkRMRaAMk2oL8ANwAEZERFKgDJNqC3ADcAFGRERSoAhp
cAFGRExFoUoToDiTX1RfMAoIoBeTagsAAqAIaXABR0xMRaEHcABHTExFoBeTagsIAqAIaXABR0hM
RaEHcABHSExFoU4PoDiTX1RfMAoJoBeTagsAAqAIaXABR0xMRaEHcABHTExFoBeTagsIAqAIaXAB
R0hMRaEHcABHSExFoUIMoCSTX1RfMAoKoBuRk2oKYJNqCmSgCGlwAUtDTEWhB3AAS0NMRaFKCaAk
k19UXzAKC6AbkZNqCmKTagpmoAhpcAFNQ0xFoQdwAE1DTEWhQgegNpNfVF8wCgygFpNqCi6gCGlw
AUMxTEWhB3AAQzFMRaAWk2oKTqAIaXABQzJMRaEHcABDMkxFoTigNpNfVF8wCg2gFpNqCi6gCGlw
AUMxTEWhB3AAQzFMRaAWk2oKTqAIaXABQzJMRaEHcABDMkxFFAZSRE1BAxBDFS5fU0JfUENJMAhQ
QTBIAAhQQTFIAAhQQTFMAAhQQTJIAAhQQTJMAAhQQTNIAAhQQTNMAAhQQTRIAAhQQTRMAAhQQTVI
AAhQQTVMAAhQQTZIAAhQQTZMABRMB05QVFMBcFBNMEhQQTBIcFBNMUhQQTFIcFBNMUxQQTFMcFBN
MkhQQTJIcFBNMkxQQTJMcFBNM0hQQTNIcFBNM0xQQTNMcFBNNEhQQTRIcFBNNExQQTRMcFBNNUhQ
QTVIcFBNNUxQQTVMcFBNNkhQQTZIcFBNNkxQQTZMFEwHTldBSwFwUEEwSFBNMEhwUEExSFBNMUhw
UEExTFBNMUxwUEEySFBNMkhwUEEyTFBNMkxwUEEzSFBNM0hwUEEzTFBNM0xwUEE0SFBNNEhwUEE0
TFBNNExwUEE1SFBNNUhwUEE1TFBNNUxwUEE2SFBNNkhwUEE2TFBNNkwQHy8DX1NCX1BDSTBQRUcw
FA9fUFJXAKRHUFJXCgkKBBA9LwRfU0JfUENJMFBFRzBQRUdQW4BER0ZYAgAK8FuBDkRHRlgTAEgF
TE5LVggUD19QUlcApEdQUlcKCQoEEB8vA19TQl9QQ0kwUEVHMRQPX1BSVwCkR1BSVwoJCgQQHy8D
X1NCX1BDSTBQRUcyFA9fUFJXAKRHUFJXCgkKBBAfLwNfU0JfUENJMFBFRzMUD19QUlcApEdQUlcK
CQoEEIhlAS5fU0JfUENJMFuCimQBR0ZYMAhfQURSDAAAAgAUJVBDUEMAoBhFQ09OcAoCXl4vA0xQ
Q0JIX0VDU0xQQ0VDU1QKbxQmUEFQUgCgG0VDT06keF5eLwNMUENCSF9FQ01DQVAKZAAAoQOkABQm
X0RPUwFwe2gKBwBEU0VOoBWTe2gKAwAAoAxbEkhET1MASERPUxRGUV9ET0QAoAxbEklEQUIASURB
QqFIC3AATkRJRKAVkpNESURMAHBTRERMRElETERJRDGgFZKTRERMMgBwU0RETERETDJESUQyoBWS
k0RETDMAcFNERExEREwzRElEM6AVkpNEREw0AHBTRERMRERMNERJRDSgFZKTRERMNQBwU0RETERE
TDVESUQ1oBWSk0RETDYAcFNERExEREw2RElENqAVkpNEREw3AHBTRERMRERMN0RJRDegFZKTRERM
OABwU0RETERETDhESUQ4oCyTTkRJRAEIVE1QMRIHAQz/////cH0MAAABAERJRDEAiFRNUDEAAKRU
TVAxoEYEk05ESUQKAghUTVAyEgwCDP////8M/////3B9DAAAAQBESUQxAIhUTVAyAABwfQwAAAEA
RElEMgCIVE1QMgEApFRNUDKgTwWTTkRJRAoDCFRNUDMSEQMM/////wz/////DP////9wfQwAAAEA
RElEMQCIVE1QMwAAcH0MAAABAERJRDIAiFRNUDMBAHB9DAAAAQBESUQzAIhUTVAzCgIApFRNUDOg
SAeTTkRJRAoECFRNUDQSFgQM/////wz/////DP////8M/////3B9DAAAAQBESUQxAIhUTVA0AABw
fQwAAAEARElEMgCIVE1QNAEAcH0MAAABAERJRDMAiFRNUDQKAgBwfQwAAAEARElENACIVE1QNAoD
AKRUTVA0oEEJk05ESUQKBQhUTVA1EhsFDP////8M/////wz/////DP////8M/////3B9DAAAAQBE
SUQxAIhUTVA1AABwfQwAAAEARElEMgCIVE1QNQEAcH0MAAABAERJRDMAiFRNUDUKAgBwfQwAAAEA
RElENACIVE1QNQoDAHB9DAAAAQBESUQ1AIhUTVA1CgQApFRNUDWgSgqTTkRJRAoGCFRNUDYSIAYM
/////wz/////DP////8M/////wz/////DP////9wfQwAAAEARElEMQCIVE1QNgAAcH0MAAABAERJ
RDIAiFRNUDYBAHB9DAAAAQBESUQzAIhUTVA2CgIAcH0MAAABAERJRDQAiFRNUDYKAwBwfQwAAAEA
RElENQCIVE1QNgoEAHB9DAAAAQBESUQ2AIhUTVA2CgUApFRNUDagQwyTTkRJRAoHCFRNUDcSJQcM
/////wz/////DP////8M/////wz/////DP////8M/////3B9DAAAAQBESUQxAIhUTVA3AABwfQwA
AAEARElEMgCIVE1QNwEAcH0MAAABAERJRDMAiFRNUDcKAgBwfQwAAAEARElENACIVE1QNwoDAHB9
DAAAAQBESUQ1AIhUTVA3CgQAcH0MAAABAERJRDYAiFRNUDcKBQBwfQwAAAEARElENwCIVE1QNwoG
AKRUTVA3oEwNk05ESUQKCAhUTVA4EioIDP////8M/////wz/////DP////8M/////wz/////DP//
//8M/////3B9DAAAAQBESUQxAIhUTVA4AABwfQwAAAEARElEMgCIVE1QOAEAcH0MAAABAERJRDMA
iFRNUDgKAgBwfQwAAAEARElENACIVE1QOAoDAHB9DAAAAQBESUQ1AIhUTVA4CgQAcH0MAAABAERJ
RDYAiFRNUDgKBQBwfQwAAAEARElENwCIVE1QOAoGAHB9DAAAAQBESUQ4AIhUTVA4CgcApFRNUDig
FpNORElECgmgDVsSSFdJRACkSFdJRKQSBQELAARbgkgIREQwMRQcX0FEUgigCZNESUQxAKQBoQuk
ewv//0RJRDEAFA9fRENTAKRDRERTRElEMRQoX0RHUwCgGJCTe1NHTUQKfwABWxJTTlhEAKROWEQx
pE5ERFNESUQxFB9fRFNTAaAYk3toDAAAAMAADAAAAMBwTlNURUNTVEUUC19CUUMApEJSVExbgk0J
REQwMxQdX0FEUgigCpNESUQzAKQKA6ELpHsL//9ESUQzABQcX0RDUwCgCpNESUQzAKQKC6EKpENE
RFNESUQzFChfREdTAKAYkJN7U0dNRAp/AAFbElNOWEQApE5YRDOkTkREU0RJRDMUH19EU1MBoBiT
e2gMAAAAwAAMAAAAwHBOU1RFQ1NURRQSX0JRQwCkXl4uREQwMV9CUUNbgk0JREQwNBQdX0FEUgig
CpNESUQ0AKQKBKELpHsL//9ESUQ0ABQcX0RDUwCgCpNESUQ0AKQKC6EKpENERFNESUQ0FChfREdT
AKAYkJN7U0dNRAp/AAFbElNOWEQApE5YRDSkTkREU0RJRDQUH19EU1MBoBiTe2gMAAAAwAAMAAAA
wHBOU1RFQ1NURRQSX0JRQwCkXl4uREQwMV9CUUNbgk0JREQwNRQdX0FEUgigCpNESUQ1AKQKBaEL
pHsL//9ESUQ1ABQcX0RDUwCgCpNESUQ1AKQKC6EKpENERFNESUQ1FChfREdTAKAYkJN7U0dNRAp/
AAFbElNOWEQApE5YRDWkTkREU0RJRDUUH19EU1MBoBiTe2gMAAAAwAAMAAAAwHBOU1RFQ1NURRQS
X0JRQwCkXl4uREQwMV9CUUNbgk0JREQwNhQdX0FEUgigCpNESUQ2AKQKBqELpHsL//9ESUQ2ABQc
X0RDUwCgCpNESUQ2AKQKC6EKpENERFNESUQ2FChfREdTAKAYkJN7U0dNRAp/AAFbElNOWEQApE5Y
RDakTkREU0RJRDYUH19EU1MBoBiTe2gMAAAAwAAMAAAAwHBOU1RFQ1NURRQSX0JRQwCkXl4uREQw
MV9CUUNbgk0JREQwNxQdX0FEUgigCpNESUQ3AKQKB6ELpHsL//9ESUQ3ABQcX0RDUwCgCpNESUQ3
AKQKC6EKpENERFNESUQ3FChfREdTAKAYkJN7U0dNRAp/AAFbElNOWEQApE5YRDekTkREU0RJRDcU
H19EU1MBoBiTe2gMAAAAwAAMAAAAwHBOU1RFQ1NURRQSX0JRQwCkXl4uREQwMV9CUUNbgk0JREQw
OBQdX0FEUgigCpNESUQ4AKQKCKELpHsL//9ESUQ4ABQcX0RDUwCgCpNESUQ4AKQKC6EKpENERFNE
SUQ4FChfREdTAKAYkJN7U0dNRAp/AAFbElNOWEQApE5YRDikTkREU0RJRDgUH19EU1MBoBiTe2gM
AAAAwAAMAAAAwHBOU1RFQ1NURRQSX0JRQwCkXl4uREQwMV9CUUMUTgZTRERMAXVORElEcHtoCw8P
AGB9DAAAAIBgYaAJk0RJRExgpGGgCZNEREwyYKRhoAmTRERMM2CkYaAJk0RETDRgpGGgCZNEREw1
YKRhoAmTRERMNmCkYaAJk0RETDdgpGGgCZNEREw4YKRhpAAUQgdDRERTAXB7aAsPDwBgoAeTAGCk
Ch2gCpNDQURMYKQKH6AKk0NBTDJgpAofoAqTQ0FMM2CkCh+gCpNDQUw0YKQKH6AKk0NBTDVgpAof
oAqTQ0FMNmCkCh+gCpNDQUw3YKQKH6AKk0NBTDhgpAofpAodFEgGTkREUwFwe2gLDw8AYKAGkwBg
pACgCZNOQURMYKQBoAmTTkRMMmCkAaAJk05ETDNgpAGgCZNOREw0YKQBoAmTTkRMNWCkAaAJk05E
TDZgpAGgCZNOREw3YKQBoAmTTkRMOGCkAaQAECReXlBDSTBbgE1DSFACCkAKwFuBEE1DSFAAAEAw
VEFTTQoABluASUdEUAIKQArAW4FFBUlHRFAAAEAJAAFHSVZEAQACR1VNQQMACQAER01GTgEAGwBA
RkFTTEUIABhHU1NFAUdTU0IOR1NFUwEAMAAMQ0RWTAEAAwAYTEJQQwgAMEFTTFMgW4BJR0RNAEFT
TEILACBbgU0aSUdETQBTSUdOQAhTSVpFIE9WRVIgU1ZFUkAQVlZFUkAIR1ZFUkAITUJPWCBETU9E
IABAUERSRFkgQ1NUUyBDRVZUIABACkRJREwgRERMMiBEREwzIERETDQgRERMNSBEREw2IERETDcg
RERMOCBDUERMIENQTDIgQ1BMMyBDUEw0IENQTDUgQ1BMNiBDUEw3IENQTDggQ0FETCBDQUwyIENB
TDMgQ0FMNCBDQUw1IENBTDYgQ0FMNyBDQUw4IE5BREwgTkRMMiBOREwzIE5ETDQgTkRMNSBOREw2
IE5ETDcgTkRMOCBBU0xQIFRJRFggQ0hQRCBDTElEIENEQ0sgU1hTVyBFVlRTIENOT1QgTlJEWSAA
QB5TQ0lFAUdFRkMER1hGQwNHRVNGCAAQUEFSTSBEU0xQIABAekFSRFkgQVNMQyBUQ0hFIEFMU0kg
QkNMUCBQRklUIENCTFYgQkNMTUAUQ1BGTSBFUEZNIFBMVVRAJVBGTUIgQ0NEViBQQ0ZUIFNST1Qg
SVVFUiBGRFNQQARGRFNTIABAJUdWRDGAAAxQSEVEIEJERENAgAhEQlRCEjIVAAoHCjgLwAELAA4K
PwvHAQsHDgv4AQs4DgvADwAAAAAACwBwCwdwCzhwC8BxCwB+CENEQ1QSJwUSBwIK5AtAARIHAgre
C00BEgcCCt4LTQESBAIAABIHAgreC00BCFNVQ0MBCE5WTEQKAghDUklUCgQITkNSVAoGFERQR1ND
SQgUSB5HQkRBCKAak0dFU0YAcAt5BlBBUk1wAEdFU0akU1VDQ6Aak0dFU0YBcAtAAlBBUk1wAEdF
U0akU1VDQ6BHBJNHRVNGCgR7UEFSTQwAAP/vUEFSTXtQQVJNeYOIREJUQklCVFQAChAAUEFSTX1J
QlRUUEFSTVBBUk1wAEdFU0akU1VDQ6BKBpNHRVNGCgVwSVBTQ1BBUk19UEFSTXlJUEFUCggAUEFS
TXJQQVJNCwABUEFSTX1QQVJNeUxJRFMKEABQQVJNclBBUk0MAAABAFBBUk19UEFSTXlJQklBChQA
UEFSTXAAR0VTRqRTVUNDoC2TR0VTRgoGcElUVkZQQVJNfVBBUk15SVRWTQoEAFBBUk1wAEdFU0ak
U1VDQ6BDB5NHRVNGCgdwR0lWRFBBUk1/UEFSTQFQQVJNfVBBUk15R01GTgEAUEFSTX1QQVJNCwAY
UEFSTX1QQVJNeUlETVMKEQBQQVJNfXmDiIOIQ0RDVEhWQ08AQ0RWTAAKFQBQQVJNUEFSTXABR0VT
RqRTVUNDoCqTR0VTRgoKcABQQVJNoBBJU1NDfVBBUk0KA1BBUk1wAEdFU0akU1VDQ6Afk0dFU0YK
C3BLU1YwUEFSTXBLU1YxR0VTRqRTVUNDcABHRVNGpENSSVQURS1TQkNCCKAik0dFU0YAcABQQVJN
cAz9hw8AUEFSTXAAR0VTRqRTVUNDoBiTR0VTRgFwAEdFU0ZwAFBBUk2kU1VDQ6AZk0dFU0YKA3AA
R0VTRnAAUEFSTaRTVUNDoBmTR0VTRgoEcABHRVNGcABQQVJNpFNVQ0OgGZNHRVNGCgVwAEdFU0Zw
AFBBUk2kU1VDQ6A3k0dFU0YKBnB7UEFSTQoPAElUVkZwentQQVJNCvAACgQASVRWTXAAR0VTRnAA
UEFSTaRTVUNDoEUEk0dFU0YKB6Aqk1BBUk0AcENMSURgoBx7DAAAAIBgAHtDTElECg9DTElER0xJ
RENMSURwAEdFU0ZwAFBBUk2kU1VDQ6AZk0dFU0YKCHAAR0VTRnAAUEFSTaRTVUNDoCSTR0VTRgoJ
e1BBUk0K/0lCVFRwAEdFU0ZwAFBBUk2kU1VDQ6BGBZNHRVNGCgp7UEFSTQr/SVBTQ6Ahe3pQQVJN
CggACv8Ae3pQQVJNCggACv9JUEFUdklQQVR7elBBUk0KFAAKB0lCSUFwAEdFU0ZwAFBBUk2kU1VD
Q6BEBZNHRVNGCgt7elBBUk0BAAFJRjFFoBt7UEFSTQwA4AEAAHt6UEFSTQoNAAoPSURNU6EQe3pQ
QVJNChEACg9JRE1TcABHRVNGcABQQVJNpFNVQ0OgGZNHRVNGChBwAEdFU0ZwAFBBUk2kU1VDQ6As
k0dFU0YKEXB5TElEUwoIAFBBUk1yUEFSTQsAAVBBUk1wAEdFU0akU1VDQ6BJBJNHRVNGChKgJntQ
QVJNAQCgEJN6UEFSTQEAAXABSVNTQ6EMcABHRVNGpENSSVShB3AASVNTQ3AAR0VTRnAAUEFSTaRT
VUNDoBmTR0VTRgoTcABHRVNGcABQQVJNpFNVQ0OgJJNHRVNGChR7UEFSTQoPUEFWUHAAR0VTRnAA
UEFSTaRTVUNDcABHRVNGpFNVQ0OgEZNHRUZDCgRwR0JEQUdYRkOgEZNHRUZDCgZwU0JDQkdYRkNw
AEdFRkNwAVNDSVNwAEdTU0VwAFNDSUWkABQZUERSRACgDJJEUkRZWyJBU0xQpJJEUkRZFB1QU1RT
AKAOlENTVFMKAlsiQVNMUKSTQ1NUUwoDFEIGR05PVAKgB1BEUkSkAXBoQ0VWVHAKA0NTVFOgLJCT
Q0hQRACTaQCgGJGUT1NZUwvQB5VPU1lTC9YHhlBDSTBpoQeGR0ZYMGmgDVsSSE5PVABITk9UaKEI
hkdGWDAKgKQAFBNHSERTAXBoVElEWKRHTk9UAQAUIkdMSUQBoAuTaAFwCgNDTElEoQdwaENMSUSk
R05PVAoCABQUR0RDSwFwaENEQ0ukR05PVAoEABQZUEFSRACgDJJBUkRZWyJBU0xQpJJBUkRZFEoS
QUlOVAqgDpJ7VENIRXkBaAAApAGgB1BBUkSkAaBADJNoCgKgRwlDUEZNe0NQRk0KD2B7RVBGTQoP
YaAqk2ABoA17YQoGAHAKBlBGSVShF6ANe2EKCABwCghQRklUoQdwAVBGSVSgKpNgCgagDXthCggA
cAoIUEZJVKEWoAt7YQEAcAFQRklUoQhwCgZQRklUoCqTYAoIoAt7YQEAcAFQRklUoRigDXthCgYA
cAoGUEZJVKEIcAoIUEZJVKEMf1BGSVQKB1BGSVR9UEZJVAwAAACAUEZJVHAKBEFTTEOhQgSgKJNo
AXB4d2kK/wAKZAAAQkNMUH1CQ0xQDAAAAIBCQ0xQcAoCQVNMQ6EWoBCTaABwaUFMU0lwAUFTTEOh
A6QBcAFBU0xFpAAUF1NDSVAAoA6Sk09WRVIApJJHU01JpABbgkcKXl5NRU0yCF9ISUQMQdAMAQhf
VUlECgIIQ1JTMREdChqGCQABAAAAIAAAIACGCQABAAAAQAAAIAB5AAhDUlMyER0KGoYJAAEAAAAg
AAAgAIYJAAEAQABAABAAAHkAFBFfU1RBAKAISUdEU6QKD6QAFDVfQ1JTAKApkZN7UE5ITQzwD/8P
AAygBgIAk3tQTkhNDP8P/w8ADKAGAwCkQ1JTMaRDUlMyFEgGX0RTTQwIRFJFVBEECgQAoEEFk2gR
EwoQ4XU5b4J6Z0+LlxW+4GC+36Aak2oAi0RSRVQARjBTU3AKAkYwU1OkRFJFVKAdk2oBoBaTXl4v
A1BFRzBQRUdQTE5LVgoDpACkAaREUkVUEE4GX1BSX1uDC0NQVTABEAQAAAZbgwtDUFUxAhAEAAAG
W4MLQ1BVMgMQBAAABluDC0NQVTMEEAQAAAZbgwtDUFU0BRAEAAAGW4MLQ1BVNQYQBAAABluDC0NQ
VTYHEAQAAAZbgwtDUFU3CBAEAAAGWwFNVVRYAFuAREVCMAEKgAFbgQtERUIwAURCRzgIW4BERUIx
AQqQCgJbgQtERUIxAkRCRzkQW4BQUlQwAQqACgRbgQtQUlQwE1A4MEggFE4HUDhYSAqgF5NoAHB9
e1A4MEQMAP///wBpAFA4MESgG5NoAXB9e1A4MEQM/wD//wB5aQoIAABQODBEoByTaAoCcH17UDgw
RAz//wD/AHlpChAAAFA4MESgHJNoCgNwfXtQODBEDP///wAAeWkKGAAAUDgwRHBQODBEUDgwSFuA
U1BSVAEKsgoCW4ELU1BSVBFTU01QCBQSX1BJQwFwaEdQSUNwaFBJQ00UTwVfUFRTAXAAUDgwRFA4
WEgAaFBUU19ooAh7QU9BQwEAoByTaAoDoBaQRFRTRZRUQ05UAVRSQVBUUlRECh6gIJGRk2gKA5No
CgSTaAoFoBCTUEZMVkZEVFBwAUdQMjcURUVfV0FLCVA4WEgBCqtXQUtfaKAXk0FPQUMKEaAOWxJF
Q1RNAHAARUNUTaA3TkVYUKAYe09TQ0MKAgBcLwNfU0JfUENJME5IUEegGHtPU0NDCgQAXC8DX1NC
X1BDSTBOUE1FoC6TaAoDoCiTAEFDVFSgIJNFQ09OAXAAXC8FX1NCX1BDSTBMUENCSF9FQ0NGQU6g
TziRk2gKA5NoCgSgFpBEVFNFlFRDTlQBVFJBUFRSVEQKFKBLC5NPU1lTC9IHoEALe0NGR0QBAKBL
BZRcLwNfUFJfQ1BVMF9QUEMAdFwvA19QUl9DUFUwX1BQQwFcLwNfUFJfQ1BVMF9QUENQTk9Uclwv
A19QUl9DUFUwX1BQQwFcLwNfUFJfQ1BVMF9QUENQTk9UoUoEclwvA19QUl9DUFUwX1BQQwFcLwNf
UFJfQ1BVMF9QUENQTk9UdFwvA19QUl9DUFUwX1BQQwFcLwNfUFJfQ1BVMF9QUENQTk9UoEgdk0VD
T04BoEUJkpNMSURTXC8FX1NCX1BDSTBMUENCSF9FQ0xTVEVwXC8FX1NCX1BDSTBMUENCSF9FQ0xT
VEVMSURToEwESUdEU6BFBFwvBF9TQl9QQ0kwR0ZYMEdMSURMSURTfQwAAACAXC8EX1NCX1BDSTBH
RlgwQ0xJRFwvBF9TQl9QQ0kwR0ZYMENMSUSGXC5fU0JfTElEMAqAoE8KkpNcLwVfU0JfUENJMExQ
Q0JIX0VDRE9DS0RTVFNwXC8FX1NCX1BDSTBMUENCSF9FQ0RPQ0tEU1RToC6QXC8EX1NCX1BDSTBI
REVGRENLUwFwRFNUU1wvBF9TQl9QQ0kwSERFRkRDS0GgMZNEU1RTAaAYk2gKA1siC+gDcFBEQlJT
U01QWyIL6AOGXC8DX1NCX1BDSTBET0NLAKEShlwvA19TQl9QQ0kwRE9DSwGgRwSTQk5VTQCgPpKT
XC8FX1NCX1BDSTBMUENCSF9FQ1ZQV1JQV1JTcFwvBV9TQl9QQ0kwTFBDQkhfRUNWUFdSUFdSU1BO
T1ShQQSgPpKTXC8FX1NCX1BDSTBMUENCSF9FQ1JQV1JQV1JTcFwvBV9TQl9QQ0kwTFBDQkhfRUNS
UFdSUFdSU1BOT1SgGJNSUDFEAIZcLwNfU0JfUENJMFJQMDEAoBiTUlAyRACGXC8DX1NCX1BDSTBS
UDAyAKAYk1JQM0QAhlwvA19TQl9QQ0kwUlAwMwCgGJNSUDREAIZcLwNfU0JfUENJMFJQMDQAoBiT
UlA1RACGXC8DX1NCX1BDSTBSUDA1AKAYk1JQNkQAhlwvA19TQl9QQ0kwUlAwNgCgIJNSUDdEAKAY
k0RTVFMAhlwvA19TQl9QQ0kwUlAwNwCgIJNSUDhEAKAYk0RTVFMAhlwvA19TQl9QQ0kwUlAwOACg
LJGTaAoDk2gKBFwvBF9TQl9QQ0kwWEhDX1hXQUtcLwNfUFJfQ1BVMENUTESkEgQCAAAUHkdFVEIL
d2gKCGB3aQoIYVsTamBhVEJGM6RUQkYzFEQuUE5PVAigSBmUVENOVAGgMXtQREMwCggAhlwuX1BS
X0NQVTAKgKAae1BEQzAKEABbIgpkhlwuX1BSX0NQVTAKgaAxe1BEQzEKCACGXC5fUFJfQ1BVMQqA
oBp7UERDMQoQAFsiCmSGXC5fUFJfQ1BVMQqBoDF7UERDMgoIAIZcLl9QUl9DUFUyCoCgGntQREMy
ChAAWyIKZIZcLl9QUl9DUFUyCoGgMXtQREMzCggAhlwuX1BSX0NQVTMKgKAae1BEQzMKEABbIgpk
hlwuX1BSX0NQVTMKgaAxe1BEQzQKCACGXC5fUFJfQ1BVNAqAoBp7UERDNAoQAFsiCmSGXC5fUFJf
Q1BVNAqBoDF7UERDNQoIAIZcLl9QUl9DUFU1CoCgGntQREM1ChAAWyIKZIZcLl9QUl9DUFU1CoGg
MXtQREM2CggAhlwuX1BSX0NQVTYKgKAae1BEQzYKEABbIgpkhlwuX1BSX0NQVTYKgaAxe1BEQzcK
CACGXC5fUFJfQ1BVNwqAoBp7UERDNwoQAFsiCmSGXC5fUFJfQ1BVNwqBoR+GXC5fUFJfQ1BVMAqA
WyIKZIZcLl9QUl9DUFUwCoGgQxKTRUNPTgFwXC8FX1NCX1BDSTBMUENCSF9FQ0IxQ0NCMVNDcFwv
BV9TQl9QQ0kwTFBDQkhfRUNCMVNUQjFTU3BcLwVfU0JfUENJMExQQ0JIX0VDQjJDQ0IyU0NwXC8F
X1NCX1BDSTBMUENCSF9FQ0IyU1RCMlNToEkFkpVPU1lTC9YHhlwvBV9TQl9QQ0kwTFBDQkhfRUNC
QVQwCoGGXC8FX1NCX1BDSTBMUENCSF9FQ0JBVDEKgYZcLwVfU0JfUENJMExQQ0JIX0VDQkFUMgqB
oUAFhlwvBV9TQl9QQ0kwTFBDQkhfRUNCQVQwCoCGXC8FX1NCX1BDSTBMUENCSF9FQ0JBVDEKgIZc
LwVfU0JfUENJMExQQ0JIX0VDQkFUMgqAFEcEVFJBUApwaVNNSUagDZNoVFJUUHAAVFJQMKAYk2hU
UlREcGlEVFNGcABUUlBEpERUU0agDZNoVFJUSXAAVFJQSKRTTUlGEEMiLl9TQl9QQ0kwFEcOX0lO
SQBwC9AHT1NZU6BHDVsSX09TSWCgG19PU0kNV2luZG93cyAyMDAxAHAL0QdPU1lToB9fT1NJDVdp
bmRvd3MgMjAwMSBTUDEAcAvRB09TWVOgH19PU0kNV2luZG93cyAyMDAxIFNQMgBwC9IHT1NZU6Ad
X09TSQ1XaW5kb3dzIDIwMDEuMQBwC9MHT1NZU6AbX09TSQ1XaW5kb3dzIDIwMDYAcAvWB09TWVOg
G19PU0kNV2luZG93cyAyMDA5AHAL2QdPU1lToBtfT1NJDVdpbmRvd3MgMjAxMgBwC9wHT1NZUxRH
Bk5IUEcIcABeLlJQMDFIUEVYcABeLlJQMDJIUEVYcABeLlJQMDNIUEVYcABeLlJQMDRIUEVYcAFe
LlJQMDFIUFNYcAFeLlJQMDJIUFNYcAFeLlJQMDNIUFNYcAFeLlJQMDRIUFNYFEcMTlBNRQhwAF4u
UlAwMVBNRVhwAF4uUlAwMlBNRVhwAF4uUlAwM1BNRVhwAF4uUlAwNFBNRVhwAF4uUlAwNVBNRVhw
AF4uUlAwNlBNRVhwAF4uUlAwN1BNRVhwAF4uUlAwOFBNRVhwAV4uUlAwMVBNU1hwAV4uUlAwMlBN
U1hwAV4uUlAwM1BNU1hwAV4uUlAwNFBNU1hwAV4uUlAwNVBNU1hwAV4uUlAwNlBNU1hwAV4uUlAw
N1BNU1hwAV4uUlAwOFBNU1gQRQdcAAhQSUNNAAhQUldQEgQCAAAUQAZHUFJXAnBoiFBSV1AAAHB5
U1MxXwEAYH1geVNTMl8KAgBgfWB5U1MzXwoDAGB9YHlTUzRfCgQAYKARe3kBaQBgAHBpiFBSV1AB
AKEOemABYIFgiFBSV1ABAKRQUldQEEsXLl9TQl9QQ0kwW4JOFlBEUkMIX0hJRAxB0AwCCF9VSUQB
CEJVRjARSggKhoYJAAEAAAAAAEAAAIYJAAEAAAAAAIAAAIYJAAEAAAAAABAAAIYJAAEAAAAAABAA
AIYJAAEAAAAAAAAAAIYJAAEAANL+AAACAIYJAAAAANn+AEAAAIYJAAEAUNT+ALAEAIYJAAAAAAD/
AAAAAYYJAAAAAOD+AAAQAIYJAAEAAAAAABAAAHkAFEcMX0NSUwiKQlVGMAoEUkJSMHleXi5MUENC
UkNCQQoOUkJSMIpCVUYwCnxUQlIwcFRCQUJUQlIwikJVRjAKgFRCTE6gDZNUQkFCAHAAVEJMTopC
VUYwChBNQlIweU1IQlIKD01CUjCKQlVGMAocREJSMHlESUJSCgxEQlIwikJVRjAKKEVCUjB5RVBC
UgoMRUJSMIpCVUYwCjRYQlIweVBYQlIKGlhCUjCKQlVGMAo4WFNaMHoMAAAAEFBYU1pYU1owpEJV
RjAUQxBCUlROCaAjk3tESUQxCwAPAAsABIZcLwRfU0JfUENJMEdGWDBERDAxaKAjk3tESUQzCwAP
AAsABIZcLwRfU0JfUENJMEdGWDBERDAzaKAjk3tESUQ0CwAPAAsABIZcLwRfU0JfUENJMEdGWDBE
RDA0aKAjk3tESUQ1CwAPAAsABIZcLwRfU0JfUENJMEdGWDBERDA1aKAjk3tESUQ2CwAPAAsABIZc
LwRfU0JfUENJMEdGWDBERDA2aKAjk3tESUQ3CwAPAAsABIZcLwRfU0JfUENJMEdGWDBERDA3aKAj
k3tESUQ4CwAPAAsABIZcLwRfU0JfUENJMEdGWDBERDA4aBBMo19HUEUUTRxfTDA5AKAsk1JQMUQA
XC8EX1NCX1BDSTBSUDAxSFBNRYZcLwNfU0JfUENJMFJQMDEKAqAsk1JQMkQAXC8EX1NCX1BDSTBS
UDAySFBNRYZcLwNfU0JfUENJMFJQMDIKAqAsk1JQM0QAXC8EX1NCX1BDSTBSUDAzSFBNRYZcLwNf
U0JfUENJMFJQMDMKAqAsk1JQNEQAXC8EX1NCX1BDSTBSUDA0SFBNRYZcLwNfU0JfUENJMFJQMDQK
AqAsk1JQNUQAXC8EX1NCX1BDSTBSUDA1SFBNRYZcLwNfU0JfUENJMFJQMDUKAqAsk1JQNkQAXC8E
X1NCX1BDSTBSUDA2SFBNRYZcLwNfU0JfUENJMFJQMDYKAqAsk1JQN0QAXC8EX1NCX1BDSTBSUDA3
SFBNRYZcLwNfU0JfUENJMFJQMDcKAqAsk1JQOEQAXC8EX1NCX1BDSTBSUDA4SFBNRYZcLwNfU0Jf
UENJMFJQMDgKAoZcLwNfU0JfUENJMFBFRzAKAoZcLwRfU0JfUENJMFBFRzBQRUdQCgKGXC8DX1NC
X1BDSTBQRUcxCgKGXC8DX1NCX1BDSTBQRUcyCgKGXC8DX1NCX1BDSTBQRUczCgIUTwlfTDBEAIZc
LwNfU0JfUENJMEVIQzEKAoZcLwNfU0JfUENJMEVIQzIKAoZcLwNfU0JfUENJMEhERUYKAoZcLwNf
U0JfUENJMEdMQU4KAoZcLwNfU0JfUENJMFhIQ18KAqA9kFwvBF9TQl9QQ0kwWEhDX1BNRVNcLwRf
U0JfUENJMFhIQ19QTUVTcAFcLwRfU0JfUENJMFhIQ19QTUVTFENhX0wwMQByTDAxQwFMMDFDUDhY
SAABUDhYSAFMMDFDoEMLkJNSUDFEAFwvBF9TQl9QQ0kwUlAwMUhQU1hbIgpkoEsHXC8EX1NCX1BD
STBSUDAxUERDWHABXC8EX1NCX1BDSTBSUDAxUERDWHABXC8EX1NCX1BDSTBSUDAxSFBTWKAqklwv
BF9TQl9QQ0kwUlAwMVBEU1hwAFwvBF9TQl9QQ0kwUlAwMUwwU0WGXC8DX1NCX1BDSTBSUDAxAKEW
cAFcLwRfU0JfUENJMFJQMDFIUFNYoEMLkJNSUDJEAFwvBF9TQl9QQ0kwUlAwMkhQU1hbIgpkoEsH
XC8EX1NCX1BDSTBSUDAyUERDWHABXC8EX1NCX1BDSTBSUDAyUERDWHABXC8EX1NCX1BDSTBSUDAy
SFBTWKAqklwvBF9TQl9QQ0kwUlAwMlBEU1hwAFwvBF9TQl9QQ0kwUlAwMkwwU0WGXC8DX1NCX1BD
STBSUDAyAKEWcAFcLwRfU0JfUENJMFJQMDJIUFNYoEMLkJNSUDNEAFwvBF9TQl9QQ0kwUlAwM0hQ
U1hbIgpkoEsHXC8EX1NCX1BDSTBSUDAzUERDWHABXC8EX1NCX1BDSTBSUDAzUERDWHABXC8EX1NC
X1BDSTBSUDAzSFBTWKAqklwvBF9TQl9QQ0kwUlAwM1BEU1hwAFwvBF9TQl9QQ0kwUlAwM0wwU0WG
XC8DX1NCX1BDSTBSUDAzAKEWcAFcLwRfU0JfUENJMFJQMDNIUFNYoEMLkJNSUDREAFwvBF9TQl9Q
Q0kwUlAwNEhQU1hbIgpkoEsHXC8EX1NCX1BDSTBSUDA0UERDWHABXC8EX1NCX1BDSTBSUDA0UERD
WHABXC8EX1NCX1BDSTBSUDA0SFBTWKAqklwvBF9TQl9QQ0kwUlAwNFBEU1hwAFwvBF9TQl9QQ0kw
UlAwNEwwU0WGXC8DX1NCX1BDSTBSUDA0AKEWcAFcLwRfU0JfUENJMFJQMDRIUFNYoE4JkJNSUDVE
AFwvBF9TQl9QQ0kwUlAwNUhQU1igSgZcLwRfU0JfUENJMFJQMDVQRENYcAFcLwRfU0JfUENJMFJQ
MDVQRENYcAFcLwRfU0JfUENJMFJQMDVIUFNYoCqSXC8EX1NCX1BDSTBSUDA1UERTWHAAXC8EX1NC
X1BDSTBSUDA1TDBTRaEWcAFcLwRfU0JfUENJMFJQMDVIUFNYoEMLkJNSUDZEAFwvBF9TQl9QQ0kw
UlAwNkhQU1hbIgpkoEsHXC8EX1NCX1BDSTBSUDA2UERDWHABXC8EX1NCX1BDSTBSUDA2UERDWHAB
XC8EX1NCX1BDSTBSUDA2SFBTWKAqklwvBF9TQl9QQ0kwUlAwNlBEU1hwAFwvBF9TQl9QQ0kwUlAw
NkwwU0WGXC8DX1NCX1BDSTBSUDA2AKEWcAFcLwRfU0JfUENJMFJQMDZIUFNYoEcOkJNSUDdEAFwv
BF9TQl9QQ0kwUlAwN0hQU1hbIgpkoE8KXC8EX1NCX1BDSTBSUDA3UERDWHABXC8EX1NCX1BDSTBS
UDA3UERDWHABXC8EX1NCX1BDSTBSUDA3SFBTWKAqklwvBF9TQl9QQ0kwUlAwN1BEU1hwAFwvBF9T
Ql9QQ0kwUlAwN0wwU0WgMUVDT06gK5NcLwVfU0JfUENJMExQQ0JIX0VDRE9DSwCGXC8DX1NCX1BD
STBSUDA3AKEShlwvA19TQl9QQ0kwUlAwNwChFnABXC8EX1NCX1BDSTBSUDA3SFBTWKBHDpCTUlA4
RABcLwRfU0JfUENJMFJQMDhIUFNYWyIKZKBPClwvBF9TQl9QQ0kwUlAwOFBEQ1hwAVwvBF9TQl9Q
Q0kwUlAwOFBEQ1hwAVwvBF9TQl9QQ0kwUlAwOEhQU1igKpJcLwRfU0JfUENJMFJQMDhQRFNYcABc
LwRfU0JfUENJMFJQMDhMMFNFoDFFQ09OoCuTXC8FX1NCX1BDSTBMUENCSF9FQ0RPQ0sAhlwvA19T
Ql9QQ0kwUlAwOAChEoZcLwNfU0JfUENJMFJQMDgAoRZwAVwvBF9TQl9QQ0kwUlAwOEhQU1gUTwVf
TDAyAHAAR1BFQ6AqWxJcLwRfU0JfUENJMElFSVRFSVRWAFwvBF9TQl9QQ0kwSUVJVEVJVFaGXC5f
VFpfVFowMAqAhlwuX1RaX1RaMDEKgKAMWxJUTk9UAFROT1QUNF9MMDYAoC2QXC8EX1NCX1BDSTBH
RlgwR1NTRZJHU01JXC8EX1NCX1BDSTBHRlgwR1NDSRQcX0wwNwBwCiBcLwRfU0JfUENJMFNCVVNI
U1RTFEEQX0wxRQCgCZNFQ09OAKQAoEUJkpNMSURTXC8FX1NCX1BDSTBMUENCSF9FQ0xTVEVwXC8F
X1NCX1BDSTBMUENCSF9FQ0xTVEVMSURToEwESUdEU6BFBFwvBF9TQl9QQ0kwR0ZYMEdMSURMSURT
fQwAAACAXC8EX1NCX1BDSTBHRlgwQ0xJRFwvBF9TQl9QQ0kwR0ZYMENMSUSGXC5fU0JfTElEMAqA
oUcFoEcEk0JOVU0AoD6Sk1BXUlNcLwVfU0JfUENJMExQQ0JIX0VDVlBXUnBcLwVfU0JfUENJMExQ
Q0JIX0VDVlBXUlBXUlNQTk9UhlwuX1NCX1BXUkIKAqQAEEaLX1RaXwhFVE1EAQhUSExECnhbhEUN
Rk4wMAAAABQLX1NUQQikVkZOMBRNBF9PTl8IcAFWRk4woD+QRUNPTkVUTURwQUMwRlwvBV9TQl9Q
Q0kwTFBDQkhfRUNQRU5WXC8FX1NCX1BDSTBMUENCSF9FQ0VDTUQKGhRBB19PRkYIcABWRk4woEMG
kEVDT05FVE1EoCCTVkZOMQBwAFwvBV9TQl9QQ0kwTFBDQkhfRUNQRU5WoR1wQUMxRlwvBV9TQl9Q
Q0kwTFBDQkhfRUNQRU5WXC8FX1NCX1BDSTBMUENCSF9FQ0VDTUQKGluCIUZBTjAIX0hJRAxB0AwL
CF9VSUQACF9QUjASBgFGTjAwW4ROCkZOMDEAAAAUC19TVEEIpFZGTjEUTQRfT05fCHABVkZOMaA/
kEVDT05FVE1EcEFDMUZcLwVfU0JfUENJMExQQ0JIX0VDUEVOVlwvBV9TQl9QQ0kwTFBDQkhfRUNF
Q01EChoUSgRfT0ZGCHAAVkZOMaA8kEVDT05FVE1EcABcLwVfU0JfUENJMExQQ0JIX0VDUEVOVlwv
BV9TQl9QQ0kwTFBDQkhfRUNFQ01EChpbgiFGQU4xCF9ISUQMQdAMCwhfVUlEAQhfUFIwEgYBRk4w
MVuESwpGTjAyAAAAFAtfU1RBCKRWRk4yFEoEX09OXwhwAVZGTjKgPJBFQ09ORVRNRHAAXC8FX1NC
X1BDSTBMUENCSF9FQ1BFTlZcLwVfU0JfUENJMExQQ0JIX0VDRUNNRAoaFEoEX09GRghwAFZGTjKg
PJBFQ09ORVRNRHAAXC8FX1NCX1BDSTBMUENCSF9FQ1BFTlZcLwVfU0JfUENJMExQQ0JIX0VDRUNN
RAoaW4IiRkFOMghfSElEDEHQDAsIX1VJRAoCCF9QUjASBgFGTjAyW4RLCkZOMDMAAAAUC19TVEEI
pFZGTjMUSgRfT05fCHABVkZOM6A8kEVDT05FVE1EcABcLwVfU0JfUENJMExQQ0JIX0VDUEVOVlwv
BV9TQl9QQ0kwTFBDQkhfRUNFQ01EChoUSgRfT0ZGCHAAVkZOM6A8kEVDT05FVE1EcABcLwVfU0Jf
UENJMExQQ0JIX0VDUEVOVlwvBV9TQl9QQ0kwTFBDQkhfRUNFQ01EChpbgiJGQU4zCF9ISUQMQdAM
CwhfVUlECgMIX1BSMBIGAUZOMDNbhEsKRk4wNAAAABQLX1NUQQikVkZONBRKBF9PTl8IcAFWRk40
oDyQRUNPTkVUTURwAFwvBV9TQl9QQ0kwTFBDQkhfRUNQRU5WXC8FX1NCX1BDSTBMUENCSF9FQ0VD
TUQKGhRKBF9PRkYIcABWRk40oDyQRUNPTkVUTURwAFwvBV9TQl9QQ0kwTFBDQkhfRUNQRU5WXC8F
X1NCX1BDSTBMUENCSF9FQ0VDTUQKGluCIkZBTjQIX0hJRAxB0AwLCF9VSUQKBAhfUFIwEgYBRk4w
NFuFSR1UWjAwCFBUTVALuAsUDF9TQ1AJcGhDVFlQFEcEX0NSVAigMVsSXC5fUFJfQUNSVACgIpKT
XC5fUFJfQUNSVACkcgusCndcLl9QUl9BQ1JUCgoAAKRyC6wKd0NSVFQKCgAAFEcEX0FDMAigMVsS
XC5fUFJfQUFDMACgIpKTXC5fUFJfQUFDMACkcgusCndcLl9QUl9BQUMwCgoAAKRyC6wKd0FDVFQK
CgAAFBRfQUMxCKRyC6wKd0FDVDEKCgAAFApfQUMyCKQLrAoUCl9BQzMIpAusChQKX0FDNAikC6wK
CF9BTDASBgFGQU4wCF9BTDESBgFGQU4xCF9BTDISBgFGQU4yCF9BTDMSBgFGQU4zCF9BTDQSBgFG
QU40FEsLX1RNUAigCpJFVE1EpAu4C6AWk0RUU0UKA6RyCxALd0NSVFQKCgAAoEwFk0RUU0UBoBiT
UEtHQQFwUERUU2CkcgusCndgCgoAAHBEVFMxYKANlERUUzJgcERUUzJgoA2URFRTM2BwRFRTM2Cg
DZREVFM0YHBEVFM0YKRyC6wKd2AKCgAAoDBFQ09OcFwvBV9TQl9QQ0kwTFBDQkhfRUNQTE1YYHIL
rAp3YAoKAGBwYFBUTVCkYKQLwgtbhUYoVFowMQhQVE1QC7gLFAxfU0NQCXBoQ1RZUBRHBF9DUlQI
oDFbElwuX1BSX0FDUlQAoCKSk1wuX1BSX0FDUlQApHILrAp3XC5fUFJfQUNSVAoKAACkcgusCndD
UlRUCgoAABRLDl9UTVAIoAqSRVRNRKQLzAugFpNEVFNFCgOkcgsQC3dDUlRUCgoAAKBMBZNEVFNF
AaAYk1BLR0EBcFBEVFNgpHILrAp3YAoKAABwRFRTMWCgDZREVFMyYHBEVFMyYKANlERUUzNgcERU
UzNgoA2URFRTNGBwRFRTNGCkcgusCndgCgoAAKBABkVDT05wXC8FX1NCX1BDSTBMUENCSF9FQ1BF
Q0hgd2AKCmBwXC8FX1NCX1BDSTBMUENCSF9FQ1BFQ0xhemEKAmFweHdhCgoACkAAAGFyYGFgcgus
CmBgcGBQVE1QpGCkC9YLFEoMX1BTTAigTgWTVENOVAoIpBJDBQhcLl9QUl9DUFUwXC5fUFJfQ1BV
MVwuX1BSX0NQVTJcLl9QUl9DUFUzXC5fUFJfQ1BVNFwuX1BSX0NQVTVcLl9QUl9DUFU2XC5fUFJf
Q1BVN6A0k1RDTlQKBKQSKgRcLl9QUl9DUFUwXC5fUFJfQ1BVMVwuX1BSX0NQVTJcLl9QUl9DUFUz
oCCTVENOVAoCpBIWAlwuX1BSX0NQVTBcLl9QUl9DUFUxpBIMAVwuX1BSX0NQVTAURwRfUFNWCKAx
WxJcLl9QUl9BUFNWAKAikpNcLl9QUl9BUFNWAKRyC6wKd1wuX1BSX0FQU1YKCgAApHILrAp3UFNW
VAoKAAAUC19UQzEIpFRDMVYUC19UQzIIpFRDMlYUC19UU1AIpFRTUFYQSREvA19TQl9QQ0kwU0FU
MFuCRxBQUlQyCF9BRFIM//8CABRGD19EU00MoEoOk2gREwoQMO/6vbuu3hGKOQgAIAyaZghfVF8w
AHCZagBfVF8woDmTX1RfMAAIX1RfMQBwmWkAX1RfMaAck19UXzEBoA+TUEZMVkZEVFCkEQMBAKQR
AwEPoQakEQMBAKFJCKAJk19UXzABpAGhTAegQQWTX1RfMAoCcABHUEUzoBeTe0dMMDAKCAAKCH1H
SVYwCghHSVYwoQx7R0lWMAr3R0lWMHtHTDA4Cu9HTDA4WyIKyHABR1BTM3ABR1BFM6QBoSegIZNf
VF8wCgNwAEdQRTNwAUdQUzN9R0wwOAoQR0wwOKQBoQOkAKEDpAAQPl9HUEUUOF9MMTMAoAyTUEZM
VkZEVFCkAHAAR1BFM31HTDA4ChBHTDA4hlwvA19TQl9QQ0kwU0FUMAqCpAAQSgRfR1BFFEMET0wx
WAAIVFNORQr/oDSSk1RTTkUK/6AQkFRTTkUBcFRCU1dTU01QoBmQVFNORQoChlwvA19TQl9QQ0kw
UlAwNQAQJS8DX1NCX1BDSTBSUDA1W4IUSFJVNAhfQURSABQIX1JNVgCkAQhUUE1GABBJFy8DX1NC
X1BDSTBMUENCW4JHFkhfRUMIX0hJRAxB0AwJCF9VSUQBFBdfU1RBAHAKA15eXi5HRlgwQ0xJRKQA
CEIxQ0MACEIxU1QACEIyQ0MACEIyU1QACENGQU4ACENNRFIACERPQ0sACEVKRVQACE1DQVAACFBM
TVgACFBFQ0gACFBFQ0wACFBFTlYACFBJTlYACFBQU0gACFBQU0wACFBTVFAACFJQV1IACExTVEUA
CFNMUEMACFZQV1IAFBxFQ01ECaAVRUNPTqIJQ01EUlshChRwaENNRFJbgh5CQVQwCF9ISUQMQdAM
CghfVUlEABQIX1NUQQCkABAhXABbgRxHTlZTEABAD0JOVU0IAAhCMVNDCAAQQjFTUwhbgh5CQVQx
CF9ISUQMQdAMCghfVUlEARQIX1NUQQCkABAaXABbgRVHTlZTEABIEEIyU0MIABBCMlNTCFuCH0JB
VDIIX0hJRAxB0AwKCF9VSUQKAhQIX1NUQQCkAFuCOC8DX1NCX1BDSTBET0NLCF9ISUQNQUJDRDAw
MDEACF9DSUQMQdAMFQhfVUlECgIUCF9TVEEApAAQH19TQl9bghhMSUQwCF9ISUQMQdAMDRQIX1NU
QQCkAAhfUzBfEgYEAAAAAKARU1MxXwhfUzFfEgYEAQAAAKASU1MzXwhfUzNfEgcECgUAAACgElNT
NF8IX1M0XxIHBAoGAAAACF9TNV8SBwQKBwAAABRCBFBUU18BoDpoXC8EX1NCX1BDSTBMUENCU1BU
U2hcLwNfU0JfUENJME5QVFNoXC8EX1NCX1BDSTBMUENCU0lPU2gUPldBS18BXC8EX1NCX1BDSTBM
UENCU1dBS2hcLwNfU0JfUENJME5XQUtoXC8EX1NCX1BDSTBMUENCU0lPV2g=
====
begin-base64 644 FACP.1
RkFDUIQAAAACf0ludGVsAEQzMzIxN0dLOgAAAEFNSSATAAEAQB8/e2gBLnsBAQkAsgAAAKChAAAA
BAAAAAAAAAQEAAAAAAAAUAQAAAgEAAAgBAAAAAAAAAQCAQQQAAAAZQDpAwAEEAAAAA0AMhAAAKWG
AwABCAAA+QwAAAAAAAAGAAAA
====
begin-base64 644 FIDT.5
RklEVJwAAAABnEludGVsAEQzMzIxN0dLOgAAAEFNSSATAAEAJEZJRAR4AEdLMDI0AAAAAIeQxbWs
/kFLnYB5C6WqBw8wNAAwNgAwMAAyNAAAAAAAAAAA//9JTlRFTABBIE0gSQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
====
begin-base64 644 FPDT.4
RlBEVEQAAAABO0ludGVsAEQzMzIxN0dLOgAAAEFNSSATAAEAAQAQAQAAAAAw8l97AAAAAAAAEAEA
AAAAUPJfewAAAAA=
====
begin-base64 644 HPET.7
SFBFVDgAAAABA0ludGVsAEQzMzIxN0dLOgAAAEFNSS4FAAAAAaeGgAAAAAAAAND+AAAAAAABAAA=
====
begin-base64 644 MCFG.6
TUNGRzwAAAABkkludGVsAEQzMzIxN0dLOgAAAE1TRlSXAAAAAAAAAAAAAAAAAAD4AAAAAAAAAD8A
AAAA
====
begin-base64 644 RSDT.0
UlNEVEQAAAAB6kludGVsAEQzMzIxN0dLOgAAAE1TRlQTAAEA4AAue2iZLnvgmS57KJoue8iaLnsI
my57QJsue1ieLns=
====
begin-base64 644 SSDT.8
U1NEVBUDAAABHkludGVsAEQzMzIxN0dLOgAAAElOVEwSEQkgEEYJXAAIU1RGRREKCgcQBgAAAADv
CFNURkQRCgoHkAYAAAAA7whGWlRGEQoKBwAAAAAAAPUIRENGTBEKCgfBAAAAAACxCFNDQkYRAwoV
CENNREMAFEIER1RGQgp3Q01EQwo4YFsTU0NCRmAKOENNRFh3Q01EQwoHYIxTQ0JGcmABAEEwMDFw
aENNRFhwaUEwMDF1Q01EQxBJJVwvA19TQl9QQ0kwU0FUMAhSRUdGARQSX1JFRwKgC5NoCgJwaVJF
R0YIVE1EMBEDChSKVE1EMABQSU8wilRNRDAKBERNQTCKVE1EMAoIUElPMYpUTUQwCgxETUExilRN
RDAKEENITkYUMl9HVE0AcAp4UElPMHAKFERNQTBwCnhQSU8xcAoURE1BMX1DSE5GCgVDSE5GpFRN
RDAUBl9TVE0DW4JEBVNQVDAIX0FEUgv//xRFBF9HVEYAcABDTURDoBSRRFNTUEZIUFBHVEZCU1RG
RAoGoQtHVEZCU1RGRQoGR1RGQkZaVEYAR1RGQkRDRkwApFNDQkZbgkYFU1BUMQhfQURSDP//AQAU
RQRfR1RGAHAAQ01EQ6AUkURTU1BGSFBQR1RGQlNURkQKBqELR1RGQlNURkUKBkdURkJGWlRGAEdU
RkJEQ0ZMAKRTQ0JGW4JGBVNQVDMIX0FEUgz//wMAFEUEX0dURgBwAENNREOgFJFEU1NQRkhQUEdU
RkJTVEZECgahC0dURkJTVEZFCgZHVEZCRlpURgBHVEZCRENGTACkU0NCRluCRgVTUFQ0CF9BRFIM
//8EABRFBF9HVEYAcABDTURDoBSRRFNTUEZIUFBHVEZCU1RGRAoGoQtHVEZCU1RGRQoGR1RGQkZa
VEYAR1RGQkRDRkwApFNDQkZbgkYFU1BUNQhfQURSDP//BQAURQRfR1RGAHAAQ01EQ6AUkURTU1BG
SFBQR1RGQlNURkQKBqELR1RGQlNURkUKBkdURkJGWlRGAEdURkJEQ0ZMAKRTQ0JG
====
begin-base64 644 SSDT.9
U1NEVCILAAABzUludGVsAEQzMzIxN0dLOgAAAElOVEwXEQUgEEYMXAAIU1NEVBJDBQwNQ1BVMElT
VCAADBjwX3kMqgkAAA1BUElTVCAgIAAMmJooewwDAwAADUNQVTBDU1QgAAwYgCh7DDsIAAANQVBD
U1QgICAADBisKHsMGQEAAAhDRkdEDGb2ZgAIXFBEQzAMAAAAgAhcUERDMQwAAACACFxQREMyDAAA
AIAIXFBEQzMMAAAAgAhcUERDNAwAAACACFxQREM1DAAAAIAIXFBEQzYMAAAAgAhcUERDNwwAAACA
CFxTRFRMABBNClxfUFJfW4BQUE1UAAyY/z57CykAW4FFCVBQTVQQUEdSVggAIENOVEQIQUNSVAhB
UFNWCEFBQzAIQ1BJRCBDUFBDCENDVFAIQ0xWTAhDQk1JCFBMMTAQUEwyMBBQTFcwCENUQzAIVEFS
MAhQUEMwCFBMMTEQUEwyMRBQTFcxCENUQzEIVEFSMQhQUEMxCFBMMTIQUEwyMhBQTFcyCENUQzII
VEFSMghQUEMyCBBKK1wuX1BSX0NQVTAISEkwXwAISEMwXwAUKF9QREMBcENQUENcLwNfUFJfQ1BV
MF9QUENwQ1BEQ2hgR0NBUGCkYBRGCENUTEQAoE4Hk1xFQ09OAaBEB5BbElwuX1BSX0NOVEQAWxJc
LwNfU0JfUFRJRFdQTUQAoEEFXC5fUFJfQ05URAhCVUZGER0KGgEAAAAAADAKAaUAIQAABwAAAAAA
AAAAAAAAXC8DX1NCX1BUSURXUE1EQlVGRlwvA19TQl9QVElESVNQQxQbX09TQwRwQ09TQ2hpamtg
R0NBUGBDVExEpGAUSAZDUERDAYpoAFJFVlOKaAoEU0laRXCHaGBwdGAKCABhWxNoCkB3YQoIAFRF
TVAIU1RTMBEHCgQAAAAAc1NUUzBURU1QYqRDT1NDERMKEBamd0AMKb5Hnr3YcFhxOVNSRVZTU0la
RWIUTQtDT1NDBIprAFNUUzCKawoEQ0FQMIpoAElJRDCKaAoESUlEMYpoCghJSUQyimgKDElJRDMI
VUlEMBETChAWpndADCm+R5692HBYcTlTilVJRDAARUlEMIpVSUQwCgRFSUQxilVJRDAKCEVJRDKK
VUlEMAoMRUlEM6AykpCQk0lJRDBFSUQwk0lJRDFFSUQxkJNJSUQyRUlEMpNJSUQzRUlEM3AKBlNU
UzCka6AOkpNpAXAKClNUUzCka6RrFE4KR0NBUAGKaABTVFMwimgKBENBUDCgEpGTU1RTMAoGk1NU
UzAKCqQAoBZ7U1RTMAEAe0NBUDAL/wtDQVAwpAB9e1BEQzAM////fwBDQVAwUERDMKBHBXtDRkdE
Cj4AoEwEkJB7Q0ZHRAsABAB7UERDMAoYAJJ7U0RUTAoCAH1TRFRMCgJTRFRMW4BDU1QwAIOIU1NE
VAoHAIOIU1NEVAoIAFsgQ1NUMEhDMF+kABBPFlwuX1BSX0NQVTEISEkxXwAISEMxXwAUH19QREMB
cFwvA19QUl9DUFUwQ1BEQ2hgR0NBUGCkYBQiX09TQwRwXC8DX1BSX0NQVTBDT1NDaGlqa2BHQ0FQ
YKRgFE4HR0NBUAGKaABTVFMximgKBENBUDGgEpGTU1RTMQoGk1NUUzEKCqQAoBZ7U1RTMQEAe0NB
UDEL/wtDQVAxpAB9e1BEQzEM////fwBDQVAxUERDMaAQk3tQREMxCgkACglBUFBUoA17UERDMQoY
AEFQQ1RwUERDMVBEQzCkABRKBEFQQ1QAoEIEkHtDRkdECi4AkntTRFRMCiAAfVNEVEwKIFNEVExb
gENTVDEAg4hTU0RUCgoAg4hTU0RUCgsAWyBDU1QxSEMxXxRJBEFQUFQAoEEEkHtDRkdEAQCSe1NE
VEwKEAB9U0RUTAoQU0RUTFuASVNUMQCDiFNTRFQKBACDiFNTRFQKBQBbIElTVDFISTFfEEQOXC5f
UFJfQ1BVMhQfX1BEQwFwXC8DX1BSX0NQVTBDUERDaGBHQ0FQYKRgFCJfT1NDBHBcLwNfUFJfQ1BV
MENPU0NoaWprYEdDQVBgpGAURAlHQ0FQAYpoAFNUUzKKaAoEQ0FQMqASkZNTVFMyCgaTU1RTMgoK
pACgFntTVFMyAQB7Q0FQMgv/C0NBUDKkAH17UERDMgz///9/AENBUDJQREMyoBuTe1BEQzIKCQAK
CVwvA19QUl9DUFUxQVBQVKAYe1BEQzIKGABcLwNfUFJfQ1BVMUFQQ1RwUERDMlBEQzCkABBEDlwu
X1BSX0NQVTMUH19QREMBcFwvA19QUl9DUFUwQ1BEQ2hgR0NBUGCkYBQiX09TQwRwXC8DX1BSX0NQ
VTBDT1NDaGlqa2BHQ0FQYKRgFEQJR0NBUAGKaABTVFMzimgKBENBUDOgEpGTU1RTMwoGk1NUUzMK
CqQAoBZ7U1RTMwEAe0NBUDML/wtDQVAzpAB9e1BEQzMM////fwBDQVAzUERDM6Abk3tQREMzCgkA
CglcLwNfUFJfQ1BVMUFQUFSgGHtQREMzChgAXC8DX1BSX0NQVTFBUENUcFBEQzNQREMwpAAQRA5c
Ll9QUl9DUFU0FB9fUERDAXBcLwNfUFJfQ1BVMENQRENoYEdDQVBgpGAUIl9PU0MEcFwvA19QUl9D
UFUwQ09TQ2hpamtgR0NBUGCkYBRECUdDQVABimgAU1RTNIpoCgRDQVA0oBKRk1NUUzQKBpNTVFM0
CgqkAKAWe1NUUzQBAHtDQVA0C/8LQ0FQNKQAfXtQREM0DP///38AQ0FQNFBEQzSgG5N7UERDNAoJ
AAoJXC8DX1BSX0NQVTFBUFBUoBh7UERDNAoYAFwvA19QUl9DUFUxQVBDVHBQREM0UERDMKQAEEQO
XC5fUFJfQ1BVNRQfX1BEQwFwXC8DX1BSX0NQVTBDUERDaGBHQ0FQYKRgFCJfT1NDBHBcLwNfUFJf
Q1BVMENPU0NoaWprYEdDQVBgpGAURAlHQ0FQAYpoAFNUUzWKaAoEQ0FQNaASkZNTVFM1CgaTU1RT
NQoKpACgFntTVFM1AQB7Q0FQNQv/C0NBUDWkAH17UERDNQz///9/AENBUDVQREM1oBuTe1BEQzUK
CQAKCVwvA19QUl9DUFUxQVBQVKAYe1BEQzUKGABcLwNfUFJfQ1BVMUFQQ1RwUERDNVBEQzCkABBE
DlwuX1BSX0NQVTYUH19QREMBcFwvA19QUl9DUFUwQ1BEQ2hgR0NBUGCkYBQiX09TQwRwXC8DX1BS
X0NQVTBDT1NDaGlqa2BHQ0FQYKRgFEQJR0NBUAGKaABTVFM2imgKBENBUDagEpGTU1RTNgoGk1NU
UzYKCqQAoBZ7U1RTNgEAe0NBUDYL/wtDQVA2pAB9e1BEQzYM////fwBDQVA2UERDNqAbk3tQREM2
CgkACglcLwNfUFJfQ1BVMUFQUFSgGHtQREM2ChgAXC8DX1BSX0NQVTFBUENUcFBEQzZQREMwpAAQ
RA5cLl9QUl9DUFU3FB9fUERDAXBcLwNfUFJfQ1BVMENQRENoYEdDQVBgpGAUIl9PU0MEcFwvA19Q
Ul9DUFUwQ09TQ2hpamtgR0NBUGCkYBRECUdDQVABimgAU1RTN4poCgRDQVA3oBKRk1NUUzcKBpNT
VFM3CgqkAKAWe1NUUzcBAHtDQVA3C/8LQ0FQN6QAfXtQREM3DP///38AQ0FQN1BEQzegG5N7UERD
NwoJAAoJXC8DX1BSX0NQVTFBUFBUoBh7UERDNwoYAFwvA19QUl9DUFUxQVBDVHBQREM3UERDMKQA
====
begin-base64 644 headers
ClJTRCBQVFI6IENoZWNrc3VtPTE0NiwgT0VNSUQ9SU5URUwsIFJzZHRBZGRyZXNzPTB4N2IyZTAw
MjgKCgpSU0RUOiBMZW5ndGg9NjgsIFJldmlzaW9uPTEsIENoZWNrc3VtPTIzNCwKCU9FTUlEPUlu
dGVsLCBPRU0gVGFibGUgSUQ9RDMzMjE3R0ssIE9FTSBSZXZpc2lvbj0weDNhLAoJQ3JlYXRvciBJ
RD1NU0ZULCBDcmVhdG9yIFJldmlzaW9uPTB4MTAwMTMKCgoJRW50cmllcz17IDB4N2IyZTAwZTAs
IDB4N2IyZTk5NjgsIDB4N2IyZTk5ZTAsIDB4N2IyZTlhMjgsIDB4N2IyZTlhYzgsIDB4N2IyZTli
MDgsIDB4N2IyZTliNDAsIDB4N2IyZTllNTggfQoKCglEU0RUPTB4N2IyZTAxNjgKCUlOVF9NT0RF
TD1BUElDCglTQ0lfSU5UPTkKCVNNSV9DTUQ9MHhiMiwgQUNQSV9FTkFCTEU9MHhhMCwgQUNQSV9E
SVNBQkxFPTB4YTEsIFM0QklPU19SRVE9MHgwCglQTTFhX0VWVF9CTEs9MHg0MDAtMHg0MDMKCVBN
MWFfQ05UX0JMSz0weDQwNC0weDQwNQoJUE0yX0NOVF9CTEs9MHg0NTAtMHg0NTAKCVBNMl9UTVJf
QkxLPTB4NDA4LTB4NDBiCglQTTJfR1BFMF9CTEs9MHg0MjAtMHg0MmYKCVBfTFZMMl9MQVQ9MTAx
bXMsIFBfTFZMM19MQVQ9MTAwMW1zCglGTFVTSF9TSVpFPTEwMjQsIEZMVVNIX1NUUklERT0xNgoJ
RFVUWV9PRkZTRVQ9MCwgRFVUWV9XSURUSD0wCglEQVlfQUxSTT0xMywgTU9OX0FMUk09MCwgQ0VO
VFVSWT01MAoJRmxhZ3M9e1dCSU5WRCxQUk9DX0MxLFNMUF9CVVRUT04sUlRDX1M0LERDS19DQVB9
CgoKRFNEVDogTGVuZ3RoPTM4NjMzLCBSZXZpc2lvbj0yLCBDaGVja3N1bT03NiwKCU9FTUlEPUlu
dGVsLCBPRU0gVGFibGUgSUQ9RDMzMjE3R0ssIE9FTSBSZXZpc2lvbj0weDNhLAoJQ3JlYXRvciBJ
RD1JTlRMLCBDcmVhdG9yIFJldmlzaW9uPTB4MjAwNTExMTcKCgpBUElDOiBMZW5ndGg9MTE0LCBS
ZXZpc2lvbj0zLCBDaGVja3N1bT00NywKCU9FTUlEPUludGVsLCBPRU0gVGFibGUgSUQ9RDMzMjE3
R0ssIE9FTSBSZXZpc2lvbj0weDNhLAoJQ3JlYXRvciBJRD1BTUksIENyZWF0b3IgUmV2aXNpb249
MHgxMDAxMwoKCkZQRFQ6IExlbmd0aD02OCwgUmV2aXNpb249MSwgQ2hlY2tzdW09NTksCglPRU1J
RD1JbnRlbCwgT0VNIFRhYmxlIElEPUQzMzIxN0dLLCBPRU0gUmV2aXNpb249MHgzYSwKCUNyZWF0
b3IgSUQ9QU1JLCBDcmVhdG9yIFJldmlzaW9uPTB4MTAwMTMKCgpGSURUOiBMZW5ndGg9MTU2LCBS
ZXZpc2lvbj0xLCBDaGVja3N1bT0xNTYsCglPRU1JRD1JbnRlbCwgT0VNIFRhYmxlIElEPUQzMzIx
N0dLLCBPRU0gUmV2aXNpb249MHgzYSwKCUNyZWF0b3IgSUQ9QU1JLCBDcmVhdG9yIFJldmlzaW9u
PTB4MTAwMTMKCgpNQ0ZHOiBMZW5ndGg9NjAsIFJldmlzaW9uPTEsIENoZWNrc3VtPTE0NiwKCU9F
TUlEPUludGVsLCBPRU0gVGFibGUgSUQ9RDMzMjE3R0ssIE9FTSBSZXZpc2lvbj0weDNhLAoJQ3Jl
YXRvciBJRD1NU0ZULCBDcmVhdG9yIFJldmlzaW9uPTB4OTcKCgpIUEVUOiBMZW5ndGg9NTYsIFJl
dmlzaW9uPTEsIENoZWNrc3VtPTMsCglPRU1JRD1JbnRlbCwgT0VNIFRhYmxlIElEPUQzMzIxN0dL
LCBPRU0gUmV2aXNpb249MHgzYSwKCUNyZWF0b3IgSUQ9QU1JLiwgQ3JlYXRvciBSZXZpc2lvbj0w
eDUKCgpTU0RUOiBMZW5ndGg9Nzg5LCBSZXZpc2lvbj0xLCBDaGVja3N1bT0zMCwKCU9FTUlEPUlu
dGVsLCBPRU0gVGFibGUgSUQ9RDMzMjE3R0ssIE9FTSBSZXZpc2lvbj0weDNhLAoJQ3JlYXRvciBJ
RD1JTlRMLCBDcmVhdG9yIFJldmlzaW9uPTB4MjAwOTExMTIKCgpTU0RUOiBMZW5ndGg9Mjg1MCwg
UmV2aXNpb249MSwgQ2hlY2tzdW09MjA1LAoJT0VNSUQ9SW50ZWwsIE9FTSBUYWJsZSBJRD1EMzMy
MTdHSywgT0VNIFJldmlzaW9uPTB4M2EsCglDcmVhdG9yIElEPUlOVEwsIENyZWF0b3IgUmV2aXNp
b249MHgyMDA1MTExNwoK
====

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Mike Belopuhov-5
On 8 May 2017 at 01:04, <[hidden email]> wrote:

> Synopsis:       softraid crypto performance regression
>> Category:       system
>> Environment:
>>
>         System      : OpenBSD 6.1
>         Details     : OpenBSD 6.1-current (GENERIC.MP) #51: Sat May  6
> 12:01:40 MDT 2017
>                          [hidden email]:/us
> r/src/sys/arch/amd64/compile/GENERIC.MP
>
>         Architecture: OpenBSD.amd64
>         Machine     : amd64
>
>> Description:
>>
> The issue appeared after upgrading from the April 20th snapshot to
> the May 6th one.  For context, my whole disk is encrypted, as
> described in the FAQ (https://www.openbsd.org/faq/faq14.html#softraidFDE);
> see below for disklabel information.
>
> With the April 20th snapshot, disk performance was fine; but with
> the May 6th snapshot everything is slow. For example, where before
> it took ~5 seconds for Libreoffice to open, now it takes ~30 seconds.
>
>
> How-To-Repeat:
>>
> These instructions assume that you have the same disk setup as me; see
> below for my disklabel information.
> 1. download OpenBSD 6.1 miniroot.fs
> 2. dd it to a USB drive
> 3. boot it
> 4. when the OpenBSD installer prompt comes up, hit "s" for (S)hell
> 5. configure the existing crypto volume:
>      # bioctl -c C -l /dev/sd0a softraid0
>      (enter existing volume password)
>      (crypto volume now mounted on /dev/sd2*)
> 6. mount a partition in the crypto volume:
>      # mount /dev/sd2k /mnt
>      # cd /mnt
> 7. create a blob of random data:
>      # dd if=/dev/random of=random_data bs=1m count=512
> 8. test disk performance:
>      # for i in 1 2 3; do sync && time cp random_data test$i; done
> 9. record results
> 10. repeat from step 1, replacing the 6.1 miniroot.fs with the May 6th
> snapshot miniroot.fs
> 11. compare results
>
> Here's my results:
>   6.1:            28.89s,   36.39s,   27.63s
>   May 6 snapshot: 2m12.01s, 2m16.31s, 2m30.47s
>
> I know that many commits occurred between 6.1's release and May 6,
> so, if needed, I can bisect for the problem commit. Besides that,
> let me know if you need more info.
>
>
> Fix:
>>
>         Not known.
>
>
Hi,

You observe a decrease in performance because we've switched to
a constant time machine independent AES implementation which is
inherently slower than the T-table version.  Users with CPUs
supporting AES-NI are not affected by this since the AES-NI
driver provides it's own constant time implementation.

Regards,
Mike
Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

m.reed
On 2017-05-07 19:30, Mike Belopuhov wrote:

> On 8 May 2017 at 01:04, <[hidden email]> wrote:
>
>> Synopsis:       softraid crypto performance regression
>>> Category:       system
>>> Environment:
>>>
>>         System      : OpenBSD 6.1
>>         Details     : OpenBSD 6.1-current (GENERIC.MP) #51: Sat May  6
>> 12:01:40 MDT 2017
>>                          [hidden email]:/us
>> r/src/sys/arch/amd64/compile/GENERIC.MP
>>
>>         Architecture: OpenBSD.amd64
>>         Machine     : amd64
>>
>>> Description:
>>>
>> The issue appeared after upgrading from the April 20th snapshot to
>> the May 6th one.  For context, my whole disk is encrypted, as
>> described in the FAQ
>> (https://www.openbsd.org/faq/faq14.html#softraidFDE);
>> see below for disklabel information.
>>
>> With the April 20th snapshot, disk performance was fine; but with
>> the May 6th snapshot everything is slow. For example, where before
>> it took ~5 seconds for Libreoffice to open, now it takes ~30 seconds.
>>
>>
>> How-To-Repeat:
>>>
>> These instructions assume that you have the same disk setup as me; see
>> below for my disklabel information.
>> 1. download OpenBSD 6.1 miniroot.fs
>> 2. dd it to a USB drive
>> 3. boot it
>> 4. when the OpenBSD installer prompt comes up, hit "s" for (S)hell
>> 5. configure the existing crypto volume:
>>      # bioctl -c C -l /dev/sd0a softraid0
>>      (enter existing volume password)
>>      (crypto volume now mounted on /dev/sd2*)
>> 6. mount a partition in the crypto volume:
>>      # mount /dev/sd2k /mnt
>>      # cd /mnt
>> 7. create a blob of random data:
>>      # dd if=/dev/random of=random_data bs=1m count=512
>> 8. test disk performance:
>>      # for i in 1 2 3; do sync && time cp random_data test$i; done
>> 9. record results
>> 10. repeat from step 1, replacing the 6.1 miniroot.fs with the May 6th
>> snapshot miniroot.fs
>> 11. compare results
>>
>> Here's my results:
>>   6.1:            28.89s,   36.39s,   27.63s
>>   May 6 snapshot: 2m12.01s, 2m16.31s, 2m30.47s
>>
>> I know that many commits occurred between 6.1's release and May 6,
>> so, if needed, I can bisect for the problem commit. Besides that,
>> let me know if you need more info.
>>
>>
>> Fix:
>>>
>>         Not known.
>>
>>
> Hi,
>
> You observe a decrease in performance because we've switched to
> a constant time machine independent AES implementation which is
> inherently slower than the T-table version.  Users with CPUs
> supporting AES-NI are not affected by this since the AES-NI
> driver provides it's own constant time implementation.
>
> Regards,
> Mike

Hi Mike,

Thanks for the info, and for your work on the AES implementation.
With that said, is there any chance that this issue could be solved
such that CPUs like mine (which lack AES-NI) won't become super slow?

I can always stop using softraid crypto or buy a new CPU, but I'd
like to avoid that :)


Michael Reed

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Stefan Sperling-5
On Sun, May 07, 2017 at 08:06:56PM -0400, [hidden email] wrote:

> On 2017-05-07 19:30, Mike Belopuhov wrote:
> > You observe a decrease in performance because we've switched to
> > a constant time machine independent AES implementation which is
> > inherently slower than the T-table version.  Users with CPUs
> > supporting AES-NI are not affected by this since the AES-NI
> > driver provides it's own constant time implementation.
> >
> > Regards,
> > Mike
>
> Hi Mike,
>
> Thanks for the info, and for your work on the AES implementation.
> With that said, is there any chance that this issue could be solved
> such that CPUs like mine (which lack AES-NI) won't become super slow?
>
> I can always stop using softraid crypto or buy a new CPU, but I'd
> like to avoid that :)

I also have some machines which are affected by this, and I am
not sure what to about it. I cannot judge the advantages of
either AES implementation.

If this is how softraid crypto is going to be from now on,
I am going to move my non-AES-NI machines off softraid crypto
onto self-encrypting SSDs (which is good idea anyway for slow
machines).

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Ted Unangst-6
Stefan Sperling wrote:
> I also have some machines which are affected by this, and I am
> not sure what to about it. I cannot judge the advantages of
> either AES implementation.

There's very little advantage to a constant time implementation for disk
encryption. The threat model doesn't really include such side channels.

But I don't know how much burden it will be to maintain two implementations,
with the various defines like CRYPTO_AES_XTS and
CRYPTO_AES_XTS_FASTER_BUT_MAYBE_A_LITTLE_UNSAFE and deciding where to use
each.

Although, truth be told, XTS is only useful for disk encryption. It shouldn't
be used for network traffic. So we could just always make software XTS use
the original rijndael code. But this is mike's fun zone.

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Theo de Raadt-2
> There's very little advantage to a constant time implementation for disk
> encryption.

^^^^ 100% agree

But this has been shoved into the tree, only considering IPSEC performance,
and zero assessment of the impact it has upon other consumers.

It was done wrong.  It was commited before we were told it wasslower.

Increasingly the lack of comment about that detail before commit feels
intentional.

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Mike Belopuhov-5
In reply to this post by Ted Unangst-6
On Wed, May 17, 2017 at 12:42 -0400, Ted Unangst wrote:
> Stefan Sperling wrote:
> > I also have some machines which are affected by this, and I am
> > not sure what to about it. I cannot judge the advantages of
> > either AES implementation.
>
> There's very little advantage to a constant time implementation for disk
> encryption. The threat model doesn't really include such side channels.
>

This is simply not true if you have local users on the same box.
http://www.cs.tau.ac.il/~tromer/papers/cache.pdf

> But I don't know how much burden it will be to maintain two implementations,
> with the various defines like CRYPTO_AES_XTS and
> CRYPTO_AES_XTS_FASTER_BUT_MAYBE_A_LITTLE_UNSAFE and deciding where to use
> each.
>

I can switch AES-XTS back to T-tables at any time but there's no way
to distinguish between what implementation to use at a given moment.

> Although, truth be told, XTS is only useful for disk encryption. It shouldn't
> be used for network traffic. So we could just always make software XTS use
> the original rijndael code. But this is mike's fun zone.

Again, if you don't have local users or you trust them to not attack
you, you can use any implementation.

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Theo de Raadt-2
> This is simply not true if you have local users on the same box.
> http://www.cs.tau.ac.il/~tromer/papers/cache.pdf

don't need to worry about that attack anymore, because you made it
so slow noone can use the functionality anymore.

prevously this software functionality was generally used in single
user systems.

but now you have created a situation where people will abandon
crypto in such situations.

AWESOME.  That's a great step forward.

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Mike Belopuhov-5
In reply to this post by Stefan Sperling-5
On Wed, May 17, 2017 at 18:23 +0200, Stefan Sperling wrote:

> On Sun, May 07, 2017 at 08:06:56PM -0400, [hidden email] wrote:
> > On 2017-05-07 19:30, Mike Belopuhov wrote:
> > > You observe a decrease in performance because we've switched to
> > > a constant time machine independent AES implementation which is
> > > inherently slower than the T-table version.  Users with CPUs
> > > supporting AES-NI are not affected by this since the AES-NI
> > > driver provides it's own constant time implementation.
> > >
> > > Regards,
> > > Mike
> >
> > Hi Mike,
> >
> > Thanks for the info, and for your work on the AES implementation.
> > With that said, is there any chance that this issue could be solved
> > such that CPUs like mine (which lack AES-NI) won't become super slow?
> >
> > I can always stop using softraid crypto or buy a new CPU, but I'd
> > like to avoid that :)
>
> I also have some machines which are affected by this, and I am
> not sure what to about it. I cannot judge the advantages of
> either AES implementation.
>
> If this is how softraid crypto is going to be from now on,
> I am going to move my non-AES-NI machines off softraid crypto
> onto self-encrypting SSDs (which is good idea anyway for slow
> machines).

There are ways to improve perfomance but more work is required
to get there.  In the meantime if the consensus is that XTS
performance is unacceptable we can roll it back to T-tables.

Please test the diff below.

diff --git regress/sys/crypto/aesxts/Makefile regress/sys/crypto/aesxts/Makefile
index 4c47348d9c8..5d7fea9f560 100644
--- regress/sys/crypto/aesxts/Makefile
+++ regress/sys/crypto/aesxts/Makefile
@@ -19,11 +19,11 @@ CDIAGFLAGS+= -Wshadow
 
 REGRESS_TARGETS= run-regress-${PROG}
 
 .PATH:  ${DIR}/crypto
 SRCS+= cast.c ecb_enc.c ecb3_enc.c gmac.c aes.c set_key.c
-SRCS+= chachapoly.c poly1305.c
+SRCS+= rijndael.c chachapoly.c poly1305.c
 SRCS+= xform.c
 
 run-regress-${PROG}: ${PROG}
  ./${PROG}
 
diff --git regress/sys/crypto/aesxts/aes_xts.c regress/sys/crypto/aesxts/aes_xts.c
index 861d143bac6..c43b4f56ef6 100644
--- regress/sys/crypto/aesxts/aes_xts.c
+++ regress/sys/crypto/aesxts/aes_xts.c
@@ -24,23 +24,23 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #include <sys/types.h>
-#include <crypto/aes.h>
+#include <crypto/rijndael.h>
 #include <err.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
 #define AES_XTS_BLOCKSIZE 16
 
 struct aes_xts_ctx {
- AES_CTX key1;
- AES_CTX key2;
+ rijndael_ctx key1;
+ rijndael_ctx key2;
  u_int8_t tweak[AES_XTS_BLOCKSIZE];
 };
 
 int  aes_xts_setkey(void *, u_int8_t *, int);
 void aes_xts_encrypt(caddr_t, u_int8_t *);
diff --git sys/crypto/aes.h sys/crypto/aes.h
index a670a2b522c..9718115fc65 100644
--- sys/crypto/aes.h
+++ sys/crypto/aes.h
@@ -24,11 +24,13 @@
  */
 
 #ifndef _AES_H_
 #define _AES_H_
 
+#ifndef AES_MAXROUNDS
 #define AES_MAXROUNDS (14)
+#endif
 
 typedef struct aes_ctx {
  uint32_t sk[60];
  uint32_t sk_exp[120];
 
diff --git sys/crypto/xform.c sys/crypto/xform.c
index 0579345f4f1..6955d1b0ad4 100644
--- sys/crypto/xform.c
+++ sys/crypto/xform.c
@@ -57,10 +57,11 @@
 #include <crypto/sha1.h>
 #include <crypto/sha2.h>
 #include <crypto/rmd160.h>
 #include <crypto/blf.h>
 #include <crypto/cast.h>
+#include <crypto/rijndael.h>
 #include <crypto/aes.h>
 #include <crypto/cryptodev.h>
 #include <crypto/xform.h>
 #include <crypto/gmac.h>
 #include <crypto/chachapoly.h>
@@ -119,12 +120,12 @@ struct aes_ctr_ctx {
 #define AES_XTS_BLOCKSIZE 16
 #define AES_XTS_IVSIZE 8
 #define AES_XTS_ALPHA 0x87 /* GF(2^128) generator polynomial */
 
 struct aes_xts_ctx {
- AES_CTX key1;
- AES_CTX key2;
+ rijndael_ctx key1;
+ rijndael_ctx key2;
  u_int8_t tweak[AES_XTS_BLOCKSIZE];
 };
 
 /* Helper */
 void aes_xts_crypt(struct aes_xts_ctx *, u_int8_t *, u_int);
@@ -494,11 +495,11 @@ aes_xts_reinit(caddr_t key, u_int8_t *iv)
  blocknum >>= 8;
  }
  /* Last 64 bits of IV are always zero */
  bzero(ctx->tweak + AES_XTS_IVSIZE, AES_XTS_IVSIZE);
 
- AES_Encrypt(&ctx->key2, ctx->tweak, ctx->tweak);
+ rijndael_encrypt(&ctx->key2, ctx->tweak, ctx->tweak);
 }
 
 void
 aes_xts_crypt(struct aes_xts_ctx *ctx, u_int8_t *data, u_int do_encrypt)
 {
@@ -507,13 +508,13 @@ aes_xts_crypt(struct aes_xts_ctx *ctx, u_int8_t *data, u_int do_encrypt)
 
  for (i = 0; i < AES_XTS_BLOCKSIZE; i++)
  block[i] = data[i] ^ ctx->tweak[i];
 
  if (do_encrypt)
- AES_Encrypt(&ctx->key1, block, data);
+ rijndael_encrypt(&ctx->key1, block, data);
  else
- AES_Decrypt(&ctx->key1, block, data);
+ rijndael_decrypt(&ctx->key1, block, data);
 
  for (i = 0; i < AES_XTS_BLOCKSIZE; i++)
  data[i] ^= ctx->tweak[i];
 
  /* Exponentiate tweak */
@@ -548,12 +549,12 @@ aes_xts_setkey(void *sched, u_int8_t *key, int len)
  if (len != 32 && len != 64)
  return -1;
 
  ctx = (struct aes_xts_ctx *)sched;
 
- AES_Setkey(&ctx->key1, key, len / 2);
- AES_Setkey(&ctx->key2, key + (len / 2), len / 2);
+ rijndael_set_key(&ctx->key1, key, len * 4);
+ rijndael_set_key(&ctx->key2, key + (len / 2), len * 4);
 
  return 0;
 }
 
 /*

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Stefan Sperling-5
On Wed, May 17, 2017 at 07:17:56PM +0200, Mike Belopuhov wrote:
> There are ways to improve perfomance but more work is required
> to get there.  In the meantime if the consensus is that XTS
> performance is unacceptable we can roll it back to T-tables.
>
> Please test the diff below.

Works for me.
This restores my machine from 'very very slow' to just 'slow'.

Thanks!

> diff --git regress/sys/crypto/aesxts/Makefile regress/sys/crypto/aesxts/Makefile
> index 4c47348d9c8..5d7fea9f560 100644
> --- regress/sys/crypto/aesxts/Makefile
> +++ regress/sys/crypto/aesxts/Makefile
> @@ -19,11 +19,11 @@ CDIAGFLAGS+= -Wshadow
>  
>  REGRESS_TARGETS= run-regress-${PROG}
>  
>  .PATH:  ${DIR}/crypto
>  SRCS+= cast.c ecb_enc.c ecb3_enc.c gmac.c aes.c set_key.c
> -SRCS+= chachapoly.c poly1305.c
> +SRCS+= rijndael.c chachapoly.c poly1305.c
>  SRCS+= xform.c
>  
>  run-regress-${PROG}: ${PROG}
>   ./${PROG}
>  
> diff --git regress/sys/crypto/aesxts/aes_xts.c regress/sys/crypto/aesxts/aes_xts.c
> index 861d143bac6..c43b4f56ef6 100644
> --- regress/sys/crypto/aesxts/aes_xts.c
> +++ regress/sys/crypto/aesxts/aes_xts.c
> @@ -24,23 +24,23 @@
>   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
>   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>   */
>  
>  #include <sys/types.h>
> -#include <crypto/aes.h>
> +#include <crypto/rijndael.h>
>  #include <err.h>
>  #include <fcntl.h>
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
>  
>  #define AES_XTS_BLOCKSIZE 16
>  
>  struct aes_xts_ctx {
> - AES_CTX key1;
> - AES_CTX key2;
> + rijndael_ctx key1;
> + rijndael_ctx key2;
>   u_int8_t tweak[AES_XTS_BLOCKSIZE];
>  };
>  
>  int  aes_xts_setkey(void *, u_int8_t *, int);
>  void aes_xts_encrypt(caddr_t, u_int8_t *);
> diff --git sys/crypto/aes.h sys/crypto/aes.h
> index a670a2b522c..9718115fc65 100644
> --- sys/crypto/aes.h
> +++ sys/crypto/aes.h
> @@ -24,11 +24,13 @@
>   */
>  
>  #ifndef _AES_H_
>  #define _AES_H_
>  
> +#ifndef AES_MAXROUNDS
>  #define AES_MAXROUNDS (14)
> +#endif
>  
>  typedef struct aes_ctx {
>   uint32_t sk[60];
>   uint32_t sk_exp[120];
>  
> diff --git sys/crypto/xform.c sys/crypto/xform.c
> index 0579345f4f1..6955d1b0ad4 100644
> --- sys/crypto/xform.c
> +++ sys/crypto/xform.c
> @@ -57,10 +57,11 @@
>  #include <crypto/sha1.h>
>  #include <crypto/sha2.h>
>  #include <crypto/rmd160.h>
>  #include <crypto/blf.h>
>  #include <crypto/cast.h>
> +#include <crypto/rijndael.h>
>  #include <crypto/aes.h>
>  #include <crypto/cryptodev.h>
>  #include <crypto/xform.h>
>  #include <crypto/gmac.h>
>  #include <crypto/chachapoly.h>
> @@ -119,12 +120,12 @@ struct aes_ctr_ctx {
>  #define AES_XTS_BLOCKSIZE 16
>  #define AES_XTS_IVSIZE 8
>  #define AES_XTS_ALPHA 0x87 /* GF(2^128) generator polynomial */
>  
>  struct aes_xts_ctx {
> - AES_CTX key1;
> - AES_CTX key2;
> + rijndael_ctx key1;
> + rijndael_ctx key2;
>   u_int8_t tweak[AES_XTS_BLOCKSIZE];
>  };
>  
>  /* Helper */
>  void aes_xts_crypt(struct aes_xts_ctx *, u_int8_t *, u_int);
> @@ -494,11 +495,11 @@ aes_xts_reinit(caddr_t key, u_int8_t *iv)
>   blocknum >>= 8;
>   }
>   /* Last 64 bits of IV are always zero */
>   bzero(ctx->tweak + AES_XTS_IVSIZE, AES_XTS_IVSIZE);
>  
> - AES_Encrypt(&ctx->key2, ctx->tweak, ctx->tweak);
> + rijndael_encrypt(&ctx->key2, ctx->tweak, ctx->tweak);
>  }
>  
>  void
>  aes_xts_crypt(struct aes_xts_ctx *ctx, u_int8_t *data, u_int do_encrypt)
>  {
> @@ -507,13 +508,13 @@ aes_xts_crypt(struct aes_xts_ctx *ctx, u_int8_t *data, u_int do_encrypt)
>  
>   for (i = 0; i < AES_XTS_BLOCKSIZE; i++)
>   block[i] = data[i] ^ ctx->tweak[i];
>  
>   if (do_encrypt)
> - AES_Encrypt(&ctx->key1, block, data);
> + rijndael_encrypt(&ctx->key1, block, data);
>   else
> - AES_Decrypt(&ctx->key1, block, data);
> + rijndael_decrypt(&ctx->key1, block, data);
>  
>   for (i = 0; i < AES_XTS_BLOCKSIZE; i++)
>   data[i] ^= ctx->tweak[i];
>  
>   /* Exponentiate tweak */
> @@ -548,12 +549,12 @@ aes_xts_setkey(void *sched, u_int8_t *key, int len)
>   if (len != 32 && len != 64)
>   return -1;
>  
>   ctx = (struct aes_xts_ctx *)sched;
>  
> - AES_Setkey(&ctx->key1, key, len / 2);
> - AES_Setkey(&ctx->key2, key + (len / 2), len / 2);
> + rijndael_set_key(&ctx->key1, key, len * 4);
> + rijndael_set_key(&ctx->key2, key + (len / 2), len * 4);
>  
>   return 0;
>  }
>  
>  /*
>

Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Ted Unangst-6
In reply to this post by Mike Belopuhov-5
Mike Belopuhov wrote:

> On Wed, May 17, 2017 at 12:42 -0400, Ted Unangst wrote:
> > Stefan Sperling wrote:
> > > I also have some machines which are affected by this, and I am
> > > not sure what to about it. I cannot judge the advantages of
> > > either AES implementation.
> >
> > There's very little advantage to a constant time implementation for disk
> > encryption. The threat model doesn't really include such side channels.
> >
>
> This is simply not true if you have local users on the same box.
> http://www.cs.tau.ac.il/~tromer/papers/cache.pdf

I think we've reached agreement regarding reverting XTS, but for the benefit
of anyone following along at home or who might find this thread later...

The insider threat where I have some hostile user on my computer, who runs some
code to extract the disk key, then this user physically steals the computer to
recover data... I would say far fetched, but let's just go with minority
threat.

For most people, the threat is leaving a laptop bag in a taxi, or getting
burlged, or going through customs. Like 90%. 99% even? No insider threat here.

Another very popular use case doesn't even involve a threat. It's very easy to
repurpose a machine/disk that uses full disk encryption. Change the key, and
you've instantly wiped the disk. Personally, this is the main reason I use and
advocate everyone use disk encryption. It's not about machines being stolen,
but about machines I plan to give away in the future.


Reply | Threaded
Open this post in threaded view
|

Re: softraid crypto performance regression

Todd C. Miller
On Thu, 18 May 2017 16:56:57 -0400, "Ted Unangst" wrote:

> Another very popular use case doesn't even involve a threat. It's
> very easy to repurpose a machine/disk that uses full disk encryption.
> Change the key, and you've instantly wiped the disk. Personally,
> this is the main reason I use and advocate everyone use disk
> encryption. It's not about machines being stolen, but about machines
> I plan to give away in the future.

Adding to this, it also saves you in situations where you cannot
zero out the disk because of a hardware failure.  A sufficiently
motivated party can probably still recover the data (there are
plenty of services that will do so for a fee).

 - todd