HP.Firmware.Defs.psm1


Set-StrictMode -Version 3.0
$env:PATH += ";$PSScriptRoot"
Add-Type -TypeDefinition @'
   using System;
   using System.IO;
   using System.IO.Compression;
   using System.Collections.Generic;
   using System.Runtime.InteropServices;
 
// HP SUREVIEW
public enum sureview_status_t : byte {
    sureview_off = 0xff,
    sureview_on = 0xfe,
    sureview_forced_on = 0xfc,
    sureview_unsupported = 0xfa,
    sureview_unknown = 0
};
 
[Flags]
public enum sureview_capabilities_t : byte{
    touch_ui = 0x01
};
 
 
public enum sureview_desired_state_t : byte {
    sureview_desired_off = 0,
    sureview_desired_on = 1,
    sureview_desired_on_max = 2
} ;
 
 
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct sureview_state_t
{
     [MarshalAs(UnmanagedType.U1)] public sureview_status_t status; // of type sureview_status_t
     [MarshalAs(UnmanagedType.U1)] public byte visibility;
     [MarshalAs(UnmanagedType.U1)] public sureview_capabilities_t capabilities; // of type sureview_capabilities_t
};
 
 
public static class DfmNativeSureView
{
 
    [DllImport("dfmbios32.dll", EntryPoint = "get_sureview_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    public static extern int get_sureview_state32([In,Out] ref sureview_state_t data, [In,Out] ref int extended_result);
    [DllImport("dfmbios64.dll", EntryPoint = "get_sureview_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    public static extern int get_sureview_state64([In,Out] ref sureview_state_t data, [In,Out] ref int extended_result);
 
    [DllImport("dfmbios32.dll", EntryPoint = "set_sureview_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    public static extern int set_sureview_state32([In] sureview_desired_state_t on, [In] byte visibility, [In,Out] ref int extended_result);
    [DllImport("dfmbios64.dll", EntryPoint = "set_sureview_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    public static extern int set_sureview_state64([In] sureview_desired_state_t on, [In] byte visibility, [In,Out] ref int extended_result);
 }
 
// GENERAL FIRMWARE
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct opaque4096_t
{
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 4096)] public byte[] raw;
};
 
public enum authentication_t : uint
{
    auth_t_anonymous = 0,
    auth_t_password = 1,
    auth_t_beam = 2
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
public struct authentication_data_t {
    [MarshalAs(UnmanagedType.U2)] public ushort password_size;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string password;
 
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct bios_credential_t
{
    [MarshalAs(UnmanagedType.U4)] public authentication_t authentication;
    [MarshalAs(UnmanagedType.Struct)] public authentication_data_t data;
}
 
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void ProgressCallback(UInt32 location, UInt32 value1, UInt32 value2, UInt32 state);
 
 
 // AUDIT LOG and LOGO
 
   public enum audit_log_severity_t : uint
    {
        logged_severity_reserved = 0,
        logged_severity_unknown = 1,
        logged_severity_normal = 2,
        logged_severity_low = 3,
        logged_severity_medium = 4,
        logged_severity_high = 5,
        logged_severity_critical = 6,
    }
 
 
    public enum powerstate_t : uint
    {
        S0 = 0,
        S3 = 1,
        S4S5 = 2,
        RESERVED = 3
    }
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct timestamp_t
    {
        public Int16 year;
        public Int16 month;
        public Int16 day_of_week;
        public Int16 day;
        public Int16 hour;
        public Int16 minute;
        public Int16 second;
        public Int16 millisecond;
    }
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct bios_log_entry_t
    {
        [MarshalAs(UnmanagedType.U1)] public byte status;
        [MarshalAs(UnmanagedType.U4)] public UInt32 message_number;
        [MarshalAs(UnmanagedType.Struct)] public timestamp_t timestamp;
        [MarshalAs(UnmanagedType.U4)] public UInt32 timestamp_is_exact;
        [MarshalAs(UnmanagedType.U4)] public powerstate_t system_state_at_event;
        [MarshalAs(UnmanagedType.U4)] public UInt32 source_id;
        [MarshalAs(UnmanagedType.U4)] public UInt32 event_id;
        [MarshalAs(UnmanagedType.U4)] public audit_log_severity_t severity;
        //[MarshalAs(UnmanagedType.U1)] public byte data_0;
        [MarshalAs(UnmanagedType.U1)] public byte data_1;
        [MarshalAs(UnmanagedType.U1)] public byte data_2;
        [MarshalAs(UnmanagedType.U1)] public byte data_3;
        [MarshalAs(UnmanagedType.U1)] public byte data_4;
    }
 
    public static class DfmNativeBios
    {
        [DllImport("dfmbios32.dll", EntryPoint = "get_audit_logs", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern UInt32 get_audit_logs_32([Out] bios_log_entry_t[] results, [In,Out] ref UInt32 buffer_size, [In,Out] ref UInt32 records_count, [Out] out UInt32 extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "get_audit_logs", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern UInt32 get_audit_logs_64([Out] bios_log_entry_t[] results, [In,Out] ref UInt32 buffer_size, [In,Out] ref UInt32 records_count, [Out] out UInt32 extended_result);
        [DllImport("dfmbios32.dll", EntryPoint = "query_enterprise_logo", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 query_enterprise_logo32([Out] out UInt32 installed, [Out] out UInt32 state, [Out] out UInt32 extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "query_enterprise_logo", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 query_enterprise_logo64([Out] out UInt32 installed, [Out] out UInt32 state, [Out] out UInt32 extended_result);
        [DllImport("dfmbios32.dll", EntryPoint = "set_enterprise_logo", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 set_enterprise_logo32([Out] string filename, [In] ref bios_credential_t credentials, [Out] out UInt32 extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "set_enterprise_logo", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 set_enterprise_logo64([Out] string filename, [In] ref bios_credential_t credentials, [Out] out UInt32 extended_result);
 
 
        [DllImport("dfmbios32.dll", EntryPoint = "clear_enterprise_logo", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 clear_enterprise_logo32([In] ref bios_credential_t credentials, [Out] out UInt32 extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "clear_enterprise_logo", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 clear_enterprise_logo64([In] ref bios_credential_t credentials, [Out] out UInt32 extended_result);
 
        [DllImport("dfmbios64.dll", EntryPoint = "flash_hp_device", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 flash_hp_device64([In] string firmware_file, [In] ref bios_credential_t credentials, [Out] out UInt32 mi_result, [MarshalAs(UnmanagedType.FunctionPtr)] ProgressCallback callback, [In] string filename_hint, [In] string efi_path);
        [DllImport("dfmbios32.dll", EntryPoint = "flash_hp_device", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern Int32 flash_hp_device32([In] string firmware_file, [In] ref bios_credential_t credentials, [Out] out UInt32 mi_result,[MarshalAs(UnmanagedType.FunctionPtr)] ProgressCallback callback, [In] string filename_hint, [In] string efi_path);
 
        [DllImport("dfmbios32.dll", EntryPoint = "get_flash_file_information", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern UInt32 get_flash_file_information32([In] string firmware_file, [Out] out UInt32 is_capsule, [Out] out UInt32 is_for_current_platform);
        [DllImport("dfmbios64.dll", EntryPoint = "get_flash_file_information", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern UInt32 get_flash_file_information64([In] string firmware_file, [Out] out UInt32 is_capsule, [Out] out UInt32 is_for_current_platform);
 
        [DllImport("dfmbios32.dll", EntryPoint = "encrypt_password_to_file", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern UInt32 encrypt_password_to_file32([In] ref bios_credential_t credentials, [In] string firmware_file);
        [DllImport("dfmbios64.dll", EntryPoint = "encrypt_password_to_file", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern UInt32 encrypt_password_to_file64([In] ref bios_credential_t credentials, [In] string firmware_file);
     }
 
// HP SECURE PLATFORM
 
  public enum provisioning_state_t : byte
    {
        NotConfigured = 0,
        Provisioned = 1,
        ProvisioningInProgress = 2
    };
 
    [Flags]
    public enum secureplatform_features_t : uint
    {
        None = 0,
        SureRun = 1,
        SureRecover = 2,
        Auth = 3
    };
 
    public struct PortableFileFormat {
        public DateTime timestamp;
        public string purpose;
        public byte[] Data;
        public byte[] Meta1;
        public byte[] Meta2;
        public byte[] Meta3;
        public byte[] Meta4;
    };
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct provisioning_data_t
    {
        [MarshalAs(UnmanagedType.U1)] public provisioning_state_t state;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2)] public byte[] subsystem_version; // major minor
        [MarshalAs(UnmanagedType.U2)] public ushort reserved;
        [MarshalAs(UnmanagedType.U4)] public secureplatform_features_t features_in_use;
        [MarshalAs(UnmanagedType.U4)] public UInt32 arp_counter;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] kek_mod;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] sk_mod;
    };
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct sk_provisioning_payload_t {
                [MarshalAs(UnmanagedType.U4)] public uint counter;
                [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] mod;
            } ;
 
 
 
    public static class DfmNativeSecurePlatform
    {
        [DllImport("dfmbios32.dll", EntryPoint = "sp_get_provisioning", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_secureplatform_provisioning32([In,Out] ref provisioning_data_t data, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_get_provisioning", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_secureplatform_provisioning64([In,Out] ref provisioning_data_t data, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_get_ek_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_ek_provisioning_data32([In] byte[] key, [In] int key_length, [In] string password, [In] int password_length, [In,Out] ref opaque4096_t data, [In,Out] ref int data_len, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_get_ek_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_ek_provisioning_data64([In] byte[] key, [In] int key_length, [In] string password, [In] int password_length, [In,Out] ref opaque4096_t data, [In,Out] ref int data_len, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_ek_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_ek_provisioning32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_ek_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_ek_provisioning64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_sk_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_sk_provisioning32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_sk_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_sk_provisioning64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
    };
     
    // HP SureRecover
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct sk_provisioning_t {
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] sig;
        public sk_provisioning_payload_t data;
    };
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct surerecover_configuration_t {
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] sig;
        public surerecover_configuration_payload_t data;
    };
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct surerecover_configuration_payload_t
    {
        [MarshalAs(UnmanagedType.U4)] public UInt32 arp_counter;
        [MarshalAs(UnmanagedType.U4)] public surerecover_os_flags os_flags;
        [MarshalAs(UnmanagedType.U4)] public surerecover_re_flags re_flags;
    };
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct surerecover_trigger_t {
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] sig;
        public surerecover_trigger_payload_t data;
    };
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct surerecover_trigger_payload_t
    {
        [MarshalAs(UnmanagedType.U4)] public UInt32 arp_counter;
        [MarshalAs(UnmanagedType.U4)] public UInt32 bios_trigger_flags;
        [MarshalAs(UnmanagedType.U4)] public UInt32 re_trigger_flags;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] reserved;
    };
 
    [Flags]
    public enum surerecover_day_of_week : byte
    {
        None = 0,
        Sunday = 1,
        Monday = 2,
        Tuesday = 4,
        Wednesday = 8,
        Thursday = 16,
        Friday = 32,
        Saturday = 64,
        EveryWeek = 128
    };
 
    [Flags]
    public enum surerecover_os_flags : uint
    {
        None = 0,
        NetworkBasedRecovery = 1,
        WiFi = 2,
        MobileDeviceSupport = 4,
        SecureStorage = 8,
        ATANormalErase = 16,
        ATACryptographicErase = 32,
        RollbackPrevention = 64
    };
 
 
    [Flags]
    public enum surerecover_prompt_policy : uint
    {
        None = 0,
        PromptBeforeRecovery = 1,
        PromptOnError = 2,
        PromptAfterRecover = 4
    };
 
    [Flags]
    public enum surerecover_erase_policy : uint
    {
        None = 0,
        EraseSecureStorage = 16,
        EraseSystemDrives = 32
    };
 
 
    [Flags]
    public enum surerecover_re_flags : uint
    {
        None = 0,
        DRDVD = 1,
        Reserved1 = 2,
        Reserved2 = 4,
        Reserved3 = 8,
        Reserved4 = 16,
        Reserved5 = 32,
        RollbackPrevention = 64
    };
 
         
   [StructLayout(LayoutKind.Sequential, Pack = 1)]
   public struct surerecover_schedule_data_t
    {
        [MarshalAs(UnmanagedType.U1)] public surerecover_day_of_week day_of_week;
        [MarshalAs(UnmanagedType.U1)] public byte hour;
        [MarshalAs(UnmanagedType.U1)] public byte minute;
        [MarshalAs(UnmanagedType.U1)] public byte window_size;
    };
 
     
   [StructLayout(LayoutKind.Sequential, Pack = 1)]
   public struct surerecover_schedule_data_payload_t
    {
        [MarshalAs(UnmanagedType.U4)] public UInt32 nonce;
        public surerecover_schedule_data_t schedule;
    };
   [StructLayout(LayoutKind.Sequential, Pack = 1)]
   public struct surerecover_schedule_payload_t
    {
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] sig;
        public surerecover_schedule_data_payload_t data;
    };
 
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct surerecover_state_t
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2)] public byte[] subsystem_version; // major minor
        [MarshalAs(UnmanagedType.U4)] public UInt32 nonce;
        [MarshalAs(UnmanagedType.U4)] public surerecover_os_flags os_flags;
        [MarshalAs(UnmanagedType.U4)] public surerecover_re_flags re_flags;
        public surerecover_schedule_data_t schedule;
        [MarshalAs(UnmanagedType.U4)] public UInt32 flags;
    };
 
 
    public static class DfmNativeSureRecover
    {
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_get_osr_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_surerecover_state32([In,Out] ref surerecover_state_t data, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_get_osr_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_surerecover_state64([In,Out] ref surerecover_state_t data, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_osr_deprovision_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_deprovision_opaque32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_osr_deprovision_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_deprovision_opaque64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_osr_os_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_osr_provisioning32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_osr_os_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_osr_provisioning64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_osr_re_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_re_provisioning32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_osr_re_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_re_provisioning64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_osr_schedule_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_schedule32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_osr_schedule_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_schedule64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_get_osr_provisioning_opaque", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_surerecover_provisioning_opaque32([In] UInt32 nonce, [In] UInt16 version, [In] byte[] ok, [In] UInt32 ok_size, [In] string username, [In] string password, [In] string url, [In,Out] ref opaque4096_t data, [In,Out] ref int data_len, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_get_osr_provisioning_opaque", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_surerecover_provisioning_opaque64([In] UInt32 nonce, [In] UInt16 version, [In] byte[] ok, [In] UInt32 ok_size, [In] string username, [In] string password, [In] string url, [In,Out] ref opaque4096_t data, [In,Out] ref int data_len, [In,Out] ref int extended_result);
  
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_osr_configuration_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_configuration32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_osr_configuration_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_configuration64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_osr_trigger_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_trigger32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_osr_trigger_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surerecover_trigger64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_osr_raise_service_event_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int raise_surerecover_service_event_opaque32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_osr_raise_service_event_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int raise_surerecover_service_event_opaque64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
         
    }
 
    public enum sr_activation_state_t : uint
    {
        Deactivated = 0,
        Activated = 1,
        PermanentlyDisabled = 2,
        Suspended = 3,
        ActivatedNoManifest = 4,
        SecurePlatformNotProvisioned = 5,
        ActivationInProgress = 6,
        RecoveryMode = 7
    }
 
    [Flags]
    public enum sr_config_t : uint
    {
        None = 0,
        HibernateOnHeartbearTimeout = 1
    }
 
    [Flags]
    public enum sr_capabilities_t : uint
    {
        None = 0,
        ManifestEncryptionSupported = 1
    }
 
 
    // HP SureRun
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct surerun_state_t
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2)] public byte[] subsystem_version;
        [MarshalAs(UnmanagedType.U4)] public sr_activation_state_t activation_state;
        [MarshalAs(UnmanagedType.U4)] public UInt32 flags;
        [MarshalAs(UnmanagedType.U4)] public sr_capabilities_t capabilities;
        [MarshalAs(UnmanagedType.U4)] public UInt32 max_manifest_size;
        [MarshalAs(UnmanagedType.U4)] public UInt32 command_counter;
        [MarshalAs(UnmanagedType.U4)] public sr_config_t config_flags;
        [MarshalAs(UnmanagedType.BStr)] public string manifest;
        [MarshalAs(UnmanagedType.U4)] public UInt32 manifest_size;
        [MarshalAs(UnmanagedType.U4)] public UInt32 manifest_was_retrieved;
    };
 
    public struct surerun_manifestinfo_t {
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 256)] public byte[] sig;
        public surerun_manifestinfo_payload_t data;
    };
     
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct surerun_manifestinfo_payload_t
    {
        [MarshalAs(UnmanagedType.U4)] public uint counter;
        [MarshalAs(UnmanagedType.U2)] public ushort total_size;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 32)] public byte[] hash;
    }
     
    public static class DfmNativeSureRun
    {
        [DllImport("dfmbios32.dll", EntryPoint = "sp_get_sr_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_surerun_state32([In,Out] ref surerun_state_t data, [In,Out] ref int extended_result, bool include_manifest);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_get_sr_state", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int get_surerun_state64([In,Out] ref surerun_state_t data, [In,Out] ref int extended_result, bool include_manifest);
 
        [DllImport("dfmbios32.dll", EntryPoint = "sp_set_sr_manifest_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surererun_manifest32([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
        [DllImport("dfmbios64.dll", EntryPoint = "sp_set_sr_manifest_opaque", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern int set_surererun_manifest64([In] byte[] data, [In] int data_size, [In,Out] ref int extended_result);
 
 
         
        public static byte[] Z1Compress(byte[] input)
        {
            using (MemoryStream outputStream = new MemoryStream())
            {
                using (DeflateStream deflateStream = new DeflateStream(outputStream, CompressionLevel.Optimal, true))
                {
                    deflateStream.Write(input, 0, input.Length);
                }
                var result = new byte[outputStream.Length + 4];
                result[2] = 1;
                Array.Copy(outputStream.ToArray(), 0, result, 4, outputStream.Length);
                return result;
            }
        }
 
        public static byte[] Z1Decompress(byte[] input)
        {
            using (MemoryStream outputStream = new MemoryStream())
            {
                if (input[0]!=0 || input[1] != 0 || input[3] !=0 || input[2] != 1)
                    throw new InvalidDataException("Unknown compression");
                using (MemoryStream inputStream = new MemoryStream(input))
                {
                    inputStream.Seek(4, SeekOrigin.Begin);
                    using (DeflateStream inflateStream = new DeflateStream(inputStream, CompressionMode.Decompress, true))
                    {
                        inflateStream.CopyTo(outputStream);
                    }
                    var result = new byte[outputStream.Length - 4];
                    Array.Copy(outputStream.ToArray(), 0, result, 0, result.Length);
                    return result;
                }
            }
        }
 
    };
 
 
    public class SureAdminSettings
    {
        public List<SureAdminSetting> settings = new List<SureAdminSetting>();
    }
 
    public struct SureAdminSetting
    {
        public string Name;
        public string Value;
        public string Auth;
    }
 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct SureAdminSignatureBlockHeader
    {
        public byte Version;
        public UInt16 NameLength;
        public UInt16 ValueLength;
        public byte OneTimeUse;
        public UInt32 Nonce;
        public byte Reserved;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 16)]
        public byte[] Target;
 
    }
 
'@




# SIG # Begin signature block
# MIIcNwYJKoZIhvcNAQcCoIIcKDCCHCQCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCzSC4SZ+F40lo1
# ZUmbVwfSoqtjSScq2iRZlpweCINoQqCCCo0wggU2MIIEHqADAgECAhAM1s71mz4i
# 3j/UnuaI4vzeMA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xNTAzBgNV
# BAMTLERpZ2lDZXJ0IFNIQTIgSGlnaCBBc3N1cmFuY2UgQ29kZSBTaWduaW5nIENB
# MB4XDTE5MDQyMjAwMDAwMFoXDTIwMDQyOTEyMDAwMFowdTELMAkGA1UEBhMCVVMx
# EzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEQMA4GA1UE
# ChMHSFAgSW5jLjEZMBcGA1UECxMQSFAgQ3liZXJzZWN1cml0eTEQMA4GA1UEAxMH
# SFAgSW5jLjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANEwuTFpw7fQ
# 3Ds5fvexal46Gg9TNMvdiJu7qMqDZnDJNl7ECdEPyLxsioGS7/yomOS9RXdXMJOm
# tyV4/wIPbBaGC8E2tbLTbQQ4IJbgvC+Vc46vbo+sI8YTG6qBICOovFw9VhUNXXEy
# SwHMoBNk8JS8R1slPpJKmNGB10HSatMGaHja0Lbqos0QuEx/tx2OXe+mzepIo66T
# dtSv2MfPy2tcVcXIdiJGn7f4otxoj6T9X7hVIl78r5Y2XWHYtDK8KaV1E/qkiNXK
# 1Xw5S53zv2VsZl6i1LZwt3d1Q9pUmm1AZe2YdhSGvwMP2LYBJGXIBbyLYnxS4HKB
# R7MYZyz7H2kCAwEAAaOCAb8wggG7MB8GA1UdIwQYMBaAFGedDyAJDMyKOuWCRnJi
# /PHMkOVAMB0GA1UdDgQWBBSnSAWgK15kcBLxsg4XNsT7ncH29zAOBgNVHQ8BAf8E
# BAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwbQYDVR0fBGYwZDAwoC6gLIYqaHR0
# cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItaGEtY3MtZzEuY3JsMDCgLqAshipo
# dHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1oYS1jcy1nMS5jcmwwTAYDVR0g
# BEUwQzA3BglghkgBhv1sAwswKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGln
# aWNlcnQuY29tL0NQUzAIBgZngQwBBAEwgYgGCCsGAQUFBwEBBHwwejAkBggrBgEF
# BQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFIGCCsGAQUFBzAChkZodHRw
# Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRTSEEySGlnaEFzc3VyYW5j
# ZUNvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQAD
# ggEBAJQblkFw+UYKYSY2M/CIEpJxZDnf+cDhodKAy+goI3XfExRHhyLu3Gc2ibFB
# Y4wyz/sJSfHehtNPYckXxR9k/FB/GfYtEACug9xXxJ+iLxWUNQ4KPt3bXY/kmDxW
# D1QXJFLbW5Dop3w/K0DL3fxnjOfYCcxsYodbeEiCJprCdNi3zd6x/J8Y35GDbLA5
# p7RfIAzKrmBLPHFGDWr/jWTfwPfUNz6jYJ51m0Ba9j81kzpxNUD0yBIZXBkVvSkx
# A09KxzMSSvxvV9DSqSezQBVgWnl9TbElouYUQwk64i0GzL4lTsphK4rQJJ2uuKtH
# wN4E0ibpm0uIqbLhgk+3ic8fHTIwggVPMIIEN6ADAgECAhALfhCQPDhJD/ovZ5qH
# oae5MA0GCSqGSIb3DQEBCwUAMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdp
# Q2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNVBAMTIkRp
# Z2lDZXJ0IEhpZ2ggQXNzdXJhbmNlIEVWIFJvb3QgQ0EwHhcNMTMxMDIyMTIwMDAw
# WhcNMjgxMDIyMTIwMDAwWjB2MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNl
# cnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTUwMwYDVQQDEyxEaWdp
# Q2VydCBTSEEyIEhpZ2ggQXNzdXJhbmNlIENvZGUgU2lnbmluZyBDQTCCASIwDQYJ
# KoZIhvcNAQEBBQADggEPADCCAQoCggEBALRKXn0HD0HexPV2Fja9cf/PP09zS5zR
# Df5Ky1dYXoUW3QIVVJnwjzwvTQJ4EGjI2DVLP8H3Z86YHK4zuS0dpApUk8SFot81
# sfXxPKezNPtdSMlGyWJEvEiZ6yhJU8M9j8AO3jWY6WJR3z1rQGHuBEHaz6dcVpbR
# +Uy3RISHmGnlgrkT5lW/yJJwkgoxb3+LMqvPa1qfYsQ+7r7tWaRTfwvxUoiKewpn
# JMuQzezSTTRMsOG1n5zG9m8szebKU3QBn2c13jhJLc7tOUSCGXlOGrK1+7t48Elm
# p8/6XJZ1kosactn/UJJTzD7CQzIJGoYTaTz7gTIzMmR1cygmHQgwOwcCAwEAAaOC
# AeEwggHdMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMBMGA1Ud
# JQQMMAoGCCsGAQUFBwMDMH8GCCsGAQUFBwEBBHMwcTAkBggrBgEFBQcwAYYYaHR0
# cDovL29jc3AuZGlnaWNlcnQuY29tMEkGCCsGAQUFBzAChj1odHRwOi8vY2FjZXJ0
# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRIaWdoQXNzdXJhbmNlRVZSb290Q0EuY3J0
# MIGPBgNVHR8EgYcwgYQwQKA+oDyGOmh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9E
# aWdpQ2VydEhpZ2hBc3N1cmFuY2VFVlJvb3RDQS5jcmwwQKA+oDyGOmh0dHA6Ly9j
# cmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEhpZ2hBc3N1cmFuY2VFVlJvb3RDQS5j
# cmwwTwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBz
# Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFGed
# DyAJDMyKOuWCRnJi/PHMkOVAMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSYJhoIAu9j
# ZCvDMA0GCSqGSIb3DQEBCwUAA4IBAQBqDv9+E3wGpUvALoz5U2QJ4rpYkTBQ7Myf
# 4dOoL0hGNhgp0HgoX5hWQA8eur2xO4dc3FvYIA3tGhZN1REkIUvxJ2mQE+sRoQHa
# /bVOeVl1vTgqasP2jkEriqKL1yxRUdmcoMjjTrpsqEfSTtFoH4wCVzuzKWqOaiAq
# ufIAYmS6yOkA+cyk1LqaNdivLGVsFnxYId5KMND66yRdBsmdFretSkXTJeIM8ECq
# XE2sfs0Ggrl2RmkI2DK2gv7jqVg0QxuOZ2eXP2gxFjY4lT6H98fDr516dxnZ3pO1
# /W4r/JT5PbdMEjUsML7ojZ4FcJpIE/SM1ucerDjnqPOtDLd67GftMYIRADCCEPwC
# AQEwgYowdjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcG
# A1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTE1MDMGA1UEAxMsRGlnaUNlcnQgU0hBMiBI
# aWdoIEFzc3VyYW5jZSBDb2RlIFNpZ25pbmcgQ0ECEAzWzvWbPiLeP9Se5oji/N4w
# DQYJYIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMx
# DAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkq
# hkiG9w0BCQQxIgQg/pA3yyCWF2kiWh5hyURvxBBiVgfDa2ayTBCfjFPmg9swDQYJ
# KoZIhvcNAQEBBQAEggEAuKrr+n804unWHfWll04HU0SK0fRhhpTxJXmebfW/luS7
# cI9LJqJ5CArBSJasDppxXHKtLnBsGOxZ/GycCgWT1spF1bZbxQyzZUDzrueacwJb
# fDPnH9s2JtcwFCUZD6s1dq+EAzSFIP0fN2WTkwOEWFYulhnJpg/VVIoUrJJzayJ2
# ZK+6c02+siaeINoRzGjfo/7LzFOg7URbzVjMnO/ahLoPMPffHXso1zt0W7zRzHlP
# 4CGhkW4L/gMn5ByCneyileO9W/7tCcqESZcFfoZJa8GLMN1BOlnzZMQQAp+OYJVg
# A3rsXLeQAVauAekefs2MVWVoTYWHDuu2Um3oIBLlnqGCDsgwgg7EBgorBgEEAYI3
# AwMBMYIOtDCCDrAGCSqGSIb3DQEHAqCCDqEwgg6dAgEDMQ8wDQYJYIZIAWUDBAIB
# BQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG/WwHATAxMA0GCWCGSAFl
# AwQCAQUABCAa7eyp1oWUME6yfHCQFO0jCTmlwnLwzo53fIWSTtC/cQIQVR1sbPbK
# r7pDGQxChNuuMxgPMjAyMDAyMTQyMjU1NTNaoIILuzCCBoIwggVqoAMCAQICEATN
# P4VornbGG7D+cWDMp20wDQYJKoZIhvcNAQELBQAwcjELMAkGA1UEBhMCVVMxFTAT
# BgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEx
# MC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIFRpbWVzdGFtcGluZyBD
# QTAeFw0xOTEwMDEwMDAwMDBaFw0zMDEwMTcwMDAwMDBaMEwxCzAJBgNVBAYTAlVT
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEkMCIGA1UEAxMbVElNRVNUQU1QLVNI
# QTI1Ni0yMDE5LTEwLTE1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
# 6WQ1nPqpmGVkG+QX3LgpNsxnCViFTTDgyf/lOzwRKFCvBzHiXQkYwvaJjGkIBCPg
# dy2dFeW46KFqjv/UrtJ6Fu/4QbUdOXXBzy+nrEV+lG2sAwGZPGI+fnr9RZcxtPq3
# 2UI+p1Wb31pPWAKoMmkiE76Lgi3GmKtrm7TJ8mURDHQNsvAIlnTE6LJIoqEUpfj6
# 4YlwRDuN7/uk9MO5vRQs6wwoJyWAqxBLFhJgC2kijE7NxtWyZVkh4HwsEo1wDo+K
# yuDT17M5d1DQQiwues6cZ3o4d1RA/0+VBCDU68jOhxQI/h2A3dDnK3jqvx9wxu5C
# FlM2RZtTGUlinXoCm5UUowIDAQABo4IDODCCAzQwDgYDVR0PAQH/BAQDAgeAMAwG
# A1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwggG/BgNVHSAEggG2
# MIIBsjCCAaEGCWCGSAGG/WwHATCCAZIwKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3
# LmRpZ2ljZXJ0LmNvbS9DUFMwggFkBggrBgEFBQcCAjCCAVYeggFSAEEAbgB5ACAA
# dQBzAGUAIABvAGYAIAB0AGgAaQBzACAAQwBlAHIAdABpAGYAaQBjAGEAdABlACAA
# YwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQBjAGMAZQBwAHQAYQBuAGMAZQAgAG8A
# ZgAgAHQAaABlACAARABpAGcAaQBDAGUAcgB0ACAAQwBQAC8AQwBQAFMAIABhAG4A
# ZAAgAHQAaABlACAAUgBlAGwAeQBpAG4AZwAgAFAAYQByAHQAeQAgAEEAZwByAGUA
# ZQBtAGUAbgB0ACAAdwBoAGkAYwBoACAAbABpAG0AaQB0ACAAbABpAGEAYgBpAGwA
# aQB0AHkAIABhAG4AZAAgAGEAcgBlACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQA
# IABoAGUAcgBlAGkAbgAgAGIAeQAgAHIAZQBmAGUAcgBlAG4AYwBlAC4wCwYJYIZI
# AYb9bAMVMB8GA1UdIwQYMBaAFPS24SAd/imu0uRhpbKiJbLIFzVuMB0GA1UdDgQW
# BBRWUw/BxgenTdfYbldygFBM5OyewTBxBgNVHR8EajBoMDKgMKAuhixodHRwOi8v
# Y3JsMy5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLXRzLmNybDAyoDCgLoYsaHR0
# cDovL2NybDQuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC10cy5jcmwwgYUGCCsG
# AQUFBwEBBHkwdzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29t
# ME8GCCsGAQUFBzAChkNodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNl
# cnRTSEEyQXNzdXJlZElEVGltZXN0YW1waW5nQ0EuY3J0MA0GCSqGSIb3DQEBCwUA
# A4IBAQAug6FEBUoE47kyUvrZgfAau/gJjSO5PdiSoeZGHEovbno8Y243F6Mav1gj
# skOclINOOQmwLOjH4eLM7ct5a87eIwFH7ZVUgeCAexKxrwKGqTpzav74n8GN0SGM
# 5CmCw4oLYAACnR9HxJ+0CmhTf1oQpvgi5vhTkjFf2IKDLW0TQq6DwRBOpCT0R5ze
# DyJyd1x/T+k5mCtXkkTX726T2UPHBDNjUTdWnkcEEcOjWFQh2OKOVtdJP1f8Cp8j
# Xnv0lI3dnRq733oqptJFplUMj/ZMivKWz4lG3DGykZCjXzMwYFX1/GswrKHt5EdO
# M55naii1TcLtW5eC+MupCGxTCbT3MIIFMTCCBBmgAwIBAgIQCqEl1tYyG35B5AXa
# NpfCFTANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGln
# aUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtE
# aWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMTYwMTA3MTIwMDAwWhcNMzEw
# MTA3MTIwMDAwWjByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j
# MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBT
# SEEyIEFzc3VyZWQgSUQgVGltZXN0YW1waW5nIENBMIIBIjANBgkqhkiG9w0BAQEF
# AAOCAQ8AMIIBCgKCAQEAvdAy7kvNj3/dqbqCmcU5VChXtiNKxA4HRTNREH3Q+X1N
# aH7ntqD0jbOI5Je/YyGQmL8TvFfTw+F+CNZqFAA49y4eO+7MpvYyWf5fZT/gm+vj
# RkcGGlV+Cyd+wKL1oODeIj8O/36V+/OjuiI+GKwR5PCZA207hXwJ0+5dyJoLVOOo
# CXFr4M8iEA91z3FyTgqt30A6XLdR4aF5FMZNJCMwXbzsPGBqrC8HzP3w6kfZiFBe
# /WZuVmEnKYmEUeaC50ZQ/ZQqLKfkdT66mA+Ef58xFNat1fJky3seBdCEGXIX8RcG
# 7z3N1k3vBkL9olMqT4UdxB08r8/arBD13ays6Vb/kwIDAQABo4IBzjCCAcowHQYD
# VR0OBBYEFPS24SAd/imu0uRhpbKiJbLIFzVuMB8GA1UdIwQYMBaAFEXroq/0ksuC
# MS1Ri6enIZ3zbcgPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGG
# MBMGA1UdJQQMMAoGCCsGAQUFBwMIMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcw
# AYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8v
# Y2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0
# MIGBBgNVHR8EejB4MDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGln
# aUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsMy5kaWdp
# Y2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMFAGA1UdIARJMEcw
# OAYKYIZIAYb9bAACBDAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2Vy
# dC5jb20vQ1BTMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAQEAcZUS6VGH
# VmnN793afKpjerN4zwY3QITvS4S/ys8DAv3Fp8MOIEIsr3fzKx8MIVoqtwU0HWqu
# mfgnoma/Capg33akOpMP+LLR2HwZYuhegiUexLoceywh4tZbLBQ1QwRostt1AuBy
# x5jWPGTlH0gQGF+JOGFNYkYkh2OMkVIsrymJ5Xgf1gsUpYDXEkdws3XVk4WTfraS
# Z/tTYYmo9WuWwPRYaQ18yAGxuSh1t5ljhSKMYcp5lH5Z/IwP42+1ASa2bKXuh1Eh
# 5Fhgm7oMLSttosR+u8QlK0cCCHxJrhO24XxCQijGGFbPQTS2Zl22dHv1VjMiLyI2
# skuiSpXY9aaOUjGCAk0wggJJAgEBMIGGMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV
# BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0ECEATN
# P4VornbGG7D+cWDMp20wDQYJYIZIAWUDBAIBBQCggZgwGgYJKoZIhvcNAQkDMQ0G
# CyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMDAyMTQyMjU1NTNaMCsGCyqG
# SIb3DQEJEAIMMRwwGjAYMBYEFAMlvVBe2pYwLcIvT6AeTCi+KDTFMC8GCSqGSIb3
# DQEJBDEiBCA90GjpYx+HrkP3CgaIHNy6Zizc2+ueGo3SWasuDey8LTANBgkqhkiG
# 9w0BAQEFAASCAQB0X4Cvb0eTEXzGW4C8irRT0v5y8LHRIxfoLBT59oRwBrUxGhDb
# uiZG9a+iLfl6W6XAW3lZGZFRYiRuW9qbbFokimSfA7DDLuhhb6mSh1TCqODUUtTs
# Bz7+3lindnm+CjNvZ/LwN0PXOglDGYXIePYdEbWWKP5/k1cVZpRbxHwfJzCeP/ct
# PCd3U3rCIlHwyVOAjm2XqMfNWbhPsa/wQqcoNAuwK1Uzvc+JbKyVCSBXytFeF0K/
# RaHPRn3EhpuUCxK5wBPeUAdkmcUWKhftyQoP9aLamU6K8vzkc88/FWTEgU8L0rQt
# ZI5FzKwN7mIUNUErJfgYBZ+U32z6uWHpqTp3
# SIG # End signature block