public static async Task LoadAndInitMinerPlugins()
        {
            // load dll's and create plugin containers
            var loadedPlugins = MinerPluginHost.LoadPlugins(Paths.MinerPluginsPath());
            foreach (var pluginUUID in loadedPlugins) PluginContainer.Create(MinerPluginHost.MinerPlugin[pluginUUID]);
            // init all containers
            foreach (var plugin in PluginContainer.PluginContainers)
            {
                if (!plugin.IsInitialized)
                {
                    plugin.InitPluginContainer();
                }

                if (plugin.Enabled)
                {
                    plugin.AddAlgorithmsToDevices();
                }
                else if (!plugin.IsCompatible)
                {
                    RemovePlugin(plugin.PluginUUID, false);
                }
                else
                {
                    plugin.RemoveAlgorithmsFromDevices();
                }
            }
            // cross reference local and online list
            var success = await GetOnlineMinerPlugins();
            if (success) CrossReferenceInstalledWithOnline();
            EthlargementIntegratedPlugin.Instance.ServiceEnabled = MiscSettings.Instance.UseEthlargement && Helpers.IsElevated;
            Logger.Info("MinerPluginsManager", "Finished initialization of miners.");
        }
        public static void LoadMinerPlugins()
        {
            // TODO only integrated
            InitIntegratedPlugins();
            if (IntegratedPluginsOnly)
            {
                return;
            }
            var loadedPlugins = MinerPluginHost.LoadPlugins(Paths.MinerPluginsPath());

            foreach (var pluginUUID in loadedPlugins)
            {
                var externalPlugin = MinerPluginHost.MinerPlugin[pluginUUID];
                var plugin         = PluginContainer.Create(externalPlugin);
                if (!plugin.IsInitialized)
                {
                    plugin.InitPluginContainer();
                }
                if (plugin.Enabled)
                {
                    plugin.AddAlgorithmsToDevices();
                }
                else
                {
                    plugin.RemoveAlgorithmsFromDevices();
                }
            }
            // cross reference local and online list
            CrossReferenceInstalledWithOnline();
        }
        static MinerPluginsManager()
        {
            // This is just a list of miners that are intergated in the nhm client. usefull when debuging
            _integratedPlugins = new List<IMinerPlugin>
            {
                // testing 
#if INTEGRATE_BrokenMiner_PLUGIN
                new BrokenMiner.BrokenMinerPlugin(),
#endif
#if INTEGRATE_ExamplePlugin_PLUGIN
                new Example.ExamplePlugin(),
#endif

// open source
#if INTEGRATE_CCMinerTpruvot_PLUGIN
                new CCMinerTpruvot.CCMinerTpruvotPlugin(),
#endif
#if INTEGRATE_XmrStak_PLUGIN
                new XmrStak.XmrStakPlugin(),
#endif
#if INTEGRATE_XmrStakRx_PLUGIN
                new XmrStakRx.XmrStakRxPlugin(),
#endif
#if INTEGRATE_CpuMinerOpt_PLUGIN
                new CpuMinerOpt.CPUMinerPlugin(),
#endif
//#if INTEGRATE_Ethminer_PLUGIN
//                new Ethminer.EthminerPlugin(), // abstract UUID
//#endif

// 3rd party
#if INTEGRATE_GMiner_PLUGIN
                new GMinerPlugin.GMinerPlugin(),
#endif
#if INTEGRATE_NBMiner_PLUGIN
                new NBMiner.NBMinerPlugin(),
#endif
#if INTEGRATE_Phoenix_PLUGIN
                new Phoenix.PhoenixPlugin(),
#endif
#if INTEGRATE_TeamRedMiner_PLUGIN
                new TeamRedMiner.TeamRedMinerPlugin(),
#endif
#if INTEGRATE_TRex_PLUGIN
                new TRex.TRexPlugin(),
#endif
#if INTEGRATE_TTMiner_PLUGIN
                new TTMiner.TTMinerPlugin(),
#endif
#if INTEGRATE_ClaymoreDual_PLUGIN
                new ClaymoreDual14.ClaymoreDual14Plugin(),
#endif
#if INTEGRATE_NanoMiner_PLUGIN
                new NanoMiner.NanoMinerPlugin(),
#endif
#if INTEGRATE_WildRig_PLUGIN
                new WildRig.WildRigPlugin(),
#endif
#if INTEGRATE_CryptoDredge_PLUGIN
                new CryptoDredge.CryptoDredgePlugin(),
#endif
#if INTEGRATE_ZEnemy_PLUGIN
                new ZEnemy.ZEnemyPlugin(),
#endif
#if INTEGRATE_LolMiner_PLUGIN
                new LolMiner.LolMinerPlugin(),
#endif
//#if INTEGRATE_SRBMiner_PLUGIN
//                new SRBMiner.SRBMinerPlugin(),
//#endif
#if INTEGRATE_XMRig_PLUGIN
                new XMRig.XMRigPlugin(),
#endif
#if INTEGRATE_MiniZ_PLUGIN
                new MiniZ.MiniZPlugin(),
#endif

                // leave these 2 for now

                // service plugin
                EthlargementIntegratedPlugin.Instance,

                // plugin dependencies
                VC_REDIST_x64_2015_2019_DEPENDENCY_PLUGIN.Instance
            };
            var filteredIntegratedPlugins = _integratedPlugins.Where(p => SupportedPluginsFilter.IsSupported(p.PluginUUID)).ToList();
            foreach (var integratedPlugin in filteredIntegratedPlugins)
            {
                PluginContainer.Create(integratedPlugin);
            }
        }
        static MinerPluginsManager()
        {
            var integratedPlugins = new List <IntegratedPlugin>
            {
                // testing
#if INTEGRATE_BrokenMiner_PLUGIN
                new BrokenPluginIntegratedPlugin(),
#endif
#if INTEGRATE_ExamplePlugin_PLUGIN
                new ExamplePluginIntegratedPlugin(),
#endif

// open source
#if INTEGRATE_CCMinerMTP_PLUGIN
                new CCMinerMTPIntegratedPlugin(),
#endif
#if INTEGRATE_CCMinerTpruvot_PLUGIN
                new CCMinerTpruvotIntegratedPlugin(),
#endif
#if INTEGRATE_SGminerAvemore_PLUGIN
                new SGminerAvemoreIntegratedPlugin(),
#endif
#if INTEGRATE_SGminerGM_PLUGIN
                new SGminerGMIntegratedPlugin(),
#endif
#if INTEGRATE_XmrStak_PLUGIN
                new XmrStakIntegratedPlugin(),
#endif
#if INTEGRATE_CpuMinerOpt_PLUGIN
                new CPUMinerOptIntegratedPlugin(),
#endif
#if INTEGRATE_Ethminer_PLUGIN
                new EthminerIntegratedPlugin(),
#endif

// 3rd party
#if INTEGRATE_EWBF_PLUGIN
                new EWBFIntegratedPlugin(),
#endif
#if INTEGRATE_GMiner_PLUGIN
                new GMinerIntegratedPlugin(),
#endif
#if INTEGRATE_NBMiner_PLUGIN
                new NBMinerIntegratedPlugin(),
#endif
#if INTEGRATE_Phoenix_PLUGIN
                new PhoenixIntegratedPlugin(),
#endif
#if INTEGRATE_TeamRedMiner_PLUGIN
                new TeamRedMinerIntegratedPlugin(),
#endif
#if INTEGRATE_TRex_PLUGIN
                new TRexIntegratedPlugin(),
#endif
#if INTEGRATE_TTMiner_PLUGIN
                new TTMinerIntegratedPlugin(),
#endif
#if INTEGRATE_ClaymoreDual_PLUGIN
                new ClaymoreDual14IntegratedPlugin(),
#endif
#if INTEGRATE_NanoMiner_PLUGIN
                new NanoMinerIntegratedPlugin(),
#endif
#if INTEGRATE_WildRig_PLUGIN
                new WildRigIntegratedPlugin(),
#endif
#if INTEGRATE_CryptoDredge_PLUGIN
                new CryptoDredgeIntegratedPlugin(),
#endif
#if INTEGRATE_BMiner_PLUGIN
                new BMinerIntegratedPlugin(),
#endif
#if INTEGRATE_ZEnemy_PLUGIN
                new ZEnemyIntegratedPlugin(),
#endif
#if INTEGRATE_LolMinerBeam_PLUGIN
                new LolMinerIntegratedPlugin(),
#endif
#if INTEGRATE_SRBMiner_PLUGIN
                new SRBMinerIntegratedPlugin(),
#endif
#if INTEGRATE_XMRig_PLUGIN
                new XMRigIntegratedPlugin(),
#endif
#if INTEGRATE_MiniZ_PLUGIN
                new MiniZIntegratedPlugin(),
#endif

                // service plugin
                EthlargementIntegratedPlugin.Instance,

                // plugin dependencies
                VC_REDIST_x64_2015_2019_DEPENDENCY_PLUGIN.Instance
            };
            var filteredIntegratedPlugins = integratedPlugins.Where(p => SupportedPluginsFilter.IsSupported(p.PluginUUID)).ToList();

            foreach (var integratedPlugin in filteredIntegratedPlugins)
            {
                PluginContainer.Create(integratedPlugin);
            }
        }
        static MinerPluginsManager()
        {
            // This is just a list of miners that are intergated in the nhm client. usefull when debuging
            _integratedPlugins = new List <IMinerPlugin>
            {
                // __DEV__*
#if INTEGRATE_BrokenMiner_PLUGIN
                new BrokenMiner.BrokenMinerPlugin(),
#endif
#if INTEGRATE_ExamplePlugin_PLUGIN
                new Example.ExamplePlugin(),
#endif
#if INTEGRATE_FakePlugin_PLUGIN
                new FakePlugin.FakePlugin(),
#endif

// real miners
#if INTEGRATE_CCMinerTpruvot_PLUGIN
                new CCMinerTpruvot.CCMinerTpruvotPlugin(),
#endif
#if INTEGRATE_XmrStakRx_PLUGIN
                new XmrStakRx.XmrStakRxPlugin(),
#endif

#if INTEGRATE_GMiner_PLUGIN
                new GMinerPlugin.GMinerPlugin(),
#endif
#if INTEGRATE_NBMiner_PLUGIN
                new NBMiner.NBMinerPlugin(),
#endif
#if INTEGRATE_Phoenix_PLUGIN
                new Phoenix.PhoenixPlugin(),
#endif
#if INTEGRATE_TeamRedMiner_PLUGIN
                new TeamRedMiner.TeamRedMinerPlugin(),
#endif
#if INTEGRATE_TRex_PLUGIN
                new TRex.TRexPlugin(),
#endif
#if INTEGRATE_TTMiner_PLUGIN
                new TTMiner.TTMinerPlugin(),
#endif
#if INTEGRATE_ClaymoreDual_PLUGIN
                new ClaymoreDual14.ClaymoreDual14Plugin(),
#endif
#if INTEGRATE_NanoMiner_PLUGIN
                new NanoMiner.NanoMinerPlugin(),
#endif
#if INTEGRATE_WildRig_PLUGIN
                new WildRig.WildRigPlugin(),
#endif
#if INTEGRATE_CryptoDredge_PLUGIN
                new CryptoDredge.CryptoDredgePlugin(),
#endif
#if INTEGRATE_ZEnemy_PLUGIN
                new ZEnemy.ZEnemyPlugin(),
#endif
#if INTEGRATE_LolMiner_PLUGIN
                new LolMiner.LolMinerPlugin(),
#endif
#if INTEGRATE_SRBMiner_PLUGIN
                new SRBMiner.SRBMinerPlugin(),
#endif
#if INTEGRATE_XMRig_PLUGIN
                new XMRig.XMRigPlugin(),
#endif
#if INTEGRATE_MiniZ_PLUGIN
                new MiniZ.MiniZPlugin(),
#endif

#if INTEGRATE_ALL_PLUGINS
                new CCMinerTpruvot.CCMinerTpruvotPlugin(),
                new XmrStakRx.XmrStakRxPlugin(),
                new GMinerPlugin.GMinerPlugin(),
                new NBMiner.NBMinerPlugin(),
                new Phoenix.PhoenixPlugin(),
                new TeamRedMiner.TeamRedMinerPlugin(),
                new TRex.TRexPlugin(),
                new TTMiner.TTMinerPlugin(),
                new ClaymoreDual14.ClaymoreDual14Plugin(),
                new NanoMiner.NanoMinerPlugin(),
                new WildRig.WildRigPlugin(),
                new CryptoDredge.CryptoDredgePlugin(),
                new ZEnemy.ZEnemyPlugin(),
                new LolMiner.LolMinerPlugin(),
                new SRBMiner.SRBMinerPlugin(),
                new MiniZ.MiniZPlugin(),
#endif


                // service plugin
                EthlargementIntegratedPlugin.Instance,

                // plugin dependencies
                VC_REDIST_x64_2015_2019_DEPENDENCY_PLUGIN.Instance
            };
            var filteredIntegratedPlugins = _integratedPlugins.Where(p => BlacklistedPlugins.Instance.IsSupported(p.PluginUUID)).ToList();
            foreach (var integratedPlugin in filteredIntegratedPlugins)
            {
                PluginContainer.Create(integratedPlugin);
            }
        }