// Token: 0x06000073 RID: 115 RVA: 0x00004148 File Offset: 0x00002348
        public static CallerRequestedCapabilities GetInstance(HttpContext requestHttpContext)
        {
            if (requestHttpContext == null)
            {
                throw new ArgumentNullException("requestHttpContext", "You must call this GetInstance method only in the cases where an HttpContext is available");
            }
            Version requestingClientVersion = null;
            Version windowsVersion          = null;
            string  text = Common.SafeGetUserAgent(requestHttpContext.Request);
            bool    canFollowRedirect = !AutodiscoverProxy.CanRedirectOutlookClient(text);
            bool    canHandleExHttpNodesInResponse = UserAgentHelper.IsWindowsClient(text);
            bool    flag = UserAgentHelper.ValidateClientSoftwareVersions(text, delegate(int major, int minor)
            {
                windowsVersion = new Version(major, minor);
                return(true);
            }, delegate(int major, int minor, int buildMajor)
            {
                requestingClientVersion = new Version(major, minor, buildMajor, 0);
                return(true);
            }) && windowsVersion != null && requestingClientVersion != null;
            bool isCallerCrossForestAvailabilityService = !string.IsNullOrWhiteSpace(text) && text.StartsWith("ASAutoDiscover/CrossForest", StringComparison.OrdinalIgnoreCase) && requestHttpContext.User != null && requestHttpContext.User.Identity is ExternalIdentity;
            bool flag2 = flag && UserAgentHelper.IsClientWin7OrGreater(text);
            bool flag3 = false;
            bool flag4 = false;

            if (flag2 && CallerRequestedCapabilities.CheckIfClientSupportsNegotiate(requestingClientVersion, out flag3))
            {
                flag4 = true;
            }
            OptInCapabilities optInCapabilities;

            if (CallerRequestedCapabilities.TryParseOptInCapabillitiesHeader(requestHttpContext, out optInCapabilities))
            {
                if ((optInCapabilities & OptInCapabilities.Negotiate) != OptInCapabilities.None)
                {
                    flag4 = true;
                }
                if ((optInCapabilities & OptInCapabilities.ExHttpInfo) != OptInCapabilities.None)
                {
                    canHandleExHttpNodesInResponse = true;
                }
            }
            return(new CallerRequestedCapabilities(canFollowRedirect, canHandleExHttpNodesInResponse, requestingClientVersion, isCallerCrossForestAvailabilityService, flag2, flag4, flag4 && flag3));
        }