- Goal was to simplify main.go complexity
- Use common structures and interfaces for all vpn providers
- Moved files around
- Removed some alias models
This commit is contained in:
Quentin McGaw
2020-06-13 14:08:29 -04:00
committed by GitHub
parent 4f502abcf8
commit 7369808b84
47 changed files with 1530 additions and 1693 deletions

View File

@@ -2,7 +2,7 @@
*Lightweight swiss-knife-like VPN client to tunnel to Private Internet Access, Mullvad, Windscribe, Surfshark and Cyberghost VPN servers, using Go, OpenVPN, iptables, DNS over TLS, ShadowSocks and Tinyproxy*
**ANNOUNCEMENT**: *New wiki available [here](https://github.com/qdm12/private-internet-access-docker/wiki)*
**ANNOUNCEMENT**: *Rather big code refactoring so things may break but I'll fix anything super quickly*
<img height="250" src="https://raw.githubusercontent.com/qdm12/private-internet-access-docker/master/title.svg?sanitize=true">

View File

@@ -18,23 +18,19 @@ import (
"github.com/qdm12/private-internet-access-docker/internal/alpine"
"github.com/qdm12/private-internet-access-docker/internal/cli"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/cyberghost"
"github.com/qdm12/private-internet-access-docker/internal/dns"
"github.com/qdm12/private-internet-access-docker/internal/firewall"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/mullvad"
"github.com/qdm12/private-internet-access-docker/internal/openvpn"
"github.com/qdm12/private-internet-access-docker/internal/params"
"github.com/qdm12/private-internet-access-docker/internal/pia"
"github.com/qdm12/private-internet-access-docker/internal/provider"
"github.com/qdm12/private-internet-access-docker/internal/publicip"
"github.com/qdm12/private-internet-access-docker/internal/routing"
"github.com/qdm12/private-internet-access-docker/internal/server"
"github.com/qdm12/private-internet-access-docker/internal/settings"
"github.com/qdm12/private-internet-access-docker/internal/shadowsocks"
"github.com/qdm12/private-internet-access-docker/internal/splash"
"github.com/qdm12/private-internet-access-docker/internal/surfshark"
"github.com/qdm12/private-internet-access-docker/internal/tinyproxy"
"github.com/qdm12/private-internet-access-docker/internal/windscribe"
)
func main() {
@@ -77,11 +73,6 @@ func _main(background context.Context, args []string) int {
dnsConf := dns.NewConfigurator(logger, client, fileManager)
firewallConf := firewall.NewConfigurator(logger)
routingConf := routing.NewRouting(logger, fileManager)
piaConf := pia.NewConfigurator(client, fileManager, firewallConf)
mullvadConf := mullvad.NewConfigurator(fileManager, logger)
windscribeConf := windscribe.NewConfigurator(fileManager)
surfsharkConf := surfshark.NewConfigurator(fileManager)
cyberghostConf := cyberghost.NewConfigurator(fileManager)
tinyProxyConf := tinyproxy.NewConfigurator(fileManager, logger)
shadowsocksConf := shadowsocks.NewConfigurator(fileManager, logger)
streamMerger := command.NewStreamMerger()
@@ -98,6 +89,8 @@ func _main(background context.Context, args []string) int {
fatalOnError(err)
logger.Info(allSettings.String())
providerConf := provider.New(allSettings.VPNSP, logger, client, fileManager, firewallConf)
if !allSettings.Firewall.Enabled {
firewallConf.Disable()
}
@@ -115,25 +108,11 @@ func _main(background context.Context, args []string) int {
fatalOnError(err)
}
var openVPNUser, openVPNPassword string
switch allSettings.VPNSP {
case constants.PrivateInternetAccess:
openVPNUser = allSettings.PIA.User
openVPNPassword = allSettings.PIA.Password
case constants.Mullvad:
openVPNUser = allSettings.Mullvad.User
openVPNPassword = "m"
case constants.Windscribe:
openVPNUser = allSettings.Windscribe.User
openVPNPassword = allSettings.Windscribe.Password
case constants.Surfshark:
openVPNUser = allSettings.Surfshark.User
openVPNPassword = allSettings.Surfshark.Password
case constants.Cyberghost:
openVPNUser = allSettings.Cyberghost.User
openVPNPassword = allSettings.Cyberghost.Password
}
err = ovpnConf.WriteAuthFile(openVPNUser, openVPNPassword, allSettings.System.UID, allSettings.System.GID)
err = ovpnConf.WriteAuthFile(
allSettings.OpenVPN.User,
allSettings.OpenVPN.Password,
allSettings.System.UID,
allSettings.System.GID)
fatalOnError(err)
defaultInterface, defaultGateway, defaultSubnet, err := routingConf.DefaultRoute()
@@ -156,96 +135,18 @@ func _main(background context.Context, args []string) int {
waiter := command.NewWaiter()
var connections []models.OpenVPNConnection
switch allSettings.VPNSP {
case constants.PrivateInternetAccess:
connections, err = piaConf.GetOpenVPNConnections(
allSettings.PIA.Region,
allSettings.OpenVPN.NetworkProtocol,
allSettings.PIA.Encryption,
allSettings.OpenVPN.TargetIP)
if err != nil {
break
}
err = piaConf.BuildConf(
connections,
allSettings.PIA.Encryption,
allSettings.OpenVPN.Verbosity,
allSettings.System.UID,
allSettings.System.GID,
allSettings.OpenVPN.Root,
allSettings.OpenVPN.Cipher,
allSettings.OpenVPN.Auth)
case constants.Mullvad:
connections, err = mullvadConf.GetOpenVPNConnections(
allSettings.Mullvad.Country,
allSettings.Mullvad.City,
allSettings.Mullvad.ISP,
allSettings.OpenVPN.NetworkProtocol,
allSettings.Mullvad.Port,
allSettings.OpenVPN.TargetIP)
if err != nil {
break
}
err = mullvadConf.BuildConf(
connections,
allSettings.OpenVPN.Verbosity,
allSettings.System.UID,
allSettings.System.GID,
allSettings.OpenVPN.Root,
allSettings.OpenVPN.Cipher)
case constants.Windscribe:
connections, err = windscribeConf.GetOpenVPNConnections(
allSettings.Windscribe.Region,
allSettings.OpenVPN.NetworkProtocol,
allSettings.Windscribe.Port,
allSettings.OpenVPN.TargetIP)
if err != nil {
break
}
err = windscribeConf.BuildConf(
connections,
allSettings.OpenVPN.Verbosity,
allSettings.System.UID,
allSettings.System.GID,
allSettings.OpenVPN.Root,
allSettings.OpenVPN.Cipher,
allSettings.OpenVPN.Auth)
case constants.Surfshark:
connections, err = surfsharkConf.GetOpenVPNConnections(
allSettings.Surfshark.Region,
allSettings.OpenVPN.NetworkProtocol,
allSettings.OpenVPN.TargetIP)
if err != nil {
break
}
err = surfsharkConf.BuildConf(
connections,
allSettings.OpenVPN.Verbosity,
allSettings.System.UID,
allSettings.System.GID,
allSettings.OpenVPN.Root,
allSettings.OpenVPN.Cipher,
allSettings.OpenVPN.Auth)
case constants.Cyberghost:
connections, err = cyberghostConf.GetOpenVPNConnections(
allSettings.Cyberghost.Group,
allSettings.Cyberghost.Region,
allSettings.OpenVPN.NetworkProtocol,
allSettings.OpenVPN.TargetIP)
if err != nil {
break
}
err = cyberghostConf.BuildConf(
connections,
allSettings.Cyberghost.ClientKey,
allSettings.OpenVPN.Verbosity,
allSettings.System.UID,
allSettings.System.GID,
allSettings.OpenVPN.Root,
allSettings.OpenVPN.Cipher,
allSettings.OpenVPN.Auth)
}
connections, err := providerConf.GetOpenVPNConnections(allSettings.Provider.ServerSelection)
fatalOnError(err)
err = providerConf.BuildConf(
connections,
allSettings.OpenVPN.Verbosity,
allSettings.System.UID,
allSettings.System.GID,
allSettings.OpenVPN.Root,
allSettings.OpenVPN.Cipher,
allSettings.OpenVPN.Auth,
allSettings.Provider.ExtraConfigOptions,
)
fatalOnError(err)
err = routingConf.AddRoutesVia(ctx, allSettings.Firewall.AllowedSubnets, defaultGateway, defaultInterface)
@@ -328,7 +229,7 @@ func _main(background context.Context, args []string) int {
return
case <-connectedCh: // blocks until openvpn is connected
onConnected(ctx, allSettings, logger, dnsConf, fileManager, waiter,
streamMerger, httpServer, routingConf, defaultInterface, piaConf, firstRun)
streamMerger, httpServer, routingConf, defaultInterface, providerConf, firstRun)
firstRun = false
}
}
@@ -354,9 +255,9 @@ func _main(background context.Context, args []string) int {
logger.Error(err)
exitStatus = 1
}
if allSettings.PIA.PortForwarding.Enabled {
logger.Info("Clearing forwarded port status file %s", allSettings.PIA.PortForwarding.Filepath)
if err := fileManager.Remove(string(allSettings.PIA.PortForwarding.Filepath)); err != nil {
if allSettings.Provider.PortForwarding.Enabled {
logger.Info("Clearing forwarded port status file %s", allSettings.Provider.PortForwarding.Filepath)
if err := fileManager.Remove(string(allSettings.Provider.PortForwarding.Filepath)); err != nil {
logger.Error(err)
exitStatus = 1
}
@@ -469,11 +370,11 @@ func onConnected(ctx context.Context, allSettings settings.Settings,
logger logging.Logger, dnsConf dns.Configurator, fileManager files.FileManager,
waiter command.Waiter, streamMerger command.StreamMerger, httpServer server.Server,
routingConf routing.Routing, defaultInterface string,
piaConf pia.Configurator, firstRun bool,
providerConf provider.Provider, firstRun bool,
) {
if allSettings.PIA.PortForwarding.Enabled {
if allSettings.Provider.PortForwarding.Enabled {
time.AfterFunc(5*time.Second, func() {
setupPortForwarding(logger, piaConf, allSettings.PIA, allSettings.System.UID, allSettings.System.GID)
setupPortForwarding(logger, providerConf, allSettings.Provider.PortForwarding.Filepath, allSettings.System.UID, allSettings.System.GID)
})
}
if allSettings.DNS.Enabled && firstRun {
@@ -616,12 +517,12 @@ func unboundRunLoop(ctx context.Context, logger logging.Logger, dnsConf dns.Conf
}
}
func setupPortForwarding(logger logging.Logger, piaConf pia.Configurator, settings settings.PIA, uid, gid int) {
func setupPortForwarding(logger logging.Logger, providerConf provider.Provider, filepath models.Filepath, uid, gid int) {
pfLogger := logger.WithPrefix("port forwarding: ")
var port uint16
var err error
for {
port, err = piaConf.GetPortForward()
port, err = providerConf.GetPortForward()
if err != nil {
pfLogger.Error(err)
pfLogger.Info("retrying in 5 seconds...")
@@ -631,13 +532,13 @@ func setupPortForwarding(logger logging.Logger, piaConf pia.Configurator, settin
break
}
}
pfLogger.Info("writing forwarded port to %s", settings.PortForwarding.Filepath)
if err := piaConf.WritePortForward(settings.PortForwarding.Filepath, port, uid, gid); err != nil {
pfLogger.Info("writing forwarded port to %s", filepath)
if err := providerConf.WritePortForward(filepath, port, uid, gid); err != nil {
pfLogger.Error(err)
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
if err := piaConf.AllowPortForwardFirewall(ctx, constants.TUN, port); err != nil {
if err := providerConf.AllowPortForwardFirewall(ctx, constants.TUN, port); err != nil {
pfLogger.Error(err)
}
}

6
go.mod
View File

@@ -5,8 +5,8 @@ go 1.14
require (
github.com/fatih/color v1.9.0
github.com/golang/mock v1.4.3
github.com/kyokomi/emoji v2.2.2+incompatible
github.com/kyokomi/emoji v2.2.4+incompatible
github.com/qdm12/golibs v0.0.0-20200528010515-765b7cd4f0db
github.com/stretchr/testify v1.5.1
golang.org/x/sys v0.0.0-20200523222454-059865788121
github.com/stretchr/testify v1.6.1
golang.org/x/sys v0.0.0-20200610111108-226ff32320da
)

8
go.sum
View File

@@ -52,6 +52,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kyokomi/emoji v2.2.2+incompatible h1:gaQFbK2+uSxOR4iGZprJAbpmtqTrHhSdgOyIMD6Oidc=
github.com/kyokomi/emoji v2.2.2+incompatible/go.mod h1:mZ6aGCD7yk8j6QY6KICwnZ2pxoszVseX1DNoGtU2tBA=
github.com/kyokomi/emoji v2.2.4+incompatible h1:np0woGKwx9LiHAQmwZx79Oc0rHpNw3o+3evou4BEPv4=
github.com/kyokomi/emoji v2.2.4+incompatible/go.mod h1:mZ6aGCD7yk8j6QY6KICwnZ2pxoszVseX1DNoGtU2tBA=
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic=
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
@@ -81,6 +83,8 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc=
@@ -108,6 +112,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200610111108-226ff32320da h1:bGb80FudwxpeucJUjPYJXuJ8Hk91vNtfvrymzwiei38=
golang.org/x/sys v0.0.0-20200610111108-226ff32320da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -126,6 +132,8 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=

View File

@@ -15,7 +15,7 @@ const (
func CyberghostRegionChoices() (choices []string) {
uniqueChoices := map[string]struct{}{}
for _, server := range CyberghostServers() {
uniqueChoices[string(server.Region)] = struct{}{}
uniqueChoices[server.Region] = struct{}{}
}
for choice := range uniqueChoices {
choices = append(choices, choice)
@@ -29,7 +29,7 @@ func CyberghostRegionChoices() (choices []string) {
func CyberghostGroupChoices() (choices []string) {
uniqueChoices := map[string]struct{}{}
for _, server := range CyberghostServers() {
uniqueChoices[string(server.Group)] = struct{}{}
uniqueChoices[server.Group] = struct{}{}
}
for choice := range uniqueChoices {
choices = append(choices, choice)
@@ -42,189 +42,189 @@ func CyberghostGroupChoices() (choices []string) {
func CyberghostServers() []models.CyberghostServer {
return []models.CyberghostServer{
{Region: models.CyberghostRegion("Albania"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{31, 171, 152, 99}, {31, 171, 152, 100}, {31, 171, 152, 102}, {31, 171, 152, 105}, {31, 171, 152, 107}, {31, 171, 152, 109}, {31, 171, 152, 133}, {31, 171, 152, 135}, {31, 171, 152, 136}, {31, 171, 152, 139}}},
{Region: models.CyberghostRegion("Albania"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{31, 171, 152, 99}, {31, 171, 152, 101}, {31, 171, 152, 103}, {31, 171, 152, 105}, {31, 171, 152, 106}, {31, 171, 152, 133}, {31, 171, 152, 135}, {31, 171, 152, 137}, {31, 171, 152, 138}, {31, 171, 152, 139}}},
{Region: models.CyberghostRegion("Algeria"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 133, 91, 7}, {45, 133, 91, 9}, {45, 133, 91, 12}, {45, 133, 91, 15}, {45, 133, 91, 17}, {45, 133, 91, 18}, {45, 133, 91, 20}, {45, 133, 91, 23}, {45, 133, 91, 24}, {45, 133, 91, 26}}},
{Region: models.CyberghostRegion("Algeria"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 133, 91, 7}, {45, 133, 91, 10}, {45, 133, 91, 11}, {45, 133, 91, 15}, {45, 133, 91, 17}, {45, 133, 91, 18}, {45, 133, 91, 21}, {45, 133, 91, 25}, {45, 133, 91, 26}, {45, 133, 91, 29}}},
{Region: models.CyberghostRegion("Andorra"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 139, 49, 10}, {45, 139, 49, 14}, {45, 139, 49, 15}, {45, 139, 49, 16}, {45, 139, 49, 17}, {45, 139, 49, 18}, {45, 139, 49, 19}, {45, 139, 49, 23}, {45, 139, 49, 25}, {45, 139, 49, 28}}},
{Region: models.CyberghostRegion("Andorra"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 139, 49, 7}, {45, 139, 49, 9}, {45, 139, 49, 10}, {45, 139, 49, 12}, {45, 139, 49, 15}, {45, 139, 49, 16}, {45, 139, 49, 17}, {45, 139, 49, 25}, {45, 139, 49, 27}, {45, 139, 49, 28}}},
{Region: models.CyberghostRegion("Argentina"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{190, 106, 130, 16}, {190, 106, 130, 17}, {190, 106, 130, 20}, {190, 106, 130, 22}, {190, 106, 130, 23}, {190, 106, 130, 34}, {190, 106, 130, 37}, {190, 106, 130, 38}, {190, 106, 130, 44}, {190, 106, 130, 45}}},
{Region: models.CyberghostRegion("Argentina"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{190, 106, 130, 15}, {190, 106, 130, 16}, {190, 106, 130, 18}, {190, 106, 130, 19}, {190, 106, 130, 20}, {190, 106, 130, 34}, {190, 106, 130, 36}, {190, 106, 130, 37}, {190, 106, 130, 43}, {190, 106, 130, 52}}},
{Region: models.CyberghostRegion("Armenia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 139, 50, 10}, {45, 139, 50, 12}, {45, 139, 50, 14}, {45, 139, 50, 18}, {45, 139, 50, 19}, {45, 139, 50, 20}, {45, 139, 50, 21}, {45, 139, 50, 26}, {45, 139, 50, 27}, {45, 139, 50, 29}}},
{Region: models.CyberghostRegion("Armenia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 139, 50, 8}, {45, 139, 50, 10}, {45, 139, 50, 11}, {45, 139, 50, 14}, {45, 139, 50, 18}, {45, 139, 50, 20}, {45, 139, 50, 24}, {45, 139, 50, 26}, {45, 139, 50, 27}, {45, 139, 50, 29}}},
{Region: models.CyberghostRegion("Australia"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{27, 50, 79, 3}, {27, 50, 79, 4}, {27, 50, 79, 5}, {27, 50, 79, 6}, {27, 50, 79, 9}, {27, 50, 79, 12}, {27, 50, 79, 14}, {103, 13, 101, 171}, {202, 130, 33, 114}, {202, 130, 33, 118}}},
{Region: models.CyberghostRegion("Australia"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{27, 50, 79, 3}, {27, 50, 79, 6}, {27, 50, 79, 9}, {27, 50, 79, 10}, {27, 50, 79, 11}, {27, 50, 79, 13}, {103, 13, 101, 174}, {202, 130, 33, 114}, {202, 130, 33, 117}, {202, 130, 33, 118}}},
{Region: models.CyberghostRegion("Austria"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{89, 187, 168, 133}, {89, 187, 168, 144}, {89, 187, 168, 150}, {89, 187, 168, 151}, {89, 187, 168, 162}, {89, 187, 168, 163}, {89, 187, 168, 164}, {89, 187, 168, 167}, {89, 187, 168, 178}, {89, 187, 168, 182}}},
{Region: models.CyberghostRegion("Austria"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{89, 187, 168, 138}, {89, 187, 168, 139}, {89, 187, 168, 149}, {89, 187, 168, 150}, {89, 187, 168, 161}, {89, 187, 168, 165}, {89, 187, 168, 167}, {89, 187, 168, 168}, {89, 187, 168, 174}, {89, 187, 168, 182}}},
{Region: models.CyberghostRegion("Bahamas"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{45, 132, 143, 8}, {45, 132, 143, 10}, {45, 132, 143, 11}, {45, 132, 143, 19}, {45, 132, 143, 24}, {45, 132, 143, 28}, {45, 132, 143, 31}, {45, 132, 143, 42}, {45, 132, 143, 43}, {45, 132, 143, 44}}},
{Region: models.CyberghostRegion("Bahamas"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{45, 132, 143, 1}, {45, 132, 143, 2}, {45, 132, 143, 3}, {45, 132, 143, 5}, {45, 132, 143, 7}, {45, 132, 143, 18}, {45, 132, 143, 23}, {45, 132, 143, 30}, {45, 132, 143, 32}, {45, 132, 143, 48}}},
{Region: models.CyberghostRegion("Bangladesh"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{45, 132, 142, 3}, {45, 132, 142, 8}, {45, 132, 142, 12}, {45, 132, 142, 20}, {45, 132, 142, 22}, {45, 132, 142, 26}, {45, 132, 142, 27}, {45, 132, 142, 37}, {45, 132, 142, 39}, {45, 132, 142, 42}}},
{Region: models.CyberghostRegion("Bangladesh"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{45, 132, 142, 6}, {45, 132, 142, 8}, {45, 132, 142, 13}, {45, 132, 142, 18}, {45, 132, 142, 33}, {45, 132, 142, 35}, {45, 132, 142, 38}, {45, 132, 142, 41}, {45, 132, 142, 42}, {45, 132, 142, 45}}},
{Region: models.CyberghostRegion("Belarus"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 132, 194, 3}, {45, 132, 194, 4}, {45, 132, 194, 26}, {45, 132, 194, 28}, {45, 132, 194, 34}, {45, 132, 194, 38}, {45, 132, 194, 39}, {45, 132, 194, 42}, {45, 132, 194, 44}, {45, 132, 194, 48}}},
{Region: models.CyberghostRegion("Belarus"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 132, 194, 4}, {45, 132, 194, 5}, {45, 132, 194, 9}, {45, 132, 194, 10}, {45, 132, 194, 20}, {45, 132, 194, 25}, {45, 132, 194, 29}, {45, 132, 194, 31}, {45, 132, 194, 40}, {45, 132, 194, 45}}},
{Region: models.CyberghostRegion("Belgium"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 143, 52}, {37, 120, 143, 55}, {37, 120, 143, 58}, {185, 210, 217, 10}, {185, 210, 217, 54}, {185, 210, 217, 244}, {185, 210, 217, 251}, {185, 232, 21, 119}, {193, 9, 114, 228}, {193, 9, 114, 230}}},
{Region: models.CyberghostRegion("Belgium"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{5, 253, 205, 22}, {5, 253, 205, 23}, {37, 120, 143, 165}, {185, 210, 217, 14}, {185, 210, 217, 248}, {185, 210, 217, 254}, {193, 9, 114, 212}, {193, 9, 114, 213}, {193, 9, 114, 219}, {193, 9, 114, 228}}},
{Region: models.CyberghostRegion("Bosnia and Herzegovina"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{185, 99, 3, 57}, {185, 99, 3, 58}, {185, 99, 3, 72}, {185, 99, 3, 73}, {185, 99, 3, 74}, {185, 99, 3, 130}, {185, 99, 3, 131}, {185, 99, 3, 134}, {185, 99, 3, 135}, {185, 99, 3, 136}}},
{Region: models.CyberghostRegion("Bosnia and Herzegovina"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{185, 99, 3, 57}, {185, 99, 3, 58}, {185, 99, 3, 72}, {185, 99, 3, 73}, {185, 99, 3, 74}, {185, 99, 3, 130}, {185, 99, 3, 131}, {185, 99, 3, 134}, {185, 99, 3, 135}, {185, 99, 3, 136}}},
{Region: models.CyberghostRegion("Brazil"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{45, 231, 207, 65}, {45, 231, 207, 67}, {45, 231, 207, 68}, {45, 231, 207, 69}, {45, 231, 207, 75}, {177, 67, 81, 170}, {181, 41, 203, 98}, {181, 41, 203, 100}, {181, 41, 203, 102}, {181, 41, 203, 110}}},
{Region: models.CyberghostRegion("Brazil"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{45, 231, 207, 77}, {177, 67, 81, 163}, {177, 67, 81, 164}, {177, 67, 81, 165}, {177, 67, 81, 167}, {177, 67, 81, 170}, {177, 67, 81, 173}, {177, 67, 81, 174}, {181, 41, 203, 103}, {181, 41, 203, 104}}},
{Region: models.CyberghostRegion("Bulgaria"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 152, 99}, {37, 120, 152, 102}, {37, 120, 152, 103}, {37, 120, 152, 104}, {37, 120, 152, 105}, {37, 120, 152, 106}, {37, 120, 152, 107}, {37, 120, 152, 108}, {37, 120, 152, 109}, {37, 120, 152, 110}}},
{Region: models.CyberghostRegion("Bulgaria"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{37, 120, 152, 99}, {37, 120, 152, 100}, {37, 120, 152, 101}, {37, 120, 152, 103}, {37, 120, 152, 104}, {37, 120, 152, 105}, {37, 120, 152, 107}, {37, 120, 152, 108}, {37, 120, 152, 109}, {37, 120, 152, 110}}},
{Region: models.CyberghostRegion("Cambodia"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{188, 215, 235, 36}, {188, 215, 235, 38}, {188, 215, 235, 39}, {188, 215, 235, 40}, {188, 215, 235, 43}, {188, 215, 235, 46}, {188, 215, 235, 47}, {188, 215, 235, 48}, {188, 215, 235, 51}, {188, 215, 235, 54}}},
{Region: models.CyberghostRegion("Cambodia"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{188, 215, 235, 35}, {188, 215, 235, 36}, {188, 215, 235, 37}, {188, 215, 235, 38}, {188, 215, 235, 45}, {188, 215, 235, 46}, {188, 215, 235, 52}, {188, 215, 235, 53}, {188, 215, 235, 55}, {188, 215, 235, 58}}},
{Region: models.CyberghostRegion("Canada"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{37, 120, 205, 8}, {37, 120, 205, 28}, {104, 245, 145, 163}, {104, 245, 146, 38}, {104, 245, 146, 101}, {176, 113, 74, 44}, {176, 113, 74, 52}, {176, 113, 74, 67}, {176, 113, 74, 126}, {176, 113, 74, 217}}},
{Region: models.CyberghostRegion("Canada"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{37, 120, 205, 40}, {54, 39, 11, 194}, {104, 245, 145, 164}, {104, 245, 146, 41}, {139, 28, 218, 86}, {139, 28, 218, 87}, {176, 113, 74, 19}, {176, 113, 74, 25}, {176, 113, 74, 30}, {176, 113, 74, 195}}},
{Region: models.CyberghostRegion("Chile"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{190, 105, 239, 129}, {190, 105, 239, 130}, {190, 105, 239, 131}, {190, 105, 239, 132}, {190, 105, 239, 133}, {190, 105, 239, 134}, {190, 105, 239, 135}, {190, 105, 239, 136}, {190, 105, 239, 137}, {190, 105, 239, 138}}},
{Region: models.CyberghostRegion("Chile"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{190, 105, 239, 129}, {190, 105, 239, 130}, {190, 105, 239, 131}, {190, 105, 239, 132}, {190, 105, 239, 133}, {190, 105, 239, 134}, {190, 105, 239, 135}, {190, 105, 239, 136}, {190, 105, 239, 137}, {190, 105, 239, 138}}},
{Region: models.CyberghostRegion("China"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{45, 132, 193, 2}, {45, 132, 193, 3}, {45, 132, 193, 9}, {45, 132, 193, 10}, {45, 132, 193, 12}, {45, 132, 193, 13}, {45, 132, 193, 32}, {45, 132, 193, 36}, {45, 132, 193, 43}, {45, 132, 193, 45}}},
{Region: models.CyberghostRegion("China"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{45, 132, 193, 2}, {45, 132, 193, 3}, {45, 132, 193, 4}, {45, 132, 193, 14}, {45, 132, 193, 19}, {45, 132, 193, 22}, {45, 132, 193, 30}, {45, 132, 193, 35}, {45, 132, 193, 36}, {45, 132, 193, 42}}},
{Region: models.CyberghostRegion("Colombia"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{190, 105, 229, 19}, {190, 105, 229, 20}, {190, 105, 229, 21}, {190, 105, 229, 22}}},
{Region: models.CyberghostRegion("Colombia"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{190, 105, 229, 19}, {190, 105, 229, 20}, {190, 105, 229, 21}, {190, 105, 229, 22}}},
{Region: models.CyberghostRegion("Costa Rica"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{143, 202, 160, 67}, {143, 202, 160, 69}, {143, 202, 160, 70}, {143, 202, 160, 72}, {143, 202, 160, 73}, {143, 202, 160, 74}, {143, 202, 160, 75}, {143, 202, 160, 76}, {143, 202, 160, 77}, {143, 202, 160, 78}}},
{Region: models.CyberghostRegion("Costa Rica"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{143, 202, 160, 67}, {143, 202, 160, 68}, {143, 202, 160, 69}, {143, 202, 160, 70}, {143, 202, 160, 71}, {143, 202, 160, 73}, {143, 202, 160, 74}, {143, 202, 160, 75}, {143, 202, 160, 76}, {143, 202, 160, 78}}},
{Region: models.CyberghostRegion("Cyprus"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 132, 137, 8}, {45, 132, 137, 11}, {45, 132, 137, 12}, {45, 132, 137, 15}, {45, 132, 137, 17}, {45, 132, 137, 18}, {45, 132, 137, 19}, {45, 132, 137, 23}, {45, 132, 137, 26}, {45, 132, 137, 28}}},
{Region: models.CyberghostRegion("Cyprus"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 132, 137, 8}, {45, 132, 137, 10}, {45, 132, 137, 16}, {45, 132, 137, 19}, {45, 132, 137, 20}, {45, 132, 137, 21}, {45, 132, 137, 22}, {45, 132, 137, 23}, {45, 132, 137, 25}, {45, 132, 137, 28}}},
{Region: models.CyberghostRegion("Czech Republic"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{195, 181, 160, 66}, {195, 181, 160, 72}, {195, 181, 161, 7}, {195, 181, 161, 9}, {195, 181, 161, 10}, {195, 181, 161, 11}, {195, 181, 161, 14}, {195, 181, 161, 17}, {195, 181, 161, 23}, {195, 181, 161, 25}}},
{Region: models.CyberghostRegion("Czech Republic"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{185, 216, 35, 231}, {185, 216, 35, 232}, {185, 216, 35, 235}, {195, 181, 160, 75}, {195, 181, 161, 2}, {195, 181, 161, 8}, {195, 181, 161, 15}, {195, 181, 161, 16}, {195, 181, 161, 23}, {195, 181, 161, 25}}},
{Region: models.CyberghostRegion("Denmark"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 145, 93}, {37, 120, 194, 39}, {37, 120, 194, 41}, {37, 120, 194, 53}, {95, 174, 65, 166}, {95, 174, 65, 167}, {95, 174, 65, 174}, {185, 206, 224, 230}, {185, 206, 224, 235}, {185, 206, 224, 253}}},
{Region: models.CyberghostRegion("Denmark"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{37, 120, 145, 84}, {37, 120, 145, 88}, {37, 120, 194, 38}, {37, 120, 194, 58}, {95, 174, 65, 163}, {95, 174, 65, 165}, {185, 206, 224, 227}, {185, 206, 224, 243}, {185, 206, 224, 245}, {185, 206, 224, 253}}},
{Region: models.CyberghostRegion("Egypt"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 132, 139, 7}, {45, 132, 139, 22}, {45, 132, 139, 24}, {45, 132, 139, 27}, {45, 132, 139, 28}, {45, 132, 139, 29}, {188, 214, 122, 36}, {188, 214, 122, 41}, {188, 214, 122, 52}, {188, 214, 122, 56}}},
{Region: models.CyberghostRegion("Egypt"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 132, 139, 7}, {45, 132, 139, 17}, {45, 132, 139, 18}, {45, 132, 139, 22}, {45, 132, 139, 23}, {188, 214, 122, 41}, {188, 214, 122, 48}, {188, 214, 122, 49}, {188, 214, 122, 51}, {188, 214, 122, 61}}},
{Region: models.CyberghostRegion("Estonia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{77, 247, 111, 6}, {77, 247, 111, 11}, {77, 247, 111, 52}, {77, 247, 111, 53}, {77, 247, 111, 55}, {77, 247, 111, 56}, {77, 247, 111, 57}, {77, 247, 111, 60}, {77, 247, 111, 61}, {77, 247, 111, 62}}},
{Region: models.CyberghostRegion("Estonia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{77, 247, 111, 3}, {77, 247, 111, 4}, {77, 247, 111, 5}, {77, 247, 111, 7}, {77, 247, 111, 11}, {77, 247, 111, 12}, {77, 247, 111, 52}, {77, 247, 111, 53}, {77, 247, 111, 55}, {77, 247, 111, 59}}},
{Region: models.CyberghostRegion("Finland"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{194, 34, 133, 171}, {194, 34, 133, 172}, {194, 34, 133, 176}, {194, 34, 133, 179}, {194, 34, 133, 180}, {194, 34, 133, 195}, {194, 34, 133, 196}, {194, 34, 133, 204}, {194, 34, 133, 207}, {194, 34, 133, 208}}},
{Region: models.CyberghostRegion("Finland"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{194, 34, 133, 163}, {194, 34, 133, 164}, {194, 34, 133, 167}, {194, 34, 133, 178}, {194, 34, 133, 192}, {194, 34, 133, 201}, {194, 34, 133, 205}, {194, 34, 133, 206}, {194, 34, 133, 208}, {194, 34, 133, 214}}},
{Region: models.CyberghostRegion("France"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{84, 17, 60, 21}, {84, 17, 60, 33}, {84, 17, 60, 89}, {84, 17, 60, 92}, {84, 17, 60, 114}, {84, 17, 61, 23}, {84, 17, 61, 43}, {84, 17, 61, 111}, {84, 17, 61, 235}, {151, 106, 8, 36}}},
{Region: models.CyberghostRegion("France"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{84, 17, 60, 8}, {84, 17, 60, 54}, {84, 17, 60, 161}, {84, 17, 60, 188}, {84, 17, 61, 32}, {84, 17, 61, 101}, {84, 17, 61, 163}, {84, 17, 61, 187}, {84, 17, 61, 213}, {151, 106, 8, 46}}},
{Region: models.CyberghostRegion("Georgia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 132, 138, 7}, {45, 132, 138, 8}, {45, 132, 138, 9}, {45, 132, 138, 12}, {45, 132, 138, 14}, {45, 132, 138, 18}, {45, 132, 138, 19}, {45, 132, 138, 20}, {45, 132, 138, 23}, {45, 132, 138, 27}}},
{Region: models.CyberghostRegion("Georgia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 132, 138, 7}, {45, 132, 138, 8}, {45, 132, 138, 9}, {45, 132, 138, 10}, {45, 132, 138, 17}, {45, 132, 138, 18}, {45, 132, 138, 25}, {45, 132, 138, 26}, {45, 132, 138, 27}, {45, 132, 138, 28}}},
{Region: models.CyberghostRegion("Germany"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 217, 110}, {84, 17, 48, 75}, {84, 17, 48, 100}, {84, 17, 48, 182}, {84, 17, 49, 129}, {154, 28, 188, 50}, {154, 28, 188, 128}, {178, 162, 208, 155}, {178, 162, 209, 72}, {178, 162, 216, 49}}},
{Region: models.CyberghostRegion("Germany"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{37, 120, 217, 5}, {37, 120, 217, 27}, {84, 17, 48, 20}, {84, 17, 48, 64}, {84, 17, 48, 68}, {84, 17, 48, 182}, {84, 17, 49, 141}, {84, 17, 49, 144}, {154, 28, 188, 90}, {154, 28, 188, 143}}},
{Region: models.CyberghostRegion("Greece"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{154, 57, 3, 130}, {154, 57, 3, 132}, {154, 57, 3, 135}, {154, 57, 3, 138}, {154, 57, 3, 140}, {188, 123, 126, 168}, {188, 123, 126, 170}, {188, 123, 126, 176}, {188, 123, 126, 177}, {188, 123, 126, 178}}},
{Region: models.CyberghostRegion("Greece"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{154, 57, 3, 130}, {154, 57, 3, 132}, {154, 57, 3, 133}, {154, 57, 3, 137}, {188, 123, 126, 167}, {188, 123, 126, 170}, {188, 123, 126, 172}, {188, 123, 126, 173}, {188, 123, 126, 174}, {188, 123, 126, 177}}},
{Region: models.CyberghostRegion("Greenland"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 209, 8}, {45, 131, 209, 9}, {45, 131, 209, 12}, {45, 131, 209, 16}, {45, 131, 209, 18}, {45, 131, 209, 20}, {45, 131, 209, 22}, {45, 131, 209, 23}, {45, 131, 209, 26}, {45, 131, 209, 27}}},
{Region: models.CyberghostRegion("Greenland"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 209, 6}, {45, 131, 209, 11}, {45, 131, 209, 19}, {45, 131, 209, 20}, {45, 131, 209, 21}, {45, 131, 209, 23}, {45, 131, 209, 26}, {45, 131, 209, 27}, {45, 131, 209, 28}, {45, 131, 209, 29}}},
{Region: models.CyberghostRegion("Hong Kong"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{84, 17, 56, 130}, {84, 17, 56, 136}, {84, 17, 56, 148}, {84, 17, 56, 149}, {84, 17, 56, 152}, {84, 17, 56, 172}, {84, 17, 56, 173}, {84, 17, 56, 175}, {84, 17, 56, 176}, {84, 17, 56, 181}}},
{Region: models.CyberghostRegion("Hong Kong"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{84, 17, 56, 133}, {84, 17, 56, 140}, {84, 17, 56, 146}, {84, 17, 56, 151}, {84, 17, 56, 162}, {84, 17, 56, 166}, {84, 17, 56, 172}, {84, 17, 56, 174}, {84, 17, 56, 176}, {84, 17, 56, 182}}},
{Region: models.CyberghostRegion("Hungary"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{185, 104, 187, 83}, {185, 104, 187, 85}, {185, 104, 187, 86}, {185, 104, 187, 92}, {185, 189, 114, 116}, {185, 189, 114, 119}, {185, 189, 114, 120}, {185, 189, 114, 121}, {185, 189, 114, 124}, {185, 189, 114, 125}}},
{Region: models.CyberghostRegion("Hungary"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{185, 104, 187, 83}, {185, 104, 187, 85}, {185, 104, 187, 93}, {185, 189, 114, 115}, {185, 189, 114, 118}, {185, 189, 114, 119}, {185, 189, 114, 120}, {185, 189, 114, 121}, {185, 189, 114, 123}, {185, 189, 114, 125}}},
{Region: models.CyberghostRegion("Iceland"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{213, 167, 139, 19}, {213, 167, 139, 20}, {213, 167, 139, 21}, {213, 167, 139, 22}, {213, 167, 139, 23}, {213, 167, 139, 24}, {213, 167, 139, 25}, {213, 167, 139, 26}, {213, 167, 139, 28}, {213, 167, 139, 30}}},
{Region: models.CyberghostRegion("Iceland"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{213, 167, 139, 19}, {213, 167, 139, 21}, {213, 167, 139, 22}, {213, 167, 139, 24}, {213, 167, 139, 25}, {213, 167, 139, 26}, {213, 167, 139, 27}, {213, 167, 139, 28}, {213, 167, 139, 29}, {213, 167, 139, 30}}},
{Region: models.CyberghostRegion("India"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{43, 241, 71, 115}, {43, 241, 71, 118}, {43, 241, 71, 120}, {43, 241, 71, 122}, {43, 241, 71, 125}, {43, 241, 71, 147}, {43, 241, 71, 148}, {43, 241, 71, 149}, {43, 241, 71, 154}, {43, 241, 71, 156}}},
{Region: models.CyberghostRegion("India"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{43, 241, 71, 116}, {43, 241, 71, 117}, {43, 241, 71, 118}, {43, 241, 71, 122}, {43, 241, 71, 125}, {43, 241, 71, 147}, {43, 241, 71, 148}, {43, 241, 71, 153}, {43, 241, 71, 155}, {43, 241, 71, 156}}},
{Region: models.CyberghostRegion("Indonesia"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{113, 20, 29, 243}, {113, 20, 29, 244}, {113, 20, 29, 246}, {113, 20, 29, 247}, {113, 20, 29, 248}, {113, 20, 29, 249}, {113, 20, 29, 250}, {113, 20, 29, 251}, {113, 20, 29, 252}, {113, 20, 29, 254}}},
{Region: models.CyberghostRegion("Indonesia"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{113, 20, 29, 243}, {113, 20, 29, 245}, {113, 20, 29, 246}, {113, 20, 29, 247}, {113, 20, 29, 248}, {113, 20, 29, 249}, {113, 20, 29, 250}, {113, 20, 29, 251}, {113, 20, 29, 252}, {113, 20, 29, 253}}},
{Region: models.CyberghostRegion("Iran"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 4, 10}, {45, 131, 4, 16}, {45, 131, 4, 17}, {45, 131, 4, 18}, {45, 131, 4, 20}, {45, 131, 4, 21}, {45, 131, 4, 22}, {45, 131, 4, 24}, {45, 131, 4, 25}, {45, 131, 4, 28}}},
{Region: models.CyberghostRegion("Iran"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 4, 6}, {45, 131, 4, 8}, {45, 131, 4, 12}, {45, 131, 4, 14}, {45, 131, 4, 15}, {45, 131, 4, 20}, {45, 131, 4, 23}, {45, 131, 4, 24}, {45, 131, 4, 27}, {45, 131, 4, 28}}},
{Region: models.CyberghostRegion("Ireland"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{84, 247, 48, 3}, {84, 247, 48, 4}, {84, 247, 48, 5}, {84, 247, 48, 8}, {84, 247, 48, 9}, {84, 247, 48, 10}, {84, 247, 48, 11}, {84, 247, 48, 12}, {84, 247, 48, 19}, {84, 247, 48, 21}}},
{Region: models.CyberghostRegion("Ireland"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{84, 247, 48, 3}, {84, 247, 48, 13}, {84, 247, 48, 14}, {84, 247, 48, 20}, {84, 247, 48, 21}, {84, 247, 48, 23}, {84, 247, 48, 24}, {84, 247, 48, 25}, {84, 247, 48, 26}, {84, 247, 48, 27}}},
{Region: models.CyberghostRegion("Isle of Man"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 132, 140, 7}, {45, 132, 140, 8}, {45, 132, 140, 10}, {45, 132, 140, 11}, {45, 132, 140, 15}, {45, 132, 140, 17}, {45, 132, 140, 18}, {45, 132, 140, 19}, {45, 132, 140, 27}, {45, 132, 140, 28}}},
{Region: models.CyberghostRegion("Isle of Man"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 132, 140, 7}, {45, 132, 140, 9}, {45, 132, 140, 10}, {45, 132, 140, 16}, {45, 132, 140, 19}, {45, 132, 140, 20}, {45, 132, 140, 21}, {45, 132, 140, 25}, {45, 132, 140, 26}, {45, 132, 140, 28}}},
{Region: models.CyberghostRegion("Israel"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{160, 116, 0, 163}, {160, 116, 0, 164}, {160, 116, 0, 166}, {160, 116, 0, 167}, {160, 116, 0, 169}, {160, 116, 0, 170}, {160, 116, 0, 171}, {160, 116, 0, 172}, {160, 116, 0, 173}, {160, 116, 0, 174}}},
{Region: models.CyberghostRegion("Israel"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{160, 116, 0, 163}, {160, 116, 0, 165}, {160, 116, 0, 166}, {160, 116, 0, 167}, {160, 116, 0, 168}, {160, 116, 0, 169}, {160, 116, 0, 170}, {160, 116, 0, 172}, {160, 116, 0, 173}, {160, 116, 0, 174}}},
{Region: models.CyberghostRegion("Italy"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{84, 17, 58, 11}, {84, 17, 58, 19}, {87, 101, 94, 70}, {87, 101, 94, 116}, {185, 217, 71, 133}, {185, 217, 71, 137}, {212, 102, 55, 100}, {212, 102, 55, 123}, {212, 102, 55, 139}, {212, 102, 55, 184}}},
{Region: models.CyberghostRegion("Italy"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{84, 17, 58, 7}, {84, 17, 58, 100}, {84, 17, 58, 103}, {84, 17, 58, 104}, {87, 101, 94, 116}, {87, 101, 94, 124}, {185, 217, 71, 132}, {185, 217, 71, 134}, {212, 102, 55, 156}, {212, 102, 55, 167}}},
{Region: models.CyberghostRegion("Japan"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{156, 146, 35, 5}, {156, 146, 35, 8}, {156, 146, 35, 9}, {156, 146, 35, 17}, {156, 146, 35, 20}, {156, 146, 35, 33}, {156, 146, 35, 36}, {156, 146, 35, 42}, {156, 146, 35, 45}, {156, 146, 35, 50}}},
{Region: models.CyberghostRegion("Japan"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{156, 146, 35, 6}, {156, 146, 35, 8}, {156, 146, 35, 19}, {156, 146, 35, 22}, {156, 146, 35, 27}, {156, 146, 35, 32}, {156, 146, 35, 35}, {156, 146, 35, 37}, {156, 146, 35, 41}, {156, 146, 35, 47}}},
{Region: models.CyberghostRegion("Kazakhstan"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 133, 88, 7}, {45, 133, 88, 11}, {45, 133, 88, 12}, {45, 133, 88, 13}, {45, 133, 88, 14}, {45, 133, 88, 20}, {45, 133, 88, 23}, {45, 133, 88, 24}, {45, 133, 88, 26}, {45, 133, 88, 28}}},
{Region: models.CyberghostRegion("Kazakhstan"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 133, 88, 8}, {45, 133, 88, 12}, {45, 133, 88, 13}, {45, 133, 88, 15}, {45, 133, 88, 19}, {45, 133, 88, 20}, {45, 133, 88, 24}, {45, 133, 88, 25}, {45, 133, 88, 26}, {45, 133, 88, 28}}},
{Region: models.CyberghostRegion("Kenya"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{62, 12, 118, 195}, {62, 12, 118, 196}, {62, 12, 118, 197}, {62, 12, 118, 198}, {62, 12, 118, 199}, {62, 12, 118, 200}, {62, 12, 118, 201}, {62, 12, 118, 202}, {62, 12, 118, 203}, {62, 12, 118, 204}}},
{Region: models.CyberghostRegion("Kenya"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{62, 12, 118, 195}, {62, 12, 118, 196}, {62, 12, 118, 197}, {62, 12, 118, 198}, {62, 12, 118, 199}, {62, 12, 118, 200}, {62, 12, 118, 201}, {62, 12, 118, 202}, {62, 12, 118, 203}, {62, 12, 118, 204}}},
{Region: models.CyberghostRegion("Korea"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{27, 255, 75, 227}, {27, 255, 75, 229}, {27, 255, 75, 233}, {27, 255, 75, 234}, {27, 255, 75, 235}, {27, 255, 75, 236}, {27, 255, 75, 248}, {27, 255, 75, 249}, {27, 255, 75, 251}, {27, 255, 75, 254}}},
{Region: models.CyberghostRegion("Korea"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{27, 255, 75, 228}, {27, 255, 75, 229}, {27, 255, 75, 230}, {27, 255, 75, 231}, {27, 255, 75, 234}, {27, 255, 75, 235}, {27, 255, 75, 244}, {27, 255, 75, 245}, {27, 255, 75, 246}, {27, 255, 75, 247}}},
{Region: models.CyberghostRegion("Latvia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{109, 248, 148, 244}, {109, 248, 148, 251}, {109, 248, 148, 252}, {109, 248, 148, 253}, {109, 248, 149, 19}, {109, 248, 149, 20}, {109, 248, 149, 21}, {109, 248, 149, 22}, {109, 248, 149, 24}, {109, 248, 149, 27}}},
{Region: models.CyberghostRegion("Latvia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{109, 248, 148, 248}, {109, 248, 148, 252}, {109, 248, 148, 253}, {109, 248, 148, 254}, {109, 248, 149, 19}, {109, 248, 149, 20}, {109, 248, 149, 21}, {109, 248, 149, 24}, {109, 248, 149, 28}, {109, 248, 149, 29}}},
{Region: models.CyberghostRegion("Liechtenstein"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 139, 48, 6}, {45, 139, 48, 7}, {45, 139, 48, 9}, {45, 139, 48, 16}, {45, 139, 48, 17}, {45, 139, 48, 19}, {45, 139, 48, 20}, {45, 139, 48, 22}, {45, 139, 48, 23}, {45, 139, 48, 27}}},
{Region: models.CyberghostRegion("Liechtenstein"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 139, 48, 9}, {45, 139, 48, 12}, {45, 139, 48, 15}, {45, 139, 48, 16}, {45, 139, 48, 17}, {45, 139, 48, 18}, {45, 139, 48, 24}, {45, 139, 48, 26}, {45, 139, 48, 28}, {45, 139, 48, 29}}},
{Region: models.CyberghostRegion("Lithuania"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{85, 206, 162, 211}, {85, 206, 162, 213}, {85, 206, 162, 214}, {85, 206, 162, 216}, {85, 206, 162, 219}, {85, 206, 162, 220}, {85, 206, 165, 18}, {85, 206, 165, 20}, {85, 206, 165, 24}, {85, 206, 165, 25}}},
{Region: models.CyberghostRegion("Lithuania"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{85, 206, 162, 210}, {85, 206, 162, 211}, {85, 206, 162, 214}, {85, 206, 162, 215}, {85, 206, 162, 220}, {85, 206, 162, 221}, {85, 206, 162, 222}, {85, 206, 165, 18}, {85, 206, 165, 25}, {85, 206, 165, 26}}},
{Region: models.CyberghostRegion("Luxembourg"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{5, 253, 204, 5}, {5, 253, 204, 6}, {5, 253, 204, 9}, {5, 253, 204, 10}, {5, 253, 204, 12}, {5, 253, 204, 14}, {5, 253, 204, 20}, {5, 253, 204, 23}, {5, 253, 204, 29}, {5, 253, 204, 30}}},
{Region: models.CyberghostRegion("Luxembourg"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{5, 253, 204, 7}, {5, 253, 204, 11}, {5, 253, 204, 20}, {5, 253, 204, 22}, {5, 253, 204, 23}, {5, 253, 204, 26}, {5, 253, 204, 27}, {5, 253, 204, 28}, {5, 253, 204, 29}, {5, 253, 204, 30}}},
{Region: models.CyberghostRegion("Macao"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{45, 137, 197, 8}, {45, 137, 197, 9}, {45, 137, 197, 12}, {45, 137, 197, 14}, {45, 137, 197, 17}, {45, 137, 197, 33}, {45, 137, 197, 35}, {45, 137, 197, 42}, {45, 137, 197, 45}, {45, 137, 197, 47}}},
{Region: models.CyberghostRegion("Macao"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{45, 137, 197, 2}, {45, 137, 197, 7}, {45, 137, 197, 18}, {45, 137, 197, 19}, {45, 137, 197, 28}, {45, 137, 197, 30}, {45, 137, 197, 33}, {45, 137, 197, 35}, {45, 137, 197, 44}, {45, 137, 197, 47}}},
{Region: models.CyberghostRegion("Macedonia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{185, 225, 28, 3}, {185, 225, 28, 4}, {185, 225, 28, 5}, {185, 225, 28, 6}, {185, 225, 28, 7}, {185, 225, 28, 8}, {185, 225, 28, 9}, {185, 225, 28, 10}, {185, 225, 28, 11}, {185, 225, 28, 12}}},
{Region: models.CyberghostRegion("Macedonia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{185, 225, 28, 3}, {185, 225, 28, 4}, {185, 225, 28, 5}, {185, 225, 28, 6}, {185, 225, 28, 7}, {185, 225, 28, 8}, {185, 225, 28, 9}, {185, 225, 28, 10}, {185, 225, 28, 11}, {185, 225, 28, 12}}},
{Region: models.CyberghostRegion("Malaysia"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{139, 5, 177, 69}, {139, 5, 177, 70}, {139, 5, 177, 71}, {139, 5, 177, 72}, {139, 5, 177, 73}, {139, 5, 177, 74}, {139, 5, 177, 75}, {139, 5, 177, 76}, {139, 5, 177, 77}, {139, 5, 177, 78}}},
{Region: models.CyberghostRegion("Malaysia"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{139, 5, 177, 69}, {139, 5, 177, 70}, {139, 5, 177, 71}, {139, 5, 177, 72}, {139, 5, 177, 73}, {139, 5, 177, 74}, {139, 5, 177, 75}, {139, 5, 177, 76}, {139, 5, 177, 77}, {139, 5, 177, 78}}},
{Region: models.CyberghostRegion("Malta"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 137, 198, 6}, {45, 137, 198, 8}, {45, 137, 198, 9}, {45, 137, 198, 11}, {45, 137, 198, 16}, {45, 137, 198, 18}, {45, 137, 198, 22}, {45, 137, 198, 23}, {45, 137, 198, 25}, {45, 137, 198, 27}}},
{Region: models.CyberghostRegion("Malta"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 137, 198, 8}, {45, 137, 198, 10}, {45, 137, 198, 12}, {45, 137, 198, 13}, {45, 137, 198, 16}, {45, 137, 198, 17}, {45, 137, 198, 21}, {45, 137, 198, 23}, {45, 137, 198, 26}, {45, 137, 198, 28}}},
{Region: models.CyberghostRegion("Mexico"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{45, 133, 180, 99}, {45, 133, 180, 106}, {45, 133, 180, 107}, {45, 133, 180, 108}, {45, 133, 180, 115}, {45, 133, 180, 118}, {45, 133, 180, 119}, {45, 133, 180, 121}, {45, 133, 180, 122}, {45, 133, 180, 123}}},
{Region: models.CyberghostRegion("Mexico"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{45, 133, 180, 99}, {45, 133, 180, 101}, {45, 133, 180, 104}, {45, 133, 180, 105}, {45, 133, 180, 106}, {45, 133, 180, 115}, {45, 133, 180, 117}, {45, 133, 180, 118}, {45, 133, 180, 120}, {45, 133, 180, 121}}},
{Region: models.CyberghostRegion("Moldova"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{178, 175, 130, 243}, {178, 175, 130, 245}, {178, 175, 130, 250}, {178, 175, 130, 251}, {178, 175, 130, 253}, {178, 175, 130, 254}, {178, 175, 142, 131}, {178, 175, 142, 132}, {178, 175, 142, 133}, {178, 175, 142, 134}}},
{Region: models.CyberghostRegion("Moldova"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{178, 175, 130, 243}, {178, 175, 130, 244}, {178, 175, 130, 245}, {178, 175, 130, 246}, {178, 175, 130, 250}, {178, 175, 130, 251}, {178, 175, 130, 253}, {178, 175, 130, 254}, {178, 175, 142, 132}, {178, 175, 142, 133}}},
{Region: models.CyberghostRegion("Monaco"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 137, 199, 7}, {45, 137, 199, 9}, {45, 137, 199, 11}, {45, 137, 199, 12}, {45, 137, 199, 14}, {45, 137, 199, 16}, {45, 137, 199, 20}, {45, 137, 199, 24}, {45, 137, 199, 25}, {45, 137, 199, 29}}},
{Region: models.CyberghostRegion("Monaco"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 137, 199, 6}, {45, 137, 199, 7}, {45, 137, 199, 10}, {45, 137, 199, 16}, {45, 137, 199, 18}, {45, 137, 199, 22}, {45, 137, 199, 23}, {45, 137, 199, 24}, {45, 137, 199, 25}, {45, 137, 199, 27}}},
{Region: models.CyberghostRegion("Mongolia"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{45, 139, 51, 4}, {45, 139, 51, 13}, {45, 139, 51, 14}, {45, 139, 51, 17}, {45, 139, 51, 18}, {45, 139, 51, 22}, {45, 139, 51, 23}, {45, 139, 51, 32}, {45, 139, 51, 44}, {45, 139, 51, 48}}},
{Region: models.CyberghostRegion("Mongolia"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{45, 139, 51, 3}, {45, 139, 51, 6}, {45, 139, 51, 11}, {45, 139, 51, 12}, {45, 139, 51, 17}, {45, 139, 51, 20}, {45, 139, 51, 28}, {45, 139, 51, 30}, {45, 139, 51, 37}, {45, 139, 51, 41}}},
{Region: models.CyberghostRegion("Montenegro"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 208, 6}, {45, 131, 208, 7}, {45, 131, 208, 8}, {45, 131, 208, 9}, {45, 131, 208, 10}, {45, 131, 208, 13}, {45, 131, 208, 14}, {45, 131, 208, 20}, {45, 131, 208, 24}, {45, 131, 208, 28}}},
{Region: models.CyberghostRegion("Montenegro"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 208, 6}, {45, 131, 208, 8}, {45, 131, 208, 9}, {45, 131, 208, 12}, {45, 131, 208, 16}, {45, 131, 208, 20}, {45, 131, 208, 22}, {45, 131, 208, 24}, {45, 131, 208, 26}, {45, 131, 208, 28}}},
{Region: models.CyberghostRegion("Morocco"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 211, 6}, {45, 131, 211, 9}, {45, 131, 211, 11}, {45, 131, 211, 13}, {45, 131, 211, 18}, {45, 131, 211, 21}, {45, 131, 211, 22}, {45, 131, 211, 23}, {45, 131, 211, 28}, {45, 131, 211, 29}}},
{Region: models.CyberghostRegion("Morocco"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 211, 9}, {45, 131, 211, 10}, {45, 131, 211, 13}, {45, 131, 211, 18}, {45, 131, 211, 20}, {45, 131, 211, 21}, {45, 131, 211, 25}, {45, 131, 211, 26}, {45, 131, 211, 28}, {45, 131, 211, 29}}},
{Region: models.CyberghostRegion("Netherlands"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{84, 17, 47, 3}, {84, 17, 47, 20}, {84, 17, 47, 39}, {84, 17, 47, 42}, {84, 17, 47, 74}, {84, 17, 47, 111}, {139, 28, 217, 199}, {185, 132, 177, 136}, {190, 2, 149, 196}, {195, 181, 172, 69}}},
{Region: models.CyberghostRegion("Netherlands"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{84, 17, 47, 4}, {84, 17, 47, 8}, {84, 17, 47, 12}, {84, 17, 47, 38}, {84, 17, 47, 68}, {185, 132, 177, 235}, {190, 2, 149, 28}, {190, 2, 149, 30}, {190, 2, 149, 208}, {195, 181, 172, 79}}},
{Region: models.CyberghostRegion("New Zealand"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{103, 231, 91, 131}, {103, 231, 91, 132}, {103, 231, 91, 133}, {103, 231, 91, 134}, {103, 231, 91, 135}, {103, 231, 91, 136}, {103, 231, 91, 137}, {103, 231, 91, 138}, {103, 231, 91, 139}, {103, 231, 91, 140}}},
{Region: models.CyberghostRegion("New Zealand"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{103, 231, 91, 131}, {103, 231, 91, 132}, {103, 231, 91, 133}, {103, 231, 91, 134}, {103, 231, 91, 135}, {103, 231, 91, 136}, {103, 231, 91, 137}, {103, 231, 91, 138}, {103, 231, 91, 139}, {103, 231, 91, 140}}},
{Region: models.CyberghostRegion("Nigeria"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 137, 196, 6}, {45, 137, 196, 10}, {45, 137, 196, 12}, {45, 137, 196, 13}, {45, 137, 196, 15}, {45, 137, 196, 16}, {45, 137, 196, 17}, {45, 137, 196, 20}, {45, 137, 196, 24}, {45, 137, 196, 29}}},
{Region: models.CyberghostRegion("Nigeria"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 137, 196, 6}, {45, 137, 196, 7}, {45, 137, 196, 8}, {45, 137, 196, 9}, {45, 137, 196, 12}, {45, 137, 196, 13}, {45, 137, 196, 14}, {45, 137, 196, 20}, {45, 137, 196, 28}, {45, 137, 196, 29}}},
{Region: models.CyberghostRegion("Norway"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 12, 223, 131}, {45, 12, 223, 135}, {45, 12, 223, 136}, {45, 12, 223, 138}, {185, 206, 225, 231}, {185, 206, 225, 233}, {185, 253, 97, 235}, {185, 253, 97, 236}, {185, 253, 97, 247}, {185, 253, 97, 253}}},
{Region: models.CyberghostRegion("Norway"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 12, 223, 132}, {45, 12, 223, 137}, {45, 12, 223, 138}, {45, 12, 223, 141}, {185, 206, 225, 27}, {185, 206, 225, 30}, {185, 253, 97, 245}, {185, 253, 97, 246}, {185, 253, 97, 248}, {185, 253, 97, 249}}},
{Region: models.CyberghostRegion("Pakistan"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{103, 76, 3, 244}, {103, 76, 3, 245}, {103, 76, 3, 246}, {103, 76, 3, 247}, {103, 76, 3, 248}, {103, 76, 3, 249}, {103, 76, 3, 250}, {103, 76, 3, 251}, {103, 76, 3, 252}, {103, 76, 3, 253}}},
{Region: models.CyberghostRegion("Pakistan"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{103, 76, 3, 244}, {103, 76, 3, 245}, {103, 76, 3, 246}, {103, 76, 3, 247}, {103, 76, 3, 248}, {103, 76, 3, 249}, {103, 76, 3, 250}, {103, 76, 3, 251}, {103, 76, 3, 252}, {103, 76, 3, 253}}},
{Region: models.CyberghostRegion("Panama"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 210, 9}, {45, 131, 210, 10}, {45, 131, 210, 14}, {45, 131, 210, 15}, {45, 131, 210, 16}, {45, 131, 210, 21}, {45, 131, 210, 22}, {45, 131, 210, 23}, {45, 131, 210, 24}, {45, 131, 210, 26}}},
{Region: models.CyberghostRegion("Panama"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 210, 6}, {45, 131, 210, 8}, {45, 131, 210, 9}, {45, 131, 210, 12}, {45, 131, 210, 14}, {45, 131, 210, 18}, {45, 131, 210, 19}, {45, 131, 210, 25}, {45, 131, 210, 28}, {45, 131, 210, 29}}},
{Region: models.CyberghostRegion("Philippines"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{188, 214, 125, 39}, {188, 214, 125, 45}, {188, 214, 125, 47}, {188, 214, 125, 49}, {188, 214, 125, 50}, {188, 214, 125, 51}, {188, 214, 125, 53}, {188, 214, 125, 57}, {188, 214, 125, 58}, {188, 214, 125, 61}}},
{Region: models.CyberghostRegion("Philippines"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{188, 214, 125, 35}, {188, 214, 125, 36}, {188, 214, 125, 37}, {188, 214, 125, 48}, {188, 214, 125, 55}, {188, 214, 125, 56}, {188, 214, 125, 57}, {188, 214, 125, 58}, {188, 214, 125, 59}, {188, 214, 125, 62}}},
{Region: models.CyberghostRegion("Poland"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 156, 11}, {37, 120, 156, 17}, {37, 120, 156, 23}, {37, 120, 156, 25}, {37, 120, 156, 26}, {51, 75, 56, 35}, {51, 75, 56, 37}, {51, 75, 56, 41}, {54, 37, 238, 36}, {54, 37, 238, 43}}},
{Region: models.CyberghostRegion("Poland"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{37, 120, 156, 8}, {37, 120, 156, 10}, {37, 120, 156, 12}, {37, 120, 156, 18}, {37, 120, 156, 19}, {37, 120, 156, 24}, {51, 75, 56, 33}, {51, 75, 56, 40}, {51, 75, 56, 41}, {54, 37, 238, 33}}},
{Region: models.CyberghostRegion("Portugal"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{89, 26, 243, 47}, {89, 26, 243, 48}, {89, 26, 243, 50}, {89, 26, 243, 51}, {89, 26, 243, 54}, {89, 26, 243, 58}, {89, 26, 243, 60}, {185, 90, 57, 172}, {185, 90, 57, 176}, {185, 90, 57, 179}}},
{Region: models.CyberghostRegion("Portugal"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{89, 26, 243, 47}, {89, 26, 243, 50}, {89, 26, 243, 51}, {89, 26, 243, 53}, {89, 26, 243, 58}, {185, 90, 57, 173}, {185, 90, 57, 175}, {185, 90, 57, 176}, {185, 90, 57, 178}, {185, 90, 57, 179}}},
{Region: models.CyberghostRegion("Qatar"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 7, 6}, {45, 131, 7, 9}, {45, 131, 7, 10}, {45, 131, 7, 13}, {45, 131, 7, 16}, {45, 131, 7, 17}, {45, 131, 7, 20}, {45, 131, 7, 22}, {45, 131, 7, 23}, {45, 131, 7, 28}}},
{Region: models.CyberghostRegion("Qatar"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 7, 8}, {45, 131, 7, 9}, {45, 131, 7, 14}, {45, 131, 7, 15}, {45, 131, 7, 16}, {45, 131, 7, 17}, {45, 131, 7, 23}, {45, 131, 7, 27}, {45, 131, 7, 28}, {45, 131, 7, 29}}},
{Region: models.CyberghostRegion("Romania"), Group: models.CyberghostGroup("NoSpy TCP Europe"), IPs: []net.IP{{85, 9, 20, 134}, {85, 9, 20, 135}, {85, 9, 20, 137}, {85, 9, 20, 138}, {85, 9, 20, 139}, {85, 9, 20, 147}, {85, 9, 20, 149}, {85, 9, 20, 154}, {85, 9, 20, 248}, {85, 9, 20, 249}}},
{Region: models.CyberghostRegion("Romania"), Group: models.CyberghostGroup("NoSpy UDP Europe"), IPs: []net.IP{{85, 9, 20, 134}, {85, 9, 20, 138}, {85, 9, 20, 139}, {85, 9, 20, 144}, {85, 9, 20, 145}, {85, 9, 20, 147}, {85, 9, 20, 148}, {85, 9, 20, 151}, {85, 9, 20, 248}, {85, 9, 20, 249}}},
{Region: models.CyberghostRegion("Romania"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{193, 176, 84, 44}, {193, 176, 84, 49}, {193, 176, 84, 51}, {193, 176, 84, 52}, {193, 176, 84, 88}, {193, 176, 84, 121}, {193, 176, 84, 126}, {193, 176, 85, 72}, {193, 176, 85, 74}, {193, 176, 85, 101}}},
{Region: models.CyberghostRegion("Romania"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{193, 176, 84, 46}, {193, 176, 84, 47}, {193, 176, 84, 48}, {193, 176, 84, 49}, {193, 176, 84, 90}, {193, 176, 84, 125}, {193, 176, 85, 68}, {193, 176, 85, 72}, {193, 176, 85, 78}, {193, 176, 85, 91}}},
{Region: models.CyberghostRegion("Russian Federation"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 132, 192, 42}, {45, 132, 192, 43}, {45, 132, 192, 49}, {45, 132, 192, 60}, {45, 132, 192, 63}, {45, 132, 192, 66}, {45, 132, 192, 78}, {45, 132, 192, 80}, {45, 132, 192, 85}, {45, 132, 192, 96}}},
{Region: models.CyberghostRegion("Russian Federation"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 132, 192, 11}, {45, 132, 192, 15}, {45, 132, 192, 24}, {45, 132, 192, 32}, {45, 132, 192, 43}, {45, 132, 192, 49}, {45, 132, 192, 55}, {45, 132, 192, 63}, {45, 132, 192, 65}, {45, 132, 192, 95}}},
{Region: models.CyberghostRegion("Saudi Arabia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 6, 7}, {45, 131, 6, 10}, {45, 131, 6, 12}, {45, 131, 6, 13}, {45, 131, 6, 21}, {45, 131, 6, 23}, {45, 131, 6, 24}, {45, 131, 6, 25}, {45, 131, 6, 26}, {45, 131, 6, 28}}},
{Region: models.CyberghostRegion("Saudi Arabia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 6, 7}, {45, 131, 6, 9}, {45, 131, 6, 14}, {45, 131, 6, 15}, {45, 131, 6, 18}, {45, 131, 6, 19}, {45, 131, 6, 22}, {45, 131, 6, 24}, {45, 131, 6, 28}, {45, 131, 6, 29}}},
{Region: models.CyberghostRegion("Serbia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 193, 179}, {37, 120, 193, 181}, {37, 120, 193, 182}, {37, 120, 193, 183}, {37, 120, 193, 184}, {37, 120, 193, 186}, {37, 120, 193, 190}, {141, 98, 103, 37}, {141, 98, 103, 43}, {141, 98, 103, 46}}},
{Region: models.CyberghostRegion("Serbia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{37, 120, 193, 179}, {37, 120, 193, 182}, {37, 120, 193, 183}, {37, 120, 193, 188}, {37, 120, 193, 189}, {37, 120, 193, 190}, {141, 98, 103, 35}, {141, 98, 103, 40}, {141, 98, 103, 42}, {141, 98, 103, 46}}},
{Region: models.CyberghostRegion("Singapore"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{37, 120, 151, 55}, {37, 120, 151, 60}, {37, 120, 151, 131}, {37, 120, 151, 139}, {84, 17, 39, 168}, {84, 17, 39, 175}, {84, 17, 39, 176}, {84, 17, 39, 179}, {84, 17, 39, 182}, {84, 17, 39, 185}}},
{Region: models.CyberghostRegion("Singapore"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{37, 120, 151, 51}, {37, 120, 151, 57}, {37, 120, 151, 131}, {37, 120, 151, 132}, {37, 120, 151, 140}, {37, 120, 151, 141}, {84, 17, 39, 165}, {84, 17, 39, 169}, {84, 17, 39, 171}, {84, 17, 39, 180}}},
{Region: models.CyberghostRegion("Slovakia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{185, 245, 85, 227}, {185, 245, 85, 228}, {185, 245, 85, 229}, {185, 245, 85, 230}, {185, 245, 85, 231}, {185, 245, 85, 232}, {185, 245, 85, 233}, {185, 245, 85, 234}, {185, 245, 85, 235}, {185, 245, 85, 236}}},
{Region: models.CyberghostRegion("Slovakia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{185, 245, 85, 227}, {185, 245, 85, 228}, {185, 245, 85, 229}, {185, 245, 85, 230}, {185, 245, 85, 231}, {185, 245, 85, 232}, {185, 245, 85, 233}, {185, 245, 85, 234}, {185, 245, 85, 235}, {185, 245, 85, 236}}},
{Region: models.CyberghostRegion("Slovenia"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{146, 247, 25, 79}, {146, 247, 25, 80}, {146, 247, 25, 81}, {146, 247, 25, 83}, {146, 247, 25, 84}, {146, 247, 25, 85}, {146, 247, 25, 86}, {146, 247, 25, 87}, {146, 247, 25, 88}, {146, 247, 25, 90}}},
{Region: models.CyberghostRegion("Slovenia"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{146, 247, 25, 80}, {146, 247, 25, 81}, {146, 247, 25, 82}, {146, 247, 25, 83}, {146, 247, 25, 84}, {146, 247, 25, 85}, {146, 247, 25, 86}, {146, 247, 25, 87}, {146, 247, 25, 88}, {146, 247, 25, 89}}},
{Region: models.CyberghostRegion("South Africa"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{165, 73, 248, 211}, {165, 73, 248, 214}, {165, 73, 248, 222}, {165, 73, 248, 227}, {165, 73, 248, 229}, {165, 73, 248, 230}, {165, 73, 248, 231}, {165, 73, 248, 234}, {165, 73, 248, 236}, {165, 73, 248, 237}}},
{Region: models.CyberghostRegion("South Africa"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{197, 85, 7, 26}, {197, 85, 7, 27}, {197, 85, 7, 28}, {197, 85, 7, 29}, {197, 85, 7, 30}, {197, 85, 7, 31}, {197, 85, 7, 131}, {197, 85, 7, 132}, {197, 85, 7, 133}, {197, 85, 7, 134}}},
{Region: models.CyberghostRegion("South Africa"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{165, 73, 248, 212}, {165, 73, 248, 215}, {165, 73, 248, 217}, {165, 73, 248, 218}, {165, 73, 248, 219}, {165, 73, 248, 222}, {165, 73, 248, 227}, {165, 73, 248, 230}, {165, 73, 248, 234}, {165, 73, 248, 237}}},
{Region: models.CyberghostRegion("South Africa"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{197, 85, 7, 26}, {197, 85, 7, 27}, {197, 85, 7, 28}, {197, 85, 7, 29}, {197, 85, 7, 30}, {197, 85, 7, 31}, {197, 85, 7, 131}, {197, 85, 7, 132}, {197, 85, 7, 133}, {197, 85, 7, 134}}},
{Region: models.CyberghostRegion("Spain"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 142, 163}, {37, 120, 142, 166}, {37, 120, 142, 167}, {84, 17, 62, 138}, {84, 17, 62, 141}, {84, 17, 62, 145}, {84, 17, 62, 147}, {84, 17, 62, 152}, {185, 93, 3, 113}, {185, 93, 182, 139}}},
{Region: models.CyberghostRegion("Spain"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{37, 120, 142, 150}, {37, 120, 142, 157}, {37, 120, 142, 165}, {84, 17, 62, 139}, {84, 17, 62, 142}, {185, 93, 3, 109}, {185, 93, 3, 111}, {185, 93, 3, 113}, {185, 93, 182, 136}, {185, 93, 182, 138}}},
{Region: models.CyberghostRegion("Sri Lanka"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 132, 136, 6}, {45, 132, 136, 7}, {45, 132, 136, 8}, {45, 132, 136, 12}, {45, 132, 136, 13}, {45, 132, 136, 17}, {45, 132, 136, 21}, {45, 132, 136, 22}, {45, 132, 136, 26}, {45, 132, 136, 27}}},
{Region: models.CyberghostRegion("Sri Lanka"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 132, 136, 7}, {45, 132, 136, 9}, {45, 132, 136, 10}, {45, 132, 136, 11}, {45, 132, 136, 12}, {45, 132, 136, 15}, {45, 132, 136, 20}, {45, 132, 136, 21}, {45, 132, 136, 27}, {45, 132, 136, 29}}},
{Region: models.CyberghostRegion("Sweden"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{46, 246, 65, 151}, {46, 246, 65, 156}, {46, 246, 65, 157}, {46, 246, 65, 167}, {46, 246, 65, 203}, {46, 246, 65, 221}, {91, 132, 138, 51}, {188, 126, 64, 101}, {188, 126, 66, 3}, {188, 126, 66, 8}}},
{Region: models.CyberghostRegion("Sweden"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{46, 246, 65, 167}, {46, 246, 65, 170}, {46, 246, 65, 172}, {46, 246, 65, 181}, {46, 246, 65, 214}, {46, 246, 65, 215}, {91, 132, 138, 57}, {188, 126, 66, 8}, {188, 126, 66, 24}, {188, 126, 66, 29}}},
{Region: models.CyberghostRegion("Switzerland"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{84, 17, 52, 14}, {84, 17, 52, 39}, {84, 17, 52, 68}, {84, 17, 52, 73}, {84, 17, 52, 84}, {89, 187, 165, 131}, {185, 32, 222, 8}, {185, 32, 222, 105}, {195, 225, 118, 38}, {195, 225, 118, 56}}},
{Region: models.CyberghostRegion("Switzerland"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{84, 17, 52, 15}, {84, 17, 52, 20}, {84, 17, 52, 36}, {84, 17, 52, 52}, {84, 17, 52, 62}, {84, 17, 52, 75}, {91, 132, 136, 174}, {91, 132, 136, 205}, {91, 132, 136, 206}, {185, 32, 222, 113}}},
{Region: models.CyberghostRegion("Taiwan"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{45, 133, 181, 102}, {45, 133, 181, 105}, {45, 133, 181, 106}, {45, 133, 181, 108}, {45, 133, 181, 110}, {45, 133, 181, 112}, {45, 133, 181, 114}, {45, 133, 181, 117}, {45, 133, 181, 120}, {45, 133, 181, 124}}},
{Region: models.CyberghostRegion("Taiwan"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{45, 133, 181, 102}, {45, 133, 181, 103}, {45, 133, 181, 110}, {45, 133, 181, 111}, {45, 133, 181, 112}, {45, 133, 181, 114}, {45, 133, 181, 118}, {45, 133, 181, 120}, {45, 133, 181, 125}, {45, 133, 181, 126}}},
{Region: models.CyberghostRegion("Thailand"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{119, 59, 98, 238}, {119, 59, 98, 239}, {119, 59, 98, 243}, {119, 59, 98, 244}, {119, 59, 98, 248}, {119, 59, 98, 249}, {119, 59, 121, 165}, {119, 59, 121, 166}, {119, 59, 121, 171}, {119, 59, 121, 173}}},
{Region: models.CyberghostRegion("Thailand"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{119, 59, 98, 214}, {119, 59, 98, 238}, {119, 59, 98, 244}, {119, 59, 98, 247}, {119, 59, 121, 163}, {119, 59, 121, 165}, {119, 59, 121, 166}, {119, 59, 121, 167}, {119, 59, 121, 173}, {119, 59, 121, 175}}},
{Region: models.CyberghostRegion("Turkey"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{188, 213, 34, 9}, {188, 213, 34, 22}, {188, 213, 34, 24}, {188, 213, 34, 27}, {188, 213, 34, 28}, {188, 213, 34, 35}, {188, 213, 34, 41}, {188, 213, 34, 44}, {188, 213, 34, 45}, {188, 213, 34, 46}}},
{Region: models.CyberghostRegion("Turkey"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{188, 213, 34, 3}, {188, 213, 34, 13}, {188, 213, 34, 18}, {188, 213, 34, 25}, {188, 213, 34, 27}, {188, 213, 34, 30}, {188, 213, 34, 35}, {188, 213, 34, 37}, {188, 213, 34, 38}, {188, 213, 34, 44}}},
{Region: models.CyberghostRegion("Ukraine"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{31, 28, 161, 21}, {31, 28, 163, 34}, {31, 28, 163, 35}, {31, 28, 163, 38}, {31, 28, 163, 50}, {62, 149, 7, 164}, {62, 149, 7, 167}, {62, 149, 29, 50}, {62, 149, 29, 53}, {62, 149, 29, 56}}},
{Region: models.CyberghostRegion("Ukraine"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{31, 28, 161, 20}, {31, 28, 161, 28}, {31, 28, 161, 30}, {31, 28, 163, 37}, {31, 28, 163, 45}, {31, 28, 163, 53}, {31, 28, 163, 56}, {31, 28, 163, 59}, {62, 149, 7, 168}, {62, 149, 29, 56}}},
{Region: models.CyberghostRegion("United Arab Emirates"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 131, 5, 6}, {45, 131, 5, 9}, {45, 131, 5, 12}, {45, 131, 5, 14}, {45, 131, 5, 16}, {45, 131, 5, 17}, {45, 131, 5, 18}, {45, 131, 5, 27}, {45, 131, 5, 28}, {45, 131, 5, 29}}},
{Region: models.CyberghostRegion("United Arab Emirates"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 131, 5, 8}, {45, 131, 5, 14}, {45, 131, 5, 15}, {45, 131, 5, 20}, {45, 131, 5, 22}, {45, 131, 5, 23}, {45, 131, 5, 24}, {45, 131, 5, 26}, {45, 131, 5, 28}, {45, 131, 5, 29}}},
{Region: models.CyberghostRegion("United Kingdom"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{37, 120, 133, 134}, {37, 120, 133, 140}, {84, 17, 51, 32}, {84, 17, 51, 75}, {89, 238, 138, 243}, {89, 238, 183, 230}, {95, 154, 200, 144}, {95, 154, 200, 186}, {141, 98, 100, 56}, {141, 98, 100, 61}}},
{Region: models.CyberghostRegion("United Kingdom"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{37, 120, 133, 134}, {37, 120, 159, 35}, {81, 92, 206, 172}, {84, 17, 51, 34}, {84, 17, 51, 110}, {84, 17, 51, 115}, {89, 238, 135, 59}, {95, 154, 200, 147}, {95, 154, 200, 149}, {141, 98, 100, 58}}},
{Region: models.CyberghostRegion("United States"), Group: models.CyberghostGroup("Premium TCP USA"), IPs: []net.IP{{23, 105, 160, 184}, {38, 131, 126, 150}, {84, 17, 35, 32}, {89, 187, 182, 7}, {89, 187, 182, 31}, {176, 113, 72, 153}, {176, 113, 72, 167}, {192, 96, 203, 150}, {199, 115, 119, 238}, {212, 102, 41, 4}}},
{Region: models.CyberghostRegion("United States"), Group: models.CyberghostGroup("Premium UDP USA"), IPs: []net.IP{{23, 19, 68, 56}, {23, 82, 78, 29}, {23, 105, 191, 36}, {23, 105, 191, 51}, {84, 17, 35, 8}, {89, 187, 171, 138}, {108, 62, 96, 33}, {176, 113, 72, 151}, {192, 96, 203, 154}, {199, 115, 117, 70}}},
{Region: models.CyberghostRegion("Venezuela"), Group: models.CyberghostGroup("Premium TCP Europe"), IPs: []net.IP{{45, 133, 89, 6}, {45, 133, 89, 9}, {45, 133, 89, 11}, {45, 133, 89, 15}, {45, 133, 89, 17}, {45, 133, 89, 18}, {45, 133, 89, 22}, {45, 133, 89, 24}, {45, 133, 89, 26}, {45, 133, 89, 29}}},
{Region: models.CyberghostRegion("Venezuela"), Group: models.CyberghostGroup("Premium UDP Europe"), IPs: []net.IP{{45, 133, 89, 8}, {45, 133, 89, 9}, {45, 133, 89, 15}, {45, 133, 89, 17}, {45, 133, 89, 21}, {45, 133, 89, 22}, {45, 133, 89, 25}, {45, 133, 89, 26}, {45, 133, 89, 27}, {45, 133, 89, 29}}},
{Region: models.CyberghostRegion("Vietnam"), Group: models.CyberghostGroup("Premium TCP Asia"), IPs: []net.IP{{45, 117, 79, 118}, {45, 117, 79, 123}, {45, 117, 79, 124}, {45, 117, 79, 125}, {103, 238, 214, 131}, {103, 238, 214, 134}, {103, 238, 214, 135}, {103, 238, 214, 136}, {103, 238, 214, 137}, {103, 238, 214, 140}}},
{Region: models.CyberghostRegion("Vietnam"), Group: models.CyberghostGroup("Premium UDP Asia"), IPs: []net.IP{{45, 117, 79, 114}, {45, 117, 79, 116}, {45, 117, 79, 117}, {45, 117, 79, 118}, {45, 117, 79, 123}, {103, 238, 214, 134}, {103, 238, 214, 135}, {103, 238, 214, 136}, {103, 238, 214, 137}, {103, 238, 214, 140}}},
{Region: "Albania", Group: "Premium TCP Europe", IPs: []net.IP{{31, 171, 152, 99}, {31, 171, 152, 100}, {31, 171, 152, 102}, {31, 171, 152, 105}, {31, 171, 152, 107}, {31, 171, 152, 109}, {31, 171, 152, 133}, {31, 171, 152, 135}, {31, 171, 152, 136}, {31, 171, 152, 139}}},
{Region: "Albania", Group: "Premium UDP Europe", IPs: []net.IP{{31, 171, 152, 99}, {31, 171, 152, 101}, {31, 171, 152, 103}, {31, 171, 152, 105}, {31, 171, 152, 106}, {31, 171, 152, 133}, {31, 171, 152, 135}, {31, 171, 152, 137}, {31, 171, 152, 138}, {31, 171, 152, 139}}},
{Region: "Algeria", Group: "Premium TCP Europe", IPs: []net.IP{{45, 133, 91, 7}, {45, 133, 91, 9}, {45, 133, 91, 12}, {45, 133, 91, 15}, {45, 133, 91, 17}, {45, 133, 91, 18}, {45, 133, 91, 20}, {45, 133, 91, 23}, {45, 133, 91, 24}, {45, 133, 91, 26}}},
{Region: "Algeria", Group: "Premium UDP Europe", IPs: []net.IP{{45, 133, 91, 7}, {45, 133, 91, 10}, {45, 133, 91, 11}, {45, 133, 91, 15}, {45, 133, 91, 17}, {45, 133, 91, 18}, {45, 133, 91, 21}, {45, 133, 91, 25}, {45, 133, 91, 26}, {45, 133, 91, 29}}},
{Region: "Andorra", Group: "Premium TCP Europe", IPs: []net.IP{{45, 139, 49, 10}, {45, 139, 49, 14}, {45, 139, 49, 15}, {45, 139, 49, 16}, {45, 139, 49, 17}, {45, 139, 49, 18}, {45, 139, 49, 19}, {45, 139, 49, 23}, {45, 139, 49, 25}, {45, 139, 49, 28}}},
{Region: "Andorra", Group: "Premium UDP Europe", IPs: []net.IP{{45, 139, 49, 7}, {45, 139, 49, 9}, {45, 139, 49, 10}, {45, 139, 49, 12}, {45, 139, 49, 15}, {45, 139, 49, 16}, {45, 139, 49, 17}, {45, 139, 49, 25}, {45, 139, 49, 27}, {45, 139, 49, 28}}},
{Region: "Argentina", Group: "Premium TCP USA", IPs: []net.IP{{190, 106, 130, 16}, {190, 106, 130, 17}, {190, 106, 130, 20}, {190, 106, 130, 22}, {190, 106, 130, 23}, {190, 106, 130, 34}, {190, 106, 130, 37}, {190, 106, 130, 38}, {190, 106, 130, 44}, {190, 106, 130, 45}}},
{Region: "Argentina", Group: "Premium UDP USA", IPs: []net.IP{{190, 106, 130, 15}, {190, 106, 130, 16}, {190, 106, 130, 18}, {190, 106, 130, 19}, {190, 106, 130, 20}, {190, 106, 130, 34}, {190, 106, 130, 36}, {190, 106, 130, 37}, {190, 106, 130, 43}, {190, 106, 130, 52}}},
{Region: "Armenia", Group: "Premium TCP Europe", IPs: []net.IP{{45, 139, 50, 10}, {45, 139, 50, 12}, {45, 139, 50, 14}, {45, 139, 50, 18}, {45, 139, 50, 19}, {45, 139, 50, 20}, {45, 139, 50, 21}, {45, 139, 50, 26}, {45, 139, 50, 27}, {45, 139, 50, 29}}},
{Region: "Armenia", Group: "Premium UDP Europe", IPs: []net.IP{{45, 139, 50, 8}, {45, 139, 50, 10}, {45, 139, 50, 11}, {45, 139, 50, 14}, {45, 139, 50, 18}, {45, 139, 50, 20}, {45, 139, 50, 24}, {45, 139, 50, 26}, {45, 139, 50, 27}, {45, 139, 50, 29}}},
{Region: "Australia", Group: "Premium TCP Asia", IPs: []net.IP{{27, 50, 79, 3}, {27, 50, 79, 4}, {27, 50, 79, 5}, {27, 50, 79, 6}, {27, 50, 79, 9}, {27, 50, 79, 12}, {27, 50, 79, 14}, {103, 13, 101, 171}, {202, 130, 33, 114}, {202, 130, 33, 118}}},
{Region: "Australia", Group: "Premium UDP Asia", IPs: []net.IP{{27, 50, 79, 3}, {27, 50, 79, 6}, {27, 50, 79, 9}, {27, 50, 79, 10}, {27, 50, 79, 11}, {27, 50, 79, 13}, {103, 13, 101, 174}, {202, 130, 33, 114}, {202, 130, 33, 117}, {202, 130, 33, 118}}},
{Region: "Austria", Group: "Premium TCP Europe", IPs: []net.IP{{89, 187, 168, 133}, {89, 187, 168, 144}, {89, 187, 168, 150}, {89, 187, 168, 151}, {89, 187, 168, 162}, {89, 187, 168, 163}, {89, 187, 168, 164}, {89, 187, 168, 167}, {89, 187, 168, 178}, {89, 187, 168, 182}}},
{Region: "Austria", Group: "Premium UDP Europe", IPs: []net.IP{{89, 187, 168, 138}, {89, 187, 168, 139}, {89, 187, 168, 149}, {89, 187, 168, 150}, {89, 187, 168, 161}, {89, 187, 168, 165}, {89, 187, 168, 167}, {89, 187, 168, 168}, {89, 187, 168, 174}, {89, 187, 168, 182}}},
{Region: "Bahamas", Group: "Premium TCP USA", IPs: []net.IP{{45, 132, 143, 8}, {45, 132, 143, 10}, {45, 132, 143, 11}, {45, 132, 143, 19}, {45, 132, 143, 24}, {45, 132, 143, 28}, {45, 132, 143, 31}, {45, 132, 143, 42}, {45, 132, 143, 43}, {45, 132, 143, 44}}},
{Region: "Bahamas", Group: "Premium UDP USA", IPs: []net.IP{{45, 132, 143, 1}, {45, 132, 143, 2}, {45, 132, 143, 3}, {45, 132, 143, 5}, {45, 132, 143, 7}, {45, 132, 143, 18}, {45, 132, 143, 23}, {45, 132, 143, 30}, {45, 132, 143, 32}, {45, 132, 143, 48}}},
{Region: "Bangladesh", Group: "Premium TCP Asia", IPs: []net.IP{{45, 132, 142, 3}, {45, 132, 142, 8}, {45, 132, 142, 12}, {45, 132, 142, 20}, {45, 132, 142, 22}, {45, 132, 142, 26}, {45, 132, 142, 27}, {45, 132, 142, 37}, {45, 132, 142, 39}, {45, 132, 142, 42}}},
{Region: "Bangladesh", Group: "Premium UDP Asia", IPs: []net.IP{{45, 132, 142, 6}, {45, 132, 142, 8}, {45, 132, 142, 13}, {45, 132, 142, 18}, {45, 132, 142, 33}, {45, 132, 142, 35}, {45, 132, 142, 38}, {45, 132, 142, 41}, {45, 132, 142, 42}, {45, 132, 142, 45}}},
{Region: "Belarus", Group: "Premium TCP Europe", IPs: []net.IP{{45, 132, 194, 3}, {45, 132, 194, 4}, {45, 132, 194, 26}, {45, 132, 194, 28}, {45, 132, 194, 34}, {45, 132, 194, 38}, {45, 132, 194, 39}, {45, 132, 194, 42}, {45, 132, 194, 44}, {45, 132, 194, 48}}},
{Region: "Belarus", Group: "Premium UDP Europe", IPs: []net.IP{{45, 132, 194, 4}, {45, 132, 194, 5}, {45, 132, 194, 9}, {45, 132, 194, 10}, {45, 132, 194, 20}, {45, 132, 194, 25}, {45, 132, 194, 29}, {45, 132, 194, 31}, {45, 132, 194, 40}, {45, 132, 194, 45}}},
{Region: "Belgium", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 143, 52}, {37, 120, 143, 55}, {37, 120, 143, 58}, {185, 210, 217, 10}, {185, 210, 217, 54}, {185, 210, 217, 244}, {185, 210, 217, 251}, {185, 232, 21, 119}, {193, 9, 114, 228}, {193, 9, 114, 230}}},
{Region: "Belgium", Group: "Premium UDP Europe", IPs: []net.IP{{5, 253, 205, 22}, {5, 253, 205, 23}, {37, 120, 143, 165}, {185, 210, 217, 14}, {185, 210, 217, 248}, {185, 210, 217, 254}, {193, 9, 114, 212}, {193, 9, 114, 213}, {193, 9, 114, 219}, {193, 9, 114, 228}}},
{Region: "Bosnia and Herzegovina", Group: "Premium TCP Europe", IPs: []net.IP{{185, 99, 3, 57}, {185, 99, 3, 58}, {185, 99, 3, 72}, {185, 99, 3, 73}, {185, 99, 3, 74}, {185, 99, 3, 130}, {185, 99, 3, 131}, {185, 99, 3, 134}, {185, 99, 3, 135}, {185, 99, 3, 136}}},
{Region: "Bosnia and Herzegovina", Group: "Premium UDP Europe", IPs: []net.IP{{185, 99, 3, 57}, {185, 99, 3, 58}, {185, 99, 3, 72}, {185, 99, 3, 73}, {185, 99, 3, 74}, {185, 99, 3, 130}, {185, 99, 3, 131}, {185, 99, 3, 134}, {185, 99, 3, 135}, {185, 99, 3, 136}}},
{Region: "Brazil", Group: "Premium TCP USA", IPs: []net.IP{{45, 231, 207, 65}, {45, 231, 207, 67}, {45, 231, 207, 68}, {45, 231, 207, 69}, {45, 231, 207, 75}, {177, 67, 81, 170}, {181, 41, 203, 98}, {181, 41, 203, 100}, {181, 41, 203, 102}, {181, 41, 203, 110}}},
{Region: "Brazil", Group: "Premium UDP USA", IPs: []net.IP{{45, 231, 207, 77}, {177, 67, 81, 163}, {177, 67, 81, 164}, {177, 67, 81, 165}, {177, 67, 81, 167}, {177, 67, 81, 170}, {177, 67, 81, 173}, {177, 67, 81, 174}, {181, 41, 203, 103}, {181, 41, 203, 104}}},
{Region: "Bulgaria", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 152, 99}, {37, 120, 152, 102}, {37, 120, 152, 103}, {37, 120, 152, 104}, {37, 120, 152, 105}, {37, 120, 152, 106}, {37, 120, 152, 107}, {37, 120, 152, 108}, {37, 120, 152, 109}, {37, 120, 152, 110}}},
{Region: "Bulgaria", Group: "Premium UDP Europe", IPs: []net.IP{{37, 120, 152, 99}, {37, 120, 152, 100}, {37, 120, 152, 101}, {37, 120, 152, 103}, {37, 120, 152, 104}, {37, 120, 152, 105}, {37, 120, 152, 107}, {37, 120, 152, 108}, {37, 120, 152, 109}, {37, 120, 152, 110}}},
{Region: "Cambodia", Group: "Premium TCP Asia", IPs: []net.IP{{188, 215, 235, 36}, {188, 215, 235, 38}, {188, 215, 235, 39}, {188, 215, 235, 40}, {188, 215, 235, 43}, {188, 215, 235, 46}, {188, 215, 235, 47}, {188, 215, 235, 48}, {188, 215, 235, 51}, {188, 215, 235, 54}}},
{Region: "Cambodia", Group: "Premium UDP Asia", IPs: []net.IP{{188, 215, 235, 35}, {188, 215, 235, 36}, {188, 215, 235, 37}, {188, 215, 235, 38}, {188, 215, 235, 45}, {188, 215, 235, 46}, {188, 215, 235, 52}, {188, 215, 235, 53}, {188, 215, 235, 55}, {188, 215, 235, 58}}},
{Region: "Canada", Group: "Premium TCP USA", IPs: []net.IP{{37, 120, 205, 8}, {37, 120, 205, 28}, {104, 245, 145, 163}, {104, 245, 146, 38}, {104, 245, 146, 101}, {176, 113, 74, 44}, {176, 113, 74, 52}, {176, 113, 74, 67}, {176, 113, 74, 126}, {176, 113, 74, 217}}},
{Region: "Canada", Group: "Premium UDP USA", IPs: []net.IP{{37, 120, 205, 40}, {54, 39, 11, 194}, {104, 245, 145, 164}, {104, 245, 146, 41}, {139, 28, 218, 86}, {139, 28, 218, 87}, {176, 113, 74, 19}, {176, 113, 74, 25}, {176, 113, 74, 30}, {176, 113, 74, 195}}},
{Region: "Chile", Group: "Premium TCP USA", IPs: []net.IP{{190, 105, 239, 129}, {190, 105, 239, 130}, {190, 105, 239, 131}, {190, 105, 239, 132}, {190, 105, 239, 133}, {190, 105, 239, 134}, {190, 105, 239, 135}, {190, 105, 239, 136}, {190, 105, 239, 137}, {190, 105, 239, 138}}},
{Region: "Chile", Group: "Premium UDP USA", IPs: []net.IP{{190, 105, 239, 129}, {190, 105, 239, 130}, {190, 105, 239, 131}, {190, 105, 239, 132}, {190, 105, 239, 133}, {190, 105, 239, 134}, {190, 105, 239, 135}, {190, 105, 239, 136}, {190, 105, 239, 137}, {190, 105, 239, 138}}},
{Region: "China", Group: "Premium TCP Asia", IPs: []net.IP{{45, 132, 193, 2}, {45, 132, 193, 3}, {45, 132, 193, 9}, {45, 132, 193, 10}, {45, 132, 193, 12}, {45, 132, 193, 13}, {45, 132, 193, 32}, {45, 132, 193, 36}, {45, 132, 193, 43}, {45, 132, 193, 45}}},
{Region: "China", Group: "Premium UDP Asia", IPs: []net.IP{{45, 132, 193, 2}, {45, 132, 193, 3}, {45, 132, 193, 4}, {45, 132, 193, 14}, {45, 132, 193, 19}, {45, 132, 193, 22}, {45, 132, 193, 30}, {45, 132, 193, 35}, {45, 132, 193, 36}, {45, 132, 193, 42}}},
{Region: "Colombia", Group: "Premium TCP USA", IPs: []net.IP{{190, 105, 229, 19}, {190, 105, 229, 20}, {190, 105, 229, 21}, {190, 105, 229, 22}}},
{Region: "Colombia", Group: "Premium UDP USA", IPs: []net.IP{{190, 105, 229, 19}, {190, 105, 229, 20}, {190, 105, 229, 21}, {190, 105, 229, 22}}},
{Region: "Costa Rica", Group: "Premium TCP USA", IPs: []net.IP{{143, 202, 160, 67}, {143, 202, 160, 69}, {143, 202, 160, 70}, {143, 202, 160, 72}, {143, 202, 160, 73}, {143, 202, 160, 74}, {143, 202, 160, 75}, {143, 202, 160, 76}, {143, 202, 160, 77}, {143, 202, 160, 78}}},
{Region: "Costa Rica", Group: "Premium UDP USA", IPs: []net.IP{{143, 202, 160, 67}, {143, 202, 160, 68}, {143, 202, 160, 69}, {143, 202, 160, 70}, {143, 202, 160, 71}, {143, 202, 160, 73}, {143, 202, 160, 74}, {143, 202, 160, 75}, {143, 202, 160, 76}, {143, 202, 160, 78}}},
{Region: "Cyprus", Group: "Premium TCP Europe", IPs: []net.IP{{45, 132, 137, 8}, {45, 132, 137, 11}, {45, 132, 137, 12}, {45, 132, 137, 15}, {45, 132, 137, 17}, {45, 132, 137, 18}, {45, 132, 137, 19}, {45, 132, 137, 23}, {45, 132, 137, 26}, {45, 132, 137, 28}}},
{Region: "Cyprus", Group: "Premium UDP Europe", IPs: []net.IP{{45, 132, 137, 8}, {45, 132, 137, 10}, {45, 132, 137, 16}, {45, 132, 137, 19}, {45, 132, 137, 20}, {45, 132, 137, 21}, {45, 132, 137, 22}, {45, 132, 137, 23}, {45, 132, 137, 25}, {45, 132, 137, 28}}},
{Region: "Czech Republic", Group: "Premium TCP Europe", IPs: []net.IP{{195, 181, 160, 66}, {195, 181, 160, 72}, {195, 181, 161, 7}, {195, 181, 161, 9}, {195, 181, 161, 10}, {195, 181, 161, 11}, {195, 181, 161, 14}, {195, 181, 161, 17}, {195, 181, 161, 23}, {195, 181, 161, 25}}},
{Region: "Czech Republic", Group: "Premium UDP Europe", IPs: []net.IP{{185, 216, 35, 231}, {185, 216, 35, 232}, {185, 216, 35, 235}, {195, 181, 160, 75}, {195, 181, 161, 2}, {195, 181, 161, 8}, {195, 181, 161, 15}, {195, 181, 161, 16}, {195, 181, 161, 23}, {195, 181, 161, 25}}},
{Region: "Denmark", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 145, 93}, {37, 120, 194, 39}, {37, 120, 194, 41}, {37, 120, 194, 53}, {95, 174, 65, 166}, {95, 174, 65, 167}, {95, 174, 65, 174}, {185, 206, 224, 230}, {185, 206, 224, 235}, {185, 206, 224, 253}}},
{Region: "Denmark", Group: "Premium UDP Europe", IPs: []net.IP{{37, 120, 145, 84}, {37, 120, 145, 88}, {37, 120, 194, 38}, {37, 120, 194, 58}, {95, 174, 65, 163}, {95, 174, 65, 165}, {185, 206, 224, 227}, {185, 206, 224, 243}, {185, 206, 224, 245}, {185, 206, 224, 253}}},
{Region: "Egypt", Group: "Premium TCP Europe", IPs: []net.IP{{45, 132, 139, 7}, {45, 132, 139, 22}, {45, 132, 139, 24}, {45, 132, 139, 27}, {45, 132, 139, 28}, {45, 132, 139, 29}, {188, 214, 122, 36}, {188, 214, 122, 41}, {188, 214, 122, 52}, {188, 214, 122, 56}}},
{Region: "Egypt", Group: "Premium UDP Europe", IPs: []net.IP{{45, 132, 139, 7}, {45, 132, 139, 17}, {45, 132, 139, 18}, {45, 132, 139, 22}, {45, 132, 139, 23}, {188, 214, 122, 41}, {188, 214, 122, 48}, {188, 214, 122, 49}, {188, 214, 122, 51}, {188, 214, 122, 61}}},
{Region: "Estonia", Group: "Premium TCP Europe", IPs: []net.IP{{77, 247, 111, 6}, {77, 247, 111, 11}, {77, 247, 111, 52}, {77, 247, 111, 53}, {77, 247, 111, 55}, {77, 247, 111, 56}, {77, 247, 111, 57}, {77, 247, 111, 60}, {77, 247, 111, 61}, {77, 247, 111, 62}}},
{Region: "Estonia", Group: "Premium UDP Europe", IPs: []net.IP{{77, 247, 111, 3}, {77, 247, 111, 4}, {77, 247, 111, 5}, {77, 247, 111, 7}, {77, 247, 111, 11}, {77, 247, 111, 12}, {77, 247, 111, 52}, {77, 247, 111, 53}, {77, 247, 111, 55}, {77, 247, 111, 59}}},
{Region: "Finland", Group: "Premium TCP Europe", IPs: []net.IP{{194, 34, 133, 171}, {194, 34, 133, 172}, {194, 34, 133, 176}, {194, 34, 133, 179}, {194, 34, 133, 180}, {194, 34, 133, 195}, {194, 34, 133, 196}, {194, 34, 133, 204}, {194, 34, 133, 207}, {194, 34, 133, 208}}},
{Region: "Finland", Group: "Premium UDP Europe", IPs: []net.IP{{194, 34, 133, 163}, {194, 34, 133, 164}, {194, 34, 133, 167}, {194, 34, 133, 178}, {194, 34, 133, 192}, {194, 34, 133, 201}, {194, 34, 133, 205}, {194, 34, 133, 206}, {194, 34, 133, 208}, {194, 34, 133, 214}}},
{Region: "France", Group: "Premium TCP Europe", IPs: []net.IP{{84, 17, 60, 21}, {84, 17, 60, 33}, {84, 17, 60, 89}, {84, 17, 60, 92}, {84, 17, 60, 114}, {84, 17, 61, 23}, {84, 17, 61, 43}, {84, 17, 61, 111}, {84, 17, 61, 235}, {151, 106, 8, 36}}},
{Region: "France", Group: "Premium UDP Europe", IPs: []net.IP{{84, 17, 60, 8}, {84, 17, 60, 54}, {84, 17, 60, 161}, {84, 17, 60, 188}, {84, 17, 61, 32}, {84, 17, 61, 101}, {84, 17, 61, 163}, {84, 17, 61, 187}, {84, 17, 61, 213}, {151, 106, 8, 46}}},
{Region: "Georgia", Group: "Premium TCP Europe", IPs: []net.IP{{45, 132, 138, 7}, {45, 132, 138, 8}, {45, 132, 138, 9}, {45, 132, 138, 12}, {45, 132, 138, 14}, {45, 132, 138, 18}, {45, 132, 138, 19}, {45, 132, 138, 20}, {45, 132, 138, 23}, {45, 132, 138, 27}}},
{Region: "Georgia", Group: "Premium UDP Europe", IPs: []net.IP{{45, 132, 138, 7}, {45, 132, 138, 8}, {45, 132, 138, 9}, {45, 132, 138, 10}, {45, 132, 138, 17}, {45, 132, 138, 18}, {45, 132, 138, 25}, {45, 132, 138, 26}, {45, 132, 138, 27}, {45, 132, 138, 28}}},
{Region: "Germany", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 217, 110}, {84, 17, 48, 75}, {84, 17, 48, 100}, {84, 17, 48, 182}, {84, 17, 49, 129}, {154, 28, 188, 50}, {154, 28, 188, 128}, {178, 162, 208, 155}, {178, 162, 209, 72}, {178, 162, 216, 49}}},
{Region: "Germany", Group: "Premium UDP Europe", IPs: []net.IP{{37, 120, 217, 5}, {37, 120, 217, 27}, {84, 17, 48, 20}, {84, 17, 48, 64}, {84, 17, 48, 68}, {84, 17, 48, 182}, {84, 17, 49, 141}, {84, 17, 49, 144}, {154, 28, 188, 90}, {154, 28, 188, 143}}},
{Region: "Greece", Group: "Premium TCP Europe", IPs: []net.IP{{154, 57, 3, 130}, {154, 57, 3, 132}, {154, 57, 3, 135}, {154, 57, 3, 138}, {154, 57, 3, 140}, {188, 123, 126, 168}, {188, 123, 126, 170}, {188, 123, 126, 176}, {188, 123, 126, 177}, {188, 123, 126, 178}}},
{Region: "Greece", Group: "Premium UDP Europe", IPs: []net.IP{{154, 57, 3, 130}, {154, 57, 3, 132}, {154, 57, 3, 133}, {154, 57, 3, 137}, {188, 123, 126, 167}, {188, 123, 126, 170}, {188, 123, 126, 172}, {188, 123, 126, 173}, {188, 123, 126, 174}, {188, 123, 126, 177}}},
{Region: "Greenland", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 209, 8}, {45, 131, 209, 9}, {45, 131, 209, 12}, {45, 131, 209, 16}, {45, 131, 209, 18}, {45, 131, 209, 20}, {45, 131, 209, 22}, {45, 131, 209, 23}, {45, 131, 209, 26}, {45, 131, 209, 27}}},
{Region: "Greenland", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 209, 6}, {45, 131, 209, 11}, {45, 131, 209, 19}, {45, 131, 209, 20}, {45, 131, 209, 21}, {45, 131, 209, 23}, {45, 131, 209, 26}, {45, 131, 209, 27}, {45, 131, 209, 28}, {45, 131, 209, 29}}},
{Region: "Hong Kong", Group: "Premium TCP Asia", IPs: []net.IP{{84, 17, 56, 130}, {84, 17, 56, 136}, {84, 17, 56, 148}, {84, 17, 56, 149}, {84, 17, 56, 152}, {84, 17, 56, 172}, {84, 17, 56, 173}, {84, 17, 56, 175}, {84, 17, 56, 176}, {84, 17, 56, 181}}},
{Region: "Hong Kong", Group: "Premium UDP Asia", IPs: []net.IP{{84, 17, 56, 133}, {84, 17, 56, 140}, {84, 17, 56, 146}, {84, 17, 56, 151}, {84, 17, 56, 162}, {84, 17, 56, 166}, {84, 17, 56, 172}, {84, 17, 56, 174}, {84, 17, 56, 176}, {84, 17, 56, 182}}},
{Region: "Hungary", Group: "Premium TCP Europe", IPs: []net.IP{{185, 104, 187, 83}, {185, 104, 187, 85}, {185, 104, 187, 86}, {185, 104, 187, 92}, {185, 189, 114, 116}, {185, 189, 114, 119}, {185, 189, 114, 120}, {185, 189, 114, 121}, {185, 189, 114, 124}, {185, 189, 114, 125}}},
{Region: "Hungary", Group: "Premium UDP Europe", IPs: []net.IP{{185, 104, 187, 83}, {185, 104, 187, 85}, {185, 104, 187, 93}, {185, 189, 114, 115}, {185, 189, 114, 118}, {185, 189, 114, 119}, {185, 189, 114, 120}, {185, 189, 114, 121}, {185, 189, 114, 123}, {185, 189, 114, 125}}},
{Region: "Iceland", Group: "Premium TCP Europe", IPs: []net.IP{{213, 167, 139, 19}, {213, 167, 139, 20}, {213, 167, 139, 21}, {213, 167, 139, 22}, {213, 167, 139, 23}, {213, 167, 139, 24}, {213, 167, 139, 25}, {213, 167, 139, 26}, {213, 167, 139, 28}, {213, 167, 139, 30}}},
{Region: "Iceland", Group: "Premium UDP Europe", IPs: []net.IP{{213, 167, 139, 19}, {213, 167, 139, 21}, {213, 167, 139, 22}, {213, 167, 139, 24}, {213, 167, 139, 25}, {213, 167, 139, 26}, {213, 167, 139, 27}, {213, 167, 139, 28}, {213, 167, 139, 29}, {213, 167, 139, 30}}},
{Region: "India", Group: "Premium TCP Europe", IPs: []net.IP{{43, 241, 71, 115}, {43, 241, 71, 118}, {43, 241, 71, 120}, {43, 241, 71, 122}, {43, 241, 71, 125}, {43, 241, 71, 147}, {43, 241, 71, 148}, {43, 241, 71, 149}, {43, 241, 71, 154}, {43, 241, 71, 156}}},
{Region: "India", Group: "Premium UDP Europe", IPs: []net.IP{{43, 241, 71, 116}, {43, 241, 71, 117}, {43, 241, 71, 118}, {43, 241, 71, 122}, {43, 241, 71, 125}, {43, 241, 71, 147}, {43, 241, 71, 148}, {43, 241, 71, 153}, {43, 241, 71, 155}, {43, 241, 71, 156}}},
{Region: "Indonesia", Group: "Premium TCP Asia", IPs: []net.IP{{113, 20, 29, 243}, {113, 20, 29, 244}, {113, 20, 29, 246}, {113, 20, 29, 247}, {113, 20, 29, 248}, {113, 20, 29, 249}, {113, 20, 29, 250}, {113, 20, 29, 251}, {113, 20, 29, 252}, {113, 20, 29, 254}}},
{Region: "Indonesia", Group: "Premium UDP Asia", IPs: []net.IP{{113, 20, 29, 243}, {113, 20, 29, 245}, {113, 20, 29, 246}, {113, 20, 29, 247}, {113, 20, 29, 248}, {113, 20, 29, 249}, {113, 20, 29, 250}, {113, 20, 29, 251}, {113, 20, 29, 252}, {113, 20, 29, 253}}},
{Region: "Iran", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 4, 10}, {45, 131, 4, 16}, {45, 131, 4, 17}, {45, 131, 4, 18}, {45, 131, 4, 20}, {45, 131, 4, 21}, {45, 131, 4, 22}, {45, 131, 4, 24}, {45, 131, 4, 25}, {45, 131, 4, 28}}},
{Region: "Iran", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 4, 6}, {45, 131, 4, 8}, {45, 131, 4, 12}, {45, 131, 4, 14}, {45, 131, 4, 15}, {45, 131, 4, 20}, {45, 131, 4, 23}, {45, 131, 4, 24}, {45, 131, 4, 27}, {45, 131, 4, 28}}},
{Region: "Ireland", Group: "Premium TCP Europe", IPs: []net.IP{{84, 247, 48, 3}, {84, 247, 48, 4}, {84, 247, 48, 5}, {84, 247, 48, 8}, {84, 247, 48, 9}, {84, 247, 48, 10}, {84, 247, 48, 11}, {84, 247, 48, 12}, {84, 247, 48, 19}, {84, 247, 48, 21}}},
{Region: "Ireland", Group: "Premium UDP Europe", IPs: []net.IP{{84, 247, 48, 3}, {84, 247, 48, 13}, {84, 247, 48, 14}, {84, 247, 48, 20}, {84, 247, 48, 21}, {84, 247, 48, 23}, {84, 247, 48, 24}, {84, 247, 48, 25}, {84, 247, 48, 26}, {84, 247, 48, 27}}},
{Region: "Isle of Man", Group: "Premium TCP Europe", IPs: []net.IP{{45, 132, 140, 7}, {45, 132, 140, 8}, {45, 132, 140, 10}, {45, 132, 140, 11}, {45, 132, 140, 15}, {45, 132, 140, 17}, {45, 132, 140, 18}, {45, 132, 140, 19}, {45, 132, 140, 27}, {45, 132, 140, 28}}},
{Region: "Isle of Man", Group: "Premium UDP Europe", IPs: []net.IP{{45, 132, 140, 7}, {45, 132, 140, 9}, {45, 132, 140, 10}, {45, 132, 140, 16}, {45, 132, 140, 19}, {45, 132, 140, 20}, {45, 132, 140, 21}, {45, 132, 140, 25}, {45, 132, 140, 26}, {45, 132, 140, 28}}},
{Region: "Israel", Group: "Premium TCP Europe", IPs: []net.IP{{160, 116, 0, 163}, {160, 116, 0, 164}, {160, 116, 0, 166}, {160, 116, 0, 167}, {160, 116, 0, 169}, {160, 116, 0, 170}, {160, 116, 0, 171}, {160, 116, 0, 172}, {160, 116, 0, 173}, {160, 116, 0, 174}}},
{Region: "Israel", Group: "Premium UDP Europe", IPs: []net.IP{{160, 116, 0, 163}, {160, 116, 0, 165}, {160, 116, 0, 166}, {160, 116, 0, 167}, {160, 116, 0, 168}, {160, 116, 0, 169}, {160, 116, 0, 170}, {160, 116, 0, 172}, {160, 116, 0, 173}, {160, 116, 0, 174}}},
{Region: "Italy", Group: "Premium TCP Europe", IPs: []net.IP{{84, 17, 58, 11}, {84, 17, 58, 19}, {87, 101, 94, 70}, {87, 101, 94, 116}, {185, 217, 71, 133}, {185, 217, 71, 137}, {212, 102, 55, 100}, {212, 102, 55, 123}, {212, 102, 55, 139}, {212, 102, 55, 184}}},
{Region: "Italy", Group: "Premium UDP Europe", IPs: []net.IP{{84, 17, 58, 7}, {84, 17, 58, 100}, {84, 17, 58, 103}, {84, 17, 58, 104}, {87, 101, 94, 116}, {87, 101, 94, 124}, {185, 217, 71, 132}, {185, 217, 71, 134}, {212, 102, 55, 156}, {212, 102, 55, 167}}},
{Region: "Japan", Group: "Premium TCP Asia", IPs: []net.IP{{156, 146, 35, 5}, {156, 146, 35, 8}, {156, 146, 35, 9}, {156, 146, 35, 17}, {156, 146, 35, 20}, {156, 146, 35, 33}, {156, 146, 35, 36}, {156, 146, 35, 42}, {156, 146, 35, 45}, {156, 146, 35, 50}}},
{Region: "Japan", Group: "Premium UDP Asia", IPs: []net.IP{{156, 146, 35, 6}, {156, 146, 35, 8}, {156, 146, 35, 19}, {156, 146, 35, 22}, {156, 146, 35, 27}, {156, 146, 35, 32}, {156, 146, 35, 35}, {156, 146, 35, 37}, {156, 146, 35, 41}, {156, 146, 35, 47}}},
{Region: "Kazakhstan", Group: "Premium TCP Europe", IPs: []net.IP{{45, 133, 88, 7}, {45, 133, 88, 11}, {45, 133, 88, 12}, {45, 133, 88, 13}, {45, 133, 88, 14}, {45, 133, 88, 20}, {45, 133, 88, 23}, {45, 133, 88, 24}, {45, 133, 88, 26}, {45, 133, 88, 28}}},
{Region: "Kazakhstan", Group: "Premium UDP Europe", IPs: []net.IP{{45, 133, 88, 8}, {45, 133, 88, 12}, {45, 133, 88, 13}, {45, 133, 88, 15}, {45, 133, 88, 19}, {45, 133, 88, 20}, {45, 133, 88, 24}, {45, 133, 88, 25}, {45, 133, 88, 26}, {45, 133, 88, 28}}},
{Region: "Kenya", Group: "Premium TCP Asia", IPs: []net.IP{{62, 12, 118, 195}, {62, 12, 118, 196}, {62, 12, 118, 197}, {62, 12, 118, 198}, {62, 12, 118, 199}, {62, 12, 118, 200}, {62, 12, 118, 201}, {62, 12, 118, 202}, {62, 12, 118, 203}, {62, 12, 118, 204}}},
{Region: "Kenya", Group: "Premium UDP Asia", IPs: []net.IP{{62, 12, 118, 195}, {62, 12, 118, 196}, {62, 12, 118, 197}, {62, 12, 118, 198}, {62, 12, 118, 199}, {62, 12, 118, 200}, {62, 12, 118, 201}, {62, 12, 118, 202}, {62, 12, 118, 203}, {62, 12, 118, 204}}},
{Region: "Korea", Group: "Premium TCP Asia", IPs: []net.IP{{27, 255, 75, 227}, {27, 255, 75, 229}, {27, 255, 75, 233}, {27, 255, 75, 234}, {27, 255, 75, 235}, {27, 255, 75, 236}, {27, 255, 75, 248}, {27, 255, 75, 249}, {27, 255, 75, 251}, {27, 255, 75, 254}}},
{Region: "Korea", Group: "Premium UDP Asia", IPs: []net.IP{{27, 255, 75, 228}, {27, 255, 75, 229}, {27, 255, 75, 230}, {27, 255, 75, 231}, {27, 255, 75, 234}, {27, 255, 75, 235}, {27, 255, 75, 244}, {27, 255, 75, 245}, {27, 255, 75, 246}, {27, 255, 75, 247}}},
{Region: "Latvia", Group: "Premium TCP Europe", IPs: []net.IP{{109, 248, 148, 244}, {109, 248, 148, 251}, {109, 248, 148, 252}, {109, 248, 148, 253}, {109, 248, 149, 19}, {109, 248, 149, 20}, {109, 248, 149, 21}, {109, 248, 149, 22}, {109, 248, 149, 24}, {109, 248, 149, 27}}},
{Region: "Latvia", Group: "Premium UDP Europe", IPs: []net.IP{{109, 248, 148, 248}, {109, 248, 148, 252}, {109, 248, 148, 253}, {109, 248, 148, 254}, {109, 248, 149, 19}, {109, 248, 149, 20}, {109, 248, 149, 21}, {109, 248, 149, 24}, {109, 248, 149, 28}, {109, 248, 149, 29}}},
{Region: "Liechtenstein", Group: "Premium TCP Europe", IPs: []net.IP{{45, 139, 48, 6}, {45, 139, 48, 7}, {45, 139, 48, 9}, {45, 139, 48, 16}, {45, 139, 48, 17}, {45, 139, 48, 19}, {45, 139, 48, 20}, {45, 139, 48, 22}, {45, 139, 48, 23}, {45, 139, 48, 27}}},
{Region: "Liechtenstein", Group: "Premium UDP Europe", IPs: []net.IP{{45, 139, 48, 9}, {45, 139, 48, 12}, {45, 139, 48, 15}, {45, 139, 48, 16}, {45, 139, 48, 17}, {45, 139, 48, 18}, {45, 139, 48, 24}, {45, 139, 48, 26}, {45, 139, 48, 28}, {45, 139, 48, 29}}},
{Region: "Lithuania", Group: "Premium TCP Europe", IPs: []net.IP{{85, 206, 162, 211}, {85, 206, 162, 213}, {85, 206, 162, 214}, {85, 206, 162, 216}, {85, 206, 162, 219}, {85, 206, 162, 220}, {85, 206, 165, 18}, {85, 206, 165, 20}, {85, 206, 165, 24}, {85, 206, 165, 25}}},
{Region: "Lithuania", Group: "Premium UDP Europe", IPs: []net.IP{{85, 206, 162, 210}, {85, 206, 162, 211}, {85, 206, 162, 214}, {85, 206, 162, 215}, {85, 206, 162, 220}, {85, 206, 162, 221}, {85, 206, 162, 222}, {85, 206, 165, 18}, {85, 206, 165, 25}, {85, 206, 165, 26}}},
{Region: "Luxembourg", Group: "Premium TCP Europe", IPs: []net.IP{{5, 253, 204, 5}, {5, 253, 204, 6}, {5, 253, 204, 9}, {5, 253, 204, 10}, {5, 253, 204, 12}, {5, 253, 204, 14}, {5, 253, 204, 20}, {5, 253, 204, 23}, {5, 253, 204, 29}, {5, 253, 204, 30}}},
{Region: "Luxembourg", Group: "Premium UDP Europe", IPs: []net.IP{{5, 253, 204, 7}, {5, 253, 204, 11}, {5, 253, 204, 20}, {5, 253, 204, 22}, {5, 253, 204, 23}, {5, 253, 204, 26}, {5, 253, 204, 27}, {5, 253, 204, 28}, {5, 253, 204, 29}, {5, 253, 204, 30}}},
{Region: "Macao", Group: "Premium TCP Asia", IPs: []net.IP{{45, 137, 197, 8}, {45, 137, 197, 9}, {45, 137, 197, 12}, {45, 137, 197, 14}, {45, 137, 197, 17}, {45, 137, 197, 33}, {45, 137, 197, 35}, {45, 137, 197, 42}, {45, 137, 197, 45}, {45, 137, 197, 47}}},
{Region: "Macao", Group: "Premium UDP Asia", IPs: []net.IP{{45, 137, 197, 2}, {45, 137, 197, 7}, {45, 137, 197, 18}, {45, 137, 197, 19}, {45, 137, 197, 28}, {45, 137, 197, 30}, {45, 137, 197, 33}, {45, 137, 197, 35}, {45, 137, 197, 44}, {45, 137, 197, 47}}},
{Region: "Macedonia", Group: "Premium TCP Europe", IPs: []net.IP{{185, 225, 28, 3}, {185, 225, 28, 4}, {185, 225, 28, 5}, {185, 225, 28, 6}, {185, 225, 28, 7}, {185, 225, 28, 8}, {185, 225, 28, 9}, {185, 225, 28, 10}, {185, 225, 28, 11}, {185, 225, 28, 12}}},
{Region: "Macedonia", Group: "Premium UDP Europe", IPs: []net.IP{{185, 225, 28, 3}, {185, 225, 28, 4}, {185, 225, 28, 5}, {185, 225, 28, 6}, {185, 225, 28, 7}, {185, 225, 28, 8}, {185, 225, 28, 9}, {185, 225, 28, 10}, {185, 225, 28, 11}, {185, 225, 28, 12}}},
{Region: "Malaysia", Group: "Premium TCP Asia", IPs: []net.IP{{139, 5, 177, 69}, {139, 5, 177, 70}, {139, 5, 177, 71}, {139, 5, 177, 72}, {139, 5, 177, 73}, {139, 5, 177, 74}, {139, 5, 177, 75}, {139, 5, 177, 76}, {139, 5, 177, 77}, {139, 5, 177, 78}}},
{Region: "Malaysia", Group: "Premium UDP Asia", IPs: []net.IP{{139, 5, 177, 69}, {139, 5, 177, 70}, {139, 5, 177, 71}, {139, 5, 177, 72}, {139, 5, 177, 73}, {139, 5, 177, 74}, {139, 5, 177, 75}, {139, 5, 177, 76}, {139, 5, 177, 77}, {139, 5, 177, 78}}},
{Region: "Malta", Group: "Premium TCP Europe", IPs: []net.IP{{45, 137, 198, 6}, {45, 137, 198, 8}, {45, 137, 198, 9}, {45, 137, 198, 11}, {45, 137, 198, 16}, {45, 137, 198, 18}, {45, 137, 198, 22}, {45, 137, 198, 23}, {45, 137, 198, 25}, {45, 137, 198, 27}}},
{Region: "Malta", Group: "Premium UDP Europe", IPs: []net.IP{{45, 137, 198, 8}, {45, 137, 198, 10}, {45, 137, 198, 12}, {45, 137, 198, 13}, {45, 137, 198, 16}, {45, 137, 198, 17}, {45, 137, 198, 21}, {45, 137, 198, 23}, {45, 137, 198, 26}, {45, 137, 198, 28}}},
{Region: "Mexico", Group: "Premium TCP USA", IPs: []net.IP{{45, 133, 180, 99}, {45, 133, 180, 106}, {45, 133, 180, 107}, {45, 133, 180, 108}, {45, 133, 180, 115}, {45, 133, 180, 118}, {45, 133, 180, 119}, {45, 133, 180, 121}, {45, 133, 180, 122}, {45, 133, 180, 123}}},
{Region: "Mexico", Group: "Premium UDP USA", IPs: []net.IP{{45, 133, 180, 99}, {45, 133, 180, 101}, {45, 133, 180, 104}, {45, 133, 180, 105}, {45, 133, 180, 106}, {45, 133, 180, 115}, {45, 133, 180, 117}, {45, 133, 180, 118}, {45, 133, 180, 120}, {45, 133, 180, 121}}},
{Region: "Moldova", Group: "Premium TCP Europe", IPs: []net.IP{{178, 175, 130, 243}, {178, 175, 130, 245}, {178, 175, 130, 250}, {178, 175, 130, 251}, {178, 175, 130, 253}, {178, 175, 130, 254}, {178, 175, 142, 131}, {178, 175, 142, 132}, {178, 175, 142, 133}, {178, 175, 142, 134}}},
{Region: "Moldova", Group: "Premium UDP Europe", IPs: []net.IP{{178, 175, 130, 243}, {178, 175, 130, 244}, {178, 175, 130, 245}, {178, 175, 130, 246}, {178, 175, 130, 250}, {178, 175, 130, 251}, {178, 175, 130, 253}, {178, 175, 130, 254}, {178, 175, 142, 132}, {178, 175, 142, 133}}},
{Region: "Monaco", Group: "Premium TCP Europe", IPs: []net.IP{{45, 137, 199, 7}, {45, 137, 199, 9}, {45, 137, 199, 11}, {45, 137, 199, 12}, {45, 137, 199, 14}, {45, 137, 199, 16}, {45, 137, 199, 20}, {45, 137, 199, 24}, {45, 137, 199, 25}, {45, 137, 199, 29}}},
{Region: "Monaco", Group: "Premium UDP Europe", IPs: []net.IP{{45, 137, 199, 6}, {45, 137, 199, 7}, {45, 137, 199, 10}, {45, 137, 199, 16}, {45, 137, 199, 18}, {45, 137, 199, 22}, {45, 137, 199, 23}, {45, 137, 199, 24}, {45, 137, 199, 25}, {45, 137, 199, 27}}},
{Region: "Mongolia", Group: "Premium TCP Asia", IPs: []net.IP{{45, 139, 51, 4}, {45, 139, 51, 13}, {45, 139, 51, 14}, {45, 139, 51, 17}, {45, 139, 51, 18}, {45, 139, 51, 22}, {45, 139, 51, 23}, {45, 139, 51, 32}, {45, 139, 51, 44}, {45, 139, 51, 48}}},
{Region: "Mongolia", Group: "Premium UDP Asia", IPs: []net.IP{{45, 139, 51, 3}, {45, 139, 51, 6}, {45, 139, 51, 11}, {45, 139, 51, 12}, {45, 139, 51, 17}, {45, 139, 51, 20}, {45, 139, 51, 28}, {45, 139, 51, 30}, {45, 139, 51, 37}, {45, 139, 51, 41}}},
{Region: "Montenegro", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 208, 6}, {45, 131, 208, 7}, {45, 131, 208, 8}, {45, 131, 208, 9}, {45, 131, 208, 10}, {45, 131, 208, 13}, {45, 131, 208, 14}, {45, 131, 208, 20}, {45, 131, 208, 24}, {45, 131, 208, 28}}},
{Region: "Montenegro", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 208, 6}, {45, 131, 208, 8}, {45, 131, 208, 9}, {45, 131, 208, 12}, {45, 131, 208, 16}, {45, 131, 208, 20}, {45, 131, 208, 22}, {45, 131, 208, 24}, {45, 131, 208, 26}, {45, 131, 208, 28}}},
{Region: "Morocco", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 211, 6}, {45, 131, 211, 9}, {45, 131, 211, 11}, {45, 131, 211, 13}, {45, 131, 211, 18}, {45, 131, 211, 21}, {45, 131, 211, 22}, {45, 131, 211, 23}, {45, 131, 211, 28}, {45, 131, 211, 29}}},
{Region: "Morocco", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 211, 9}, {45, 131, 211, 10}, {45, 131, 211, 13}, {45, 131, 211, 18}, {45, 131, 211, 20}, {45, 131, 211, 21}, {45, 131, 211, 25}, {45, 131, 211, 26}, {45, 131, 211, 28}, {45, 131, 211, 29}}},
{Region: "Netherlands", Group: "Premium TCP Europe", IPs: []net.IP{{84, 17, 47, 3}, {84, 17, 47, 20}, {84, 17, 47, 39}, {84, 17, 47, 42}, {84, 17, 47, 74}, {84, 17, 47, 111}, {139, 28, 217, 199}, {185, 132, 177, 136}, {190, 2, 149, 196}, {195, 181, 172, 69}}},
{Region: "Netherlands", Group: "Premium UDP Europe", IPs: []net.IP{{84, 17, 47, 4}, {84, 17, 47, 8}, {84, 17, 47, 12}, {84, 17, 47, 38}, {84, 17, 47, 68}, {185, 132, 177, 235}, {190, 2, 149, 28}, {190, 2, 149, 30}, {190, 2, 149, 208}, {195, 181, 172, 79}}},
{Region: "New Zealand", Group: "Premium TCP Asia", IPs: []net.IP{{103, 231, 91, 131}, {103, 231, 91, 132}, {103, 231, 91, 133}, {103, 231, 91, 134}, {103, 231, 91, 135}, {103, 231, 91, 136}, {103, 231, 91, 137}, {103, 231, 91, 138}, {103, 231, 91, 139}, {103, 231, 91, 140}}},
{Region: "New Zealand", Group: "Premium UDP Asia", IPs: []net.IP{{103, 231, 91, 131}, {103, 231, 91, 132}, {103, 231, 91, 133}, {103, 231, 91, 134}, {103, 231, 91, 135}, {103, 231, 91, 136}, {103, 231, 91, 137}, {103, 231, 91, 138}, {103, 231, 91, 139}, {103, 231, 91, 140}}},
{Region: "Nigeria", Group: "Premium TCP Europe", IPs: []net.IP{{45, 137, 196, 6}, {45, 137, 196, 10}, {45, 137, 196, 12}, {45, 137, 196, 13}, {45, 137, 196, 15}, {45, 137, 196, 16}, {45, 137, 196, 17}, {45, 137, 196, 20}, {45, 137, 196, 24}, {45, 137, 196, 29}}},
{Region: "Nigeria", Group: "Premium UDP Europe", IPs: []net.IP{{45, 137, 196, 6}, {45, 137, 196, 7}, {45, 137, 196, 8}, {45, 137, 196, 9}, {45, 137, 196, 12}, {45, 137, 196, 13}, {45, 137, 196, 14}, {45, 137, 196, 20}, {45, 137, 196, 28}, {45, 137, 196, 29}}},
{Region: "Norway", Group: "Premium TCP Europe", IPs: []net.IP{{45, 12, 223, 131}, {45, 12, 223, 135}, {45, 12, 223, 136}, {45, 12, 223, 138}, {185, 206, 225, 231}, {185, 206, 225, 233}, {185, 253, 97, 235}, {185, 253, 97, 236}, {185, 253, 97, 247}, {185, 253, 97, 253}}},
{Region: "Norway", Group: "Premium UDP Europe", IPs: []net.IP{{45, 12, 223, 132}, {45, 12, 223, 137}, {45, 12, 223, 138}, {45, 12, 223, 141}, {185, 206, 225, 27}, {185, 206, 225, 30}, {185, 253, 97, 245}, {185, 253, 97, 246}, {185, 253, 97, 248}, {185, 253, 97, 249}}},
{Region: "Pakistan", Group: "Premium TCP Europe", IPs: []net.IP{{103, 76, 3, 244}, {103, 76, 3, 245}, {103, 76, 3, 246}, {103, 76, 3, 247}, {103, 76, 3, 248}, {103, 76, 3, 249}, {103, 76, 3, 250}, {103, 76, 3, 251}, {103, 76, 3, 252}, {103, 76, 3, 253}}},
{Region: "Pakistan", Group: "Premium UDP Europe", IPs: []net.IP{{103, 76, 3, 244}, {103, 76, 3, 245}, {103, 76, 3, 246}, {103, 76, 3, 247}, {103, 76, 3, 248}, {103, 76, 3, 249}, {103, 76, 3, 250}, {103, 76, 3, 251}, {103, 76, 3, 252}, {103, 76, 3, 253}}},
{Region: "Panama", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 210, 9}, {45, 131, 210, 10}, {45, 131, 210, 14}, {45, 131, 210, 15}, {45, 131, 210, 16}, {45, 131, 210, 21}, {45, 131, 210, 22}, {45, 131, 210, 23}, {45, 131, 210, 24}, {45, 131, 210, 26}}},
{Region: "Panama", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 210, 6}, {45, 131, 210, 8}, {45, 131, 210, 9}, {45, 131, 210, 12}, {45, 131, 210, 14}, {45, 131, 210, 18}, {45, 131, 210, 19}, {45, 131, 210, 25}, {45, 131, 210, 28}, {45, 131, 210, 29}}},
{Region: "Philippines", Group: "Premium TCP Asia", IPs: []net.IP{{188, 214, 125, 39}, {188, 214, 125, 45}, {188, 214, 125, 47}, {188, 214, 125, 49}, {188, 214, 125, 50}, {188, 214, 125, 51}, {188, 214, 125, 53}, {188, 214, 125, 57}, {188, 214, 125, 58}, {188, 214, 125, 61}}},
{Region: "Philippines", Group: "Premium UDP Asia", IPs: []net.IP{{188, 214, 125, 35}, {188, 214, 125, 36}, {188, 214, 125, 37}, {188, 214, 125, 48}, {188, 214, 125, 55}, {188, 214, 125, 56}, {188, 214, 125, 57}, {188, 214, 125, 58}, {188, 214, 125, 59}, {188, 214, 125, 62}}},
{Region: "Poland", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 156, 11}, {37, 120, 156, 17}, {37, 120, 156, 23}, {37, 120, 156, 25}, {37, 120, 156, 26}, {51, 75, 56, 35}, {51, 75, 56, 37}, {51, 75, 56, 41}, {54, 37, 238, 36}, {54, 37, 238, 43}}},
{Region: "Poland", Group: "Premium UDP Europe", IPs: []net.IP{{37, 120, 156, 8}, {37, 120, 156, 10}, {37, 120, 156, 12}, {37, 120, 156, 18}, {37, 120, 156, 19}, {37, 120, 156, 24}, {51, 75, 56, 33}, {51, 75, 56, 40}, {51, 75, 56, 41}, {54, 37, 238, 33}}},
{Region: "Portugal", Group: "Premium TCP Europe", IPs: []net.IP{{89, 26, 243, 47}, {89, 26, 243, 48}, {89, 26, 243, 50}, {89, 26, 243, 51}, {89, 26, 243, 54}, {89, 26, 243, 58}, {89, 26, 243, 60}, {185, 90, 57, 172}, {185, 90, 57, 176}, {185, 90, 57, 179}}},
{Region: "Portugal", Group: "Premium UDP Europe", IPs: []net.IP{{89, 26, 243, 47}, {89, 26, 243, 50}, {89, 26, 243, 51}, {89, 26, 243, 53}, {89, 26, 243, 58}, {185, 90, 57, 173}, {185, 90, 57, 175}, {185, 90, 57, 176}, {185, 90, 57, 178}, {185, 90, 57, 179}}},
{Region: "Qatar", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 7, 6}, {45, 131, 7, 9}, {45, 131, 7, 10}, {45, 131, 7, 13}, {45, 131, 7, 16}, {45, 131, 7, 17}, {45, 131, 7, 20}, {45, 131, 7, 22}, {45, 131, 7, 23}, {45, 131, 7, 28}}},
{Region: "Qatar", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 7, 8}, {45, 131, 7, 9}, {45, 131, 7, 14}, {45, 131, 7, 15}, {45, 131, 7, 16}, {45, 131, 7, 17}, {45, 131, 7, 23}, {45, 131, 7, 27}, {45, 131, 7, 28}, {45, 131, 7, 29}}},
{Region: "Romania", Group: "NoSpy TCP Europe", IPs: []net.IP{{85, 9, 20, 134}, {85, 9, 20, 135}, {85, 9, 20, 137}, {85, 9, 20, 138}, {85, 9, 20, 139}, {85, 9, 20, 147}, {85, 9, 20, 149}, {85, 9, 20, 154}, {85, 9, 20, 248}, {85, 9, 20, 249}}},
{Region: "Romania", Group: "NoSpy UDP Europe", IPs: []net.IP{{85, 9, 20, 134}, {85, 9, 20, 138}, {85, 9, 20, 139}, {85, 9, 20, 144}, {85, 9, 20, 145}, {85, 9, 20, 147}, {85, 9, 20, 148}, {85, 9, 20, 151}, {85, 9, 20, 248}, {85, 9, 20, 249}}},
{Region: "Romania", Group: "Premium TCP Europe", IPs: []net.IP{{193, 176, 84, 44}, {193, 176, 84, 49}, {193, 176, 84, 51}, {193, 176, 84, 52}, {193, 176, 84, 88}, {193, 176, 84, 121}, {193, 176, 84, 126}, {193, 176, 85, 72}, {193, 176, 85, 74}, {193, 176, 85, 101}}},
{Region: "Romania", Group: "Premium UDP Europe", IPs: []net.IP{{193, 176, 84, 46}, {193, 176, 84, 47}, {193, 176, 84, 48}, {193, 176, 84, 49}, {193, 176, 84, 90}, {193, 176, 84, 125}, {193, 176, 85, 68}, {193, 176, 85, 72}, {193, 176, 85, 78}, {193, 176, 85, 91}}},
{Region: "Russian Federation", Group: "Premium TCP Europe", IPs: []net.IP{{45, 132, 192, 42}, {45, 132, 192, 43}, {45, 132, 192, 49}, {45, 132, 192, 60}, {45, 132, 192, 63}, {45, 132, 192, 66}, {45, 132, 192, 78}, {45, 132, 192, 80}, {45, 132, 192, 85}, {45, 132, 192, 96}}},
{Region: "Russian Federation", Group: "Premium UDP Europe", IPs: []net.IP{{45, 132, 192, 11}, {45, 132, 192, 15}, {45, 132, 192, 24}, {45, 132, 192, 32}, {45, 132, 192, 43}, {45, 132, 192, 49}, {45, 132, 192, 55}, {45, 132, 192, 63}, {45, 132, 192, 65}, {45, 132, 192, 95}}},
{Region: "Saudi Arabia", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 6, 7}, {45, 131, 6, 10}, {45, 131, 6, 12}, {45, 131, 6, 13}, {45, 131, 6, 21}, {45, 131, 6, 23}, {45, 131, 6, 24}, {45, 131, 6, 25}, {45, 131, 6, 26}, {45, 131, 6, 28}}},
{Region: "Saudi Arabia", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 6, 7}, {45, 131, 6, 9}, {45, 131, 6, 14}, {45, 131, 6, 15}, {45, 131, 6, 18}, {45, 131, 6, 19}, {45, 131, 6, 22}, {45, 131, 6, 24}, {45, 131, 6, 28}, {45, 131, 6, 29}}},
{Region: "Serbia", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 193, 179}, {37, 120, 193, 181}, {37, 120, 193, 182}, {37, 120, 193, 183}, {37, 120, 193, 184}, {37, 120, 193, 186}, {37, 120, 193, 190}, {141, 98, 103, 37}, {141, 98, 103, 43}, {141, 98, 103, 46}}},
{Region: "Serbia", Group: "Premium UDP Europe", IPs: []net.IP{{37, 120, 193, 179}, {37, 120, 193, 182}, {37, 120, 193, 183}, {37, 120, 193, 188}, {37, 120, 193, 189}, {37, 120, 193, 190}, {141, 98, 103, 35}, {141, 98, 103, 40}, {141, 98, 103, 42}, {141, 98, 103, 46}}},
{Region: "Singapore", Group: "Premium TCP Asia", IPs: []net.IP{{37, 120, 151, 55}, {37, 120, 151, 60}, {37, 120, 151, 131}, {37, 120, 151, 139}, {84, 17, 39, 168}, {84, 17, 39, 175}, {84, 17, 39, 176}, {84, 17, 39, 179}, {84, 17, 39, 182}, {84, 17, 39, 185}}},
{Region: "Singapore", Group: "Premium UDP Asia", IPs: []net.IP{{37, 120, 151, 51}, {37, 120, 151, 57}, {37, 120, 151, 131}, {37, 120, 151, 132}, {37, 120, 151, 140}, {37, 120, 151, 141}, {84, 17, 39, 165}, {84, 17, 39, 169}, {84, 17, 39, 171}, {84, 17, 39, 180}}},
{Region: "Slovakia", Group: "Premium TCP Europe", IPs: []net.IP{{185, 245, 85, 227}, {185, 245, 85, 228}, {185, 245, 85, 229}, {185, 245, 85, 230}, {185, 245, 85, 231}, {185, 245, 85, 232}, {185, 245, 85, 233}, {185, 245, 85, 234}, {185, 245, 85, 235}, {185, 245, 85, 236}}},
{Region: "Slovakia", Group: "Premium UDP Europe", IPs: []net.IP{{185, 245, 85, 227}, {185, 245, 85, 228}, {185, 245, 85, 229}, {185, 245, 85, 230}, {185, 245, 85, 231}, {185, 245, 85, 232}, {185, 245, 85, 233}, {185, 245, 85, 234}, {185, 245, 85, 235}, {185, 245, 85, 236}}},
{Region: "Slovenia", Group: "Premium TCP Europe", IPs: []net.IP{{146, 247, 25, 79}, {146, 247, 25, 80}, {146, 247, 25, 81}, {146, 247, 25, 83}, {146, 247, 25, 84}, {146, 247, 25, 85}, {146, 247, 25, 86}, {146, 247, 25, 87}, {146, 247, 25, 88}, {146, 247, 25, 90}}},
{Region: "Slovenia", Group: "Premium UDP Europe", IPs: []net.IP{{146, 247, 25, 80}, {146, 247, 25, 81}, {146, 247, 25, 82}, {146, 247, 25, 83}, {146, 247, 25, 84}, {146, 247, 25, 85}, {146, 247, 25, 86}, {146, 247, 25, 87}, {146, 247, 25, 88}, {146, 247, 25, 89}}},
{Region: "South Africa", Group: "Premium TCP Asia", IPs: []net.IP{{165, 73, 248, 211}, {165, 73, 248, 214}, {165, 73, 248, 222}, {165, 73, 248, 227}, {165, 73, 248, 229}, {165, 73, 248, 230}, {165, 73, 248, 231}, {165, 73, 248, 234}, {165, 73, 248, 236}, {165, 73, 248, 237}}},
{Region: "South Africa", Group: "Premium TCP Europe", IPs: []net.IP{{197, 85, 7, 26}, {197, 85, 7, 27}, {197, 85, 7, 28}, {197, 85, 7, 29}, {197, 85, 7, 30}, {197, 85, 7, 31}, {197, 85, 7, 131}, {197, 85, 7, 132}, {197, 85, 7, 133}, {197, 85, 7, 134}}},
{Region: "South Africa", Group: "Premium UDP Asia", IPs: []net.IP{{165, 73, 248, 212}, {165, 73, 248, 215}, {165, 73, 248, 217}, {165, 73, 248, 218}, {165, 73, 248, 219}, {165, 73, 248, 222}, {165, 73, 248, 227}, {165, 73, 248, 230}, {165, 73, 248, 234}, {165, 73, 248, 237}}},
{Region: "South Africa", Group: "Premium UDP Europe", IPs: []net.IP{{197, 85, 7, 26}, {197, 85, 7, 27}, {197, 85, 7, 28}, {197, 85, 7, 29}, {197, 85, 7, 30}, {197, 85, 7, 31}, {197, 85, 7, 131}, {197, 85, 7, 132}, {197, 85, 7, 133}, {197, 85, 7, 134}}},
{Region: "Spain", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 142, 163}, {37, 120, 142, 166}, {37, 120, 142, 167}, {84, 17, 62, 138}, {84, 17, 62, 141}, {84, 17, 62, 145}, {84, 17, 62, 147}, {84, 17, 62, 152}, {185, 93, 3, 113}, {185, 93, 182, 139}}},
{Region: "Spain", Group: "Premium UDP Europe", IPs: []net.IP{{37, 120, 142, 150}, {37, 120, 142, 157}, {37, 120, 142, 165}, {84, 17, 62, 139}, {84, 17, 62, 142}, {185, 93, 3, 109}, {185, 93, 3, 111}, {185, 93, 3, 113}, {185, 93, 182, 136}, {185, 93, 182, 138}}},
{Region: "Sri Lanka", Group: "Premium TCP Europe", IPs: []net.IP{{45, 132, 136, 6}, {45, 132, 136, 7}, {45, 132, 136, 8}, {45, 132, 136, 12}, {45, 132, 136, 13}, {45, 132, 136, 17}, {45, 132, 136, 21}, {45, 132, 136, 22}, {45, 132, 136, 26}, {45, 132, 136, 27}}},
{Region: "Sri Lanka", Group: "Premium UDP Europe", IPs: []net.IP{{45, 132, 136, 7}, {45, 132, 136, 9}, {45, 132, 136, 10}, {45, 132, 136, 11}, {45, 132, 136, 12}, {45, 132, 136, 15}, {45, 132, 136, 20}, {45, 132, 136, 21}, {45, 132, 136, 27}, {45, 132, 136, 29}}},
{Region: "Sweden", Group: "Premium TCP Europe", IPs: []net.IP{{46, 246, 65, 151}, {46, 246, 65, 156}, {46, 246, 65, 157}, {46, 246, 65, 167}, {46, 246, 65, 203}, {46, 246, 65, 221}, {91, 132, 138, 51}, {188, 126, 64, 101}, {188, 126, 66, 3}, {188, 126, 66, 8}}},
{Region: "Sweden", Group: "Premium UDP Europe", IPs: []net.IP{{46, 246, 65, 167}, {46, 246, 65, 170}, {46, 246, 65, 172}, {46, 246, 65, 181}, {46, 246, 65, 214}, {46, 246, 65, 215}, {91, 132, 138, 57}, {188, 126, 66, 8}, {188, 126, 66, 24}, {188, 126, 66, 29}}},
{Region: "Switzerland", Group: "Premium TCP Europe", IPs: []net.IP{{84, 17, 52, 14}, {84, 17, 52, 39}, {84, 17, 52, 68}, {84, 17, 52, 73}, {84, 17, 52, 84}, {89, 187, 165, 131}, {185, 32, 222, 8}, {185, 32, 222, 105}, {195, 225, 118, 38}, {195, 225, 118, 56}}},
{Region: "Switzerland", Group: "Premium UDP Europe", IPs: []net.IP{{84, 17, 52, 15}, {84, 17, 52, 20}, {84, 17, 52, 36}, {84, 17, 52, 52}, {84, 17, 52, 62}, {84, 17, 52, 75}, {91, 132, 136, 174}, {91, 132, 136, 205}, {91, 132, 136, 206}, {185, 32, 222, 113}}},
{Region: "Taiwan", Group: "Premium TCP Asia", IPs: []net.IP{{45, 133, 181, 102}, {45, 133, 181, 105}, {45, 133, 181, 106}, {45, 133, 181, 108}, {45, 133, 181, 110}, {45, 133, 181, 112}, {45, 133, 181, 114}, {45, 133, 181, 117}, {45, 133, 181, 120}, {45, 133, 181, 124}}},
{Region: "Taiwan", Group: "Premium UDP Asia", IPs: []net.IP{{45, 133, 181, 102}, {45, 133, 181, 103}, {45, 133, 181, 110}, {45, 133, 181, 111}, {45, 133, 181, 112}, {45, 133, 181, 114}, {45, 133, 181, 118}, {45, 133, 181, 120}, {45, 133, 181, 125}, {45, 133, 181, 126}}},
{Region: "Thailand", Group: "Premium TCP Asia", IPs: []net.IP{{119, 59, 98, 238}, {119, 59, 98, 239}, {119, 59, 98, 243}, {119, 59, 98, 244}, {119, 59, 98, 248}, {119, 59, 98, 249}, {119, 59, 121, 165}, {119, 59, 121, 166}, {119, 59, 121, 171}, {119, 59, 121, 173}}},
{Region: "Thailand", Group: "Premium UDP Asia", IPs: []net.IP{{119, 59, 98, 214}, {119, 59, 98, 238}, {119, 59, 98, 244}, {119, 59, 98, 247}, {119, 59, 121, 163}, {119, 59, 121, 165}, {119, 59, 121, 166}, {119, 59, 121, 167}, {119, 59, 121, 173}, {119, 59, 121, 175}}},
{Region: "Turkey", Group: "Premium TCP Europe", IPs: []net.IP{{188, 213, 34, 9}, {188, 213, 34, 22}, {188, 213, 34, 24}, {188, 213, 34, 27}, {188, 213, 34, 28}, {188, 213, 34, 35}, {188, 213, 34, 41}, {188, 213, 34, 44}, {188, 213, 34, 45}, {188, 213, 34, 46}}},
{Region: "Turkey", Group: "Premium UDP Europe", IPs: []net.IP{{188, 213, 34, 3}, {188, 213, 34, 13}, {188, 213, 34, 18}, {188, 213, 34, 25}, {188, 213, 34, 27}, {188, 213, 34, 30}, {188, 213, 34, 35}, {188, 213, 34, 37}, {188, 213, 34, 38}, {188, 213, 34, 44}}},
{Region: "Ukraine", Group: "Premium TCP Europe", IPs: []net.IP{{31, 28, 161, 21}, {31, 28, 163, 34}, {31, 28, 163, 35}, {31, 28, 163, 38}, {31, 28, 163, 50}, {62, 149, 7, 164}, {62, 149, 7, 167}, {62, 149, 29, 50}, {62, 149, 29, 53}, {62, 149, 29, 56}}},
{Region: "Ukraine", Group: "Premium UDP Europe", IPs: []net.IP{{31, 28, 161, 20}, {31, 28, 161, 28}, {31, 28, 161, 30}, {31, 28, 163, 37}, {31, 28, 163, 45}, {31, 28, 163, 53}, {31, 28, 163, 56}, {31, 28, 163, 59}, {62, 149, 7, 168}, {62, 149, 29, 56}}},
{Region: "United Arab Emirates", Group: "Premium TCP Europe", IPs: []net.IP{{45, 131, 5, 6}, {45, 131, 5, 9}, {45, 131, 5, 12}, {45, 131, 5, 14}, {45, 131, 5, 16}, {45, 131, 5, 17}, {45, 131, 5, 18}, {45, 131, 5, 27}, {45, 131, 5, 28}, {45, 131, 5, 29}}},
{Region: "United Arab Emirates", Group: "Premium UDP Europe", IPs: []net.IP{{45, 131, 5, 8}, {45, 131, 5, 14}, {45, 131, 5, 15}, {45, 131, 5, 20}, {45, 131, 5, 22}, {45, 131, 5, 23}, {45, 131, 5, 24}, {45, 131, 5, 26}, {45, 131, 5, 28}, {45, 131, 5, 29}}},
{Region: "United Kingdom", Group: "Premium TCP Europe", IPs: []net.IP{{37, 120, 133, 134}, {37, 120, 133, 140}, {84, 17, 51, 32}, {84, 17, 51, 75}, {89, 238, 138, 243}, {89, 238, 183, 230}, {95, 154, 200, 144}, {95, 154, 200, 186}, {141, 98, 100, 56}, {141, 98, 100, 61}}},
{Region: "United Kingdom", Group: "Premium UDP Europe", IPs: []net.IP{{37, 120, 133, 134}, {37, 120, 159, 35}, {81, 92, 206, 172}, {84, 17, 51, 34}, {84, 17, 51, 110}, {84, 17, 51, 115}, {89, 238, 135, 59}, {95, 154, 200, 147}, {95, 154, 200, 149}, {141, 98, 100, 58}}},
{Region: "United States", Group: "Premium TCP USA", IPs: []net.IP{{23, 105, 160, 184}, {38, 131, 126, 150}, {84, 17, 35, 32}, {89, 187, 182, 7}, {89, 187, 182, 31}, {176, 113, 72, 153}, {176, 113, 72, 167}, {192, 96, 203, 150}, {199, 115, 119, 238}, {212, 102, 41, 4}}},
{Region: "United States", Group: "Premium UDP USA", IPs: []net.IP{{23, 19, 68, 56}, {23, 82, 78, 29}, {23, 105, 191, 36}, {23, 105, 191, 51}, {84, 17, 35, 8}, {89, 187, 171, 138}, {108, 62, 96, 33}, {176, 113, 72, 151}, {192, 96, 203, 154}, {199, 115, 117, 70}}},
{Region: "Venezuela", Group: "Premium TCP Europe", IPs: []net.IP{{45, 133, 89, 6}, {45, 133, 89, 9}, {45, 133, 89, 11}, {45, 133, 89, 15}, {45, 133, 89, 17}, {45, 133, 89, 18}, {45, 133, 89, 22}, {45, 133, 89, 24}, {45, 133, 89, 26}, {45, 133, 89, 29}}},
{Region: "Venezuela", Group: "Premium UDP Europe", IPs: []net.IP{{45, 133, 89, 8}, {45, 133, 89, 9}, {45, 133, 89, 15}, {45, 133, 89, 17}, {45, 133, 89, 21}, {45, 133, 89, 22}, {45, 133, 89, 25}, {45, 133, 89, 26}, {45, 133, 89, 27}, {45, 133, 89, 29}}},
{Region: "Vietnam", Group: "Premium TCP Asia", IPs: []net.IP{{45, 117, 79, 118}, {45, 117, 79, 123}, {45, 117, 79, 124}, {45, 117, 79, 125}, {103, 238, 214, 131}, {103, 238, 214, 134}, {103, 238, 214, 135}, {103, 238, 214, 136}, {103, 238, 214, 137}, {103, 238, 214, 140}}},
{Region: "Vietnam", Group: "Premium UDP Asia", IPs: []net.IP{{45, 117, 79, 114}, {45, 117, 79, 116}, {45, 117, 79, 117}, {45, 117, 79, 118}, {45, 117, 79, 123}, {103, 238, 214, 134}, {103, 238, 214, 135}, {103, 238, 214, 136}, {103, 238, 214, 137}, {103, 238, 214, 140}}},
}
}

View File

@@ -2,6 +2,7 @@ package constants
import (
"net"
"sort"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
@@ -13,37 +14,46 @@ const (
func MullvadCountryChoices() (choices []string) {
uniqueChoices := map[string]struct{}{}
for _, server := range mullvadServers() {
uniqueChoices[string(server.Country)] = struct{}{}
uniqueChoices[server.Country] = struct{}{}
}
for choice := range uniqueChoices {
choices = append(choices, choice)
}
sort.Slice(choices, func(i, j int) bool {
return choices[i] < choices[j]
})
return choices
}
func MullvadCityChoices() (choices []string) {
uniqueChoices := map[string]struct{}{}
for _, server := range mullvadServers() {
uniqueChoices[string(server.City)] = struct{}{}
uniqueChoices[server.City] = struct{}{}
}
for choice := range uniqueChoices {
choices = append(choices, choice)
}
sort.Slice(choices, func(i, j int) bool {
return choices[i] < choices[j]
})
return choices
}
func MullvadProviderChoices() (choices []string) {
func MullvadISPChoices() (choices []string) {
uniqueChoices := map[string]struct{}{}
for _, server := range mullvadServers() {
uniqueChoices[string(server.Provider)] = struct{}{}
uniqueChoices[server.ISP] = struct{}{}
}
for choice := range uniqueChoices {
choices = append(choices, choice)
}
sort.Slice(choices, func(i, j int) bool {
return choices[i] < choices[j]
})
return choices
}
func MullvadServerFilter(country models.MullvadCountry, city models.MullvadCity, provider models.MullvadProvider) (servers []models.MullvadServer) {
func MullvadServerFilter(country, city, isp string) (servers []models.MullvadServer) {
for _, server := range mullvadServers() {
if len(country) == 0 {
server.Country = ""
@@ -51,10 +61,10 @@ func MullvadServerFilter(country models.MullvadCountry, city models.MullvadCity,
if len(city) == 0 {
server.City = ""
}
if len(provider) == 0 {
server.Provider = ""
if len(isp) == 0 {
server.ISP = ""
}
if server.Country == country && server.City == city && server.Provider == provider {
if server.Country == country && server.City == city && server.ISP == isp {
servers = append(servers, server)
}
}
@@ -64,602 +74,602 @@ func MullvadServerFilter(country models.MullvadCountry, city models.MullvadCity,
func mullvadServers() []models.MullvadServer {
return []models.MullvadServer{
{
Country: models.MullvadCountry("united arab emirates"),
City: models.MullvadCity("dubai"),
Provider: models.MullvadProvider("m247"),
Country: "united arab emirates",
City: "dubai",
ISP: "m247",
IPs: []net.IP{{45, 9, 249, 34}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("albania"),
City: models.MullvadCity("tirana"),
Provider: models.MullvadProvider("iregister"),
Country: "albania",
City: "tirana",
ISP: "iregister",
IPs: []net.IP{{31, 171, 154, 210}},
DefaultPort: 1197,
},
{
Country: models.MullvadCountry("austria"),
City: models.MullvadCity("wien"),
Provider: models.MullvadProvider("m247"),
Country: "austria",
City: "wien",
ISP: "m247",
IPs: []net.IP{{37, 120, 155, 250}, {217, 64, 127, 138}, {217, 64, 127, 202}},
DefaultPort: 1196,
},
{
Country: models.MullvadCountry("australia"),
City: models.MullvadCity("adelaide"),
Provider: models.MullvadProvider("intergrid"),
Country: "australia",
City: "adelaide",
ISP: "intergrid",
IPs: []net.IP{{116, 206, 231, 58}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("australia"),
City: models.MullvadCity("brisbane"),
Provider: models.MullvadProvider("intergrid"),
Country: "australia",
City: "brisbane",
ISP: "intergrid",
IPs: []net.IP{{43, 245, 160, 162}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("australia"),
City: models.MullvadCity("canberra"),
Provider: models.MullvadProvider("intergrid"),
Country: "australia",
City: "canberra",
ISP: "intergrid",
IPs: []net.IP{{116, 206, 229, 98}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("australia"),
City: models.MullvadCity("melbourne"),
Provider: models.MullvadProvider("intergrid"),
Country: "australia",
City: "melbourne",
ISP: "intergrid",
IPs: []net.IP{{116, 206, 228, 202}, {116, 206, 228, 242}, {116, 206, 230, 98}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("australia"),
City: models.MullvadCity("perth"),
Provider: models.MullvadProvider("intergrid"),
Country: "australia",
City: "perth",
ISP: "intergrid",
IPs: []net.IP{{103, 77, 235, 66}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("australia"),
City: models.MullvadCity("sydney"),
Provider: models.MullvadProvider("intergrid"),
Country: "australia",
City: "sydney",
ISP: "intergrid",
IPs: []net.IP{{43, 245, 162, 130}, {103, 77, 232, 130}, {103, 77, 232, 146}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("australia"),
City: models.MullvadCity("sydney"),
Provider: models.MullvadProvider("m247"),
Country: "australia",
City: "sydney",
ISP: "m247",
IPs: []net.IP{{217, 138, 204, 82}, {217, 138, 204, 98}, {217, 138, 204, 66}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("belgium"),
City: models.MullvadCity("brussels"),
Provider: models.MullvadProvider("m247"),
Country: "belgium",
City: "brussels",
ISP: "m247",
IPs: []net.IP{{37, 120, 218, 146}, {37, 120, 218, 138}, {91, 207, 57, 50}, {37, 120, 143, 138}, {185, 104, 186, 202}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("bulgaria"),
City: models.MullvadCity("sofia"),
Provider: models.MullvadProvider("m247"),
Country: "bulgaria",
City: "sofia",
ISP: "m247",
IPs: []net.IP{{185, 94, 192, 42}, {185, 94, 192, 66}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("brazil"),
City: models.MullvadCity("sao paulo"),
Provider: models.MullvadProvider("qnax"),
Country: "brazil",
City: "sao paulo",
ISP: "qnax",
IPs: []net.IP{{191, 101, 62, 178}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("brazil"),
City: models.MullvadCity("sao paulo"),
Provider: models.MullvadProvider("heficed"),
Country: "brazil",
City: "sao paulo",
ISP: "heficed",
IPs: []net.IP{{177, 67, 80, 186}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("canada"),
City: models.MullvadCity("montreal"),
Provider: models.MullvadProvider("m247"),
Country: "canada",
City: "montreal",
ISP: "m247",
IPs: []net.IP{{139, 28, 218, 114}, {217, 138, 200, 194}, {217, 138, 200, 186}, {87, 101, 92, 146}, {176, 113, 74, 178}, {37, 120, 205, 114}, {87, 101, 92, 138}, {37, 120, 205, 122}, {217, 138, 200, 210}, {217, 138, 200, 202}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("canada"),
City: models.MullvadCity("toronto"),
Provider: models.MullvadProvider("amanah"),
Country: "canada",
City: "toronto",
ISP: "amanah",
IPs: []net.IP{{184, 75, 214, 130}, {162, 219, 176, 250}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("canada"),
City: models.MullvadCity("vancouver"),
Provider: models.MullvadProvider("100tb"),
Country: "canada",
City: "vancouver",
ISP: "100tb",
IPs: []net.IP{{172, 83, 40, 34}, {172, 83, 40, 38}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("canada"),
City: models.MullvadCity("vancouver"),
Provider: models.MullvadProvider("esecuredata"),
Country: "canada",
City: "vancouver",
ISP: "esecuredata",
IPs: []net.IP{{71, 19, 249, 81}, {176, 113, 74, 186}, {71, 19, 248, 240}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("switzerland"),
City: models.MullvadCity("zurich"),
Provider: models.MullvadProvider("31173"),
Country: "switzerland",
City: "zurich",
ISP: "31173",
IPs: []net.IP{{193, 32, 127, 82}, {193, 32, 127, 81}, {193, 32, 127, 83}, {193, 32, 127, 84}},
Owned: true,
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("zwitzerland"),
City: models.MullvadCity("zurich"),
Provider: models.MullvadProvider("m247"),
Country: "zwitzerland",
City: "zurich",
ISP: "m247",
IPs: []net.IP{{185, 212, 170, 50}, {185, 183, 104, 82}, {185, 9, 18, 98}, {82, 102, 24, 130}, {82, 102, 24, 186}, {185, 212, 170, 162}, {185, 9, 18, 114}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("switzerland"),
City: models.MullvadCity("zurich"),
Provider: models.MullvadProvider("privateLayer"),
Country: "switzerland",
City: "zurich",
ISP: "privateLayer",
IPs: []net.IP{{179, 43, 128, 170}, {81, 17, 20, 34}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("czech republic"),
City: models.MullvadCity("prague"),
Provider: models.MullvadProvider("m247"),
Country: "czech republic",
City: "prague",
ISP: "m247",
IPs: []net.IP{{217, 138, 199, 82}, {217, 138, 199, 74}},
DefaultPort: 1197,
},
{
Country: models.MullvadCountry("germany"),
City: models.MullvadCity("frankfurt"),
Provider: models.MullvadProvider("31173"),
Country: "germany",
City: "frankfurt",
ISP: "31173",
IPs: []net.IP{{185, 213, 155, 132}, {185, 213, 155, 140}, {185, 213, 155, 136}, {185, 213, 155, 133}, {185, 213, 155, 144}, {185, 213, 155, 143}, {185, 213, 155, 138}, {185, 213, 155, 142}, {185, 213, 155, 139}, {185, 213, 155, 135}, {185, 213, 155, 145}, {185, 213, 155, 137}, {185, 213, 155, 131}, {185, 213, 155, 134}, {185, 213, 155, 141}},
Owned: true,
DefaultPort: 1197,
},
{
Country: models.MullvadCountry("germany"),
City: models.MullvadCity("frankfurt"),
Provider: models.MullvadProvider("m247"),
Country: "germany",
City: "frankfurt",
ISP: "m247",
IPs: []net.IP{{82, 102, 16, 90}, {185, 104, 184, 186}, {77, 243, 183, 202}},
DefaultPort: 1197,
},
{
Country: models.MullvadCountry("denmark"),
City: models.MullvadCity("copenhagen"),
Provider: models.MullvadProvider("31173"),
Country: "denmark",
City: "copenhagen",
ISP: "31173",
IPs: []net.IP{{141, 98, 254, 71}, {141, 98, 254, 72}},
Owned: true,
DefaultPort: 1195,
},
{
Country: models.MullvadCountry("denmark"),
City: models.MullvadCity("copenhagen"),
Provider: models.MullvadProvider("m247"),
Country: "denmark",
City: "copenhagen",
ISP: "m247",
IPs: []net.IP{{185, 206, 224, 114}, {185, 206, 224, 119}},
DefaultPort: 1195,
},
{
Country: models.MullvadCountry("denmark"),
City: models.MullvadCity("copenhagen"),
Provider: models.MullvadProvider("blix"),
Country: "denmark",
City: "copenhagen",
ISP: "blix",
IPs: []net.IP{{134, 90, 149, 138}},
DefaultPort: 1195,
},
{
Country: models.MullvadCountry("denmark"),
City: models.MullvadCity("copenhagen"),
Provider: models.MullvadProvider("asergo"),
Country: "denmark",
City: "copenhagen",
ISP: "asergo",
IPs: []net.IP{{82, 103, 140, 213}},
DefaultPort: 1195,
},
{
Country: models.MullvadCountry("spain"),
City: models.MullvadCity("madrid"),
Provider: models.MullvadProvider("m247"),
Country: "spain",
City: "madrid",
ISP: "m247",
IPs: []net.IP{{195, 206, 107, 146}, {45, 152, 183, 42}, {89, 238, 178, 74}, {45, 152, 183, 26}, {89, 238, 178, 34}},
DefaultPort: 1195,
},
{
Country: models.MullvadCountry("finland"),
City: models.MullvadCity("helsinki"),
Provider: models.MullvadProvider("creanova"),
Country: "finland",
City: "helsinki",
ISP: "creanova",
IPs: []net.IP{{185, 204, 1, 174}, {185, 204, 1, 176}, {185, 212, 149, 201}, {185, 204, 1, 175}, {185, 204, 1, 173}, {185, 204, 1, 172}, {185, 204, 1, 171}},
Owned: true,
DefaultPort: 1196,
},
{
Country: models.MullvadCountry("france"),
City: models.MullvadCity("paris"),
Provider: models.MullvadProvider("31173"),
Country: "france",
City: "paris",
ISP: "31173",
IPs: []net.IP{{193, 32, 126, 83}, {193, 32, 126, 82}, {193, 32, 126, 81}, {193, 32, 126, 84}},
Owned: true,
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("france"),
City: models.MullvadCity("paris"),
Provider: models.MullvadProvider("m247"),
Country: "france",
City: "paris",
ISP: "m247",
IPs: []net.IP{{185, 189, 113, 82}, {185, 156, 173, 218}, {185, 128, 25, 162}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("uk"),
City: models.MullvadCity("london"),
Provider: models.MullvadProvider("31173"),
Country: "uk",
City: "london",
ISP: "31173",
IPs: []net.IP{{141, 98, 252, 133}, {141, 98, 252, 139}, {141, 98, 252, 137}, {141, 98, 252, 143}, {141, 98, 252, 142}, {141, 98, 252, 132}, {141, 98, 252, 134}, {141, 98, 252, 140}, {141, 98, 252, 141}, {141, 98, 252, 136}, {141, 98, 252, 144}, {141, 98, 252, 131}, {141, 98, 252, 135}, {141, 98, 252, 138}},
Owned: true,
DefaultPort: 1196,
},
{
Country: models.MullvadCountry("uk"),
City: models.MullvadCity("london"),
Provider: models.MullvadProvider("m247"),
Country: "uk",
City: "london",
ISP: "m247",
IPs: []net.IP{{185, 200, 118, 105}, {185, 212, 168, 244}},
DefaultPort: 1196,
},
{
Country: models.MullvadCountry("uk"),
City: models.MullvadCity("manchester"),
Provider: models.MullvadProvider("m247"),
Country: "uk",
City: "manchester",
ISP: "m247",
IPs: []net.IP{{89, 238, 130, 66}, {81, 92, 205, 10}, {89, 238, 130, 74}, {81, 92, 205, 18}, {81, 92, 205, 26}, {89, 238, 183, 244}, {89, 238, 132, 36}, {217, 151, 98, 68}, {37, 120, 159, 164}, {89, 238, 183, 60}},
DefaultPort: 1196,
},
{
Country: models.MullvadCountry("greece"),
City: models.MullvadCity("athens"),
Provider: models.MullvadProvider("aweb"),
Country: "greece",
City: "athens",
ISP: "aweb",
IPs: []net.IP{{185, 226, 67, 168}},
DefaultPort: 1302,
},
{
Country: models.MullvadCountry("hong kong"),
City: models.MullvadCity("hong kong"),
Provider: models.MullvadProvider("leaseweb"),
Country: "hong kong",
City: "hong kong",
ISP: "leaseweb",
IPs: []net.IP{{209, 58, 185, 53}, {209, 58, 184, 146}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("hungary"),
City: models.MullvadCity("budapest"),
Provider: models.MullvadProvider("m247"),
Country: "hungary",
City: "budapest",
ISP: "m247",
IPs: []net.IP{{185, 94, 190, 138}, {185, 189, 114, 10}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("ireland"),
City: models.MullvadCity("dublin"),
Provider: models.MullvadProvider("m247"),
Country: "ireland",
City: "dublin",
ISP: "m247",
IPs: []net.IP{{217, 138, 222, 90}, {217, 138, 222, 82}},
DefaultPort: 1197,
},
{
Country: models.MullvadCountry("israel"),
City: models.MullvadCity("tel aviv"),
Provider: models.MullvadProvider("hqserv"),
Country: "israel",
City: "tel aviv",
ISP: "hqserv",
IPs: []net.IP{{185, 191, 207, 210}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("italy"),
City: models.MullvadCity("milan"),
Provider: models.MullvadProvider("m247"),
Country: "italy",
City: "milan",
ISP: "m247",
IPs: []net.IP{{217, 138, 197, 106}, {217, 64, 113, 180}, {217, 138, 197, 98}, {217, 138, 197, 114}, {217, 64, 113, 183}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("japan"),
City: models.MullvadCity("tokyo"),
Provider: models.MullvadProvider("m247"),
Country: "japan",
City: "tokyo",
ISP: "m247",
IPs: []net.IP{{37, 120, 210, 138}, {193, 148, 16, 218}, {37, 120, 210, 146}, {185, 242, 4, 50}, {37, 120, 210, 122}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("luxembourg"),
City: models.MullvadCity("luxembourg"),
Provider: models.MullvadProvider("evoluso"),
Country: "luxembourg",
City: "luxembourg",
ISP: "evoluso",
IPs: []net.IP{{92, 223, 89, 160}, {92, 223, 89, 182}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("latvia"),
City: models.MullvadCity("riga"),
Provider: models.MullvadProvider("makonix"),
Country: "latvia",
City: "riga",
ISP: "makonix",
IPs: []net.IP{{31, 170, 22, 2}},
DefaultPort: 1300,
},
{
Country: models.MullvadCountry("moldova"),
City: models.MullvadCity("chisinau"),
Provider: models.MullvadProvider("trabia"),
Country: "moldova",
City: "chisinau",
ISP: "trabia",
IPs: []net.IP{{178, 175, 142, 194}},
DefaultPort: 1197,
},
{
Country: models.MullvadCountry("netherlands"),
City: models.MullvadCity("amsterdam"),
Provider: models.MullvadProvider("31173"),
Country: "netherlands",
City: "amsterdam",
ISP: "31173",
IPs: []net.IP{{185, 65, 134, 139}, {185, 65, 134, 133}, {185, 65, 134, 148}, {185, 65, 134, 147}, {185, 65, 134, 141}, {185, 65, 134, 140}, {185, 65, 134, 145}, {185, 65, 134, 132}, {185, 65, 134, 146}, {185, 65, 134, 143}, {185, 65, 134, 134}, {185, 65, 134, 136}, {185, 65, 134, 135}, {185, 65, 134, 142}, {185, 65, 134, 144}},
Owned: true,
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("norway"),
City: models.MullvadCity("oslo"),
Provider: models.MullvadProvider("blix"),
Country: "norway",
City: "oslo",
ISP: "blix",
IPs: []net.IP{{91, 90, 44, 13}, {91, 90, 44, 18}, {91, 90, 44, 12}, {91, 90, 44, 15}, {91, 90, 44, 16}, {91, 90, 44, 17}, {91, 90, 44, 14}, {91, 90, 44, 11}},
Owned: true,
DefaultPort: 1302,
},
{
Country: models.MullvadCountry("new zealand"),
City: models.MullvadCity("auckland"),
Provider: models.MullvadProvider("intergrid"),
Country: "new zealand",
City: "auckland",
ISP: "intergrid",
IPs: []net.IP{{103, 231, 91, 114}},
DefaultPort: 1195,
},
{
Country: models.MullvadCountry("poland"),
City: models.MullvadCity("warsaw"),
Provider: models.MullvadProvider("m247"),
Country: "poland",
City: "warsaw",
ISP: "m247",
IPs: []net.IP{{37, 120, 211, 202}, {37, 120, 156, 162}, {185, 244, 214, 210}, {37, 120, 211, 186}, {185, 244, 214, 215}, {37, 120, 211, 194}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("portugal"),
City: models.MullvadCity("lisbon"),
Provider: models.MullvadProvider("dotsi"),
Country: "portugal",
City: "lisbon",
ISP: "dotsi",
IPs: []net.IP{{5, 206, 231, 214}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("romania"),
City: models.MullvadCity("bucharest"),
Provider: models.MullvadProvider("m247"),
Country: "romania",
City: "bucharest",
ISP: "m247",
IPs: []net.IP{{89, 40, 181, 146}, {185, 181, 100, 202}, {89, 40, 181, 82}, {185, 45, 13, 10}, {89, 40, 181, 210}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("serbia"),
City: models.MullvadCity("belgrade"),
Provider: models.MullvadProvider("m247"),
Country: "serbia",
City: "belgrade",
ISP: "m247",
IPs: []net.IP{{141, 98, 103, 50}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("serbia"),
City: models.MullvadCity("nis"),
Provider: models.MullvadProvider("ninet"),
Country: "serbia",
City: "nis",
ISP: "ninet",
IPs: []net.IP{{176, 104, 107, 118}},
DefaultPort: 1301,
},
{
Country: models.MullvadCountry("sweden"),
City: models.MullvadCity("gothenburg"),
Provider: models.MullvadProvider("31173"),
Country: "sweden",
City: "gothenburg",
ISP: "31173",
IPs: []net.IP{{185, 213, 154, 139}, {185, 213, 154, 141}, {185, 213, 154, 140}, {185, 213, 154, 132}, {185, 213, 154, 135}, {185, 213, 154, 138}, {185, 213, 154, 133}, {185, 213, 154, 131}, {185, 213, 154, 134}, {185, 213, 154, 142}, {185, 213, 154, 137}},
Owned: true,
DefaultPort: 1302,
},
{
Country: models.MullvadCountry("sweden"),
City: models.MullvadCity("helsingborg"),
Provider: models.MullvadProvider("31173"),
Country: "sweden",
City: "helsingborg",
ISP: "31173",
IPs: []net.IP{{185, 213, 152, 133}, {185, 213, 152, 132}, {185, 213, 152, 138}, {185, 213, 152, 131}, {185, 213, 152, 137}},
Owned: true,
DefaultPort: 1302,
},
{
Country: models.MullvadCountry("sweden"),
City: models.MullvadCity("malmo"),
Provider: models.MullvadProvider("31173"),
Country: "sweden",
City: "malmo",
ISP: "31173",
IPs: []net.IP{{193, 138, 218, 138}, {45, 83, 220, 87}, {141, 98, 255, 94}, {141, 98, 255, 85}, {141, 98, 255, 87}, {141, 98, 255, 92}, {45, 83, 220, 84}, {141, 98, 255, 86}, {45, 83, 220, 81}, {193, 138, 218, 135}, {193, 138, 218, 131}, {193, 138, 218, 136}, {141, 98, 255, 88}, {141, 98, 255, 91}, {193, 138, 218, 133}, {45, 83, 220, 89}, {45, 83, 220, 88}, {141, 98, 255, 84}, {141, 98, 255, 89}, {193, 138, 218, 134}, {45, 83, 220, 86}, {141, 98, 255, 83}, {45, 83, 220, 85}, {141, 98, 255, 90}, {141, 98, 255, 93}, {193, 138, 218, 132}, {193, 138, 218, 137}, {45, 83, 220, 91}},
Owned: true,
DefaultPort: 1302,
},
{
Country: models.MullvadCountry("sweden"),
City: models.MullvadCity("stockholm"),
Provider: models.MullvadProvider("31173"),
Country: "sweden",
City: "stockholm",
ISP: "31173",
IPs: []net.IP{{185, 65, 135, 150}, {185, 65, 135, 153}, {185, 65, 135, 151}, {185, 65, 135, 149}, {185, 65, 135, 141}, {185, 65, 135, 144}, {185, 65, 135, 145}, {185, 65, 135, 140}, {185, 65, 135, 134}, {185, 65, 135, 139}, {185, 65, 135, 131}, {185, 65, 135, 152}, {185, 65, 135, 146}, {185, 65, 135, 138}, {185, 65, 135, 143}, {185, 65, 135, 135}, {185, 65, 135, 154}, {185, 65, 135, 136}, {185, 65, 135, 133}, {185, 65, 135, 132}},
Owned: true,
DefaultPort: 1302,
},
{
Country: models.MullvadCountry("singapore"),
City: models.MullvadCity("singapore"),
Provider: models.MullvadProvider("m247"),
Country: "singapore",
City: "singapore",
ISP: "m247",
IPs: []net.IP{{37, 120, 208, 218}, {37, 120, 208, 234}, {37, 120, 208, 226}, {185, 128, 24, 50}},
DefaultPort: 1196,
},
{
Country: models.MullvadCountry("singapore"),
City: models.MullvadCity("singapore"),
Provider: models.MullvadProvider("leaseweb"),
Country: "singapore",
City: "singapore",
ISP: "leaseweb",
IPs: []net.IP{{103, 254, 153, 82}},
DefaultPort: 1196,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("atlanta"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "atlanta",
ISP: "100tb",
IPs: []net.IP{{208, 84, 153, 142}, {107, 152, 108, 62}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("atlanta"),
Provider: models.MullvadProvider("quadranet"),
Country: "usa",
City: "atlanta",
ISP: "quadranet",
IPs: []net.IP{{104, 129, 24, 242}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("atlanta"),
Provider: models.MullvadProvider("micfo"),
Country: "usa",
City: "atlanta",
ISP: "micfo",
IPs: []net.IP{{155, 254, 96, 2}, {155, 254, 96, 18}, {155, 254, 96, 34}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("chicago"),
Provider: models.MullvadProvider("tzulo"),
Country: "usa",
City: "chicago",
ISP: "tzulo",
IPs: []net.IP{{68, 235, 43, 18}, {68, 235, 43, 26}, {68, 235, 43, 42}, {68, 235, 43, 50}, {68, 235, 43, 58}, {68, 235, 43, 66}, {68, 235, 43, 74}}, // 3 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("chicago"),
Provider: models.MullvadProvider("quadranet"),
Country: "usa",
City: "chicago",
ISP: "quadranet",
IPs: []net.IP{}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("dallas"),
Provider: models.MullvadProvider("quadranet"),
Country: "usa",
City: "dallas",
ISP: "quadranet",
IPs: []net.IP{{96, 44, 145, 18}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("dallas"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "dallas",
ISP: "100tb",
IPs: []net.IP{{104, 200, 142, 50}, {107, 152, 102, 106}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("denver"),
Provider: models.MullvadProvider("tzulo"),
Country: "usa",
City: "denver",
ISP: "tzulo",
IPs: []net.IP{{198, 54, 128, 74}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("los angeles"),
Provider: models.MullvadProvider("m247"),
Country: "usa",
City: "los angeles",
ISP: "m247",
IPs: []net.IP{{45, 152, 182, 66}, {45, 152, 182, 74}, {45, 83, 89, 162}, {185, 230, 126, 146}}, // 7 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("los angeles"),
Provider: models.MullvadProvider("tzulo"),
Country: "usa",
City: "los angeles",
ISP: "tzulo",
IPs: []net.IP{{198, 54, 129, 74}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("los angeles"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "los angeles",
ISP: "100tb",
IPs: []net.IP{{104, 200, 152, 66}, {107, 181, 168, 130}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("los angeles"),
Provider: models.MullvadProvider("choopa"),
Country: "usa",
City: "los angeles",
ISP: "choopa",
IPs: []net.IP{{104, 238, 143, 58}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("miami"),
Provider: models.MullvadProvider("m247"),
Country: "usa",
City: "miami",
ISP: "m247",
IPs: []net.IP{{37, 120, 215, 130}, {193, 37, 252, 138}, {193, 37, 252, 154}, {37, 120, 215, 138}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("miami"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "miami",
ISP: "100tb",
IPs: []net.IP{{172, 98, 76, 114}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("miami"),
Provider: models.MullvadProvider("micfo"),
Country: "usa",
City: "miami",
ISP: "micfo",
IPs: []net.IP{}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("new york"),
Provider: models.MullvadProvider("m247"),
Country: "usa",
City: "new york",
ISP: "m247",
IPs: []net.IP{{185, 232, 22, 66}, {185, 232, 22, 98}, {193, 148, 18, 250}, {185, 232, 22, 10}, {217, 138, 206, 10}, {193, 148, 18, 218}, {193, 148, 18, 226}, {193, 148, 18, 194}, {87, 101, 95, 98}, {87, 101, 95, 114}, {87, 101, 95, 122}, {212, 103, 48, 226}, {176, 113, 72, 226}, {217, 138, 198, 250}, {217, 138, 206, 58}}, // 5 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("new york"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "new york",
ISP: "100tb",
IPs: []net.IP{{107, 182, 226, 206}, {107, 182, 226, 218}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("phoenix"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "phoenix",
ISP: "100tb",
IPs: []net.IP{}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("phoenix"),
Provider: models.MullvadProvider("micfo"),
Country: "usa",
City: "phoenix",
ISP: "micfo",
IPs: []net.IP{{192, 200, 24, 82}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("piscataway"),
Provider: models.MullvadProvider("choopa"),
Country: "usa",
City: "piscataway",
ISP: "choopa",
IPs: []net.IP{{108, 61, 78, 138}, {108, 61, 48, 115}, {66, 55, 147, 59}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("seattle"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "seattle",
ISP: "100tb",
IPs: []net.IP{{104, 200, 129, 202}, {104, 200, 129, 150}, {104, 200, 129, 110}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("seattle"),
Provider: models.MullvadProvider("micfo"),
Country: "usa",
City: "seattle",
ISP: "micfo",
IPs: []net.IP{{104, 128, 136, 146}},
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("san francisco"),
Provider: models.MullvadProvider("micfo"),
Country: "usa",
City: "san francisco",
ISP: "micfo",
IPs: []net.IP{{209, 209, 238, 34}}, // 1 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("salt lake city"),
Provider: models.MullvadProvider("100tb"),
Country: "usa",
City: "salt lake city",
ISP: "100tb",
IPs: []net.IP{{107, 182, 238, 229}, {107, 182, 235, 233}, {67, 212, 238, 236}, {67, 212, 238, 237}, {67, 212, 238, 239}, {107, 182, 239, 185}, {107, 182, 239, 170}}, // 2 missing
DefaultPort: 1194,
},
{
Country: models.MullvadCountry("usa"),
City: models.MullvadCity("secaucus"),
Provider: models.MullvadProvider("quadranet"),
Country: "usa",
City: "secaucus",
ISP: "quadranet",
IPs: []net.IP{{23, 226, 131, 154}}, // 1 missing
DefaultPort: 1194,
},

View File

@@ -7,78 +7,75 @@ import (
)
const (
// PIAEncryptionNormal is the normal level of encryption for communication with PIA servers
PIAEncryptionNormal models.PIAEncryption = "normal"
// PIAEncryptionStrong is the strong level of encryption for communication with PIA servers
PIAEncryptionStrong models.PIAEncryption = "strong"
PIAEncryptionPresetNormal = "normal"
PIAEncryptionPresetStrong = "strong"
PiaX509CRLNormal = "MIICWDCCAUAwDQYJKoZIhvcNAQENBQAwgegxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTETMBEGA1UEBxMKTG9zQW5nZWxlczEgMB4GA1UEChMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAsTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQDExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEKRMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRlaW50ZXJuZXRhY2Nlc3MuY29tFw0xNjA3MDgxOTAwNDZaFw0zNjA3MDMxOTAwNDZaMCYwEQIBARcMMTYwNzA4MTkwMDQ2MBECAQYXDDE2MDcwODE5MDA0NjANBgkqhkiG9w0BAQ0FAAOCAQEAQZo9X97ci8EcPYu/uK2HB152OZbeZCINmYyluLDOdcSvg6B5jI+ffKN3laDvczsG6CxmY3jNyc79XVpEYUnq4rT3FfveW1+Ralf+Vf38HdpwB8EWB4hZlQ205+21CALLvZvR8HcPxC9KEnev1mU46wkTiov0EKc+EdRxkj5yMgv0V2Reze7AP+NQ9ykvDScH4eYCsmufNpIjBLhpLE2cuZZXBLcPhuRzVoU3l7A9lvzG9mjA5YijHJGHNjlWFqyrn1CfYS6koa4TGEPngBoAziWRbDGdhEgJABHrpoaFYaL61zqyMR6jC0K2ps9qyZAN74LEBedEfK7tBOzWMwr58A=="
PiaX509CRLStrong = "MIIDWDCCAUAwDQYJKoZIhvcNAQENBQAwgegxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTETMBEGA1UEBxMKTG9zQW5nZWxlczEgMB4GA1UEChMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAsTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQDExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEKRMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRlaW50ZXJuZXRhY2Nlc3MuY29tFw0xNjA3MDgxOTAwNDZaFw0zNjA3MDMxOTAwNDZaMCYwEQIBARcMMTYwNzA4MTkwMDQ2MBECAQYXDDE2MDcwODE5MDA0NjANBgkqhkiG9w0BAQ0FAAOCAgEAppFfEpGsasjB1QgJcosGpzbf2kfRhM84o2TlqY1ua+Gi5TMdKydA3LJcNTjlI9a0TYAJfeRX5IkpoglSUuHuJgXhP3nEvX10mjXDpcu/YvM8TdE5JV2+EGqZ80kFtBeOq94WcpiVKFTR4fO+VkOK9zwspFfb1cNs9rHvgJ1QMkRUF8PpLN6AkntHY0+6DnigtSaKqldqjKTDTv2OeH3nPoh80SGrt0oCOmYKfWTJGpggMGKvIdvU3vH9+EuILZKKIskt+1dwdfA5Bkz1GLmiQG7+9ZZBQUjBG9Dos4hfX/rwJ3eU8oUIm4WoTz9rb71SOEuUUjP5NPy9HNx2vx+cVvLsTF4ZDZaUztW9o9JmIURDtbeyqxuHN3prlPWB6aj73IIm2dsDQvs3XXwRIxs8NwLbJ6CyEuvEOVCskdM8rdADWx1J0lRNlOJ0Z8ieLLEmYAA834VN1SboB6wJIAPxQU3rcBhXqO9y8aa2oRMg8NxZ5gr+PnKVMqag1x0IxbIgLxtkXQvxXxQHEMSODzvcOfK/nBRBsqTj30P+R87sU8titOoxNeRnBDRNhdEy/QGAqGh62ShPpQUCJdnKRiRTjnil9hMQHevoSuFKeEMO30FQL7BZyo37GFU+q1WPCplVZgCP9hC8Rn5K2+f6KLFo5bhtowSmu+GY1yZtg+RTtsA="
PIACertificateNormal = "MIIFqzCCBJOgAwIBAgIJAKZ7D5Yv87qDMA0GCSqGSIb3DQEBDQUAMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTAeFw0xNDA0MTcxNzM1MThaFw0zNDA0MTIxNzM1MThaMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPXDL1L9tX6DGf36liA7UBTy5I869z0UVo3lImfOs/GSiFKPtInlesP65577nd7UNzzXlH/P/CnFPdBWlLp5ze3HRBCc/Avgr5CdMRkEsySL5GHBZsx6w2cayQ2EcRhVTwWpcdldeNO+pPr9rIgPrtXqT4SWViTQRBeGM8CDxAyTopTsobjSiYZCF9Ta1gunl0G/8Vfp+SXfYCC+ZzWvP+L1pFhPRqzQQ8k+wMZIovObK1s+nlwPaLyayzw9a8sUnvWB/5rGPdIYnQWPgoNlLN9HpSmsAcw2z8DXI9pIxbr74cb3/HSfuYGOLkRqrOk6h4RCOfuWoTrZup1uEOn+fw8CAwEAAaOCAVQwggFQMB0GA1UdDgQWBBQv63nQ/pJAt5tLy8VJcbHe22ZOsjCCAR8GA1UdIwSCARYwggESgBQv63nQ/pJAt5tLy8VJcbHe22ZOsqGB7qSB6zCB6DELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRMwEQYDVQQHEwpMb3NBbmdlbGVzMSAwHgYDVQQKExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UECxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAMTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQpExdQcml2YXRlIEludGVybmV0IEFjY2VzczEvMC0GCSqGSIb3DQEJARYgc2VjdXJlQHByaXZhdGVpbnRlcm5ldGFjY2Vzcy5jb22CCQCmew+WL/O6gzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBDQUAA4IBAQAna5PgrtxfwTumD4+3/SYvwoD66cB8IcK//h1mCzAduU8KgUXocLx7QgJWo9lnZ8xUryXvWab2usg4fqk7FPi00bED4f4qVQFVfGfPZIH9QQ7/48bPM9RyfzImZWUCenK37pdw4Bvgoys2rHLHbGen7f28knT2j/cbMxd78tQc20TIObGjo8+ISTRclSTRBtyCGohseKYpTS9himFERpUgNtefvYHbn70mIOzfOJFTVqfrptf9jXa9N8Mpy3ayfodz1wiqdteqFXkTYoSDctgKMiZ6GdocK9nMroQipIQtpnwd4yBDWIyC6Bvlkrq5TQUtYDQ8z9v+DMO6iwyIDRiU"
PIACertificateStrong = "MIIHqzCCBZOgAwIBAgIJAJ0u+vODZJntMA0GCSqGSIb3DQEBDQUAMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTAeFw0xNDA0MTcxNzQwMzNaFw0zNDA0MTIxNzQwMzNaMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALVkhjumaqBbL8aSgj6xbX1QPTfTd1qHsAZd2B97m8Vw31c/2yQgZNf5qZY0+jOIHULNDe4R9TIvyBEbvnAg/OkPw8n/+ScgYOeH876VUXzjLDBnDb8DLr/+w9oVsuDeFJ9KV2UFM1OYX0SnkHnrYAN2QLF98ESK4NCSU01h5zkcgmQ+qKSfA9Ny0/UpsKPBFqsQ25NvjDWFhCpeqCHKUJ4Be27CDbSl7lAkBuHMPHJs8f8xPgAbHRXZOxVCpayZ2SNDfCwsnGWpWFoMGvdMbygngCn6jA/W1VSFOlRlfLuuGe7QFfDwA0jaLCxuWt/BgZylp7tAzYKR8lnWmtUCPm4+BtjyVDYtDCiGBD9Z4P13RFWvJHw5aapx/5W/CuvVyI7pKwvc2IT+KPxCUhH1XI8ca5RN3C9NoPJJf6qpg4g0rJH3aaWkoMRrYvQ+5PXXYUzjtRHImghRGd/ydERYoAZXuGSbPkm9Y/p2X8unLcW+F0xpJD98+ZI+tzSsI99Zs5wijSUGYr9/j18KHFTMQ8n+1jauc5bCCegN27dPeKXNSZ5riXFL2XX6BkY68y58UaNzmeGMiUL9BOV1iV+PMb7B7PYs7oFLjAhh0EdyvfHkrh/ZV9BEhtFa7yXp8XR0J6vz1YV9R6DYJmLjOEbhU8N0gc3tZm4Qz39lIIG6w3FDAgMBAAGjggFUMIIBUDAdBgNVHQ4EFgQUrsRtyWJftjpdRM0+925Y6Cl08SUwggEfBgNVHSMEggEWMIIBEoAUrsRtyWJftjpdRM0+925Y6Cl08SWhge6kgeswgegxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTETMBEGA1UEBxMKTG9zQW5nZWxlczEgMB4GA1UEChMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAsTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQDExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEKRMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRlaW50ZXJuZXRhY2Nlc3MuY29tggkAnS7684Nkme0wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQ0FAAOCAgEAJsfhsPk3r8kLXLxY+v+vHzbr4ufNtqnL9/1Uuf8NrsCtpXAoyZ0YqfbkWx3NHTZ7OE9ZRhdMP/RqHQE1p4N4Sa1nZKhTKasV6KhHDqSCt/dvEm89xWm2MVA7nyzQxVlHa9AkcBaemcXEiyT19XdpiXOP4Vhs+J1R5m8zQOxZlV1GtF9vsXmJqWZpOVPmZ8f35BCsYPvv4yMewnrtAC8PFEK/bOPeYcKN50bol22QYaZuLfpkHfNiFTnfMh8sl/ablPyNY7DUNiP5DRcMdIwmfGQxR5WEQoHL3yPJ42LkB5zs6jIm26DGNXfwura/mi105+ENH1CaROtRYwkiHb08U6qLXXJz80mWJkT90nr8Asj35xN2cUppg74nG3YVav/38P48T56hG1NHbYF5uOCske19F6wi9maUoto/3vEr0rnXJUp2KODmKdvBI7co245lHBABWikk8VfejQSlCtDBXn644ZMtAdoxKNfR2WTFVEwJiyd1Fzx0yujuiXDROLhISLQDRjVVAvawrAtLZWYK31bY7KlezPlQnl/D9Asxe85l8jO5+0LdJ6VyOs/Hd4w52alDW/MFySDZSfQHMTIc30hLBJ8OnCEIvluVQQ2UQvoW+no177N9L2Y+M9TcTA62ZyMXShHQGeh20rb4kK8f+iFX8NxtdHVSkxMEFSfDDyQ="
)
const (
PiaX509CRLNormal = "MIICWDCCAUAwDQYJKoZIhvcNAQENBQAwgegxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTETMBEGA1UEBxMKTG9zQW5nZWxlczEgMB4GA1UEChMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAsTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQDExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEKRMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRlaW50ZXJuZXRhY2Nlc3MuY29tFw0xNjA3MDgxOTAwNDZaFw0zNjA3MDMxOTAwNDZaMCYwEQIBARcMMTYwNzA4MTkwMDQ2MBECAQYXDDE2MDcwODE5MDA0NjANBgkqhkiG9w0BAQ0FAAOCAQEAQZo9X97ci8EcPYu/uK2HB152OZbeZCINmYyluLDOdcSvg6B5jI+ffKN3laDvczsG6CxmY3jNyc79XVpEYUnq4rT3FfveW1+Ralf+Vf38HdpwB8EWB4hZlQ205+21CALLvZvR8HcPxC9KEnev1mU46wkTiov0EKc+EdRxkj5yMgv0V2Reze7AP+NQ9ykvDScH4eYCsmufNpIjBLhpLE2cuZZXBLcPhuRzVoU3l7A9lvzG9mjA5YijHJGHNjlWFqyrn1CfYS6koa4TGEPngBoAziWRbDGdhEgJABHrpoaFYaL61zqyMR6jC0K2ps9qyZAN74LEBedEfK7tBOzWMwr58A=="
PiaX509CRLStrong = "MIIDWDCCAUAwDQYJKoZIhvcNAQENBQAwgegxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTETMBEGA1UEBxMKTG9zQW5nZWxlczEgMB4GA1UEChMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAsTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQDExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEKRMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRlaW50ZXJuZXRhY2Nlc3MuY29tFw0xNjA3MDgxOTAwNDZaFw0zNjA3MDMxOTAwNDZaMCYwEQIBARcMMTYwNzA4MTkwMDQ2MBECAQYXDDE2MDcwODE5MDA0NjANBgkqhkiG9w0BAQ0FAAOCAgEAppFfEpGsasjB1QgJcosGpzbf2kfRhM84o2TlqY1ua+Gi5TMdKydA3LJcNTjlI9a0TYAJfeRX5IkpoglSUuHuJgXhP3nEvX10mjXDpcu/YvM8TdE5JV2+EGqZ80kFtBeOq94WcpiVKFTR4fO+VkOK9zwspFfb1cNs9rHvgJ1QMkRUF8PpLN6AkntHY0+6DnigtSaKqldqjKTDTv2OeH3nPoh80SGrt0oCOmYKfWTJGpggMGKvIdvU3vH9+EuILZKKIskt+1dwdfA5Bkz1GLmiQG7+9ZZBQUjBG9Dos4hfX/rwJ3eU8oUIm4WoTz9rb71SOEuUUjP5NPy9HNx2vx+cVvLsTF4ZDZaUztW9o9JmIURDtbeyqxuHN3prlPWB6aj73IIm2dsDQvs3XXwRIxs8NwLbJ6CyEuvEOVCskdM8rdADWx1J0lRNlOJ0Z8ieLLEmYAA834VN1SboB6wJIAPxQU3rcBhXqO9y8aa2oRMg8NxZ5gr+PnKVMqag1x0IxbIgLxtkXQvxXxQHEMSODzvcOfK/nBRBsqTj30P+R87sU8titOoxNeRnBDRNhdEy/QGAqGh62ShPpQUCJdnKRiRTjnil9hMQHevoSuFKeEMO30FQL7BZyo37GFU+q1WPCplVZgCP9hC8Rn5K2+f6KLFo5bhtowSmu+GY1yZtg+RTtsA="
PIACertificateNormal = "MIIFqzCCBJOgAwIBAgIJAKZ7D5Yv87qDMA0GCSqGSIb3DQEBDQUAMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTAeFw0xNDA0MTcxNzM1MThaFw0zNDA0MTIxNzM1MThaMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPXDL1L9tX6DGf36liA7UBTy5I869z0UVo3lImfOs/GSiFKPtInlesP65577nd7UNzzXlH/P/CnFPdBWlLp5ze3HRBCc/Avgr5CdMRkEsySL5GHBZsx6w2cayQ2EcRhVTwWpcdldeNO+pPr9rIgPrtXqT4SWViTQRBeGM8CDxAyTopTsobjSiYZCF9Ta1gunl0G/8Vfp+SXfYCC+ZzWvP+L1pFhPRqzQQ8k+wMZIovObK1s+nlwPaLyayzw9a8sUnvWB/5rGPdIYnQWPgoNlLN9HpSmsAcw2z8DXI9pIxbr74cb3/HSfuYGOLkRqrOk6h4RCOfuWoTrZup1uEOn+fw8CAwEAAaOCAVQwggFQMB0GA1UdDgQWBBQv63nQ/pJAt5tLy8VJcbHe22ZOsjCCAR8GA1UdIwSCARYwggESgBQv63nQ/pJAt5tLy8VJcbHe22ZOsqGB7qSB6zCB6DELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRMwEQYDVQQHEwpMb3NBbmdlbGVzMSAwHgYDVQQKExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UECxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAMTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQpExdQcml2YXRlIEludGVybmV0IEFjY2VzczEvMC0GCSqGSIb3DQEJARYgc2VjdXJlQHByaXZhdGVpbnRlcm5ldGFjY2Vzcy5jb22CCQCmew+WL/O6gzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBDQUAA4IBAQAna5PgrtxfwTumD4+3/SYvwoD66cB8IcK//h1mCzAduU8KgUXocLx7QgJWo9lnZ8xUryXvWab2usg4fqk7FPi00bED4f4qVQFVfGfPZIH9QQ7/48bPM9RyfzImZWUCenK37pdw4Bvgoys2rHLHbGen7f28knT2j/cbMxd78tQc20TIObGjo8+ISTRclSTRBtyCGohseKYpTS9himFERpUgNtefvYHbn70mIOzfOJFTVqfrptf9jXa9N8Mpy3ayfodz1wiqdteqFXkTYoSDctgKMiZ6GdocK9nMroQipIQtpnwd4yBDWIyC6Bvlkrq5TQUtYDQ8z9v+DMO6iwyIDRiU"
PIACertificateStrong = "MIIHqzCCBZOgAwIBAgIJAJ0u+vODZJntMA0GCSqGSIb3DQEBDQUAMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTAeFw0xNDA0MTcxNzQwMzNaFw0zNDA0MTIxNzQwMzNaMIHoMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzARBgNVBAcTCkxvc0FuZ2VsZXMxIDAeBgNVBAoTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQLExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEAxMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBCkTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMS8wLQYJKoZIhvcNAQkBFiBzZWN1cmVAcHJpdmF0ZWludGVybmV0YWNjZXNzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALVkhjumaqBbL8aSgj6xbX1QPTfTd1qHsAZd2B97m8Vw31c/2yQgZNf5qZY0+jOIHULNDe4R9TIvyBEbvnAg/OkPw8n/+ScgYOeH876VUXzjLDBnDb8DLr/+w9oVsuDeFJ9KV2UFM1OYX0SnkHnrYAN2QLF98ESK4NCSU01h5zkcgmQ+qKSfA9Ny0/UpsKPBFqsQ25NvjDWFhCpeqCHKUJ4Be27CDbSl7lAkBuHMPHJs8f8xPgAbHRXZOxVCpayZ2SNDfCwsnGWpWFoMGvdMbygngCn6jA/W1VSFOlRlfLuuGe7QFfDwA0jaLCxuWt/BgZylp7tAzYKR8lnWmtUCPm4+BtjyVDYtDCiGBD9Z4P13RFWvJHw5aapx/5W/CuvVyI7pKwvc2IT+KPxCUhH1XI8ca5RN3C9NoPJJf6qpg4g0rJH3aaWkoMRrYvQ+5PXXYUzjtRHImghRGd/ydERYoAZXuGSbPkm9Y/p2X8unLcW+F0xpJD98+ZI+tzSsI99Zs5wijSUGYr9/j18KHFTMQ8n+1jauc5bCCegN27dPeKXNSZ5riXFL2XX6BkY68y58UaNzmeGMiUL9BOV1iV+PMb7B7PYs7oFLjAhh0EdyvfHkrh/ZV9BEhtFa7yXp8XR0J6vz1YV9R6DYJmLjOEbhU8N0gc3tZm4Qz39lIIG6w3FDAgMBAAGjggFUMIIBUDAdBgNVHQ4EFgQUrsRtyWJftjpdRM0+925Y6Cl08SUwggEfBgNVHSMEggEWMIIBEoAUrsRtyWJftjpdRM0+925Y6Cl08SWhge6kgeswgegxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTETMBEGA1UEBxMKTG9zQW5nZWxlczEgMB4GA1UEChMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxIDAeBgNVBAsTF1ByaXZhdGUgSW50ZXJuZXQgQWNjZXNzMSAwHgYDVQQDExdQcml2YXRlIEludGVybmV0IEFjY2VzczEgMB4GA1UEKRMXUHJpdmF0ZSBJbnRlcm5ldCBBY2Nlc3MxLzAtBgkqhkiG9w0BCQEWIHNlY3VyZUBwcml2YXRlaW50ZXJuZXRhY2Nlc3MuY29tggkAnS7684Nkme0wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQ0FAAOCAgEAJsfhsPk3r8kLXLxY+v+vHzbr4ufNtqnL9/1Uuf8NrsCtpXAoyZ0YqfbkWx3NHTZ7OE9ZRhdMP/RqHQE1p4N4Sa1nZKhTKasV6KhHDqSCt/dvEm89xWm2MVA7nyzQxVlHa9AkcBaemcXEiyT19XdpiXOP4Vhs+J1R5m8zQOxZlV1GtF9vsXmJqWZpOVPmZ8f35BCsYPvv4yMewnrtAC8PFEK/bOPeYcKN50bol22QYaZuLfpkHfNiFTnfMh8sl/ablPyNY7DUNiP5DRcMdIwmfGQxR5WEQoHL3yPJ42LkB5zs6jIm26DGNXfwura/mi105+ENH1CaROtRYwkiHb08U6qLXXJz80mWJkT90nr8Asj35xN2cUppg74nG3YVav/38P48T56hG1NHbYF5uOCske19F6wi9maUoto/3vEr0rnXJUp2KODmKdvBI7co245lHBABWikk8VfejQSlCtDBXn644ZMtAdoxKNfR2WTFVEwJiyd1Fzx0yujuiXDROLhISLQDRjVVAvawrAtLZWYK31bY7KlezPlQnl/D9Asxe85l8jO5+0LdJ6VyOs/Hd4w52alDW/MFySDZSfQHMTIc30hLBJ8OnCEIvluVQQ2UQvoW+no177N9L2Y+M9TcTA62ZyMXShHQGeh20rb4kK8f+iFX8NxtdHVSkxMEFSfDDyQ="
)
func PIAGeoChoices() (regions []string) {
for _, server := range PIAServers() {
regions = append(regions, string(server.Region))
func PIAGeoChoices() (choices []string) {
servers := PIAServers()
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return regions
return choices
}
func PIAServers() []models.PIAServer {
return []models.PIAServer{
{Region: models.PIARegion("AU Melbourne"), IPs: []net.IP{{27, 50, 82, 131}, {27, 50, 82, 133}, {43, 250, 204, 81}, {43, 250, 204, 83}, {43, 250, 204, 89}, {43, 250, 204, 93}, {43, 250, 204, 95}, {43, 250, 204, 97}, {43, 250, 204, 99}, {43, 250, 204, 101}, {43, 250, 204, 103}, {43, 250, 204, 109}, {43, 250, 204, 111}, {43, 250, 204, 115}, {43, 250, 204, 117}, {43, 250, 204, 119}, {43, 250, 204, 123}, {43, 250, 204, 125}, {118, 127, 62, 227}, {221, 121, 139, 175}}},
{Region: models.PIARegion("AU Perth"), IPs: []net.IP{{43, 250, 205, 59}, {43, 250, 205, 95}}},
{Region: models.PIARegion("AU Sydney"), IPs: []net.IP{{27, 50, 70, 87}, {27, 50, 81, 117}, {103, 13, 102, 113}, {103, 13, 102, 119}, {103, 13, 102, 121}, {103, 13, 102, 123}, {103, 13, 102, 127}, {118, 127, 60, 53}, {118, 127, 60, 61}, {221, 121, 145, 145}, {221, 121, 145, 147}}},
{Region: models.PIARegion("Austria"), IPs: []net.IP{{185, 210, 219, 147}, {185, 210, 219, 154}, {185, 210, 219, 155}, {185, 216, 34, 226}, {185, 216, 34, 227}, {185, 216, 34, 228}, {185, 216, 34, 229}, {185, 216, 34, 230}, {185, 216, 34, 231}, {185, 216, 34, 232}, {185, 216, 34, 233}, {185, 216, 34, 236}, {185, 216, 34, 237}, {185, 216, 34, 238}}},
{Region: models.PIARegion("Belgium"), IPs: []net.IP{{77, 243, 191, 18}, {77, 243, 191, 19}, {77, 243, 191, 20}, {77, 243, 191, 22}, {77, 243, 191, 26}, {77, 243, 191, 27}, {185, 104, 186, 26}, {185, 232, 21, 29}}},
{Region: models.PIARegion("CA Montreal"), IPs: []net.IP{{199, 229, 249, 130}, {199, 229, 249, 136}, {199, 229, 249, 141}, {199, 229, 249, 146}, {199, 229, 249, 149}, {199, 229, 249, 151}, {199, 229, 249, 155}, {199, 229, 249, 157}, {199, 229, 249, 178}, {199, 229, 249, 184}, {199, 229, 249, 185}, {199, 229, 249, 189}, {199, 229, 249, 190}, {199, 229, 249, 200}}},
{Region: models.PIARegion("CA Toronto"), IPs: []net.IP{{172, 98, 67, 5}, {172, 98, 67, 6}, {172, 98, 67, 9}, {172, 98, 67, 12}, {172, 98, 67, 16}, {172, 98, 67, 17}, {172, 98, 67, 20}, {172, 98, 67, 31}, {172, 98, 67, 34}, {172, 98, 67, 45}, {172, 98, 67, 47}, {172, 98, 67, 48}, {172, 98, 67, 49}, {172, 98, 67, 60}, {172, 98, 67, 68}, {172, 98, 67, 73}, {172, 98, 67, 76}, {172, 98, 67, 82}, {172, 98, 67, 90}, {172, 98, 67, 95}}},
{Region: models.PIARegion("CA Vancouver"), IPs: []net.IP{{107, 181, 189, 71}, {107, 181, 189, 77}, {107, 181, 189, 83}, {172, 83, 40, 20}, {172, 83, 40, 23}, {172, 83, 40, 26}, {172, 83, 40, 99}, {172, 83, 40, 104}, {172, 83, 40, 106}, {172, 83, 40, 111}, {172, 83, 40, 112}}},
{Region: models.PIARegion("Czech Republic"), IPs: []net.IP{{89, 238, 186, 228}, {89, 238, 186, 229}, {89, 238, 186, 230}, {185, 216, 35, 66}, {185, 216, 35, 67}, {185, 216, 35, 68}, {185, 216, 35, 69}, {185, 242, 6, 26}, {185, 242, 6, 27}, {185, 242, 6, 28}, {185, 242, 6, 30}}},
{Region: models.PIARegion("DE Berlin"), IPs: []net.IP{{185, 230, 127, 228}, {185, 230, 127, 231}, {185, 230, 127, 233}, {185, 230, 127, 234}, {185, 230, 127, 236}, {185, 230, 127, 237}, {185, 230, 127, 240}, {185, 230, 127, 241}, {185, 230, 127, 243}, {193, 176, 86, 122}, {193, 176, 86, 123}, {193, 176, 86, 124}, {193, 176, 86, 130}, {193, 176, 86, 142}, {193, 176, 86, 146}, {193, 176, 86, 154}, {193, 176, 86, 158}, {193, 176, 86, 166}, {193, 176, 86, 178}, {194, 36, 108, 6}}},
{Region: models.PIARegion("DE Frankfurt"), IPs: []net.IP{{185, 220, 70, 132}, {185, 220, 70, 133}, {185, 220, 70, 134}, {185, 220, 70, 136}, {185, 220, 70, 138}, {185, 220, 70, 139}, {185, 220, 70, 140}, {185, 220, 70, 143}, {185, 220, 70, 145}, {185, 220, 70, 147}, {185, 220, 70, 148}, {185, 220, 70, 149}, {185, 220, 70, 150}, {185, 220, 70, 152}, {185, 220, 70, 153}, {185, 220, 70, 162}, {185, 220, 70, 164}, {185, 220, 70, 166}, {185, 220, 70, 172}, {185, 220, 70, 174}}},
{Region: models.PIARegion("Denmark"), IPs: []net.IP{{82, 102, 20, 162}, {82, 102, 20, 163}, {82, 102, 20, 164}, {82, 102, 20, 165}, {82, 102, 20, 166}, {82, 102, 20, 168}, {82, 102, 20, 169}, {82, 102, 20, 170}, {82, 102, 20, 171}, {82, 102, 20, 172}, {82, 102, 20, 173}, {82, 102, 20, 174}, {82, 102, 20, 175}, {82, 102, 20, 176}, {82, 102, 20, 177}, {82, 102, 20, 178}, {82, 102, 20, 179}, {82, 102, 20, 180}, {82, 102, 20, 182}, {82, 102, 20, 183}}},
{Region: models.PIARegion("Finlan"), IPs: []net.IP{{196, 244, 191, 2}, {196, 244, 191, 10}, {196, 244, 191, 18}, {196, 244, 191, 26}, {196, 244, 191, 42}, {196, 244, 191, 50}, {196, 244, 191, 58}, {196, 244, 191, 74}, {196, 244, 191, 82}, {196, 244, 191, 90}, {196, 244, 191, 98}, {196, 244, 191, 106}, {196, 244, 191, 114}, {196, 244, 191, 122}, {196, 244, 191, 138}, {196, 244, 191, 146}}},
{Region: models.PIARegion("France"), IPs: []net.IP{{194, 99, 106, 148}, {194, 187, 249, 35}, {194, 187, 249, 37}, {194, 187, 249, 38}, {194, 187, 249, 39}, {194, 187, 249, 43}, {194, 187, 249, 44}, {194, 187, 249, 47}, {194, 187, 249, 48}, {194, 187, 249, 54}, {194, 187, 249, 57}, {194, 187, 249, 59}, {194, 187, 249, 61}, {194, 187, 249, 62}, {194, 187, 249, 179}, {194, 187, 249, 180}, {194, 187, 249, 182}, {194, 187, 249, 183}, {194, 187, 249, 187}, {194, 187, 249, 190}}},
{Region: models.PIARegion("Hong Kong"), IPs: []net.IP{{84, 17, 37, 1}, {84, 17, 37, 23}, {84, 17, 37, 45}, {119, 81, 135, 2}, {119, 81, 135, 5}, {119, 81, 135, 28}, {119, 81, 135, 29}, {119, 81, 135, 47}, {119, 81, 135, 51}, {119, 81, 135, 53}, {119, 81, 253, 212}, {119, 81, 253, 218}, {119, 81, 253, 226}, {119, 81, 253, 227}, {119, 81, 253, 229}, {119, 81, 253, 230}, {119, 81, 253, 241}, {119, 81, 253, 242}, {161, 202, 39, 240}, {161, 202, 44, 94}}},
{Region: models.PIARegion("Hungary"), IPs: []net.IP{{185, 128, 26, 18}, {185, 128, 26, 19}, {185, 128, 26, 20}, {185, 128, 26, 21}, {185, 128, 26, 22}, {185, 128, 26, 23}, {185, 128, 26, 24}, {185, 189, 114, 98}}},
{Region: models.PIARegion("India"), IPs: []net.IP{{150, 242, 12, 155}, {150, 242, 12, 171}, {150, 242, 12, 187}}},
{Region: models.PIARegion("Ireland"), IPs: []net.IP{{23, 92, 127, 2}, {23, 92, 127, 10}, {23, 92, 127, 18}, {23, 92, 127, 34}, {23, 92, 127, 42}, {23, 92, 127, 50}, {23, 92, 127, 58}, {23, 92, 127, 66}}},
{Region: models.PIARegion("Israel"), IPs: []net.IP{{31, 168, 172, 136}, {31, 168, 172, 142}, {31, 168, 172, 143}, {31, 168, 172, 145}, {31, 168, 172, 146}, {31, 168, 172, 147}}},
{Region: models.PIARegion("Italy"), IPs: []net.IP{{82, 102, 21, 98}, {82, 102, 21, 211}, {82, 102, 21, 214}, {82, 102, 21, 217}}},
{Region: models.PIARegion("Japan"), IPs: []net.IP{{103, 208, 220, 130}, {103, 208, 220, 132}, {103, 208, 220, 135}, {103, 208, 220, 138}}},
{Region: models.PIARegion("Luxembourg"), IPs: []net.IP{{92, 223, 89, 133}, {92, 223, 89, 134}, {92, 223, 89, 135}, {92, 223, 89, 136}, {92, 223, 89, 137}, {92, 223, 89, 138}, {92, 223, 89, 140}, {92, 223, 89, 142}}},
{Region: models.PIARegion("Mexico"), IPs: []net.IP{{169, 57, 0, 200}, {169, 57, 0, 205}, {169, 57, 0, 211}, {169, 57, 0, 212}, {169, 57, 0, 214}, {169, 57, 0, 217}, {169, 57, 0, 218}, {169, 57, 0, 219}, {169, 57, 0, 221}, {169, 57, 0, 224}, {169, 57, 0, 225}, {169, 57, 0, 229}, {169, 57, 0, 230}, {169, 57, 0, 231}, {169, 57, 0, 233}, {169, 57, 0, 235}, {169, 57, 0, 238}, {169, 57, 0, 243}, {169, 57, 0, 247}, {169, 57, 0, 248}}},
{Region: models.PIARegion("Netherlands"), IPs: []net.IP{{46, 166, 138, 145}, {46, 166, 138, 161}, {46, 166, 138, 170}, {46, 166, 138, 175}, {46, 166, 186, 247}, {46, 166, 188, 202}, {46, 166, 188, 216}, {46, 166, 190, 176}, {46, 166, 190, 179}, {46, 166, 190, 182}, {46, 166, 190, 183}, {46, 166, 190, 184}, {46, 166, 190, 186}, {46, 166, 190, 194}, {46, 166, 190, 219}, {46, 166, 190, 222}, {46, 166, 190, 227}, {46, 166, 190, 236}, {77, 247, 182, 241}, {109, 201, 154, 182}}},
{Region: models.PIARegion("New Zealand"), IPs: []net.IP{{103, 231, 90, 171}, {103, 231, 90, 172}, {103, 231, 90, 173}, {103, 231, 90, 174}, {103, 231, 91, 34}, {103, 231, 91, 66}, {103, 231, 91, 67}, {103, 231, 91, 69}, {103, 231, 91, 70}, {103, 231, 91, 74}}},
{Region: models.PIARegion("Norway"), IPs: []net.IP{{82, 102, 27, 50}, {82, 102, 27, 51}, {82, 102, 27, 52}, {82, 102, 27, 53}, {82, 102, 27, 54}, {82, 102, 27, 55}, {82, 102, 27, 56}, {82, 102, 27, 57}, {82, 102, 27, 74}, {82, 102, 27, 75}, {82, 102, 27, 76}, {82, 102, 27, 116}, {82, 102, 27, 117}, {82, 102, 27, 118}, {82, 102, 27, 125}, {82, 102, 27, 126}, {185, 206, 225, 222}, {185, 253, 97, 226}, {185, 253, 97, 227}, {185, 253, 97, 228}}},
{Region: models.PIARegion("Poland"), IPs: []net.IP{{185, 244, 214, 14}, {185, 244, 214, 194}, {185, 244, 214, 196}, {185, 244, 214, 197}, {185, 244, 214, 198}, {185, 244, 214, 199}, {185, 244, 214, 200}}},
{Region: models.PIARegion("Romania"), IPs: []net.IP{{86, 105, 25, 66}, {86, 105, 25, 68}, {86, 105, 25, 69}, {86, 105, 25, 70}, {86, 105, 25, 74}, {86, 105, 25, 75}, {86, 105, 25, 76}, {86, 105, 25, 77}, {86, 105, 25, 78}, {89, 33, 8, 38}, {89, 33, 8, 42}, {94, 176, 148, 34}, {94, 176, 148, 35}, {185, 45, 12, 126}, {185, 210, 218, 98}, {185, 210, 218, 99}, {185, 210, 218, 100}, {185, 210, 218, 101}, {185, 210, 218, 104}, {185, 210, 218, 105}}},
{Region: models.PIARegion("Singapore"), IPs: []net.IP{{37, 120, 208, 66}, {37, 120, 208, 67}, {37, 120, 208, 68}, {37, 120, 208, 69}, {37, 120, 208, 71}, {37, 120, 208, 72}, {37, 120, 208, 73}, {37, 120, 208, 74}, {37, 120, 208, 75}, {37, 120, 208, 76}, {37, 120, 208, 77}, {37, 120, 208, 78}, {37, 120, 208, 79}, {37, 120, 208, 80}, {37, 120, 208, 81}, {37, 120, 208, 82}, {37, 120, 208, 83}}},
{Region: models.PIARegion("Spain"), IPs: []net.IP{{37, 120, 148, 86}, {185, 230, 124, 53}, {194, 99, 104, 30}}},
{Region: models.PIARegion("Sweden"), IPs: []net.IP{{45, 12, 220, 165}, {45, 12, 220, 171}, {45, 12, 220, 197}, {45, 12, 220, 199}, {45, 12, 220, 203}, {45, 12, 220, 205}, {45, 12, 220, 207}, {45, 12, 220, 208}, {45, 12, 220, 210}, {45, 12, 220, 213}, {45, 12, 220, 215}, {45, 12, 220, 221}, {45, 12, 220, 222}, {45, 12, 220, 236}, {45, 12, 220, 241}, {45, 12, 220, 249}, {45, 12, 220, 253}, {45, 83, 91, 20}, {45, 83, 91, 26}, {45, 83, 91, 28}}},
{Region: models.PIARegion("Switzerland"), IPs: []net.IP{{82, 102, 24, 250}, {82, 102, 24, 252}, {91, 132, 136, 45}, {91, 132, 136, 53}, {185, 156, 175, 86}, {185, 156, 175, 93}, {185, 212, 170, 180}, {185, 212, 170, 183}, {185, 230, 125, 34}, {185, 230, 125, 35}, {185, 230, 125, 36}, {185, 230, 125, 38}, {185, 230, 125, 43}, {185, 230, 125, 45}, {185, 230, 125, 49}, {185, 230, 125, 51}, {185, 230, 125, 86}, {195, 206, 105, 215}, {195, 206, 105, 216}, {212, 102, 36, 1}}},
{Region: models.PIARegion("UAE"), IPs: []net.IP{{45, 9, 250, 42}, {45, 9, 250, 46}, {45, 9, 250, 62}}},
{Region: models.PIARegion("UK London"), IPs: []net.IP{{89, 238, 150, 8}, {89, 238, 150, 10}, {89, 238, 150, 17}, {89, 238, 150, 20}, {89, 238, 150, 21}, {89, 238, 150, 22}, {89, 238, 150, 23}, {89, 238, 154, 19}, {89, 238, 154, 116}, {89, 238, 154, 117}, {89, 238, 154, 124}, {89, 238, 154, 125}, {89, 238, 154, 165}, {89, 238, 154, 169}, {89, 238, 154, 171}, {89, 238, 154, 173}, {89, 238, 154, 228}, {89, 238, 154, 239}, {89, 238, 154, 247}, {185, 253, 98, 94}}},
{Region: models.PIARegion("UK Manchester"), IPs: []net.IP{{89, 238, 137, 37}, {89, 238, 137, 39}, {89, 238, 137, 40}, {89, 238, 137, 41}, {89, 238, 137, 42}, {89, 238, 137, 43}, {89, 238, 139, 4}, {89, 238, 139, 5}, {89, 238, 139, 7}, {89, 238, 139, 8}, {89, 238, 139, 9}, {89, 238, 139, 10}, {89, 238, 139, 11}, {89, 238, 139, 12}, {89, 238, 139, 13}, {89, 238, 139, 52}, {89, 238, 139, 53}, {89, 238, 139, 55}, {89, 238, 139, 57}, {89, 238, 139, 58}}},
{Region: models.PIARegion("UK Southampton"), IPs: []net.IP{{31, 24, 226, 132}, {31, 24, 226, 136}, {31, 24, 226, 147}, {31, 24, 226, 186}, {31, 24, 226, 188}, {31, 24, 226, 204}, {31, 24, 226, 205}, {31, 24, 226, 209}, {31, 24, 226, 219}, {31, 24, 226, 220}, {31, 24, 226, 222}, {31, 24, 226, 224}, {31, 24, 226, 225}, {31, 24, 226, 227}, {31, 24, 226, 232}, {31, 24, 226, 233}, {31, 24, 226, 235}, {31, 24, 226, 236}, {31, 24, 226, 241}, {31, 24, 226, 244}}},
{Region: models.PIARegion("US Atlanta"), IPs: []net.IP{{66, 115, 168, 10}, {66, 115, 168, 19}, {66, 115, 168, 21}, {66, 115, 168, 23}, {66, 115, 168, 26}, {66, 115, 168, 28}, {66, 115, 169, 195}, {66, 115, 169, 209}, {66, 115, 169, 217}, {66, 115, 169, 218}, {66, 115, 169, 221}, {66, 115, 169, 226}, {66, 115, 169, 230}, {66, 115, 169, 233}, {66, 115, 169, 235}, {66, 115, 169, 237}, {66, 115, 169, 239}, {66, 115, 169, 240}, {66, 115, 169, 242}, {66, 115, 169, 244}}},
{Region: models.PIARegion("US California"), IPs: []net.IP{{91, 207, 175, 53}, {91, 207, 175, 70}, {91, 207, 175, 71}, {91, 207, 175, 99}, {91, 207, 175, 101}, {91, 207, 175, 104}, {91, 207, 175, 110}, {91, 207, 175, 112}, {91, 207, 175, 166}, {91, 207, 175, 170}, {91, 207, 175, 177}, {91, 207, 175, 178}, {91, 207, 175, 207}, {91, 207, 175, 227}, {91, 207, 175, 228}, {91, 207, 175, 236}, {91, 207, 175, 252}, {185, 245, 87, 179}, {185, 245, 87, 216}, {212, 103, 49, 162}}},
{Region: models.PIARegion("US Chicago"), IPs: []net.IP{{104, 200, 153, 96}, {199, 116, 115, 130}, {199, 116, 115, 131}, {199, 116, 115, 132}, {199, 116, 115, 133}, {199, 116, 115, 134}, {199, 116, 115, 135}, {199, 116, 115, 136}, {199, 116, 115, 137}, {199, 116, 115, 138}, {199, 116, 115, 139}, {199, 116, 115, 140}, {199, 116, 115, 141}, {199, 116, 115, 142}, {199, 116, 115, 143}, {199, 116, 115, 144}, {199, 116, 115, 145}, {199, 116, 115, 146}, {199, 116, 115, 147}, {199, 116, 115, 148}}},
{Region: models.PIARegion("US Denver"), IPs: []net.IP{{174, 128, 225, 2}, {174, 128, 225, 106}, {174, 128, 225, 186}, {174, 128, 226, 10}, {174, 128, 226, 18}, {174, 128, 227, 226}, {174, 128, 242, 234}, {174, 128, 243, 114}, {174, 128, 243, 122}, {174, 128, 245, 106}, {174, 128, 250, 18}, {198, 148, 82, 82}, {198, 148, 88, 250}, {199, 115, 97, 202}, {199, 115, 98, 146}, {199, 115, 98, 226}, {199, 115, 99, 82}, {199, 115, 99, 218}, {199, 115, 101, 178}, {199, 115, 102, 154}}},
{Region: models.PIARegion("US East"), IPs: []net.IP{{193, 37, 253, 50}, {193, 37, 253, 52}, {193, 37, 253, 105}, {193, 37, 253, 136}, {193, 37, 253, 137}, {194, 59, 251, 27}, {194, 59, 251, 37}, {194, 59, 251, 52}, {194, 59, 251, 68}, {194, 59, 251, 78}, {194, 59, 251, 80}, {194, 59, 251, 85}, {194, 59, 251, 87}, {194, 59, 251, 108}, {194, 59, 251, 136}, {194, 59, 251, 141}, {194, 59, 251, 166}, {194, 59, 251, 168}, {194, 59, 251, 218}, {194, 59, 251, 248}}},
{Region: models.PIARegion("US Florida"), IPs: []net.IP{{193, 37, 252, 3}, {193, 37, 252, 6}, {193, 37, 252, 8}, {193, 37, 252, 11}, {193, 37, 252, 16}, {193, 37, 252, 19}, {193, 37, 252, 21}, {193, 37, 252, 48}, {193, 37, 252, 51}, {193, 37, 252, 53}, {193, 37, 252, 54}, {193, 37, 252, 58}, {193, 37, 252, 59}, {193, 37, 252, 70}, {193, 37, 252, 78}, {193, 37, 252, 82}, {193, 37, 252, 102}, {193, 37, 252, 105}, {193, 37, 252, 123}, {193, 37, 252, 126}}},
{Region: models.PIARegion("US Houston"), IPs: []net.IP{{74, 81, 88, 26}, {74, 81, 88, 42}, {74, 81, 88, 58}, {74, 81, 88, 66}, {74, 81, 88, 114}, {74, 81, 88, 130}, {205, 251, 148, 34}, {205, 251, 148, 42}, {205, 251, 148, 66}, {205, 251, 148, 74}, {205, 251, 148, 82}, {205, 251, 148, 98}, {205, 251, 148, 138}, {205, 251, 150, 146}, {205, 251, 150, 194}, {205, 251, 150, 210}, {205, 251, 150, 218}, {205, 251, 150, 226}, {205, 251, 150, 234}, {205, 251, 151, 42}}},
{Region: models.PIARegion("US Las Vegas"), IPs: []net.IP{{162, 251, 236, 2}, {162, 251, 236, 4}, {162, 251, 236, 5}, {162, 251, 236, 7}, {162, 251, 236, 8}, {162, 251, 236, 9}, {199, 127, 56, 82}, {199, 127, 56, 83}, {199, 127, 56, 84}, {199, 127, 56, 86}, {199, 127, 56, 87}, {199, 127, 56, 88}, {199, 127, 56, 89}, {199, 127, 56, 91}, {199, 127, 56, 114}, {199, 127, 56, 115}, {199, 127, 56, 117}, {199, 127, 56, 118}, {199, 127, 56, 119}, {199, 127, 56, 121}}},
{Region: models.PIARegion("US New York City"), IPs: []net.IP{{107, 182, 231, 32}, {107, 182, 231, 37}, {107, 182, 231, 39}, {173, 244, 223, 122}, {209, 95, 50, 14}, {209, 95, 50, 16}, {209, 95, 50, 50}, {209, 95, 50, 55}, {209, 95, 50, 85}, {209, 95, 50, 89}, {209, 95, 50, 92}, {209, 95, 50, 93}, {209, 95, 50, 95}, {209, 95, 50, 99}, {209, 95, 50, 107}, {209, 95, 50, 113}, {209, 95, 50, 132}, {209, 95, 50, 133}, {209, 95, 50, 135}, {209, 95, 51, 22}}},
{Region: models.PIARegion("US Seattle"), IPs: []net.IP{{104, 200, 154, 9}, {104, 200, 154, 11}, {104, 200, 154, 19}, {104, 200, 154, 21}, {104, 200, 154, 29}, {104, 200, 154, 37}, {104, 200, 154, 41}, {104, 200, 154, 44}, {104, 200, 154, 51}, {104, 200, 154, 58}, {104, 200, 154, 63}, {104, 200, 154, 69}, {104, 200, 154, 70}, {104, 200, 154, 72}, {104, 200, 154, 78}, {104, 200, 154, 79}, {104, 200, 154, 84}, {104, 200, 154, 87}, {104, 200, 154, 88}, {104, 200, 154, 97}}},
{Region: models.PIARegion("US Silicon Valley"), IPs: []net.IP{{199, 116, 118, 134}, {199, 116, 118, 137}, {199, 116, 118, 140}, {199, 116, 118, 148}, {199, 116, 118, 150}, {199, 116, 118, 156}, {199, 116, 118, 163}, {199, 116, 118, 166}, {199, 116, 118, 168}, {199, 116, 118, 169}, {199, 116, 118, 196}, {199, 116, 118, 202}, {199, 116, 118, 209}, {199, 116, 118, 211}, {199, 116, 118, 215}, {199, 116, 118, 226}, {199, 116, 118, 227}, {199, 116, 118, 236}, {199, 116, 118, 237}, {199, 116, 118, 246}}},
{Region: models.PIARegion("US Texas"), IPs: []net.IP{{162, 216, 46, 21}, {162, 216, 46, 25}, {162, 216, 46, 40}, {162, 216, 46, 51}, {162, 216, 46, 56}, {162, 216, 46, 57}, {162, 216, 46, 72}, {162, 216, 46, 76}, {162, 216, 46, 81}, {162, 216, 46, 106}, {162, 216, 46, 107}, {162, 216, 46, 117}, {162, 216, 46, 119}, {162, 216, 46, 121}, {162, 216, 46, 131}, {162, 216, 46, 136}, {162, 216, 46, 139}, {162, 216, 46, 141}, {162, 216, 46, 164}, {162, 216, 46, 171}}},
{Region: models.PIARegion("US Washington DC"), IPs: []net.IP{{70, 32, 0, 24}, {70, 32, 0, 46}, {70, 32, 0, 55}, {70, 32, 0, 76}, {70, 32, 0, 121}, {70, 32, 0, 137}, {70, 32, 0, 153}, {70, 32, 0, 155}, {70, 32, 0, 165}, {70, 32, 0, 166}, {70, 32, 0, 167}, {70, 32, 0, 168}, {70, 32, 0, 169}, {70, 32, 0, 170}, {70, 32, 0, 172}, {70, 32, 0, 173}, {70, 32, 0, 176}, {70, 32, 0, 177}, {70, 32, 0, 178}, {70, 32, 0, 179}}},
{Region: models.PIARegion("US West"), IPs: []net.IP{{104, 200, 151, 9}, {104, 200, 151, 13}, {104, 200, 151, 16}, {104, 200, 151, 17}, {104, 200, 151, 23}, {104, 200, 151, 24}, {104, 200, 151, 32}, {104, 200, 151, 35}, {104, 200, 151, 36}, {104, 200, 151, 37}, {104, 200, 151, 39}, {104, 200, 151, 41}, {104, 200, 151, 43}, {104, 200, 151, 47}, {104, 200, 151, 54}, {104, 200, 151, 59}, {104, 200, 151, 73}, {104, 200, 151, 75}, {104, 200, 151, 76}, {104, 200, 151, 88}}},
{Region: "AU Melbourne", IPs: []net.IP{{27, 50, 82, 131}, {27, 50, 82, 133}, {43, 250, 204, 81}, {43, 250, 204, 83}, {43, 250, 204, 89}, {43, 250, 204, 93}, {43, 250, 204, 95}, {43, 250, 204, 97}, {43, 250, 204, 99}, {43, 250, 204, 101}, {43, 250, 204, 103}, {43, 250, 204, 109}, {43, 250, 204, 111}, {43, 250, 204, 115}, {43, 250, 204, 117}, {43, 250, 204, 119}, {43, 250, 204, 123}, {43, 250, 204, 125}, {118, 127, 62, 227}, {221, 121, 139, 175}}},
{Region: "AU Perth", IPs: []net.IP{{43, 250, 205, 59}, {43, 250, 205, 95}}},
{Region: "AU Sydney", IPs: []net.IP{{27, 50, 70, 87}, {27, 50, 81, 117}, {103, 13, 102, 113}, {103, 13, 102, 119}, {103, 13, 102, 121}, {103, 13, 102, 123}, {103, 13, 102, 127}, {118, 127, 60, 53}, {118, 127, 60, 61}, {221, 121, 145, 145}, {221, 121, 145, 147}}},
{Region: "Austria", IPs: []net.IP{{185, 210, 219, 147}, {185, 210, 219, 154}, {185, 210, 219, 155}, {185, 216, 34, 226}, {185, 216, 34, 227}, {185, 216, 34, 228}, {185, 216, 34, 229}, {185, 216, 34, 230}, {185, 216, 34, 231}, {185, 216, 34, 232}, {185, 216, 34, 233}, {185, 216, 34, 236}, {185, 216, 34, 237}, {185, 216, 34, 238}}},
{Region: "Belgium", IPs: []net.IP{{77, 243, 191, 18}, {77, 243, 191, 19}, {77, 243, 191, 20}, {77, 243, 191, 22}, {77, 243, 191, 26}, {77, 243, 191, 27}, {185, 104, 186, 26}, {185, 232, 21, 29}}},
{Region: "CA Montreal", IPs: []net.IP{{199, 229, 249, 130}, {199, 229, 249, 136}, {199, 229, 249, 141}, {199, 229, 249, 146}, {199, 229, 249, 149}, {199, 229, 249, 151}, {199, 229, 249, 155}, {199, 229, 249, 157}, {199, 229, 249, 178}, {199, 229, 249, 184}, {199, 229, 249, 185}, {199, 229, 249, 189}, {199, 229, 249, 190}, {199, 229, 249, 200}}},
{Region: "CA Toronto", IPs: []net.IP{{172, 98, 67, 5}, {172, 98, 67, 6}, {172, 98, 67, 9}, {172, 98, 67, 12}, {172, 98, 67, 16}, {172, 98, 67, 17}, {172, 98, 67, 20}, {172, 98, 67, 31}, {172, 98, 67, 34}, {172, 98, 67, 45}, {172, 98, 67, 47}, {172, 98, 67, 48}, {172, 98, 67, 49}, {172, 98, 67, 60}, {172, 98, 67, 68}, {172, 98, 67, 73}, {172, 98, 67, 76}, {172, 98, 67, 82}, {172, 98, 67, 90}, {172, 98, 67, 95}}},
{Region: "CA Vancouver", IPs: []net.IP{{107, 181, 189, 71}, {107, 181, 189, 77}, {107, 181, 189, 83}, {172, 83, 40, 20}, {172, 83, 40, 23}, {172, 83, 40, 26}, {172, 83, 40, 99}, {172, 83, 40, 104}, {172, 83, 40, 106}, {172, 83, 40, 111}, {172, 83, 40, 112}}},
{Region: "Czech Republic", IPs: []net.IP{{89, 238, 186, 228}, {89, 238, 186, 229}, {89, 238, 186, 230}, {185, 216, 35, 66}, {185, 216, 35, 67}, {185, 216, 35, 68}, {185, 216, 35, 69}, {185, 242, 6, 26}, {185, 242, 6, 27}, {185, 242, 6, 28}, {185, 242, 6, 30}}},
{Region: "DE Berlin", IPs: []net.IP{{185, 230, 127, 228}, {185, 230, 127, 231}, {185, 230, 127, 233}, {185, 230, 127, 234}, {185, 230, 127, 236}, {185, 230, 127, 237}, {185, 230, 127, 240}, {185, 230, 127, 241}, {185, 230, 127, 243}, {193, 176, 86, 122}, {193, 176, 86, 123}, {193, 176, 86, 124}, {193, 176, 86, 130}, {193, 176, 86, 142}, {193, 176, 86, 146}, {193, 176, 86, 154}, {193, 176, 86, 158}, {193, 176, 86, 166}, {193, 176, 86, 178}, {194, 36, 108, 6}}},
{Region: "DE Frankfurt", IPs: []net.IP{{185, 220, 70, 132}, {185, 220, 70, 133}, {185, 220, 70, 134}, {185, 220, 70, 136}, {185, 220, 70, 138}, {185, 220, 70, 139}, {185, 220, 70, 140}, {185, 220, 70, 143}, {185, 220, 70, 145}, {185, 220, 70, 147}, {185, 220, 70, 148}, {185, 220, 70, 149}, {185, 220, 70, 150}, {185, 220, 70, 152}, {185, 220, 70, 153}, {185, 220, 70, 162}, {185, 220, 70, 164}, {185, 220, 70, 166}, {185, 220, 70, 172}, {185, 220, 70, 174}}},
{Region: "Denmark", IPs: []net.IP{{82, 102, 20, 162}, {82, 102, 20, 163}, {82, 102, 20, 164}, {82, 102, 20, 165}, {82, 102, 20, 166}, {82, 102, 20, 168}, {82, 102, 20, 169}, {82, 102, 20, 170}, {82, 102, 20, 171}, {82, 102, 20, 172}, {82, 102, 20, 173}, {82, 102, 20, 174}, {82, 102, 20, 175}, {82, 102, 20, 176}, {82, 102, 20, 177}, {82, 102, 20, 178}, {82, 102, 20, 179}, {82, 102, 20, 180}, {82, 102, 20, 182}, {82, 102, 20, 183}}},
{Region: "Finlan", IPs: []net.IP{{196, 244, 191, 2}, {196, 244, 191, 10}, {196, 244, 191, 18}, {196, 244, 191, 26}, {196, 244, 191, 42}, {196, 244, 191, 50}, {196, 244, 191, 58}, {196, 244, 191, 74}, {196, 244, 191, 82}, {196, 244, 191, 90}, {196, 244, 191, 98}, {196, 244, 191, 106}, {196, 244, 191, 114}, {196, 244, 191, 122}, {196, 244, 191, 138}, {196, 244, 191, 146}}},
{Region: "France", IPs: []net.IP{{194, 99, 106, 148}, {194, 187, 249, 35}, {194, 187, 249, 37}, {194, 187, 249, 38}, {194, 187, 249, 39}, {194, 187, 249, 43}, {194, 187, 249, 44}, {194, 187, 249, 47}, {194, 187, 249, 48}, {194, 187, 249, 54}, {194, 187, 249, 57}, {194, 187, 249, 59}, {194, 187, 249, 61}, {194, 187, 249, 62}, {194, 187, 249, 179}, {194, 187, 249, 180}, {194, 187, 249, 182}, {194, 187, 249, 183}, {194, 187, 249, 187}, {194, 187, 249, 190}}},
{Region: "Hong Kong", IPs: []net.IP{{84, 17, 37, 1}, {84, 17, 37, 23}, {84, 17, 37, 45}, {119, 81, 135, 2}, {119, 81, 135, 5}, {119, 81, 135, 28}, {119, 81, 135, 29}, {119, 81, 135, 47}, {119, 81, 135, 51}, {119, 81, 135, 53}, {119, 81, 253, 212}, {119, 81, 253, 218}, {119, 81, 253, 226}, {119, 81, 253, 227}, {119, 81, 253, 229}, {119, 81, 253, 230}, {119, 81, 253, 241}, {119, 81, 253, 242}, {161, 202, 39, 240}, {161, 202, 44, 94}}},
{Region: "Hungary", IPs: []net.IP{{185, 128, 26, 18}, {185, 128, 26, 19}, {185, 128, 26, 20}, {185, 128, 26, 21}, {185, 128, 26, 22}, {185, 128, 26, 23}, {185, 128, 26, 24}, {185, 189, 114, 98}}},
{Region: "India", IPs: []net.IP{{150, 242, 12, 155}, {150, 242, 12, 171}, {150, 242, 12, 187}}},
{Region: "Ireland", IPs: []net.IP{{23, 92, 127, 2}, {23, 92, 127, 10}, {23, 92, 127, 18}, {23, 92, 127, 34}, {23, 92, 127, 42}, {23, 92, 127, 50}, {23, 92, 127, 58}, {23, 92, 127, 66}}},
{Region: "Israel", IPs: []net.IP{{31, 168, 172, 136}, {31, 168, 172, 142}, {31, 168, 172, 143}, {31, 168, 172, 145}, {31, 168, 172, 146}, {31, 168, 172, 147}}},
{Region: "Italy", IPs: []net.IP{{82, 102, 21, 98}, {82, 102, 21, 211}, {82, 102, 21, 214}, {82, 102, 21, 217}}},
{Region: "Japan", IPs: []net.IP{{103, 208, 220, 130}, {103, 208, 220, 132}, {103, 208, 220, 135}, {103, 208, 220, 138}}},
{Region: "Luxembourg", IPs: []net.IP{{92, 223, 89, 133}, {92, 223, 89, 134}, {92, 223, 89, 135}, {92, 223, 89, 136}, {92, 223, 89, 137}, {92, 223, 89, 138}, {92, 223, 89, 140}, {92, 223, 89, 142}}},
{Region: "Mexico", IPs: []net.IP{{169, 57, 0, 200}, {169, 57, 0, 205}, {169, 57, 0, 211}, {169, 57, 0, 212}, {169, 57, 0, 214}, {169, 57, 0, 217}, {169, 57, 0, 218}, {169, 57, 0, 219}, {169, 57, 0, 221}, {169, 57, 0, 224}, {169, 57, 0, 225}, {169, 57, 0, 229}, {169, 57, 0, 230}, {169, 57, 0, 231}, {169, 57, 0, 233}, {169, 57, 0, 235}, {169, 57, 0, 238}, {169, 57, 0, 243}, {169, 57, 0, 247}, {169, 57, 0, 248}}},
{Region: "Netherlands", IPs: []net.IP{{46, 166, 138, 145}, {46, 166, 138, 161}, {46, 166, 138, 170}, {46, 166, 138, 175}, {46, 166, 186, 247}, {46, 166, 188, 202}, {46, 166, 188, 216}, {46, 166, 190, 176}, {46, 166, 190, 179}, {46, 166, 190, 182}, {46, 166, 190, 183}, {46, 166, 190, 184}, {46, 166, 190, 186}, {46, 166, 190, 194}, {46, 166, 190, 219}, {46, 166, 190, 222}, {46, 166, 190, 227}, {46, 166, 190, 236}, {77, 247, 182, 241}, {109, 201, 154, 182}}},
{Region: "New Zealand", IPs: []net.IP{{103, 231, 90, 171}, {103, 231, 90, 172}, {103, 231, 90, 173}, {103, 231, 90, 174}, {103, 231, 91, 34}, {103, 231, 91, 66}, {103, 231, 91, 67}, {103, 231, 91, 69}, {103, 231, 91, 70}, {103, 231, 91, 74}}},
{Region: "Norway", IPs: []net.IP{{82, 102, 27, 50}, {82, 102, 27, 51}, {82, 102, 27, 52}, {82, 102, 27, 53}, {82, 102, 27, 54}, {82, 102, 27, 55}, {82, 102, 27, 56}, {82, 102, 27, 57}, {82, 102, 27, 74}, {82, 102, 27, 75}, {82, 102, 27, 76}, {82, 102, 27, 116}, {82, 102, 27, 117}, {82, 102, 27, 118}, {82, 102, 27, 125}, {82, 102, 27, 126}, {185, 206, 225, 222}, {185, 253, 97, 226}, {185, 253, 97, 227}, {185, 253, 97, 228}}},
{Region: "Poland", IPs: []net.IP{{185, 244, 214, 14}, {185, 244, 214, 194}, {185, 244, 214, 196}, {185, 244, 214, 197}, {185, 244, 214, 198}, {185, 244, 214, 199}, {185, 244, 214, 200}}},
{Region: "Romania", IPs: []net.IP{{86, 105, 25, 66}, {86, 105, 25, 68}, {86, 105, 25, 69}, {86, 105, 25, 70}, {86, 105, 25, 74}, {86, 105, 25, 75}, {86, 105, 25, 76}, {86, 105, 25, 77}, {86, 105, 25, 78}, {89, 33, 8, 38}, {89, 33, 8, 42}, {94, 176, 148, 34}, {94, 176, 148, 35}, {185, 45, 12, 126}, {185, 210, 218, 98}, {185, 210, 218, 99}, {185, 210, 218, 100}, {185, 210, 218, 101}, {185, 210, 218, 104}, {185, 210, 218, 105}}},
{Region: "Singapore", IPs: []net.IP{{37, 120, 208, 66}, {37, 120, 208, 67}, {37, 120, 208, 68}, {37, 120, 208, 69}, {37, 120, 208, 71}, {37, 120, 208, 72}, {37, 120, 208, 73}, {37, 120, 208, 74}, {37, 120, 208, 75}, {37, 120, 208, 76}, {37, 120, 208, 77}, {37, 120, 208, 78}, {37, 120, 208, 79}, {37, 120, 208, 80}, {37, 120, 208, 81}, {37, 120, 208, 82}, {37, 120, 208, 83}}},
{Region: "Spain", IPs: []net.IP{{37, 120, 148, 86}, {185, 230, 124, 53}, {194, 99, 104, 30}}},
{Region: "Sweden", IPs: []net.IP{{45, 12, 220, 165}, {45, 12, 220, 171}, {45, 12, 220, 197}, {45, 12, 220, 199}, {45, 12, 220, 203}, {45, 12, 220, 205}, {45, 12, 220, 207}, {45, 12, 220, 208}, {45, 12, 220, 210}, {45, 12, 220, 213}, {45, 12, 220, 215}, {45, 12, 220, 221}, {45, 12, 220, 222}, {45, 12, 220, 236}, {45, 12, 220, 241}, {45, 12, 220, 249}, {45, 12, 220, 253}, {45, 83, 91, 20}, {45, 83, 91, 26}, {45, 83, 91, 28}}},
{Region: "Switzerland", IPs: []net.IP{{82, 102, 24, 250}, {82, 102, 24, 252}, {91, 132, 136, 45}, {91, 132, 136, 53}, {185, 156, 175, 86}, {185, 156, 175, 93}, {185, 212, 170, 180}, {185, 212, 170, 183}, {185, 230, 125, 34}, {185, 230, 125, 35}, {185, 230, 125, 36}, {185, 230, 125, 38}, {185, 230, 125, 43}, {185, 230, 125, 45}, {185, 230, 125, 49}, {185, 230, 125, 51}, {185, 230, 125, 86}, {195, 206, 105, 215}, {195, 206, 105, 216}, {212, 102, 36, 1}}},
{Region: "UAE", IPs: []net.IP{{45, 9, 250, 42}, {45, 9, 250, 46}, {45, 9, 250, 62}}},
{Region: "UK London", IPs: []net.IP{{89, 238, 150, 8}, {89, 238, 150, 10}, {89, 238, 150, 17}, {89, 238, 150, 20}, {89, 238, 150, 21}, {89, 238, 150, 22}, {89, 238, 150, 23}, {89, 238, 154, 19}, {89, 238, 154, 116}, {89, 238, 154, 117}, {89, 238, 154, 124}, {89, 238, 154, 125}, {89, 238, 154, 165}, {89, 238, 154, 169}, {89, 238, 154, 171}, {89, 238, 154, 173}, {89, 238, 154, 228}, {89, 238, 154, 239}, {89, 238, 154, 247}, {185, 253, 98, 94}}},
{Region: "UK Manchester", IPs: []net.IP{{89, 238, 137, 37}, {89, 238, 137, 39}, {89, 238, 137, 40}, {89, 238, 137, 41}, {89, 238, 137, 42}, {89, 238, 137, 43}, {89, 238, 139, 4}, {89, 238, 139, 5}, {89, 238, 139, 7}, {89, 238, 139, 8}, {89, 238, 139, 9}, {89, 238, 139, 10}, {89, 238, 139, 11}, {89, 238, 139, 12}, {89, 238, 139, 13}, {89, 238, 139, 52}, {89, 238, 139, 53}, {89, 238, 139, 55}, {89, 238, 139, 57}, {89, 238, 139, 58}}},
{Region: "UK Southampton", IPs: []net.IP{{31, 24, 226, 132}, {31, 24, 226, 136}, {31, 24, 226, 147}, {31, 24, 226, 186}, {31, 24, 226, 188}, {31, 24, 226, 204}, {31, 24, 226, 205}, {31, 24, 226, 209}, {31, 24, 226, 219}, {31, 24, 226, 220}, {31, 24, 226, 222}, {31, 24, 226, 224}, {31, 24, 226, 225}, {31, 24, 226, 227}, {31, 24, 226, 232}, {31, 24, 226, 233}, {31, 24, 226, 235}, {31, 24, 226, 236}, {31, 24, 226, 241}, {31, 24, 226, 244}}},
{Region: "US Atlanta", IPs: []net.IP{{66, 115, 168, 10}, {66, 115, 168, 19}, {66, 115, 168, 21}, {66, 115, 168, 23}, {66, 115, 168, 26}, {66, 115, 168, 28}, {66, 115, 169, 195}, {66, 115, 169, 209}, {66, 115, 169, 217}, {66, 115, 169, 218}, {66, 115, 169, 221}, {66, 115, 169, 226}, {66, 115, 169, 230}, {66, 115, 169, 233}, {66, 115, 169, 235}, {66, 115, 169, 237}, {66, 115, 169, 239}, {66, 115, 169, 240}, {66, 115, 169, 242}, {66, 115, 169, 244}}},
{Region: "US California", IPs: []net.IP{{91, 207, 175, 53}, {91, 207, 175, 70}, {91, 207, 175, 71}, {91, 207, 175, 99}, {91, 207, 175, 101}, {91, 207, 175, 104}, {91, 207, 175, 110}, {91, 207, 175, 112}, {91, 207, 175, 166}, {91, 207, 175, 170}, {91, 207, 175, 177}, {91, 207, 175, 178}, {91, 207, 175, 207}, {91, 207, 175, 227}, {91, 207, 175, 228}, {91, 207, 175, 236}, {91, 207, 175, 252}, {185, 245, 87, 179}, {185, 245, 87, 216}, {212, 103, 49, 162}}},
{Region: "US Chicago", IPs: []net.IP{{104, 200, 153, 96}, {199, 116, 115, 130}, {199, 116, 115, 131}, {199, 116, 115, 132}, {199, 116, 115, 133}, {199, 116, 115, 134}, {199, 116, 115, 135}, {199, 116, 115, 136}, {199, 116, 115, 137}, {199, 116, 115, 138}, {199, 116, 115, 139}, {199, 116, 115, 140}, {199, 116, 115, 141}, {199, 116, 115, 142}, {199, 116, 115, 143}, {199, 116, 115, 144}, {199, 116, 115, 145}, {199, 116, 115, 146}, {199, 116, 115, 147}, {199, 116, 115, 148}}},
{Region: "US Denver", IPs: []net.IP{{174, 128, 225, 2}, {174, 128, 225, 106}, {174, 128, 225, 186}, {174, 128, 226, 10}, {174, 128, 226, 18}, {174, 128, 227, 226}, {174, 128, 242, 234}, {174, 128, 243, 114}, {174, 128, 243, 122}, {174, 128, 245, 106}, {174, 128, 250, 18}, {198, 148, 82, 82}, {198, 148, 88, 250}, {199, 115, 97, 202}, {199, 115, 98, 146}, {199, 115, 98, 226}, {199, 115, 99, 82}, {199, 115, 99, 218}, {199, 115, 101, 178}, {199, 115, 102, 154}}},
{Region: "US East", IPs: []net.IP{{193, 37, 253, 50}, {193, 37, 253, 52}, {193, 37, 253, 105}, {193, 37, 253, 136}, {193, 37, 253, 137}, {194, 59, 251, 27}, {194, 59, 251, 37}, {194, 59, 251, 52}, {194, 59, 251, 68}, {194, 59, 251, 78}, {194, 59, 251, 80}, {194, 59, 251, 85}, {194, 59, 251, 87}, {194, 59, 251, 108}, {194, 59, 251, 136}, {194, 59, 251, 141}, {194, 59, 251, 166}, {194, 59, 251, 168}, {194, 59, 251, 218}, {194, 59, 251, 248}}},
{Region: "US Florida", IPs: []net.IP{{193, 37, 252, 3}, {193, 37, 252, 6}, {193, 37, 252, 8}, {193, 37, 252, 11}, {193, 37, 252, 16}, {193, 37, 252, 19}, {193, 37, 252, 21}, {193, 37, 252, 48}, {193, 37, 252, 51}, {193, 37, 252, 53}, {193, 37, 252, 54}, {193, 37, 252, 58}, {193, 37, 252, 59}, {193, 37, 252, 70}, {193, 37, 252, 78}, {193, 37, 252, 82}, {193, 37, 252, 102}, {193, 37, 252, 105}, {193, 37, 252, 123}, {193, 37, 252, 126}}},
{Region: "US Houston", IPs: []net.IP{{74, 81, 88, 26}, {74, 81, 88, 42}, {74, 81, 88, 58}, {74, 81, 88, 66}, {74, 81, 88, 114}, {74, 81, 88, 130}, {205, 251, 148, 34}, {205, 251, 148, 42}, {205, 251, 148, 66}, {205, 251, 148, 74}, {205, 251, 148, 82}, {205, 251, 148, 98}, {205, 251, 148, 138}, {205, 251, 150, 146}, {205, 251, 150, 194}, {205, 251, 150, 210}, {205, 251, 150, 218}, {205, 251, 150, 226}, {205, 251, 150, 234}, {205, 251, 151, 42}}},
{Region: "US Las Vegas", IPs: []net.IP{{162, 251, 236, 2}, {162, 251, 236, 4}, {162, 251, 236, 5}, {162, 251, 236, 7}, {162, 251, 236, 8}, {162, 251, 236, 9}, {199, 127, 56, 82}, {199, 127, 56, 83}, {199, 127, 56, 84}, {199, 127, 56, 86}, {199, 127, 56, 87}, {199, 127, 56, 88}, {199, 127, 56, 89}, {199, 127, 56, 91}, {199, 127, 56, 114}, {199, 127, 56, 115}, {199, 127, 56, 117}, {199, 127, 56, 118}, {199, 127, 56, 119}, {199, 127, 56, 121}}},
{Region: "US New York City", IPs: []net.IP{{107, 182, 231, 32}, {107, 182, 231, 37}, {107, 182, 231, 39}, {173, 244, 223, 122}, {209, 95, 50, 14}, {209, 95, 50, 16}, {209, 95, 50, 50}, {209, 95, 50, 55}, {209, 95, 50, 85}, {209, 95, 50, 89}, {209, 95, 50, 92}, {209, 95, 50, 93}, {209, 95, 50, 95}, {209, 95, 50, 99}, {209, 95, 50, 107}, {209, 95, 50, 113}, {209, 95, 50, 132}, {209, 95, 50, 133}, {209, 95, 50, 135}, {209, 95, 51, 22}}},
{Region: "US Seattle", IPs: []net.IP{{104, 200, 154, 9}, {104, 200, 154, 11}, {104, 200, 154, 19}, {104, 200, 154, 21}, {104, 200, 154, 29}, {104, 200, 154, 37}, {104, 200, 154, 41}, {104, 200, 154, 44}, {104, 200, 154, 51}, {104, 200, 154, 58}, {104, 200, 154, 63}, {104, 200, 154, 69}, {104, 200, 154, 70}, {104, 200, 154, 72}, {104, 200, 154, 78}, {104, 200, 154, 79}, {104, 200, 154, 84}, {104, 200, 154, 87}, {104, 200, 154, 88}, {104, 200, 154, 97}}},
{Region: "US Silicon Valley", IPs: []net.IP{{199, 116, 118, 134}, {199, 116, 118, 137}, {199, 116, 118, 140}, {199, 116, 118, 148}, {199, 116, 118, 150}, {199, 116, 118, 156}, {199, 116, 118, 163}, {199, 116, 118, 166}, {199, 116, 118, 168}, {199, 116, 118, 169}, {199, 116, 118, 196}, {199, 116, 118, 202}, {199, 116, 118, 209}, {199, 116, 118, 211}, {199, 116, 118, 215}, {199, 116, 118, 226}, {199, 116, 118, 227}, {199, 116, 118, 236}, {199, 116, 118, 237}, {199, 116, 118, 246}}},
{Region: "US Texas", IPs: []net.IP{{162, 216, 46, 21}, {162, 216, 46, 25}, {162, 216, 46, 40}, {162, 216, 46, 51}, {162, 216, 46, 56}, {162, 216, 46, 57}, {162, 216, 46, 72}, {162, 216, 46, 76}, {162, 216, 46, 81}, {162, 216, 46, 106}, {162, 216, 46, 107}, {162, 216, 46, 117}, {162, 216, 46, 119}, {162, 216, 46, 121}, {162, 216, 46, 131}, {162, 216, 46, 136}, {162, 216, 46, 139}, {162, 216, 46, 141}, {162, 216, 46, 164}, {162, 216, 46, 171}}},
{Region: "US Washington DC", IPs: []net.IP{{70, 32, 0, 24}, {70, 32, 0, 46}, {70, 32, 0, 55}, {70, 32, 0, 76}, {70, 32, 0, 121}, {70, 32, 0, 137}, {70, 32, 0, 153}, {70, 32, 0, 155}, {70, 32, 0, 165}, {70, 32, 0, 166}, {70, 32, 0, 167}, {70, 32, 0, 168}, {70, 32, 0, 169}, {70, 32, 0, 170}, {70, 32, 0, 172}, {70, 32, 0, 173}, {70, 32, 0, 176}, {70, 32, 0, 177}, {70, 32, 0, 178}, {70, 32, 0, 179}}},
{Region: "US West", IPs: []net.IP{{104, 200, 151, 9}, {104, 200, 151, 13}, {104, 200, 151, 16}, {104, 200, 151, 17}, {104, 200, 151, 23}, {104, 200, 151, 24}, {104, 200, 151, 32}, {104, 200, 151, 35}, {104, 200, 151, 36}, {104, 200, 151, 37}, {104, 200, 151, 39}, {104, 200, 151, 41}, {104, 200, 151, 43}, {104, 200, 151, 47}, {104, 200, 151, 54}, {104, 200, 151, 59}, {104, 200, 151, 73}, {104, 200, 151, 75}, {104, 200, 151, 76}, {104, 200, 151, 88}}},
}
}

View File

@@ -2,9 +2,9 @@ package constants
const (
// Announcement is a message announcement
Announcement = "New VPN provider supported surfshark.com"
Announcement = "Big code refactor, things may break but I'll fix them quickly!"
// AnnouncementExpiration is the expiration date of the announcement in format yyyy-mm-dd
AnnouncementExpiration = "2020-06-20"
AnnouncementExpiration = "2020-06-25"
)
const (

View File

@@ -11,164 +11,164 @@ const (
SurfsharkOpenvpnStaticKeyV1 = "b02cb1d7c6fee5d4f89b8de72b51a8d0c7b282631d6fc19be1df6ebae9e2779e6d9f097058a31c97f57f0c35526a44ae09a01d1284b50b954d9246725a1ead1ff224a102ed9ab3da0152a15525643b2eee226c37041dc55539d475183b889a10e18bb94f079a4a49888da566b99783460ece01daaf93548beea6c827d9674897e7279ff1a19cb092659e8c1860fbad0db4ad0ad5732f1af4655dbd66214e552f04ed8fd0104e1d4bf99c249ac229ce169d9ba22068c6c0ab742424760911d4636aafb4b85f0c952a9ce4275bc821391aa65fcd0d2394f006e3fba0fd34c4bc4ab260f4b45dec3285875589c97d3087c9134d3a3aa2f904512e85aa2dc2202498"
)
func SurfsharkServers() []models.SurfsharkServer {
return []models.SurfsharkServer{
{Region: models.SurfsharkRegion("Albania"), IPs: []net.IP{{31, 171, 152, 195}, {31, 171, 152, 197}, {31, 171, 154, 147}, {31, 171, 154, 149}, {31, 171, 154, 163}, {31, 171, 154, 165}}},
{Region: models.SurfsharkRegion("Australia Adelaide"), IPs: []net.IP{{45, 248, 79, 19}, {45, 248, 79, 21}, {45, 248, 79, 27}, {45, 248, 79, 29}, {45, 248, 79, 35}, {45, 248, 79, 37}, {45, 248, 79, 51}, {45, 248, 79, 53}, {45, 248, 79, 67}, {45, 248, 79, 69}, {45, 248, 79, 83}, {45, 248, 79, 85}}},
{Region: models.SurfsharkRegion("Australia Brisbane"), IPs: []net.IP{{45, 248, 77, 235}, {45, 248, 77, 237}, {144, 48, 39, 11}, {144, 48, 39, 13}, {144, 48, 39, 67}, {144, 48, 39, 69}, {144, 48, 39, 83}, {144, 48, 39, 85}, {144, 48, 39, 107}, {144, 48, 39, 109}, {144, 48, 39, 123}, {144, 48, 39, 125}, {144, 48, 39, 131}, {144, 48, 39, 133}}},
{Region: models.SurfsharkRegion("Australia Melbourne"), IPs: []net.IP{{103, 192, 80, 131}, {103, 192, 80, 133}, {103, 192, 80, 139}, {103, 192, 80, 141}, {103, 192, 80, 147}, {103, 192, 80, 149}, {144, 48, 38, 19}, {144, 48, 38, 21}, {144, 48, 38, 139}, {144, 48, 38, 141}, {144, 48, 38, 147}, {144, 48, 38, 149}, {144, 48, 38, 179}, {144, 48, 38, 181}, {144, 48, 38, 183}}},
{Region: models.SurfsharkRegion("Australia Perth"), IPs: []net.IP{{45, 248, 78, 43}, {45, 248, 78, 45}, {124, 150, 139, 27}, {124, 150, 139, 29}, {124, 150, 139, 35}, {124, 150, 139, 37}, {124, 150, 139, 43}, {124, 150, 139, 45}, {124, 150, 139, 123}, {124, 150, 139, 125}, {124, 150, 139, 179}, {124, 150, 139, 181}}},
{Region: models.SurfsharkRegion("Australia Sydney"), IPs: []net.IP{{45, 125, 247, 43}, {45, 125, 247, 45}, {45, 125, 247, 91}, {45, 125, 247, 93}, {45, 125, 247, 195}, {45, 125, 247, 197}, {45, 248, 76, 171}, {45, 248, 76, 173}, {103, 25, 59, 51}, {103, 25, 59, 53}, {103, 25, 59, 83}, {103, 25, 59, 85}, {103, 25, 59, 87}, {180, 149, 228, 115}, {180, 149, 228, 117}}},
{Region: models.SurfsharkRegion("Australia US"), IPs: []net.IP{{45, 76, 117, 108}}},
{Region: models.SurfsharkRegion("Austria"), IPs: []net.IP{{5, 253, 207, 51}, {5, 253, 207, 53}, {5, 253, 207, 83}, {5, 253, 207, 85}, {37, 120, 212, 75}, {37, 120, 212, 77}, {37, 120, 212, 131}, {37, 120, 212, 133}, {37, 120, 212, 139}, {37, 120, 212, 141}, {37, 120, 212, 147}, {37, 120, 212, 149}, {91, 132, 139, 99}, {91, 132, 139, 101}, {91, 132, 139, 105}, {91, 132, 139, 107}}},
{Region: models.SurfsharkRegion("Azerbaijan"), IPs: []net.IP{{94, 20, 21, 85}, {94, 20, 21, 87}}},
{Region: models.SurfsharkRegion("Belgium"), IPs: []net.IP{{5, 253, 205, 99}, {5, 253, 205, 101}, {5, 253, 205, 179}, {5, 253, 205, 181}, {5, 253, 205, 211}, {5, 253, 205, 213}, {5, 253, 205, 227}, {5, 253, 205, 229}, {37, 120, 143, 117}, {37, 120, 143, 121}, {37, 120, 143, 125}, {37, 120, 218, 251}, {37, 120, 218, 253}, {89, 249, 73, 195}, {89, 249, 73, 197}, {185, 104, 186, 75}, {185, 104, 186, 77}, {185, 232, 21, 51}, {185, 232, 21, 53}}},
{Region: models.SurfsharkRegion("Bosnia and Herzegovina "), IPs: []net.IP{{185, 99, 3, 12}, {185, 99, 3, 207}, {185, 99, 3, 214}, {185, 164, 34, 252}, {185, 212, 111, 6}, {185, 212, 111, 41}, {185, 212, 111, 59}}},
{Region: models.SurfsharkRegion("Brazil"), IPs: []net.IP{{181, 215, 183, 244}, {181, 215, 183, 248}, {191, 96, 70, 171}}},
{Region: models.SurfsharkRegion("Bulgaria"), IPs: []net.IP{{37, 120, 152, 35}, {37, 120, 152, 37}, {37, 120, 152, 39}, {37, 120, 152, 195}, {37, 120, 152, 197}, {217, 138, 202, 19}, {217, 138, 202, 21}}},
{Region: models.SurfsharkRegion("Canada Montreal"), IPs: []net.IP{{172, 98, 82, 83}, {172, 98, 82, 85}, {172, 98, 82, 243}, {172, 98, 82, 245}, {198, 8, 85, 3}, {198, 8, 85, 5}, {198, 8, 85, 19}, {198, 8, 85, 21}, {198, 8, 85, 35}, {198, 8, 85, 37}, {198, 8, 85, 40}, {198, 8, 85, 42}, {198, 8, 85, 45}, {198, 8, 85, 47}, {198, 8, 85, 69}, {198, 8, 85, 72}, {198, 8, 85, 74}, {198, 8, 85, 77}, {198, 8, 85, 79}, {198, 8, 85, 82}, {198, 8, 85, 84}, {198, 8, 85, 87}, {198, 8, 85, 131}, {198, 8, 85, 133}}},
{Region: models.SurfsharkRegion("Canada Toronto"), IPs: []net.IP{{68, 71, 244, 131}, {68, 71, 244, 134}, {68, 71, 244, 195}, {68, 71, 244, 197}, {68, 71, 244, 200}, {68, 71, 244, 202}, {68, 71, 244, 210}, {68, 71, 244, 212}, {68, 71, 244, 215}, {68, 71, 244, 217}, {68, 71, 244, 220}, {68, 71, 244, 222}, {104, 200, 138, 3}, {104, 200, 138, 5}, {104, 200, 138, 7}, {104, 200, 138, 147}, {104, 200, 138, 149}, {104, 200, 138, 152}, {104, 200, 138, 154}, {104, 200, 138, 163}, {104, 200, 138, 165}, {162, 253, 71, 211}, {162, 253, 71, 213}, {162, 253, 71, 215}}},
{Region: models.SurfsharkRegion("Canada US"), IPs: []net.IP{{159, 203, 57, 80}}},
{Region: models.SurfsharkRegion("Canada Vancouver"), IPs: []net.IP{{66, 115, 147, 67}, {66, 115, 147, 69}, {66, 115, 147, 72}, {66, 115, 147, 74}, {66, 115, 147, 79}, {66, 115, 147, 82}, {66, 115, 147, 84}, {66, 115, 147, 87}, {66, 115, 147, 89}, {66, 115, 147, 92}, {66, 115, 147, 94}, {104, 200, 132, 35}, {104, 200, 132, 37}, {104, 200, 132, 39}, {107, 181, 177, 179}, {107, 181, 177, 181}, {107, 181, 177, 183}, {172, 83, 40, 147}, {172, 83, 40, 149}, {208, 78, 41, 195}, {208, 78, 41, 197}, {208, 78, 41, 200}, {208, 78, 41, 202}}},
{Region: models.SurfsharkRegion("Chile"), IPs: []net.IP{{31, 169, 121, 16}, {131, 221, 32, 195}}},
{Region: models.SurfsharkRegion("Colombia"), IPs: []net.IP{{45, 129, 32, 15}}},
{Region: models.SurfsharkRegion("Costa Rica"), IPs: []net.IP{{176, 227, 241, 21}}},
{Region: models.SurfsharkRegion("Croatia"), IPs: []net.IP{{85, 10, 56, 226}, {85, 10, 56, 228}, {89, 164, 99, 109}, {89, 164, 99, 111}}},
{Region: models.SurfsharkRegion("Cyprus"), IPs: []net.IP{{195, 47, 194, 40}, {195, 47, 194, 42}}},
{Region: models.SurfsharkRegion("Czech Republic"), IPs: []net.IP{{95, 168, 209, 111}, {185, 152, 64, 151}, {185, 152, 64, 178}, {193, 9, 112, 179}, {193, 9, 112, 181}, {193, 9, 112, 183}, {193, 9, 112, 195}, {193, 9, 112, 197}, {193, 9, 112, 199}}},
{Region: models.SurfsharkRegion("Denmark"), IPs: []net.IP{{37, 120, 145, 19}, {37, 120, 145, 21}, {37, 120, 194, 91}, {37, 120, 194, 93}, {37, 120, 194, 99}, {37, 120, 194, 101}, {37, 120, 194, 107}, {37, 120, 194, 109}, {37, 120, 194, 115}, {37, 120, 194, 117}, {37, 120, 194, 123}, {37, 120, 194, 125}, {37, 120, 194, 163}, {37, 120, 194, 165}, {45, 12, 221, 163}, {45, 12, 221, 165}, {45, 12, 221, 167}, {45, 12, 221, 179}, {45, 12, 221, 181}, {45, 12, 221, 183}, {95, 174, 65, 67}, {95, 174, 65, 69}, {95, 174, 65, 71}}},
{Region: models.SurfsharkRegion("Estonia"), IPs: []net.IP{{165, 231, 163, 3}, {165, 231, 163, 5}, {165, 231, 163, 7}, {165, 231, 163, 19}, {165, 231, 163, 21}, {165, 231, 163, 23}, {185, 174, 159, 51}, {185, 174, 159, 53}, {185, 174, 159, 59}, {185, 174, 159, 61}, {185, 174, 159, 67}, {185, 174, 159, 69}}},
{Region: models.SurfsharkRegion("Finland"), IPs: []net.IP{{196, 244, 191, 163}, {196, 244, 191, 165}, {196, 244, 191, 195}, {196, 244, 191, 197}}},
{Region: models.SurfsharkRegion("France Bordeaux"), IPs: []net.IP{{185, 108, 106, 19}, {185, 108, 106, 21}, {185, 108, 106, 51}, {185, 108, 106, 53}, {185, 108, 106, 67}, {185, 108, 106, 69}, {185, 108, 106, 140}, {185, 108, 106, 142}, {185, 108, 106, 144}, {185, 108, 106, 146}, {185, 108, 106, 148}, {185, 108, 106, 150}, {185, 108, 106, 152}, {185, 108, 106, 154}, {185, 108, 106, 158}, {185, 108, 106, 160}, {185, 108, 106, 162}, {185, 108, 106, 164}, {185, 108, 106, 166}}},
{Region: models.SurfsharkRegion("France Marseilles"), IPs: []net.IP{{185, 166, 84, 5}, {185, 166, 84, 19}, {185, 166, 84, 23}, {185, 166, 84, 29}, {185, 166, 84, 31}, {185, 166, 84, 36}, {185, 166, 84, 38}, {185, 166, 84, 51}, {185, 166, 84, 55}, {185, 166, 84, 57}, {185, 166, 84, 59}, {185, 166, 84, 61}, {185, 166, 84, 63}, {185, 166, 84, 75}, {185, 166, 84, 79}, {185, 166, 84, 81}, {185, 166, 84, 87}, {185, 166, 84, 89}, {185, 166, 84, 93}, {185, 166, 84, 95}}},
{Region: models.SurfsharkRegion("France Paris"), IPs: []net.IP{{45, 83, 90, 179}, {45, 83, 90, 181}, {45, 83, 90, 183}, {45, 89, 174, 59}, {45, 89, 174, 61}, {45, 89, 174, 85}, {45, 89, 174, 91}, {45, 89, 174, 93}, {45, 89, 174, 101}, {45, 89, 174, 103}, {84, 17, 43, 178}, {84, 17, 43, 180}, {84, 17, 43, 183}, {84, 17, 43, 185}, {84, 17, 60, 235}, {84, 17, 60, 250}, {84, 247, 51, 235}, {84, 247, 51, 243}, {84, 247, 51, 245}, {84, 247, 51, 253}, {185, 246, 211, 69}, {185, 246, 211, 103}, {217, 138, 207, 243}, {217, 138, 207, 245}}},
{Region: models.SurfsharkRegion("France Sweden"), IPs: []net.IP{{199, 247, 8, 20}}},
{Region: models.SurfsharkRegion("Germany Berlin"), IPs: []net.IP{{37, 120, 217, 131}, {37, 120, 217, 147}, {37, 120, 217, 149}, {37, 120, 217, 179}, {37, 120, 217, 181}, {152, 89, 163, 19}, {152, 89, 163, 21}, {152, 89, 163, 23}, {152, 89, 163, 227}, {152, 89, 163, 229}, {152, 89, 163, 231}, {152, 89, 163, 243}, {193, 176, 86, 195}, {193, 176, 86, 199}, {217, 138, 216, 59}, {217, 138, 216, 61}, {217, 138, 216, 219}, {217, 138, 216, 227}, {217, 138, 216, 229}, {217, 138, 216, 235}, {217, 138, 216, 237}, {217, 138, 216, 243}, {217, 138, 216, 245}, {217, 138, 216, 251}, {217, 138, 216, 253}}},
{Region: models.SurfsharkRegion("Germany Frankfurt am Main st001"), IPs: []net.IP{{45, 87, 212, 179}}},
{Region: models.SurfsharkRegion("Germany Frankfurt am Main st002"), IPs: []net.IP{{45, 87, 212, 181}}},
{Region: models.SurfsharkRegion("Germany Frankfurt am Main st003"), IPs: []net.IP{{45, 87, 212, 183}}},
{Region: models.SurfsharkRegion("Germany Frankfurt am Main"), IPs: []net.IP{{37, 120, 196, 53}, {37, 120, 196, 59}, {37, 120, 196, 61}, {37, 120, 196, 173}, {37, 120, 197, 11}, {37, 120, 197, 13}, {82, 102, 16, 99}, {82, 102, 16, 101}, {84, 16, 240, 174}, {84, 16, 240, 176}, {89, 187, 169, 104}, {89, 187, 169, 119}, {185, 59, 220, 144}, {185, 59, 220, 150}, {185, 59, 220, 168}, {185, 59, 220, 172}, {185, 93, 180, 101}, {185, 102, 219, 6}, {185, 102, 219, 47}, {185, 102, 219, 49}, {185, 158, 135, 36}}},
{Region: models.SurfsharkRegion("Germany Munich"), IPs: []net.IP{{178, 238, 231, 53}, {178, 238, 231, 55}}},
{Region: models.SurfsharkRegion("Germany Nuremberg"), IPs: []net.IP{{62, 171, 149, 160}, {62, 171, 149, 162}, {62, 171, 151, 180}, {62, 171, 151, 182}}},
{Region: models.SurfsharkRegion("Germany Singapour"), IPs: []net.IP{{159, 89, 14, 157}}},
{Region: models.SurfsharkRegion("Germany UK"), IPs: []net.IP{{46, 101, 250, 73}}},
{Region: models.SurfsharkRegion("Greece"), IPs: []net.IP{{87, 239, 248, 78}, {87, 239, 248, 80}, {87, 239, 248, 82}, {87, 239, 248, 85}, {87, 239, 248, 87}, {185, 226, 65, 150}}},
{Region: models.SurfsharkRegion("Hong Kong"), IPs: []net.IP{{64, 120, 121, 216}, {64, 120, 121, 232}, {64, 120, 121, 234}, {64, 120, 121, 236}, {64, 120, 121, 238}, {64, 120, 121, 240}, {64, 120, 121, 244}, {64, 120, 121, 246}, {64, 120, 121, 248}, {84, 17, 37, 154}, {84, 17, 37, 156}, {84, 17, 37, 158}, {84, 17, 37, 160}, {84, 17, 57, 185}, {209, 58, 186, 10}, {209, 58, 186, 12}, {209, 58, 186, 14}, {209, 58, 186, 16}, {209, 58, 186, 18}}},
{Region: models.SurfsharkRegion("Hungary"), IPs: []net.IP{{37, 120, 144, 147}, {37, 120, 144, 149}, {37, 120, 144, 151}, {37, 120, 144, 197}, {37, 120, 144, 199}, {37, 120, 144, 211}, {37, 120, 144, 213}, {37, 120, 144, 215}, {37, 120, 144, 243}, {37, 120, 144, 245}}},
{Region: models.SurfsharkRegion("Iceland"), IPs: []net.IP{{82, 221, 128, 156}}},
{Region: models.SurfsharkRegion("India Chennai"), IPs: []net.IP{{103, 94, 27, 99}, {103, 94, 27, 101}, {103, 94, 27, 115}, {103, 94, 27, 117}, {103, 94, 27, 179}, {103, 94, 27, 181}, {103, 94, 27, 227}, {103, 94, 27, 229}, {103, 108, 117, 131}, {103, 108, 117, 133}, {103, 108, 117, 147}, {103, 108, 117, 149}, {103, 108, 117, 151}}},
{Region: models.SurfsharkRegion("India Indore"), IPs: []net.IP{{103, 39, 132, 187}, {103, 39, 132, 189}, {103, 73, 189, 219}, {103, 73, 189, 221}, {137, 59, 52, 107}, {137, 59, 52, 109}}},
{Region: models.SurfsharkRegion("India Mumbai"), IPs: []net.IP{{103, 221, 233, 61}, {103, 221, 233, 86}, {103, 221, 233, 88}, {103, 221, 233, 89}, {103, 221, 233, 91}, {165, 231, 253, 147}, {165, 231, 253, 149}, {165, 231, 253, 163}}},
{Region: models.SurfsharkRegion("India UK"), IPs: []net.IP{{134, 209, 148, 122}}},
{Region: models.SurfsharkRegion("Indonesia"), IPs: []net.IP{{103, 227, 255, 211}, {103, 227, 255, 213}, {103, 227, 255, 215}}},
{Region: models.SurfsharkRegion("Ireland"), IPs: []net.IP{{185, 108, 128, 114}, {185, 108, 128, 118}, {185, 108, 128, 159}, {185, 108, 128, 161}, {185, 108, 128, 181}, {185, 108, 128, 183}, {185, 108, 128, 185}, {217, 138, 222, 43}, {217, 138, 222, 45}, {217, 138, 222, 51}, {217, 138, 222, 53}}},
{Region: models.SurfsharkRegion("Israel"), IPs: []net.IP{{87, 239, 255, 107}, {87, 239, 255, 109}, {87, 239, 255, 111}, {87, 239, 255, 114}, {87, 239, 255, 116}, {87, 239, 255, 119}, {87, 239, 255, 121}}},
{Region: models.SurfsharkRegion("Italy Milan"), IPs: []net.IP{{37, 120, 201, 23}, {37, 120, 201, 67}, {37, 120, 201, 69}, {37, 120, 201, 71}, {45, 9, 251, 163}, {84, 17, 58, 136}, {84, 17, 58, 146}, {84, 17, 58, 148}, {84, 17, 58, 150}, {84, 17, 58, 152}, {84, 17, 58, 154}, {84, 17, 58, 156}, {84, 17, 58, 159}, {84, 17, 58, 161}, {84, 17, 58, 190}, {84, 17, 58, 195}, {84, 17, 58, 197}, {84, 17, 58, 200}, {84, 17, 58, 207}, {95, 174, 64, 69}, {95, 174, 64, 71}, {185, 128, 27, 41}, {212, 102, 54, 145}, {212, 102, 54, 160}, {212, 102, 54, 162}}},
{Region: models.SurfsharkRegion("Japan Tokyo st001"), IPs: []net.IP{{45, 87, 213, 19}}},
{Region: models.SurfsharkRegion("Japan Tokyo st002"), IPs: []net.IP{{45, 87, 213, 21}}},
{Region: models.SurfsharkRegion("Japan Tokyo st003"), IPs: []net.IP{{45, 87, 213, 23}}},
{Region: models.SurfsharkRegion("Japan Tokyo st004"), IPs: []net.IP{{217, 138, 212, 19}}},
{Region: models.SurfsharkRegion("Japan Tokyo st005"), IPs: []net.IP{{217, 138, 212, 21}}},
{Region: models.SurfsharkRegion("Japan Tokyo st006"), IPs: []net.IP{{82, 102, 28, 123}}},
{Region: models.SurfsharkRegion("Japan Tokyo st007"), IPs: []net.IP{{82, 102, 28, 125}}},
{Region: models.SurfsharkRegion("Japan Tokyo"), IPs: []net.IP{{45, 87, 213, 3}, {45, 87, 213, 5}, {45, 87, 213, 7}, {45, 87, 213, 83}, {45, 87, 213, 85}, {45, 87, 213, 87}, {45, 87, 213, 101}, {45, 87, 213, 103}, {45, 87, 213, 105}, {45, 87, 213, 211}, {45, 87, 213, 213}, {45, 87, 213, 243}, {45, 87, 213, 245}, {84, 17, 34, 24}, {84, 17, 34, 26}, {84, 17, 34, 44}, {84, 17, 34, 46}, {89, 187, 161, 2}, {89, 187, 161, 4}, {89, 187, 161, 239}, {89, 187, 161, 241}, {103, 208, 221, 227}, {103, 208, 221, 229}, {185, 242, 4, 163}}},
{Region: models.SurfsharkRegion("Kazakhstan"), IPs: []net.IP{{45, 136, 56, 54}, {45, 136, 56, 57}, {45, 136, 56, 61}, {45, 136, 56, 64}}},
{Region: models.SurfsharkRegion("Korea"), IPs: []net.IP{{27, 255, 77, 195}, {27, 255, 77, 197}, {27, 255, 77, 226}, {61, 14, 210, 227}, {61, 14, 210, 229}, {61, 14, 210, 232}, {61, 14, 210, 234}, {61, 14, 210, 237}, {61, 14, 210, 239}, {61, 14, 210, 242}, {61, 14, 210, 244}, {61, 97, 243, 119}, {61, 97, 243, 124}, {103, 249, 28, 215}, {103, 249, 28, 227}, {103, 249, 28, 229}, {103, 249, 28, 231}}},
{Region: models.SurfsharkRegion("Latvia"), IPs: []net.IP{{91, 203, 70, 186}, {91, 203, 70, 188}, {188, 92, 78, 135}, {188, 92, 78, 137}, {188, 92, 78, 140}, {188, 92, 78, 142}, {188, 92, 78, 145}, {188, 92, 78, 147}, {188, 92, 78, 150}, {188, 92, 78, 152}}},
{Region: models.SurfsharkRegion("Libya"), IPs: []net.IP{{41, 208, 72, 157}, {41, 208, 72, 204}, {41, 208, 72, 207}}},
{Region: models.SurfsharkRegion("Luxembourg"), IPs: []net.IP{{185, 153, 151, 60}, {185, 153, 151, 62}, {185, 153, 151, 64}, {185, 153, 151, 66}, {185, 153, 151, 68}, {185, 153, 151, 70}, {185, 153, 151, 73}, {185, 153, 151, 75}, {185, 153, 151, 78}, {185, 153, 151, 80}, {185, 153, 151, 82}, {185, 153, 151, 83}, {185, 153, 151, 85}, {185, 153, 151, 87}, {185, 153, 151, 91}}},
{Region: models.SurfsharkRegion("Malaysia"), IPs: []net.IP{{42, 0, 30, 135}, {42, 0, 30, 160}, {42, 0, 30, 162}, {42, 0, 30, 164}, {42, 0, 30, 177}, {42, 0, 30, 179}, {42, 0, 30, 209}, {42, 0, 30, 213}, {42, 0, 30, 215}}},
{Region: models.SurfsharkRegion("Moldova"), IPs: []net.IP{{178, 175, 148, 39}}},
{Region: models.SurfsharkRegion("Netherlands Amsterdam st001"), IPs: []net.IP{{81, 19, 209, 51}}},
{Region: models.SurfsharkRegion("Netherlands Amsterdam"), IPs: []net.IP{{81, 19, 208, 56}, {81, 19, 208, 68}, {81, 19, 209, 20}, {81, 19, 209, 57}, {81, 19, 209, 113}, {81, 19, 209, 124}, {89, 46, 223, 78}, {89, 46, 223, 86}, {89, 46, 223, 92}, {89, 46, 223, 100}, {89, 46, 223, 104}, {89, 46, 223, 106}, {89, 46, 223, 212}, {89, 46, 223, 214}, {89, 46, 223, 217}, {89, 46, 223, 222}, {89, 46, 223, 224}, {89, 46, 223, 227}, {89, 187, 174, 231}, {185, 59, 222, 92}, {185, 59, 222, 94}, {185, 59, 222, 166}, {185, 59, 222, 168}, {185, 232, 20, 131}}},
{Region: models.SurfsharkRegion("Netherlands US"), IPs: []net.IP{{188, 166, 98, 91}}},
{Region: models.SurfsharkRegion("New Zealand"), IPs: []net.IP{{180, 149, 231, 3}, {180, 149, 231, 11}, {180, 149, 231, 13}, {180, 149, 231, 43}, {180, 149, 231, 45}, {180, 149, 231, 67}, {180, 149, 231, 69}, {180, 149, 231, 115}, {180, 149, 231, 117}, {180, 149, 231, 119}, {180, 149, 231, 163}, {180, 149, 231, 165}}},
{Region: models.SurfsharkRegion("Nigeria"), IPs: []net.IP{{102, 165, 23, 4}, {102, 165, 23, 6}, {102, 165, 23, 38}, {102, 165, 23, 40}, {102, 165, 23, 42}}},
{Region: models.SurfsharkRegion("North Macedonia"), IPs: []net.IP{{185, 225, 28, 67}, {185, 225, 28, 69}, {185, 225, 28, 83}, {185, 225, 28, 85}, {185, 225, 28, 91}, {185, 225, 28, 93}, {185, 225, 28, 99}, {185, 225, 28, 101}, {185, 225, 28, 107}, {185, 225, 28, 109}}},
{Region: models.SurfsharkRegion("Norway"), IPs: []net.IP{{45, 12, 223, 67}, {45, 12, 223, 69}, {45, 12, 223, 71}, {45, 12, 223, 195}, {45, 12, 223, 197}, {45, 12, 223, 211}, {45, 12, 223, 213}, {84, 247, 50, 27}, {84, 247, 50, 29}, {84, 247, 50, 67}, {84, 247, 50, 69}, {95, 174, 66, 35}, {95, 174, 66, 37}, {95, 174, 66, 39}, {95, 174, 66, 41}}},
{Region: models.SurfsharkRegion("Paraguay"), IPs: []net.IP{{181, 40, 18, 47}, {181, 40, 18, 56}, {181, 40, 18, 59}, {186, 16, 32, 163}, {186, 16, 32, 173}}},
{Region: models.SurfsharkRegion("Philippines"), IPs: []net.IP{{45, 134, 224, 3}, {45, 134, 224, 5}, {45, 134, 224, 8}, {45, 134, 224, 10}}},
{Region: models.SurfsharkRegion("Poland Gdansk"), IPs: []net.IP{{5, 187, 49, 187}, {5, 187, 49, 189}, {5, 187, 53, 51}, {5, 187, 53, 53}, {5, 187, 53, 55}}},
{Region: models.SurfsharkRegion("Poland Warsaw"), IPs: []net.IP{{5, 253, 206, 67}, {5, 253, 206, 69}, {5, 253, 206, 71}, {5, 253, 206, 227}, {5, 253, 206, 229}, {84, 17, 55, 132}, {84, 17, 55, 134}, {185, 246, 208, 72}, {185, 246, 208, 77}, {185, 246, 208, 105}, {185, 246, 208, 107}, {185, 246, 208, 176}, {185, 246, 208, 182}}},
{Region: models.SurfsharkRegion("Portugal Lisbon"), IPs: []net.IP{{5, 154, 174, 26}, {5, 154, 174, 65}, {5, 154, 174, 67}, {5, 154, 174, 75}, {5, 154, 174, 77}, {5, 154, 174, 99}, {5, 154, 174, 101}, {5, 154, 174, 115}, {5, 154, 174, 117}, {5, 154, 174, 171}, {5, 154, 174, 173}, {5, 154, 174, 179}, {5, 154, 174, 181}, {5, 154, 174, 187}, {5, 154, 174, 189}, {5, 154, 174, 211}, {5, 154, 174, 213}, {5, 154, 174, 219}, {5, 154, 174, 221}, {5, 154, 174, 227}, {5, 154, 174, 229}}},
{Region: models.SurfsharkRegion("Portugal Loule"), IPs: []net.IP{{176, 61, 146, 84}, {176, 61, 146, 86}, {176, 61, 146, 106}, {176, 61, 146, 108}, {176, 61, 146, 113}, {176, 61, 146, 116}, {176, 61, 146, 118}, {176, 61, 146, 121}, {176, 61, 146, 123}, {176, 61, 148, 60}, {176, 61, 148, 62}}},
{Region: models.SurfsharkRegion("Portugal Porto"), IPs: []net.IP{{194, 39, 127, 21}, {194, 39, 127, 23}, {194, 39, 127, 36}, {194, 39, 127, 38}, {194, 39, 127, 231}, {194, 39, 127, 233}, {194, 39, 127, 240}, {194, 39, 127, 242}, {194, 39, 127, 244}}},
{Region: models.SurfsharkRegion("Romania"), IPs: []net.IP{{86, 106, 137, 147}, {86, 106, 137, 149}, {194, 68, 44, 61}}},
{Region: models.SurfsharkRegion("Russia Moscow"), IPs: []net.IP{{213, 183, 56, 18}, {213, 183, 56, 145}, {213, 183, 56, 160}, {213, 183, 56, 166}, {213, 183, 56, 233}, {213, 183, 56, 236}}},
{Region: models.SurfsharkRegion("Russia St. Petersburg"), IPs: []net.IP{{213, 183, 54, 23}, {213, 183, 54, 109}, {213, 183, 54, 143}, {213, 183, 54, 165}}},
{Region: models.SurfsharkRegion("Serbia"), IPs: []net.IP{{37, 120, 193, 51}, {37, 120, 193, 53}, {152, 89, 160, 115}, {152, 89, 160, 117}, {152, 89, 160, 119}, {152, 89, 160, 121}, {152, 89, 160, 123}, {152, 89, 160, 125}, {152, 89, 160, 211}, {152, 89, 160, 213}, {152, 89, 160, 215}}},
{Region: models.SurfsharkRegion("Singapore Hong Kong"), IPs: []net.IP{{206, 189, 83, 129}}},
{Region: models.SurfsharkRegion("Singapore Netherlands"), IPs: []net.IP{{104, 248, 148, 18}}},
{Region: models.SurfsharkRegion("Singapore st001"), IPs: []net.IP{{217, 138, 201, 91}}},
{Region: models.SurfsharkRegion("Singapore st002"), IPs: []net.IP{{217, 138, 201, 93}}},
{Region: models.SurfsharkRegion("Singapore st003"), IPs: []net.IP{{84, 247, 49, 19}}},
{Region: models.SurfsharkRegion("Singapore st004"), IPs: []net.IP{{84, 247, 49, 21}}},
{Region: models.SurfsharkRegion("Singapore"), IPs: []net.IP{{89, 187, 163, 130}, {89, 187, 163, 132}, {89, 187, 163, 134}, {89, 187, 163, 136}, {103, 254, 153, 171}, {103, 254, 153, 176}, {103, 254, 155, 229}, {103, 254, 155, 241}, {209, 58, 170, 134}, {209, 58, 170, 142}, {209, 58, 170, 144}, {209, 58, 170, 146}, {209, 58, 170, 159}, {209, 58, 170, 163}, {209, 58, 170, 164}, {209, 58, 170, 169}, {209, 58, 170, 172}, {209, 58, 176, 43}, {209, 58, 176, 45}, {209, 58, 176, 47}}},
{Region: models.SurfsharkRegion("Slovekia"), IPs: []net.IP{{37, 120, 221, 3}, {37, 120, 221, 5}, {193, 37, 255, 35}, {193, 37, 255, 37}, {193, 37, 255, 39}, {193, 37, 255, 41}}},
{Region: models.SurfsharkRegion("Slovenia"), IPs: []net.IP{{195, 158, 249, 36}, {195, 158, 249, 38}, {195, 158, 249, 40}, {195, 158, 249, 42}}},
{Region: models.SurfsharkRegion("South Africa"), IPs: []net.IP{{154, 127, 49, 226}, {154, 127, 49, 228}, {154, 127, 49, 230}, {154, 127, 49, 232}, {196, 251, 250, 111}}},
{Region: models.SurfsharkRegion("Spain Barcelona"), IPs: []net.IP{{37, 120, 142, 133}, {37, 120, 142, 135}, {185, 188, 61, 5}, {185, 188, 61, 7}}},
{Region: models.SurfsharkRegion("Spain Madrid"), IPs: []net.IP{{37, 120, 148, 213}, {82, 102, 17, 179}, {82, 102, 17, 181}, {82, 102, 17, 183}, {82, 102, 17, 185}, {84, 17, 62, 163}, {84, 17, 62, 165}, {84, 17, 62, 181}, {89, 37, 95, 7}, {89, 37, 95, 9}, {89, 37, 95, 11}, {89, 37, 95, 15}, {89, 37, 95, 17}, {89, 37, 95, 19}, {89, 37, 95, 25}, {188, 208, 141, 98}, {188, 208, 141, 114}, {212, 102, 48, 2}, {212, 102, 48, 4}, {212, 102, 48, 8}, {212, 102, 48, 10}, {212, 102, 48, 13}, {212, 102, 48, 15}, {212, 102, 48, 18}, {212, 102, 48, 20}}},
{Region: models.SurfsharkRegion("Spain Valencia"), IPs: []net.IP{{185, 153, 150, 44}, {185, 153, 150, 46}, {185, 153, 150, 48}, {185, 153, 150, 50}, {185, 153, 150, 52}, {185, 153, 150, 54}, {185, 153, 150, 56}, {185, 153, 150, 58}, {196, 196, 150, 67}, {196, 196, 150, 69}, {196, 196, 150, 71}, {196, 196, 150, 83}, {196, 196, 150, 85}}},
{Region: models.SurfsharkRegion("Sweden"), IPs: []net.IP{{45, 83, 91, 131}, {45, 83, 91, 133}, {45, 83, 91, 135}, {45, 83, 91, 147}, {45, 83, 91, 149}, {45, 83, 91, 151}, {46, 227, 69, 23}, {46, 227, 69, 25}, {46, 227, 69, 27}, {46, 227, 69, 29}, {185, 76, 9, 34}, {185, 76, 9, 36}, {185, 76, 9, 39}, {185, 76, 9, 41}, {185, 76, 9, 44}, {185, 76, 9, 46}, {185, 76, 9, 49}, {185, 76, 9, 51}}},
{Region: models.SurfsharkRegion("Switzerland"), IPs: []net.IP{{37, 120, 213, 3}, {37, 120, 213, 7}, {45, 12, 222, 245}, {84, 17, 53, 86}, {84, 17, 53, 166}, {84, 17, 53, 168}, {84, 17, 53, 208}, {84, 17, 53, 210}, {84, 17, 53, 212}, {84, 17, 53, 216}, {84, 17, 53, 219}, {84, 17, 53, 221}, {84, 17, 53, 223}, {84, 17, 53, 225}, {84, 17, 53, 227}, {84, 39, 112, 35}}},
{Region: models.SurfsharkRegion("Taiwan"), IPs: []net.IP{{2, 58, 241, 3}, {2, 58, 241, 5}, {2, 58, 242, 43}, {2, 58, 242, 45}, {2, 58, 242, 155}, {2, 58, 242, 157}, {2, 58, 243, 51}, {2, 58, 243, 53}, {103, 51, 140, 70}, {103, 51, 140, 72}, {103, 51, 140, 74}, {103, 98, 74, 227}, {103, 98, 74, 229}, {103, 98, 75, 71}, {103, 98, 75, 73}, {103, 103, 128, 30}}},
{Region: models.SurfsharkRegion("Thailand"), IPs: []net.IP{{45, 64, 186, 134}, {45, 64, 186, 163}, {103, 253, 74, 7}}},
{Region: models.SurfsharkRegion("Turkey"), IPs: []net.IP{{185, 195, 79, 3}}},
{Region: models.SurfsharkRegion("UK France"), IPs: []net.IP{{188, 166, 168, 247}}},
{Region: models.SurfsharkRegion("UK Germany"), IPs: []net.IP{{45, 77, 58, 16}}},
{Region: models.SurfsharkRegion("UK Glasgow"), IPs: []net.IP{{185, 108, 105, 5}, {185, 108, 105, 13}, {185, 108, 105, 18}, {185, 108, 105, 20}, {185, 108, 105, 22}, {185, 108, 105, 40}}},
{Region: models.SurfsharkRegion("UK London st001"), IPs: []net.IP{{217, 146, 82, 83}}},
{Region: models.SurfsharkRegion("UK London st002"), IPs: []net.IP{{185, 134, 22, 80}}},
{Region: models.SurfsharkRegion("UK London st003"), IPs: []net.IP{{185, 134, 22, 92}}},
{Region: models.SurfsharkRegion("UK London st004"), IPs: []net.IP{{185, 44, 76, 186}}},
{Region: models.SurfsharkRegion("UK London st005"), IPs: []net.IP{{185, 44, 76, 188}}},
{Region: models.SurfsharkRegion("UK London"), IPs: []net.IP{{5, 226, 139, 65}, {5, 226, 139, 225}, {81, 19, 210, 234}, {89, 35, 29, 71}, {178, 239, 166, 222}, {178, 239, 166, 227}, {178, 239, 166, 234}, {178, 239, 166, 250}, {185, 16, 206, 69}, {185, 38, 148, 228}, {185, 38, 150, 41}, {185, 38, 150, 88}, {185, 38, 150, 124}, {185, 44, 76, 167}, {185, 44, 76, 172}, {185, 114, 224, 53}, {185, 114, 224, 115}, {185, 114, 224, 119}, {185, 125, 207, 155}, {185, 125, 207, 177}, {185, 134, 22, 191}, {185, 193, 36, 208}, {195, 140, 215, 42}}},
{Region: models.SurfsharkRegion("UK Manchester"), IPs: []net.IP{{37, 120, 200, 2}, {86, 106, 136, 67}, {86, 106, 136, 69}, {86, 106, 136, 85}, {89, 238, 130, 196}, {89, 238, 140, 226}, {89, 238, 140, 227}, {89, 238, 140, 229}, {89, 238, 143, 100}, {89, 238, 143, 101}, {89, 238, 143, 103}, {89, 238, 143, 105}, {92, 119, 176, 19}, {92, 119, 176, 21}, {92, 119, 176, 23}, {192, 145, 126, 130}, {192, 145, 126, 131}, {192, 145, 126, 133}, {193, 148, 17, 82}, {193, 148, 17, 130}, {195, 12, 48, 212}, {195, 12, 48, 213}, {195, 12, 48, 215}, {195, 12, 48, 217}, {217, 138, 196, 91}}},
{Region: models.SurfsharkRegion("US Atlanta"), IPs: []net.IP{{66, 115, 154, 131}, {66, 115, 154, 133}, {66, 115, 154, 135}, {66, 115, 154, 147}, {66, 115, 154, 149}, {66, 115, 154, 151}, {66, 115, 169, 35}, {66, 115, 175, 35}, {66, 115, 175, 37}, {66, 115, 175, 40}, {66, 115, 175, 42}, {66, 115, 175, 45}, {66, 115, 175, 47}, {66, 115, 175, 50}, {66, 115, 175, 52}, {185, 93, 0, 143}, {185, 93, 0, 146}}},
{Region: models.SurfsharkRegion("US Bend"), IPs: []net.IP{{45, 43, 14, 73}, {45, 43, 14, 75}, {45, 43, 14, 83}, {45, 43, 14, 85}, {45, 43, 14, 93}, {45, 43, 14, 95}, {45, 43, 14, 103}, {45, 43, 14, 105}, {154, 16, 168, 184}, {154, 16, 168, 186}, {154, 16, 168, 188}}},
{Region: models.SurfsharkRegion("US Boston"), IPs: []net.IP{{173, 237, 207, 11}, {173, 237, 207, 13}, {173, 237, 207, 15}, {173, 237, 207, 21}, {173, 237, 207, 25}, {173, 237, 207, 30}, {173, 237, 207, 32}, {173, 237, 207, 36}, {173, 237, 207, 38}, {173, 237, 207, 42}, {173, 237, 207, 44}, {192, 34, 83, 230}, {192, 34, 83, 232}, {192, 34, 83, 234}, {192, 34, 83, 236}, {199, 217, 107, 20}, {199, 217, 107, 22}, {199, 217, 107, 25}, {199, 217, 107, 27}}},
{Region: models.SurfsharkRegion("US Buffalo"), IPs: []net.IP{{107, 174, 20, 130}, {107, 174, 20, 132}, {107, 174, 20, 134}, {107, 175, 104, 82}, {107, 175, 104, 84}, {107, 175, 104, 86}, {172, 93, 153, 146}, {172, 93, 153, 148}, {172, 93, 153, 150}}},
{Region: models.SurfsharkRegion("US Charlotte"), IPs: []net.IP{{66, 11, 124, 136}, {66, 11, 124, 138}, {66, 11, 124, 140}, {66, 11, 124, 142}, {66, 11, 124, 144}, {155, 254, 28, 141}, {155, 254, 29, 163}, {155, 254, 29, 165}, {155, 254, 31, 182}, {155, 254, 31, 184}, {192, 154, 253, 67}, {192, 154, 253, 69}, {192, 154, 254, 135}, {192, 154, 254, 137}, {192, 154, 255, 52}, {192, 154, 255, 54}}},
{Region: models.SurfsharkRegion("US Chicago"), IPs: []net.IP{{74, 119, 146, 115}, {74, 119, 146, 117}, {74, 119, 146, 119}, {74, 119, 146, 133}, {74, 119, 146, 179}, {74, 119, 146, 181}, {74, 119, 146, 183}, {74, 119, 146, 195}, {74, 119, 146, 197}, {74, 119, 146, 199}, {74, 119, 146, 211}, {89, 187, 182, 173}, {89, 187, 182, 175}, {107, 152, 100, 19}, {107, 152, 100, 21}, {107, 152, 100, 24}, {107, 152, 100, 26}, {184, 170, 250, 69}, {184, 170, 250, 74}, {184, 170, 250, 149}, {184, 170, 250, 154}}},
{Region: models.SurfsharkRegion("US Dallas"), IPs: []net.IP{{66, 115, 177, 131}, {66, 115, 177, 133}, {66, 115, 177, 136}, {66, 115, 177, 138}, {66, 115, 177, 141}, {66, 115, 177, 143}, {66, 115, 177, 146}, {66, 115, 177, 148}, {66, 115, 177, 151}, {66, 115, 177, 153}, {66, 115, 177, 156}, {66, 115, 177, 158}, {89, 187, 175, 165}, {89, 187, 175, 167}, {107, 181, 173, 163}, {172, 241, 114, 87}, {212, 102, 40, 66}, {212, 102, 40, 68}, {212, 102, 40, 71}, {212, 102, 40, 73}, {212, 102, 40, 76}, {212, 102, 40, 78}, {212, 102, 40, 81}}},
{Region: models.SurfsharkRegion("US Denver"), IPs: []net.IP{{174, 128, 245, 3}, {174, 128, 245, 5}, {212, 102, 44, 66}, {212, 102, 44, 68}, {212, 102, 44, 71}, {212, 102, 44, 73}, {212, 102, 44, 76}, {212, 102, 44, 78}, {212, 102, 44, 81}, {212, 102, 44, 83}, {212, 102, 44, 86}, {212, 102, 44, 88}, {212, 102, 44, 91}, {212, 102, 44, 93}}},
{Region: models.SurfsharkRegion("US Gahanna"), IPs: []net.IP{{104, 244, 208, 35}, {104, 244, 208, 37}, {104, 244, 208, 99}, {104, 244, 208, 101}, {104, 244, 208, 107}, {104, 244, 208, 203}, {104, 244, 208, 205}, {104, 244, 208, 229}, {104, 244, 208, 231}, {104, 244, 209, 51}, {104, 244, 209, 53}, {104, 244, 211, 139}, {104, 244, 211, 141}, {104, 244, 211, 171}, {104, 244, 211, 173}, {104, 244, 211, 179}}},
{Region: models.SurfsharkRegion("US Houston"), IPs: []net.IP{{104, 148, 30, 35}, {104, 148, 30, 37}, {104, 148, 30, 39}, {104, 148, 30, 53}, {104, 148, 30, 55}, {104, 148, 30, 83}, {104, 148, 30, 85}, {104, 148, 30, 87}, {199, 10, 64, 67}, {199, 10, 64, 69}, {199, 10, 64, 83}, {199, 10, 64, 85}, {199, 10, 64, 99}, {199, 10, 64, 101}, {199, 10, 64, 115}, {199, 10, 64, 117}}},
{Region: models.SurfsharkRegion("US Kansas City"), IPs: []net.IP{{63, 141, 236, 243}, {63, 141, 248, 179}, {63, 141, 248, 181}, {107, 150, 39, 43}, {173, 208, 202, 59}, {173, 208, 202, 61}, {198, 204, 231, 147}, {198, 204, 231, 149}, {204, 12, 208, 115}, {204, 12, 208, 117}}},
{Region: models.SurfsharkRegion("US Las Vegas"), IPs: []net.IP{{89, 187, 187, 147}, {89, 187, 187, 149}, {185, 242, 5, 211}, {185, 242, 5, 213}, {185, 242, 5, 215}}},
{Region: models.SurfsharkRegion("US Latham"), IPs: []net.IP{{45, 43, 19, 66}, {45, 43, 19, 68}, {45, 43, 19, 74}, {45, 43, 19, 76}, {45, 43, 19, 82}, {45, 43, 19, 84}, {45, 43, 19, 90}, {45, 43, 19, 92}, {154, 16, 169, 3}, {154, 16, 169, 5}, {154, 16, 169, 7}}},
{Region: models.SurfsharkRegion("US Los Angeles"), IPs: []net.IP{{38, 95, 110, 67}, {38, 95, 110, 71}, {89, 187, 187, 66}, {89, 187, 187, 68}, {89, 187, 187, 71}, {89, 187, 187, 73}, {89, 187, 187, 76}, {89, 187, 187, 78}, {89, 187, 187, 81}, {89, 187, 187, 83}, {89, 187, 187, 86}, {172, 83, 44, 83}, {184, 170, 243, 199}, {184, 170, 243, 211}, {192, 111, 134, 67}, {192, 111, 134, 78}, {192, 111, 134, 80}, {192, 111, 134, 195}, {192, 111, 134, 202}, {192, 111, 134, 207}, {192, 111, 134, 210}, {192, 111, 134, 215}, {192, 111, 134, 217}, {192, 111, 134, 220}, {192, 111, 134, 222}}},
{Region: models.SurfsharkRegion("US Maryland"), IPs: []net.IP{{23, 82, 8, 173}, {23, 105, 160, 134}, {23, 105, 160, 138}, {23, 105, 160, 144}, {23, 105, 163, 94}, {207, 244, 67, 147}, {207, 244, 67, 149}, {207, 244, 84, 40}, {207, 244, 84, 42}, {207, 244, 84, 44}, {207, 244, 84, 58}, {207, 244, 127, 116}, {207, 244, 127, 118}}},
{Region: models.SurfsharkRegion("US Miami"), IPs: []net.IP{{89, 187, 173, 250}, {107, 181, 164, 35}, {107, 181, 164, 37}, {172, 83, 42, 23}, {172, 83, 42, 39}, {172, 83, 42, 53}, {172, 83, 42, 55}, {172, 83, 42, 83}, {172, 83, 42, 85}, {172, 83, 42, 131}, {172, 83, 42, 133}, {172, 83, 42, 136}, {172, 83, 42, 138}, {172, 83, 42, 141}, {172, 83, 42, 143}, {172, 83, 42, 146}, {172, 83, 42, 151}, {172, 83, 42, 153}, {172, 83, 42, 156}, {172, 83, 42, 158}, {193, 37, 252, 195}, {193, 37, 252, 197}}},
{Region: models.SurfsharkRegion("US Netherlands"), IPs: []net.IP{{142, 93, 58, 71}}},
{Region: models.SurfsharkRegion("US New York City mp001"), IPs: []net.IP{{45, 55, 60, 159}}},
{Region: models.SurfsharkRegion("US New York City st001"), IPs: []net.IP{{92, 119, 177, 19}}},
{Region: models.SurfsharkRegion("US New York City st002"), IPs: []net.IP{{92, 119, 177, 21}}},
{Region: models.SurfsharkRegion("US New York City st003"), IPs: []net.IP{{92, 119, 177, 23}}},
{Region: models.SurfsharkRegion("US New York City st004"), IPs: []net.IP{{193, 148, 18, 51}}},
{Region: models.SurfsharkRegion("US New York City st005"), IPs: []net.IP{{193, 148, 18, 53}}},
{Region: models.SurfsharkRegion("US New York City"), IPs: []net.IP{{37, 120, 202, 3}, {37, 120, 202, 5}, {84, 17, 35, 66}, {84, 17, 35, 73}, {84, 17, 35, 76}, {84, 17, 35, 78}, {84, 17, 35, 86}, {84, 17, 35, 91}, {89, 187, 177, 120}, {89, 187, 177, 122}, {89, 187, 178, 92}, {89, 187, 178, 94}, {98, 142, 220, 35}, {98, 142, 220, 37}, {107, 152, 101, 163}, {172, 98, 78, 227}, {192, 40, 59, 229}, {192, 40, 59, 240}, {199, 36, 221, 85}, {199, 36, 221, 99}, {199, 36, 221, 104}, {199, 36, 221, 111}, {199, 36, 221, 114}, {199, 36, 221, 116}, {199, 36, 221, 119}}},
{Region: models.SurfsharkRegion("US Orlando"), IPs: []net.IP{{198, 147, 22, 83}, {198, 147, 22, 85}, {198, 147, 22, 87}, {198, 147, 22, 131}, {198, 147, 22, 133}, {198, 147, 22, 135}, {198, 147, 22, 147}, {198, 147, 22, 149}, {198, 147, 22, 151}, {198, 147, 22, 163}, {198, 147, 22, 165}, {198, 147, 22, 167}, {198, 147, 22, 195}, {198, 147, 22, 197}, {198, 147, 22, 211}, {198, 147, 22, 213}}},
{Region: models.SurfsharkRegion("US Phoenix"), IPs: []net.IP{{23, 83, 128, 233}, {23, 83, 128, 235}, {23, 83, 128, 239}, {23, 83, 128, 241}, {23, 83, 128, 243}, {107, 181, 184, 115}, {107, 181, 184, 117}, {172, 98, 87, 35}, {172, 98, 87, 37}, {184, 170, 240, 147}, {184, 170, 240, 149}, {184, 170, 240, 151}, {184, 170, 240, 179}, {184, 170, 240, 181}, {199, 58, 187, 3}, {199, 58, 187, 5}, {199, 58, 187, 8}, {199, 58, 187, 10}, {199, 58, 187, 13}, {199, 58, 187, 15}, {199, 58, 187, 18}, {199, 58, 187, 23}, {199, 58, 187, 25}, {199, 58, 187, 67}, {199, 58, 187, 69}}},
{Region: models.SurfsharkRegion("US Portugal"), IPs: []net.IP{{142, 93, 81, 242}}},
{Region: models.SurfsharkRegion("US Saint Louis"), IPs: []net.IP{{148, 72, 170, 108}, {148, 72, 174, 36}, {148, 72, 174, 38}, {148, 72, 174, 41}, {148, 72, 174, 43}, {148, 72, 174, 46}, {148, 72, 174, 51}, {148, 72, 174, 53}}},
{Region: models.SurfsharkRegion("US Salt Lake City"), IPs: []net.IP{{104, 200, 131, 5}, {104, 200, 131, 7}, {104, 200, 131, 9}, {104, 200, 131, 165}, {104, 200, 131, 167}, {104, 200, 131, 170}, {104, 200, 131, 172}}},
{Region: models.SurfsharkRegion("US San Francisco"), IPs: []net.IP{{107, 181, 166, 35}, {107, 181, 166, 37}, {107, 181, 166, 39}, {107, 181, 166, 51}, {107, 181, 166, 55}, {107, 181, 166, 83}, {107, 181, 166, 85}, {107, 181, 166, 227}, {107, 181, 166, 229}, {198, 8, 81, 35}, {198, 8, 81, 37}, {209, 58, 128, 48}, {209, 58, 128, 50}}},
{Region: models.SurfsharkRegion("US Seatle"), IPs: []net.IP{{84, 17, 41, 73}, {84, 17, 41, 75}, {84, 17, 41, 77}, {84, 17, 41, 79}, {84, 17, 41, 81}, {84, 17, 41, 83}, {84, 17, 41, 85}, {104, 200, 129, 243}, {104, 200, 129, 245}, {198, 8, 80, 83}, {198, 8, 80, 85}, {198, 8, 80, 87}, {198, 8, 80, 227}, {198, 8, 80, 229}, {199, 229, 250, 163}, {199, 229, 250, 165}, {199, 229, 250, 167}}},
{Region: models.SurfsharkRegion("US Tampa"), IPs: []net.IP{{66, 206, 23, 5}, {74, 50, 117, 106}, {74, 50, 117, 119}, {74, 50, 117, 121}, {74, 50, 117, 125}, {162, 220, 56, 98}, {162, 220, 56, 100}, {162, 220, 63, 226}, {162, 220, 63, 232}, {162, 220, 63, 246}, {162, 220, 63, 248}, {209, 216, 92, 197}, {209, 216, 92, 200}, {209, 216, 92, 202}, {209, 216, 92, 205}, {209, 216, 92, 207}, {209, 216, 92, 210}, {209, 216, 92, 212}, {209, 216, 92, 215}, {209, 216, 92, 217}, {209, 216, 92, 220}, {209, 216, 92, 222}, {209, 216, 92, 225}, {209, 216, 92, 227}}},
{Region: models.SurfsharkRegion("Ukraine"), IPs: []net.IP{{45, 9, 238, 23}, {45, 9, 238, 30}, {45, 9, 238, 38}, {45, 9, 238, 47}}},
{Region: models.SurfsharkRegion("United Arab Emirates"), IPs: []net.IP{{45, 9, 249, 243}, {45, 9, 249, 245}, {45, 9, 249, 247}, {45, 9, 250, 99}, {45, 9, 250, 101}, {45, 9, 250, 103}}},
{Region: models.SurfsharkRegion("Vietnam"), IPs: []net.IP{{202, 143, 110, 32}}},
{Region: models.SurfsharkRegion("italy Rome"), IPs: []net.IP{{82, 102, 26, 61}, {82, 102, 26, 114}, {82, 102, 26, 115}, {82, 102, 26, 117}, {87, 101, 94, 210}, {87, 101, 94, 211}, {87, 101, 94, 213}, {87, 101, 94, 215}, {87, 101, 94, 226}, {185, 217, 71, 2}, {185, 217, 71, 3}, {185, 217, 71, 5}, {185, 217, 71, 18}, {185, 217, 71, 50}, {185, 217, 71, 187}, {185, 217, 71, 195}, {185, 217, 71, 197}, {185, 217, 71, 211}, {185, 217, 71, 243}, {185, 217, 71, 251}, {185, 217, 71, 253}, {217, 138, 219, 235}, {217, 138, 219, 237}, {217, 138, 219, 251}}},
}
}
func SurfsharkRegionChoices() (choices []string) {
servers := SurfsharkServers()
choices = make([]string, len(servers))
for i := range servers {
choices[i] = string(servers[i].Region)
choices[i] = servers[i].Region
}
return choices
}
func SurfsharkServers() []models.SurfsharkServer {
return []models.SurfsharkServer{
{Region: "Albania", IPs: []net.IP{{31, 171, 152, 195}, {31, 171, 152, 197}, {31, 171, 154, 147}, {31, 171, 154, 149}, {31, 171, 154, 163}, {31, 171, 154, 165}}},
{Region: "Australia Adelaide", IPs: []net.IP{{45, 248, 79, 19}, {45, 248, 79, 21}, {45, 248, 79, 27}, {45, 248, 79, 29}, {45, 248, 79, 35}, {45, 248, 79, 37}, {45, 248, 79, 51}, {45, 248, 79, 53}, {45, 248, 79, 67}, {45, 248, 79, 69}, {45, 248, 79, 83}, {45, 248, 79, 85}}},
{Region: "Australia Brisbane", IPs: []net.IP{{45, 248, 77, 235}, {45, 248, 77, 237}, {144, 48, 39, 11}, {144, 48, 39, 13}, {144, 48, 39, 67}, {144, 48, 39, 69}, {144, 48, 39, 83}, {144, 48, 39, 85}, {144, 48, 39, 107}, {144, 48, 39, 109}, {144, 48, 39, 123}, {144, 48, 39, 125}, {144, 48, 39, 131}, {144, 48, 39, 133}}},
{Region: "Australia Melbourne", IPs: []net.IP{{103, 192, 80, 131}, {103, 192, 80, 133}, {103, 192, 80, 139}, {103, 192, 80, 141}, {103, 192, 80, 147}, {103, 192, 80, 149}, {144, 48, 38, 19}, {144, 48, 38, 21}, {144, 48, 38, 139}, {144, 48, 38, 141}, {144, 48, 38, 147}, {144, 48, 38, 149}, {144, 48, 38, 179}, {144, 48, 38, 181}, {144, 48, 38, 183}}},
{Region: "Australia Perth", IPs: []net.IP{{45, 248, 78, 43}, {45, 248, 78, 45}, {124, 150, 139, 27}, {124, 150, 139, 29}, {124, 150, 139, 35}, {124, 150, 139, 37}, {124, 150, 139, 43}, {124, 150, 139, 45}, {124, 150, 139, 123}, {124, 150, 139, 125}, {124, 150, 139, 179}, {124, 150, 139, 181}}},
{Region: "Australia Sydney", IPs: []net.IP{{45, 125, 247, 43}, {45, 125, 247, 45}, {45, 125, 247, 91}, {45, 125, 247, 93}, {45, 125, 247, 195}, {45, 125, 247, 197}, {45, 248, 76, 171}, {45, 248, 76, 173}, {103, 25, 59, 51}, {103, 25, 59, 53}, {103, 25, 59, 83}, {103, 25, 59, 85}, {103, 25, 59, 87}, {180, 149, 228, 115}, {180, 149, 228, 117}}},
{Region: "Australia US", IPs: []net.IP{{45, 76, 117, 108}}},
{Region: "Austria", IPs: []net.IP{{5, 253, 207, 51}, {5, 253, 207, 53}, {5, 253, 207, 83}, {5, 253, 207, 85}, {37, 120, 212, 75}, {37, 120, 212, 77}, {37, 120, 212, 131}, {37, 120, 212, 133}, {37, 120, 212, 139}, {37, 120, 212, 141}, {37, 120, 212, 147}, {37, 120, 212, 149}, {91, 132, 139, 99}, {91, 132, 139, 101}, {91, 132, 139, 105}, {91, 132, 139, 107}}},
{Region: "Azerbaijan", IPs: []net.IP{{94, 20, 21, 85}, {94, 20, 21, 87}}},
{Region: "Belgium", IPs: []net.IP{{5, 253, 205, 99}, {5, 253, 205, 101}, {5, 253, 205, 179}, {5, 253, 205, 181}, {5, 253, 205, 211}, {5, 253, 205, 213}, {5, 253, 205, 227}, {5, 253, 205, 229}, {37, 120, 143, 117}, {37, 120, 143, 121}, {37, 120, 143, 125}, {37, 120, 218, 251}, {37, 120, 218, 253}, {89, 249, 73, 195}, {89, 249, 73, 197}, {185, 104, 186, 75}, {185, 104, 186, 77}, {185, 232, 21, 51}, {185, 232, 21, 53}}},
{Region: "Bosnia and Herzegovina ", IPs: []net.IP{{185, 99, 3, 12}, {185, 99, 3, 207}, {185, 99, 3, 214}, {185, 164, 34, 252}, {185, 212, 111, 6}, {185, 212, 111, 41}, {185, 212, 111, 59}}},
{Region: "Brazil", IPs: []net.IP{{181, 215, 183, 244}, {181, 215, 183, 248}, {191, 96, 70, 171}}},
{Region: "Bulgaria", IPs: []net.IP{{37, 120, 152, 35}, {37, 120, 152, 37}, {37, 120, 152, 39}, {37, 120, 152, 195}, {37, 120, 152, 197}, {217, 138, 202, 19}, {217, 138, 202, 21}}},
{Region: "Canada Montreal", IPs: []net.IP{{172, 98, 82, 83}, {172, 98, 82, 85}, {172, 98, 82, 243}, {172, 98, 82, 245}, {198, 8, 85, 3}, {198, 8, 85, 5}, {198, 8, 85, 19}, {198, 8, 85, 21}, {198, 8, 85, 35}, {198, 8, 85, 37}, {198, 8, 85, 40}, {198, 8, 85, 42}, {198, 8, 85, 45}, {198, 8, 85, 47}, {198, 8, 85, 69}, {198, 8, 85, 72}, {198, 8, 85, 74}, {198, 8, 85, 77}, {198, 8, 85, 79}, {198, 8, 85, 82}, {198, 8, 85, 84}, {198, 8, 85, 87}, {198, 8, 85, 131}, {198, 8, 85, 133}}},
{Region: "Canada Toronto", IPs: []net.IP{{68, 71, 244, 131}, {68, 71, 244, 134}, {68, 71, 244, 195}, {68, 71, 244, 197}, {68, 71, 244, 200}, {68, 71, 244, 202}, {68, 71, 244, 210}, {68, 71, 244, 212}, {68, 71, 244, 215}, {68, 71, 244, 217}, {68, 71, 244, 220}, {68, 71, 244, 222}, {104, 200, 138, 3}, {104, 200, 138, 5}, {104, 200, 138, 7}, {104, 200, 138, 147}, {104, 200, 138, 149}, {104, 200, 138, 152}, {104, 200, 138, 154}, {104, 200, 138, 163}, {104, 200, 138, 165}, {162, 253, 71, 211}, {162, 253, 71, 213}, {162, 253, 71, 215}}},
{Region: "Canada US", IPs: []net.IP{{159, 203, 57, 80}}},
{Region: "Canada Vancouver", IPs: []net.IP{{66, 115, 147, 67}, {66, 115, 147, 69}, {66, 115, 147, 72}, {66, 115, 147, 74}, {66, 115, 147, 79}, {66, 115, 147, 82}, {66, 115, 147, 84}, {66, 115, 147, 87}, {66, 115, 147, 89}, {66, 115, 147, 92}, {66, 115, 147, 94}, {104, 200, 132, 35}, {104, 200, 132, 37}, {104, 200, 132, 39}, {107, 181, 177, 179}, {107, 181, 177, 181}, {107, 181, 177, 183}, {172, 83, 40, 147}, {172, 83, 40, 149}, {208, 78, 41, 195}, {208, 78, 41, 197}, {208, 78, 41, 200}, {208, 78, 41, 202}}},
{Region: "Chile", IPs: []net.IP{{31, 169, 121, 16}, {131, 221, 32, 195}}},
{Region: "Colombia", IPs: []net.IP{{45, 129, 32, 15}}},
{Region: "Costa Rica", IPs: []net.IP{{176, 227, 241, 21}}},
{Region: "Croatia", IPs: []net.IP{{85, 10, 56, 226}, {85, 10, 56, 228}, {89, 164, 99, 109}, {89, 164, 99, 111}}},
{Region: "Cyprus", IPs: []net.IP{{195, 47, 194, 40}, {195, 47, 194, 42}}},
{Region: "Czech Republic", IPs: []net.IP{{95, 168, 209, 111}, {185, 152, 64, 151}, {185, 152, 64, 178}, {193, 9, 112, 179}, {193, 9, 112, 181}, {193, 9, 112, 183}, {193, 9, 112, 195}, {193, 9, 112, 197}, {193, 9, 112, 199}}},
{Region: "Denmark", IPs: []net.IP{{37, 120, 145, 19}, {37, 120, 145, 21}, {37, 120, 194, 91}, {37, 120, 194, 93}, {37, 120, 194, 99}, {37, 120, 194, 101}, {37, 120, 194, 107}, {37, 120, 194, 109}, {37, 120, 194, 115}, {37, 120, 194, 117}, {37, 120, 194, 123}, {37, 120, 194, 125}, {37, 120, 194, 163}, {37, 120, 194, 165}, {45, 12, 221, 163}, {45, 12, 221, 165}, {45, 12, 221, 167}, {45, 12, 221, 179}, {45, 12, 221, 181}, {45, 12, 221, 183}, {95, 174, 65, 67}, {95, 174, 65, 69}, {95, 174, 65, 71}}},
{Region: "Estonia", IPs: []net.IP{{165, 231, 163, 3}, {165, 231, 163, 5}, {165, 231, 163, 7}, {165, 231, 163, 19}, {165, 231, 163, 21}, {165, 231, 163, 23}, {185, 174, 159, 51}, {185, 174, 159, 53}, {185, 174, 159, 59}, {185, 174, 159, 61}, {185, 174, 159, 67}, {185, 174, 159, 69}}},
{Region: "Finland", IPs: []net.IP{{196, 244, 191, 163}, {196, 244, 191, 165}, {196, 244, 191, 195}, {196, 244, 191, 197}}},
{Region: "France Bordeaux", IPs: []net.IP{{185, 108, 106, 19}, {185, 108, 106, 21}, {185, 108, 106, 51}, {185, 108, 106, 53}, {185, 108, 106, 67}, {185, 108, 106, 69}, {185, 108, 106, 140}, {185, 108, 106, 142}, {185, 108, 106, 144}, {185, 108, 106, 146}, {185, 108, 106, 148}, {185, 108, 106, 150}, {185, 108, 106, 152}, {185, 108, 106, 154}, {185, 108, 106, 158}, {185, 108, 106, 160}, {185, 108, 106, 162}, {185, 108, 106, 164}, {185, 108, 106, 166}}},
{Region: "France Marseilles", IPs: []net.IP{{185, 166, 84, 5}, {185, 166, 84, 19}, {185, 166, 84, 23}, {185, 166, 84, 29}, {185, 166, 84, 31}, {185, 166, 84, 36}, {185, 166, 84, 38}, {185, 166, 84, 51}, {185, 166, 84, 55}, {185, 166, 84, 57}, {185, 166, 84, 59}, {185, 166, 84, 61}, {185, 166, 84, 63}, {185, 166, 84, 75}, {185, 166, 84, 79}, {185, 166, 84, 81}, {185, 166, 84, 87}, {185, 166, 84, 89}, {185, 166, 84, 93}, {185, 166, 84, 95}}},
{Region: "France Paris", IPs: []net.IP{{45, 83, 90, 179}, {45, 83, 90, 181}, {45, 83, 90, 183}, {45, 89, 174, 59}, {45, 89, 174, 61}, {45, 89, 174, 85}, {45, 89, 174, 91}, {45, 89, 174, 93}, {45, 89, 174, 101}, {45, 89, 174, 103}, {84, 17, 43, 178}, {84, 17, 43, 180}, {84, 17, 43, 183}, {84, 17, 43, 185}, {84, 17, 60, 235}, {84, 17, 60, 250}, {84, 247, 51, 235}, {84, 247, 51, 243}, {84, 247, 51, 245}, {84, 247, 51, 253}, {185, 246, 211, 69}, {185, 246, 211, 103}, {217, 138, 207, 243}, {217, 138, 207, 245}}},
{Region: "France Sweden", IPs: []net.IP{{199, 247, 8, 20}}},
{Region: "Germany Berlin", IPs: []net.IP{{37, 120, 217, 131}, {37, 120, 217, 147}, {37, 120, 217, 149}, {37, 120, 217, 179}, {37, 120, 217, 181}, {152, 89, 163, 19}, {152, 89, 163, 21}, {152, 89, 163, 23}, {152, 89, 163, 227}, {152, 89, 163, 229}, {152, 89, 163, 231}, {152, 89, 163, 243}, {193, 176, 86, 195}, {193, 176, 86, 199}, {217, 138, 216, 59}, {217, 138, 216, 61}, {217, 138, 216, 219}, {217, 138, 216, 227}, {217, 138, 216, 229}, {217, 138, 216, 235}, {217, 138, 216, 237}, {217, 138, 216, 243}, {217, 138, 216, 245}, {217, 138, 216, 251}, {217, 138, 216, 253}}},
{Region: "Germany Frankfurt am Main st001", IPs: []net.IP{{45, 87, 212, 179}}},
{Region: "Germany Frankfurt am Main st002", IPs: []net.IP{{45, 87, 212, 181}}},
{Region: "Germany Frankfurt am Main st003", IPs: []net.IP{{45, 87, 212, 183}}},
{Region: "Germany Frankfurt am Main", IPs: []net.IP{{37, 120, 196, 53}, {37, 120, 196, 59}, {37, 120, 196, 61}, {37, 120, 196, 173}, {37, 120, 197, 11}, {37, 120, 197, 13}, {82, 102, 16, 99}, {82, 102, 16, 101}, {84, 16, 240, 174}, {84, 16, 240, 176}, {89, 187, 169, 104}, {89, 187, 169, 119}, {185, 59, 220, 144}, {185, 59, 220, 150}, {185, 59, 220, 168}, {185, 59, 220, 172}, {185, 93, 180, 101}, {185, 102, 219, 6}, {185, 102, 219, 47}, {185, 102, 219, 49}, {185, 158, 135, 36}}},
{Region: "Germany Munich", IPs: []net.IP{{178, 238, 231, 53}, {178, 238, 231, 55}}},
{Region: "Germany Nuremberg", IPs: []net.IP{{62, 171, 149, 160}, {62, 171, 149, 162}, {62, 171, 151, 180}, {62, 171, 151, 182}}},
{Region: "Germany Singapour", IPs: []net.IP{{159, 89, 14, 157}}},
{Region: "Germany UK", IPs: []net.IP{{46, 101, 250, 73}}},
{Region: "Greece", IPs: []net.IP{{87, 239, 248, 78}, {87, 239, 248, 80}, {87, 239, 248, 82}, {87, 239, 248, 85}, {87, 239, 248, 87}, {185, 226, 65, 150}}},
{Region: "Hong Kong", IPs: []net.IP{{64, 120, 121, 216}, {64, 120, 121, 232}, {64, 120, 121, 234}, {64, 120, 121, 236}, {64, 120, 121, 238}, {64, 120, 121, 240}, {64, 120, 121, 244}, {64, 120, 121, 246}, {64, 120, 121, 248}, {84, 17, 37, 154}, {84, 17, 37, 156}, {84, 17, 37, 158}, {84, 17, 37, 160}, {84, 17, 57, 185}, {209, 58, 186, 10}, {209, 58, 186, 12}, {209, 58, 186, 14}, {209, 58, 186, 16}, {209, 58, 186, 18}}},
{Region: "Hungary", IPs: []net.IP{{37, 120, 144, 147}, {37, 120, 144, 149}, {37, 120, 144, 151}, {37, 120, 144, 197}, {37, 120, 144, 199}, {37, 120, 144, 211}, {37, 120, 144, 213}, {37, 120, 144, 215}, {37, 120, 144, 243}, {37, 120, 144, 245}}},
{Region: "Iceland", IPs: []net.IP{{82, 221, 128, 156}}},
{Region: "India Chennai", IPs: []net.IP{{103, 94, 27, 99}, {103, 94, 27, 101}, {103, 94, 27, 115}, {103, 94, 27, 117}, {103, 94, 27, 179}, {103, 94, 27, 181}, {103, 94, 27, 227}, {103, 94, 27, 229}, {103, 108, 117, 131}, {103, 108, 117, 133}, {103, 108, 117, 147}, {103, 108, 117, 149}, {103, 108, 117, 151}}},
{Region: "India Indore", IPs: []net.IP{{103, 39, 132, 187}, {103, 39, 132, 189}, {103, 73, 189, 219}, {103, 73, 189, 221}, {137, 59, 52, 107}, {137, 59, 52, 109}}},
{Region: "India Mumbai", IPs: []net.IP{{103, 221, 233, 61}, {103, 221, 233, 86}, {103, 221, 233, 88}, {103, 221, 233, 89}, {103, 221, 233, 91}, {165, 231, 253, 147}, {165, 231, 253, 149}, {165, 231, 253, 163}}},
{Region: "India UK", IPs: []net.IP{{134, 209, 148, 122}}},
{Region: "Indonesia", IPs: []net.IP{{103, 227, 255, 211}, {103, 227, 255, 213}, {103, 227, 255, 215}}},
{Region: "Ireland", IPs: []net.IP{{185, 108, 128, 114}, {185, 108, 128, 118}, {185, 108, 128, 159}, {185, 108, 128, 161}, {185, 108, 128, 181}, {185, 108, 128, 183}, {185, 108, 128, 185}, {217, 138, 222, 43}, {217, 138, 222, 45}, {217, 138, 222, 51}, {217, 138, 222, 53}}},
{Region: "Israel", IPs: []net.IP{{87, 239, 255, 107}, {87, 239, 255, 109}, {87, 239, 255, 111}, {87, 239, 255, 114}, {87, 239, 255, 116}, {87, 239, 255, 119}, {87, 239, 255, 121}}},
{Region: "Italy Milan", IPs: []net.IP{{37, 120, 201, 23}, {37, 120, 201, 67}, {37, 120, 201, 69}, {37, 120, 201, 71}, {45, 9, 251, 163}, {84, 17, 58, 136}, {84, 17, 58, 146}, {84, 17, 58, 148}, {84, 17, 58, 150}, {84, 17, 58, 152}, {84, 17, 58, 154}, {84, 17, 58, 156}, {84, 17, 58, 159}, {84, 17, 58, 161}, {84, 17, 58, 190}, {84, 17, 58, 195}, {84, 17, 58, 197}, {84, 17, 58, 200}, {84, 17, 58, 207}, {95, 174, 64, 69}, {95, 174, 64, 71}, {185, 128, 27, 41}, {212, 102, 54, 145}, {212, 102, 54, 160}, {212, 102, 54, 162}}},
{Region: "Japan Tokyo st001", IPs: []net.IP{{45, 87, 213, 19}}},
{Region: "Japan Tokyo st002", IPs: []net.IP{{45, 87, 213, 21}}},
{Region: "Japan Tokyo st003", IPs: []net.IP{{45, 87, 213, 23}}},
{Region: "Japan Tokyo st004", IPs: []net.IP{{217, 138, 212, 19}}},
{Region: "Japan Tokyo st005", IPs: []net.IP{{217, 138, 212, 21}}},
{Region: "Japan Tokyo st006", IPs: []net.IP{{82, 102, 28, 123}}},
{Region: "Japan Tokyo st007", IPs: []net.IP{{82, 102, 28, 125}}},
{Region: "Japan Tokyo", IPs: []net.IP{{45, 87, 213, 3}, {45, 87, 213, 5}, {45, 87, 213, 7}, {45, 87, 213, 83}, {45, 87, 213, 85}, {45, 87, 213, 87}, {45, 87, 213, 101}, {45, 87, 213, 103}, {45, 87, 213, 105}, {45, 87, 213, 211}, {45, 87, 213, 213}, {45, 87, 213, 243}, {45, 87, 213, 245}, {84, 17, 34, 24}, {84, 17, 34, 26}, {84, 17, 34, 44}, {84, 17, 34, 46}, {89, 187, 161, 2}, {89, 187, 161, 4}, {89, 187, 161, 239}, {89, 187, 161, 241}, {103, 208, 221, 227}, {103, 208, 221, 229}, {185, 242, 4, 163}}},
{Region: "Kazakhstan", IPs: []net.IP{{45, 136, 56, 54}, {45, 136, 56, 57}, {45, 136, 56, 61}, {45, 136, 56, 64}}},
{Region: "Korea", IPs: []net.IP{{27, 255, 77, 195}, {27, 255, 77, 197}, {27, 255, 77, 226}, {61, 14, 210, 227}, {61, 14, 210, 229}, {61, 14, 210, 232}, {61, 14, 210, 234}, {61, 14, 210, 237}, {61, 14, 210, 239}, {61, 14, 210, 242}, {61, 14, 210, 244}, {61, 97, 243, 119}, {61, 97, 243, 124}, {103, 249, 28, 215}, {103, 249, 28, 227}, {103, 249, 28, 229}, {103, 249, 28, 231}}},
{Region: "Latvia", IPs: []net.IP{{91, 203, 70, 186}, {91, 203, 70, 188}, {188, 92, 78, 135}, {188, 92, 78, 137}, {188, 92, 78, 140}, {188, 92, 78, 142}, {188, 92, 78, 145}, {188, 92, 78, 147}, {188, 92, 78, 150}, {188, 92, 78, 152}}},
{Region: "Libya", IPs: []net.IP{{41, 208, 72, 157}, {41, 208, 72, 204}, {41, 208, 72, 207}}},
{Region: "Luxembourg", IPs: []net.IP{{185, 153, 151, 60}, {185, 153, 151, 62}, {185, 153, 151, 64}, {185, 153, 151, 66}, {185, 153, 151, 68}, {185, 153, 151, 70}, {185, 153, 151, 73}, {185, 153, 151, 75}, {185, 153, 151, 78}, {185, 153, 151, 80}, {185, 153, 151, 82}, {185, 153, 151, 83}, {185, 153, 151, 85}, {185, 153, 151, 87}, {185, 153, 151, 91}}},
{Region: "Malaysia", IPs: []net.IP{{42, 0, 30, 135}, {42, 0, 30, 160}, {42, 0, 30, 162}, {42, 0, 30, 164}, {42, 0, 30, 177}, {42, 0, 30, 179}, {42, 0, 30, 209}, {42, 0, 30, 213}, {42, 0, 30, 215}}},
{Region: "Moldova", IPs: []net.IP{{178, 175, 148, 39}}},
{Region: "Netherlands Amsterdam st001", IPs: []net.IP{{81, 19, 209, 51}}},
{Region: "Netherlands Amsterdam", IPs: []net.IP{{81, 19, 208, 56}, {81, 19, 208, 68}, {81, 19, 209, 20}, {81, 19, 209, 57}, {81, 19, 209, 113}, {81, 19, 209, 124}, {89, 46, 223, 78}, {89, 46, 223, 86}, {89, 46, 223, 92}, {89, 46, 223, 100}, {89, 46, 223, 104}, {89, 46, 223, 106}, {89, 46, 223, 212}, {89, 46, 223, 214}, {89, 46, 223, 217}, {89, 46, 223, 222}, {89, 46, 223, 224}, {89, 46, 223, 227}, {89, 187, 174, 231}, {185, 59, 222, 92}, {185, 59, 222, 94}, {185, 59, 222, 166}, {185, 59, 222, 168}, {185, 232, 20, 131}}},
{Region: "Netherlands US", IPs: []net.IP{{188, 166, 98, 91}}},
{Region: "New Zealand", IPs: []net.IP{{180, 149, 231, 3}, {180, 149, 231, 11}, {180, 149, 231, 13}, {180, 149, 231, 43}, {180, 149, 231, 45}, {180, 149, 231, 67}, {180, 149, 231, 69}, {180, 149, 231, 115}, {180, 149, 231, 117}, {180, 149, 231, 119}, {180, 149, 231, 163}, {180, 149, 231, 165}}},
{Region: "Nigeria", IPs: []net.IP{{102, 165, 23, 4}, {102, 165, 23, 6}, {102, 165, 23, 38}, {102, 165, 23, 40}, {102, 165, 23, 42}}},
{Region: "North Macedonia", IPs: []net.IP{{185, 225, 28, 67}, {185, 225, 28, 69}, {185, 225, 28, 83}, {185, 225, 28, 85}, {185, 225, 28, 91}, {185, 225, 28, 93}, {185, 225, 28, 99}, {185, 225, 28, 101}, {185, 225, 28, 107}, {185, 225, 28, 109}}},
{Region: "Norway", IPs: []net.IP{{45, 12, 223, 67}, {45, 12, 223, 69}, {45, 12, 223, 71}, {45, 12, 223, 195}, {45, 12, 223, 197}, {45, 12, 223, 211}, {45, 12, 223, 213}, {84, 247, 50, 27}, {84, 247, 50, 29}, {84, 247, 50, 67}, {84, 247, 50, 69}, {95, 174, 66, 35}, {95, 174, 66, 37}, {95, 174, 66, 39}, {95, 174, 66, 41}}},
{Region: "Paraguay", IPs: []net.IP{{181, 40, 18, 47}, {181, 40, 18, 56}, {181, 40, 18, 59}, {186, 16, 32, 163}, {186, 16, 32, 173}}},
{Region: "Philippines", IPs: []net.IP{{45, 134, 224, 3}, {45, 134, 224, 5}, {45, 134, 224, 8}, {45, 134, 224, 10}}},
{Region: "Poland Gdansk", IPs: []net.IP{{5, 187, 49, 187}, {5, 187, 49, 189}, {5, 187, 53, 51}, {5, 187, 53, 53}, {5, 187, 53, 55}}},
{Region: "Poland Warsaw", IPs: []net.IP{{5, 253, 206, 67}, {5, 253, 206, 69}, {5, 253, 206, 71}, {5, 253, 206, 227}, {5, 253, 206, 229}, {84, 17, 55, 132}, {84, 17, 55, 134}, {185, 246, 208, 72}, {185, 246, 208, 77}, {185, 246, 208, 105}, {185, 246, 208, 107}, {185, 246, 208, 176}, {185, 246, 208, 182}}},
{Region: "Portugal Lisbon", IPs: []net.IP{{5, 154, 174, 26}, {5, 154, 174, 65}, {5, 154, 174, 67}, {5, 154, 174, 75}, {5, 154, 174, 77}, {5, 154, 174, 99}, {5, 154, 174, 101}, {5, 154, 174, 115}, {5, 154, 174, 117}, {5, 154, 174, 171}, {5, 154, 174, 173}, {5, 154, 174, 179}, {5, 154, 174, 181}, {5, 154, 174, 187}, {5, 154, 174, 189}, {5, 154, 174, 211}, {5, 154, 174, 213}, {5, 154, 174, 219}, {5, 154, 174, 221}, {5, 154, 174, 227}, {5, 154, 174, 229}}},
{Region: "Portugal Loule", IPs: []net.IP{{176, 61, 146, 84}, {176, 61, 146, 86}, {176, 61, 146, 106}, {176, 61, 146, 108}, {176, 61, 146, 113}, {176, 61, 146, 116}, {176, 61, 146, 118}, {176, 61, 146, 121}, {176, 61, 146, 123}, {176, 61, 148, 60}, {176, 61, 148, 62}}},
{Region: "Portugal Porto", IPs: []net.IP{{194, 39, 127, 21}, {194, 39, 127, 23}, {194, 39, 127, 36}, {194, 39, 127, 38}, {194, 39, 127, 231}, {194, 39, 127, 233}, {194, 39, 127, 240}, {194, 39, 127, 242}, {194, 39, 127, 244}}},
{Region: "Romania", IPs: []net.IP{{86, 106, 137, 147}, {86, 106, 137, 149}, {194, 68, 44, 61}}},
{Region: "Russia Moscow", IPs: []net.IP{{213, 183, 56, 18}, {213, 183, 56, 145}, {213, 183, 56, 160}, {213, 183, 56, 166}, {213, 183, 56, 233}, {213, 183, 56, 236}}},
{Region: "Russia St. Petersburg", IPs: []net.IP{{213, 183, 54, 23}, {213, 183, 54, 109}, {213, 183, 54, 143}, {213, 183, 54, 165}}},
{Region: "Serbia", IPs: []net.IP{{37, 120, 193, 51}, {37, 120, 193, 53}, {152, 89, 160, 115}, {152, 89, 160, 117}, {152, 89, 160, 119}, {152, 89, 160, 121}, {152, 89, 160, 123}, {152, 89, 160, 125}, {152, 89, 160, 211}, {152, 89, 160, 213}, {152, 89, 160, 215}}},
{Region: "Singapore Hong Kong", IPs: []net.IP{{206, 189, 83, 129}}},
{Region: "Singapore Netherlands", IPs: []net.IP{{104, 248, 148, 18}}},
{Region: "Singapore st001", IPs: []net.IP{{217, 138, 201, 91}}},
{Region: "Singapore st002", IPs: []net.IP{{217, 138, 201, 93}}},
{Region: "Singapore st003", IPs: []net.IP{{84, 247, 49, 19}}},
{Region: "Singapore st004", IPs: []net.IP{{84, 247, 49, 21}}},
{Region: "Singapore", IPs: []net.IP{{89, 187, 163, 130}, {89, 187, 163, 132}, {89, 187, 163, 134}, {89, 187, 163, 136}, {103, 254, 153, 171}, {103, 254, 153, 176}, {103, 254, 155, 229}, {103, 254, 155, 241}, {209, 58, 170, 134}, {209, 58, 170, 142}, {209, 58, 170, 144}, {209, 58, 170, 146}, {209, 58, 170, 159}, {209, 58, 170, 163}, {209, 58, 170, 164}, {209, 58, 170, 169}, {209, 58, 170, 172}, {209, 58, 176, 43}, {209, 58, 176, 45}, {209, 58, 176, 47}}},
{Region: "Slovekia", IPs: []net.IP{{37, 120, 221, 3}, {37, 120, 221, 5}, {193, 37, 255, 35}, {193, 37, 255, 37}, {193, 37, 255, 39}, {193, 37, 255, 41}}},
{Region: "Slovenia", IPs: []net.IP{{195, 158, 249, 36}, {195, 158, 249, 38}, {195, 158, 249, 40}, {195, 158, 249, 42}}},
{Region: "South Africa", IPs: []net.IP{{154, 127, 49, 226}, {154, 127, 49, 228}, {154, 127, 49, 230}, {154, 127, 49, 232}, {196, 251, 250, 111}}},
{Region: "Spain Barcelona", IPs: []net.IP{{37, 120, 142, 133}, {37, 120, 142, 135}, {185, 188, 61, 5}, {185, 188, 61, 7}}},
{Region: "Spain Madrid", IPs: []net.IP{{37, 120, 148, 213}, {82, 102, 17, 179}, {82, 102, 17, 181}, {82, 102, 17, 183}, {82, 102, 17, 185}, {84, 17, 62, 163}, {84, 17, 62, 165}, {84, 17, 62, 181}, {89, 37, 95, 7}, {89, 37, 95, 9}, {89, 37, 95, 11}, {89, 37, 95, 15}, {89, 37, 95, 17}, {89, 37, 95, 19}, {89, 37, 95, 25}, {188, 208, 141, 98}, {188, 208, 141, 114}, {212, 102, 48, 2}, {212, 102, 48, 4}, {212, 102, 48, 8}, {212, 102, 48, 10}, {212, 102, 48, 13}, {212, 102, 48, 15}, {212, 102, 48, 18}, {212, 102, 48, 20}}},
{Region: "Spain Valencia", IPs: []net.IP{{185, 153, 150, 44}, {185, 153, 150, 46}, {185, 153, 150, 48}, {185, 153, 150, 50}, {185, 153, 150, 52}, {185, 153, 150, 54}, {185, 153, 150, 56}, {185, 153, 150, 58}, {196, 196, 150, 67}, {196, 196, 150, 69}, {196, 196, 150, 71}, {196, 196, 150, 83}, {196, 196, 150, 85}}},
{Region: "Sweden", IPs: []net.IP{{45, 83, 91, 131}, {45, 83, 91, 133}, {45, 83, 91, 135}, {45, 83, 91, 147}, {45, 83, 91, 149}, {45, 83, 91, 151}, {46, 227, 69, 23}, {46, 227, 69, 25}, {46, 227, 69, 27}, {46, 227, 69, 29}, {185, 76, 9, 34}, {185, 76, 9, 36}, {185, 76, 9, 39}, {185, 76, 9, 41}, {185, 76, 9, 44}, {185, 76, 9, 46}, {185, 76, 9, 49}, {185, 76, 9, 51}}},
{Region: "Switzerland", IPs: []net.IP{{37, 120, 213, 3}, {37, 120, 213, 7}, {45, 12, 222, 245}, {84, 17, 53, 86}, {84, 17, 53, 166}, {84, 17, 53, 168}, {84, 17, 53, 208}, {84, 17, 53, 210}, {84, 17, 53, 212}, {84, 17, 53, 216}, {84, 17, 53, 219}, {84, 17, 53, 221}, {84, 17, 53, 223}, {84, 17, 53, 225}, {84, 17, 53, 227}, {84, 39, 112, 35}}},
{Region: "Taiwan", IPs: []net.IP{{2, 58, 241, 3}, {2, 58, 241, 5}, {2, 58, 242, 43}, {2, 58, 242, 45}, {2, 58, 242, 155}, {2, 58, 242, 157}, {2, 58, 243, 51}, {2, 58, 243, 53}, {103, 51, 140, 70}, {103, 51, 140, 72}, {103, 51, 140, 74}, {103, 98, 74, 227}, {103, 98, 74, 229}, {103, 98, 75, 71}, {103, 98, 75, 73}, {103, 103, 128, 30}}},
{Region: "Thailand", IPs: []net.IP{{45, 64, 186, 134}, {45, 64, 186, 163}, {103, 253, 74, 7}}},
{Region: "Turkey", IPs: []net.IP{{185, 195, 79, 3}}},
{Region: "UK France", IPs: []net.IP{{188, 166, 168, 247}}},
{Region: "UK Germany", IPs: []net.IP{{45, 77, 58, 16}}},
{Region: "UK Glasgow", IPs: []net.IP{{185, 108, 105, 5}, {185, 108, 105, 13}, {185, 108, 105, 18}, {185, 108, 105, 20}, {185, 108, 105, 22}, {185, 108, 105, 40}}},
{Region: "UK London st001", IPs: []net.IP{{217, 146, 82, 83}}},
{Region: "UK London st002", IPs: []net.IP{{185, 134, 22, 80}}},
{Region: "UK London st003", IPs: []net.IP{{185, 134, 22, 92}}},
{Region: "UK London st004", IPs: []net.IP{{185, 44, 76, 186}}},
{Region: "UK London st005", IPs: []net.IP{{185, 44, 76, 188}}},
{Region: "UK London", IPs: []net.IP{{5, 226, 139, 65}, {5, 226, 139, 225}, {81, 19, 210, 234}, {89, 35, 29, 71}, {178, 239, 166, 222}, {178, 239, 166, 227}, {178, 239, 166, 234}, {178, 239, 166, 250}, {185, 16, 206, 69}, {185, 38, 148, 228}, {185, 38, 150, 41}, {185, 38, 150, 88}, {185, 38, 150, 124}, {185, 44, 76, 167}, {185, 44, 76, 172}, {185, 114, 224, 53}, {185, 114, 224, 115}, {185, 114, 224, 119}, {185, 125, 207, 155}, {185, 125, 207, 177}, {185, 134, 22, 191}, {185, 193, 36, 208}, {195, 140, 215, 42}}},
{Region: "UK Manchester", IPs: []net.IP{{37, 120, 200, 2}, {86, 106, 136, 67}, {86, 106, 136, 69}, {86, 106, 136, 85}, {89, 238, 130, 196}, {89, 238, 140, 226}, {89, 238, 140, 227}, {89, 238, 140, 229}, {89, 238, 143, 100}, {89, 238, 143, 101}, {89, 238, 143, 103}, {89, 238, 143, 105}, {92, 119, 176, 19}, {92, 119, 176, 21}, {92, 119, 176, 23}, {192, 145, 126, 130}, {192, 145, 126, 131}, {192, 145, 126, 133}, {193, 148, 17, 82}, {193, 148, 17, 130}, {195, 12, 48, 212}, {195, 12, 48, 213}, {195, 12, 48, 215}, {195, 12, 48, 217}, {217, 138, 196, 91}}},
{Region: "US Atlanta", IPs: []net.IP{{66, 115, 154, 131}, {66, 115, 154, 133}, {66, 115, 154, 135}, {66, 115, 154, 147}, {66, 115, 154, 149}, {66, 115, 154, 151}, {66, 115, 169, 35}, {66, 115, 175, 35}, {66, 115, 175, 37}, {66, 115, 175, 40}, {66, 115, 175, 42}, {66, 115, 175, 45}, {66, 115, 175, 47}, {66, 115, 175, 50}, {66, 115, 175, 52}, {185, 93, 0, 143}, {185, 93, 0, 146}}},
{Region: "US Bend", IPs: []net.IP{{45, 43, 14, 73}, {45, 43, 14, 75}, {45, 43, 14, 83}, {45, 43, 14, 85}, {45, 43, 14, 93}, {45, 43, 14, 95}, {45, 43, 14, 103}, {45, 43, 14, 105}, {154, 16, 168, 184}, {154, 16, 168, 186}, {154, 16, 168, 188}}},
{Region: "US Boston", IPs: []net.IP{{173, 237, 207, 11}, {173, 237, 207, 13}, {173, 237, 207, 15}, {173, 237, 207, 21}, {173, 237, 207, 25}, {173, 237, 207, 30}, {173, 237, 207, 32}, {173, 237, 207, 36}, {173, 237, 207, 38}, {173, 237, 207, 42}, {173, 237, 207, 44}, {192, 34, 83, 230}, {192, 34, 83, 232}, {192, 34, 83, 234}, {192, 34, 83, 236}, {199, 217, 107, 20}, {199, 217, 107, 22}, {199, 217, 107, 25}, {199, 217, 107, 27}}},
{Region: "US Buffalo", IPs: []net.IP{{107, 174, 20, 130}, {107, 174, 20, 132}, {107, 174, 20, 134}, {107, 175, 104, 82}, {107, 175, 104, 84}, {107, 175, 104, 86}, {172, 93, 153, 146}, {172, 93, 153, 148}, {172, 93, 153, 150}}},
{Region: "US Charlotte", IPs: []net.IP{{66, 11, 124, 136}, {66, 11, 124, 138}, {66, 11, 124, 140}, {66, 11, 124, 142}, {66, 11, 124, 144}, {155, 254, 28, 141}, {155, 254, 29, 163}, {155, 254, 29, 165}, {155, 254, 31, 182}, {155, 254, 31, 184}, {192, 154, 253, 67}, {192, 154, 253, 69}, {192, 154, 254, 135}, {192, 154, 254, 137}, {192, 154, 255, 52}, {192, 154, 255, 54}}},
{Region: "US Chicago", IPs: []net.IP{{74, 119, 146, 115}, {74, 119, 146, 117}, {74, 119, 146, 119}, {74, 119, 146, 133}, {74, 119, 146, 179}, {74, 119, 146, 181}, {74, 119, 146, 183}, {74, 119, 146, 195}, {74, 119, 146, 197}, {74, 119, 146, 199}, {74, 119, 146, 211}, {89, 187, 182, 173}, {89, 187, 182, 175}, {107, 152, 100, 19}, {107, 152, 100, 21}, {107, 152, 100, 24}, {107, 152, 100, 26}, {184, 170, 250, 69}, {184, 170, 250, 74}, {184, 170, 250, 149}, {184, 170, 250, 154}}},
{Region: "US Dallas", IPs: []net.IP{{66, 115, 177, 131}, {66, 115, 177, 133}, {66, 115, 177, 136}, {66, 115, 177, 138}, {66, 115, 177, 141}, {66, 115, 177, 143}, {66, 115, 177, 146}, {66, 115, 177, 148}, {66, 115, 177, 151}, {66, 115, 177, 153}, {66, 115, 177, 156}, {66, 115, 177, 158}, {89, 187, 175, 165}, {89, 187, 175, 167}, {107, 181, 173, 163}, {172, 241, 114, 87}, {212, 102, 40, 66}, {212, 102, 40, 68}, {212, 102, 40, 71}, {212, 102, 40, 73}, {212, 102, 40, 76}, {212, 102, 40, 78}, {212, 102, 40, 81}}},
{Region: "US Denver", IPs: []net.IP{{174, 128, 245, 3}, {174, 128, 245, 5}, {212, 102, 44, 66}, {212, 102, 44, 68}, {212, 102, 44, 71}, {212, 102, 44, 73}, {212, 102, 44, 76}, {212, 102, 44, 78}, {212, 102, 44, 81}, {212, 102, 44, 83}, {212, 102, 44, 86}, {212, 102, 44, 88}, {212, 102, 44, 91}, {212, 102, 44, 93}}},
{Region: "US Gahanna", IPs: []net.IP{{104, 244, 208, 35}, {104, 244, 208, 37}, {104, 244, 208, 99}, {104, 244, 208, 101}, {104, 244, 208, 107}, {104, 244, 208, 203}, {104, 244, 208, 205}, {104, 244, 208, 229}, {104, 244, 208, 231}, {104, 244, 209, 51}, {104, 244, 209, 53}, {104, 244, 211, 139}, {104, 244, 211, 141}, {104, 244, 211, 171}, {104, 244, 211, 173}, {104, 244, 211, 179}}},
{Region: "US Houston", IPs: []net.IP{{104, 148, 30, 35}, {104, 148, 30, 37}, {104, 148, 30, 39}, {104, 148, 30, 53}, {104, 148, 30, 55}, {104, 148, 30, 83}, {104, 148, 30, 85}, {104, 148, 30, 87}, {199, 10, 64, 67}, {199, 10, 64, 69}, {199, 10, 64, 83}, {199, 10, 64, 85}, {199, 10, 64, 99}, {199, 10, 64, 101}, {199, 10, 64, 115}, {199, 10, 64, 117}}},
{Region: "US Kansas City", IPs: []net.IP{{63, 141, 236, 243}, {63, 141, 248, 179}, {63, 141, 248, 181}, {107, 150, 39, 43}, {173, 208, 202, 59}, {173, 208, 202, 61}, {198, 204, 231, 147}, {198, 204, 231, 149}, {204, 12, 208, 115}, {204, 12, 208, 117}}},
{Region: "US Las Vegas", IPs: []net.IP{{89, 187, 187, 147}, {89, 187, 187, 149}, {185, 242, 5, 211}, {185, 242, 5, 213}, {185, 242, 5, 215}}},
{Region: "US Latham", IPs: []net.IP{{45, 43, 19, 66}, {45, 43, 19, 68}, {45, 43, 19, 74}, {45, 43, 19, 76}, {45, 43, 19, 82}, {45, 43, 19, 84}, {45, 43, 19, 90}, {45, 43, 19, 92}, {154, 16, 169, 3}, {154, 16, 169, 5}, {154, 16, 169, 7}}},
{Region: "US Los Angeles", IPs: []net.IP{{38, 95, 110, 67}, {38, 95, 110, 71}, {89, 187, 187, 66}, {89, 187, 187, 68}, {89, 187, 187, 71}, {89, 187, 187, 73}, {89, 187, 187, 76}, {89, 187, 187, 78}, {89, 187, 187, 81}, {89, 187, 187, 83}, {89, 187, 187, 86}, {172, 83, 44, 83}, {184, 170, 243, 199}, {184, 170, 243, 211}, {192, 111, 134, 67}, {192, 111, 134, 78}, {192, 111, 134, 80}, {192, 111, 134, 195}, {192, 111, 134, 202}, {192, 111, 134, 207}, {192, 111, 134, 210}, {192, 111, 134, 215}, {192, 111, 134, 217}, {192, 111, 134, 220}, {192, 111, 134, 222}}},
{Region: "US Maryland", IPs: []net.IP{{23, 82, 8, 173}, {23, 105, 160, 134}, {23, 105, 160, 138}, {23, 105, 160, 144}, {23, 105, 163, 94}, {207, 244, 67, 147}, {207, 244, 67, 149}, {207, 244, 84, 40}, {207, 244, 84, 42}, {207, 244, 84, 44}, {207, 244, 84, 58}, {207, 244, 127, 116}, {207, 244, 127, 118}}},
{Region: "US Miami", IPs: []net.IP{{89, 187, 173, 250}, {107, 181, 164, 35}, {107, 181, 164, 37}, {172, 83, 42, 23}, {172, 83, 42, 39}, {172, 83, 42, 53}, {172, 83, 42, 55}, {172, 83, 42, 83}, {172, 83, 42, 85}, {172, 83, 42, 131}, {172, 83, 42, 133}, {172, 83, 42, 136}, {172, 83, 42, 138}, {172, 83, 42, 141}, {172, 83, 42, 143}, {172, 83, 42, 146}, {172, 83, 42, 151}, {172, 83, 42, 153}, {172, 83, 42, 156}, {172, 83, 42, 158}, {193, 37, 252, 195}, {193, 37, 252, 197}}},
{Region: "US Netherlands", IPs: []net.IP{{142, 93, 58, 71}}},
{Region: "US New York City mp001", IPs: []net.IP{{45, 55, 60, 159}}},
{Region: "US New York City st001", IPs: []net.IP{{92, 119, 177, 19}}},
{Region: "US New York City st002", IPs: []net.IP{{92, 119, 177, 21}}},
{Region: "US New York City st003", IPs: []net.IP{{92, 119, 177, 23}}},
{Region: "US New York City st004", IPs: []net.IP{{193, 148, 18, 51}}},
{Region: "US New York City st005", IPs: []net.IP{{193, 148, 18, 53}}},
{Region: "US New York City", IPs: []net.IP{{37, 120, 202, 3}, {37, 120, 202, 5}, {84, 17, 35, 66}, {84, 17, 35, 73}, {84, 17, 35, 76}, {84, 17, 35, 78}, {84, 17, 35, 86}, {84, 17, 35, 91}, {89, 187, 177, 120}, {89, 187, 177, 122}, {89, 187, 178, 92}, {89, 187, 178, 94}, {98, 142, 220, 35}, {98, 142, 220, 37}, {107, 152, 101, 163}, {172, 98, 78, 227}, {192, 40, 59, 229}, {192, 40, 59, 240}, {199, 36, 221, 85}, {199, 36, 221, 99}, {199, 36, 221, 104}, {199, 36, 221, 111}, {199, 36, 221, 114}, {199, 36, 221, 116}, {199, 36, 221, 119}}},
{Region: "US Orlando", IPs: []net.IP{{198, 147, 22, 83}, {198, 147, 22, 85}, {198, 147, 22, 87}, {198, 147, 22, 131}, {198, 147, 22, 133}, {198, 147, 22, 135}, {198, 147, 22, 147}, {198, 147, 22, 149}, {198, 147, 22, 151}, {198, 147, 22, 163}, {198, 147, 22, 165}, {198, 147, 22, 167}, {198, 147, 22, 195}, {198, 147, 22, 197}, {198, 147, 22, 211}, {198, 147, 22, 213}}},
{Region: "US Phoenix", IPs: []net.IP{{23, 83, 128, 233}, {23, 83, 128, 235}, {23, 83, 128, 239}, {23, 83, 128, 241}, {23, 83, 128, 243}, {107, 181, 184, 115}, {107, 181, 184, 117}, {172, 98, 87, 35}, {172, 98, 87, 37}, {184, 170, 240, 147}, {184, 170, 240, 149}, {184, 170, 240, 151}, {184, 170, 240, 179}, {184, 170, 240, 181}, {199, 58, 187, 3}, {199, 58, 187, 5}, {199, 58, 187, 8}, {199, 58, 187, 10}, {199, 58, 187, 13}, {199, 58, 187, 15}, {199, 58, 187, 18}, {199, 58, 187, 23}, {199, 58, 187, 25}, {199, 58, 187, 67}, {199, 58, 187, 69}}},
{Region: "US Portugal", IPs: []net.IP{{142, 93, 81, 242}}},
{Region: "US Saint Louis", IPs: []net.IP{{148, 72, 170, 108}, {148, 72, 174, 36}, {148, 72, 174, 38}, {148, 72, 174, 41}, {148, 72, 174, 43}, {148, 72, 174, 46}, {148, 72, 174, 51}, {148, 72, 174, 53}}},
{Region: "US Salt Lake City", IPs: []net.IP{{104, 200, 131, 5}, {104, 200, 131, 7}, {104, 200, 131, 9}, {104, 200, 131, 165}, {104, 200, 131, 167}, {104, 200, 131, 170}, {104, 200, 131, 172}}},
{Region: "US San Francisco", IPs: []net.IP{{107, 181, 166, 35}, {107, 181, 166, 37}, {107, 181, 166, 39}, {107, 181, 166, 51}, {107, 181, 166, 55}, {107, 181, 166, 83}, {107, 181, 166, 85}, {107, 181, 166, 227}, {107, 181, 166, 229}, {198, 8, 81, 35}, {198, 8, 81, 37}, {209, 58, 128, 48}, {209, 58, 128, 50}}},
{Region: "US Seatle", IPs: []net.IP{{84, 17, 41, 73}, {84, 17, 41, 75}, {84, 17, 41, 77}, {84, 17, 41, 79}, {84, 17, 41, 81}, {84, 17, 41, 83}, {84, 17, 41, 85}, {104, 200, 129, 243}, {104, 200, 129, 245}, {198, 8, 80, 83}, {198, 8, 80, 85}, {198, 8, 80, 87}, {198, 8, 80, 227}, {198, 8, 80, 229}, {199, 229, 250, 163}, {199, 229, 250, 165}, {199, 229, 250, 167}}},
{Region: "US Tampa", IPs: []net.IP{{66, 206, 23, 5}, {74, 50, 117, 106}, {74, 50, 117, 119}, {74, 50, 117, 121}, {74, 50, 117, 125}, {162, 220, 56, 98}, {162, 220, 56, 100}, {162, 220, 63, 226}, {162, 220, 63, 232}, {162, 220, 63, 246}, {162, 220, 63, 248}, {209, 216, 92, 197}, {209, 216, 92, 200}, {209, 216, 92, 202}, {209, 216, 92, 205}, {209, 216, 92, 207}, {209, 216, 92, 210}, {209, 216, 92, 212}, {209, 216, 92, 215}, {209, 216, 92, 217}, {209, 216, 92, 220}, {209, 216, 92, 222}, {209, 216, 92, 225}, {209, 216, 92, 227}}},
{Region: "Ukraine", IPs: []net.IP{{45, 9, 238, 23}, {45, 9, 238, 30}, {45, 9, 238, 38}, {45, 9, 238, 47}}},
{Region: "United Arab Emirates", IPs: []net.IP{{45, 9, 249, 243}, {45, 9, 249, 245}, {45, 9, 249, 247}, {45, 9, 250, 99}, {45, 9, 250, 101}, {45, 9, 250, 103}}},
{Region: "Vietnam", IPs: []net.IP{{202, 143, 110, 32}}},
{Region: "italy Rome", IPs: []net.IP{{82, 102, 26, 61}, {82, 102, 26, 114}, {82, 102, 26, 115}, {82, 102, 26, 117}, {87, 101, 94, 210}, {87, 101, 94, 211}, {87, 101, 94, 213}, {87, 101, 94, 215}, {87, 101, 94, 226}, {185, 217, 71, 2}, {185, 217, 71, 3}, {185, 217, 71, 5}, {185, 217, 71, 18}, {185, 217, 71, 50}, {185, 217, 71, 187}, {185, 217, 71, 195}, {185, 217, 71, 197}, {185, 217, 71, 211}, {185, 217, 71, 243}, {185, 217, 71, 251}, {185, 217, 71, 253}, {217, 138, 219, 235}, {217, 138, 219, 237}, {217, 138, 219, 251}}},
}
}

View File

@@ -12,82 +12,84 @@ const (
)
func WindscribeRegionChoices() (choices []string) {
for _, server := range WindscribeServers() {
choices = append(choices, string(server.Region))
servers := WindscribeServers()
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Region
}
return choices
}
func WindscribeServers() []models.WindscribeServer {
return []models.WindscribeServer{
{Region: models.WindscribeRegion("Albania"), IPs: []net.IP{{31, 171, 152, 179}}},
{Region: models.WindscribeRegion("Argentina"), IPs: []net.IP{{167, 250, 6, 121}, {190, 105, 236, 19}, {190, 105, 236, 32}, {190, 105, 236, 50}}},
{Region: models.WindscribeRegion("Australia"), IPs: []net.IP{{43, 245, 160, 35}, {45, 121, 208, 160}, {45, 121, 209, 160}, {45, 121, 210, 208}, {103, 62, 50, 208}, {103, 77, 233, 67}, {103, 77, 234, 211}, {103, 108, 92, 83}, {116, 90, 72, 243}, {116, 206, 228, 67}, {116, 206, 229, 131}}},
{Region: models.WindscribeRegion("Austria"), IPs: []net.IP{{89, 187, 168, 66}, {217, 64, 127, 11}}},
{Region: models.WindscribeRegion("Azerbaijan"), IPs: []net.IP{{85, 132, 61, 123}}},
{Region: models.WindscribeRegion("Belgium"), IPs: []net.IP{{185, 232, 21, 131}, {194, 187, 251, 147}}},
{Region: models.WindscribeRegion("Bosnia"), IPs: []net.IP{{185, 99, 3, 24}}},
{Region: models.WindscribeRegion("Brazil"), IPs: []net.IP{{177, 54, 144, 68}, {177, 67, 80, 59}, {189, 1, 172, 12}}},
{Region: models.WindscribeRegion("Bulgaria"), IPs: []net.IP{{185, 94, 192, 35}}},
{Region: models.WindscribeRegion("Canada East"), IPs: []net.IP{{23, 154, 160, 177}, {66, 70, 148, 80}, {104, 227, 235, 129}, {104, 254, 92, 11}, {104, 254, 92, 91}, {144, 168, 163, 160}, {144, 168, 163, 193}, {184, 75, 212, 91}, {192, 190, 19, 65}, {192, 190, 19, 97}, {198, 8, 85, 195}, {198, 8, 85, 210}, {199, 204, 208, 158}}},
{Region: models.WindscribeRegion("Canada West"), IPs: []net.IP{{104, 218, 61, 1}, {104, 218, 61, 33}, {162, 221, 207, 95}, {208, 78, 41, 1}, {208, 78, 41, 131}, {208, 78, 41, 163}}},
{Region: models.WindscribeRegion("Colombia"), IPs: []net.IP{{138, 121, 203, 203}, {138, 186, 141, 155}}},
{Region: models.WindscribeRegion("Croatia"), IPs: []net.IP{{85, 10, 56, 252}}},
{Region: models.WindscribeRegion("Cyprus"), IPs: []net.IP{{157, 97, 132, 43}}},
{Region: models.WindscribeRegion("Czech Republic"), IPs: []net.IP{{185, 156, 174, 11}, {185, 246, 210, 2}}},
{Region: models.WindscribeRegion("Denmark"), IPs: []net.IP{{134, 90, 149, 147}, {185, 206, 224, 195}}},
{Region: models.WindscribeRegion("Estona"), IPs: []net.IP{{46, 22, 211, 251}, {196, 196, 216, 131}}},
{Region: models.WindscribeRegion("Fake Antarctica"), IPs: []net.IP{{23, 154, 160, 212}, {23, 154, 160, 222}}},
{Region: models.WindscribeRegion("Finland"), IPs: []net.IP{{185, 112, 82, 227}, {194, 34, 133, 82}}},
{Region: models.WindscribeRegion("France"), IPs: []net.IP{{45, 89, 174, 35}, {82, 102, 18, 35}, {84, 17, 42, 2}, {84, 17, 42, 34}, {185, 156, 173, 187}}},
{Region: models.WindscribeRegion("Georgia"), IPs: []net.IP{{188, 93, 90, 83}}},
{Region: models.WindscribeRegion("Germany"), IPs: []net.IP{{45, 87, 212, 51}, {89, 249, 65, 19}, {185, 130, 184, 195}, {195, 181, 170, 66}, {195, 181, 175, 98}, {217, 138, 194, 115}}},
{Region: models.WindscribeRegion("Greece"), IPs: []net.IP{{78, 108, 38, 155}, {185, 226, 64, 111}, {188, 123, 126, 146}}},
{Region: models.WindscribeRegion("Hong Kong"), IPs: []net.IP{{84, 17, 57, 114}, {103, 10, 197, 99}}},
{Region: models.WindscribeRegion("Hungary"), IPs: []net.IP{{185, 104, 187, 43}}},
{Region: models.WindscribeRegion("Iceland"), IPs: []net.IP{{82, 221, 139, 38}, {185, 165, 170, 2}}},
{Region: models.WindscribeRegion("India"), IPs: []net.IP{{103, 205, 140, 227}, {169, 38, 68, 188}, {169, 38, 72, 12}, {169, 38, 72, 14}}},
{Region: models.WindscribeRegion("Indonesia"), IPs: []net.IP{{45, 127, 134, 91}}},
{Region: models.WindscribeRegion("Ireland"), IPs: []net.IP{{185, 24, 232, 146}, {185, 104, 219, 2}}},
{Region: models.WindscribeRegion("Israel"), IPs: []net.IP{{160, 116, 0, 27}, {185, 191, 205, 139}}},
{Region: models.WindscribeRegion("Italy"), IPs: []net.IP{{37, 120, 135, 83}, {37, 120, 207, 19}, {84, 17, 59, 66}, {87, 101, 94, 195}, {89, 40, 182, 3}}},
{Region: models.WindscribeRegion("Japan"), IPs: []net.IP{{89, 187, 161, 114}, {193, 148, 16, 243}}},
{Region: models.WindscribeRegion("Latvia"), IPs: []net.IP{{85, 254, 72, 23}}},
{Region: models.WindscribeRegion("Lithuania"), IPs: []net.IP{{85, 206, 163, 225}}},
{Region: models.WindscribeRegion("Macedonia"), IPs: []net.IP{{185, 225, 28, 51}}},
{Region: models.WindscribeRegion("Malaysia"), IPs: []net.IP{{103, 106, 250, 31}, {103, 212, 69, 232}}},
{Region: models.WindscribeRegion("Mexico"), IPs: []net.IP{{143, 255, 57, 67}, {190, 103, 179, 211}, {190, 103, 179, 217}, {201, 131, 125, 107}}},
{Region: models.WindscribeRegion("Moldova"), IPs: []net.IP{{178, 175, 144, 123}}},
{Region: models.WindscribeRegion("Netherlands"), IPs: []net.IP{{37, 120, 192, 19}, {46, 166, 143, 98}, {72, 11, 157, 35}, {72, 11, 157, 67}, {84, 17, 46, 2}, {185, 212, 171, 131}, {185, 253, 96, 3}}},
{Region: models.WindscribeRegion("New Zealand"), IPs: []net.IP{{103, 62, 49, 113}, {103, 108, 94, 163}}},
{Region: models.WindscribeRegion("Norway"), IPs: []net.IP{{37, 120, 203, 67}, {185, 206, 225, 131}}},
{Region: models.WindscribeRegion("Philippines"), IPs: []net.IP{{103, 103, 0, 118}}},
{Region: models.WindscribeRegion("Poland"), IPs: []net.IP{{5, 133, 11, 116}, {84, 17, 55, 98}, {185, 244, 214, 35}}},
{Region: models.WindscribeRegion("Portugal"), IPs: []net.IP{{94, 46, 13, 215}, {185, 15, 21, 66}}},
{Region: models.WindscribeRegion("Romania"), IPs: []net.IP{{89, 46, 103, 147}, {91, 207, 102, 147}}},
{Region: models.WindscribeRegion("Russia"), IPs: []net.IP{{94, 242, 62, 19}, {94, 242, 62, 67}, {95, 213, 193, 195}, {95, 213, 193, 227}, {185, 22, 175, 132}, {188, 124, 42, 99}, {188, 124, 42, 115}}},
{Region: models.WindscribeRegion("Serbia"), IPs: []net.IP{{141, 98, 103, 19}}},
{Region: models.WindscribeRegion("Singapore"), IPs: []net.IP{{82, 102, 25, 131}, {89, 187, 162, 130}, {103, 62, 48, 224}, {185, 200, 117, 163}}},
{Region: models.WindscribeRegion("Slovakia"), IPs: []net.IP{{185, 245, 85, 3}}},
{Region: models.WindscribeRegion("Slovenia"), IPs: []net.IP{{146, 247, 24, 207}}},
{Region: models.WindscribeRegion("South Africa"), IPs: []net.IP{{129, 232, 167, 211}, {165, 73, 248, 91}, {197, 242, 156, 53}, {197, 242, 157, 235}}},
{Region: models.WindscribeRegion("South Korea"), IPs: []net.IP{{103, 212, 223, 3}, {218, 232, 76, 179}}},
{Region: models.WindscribeRegion("Spain"), IPs: []net.IP{{37, 120, 142, 227}, {89, 238, 178, 43}, {185, 253, 99, 131}, {217, 138, 218, 99}}},
{Region: models.WindscribeRegion("Sweden"), IPs: []net.IP{{31, 13, 191, 67}, {195, 181, 166, 129}}},
{Region: models.WindscribeRegion("Switzerland"), IPs: []net.IP{{31, 7, 57, 242}, {37, 120, 213, 163}, {84, 17, 53, 2}, {89, 187, 165, 98}, {185, 156, 175, 179}}},
{Region: models.WindscribeRegion("Thailand"), IPs: []net.IP{{27, 254, 130, 221}}},
{Region: models.WindscribeRegion("Tunisia"), IPs: []net.IP{{41, 231, 5, 23}}},
{Region: models.WindscribeRegion("Turkey"), IPs: []net.IP{{45, 123, 118, 156}, {45, 123, 119, 11}, {79, 98, 131, 43}, {176, 53, 113, 163}, {185, 125, 33, 227}}},
{Region: models.WindscribeRegion("Ukraine"), IPs: []net.IP{{45, 141, 156, 11}, {45, 141, 156, 50}}},
{Region: models.WindscribeRegion("United Arab Emirates"), IPs: []net.IP{{45, 9, 249, 43}}},
{Region: models.WindscribeRegion("United kingdom"), IPs: []net.IP{{2, 58, 29, 17}, {81, 92, 207, 69}, {84, 17, 50, 130}, {89, 238, 131, 131}, {89, 238, 135, 133}, {89, 238, 150, 229}, {185, 212, 168, 133}, {212, 102, 63, 32}, {212, 102, 63, 62}, {217, 138, 254, 51}}},
{Region: models.WindscribeRegion("US Central"), IPs: []net.IP{{67, 212, 238, 196}, {69, 12, 94, 67}, {104, 129, 18, 3}, {104, 223, 92, 163}, {107, 150, 31, 67}, {107, 150, 31, 131}, {107, 161, 86, 131}, {107, 182, 234, 240}, {161, 129, 70, 195}, {162, 222, 198, 67}, {172, 241, 26, 78}, {172, 241, 131, 129}, {198, 12, 76, 211}, {198, 54, 128, 116}, {198, 55, 125, 195}, {199, 115, 96, 83}, {204, 44, 112, 131}, {206, 217, 139, 19}, {206, 217, 143, 131}}},
{Region: models.WindscribeRegion("Us East"), IPs: []net.IP{{23, 82, 136, 93}, {23, 83, 91, 170}, {23, 105, 170, 139}, {23, 226, 141, 195}, {38, 132, 118, 227}, {67, 21, 32, 145}, {68, 235, 35, 12}, {68, 235, 50, 227}, {86, 106, 87, 83}, {104, 168, 34, 147}, {104, 223, 127, 195}, {107, 150, 29, 131}, {142, 234, 200, 176}, {156, 96, 59, 102}, {162, 222, 195, 67}, {167, 160, 167, 195}, {167, 160, 172, 3}, {173, 44, 36, 67}, {173, 208, 45, 33}, {185, 232, 22, 195}, {198, 12, 64, 35}, {198, 147, 22, 225}, {206, 217, 128, 3}, {206, 217, 129, 227}, {217, 138, 255, 179}}},
{Region: models.WindscribeRegion("US West"), IPs: []net.IP{{23, 83, 130, 166}, {23, 83, 131, 187}, {23, 94, 74, 99}, {37, 120, 147, 163}, {64, 120, 2, 174}, {66, 115, 176, 3}, {82, 102, 30, 67}, {89, 187, 185, 34}, {89, 187, 187, 98}, {104, 129, 3, 67}, {104, 129, 3, 163}, {104, 129, 56, 67}, {104, 129, 56, 131}, {104, 152, 222, 33}, {167, 88, 60, 227}, {167, 88, 60, 243}, {172, 241, 214, 202}, {172, 241, 250, 131}, {172, 255, 125, 141}, {185, 236, 200, 35}, {192, 3, 20, 51}, {198, 12, 116, 195}, {198, 23, 242, 147}, {209, 58, 129, 121}, {216, 45, 53, 131}, {217, 138, 217, 51}, {217, 138, 217, 211}}},
{Region: models.WindscribeRegion("Vietnam"), IPs: []net.IP{{103, 9, 76, 197}, {103, 9, 79, 186}, {103, 9, 79, 219}}},
{Region: models.WindscribeRegion("Windflix CA"), IPs: []net.IP{{104, 218, 60, 111}, {104, 254, 92, 99}}},
{Region: models.WindscribeRegion("Windflix JP"), IPs: []net.IP{{5, 181, 235, 67}}},
{Region: models.WindscribeRegion("Windflix UK"), IPs: []net.IP{{45, 9, 248, 3}, {81, 92, 200, 85}, {89, 47, 62, 83}}},
{Region: models.WindscribeRegion("Windflix US"), IPs: []net.IP{{23, 105, 170, 130}, {23, 105, 170, 151}, {185, 232, 22, 131}, {204, 44, 112, 67}, {217, 138, 206, 211}}},
{Region: "Albania", IPs: []net.IP{{31, 171, 152, 179}}},
{Region: "Argentina", IPs: []net.IP{{167, 250, 6, 121}, {190, 105, 236, 19}, {190, 105, 236, 32}, {190, 105, 236, 50}}},
{Region: "Australia", IPs: []net.IP{{43, 245, 160, 35}, {45, 121, 208, 160}, {45, 121, 209, 160}, {45, 121, 210, 208}, {103, 62, 50, 208}, {103, 77, 233, 67}, {103, 77, 234, 211}, {103, 108, 92, 83}, {116, 90, 72, 243}, {116, 206, 228, 67}, {116, 206, 229, 131}}},
{Region: "Austria", IPs: []net.IP{{89, 187, 168, 66}, {217, 64, 127, 11}}},
{Region: "Azerbaijan", IPs: []net.IP{{85, 132, 61, 123}}},
{Region: "Belgium", IPs: []net.IP{{185, 232, 21, 131}, {194, 187, 251, 147}}},
{Region: "Bosnia", IPs: []net.IP{{185, 99, 3, 24}}},
{Region: "Brazil", IPs: []net.IP{{177, 54, 144, 68}, {177, 67, 80, 59}, {189, 1, 172, 12}}},
{Region: "Bulgaria", IPs: []net.IP{{185, 94, 192, 35}}},
{Region: "Canada East", IPs: []net.IP{{23, 154, 160, 177}, {66, 70, 148, 80}, {104, 227, 235, 129}, {104, 254, 92, 11}, {104, 254, 92, 91}, {144, 168, 163, 160}, {144, 168, 163, 193}, {184, 75, 212, 91}, {192, 190, 19, 65}, {192, 190, 19, 97}, {198, 8, 85, 195}, {198, 8, 85, 210}, {199, 204, 208, 158}}},
{Region: "Canada West", IPs: []net.IP{{104, 218, 61, 1}, {104, 218, 61, 33}, {162, 221, 207, 95}, {208, 78, 41, 1}, {208, 78, 41, 131}, {208, 78, 41, 163}}},
{Region: "Colombia", IPs: []net.IP{{138, 121, 203, 203}, {138, 186, 141, 155}}},
{Region: "Croatia", IPs: []net.IP{{85, 10, 56, 252}}},
{Region: "Cyprus", IPs: []net.IP{{157, 97, 132, 43}}},
{Region: "Czech Republic", IPs: []net.IP{{185, 156, 174, 11}, {185, 246, 210, 2}}},
{Region: "Denmark", IPs: []net.IP{{134, 90, 149, 147}, {185, 206, 224, 195}}},
{Region: "Estona", IPs: []net.IP{{46, 22, 211, 251}, {196, 196, 216, 131}}},
{Region: "Fake Antarctica", IPs: []net.IP{{23, 154, 160, 212}, {23, 154, 160, 222}}},
{Region: "Finland", IPs: []net.IP{{185, 112, 82, 227}, {194, 34, 133, 82}}},
{Region: "France", IPs: []net.IP{{45, 89, 174, 35}, {82, 102, 18, 35}, {84, 17, 42, 2}, {84, 17, 42, 34}, {185, 156, 173, 187}}},
{Region: "Georgia", IPs: []net.IP{{188, 93, 90, 83}}},
{Region: "Germany", IPs: []net.IP{{45, 87, 212, 51}, {89, 249, 65, 19}, {185, 130, 184, 195}, {195, 181, 170, 66}, {195, 181, 175, 98}, {217, 138, 194, 115}}},
{Region: "Greece", IPs: []net.IP{{78, 108, 38, 155}, {185, 226, 64, 111}, {188, 123, 126, 146}}},
{Region: "Hong Kong", IPs: []net.IP{{84, 17, 57, 114}, {103, 10, 197, 99}}},
{Region: "Hungary", IPs: []net.IP{{185, 104, 187, 43}}},
{Region: "Iceland", IPs: []net.IP{{82, 221, 139, 38}, {185, 165, 170, 2}}},
{Region: "India", IPs: []net.IP{{103, 205, 140, 227}, {169, 38, 68, 188}, {169, 38, 72, 12}, {169, 38, 72, 14}}},
{Region: "Indonesia", IPs: []net.IP{{45, 127, 134, 91}}},
{Region: "Ireland", IPs: []net.IP{{185, 24, 232, 146}, {185, 104, 219, 2}}},
{Region: "Israel", IPs: []net.IP{{160, 116, 0, 27}, {185, 191, 205, 139}}},
{Region: "Italy", IPs: []net.IP{{37, 120, 135, 83}, {37, 120, 207, 19}, {84, 17, 59, 66}, {87, 101, 94, 195}, {89, 40, 182, 3}}},
{Region: "Japan", IPs: []net.IP{{89, 187, 161, 114}, {193, 148, 16, 243}}},
{Region: "Latvia", IPs: []net.IP{{85, 254, 72, 23}}},
{Region: "Lithuania", IPs: []net.IP{{85, 206, 163, 225}}},
{Region: "Macedonia", IPs: []net.IP{{185, 225, 28, 51}}},
{Region: "Malaysia", IPs: []net.IP{{103, 106, 250, 31}, {103, 212, 69, 232}}},
{Region: "Mexico", IPs: []net.IP{{143, 255, 57, 67}, {190, 103, 179, 211}, {190, 103, 179, 217}, {201, 131, 125, 107}}},
{Region: "Moldova", IPs: []net.IP{{178, 175, 144, 123}}},
{Region: "Netherlands", IPs: []net.IP{{37, 120, 192, 19}, {46, 166, 143, 98}, {72, 11, 157, 35}, {72, 11, 157, 67}, {84, 17, 46, 2}, {185, 212, 171, 131}, {185, 253, 96, 3}}},
{Region: "New Zealand", IPs: []net.IP{{103, 62, 49, 113}, {103, 108, 94, 163}}},
{Region: "Norway", IPs: []net.IP{{37, 120, 203, 67}, {185, 206, 225, 131}}},
{Region: "Philippines", IPs: []net.IP{{103, 103, 0, 118}}},
{Region: "Poland", IPs: []net.IP{{5, 133, 11, 116}, {84, 17, 55, 98}, {185, 244, 214, 35}}},
{Region: "Portugal", IPs: []net.IP{{94, 46, 13, 215}, {185, 15, 21, 66}}},
{Region: "Romania", IPs: []net.IP{{89, 46, 103, 147}, {91, 207, 102, 147}}},
{Region: "Russia", IPs: []net.IP{{94, 242, 62, 19}, {94, 242, 62, 67}, {95, 213, 193, 195}, {95, 213, 193, 227}, {185, 22, 175, 132}, {188, 124, 42, 99}, {188, 124, 42, 115}}},
{Region: "Serbia", IPs: []net.IP{{141, 98, 103, 19}}},
{Region: "Singapore", IPs: []net.IP{{82, 102, 25, 131}, {89, 187, 162, 130}, {103, 62, 48, 224}, {185, 200, 117, 163}}},
{Region: "Slovakia", IPs: []net.IP{{185, 245, 85, 3}}},
{Region: "Slovenia", IPs: []net.IP{{146, 247, 24, 207}}},
{Region: "South Africa", IPs: []net.IP{{129, 232, 167, 211}, {165, 73, 248, 91}, {197, 242, 156, 53}, {197, 242, 157, 235}}},
{Region: "South Korea", IPs: []net.IP{{103, 212, 223, 3}, {218, 232, 76, 179}}},
{Region: "Spain", IPs: []net.IP{{37, 120, 142, 227}, {89, 238, 178, 43}, {185, 253, 99, 131}, {217, 138, 218, 99}}},
{Region: "Sweden", IPs: []net.IP{{31, 13, 191, 67}, {195, 181, 166, 129}}},
{Region: "Switzerland", IPs: []net.IP{{31, 7, 57, 242}, {37, 120, 213, 163}, {84, 17, 53, 2}, {89, 187, 165, 98}, {185, 156, 175, 179}}},
{Region: "Thailand", IPs: []net.IP{{27, 254, 130, 221}}},
{Region: "Tunisia", IPs: []net.IP{{41, 231, 5, 23}}},
{Region: "Turkey", IPs: []net.IP{{45, 123, 118, 156}, {45, 123, 119, 11}, {79, 98, 131, 43}, {176, 53, 113, 163}, {185, 125, 33, 227}}},
{Region: "Ukraine", IPs: []net.IP{{45, 141, 156, 11}, {45, 141, 156, 50}}},
{Region: "United Arab Emirates", IPs: []net.IP{{45, 9, 249, 43}}},
{Region: "United kingdom", IPs: []net.IP{{2, 58, 29, 17}, {81, 92, 207, 69}, {84, 17, 50, 130}, {89, 238, 131, 131}, {89, 238, 135, 133}, {89, 238, 150, 229}, {185, 212, 168, 133}, {212, 102, 63, 32}, {212, 102, 63, 62}, {217, 138, 254, 51}}},
{Region: "US Central", IPs: []net.IP{{67, 212, 238, 196}, {69, 12, 94, 67}, {104, 129, 18, 3}, {104, 223, 92, 163}, {107, 150, 31, 67}, {107, 150, 31, 131}, {107, 161, 86, 131}, {107, 182, 234, 240}, {161, 129, 70, 195}, {162, 222, 198, 67}, {172, 241, 26, 78}, {172, 241, 131, 129}, {198, 12, 76, 211}, {198, 54, 128, 116}, {198, 55, 125, 195}, {199, 115, 96, 83}, {204, 44, 112, 131}, {206, 217, 139, 19}, {206, 217, 143, 131}}},
{Region: "Us East", IPs: []net.IP{{23, 82, 136, 93}, {23, 83, 91, 170}, {23, 105, 170, 139}, {23, 226, 141, 195}, {38, 132, 118, 227}, {67, 21, 32, 145}, {68, 235, 35, 12}, {68, 235, 50, 227}, {86, 106, 87, 83}, {104, 168, 34, 147}, {104, 223, 127, 195}, {107, 150, 29, 131}, {142, 234, 200, 176}, {156, 96, 59, 102}, {162, 222, 195, 67}, {167, 160, 167, 195}, {167, 160, 172, 3}, {173, 44, 36, 67}, {173, 208, 45, 33}, {185, 232, 22, 195}, {198, 12, 64, 35}, {198, 147, 22, 225}, {206, 217, 128, 3}, {206, 217, 129, 227}, {217, 138, 255, 179}}},
{Region: "US West", IPs: []net.IP{{23, 83, 130, 166}, {23, 83, 131, 187}, {23, 94, 74, 99}, {37, 120, 147, 163}, {64, 120, 2, 174}, {66, 115, 176, 3}, {82, 102, 30, 67}, {89, 187, 185, 34}, {89, 187, 187, 98}, {104, 129, 3, 67}, {104, 129, 3, 163}, {104, 129, 56, 67}, {104, 129, 56, 131}, {104, 152, 222, 33}, {167, 88, 60, 227}, {167, 88, 60, 243}, {172, 241, 214, 202}, {172, 241, 250, 131}, {172, 255, 125, 141}, {185, 236, 200, 35}, {192, 3, 20, 51}, {198, 12, 116, 195}, {198, 23, 242, 147}, {209, 58, 129, 121}, {216, 45, 53, 131}, {217, 138, 217, 51}, {217, 138, 217, 211}}},
{Region: "Vietnam", IPs: []net.IP{{103, 9, 76, 197}, {103, 9, 79, 186}, {103, 9, 79, 219}}},
{Region: "Windflix CA", IPs: []net.IP{{104, 218, 60, 111}, {104, 254, 92, 99}}},
{Region: "Windflix JP", IPs: []net.IP{{5, 181, 235, 67}}},
{Region: "Windflix UK", IPs: []net.IP{{45, 9, 248, 3}, {81, 92, 200, 85}, {89, 47, 62, 83}}},
{Region: "Windflix US", IPs: []net.IP{{23, 105, 170, 130}, {23, 105, 170, 151}, {185, 232, 22, 131}, {204, 44, 112, 67}, {217, 138, 206, 211}}},
}
}

View File

@@ -1,23 +0,0 @@
package cyberghost
import (
"net"
"github.com/qdm12/golibs/files"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// Configurator contains methods to read and modify the openvpn configuration to connect as a client
type Configurator interface {
GetOpenVPNConnections(group models.CyberghostGroup, region models.CyberghostRegion, protocol models.NetworkProtocol, targetIP net.IP) (connections []models.OpenVPNConnection, err error)
BuildConf(connections []models.OpenVPNConnection, clientKey string, verbosity, uid, gid int, root bool, cipher, auth string) (err error)
}
type configurator struct {
fileManager files.FileManager
}
// NewConfigurator returns a new Configurator object
func NewConfigurator(fileManager files.FileManager) Configurator {
return &configurator{fileManager: fileManager}
}

View File

@@ -7,24 +7,6 @@ type (
DNSProvider string
// DNSHost is the DNS host to use for TLS validation
DNSHost string
// PIAEncryption defines the level of encryption for communication with PIA servers
PIAEncryption string
// PIARegion is used to define the list of regions available for PIA
PIARegion string
// MullvadCountry is used as the country for a Mullvad server
MullvadCountry string
// MullvadCity is used as the city for a Mullvad server
MullvadCity string
// MullvadProvider is used as the Internet service provider for a Mullvad server
MullvadProvider string
// WindscribeCity is used as the region for a Windscribe server
WindscribeRegion string
// SurfsharkRegion is used as the region for a Surfshark server
SurfsharkRegion string
// CyberghostRegion is the country name for a Cyberghost server
CyberghostRegion string
// CyberghostGroup is the server group for a Cyberghost server
CyberghostGroup string
// URL is an HTTP(s) URL address
URL string
// Filepath is a local filesytem file path
@@ -32,7 +14,7 @@ type (
// TinyProxyLogLevel is the log level for TinyProxy
TinyProxyLogLevel string
// VPNProvider is the name of the VPN provider to be used
VPNProvider string
VPNProvider string // TODO
// NetworkProtocol contains the network protocol to be used to communicate with the VPN servers
NetworkProtocol string
)

View File

@@ -1,9 +0,0 @@
package models
import "net"
type CyberghostServer struct {
Region CyberghostRegion
Group CyberghostGroup
IPs []net.IP
}

View File

@@ -1,12 +0,0 @@
package models
import "net"
type MullvadServer struct {
IPs []net.IP
Country MullvadCountry
City MullvadCity
Provider MullvadProvider
Owned bool
DefaultPort uint16
}

View File

@@ -1,8 +0,0 @@
package models
import "net"
type PIAServer struct {
IPs []net.IP
Region PIARegion
}

View File

@@ -0,0 +1,100 @@
package models
import (
"fmt"
"net"
"strings"
)
// ProviderSettings contains settings specific to a VPN provider
type ProviderSettings struct {
Name VPNProvider
ServerSelection ServerSelection
ExtraConfigOptions ExtraConfigOptions
PortForwarding PortForwarding
}
type ServerSelection struct {
// Common
Protocol NetworkProtocol
TargetIP net.IP
// Cyberghost, PIA, Surfshark, Windscribe
Region string
// Cyberghost
Group string
// Mullvad
Country string
City string
ISP string
Owned bool
// Mullvad, Windscribe
CustomPort uint16
// PIA
EncryptionPreset string
}
type ExtraConfigOptions struct {
ClientKey string // Cyberghost
EncryptionPreset string // PIA
}
// PortForwarding contains settings for port forwarding
type PortForwarding struct {
Enabled bool
Filepath Filepath
}
func (p *PortForwarding) String() string {
if p.Enabled {
return fmt.Sprintf("on, saved in %s", p.Filepath)
}
return "off"
}
func (p *ProviderSettings) String() string {
settingsList := []string{
fmt.Sprintf("%s settings:", strings.Title(string(p.Name))),
"Network protocol: " + string(p.ServerSelection.Protocol),
}
switch strings.ToLower(string(p.Name)) {
case "private internet access":
settingsList = []string{
"Region: " + p.ServerSelection.Region,
"Encryption preset: " + p.ExtraConfigOptions.EncryptionPreset,
"Port forwarding: " + p.PortForwarding.String(),
}
case "mullvad":
settingsList = []string{
"Country: " + p.ServerSelection.Country,
"City: " + p.ServerSelection.City,
"ISP: " + p.ServerSelection.ISP,
"Custom port: " + string(p.ServerSelection.CustomPort),
}
case "windscribe":
settingsList = []string{
"Region: " + p.ServerSelection.Region,
"Custom port: " + string(p.ServerSelection.CustomPort),
}
case "surfshark":
settingsList = []string{
"Region: " + p.ServerSelection.Region,
}
case "cyberghost":
settingsList = []string{
"ClientKey: [redacted]",
"Group: " + p.ServerSelection.Group,
"Region: " + p.ServerSelection.Region,
}
}
if p.ServerSelection.TargetIP != nil {
settingsList = append(settingsList,
"Target IP address: "+string(p.ServerSelection.TargetIP),
)
}
return strings.Join(settingsList, "\n |--")
}

View File

@@ -0,0 +1,33 @@
package models
import "net"
type PIAServer struct {
IPs []net.IP
Region string
}
type MullvadServer struct {
IPs []net.IP
Country string
City string
ISP string
Owned bool
DefaultPort uint16
}
type WindscribeServer struct {
Region string
IPs []net.IP
}
type SurfsharkServer struct {
Region string
IPs []net.IP
}
type CyberghostServer struct {
Region string
Group string
IPs []net.IP
}

View File

@@ -1,8 +0,0 @@
package models
import "net"
type SurfsharkServer struct {
Region SurfsharkRegion
IPs []net.IP
}

View File

@@ -1,8 +0,0 @@
package models
import "net"
type WindscribeServer struct {
Region WindscribeRegion
IPs []net.IP
}

View File

@@ -1,28 +0,0 @@
package mullvad
import (
"net"
"github.com/qdm12/golibs/files"
"github.com/qdm12/golibs/logging"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// Configurator contains methods to read and modify the openvpn configuration to connect as a client
type Configurator interface {
GetOpenVPNConnections(country models.MullvadCountry, city models.MullvadCity, provider models.MullvadProvider, protocol models.NetworkProtocol, customPort uint16, targetIP net.IP) (connections []models.OpenVPNConnection, err error)
BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher string) (err error)
}
type configurator struct {
fileManager files.FileManager
logger logging.Logger
}
// NewConfigurator returns a new Configurator object
func NewConfigurator(fileManager files.FileManager, logger logging.Logger) Configurator {
return &configurator{
fileManager: fileManager,
logger: logger.WithPrefix("Mullvad configurator: "),
}
}

View File

@@ -1,25 +1,22 @@
package params
import (
"strings"
libparams "github.com/qdm12/golibs/params"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// GetCyberghostGroup obtains the server group for the Cyberghost server from the
// environment variable CYBERGHOST_GROUP
func (p *reader) GetCyberghostGroup() (region models.CyberghostGroup, err error) {
func (p *reader) GetCyberghostGroup() (group string, err error) {
s, err := p.envParams.GetValueIfInside("CYBERGHOST_GROUP", constants.CyberghostGroupChoices())
return models.CyberghostGroup(strings.ToLower(s)), err
return s, err
}
// GetCyberghostRegion obtains the country name for the Cyberghost server from the
// environment variable REGION
func (p *reader) GetCyberghostRegion() (region models.CyberghostRegion, err error) {
func (p *reader) GetCyberghostRegion() (region string, err error) {
s, err := p.envParams.GetValueIfInside("REGION", constants.CyberghostRegionChoices())
return models.CyberghostRegion(strings.ToLower(s)), err
return s, err
}
// GetCyberghostClientKey obtains the one line client key to use for openvpn from the

View File

@@ -1,35 +1,29 @@
package params
import (
"strings"
libparams "github.com/qdm12/golibs/params"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// GetMullvadCountry obtains the country for the Mullvad server from the
// environment variable COUNTRY
func (r *reader) GetMullvadCountry() (country models.MullvadCountry, err error) {
func (r *reader) GetMullvadCountry() (country string, err error) {
choices := append(constants.MullvadCountryChoices(), "")
s, err := r.envParams.GetValueIfInside("COUNTRY", choices)
return models.MullvadCountry(strings.ToLower(s)), err
return r.envParams.GetValueIfInside("COUNTRY", choices)
}
// GetMullvadCity obtains the city for the Mullvad server from the
// environment variable CITY
func (r *reader) GetMullvadCity() (country models.MullvadCity, err error) {
func (r *reader) GetMullvadCity() (country string, err error) {
choices := append(constants.MullvadCityChoices(), "")
s, err := r.envParams.GetValueIfInside("CITY", choices)
return models.MullvadCity(strings.ToLower(s)), err
return r.envParams.GetValueIfInside("CITY", choices)
}
// GetMullvadISP obtains the ISP for the Mullvad server from the
// environment variable ISP
func (r *reader) GetMullvadISP() (country models.MullvadProvider, err error) {
choices := append(constants.MullvadProviderChoices(), "")
s, err := r.envParams.GetValueIfInside("ISP", choices)
return models.MullvadProvider(strings.ToLower(s)), err
func (r *reader) GetMullvadISP() (isp string, err error) {
choices := append(constants.MullvadISPChoices(), "")
return r.envParams.GetValueIfInside("ISP", choices)
}
// GetMullvadPort obtains the port to reach the Mullvad server on from the

View File

@@ -3,7 +3,6 @@ package params
import (
"fmt"
"net"
"strings"
libparams "github.com/qdm12/golibs/params"
"github.com/qdm12/private-internet-access-docker/internal/models"
@@ -70,13 +69,11 @@ func (r *reader) GetTargetIP() (ip net.IP, err error) {
// GetOpenVPNCipher obtains a custom cipher to use with OpenVPN
// from the environment variable OPENVPN_CIPHER
func (r *reader) GetOpenVPNCipher() (cipher string, err error) {
cipher, err = r.envParams.GetEnv("OPENVPN_CIPHER")
return strings.ToLower(cipher), err
return r.envParams.GetEnv("OPENVPN_CIPHER")
}
// GetOpenVPNAuth obtains a custom auth algorithm to use with OpenVPN
// from the environment variable OPENVPN_AUTH
func (r *reader) GetOpenVPNAuth() (auth string, err error) {
auth, err = r.envParams.GetEnv("OPENVPN_AUTH")
return strings.ToLower(auth), err
return r.envParams.GetEnv("OPENVPN_AUTH")
}

View File

@@ -53,25 +53,25 @@ type Reader interface {
// PIA getters
GetPortForwarding() (activated bool, err error)
GetPortForwardingStatusFilepath() (filepath models.Filepath, err error)
GetPIAEncryption() (models.PIAEncryption, error)
GetPIARegion() (models.PIARegion, error)
GetPIAEncryptionPreset() (preset string, err error)
GetPIARegion() (region string, err error)
// Mullvad getters
GetMullvadCountry() (country models.MullvadCountry, err error)
GetMullvadCity() (country models.MullvadCity, err error)
GetMullvadISP() (country models.MullvadProvider, err error)
GetMullvadCountry() (country string, err error)
GetMullvadCity() (country string, err error)
GetMullvadISP() (country string, err error)
GetMullvadPort() (port uint16, err error)
// Windscribe getters
GetWindscribeRegion() (country models.WindscribeRegion, err error)
GetWindscribeRegion() (country string, err error)
GetWindscribePort(protocol models.NetworkProtocol) (port uint16, err error)
// Surfshark getters
GetSurfsharkRegion() (country models.SurfsharkRegion, err error)
GetSurfsharkRegion() (country string, err error)
// Cyberghost getters
GetCyberghostGroup() (region models.CyberghostGroup, err error)
GetCyberghostRegion() (region models.CyberghostRegion, err error)
GetCyberghostGroup() (group string, err error)
GetCyberghostRegion() (region string, err error)
GetCyberghostClientKey() (clientKey string, err error)
// Shadowsocks getters

View File

@@ -32,29 +32,37 @@ func (r *reader) GetPortForwardingStatusFilepath() (filepath models.Filepath, er
return models.Filepath(filepathStr), err
}
// GetPIAEncryption obtains the encryption level for the PIA connection
// GetPIAEncryptionPreset obtains the encryption level for the PIA connection
// from the environment variable PIA_ENCRYPTION, and using ENCRYPTION for
// retro compatibility
func (r *reader) GetPIAEncryption() (models.PIAEncryption, error) {
func (r *reader) GetPIAEncryptionPreset() (preset string, err error) {
// Retro-compatibility
s, err := r.envParams.GetValueIfInside("ENCRYPTION", []string{"normal", "strong", ""})
s, err := r.envParams.GetValueIfInside("ENCRYPTION", []string{
constants.PIAEncryptionPresetNormal,
constants.PIAEncryptionPresetStrong,
""})
if err != nil {
return "", err
} else if len(s) != 0 {
r.logger.Warn("You are using the old environment variable ENCRYPTION, please consider changing it to PIA_ENCRYPTION")
return models.PIAEncryption(s), nil
return s, nil
}
s, err = r.envParams.GetValueIfInside("PIA_ENCRYPTION", []string{"normal", "strong"}, libparams.Default("strong"))
return models.PIAEncryption(s), err
return r.envParams.GetValueIfInside(
"PIA_ENCRYPTION",
[]string{
constants.PIAEncryptionPresetNormal,
constants.PIAEncryptionPresetStrong,
},
libparams.Default(constants.PIAEncryptionPresetStrong))
}
// GetPIARegion obtains the region for the PIA server from the
// environment variable REGION
func (r *reader) GetPIARegion() (region models.PIARegion, err error) {
func (r *reader) GetPIARegion() (region string, err error) {
choices := append(constants.PIAGeoChoices(), "")
s, err := r.envParams.GetValueIfInside("REGION", choices)
if len(s) == 0 { // Suggestion by @rorph https://github.com/rorph
s = choices[rand.Int()%len(choices)] //nolint:gosec
}
return models.PIARegion(s), err
return s, err
}

View File

@@ -1,15 +1,12 @@
package params
import (
"strings"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// GetSurfsharkRegion obtains the region for the Surfshark server from the
// environment variable REGION
func (r *reader) GetSurfsharkRegion() (region models.SurfsharkRegion, err error) {
func (r *reader) GetSurfsharkRegion() (region string, err error) {
s, err := r.envParams.GetValueIfInside("REGION", constants.SurfsharkRegionChoices())
return models.SurfsharkRegion(strings.ToLower(s)), err
return s, err
}

View File

@@ -2,7 +2,6 @@ package params
import (
"fmt"
"strings"
libparams "github.com/qdm12/golibs/params"
"github.com/qdm12/private-internet-access-docker/internal/constants"
@@ -11,9 +10,9 @@ import (
// GetWindscribeRegion obtains the region for the Windscribe server from the
// environment variable REGION
func (r *reader) GetWindscribeRegion() (region models.WindscribeRegion, err error) {
func (r *reader) GetWindscribeRegion() (region string, err error) {
s, err := r.envParams.GetValueIfInside("REGION", constants.WindscribeRegionChoices())
return models.WindscribeRegion(strings.ToLower(s)), err
return s, err
}
// GetMullvadPort obtains the port to reach the Mullvad server on from the

View File

@@ -1,135 +0,0 @@
package pia
import (
"fmt"
"net"
"strings"
"github.com/qdm12/golibs/files"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
func (c *configurator) GetOpenVPNConnections(region models.PIARegion, protocol models.NetworkProtocol, encryption models.PIAEncryption, targetIP net.IP) (connections []models.OpenVPNConnection, err error) {
var IPs []net.IP
for _, server := range constants.PIAServers() {
if strings.EqualFold(string(server.Region), string(region)) {
IPs = server.IPs
}
}
if len(IPs) == 0 {
return nil, fmt.Errorf("no IP found for region %q", region)
}
if targetIP != nil {
found := false
for i := range IPs {
if IPs[i].Equal(targetIP) {
found = true
break
}
}
if !found {
return nil, fmt.Errorf("target IP address %q not found in IP addresses", targetIP)
}
IPs = []net.IP{targetIP}
}
var port uint16
switch protocol {
case constants.TCP:
switch encryption {
case constants.PIAEncryptionNormal:
port = 502
case constants.PIAEncryptionStrong:
port = 501
}
case constants.UDP:
switch encryption {
case constants.PIAEncryptionNormal:
port = 1198
case constants.PIAEncryptionStrong:
port = 1197
}
}
if port == 0 {
return nil, fmt.Errorf("combination of protocol %q and encryption %q does not yield any port number", protocol, encryption)
}
for _, IP := range IPs {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: protocol})
}
return connections, nil
}
func (c *configurator) BuildConf(connections []models.OpenVPNConnection, encryption models.PIAEncryption, verbosity, uid, gid int, root bool, cipher, auth string) (err error) {
var X509CRL, certificate string
if encryption == constants.PIAEncryptionNormal {
if len(cipher) == 0 {
cipher = "aes-128-cbc"
}
if len(auth) == 0 {
auth = "sha1"
}
X509CRL = constants.PiaX509CRLNormal
certificate = constants.PIACertificateNormal
} else { // strong encryption
if len(cipher) == 0 {
cipher = "aes-256-cbc"
}
if len(auth) == 0 {
auth = "sha256"
}
X509CRL = constants.PiaX509CRLStrong
certificate = constants.PIACertificateStrong
}
lines := []string{
"client",
"dev tun",
"nobind",
"persist-key",
"remote-cert-tls server",
// PIA specific
"ping 300", // Ping every 5 minutes to prevent a timeout error
"reneg-sec 0",
"compress", // allow PIA server to choose the compression to use
// Added constant values
"auth-nocache",
"mute-replay-warnings",
"pull-filter ignore \"auth-token\"", // prevent auth failed loops
"auth-retry nointeract",
"remote-random",
"suppress-timestamps",
// Modified variables
fmt.Sprintf("verb %d", verbosity),
fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf),
fmt.Sprintf("proto %s", string(connections[0].Protocol)),
fmt.Sprintf("cipher %s", cipher),
fmt.Sprintf("auth %s", auth),
}
if strings.HasSuffix(cipher, "-gcm") {
lines = append(lines, "ncp-disable")
}
if !root {
lines = append(lines, "user nonrootuser")
}
for _, connection := range connections {
lines = append(lines, fmt.Sprintf("remote %s %d", connection.IP.String(), connection.Port))
}
lines = append(lines, []string{
"<crl-verify>",
"-----BEGIN X509 CRL-----",
X509CRL,
"-----END X509 CRL-----",
"</crl-verify>",
}...)
lines = append(lines, []string{
"<ca>",
"-----BEGIN CERTIFICATE-----",
certificate,
"-----END CERTIFICATE-----",
"</ca>",
"",
}...)
return c.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
}

View File

@@ -1,43 +0,0 @@
package pia
import (
"context"
"net"
"github.com/qdm12/golibs/crypto/random"
"github.com/qdm12/golibs/files"
"github.com/qdm12/golibs/network"
"github.com/qdm12/golibs/verification"
"github.com/qdm12/private-internet-access-docker/internal/firewall"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// Configurator contains methods to read and modify the openvpn configuration to connect as a client
type Configurator interface {
GetOpenVPNConnections(region models.PIARegion, protocol models.NetworkProtocol,
encryption models.PIAEncryption, targetIP net.IP) (connections []models.OpenVPNConnection, err error)
BuildConf(connections []models.OpenVPNConnection, encryption models.PIAEncryption, verbosity, uid, gid int, root bool, cipher, auth string) (err error)
GetPortForward() (port uint16, err error)
WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error)
AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error)
}
type configurator struct {
client network.Client
fileManager files.FileManager
firewall firewall.Configurator
random random.Random
verifyPort func(port string) error
lookupIP func(host string) ([]net.IP, error)
}
// NewConfigurator returns a new Configurator object
func NewConfigurator(client network.Client, fileManager files.FileManager, firewall firewall.Configurator) Configurator {
return &configurator{
client: client,
fileManager: fileManager,
firewall: firewall,
random: random.NewRandom(),
verifyPort: verification.NewVerifier().VerifyPort,
lookupIP: net.LookupIP}
}

View File

@@ -1,50 +0,0 @@
package pia
import (
"context"
"encoding/hex"
"encoding/json"
"fmt"
"net/http"
"github.com/qdm12/golibs/files"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
func (c *configurator) GetPortForward() (port uint16, err error) {
b, err := c.random.GenerateRandomBytes(32)
if err != nil {
return 0, err
}
clientID := hex.EncodeToString(b)
url := fmt.Sprintf("%s/?client_id=%s", constants.PIAPortForwardURL, clientID)
content, status, err := c.client.GetContent(url)
switch {
case err != nil:
return 0, err
case status != http.StatusOK:
return 0, fmt.Errorf("status is %d for %s; does your PIA server support port forwarding?", status, url)
case len(content) == 0:
return 0, fmt.Errorf("port forwarding is already activated on this connection, has expired, or you are not connected to a PIA region that supports port forwarding")
}
body := struct {
Port uint16 `json:"port"`
}{}
if err := json.Unmarshal(content, &body); err != nil {
return 0, fmt.Errorf("port forwarding response: %w", err)
}
return body.Port, nil
}
func (c *configurator) WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error) {
return c.fileManager.WriteLinesToFile(
string(filepath),
[]string{fmt.Sprintf("%d", port)},
files.Ownership(uid, gid),
files.Permissions(0400))
}
func (c *configurator) AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error) {
return c.firewall.AllowInputTrafficOnPort(ctx, device, port)
}

View File

@@ -0,0 +1,5 @@
package provider
const (
aes256cbc = "aes-256-cbc"
)

View File

@@ -1,6 +1,7 @@
package cyberghost
package provider
import (
"context"
"fmt"
"net"
"strings"
@@ -10,38 +11,46 @@ import (
"github.com/qdm12/private-internet-access-docker/internal/models"
)
func (c *configurator) GetOpenVPNConnections(group models.CyberghostGroup, region models.CyberghostRegion, protocol models.NetworkProtocol, targetIP net.IP) (connections []models.OpenVPNConnection, err error) {
type cyberghost struct {
fileManager files.FileManager
}
func newCyberghost(fileManager files.FileManager) *cyberghost {
return &cyberghost{fileManager: fileManager}
}
func (c *cyberghost) GetOpenVPNConnections(selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
var IPs []net.IP
for _, server := range constants.CyberghostServers() {
if strings.EqualFold(string(server.Region), string(region)) && strings.EqualFold(string(server.Group), string(group)) {
if strings.EqualFold(server.Region, selection.Region) && strings.EqualFold(server.Group, selection.Group) {
IPs = server.IPs
}
}
if len(IPs) == 0 {
return nil, fmt.Errorf("no IP found for group %q and region %q", group, region)
return nil, fmt.Errorf("no IP found for group %q and region %q", selection.Group, selection.Region)
}
if targetIP != nil {
if selection.TargetIP != nil {
found := false
for i := range IPs {
if IPs[i].Equal(targetIP) {
if IPs[i].Equal(selection.TargetIP) {
found = true
break
}
}
if !found {
return nil, fmt.Errorf("target IP address %q not found in IP addresses", targetIP)
return nil, fmt.Errorf("target IP address %q not found in IP addresses", selection.TargetIP)
}
IPs = []net.IP{targetIP}
IPs = []net.IP{selection.TargetIP}
}
for _, IP := range IPs {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: 1443, Protocol: protocol})
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: 1443, Protocol: selection.Protocol})
}
return connections, nil
}
func (c *configurator) BuildConf(connections []models.OpenVPNConnection, clientKey string, verbosity, uid, gid int, root bool, cipher, auth string) (err error) {
func (c *cyberghost) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (err error) {
if len(cipher) == 0 {
cipher = "AES-256-CBC"
cipher = aes256cbc
}
if len(auth) == 0 {
auth = "SHA256"
@@ -105,10 +114,22 @@ func (c *configurator) BuildConf(connections []models.OpenVPNConnection, clientK
lines = append(lines, []string{
"<key>",
"-----BEGIN PRIVATE KEY-----",
clientKey,
extras.ClientKey,
"-----END PRIVATE KEY-----",
"</key>",
"",
}...)
return c.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
}
func (c *cyberghost) GetPortForward() (port uint16, err error) {
panic("port forwarding is not supported for cyberghost")
}
func (c *cyberghost) WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error) {
panic("port forwarding is not supported for cyberghost")
}
func (c *cyberghost) AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error) {
panic("port forwarding is not supported for cyberghost")
}

View File

@@ -1,46 +1,59 @@
package mullvad
package provider
import (
"context"
"fmt"
"net"
"github.com/qdm12/golibs/files"
"github.com/qdm12/golibs/logging"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
func (c *configurator) GetOpenVPNConnections(country models.MullvadCountry, city models.MullvadCity, provider models.MullvadProvider, protocol models.NetworkProtocol, customPort uint16, targetIP net.IP) (connections []models.OpenVPNConnection, err error) {
servers := constants.MullvadServerFilter(country, city, provider)
type mullvad struct {
fileManager files.FileManager
logger logging.Logger
}
func newMullvad(fileManager files.FileManager, logger logging.Logger) *mullvad {
return &mullvad{
fileManager: fileManager,
logger: logger.WithPrefix("Mullvad configurator: "),
}
}
func (m *mullvad) GetOpenVPNConnections(selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
servers := constants.MullvadServerFilter(selection.Country, selection.City, selection.ISP)
if len(servers) == 0 {
return nil, fmt.Errorf("no server found for country %q, city %q and ISP %q", country, city, provider)
return nil, fmt.Errorf("no server found for country %q, city %q and ISP %q", selection.Country, selection.City, selection.ISP)
}
for _, server := range servers {
port := server.DefaultPort
if customPort > 0 {
port = customPort
if selection.CustomPort > 0 {
port = selection.CustomPort
}
for _, IP := range server.IPs {
if targetIP != nil {
if targetIP.Equal(IP) {
return []models.OpenVPNConnection{{IP: IP, Port: port, Protocol: protocol}}, nil
if selection.TargetIP != nil {
if selection.TargetIP.Equal(IP) {
return []models.OpenVPNConnection{{IP: IP, Port: port, Protocol: selection.Protocol}}, nil
}
} else {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: protocol})
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: selection.Protocol})
}
}
}
if targetIP != nil {
return nil, fmt.Errorf("target IP address %q not found in IP addresses", targetIP)
if selection.TargetIP != nil {
return nil, fmt.Errorf("target IP address %q not found in IP addresses", selection.TargetIP)
}
return connections, nil
}
func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher string) (err error) {
func (m *mullvad) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (err error) {
if len(connections) == 0 {
return fmt.Errorf("at least one connection string is expected")
}
if len(cipher) == 0 {
cipher = "AES-256-CBC"
cipher = aes256cbc
}
lines := []string{
"client",
@@ -86,5 +99,17 @@ func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosi
"</ca>",
"",
}...)
return c.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
return m.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
}
func (m *mullvad) GetPortForward() (port uint16, err error) {
panic("port forwarding is not supported for mullvad")
}
func (m *mullvad) WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error) {
panic("port forwarding is not supported for mullvad")
}
func (m *mullvad) AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error) {
panic("port forwarding is not supported for mullvad")
}

199
internal/provider/pia.go Normal file
View File

@@ -0,0 +1,199 @@
package provider
import (
"context"
"encoding/hex"
"encoding/json"
"fmt"
"net"
"net/http"
"strings"
"github.com/qdm12/golibs/crypto/random"
"github.com/qdm12/golibs/files"
"github.com/qdm12/golibs/network"
"github.com/qdm12/golibs/verification"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/firewall"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
type pia struct {
client network.Client
fileManager files.FileManager
firewall firewall.Configurator
random random.Random
verifyPort func(port string) error
lookupIP func(host string) ([]net.IP, error)
}
func newPrivateInternetAccess(client network.Client, fileManager files.FileManager, firewall firewall.Configurator) *pia {
return &pia{
client: client,
fileManager: fileManager,
firewall: firewall,
random: random.NewRandom(),
verifyPort: verification.NewVerifier().VerifyPort,
lookupIP: net.LookupIP}
}
func (p *pia) GetOpenVPNConnections(selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
var IPs []net.IP
for _, server := range constants.PIAServers() {
if strings.EqualFold(server.Region, selection.Region) {
IPs = server.IPs
}
}
if len(IPs) == 0 {
return nil, fmt.Errorf("no IP found for region %q", selection.Region)
}
if selection.TargetIP != nil {
found := false
for i := range IPs {
if IPs[i].Equal(selection.TargetIP) {
found = true
break
}
}
if !found {
return nil, fmt.Errorf("target IP address %q not found in IP addresses", selection.TargetIP)
}
IPs = []net.IP{selection.TargetIP}
}
var port uint16
switch selection.Protocol {
case constants.TCP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 502
case constants.PIAEncryptionPresetStrong:
port = 501
}
case constants.UDP:
switch selection.EncryptionPreset {
case constants.PIAEncryptionPresetNormal:
port = 1198
case constants.PIAEncryptionPresetStrong:
port = 1197
}
}
if port == 0 {
return nil, fmt.Errorf("combination of protocol %q and encryption %q does not yield any port number", selection.Protocol, selection.EncryptionPreset)
}
for _, IP := range IPs {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: selection.Protocol})
}
return connections, nil
}
func (p *pia) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (err error) {
var X509CRL, certificate string
if extras.EncryptionPreset == constants.PIAEncryptionPresetNormal {
if len(cipher) == 0 {
cipher = "aes-128-cbc"
}
if len(auth) == 0 {
auth = "sha1"
}
X509CRL = constants.PiaX509CRLNormal
certificate = constants.PIACertificateNormal
} else { // strong encryption
if len(cipher) == 0 {
cipher = aes256cbc
}
if len(auth) == 0 {
auth = "sha256"
}
X509CRL = constants.PiaX509CRLStrong
certificate = constants.PIACertificateStrong
}
lines := []string{
"client",
"dev tun",
"nobind",
"persist-key",
"remote-cert-tls server",
// PIA specific
"ping 300", // Ping every 5 minutes to prevent a timeout error
"reneg-sec 0",
"compress", // allow PIA server to choose the compression to use
// Added constant values
"auth-nocache",
"mute-replay-warnings",
"pull-filter ignore \"auth-token\"", // prevent auth failed loops
"auth-retry nointeract",
"remote-random",
"suppress-timestamps",
// Modified variables
fmt.Sprintf("verb %d", verbosity),
fmt.Sprintf("auth-user-pass %s", constants.OpenVPNAuthConf),
fmt.Sprintf("proto %s", string(connections[0].Protocol)),
fmt.Sprintf("cipher %s", cipher),
fmt.Sprintf("auth %s", auth),
}
if strings.HasSuffix(cipher, "-gcm") {
lines = append(lines, "ncp-disable")
}
if !root {
lines = append(lines, "user nonrootuser")
}
for _, connection := range connections {
lines = append(lines, fmt.Sprintf("remote %s %d", connection.IP.String(), connection.Port))
}
lines = append(lines, []string{
"<crl-verify>",
"-----BEGIN X509 CRL-----",
X509CRL,
"-----END X509 CRL-----",
"</crl-verify>",
}...)
lines = append(lines, []string{
"<ca>",
"-----BEGIN CERTIFICATE-----",
certificate,
"-----END CERTIFICATE-----",
"</ca>",
"",
}...)
return p.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
}
func (p *pia) GetPortForward() (port uint16, err error) {
b, err := p.random.GenerateRandomBytes(32)
if err != nil {
return 0, err
}
clientID := hex.EncodeToString(b)
url := fmt.Sprintf("%s/?client_id=%s", constants.PIAPortForwardURL, clientID)
content, status, err := p.client.GetContent(url)
switch {
case err != nil:
return 0, err
case status != http.StatusOK:
return 0, fmt.Errorf("status is %d for %s; does your PIA server support port forwarding?", status, url)
case len(content) == 0:
return 0, fmt.Errorf("port forwarding is already activated on this connection, has expired, or you are not connected to a PIA region that supports port forwarding")
}
body := struct {
Port uint16 `json:"port"`
}{}
if err := json.Unmarshal(content, &body); err != nil {
return 0, fmt.Errorf("port forwarding response: %w", err)
}
return body.Port, nil
}
func (p *pia) WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error) {
return p.fileManager.WriteLinesToFile(
string(filepath),
[]string{fmt.Sprintf("%d", port)},
files.Ownership(uid, gid),
files.Permissions(0400))
}
func (p *pia) AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error) {
return p.firewall.AllowInputTrafficOnPort(ctx, device, port)
}

View File

@@ -0,0 +1,38 @@
package provider
import (
"context"
"github.com/qdm12/golibs/files"
"github.com/qdm12/golibs/logging"
"github.com/qdm12/golibs/network"
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/firewall"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// Provider contains methods to read and modify the openvpn configuration to connect as a client
type Provider interface {
GetOpenVPNConnections(selection models.ServerSelection) (connections []models.OpenVPNConnection, err error)
BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (err error)
GetPortForward() (port uint16, err error)
WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error)
AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error)
}
func New(provider models.VPNProvider, logger logging.Logger, client network.Client, fileManager files.FileManager, firewall firewall.Configurator) Provider {
switch provider {
case constants.PrivateInternetAccess:
return newPrivateInternetAccess(client, fileManager, firewall)
case constants.Mullvad:
return newMullvad(fileManager, logger)
case constants.Windscribe:
return newWindscribe(fileManager)
case constants.Surfshark:
return newSurfshark(fileManager)
case constants.Cyberghost:
return newCyberghost(fileManager)
default:
return nil // should never occur
}
}

View File

@@ -1,6 +1,7 @@
package surfshark
package provider
import (
"context"
"fmt"
"net"
"strings"
@@ -10,47 +11,56 @@ import (
"github.com/qdm12/private-internet-access-docker/internal/models"
)
func (c *configurator) GetOpenVPNConnections(region models.SurfsharkRegion, protocol models.NetworkProtocol, targetIP net.IP) (connections []models.OpenVPNConnection, err error) {
type surfshark struct {
fileManager files.FileManager
lookupIP func(host string) ([]net.IP, error)
}
func newSurfshark(fileManager files.FileManager) *surfshark {
return &surfshark{fileManager, net.LookupIP}
}
func (s *surfshark) GetOpenVPNConnections(selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
var IPs []net.IP
for _, server := range constants.SurfsharkServers() {
if strings.EqualFold(string(server.Region), string(region)) {
if strings.EqualFold(server.Region, selection.Region) {
IPs = server.IPs
}
}
if len(IPs) == 0 {
return nil, fmt.Errorf("no IP found for region %q", region)
return nil, fmt.Errorf("no IP found for region %q", selection.Region)
}
if targetIP != nil {
if selection.TargetIP != nil {
found := false
for i := range IPs {
if IPs[i].Equal(targetIP) {
if IPs[i].Equal(selection.TargetIP) {
found = true
break
}
}
if !found {
return nil, fmt.Errorf("target IP address %q not found in IP addresses", targetIP)
return nil, fmt.Errorf("target IP address %q not found in IP addresses", selection.TargetIP)
}
IPs = []net.IP{targetIP}
IPs = []net.IP{selection.TargetIP}
}
var port uint16
switch {
case protocol == constants.TCP:
case selection.Protocol == constants.TCP:
port = 1443
case protocol == constants.UDP:
case selection.Protocol == constants.UDP:
port = 1194
default:
return nil, fmt.Errorf("protocol %q is unknown", protocol)
return nil, fmt.Errorf("protocol %q is unknown", selection.Protocol)
}
for _, IP := range IPs {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: protocol})
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: selection.Protocol})
}
return connections, nil
}
func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string) (err error) {
func (s *surfshark) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (err error) {
if len(cipher) == 0 {
cipher = "AES-256-CBC"
cipher = aes256cbc
}
if len(auth) == 0 {
auth = "SHA512"
@@ -110,5 +120,17 @@ func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosi
"</tls-auth>",
"",
}...)
return c.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
return s.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
}
func (s *surfshark) GetPortForward() (port uint16, err error) {
panic("port forwarding is not supported for surfshark")
}
func (s *surfshark) WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error) {
panic("port forwarding is not supported for surfshark")
}
func (s *surfshark) AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error) {
panic("port forwarding is not supported for surfshark")
}

View File

@@ -1,6 +1,7 @@
package windscribe
package provider
import (
"context"
"fmt"
"net"
"strings"
@@ -10,49 +11,57 @@ import (
"github.com/qdm12/private-internet-access-docker/internal/models"
)
func (c *configurator) GetOpenVPNConnections(region models.WindscribeRegion, protocol models.NetworkProtocol, customPort uint16, targetIP net.IP) (connections []models.OpenVPNConnection, err error) {
type windscribe struct {
fileManager files.FileManager
}
func newWindscribe(fileManager files.FileManager) *windscribe {
return &windscribe{fileManager: fileManager}
}
func (w *windscribe) GetOpenVPNConnections(selection models.ServerSelection) (connections []models.OpenVPNConnection, err error) {
var IPs []net.IP
for _, server := range constants.WindscribeServers() {
if strings.EqualFold(string(server.Region), string(region)) {
if strings.EqualFold(server.Region, selection.Region) {
IPs = server.IPs
}
}
if len(IPs) == 0 {
return nil, fmt.Errorf("no IP found for region %q", region)
return nil, fmt.Errorf("no IP found for region %q", selection.Region)
}
if targetIP != nil {
if selection.TargetIP != nil {
found := false
for i := range IPs {
if IPs[i].Equal(targetIP) {
if IPs[i].Equal(selection.TargetIP) {
found = true
break
}
}
if !found {
return nil, fmt.Errorf("target IP address %q not found in IP addresses", targetIP)
return nil, fmt.Errorf("target IP address %q not found in IP addresses", selection.TargetIP)
}
IPs = []net.IP{targetIP}
IPs = []net.IP{selection.TargetIP}
}
var port uint16
switch {
case customPort > 0:
port = customPort
case protocol == constants.TCP:
case selection.CustomPort > 0:
port = selection.CustomPort
case selection.Protocol == constants.TCP:
port = 1194
case protocol == constants.UDP:
case selection.Protocol == constants.UDP:
port = 443
default:
return nil, fmt.Errorf("protocol %q is unknown", protocol)
return nil, fmt.Errorf("protocol %q is unknown", selection.Protocol)
}
for _, IP := range IPs {
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: protocol})
connections = append(connections, models.OpenVPNConnection{IP: IP, Port: port, Protocol: selection.Protocol})
}
return connections, nil
}
func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string) (err error) {
func (w *windscribe) BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string, extras models.ExtraConfigOptions) (err error) {
if len(cipher) == 0 {
cipher = "AES-256-CBC"
cipher = aes256cbc
}
if len(auth) == 0 {
auth = "sha512"
@@ -108,5 +117,17 @@ func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosi
"</tls-auth>",
"",
}...)
return c.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
return w.fileManager.WriteLinesToFile(string(constants.OpenVPNConf), lines, files.Ownership(uid, gid), files.Permissions(0400))
}
func (w *windscribe) GetPortForward() (port uint16, err error) {
panic("port forwarding is not supported for windscribe")
}
func (w *windscribe) WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error) {
panic("port forwarding is not supported for windscribe")
}
func (w *windscribe) AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error) {
panic("port forwarding is not supported for windscribe")
}

View File

@@ -1,54 +0,0 @@
package settings
import (
"strings"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/params"
)
// Windscribe contains the settings to connect to a Windscribe server
type Cyberghost struct {
User string
Password string
ClientKey string
Group models.CyberghostGroup
Region models.CyberghostRegion
}
func (c *Cyberghost) String() string {
settingsList := []string{
"Cyberghost settings:",
"User: [redacted]",
"Password: [redacted]",
"ClientKey: [redacted]",
"Group: " + string(c.Group),
"Region: " + string(c.Region),
}
return strings.Join(settingsList, "\n |--")
}
// GetCyberghostSettings obtains Cyberghost settings from environment variables using the params package.
func GetCyberghostSettings(paramsReader params.Reader) (settings Cyberghost, err error) {
settings.User, err = paramsReader.GetUser()
if err != nil {
return settings, err
}
settings.Password, err = paramsReader.GetPassword()
if err != nil {
return settings, err
}
settings.ClientKey, err = paramsReader.GetCyberghostClientKey()
if err != nil {
return settings, err
}
settings.Group, err = paramsReader.GetCyberghostGroup()
if err != nil {
return settings, err
}
settings.Region, err = paramsReader.GetCyberghostRegion()
if err != nil {
return settings, err
}
return settings, nil
}

View File

@@ -1,56 +0,0 @@
package settings
import (
"strings"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/params"
)
// Mullvad contains the settings to connect to a Mullvad server
type Mullvad struct {
User string
Country models.MullvadCountry
City models.MullvadCity
ISP models.MullvadProvider
Port uint16
}
func (m *Mullvad) String() string {
settingsList := []string{
"Mullvad settings:",
"User: [redacted]",
"Country: " + string(m.Country),
"City: " + string(m.City),
"ISP: " + string(m.ISP),
"Port: " + string(m.Port),
}
return strings.Join(settingsList, "\n |--")
}
// GetMullvadSettings obtains Mullvad settings from environment variables using the params package.
func GetMullvadSettings(paramsReader params.Reader) (settings Mullvad, err error) {
settings.User, err = paramsReader.GetUser()
if err != nil {
return settings, err
}
// Remove spaces in user ID to simplify user's life, thanks @JeordyR
settings.User = strings.ReplaceAll(settings.User, " ", "")
settings.Country, err = paramsReader.GetMullvadCountry()
if err != nil {
return settings, err
}
settings.City, err = paramsReader.GetMullvadCity()
if err != nil {
return settings, err
}
settings.ISP, err = paramsReader.GetMullvadISP()
if err != nil {
return settings, err
}
settings.Port, err = paramsReader.GetMullvadPort()
if err != nil {
return settings, err
}
return settings, nil
}

View File

@@ -2,26 +2,30 @@ package settings
import (
"fmt"
"net"
"strings"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/params"
)
// OpenVPN contains settings to configure the OpenVPN client
type OpenVPN struct {
NetworkProtocol models.NetworkProtocol
Verbosity int
Root bool
TargetIP net.IP
Cipher string
Auth string
User string
Password string
Verbosity int
Root bool
Cipher string
Auth string
}
// GetOpenVPNSettings obtains the OpenVPN settings using the params functions
func GetOpenVPNSettings(paramsReader params.Reader) (settings OpenVPN, err error) {
settings.NetworkProtocol, err = paramsReader.GetNetworkProtocol()
settings.User, err = paramsReader.GetUser()
if err != nil {
return settings, err
}
// Remove spaces in user ID to simplify user's life, thanks @JeordyR
settings.User = strings.ReplaceAll(settings.User, " ", "")
settings.Password, err = paramsReader.GetPassword()
if err != nil {
return settings, err
}
@@ -33,10 +37,6 @@ func GetOpenVPNSettings(paramsReader params.Reader) (settings OpenVPN, err error
if err != nil {
return settings, err
}
settings.TargetIP, err = paramsReader.GetTargetIP()
if err != nil {
return settings, err
}
settings.Cipher, err = paramsReader.GetOpenVPNCipher()
if err != nil {
return settings, err
@@ -55,12 +55,16 @@ func (o *OpenVPN) String() string {
}
settingsList := []string{
"OpenVPN settings:",
"Network protocol: " + string(o.NetworkProtocol),
"User: [redacted]",
"Password: [redacted]",
"Verbosity level: " + fmt.Sprintf("%d", o.Verbosity),
"Run as root: " + runAsRoot,
"Target IP address: " + o.TargetIP.String(),
"Custom cipher: " + o.Cipher,
"Custom auth algorithm: " + o.Auth,
}
if len(o.Cipher) > 0 {
settingsList = append(settingsList, "Custom cipher: "+o.Cipher)
}
if len(o.Auth) > 0 {
settingsList = append(settingsList, "Custom auth algorithm: "+o.Auth)
}
return strings.Join(settingsList, "\n|--")
}

View File

@@ -1,74 +0,0 @@
package settings
import (
"fmt"
"strings"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/params"
)
// PIA contains the settings to connect to a PIA server
type PIA struct {
User string
Password string
Encryption models.PIAEncryption
Region models.PIARegion
PortForwarding PortForwarding
}
// PortForwarding contains settings for port forwarding
type PortForwarding struct {
Enabled bool
Filepath models.Filepath
}
func (p *PortForwarding) String() string {
if p.Enabled {
return fmt.Sprintf("on, saved in %s", p.Filepath)
}
return "off"
}
func (p *PIA) String() string {
settingsList := []string{
"PIA settings:",
"User: [redacted]",
"Password: [redacted]",
"Region: " + string(p.Region),
"Encryption: " + string(p.Encryption),
"Port forwarding: " + p.PortForwarding.String(),
}
return strings.Join(settingsList, "\n |--")
}
// GetPIASettings obtains PIA settings from environment variables using the params package.
func GetPIASettings(paramsReader params.Reader) (settings PIA, err error) {
settings.User, err = paramsReader.GetUser()
if err != nil {
return settings, err
}
settings.Password, err = paramsReader.GetPassword()
if err != nil {
return settings, err
}
settings.Encryption, err = paramsReader.GetPIAEncryption()
if err != nil {
return settings, err
}
settings.Region, err = paramsReader.GetPIARegion()
if err != nil {
return settings, err
}
settings.PortForwarding.Enabled, err = paramsReader.GetPortForwarding()
if err != nil {
return settings, err
}
if settings.PortForwarding.Enabled {
settings.PortForwarding.Filepath, err = paramsReader.GetPortForwardingStatusFilepath()
if err != nil {
return settings, err
}
}
return settings, nil
}

View File

@@ -0,0 +1,137 @@
package settings
import (
"github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/params"
)
// GetPIASettings obtains PIA settings from environment variables using the params package.
func GetPIASettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
settings.Name = constants.PrivateInternetAccess
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
if err != nil {
return settings, err
}
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
if err != nil {
return settings, err
}
encryptionPreset, err := paramsReader.GetPIAEncryptionPreset()
if err != nil {
return settings, err
}
settings.ServerSelection.EncryptionPreset = encryptionPreset
settings.ExtraConfigOptions.EncryptionPreset = encryptionPreset
settings.ServerSelection.Region, err = paramsReader.GetPIARegion()
if err != nil {
return settings, err
}
settings.PortForwarding.Enabled, err = paramsReader.GetPortForwarding()
if err != nil {
return settings, err
}
if settings.PortForwarding.Enabled {
settings.PortForwarding.Filepath, err = paramsReader.GetPortForwardingStatusFilepath()
if err != nil {
return settings, err
}
}
return settings, nil
}
// GetMullvadSettings obtains Mullvad settings from environment variables using the params package.
func GetMullvadSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
settings.Name = constants.Mullvad
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
if err != nil {
return settings, err
}
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
if err != nil {
return settings, err
}
settings.ServerSelection.Country, err = paramsReader.GetMullvadCountry()
if err != nil {
return settings, err
}
settings.ServerSelection.City, err = paramsReader.GetMullvadCity()
if err != nil {
return settings, err
}
settings.ServerSelection.ISP, err = paramsReader.GetMullvadISP()
if err != nil {
return settings, err
}
settings.ServerSelection.CustomPort, err = paramsReader.GetMullvadPort()
if err != nil {
return settings, err
}
return settings, nil
}
// GetWindscribeSettings obtains Windscribe settings from environment variables using the params package.
func GetWindscribeSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
settings.Name = constants.Windscribe
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
if err != nil {
return settings, err
}
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
if err != nil {
return settings, err
}
settings.ServerSelection.Region, err = paramsReader.GetWindscribeRegion()
if err != nil {
return settings, err
}
settings.ServerSelection.CustomPort, err = paramsReader.GetWindscribePort(settings.ServerSelection.Protocol)
if err != nil {
return settings, err
}
return settings, nil
}
// GetSurfsharkSettings obtains Surfshark settings from environment variables using the params package.
func GetSurfsharkSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
settings.Name = constants.Surfshark
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
if err != nil {
return settings, err
}
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
if err != nil {
return settings, err
}
settings.ServerSelection.Region, err = paramsReader.GetSurfsharkRegion()
if err != nil {
return settings, err
}
return settings, nil
}
// GetCyberghostSettings obtains Cyberghost settings from environment variables using the params package.
func GetCyberghostSettings(paramsReader params.Reader) (settings models.ProviderSettings, err error) {
settings.Name = constants.Cyberghost
settings.ServerSelection.Protocol, err = paramsReader.GetNetworkProtocol()
if err != nil {
return settings, err
}
settings.ServerSelection.TargetIP, err = paramsReader.GetTargetIP()
if err != nil {
return settings, err
}
settings.ExtraConfigOptions.ClientKey, err = paramsReader.GetCyberghostClientKey()
if err != nil {
return settings, err
}
settings.ServerSelection.Group, err = paramsReader.GetCyberghostGroup()
if err != nil {
return settings, err
}
settings.ServerSelection.Region, err = paramsReader.GetCyberghostRegion()
if err != nil {
return settings, err
}
return settings, nil
}

View File

@@ -13,11 +13,7 @@ import (
type Settings struct {
VPNSP models.VPNProvider
OpenVPN OpenVPN
PIA PIA
Mullvad Mullvad
Windscribe Windscribe
Surfshark Surfshark
Cyberghost Cyberghost
Provider models.ProviderSettings
System System
DNS DNS
Firewall Firewall
@@ -26,23 +22,10 @@ type Settings struct {
}
func (s *Settings) String() string {
var vpnServiceProviderSettings string
switch s.VPNSP {
case constants.PrivateInternetAccess:
vpnServiceProviderSettings = s.PIA.String()
case constants.Mullvad:
vpnServiceProviderSettings = s.Mullvad.String()
case constants.Windscribe:
vpnServiceProviderSettings = s.Windscribe.String()
case constants.Surfshark:
vpnServiceProviderSettings = s.Surfshark.String()
case constants.Cyberghost:
vpnServiceProviderSettings = s.Cyberghost.String()
}
return strings.Join([]string{
"Settings summary below:",
s.OpenVPN.String(),
vpnServiceProviderSettings,
s.Provider.String(),
s.System.String(),
s.DNS.String(),
s.Firewall.String(),
@@ -59,27 +42,30 @@ func GetAllSettings(paramsReader params.Reader) (settings Settings, err error) {
if err != nil {
return settings, err
}
settings.OpenVPN, err = GetOpenVPNSettings(paramsReader)
if err != nil {
return settings, err
}
switch settings.VPNSP {
case constants.PrivateInternetAccess:
settings.PIA, err = GetPIASettings(paramsReader)
settings.Provider, err = GetPIASettings(paramsReader)
case constants.Mullvad:
settings.Mullvad, err = GetMullvadSettings(paramsReader)
settings.Provider, err = GetMullvadSettings(paramsReader)
case constants.Windscribe:
settings.Windscribe, err = GetWindscribeSettings(paramsReader, settings.OpenVPN.NetworkProtocol)
settings.Provider, err = GetWindscribeSettings(paramsReader)
case constants.Surfshark:
settings.Surfshark, err = GetSurfsharkSettings(paramsReader)
settings.Provider, err = GetSurfsharkSettings(paramsReader)
case constants.Cyberghost:
settings.Cyberghost, err = GetCyberghostSettings(paramsReader)
settings.Provider, err = GetCyberghostSettings(paramsReader)
default:
err = fmt.Errorf("VPN service provider %q is not valid", settings.VPNSP)
}
if err != nil {
return settings, err
}
settings.OpenVPN, err = GetOpenVPNSettings(paramsReader)
if err != nil {
return settings, err
}
if settings.VPNSP == constants.Mullvad {
settings.OpenVPN.Password = "m"
}
settings.DNS, err = GetDNSSettings(paramsReader)
if err != nil {
return settings, err

View File

@@ -1,42 +0,0 @@
package settings
import (
"strings"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/params"
)
// Surfshark contains the settings to connect to a Surfshark server
type Surfshark struct {
User string
Password string
Region models.SurfsharkRegion
}
func (s *Surfshark) String() string {
settingsList := []string{
"Surfshark settings:",
"User: [redacted]",
"Password: [redacted]",
"Region: " + strings.Title(string(s.Region)),
}
return strings.Join(settingsList, "\n |--")
}
// GetSurfsharkSettings obtains Surfshark settings from environment variables using the params package.
func GetSurfsharkSettings(paramsReader params.Reader) (settings Surfshark, err error) {
settings.User, err = paramsReader.GetUser()
if err != nil {
return settings, err
}
settings.Password, err = paramsReader.GetPassword()
if err != nil {
return settings, err
}
settings.Region, err = paramsReader.GetSurfsharkRegion()
if err != nil {
return settings, err
}
return settings, nil
}

View File

@@ -1,49 +0,0 @@
package settings
import (
"fmt"
"strings"
"github.com/qdm12/private-internet-access-docker/internal/models"
"github.com/qdm12/private-internet-access-docker/internal/params"
)
// Windscribe contains the settings to connect to a Windscribe server
type Windscribe struct {
User string
Password string
Region models.WindscribeRegion
Port uint16
}
func (w *Windscribe) String() string {
settingsList := []string{
"Windscribe settings:",
"User: [redacted]",
"Password: [redacted]",
"Region: " + string(w.Region),
"Custom port: " + fmt.Sprintf("%d", w.Port),
}
return strings.Join(settingsList, "\n |--")
}
// GetWindscribeSettings obtains Windscribe settings from environment variables using the params package.
func GetWindscribeSettings(paramsReader params.Reader, protocol models.NetworkProtocol) (settings Windscribe, err error) {
settings.User, err = paramsReader.GetUser()
if err != nil {
return settings, err
}
settings.Password, err = paramsReader.GetPassword()
if err != nil {
return settings, err
}
settings.Region, err = paramsReader.GetWindscribeRegion()
if err != nil {
return settings, err
}
settings.Port, err = paramsReader.GetWindscribePort(protocol)
if err != nil {
return settings, err
}
return settings, nil
}

View File

@@ -1,24 +0,0 @@
package surfshark
import (
"net"
"github.com/qdm12/golibs/files"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// Configurator contains methods to read and modify the openvpn configuration to connect as a client
type Configurator interface {
GetOpenVPNConnections(region models.SurfsharkRegion, protocol models.NetworkProtocol, targetIP net.IP) (connections []models.OpenVPNConnection, err error)
BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string) (err error)
}
type configurator struct {
fileManager files.FileManager
lookupIP func(host string) ([]net.IP, error)
}
// NewConfigurator returns a new Configurator object
func NewConfigurator(fileManager files.FileManager) Configurator {
return &configurator{fileManager, net.LookupIP}
}

View File

@@ -1,23 +0,0 @@
package windscribe
import (
"net"
"github.com/qdm12/golibs/files"
"github.com/qdm12/private-internet-access-docker/internal/models"
)
// Configurator contains methods to read and modify the openvpn configuration to connect as a client
type Configurator interface {
GetOpenVPNConnections(region models.WindscribeRegion, protocol models.NetworkProtocol, customPort uint16, targetIP net.IP) (connections []models.OpenVPNConnection, err error)
BuildConf(connections []models.OpenVPNConnection, verbosity, uid, gid int, root bool, cipher, auth string) (err error)
}
type configurator struct {
fileManager files.FileManager
}
// NewConfigurator returns a new Configurator object
func NewConfigurator(fileManager files.FileManager) Configurator {
return &configurator{fileManager: fileManager}
}