636 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			GraphQL
		
	
	
	
	
	
			
		
		
	
	
			636 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			GraphQL
		
	
	
	
	
	
scalar Time
 | 
						|
scalar UUID
 | 
						|
scalar Upload
 | 
						|
 | 
						|
enum RoleCode {
 | 
						|
  owner
 | 
						|
  admin
 | 
						|
  member
 | 
						|
  observer
 | 
						|
}
 | 
						|
 | 
						|
type ProjectLabel {
 | 
						|
  id: ID!
 | 
						|
  createdDate: Time!
 | 
						|
  labelColor: LabelColor!
 | 
						|
  name: String
 | 
						|
}
 | 
						|
 | 
						|
type LabelColor {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  colorHex: String!
 | 
						|
}
 | 
						|
 | 
						|
type TaskLabel {
 | 
						|
  id: ID!
 | 
						|
  projectLabel: ProjectLabel!
 | 
						|
  assignedDate: Time!
 | 
						|
}
 | 
						|
 | 
						|
type ProfileIcon {
 | 
						|
  url: String
 | 
						|
  initials: String
 | 
						|
  bgColor: String
 | 
						|
}
 | 
						|
 | 
						|
type OwnersList  {
 | 
						|
  projects: [UUID!]!
 | 
						|
  teams: [UUID!]!
 | 
						|
}
 | 
						|
 | 
						|
type Member {
 | 
						|
  id: ID!
 | 
						|
  role: Role!
 | 
						|
  fullName: String!
 | 
						|
  username: String!
 | 
						|
  profileIcon: ProfileIcon!
 | 
						|
  owned: OwnedList!
 | 
						|
  member: MemberList!
 | 
						|
}
 | 
						|
 | 
						|
type RefreshToken {
 | 
						|
  id: ID!
 | 
						|
  userId: UUID!
 | 
						|
  expiresAt: Time!
 | 
						|
  createdAt: Time!
 | 
						|
}
 | 
						|
 | 
						|
type Role {
 | 
						|
  code: String!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
type OwnedList {
 | 
						|
  teams: [Team!]!
 | 
						|
  projects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
type MemberList {
 | 
						|
  teams: [Team!]!
 | 
						|
  projects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
type UserAccount {
 | 
						|
  id: ID!
 | 
						|
  email: String!
 | 
						|
  createdAt: Time!
 | 
						|
  fullName: String!
 | 
						|
  initials: String!
 | 
						|
  role: Role!
 | 
						|
  username: String!
 | 
						|
  profileIcon: ProfileIcon!
 | 
						|
  owned: OwnedList!
 | 
						|
  member: MemberList!
 | 
						|
}
 | 
						|
 | 
						|
type Team {
 | 
						|
  id: ID!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  members: [Member!]!
 | 
						|
}
 | 
						|
 | 
						|
type Project {
 | 
						|
  id: ID!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  team: Team!
 | 
						|
  owner: Member!
 | 
						|
  taskGroups: [TaskGroup!]!
 | 
						|
  members: [Member!]!
 | 
						|
  labels: [ProjectLabel!]!
 | 
						|
}
 | 
						|
 | 
						|
type TaskGroup {
 | 
						|
  id: ID!
 | 
						|
  projectID: String!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  tasks: [Task!]!
 | 
						|
}
 | 
						|
 | 
						|
type ChecklistBadge {
 | 
						|
  complete: Int!
 | 
						|
  total: Int!
 | 
						|
}
 | 
						|
 | 
						|
type TaskBadges {
 | 
						|
  checklist: ChecklistBadge
 | 
						|
}
 | 
						|
 | 
						|
type Task {
 | 
						|
  id: ID!
 | 
						|
  taskGroup: TaskGroup!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  description: String
 | 
						|
  dueDate: Time
 | 
						|
  complete: Boolean!
 | 
						|
  assigned: [Member!]!
 | 
						|
  labels: [TaskLabel!]!
 | 
						|
  checklists: [TaskChecklist!]!
 | 
						|
  badges: TaskBadges!
 | 
						|
}
 | 
						|
 | 
						|
type Organization {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
type TaskChecklistItem {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
  taskChecklistID: UUID!
 | 
						|
  complete: Boolean!
 | 
						|
  position: Float!
 | 
						|
  dueDate: Time!
 | 
						|
}
 | 
						|
 | 
						|
type TaskChecklist {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  items: [TaskChecklistItem!]!
 | 
						|
}
 | 
						|
 | 
						|
type Query {
 | 
						|
  organizations: [Organization!]!
 | 
						|
  users: [UserAccount!]!
 | 
						|
  findUser(input: FindUser!): UserAccount!
 | 
						|
  findProject(input: FindProject!): Project!
 | 
						|
  findTask(input: FindTask!): Task!
 | 
						|
  projects(input: ProjectsFilter): [Project!]!
 | 
						|
  findTeam(input: FindTeam!): Team!
 | 
						|
  teams: [Team!]!
 | 
						|
  labelColors: [LabelColor!]!
 | 
						|
  taskGroups: [TaskGroup!]!
 | 
						|
  me: UserAccount!
 | 
						|
}
 | 
						|
 | 
						|
type Mutation
 | 
						|
 | 
						|
input ProjectsFilter {
 | 
						|
  teamID: UUID
 | 
						|
}
 | 
						|
 | 
						|
input FindUser {
 | 
						|
  userId: String!
 | 
						|
}
 | 
						|
 | 
						|
input FindProject {
 | 
						|
  projectId: String!
 | 
						|
}
 | 
						|
 | 
						|
input FindTask {
 | 
						|
  taskID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input FindTeam {
 | 
						|
  teamID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createProject(input: NewProject!): Project!
 | 
						|
  deleteProject(input: DeleteProject!): DeleteProjectPayload!
 | 
						|
  updateProjectName(input: UpdateProjectName): Project!
 | 
						|
}
 | 
						|
 | 
						|
input NewProject {
 | 
						|
  userID: UUID!
 | 
						|
  teamID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectName {
 | 
						|
  projectID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteProject {
 | 
						|
  projectID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteProjectPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  project: Project!
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createProjectLabel(input: NewProjectLabel!): ProjectLabel!
 | 
						|
  deleteProjectLabel(input: DeleteProjectLabel!): ProjectLabel!
 | 
						|
  updateProjectLabel(input: UpdateProjectLabel!): ProjectLabel!
 | 
						|
  updateProjectLabelName(input: UpdateProjectLabelName!): ProjectLabel!
 | 
						|
  updateProjectLabelColor(input: UpdateProjectLabelColor!): ProjectLabel!
 | 
						|
}
 | 
						|
 | 
						|
input NewProjectLabel {
 | 
						|
  projectID: UUID!
 | 
						|
  labelColorID: UUID!
 | 
						|
  name: String
 | 
						|
}
 | 
						|
 | 
						|
input DeleteProjectLabel {
 | 
						|
  projectLabelID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectLabelName {
 | 
						|
  projectLabelID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectLabel {
 | 
						|
  projectLabelID: UUID!
 | 
						|
  labelColorID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectLabelColor {
 | 
						|
  projectLabelID: UUID!
 | 
						|
  labelColorID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createProjectMember(input: CreateProjectMember!): CreateProjectMemberPayload!
 | 
						|
  deleteProjectMember(input: DeleteProjectMember!): DeleteProjectMemberPayload!
 | 
						|
  updateProjectMemberRole(input: UpdateProjectMemberRole!): UpdateProjectMemberRolePayload!
 | 
						|
  setProjectOwner(input: SetProjectOwner!): SetProjectOwnerPayload!
 | 
						|
}
 | 
						|
 | 
						|
input CreateProjectMember {
 | 
						|
  projectID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type CreateProjectMemberPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  member: Member!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteProjectMember {
 | 
						|
  projectID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteProjectMemberPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  member: Member!
 | 
						|
  projectID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectMemberRole {
 | 
						|
  projectID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateProjectMemberRolePayload {
 | 
						|
  ok: Boolean!
 | 
						|
  member: Member!
 | 
						|
}
 | 
						|
 | 
						|
input SetProjectOwner {
 | 
						|
  projectID: UUID!
 | 
						|
  ownerID: UUID!
 | 
						|
}
 | 
						|
type SetProjectOwnerPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  prevOwner: Member!
 | 
						|
  newOwner: Member!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createTask(input: NewTask!): Task!
 | 
						|
  deleteTask(input: DeleteTaskInput!): DeleteTaskPayload!
 | 
						|
 | 
						|
  updateTaskDescription(input: UpdateTaskDescriptionInput!): Task!
 | 
						|
  updateTaskLocation(input: NewTaskLocation!): UpdateTaskLocationPayload!
 | 
						|
  updateTaskName(input: UpdateTaskName!): Task!
 | 
						|
  setTaskComplete(input: SetTaskComplete!): Task!
 | 
						|
  updateTaskDueDate(input: UpdateTaskDueDate!): Task!
 | 
						|
 | 
						|
  assignTask(input: AssignTaskInput): Task!
 | 
						|
  unassignTask(input: UnassignTaskInput): Task!
 | 
						|
}
 | 
						|
 | 
						|
input NewTask {
 | 
						|
  taskGroupID: String!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input AssignTaskInput {
 | 
						|
  taskID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UnassignTaskInput {
 | 
						|
  taskID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskDescriptionInput {
 | 
						|
  taskID: UUID!
 | 
						|
  description: String!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTaskLocationPayload {
 | 
						|
  previousTaskGroupID: UUID!
 | 
						|
  task: Task!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskDueDate  {
 | 
						|
  taskID: UUID!
 | 
						|
  dueDate: Time
 | 
						|
}
 | 
						|
 | 
						|
input SetTaskComplete {
 | 
						|
  taskID: UUID!
 | 
						|
  complete: Boolean!
 | 
						|
}
 | 
						|
 | 
						|
input NewTaskLocation {
 | 
						|
  taskID: UUID!
 | 
						|
  taskGroupID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTaskInput {
 | 
						|
  taskID: String!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTaskPayload {
 | 
						|
  taskID: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskName {
 | 
						|
  taskID: String!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createTaskChecklist(input: CreateTaskChecklist!): TaskChecklist!
 | 
						|
  deleteTaskChecklist(input: DeleteTaskChecklist!): DeleteTaskChecklistPayload!
 | 
						|
  updateTaskChecklistName(input: UpdateTaskChecklistName!): TaskChecklist!
 | 
						|
  createTaskChecklistItem(input: CreateTaskChecklistItem!): TaskChecklistItem!
 | 
						|
  updateTaskChecklistItemName(input: UpdateTaskChecklistItemName!): TaskChecklistItem!
 | 
						|
  setTaskChecklistItemComplete(input: SetTaskChecklistItemComplete!): TaskChecklistItem!
 | 
						|
  deleteTaskChecklistItem(input: DeleteTaskChecklistItem!): DeleteTaskChecklistItemPayload!
 | 
						|
 | 
						|
  updateTaskChecklistLocation(input: UpdateTaskChecklistLocation!): UpdateTaskChecklistLocationPayload!
 | 
						|
  updateTaskChecklistItemLocation(input: UpdateTaskChecklistItemLocation!): UpdateTaskChecklistItemLocationPayload!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistItemLocation {
 | 
						|
  checklistID: UUID!
 | 
						|
  checklistItemID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTaskChecklistItemLocationPayload {
 | 
						|
  checklistID: UUID!
 | 
						|
  prevChecklistID: UUID!
 | 
						|
  checklistItem: TaskChecklistItem!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistLocation {
 | 
						|
  checklistID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTaskChecklistLocationPayload {
 | 
						|
  checklist: TaskChecklist!
 | 
						|
}
 | 
						|
 | 
						|
input CreateTaskChecklist {
 | 
						|
  taskID: UUID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTaskChecklistItemPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  taskChecklistItem: TaskChecklistItem!
 | 
						|
}
 | 
						|
 | 
						|
input CreateTaskChecklistItem {
 | 
						|
  taskChecklistID: UUID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input SetTaskChecklistItemComplete {
 | 
						|
  taskChecklistItemID: UUID!
 | 
						|
  complete: Boolean!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTaskChecklistItem {
 | 
						|
  taskChecklistItemID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistItemName {
 | 
						|
  taskChecklistItemID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistName {
 | 
						|
  taskChecklistID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
input DeleteTaskChecklist {
 | 
						|
  taskChecklistID: UUID!
 | 
						|
}
 | 
						|
type DeleteTaskChecklistPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  taskChecklist: TaskChecklist!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createTaskGroup(input: NewTaskGroup!): TaskGroup!
 | 
						|
  updateTaskGroupLocation(input: NewTaskGroupLocation!): TaskGroup!
 | 
						|
  updateTaskGroupName(input: UpdateTaskGroupName!): TaskGroup!
 | 
						|
  deleteTaskGroup(input: DeleteTaskGroupInput!): DeleteTaskGroupPayload!
 | 
						|
}
 | 
						|
 | 
						|
input NewTaskGroupLocation {
 | 
						|
  taskGroupID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskGroupName  {
 | 
						|
  taskGroupID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTaskGroupInput {
 | 
						|
  taskGroupID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTaskGroupPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  affectedRows: Int!
 | 
						|
  taskGroup: TaskGroup!
 | 
						|
}
 | 
						|
 | 
						|
input NewTaskGroup {
 | 
						|
  projectID: String!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input AddTaskLabelInput {
 | 
						|
  taskID: UUID!
 | 
						|
  projectLabelID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input RemoveTaskLabelInput {
 | 
						|
  taskLabelID: UUID!
 | 
						|
}
 | 
						|
input ToggleTaskLabelInput {
 | 
						|
  taskID: UUID!
 | 
						|
  projectLabelID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type ToggleTaskLabelPayload {
 | 
						|
  active: Boolean!
 | 
						|
  task: Task!
 | 
						|
}
 | 
						|
extend type Mutation {
 | 
						|
  addTaskLabel(input: AddTaskLabelInput): Task!
 | 
						|
  removeTaskLabel(input: RemoveTaskLabelInput): Task!
 | 
						|
  toggleTaskLabel(input: ToggleTaskLabelInput!): ToggleTaskLabelPayload!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  deleteTeam(input: DeleteTeam!): DeleteTeamPayload!
 | 
						|
  createTeam(input: NewTeam!): Team!
 | 
						|
}
 | 
						|
 | 
						|
input NewTeam {
 | 
						|
  name: String!
 | 
						|
  organizationID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTeam {
 | 
						|
  teamID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTeamPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  team: Team!
 | 
						|
  projects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  setTeamOwner(input: SetTeamOwner!): SetTeamOwnerPayload!
 | 
						|
  createTeamMember(input: CreateTeamMember!): CreateTeamMemberPayload!
 | 
						|
  updateTeamMemberRole(input: UpdateTeamMemberRole!): UpdateTeamMemberRolePayload!
 | 
						|
  deleteTeamMember(input: DeleteTeamMember!): DeleteTeamMemberPayload!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTeamMember {
 | 
						|
  teamID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  newOwnerID: UUID
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTeamMemberPayload {
 | 
						|
  teamID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  affectedProjects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
input CreateTeamMember {
 | 
						|
  userID: UUID!
 | 
						|
  teamID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type CreateTeamMemberPayload {
 | 
						|
  team: Team!
 | 
						|
  teamMember: Member!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTeamMemberRole {
 | 
						|
  teamID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTeamMemberRolePayload {
 | 
						|
  ok: Boolean!
 | 
						|
  member: Member!
 | 
						|
}
 | 
						|
 | 
						|
input SetTeamOwner {
 | 
						|
  teamID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type SetTeamOwnerPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  prevOwner: Member!
 | 
						|
  newOwner: Member!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createRefreshToken(input: NewRefreshToken!): RefreshToken!
 | 
						|
  createUserAccount(input: NewUserAccount!): UserAccount!
 | 
						|
  deleteUserAccount(input: DeleteUserAccount!): DeleteUserAccountPayload!
 | 
						|
  logoutUser(input: LogoutUser!): Boolean!
 | 
						|
  clearProfileAvatar:  UserAccount!
 | 
						|
 | 
						|
  updateUserPassword(input: UpdateUserPassword!): UpdateUserPasswordPayload!
 | 
						|
  updateUserRole(input: UpdateUserRole!): UpdateUserRolePayload!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateUserPassword {
 | 
						|
  userID: UUID!
 | 
						|
  password: String!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateUserPasswordPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  user: UserAccount!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateUserRole {
 | 
						|
  userID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateUserRolePayload {
 | 
						|
  user: UserAccount!
 | 
						|
}
 | 
						|
 | 
						|
input NewRefreshToken {
 | 
						|
  userId: String!
 | 
						|
}
 | 
						|
 | 
						|
input NewUserAccount {
 | 
						|
  username: String!
 | 
						|
  email: String!
 | 
						|
  fullName: String!
 | 
						|
  initials: String!
 | 
						|
  password: String!
 | 
						|
  roleCode: String!
 | 
						|
}
 | 
						|
 | 
						|
input LogoutUser {
 | 
						|
  userID: String!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteUserAccount {
 | 
						|
  userID: UUID!
 | 
						|
  newOwnerID: UUID
 | 
						|
}
 | 
						|
 | 
						|
type DeleteUserAccountPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  userAccount: UserAccount!
 | 
						|
}
 | 
						|
 |