Refactored to use inheritance and separate logic where possible. Addressed comments. Change-Id: I9e62414cd83121575bdf99a3b47466a7585bedb6 Former-commit-id: 6e015b3f61c20635077d6e8271e9b763e5a32fe1
Former-commit-id: d85b989f77196d20eb2d2a21cf4daa13d50474ae
Former-commit-id: 6601ddb09c2928754c2c3859dac284998d73ff81