From d8beedb5f57051e8b6b6bc8fd2219c179ce57100 Mon Sep 17 00:00:00 2001 From: Michael Elrom Date: Mon, 17 Aug 2026 17:29:38 -0400 Subject: [PATCH 1/3] feat(arista): add CloudVision Workspace/Studio/Change Control Integration Model Adds an OpenAPI spec covering the modern CloudVision provisioning flow: create a workspace, push config into a Studio, build/validate, submit (creating a Change Control), then approve and execute it. Converted from Arista's own published Swagger 2.0 specs for workspace.v1, studio.v1, and changecontrol.v1. --- .../arista_cloudvision_api-latest.json | 1294 +++++++++++++++++ 1 file changed, 1294 insertions(+) create mode 100644 Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json diff --git a/Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json b/Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json new file mode 100644 index 0000000..16f7ce8 --- /dev/null +++ b/Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json @@ -0,0 +1,1294 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "latest", + "x-vendor-api-version": "CloudVision Resource APIs (workspace.v1, studio.v1, changecontrol.v1)", + "title": "Arista CloudVision", + "description": "Arista CloudVision-as-a-Service (CVaaS) Resource APIs for the modern Workspace/Studio provisioning model: create a workspace, push configuration into a Studio (e.g. the Static Configlet Studio), build and validate the workspace, submit it (which creates a Change Control), then approve and execute that Change Control.\n\nAuthentication: bearer service-account token. Send Authorization: Bearer on every request.\n\nCloudVision's Resource APIs are gRPC-native; this spec describes Arista's own generated REST/JSON gateway over those same services (introduced in CVP 2021.1.0, still actively maintained), converted from the vendor's published Swagger 2.0 documents to OpenAPI 3.0.\n\nSource: https://github.com/aristanetworks/cloudvision-apis", + "x-itential-curated": "Scoped to exactly the resources needed for the Workspace/Studio/Change Control provisioning flow: Workspace config and status, workspace build status (overall and per-device), Studio input configuration, and Change Control config/status/approval -- 15 operations across 3 of CloudVision's many resource packages. Deliberately excludes: every other studio.v1 resource (AssignedTags, AutofillAction, SecretInput, Studio/StudioConfig, StudioSummary) and changecontrol.v1's ChangeControlSummary, since they aren't part of this flow; the \"list all\" (GetAll) and \"get several\" (GetSome) operations on every resource, since those are long-lived streaming (chunked NDJSON) responses rather than a single JSON object and don't fit a request/response workflow task; and the dozens of other CloudVision resource packages (inventory, tags, image, telemetry, etc.) entirely, since they're outside this workflow. Several nested vendor structures (build diagnostics, change control stages) are preserved as opaque objects rather than fully typed, since they're deep, vendor-internal detail not needed to drive this flow -- the top-level state/status fields that matter (BuildState, ChangeControlStatus, etc.) are fully typed enums." + }, + "servers": [ + { + "url": "https://CVAAS-TENANT-HOST", + "description": "Per-tenant CVaaS host, e.g. www.cv-prod-us-central1-b.arista.io -- replace with your tenant's host." + } + ], + "security": [ + { + "bearerAuth": [] + } + ], + "paths": { + "/api/resources/changecontrol/v1/ApproveConfig": { + "post": { + "operationId": "changeControl_SetApproval", + "summary": "Approve (or unapprove) a Change Control. Requires version to be set to the Change Control's current change.time (from changeControl_Get) when approving.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApproveConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApproveConfig" + } + } + } + } + } + }, + "/api/resources/changecontrol/v1/ChangeControl": { + "get": { + "operationId": "changeControl_Get", + "summary": "Get a Change Control's full status -- approval, execution status, devices, and change/stage detail", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeControlResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.id", + "in": "query", + "required": true, + "description": "ID of the Change Control.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/changecontrol/v1/ChangeControlConfig": { + "post": { + "operationId": "changeControl_Set", + "summary": "Create/update a Change Control, or flag it to start/stop/schedule execution", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeControlConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeControlConfig" + } + } + } + } + }, + "get": { + "operationId": "changeControl_GetConfig", + "summary": "Get a Change Control's configuration", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeControlConfigResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.id", + "in": "query", + "required": true, + "description": "ID of the Change Control.", + "schema": { + "type": "string" + } + } + ] + }, + "delete": { + "operationId": "changeControl_Delete", + "summary": "Delete a Change Control", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeControlConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.id", + "in": "query", + "required": true, + "description": "ID of the Change Control.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/studio/v1/Inputs": { + "get": { + "operationId": "studio_GetResolvedInputs", + "summary": "Get the resolved input value at a path in a studio", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.studioId", + "in": "query", + "required": true, + "description": "ID of the studio.", + "schema": { + "type": "string" + } + }, + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace the studio inputs live in.", + "schema": { + "type": "string" + } + }, + { + "name": "key.path.values", + "in": "query", + "required": false, + "description": "Path segments to the input field.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] + } + }, + "/api/resources/studio/v1/InputsConfig": { + "post": { + "operationId": "studio_SetInputs", + "summary": "Set a studio's input value at a path, e.g. push configuration into the Static Configlet Studio", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfig" + } + } + } + } + }, + "get": { + "operationId": "studio_GetInputsConfig", + "summary": "Get the configured input value at a path in a studio", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfigResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.studioId", + "in": "query", + "required": true, + "description": "ID of the studio.", + "schema": { + "type": "string" + } + }, + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace the studio inputs live in.", + "schema": { + "type": "string" + } + }, + { + "name": "key.path.values", + "in": "query", + "required": false, + "description": "Path segments to the input field.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] + }, + "delete": { + "operationId": "studio_DeleteInputs", + "summary": "Remove a studio's input value at a path", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.studioId", + "in": "query", + "required": true, + "description": "ID of the studio.", + "schema": { + "type": "string" + } + }, + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace the studio inputs live in.", + "schema": { + "type": "string" + } + }, + { + "name": "key.path.values", + "in": "query", + "required": false, + "description": "Path segments to the input field.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] + } + }, + "/api/resources/workspace/v1/Workspace": { + "get": { + "operationId": "workspace_GetStatus", + "summary": "Get a workspace's status -- state, build/submit request responses, and any Change Control IDs created on submit", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Unique ID of the workspace.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/workspace/v1/WorkspaceBuild": { + "get": { + "operationId": "workspace_GetBuild", + "summary": "Get the overall status of a workspace build", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceBuildResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace.", + "schema": { + "type": "string" + } + }, + { + "name": "key.buildId", + "in": "query", + "required": true, + "description": "ID of the build (Workspace.lastBuildId).", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/workspace/v1/WorkspaceBuildDetails": { + "get": { + "operationId": "workspace_GetBuildDetails", + "summary": "Get per-device, per-stage build/validation detail for a workspace build", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceBuildDetailsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace.", + "schema": { + "type": "string" + } + }, + { + "name": "key.buildId", + "in": "query", + "required": true, + "description": "ID of the build (Workspace.lastBuildId).", + "schema": { + "type": "string" + } + }, + { + "name": "key.deviceId", + "in": "query", + "required": true, + "description": "ID of the device.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig": { + "post": { + "operationId": "workspace_Set", + "summary": "Create/update a workspace, or kick off an async request (build, submit, etc.) on it via the request field", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfig" + } + } + } + } + }, + "get": { + "operationId": "workspace_Get", + "summary": "Get a workspace's configuration", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfigResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Unique ID of the workspace.", + "schema": { + "type": "string" + } + } + ] + }, + "delete": { + "operationId": "workspace_Delete", + "summary": "Delete a workspace", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Unique ID of the workspace.", + "schema": { + "type": "string" + } + } + ] + } + } + }, + "components": { + "schemas": { + "StringList": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "WorkspaceKey": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Unique ID of the workspace." + } + }, + "required": [ + "workspaceId" + ] + }, + "WorkspaceRequest": { + "type": "string", + "enum": [ + "REQUEST_UNSPECIFIED", + "REQUEST_START_BUILD", + "REQUEST_CANCEL_BUILD", + "REQUEST_SUBMIT", + "REQUEST_ABANDON", + "REQUEST_ROLLBACK", + "REQUEST_SUBMIT_FORCE", + "REQUEST_REBASE" + ], + "description": "Asynchronous operation to kick off on the workspace. REQUEST_START_BUILD compiles and validates the workspace's changes (this single call covers build and validate). REQUEST_SUBMIT submits the workspace to the mainline, creating Change Controls as needed." + }, + "WorkspaceRequestParams": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Unique ID of this request, used to look up its Response in Workspace.responses." + } + } + }, + "WorkspaceConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceKey" + }, + "displayName": { + "type": "string", + "description": "User-defined name of the workspace." + }, + "description": { + "type": "string", + "description": "Brief description of the workspace." + }, + "request": { + "$ref": "#/components/schemas/WorkspaceRequest", + "description": "Set to kick off an asynchronous operation (build, submit, etc.) on the workspace." + }, + "requestParams": { + "$ref": "#/components/schemas/WorkspaceRequestParams" + }, + "excludeNetworkProvisioning": { + "type": "boolean", + "description": "Used only during Network-Provisioning-to-Studios migration; leave unset otherwise." + } + }, + "required": [ + "key" + ] + }, + "WorkspaceConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/WorkspaceConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceKey" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceState": { + "type": "string", + "enum": [ + "WORKSPACE_STATE_UNSPECIFIED", + "WORKSPACE_STATE_PENDING", + "WORKSPACE_STATE_SUBMITTED", + "WORKSPACE_STATE_ABANDONED", + "WORKSPACE_STATE_CONFLICTS", + "WORKSPACE_STATE_ROLLED_BACK" + ] + }, + "ResponseStatus": { + "type": "string", + "enum": [ + "RESPONSE_STATUS_UNSPECIFIED", + "RESPONSE_STATUS_SUCCESS", + "RESPONSE_STATUS_FAIL" + ] + }, + "ResponseCode": { + "type": "string", + "enum": [ + "RESPONSE_CODE_UNSPECIFIED", + "RESPONSE_CODE_INACTIVE_DEVICES_EXIST", + "RESPONSE_CODE_DECOMMISSION_DEVICES_INCOMPLETE", + "RESPONSE_CODE_SYNCHRONIZATION_REQUIRED" + ] + }, + "WorkspaceOpResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/components/schemas/ResponseStatus" + }, + "message": { + "type": "string" + }, + "code": { + "$ref": "#/components/schemas/ResponseCode" + } + } + }, + "WorkspaceResponses": { + "type": "object", + "properties": { + "values": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/WorkspaceOpResponse" + }, + "description": "Map from request ID (see WorkspaceRequestParams.requestId) to its Response." + } + } + }, + "Workspace": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceKey" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "lastModifiedAt": { + "type": "string", + "format": "date-time" + }, + "lastModifiedBy": { + "type": "string" + }, + "state": { + "$ref": "#/components/schemas/WorkspaceState" + }, + "lastBuildId": { + "type": "string", + "description": "ID of the last build for this workspace -- use with workspace_GetBuild / workspace_GetBuildDetails." + }, + "responses": { + "$ref": "#/components/schemas/WorkspaceResponses", + "description": "Responses for every request executed so far on this workspace; check the entry keyed by your requestId to see if a build/submit succeeded." + }, + "ccIds": { + "$ref": "#/components/schemas/StringList", + "description": "Change Control IDs created as a result of submitting this workspace." + }, + "needsBuild": { + "type": "boolean" + }, + "lastRebasedAt": { + "type": "string", + "format": "date-time" + }, + "needsRebase": { + "type": "boolean" + }, + "displayName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "excludeNetworkProvisioning": { + "type": "boolean" + }, + "decommissionRequestIds": { + "type": "object", + "description": "Map of device ID to decommission request UUID, for devices staged for decommission in this workspace." + } + } + }, + "WorkspaceResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/Workspace" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceBuildKey": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string" + }, + "buildId": { + "type": "string" + } + }, + "required": [ + "workspaceId", + "buildId" + ] + }, + "BuildState": { + "type": "string", + "enum": [ + "BUILD_STATE_UNSPECIFIED", + "BUILD_STATE_IN_PROGRESS", + "BUILD_STATE_CANCELED", + "BUILD_STATE_SUCCESS", + "BUILD_STATE_FAIL", + "BUILD_STATE_SKIPPED" + ] + }, + "WorkspaceBuild": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceBuildKey" + }, + "state": { + "$ref": "#/components/schemas/BuildState", + "description": "Overall build execution status -- BUILD_STATE_SUCCESS means the workspace built and validated cleanly." + }, + "error": { + "type": "string", + "description": "Set if the build failed early, before per-device results were computed." + }, + "builtBy": { + "type": "string" + }, + "authzResult": { + "type": "object", + "description": "Authorization check result; vendor-defined nested structure preserved as-is." + }, + "studioBuildDetails": { + "type": "object", + "description": "Per-studio build results not specific to a device; vendor-defined nested structure preserved as-is." + }, + "hierarchyBuildStatus": { + "type": "object", + "description": "Hierarchy build results; vendor-defined nested structure preserved as-is." + } + } + }, + "WorkspaceBuildResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/WorkspaceBuild" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceBuildDetailsKey": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string" + }, + "buildId": { + "type": "string" + }, + "deviceId": { + "type": "string" + } + }, + "required": [ + "workspaceId", + "buildId", + "deviceId" + ] + }, + "BuildStage": { + "type": "string", + "enum": [ + "BUILD_STAGE_UNSPECIFIED", + "BUILD_STAGE_INPUT_VALIDATION", + "BUILD_STAGE_CONFIGLET_BUILD", + "BUILD_STAGE_CONFIG_VALIDATION", + "BUILD_STAGE_IMAGE_VALIDATION" + ] + }, + "WorkspaceBuildDetails": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceBuildDetailsKey" + }, + "state": { + "$ref": "#/components/schemas/BuildState" + }, + "stage": { + "$ref": "#/components/schemas/BuildStage" + }, + "inputValidationResults": { + "type": "object", + "description": "Results of the input validation stage; vendor-defined nested structure preserved as-is." + }, + "configletBuildResults": { + "type": "object", + "description": "Results of the configlet build stage; vendor-defined nested structure preserved as-is." + }, + "configValidationResult": { + "type": "object", + "description": "Result of the config validation stage; vendor-defined nested structure preserved as-is." + }, + "imageValidationResult": { + "type": "object", + "description": "Result of the image validation stage; vendor-defined nested structure preserved as-is." + }, + "configValidationSkipCause": { + "type": "string" + }, + "imageValidationSkipCause": { + "type": "string" + }, + "buildStageState": { + "type": "object", + "description": "State for each build stage; vendor-defined nested structure preserved as-is." + }, + "authzStatus": { + "type": "string" + }, + "configSyncResult": { + "type": "object", + "description": "Result of the config sync; vendor-defined nested structure preserved as-is." + }, + "configSyncSkipCause": { + "type": "string" + } + } + }, + "WorkspaceBuildDetailsResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/WorkspaceBuildDetails" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "InputsKey": { + "type": "object", + "properties": { + "studioId": { + "type": "string", + "description": "ID of the studio, e.g. \"studio-static-configlet\" for the Static Configlet Studio." + }, + "workspaceId": { + "type": "string" + }, + "path": { + "$ref": "#/components/schemas/StringList", + "description": "Path to the input field being set, e.g. [] for the studio's entire root input." + } + }, + "required": [ + "studioId", + "workspaceId", + "path" + ] + }, + "InputsConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/InputsKey" + }, + "remove": { + "type": "boolean", + "description": "Set true to remove the inputs at this path instead of adding/setting them." + }, + "inputs": { + "type": "string", + "description": "Value of the input field at this path, encoded as a JSON string." + } + }, + "required": [ + "key" + ] + }, + "InputsConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/InputsConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "InputsConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/InputsKey" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "Inputs": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/InputsKey" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "lastModifiedAt": { + "type": "string", + "format": "date-time" + }, + "lastModifiedBy": { + "type": "string" + }, + "inputs": { + "type": "string", + "description": "Resolved value of the input field at this path, as a JSON string." + } + } + }, + "InputsResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/Inputs" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "ChangeControlKey": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the Change Control." + } + }, + "required": [ + "id" + ] + }, + "FlagConfig": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + } + } + }, + "Flag": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + }, + "time": { + "type": "string", + "format": "date-time" + }, + "user": { + "type": "string" + } + } + }, + "TimestampFlagConfig": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "date-time", + "description": "Set to a timestamp to schedule, or omit/null to unschedule." + }, + "notes": { + "type": "string" + } + } + }, + "TimestampFlag": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "date-time" + }, + "notes": { + "type": "string" + }, + "time": { + "type": "string", + "format": "date-time" + }, + "user": { + "type": "string" + } + } + }, + "ChangeConfig": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "rootStageId": { + "type": "string", + "description": "ID of the root stage, i.e. the stage that executes first." + }, + "stages": { + "type": "object", + "description": "Map of stage ID to stage configuration; vendor-defined nested structure preserved as-is." + }, + "notes": { + "type": "string" + } + } + }, + "Change": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "rootStageId": { + "type": "string" + }, + "stages": { + "type": "object", + "description": "Map of stage ID to stage configuration and status; vendor-defined nested structure preserved as-is." + }, + "notes": { + "type": "string" + }, + "time": { + "type": "string", + "format": "date-time" + }, + "user": { + "type": "string" + } + } + }, + "ChangeControlStatus": { + "type": "string", + "enum": [ + "CHANGE_CONTROL_STATUS_UNSPECIFIED", + "CHANGE_CONTROL_STATUS_RUNNING", + "CHANGE_CONTROL_STATUS_COMPLETED", + "CHANGE_CONTROL_STATUS_SCHEDULED", + "CHANGE_CONTROL_STATUS_NOT_STARTED" + ] + }, + "ChangeControlConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/ChangeControlKey" + }, + "change": { + "$ref": "#/components/schemas/ChangeConfig" + }, + "start": { + "$ref": "#/components/schemas/FlagConfig", + "description": "Set start.value=true to execute the Change Control, false to stop it." + }, + "schedule": { + "$ref": "#/components/schemas/TimestampFlagConfig", + "description": "Set schedule.value to a timestamp to schedule execution." + } + }, + "required": [ + "key" + ] + }, + "ChangeControlConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/ChangeControlConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "ChangeControlConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/ChangeControlKey" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "ChangeControl": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/ChangeControlKey" + }, + "change": { + "$ref": "#/components/schemas/Change" + }, + "approve": { + "$ref": "#/components/schemas/Flag", + "description": "Whether the Change Control has been approved." + }, + "start": { + "$ref": "#/components/schemas/Flag", + "description": "Whether the Change Control has been flagged to start/stop execution." + }, + "status": { + "$ref": "#/components/schemas/ChangeControlStatus" + }, + "error": { + "type": "string", + "description": "Error from execution, if any. No error implies success once status is COMPLETED." + }, + "schedule": { + "$ref": "#/components/schemas/TimestampFlag" + }, + "deviceIds": { + "$ref": "#/components/schemas/StringList", + "description": "Device IDs this Change Control operates on." + }, + "deviceIdToStageIds": { + "type": "object", + "description": "Map of device ID to the stages that apply to it; vendor-defined nested structure preserved as-is." + }, + "creation": { + "type": "object", + "description": "Who/when created this Change Control; vendor-defined nested structure preserved as-is." + } + } + }, + "ChangeControlResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/ChangeControl" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "ApproveConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/ChangeControlKey" + }, + "approve": { + "$ref": "#/components/schemas/FlagConfig", + "description": "Set approve.value=true to approve, false to unapprove." + }, + "version": { + "type": "string", + "format": "date-time", + "description": "Timestamp of the Change Control being approved (from changeControl_Get's change.time), required when approve.value=true -- guards against approving a stale/updated Change Control." + }, + "overrideReason": { + "type": "object", + "description": "User-provided reason to override Change Control validation, if applicable." + } + }, + "required": [ + "key" + ] + }, + "ApproveConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/ApproveConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + } + }, + "securitySchemes": { + "bearerAuth": { + "type": "apiKey", + "in": "header", + "name": "Authorization", + "description": "Service-account bearer token. Value format: \"Bearer \". Generate a service account and token in CVaaS under Settings > Service Accounts." + } + } + } +} \ No newline at end of file From 3f237117861051b24f9f82de141a4a75a6707e27 Mon Sep 17 00:00:00 2001 From: Michael Elrom Date: Mon, 17 Aug 2026 17:46:34 -0400 Subject: [PATCH 2/3] feat(arista): add CloudVision Studio Project Adds 15 workflows covering Workspace, Studio, and Change Control lifecycle operations for the modern CloudVision provisioning flow. --- Arista/CloudVision/README.md | 91 + .../Arista CloudVision.project.json | 2415 +++++++++++++++++ 2 files changed, 2506 insertions(+) create mode 100644 Arista/CloudVision/README.md create mode 100644 Arista/CloudVision/Studio Projects/Arista CloudVision.project.json diff --git a/Arista/CloudVision/README.md b/Arista/CloudVision/README.md new file mode 100644 index 0000000..a111515 --- /dev/null +++ b/Arista/CloudVision/README.md @@ -0,0 +1,91 @@ +Arista CloudVision-as-a-Service (CVaaS) is Arista's cloud-hosted network management platform, providing fleet-wide visibility and configuration management for Arista devices through a state-based, resource-oriented API. + +This project provides an OpenAPI spec for automating against CVaaS's modern Workspace/Studio provisioning model via an Integration Model, plus a Studio Project of ready-to-import workflows built on that model. + +## Table of Contents + +- [Contents](#contents) +- [Requirements](#requirements) +- [Integration Configuration](#integration-configuration) +- [OpenAPIs](#openapis) +- [Studio Projects](#studio-projects) + - [Arista CloudVision Project](#arista-cloudvision-project) + - [Folder Structure](#folder-structure) + - [Dependencies](#dependencies) + +## Contents + +| Asset | Description | +|---|---| +| [OpenAPIs/](./OpenAPIs/) | Arista CloudVision Workspace/Studio/Change Control OpenAPI spec | +| [Studio Projects/](./Studio%20Projects/) | Itential Platform project containing all 15 workflows in 3 folders | + +## Requirements + +| Requirement | Version | +|---|---| +| Itential Platform | 6.x | +| `Arista CloudVision:latest` Integration Model | Required to build automation against the OpenAPI spec, and to run the Studio Project below | +| A CVaaS service account | Required to obtain a bearer token | + +## Integration Configuration + +Import `arista_cloudvision_api-latest.json` as an Integration Model in **Admin > Integrations**, then create an integration pointing at your CVaaS tenant's host. + +Authentication is a service-account bearer token: generate one in CVaaS under Settings > Service Accounts, and send it as `Authorization: Bearer ` on every request. + +The instance's `authentication`/`server` properties should look like this once configured: + +```json +{ + "authentication": { + "bearerAuth": { + "Authorization": "Bearer " + } + }, + "server": { + "protocol": "https", + "host": "", + "base_path": "" + } +} +``` + +## OpenAPIs + +| Spec | Version | Operations | Description | +|---|---|---|---| +| [`arista_cloudvision_api-latest.json`](./OpenAPIs/arista_cloudvision_api-latest.json) | latest | 15 | Scoped to the Workspace/Studio/Change Control provisioning flow — see breakdown below | + +CloudVision's Resource APIs are gRPC-native; this spec describes Arista's own generated REST/JSON gateway over those same services (introduced in CVP 2021.1.0, still actively maintained), converted from the vendor's published Swagger 2.0 documents to OpenAPI 3.0. + +Resources included, by category: + +- **Workspace**: Create/update (including issuing build, submit, cancel, abandon, or rollback requests), get, delete, get status, get build status, get per-device build detail +- **Studio**: Set/get/delete a studio's input configuration at a path (e.g. push configuration into the Static Configlet Studio), get the resolved input value +- **Change Control**: Create/update (including flagging start/stop/schedule), get configuration, delete, get full status, approve + +A typical flow: create a workspace, push configuration into a Studio, request a build (a single call that internally validates, compiles, and checks the change), submit the workspace (which creates a Change Control), then approve and start that Change Control. + +Deliberately excludes: every other Studio resource (AssignedTags, AutofillAction, SecretInput, Studio/StudioConfig, StudioSummary) and Change Control's ChangeControlSummary, since they aren't part of this flow; the "list all" and "get several" operations on every resource, since those are long-lived streaming (chunked NDJSON) responses rather than a single JSON object and don't fit a request/response workflow task; and the dozens of other CloudVision resource packages (inventory, tags, image, telemetry, etc.) entirely, since they're outside this workflow. Several nested vendor structures (build diagnostics, change control stages) are preserved as opaque objects rather than fully typed, since they're deep, vendor-internal detail not needed to drive this flow. + +## Studio Projects + +### Arista CloudVision Project + +Backed by the **`Arista CloudVision:latest`** Integration Model (see [`arista_cloudvision_api-latest.json`](./OpenAPIs/arista_cloudvision_api-latest.json) above). The project contains **15 workflows** organized into **3 folders**. + +#### Folder Structure + +| Folder | Workflows | Scope | +|---|---|---| +| Workspace | 6 | Workspace lifecycle, build/submit requests, build status | +| Change Control | 5 | Change Control lifecycle, status, approval | +| Studio | 4 | Studio input configuration | + +#### Dependencies + +| Dependency | Notes | +|---|---| +| `Arista CloudVision:latest` Integration Model | Import from [`arista_cloudvision_api-latest.json`](./OpenAPIs/arista_cloudvision_api-latest.json) before importing the project | +| `Arista CloudVision` integration instance | Create in **Admin > Integrations** with the connection properties above. Workflows are wired to an integration instance named `Arista CloudVision` — update the `adapter_id` value in each workflow task if yours is named differently | diff --git a/Arista/CloudVision/Studio Projects/Arista CloudVision.project.json b/Arista/CloudVision/Studio Projects/Arista CloudVision.project.json new file mode 100644 index 0000000..420ca96 --- /dev/null +++ b/Arista/CloudVision/Studio Projects/Arista CloudVision.project.json @@ -0,0 +1,2415 @@ +{ + "_id": "6a8381055f16a73261948aac", + "name": "Arista CloudVision", + "description": "Workspace, Studio, and Change Control workflows backed by the Arista CloudVision Integration Model, covering the modern Workspace/Studio provisioning flow.", + "components": [ + { + "iid": 0, + "reference": "40134d16-7a34-41fe-ae66-ac85c7c75698", + "type": "workflow", + "folder": "/Workspace", + "document": { + "name": "Create or Update Workspace", + "description": "Create or Update Workspace", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "workspace_Set", + "canvasName": "workspace_Set", + "summary": "workspace_Set", + "description": "workspace_Set", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Unique ID of the workspace." + } + }, + "required": [ + "workspaceId" + ] + }, + "displayName": { + "type": "string", + "description": "User-defined name of the workspace." + }, + "description": { + "type": "string", + "description": "Brief description of the workspace." + }, + "request": { + "description": "Set to kick off an asynchronous operation (build, submit, etc.) on the workspace.", + "type": "string", + "enum": [ + "REQUEST_UNSPECIFIED", + "REQUEST_START_BUILD", + "REQUEST_CANCEL_BUILD", + "REQUEST_SUBMIT", + "REQUEST_ABANDON", + "REQUEST_ROLLBACK", + "REQUEST_SUBMIT_FORCE", + "REQUEST_REBASE" + ] + }, + "requestParams": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Unique ID of this request, used to look up its Response in Workspace.responses." + } + } + }, + "excludeNetworkProvisioning": { + "type": "boolean", + "description": "Used only during Network-Provisioning-to-Studios migration; leave unset otherwise." + } + }, + "required": [ + "key" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Unique ID of the workspace." + } + }, + "required": [ + "workspaceId" + ] + }, + "displayName": { + "type": "string", + "description": "User-defined name of the workspace." + }, + "description": { + "type": "string", + "description": "Brief description of the workspace." + }, + "request": { + "description": "Set to kick off an asynchronous operation (build, submit, etc.) on the workspace.", + "type": "string", + "enum": [ + "REQUEST_UNSPECIFIED", + "REQUEST_START_BUILD", + "REQUEST_CANCEL_BUILD", + "REQUEST_SUBMIT", + "REQUEST_ABANDON", + "REQUEST_ROLLBACK", + "REQUEST_SUBMIT_FORCE", + "REQUEST_REBASE" + ] + }, + "requestParams": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Unique ID of this request, used to look up its Response in Workspace.responses." + } + } + }, + "excludeNetworkProvisioning": { + "type": "boolean", + "description": "Used only during Network-Provisioning-to-Studios migration; leave unset otherwise." + } + }, + "required": [ + "key" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "a9c53fe1-6fd9-4d45-aedc-b754c1b7e4c3", + "created": "2026-08-17T21:45:16.075Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 1, + "reference": "a4f4b3bd-620e-49c1-bc9e-6165a5986faf", + "type": "workflow", + "folder": "/Workspace", + "document": { + "name": "Get Workspace Configuration", + "description": "Get Workspace Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "workspace_Get", + "canvasName": "workspace_Get", + "summary": "workspace_Get", + "description": "workspace_Get", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "8bdc983b-03e7-4fa9-b765-698ff4dd313b", + "created": "2026-08-17T21:45:16.128Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 2, + "reference": "c94173c8-0136-4ef4-8705-5c6a89d4d871", + "type": "workflow", + "folder": "/Workspace", + "document": { + "name": "Delete Workspace", + "description": "Delete Workspace", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "workspace_Delete", + "canvasName": "workspace_Delete", + "summary": "workspace_Delete", + "description": "workspace_Delete", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "ce57dbc4-64c4-48d9-949c-36c25bc083ae", + "created": "2026-08-17T21:45:16.169Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 3, + "reference": "76baddcc-62bc-4f9e-b5ec-dede7d930340", + "type": "workflow", + "folder": "/Workspace", + "document": { + "name": "Get Workspace Status", + "description": "Get Workspace Status", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "workspace_GetStatus", + "canvasName": "workspace_GetStatus", + "summary": "workspace_GetStatus", + "description": "workspace_GetStatus", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "9d354b57-27a7-44f8-b0b1-97c25ee9e128", + "created": "2026-08-17T21:45:16.208Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 4, + "reference": "c33e599e-d573-4a9d-b2c9-9db71261e687", + "type": "workflow", + "folder": "/Workspace", + "document": { + "name": "Get Workspace Build", + "description": "Get Workspace Build", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "workspace_GetBuild", + "canvasName": "workspace_GetBuild", + "summary": "workspace_GetBuild", + "description": "workspace_GetBuild", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.buildId": "$var.job.key.buildId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.buildId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.buildId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.buildId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "d82c682f-487a-4d15-b3b7-63f0b9562bd8", + "created": "2026-08-17T21:45:16.248Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 5, + "reference": "fe6c4a0e-21c9-49ca-a0a6-51c33267f1dd", + "type": "workflow", + "folder": "/Workspace", + "document": { + "name": "Get Workspace Build Details", + "description": "Get Workspace Build Details", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "workspace_GetBuildDetails", + "canvasName": "workspace_GetBuildDetails", + "summary": "workspace_GetBuildDetails", + "description": "workspace_GetBuildDetails", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.buildId": "$var.job.key.buildId", + "key.deviceId": "$var.job.key.deviceId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.buildId": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.buildId", + "key.deviceId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.buildId": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "2245057c-9911-49f0-b2d2-817e97bcf857", + "created": "2026-08-17T21:45:16.290Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 6, + "reference": "c3efdd1b-5447-4d5d-97f2-42537b046a7b", + "type": "workflow", + "folder": "/Studio", + "document": { + "name": "Set Studio Inputs", + "description": "Set Studio Inputs", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "studio_SetInputs", + "canvasName": "studio_SetInputs", + "summary": "studio_SetInputs", + "description": "studio_SetInputs", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "studioId": { + "type": "string", + "description": "ID of the studio, e.g. \"studio-static-configlet\" for the Static Configlet Studio." + }, + "workspaceId": { + "type": "string" + }, + "path": { + "description": "Path to the input field being set, e.g. [] for the studio's entire root input.", + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "studioId", + "workspaceId", + "path" + ] + }, + "remove": { + "type": "boolean", + "description": "Set true to remove the inputs at this path instead of adding/setting them." + }, + "inputs": { + "type": "string", + "description": "Value of the input field at this path, encoded as a JSON string." + } + }, + "required": [ + "key" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "studioId": { + "type": "string", + "description": "ID of the studio, e.g. \"studio-static-configlet\" for the Static Configlet Studio." + }, + "workspaceId": { + "type": "string" + }, + "path": { + "description": "Path to the input field being set, e.g. [] for the studio's entire root input.", + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "studioId", + "workspaceId", + "path" + ] + }, + "remove": { + "type": "boolean", + "description": "Set true to remove the inputs at this path instead of adding/setting them." + }, + "inputs": { + "type": "string", + "description": "Value of the input field at this path, encoded as a JSON string." + } + }, + "required": [ + "key" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "e2e04f56-8cb9-423a-978a-fe097d461bc0", + "created": "2026-08-17T21:45:16.329Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 7, + "reference": "e0bc95ce-2978-491f-8d88-059ec4fa1ded", + "type": "workflow", + "folder": "/Studio", + "document": { + "name": "Get Studio Inputs Configuration", + "description": "Get Studio Inputs Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "studio_GetInputsConfig", + "canvasName": "studio_GetInputsConfig", + "summary": "studio_GetInputsConfig", + "description": "studio_GetInputsConfig", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.studioId": "$var.job.key.studioId", + "key.workspaceId": "$var.job.key.workspaceId", + "key.path.values": "$var.job.key.path.values" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.studioId": { + "type": "string" + }, + "key.workspaceId": { + "type": "string" + }, + "key.path.values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "key.studioId", + "key.workspaceId", + "key.path.values" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.studioId": { + "type": "string" + }, + "key.workspaceId": { + "type": "string" + }, + "key.path.values": { + "type": "array", + "items": { + "type": "string" + } + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "c1b31197-b529-4a56-826b-216e22f6da09", + "created": "2026-08-17T21:45:16.366Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 8, + "reference": "0f44b95c-7202-439e-8c73-8e84b60be00b", + "type": "workflow", + "folder": "/Studio", + "document": { + "name": "Delete Studio Inputs", + "description": "Delete Studio Inputs", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "studio_DeleteInputs", + "canvasName": "studio_DeleteInputs", + "summary": "studio_DeleteInputs", + "description": "studio_DeleteInputs", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.studioId": "$var.job.key.studioId", + "key.workspaceId": "$var.job.key.workspaceId", + "key.path.values": "$var.job.key.path.values" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.studioId": { + "type": "string" + }, + "key.workspaceId": { + "type": "string" + }, + "key.path.values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "key.studioId", + "key.workspaceId", + "key.path.values" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.studioId": { + "type": "string" + }, + "key.workspaceId": { + "type": "string" + }, + "key.path.values": { + "type": "array", + "items": { + "type": "string" + } + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "126ffa84-b4d8-42d1-bee7-f81a8edc6096", + "created": "2026-08-17T21:45:16.406Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 9, + "reference": "944fd61a-e369-4c07-9bb3-add54e21c018", + "type": "workflow", + "folder": "/Studio", + "document": { + "name": "Get Resolved Studio Inputs", + "description": "Get Resolved Studio Inputs", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "studio_GetResolvedInputs", + "canvasName": "studio_GetResolvedInputs", + "summary": "studio_GetResolvedInputs", + "description": "studio_GetResolvedInputs", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.studioId": "$var.job.key.studioId", + "key.workspaceId": "$var.job.key.workspaceId", + "key.path.values": "$var.job.key.path.values" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.studioId": { + "type": "string" + }, + "key.workspaceId": { + "type": "string" + }, + "key.path.values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "key.studioId", + "key.workspaceId", + "key.path.values" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.studioId": { + "type": "string" + }, + "key.workspaceId": { + "type": "string" + }, + "key.path.values": { + "type": "array", + "items": { + "type": "string" + } + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "9d5375e6-1549-4de8-8653-327694edd406", + "created": "2026-08-17T21:45:16.453Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 10, + "reference": "4c4a8394-2e5c-4303-a982-12bcf3a5f047", + "type": "workflow", + "folder": "/Change Control", + "document": { + "name": "Create or Update Change Control", + "description": "Create or Update Change Control", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "changeControl_Set", + "canvasName": "changeControl_Set", + "summary": "changeControl_Set", + "description": "changeControl_Set", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the Change Control." + } + }, + "required": [ + "id" + ] + }, + "change": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "rootStageId": { + "type": "string", + "description": "ID of the root stage, i.e. the stage that executes first." + }, + "stages": { + "type": "object", + "description": "Map of stage ID to stage configuration; vendor-defined nested structure preserved as-is." + }, + "notes": { + "type": "string" + } + } + }, + "start": { + "description": "Set start.value=true to execute the Change Control, false to stop it.", + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + } + } + }, + "schedule": { + "description": "Set schedule.value to a timestamp to schedule execution.", + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "date-time", + "description": "Set to a timestamp to schedule, or omit/null to unschedule." + }, + "notes": { + "type": "string" + } + } + } + }, + "required": [ + "key" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the Change Control." + } + }, + "required": [ + "id" + ] + }, + "change": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "rootStageId": { + "type": "string", + "description": "ID of the root stage, i.e. the stage that executes first." + }, + "stages": { + "type": "object", + "description": "Map of stage ID to stage configuration; vendor-defined nested structure preserved as-is." + }, + "notes": { + "type": "string" + } + } + }, + "start": { + "description": "Set start.value=true to execute the Change Control, false to stop it.", + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + } + } + }, + "schedule": { + "description": "Set schedule.value to a timestamp to schedule execution.", + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "date-time", + "description": "Set to a timestamp to schedule, or omit/null to unschedule." + }, + "notes": { + "type": "string" + } + } + } + }, + "required": [ + "key" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "67cb2893-7a08-4796-ba19-2625aaa4728b", + "created": "2026-08-17T21:45:16.498Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 11, + "reference": "1ce4bcbb-01fd-4643-9564-97a07d90e2ec", + "type": "workflow", + "folder": "/Change Control", + "document": { + "name": "Get Change Control Configuration", + "description": "Get Change Control Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "changeControl_GetConfig", + "canvasName": "changeControl_GetConfig", + "summary": "changeControl_GetConfig", + "description": "changeControl_GetConfig", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.id": "$var.job.key.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.id": { + "type": "string" + } + }, + "required": [ + "key.id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "b51c96df-557a-45db-aa33-ba4456c0a70b", + "created": "2026-08-17T21:45:16.538Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 12, + "reference": "39a5877b-dca7-421a-98c4-653174307a0f", + "type": "workflow", + "folder": "/Change Control", + "document": { + "name": "Delete Change Control", + "description": "Delete Change Control", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "changeControl_Delete", + "canvasName": "changeControl_Delete", + "summary": "changeControl_Delete", + "description": "changeControl_Delete", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.id": "$var.job.key.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.id": { + "type": "string" + } + }, + "required": [ + "key.id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "db513172-8f9e-4469-9a37-02c5c910d954", + "created": "2026-08-17T21:45:16.577Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 13, + "reference": "1edcb9b3-f8b2-463b-b9c0-341a294bdd14", + "type": "workflow", + "folder": "/Change Control", + "document": { + "name": "Get Change Control Status", + "description": "Get Change Control Status", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "changeControl_Get", + "canvasName": "changeControl_Get", + "summary": "changeControl_Get", + "description": "changeControl_Get", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.id": "$var.job.key.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.id": { + "type": "string" + } + }, + "required": [ + "key.id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "a6d8b17f-39ee-4e85-88ae-7ce375bfa124", + "created": "2026-08-17T21:45:16.628Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 14, + "reference": "603da12c-f1da-4930-84d0-daab2f7b135d", + "type": "workflow", + "folder": "/Change Control", + "document": { + "name": "Approve Change Control", + "description": "Approve Change Control", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "changeControl_SetApproval", + "canvasName": "changeControl_SetApproval", + "summary": "changeControl_SetApproval", + "description": "changeControl_SetApproval", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the Change Control." + } + }, + "required": [ + "id" + ] + }, + "approve": { + "description": "Set approve.value=true to approve, false to unapprove.", + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + } + } + }, + "version": { + "type": "string", + "format": "date-time", + "description": "Timestamp of the Change Control being approved (from changeControl_Get's change.time), required when approve.value=true -- guards against approving a stale/updated Change Control." + }, + "overrideReason": { + "type": "object", + "description": "User-provided reason to override Change Control validation, if applicable." + } + }, + "required": [ + "key" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the Change Control." + } + }, + "required": [ + "id" + ] + }, + "approve": { + "description": "Set approve.value=true to approve, false to unapprove.", + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + } + } + }, + "version": { + "type": "string", + "format": "date-time", + "description": "Timestamp of the Change Control being approved (from changeControl_Get's change.time), required when approve.value=true -- guards against approving a stale/updated Change Control." + }, + "overrideReason": { + "type": "object", + "description": "User-provided reason to override Change Control validation, if applicable." + } + }, + "required": [ + "key" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "f2520bc1-2509-47c0-b369-6862423fef55", + "created": "2026-08-17T21:45:16.666Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + } + ], + "folders": [ + { + "nodeType": "folder", + "name": "Workspace", + "children": [ + { + "iid": 0, + "nodeType": "component" + }, + { + "iid": 1, + "nodeType": "component" + }, + { + "iid": 2, + "nodeType": "component" + }, + { + "iid": 3, + "nodeType": "component" + }, + { + "iid": 4, + "nodeType": "component" + }, + { + "iid": 5, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Studio", + "children": [ + { + "iid": 6, + "nodeType": "component" + }, + { + "iid": 7, + "nodeType": "component" + }, + { + "iid": 8, + "nodeType": "component" + }, + { + "iid": 9, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Change Control", + "children": [ + { + "iid": 10, + "nodeType": "component" + }, + { + "iid": 11, + "nodeType": "component" + }, + { + "iid": 12, + "nodeType": "component" + }, + { + "iid": 13, + "nodeType": "component" + }, + { + "iid": 14, + "nodeType": "component" + } + ] + } + ], + "createdBy": { + "_id": "699f3e2b85569c9f5d8e1f38", + "provenance": "LDAP", + "username": "admin@itential" + }, + "lastUpdatedBy": { + "_id": "699f3e2b85569c9f5d8e1f38", + "provenance": "LDAP", + "username": "admin@itential" + }, + "created": "2026-08-17T21:45:41.392Z", + "lastUpdated": "2026-08-17T21:45:41.392Z", + "iid": 47, + "thumbnail": "data:image/png;base64,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", + "backgroundColor": "#FFFFFF", + "referencedComponentHashes": [] +} \ No newline at end of file From f01f14e5e5833abcea18449a668a617853343d67 Mon Sep 17 00:00:00 2001 From: Michael Elrom Date: Mon, 17 Aug 2026 23:44:31 -0400 Subject: [PATCH 3/3] feat(arista): expand CloudVision spec with Inventory, Tags, and Software Management Adds 25 operations covering device onboarding/decommissioning, tags/tag assignments, and software image management, bringing the spec to 40 operations and the Studio Project to 40 workflows across 6 folders. --- .../arista_cloudvision_api-latest.json | 2973 +++++++++--- Arista/CloudVision/README.md | 22 +- .../Arista CloudVision.project.json | 4018 ++++++++++++++++- 3 files changed, 6425 insertions(+), 588 deletions(-) diff --git a/Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json b/Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json index 16f7ce8..e0162ba 100644 --- a/Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json +++ b/Arista/CloudVision/OpenAPIs/arista_cloudvision_api-latest.json @@ -2,10 +2,10 @@ "openapi": "3.0.0", "info": { "version": "latest", - "x-vendor-api-version": "CloudVision Resource APIs (workspace.v1, studio.v1, changecontrol.v1)", + "x-vendor-api-version": "CloudVision Resource APIs (workspace.v1, studio.v1, changecontrol.v1, inventory.v1, tag.v2, softwaremanagement.v1)", "title": "Arista CloudVision", - "description": "Arista CloudVision-as-a-Service (CVaaS) Resource APIs for the modern Workspace/Studio provisioning model: create a workspace, push configuration into a Studio (e.g. the Static Configlet Studio), build and validate the workspace, submit it (which creates a Change Control), then approve and execute that Change Control.\n\nAuthentication: bearer service-account token. Send Authorization: Bearer on every request.\n\nCloudVision's Resource APIs are gRPC-native; this spec describes Arista's own generated REST/JSON gateway over those same services (introduced in CVP 2021.1.0, still actively maintained), converted from the vendor's published Swagger 2.0 documents to OpenAPI 3.0.\n\nSource: https://github.com/aristanetworks/cloudvision-apis", - "x-itential-curated": "Scoped to exactly the resources needed for the Workspace/Studio/Change Control provisioning flow: Workspace config and status, workspace build status (overall and per-device), Studio input configuration, and Change Control config/status/approval -- 15 operations across 3 of CloudVision's many resource packages. Deliberately excludes: every other studio.v1 resource (AssignedTags, AutofillAction, SecretInput, Studio/StudioConfig, StudioSummary) and changecontrol.v1's ChangeControlSummary, since they aren't part of this flow; the \"list all\" (GetAll) and \"get several\" (GetSome) operations on every resource, since those are long-lived streaming (chunked NDJSON) responses rather than a single JSON object and don't fit a request/response workflow task; and the dozens of other CloudVision resource packages (inventory, tags, image, telemetry, etc.) entirely, since they're outside this workflow. Several nested vendor structures (build diagnostics, change control stages) are preserved as opaque objects rather than fully typed, since they're deep, vendor-internal detail not needed to drive this flow -- the top-level state/status fields that matter (BuildState, ChangeControlStatus, etc.) are fully typed enums." + "description": "Arista CloudVision-as-a-Service (CVaaS) Resource APIs covering the modern Workspace/Studio provisioning flow (create a workspace, push configuration into a Studio, build and validate, submit to create a Change Control, then approve and execute it), device onboarding and decommissioning, tags and tag assignments, and software image/extension management.\n\nAuthentication: bearer service-account token. Send Authorization: Bearer on every request.\n\nSource: https://github.com/aristanetworks/cloudvision-apis", + "x-itential-curated": "Covers Workspace config/status/build, Studio input configuration, Change Control config/status/approval, device onboarding/decommissioning/inventory, tags and tag assignments, and software image/extension management -- 40 operations across 6 of CloudVision's resource packages. Excludes the \"list all\" (GetAll) and \"get several\" (GetSome) operations on every resource, since those are long-lived streaming (chunked NDJSON) responses rather than a single JSON object and don't fit a request/response workflow task, plus every other CloudVision resource package (alerting, dashboards, licensing, identity providers, etc.) outside this scope." }, "servers": [ { @@ -158,17 +158,17 @@ ] } }, - "/api/resources/studio/v1/Inputs": { + "/api/resources/inventory/v1/Device": { "get": { - "operationId": "studio_GetResolvedInputs", - "summary": "Get the resolved input value at a path in a studio", + "operationId": "inventory_GetDevice", + "summary": "Get an inventoried device's identity and streaming status", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InputsResponse" + "$ref": "#/components/schemas/DeviceResponse" } } } @@ -176,49 +176,57 @@ }, "parameters": [ { - "name": "key.studioId", + "name": "key.deviceId", "in": "query", "required": true, - "description": "ID of the studio.", + "description": "ID of the device.", "schema": { "type": "string" } - }, + } + ] + } + }, + "/api/resources/inventory/v1/DeviceDecommissioning": { + "get": { + "operationId": "inventory_GetDecommissioningStatus", + "summary": "Get the status of a decommissioning request", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceDecommissioningResponse" + } + } + } + } + }, + "parameters": [ { - "name": "key.workspaceId", + "name": "key.requestId", "in": "query", "required": true, - "description": "ID of the workspace the studio inputs live in.", + "description": "UUID of the decommissioning request.", "schema": { "type": "string" } - }, - { - "name": "key.path.values", - "in": "query", - "required": false, - "description": "Path segments to the input field.", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ] } }, - "/api/resources/studio/v1/InputsConfig": { + "/api/resources/inventory/v1/DeviceDecommissioningConfig": { "post": { - "operationId": "studio_SetInputs", - "summary": "Set a studio's input value at a path, e.g. push configuration into the Static Configlet Studio", + "operationId": "inventory_DecommissionDevice", + "summary": "Submit a request to decommission (stop streaming and remove from inventory) a device", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InputsConfigResponse" + "$ref": "#/components/schemas/DeviceDecommissioningConfigResponse" } } } @@ -229,22 +237,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InputsConfig" + "$ref": "#/components/schemas/DeviceDecommissioningConfig" } } } } }, "get": { - "operationId": "studio_GetInputsConfig", - "summary": "Get the configured input value at a path in a studio", + "operationId": "inventory_GetDecommissioningConfig", + "summary": "Get a decommissioning request's configuration", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InputsConfigResponse" + "$ref": "#/components/schemas/DeviceDecommissioningConfigResponse" } } } @@ -252,47 +260,26 @@ }, "parameters": [ { - "name": "key.studioId", - "in": "query", - "required": true, - "description": "ID of the studio.", - "schema": { - "type": "string" - } - }, - { - "name": "key.workspaceId", + "name": "key.requestId", "in": "query", "required": true, - "description": "ID of the workspace the studio inputs live in.", + "description": "UUID of the decommissioning request.", "schema": { "type": "string" } - }, - { - "name": "key.path.values", - "in": "query", - "required": false, - "description": "Path segments to the input field.", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ] }, "delete": { - "operationId": "studio_DeleteInputs", - "summary": "Remove a studio's input value at a path", + "operationId": "inventory_DeleteDecommissioningRequest", + "summary": "Delete a decommissioning request", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InputsConfigDeleteResponse" + "$ref": "#/components/schemas/DeviceDecommissioningConfigDeleteResponse" } } } @@ -300,49 +287,28 @@ }, "parameters": [ { - "name": "key.studioId", - "in": "query", - "required": true, - "description": "ID of the studio.", - "schema": { - "type": "string" - } - }, - { - "name": "key.workspaceId", + "name": "key.requestId", "in": "query", "required": true, - "description": "ID of the workspace the studio inputs live in.", + "description": "UUID of the decommissioning request.", "schema": { "type": "string" } - }, - { - "name": "key.path.values", - "in": "query", - "required": false, - "description": "Path segments to the input field.", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ] } }, - "/api/resources/workspace/v1/Workspace": { + "/api/resources/inventory/v1/DeviceOnboarding": { "get": { - "operationId": "workspace_GetStatus", - "summary": "Get a workspace's status -- state, build/submit request responses, and any Change Control IDs created on submit", + "operationId": "inventory_GetOnboardingStatus", + "summary": "Get the status of an onboarding request", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceResponse" + "$ref": "#/components/schemas/DeviceOnboardingResponse" } } } @@ -350,10 +316,10 @@ }, "parameters": [ { - "name": "key.workspaceId", + "name": "key.requestId", "in": "query", "required": true, - "description": "Unique ID of the workspace.", + "description": "UUID of the onboarding request.", "schema": { "type": "string" } @@ -361,17 +327,43 @@ ] } }, - "/api/resources/workspace/v1/WorkspaceBuild": { + "/api/resources/inventory/v1/DeviceOnboardingConfig": { + "post": { + "operationId": "inventory_OnboardDevice", + "summary": "Submit a request to onboard (start streaming and add to inventory) a device", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceOnboardingConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceOnboardingConfig" + } + } + } + } + }, "get": { - "operationId": "workspace_GetBuild", - "summary": "Get the overall status of a workspace build", + "operationId": "inventory_GetOnboardingConfig", + "summary": "Get an onboarding request's configuration", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceBuildResponse" + "$ref": "#/components/schemas/DeviceOnboardingConfigResponse" } } } @@ -379,19 +371,37 @@ }, "parameters": [ { - "name": "key.workspaceId", + "name": "key.requestId", "in": "query", "required": true, - "description": "ID of the workspace.", + "description": "UUID of the onboarding request.", "schema": { "type": "string" } - }, + } + ] + }, + "delete": { + "operationId": "inventory_DeleteOnboardingRequest", + "summary": "Delete an onboarding request", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceOnboardingConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ { - "name": "key.buildId", + "name": "key.requestId", "in": "query", "required": true, - "description": "ID of the build (Workspace.lastBuildId).", + "description": "UUID of the onboarding request.", "schema": { "type": "string" } @@ -399,17 +409,17 @@ ] } }, - "/api/resources/workspace/v1/WorkspaceBuildDetails": { + "/api/resources/inventory/v1/ProvisionedDevice": { "get": { - "operationId": "workspace_GetBuildDetails", - "summary": "Get per-device, per-stage build/validation detail for a workspace build", + "operationId": "inventory_GetProvisionedDevice", + "summary": "Get an onboarded device's provisioning status", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceBuildDetailsResponse" + "$ref": "#/components/schemas/ProvisionedDeviceResponse" } } } @@ -417,28 +427,86 @@ }, "parameters": [ { - "name": "key.workspaceId", + "name": "key.deviceId", "in": "query", "required": true, - "description": "ID of the workspace.", + "description": "ID of the device.", "schema": { "type": "string" } - }, + } + ] + } + }, + "/api/resources/softwaremanagement/v1/Assignments": { + "get": { + "operationId": "software_GetAssignments", + "summary": "Get the devices, ZTP upgrade rules, and studio tag queries that reference a software image", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AssignmentsResponse" + } + } + } + } + }, + "parameters": [ { - "name": "key.buildId", + "name": "key.name", "in": "query", "required": true, - "description": "ID of the build (Workspace.lastBuildId).", + "description": "Repository key name.", "schema": { "type": "string" } - }, + } + ] + } + }, + "/api/resources/softwaremanagement/v1/Releases": { + "get": { + "operationId": "software_GetReleases", + "summary": "List software releases available for download from Arista's Software Download site", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleasesResponse" + } + } + } + } + } + } + }, + "/api/resources/softwaremanagement/v1/Repository": { + "get": { + "operationId": "software_GetRepository", + "summary": "Get a software image/extension's upload/validation status and metadata", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RepositoryResponse" + } + } + } + } + }, + "parameters": [ { - "name": "key.deviceId", + "name": "key.name", "in": "query", "required": true, - "description": "ID of the device.", + "description": "Repository key name.", "schema": { "type": "string" } @@ -446,17 +514,17 @@ ] } }, - "/api/resources/workspace/v1/WorkspaceConfig": { + "/api/resources/softwaremanagement/v1/RepositoryConfig": { "post": { - "operationId": "workspace_Set", - "summary": "Create/update a workspace, or kick off an async request (build, submit, etc.) on it via the request field", + "operationId": "software_AddImage", + "summary": "Add or update a software image/extension in CloudVision, downloading it from Arista's Software Download site (or a prior upload) by URI", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceConfigResponse" + "$ref": "#/components/schemas/RepositoryConfigResponse" } } } @@ -467,22 +535,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceConfig" + "$ref": "#/components/schemas/RepositoryConfig" } } } } }, "get": { - "operationId": "workspace_Get", - "summary": "Get a workspace's configuration", + "operationId": "software_GetRepositoryConfig", + "summary": "Get a software image/extension's configuration", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceConfigResponse" + "$ref": "#/components/schemas/RepositoryConfigResponse" } } } @@ -490,10 +558,10 @@ }, "parameters": [ { - "name": "key.workspaceId", + "name": "key.name", "in": "query", "required": true, - "description": "Unique ID of the workspace.", + "description": "Repository key name (must include file suffix, e.g. \"EOS-4.30.0.swi\").", "schema": { "type": "string" } @@ -501,15 +569,15 @@ ] }, "delete": { - "operationId": "workspace_Delete", - "summary": "Delete a workspace", + "operationId": "software_DeleteImage", + "summary": "Remove a software image/extension from CloudVision", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WorkspaceConfigDeleteResponse" + "$ref": "#/components/schemas/RepositoryConfigDeleteResponse" } } } @@ -517,101 +585,1735 @@ }, "parameters": [ { - "name": "key.workspaceId", + "name": "key.name", "in": "query", "required": true, - "description": "Unique ID of the workspace.", + "description": "Repository key name.", "schema": { "type": "string" } } ] } - } - }, - "components": { - "schemas": { - "StringList": { - "type": "object", - "properties": { - "values": { - "type": "array", - "items": { - "type": "string" + }, + "/api/resources/studio/v1/Inputs": { + "get": { + "operationId": "studio_GetResolvedInputs", + "summary": "Get the resolved input value at a path in a studio", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsResponse" + } + } } } - } - }, - "WorkspaceKey": { - "type": "object", + }, + "parameters": [ + { + "name": "key.studioId", + "in": "query", + "required": true, + "description": "ID of the studio.", + "schema": { + "type": "string" + } + }, + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace the studio inputs live in.", + "schema": { + "type": "string" + } + }, + { + "name": "key.path.values", + "in": "query", + "required": false, + "description": "Path segments to the input field.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] + } + }, + "/api/resources/studio/v1/InputsConfig": { + "post": { + "operationId": "studio_SetInputs", + "summary": "Set a studio's input value at a path, e.g. push configuration into the Static Configlet Studio", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfig" + } + } + } + } + }, + "get": { + "operationId": "studio_GetInputsConfig", + "summary": "Get the configured input value at a path in a studio", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfigResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.studioId", + "in": "query", + "required": true, + "description": "ID of the studio.", + "schema": { + "type": "string" + } + }, + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace the studio inputs live in.", + "schema": { + "type": "string" + } + }, + { + "name": "key.path.values", + "in": "query", + "required": false, + "description": "Path segments to the input field.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] + }, + "delete": { + "operationId": "studio_DeleteInputs", + "summary": "Remove a studio's input value at a path", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InputsConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.studioId", + "in": "query", + "required": true, + "description": "ID of the studio.", + "schema": { + "type": "string" + } + }, + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace the studio inputs live in.", + "schema": { + "type": "string" + } + }, + { + "name": "key.path.values", + "in": "query", + "required": false, + "description": "Path segments to the input field.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] + } + }, + "/api/resources/tag/v2/Element": { + "get": { + "operationId": "tag_GetElement", + "summary": "Get a tagged or untaggable network element's identity", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ElementResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.type", + "in": "query", + "required": true, + "description": "ELEMENT_TYPE_DEVICE, ELEMENT_TYPE_INTERFACE, or ELEMENT_TYPE_VIRTUAL.", + "schema": { + "type": "string" + } + }, + { + "name": "key.subType", + "in": "query", + "required": true, + "description": "Element sub-type.", + "schema": { + "type": "string" + } + }, + { + "name": "key.primaryId", + "in": "query", + "required": true, + "description": "Primary ID (meaning depends on type/sub-type -- see schema description).", + "schema": { + "type": "string" + } + }, + { + "name": "key.secondaryId", + "in": "query", + "required": true, + "description": "Secondary ID (meaning depends on type/sub-type -- see schema description).", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/tag/v2/Tag": { + "get": { + "operationId": "tag_GetTag", + "summary": "Get a tag's merge-preview or merged state", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Workspace ID (\"\" for merged tags).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementType", + "in": "query", + "required": true, + "description": "ELEMENT_TYPE_DEVICE, ELEMENT_TYPE_INTERFACE, or ELEMENT_TYPE_VIRTUAL.", + "schema": { + "type": "string" + } + }, + { + "name": "key.label", + "in": "query", + "required": true, + "description": "Tag label.", + "schema": { + "type": "string" + } + }, + { + "name": "key.value", + "in": "query", + "required": true, + "description": "Tag value.", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementSubType", + "in": "query", + "required": true, + "description": "Tag element sub-type.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/tag/v2/TagAssignment": { + "get": { + "operationId": "tag_GetAssignment", + "summary": "Get a tag assignment's merge-preview or merged state", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagAssignmentResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Workspace ID (\"\" for merged assignments).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementType", + "in": "query", + "required": true, + "description": "ELEMENT_TYPE_DEVICE, ELEMENT_TYPE_INTERFACE, or ELEMENT_TYPE_VIRTUAL.", + "schema": { + "type": "string" + } + }, + { + "name": "key.label", + "in": "query", + "required": true, + "description": "Tag label.", + "schema": { + "type": "string" + } + }, + { + "name": "key.value", + "in": "query", + "required": true, + "description": "Tag value.", + "schema": { + "type": "string" + } + }, + { + "name": "key.deviceId", + "in": "query", + "required": false, + "description": "Device ID (for device/interface element types).", + "schema": { + "type": "string" + } + }, + { + "name": "key.interfaceId", + "in": "query", + "required": false, + "description": "Interface ID (for interface element type).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementSubType", + "in": "query", + "required": true, + "description": "Tag element sub-type.", + "schema": { + "type": "string" + } + }, + { + "name": "key.primaryEntityId", + "in": "query", + "required": false, + "description": "Primary entity ID (for virtual element type).", + "schema": { + "type": "string" + } + }, + { + "name": "key.secondaryEntityId", + "in": "query", + "required": false, + "description": "Secondary entity ID (for virtual element type).", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/tag/v2/TagAssignmentConfig": { + "post": { + "operationId": "tag_SetAssignment", + "summary": "Assign (or unassign) a tag to a network element (within a workspace, pending merge)", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagAssignmentConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagAssignmentConfig" + } + } + } + } + }, + "get": { + "operationId": "tag_GetAssignmentConfig", + "summary": "Get a tag assignment's configuration", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagAssignmentConfigResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Workspace ID (\"\" for merged assignments).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementType", + "in": "query", + "required": true, + "description": "ELEMENT_TYPE_DEVICE, ELEMENT_TYPE_INTERFACE, or ELEMENT_TYPE_VIRTUAL.", + "schema": { + "type": "string" + } + }, + { + "name": "key.label", + "in": "query", + "required": true, + "description": "Tag label.", + "schema": { + "type": "string" + } + }, + { + "name": "key.value", + "in": "query", + "required": true, + "description": "Tag value.", + "schema": { + "type": "string" + } + }, + { + "name": "key.deviceId", + "in": "query", + "required": false, + "description": "Device ID (for device/interface element types).", + "schema": { + "type": "string" + } + }, + { + "name": "key.interfaceId", + "in": "query", + "required": false, + "description": "Interface ID (for interface element type).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementSubType", + "in": "query", + "required": true, + "description": "Tag element sub-type.", + "schema": { + "type": "string" + } + }, + { + "name": "key.primaryEntityId", + "in": "query", + "required": false, + "description": "Primary entity ID (for virtual element type).", + "schema": { + "type": "string" + } + }, + { + "name": "key.secondaryEntityId", + "in": "query", + "required": false, + "description": "Secondary entity ID (for virtual element type).", + "schema": { + "type": "string" + } + } + ] + }, + "delete": { + "operationId": "tag_DeleteAssignment", + "summary": "Delete a tag assignment", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagAssignmentConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Workspace ID (\"\" for merged assignments).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementType", + "in": "query", + "required": true, + "description": "ELEMENT_TYPE_DEVICE, ELEMENT_TYPE_INTERFACE, or ELEMENT_TYPE_VIRTUAL.", + "schema": { + "type": "string" + } + }, + { + "name": "key.label", + "in": "query", + "required": true, + "description": "Tag label.", + "schema": { + "type": "string" + } + }, + { + "name": "key.value", + "in": "query", + "required": true, + "description": "Tag value.", + "schema": { + "type": "string" + } + }, + { + "name": "key.deviceId", + "in": "query", + "required": false, + "description": "Device ID (for device/interface element types).", + "schema": { + "type": "string" + } + }, + { + "name": "key.interfaceId", + "in": "query", + "required": false, + "description": "Interface ID (for interface element type).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementSubType", + "in": "query", + "required": true, + "description": "Tag element sub-type.", + "schema": { + "type": "string" + } + }, + { + "name": "key.primaryEntityId", + "in": "query", + "required": false, + "description": "Primary entity ID (for virtual element type).", + "schema": { + "type": "string" + } + }, + { + "name": "key.secondaryEntityId", + "in": "query", + "required": false, + "description": "Secondary entity ID (for virtual element type).", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/tag/v2/TagConfig": { + "post": { + "operationId": "tag_SetTag", + "summary": "Create or remove a tag (within a workspace, pending merge)", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagConfig" + } + } + } + } + }, + "get": { + "operationId": "tag_GetTagConfig", + "summary": "Get a tag's configuration", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagConfigResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Workspace ID (\"\" for merged tags).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementType", + "in": "query", + "required": true, + "description": "ELEMENT_TYPE_DEVICE, ELEMENT_TYPE_INTERFACE, or ELEMENT_TYPE_VIRTUAL.", + "schema": { + "type": "string" + } + }, + { + "name": "key.label", + "in": "query", + "required": true, + "description": "Tag label.", + "schema": { + "type": "string" + } + }, + { + "name": "key.value", + "in": "query", + "required": true, + "description": "Tag value.", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementSubType", + "in": "query", + "required": true, + "description": "Tag element sub-type.", + "schema": { + "type": "string" + } + } + ] + }, + "delete": { + "operationId": "tag_DeleteTag", + "summary": "Delete a tag", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Workspace ID (\"\" for merged tags).", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementType", + "in": "query", + "required": true, + "description": "ELEMENT_TYPE_DEVICE, ELEMENT_TYPE_INTERFACE, or ELEMENT_TYPE_VIRTUAL.", + "schema": { + "type": "string" + } + }, + { + "name": "key.label", + "in": "query", + "required": true, + "description": "Tag label.", + "schema": { + "type": "string" + } + }, + { + "name": "key.value", + "in": "query", + "required": true, + "description": "Tag value.", + "schema": { + "type": "string" + } + }, + { + "name": "key.elementSubType", + "in": "query", + "required": true, + "description": "Tag element sub-type.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/workspace/v1/Workspace": { + "get": { + "operationId": "workspace_GetStatus", + "summary": "Get a workspace's status -- state, build/submit request responses, and any Change Control IDs created on submit", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Unique ID of the workspace.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/workspace/v1/WorkspaceBuild": { + "get": { + "operationId": "workspace_GetBuild", + "summary": "Get the overall status of a workspace build", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceBuildResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace.", + "schema": { + "type": "string" + } + }, + { + "name": "key.buildId", + "in": "query", + "required": true, + "description": "ID of the build (Workspace.lastBuildId).", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/workspace/v1/WorkspaceBuildDetails": { + "get": { + "operationId": "workspace_GetBuildDetails", + "summary": "Get per-device, per-stage build/validation detail for a workspace build", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceBuildDetailsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "ID of the workspace.", + "schema": { + "type": "string" + } + }, + { + "name": "key.buildId", + "in": "query", + "required": true, + "description": "ID of the build (Workspace.lastBuildId).", + "schema": { + "type": "string" + } + }, + { + "name": "key.deviceId", + "in": "query", + "required": true, + "description": "ID of the device.", + "schema": { + "type": "string" + } + } + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig": { + "post": { + "operationId": "workspace_Set", + "summary": "Create/update a workspace, or kick off an async request (build, submit, etc.) on it via the request field", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfigResponse" + } + } + } + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfig" + } + } + } + } + }, + "get": { + "operationId": "workspace_Get", + "summary": "Get a workspace's configuration", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfigResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Unique ID of the workspace.", + "schema": { + "type": "string" + } + } + ] + }, + "delete": { + "operationId": "workspace_Delete", + "summary": "Delete a workspace", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceConfigDeleteResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "in": "query", + "required": true, + "description": "Unique ID of the workspace.", + "schema": { + "type": "string" + } + } + ] + } + } + }, + "components": { + "schemas": { + "StringList": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "WorkspaceKey": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Unique ID of the workspace." + } + }, + "required": [ + "workspaceId" + ] + }, + "WorkspaceRequest": { + "type": "string", + "enum": [ + "REQUEST_UNSPECIFIED", + "REQUEST_START_BUILD", + "REQUEST_CANCEL_BUILD", + "REQUEST_SUBMIT", + "REQUEST_ABANDON", + "REQUEST_ROLLBACK", + "REQUEST_SUBMIT_FORCE", + "REQUEST_REBASE" + ], + "description": "Asynchronous operation to kick off on the workspace. REQUEST_START_BUILD compiles and validates the workspace's changes (this single call covers build and validate). REQUEST_SUBMIT submits the workspace to the mainline, creating Change Controls as needed." + }, + "WorkspaceRequestParams": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Unique ID of this request, used to look up its Response in Workspace.responses." + } + } + }, + "WorkspaceConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceKey" + }, + "displayName": { + "type": "string", + "description": "User-defined name of the workspace." + }, + "description": { + "type": "string", + "description": "Brief description of the workspace." + }, + "request": { + "$ref": "#/components/schemas/WorkspaceRequest", + "description": "Set to kick off an asynchronous operation (build, submit, etc.) on the workspace." + }, + "requestParams": { + "$ref": "#/components/schemas/WorkspaceRequestParams" + }, + "excludeNetworkProvisioning": { + "type": "boolean", + "description": "Used only during Network-Provisioning-to-Studios migration; leave unset otherwise." + } + }, + "required": [ + "key" + ] + }, + "WorkspaceConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/WorkspaceConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceKey" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceState": { + "type": "string", + "enum": [ + "WORKSPACE_STATE_UNSPECIFIED", + "WORKSPACE_STATE_PENDING", + "WORKSPACE_STATE_SUBMITTED", + "WORKSPACE_STATE_ABANDONED", + "WORKSPACE_STATE_CONFLICTS", + "WORKSPACE_STATE_ROLLED_BACK" + ] + }, + "ResponseStatus": { + "type": "string", + "enum": [ + "RESPONSE_STATUS_UNSPECIFIED", + "RESPONSE_STATUS_SUCCESS", + "RESPONSE_STATUS_FAIL" + ] + }, + "ResponseCode": { + "type": "string", + "enum": [ + "RESPONSE_CODE_UNSPECIFIED", + "RESPONSE_CODE_INACTIVE_DEVICES_EXIST", + "RESPONSE_CODE_DECOMMISSION_DEVICES_INCOMPLETE", + "RESPONSE_CODE_SYNCHRONIZATION_REQUIRED" + ] + }, + "WorkspaceOpResponse": { + "type": "object", + "properties": { + "status": { + "$ref": "#/components/schemas/ResponseStatus" + }, + "message": { + "type": "string" + }, + "code": { + "$ref": "#/components/schemas/ResponseCode" + } + } + }, + "WorkspaceResponses": { + "type": "object", + "properties": { + "values": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/WorkspaceOpResponse" + }, + "description": "Map from request ID (see WorkspaceRequestParams.requestId) to its Response." + } + } + }, + "Workspace": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceKey" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "lastModifiedAt": { + "type": "string", + "format": "date-time" + }, + "lastModifiedBy": { + "type": "string" + }, + "state": { + "$ref": "#/components/schemas/WorkspaceState" + }, + "lastBuildId": { + "type": "string", + "description": "ID of the last build for this workspace -- use with workspace_GetBuild / workspace_GetBuildDetails." + }, + "responses": { + "$ref": "#/components/schemas/WorkspaceResponses", + "description": "Responses for every request executed so far on this workspace; check the entry keyed by your requestId to see if a build/submit succeeded." + }, + "ccIds": { + "$ref": "#/components/schemas/StringList", + "description": "Change Control IDs created as a result of submitting this workspace." + }, + "needsBuild": { + "type": "boolean" + }, + "lastRebasedAt": { + "type": "string", + "format": "date-time" + }, + "needsRebase": { + "type": "boolean" + }, + "displayName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "excludeNetworkProvisioning": { + "type": "boolean" + }, + "decommissionRequestIds": { + "type": "object", + "description": "Map of device ID to decommission request UUID, for devices staged for decommission in this workspace." + } + } + }, + "WorkspaceResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/Workspace" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceBuildKey": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string" + }, + "buildId": { + "type": "string" + } + }, + "required": [ + "workspaceId", + "buildId" + ] + }, + "BuildState": { + "type": "string", + "enum": [ + "BUILD_STATE_UNSPECIFIED", + "BUILD_STATE_IN_PROGRESS", + "BUILD_STATE_CANCELED", + "BUILD_STATE_SUCCESS", + "BUILD_STATE_FAIL", + "BUILD_STATE_SKIPPED" + ] + }, + "WorkspaceBuild": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceBuildKey" + }, + "state": { + "$ref": "#/components/schemas/BuildState", + "description": "Overall build execution status -- BUILD_STATE_SUCCESS means the workspace built and validated cleanly." + }, + "error": { + "type": "string", + "description": "Set if the build failed early, before per-device results were computed." + }, + "builtBy": { + "type": "string" + }, + "authzResult": { + "type": "object", + "description": "Authorization check result; vendor-defined nested structure preserved as-is." + }, + "studioBuildDetails": { + "type": "object", + "description": "Per-studio build results not specific to a device; vendor-defined nested structure preserved as-is." + }, + "hierarchyBuildStatus": { + "type": "object", + "description": "Hierarchy build results; vendor-defined nested structure preserved as-is." + } + } + }, + "WorkspaceBuildResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/WorkspaceBuild" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "WorkspaceBuildDetailsKey": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string" + }, + "buildId": { + "type": "string" + }, + "deviceId": { + "type": "string" + } + }, + "required": [ + "workspaceId", + "buildId", + "deviceId" + ] + }, + "BuildStage": { + "type": "string", + "enum": [ + "BUILD_STAGE_UNSPECIFIED", + "BUILD_STAGE_INPUT_VALIDATION", + "BUILD_STAGE_CONFIGLET_BUILD", + "BUILD_STAGE_CONFIG_VALIDATION", + "BUILD_STAGE_IMAGE_VALIDATION" + ] + }, + "WorkspaceBuildDetails": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/WorkspaceBuildDetailsKey" + }, + "state": { + "$ref": "#/components/schemas/BuildState" + }, + "stage": { + "$ref": "#/components/schemas/BuildStage" + }, + "inputValidationResults": { + "type": "object", + "description": "Results of the input validation stage; vendor-defined nested structure preserved as-is." + }, + "configletBuildResults": { + "type": "object", + "description": "Results of the configlet build stage; vendor-defined nested structure preserved as-is." + }, + "configValidationResult": { + "type": "object", + "description": "Result of the config validation stage; vendor-defined nested structure preserved as-is." + }, + "imageValidationResult": { + "type": "object", + "description": "Result of the image validation stage; vendor-defined nested structure preserved as-is." + }, + "configValidationSkipCause": { + "type": "string" + }, + "imageValidationSkipCause": { + "type": "string" + }, + "buildStageState": { + "type": "object", + "description": "State for each build stage; vendor-defined nested structure preserved as-is." + }, + "authzStatus": { + "type": "string" + }, + "configSyncResult": { + "type": "object", + "description": "Result of the config sync; vendor-defined nested structure preserved as-is." + }, + "configSyncSkipCause": { + "type": "string" + } + } + }, + "WorkspaceBuildDetailsResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/WorkspaceBuildDetails" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "InputsKey": { + "type": "object", + "properties": { + "studioId": { + "type": "string", + "description": "ID of the studio, e.g. \"studio-static-configlet\" for the Static Configlet Studio." + }, + "workspaceId": { + "type": "string" + }, + "path": { + "$ref": "#/components/schemas/StringList", + "description": "Path to the input field being set, e.g. [] for the studio's entire root input." + } + }, + "required": [ + "studioId", + "workspaceId", + "path" + ] + }, + "InputsConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/InputsKey" + }, + "remove": { + "type": "boolean", + "description": "Set true to remove the inputs at this path instead of adding/setting them." + }, + "inputs": { + "type": "string", + "description": "Value of the input field at this path, encoded as a JSON string." + } + }, + "required": [ + "key" + ] + }, + "InputsConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/InputsConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "InputsConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/InputsKey" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "Inputs": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/InputsKey" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "lastModifiedAt": { + "type": "string", + "format": "date-time" + }, + "lastModifiedBy": { + "type": "string" + }, + "inputs": { + "type": "string", + "description": "Resolved value of the input field at this path, as a JSON string." + } + } + }, + "InputsResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/Inputs" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "ChangeControlKey": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the Change Control." + } + }, + "required": [ + "id" + ] + }, + "FlagConfig": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + } + } + }, + "Flag": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "notes": { + "type": "string" + }, + "time": { + "type": "string", + "format": "date-time" + }, + "user": { + "type": "string" + } + } + }, + "TimestampFlagConfig": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "date-time", + "description": "Set to a timestamp to schedule, or omit/null to unschedule." + }, + "notes": { + "type": "string" + } + } + }, + "TimestampFlag": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "date-time" + }, + "notes": { + "type": "string" + }, + "time": { + "type": "string", + "format": "date-time" + }, + "user": { + "type": "string" + } + } + }, + "ChangeConfig": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "rootStageId": { + "type": "string", + "description": "ID of the root stage, i.e. the stage that executes first." + }, + "stages": { + "type": "object", + "description": "Map of stage ID to stage configuration; vendor-defined nested structure preserved as-is." + }, + "notes": { + "type": "string" + } + } + }, + "Change": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "rootStageId": { + "type": "string" + }, + "stages": { + "type": "object", + "description": "Map of stage ID to stage configuration and status; vendor-defined nested structure preserved as-is." + }, + "notes": { + "type": "string" + }, + "time": { + "type": "string", + "format": "date-time" + }, + "user": { + "type": "string" + } + } + }, + "ChangeControlStatus": { + "type": "string", + "enum": [ + "CHANGE_CONTROL_STATUS_UNSPECIFIED", + "CHANGE_CONTROL_STATUS_RUNNING", + "CHANGE_CONTROL_STATUS_COMPLETED", + "CHANGE_CONTROL_STATUS_SCHEDULED", + "CHANGE_CONTROL_STATUS_NOT_STARTED" + ] + }, + "ChangeControlConfig": { + "type": "object", "properties": { - "workspaceId": { - "type": "string", - "description": "Unique ID of the workspace." + "key": { + "$ref": "#/components/schemas/ChangeControlKey" + }, + "change": { + "$ref": "#/components/schemas/ChangeConfig" + }, + "start": { + "$ref": "#/components/schemas/FlagConfig", + "description": "Set start.value=true to execute the Change Control, false to stop it." + }, + "schedule": { + "$ref": "#/components/schemas/TimestampFlagConfig", + "description": "Set schedule.value to a timestamp to schedule execution." } }, "required": [ - "workspaceId" + "key" ] }, - "WorkspaceRequest": { - "type": "string", - "enum": [ - "REQUEST_UNSPECIFIED", - "REQUEST_START_BUILD", - "REQUEST_CANCEL_BUILD", - "REQUEST_SUBMIT", - "REQUEST_ABANDON", - "REQUEST_ROLLBACK", - "REQUEST_SUBMIT_FORCE", - "REQUEST_REBASE" - ], - "description": "Asynchronous operation to kick off on the workspace. REQUEST_START_BUILD compiles and validates the workspace's changes (this single call covers build and validate). REQUEST_SUBMIT submits the workspace to the mainline, creating Change Controls as needed." + "ChangeControlConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/ChangeControlConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } }, - "WorkspaceRequestParams": { + "ChangeControlConfigDeleteResponse": { "type": "object", "properties": { - "requestId": { + "key": { + "$ref": "#/components/schemas/ChangeControlKey" + }, + "time": { "type": "string", - "description": "Unique ID of this request, used to look up its Response in Workspace.responses." + "format": "date-time" } } }, - "WorkspaceConfig": { + "ChangeControl": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/WorkspaceKey" + "$ref": "#/components/schemas/ChangeControlKey" }, - "displayName": { + "change": { + "$ref": "#/components/schemas/Change" + }, + "approve": { + "$ref": "#/components/schemas/Flag", + "description": "Whether the Change Control has been approved." + }, + "start": { + "$ref": "#/components/schemas/Flag", + "description": "Whether the Change Control has been flagged to start/stop execution." + }, + "status": { + "$ref": "#/components/schemas/ChangeControlStatus" + }, + "error": { "type": "string", - "description": "User-defined name of the workspace." + "description": "Error from execution, if any. No error implies success once status is COMPLETED." }, - "description": { + "schedule": { + "$ref": "#/components/schemas/TimestampFlag" + }, + "deviceIds": { + "$ref": "#/components/schemas/StringList", + "description": "Device IDs this Change Control operates on." + }, + "deviceIdToStageIds": { + "type": "object", + "description": "Map of device ID to the stages that apply to it; vendor-defined nested structure preserved as-is." + }, + "creation": { + "type": "object", + "description": "Who/when created this Change Control; vendor-defined nested structure preserved as-is." + } + } + }, + "ChangeControlResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/ChangeControl" + }, + "time": { "type": "string", - "description": "Brief description of the workspace." + "format": "date-time" + } + } + }, + "ApproveConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/ChangeControlKey" }, - "request": { - "$ref": "#/components/schemas/WorkspaceRequest", - "description": "Set to kick off an asynchronous operation (build, submit, etc.) on the workspace." + "approve": { + "$ref": "#/components/schemas/FlagConfig", + "description": "Set approve.value=true to approve, false to unapprove." }, - "requestParams": { - "$ref": "#/components/schemas/WorkspaceRequestParams" + "version": { + "type": "string", + "format": "date-time", + "description": "Timestamp of the Change Control being approved (from changeControl_Get's change.time), required when approve.value=true -- guards against approving a stale/updated Change Control." }, - "excludeNetworkProvisioning": { - "type": "boolean", - "description": "Used only during Network-Provisioning-to-Studios migration; leave unset otherwise." + "overrideReason": { + "type": "object", + "description": "User-provided reason to override Change Control validation, if applicable." } }, "required": [ "key" ] }, - "WorkspaceConfigResponse": { + "ApproveConfigResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/WorkspaceConfig" + "$ref": "#/components/schemas/ApproveConfig" }, "time": { "type": "string", @@ -619,11 +2321,64 @@ } } }, - "WorkspaceConfigDeleteResponse": { + "UUIDKey": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A UUID you generate to identify this onboarding/decommissioning request." + } + }, + "required": [ + "requestId" + ] + }, + "DeviceConfiguration": { + "type": "object", + "properties": { + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Device-specific options for a third-party device, e.g. {\"address\": \"...\", \"community\": \"...\"} for SNMP." + } + } + }, + "DeviceOnboardingConfig": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/WorkspaceKey" + "$ref": "#/components/schemas/UUIDKey" + }, + "hostnameOrIp": { + "type": "string", + "description": "Hostname or IP at which the device can be reached." + }, + "deviceType": { + "type": "string", + "description": "\"eos\" for EOS devices; for third-party devices: \"openconfig\", \"snmp\", \"cvp\", \"mwm\", or \"vCenter\"." + }, + "deviceConfig": { + "$ref": "#/components/schemas/DeviceConfiguration", + "description": "Configuration for a third-party device." + }, + "profileName": { + "type": "string", + "description": "Name of the TerminAttr profile with custom TerminAttr configuration to apply while onboarding." + } + }, + "required": [ + "key", + "hostnameOrIp", + "deviceType" + ] + }, + "DeviceOnboardingConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/DeviceOnboardingConfig" }, "time": { "type": "string", @@ -631,125 +2386,229 @@ } } }, - "WorkspaceState": { + "DeviceOnboardingConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/UUIDKey" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "OnboardingStatus": { "type": "string", "enum": [ - "WORKSPACE_STATE_UNSPECIFIED", - "WORKSPACE_STATE_PENDING", - "WORKSPACE_STATE_SUBMITTED", - "WORKSPACE_STATE_ABANDONED", - "WORKSPACE_STATE_CONFLICTS", - "WORKSPACE_STATE_ROLLED_BACK" + "ONBOARDING_STATUS_UNSPECIFIED", + "ONBOARDING_STATUS_IN_PROGRESS", + "ONBOARDING_STATUS_FAILURE", + "ONBOARDING_STATUS_SUCCESS" ] }, - "ResponseStatus": { - "type": "string", - "enum": [ - "RESPONSE_STATUS_UNSPECIFIED", - "RESPONSE_STATUS_SUCCESS", - "RESPONSE_STATUS_FAIL" + "DeviceOnboarding": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/UUIDKey" + }, + "deviceId": { + "type": "string", + "description": "Unique device ID discovered via onboarding." + }, + "status": { + "$ref": "#/components/schemas/OnboardingStatus" + }, + "error": { + "type": "string", + "description": "Set if status is ONBOARDING_STATUS_FAILURE." + }, + "statusMessage": { + "type": "string", + "description": "Unstructured, display-only progress message." + }, + "profileName": { + "type": "string" + } + } + }, + "DeviceOnboardingResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/DeviceOnboarding" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "DeviceDecommissioningConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/UUIDKey" + }, + "deviceId": { + "type": "string", + "description": "Unique device ID that was discovered via onboarding." + }, + "force": { + "type": "boolean", + "description": "Ignore pending/in-progress blocking tasks and decommission anyway." + }, + "userName": { + "type": "string", + "description": "Name of the user who decommissioned the device." + } + }, + "required": [ + "key", + "deviceId" ] }, - "ResponseCode": { + "DeviceDecommissioningConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/DeviceDecommissioningConfig" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "DeviceDecommissioningConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/UUIDKey" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "DecommissioningStatus": { "type": "string", "enum": [ - "RESPONSE_CODE_UNSPECIFIED", - "RESPONSE_CODE_INACTIVE_DEVICES_EXIST", - "RESPONSE_CODE_DECOMMISSION_DEVICES_INCOMPLETE", - "RESPONSE_CODE_SYNCHRONIZATION_REQUIRED" + "DECOMMISSIONING_STATUS_UNSPECIFIED", + "DECOMMISSIONING_STATUS_IN_PROGRESS", + "DECOMMISSIONING_STATUS_FAILURE", + "DECOMMISSIONING_STATUS_SUCCESS" ] }, - "WorkspaceOpResponse": { + "DeviceDecommissioning": { "type": "object", "properties": { + "key": { + "$ref": "#/components/schemas/UUIDKey" + }, "status": { - "$ref": "#/components/schemas/ResponseStatus" + "$ref": "#/components/schemas/DecommissioningStatus" }, - "message": { - "type": "string" + "error": { + "type": "string", + "description": "Set if status is DECOMMISSIONING_STATUS_FAILURE." }, - "code": { - "$ref": "#/components/schemas/ResponseCode" + "statusMessage": { + "type": "string", + "description": "Unstructured, display-only progress message." } } }, - "WorkspaceResponses": { + "DeviceDecommissioningResponse": { "type": "object", "properties": { - "values": { + "value": { + "$ref": "#/components/schemas/DeviceDecommissioning" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "DeviceKey": { + "type": "object", + "properties": { + "deviceId": { + "type": "string", + "description": "Unique identifier of the device." + } + }, + "required": [ + "deviceId" + ] + }, + "StreamingStatus": { + "type": "string", + "enum": [ + "STREAMING_STATUS_UNSPECIFIED", + "STREAMING_STATUS_INACTIVE", + "STREAMING_STATUS_ACTIVE" + ] + }, + "ExtendedAttributes": { + "type": "object", + "properties": { + "featureEnabled": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/WorkspaceOpResponse" + "type": "boolean" }, - "description": "Map from request ID (see WorkspaceRequestParams.requestId) to its Response." + "description": "Map of feature name to enabled status; a missing feature is assumed off." } } }, - "Workspace": { + "Device": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/WorkspaceKey" - }, - "createdAt": { - "type": "string", - "format": "date-time" + "$ref": "#/components/schemas/DeviceKey" }, - "createdBy": { + "softwareVersion": { "type": "string" }, - "lastModifiedAt": { - "type": "string", - "format": "date-time" - }, - "lastModifiedBy": { + "modelName": { "type": "string" }, - "state": { - "$ref": "#/components/schemas/WorkspaceState" + "hardwareRevision": { + "type": "string" }, - "lastBuildId": { - "type": "string", - "description": "ID of the last build for this workspace -- use with workspace_GetBuild / workspace_GetBuildDetails." + "fqdn": { + "type": "string" }, - "responses": { - "$ref": "#/components/schemas/WorkspaceResponses", - "description": "Responses for every request executed so far on this workspace; check the entry keyed by your requestId to see if a build/submit succeeded." + "hostname": { + "type": "string" }, - "ccIds": { - "$ref": "#/components/schemas/StringList", - "description": "Change Control IDs created as a result of submitting this workspace." + "domainName": { + "type": "string" }, - "needsBuild": { - "type": "boolean" + "systemMacAddress": { + "type": "string" }, - "lastRebasedAt": { + "bootTime": { "type": "string", "format": "date-time" }, - "needsRebase": { - "type": "boolean" - }, - "displayName": { - "type": "string" - }, - "description": { - "type": "string" - }, - "excludeNetworkProvisioning": { - "type": "boolean" + "streamingStatus": { + "$ref": "#/components/schemas/StreamingStatus" }, - "decommissionRequestIds": { - "type": "object", - "description": "Map of device ID to decommission request UUID, for devices staged for decommission in this workspace." + "extendedAttributes": { + "$ref": "#/components/schemas/ExtendedAttributes" } } }, - "WorkspaceResponse": { + "DeviceResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/Workspace" + "$ref": "#/components/schemas/Device" }, "time": { "type": "string", @@ -757,68 +2616,49 @@ } } }, - "WorkspaceBuildKey": { - "type": "object", - "properties": { - "workspaceId": { - "type": "string" - }, - "buildId": { - "type": "string" - } - }, - "required": [ - "workspaceId", - "buildId" - ] - }, - "BuildState": { + "ProvisioningStatus": { "type": "string", "enum": [ - "BUILD_STATE_UNSPECIFIED", - "BUILD_STATE_IN_PROGRESS", - "BUILD_STATE_CANCELED", - "BUILD_STATE_SUCCESS", - "BUILD_STATE_FAIL", - "BUILD_STATE_SKIPPED" + "PROVISIONING_STATUS_UNSPECIFIED", + "PROVISIONING_STATUS_IN_PROGRESS", + "PROVISIONING_STATUS_FAILURE", + "PROVISIONING_STATUS_SUCCESS" ] }, - "WorkspaceBuild": { + "ProvisionedDevice": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/WorkspaceBuildKey" + "$ref": "#/components/schemas/DeviceKey" }, - "state": { - "$ref": "#/components/schemas/BuildState", - "description": "Overall build execution status -- BUILD_STATE_SUCCESS means the workspace built and validated cleanly." + "status": { + "$ref": "#/components/schemas/ProvisioningStatus" }, "error": { "type": "string", - "description": "Set if the build failed early, before per-device results were computed." + "description": "Set if status is PROVISIONING_STATUS_FAILURE." }, - "builtBy": { - "type": "string" + "ztpMode": { + "type": "boolean" }, - "authzResult": { - "type": "object", - "description": "Authorization check result; vendor-defined nested structure preserved as-is." + "ipAddress": { + "type": "string", + "description": "Current (post-provisioning) IP address of the device." }, - "studioBuildDetails": { - "type": "object", - "description": "Per-studio build results not specific to a device; vendor-defined nested structure preserved as-is." + "provisioningGroupName": { + "type": "string", + "description": "Name of the group/container the device belongs to; \"undefined_container\" if provisioned but ungrouped." }, - "hierarchyBuildStatus": { - "type": "object", - "description": "Hierarchy build results; vendor-defined nested structure preserved as-is." + "ipv6Address": { + "type": "string" } } }, - "WorkspaceBuildResponse": { + "ProvisionedDeviceResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/WorkspaceBuild" + "$ref": "#/components/schemas/ProvisionedDevice" }, "time": { "type": "string", @@ -826,90 +2666,125 @@ } } }, - "WorkspaceBuildDetailsKey": { + "ElementType": { + "type": "string", + "enum": [ + "ELEMENT_TYPE_UNSPECIFIED", + "ELEMENT_TYPE_DEVICE", + "ELEMENT_TYPE_INTERFACE", + "ELEMENT_TYPE_VIRTUAL" + ] + }, + "ElementSubType": { + "type": "string", + "enum": [ + "ELEMENT_SUB_TYPE_UNSPECIFIED", + "ELEMENT_SUB_TYPE_DEVICE", + "ELEMENT_SUB_TYPE_VDS", + "ELEMENT_SUB_TYPE_WORKLOAD_SERVER", + "ELEMENT_SUB_TYPE_VM", + "ELEMENT_SUB_TYPE_APPLICATION", + "ELEMENT_SUB_TYPE_CONNECTIVITY_MONITOR_PROBE" + ] + }, + "CreatorType": { + "type": "string", + "enum": [ + "CREATOR_TYPE_UNSPECIFIED", + "CREATOR_TYPE_SYSTEM", + "CREATOR_TYPE_USER", + "CREATOR_TYPE_EXTERNAL" + ] + }, + "TagKey": { "type": "object", "properties": { "workspaceId": { - "type": "string" + "type": "string", + "description": "Workspace ID; the special ID \"\" identifies where merged (published) tags reside." }, - "buildId": { - "type": "string" + "elementType": { + "$ref": "#/components/schemas/ElementType" }, - "deviceId": { - "type": "string" + "label": { + "type": "string", + "description": "Tag label." + }, + "value": { + "type": "string", + "description": "Tag value." + }, + "elementSubType": { + "$ref": "#/components/schemas/ElementSubType" } }, "required": [ "workspaceId", - "buildId", - "deviceId" - ] - }, - "BuildStage": { - "type": "string", - "enum": [ - "BUILD_STAGE_UNSPECIFIED", - "BUILD_STAGE_INPUT_VALIDATION", - "BUILD_STAGE_CONFIGLET_BUILD", - "BUILD_STAGE_CONFIG_VALIDATION", - "BUILD_STAGE_IMAGE_VALIDATION" + "elementType", + "label", + "value", + "elementSubType" ] }, - "WorkspaceBuildDetails": { + "TagConfig": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/WorkspaceBuildDetailsKey" - }, - "state": { - "$ref": "#/components/schemas/BuildState" - }, - "stage": { - "$ref": "#/components/schemas/BuildStage" - }, - "inputValidationResults": { - "type": "object", - "description": "Results of the input validation stage; vendor-defined nested structure preserved as-is." - }, - "configletBuildResults": { - "type": "object", - "description": "Results of the configlet build stage; vendor-defined nested structure preserved as-is." - }, - "configValidationResult": { - "type": "object", - "description": "Result of the config validation stage; vendor-defined nested structure preserved as-is." - }, - "imageValidationResult": { - "type": "object", - "description": "Result of the image validation stage; vendor-defined nested structure preserved as-is." - }, - "configValidationSkipCause": { - "type": "string" + "$ref": "#/components/schemas/TagKey" }, - "imageValidationSkipCause": { - "type": "string" + "remove": { + "type": "boolean", + "description": "Set true to remove this tag when the encompassing workspace merges." + } + }, + "required": [ + "key" + ] + }, + "TagConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/TagConfig" }, - "buildStageState": { - "type": "object", - "description": "State for each build stage; vendor-defined nested structure preserved as-is." + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "TagConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/TagKey" }, - "authzStatus": { - "type": "string" + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/TagKey" }, - "configSyncResult": { - "type": "object", - "description": "Result of the config sync; vendor-defined nested structure preserved as-is." + "creatorType": { + "$ref": "#/components/schemas/CreatorType" }, - "configSyncSkipCause": { - "type": "string" + "assigned": { + "type": "boolean", + "description": "Whether the tag is currently assigned to any element." } } }, - "WorkspaceBuildDetailsResponse": { + "TagResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/WorkspaceBuildDetails" + "$ref": "#/components/schemas/Tag" }, "time": { "type": "string", @@ -917,51 +2792,70 @@ } } }, - "InputsKey": { + "TagAssignmentKey": { "type": "object", "properties": { - "studioId": { + "workspaceId": { + "type": "string", + "description": "Workspace ID; the special ID \"\" identifies where merged assignments reside." + }, + "elementType": { + "$ref": "#/components/schemas/ElementType" + }, + "label": { + "type": "string" + }, + "value": { + "type": "string" + }, + "deviceId": { "type": "string", - "description": "ID of the studio, e.g. \"studio-static-configlet\" for the Static Configlet Studio." + "description": "Set for ELEMENT_TYPE_DEVICE and ELEMENT_TYPE_INTERFACE." }, - "workspaceId": { - "type": "string" + "interfaceId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_INTERFACE." }, - "path": { - "$ref": "#/components/schemas/StringList", - "description": "Path to the input field being set, e.g. [] for the studio's entire root input." + "elementSubType": { + "$ref": "#/components/schemas/ElementSubType" + }, + "primaryEntityId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_VIRTUAL (e.g. application ID)." + }, + "secondaryEntityId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_VIRTUAL (e.g. service ID)." } }, "required": [ - "studioId", "workspaceId", - "path" + "elementType", + "label", + "value", + "elementSubType" ] }, - "InputsConfig": { + "TagAssignmentConfig": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/InputsKey" + "$ref": "#/components/schemas/TagAssignmentKey" }, "remove": { "type": "boolean", - "description": "Set true to remove the inputs at this path instead of adding/setting them." - }, - "inputs": { - "type": "string", - "description": "Value of the input field at this path, encoded as a JSON string." + "description": "Set true to remove this assignment when the encompassing workspace merges." } }, "required": [ "key" ] }, - "InputsConfigResponse": { + "TagAssignmentConfigResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/InputsConfig" + "$ref": "#/components/schemas/TagAssignmentConfig" }, "time": { "type": "string", @@ -969,11 +2863,11 @@ } } }, - "InputsConfigDeleteResponse": { + "TagAssignmentConfigDeleteResponse": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/InputsKey" + "$ref": "#/components/schemas/TagAssignmentKey" }, "time": { "type": "string", @@ -981,37 +2875,22 @@ } } }, - "Inputs": { + "TagAssignment": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/InputsKey" - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "createdBy": { - "type": "string" - }, - "lastModifiedAt": { - "type": "string", - "format": "date-time" - }, - "lastModifiedBy": { - "type": "string" + "$ref": "#/components/schemas/TagAssignmentKey" }, - "inputs": { - "type": "string", - "description": "Resolved value of the input field at this path, as a JSON string." + "tagCreatorType": { + "$ref": "#/components/schemas/CreatorType" } } }, - "InputsResponse": { + "TagAssignmentResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/Inputs" + "$ref": "#/components/schemas/TagAssignment" }, "time": { "type": "string", @@ -1019,172 +2898,216 @@ } } }, - "ChangeControlKey": { + "ElementKey": { "type": "object", "properties": { - "id": { + "type": { + "$ref": "#/components/schemas/ElementType" + }, + "subType": { + "$ref": "#/components/schemas/ElementSubType" + }, + "primaryId": { "type": "string", - "description": "ID of the Change Control." + "description": "Device ID (serial number or UUID depending on sub-type); see the vendor docs for the full mapping by type/sub-type." + }, + "secondaryId": { + "type": "string", + "description": "Interface/service ID where applicable; empty for device-level elements." } }, "required": [ - "id" + "type", + "subType", + "primaryId", + "secondaryId" ] }, - "FlagConfig": { + "Element": { "type": "object", "properties": { - "value": { - "type": "boolean" - }, - "notes": { - "type": "string" + "key": { + "$ref": "#/components/schemas/ElementKey" } } }, - "Flag": { + "ElementResponse": { "type": "object", "properties": { "value": { - "type": "boolean" - }, - "notes": { - "type": "string" + "$ref": "#/components/schemas/Element" }, "time": { "type": "string", "format": "date-time" - }, - "user": { - "type": "string" } } }, - "TimestampFlagConfig": { + "RepositoryKey": { "type": "object", "properties": { - "value": { + "name": { "type": "string", - "format": "date-time", - "description": "Set to a timestamp to schedule, or omit/null to unschedule." + "description": "Unique identifier for the image/extension, including its file suffix (.swi, .swix, .rpm; Streaming Agent files must contain \"TerminAttr\")." + } + }, + "required": [ + "name" + ] + }, + "RepositoryConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/RepositoryKey" }, - "notes": { - "type": "string" + "uri": { + "type": "string", + "description": "Arista Software Download site identifier, or the CloudVision file server identifier if uploaded via the Software Upload REST API." + }, + "rebootRequired": { + "type": "boolean", + "description": ".swi images always require a reboot." } - } + }, + "required": [ + "key", + "uri" + ] }, - "TimestampFlag": { + "RepositoryConfigResponse": { "type": "object", "properties": { "value": { + "$ref": "#/components/schemas/RepositoryConfig" + }, + "time": { "type": "string", "format": "date-time" - }, - "notes": { - "type": "string" + } + } + }, + "RepositoryConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/components/schemas/RepositoryKey" }, "time": { "type": "string", "format": "date-time" - }, - "user": { - "type": "string" } } }, - "ChangeConfig": { + "SoftwareType": { + "type": "string", + "enum": [ + "SOFTWARE_TYPE_UNSPECIFIED", + "SOFTWARE_TYPE_SWI", + "SOFTWARE_TYPE_TERMINATTR", + "SOFTWARE_TYPE_SWIX", + "SOFTWARE_TYPE_RPM" + ] + }, + "DigestType": { + "type": "string", + "enum": [ + "DIGEST_TYPE_UNSPECIFIED", + "DIGEST_TYPE_SHA512" + ] + }, + "Progress": { + "type": "string", + "enum": [ + "PROGRESS_UNSPECIFIED", + "PROGRESS_INITIAL", + "PROGRESS_QUEUED", + "PROGRESS_LOADING", + "PROGRESS_VALIDATING", + "PROGRESS_SAVING", + "PROGRESS_SUCCESS", + "PROGRESS_ERROR" + ] + }, + "RecommendedAction": { + "type": "string", + "enum": [ + "RECOMMENDED_ACTION_UNSPECIFIED", + "RECOMMENDED_ACTION_CONTACT_TAC", + "RECOMMENDED_ACTION_ADD_TOKEN", + "RECOMMENDED_ACTION_UPDATE_TOKEN", + "RECOMMENDED_ACTION_ACCEPT_EULA", + "RECOMMENDED_ACTION_RETRY" + ] + }, + "SoftwareMetadata": { "type": "object", "properties": { - "name": { + "digestType": { + "$ref": "#/components/schemas/DigestType" + }, + "digest": { "type": "string" }, - "rootStageId": { + "size": { "type": "string", - "description": "ID of the root stage, i.e. the stage that executes first." + "description": "Size in bytes." }, - "stages": { - "type": "object", - "description": "Map of stage ID to stage configuration; vendor-defined nested structure preserved as-is." + "rebootRequired": { + "type": "boolean" }, - "notes": { - "type": "string" + "softwareType": { + "$ref": "#/components/schemas/SoftwareType" } } }, - "Change": { + "SoftwareStatus": { "type": "object", "properties": { - "name": { - "type": "string" + "progress": { + "$ref": "#/components/schemas/Progress" }, - "rootStageId": { - "type": "string" - }, - "stages": { - "type": "object", - "description": "Map of stage ID to stage configuration and status; vendor-defined nested structure preserved as-is." - }, - "notes": { + "message": { "type": "string" }, - "time": { - "type": "string", - "format": "date-time" - }, - "user": { - "type": "string" + "recommendedAction": { + "$ref": "#/components/schemas/RecommendedAction" } } }, - "ChangeControlStatus": { - "type": "string", - "enum": [ - "CHANGE_CONTROL_STATUS_UNSPECIFIED", - "CHANGE_CONTROL_STATUS_RUNNING", - "CHANGE_CONTROL_STATUS_COMPLETED", - "CHANGE_CONTROL_STATUS_SCHEDULED", - "CHANGE_CONTROL_STATUS_NOT_STARTED" - ] - }, - "ChangeControlConfig": { + "Repository": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/ChangeControlKey" + "$ref": "#/components/schemas/RepositoryKey" }, - "change": { - "$ref": "#/components/schemas/ChangeConfig" + "uploadedBy": { + "type": "string" }, - "start": { - "$ref": "#/components/schemas/FlagConfig", - "description": "Set start.value=true to execute the Change Control, false to stop it." + "uploadedAt": { + "type": "string", + "format": "date-time" }, - "schedule": { - "$ref": "#/components/schemas/TimestampFlagConfig", - "description": "Set schedule.value to a timestamp to schedule execution." - } - }, - "required": [ - "key" - ] - }, - "ChangeControlConfigResponse": { - "type": "object", - "properties": { - "value": { - "$ref": "#/components/schemas/ChangeControlConfig" + "lastModifiedBy": { + "type": "string" }, - "time": { + "lastModifiedAt": { "type": "string", "format": "date-time" + }, + "softwareStatus": { + "$ref": "#/components/schemas/SoftwareStatus" + }, + "softwareMetadata": { + "$ref": "#/components/schemas/SoftwareMetadata" } } }, - "ChangeControlConfigDeleteResponse": { + "RepositoryResponse": { "type": "object", "properties": { - "key": { - "$ref": "#/components/schemas/ChangeControlKey" + "value": { + "$ref": "#/components/schemas/Repository" }, "time": { "type": "string", @@ -1192,52 +3115,31 @@ } } }, - "ChangeControl": { + "Assignments": { "type": "object", "properties": { "key": { - "$ref": "#/components/schemas/ChangeControlKey" - }, - "change": { - "$ref": "#/components/schemas/Change" - }, - "approve": { - "$ref": "#/components/schemas/Flag", - "description": "Whether the Change Control has been approved." - }, - "start": { - "$ref": "#/components/schemas/Flag", - "description": "Whether the Change Control has been flagged to start/stop execution." + "$ref": "#/components/schemas/RepositoryKey" }, - "status": { - "$ref": "#/components/schemas/ChangeControlStatus" - }, - "error": { - "type": "string", - "description": "Error from execution, if any. No error implies success once status is COMPLETED." - }, - "schedule": { - "$ref": "#/components/schemas/TimestampFlag" - }, - "deviceIds": { + "devices": { "$ref": "#/components/schemas/StringList", - "description": "Device IDs this Change Control operates on." + "description": "Devices whose designed image references this software image." }, - "deviceIdToStageIds": { + "ztpUpgradeRules": { "type": "object", - "description": "Map of device ID to the stages that apply to it; vendor-defined nested structure preserved as-is." + "description": "ZTP upgrade rules referencing this software image; vendor-defined nested structure preserved as-is." }, - "creation": { + "studioTagQueries": { "type": "object", - "description": "Who/when created this Change Control; vendor-defined nested structure preserved as-is." + "description": "Studio tag queries referencing this software image; vendor-defined nested structure preserved as-is." } } }, - "ChangeControlResponse": { + "AssignmentsResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/ChangeControl" + "$ref": "#/components/schemas/Assignments" }, "time": { "type": "string", @@ -1245,35 +3147,44 @@ } } }, - "ApproveConfig": { + "ReleasesStatus": { "type": "object", "properties": { - "key": { - "$ref": "#/components/schemas/ChangeControlKey" - }, - "approve": { - "$ref": "#/components/schemas/FlagConfig", - "description": "Set approve.value=true to approve, false to unapprove." + "level": { + "type": "string", + "enum": [ + "LEVEL_UNSPECIFIED", + "LEVEL_INFO", + "LEVEL_WARNING", + "LEVEL_ERROR" + ] }, - "version": { + "message": { "type": "string", - "format": "date-time", - "description": "Timestamp of the Change Control being approved (from changeControl_Get's change.time), required when approve.value=true -- guards against approving a stale/updated Change Control." + "description": "Status of the latest interaction with Arista's Software Download site." }, - "overrideReason": { - "type": "object", - "description": "User-provided reason to override Change Control validation, if applicable." + "recommendedAction": { + "$ref": "#/components/schemas/RecommendedAction" } - }, - "required": [ - "key" - ] + } }, - "ApproveConfigResponse": { + "Releases": { + "type": "object", + "properties": { + "status": { + "$ref": "#/components/schemas/ReleasesStatus" + }, + "uris": { + "$ref": "#/components/schemas/StringList", + "description": "URI paths of software releases available from Arista's Software Download site, usable as RepositoryConfig.uri." + } + } + }, + "ReleasesResponse": { "type": "object", "properties": { "value": { - "$ref": "#/components/schemas/ApproveConfig" + "$ref": "#/components/schemas/Releases" }, "time": { "type": "string", diff --git a/Arista/CloudVision/README.md b/Arista/CloudVision/README.md index a111515..e3efd46 100644 --- a/Arista/CloudVision/README.md +++ b/Arista/CloudVision/README.md @@ -1,6 +1,6 @@ Arista CloudVision-as-a-Service (CVaaS) is Arista's cloud-hosted network management platform, providing fleet-wide visibility and configuration management for Arista devices through a state-based, resource-oriented API. -This project provides an OpenAPI spec for automating against CVaaS's modern Workspace/Studio provisioning model via an Integration Model, plus a Studio Project of ready-to-import workflows built on that model. +This project provides an OpenAPI spec for automating against CVaaS's Resource APIs via an Integration Model, plus a Studio Project of ready-to-import workflows built on that model. ## Table of Contents @@ -17,8 +17,8 @@ This project provides an OpenAPI spec for automating against CVaaS's modern Work | Asset | Description | |---|---| -| [OpenAPIs/](./OpenAPIs/) | Arista CloudVision Workspace/Studio/Change Control OpenAPI spec | -| [Studio Projects/](./Studio%20Projects/) | Itential Platform project containing all 15 workflows in 3 folders | +| [OpenAPIs/](./OpenAPIs/) | Arista CloudVision Resource API OpenAPI spec | +| [Studio Projects/](./Studio%20Projects/) | Itential Platform project containing all 40 workflows in 6 folders | ## Requirements @@ -55,7 +55,7 @@ The instance's `authentication`/`server` properties should look like this once c | Spec | Version | Operations | Description | |---|---|---|---| -| [`arista_cloudvision_api-latest.json`](./OpenAPIs/arista_cloudvision_api-latest.json) | latest | 15 | Scoped to the Workspace/Studio/Change Control provisioning flow — see breakdown below | +| [`arista_cloudvision_api-latest.json`](./OpenAPIs/arista_cloudvision_api-latest.json) | latest | 40 | Workspace/Studio/Change Control provisioning, device onboarding/decommissioning, tags, and software management — see breakdown below | CloudVision's Resource APIs are gRPC-native; this spec describes Arista's own generated REST/JSON gateway over those same services (introduced in CVP 2021.1.0, still actively maintained), converted from the vendor's published Swagger 2.0 documents to OpenAPI 3.0. @@ -64,21 +64,29 @@ Resources included, by category: - **Workspace**: Create/update (including issuing build, submit, cancel, abandon, or rollback requests), get, delete, get status, get build status, get per-device build detail - **Studio**: Set/get/delete a studio's input configuration at a path (e.g. push configuration into the Static Configlet Studio), get the resolved input value - **Change Control**: Create/update (including flagging start/stop/schedule), get configuration, delete, get full status, approve +- **Inventory**: Onboard a device, get/delete an onboarding request, get onboarding status, decommission a device, get/delete a decommissioning request, get decommissioning status, get an inventoried device, get a provisioned device +- **Tags**: Set/get/delete a tag, get a tag's merge-preview or merged state, set/get/delete a tag assignment, get an assignment's merge-preview or merged state, get a tagged element +- **Software Management**: Add/get/delete a software image or extension, get an image's upload/validation status, get an image's device/rule assignments, list releases available from Arista's Software Download site -A typical flow: create a workspace, push configuration into a Studio, request a build (a single call that internally validates, compiles, and checks the change), submit the workspace (which creates a Change Control), then approve and start that Change Control. +A typical Workspace/Studio/Change Control flow: create a workspace, push configuration into a Studio, request a build (a single call that internally validates, compiles, and checks the change), submit the workspace (which creates a Change Control), then approve and start that Change Control. -Deliberately excludes: every other Studio resource (AssignedTags, AutofillAction, SecretInput, Studio/StudioConfig, StudioSummary) and Change Control's ChangeControlSummary, since they aren't part of this flow; the "list all" and "get several" operations on every resource, since those are long-lived streaming (chunked NDJSON) responses rather than a single JSON object and don't fit a request/response workflow task; and the dozens of other CloudVision resource packages (inventory, tags, image, telemetry, etc.) entirely, since they're outside this workflow. Several nested vendor structures (build diagnostics, change control stages) are preserved as opaque objects rather than fully typed, since they're deep, vendor-internal detail not needed to drive this flow. +Deliberately excludes: every other Studio resource (AssignedTags, AutofillAction, SecretInput, Studio/StudioConfig, StudioSummary) and Change Control's ChangeControlSummary, since they aren't part of the provisioning flow; the "list all" and "get several" operations on every resource, since those are long-lived streaming (chunked NDJSON) responses rather than a single JSON object and don't fit a request/response workflow task; and the rest of CloudVision's resource packages (alerting, dashboards, licensing, identity providers, audit logs, connectivity monitoring, and more) entirely, since they're outside this scope. Several nested vendor structures (build diagnostics, change control stages, ZTP upgrade rules) are preserved as opaque objects rather than fully typed, since they're deep, vendor-internal detail not needed to drive automation against these resources. + +A handful of resource names are prefixed with `Arista` (e.g. `Arista Get Tag`) to avoid colliding with identically-named workflows already published for other products — workflow names are unique across the whole Itential Platform instance, not scoped per-project. ## Studio Projects ### Arista CloudVision Project -Backed by the **`Arista CloudVision:latest`** Integration Model (see [`arista_cloudvision_api-latest.json`](./OpenAPIs/arista_cloudvision_api-latest.json) above). The project contains **15 workflows** organized into **3 folders**. +Backed by the **`Arista CloudVision:latest`** Integration Model (see [`arista_cloudvision_api-latest.json`](./OpenAPIs/arista_cloudvision_api-latest.json) above). The project contains **40 workflows** organized into **6 folders**. #### Folder Structure | Folder | Workflows | Scope | |---|---|---| +| Inventory | 10 | Device onboarding, decommissioning, and status | +| Tags | 9 | Tags and tag assignments | +| Software Management | 6 | Software image/extension management | | Workspace | 6 | Workspace lifecycle, build/submit requests, build status | | Change Control | 5 | Change Control lifecycle, status, approval | | Studio | 4 | Studio input configuration | diff --git a/Arista/CloudVision/Studio Projects/Arista CloudVision.project.json b/Arista/CloudVision/Studio Projects/Arista CloudVision.project.json index 420ca96..67c44c7 100644 --- a/Arista/CloudVision/Studio Projects/Arista CloudVision.project.json +++ b/Arista/CloudVision/Studio Projects/Arista CloudVision.project.json @@ -1,11 +1,11 @@ { - "_id": "6a8381055f16a73261948aac", + "_id": "6a83d4855f16a73261948aad", "name": "Arista CloudVision", - "description": "Workspace, Studio, and Change Control workflows backed by the Arista CloudVision Integration Model, covering the modern Workspace/Studio provisioning flow.", + "description": "Workspace, Studio, Change Control, Inventory, Tags, and Software Management workflows backed by the Arista CloudVision Integration Model.", "components": [ { "iid": 0, - "reference": "40134d16-7a34-41fe-ae66-ac85c7c75698", + "reference": "a21f91b3-11f1-44cf-ac62-88057b5c3b4d", "type": "workflow", "folder": "/Workspace", "document": { @@ -206,7 +206,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -214,7 +214,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "a9c53fe1-6fd9-4d45-aedc-b754c1b7e4c3", + "uuid": "ce564466-906e-4703-8254-20d0d22e716f", "created": "2026-08-17T21:45:16.075Z", "created_by": { "provenance": "LDAP", @@ -232,7 +232,7 @@ }, { "iid": 1, - "reference": "a4f4b3bd-620e-49c1-bc9e-6165a5986faf", + "reference": "8e100d93-174b-4aae-8dd1-eefa680a2d73", "type": "workflow", "folder": "/Workspace", "document": { @@ -328,7 +328,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -336,7 +336,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "8bdc983b-03e7-4fa9-b765-698ff4dd313b", + "uuid": "a0624158-c8eb-44de-bed9-3c34b5d9a15b", "created": "2026-08-17T21:45:16.128Z", "created_by": { "provenance": "LDAP", @@ -354,7 +354,7 @@ }, { "iid": 2, - "reference": "c94173c8-0136-4ef4-8705-5c6a89d4d871", + "reference": "e2a92923-5efb-4981-b8c3-0e43ba4f79c3", "type": "workflow", "folder": "/Workspace", "document": { @@ -450,7 +450,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -458,7 +458,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "ce57dbc4-64c4-48d9-949c-36c25bc083ae", + "uuid": "fedfb53a-db9e-4a09-96f5-bdd8727f14dd", "created": "2026-08-17T21:45:16.169Z", "created_by": { "provenance": "LDAP", @@ -476,7 +476,7 @@ }, { "iid": 3, - "reference": "76baddcc-62bc-4f9e-b5ec-dede7d930340", + "reference": "ef270385-18be-4977-8589-c3078b4b1056", "type": "workflow", "folder": "/Workspace", "document": { @@ -572,7 +572,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -580,7 +580,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "9d354b57-27a7-44f8-b0b1-97c25ee9e128", + "uuid": "c9a62d0a-ce11-4b18-9758-e361c0d6f22a", "created": "2026-08-17T21:45:16.208Z", "created_by": { "provenance": "LDAP", @@ -598,7 +598,7 @@ }, { "iid": 4, - "reference": "c33e599e-d573-4a9d-b2c9-9db71261e687", + "reference": "ad1f629b-1f9c-4552-ab62-4850d126b531", "type": "workflow", "folder": "/Workspace", "document": { @@ -702,7 +702,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -710,7 +710,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "d82c682f-487a-4d15-b3b7-63f0b9562bd8", + "uuid": "eaae888c-f491-4ed3-9b95-08549c164a03", "created": "2026-08-17T21:45:16.248Z", "created_by": { "provenance": "LDAP", @@ -728,7 +728,7 @@ }, { "iid": 5, - "reference": "fe6c4a0e-21c9-49ca-a0a6-51c33267f1dd", + "reference": "4778cace-4471-4019-8a31-e8daf5b7ee0d", "type": "workflow", "folder": "/Workspace", "document": { @@ -840,7 +840,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -848,7 +848,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "2245057c-9911-49f0-b2d2-817e97bcf857", + "uuid": "b5bf7682-c32c-4591-8770-7d9c5aa993b1", "created": "2026-08-17T21:45:16.290Z", "created_by": { "provenance": "LDAP", @@ -866,7 +866,7 @@ }, { "iid": 6, - "reference": "c3efdd1b-5447-4d5d-97f2-42537b046a7b", + "reference": "e82627cc-bd1e-41c6-a569-44788b815e67", "type": "workflow", "folder": "/Studio", "document": { @@ -1047,7 +1047,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -1055,7 +1055,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "e2e04f56-8cb9-423a-978a-fe097d461bc0", + "uuid": "e7c026f6-3b0a-43ba-9555-ac94110f5530", "created": "2026-08-17T21:45:16.329Z", "created_by": { "provenance": "LDAP", @@ -1073,7 +1073,7 @@ }, { "iid": 7, - "reference": "e0bc95ce-2978-491f-8d88-059ec4fa1ded", + "reference": "09e6de7d-6708-42d6-ac2e-b666e0e49f1b", "type": "workflow", "folder": "/Studio", "document": { @@ -1191,7 +1191,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -1199,7 +1199,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "c1b31197-b529-4a56-826b-216e22f6da09", + "uuid": "e916146c-6a74-4d38-9b79-6953a52852f0", "created": "2026-08-17T21:45:16.366Z", "created_by": { "provenance": "LDAP", @@ -1217,7 +1217,7 @@ }, { "iid": 8, - "reference": "0f44b95c-7202-439e-8c73-8e84b60be00b", + "reference": "4fe8eddc-edb6-47f3-90ff-19364a477607", "type": "workflow", "folder": "/Studio", "document": { @@ -1335,7 +1335,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -1343,7 +1343,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "126ffa84-b4d8-42d1-bee7-f81a8edc6096", + "uuid": "efae3922-25d6-4d50-abc8-4cbba2e74acc", "created": "2026-08-17T21:45:16.406Z", "created_by": { "provenance": "LDAP", @@ -1361,7 +1361,7 @@ }, { "iid": 9, - "reference": "944fd61a-e369-4c07-9bb3-add54e21c018", + "reference": "6c4418a4-ce96-4bb1-9cf1-a2ce5432675f", "type": "workflow", "folder": "/Studio", "document": { @@ -1479,7 +1479,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -1487,7 +1487,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "9d5375e6-1549-4de8-8653-327694edd406", + "uuid": "5a1219fd-263d-4d6c-a3c7-f84f1acf47f1", "created": "2026-08-17T21:45:16.453Z", "created_by": { "provenance": "LDAP", @@ -1505,7 +1505,7 @@ }, { "iid": 10, - "reference": "4c4a8394-2e5c-4303-a982-12bcf3a5f047", + "reference": "0751fba4-677a-40c5-a500-e8fea9a1540d", "type": "workflow", "folder": "/Change Control", "document": { @@ -1726,7 +1726,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -1734,7 +1734,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "67cb2893-7a08-4796-ba19-2625aaa4728b", + "uuid": "a97f3311-11bb-4538-82b4-bbb288b07d2a", "created": "2026-08-17T21:45:16.498Z", "created_by": { "provenance": "LDAP", @@ -1752,7 +1752,7 @@ }, { "iid": 11, - "reference": "1ce4bcbb-01fd-4643-9564-97a07d90e2ec", + "reference": "46d883de-4ab7-4ebc-a7d3-c6854e964302", "type": "workflow", "folder": "/Change Control", "document": { @@ -1848,7 +1848,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -1856,7 +1856,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "b51c96df-557a-45db-aa33-ba4456c0a70b", + "uuid": "c96e5fc5-c3a5-421e-aad9-b6071567fa67", "created": "2026-08-17T21:45:16.538Z", "created_by": { "provenance": "LDAP", @@ -1874,7 +1874,7 @@ }, { "iid": 12, - "reference": "39a5877b-dca7-421a-98c4-653174307a0f", + "reference": "8ae9ca23-043e-4069-b8cd-f9028656e9f5", "type": "workflow", "folder": "/Change Control", "document": { @@ -1970,7 +1970,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -1978,7 +1978,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "db513172-8f9e-4469-9a37-02c5c910d954", + "uuid": "d321a937-a1a8-4757-be84-ff4fd07d0dbc", "created": "2026-08-17T21:45:16.577Z", "created_by": { "provenance": "LDAP", @@ -1996,7 +1996,7 @@ }, { "iid": 13, - "reference": "1edcb9b3-f8b2-463b-b9c0-341a294bdd14", + "reference": "9b22c135-7fd2-486d-b0bf-ea3900ed4578", "type": "workflow", "folder": "/Change Control", "document": { @@ -2092,7 +2092,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -2100,7 +2100,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "a6d8b17f-39ee-4e85-88ae-7ce375bfa124", + "uuid": "137a59aa-afb9-41d3-b114-30858e28c7a5", "created": "2026-08-17T21:45:16.628Z", "created_by": { "provenance": "LDAP", @@ -2118,7 +2118,7 @@ }, { "iid": 14, - "reference": "603da12c-f1da-4930-84d0-daab2f7b135d", + "reference": "ef4043bc-6063-45ae-84c4-7219e4abc6a0", "type": "workflow", "folder": "/Change Control", "document": { @@ -2291,7 +2291,7 @@ } } }, - "last_updated": "2026-08-17T21:45:41.783Z", + "last_updated": "2026-08-18T03:41:58.903Z", "last_updated_by": { "provenance": "LDAP", "username": "admin@itential", @@ -2299,7 +2299,7 @@ "inactive": false }, "lastUpdatedVersion": "4.69.69", - "uuid": "f2520bc1-2509-47c0-b369-6862423fef55", + "uuid": "1dc7ff6f-fa5a-4d36-8a0d-31b715ebd041", "created": "2026-08-17T21:45:16.666Z", "created_by": { "provenance": "LDAP", @@ -2314,6 +2314,3806 @@ "groups": [], "migrationVersion": 8 } + }, + { + "iid": 15, + "reference": "e7d10e43-bf98-4793-931e-b00f93e59a54", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Onboard Device", + "description": "Onboard Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_OnboardDevice", + "canvasName": "inventory_OnboardDevice", + "summary": "inventory_OnboardDevice", + "description": "inventory_OnboardDevice", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A UUID you generate to identify this onboarding/decommissioning request." + } + }, + "required": [ + "requestId" + ] + }, + "hostnameOrIp": { + "type": "string", + "description": "Hostname or IP at which the device can be reached." + }, + "deviceType": { + "type": "string", + "description": "\"eos\" for EOS devices; for third-party devices: \"openconfig\", \"snmp\", \"cvp\", \"mwm\", or \"vCenter\"." + }, + "deviceConfig": { + "description": "Configuration for a third-party device.", + "type": "object", + "properties": { + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Device-specific options for a third-party device, e.g. {\"address\": \"...\", \"community\": \"...\"} for SNMP." + } + } + }, + "profileName": { + "type": "string", + "description": "Name of the TerminAttr profile with custom TerminAttr configuration to apply while onboarding." + } + }, + "required": [ + "key", + "hostnameOrIp", + "deviceType" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A UUID you generate to identify this onboarding/decommissioning request." + } + }, + "required": [ + "requestId" + ] + }, + "hostnameOrIp": { + "type": "string", + "description": "Hostname or IP at which the device can be reached." + }, + "deviceType": { + "type": "string", + "description": "\"eos\" for EOS devices; for third-party devices: \"openconfig\", \"snmp\", \"cvp\", \"mwm\", or \"vCenter\"." + }, + "deviceConfig": { + "description": "Configuration for a third-party device.", + "type": "object", + "properties": { + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Device-specific options for a third-party device, e.g. {\"address\": \"...\", \"community\": \"...\"} for SNMP." + } + } + }, + "profileName": { + "type": "string", + "description": "Name of the TerminAttr profile with custom TerminAttr configuration to apply while onboarding." + } + }, + "required": [ + "key", + "hostnameOrIp", + "deviceType" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "3b77cb61-bc2e-4369-968e-52fbc043523b", + "created": "2026-08-18T03:37:07.227Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 16, + "reference": "2de9147b-b727-435e-9306-62fbf212c45e", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Get Onboarding Request Configuration", + "description": "Get Onboarding Request Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_GetOnboardingConfig", + "canvasName": "inventory_GetOnboardingConfig", + "summary": "inventory_GetOnboardingConfig", + "description": "inventory_GetOnboardingConfig", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.requestId": "$var.job.key.requestId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + } + }, + "required": [ + "key.requestId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "1c3a8797-aa01-4724-aeaa-e8659710137e", + "created": "2026-08-18T03:37:07.290Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 17, + "reference": "45ce9c5e-cb4f-4659-af3e-711a5d65c06d", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Delete Onboarding Request", + "description": "Delete Onboarding Request", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_DeleteOnboardingRequest", + "canvasName": "inventory_DeleteOnboardingRequest", + "summary": "inventory_DeleteOnboardingRequest", + "description": "inventory_DeleteOnboardingRequest", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.requestId": "$var.job.key.requestId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + } + }, + "required": [ + "key.requestId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "be20c607-e7d7-4cf0-bb63-e9324e5426bf", + "created": "2026-08-18T03:37:07.351Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 18, + "reference": "01820ab0-a236-42bd-ab73-3d7bac4ade83", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Get Onboarding Status", + "description": "Get Onboarding Status", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_GetOnboardingStatus", + "canvasName": "inventory_GetOnboardingStatus", + "summary": "inventory_GetOnboardingStatus", + "description": "inventory_GetOnboardingStatus", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.requestId": "$var.job.key.requestId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + } + }, + "required": [ + "key.requestId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "656f0944-d4aa-4949-86c5-18f137a8cf22", + "created": "2026-08-18T03:37:07.391Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 19, + "reference": "5e541a08-eb3e-4cd3-b8f7-5d44f473de90", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Decommission Device", + "description": "Decommission Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_DecommissionDevice", + "canvasName": "inventory_DecommissionDevice", + "summary": "inventory_DecommissionDevice", + "description": "inventory_DecommissionDevice", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A UUID you generate to identify this onboarding/decommissioning request." + } + }, + "required": [ + "requestId" + ] + }, + "deviceId": { + "type": "string", + "description": "Unique device ID that was discovered via onboarding." + }, + "force": { + "type": "boolean", + "description": "Ignore pending/in-progress blocking tasks and decommission anyway." + }, + "userName": { + "type": "string", + "description": "Name of the user who decommissioned the device." + } + }, + "required": [ + "key", + "deviceId" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "A UUID you generate to identify this onboarding/decommissioning request." + } + }, + "required": [ + "requestId" + ] + }, + "deviceId": { + "type": "string", + "description": "Unique device ID that was discovered via onboarding." + }, + "force": { + "type": "boolean", + "description": "Ignore pending/in-progress blocking tasks and decommission anyway." + }, + "userName": { + "type": "string", + "description": "Name of the user who decommissioned the device." + } + }, + "required": [ + "key", + "deviceId" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "5abe7c0c-cca2-4e8d-bb3c-0c093370142b", + "created": "2026-08-18T03:37:07.427Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 20, + "reference": "422519a2-99da-4a77-940e-765c0aafe1f1", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Get Decommissioning Request Configuration", + "description": "Get Decommissioning Request Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_GetDecommissioningConfig", + "canvasName": "inventory_GetDecommissioningConfig", + "summary": "inventory_GetDecommissioningConfig", + "description": "inventory_GetDecommissioningConfig", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.requestId": "$var.job.key.requestId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + } + }, + "required": [ + "key.requestId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "bfd609f3-3f2a-4efe-9c76-953557dc9f04", + "created": "2026-08-18T03:37:07.465Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 21, + "reference": "5846a3b7-b2da-4119-96be-4be29ade2fdd", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Delete Decommissioning Request", + "description": "Delete Decommissioning Request", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_DeleteDecommissioningRequest", + "canvasName": "inventory_DeleteDecommissioningRequest", + "summary": "inventory_DeleteDecommissioningRequest", + "description": "inventory_DeleteDecommissioningRequest", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.requestId": "$var.job.key.requestId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + } + }, + "required": [ + "key.requestId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "81f91d1d-4dd9-4e71-8d40-d991730a581f", + "created": "2026-08-18T03:37:07.505Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 22, + "reference": "9d3ca1ec-cb7e-4c37-a869-b7df4979f81c", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Get Decommissioning Status", + "description": "Get Decommissioning Status", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_GetDecommissioningStatus", + "canvasName": "inventory_GetDecommissioningStatus", + "summary": "inventory_GetDecommissioningStatus", + "description": "inventory_GetDecommissioningStatus", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.requestId": "$var.job.key.requestId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + } + }, + "required": [ + "key.requestId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.requestId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "48853f19-b964-40b3-b489-2c8c179690fa", + "created": "2026-08-18T03:37:07.553Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 23, + "reference": "94e72d4b-0d51-4494-82a4-269c844a1693", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Get Inventoried Device", + "description": "Get Inventoried Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_GetDevice", + "canvasName": "inventory_GetDevice", + "summary": "inventory_GetDevice", + "description": "inventory_GetDevice", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.deviceId": "$var.job.key.deviceId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.deviceId": { + "type": "string" + } + }, + "required": [ + "key.deviceId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.deviceId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "5886b0cd-dc1a-4742-aa93-71bfd87b5bf2", + "created": "2026-08-18T03:37:07.587Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 24, + "reference": "a87fb6f5-ce42-4f25-a34c-0c89806828c3", + "type": "workflow", + "folder": "/Inventory", + "document": { + "name": "Get Provisioned Device", + "description": "Get Provisioned Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "inventory_GetProvisionedDevice", + "canvasName": "inventory_GetProvisionedDevice", + "summary": "inventory_GetProvisionedDevice", + "description": "inventory_GetProvisionedDevice", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.deviceId": "$var.job.key.deviceId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.deviceId": { + "type": "string" + } + }, + "required": [ + "key.deviceId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.deviceId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "036f4703-91a9-4c05-a2a7-46ae6218622a", + "created": "2026-08-18T03:37:07.621Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 25, + "reference": "6837314a-6b93-4ae4-9b59-ba31f930ce0d", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Set Tag", + "description": "Set Tag", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_SetTag", + "canvasName": "tag_SetTag", + "summary": "tag_SetTag", + "description": "tag_SetTag", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Workspace ID; the special ID \"\" identifies where merged (published) tags reside." + }, + "elementType": { + "type": "string", + "enum": [ + "ELEMENT_TYPE_UNSPECIFIED", + "ELEMENT_TYPE_DEVICE", + "ELEMENT_TYPE_INTERFACE", + "ELEMENT_TYPE_VIRTUAL" + ] + }, + "label": { + "type": "string", + "description": "Tag label." + }, + "value": { + "type": "string", + "description": "Tag value." + }, + "elementSubType": { + "type": "string", + "enum": [ + "ELEMENT_SUB_TYPE_UNSPECIFIED", + "ELEMENT_SUB_TYPE_DEVICE", + "ELEMENT_SUB_TYPE_VDS", + "ELEMENT_SUB_TYPE_WORKLOAD_SERVER", + "ELEMENT_SUB_TYPE_VM", + "ELEMENT_SUB_TYPE_APPLICATION", + "ELEMENT_SUB_TYPE_CONNECTIVITY_MONITOR_PROBE" + ] + } + }, + "required": [ + "workspaceId", + "elementType", + "label", + "value", + "elementSubType" + ] + }, + "remove": { + "type": "boolean", + "description": "Set true to remove this tag when the encompassing workspace merges." + } + }, + "required": [ + "key" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Workspace ID; the special ID \"\" identifies where merged (published) tags reside." + }, + "elementType": { + "type": "string", + "enum": [ + "ELEMENT_TYPE_UNSPECIFIED", + "ELEMENT_TYPE_DEVICE", + "ELEMENT_TYPE_INTERFACE", + "ELEMENT_TYPE_VIRTUAL" + ] + }, + "label": { + "type": "string", + "description": "Tag label." + }, + "value": { + "type": "string", + "description": "Tag value." + }, + "elementSubType": { + "type": "string", + "enum": [ + "ELEMENT_SUB_TYPE_UNSPECIFIED", + "ELEMENT_SUB_TYPE_DEVICE", + "ELEMENT_SUB_TYPE_VDS", + "ELEMENT_SUB_TYPE_WORKLOAD_SERVER", + "ELEMENT_SUB_TYPE_VM", + "ELEMENT_SUB_TYPE_APPLICATION", + "ELEMENT_SUB_TYPE_CONNECTIVITY_MONITOR_PROBE" + ] + } + }, + "required": [ + "workspaceId", + "elementType", + "label", + "value", + "elementSubType" + ] + }, + "remove": { + "type": "boolean", + "description": "Set true to remove this tag when the encompassing workspace merges." + } + }, + "required": [ + "key" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "15c2f9f1-0741-4214-9c22-af4dd68784b8", + "created": "2026-08-18T03:37:07.658Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 26, + "reference": "56a35d7b-4e4a-45e2-8954-0eee9a5cfc5b", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Get Tag Configuration", + "description": "Get Tag Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_GetTagConfig", + "canvasName": "tag_GetTagConfig", + "summary": "tag_GetTagConfig", + "description": "tag_GetTagConfig", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.elementType": "$var.job.key.elementType", + "key.label": "$var.job.key.label", + "key.value": "$var.job.key.value", + "key.elementSubType": "$var.job.key.elementSubType" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.elementType", + "key.label", + "key.value", + "key.elementSubType" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "d68828da-2e44-4b04-98f5-9f2e48078ed3", + "created": "2026-08-18T03:37:07.692Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 27, + "reference": "ce316e3d-6cdf-4efa-b35a-e0da60ac3e37", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Arista Delete Tag", + "description": "Arista Delete Tag", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_DeleteTag", + "canvasName": "tag_DeleteTag", + "summary": "tag_DeleteTag", + "description": "tag_DeleteTag", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.elementType": "$var.job.key.elementType", + "key.label": "$var.job.key.label", + "key.value": "$var.job.key.value", + "key.elementSubType": "$var.job.key.elementSubType" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.elementType", + "key.label", + "key.value", + "key.elementSubType" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "6846a138-f0e2-4b3e-87c8-03bc4721114d", + "created": "2026-08-18T03:37:07.734Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 28, + "reference": "fdf37957-04f5-43ee-b33d-7fe65b9932aa", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Arista Get Tag", + "description": "Arista Get Tag", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_GetTag", + "canvasName": "tag_GetTag", + "summary": "tag_GetTag", + "description": "tag_GetTag", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.elementType": "$var.job.key.elementType", + "key.label": "$var.job.key.label", + "key.value": "$var.job.key.value", + "key.elementSubType": "$var.job.key.elementSubType" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.elementType", + "key.label", + "key.value", + "key.elementSubType" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "cf750cc5-24bd-4800-b3ac-9361f859320c", + "created": "2026-08-18T03:37:07.779Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 29, + "reference": "6c9e2eff-c74d-498d-a50b-30457c6ec309", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Set Tag Assignment", + "description": "Set Tag Assignment", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_SetAssignment", + "canvasName": "tag_SetAssignment", + "summary": "tag_SetAssignment", + "description": "tag_SetAssignment", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Workspace ID; the special ID \"\" identifies where merged assignments reside." + }, + "elementType": { + "type": "string", + "enum": [ + "ELEMENT_TYPE_UNSPECIFIED", + "ELEMENT_TYPE_DEVICE", + "ELEMENT_TYPE_INTERFACE", + "ELEMENT_TYPE_VIRTUAL" + ] + }, + "label": { + "type": "string" + }, + "value": { + "type": "string" + }, + "deviceId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_DEVICE and ELEMENT_TYPE_INTERFACE." + }, + "interfaceId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_INTERFACE." + }, + "elementSubType": { + "type": "string", + "enum": [ + "ELEMENT_SUB_TYPE_UNSPECIFIED", + "ELEMENT_SUB_TYPE_DEVICE", + "ELEMENT_SUB_TYPE_VDS", + "ELEMENT_SUB_TYPE_WORKLOAD_SERVER", + "ELEMENT_SUB_TYPE_VM", + "ELEMENT_SUB_TYPE_APPLICATION", + "ELEMENT_SUB_TYPE_CONNECTIVITY_MONITOR_PROBE" + ] + }, + "primaryEntityId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_VIRTUAL (e.g. application ID)." + }, + "secondaryEntityId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_VIRTUAL (e.g. service ID)." + } + }, + "required": [ + "workspaceId", + "elementType", + "label", + "value", + "elementSubType" + ] + }, + "remove": { + "type": "boolean", + "description": "Set true to remove this assignment when the encompassing workspace merges." + } + }, + "required": [ + "key" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "Workspace ID; the special ID \"\" identifies where merged assignments reside." + }, + "elementType": { + "type": "string", + "enum": [ + "ELEMENT_TYPE_UNSPECIFIED", + "ELEMENT_TYPE_DEVICE", + "ELEMENT_TYPE_INTERFACE", + "ELEMENT_TYPE_VIRTUAL" + ] + }, + "label": { + "type": "string" + }, + "value": { + "type": "string" + }, + "deviceId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_DEVICE and ELEMENT_TYPE_INTERFACE." + }, + "interfaceId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_INTERFACE." + }, + "elementSubType": { + "type": "string", + "enum": [ + "ELEMENT_SUB_TYPE_UNSPECIFIED", + "ELEMENT_SUB_TYPE_DEVICE", + "ELEMENT_SUB_TYPE_VDS", + "ELEMENT_SUB_TYPE_WORKLOAD_SERVER", + "ELEMENT_SUB_TYPE_VM", + "ELEMENT_SUB_TYPE_APPLICATION", + "ELEMENT_SUB_TYPE_CONNECTIVITY_MONITOR_PROBE" + ] + }, + "primaryEntityId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_VIRTUAL (e.g. application ID)." + }, + "secondaryEntityId": { + "type": "string", + "description": "Set for ELEMENT_TYPE_VIRTUAL (e.g. service ID)." + } + }, + "required": [ + "workspaceId", + "elementType", + "label", + "value", + "elementSubType" + ] + }, + "remove": { + "type": "boolean", + "description": "Set true to remove this assignment when the encompassing workspace merges." + } + }, + "required": [ + "key" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "1f8cf375-922c-4d8f-a86c-eb883ff03381", + "created": "2026-08-18T03:37:07.809Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 30, + "reference": "6c75b59f-68aa-420b-acc9-4ec3e391ea51", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Get Tag Assignment Configuration", + "description": "Get Tag Assignment Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_GetAssignmentConfig", + "canvasName": "tag_GetAssignmentConfig", + "summary": "tag_GetAssignmentConfig", + "description": "tag_GetAssignmentConfig", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.elementType": "$var.job.key.elementType", + "key.label": "$var.job.key.label", + "key.value": "$var.job.key.value", + "key.elementSubType": "$var.job.key.elementSubType", + "key.deviceId": "$var.job.key.deviceId", + "key.interfaceId": "$var.job.key.interfaceId", + "key.primaryEntityId": "$var.job.key.primaryEntityId", + "key.secondaryEntityId": "$var.job.key.secondaryEntityId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + }, + "key.interfaceId": { + "type": "string" + }, + "key.primaryEntityId": { + "type": "string" + }, + "key.secondaryEntityId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.elementType", + "key.label", + "key.value", + "key.elementSubType", + "key.deviceId", + "key.interfaceId", + "key.primaryEntityId", + "key.secondaryEntityId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + }, + "key.interfaceId": { + "type": "string" + }, + "key.primaryEntityId": { + "type": "string" + }, + "key.secondaryEntityId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "523ffc94-9f39-48f6-8ea8-3b509e3d33bc", + "created": "2026-08-18T03:37:07.841Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 31, + "reference": "37d462b9-c460-43b5-8936-e1c232f8ec74", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Delete Tag Assignment", + "description": "Delete Tag Assignment", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_DeleteAssignment", + "canvasName": "tag_DeleteAssignment", + "summary": "tag_DeleteAssignment", + "description": "tag_DeleteAssignment", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.elementType": "$var.job.key.elementType", + "key.label": "$var.job.key.label", + "key.value": "$var.job.key.value", + "key.elementSubType": "$var.job.key.elementSubType", + "key.deviceId": "$var.job.key.deviceId", + "key.interfaceId": "$var.job.key.interfaceId", + "key.primaryEntityId": "$var.job.key.primaryEntityId", + "key.secondaryEntityId": "$var.job.key.secondaryEntityId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + }, + "key.interfaceId": { + "type": "string" + }, + "key.primaryEntityId": { + "type": "string" + }, + "key.secondaryEntityId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.elementType", + "key.label", + "key.value", + "key.elementSubType", + "key.deviceId", + "key.interfaceId", + "key.primaryEntityId", + "key.secondaryEntityId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + }, + "key.interfaceId": { + "type": "string" + }, + "key.primaryEntityId": { + "type": "string" + }, + "key.secondaryEntityId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "969d7582-0ba2-4660-8b2c-7c096a8ca061", + "created": "2026-08-18T03:37:07.875Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 32, + "reference": "1a23dd5a-0407-4e3e-aae8-c85639230a4b", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Get Tag Assignment", + "description": "Get Tag Assignment", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_GetAssignment", + "canvasName": "tag_GetAssignment", + "summary": "tag_GetAssignment", + "description": "tag_GetAssignment", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.workspaceId": "$var.job.key.workspaceId", + "key.elementType": "$var.job.key.elementType", + "key.label": "$var.job.key.label", + "key.value": "$var.job.key.value", + "key.elementSubType": "$var.job.key.elementSubType", + "key.deviceId": "$var.job.key.deviceId", + "key.interfaceId": "$var.job.key.interfaceId", + "key.primaryEntityId": "$var.job.key.primaryEntityId", + "key.secondaryEntityId": "$var.job.key.secondaryEntityId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + }, + "key.interfaceId": { + "type": "string" + }, + "key.primaryEntityId": { + "type": "string" + }, + "key.secondaryEntityId": { + "type": "string" + } + }, + "required": [ + "key.workspaceId", + "key.elementType", + "key.label", + "key.value", + "key.elementSubType", + "key.deviceId", + "key.interfaceId", + "key.primaryEntityId", + "key.secondaryEntityId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.workspaceId": { + "type": "string" + }, + "key.elementType": { + "type": "string" + }, + "key.label": { + "type": "string" + }, + "key.value": { + "type": "string" + }, + "key.elementSubType": { + "type": "string" + }, + "key.deviceId": { + "type": "string" + }, + "key.interfaceId": { + "type": "string" + }, + "key.primaryEntityId": { + "type": "string" + }, + "key.secondaryEntityId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "53d96c02-8f11-462a-b21e-2b94337c7d5b", + "created": "2026-08-18T03:37:07.907Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 33, + "reference": "6a414f17-b29c-4ee2-920e-37174c82a4c0", + "type": "workflow", + "folder": "/Tags", + "document": { + "name": "Get Tagged Element", + "description": "Get Tagged Element", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "tag_GetElement", + "canvasName": "tag_GetElement", + "summary": "tag_GetElement", + "description": "tag_GetElement", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.type": "$var.job.key.type", + "key.subType": "$var.job.key.subType", + "key.primaryId": "$var.job.key.primaryId", + "key.secondaryId": "$var.job.key.secondaryId" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.type": { + "type": "string" + }, + "key.subType": { + "type": "string" + }, + "key.primaryId": { + "type": "string" + }, + "key.secondaryId": { + "type": "string" + } + }, + "required": [ + "key.type", + "key.subType", + "key.primaryId", + "key.secondaryId" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.type": { + "type": "string" + }, + "key.subType": { + "type": "string" + }, + "key.primaryId": { + "type": "string" + }, + "key.secondaryId": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "b9cf6d39-2cc8-4a85-90fc-6267978af8c7", + "created": "2026-08-18T03:37:07.935Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 34, + "reference": "c7e71f69-b031-41c1-890c-dd6e649a6b42", + "type": "workflow", + "folder": "/Software Management", + "document": { + "name": "Add Software Image", + "description": "Add Software Image", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "software_AddImage", + "canvasName": "software_AddImage", + "summary": "software_AddImage", + "description": "software_AddImage", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique identifier for the image/extension, including its file suffix (.swi, .swix, .rpm; Streaming Agent files must contain \"TerminAttr\")." + } + }, + "required": [ + "name" + ] + }, + "uri": { + "type": "string", + "description": "Arista Software Download site identifier, or the CloudVision file server identifier if uploaded via the Software Upload REST API." + }, + "rebootRequired": { + "type": "boolean", + "description": ".swi images always require a reboot." + } + }, + "required": [ + "key", + "uri" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "key": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique identifier for the image/extension, including its file suffix (.swi, .swix, .rpm; Streaming Agent files must contain \"TerminAttr\")." + } + }, + "required": [ + "name" + ] + }, + "uri": { + "type": "string", + "description": "Arista Software Download site identifier, or the CloudVision file server identifier if uploaded via the Software Upload REST API." + }, + "rebootRequired": { + "type": "boolean", + "description": ".swi images always require a reboot." + } + }, + "required": [ + "key", + "uri" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "2edfb516-71f5-4eaf-9b01-6ef1731a628a", + "created": "2026-08-18T03:37:07.968Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 35, + "reference": "7e812eac-45d1-45e8-bbe7-0e7a5ff265ec", + "type": "workflow", + "folder": "/Software Management", + "document": { + "name": "Get Software Image Configuration", + "description": "Get Software Image Configuration", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "software_GetRepositoryConfig", + "canvasName": "software_GetRepositoryConfig", + "summary": "software_GetRepositoryConfig", + "description": "software_GetRepositoryConfig", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.name": "$var.job.key.name" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + } + }, + "required": [ + "key.name" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "c8702c27-a33f-48e9-855f-9dc09b4cee48", + "created": "2026-08-18T03:37:08.008Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 36, + "reference": "6de99649-0e66-4bf2-b4b5-cd1be4ee4dd9", + "type": "workflow", + "folder": "/Software Management", + "document": { + "name": "Delete Software Image", + "description": "Delete Software Image", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "software_DeleteImage", + "canvasName": "software_DeleteImage", + "summary": "software_DeleteImage", + "description": "software_DeleteImage", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.name": "$var.job.key.name" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + } + }, + "required": [ + "key.name" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "2c92a74f-eb88-4550-9eee-85a677908166", + "created": "2026-08-18T03:37:08.036Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 37, + "reference": "e1f866fe-b7bd-44da-8c8e-ee24e396e886", + "type": "workflow", + "folder": "/Software Management", + "document": { + "name": "Get Software Image Status", + "description": "Get Software Image Status", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "software_GetRepository", + "canvasName": "software_GetRepository", + "summary": "software_GetRepository", + "description": "software_GetRepository", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.name": "$var.job.key.name" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + } + }, + "required": [ + "key.name" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "17e7a839-bad0-478d-9128-95426bc8a3f9", + "created": "2026-08-18T03:37:08.063Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 38, + "reference": "e82620d2-9522-4be3-ae5e-962a54f38283", + "type": "workflow", + "folder": "/Software Management", + "document": { + "name": "Get Software Image Assignments", + "description": "Get Software Image Assignments", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "software_GetAssignments", + "canvasName": "software_GetAssignments", + "summary": "software_GetAssignments", + "description": "software_GetAssignments", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision", + "key.name": "$var.job.key.name" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + } + }, + "required": [ + "key.name" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "key.name": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "7d8fc7b3-54c7-49de-8fee-8f3119109109", + "created": "2026-08-18T03:37:08.096Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 39, + "reference": "c6af75bd-39ea-43c8-81a6-414d43645931", + "type": "workflow", + "folder": "/Software Management", + "document": { + "name": "List Available Software Releases", + "description": "List Available Software Releases", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "software_GetReleases", + "canvasName": "software_GetReleases", + "summary": "software_GetReleases", + "description": "software_GetReleases", + "location": "Adapter", + "locationType": "Arista CloudVision:latest", + "app": "Arista CloudVision:latest", + "type": "automatic", + "displayName": "Arista CloudVision", + "variables": { + "incoming": { + "adapter_id": "Arista CloudVision" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": {} + }, + "outputSchema": { + "type": "object", + "properties": { + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-18T03:41:58.903Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "4984ed9a-f85f-463d-981d-75be70735295", + "created": "2026-08-18T03:37:08.126Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } } ], "folders": [ @@ -2394,6 +6194,124 @@ "nodeType": "component" } ] + }, + { + "nodeType": "folder", + "name": "Inventory", + "children": [ + { + "iid": 15, + "nodeType": "component" + }, + { + "iid": 16, + "nodeType": "component" + }, + { + "iid": 17, + "nodeType": "component" + }, + { + "iid": 18, + "nodeType": "component" + }, + { + "iid": 19, + "nodeType": "component" + }, + { + "iid": 20, + "nodeType": "component" + }, + { + "iid": 21, + "nodeType": "component" + }, + { + "iid": 22, + "nodeType": "component" + }, + { + "iid": 23, + "nodeType": "component" + }, + { + "iid": 24, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Tags", + "children": [ + { + "iid": 25, + "nodeType": "component" + }, + { + "iid": 26, + "nodeType": "component" + }, + { + "iid": 27, + "nodeType": "component" + }, + { + "iid": 28, + "nodeType": "component" + }, + { + "iid": 29, + "nodeType": "component" + }, + { + "iid": 30, + "nodeType": "component" + }, + { + "iid": 31, + "nodeType": "component" + }, + { + "iid": 32, + "nodeType": "component" + }, + { + "iid": 33, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Software Management", + "children": [ + { + "iid": 34, + "nodeType": "component" + }, + { + "iid": 35, + "nodeType": "component" + }, + { + "iid": 36, + "nodeType": "component" + }, + { + "iid": 37, + "nodeType": "component" + }, + { + "iid": 38, + "nodeType": "component" + }, + { + "iid": 39, + "nodeType": "component" + } + ] } ], "createdBy": { @@ -2406,9 +6324,9 @@ "provenance": "LDAP", "username": "admin@itential" }, - "created": "2026-08-17T21:45:41.392Z", - "lastUpdated": "2026-08-17T21:45:41.392Z", - "iid": 47, + "created": "2026-08-18T03:41:58.118Z", + "lastUpdated": "2026-08-18T03:41:58.118Z", + "iid": 48, "thumbnail": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUoAAABkCAYAAADg+Hn3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAABSqADAAQAAAABAAAAZAAAAABcVM/PAAAACXBIWXMAAAsTAAALEwEAmpwYAAACymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMzA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjEyMDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpwIzk+AABAAElEQVR4AXT9C4IjObIsidan76LeSmbns5mZqnwiogYyss8ZBOkOmKmpfQAHnWRk5J9//v/+r//7jz///POPf3/99QedX/z8+ccff/3iifjPX3/8+vMPfv7893R//vnXr3+RaSRSPU/wSf4AB572L7I6d3wndVgwRKutpjwlq590lLP/42/1Q+1IqNoIz4z+fxQZNg3Np/93fiYv3sPUB1tmf5V1Afz5d4H+9Rcl+VM/f/6iEH/8+9cvRn9THBR/6VkpFgx//YGTv6WQ9G8jAPPXH3/+RV+Q4j8JEFE2+EAgIPvk6K10gL/AViAhSpwaf05uiPaVGiIRGgfx5lf2f4rFKQRDDjHbzeY4GyP7ZVoMVOdLf7MUbuC2JhTxFRPBv2M/vXG0eobO0txuKEPdVg99eXLpZI90YSL/jgsvO8E/yN5gutM4CPM9fGw/ukmGPBxpfVqle8H99PiwIn/wh8+acij/Dddg8scliOdgp3c0wQe7mE7vSRsuP+eL9eVFt/rHZwDTZ/d0iVvziVkiywweZiCnJ1sEXfK4Ca3LpqZxkcz+1sLz6dmGH5YgFq7HrsI5KDIP+C4RTnSNkY7LVs2iCSGIjvlsKZirMf2+LkK55Fx3mo+zDgf95WM4jkDz8+uPf+VLfkJ2LAFc2+oQWqdi8vwfHFgKdgAN2xO44jTwikHmxifcunrFWIRiYuiZQLo4fv1yAzU2FYj1/69w7RzTim0FtI5knXvjMkAv+IfurBmglywuuvDwk4tdvwb0x69/pKfLAgoz8szRwNDFr5OMoV9I7GzJQPxy8RkXIf+DvcnrqNcQ1Gz9rSkYuPzJrQ3PvCjYv3/9Zan+/vMfXLWJmR+SdgpY2br+Zcc35l8W2Ea/VULy/6Jnc21MX+7WsvBqbmB6AGNVmhhi2wtTBQdIKf754/8l1yYFzJXOOcZbNQhbFeDDSWLIIcUOSYURQO6G2MrB/l/tWxxGL9dsUGXTNZSZZdOKeuFWzx70Yc4QSV375AZgfhWfkl5hGJtNd68j0fGIHvfsPjzFBxvY8h1FDAWC1XN6dSpjYhqGY8W6Y8IX2kEM40oVqjLTK9J3CmMtMXr4MjlA+Ln88MlAWZs3hJcKwq3JP5l4Y34M1re1y8tl1Ni78uIwz0Ukj13iIBYCb2648bFG7Q+q1KfLSu/f8W6SIL/YgL7pNFwuFgjAi/Ms1Xmdb0ajS0d3NoxCm0SJYG8MDKJJufodUh5LX+Kn5vLA3gUZu7ow4wZsJ50H/RCnNbg6gUY9jFe/qhpXtPdK8BYORrsW3bFMwGpMx1UiqsC1qTxcLBLH1yZrVMC8qrylqnJeXecdtm5DEqDGTbvJP/hCJb3JSGHF/+7Oy7CTcgIXwhSYV/P4032MsUFwcqJsf+d2E8bdXiV3f/oLvKtZCy926d4G/M/ulb07ldiNA6S3khIj+mvL0I0yywvLRQP4b4L7B9Xf0mj06x8PuiPRv9Cp/Q/ZgbZuTvO//3rbR4fA5AT8d6U2LiCg3TYpx1++CHjjWhz//oPd3zKsiNg1P+TihFVmTEyvBN2yVqeS45UFp2ZJ7YlK58XEqLis0d/xO84rwUpmUDzsA/aCuL4XWq936g2D9qbLGTAsw9HvZqQBpbW2qrcMGij42dB9WwHoHbK3JOiaQDg1YjjzaE14RqrmNatuFr57cLnZOgryyaBYb/lNOdxNA/aWGlRXBH1JbHSaHLpXqcKR42FkqkzaKsfASTKccukOXTLGFLZYQBSB5GBJuKGcXTwPhBdrrza5AcrLD0cmgkG2npGo/csAnGuxTy4Q8V9/72rIBo67+tRBoDU4u/RdO5svvU+Omjp0K4SkjcDNKZsdtzg+eKmyZvq44BgYY7Yy6nEQjjwc90odozLgU2lqvOKUT7oYfCcosOpYeJgLBz45u9AR+37PC9X1LYv3kUavm7+oDD4MNxfaoKoOyFYAywpY98gSD+9+3KrVPnIdiHhX78G1R9qBcAvTpcUm6UU4tvy2GpWI8ZpsBW4JuYkgdfpcPfTc5Y0SOFIzrMir+ULBW+H4VnYuF5t9tr1VEJZiWpgJjcFCGZvtFoZuetvLuCKSP6ZgfRACE+ErEfec7OPLeTfCVpqN69f/8VMGHfJSNONfbtBhEcBraL/Amj7czduvv/7Ffmmj5M6ezS+f3dMtKjZkdJsmzjhy0Ht0Z7zp45641wNU2nu7anr1y5Gutjx+/UMn7f9JLawJUGZ8+VKq4DYCu80ZkrgRKNtBFArDMrDR20vvXfhvDZS2xil2Jk2P/kaL8Pz5CqfwNM4D9rP9919AqZ3+8/PSszZxU2L903eob+7qOKyM1s39pTWjbWCW6F+sCmD5wrCsDDYCwqPPTQXycem/ZS8vffEuIpcUk/XHv3+zteLMae5MqblqIUEtnOh4Z4QjeTOuPr94ywXQ0DeFvFAu9k7q9GF9xns5wI4JzRfWyU4UlQ5pucXW9xwaKDXHqWGtSO1D66YwryHe0ZcNHjOWx4XjXYZNhwKBaIfu8a9MIA6SDjvxGEARR1psDAbRwI1HrAce2elLT64G3f/HMlshAM4W8yUnwaLgzO5Th5c5E0C84tvnGXNXqP40VhpzemOXRuGJGYDNobhlkD/I2DYiAOxEus8LqgByMKzpV7U65bSpuPxNhQeRuGViiztP4jz4WJEQkBD67iaQlxtGLDxnQf6tDpC2EZJPdm42eSUb960y652wehl0acs5d5u/3J1MkM2St+FVXLVxEq93pIZQgF0tdLvdMQ7L2KF+MbCxodexMSXaPGFnCM6HXUgLdGLj2qcK2D15AgPRgNh3pi/DP/jhY1hbdWmTZCwMBtMb0+1G4HYnSSc+LUeboA3gPGMrerj5qK8nIKaWfsI7ykaTQpDYjx9iQXLzQI+WK1fdDQDcepgSH+q80Gvh6ElUo3Ob6UdYjQQMbJi39wBZ7MbNq2I5NEESSoVJ9YLDaPlYhufiFjCdjtUJnpsuLubCmmyznPX2U+PQVmzbb6aMEGNCwl10BWIcAj0Ka4dHELM0py6DbQIKfVmWx5D8iAu8S8hY8oG4KmtvQu4snBlqXavfgmEo5jQv7m0gzSb6ZTqcfW3OZLo4I0Le8jUq40Mzg2qiaDFpAbSs7St98aRK2CFPNxncUZZsmyNdNssikYo0Cbu50DNDt+Yrt+e+MSgzLxBafbpe7d5aiadUeii6IJZUPp5G/722ZuemsXeD1lw7weMXb4PhKmapp/vJp6jAzU7bHF1QyMgNM4ReoO1SnOWV/FFfH6HWi6DeGxh7s5Add0h9eaNZPDsWnnlw19Bm6gsOrw6xnr1wAmUjdcGJq56UyelQ6cK3w25luF7PvXA5J5LsswIw1jaXIGgwOxfytdyTLKGquxJzRwpQMT54fEqmxDmUyltffTdhdJpDbH79Pxi4jBCp157T8mbYrqAdjdC8Q1YPDFBHexMwTjflyR9m59VB1Y80sxpcopBeCngq9lPhvtayEiXQaC7GhlqEw14DhC03hQISRHPjwEiNfTbPqzL5Jz8bZUmGGkaJPDmY36vFrKZj3X7nRpGzrQsC1btxbgwTc8E8ZqLQleHnmgjz3qyaux8btWY46gxR4zlm2KarXCcLsYTi6o4vznG8WJbW8Ur1ai8JS1cGzWotC3pdlHEvDGOZpTGaDkNzwtgwz1wQre1eMV0Yb5NWo7DcHNDsZ5svsA0S5sd49AeOM8Gi58sc4+NoHItnd88CoxAIVIOlq12b5BxYsLx77MIsEO9CZmH+qRqbZAJnsrkpibrxYP34fKtgFFeZ70sGgGXrJgCmO885EZ8WI1eLOAnZY8ze3DGatSqsGTL2KqfFcj4ZZC6lubj5P4hc3wqhPmyEsswFUWgsNmqttvFZZmpkEVKBg+NtRr7ShOWrmYRUMX/sfGZgLfZKvpU+nS6WB9RExzJ3Y+uduTkZDSffufshAYhqourystQ9mO9Fjk5/TgWbZqGWOwYG2AuNedA4yWMe8TDWNGGKHDecWH3IcVmaH1qp/kd7fM/uVTV+XDsWYzPf9SbzdZGAvNstrsOkFIhd+A6L7QP5wVNhGK92gCFTZr1k+GxoG8apKtoitOfzBeq5qDhH5/D4EOiiacXHM/PMNWY+0TBOxdismygXlnon7YU3unnWgDl1EJRhNYtjVxvkWjf3EjnogjZZN6TxXwzoxbZ2nCC9J8EqGpf+1pK+tmU+fBwvzOI2HGGYfJr7kGRTpfGAl2/ZERR12hiswwI5IiF1OYJYjkJTmBYDa+5NCXreehen+68F80ePQIzHVxPe2yGgobsYd+fpMuyWx9JRHG16k/eSBe/lLW7EeJRkoZsbLr66+oVlIbBSV+QdUG8M2fOFyBsUa+Bm18Z6lKgMp1lBzQz1ZQhelykdazs9Yb1PI3TTl9Z2eBqiXX1LZ7+wTJe+b0l5peYrmO1t6tJkhM7YZlRK1IyydLPoOsmvX3wZv5F1K17Jqa1U+PEGlMYc6NtJoPF51V9/r787UaQVDgz2Qty5Bv7YFjxX3S5yIHIJ9m6DL2/oicUOv7kD4oyRhzeneughxBHfTWGAVUEV7m7QnHXJeGB4YQD7gVXthqA17twqlvTPFTO9VLVI6R0Ns3kKToQgh/OUP0iLd4r01RDl9073CqBB8zs+c95FLf3yTuOU8TOrN7WX60XSVSLY2HxNbrnKYp+HxpT7VTSh84yOF0+U9/F7YOSe3WCagZsXOZ6e2P/ks1Be/AhE9sXo9UAIhMOxdxYWXydy0hiycDcjcPPtaYn5sSpvQHiitQiYNLGMtQmkuY9csf7JsZojl3LhgbWvBy3f3Wt0CLtudn9JpJJH6ikaRnIuI5elauj0pF8HF0yW2T1BMYyJAGivL/36OKnjAbOPMI/orNk13jMhKA/O29cMIQZdLmW+WojHgnzW/HVQefdSPlXL8H1MbwBlq0c3FKn179NJcIfYqBJsoNLb+ikYNH5EemONViZ5nLuS0itIwyntaLrpwUI+pMTr+imQAjsbVvRkhCUHP5uZxXAVGP8ttKIqYEulh21pLi4Wxa9/2cjcSCPm5EXDInUJFu8uoPwDbqV11/bCd2UZ6D8kZ6hsjHOJzM+IdP2PH8rz41v76gKkL9IICX4hJP7WKu7l4MEORXqbG0lpfcFydSP5Yi12gC9B+WYPUJqbvSqpjaT8dLyLHh2wrvToFmdQKYZvru9uTyfk4jT8fzXtLOsnnsYcUozbHCdwEzFYQQJOzvgxlIcptQbOXgNNOS9/9G0o50R5+HFWENG+MvCTT11BIqz7i+c7RrEwm4dXZYU6e+OVQ1vX3vlqoRen6tOLy0HOUKAqV2ouxnBYCn4Bt88WwZkQXwx9alQerqVdj/Dx0alCmjgMejFt3SFHI3VuPLS2l4lGitJ3iPyErQy45DDKxeJSFxAxJ1R6yMbqEHnbQxIdSO+a0cJxBWrQpKBB/OYtNIRQ4Eauc/U22uqD1CD0Wls/fB9uPbdLrlgVVWQuVL9Wc6wfnGNdCkukTVJWEDmx/5rXkG8vXUzoZf4EMRaQvkc8KecwIHe5vVe+RVwQWvBQstZdmew/ZUJrUDrxEWhnr19prLpmo2kDjm//85U5maqM5s+pKnmGTqy+50ZLBhdE0lWtxeavKrlY9e7C+A/dppHct3E2XqHB7IsssJroS0vmo/f+FhN5Cw2uYnBD1A55YyDovfgW7/xl2KQUhkLDPjf2T/IppRdONQM23LPZBokBnwwsa+y7IXWM3Kobo/lyxDpvx4Ya6qTqnAFG+tD0GTT6r4PctId8I9mSvzAd5Pc8w23ZykPdY0A2W8FGMuZJNUDcSTnPR8fIS6DcjRtyFnrjZYa/+HIQyV4GZF6b2TgsedQpPVwkUt80zhD83UAMyjEiTNoQiYriWs/axeB62Is32/UMeZF1jVwWnVexsxuHPMfR3f75ksKuxRFCVPQ5DT73XHvWQKyAbRZ0kPkdJQKWq0cerWe5JKXFax9dRQarE+l07PVnzbWmpxu6dpbTFpjWtW5P0KYXZ7Ry5cnj7GXPgAN7P3ohfgswCz3iyItRXVEWs8OQHtOJfJvoD6VdOXDjNAl/zdESWSffKI3jgJ/gEnOI4t2FWJQQMFkSI+/x7X6oRPo28pi9o3MxaD9fFtK+kSoy9WJRrcymGrEbkBAItNdEsEhZRpSBQNensymgenvyMU903DTaNJ2FHJPiqnWff86DHBD95W8BuAdLoh0vOrxLf5FDrE+04kUx6LNhlwWy+e3MuGiaCBcTlIqEeCg33TCgL6mELuDuaOorNl7lPJqJs7fAxfV/6JmmenUe19kpRdMByNwOVYHFG5PRffvKNgYN/PWD3OEYU5abcqkDPx+fEiQuS1TZHmmI4ErpmO3MI7N7VRv3lcoF8mqunXSN6zdSkE0vCFURtlycc23aBPXitlQEYTTMr1BryCOt9u4gniVjs9R7MWxSHc2AzejKf8sKrojiZr21sYV9OBGuJmE15yxnV+XbkOQRgociAcNwN0E5lRVNi8v1R57+wkbNAN+NhJtr19bpyMRSYS5vTn6smiULVAAPe8WL596v6dKosrEyCLY5B1X5sQyooNQ4evkTl9yfT+NQMywWzrdhelF0Sy2FLl9mkC+CgiPLcruCSJQ64UETIs/AM81X2HtfAb6rc+LH0HzniJ4BEK5J3K/lLGZduTF2O6PIYt4Ko+Pi8I6ulyNUW6X42WShw776GxFBzNxAuotD14waU29l1dvnafu5qfTt8Vvgq9VQgosB07PtFRRZQ/SluRlarAnUbr05jPK9CKBSsHzpU0vJaE2VduWCDMzWNjIXqcsGndekDW358O132HyeDsERcnYxYzfVfOUsP1dyv3uK7uJUN9HZmaNN0GK2OskU8WN954NjsSEN8LGMYQfRa9oI9zB7+lIAeKzz+Cn3B/fDIwbji5nCfbikHiVnLdTI7BVle7nRxal6p6zaF8OjdrDAYmAijFHu2dn3oxG8qIgdNougWesgcBon99kKkPPFHrHQ5OPqotakoU7QejLXwuKgrx7ykeHFK49mGb0LnBHS3PrZE5dYYbvjDY6W9e6/fNO+ewJJSsgODTOMXJQ48zJcAHtLjloHsIHIgAE9usWLfd6NOjkf6Ln+pG1u0sqhLGy7/6pDZLLkI12gww3/53/8OOX8SUD3cpPyXBWzg7kRUVK9CuTCPdocjMfDyijT+kayC+fyF0eLM6MKY8SwWHLrcnwh/XcvVNHisII05VDgGiB5d58qLIiTZIvrOgLLNgb2GcZiu3pWiD//ZTOutqxGF6Q+stE2n1gQB9FpH8j3Rkbhw1C2ETEw1D4TNK32hYUFk3eGpLhfHu+tvkEWfDtYvxBOAMZnuFKXFTI++kycf3pVykQNSpBUWXlqGWhvdVsSrFd/Is+WdJCVoa/DgWOaeyVukratqZ3DnTjd9ON6goMyDKnb4qY6paXASGgX+GIb/vbSAwx7TB/CJ1Wg7WflmLPczq+a5hK0OdjyB4KxpZt79dP5mqrMyjxdKtQxWG77h8vXpuAj657KWXX5b5/IZoFlDfc22niMrXWJT2MeZHeNUij5LD/6yMRo1to6/zkxcLVsUIUYISLXccuiq0FLfXkdGIq6uJBcAVg3/qK7m5j8cmplUcTwcPlUI7+Jd36R3slFroPcCspEMBhAx4icIIH6rcWEAFcZTMDxCy4Y0UxU//aJV+q47Mhp3t4d03GILKedIRyJZvTV0W4HwwA1/FnSv4L4neWZSQizBZ2pMa+XM3+dhBWnF27pIsQLaAlcDrbCpLsAvfqSVynUF7XIuZmV40LWNRhhNAbNWhJiJzq0GgroTjCUtqLXTLQVeRIjKyzV2wz3Oq9YHXS6kdtBi9nXPJTeTmvvP6UZVCw9DFwF6j6ftCNwnCw8sZ6MrwSp1DUAvecQawD46p8nHsCT3vpFZbpXQnl3446N//qwEMH6St1Gra+VzsiLEfX+BcxWk18XqTFXPdvXml7t1sgGfBFlp3DE1VtwlqY8504SxsdTd3arxeVVXeh73g5ZKHN2frY8ERmmycz2R+0Gf/O528Nzptnzxdmup62hGzCdyNzziQIlg2wc4c2h8WlYjMSgTN0sOtpfqVEqgaMYV4cwydFKlQ7Me33Nt7pDFoNUtqtPy5F1Nj9w+FqMYVW+V61NonLiMY/8w4HD+TwP/RqRfYGcwfnT9pYRti2f/Lc6WgvquvCw4WOf4nbHj8ZafnZ/ZPp0P5t73RSmH5uhaQVGcGEaoDwYcXS5KkDk6FPh0kIYeXODsodcArHSNn532aWgS0OIVrEDqIPbl0S9J4zqyJs9ZwVuzlqo/89pNNBQsghMp4i2tyjUVKM7cIX60uH+6e7S54KpQyyEM0JMRoiM6DVzLJwTmEtuJl1WcEl3mmP+QTLdl3RBTvrVYRc5hyg45lsftKIw88fjilbXK5hToKKSTkYBaQjaNSEVsDiVS9Vrh2/Fzbk7BoSePeXVfOnrQ/yqTSldajaRXB0uAQF2FTcB2LRJePUYnzaZjaskObgj9FBgvA45dRUhm8+PqfStL13HoT+FP850i0HZa3/5LwSWl3VNtYXyEF+TVgLw44z+8X/QdnYNPNxUB5Qjf4zNqfaj/6PLxXz64QaXRw/EXHdjhgjtH+eP7pNXwpcDMFe2MVKxr5nj49fBKiNMbEbJPh+AIdbgVbCeMvG12dT95PuoYG0tfDwSy/rDw8bQKHZs0E2pb0+HtQ7z5eZWHLvzYp25GdLuBSec+xGorfUxA0hWHncNBEPKchq5iwsz70W843Ox3W++dV0RCxoXn5F6OzPX48S00KOYJu6ghzQE3RmMMUOGSGWmyyLSOQGqTqW42bzxp1zqP7FEBbB5X1pZvnm55R9X2P5V84Z5yNuWwYHOs6RYvLvLbtmM3Vsl0mgTNy/LJ9N52tV8VBbVlJdLwpfYbFD4+KF3E3hjZ4q+Wtl7CbgVcqmen+PQ7vPUqA3vyLFwITzDSEsF6o8XUzv/iOcrnr4IaxfF0BdpTsaz19xewsBha5POZ30OxlEWz7mY17/zmUI4Oy2KJZasOfAj17M5HjdWn3D6s3a9H1BVsVcjekA+FvaMSUDnGaoXWFMeCVvFw3MH98SxZTv4bF5/HB+uOI/3+o1O5Gnd6x1vvtD48xDf7iwW40frvDD4oTPmCyta70JPkCbh+VCebpifNK8fMtx4Le/TPV5JXu5vc0sHMDnnd+k83Njmt9pC4ltN6HMgz0V1Dh3xxaFSSJrmnLCQMMqO8V6em+iS2+9ctjK+MaLppR48i+5zFRvbeADowxOHbiy1oc9YJxfrIvzeagggD0BuYsUFViqnSVve97a9+4JgvuDmRz1PfDhO9m41GMvmmz5zHR4h/zIHBgixE8IJXfkw/JFLI9m2GAD20lPds78gxS3sTTEU+vUBls3RTpuiHlXcWfGCEBNqAjdQQvRqn37VtPqvRY6NMzsHmGAXZmSuo0sHFiO0CpyV5/BcFtMj5vwzPpDFrCsJ9pYXp0yBd3WIPv77Ysd/eg7Wt8f7sz/0D6eLXMK5Nw6Gj8QkL7neb9m3pIZdXwQ4byPyq938RMnIza5YBDa9aFLuIsqvrnh2qgjOZePJZWXoQQ93R7H4oJd3SikcKrGYcRTd8XnhGg7HOGXMVLzWn9atkdqT5Ly4kmz44RBUJEpw8KwWI8rDizOsDpw/UaS/0cWiqNgwvlTieZF+VrWkekQw3GOFgUfzTqeovqSfGF6xP7NTgJFGa6+6nehcfXnjLCmR56fkGmfma+EuH81LrPkh4nM3974+xzdMtgBcurNDiwtf5Dkh82jHR8TxD5/hovuUFtl3f9CJyTVjQejrzK2ous0vR+QmNwuLSrw8+KNWhILu2TxU+GIh7ZKSAFQA7gLyw7Arzq1MjR605FeM29a4rJYv51Px1huAvjlJbCgzNSaj6ibGWEVKuKWyt5Nully8WHrdtjM5MfwBgcDqGK4P1NSPiHM+5ww/oZB+QldzzQ32Q4RsRPAtllABtKd9yNxYCiFhg8K4jwxzd2CCrMd5JZi8eErdLAQ1WyidCp2q3MNTrSL2CwX8SiQF7PcoYd3HfgfyZHH57MLKmB/N18eKZKX947ybADSrJbUGa14682WPE33i6PfinAv/ruXkLmztri7ZlHTuNiGMWTZ+kFKaqR+mFVFkr9TZuFKA6NoqEWlVMJIazu/6PD9IpbSBnSWiZLNNyiERxHLbT87R/J4M8aepqUH2tRX5bOseMYgHly/YE1weyE8SNs9XmHLO5mEuqmi9FlBaeE/88M+tLgrGkZ5PBtUR2ehAPz2/edALLwK3EltH9dUd7XvBPPtN3AF9ley6kxM/fXQjV+adja5lZAXuLTA9QXnRp0urs5emjpeyEXEBoLEjG/2gaJT3C+3B50Fft0lm+WLFnLZiEa4dDnPS3W6l291k7rrRaDMapTZ+Rmr8+ph/nGJjbG1dxuDCBuCnDPPJcV1dGHzwop8mfwO/46//eJdniJsXMvQLWOPBvC2BciDVFhYebrveSfkrfm4WRia6vczpJgiC79dynKgr6/ijEC4rhOHpjV7Tb9tm9iQi6jsrdHjo64Rprj8GYrNoou4kZn5ZQGcQydF8S7A/MvE4PfO05vItXc5ORxqyoGDTQUiAzk0vHOWvV7RMS/MszxneXajDF5MvabIWtAaGGrcVYMAycLZy7iT4V4hGXDC9F7E0q728LtQomka5aozeZ7CMP2ILhn+rEeHAk/I+R22aaJyMtc3kmTA4lvRFi4N55vgTfMN46L+18NzPRh8wPmcOU3y1impgFuFnuM5BjWI04xsNR8nPto1GK1e2jj7BPEvEdLWdr+W2fYbqNcX68YYhD1ffHGCIDk4vn6Y0lKuEcWtkayAnz4v102e2491ShL9AULrGrq9foMU3m9lOzbGHM01XXh90fBubEHmNUPerNr57mZF7ixd8Z12w07m5uSGSmKgo2ogeDULc7JtrEANtKXNk2Mp3W49HPTIIHdI/fmX6a0wBtDNz5cU3m4ppTJ+r9PZTUIMTy1z8CCU+uaA/5+/svxHRBd6aIZwSh8lxMLFuDfanrZVaCFhIR8fO1yrD2dBhEmPIfivtX+rekL31ytYdkkzYAxZ+netJPHFqQT5Mq/bODn70y//J/KuOp2v66xPXXdjo/FmlZkOcV+gfnI/fmLFdrFr5DZZhtmDiksy31V1kz3cbC6ZY7L0CnXj0AX6WUD1+Y7GFM8S1z13l7J5YnzJ/cfRWPSiue2DDbdlpw0NYNbVuD9ucjC49qM6IqucrwYUlizkIagkZDdc4RQjhWxvbDfvUBqbCVeeX/5UxEAdkS0kB7ew9jTFph9mhgVzdQf8n7kw+yyMkFo+Qcy8mCk7cP0FUTzCrAP0IELaH6Vefr/TnvdxJKtvFVpwf5+LF+qTnJUe/VekczCRzFJ1XOyfglJyf1zCjCBz3za86m2rbrfxcK3OO0r1/BYbxfFnRYmzbEKXcUnjuKu+12jXry78OmU03SXpOqfToPue3HvzMUBtgNS3ipNPG6yYrD80vORcjQ7jYFUZIHPrUqxIXZhwMW41FPeKPpxxqLtjgymeE0mQLWrOxuL1lVTDo/+N4Sjcot231vGVr15OWZcQf3+bH/vNt9FHqBwdN49zklYjEWpqj9SKjtijygBkK/fi55XxWDmC1ZNf/zDJjoa99+3DpgJOAn7b2V8FZpXuGxOMNGTYzQd4XLMaMuMk3jy9+JMhyhbyXLIYmRkNTiK6cBuot64tL/udTkm4ONEUuRTSe0VkqVRy4qGx2F2O/YqTumul/2qgMURfzfp2JfEcPSISxd+LwbbllaBJbM4D6UGeONFkNfnI8q/E40veC3tGNtL0GOXe0ASvdusVi2cPoPcS50gaBlNGq+6/gjXZtpfvgEH77X8zr5UFuQOabn+PaNYIO4fCvdC2seJXPIz2SvhlHOosVgj4Ohp18MekUL06J2gFi7M5T6Xe6kP8vLZufnGJ+8l3/fHxqYaDeV+zi3PLTsgQ+gbTRuhAwLz/jtAtrTrujbMyBd5RF7CbghREwRo25V0CvOfIO8+bQGg9v/+yuNLtrXQDZad7mo31ciI2x3ZsQwo5z5Lof/w83AHpc3RcRyFoq+PwgrZDj7Fe5ydv//sXf7StNgwHFE6AS9LklYUb8wQYDknB6cGEJ6PYueopEiJThcvA/61Jhe3v4CZ7c1IHz43ltZG908rdTfA0vyllLAYfJ2nCcANaLAXk99TwNzDwd2p7OTHSlXg7SL7mNUbD5//l/tEBfaMta/X+3Zfa4NNiTE6oMqhy2H2s2Fz+EsYqGJO0nBQNxrN9PH8r8gOWO124Yzyg+zM7K47NK9MvrcA6iPFyc6D5xHe6K2Sj+7FwZE4VfmIfhVHxfvUtvQuP49Nb5AT/Kk8z+GxdV+Wb3I+fhFjcML8mLwfRypF90+p9jF+BV67DP17cIPxURrKZPLJUsFdKQcvbhNWIfXThTZeF6y3uxeLAuDY4PfWticI9uICH+Kwdlz3R947lZQwC8uzdvEsT17MSQgTZ7pa42w/zYdRaXd8m1symvVHGAnyHu9MG4GZe8TTaHqmhC1nNUzwNxliL9PRizY/WXjzQXw2T6SZWyDK+mMLrCXJL592bFevEdAm/8LrYP1jr+6e9R9prF/YW3dn7Z7i9s0Ngs6Vr+/BFEuXen7mdbBmrzLfY/+GVs+LcGJDgia31er3pgfzQGXXw/RHZL9GQfAoTZmtXP5i1aih9nup9gtHMZentH9yJqYCUVYu94JjjsH9RMIN5WgteXRZuMPAnxLbKzJZLeoHDxd0X81ttZ24rQyz60P8OgzsTGzt+K1RpOrAPUiukWS9F+TD7prlzvCB7wqL0oxiOXvvIJJ35y3eQDGsyajGf+sppzg6imn2DiNhFtLao2tjb1dTf+cbxVFfjr81kivq5R2HWF2uyvt0Gwj+Dpz1gDM1GPKOk7E2hmHFKfiXm//JTPv73j/uDWmWa1Cj8BYOLG8UcjvOIAOEy6Cie7QmK6PD3N9ulSc3hXvwBI4z0/hfR4tKNu8iY/t6prn44+QVinTtiwDuy6eZnD9oxwxWWYkvphq3p6mdq1l2zZv403/rOTFaS76s9NbzzGhtqge/MUMysEdzY3127UdGoI56tdXqw4Lnd2hr3uzLKy0mV9+x0IgdDf5iy3/S39YWKO6j8x+T5Hd3xqy+ds0OuFS4iLe2+P9NzuqGf/+k77rlY23r7iAQZXBQH36ylpHFnrEi5t4VZResSqTcV6SPA9a//GdRSIinI45T9+n/OL11bja3Vvl9Z1QM80KRpLWUDa3m8SPI7ZsGCIFsxP7hi8GCyByfTaclJELrHw26QVpNSnVITghPVlJQInWkXHPvNcXMfPAE1RLHhx8UlEa/xcOPZ6ujbsG6lc/3ZFBWAVeuJ8I1Gr0dVMwTOOYzbmMQrrMYvepGh9UUgrWqx18Usv/ahWZ8fTz3biw5xWnOH+bM/wv8SP3Jge+Y8SjQHb5yd8UomKlJM5lOHUj+B8Zev0Z7HDy1nxqjH9Xu2CHtfyTxLH/H4K4tBaXfDyVruJPd7PepLO97zGqy3yVnBcDl3Ne2EXuS9tNAbnZz13d1dfIZsLNeBhMbyvoipO4yYdhHtO9sirdlzFe2/t735h2NWrtNz0Hld9EGwRu3ZyCpU1N4FWF1lNb0DoMEfHVc4IoH1zgMcgFrOjSeRWRZJbdrKGXNzrB24B+PsnVqvshPbXdvgvPHDelX0GUHgFs+y96+y3VtTYDORmYd0Fh5pQMk+snxxgsE1ydnoPxmExOsyu2SZDgfS/uI05/riTnJMLR4Dth/B1T/xhi9clSRG6XbHUs1zwM2zGEGhX4+7RlZJ5Qo1ukxTQHA3MvT8IjH1pFNtKcNpXoG4OtPGDkBqYpv/gW0OnOhtGsvtcgaZO8uLRbY2TD4C9q9XmxhGI6ZYj8G+HVklgxXr6Uv4mcZp09/P8RX8tC+mWHNLFLufxTvAZnlRXxzHA1vkDp/5iTvzVjoWX9y/wen5mmutm49UFvCbl8vRV4kWJXi5Ad8oDfS/a6vAU0oQ8YDZiVHDooe5EUzSyVMIk8LylqoCVY7yf1/5nL2q1dZX8mH0t+Hk6uY4T2b1ZlHgYN0EH5N8l8TaqCzjbNqEtmmLTlg6RtMRa4nIgNsz4OLgxEUehneyq0M6SwbYH/xR2CDh/xF0M8kx3qttAPS1IKwLmcZf9gsjFt+tm++LjjKfF9/HtpeGlmYDQXHmZb6WbsPa+qvQhfsoVO7L+l0L/EfSsiop+rnil6Q5JBlfUFhXGxRDv2NXXq/PpV4OMEBnWgpwnI3PD+ZT/2e4829kpuYQ/SsZvyUQ9jE4ELxhtLAeN5Onchqgg2Golz2JLqLZUXV7zuyUha9MhLIVqL6mv3adLepQpameoC/ml+gMeHrbxRoyh/BB8Nkj1iq2Zsahfq9v14GutOSrxpGvjfbh1tlgN5Noox53IYJ9y55/Dn/1PLDiRUd1v+hvr+X/qLrA0rw8OoNP2lWB8rddalT8b+I/Pb7Kz33odWp3AzN8l+4hWp1Vs/tP8wDvWtI39OJTMxQeYWVgT6RYlVHLNMg3w+vgGuoXCWULHN38PVU0wfhziKwVYO5OzEgOK46fNYzj0VGALUqzNpeub7fUda6/EGzk5eC7hPtiaXbxiMV/24QbPYqa3OW9OAOebU/TirE93n5EZxFtEI/B2hdoAwcrbu+40MTfljsTql08mpoijySJosusnS6nOb72d+/pQc+44x6gjCkiPDPjgzrN3UyinOFiGltvQ0HH65IbEx/BqLapnL9CL005t0adwvA74kTgZu5MMPMADp/spX7UtQtL0VlmzDtk3FfQKCvEAqRzx4M5VBhPQLJny51BxhSHn2yTN1jpKBkwz+GfNcQEpvBhFJHzBZsBhbR70MiZfLIzbIh8tfcf6f1aclYF74X8cO4eG5k2B54OaxcNEL5XlK/SxbC6wuaGQr9FGGJxU/xt94DdezWb65kCrQub8SQ/DJ5N0PCK/zdFHEsknouGt089AND2c81TeCP43bqHKPTg7PzFdiMiq4BSHhsu6foI6Ap0ai2tDf3LS17PLKSZl2R3vh8OxWJ8TGo/9xufswb/YZ+MZfPNtsIyzuX68h8W4EIVcPGJnj4zLyASf7771BqnP3pHTb4VuU4s0X5i55IqxAMXZKaj5JMQ5veUpkTYWlL4L78qHw/kkrh4jxh1+X4nvDCkgOPzscL+0L6UJ6t06rkWkjKF+PfN7lCAYC5vO3LX2f+2Co9/f8Y7KEZ9YdnV2dVERovajS9cO0YyyI1QY8H2Q8RsJx+fZ3jVTUN9d21uB8sxeszLBd3U4nsiOwj7qsp2X4/S0txCbzkpBd1HqN3qr9Jpe5eifHzpwVvx7Z7TdfQ05f5uhWYAD5R8Q6DNTa2VYWdI3I1/naPazp0/tisfdqjjyXjrDiq8Wk/l5oyGt2Ory4dTEq9G5tKvsgmz4Drr6fHTJFDm3L9a4AEopmXSuz9EiTZCSnBjku6WI6uJJLfbZrRZVHnF2+qTfSoLGGEb9PbYA5yo/ubrxp/+bjynLYTQJvl18PEPOyo3RHFb/2SswmvQpD6tMe1rXw3ofTqlscn1sf/LYfwT1Rb+AZtEqebFFtpjdTF8U9Z4vBrey6IE1iB72vxbF1kHrEk7vyLfXL+JxGScK7V266nmy9GL0snAuv1/yAPHPsLk5uFa2SbWZOr/4Ozrq6t3cjXXQlwGuUjdeRm24fpA597fS9YsIeX9qrXhEyAeHfv1S+Xa9nKmmwUTozef2wvwoh5O+jvIGLoOuLzjvW5g3X95Rrhga+aeUvBXEfU7OtiifOwNGvZJYLNz4n2PxH6yvHLkDYbh7GGZ80mrLgJ6HFPeLhQnTpZRCUHef9Cx5ggwtUi6+Bkf61D+xzl/2t28sOtmlNJvO9AuIAeky8p8pUd/bcOfAoFlaTpBGPi067VefZFzc6JuZVrhctDvx6sL6IB4xE+NDHp4Pc5HOJ6Btkjtr14Sqpe9igCgn82S5fmvS5g2Db46TuUa2lAwBQFjTkpRQ0S7XUaofh+OvJlsk76z24RaWxOPPMzE+fefPgXguhjg0fkC645rIpV7tnhyl0Iehu/GHQwCIHzgWMEVBcIkv7eeQeD/d1zmKx3kFUatIj1VMyrxPIcxmxeriqH44FNE/ltOJOL1cZ0mPPoptbNiA2RXyw07x7aL6s1atW/kUwOEySZdMdjHqtoQSj75rHQ7XGo634W1fWVTZsh9wbhNCJ1PT4w6RmYTw9dmnTrw0ldX3ytLCfci8VaDHZ9cgZz/m34R8fLJ7yih7NLvsEhnJ4pmPL8xxfjBBqh+tWwVy+UV2O09x9/WBwJwURV58Bz+n2C5Mw4rSyvgBOHod6I9qI+OfjUckA67yG48IjPlqvH/MXqGV0QB9SE4yQqU079AsXcLPKZWJZava2DYkqoFvoyApNBNdFTIr41nN2H6cDsX7y/J+2Gf/LBnBx6sXsoswnXKtvOvUnzxJCsIBw0vUTfXDqmq2YYZ84Sbq88b4NjQc6xgHVLBm9UqxT0CcXcXBFhsjv35aPseFUR9nAo1ENlq5cJ5sF0wL4sWxFEIWj0a1syiYcT25S+PTnv0PkV71azOryqQNoq90DJop87m+uKEW53C/HQXaWJ2rwRPIg23myKIa1/riHGNnTfeQae2g6ZFs6PH4H1/zgf5mINyD5WLZG4sXkkyqm+F6L243mZ96QOHkFn9P8zxf6rXhJoiem+Pj1pdGG3elcLlt1brXje0gylNiA9n+tXMir382N/GuMIdh26Tmohi8jkCCM5keeTcdjLTRowqbPLQ2QvoGK70iD9PTlXSxKgUSCMURSBEeEdr1IxnP4zOAbhMFx2tnzv5D7VhbbkbY4+B+XeOWRJe3Ug0E8DBgoYan00H7FSFDSC2+rxOHfTgTYMZ8uy5CxlE7SDIZAa95R3fudfObAWNFY7IAU2d4d8VszgbwZkUDXT4b667uyd6FUHLPV/w5MnY7EnTsYwde4qxFiZ58EJMQz8OPJ/yvYB3OGafrP06Ga6bsT/b2WVoY9lLL4HBVvqQR+JB7hhpcqR7+cT5jPSlb1HZZVDURDn1G3PFwSN8G9uptPIYYgpU0u3Ov7enLl756VkDU1Ztx8SN6XAtmTPOX0YB3HI/8wxm3RJ4/32QnmU+1KTllm9Ok//NAfI/vAm4F3wHR9O0a0X4Y47IeJf6YR3aiYY1i6+3r62D4fj119B/dj/ny/uFdJqI3B7rFAsHW5E2r4zFNF16M8vloeSk3vOOOt8NhuXa9YB53tncRzaf+uhssKWW75eIOIl/eSWwFu4cVUw51UjiSEwFw8XKTpLdqHBFLYzd6e8qM16hHYFVTKJksn2P1E3zrGX+ALDkc80iH+fQZ9q03zpt7bXivD5GfDrnZLOkWq28Xu3hRt5uacem8y6McELERGodlvKooNMuI2FguMQPlDmh5/UhOOZG8066+hqTpuf7pHw4xDuDyhlkdZ4bfqh1eXdLiOx/TgV0szotlECqCw64dR9pZKTpDr+7XV4Fqlhkz7DcHqJ+bavZCxF2zL6XnM03T221XSqMC4q4150kM6qffhzu4Km71FyeDqTcr6c6nclm9+Gy37Jb/4MlfIC7TlsAL7YNRc8LjLgLxMOTDRBeYkvEe9rwnH36hB3K1gW9O7BskoDg9y3V0Q/5GHTbOifMRGb1POB/dqLZCIj+NzLZ3NobTr2gNP3pU4lPZObjd12SSIl90phPoErzx9SUIX4nf3O+cHFJUx/c8bKzcQMLpT07H+nSc3W6ZghaLeLECuLFLIdb3IWx6vD315V/QX6xxy/+u0G2ECboEpej3NI+LfFtumHuHWQweuno5+9ZX3451a7vtJ4ExeXnjVb3LziXQ2A9SeNPnVd7YuOTzDa08BmSH0boC6PcC4WeTDPI1eWtsv0cZCj27lr4MiU0NPHTm0M0hIRcLIt9G62hf9xAzIx3tLblfKEEzW214CjA6B1azgBUXkB+C+SuRr/U3G9+glBjEt7MsMTyZWAM1xxXj8814OGSeKduzGyqlxoXnyco9zKqPqRu/X/hLg/pI6g8sD/pOu8NMbpy3cpa4/ELvsHO24Y3SWrYkwQizdHB44tMAjtnOhq7iWhrK7uA2vJYKQ+P94HTBiFVxuahRNlcJGVQGVNN+z8AursPf+HmQ2SkwTzl/dPJiLKZYC0CvMzaXnhuEQpes/S0rY0BeTPXCVELselt5xC9mWXJF5/XDI//ZHv6nzBK+alsM7W2d3yAJ1uknjOs52SCj6sNi/242cGIipINXHUXbZ3DK0CsDE/OdHb/6lC6BNt0M3DyUidefH+jNfr443s/j/Y67JPUhh085IPZHf9J3f5OOsdgnC8VchSdylGwBgtqI2EsWc1+4yMvYBfJ8dLPkmL++A4c1sU5at5fozLE/68YvReP5QRvEfxMzFPFRnG3wZ8/gKqSPbq2aAnOh83bv/ElY4+xGOW++IPiljBbGuv/2VCj/QgcZ/wwv3axNAV0+OODSZHtpoIfEvxYEjaH6s0OdZzMptmyS3PU4tFlak/H8Wrtpg/E9bAgPD0qB/OfrDfVzugqJqkh+yuV0docrJWxC+AlxLxCEdP8PN+lMCWbRcbSTP8nfQNlLQaWemXpOreoPVJxhqsBrr1F13833Kiwk6uP0Bb3GaY9Gxa15fDEid8npwsM+EFnwcBkWVJb6/QQC6hzG8Fw5NJpWbmsEm1bd06DL+T50EcqPmX0A9C2gk7i2s7FV2POVa7F0nILFh9WCQvHsZVkO9loccll7BTWjsO3c2kzwpCk/h0OV/1sPKZ/LO7+hfop/Zc6vOkOMq7PjF4fyb2P1NVb70oqPw7MY18M5oyYpx2Yg29AIiSPO/I0j3vPjRry8xM2nem0MoP66c0F/fAm3QgmgVcMlsryyw/T8cW5zdR167UHgPyX0rebukRDLAdy36jlwYvqC6DJD5zwWU1Wd/FZzcboysN1dowuNAEwPUwOZgTGZl0LzTOys0THnpaJiC9PExJhMLEPs34JIlFOVwLaapClSCRXrmX6yXGnnrxiiHDPhYIv4r/ar/iuVpnV2AiWpXVfD90cwdaTPXRmD/cT/tHvyR6cHN6Of8vEpMrB0wovC2SNYpFMo52mzotUIhEUWX5LTQidy7w3ULzn9C9R+G38z896jbobVavD1+nE61r4/Uk/E4vJPt5th6xKeg+5ANOScSS/Ti17BdB5FDlsYZL0Pa772j2fIszh3MaCoJlbMdmlsIB5/p9rFAP6RRiDSWQgpwcd59ZVv0sWd7cke0WECejj+zSdrvXl7Mz2UVdgLwhvv7HHs/z1esD9dvf7Df84oqucDQOX3fCMearP09SW0NXOwxi8Sr2YE/Yh7P/W12/Or6cL/TAXqmDy/uMbPON7pUad3I0oOOJtbcyrd6N4GOd5dEc0tXN5XIVcVTn8sz72NVtWdnAuWPpMgtf8C2PHFxO7Z2KW+NwQynMGYc9BVvbHAAMV/038iP2RyPmDbPvOWhe716nV8G2m8xWv8qAyhzbvZX7xJRWLHf1erYxei98PEzeiG9tRJRa+3xtxayuhBNXdaqY+9ENNYRarmzZ0fkUkQpgPCrJXaosiXSMHG8lb3mYSU+zfTwNFv6gE3OtGM7hjW4oC5uNssF98yR0fHFN/sJPfLJ2OqZBbOOHQ1Th3YL1RF3iXrhxz4NdTjEqTw2uu5VhT3gOPly7hpIRpzC35QTs6s0ayJTeYnNr1Qu06dTn0W1/vtItlGpu5jTifNBI2m9Oikf8Aizm42Zn65h93hxfYyHgNIOoUVj4OjO+E+zUEGkD+UX2ua1t1xZIXxuKrbkRURMe6tjSPbfFVrfX5yGGVTs2U7AccgBlyf0R4ZL+NUp//2C0NsBK2mi2GcieUEsP5tWBdUG5R0zqE8/njmsA1Q/JOnPb2yXQnDb2z/4QWEQRCfY+vR5lhQ0yvHsJ9PX5yb4cXFJAmRm45/sZC+Mgmzb3ryrTxRR/peRY/fGru3crJxri+RrjTRaX2dM7bPHagmcmnm55JdNDkMo1j4DDDZQIGt8LW244JBPz/iokOs6j9WHlVDL7HdDHFmY9C4zyGDAuJ6deOzMTJwjUs4Ot1YD+OWwhR3SysQ4WyzLOQbt5vabzcWq2PO62Z6Dj4c6T6ltXgYkUwxPbvnEFWV+BDaGVJXwej4RyigVGHNFPvBtW8kkExAbwV0yNPWUnHomKffcmvCeAgVCv6rbe0g1OeQ2QsjCK3aLE3rxYNMpMPXmii42hgQ/ozvwZbV4tl6+HLKY875fI45x3NxqP6oXqw/dMX05Azk2+w4cLRIXty3eL4lzEaccDwfd/kne4IQOShvh7Sf+fWJie4qoJpvdRfZYsnwYMo3f0+qYv2dXg7PdrVs5IGn06lLk188npWdbTgPyMV35hg+8W1oCtw4tH3P6Td2RSp/POOXT5vbJzLY54ZgGQ1/fcbvahN/yxXM6vBWa1znp3gWdv4lJR6y5nsdu25cTN77nHWx7sI5302Z77p9m509yXsLcgHeHSn6RJz/A2ev8sUt0lhPv3dujorXQIQxfq957uqCjQuQ36MYlhLfVXEbg5xIPIbzBCBHCJTZ51tvwnxXjj7IuLugMPh1K2+1Wla+dZHHT0sF6Sx2OLgVEI0Mt95GohObm10yTa/4mlA7hOFf2diAYbYKF+EH/8qjibYqTqmbeyRK35yEoSCcRRhvhowe3/EIp7sC2V1u5QfaWW0XLa3pF8NbZvPgUZ41Os8dgnEoY/ATo9dqdWYojaM0PDtYtRM61PzFVqGda9rLOgJA2yTkO4ecsm1OyaMzZDgw1McdGl1YjyqO7SfKSkwD78FcL9Rq6PoqILDEz0FWisWeGi77Rtia04TR1l/SxTfQcHnRZlgNoqg4Zn/jA4we6at3AjHrPOrhMIrgdMfxLmyx2d352Ub1QyZGnSul+WDgMmS4Z3M7THJtfaq/jeuDR7gNVP3X5rupaqP8Ntr/4sDVuPUpFxxtpjr79JFZe2Q9CbwzCG/s/uRX3YRfaL5n+mLbOG/IEnAj2k1XnNKw5Wir3I0K2/v2JR/I924ODD829X2WydgVaQ4ezNkmD72Z12fUJMlxTzruUE7CzGQiDCif3/5cq8JYz1B+auE/YeSlRVYM/Q69UESy87mBGXhMIiBxvxSaj6bDhRwmnKBzVTWXVs4W4FO/iApL/5cBsbw7MleWrS8vru/4Vcj+T9IgbLRV0goIoEmNDTE3NM7CZOwPe74nGqfLVaNNmIpXTbstSWbO4B5eNpw6+ULkYGprDo4zFxNyNDqW0T5Yyf1iQiXQJ4LxcbavyxN8cgMGVcO8q9cY96P41sEXZmW2zpC6SqI8Z8WOfrVafs/GPIa9MwrXy/iQtelxRj7EVpP9F6+lmAUY8fl6sY49RBz0Dvwi/+Jjxf6ABgH2w+1MNLhZB8b0nCNkm6n8v+DeBSrVtz3PM30vLEqfZlTz/JscEsdq2hDOwhx+f47pydS6esb1A0vxrJ9cdsIko39LuOWmv0Ho2T87HThG+WSKtlKVfX1t83z+Tq4eUPvacc79B5eSD+gAVnfVxUwVdj35hY0qP59MK9Tu8jE1J6flW2AyuEpReHcYtxAk8iTbxGrKLLf55WNUSQ0ivRPvQnDH34JAgxVj/pliELyto1xr4rj/CgI9ThHq2rjh9Y6ApqkBd5db5AwExy/G4PuAwhtO4OfMsts8wWjlezsta6hPJ0Ho5N7nHgvj9w3v3KGwBf6v7u5if9Plxzi6JznL2VY2q7NYKrz9QywMdQAAQABJREFUTYkFKMv5ssjOzC2pmfjysBy1w1KDD0/huhrTqD/uiZgo6nvVOuvLR8cRfcYr1OYV7ckHa6CJJNfeJGi3WUW1x0AoLGsxAnFWw4r/0SR8lfP91OIQQMYZT5Lj429jSzDO62LzI0Apro1n2GZKbn7M4YfD0POmfuswxnBoVld0M3sbbIJkXhvoBDyh3Zr50LnCBWH4uVykd/wUH/vF6jDVAR6u3FAU7cPI854A34aFCLmZcYxs/oxZHmXPLpn47IdLFxZ//40/7MNo79PWt+Cc3T/4Xcj5Uv7hevzERiI/4/AGy99NZFfr80l1lZDLyo2quHWCwvur9Met2BalmydqAJsBetXMjBHZ/2xeU2CHpCR2FWp4Kml1vVZMN5MfmWPs09EhVrdX1W4JDyaBa87GW2+OQO7aDPX+iV7T014yGlAaQrSPTQsfd92InqOqIa3Q57MNQz9+GeSOm88XD2cfbwi9ff6DwYSK36wO94DqBdE8m8HZPtltZMyw68CAejYjZ5blyaWxgJ57crCallTbHsUZQA3AXt91D5ipGuxijq1ozh16cIIwleXT4mXkt+TdjRrGEHrJ/zvLoNAW5HH2uXJmj/vZFeoszPDjW9wL/VEW2626L49M5CNIe852XR5qbv3YS/5w5/JjIN9WKJv1qOJ7i/zlbFWNc8TzVSy+gENuuRbP+s/PhfeGYNbe2eAq9Q/gR2cmV5wXx9M9fxJ+pgpq8y0fo3lg5QxmM7yqp07O4OWsJv2WT6OHUZMPjtu8jheDYRz/1LnZblV+9Odb+w+HMgYvzjbX7H7wPh7PxgZhnLOlUm6uyFJ9dFws1MTNT/yuHpXtTH7dqHSpinNTheqwELZjhbMo+tq5k92mTryOB5jIuXXsazrU86ng5J1QEYs1smly/Kf1VDzHkTvv3UyXdugCqQ+V/0aPtqUvqZFdeF0Z2v14WJmRjY+/HhTsuPvrOmfwrBzuijAImmMP3OvSeBt+/hKrzIDTz76rW9WT2S1dFe0pmx4Iu4vMIzNnjj/MKO1vtSh3hPzMg2cYtSmOpestePNiDABxsWDAPlt5lXa2Y8Mof3S9QP1noEMFDfs8mVvYIymexyMNAkPTUtL0+ngtHbAUzSQawZyYpOT2ESS6Xaw66vm/OIsFpDBbpk02W5x8CLIdsJg+cZ1Mo3B0unNlbOmk2fhiEY/cGMpRh7RHI14HQrL4gb3uXTunPz51P9sbn9f4PDj+8J5B2M9hFh97Oi0BsMY77foM2sjEWp/Onz4bjzJtxHkA8V1O3w0xHtT9OhKV+NhhIf7LMT/qf8fMtxuGvX7yObyebxPs9X8xDPs3A2YMxk9s3RGaD052U8aCijsUyAjkdCOcvZNvTBjzmMw7xSYWKnMDrMBwiiMb+koev6r0HR3FVYw31cmG8VrBGqzw1tAc5FdezHm6mQodhs8o/cQBNffKrnpKDuq0JpGdIaHzZUUQpy4sP8YsHJ1L71dKQUvE3htPyg14grurbEoFTfuNnLGlV28stWJoLopRWXZAdN9YAU/SKWE1D4P856VU5Kb5CfCQm954VGPmzx300t00guPjDlmOSnbuCfKizvlsJakXa2HuEDnllJu+/yqJVFseLa7l8kIx0Xd/r4wAefixA9ParGoMTwXwvKEzbjJ7PE79CLi7YpW0TMNnjnTyRsYUIGR4SXeXt7P+tVBmVlwaG2uaBZEYo3aLSjSj2Q8jeDh5uMPIphzlEGTqnrTrzOE1FbXTXkxPeqpKlfEHS+cze0eSk/nSWxe3MOSp7NsjCJdPqT3ZBwfC5QzsVvJsL64uLfvqPeyxs31ztY7qj3tnxvLy02ajf/uPC91HHufpRMml7GHq53I+fuIfTt5yOt5igYq34d4wpJObcZsegXvVOz+G6Tbz5s2tR/961PZqEA/g+0/B4GRzZS3EfR+QakSMyEbc5Ph2n2Wi6YIEM7XrCi8VfroAN8/Axn1HuXch9m9Okv6H+15D9WAaCfHH2cc2AW8sq44QxEZlL776HEhEilrWboY+Dmeedr2okw/6e18/JcWxrAB1vuESphzjMBJKdSUUez4qD0l5Brq7SHr0aQ9vHnIl1a86ngsZAaIO4cQKBXEbi79YPmuB6VExTYePUd7ixUzntlg8yJ7+ozPmyQLhEn+mS7uTeoQuE2upVMni4lh/cTVaTrGOh+6nzRqWJCpm8zDJ4xaAHoGp1sxthsGv+7/3My2zyvhZuASwvD6kc31O2oB1pq/O5uf4npy2HU85rqmV1D4B/y9DuIzqHtGKUlZEU42Gmj8qL3D14R7mv2QCxH82KvHKrlBxZPNZ3q5gSVv1LrfsPfvDpbANELx2CB7Hx07be86+D8py7NjPCuPPXn64MGC4vr7yB8+Tf/xGczGEb/kUE7NofJkXrZ8dyuWdZXUz6PD5CiO8ePxutMvGoVd84bnD2vMKV7CRghDFGXBX+mqAQG2orOfkWaV+GPRQFVRWm5hjb6n7q+KM+Vrb35dkJ9k/tiZWhk0kXr1zG68beu6VzYvsr5Kq/ObcC7d/pw04705L/YtMoJ8+7DI29WXhBW9rGpHq7ESeVs7JrGKhcx5SEgefU6VW1OtVahK4WfpgLSJBZnoe82OfVNb/zl5BrB5Gt1l9cebDOA8fqUsnHkZF7E1yXq2NXUqxroTPVm61455ebwvVMfFx9ENc4rmdNV94Me6qe/aYfdruxsbzQwx+vi7zBQBgNZj5J+4M33pQNz79fOzPY7SuI7Pn8ZOvuJSfvb21yW7BnRaNubn0VLsGroU2JkryOIyoMH+C7BfjsE5vZop/Ay+iJxtOAJzaHDYJg2mUL25DDHNn9cmmlmUb3vmNk8jfBpheHUbbgOSzf+dPHCDxKcanTl2d4h7XbL5jYQ9/JsX64ZYm3+BenAA//j++xxNEm7Ob300Ff7er6S62XXrDEXR3gpe/y/7Zj4qcCMg4bE+n4NP/X+Str0CZzf7iutJnr7YXX8kymq8wzykDdndFLTvPbJiWyQuMUWuNHo/WsEBdck/cdwymfmRdmFpKZ2JesdsJgIjbpjdiiQDf3WQklVGfYG+D7NeCEBnI/Dx/jE8sudM4/QlH+GyGFWA+TQO9KBB4ru92va45GsVV56SaVBBBRGl/9v71YzeyX3/55ZT9i2Od40+4WB6i2UBkTPe+YfHk8sU6GycL8faSi0P+1dsjrRyAoX/cUQmjQzNJVfpZDqOYNsQEzCEBKMASbXaMDUKwp3PyfCl+bMoeVJbpVH8iqa9OP+UG6uE21u5JAP7WluPTei4n/Z5vuW0/MZMge8IEIid44s/5JXEIJ8qIf4iL0U1KCu1muyvpCcwj3QEaQ/J4nIu3sairLxe83ppppufwDNq4bvzsdh6nV7HPn7zqH1aen/3hzoexnv5hxjVOg/mOjfYb1+wYPxlnr043GmxUo2PB0zuM03Z9AQ0DitDgowfnoHFMjodxqRrTtInD7eAY5VsQMxO8Juepo3hyzvyHZt287L9ymBY//OqQs5EZd3WkZrD++nofxflJvdjbFSNnfKCJRSDrjvS+0Q6OpMuYP6bB/x6+oL1xlCSbzvQI4CXUv4t+8gHzn0WXhT2tdzDcT7PL0wdfAJVtuQmYvN5tj+/yVWZMhnDWDOnR5pEs+rM9ChdoU+vnJrYXQiazS36HeE+XgXh3HM6LQeX8t6nwojRixHbM4ZG4G7X6jMkmF2rFm0f6t98q1EdIfVybOM7N/QSGtHwfFnmt6c2J8T6ttNUBjLLKoMkBzn0MireoHQqYcaW4/ldjaT5eFK8hqmLmhCRXHYatG/LZzmw5ra/VNiE5sLjauoyKF9iz9my2jS+eF5bnpwvBWCrjfrGb7xfnW2R9Hybs1QThbKfTrlpx9suMi4A3bF895mDmy/+pUN43dh0wLI7+F0P51Z/84bJB4Y964955XMNNLnZ60C8Oyqfcd5K+l8S4XxXSDmduAdp87x6zY4fhwnzvDMIYq3Ecn/HcI19Ok27GR+f6Fm1LW+dZnXL4h8N8cU7r6NuD1FGYj7TQSSv2lowgtrAz5Fd32tjuN+x0jwnK/SLj96JwUSF2N9KJ1bUkOvJ4Xcz3YuEmScukKs+h/GLTkvQf/4DoKzwkbtDB6JdFO+zJ3knLrDnbfX0vAqs4cXJzNgDmL7/zDcbNQeeiVNXP5ewAtgwk4+kJlB8ue2FViLe6XGb6qQaDerSmy9WRBEupkR8HEBdu4WOJjX84+tVMP9qcMkZt1MtnagE4MJwPJQxoBZqtff+e3WzSA5tTWQXzMIezjeszPD5JaYk7YJtgnlMi8cL0323L5c9nIzr3Y5v+oWK9WJO9ejLwV3CtgXbvmftFIrzyV+1wOc/3KyxXc7ZuknI426Lepl6kF9jXNdgmYuAuarqG+fCvn0Q5gq0k+nTU55mO9G1CyuFNTt+z8veC5zjb5I8T2XHFIZ9jlt7G9ven3D5+1Iv7yZOdvskNfW/zRRzX79j5Lqf8XCwZPl080BA1cq8EOk3Xy4u0ESJNScez/lTQzFVAJ4GTTp7ldE4Fpk1cNkzg6pTBrJ5+JJtkjVyQnPQ7oENmuotwfX8VnHpt8QxVvz+KoS1srGajV94QPi+s+1Zcyr11Hty3y60g/SLyP9ai2xJsE23IgbYdlwxNM/5i3cWvO2x9p650+++qERSbWEYFSN2ubGOV0rYdm86N5dLeAhVnZGgz7dRsiaLSbXzyaG7lEfB6SAkleg9s+RcFbT6uDVXyfafOQa2wVI+Q41RZZDec0v3LIC/fWza5NLeVIxoDNKwGBR1BMTyhXI/7cPq3K3s99Ib47lvtX65xz2xogVELcmbPVhez03gZzkOw/GSSZxEbPeQkT/Y9F9/btc5KU2NyGkU+qlkpNC5P5MX5rfGnf2NNn7F4Hrd8tUk5GceGYlrNjH/TK/9iWl5OjHg50TmL2dg/ucrJn2wC9YLVbZM014dZ3vkT3lPf6Bnoo03w4d0kn0wM/eJJ9vpP7li8PE/2zj94De98ff1dLCZF1cch3+RKnY3FbbSO1V/MjMQ6tn10h1FgPWra0Alvb4+b6ycXwJNJN2fBNxz+2aQE9DgzYdVkM6hvvRH/3pB4R+nLwCm60PxDvUn8Kso/CsEmdHo9hr3rzDGv4e3UV03xZTNgmwDWN6LTcomPmCKrLPY+m6RqdLk9CJxXenRzMTuycHfYVaJh6iUvLsVVHpilLBjr0U6bSStmRhW81ZEf/e9ZBfeCgGguNaZHK6btJvLjV6u0nn5uABCpbDuqHsN10RNefgpvc5hWfApi9mVaFD51W3iCvp3USr53iMdrBYw4Ow9rjqNnqNfQJ/tEcYCH+1hIA0Gn45OsjcY6PbvbeB7E89fmYsr3Y1Z7IM9fx3Cjc0z9VkcBi/0Uy6E4xtORwyef+hmdbJqbuGTfPnYM9mP/PZXctNNrdYs77myIoc0EV16ryhwDn7zx5IiGARj2jcUg0HZvyc823GE/3FHH/Tax3XWe/Hjk96lPN8NvjM8X8p+xHVbc49V6PFPGZ1eMvGfjuHw5fGXTq0D7m5zh/xjP/mYXkmwE0uRU4Okp6juedCfXqbi3IQrqjvKzGWWRFfPmEjNBv/XeekvjgeadXwtMD6TrVQR3rx064bdiuNly2TPCS3gxLna+74pdzeKPAs1KByi64Ivk3Q0++bxxxHcbya7Cr2EA41rWEur0N3v9IDMWw8yk80VnX3un87V5MM/IggupHAO9z20bBdhGMGx2srg5+PoyhODDXm9hjfdhVgZHaTVaI8wn8aXMR6FzahM6gjtlI16XZZTxGIpt0i9u0CJ008m2UTOAu7aihXXler4scZ+UyKFwa+WsF3eOABZLhvUSX4QPku+jmMwjPhZToh0+AjsvGnANl+Vn3rNYDr/P9jNdPMa/HMbYeN7aGOwmYz2YmUc9uwns7IKnL89hW0kMdn644wH49NoY29uAGqt//ACnn7+3WT372Y3v9/5ief6/eHwx6OfiS5ds8X6x5uTzuAiEbuMw1xfzbIbdWLRyW3L9ydBjvPaTfTAIaM9OsJIXQ8rs6yEf3lG9H7qtnrP30y4W6Ys7az+P/H0ZZSLllhn/vyqLMl5viQy5sb8W+m+3kb7LJH7b3SkaKl/2+u56a5IzptGEMwwE/sky3NQv6Kq7K8edVrdeEdkSrlVK/C4T8b69v89CF2Z5CdbuIzKDNjxjtHFCXZqeDe9t3+tnKsU4xNKIe943LkYwFctvusNow3MV1GjjSmA/lHIQbjFrniXXZ0xyyIKgODZK/0LNx1t5QsVMecYJJkXyfKUcf/EskgHCPCyDh/1suAaXEFr1AxwOkQTIrI2V+blJpks9jqCPw7ztG22deo6K+zt6gu/0BvpxMCY/s9xrqIo5eSkr4dJM3nTjr+lRsQg+eWmr749/8pdnsgVcJAhkVKmuzajhD/zTHc6p0+aWXOeNo7mP5IkU4Dgn91J4OP18Nz775zv5uB/Gt+766gueT2xfm5aSvh4GLrqfDTP9G3smjn7s89TunRl+7OLg8OGibA7CKORhPsqW11emOpVxCbmnnfoe6HUyv6aEUYRvPKMwwmmP9zMoJpm6+r7cGp3uY8f4XQZPta9arAAGLBluL13+bJKXmcSCtyqJsw3DjDP5k1/nWxarqj7bJPcbPwjvr6+yGWCEtjtR5MWrX9kv6+MQtkzd+LzjXXB+ZNjvaT71M13uSnvQufaqufJOCIb22Zy0WdSc+6BUNY3QjJjndgdF8s++8/N/OVQ57Nr9NIvb8pS5pf2t8UsCsMlZBKfbZi8U31DB8vSFlNMq5GGW8H8k+tIAgauak34NMQjHsOc3hnwAim2oRXxxp5m2VO0aGhyF6FlSAvWVdU6ZzC/45ItrnozrO55MPslt8lSaHZUn0uYUnMNnc/gPwau+2JG6odQ44YkfqXZ2oNoV47nM6YixhU95qxVdm0bFVb/nNi362pK/ty72k8eCDh7HybFb/3yrE4etX460+TUW55fM6LT54JSPn9Pv/ezAn7+H8xc2itfPNJ9/zn8zlsOm5vkuT+TL43ILo8PffRpdduLzP3ycJxv/4pocBU3f86/l9alvskHgvo56jfD//Dj8aG/Rv3yIfavnAPusTHMLzTqgJGBd1HGOaWtKXu4oKZ9vpPm48k/+bXZe0T95VFbYZc3//dNsxcaWZxIGyokdDEeV1C882CD5fyAM6jKLoUuj0HSJoRPWV93GEpEfVBq4Sxh4bg2qh1eWRLbucOvQv4SeLjH30/FHBubsjghu2KhMPOp+3yR12H8nuVow6tIBd3EZUvYSusDk0rFFse/A7tk55ulP+nThYUy6qi6ZMmJiOlPnJdjbBnn1BO9ng5u6m3+7s/6U5Xl5fh3bjIx5Xkp6v77d78cAw15wWmSpta1IxBfWVltd7jX9siCMcb4FnvkQLDrYrBGs5RIcavTiPi2jicHZeUtEiOla54yuJg5X1ZFML/i/5bPV2uccb6SPZJA9vecuh3TIAaUTQ6e46GxzYV0ch+P4PId9+If9ysNCHN/ZddcZr3htn93O+eMw2+PCe2MO/sjh+H2JMx7j/6mjr+TFefn+9DcdCnVx609ezgp/2CpkiH5nMY5f3Rw92cM6/sjrM8pug4d3Vchb+/1EXFtSGbo+WKG7auwzy4cvbgm6TBHepRbnj4OfUfrl7i1MvHpVunmeBy4YGrLzsrig/9Wf94FYV56kwAqcG8wy8xJQ7SbKmf8bog2V6vJL2zh1MxOqfwzHdOH9GMypydBewg0me/osL3XUEsLc+YwP/3ic1vc33TQYOj/mYFjH0sb3OIt5/guaMVHlKVvpryl9Tq2N+kNq4041IlH540xB6MYYX0VlOLJbjVKNTw+L057ytY+f2HbRdsd3F2FiLDcHcCDQtpCeL10gT0NfsVUrGEPntbW0UCy9w44JpFGeISO7POJbfDsmfDrjuLKEPbmWrbZnojIuNROeaIqOeR99yo0ToF9VFtNcogdnjiHt87SvvKc6OsUS9vpiMNxGM9nDxXc2j8er7F1pw83mp/z1h1sMkxkXeIKQ7+mN6av/KRe7PL426C/mOC7HOF7/5WTuTwbYeL9+1b2aiFp/5//qH4c6gdXwBz4x8vTJ7b+RXPd8slN5UmfjhYBFyCq+33VmMNU2mlDUyAXzW1PRKgLddfJDy20kamfXOznPfeg0ag2/QQKUW0EXLndgXT3v8nB6EnHarxRlHwEbJN8WL7aWjNl05WcU67x5I8JPnj1uxerjtVM7POMfnXVFL6xRhSW/2k7mvW0h8NnRv88ikx7/lTnO+iir8oo3Hwr4WKHoNKb9FvX0SM+4ebIWSTq/VdMkpToivb2qUDZfyzZGfk5ccG5RtveiVj/J9cCW0oXw6mclep1qfufzh+djkHsXdoINC75NCmJDdvM1xSvdLbg5bP5/fMMl9NHIma2dnE+zYxF2UU93EP0Ez0DLBE7LJHcc6OuL8TTixerF7rNrVA7mkbnnntbwcHdWbnMO7Lohvelr0zm79PS/m5r1nN/v5jb+7Djoy83sp238yrN9fJ5ff7px/o6b74f7afNiX25x4/f7i+6Tl7t55+tqQs7FefFwSi9Gq9/Hz2Yc0wUcTrzCa+O4VfBTzpzpMyOw1fsZuUmG3cVhLmvfK5KriI20Lcgtz9u9lPPEWvwEsbXx3nobHVDgfXkidVcVY366IXxj74MSc0hGDNiCMeouhv3hENf9x92nl5+ZoPQnVyVidC9jQ/BXcdTvEOR48vUVB/qpn0m3cM+eV5neZs/Br/319lWYNAjCF4kR0a1QjQjBVyZiqWSns8rZEHLy3fVdtVGpPtevCOJOiq9ypZhIFMb7DBTdtnc7jxxCM7jvwlYLjTPf65fAiZJ/dbi0BCpvZooc/NLX3xleLOrFl99Hd1kI/dH9RPwo0P3Yd+PxTYRsMwN4WAWP7nU+y+RAxd0MnFGn9U35kb308wH+e8cIw5luE4uxIO2pOvX6DOLi8DjVdwcm9vTx00/+bGBwQxLkpta/kMlmm5ZL422M5unTDalNTNvX1z7uwzMQm+1vmMc7HSZwHJZ+n2ueH/lcup7z9/iMT/mdXZdyND4Mp9mIkYfDT5l8Fg9p/OptX/nZae/zsAcb7uSchvG4xwQMzk3r6OLzn1J0u3egbOWw6avDFt6324baXze6FXhADbruHK/19yjN+P2FoDYA3nZ2ifhrPyj3d5IuHZ31y0FEhkhf9SRvszAmP75EIdbL0DBIA87VTkUfoQ7h3tzG1D+d1l6zZkqcDFoqo+MU/1fTb5elpmDsh/LbH0YOHPerS9ztvrEa+fVl04ehIC8e5er9P85xm1xYYFhUa/Na9hto6D99xLokRfk0Hjue/X1VtV+epKJeAoAA88yujUbDjSsHGjbySjNPmZvGypXjRb5Ajgs76+Db6vmHFif5yUZ7AxW1MN7ryAQIlfMMUejwTRBPXPpglLres9k5kvTifsrWV/azvehFx2stINdvz1gW889NbLF40cImMMH5bDwbvXrFeQGKG2fSyQto8rc5bsMZ7WRyfDcLOZ68L1Jw0Dg/32+pjc11Ll+bJbHUP5lzKubp0YJTJm4xaqd8G+/643123/z6VzzHx6nK7a+c0z9OuS1Cv7u5rhWaP+RT6zFYdnE9rHNTTHPwaiYGzdmvvxzo33ymDHXcRujDuTt+LTHof92yJ29Te/0EKj5xuOL5JUaL+ZpGtRO57k3IdiK/9abaaIiyP/Zgv7tDXDjb9FmKZjQ63pqaOM2xqvRyA+JABH6+V0OlWSOBeNWx4wXKNcrAjwltrNUXvss2vhwoBehey5gLGHfFFNcv/pWpgZIKq2aqrn7BI94JR10OxudHrEgb32cZCZ4sOwZZLmiPhkEi7nGuPI7bcFAU2yrsBo1OSUfSiufooPHiToZcXsugzBTGNc9pH+CwszSO8e1OTTOX4fg0scVJIOWpFsWVPr/hjic3HN62pr18xeaB5nwly/B44Z9nAT0wmseM3uH8ODy6aX7Ii4HxmJ3l4zm/GWRsFJeVXdpOxuJgc1ORUWwDGWr6bwy+Axve0/LzorW9C1tyNw1di/AsRnzn32TTPfxnI8tm34fOXts93/jd/X25v5jxzd/j7Jtx4lwcv3MNv7g/eJIPa24vF/rPL6LuJDubEyDr9fiNE3Fx1y1+RauJerHq9Dksg6e39/SJZ2c3fLLMOsSD7bt+jNm+cp8dEOjqDe22PCea3DygUX73RYah5Qfd2hPtekCO+pz4rbf31+DbsXzLHFDUwsnEDHobDLR7enQq3Pu665Sv5YbZvS+sGOCNo9R06lhT7AyG3cb9faA7G/5s0ODY/kn0R9/vmkhWY7kJ4GINadgh5kcPonS6MjkYYZeZYUvU3eOgIgp5vkGzQ4dREe/Oxm5ImquS1328fsP001wI4lVB2WcjjhTYHtFnnDDV68n9geHpSjIhUfgRq59l66U45PJzZ8ugIdLynvZkSLVTK64agrLO/qQ7+7IDyWM8z06OZuy5+XBDK/MnpsJg/EkErb5tul7/51HZ7AfSdPbPTvmzMOZd3Ld9qwCuP5fyWxJb7FrOtkuhvpjgcdrPDt3bOKfv4vvIxi1W2+neebrDp6MPUPlPvP09jeF7J/eREbQ2/a4k2N3pPZ7FPU76GL1432eNz664yK7L+fk09xcPOro/YlkfSJh0hxHY766Ax2r5nA7R8DOMc7IEoNR/MY2RNV2nE9R8avL/b+4MFxzJbSPsu13n/R84t5f6vgJIanZ9thP/CEdqkkChALJJqNXSzEzBhmI1RiwJy+CnN7KuTYm94PrQplNjqLqul6w+/MiXKeEijUnqrmC46QRrInQkCTXCLELA3YWcBfieS0z+Cvpv+W4lCz5kEAHIky+P06Ado90RBcIRrshZESn6wG+w+mR108cfMYxPoD6850fm6B1at9VgbZcWP0obAFwMyvQgzRxOBWIMOj8MHY8IJwaHkANMxugY167zKsfEoGkwRIJnJkuOeHKKCiYqLTgviBRT22BWdqtf4jNFhBcLsRHyU9ooaEGNnCYiG+VRJSoaYBw+CrwoOlzsMZ9Tl2Rdee1od2WKI0A9pkaQ8rK3/Ug0KurYp8G4ROXQdStVZKtoH5BxHEpYRnYgu7lHI2f5CddkE9UmO2TQdfOGHUwOraPLeJkL4qI+iev09woOjrXbpIhNZSSf9WlSjc/83tvlDTk/8qe9vvRrvNgTB/XGVM7GNDp4Mi3ladwxmSvL8sLpz+FLD97gqKNsXNNXNDLaAIzFJky1e+tRUcmLTW1pFa9y2tV1XdvOYWuXQTNV1op7MCt2AcMCuMthyNthTOzE6ir73r0Wikl+s637TpaNmjM0jiZqZ4yVakzqCXxj5D1pPCX84JmaOGImN6C1q0U5iJsWwYCzjdAyDpVW562BgK512/3yX8QNlSGBSUCOG6n3IyPbcEySh2caGy/d/U9r2C6OhrqJ0H5PmBt4case4eYi1Ek1kIswFjCZuP1QmKuzQm6yE79mMW0YsA6RdHnlDAk6x4+WMjpPDtTpE7ETwzECZOCQszEkRk4fBRLmRhjaJsBKRpe4iwUlAw2t7UekZY1sOz1gWKFTVHPI8/KlM5SF4svFVv7FJkZMt0zIht4N33iUD3bx+waDpEFpIosXcBF1s9NGNv1pkyB7ZVVdMRdX/Nvf9st3ZU1m9PNkpAz1+K2cfhNqde2je/tpx5Y5cxxR9q125PnBnq0aKvsbJ1wR1SYNOYkha0Isem0uBgtlg4OA2FuHbPCpaIqltTzIirE17VkzUbFG5QOXsvjT/pC5eMNNxCi6NnfvrQwW2iyttmdfiFfIv/CCJrheIsDFSw+S2OQQH34Qbt+PxcPITAGK2nuaeEqXX3vkbOxO0HPk7FjfkuO0kwJ57ZFNgTf2OOcu3wSB0kD2U2lGTTgtb2edh4PYDyLXZnn72dmqEG4gb942bu3KyULZSX0cEnpIjmbdwPi0H3/iq6olvuEmpFWmX2VrqZq+nEayCWV811dkx2kM6Mqb2GCugV6cSyD+AZNiyxgNnIKREJGxaf11cRlGsCzWnHDUOK1dCdOOf+cbrvQiF3IjylJZGR4p4RtyNuQWr/+nv+dPzuAV50CNzHEgX+4I63f0YyOWtgRjl/YmufJVea4O9VGfmzTxB4dvX8NnIjmyzpFJJwew/koD+GQtrxCPrFd7YqMHa3KMYGVNlvjKzMORePY3dzgX6qNgV9UWff3KEYNvWBlvdcjLFYao7A8XcseXudxYi408QNpwsUJJ4NgipLKd1nJGJF4I69IGUig6RtvILcW4tuhHXs7UdBLTDGXQVh4SigUIdF0zkw1cF0RcR+d4KCuBwB0AyZR+mONoRTPksP9oPBmDH+ZEz20/HXCvkpmbT3z+xh/mjSb3DLUBZSTeLNMLynhG4xAnTio/gMEWjoxGaFpcqUyUWLUQhUMkLIsqDmBTb/8ZIEJu0R11QecIvbfwOBXusJ1qWJezBB0Acb9JUqcAGjHdPBsp47Pj4jhhVVQVZ5L5idu0LCYMpnhxSGcewPS0r5JYEhMKRF+m4sQqPAdwQtvAVnuFgmYcoz9BE0JHBfSIx7HnLtJFMEvGo6/IXbGxCh7mchUDH/1Z1drVuwrU2nlmNKmWoy1p07JOBDN3JFn1Obj6ShPZzFf6s6rFKZdzY+wmLl1tGCdxWEOeDgvfvu3oYgAvdvv0qo2xKy8HPCbZwa0ukLEP7uWKH/liSITnK0WvLxPp8BPP0dXW2JYnOny+V5swnxeMiSMQ/VrjOf0+t11uhFGpMxmMXURYqet8FQSWsjaD0F65itouUJscrBV+aatjTRtzPwdwcQHuvmXet4Bj6Uk49WxH392tKvcouXcY9qxkfhpApsqoeR/NCudWppuAF9hoSFk44CySDPDTK0z3Q3pNP2hSOFv1GIXJMT2QbtKcKy5s/0gILIMUomgLt9OOWxN0PStX0wg54Re6xrJxUIWUhiuDOj1GjLuWg4iGCeDYt7GEu0lIDvW1AtUgozHJtxdbZxUUtm5gOxyYRcJBYd9Dens6Kjw6NaAlO/Oc4L3XqTyH4JmL7TY2vQxvMV0ygIt8E5nGemIOwHN8/BcwppFH7dwMFCtXRYI8cxuMXC/v4amGFft5Hm/cgwhHW/CCnZ7tousHub4Hhyv6TWp1bJIUVBvItIuazQQ7K/LUwdqnBpMaPLLiUqexyQkdH56sn8rTPwlssa9seMduuawf7sNFfPgfHXNCLPuhzSZoZOpmTAc/41w7cYwYzhxOPeNlwMqxG85UclPXT/qjTwWbWNprC0AMQgq+WEor3HZVnlpUW8RNh3PB6qSIyQEZ3fxGzaroKtwDPZVpqPFwHbs9I8uqzO8UMmN+os0QA3KtkkDiinuBRpTLRq4QM0remSOa/xuTlvepANaZ14VxwWpwuwRCiSW/Vx2S+Og2d9r4cIWv6/BlTXFgCSXx7Bjpr64jM6VXSsD4GoxABstj7qF1/53N7OzAubzYNJNpzcHRSMmcgJ16/UQU2lKJJ/Vo0KPjpVkZvgj9uKRD4UNy77nSVtA415/3NvLCxGvTTHFR+Ccm7MYHihSphx/VJrERFTRkBxscLMXUFe3bqpmeUNhA1gaxeBURieqIa99Fy1WyXAQ0OiwZ5nGMILgOh86WtneYQ6HyZ1Rt6gvfYxuxrTEwyQ4h08py5QzRlj+H3oGa9R77TQLW8IWryaQ2yFmJxfWt9uqpmyCxg3ueAWtnH9v7NhzcflrNOD5xT1+OJwb6M476T+KMrGNuzPp3DJXDzdQs3hhHf7GNPWHB3nkCIy62g0dPqfwTh1B5IbYhKrZC2lWkGjK3+GszkMVSs84P/gvWbkDiR0d1+m4Seo2ll4LVs/2/Sw6c1MM6SVbw2zWsV7x63eMn1tJnMSWx5umHHIg0OhUSviWPaadOz9klM90nSYLEHfr82fD2ECpmYoByxcduyhcXA03Te6INtlhBUTFLSkqQ7BOnHb5uEAPgCRPPbiO2sLGi1yJd26nlLYGWQNlRrYOKVDXaluI8qmMuhIfb2UJF6tMQigiQIc4zioanrB05eoIGBTa6EMPNHC0Judd5i6Q6AD8XdYhDQwgyjNC2srScYoBK6/d0q+/5NiJvZTizUcFLocKaI6iemPIpzoGNZtEOXSQxxPbwDN/K0VZUduLgyr029dMNXKTysYGzuNZNLrGFg7nOIgSj3OSDrNyuZnF9q2qiSb/y2IydNe08sUW/V5mV7VUnmDf5XZvFR20832MoFzOUS0Z9MEdplL842jFpkkQHHtnjBz32K6POQ+zOY/Vjix8w1mnTWvzYRuUYBYETOza2c6AeAHqa4qa9WvYCcc9qKKhwkBbs1BPolJVlBSRcklgxWwO7aDqzR1HMGq1Fj7lHmcSYq0pgOMvkTCKM17P54mm+Y8n64WozKItLZ5MfKyokTMBuVNq+EQu+ty0BMHSLg2DTSOfirCK8EeKMqDJOunl63YKfRhuduByqrziG/k02ovDjANSwlM/4AzGhTCwlh6V+9Mt+hpoYHFqajtjxodt5MICgKNqoSBxBShWA/tXDNrjUtnFBccyRYD+K8K1WjskyYl1GJ3Zg83afl0TC03lvH3QS8Us5lGlnbOAyL0rxm1IZ43ZEkRiQGCEz+AlTNUuB9SodHHl2od+5gtd3AQPqzMp45yixeGZm0pyBGaduCTeNCcH2Joa41LG6BqqI8MFQrl3b+FIXBb7w3qvM+miy6NUefvUVKj+gifEm1ftWt/PwfnCDHXhs+4wdfiau2tLPKo+QZe5VKDb2g49APD7H1qtFesRD/GNLsv/mWmc8cD1jmT5y5j+w2KMfTOadmXIO0lA+sQeijvSzeqPBIAU98wmINg3mVLvFyCBkMIMFp2Ht4dFk7FkOFHf14eJ0N250gWqDOuPLKptsRBqLrJ9JDG/6FGTr6672OkCeREn4cc/a3QiZMQpZqXFHQNNogxNPd0y4Ci2wowrEt+p9W20eVR/t71kqbhAEXPVhwbDz9ju9DbLOoosWSPnTMrTAJwTV2BsB9VhqhbC2Dbbo48cugwiGmACBp6mhNXAUdb7QGBmK8uhrQ++nckOK8WjLF9+coRQTB3HgLMVTS3vPYGeA7K5jBrq8+PbsGBC3MZhPWS6P4xoxKrGdD3nso6c38m1GvKd8VIRRJDHDl3LPXnSxvfLqEXTS0iDogHQ71vjVc7jZ9BQ2O/KIxp/djBfAzkKa6Y+Jjt30hZoEiNI5jgxu/PqMFXP3JgliBGMSEbeYta1+cRDB5WbRNvoQwAlHuUhi+FxdfYqJYWMaLC8S8C2X9fTFgpu35fJPf/j1wZhIqszBsd925wpdE11n0xh2LqIMnX5iXg65kHe8Rw5QXeJo0/mol/KQiIERS9dBgcpWjmhw1YJPi6UyxHQp7dcDKwQ1NYX22jG+LJ5VofY8AEa4fJybJVhbsC35FUnfEdOrlVeTDKYZhiuRKOxGwro8BRQiDP31HHQRYDFAd5Ow8MMz5uavOoSu9y5pPfSNYONqHjzqNMzWGBspAr3u1SuXwGyuiQ/ylo1h+6kbLfG01E34WD/8fzXPCvETVENKBgs1Y0NSiyDbtAuexv1AZ/VE6ulMlVuzfsumN32z/JfDzFs+WBIEmhRPSJjjnqGrbCjV5zjIDUsrxEuOEXYAw7GDkmrdoB2F6wG4ZXymjVoa5A2kFbrELx/HAa3bairssngwi8ceg4RYuxeDQ+Tl2Jphu5+ADpzNTwHDnJFgEK2+bcY0+vG/uE0e+zYUFD7Qq5ua/kmEyqoHU2x90O9b6chDVP29EvSKEJso1k4MfpFhg39tXx9wtc9y7RfTK2Ns9UNNHMg7J/ZnPtbfTEH9RRfkwces7cjgod+amdl2GtgkjnNOvuBFYDCN00x/29uAX5iHo12186Gfq1KXc4b4IbTXQ7AP/MgO4kPp/8xBlVDIdaxg2AXFhzOArzSya8wL0ucyB4n4oMUz9UxMt4G2PSAeLiDokzx2m5U2Pf3HovY9Bu8lF7UkHCxInIWdxUg3ScZF+PjcFQjDmpgYGDxT24SN3cp0z0jkVS4+B3ctkjFVjptT4HKaqFEooEonAXSWiAM69I3KQeT1iG9InbsFo9eZi21s4OZUXPrrC+HIHbn+ubJksJYx27lAs6oLMPAgTT7qS+wUCZ8xJArGUu1M3OlHunP86WLwDmPCooLlAk8rDeOQrv7YzJYFWXPYuCY5LGPwaH1miQoPH8utyWI91x764tPHVvtgw9FEknp4YINjkxtYMOcPUky/mPCG5F6lto0OG98uU0//+MIvP7G9b81rs5j98viJMXHJE3L48zhJz34OygKqfv0Gi//gaVB3/Mhqgx2tg5t+bdBdm2Lbj3h0re1DMnIbtCOqdCUr+xn7rhrGsQUO1msSlNLM09kEYNaO+q/KQ8lficigTYLMHgkQdYT5oJuv/jAlpAnOcjTuayaPT2pNRsBIrlxgufW4zyXCEctGNEQ14ZoU/cs62dJejAo9B9xBkp9YcVcH7lGnxo2D7A24KgTgLcUKQRyaiHFM0kBBJRiadNseI/UrQRkMKM1cLc5WGToj1WFzywQfoXLPYlq4E8TQbvEVx9uDCZeaCRw14TENjXWE8GRcag5VugyX02gDrJjBMQcFnyHztj6Q40u97r2QZnyOJKYEdHHYtccxDhLPrB2wV42CXVpQ5PVXPuyKLRdqxzsER+8uvP5pCQl+z8GYuLnrLBKEISQJNX7spo+zCJGbEODUZOqj++yzGqD1qjCG9DZhoeNUtz/yCOBfGZi9oiTB3U+5a2vS1ab94g3VcZAs6yN1iBl/+9T7LP7I0yBm9NYMXduLiyq68UlLP62xaZ+6HJVdPcTVDDY2lBcvRpwaupatjyBS5mz7R7+iEbijp81asUw/c5tt5a4x9lVTL9+kgVd127v4piZR9toL63xn3O2kMoJMihvFG2XlYOAW1cxaMMHnSMdNw0lIjPagksPbZvawREp+7iBwWkupbUPFrhcJuMmRtJ0YME3JAecUZnaadI/3jxeTjubA1tZhxN1L5WhysMSjw8ReNzM69GMkHjAzgXRNJSCeTpPdJqNyBQn54LUKpXedoaYNK5xDmZ5N5YTNYPEABqw+9NdehPj3fcDhAHTRtEhivS3dDWgCNzaiq6E4LJ0sZJJj3agi+nAh5Nqfxbn20cNFwjAad4hk3dhD5ulNmzHik6rzxkuplqPDf+dCTJZQV1FHgA0c9OBUquxJEsi1G5vhMClNG24TT2zh5wl3ryZ7BQi/yYs6HTBNdMSA3dqmlhd5cavr1WKxbXeumlB7GdHf1gnm+Il/ecLn6Vl+5q26+m98+BRnjGNDPOG785U2/X2OHgE4NPIMF53TVx8EpymFsZ3NAB7SKTS3Gwal6nuKj87GAF+b5TEmUgbK8bs6zb4YuRwXQC3o1t+5YHMAXcuOrZcl7MVME0c+H5A4R113a4Zmwk+j2RET2SetpR3Rs8WZ1qaJEJEI/wiFIk5t6ZigHRtsMVdnm5ZJM0djzpG6pms2HrGoAiMG74VY/izbiqEH04kKQH5iu1FrIy4ygeCCoYu1a6IhCJtDo27HwIw4aEoEtBxr2os1MP5APFfsgXECkLVtpGPYWWLo8xBDRE4XXuTtX3PK9op3guZ1hgDyygVF2tcPVLVXNsriNRK7GwOWz6LDitY/HBBM33YQ9Tl4J8L5dLwOHJaCTkwGGzFUE7ptLo9YPZTG2s2oW8FVLoaEh8S30AHZzoENzORoF+kmisrLrW780d77ktiRDK0jR/dxtRjnTX7lJ5Ymz5XXPzKTIHxiNr7pv74ZB7yMRZ+fXBtLdY0nMOMgvsY44wro6BgHOPjBbf22o3eurIdjZRjbLo/dEMGlHN342L4OXQ4DAnOUw+96QNiC/kMUQbxExI4cezAkjEmaco79VnAwR29B9hb/QCPTawLorPRlSodCe/nCWabEYfYic2SPSOnbwZt5YKGTSc7Kj7mppXpnjohIYqVI23f123MiFI67CJpBNMDfQOHhqpV66Nt2zhqWqiYefGPacdQIM+lsTHIqGQBbJiE644omGy7/6iKSGO48DaZG6RgTRjMZ6xqcQWAuCAnnIMkSqw6QSd+h7looZ7DhbFzY50kynPhIkNDJDBvYnQ2mwDZaZ6OfXc3puDOgYanDdH9PW1boo5v2w8hmYHGojp1Lw96Fe3bAWYYjVRcY2sQ13GiLAHBNVCOKK8QmtqMOR+ScI7RU4PU7R/ErT004i2vSqg1tsOj6DMvKYqSOWj+DC5APVl5ZrwaXK3Vsyo3t2g+fXG1vUrYOL1jajiY1N6nobszEyFjbx59IZdVVtvMFNo88GVfbO96IHSt6bEWlJgaMEDEXo2q/KhSgBmPz6FdRu/p1VYKvWTkBpj8izUZ0cBXencDKK+/lOoZP4ysnqq+y/G7iLGB+S5FPAYhy2dk7fvlxzTIQb1sawqC6/MeSPTvm8HI1MzchKy03HOm79Z1pDye8pG2iaLEBHA95bqJ1MxtHcewG5wjc7s5lwR5xNckiZJabTUYt0ZhOrqhfZFkFmBsYXDseaP1HaS+JgCcxEEfGiJhmxyLrQ6NuF8e8cPUT8ZiAM8V1lXae5VpOQBE43c5tIo5FYzcW7BvEYHkJPAOd0OLoxAB6hgVsC02eyqDcQtu8HO3xVcMJQ2T5K0dgK0JqjtVsHWGM2YSjsM0I6SufkyKkxtAu/IwB1Xmm0WSBLD/26xPO7WMgrijb9JtAmuTePsmqV5aDebgXBz8JzgSV2kQa2Sal4tYHfBe/HNo6nkl28bN8G/ti6Vc24398H5uNE07wjmPmQ9nTXszg0sX62GFLsQ4ZddutP/VCsVa5uGO/tq/glSFPOZxu0y/+RlbkPWJzlu9pXP3byn9h5L13/tw3f0x9v9SXTd00FihsXY1psG8RRWiW49qFnen3IasZLOmSnyS9JJgdRsy4SvJMJAMnVRksKQjiSZruMdp1hv8YMpI80262anJtfkR3fXgJ4S6ODNPR7sZ208KmAju33WWQKlr0KPHvP+UIDofol5SOcXbEsLKttfTQpiaPP8wyepykxZHZKi3cO+V/fsv1248seVELuCHcOOI1VP6RJtwz7x3ghMJw1gODgCPfPqj77FZnJ2bJdPDktOKUmQHs6J5hSTDMchkzo5f4zkBP0AQcPkKT7zFGgh07ewote/JVXlnOO75+gUU/7mV5k4kTGADz2mcdnEQxY1sdeES4oU3d5Ias/fvW+asOfZ+bEItlide2nE2A+IRfHzmsrrK5Ig1mudJ0q+jDbYAuVnLUHuzlXR2yO56jx+PgU32208dPIPpce2rKwU9bmXDiqHCgB9tzNHogCwCfQre7ezpTYUdB/57n009jdmiXU1YzCzxlTbWV5CtHbA9oAanhpiRRslcJq1thwZH22iAq17pw7gXNxsH9sEyeyOhyaqFTXqbl0xy3fjOIuUk7DzcvoHaNgy1qoeKPbvBdRkqOcOO4Q2da/KJjZOPJhqCAK4OGFj6NPoJRKYOaIgYdnexEBkMxtvZ6BksrED4n4uH0uwT/nVn5npuv+SPGeQs6LKGNrdONvzokLRFi+mSnjNcYcvCRA/YAuBLnfm5E6xax1rKgmNJMp6HwEPBWGCJRjmfamPifx4gEtriQD0U5nTmDaLRKnZrqQVK214ATevyskCaFAdxzWJkwYhPjFKhQHlnPRkQZAwkkJL3PNZzKAua/FGEDHtXarwyhsjSwMQ7aUEdQPLrRq6vcZBckyY65FKMP9sXg89u4sH3jVOZfjOR8/8Zv6OIHf9y3xDZxZoWhjG0UJrrI8Q/X/mUg2+l7L3J0i9n4exVLjBMDOGKkn13cdnmx1T5RpqmOcVHoE5t12ojp44dSObwjYz2gj2Yg6jhoq1UP2FDKkdr9+thVLQAM1JS3DaclQuSuAap0ji592q99Fn2mQofR3CLHdN/2RdwWiTIPdh8OOXE4SY98x3hz8KqDDcwHDDM2YU7h2EfQb0cCiKxssNYbbGPMwNZTlRGUcGagUmej/zpwBFE3QMKjE3lCHBfDxVebWIl1EaHJQf61GbojezCBEB8qadPAlRw5AwpRgJnadg7ix/JPXtIRkOTgoMocaJJDfTAKM1+HA2x4eHVoexzFIBfvcZ9Bx1UM8mAbGUoP9adfmoSCXv8I8rSvEkBEu6oMjldNFsFOqWElQkyxbKEF0rUxkyAv8oNLK0JcrQwT1PBZJKqW5kXjF/u1rM6kImM4RleKWsub5lp1ckQoky/dJhjiwEf78o0tPH1GnwZ4kyj49LU5tt/YPWSohIxnMBB5SY6dZ6k8wOT2D2HBWe7xEXvj0GfbvTLMck5MG//eczxXkSEJbbmIAfdypWaU+EQ+GFpvPPa1AZ+faTs/+PVZeZq3zyRt/7Ff2anR0UkhLus9sIyU79lXffHoKjIulhBLQJpRHL1IEbWZnafJ004MBUEVeebG/vLQ2TYN1u33Jj+3LaJhSJMZIyRfkNjhnFKMWBD8JFS+PEk9jzqABqaAvZ9JL/gI3HZg4cnzhCPzSu1cDF2S9GTxIYssCp4IOGEljCzDYlUNAwNCVTV4MkIEDCfQq8MkMh6IUbSbxnAou8LDGeD5gAMOOqzwLQWSlGxxcjofuqCZoijHxId+F2F0m2CIh8gGTqBl5gXsw1cQxVY6BFS7UDs+vIVSbMj8k3kTAQQ8ouSuQx5NBOweHKP4l0pMgwM806uVxh42chHiALSHy0yEo2PdlMlWAJ5H2cBHELWrFN14IVxk0hze2oLxiT7tYsNEPwfqk4yCUJ5LNJIOnLm32PCSFFe2NVhO4eHRHjt+yyO6EIjJAR/wrW1r5LU/usO3OmzqB5vji7bjmXEt/45BmxkPMrA50Aq0z2m7DLEPhqJ+cRVpqw7987QzmLUTFxBrsdwDWDsI3iUx8kWh/uBdhXUNHZFAqEhXlBGUPB2wHa9bKt3MnwTEaimdTT/MsYWWzTDxp24SzIiwc5OT+LrpgsvDl05MeGL7eko3V0AEnUAE7HRzXbRxN6ZuAVczXH0Uo/+gcK2XxJOzCjNlB4VOe13iYB6OSy0AHzt1dipts7AeC9Un1DPGjmamYX0zPBZpg4k5q45Chc48o2RdIskP8xU8sxSs89Kxee4QkpKun+GtyUxhmLh6bvqvE4YPHwcf2AWnDAj9PVITTQr3J6k4FGuYLKDjIFf4XCyJKQz0lxLjulD+NCP/6AnbAa4GSGFI4imPKyu1WOYt80Xbp8L2SRzOn1UOBJydiS9V2ETMqfLKSdzK5OXSIPC2AdN+E1IET4KE633LnH7e08JPIjzfh+RESVx8+doODDcTU2M1vmT56jahVpe/IrSL4ze+YG18GRdDqx0xp4OA53DTWxm4Yiqjv3p1dFPEq1v8yLWvQsyAmW79pWYdjumtV1AasdO0wvavyvrCDwUP7KXjyQAqL2KPi5g1vxF9IWTbRiQ9jbz1hoA+yyUtdqurg+6GkZ2Ry8OTLNn5wVSrY9tjkIpHe2Cga2KLLNcnWkRxNi5ivU9tP21CyU+OoGsgrYdxMWCrYHj/bxm5lGFBrGgmaFDI6qNWDhlc9AvR7kxbdXSzExgCc+aQmBJtGCJXtemo35fjiEw5qCQIgiFuEQxoBdR8uNLExCjymHlvfD0L0fC2HNLYSkNkJAblTlU6MpxxnfEpCX4FwdHMBaanrWchoo52PjAauro04DSnjEV6iHjCh946bUs62kTOoK591dhRWD8tiT9tuitCY1uZwz86pv1YMhcfWNZ74pQs9bd8mmVb3CYzZWSdk1D0w6mfpLl1bBdD8vWHeI4AAByfSURBVPMZf8hWzje+evVYrIkVvgD4AUdC9SqWOvbfuNnJiU2y/J57nfJmLOXveM/b++BTPpKkOGMOP8l09PmrQns2ScPOWYdfzogszQoxGo4Rt4+z97lKZKcdvzLNIfJVUYPbNbFyg4xu5Viie/u0VzoRh6sMX7FC51C7dn7CsWxTdoNBx3vmnIr84V5WSzJgwvAz7ygjMVTOTkZJ5kzJb+2wSWnaaOJpny2UFh0btrhdnZuFOQ1lGFPoAYutjZ2dBr3py4Hrm4Pn1e2UTmj9EIdI7MZ6AkDHkCTt8YmrUxHxRgMwo0LCuDUUj6mNwSakxG0uUjI67y5kAeLOA/53yERyHGnQcNOUHlEowZD+qsz2EEpALf1cbce0CxxHwzM4witXFH09cjYdGf2Uxqj3Wq0Te5EHjIhYDop2T4mxOb8MMqi4jMykI1MOkThRbmpmgPOdH2Y3KyoHPORBYjhl/KqiXYg4AnH3A9amhmAUZdDqQx4vRiNBweqiTxjlJXm0jZPaZniiiSkSriYPRnz0TTprq6ljII69l1juYENI2w9lwuSHTN/DSxS8wDKfTxy089nfJEnqXo0Sx++/k8QXn3p/0MlB3XjCc65ywfUDqGubMzVjy4AyVyRix778TGgK5y1XxC5fVpX+I59ky1bJlMYILLa26AQzbWQrh2j7Y7YW4llrW7CnvzzKY7Rc9BfTuRBxDusHwfIio/1ybHt14G8pWl2WLLdLUhwGy602zHpweaThlqEOLm3WuRatPNsIYlwV8g1p23jIzLpZIwOpOcPthxYMuFlKxfTYjGDh422htfysHNmhi+T6bGuPq9EpSFPHaCXARXgf93iRdKbjT17V/bNx9VSH2DQG4KfcKYoosR8yfTpwfpeQla3XNHXtcgUTiGRMmMY7seDVTV1orgwC0GQEQaXF5cswyZK+yRPujpuWQVnnVOju6GZ+o0SEC/3mYCqi1lDXu4LYUlnEgjQCM8NgqfS0kS6EtIsnWXRUvnplQ6TfB/aLFJ9PkDtZzirYRJZzhXuGkz9qq147bOHhQEy2W7MKESjDA23rwQ0eHBiSH3oSBbImK64E2/aKEJ0+ZGLK0ueQIMGNve0c/h6VV5sxkne4yo3tPueK8+iJKT7yXH/E1PjqRx9I9Dt4MNxvnTEZpXbo8dUkGbPTTtMEmSpzwDx3iSHHhtIKtitDjp+/KmP+ydNlLSl619KQvO2Xd3lWdvpp7DpUN4RTHRGNcme9d3U5lnnrLUVHJ12G5QcoT2yc4JziH/mb6E55E053j1dUYY2sUxdv7gT9I+sEsnCh9F7nYISwtmcqiTw9vFDb3bMgEcOg1HXbHJGPjhHGRooBNJdEj9zYM4p08cyj3tLEV/rB1TkvyfTnqhG6jtPI0mPQSrPwxrAfcoHERSPtQOggVhq7qJcnDZpypZ6GQhwaV0fk2Eo0Q9SxBBKGp6ydx5pGYwaDOhLua+4L17hjwAZsWJ3fE11k+C0zQTZc9cZcS/p8zckAWDFwg+1FJyMmqLEui1d7cLDsdJNNWmKWnFdAEkTW+UiNnn6evcqJZmWgCD9kfh0HDNiapA0LP8j6Q3j9qczEFMmboNqODDs4rdunvVh16MU8CWxl+E+7zyTJtPfPoqWp3dUvLzzY1Rbutb9+GQH4xTw1sfKMTltGC8fIkVGQdS6mj2zk1OHOmSqYeQfV3t1ti0e3BaDyFUytbQl+1nyRv13ab/+L8c/dDQANbSMvDB6709g+c0HJcuUbf7TiNGPOysrWUR0IDyYiXwTM1EXrrIwtsPzBGAwzQZjkKglCdxp92nSAiKkfemeEkoG1gcHY0UCmcWv4OJv78bJq9MYWKLsMZUpcvJTQ2OcAgvhScmUHgQ8FiB1zgIUo5jDEbTkqEO74NNiV+akTsoDTkK5TIglSOTnYUNxDVPo9Iudap7QC34kMjVNPBvmJBijn5Yx+jBGHWg5cMGUIuMpkYGift+bhAHXp2+0kkBE6GWLmZdM2BwbMUJyTdmzjaYLAf654d8wl9/ThkVOHj4AzRm24P6ftR1zYA6v9hx57C1FIdWttRhajTSrYm3CCN5GMrqE0uYCtbq7+1mZqvBHPx33IEJB4jh8xkYUI+X89nPi6MXR89M8V6okNXH0Vj2f87LjKE0jjHfmNAYGPjzmESybIVo8kbbiv7C4BoTn0VLtsEZ3ydra99YK+9hvZar/0FvyswYtMK3ogql2Lt921Xsy7htfm5dENJMPHXw9y03Rpu78ZdbpBeJn3JenAlkUPYogbTnYHG8SrtSYz59y1btQ4TYOtmVlnYiMouXtbj1FCuwaYYFBXmvMqZpKAoUF2s8Kd/vkwBxotYpzY7D7U+bXD3WQw8fY62pb4aKjpjhsjyIFwCpwKCPG6uweeeJWlxo6bv7nIyhUcOC7ik6lwkB5zApPdXY0bLwgw5G0DoDfXw7+HzC9r6sHzFYEwo08LD2umt7Jx9IVNpQACQNh4a/daV8fRoT5dZYZAaOmdQLO52HmW5SLM+PCGHmeVn+hmfJiuhboQeo5GWD2adVODnt3I6cJPHVoSA+DKmqyaTBbbBADjsYuNCUNT/Ode4fornTKpozgJK0b8vMlIztjCx/MkPPqR83ZbHnwOF3PWn3J7dYdeno1tamT4RDm1MdgbG9jij0IFlLhaI10ZrQI5FptjHkOvDDmF8dBmzaXFfVGXsXWvGNSDBScWJIKUrVkZt6z06q8usqs+YkQfHCwntChe/NPW5ksfkw+e6MWhSIO/HhR9lhXvl5pOquk6zjVX7shsWtQy08bKZKaw494dHjKKkzpYpWEMxtwZLYCgddW9oSQmwcKUQ7hCMh3B6UMNwnfA3tuTo5FKqOu4x+GUJTVeKeRgHI2hIRtvV0xMG0dTTXqFGBg6BTHAMSeMZyzyYKkSUw1Y6CeODqYXu4Qmhjh3zmj6pU9tGLwhz+j04ViQju6p0wwyKIAgct8I3xkjYC0V0OJ8oRQgugf7jCP4+a2gbiOI8vQcZHHUPjsChsChy7PzCVUKCdAyTnwHjgx6tueXAozllOrobOAiJxufPI7yAk1C6AzCBYmbzAGvfww/shy814acTmcLXdzOmQ6HbqbmdfgkxyjwTfLjLOclLle70Sr7PWcuV4/zNGHRji/wfPioXZoYcE+POezV5nBm7NwaYAquH2S1aRJsDMaPHGrrlUfGtCDjxzqYnVex1dWu2JjULkLsA1ew9gY0GABg1sdAFWb8XXNBhGraYDORTSjAxeqjPfs0P2ScQAveWmitdGu1r+IFrx3goZlqUdb/UPZFQZdB9YqScZFC3C5Z3dzHZT8zNey6SWCKjjt3I6uRkGIbUAswLqJcmIVHxCy7tdg9foHcHqM5vL4VDF1+t9l5NolzAQoiy+Zbf12RqcMpp5gcQOmRhis9vtsERYfRgWFf1TiN5x7L0TEtdIjX2pHw5SjHk0WPNDyjD2i2HGJNbOCXYsUYaY+MFcSqQsYxYscSF20xrjFBZNBWzjZ2HR/WXqbKxLKLiz0nAXEuUY3f/QMnwxdwnRvI+Iwukx+TnCM+QIt9wzZxoY1g53/c4oErahaQd2+Iq26pDSE5nBXD9CnTj9RppWAbBd+fwX8yMrBESE1MqfROBFjMUSxdJi/jl54UIyUBpQ1ViygYkaubdtTpfsjyf1I8td/CS0Ik0eABdhKiH95oF136Jicw8AShLC3+ayK6TZzWzmuY4pT13TliEI0LDtvYpkUfO9afpvSJaf2r1yRSfoiBY2vGRrf+bnvEKMZGGGbtl0K7aZYVLlGNw47zOuc+J1ufwxOVZ2FtNrahOBV6sJRtL0+lzzEAsWuwKvrjiE2/9su3sH+1xp4vnGdp5ZEq5H/m70PyEtFR8qoeVH5jIxBOKgFMFLzz0ybSbMDGxWrPkuYB7Ae3PGeCmLg0EWdqWa9VNCmnE5vuhFxk8b4YfdEl8YbiGIUdF+jridgxd6EFtBMIp+1i0QSYD5WGuWNKx9gQ4nerLMoGWvodSxFz3Dj7SQ7xqNhVcu07HOS4MQBXS50aZVUdEjjuG4bOuYxNOoAVZqihcgqCwEvwJWWiCTxCvW9AvFOPvVtSlpi01LzsyILiCy3SRdqxzG9HmTsAjXF2sC1DSwzWs1bkARqE7a6ZbnVcc5qxngAAzWkmMzAMjiYD5pWBwYUMPyRnepGRSGa80ALBPj86blv7xUfu2DqP/rZMfJCMmgA7BhOkPsrX5Jc28Q0fvm+7XsHJEx36jyRJn4gyBuSNo77LFZF6uOTmnNKwj6HzgAwxDz6FppFjxfCj2Dpt+2ugqYcXUwGSiy9f8UOuvhKAV8esZkxZO5ywW95O287/ANp+MWupDPWWAVF5mtNY9ah2C9ZiheCX439R93uUjDRzn7Hli1WZ6R0js8KAWRRcufhaFi8sUk8ddcL1fXGNCJ6WJ8W3ghFwJQMwR0vPg/OLT2QjijmgEUkFIP21JcmiHjtsi2dpTtNGSRRyUQhBX34Jsf1AplMRYoIkQV7JYN1y9b24J9TT1G2w/Ok1J8HZwKJjXF4NWNZReNGaGRDPaNLuvKdZl87PJE7JQOSPHpv0QSUJgukszxmMLx6hNfgeJx7m4sRCECkdd+A7L5GTXP2gZ2Kd08HY2K+QcD2UaDJAu6nT/rF/jigy5BS/DjhJtJLOP1zpA2vC6XsIaMqPrx1ETyMa4pTaRt7EavAmnPI2ScFR/jFyvsKrF/+tazhdImGGi6tk/UY4S+fIimPK1se08ZH9Unxkf8fnPIl52wHATdnkSA82bXM4cm1GLgJcn0PIiaiEqaNlXJNfq8nOmTmw37i1qzFmh/cRnTiRrfzU0zj9YFiDM7SDX+4yGCKiKWv9LMlHc9DApnNkaTBPvK/actluvKv739Z86h0XuVrIe0sviphy1o6142SjRMbQiQZl8Lwt5t0ZQP5qrecgmGhdeumby+Bx3ZdwdgZEWEIgq3J7SFISF+pMOZez0Rzoi6pYtm3eFAdQFY3uohJF6LAfdXEJec4wwBY0JOEI8qeAehXTwONJM1W+A64Rx2MPxtzuaNKBp4OJnFFKpg0OZVTMIf0c5rUBfOcEYMpMt2MjtSf4bO6JKbaMRZN+HYC9n3MCjmoGi+feKUmNiWmxl0xIUtx8w6fEMBgYv7vDzIbT7Y09XlPO0Hpqs5pJ6s6vs5k+JvjkYGbCjAyBgDDRp1CzqCRHLqAqeCFgWNB4rCF9dcpW3+GIDYwQeFLE6oNemJot02rY4IqhhjvPYDaeSZBUjYIwmargOCu+/S5z72XCByYGtWkfJ3kYFyPxKWfa1KOX1/7KF1v79AxcGxdacczRPPQbF9cX3Pjk8NZf2oJESGVLk2PHyFl+VupZmH1dKki9mh7UP32axxrlAqhTNsac+jecKv9Dx3X5Pc5y7cPZ0hdzuLoIu6kMiXXmDLPHvpFZ08uNySgzF4w/CN6q93Ur3RnODDVXl92onSS9BWOPNDto+zlg7e8KmYCwxQFBRMXbDK9SMxtjh4Fbtts8Zx6LFAmLYq/1gZxeCgmDxW5TFsU9ZFL07CVpRAw5fggCe41yvLvacUgWPQuZ0kDw5HpMfqlvvPIQw6Hw1DBEzC7iPhkcuhG/HSWo4O/pq6e84kXMtU5Oz298PJ5KztxDMXqP+M3TSlxe8ByUYXCvkbtshArET3NSMxrmP1HFAfheb9LpeAOAjmE0rJ0qxlJRPHRQ4VssjpQzSMfMdKeFJ+Gt7U6fM2JM+A41ayAXrhERLtOMDeGi5u1TpsOZUZ+B8QV1fheK2Al/fz+b5OcsYoNx+MQwLoD5jJMhrJ01fZ0uFkRkRT4f/BA31xpouiioiZvRegXMMPWFC7QoU6fhU95yEyd6a/SrGyynjxfQUB6eiNrpFNmtcuSrny4+v5b6GcXq4yXx4/KUn22rfl0fMA24DPpK4Tii9bXqr/2V/wfqpf6epcUq4s4QL5zOZarESv7jWnKGiQVbbl/6uHFZgwgzhGQbNgKxYd8SWxJBmJroGCsy+dNBmbKJI821hCXOgDhxeStrnw+NFHCVExnqJk7kKX7NJyyTPhheC/vvBKYIg3wEpeGB2eg4AN3VhddwJVajbxQISeXU0nmkH6wh0CTKgHI0vTfZMugIZ87UziFV0V6yB81ZIUfDRZn56ujrmPuZbCgo4PdkMWWdYl7SzJ/Zjjj1ARS6gCLIEzcYyBMQ2p0ABgNKGcsibylYLzJ4gAg2MBMK+nECsDMXhDOIM6+0MswmovDHmtGqy+pjBJIxJOQo1YNxRpY/fzQq64XcwhJleaBJHxmuEgpu0uBFOzU4woJmsMONXew5TPYhaZG37RJ3OPkk219RlAsGwwUnL3+0Ypp8GKBNKn2sb3hYbdbwhoInt8AaK3dV4A5m/DALziuxD18R6eCQKmVbF6Mwg4pOUHwxxpxI+nIWkmPtl0uBsrYqv9pthQN6jENbXrr6nMgWi6xyEH9dSnox218uNP8q12X5563l5Pzx1pY1kNVvyVB5j5SzxTJx3I6aM8XgO8vIA2GSY8ue6TRYzWQZejhzFnBowd5HDo7ScxSp+zAQOHPYCccI48YXOcsKQbybtGwSG9EkHIYhMYqUaRPj7RW7femqZ5HbxZTCQhqONIqk4qHDHBxu/4RElsZMxPjFwlWICdghsWtngME1FeE1BXFex9hBLLhM8FGH88xaZkRe7iXqCzfjkKH88IXF0xmefKATNd9i6CaOoJNoEM4RDufFSGrObZy4OQkrejjxulMV4/EIACkRNoyl4nJp9w2+YdUfuJrRaFtrZmA9OA0jjW2vvkxIgZB0TC7SwN2AwoYJUnwb0/pYn4y2c5F1AxHTRy2A009MkYHjDkbk3/Iiwe9lC4tG/wHwVaRNnNRQJLllhuGQp9Q1YJbmXTvA4zKNxkD8xIfvDWk5rdVmGzifuosEUnyVD1v7qSlwqqMNRunU7BCER9cFNSKxtJFey2Oi1ORIPCCYuJxnsOZjLc8prW/clVD7z4A+Rb+CFfGJWxn4jmYl/3699iRKRuQmzBRyddTkqBeSZ5IoS493IqCYqaCsM2amfdZRLKIjX+Xp1MDhFWAY6jE6bJibHtMi96YDeEqvcOEpyljUxXEHL7Xa9ImMd4qr9FzUYayGmHeI/OCxSXEXBczIGcmAEW2JaKREzoZzVxJc+hhOIecUmlrNXBGzWJilA4ZosAs1dshqyhCcKFc5Lw7jCEtQdh0RE1gpXI6gLya5RRK3vOUiKRFR8E1czDkhIeCAW6occ8rJg+xMQ0mbOkfOKiZ5v9ogNEKVp2/TQ7lTiIyyO11/YcJLCf246yQAmTHqd9GYSMjyRxukx4x7fCBMPIw5593pQezmBIUoNfOdWv4c0sQtUjng4ckxKEZl26+Cah6NPCBytZrxZSqdFlzhXA7bcOCLI3ZlbU27skyqL3zyIpMIsHY5OLuYOUW8Jh1bxrA81PxEQCJWHi7GyrTlCjSnl7M19qkxVj8yTotv9enHVlNnLAJkrWyc9sjoH9lpjMwZLpB1uWpmjLZL6bUHuooF/0KE3aPG6p+WxX+1XXf/lCAAsFx6ff/bH3kL7aeRpptounMCIEHaZw0nN7p9IjkrkYxDH0UaWU/tw+w7yl6kZo5CtOs/5rEJILK2YsxS5NThcMSwQamAY1ek1tgR/diLIVrfZKWXWHMYbWBpidmPHtCxaKcIDD2fVIs9BgAI/imE4dtt/KwKhnWZ5ccuV5vk7DcC7LMfGRIF4zzCBLYBKDLYHTdD4O0nC//PP/JSxWsYyxuGTrr4353oKGdnQWhonjLyJPDYcqiOlv/+AS5kLHD0lNAQFH7z7ARoIH+Y2Z5wA85BX2n6IgKP7SGL75g1rQgeP3ggSf/dZdOweA1iA+cYa+7hoTSOtBlFSQ0h3kBHwoNR4uRb1rPzYHiFdzSEHd6G7Z8ZaztH3GV6Yasss/wt76ti4ilsEuTKjWTIknBqeA2a7N0Zrn2GS0h5Yodb5PNcHX7qq9iZ5hJjHXzcECcT29gUX64A6qXcEDFX1moqh62Mt2Zsr1zmlRkLc71W1w6c0lFdRJcB/b5wf9pg12hpPQUh5SGS41P0qoW/h1/yPoCHWum6fCD/sLlphu/UZsU3jqxalppb1zzG6nPqo3G1ZmF4Uy+TmLfrHPGAkgWtfbejaYtlFJWK/Mm1nGvwwdbIqqnDvRXzFoLbokyT0PzwTeNes2DEGpwM5avoDMSlxS2FXFCRnTqVBi9XEgsD5NwRui1qB584CBNtDqMGwtAYNvdLM2a8F2iQIt6DnkKSrSZP8gIcPLlPSM3frnNaAFQGYCzHv9Hk1DBVwWQ0ZgRacDiExOW7AekR9/Jiou/QEKc0eYYkltgaW3jQeZrbwHnsnAzmwZI/m8dqMRNwjyMA/a/emEJpPy/AkzKqhpwp5pFDdExiTgUvzflTPxnOb/yCZzA/vBckjEtcDRhtdFCSQvURO1II41PeAUELOJCpc1skK4UkN4nOK0MowHgPMG10KOQ2VPuZboBhZOqSYfjBJ5sFTwmBfPnDnAk2TBDz5I7I+u0HTPWjLDDCRg4aU/qaps4onXlu6qDUX9mNURyjxxi790lQhy8N9gL6HGykbaGfRnV5IUBIh3FRb5m21dsePSLwXGtkbMmVu2jQJEiU4fSEYIN4ShHtrHjrxfxV/e9g/4rnV7rl5q13vo3Hm0YXXE4NZ8W5Z/kGx4AzdhKLN7gyZu5pkqBmPfq+NwJWvRdzWTTus7nvyeTERWRM5qQtqCleDEHkto0ANFdN+SrOqdNM0SIBukRjn6ssNyueXa3aJjS6wRMOxPVEvoqCmwsAqLY4uEgzBUHnUIv3VG/gzIT22Do9zbhSwbnjYiDQOGCYMn5XIaBo8MmcyHF9YmZs2IKvD4YcEm1j7FRGyVYiecc+OFhwigntNFFl2MxJ+h56nttDOE+T+EwLXFylnr21EwQxlokdJ+lY0doGwzIKziFzY0Rp0/LM+U4FLRHDjG2iyg7LISCYIyUidExe2b2YJish0g6DQCYWhskHQ+1GkXuGcJfa6fQUYM3EkKDEBmObDiKSW4Ihcwkg1DRRMq8pvkxET0gJhyCaEKPPRa197mUuBwRihpE44sHbCbYZZxyYrNNIDLjTJwf86h8Z7WyP378jaZhg09QdTcZg0CvPuhU94sMltgdklLKmET47CPG5gMuM5kBokySVBcu5zBTtKRUoBQie6dCfJmb/b4tfOM8UkvSYyvypIN5gOIQMkf+TmoG4M9Pkgi6dnJo/kgNJh8ydU897Eq4MjqR2VQeXn+DK5tFlwbxwpZQJiy51VOyCvHSbuLl8AW3J2k7P2GKSR0i1hZf8SXEI2IbD7QerheWYNvHHpaHApn58CM1hQolWb5rpL616LGVwBEUespSU5jDlGoCg9YPYNmqYKT3SYmwKToMewaLdoAABsM/JSIB5KJSMeSwmVshduEDKjnSAI0ROUmAg4uvOyPoqRhzRIInN0CtCEgFX7UwpqOCctlwGoSMZ5SKMVzeTStA5MbzRcFypOj7IOV9ZRKEh9RCNQsaR+CKbl25fhrm8IhzSblpA4ExqMpHmj92e15loy8ZqzuN52z0OzuAYRC/GHQpJrzc7GJtJN+GSzGgzMKKUnWSZXl0kXJgR+LNuUk/CIoMo9fwIJTSfqEjU2HOQXyWnvYz+l+kqxHm1CcYpuX4147Albd/PrCyUnsKeAFE2Jy4EQhe//acGU5Atm2yTTAZUxDSHhwTRlF9LV/tzbXxfxL+SfYH8n7r/A6isvic82r4AAAAAAElFTkSuQmCC", "backgroundColor": "#FFFFFF", "referencedComponentHashes": []