diff --git a/bitmaps_png/CMakeLists.txt b/bitmaps_png/CMakeLists.txt index 79d2b3118e..7cb83b1b8b 100644 --- a/bitmaps_png/CMakeLists.txt +++ b/bitmaps_png/CMakeLists.txt @@ -381,6 +381,7 @@ set( BMAPS_MID pad_enumerate pad_number pads_mask_layers + pads_remove path pagelayout_load pagelayout_normal_view_mode @@ -556,6 +557,9 @@ set( BMAPS_BIG ) set( BMAPS_OTHER + pads_remove_unused + pads_remove_unused_keep_bottom + pads_reset_unused stroke_dash stroke_dashdot stroke_dot diff --git a/bitmaps_png/cpp_26/pads_remove.cpp b/bitmaps_png/cpp_26/pads_remove.cpp new file mode 100644 index 0000000000..a065f8a792 --- /dev/null +++ b/bitmaps_png/cpp_26/pads_remove.cpp @@ -0,0 +1,60 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x02, 0xb2, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xe5, 0x55, 0x4b, 0x4f, 0x53, + 0x61, 0x10, 0xfd, 0x4a, 0x5f, 0x50, 0x62, 0xa9, 0x09, 0x94, 0x10, 0x53, 0x5a, 0x0a, 0xa1, 0xcd, + 0xe5, 0xa5, 0x48, 0x4a, 0xe8, 0x8a, 0x94, 0x0d, 0x2c, 0xc4, 0xbd, 0xee, 0xd4, 0x18, 0x11, 0x37, + 0xfe, 0x02, 0xfb, 0x14, 0xe4, 0x51, 0x0a, 0xa5, 0x22, 0x09, 0x0d, 0x08, 0x26, 0xec, 0x5c, 0x91, + 0xf0, 0x0b, 0x94, 0x8d, 0x61, 0xe1, 0x42, 0x34, 0x08, 0x6e, 0x54, 0x76, 0x4a, 0x43, 0x0b, 0x8d, + 0xd0, 0x3b, 0x9e, 0xb9, 0x52, 0x22, 0x55, 0x11, 0x8c, 0x90, 0x28, 0x93, 0x9c, 0xdc, 0xc9, 0x77, + 0x67, 0xe6, 0x7c, 0x77, 0xd2, 0x9e, 0x23, 0xc4, 0xaf, 0xc2, 0x2b, 0x24, 0xe0, 0x86, 0xda, 0xab, + 0x1e, 0xd3, 0x05, 0x75, 0x0b, 0x5a, 0xbf, 0x76, 0x59, 0xe3, 0xd7, 0x7c, 0x54, 0xfb, 0xd4, 0x9f, + 0x19, 0xc8, 0x3f, 0xf0, 0x99, 0x2e, 0xa0, 0x5b, 0xe0, 0x1a, 0xae, 0x55, 0x7a, 0x0e, 0x1d, 0x3e, + 0x71, 0x19, 0x03, 0x5e, 0x63, 0x40, 0xb2, 0x6c, 0xb0, 0x2c, 0xe9, 0x8c, 0x39, 0xa9, 0x69, 0xa2, + 0x89, 0xdc, 0x53, 0x6e, 0x6a, 0x99, 0x6c, 0xa1, 0xda, 0xf1, 0x5a, 0x92, 0x1e, 0x4a, 0xd4, 0x30, + 0xde, 0x40, 0x8d, 0x13, 0x8d, 0x54, 0xf7, 0xa8, 0x8e, 0x2a, 0xa3, 0x95, 0x64, 0xee, 0x37, 0xa7, + 0xb4, 0x01, 0x6d, 0x0a, 0x97, 0x58, 0x11, 0x7e, 0x71, 0x13, 0xa4, 0xf6, 0x3d, 0xf4, 0x8a, 0xa2, + 0xfd, 0x24, 0x41, 0x71, 0x4e, 0xed, 0x57, 0x6f, 0xba, 0x26, 0x5c, 0xd4, 0x3e, 0xdb, 0x4e, 0x1d, + 0xb3, 0x1d, 0x7b, 0xc0, 0xc0, 0x4d, 0x95, 0x57, 0x25, 0x8b, 0x7b, 0x82, 0xd0, 0x7c, 0x54, 0x7c, + 0xca, 0x5d, 0x57, 0x3e, 0x88, 0xde, 0x97, 0x0e, 0x94, 0x26, 0x73, 0xc9, 0x9a, 0xe3, 0xcd, 0xb2, + 0xb1, 0xc7, 0xb8, 0x91, 0xe7, 0xcb, 0x93, 0x55, 0x3e, 0x15, 0x23, 0x83, 0x95, 0xca, 0x86, 0x90, + 0x81, 0xb2, 0xd0, 0x07, 0xf5, 0x84, 0x7e, 0x19, 0x73, 0xb6, 0xb1, 0x99, 0x55, 0x3c, 0x57, 0x80, + 0xb7, 0xc0, 0xd3, 0x1f, 0x57, 0x87, 0xcf, 0xc4, 0xb0, 0x6e, 0xac, 0x6f, 0x09, 0x5f, 0xb0, 0x6d, + 0x08, 0x1a, 0x12, 0xe6, 0x41, 0x73, 0xc2, 0x12, 0xb1, 0x6c, 0xd9, 0x47, 0xec, 0x3b, 0x8e, 0x51, + 0x07, 0x55, 0xc7, 0xaa, 0x89, 0x73, 0x4b, 0xd8, 0xb2, 0x65, 0x1e, 0x30, 0x27, 0xf2, 0x83, 0xf9, + 0x09, 0xae, 0x45, 0xcf, 0x2b, 0xf4, 0x76, 0x61, 0xb0, 0x51, 0x1c, 0x29, 0x46, 0x84, 0x1e, 0x4d, + 0xe7, 0x81, 0x2b, 0xb8, 0x61, 0x97, 0x7d, 0xd8, 0xfe, 0xa0, 0xa8, 0xa7, 0x88, 0x4c, 0xbd, 0x26, + 0xb2, 0x45, 0x6c, 0xbd, 0x7c, 0xa6, 0xbc, 0xfb, 0x56, 0xa3, 0x13, 0x7f, 0x2b, 0xd2, 0xe9, 0xb4, + 0xdd, 0x3a, 0x64, 0xa5, 0x8a, 0xe1, 0x0a, 0x99, 0x88, 0xac, 0xe2, 0xb8, 0x02, 0xc3, 0x6d, 0x35, + 0xb1, 0x1a, 0x92, 0x62, 0x12, 0x71, 0x7e, 0x9c, 0x44, 0xa6, 0x99, 0x97, 0x33, 0x33, 0xc0, 0x13, + 0xe4, 0x67, 0x8f, 0x8d, 0xe8, 0xc4, 0x56, 0xf7, 0xff, 0x11, 0x9d, 0xe4, 0x8f, 0xe1, 0xcc, 0xfc, + 0xf2, 0x7c, 0x78, 0x6e, 0x79, 0x6e, 0x88, 0xf3, 0x7f, 0x6c, 0x75, 0x5e, 0xe1, 0xc4, 0x3f, 0xff, + 0x3a, 0xd4, 0x78, 0x14, 0x4a, 0xfe, 0x1c, 0xf2, 0xf2, 0xc6, 0x39, 0xea, 0x5c, 0x53, 0x88, 0x22, + 0x15, 0xe4, 0x88, 0x3a, 0xd6, 0xf8, 0x0c, 0x7a, 0xf7, 0x0c, 0xfa, 0x16, 0x45, 0xfd, 0x35, 0xa5, + 0xe7, 0x80, 0x81, 0x46, 0xc8, 0xfa, 0xc5, 0x3d, 0x04, 0xc4, 0x5d, 0x34, 0xae, 0x6a, 0x02, 0x9a, + 0xcd, 0xe2, 0xbe, 0xe2, 0x94, 0x6d, 0xd8, 0x46, 0xd2, 0x98, 0x44, 0xf5, 0xe3, 0xf5, 0xd4, 0x36, + 0xdd, 0x46, 0x59, 0xa2, 0xce, 0xd9, 0x4e, 0x72, 0x4f, 0xba, 0x15, 0x0b, 0x61, 0x2b, 0x81, 0xa5, + 0x6c, 0xc0, 0x26, 0x92, 0xac, 0x77, 0xb8, 0xe0, 0xa5, 0x9f, 0x11, 0xbd, 0x3b, 0xac, 0xdc, 0x33, + 0x41, 0x96, 0x88, 0x9f, 0x55, 0xd1, 0xaa, 0xf4, 0xf7, 0x56, 0xc2, 0x6a, 0xcf, 0xc4, 0x6c, 0x35, + 0x22, 0x24, 0xca, 0x72, 0x89, 0xd8, 0x1d, 0x5f, 0xec, 0x62, 0x11, 0x2a, 0xfc, 0x05, 0xb7, 0xca, + 0x14, 0x86, 0x0a, 0x09, 0xb6, 0x40, 0x2c, 0xa2, 0x0c, 0xd8, 0x80, 0x5c, 0x10, 0x2a, 0xd8, 0xf1, + 0x3c, 0xf6, 0x64, 0x3c, 0x53, 0x9e, 0x4c, 0x49, 0x7f, 0x49, 0xaa, 0x75, 0xba, 0x75, 0x1f, 0x89, + 0x2b, 0xee, 0x22, 0xb6, 0x18, 0xb6, 0x1a, 0x45, 0x90, 0x0f, 0x0c, 0xb6, 0x09, 0x7f, 0xde, 0x1d, + 0x76, 0x59, 0xc5, 0x26, 0xee, 0x1b, 0xd6, 0xd1, 0x9c, 0x28, 0x8f, 0x94, 0xb3, 0x4d, 0x64, 0x1c, + 0x31, 0x07, 0x31, 0x38, 0xe7, 0x33, 0xb6, 0x10, 0x5c, 0x62, 0x7d, 0xd7, 0x26, 0x96, 0xd0, 0x7b, + 0xfb, 0xcf, 0x6c, 0xc2, 0x2f, 0x2e, 0x60, 0xe7, 0x57, 0x81, 0x6e, 0x6b, 0xd8, 0xda, 0x97, 0x63, + 0x13, 0xdd, 0xca, 0x3b, 0xae, 0xf9, 0xed, 0x17, 0x9c, 0x76, 0x09, 0xd2, 0xc7, 0x17, 0xe3, 0xb7, + 0x18, 0x9c, 0x8b, 0x53, 0x1d, 0x5f, 0x01, 0xf4, 0xbb, 0xc2, 0x3a, 0x41, 0xf8, 0xc5, 0xf2, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE pads_remove_xpm[1] = {{ png, sizeof( png ), "pads_remove_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_other/pads_remove_unused.cpp b/bitmaps_png/cpp_other/pads_remove_unused.cpp new file mode 100644 index 0000000000..e03cad22c9 --- /dev/null +++ b/bitmaps_png/cpp_other/pads_remove_unused.cpp @@ -0,0 +1,174 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x96, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x71, + 0xe2, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x55, 0x2d, 0x00, 0x00, 0x55, + 0x2d, 0x01, 0x6a, 0xe7, 0x70, 0xe8, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, + 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, + 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x52, 0x74, + 0x45, 0x58, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x43, 0x43, 0x20, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x41, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x79, 0x2d, 0x73, 0x61, + 0x2f, 0x34, 0x2e, 0x30, 0x2f, 0xc3, 0x54, 0x62, 0x05, 0x00, 0x00, 0x09, 0x31, 0x49, 0x44, 0x41, + 0x54, 0x78, 0x9c, 0xed, 0xdd, 0x7d, 0x8c, 0x1c, 0x75, 0x1d, 0xc7, 0xf1, 0xf7, 0x6f, 0xf6, 0xe1, + 0x7a, 0xcf, 0xbd, 0x72, 0xd4, 0x52, 0xb0, 0x14, 0xaf, 0x0f, 0x16, 0xc1, 0xb4, 0x8a, 0x7d, 0x10, + 0x1a, 0x9b, 0x88, 0xf8, 0x47, 0xd3, 0x14, 0x2d, 0x0f, 0x41, 0x34, 0x20, 0x31, 0x6a, 0x62, 0xd0, + 0x40, 0x43, 0x78, 0xb0, 0x25, 0x63, 0x4b, 0x72, 0x1a, 0xff, 0x20, 0xa9, 0x8d, 0x06, 0xf9, 0x43, + 0x4c, 0x20, 0xa0, 0x92, 0x00, 0x06, 0x48, 0x11, 0x42, 0x1a, 0xb1, 0x55, 0x8f, 0x5a, 0x1a, 0x44, + 0x4b, 0x6b, 0x4f, 0xe8, 0x95, 0x87, 0x4b, 0x7b, 0x57, 0x5a, 0xae, 0x77, 0x7b, 0xb7, 0x7b, 0x3b, + 0x3f, 0xff, 0xd8, 0x23, 0x1c, 0xbb, 0x53, 0x6f, 0x9f, 0x86, 0xd9, 0xd9, 0xfd, 0xbc, 0x92, 0xfd, + 0xe3, 0x6e, 0x27, 0xb3, 0xdf, 0x9d, 0x7c, 0x66, 0xe6, 0xb7, 0x33, 0xbf, 0xdf, 0x6f, 0x40, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x1a, 0x97, 0x09, 0xbb, 0x80, 0x9a, 0xf2, 0x00, 0x09, 0x86, 0xe8, + 0x26, 0x4b, 0x37, 0x90, 0xc4, 0xa3, 0x09, 0x68, 0x99, 0x7a, 0xb7, 0x0d, 0x83, 0xc5, 0x32, 0x0a, + 0x80, 0x43, 0x0a, 0x18, 0x07, 0xd2, 0xc4, 0x18, 0xa2, 0x9b, 0x21, 0xbe, 0x47, 0x26, 0x9c, 0xc2, + 0x6b, 0x4f, 0x63, 0x05, 0xcb, 0xa5, 0x03, 0xb8, 0x18, 0x43, 0x0f, 0xb0, 0x08, 0x4b, 0x0f, 0xf0, + 0x29, 0xe0, 0x5c, 0x60, 0x2e, 0x30, 0xbb, 0xc2, 0x4f, 0x38, 0x05, 0x1c, 0x07, 0x4e, 0x00, 0xfd, + 0x40, 0x3f, 0x86, 0x7e, 0x2c, 0xfd, 0x34, 0xf3, 0x2f, 0xee, 0x64, 0xa4, 0xc2, 0xf5, 0x47, 0x46, + 0x7d, 0x07, 0x6b, 0x3b, 0xcb, 0xf0, 0x58, 0x87, 0x65, 0x25, 0xb0, 0x12, 0xf8, 0x34, 0xe0, 0x84, + 0x54, 0x8d, 0x07, 0x1c, 0x04, 0xfa, 0xa6, 0x5e, 0x2f, 0xe2, 0x72, 0x38, 0xa4, 0x5a, 0x02, 0x57, + 0x7f, 0xc1, 0xda, 0xc6, 0x2a, 0x3c, 0x36, 0x01, 0x1b, 0x81, 0x25, 0x61, 0x97, 0x33, 0x83, 0xd7, + 0x81, 0xa7, 0x80, 0xc7, 0x71, 0xd9, 0x17, 0x76, 0x31, 0xd5, 0x54, 0x3f, 0xc1, 0x72, 0xb9, 0x12, + 0xf8, 0x09, 0xf0, 0xc5, 0xb0, 0x4b, 0x29, 0xd3, 0x21, 0x0c, 0x4f, 0x62, 0xd9, 0x8f, 0xc1, 0x86, + 0x5d, 0x4c, 0xd1, 0x2c, 0x29, 0x1c, 0x46, 0x88, 0xf3, 0x1a, 0xf7, 0x30, 0xfc, 0xc1, 0xbf, 0xa3, + 0x1f, 0xac, 0xed, 0x2c, 0x25, 0xcb, 0x6f, 0x81, 0x55, 0x61, 0x97, 0xd2, 0xe0, 0x32, 0xc0, 0xe3, + 0x24, 0xd8, 0xcc, 0x8f, 0x79, 0x37, 0xda, 0xc1, 0x72, 0x59, 0x0d, 0x3c, 0x07, 0x74, 0x54, 0x75, + 0xbd, 0x96, 0x7a, 0xd8, 0xe5, 0xc2, 0xf2, 0x16, 0xf0, 0xa5, 0xe8, 0x6e, 0xbe, 0x5e, 0xba, 0x98, + 0xe0, 0x10, 0xb9, 0x5f, 0x74, 0x52, 0x5b, 0xfe, 0x1e, 0xd6, 0x2f, 0xa4, 0xca, 0x4d, 0xb0, 0x19, + 0x85, 0xaa, 0x56, 0xad, 0x8a, 0x6e, 0xb0, 0x60, 0x6d, 0xd8, 0x05, 0xc8, 0xd9, 0x45, 0x39, 0x58, + 0x73, 0xaa, 0xbe, 0xc6, 0xe8, 0xfc, 0x16, 0xab, 0x79, 0x51, 0x0e, 0xd6, 0xab, 0x55, 0x5f, 0x63, + 0x74, 0x5b, 0x9c, 0x35, 0x27, 0xca, 0xc1, 0x7a, 0x30, 0xec, 0x02, 0xe4, 0xec, 0x62, 0x61, 0x17, + 0x50, 0xb6, 0xdd, 0xbc, 0xc9, 0x3a, 0xba, 0xc9, 0xdd, 0xaa, 0x91, 0xda, 0xf2, 0x7c, 0x74, 0x83, + 0x05, 0xb0, 0x9b, 0x5d, 0xac, 0xa3, 0x19, 0x58, 0x83, 0x4e, 0x64, 0xb5, 0xe2, 0x20, 0x70, 0x75, + 0xb4, 0x83, 0x05, 0xb0, 0x9b, 0x17, 0x58, 0xc7, 0x8b, 0xc0, 0x42, 0xe0, 0xa2, 0xaa, 0xae, 0x5b, + 0x17, 0x4a, 0x4b, 0x71, 0x1a, 0xf8, 0x15, 0xb3, 0xf8, 0x16, 0x5b, 0x18, 0xae, 0xaf, 0xcd, 0x96, + 0xbb, 0x01, 0x7d, 0x1b, 0xb0, 0x1e, 0x68, 0x0b, 0xbb, 0x9c, 0x22, 0x8d, 0x01, 0x7f, 0xc6, 0xe1, + 0x11, 0x72, 0x7b, 0x7b, 0xf4, 0x78, 0xa4, 0x38, 0x8f, 0xff, 0x4c, 0xef, 0x8f, 0x56, 0x5f, 0xc1, + 0xfa, 0x80, 0xcb, 0x2c, 0x0c, 0x5f, 0xc6, 0xb2, 0x11, 0x58, 0x07, 0x2c, 0x0e, 0xb9, 0xa2, 0xe9, + 0x2c, 0x70, 0x18, 0xd8, 0x8d, 0xe1, 0x29, 0xba, 0x78, 0x91, 0x1f, 0x32, 0x11, 0x76, 0x51, 0xd5, + 0x56, 0x9f, 0xc1, 0xca, 0xd7, 0x4b, 0x17, 0xe9, 0xa9, 0x3e, 0x59, 0x96, 0xcf, 0x00, 0x8b, 0x80, + 0x1e, 0x2a, 0xef, 0xd8, 0x37, 0x93, 0x53, 0xc0, 0x11, 0x72, 0x1d, 0xfe, 0xfe, 0x09, 0xf4, 0x61, + 0x79, 0x19, 0x97, 0x53, 0x01, 0x7f, 0x6e, 0xe8, 0x1a, 0x23, 0x58, 0x67, 0xe3, 0xd2, 0x8d, 0x43, + 0x0f, 0x96, 0xb9, 0x40, 0x37, 0xd0, 0xbd, 0x61, 0xc9, 0x86, 0xaf, 0x77, 0x36, 0x75, 0xae, 0x7c, + 0xf8, 0xd5, 0x87, 0x8b, 0xba, 0x14, 0x73, 0xf3, 0xf2, 0x9b, 0xed, 0xf1, 0x33, 0xc7, 0xff, 0xf2, + 0xec, 0x91, 0x67, 0xff, 0x08, 0x0c, 0x4d, 0xbd, 0x8e, 0x93, 0xa4, 0x7f, 0x7a, 0x37, 0x92, 0x46, + 0xd3, 0xd8, 0xc1, 0xf2, 0x61, 0xad, 0xdd, 0x36, 0x92, 0x1e, 0xb9, 0xbb, 0xa3, 0xb7, 0x23, 0x5e, + 0xcc, 0xf2, 0xe9, 0xad, 0x69, 0x2f, 0xe1, 0x24, 0xb6, 0x18, 0x63, 0x7a, 0x83, 0xae, 0x2d, 0x4a, + 0xa2, 0x7c, 0x81, 0x54, 0x6a, 0x98, 0x82, 0x25, 0x81, 0x50, 0xb0, 0xfc, 0x58, 0x35, 0x11, 0x2a, + 0xa5, 0x60, 0x15, 0x2a, 0xa9, 0x8f, 0x83, 0xb5, 0x16, 0xd4, 0x56, 0x2d, 0xa0, 0x60, 0x49, 0x20, + 0x14, 0x2c, 0x09, 0x84, 0x82, 0xe5, 0xc3, 0x18, 0x9d, 0xd9, 0x2a, 0xa5, 0x60, 0x15, 0x52, 0x1b, + 0xab, 0x0a, 0x14, 0x2c, 0x09, 0x84, 0x82, 0x25, 0x81, 0x50, 0xb0, 0x7c, 0x18, 0x9d, 0xd9, 0x2a, + 0xa6, 0x60, 0x55, 0xc8, 0xa2, 0x36, 0x96, 0x1f, 0x05, 0x4b, 0x02, 0xa1, 0x60, 0x49, 0x20, 0x14, + 0x2c, 0x09, 0x84, 0x82, 0x55, 0xc8, 0x96, 0x71, 0x81, 0x54, 0x6d, 0xac, 0x3c, 0x0a, 0x56, 0xe5, + 0x34, 0x30, 0xdf, 0x87, 0x82, 0x25, 0x81, 0x50, 0xb0, 0x0a, 0xd9, 0x44, 0x2c, 0x61, 0xae, 0x58, + 0x70, 0x05, 0x6d, 0xc9, 0xb3, 0x8f, 0x20, 0xeb, 0x9a, 0xd5, 0xc5, 0xfa, 0xc5, 0xeb, 0x89, 0x39, + 0x31, 0x83, 0x4e, 0x85, 0x05, 0x8a, 0xea, 0xd7, 0xdd, 0x60, 0x0e, 0xc4, 0x4c, 0x6c, 0xfc, 0xa5, + 0x6f, 0xbf, 0xd4, 0x02, 0x30, 0x32, 0x31, 0x92, 0x3d, 0x93, 0x39, 0xe3, 0x8d, 0x65, 0xc6, 0x48, + 0x67, 0xd3, 0xb4, 0x26, 0x5b, 0x69, 0x4f, 0xb4, 0x9b, 0xd9, 0xcd, 0xb3, 0x63, 0x06, 0x63, 0xb2, + 0x5e, 0x36, 0x05, 0x1c, 0x08, 0xb9, 0xe6, 0x9a, 0xa3, 0x3d, 0xcd, 0x87, 0xb5, 0xb6, 0x89, 0xdc, + 0xb0, 0xfd, 0x65, 0xc0, 0xf9, 0xc0, 0x2c, 0xa0, 0x7d, 0xea, 0xed, 0x71, 0x20, 0x05, 0x1c, 0x05, + 0xf6, 0x00, 0xaf, 0x19, 0x63, 0xbc, 0x30, 0xea, 0x14, 0x69, 0x38, 0x3a, 0x62, 0xe5, 0xb1, 0xd6, + 0x2e, 0x07, 0xbe, 0x4f, 0x69, 0xdb, 0xe6, 0x09, 0x63, 0xcc, 0xae, 0x80, 0x4a, 0x8a, 0x24, 0xb5, + 0xb1, 0x0a, 0x6d, 0xb2, 0xd8, 0xef, 0x1e, 0x7b, 0xff, 0xd8, 0xe4, 0x4c, 0x0b, 0x8e, 0x4f, 0x8e, + 0xdb, 0xc5, 0x5d, 0x8b, 0x93, 0xc6, 0x98, 0x37, 0x00, 0x05, 0x6b, 0x1a, 0x05, 0xcb, 0xc7, 0xc8, + 0xc4, 0x48, 0xf6, 0xc2, 0xfb, 0x2f, 0x4c, 0x14, 0xb3, 0x6c, 0x66, 0x6b, 0xc6, 0x8b, 0x1b, 0x6d, + 0xc6, 0x7c, 0xba, 0xdc, 0x20, 0x81, 0x50, 0xb0, 0x24, 0x10, 0x0a, 0x96, 0x0f, 0xdd, 0x2b, 0xac, + 0x9c, 0x82, 0x55, 0xa8, 0xb4, 0xc1, 0x14, 0xba, 0x55, 0xe8, 0x4b, 0xc1, 0x92, 0x40, 0x28, 0x58, + 0x12, 0x08, 0x05, 0xcb, 0x4f, 0xe9, 0x93, 0x82, 0xa8, 0x8d, 0x95, 0x47, 0xc1, 0x2a, 0x54, 0xce, + 0x80, 0x55, 0xc9, 0xa3, 0x60, 0x49, 0x20, 0x14, 0x2c, 0x09, 0x84, 0x82, 0xe5, 0x43, 0x93, 0x82, + 0x54, 0x4e, 0xc1, 0x2a, 0xa4, 0x49, 0x41, 0xaa, 0x40, 0xc1, 0x92, 0x40, 0x28, 0x58, 0x12, 0x08, + 0x05, 0xcb, 0x87, 0x26, 0x05, 0xa9, 0x9c, 0x82, 0x55, 0x21, 0x4d, 0x0a, 0xe2, 0x4f, 0xc1, 0x92, + 0x40, 0x28, 0x58, 0x12, 0x08, 0x05, 0xab, 0x50, 0x39, 0x73, 0x37, 0x48, 0x1e, 0x05, 0xab, 0x72, + 0x7a, 0x0e, 0xab, 0x0f, 0x05, 0x4b, 0x02, 0xa1, 0x60, 0x49, 0x20, 0x34, 0x6e, 0xa9, 0x90, 0x4d, + 0x38, 0x09, 0xe7, 0x96, 0x15, 0xb7, 0x70, 0x60, 0xf0, 0x00, 0x03, 0xa7, 0x07, 0x48, 0x65, 0x52, + 0x8c, 0x66, 0x46, 0x01, 0x48, 0x38, 0x09, 0xda, 0x92, 0x6d, 0x2c, 0xed, 0x5e, 0xca, 0x9a, 0x0b, + 0xd6, 0x10, 0x77, 0xe2, 0x0e, 0x3a, 0x15, 0xca, 0x4c, 0xac, 0xb5, 0x97, 0xa7, 0xb3, 0xe9, 0x7f, + 0x5b, 0x1f, 0x9e, 0xe7, 0x7d, 0xf4, 0x6f, 0xeb, 0x4d, 0x66, 0xbc, 0xcc, 0x7e, 0x6b, 0xed, 0xe5, + 0x61, 0xd7, 0x5d, 0x6b, 0xb4, 0xa7, 0x9d, 0x85, 0xb5, 0xf6, 0x3c, 0x72, 0x93, 0x82, 0xcc, 0x03, + 0xda, 0x80, 0x0e, 0x20, 0x06, 0xbc, 0x07, 0x4c, 0x00, 0x03, 0x40, 0x9f, 0x31, 0x66, 0x34, 0xb4, + 0x22, 0x45, 0x1a, 0x8d, 0x8e, 0x58, 0x79, 0xac, 0xb5, 0x49, 0xe0, 0x12, 0x4a, 0xdb, 0x36, 0x6f, + 0x1b, 0x63, 0x06, 0x03, 0x2a, 0x49, 0xea, 0x81, 0xb5, 0xf6, 0x2e, 0xbf, 0xf6, 0xd5, 0x0c, 0xee, + 0x0a, 0xbb, 0xee, 0x5a, 0xa3, 0x5f, 0x85, 0x85, 0x5a, 0xc7, 0x32, 0x63, 0xd9, 0x8d, 0x8f, 0x6d, + 0x8c, 0x15, 0xb3, 0xf0, 0xae, 0x1b, 0x77, 0xd9, 0x98, 0x53, 0xd4, 0xa2, 0x0d, 0x45, 0xc1, 0xf2, + 0x31, 0xe9, 0x4d, 0xda, 0x17, 0xfe, 0xfb, 0x42, 0x51, 0xcb, 0x5a, 0x34, 0x4c, 0xc7, 0x8f, 0x2e, + 0x90, 0x4a, 0x20, 0x14, 0x2c, 0x1f, 0xba, 0x09, 0x5d, 0x39, 0x05, 0xab, 0x50, 0x39, 0x93, 0x82, + 0x28, 0x89, 0x79, 0x14, 0x2c, 0x09, 0x84, 0x82, 0x25, 0x81, 0x50, 0xb0, 0xfc, 0x94, 0x3e, 0x29, + 0x88, 0xe4, 0x51, 0xb0, 0x0a, 0x69, 0xc0, 0x6a, 0x15, 0x28, 0x58, 0x12, 0x08, 0x05, 0x4b, 0x02, + 0xa1, 0x60, 0xf9, 0xd0, 0x75, 0xac, 0xca, 0x29, 0x58, 0x85, 0xd4, 0xc6, 0xaa, 0x82, 0xc6, 0xbd, + 0x57, 0xe8, 0x32, 0x1f, 0x87, 0x1e, 0x2c, 0x0b, 0x81, 0x6e, 0x2c, 0xdd, 0xc0, 0xb9, 0x0f, 0xec, + 0x7b, 0x60, 0xed, 0x0d, 0x97, 0xde, 0x50, 0xf4, 0x0e, 0x67, 0xb1, 0x66, 0x67, 0xdf, 0xce, 0x6f, + 0xe0, 0xb2, 0x00, 0x38, 0x01, 0x0c, 0x61, 0x18, 0xc6, 0xf2, 0x06, 0x70, 0x04, 0x97, 0x86, 0xec, + 0x4e, 0x53, 0xff, 0xc1, 0xfa, 0x19, 0xed, 0xa4, 0xf8, 0x3c, 0x86, 0x55, 0x58, 0xbe, 0x00, 0x2c, + 0x01, 0x7a, 0x80, 0x16, 0x7c, 0x1e, 0x06, 0x37, 0x38, 0x3a, 0x58, 0xd2, 0x14, 0xdb, 0x16, 0x6b, + 0x06, 0xcf, 0x0c, 0x5e, 0x0c, 0x5c, 0x3c, 0xed, 0x9f, 0x1f, 0x72, 0x19, 0x05, 0xfa, 0x81, 0x43, + 0x40, 0x1f, 0xd0, 0x47, 0x2b, 0xff, 0xe0, 0x0e, 0xea, 0xba, 0xe7, 0x69, 0x3d, 0x06, 0xcb, 0xb0, + 0x8d, 0xcb, 0xf0, 0xb8, 0x1a, 0x58, 0x4f, 0x8a, 0x4b, 0x80, 0x58, 0x88, 0xd3, 0xb1, 0xb7, 0x02, + 0x9f, 0x9d, 0x7a, 0x5d, 0x0b, 0xc0, 0x28, 0x59, 0x5c, 0x5e, 0x05, 0x9e, 0xc6, 0xe1, 0x29, 0xee, + 0x65, 0x3f, 0x75, 0xf6, 0x6c, 0xe9, 0xfa, 0x09, 0x96, 0xcb, 0x5c, 0xe0, 0x47, 0xc0, 0x4d, 0x78, + 0x9c, 0x5f, 0xc9, 0xaa, 0x4a, 0x9d, 0x6d, 0xa6, 0x8c, 0xc6, 0x7e, 0x0c, 0x58, 0x01, 0xac, 0xc0, + 0x63, 0x2b, 0x2e, 0x03, 0xc0, 0x43, 0x24, 0xd9, 0xc1, 0x3d, 0x0c, 0x97, 0xba, 0xb2, 0x5a, 0xf4, + 0x61, 0xb0, 0x76, 0xd0, 0xc4, 0x7b, 0x7c, 0x07, 0xcb, 0x35, 0xc0, 0x52, 0x72, 0x4f, 0x15, 0x8d, + 0x02, 0x03, 0x34, 0x03, 0x49, 0x42, 0x68, 0x44, 0x57, 0x69, 0xd6, 0xe4, 0x05, 0xc0, 0xbd, 0xa4, + 0xb9, 0x1d, 0x97, 0x07, 0x81, 0xfb, 0x70, 0x39, 0x59, 0x8d, 0x15, 0x87, 0x25, 0x17, 0x2c, 0x97, + 0x85, 0x9c, 0xe4, 0x19, 0xa6, 0xb7, 0x13, 0x24, 0x0c, 0x6d, 0xc0, 0x6d, 0xc0, 0xf5, 0xb8, 0x5c, + 0x8b, 0xcb, 0xde, 0xb0, 0x0b, 0x2a, 0x97, 0xc3, 0xcf, 0x69, 0x25, 0xf7, 0x10, 0x47, 0x85, 0xaa, + 0x76, 0xcc, 0x07, 0x9e, 0xc3, 0xe5, 0xb2, 0xb0, 0x0b, 0x29, 0x97, 0xc3, 0x28, 0xb7, 0x92, 0x3b, + 0xf5, 0x09, 0xb9, 0x53, 0x5b, 0x8d, 0x5c, 0x20, 0x6d, 0x03, 0x7e, 0xcd, 0xef, 0x89, 0x64, 0x87, + 0x7a, 0x07, 0xb8, 0x3e, 0xec, 0x22, 0xa2, 0xcc, 0x62, 0x3f, 0x6c, 0xec, 0x17, 0xdb, 0xdc, 0x2a, + 0xbe, 0x59, 0xb6, 0x82, 0xd7, 0x59, 0x59, 0x7a, 0x55, 0xe1, 0x73, 0xd0, 0xd1, 0xaa, 0x7a, 0x8a, + 0x3d, 0xd0, 0x95, 0x72, 0x40, 0xb4, 0x2c, 0x2f, 0xa7, 0x94, 0xb0, 0x39, 0x40, 0x3a, 0xec, 0x22, + 0x6a, 0x89, 0xc5, 0x12, 0x33, 0x31, 0x9a, 0x62, 0x4d, 0x33, 0x2e, 0xdb, 0x9e, 0x6c, 0xc7, 0x60, + 0x82, 0x3d, 0x75, 0xda, 0x68, 0x5e, 0x7e, 0x88, 0x03, 0x2f, 0x03, 0x57, 0x86, 0x5d, 0x48, 0xad, + 0x38, 0x99, 0x3a, 0x49, 0x4b, 0xa2, 0x85, 0xe1, 0x3b, 0x87, 0x39, 0x78, 0xe2, 0x20, 0x03, 0xa7, + 0x07, 0x18, 0xcb, 0x8c, 0x31, 0x96, 0x19, 0x23, 0x6b, 0xb3, 0x24, 0x63, 0x49, 0x3a, 0x9a, 0x3a, + 0x58, 0x3c, 0x67, 0x31, 0x97, 0x7e, 0xe2, 0x52, 0x62, 0x26, 0xc6, 0xc9, 0x54, 0x60, 0x57, 0x06, + 0xb2, 0xc0, 0xdf, 0x82, 0x5a, 0x79, 0x90, 0x0c, 0x2e, 0xd7, 0x00, 0x7f, 0x08, 0xbb, 0x90, 0x5a, + 0xe1, 0x18, 0x87, 0xd5, 0x17, 0xac, 0xe6, 0xaa, 0x9e, 0xab, 0x58, 0xd6, 0xbd, 0x8c, 0x79, 0x6d, + 0xf3, 0x68, 0x4d, 0xb6, 0xd2, 0xd9, 0xd4, 0x89, 0x63, 0x1c, 0x4e, 0x4f, 0x9c, 0x66, 0x62, 0x72, + 0x82, 0xa3, 0xa7, 0x8e, 0xb2, 0xf7, 0xad, 0xbd, 0xec, 0x19, 0xd8, 0xc3, 0x2b, 0x83, 0xaf, 0xe0, + 0x59, 0x9f, 0xfb, 0x43, 0x7e, 0x4a, 0x9b, 0xff, 0xef, 0x97, 0xb8, 0xfc, 0xa0, 0xbc, 0x6f, 0x12, + 0xae, 0xdc, 0x57, 0x74, 0xf9, 0x1d, 0x70, 0x5d, 0xb8, 0xa5, 0x48, 0x9e, 0xe7, 0xe9, 0x60, 0x23, + 0xb7, 0x93, 0x0a, 0xbb, 0x90, 0x72, 0xe4, 0xee, 0xe2, 0x9f, 0xc7, 0x37, 0x81, 0x9d, 0xe0, 0x77, + 0x5b, 0x56, 0x3e, 0x66, 0x1e, 0x70, 0x3f, 0x73, 0xd8, 0x10, 0xd5, 0x50, 0x41, 0xfe, 0x41, 0xd9, + 0x65, 0x11, 0x86, 0xaf, 0x61, 0xe9, 0x29, 0x78, 0xaf, 0x96, 0x19, 0xba, 0xa6, 0x7e, 0x3d, 0xf5, + 0x10, 0x46, 0x1f, 0xb3, 0xea, 0x4c, 0x6f, 0x9b, 0x01, 0x1e, 0x23, 0x46, 0x2f, 0x5b, 0x39, 0x58, + 0xf1, 0xda, 0x42, 0x16, 0x9d, 0xf0, 0x14, 0x63, 0x3b, 0x17, 0x91, 0xe5, 0x46, 0xe0, 0x6a, 0xe0, + 0x73, 0xd4, 0xfe, 0xf7, 0xb3, 0xc0, 0x3e, 0x0c, 0x4f, 0x60, 0x79, 0x64, 0xea, 0x66, 0x74, 0x5d, + 0xa8, 0xf5, 0x0d, 0x5f, 0xbe, 0xfb, 0xf8, 0x24, 0x93, 0xac, 0x07, 0xd6, 0x00, 0x2b, 0xc9, 0x5d, + 0xaf, 0x0b, 0xfb, 0xfb, 0x7a, 0xc0, 0xeb, 0xe4, 0xfa, 0x65, 0xfd, 0x95, 0x38, 0xcf, 0xb0, 0x85, + 0xb7, 0x43, 0xae, 0x29, 0x10, 0x61, 0x6f, 0xe8, 0x8f, 0xcf, 0x4f, 0xe9, 0x64, 0xfc, 0x23, 0x1d, + 0xfd, 0x7a, 0x80, 0x45, 0xc0, 0x45, 0x40, 0x4b, 0x95, 0x3f, 0x6d, 0x14, 0xa6, 0x7a, 0x90, 0x42, + 0x3f, 0x86, 0x7e, 0x2c, 0x87, 0x80, 0x7d, 0xb8, 0xbc, 0x5f, 0xe5, 0xcf, 0xaa, 0x49, 0x8d, 0x13, + 0xac, 0xff, 0xc7, 0xa5, 0x85, 0x38, 0xe7, 0xe0, 0xd1, 0xbd, 0xe3, 0xab, 0x3b, 0xee, 0xe8, 0x6c, + 0xea, 0xbc, 0xee, 0xa6, 0x27, 0x6f, 0x2a, 0xea, 0x1e, 0xdd, 0xa3, 0x9b, 0x1e, 0xb5, 0xef, 0x8c, + 0xbc, 0xf3, 0x9b, 0xcd, 0x7f, 0xda, 0xfc, 0x0b, 0xe2, 0x0c, 0xd3, 0xc2, 0x50, 0x94, 0x1b, 0xdd, + 0xd5, 0xa2, 0x60, 0xe5, 0xb1, 0xd6, 0x6e, 0x1b, 0x49, 0x8f, 0xdc, 0xdd, 0xd1, 0xdb, 0x51, 0x54, + 0x27, 0xc8, 0xf4, 0xd6, 0xb4, 0x97, 0x70, 0x12, 0x5b, 0x8c, 0x31, 0xbd, 0x41, 0xd7, 0x16, 0x25, + 0x1a, 0xa5, 0x23, 0x81, 0x50, 0xb0, 0x24, 0x10, 0x0a, 0x96, 0x1f, 0x4d, 0x0a, 0x52, 0x31, 0x05, + 0xab, 0x90, 0x06, 0xac, 0x56, 0x81, 0x82, 0x25, 0x81, 0x50, 0xb0, 0x24, 0x10, 0x0a, 0x96, 0x04, + 0x42, 0xc1, 0xf2, 0x51, 0x46, 0x8f, 0x50, 0xb5, 0xb1, 0xf2, 0x28, 0x58, 0x85, 0xca, 0x69, 0xbc, + 0x4b, 0x1e, 0x05, 0x4b, 0x02, 0xa1, 0x60, 0x49, 0x20, 0x14, 0x2c, 0x1f, 0xa5, 0x4e, 0x0a, 0x82, + 0xda, 0x58, 0x05, 0x14, 0xac, 0x0a, 0x95, 0x32, 0x97, 0x56, 0x23, 0x51, 0xb0, 0x24, 0x10, 0x0a, + 0x96, 0x04, 0x42, 0xc1, 0x2a, 0x64, 0x6b, 0x64, 0x52, 0x90, 0x48, 0x53, 0xb0, 0x2a, 0x57, 0x9d, + 0x31, 0x3a, 0x75, 0x46, 0xc1, 0x92, 0x40, 0x28, 0x58, 0x85, 0x4a, 0x3a, 0x15, 0xea, 0x79, 0x85, + 0xfe, 0xea, 0x67, 0x72, 0xdb, 0xea, 0x49, 0x35, 0xc7, 0x9b, 0x63, 0x87, 0x6f, 0x3d, 0x3c, 0xb9, + 0xff, 0xdd, 0xfd, 0xf1, 0x63, 0xa7, 0x8f, 0xf9, 0x4e, 0x0a, 0xb2, 0xe4, 0x9c, 0x25, 0x76, 0xed, + 0x82, 0xb5, 0xd9, 0xe6, 0x78, 0x73, 0x1c, 0x34, 0x78, 0x22, 0x9f, 0xf6, 0xb4, 0x3c, 0xd6, 0xda, + 0x16, 0x60, 0x13, 0xf0, 0x95, 0x49, 0x3b, 0x79, 0x89, 0xb5, 0x76, 0xbe, 0xc1, 0xb4, 0xc4, 0x4c, + 0xac, 0xd5, 0x18, 0xe3, 0x4c, 0x7a, 0x93, 0x67, 0x80, 0x34, 0x86, 0x37, 0xe3, 0x26, 0xfe, 0x12, + 0xb0, 0x17, 0x78, 0xda, 0x18, 0x33, 0x16, 0x6a, 0xe1, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0xb6, 0xff, 0x01, 0x70, 0xda, + 0xa4, 0xc4, 0xc6, 0xbc, 0xdf, 0x19, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82, +}; + +const BITMAP_OPAQUE pads_remove_unused_xpm[1] = {{ png, sizeof( png ), "pads_remove_unused_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_other/pads_remove_unused_keep_bottom.cpp b/bitmaps_png/cpp_other/pads_remove_unused_keep_bottom.cpp new file mode 100644 index 0000000000..112f9d0251 --- /dev/null +++ b/bitmaps_png/cpp_other/pads_remove_unused_keep_bottom.cpp @@ -0,0 +1,208 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x90, 0x08, 0x06, 0x00, 0x00, 0x00, 0x16, 0x4d, 0xb9, + 0x35, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x55, 0x2d, 0x00, 0x00, 0x55, + 0x2d, 0x01, 0x6a, 0xe7, 0x70, 0xe8, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, + 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, + 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x52, 0x74, + 0x45, 0x58, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x43, 0x43, 0x20, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x41, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x79, 0x2d, 0x73, 0x61, + 0x2f, 0x34, 0x2e, 0x30, 0x2f, 0xc3, 0x54, 0x62, 0x05, 0x00, 0x00, 0x0b, 0x5b, 0x49, 0x44, 0x41, + 0x54, 0x78, 0x9c, 0xed, 0xdd, 0x7d, 0x70, 0x54, 0xd5, 0x19, 0xc7, 0xf1, 0xef, 0xb9, 0xbb, 0x49, + 0xd8, 0x04, 0x12, 0x25, 0xc1, 0x60, 0x50, 0x50, 0x82, 0x26, 0x2d, 0x8a, 0xd6, 0x0a, 0xa8, 0xc0, + 0xd4, 0x56, 0x1c, 0x3b, 0x03, 0x1d, 0xb1, 0x3a, 0x82, 0xa5, 0xb6, 0xd5, 0xe9, 0x8c, 0x55, 0x8b, + 0xd6, 0x69, 0x67, 0x5a, 0x85, 0xb1, 0x47, 0x41, 0xdb, 0x3a, 0xc2, 0xb4, 0x53, 0xeb, 0x4b, 0x47, + 0xa5, 0xb4, 0x33, 0xb6, 0x6a, 0x5f, 0x18, 0x28, 0x5a, 0xdf, 0x2a, 0x76, 0x06, 0x6c, 0x03, 0x6d, + 0x81, 0xa9, 0xa2, 0x2d, 0x26, 0x4a, 0xd0, 0x20, 0x04, 0x94, 0x10, 0xc2, 0x26, 0xd9, 0xdd, 0xd3, + 0x3f, 0xee, 0x42, 0x30, 0xbb, 0x64, 0x5f, 0xc8, 0xdd, 0xb3, 0xf7, 0xee, 0xf3, 0x99, 0xd9, 0x3f, + 0x48, 0xce, 0xde, 0xfb, 0x10, 0x7e, 0xec, 0x9e, 0x7b, 0xf6, 0xdc, 0x27, 0x20, 0x84, 0x10, 0x42, + 0x08, 0x21, 0x82, 0x4e, 0xd9, 0x2e, 0xa0, 0x68, 0x68, 0x46, 0x00, 0x75, 0x38, 0xd4, 0x62, 0xa8, + 0xc3, 0x50, 0x81, 0xa2, 0x0a, 0x00, 0x43, 0x15, 0x50, 0x9e, 0x1c, 0x19, 0x45, 0x71, 0x38, 0xf9, + 0xf5, 0x83, 0x28, 0x7a, 0x51, 0x74, 0x12, 0xa2, 0x93, 0x3a, 0x3a, 0xb9, 0x89, 0x7e, 0x2b, 0xf5, + 0xfb, 0x50, 0x69, 0x85, 0x6f, 0x29, 0x67, 0x11, 0x67, 0x32, 0x8a, 0x46, 0x0c, 0x93, 0x80, 0x46, + 0xe0, 0x4c, 0x60, 0x2c, 0x30, 0x72, 0x98, 0xce, 0x72, 0x00, 0xe8, 0x00, 0xda, 0x80, 0x1d, 0xc7, + 0x3c, 0xb6, 0xa1, 0xd9, 0x35, 0x4c, 0xe7, 0x08, 0x84, 0xe0, 0x86, 0x4f, 0x13, 0x46, 0x31, 0x0b, + 0xc3, 0xe7, 0x80, 0x69, 0xc9, 0x47, 0xad, 0xe5, 0xaa, 0x3e, 0x00, 0x5a, 0x50, 0xb4, 0x60, 0x78, + 0x05, 0xcd, 0x26, 0xc0, 0x58, 0xae, 0xc9, 0x9a, 0x60, 0x85, 0xef, 0x19, 0x42, 0xbc, 0xc9, 0x97, + 0x80, 0x2f, 0x03, 0x73, 0x80, 0xd1, 0x96, 0x2b, 0xca, 0xe4, 0x03, 0x60, 0x0d, 0xf0, 0x2c, 0x9a, + 0xbf, 0xda, 0x2e, 0xa6, 0xd0, 0x82, 0x11, 0x3e, 0x4d, 0x39, 0xb0, 0x00, 0xb8, 0x0b, 0x68, 0xb2, + 0x5c, 0x4d, 0xbe, 0x76, 0x01, 0x2f, 0x01, 0x2d, 0x40, 0xc2, 0x72, 0x2d, 0xb9, 0x51, 0x7c, 0x84, + 0xe1, 0xf5, 0x5c, 0xa7, 0x15, 0xfe, 0x0f, 0x9f, 0xe6, 0x12, 0xe0, 0xd7, 0xb8, 0xf3, 0x37, 0x61, + 0x4f, 0x02, 0xf8, 0x13, 0x70, 0x1b, 0x9a, 0x0f, 0xb2, 0x79, 0x82, 0xbf, 0xc3, 0xa7, 0x99, 0x0b, + 0xfc, 0x81, 0x81, 0x2b, 0x51, 0x61, 0xdf, 0x4e, 0xc2, 0xcc, 0x64, 0x09, 0xed, 0x99, 0x06, 0x3a, + 0x85, 0xa8, 0xc6, 0x13, 0x9a, 0xd3, 0x80, 0xdf, 0x21, 0xc1, 0x2b, 0x36, 0xe3, 0x89, 0xf1, 0x64, + 0x36, 0x03, 0xfd, 0x1b, 0x3e, 0xf8, 0x01, 0x24, 0xd7, 0xe1, 0xd2, 0x29, 0xd9, 0x6b, 0xc8, 0xa2, + 0x30, 0x1b, 0xcd, 0xf9, 0x99, 0x06, 0xf9, 0x39, 0x7c, 0x17, 0x0f, 0xf9, 0xdd, 0x5c, 0x27, 0x14, + 0x12, 0xd6, 0xe1, 0x76, 0x69, 0xa6, 0x01, 0x7e, 0x0e, 0xdf, 0xa8, 0x61, 0x3d, 0x9a, 0xbf, 0x67, + 0xbf, 0xc5, 0xe8, 0xe4, 0x4c, 0x03, 0xfc, 0x1c, 0xbe, 0x7f, 0xdb, 0x2e, 0x40, 0x0c, 0xe9, 0xfd, + 0x4c, 0x03, 0xfc, 0x1c, 0xbe, 0x5f, 0x20, 0x6f, 0x96, 0xc5, 0x2a, 0x06, 0xfc, 0x25, 0xd3, 0xa0, + 0x50, 0x01, 0x0a, 0xf1, 0xc6, 0x7a, 0xde, 0xe3, 0x52, 0x6a, 0xc8, 0x34, 0xf7, 0x13, 0x36, 0x3c, + 0x86, 0xe6, 0xa9, 0x4c, 0x83, 0xfc, 0x1b, 0x3e, 0x80, 0xf5, 0xbc, 0xc8, 0xe7, 0x31, 0xc0, 0x2c, + 0xfc, 0xfd, 0x2a, 0x1e, 0x24, 0x2f, 0x53, 0xcd, 0x0d, 0xbc, 0x40, 0x2c, 0xd3, 0x40, 0x7f, 0x87, + 0x0f, 0x60, 0x3d, 0xaf, 0xf1, 0x05, 0xd6, 0x61, 0x18, 0x0b, 0x9c, 0x8d, 0x5c, 0x3a, 0xd8, 0xd2, + 0x06, 0xdc, 0x0b, 0xdc, 0xce, 0x9d, 0xf4, 0x65, 0xf3, 0x84, 0x60, 0xfd, 0x43, 0xdd, 0xcb, 0xb9, + 0x24, 0xb8, 0x1d, 0x98, 0x87, 0xfd, 0x1d, 0x2c, 0xd9, 0xda, 0x0d, 0x3c, 0x0f, 0xfc, 0x0a, 0x7c, + 0xba, 0xe5, 0xaa, 0x8c, 0x43, 0x2c, 0xe6, 0xc3, 0x5c, 0x9f, 0x16, 0xac, 0xf0, 0x1d, 0xe1, 0xee, + 0x6e, 0x99, 0x05, 0x5c, 0x89, 0xbb, 0xde, 0x74, 0x0e, 0x10, 0xb6, 0x5a, 0xd3, 0x80, 0x28, 0xee, + 0x95, 0xfa, 0xab, 0x38, 0xac, 0xe6, 0x6e, 0x36, 0x53, 0xa2, 0x17, 0x4e, 0xc1, 0x0c, 0xdf, 0x60, + 0x2b, 0x88, 0xd0, 0xcd, 0x05, 0x24, 0x98, 0x8a, 0x1b, 0xc4, 0x46, 0x60, 0x12, 0x70, 0x9a, 0x87, + 0x67, 0x8d, 0x03, 0x3b, 0x71, 0x37, 0x92, 0xbe, 0x83, 0x62, 0x1b, 0x8a, 0x16, 0xea, 0xd9, 0x26, + 0xbb, 0x9d, 0x5d, 0xa5, 0x11, 0xbe, 0xe3, 0x71, 0x43, 0x39, 0x91, 0x04, 0x63, 0x80, 0x53, 0x50, + 0x8c, 0xb9, 0xfe, 0xdc, 0xeb, 0x17, 0x86, 0x9d, 0xf0, 0xf4, 0x95, 0x5b, 0x56, 0x66, 0xbc, 0x80, + 0x71, 0x94, 0xc3, 0xa2, 0x69, 0x8b, 0x68, 0xfd, 0xa8, 0x75, 0xed, 0xda, 0xff, 0xad, 0x5d, 0x07, + 0xec, 0x41, 0xd1, 0x89, 0x62, 0x0f, 0x71, 0xda, 0xd0, 0xd9, 0xcd, 0x7d, 0x4a, 0x55, 0x69, 0x87, + 0x2f, 0x0d, 0x63, 0xcc, 0xf2, 0x8e, 0xee, 0x8e, 0x45, 0x0d, 0xcb, 0x1b, 0xca, 0x32, 0x8d, 0x2d, + 0x0f, 0x95, 0xd3, 0xbb, 0xa4, 0x17, 0xe0, 0x56, 0xa5, 0xd4, 0xc3, 0xde, 0x57, 0x17, 0x2c, 0xb2, + 0x3c, 0x21, 0xac, 0x91, 0xf0, 0x09, 0x6b, 0x24, 0x7c, 0x69, 0xa8, 0x2c, 0x67, 0x23, 0xc6, 0x94, + 0xe4, 0x45, 0xea, 0xb0, 0x91, 0xf0, 0xa5, 0xca, 0x27, 0x51, 0x32, 0x77, 0xce, 0x83, 0x84, 0x4f, + 0x58, 0x23, 0xe1, 0x13, 0xd6, 0x48, 0xf8, 0xd2, 0x50, 0x2a, 0xcb, 0x39, 0x5f, 0x69, 0x7e, 0x30, + 0x31, 0x6c, 0x24, 0x7c, 0xa9, 0x64, 0xce, 0x57, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84, 0x4f, 0x58, + 0x23, 0xe1, 0x4b, 0x43, 0xd6, 0xf9, 0x0a, 0x43, 0xc2, 0x97, 0x4a, 0xe6, 0x7c, 0x05, 0x22, 0xe1, + 0x13, 0xd6, 0x48, 0xf8, 0x84, 0x35, 0x12, 0xbe, 0x34, 0x64, 0x9d, 0xaf, 0x30, 0x24, 0x7c, 0xa9, + 0x64, 0xce, 0x57, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84, 0x4f, 0x58, 0x23, 0xe1, 0x4b, 0x65, 0x22, + 0xe1, 0x88, 0x33, 0x73, 0xfc, 0x4c, 0xaa, 0x2b, 0xaa, 0x8f, 0x3b, 0xa8, 0xbe, 0xaa, 0x9e, 0x79, + 0xcd, 0xf3, 0x8e, 0xfc, 0x51, 0xde, 0x76, 0xf3, 0x20, 0x3f, 0xb4, 0x41, 0x8c, 0x31, 0xd7, 0x26, + 0x4c, 0x62, 0xa5, 0xa3, 0x9c, 0x4a, 0x80, 0xee, 0xbe, 0xee, 0x78, 0x34, 0x16, 0x4d, 0xf4, 0xc4, + 0x7a, 0x30, 0xc6, 0x50, 0xee, 0x94, 0x53, 0x55, 0x5e, 0xe5, 0x54, 0x57, 0x54, 0x87, 0x00, 0xe2, + 0x26, 0xfe, 0x51, 0x48, 0x85, 0xae, 0x56, 0x4a, 0xbd, 0x6a, 0xb7, 0x72, 0xff, 0x91, 0xf0, 0xa5, + 0x61, 0x8c, 0x29, 0xc7, 0xed, 0x01, 0xd3, 0x04, 0x9c, 0x0a, 0x44, 0x18, 0x68, 0xf9, 0x75, 0x00, + 0xe8, 0x05, 0x5a, 0x81, 0xd7, 0x95, 0x52, 0x6f, 0x59, 0x29, 0x52, 0x08, 0x91, 0x3f, 0x79, 0xe5, + 0x1b, 0xc4, 0x18, 0x33, 0x1d, 0xb8, 0x31, 0xc7, 0xa7, 0x3d, 0xa5, 0x94, 0x7a, 0xcd, 0x8b, 0x7a, + 0x82, 0xac, 0x58, 0x5a, 0x48, 0x14, 0x93, 0xf9, 0xb1, 0x44, 0xec, 0x9b, 0xdb, 0xf7, 0x6e, 0x1f, + 0xb2, 0xab, 0x40, 0x82, 0x84, 0x63, 0x8c, 0x71, 0xce, 0x1f, 0x7b, 0x7e, 0x08, 0xd8, 0x02, 0x48, + 0xf8, 0x72, 0x24, 0xe1, 0x4b, 0xe3, 0xc3, 0x43, 0x1f, 0xc6, 0xa7, 0x3c, 0x3a, 0xa5, 0x22, 0xd3, + 0xb8, 0x8a, 0x50, 0x05, 0xd1, 0x25, 0xd1, 0x42, 0x94, 0x14, 0x48, 0xb2, 0xd4, 0x22, 0xac, 0x91, + 0xf0, 0x09, 0x6b, 0x24, 0x7c, 0x69, 0x38, 0x2a, 0xbb, 0x1f, 0xcb, 0x31, 0x1b, 0x0b, 0xe4, 0xc2, + 0x2d, 0x0f, 0x12, 0xbe, 0x54, 0xb2, 0x55, 0xa5, 0x40, 0x24, 0x7c, 0xc2, 0x1a, 0x09, 0x9f, 0xb0, + 0x46, 0xc2, 0x97, 0x46, 0x1e, 0x37, 0x10, 0xc9, 0x9c, 0x2f, 0x0f, 0x12, 0xbe, 0x54, 0x32, 0xe7, + 0x2b, 0x10, 0x09, 0x9f, 0xb0, 0x46, 0xc2, 0x27, 0xac, 0x91, 0xf0, 0xa5, 0x21, 0x37, 0x10, 0x15, + 0x86, 0x84, 0x2f, 0x95, 0xdc, 0x40, 0x54, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84, 0x4f, 0x58, 0x23, + 0xe1, 0x4b, 0x43, 0x1a, 0x05, 0x15, 0x86, 0x84, 0x2f, 0x95, 0xcc, 0xf9, 0x0a, 0x44, 0xc2, 0x27, + 0xac, 0x91, 0xf0, 0x09, 0x6b, 0x24, 0x7c, 0x69, 0xc8, 0x3a, 0x5f, 0x61, 0x48, 0xf8, 0x52, 0xc9, + 0x9c, 0xaf, 0x40, 0x24, 0x7c, 0xc2, 0x1a, 0x09, 0x9f, 0xb0, 0x46, 0x6e, 0x9d, 0x4c, 0x65, 0x2a, + 0xc3, 0x95, 0xa1, 0xf9, 0x93, 0xe7, 0xb3, 0x65, 0xf7, 0x16, 0x3a, 0xba, 0x3b, 0xe8, 0xea, 0xed, + 0xfa, 0xc4, 0x80, 0x48, 0x38, 0x42, 0x73, 0x5d, 0x33, 0x33, 0xc6, 0xcf, 0x38, 0xf2, 0x25, 0x79, + 0xdb, 0x15, 0x27, 0xce, 0x18, 0xf3, 0xc5, 0xfe, 0x78, 0x7f, 0xbb, 0x19, 0xe4, 0x70, 0xff, 0xe1, + 0xd8, 0xc1, 0xde, 0x83, 0xb1, 0x63, 0xbf, 0x96, 0x48, 0x24, 0x12, 0x7d, 0xf1, 0xbe, 0x37, 0x8c, + 0x31, 0xd3, 0x6c, 0xd7, 0xed, 0x47, 0xf2, 0x3f, 0xf6, 0x38, 0x8c, 0x31, 0x93, 0x80, 0x4f, 0xe1, + 0x36, 0x0a, 0x1a, 0x89, 0xdb, 0x2c, 0x48, 0x01, 0x51, 0xa0, 0x0b, 0xd8, 0x09, 0x6c, 0x54, 0x4a, + 0x75, 0x1d, 0xf7, 0x20, 0x42, 0x88, 0xe2, 0x24, 0xaf, 0x7c, 0x83, 0x18, 0x63, 0xca, 0x80, 0xd3, + 0x73, 0x78, 0xca, 0x49, 0x40, 0xbb, 0x52, 0x6a, 0xaf, 0x47, 0x25, 0x89, 0x52, 0x61, 0x8c, 0xd1, + 0x83, 0xe7, 0x7b, 0x59, 0xb8, 0xd9, 0x76, 0xdd, 0x7e, 0x24, 0x57, 0xbb, 0xa9, 0xaa, 0xf7, 0x1d, + 0xde, 0x17, 0x5b, 0xf0, 0xfb, 0x05, 0x19, 0x7f, 0x36, 0x65, 0x4e, 0x19, 0xcf, 0x2d, 0x7c, 0xae, + 0x10, 0x35, 0x05, 0x92, 0x84, 0x2f, 0x8d, 0x68, 0x2c, 0x6a, 0x5e, 0x6e, 0x7d, 0x39, 0xe3, 0xb8, + 0x8a, 0x50, 0xc6, 0x46, 0x56, 0x62, 0x08, 0xb2, 0xc8, 0x2c, 0xac, 0x91, 0xf0, 0xa5, 0x91, 0x47, + 0xa3, 0x20, 0x91, 0x07, 0x09, 0x5f, 0x2a, 0xd9, 0x58, 0x50, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84, + 0x4f, 0x58, 0x23, 0xe1, 0x4b, 0x43, 0x6e, 0x20, 0x2a, 0x0c, 0x09, 0x5f, 0x2a, 0x99, 0xf3, 0x15, + 0x88, 0x84, 0x4f, 0x58, 0x23, 0xe1, 0x13, 0xd6, 0x48, 0xf8, 0x84, 0x35, 0x12, 0xbe, 0x34, 0xf2, + 0xb8, 0x7b, 0x4d, 0xe6, 0x7c, 0x79, 0x28, 0xdd, 0xcf, 0x76, 0x35, 0x95, 0x38, 0x34, 0x62, 0x38, + 0x03, 0xa8, 0xc3, 0x50, 0x0b, 0xd4, 0x3f, 0xfd, 0x9f, 0xa7, 0xaf, 0x98, 0x35, 0x61, 0x56, 0x28, + 0x97, 0x43, 0x3d, 0xb8, 0xf1, 0xc1, 0xaf, 0xa0, 0x69, 0x00, 0x3a, 0x8f, 0x79, 0xb4, 0x32, 0x9a, + 0x36, 0x6e, 0xa3, 0x77, 0xd8, 0x6b, 0x0f, 0x88, 0xe0, 0x87, 0x4f, 0x13, 0x06, 0xce, 0x01, 0xa6, + 0x01, 0x53, 0x81, 0xb3, 0x81, 0x49, 0x40, 0x03, 0x89, 0xd4, 0xe1, 0xed, 0x5d, 0xed, 0x24, 0x4c, + 0x9a, 0x6f, 0x0c, 0xe1, 0xbd, 0x03, 0xef, 0x5d, 0x8c, 0xfb, 0x2b, 0x52, 0x3f, 0x69, 0x3f, 0x09, + 0x34, 0xed, 0xc0, 0x0e, 0xe0, 0x6d, 0x14, 0x2d, 0x38, 0xb4, 0x10, 0xe7, 0x6d, 0x74, 0xba, 0xb3, + 0x97, 0x96, 0x60, 0x86, 0x6f, 0x29, 0x67, 0x11, 0xe7, 0x2a, 0x60, 0x0e, 0x70, 0x21, 0x50, 0x69, + 0xa9, 0x12, 0x07, 0x98, 0x90, 0x7c, 0x5c, 0x86, 0xe1, 0x16, 0xe2, 0x00, 0x1c, 0x40, 0xf3, 0x77, + 0x60, 0x0d, 0xb0, 0x06, 0xcd, 0x2e, 0x4b, 0xf5, 0x59, 0x15, 0x9c, 0xf0, 0x69, 0xaa, 0x51, 0xdc, + 0x8c, 0xe1, 0x6b, 0xc4, 0xf9, 0xf4, 0x89, 0x1c, 0x2a, 0xeb, 0x39, 0x5f, 0x72, 0x91, 0x39, 0xdb, + 0x45, 0xe9, 0x63, 0xd4, 0x00, 0x57, 0x24, 0x1f, 0x0f, 0xa1, 0xd9, 0x0c, 0x3c, 0xce, 0x68, 0x56, + 0x95, 0xd2, 0xdb, 0xf4, 0x40, 0xf8, 0x9e, 0x21, 0xc4, 0x76, 0xae, 0xc5, 0x70, 0x35, 0xee, 0x6f, + 0xd8, 0xb6, 0xf5, 0x6a, 0x91, 0x2b, 0x07, 0x45, 0x0d, 0x86, 0x1a, 0xcc, 0x89, 0x5f, 0x40, 0x59, + 0xd8, 0xa9, 0xa2, 0x70, 0xa7, 0x03, 0x53, 0xd9, 0xcf, 0x0f, 0xb9, 0x87, 0x15, 0x9c, 0xcc, 0x43, + 0xa5, 0x10, 0x42, 0x37, 0x7c, 0xf7, 0x51, 0xcf, 0x9b, 0xac, 0x06, 0x2e, 0xb2, 0x5b, 0x4e, 0x9e, + 0x82, 0xf3, 0x29, 0x57, 0x03, 0x86, 0x07, 0xd9, 0xcf, 0xf5, 0x68, 0xae, 0x41, 0xb3, 0xc3, 0x76, + 0x41, 0x5e, 0x72, 0xd0, 0x8c, 0xa0, 0x9f, 0xe7, 0xf1, 0x6b, 0xf0, 0x82, 0xe9, 0x3c, 0x60, 0x3d, + 0xcb, 0x98, 0x60, 0xbb, 0x10, 0x2f, 0x39, 0x28, 0x6e, 0x02, 0x3e, 0x63, 0xbb, 0x90, 0x62, 0x92, + 0xf5, 0xc6, 0x02, 0x6f, 0x5f, 0x72, 0xc7, 0x11, 0xe3, 0x21, 0x2f, 0x4f, 0x60, 0x9b, 0x83, 0x61, + 0xa1, 0xed, 0x22, 0x8a, 0x49, 0x3e, 0x3b, 0x55, 0xb2, 0xbd, 0x40, 0xc9, 0xc3, 0x5c, 0x34, 0x13, + 0xbd, 0x3a, 0xb8, 0x6d, 0x0e, 0x30, 0xd9, 0x76, 0x11, 0x62, 0x48, 0x17, 0xd8, 0x2e, 0xc0, 0x2b, + 0x0e, 0x24, 0x57, 0x9e, 0x04, 0xe0, 0xbe, 0x95, 0x66, 0x7b, 0x0f, 0xc7, 0x91, 0x71, 0x79, 0x2c, + 0xb5, 0xe4, 0xa2, 0xdb, 0xcb, 0x83, 0xdb, 0x14, 0x06, 0xb6, 0x00, 0xb3, 0x6c, 0x17, 0x52, 0x2c, + 0x7a, 0xfa, 0x7b, 0x18, 0x3b, 0x72, 0x2c, 0x3b, 0xef, 0xd8, 0xc9, 0x96, 0x0e, 0xb7, 0x4b, 0xd5, + 0xc7, 0xd1, 0x8f, 0x89, 0xc6, 0xa2, 0xc4, 0x12, 0x31, 0xaa, 0xca, 0xab, 0x18, 0x55, 0x3e, 0x8a, + 0xa6, 0xba, 0x26, 0xa6, 0x8f, 0x9b, 0x0e, 0xc0, 0xa1, 0xfe, 0x43, 0x5e, 0x95, 0x13, 0x03, 0x36, + 0x7b, 0x75, 0x70, 0xdb, 0x14, 0x9a, 0x6f, 0x00, 0x2b, 0x6d, 0x17, 0x52, 0x2c, 0x22, 0xe1, 0x08, + 0x73, 0xcf, 0x9e, 0xcb, 0xec, 0x89, 0xb3, 0x69, 0xae, 0x6b, 0x66, 0x5c, 0xf5, 0x38, 0x22, 0xe1, + 0x08, 0x91, 0xb2, 0x08, 0x0a, 0x45, 0x34, 0x16, 0xa5, 0xa7, 0xbf, 0x87, 0xb6, 0x8f, 0xdb, 0xd8, + 0xb0, 0x73, 0x03, 0x1b, 0xdb, 0x37, 0xf2, 0x4a, 0xdb, 0x2b, 0xc4, 0x12, 0x31, 0x2f, 0xca, 0xf9, + 0x19, 0x9a, 0xef, 0x78, 0x71, 0xe0, 0x62, 0xa0, 0xd0, 0x38, 0xc0, 0x0b, 0xc0, 0x6c, 0xdb, 0xc5, + 0x88, 0x4f, 0x78, 0x15, 0xf7, 0x82, 0xa3, 0xc7, 0x76, 0x21, 0x5e, 0x71, 0xd0, 0x24, 0xa8, 0x62, + 0x1e, 0xf0, 0xac, 0xed, 0x62, 0xc4, 0x51, 0xbf, 0x24, 0xe0, 0xc1, 0x83, 0xc1, 0xfb, 0xd0, 0xee, + 0xe5, 0x62, 0x12, 0x5c, 0x83, 0xfb, 0xf1, 0x9a, 0x9f, 0x7a, 0x41, 0x9c, 0x04, 0xc9, 0xad, 0x51, + 0xfe, 0x65, 0x80, 0x75, 0xc0, 0x7d, 0xc9, 0x4d, 0x07, 0x81, 0x17, 0xac, 0x4d, 0x90, 0xee, 0x7f, + 0x9e, 0xaf, 0x03, 0x57, 0x02, 0x63, 0x6d, 0x97, 0x93, 0xa5, 0x56, 0x60, 0x35, 0xf0, 0x04, 0x9a, + 0x37, 0x6d, 0x17, 0x53, 0x48, 0xc1, 0x0a, 0xdf, 0x11, 0x1a, 0x07, 0x87, 0xe9, 0x24, 0x98, 0x83, + 0xbb, 0xcf, 0xee, 0x42, 0xa0, 0xda, 0x72, 0x55, 0x47, 0x74, 0x02, 0x2d, 0xc0, 0xeb, 0x38, 0xac, + 0xe5, 0x6e, 0xb6, 0xda, 0x2e, 0xc8, 0x96, 0x60, 0x86, 0x6f, 0x30, 0xf7, 0xa2, 0xaa, 0x19, 0x37, + 0x84, 0x4d, 0x40, 0x23, 0xee, 0x86, 0xd2, 0x46, 0xdc, 0xb7, 0x6c, 0x2f, 0x74, 0xe2, 0x6e, 0x22, + 0x7d, 0x07, 0xd8, 0x81, 0x62, 0x3b, 0x86, 0x4d, 0x68, 0x5a, 0x3d, 0x3a, 0x9f, 0xef, 0x94, 0x46, + 0xf8, 0x86, 0xf2, 0x63, 0x6a, 0x88, 0x52, 0x8f, 0x43, 0x2d, 0x86, 0xba, 0xc5, 0x33, 0x17, 0x7f, + 0x5b, 0x29, 0x75, 0xd9, 0xb2, 0xbf, 0x2d, 0xcb, 0xb8, 0x95, 0x3e, 0xe4, 0x84, 0x78, 0x60, 0xf6, + 0x03, 0xec, 0xd8, 0xbf, 0x63, 0xd5, 0x23, 0x9b, 0x1f, 0x79, 0x06, 0x87, 0x7d, 0x24, 0xd8, 0x0b, + 0xec, 0x41, 0x07, 0x77, 0x71, 0x78, 0xb8, 0x48, 0xf8, 0x06, 0x31, 0xc6, 0x2c, 0xef, 0xe8, 0xee, + 0x58, 0xd4, 0xb0, 0xbc, 0xa1, 0x2c, 0xd3, 0xd8, 0xf2, 0x50, 0x39, 0xbd, 0x4b, 0x7a, 0x01, 0x6e, + 0x55, 0x4a, 0x3d, 0xec, 0x7d, 0x75, 0xc1, 0x22, 0x77, 0xaf, 0x09, 0x6b, 0x24, 0x7c, 0xc2, 0x1a, + 0x09, 0x9f, 0xb0, 0x46, 0xc2, 0x97, 0x46, 0x1e, 0x5d, 0xaa, 0x64, 0xee, 0x9c, 0x07, 0x09, 0x5f, + 0xaa, 0xe0, 0xdc, 0x11, 0x52, 0xe4, 0x24, 0x7c, 0xc2, 0x1a, 0x09, 0x9f, 0xb0, 0x46, 0xc2, 0x97, + 0x86, 0x34, 0x0a, 0x2a, 0x8c, 0xe0, 0x74, 0x2c, 0xc8, 0x85, 0xdb, 0xbf, 0xe5, 0x0c, 0x14, 0x8d, + 0x18, 0x26, 0x00, 0xa7, 0xe0, 0xee, 0x88, 0xa9, 0x5d, 0xb5, 0x75, 0xd5, 0x8c, 0xd9, 0x13, 0x67, + 0xe7, 0xf4, 0x73, 0x59, 0xfa, 0xda, 0xd2, 0x6f, 0xa1, 0x99, 0x8a, 0xfb, 0x91, 0xda, 0x3e, 0x60, + 0x37, 0xf0, 0x2e, 0x61, 0xde, 0x21, 0x46, 0xbb, 0xf4, 0x65, 0x49, 0x2f, 0xf8, 0xe1, 0xbb, 0x9f, + 0x31, 0xf4, 0x31, 0x95, 0x81, 0x46, 0x41, 0x4d, 0xb8, 0xbd, 0x53, 0xc2, 0xe9, 0x2e, 0x2d, 0xf6, + 0x1e, 0xda, 0x9b, 0xf3, 0x1d, 0x6c, 0x7b, 0x7a, 0xf6, 0x4c, 0x26, 0xdd, 0x8d, 0x58, 0xee, 0xe6, + 0xe6, 0x5e, 0x34, 0x6d, 0xc0, 0x76, 0x14, 0x9b, 0x80, 0x96, 0xe4, 0x67, 0xbc, 0x25, 0xff, 0xab, + 0x52, 0x83, 0x17, 0x3e, 0x4d, 0x18, 0xc5, 0x2c, 0x0c, 0x57, 0x02, 0x73, 0xe8, 0x63, 0x92, 0xe5, + 0x8a, 0x2a, 0x70, 0x37, 0x35, 0x34, 0x63, 0xb8, 0x2a, 0xf9, 0xb5, 0x04, 0x9a, 0x37, 0x80, 0x3f, + 0x03, 0xab, 0xd1, 0x6c, 0xa2, 0x04, 0xaf, 0xb2, 0x83, 0x13, 0x3e, 0xcd, 0x78, 0xe0, 0xbb, 0xc0, + 0xc2, 0x64, 0xaf, 0xbd, 0xbc, 0xe5, 0xda, 0x28, 0x28, 0x0f, 0x0e, 0x70, 0x6e, 0xf2, 0x71, 0x27, + 0x9a, 0xf7, 0x81, 0x27, 0x80, 0x9f, 0xa3, 0xe9, 0xcc, 0xf7, 0xa0, 0x7e, 0xe3, 0xff, 0x0b, 0x0e, + 0xcd, 0x69, 0x68, 0x9e, 0xc4, 0xdd, 0xbe, 0x74, 0x1b, 0x9c, 0x58, 0xf0, 0xf2, 0xe9, 0x42, 0x30, + 0x0c, 0xb7, 0x4e, 0x8e, 0x03, 0xee, 0x06, 0xde, 0x45, 0xb3, 0x02, 0xed, 0xd9, 0x36, 0xaf, 0xa2, + 0xe2, 0xef, 0xf0, 0xdd, 0xc3, 0x1c, 0x60, 0x1b, 0x70, 0x03, 0x90, 0x71, 0x17, 0x8a, 0x0f, 0x54, + 0x01, 0x77, 0x00, 0xdb, 0xd0, 0x5c, 0x68, 0xbb, 0x18, 0xaf, 0xf9, 0x37, 0x7c, 0xf7, 0x70, 0x39, + 0x86, 0x3f, 0x02, 0x27, 0xdb, 0x2e, 0xc5, 0x03, 0xa7, 0x03, 0x2f, 0xa1, 0x39, 0xc7, 0x76, 0x21, + 0x5e, 0xf2, 0x67, 0xf8, 0x34, 0x23, 0x30, 0x3c, 0x06, 0x94, 0x7b, 0x71, 0xf8, 0x22, 0x69, 0x14, + 0x74, 0x12, 0xf0, 0x28, 0x01, 0x5e, 0x43, 0xf4, 0x67, 0xf8, 0x14, 0x97, 0x03, 0x67, 0x7a, 0x71, + 0xe8, 0x82, 0x34, 0x0a, 0xca, 0xfe, 0x14, 0x33, 0xd0, 0xc1, 0xed, 0xa5, 0xe3, 0xcf, 0xf0, 0xc1, + 0x14, 0xdb, 0x05, 0x9c, 0x90, 0x5c, 0xb2, 0xaa, 0x38, 0xcf, 0xb3, 0x3a, 0x2c, 0xf3, 0x6b, 0xf8, + 0xf6, 0xdb, 0x2e, 0xa0, 0x80, 0x02, 0xbb, 0xf4, 0xe2, 0xcf, 0x75, 0x3e, 0xc3, 0x06, 0xdc, 0x37, + 0xaf, 0x61, 0x9f, 0x0f, 0xc5, 0x12, 0x31, 0xea, 0x47, 0xd6, 0xb3, 0xe6, 0xba, 0x35, 0x6c, 0xdd, + 0xbd, 0x95, 0x5d, 0x5d, 0xbb, 0x38, 0xd4, 0x7f, 0xe8, 0x68, 0xa3, 0xa0, 0x8a, 0x50, 0x05, 0x35, + 0x23, 0x6a, 0x68, 0xaa, 0x6d, 0xe2, 0x92, 0xd3, 0x2f, 0x01, 0x20, 0x9e, 0xf0, 0xac, 0xd1, 0x57, + 0x2f, 0x65, 0x41, 0x6e, 0x14, 0xe4, 0x57, 0x9a, 0xdf, 0x02, 0x0b, 0x86, 0xfb, 0xb0, 0x0d, 0xa3, + 0x1a, 0xb8, 0x65, 0xea, 0x2d, 0x47, 0x1b, 0x05, 0xd5, 0x54, 0xd4, 0xa4, 0x1d, 0xd7, 0xd9, 0xd3, + 0xc9, 0xc6, 0xf6, 0x8d, 0x6c, 0x68, 0xdf, 0xc0, 0xe3, 0xff, 0x7a, 0x9c, 0xfd, 0x87, 0x3d, 0x79, + 0x31, 0xfe, 0x11, 0x9a, 0xbb, 0xbc, 0x38, 0x70, 0x31, 0xf0, 0x6f, 0xf8, 0xdc, 0x5b, 0x1e, 0x5f, + 0xc4, 0xfd, 0xcc, 0x76, 0xf8, 0x0c, 0x7a, 0x3d, 0xad, 0x2c, 0xab, 0x24, 0x12, 0x8e, 0x50, 0x33, + 0xc2, 0x0d, 0x61, 0x77, 0x5f, 0x37, 0xd1, 0x58, 0x94, 0xae, 0x5e, 0xcf, 0x3f, 0x9a, 0x5d, 0x0d, + 0xcc, 0x47, 0xd3, 0xe7, 0xf5, 0x89, 0x6c, 0xf1, 0x6f, 0xf8, 0x00, 0x34, 0x23, 0x81, 0x9f, 0x02, + 0x37, 0xe2, 0xf7, 0xbf, 0xcb, 0x80, 0x18, 0xf0, 0x00, 0xa7, 0xa2, 0xb9, 0x89, 0x7e, 0xdb, 0xc5, + 0x78, 0x29, 0x18, 0xff, 0x60, 0x9a, 0x29, 0xc0, 0xf7, 0x80, 0xeb, 0xf0, 0xeb, 0x3c, 0x16, 0xfa, + 0x80, 0xa7, 0x81, 0x65, 0x68, 0xfe, 0x6b, 0xbb, 0x98, 0x42, 0x08, 0x46, 0xf8, 0x8e, 0x70, 0x7f, + 0xed, 0xd5, 0x57, 0x81, 0x79, 0xf8, 0x63, 0x39, 0x26, 0x01, 0xfc, 0x03, 0x58, 0x4d, 0x19, 0xbf, + 0x61, 0x31, 0x1d, 0xb6, 0x0b, 0x2a, 0xa4, 0x60, 0x85, 0xef, 0x58, 0x9a, 0x89, 0x28, 0xe6, 0x60, + 0xb8, 0x08, 0x77, 0x5e, 0x68, 0x7b, 0x6b, 0x15, 0xb8, 0x61, 0xdb, 0x8e, 0xdb, 0x28, 0x68, 0x23, + 0x65, 0xac, 0x2b, 0xb5, 0xc0, 0x1d, 0x2b, 0xb8, 0xe1, 0x1b, 0xec, 0x7e, 0x6a, 0xe9, 0xe3, 0xb3, + 0x28, 0x9a, 0x30, 0x4c, 0x82, 0xa3, 0x8f, 0x09, 0x0c, 0x7f, 0x2f, 0xc2, 0x1e, 0xdc, 0xd6, 0x67, + 0x3b, 0x18, 0x68, 0x16, 0xf4, 0x16, 0x11, 0xfe, 0xc9, 0xf7, 0x39, 0x38, 0xcc, 0xe7, 0xf2, 0xad, + 0xd2, 0x09, 0xdf, 0x50, 0x7e, 0xc2, 0x28, 0x0e, 0x33, 0x06, 0x87, 0x31, 0x18, 0xea, 0x80, 0xd1, + 0x18, 0x22, 0x00, 0xa8, 0xe4, 0xc6, 0x05, 0x43, 0x04, 0x45, 0x1c, 0xe8, 0xc3, 0x10, 0x87, 0xa3, + 0x3b, 0x91, 0xbb, 0x81, 0xfd, 0x38, 0xec, 0x4d, 0x36, 0x09, 0xea, 0x0c, 0x7a, 0x47, 0x51, 0x21, + 0x84, 0x10, 0x42, 0x08, 0x21, 0xb2, 0xf5, 0x7f, 0xca, 0xef, 0x2f, 0x6b, 0x77, 0x6b, 0xc4, 0x1d, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE pads_remove_unused_keep_bottom_xpm[1] = {{ png, sizeof( png ), "pads_remove_unused_keep_bottom_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_other/pads_reset_unused.cpp b/bitmaps_png/cpp_other/pads_reset_unused.cpp new file mode 100644 index 0000000000..da65858968 --- /dev/null +++ b/bitmaps_png/cpp_other/pads_reset_unused.cpp @@ -0,0 +1,263 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x90, 0x08, 0x06, 0x00, 0x00, 0x00, 0x16, 0x4d, 0xb9, + 0x35, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x55, 0x2d, 0x00, 0x00, 0x55, + 0x2d, 0x01, 0x6a, 0xe7, 0x70, 0xe8, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, + 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, + 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x52, 0x74, + 0x45, 0x58, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x43, 0x43, 0x20, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x41, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x79, 0x2d, 0x73, 0x61, + 0x2f, 0x34, 0x2e, 0x30, 0x2f, 0xc3, 0x54, 0x62, 0x05, 0x00, 0x00, 0x0e, 0xc3, 0x49, 0x44, 0x41, + 0x54, 0x78, 0x9c, 0xed, 0xdd, 0x7b, 0x94, 0x1e, 0x75, 0x7d, 0xc7, 0xf1, 0xd7, 0x3c, 0xbb, 0x9b, + 0xb0, 0xb9, 0x2d, 0x90, 0x0d, 0xb9, 0x80, 0x44, 0x48, 0x60, 0x93, 0x72, 0x6b, 0xd1, 0x70, 0x91, + 0xc4, 0xd2, 0x12, 0xeb, 0x69, 0xa1, 0x82, 0x0a, 0x05, 0x54, 0x6c, 0xb5, 0xe7, 0xa8, 0x05, 0xc1, + 0x5a, 0x3d, 0x07, 0x35, 0x5e, 0x26, 0x10, 0x15, 0x11, 0xa9, 0xa5, 0x88, 0x55, 0x41, 0x8a, 0xf4, + 0xb4, 0x80, 0xd5, 0x72, 0x82, 0xd4, 0x0b, 0x4d, 0x09, 0x7a, 0x08, 0x75, 0x83, 0x92, 0xe4, 0xa8, + 0x88, 0xe6, 0x02, 0x49, 0x30, 0x17, 0x96, 0x40, 0x62, 0x12, 0x76, 0x93, 0xdd, 0x67, 0xfa, 0xc7, + 0x3c, 0xbb, 0x09, 0xc9, 0xc2, 0x5e, 0xf2, 0xcc, 0xce, 0x33, 0xf3, 0xcc, 0xfb, 0x9c, 0x39, 0x39, + 0xe7, 0xc9, 0x3c, 0xbf, 0xdf, 0x67, 0x93, 0xcf, 0xce, 0xfc, 0x2e, 0xdf, 0xf9, 0x0c, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x79, 0x27, 0x48, 0x5b, 0x40, 0xcd, 0x10, 0x3a, 0x0c, + 0xad, 0x4a, 0x26, 0x8a, 0xb4, 0x8a, 0x8c, 0x16, 0x18, 0x0b, 0x22, 0x63, 0x31, 0xaa, 0x72, 0x66, + 0xa7, 0xc0, 0x4b, 0x95, 0xcf, 0x7f, 0x2f, 0xd0, 0x25, 0xd0, 0xa1, 0x41, 0x87, 0x56, 0x1d, 0xde, + 0x6f, 0x6f, 0x2a, 0xfa, 0x33, 0x48, 0x7d, 0x99, 0xef, 0x7a, 0x27, 0xe8, 0x71, 0x92, 0xc0, 0x0c, + 0x91, 0x99, 0x98, 0x81, 0xe3, 0x30, 0x05, 0xe3, 0xaa, 0xd4, 0xcb, 0x76, 0x6c, 0xc2, 0x3a, 0xac, + 0xde, 0xef, 0x58, 0x25, 0xb4, 0xb1, 0x4a, 0x7d, 0xe4, 0x82, 0xfc, 0x9a, 0x2f, 0xd4, 0x28, 0x30, + 0x4f, 0xe4, 0x8f, 0x71, 0x46, 0xe5, 0x98, 0x98, 0xb2, 0xaa, 0xdf, 0xa1, 0x5d, 0xa0, 0x5d, 0x64, + 0x89, 0xd0, 0x72, 0x44, 0x29, 0x6b, 0x4a, 0x8d, 0x7c, 0x99, 0xef, 0x3e, 0x0d, 0x7e, 0xe5, 0x2f, + 0xf1, 0x36, 0x9c, 0x8f, 0x23, 0x53, 0x56, 0x34, 0x10, 0xbf, 0xc3, 0x62, 0x7c, 0x5b, 0xe8, 0x7f, + 0xd3, 0x16, 0x33, 0xd2, 0xe4, 0xc3, 0x7c, 0xa1, 0x51, 0xb8, 0x0c, 0x9f, 0x40, 0x5b, 0xca, 0x6a, + 0x86, 0xcb, 0x46, 0x3c, 0x84, 0x76, 0x94, 0x53, 0xd6, 0x32, 0x34, 0x02, 0x2f, 0x88, 0x3c, 0x36, + 0xd4, 0x61, 0x45, 0xf6, 0xcd, 0x17, 0x7a, 0x03, 0xbe, 0x25, 0x1e, 0xbf, 0x15, 0xa4, 0x47, 0x19, + 0xff, 0x85, 0x6b, 0x84, 0x7e, 0x37, 0x98, 0x2f, 0x64, 0xdb, 0x7c, 0xa1, 0x0b, 0xf0, 0x1d, 0xfb, + 0x66, 0xa2, 0x05, 0xe9, 0xb3, 0x5e, 0xa3, 0xb9, 0x3e, 0x69, 0xc3, 0x40, 0x27, 0x96, 0x46, 0x42, + 0x4d, 0x22, 0x84, 0x8e, 0xc1, 0x3d, 0x0a, 0xe3, 0xd5, 0x1a, 0xc7, 0xea, 0xf6, 0xcd, 0xc1, 0x9c, + 0x98, 0x5d, 0xf3, 0xf1, 0x31, 0x2a, 0xeb, 0x70, 0xfd, 0x51, 0xb7, 0x73, 0xc8, 0x9a, 0x60, 0xbe, + 0xd0, 0x1f, 0x0e, 0x74, 0x52, 0x96, 0xcd, 0x77, 0xf6, 0xab, 0xfe, 0xed, 0x50, 0x07, 0x14, 0x85, + 0x59, 0xab, 0xcd, 0xb9, 0x03, 0x9d, 0x90, 0x65, 0xf3, 0x8d, 0xaf, 0x6a, 0x6b, 0xd9, 0x1e, 0xfd, + 0xd6, 0x22, 0x47, 0x0c, 0x74, 0x42, 0x96, 0xcd, 0xf7, 0x44, 0xda, 0x02, 0x0a, 0x5e, 0x95, 0x67, + 0x07, 0x3a, 0x21, 0xcb, 0xe6, 0xfb, 0x8a, 0xe2, 0x66, 0x59, 0xab, 0x74, 0xe3, 0x07, 0x03, 0x9d, + 0xd4, 0x30, 0x02, 0x42, 0x92, 0x61, 0xa9, 0x67, 0x9c, 0xab, 0xc5, 0x40, 0x63, 0xbf, 0x82, 0x34, + 0xf8, 0x9a, 0xd0, 0xbf, 0x0f, 0x74, 0x52, 0x76, 0xcd, 0x07, 0x4b, 0xfd, 0xc8, 0x9f, 0x88, 0x30, + 0x4f, 0xb6, 0xaf, 0xe2, 0x79, 0xe2, 0x7f, 0x4c, 0xf0, 0x1e, 0x3f, 0xd4, 0x3d, 0xd0, 0x89, 0xd9, + 0x36, 0x1f, 0x2c, 0xf5, 0x88, 0x3f, 0xf5, 0xa0, 0xc8, 0x14, 0x9c, 0xa8, 0x98, 0x3a, 0xa4, 0xc5, + 0x3a, 0x5c, 0x87, 0x0f, 0xf9, 0xb8, 0x3d, 0x83, 0xf9, 0x42, 0xbe, 0xfe, 0xa3, 0xae, 0x73, 0x8a, + 0xb2, 0x0f, 0xe1, 0x22, 0xe9, 0x57, 0xb0, 0x0c, 0x96, 0xcd, 0xf8, 0x3e, 0xfe, 0x95, 0x8c, 0x96, + 0x5c, 0x35, 0xd9, 0x65, 0x81, 0x2d, 0x43, 0xfd, 0x5a, 0xbe, 0xcc, 0xd7, 0x4b, 0x5c, 0xdd, 0x32, + 0x0f, 0x17, 0x8a, 0xd7, 0x9b, 0x4e, 0x46, 0x63, 0xaa, 0x9a, 0xf6, 0xd1, 0x29, 0x9e, 0xa9, 0x3f, + 0xac, 0xe4, 0x7e, 0x9f, 0xf6, 0xb8, 0x3a, 0x9d, 0x38, 0xe5, 0xd3, 0x7c, 0x07, 0x72, 0xb3, 0x66, + 0x3b, 0x9d, 0xae, 0x6c, 0x8e, 0xd8, 0x88, 0x33, 0x30, 0x13, 0xc7, 0x24, 0xd8, 0x6b, 0x0f, 0xd6, + 0x8b, 0x0b, 0x49, 0xd7, 0x08, 0xac, 0x12, 0x68, 0x37, 0xd9, 0xaa, 0xa2, 0xda, 0x39, 0xa6, 0x3e, + 0xcc, 0xf7, 0x4a, 0xc4, 0xa6, 0x3c, 0x5e, 0xd9, 0x24, 0x1c, 0x25, 0x30, 0xe9, 0x8a, 0x53, 0xae, + 0x78, 0x67, 0x63, 0xa9, 0xf1, 0xcc, 0x3b, 0x57, 0xdc, 0x39, 0xe0, 0x04, 0xa6, 0x14, 0x94, 0x5c, + 0x7d, 0xc6, 0xd5, 0xd6, 0xbe, 0xb0, 0xf6, 0x81, 0x07, 0x7e, 0xfb, 0xc0, 0x83, 0xd8, 0x2a, 0xd0, + 0x21, 0xb0, 0x55, 0x8f, 0x75, 0xc2, 0xc1, 0x8d, 0x7d, 0xea, 0x95, 0xfa, 0x36, 0x5f, 0x3f, 0x44, + 0x51, 0xf4, 0xa5, 0x4d, 0x3b, 0x37, 0x5d, 0x3d, 0xed, 0x4b, 0xd3, 0x9a, 0x06, 0x3a, 0x77, 0x54, + 0xc3, 0x28, 0x5d, 0x9f, 0xec, 0x82, 0xab, 0x82, 0x20, 0xb8, 0x2d, 0x79, 0x75, 0xf9, 0xa2, 0x58, + 0x9e, 0x28, 0x48, 0x8d, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x82, 0x41, 0x8e, 0x46, + 0xa2, 0xa8, 0x2e, 0x27, 0xa9, 0x55, 0xa3, 0x30, 0xdf, 0xc1, 0x0c, 0xc7, 0x51, 0xc5, 0xd8, 0x79, + 0x18, 0x14, 0xe6, 0x2b, 0x48, 0x8d, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x82, 0x60, + 0x90, 0x63, 0xbe, 0xfa, 0xdc, 0x98, 0xa8, 0x1a, 0x85, 0xf9, 0x0e, 0xa6, 0x18, 0xf3, 0x8d, 0x10, + 0xb5, 0xb2, 0xdf, 0x99, 0x2e, 0xa1, 0x31, 0x68, 0xc5, 0x51, 0x4f, 0x6c, 0x7e, 0xe2, 0xb8, 0x29, + 0xe3, 0xa6, 0x0c, 0xe9, 0x97, 0xf2, 0xa1, 0xb5, 0x0f, 0xcd, 0x72, 0x9d, 0xd3, 0x94, 0x74, 0xe8, + 0xf6, 0xbc, 0x50, 0x67, 0x32, 0x42, 0xf3, 0x45, 0xfd, 0x98, 0x2f, 0x36, 0xd8, 0xe9, 0xf6, 0xed, + 0xed, 0xf6, 0xee, 0xef, 0xce, 0xc0, 0x98, 0xde, 0xd3, 0x96, 0xac, 0x5d, 0xe2, 0xb2, 0x93, 0x2f, + 0x1b, 0x52, 0xd3, 0x8b, 0x9f, 0x5a, 0x7c, 0x95, 0xb2, 0xab, 0xfa, 0x72, 0x06, 0x42, 0x2f, 0x62, + 0x4d, 0xdf, 0x11, 0x54, 0xf6, 0x76, 0x27, 0x5b, 0x51, 0xec, 0xeb, 0xee, 0x23, 0xbf, 0xe6, 0xbb, + 0x41, 0x8b, 0x4e, 0x7f, 0x2e, 0xae, 0x6a, 0x39, 0xd3, 0x10, 0x2a, 0x5b, 0x06, 0x3d, 0xe6, 0x7b, + 0xe5, 0x75, 0xbe, 0xc3, 0xf1, 0xba, 0xca, 0x11, 0xdf, 0xc8, 0x23, 0x6c, 0xd2, 0x25, 0xf4, 0x84, + 0x38, 0x12, 0x63, 0x89, 0x09, 0x1e, 0xf2, 0x0f, 0x95, 0xb8, 0xb5, 0x3a, 0x24, 0x5f, 0xe6, 0x8b, + 0xaf, 0x6e, 0xef, 0xc2, 0xdb, 0x75, 0x3a, 0xd7, 0x30, 0x1e, 0x28, 0x1f, 0xce, 0x24, 0x62, 0xb0, + 0x8b, 0xd2, 0x18, 0x8d, 0xb3, 0x2a, 0xc7, 0x35, 0x76, 0xd8, 0x2d, 0xf4, 0x03, 0x7c, 0x1b, 0xff, + 0x29, 0x1c, 0xb8, 0xfa, 0x37, 0x4f, 0xe4, 0xc3, 0x7c, 0x5f, 0x30, 0x5e, 0xa7, 0xf7, 0x8a, 0x5c, + 0x8b, 0xa9, 0x69, 0xcb, 0x19, 0x02, 0x63, 0xc4, 0x89, 0x5a, 0x6f, 0xc3, 0x0d, 0x16, 0xfa, 0x47, + 0xe3, 0x7d, 0xbd, 0x5e, 0xae, 0x86, 0xd9, 0x9f, 0xed, 0x86, 0xfe, 0xc2, 0x4b, 0x7e, 0x2b, 0xf2, + 0x65, 0xd9, 0x32, 0xde, 0x81, 0x4c, 0x17, 0xf9, 0xb2, 0x1d, 0x56, 0xba, 0xce, 0x9c, 0xb4, 0xc5, + 0x8c, 0x04, 0xd9, 0x36, 0xdf, 0x42, 0x97, 0x8b, 0xf3, 0xed, 0x26, 0x57, 0xb3, 0xd9, 0x41, 0xef, + 0xed, 0xbe, 0xda, 0x2d, 0x7a, 0xf8, 0x4b, 0x80, 0x27, 0x28, 0x7b, 0x58, 0xe8, 0x8d, 0xc3, 0x6e, + 0x21, 0x23, 0x64, 0xd7, 0x7c, 0x8b, 0x4c, 0x17, 0xb9, 0x43, 0x95, 0x1f, 0x82, 0x1a, 0x4e, 0xb1, + 0x40, 0xbf, 0x13, 0x94, 0x43, 0x5b, 0xf9, 0x1b, 0x8b, 0x7b, 0x84, 0x26, 0x1c, 0x52, 0x2b, 0x35, + 0x4e, 0x76, 0xcd, 0xd7, 0xed, 0xa3, 0x68, 0x4e, 0x5b, 0x46, 0x82, 0x4c, 0x15, 0xf8, 0xdb, 0xb4, + 0x45, 0x24, 0x49, 0x76, 0xcd, 0xa7, 0x0e, 0xc6, 0x45, 0x91, 0x33, 0xd2, 0x96, 0x90, 0x24, 0x59, + 0x36, 0x5f, 0x22, 0x33, 0xf5, 0x48, 0x64, 0xec, 0xa8, 0xb1, 0xe6, 0x1e, 0x3b, 0xd7, 0x84, 0xd1, + 0xaf, 0x7c, 0xd7, 0x9b, 0x3c, 0x76, 0xb2, 0x8b, 0x66, 0x5d, 0x84, 0x21, 0x2d, 0xb5, 0x0c, 0x95, + 0x01, 0x4b, 0xf9, 0xb3, 0x4c, 0x96, 0x97, 0x5a, 0x7e, 0xa6, 0x77, 0x11, 0xb7, 0x1a, 0x44, 0x08, + 0xf8, 0xf9, 0xa6, 0x9f, 0x6b, 0x08, 0x1a, 0xfc, 0xe4, 0x3d, 0x3f, 0x01, 0xdb, 0xbb, 0xb6, 0xdb, + 0xbd, 0x77, 0xb7, 0x97, 0xf6, 0xbe, 0x24, 0x12, 0x69, 0x2a, 0x35, 0x19, 0x3f, 0x7a, 0xbc, 0x23, + 0x0e, 0x8b, 0x43, 0x98, 0x3a, 0x76, 0x77, 0x58, 0xb5, 0x65, 0x55, 0xd5, 0x64, 0xbc, 0x8c, 0xc0, + 0xf2, 0x64, 0x1a, 0xae, 0x0d, 0xb2, 0xbb, 0x21, 0x7e, 0xbd, 0xd9, 0x7a, 0xac, 0x94, 0xc0, 0xd5, + 0x61, 0x54, 0xc3, 0x28, 0x67, 0x1f, 0x73, 0xb6, 0xb6, 0xd6, 0x36, 0x53, 0xc7, 0x4d, 0xd5, 0xdc, + 0xd4, 0xdc, 0x67, 0xb6, 0xed, 0x5d, 0xdb, 0x75, 0x75, 0x77, 0x59, 0xfb, 0xc2, 0x5a, 0x8f, 0x6d, + 0x7c, 0xcc, 0xaf, 0x3b, 0x7e, 0x5d, 0xed, 0xee, 0x7b, 0x79, 0x01, 0x27, 0x0a, 0x75, 0x24, 0xd5, + 0x41, 0xda, 0x64, 0xd7, 0x7c, 0x10, 0xfa, 0x20, 0x6e, 0x91, 0xf5, 0x9f, 0xe3, 0x60, 0xf6, 0xe2, + 0x62, 0xa1, 0xc5, 0x69, 0x0b, 0x49, 0x92, 0x6c, 0x67, 0xb5, 0x2c, 0xd5, 0xee, 0x5c, 0xeb, 0x30, + 0x5f, 0xbc, 0x75, 0x95, 0x07, 0xb6, 0xe0, 0x12, 0xa1, 0xff, 0x4e, 0x5b, 0x48, 0xd2, 0x64, 0xdb, + 0x7c, 0xb0, 0xd4, 0x4a, 0xf3, 0xfd, 0x9b, 0xb2, 0x06, 0x9c, 0x22, 0xbb, 0x83, 0xf4, 0x6d, 0xf8, + 0x22, 0xde, 0x2d, 0xf4, 0x8b, 0xb4, 0xc5, 0x8c, 0x04, 0xf9, 0xba, 0x5d, 0x85, 0x8e, 0xc2, 0x07, + 0xf0, 0x76, 0x9c, 0x9a, 0xb2, 0x9a, 0xc1, 0x50, 0xc6, 0x4f, 0x71, 0x9f, 0x66, 0x77, 0xb8, 0xd6, + 0xef, 0xd3, 0x16, 0x34, 0x92, 0xe4, 0xcb, 0x7c, 0xfb, 0x13, 0x3a, 0x5e, 0x9c, 0x56, 0xd5, 0xfb, + 0xee, 0xb5, 0x29, 0xe9, 0x0a, 0xea, 0xe3, 0x69, 0xbd, 0x25, 0x55, 0x2c, 0x16, 0xda, 0x9c, 0xae, + 0x9c, 0xf4, 0xc8, 0xaf, 0xf9, 0x0e, 0x64, 0x91, 0xd7, 0xe8, 0x71, 0x06, 0x4e, 0xde, 0xef, 0x8d, + 0x93, 0x33, 0x31, 0x29, 0xa1, 0x1e, 0x9f, 0x15, 0x17, 0x93, 0xae, 0xae, 0xfc, 0xb9, 0x0a, 0xed, + 0x42, 0x5b, 0x13, 0xea, 0x2f, 0x73, 0xd4, 0x8f, 0xf9, 0x5e, 0x89, 0x2f, 0x1a, 0x6b, 0x97, 0xa9, + 0xe2, 0x32, 0xfa, 0xd6, 0x05, 0xf3, 0x16, 0x5c, 0x1d, 0x04, 0xc1, 0x79, 0x8b, 0x7e, 0xbc, 0x68, + 0xc0, 0xf1, 0x70, 0x43, 0xa9, 0xc1, 0x8d, 0xf3, 0x6f, 0xb4, 0xe6, 0x85, 0x35, 0xdf, 0xba, 0x6d, + 0xf9, 0x6d, 0xf7, 0xa2, 0x43, 0xa3, 0x2d, 0xc6, 0xd8, 0x5a, 0x2f, 0x65, 0x51, 0x87, 0x42, 0x61, + 0xbe, 0x03, 0x28, 0x82, 0x82, 0x46, 0x8e, 0x2c, 0x6f, 0xaf, 0x15, 0x64, 0x9c, 0xc2, 0x7c, 0x05, + 0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x86, 0x11, 0x14, 0x54, 0x0c, 0x5f, 0x86, 0x41, 0x61, 0xbe, 0x83, + 0x29, 0x62, 0x08, 0x46, 0x88, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x20, 0x35, 0x0a, 0xf3, + 0xf5, 0x43, 0x11, 0x14, 0x34, 0x32, 0x14, 0xe6, 0x3b, 0x98, 0x22, 0x28, 0x68, 0x84, 0xc8, 0x72, + 0x25, 0xf3, 0xa1, 0x13, 0x2a, 0x61, 0x9a, 0x92, 0x49, 0x22, 0x47, 0xa1, 0x75, 0xc9, 0xda, 0x25, + 0xa7, 0xcf, 0x9e, 0x34, 0x7b, 0x48, 0xd5, 0x3e, 0x77, 0xaf, 0xba, 0xfb, 0x8d, 0x16, 0x7a, 0x5e, + 0x64, 0x0b, 0x3a, 0x34, 0x79, 0xce, 0x02, 0x9b, 0x12, 0xd1, 0x9c, 0x23, 0xea, 0xc3, 0x7c, 0xa1, + 0x46, 0x71, 0x56, 0xcb, 0x19, 0x98, 0x2d, 0xde, 0xd3, 0x9d, 0x89, 0xe3, 0x30, 0xba, 0x2f, 0xe0, + 0x07, 0x4f, 0x6c, 0x7e, 0x42, 0x5b, 0x6b, 0xdb, 0x90, 0x9a, 0x6f, 0x7f, 0xb6, 0xfd, 0x12, 0x91, + 0x4b, 0xfa, 0x3e, 0xd8, 0x8b, 0xd0, 0x2e, 0x2f, 0x0f, 0x0b, 0xfa, 0x85, 0x92, 0x76, 0x3d, 0x9e, + 0x12, 0xee, 0xdf, 0x63, 0xfd, 0x92, 0x4f, 0xf3, 0x85, 0x4a, 0x4a, 0xce, 0x54, 0xf6, 0x16, 0xcc, + 0x15, 0xa7, 0x53, 0x8d, 0x19, 0xe0, 0x5b, 0x7d, 0x54, 0x21, 0x28, 0x88, 0xf8, 0xd9, 0xdb, 0x53, + 0xf5, 0x96, 0x76, 0x45, 0xe2, 0x77, 0x12, 0xb1, 0x43, 0x68, 0xb9, 0xc0, 0x23, 0x02, 0x8b, 0x7d, + 0xda, 0xca, 0xc1, 0xea, 0xca, 0x1b, 0xf9, 0x32, 0x5f, 0xe8, 0x54, 0x5c, 0x85, 0xb7, 0x28, 0x0f, + 0xaf, 0x84, 0x2a, 0xe1, 0xa0, 0x20, 0x98, 0x80, 0xf3, 0x44, 0xce, 0x13, 0xb9, 0x4e, 0x68, 0x1d, + 0xbe, 0xab, 0xc1, 0x57, 0x7c, 0xca, 0xba, 0x21, 0x77, 0x9e, 0x61, 0xf2, 0x31, 0xe1, 0x08, 0x9d, + 0x25, 0xf4, 0x00, 0x56, 0xe0, 0x7d, 0x6a, 0xa7, 0x76, 0x6f, 0x30, 0x1c, 0x87, 0x8f, 0xe8, 0xf1, + 0x1b, 0xa1, 0x6f, 0x09, 0xfd, 0x41, 0xda, 0x82, 0x46, 0x8a, 0x6c, 0x9b, 0xef, 0x6b, 0x9a, 0x84, + 0x6e, 0xc1, 0x32, 0x5c, 0x20, 0xdb, 0xb3, 0xce, 0x46, 0x5c, 0x81, 0x15, 0x16, 0xba, 0x36, 0x6d, + 0x31, 0x23, 0x41, 0x76, 0xcd, 0x17, 0x2a, 0xd9, 0xe4, 0x1e, 0x5c, 0xad, 0xca, 0xa6, 0xab, 0x4a, + 0x50, 0xd0, 0xf0, 0x69, 0x12, 0xb9, 0x41, 0xe8, 0xa6, 0x24, 0x1a, 0xaf, 0x25, 0xb2, 0x6b, 0xbe, + 0x38, 0xc7, 0xe4, 0x6d, 0xd5, 0x6e, 0xb6, 0x6a, 0x41, 0x41, 0x87, 0xce, 0x47, 0x84, 0xe6, 0x27, + 0xd1, 0x70, 0xad, 0x90, 0x5d, 0xf3, 0x45, 0x3e, 0x36, 0x84, 0x73, 0xb3, 0x4a, 0xae, 0x6f, 0xbf, + 0xd9, 0x34, 0xdf, 0xe7, 0x1d, 0x21, 0x1e, 0xa8, 0x0f, 0x8e, 0x5a, 0x1d, 0x09, 0x0e, 0xfc, 0x4b, + 0x71, 0xba, 0xda, 0x55, 0x7f, 0xc8, 0x64, 0x73, 0xa9, 0xa5, 0xab, 0xb2, 0x62, 0x96, 0x00, 0x91, + 0xc8, 0xf8, 0xd1, 0xe3, 0x5d, 0x7a, 0xd2, 0xa5, 0x56, 0x6c, 0x5e, 0x61, 0xd3, 0xce, 0x4d, 0x76, + 0x74, 0xed, 0x78, 0xd9, 0x39, 0xcd, 0x8d, 0xcd, 0x66, 0xb5, 0xce, 0x72, 0xce, 0xb1, 0xe7, 0xe0, + 0x10, 0x82, 0x82, 0x06, 0xfe, 0x5a, 0x8f, 0x2c, 0x5f, 0xb7, 0x07, 0x20, 0x9b, 0xe6, 0x0b, 0xed, + 0x10, 0x7a, 0x0a, 0xb3, 0xaa, 0xdd, 0xf4, 0xd2, 0xa7, 0x97, 0xba, 0xf4, 0xa4, 0x4b, 0xdd, 0x73, + 0xf1, 0x3d, 0x2f, 0xfb, 0x7c, 0xd7, 0xde, 0x5d, 0xba, 0xcb, 0xdd, 0x5a, 0x46, 0xb7, 0xf4, 0x7d, + 0x56, 0x8e, 0xca, 0x56, 0x6d, 0x59, 0xe5, 0xb1, 0x8d, 0x8f, 0x55, 0x5b, 0x46, 0x2f, 0x45, 0x50, + 0x50, 0x4d, 0x12, 0x7a, 0x17, 0xee, 0xae, 0x6a, 0x9b, 0x95, 0xa4, 0x2a, 0x98, 0x79, 0xe4, 0x4c, + 0xb3, 0x5b, 0x67, 0x9b, 0x3a, 0x7e, 0xaa, 0x71, 0xa3, 0xc6, 0x69, 0x6e, 0x6c, 0x16, 0x04, 0x81, + 0xce, 0xee, 0x4e, 0x3b, 0xba, 0x76, 0x58, 0xbf, 0x7d, 0xbd, 0x65, 0x1b, 0x96, 0x1d, 0x74, 0x55, + 0xac, 0xb2, 0x9a, 0xb9, 0x42, 0xcb, 0x92, 0xea, 0x20, 0x6d, 0xb2, 0x6b, 0x3e, 0x02, 0xa1, 0x6f, + 0x90, 0xd3, 0xf4, 0xce, 0xc0, 0x27, 0x7c, 0xc6, 0xe7, 0xd3, 0x96, 0x91, 0x24, 0xd9, 0xce, 0x6a, + 0x39, 0xd7, 0xf7, 0xc4, 0x91, 0x13, 0xf3, 0x64, 0x75, 0xf2, 0x74, 0x30, 0xbb, 0x04, 0xae, 0xf4, + 0x19, 0xb7, 0xa4, 0x2d, 0x24, 0x69, 0xb2, 0x7c, 0xe5, 0xdb, 0x47, 0x68, 0x16, 0x3e, 0x86, 0x77, + 0xc8, 0x6e, 0x50, 0xd0, 0x2e, 0x7c, 0x03, 0x5f, 0x12, 0xda, 0x98, 0xb6, 0x98, 0x91, 0x20, 0x1f, + 0xe6, 0xeb, 0x65, 0x91, 0xe9, 0xba, 0xbd, 0x0f, 0x6f, 0x15, 0x97, 0x4e, 0xd5, 0x3a, 0x91, 0x38, + 0x61, 0xf5, 0x3b, 0xb8, 0x3d, 0xcf, 0x41, 0x90, 0xfd, 0x91, 0x2f, 0xf3, 0xed, 0x4f, 0xe8, 0x44, + 0x81, 0x0b, 0x45, 0xe6, 0xaa, 0xad, 0xa0, 0xa0, 0x67, 0xd0, 0x2e, 0xf0, 0x88, 0x06, 0x8b, 0x7d, + 0xd2, 0x86, 0xb4, 0x05, 0xa5, 0x45, 0x7e, 0xcd, 0x77, 0x20, 0xa1, 0x63, 0x71, 0x86, 0xc0, 0x6c, + 0x91, 0x19, 0x38, 0x41, 0x1c, 0x16, 0x54, 0xd5, 0x17, 0xc8, 0x54, 0x88, 0xb0, 0xd1, 0xfe, 0x41, + 0x41, 0x81, 0x5f, 0x6a, 0xd4, 0x6e, 0x81, 0x2d, 0x09, 0xf4, 0x97, 0x49, 0xea, 0xc7, 0x7c, 0xaf, + 0x44, 0x68, 0x8c, 0x46, 0x93, 0x94, 0x1d, 0x25, 0xd2, 0xfa, 0xa9, 0x37, 0x7e, 0xea, 0x9a, 0x06, + 0x0d, 0x6f, 0x0a, 0x1f, 0x09, 0x07, 0x15, 0x14, 0x74, 0xf3, 0x9f, 0xdd, 0x6c, 0xcd, 0xb6, 0x35, + 0x77, 0xde, 0xd2, 0x7e, 0xcb, 0x3d, 0xd8, 0x8a, 0x0e, 0x74, 0x14, 0xef, 0xdc, 0x1d, 0x98, 0xc2, + 0x7c, 0x07, 0x50, 0x04, 0x05, 0x8d, 0x1c, 0x79, 0x59, 0x9e, 0x28, 0xc8, 0x20, 0x85, 0xf9, 0x0a, + 0x52, 0xa3, 0x30, 0x5f, 0x3f, 0x0c, 0x23, 0x28, 0xa8, 0x60, 0x18, 0x14, 0xe6, 0x3b, 0x98, 0xe2, + 0xa1, 0xf1, 0x11, 0xa2, 0x30, 0x5f, 0x41, 0x6a, 0x14, 0xe6, 0x2b, 0x48, 0x8d, 0xc2, 0x7c, 0x05, + 0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x86, 0x91, 0x52, 0x55, 0x8c, 0xf9, 0x86, 0x41, 0x36, 0x2b, 0x99, + 0xab, 0x41, 0x68, 0x8c, 0x92, 0x19, 0x22, 0xaf, 0x45, 0xab, 0xc8, 0x44, 0x4c, 0xbe, 0xf7, 0x17, + 0xf7, 0xbe, 0x79, 0xde, 0xf4, 0x79, 0x43, 0x2a, 0x35, 0xbb, 0x69, 0xd9, 0x4d, 0xef, 0x10, 0x9a, + 0xa6, 0x77, 0x77, 0x23, 0x3e, 0xd6, 0x3a, 0xd2, 0x3a, 0xd7, 0xe8, 0xaa, 0xba, 0xf6, 0x9c, 0x90, + 0x7f, 0xf3, 0xbd, 0x3c, 0x24, 0x68, 0x0e, 0x4e, 0x14, 0x87, 0x04, 0x4d, 0xeb, 0x2f, 0xae, 0x67, + 0xc3, 0x8e, 0x0d, 0xca, 0xd1, 0xd0, 0x72, 0x7c, 0x9e, 0xd9, 0xfe, 0xcc, 0xd9, 0x38, 0xfb, 0xa0, + 0xbf, 0xd8, 0xa6, 0x2c, 0xb4, 0x41, 0xbc, 0xbf, 0xfb, 0x94, 0x40, 0x7b, 0x11, 0x16, 0xb4, 0x8f, + 0x7c, 0x9a, 0xef, 0x7a, 0x27, 0xe8, 0xf1, 0x56, 0x9c, 0x8f, 0xd7, 0x1b, 0x42, 0x48, 0x50, 0x95, + 0x29, 0x61, 0x7a, 0xe5, 0x38, 0x4f, 0xe4, 0xca, 0xca, 0xa3, 0x4f, 0xdb, 0x85, 0xfe, 0x0f, 0x8b, + 0xc5, 0xaf, 0xc0, 0xaa, 0x8b, 0xfa, 0xbd, 0x03, 0xc9, 0x8f, 0xf9, 0x42, 0x13, 0x04, 0xfe, 0x4e, + 0xe4, 0xdd, 0x7a, 0x0e, 0x2d, 0xef, 0x64, 0xa8, 0x29, 0x55, 0xc3, 0x78, 0x7a, 0xad, 0x05, 0x6f, + 0xae, 0x1c, 0xb7, 0x0a, 0x3d, 0x8e, 0xdb, 0x1d, 0xe9, 0xae, 0x7a, 0xba, 0x4d, 0xef, 0x33, 0xdf, + 0x7d, 0x1a, 0x3c, 0xe9, 0xaf, 0x44, 0xde, 0x8e, 0x36, 0xe9, 0x5d, 0x2d, 0x86, 0x4a, 0x49, 0xa0, + 0x45, 0xa4, 0x45, 0x74, 0xe8, 0x13, 0xa8, 0x14, 0xa2, 0x6e, 0x03, 0xf1, 0x70, 0x60, 0x8e, 0x6d, + 0x3e, 0x63, 0xa1, 0x9b, 0x1d, 0xe1, 0xd6, 0x7a, 0x30, 0x61, 0x6c, 0xbe, 0xcf, 0x9a, 0xec, 0x57, + 0xee, 0xc7, 0x59, 0xe9, 0xca, 0x19, 0x26, 0xf9, 0xd9, 0xe5, 0x9a, 0x26, 0x72, 0x93, 0x6d, 0xae, + 0x10, 0xba, 0x58, 0x68, 0x75, 0xda, 0x82, 0x92, 0xa4, 0x24, 0x74, 0x98, 0xbd, 0xbe, 0x2f, 0xab, + 0xc6, 0xcb, 0x27, 0xa7, 0x61, 0xa9, 0x45, 0xa6, 0xa7, 0x2d, 0x24, 0x49, 0x4a, 0x02, 0xef, 0xc7, + 0x1f, 0xa5, 0x2d, 0xa4, 0x96, 0x48, 0x39, 0xa5, 0xaa, 0x97, 0xa3, 0x75, 0xbb, 0x35, 0xc9, 0x0e, + 0xd2, 0xa6, 0x24, 0xf2, 0xce, 0xb4, 0x45, 0xd4, 0x12, 0x35, 0x94, 0x52, 0x05, 0x17, 0x54, 0x5e, + 0x5a, 0x9d, 0x4b, 0x4a, 0x38, 0x29, 0x6d, 0x11, 0x05, 0xaf, 0xca, 0xe9, 0x69, 0x0b, 0x48, 0x8a, + 0x12, 0xc9, 0x85, 0xee, 0x64, 0x91, 0x48, 0xa4, 0x14, 0x0c, 0x6e, 0xd2, 0xdc, 0x7b, 0xde, 0xb0, + 0x83, 0x82, 0x06, 0xc7, 0xce, 0x24, 0x1b, 0x4f, 0x93, 0x46, 0x71, 0x8e, 0xf1, 0xbc, 0xb4, 0x85, + 0xd4, 0x0a, 0xbb, 0xf7, 0xee, 0x36, 0x65, 0xdc, 0x14, 0xeb, 0x3f, 0xbc, 0xde, 0x8a, 0x4d, 0x71, + 0x4a, 0xd5, 0x8b, 0x9d, 0x2f, 0xea, 0xec, 0xee, 0xd4, 0x5d, 0xee, 0x36, 0x76, 0xd4, 0x58, 0xe3, + 0x47, 0x8d, 0xd7, 0xd6, 0xda, 0xe6, 0xcc, 0xa3, 0xcf, 0x44, 0x1c, 0x22, 0x94, 0x10, 0xdd, 0x78, + 0x3c, 0xa9, 0xc6, 0xd3, 0x26, 0x10, 0xfa, 0x1b, 0xdc, 0x99, 0xb6, 0x90, 0x5a, 0xa1, 0xb9, 0xb1, + 0xd9, 0x05, 0x27, 0x5e, 0x60, 0xfe, 0xf1, 0xf3, 0xcd, 0x6a, 0x9d, 0xe5, 0xe8, 0x09, 0x47, 0x6b, + 0x6e, 0x6c, 0xd6, 0xdc, 0xd4, 0x2c, 0x10, 0x07, 0x05, 0xed, 0xde, 0xbb, 0xdb, 0xba, 0x17, 0xd7, + 0x79, 0x74, 0xfd, 0xa3, 0x96, 0x6d, 0x58, 0x66, 0xc9, 0xba, 0x25, 0xba, 0xcb, 0xdd, 0x49, 0xc8, + 0xf9, 0x27, 0xa1, 0xbf, 0x4f, 0xa2, 0xe1, 0x5a, 0x20, 0xa8, 0xbc, 0x85, 0xe7, 0x87, 0xe4, 0x3b, + 0x82, 0x35, 0x83, 0x3c, 0x2c, 0x9e, 0x70, 0xec, 0x4e, 0x5b, 0x48, 0x52, 0x94, 0x84, 0xca, 0xc6, + 0xba, 0x08, 0xdf, 0x4e, 0x5b, 0x4c, 0x41, 0x1f, 0x5f, 0x97, 0x73, 0xe3, 0x71, 0x60, 0x1d, 0xda, + 0x75, 0xce, 0x56, 0x76, 0xb1, 0x78, 0x7b, 0x6d, 0x74, 0x2a, 0x8a, 0x86, 0xc7, 0xe1, 0x54, 0x4a, + 0xa3, 0xb2, 0x4b, 0x84, 0x07, 0xf1, 0xd9, 0x4a, 0xd1, 0x41, 0xee, 0xc9, 0x57, 0x11, 0x64, 0xfc, + 0xcb, 0xf3, 0xd7, 0xb8, 0x50, 0xed, 0x64, 0xb3, 0x0c, 0xc4, 0x5a, 0xdc, 0x8f, 0x3b, 0x84, 0x7e, + 0x95, 0xb6, 0x98, 0x91, 0x24, 0x5f, 0xe6, 0xeb, 0x65, 0xdf, 0xbb, 0xd7, 0xce, 0x17, 0xd7, 0xd9, + 0xbd, 0x5e, 0xfc, 0xda, 0xa9, 0x5a, 0xa0, 0x03, 0xed, 0x78, 0x4c, 0xc9, 0x03, 0xf5, 0xfc, 0xee, + 0xb5, 0x7c, 0x9a, 0xef, 0x40, 0xe2, 0x49, 0xd5, 0x2c, 0xb1, 0x09, 0xdb, 0xc4, 0x01, 0x41, 0x33, + 0x2b, 0x7f, 0x1e, 0x9e, 0x50, 0xaf, 0x1d, 0x7a, 0x43, 0x82, 0x58, 0x2d, 0xf0, 0xa4, 0xc8, 0x72, + 0xa1, 0xb5, 0x09, 0xf5, 0x97, 0x39, 0xea, 0xc3, 0x7c, 0xaf, 0xc6, 0x0d, 0x5a, 0x74, 0x9a, 0xac, + 0x64, 0xa2, 0x48, 0xeb, 0x82, 0xb9, 0x0b, 0x3e, 0x18, 0x04, 0xc1, 0x79, 0x8b, 0x7e, 0xbc, 0x68, + 0x50, 0x41, 0x41, 0x37, 0xce, 0xbf, 0xd1, 0xea, 0x6d, 0xab, 0xef, 0xfa, 0xea, 0xe3, 0x5f, 0xbd, + 0x4f, 0xc9, 0xf3, 0xca, 0x9e, 0xc3, 0x56, 0x61, 0x7e, 0x17, 0x87, 0xab, 0x45, 0x61, 0xbe, 0x03, + 0x28, 0x82, 0x82, 0x46, 0x8e, 0xe2, 0xe9, 0xb5, 0x82, 0xd4, 0x28, 0xcc, 0x57, 0x90, 0x1a, 0x85, + 0xf9, 0x0a, 0x52, 0xa3, 0x30, 0x5f, 0x3f, 0x0c, 0x23, 0xa5, 0xaa, 0x18, 0x3b, 0x0f, 0x83, 0xc2, + 0x7c, 0x07, 0x93, 0x9f, 0x27, 0x42, 0x6a, 0x9c, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x20, + 0x35, 0x0a, 0xf3, 0xf5, 0x43, 0x11, 0x14, 0x34, 0x32, 0xe4, 0x27, 0xb1, 0x60, 0x28, 0xc4, 0xf9, + 0x2d, 0xaf, 0x15, 0x98, 0x21, 0x32, 0x1d, 0x47, 0x89, 0x2b, 0x62, 0x26, 0xde, 0xb5, 0xf2, 0xae, + 0x73, 0xe6, 0x1f, 0x3f, 0x7f, 0x48, 0xff, 0x2e, 0xd7, 0x3f, 0x72, 0xfd, 0x07, 0x84, 0xe6, 0x88, + 0xb7, 0xd4, 0x9e, 0xc7, 0x66, 0x3c, 0xad, 0xd1, 0x1a, 0xdd, 0x36, 0x14, 0xb9, 0x2c, 0xfd, 0x93, + 0x7f, 0xf3, 0x7d, 0xce, 0x24, 0x7b, 0xcc, 0xb1, 0x2f, 0x28, 0xa8, 0x4d, 0x9c, 0x9d, 0xd2, 0xd8, + 0xdf, 0xd4, 0xe2, 0xb9, 0x5d, 0xcf, 0x0d, 0xf9, 0x09, 0xb6, 0xad, 0xbb, 0xb7, 0x9e, 0xa4, 0xbf, + 0x07, 0xb1, 0xe2, 0xe2, 0xe6, 0x2e, 0xa1, 0x75, 0x78, 0x52, 0x60, 0x39, 0xda, 0x2b, 0x7b, 0xbc, + 0x89, 0xbd, 0x2b, 0x35, 0x2b, 0xe4, 0xcf, 0x7c, 0xa1, 0x46, 0x81, 0x79, 0x22, 0x17, 0xe2, 0x7c, + 0x7b, 0xcc, 0x4c, 0x59, 0xd1, 0x68, 0x71, 0x51, 0xc3, 0x2c, 0x91, 0xb7, 0x56, 0x3e, 0x2b, 0x0b, + 0xfd, 0x12, 0xdf, 0xc3, 0xfd, 0x42, 0xcb, 0xd5, 0xe1, 0x2c, 0x3b, 0x3f, 0xe6, 0x8b, 0x5f, 0x6f, + 0xf5, 0x11, 0xbc, 0xb3, 0x92, 0xb5, 0x37, 0x6c, 0x86, 0x1a, 0x14, 0x34, 0x0c, 0x4a, 0x38, 0xa5, + 0x72, 0x7c, 0x5c, 0xe8, 0x59, 0xdc, 0x81, 0x7f, 0xae, 0xa7, 0x97, 0xff, 0x65, 0x7f, 0xc2, 0x11, + 0x3a, 0x46, 0xe8, 0x9b, 0xe2, 0xf2, 0xa5, 0x6b, 0x38, 0x34, 0xe3, 0x0d, 0x27, 0x85, 0xa0, 0x0a, + 0x8f, 0x4e, 0x1e, 0x8d, 0x4f, 0xe3, 0x69, 0xa1, 0x9b, 0x85, 0x89, 0x95, 0x79, 0xd5, 0x14, 0xd9, + 0x36, 0xdf, 0x42, 0xe7, 0x63, 0x15, 0xde, 0x23, 0xbb, 0xef, 0xd9, 0xdd, 0x9f, 0xb1, 0xf8, 0x30, + 0x56, 0x09, 0xbd, 0x3e, 0x6d, 0x31, 0x49, 0x93, 0x5d, 0xf3, 0x2d, 0xf4, 0x26, 0x91, 0xef, 0xe2, + 0x88, 0xb4, 0xa5, 0x24, 0xc0, 0x6b, 0xf0, 0x90, 0xd0, 0xc9, 0x69, 0x0b, 0x49, 0x92, 0x6c, 0x9a, + 0x2f, 0x74, 0x98, 0xc8, 0xd7, 0x30, 0x2a, 0x89, 0xe6, 0x6b, 0x24, 0x28, 0xe8, 0x70, 0xfc, 0x8b, + 0x1c, 0xaf, 0x21, 0x66, 0xd3, 0x7c, 0x81, 0x37, 0xe1, 0xb8, 0x24, 0x9a, 0x1e, 0x91, 0xa0, 0xa0, + 0xc1, 0x77, 0x71, 0x8e, 0x30, 0xbf, 0x59, 0x3a, 0xd9, 0x34, 0x1f, 0xa7, 0xa6, 0x2d, 0xe0, 0x90, + 0x18, 0x8a, 0x57, 0x03, 0xa7, 0x25, 0xa6, 0x23, 0x65, 0xb2, 0x6a, 0xbe, 0x6d, 0x69, 0x0b, 0x18, + 0x41, 0x72, 0xbb, 0xf4, 0x92, 0xcd, 0x75, 0xbe, 0xc8, 0xa3, 0xe2, 0x9b, 0x57, 0xd5, 0xc7, 0x43, + 0xdd, 0xe5, 0x6e, 0x93, 0xc7, 0x4d, 0xb6, 0xf8, 0xf2, 0xc5, 0x56, 0x6e, 0x5e, 0x69, 0xe3, 0x8e, + 0x8d, 0x76, 0xed, 0xdd, 0xd5, 0x17, 0x14, 0x34, 0xba, 0x61, 0xb4, 0x96, 0xc3, 0x5a, 0xb4, 0x4d, + 0x6c, 0xf3, 0x86, 0xd7, 0xbc, 0x01, 0xf4, 0x94, 0x13, 0x0b, 0xfa, 0xea, 0xd2, 0x94, 0xe7, 0xa0, + 0xa0, 0xac, 0x12, 0xfa, 0x0f, 0x5c, 0x56, 0xed, 0x66, 0xa7, 0x8d, 0x9f, 0xe6, 0xca, 0x39, 0x57, + 0xf6, 0x05, 0x05, 0xb5, 0x8c, 0x6e, 0xe9, 0xf7, 0xbc, 0x8e, 0xdd, 0x1d, 0x96, 0x6d, 0x58, 0xe6, + 0xd1, 0x0d, 0x8f, 0xba, 0xfd, 0xe7, 0xb7, 0xdb, 0xf6, 0x52, 0x22, 0x17, 0xe3, 0xcf, 0x0b, 0x7d, + 0x22, 0x89, 0x86, 0x6b, 0x81, 0xec, 0x9a, 0x2f, 0x7e, 0xe4, 0xf1, 0x47, 0xe2, 0x3d, 0xdb, 0xea, + 0x71, 0xc0, 0xf5, 0x74, 0x4c, 0xd3, 0x18, 0xcd, 0x8d, 0xcd, 0x5a, 0x0e, 0x8b, 0x4d, 0xb8, 0x73, + 0xcf, 0x4e, 0x9d, 0xdd, 0x9d, 0x76, 0x74, 0x25, 0xbe, 0x35, 0x7b, 0x3f, 0x2e, 0x15, 0xda, 0x93, + 0x74, 0x47, 0x69, 0x91, 0x5d, 0xf3, 0x41, 0x68, 0x1c, 0xbe, 0x8c, 0xf7, 0xca, 0xfa, 0xcf, 0xb2, + 0x8f, 0x6e, 0xdc, 0x68, 0xaa, 0xd0, 0xfb, 0xed, 0x4d, 0x5b, 0x4c, 0x92, 0xe4, 0xe3, 0x3f, 0x2c, + 0x74, 0x2a, 0x3e, 0x8a, 0xcb, 0x65, 0x75, 0x1c, 0xcb, 0x1e, 0xdc, 0x8b, 0x45, 0x42, 0xbf, 0x49, + 0x5b, 0xcc, 0x48, 0x90, 0x0f, 0xf3, 0xf5, 0x12, 0xbf, 0xf6, 0xea, 0x5d, 0xb8, 0x48, 0x36, 0x96, + 0x63, 0xca, 0xf8, 0x29, 0xee, 0xd7, 0xe4, 0x6e, 0x0b, 0x6c, 0x4a, 0x5b, 0xd0, 0x48, 0x92, 0x2f, + 0xf3, 0xed, 0x4f, 0xe8, 0x78, 0x81, 0xf3, 0x45, 0xce, 0x12, 0x8f, 0x0b, 0xd3, 0x2e, 0xad, 0x22, + 0x36, 0xdb, 0x93, 0xe2, 0xa0, 0xa0, 0x65, 0x9a, 0x3c, 0x58, 0x6f, 0x86, 0xdb, 0x9f, 0xfc, 0x9a, + 0xef, 0x40, 0x3e, 0x67, 0xa2, 0x3d, 0x5e, 0x27, 0xd0, 0x26, 0x32, 0x93, 0xbe, 0x63, 0xba, 0xea, + 0x67, 0x11, 0xee, 0x16, 0x47, 0x9f, 0xad, 0xb6, 0x2f, 0x2c, 0xe8, 0xd7, 0x9a, 0xfd, 0xcc, 0xb5, + 0x7e, 0x5f, 0xe5, 0xbe, 0x32, 0x4b, 0xfd, 0x98, 0xef, 0xd5, 0xf8, 0x82, 0xf1, 0x5e, 0x32, 0x49, + 0xc9, 0x24, 0x91, 0x56, 0x1c, 0x29, 0xd2, 0x0c, 0x82, 0x4a, 0xe1, 0x42, 0xa4, 0x59, 0xa0, 0x07, + 0x7b, 0x44, 0x7a, 0xe8, 0xab, 0x44, 0xde, 0x89, 0x6d, 0x4a, 0x9e, 0xab, 0x84, 0x04, 0x75, 0xe4, + 0x3d, 0x51, 0xb4, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x60, 0xb0, 0xfc, 0x3f, + 0x37, 0x5c, 0xe7, 0x8f, 0x86, 0xf0, 0x6f, 0x57, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE pads_reset_unused_xpm[1] = {{ png, sizeof( png ), "pads_reset_unused_xpm" }}; + +//EOF diff --git a/bitmaps_png/include/bitmaps_png/bitmaps_list.h b/bitmaps_png/include/bitmaps_png/bitmaps_list.h index b221d919e8..4b8af49d1e 100644 --- a/bitmaps_png/include/bitmaps_png/bitmaps_list.h +++ b/bitmaps_png/include/bitmaps_png/bitmaps_list.h @@ -321,6 +321,10 @@ EXTERN_BITMAP( pad_xpm ) EXTERN_BITMAP( pad_enumerate_xpm ) EXTERN_BITMAP( pad_number_xpm ) EXTERN_BITMAP( pads_mask_layers_xpm ) +EXTERN_BITMAP( pads_remove_xpm ) +EXTERN_BITMAP( pads_remove_unused_xpm ) +EXTERN_BITMAP( pads_remove_unused_keep_bottom_xpm ) +EXTERN_BITMAP( pads_reset_unused_xpm ) EXTERN_BITMAP( pagelayout_load_xpm ) EXTERN_BITMAP( pagelayout_normal_view_mode_xpm ) EXTERN_BITMAP( pagelayout_special_view_mode_xpm ) diff --git a/bitmaps_png/sources/pads_remove.svg b/bitmaps_png/sources/pads_remove.svg new file mode 100644 index 0000000000..08a3cc2643 --- /dev/null +++ b/bitmaps_png/sources/pads_remove.svg @@ -0,0 +1,407 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pads_remove_unused.svg b/bitmaps_png/sources/pads_remove_unused.svg new file mode 100644 index 0000000000..b8351d066c --- /dev/null +++ b/bitmaps_png/sources/pads_remove_unused.svg @@ -0,0 +1,407 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pads_remove_unused_keep_bottom.svg b/bitmaps_png/sources/pads_remove_unused_keep_bottom.svg new file mode 100644 index 0000000000..d935397356 --- /dev/null +++ b/bitmaps_png/sources/pads_remove_unused_keep_bottom.svg @@ -0,0 +1,407 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pads_reset_unused.svg b/bitmaps_png/sources/pads_reset_unused.svg new file mode 100644 index 0000000000..763501e16c --- /dev/null +++ b/bitmaps_png/sources/pads_reset_unused.svg @@ -0,0 +1,406 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/pcb.keywords b/common/pcb.keywords index 2b74fbeabb..88c79408e5 100644 --- a/common/pcb.keywords +++ b/common/pcb.keywords @@ -2,7 +2,7 @@ # This program source code file is part of KiCad, a free EDA CAD application. # # Copyright (C) 2012 CERN. -# Copyright (C) 2019 KiCad Developers, see AUTHORS.txt for contributors. +# Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.txt for contributors. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -134,6 +134,7 @@ island_area_min italic justify keepout +keep_end_layers keep_upright kicad_pcb last_trace_width @@ -204,6 +205,7 @@ rev rect rect_delta reference +remove_unused_layers right rotate roundrect diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 9f564c898b..06e914d67f 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -142,6 +142,8 @@ set( PCBNEW_DIALOGS dialogs/dialog_track_via_properties_base.cpp dialogs/dialog_track_via_size.cpp dialogs/dialog_track_via_size_base.cpp + dialogs/dialog_unused_pad_layers.cpp + dialogs/dialog_unused_pad_layers_base.cpp dialogs/dialog_update_pcb.cpp dialogs/dialog_update_pcb_base.cpp dialogs/panel_display_options.cpp diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp index 69d15513db..a2eb69ac35 100644 --- a/pcbnew/class_pad.cpp +++ b/pcbnew/class_pad.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -94,6 +95,8 @@ D_PAD::D_PAD( MODULE* parent ) : m_shapesDirty = true; m_effectiveBoundingRadius = 0; + m_RemoveUnconnectedLayer = false; + m_KeepTopBottomLayer = true; } @@ -173,6 +176,45 @@ bool D_PAD::IsFlipped() const } +bool D_PAD::IsPadOnLayer( LSET aLayers ) const +{ + for( auto layer : aLayers.Seq() ) + { + if( IsPadOnLayer( layer ) ) + return true; + } + + return false; +} + + +bool D_PAD::IsPadOnLayer( int aLayer ) const +{ + BOARD* board = GetBoard(); + + if( !board ) + return false; + + /// We don't remove the copper from non-PTH pads + if( GetAttribute() != PAD_ATTRIB_STANDARD ) + return IsOnLayer( static_cast( aLayer ) ); + + /// Heatsink pads always get copper + if( GetProperty() == PAD_PROP_HEATSINK ) + return IsOnLayer( static_cast( aLayer ) ); + + if( !m_RemoveUnconnectedLayer ) + return true; + + /// Plated through hole pads need copper on the top/bottom layers for proper soldering + if( aLayer == F_Cu || aLayer == B_Cu ) + return true; + + return board->GetConnectivity()->IsConnectedOnLayer( this, static_cast( aLayer ), + { PCB_TRACE_T, PCB_ARC_T, PCB_VIA_T, PCB_PAD_T } ); +} + + int D_PAD::GetRoundRectCornerRadius() const { return KiROUND( std::min( m_Size.x, m_Size.y ) * m_roundedCornerScale ); diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h index 5fff15ea38..949ba68bd0 100644 --- a/pcbnew/class_pad.h +++ b/pcbnew/class_pad.h @@ -502,6 +502,20 @@ public: int GetSubRatsnest() const { return m_SubRatsnest; } void SetSubRatsnest( int aSubRatsnest ) { m_SubRatsnest = aSubRatsnest; } + /** + * Sets the unconnected removal property. If true, the copper is removed on zone fill + * or when specifically requested when the pad is not connected on a layer. This requires + * that there be a through hole. + */ + void SetRemoveUnconnected( bool aSet ) { m_RemoveUnconnectedLayer = aSet; } + bool GetRemoveUnconnected() const { return m_RemoveUnconnectedLayer; } + + /** + * Sets whether we keep the top and bottom connections even if they are not connected + */ + void SetKeepTopBottom( bool aSet ) { m_KeepTopBottomLayer = aSet; } + bool GetKeepTopBottom() const { return m_KeepTopBottomLayer; } + void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector& aList ) override; bool IsOnLayer( PCB_LAYER_ID aLayer ) const override @@ -509,6 +523,9 @@ public: return m_layerMask[aLayer]; } + bool IsPadOnLayer( int aLayer ) const; + bool IsPadOnLayer( LSET aLayers ) const; + bool HitTest( const wxPoint& aPosition, int aAccuracy = 0 ) const override; bool HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy = 0 ) const override; @@ -678,6 +695,9 @@ private: int m_LengthPadToDie; // Length net from pad to die, inside the package + bool m_RemoveUnconnectedLayer; // If true, the pad copper is removed for layers that are not connected + bool m_KeepTopBottomLayer; // When removing unconnected pads, keep the top and bottom pads + /* * Pad clearances, margins, etc. exist in a hiearchy. If a given level is specified then * the remaining levels are NOT consulted. diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index cbff940922..bea0988245 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -60,6 +61,8 @@ VIA::VIA( BOARD_ITEM* aParent ) : SetViaType( VIATYPE::THROUGH ); m_BottomLayer = B_Cu; SetDrillDefault(); + m_RemoveUnconnectedLayer = false; + m_KeepTopBottomLayer = true; } @@ -163,6 +166,14 @@ void TRACK::GetWidthConstraints( int* aMin, int* aMax, wxString* aSource ) const int VIA::GetMinAnnulus( PCB_LAYER_ID aLayer, wxString* aSource ) const { + if( !IsPadOnLayer( aLayer ) ) + { + if( aSource ) + *aSource = _( "removed annulus" ); + + return 0; + } + const DRC_CONSTRAINT* constraint = GetConstraint( this, nullptr, DRC_RULE_ID_ANNULUS, aLayer, aSource ); @@ -482,6 +493,39 @@ void VIA::SanitizeLayers() } +bool VIA::IsPadOnLayer( LSET aLayers ) const +{ + for( auto layer : aLayers.Seq() ) + { + if( IsPadOnLayer( layer ) ) + return true; + } + + return false; +} + + +bool VIA::IsPadOnLayer( int aLayer ) const +{ + BOARD* board = GetBoard(); + + if( !board ) + return false; + + if( !IsOnLayer( static_cast( aLayer ) ) ) + return false; + + if( !m_RemoveUnconnectedLayer ) + return true; + + if( m_KeepTopBottomLayer && ( aLayer == m_Layer || aLayer == m_BottomLayer ) ) + return true; + + return board->GetConnectivity()->IsConnectedOnLayer( this, static_cast( aLayer ), + { PCB_TRACE_T, PCB_ARC_T, PCB_PAD_T } ); +} + + void TRACK::ViewGetLayers( int aLayers[], int& aCount ) const { // Show the track and its netname on different layers diff --git a/pcbnew/class_track.h b/pcbnew/class_track.h index e33632c8eb..c5ca09d99d 100644 --- a/pcbnew/class_track.h +++ b/pcbnew/class_track.h @@ -337,7 +337,7 @@ public: virtual void SwapData( BOARD_ITEM* aImage ) override; private: - wxPoint m_Mid; ///< Arc mid point, halfway between start and end + wxPoint m_Mid; ///< Arc mid point, halfway between start and end }; @@ -441,6 +441,33 @@ public: int GetMinAnnulus( PCB_LAYER_ID aLayer, wxString* aSource ) const; + /** + * Sets the unconnected removal property. If true, the copper is removed on zone fill + * or when specifically requested when the via is not connected on a layer. + */ + void SetRemoveUnconnected( bool aSet ) { m_RemoveUnconnectedLayer = aSet; } + bool GetRemoveUnconnected() const { return m_RemoveUnconnectedLayer; } + + /** + * Sets whether we keep the top and bottom connections even if they are not connected + */ + void SetKeepTopBottom( bool aSet ) { m_KeepTopBottomLayer = aSet; } + bool GetKeepTopBottom() const { return m_KeepTopBottomLayer; } + + /** + * Checks to see whether the via should have a pad on the specific layer + * @param aLayer Layer to check for connectivity + * @return true if connected by pad or track + */ + bool IsPadOnLayer( int aLayer ) const; + + /** + * Checks to see if the via is present on any of the layers in the set + * @param aLayers set of layers to check the via against + * @return true if connected by pad or track on any of the associated layers + */ + bool IsPadOnLayer( LSET aLayers ) const; + /** * Function SetDrill * sets the drill value for vias. @@ -483,7 +510,10 @@ private: VIATYPE m_ViaType; // Type of via - int m_Drill; // for vias: via drill (- 1 for default value) + int m_Drill; // for vias: via drill (- 1 for default value) + + bool m_RemoveUnconnectedLayer; ///< Remove unconnected copper on a via + bool m_KeepTopBottomLayer; ///< Keep the top and bottom annular rings }; diff --git a/pcbnew/connectivity/connectivity_algo.h b/pcbnew/connectivity/connectivity_algo.h index efd6d5f41a..6f79ab3e6b 100644 --- a/pcbnew/connectivity/connectivity_algo.h +++ b/pcbnew/connectivity/connectivity_algo.h @@ -124,8 +124,6 @@ public: using CLUSTERS = std::vector; -private: - class ITEM_MAP_ENTRY { public: @@ -156,6 +154,8 @@ private: std::list m_items; }; +private: + CN_LIST m_itemList; std::unordered_map m_itemMap; diff --git a/pcbnew/connectivity/connectivity_data.cpp b/pcbnew/connectivity/connectivity_data.cpp index a71f128343..3348de0ade 100644 --- a/pcbnew/connectivity/connectivity_data.cpp +++ b/pcbnew/connectivity/connectivity_data.cpp @@ -326,6 +326,26 @@ void CONNECTIVITY_DATA::PropagateNets() m_connAlgo->PropagateNets(); } +bool CONNECTIVITY_DATA::IsConnectedOnLayer( const BOARD_CONNECTED_ITEM *aItem, int aLayer, + std::vector aTypes ) const +{ + CN_CONNECTIVITY_ALGO::ITEM_MAP_ENTRY &entry = m_connAlgo->ItemEntry( aItem ); + + for( auto citem : entry.GetItems() ) + { + for( auto connected : citem->ConnectedItems() ) + { + if( connected->Valid() && connected->Layers().Overlaps( aLayer ) + && ( aTypes.empty() + || std::count( aTypes.begin(), aTypes.end(), + connected->Parent()->Type() ) > 0 ) ) + return true; + } + } + + return false; +} + unsigned int CONNECTIVITY_DATA::GetUnconnectedCount() const { diff --git a/pcbnew/connectivity/connectivity_data.h b/pcbnew/connectivity/connectivity_data.h index 3e3f3f4a79..0b44df6396 100644 --- a/pcbnew/connectivity/connectivity_data.h +++ b/pcbnew/connectivity/connectivity_data.h @@ -173,6 +173,8 @@ public: */ unsigned int GetUnconnectedCount() const; + bool IsConnectedOnLayer( const BOARD_CONNECTED_ITEM* aItem, int aLayer, std::vector aTypes = {} ) const; + unsigned int GetNodeCount( int aNet = -1 ) const; unsigned int GetPadCount( int aNet = -1 ) const; diff --git a/pcbnew/dialogs/dialog_unused_pad_layers.cpp b/pcbnew/dialogs/dialog_unused_pad_layers.cpp new file mode 100644 index 0000000000..3db6b39eb9 --- /dev/null +++ b/pcbnew/dialogs/dialog_unused_pad_layers.cpp @@ -0,0 +1,157 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2020 CERN + * Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-3.0.html + * or you may search the http://www.gnu.org website for the version 3 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "dialog_unused_pad_layers.h" + +#include +#include +#include +#include +#include +#include + +enum SCOPE : int +{ + SCOPE_VIAS = 0, + SCOPE_PADS = 1 +}; + + +enum PAD_ACTION : int +{ + PAD_ACTION_REMOVE = 0, + PAD_ACTION_RESET +}; + + +DIALOG_UNUSED_PAD_LAYERS::DIALOG_UNUSED_PAD_LAYERS( PCB_BASE_FRAME* aParent, + const PCBNEW_SELECTION& aItems, + COMMIT& aCommit ) + : DIALOG_UNUSED_PAD_LAYERS_BASE( aParent ), + m_frame( aParent ), + m_items( aItems ), + m_commit( aCommit ) +{ + m_StdButtonsOK->SetDefault(); + m_image->SetBitmap( KiBitmap( pads_remove_unused_xpm ) ); + + // Now all widgets have the size fixed, call FinishDialogSettings + FinishDialogSettings(); +} + + +void DIALOG_UNUSED_PAD_LAYERS::syncImages( wxCommandEvent& aEvent ) +{ + if( m_rbAction->GetSelection() == PAD_ACTION_RESET ) + m_image->SetBitmap( KiBitmap( pads_reset_unused_xpm ) ); + else if( m_cbPreservePads->IsChecked() ) + m_image->SetBitmap( KiBitmap( pads_remove_unused_keep_bottom_xpm ) ); + else + m_image->SetBitmap( KiBitmap( pads_remove_unused_xpm ) ); +} + + +void DIALOG_UNUSED_PAD_LAYERS::onScopeChange( wxCommandEvent& aEvent ) +{ + if( m_rbScope->GetSelection() == SCOPE_PADS ) + { + m_cbPreservePads->SetValue( true ); + m_cbPreservePads->Disable(); + } + else + m_cbPreservePads->Enable(); + + syncImages( aEvent ); +} + + +bool DIALOG_UNUSED_PAD_LAYERS::TransferDataFromWindow() +{ + if( m_cbSelectedOnly->IsChecked() ) + { + for( auto item : m_items ) + { + m_commit.Modify( item ); + + if( item->Type() == PCB_VIA_T && m_rbScope->GetSelection() == SCOPE_VIAS ) + { + VIA* via = static_cast( item ); + via->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE ); + via->SetKeepTopBottom( m_cbPreservePads->IsChecked() ); + } + + if( item->Type() == PCB_MODULE_T && m_rbScope->GetSelection() == SCOPE_PADS ) + { + MODULE* mod = static_cast( item ); + + for( auto pad : mod->Pads() ) + { + pad->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE ); + pad->SetKeepTopBottom( m_cbPreservePads->IsChecked() ); + } + } + + if( item->Type() == PCB_PAD_T && m_rbScope->GetSelection() == SCOPE_PADS ) + { + D_PAD* pad = static_cast( item ); + + pad->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE ); + pad->SetKeepTopBottom( m_cbPreservePads->IsChecked() ); + } + } + } + else + { + if( m_rbScope->GetSelection() == SCOPE_PADS ) + { + for( auto item : m_frame->GetBoard()->Modules() ) + { + m_commit.Modify( item ); + MODULE* mod = static_cast( item ); + + for( auto pad : mod->Pads() ) + { + pad->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE ); + pad->SetKeepTopBottom( m_cbPreservePads->IsChecked() ); + } + } + } + else + { + for( auto item : m_frame->GetBoard()->Tracks() ) + { + if( item->Type() != PCB_VIA_T ) + continue; + + m_commit.Modify( item ); + VIA* via = static_cast( item ); + via->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE ); + via->SetKeepTopBottom( m_cbPreservePads->IsChecked() ); + } + } + } + + m_commit.Push( _( "Set Unused Pad Properties" ) ); + return true; +} diff --git a/pcbnew/dialogs/dialog_unused_pad_layers.fbp b/pcbnew/dialogs/dialog_unused_pad_layers.fbp new file mode 100644 index 0000000000..60b27316b8 --- /dev/null +++ b/pcbnew/dialogs/dialog_unused_pad_layers.fbp @@ -0,0 +1,556 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + dialog_unused_pad_layers_base + 1000 + none + + 1 + DIALOG_UNUSED_PAD_LAYERS_BASE + + . + + 1 + 1 + 1 + 1 + UI + 0 + 0 + + 0 + wxAUI_MGR_DEFAULT + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + -1,-1 + DIALOG_UNUSED_PAD_LAYERS_BASE + + 602,321 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + DIALOG_SHIM; dialog_shim.h + Unused Pad Layers + + + + + + + m_MainSizer + wxVERTICAL + protected + + 5 + wxEXPAND + 6 + + + bSizer2 + wxHORIZONTAL + none + + 5 + wxEXPAND + 4 + + + bSizer6 + wxVERTICAL + none + + 0 + wxEXPAND + 1 + + + bSizer4 + wxVERTICAL + none + + 5 + + 2 + + + bSizer5 + wxHORIZONTAL + none + + 5 + wxEXPAND + 0 + + 0 + protected + 0 + + + + 5 + wxALL|wxEXPAND|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "&Vias" "&Pads" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Scope + 1 + + 0 + + + 0 + + 1 + m_rbScope + 1 + + + protected + 1 + + Resizable + 0 + 1 + + wxRA_SPECIFY_COLS + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onScopeChange + + + + 5 + wxALL|wxEXPAND|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "&Remove Unused" "Reset &Unused" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Action + 1 + + 0 + + + 0 + + 1 + m_rbAction + 1 + + + protected + 1 + + Resizable + 0 + 1 + + wxRA_SPECIFY_COLS + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + syncImages + + + + 5 + wxEXPAND + 0 + + 0 + protected + 0 + + + + + + 5 + wxEXPAND|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + &Selection only + + 0 + + + 0 + + 1 + m_cbSelectedOnly + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + 5 + wxEXPAND|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + &Keep pads at first and last layers + + 0 + + + 0 + + 1 + m_cbPreservePads + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + syncImages + + + + + + + + 5 + wxEXPAND | wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline1 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_VERTICAL + ; ; forward_declare + 0 + + + + + + + + 5 + wxEXPAND|wxLEFT|wxRIGHT + 2 + + + bSizer3 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + 0 + protected + 0 + + + + 10 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + Load From Resource; + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_image + 1 + + + protected + 1 + + Resizable + 1 + + ; ; forward_declare + 0 + + + + + + + + 5 + wxEXPAND + 0 + + 0 + protected + 0 + + + + + + + + 5 + wxEXPAND|wxALL + 0 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_StdButtons + protected + + + + + + diff --git a/pcbnew/dialogs/dialog_unused_pad_layers.h b/pcbnew/dialogs/dialog_unused_pad_layers.h new file mode 100644 index 0000000000..341a8151ff --- /dev/null +++ b/pcbnew/dialogs/dialog_unused_pad_layers.h @@ -0,0 +1,55 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2020 CERN + * Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-3.0.html + * or you may search the http://www.gnu.org website for the version 3 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#ifndef __dialog_remove_unused_pads__ +#define __dialog_remove_unused_pads__ + +#include "dialog_unused_pad_layers_base.h" + +class COMMIT; +class PCB_BASE_FRAME; +class PCBNEW_SELECTION; + +class DIALOG_UNUSED_PAD_LAYERS : public DIALOG_UNUSED_PAD_LAYERS_BASE +{ +public: + DIALOG_UNUSED_PAD_LAYERS( PCB_BASE_FRAME* aParent, + const PCBNEW_SELECTION& aItems, + COMMIT& aCommit ); + +private: + bool TransferDataFromWindow() override; + + bool AcceptOptions(); + + void syncImages( wxCommandEvent& aEvent ) override; + void onScopeChange( wxCommandEvent& aEvent ) override; + + PCB_BASE_FRAME* m_frame; + const PCBNEW_SELECTION& m_items; // List of items to be modified. + COMMIT& m_commit; // An undo record to add any changes to. +}; + +#endif // __dialog_remove_unused_pads__ diff --git a/pcbnew/dialogs/dialog_unused_pad_layers_base.cpp b/pcbnew/dialogs/dialog_unused_pad_layers_base.cpp new file mode 100644 index 0000000000..697bf73b2c --- /dev/null +++ b/pcbnew/dialogs/dialog_unused_pad_layers_base.cpp @@ -0,0 +1,112 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 3.9.0 Jul 27 2020) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "dialog_unused_pad_layers_base.h" + +/////////////////////////////////////////////////////////////////////////// + +DIALOG_UNUSED_PAD_LAYERS_BASE::DIALOG_UNUSED_PAD_LAYERS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + + m_MainSizer = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer2; + bSizer2 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer4; + bSizer4 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer5; + bSizer5 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer5->Add( 0, 0, 0, wxEXPAND, 5 ); + + wxString m_rbScopeChoices[] = { _("&Vias"), _("&Pads") }; + int m_rbScopeNChoices = sizeof( m_rbScopeChoices ) / sizeof( wxString ); + m_rbScope = new wxRadioBox( this, wxID_ANY, _("Scope"), wxDefaultPosition, wxDefaultSize, m_rbScopeNChoices, m_rbScopeChoices, 1, wxRA_SPECIFY_COLS ); + m_rbScope->SetSelection( 0 ); + bSizer5->Add( m_rbScope, 0, wxALL|wxEXPAND|wxLEFT|wxRIGHT, 5 ); + + wxString m_rbActionChoices[] = { _("&Remove Unused"), _("Reset &Unused") }; + int m_rbActionNChoices = sizeof( m_rbActionChoices ) / sizeof( wxString ); + m_rbAction = new wxRadioBox( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, m_rbActionNChoices, m_rbActionChoices, 1, wxRA_SPECIFY_COLS ); + m_rbAction->SetSelection( 0 ); + bSizer5->Add( m_rbAction, 0, wxALL|wxEXPAND|wxLEFT|wxRIGHT, 5 ); + + + bSizer5->Add( 0, 0, 0, wxEXPAND, 5 ); + + + bSizer4->Add( bSizer5, 2, 0, 5 ); + + m_cbSelectedOnly = new wxCheckBox( this, wxID_ANY, _("&Selection only"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer4->Add( m_cbSelectedOnly, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 ); + + m_cbPreservePads = new wxCheckBox( this, wxID_ANY, _("&Keep pads at first and last layers"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer4->Add( m_cbPreservePads, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 ); + + + bSizer6->Add( bSizer4, 1, wxEXPAND, 0 ); + + + bSizer2->Add( bSizer6, 4, wxEXPAND, 5 ); + + m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer2->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 ); + + wxBoxSizer* bSizer3; + bSizer3 = new wxBoxSizer( wxVERTICAL ); + + + bSizer3->Add( 0, 0, 0, wxEXPAND, 5 ); + + m_image = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer3->Add( m_image, 0, wxALL, 10 ); + + + bSizer3->Add( 0, 0, 0, wxEXPAND, 5 ); + + + bSizer2->Add( bSizer3, 2, wxEXPAND|wxLEFT|wxRIGHT, 5 ); + + + m_MainSizer->Add( bSizer2, 6, wxEXPAND, 5 ); + + m_StdButtons = new wxStdDialogButtonSizer(); + m_StdButtonsOK = new wxButton( this, wxID_OK ); + m_StdButtons->AddButton( m_StdButtonsOK ); + m_StdButtonsCancel = new wxButton( this, wxID_CANCEL ); + m_StdButtons->AddButton( m_StdButtonsCancel ); + m_StdButtons->Realize(); + + m_MainSizer->Add( m_StdButtons, 0, wxEXPAND|wxALL, 5 ); + + + this->SetSizer( m_MainSizer ); + this->Layout(); + + this->Centre( wxBOTH ); + + // Connect Events + m_rbScope->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::onScopeChange ), NULL, this ); + m_rbAction->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this ); + m_cbPreservePads->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this ); +} + +DIALOG_UNUSED_PAD_LAYERS_BASE::~DIALOG_UNUSED_PAD_LAYERS_BASE() +{ + // Disconnect Events + m_rbScope->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::onScopeChange ), NULL, this ); + m_rbAction->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this ); + m_cbPreservePads->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this ); + +} diff --git a/pcbnew/dialogs/dialog_unused_pad_layers_base.h b/pcbnew/dialogs/dialog_unused_pad_layers_base.h new file mode 100644 index 0000000000..f675267dc0 --- /dev/null +++ b/pcbnew/dialogs/dialog_unused_pad_layers_base.h @@ -0,0 +1,63 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 3.9.0 Jul 27 2020) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include +#include +#include "dialog_shim.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class DIALOG_UNUSED_PAD_LAYERS_BASE +/////////////////////////////////////////////////////////////////////////////// +class DIALOG_UNUSED_PAD_LAYERS_BASE : public DIALOG_SHIM +{ + private: + + protected: + wxBoxSizer* m_MainSizer; + wxRadioBox* m_rbScope; + wxRadioBox* m_rbAction; + wxCheckBox* m_cbSelectedOnly; + wxCheckBox* m_cbPreservePads; + wxStaticLine* m_staticline1; + wxStaticBitmap* m_image; + wxStdDialogButtonSizer* m_StdButtons; + wxButton* m_StdButtonsOK; + wxButton* m_StdButtonsCancel; + + // Virtual event handlers, overide them in your derived class + virtual void onScopeChange( wxCommandEvent& event ) { event.Skip(); } + virtual void syncImages( wxCommandEvent& event ) { event.Skip(); } + + + public: + + DIALOG_UNUSED_PAD_LAYERS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Unused Pad Layers"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 602,321 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~DIALOG_UNUSED_PAD_LAYERS_BASE(); + +}; + diff --git a/pcbnew/drc/drc_clearance_test_functions.cpp b/pcbnew/drc/drc_clearance_test_functions.cpp index 6ea59d40a4..68c121e6a9 100644 --- a/pcbnew/drc/drc_clearance_test_functions.cpp +++ b/pcbnew/drc/drc_clearance_test_functions.cpp @@ -41,6 +41,7 @@ void DRC::doTrackDrc( BOARD_COMMIT& aCommit, TRACK* aRefSeg, TRACKS::iterator aS { BOARD_DESIGN_SETTINGS& bds = m_pcb->GetDesignSettings(); + SHAPE_SEGMENT refSeg( aRefSeg->GetStart(), aRefSeg->GetEnd(), aRefSeg->GetWidth() ); PCB_LAYER_ID refLayer = aRefSeg->GetLayer(); LSET refLayerSet = aRefSeg->GetLayerSet(); @@ -268,6 +269,16 @@ void DRC::doTrackDrc( BOARD_COMMIT& aCommit, TRACK* aRefSeg, TRACKS::iterator aS EDA_RECT inflatedBB = refSegBB; inflatedBB.Inflate( pad->GetBoundingRadius() + m_largestClearance ); + /// We setup the dummy pad to use in case we need to only draw the hole outline rather + /// than the pad itself + D_PAD dummypad( pad->GetParent() ); + dummypad.SetNetCode( pad->GetNetCode() ); + dummypad.SetSize( pad->GetDrillSize() ); + dummypad.SetOrientation( pad->GetOrientation() ); + dummypad.SetShape( pad->GetDrillShape() == PAD_DRILL_SHAPE_OBLONG ? PAD_SHAPE_OVAL + : PAD_SHAPE_CIRCLE ); + dummypad.SetPosition( pad->GetPosition() ); + if( !inflatedBB.Contains( pad->GetPosition() ) ) continue; @@ -318,6 +329,10 @@ void DRC::doTrackDrc( BOARD_COMMIT& aCommit, TRACK* aRefSeg, TRACKS::iterator aS } } + /// Skip checking pad copper when it has been removed + if( !pad->IsPadOnLayer( refLayer ) ) + continue; + int minClearance = aRefSeg->GetClearance( aRefSeg->GetLayer(), pad, &m_clearanceSource ); int actual; diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp index d3b74dc2fd..9e3e1bb951 100644 --- a/pcbnew/kicad_plugin.cpp +++ b/pcbnew/kicad_plugin.cpp @@ -1259,6 +1259,17 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const formatLayers( aPad->GetLayerSet() ); + if( aPad->GetAttribute() == PAD_ATTRIB_STANDARD ) + { + if( aPad->GetRemoveUnconnected() ) + { + m_out->Print( 0, " (remove_unused_layers)" ); + + if( aPad->GetKeepTopBottom() ) + m_out->Print( 0, " (keep_end_layers)" ); + } + } + // Output the radius ratio for rounded and chamfered rect pads if( aPad->GetShape() == PAD_SHAPE_ROUNDRECT || aPad->GetShape() == PAD_SHAPE_CHAMFERED_RECT) { @@ -1585,6 +1596,14 @@ void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const m_out->Print( 0, " (layers %s %s)", m_out->Quotew( m_board->GetLayerName( layer1 ) ).c_str(), m_out->Quotew( m_board->GetLayerName( layer2 ) ).c_str() ); + + if( via->GetRemoveUnconnected() ) + { + m_out->Print( 0, " (remove_unused_layers)" ); + + if( via->GetKeepTopBottom() ) + m_out->Print( 0, " (keep_end_layers)" ); + } } else if( aTrack->Type() == PCB_ARC_T ) { diff --git a/pcbnew/kicad_plugin.h b/pcbnew/kicad_plugin.h index 4793155d68..ada312fd5c 100644 --- a/pcbnew/kicad_plugin.h +++ b/pcbnew/kicad_plugin.h @@ -74,7 +74,8 @@ class TEXTE_PCB; //#define SEXPR_BOARD_FILE_VERSION 20200628 // remove visibility settings //#define SEXPR_BOARD_FILE_VERSION 20200724 // Add KIID to module components //#define SEXPR_BOARD_FILE_VERSION 20200807 // Add zone hatch advanced settings -#define SEXPR_BOARD_FILE_VERSION 20200808 // Add properties to modules +//#define SEXPR_BOARD_FILE_VERSION 20200808 // Add properties to modules +#define SEXPR_BOARD_FILE_VERSION 20200809 // Add REMOVE_UNUSED_LAYERS option to vias and THT pads #define CTL_STD_LAYER_NAMES (1 << 0) ///< Use English Standard layer names #define CTL_OMIT_NETS (1 << 1) ///< Omit pads net names (useless in library) diff --git a/pcbnew/menubar_pcb_editor.cpp b/pcbnew/menubar_pcb_editor.cpp index 92638ab596..cf9c038929 100644 --- a/pcbnew/menubar_pcb_editor.cpp +++ b/pcbnew/menubar_pcb_editor.cpp @@ -484,6 +484,9 @@ void PCB_EDIT_FRAME::ReCreateMenuBar() toolsMenu->AddItem( PCB_ACTIONS::updateFootprints, SELECTION_CONDITIONS::ShowAlways ); toolsMenu->AddItem( PCB_ACTIONS::boardReannotate, SELECTION_CONDITIONS::ShowAlways ); + toolsMenu->AddSeparator(); + toolsMenu->AddItem( PCB_ACTIONS::removeUnusedPads, SELECTION_CONDITIONS::ShowAlways ); + #if defined(KICAD_SCRIPTING_WXPYTHON) auto pythonConsoleShownCondition = [] ( const SELECTION& aSel ) { wxMiniFrame* pythonConsole = (wxMiniFrame *) PCB_EDIT_FRAME::findPythonConsole(); diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index 7f79dca228..1d6c0e20cf 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -612,6 +612,11 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer ) else radius = aVia->GetWidth() / 2.0; + /// Vias not connected to copper are optionally not drawn + /// We draw instead the hole size to ensure we show the proper clearance + if( IsCopperLayer( aLayer ) && !aVia->IsPadOnLayer( aLayer ) ) + radius = getDrillSize(aVia) / 2.0 ; + bool sketchMode = false; const COLOR4D& color = m_pcbSettings.GetColor( aVia, aLayer ); @@ -696,14 +701,31 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer ) void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) { + const D_PAD* pad = aPad; + + /// We setup the dummy pad to use in case we need to only draw the hole outline rather + /// than the pad itself + D_PAD dummypad( aPad->GetParent() ); + dummypad.SetNetCode( aPad->GetNetCode() ); + dummypad.SetSize( aPad->GetDrillSize() ); + dummypad.SetOrientation( aPad->GetOrientation() ); + dummypad.SetShape( aPad->GetDrillShape() == PAD_DRILL_SHAPE_OBLONG ? PAD_SHAPE_OVAL + : PAD_SHAPE_CIRCLE ); + dummypad.SetPosition( aPad->GetPosition() ); + + /// Pads not connected to copper are optionally not drawn + /// We draw instead the hole size to ensure we show the proper clearance + if( IsCopperLayer( aLayer ) && !aPad->IsPadOnLayer( aLayer ) ) + pad = &dummypad; + // Draw description layer if( IsNetnameLayer( aLayer ) ) { // Is anything that we can display enabled? if( m_pcbSettings.m_netNamesOnPads || m_pcbSettings.m_padNumbers ) { - bool displayNetname = ( m_pcbSettings.m_netNamesOnPads && !aPad->GetNetname().empty() ); - EDA_RECT padBBox = aPad->GetBoundingBox(); + bool displayNetname = ( m_pcbSettings.m_netNamesOnPads && !pad->GetNetname().empty() ); + EDA_RECT padBBox = pad->GetBoundingBox(); VECTOR2D position = padBBox.Centre(); VECTOR2D padsize = VECTOR2D( padBBox.GetSize() ); @@ -761,7 +783,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) if( displayNetname ) { - wxString netname = UnescapeString( aPad->GetShortNetname() ); + wxString netname = UnescapeString( pad->GetShortNetname() ); // calculate the size of net name text: double tsize = 1.5 * padsize.x / netname.Length(); tsize = std::min( tsize, size ); @@ -776,7 +798,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) if( m_pcbSettings.m_padNumbers ) { - const wxString& padName = aPad->GetName(); + const wxString& padName = pad->GetName(); textpos.y = -textpos.y; double tsize = 1.5 * padsize.x / padName.Length(); tsize = std::min( tsize, size ); @@ -801,10 +823,10 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) // Pad hole color is pad-type-specific: the background color for plated holes and the // pad color for NPTHs. Note the extra check for "should be" NPTHs to keep mis-marked // holes with no annular ring from getting "lost" in the background. - if( ( aLayer == LAYER_PADS_PLATEDHOLES ) && !aPad->PadShouldBeNPTH() ) + if( ( aLayer == LAYER_PADS_PLATEDHOLES ) && !pad->PadShouldBeNPTH() ) color = m_pcbSettings.GetBackgroundColor(); else - color = m_pcbSettings.GetColor( aPad, aLayer ); + color = m_pcbSettings.GetColor( pad, aLayer ); if( m_pcbSettings.m_sketchMode[LAYER_PADS_TH] ) { @@ -825,7 +847,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) // Choose drawing settings depending on if we are drawing a pad itself or a hole if( aLayer == LAYER_PADS_PLATEDHOLES || aLayer == LAYER_NON_PLATEDHOLES ) { - const SHAPE_SEGMENT* seg = aPad->GetEffectiveHoleShape(); + const SHAPE_SEGMENT* seg = pad->GetEffectiveHoleShape(); if( seg->GetSeg().A == seg->GetSeg().B ) // Circular hole m_gal->DrawCircle( seg->GetSeg().A, seg->GetWidth()/2 ); @@ -834,19 +856,19 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) } else { - wxSize pad_size = aPad->GetSize(); + wxSize pad_size = pad->GetSize(); wxSize margin; switch( aLayer ) { case F_Mask: case B_Mask: - margin.x = margin.y = aPad->GetSolderMaskMargin(); + margin.x = margin.y = pad->GetSolderMaskMargin(); break; case F_Paste: case B_Paste: - margin = aPad->GetSolderPasteMargin(); + margin = pad->GetSolderPasteMargin(); break; default: @@ -856,11 +878,11 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) if( margin.x != margin.y ) { - const_cast( aPad )->SetSize( pad_size + margin + margin ); + const_cast( pad )->SetSize( pad_size + margin + margin ); margin.x = margin.y = 0; } - const std::shared_ptr shapes = std::dynamic_pointer_cast( aPad->GetEffectiveShape() ); + const std::shared_ptr shapes = std::dynamic_pointer_cast( pad->GetEffectiveShape() ); if( shapes && shapes->Size() == 1 && shapes->Shapes()[0]->Type() == SH_SEGMENT ) { @@ -875,12 +897,12 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) else { SHAPE_POLY_SET polySet; - aPad->TransformShapeWithClearanceToPolygon( polySet, margin.x ); + pad->TransformShapeWithClearanceToPolygon( polySet, margin.x ); m_gal->DrawPolygon( polySet ); } - if( aPad->GetSize() != pad_size ) - const_cast( aPad )->SetSize( pad_size ); + if( pad->GetSize() != pad_size ) + const_cast( pad )->SetSize( pad_size ); } // Clearance outlines @@ -898,7 +920,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) int clearance = aPad->GetClearance( aPad->GetLayer() ); const std::shared_ptr shapes = - std::dynamic_pointer_cast( aPad->GetEffectiveShape() ); + std::dynamic_pointer_cast( pad->GetEffectiveShape() ); if( shapes && shapes->Size() == 1 && shapes->Shapes()[0]->Type() == SH_SEGMENT ) { @@ -913,7 +935,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) else { SHAPE_POLY_SET polySet; - aPad->TransformShapeWithClearanceToPolygon( polySet, clearance ); + pad->TransformShapeWithClearanceToPolygon( polySet, clearance ); m_gal->DrawPolygon( polySet ); } } diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp index e1e1d4109c..f9b96a3502 100644 --- a/pcbnew/pcb_parser.cpp +++ b/pcbnew/pcb_parser.cpp @@ -3478,6 +3478,16 @@ D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent ) } break; + case T_remove_unused_layers: + pad->SetRemoveUnconnected( true ); + NeedRIGHT(); + break; + + case T_keep_end_layers: + pad->SetKeepTopBottom( true ); + NeedRIGHT(); + break; + case T_tstamp: NextTok(); const_cast( pad->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); @@ -3768,6 +3778,16 @@ VIA* PCB_PARSER::parseVIA() NeedRIGHT(); break; + case T_remove_unused_layers: + via->SetRemoveUnconnected( true ); + NeedRIGHT(); + break; + + case T_keep_end_layers: + via->SetKeepTopBottom( true ); + NeedRIGHT(); + break; + case T_tstamp: NextTok(); const_cast( via->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); diff --git a/pcbnew/plot_board_layers.cpp b/pcbnew/plot_board_layers.cpp index 0e4a123370..01cfcaba03 100644 --- a/pcbnew/plot_board_layers.cpp +++ b/pcbnew/plot_board_layers.cpp @@ -248,6 +248,10 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, continue; } + /// pads not connected to copper are optionally not drawn + if( onCopperLayer && !pad->IsPadOnLayer( aLayerMask ) ) + continue; + COLOR4D color = COLOR4D::BLACK; if( pad->GetLayerSet()[B_Cu] ) @@ -416,6 +420,10 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, int diameter = Via->GetWidth() + 2 * via_margin + width_adj; + /// Vias not connected to copper are optionally not drawn + if( onCopperLayer && !Via->IsPadOnLayer( aLayerMask ) ) + continue; + // Don't draw a null size item : if( diameter <= 0 ) continue; diff --git a/pcbnew/router/pns_kicad_iface.cpp b/pcbnew/router/pns_kicad_iface.cpp index fb4a246954..a8c2a03906 100644 --- a/pcbnew/router/pns_kicad_iface.cpp +++ b/pcbnew/router/pns_kicad_iface.cpp @@ -693,25 +693,38 @@ std::unique_ptr PNS_KICAD_IFACE_BASE::syncArc( ARC* aArc ) } -std::unique_ptr PNS_KICAD_IFACE_BASE::syncVia( VIA* aVia ) +std::vector> PNS_KICAD_IFACE_BASE::syncVia( VIA* aVia ) { + std::vector> retval; + PCB_LAYER_ID top, bottom; aVia->LayerPair( &top, &bottom ); - std::unique_ptr via( new PNS::VIA( - aVia->GetPosition(), - LAYER_RANGE( top, bottom ), - aVia->GetWidth(), - aVia->GetDrillValue(), - aVia->GetNetCode(), - aVia->GetViaType() ) - ); - via->SetParent( aVia ); + for( int layer = top; layer <= bottom; ++layer ) + { + int width = aVia->GetWidth(); - if( aVia->IsLocked() ) - via->Mark( PNS::MK_LOCKED ); + if( !aVia->IsPadOnLayer( layer ) ) + width = aVia->GetDrillValue(); - return via; + std::unique_ptr via( new PNS::VIA( + aVia->GetPosition(), + LAYER_RANGE( layer ), + width, + aVia->GetDrillValue(), + aVia->GetNetCode(), + aVia->GetViaType() ) + ); + + via->SetParent( aVia ); + + if( aVia->IsLocked() ) + via->Mark( PNS::MK_LOCKED ); + + retval.push_back( std::move( via ) ); + } + + return retval; } @@ -1005,7 +1018,9 @@ void PNS_KICAD_IFACE_BASE::SyncWorld( PNS::NODE *aWorld ) } else if( type == PCB_VIA_T ) { - if( auto via = syncVia( static_cast( t ) ) ) + auto viavec = syncVia( static_cast( t ) ); + + for( auto& via : viavec ) aWorld->Add( std::move( via ) ); } } diff --git a/pcbnew/router/pns_kicad_iface.h b/pcbnew/router/pns_kicad_iface.h index a5e1d672ca..5587d9c8ea 100644 --- a/pcbnew/router/pns_kicad_iface.h +++ b/pcbnew/router/pns_kicad_iface.h @@ -69,7 +69,7 @@ public: return m_world; }; - BOARD* GetBoard() const + BOARD* GetBoard() const { return m_board; } @@ -84,7 +84,7 @@ protected: std::unique_ptr syncPad( D_PAD* aPad ); std::unique_ptr syncTrack( TRACK* aTrack ); std::unique_ptr syncArc( ARC* aArc ); - std::unique_ptr syncVia( VIA* aVia ); + std::vector> syncVia( VIA* aVia ); bool syncTextItem( PNS::NODE* aWorld, EDA_TEXT* aText, PCB_LAYER_ID aLayer ); bool syncGraphicalItem( PNS::NODE* aWorld, DRAWSEGMENT* aItem ); bool syncZone( PNS::NODE* aWorld, ZONE_CONTAINER* aZone ); diff --git a/pcbnew/router/pns_via.h b/pcbnew/router/pns_via.h index b298901feb..ef100981e9 100644 --- a/pcbnew/router/pns_via.h +++ b/pcbnew/router/pns_via.h @@ -67,13 +67,6 @@ public: m_drill = aDrill; m_shape = SHAPE_CIRCLE( aPos, aDiameter / 2 ); m_viaType = aViaType; - - //If we're a through-board via, use all layers regardless of the set passed - if( aViaType == VIATYPE::THROUGH ) - { - LAYER_RANGE allLayers( 0, MAX_CU_LAYERS - 1 ); - SetLayers( allLayers ); - } } diff --git a/pcbnew/tools/global_edit_tool.cpp b/pcbnew/tools/global_edit_tool.cpp index 0d93aa85b7..fba8904ed0 100644 --- a/pcbnew/tools/global_edit_tool.cpp +++ b/pcbnew/tools/global_edit_tool.cpp @@ -1,7 +1,7 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2019 KiCad Developers, see AUTHORS.TXT for contributors. + * Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.TXT for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -196,6 +197,22 @@ int GLOBAL_EDIT_TOOL::CleanupGraphics( const TOOL_EVENT& aEvent ) } +int GLOBAL_EDIT_TOOL::RemoveUnusedPads( const TOOL_EVENT& aEvent ) +{ + PCB_EDIT_FRAME* editFrame = getEditFrame(); + PCBNEW_SELECTION& selection = m_selectionTool->RequestSelection( + []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector ) + { + EditToolSelectionFilter( aCollector, EXCLUDE_TRANSIENTS ); + } ); + DIALOG_UNUSED_PAD_LAYERS dlg( editFrame, selection, *m_commit ); + + dlg.ShowModal(); + + return 0; +} + + void GLOBAL_EDIT_TOOL::setTransitions() { Go( &GLOBAL_EDIT_TOOL::ExchangeFootprints, PCB_ACTIONS::updateFootprint.MakeEvent() ); @@ -210,6 +227,7 @@ void GLOBAL_EDIT_TOOL::setTransitions() Go( &GLOBAL_EDIT_TOOL::GlobalDeletions, PCB_ACTIONS::globalDeletions.MakeEvent() ); Go( &GLOBAL_EDIT_TOOL::CleanupTracksAndVias, PCB_ACTIONS::cleanupTracksAndVias.MakeEvent() ); Go( &GLOBAL_EDIT_TOOL::CleanupGraphics, PCB_ACTIONS::cleanupGraphics.MakeEvent() ); + Go( &GLOBAL_EDIT_TOOL::RemoveUnusedPads, PCB_ACTIONS::removeUnusedPads.MakeEvent() ); } diff --git a/pcbnew/tools/global_edit_tool.h b/pcbnew/tools/global_edit_tool.h index f151aebc87..96236d82a4 100644 --- a/pcbnew/tools/global_edit_tool.h +++ b/pcbnew/tools/global_edit_tool.h @@ -61,6 +61,7 @@ public: int GlobalDeletions( const TOOL_EVENT& aEvent ); int CleanupTracksAndVias( const TOOL_EVENT& aEvent ); int CleanupGraphics( const TOOL_EVENT& aEvent ); + int RemoveUnusedPads( const TOOL_EVENT& aEvent ); private: bool swapBoardItem( BOARD_ITEM* aItem, PCB_LAYER_ID* new_layer ); diff --git a/pcbnew/tools/pcb_actions.cpp b/pcbnew/tools/pcb_actions.cpp index 4517300a24..2a5bea4181 100644 --- a/pcbnew/tools/pcb_actions.cpp +++ b/pcbnew/tools/pcb_actions.cpp @@ -353,6 +353,12 @@ TOOL_ACTION PCB_ACTIONS::updateFootprints( "pcbnew.GlobalEdit.updateFootprints", _( "Update footprints to include any changes from the library" ), reload_xpm ); +TOOL_ACTION PCB_ACTIONS::removeUnusedPads( "pcbnew.GlobalEdit.removeUnusedPads", + AS_GLOBAL, 0, "", + _( "Remove Unused Pads..." ), + _( "Remove or reset the unconnected inner layers on through hole pads and vias" ), + pads_remove_xpm ); + TOOL_ACTION PCB_ACTIONS::changeFootprint( "pcbnew.GlobalEdit.changeFootprint", AS_GLOBAL, 0, "", _( "Change Footprint..." ), _( "Assign a different footprint from the library" ), diff --git a/pcbnew/tools/pcb_actions.h b/pcbnew/tools/pcb_actions.h index 2e4b97ca46..402c997db8 100644 --- a/pcbnew/tools/pcb_actions.h +++ b/pcbnew/tools/pcb_actions.h @@ -303,6 +303,7 @@ public: static TOOL_ACTION changeFootprint; static TOOL_ACTION changeFootprints; static TOOL_ACTION swapLayers; + static TOOL_ACTION removeUnusedPads; static TOOL_ACTION importNetlist; diff --git a/pcbnew/zone_filler.cpp b/pcbnew/zone_filler.cpp index 195a8c9d87..99eab40082 100644 --- a/pcbnew/zone_filler.cpp +++ b/pcbnew/zone_filler.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -635,7 +636,7 @@ void ZONE_FILLER::buildCopperItemClearances( const ZONE_CONTAINER* aZone, PCB_LA { for( D_PAD* pad : module->Pads() ) { - if( !pad->IsOnLayer( aLayer ) ) + if( !pad->IsPadOnLayer( aLayer ) ) { if( pad->GetDrillSize().x == 0 && pad->GetDrillSize().y == 0 ) continue; @@ -678,7 +679,24 @@ void ZONE_FILLER::buildCopperItemClearances( const ZONE_CONTAINER* aZone, PCB_LA { int gap = aZone->GetClearance( aLayer, track ) + extra_margin; - track->TransformShapeWithClearanceToPolygon( aHoles, gap, m_low_def ); + if( track->Type() == PCB_VIA_T ) + { + VIA* via = static_cast( track ); + + if( !via->IsPadOnLayer( aLayer ) ) + { + TransformCircleToPolygon( aHoles, via->GetPosition(), + ( via->GetDrillValue() + 1 ) / 2 + gap, m_low_def ); + } + else + { + via->TransformShapeWithClearanceToPolygon( aHoles, gap, m_low_def ); + } + } + else + { + track->TransformShapeWithClearanceToPolygon( aHoles, gap, m_low_def ); + } } }