(cherry picked from commit c296c9e53de81a1cb5b708f9fad1e170af462467)
(cherry picked from commit af2fb4bf5f287a406700ba3a3e083c3d5755d2c1)
(cherry picked from commit 4e69f15128b3d93958cc4082cff91c7230feb410)