(cherry picked from commit 40f7543a6d5765c98d41c78736124b7b7f078aa2) (cherry picked from commit edd9b659caf77d14caf6df88bac3cedf025e1f25) (cherry picked from commit 31a6b45117c7af2b045cc19461e1c232ce805b02)
(cherry picked from commit 40f7543a6d5765c98d41c78736124b7b7f078aa2) (cherry picked from commit edd9b659caf77d14caf6df88bac3cedf025e1f25) (cherry picked from commit 31a6b45117c7af2b045cc19461e1c232ce805b02)