(cherry picked from commit ed739aec551cb6fad7a462cbd24e8bdea4b99b28)
(cherry picked from commit 8a51c9c771472ebe7ccf21ad986d03c4e4b354e4)
(cherry picked from commit 4f81468695f19586aef9a3bbf4ed93dd13d697a3)