public static LicenseManagerSingleton GetOrCreateSingleton(string keyPrefix, string[] candidateCacheFolders)
 {
     lock (SingletonLock)
     {
         return(_singleton ?? (_singleton = new LicenseManagerSingleton(
                                   ImazenPublicKeys.Production,
                                   new RealClock(),
                                   new PersistentGlobalStringCache(keyPrefix, candidateCacheFolders))));
     }
 }
 // Actually needs an issue receiver? (or should *it* track?) And an HttpClient and Cache
 public LicenseChain(LicenseManagerSingleton parent, string licenseId)
 {
     this.parent = parent;
     Id          = licenseId;
     LocalLicenseChange();
 }