partnerLogin = do
    let plUserName = "android"
        plPassword = "AC7IBG09A3DTSYM4R41UJWL07VLN8JI7"
        plDeviceModel = "android-generic"
        plVersion = "5"
        plIncludeUrls = True
        pl = PartnerLogin {..}

        target = endpointSecure
        postBody = J.encode $ pl

        opts = defaults & header "Content-type" .~ ["text/plain; charset=utf8"]
                        & header "User-Agent" .~ [userAgent]
                        & param "method" .~ ["auth.partnerLogin"]
    resp <- postWith opts target postBody

    let Just (Right resp') = fmap J.eitherDecode $ resp ^? responseBody :: Maybe (Either String (PandoraReply PartnerLoginReply))

    let readSyncTime = plrSyncTime $ prResult $ resp'
        decodedSyncTime = decSyncTime readSyncTime

    unixSyncTime <- fmap floor POSIX.getPOSIXTime

    return (read $ BSC.unpack decodedSyncTime
           , plrPartnerId $ prResult $ resp'
           , plrPartnerAuthToken $ prResult $ resp'
           , unixSyncTime
           )
partnerLogin = do
    let plUserName = "android"
        plPassword = "AC7IBG09A3DTSYM4R41UJWL07VLN8JI7"
        plDeviceModel = "android-generic"
        plVersion = "5"
        plIncludeUrls = True
        pl = PartnerLogin {..}

        target = endpointSecure
        postBody = J.encode $ pl

        opts = defaults & header "Content-type" .~ ["text/plain; charset=utf8"]
                        & header "User-Agent" .~ [userAgent]
                        & param "method" .~ ["auth.partnerLogin"]
    resp <- postWith opts target postBody

    let Just (Right resp') = fmap J.eitherDecode $ resp ^? responseBody :: Maybe (Either String (PandoraReply PartnerLoginReply))

    let readSyncTime = plrSyncTime $ prResult $ resp'
        decodedSyncTime = decSyncTime readSyncTime

    unixSyncTime <- fmap floor POSIX.getPOSIXTime

    return (read $ BSC.unpack decodedSyncTime
           , plrPartnerId $ prResult $ resp'
           , plrPartnerAuthToken $ prResult $ resp'
           , unixSyncTime
           )
partnerLogin = do
    let plUserName = "android"
        plPassword = "AC7IBG09A3DTSYM4R41UJWL07VLN8JI7"
        plDeviceModel = "android-generic"
        plVersion = "5"
        plIncludeUrls = True
        pl = PartnerLogin {..}

        target = endpointSecure
        postBody = J.encode $ pl

        opts = defaults & header "Content-type" .~ ["text/plain; charset=utf8"]
                        & header "User-Agent" .~ [userAgent]
                        & param "method" .~ ["auth.partnerLogin"]
    resp <- postWith opts target postBody

    let Just (Right resp') = fmap J.eitherDecode $ resp ^? responseBody :: Maybe (Either String (PandoraReply PartnerLoginReply))

    let readSyncTime = plrSyncTime $ prResult $ resp'
        decodedSyncTime = decSyncTime readSyncTime

    unixSyncTime <- fmap floor POSIX.getPOSIXTime

    return (read $ BSC.unpack decodedSyncTime
           , plrPartnerId $ prResult $ resp'
           , plrPartnerAuthToken $ prResult $ resp'
           , unixSyncTime
           )