(cherry picked from commit 494480239964fb677f16433b3172e22b5b4e5e87)
(cherry picked from commit a624b4523fb5da4929b299a35293833d1740ee03)
(cherry picked from commit 08e6294c803db4cedf5cdd38be383abff819283e)
(cherry picked from commit b6b5665158ca5c52ddd429c0feb85885aaa283d5)