diff --git a/Common/Dx11-Shader/TV_shader.cpp b/Common/Dx11-Shader/TV_shader.cpp new file mode 100644 index 00000000..c6146b2f --- /dev/null +++ b/Common/Dx11-Shader/TV_shader.cpp @@ -0,0 +1,476 @@ +// TV_shader.cpp +#include "TV_shader.h" + +const int TVShader_VS_size = 3100; +const BYTE TVShader_VS[3100] = {0x44, 0x58, 0x42, 0x43, 0xc4, 0xc2, 0xf2, 0x52, 0x48, 0xf3, 0xa1, 0x52, 0x1d, 0x82, 0x8d, 0xd7, +0xa1, 0xfc, 0xdf, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, +0x3c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, +0xf0, 0x01, 0x00, 0x00, 0xc8, 0x06, 0x00, 0x00, 0xe4, 0x06, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, +0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, +0x5c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, +0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, +0x4f, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, +0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, 0xd0, 0x00, 0x00, 0x00, +0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, +0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, +0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, +0x52, 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x56, 0x53, 0x4d, 0x61, +0x69, 0x6e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, +0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, +0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x53, 0x54, 0x41, 0x54, 0xd0, 0x04, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x34, 0x01, 0x00, 0x00, +0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb8, 0x04, 0x00, 0x00, +0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, +0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, +0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, +0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, +0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, +0xe4, 0x48, 0x0e, 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, +0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, +0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, +0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, +0x20, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, +0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, +0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x30, 0x23, 0x00, 0x25, 0x00, 0x8a, 0x19, +0x80, 0x39, 0x02, 0x30, 0x98, 0x23, 0x40, 0x8a, 0x31, 0x44, 0x54, 0x44, 0x56, 0x0c, 0x20, 0xa2, +0x1a, 0xc2, 0x81, 0x80, 0x44, 0x20, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, +0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, +0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, +0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, +0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, +0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, +0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, +0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, +0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, +0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, +0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, +0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x0c, 0x00, 0x00, 0x00, +0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xa2, +0x12, 0x18, 0x01, 0x28, 0x86, 0x32, 0x28, 0x8f, 0xd2, 0xa0, 0x2a, 0x89, 0x11, 0x80, 0x42, 0x28, +0x82, 0x32, 0xa0, 0x1d, 0x0b, 0x31, 0x8c, 0x40, 0x20, 0x10, 0x08, 0x0c, 0x00, 0x00, 0x00, 0x00, +0x79, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, +0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, +0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, +0x4c, 0x10, 0x88, 0x61, 0x82, 0x40, 0x10, 0x1b, 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x05, 0xbb, +0xb9, 0x09, 0x02, 0x51, 0x6c, 0x18, 0x0e, 0x84, 0x98, 0x20, 0x08, 0xc0, 0x06, 0x60, 0xc3, 0x40, +0x2c, 0xcb, 0x86, 0x80, 0xd9, 0x30, 0x0c, 0x4a, 0x33, 0x41, 0x58, 0x9c, 0x0d, 0xc1, 0x43, 0xc3, +0x6a, 0xaa, 0x29, 0x2c, 0xcd, 0x8d, 0x08, 0xd4, 0xd3, 0x54, 0x12, 0x55, 0xd2, 0x93, 0xd3, 0x04, +0xa1, 0x48, 0x26, 0x08, 0x85, 0xb2, 0x21, 0x20, 0x26, 0x08, 0xc5, 0x32, 0x41, 0x20, 0x8c, 0x09, +0x02, 0x71, 0x6c, 0x10, 0x2e, 0x6c, 0xc3, 0x42, 0x48, 0x13, 0x55, 0x51, 0x83, 0x45, 0x50, 0x19, +0x11, 0xaa, 0x22, 0xac, 0xa1, 0xa7, 0x27, 0x29, 0xa2, 0x09, 0x42, 0xc1, 0x6c, 0x10, 0xae, 0x6b, +0xc3, 0x32, 0x6c, 0x13, 0x55, 0x51, 0x03, 0x37, 0x50, 0xdd, 0x06, 0x41, 0xf3, 0xb8, 0x4c, 0x59, +0x7d, 0x41, 0xbd, 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x4d, 0x10, 0x8a, 0x66, 0xc3, 0x42, 0x80, +0xc1, 0x14, 0x06, 0x95, 0x35, 0x58, 0x04, 0x95, 0x6d, 0x58, 0x86, 0x6d, 0xa2, 0x2a, 0x6e, 0xe0, +0x06, 0xaa, 0xdb, 0x20, 0x88, 0xc1, 0x18, 0x6c, 0x18, 0x3e, 0x32, 0x00, 0x36, 0x14, 0x4a, 0x54, +0x06, 0x00, 0xc0, 0x22, 0xcd, 0x6d, 0x8e, 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x34, 0xe6, 0xd2, 0xce, +0xbe, 0xd8, 0xc8, 0x68, 0xcc, 0xa5, 0x9d, 0x7d, 0xcd, 0xd1, 0x6d, 0x30, 0xce, 0x00, 0x0d, 0xd2, +0x00, 0x51, 0x03, 0xa4, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, +0x20, 0xa8, 0x42, 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, +0x90, 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8a, 0x3a, 0x64, 0x78, 0x2e, +0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x02, 0xa4, 0x12, 0x19, +0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, +0xdc, 0x94, 0xa0, 0xa9, 0x43, 0x86, 0xe7, 0x62, 0x97, 0x56, 0x76, 0x97, 0x44, 0x36, 0x45, 0x17, +0x46, 0x57, 0x36, 0x25, 0x78, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, +0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0xca, 0xa0, 0x0b, 0x19, 0x9e, 0xcb, 0xd8, 0x5b, 0x9d, 0x1b, +0x5d, 0x99, 0xdc, 0xdc, 0x94, 0x40, 0x0d, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, +0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, +0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, +0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, +0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, +0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, +0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, +0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, +0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, +0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, +0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, +0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, +0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, +0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, +0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, +0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, +0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, +0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, +0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, +0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, +0x71, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x60, 0xbc, 0xac, 0x09, 0x20, 0x8d, 0x05, +0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0x9b, +0x40, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0xd2, 0xe4, 0x44, 0x04, 0x4a, 0x4d, 0x0f, 0x35, 0xf9, 0xc5, +0x6d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xbb, 0xc1, 0x02, 0x5d, 0x6d, 0x5c, 0x1a, 0xd9, 0x80, 0x51, 0xe1, 0xc6, +0x68, 0x94, 0x65, 0x78, 0x44, 0x58, 0x49, 0x4c, 0x30, 0x05, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, +0x4c, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x18, 0x05, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x43, 0x01, 0x00, 0x00, +0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, +0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, +0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, +0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, +0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, +0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, +0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, +0xff, 0xff, 0x03, 0x20, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +0x13, 0x82, 0x60, 0x42, 0x20, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, +0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, +0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x30, 0x23, 0x00, +0x25, 0x00, 0x8a, 0x19, 0x80, 0x39, 0x02, 0x30, 0x98, 0x23, 0x40, 0x8a, 0x31, 0x44, 0x54, 0x44, +0x56, 0x0c, 0x20, 0xa2, 0x1a, 0xc2, 0x81, 0x80, 0x44, 0x20, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, +0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, +0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, +0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, +0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, +0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, +0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, +0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, +0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, +0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, +0x0c, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, +0xc6, 0x04, 0x43, 0xa2, 0x12, 0x18, 0x01, 0x28, 0x88, 0x62, 0x28, 0x83, 0xf2, 0xa0, 0x2a, 0x89, +0x11, 0x80, 0x42, 0x28, 0x82, 0x32, 0xa0, 0x1d, 0x0b, 0x31, 0x8c, 0x40, 0x20, 0x10, 0x08, 0x0c, +0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, +0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, +0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, +0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x88, 0x61, 0x82, 0x40, 0x10, 0x1b, 0x84, 0x81, 0x98, 0x20, +0x10, 0xc5, 0x06, 0x61, 0x30, 0x28, 0xd8, 0xcd, 0x4d, 0x10, 0x08, 0x63, 0xc3, 0x80, 0x24, 0xc4, +0x04, 0x61, 0x71, 0x36, 0x04, 0xcb, 0x04, 0x41, 0x00, 0x68, 0x58, 0x4d, 0x35, 0x85, 0xa5, 0xb9, +0x11, 0x81, 0x7a, 0x9a, 0x4a, 0xa2, 0x4a, 0x7a, 0x72, 0x9a, 0x20, 0x14, 0xc9, 0x04, 0xa1, 0x50, +0x36, 0x04, 0xc4, 0x04, 0xa1, 0x58, 0x26, 0x08, 0xc4, 0x31, 0x41, 0x20, 0x90, 0x0d, 0x02, 0x55, +0x6d, 0x58, 0x88, 0x07, 0x8a, 0xa4, 0x68, 0x98, 0x88, 0xc8, 0x22, 0x42, 0x55, 0x84, 0x35, 0xf4, +0xf4, 0x24, 0x45, 0x34, 0x41, 0x28, 0x98, 0x0d, 0x02, 0x45, 0x6d, 0x58, 0x06, 0x0c, 0x8a, 0xa4, +0x68, 0xc8, 0x86, 0x48, 0xdb, 0x20, 0x5c, 0x1b, 0x97, 0x29, 0xab, 0x2f, 0xa8, 0xb7, 0xb9, 0x34, +0xba, 0xb4, 0x37, 0xb7, 0x09, 0x42, 0xd1, 0x6c, 0x58, 0x88, 0x0e, 0xf2, 0xa4, 0x69, 0x98, 0x88, +0xc8, 0xda, 0xb0, 0x0c, 0x18, 0x14, 0x49, 0xd9, 0x90, 0x0d, 0x91, 0xb6, 0x41, 0xf8, 0xc0, 0x60, +0xc3, 0xc0, 0x85, 0x01, 0xb0, 0xa1, 0x68, 0x1c, 0x31, 0x00, 0x80, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, +0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, 0xdc, +0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, +0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, +0x95, 0xb1, 0x4d, 0x09, 0x92, 0x3a, 0x64, 0x78, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x53, +0x74, 0x61, 0x74, 0x65, 0x53, 0x82, 0xa5, 0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, +0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, +0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, +0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, +0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, +0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, +0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, +0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, +0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, +0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, +0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, +0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, +0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, +0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, +0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, +0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, +0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, +0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, +0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, +0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, +0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, +0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x60, 0xbc, 0xac, +0x09, 0x20, 0x8d, 0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, 0x35, +0xf9, 0xc5, 0x6d, 0x9b, 0x40, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0xd2, 0xe4, 0x44, 0x04, 0x4a, 0x4d, +0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0x03, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, +0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x44, 0x85, 0x30, 0x03, +0x50, 0x0a, 0x54, 0x25, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x48, +0x04, 0xf4, 0x24, 0xc3, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x53, 0x11, 0x41, 0x02, 0x31, +0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x06, 0x65, 0x44, 0xd1, 0x52, 0x8c, 0x18, 0x24, 0x00, 0x08, +0x82, 0x81, 0x51, 0x1d, 0x92, 0x44, 0x18, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x58, 0xc8, +0x34, 0x2d, 0xc7, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x57, 0x42, 0x51, 0x0b, 0x32, 0x62, +0x90, 0x00, 0x20, 0x08, 0x06, 0xc8, 0x85, 0x54, 0xd5, 0x43, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, +0x01, 0x72, 0x21, 0x55, 0x75, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x5c, 0x48, 0x55, +0x35, 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x17, 0x52, 0x55, 0x4c, 0x30, 0x62, 0x90, +0x00, 0x20, 0x08, 0x06, 0xc8, 0x85, 0x58, 0xd5, 0x63, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, +0x72, 0x21, 0x56, 0x75, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +const int TVShader_PS_size = 4412; +const BYTE TVShader_PS[4412] = {0x44, 0x58, 0x42, 0x43, 0x3f, 0x2b, 0xee, 0x8e, 0x04, 0x44, 0xe1, 0xcb, 0xc2, 0x11, 0xfd, 0x4d, +0x32, 0x0b, 0x9e, 0x89, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x11, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, +0x3c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, +0xf4, 0x01, 0x00, 0x00, 0x58, 0x09, 0x00, 0x00, 0x74, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, +0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, +0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, +0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, +0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00, 0x00, +0x50, 0x53, 0x56, 0x30, 0xfc, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, +0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x14, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x50, 0x53, +0x4d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, +0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, +0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, +0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x5c, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, +0xd7, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x44, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00, +0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, +0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, +0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, +0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, +0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, +0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, +0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, +0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, +0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, +0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, +0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x84, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, +0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, +0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, +0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, +0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, +0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d, 0x19, 0x06, 0x62, 0xa0, 0xe7, 0xa8, 0xe1, 0xf2, 0x27, +0xec, 0x21, 0x24, 0x9f, 0xdb, 0xa8, 0x62, 0x25, 0x26, 0xbf, 0xb8, 0x6d, 0x44, 0x0c, 0xc3, 0x30, +0x14, 0x22, 0x22, 0x18, 0x82, 0xa4, 0x39, 0x82, 0xa0, 0x18, 0x0c, 0x51, 0x10, 0x04, 0x45, 0xd5, +0x40, 0xc0, 0x30, 0x02, 0x31, 0xcc, 0xd4, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, +0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, +0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, +0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x7a, 0xa0, 0x07, 0xed, 0x90, +0x0e, 0xf0, 0x30, 0x0f, 0xbf, 0x40, 0x0f, 0xf9, 0x00, 0x0f, 0xe5, 0x80, 0x02, 0x62, 0x26, 0x31, +0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, +0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, +0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, +0x00, 0x03, 0x3f, 0x40, 0x02, 0x96, 0x91, 0x76, 0x4e, 0x4a, 0x44, 0x5f, 0x04, 0x30, 0xc4, 0x46, +0x15, 0x05, 0x11, 0x21, 0x01, 0x1b, 0x88, 0xbb, 0x49, 0x9a, 0x22, 0x4a, 0x98, 0x7c, 0x16, 0x60, +0x9e, 0x85, 0x88, 0xd8, 0x09, 0x98, 0x08, 0x14, 0x10, 0xe4, 0x25, 0x02, 0x01, 0x00, 0x00, 0x00, +0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, +0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, +0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, +0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, +0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, +0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, +0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, +0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, +0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, +0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, +0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xa7, 0x02, 0x02, 0x60, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x13, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, +0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, +0x18, 0x8a, 0xa0, 0x24, 0x0a, 0xa5, 0x0c, 0xca, 0xa1, 0x34, 0x0a, 0xa1, 0x40, 0xca, 0xa3, 0x8c, +0xa8, 0x28, 0x89, 0x32, 0x28, 0x84, 0x11, 0x80, 0x22, 0x28, 0x10, 0xa2, 0x6a, 0x80, 0xb6, 0x19, +0x00, 0xe2, 0x66, 0x00, 0xa8, 0x9b, 0x01, 0xa0, 0x6f, 0x06, 0x80, 0xc0, 0xb1, 0x10, 0x83, 0x00, +0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, +0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, +0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, +0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x88, 0x63, 0x82, 0x40, 0x20, 0x1b, +0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x05, 0xb8, 0xb9, 0x09, 0x02, 0x91, 0x6c, 0x18, 0x0e, 0x84, +0x98, 0x20, 0x6c, 0x1b, 0x9d, 0xb3, 0xaf, 0x24, 0x37, 0xb8, 0x3a, 0x3a, 0xaa, 0x32, 0x3c, 0xba, +0x3a, 0xb9, 0xb2, 0x09, 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0x83, 0x40, 0x34, 0x1b, 0x12, 0x42, +0x59, 0x08, 0x62, 0x60, 0x08, 0x67, 0x43, 0xf0, 0x4c, 0x10, 0xba, 0x8e, 0x0e, 0x54, 0x99, 0x9c, +0x91, 0x5c, 0x58, 0x5b, 0x99, 0x50, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x04, 0x81, 0x60, 0x36, 0x20, +0x44, 0x24, 0x11, 0xc4, 0x30, 0x01, 0x1b, 0x02, 0x6a, 0x82, 0xf0, 0x79, 0x4c, 0xce, 0xbe, 0xa6, +0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x36, 0x20, 0x84, 0x75, 0x11, 0xc4, 0x40, 0x00, 0x1b, 0x02, +0x6c, 0x03, 0x01, 0x01, 0x55, 0x36, 0x41, 0xe0, 0x38, 0x32, 0x75, 0x5f, 0x72, 0x65, 0x73, 0x6f, +0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x04, 0xa2, 0x99, 0x20, 0x10, 0xce, 0x04, 0x81, 0xd2, +0x26, 0x08, 0xc4, 0x33, 0x41, 0x20, 0xa0, 0x0d, 0x0a, 0xc2, 0x75, 0x84, 0xd7, 0x34, 0x1f, 0x18, +0x84, 0x01, 0x8d, 0xba, 0x2f, 0xba, 0xb4, 0xb6, 0xb2, 0x09, 0x02, 0x11, 0x6d, 0x40, 0x90, 0x31, +0xe8, 0xc8, 0xc0, 0x6b, 0x9a, 0x6f, 0xc3, 0x30, 0x89, 0x41, 0x19, 0x6c, 0x18, 0x88, 0xcd, 0x0c, +0x26, 0x08, 0x02, 0xb0, 0x01, 0xd8, 0x30, 0x10, 0x69, 0x90, 0x06, 0x1b, 0x02, 0x35, 0xd8, 0x30, +0x0c, 0x68, 0xb0, 0x06, 0x13, 0x04, 0x30, 0xf8, 0x36, 0x04, 0x6d, 0x40, 0x03, 0x6a, 0xaa, 0x29, +0x2c, 0xcd, 0x8d, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, +0xa1, 0xa0, 0x26, 0x08, 0x45, 0xb5, 0x21, 0x20, 0x26, 0x08, 0x85, 0x35, 0x41, 0x28, 0xae, 0x0d, +0x0b, 0x01, 0x07, 0x71, 0x20, 0x07, 0x73, 0x40, 0x07, 0x03, 0x1d, 0x10, 0x75, 0x00, 0x10, 0xa1, +0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0xd8, 0x06, 0xa1, 0xeb, 0x36, 0x2c, +0xc3, 0x1d, 0xc4, 0x41, 0x1d, 0xcc, 0x01, 0x1e, 0x0c, 0x78, 0x30, 0xd4, 0x41, 0x1e, 0x6c, 0x10, +0xec, 0x40, 0x0f, 0x98, 0x4c, 0x59, 0x7d, 0x51, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x4d, 0x10, 0x8a, +0x6c, 0x82, 0x40, 0x48, 0x1b, 0x84, 0xce, 0x0f, 0x36, 0x2c, 0x04, 0x1f, 0xc4, 0x41, 0x1f, 0xcc, +0x41, 0x1d, 0x0c, 0x74, 0x40, 0xd4, 0xc1, 0x1f, 0x6c, 0x08, 0x40, 0x61, 0xc3, 0xb0, 0x07, 0xa1, +0x00, 0x6c, 0x28, 0xd0, 0xe0, 0x0d, 0x44, 0x41, 0x03, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xcd, +0xb1, 0x48, 0x73, 0x9b, 0xa3, 0x9b, 0x9b, 0x20, 0x10, 0x13, 0x8d, 0xb9, 0xb4, 0xb3, 0x2f, 0x36, +0x32, 0x1a, 0x73, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x44, 0xe8, 0xca, 0xf0, 0xbe, 0xdc, 0xde, 0xe4, +0xda, 0x36, 0x28, 0xa4, 0x40, 0x06, 0xa5, 0x60, 0x0a, 0xa7, 0xc0, 0xa0, 0x42, 0x18, 0xa4, 0xc2, +0x50, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, +0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, +0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, 0x45, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, +0xb2, 0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae, +0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0x90, 0x55, 0x22, 0xc3, 0x73, 0xa1, 0xcb, +0x83, 0x2b, 0x0b, 0x72, 0x73, 0x7b, 0xa3, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x22, 0x98, +0xc1, 0x1a, 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, +0x2b, 0x9b, 0x12, 0xb4, 0x41, 0x1d, 0x32, 0x3c, 0x97, 0x32, 0x37, 0x3a, 0xb9, 0x3c, 0xa8, 0xb7, +0x34, 0x37, 0xba, 0xb9, 0x29, 0x81, 0x28, 0x74, 0x21, 0xc3, 0x73, 0x19, 0x7b, 0xab, 0x73, 0xa3, +0x2b, 0x93, 0x9b, 0x9b, 0x12, 0xa4, 0x02, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, +0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, +0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, +0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, +0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, +0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, +0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, +0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, +0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, +0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, +0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, +0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, +0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, +0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, +0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, +0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, +0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, +0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, +0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, +0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, +0x71, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x06, 0x60, 0xa4, 0xac, 0x09, 0x20, 0x8d, 0x15, +0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, +0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x9b, 0x81, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x44, 0x00, 0x13, +0x11, 0x02, 0xcd, 0xb0, 0x10, 0x16, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, +0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x03, 0xd0, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x00, 0xf3, 0x2c, +0x84, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, +0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, +0xf9, 0xc5, 0x6d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0xdc, 0x30, 0x8e, 0xe9, 0x09, 0x0c, 0xa6, 0xa7, 0x08, 0x00, +0xa4, 0x3e, 0xb3, 0xff, 0x44, 0x58, 0x49, 0x4c, 0xc0, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, +0xf0, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0xa8, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xe7, 0x01, 0x00, 0x00, +0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, +0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, +0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, +0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, +0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, +0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, +0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, +0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, +0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, +0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, +0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x84, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, +0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, +0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, +0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, +0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, +0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d, 0x19, 0x06, 0x62, 0xa0, 0xe7, 0xa8, 0xe1, 0xf2, 0x27, +0xec, 0x21, 0x24, 0x9f, 0xdb, 0xa8, 0x62, 0x25, 0x26, 0xbf, 0xb8, 0x6d, 0x44, 0x0c, 0xc3, 0x30, +0x14, 0x22, 0x22, 0x18, 0x82, 0xa4, 0x39, 0x82, 0xa0, 0x18, 0x0c, 0x51, 0x10, 0x04, 0x45, 0xd5, +0x40, 0xc0, 0x30, 0x02, 0x31, 0xcc, 0xd4, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, +0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, +0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, +0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x7a, 0xa0, 0x07, 0xed, 0x90, +0x0e, 0xf0, 0x30, 0x0f, 0xbf, 0x40, 0x0f, 0xf9, 0x00, 0x0f, 0xe5, 0x80, 0x02, 0x62, 0x26, 0x31, +0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, +0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, +0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, +0x00, 0x03, 0x3f, 0x40, 0x02, 0x96, 0x91, 0x76, 0x4e, 0x4a, 0x44, 0x5f, 0x04, 0x30, 0xc4, 0x46, +0x15, 0x05, 0x11, 0x21, 0x01, 0x1b, 0x88, 0xbb, 0x49, 0x9a, 0x22, 0x4a, 0x98, 0x7c, 0x16, 0x60, +0x9e, 0x85, 0x88, 0xd8, 0x09, 0x98, 0x08, 0x14, 0x10, 0xe4, 0x25, 0x02, 0x01, 0x00, 0x00, 0x00, +0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, +0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, +0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, +0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, +0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, +0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, +0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, +0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, +0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, +0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, +0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xa7, 0x02, 0x02, 0x60, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, +0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, +0x20, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x50, 0xca, 0xa0, 0x3c, 0xa8, 0x28, 0x89, 0x32, 0x28, 0x84, +0x11, 0x80, 0x22, 0x28, 0x10, 0xda, 0x66, 0x00, 0xa8, 0x9b, 0x01, 0xa0, 0x6f, 0x06, 0x80, 0xc0, +0xb1, 0x10, 0x83, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, +0x63, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, +0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, +0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x88, 0x63, +0x82, 0x40, 0x20, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x10, 0xc9, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, +0x4d, 0x10, 0x08, 0x65, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x61, 0xb3, 0x08, 0x4c, 0x10, 0x88, 0x65, +0x82, 0x40, 0x30, 0x1b, 0x04, 0xc2, 0xd9, 0x90, 0x10, 0x0b, 0x43, 0x10, 0x43, 0x43, 0x3c, 0x1b, +0x02, 0x68, 0x82, 0xd0, 0x5d, 0x13, 0x04, 0xa2, 0xd9, 0x80, 0x10, 0x12, 0x43, 0x10, 0xc3, 0x04, +0x6c, 0x08, 0xa8, 0x09, 0xc2, 0x87, 0x6d, 0x40, 0x08, 0x8b, 0x21, 0x88, 0x81, 0x00, 0x36, 0x04, +0xd7, 0x06, 0x22, 0x02, 0x2a, 0x6c, 0x82, 0x00, 0x06, 0xd9, 0x86, 0x40, 0x9b, 0x20, 0x08, 0x00, +0x0d, 0xa8, 0xa9, 0xa6, 0xb0, 0x34, 0x37, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, +0x69, 0x6f, 0x6e, 0x13, 0x84, 0x02, 0x9a, 0x20, 0x14, 0xd1, 0x86, 0x80, 0x98, 0x20, 0x14, 0xd2, +0x04, 0xa1, 0x98, 0x36, 0x2c, 0x84, 0xf7, 0x81, 0x41, 0x18, 0x88, 0xc1, 0x20, 0x06, 0xc4, 0x18, +0x00, 0x44, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x05, 0x35, 0x41, 0x20, +0x9c, 0x0d, 0xc2, 0x19, 0x9c, 0xc1, 0x86, 0x65, 0x28, 0x83, 0x6f, 0x0c, 0xc2, 0xc0, 0x0c, 0x06, +0x33, 0x18, 0xc6, 0x00, 0x0d, 0x36, 0x08, 0x64, 0x90, 0x06, 0x4c, 0xa6, 0xac, 0xbe, 0xa8, 0xc2, +0xe4, 0xce, 0xca, 0xe8, 0x26, 0x08, 0x45, 0x35, 0x41, 0x20, 0x9e, 0x0d, 0xc2, 0x19, 0xb4, 0xc1, +0x86, 0x85, 0x58, 0x83, 0x8f, 0x0d, 0xc2, 0x60, 0x0c, 0x06, 0x31, 0x20, 0xc6, 0xc0, 0x0d, 0x36, +0x04, 0x6f, 0xb0, 0x61, 0x50, 0x03, 0x38, 0x00, 0x36, 0x14, 0x5c, 0x17, 0x07, 0x19, 0x50, 0x85, +0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, 0xc3, 0x73, +0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, +0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, +0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x41, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae, 0x6c, 0xee, +0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0x80, 0xd5, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, +0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0x68, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, +0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x71, 0x00, 0x00, 0x00, 0x00, +0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, +0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, +0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, +0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, +0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, +0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, +0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, +0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, +0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, +0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, +0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, +0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, +0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, +0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, +0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, +0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, +0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, +0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, +0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, +0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, +0x06, 0x60, 0xa4, 0xac, 0x09, 0x20, 0x8d, 0x15, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, +0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x9b, 0x81, 0x34, +0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x44, 0x00, 0x13, 0x11, 0x02, 0xcd, 0xb0, 0x10, 0x16, 0x30, 0x0d, +0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x03, 0xd0, +0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x00, 0xf3, 0x2c, 0x84, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, +0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x3c, +0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x03, 0x61, 0x20, 0x00, 0x00, +0x51, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, +0x44, 0x8d, 0x00, 0x50, 0x51, 0x02, 0x44, 0x94, 0x4a, 0x69, 0x94, 0x42, 0xc9, 0xcd, 0x00, 0x14, +0x42, 0xd9, 0x15, 0x1e, 0x0d, 0x63, 0x04, 0x7b, 0xac, 0xc6, 0x23, 0x38, 0x8c, 0x11, 0xcc, 0x39, +0x6b, 0xce, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfc, 0xcd, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, +0x82, 0x60, 0x50, 0x89, 0x41, 0x52, 0x81, 0x01, 0x18, 0x38, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, +0x50, 0x8d, 0x81, 0x82, 0x85, 0x41, 0x18, 0x3c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x50, 0x91, +0xc1, 0x62, 0x89, 0x81, 0x18, 0x40, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xa8, 0x81, 0x42, +0x06, 0x63, 0x80, 0x2d, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xac, 0xc1, 0x52, 0x06, 0x64, +0x10, 0x31, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xa8, 0x81, 0x52, 0x10, 0x42, 0x60, 0x18, +0x65, 0x50, 0x06, 0x8d, 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, +0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x52, 0x1b, 0x40, 0x88, 0x1a, 0x8c, 0x26, +0x04, 0x81, 0x21, 0x8f, 0x7c, 0x2c, 0x10, 0xe4, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f, +0x1c, 0x64, 0x81, 0x05, 0x91, 0x7c, 0x2c, 0x90, 0xe0, 0x63, 0xc1, 0x22, 0x1f, 0x13, 0x16, 0xf9, +0xd8, 0xb0, 0xc8, 0x67, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xa4, 0x3b, 0xd0, 0xa4, 0x3a, 0x18, +0x4d, 0x08, 0x00, 0x0b, 0x34, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xb3, 0x07, 0x63, +0x10, 0xd8, 0x11, 0xc8, 0xc7, 0x0e, 0x41, 0x3e, 0x76, 0x0c, 0xf2, 0x31, 0x65, 0x88, 0x8f, 0x29, +0x43, 0x7c, 0x4c, 0x19, 0xe2, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0x29, 0xa0, 0x81, +0x1f, 0xf8, 0xc1, 0x1c, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x90, 0x02, 0x1a, 0xf8, +0x81, 0x1f, 0xac, 0x81, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0x29, 0xa0, 0x81, 0x1f, +0xf8, 0x81, 0x1c, 0x04, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x90, 0x02, 0x1a, 0xf8, 0x81, +0x1f, 0xd4, 0x41, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/Common/Dx11-Shader/TV_shader.h b/Common/Dx11-Shader/TV_shader.h new file mode 100644 index 00000000..51395e7a --- /dev/null +++ b/Common/Dx11-Shader/TV_shader.h @@ -0,0 +1,16 @@ +// TV_shader.h +#pragma once +#include + +extern const int TVShader_VS_size; +extern const BYTE TVShader_VS[]; + +extern const int TVShader_PS_size; +extern const BYTE TVShader_PS[]; + +struct PerFrameBuffer +{ + DirectX::XMFLOAT4 resolution; + float time; + float padding[3]; // Align to 16 bytes +}; \ No newline at end of file diff --git a/Common/Include/crt_shader.h b/Common/Include/crt_shader.h new file mode 100644 index 00000000..c0977752 --- /dev/null +++ b/Common/Include/crt_shader.h @@ -0,0 +1,477 @@ +// crt_shader.h +#include +#pragma once + +const int CRTShader_VS_size = 3100; +const BYTE CRTShader_VS[3100] = {0x44, 0x58, 0x42, 0x43, 0xc4, 0xc2, 0xf2, 0x52, 0x48, 0xf3, 0xa1, 0x52, 0x1d, 0x82, 0x8d, 0xd7, +0xa1, 0xfc, 0xdf, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, +0x3c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, +0xf0, 0x01, 0x00, 0x00, 0xc8, 0x06, 0x00, 0x00, 0xe4, 0x06, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, +0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, +0x5c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, +0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, +0x4f, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, +0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, 0xd0, 0x00, 0x00, 0x00, +0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, +0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, +0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, +0x52, 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x56, 0x53, 0x4d, 0x61, +0x69, 0x6e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, +0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, +0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x53, 0x54, 0x41, 0x54, 0xd0, 0x04, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x34, 0x01, 0x00, 0x00, +0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb8, 0x04, 0x00, 0x00, +0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, +0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, +0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, +0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, +0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, +0xe4, 0x48, 0x0e, 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, +0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, +0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, +0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, +0x20, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, +0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, +0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x30, 0x23, 0x00, 0x25, 0x00, 0x8a, 0x19, +0x80, 0x39, 0x02, 0x30, 0x98, 0x23, 0x40, 0x8a, 0x31, 0x44, 0x54, 0x44, 0x56, 0x0c, 0x20, 0xa2, +0x1a, 0xc2, 0x81, 0x80, 0x44, 0x20, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, +0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, +0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, +0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, +0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, +0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, +0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, +0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, +0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, +0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, +0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, +0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x0c, 0x00, 0x00, 0x00, +0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xa2, +0x12, 0x18, 0x01, 0x28, 0x86, 0x32, 0x28, 0x8f, 0xd2, 0xa0, 0x2a, 0x89, 0x11, 0x80, 0x42, 0x28, +0x82, 0x32, 0xa0, 0x1d, 0x0b, 0x31, 0x8c, 0x40, 0x20, 0x10, 0x08, 0x0c, 0x00, 0x00, 0x00, 0x00, +0x79, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, +0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, +0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, +0x4c, 0x10, 0x88, 0x61, 0x82, 0x40, 0x10, 0x1b, 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x05, 0xbb, +0xb9, 0x09, 0x02, 0x51, 0x6c, 0x18, 0x0e, 0x84, 0x98, 0x20, 0x08, 0xc0, 0x06, 0x60, 0xc3, 0x40, +0x2c, 0xcb, 0x86, 0x80, 0xd9, 0x30, 0x0c, 0x4a, 0x33, 0x41, 0x58, 0x9c, 0x0d, 0xc1, 0x43, 0xc3, +0x6a, 0xaa, 0x29, 0x2c, 0xcd, 0x8d, 0x08, 0xd4, 0xd3, 0x54, 0x12, 0x55, 0xd2, 0x93, 0xd3, 0x04, +0xa1, 0x48, 0x26, 0x08, 0x85, 0xb2, 0x21, 0x20, 0x26, 0x08, 0xc5, 0x32, 0x41, 0x20, 0x8c, 0x09, +0x02, 0x71, 0x6c, 0x10, 0x2e, 0x6c, 0xc3, 0x42, 0x48, 0x13, 0x55, 0x51, 0x83, 0x45, 0x50, 0x19, +0x11, 0xaa, 0x22, 0xac, 0xa1, 0xa7, 0x27, 0x29, 0xa2, 0x09, 0x42, 0xc1, 0x6c, 0x10, 0xae, 0x6b, +0xc3, 0x32, 0x6c, 0x13, 0x55, 0x51, 0x03, 0x37, 0x50, 0xdd, 0x06, 0x41, 0xf3, 0xb8, 0x4c, 0x59, +0x7d, 0x41, 0xbd, 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x4d, 0x10, 0x8a, 0x66, 0xc3, 0x42, 0x80, +0xc1, 0x14, 0x06, 0x95, 0x35, 0x58, 0x04, 0x95, 0x6d, 0x58, 0x86, 0x6d, 0xa2, 0x2a, 0x6e, 0xe0, +0x06, 0xaa, 0xdb, 0x20, 0x88, 0xc1, 0x18, 0x6c, 0x18, 0x3e, 0x32, 0x00, 0x36, 0x14, 0x4a, 0x54, +0x06, 0x00, 0xc0, 0x22, 0xcd, 0x6d, 0x8e, 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x34, 0xe6, 0xd2, 0xce, +0xbe, 0xd8, 0xc8, 0x68, 0xcc, 0xa5, 0x9d, 0x7d, 0xcd, 0xd1, 0x6d, 0x30, 0xce, 0x00, 0x0d, 0xd2, +0x00, 0x51, 0x03, 0xa4, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, +0x20, 0xa8, 0x42, 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, +0x90, 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8a, 0x3a, 0x64, 0x78, 0x2e, +0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x02, 0xa4, 0x12, 0x19, +0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, +0xdc, 0x94, 0xa0, 0xa9, 0x43, 0x86, 0xe7, 0x62, 0x97, 0x56, 0x76, 0x97, 0x44, 0x36, 0x45, 0x17, +0x46, 0x57, 0x36, 0x25, 0x78, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, +0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0xca, 0xa0, 0x0b, 0x19, 0x9e, 0xcb, 0xd8, 0x5b, 0x9d, 0x1b, +0x5d, 0x99, 0xdc, 0xdc, 0x94, 0x40, 0x0d, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, +0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, +0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, +0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, +0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, +0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, +0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, +0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, +0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, +0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, +0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, +0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, +0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, +0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, +0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, +0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, +0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, +0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, +0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, +0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, +0x71, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x60, 0xbc, 0xac, 0x09, 0x20, 0x8d, 0x05, +0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0x9b, +0x40, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0xd2, 0xe4, 0x44, 0x04, 0x4a, 0x4d, 0x0f, 0x35, 0xf9, 0xc5, +0x6d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xbb, 0xc1, 0x02, 0x5d, 0x6d, 0x5c, 0x1a, 0xd9, 0x80, 0x51, 0xe1, 0xc6, +0x68, 0x94, 0x65, 0x78, 0x44, 0x58, 0x49, 0x4c, 0x30, 0x05, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, +0x4c, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x18, 0x05, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x43, 0x01, 0x00, 0x00, +0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, +0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, +0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, +0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, +0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, +0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, +0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, +0xff, 0xff, 0x03, 0x20, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +0x13, 0x82, 0x60, 0x42, 0x20, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, +0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, +0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x30, 0x23, 0x00, +0x25, 0x00, 0x8a, 0x19, 0x80, 0x39, 0x02, 0x30, 0x98, 0x23, 0x40, 0x8a, 0x31, 0x44, 0x54, 0x44, +0x56, 0x0c, 0x20, 0xa2, 0x1a, 0xc2, 0x81, 0x80, 0x44, 0x20, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, +0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, +0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, +0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, +0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, +0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, +0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, +0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, +0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, +0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, +0x0c, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, +0xc6, 0x04, 0x43, 0xa2, 0x12, 0x18, 0x01, 0x28, 0x88, 0x62, 0x28, 0x83, 0xf2, 0xa0, 0x2a, 0x89, +0x11, 0x80, 0x42, 0x28, 0x82, 0x32, 0xa0, 0x1d, 0x0b, 0x31, 0x8c, 0x40, 0x20, 0x10, 0x08, 0x0c, +0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, +0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, +0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, +0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x88, 0x61, 0x82, 0x40, 0x10, 0x1b, 0x84, 0x81, 0x98, 0x20, +0x10, 0xc5, 0x06, 0x61, 0x30, 0x28, 0xd8, 0xcd, 0x4d, 0x10, 0x08, 0x63, 0xc3, 0x80, 0x24, 0xc4, +0x04, 0x61, 0x71, 0x36, 0x04, 0xcb, 0x04, 0x41, 0x00, 0x68, 0x58, 0x4d, 0x35, 0x85, 0xa5, 0xb9, +0x11, 0x81, 0x7a, 0x9a, 0x4a, 0xa2, 0x4a, 0x7a, 0x72, 0x9a, 0x20, 0x14, 0xc9, 0x04, 0xa1, 0x50, +0x36, 0x04, 0xc4, 0x04, 0xa1, 0x58, 0x26, 0x08, 0xc4, 0x31, 0x41, 0x20, 0x90, 0x0d, 0x02, 0x55, +0x6d, 0x58, 0x88, 0x07, 0x8a, 0xa4, 0x68, 0x98, 0x88, 0xc8, 0x22, 0x42, 0x55, 0x84, 0x35, 0xf4, +0xf4, 0x24, 0x45, 0x34, 0x41, 0x28, 0x98, 0x0d, 0x02, 0x45, 0x6d, 0x58, 0x06, 0x0c, 0x8a, 0xa4, +0x68, 0xc8, 0x86, 0x48, 0xdb, 0x20, 0x5c, 0x1b, 0x97, 0x29, 0xab, 0x2f, 0xa8, 0xb7, 0xb9, 0x34, +0xba, 0xb4, 0x37, 0xb7, 0x09, 0x42, 0xd1, 0x6c, 0x58, 0x88, 0x0e, 0xf2, 0xa4, 0x69, 0x98, 0x88, +0xc8, 0xda, 0xb0, 0x0c, 0x18, 0x14, 0x49, 0xd9, 0x90, 0x0d, 0x91, 0xb6, 0x41, 0xf8, 0xc0, 0x60, +0xc3, 0xc0, 0x85, 0x01, 0xb0, 0xa1, 0x68, 0x1c, 0x31, 0x00, 0x80, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, +0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, 0xdc, +0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, +0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, +0x95, 0xb1, 0x4d, 0x09, 0x92, 0x3a, 0x64, 0x78, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x53, +0x74, 0x61, 0x74, 0x65, 0x53, 0x82, 0xa5, 0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, +0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, +0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, +0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, +0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, +0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, +0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, +0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, +0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, +0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, +0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, +0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, +0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, +0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, +0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, +0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, +0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, +0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, +0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, +0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, +0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, +0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x60, 0xbc, 0xac, +0x09, 0x20, 0x8d, 0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, 0x35, +0xf9, 0xc5, 0x6d, 0x9b, 0x40, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0xd2, 0xe4, 0x44, 0x04, 0x4a, 0x4d, +0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0x03, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, +0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x44, 0x85, 0x30, 0x03, +0x50, 0x0a, 0x54, 0x25, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x48, +0x04, 0xf4, 0x24, 0xc3, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x53, 0x11, 0x41, 0x02, 0x31, +0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x06, 0x65, 0x44, 0xd1, 0x52, 0x8c, 0x18, 0x24, 0x00, 0x08, +0x82, 0x81, 0x51, 0x1d, 0x92, 0x44, 0x18, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x58, 0xc8, +0x34, 0x2d, 0xc7, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x57, 0x42, 0x51, 0x0b, 0x32, 0x62, +0x90, 0x00, 0x20, 0x08, 0x06, 0xc8, 0x85, 0x54, 0xd5, 0x43, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, +0x01, 0x72, 0x21, 0x55, 0x75, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x5c, 0x48, 0x55, +0x35, 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x17, 0x52, 0x55, 0x4c, 0x30, 0x62, 0x90, +0x00, 0x20, 0x08, 0x06, 0xc8, 0x85, 0x58, 0xd5, 0x63, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, +0x72, 0x21, 0x56, 0x75, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +const int CRTShader_PS_size = 4412; +const BYTE CRTShader_PS[4412] = {0x44, 0x58, 0x42, 0x43, 0x3f, 0x2b, 0xee, 0x8e, 0x04, 0x44, 0xe1, 0xcb, 0xc2, 0x11, 0xfd, 0x4d, +0x32, 0x0b, 0x9e, 0x89, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x11, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, +0x3c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, +0xf4, 0x01, 0x00, 0x00, 0x58, 0x09, 0x00, 0x00, 0x74, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, +0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, +0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, +0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, +0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00, 0x00, +0x50, 0x53, 0x56, 0x30, 0xfc, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, +0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x14, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x50, 0x53, +0x4d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, +0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, +0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, +0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x5c, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, +0xd7, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x44, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00, +0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, +0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, +0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, +0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, +0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, +0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, +0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, +0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, +0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, +0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, +0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x84, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, +0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, +0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, +0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, +0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, +0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d, 0x19, 0x06, 0x62, 0xa0, 0xe7, 0xa8, 0xe1, 0xf2, 0x27, +0xec, 0x21, 0x24, 0x9f, 0xdb, 0xa8, 0x62, 0x25, 0x26, 0xbf, 0xb8, 0x6d, 0x44, 0x0c, 0xc3, 0x30, +0x14, 0x22, 0x22, 0x18, 0x82, 0xa4, 0x39, 0x82, 0xa0, 0x18, 0x0c, 0x51, 0x10, 0x04, 0x45, 0xd5, +0x40, 0xc0, 0x30, 0x02, 0x31, 0xcc, 0xd4, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, +0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, +0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, +0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x7a, 0xa0, 0x07, 0xed, 0x90, +0x0e, 0xf0, 0x30, 0x0f, 0xbf, 0x40, 0x0f, 0xf9, 0x00, 0x0f, 0xe5, 0x80, 0x02, 0x62, 0x26, 0x31, +0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, +0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, +0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, +0x00, 0x03, 0x3f, 0x40, 0x02, 0x96, 0x91, 0x76, 0x4e, 0x4a, 0x44, 0x5f, 0x04, 0x30, 0xc4, 0x46, +0x15, 0x05, 0x11, 0x21, 0x01, 0x1b, 0x88, 0xbb, 0x49, 0x9a, 0x22, 0x4a, 0x98, 0x7c, 0x16, 0x60, +0x9e, 0x85, 0x88, 0xd8, 0x09, 0x98, 0x08, 0x14, 0x10, 0xe4, 0x25, 0x02, 0x01, 0x00, 0x00, 0x00, +0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, +0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, +0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, +0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, +0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, +0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, +0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, +0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, +0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, +0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, +0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xa7, 0x02, 0x02, 0x60, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x13, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, +0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, +0x18, 0x8a, 0xa0, 0x24, 0x0a, 0xa5, 0x0c, 0xca, 0xa1, 0x34, 0x0a, 0xa1, 0x40, 0xca, 0xa3, 0x8c, +0xa8, 0x28, 0x89, 0x32, 0x28, 0x84, 0x11, 0x80, 0x22, 0x28, 0x10, 0xa2, 0x6a, 0x80, 0xb6, 0x19, +0x00, 0xe2, 0x66, 0x00, 0xa8, 0x9b, 0x01, 0xa0, 0x6f, 0x06, 0x80, 0xc0, 0xb1, 0x10, 0x83, 0x00, +0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, +0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, +0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, +0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x88, 0x63, 0x82, 0x40, 0x20, 0x1b, +0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x05, 0xb8, 0xb9, 0x09, 0x02, 0x91, 0x6c, 0x18, 0x0e, 0x84, +0x98, 0x20, 0x6c, 0x1b, 0x9d, 0xb3, 0xaf, 0x24, 0x37, 0xb8, 0x3a, 0x3a, 0xaa, 0x32, 0x3c, 0xba, +0x3a, 0xb9, 0xb2, 0x09, 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0x83, 0x40, 0x34, 0x1b, 0x12, 0x42, +0x59, 0x08, 0x62, 0x60, 0x08, 0x67, 0x43, 0xf0, 0x4c, 0x10, 0xba, 0x8e, 0x0e, 0x54, 0x99, 0x9c, +0x91, 0x5c, 0x58, 0x5b, 0x99, 0x50, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x04, 0x81, 0x60, 0x36, 0x20, +0x44, 0x24, 0x11, 0xc4, 0x30, 0x01, 0x1b, 0x02, 0x6a, 0x82, 0xf0, 0x79, 0x4c, 0xce, 0xbe, 0xa6, +0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x36, 0x20, 0x84, 0x75, 0x11, 0xc4, 0x40, 0x00, 0x1b, 0x02, +0x6c, 0x03, 0x01, 0x01, 0x55, 0x36, 0x41, 0xe0, 0x38, 0x32, 0x75, 0x5f, 0x72, 0x65, 0x73, 0x6f, +0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x04, 0xa2, 0x99, 0x20, 0x10, 0xce, 0x04, 0x81, 0xd2, +0x26, 0x08, 0xc4, 0x33, 0x41, 0x20, 0xa0, 0x0d, 0x0a, 0xc2, 0x75, 0x84, 0xd7, 0x34, 0x1f, 0x18, +0x84, 0x01, 0x8d, 0xba, 0x2f, 0xba, 0xb4, 0xb6, 0xb2, 0x09, 0x02, 0x11, 0x6d, 0x40, 0x90, 0x31, +0xe8, 0xc8, 0xc0, 0x6b, 0x9a, 0x6f, 0xc3, 0x30, 0x89, 0x41, 0x19, 0x6c, 0x18, 0x88, 0xcd, 0x0c, +0x26, 0x08, 0x02, 0xb0, 0x01, 0xd8, 0x30, 0x10, 0x69, 0x90, 0x06, 0x1b, 0x02, 0x35, 0xd8, 0x30, +0x0c, 0x68, 0xb0, 0x06, 0x13, 0x04, 0x30, 0xf8, 0x36, 0x04, 0x6d, 0x40, 0x03, 0x6a, 0xaa, 0x29, +0x2c, 0xcd, 0x8d, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, +0xa1, 0xa0, 0x26, 0x08, 0x45, 0xb5, 0x21, 0x20, 0x26, 0x08, 0x85, 0x35, 0x41, 0x28, 0xae, 0x0d, +0x0b, 0x01, 0x07, 0x71, 0x20, 0x07, 0x73, 0x40, 0x07, 0x03, 0x1d, 0x10, 0x75, 0x00, 0x10, 0xa1, +0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0xd8, 0x06, 0xa1, 0xeb, 0x36, 0x2c, +0xc3, 0x1d, 0xc4, 0x41, 0x1d, 0xcc, 0x01, 0x1e, 0x0c, 0x78, 0x30, 0xd4, 0x41, 0x1e, 0x6c, 0x10, +0xec, 0x40, 0x0f, 0x98, 0x4c, 0x59, 0x7d, 0x51, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x4d, 0x10, 0x8a, +0x6c, 0x82, 0x40, 0x48, 0x1b, 0x84, 0xce, 0x0f, 0x36, 0x2c, 0x04, 0x1f, 0xc4, 0x41, 0x1f, 0xcc, +0x41, 0x1d, 0x0c, 0x74, 0x40, 0xd4, 0xc1, 0x1f, 0x6c, 0x08, 0x40, 0x61, 0xc3, 0xb0, 0x07, 0xa1, +0x00, 0x6c, 0x28, 0xd0, 0xe0, 0x0d, 0x44, 0x41, 0x03, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xcd, +0xb1, 0x48, 0x73, 0x9b, 0xa3, 0x9b, 0x9b, 0x20, 0x10, 0x13, 0x8d, 0xb9, 0xb4, 0xb3, 0x2f, 0x36, +0x32, 0x1a, 0x73, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x44, 0xe8, 0xca, 0xf0, 0xbe, 0xdc, 0xde, 0xe4, +0xda, 0x36, 0x28, 0xa4, 0x40, 0x06, 0xa5, 0x60, 0x0a, 0xa7, 0xc0, 0xa0, 0x42, 0x18, 0xa4, 0xc2, +0x50, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, +0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, +0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, 0x45, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, +0xb2, 0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae, +0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0x90, 0x55, 0x22, 0xc3, 0x73, 0xa1, 0xcb, +0x83, 0x2b, 0x0b, 0x72, 0x73, 0x7b, 0xa3, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x22, 0x98, +0xc1, 0x1a, 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, +0x2b, 0x9b, 0x12, 0xb4, 0x41, 0x1d, 0x32, 0x3c, 0x97, 0x32, 0x37, 0x3a, 0xb9, 0x3c, 0xa8, 0xb7, +0x34, 0x37, 0xba, 0xb9, 0x29, 0x81, 0x28, 0x74, 0x21, 0xc3, 0x73, 0x19, 0x7b, 0xab, 0x73, 0xa3, +0x2b, 0x93, 0x9b, 0x9b, 0x12, 0xa4, 0x02, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, +0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, +0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, +0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, +0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, +0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, +0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, +0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, +0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, +0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, +0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, +0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, +0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, +0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, +0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, +0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, +0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, +0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, +0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, +0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, +0x71, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x06, 0x60, 0xa4, 0xac, 0x09, 0x20, 0x8d, 0x15, +0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, +0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x9b, 0x81, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x44, 0x00, 0x13, +0x11, 0x02, 0xcd, 0xb0, 0x10, 0x16, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, +0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x03, 0xd0, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x00, 0xf3, 0x2c, +0x84, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, +0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, +0xf9, 0xc5, 0x6d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0xdc, 0x30, 0x8e, 0xe9, 0x09, 0x0c, 0xa6, 0xa7, 0x08, 0x00, +0xa4, 0x3e, 0xb3, 0xff, 0x44, 0x58, 0x49, 0x4c, 0xc0, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, +0xf0, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0xa8, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xe7, 0x01, 0x00, 0x00, +0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, +0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, +0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, +0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, +0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, +0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, +0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, +0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, +0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, +0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, +0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x84, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, +0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, +0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, +0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, +0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, +0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d, 0x19, 0x06, 0x62, 0xa0, 0xe7, 0xa8, 0xe1, 0xf2, 0x27, +0xec, 0x21, 0x24, 0x9f, 0xdb, 0xa8, 0x62, 0x25, 0x26, 0xbf, 0xb8, 0x6d, 0x44, 0x0c, 0xc3, 0x30, +0x14, 0x22, 0x22, 0x18, 0x82, 0xa4, 0x39, 0x82, 0xa0, 0x18, 0x0c, 0x51, 0x10, 0x04, 0x45, 0xd5, +0x40, 0xc0, 0x30, 0x02, 0x31, 0xcc, 0xd4, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, +0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, +0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, +0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x7a, 0xa0, 0x07, 0xed, 0x90, +0x0e, 0xf0, 0x30, 0x0f, 0xbf, 0x40, 0x0f, 0xf9, 0x00, 0x0f, 0xe5, 0x80, 0x02, 0x62, 0x26, 0x31, +0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, +0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, +0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, +0x00, 0x03, 0x3f, 0x40, 0x02, 0x96, 0x91, 0x76, 0x4e, 0x4a, 0x44, 0x5f, 0x04, 0x30, 0xc4, 0x46, +0x15, 0x05, 0x11, 0x21, 0x01, 0x1b, 0x88, 0xbb, 0x49, 0x9a, 0x22, 0x4a, 0x98, 0x7c, 0x16, 0x60, +0x9e, 0x85, 0x88, 0xd8, 0x09, 0x98, 0x08, 0x14, 0x10, 0xe4, 0x25, 0x02, 0x01, 0x00, 0x00, 0x00, +0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, +0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, +0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, +0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, +0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, +0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, +0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, +0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, +0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, +0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, +0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xa7, 0x02, 0x02, 0x60, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, +0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, +0x20, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x50, 0xca, 0xa0, 0x3c, 0xa8, 0x28, 0x89, 0x32, 0x28, 0x84, +0x11, 0x80, 0x22, 0x28, 0x10, 0xda, 0x66, 0x00, 0xa8, 0x9b, 0x01, 0xa0, 0x6f, 0x06, 0x80, 0xc0, +0xb1, 0x10, 0x83, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, +0x63, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, +0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, +0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x88, 0x63, +0x82, 0x40, 0x20, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x10, 0xc9, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, +0x4d, 0x10, 0x08, 0x65, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x61, 0xb3, 0x08, 0x4c, 0x10, 0x88, 0x65, +0x82, 0x40, 0x30, 0x1b, 0x04, 0xc2, 0xd9, 0x90, 0x10, 0x0b, 0x43, 0x10, 0x43, 0x43, 0x3c, 0x1b, +0x02, 0x68, 0x82, 0xd0, 0x5d, 0x13, 0x04, 0xa2, 0xd9, 0x80, 0x10, 0x12, 0x43, 0x10, 0xc3, 0x04, +0x6c, 0x08, 0xa8, 0x09, 0xc2, 0x87, 0x6d, 0x40, 0x08, 0x8b, 0x21, 0x88, 0x81, 0x00, 0x36, 0x04, +0xd7, 0x06, 0x22, 0x02, 0x2a, 0x6c, 0x82, 0x00, 0x06, 0xd9, 0x86, 0x40, 0x9b, 0x20, 0x08, 0x00, +0x0d, 0xa8, 0xa9, 0xa6, 0xb0, 0x34, 0x37, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, +0x69, 0x6f, 0x6e, 0x13, 0x84, 0x02, 0x9a, 0x20, 0x14, 0xd1, 0x86, 0x80, 0x98, 0x20, 0x14, 0xd2, +0x04, 0xa1, 0x98, 0x36, 0x2c, 0x84, 0xf7, 0x81, 0x41, 0x18, 0x88, 0xc1, 0x20, 0x06, 0xc4, 0x18, +0x00, 0x44, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x05, 0x35, 0x41, 0x20, +0x9c, 0x0d, 0xc2, 0x19, 0x9c, 0xc1, 0x86, 0x65, 0x28, 0x83, 0x6f, 0x0c, 0xc2, 0xc0, 0x0c, 0x06, +0x33, 0x18, 0xc6, 0x00, 0x0d, 0x36, 0x08, 0x64, 0x90, 0x06, 0x4c, 0xa6, 0xac, 0xbe, 0xa8, 0xc2, +0xe4, 0xce, 0xca, 0xe8, 0x26, 0x08, 0x45, 0x35, 0x41, 0x20, 0x9e, 0x0d, 0xc2, 0x19, 0xb4, 0xc1, +0x86, 0x85, 0x58, 0x83, 0x8f, 0x0d, 0xc2, 0x60, 0x0c, 0x06, 0x31, 0x20, 0xc6, 0xc0, 0x0d, 0x36, +0x04, 0x6f, 0xb0, 0x61, 0x50, 0x03, 0x38, 0x00, 0x36, 0x14, 0x5c, 0x17, 0x07, 0x19, 0x50, 0x85, +0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, 0xc3, 0x73, +0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, +0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, +0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x41, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae, 0x6c, 0xee, +0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0x80, 0xd5, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, +0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0x68, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, +0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x71, 0x00, 0x00, 0x00, 0x00, +0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, +0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, +0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, +0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, +0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, +0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, +0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, +0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, +0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, +0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, +0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, +0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, +0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, +0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, +0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, +0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, +0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, +0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, +0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, +0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, +0x06, 0x60, 0xa4, 0xac, 0x09, 0x20, 0x8d, 0x15, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, +0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x9b, 0x81, 0x34, +0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x44, 0x00, 0x13, 0x11, 0x02, 0xcd, 0xb0, 0x10, 0x16, 0x30, 0x0d, +0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x03, 0xd0, +0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x00, 0xf3, 0x2c, 0x84, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, +0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x3c, +0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x03, 0x61, 0x20, 0x00, 0x00, +0x51, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, +0x44, 0x8d, 0x00, 0x50, 0x51, 0x02, 0x44, 0x94, 0x4a, 0x69, 0x94, 0x42, 0xc9, 0xcd, 0x00, 0x14, +0x42, 0xd9, 0x15, 0x1e, 0x0d, 0x63, 0x04, 0x7b, 0xac, 0xc6, 0x23, 0x38, 0x8c, 0x11, 0xcc, 0x39, +0x6b, 0xce, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfc, 0xcd, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, +0x82, 0x60, 0x50, 0x89, 0x41, 0x52, 0x81, 0x01, 0x18, 0x38, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, +0x50, 0x8d, 0x81, 0x82, 0x85, 0x41, 0x18, 0x3c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x50, 0x91, +0xc1, 0x62, 0x89, 0x81, 0x18, 0x40, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xa8, 0x81, 0x42, +0x06, 0x63, 0x80, 0x2d, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xac, 0xc1, 0x52, 0x06, 0x64, +0x10, 0x31, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xa8, 0x81, 0x52, 0x10, 0x42, 0x60, 0x18, +0x65, 0x50, 0x06, 0x8d, 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, +0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x52, 0x1b, 0x40, 0x88, 0x1a, 0x8c, 0x26, +0x04, 0x81, 0x21, 0x8f, 0x7c, 0x2c, 0x10, 0xe4, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f, +0x1c, 0x64, 0x81, 0x05, 0x91, 0x7c, 0x2c, 0x90, 0xe0, 0x63, 0xc1, 0x22, 0x1f, 0x13, 0x16, 0xf9, +0xd8, 0xb0, 0xc8, 0x67, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xa4, 0x3b, 0xd0, 0xa4, 0x3a, 0x18, +0x4d, 0x08, 0x00, 0x0b, 0x34, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xb3, 0x07, 0x63, +0x10, 0xd8, 0x11, 0xc8, 0xc7, 0x0e, 0x41, 0x3e, 0x76, 0x0c, 0xf2, 0x31, 0x65, 0x88, 0x8f, 0x29, +0x43, 0x7c, 0x4c, 0x19, 0xe2, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0x29, 0xa0, 0x81, +0x1f, 0xf8, 0xc1, 0x1c, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x90, 0x02, 0x1a, 0xf8, +0x81, 0x1f, 0xac, 0x81, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0x29, 0xa0, 0x81, 0x1f, +0xf8, 0x81, 0x1c, 0x04, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x90, 0x02, 0x1a, 0xf8, 0x81, +0x1f, 0xd4, 0x41, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/Common/Include/frame_handler.h b/Common/Include/frame_handler.h new file mode 100644 index 00000000..b6a429f2 --- /dev/null +++ b/Common/Include/frame_handler.h @@ -0,0 +1,33 @@ +#ifndef FRAME_HANDLER_H +#define FRAME_HANDLER_H + +#include +#include +#include +#include +#include + +struct PerFrameBuffer { + DirectX::XMFLOAT4 resolution; + float time; + float padding[3]; +}; + +class FrameHandler { +public: + static ID3D11Device* g_device; + static ID3D11DeviceContext* g_deviceContext; + static ID3D11VertexShader* g_vertexShader; + static ID3D11PixelShader* g_pixelShader; + static ID3D11InputLayout* g_inputLayout; + static ID3D11Buffer* g_constantBuffer; + static ID3D11RenderTargetView* g_outputRTV; + static bool enabled; + + static void InitializeFrameHandler(ID3D11Device* device, ID3D11DeviceContext* context, const wchar_t* shaderFilePath); + static NTSTATUS AssignSwapChain(IDDCX_SWAPCHAIN hSwapChain, IDXGISwapChain* dxgiSwapChain); + static void ProcessFrame(IDDCX_SWAPCHAIN hSwapChain, LARGE_INTEGER PresentationTime); + static bool IsEnabled() { return enabled; } +}; + +#endif \ No newline at end of file diff --git a/Virtual Display Driver (HDR)/MttVDD/Driver.cpp b/Virtual Display Driver (HDR)/MttVDD/Driver.cpp index 3012b563..fdcce1ee 100644 --- a/Virtual Display Driver (HDR)/MttVDD/Driver.cpp +++ b/Virtual Display Driver (HDR)/MttVDD/Driver.cpp @@ -13,12 +13,10 @@ Copyright (c) Microsoft Corporation --*/ #include "Driver.h" -//#include "Driver.tmh" -#include -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include @@ -36,10 +34,16 @@ Copyright (c) Microsoft Corporation #include #include #include +#include +#include "edid_parser.cpp" +#include "globals.h" +#include +#include - - - +/* +#include +#include +*/ #define PIPE_NAME L"\\\\.\\pipe\\MTTVirtualDisplayPipe" @@ -98,6 +102,10 @@ bool hardwareCursor = false; bool preventManufacturerSpoof = false; bool edidCeaOverride = false; bool sendLogsThroughPipe = true; +bool PreventARlimit = true; +wstring ShaderShortName = L"CRT"; +bool ShaderEnabled = false; +wstring shaderPathfile = L"C:\\VirtualDisplayDriver\\Shaders"; //Mouse settings bool alphaCursorSupport = true; @@ -105,7 +113,6 @@ int CursorMaxX = 128; int CursorMaxY = 128; IDDCX_XOR_CURSOR_SUPPORT XorCursorSupportLevel = IDDCX_XOR_CURSOR_SUPPORT_FULL; - //Rest IDDCX_BITS_PER_COMPONENT SDRCOLOUR = IDDCX_BITS_PER_COMPONENT_8; IDDCX_BITS_PER_COMPONENT HDRCOLOUR = IDDCX_BITS_PER_COMPONENT_10; @@ -116,10 +123,10 @@ std::map> SettingsQueryMap = {L"LoggingEnabled", {L"LOGS", L"logging"}}, {L"DebugLoggingEnabled", {L"DEBUGLOGS", L"debuglogging"}}, {L"CustomEdidEnabled", {L"CUSTOMEDID", L"CustomEdid"}}, - {L"PreventMonitorSpoof", {L"PREVENTMONITORSPOOF", L"PreventSpoof"}}, {L"EdidCeaOverride", {L"EDIDCEAOVERRIDE", L"EdidCeaOverride"}}, {L"SendLogsThroughPipe", {L"SENDLOGSTHROUGHPIPE", L"SendLogsThroughPipe"}}, + {L"PreventARlimit", {L"RMARLIMIT", L"RatioLimit"}}, //Cursor Begin {L"HardwareCursorEnabled", {L"HARDWARECURSOR", L"HardwareCursor"}}, {L"AlphaCursorSupport", {L"ALPHACURSORSUPPORT", L"AlphaCursorSupport"}}, @@ -130,8 +137,8 @@ std::map> SettingsQueryMap = //Colour Begin {L"HDRPlusEnabled", {L"HDRPLUS", L"HDRPlus"}}, {L"SDR10Enabled", {L"SDR10BIT", L"SDR10bit"}}, - {L"ColourFormat", {L"COLOURFORMAT", L"ColourFormat"}}, - //Colour End + {L"ColourFormat", {L"COLOURFORMAT", L"ColourFormat"}} + }; const char* XorCursorSupportLevelToString(IDDCX_XOR_CURSOR_SUPPORT level) { @@ -162,6 +169,7 @@ struct IndirectDeviceContextWrapper pContext = nullptr; } }; + void LogQueries(const char* severity, const std::wstring& xmlName) { if (xmlName.find(L"logging") == std::wstring::npos) { int size_needed = WideCharToMultiByte(CP_UTF8, 0, xmlName.c_str(), (int)xmlName.size(), NULL, 0, NULL, NULL); @@ -1428,7 +1436,7 @@ extern "C" NTSTATUS DriverEntry( preventManufacturerSpoof = EnabledQuery(L"PreventMonitorSpoof"); edidCeaOverride = EnabledQuery(L"EdidCeaOverride"); sendLogsThroughPipe = EnabledQuery(L"SendLogsThroughPipe"); - + PreventARlimit = EnabledQuery(L"RatioLimit"); //colour HDRPlus = EnabledQuery(L"HDRPlusEnabled"); @@ -1492,13 +1500,21 @@ vector split(string& input, char delimiter) void loadSettings() { const wstring settingsname = confpath + L"\\vdd_settings.xml"; const wstring& filename = settingsname; + bool parseEdidRes = false; + wstring resSort; + + + AdapterOption adapterOption; + ComPtr device; + ComPtr context; + if (PathFileExistsW(filename.c_str())) { CComPtr pStream; CComPtr pReader; HRESULT hr = SHCreateStreamOnFileW(filename.c_str(), STGM_READ, &pStream); if (FAILED(hr)) { vddlog("e", "Loading Settings: Failed to create file stream."); - return; + return; } hr = CreateXmlReader(__uuidof(IXmlReader), (void**)&pReader, NULL); if (FAILED(hr)) { @@ -1528,16 +1544,12 @@ void loadSettings() { switch (nodeType) { case XmlNodeType_Element: hr = pReader->GetLocalName(&pwszLocalName, &cwchLocalName); - if (FAILED(hr)) { - return; - } + if (FAILED(hr)) return; currentElement = wstring(pwszLocalName, cwchLocalName); break; case XmlNodeType_Text: hr = pReader->GetValue(&pwszValue, &cwchValue); - if (FAILED(hr)) { - return; - } + if (FAILED(hr)) return; if (currentElement == L"count") { monitorcount = stoi(wstring(pwszValue, cwchValue)); if (monitorcount == 0) { @@ -1550,25 +1562,18 @@ void loadSettings() { } else if (currentElement == L"width") { width = wstring(pwszValue, cwchValue); - if (width.empty()) { - width = L"800"; - } + if (width.empty()) width = L"800"; } else if (currentElement == L"height") { height = wstring(pwszValue, cwchValue); - if (height.empty()) { - height = L"600"; - } + if (height.empty()) height = L"600"; resolutions.insert(make_tuple(stoi(width), stoi(height))); } else if (currentElement == L"refresh_rate") { refreshRate = wstring(pwszValue, cwchValue); - if (refreshRate.empty()) { - refreshRate = L"30"; - } + if (refreshRate.empty()) refreshRate = L"30"; int vsync_num, vsync_den; float_to_vsync(stof(refreshRate), vsync_num, vsync_den); - res.push_back(make_tuple(stoi(width), stoi(height), vsync_num, vsync_den)); stringstream ss; ss << "Added: " << stoi(width) << "x" << stoi(height) << " @ " << vsync_num << "/" << vsync_den << "Hz"; @@ -1577,92 +1582,114 @@ void loadSettings() { else if (currentElement == L"g_refresh_rate") { globalRefreshRates.push_back(stoi(wstring(pwszValue, cwchValue))); } + else if (currentElement == L"parse_edid_res") { + wstring value(pwszValue, cwchValue); + parseEdidRes = (value == L"true" || value == L"1"); + } + else if (currentElement == L"res-sort") { + resSort = wstring(pwszValue, cwchValue); + } + else if (currentElement == L"ShaderEnabled") { + wstring value(pwszValue, cwchValue); + ShaderEnabled = (value == L"true" || value == L"1"); + } + else if (currentElement == L"ShaderName") { + shaderPathfile = confpath + L"\\" + L"Shaders" + L"\\" + wstring(pwszValue, cwchValue + L"_shader.h"); + if (PathFileExistsW(shaderPathfile.c_str())) { + stringstream ss; + ss << "Shader file selected: " << WStringToString(shaderPathfile).c_str(); + vddlog("i", ss.str().c_str()); + ShaderShortName = wstring(pwszValue, cwchValue); + } + else { + vddlog("w", "Shader file not found; FrameHandler disabled."); + shaderPathfile.clear(); + } + } break; } } - /* - * This is for res testing, stores each resolution then iterates through each global adding a res for each one - * - - for (const auto& resTuple : resolutions) { - stringstream ss; - ss << get<0>(resTuple) << "x" << get<1>(resTuple); - vddlog("t", ss.str().c_str()); + if (!gpuFriendlyName.empty()) { + adapterOption.xmlprovide(gpuFriendlyName); + } + else { + adapterOption.load(filename.c_str()); } - for (const auto& globalRate : globalRefreshRates) { - stringstream ss; - ss << globalRate << " Hz"; - vddlog("t", ss.str().c_str()); + ComPtr selectedAdapter; + auto gpus = getAvailableGPUs(); + for (const auto& gpu : gpus) { + if (gpu.desc.AdapterLuid.LowPart == adapterOption.adapterLuid.LowPart && + gpu.desc.AdapterLuid.HighPart == adapterOption.adapterLuid.HighPart) { + selectedAdapter = gpu.adapter; + break; + } + } + if (!selectedAdapter) { + selectedAdapter = gpus.front().adapter; + vddlog("i", "No matching GPU found; using first available."); + } + + hr = D3D11CreateDevice(selectedAdapter.Get(), D3D_DRIVER_TYPE_UNKNOWN, nullptr, 0, nullptr, 0, D3D11_SDK_VERSION, &device, nullptr, &context); + if (FAILED(hr)) { + vddlog("e", "Failed to create D3D11 device."); + return; + } + + if (!shaderPathfile.empty()) { + FrameHandler::InitializeFrameHandler(device.Get(), context.Get(), shaderPathfile.c_str()); + vddlog("i", "FrameHandler initialized with shader file."); } - */ for (int globalRate : globalRefreshRates) { for (const auto& resTuple : resolutions) { int global_width = get<0>(resTuple); int global_height = get<1>(resTuple); - int vsync_num, vsync_den; float_to_vsync(static_cast(globalRate), vsync_num, vsync_den); res.push_back(make_tuple(global_width, global_height, vsync_num, vsync_den)); } } - /* - * logging all resolutions after added global - * - for (const auto& tup : res) { - stringstream ss; - ss << "(" - << get<0>(tup) << ", " - << get<1>(tup) << ", " - << get<2>(tup) << ", " - << get<3>(tup) << ")"; - vddlog("t", ss.str().c_str()); - } - - */ - - numVirtualDisplays = monitorcount; gpuname = gpuFriendlyName; monitorModes = res; - vddlog("i","Using vdd_settings.xml"); - return; + vddlog("i", "Using vdd_settings.xml"); } + const wstring optionsname = confpath + L"\\option.txt"; ifstream ifs(optionsname); if (ifs.is_open()) { - string line; - if (getline(ifs, line) && !line.empty()) { - numVirtualDisplays = stoi(line); - vector> res; - - while (getline(ifs, line)) { - vector strvec = split(line, ','); - if (strvec.size() == 3 && strvec[0].substr(0, 1) != "#") { - int vsync_num, vsync_den; - float_to_vsync(stof(strvec[2]), vsync_num, vsync_den); - res.push_back({ stoi(strvec[0]), stoi(strvec[1]), vsync_num, vsync_den }); - } - } - - vddlog("i", "Using option.txt"); - monitorModes = res; - for (const auto& mode : res) { - int width, height, vsync_num, vsync_den; - tie(width, height, vsync_num, vsync_den) = mode; - stringstream ss; - ss << "Resolution: " << width << "x" << height << " @ " << vsync_num << "/" << vsync_den << "Hz"; - vddlog("d", ss.str().c_str()); - } - return; - } else { - vddlog("w", "option.txt is empty or the first line is invalid. Enabling Fallback"); - } -} + string line; + if (getline(ifs, line) && !line.empty()) { + numVirtualDisplays = stoi(line); + vector> res; + + while (getline(ifs, line)) { + vector strvec = split(line, ','); + if (strvec.size() == 3 && strvec[0].substr(0, 1) != "#") { + int vsync_num, vsync_den; + float_to_vsync(stof(strvec[2]), vsync_num, vsync_den); + res.push_back({ stoi(strvec[0]), stoi(strvec[1]), vsync_num, vsync_den }); + } + } + vddlog("i", "Using option.txt"); + monitorModes = res; + for (const auto& mode : res) { + int width, height, vsync_num, vsync_den; + tie(width, height, vsync_num, vsync_den) = mode; + stringstream ss; + ss << "Resolution: " << width << "x" << height << " @ " << vsync_num << "/" << vsync_den << "Hz"; + vddlog("d", ss.str().c_str()); + } + return; + } + else { + vddlog("w", "option.txt is empty or the first line is invalid. Enabling Fallback"); + } + } numVirtualDisplays = 1; vector> res; @@ -1725,7 +1752,6 @@ void loadSettings() { monitorModes = res; return; - } _Use_decl_annotations_ @@ -2195,9 +2221,14 @@ void SwapChainProcessor::RunCore() vddlog("e", logStream.str().c_str()); return; } - logStream << "DXGI device interface obtained successfully."; - //vddlog("d", logStream.str().c_str()); + // Initialize the frame handler if not already done + if (!FrameHandler::g_device) { + FrameHandler::InitializeFrameHandler(m_Device->Device.Get(), m_Device->DeviceContext.Get(), L"crt_shader"); + logStream.str(""); + logStream << "Frame handler initialized with CRT shader."; + vddlog("i", logStream.str().c_str()); + } IDARG_IN_SWAPCHAINSETDEVICE SetDevice = {}; SetDevice.pDevice = DxgiDevice.Get(); @@ -2210,10 +2241,19 @@ void SwapChainProcessor::RunCore() vddlog("e", logStream.str().c_str()); return; } - logStream << "Device set to swap chain successfully."; - //vddlog("d", logStream.str().c_str()); - logStream.str(""); + // Assign the swap chain to the frame handler + ComPtr swapChain; + NTSTATUS status = FrameHandler::AssignSwapChain(m_hSwapChain, swapChain.Get()); + + if (status != STATUS_SUCCESS) + { + logStream.str(""); + logStream << "Failed to assign swap chain to frame handler. NTSTATUS: " << status; + vddlog("e", logStream.str().c_str()); + } + + logStream.str(""); logStream << "Starting buffer acquisition and release loop."; //vddlog("d", logStream.str().c_str()); @@ -2238,11 +2278,10 @@ void SwapChainProcessor::RunCore() hr = IddCxSwapChainReleaseAndAcquireBuffer(m_hSwapChain, &Buffer); pSurface = Buffer.MetaData.pSurface; } - // AcquireBuffer immediately returns STATUS_PENDING if no buffer is yet available - logStream.str(""); + if (hr == E_PENDING) { - // We must wait for a new buffer + // Wait for a new buffer HANDLE WaitHandles[] = { m_hAvailableBufferEvent, @@ -2250,25 +2289,21 @@ void SwapChainProcessor::RunCore() }; DWORD WaitResult = WaitForMultipleObjects(ARRAYSIZE(WaitHandles), WaitHandles, FALSE, 16); - logStream << "Buffer acquisition pending. WaitResult: " << WaitResult; - if (WaitResult == WAIT_OBJECT_0 || WaitResult == WAIT_TIMEOUT) { - // We have a new buffer, so try the AcquireBuffer again - //vddlog("d", "New buffer trying aquire new buffer"); + // Try again continue; } else if (WaitResult == WAIT_OBJECT_0 + 1) { - // We need to terminate - logStream << "Terminate event signaled. Exiting loop."; - //vddlog("d", logStream.str().c_str()); + // Terminate break; } else { - // The wait was cancelled or something unexpected happened + // Error handling hr = HRESULT_FROM_WIN32(WaitResult); + logStream.str(""); logStream << "Unexpected wait result. HRESULT: " << hr; vddlog("e", logStream.str().c_str()); break; @@ -2279,37 +2314,79 @@ void SwapChainProcessor::RunCore() AcquiredBuffer.Attach(pSurface); // ============================== - // TODO: Process the frame here - // - // This is the most performance-critical section of code in an IddCx driver. It's important that whatever - // is done with the acquired surface be finished as quickly as possible. This operation could be: - // * a GPU copy to another buffer surface for later processing (such as a staging surface for mapping to CPU memory) - // * a GPU encode operation - // * a GPU VPBlt to another surface - // * a GPU custom compute shader encode operation + // Process the frame here // ============================== + if (FrameHandler::IsEnabled()) + { + // Create a render target view for the acquired buffer + ComPtr texture; + hr = AcquiredBuffer.As(&texture); + + if (SUCCEEDED(hr)) + { + // Create RTV if needed + D3D11_RENDER_TARGET_VIEW_DESC rtvDesc = {}; + rtvDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + rtvDesc.Texture2D.MipSlice = 0; + + // Release previous RTV if any + if (FrameHandler::g_outputRTV) + { + FrameHandler::g_outputRTV->Release(); + FrameHandler::g_outputRTV = nullptr; + } + + hr = FrameHandler::g_device->CreateRenderTargetView(texture.Get(), &rtvDesc, &FrameHandler::g_outputRTV); + + if (SUCCEEDED(hr)) + { + // Get current time for shader animation + LARGE_INTEGER presentationTime; + QueryPerformanceCounter(&presentationTime); + + // Process the frame with the shader + FrameHandler::ProcessFrame(m_hSwapChain, presentationTime); + } + else + { + // Failed to create RTV, just pass the frame through + logStream.str(""); + logStream << "Failed to create render target view. HRESULT: " << hr; + vddlog("e", logStream.str().c_str()); + + AcquiredBuffer.Reset(); + hr = IddCxSwapChainFinishedProcessingFrame(m_hSwapChain); + } + } + else + { + // Failed to get texture, just pass the frame through + logStream.str(""); + logStream << "Failed to get texture from acquired buffer. HRESULT: " << hr; + vddlog("e", logStream.str().c_str()); + + AcquiredBuffer.Reset(); + hr = IddCxSwapChainFinishedProcessingFrame(m_hSwapChain); + } + } + else + { + // Frame handler disabled, just pass the frame through + AcquiredBuffer.Reset(); + hr = IddCxSwapChainFinishedProcessingFrame(m_hSwapChain); + } - AcquiredBuffer.Reset(); - //vddlog("d", "Reset buffer"); - hr = IddCxSwapChainFinishedProcessingFrame(m_hSwapChain); if (FAILED(hr)) { break; } - - // ============================== - // TODO: Report frame statistics once the asynchronous encode/send work is completed - // - // Drivers should report information about sub-frame timings, like encode time, send time, etc. - // ============================== - // IddCxSwapChainReportFrameStatistics(m_hSwapChain, ...); } else { - logStream.str(""); // Clear the stream - logStream << "Failed to acquire buffer. Exiting loop. The swap-chain was likely abandoned (e.g. DXGI_ERROR_ACCESS_LOST) - HRESULT: " << hr; + logStream.str(""); + logStream << "Failed to acquire buffer. Exiting loop. HRESULT: " << hr; vddlog("e", logStream.str().c_str()); - // The swap-chain was likely abandoned (e.g. DXGI_ERROR_ACCESS_LOST), so exit the processing loop break; } } @@ -2367,6 +2444,14 @@ void modifyEdid(vector& edid) { edid[11] = 0x13; } +void ARnullEdid(vector& edid) { + if (edid.size() < 23) { + return; + } + + edid[21] = 0x00; + edid[22] = 0x00; +} BYTE calculateChecksum(const std::vector& edid) { @@ -2442,6 +2527,7 @@ int maincalc() { vector edid = loadEdid(WStringToString(confpath) + "\\user_edid.bin"); if (!preventManufacturerSpoof) modifyEdid(edid); + if (!PreventARlimit) ARnullEdid(edid); BYTE checksum = calculateChecksum(edid); edid[127] = checksum; // Setting this variable is depricated, hardcoded edid is either returned or custom in loading edid function @@ -2746,6 +2832,7 @@ void IndirectDeviceContext::UnassignSwapChain() #pragma region DDI Callbacks +_Use_decl_annotations_ _Use_decl_annotations_ NTSTATUS VirtualDisplayDriverAdapterInitFinished(IDDCX_ADAPTER AdapterObject, const IDARG_IN_ADAPTER_INIT_FINISHED* pInArgs) { @@ -2765,11 +2852,10 @@ NTSTATUS VirtualDisplayDriverAdapterInitFinished(IDDCX_ADAPTER AdapterObject, co vddlog("e", ss.str().c_str()); } vddlog("i", "Finished Setting up adapter."); - + return STATUS_SUCCESS; } - _Use_decl_annotations_ NTSTATUS VirtualDisplayDriverAdapterCommitModes(IDDCX_ADAPTER AdapterObject, const IDARG_IN_COMMITMODES* pInArgs) { diff --git a/Virtual Display Driver (HDR)/MttVDD/Driver.h b/Virtual Display Driver (HDR)/MttVDD/Driver.h index 17be5b32..91671e13 100644 --- a/Virtual Display Driver (HDR)/MttVDD/Driver.h +++ b/Virtual Display Driver (HDR)/MttVDD/Driver.h @@ -6,15 +6,12 @@ #include #include #include - #include #include #include #include - #include #include - #include "Trace.h" namespace Microsoft diff --git a/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj b/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj index ea858780..2fe434db 100644 --- a/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj +++ b/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj @@ -36,12 +36,11 @@ + - - true - + @@ -55,6 +54,7 @@ Debug Win32 IddSampleDriver + $(LatestTargetPlatformVersion) WindowsUserModeDriver10.0 @@ -223,6 +223,7 @@ Async true $(ProjectDir)..\..\Common\Include;%(AdditionalIncludeDirectories) + stdcpp17 %(AdditionalDependencies);OneCoreUAP.lib;avrt.lib @@ -236,6 +237,7 @@ Async true $(ProjectDir)..\..\Common\Include;%(AdditionalIncludeDirectories) + stdcpp17 %(AdditionalDependencies);OneCoreUAP.lib;avrt.lib @@ -271,6 +273,7 @@ true /D_ATL_NO_WIN_SUPPORT /DUMDF_DRIVER /DIDDCX_VERSION_MAJOR=1 /DIDDCX_VERSION_MINOR=10 /DIDDCX_MINIMUM_VERSION_REQUIRED=3 %(AdditionalOptions) $(ProjectDir)..\..\Common\Include;%(AdditionalIncludeDirectories) + stdcpp17 %(AdditionalDependencies);OneCoreUAP.lib;avrt.lib @@ -289,6 +292,7 @@ trace.h Async true + stdcpp17 %(AdditionalDependencies);OneCoreUAP.lib;avrt.lib @@ -301,6 +305,7 @@ trace.h Async true + stdcpp17 %(AdditionalDependencies);OneCoreUAP.lib;avrt.lib @@ -339,6 +344,7 @@ true /D_ATL_NO_WIN_SUPPORT /DUMDF_DRIVER /DIDDCX_VERSION_MAJOR=1 /DIDDCX_VERSION_MINOR=10 /DIDDCX_MINIMUM_VERSION_REQUIRED=3 %(AdditionalOptions) $(ProjectDir)..\..\Common\Include;%(AdditionalIncludeDirectories) + stdcpp17 %(AdditionalDependencies);OneCoreUAP.lib;avrt.lib diff --git a/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj.filters b/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj.filters index 63e68876..ad095f3f 100644 --- a/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj.filters +++ b/Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj.filters @@ -30,7 +30,7 @@ Header Files - + Header Files @@ -38,6 +38,9 @@ Source Files + + Source Files + diff --git a/Virtual Display Driver (HDR)/MttVDD/edid_parser.cpp b/Virtual Display Driver (HDR)/MttVDD/edid_parser.cpp new file mode 100644 index 00000000..33bb1c88 --- /dev/null +++ b/Virtual Display Driver (HDR)/MttVDD/edid_parser.cpp @@ -0,0 +1,265 @@ +#include +#include +#include +#include +#include +#include +#include + +namespace EdidParser { + +using MonitorMode = std::tuple; // (x_res, y_res, refresh_rate, divider) + +static void add_vic_resolution(uint8_t vic, std::vector& modes) { + // Complete VIC table from CEA-861 (up to latest, e.g., CEA-861-J) + // Refresh rate as integer (Hz), divider adjusts to precise rate (e.g., 1001 for 59.94 Hz) + switch (vic) { + case 1: modes.push_back({640, 480, 60, 1}); break; // 640x480@60p + case 2: modes.push_back({720, 480, 60, 1001}); break; // 720x480@59.94p + case 3: modes.push_back({720, 480, 60, 1}); break; // 720x480@60p + case 4: modes.push_back({1280, 720, 60, 1}); break; // 1280x720@60p + case 5: modes.push_back({1920, 1080, 60, 1001}); break; // 1920x1080@59.94i + case 6: modes.push_back({720, 480, 60, 1001}); break; // 720x480@59.94i (1440x480i) + case 7: modes.push_back({720, 480, 60, 1}); break; // 720x480@60i (1440x480i) + case 8: modes.push_back({720, 240, 60, 1001}); break; // 720x240@59.94p + case 9: modes.push_back({720, 240, 60, 1}); break; // 720x240@60p + case 10: modes.push_back({1440, 480, 60, 1001}); break; // 1440x480@59.94i + case 11: modes.push_back({1440, 480, 60, 1}); break; // 1440x480@60i + case 12: modes.push_back({1440, 240, 60, 1001}); break; // 1440x240@59.94p + case 13: modes.push_back({1440, 240, 60, 1}); break; // 1440x240@60p + case 14: modes.push_back({1440, 480, 60, 1001}); break; // 1440x480@59.94p + case 15: modes.push_back({1440, 480, 60, 1}); break; // 1440x480@60p + case 16: modes.push_back({1920, 1080, 60, 1}); break; // 1920x1080@60p + case 17: modes.push_back({720, 576, 50, 1}); break; // 720x576@50p + case 18: modes.push_back({720, 576, 50, 1}); break; // 720x576@50i (1440x576i) + case 19: modes.push_back({1280, 720, 50, 1}); break; // 1280x720@50p + case 20: modes.push_back({1920, 1080, 50, 1}); break; // 1920x1080@50i + case 21: modes.push_back({720, 576, 50, 1}); break; // 720x576@50i (1440x576i) + case 22: modes.push_back({720, 576, 50, 1}); break; // 720x576@50p + case 23: modes.push_back({720, 288, 50, 1}); break; // 720x288@50p + case 24: modes.push_back({720, 288, 50, 1}); break; // 720x288@50p + case 25: modes.push_back({1440, 576, 50, 1}); break; // 1440x576@50i + case 26: modes.push_back({1440, 288, 50, 1}); break; // 1440x288@50p + case 27: modes.push_back({1440, 288, 50, 1}); break; // 1440x288@50p + case 28: modes.push_back({1440, 576, 50, 1}); break; // 1440x576@50p + case 29: modes.push_back({1440, 576, 50, 1}); break; // 1440x576@50p + case 30: modes.push_back({1920, 1080, 50, 1}); break; // 1920x1080@50p + case 31: modes.push_back({1920, 1080, 100, 1}); break; // 1920x1080@100p + case 32: modes.push_back({1920, 1080, 24, 1}); break; // 1920x1080@24p + case 33: modes.push_back({1920, 1080, 25, 1}); break; // 1920x1080@25p + case 34: modes.push_back({1920, 1080, 30, 1}); break; // 1920x1080@30p + case 35: modes.push_back({720, 480, 120, 1}); break; // 720x480@120p + case 36: modes.push_back({720, 480, 120, 1}); break; // 720x480@120i + case 37: modes.push_back({720, 240, 120, 1}); break; // 720x240@120p + case 38: modes.push_back({1440, 480, 120, 1}); break; // 1440x480@120i + case 39: modes.push_back({1440, 480, 120, 1}); break; // 1440x480@120p + case 40: modes.push_back({720, 576, 100, 1}); break; // 720x576@100p + case 41: modes.push_back({720, 576, 100, 1}); break; // 720x576@100i + case 42: modes.push_back({720, 288, 100, 1}); break; // 720x288@100p + case 43: modes.push_back({1440, 576, 100, 1}); break; // 1440x576@100i + case 44: modes.push_back({1440, 576, 100, 1}); break; // 1440x576@100p + case 45: modes.push_back({720, 480, 200, 1}); break; // 720x480@200p + case 46: modes.push_back({720, 480, 200, 1}); break; // 720x480@200i + case 47: modes.push_back({720, 240, 200, 1}); break; // 720x240@200p + case 48: modes.push_back({1440, 480, 200, 1}); break; // 1440x480@200i + case 49: modes.push_back({1440, 480, 200, 1}); break; // 1440x480@200p + case 50: modes.push_back({720, 576, 200, 1}); break; // 720x576@200p + case 51: modes.push_back({720, 576, 200, 1}); break; // 720x576@200i + case 52: modes.push_back({720, 288, 200, 1}); break; // 720x288@200p + case 53: modes.push_back({1440, 576, 200, 1}); break; // 1440x576@200i + case 54: modes.push_back({1440, 576, 200, 1}); break; // 1440x576@200p + case 55: modes.push_back({720, 480, 240, 1}); break; // 720x480@240p + case 56: modes.push_back({720, 480, 240, 1}); break; // 720x480@240i + case 57: modes.push_back({720, 240, 240, 1}); break; // 720x240@240p + case 58: modes.push_back({1440, 480, 240, 1}); break; // 1440x480@240i + case 59: modes.push_back({1440, 480, 240, 1}); break; // 1440x480@240p + case 60: modes.push_back({1280, 720, 24, 1}); break; // 1280x720@24p + case 61: modes.push_back({1280, 720, 25, 1}); break; // 1280x720@25p + case 62: modes.push_back({1280, 720, 30, 1}); break; // 1280x720@30p + case 63: modes.push_back({1920, 1080, 120, 1}); break; // 1920x1080@120p + case 64: modes.push_back({1920, 1080, 120, 1}); break; // 1920x1080@120i + case 65: modes.push_back({1280, 720, 120, 1}); break; // 1280x720@120p + case 66: modes.push_back({720, 480, 60, 1001}); break; // 720x480@59.94p (alt) + case 67: modes.push_back({720, 480, 60, 1}); break; // 720x480@60p (alt) + case 68: modes.push_back({720, 576, 50, 1}); break; // 720x576@50p (alt) + case 69: modes.push_back({1280, 720, 60, 1001}); break; // 1280x720@59.94p + case 70: modes.push_back({1280, 720, 24, 1001}); break; // 1280x720@23.976p + case 71: modes.push_back({1920, 1080, 60, 1001}); break;// 1920x1080@59.94p + case 72: modes.push_back({1920, 1080, 24, 1001}); break;// 1920x1080@23.976p + case 73: modes.push_back({1920, 1080, 30, 1001}); break;// 1920x1080@29.97p + case 74: modes.push_back({2880, 480, 60, 1001}); break; // 2880x480@59.94i + case 75: modes.push_back({2880, 480, 60, 1}); break; // 2880x480@60i + case 76: modes.push_back({2880, 576, 50, 1}); break; // 2880x576@50i + case 77: modes.push_back({2880, 576, 50, 1}); break; // 2880x576@50p + case 78: modes.push_back({1920, 1080, 30, 1001}); break;// 1920x1080@29.97i + case 79: modes.push_back({1920, 1080, 60, 1}); break; // 1920x1080@60i + case 80: modes.push_back({1280, 720, 30, 1001}); break; // 1280x720@29.97p + case 81: modes.push_back({720, 480, 60, 1001}); break; // 720x480@59.94p (alt 2) + case 82: modes.push_back({720, 480, 60, 1}); break; // 720x480@60p (alt 2) + case 83: modes.push_back({720, 576, 50, 1}); break; // 720x576@50p (alt 2) + case 84: modes.push_back({720, 480, 120, 1}); break; // 720x480@120p (alt) + case 85: modes.push_back({720, 576, 100, 1}); break; // 720x576@100p (alt) + case 86: modes.push_back({720, 480, 240, 1}); break; // 720x480@240p (alt) + case 87: modes.push_back({720, 576, 200, 1}); break; // 720x576@200p (alt) + case 88: modes.push_back({720, 480, 60, 1001}); break; // 720x480@59.94i (alt) + case 89: modes.push_back({720, 480, 60, 1}); break; // 720x480@60i (alt) + case 90: modes.push_back({720, 576, 50, 1}); break; // 720x576@50i (alt) + case 91: modes.push_back({1920, 1080, 24, 1001}); break;// 1920x1080@23.976p (alt) + case 92: modes.push_back({1920, 1080, 30, 1}); break; // 1920x1080@30p (alt) + case 93: modes.push_back({3840, 2160, 24, 1}); break; // 3840x2160@24p + case 94: modes.push_back({3840, 2160, 25, 1}); break; // 3840x2160@25p + case 95: modes.push_back({3840, 2160, 30, 1}); break; // 3840x2160@30p + case 96: modes.push_back({3840, 2160, 50, 1}); break; // 3840x2160@50p + case 97: modes.push_back({3840, 2160, 60, 1}); break; // 3840x2160@60p + case 98: modes.push_back({4096, 2160, 24, 1}); break; // 4096x2160@24p + case 99: modes.push_back({4096, 2160, 25, 1}); break; // 4096x2160@25p + case 100: modes.push_back({4096, 2160, 30, 1}); break; // 4096x2160@30p + case 101: modes.push_back({4096, 2160, 50, 1}); break; // 4096x2160@50p + case 102: modes.push_back({4096, 2160, 60, 1}); break; // 4096x2160@60p + case 103: modes.push_back({3840, 2160, 24, 1001}); break;// 3840x2160@23.976p + case 104: modes.push_back({3840, 2160, 30, 1001}); break;// 3840x2160@29.97p + case 105: modes.push_back({3840, 2160, 60, 1001}); break;// 3840x2160@59.94p + case 106: modes.push_back({4096, 2160, 24, 1001}); break;// 4096x2160@23.976p + case 107: modes.push_back({4096, 2160, 30, 1001}); break;// 4096x2160@29.97p + case 108: modes.push_back({4096, 2160, 60, 1001}); break;// 4096x2160@59.94p + case 109: modes.push_back({3840, 2160, 120, 1}); break; // 3840x2160@120p + case 110: modes.push_back({3840, 2160, 100, 1}); break; // 3840x2160@100p + case 111: modes.push_back({4096, 2160, 120, 1}); break; // 4096x2160@120p + case 112: modes.push_back({4096, 2160, 100, 1}); break; // 4096x2160@100p + case 113: modes.push_back({7680, 4320, 24, 1}); break; // 7680x4320@24p + case 114: modes.push_back({7680, 4320, 25, 1}); break; // 7680x4320@25p + case 115: modes.push_back({7680, 4320, 30, 1}); break; // 7680x4320@30p + case 116: modes.push_back({7680, 4320, 50, 1}); break; // 7680x4320@50p + case 117: modes.push_back({7680, 4320, 60, 1}); break; // 7680x4320@60p + case 118: modes.push_back({7680, 4320, 24, 1001}); break;// 7680x4320@23.976p + case 119: modes.push_back({7680, 4320, 30, 1001}); break;// 7680x4320@29.97p + case 120: modes.push_back({7680, 4320, 60, 1001}); break;// 7680x4320@59.94p + case 121: modes.push_back({7680, 4320, 120, 1}); break; // 7680x4320@120p + case 122: modes.push_back({7680, 4320, 100, 1}); break; // 7680x4320@100p + default: break; // Unknown VIC, skip + } +} + +static void parse_cea861_block(const uint8_t* block, std::vector& modes) { + uint8_t dtd_start = block[2]; + if (dtd_start == 0) return; + + int offset = 4; + while (offset < dtd_start) { + uint8_t len_type = block[offset++]; + uint8_t len = len_type & 0x1F; + uint8_t type = len_type >> 5; + if (type == 2) { // Video Data Block + for (int i = 0; i < len; ++i) { + uint8_t vic = block[offset + i]; + add_vic_resolution(vic, modes); + } + } + offset += len; + } + + offset = dtd_start; + while (offset < 128 && block[offset] != 0x00) { + int x_res = ((block[offset + 4] & 0xF0) << 4) | block[offset + 2]; + int y_res = ((block[offset + 7] & 0xF0) << 4) | block[offset + 5]; + uint32_t pixel_clock = (block[offset + 1] << 8) | block[offset]; // in 10 kHz + int refresh_rate = static_cast((pixel_clock * 10000.0f) / (x_res * y_res) + 0.5f); + int divider = (refresh_rate == 60 || refresh_rate == 30 || refresh_rate == 24) ? 1001 : 1; + modes.push_back({x_res, y_res, refresh_rate, divider}); + offset += 18; + } +} + +static void parse_displayid_block(const uint8_t* block, std::vector& modes) { + int offset = 3; + while (offset < 128) { + uint8_t type = block[offset++]; + if (type == 0x00) break; + uint8_t len = block[offset++]; + if (type == 0x02) { // Type 1 Timing + int x_res = ((block[offset + 1] & 0x0F) << 8) | block[offset]; + int y_res = ((block[offset + 3] & 0x0F) << 8) | block[offset + 2]; + int refresh_rate = block[offset + 4]; + int divider = (refresh_rate == 60 || refresh_rate == 30 || refresh_rate == 24) ? 1001 : 1; + modes.push_back({x_res, y_res, refresh_rate, divider}); + } + offset += len; + } +} + +static void parse_base_block(const uint8_t* edid_data, std::vector& modes) { + for (int i = 38; i < 54; i += 2) { + uint8_t byte1 = edid_data[i]; + uint8_t byte2 = edid_data[i + 1]; + if (byte1 == 0x01 && byte2 == 0x01) continue; + + int x_res = (byte1 + 31) * 8; + int aspect = (byte2 >> 6) & 0x03; + int y_res; + switch (aspect) { + case 0: y_res = x_res * 3 / 4; break; + case 1: y_res = x_res * 9 / 16; break; + case 2: y_res = x_res * 10 / 16; break; + case 3: y_res = x_res; break; + } + int refresh_rate = (byte2 & 0x3F) + 60; + int divider = (refresh_rate == 60) ? 1001 : 1; + modes.push_back({x_res, y_res, refresh_rate, divider}); + } + + for (int i = 54; i < 126; i += 18) { + if (edid_data[i] == 0x00 && edid_data[i + 1] == 0x00) continue; + + int x_res = ((edid_data[i + 4] & 0xF0) << 4) | edid_data[i + 2]; + int y_res = ((edid_data[i + 7] & 0xF0) << 4) | edid_data[i + 5]; + uint32_t pixel_clock = (edid_data[i + 1] << 8) | edid_data[i]; // in 10 kHz + int refresh_rate = static_cast((pixel_clock * 10000.0f) / (x_res * y_res) + 0.5f); + int divider = (refresh_rate == 60 || refresh_rate == 30 || refresh_rate == 24) ? 1001 : 1; + modes.push_back({x_res, y_res, refresh_rate, divider}); + } +} + +std::vector parse_edid(const uint8_t* edid_data, size_t size) { + std::vector modes; + + if (size < 128 || edid_data[0] != 0x00 || edid_data[1] != 0xFF || edid_data[2] != 0xFF || + edid_data[3] != 0xFF || edid_data[4] != 0xFF || edid_data[5] != 0xFF || edid_data[6] != 0xFF || + edid_data[7] != 0x00) { + throw std::runtime_error("Invalid EDID header"); + } + + parse_base_block(edid_data, modes); + + uint8_t ext_count = edid_data[126]; + if (size < 128 * (ext_count + 1)) { + throw std::runtime_error("EDID data too short for extension blocks"); + } + + for (uint8_t i = 0; i < ext_count; ++i) { + const uint8_t* ext_block = edid_data + 128 * (i + 1); + switch (ext_block[0]) { + case 0x02: parse_cea861_block(ext_block, modes); break; + case 0x10: parse_displayid_block(ext_block, modes); break; + default: break; + } + } + + // Deduplicate modes + std::set uniqueModes(modes.begin(), modes.end()); + modes.assign(uniqueModes.begin(), uniqueModes.end()); + + return modes; +} + +std::vector load_and_parse_edid(const std::string& filename) { + std::ifstream file(filename, std::ios::binary); + if (!file) throw std::runtime_error("Failed to open EDID file"); + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector edid_data(size); + file.read(reinterpret_cast(edid_data.data()), size); + return parse_edid(edid_data.data(), size); +} + +} // namespace EdidParser \ No newline at end of file diff --git a/Virtual Display Driver (HDR)/MttVDD/frame_handler.cpp b/Virtual Display Driver (HDR)/MttVDD/frame_handler.cpp new file mode 100644 index 00000000..179c07df --- /dev/null +++ b/Virtual Display Driver (HDR)/MttVDD/frame_handler.cpp @@ -0,0 +1,151 @@ +#include "frame_handler.h" +#include +#include +#include +#include +#include +#include +#include "globals.h" +#include "CRT_shader.h" + +ID3D11Device* FrameHandler::g_device = nullptr; +ID3D11DeviceContext* FrameHandler::g_deviceContext = nullptr; +ID3D11VertexShader* FrameHandler::g_vertexShader = nullptr; +ID3D11PixelShader* FrameHandler::g_pixelShader = nullptr; +ID3D11InputLayout* FrameHandler::g_inputLayout = nullptr; +ID3D11Buffer* FrameHandler::g_constantBuffer = nullptr; +ID3D11RenderTargetView* FrameHandler::g_outputRTV = nullptr; +bool FrameHandler::enabled = false; + +void FrameHandler::InitializeFrameHandler(ID3D11Device* device, ID3D11DeviceContext* context, const wchar_t* shaderfilepath) { + UNREFERENCED_PARAMETER(shaderfilepath); + g_device = device; + g_deviceContext = context; + enabled = false; + + std::wstring activeShaderName = ShaderShortName; + + if (activeShaderName.empty() || activeShaderName == L"") { + return; + } + + if (activeShaderName == L"CRT") { +#include "CRT_shader.h" + enabled = true; + + D3D11_INPUT_ELEMENT_DESC layout[] = { + {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, + }; + + HRESULT hr = g_device->CreateInputLayout(layout, ARRAYSIZE(layout), CRTShader_VS, CRTShader_VS_size, &g_inputLayout); + if (FAILED(hr)) return; + + hr = g_device->CreateVertexShader(CRTShader_VS, CRTShader_VS_size, nullptr, &g_vertexShader); + if (FAILED(hr)) return; + + hr = g_device->CreatePixelShader(CRTShader_PS, CRTShader_PS_size, nullptr, &g_pixelShader); + if (FAILED(hr)) return; + } + else { + std::wstring header = activeShaderName + L"_shader.h"; + } + + D3D11_BUFFER_DESC cbDesc = {}; + cbDesc.ByteWidth = sizeof(PerFrameBuffer); + cbDesc.Usage = D3D11_USAGE_DYNAMIC; + cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + cbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + HRESULT hr = g_device->CreateBuffer(&cbDesc, nullptr, &g_constantBuffer); + if (FAILED(hr)) enabled = false; +} + +NTSTATUS FrameHandler::AssignSwapChain(IDDCX_SWAPCHAIN hSwapChain, IDXGISwapChain* dxgiSwapChain) { + if (!g_device || !g_deviceContext || !enabled) return STATUS_INVALID_PARAMETER; + + IDXGIDevice* dxgiDevice = nullptr; + HRESULT hr = g_device->QueryInterface(__uuidof(IDXGIDevice), (void**)&dxgiDevice); + if (FAILED(hr)) return STATUS_UNSUCCESSFUL; + + IDARG_IN_SWAPCHAINSETDEVICE swapChainArgs = {}; + swapChainArgs.pDevice = dxgiDevice; + + hr = IddCxSwapChainSetDevice(hSwapChain, &swapChainArgs); + dxgiDevice->Release(); + if (FAILED(hr)) return STATUS_UNSUCCESSFUL; + + if (dxgiSwapChain) { + ID3D11Texture2D* backBuffer = nullptr; + hr = dxgiSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBuffer); + if (SUCCEEDED(hr) && backBuffer) { + hr = g_device->CreateRenderTargetView(backBuffer, nullptr, &g_outputRTV); + backBuffer->Release(); + if (FAILED(hr)) return STATUS_UNSUCCESSFUL; + } + } + + return STATUS_SUCCESS; +} + +void FrameHandler::ProcessFrame(IDDCX_SWAPCHAIN hSwapChain, LARGE_INTEGER PresentationTime) { + if (!enabled || !g_deviceContext || !g_outputRTV) return; + + UNREFERENCED_PARAMETER(hSwapChain); // Silence C4100 warning + + /* Example: Use hSwapChain (simplified, adjust as per your IDDCX setup) + IDARG_OUT_RELEASEANDACQUIREBUFFER bufferArgs = {}; + HRESULT hr = IddCxSwapChainReleaseAndAcquireBuffer(hSwapChain, &bufferArgs); + if (FAILED(hr)) return; + */ + + float clearColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; + g_deviceContext->ClearRenderTargetView(g_outputRTV, clearColor); + + if (g_vertexShader && g_pixelShader && g_inputLayout && g_constantBuffer) { + g_deviceContext->IASetInputLayout(g_inputLayout); + g_deviceContext->VSSetShader(g_vertexShader, nullptr, 0); + g_deviceContext->PSSetShader(g_pixelShader, nullptr, 0); + + D3D11_MAPPED_SUBRESOURCE mappedResource; + HRESULT hr = g_deviceContext->Map(g_constantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (SUCCEEDED(hr)) { + PerFrameBuffer* bufferData = (PerFrameBuffer*)mappedResource.pData; + bufferData->resolution = DirectX::XMFLOAT4(1920.0f, 1080.0f, 0.0f, 0.0f); + bufferData->time = static_cast(PresentationTime.QuadPart) / 10000000.0f; + g_deviceContext->Unmap(g_constantBuffer, 0); + } + + g_deviceContext->VSSetConstantBuffers(0, 1, &g_constantBuffer); + g_deviceContext->PSSetConstantBuffers(0, 1, &g_constantBuffer); + + struct Vertex { + DirectX::XMFLOAT3 pos; + DirectX::XMFLOAT2 tex; + }; + Vertex vertices[] = { + {{ -1.0f, 1.0f, 0.0f }, { 0.0f, 0.0f }}, + {{ 1.0f, 1.0f, 0.0f }, { 1.0f, 0.0f }}, + {{ -1.0f, -1.0f, 0.0f }, { 0.0f, 1.0f }}, + {{ 1.0f, -1.0f, 0.0f }, { 1.0f, 1.0f }}, + }; + + D3D11_BUFFER_DESC vbDesc = {}; + vbDesc.ByteWidth = sizeof(vertices); + vbDesc.Usage = D3D11_USAGE_DEFAULT; + vbDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + D3D11_SUBRESOURCE_DATA vbData = {}; + vbData.pSysMem = vertices; + ID3D11Buffer* vertexBuffer = nullptr; + hr = g_device->CreateBuffer(&vbDesc, &vbData, &vertexBuffer); + if (SUCCEEDED(hr)) { + UINT stride = sizeof(Vertex); + UINT offset = 0; + g_deviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); + g_deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); + g_deviceContext->Draw(4, 0); + vertexBuffer->Release(); + } + + g_deviceContext->OMSetRenderTargets(1, &g_outputRTV, nullptr); + } +} \ No newline at end of file diff --git a/Virtual Display Driver (HDR)/MttVDD/globals.h b/Virtual Display Driver (HDR)/MttVDD/globals.h new file mode 100644 index 00000000..5455d51f --- /dev/null +++ b/Virtual Display Driver (HDR)/MttVDD/globals.h @@ -0,0 +1,11 @@ +#ifndef GLOBALS_H +#define GLOBALS_H + +#include // For std::wstring + +// Declare global shader name set by driver.cpp +extern std::wstring ShaderShortName; +extern std::wstring shaderPathfile; + + +#endif // GLOBALS_H \ No newline at end of file diff --git a/Virtual Display Driver (HDR)/vdd_settings.xml b/Virtual Display Driver (HDR)/vdd_settings.xml index d70a01d7..71e2af8a 100644 --- a/Virtual Display Driver (HDR)/vdd_settings.xml +++ b/Virtual Display Driver (HDR)/vdd_settings.xml @@ -91,7 +91,16 @@ false + true + false + false + + + + x-desc + false + CRT \ No newline at end of file