anchor.diff:  let safeGetFromUrl (auth:Auth option, url : string, contentType : string) =
       async { 
           try 
  +            let uri = Uri(url)
               use client = createWebClient(url,auth)
               
               if notNullOrEmpty contentType then
                   client.Headers.Add(HttpRequestHeader.Accept, contentType)
   
  -            let s = client.DownloadStringTaskAsync(Uri(url)) |> Async.AwaitTask
  +            let sw2 = System.Diagnostics.Stopwatch.StartNew()
  +            let s = client.DownloadStringTaskAsync(uri) |> Async.AwaitTask
               let! raw = s
  +            traceVerbose <| sprintf "  - download was %dms" sw2.ElapsedMilliseconds
               return Some raw
           with _ -> return None
       }
  
positive.code:         //ONLY after a 401
          //client.Credentials <- new NetworkCredential(auth.Username,auth.Password)
  
          //so use THIS instead to send credenatials RIGHT AWAY
          let credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(username + ":" + password))
          client.Headers.[HttpRequestHeader.Authorization] <- sprintf "Basic %s" credentials
      | Some(Token token) -> client.Headers.[HttpRequestHeader.Authorization] <- sprintf "token %s" token
  
negative.code:     let getProxy (scheme:string) =
          let envVarName = sprintf "%s_PROXY" (scheme.ToUpperInvariant())
          let envVarValue = getEnvValue envVarName
          if isNull envVarValue then 
              None 
          else
              match Uri.TryCreate(envVarValue, UriKind.Absolute) with
  