Setting Up and Managing Your Windows NTP Server

The Windows Time service (W32Time) is crucial for maintaining synchronized time across all computers in an Active Directory Domain Services (AD DS) environment. While it operates seamlessly in the background, understanding its tools and settings, especially for configuring a robust Windows Ntp Server, is essential for network administrators. This article delves into the intricacies of managing the Windows Time service, focusing on how to leverage Windows Server as a reliable Network Time Protocol (NTP) server for your network.

By default, domain-joined computers automatically synchronize time through a domain hierarchy. However, you might need to explicitly configure a windows ntp server to ensure accuracy and reliability, particularly at the root of your time synchronization hierarchy or for isolated network segments. This guide provides a comprehensive overview of the tools and settings available to effectively manage your windows ntp server using Windows Time service.

It’s important to note that for critical time synchronization needs, achieving down to one-millisecond accuracy is possible within your domain. For further details, refer to Microsoft’s documentation on Support boundary for high-accuracy time and Accurate Time for Windows Server 2016.

Caution: Avoid using the Net time command to configure or set a computer’s clock when the Windows Time service is active, as it can lead to inconsistencies and conflicts. This command is deprecated and should not be used for managing a windows ntp server.

Network Port for Windows NTP Server

The Windows Time service adheres to the Network Time Protocol (NTP) specification, utilizing UDP port 123 for all time synchronization activities. Every time your windows ntp server synchronizes its clock or provides time to clients, this communication occurs over UDP port 123. This port is exclusively reserved for the Windows Time service as the destination port.

Note:

  • NTP servers, including your windows ntp server, typically listen for requests on UDP port 123 and respond from the same port.
  • Both the built-in W32Time NTP Client and NTP Server can be independently enabled or disabled, yet they share UDP port 123 for their operations.
  • The W32Time NTP Client is restricted to using UDP 123 as the source port.
  • In multi-homed systems (computers with multiple network adapters), enabling the Windows Time service based on a specific network adapter is not supported. The service operates at the system level, not per adapter.

Command-Line Management with w32tm for Windows NTP Server

The w32tm command-line tool is your primary interface for configuring Windows Time service settings and diagnosing time-related issues on your windows ntp server. It’s the preferred method for managing, monitoring, and troubleshooting the service. Administrative privileges are required to use w32tm locally, and Domain Admin rights are needed for remote execution.

To utilize w32tm for your windows ntp server, follow these steps:

  1. Open Command Prompt as an administrator: Start > type cmd > right-click Command Prompt > select Run as administrator.
  2. At the command prompt, enter w32tm followed by the necessary parameters to manage your windows ntp server.
Parameter Description
/? Displays comprehensive help information for the w32tm command, detailing all available parameters and their usage for managing your windows ntp server.
/config [/computer:target>] [/update] [/manualpeerlist:peers>] [/syncfromflags:source>] [/LocalClockDispersion:seconds>] [/reliable:(YES|NO)] [/largephaseoffset:milliseconds>]** Configures Windows Time service settings on your windows ntp server or a target computer. – /computer:target>: Specifies the target computer to configure. Defaults to the local windows ntp server if omitted. – /update: Applies configuration changes immediately by notifying the Windows Time service. – /manualpeerlist:peers>: Sets a static list of NTP servers for your windows ntp server to synchronize with. Use a space-delimited list of DNS names or IP addresses, enclosed in quotes for multiple peers. – /syncfromflags:source>: Defines the time sources for synchronization. For a windows ntp server, this is crucial for specifying external or internal sources. source> is a comma-separated list: – MANUAL: Includes servers from the manualpeerlist. – DOMHIER: Synchronizes from the domain hierarchy (less relevant for a primary windows ntp server). – /LocalClockDispersion:seconds>: Sets the assumed accuracy of the local clock when no external time source is available. Important for isolated windows ntp server scenarios. – /reliable:(YES|NO): Designates the computer as a reliable time source. For a windows ntp server, set to YES to ensure it’s considered authoritative within the domain. – /largephaseoffset:milliseconds>: Defines the threshold for considering a time difference as a spike, influencing how aggressively the windows ntp server corrects time.
/debug {/disable | {/enable /file:name> /size:/bytes> /entries:value> [/truncate]}} Manages the private log for the Windows Time service on your windows ntp server, useful for in-depth troubleshooting. – /disable: Turns off the private log. – /enable: Activates the private log with options: – file:name>: Sets the log file path and name. – size:bytes>: Defines the maximum log file size for circular logging. – entries:value>: Specifies the types of information to log using comma-separated flags (0-300 for all). – /truncate: Overwrites the log file if it already exists.
/dumpreg [/subkey:key>] [/computer:target>] Dumps registry values related to the Windows Time service on your windows ntp server or a target computer. Useful for inspecting current settings. – /subkey:key>: Specifies a subkey under the default HKLMSystemCurrentControlSetServicesW32Time root key. – /computer:target>: Queries the registry of a target computer.
/monitor [/domain:domain name>] [/computers:name>[,name>[,name>…]]] [/threads:num>] Monitors the Windows Time service status across a domain or a list of computers, including your windows ntp server. – /domain: Monitors computers within a specified domain. – /computers: Monitors a comma-separated list of computers. Prefixing a name with * treats it as a PDC. – /threads: Sets the number of computers to monitor concurrently (default: 3, range: 1-50).
/ntpte time epoch> Converts an NTP time epoch to a human-readable format. Useful for interpreting NTP timestamps related to your windows ntp server.
/ntte time epoch> Converts a Windows NT system time epoch to a readable format. Useful for analyzing Windows time-related data on your windows ntp server.
/query [/computer:target>] {/source | /configuration | /peers | /status} [/verbose] Retrieves and displays Windows Time service information from your windows ntp server or another computer. Essential for verifying the configuration and status. – /computer:target>: Queries a target computer. Defaults to the local windows ntp server. – /source: Shows the current time source being used by the windows ntp server. – /configuration: Displays the runtime configuration and source of each setting, crucial for understanding the effective configuration of your windows ntp server. Verbose mode shows unused settings as well. – /peers: Lists configured NTP peers and their status when your windows ntp server is acting as a client. – /status: Shows the overall Windows Time service status on the windows ntp server. – /verbose: Provides more detailed output.
/register Registers the Windows Time service to run as a service and adds default configuration to the registry on your windows ntp server. Useful if the service becomes unregistered or configuration is corrupted.
/resync [/computer:computer>] [/nowait] [/rediscover] [/soft] Forces a time resynchronization on your windows ntp server or a specified computer. Useful after configuration changes or suspected time drift. – /computer:computer>: Specifies the target computer to resynchronize. Defaults to the local windows ntp server. – /nowait: Returns immediately without waiting for synchronization to complete. – /rediscover: Forces network configuration and time source rediscovery before resynchronization. – /soft: Resynchronizes using existing error statistics (for compatibility).
/stripchart /computer:target> [/period:refresh>] [/dataonly] [/samples:count>] [/rdtsc] Displays a real-time graph of the time offset between your windows ntp server and a target computer. Excellent for visualizing time synchronization behavior. – /computer:target>: The computer to measure the offset against. – /period:refresh>: Sets the refresh interval in seconds (default: 2 seconds). – /dataonly: Outputs only numerical data, without the graphical chart. – /samples:count>: Collects a specified number of samples and then stops. – /rdtsc: Outputs comma-separated values including RDTSC (Read Time Stamp Counter) readings for detailed analysis.
/tz Displays the current time zone settings on your windows ntp server.
/unregister Unregisters the Windows Time service and removes its configuration from the registry on your windows ntp server. Use with caution.

Examples of w32tm Usage for Windows NTP Server Configuration

Setting your Windows NTP server to use specific time sources:

To configure your windows ntp server to synchronize with two external time servers, ntpserver.example.com and clock.example.org, use the following command:

w32tm /config /manualpeerlist:"ntpserver.example.com clock.example.org" /syncfromflags:manual /reliable:yes /update

This command sets the manual peer list, specifies manual synchronization mode, marks the server as reliable, and applies the changes. The /reliable:yes flag is crucial for a windows ntp server to be considered a valid time source by other computers.

Reconfiguring a client to automatically sync from the domain hierarchy:

If a client was previously configured to use a manual time source and you want it to synchronize with the domain hierarchy from your windows ntp server, use:

w32tm /config /syncfromflags:domhier /update
net stop w32time
net start w32time

This command resets the synchronization source to the domain hierarchy and restarts the Windows Time service for the changes to take effect.

Checking the configuration of your Windows NTP server:

To verify the current configuration of your windows ntp server, run:

w32tm /query /configuration

This will display a detailed list of the Windows Time service configuration parameters, allowing you to confirm your settings.

Prioritizing time servers for redundancy:

For enhanced reliability of your windows ntp server, especially when using multiple external time sources, you can prioritize servers. If you have two servers, and want to prioritize ntpserver.contoso.com over clock.adatum.com, use the UseAsFallbackOnly flag (0x2):

w32tm /config /manualpeerlist:"ntpserver.contoso.com,0x8 clock.adatum.com,0x2" /syncfromflags:manual /reliable:yes /update

The ,0x8 flag for ntpserver.contoso.com sets it as a preferred source, while ,0x2 for clock.adatum.com designates it as a fallback.

You can also query the registry directly to view the NtpServer value and its flags:

reg query HKLMSYSTEMCurrentControlSetServicesW32TimeParameters /v NtpServer

Understanding Clock Reset Mechanics in w32tm

When w32tm adjusts the clock of your windows ntp server, it first assesses the CurrentTimeOffset (Phase Offset) against the MaxAllowedPhaseOffset.

  • If CurrentTimeOffsetMaxAllowedPhaseOffset: The clock is adjusted gradually using the clock rate.
  • If CurrentTimeOffset > MaxAllowedPhaseOffset: The clock is set immediately.

For gradual adjustments, w32tm calculates a PhaseCorrection value. The algorithm for this calculation differs slightly between Windows versions.

Windows Server 2016 and later:

PhaseCorrection_raw = (CurrentTimeOffset) ÷ (16 × PhaseCorrectRate × pollIntervalInSeconds)
MaximumCorrection = (CurrentTimeOffset) ÷ (UpdateInterval ÷ 100)
PhaseCorrection = min(PhaseCorrection_raw, MaximumCorrection)

Windows Server 2012 R2 and earlier:

PhaseCorrection = (CurrentTimeOffset) ÷ (PhaseCorrectRate × UpdateInterval)

In all versions, the final check is:

PhaseCorrection ≤ SystemClockRate ÷ 2

These calculations use registry values like PhaseCorrectRate, UpdateInterval, MaxAllowedPhaseOffset, and SystemClockRate, which are often measured in clock ticks (1 ms = 10,000 clock ticks in Windows). MaxAllowedPhaseOffset in the registry is configured in seconds.

To view SystemClockRate and pollIntervalInSeconds in seconds, use:

w32tm /query /status /verbose

This command provides detailed status information, including poll interval and clock rate, essential for understanding the time synchronization behavior of your windows ntp server.

Leap Indicator: 0(no warning)
Stratum: 1 (primary reference - syncd by radio clock)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0003538s
Root Dispersion: 0.0100002s
ReferenceId: 0x00000000 (unspecified)
Last Successful Sync Time: 5/23/2023 7:51:39 PM
Source: VM IC Time Synchronization Provider
Poll Interval: 6 (64s)
Phase Offset: -0.0000013s
ClockRate: 0.0156250s
State Machine: 2 (Sync)
Time Source Flags: 3 (Authenticated Hardware )
Server Role: 0 (None)
Last Sync Error: 0 (The command completed successfully.)
Time since Last Good Sync Time: 15.7344985s

Convert SystemClockRate from seconds to clock ticks using: (value in seconds) × 1,000 × 10,000.

Managing Windows NTP Server Settings with Local Group Policy Editor

For centralized management of your windows ntp server and other domain computers, Group Policy Objects (GPOs) in Local Group Policy Editor provide a powerful interface to configure Windows Time service settings. You can define whether a computer acts as an NTPServer or NTPClient, configure synchronization mechanisms, and establish reliable time sources. Group Policy settings are applicable to domain controllers starting from Windows Server 2003 onwards.

Group Policy settings for Windows Time service are located under Computer ConfigurationAdministrative TemplatesSystemWindows Time Service in the Local Group Policy Editor. These policies translate into registry settings, overriding any pre-existing values in the Windows Time service registry section. Some default GPO settings differ from the default Windows Time service registry entries.

Group Policy Registry locations1, 2
Global Configuration Settings W32TimeConfig, W32TimeParameters
Time ProvidersConfigure Windows NTP Client W32TimeTimeProvidersNtpClient
Time ProvidersEnable Windows NTP Client W32TimeTimeProvidersNtpClient
Time ProvidersEnable Windows NTP Server W32TimeTimeProvidersNtpServer

1 Subkey: HKLMSOFTWAREPoliciesMicrosoft 2 Subkey: HKLMSYSTEMCurrentControlSetServicesW32Time

Note: Removing a Group Policy setting will remove the corresponding entry from the policy area of the registry, reverting to the locally defined settings or defaults.

Default GPO Settings for W32Time

When enabled, the Global Configuration Settings GPO provides the following default values, which can be customized for your windows ntp server:

Group Policy setting Default value
AnnounceFlags 10
ChainDisable 0
ChainEntryTimeout 16
ChainLoggingRate 30
ChainMaxEntries 128
ChainMaxHostEntries 4
ClockAdjustmentAuditLimit 800
ClockHoldoverPeriod 7800
EventLogFlags 2
FrequencyCorrectRate 4
HoldPeriod 5
LargePhaseOffset 50,000,000
LocalClockDispersion 10
MaxAllowedPhaseOffset 300
MaxNegPhaseCorrection 172,800 (48 hours)
MaxPollInterval 10
MaxPosPhaseCorrection 172,800 (48 hours)
MinPollInterval 6
PhaseCorrectRate 1
PollAdjustFactor 5
RequireSecureTimeSyncRequests 0
SpikeWatchPeriod 900
UpdateInterval 100 (1 second)
UtilizeSslTimeData 1

GPO Settings for NTP Client

The Configure Windows NTP Client policy, located under Computer ConfigurationAdministrative TemplatesSystemWindows Time ServiceTime Providers, contains these default settings, relevant when configuring clients to synchronize with your windows ntp server:

Group Policy setting Default value
NtpServer time.windows.com, 0x9
Type NT5DS (domain-joined computers), NTP (non-domain-joined computers)
CrossSiteSyncFlags 2
ResolvePeerBackoffMinutes 15
ResolvePeerBackoffMaxTimes 7
SpecialPollInterval 1024
EventLogFlags 0

Note: If you configure the NtpServer value using Group Policy within the Configure Windows NTP Client policy for a domain member, the Windows Time Service will prioritize this GPO setting and ignore the local NtpServer Registry value. Use w32tm /query /configuration to verify the effective NTP configuration.

Windows Time Service Registry Reference for Advanced Configuration

For in-depth configuration and troubleshooting of your windows ntp server, understanding the Windows Time service registry settings is crucial. These settings are located under the following registry paths:

HKLMSYSTEMCurrentControlSetServicesW32Time
HKLMSYSTEMCurrentControlSetServicesW32TimeConfig
HKLMSYSTEMCurrentControlSetServicesW32TimeParameters
HKLMSYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient
HKLMSYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpServer

Warning: Modifying these registry keys directly should be done with extreme caution and only for troubleshooting or advanced configuration scenarios. Incorrect registry modifications can lead to serious system issues.

Time values in the registry can be in clock ticks or seconds. Remember the conversion: 1 ms = 10,000 clock ticks.

W32TimeConfig Registry Entries

Registry entry Versions Description
AnnounceFlags All versions Determines if the computer is advertised as a reliable time server. Essential for your windows ntp server. – 0x00: Not a time server – 0x01: Always time server – 0x02: Automatic time server – 0x04: Always-reliable time server – 0x08: Automatic reliable time server Default for domain members and standalone systems: 10. For a designated windows ntp server, consider 0x5 (Always-reliable time server and Always time server).
ClockAdjustmentAuditLimit Windows Server 2016+; Windows 10+ Minimum local clock adjustment (PPM) to trigger event logging. Default: 800.
ClockHoldoverPeriod Windows Server 2016+; Windows 10+ Maximum time (seconds) a system clock can maintain accuracy without syncing before rediscovering time sources. Default: 7,800 seconds.
EventLogFlags All versions Controls logged events. – 0x1: Time jump – 0x2: Source change Default for domain members and standalone systems: 2.
FrequencyCorrectRate All versions Clock correction rate. Smaller values: unstable; larger values: slow sync. Default for domain members and standalone systems: 4. Important: Zero is invalid and will be reset to 1 on older Windows versions.
HoldPeriod All versions Duration (seconds) to disable spike detection for faster initial sync. Default for domain members and standalone systems: 5.
LargePhaseOffset All versions Time offset (10-7 seconds) considered a spike. Default for domain members and standalone systems: 50000000.
LocalClockDispersion All versions Assumed dispersion (seconds) when using the CMOS clock. Default for domain members and standalone systems: 10.
MaxAllowedPhaseOffset All versions Maximum offset (seconds) for clock rate adjustment. Exceeding this results in immediate clock setting. Default for domain members: 300, standalone: 1.
MaxClockRate All versions System-maintained, reserved. Do not modify. Default for domain members and standalone systems: 155860.
MaxNegPhaseCorrection All versions Maximum negative time correction (seconds). Larger changes trigger event logging. 0xFFFFFFFF: always correct. Default for domain members: 0xFFFFFFFF, domain controllers: 172,800, standalone: 54,000.
MaxPollInterval All versions Maximum poll interval (log base 2 seconds). Default for domain controllers: 10, domain members and standalone: 15.
MaxPosPhaseCorrection All versions Maximum positive time correction (seconds). Larger changes trigger event logging. 0xFFFFFFFF: always correct. Default for domain members: 0xFFFFFFFF, domain controllers: 172,800, standalone: 54,000.
MinClockRate All versions System-maintained, reserved. Do not modify. Default for domain members and standalone systems: 155860.
MinPollInterval All versions Minimum poll interval (log base 2 seconds). Default for domain controllers: 6, domain members and standalone: 10.
PhaseCorrectRate All versions Phase error correction rate. Smaller values: faster correction, instability; larger values: slower correction. Default for domain members: 1, standalone: 7. Important: Zero is invalid and will be reset to 1 on older Windows versions.
PollAdjustFactor All versions Controls poll interval adjustment based on error. Higher value: more aggressive interval decrease. Default for domain members and standalone systems: 5.
SpikeWatchPeriod All versions Duration (seconds) a suspicious offset must persist before acceptance. Default for domain members and standalone: 900.
TimeJumpAuditOffset All versions Time jump audit threshold (seconds). Corrections exceeding this log audit events.
UpdateInterval All versions Clock ticks between phase correction adjustments. Default for domain controllers: 100, domain members: 30,000, standalone: 360,000. Important: Zero is invalid and will be reset to 1 on older Windows versions.
UtilizeSslTimeData Windows 10 build 1511+ 1: W32Time uses SSL timestamps for secure time seeding. See Secure Time Seeding – improving time keeping in Windows.

W32TimeParameters Registry Entries

Registry entry Versions Description
NtpServer All versions Space-delimited list of NTP servers. For a windows ntp server acting as a primary time source, this list should point to reliable external sources. Flags: – 0x1 SpecialInterval – 0x2 UseAsFallbackOnly – 0x4 SymmetricActive – 0x8 Client Default for standalone: time.windows.com,0x1. No default for domain members.
ServiceDll All versions System-maintained, reserved. Default: %windir%\System32\W32Time.dll. Do not modify.
ServiceDllUnloadOnStop All versions 1: Unload W32Time DLL on service stop. 0: Keep DLL loaded. Default: 1.
ServiceMain All versions System-maintained, reserved. Default: SvchostEntry_W32Time. Do not modify.
Type All versions Synchronization type. – NoSyncNTP: Sync from NtpServer list. – NT5DS: Sync from domain hierarchy. – AllSync Default for domain members: NT5DS, standalone: NTP. For a windows ntp server, consider NTP or AllSync depending on your setup.

W32TimeTimeProvidersNtpClient Registry Entries

Registry entry Version Description
AllowNonstandardModeCombinations All versions 1: Allow nonstandard mode combinations in peer sync. Default for domain members and standalone: 1.
CompatibilityFlags All versions Compatibility flags. Default for domain members and standalone: 0x80000000.
CrossSiteSyncFlags All versions Determines cross-site synchronization. – 0: None – 1: PdcOnly – 2: All Ignored if NT5DS is not set. Default for domain members and standalone: 2.
DllName All versions System-maintained, reserved. Default: %windir%\System32\W32Time.dll. Do not modify.
Enabled All versions 1: NtpClient provider enabled. 0: Disabled. Default for domain members and standalone: 1.
EventLogFlags All versions Events logged by NtpClient. – 0x1: Reachability changes – 0x2: Large sample skew (Windows Server 2003-2008 R2 only) Default for domain members and standalone: 1.
InputProvider All versions 1: Enable NtpClient as input provider. 0: Disable. Default for domain members and standalone: 1.
LargeSampleSkew All versions Large sample skew threshold (seconds) for logging. SEC compliance: 3 seconds. Default for domain members and standalone: 3.
LastClockRate All versions System-maintained, reserved. Default for domain members and standalone: 156250. Do not modify.
ResolvePeerBackOffMaxTimes All versions Max times to double wait interval on peer discovery failure. Default for domain members and standalone: 7.
ResolvePeerBackoffMinutes All versions Initial wait interval (minutes) before peer discovery. Default for domain members and standalone: 15.
SpecialPollInterval All versions Special poll interval (seconds) for manual peers with SpecialInterval flag (0x1). Default for domain members: 3,600, standalone: 604,800. Subject to MinPollInterval and MaxPollInterval in W32TimeConfig (Windows 1703+).
SpecialPollTimeRemaining All versions System-maintained, reserved. Time (seconds) before resync after restart. Do not modify.

W32TimeTimeProvidersNtpServer Registry Entries

Registry entry Versions Description
AllowNonstandardModeCombinations All versions 1: Allow nonstandard mode combinations in client-server sync. Default for domain members and standalone: 1.
ChainDisable 0: Chaining enabled. 1: Chaining disabled. Disabling affects RODC synchronization. Default: 0.
ChainEntryTimeout Maximum time (seconds) for entries in chaining table before expiry. Default: 16.
ChainLoggingRate Frequency (minutes) of logging successful/unsuccessful chaining attempts. Default: 30.
ChainMaxEntries Maximum entries in chaining table. Incoming requests discarded if full. Default: 128.
ChainMaxHostEntries Maximum entries per host in chaining table. Default: 4.
DllName All versions System-maintained, reserved. Default: %windir%\System32\W32Time.dll. Do not modify.
Enabled All versions 1: NtpServer provider enabled. 0: Disabled. Default for domain members and standalone: 0. To enable your windows ntp server, set this to 1.
EventLogFlags All versions Events logged by NtpServer. – 0x1: Time changes – 0x2: System clock updates – 0x4: Service start/stop Default for domain members and standalone: 1.
InputProvider All versions 1: Enable NtpServer as input provider. 0: Disable. Default for domain members and standalone: 0. For a windows ntp server, this is typically set to 0 as it provides time, not consumes it as input.
RequireSecureTimeSyncRequests Windows 8+ 1: DC only responds to secure time sync requests. 0: Responds to older protocols. Default: 0.

Enhanced Logging for In-depth Analysis of Windows NTP Server

For more detailed logging beyond the standard System Event log, you can add the following registry entries under HKLMSYSTEMCurrentControlSetServicesW32TimeConfig on your windows ntp server:

Entry Versions Description
FileLogEntries All versions Number of entries in the Windows Time log file. Default: none (no logging). Valid values: 0-300. Does not affect standard event log entries.
FileLogName All versions Path and filename for the Windows Time log. Default: blank. Should be set if FileLogEntries is configured.
FileLogSize All versions Log file size (bytes) for circular logging. Use 1000000 or larger. Requires FileLogEntries and FileLogName to be set.

By configuring these enhanced logging settings, you can gain deeper insights into the operation of your windows ntp server and troubleshoot complex time synchronization issues.

Related Information

For further reading and advanced topics related to Windows Time service and NTP, refer to the official Microsoft documentation and RFC specifications for Network Time Protocol. Understanding these resources will help you optimize and maintain a reliable and accurate windows ntp server for your network.

A command prompt window showing the usage of the w32tm command, a key tool for managing Windows Time service and configuring a Windows NTP server.

The Local Group Policy Editor displaying settings for the Windows Time Service, illustrating how group policies can be used to manage and configure a Windows NTP server across a domain.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *