diff --git a/.gitignore b/.gitignore index ca89f5f..7e7b95b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ out/ branches/ books/ samples/ +filtered/ c-chess-cli.*.log diff --git a/Makefile b/Makefile index 39d8896..36d6319 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,7 @@ test: seawall ./test.sh tune: seawall.tune - cat samples/*.csv | ./seawall.tune + ./seawall.tune < filtered/20240903-174427.csv seawall.tune: CPPFLAGS += -DTUNE=1 seawall.tune: RTTIFLAGS = diff --git a/filter.sh b/filter.sh new file mode 100755 index 0000000..07b3186 --- /dev/null +++ b/filter.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -e + +mkdir -p filtered +sort -u -k 1,4 samples/2024*.csv | shuf > "filtered/$(date '+%Y%m%d-%H%M%S').csv" diff --git a/sample.sh b/sample.sh index 06bfd74..11470cd 100755 --- a/sample.sh +++ b/sample.sh @@ -2,7 +2,8 @@ set -e -branch=$(git branch --show-current) +#branch=$(git branch --show-current) +branch=main c-chess-cli \ -engine cmd="./branches/seawall-${branch}" \ @@ -10,5 +11,5 @@ c-chess-cli \ -each option.Hash=4 tc=1+0.01 \ -openings file=./books/training.fen order=random \ -games 1500 -concurrency 6 \ - -draw number=60 count=10 score=2 \ - -sample freq=0.21 decay=0.016 resolve=y file="samples/$(date '+%Y%m%d-%H%M%S').csv" format=csv + -draw number=20 count=5 score=10 \ + -sample freq=1 decay=0 resolve=y file="samples/$(date '+%Y%m%d-%H%M%S').csv" format=csv diff --git a/seawall.cc b/seawall.cc index 2598b03..803f5df 100644 --- a/seawall.cc +++ b/seawall.cc @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -384,6 +385,9 @@ inline Feature operator*(Weight& lhs, int rhs) struct Score { std::vector features; + + Score() = default; + Score(Weight& w) : features{{&w, 1}} {} }; Score operator-(const Score& s) @@ -473,64 +477,64 @@ constexpr Weight piece_square_table[6][64] = { { - {-4, -3}, {-5, 1}, {2, 1}, {-1, -8}, {-2, 0}, {1, 0}, {0, -1}, {-3, 4}, - {-39, 12}, {-27, 24}, {-33, 28}, {-33, 21}, {-29, 22}, {-2, 15}, {4, 8}, {-35, 1}, - {-38, -3}, {-26, 2}, {-34, -2}, {-25, -8}, {-11, -17}, {-19, -2}, {8, -16}, {-33, -11}, - {-33, 2}, {-23, 9}, {3, -24}, {12, -46}, {24, -42}, {14, -23}, {7, -4}, {-26, -8}, - {-26, 63}, {-4, 49}, {-8, 28}, {18, 3}, {30, 0}, {15, 18}, {6, 43}, {-7, 48}, - {25, 129}, {28, 133}, {47, 95}, {47, 72}, {36, 81}, {66, 91}, {41, 132}, {22, 128}, - {211, 215}, {135, 248}, {103, 255}, {93, 243}, {61, 252}, {48, 267}, {51, 277}, {132, 253}, - {-1, -8}, {-3, -5}, {1, -5}, {2, 4}, {-3, -5}, {-1, -1}, {-3, 1}, {-3, -2}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {-4, 3}, {0, 3}, {-12, 7}, {-9, 0}, {-5, 0}, {8, 2}, {12, -2}, {-4, -2}, + {-8, -2}, {-7, -1}, {-9, 0}, {-5, -1}, {0, -2}, {-1, -1}, {8, -4}, {-1, -12}, + {-5, 3}, {-6, 2}, {0, -11}, {2, -34}, {8, -29}, {3, -8}, {6, -1}, {-1, -3}, + {-12, 34}, {0, 20}, {-1, 0}, {4, -2}, {8, -2}, {5, -1}, {0, 22}, {0, 24}, + {39, 73}, {49, 72}, {57, 57}, {61, 33}, {47, 43}, {80, 53}, {50, 75}, {26, 79}, + {128, 124}, {97, 141}, {73, 144}, {98, 136}, {92, 136}, {70, 138}, {76, 147}, {96, 145}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, }, { - {-57, -91}, {-29, -86}, {-25, -51}, {-16, -48}, {-9, -48}, {-12, -60}, {-26, -78}, {-58, -86}, - {-39, -79}, {-26, -36}, {-13, -18}, {2, -10}, {2, -10}, {9, -28}, {-12, -33}, {-27, -64}, - {-31, -55}, {-7, -14}, {11, 15}, {23, 23}, {30, 24}, {16, 10}, {6, -13}, {-21, -44}, - {-7, -26}, {16, 1}, {41, 30}, {44, 38}, {44, 37}, {52, 29}, {33, 1}, {4, -22}, - {4, -21}, {22, 7}, {57, 30}, {73, 31}, {56, 43}, {55, 34}, {32, 15}, {18, -23}, - {-30, -5}, {39, -13}, {64, 19}, {85, 19}, {78, 17}, {116, -2}, {45, -8}, {-12, -11}, - {-41, -29}, {-22, -7}, {39, -9}, {55, -1}, {47, -2}, {52, -20}, {-20, -13}, {-12, -39}, - {-180, -30}, {-102, 6}, {-87, 21}, {-36, 5}, {-21, -5}, {-167, 44}, {-106, 10}, {-108, -70}, + {-27, -52}, {-18, -54}, {-24, -29}, {-16, -22}, {-8, -26}, {-15, -39}, {-16, -29}, {-42, -51}, + {-18, -44}, {-14, -19}, {-15, -4}, {1, 2}, {0, 4}, {2, -2}, {-15, -9}, {-14, -30}, + {-21, -29}, {-5, 1}, {3, 20}, {11, 20}, {16, 23}, {5, 16}, {1, 1}, {-10, -22}, + {-6, -5}, {9, 18}, {23, 31}, {26, 46}, {26, 44}, {30, 34}, {25, 13}, {-2, -2}, + {0, 2}, {7, 21}, {38, 29}, {63, 27}, {42, 43}, {36, 32}, {14, 24}, {17, -4}, + {-13, 2}, {31, 1}, {52, 15}, {64, 14}, {63, 9}, {106, -3}, {37, 2}, {-1, -2}, + {-37, -9}, {-11, 3}, {17, 8}, {48, 10}, {34, 11}, {43, -13}, {-13, 1}, {-3, -18}, + {-109, -30}, {-25, 0}, {-17, 6}, {4, -1}, {4, 1}, {-34, 3}, {-29, -5}, {-67, -56}, }, { - {8, -73}, {7, -56}, {-2, -43}, {-26, -28}, {-20, -35}, {-20, -36}, {-12, -57}, {-7, -66}, - {15, -52}, {18, -42}, {10, -32}, {-5, -16}, {6, -27}, {23, -40}, {17, -34}, {-1, -68}, - {3, -45}, {17, -15}, {11, 8}, {9, 9}, {10, 12}, {13, -1}, {18, -22}, {-6, -39}, - {-10, -34}, {2, -7}, {7, 18}, {23, 23}, {16, 19}, {10, 6}, {-3, -10}, {6, -43}, - {-16, -24}, {0, 2}, {4, 12}, {40, 14}, {27, 19}, {14, 12}, {14, -5}, {-10, -23}, - {-30, -10}, {-3, 5}, {-7, 16}, {21, 0}, {19, 4}, {32, 13}, {19, 4}, {-12, -10}, - {-71, 9}, {-53, 17}, {-23, 4}, {-56, 23}, {-64, 27}, {-33, 13}, {-54, 19}, {-57, -8}, - {-60, 10}, {-76, 21}, {-139, 46}, {-111, 33}, {-114, 35}, {-180, 55}, {-70, 17}, {-45, 4}, + {6, -46}, {7, -31}, {-1, -24}, {-20, -12}, {-15, -16}, {-20, -12}, {-16, -23}, {-6, -41}, + {14, -29}, {17, -18}, {11, -11}, {-1, 1}, {6, -7}, {19, -16}, {12, -3}, {-2, -36}, + {2, -17}, {18, 6}, {15, 24}, {10, 27}, {11, 30}, {14, 19}, {18, -2}, {-5, -18}, + {-6, -12}, {5, 10}, {9, 34}, {30, 35}, {22, 34}, {9, 25}, {0, 12}, {6, -19}, + {-11, -9}, {1, 19}, {14, 22}, {46, 28}, {31, 34}, {20, 25}, {14, 15}, {-7, -4}, + {-24, 4}, {4, 18}, {2, 28}, {32, 11}, {38, 12}, {49, 18}, {30, 14}, {-3, -2}, + {-65, 21}, {-49, 35}, {-10, 16}, {-29, 27}, {-41, 33}, {-10, 20}, {-28, 24}, {-53, 3}, + {-57, 28}, {-54, 31}, {-74, 30}, {-54, 31}, {-37, 21}, {-75, 32}, {-18, 14}, {-43, 20}, }, { - {-15, -29}, {-19, -28}, {-11, -29}, {-8, -28}, {-3, -35}, {-3, -29}, {-23, -31}, {-25, -42}, - {-37, -36}, {-43, -27}, {-21, -27}, {-20, -27}, {-14, -32}, {2, -46}, {-15, -52}, {-87, -32}, - {-49, -8}, {-43, -7}, {-47, -1}, {-47, -2}, {-35, -11}, {-38, -9}, {-20, -26}, {-39, -28}, - {-48, 11}, {-56, 22}, {-46, 20}, {-46, 18}, {-44, 13}, {-38, 12}, {-45, 13}, {-43, -3}, - {-35, 23}, {-31, 24}, {-19, 23}, {-13, 17}, {-24, 19}, {-11, 16}, {-30, 19}, {-31, 12}, - {-12, 23}, {10, 12}, {15, 13}, {20, 12}, {26, 6}, {36, 7}, {28, 6}, {-14, 18}, - {19, 14}, {16, 18}, {58, 6}, {82, -3}, {48, 10}, {63, -2}, {17, 16}, {24, 7}, - {70, -11}, {61, -2}, {58, -1}, {52, 0}, {32, 8}, {20, 14}, {37, 8}, {45, 4}, + {-4, -2}, {-7, -3}, {0, 0}, {1, -1}, {7, -9}, {4, -1}, {-14, -1}, {-9, -23}, + {-26, -4}, {-24, -1}, {-7, 0}, {-6, -1}, {-4, -3}, {6, -9}, {-9, -17}, {-76, 0}, + {-37, 20}, {-28, 16}, {-25, 20}, {-27, 19}, {-20, 15}, {-23, 17}, {-15, 6}, {-26, -1}, + {-32, 39}, {-40, 47}, {-26, 43}, {-26, 41}, {-22, 30}, {-28, 42}, {-31, 38}, {-23, 19}, + {-17, 49}, {-11, 46}, {-1, 45}, {9, 37}, {-1, 40}, {3, 43}, {-18, 47}, {-17, 37}, + {6, 46}, {29, 36}, {37, 33}, {35, 35}, {49, 25}, {61, 28}, {53, 24}, {10, 36}, + {37, 38}, {34, 41}, {74, 28}, {91, 23}, {66, 30}, {83, 20}, {45, 34}, {37, 32}, + {91, 7}, {72, 20}, {77, 18}, {79, 17}, {55, 27}, {53, 28}, {55, 29}, {66, 23}, }, { - {-18, -104}, {-8, -125}, {-6, -126}, {-2, -111}, {-10, -132}, {-14, -177}, {-12, -165}, {-8, -144}, - {-14, -110}, {-8, -91}, {4, -95}, {-2, -83}, {4, -97}, {17, -119}, {21, -154}, {-24, -111}, - {-17, -76}, {-8, -70}, {-22, -34}, {-23, -43}, {-21, -31}, {-12, -40}, {5, -59}, {-13, -74}, - {-18, -73}, {-36, -28}, {-34, -12}, {-42, 21}, {-34, 7}, {-26, 3}, {-10, -23}, {-25, -16}, - {-32, -43}, {-39, -13}, {-44, 17}, {-40, 35}, {-38, 49}, {-32, 41}, {-20, 27}, {-7, -8}, - {-37, -40}, {-29, -20}, {-39, 13}, {-22, 31}, {-12, 50}, {13, 53}, {3, 35}, {-13, 31}, - {-60, -12}, {-65, 6}, {-28, 24}, {-32, 35}, {-43, 57}, {8, 27}, {-26, 35}, {-16, 15}, - {-28, -17}, {27, -28}, {27, -14}, {19, 8}, {15, 23}, {71, -16}, {71, -27}, {40, -14}, + {-10, -53}, {-2, -70}, {4, -85}, {4, -63}, {-5, -77}, {-20, -106}, {-26, -91}, {-15, -67}, + {-6, -59}, {1, -41}, {9, -43}, {2, -31}, {8, -42}, {17, -56}, {15, -79}, {-16, -55}, + {-7, -40}, {-2, -20}, {-12, 11}, {-12, 2}, {-10, 13}, {-1, 1}, {8, -7}, {-8, -21}, + {-8, -23}, {-20, 11}, {-21, 26}, {-29, 64}, {-19, 45}, {-12, 41}, {0, 22}, {-10, 23}, + {-21, 0}, {-28, 29}, {-18, 43}, {-20, 67}, {-18, 82}, {-9, 71}, {-10, 65}, {3, 35}, + {-30, 9}, {-14, 20}, {-14, 45}, {3, 60}, {8, 77}, {50, 74}, {20, 68}, {-1, 64}, + {-50, 31}, {-50, 47}, {-2, 54}, {1, 65}, {6, 70}, {36, 53}, {14, 48}, {7, 37}, + {-5, 16}, {42, 13}, {44, 31}, {41, 43}, {55, 41}, {66, 36}, {67, 19}, {47, 44}, }, { - {-6, -41}, {45, -46}, {16, -37}, {-66, -9}, {-31, -34}, {-20, -20}, {43, -43}, {59, -72}, - {68, -51}, {12, -7}, {-19, 15}, {-64, 23}, {-63, 25}, {-18, 15}, {7, -2}, {52, -38}, - {-53, -2}, {-12, 5}, {-27, 20}, {-31, 22}, {-34, 25}, {-42, 26}, {-35, 14}, {-87, 15}, - {-30, 7}, {36, 6}, {11, 25}, {8, 28}, {-16, 33}, {-21, 29}, {-14, 16}, {-92, 19}, - {32, -12}, {93, -7}, {155, -1}, {139, 11}, {126, 12}, {78, 19}, {39, 7}, {-46, 5}, - {50, 13}, {190, -8}, {261, -6}, {261, -8}, {256, -2}, {235, 0}, {124, 15}, {54, 10}, - {51, -25}, {204, -35}, {257, -24}, {255, -13}, {236, -12}, {185, -5}, {110, -6}, {30, -19}, - {129, -59}, {248, -52}, {214, -25}, {185, -5}, {144, 7}, {199, -17}, {89, -16}, {-83, -8}, + {-32, 9}, {0, -6}, {26, -24}, {-34, -11}, {-3, -32}, {-2, -13}, {-2, -4}, {11, -7}, + {12, -4}, {-7, 15}, {-3, 0}, {-5, -4}, {-5, -3}, {-1, -2}, {-6, 14}, {4, 1}, + {2, 0}, {22, 2}, {-1, -2}, {-8, -1}, {-1, -2}, {-9, -1}, {5, 9}, {1, 0}, + {1, -7}, {14, -4}, {1, -5}, {1, -6}, {-9, -6}, {-17, -5}, {-4, -3}, {-26, -6}, + {10, -1}, {17, 8}, {11, -1}, {5, 1}, {-12, 5}, {-24, 3}, {-33, 24}, {-25, 0}, + {12, -8}, {11, -1}, {25, -11}, {15, -9}, {15, -5}, {13, -8}, {-14, 7}, {3, -5}, + {10, -6}, {19, 9}, {15, -5}, {7, 0}, {-11, 4}, {-2, 0}, {-12, 17}, {-18, -1}, + {18, -17}, {32, 0}, {10, -4}, {-13, -1}, {20, -14}, {9, -7}, {-2, 9}, {-16, -25}, }, }; @@ -1326,20 +1330,20 @@ constexpr Weight pawn_evals[4][15] = { { - {-14, -2}, {5, 12}, {69, -37}, {58, -52}, {-49, 110}, {7, 14}, {39, 19}, {47, 29}, - {-91, 53}, {11, 18}, {26, 35}, {90, -61}, {146, -92}, {-10, 43}, {-1, 2}, + {-17, 1}, {20, 2}, {-1, -6}, {2, -39}, {32, 76}, {19, 11}, {38, 16}, {37, 25}, + {-34, 32}, {8, 19}, {24, 36}, {12, -47}, {42, -63}, {6, 38}, {5, 2}, }, { - {3, -3}, {12, -3}, {13, -24}, {1, -34}, {-1, 83}, {6, -7}, {28, 10}, {19, 30}, - {-37, 58}, {8, 10}, {9, 43}, {1, -31}, {16, -39}, {6, 35}, {10, -11}, + {0, -1}, {6, -1}, {4, -22}, {1, -35}, {15, 73}, {0, -1}, {32, 4}, {29, 21}, + {-26, 48}, {9, 8}, {11, 42}, {-9, -30}, {8, -34}, {9, 35}, {0, -5}, }, { - {0, 4}, {12, -6}, {-3, -15}, {-8, -25}, {30, 63}, {-9, -14}, {26, 18}, {23, 31}, - {-7, 54}, {14, 10}, {24, 28}, {-11, -17}, {-16, -14}, {13, 31}, {-7, -7}, + {-1, 2}, {5, 1}, {-5, -17}, {-14, -21}, {28, 66}, {-13, -7}, {22, 19}, {26, 25}, + {0, 48}, {11, 12}, {22, 31}, {-12, -17}, {-17, -13}, {13, 30}, {-8, -4}, }, { - {-2, 11}, {6, 5}, {-12, -14}, {-20, -1}, {27, 77}, {-5, -32}, {16, 45}, {29, 38}, - {7, 46}, {11, 23}, {19, 39}, {-24, 19}, {-16, -3}, {8, 34}, {-8, -7}, + {-5, 4}, {0, 17}, {-17, -18}, {-24, 6}, {24, 84}, {-8, -27}, {10, 53}, {25, 47}, + {13, 49}, {7, 29}, {17, 43}, {-17, -1}, {-19, -1}, {6, 37}, {-8, -9}, }, }; @@ -2013,15 +2017,15 @@ constexpr #endif Weight mobility_evals[66] = { - {-14, -77}, {-10, -5}, {-8, 9}, {-4, 11}, {-2, 7}, {-1, 7}, {-1, 2}, {-1, -5}, - {1, -13}, {-9, -90}, {-9, -37}, {-2, -30}, {-4, -7}, {-2, 1}, {1, 9}, {2, 11}, - {0, 12}, {-3, 14}, {-3, 7}, {-1, -1}, {3, -7}, {-1, -2}, {9, -17}, {-14, -155}, - {-9, -92}, {-6, -60}, {-6, -25}, {-8, -2}, {-6, 6}, {-4, 9}, {1, 9}, {-1, 19}, - {0, 23}, {2, 24}, {4, 23}, {9, 17}, {19, 12}, {28, 2}, {4, -188}, {9, -149}, - {6, -118}, {4, -97}, {2, -74}, {0, -55}, {-1, -42}, {-3, -27}, {-2, -23}, {-3, -12}, - {-4, -2}, {-4, 3}, {-6, 11}, {-7, 17}, {-7, 18}, {-8, 23}, {-9, 22}, {-9, 21}, - {-9, 21}, {-8, 18}, {-11, 17}, {-6, 13}, {-6, 8}, {-4, 5}, {7, -8}, {-3, -4}, - {-29, -2}, {-24, 0}, + {-14, -83}, {-7, -25}, {-5, -3}, {-1, -2}, {0, 1}, {0, 5}, {-1, 3}, {0, 0}, + {1, -5}, {-6, -103}, {-6, -46}, {-1, -35}, {0, -17}, {-1, -4}, {1, 6}, {3, 5}, + {1, 7}, {-1, 9}, {0, 3}, {3, -5}, {4, -8}, {-2, -4}, {9, -19}, {-10, -168}, + {-4, -103}, {-1, -72}, {-1, -32}, {-1, -12}, {0, -2}, {1, 2}, {5, 2}, {3, 12}, + {4, 15}, {6, 16}, {10, 13}, {13, 9}, {22, 4}, {27, -3}, {-8, -76}, {-1, -84}, + {0, -71}, {0, -67}, {0, -46}, {-1, -35}, {0, -32}, {0, -20}, {-1, -12}, {0, -4}, + {0, 0}, {-1, 9}, {-1, 13}, {1, 13}, {0, 18}, {-3, 24}, {1, 21}, {1, 21}, + {-3, 24}, {-2, 20}, {-7, 24}, {0, 18}, {2, 14}, {18, 6}, {-2, 9}, {16, 2}, + {10, -9}, {6, 6}, }; struct Mobility @@ -2089,70 +2093,70 @@ constexpr #endif Weight king_evals[64][4] = { - {{-71, 17}, {-24, 13}, {14, -3}, {41, -18}}, - {{-67, -109}, {-13, 66}, {-270, 246}, {-136, 338}}, - {{-24, -8}, {-10, -10}, {6, -15}, {18, -15}}, - {{14, -27}, {-28, 5}, {-66, 41}, {-181, 76}}, - {{-1, 3}, {-5, 12}, {3, 4}, {8, -13}}, - {{13, -36}, {2, -20}, {-78, 20}, {-78, 0}}, - {{0, -2}, {2, -2}, {5, -3}, {8, -9}}, - {{18, -14}, {-11, 2}, {-103, 32}, {-290, 84}}, - {{-39, -6}, {-19, -4}, {5, -11}, {33, -13}}, - {{-66, -111}, {-86, 46}, {-320, 177}, {-191, 219}}, - {{-14, -5}, {-10, -2}, {4, -1}, {15, 4}}, - {{15, -23}, {-18, 8}, {-61, 39}, {-113, 72}}, - {{1, 4}, {0, 0}, {-2, -10}, {-2, -30}}, - {{14, -37}, {12, -19}, {-95, 67}, {-88, 34}}, - {{1, -6}, {0, -11}, {0, -17}, {-2, -24}}, - {{21, -10}, {-2, 8}, {-77, 41}, {-214, 92}}, - {{23, -46}, {-18, 1}, {-2, 9}, {8, 20}}, - {{-56, -105}, {-65, -43}, {-220, 68}, {-281, 174}}, - {{-11, -19}, {-10, -5}, {1, 0}, {-3, 11}}, - {{23, -25}, {-26, -6}, {-70, 9}, {-62, -24}}, - {{9, 0}, {-16, 12}, {-26, 14}, {-9, -48}}, - {{13, -31}, {-17, -1}, {-63, 62}, {-117, -32}}, - {{-6, -8}, {-10, -5}, {-15, -3}, {-19, 2}}, - {{25, -16}, {-26, 12}, {-110, 44}, {-256, 99}}, - {{-2, -43}, {-30, -7}, {-10, 5}, {26, 3}}, - {{-50, -112}, {-80, -32}, {-163, 57}, {-177, 115}}, - {{9, -26}, {-10, -4}, {-1, 6}, {11, 10}}, - {{14, -13}, {-19, 4}, {-53, 18}, {-76, 24}}, - {{7, 4}, {-10, 10}, {-33, 15}, {-57, 13}}, - {{17, -37}, {-18, 0}, {-102, 87}, {-75, 19}}, - {{12, -8}, {-5, -1}, {-16, 1}, {-29, -1}}, - {{22, -16}, {-10, 7}, {-59, 37}, {-187, 100}}, - {{8, -63}, {-53, 22}, {-63, 59}, {-104, 130}}, - {{-41, -89}, {-63, -29}, {-97, 24}, {-112, 68}}, - {{19, -57}, {-68, 11}, {-104, 55}, {-10, 30}}, - {{16, -21}, {-14, 5}, {-94, 37}, {-87, 4}}, - {{-13, 8}, {-2, 13}, {-27, 16}, {12, -1}}, - {{18, -38}, {-43, -13}, {-172, 103}, {-15, 45}}, - {{-30, 9}, {42, -18}, {25, -13}, {0, -13}}, - {{38, -10}, {-25, 6}, {-77, 19}, {-264, 98}}, - {{-25, -55}, {-82, 13}, {-83, 47}, {-48, 73}}, - {{-54, -86}, {-77, -38}, {-64, -10}, {-123, 47}}, - {{43, -56}, {-44, 4}, {-84, 49}, {-63, 64}}, - {{-1, -13}, {-7, 1}, {-31, 19}, {-96, 54}}, - {{-27, 10}, {22, -7}, {60, -26}, {13, -3}}, - {{11, -32}, {-63, 9}, {-209, 132}, {-75, 7}}, - {{-49, 8}, {12, -17}, {41, -31}, {4, -18}}, - {{20, -16}, {-45, 14}, {-50, 19}, {-208, 98}}, - {{-12, -66}, {-4, 56}, {-45, 259}, {200, 304}}, - {{-46, -82}, {-92, -30}, {-184, 37}, {-284, 131}}, - {{48, -54}, {-108, 93}, {-70, 133}, {76, 139}}, - {{42, -24}, {-51, 45}, {-93, 83}, {-37, 75}}, - {{-16, -15}, {-17, -7}, {-30, -25}, {72, 12}}, - {{36, -39}, {-117, 51}, {-155, 63}, {-22, 52}}, - {{-24, 10}, {-21, 12}, {5, -13}, {12, -21}}, - {{82, -5}, {-75, 28}, {-161, 40}, {-287, 79}}, - {{-49, -62}, {-36, 34}, {12, 277}, {150, 261}}, - {{-43, -69}, {-73, -31}, {-93, -1}, {-266, 68}}, - {{44, -64}, {-119, 65}, {-120, 100}, {12, 76}}, - {{15, -2}, {5, 23}, {-74, 78}, {-8, 65}}, - {{-21, -2}, {0, -8}, {-23, -13}, {59, -34}}, - {{17, -54}, {-29, -10}, {-184, 85}, {-35, 42}}, - {{-26, 5}, {22, -18}, {-3, -20}, {50, -3}}, - {{63, -18}, {-12, 3}, {-36, 6}, {-241, 80}}, + {{-59, 7}, {-19, 4}, {8, -2}, {27, -8}}, + {{4, -39}, {76, 85}, {74, 119}, {69, 54}}, + {{0, 9}, {0, -1}, {1, -11}, {0, -17}}, + {{16, -13}, {-14, 3}, {-49, 37}, {-26, 12}}, + {{0, -5}, {0, -4}, {5, -9}, {11, -20}}, + {{0, 0}, {-10, 16}, {-9, 12}, {-77, -116}}, + {{-2, -4}, {0, -5}, {2, -3}, {2, -2}}, + {{1, -11}, {-25, 3}, {-115, 31}, {-75, -49}}, + {{-19, -5}, {-1, -1}, {20, 0}, {44, 2}}, + {{0, 0}, {21, 120}, {42, 96}, {71, 9}}, + {{-8, -6}, {-9, 0}, {1, -4}, {9, -3}}, + {{-1, -12}, {-30, 13}, {-54, 28}, {-32, 16}}, + {{0, 4}, {-1, 0}, {0, -10}, {2, -32}}, + {{8, 0}, {8, 21}, {13, 45}, {22, 25}}, + {{-1, 0}, {-1, -3}, {-2, -6}, {-4, -8}}, + {{-1, -19}, {-16, -5}, {-78, 18}, {-84, -24}}, + {{3, -33}, {-19, 0}, {-1, 0}, {17, -2}}, + {{-5, -22}, {4, 30}, {-26, 92}, {70, 90}}, + {{-14, -8}, {-1, -1}, {0, 9}, {26, 5}}, + {{25, -8}, {-12, 0}, {-54, 11}, {-23, -22}}, + {{1, -1}, {-6, 1}, {-21, 12}, {-17, 7}}, + {{-17, -2}, {-43, 24}, {5, 23}, {15, -16}}, + {{-4, -3}, {-3, -3}, {-6, 1}, {-3, -12}}, + {{18, -4}, {-17, 14}, {-73, 32}, {-42, 3}}, + {{-15, -5}, {-19, 11}, {-1, 16}, {37, 9}}, + {{-2, -17}, {0, 44}, {1, 92}, {67, 95}}, + {{-4, -15}, {-8, 0}, {-2, 10}, {17, 8}}, + {{10, -7}, {-2, 1}, {-30, 12}, {-40, 12}}, + {{0, 0}, {-4, -2}, {-15, -1}, {-25, -8}}, + {{5, 0}, {-21, 32}, {-6, 64}, {-7, 14}}, + {{3, -1}, {-2, 0}, {-9, -2}, {-23, -4}}, + {{12, -14}, {-7, 0}, {-33, 16}, {-50, 22}}, + {{-35, -58}, {-27, 16}, {23, 47}, {64, 97}}, + {{-19, -16}, {-1, 8}, {-6, 35}, {26, 37}}, + {{-17, -21}, {-11, 23}, {4, 57}, {34, 63}}, + {{4, 0}, {-1, 2}, {-20, 4}, {-24, -23}}, + {{-6, 1}, {2, 9}, {28, 8}, {1, 12}}, + {{-2, 0}, {-14, 9}, {-10, 41}, {62, 62}}, + {{-23, 13}, {5, 3}, {17, 1}, {15, 19}}, + {{17, 0}, {-20, 2}, {-25, -1}, {-35, 4}}, + {{-4, -46}, {-5, 22}, {23, 67}, {80, 100}}, + {{-6, 0}, {12, 19}, {11, 44}, {25, 42}}, + {{12, -22}, {-14, 19}, {-19, 51}, {8, 61}}, + {{12, -5}, {13, 0}, {-17, 15}, {-33, 21}}, + {{-15, 11}, {23, -3}, {27, -9}, {34, -1}}, + {{-10, -2}, {-26, 19}, {-2, 52}, {-7, 94}}, + {{-9, 9}, {40, -12}, {20, -4}, {-4, 10}}, + {{13, -10}, {-4, -1}, {0, 1}, {-13, 5}}, + {{-44, -78}, {7, 32}, {82, 123}, {190, 95}}, + {{0, 0}, {10, 12}, {15, 29}, {51, 45}}, + {{-13, -38}, {-1, 64}, {50, 88}, {34, 24}}, + {{5, -1}, {-5, 27}, {7, 39}, {41, 10}}, + {{-19, -3}, {-7, 4}, {-5, 0}, {-39, -7}}, + {{0, -1}, {1, 51}, {27, 29}, {0, 2}}, + {{-2, 1}, {28, -4}, {10, 4}, {75, 40}}, + {{26, 0}, {-3, 0}, {-15, -5}, {-18, -20}}, + {{-41, -82}, {20, 28}, {85, 113}, {161, 154}}, + {{25, -1}, {12, 16}, {12, 33}, {26, 51}}, + {{5, -38}, {-23, 56}, {49, 68}, {33, 62}}, + {{11, 1}, {0, 18}, {18, 25}, {18, 21}}, + {{27, 6}, {28, 10}, {16, 0}, {45, 38}}, + {{21, -2}, {13, 22}, {-2, 28}, {-118, -127}}, + {{13, 7}, {17, 0}, {25, -9}, {-8, -10}}, + {{33, -6}, {-2, -1}, {-8, -1}, {-1, 0}}, }; #ifndef TUNE @@ -2161,54 +2165,54 @@ constexpr Weight piece_evals[10][24] = { { - {53, 80}, {39, 70}, {23, -6}, {10, 25}, {-12, -3}, {33, 28}, {-4, -8}, {5, 13}, - {-6, -43}, {-6, -41}, {44, 52}, {8, 59}, {10, 17}, {5, 72}, {-68, -10}, {-52, 8}, - {-56, 12}, {-7, 45}, {-10, 55}, {16, 108}, {-53, -1}, {1, 29}, {-11, 71}, {20, 97}, + {70, 55}, {44, 73}, {0, 8}, {39, 5}, {2, -14}, {51, 7}, {-3, -8}, {17, -3}, + {-18, -33}, {-25, -21}, {74, 29}, {33, 42}, {0, 20}, {32, 60}, {-80, 2}, {-64, 11}, + {-61, 5}, {72, -12}, {35, 19}, {70, 76}, {-55, -11}, {33, 2}, {27, 35}, {64, 83}, }, { - {55, 53}, {38, 50}, {19, -9}, {12, 17}, {-13, -2}, {35, 22}, {-3, -5}, {-1, 13}, - {-9, -35}, {-12, -29}, {42, 31}, {10, 60}, {-3, 22}, {19, 60}, {-38, -19}, {-65, 16}, - {10, 2}, {-2, -22}, {39, 55}, {27, 6}, {12, -4}, {-29, -24}, {28, 84}, {17, 8}, + {49, 61}, {34, 57}, {17, -2}, {19, -1}, {-11, 0}, {55, 9}, {-7, 0}, {15, 3}, + {-25, -16}, {-34, -12}, {28, 36}, {54, 29}, {4, 18}, {34, 65}, {-75, 2}, {-46, 10}, + {2, -4}, {-6, -32}, {43, 38}, {18, 13}, {-15, -4}, {-53, -22}, {53, 48}, {16, 4}, }, { - {55, 79}, {37, 67}, {23, -4}, {13, 25}, {-12, -2}, {35, 34}, {-6, -8}, {2, 25}, - {-9, -48}, {-9, -43}, {47, 50}, {4, 54}, {9, 17}, {6, 69}, {-58, -24}, {-50, 3}, - {-55, 10}, {-6, 48}, {-9, 55}, {17, 110}, {-53, 1}, {1, 28}, {-10, 69}, {22, 96}, + {53, 83}, {47, 65}, {15, 10}, {13, 26}, {-8, -6}, {31, 49}, {-2, -12}, {3, 26}, + {-9, -46}, {-8, -45}, {43, 73}, {8, 43}, {-1, 31}, {37, 32}, {-40, -39}, {-33, -27}, + {-14, -39}, {7, 32}, {19, 33}, {37, 88}, {-25, -34}, {8, 8}, {17, 41}, {27, 96}, }, { - {56, 49}, {38, 47}, {22, -8}, {14, 17}, {-12, -3}, {34, 24}, {-4, -6}, {2, 23}, - {-10, -38}, {-14, -34}, {41, 36}, {8, 54}, {0, 20}, {15, 58}, {-15, -56}, {-59, 21}, - {7, 4}, {-4, -21}, {40, 54}, {23, 6}, {12, -3}, {-20, -30}, {29, 81}, {14, 1}, + {46, 74}, {40, 53}, {11, 9}, {19, 11}, {-8, -6}, {32, 43}, {-1, -6}, {1, 31}, + {-9, -37}, {-11, -39}, {37, 58}, {9, 47}, {-1, 21}, {36, 27}, {-5, -79}, {-45, 4}, + {-9, -5}, {-25, -40}, {28, 36}, {1, -4}, {-25, 1}, {-51, -43}, {13, 62}, {-20, 6}, }, { - {54, 59}, {11, 77}, {58, -24}, {16, 20}, {-11, 0}, {38, 20}, {-1, -6}, {29, 1}, - {-27, -27}, {-28, -21}, {59, 19}, {-13, 69}, {-3, 28}, {65, 36}, {-111, 19}, {-48, 14}, - {6, 2}, {10, -14}, {51, 49}, {28, 39}, {1, 4}, {-10, -25}, {31, 77}, {-6, 63}, + {52, 59}, {42, 59}, {31, 0}, {26, 2}, {-8, -2}, {39, 25}, {-1, -1}, {31, 1}, + {-20, -26}, {-30, -19}, {60, 20}, {5, 52}, {3, 26}, {80, 29}, {-96, 15}, {-48, 16}, + {11, -4}, {-10, -11}, {47, 45}, {26, 8}, {-3, 0}, {-44, -12}, {34, 64}, {-16, 50}, }, { - {48, 51}, {29, 69}, {53, -24}, {11, 20}, {-21, 7}, {28, 23}, {3, -7}, {28, -2}, - {-9, -31}, {-21, -18}, {60, 6}, {-15, 70}, {0, 26}, {57, 34}, {-100, 16}, {-36, 14}, - {20, 2}, {-59, -41}, {50, 55}, {-21, -43}, {19, 4}, {-128, -33}, {45, 79}, {-56, -33}, + {40, 55}, {25, 54}, {28, -1}, {22, 3}, {-10, 0}, {36, 19}, {0, 0}, {27, -1}, + {-15, -26}, {-13, -24}, {34, 27}, {19, 37}, {-6, 30}, {60, 30}, {-90, 14}, {-39, 15}, + {21, 0}, {-82, -33}, {49, 55}, {-42, -28}, {15, 2}, {-129, -32}, {42, 75}, {-70, -40}, }, { - {32, 74}, {33, 115}, {68, -19}, {18, 7}, {12, -6}, {35, 16}, {3, 4}, {69, -15}, - {10, -36}, {14, -45}, {30, 37}, {11, 51}, {-11, 45}, {30, 37}, {-128, 25}, {-4, -10}, - {3, -16}, {-32, -57}, {3, 55}, {-39, 40}, {-17, 6}, {-25, -48}, {4, 76}, {-39, 45}, + {18, 57}, {43, 72}, {30, 10}, {10, 0}, {9, -5}, {38, 16}, {10, 1}, {46, -5}, + {-8, -33}, {-14, -33}, {18, 34}, {34, 41}, {-14, 50}, {41, 32}, {-74, 10}, {-22, 0}, + {6, -10}, {-24, -46}, {57, 48}, {-53, -16}, {-15, 13}, {-31, -27}, {53, 75}, {1, 14}, }, { - {8, 70}, {22, 118}, {90, -28}, {25, -1}, {-5, 3}, {32, 21}, {-2, -2}, {46, -3}, - {12, -38}, {24, -47}, {19, 13}, {24, 56}, {-10, 47}, {45, 23}, {-107, 20}, {-7, -2}, - {9, -11}, {-155, -49}, {45, 32}, {-15, -10}, {15, -4}, {-179, -42}, {68, 51}, {-17, -18}, + {35, 51}, {47, 64}, {38, 2}, {21, -4}, {12, -4}, {18, 29}, {-5, 2}, {40, -1}, + {-9, -34}, {-25, -29}, {15, 26}, {44, 40}, {-2, 49}, {48, 22}, {-62, 6}, {-34, 8}, + {8, -7}, {-64, -66}, {44, 44}, {-32, -27}, {5, 5}, {-92, -55}, {36, 67}, {-61, 33}, }, { - {19, 134}, {3, 120}, {79, -25}, {26, -5}, {27, -8}, {16, 26}, {21, -7}, {23, 6}, - {9, -40}, {21, -48}, {16, 30}, {2, 48}, {-22, 56}, {13, 63}, {-102, 15}, {1, -27}, - {2, -44}, {-6, -58}, {-15, 33}, {42, 98}, {-23, -1}, {8, -55}, {-7, 63}, {60, 109}, + {38, 64}, {35, 51}, {33, 8}, {13, -12}, {21, -7}, {26, 19}, {14, -2}, {26, 3}, + {-1, -24}, {-23, -44}, {29, 4}, {36, 21}, {9, 66}, {12, 62}, {-52, 1}, {-28, -16}, + {24, -23}, {-18, -22}, {36, 47}, {151, 19}, {2, 17}, {-5, -8}, {51, 69}, {141, 136}, }, { - {24, 111}, {0, 118}, {69, -19}, {4, -4}, {13, 0}, {51, 32}, {7, 0}, {17, 14}, - {23, -59}, {38, -69}, {30, 32}, {4, 31}, {10, 57}, {48, 57}, {-90, 10}, {-8, -17}, - {8, -17}, {-28, -49}, {14, 38}, {19, 43}, {0, 2}, {-62, -26}, {27, 62}, {7, 12}, + {37, 38}, {28, 26}, {28, -2}, {12, -5}, {5, 5}, {39, 22}, {-7, 5}, {34, 11}, + {-22, -35}, {-17, -46}, {21, 12}, {9, 19}, {12, 60}, {27, 62}, {-59, 4}, {-23, -9}, + {25, -8}, {0, -54}, {31, 46}, {19, 84}, {-6, 25}, {-23, -10}, {55, 75}, {68, 87}, }, }; @@ -2317,260 +2321,260 @@ constexpr Weight king_relative_pawn_psqt[32][48] = { { - {27, -19}, {12, 4}, {-10, 6}, {-6, -1}, {-15, -16}, {-9, -17}, {-11, -9}, {2, -5}, - {31, -13}, {-1, -15}, {-9, -3}, {-9, 2}, {7, -11}, {1, -17}, {-17, -11}, {-5, -5}, - {28, -21}, {4, -17}, {-6, -13}, {1, -14}, {-1, -13}, {-4, -23}, {-2, -30}, {3, -15}, - {0, 3}, {-8, -7}, {4, -14}, {12, -35}, {11, -37}, {6, -32}, {-6, -28}, {-1, -22}, - {0, 25}, {-10, 13}, {15, -27}, {45, -45}, {32, -43}, {3, -44}, {29, -45}, {-8, -14}, - {-1, 46}, {15, 17}, {24, -2}, {31, -21}, {4, -28}, {-3, -38}, {-22, -13}, {-25, 0}, + {18, -12}, {14, 6}, {-7, 16}, {-13, -9}, {-22, -11}, {-8, -13}, {-11, -14}, {3, -14}, + {35, -9}, {13, -18}, {2, -6}, {-9, -19}, {-2, -19}, {-2, -27}, {-13, -24}, {-9, -16}, + {6, -18}, {11, -38}, {8, -28}, {17, -32}, {9, -22}, {5, -32}, {0, -34}, {-2, -25}, + {-3, 6}, {1, -16}, {11, -13}, {27, -38}, {20, -31}, {-1, -24}, {-1, -19}, {-3, -14}, + {14, 29}, {18, 19}, {25, -13}, {36, -20}, {15, -15}, {6, -26}, {11, -10}, {-1, 6}, + {54, 67}, {39, 34}, {34, 30}, {21, 33}, {20, 13}, {-5, 20}, {26, 16}, {14, 34}, }, { - {11, -15}, {18, 3}, {4, 4}, {-9, -1}, {2, -26}, {-13, -15}, {-10, -5}, {0, 0}, - {14, -10}, {24, -11}, {-9, 8}, {-12, 3}, {-5, 1}, {-1, -8}, {-16, -3}, {-3, 0}, - {21, -6}, {21, -10}, {0, -3}, {-4, 0}, {-9, -5}, {-7, -12}, {-1, -20}, {0, -8}, - {2, 0}, {2, -6}, {6, -12}, {-4, -18}, {3, -28}, {3, -28}, {-1, -28}, {1, -18}, - {1, 23}, {-17, 20}, {-2, -10}, {5, -28}, {8, -40}, {-3, -41}, {7, -35}, {-4, -9}, - {-15, 13}, {-23, 15}, {-1, -5}, {0, -24}, {-3, -32}, {-23, -26}, {-12, -27}, {-39, 2}, + {4, -13}, {32, 3}, {1, 16}, {-3, 12}, {-12, -7}, {-17, -9}, {-11, -2}, {-6, -2}, + {12, -1}, {44, -3}, {-1, 16}, {-1, -2}, {-11, -10}, {-8, -12}, {-17, -4}, {-10, -10}, + {6, -3}, {25, -7}, {8, -2}, {5, 1}, {0, -10}, {0, -20}, {-1, -19}, {-11, -9}, + {-2, 16}, {4, 17}, {9, -1}, {4, -9}, {11, -17}, {-2, -8}, {-1, -7}, {-1, -4}, + {4, 45}, {-18, 36}, {10, -4}, {-13, 9}, {-19, -1}, {3, -24}, {-7, -3}, {-5, 18}, + {20, 58}, {6, 43}, {25, 40}, {16, 14}, {-2, 17}, {-4, 15}, {10, 23}, {14, 36}, }, { - {1, -12}, {2, -10}, {28, -7}, {-4, 3}, {-10, -12}, {-3, -9}, {-7, -2}, {-2, -1}, - {-5, -7}, {9, -8}, {18, -6}, {1, -4}, {-6, -10}, {5, -5}, {-15, 5}, {-9, -1}, - {5, -5}, {9, -4}, {16, -7}, {8, -7}, {-1, -13}, {0, -12}, {-5, -15}, {-7, -5}, - {-1, -6}, {-2, -12}, {25, -20}, {10, -26}, {5, -31}, {4, -29}, {-8, -21}, {-13, -12}, - {-10, 5}, {-22, 2}, {-31, -9}, {2, -31}, {-6, -33}, {-16, -39}, {-9, -33}, {-8, -15}, - {5, -14}, {-23, -17}, {-34, 12}, {-12, -22}, {-10, -39}, {-27, -38}, {-25, -31}, {-7, -36}, + {-1, -10}, {6, -17}, {24, -2}, {-12, 7}, {-8, -16}, {-9, 1}, {-7, 2}, {-3, -4}, + {-7, -14}, {20, -16}, {19, -5}, {-4, -8}, {-6, -17}, {-2, -9}, {-10, -4}, {-12, -15}, + {-3, -11}, {15, -15}, {24, -10}, {20, -11}, {13, -22}, {6, -15}, {-3, -18}, {-12, -16}, + {0, 2}, {7, -11}, {25, -13}, {18, -24}, {12, -25}, {3, -23}, {-1, -7}, {-6, -10}, + {5, 10}, {-30, 16}, {-12, -2}, {-7, -12}, {-23, -8}, {-14, -16}, {-4, -23}, {-1, 1}, + {22, 34}, {9, 33}, {-8, 34}, {21, 14}, {8, 14}, {-18, 26}, {12, 6}, {8, 20}, }, { - {5, -4}, {2, -9}, {3, -14}, {16, 8}, {-3, 2}, {-3, -10}, {6, 1}, {1, 2}, - {-7, 5}, {-9, -3}, {6, 10}, {22, -4}, {2, 1}, {-4, -4}, {-8, 7}, {-2, 3}, - {-8, 4}, {-8, 3}, {8, 2}, {12, -4}, {7, -4}, {1, -9}, {-1, -8}, {-8, -5}, - {-14, 4}, {-12, -4}, {2, -8}, {-1, -19}, {-1, -24}, {1, -21}, {0, -25}, {-11, -10}, - {-20, 12}, {-44, 4}, {-62, 10}, {-58, 0}, {-26, -19}, {-39, -18}, {-24, -22}, {-14, -3}, - {-32, -10}, {-31, -9}, {-38, -9}, {-48, 12}, {-26, -24}, {-58, -15}, {-58, -25}, {-27, -16}, + {-2, -6}, {8, -6}, {3, -19}, {2, 15}, {-7, -5}, {-7, 3}, {-1, 9}, {0, -6}, + {-16, -10}, {3, -10}, {3, 13}, {18, -3}, {-4, 0}, {-4, -10}, {-8, 4}, {-3, -13}, + {-17, -1}, {-6, 3}, {21, -16}, {22, -1}, {14, -3}, {7, -9}, {-2, -10}, {-12, -18}, + {-18, 8}, {-3, -1}, {3, -1}, {8, -11}, {1, -10}, {-6, -2}, {0, -8}, {-10, 5}, + {-6, 20}, {-52, 30}, {-52, 14}, {-61, 14}, {-44, 13}, {-37, -2}, {-42, 5}, {-11, 13}, + {-26, 41}, {-17, 31}, {-35, 33}, {-21, 29}, {-16, 7}, {-46, 22}, {-38, 22}, {1, 18}, }, { - {23, -19}, {16, 5}, {-3, 2}, {-7, 0}, {-18, -12}, {-13, -16}, {-12, -8}, {0, -6}, - {19, -14}, {-5, -8}, {-6, -2}, {-5, 4}, {4, -11}, {0, -13}, {-17, -9}, {-7, 1}, - {25, -6}, {-8, -4}, {-8, -6}, {4, -8}, {-5, -9}, {-6, -22}, {0, -27}, {2, -18}, - {6, 10}, {-4, 2}, {3, -8}, {17, -28}, {16, -31}, {7, -32}, {-9, -27}, {-1, -22}, - {5, 31}, {-8, 15}, {16, -22}, {43, -45}, {31, -51}, {3, -48}, {28, -49}, {-8, -18}, - {-1, 51}, {17, 19}, {23, 0}, {29, -24}, {7, -26}, {0, -38}, {-21, -14}, {-28, -6}, + {0, 0}, {31, 4}, {2, 18}, {-15, 15}, {-31, 1}, {-12, -12}, {-15, -1}, {-7, -2}, + {7, -11}, {7, -14}, {1, 6}, {-8, -2}, {-7, -16}, {-3, -19}, {-14, -10}, {-12, -9}, + {19, 12}, {6, 15}, {16, -4}, {15, -3}, {1, -10}, {8, -33}, {-4, -18}, {-7, -19}, + {7, 28}, {3, 23}, {1, 7}, {28, -17}, {23, -20}, {4, -17}, {-8, -7}, {-1, -7}, + {25, 51}, {12, 42}, {36, -1}, {40, -16}, {12, -18}, {5, -19}, {12, -19}, {10, -9}, + {71, 98}, {59, 67}, {35, 56}, {35, 19}, {21, 14}, {32, 7}, {22, 29}, {32, 23}, }, { - {2, -15}, {17, 2}, {9, 5}, {-7, -2}, {-8, -17}, {-15, -7}, {-10, -4}, {-2, 0}, - {7, -9}, {22, -13}, {-3, 10}, {-12, 2}, {-5, 5}, {-1, -8}, {-16, 2}, {-6, 3}, - {14, -10}, {20, -9}, {-3, 4}, {-5, 0}, {-1, -3}, {-8, -9}, {-2, -21}, {0, -7}, - {7, 2}, {6, 1}, {7, -1}, {4, -13}, {10, -26}, {3, -28}, {-2, -27}, {-1, -19}, - {3, 18}, {-16, 21}, {-1, -11}, {10, -30}, {13, -39}, {0, -41}, {6, -42}, {-1, -16}, - {-16, 10}, {-22, 21}, {-3, -5}, {3, -22}, {-5, -36}, {-18, -25}, {-11, -36}, {-40, -1}, + {-19, -2}, {0, 0}, {13, 11}, {-4, 19}, {-26, -7}, {-22, 1}, {-10, 1}, {-13, 12}, + {-17, -6}, {19, -7}, {1, 3}, {-9, 11}, {-20, 9}, {-13, -4}, {-15, 1}, {-18, -3}, + {5, 5}, {21, 17}, {11, 17}, {19, 4}, {7, -5}, {-3, -12}, {-11, -6}, {-10, -5}, + {0, 24}, {-4, 34}, {-1, 26}, {19, -3}, {15, -11}, {-4, -9}, {-11, 2}, {-14, 3}, + {0, 42}, {15, 50}, {9, 26}, {20, -5}, {-7, -1}, {-2, -18}, {-5, -10}, {-10, 10}, + {43, 56}, {35, 87}, {31, 45}, {31, 27}, {31, 8}, {19, 1}, {8, 8}, {28, 21}, }, { - {1, -13}, {3, -9}, {29, -8}, {-2, 2}, {-10, -15}, {-5, -11}, {-9, 2}, {-4, -3}, - {-5, -11}, {2, -11}, {19, -2}, {4, -3}, {-5, -6}, {6, -5}, {-12, 4}, {-8, 4}, - {5, -8}, {3, -5}, {18, -5}, {5, -6}, {-3, -8}, {-1, -9}, {-4, -11}, {-7, -7}, - {-4, -6}, {6, -4}, {26, -16}, {13, -15}, {8, -23}, {7, -28}, {-7, -21}, {-13, -10}, - {-16, 7}, {-19, 5}, {-26, -8}, {2, -30}, {-1, -30}, {-17, -38}, {-8, -38}, {-9, -20}, - {7, -17}, {-21, -16}, {-32, 12}, {-11, -23}, {-9, -36}, {-24, -43}, {-25, -30}, {-11, -41}, + {0, -8}, {4, -4}, {0, 0}, {-9, 11}, {-14, 1}, {-7, -3}, {-8, 10}, {-10, 6}, + {-9, -10}, {6, -15}, {13, -2}, {-1, -11}, {-9, -3}, {-4, -1}, {-7, 1}, {-14, 1}, + {-3, -3}, {9, 3}, {27, -3}, {21, -1}, {7, -1}, {7, -13}, {2, -6}, {-12, -8}, + {-1, 9}, {15, 8}, {21, 12}, {30, -6}, {20, -8}, {6, -13}, {1, -2}, {-4, -3}, + {1, 16}, {-1, 22}, {1, 5}, {12, -7}, {-3, -6}, {-9, -27}, {-1, -18}, {1, -5}, + {25, 28}, {20, 25}, {34, 39}, {23, 7}, {13, 15}, {20, -2}, {9, 9}, {17, -6}, }, { - {1, -1}, {-2, -10}, {4, -4}, {18, 4}, {1, 3}, {-4, -15}, {-3, 2}, {-5, 4}, - {-3, 5}, {-8, -3}, {7, -1}, {24, 0}, {1, -3}, {-2, -2}, {-8, 11}, {-2, 1}, - {-5, 2}, {-5, -3}, {10, 2}, {15, 6}, {6, -4}, {-10, -3}, {4, -9}, {-5, 5}, - {-11, 0}, {-10, -1}, {6, -2}, {3, 2}, {3, -9}, {6, -17}, {-2, -19}, {-11, -11}, - {-17, 0}, {-45, 5}, {-62, 10}, {-44, 2}, {-24, -20}, {-34, -20}, {-26, -23}, {-12, -10}, - {-32, -12}, {-30, -7}, {-36, -10}, {-45, 10}, {-21, -28}, {-55, -17}, {-55, -25}, {-25, -20}, + {-7, 2}, {-4, 5}, {3, 0}, {0, 0}, {-5, 2}, {-13, 2}, {-10, 14}, {-23, 17}, + {-13, 4}, {-3, -1}, {1, -7}, {14, -10}, {-12, -12}, {-9, -1}, {-3, 1}, {-20, 2}, + {-13, -1}, {-3, 5}, {21, 0}, {24, 5}, {9, -2}, {-7, 0}, {-7, 4}, {-13, 2}, + {-7, 15}, {0, 10}, {4, 20}, {11, 15}, {1, 13}, {4, -7}, {1, 0}, {-4, -5}, + {8, 4}, {-21, 15}, {-19, 6}, {-19, 8}, {-19, 4}, {-8, -12}, {9, -17}, {3, 3}, + {16, 35}, {8, 43}, {2, 21}, {18, 26}, {27, -8}, {19, 4}, {8, 2}, {36, 15}, }, { - {-6, -18}, {-11, 4}, {-6, -6}, {-20, 0}, {-24, -5}, {-15, -13}, {-11, -9}, {-1, -6}, - {-4, 3}, {27, -1}, {10, 5}, {1, 7}, {26, -7}, {9, -13}, {-15, 0}, {-7, -5}, - {14, -19}, {2, -10}, {-10, 11}, {8, 4}, {13, -10}, {-3, -18}, {-7, -25}, {1, -14}, - {21, -2}, {-6, 10}, {0, 8}, {26, -15}, {10, -23}, {-2, -24}, {-3, -26}, {-5, -29}, - {28, 10}, {19, 17}, {16, 4}, {22, -24}, {13, -39}, {-5, -47}, {2, -57}, {-2, -39}, - {16, 31}, {-4, 42}, {15, -6}, {2, -14}, {3, -45}, {-3, -51}, {-21, -49}, {3, -44}, + {-16, -17}, {-13, 8}, {-8, -6}, {-24, 4}, {-29, -5}, {-28, -3}, {-10, -5}, {-21, 0}, + {0, 0}, {25, -2}, {-7, 1}, {-6, -9}, {8, -5}, {-4, -13}, {-13, -11}, {-15, -15}, + {-14, -11}, {9, -9}, {-1, 4}, {8, 6}, {25, -21}, {-1, -17}, {-32, -15}, {-4, -18}, + {8, 6}, {13, 12}, {15, 0}, {29, -11}, {-5, -11}, {-9, -21}, {-4, -16}, {3, -23}, + {37, 24}, {32, 31}, {13, 17}, {24, -13}, {-23, -2}, {-6, -27}, {-9, -35}, {3, -22}, + {53, 64}, {38, 75}, {32, 34}, {46, 33}, {20, -1}, {0, 1}, {27, -11}, {9, 2}, }, { - {-7, -14}, {-9, -11}, {-7, -7}, {-10, -10}, {-12, -1}, {-9, -6}, {-8, 3}, {-5, 2}, - {-2, -6}, {-19, 19}, {20, -5}, {7, -5}, {-6, 2}, {7, -7}, {-10, 0}, {-7, 3}, - {10, -2}, {8, -6}, {-15, 11}, {-14, 14}, {0, 3}, {-6, -6}, {-8, -11}, {-7, -3}, - {10, -5}, {7, 6}, {-4, 14}, {5, -7}, {9, -13}, {0, -23}, {-5, -22}, {-5, -16}, - {36, 3}, {50, 12}, {23, 5}, {30, -18}, {4, -37}, {6, -54}, {-9, -38}, {22, -42}, - {33, -5}, {-22, 46}, {32, 9}, {4, -22}, {6, -61}, {-4, -59}, {4, -52}, {-1, -44}, + {-26, -6}, {-2, -2}, {-8, 3}, {-25, -3}, {1, -17}, {-16, 3}, {-10, 7}, {-9, 5}, + {-27, 3}, {0, 0}, {14, 1}, {-4, -8}, {-17, 1}, {9, -15}, {-10, 0}, {-17, -1}, + {-3, 3}, {18, -2}, {7, 0}, {5, 3}, {5, 3}, {-9, -1}, {-7, -9}, {-14, -10}, + {3, 7}, {14, 14}, {19, 14}, {21, 0}, {18, -4}, {-14, -2}, {1, -6}, {-6, -7}, + {51, 13}, {36, 42}, {50, 20}, {34, 1}, {-1, -8}, {-15, -24}, {19, -30}, {14, -21}, + {37, 50}, {47, 61}, {44, 56}, {13, 22}, {31, 3}, {26, -16}, {9, 0}, {32, -5}, }, { - {-11, -9}, {-15, -10}, {3, -21}, {1, -15}, {-7, -19}, {1, -7}, {3, 1}, {-13, 17}, - {-16, 4}, {-17, -3}, {5, -1}, {23, -6}, {3, -2}, {10, -3}, {6, 2}, {-8, 7}, - {-11, -1}, {-10, -7}, {16, -7}, {-4, 6}, {0, 1}, {-3, 9}, {-2, -5}, {-2, 5}, - {-13, -5}, {7, -4}, {7, 6}, {-5, 3}, {-1, -10}, {-5, -6}, {-3, -9}, {-2, -13}, - {34, -16}, {17, 4}, {14, 1}, {9, -3}, {9, -23}, {-11, -35}, {7, -34}, {8, -24}, - {47, -29}, {-1, -5}, {2, 4}, {4, -12}, {-12, -42}, {-18, -50}, {-10, -57}, {24, -46}, + {-13, -7}, {-28, 5}, {-10, 0}, {-23, 9}, {-15, -6}, {6, -3}, {-6, 11}, {3, 6}, + {-21, -5}, {-12, 0}, {0, 0}, {0, 1}, {-1, -10}, {26, -19}, {4, 0}, {-4, -7}, + {-24, 0}, {1, -2}, {21, -2}, {6, 6}, {9, -2}, {9, -1}, {2, -7}, {-5, 0}, + {9, -7}, {25, 0}, {13, 14}, {9, 12}, {20, -7}, {-1, 3}, {5, -3}, {1, -5}, + {39, 0}, {46, 12}, {26, 18}, {31, 7}, {6, 1}, {9, -22}, {3, -13}, {6, 0}, + {56, 10}, {31, 43}, {31, 41}, {31, 19}, {35, -8}, {1, 0}, {16, -18}, {33, 14}, }, { - {-10, 14}, {-13, -6}, {1, -20}, {-4, -24}, {-10, -22}, {-8, -16}, {-15, 13}, {-16, 21}, - {-1, 6}, {-16, 4}, {20, -13}, {-1, 1}, {19, -12}, {8, -12}, {-10, 7}, {-9, 17}, - {2, 15}, {-8, 0}, {-2, -3}, {20, -6}, {0, -2}, {-12, 2}, {-9, 11}, {0, 3}, - {1, 2}, {-10, 0}, {6, -1}, {0, 10}, {-1, 1}, {-15, -8}, {-12, 0}, {7, -9}, - {21, -3}, {-5, -2}, {12, -4}, {20, -3}, {18, -8}, {12, -29}, {0, -26}, {15, -27}, - {20, -32}, {-6, -27}, {13, -20}, {5, -7}, {5, -24}, {0, -41}, {2, -57}, {9, -43}, + {-8, 12}, {-16, 3}, {-12, -5}, {-9, -6}, {-8, -17}, {-11, -5}, {-16, 17}, {-14, 19}, + {-12, 2}, {-9, -2}, {16, -6}, {0, 0}, {1, -2}, {-11, -6}, {-4, -1}, {-13, 13}, + {-3, 11}, {-1, 0}, {12, -4}, {33, -2}, {-1, 5}, {-1, -2}, {0, 3}, {-16, 2}, + {16, 5}, {8, 7}, {9, 7}, {32, 2}, {21, 0}, {1, -5}, {6, 0}, {11, 3}, + {9, 18}, {18, 6}, {17, 15}, {9, 24}, {-2, 15}, {19, -13}, {12, -12}, {26, -8}, + {58, 22}, {28, 15}, {46, 13}, {36, 26}, {14, 16}, {23, -8}, {32, 1}, {18, 2}, }, { - {-6, -15}, {-12, 7}, {-9, -13}, {-21, 1}, {-24, -10}, {-17, -15}, {-8, -5}, {0, -7}, - {-3, 3}, {21, -5}, {7, 2}, {2, 12}, {27, -5}, {5, -14}, {-9, -1}, {-6, 0}, - {11, -17}, {6, 4}, {-7, 17}, {8, 6}, {14, -7}, {-2, -16}, {-7, -19}, {-1, -13}, - {16, -11}, {-13, 8}, {2, 17}, {27, -9}, {13, -19}, {0, -26}, {-5, -23}, {-2, -26}, - {27, 18}, {18, 17}, {16, 4}, {25, -20}, {13, -40}, {-7, -52}, {1, -56}, {-1, -39}, - {21, 38}, {-4, 35}, {18, -2}, {2, -16}, {4, -45}, {-9, -56}, {-20, -48}, {1, -46}, + {-34, 0}, {-15, 27}, {-22, 8}, {-28, 11}, {-1, -12}, {-22, -6}, {-9, 4}, {-27, 10}, + {-33, 15}, {-13, 7}, {-3, 0}, {7, -4}, {3, -8}, {-29, 2}, {-2, -9}, {-30, 2}, + {0, 0}, {4, 19}, {6, 18}, {16, 5}, {1, 4}, {-5, -10}, {-25, -9}, {-29, -4}, + {10, 14}, {8, 23}, {24, 29}, {5, 28}, {-4, -5}, {-9, -6}, {-10, -6}, {-23, -1}, + {33, 36}, {50, 46}, {31, 23}, {28, 6}, {-17, -13}, {-16, -27}, {-24, -23}, {-7, -18}, + {54, 102}, {60, 68}, {43, 60}, {20, 22}, {6, 18}, {-13, -2}, {-4, -6}, {1, -8}, }, { - {-9, -14}, {-9, -13}, {-8, -8}, {-10, -11}, {-13, -2}, {-12, -2}, {-9, 3}, {-7, 3}, - {-4, -14}, {-20, 16}, {19, -11}, {3, -1}, {-7, 7}, {8, -6}, {-9, 4}, {-10, 3}, - {9, 3}, {9, -7}, {-13, 18}, {-10, 17}, {0, 5}, {-7, 4}, {-9, -13}, {-3, 0}, - {8, 2}, {6, 7}, {-3, 13}, {6, 1}, {12, -4}, {-2, -19}, {-7, -20}, {-5, -18}, - {34, 3}, {53, 11}, {26, 12}, {30, -20}, {3, -35}, {8, -51}, {-9, -44}, {20, -41}, - {34, -4}, {-17, 52}, {26, 4}, {3, -23}, {7, -63}, {-2, -56}, {5, -54}, {-3, -49}, + {-55, 15}, {-35, 9}, {-13, 5}, {-3, -17}, {0, -3}, {-2, 8}, {-8, 16}, {-9, 13}, + {-37, 2}, {-11, 19}, {0, 3}, {-22, 9}, {1, -2}, {-6, 0}, {1, 1}, {-12, 5}, + {1, 17}, {0, 0}, {-3, 25}, {-8, 23}, {15, 2}, {2, 2}, {-15, -2}, {5, -6}, + {15, 25}, {6, 35}, {4, 36}, {-2, 34}, {13, 13}, {-16, 6}, {7, -4}, {8, -8}, + {23, 42}, {57, 41}, {32, 38}, {16, 18}, {1, 3}, {-6, -24}, {-6, -23}, {8, -12}, + {76, 59}, {65, 87}, {53, 56}, {32, 28}, {10, 8}, {24, 5}, {0, 2}, {11, 8}, }, { - {-15, -10}, {-18, -5}, {-3, -21}, {-1, -18}, {-9, -23}, {-1, -8}, {-2, 5}, {-18, 15}, - {-27, 3}, {-18, -6}, {5, -3}, {16, -13}, {1, -1}, {11, 2}, {3, 4}, {-8, 12}, - {-7, 6}, {-9, -6}, {15, -6}, {-3, 13}, {1, 9}, {-5, 11}, {-1, -1}, {-4, 2}, - {-13, -1}, {5, -8}, {9, 8}, {-9, 7}, {0, 1}, {-2, -2}, {-5, -11}, {0, -9}, - {36, -16}, {18, 8}, {21, 8}, {12, 0}, {11, -25}, {-10, -36}, {4, -37}, {5, -29}, - {50, -27}, {-2, -2}, {5, 11}, {1, -13}, {-13, -44}, {-20, -53}, {-10, -57}, {17, -53}, + {-31, 7}, {-29, 9}, {-21, 0}, {-16, -5}, {-9, -10}, {-4, 5}, {-6, 24}, {-17, 21}, + {-36, 9}, {-38, 10}, {13, 1}, {0, -5}, {-13, -3}, {3, 1}, {18, -1}, {-2, 6}, + {-7, 10}, {-10, 10}, {0, 0}, {2, 24}, {-3, 17}, {-16, 19}, {-5, 9}, {-5, 2}, + {-13, 14}, {16, 9}, {13, 34}, {1, 27}, {-3, 25}, {21, 10}, {2, 4}, {21, 2}, + {32, 13}, {27, 34}, {57, 23}, {44, 23}, {14, -1}, {6, -8}, {4, -9}, {16, -5}, + {66, 28}, {55, 43}, {23, 72}, {37, 44}, {7, 23}, {-1, -6}, {20, -2}, {18, -9}, }, { - {-13, 14}, {-15, -10}, {-1, -18}, {-4, -26}, {-9, -23}, {-11, -18}, {-16, 13}, {-20, 22}, - {-1, 17}, {-18, 3}, {15, -16}, {-1, -1}, {16, -17}, {6, -9}, {-8, 11}, {-8, 14}, - {-4, 14}, {-8, 5}, {-1, 2}, {20, -7}, {3, 8}, {-9, 5}, {-11, 0}, {-3, 14}, - {5, 7}, {-11, 0}, {-2, -2}, {-2, 11}, {-6, -1}, {-13, 1}, {-12, 3}, {3, -12}, - {19, -7}, {-6, -6}, {11, -1}, {25, -2}, {21, -4}, {12, -32}, {4, -24}, {18, -28}, - {16, -37}, {-2, -24}, {15, -21}, {7, -6}, {8, -24}, {-2, -45}, {-1, -62}, {8, -37}, + {-22, 24}, {-36, 14}, {-12, 3}, {-4, -14}, {-24, -2}, {-20, -1}, {-13, 19}, {-39, 40}, + {-8, 19}, {-19, 8}, {-10, 2}, {7, -1}, {-8, -7}, {-13, -1}, {-7, 11}, {-19, 14}, + {-9, 18}, {-5, 15}, {-1, 13}, {0, 0}, {0, 23}, {-5, 10}, {-5, 9}, {2, 10}, + {15, 18}, {-10, 21}, {-4, 24}, {3, 35}, {-3, 20}, {6, 16}, {-8, 20}, {4, 1}, + {23, 17}, {19, 16}, {36, 22}, {22, 34}, {30, 33}, {36, -10}, {13, -1}, {23, -5}, + {54, -2}, {39, 31}, {36, 40}, {50, 60}, {43, 33}, {16, 17}, {6, -6}, {31, 14}, }, { - {-17, 47}, {-33, 30}, {-27, 6}, {-19, -4}, {-18, -18}, {-37, 4}, {-32, 21}, {-6, 10}, - {-4, 20}, {-7, 11}, {-8, -13}, {-23, 12}, {-12, 1}, {-25, -1}, {-24, 10}, {-7, 5}, - {10, 7}, {-15, 11}, {-5, 4}, {-5, 27}, {-5, 7}, {-13, 4}, {-14, -10}, {-4, -7}, - {-3, 0}, {-5, 38}, {49, 9}, {0, 26}, {13, -5}, {-7, -11}, {-16, -12}, {-23, -9}, - {9, 5}, {14, 25}, {19, 17}, {35, -3}, {-7, -22}, {-15, -43}, {-7, -45}, {-6, -30}, - {15, 16}, {11, 24}, {21, 22}, {3, 11}, {-29, -43}, {-38, -54}, {-25, -47}, {2, -61}, + {1, 33}, {-21, 32}, {-17, 8}, {-6, 3}, {-15, -18}, {-2, -1}, {-36, 18}, {-20, 13}, + {-27, 7}, {-15, -3}, {-32, -36}, {-21, 5}, {-6, -9}, {2, -15}, {-20, -6}, {-20, 5}, + {-24, -4}, {-28, 2}, {18, -13}, {4, 18}, {13, 0}, {-17, -8}, {-8, -11}, {-16, -9}, + {0, 0}, {11, 22}, {14, 15}, {24, 19}, {14, -1}, {-18, 2}, {-3, -10}, {-23, -1}, + {7, 7}, {15, -2}, {31, 24}, {30, 0}, {-5, -17}, {-6, -21}, {-25, -18}, {-19, -13}, + {42, 38}, {43, 56}, {28, 37}, {14, 38}, {5, 5}, {-16, -8}, {-7, 2}, {21, -10}, }, { - {-28, 35}, {-50, 42}, {-12, 18}, {4, -9}, {-15, -15}, {-35, 9}, {-19, 18}, {-3, 18}, - {-29, 8}, {-22, 10}, {-13, 1}, {-16, -11}, {2, 8}, {-4, 0}, {-20, 12}, {9, 6}, - {-6, 13}, {-32, 19}, {-18, 17}, {-5, -5}, {-13, 22}, {-6, 4}, {-4, -9}, {4, -5}, - {21, 12}, {-16, 49}, {14, 34}, {8, -9}, {8, 3}, {-7, -3}, {-12, -3}, {-14, -10}, - {43, -8}, {17, 15}, {16, 7}, {31, 4}, {1, -6}, {-17, -29}, {-7, -46}, {-8, -36}, - {31, 14}, {12, 13}, {24, 38}, {-3, 4}, {-16, -13}, {-32, -45}, {-24, -52}, {0, -61}, + {-18, 39}, {0, 29}, {-14, 24}, {0, 5}, {-4, -2}, {-19, 19}, {-3, 21}, {-7, 24}, + {-42, -5}, {-22, -6}, {-30, -8}, {-29, -35}, {17, -6}, {17, -11}, {-20, 8}, {3, -2}, + {-21, -2}, {-15, 7}, {-27, -2}, {-10, -10}, {1, 23}, {-19, 18}, {-3, -3}, {-14, 0}, + {16, 9}, {0, 0}, {13, 29}, {-2, 4}, {8, 17}, {-17, 16}, {-13, 10}, {-4, -8}, + {1, 5}, {29, 25}, {32, 6}, {35, 15}, {9, 13}, {-6, -16}, {-16, -16}, {6, -17}, + {40, 58}, {36, 43}, {56, 63}, {34, 16}, {27, 4}, {-3, -13}, {5, -12}, {-9, -9}, }, { - {-20, 23}, {-35, 25}, {-26, 27}, {-10, 8}, {-8, -8}, {-14, 1}, {-17, 19}, {-14, 18}, - {-43, 8}, {-19, 2}, {-23, 14}, {0, -6}, {-29, -3}, {-5, 1}, {-5, 9}, {-4, 6}, - {-21, 8}, {-15, -5}, {-7, 25}, {-9, 12}, {-14, 6}, {-6, 22}, {-10, 2}, {-5, 6}, - {-1, 1}, {-7, 16}, {-12, 65}, {-10, 33}, {10, -3}, {1, 10}, {9, -3}, {9, -12}, - {27, 6}, {18, 4}, {22, 27}, {1, 15}, {5, 7}, {1, -8}, {-4, -32}, {-5, -20}, - {23, -29}, {20, 1}, {22, 17}, {12, 22}, {-9, -5}, {-26, -24}, {-22, -55}, {-20, -53}, + {-20, 20}, {-22, 29}, {-15, 29}, {-19, 9}, {-10, -2}, {-16, 7}, {-15, 20}, {6, 12}, + {-56, -2}, {-39, 0}, {-30, 3}, {-18, -14}, {-25, -31}, {-15, -1}, {7, -2}, {-21, 9}, + {-44, 13}, {-36, -16}, {-23, 3}, {-22, -5}, {-20, 1}, {20, 6}, {-24, 5}, {-12, 3}, + {3, 2}, {-2, 7}, {0, 0}, {-3, 19}, {6, 4}, {-2, 24}, {5, 8}, {12, -2}, + {16, 21}, {12, -7}, {11, 26}, {-1, 15}, {16, 29}, {-1, 8}, {0, -7}, {-16, -7}, + {24, 3}, {48, 55}, {35, 55}, {26, 60}, {31, 22}, {16, 23}, {-5, -1}, {-4, 1}, }, { - {-29, 28}, {-37, 23}, {-30, 13}, {-13, 8}, {-11, -3}, {-23, 0}, {-37, 25}, {-14, 23}, - {-39, 34}, {-32, -9}, {0, -9}, {-9, 2}, {-15, -1}, {-19, -14}, {-33, 17}, {-20, 28}, - {-27, 35}, {-17, -7}, {-18, 12}, {-14, 26}, {-8, 6}, {-1, -5}, {-26, 17}, {-4, 12}, - {-22, 24}, {15, -5}, {-4, 25}, {2, 55}, {-1, 16}, {-2, -2}, {-4, 9}, {-5, 0}, - {31, 1}, {8, 10}, {6, 12}, {22, 33}, {14, 7}, {5, 0}, {-8, -7}, {12, -19}, - {12, -17}, {-4, -23}, {17, 7}, {27, 26}, {4, 15}, {-21, -15}, {-21, -23}, {-12, -40}, + {-13, 24}, {-17, 20}, {-14, 17}, {13, 11}, {-5, 4}, {-15, 2}, {-24, 26}, {-37, 40}, + {-31, 20}, {-28, -19}, {-32, -4}, {-28, -5}, {-24, -18}, {-36, -18}, {-30, 17}, {-1, 16}, + {-5, 16}, {-17, -2}, {-36, -12}, {-22, 5}, {-39, -10}, {-33, 0}, {-21, 18}, {-12, 12}, + {-9, 28}, {5, 13}, {-23, 18}, {0, 0}, {-2, 5}, {-16, 9}, {-5, 28}, {6, 4}, + {28, 21}, {-12, 35}, {13, -1}, {38, 28}, {-31, 16}, {6, 20}, {13, 3}, {-16, 2}, + {32, 34}, {15, 5}, {53, 56}, {61, 49}, {32, 47}, {19, 8}, {9, 43}, {13, -3}, }, { - {-17, 49}, {-30, 29}, {-28, 6}, {-22, -8}, {-16, -16}, {-35, 6}, {-34, 20}, {-7, 11}, - {2, 31}, {-4, 18}, {-5, -2}, {-23, 13}, {-17, 3}, {-28, -2}, {-23, 9}, {-8, 3}, - {14, 12}, {-10, 18}, {-5, 4}, {-9, 22}, {-5, 10}, {-14, 4}, {-13, -14}, {0, -7}, - {-3, 0}, {-9, 35}, {50, 12}, {0, 23}, {16, -5}, {-11, -12}, {-14, -10}, {-26, -15}, - {8, 3}, {17, 36}, {21, 19}, {35, -7}, {-7, -23}, {-15, -42}, {-10, -50}, {-8, -35}, - {16, 21}, {12, 26}, {26, 27}, {5, 11}, {-32, -42}, {-38, -50}, {-23, -45}, {4, -60}, + {22, 37}, {6, 29}, {-6, 20}, {24, 9}, {-4, -2}, {-7, 5}, {6, 13}, {14, 7}, + {10, 37}, {8, 27}, {3, 9}, {-14, 3}, {-1, -7}, {0, -18}, {-15, -5}, {-7, -2}, + {16, 14}, {-12, 30}, {-14, -9}, {-1, 20}, {12, 8}, {0, 3}, {-18, -15}, {-18, -13}, + {-10, 19}, {30, 31}, {13, 44}, {12, 40}, {-2, 9}, {1, 1}, {-4, 0}, {1, -15}, + {0, 0}, {35, 65}, {30, 46}, {16, 17}, {8, -23}, {-38, -28}, {-10, -19}, {-11, -12}, + {49, 65}, {46, 68}, {62, 92}, {31, 38}, {7, -2}, {-11, -10}, {-10, 0}, {-14, -6}, }, { - {-28, 33}, {-49, 42}, {-15, 13}, {5, -13}, {-16, -13}, {-38, 6}, {-17, 21}, {-9, 13}, - {-25, 26}, {-12, 31}, {-10, 7}, {-13, -7}, {0, 7}, {-7, -3}, {-24, 4}, {5, 4}, - {-5, 14}, {-29, 22}, {-17, 18}, {-8, -9}, {-14, 18}, {-9, 0}, {-5, -13}, {2, -9}, - {20, 14}, {-17, 46}, {13, 29}, {12, -3}, {6, 0}, {-5, -3}, {-14, -6}, {-13, -12}, - {46, 24}, {18, 17}, {23, 43}, {29, 5}, {-3, -7}, {-18, -32}, {-6, -46}, {-12, -40}, - {29, 3}, {15, 16}, {18, 34}, {-1, 8}, {-13, -12}, {-36, -47}, {-26, -57}, {-2, -63}, + {0, 40}, {-1, 38}, {-9, 35}, {1, 17}, {-23, -11}, {14, 8}, {3, 28}, {31, 10}, + {-2, 32}, {10, 46}, {-26, 42}, {-5, 12}, {7, -8}, {-20, 2}, {-6, -3}, {9, 6}, + {24, 20}, {-13, 32}, {7, 26}, {8, -17}, {14, 26}, {3, 4}, {-7, -4}, {7, -10}, + {5, 39}, {32, 60}, {31, 35}, {-6, 29}, {-4, 25}, {1, 11}, {3, -4}, {12, -6}, + {38, 72}, {0, 0}, {44, 70}, {31, 39}, {-18, 20}, {-7, -22}, {-14, -30}, {-6, -34}, + {37, 65}, {48, 77}, {41, 80}, {52, 74}, {18, 12}, {-9, 1}, {-18, -15}, {5, 3}, }, { - {-24, 19}, {-38, 21}, {-24, 27}, {-11, 7}, {-7, -8}, {-20, -2}, {-21, 17}, {-15, 20}, - {-39, 14}, {-15, 9}, {-18, 24}, {2, -3}, {-30, -3}, {-4, -2}, {-7, 5}, {-7, 5}, - {-18, -1}, {-11, 5}, {-9, 32}, {-7, 18}, {-17, 3}, {-8, 16}, {-12, -4}, {-5, 4}, - {1, 14}, {-6, 17}, {-14, 63}, {-14, 34}, {11, -1}, {-1, 11}, {6, -3}, {4, -18}, - {29, 8}, {23, 26}, {20, 26}, {8, 57}, {5, 6}, {2, -5}, {-6, -32}, {-10, -22}, - {28, -15}, {18, 1}, {25, 22}, {17, 26}, {-6, -1}, {-29, -29}, {-21, -53}, {-23, -57}, + {2, 17}, {-15, 28}, {-2, 29}, {3, 8}, {-4, 1}, {-9, 8}, {-3, 10}, {-3, 20}, + {-14, 19}, {-18, 20}, {-2, 37}, {2, 4}, {-12, 2}, {4, -3}, {-7, 7}, {5, -2}, + {-16, 2}, {9, 19}, {-7, 38}, {-14, 30}, {-4, -3}, {9, 11}, {8, -8}, {-15, 3}, + {-5, 34}, {-15, 31}, {9, 70}, {6, 32}, {6, 12}, {12, 27}, {11, 16}, {-3, -2}, + {13, 39}, {38, 57}, {0, 0}, {52, 82}, {19, 25}, {16, 19}, {-16, -14}, {4, 2}, + {57, 79}, {34, 40}, {66, 61}, {50, 66}, {63, 64}, {9, -5}, {3, 5}, {-1, 0}, }, { - {-27, 29}, {-39, 17}, {-32, 13}, {-16, 4}, {-10, -6}, {-20, 0}, {-39, 23}, {-14, 21}, - {-44, 30}, {-29, 8}, {5, 0}, {-5, 10}, {-15, 3}, {-16, -7}, {-35, 13}, {-20, 21}, - {-26, 38}, {-20, -12}, {-13, 15}, {-13, 24}, {-9, 12}, {-3, -11}, {-27, 13}, {-5, 7}, - {-20, 28}, {17, 0}, {-2, 28}, {-2, 54}, {-2, 14}, {-1, -1}, {-3, 12}, {-8, -1}, - {30, 1}, {6, 3}, {12, 34}, {18, 33}, {19, 36}, {4, 2}, {-12, -5}, {10, -21}, - {8, -23}, {2, -15}, {17, 7}, {32, 30}, {3, 17}, {-17, -9}, {-21, -26}, {-10, -40}, + {11, 18}, {-13, 16}, {-10, 24}, {5, 15}, {-6, 5}, {-6, 10}, {1, 20}, {10, 17}, + {-21, 20}, {1, 8}, {-1, 8}, {-9, 15}, {7, -2}, {1, 2}, {9, -1}, {-14, 18}, + {-1, 30}, {-13, 0}, {3, 18}, {21, 25}, {1, 13}, {-28, -7}, {9, 3}, {2, 6}, + {11, 26}, {22, 31}, {-6, 38}, {28, 58}, {-2, 15}, {2, 21}, {26, 19}, {2, 8}, + {8, 26}, {11, 29}, {32, 60}, {0, 0}, {33, 66}, {9, 26}, {31, 10}, {5, -5}, + {20, 13}, {37, 79}, {23, 48}, {44, 72}, {28, 60}, {41, 52}, {-1, 14}, {10, -10}, }, { - {-2, 33}, {-8, 22}, {-24, 2}, {-11, -3}, {-35, -27}, {-22, 6}, {-14, 15}, {-17, 0}, - {-9, 44}, {-4, 32}, {7, 8}, {-9, 10}, {-9, -3}, {-13, -3}, {-21, 2}, {-11, 2}, - {5, 68}, {7, 51}, {4, 34}, {6, 26}, {-18, 14}, {-20, -6}, {4, -17}, {-6, -4}, - {6, 15}, {-16, 27}, {1, -23}, {21, 22}, {16, -9}, {-4, -18}, {-19, -17}, {-24, -20}, - {-20, -52}, {2, 23}, {4, 4}, {6, -5}, {-15, -32}, {-25, -50}, {1, -18}, {-18, -41}, - {-32, -115}, {16, 41}, {-3, 6}, {-15, 21}, {-13, -5}, {-46, -51}, {-41, -56}, {-13, -62}, + {20, 22}, {-26, 19}, {1, 6}, {-3, 0}, {-36, -31}, {8, -5}, {17, 16}, {10, -2}, + {16, 38}, {12, 6}, {1, 4}, {-2, -3}, {-10, 8}, {-9, 1}, {-5, -22}, {-22, 1}, + {26, 61}, {12, 33}, {6, 27}, {6, -7}, {-10, -2}, {20, -3}, {-20, -18}, {-34, -22}, + {-2, 29}, {10, 26}, {-20, -19}, {4, 27}, {-4, 1}, {-18, 1}, {-1, -13}, {-14, -4}, + {-19, -28}, {29, 33}, {11, 21}, {-23, -5}, {-4, -17}, {-4, -32}, {-15, -29}, {-21, -35}, + {0, 0}, {40, 79}, {10, 48}, {26, 39}, {-5, 3}, {-34, -9}, {-1, -17}, {-7, -22}, }, { - {-18, 25}, {-2, 24}, {-14, 5}, {-19, 9}, {-17, -23}, {-13, 7}, {-7, 12}, {1, 20}, - {-19, 28}, {-1, 40}, {1, 16}, {-2, 20}, {-12, 9}, {-14, 5}, {-13, 2}, {-14, 3}, - {0, 44}, {-19, 62}, {6, 38}, {12, 23}, {4, 5}, {-16, 12}, {-19, -3}, {-13, 0}, - {3, 14}, {-19, 28}, {11, 27}, {-13, -24}, {20, 5}, {-4, 0}, {-22, -6}, {-13, -13}, - {6, 15}, {-20, 13}, {12, 11}, {-3, -10}, {-8, -24}, {3, -22}, {-21, -64}, {-19, -37}, - {11, 15}, {-8, -3}, {24, 41}, {-3, -7}, {-15, 5}, {-50, -47}, {-23, -33}, {-15, -63}, + {0, 20}, {7, 43}, {13, 9}, {9, 4}, {10, -20}, {4, 3}, {3, 20}, {-1, 13}, + {-8, 20}, {13, 35}, {21, 24}, {-4, 17}, {22, -14}, {-16, 0}, {5, -6}, {16, -7}, + {17, 36}, {21, 65}, {6, 45}, {16, 26}, {2, 5}, {-1, 8}, {0, -15}, {16, -25}, + {12, 13}, {1, 39}, {14, 37}, {-24, -32}, {21, 12}, {11, -2}, {-4, -12}, {-4, -18}, + {32, 28}, {-1, 44}, {20, 39}, {5, 22}, {2, -24}, {-37, -20}, {-26, -41}, {-36, -19}, + {32, 74}, {0, 0}, {44, 93}, {15, 38}, {16, 31}, {-10, -32}, {-33, -10}, {-34, -29}, }, { - {-6, 13}, {-20, 11}, {-10, 7}, {-12, -3}, {-32, -30}, {-22, 6}, {-15, 13}, {-22, 10}, - {-14, 11}, {-21, 18}, {-4, 28}, {2, 4}, {-18, 6}, {-19, -5}, {-22, -5}, {-1, 6}, - {-36, 46}, {-5, 22}, {-4, 59}, {-9, 43}, {0, 24}, {2, 10}, {-19, -16}, {-10, -9}, - {1, -27}, {9, 21}, {7, 49}, {-6, 39}, {-19, -21}, {-8, 17}, {-3, -5}, {-15, -10}, - {16, -24}, {-23, 3}, {11, 39}, {-7, 34}, {-28, -8}, {-9, -29}, {-28, -47}, {-4, -47}, - {-5, -44}, {15, 0}, {7, 31}, {8, 45}, {-21, -29}, {-33, -20}, {-28, -35}, {-21, -68}, + {-10, 20}, {8, 10}, {11, 10}, {6, 3}, {-17, -2}, {0, 3}, {6, 14}, {13, 4}, + {-17, 14}, {-1, 12}, {13, 15}, {-4, 4}, {11, -12}, {3, -10}, {-6, -7}, {-10, -4}, + {4, 22}, {8, 17}, {46, 51}, {25, 12}, {-2, 18}, {-15, 2}, {-9, -6}, {-36, -4}, + {-27, -25}, {14, 16}, {2, 56}, {5, 31}, {-21, -30}, {-4, 14}, {-2, 4}, {-4, -10}, + {-8, 12}, {-4, -5}, {14, 29}, {23, 13}, {11, 2}, {2, -6}, {-10, -31}, {-8, -49}, + {-18, -4}, {21, 47}, {0, 0}, {47, 82}, {19, 10}, {-4, 3}, {-2, -14}, {-5, -21}, }, { - {-6, 2}, {-21, -1}, {-8, 4}, {14, 2}, {-21, -18}, {-21, -11}, {-18, 6}, {-6, 8}, - {-6, 10}, {-18, 5}, {-15, 11}, {-5, 25}, {-24, 11}, {-23, 10}, {-12, 3}, {-2, 11}, - {-11, 17}, {-15, 14}, {0, 35}, {2, 54}, {5, 32}, {-8, 18}, {-12, -2}, {-6, -2}, - {-10, 21}, {7, -26}, {2, 28}, {-15, 47}, {-10, 8}, {-32, -25}, {-4, 14}, {-11, -9}, - {21, -27}, {-16, -27}, {12, 17}, {-12, 51}, {-3, 18}, {-14, -19}, {-25, -18}, {-16, -23}, - {-6, -25}, {-16, -63}, {4, 14}, {-1, 32}, {7, 38}, {-36, -42}, {-27, -18}, {-23, -50}, + {13, 4}, {-12, 15}, {0, 8}, {-7, 3}, {-2, -10}, {-19, 1}, {-10, 15}, {0, 23}, + {-6, 8}, {6, 0}, {-16, 4}, {0, 19}, {1, -4}, {-5, 9}, {-21, 0}, {11, 3}, + {15, -4}, {3, 12}, {19, 28}, {9, 46}, {13, 32}, {5, 5}, {-1, -9}, {-8, 9}, + {21, 24}, {-27, -28}, {-21, 28}, {2, 37}, {-4, 9}, {-35, -21}, {8, 25}, {12, -1}, + {-5, 10}, {-11, 0}, {2, 7}, {4, 37}, {19, -2}, {-13, -15}, {4, -6}, {0, -18}, + {5, 21}, {-1, -12}, {35, 56}, {0, 0}, {27, 61}, {-1, -2}, {11, 26}, {-1, -33}, }, { - {-7, 33}, {-10, 17}, {-21, 6}, {-10, -2}, {-35, -25}, {-19, 2}, {-13, 20}, {-16, 6}, - {-9, 42}, {-7, 26}, {7, 12}, {-10, 9}, {-7, -6}, {-17, -4}, {-24, -3}, {-16, -1}, - {4, 66}, {8, 52}, {-3, 33}, {8, 28}, {-18, 11}, {-22, -9}, {0, -25}, {-5, -3}, - {7, 19}, {-12, 29}, {7, -17}, {22, 26}, {15, -12}, {-4, -19}, {-19, -12}, {-25, -22}, - {-19, -47}, {3, 27}, {3, 3}, {5, -7}, {-15, -34}, {-23, -49}, {1, -19}, {-17, -40}, - {-33, -113}, {19, 42}, {-2, 8}, {-11, 23}, {-13, -6}, {-43, -48}, {-37, -53}, {-15, -62}, + {-22, 20}, {-19, -3}, {4, -34}, {-32, -14}, {83, -58}, {3, 3}, {5, -4}, {12, -3}, + {-15, 29}, {-25, -21}, {9, 0}, {23, -13}, {7, -13}, {-9, -24}, {-16, -19}, {-13, -29}, + {22, 49}, {-1, 8}, {-12, -30}, {-15, -18}, {-4, 5}, {-8, -22}, {-27, -30}, {-7, -17}, + {40, 58}, {1, -4}, {11, 36}, {26, 36}, {-14, 15}, {17, 1}, {-4, 1}, {-22, -22}, + {-10, -4}, {33, 49}, {12, 23}, {-37, 11}, {-17, -26}, {-3, 19}, {-20, -13}, {1, -9}, + {-21, -62}, {50, 74}, {20, 51}, {20, 42}, {94, 41}, {23, 47}, {16, 8}, {-34, -13}, }, { - {-21, 19}, {-7, 19}, {-19, 1}, {-17, 7}, {-21, -27}, {-10, 8}, {-8, 9}, {-3, 13}, - {-23, 21}, {0, 39}, {-1, 15}, {-3, 22}, {-11, 7}, {-16, 8}, {-14, -1}, {-14, 0}, - {3, 46}, {-18, 61}, {4, 37}, {12, 19}, {3, 3}, {-16, 12}, {-17, -3}, {-17, -6}, - {5, 22}, {-14, 36}, {15, 31}, {-9, -18}, {18, 5}, {-1, 5}, {-23, -3}, {-12, -12}, - {4, 11}, {-17, 21}, {16, 17}, {-3, -14}, {-5, -24}, {4, -19}, {-19, -61}, {-22, -36}, - {6, 10}, {-8, -4}, {22, 44}, {-3, -8}, {-15, 4}, {-48, -46}, {-28, -34}, {-16, -63}, + {11, 3}, {-3, 21}, {-9, 8}, {11, -4}, {-11, 17}, {2, -6}, {8, 14}, {6, -1}, + {-7, 0}, {-5, 33}, {6, 14}, {6, 35}, {11, -3}, {-6, -14}, {0, -17}, {0, 4}, + {-5, 34}, {9, 41}, {7, 30}, {23, 3}, {21, 8}, {19, 7}, {6, -9}, {-9, -13}, + {27, 33}, {45, 79}, {26, 55}, {7, 20}, {-4, 4}, {-1, 0}, {18, -8}, {3, -19}, + {9, 7}, {24, 60}, {0, 50}, {-24, -26}, {1, -9}, {11, -23}, {-4, -35}, {-23, -27}, + {16, 11}, {40, 58}, {28, 66}, {21, 28}, {25, 24}, {41, 31}, {6, 2}, {18, -3}, }, { - {-8, 7}, {-25, 6}, {-11, 2}, {-14, -4}, {-30, -31}, {-26, 7}, {-17, 10}, {-22, 9}, - {-17, 10}, {-25, 15}, {-4, 30}, {1, 3}, {-17, 4}, {-18, -2}, {-19, 0}, {-3, 4}, - {-35, 43}, {-1, 25}, {-2, 55}, {-12, 41}, {-1, 23}, {2, 10}, {-19, -18}, {-5, -2}, - {6, -19}, {14, 26}, {12, 63}, {-8, 41}, {-14, -16}, {-7, 14}, {1, -2}, {-18, -11}, - {14, -31}, {-18, 5}, {14, 47}, {-6, 35}, {-30, -13}, {-6, -22}, {-29, -46}, {-1, -43}, - {-4, -44}, {9, -7}, {6, 33}, {6, 41}, {-19, -27}, {-34, -22}, {-29, -39}, {-21, -61}, + {-11, 0}, {-3, -15}, {-4, -5}, {-64, -37}, {27, 28}, {5, -10}, {-1, -6}, {6, -13}, + {-13, 12}, {2, -5}, {13, 9}, {5, -12}, {-12, -28}, {1, -13}, {7, -15}, {11, -19}, + {-10, 11}, {-2, 1}, {30, 29}, {20, 30}, {10, 19}, {4, 0}, {-12, -18}, {0, -22}, + {12, 33}, {18, 38}, {50, 67}, {11, 41}, {19, 23}, {4, -6}, {17, -5}, {6, -24}, + {-21, -34}, {8, 23}, {45, 69}, {36, 54}, {-24, -35}, {19, 27}, {-3, -21}, {-26, -30}, + {-10, -7}, {-3, -14}, {32, 47}, {11, 32}, {34, 8}, {41, 11}, {15, 39}, {10, -22}, }, { - {-7, 1}, {-21, -1}, {-10, 4}, {12, 0}, {-24, -21}, {-19, -10}, {-21, 9}, {-9, 6}, - {-11, 5}, {-17, 7}, {-16, 8}, {-4, 25}, {-26, 7}, {-25, 13}, {-15, 1}, {0, 13}, - {-5, 20}, {-15, 8}, {1, 37}, {2, 52}, {6, 27}, {-7, 13}, {-12, -2}, {-7, -5}, - {-11, 15}, {10, -20}, {3, 26}, {-12, 51}, {-9, 10}, {-27, -17}, {-7, 7}, {-9, -4}, - {21, -24}, {-16, -33}, {14, 23}, {-8, 57}, {-2, 23}, {-19, -20}, {-23, -18}, {-18, -28}, - {-7, -23}, {-12, -61}, {1, 11}, {-1, 35}, {6, 33}, {-37, -40}, {-26, -19}, {-24, -47}, + {-30, 9}, {-13, -9}, {-32, 9}, {9, -5}, {30, 7}, {-14, -23}, {-7, 14}, {-15, 8}, + {10, -8}, {-10, 7}, {-7, -1}, {3, 4}, {-12, -1}, {-9, -2}, {4, -4}, {5, -6}, + {10, -2}, {0, -11}, {13, 22}, {32, 31}, {4, 27}, {18, -3}, {-27, -7}, {-2, -8}, + {-6, 18}, {35, 15}, {14, 42}, {31, 65}, {24, 40}, {-1, 9}, {9, -1}, {3, 5}, + {11, 14}, {-27, -31}, {24, 41}, {47, 86}, {4, 42}, {-19, -38}, {0, -10}, {1, -18}, + {7, 19}, {17, 3}, {-14, -4}, {21, 56}, {-6, 0}, {13, 11}, {4, 21}, {29, -10}, }, }; @@ -2581,164 +2585,164 @@ constexpr Weight king_relative_knight_psqt[16][64] = { { - {-16, -34}, {-7, -17}, {-2, -30}, {-1, -24}, {9, -33}, {4, -37}, {-1, -64}, {-31, -32}, - {12, -6}, {-4, -4}, {-14, -17}, {-2, -24}, {-3, -21}, {-8, -30}, {14, -56}, {-4, -52}, - {3, -1}, {2, -13}, {-9, 8}, {-1, -6}, {-4, -10}, {-3, -16}, {-2, -22}, {-12, -32}, - {-5, 11}, {7, 1}, {-8, 8}, {1, 3}, {1, -4}, {0, -14}, {-3, -20}, {-4, -40}, - {12, -1}, {5, 10}, {13, 3}, {3, -9}, {16, -17}, {1, -17}, {3, -22}, {-8, -33}, - {9, -13}, {1, 1}, {27, -22}, {27, -25}, {10, -11}, {7, -28}, {-10, -18}, {-4, -21}, - {4, -12}, {3, -23}, {15, -19}, {24, -16}, {7, -14}, {-2, -26}, {-13, -9}, {-5, -25}, - {-14, -16}, {-5, 0}, {24, 0}, {-3, 0}, {12, -20}, {-7, -6}, {-14, 0}, {29, -11}, + {-36, -18}, {-5, -29}, {4, -26}, {9, -33}, {11, -35}, {8, -33}, {-21, -45}, {-30, -35}, + {1, -18}, {4, -8}, {-8, -14}, {-3, -14}, {-1, -12}, {-3, -25}, {-6, -25}, {-18, -48}, + {3, -8}, {3, -5}, {1, 23}, {8, 13}, {7, 8}, {2, 0}, {-3, -13}, {-26, -38}, + {0, 19}, {9, 12}, {5, 27}, {15, 14}, {16, 0}, {20, -6}, {8, -18}, {3, -40}, + {13, 10}, {21, 21}, {36, 8}, {5, 18}, {15, 11}, {21, -9}, {14, -20}, {-6, -23}, + {-2, 9}, {32, 4}, {51, -7}, {40, 3}, {38, -1}, {12, -8}, {2, -8}, {-29, -6}, + {6, -9}, {8, -8}, {26, -1}, {41, -9}, {6, 4}, {4, 0}, {-7, -8}, {-15, -12}, + {-44, -27}, {-2, -5}, {1, 7}, {12, -3}, {5, -11}, {-1, -9}, {-18, -22}, {-27, 0}, }, { - {-1, -39}, {-7, -5}, {-3, -8}, {-1, -23}, {-3, -19}, {3, -21}, {4, -14}, {1, -45}, - {3, -4}, {-8, -7}, {-8, -5}, {-1, -10}, {6, -22}, {-6, -15}, {3, -30}, {3, -41}, - {-1, 2}, {8, -1}, {2, -8}, {-7, 3}, {-4, -3}, {0, -8}, {2, -12}, {5, -32}, - {-2, 2}, {-4, 6}, {-5, 14}, {-7, 9}, {-6, 3}, {-7, -1}, {-5, -2}, {6, -24}, - {5, 6}, {-4, 11}, {-5, 12}, {-2, 3}, {-2, 1}, {-6, 1}, {-3, -3}, {1, -9}, - {-9, 5}, {-4, 5}, {12, -11}, {14, -16}, {0, -3}, {-8, -3}, {0, -6}, {14, -9}, - {23, -26}, {10, -18}, {17, -24}, {13, -6}, {4, -9}, {2, -14}, {5, -13}, {10, -3}, - {-9, -15}, {-10, -3}, {13, -1}, {6, 1}, {21, -15}, {7, 0}, {-3, 4}, {25, 20}, + {-19, -24}, {-26, -2}, {-2, 1}, {-1, -12}, {-8, -8}, {3, -8}, {-4, -23}, {-32, -37}, + {-11, -7}, {-5, 0}, {0, -5}, {2, -5}, {3, -8}, {-2, -6}, {-8, -27}, {-10, -43}, + {-13, 7}, {12, 8}, {9, 2}, {-1, 24}, {5, 19}, {1, 9}, {0, -2}, {-5, -29}, + {0, 9}, {9, 9}, {8, 29}, {5, 17}, {6, 14}, {7, 17}, {7, -2}, {5, -22}, + {3, 18}, {7, 35}, {11, 31}, {2, 27}, {1, 25}, {7, 16}, {10, 6}, {5, -13}, + {-8, 10}, {3, 19}, {15, 6}, {40, 10}, {12, 23}, {8, 9}, {2, 7}, {2, -8}, + {-2, -7}, {9, 3}, {34, -10}, {14, 14}, {9, 3}, {26, -6}, {9, -10}, {-3, 9}, + {-16, -33}, {14, -8}, {-23, 9}, {25, -1}, {6, -3}, {-9, 6}, {-8, 12}, {-25, 2}, }, { - {1, -13}, {-16, 24}, {-16, 27}, {-11, 0}, {-12, 0}, {-15, -9}, {-17, -5}, {8, -59}, - {-5, -7}, {-11, 8}, {5, 16}, {-5, 3}, {-5, -11}, {-14, -13}, {-10, -20}, {-9, -21}, - {-6, -7}, {-8, 12}, {5, 4}, {-8, 2}, {-4, -5}, {-11, 2}, {-7, -8}, {-9, -18}, - {-6, 0}, {-12, 0}, {-4, 1}, {-9, -3}, {-10, 2}, {-13, -9}, {-7, -3}, {-9, -14}, - {-8, -6}, {-4, -1}, {-11, -6}, {3, -8}, {-5, -6}, {-12, -2}, {-12, -7}, {-16, -3}, - {-9, -22}, {-2, -7}, {-18, -6}, {-9, -9}, {-15, -4}, {-21, 2}, {-8, -4}, {-23, 6}, - {-11, -6}, {-11, -12}, {-18, -10}, {-25, 2}, {-12, -12}, {-23, -2}, {2, -13}, {-13, -4}, - {-17, -16}, {-39, -4}, {-12, -9}, {-23, -7}, {-12, -16}, {-22, 2}, {-3, -4}, {7, -22}, + {-24, 20}, {-28, 7}, {-7, 21}, {-9, -5}, {-4, -8}, {-3, -11}, {-17, -34}, {-12, -48}, + {-13, -7}, {-15, 9}, {17, -1}, {-3, 10}, {-1, -4}, {-2, -14}, {-12, -17}, {-15, -30}, + {-16, -9}, {-2, 1}, {15, 8}, {5, 9}, {11, 1}, {-3, 5}, {-2, -10}, {-19, -18}, + {-2, -3}, {-2, -1}, {16, 0}, {10, -2}, {8, 1}, {2, 1}, {5, -8}, {-9, -14}, + {-5, -10}, {13, -1}, {7, 6}, {12, 1}, {-2, 5}, {2, 1}, {12, -18}, {-9, -8}, + {-17, -6}, {16, -14}, {-2, 7}, {10, 8}, {22, -7}, {6, -1}, {-3, -4}, {-15, -9}, + {-26, -5}, {-18, -3}, {1, -2}, {-7, -1}, {7, -17}, {11, -8}, {-7, -6}, {-20, -4}, + {-57, -43}, {-31, -11}, {-26, -7}, {4, -17}, {-5, -11}, {-46, 4}, {-25, -5}, {-64, -19}, }, { - {19, -27}, {-3, 13}, {-9, 16}, {-12, 31}, {1, 8}, {2, -11}, {-1, 6}, {12, -38}, - {-9, -30}, {-6, -3}, {-5, 18}, {2, 1}, {-6, 6}, {-8, -1}, {-4, -10}, {-9, -11}, - {-5, -2}, {-7, 17}, {-2, 5}, {-3, 14}, {-5, 11}, {-10, 10}, {-8, 2}, {0, -15}, - {-3, -15}, {-16, 8}, {-10, 7}, {-20, 16}, {-15, 7}, {-13, 11}, {-26, 9}, {-2, -12}, - {-4, -6}, {-13, 5}, {-15, 9}, {-15, 0}, {-18, 6}, {-32, 15}, {-6, -2}, {-14, 11}, - {-10, -9}, {-22, 9}, {-33, 15}, {-35, 9}, {-20, 6}, {-40, 12}, {-15, 5}, {-14, 1}, - {-28, 4}, {-26, 12}, {-13, 1}, {-58, 24}, {-45, 11}, {-13, 0}, {-2, -12}, {-14, -2}, - {-24, 1}, {-25, -10}, {-38, 3}, {-32, 6}, {-20, -5}, {-46, 9}, {-10, 12}, {-4, -21}, + {3, -30}, {-14, -14}, {-1, 5}, {-5, 19}, {-1, 0}, {6, -23}, {-7, -23}, {-15, -37}, + {-12, -39}, {-3, -7}, {2, 2}, {0, 12}, {-1, 0}, {0, -3}, {-8, -7}, {-24, -20}, + {-14, -12}, {-1, 3}, {4, 7}, {5, 30}, {7, 20}, {-1, 6}, {-4, -3}, {-7, -26}, + {0, -4}, {-7, 0}, {0, 15}, {-5, 21}, {-2, 8}, {-1, 15}, {-6, 2}, {-4, -16}, + {-10, -6}, {-1, 9}, {0, 18}, {-6, 11}, {-10, 7}, {-13, 21}, {5, 1}, {-4, -4}, + {-14, 1}, {-7, 6}, {-14, 7}, {-4, 13}, {-1, 11}, {-25, 20}, {2, -1}, {-9, -1}, + {-33, 4}, {-23, 9}, {5, 4}, {-35, 2}, {-9, 1}, {4, -7}, {-30, 4}, {-20, 8}, + {-66, -23}, {-14, -13}, {-53, 3}, {-9, 2}, {-28, -3}, {-45, 0}, {-33, -5}, {-66, -49}, }, { - {-23, -17}, {-25, -5}, {-20, 9}, {-26, -9}, {-34, -23}, {-33, -23}, {-58, -10}, {-47, -13}, - {-7, 9}, {-27, 14}, {-31, 13}, {-17, 2}, {-26, -10}, {-49, -15}, {-17, -32}, {-50, -23}, - {-23, 37}, {14, 8}, {2, -8}, {-5, -14}, {20, -30}, {-19, -14}, {-36, -13}, {-54, -3}, - {8, 2}, {-4, -8}, {20, -14}, {15, -11}, {7, -26}, {7, -24}, {5, -29}, {-56, -14}, - {-9, 23}, {12, -13}, {28, -13}, {29, -20}, {31, -24}, {8, -33}, {-26, -15}, {-45, -22}, - {-13, -6}, {9, 9}, {12, -5}, {5, -7}, {7, -16}, {-4, -18}, {-7, -12}, {-15, -30}, - {-8, 2}, {5, -2}, {-3, -4}, {6, -10}, {7, -5}, {-13, -7}, {-17, -21}, {-17, -11}, - {-11, 10}, {-7, -9}, {24, 0}, {-1, -1}, {9, -14}, {-5, -23}, {-26, -19}, {-7, 7}, + {-33, -15}, {-17, -27}, {-8, -17}, {-42, -9}, {-16, -33}, {-24, -17}, {-67, -33}, {-40, -33}, + {-17, -13}, {2, -6}, {-8, -18}, {-10, -9}, {-24, -19}, {-28, -14}, {-6, -32}, {-38, -37}, + {-1, 12}, {10, 6}, {12, -19}, {20, -18}, {-12, -4}, {-15, -23}, {-25, -21}, {-44, -47}, + {-5, 6}, {13, -17}, {34, -9}, {29, -22}, {13, -13}, {-2, -12}, {-10, -33}, {-49, -36}, + {18, 5}, {35, -14}, {17, 4}, {8, -1}, {35, -23}, {10, -27}, {-20, -19}, {-41, -25}, + {22, -8}, {33, -8}, {16, 4}, {23, 5}, {25, -7}, {-14, -13}, {-20, -18}, {-18, -36}, + {9, -16}, {-5, 2}, {13, -2}, {2, 8}, {0, -14}, {-12, -10}, {-11, -29}, {-28, -5}, + {-6, -15}, {4, 3}, {-4, 3}, {14, -28}, {3, -15}, {-8, -9}, {-21, -15}, {-26, -10}, }, { - {3, 36}, {-3, 4}, {-22, 17}, {-8, 2}, {-15, 6}, {-26, -2}, {-72, 4}, {-47, -8}, - {-4, 26}, {-21, 11}, {-11, 16}, {-10, -5}, {-18, -4}, {-6, -8}, {-13, -26}, {-23, 0}, - {0, 24}, {1, 10}, {20, -10}, {-13, -5}, {-7, -12}, {-21, 0}, {-14, -15}, {-45, -11}, - {-5, 11}, {12, -9}, {-31, 4}, {4, -7}, {17, -21}, {5, -23}, {6, -21}, {-38, -4}, - {-2, 13}, {13, -6}, {11, -12}, {16, -16}, {31, -21}, {25, -26}, {-6, -25}, {-17, -6}, - {-12, 2}, {5, 8}, {17, -7}, {23, -12}, {-6, -10}, {-1, -20}, {-5, -14}, {-6, -14}, - {-6, 5}, {0, 3}, {-16, 9}, {10, 1}, {3, -6}, {-18, -2}, {-11, -3}, {-20, -2}, - {-38, -4}, {-3, -1}, {22, 4}, {-2, -8}, {2, -7}, {-7, -11}, {-23, 1}, {-3, 12}, + {-9, 17}, {-20, -15}, {-18, 15}, {-6, -11}, {-18, 6}, {-20, -17}, {-59, -22}, {-42, -39}, + {-17, -2}, {-9, 10}, {-14, 12}, {-20, 5}, {-23, -1}, {-18, -11}, {-36, -3}, {-28, -15}, + {-21, 17}, {7, 15}, {19, -7}, {7, 0}, {-7, -1}, {-2, -13}, {-25, -10}, {-33, -16}, + {-3, 14}, {7, -2}, {6, -3}, {27, -21}, {35, -27}, {7, -11}, {0, -23}, {-43, -17}, + {-12, 23}, {24, -3}, {32, -9}, {30, -18}, {35, -21}, {30, -15}, {-3, -15}, {-31, -10}, + {-12, 11}, {18, 15}, {13, 0}, {52, -4}, {33, -10}, {17, -16}, {1, -15}, {-31, -10}, + {-6, 0}, {-6, 14}, {12, 0}, {25, -10}, {21, -22}, {10, -6}, {-10, -1}, {4, -14}, + {-13, -14}, {4, 7}, {10, 2}, {9, -7}, {-2, 0}, {-3, -15}, {-5, -10}, {-33, 1}, }, { - {-11, 50}, {-17, 17}, {-35, 27}, {-23, 14}, {-18, 16}, {-11, 5}, {-49, 16}, {-38, 11}, - {-9, 36}, {-9, 26}, {-13, 29}, {-6, 7}, {-6, -7}, {-21, 3}, {-1, 4}, {-29, -2}, - {-25, 21}, {-2, 17}, {-12, 8}, {14, -11}, {3, -12}, {-3, -9}, {-9, -11}, {-27, -2}, - {-13, 11}, {-16, 9}, {5, -14}, {-5, -6}, {28, -31}, {19, -24}, {-11, -9}, {-24, -4}, - {-18, 10}, {5, -11}, {38, -19}, {15, -17}, {13, -21}, {24, -25}, {-4, -14}, {-8, -2}, - {-5, -3}, {-15, 6}, {-6, -4}, {11, -6}, {6, -9}, {-12, -6}, {3, -9}, {-6, -9}, - {-24, 14}, {5, 8}, {-27, 8}, {-2, -1}, {-6, -2}, {1, 1}, {4, -3}, {-9, 5}, - {-32, -5}, {10, 4}, {26, -7}, {0, 5}, {3, -3}, {7, -6}, {8, -3}, {-7, 3}, + {1, 36}, {-21, 20}, {-11, 28}, {-12, 15}, {-9, 9}, {-15, 5}, {-26, -15}, {-52, -16}, + {-16, 19}, {-11, 32}, {-23, 26}, {-30, 22}, {-22, 10}, {-20, 5}, {4, -9}, {-22, -12}, + {-31, 26}, {-2, 21}, {-2, 13}, {10, 5}, {8, 0}, {8, -17}, {7, -19}, {-28, -17}, + {4, 4}, {-6, 11}, {19, -8}, {7, -6}, {28, -18}, {14, -1}, {-6, -18}, {-19, -4}, + {3, 6}, {4, -3}, {51, -9}, {20, -8}, {23, -17}, {17, -4}, {1, -6}, {4, -14}, + {13, -2}, {-4, 11}, {-6, 15}, {16, 10}, {36, -7}, {11, -6}, {13, -5}, {0, -12}, + {-22, 16}, {21, 5}, {-13, 7}, {18, -2}, {20, -11}, {12, -5}, {2, 1}, {-11, -2}, + {-25, 2}, {-13, -5}, {3, 4}, {-16, 19}, {6, 6}, {0, 1}, {-14, -5}, {-36, -20}, }, { - {-12, 36}, {0, 27}, {-20, 20}, {-13, 21}, {-7, 26}, {-10, 30}, {-43, 40}, {-41, 12}, - {-18, 22}, {-28, 23}, {-13, 21}, {2, 11}, {-2, 8}, {-19, 8}, {-11, 12}, {-9, 4}, - {-37, 16}, {-3, 2}, {6, 1}, {0, -3}, {11, -9}, {-1, 0}, {-19, 3}, {-18, 4}, - {-28, 19}, {-15, 1}, {1, -11}, {-11, -5}, {-6, -8}, {22, -22}, {0, -5}, {-13, 7}, - {-14, 8}, {4, -14}, {25, -24}, {22, -15}, {14, -16}, {30, -20}, {-2, -12}, {-21, 8}, - {-30, 8}, {-12, 9}, {-9, -1}, {4, 0}, {10, -8}, {-5, -6}, {-5, 0}, {-11, 0}, - {-20, 14}, {-7, 9}, {-11, 8}, {-7, 4}, {-4, 3}, {6, 1}, {-7, 7}, {-8, -1}, - {-46, 13}, {3, 9}, {16, 8}, {5, 7}, {-2, -3}, {-5, 8}, {-9, 2}, {-7, 12}, + {-4, 17}, {-2, 7}, {-15, 24}, {-4, 23}, {-2, 24}, {-8, 16}, {-54, 26}, {-19, 1}, + {-4, 1}, {0, 7}, {-2, 9}, {1, 8}, {0, 9}, {-21, 10}, {7, 10}, {-18, -6}, + {-21, 10}, {-16, 14}, {6, 7}, {-4, 17}, {9, 10}, {5, 3}, {-16, 7}, {-33, 2}, + {-8, 4}, {0, -2}, {5, -2}, {-1, -6}, {-1, -6}, {24, -9}, {6, -6}, {-9, 0}, + {-8, 4}, {16, -7}, {29, -7}, {26, -6}, {24, -14}, {38, -7}, {-3, 0}, {-6, 0}, + {-6, 4}, {11, 5}, {2, 2}, {26, 10}, {33, -1}, {0, 8}, {-8, 5}, {17, -15}, + {0, 1}, {18, -3}, {7, 4}, {14, 1}, {25, -2}, {-2, 4}, {2, 12}, {-11, -1}, + {-30, -13}, {7, 4}, {5, 12}, {6, 3}, {7, 6}, {-5, 11}, {4, 3}, {-30, -22}, }, { - {-31, -9}, {-25, -12}, {-33, -16}, {-45, -32}, {-36, -27}, {-28, -3}, {-38, -9}, {-14, -3}, - {-24, -20}, {-3, 8}, {-35, -10}, {-13, -27}, {-22, -16}, {-26, -51}, {-26, -19}, {-36, -3}, - {-8, 0}, {-20, -7}, {-19, -23}, {-30, -24}, {-11, -28}, {-29, -45}, {-39, -36}, {-32, -23}, - {-11, 8}, {-18, -13}, {-16, -18}, {8, -27}, {-16, -36}, {3, -48}, {-25, -47}, {-16, -24}, - {-21, -11}, {-3, -16}, {-6, -19}, {-5, -29}, {11, -19}, {-16, -30}, {-18, -44}, {-31, -28}, - {-14, -8}, {0, 5}, {-7, 7}, {-5, -4}, {-12, -20}, {-9, -20}, {-21, -31}, {-40, -19}, - {-3, 20}, {-23, -3}, {-13, -13}, {-5, -16}, {-12, -16}, {-20, -14}, {-25, -22}, {-14, -13}, - {-9, -3}, {-1, 4}, {-12, -14}, {-29, -25}, {-34, -33}, {2, -14}, {-18, -13}, {2, -23}, + {-27, -15}, {-34, -11}, {12, -12}, {-7, -23}, {-19, -7}, {-14, -28}, {-29, -18}, {4, -43}, + {-33, -13}, {-15, -8}, {-10, -29}, {15, -7}, {-23, -21}, {-4, -39}, {-22, 2}, {-39, -14}, + {-13, -14}, {14, -2}, {12, -6}, {-12, -14}, {-14, -22}, {-20, -29}, {-35, -40}, {1, -27}, + {-1, -1}, {5, -16}, {-14, -11}, {-9, -9}, {2, -29}, {-18, -34}, {-11, -28}, {-35, -16}, + {3, 4}, {5, -4}, {14, 0}, {23, -27}, {-13, -11}, {-8, -20}, {-15, -32}, {-29, -12}, + {10, 0}, {-6, -2}, {7, 6}, {16, 6}, {-4, -4}, {-18, -10}, {-14, -30}, {-6, -21}, + {11, 2}, {4, -8}, {6, -6}, {15, -19}, {-4, -6}, {0, -19}, {-10, -18}, {-32, 9}, + {11, -14}, {15, -6}, {-3, -5}, {6, -6}, {5, -11}, {-5, -10}, {-71, -23}, {8, -8}, }, { - {-26, 0}, {-10, 13}, {-24, 11}, {-12, 1}, {-11, -7}, {-30, -22}, {-36, 12}, {-6, 25}, - {-12, 22}, {-2, 10}, {-20, 3}, {-3, -13}, {-20, -3}, {-14, -41}, {-9, -8}, {-25, 3}, - {-5, -6}, {-22, 0}, {-4, -16}, {-48, -16}, {-13, -28}, {-14, -15}, {-21, -27}, {-30, -14}, - {-13, 15}, {-4, -7}, {-6, -14}, {-20, -28}, {0, -33}, {-3, -43}, {-10, -26}, {-8, -21}, - {9, 3}, {-16, -31}, {10, -24}, {8, -29}, {-2, -39}, {-4, -26}, {-13, -34}, {-26, -16}, - {-12, -4}, {-9, 9}, {-9, -2}, {-6, -9}, {-2, -20}, {-20, -13}, {-22, -21}, {-28, -22}, - {-7, -2}, {-20, 10}, {-9, 8}, {-9, 8}, {-11, -23}, {-19, -16}, {-17, -14}, {-28, -32}, - {9, 21}, {-3, 10}, {2, -8}, {-3, -6}, {-7, -18}, {-10, -20}, {-24, -25}, {-7, 24}, + {1, -3}, {-30, -10}, {6, 1}, {6, -11}, {-7, 0}, {-10, -5}, {-25, 14}, {-2, 8}, + {-15, -9}, {-5, 5}, {-26, -15}, {-24, 2}, {-17, -9}, {-34, -26}, {-10, -16}, {3, -10}, + {-11, 2}, {17, -13}, {-9, 2}, {0, -2}, {7, -12}, {-11, -14}, {-13, -19}, {-14, -34}, + {13, 10}, {15, -21}, {-6, -2}, {-3, -3}, {-6, -20}, {-12, -19}, {-10, -29}, {-23, -20}, + {0, 24}, {-1, -17}, {10, -2}, {-5, -7}, {-2, -17}, {-10, -2}, {12, -29}, {-8, -15}, + {6, 1}, {6, 10}, {14, 10}, {10, 12}, {22, 1}, {-9, -8}, {-13, -4}, {-9, -13}, + {-4, 11}, {7, -2}, {-10, 26}, {6, -1}, {11, -8}, {-19, -6}, {2, -13}, {-1, -2}, + {18, 10}, {9, 20}, {32, 2}, {-15, 14}, {2, 0}, {-6, -29}, {-16, -7}, {-29, -5}, }, { - {-12, 12}, {-13, 12}, {-19, -1}, {-18, 2}, {-15, 10}, {-14, -9}, {-37, 23}, {-15, 1}, - {-34, -9}, {-6, 2}, {-26, -13}, {-10, -10}, {-27, -12}, {-15, -19}, {-15, -16}, {-20, 2}, - {-20, -4}, {-15, 4}, {-10, -15}, {-10, -18}, {-19, -33}, {-6, -22}, {-24, -29}, {-24, -20}, - {-13, 3}, {-7, 8}, {-4, -20}, {15, -20}, {11, -37}, {9, -40}, {-11, -37}, {-18, -27}, - {-3, -8}, {11, -18}, {-14, -20}, {13, -26}, {0, -23}, {3, -40}, {-1, -40}, {-26, -26}, - {-6, 5}, {-6, 12}, {-18, 2}, {-9, -8}, {3, -30}, {-12, -22}, {-24, -18}, {-45, -26}, - {-4, 14}, {-11, 11}, {-20, 13}, {-27, 5}, {-4, -4}, {-24, -25}, {-13, -24}, {-27, -23}, - {9, 21}, {7, -4}, {-10, -13}, {-4, -6}, {-2, -11}, {1, -23}, {-29, -34}, {-22, -24}, + {48, 20}, {-27, 0}, {-34, 17}, {4, -19}, {-19, -7}, {0, -22}, {-9, 6}, {-25, -14}, + {-7, 15}, {-8, 11}, {-4, -7}, {-11, 0}, {-15, -18}, {-13, -28}, {-19, -3}, {-8, -31}, + {-10, -13}, {-7, 6}, {-18, -5}, {-8, -4}, {-2, -16}, {-19, -9}, {-7, -38}, {-27, -26}, + {-1, -2}, {13, 2}, {-11, -4}, {20, -23}, {-17, -29}, {11, -30}, {-4, -35}, {-12, -25}, + {-17, 8}, {-6, -1}, {8, -12}, {-11, -10}, {12, -15}, {-15, -22}, {-16, -25}, {-13, -27}, + {5, 13}, {43, 10}, {-1, 11}, {24, 0}, {-7, 1}, {-10, -4}, {-26, -11}, {-15, -21}, + {-2, 0}, {14, 23}, {6, 9}, {10, 8}, {1, -3}, {-5, -6}, {-19, -15}, {11, -8}, + {27, 29}, {11, 29}, {7, 3}, {18, 3}, {1, 0}, {-17, -2}, {-23, -32}, {-45, -3}, }, { - {-18, 3}, {-17, 15}, {-26, -24}, {-16, -19}, {-20, -5}, {-14, -4}, {-26, 11}, {-16, 20}, - {-20, -8}, {-1, 11}, {-15, -5}, {-29, -21}, {-28, -4}, {-1, -24}, {-26, 6}, {-18, -10}, - {-23, -20}, {-26, -4}, {-22, -19}, {-21, -10}, {-9, -21}, {-6, -20}, {-18, -15}, {-22, -24}, - {3, 0}, {-15, -22}, {-7, -18}, {-8, -23}, {15, -24}, {-4, -30}, {-16, -25}, {-5, -14}, - {2, -15}, {10, -17}, {-13, -15}, {-4, -27}, {2, -24}, {2, -22}, {-11, -26}, {-19, -21}, - {-12, -15}, {-11, -3}, {-8, -7}, {-7, -1}, {1, -17}, {-18, -8}, {-19, -10}, {-37, -17}, - {-11, 7}, {-2, 9}, {-16, 6}, {-13, 2}, {-16, 9}, {-9, -4}, {-17, -4}, {-9, -6}, - {-23, -24}, {-6, -8}, {2, 1}, {-3, -2}, {-11, -19}, {1, -11}, {-15, -7}, {-4, -29}, + {-15, 11}, {-28, -22}, {-12, 4}, {-8, -3}, {-23, -22}, {-5, -3}, {-19, -13}, {-6, 10}, + {8, -13}, {2, -16}, {-12, 0}, {-5, -10}, {-6, -7}, {-10, -17}, {-16, 5}, {-18, -18}, + {-31, 4}, {-14, -3}, {-24, -11}, {7, -11}, {5, -14}, {-34, -8}, {-30, -21}, {-24, -18}, + {-1, 5}, {10, -16}, {-6, -2}, {-14, -17}, {4, -15}, {-14, -17}, {-8, -11}, {-20, 0}, + {-18, 3}, {2, -10}, {-7, 0}, {1, -16}, {11, -19}, {-1, 0}, {-11, -13}, {-23, -8}, + {-10, 7}, {10, 12}, {4, 7}, {28, 8}, {29, 3}, {10, -2}, {8, -8}, {-26, -7}, + {-27, 4}, {0, 16}, {-1, -1}, {-5, 7}, {21, 7}, {4, 6}, {-9, -10}, {-14, -9}, + {17, 32}, {15, -2}, {5, 9}, {15, 12}, {4, 2}, {-8, 24}, {-4, 6}, {-7, 17}, }, { - {-8, 8}, {-7, 28}, {-19, -15}, {-26, -20}, {-33, -26}, {-11, -1}, {-23, -1}, {-19, -24}, - {-11, -3}, {-8, -5}, {-19, 11}, {-16, 2}, {-16, -29}, {-11, -40}, {-27, 2}, {-19, -17}, - {-37, -31}, {-28, -38}, {-26, -40}, {-15, -21}, {-33, -31}, {-37, -37}, {-19, -41}, {-18, -15}, - {-26, -24}, {-17, -18}, {-11, -32}, {3, -26}, {2, -30}, {-16, -65}, {-27, -42}, {-19, -12}, - {-37, -38}, {-7, -31}, {-32, -37}, {-5, -9}, {-26, -37}, {-15, -23}, {-29, -31}, {-2, 3}, - {-10, -5}, {-25, -8}, {-22, -20}, {-6, -28}, {-11, -10}, {-20, -35}, {-30, -55}, {-24, -31}, - {-29, -26}, {-26, -19}, {-15, -14}, {-19, -11}, {-18, -33}, {-10, -28}, {-7, -16}, {-13, -28}, - {2, 13}, {-15, -30}, {-17, -37}, {-12, -21}, {-15, -59}, {5, -13}, {-9, -15}, {0, 5}, + {-97, 38}, {28, -12}, {-64, 2}, {-52, -6}, {-33, 18}, {-8, 2}, {-115, -29}, {5, -14}, + {-101, -25}, {-40, -13}, {-25, -28}, {1, -10}, {-10, -18}, {-27, -19}, {-24, -9}, {-5, -6}, + {-12, -21}, {-19, 11}, {-10, -20}, {-2, -13}, {-7, -13}, {-25, -39}, {-23, -1}, {-21, -32}, + {12, 14}, {0, 7}, {20, -16}, {-21, -6}, {-17, -14}, {-7, -30}, {-20, -31}, {-5, -13}, + {4, -23}, {3, -13}, {2, -26}, {15, -3}, {-11, -8}, {-16, -13}, {-4, -32}, {-37, -38}, + {3, -21}, {28, 11}, {7, -23}, {-15, -12}, {8, -10}, {4, -12}, {-47, -27}, {-43, -37}, + {28, 33}, {-1, -20}, {-9, -11}, {-27, -31}, {8, -7}, {-13, -13}, {15, 6}, {33, -51}, + {43, -12}, {-13, -33}, {66, 22}, {-9, 6}, {16, -11}, {2, -16}, {1, -39}, {17, -34}, }, { - {-7, 11}, {-10, 14}, {-42, -32}, {-24, -8}, {-39, -45}, {-25, -6}, {-1, 19}, {-13, 11}, - {-7, -4}, {-24, -23}, {-19, -22}, {-25, -15}, {-14, -9}, {-15, -37}, {-11, -3}, {-23, -5}, - {-31, -25}, {-15, -8}, {-6, -16}, {-21, -20}, {-38, -35}, {-29, -41}, {-15, -29}, {-48, -39}, - {-12, -12}, {-10, -20}, {-14, -31}, {-8, -29}, {5, -34}, {-7, -30}, {-5, -22}, {-37, -21}, - {-16, -25}, {-11, -22}, {-30, -29}, {-20, -26}, {-24, -35}, {-27, -46}, {-32, -49}, {-27, -23}, - {-9, 5}, {-10, 7}, {-9, -12}, {-19, -26}, {-28, -17}, {-18, -35}, {-30, -20}, {-43, -24}, - {12, 15}, {-21, -11}, {-25, -15}, {-20, -6}, {-20, -23}, {-38, -31}, {-20, -14}, {-33, -40}, - {-8, 21}, {0, 16}, {-18, -21}, {-11, 8}, {-26, -46}, {-21, -31}, {-18, -40}, {-7, -11}, + {-73, -56}, {-69, -22}, {-1, -17}, {-2, -18}, {33, -3}, {-34, 4}, {-25, 7}, {-32, -21}, + {25, 31}, {-3, -16}, {-7, -25}, {-1, -4}, {-30, -13}, {-29, -4}, {34, -1}, {-14, -3}, + {-30, -11}, {-4, 2}, {2, -1}, {-7, -5}, {-5, -6}, {-31, -16}, {-9, -12}, {-36, -20}, + {7, -15}, {-17, -4}, {-2, 6}, {-13, -18}, {2, -25}, {-15, -18}, {-3, -18}, {-6, -3}, + {-9, 27}, {-16, -17}, {28, -18}, {0, -12}, {-1, -27}, {-13, -23}, {-1, -45}, {0, -32}, + {14, 4}, {-13, 9}, {3, 2}, {-4, -20}, {-7, -1}, {-10, -12}, {3, -20}, {30, -27}, + {0, 20}, {-38, -12}, {-13, 1}, {10, -17}, {-4, -19}, {-8, -25}, {6, 2}, {20, -17}, + {46, 14}, {29, -2}, {-13, 10}, {-8, -10}, {-2, -27}, {-26, -18}, {-14, -4}, {-58, -4}, }, { - {-15, 22}, {-21, -4}, {-27, -6}, {-16, -1}, {-24, -51}, {-37, -17}, {-11, 29}, {-25, -9}, - {-15, -13}, {-16, -8}, {-34, -19}, {-29, -18}, {-17, -15}, {-29, -60}, {-23, -33}, {-6, 0}, - {-31, 8}, {-24, -28}, {-20, -32}, {-17, -26}, {-25, -34}, {-20, -33}, {-30, -51}, {-39, -17}, - {-12, -12}, {-7, -27}, {-11, -35}, {-9, -34}, {-7, -31}, {-18, -46}, {-24, -42}, {-31, -33}, - {-23, -17}, {-19, -18}, {-10, -15}, {-12, -47}, {-17, -25}, {-36, -36}, {-37, -42}, {-12, -1}, - {-22, -18}, {2, 4}, {-16, -17}, {-2, -19}, {-14, -25}, {0, -19}, {-32, -32}, {-31, -30}, - {-11, -13}, {-19, 2}, {-24, -13}, {-9, -10}, {-11, -14}, {-27, -10}, {-23, -27}, {-36, -39}, - {-8, -25}, {-9, -18}, {-10, -18}, {-9, -11}, {-29, -36}, {-20, -25}, {-5, 4}, {-20, -23}, + {-25, -38}, {-38, -40}, {2, -22}, {-8, -34}, {-8, 4}, {-37, -26}, {-4, -9}, {-31, -26}, + {-20, -21}, {-66, 9}, {1, -5}, {-22, -19}, {-25, -23}, {-27, -22}, {-10, -18}, {-22, -11}, + {-34, -51}, {-15, -14}, {-20, -16}, {-21, -14}, {-1, -25}, {-25, -42}, {-15, -34}, {4, -10}, + {13, 4}, {-12, -16}, {-16, -26}, {-19, -8}, {-11, -23}, {-17, -29}, {-19, -21}, {-37, -41}, + {7, 10}, {-8, -10}, {12, -20}, {17, -11}, {6, -22}, {-2, -32}, {-10, -34}, {-10, -4}, + {-25, 10}, {0, 13}, {-15, -2}, {2, -7}, {10, -7}, {-10, 3}, {-40, -13}, {-42, -14}, + {24, -3}, {0, -2}, {-1, 25}, {-10, 0}, {5, -29}, {11, -25}, {-67, -13}, {-90, -34}, + {52, 13}, {16, 2}, {6, 21}, {-8, 4}, {28, -30}, {-6, -29}, {-34, -21}, {-101, -46}, }, { - {-7, 14}, {-12, 13}, {-16, -22}, {-22, -20}, {-10, -14}, {-15, -16}, {-19, -3}, {-22, 1}, - {-28, -30}, {-8, -6}, {-19, -18}, {-30, -23}, {-9, -14}, {-22, -59}, {-10, 15}, {-7, 21}, - {-15, -1}, {-19, -39}, {-21, -31}, {-14, -25}, {-25, -20}, {-14, -34}, {-19, -28}, {-34, -27}, - {-23, -16}, {-23, -24}, {-21, -45}, {-10, -38}, {-17, -36}, {-14, -43}, {-11, -24}, {-27, -25}, - {-17, -21}, {-15, -25}, {-27, -39}, {-22, -25}, {-19, -37}, {-16, -29}, {-30, -44}, {-21, -15}, - {-18, -33}, {-16, -2}, {-2, -3}, {-17, -19}, {-23, -16}, {-18, -29}, {-31, -24}, {-13, -23}, - {-8, -8}, {-14, -9}, {-6, -4}, {-11, 13}, {-16, -17}, {-13, -13}, {-15, -31}, {-17, -16}, - {-2, 10}, {10, -1}, {-1, -2}, {-12, -12}, {-3, -14}, {-26, -9}, {3, -25}, {-2, 20}, + {79, 42}, {-6, -33}, {-30, -18}, {-33, -29}, {-55, 4}, {-23, -11}, {-4, 17}, {-36, -19}, + {-97, 4}, {-34, -22}, {-27, -21}, {-6, -18}, {1, -33}, {-11, -11}, {25, -9}, {-16, -23}, + {-50, -13}, {3, -18}, {-20, -23}, {-6, -21}, {-11, -24}, {-14, -34}, {-29, -30}, {-14, -5}, + {-31, -16}, {-18, -27}, {2, -19}, {-14, -26}, {-20, -27}, {-19, -25}, {-16, -28}, {-14, -30}, + {-22, -5}, {-10, -9}, {12, -12}, {14, -31}, {12, -22}, {-16, -12}, {-16, -22}, {14, -33}, + {-7, 1}, {-9, 23}, {18, -8}, {25, -11}, {26, 8}, {0, 3}, {15, 9}, {12, -2}, + {5, 11}, {11, 8}, {19, 11}, {-5, -2}, {2, 10}, {0, -1}, {12, 5}, {55, -15}, + {81, 4}, {-4, 8}, {16, 10}, {24, 22}, {20, -5}, {-1, 3}, {-35, 24}, {17, -3}, }, }; @@ -2749,68 +2753,68 @@ constexpr Weight king_relative_opp_pawn_psqt[8][48] = { { - {33, 84}, {25, 91}, {-11, 54}, {-15, -4}, {3, -60}, {5, -79}, {16, -95}, {7, -61}, - {-19, 49}, {-42, 40}, {-43, 37}, {-4, -7}, {6, -44}, {11, -67}, {19, -54}, {9, -44}, - {-7, 27}, {3, 16}, {-14, 22}, {-6, 5}, {-3, -3}, {3, -23}, {1, -20}, {2, -23}, - {4, 8}, {2, 4}, {-4, 4}, {-4, 2}, {-3, 3}, {-3, -2}, {-4, -11}, {-4, -9}, - {6, 2}, {6, -2}, {-2, -3}, {-2, -4}, {-5, 7}, {-4, 1}, {-11, -3}, {-5, -3}, - {2, 6}, {0, 1}, {-1, -6}, {-4, -4}, {-8, -1}, {-7, 2}, {-12, 6}, {-6, 1}, + {-5, 88}, {32, 81}, {-24, 35}, {-24, -45}, {-12, -105}, {-22, -146}, {-38, -136}, {-57, -100}, + {-22, 46}, {-56, 36}, {-36, 24}, {-16, -14}, {-4, -51}, {12, -90}, {21, -92}, {22, -87}, + {-10, 21}, {1, 5}, {-28, 20}, {-21, 9}, {-13, -2}, {1, -39}, {1, -36}, {5, -42}, + {10, 12}, {-3, 9}, {-3, 6}, {-10, 6}, {-6, 7}, {-1, -1}, {1, -14}, {0, -3}, + {13, 3}, {6, 3}, {5, -3}, {-1, 1}, {-1, 9}, {7, 0}, {-4, -5}, {3, -1}, + {7, 16}, {2, -5}, {-1, -13}, {0, -13}, {0, -13}, {-1, -9}, {-2, -6}, {5, 2}, }, { - {2, 22}, {3, 50}, {19, 81}, {-17, 82}, {-14, 38}, {15, -4}, {15, -69}, {39, -102}, - {-23, 39}, {-38, 51}, {-42, 41}, {-24, 34}, {-25, 33}, {-5, -5}, {-7, -13}, {10, -39}, - {-10, 14}, {-10, 10}, {-7, 9}, {4, -5}, {-4, 0}, {2, -8}, {-5, -3}, {-2, -13}, - {-5, 8}, {-3, 1}, {2, 4}, {4, -3}, {1, -4}, {2, -1}, {-1, -5}, {0, -8}, - {-1, 5}, {-3, 5}, {6, 0}, {9, -2}, {1, 4}, {0, 2}, {-6, 5}, {-1, 0}, - {-1, -3}, {-1, 2}, {7, -2}, {9, -4}, {-2, 2}, {-2, 5}, {-3, 2}, {-1, -3}, + {-28, -26}, {-11, 17}, {8, 38}, {-16, 54}, {-26, 12}, {-17, -53}, {-33, -112}, {-37, -139}, + {-18, 18}, {-33, 25}, {-47, 37}, {-43, 40}, {-26, 24}, {0, -22}, {2, -48}, {18, -71}, + {-10, 4}, {-11, 1}, {-21, 4}, {-11, 1}, {-20, 10}, {1, -23}, {-1, -18}, {2, -28}, + {3, 10}, {-6, 2}, {-2, 7}, {-1, -3}, {-4, 1}, {1, 4}, {2, -8}, {8, -1}, + {10, 2}, {-3, 8}, {10, 2}, {7, 4}, {1, 7}, {9, 2}, {1, 1}, {10, 2}, + {9, 1}, {-2, -2}, {2, -3}, {11, -13}, {3, -10}, {0, -2}, {2, -4}, {11, 1}, }, { - {15, 114}, {0, 90}, {-21, 82}, {-20, 1}, {-39, -17}, {-39, -26}, {-36, -24}, {-28, -14}, - {-28, 102}, {-24, 91}, {-20, 67}, {-22, 23}, {-12, -19}, {-4, -45}, {-13, -30}, {-15, -21}, - {13, 27}, {-5, 29}, {-7, 30}, {4, 13}, {15, -14}, {24, -24}, {24, -29}, {13, -20}, - {-2, 0}, {-20, -3}, {5, 0}, {2, -1}, {9, -1}, {9, -6}, {15, -11}, {8, -9}, - {-15, -1}, {-1, -7}, {-17, 4}, {1, -2}, {6, 6}, {4, 7}, {3, 4}, {-2, 8}, - {-17, -1}, {-4, -5}, {-2, -7}, {6, -2}, {-4, 7}, {-5, 14}, {1, 8}, {3, 3}, + {7, 65}, {11, 46}, {-3, 26}, {-36, -52}, {-57, -76}, {-76, -95}, {-86, -84}, {-81, -66}, + {-7, 72}, {9, 69}, {-10, 61}, {-13, 11}, {-14, -39}, {-2, -71}, {-17, -64}, {-2, -58}, + {19, 16}, {-8, 19}, {-33, 31}, {-9, 22}, {3, -9}, {18, -37}, {20, -37}, {19, -43}, + {9, 5}, {-28, 4}, {-3, 14}, {-1, 6}, {6, 0}, {8, 0}, {26, -15}, {12, -8}, + {-6, -2}, {3, -2}, {-9, 5}, {2, 4}, {14, 14}, {9, 5}, {10, 5}, {8, 7}, + {-2, 2}, {-1, -6}, {-11, -6}, {-9, -6}, {0, -3}, {-13, 17}, {4, 7}, {11, 7}, }, { - {-20, 37}, {-16, 62}, {-5, 91}, {-11, 84}, {-12, 49}, {-37, 27}, {-38, -4}, {-45, 0}, - {-42, 52}, {-57, 78}, {-35, 54}, {-9, 48}, {-17, 39}, {-32, 14}, {-24, 5}, {-19, -11}, - {-20, 21}, {-3, 13}, {10, 7}, {17, -6}, {17, -2}, {6, 3}, {-1, 0}, {11, -15}, - {2, -3}, {-11, -2}, {-5, -12}, {3, -21}, {-3, -8}, {8, -6}, {3, -5}, {9, -11}, - {0, -5}, {-1, -5}, {-4, -5}, {7, -10}, {-6, 0}, {5, -1}, {2, 1}, {2, 1}, - {-11, -4}, {1, -3}, {4, -5}, {-1, -3}, {-13, 7}, {-5, 9}, {2, 3}, {3, -5}, + {-45, -11}, {-25, 6}, {13, 22}, {-6, 39}, {-23, 17}, {-27, -40}, {-80, -57}, {-68, -62}, + {-42, 28}, {-37, 42}, {-19, 47}, {-11, 46}, {-16, 31}, {-35, -1}, {-10, -30}, {-27, -40}, + {-13, 6}, {-6, 2}, {-13, 5}, {-10, 3}, {-3, 4}, {-10, -10}, {-2, -13}, {16, -29}, + {-1, 4}, {-11, -1}, {-22, -1}, {-24, -9}, {-6, -1}, {-1, 2}, {5, -2}, {16, -7}, + {-1, 1}, {-4, -1}, {-6, 0}, {-2, -1}, {-3, 4}, {7, 2}, {5, 2}, {10, 1}, + {-1, 1}, {-3, -1}, {-5, -2}, {-4, -10}, {-9, -6}, {-11, 11}, {4, 0}, {6, 2}, }, { - {-6, 2}, {-40, -5}, {-29, -3}, {-27, -16}, {-39, -29}, {-24, -23}, {-36, -17}, {-36, 2}, - {-6, 36}, {-6, 29}, {-14, -1}, {-18, -44}, {-6, -52}, {-34, -48}, {-14, -31}, {-12, -26}, - {6, 9}, {-8, 27}, {10, 5}, {3, 4}, {14, -22}, {18, -28}, {19, -24}, {8, -22}, - {-16, 5}, {-5, 13}, {-4, 13}, {13, 17}, {17, 11}, {17, -1}, {26, -4}, {15, -3}, - {-23, -8}, {-11, -15}, {5, 5}, {9, 16}, {-8, 31}, {-10, 24}, {7, 17}, {-1, 16}, - {-12, -16}, {-15, -13}, {-22, -10}, {-10, -2}, {-7, 21}, {-7, 25}, {-4, 22}, {-27, 22}, + {-30, -39}, {-42, -64}, {-49, -61}, {-48, -74}, {-53, -82}, {-66, -84}, {-45, -83}, {-55, -53}, + {-8, 25}, {19, 16}, {-6, 2}, {-10, -43}, {-38, -56}, {-48, -72}, {-42, -57}, {-19, -56}, + {-1, 16}, {36, 24}, {5, 18}, {16, 11}, {25, -19}, {21, -44}, {9, -39}, {7, -33}, + {7, 17}, {2, 36}, {-12, 38}, {14, 28}, {29, 18}, {14, 13}, {26, -4}, {39, 0}, + {-9, 11}, {-1, 9}, {18, 23}, {-8, 36}, {27, 28}, {29, 17}, {11, 22}, {13, 20}, + {-10, 3}, {-29, -1}, {-26, 2}, {-1, 7}, {1, 15}, {-1, 27}, {2, 26}, {-5, 27}, }, { - {-10, 9}, {-28, 5}, {-17, 5}, {-26, -19}, {-16, 4}, {-23, 0}, {-27, -8}, {-27, -3}, - {-14, 15}, {10, 23}, {4, 11}, {3, -7}, {-1, -23}, {-14, -23}, {-17, -15}, {-5, -18}, - {-11, 18}, {-9, 26}, {23, 14}, {16, 5}, {13, -5}, {33, -10}, {10, -2}, {1, -9}, - {-12, 19}, {-9, 21}, {13, 9}, {15, 5}, {13, 7}, {14, 11}, {4, 13}, {5, 2}, - {1, 9}, {5, 2}, {-2, -5}, {0, -4}, {-10, 9}, {-6, 17}, {-9, 21}, {-4, 17}, - {-18, 0}, {-6, -13}, {-28, -8}, {-22, -9}, {-7, -2}, {-4, 6}, {-12, 18}, {-22, 15}, + {-38, -43}, {-42, -51}, {-55, -50}, {-35, -50}, {-55, -59}, {-47, -75}, {-65, -64}, {-68, -62}, + {0, -15}, {-16, 4}, {13, -6}, {-3, -8}, {7, -33}, {-9, -45}, {-40, -40}, {-19, -49}, + {-5, 7}, {18, 15}, {28, 12}, {7, 20}, {15, 7}, {14, -15}, {7, -15}, {5, -24}, + {10, 24}, {-13, 33}, {30, 26}, {21, 22}, {23, 18}, {15, 19}, {14, 9}, {30, 2}, + {-3, 24}, {15, 11}, {-2, 14}, {-28, 30}, {3, 23}, {9, 21}, {7, 18}, {-14, 27}, + {-23, 17}, {-24, 0}, {-45, 0}, {-33, -3}, {-8, -8}, {3, 4}, {20, 8}, {-16, 19}, }, { - {-11, -23}, {-31, -41}, {-20, -17}, {-40, -56}, {-30, -40}, {-33, -33}, {-26, -23}, {-18, -25}, - {-22, -6}, {-22, -10}, {-23, -37}, {-23, -60}, {-12, -65}, {-27, -69}, {-25, -46}, {3, -47}, - {-5, 15}, {-16, 23}, {-19, -7}, {-4, -18}, {9, -27}, {-1, -30}, {2, -26}, {-3, -22}, - {-13, 9}, {1, 17}, {12, 1}, {-4, -2}, {6, 17}, {4, 9}, {5, 5}, {18, 2}, - {-18, -5}, {1, 6}, {-2, 1}, {-8, 18}, {6, 38}, {-1, 15}, {-9, 22}, {-3, 19}, - {-12, 5}, {-1, 2}, {-14, 2}, {-12, 6}, {18, 25}, {-5, 29}, {-11, 30}, {-15, 17}, + {-27, -53}, {-73, -63}, {-41, -79}, {-41, -84}, {-62, -91}, {-60, -98}, {-63, -87}, {-48, -89}, + {0, -19}, {-33, -27}, {-21, -44}, {-41, -70}, {-46, -73}, {-51, -85}, {-23, -87}, {-24, -70}, + {-5, 7}, {3, 7}, {-9, 2}, {-5, -8}, {11, -36}, {-7, -43}, {11, -39}, {4, -38}, + {-8, 19}, {23, 36}, {12, 28}, {27, 22}, {22, 21}, {20, 7}, {27, -2}, {15, 13}, + {-5, 20}, {7, 33}, {43, 19}, {11, 26}, {24, 41}, {12, 31}, {6, 26}, {20, 21}, + {17, 35}, {20, 7}, {-11, 21}, {3, 10}, {14, 20}, {35, 18}, {13, 23}, {3, 23}, }, { - {-12, -14}, {-28, -10}, {-21, -18}, {-19, -42}, {-29, -39}, {-25, -21}, {-21, -10}, {-18, -19}, - {-29, -7}, {-11, -6}, {-15, -23}, {-15, -47}, {-24, -44}, {-14, -61}, {-8, -32}, {2, -29}, - {-2, 10}, {2, 12}, {2, 14}, {4, -11}, {-4, -15}, {26, -19}, {-1, -10}, {6, -12}, - {-11, 20}, {-10, 26}, {11, 23}, {6, 10}, {8, 3}, {7, 12}, {11, 15}, {-2, 10}, - {-1, 18}, {-9, 15}, {10, 19}, {-6, 13}, {-5, 16}, {-15, 29}, {-2, 25}, {-8, 20}, - {3, 21}, {-4, -1}, {-5, -1}, {-15, -3}, {-6, -4}, {-10, 16}, {-2, 30}, {-20, 26}, + {-51, -71}, {-41, -64}, {-29, -71}, {-53, -76}, {-47, -80}, {-71, -93}, {-52, -81}, {-32, -82}, + {-12, -40}, {-25, -34}, {-15, -49}, {-30, -52}, {-25, -72}, {-29, -80}, {-26, -69}, {2, -66}, + {-2, -7}, {-1, -1}, {15, 0}, {23, 0}, {22, -21}, {2, -32}, {34, -35}, {-7, -26}, + {8, 27}, {17, 34}, {23, 37}, {46, 16}, {22, 15}, {37, 15}, {33, 13}, {-17, 19}, + {21, 23}, {12, 33}, {32, 27}, {7, 31}, {31, 19}, {24, 33}, {28, 24}, {15, 24}, + {17, 31}, {16, 5}, {2, 5}, {-13, 4}, {-9, 12}, {16, 19}, {19, 21}, {8, 24}, }, }; @@ -3836,8 +3840,10 @@ inline double sigmoid(double eval) struct TuneVariable { std::int16_t* p; - double improvement; - std::uint16_t index; + double gradient; + double oscillation; + double zeros; + std::int16_t value; }; struct TuneFeature @@ -3858,36 +3864,39 @@ class Tuner { public: void tune(); - void parse_positions(); - double evaluation_error(std::size_t offset, std::size_t size); - int evaluate_features(const TunePosition& tp) const; - bool find_best_value(TuneVariable& variable, double& best_error, int start_delta, std::size_t offset, std::size_t size); + void parse_positions(std::vector& positions, std::size_t size); + std::pair evaluate_features(const TunePosition& tp) const; + double find_gradients(std::vector& positions, std::size_t offset, std::size_t size); + double evaluation_error(const std::vector& positions, std::size_t offset, std::size_t size) const; static void print_error(double error); void add_variable(Weight& v); template void add_variables(Weight (&arr)[N]); template void add_variables(Weight (&arr)[N][M]); + void freeze_variables(); template void print_variables(const char* name, Weight (&arr)[N]); template void print_variables(const char* name, Weight (&arr)[N][M]); - std::vector tuning_positions; std::vector variables; - std::vector values; + std::unordered_map value_indexes; }; -void Tuner::parse_positions() +void Tuner::freeze_variables() { - std::unordered_map value_indexes; - for (auto& v : variables) - value_indexes.insert({v.p, v.index}); + for (std::size_t i = 0; i < variables.size(); i++) + value_indexes.insert({variables[i].p, i}); +} +void Tuner::parse_positions(std::vector& positions, std::size_t size) +{ auto start = Clock::now(); int pos_count = 0; std::string line; while (getline(std::cin, line)) { ++pos_count; + std::istringstream parser{line}; position.parse(parser); int score, result; @@ -3928,87 +3937,112 @@ void Tuner::parse_positions() for (Color c : {WHITE, BLACK}) position.piece_square_values[c].features.clear(); double expected = (1. - lambda) * result * 0.5 + lambda * sigmoid(score); - tuning_positions.push_back({position, std::move(tune_features), base_score, expected}); + positions.push_back({position, std::move(tune_features), base_score, expected}); - if (tuning_positions.size() % 500000 == 0) + if (positions.size() % 500000 == 0) { double elapsed = std::chrono::duration_cast >(Clock::now() - start).count(); - std::cout << tuning_positions.size() << " elapsed: " << elapsed << " positions per sec: " << (tuning_positions.size() / elapsed) << std::endl; + std::cout << positions.size() << " elapsed: " << elapsed << " positions per sec: " << (positions.size() / elapsed) << std::endl; } + + if (positions.size() >= size) + break; } - std::random_shuffle(tuning_positions.begin(), tuning_positions.end()); + std::cout << "Read " << pos_count << " positions, using " << positions.size() << ", discarded " << (pos_count - positions.size()) << std::endl; +} + +void Tuner::print_error(double error) +{ + std::cout << std::fixed << std::setprecision(4) << (100000. * error) << std::endl; +} + +void add(Weight& w, int i, std::int16_t v) +{ + (i == 0 ? w.mid : w.end) += v; +} - std::cout << "Read " << pos_count << " positions, using " << tuning_positions.size() << ", discarded " << (pos_count - tuning_positions.size()) << std::endl; +double error_squared(const TunePosition& tp, Weight r) +{ + int v = evaluate_phase(tp.pos, r); + double err = tp.expected - sigmoid(v); + return err * err; } -int Tuner::evaluate_features(const TunePosition& tp) const +std::pair Tuner::evaluate_features(const TunePosition& tp) const { Weight r = tp.base_score; for (auto f : tp.features) { - r.mid += values[f.index] * f.value; - r.end += values[f.index + 1] * f.value; + for (int j = 0; j < 2; j++) + add(r, j, variables[f.index + j].value * f.value); } - - return evaluate_phase(tp.pos, r); + double err = error_squared(tp, r); + return {err, r}; } -double Tuner::evaluation_error(std::size_t offset, std::size_t size) +double Tuner::find_gradients(std::vector& positions, std::size_t offset, std::size_t size) { - assert(offset + size <= tuning_positions.size()); + double error_sum = 0.0; + std::vector error_delta_sums(variables.size(), 0.0); + + for (std::size_t i = 0; i < size; i++) + { + const TunePosition& tp = positions[offset + i]; + auto r = evaluate_features(tp); + error_sum += r.first; + for (auto f : tp.features) + { + for (int j = 0; j < 2; j++) + { + Weight fr = r.second; + int delta = variables[f.index + j].value >= 0 ? 1 : -1; + add(fr, j, delta * f.value); + + error_delta_sums[f.index + j] += error_squared(tp, fr) - r.first; + } + } + } + + double current_error = error_sum / size; + + for (std::size_t i = 0; i < variables.size(); i++) + { + TuneVariable& variable = variables[i]; + int delta = variables[i].value >= 0 ? 1 : -1; + double gradient = -delta * error_delta_sums[i] / size; + bool oscillation = gradient * variable.gradient < 0; + variable.gradient = gradient; + variable.oscillation = 0.1 * oscillation + 0.9 * variable.oscillation; + } + + return current_error; +} + +double Tuner::evaluation_error(const std::vector& positions, std::size_t offset, std::size_t size) const +{ double error_sum = std::transform_reduce( std::execution::par_unseq, - tuning_positions.begin() + offset, tuning_positions.begin() + offset + size, + positions.begin() + offset, positions.begin() + offset + size, 0., std::plus{}, [this](const TunePosition& tp) { - int v = evaluate_features(tp); - double err = tp.expected - sigmoid(v); - return err * err; + auto r = evaluate_features(tp); + return r.first; } ); return error_sum / size; } -void Tuner::print_error(double error) -{ - std::cout << std::fixed << std::setprecision(4) << (100000. * error) << std::endl; -} - -bool Tuner::find_best_value(TuneVariable& variable, double& best_error, int start_delta, std::size_t offset, std::size_t size) -{ - double start_error = best_error; - for (int delta = start_delta; delta > 0; delta /= 2) - { - for (int sd : {-delta, delta}) - { - int prev_value = values[variable.index]; - values[variable.index] += sd; - double error = evaluation_error(offset, size); - if (error >= best_error) - values[variable.index] = prev_value; - else - { - best_error = error; - break; - } - } - } - variable.improvement = start_error - best_error; - print_error(best_error); - return best_error < start_error; -} - void Tuner::add_variable(Weight& v) { for (auto* p : {&v.mid, &v.end}) { - variables.push_back({p, 0., static_cast(values.size())}); - values.push_back(*p); + *p = 0; + variables.push_back({p, 0., 0., 0., *p}); } } @@ -4092,68 +4126,74 @@ void Tuner::tune() /* for (int i = 0; i < 5; i++) add_variable(material[i]); + */ add_variables(piece_square_table); add_variables(pawn_evals); add_variables(mobility_evals); add_variables(king_evals); - */ add_variables(piece_evals); - /* add_variables(king_relative_pawn_psqt); add_variables(king_relative_knight_psqt); add_variables(king_relative_opp_pawn_psqt); - */ + freeze_variables(); - parse_positions(); + std::vector test_positions; + parse_positions(test_positions, 15000000); - double best_error = evaluation_error(0, tuning_positions.size()); - print_error(best_error); + std::vector tuning_positions; + std::mt19937 rng{}; std::size_t offset = 0; - std::size_t size = std::min(2500000U, tuning_positions.size()); + constexpr int rounds = 800; + constexpr double learning_rate = 500000.; - for (int k = 0; k < 4; k++) + double best_error = std::numeric_limits::max(); + + for (int k = 0; k < rounds; k++) { - std::cout << "===== " << k << " =====" << std::endl; - bool progress = false; - best_error = evaluation_error(offset, size); - print_error(best_error); - for (auto& p : variables) + if (k % 600 == 0) { - if (find_best_value(p, best_error, 1, offset, size)) - progress = true; + tuning_positions.clear(); + parse_positions(tuning_positions, 30000000); } - if (!progress) - break; - best_error = evaluation_error(0, tuning_positions.size()); - print_error(best_error); - for (int n = 0; n < 4; n++) + std::size_t size = std::min(500000U, tuning_positions.size()); + + std::cout << "===== " << k << " =====" << std::endl; + double error = find_gradients(tuning_positions, offset, size); + print_error(error); + + double limit = 50. * (rounds - k) / rounds + 1; + + for (auto& p : variables) { - std::cout << "===== " << k << ":" << n << " =====" << std::endl; + double scale = (1.0 - p.oscillation) / (1.0 - p.zeros); + std::int16_t delta = static_cast(std::clamp(learning_rate * p.gradient * scale * scale * std::exp(static_cast(rounds - k) / rounds), -limit, limit)); + p.value += delta; - std::sort( - variables.begin(), variables.end(), - [](const TuneVariable& lhs, const TuneVariable& rhs) { return lhs.improvement > rhs.improvement; } - ); + p.zeros = 0.1 * (delta == 0) + 0.9 * p.zeros; + } - double cutoff = variables.front().improvement * std::pow(2., -0.35 * n - 1.); - for (auto& v : variables) + if (k % 25 == 0 || k >= rounds - 100) + { + double error = evaluation_error(test_positions, 0, test_positions.size()); + print_error(error); + if (error < best_error) { - if (v.improvement <= cutoff) - break; - find_best_value(v, best_error, 29 / (2 * n + k + 2), 0, tuning_positions.size()); + std::cout << "Improved" << std::endl; + best_error = error; + for (auto& v : variables) + *v.p = v.value; } } offset += size; if (size + offset > tuning_positions.size()) + { offset = 0; + std::shuffle(tuning_positions.begin(), tuning_positions.end(), rng); + } } - for (auto& v : variables) - *v.p = values[v.index]; - - print_error(best_error); print_variables("material", material); print_variables("piece_square_table", piece_square_table); print_variables("pawn_evals", pawn_evals);