upstream commit 0604154e006e88e9e7f82d8ee5fd076bda206613
upstream commit 91632c8ac97fa3daffe4ff8f1391735b5d6805e6