public override string SaveData()
 {
     var rv = new SrdConfig();
     rv.FirstIP = txtIP.Text.Trim();
     rv.Subnet = IPv6 ? 124 - 4 * ddSubnet.SelectedIndex : 24 - 8 * ddSubnet.SelectedIndex;
     rv.Prefix = txtPrefix.Text.Trim().ToLower();
     rv.FullIP = ddIP.SelectedIndex==0;
     rv.Suffix = txtSuffix.Text.Trim().ToLower();
     rv.TTL = ctlTTL1.Value;
     rv.HostReq = chkHostReq.Checked;
     return rv.Serialize();
 }
 public void LoadConfig(string config, Guid instanceID, string dataPath, ref int maxThreads)
 {
     Cfg = SrdConfig.DeSerialize(config);
     var ip = System.Net.IPAddress.Parse(Cfg.FirstIP);
     CfgIPv6 =ip.AddressFamily==System.Net.Sockets.AddressFamily.InterNetworkV6 ;
     var ipb = ip.GetAddressBytes();
     if (CfgIPv6)
     {
         var sb = new System.Text.StringBuilder(32);
         for (var i = 0; i < 16; i++) sb.Append(ByteToHex2( ipb[i]));
         HostIPMatchPrefix = sb.ToString(0, Cfg.Subnet / 4);
     }
     else
     {
         HostIPMatchPrefix = ipb[0].ToString();
         if (Cfg.Subnet >= 16) { HostIPMatchPrefix += "." + ipb[1].ToString(); }
         if (Cfg.Subnet == 24) { HostIPMatchPrefix += "." + ipb[2].ToString(); }
     }
 }