340    {
  341        int num = 
input.IndexOf(
'.');
 
  342        if (num < 0)
  343        {
  344            if (throwOnFailure)
  345            {
  347            }
  348            return null;
  349        }
  350        int num2 = -1;
  351        int num3 = 
input.Slice(num + 1).IndexOf(
'.');
 
  352        if (num3 != -1)
  353        {
  354            num3 += num + 1;
  355            num2 = 
input.Slice(num3 + 1).IndexOf(
'.');
 
  356            if (num2 != -1)
  357            {
  358                num2 += num3 + 1;
  359                if (
input.Slice(num2 + 1).Contains(
'.'))
 
  360                {
  361                    if (throwOnFailure)
  362                    {
  364                    }
  365                    return null;
  366                }
  367            }
  368        }
  370        {
  371            return null;
  372        }
  373        int parsedComponent2;
  374        if (num3 != -1)
  375        {
  376            if (!
TryParseComponent(
input.Slice(num + 1, num3 - num - 1), 
"input", throwOnFailure, out parsedComponent2))
 
  377            {
  378                return null;
  379            }
  380            int parsedComponent3;
  381            if (num2 != -1)
  382            {
  384                {
  385                    return null;
  386                }
  387                return new Version(parsedComponent, parsedComponent2, parsedComponent3, parsedComponent4);
 
  388            }
  390            {
  391                return null;
  392            }
  393            return new Version(parsedComponent, parsedComponent2, parsedComponent3);
 
  394        }
  396        {
  397            return null;
  398        }
  399        return new Version(parsedComponent, parsedComponent2);
 
  400    }
static bool TryParseComponent(ReadOnlySpan< char > component, string componentName, bool throwOnFailure, out int parsedComponent)