// Token: 0x06000030 RID: 48 RVA: 0x00002FD4 File Offset: 0x000011D4
 internal static Assembly AssemblyResolve(object sender, ResolveEventArgs args)
 {
     try
     {
         AssemblyName assemblyName = new AssemblyName(args.Name);
         if (!assemblyName.Name.EndsWith(".resources", StringComparison.OrdinalIgnoreCase))
         {
             return(null);
         }
         AssemblySatelliteResolver.IntRef intRef;
         bool flag = AssemblySatelliteResolver.EntryCount.GetOrAdd(assemblyName.FullName, (string _) => new AssemblySatelliteResolver.IntRef(0)).Increment() > 2 && !AssemblySatelliteResolver.ResolveCnt.TryGetValue(assemblyName.FullName, out intRef);
         if (flag)
         {
             AssemblySatelliteResolver.log.DebugFormat("Resolving satellite assembly \"{0}\"", assemblyName);
         }
         string[] array = assemblyName.Name.Split(new char[]
         {
             '.'
         });
         string          sourceName         = string.Join(".", array.Take(array.Length - 1));
         string          resolveFileName    = assemblyName.Name + ".dll";
         List <Assembly> list               = new List <Assembly>(AppDomain.CurrentDomain.GetAssemblies());
         Assembly        requestingAssembly = args.RequestingAssembly;
         if (requestingAssembly != null)
         {
             list.Remove(requestingAssembly);
             list.Insert(0, requestingAssembly);
         }
         foreach (Assembly assembly in list)
         {
             AssemblyName name = assembly.GetName();
             if (AssemblySatelliteResolver.SatelliteMatchesDefinition(assemblyName, name))
             {
                 bool flag2 = AssemblySatelliteResolver.ResolveCnt.GetOrAdd(assembly.FullName, (string _) => new AssemblySatelliteResolver.IntRef(0)).Increment() == 1;
                 if (flag || flag2)
                 {
                     AssemblySatelliteResolver.log.InfoFormat("Resolved \"{0}\" as \"{1}\" at \"{2}\"", assemblyName, name, AssemblySatelliteResolver.GetSymbolicLocation(assembly));
                 }
                 return(assembly);
             }
         }
         Assembly result;
         if (AssemblySatelliteResolver.ProbeViaLoadedAssemblies(list, assemblyName, resolveFileName, requestingAssembly, sourceName, flag, out result))
         {
             return(result);
         }
     }
     catch (Exception ex)
     {
         Trace.TraceError("AssemblyResove failed. {0}", new object[]
         {
             ex
         });
         AssemblySatelliteResolver.log.FatalFormat("AssemblyResove failed. {0}", ex);
         GC.KeepAlive(ex);
     }
     return(null);
 }
 internal static Assembly AssemblyResolve(object sender, ResolveEventArgs args)
 {
     try
     {
         AssemblyName assemblyName = new AssemblyName(args.Name);
         if (!assemblyName.Name.EndsWith(".resources", StringComparison.OrdinalIgnoreCase))
         {
             return((Assembly)null);
         }
         bool isLog = AssemblySatelliteResolver.EntryCount.GetOrAdd(assemblyName.FullName, (Func <string, AssemblySatelliteResolver.IntRef>)(_ => new AssemblySatelliteResolver.IntRef(0))).Increment() > 2 && !AssemblySatelliteResolver.ResolveCnt.TryGetValue(assemblyName.FullName, out AssemblySatelliteResolver.IntRef _);
         if (isLog)
         {
             AssemblySatelliteResolver.log.DebugFormat("Resolving satellite assembly \"{0}\"", (object)assemblyName);
         }
         string[]        strArray           = assemblyName.Name.Split('.');
         string          sourceName         = string.Join(".", ((IEnumerable <string>)strArray).Take <string>(strArray.Length - 1));
         string          resolveFileName    = assemblyName.Name + ".dll";
         List <Assembly> assemblyList       = new List <Assembly>((IEnumerable <Assembly>)AppDomain.CurrentDomain.GetAssemblies());
         Assembly        requestingAssembly = args.RequestingAssembly;
         if (requestingAssembly != (Assembly)null)
         {
             assemblyList.Remove(requestingAssembly);
             assemblyList.Insert(0, requestingAssembly);
         }
         foreach (Assembly assembly in assemblyList)
         {
             AssemblyName name = assembly.GetName();
             if (AssemblySatelliteResolver.SatelliteMatchesDefinition(assemblyName, name))
             {
                 bool flag = AssemblySatelliteResolver.ResolveCnt.GetOrAdd(assembly.FullName, (Func <string, AssemblySatelliteResolver.IntRef>)(_ => new AssemblySatelliteResolver.IntRef(0))).Increment() == 1;
                 if (isLog | flag)
                 {
                     AssemblySatelliteResolver.log.InfoFormat("Resolved \"{0}\" as \"{1}\" at \"{2}\"", (object)assemblyName, (object)name, (object)AssemblySatelliteResolver.GetSymbolicLocation(assembly));
                 }
                 return(assembly);
             }
         }
         Assembly resolvedAssembly;
         if (AssemblySatelliteResolver.ProbeViaLoadedAssemblies((ICollection <Assembly>)assemblyList, assemblyName, resolveFileName, requestingAssembly, sourceName, isLog, out resolvedAssembly))
         {
             return(resolvedAssembly);
         }
     }
     catch (Exception ex)
     {
         Trace.TraceError("AssemblyResove failed. {0}", (object)ex);
         AssemblySatelliteResolver.log.FatalFormat("AssemblyResove failed. {0}", (object)ex);
         GC.KeepAlive((object)ex);
     }
     return((Assembly)null);
 }