(cherry picked from commit e14ca780e3b7fe9abb3b747db6f5ed30a075d75b)
(cherry picked from commit 47c772518dfeee51c3f5e3ef7badca5fa4d58407)
(cherry picked from commit 180dc7081479cf6d5e01fe2d4e9d08ea3fc5c4b3)