(cherry picked from commit 8e0cf5c1e54afd114a41fd40f838614a68bbb4d0)
(cherry picked from commit 015a1640c1a1c66d6975788158eaeaa4c4200130)
(cherry picked from commit 27c9a0f32deee6e69b81348aae08ba114a5a0797)