Interface RemoteBuildServer
-
- All Known Implementing Classes:
XmlRpcBasedRemoteServer
public interface RemoteBuildServer
Implementation of the interface is registered in XmlRpc at TeamCity server side. Java clients are encouraged to useRemoteBuildServerFacade
instead, which provides more high-level API.
-
-
Field Summary
Fields Modifier and Type Field Description static String
REMOTE_BUILD_SERVER
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description String
addToQueue(Vector addToQueueRequests, String rawTriggeredBy)
Adds one or more builds in the queue.byte[]
fetchData(String userId, String buildId, String sourceId, String whatToFetch)
Fetches binary data from the server.String
findBuildInstanceById(String id)
Returns build instance data for the specified idString
findBuildRunnerByType(String buildTypeId, String runnerType)
Returns the first found build runner of the specified type in the specified build configuration.String
findFailedTests(String fileFullPath, Vector testNames)
Looks for the failed tests with the specified names in the build configurations, suitable with the specified file.String
findTests(String fileFullPath, Vector testNames)
Looks for the tests (both failed and successful) with the specified names in the build configurations, suitable with the specified file.String
findUserById(String userId)
Returns user for the specified idBoolean
finishRemoteDebugSession(String personalChangeId, String buildTypeId)
Finishes the current remote debug session on the certain agent, which is determined by personal change id and build type idVector
getBuildFailedTests(String buildId, int startFromIdx, int maxTestsToLoad)
Returns failed tests in the specified build instance, for running build currently executing test will be added to the list too.Vector
getBuildInstanceLogMessages(String buildId, int skipMessages)
Returns messages logged for the specified build instanceVector
getBuildInstanceLogMessages(String buildId, int skipMessages, int maxCount)
Returns limited number of messages logged for the specified build instanceVector
getBuildInstanceModifications(String buildId, int policyId, boolean includeModificationsIfPreviousBuildIsAbsent)
Returns modifications detected between the specified build instance and previous build, selected according to the specified policyString
getBuildParameter(String buildTypeId, String key)
Returns build parameter by parameter name.String
getBuildParameters(String buildTypeId)
Returns the serialized build parameters map of build type specified.String
getBuildRunners(Vector buildTypeIds)
Returns map from build type ids to lists of enabled build runners for the specified build types.String
getBuildsWithArtifacts(Vector paths, Vector buildTypeIds)
Returns last finished builds those contain given artifact files.Vector
getBuildTypesWithArtifactDependencies(Vector buildTypeIds)
Returns the list of build types that have artifact dependencies.Vector
getBuildTypesWithTests(Vector buildTypeIds)
Returns the list of build types those have tests.Vector
getCanRunAndCompatibleAgents(String builtTypeId, boolean includeDisabled)
Returns the agents those are compatible with the specified build type, and on those specified build type can be runVector
getCommitters(String buildId, int selectPrevBuildPolicy)
Returns list of committers who made changes between the previous build selected according to the policy, and the specified oneVector
getCompilationErrors(String buildInstanceId)
Returns compilation errors of the specified buildbyte[]
getContentAfter(String modificationId, String fileName)
Returns file content, specified by the VcsChange, at the moment right after specified modification has been madebyte[]
getContentBefore(String modificationId, String fileName)
Returns file content, which corresponded to file before specified modification has been madebyte[]
getFileContent(String relativePath, String buildId)
Returns specified file content at the moment when specified build has been runVector
getFinishedBuilds(String buildTypeId)
Returns all finished build instances in the specified configurationVector
getGroupedByPoolCanRunAndCompatibleAgents(String builtTypeId, boolean includeDisabled)
Returns the grouped by pool agents those are compatible with the specified build type, and on those specified build type can be run.String
getLastFinished(String buildTypeId)
Returns last finished build in the specified configurationString
getLastSuccessfullyFinished(String buildTypeId)
Returns last successful finished build instance for the specified configurationVector
getModificationFiles(String modId, boolean personalChange)
Returns list of VcsChange structures (changed files) corresponding to modification with specified id.Vector
getModificationsSinceLastSuccessful(String buildTypeId)
Returns all modifications detected since last successfully finished build has been runString
getNewFinishedBuilds(Vector buildIds, Vector buildTypeIds)
Returns newly finished buildsString
getParameters(String buildTypeId)
Returns the serialized build and config parameters map of build type specified.Vector
getPendingChanges(String buildTypeId)
Returns all changes detected but not run for the specified configurationbyte[]
getPersonalContentAfter(String modificationId, String fileName)
Returns file content, specified by the VcsChange, at the moment right after specified modification has been made for personal changebyte[]
getPersonalContentBefore(String modificationId, String fileName)
Returns file content, which corresponded to file before specified modification has been made for personal changeString
getProblemRelatedEventCounters(Vector projectIds)
Returns problem related event counters for specified projects.Vector
getProjectCommitters(String projectId)
Returns list of project committersVector
getRegisteredAgents()
Returns all agents registered on the serverVector
getRegisteredProjects(boolean loadInstances)
Returns snapshots for all projects registered on the serverVector
getRelatedProjects(Vector buildTypeIds)
Returns projects of specified build configurations and all their parents in project hierarchy.String
getResolvedArtifactDependencies(Vector buildTypeIds)
Resolves artifact dependencies for the specified build types.Vector
getResponsibilityIds(String userId)
Returns id list of all the configuration which are under specified user responsibilityVector
getRunningBuilds(String buildTypeId)
Returns all running build for the specified configurationVector
getUsers()
Returns all usersBoolean
haveCommitDecision(Vector personalChangeIds)
Returns true if at least one of the specified personal changes has non-UNKNOWN commit decisionBoolean
isSequenceBuildType(String buildTypeId)
Returns whether the build type is a sequence one (has snapshot dependencies)String
lookUpBuildsWithArtifacts(Vector paths, Vector buildTypeIds)
Returns last finished builds those contain given artifact files.Boolean
muteProblems(Vector itemIds, boolean unmuteWhenFixed, String unmuteTimestamp, Vector buildTypeIds, Vector buildIds, String userId, String comment)
Mutes the specified items.Boolean
removeBuild(String buildId)
Removes build instance from the server historyBoolean
repeatRemoteDebugSession(String personalChangeId, String buildTypeId)
Repeats the current remote debug session on the certain agent, which is determined by personal change id and build type idBoolean
repeatRemoteDebugSessionWithNewChanges(String personalChangeId, String buildTypeId, String newChangesPersonalPatchId)
Applies new personal patch and repeats the current remote debug session on the certain agent, which is determined by personal change id and build type idBoolean
schedulePersonalChangeForDeletion(String changeId, String userId)
Mark personal change as deleted and makes it invisible for userBoolean
setPersonalChangeStatus(String changeId, int statusPriority)
sets status of personal changeBoolean
stopBuild(String buildId, String userId, String reason)
Schedules specified build to be stoppedBoolean
stopPendingPersonalBuild(String personalChangeId, String buildTypeId, String userId, String reason)
Removes the specified personal build from the queueBoolean
unmuteProblems(Vector itemIds, String userId, String comment)
Unmutes the specified items.Boolean
updateResponsibility(Vector itemIds, String newStateName, String responsibleUserId, String reporterUserId, String comment, String removeMethodName)
Updates responsibility for the specified items.
-
-
-
Field Detail
-
REMOTE_BUILD_SERVER
static final String REMOTE_BUILD_SERVER
- See Also:
- Constant Field Values
-
-
Method Detail
-
getRegisteredAgents
Vector getRegisteredAgents()
Returns all agents registered on the server- Returns:
- Vector of strings. Each string is serialized with XStream object of class BuildAgentData
-
getRegisteredProjects
Vector getRegisteredProjects(boolean loadInstances)
Returns snapshots for all projects registered on the server- Parameters:
loadInstances
- should returned data contain running and last finished builds data or not- Returns:
- Vector of strings. Each string is serialized with XStream object of class ProjectData @param loadInstances
-
getRelatedProjects
Vector getRelatedProjects(Vector buildTypeIds)
Returns projects of specified build configurations and all their parents in project hierarchy.- Parameters:
buildTypeIds
- Ids of build configuration- Returns:
- Vector of strings. Each string is serialized with XStream object of class ProjectData. No running and last finished builds data is provided.
- Since:
- 8.0
-
getBuildInstanceLogMessages
Vector getBuildInstanceLogMessages(String buildId, int skipMessages)
Returns messages logged for the specified build instance- Parameters:
buildId
- build instance idskipMessages
- how many messages should be skipped- Returns:
- Vector of strings.
-
getBuildInstanceLogMessages
Vector getBuildInstanceLogMessages(String buildId, int skipMessages, int maxCount)
Returns limited number of messages logged for the specified build instance- Parameters:
buildId
- build instance idskipMessages
- how many messages should be skippedmaxCount
- returns no more messages than this parameter value- Returns:
- Vector of strings.
-
getRunningBuilds
Vector getRunningBuilds(String buildTypeId)
Returns all running build for the specified configuration- Parameters:
buildTypeId
- configuration id- Returns:
- Vector of strings. Each string is serialized with XStream object of class BuildInstanceData
-
getFinishedBuilds
Vector getFinishedBuilds(String buildTypeId)
Returns all finished build instances in the specified configuration- Parameters:
buildTypeId
- configuration id- Returns:
- Vector of strings. Each string is serialized with XStream object of class BuildInstanceData
-
getBuildFailedTests
Vector getBuildFailedTests(String buildId, int startFromIdx, int maxTestsToLoad)
Returns failed tests in the specified build instance, for running build currently executing test will be added to the list too.- Parameters:
buildId
- build instance idstartFromIdx
- how many tests should be skippedmaxTestsToLoad
- how many tests to load, -1 to load all tests- Returns:
- Vector of strings.
-
getBuildInstanceModifications
Vector getBuildInstanceModifications(String buildId, int policyId, boolean includeModificationsIfPreviousBuildIsAbsent)
Returns modifications detected between the specified build instance and previous build, selected according to the specified policy- Parameters:
buildId
- build instance idpolicyId
- policy id, see jetbrains.buildServer.vcs.SelectPrevBuildPolicyincludeModificationsIfPreviousBuildIsAbsent
- - should method return something if build, selected according to policy, is absent- Returns:
- Vector of strings. Each string is serialized with XStream object of class VcsModificationData
-
getContentAfter
byte[] getContentAfter(String modificationId, String fileName) throws VcsException
Returns file content, specified by the VcsChange, at the moment right after specified modification has been made- Parameters:
modificationId
- modification idfileName
- file name, from VcsChange- Returns:
- byte content of a specific file version after modification
- Throws:
VcsException
- error while receiving content from the vcs server.
-
getContentBefore
byte[] getContentBefore(String modificationId, String fileName) throws VcsException
Returns file content, which corresponded to file before specified modification has been made- Parameters:
modificationId
- modification idfileName
- file name, from VcsChange- Returns:
- byte content of a specific file version before modification
- Throws:
VcsException
- error while receiving content from the vcs server.
-
getPersonalContentAfter
byte[] getPersonalContentAfter(String modificationId, String fileName) throws VcsException
Returns file content, specified by the VcsChange, at the moment right after specified modification has been made for personal change- Parameters:
modificationId
- modification idfileName
- file name, from VcsChange- Returns:
- byte content of a specific file version after modification
- Throws:
VcsException
- error while receiving content from the vcs server.
-
getPersonalContentBefore
byte[] getPersonalContentBefore(String modificationId, String fileName) throws VcsException
Returns file content, which corresponded to file before specified modification has been made for personal change- Parameters:
modificationId
- modification idfileName
- file name, from VcsChange- Returns:
- byte content of a specific file version before modification
- Throws:
VcsException
- error while receiving content from the vcs server.
-
addToQueue
String addToQueue(Vector addToQueueRequests, String rawTriggeredBy)
Adds one or more builds in the queue. The information about builds to add in queue is passed as Vector of serializedAddToQueueRequest
objects.- Parameters:
addToQueueRequests
- vector of serializedAddToQueueRequest
objectsrawTriggeredBy
- triggered by text (see alsoTriggeredByBuilder
)- Returns:
- serialized
AddToQueueResult
-
getResolvedArtifactDependencies
@NotNull String getResolvedArtifactDependencies(@NotNull Vector buildTypeIds)
Resolves artifact dependencies for the specified build types.- Parameters:
buildTypeIds
- Ids of build types to resolve artifact dependencies for.- Returns:
- serialized Map<String, List<ArtifactDependencyInfo>> (build type id -> list of resolved dependencies).
- Since:
- 6.5
-
getBuildTypesWithArtifactDependencies
@NotNull Vector getBuildTypesWithArtifactDependencies(@NotNull Vector buildTypeIds)
Returns the list of build types that have artifact dependencies.- Parameters:
buildTypeIds
- Ids of build types to check. Pass empty vector to check all build types.- Returns:
- vector of build type ids.
- Since:
- 6.5
-
getBuildTypesWithTests
@NotNull Vector getBuildTypesWithTests(@NotNull Vector buildTypeIds)
Returns the list of build types those have tests.- Parameters:
buildTypeIds
- Ids of build types to check. Pass empty vector to check all build types.- Returns:
- vector of build type ids.
- Since:
- 7.1
-
getBuildsWithArtifacts
@NotNull String getBuildsWithArtifacts(@NotNull Vector paths, @NotNull Vector buildTypeIds)
Returns last finished builds those contain given artifact files. This method only checks last finished builds. No history lookup is performed to find older build that may have contained the path.- Parameters:
paths
- vector of artifact paths that should be in the finished build.buildTypeIds
- Ids of build types to check builds in. Pass empty vector to check all build types.- Returns:
- List<BuildInstanceData>.
- Since:
- 6.5
-
lookUpBuildsWithArtifacts
@NotNull String lookUpBuildsWithArtifacts(@NotNull Vector paths, @NotNull Vector buildTypeIds)
Returns last finished builds those contain given artifact files. Performs history lookup to find older build that may have contained the path.- Parameters:
paths
- vector of artifact paths that should be in the finished build.buildTypeIds
- Ids of build types to check builds in. Pass empty vector to check all build types.- Returns:
- List<BuildInstanceData>.
- Since:
- 6.5.6
-
getLastFinished
@Nullable String getLastFinished(String buildTypeId)
Returns last finished build in the specified configuration- Parameters:
buildTypeId
- configuration id- Returns:
- serialized with XStream object of class BuildInstanceData
-
getNewFinishedBuilds
String getNewFinishedBuilds(Vector buildIds, Vector buildTypeIds)
Returns newly finished builds- Parameters:
buildIds
- For each build from this list this method will find later last finished build in the same build type. If it exists it will be added to result.buildTypeIds
- Last finished build from each of these build types will be added to the result (if exists).- Returns:
- Serialized with XStream List of BuildInstanceData
-
getCompilationErrors
Vector getCompilationErrors(String buildInstanceId)
Returns compilation errors of the specified build- Parameters:
buildInstanceId
- build id- Returns:
- Vector of strings
-
getPendingChanges
Vector getPendingChanges(String buildTypeId)
Returns all changes detected but not run for the specified configuration- Parameters:
buildTypeId
- configuration id- Returns:
- Vector of strings. Each string is serialized with XStream object of class VcsModificationData
-
getModificationsSinceLastSuccessful
Vector getModificationsSinceLastSuccessful(String buildTypeId)
Returns all modifications detected since last successfully finished build has been run- Parameters:
buildTypeId
- configuration id- Returns:
- Vector of strings. Each string is serialized with XStream object of class VcsModificationData
-
findBuildInstanceById
String findBuildInstanceById(String id)
Returns build instance data for the specified id- Parameters:
id
- buildId build instance id- Returns:
- serialized with XStream object of class BuildInstanceData
-
getBuildParameters
String getBuildParameters(String buildTypeId)
Returns the serialized build parameters map of build type specified.- Parameters:
buildTypeId
- the build type id- Returns:
- serialized with XStream object of Map<String, String>
- Since:
- 5.1
- See Also:
BuildType.getBuildParameters()
-
getParameters
String getParameters(String buildTypeId)
Returns the serialized build and config parameters map of build type specified.- Parameters:
buildTypeId
- the build type id- Returns:
- serialized with XStream object of Map<String, String>
- Since:
- 6.5
- See Also:
BuildType.getParameters()
-
findFailedTests
@NotNull String findFailedTests(String fileFullPath, Vector testNames)
Looks for the failed tests with the specified names in the build configurations, suitable with the specified file.- Parameters:
fileFullPath
- full VCS file pathtestNames
- test names- Returns:
- serialized with XStream object of Map<String, List<BuildTestsData>> (build type id -> list of build tests datas)
- Since:
- 8.0
-
findTests
@NotNull String findTests(String fileFullPath, Vector testNames)
Looks for the tests (both failed and successful) with the specified names in the build configurations, suitable with the specified file.- Parameters:
fileFullPath
- full VCS file pathtestNames
- test names- Returns:
- serialized with XStream object of Map<String, List<BuildTestsData>> (build type id -> list of build tests datas)
- Since:
- 8.0
-
isSequenceBuildType
Boolean isSequenceBuildType(String buildTypeId)
Returns whether the build type is a sequence one (has snapshot dependencies)- Parameters:
buildTypeId
- the build type id- Returns:
- true iff build type is a sequence one
- Since:
- 5.1
-
muteProblems
Boolean muteProblems(Vector itemIds, boolean unmuteWhenFixed, String unmuteTimestamp, Vector buildTypeIds, Vector buildIds, String userId, String comment)
Mutes the specified items. If both buildTypeIds and buildIds are empty, mutes items in projects.- Parameters:
itemIds
- list of the itemids
unmuteWhenFixed
- true, if items must be unmuted automatically when fixedunmuteTimestamp
- date of unmute in milliseconds, "-1" to not unmute by datebuildTypeIds
- build type ids to mute items inbuildIds
- build ids to mute items inuserId
- id of the usercomment
- comment- Returns:
- fake
- Since:
- 7.1
-
unmuteProblems
Boolean unmuteProblems(Vector itemIds, String userId, String comment)
Unmutes the specified items.- Parameters:
itemIds
- list of the itemids
userId
- id of the usercomment
- comment- Returns:
- fake
- Since:
- 7.1
-
updateResponsibility
Boolean updateResponsibility(Vector itemIds, String newStateName, String responsibleUserId, String reporterUserId, String comment, String removeMethodName)
Updates responsibility for the specified items.- Parameters:
itemIds
- list of the itemids
newStateName
- name of the newresponsibility state
responsibleUserId
- id of the responsible userreporterUserId
- id of the reporter usercomment
- commentremoveMethodName
- remove method name- Returns:
- fake
- Since:
- 6.0
-
getResponsibilityIds
Vector getResponsibilityIds(String userId)
Returns id list of all the configuration which are under specified user responsibility- Parameters:
userId
- TeamCity user id- Returns:
- Vector of strings. Each string is serialized with XStream object of class ResponsibilityInfoData
-
findUserById
String findUserById(String userId)
Returns user for the specified id- Parameters:
userId
- TeamCity user id- Returns:
- serialized with XStream object of class User
-
getUsers
Vector getUsers()
Returns all users- Returns:
- serialized with XStream vector of UserData
- Since:
- 6.0
-
getProjectCommitters
Vector getProjectCommitters(String projectId)
Returns list of project committers- Parameters:
projectId
- TeamCity project id- Returns:
- serialized with XStream vector of UserData
- Since:
- 6.0
-
stopBuild
Boolean stopBuild(String buildId, String userId, String reason)
Schedules specified build to be stopped- Parameters:
buildId
- build instance iduserId
- current used id.reason
- reason why build is stopped.- Returns:
- fake return value.
-
stopPendingPersonalBuild
Boolean stopPendingPersonalBuild(String personalChangeId, String buildTypeId, String userId, String reason)
Removes the specified personal build from the queue- Parameters:
personalChangeId
- personal change idbuildTypeId
- build type iduserId
- current used idreason
- reason why build is stopped- Returns:
- fake return value
-
repeatRemoteDebugSession
Boolean repeatRemoteDebugSession(String personalChangeId, String buildTypeId)
Repeats the current remote debug session on the certain agent, which is determined by personal change id and build type id- Parameters:
personalChangeId
- personal change idbuildTypeId
- build type id- Returns:
- fake return value
-
repeatRemoteDebugSessionWithNewChanges
Boolean repeatRemoteDebugSessionWithNewChanges(String personalChangeId, String buildTypeId, String newChangesPersonalPatchId)
Applies new personal patch and repeats the current remote debug session on the certain agent, which is determined by personal change id and build type id- Parameters:
personalChangeId
- personal change idbuildTypeId
- build type id- Returns:
- fake return value
-
finishRemoteDebugSession
Boolean finishRemoteDebugSession(String personalChangeId, String buildTypeId)
Finishes the current remote debug session on the certain agent, which is determined by personal change id and build type id- Parameters:
personalChangeId
- personal change idbuildTypeId
- build type id- Returns:
- fake return value
-
fetchData
byte[] fetchData(String userId, String buildId, String sourceId, String whatToFetch)
Fetches binary data from the server.- Parameters:
userId
- current user id.buildId
- build id to fetch data for.sourceId
- data provider id ("Inspection", "Duplicator" e.t.c)whatToFetch
- specified path to fetch data for.- Returns:
- data binary array.
-
getCommitters
Vector getCommitters(String buildId, int selectPrevBuildPolicy)
Returns list of committers who made changes between the previous build selected according to the policy, and the specified one- Parameters:
buildId
- build instance idselectPrevBuildPolicy
- - SelectPrevBuildPolicy enum element id- Returns:
- Vector of strings. Each string is serialized with XStream object of class User
-
getFileContent
byte[] getFileContent(String relativePath, String buildId)
Returns specified file content at the moment when specified build has been run- Parameters:
relativePath
- file path relative to project rootbuildId
- build instance id- Returns:
- byte content of specific file in specific build
-
getLastSuccessfullyFinished
String getLastSuccessfullyFinished(String buildTypeId)
Returns last successful finished build instance for the specified configuration- Parameters:
buildTypeId
- build instance id- Returns:
- serialized object of type BuildInstanceData
-
removeBuild
Boolean removeBuild(String buildId)
Removes build instance from the server history- Parameters:
buildId
- finished build instance id- Returns:
- fake
-
schedulePersonalChangeForDeletion
Boolean schedulePersonalChangeForDeletion(String changeId, String userId)
Mark personal change as deleted and makes it invisible for user- Parameters:
changeId
- personal change iduserId
- current user id.- Returns:
- fake
-
getBuildParameter
String getBuildParameter(String buildTypeId, String key)
Returns build parameter by parameter name.- Parameters:
buildTypeId
- configuration id.key
- param name.- Returns:
- serialized with XStream object of class String
-
setPersonalChangeStatus
Boolean setPersonalChangeStatus(String changeId, int statusPriority)
sets status of personal change- Parameters:
changeId
- personal change idstatusPriority
- status priority (see Status.getPriority())- Returns:
- Ignored. Used for XmlRpc
-
getCanRunAndCompatibleAgents
Vector getCanRunAndCompatibleAgents(String builtTypeId, boolean includeDisabled)
Returns the agents those are compatible with the specified build type, and on those specified build type can be run- Parameters:
builtTypeId
- Build type idincludeDisabled
- includeDisabled- Returns:
- Vector of serialized BuildAgentData objects
-
getGroupedByPoolCanRunAndCompatibleAgents
Vector getGroupedByPoolCanRunAndCompatibleAgents(String builtTypeId, boolean includeDisabled)
Returns the grouped by pool agents those are compatible with the specified build type, and on those specified build type can be run. If there is only one pool in the system, then result contains only one pair, and the pool data in that pair is null.- Parameters:
builtTypeId
- Build type idincludeDisabled
- includeDisabled- Returns:
- Vector of serialized Pair<AgentPoolData, List<BuildAgentData>> objects
-
haveCommitDecision
Boolean haveCommitDecision(Vector personalChangeIds)
Returns true if at least one of the specified personal changes has non-UNKNOWN commit decision- Parameters:
personalChangeIds
- personal change ids- Returns:
- see above
-
getModificationFiles
Vector getModificationFiles(String modId, boolean personalChange)
Returns list of VcsChange structures (changed files) corresponding to modification with specified id.- Parameters:
modId
- id of VCS modificationpersonalChange
- if true then files from personal change will be returned- Returns:
- see above
-
findBuildRunnerByType
String findBuildRunnerByType(String buildTypeId, String runnerType)
Returns the first found build runner of the specified type in the specified build configuration.- Parameters:
buildTypeId
- build configuration idrunnerType
- type of the runner- Returns:
- the first found runner
- Since:
- 6.0
-
getBuildRunners
String getBuildRunners(Vector buildTypeIds)
Returns map from build type ids to lists of enabled build runners for the specified build types.- Parameters:
buildTypeIds
- build configuration ids- Returns:
- serialized object of type Map<String, List<BuildRunnerData>>
- Since:
- 8.0
-
-