<!--
  ~ Copyright 2016-2022 Hedera Hashgraph, LLC
  ~
  ~ This software is the confidential and proprietary information of
  ~ Hedera Hashgraph, LLC. ("Confidential Information"). You shall not
  ~ disclose such Confidential Information and shall use it only in
  ~ accordance with the terms of the license agreement you entered into
  ~ with Hedera Hashgraph.
  ~
  ~ HEDERA HASHGRAPH MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  ~ THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  ~ TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  ~ PARTICULAR PURPOSE, OR NON-INFRINGEMENT. HEDERA HASHGRAPH SHALL NOT BE LIABLE FOR
  ~ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  ~ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  -->

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

	<!-- Required Maven Version -->
	<modelVersion>4.0.0</modelVersion>

	<!-- Project Configuration -->
	<groupId>com.swirlds</groupId>
	<artifactId>swirlds-platform</artifactId>
	<version>0.27.0</version>
	<packaging>pom</packaging>

	<!-- Project Information (Required for Sonatype) -->
	<name>${project.artifactId}</name>

	<description>
		Swirlds is a software platform designed to build fully-distributed applications that harness the power of the
		cloud without servers. Now you can develop applications with fairness in decision making, speed, trust and
		reliability, at a fraction of the cost of traditional server-based platforms.
	</description>

	<url>https://www.swirlds.com/</url>
	<inceptionYear>2016</inceptionYear>

	<organization>
		<name>Swirlds, Inc.</name>
		<url>https://www.swirlds.com</url>
	</organization>

	<!-- $$BEGIN_PROPRIETARY_LICENSE$$ -->
	<licenses>
		<license>
			<name>Swirlds Proprietary License</name>
			<url>https://github.com/swirlds/swirlds-platform/raw/develop/LICENSE.md</url>
		</license>
	</licenses>
	<!-- $$END_PROPRIETARY_LICENSE$$ -->
	<!-- $$BEGIN_OPEN_REVIEW_LICENSE$$
	<licenses>
		<license>
			<name>Hashgraph Open Review License</name>
			<url>https://github.com/hashgraph/swirlds-open-review/raw/master/LICENSE.md</url>
		</license>
	</licenses>
	$$END_OPEN_REVIEW_LICENSE$$ -->

	<developers>
		<developer>
			<name>Nathan Klick</name>
			<email>nathan@swirlds.com</email>
			<organization>Swirlds, Inc.</organization>
			<organizationUrl>https://www.swirlds.com</organizationUrl>
		</developer>
		<developer>
			<name>Lazar Petrovic</name>
			<email>lazar@swirlds.com</email>
			<organization>Swirlds, Inc.</organization>
			<organizationUrl>https://www.swirlds.com</organizationUrl>
		</developer>
		<developer>
			<name>Nosh Mody</name>
			<email>nosh@swirlds.com</email>
			<organization>Swirlds, Inc.</organization>
			<organizationUrl>https://www.swirlds.com</organizationUrl>
		</developer>
	</developers>

	<!-- Modules -->
	<modules>
		<!-- Common Packages -->
		<module>swirlds-common</module>
		<module>swirlds-logging</module>

		<!-- Main System Packages -->
		<module>swirlds-platform-core</module>

		<!-- Data Structure Packages -->
		<module>swirlds-merkle</module>
		<module>swirlds-fcqueue</module>
		<module>swirlds-fchashmap</module>
		<module>swirlds-virtualmap</module>
		<module>swirlds-jasperdb</module>
	</modules>

	<!-- Source Control Management -->
	<!-- $$BEGIN_PROPRIETARY_SCM$$ -->
	<scm>
		<connection>scm:git:git://github.com/swirlds/swirlds-platform.git</connection>
		<developerConnection>scm:git:ssh://github.com:swirlds/swirlds-platform.git</developerConnection>
		<url>https://github.com/swirlds/swirlds-platform</url>
	</scm>
	<!-- $$END_PROPRIETARY_SCM$$ -->
	<!-- $$BEGIN_OPEN_REVIEW_SCM$$
	<scm>
		<connection>scm:git:git://github.com/hashgraph/swirlds-open-review.git</connection>
		<developerConnection>scm:git:ssh://github.com:swirlds/swirlds-open-review.git</developerConnection>
		<url>https://github.com/hashgraph/swirlds-open-review</url>
	</scm>
	$$END_OPEN_REVIEW_SCM$$ -->

	<!-- Project Properties -->
	<properties>
		<!-- Maven and Java Configuration -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>17</maven.compiler.source>
		<maven.compiler.target>17</maven.compiler.target>

		<!-- Plugin Versions -->
		<!--
			These properties control the versions of the maven build plugins used by all the core platform components.

			Do not change these without understanding the impact. Any changes to these versions should be tested via
			unit and regression tests.
		-->

		<!-- Code Analysis Plugins -->
		<plugin.sonar.version>3.9.1.2184</plugin.sonar.version>
		<plugin.jacoco.version>0.8.7</plugin.jacoco.version>

		<!-- VCS Information Plugins -->
		<plugin.git.commitid.version>4.0.5</plugin.git.commitid.version>

		<!-- Core Maven Plugins -->
		<plugin.maven.clean.version>3.1.0</plugin.maven.clean.version>
		<plugin.maven.compiler.version>3.10.1</plugin.maven.compiler.version>
		<plugin.maven.deploy.version>2.8.2</plugin.maven.deploy.version>
		<plugin.maven.install.version>2.5.2</plugin.maven.install.version>
		<plugin.maven.resources.version>3.2.0</plugin.maven.resources.version>
		<plugin.maven.site.version>3.9.1</plugin.maven.site.version>
		<plugin.maven.surefire.version>3.0.0-M5</plugin.maven.surefire.version>
		<plugin.maven.jar.version>3.2.0</plugin.maven.jar.version>
		<plugin.maven.source.version>3.2.1</plugin.maven.source.version>
		<plugin.maven.javadoc.version>3.3.1</plugin.maven.javadoc.version>
		<plugin.maven.dependency.version>3.2.0</plugin.maven.dependency.version>
		<plugin.maven.release.version>2.5.3</plugin.maven.release.version>
		<plugin.maven.shade.version>3.2.4</plugin.maven.shade.version>
		<plugin.maven.gpg.version>3.0.1</plugin.maven.gpg.version>

		<!-- Maven CI/CD Utilities -->
		<plugin.versions.maven.version>2.10.0</plugin.versions.maven.version>
		<plugin.dependency.check.version>7.0.0</plugin.dependency.check.version>
		<plugin.license.maven.version>4.0.rc2</plugin.license.maven.version>
		<plugin.build.helper.version>3.2.0</plugin.build.helper.version>
		<plugin.nexus.staging.version>1.6.8</plugin.nexus.staging.version>
		<plugin.maven.reproducible.build.version>0.15</plugin.maven.reproducible.build.version>

		<!-- Dependency Versions -->
		<!--
			These properties control the versions of the third-party dependencies used by all the core platform
			components.

			Do not change these without understanding the impact. Any changes to these versions should be tested via
			unit and regression tests.
		-->

		<!-- Compile Time Dependencies -->
		<dep.ow2.asm.version>9.2</dep.ow2.asm.version>
		<dep.log4j2.version>2.17.1</dep.log4j2.version>
		<dep.jackson.version>2.13.2</dep.jackson.version>
		<dep.jackson.databind.version>2.13.2.1</dep.jackson.databind.version>
		<dep.portmapper.version>2.0.4</dep.portmapper.version>
		<dep.commons.io.version>2.11.0</dep.commons.io.version>
		<dep.commons.cli.version>1.5.0</dep.commons.cli.version>
		<dep.commons.lang3.version>3.12.0</dep.commons.lang3.version>
		<dep.commons.math3.version>3.6.1</dep.commons.math3.version>
		<dep.commons.collections4.version>4.4</dep.commons.collections4.version>
		<dep.commons.codec.version>1.15</dep.commons.codec.version>
		<dep.commons.compress.version>1.21</dep.commons.compress.version>
		<dep.slf4j.version>1.8.0-beta2</dep.slf4j.version>
		<dep.bouncy.castle.version>1.70</dep.bouncy.castle.version>
		<dep.javafx.version>17</dep.javafx.version>
		<dep.lazysodium.version>5.1.1</dep.lazysodium.version>
		<dep.jna.version>5.10.0</dep.jna.version>
		<dep.classgraph.version>4.8.65</dep.classgraph.version>
		<dep.picocli.version>4.6.1</dep.picocli.version>
		<dep.protobuf.version>3.19.4</dep.protobuf.version>

		<!-- Test Dependencies -->
		<!--
			JUnit versions after 5.5.0-M1 have known issues when used with a scope other than test.
			At this time surefire still has not fully resolved the underlying issues. Surefire has partially resolved
			several issues related to this problem and expect full resolution by Surefire version 3.0.0 GA releases.

			Please see https://github.com/junit-team/junit5/issues/2147
		-->
		<dep.junit.jupiter.version>5.5.0-M1</dep.junit.jupiter.version>
		<dep.mockito.version>4.1.0</dep.mockito.version>


	</properties>

	<!-- Dependency Management -->
	<dependencyManagement>
		<dependencies>
			<!-- Apache Log4j2 -->
			<dependency>
				<groupId>org.apache.logging.log4j</groupId>
				<artifactId>log4j-api</artifactId>
				<version>${dep.log4j2.version}</version>
			</dependency>

			<dependency>
				<groupId>org.apache.logging.log4j</groupId>
				<artifactId>log4j-core</artifactId>
				<version>${dep.log4j2.version}</version>
			</dependency>

			<!-- Jackson JSON BOM -->
			<dependency>
				<groupId>com.fasterxml.jackson</groupId>
				<artifactId>jackson-bom</artifactId>
				<version>${dep.jackson.version}</version>
				<type>pom</type>
				<scope>import</scope>
				<!-- Temporary Fix to Resolve CVE-2020-36518 -->
				<!-- It is preferable to use the BOM once a mainline fix is available via a Bill of Materials POM -->
				<exclusions>
					<exclusion>
						<groupId>com.fasterxml.jackson.core</groupId>
						<artifactId>jackson-databind</artifactId>
					</exclusion>
				</exclusions>
			</dependency>
			<dependency>
				<groupId>com.fasterxml.jackson.core</groupId>
				<artifactId>jackson-databind</artifactId>
				<version>${dep.jackson.databind.version}</version>
			</dependency>

			<!-- OffByNull PortMapper -->
			<dependency>
				<groupId>com.offbynull.portmapper</groupId>
				<artifactId>portmapper</artifactId>
				<version>${dep.portmapper.version}</version>
				<exclusions>
					<exclusion>
						<groupId>commons-io</groupId>
						<artifactId>commons-io</artifactId>
					</exclusion>
					<exclusion>
						<groupId>org.apache.commons</groupId>
						<artifactId>commons-lang3</artifactId>
					</exclusion>
					<exclusion>
						<groupId>org.apache.commons</groupId>
						<artifactId>commons-collections4</artifactId>
					</exclusion>
					<exclusion>
						<groupId>org.slf4j</groupId>
						<artifactId>slf4j-api</artifactId>
					</exclusion>
				</exclusions>
			</dependency>

			<!-- Apache Commons -->
			<dependency>
				<groupId>commons-io</groupId>
				<artifactId>commons-io</artifactId>
				<version>${dep.commons.io.version}</version>
			</dependency>

			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-lang3</artifactId>
				<version>${dep.commons.lang3.version}</version>
			</dependency>

			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-collections4</artifactId>
				<version>${dep.commons.collections4.version}</version>
			</dependency>

			<dependency>
				<groupId>commons-codec</groupId>
				<artifactId>commons-codec</artifactId>
				<version>${dep.commons.codec.version}</version>
			</dependency>

			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-compress</artifactId>
				<version>${dep.commons.compress.version}</version>
			</dependency>

			<dependency>
				<groupId>commons-cli</groupId>
				<artifactId>commons-cli</artifactId>
				<version>${dep.commons.cli.version}</version>
			</dependency>

			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-math3</artifactId>
				<version>${dep.commons.math3.version}</version>
			</dependency>

			<!-- SLF4J -->
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
				<version>${dep.slf4j.version}</version>
			</dependency>

			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-nop</artifactId>
				<version>${dep.slf4j.version}</version>
			</dependency>

			<!-- BouncyCastle -->
			<dependency>
				<groupId>org.bouncycastle</groupId>
				<artifactId>bcprov-jdk15on</artifactId>
				<version>${dep.bouncy.castle.version}</version>
			</dependency>

			<dependency>
				<groupId>org.bouncycastle</groupId>
				<artifactId>bcpkix-jdk15on</artifactId>
				<version>${dep.bouncy.castle.version}</version>
			</dependency>

			<!-- JavaFX -->
			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-base</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-graphics</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-web</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-controls</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-fxml</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-swing</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-media</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<dependency>
				<groupId>org.openjfx</groupId>
				<artifactId>javafx-util</artifactId>
				<version>${dep.javafx.version}</version>
			</dependency>

			<!-- LazySodium -->
			<dependency>
				<groupId>com.goterl</groupId>
				<artifactId>lazysodium-java</artifactId>
				<version>${dep.lazysodium.version}</version>
			</dependency>

			<dependency>
				<groupId>net.java.dev.jna</groupId>
				<artifactId>jna</artifactId>
				<version>${dep.jna.version}</version>
			</dependency>

			<!-- Classgraph -->
			<dependency>
				<groupId>io.github.classgraph</groupId>
				<artifactId>classgraph</artifactId>
				<version>${dep.classgraph.version}</version>
			</dependency>

			<!-- JUnit 5.x BOM -->
			<dependency>
				<groupId>org.junit</groupId>
				<artifactId>junit-bom</artifactId>
				<version>${dep.junit.jupiter.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>

			<!-- Mockito -->
			<dependency>
				<groupId>org.mockito</groupId>
				<artifactId>mockito-core</artifactId>
				<version>${dep.mockito.version}</version>
				<scope>test</scope>
			</dependency>

			<!-- PicoCLI -->
			<dependency>
				<groupId>info.picocli</groupId>
				<artifactId>picocli</artifactId>
				<version>${dep.picocli.version}</version>
			</dependency>

			<!-- Protobuf -->
			<dependency>
				<groupId>com.google.protobuf</groupId>
				<artifactId>protobuf-java</artifactId>
				<version>${dep.protobuf.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<!-- Repository Configuration -->
	<repositories>
		<repository>
			<id>maven-prerelease-channel</id>
			<url>https://us-maven.pkg.dev/swirlds-registry/maven-prerelease-channel</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>maven-develop-commits</id>
			<url>https://us-maven.pkg.dev/swirlds-registry/maven-develop-commits</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>maven-adhoc-commits</id>
			<url>https://us-maven.pkg.dev/swirlds-registry/maven-adhoc-commits</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>maven-develop-daily-snapshots</id>
			<url>https://us-maven.pkg.dev/swirlds-registry/maven-develop-daily-snapshots</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>maven-develop-snapshots</id>
			<url>https://us-maven.pkg.dev/swirlds-registry/maven-develop-snapshots</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>

	<!-- Build Lifecycle -->
	<build>
		<!-- Build Extensions -->
		<!--
			This section manages the version and base configuration for all the maven build extensions.
		-->
		<extensions>
			<extension>
				<groupId>com.google.cloud.artifactregistry</groupId>
				<artifactId>artifactregistry-maven-wagon</artifactId>
				<version>2.1.4</version>
			</extension>
		</extensions>

		<!-- Plugin Management -->
		<!--
			This section manages the version and base configuration for all the maven build lifecycle plugins.
		-->
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>io.github.zlika</groupId>
					<artifactId>reproducible-build-maven-plugin</artifactId>
					<version>${plugin.maven.reproducible.build.version}</version>
					<executions>
						<execution>
							<goals>
								<goal>strip-jar</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
				<!-- Code Analysis Plugins -->
				<plugin>
					<groupId>org.jacoco</groupId>
					<artifactId>jacoco-maven-plugin</artifactId>
					<version>${plugin.jacoco.version}</version>
				</plugin>
				<plugin>
					<groupId>org.sonarsource.scanner.maven</groupId>
					<artifactId>sonar-maven-plugin</artifactId>
					<version>${plugin.sonar.version}</version>
				</plugin>

				<!-- VCS Information Plugins -->
				<plugin>
					<groupId>pl.project13.maven</groupId>
					<artifactId>git-commit-id-plugin</artifactId>
					<version>${plugin.git.commitid.version}</version>
					<executions>
						<execution>
							<id>git-commit-id</id>
							<goals>
								<goal>revision</goal>
							</goals>
							<phase>initialize</phase>
						</execution>
					</executions>
					<configuration>
						<generateGitPropertiesFile>true</generateGitPropertiesFile>
						<commitIdGenerationMode>full</commitIdGenerationMode>
						<abbrevLength>8</abbrevLength>
						<includeOnlyProperties>
							<includeOnlyProperty>^git.commit.id.(abbrev|full)$</includeOnlyProperty>
							<includeOnlyProperty>^git.build.version$</includeOnlyProperty>
						</includeOnlyProperties>
					</configuration>
				</plugin>

				<!-- Apache Maven Core Plugins -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-clean-plugin</artifactId>
					<version>${plugin.maven.clean.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>${plugin.maven.compiler.version}</version>
					<dependencies>
						<dependency>
							<groupId>org.ow2.asm</groupId>
							<artifactId>asm</artifactId>
							<version>${dep.ow2.asm.version}</version>
						</dependency>
					</dependencies>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>${plugin.maven.deploy.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-install-plugin</artifactId>
					<version>${plugin.maven.install.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-resources-plugin</artifactId>
					<version>${plugin.maven.resources.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-site-plugin</artifactId>
					<version>${plugin.maven.site.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>${plugin.maven.surefire.version}</version>
					<dependencies>
						<dependency>
							<groupId>org.junit.jupiter</groupId>
							<artifactId>junit-jupiter-engine</artifactId>
							<version>${dep.junit.jupiter.version}</version>
						</dependency>
						<dependency>
							<groupId>org.ow2.asm</groupId>
							<artifactId>asm</artifactId>
							<version>${dep.ow2.asm.version}</version>
						</dependency>
					</dependencies>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-jar-plugin</artifactId>
					<version>${plugin.maven.jar.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-source-plugin</artifactId>
					<version>${plugin.maven.source.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-javadoc-plugin</artifactId>
					<version>${plugin.maven.javadoc.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-dependency-plugin</artifactId>
					<version>${plugin.maven.dependency.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-release-plugin</artifactId>
					<version>${plugin.maven.release.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-shade-plugin</artifactId>
					<version>${plugin.maven.shade.version}</version>
				</plugin>


				<!-- Maven CI/CD Utility Plugins -->
				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>versions-maven-plugin</artifactId>
					<version>${plugin.versions.maven.version}</version>
				</plugin>
				<plugin>
					<groupId>org.owasp</groupId>
					<artifactId>dependency-check-maven</artifactId>
					<version>${plugin.dependency.check.version}</version>
				</plugin>
				<plugin>
					<groupId>com.mycila</groupId>
					<artifactId>license-maven-plugin</artifactId>
					<version>${plugin.license.maven.version}</version>
				</plugin>
				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>build-helper-maven-plugin</artifactId>
					<version>${plugin.build.helper.version}</version>
				</plugin>
				<plugin>
					<groupId>org.sonatype.plugins</groupId>
					<artifactId>nexus-staging-maven-plugin</artifactId>
					<version>${plugin.nexus.staging.version}</version>
					<extensions>true</extensions>
					<configuration>
						<serverId>ossrh</serverId>
						<nexusUrl>https://oss.sonatype.org/</nexusUrl>
						<autoReleaseAfterClose>false</autoReleaseAfterClose>
						<stagingProgressTimeoutMinutes>15</stagingProgressTimeoutMinutes>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-gpg-plugin</artifactId>
					<version>${plugin.maven.gpg.version}</version>
					<configuration>
						<executable>gpg2</executable>
						<gpgArguments>
							<gpgArgument>--pinentry-mode</gpgArgument>
							<gpgArgument>loopback</gpgArgument>
						</gpgArguments>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>


		<!-- Plugin Definitions -->
		<!--
			This section enables and configures plugins that are inherited and apply to all the maven submodules.
		-->
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>versions-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<configuration>
					<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
					<reportOutputDirectory>${project.basedir}/sdk/docs</reportOutputDirectory>
					<destDir>javadoc</destDir>
					<excludePackageNames>
						com.swirlds.p2p.*:com.swirlds.platform.fc.*:com.swirlds.merkle.map.internal:com.swirlds.merkle.map.internal.*:com.swirlds.fs.internal:com.swirlds.crypto.internal:com.swirlds.platform.internal:com.swirlds.merkle.map.list
					</excludePackageNames>
					<sourceFileExcludes>
						<sourceFileExclude>com/swirlds/platform/Marshal**</sourceFileExclude>
						<sourceFileExclude>com/swirlds/platform/CryptoStatistics**</sourceFileExclude>
						<sourceFileExclude>com/swirlds/platform/StreamUtilities**</sourceFileExclude>
						<sourceFileExclude>com/swirlds/crypto/CryptoMarshal**</sourceFileExclude>
					</sourceFileExcludes>
					<show>public</show>
					<additionalOptions>-html5</additionalOptions>
					<windowtitle>Swirlds Platform API</windowtitle>
					<doctitle>Swirlds Platform API</doctitle>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-clean-plugin</artifactId>
				<configuration>
					<filesets>
						<fileset>
							<directory>${project.basedir}/sdk/docs/javadoc</directory>
							<includes>
								<include>**/*</include>
							</includes>
						</fileset>
						<fileset>
							<directory>${project.basedir}/sdk/data/repos/app</directory>
							<includes>
								<include>**/*</include>
							</includes>
						</fileset>
						<fileset>
							<directory>${project.basedir}/sdk/data/lib</directory>
							<includes>
								<include>**/*.jar</include>
							</includes>
						</fileset>
						<fileset>
							<directory>${project.basedir}/sdk/data/apps</directory>
							<includes>
								<include>**/*.jar</include>
							</includes>
						</fileset>
						<fileset>
							<directory>${project.basedir}/sdk/data/saved</directory>
							<includes>
								<include>**/*</include>
							</includes>
						</fileset>
						<fileset>
							<directory>${project.basedir}/sdk</directory>
							<includes>
								<include>*.csv</include>
								<include>debug/**</include>
								<include>swirlds.log</include>
								<include>swirlds.*.log</include>
								<include>regression.log</include>
								<include>remoteExperiment.tar.gz</include>
								<include>settingsUsed.txt</include>
								<include>*Address.txt</include>
								<include>*Addresses.txt</include>
								<include>ExpectedMap.json</include>
								<include>ExpectedMap.json.gz</include>
							</includes>
						</fileset>
						<fileset>
							<directory>${project.basedir}/sdk/data</directory>
							<includes>
								<include>lifecycle/*</include>
							</includes>
						</fileset>
					</filesets>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<archive>
						<manifestEntries>
							<Sealed>true</Sealed>
							<Built-By>Swirlds, Inc.</Built-By>
						</manifestEntries>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.owasp</groupId>
				<artifactId>dependency-check-maven</artifactId>
				<configuration>
					<autoUpdate>true</autoUpdate>
					<golangModEnabled>false</golangModEnabled>
					<golangDepEnabled>false</golangDepEnabled>
					<nugetconfAnalyzerEnabled>false</nugetconfAnalyzerEnabled>
					<nuspecAnalyzerEnabled>false</nuspecAnalyzerEnabled>
					<swiftPackageManagerAnalyzerEnabled>false</swiftPackageManagerAnalyzerEnabled>
					<suppressionFile>.mvn/dep-check-suppression.xml</suppressionFile>
				</configuration>
			</plugin>
			<plugin>
				<groupId>io.github.zlika</groupId>
				<artifactId>reproducible-build-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>pl.project13.maven</groupId>
				<artifactId>git-commit-id-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<!-- Profiles -->
	<profiles>
		<!-- Automatic Profile (not for manual use) -->
		<!--
		We support the use of the environment variable MAVEN_OPTS to allow extra JVM & Maven options to be passed
		through to unit tests. This profile is to handle cases where the MAVEN_OPTS environment variable is not set or
		undefined by creating an empty environment variable. The profile below should not be modified and needs to
		remain here in the parent POM file. Also, this profile should be copied to all other POM files that use
		the MAVEN_OPTS environment variable in their Surefire plugin definitions. Failing to include this profile when
		launching surefire tests where the MAVEN_OPTS is undefined will result in erroneous error messages.

		CircleCI depends on the MAVEN_OPTS environment variable in order to specify the appropriate amount of
		maximum memory a maven process (including surefire) may consume. CircleCI passes an appropriate
		JVM switch (-Xmx) via the MAVEN_OPTS variable to enforce the correct memory limits.

		Additionally, the MAVEN_OPTS variable allows developers to pass custom JVM arguments when launching unit tests by
		specifying them using the maven -D switch. See the following examples:

			mvn -DMAVEN_OPTS=-Xmx8g test
			mvn -DMAVEN_OPTS="-Xmx8g -Xms8g" test
			mvn -DMAVEN_OPTS="-Xmx8g -XX:+UnlockExperimentalVMOptions -XX:+UseZGC" test

		This comment should be copied along with this profile to every POM file that uses the MAVEN_OPTS variable.
		-->
		<profile>
			<id>default-variable-maven-opts</id>
			<activation>
				<property>
					<name>!env.MAVEN_OPTS</name>
				</property>
			</activation>
			<properties>
				<env.MAVEN_OPTS/>
			</properties>
		</profile>

		<!-- Automatic Profile (not for manual use) -->
		<!--
		In order to support selective activation of the JaCoCo maven plugin, this profile should be copied along with
		this comment to every POM file that uses the argLine variable.
		-->
		<profile>
			<id>default-variable-argLine</id>
			<activation>
				<property>
					<name>!argLine</name>
				</property>
			</activation>
			<properties>
				<argLine/>
			</properties>
		</profile>

		<profile>
			<id>release</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.codehaus.mojo</groupId>
						<artifactId>build-helper-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>rootloc-property</id>
								<phase>validate</phase>
								<goals>
									<goal>rootlocation</goal>
								</goals>
								<configuration>
									<rootLocationProperty>helper.root.dir</rootLocationProperty>
								</configuration>
							</execution>
							<execution>
								<id>timestamp-property</id>
								<phase>validate</phase>
								<goals>
									<goal>timestamp-property</goal>
								</goals>
								<configuration>
									<locale>en_US</locale>
									<name>helper.current.year</name>
									<pattern>yyyy</pattern>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>release-open-review</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
					<value>open-review</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>com.mycila</groupId>
						<artifactId>license-maven-plugin</artifactId>
						<configuration>
							<aggregate>true</aggregate>
							<encoding>${project.build.sourceEncoding}</encoding>
							<headerDefinitions>
								<headerDefinition>${helper.root.dir}/.circleci/license/java_style.xml</headerDefinition>
								<headerDefinition>${helper.root.dir}/.circleci/license/xml_tilde_style.xml
								</headerDefinition>
							</headerDefinitions>
							<mapping>
								<java>JAVA_STYLE</java>
								<xml>XML_TILDE_STYLE</xml>
								<pom>XML_TILDE_STYLE</pom>
								<html>XML_TILDE_STYLE</html>
							</mapping>
							<licenseSets>
								<licenseSet>
									<header>${helper.root.dir}/.circleci/license/open_review/header.txt</header>
									<excludes>
										<exclude>.circleci/**</exclude>
										<exclude>changelog.md</exclude>
										<exclude>license.md</exclude>
										<exclude>readme.md</exclude>
										<exclude>docs/**</exclude>
										<exclude>**/src/main/resources/**</exclude>
										<exclude>**/src/test/resources/**</exclude>
										<exclude>**/regression/**</exclude>
										<exclude>platform-apps/**</exclude>
										<exclude>**/sdk/data/**</exclude>
										<exclude>**/sdk/testing/**</exclude>
										<exclude>**/sdk/docs/**</exclude>
										<exclude>**/sdk/kernels/**</exclude>
										<exclude>**/sdk/settings.txt</exclude>
										<exclude>**/sdk/config.txt</exclude>
										<exclude>**/sdk/README.txt</exclude>
										<exclude>archive/**</exclude>
									</excludes>
								</licenseSet>
								<licenseSet>
									<header>${helper.root.dir}/.circleci/license/apache2/header.txt</header>
									<includes>
										<include>platform-apps/**</include>
									</includes>
									<excludes>
										<exclude>.circleci/**</exclude>
										<exclude>changelog.md</exclude>
										<exclude>license.md</exclude>
										<exclude>readme.md</exclude>
										<exclude>docs/**</exclude>
										<exclude>**/src/main/resources/**</exclude>
										<exclude>**/src/test/resources/**</exclude>
										<exclude>**/regression/**</exclude>
										<exclude>**/sdk/data/**</exclude>
										<exclude>**/sdk/testing/**</exclude>
										<exclude>**/sdk/docs/**</exclude>
										<exclude>**/sdk/settings.txt</exclude>
										<exclude>**/sdk/config.txt</exclude>
										<exclude>**/sdk/README.txt</exclude>
										<exclude>archive/**</exclude>
									</excludes>
								</licenseSet>
							</licenseSets>
							<properties>
								<license.url>
									https://github.com/hashgraph/swirlds-open-review/raw/master/LICENSE.md
								</license.url>
								<owner>
									Hedera Hashgraph, LLC
								</owner>
								<helper.current.year>
									${helper.current.year}
								</helper.current.year>
							</properties>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>release-sonatype</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
					<value>sonatype</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.sonatype.plugins</groupId>
						<artifactId>nexus-staging-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>nexus-staging</id>
								<phase>deploy</phase>
								<goals>
									<goal>deploy</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-gpg-plugin</artifactId>
						<executions>
							<execution>
								<id>sign-artifacts</id>
								<phase>verify</phase>
								<goals>
									<goal>sign</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-javadoc</id>
								<goals>
									<goal>aggregate-jar</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<destDir>${project.build.directory}/apidocs</destDir>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<configuration>
							<skipSource>true</skipSource>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<distributionManagement>
				<snapshotRepository>
					<id>ossrh</id>
					<url>https://oss.sonatype.org/content/repositories/snapshots</url>
				</snapshotRepository>
				<repository>
					<id>ossrh</id>
					<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
				</repository>
			</distributionManagement>
			<modules>
				<module>swirlds-unit-tests</module>
			</modules>
		</profile>

		<profile>
			<id>release-develop-snapshot</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
					<value>develop-snapshot</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-javadoc</id>
								<goals>
									<goal>aggregate-jar</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<destDir>${project.build.directory}/apidocs</destDir>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<configuration>
							<skipSource>true</skipSource>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<distributionManagement>
				<snapshotRepository>
					<id>maven-develop-snapshots</id>
					<url>artifactregistry://us-maven.pkg.dev/swirlds-registry/maven-develop-snapshots</url>
				</snapshotRepository>
			</distributionManagement>
		</profile>

		<profile>
			<id>release-develop-daily-snapshot</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
					<value>develop-daily-snapshot</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-javadoc</id>
								<goals>
									<goal>aggregate-jar</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<destDir>${project.build.directory}/apidocs</destDir>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<configuration>
							<skipSource>true</skipSource>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<distributionManagement>
				<snapshotRepository>
					<id>maven-develop-snapshots</id>
					<url>artifactregistry://us-maven.pkg.dev/swirlds-registry/maven-develop-daily-snapshots</url>
				</snapshotRepository>
			</distributionManagement>
		</profile>

		<profile>
			<id>release-develop-commit</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
					<value>develop-commit</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-javadoc</id>
								<goals>
									<goal>aggregate-jar</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<destDir>${project.build.directory}/apidocs</destDir>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<configuration>
							<skipSource>true</skipSource>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<distributionManagement>
				<repository>
					<id>maven-develop-snapshots</id>
					<url>artifactregistry://us-maven.pkg.dev/swirlds-registry/maven-develop-commits</url>
				</repository>
			</distributionManagement>
		</profile>

		<profile>
			<id>release-adhoc-commit</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
					<value>adhoc-commit</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-javadoc</id>
								<goals>
									<goal>aggregate-jar</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<destDir>${project.build.directory}/apidocs</destDir>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<configuration>
							<skipSource>true</skipSource>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<distributionManagement>
				<repository>
					<id>maven-develop-snapshots</id>
					<url>artifactregistry://us-maven.pkg.dev/swirlds-registry/maven-adhoc-commits</url>
				</repository>
			</distributionManagement>
		</profile>

		<profile>
			<id>release-prerelease-channel</id>
			<activation>
				<property>
					<name>env.RELEASE</name>
					<value>prerelease-channel</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-javadoc</id>
								<goals>
									<goal>aggregate-jar</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<destDir>${project.build.directory}/apidocs</destDir>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<configuration>
							<skipSource>true</skipSource>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<distributionManagement>
				<repository>
					<id>maven-develop-snapshots</id>
					<url>artifactregistry://us-maven.pkg.dev/swirlds-registry/maven-prerelease-channel</url>
				</repository>
			</distributionManagement>
			<modules>
				<module>swirlds-unit-tests</module>
			</modules>
		</profile>

		<profile>
			<id>default-build</id>
			<activation>
				<activeByDefault>true</activeByDefault>
				<property>
					<name>env.RELEASE</name>
					<value>!sonatype</value>
				</property>
			</activation>
			<!-- $$BEGIN_OPEN_REVIEW_REMOVE$$ -->
			<modules>
				<!-- Main System Packages -->
				<module>swirlds</module>

				<!-- Regression Packages -->
				<module>platform-apps</module>

				<!-- Test Packages-->
				<module>swirlds-unit-tests</module>

				<!-- Benchmark Packages -->
				<module>swirlds-benchmarks</module>
			</modules>
			<!-- $$END_OPEN_REVIEW_REMOVE$$ -->
		</profile>

		<!-- $$BEGIN_PROPRIETARY_SONAR$$ -->
		<!-- Sonar Profile -->
		<profile>
			<id>sonar</id>
			<properties>
				<!-- SonarCloud Properties -->
				<sonar.jacoco.path>target/site/jacoco-aggregate/jacoco.xml</sonar.jacoco.path>
				<sonar.jacoco.alt.path>target/site/jacoco/jacoco.xml</sonar.jacoco.alt.path>
				<sonar.organization>swirlds</sonar.organization>
				<sonar.host.url>https://sonarcloud.io</sonar.host.url>
				<sonar.language>java</sonar.language>
				<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>

				<sonar.coverage.jacoco.xmlReportPaths>
					${maven.multiModuleProjectDirectory}/target/site/jacoco-aggregate/jacoco.xml
				</sonar.coverage.jacoco.xmlReportPaths>
			</properties>
			<build>
				<plugins>
					<plugin>
						<groupId>org.sonarsource.scanner.maven</groupId>
						<artifactId>sonar-maven-plugin</artifactId>
					</plugin>
					<plugin>
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>jacoco-agent</id>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
							</execution>
							<execution>
								<id>jacoco-report</id>
								<phase>verify</phase>
								<goals>
									<goal>report</goal>
									<goal>report-aggregate</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<!-- $$END_PROPRIETARY_SONAR$$ -->
	</profiles>
</project>
