openapi: 3.1.0
info:
  title: Morio Management API
  description: >

    ## What am I looking at?

    This is the reference documentation for Morio's __Management API__.

    It is auto-generated from this API's OpenAPI v3 specification.


    ## Links


    - [Morio's GitHub repository at
    `certeu/morio`](https://github.com/certeu/morio/)

    - [Morio's online documentation at `morio.it`](https://morio.it/)
  license:
    name: EUPL
    url: >-
      https://joinup.ec.europa.eu/collection/eupl/eupl-guidelines-faq-infographics
  version: 0.5.0
  x-logo:
    url: /downloads/morio-card-embed.svg
    backgroundColor: transparent
    altText: Morio Logo
  contact:
    name: Morio Team
    url: https://github.com/certeu/morio
    email: morio@morio.it
externalDocs:
  description: Morio Online Documentation
  url: https://morio.it/
tags:
  - name: anonymous
    description: Endpoints that do not require authentication
  - name: accounts
    description: Endpoints for the local accounts identity provider
  - name: apikeys
    description: Endpoints for the local API keys identity provider
  - name: authentication
    description: Endpoints related to authentication
  - name: client packages
    description: Endpoints related to client packages
  - name: cryptography
    description: Endpoints related to cryptography
  - name: docker
    description: Endpoints that leverage the Docker daemon API
  - name: export
    description: Endpoints to export Morio data
  - name: settings
    description: Endpoints related to Morio settings
  - name: kv
    description: Endpoints for Morio's persistent key/value store
servers:
  - url: https://false/-/api
    description: Morio management API on false
components:
  schemas:
    Request:
      login:
        apikey:
          type: object
          properties:
            provider:
              type: string
              minLength: 2
              maxLength: 255
              enum:
                - apikey
              description: >-
                ID of the Morio identity provider. Must always be 'apikey' for
                authentication with an API key
            data:
              type: object
              properties:
                api_key:
                  type: string
                  minLength: 96
                  maxLength: 96
                  description: This is the API key (a UUID)
                api_key_secret:
                  type: string
                  minLength: 36
                  maxLength: 36
                  description: This is the API key secret
              required:
                - api_key
                - api_key_secret
              additionalProperties: false
              description: Holds data that is specific to the identity provider
          required:
            - provider
            - data
          additionalProperties: false
        local:
          type: object
          properties:
            provider:
              type: string
              minLength: 2
              maxLength: 255
              enum:
                - local
              description: >-
                ID of the Morio identity provider. Must always be 'local' for
                authentication with a local Morio account
            data:
              type: object
              properties:
                password:
                  type: string
                  minLength: 3
                  maxLength: 1024
                  description: The account's password
                username:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The username of the account
                token:
                  type: string
                  minLength: 3
                  maxLength: 12
                  description: The TOTP token (one-time password)
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
              required:
                - password
                - username
                - token
                - role
              additionalProperties: false
              description: Holds data that is specific to the identity provider
          required:
            - provider
            - data
          additionalProperties: false
        mrt:
          type: object
          properties:
            provider:
              type: string
              minLength: 2
              maxLength: 255
              enum:
                - mrt
              description: >-
                ID of the Morio identity provider. Must always be 'mrt' for
                authentication with the Morio Root Token
            data:
              type: object
              properties:
                mrt:
                  type: string
                  pattern: ^mrt\.[0-9a-z]+$
                  minLength: 68
                  maxLength: 68
                  description: The Morio Root Token
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
              required:
                - mrt
              additionalProperties: false
              description: Holds data that is specific to the identity provider
          required:
            - provider
            - data
          additionalProperties: false
        ldap:
          type: object
          properties:
            provider:
              type: string
              minLength: 2
              maxLength: 255
              description: ID of the Morio identity provider.
            data:
              type: object
              properties:
                password:
                  type: string
                  minLength: 3
                  maxLength: 1024
                  description: Password for the LDAP account
                username:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: Username of the LDAP account
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
              required:
                - password
                - username
                - role
              additionalProperties: false
              description: Holds data that is specific to the identity provider
          required:
            - provider
            - data
          additionalProperties: false
    Response:
      login:
        apikey:
          type: object
          properties:
            jwt:
              type: string
              description: The JSON Web Token
            data:
              type: object
              properties:
                user:
                  type: string
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                provider:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The ID of the identity provider to use for this account
              required:
                - role
              additionalProperties: false
          additionalProperties: false
        local:
          type: object
          properties:
            jwt:
              type: string
              description: The JSON Web Token
            data:
              type: object
              properties:
                user:
                  type: string
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                available_roles:
                  type: array
                  items:
                    type: string
                    enum:
                      - user
                      - manager
                      - operator
                      - engineer
                      - root
                    description: >-
                      The requested role to assign after authentication.  Must
                      be one of: user, manager, operator, engineer, root.
                      Although root can only be assigned by the MRT identity
                      provider.
                highest_role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                provider:
                  type: string
              required:
                - role
                - highest_role
              additionalProperties: false
          additionalProperties: false
        mrt:
          type: object
          properties:
            jwt:
              type: string
              description: The JSON Web Token
            data:
              type: object
              properties:
                user:
                  type: string
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                available_roles:
                  type: array
                  items:
                    type: string
                    enum:
                      - user
                      - manager
                      - operator
                      - engineer
                      - root
                    description: >-
                      The requested role to assign after authentication.  Must
                      be one of: user, manager, operator, engineer, root.
                      Although root can only be assigned by the MRT identity
                      provider.
                highest_role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                provider:
                  type: string
              required:
                - role
                - highest_role
              additionalProperties: false
          additionalProperties: false
        ldap:
          type: object
          properties:
            jwt:
              type: string
              description: The JSON Web Token
            data:
              type: object
              properties:
                user:
                  type: string
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                highest_role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                provider:
                  type: string
              required:
                - role
                - highest_role
              additionalProperties: false
          additionalProperties: false
  securitySchemes:
    api_key:
      type: http
      scheme: basic
    jwt_bearer:
      type: http
      scheme: bearer
    jwt_cookie:
      type: apiKey
      in: cookie
      name: morio
paths:
  /ca/certificates:
    get:
      operationId: listCertificates
      tags:
        - anonymous
        - cryptography
      summary: List CA certificates
      description: >-
        Returns the root and intermediate certificates of the Morio CA, along
        with the root certificate's fingerprint.
      responses:
        '200':
          description: Certificate data
          content:
            application/json:
              example:
                root_fingerprint: >-
                  50a3270a0988610145659cfb190121d1fcfd50141b953a783f354d840ad3bf9e
                root_certificate: "-----BEGIN CERTIFICATE-----\r\nMIIGdDCCBFygAwIBAgIBATANBgkqhkiG9w0BAQsFADCBnzELMAkGA1UEBhMCQkUx\r\nETAPBgNVBAgTCEJydXNzZWxzMREwDwYDVQQHEwhCcnVzc2VsczEZMBcGA1UEChMQ\r\nRW5naW5lZXJpbmcgVGVhbTEkMCIGA1UECxMbTW9yaW8gU3RhbmRhbG9uZSBTd2Fy\r\nbSBUZXN0MSkwJwYDVQQDEyBNb3JpbyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0\r\neTAeFw0yNDA3MjgxMzE4MzZaFw00NDA3MjgxMzE4MzZaMIGfMQswCQYDVQQGEwJC\r\nRTERMA8GA1UECBMIQnJ1c3NlbHMxETAPBgNVBAcTCEJydXNzZWxzMRkwFwYDVQQK\r\nExBFbmdpbmVlcmluZyBUZWFtMSQwIgYDVQQLExtNb3JpbyBTdGFuZGFsb25lIFN3\r\nYXJtIFRlc3QxKTAnBgNVBAMTIE1vcmlvIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y\r\naXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkK3oHb9U0thYdq2F\r\niOtXhsxIp+omgEczcYL6fE5B+y2Qy7vzWvOr1l9kZTPN6FkYlo0idXWa4RO9SgQ9\r\nBoOqR+NaOvYRvn836l9ohGztvPAfxdxB+BGoHcd3KFgeD8veedKaCTgeVWNUQMUK\r\nHPR3q8HQXs1bycJ15j9ktmhtCKnZvFJUXZrOskgWdE+0pXI8rfrBdXB2z9WrN9dr\r\n32bxLfsB+JycO1OLs/dJpkIyj1+nbAzdW6KpiDMTq9DJSQgGKbgYoz73cD6uSbnh\r\n+sLhSvpUy7Kz5O+L5Ne+q4LNI4Dt5St4FGBljDWxV1Oar2MRyhwbdeIb4yunIpgY\r\nr/iD4+vCDSEiIxwcS9H8n5qyHbhMO8Nh9zUsGsomBcB+UlPbdB3I0M1veLB2Eb3t\r\nJ/qf7mzdN4yO2i5gP3irvF6BYM4Yb1NNvBKioyWYsQYAl+xOWI7vLXB/1IKs3Xux\r\nFnKa8lTuo1PORwS8g+pXUMX2Otc6Ucf0r58YoZrvAFUQRfdf9uk1jAKGXLkhrWva\r\no+ZUDrB9VnjNUrCr6DoTam7mDRIlgkCpDje/alW5gLh5++l2gcG4Eht1I9L/O+Ug\r\nJptJ3gyrWm8RknXFqT3LsPwRYFFewjxfS0bsww/5+O5A3TKu/PKyINazT5SRYNI4\r\noXOSebu0b9WHMkYVqrmxoTGgd/sCAwEAAaOBuDCBtTAMBgNVHRMEBTADAQH/MAsG\r\nA1UdDwQEAwIC9DA7BgNVHSUENDAyBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUF\r\nBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgwEQYJYIZIAYb4QgEBBAQDAgD3MB0GA1Ud\r\nDgQWBBRLAieUVRyHBPxbwRQ05LyL7xSvNTApBgNVHREEIjAggh5wb2MtbW9yaW8t\r\nbm9kZTEuY2VydC5ldXJvcGEuZXUwDQYJKoZIhvcNAQELBQADggIBAHfuhwc9awm+\r\nnZy7l8iviAoFqo3ja6yt/efx9KoQOCWP0q7TX7YAqWs8JQGV1DxFE94j3flgSxx5\r\nEeNs1p7qFHpJ1wGoWbTS8X/ytAVjKQEzfzSNSIEfK5O7G9rKWnpMjI6ZnuAbB7MU\r\nA1h6vrA2373qj7VFJfupj6qanZ8/WmhEU6dfwL1Mp4trwY7g40FfQOq8+YyqWyU0\r\nZdO7DUJd+bO8KGV6l7z8U9CyVN3X4hAvpHZ4rhD5Kabq0o6pA3GaQaSWPJfAxCNF\r\n1uWR3rLH2aK68pKAUrGNXRibyhrWIuX5t/WTub9zZw7FMk01YSFwXnl46MHFTt/r\r\nZWJVVITPCLjAHJaBH7WX8KXAORuE1Lqm9Ynapj0+B8c3nGC4Th+BiHorB3+CF799\r\nEpRjHsNXQWLRgP09gl1g/yp4GYbImUN2tjkyb7OftF/F/AEIozFGeXK0ewk+gZKt\r\nlYyqKzOjNbL7pDVh3NWQlGV9ky6rr2XWvYFzb3vFkH5MNWMHE5kCpjuAU/tOzmpG\r\n55TpUcT2BY4rTM8mObGNiPu4Vy9VqCaTy+mUlyRHlUZIBaZTxqNmjHrQXDj/B9s9\r\n0ekS8ikHr7A3mYdbZrCi0dEfQTs9seiWfid59I4W7R7/J0czJHusKkpM/GE5lFcg\r\noUyCyR375Emn80zazBRiKvAey+gT1bPD\r\n-----END CERTIFICATE-----\r\n"
                intermediate_certificate: "-----BEGIN CERTIFICATE-----\r\nMIIGfDCCBGSgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBnzELMAkGA1UEBhMCQkUx\r\nETAPBgNVBAgTCEJydXNzZWxzMREwDwYDVQQHEwhCcnVzc2VsczEZMBcGA1UEChMQ\r\nRW5naW5lZXJpbmcgVGVhbTEkMCIGA1UECxMbTW9yaW8gU3RhbmRhbG9uZSBTd2Fy\r\nbSBUZXN0MSkwJwYDVQQDEyBNb3JpbyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0\r\neTAeFw0yNDA3MjgxMzE4NDFaFw0yOTA3MjgxMzE4NDFaMIGnMQswCQYDVQQGEwJC\r\nRTERMA8GA1UECBMIQnJ1c3NlbHMxETAPBgNVBAcTCEJydXNzZWxzMRkwFwYDVQQK\r\nExBFbmdpbmVlcmluZyBUZWFtMSQwIgYDVQQLExtNb3JpbyBTdGFuZGFsb25lIFN3\r\nYXJtIFRlc3QxMTAvBgNVBAMTKE1vcmlvIEludGVybWVkaWF0ZSBDZXJ0aWZpY2F0\r\nZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDEbgzx\r\n0dF680J70HM+CwPDQM7owZf/nQnvHkxelrNOE1JE845kMbO+LC07WX8C1anizDJQ\r\npHiMzMWuCdziqUUSl19aAUfrP53ei3IvIC3R9mXusKLnrTEXauC7er1h2vsoz9F5\r\nmULW7Lsf/mdKu6MsXalJyDpWLBtZz3zznzoTd/rwKnFUnauy/rkTuwDqzRho1/89\r\n50sNdUgSQ14srXGxQmXyAeH9PZk3c40mLHmSYqJhP1H6O0t/snXbfO4s+5UDaTiF\r\n+3ANjeeJDUeDtXxg2hGiCPssrWeCGr331Jy4XU3nwaTGH7EmLep4IjE1+7qcOSl3\r\nkOWex7CmY991/PZSneHE0w4YAmudZTfHl7lA2RpVxFMkbIcbx7lMll/zfrvqax6W\r\nx7TIuqYoPwofr8hwxiKbxVCqW0UudxRrJXZLMlTavXIxVfEOmR7frfl/CmiyybwG\r\nzLqAsILof8azYWjqR+hwUKrj/UR05fiQfJmC8WGfGXWqM/YKUpIheG+FWs6jKHkm\r\nNcmANp+w6ucTbV++1vdhj8vLmjELFf9JRptSZxMQpUA2gVfF2Hbn+jyDQyhFSElk\r\n2K0KKQRHqMYRquRVZCHWZnaLyESh5bQGpt0q3+ZqlEfSM57h8eCmmd+ia1aVDeWU\r\nGlpe3mJPtNef9HBojkytvXqcQOOw0RDI6JBnuQIDAQABo4G4MIG1MAwGA1UdEwQF\r\nMAMBAf8wCwYDVR0PBAQDAgL0MDsGA1UdJQQ0MDIGCCsGAQUFBwMBBggrBgEFBQcD\r\nAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCDARBglghkgBhvhCAQEEBAMC\r\nAPcwHQYDVR0OBBYEFEsCJ5RVHIcE/FvBFDTkvIvvFK81MCkGA1UdEQQiMCCCHnBv\r\nYy1tb3Jpby1ub2RlMS5jZXJ0LmV1cm9wYS5ldTANBgkqhkiG9w0BAQsFAAOCAgEA\r\nTN9kHQBILMqCQSpYINywlmnchGTsqzvisE9p3IzqDWNMuQybwAt6/3LetE1SomYc\r\nYmh2fS8MmAHs+xr7ZfldTSVBUMXj+R2p176d3AmToR4PQ2qFdLGT+JoMOk9qsMG6\r\nNyozmLKvT1TIAt2pwjGSfX0GLSy2RS+mUpxUHpaDKLozTk1YJZJnAzX9l6SJz+m/\r\n77XpmTxMTKCQY0WsKLtohlDAs9lrm9MAJir7XKbMyiHE0L4OiW1pgozxvPxeTBUz\r\ngEXz4laHvrbN/rRwzqdlZ1XFzgjuOT1Tfkn8fzbjqZVqs0muyTqsftkKUyi3rgY8\r\nH1RKqt4r+h86XSXTR3/M3Z7IZYQ9ts0qDhPyrya9S9V7ZPO7GWKcMIA2JhjAn5/0\r\nvcvrXFoE6bnXagxT6p+lUJqUycecpDgN4TFcRCTB/rvC7H6Qi7v7z3OU2kjYQp7n\r\nQjiAYmeXwoqB27hlBjKOpS3dgX34/HjhYJJ6JSZ5r89ZhSgQraIvNpf8HamrKtTz\r\nVsipAq4Ol2rkMwuiIRZGfE3eFppO4aWGs6nIwwrI00ttO241a8MVv95ruPFoULLS\r\nZJ3dD2kDgEZ3F9pDlJyty0T4PPNkwu35ysldWPXce9zy/7AFmxujMnd4bB+0tO0t\r\nDmghEeLnxtbFVX9qGQYM4a07Y7s7jFuIlXeZqMDxHgU=\r\n-----END CERTIFICATE-----\r\n"
          headers:
            ratelimit: &ref_0
              description: Rate limit details
              schema:
                type: string
            ratelimit-policy: &ref_1
              description: Rate limit policy details
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: &ref_3
                status: 401
                title: Authentication required
                detail: The request was not properly authenticated.
          headers: &ref_2
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: &ref_48
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: &ref_4
                status: 429
                title: Rate limit exceeded
                detail: You have made too many requests. Please try again later.
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: &ref_5
                status: 500
                title: Internal server error
                detail: >-
                  The request failed with an internal server error that we do
                  not know how to recover from.
        '503':
          description: Unable to load the requested data
          content:
            application/problem+json:
              example: &ref_6
                status: 503
                title: Unable to load the requested data
                detail: >-
                  We were unable to retrieve the requested data from the
                  internal state.
  /pubkey:
    get:
      operationId: getPubkey
      tags:
        - anonymous
        - cryptography
      summary: Get public key
      description: >-
        Returns Morio's internal public key. This can be used to validate
        Morio's JWTs
      responses:
        '200':
          description: Public Key
          content:
            application/json:
              example:
                pubkey: >
                  -----BEGIN PUBLIC KEY-----

                  MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2w8z3zdnU8oAWYD8UfQ9

                  Ar3xVlEo2PIC4ZNZ7AYsXitFJ8NNdHvXqO5VIC3R2LHIsdn9wPkaaI5sAEcGNzeL

                  2AD4QzDCWIIYWfLLS1MTVVd9hW1HzHZxzvng4WJV3vuULCvYh+9bcy0xoKzq9OzE

                  jETDSFpsTEl3VGHE/J2XN/bh4I6qYvrze2ZAMtYfu1Xd7lk6tXooQO8WGaVdH/5/

                  R3HCoiFBTGJAa1VLlFp7Zuc2P4Gi7lbI1VAANCmN38olkyP2yrqPAtaFzAHZdmUZ

                  P+1BkJ7OQ2Z0uNKrpMiZZaweuaFGnmf1N3YsAJNwNvVksKWJJMilpNZbWQsm2QQj

                  U5i/MKSngXx7yyzATAxwH/JZrXYamNEdWFxFUdNaAleO3cSXQVxhqzcCb7JthlhG

                  n1DVvuM2kPGJJr8iSylXpX2Sge1Z9dnnrWpK+7/+mVTgYH+dlqZEHf7NC8cw7D/M

                  SN9phe5P6gCOppTqDNFi/3QsgdQ8w9kKhvD2d77I1pzTvjXqHxrFnZ/Je/8iOpa8

                  HnlRWso2II0Wn6BNOxNK5K/4TRFcOdVS+RbWaQ/+xuvX3/8GMeuOybwydqtIUXWs

                  ropJOuQ/yET5BtYVnalr4V9BfKmALfcYenIrk9sWLe3f+FG34kGF1egaWy2c4HFV

                  2zVgK4iWU+nnSlpFGcwAxVUCAwEAAQ==

                  -----END PUBLIC KEY-----
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
        '503':
          description: Unable to load the requested data
          content:
            application/problem+json:
              example: *ref_6
  /pubkey.pem:
    get:
      operationId: getPubkeyPem
      tags:
        - anonymous
        - cryptography
      summary: Get public key.pem
      description: >-
        Returns Morio's internal public key as a PEM file. This can be used to
        validate Morio's JWTs
      responses:
        '200':
          description: PublicKey.pem
          content:
            application/x-pem-file:
              example: |
                -----BEGIN PUBLIC KEY-----
                MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2w8z3zdnU8oAWYD8UfQ9
                Ar3xVlEo2PIC4ZNZ7AYsXitFJ8NNdHvXqO5VIC3R2LHIsdn9wPkaaI5sAEcGNzeL
                2AD4QzDCWIIYWfLLS1MTVVd9hW1HzHZxzvng4WJV3vuULCvYh+9bcy0xoKzq9OzE
                jETDSFpsTEl3VGHE/J2XN/bh4I6qYvrze2ZAMtYfu1Xd7lk6tXooQO8WGaVdH/5/
                R3HCoiFBTGJAa1VLlFp7Zuc2P4Gi7lbI1VAANCmN38olkyP2yrqPAtaFzAHZdmUZ
                P+1BkJ7OQ2Z0uNKrpMiZZaweuaFGnmf1N3YsAJNwNvVksKWJJMilpNZbWQsm2QQj
                U5i/MKSngXx7yyzATAxwH/JZrXYamNEdWFxFUdNaAleO3cSXQVxhqzcCb7JthlhG
                n1DVvuM2kPGJJr8iSylXpX2Sge1Z9dnnrWpK+7/+mVTgYH+dlqZEHf7NC8cw7D/M
                SN9phe5P6gCOppTqDNFi/3QsgdQ8w9kKhvD2d77I1pzTvjXqHxrFnZ/Je/8iOpa8
                HnlRWso2II0Wn6BNOxNK5K/4TRFcOdVS+RbWaQ/+xuvX3/8GMeuOybwydqtIUXWs
                ropJOuQ/yET5BtYVnalr4V9BfKmALfcYenIrk9sWLe3f+FG34kGF1egaWy2c4HFV
                2zVgK4iWU+nnSlpFGcwAxVUCAwEAAQ==
                -----END PUBLIC KEY-----
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
        '503':
          description: Unable to load the requested data
          content:
            application/problem+json:
              example: *ref_6
  /downloads:
    get:
      tags: &ref_7
        - anonymous
      operationId: listDownloads
      summary: List downloads
      description: >-
        Returns a list of files in the download folder that can be downloaded
        from the API
      responses:
        '200':
          description: List of files
          content:
            application/json:
              example:
                - /downloads/certs
                - /downloads/certs/root.pem
                - /downloads/certs/intermediate.pem
                - /downloads/certs/db.pem
                - /downloads/certs/console.pem
                - /downloads/certs/broker.pem
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
        '503':
          description: Unable to load the requested data
          content:
            application/problem+json:
              example: *ref_6
  /idps:
    get:
      operationId: listIdps
      tags:
        - anonymous
        - authentication
      summary: List identity providers
      description: >-
        Returns information about the available identity providers (IDPs).
        Useful for frontend integration.
      responses:
        '200':
          description: List of IDPs
          content:
            application/json:
              example:
                idps:
                  apikey:
                    id: apikey
                    provider: apikey
                    label: API Key
                    about: false
                  mrt:
                    id: mrt
                    provider: mrt
                    about: false
                  local:
                    id: local
                    provider: local
                    label: Morio Account
                    about: false
                  ad:
                    id: ad
                    provider: ldap
                    label: Active Directory
                    about: Morio Tokyo branch on-prem Active Directory
                ui:
                  visibility:
                    mrt: icon
                    local: icon
                    apikey: icon
                  order:
                    - ad
                    - local
                    - apikey
                    - mrt
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
        '503':
          description: Unable to load the requested data
          content:
            application/problem+json:
              example: *ref_6
  /jwks:
    get:
      operationId: listJwks
      tags:
        - anonymous
        - authentication
      summary: List JWKS
      description: >-
        Returns information to verify the JSON Web Tokens (JWT) were issued by
        this Morio deployment. Useful for integration with exteral services. See
        [RFC 7517](https://datatracker.ietf.org/doc/html/rfc7517)
      responses:
        '200':
          description: JWKS data
          content:
            application/json:
              example:
                keys:
                  - kty: RSA
                    kid: YEKFMAkSJihz6zIBs6a-gQ9iEOxuljm_A3Xg6mkiAPY
                    'n': >-
                      yriNzCVnGQ56dyOVhoPn4J2xlq4_SW6YEoq2FAM1uXtY2FNg1nAtytdY7SKzyuSF1U5sOQ77RmACiXIX-tkuTTPl_kNZQ4udH-c2w01_So9uj9rjDSwvtilHOn4y-l9qYyqBM93jBnjWGFTBNpmDHO4ctVorI6zK1mE7ILDTEpz1lPiZUz22feLOSuCQfnGNJsoU5msSJCiOVtfi37yFQ-ZAQtcJGBe11xRkvjegQJv9UB67tnD3DkRt7FnNDWHJmIcPOyySHJ7CH_ajRZj6_S0BVdlTWNiarKGzTlRCpQCqVFaiu8g6H8ANSoWypIazoOA-iJ3n8VSgvxiVAX1vVzG_Z44Vd8JpEpOWeC36qfX2LNKg0KvUEgbdMt6NB4RUsXVgdIGT02h_RRVmTY5FZCcWtA6pqlJ9sd27f5t0IWAMLJLpUq6WjOVTidUxon7xVGLot26DP3S7KnVS1FHZFsUQn5uQ2kNbzWyr6gha3YbvYk1Ss6bRu9Zzv4mKXaXn-rASvuSHZClPo0k4wEfQ7kWRJgwNe9hbZRh_MGl4VbGhg0TbaPwqYucmffecjrhNEAPsjt5R7_Ukc4lg8y4miPn6QPsGBfNgiGfhdWLy_FXA-Nn2DJqsDJcieNJp0rOUDGRJSj64s8Y1dpOi14ZjErz3x9OZBHk1Nw1NAQ3Z96U
                    e: AQAB
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
        '503':
          description: Unable to load the requested data
          content:
            application/problem+json:
              example: *ref_6
  /limits:
    get:
      operationId: rateLimits
      tags:
        - anonymous
      summary: Get info on rate limits
      description: >-
        Returns information on your current rate limits. The API is rate-limited
        per IP address, this endpoint lets you see how many requests you have
        made within the rate limiting window, and how long before it will reset.
      responses:
        '200':
          description: Rate limiting data
          content:
            application/json:
              example:
                ip: 10.13.22.6
                hits: 6
                reset_time: '2024-09-12T09:37:49.723Z'
                reset_seconds: 899
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
        '503':
          description: Unable to load the requested data
          content:
            application/problem+json:
              example: *ref_6
  /status:
    get:
      operationId: getStatus
      tags: *ref_7
      summary: Get status
      description: Returns information about how Morio is doing. Useful for monitoring.
      responses:
        '200':
          description: Morio Status
          content:
            application/json:
              example:
                info:
                  about: Morio Management API
                  name: '@morio/api'
                  production: false
                  version: 0.2.0
                state:
                  ephemeral: false
                  uptime: 37
                  start_time: 1722232994724
                  reload_count: 1
                  config_resolved: true
                  settings_serial: 1722172709838
                core:
                  info:
                    about: Morio Core
                    name: '@morio/core'
                    production: false
                    version: 0.2.0
                  status:
                    cluster:
                      code: 0
                      color: green
                      time: 1722233017641
                      updated: 1722233017641
                      leader_serial: 1
                      leading: true
                      msg: Everything is ok
                    nodes:
                      morio-node1.tokyo.morio.it:
                        api: 0
                        broker: 0
                        db: 0
                        ca: 0
                        proxy: 0
                        ui: 0
                        console: 0
                  nodes:
                    39b0b5fd-6648-41f8-b3b9-df96c5d11579:
                      fqdn: morio-node1.tokyo.morio.it
                      hostname: poc-morio-node1
                      ip: 10.123.12.15
                      serial: 1
                      uuid: 39b0b5fd-6648-41f8-b3b9-df96c5d11579
                      settings: 1722172709838
                  node:
                    uptime: 46633
                    cluster: 8602906f-5437-4cce-b150-7c3387da36fa
                    node: 39b0b5fd-6648-41f8-b3b9-df96c5d11579
                    node_serial: 1
                    ephemeral: false
                    reconfigure_count: 1
                    config_resolved: true
                    settings_serial: 1722172709838
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
        '503':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                Unable to load status data from Morio Core:
                  value:
                    status: 503
                    title: Unable to load status data from Morio Core
                    detail: >-
                      When reaching out to Morio Core, we received a status code
                      503.
                Unable to load the requested data:
                  value: *ref_6
  /up:
    get:
      operationId: upHealthcheck
      tags: *ref_7
      summary: API Healthcheck
      description: >-
        Returns status code 204 if the API is up. No response body or data is
        returned. Useful for a quick healhcheck.
      responses:
        '204':
          description: No response body
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /validate/settings:
    post:
      operationId: validateSettings
      tags:
        - anonymous
        - settings
      summary: Validate settings
      description: Will validate settings so you can deploy them with confidence.
      requestBody:
        description: The Morio settings you want to validate
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                cluster:
                  type: object
                  properties:
                    name:
                      type: string
                      pattern: ^[A-Za-z0-9\s-_,.;:()]+$
                      minLength: 2
                      maxLength: 255
                    broker_nodes:
                      type: array
                      items:
                        type: string
                      minItems: 1
                      maxItems: 9
                    flanking_nodes:
                      type: array
                      items:
                        type: string
                      minItems: 0
                      maxItems: 36
                    fqdn:
                      type: string
                      oneOf:
                        - {}
                        - x-required: true
                  required:
                    - name
                    - broker_nodes
                  additionalProperties: false
                metadata:
                  type: object
                  properties:
                    comment:
                      anyOf:
                        - type: string
                        - type: array
                          items:
                            type: string
                    version:
                      anyOf:
                        - type: string
                        - type: number
                          format: float
                  additionalProperties: false
                connector:
                  type: object
                  properties: {}
                  additionalProperties: false
                tokens:
                  type: object
                  properties:
                    flags:
                      type: object
                      properties:
                        DISABLE_ROOT_TOKEN:
                          type: boolean
                        DISABLE_IDP_APIKEY:
                          type: boolean
                        DISABLE_IDP_LDAP:
                          type: boolean
                        DISABLE_IDP_LOCAL:
                          type: boolean
                        DISABLE_IDP_MRT:
                          type: boolean
                        DISABLE_IDP_OIDC:
                          type: boolean
                        DISABLE_SERVICE_UI:
                          type: boolean
                        ENFORCE_HTTP_MTLS:
                          type: boolean
                        RESEED_ON_RELOAD:
                          type: boolean
                      additionalProperties: false
                    secrets:
                      type: object
                      properties: {}
                      additionalProperties: false
                    vars:
                      type: object
                      properties: {}
                      additionalProperties: false
                  additionalProperties: false
                iam:
                  type: object
                  properties:
                    providers:
                      type: object
                      properties: {}
                      additionalProperties: false
                    ui:
                      type: object
                      properties:
                        visibility:
                          type: object
                          properties: {}
                          additionalProperties: false
                        order:
                          type: array
                          items: {}
                      additionalProperties: false
                  additionalProperties: false
                vault:
                  type: object
                  properties:
                    url:
                      type: string
                    verify_certificate:
                      type: boolean
                    role:
                      type: string
                    jwt_auth_path:
                      type: string
                    kv_path:
                      type: string
                  required:
                    - url
                  additionalProperties: false
                preseed:
                  anyOf:
                    - type: object
                      properties:
                        url:
                          type: string
                        git:
                          type: object
                          properties: {}
                          additionalProperties:
                            type: object
                            properties:
                              id:
                                type: string
                              url:
                                type: string
                              ref:
                                type: string
                              user:
                                anyOf:
                                  - type: string
                                  - type: object
                                    properties:
                                      vault:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              path:
                                                type: string
                                              key:
                                                type: string
                                              instance:
                                                type: string
                                            required:
                                              - path
                                              - key
                                            additionalProperties: false
                                    additionalProperties: false
                              token:
                                anyOf:
                                  - type: string
                                  - type: object
                                    properties:
                                      vault:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              path:
                                                type: string
                                              key:
                                                type: string
                                              instance:
                                                type: string
                                            required:
                                              - path
                                              - key
                                            additionalProperties: false
                                    additionalProperties: false
                            additionalProperties: false
                        base:
                          anyOf:
                            - type: object
                              properties:
                                url:
                                  type: string
                                headers:
                                  type: object
                                  properties: {}
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              required:
                                - url
                              additionalProperties: false
                            - type: object
                              properties:
                                gitlab:
                                  type: object
                                  properties:
                                    url:
                                      type: string
                                    project_id:
                                      type: number
                                      format: float
                                    file_path:
                                      type: string
                                    ref:
                                      type: string
                                    token:
                                      anyOf:
                                        - type: string
                                        - type: object
                                          properties:
                                            vault:
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  properties:
                                                    path:
                                                      type: string
                                                    key:
                                                      type: string
                                                    instance:
                                                      type: string
                                                  required:
                                                    - path
                                                    - key
                                                  additionalProperties: false
                                          additionalProperties: false
                                  required:
                                    - url
                                    - project_id
                                    - file_path
                                    - token
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              additionalProperties: false
                            - type: object
                              properties:
                                github:
                                  type: object
                                  properties:
                                    url:
                                      type: string
                                    owner:
                                      type: string
                                    repo:
                                      type: string
                                    file_path:
                                      type: string
                                    ref:
                                      type: string
                                    token:
                                      anyOf:
                                        - type: string
                                        - type: object
                                          properties:
                                            vault:
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  properties:
                                                    path:
                                                      type: string
                                                    key:
                                                      type: string
                                                    instance:
                                                      type: string
                                                  required:
                                                    - path
                                                    - key
                                                  additionalProperties: false
                                          additionalProperties: false
                                  required:
                                    - owner
                                    - repo
                                    - file_path
                                    - token
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              additionalProperties: false
                            - type: string
                        overlays:
                          anyOf:
                            - type: array
                              items:
                                anyOf:
                                  - type: object
                                    properties:
                                      url:
                                        type: string
                                      headers:
                                        type: object
                                        properties: {}
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    required:
                                      - url
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      gitlab:
                                        type: object
                                        properties:
                                          url:
                                            type: string
                                          project_id:
                                            type: number
                                            format: float
                                          file_path:
                                            type: string
                                          ref:
                                            type: string
                                          token:
                                            anyOf:
                                              - type: string
                                              - type: object
                                                properties:
                                                  vault:
                                                    anyOf:
                                                      - type: string
                                                      - type: object
                                                        properties:
                                                          path:
                                                            type: string
                                                          key:
                                                            type: string
                                                          instance:
                                                            type: string
                                                        required:
                                                          - path
                                                          - key
                                                        additionalProperties: false
                                                additionalProperties: false
                                        required:
                                          - url
                                          - project_id
                                          - file_path
                                          - token
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      github:
                                        type: object
                                        properties:
                                          url:
                                            type: string
                                          owner:
                                            type: string
                                          repo:
                                            type: string
                                          file_path:
                                            type: string
                                          ref:
                                            type: string
                                          token:
                                            anyOf:
                                              - type: string
                                              - type: object
                                                properties:
                                                  vault:
                                                    anyOf:
                                                      - type: string
                                                      - type: object
                                                        properties:
                                                          path:
                                                            type: string
                                                          key:
                                                            type: string
                                                          instance:
                                                            type: string
                                                        required:
                                                          - path
                                                          - key
                                                        additionalProperties: false
                                                additionalProperties: false
                                        required:
                                          - owner
                                          - repo
                                          - file_path
                                          - token
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    additionalProperties: false
                                  - type: string
                            - type: string
                        keys:
                          type: object
                          properties:
                            data:
                              type: string
                            key:
                              type: string
                              pattern: .*ENCRYPTED PRIVATE KEY.*
                            seal:
                              type: object
                              properties:
                                hash:
                                  type: string
                                salt:
                                  type: string
                              required:
                                - hash
                                - salt
                              additionalProperties: false
                          required:
                            - data
                            - key
                          additionalProperties: false
                      additionalProperties: false
                    - type: string
                client:
                  type: object
                  properties:
                    modules:
                      type: object
                      properties: {}
                      additionalProperties:
                        type: string
                  additionalProperties: false
              additionalProperties: false
            example: &ref_8
              name: Morio Standalone Example
              broker_nodes:
                - morio-node1.tokyo.morio.it
              tokens: &ref_35
                flags:
                  HEADLESS_MORIO: false
                  DISABLE_ROOT_TOKEN: false
                secrets:
                  AD_PASSWORD: aa;S009)) _S asd0AS
              iam: &ref_36
                providers:
                  apikey:
                    provider: apikey
                    id: apikey
                    label: API Key
                  mrt: {}
                  local:
                    provider: local
                    id: local
                    label: Morio Account
                  ad:
                    provider: ldap
                    id: ad
                    about: Morio Tokyo branch on-prem Active Directory
                    server:
                      url: ldaps://dc1.tokyo.morio.it
                      bindDN: CN=morio-ldap,OU=Users,DC=tokyo,DC=morio,DC=it
                      bindCredentials: '{{{ AD_PASSWORD }}}'
                      searchBase: OU=Users-EU,DC=tokyo,DC=morio,DC=it
                      searchFilter: (&(objectClass=user)(samaccountname={{username}}))
                    username_field: samaccountname
                    label: Active Directory
                    rbac:
                      user:
                        attribute: samaccountname
                        regex: .
                      root:
                        attribute: samaccountname
                        regex: ^(?:joostdecock|sorchanidhubhghaill)$
                    verify_certificate: true
              ui: &ref_37
                visibility:
                  mrt: icon
                  local: icon
                  apikey: icon
                order:
                  - ad
                  - local
                  - apikey
                  - mrt
      responses:
        '200':
          description: Validation report
          content:
            application/json:
              example: &ref_9
                valid: true
                deployable: false
                errors: []
                warnings:
                  - >-
                    Node 1 runs Morio, but is not in ephemeral mode, its
                    settings would be overwritten
                info:
                  - Settings passed schema validation
                  - 'Validating node 1: morio-node1.tokyo.morio.it'
                  - 'Node 1 resolves to: 10.123.12.15'
                  - Node 1 is reachable over HTTPS
                validated_settings: *ref_8
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: &ref_10
                status: 400
                title: This request violates the data schema
                detail: >-
                  The request data failed validation against the Morio data
                  schema. This means the request is invalid.
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /validate/preseed:
    post:
      operationId: validatePreseedSettings
      tags:
        - anonymous
        - settings
      summary: Validate preseed settings
      description: Will validate preseed settings so you can deploy them with confidence.
      requestBody:
        description: The Morio preseed settings you want to validate
        required: true
        content:
          application/json:
            schema:
              anyOf:
                - type: object
                  properties:
                    url:
                      type: string
                    git:
                      type: object
                      properties: {}
                      additionalProperties:
                        type: object
                        properties:
                          id:
                            type: string
                          url:
                            type: string
                          ref:
                            type: string
                          user:
                            anyOf:
                              - type: string
                              - type: object
                                properties:
                                  vault:
                                    anyOf:
                                      - type: string
                                      - type: object
                                        properties:
                                          path:
                                            type: string
                                          key:
                                            type: string
                                          instance:
                                            type: string
                                        required:
                                          - path
                                          - key
                                        additionalProperties: false
                                additionalProperties: false
                          token:
                            anyOf:
                              - type: string
                              - type: object
                                properties:
                                  vault:
                                    anyOf:
                                      - type: string
                                      - type: object
                                        properties:
                                          path:
                                            type: string
                                          key:
                                            type: string
                                          instance:
                                            type: string
                                        required:
                                          - path
                                          - key
                                        additionalProperties: false
                                additionalProperties: false
                        additionalProperties: false
                    base:
                      anyOf:
                        - type: object
                          properties:
                            url:
                              type: string
                            headers:
                              type: object
                              properties: {}
                              additionalProperties: false
                            keys:
                              type: object
                              properties:
                                data:
                                  type: string
                                key:
                                  type: string
                                  pattern: .*ENCRYPTED PRIVATE KEY.*
                                seal:
                                  type: object
                                  properties:
                                    hash:
                                      type: string
                                    salt:
                                      type: string
                                  required:
                                    - hash
                                    - salt
                                  additionalProperties: false
                              required:
                                - data
                                - key
                              additionalProperties: false
                          required:
                            - url
                          additionalProperties: false
                        - type: object
                          properties:
                            gitlab:
                              type: object
                              properties:
                                url:
                                  type: string
                                project_id:
                                  type: number
                                  format: float
                                file_path:
                                  type: string
                                ref:
                                  type: string
                                token:
                                  anyOf:
                                    - type: string
                                    - type: object
                                      properties:
                                        vault:
                                          anyOf:
                                            - type: string
                                            - type: object
                                              properties:
                                                path:
                                                  type: string
                                                key:
                                                  type: string
                                                instance:
                                                  type: string
                                              required:
                                                - path
                                                - key
                                              additionalProperties: false
                                      additionalProperties: false
                              required:
                                - url
                                - project_id
                                - file_path
                                - token
                              additionalProperties: false
                            keys:
                              type: object
                              properties:
                                data:
                                  type: string
                                key:
                                  type: string
                                  pattern: .*ENCRYPTED PRIVATE KEY.*
                                seal:
                                  type: object
                                  properties:
                                    hash:
                                      type: string
                                    salt:
                                      type: string
                                  required:
                                    - hash
                                    - salt
                                  additionalProperties: false
                              required:
                                - data
                                - key
                              additionalProperties: false
                          additionalProperties: false
                        - type: object
                          properties:
                            github:
                              type: object
                              properties:
                                url:
                                  type: string
                                owner:
                                  type: string
                                repo:
                                  type: string
                                file_path:
                                  type: string
                                ref:
                                  type: string
                                token:
                                  anyOf:
                                    - type: string
                                    - type: object
                                      properties:
                                        vault:
                                          anyOf:
                                            - type: string
                                            - type: object
                                              properties:
                                                path:
                                                  type: string
                                                key:
                                                  type: string
                                                instance:
                                                  type: string
                                              required:
                                                - path
                                                - key
                                              additionalProperties: false
                                      additionalProperties: false
                              required:
                                - owner
                                - repo
                                - file_path
                                - token
                              additionalProperties: false
                            keys:
                              type: object
                              properties:
                                data:
                                  type: string
                                key:
                                  type: string
                                  pattern: .*ENCRYPTED PRIVATE KEY.*
                                seal:
                                  type: object
                                  properties:
                                    hash:
                                      type: string
                                    salt:
                                      type: string
                                  required:
                                    - hash
                                    - salt
                                  additionalProperties: false
                              required:
                                - data
                                - key
                              additionalProperties: false
                          additionalProperties: false
                        - type: string
                    overlays:
                      anyOf:
                        - type: array
                          items:
                            anyOf:
                              - type: object
                                properties:
                                  url:
                                    type: string
                                  headers:
                                    type: object
                                    properties: {}
                                    additionalProperties: false
                                  keys:
                                    type: object
                                    properties:
                                      data:
                                        type: string
                                      key:
                                        type: string
                                        pattern: .*ENCRYPTED PRIVATE KEY.*
                                      seal:
                                        type: object
                                        properties:
                                          hash:
                                            type: string
                                          salt:
                                            type: string
                                        required:
                                          - hash
                                          - salt
                                        additionalProperties: false
                                    required:
                                      - data
                                      - key
                                    additionalProperties: false
                                required:
                                  - url
                                additionalProperties: false
                              - type: object
                                properties:
                                  gitlab:
                                    type: object
                                    properties:
                                      url:
                                        type: string
                                      project_id:
                                        type: number
                                        format: float
                                      file_path:
                                        type: string
                                      ref:
                                        type: string
                                      token:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              vault:
                                                anyOf:
                                                  - type: string
                                                  - type: object
                                                    properties:
                                                      path:
                                                        type: string
                                                      key:
                                                        type: string
                                                      instance:
                                                        type: string
                                                    required:
                                                      - path
                                                      - key
                                                    additionalProperties: false
                                            additionalProperties: false
                                    required:
                                      - url
                                      - project_id
                                      - file_path
                                      - token
                                    additionalProperties: false
                                  keys:
                                    type: object
                                    properties:
                                      data:
                                        type: string
                                      key:
                                        type: string
                                        pattern: .*ENCRYPTED PRIVATE KEY.*
                                      seal:
                                        type: object
                                        properties:
                                          hash:
                                            type: string
                                          salt:
                                            type: string
                                        required:
                                          - hash
                                          - salt
                                        additionalProperties: false
                                    required:
                                      - data
                                      - key
                                    additionalProperties: false
                                additionalProperties: false
                              - type: object
                                properties:
                                  github:
                                    type: object
                                    properties:
                                      url:
                                        type: string
                                      owner:
                                        type: string
                                      repo:
                                        type: string
                                      file_path:
                                        type: string
                                      ref:
                                        type: string
                                      token:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              vault:
                                                anyOf:
                                                  - type: string
                                                  - type: object
                                                    properties:
                                                      path:
                                                        type: string
                                                      key:
                                                        type: string
                                                      instance:
                                                        type: string
                                                    required:
                                                      - path
                                                      - key
                                                    additionalProperties: false
                                            additionalProperties: false
                                    required:
                                      - owner
                                      - repo
                                      - file_path
                                      - token
                                    additionalProperties: false
                                  keys:
                                    type: object
                                    properties:
                                      data:
                                        type: string
                                      key:
                                        type: string
                                        pattern: .*ENCRYPTED PRIVATE KEY.*
                                      seal:
                                        type: object
                                        properties:
                                          hash:
                                            type: string
                                          salt:
                                            type: string
                                        required:
                                          - hash
                                          - salt
                                        additionalProperties: false
                                    required:
                                      - data
                                      - key
                                    additionalProperties: false
                                additionalProperties: false
                              - type: string
                        - type: string
                    keys:
                      type: object
                      properties:
                        data:
                          type: string
                        key:
                          type: string
                          pattern: .*ENCRYPTED PRIVATE KEY.*
                        seal:
                          type: object
                          properties:
                            hash:
                              type: string
                            salt:
                              type: string
                          required:
                            - hash
                            - salt
                          additionalProperties: false
                      required:
                        - data
                        - key
                      additionalProperties: false
                  additionalProperties: false
                - type: string
            example:
              base: &ref_38
                github:
                  owner: morio
                  repo: preseed
                  file_path: settings/standalone.yaml
                  ref: main
                  token: >-
                    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
              overlays: &ref_39
                - settings/overlays/idp-ad.yaml
                - settings/overlays/idp-apikey.yaml
                - settings/overlays/idp-local.yaml
                - settings/overlays/idp-mrt.yaml
      responses:
        '200':
          description: Validation report
          content:
            application/json:
              example: *ref_9
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /accounts:
    get:
      tags: &ref_11
        - accounts
      security: &ref_16
        - api_key: []
        - jwt_bearer: []
        - jwt_cookie: []
      operationId: listAccounts
      summary: List local accounts
      description: >-
        Returns the list of accounts. Needs at least the `manager` role.



        - When using the endpoint with the `manager` role, the list will include
        all accounts created by the current user.

        - When using the endpoint with a higher role (`operator`, `engineer`, or
        even `root`), the list will include all accounts.
      responses:
        '200':
          description: Account list
          content:
            application/json:
              example:
                - id: local.testaccount1722178139692
                  about: This account was created as part of a test
                  status: active
                  role: user
                  created_by: local.test_user
                  created_at: '1722178140015'
                  updated_by: null
                  updated_at: null
                  last_login: null
                  provider: local
                  username: testaccount1722178139692
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    about:
                      type: string
                    status:
                      type: string
                      enum:
                        - pending
                        - active
                        - disabled
                    role:
                      type: string
                      enum:
                        - user
                        - manager
                        - operator
                        - engineer
                        - root
                      description: >-
                        The requested role to assign after authentication.  Must
                        be one of: user, manager, operator, engineer, root.
                        Although root can only be assigned by the MRT identity
                        provider.
                    created_by:
                      type: string
                    created_at:
                      type: string
                      format: date-time
                    updated_by:
                      type: string
                    updated_at:
                      type: string
                      format: date-time
                    last_login:
                      type: string
                      format: date-time
                    provider:
                      type: string
                    username:
                      type: string
                  required:
                    - id
                    - role
                  additionalProperties: false
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: &ref_12
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /account:
    post:
      tags: *ref_11
      operationId: createLocalAccount
      summary: Create local account
      description: >-
        Creates a local Morio account. The account needs to be activated via the
        invite code/url.
      requestBody:
        description: The Morio settings you want to validate
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                about:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: A description or nmemonic note for the acount
                provider:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The ID of the identity provider to use for this account
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: >-
                    The requested role to assign after authentication.  Must be
                    one of: user, manager, operator, engineer, root. Although
                    root can only be assigned by the MRT identity provider.
                username:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The username of the account
                overwrite:
                  type: boolean
                  description: >-
                    Whether to overwrite the account, if one has a sufficiently
                    high role
              required:
                - provider
                - role
                - username
              additionalProperties: false
            example:
              username: testAccount1722234021332
              about: This account was created as part of a test
              provider: local
              role: user
      responses:
        '200':
          description: Account details
          content:
            application/json:
              example:
                username: testAccount1722068362387
                about: This account was created as part of a test
                provider: local
                role: user
                invite: e7d7b6427378f9ddde77775160ac91dda8eea6c5ef0491c8
                inviteUrl: >-
                  https://unit.test.morio.it/morio/invite/testAccount1722068362387-e7d7b6427378f9ddde77775160ac91dda8eea6c5ef0491c8
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_12
        '400':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                This request violates the data schema:
                  value: *ref_10
                Account state is invalid:
                  value: &ref_13
                    status: 400
                    title: Account state is invalid
                    detail: >-
                      The account is in a state that does not allow the current
                      action.
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Conflict with an existing account
          content:
            application/problem+json:
              example: &ref_23
                status: 409
                title: Conflict with an existing account
                detail: The provided data conflicts with an existing account.
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /activate-account:
    post:
      tags: *ref_11
      operationId: activateLocalAccount
      summary: Activate local account
      description: >-
        Activates an account based on its invite code.


        Note that for local Morio accounts, the account will still need to
        activate MFA before it can be used.

        That is because MFA is manadatory for local Morio accounts.


        So for a local Morio account, this endpoint will return the secret to
        setup MFA, as well as (an SVG of) the QR-code to do so.
      requestBody:
        description: The invite code, as well as username and (identity) provider
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                invite:
                  type: string
                  minLength: 48
                  maxLength: 48
                  description: The account invite code
                provider:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The ID of the identity provider to use for this account
                username:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The username of the account
              required:
                - invite
                - provider
                - username
              additionalProperties: false
            example:
              username: testAccount1722234284869
              invite: 251bdac3a4ffadaef194cdc18b97be9a0f9951ce65a10ae1
              provider: local
      responses:
        '200':
          description: MFA secret and QR code
          content:
            application/json:
              example:
                secret: AULGYK3RINCS62ZM
                otpauth: >-
                  otpauth://totp/Morio%2FMorio%20Standalone%20Swarm%20Test:testAccount1722180213478?secret=AULGYK3RINCS62ZM&period=30&digits=6&algorithm=SHA1&issuer=Morio%2FMorio%20Standalone%20Swarm%20Test
                qrcode: >
                  <svg class="qrcode" width="100%" height="100%"
                  xmlns="http://www.w3.org/2000/svg" viewBox="0 0 65 65"
                  shape-rendering="crispEdges"><path fill="none" d="M0
                  0h65v65H0z"/><path stroke="currentColor" d="M4 4.5h7m1 0h2m3
                  0h1m5 0h1m1 0h2m1 0h5m1 0h6m1 0h2m1 0h1m1 0h2m2 0h2m2 0h7M4
                  5.5h1m5 0h1m1 0h2m1 0h1m1 0h1m1 0h1m2 0h1m1 0h3m5 0h5m2 0h2m1
                  0h1m2 0h1m1 0h1m3 0h1m2 0h1m5 0h1M4 6.5h1m1 0h3m1 0h1m1 0h3m1
                  0h4m2 0h1m1 0h4m3 0h1m1 0h3m3 0h2m1 0h2m2 0h6m2 0h1m1 0h3m1
                  0h1M4 7.5h1m1 0h3m1 0h1m3 0h3m7 0h1m5 0h6m4 0h2m1 0h1m2 0h1m1
                  0h1m2 0h1m2 0h1m1 0h3m1 0h1M4 8.5h1m1 0h3m1 0h1m1 0h1m1 0h1m1
                  0h1m3 0h1m1 0h1m2 0h2m1 0h7m4 0h2m1 0h1m2 0h2m1 0h2m1 0h1m2
                  0h1m1 0h3m1 0h1M4 9.5h1m5 0h1m2 0h5m1 0h4m2 0h1m1 0h1m1 0h2m3
                  0h3m1 0h1m1 0h1m1 0h2m1 0h2m3 0h1m3 0h1m5 0h1M4 10.5h7m1 0h1m1
                  0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1
                  0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1
                  0h7M13 11.5h2m1 0h1m2 0h1m1 0h1m1 0h1m2 0h1m1 0h3m3 0h3m2
                  0h1m1 0h2m2 0h8M4 12.5h1m2 0h6m1 0h4m1 0h2m3 0h1m4 0h7m2 0h3m1
                  0h1m1 0h2m1 0h1m5 0h1m2 0h1m1 0h3M7 13.5h2m3 0h1m4 0h1m2 0h1m1
                  0h2m2 0h4m3 0h2m3 0h2m1 0h2m5 0h1m1 0h1m1 0h1m1 0h4m1 0h1M4
                  14.5h1m2 0h2m1 0h1m3 0h1m4 0h1m1 0h2m1 0h2m1 0h1m2 0h1m1 0h1m1
                  0h3m7 0h2m2 0h3m1 0h1m1 0h3m1 0h1m1 0h1M5 15.5h3m5 0h1m2 0h1m1
                  0h2m2 0h1m2 0h2m3 0h1m1 0h1m3 0h1m1 0h5m7 0h1m2 0h2m1 0h3m1
                  0h1M7 16.5h2m1 0h2m1 0h3m1 0h1m1 0h1m1 0h2m1 0h3m1 0h3m2 0h1m1
                  0h3m4 0h1m1 0h2m2 0h6m1 0h3m1 0h2M5 17.5h1m2 0h2m2 0h1m1 0h1m2
                  0h2m1 0h3m2 0h1m2 0h3m1 0h1m3 0h2m3 0h3m1 0h1m1 0h1m1 0h1m2
                  0h1m1 0h1m1 0h2m1 0h1M4 18.5h1m3 0h1m1 0h1m1 0h6m4 0h2m2 0h3m5
                  0h1m1 0h2m1 0h1m1 0h4m1 0h1m1 0h1m1 0h4m3 0h2M4 19.5h1m2 0h2m2
                  0h6m1 0h1m1 0h1m4 0h1m2 0h1m1 0h1m1 0h1m2 0h2m1 0h1m2 0h2m2
                  0h1m2 0h4m1 0h3m2 0h1m1 0h1M4 20.5h2m1 0h1m2 0h1m1 0h5m2 0h4m2
                  0h1m1 0h4m1 0h2m1 0h3m4 0h1m10 0h2m2 0h4M4 21.5h2m2 0h2m1
                  0h1m1 0h2m3 0h6m1 0h1m3 0h1m1 0h2m1 0h1m3 0h1m1 0h1m1 0h3m1
                  0h1m1 0h1m1 0h4m1 0h2m1 0h1M6 22.5h1m3 0h2m1 0h2m2 0h2m3 0h1m5
                  0h3m2 0h1m1 0h4m2 0h1m1 0h1m1 0h3m2 0h2m3 0h3m2 0h1M6 23.5h1m4
                  0h1m2 0h4m3 0h1m2 0h1m2 0h1m2 0h1m3 0h1m2 0h1m7 0h2m2 0h2m1
                  0h5m1 0h2M4 24.5h1m2 0h1m1 0h2m4 0h3m2 0h3m1 0h1m1 0h1m2 0h2m2
                  0h3m1 0h6m3 0h2m1 0h1m3 0h2m1 0h1m1 0h1M5 25.5h4m2 0h1m2 0h3m3
                  0h1m1 0h1m3 0h2m1 0h1m4 0h1m2 0h1m3 0h1m3 0h2m1 0h3m1 0h6m2
                  0h1M8 26.5h3m1 0h1m5 0h1m1 0h1m1 0h3m1 0h1m1 0h2m4 0h1m1 0h2m2
                  0h1m1 0h1m1 0h2m1 0h5m3 0h1M4 27.5h3m2 0h1m2 0h4m4 0h1m2 0h1m1
                  0h1m3 0h1m2 0h4m1 0h1m3 0h1m3 0h1m1 0h2m2 0h1m1 0h2m3 0h1m1
                  0h1M4 28.5h2m2 0h1m1 0h2m1 0h2m3 0h3m1 0h1m2 0h2m4 0h2m2 0h2m1
                  0h1m1 0h1m1 0h4m2 0h2m1 0h3m1 0h2M5 29.5h1m1 0h3m1 0h1m1 0h2m2
                  0h1m3 0h2m1 0h5m4 0h2m1 0h1m4 0h3m1 0h4m1 0h5m3 0h1M5 30.5h8m1
                  0h2m1 0h1m1 0h1m2 0h1m1 0h1m1 0h2m1 0h7m1 0h1m1 0h1m2 0h1m6
                  0h2m1 0h5m1 0h2M6 31.5h1m1 0h1m3 0h1m1 0h3m1 0h1m3 0h2m2 0h1m1
                  0h1m1 0h1m3 0h1m1 0h2m4 0h1m5 0h2m1 0h2m3 0h3m1 0h1M4 32.5h1m1
                  0h1m1 0h1m1 0h1m1 0h1m3 0h4m2 0h3m1 0h2m2 0h1m1 0h1m1 0h5m1
                  0h2m1 0h2m1 0h1m3 0h1m1 0h1m1 0h1m1 0h1m1 0h3M4 33.5h1m2 0h2m3
                  0h6m1 0h5m2 0h1m1 0h1m1 0h1m3 0h1m1 0h2m2 0h2m2 0h2m2 0h5m3
                  0h5M4 34.5h1m1 0h1m1 0h5m1 0h1m2 0h1m4 0h2m1 0h2m3 0h5m1 0h3m2
                  0h1m3 0h1m5 0h10M4 35.5h1m7 0h4m1 0h4m1 0h1m1 0h4m2 0h1m2
                  0h1m1 0h1m2 0h3m5 0h2m1 0h1m3 0h4m1 0h1m1 0h1M4 36.5h2m3 0h8m2
                  0h1m2 0h3m1 0h1m1 0h4m4 0h1m1 0h1m1 0h1m3 0h12M4 37.5h2m2
                  0h1m2 0h4m2 0h2m2 0h1m1 0h1m2 0h2m2 0h4m2 0h6m2 0h1m1 0h1m1
                  0h3m3 0h4m2 0h1M6 38.5h3m1 0h2m1 0h1m3 0h1m1 0h1m1 0h2m4 0h1m1
                  0h2m2 0h1m1 0h1m1 0h4m5 0h2m1 0h4m1 0h3m1 0h3M7 39.5h1m1 0h1m1
                  0h1m5 0h4m1 0h4m3 0h1m2 0h3m1 0h2m1 0h1m1 0h1m5 0h3m1 0h1m2
                  0h1m2 0h1M4 40.5h2m2 0h1m1 0h1m2 0h1m1 0h2m1 0h1m1 0h2m2 0h2m1
                  0h1m4 0h1m2 0h1m2 0h2m1 0h1m2 0h1m1 0h1m1 0h5m3 0h2m1 0h2M4
                  41.5h4m1 0h1m2 0h2m2 0h1m7 0h2m1 0h1m2 0h1m5 0h1m2 0h2m1 0h1m1
                  0h5m5 0h1m4 0h1M5 42.5h1m3 0h3m1 0h3m1 0h1m2 0h1m3 0h1m2 0h4m1
                  0h3m1 0h2m3 0h1m1 0h2m3 0h1m1 0h1m2 0h4m2 0h2M4 43.5h1m2 0h3m1
                  0h2m3 0h1m1 0h4m5 0h1m2 0h1m1 0h1m2 0h1m1 0h1m4 0h6m1 0h1m1
                  0h2m4 0h2m1 0h1M4 44.5h2m1 0h4m1 0h1m2 0h1m1 0h1m1 0h2m2 0h2m2
                  0h1m2 0h3m3 0h2m1 0h1m1 0h3m2 0h6m1 0h5m1 0h2M5 45.5h1m1 0h1m3
                  0h2m3 0h1m6 0h1m6 0h1m1 0h2m1 0h1m7 0h2m1 0h6m3 0h2m1 0h1m1
                  0h1M4 46.5h1m4 0h3m2 0h4m6 0h1m1 0h3m2 0h3m2 0h3m1 0h1m1 0h3m2
                  0h3m1 0h1m2 0h1m2 0h4M4 47.5h2m1 0h3m1 0h3m2 0h3m2 0h5m1 0h1m1
                  0h4m1 0h5m2 0h2m2 0h2m2 0h5m1 0h1m1 0h2m1 0h1M4 48.5h1m4 0h2m3
                  0h2m3 0h2m1 0h3m6 0h1m1 0h1m2 0h1m1 0h5m1 0h1m1 0h1m2 0h2m1
                  0h1m1 0h2m1 0h1m2 0h1M4 49.5h5m2 0h1m2 0h3m2 0h1m4 0h1m1 0h3m8
                  0h1m1 0h4m2 0h1m1 0h1m4 0h5m1 0h2M4 50.5h1m1 0h1m2 0h4m4 0h1m1
                  0h2m2 0h2m3 0h2m2 0h1m2 0h1m1 0h2m1 0h1m1 0h1m1 0h4m1 0h2m1
                  0h1m1 0h2m3 0h2M4 51.5h5m3 0h2m3 0h1m4 0h1m1 0h1m1 0h1m1 0h2m1
                  0h4m1 0h1m1 0h5m1 0h1m3 0h3m1 0h1m1 0h1m1 0h1m1 0h2M10
                  52.5h1m3 0h3m1 0h2m2 0h3m2 0h1m2 0h6m2 0h1m1 0h1m2 0h2m1 0h1m1
                  0h3m1 0h5m3 0h1M12 53.5h3m1 0h1m2 0h1m1 0h1m2 0h2m1 0h4m3
                  0h3m5 0h1m1 0h2m1 0h1m1 0h1m2 0h1m3 0h1m1 0h2M4 54.5h7m1 0h3m1
                  0h2m4 0h1m3 0h1m1 0h1m1 0h1m1 0h1m1 0h1m3 0h3m1 0h1m5 0h2m2
                  0h1m1 0h1m1 0h1m1 0h2M4 55.5h1m5 0h1m1 0h2m1 0h3m1 0h1m5 0h1m1
                  0h1m1 0h2m3 0h1m2 0h1m2 0h2m1 0h1m1 0h1m3 0h4m3 0h5M4 56.5h1m1
                  0h3m1 0h1m1 0h4m1 0h2m2 0h1m2 0h1m1 0h1m1 0h1m1 0h5m1 0h1m1
                  0h1m3 0h1m2 0h1m5 0h6m2 0h2M4 57.5h1m1 0h3m1 0h1m1 0h1m2 0h1m1
                  0h1m1 0h2m1 0h2m2 0h3m3 0h1m1 0h2m2 0h2m2 0h2m4 0h4m1 0h2m3
                  0h1M4 58.5h1m1 0h3m1 0h1m2 0h3m1 0h1m1 0h1m1 0h1m6 0h1m2 0h4m2
                  0h1m3 0h6m4 0h3m5 0h2M4 59.5h1m5 0h1m3 0h4m3 0h1m1 0h3m2 0h1m1
                  0h1m2 0h4m1 0h1m1 0h2m1 0h3m1 0h2m4 0h2m1 0h1m2 0h2M4 60.5h7m1
                  0h4m1 0h3m2 0h1m3 0h1m1 0h3m1 0h1m2 0h1m3 0h1m1 0h1m2 0h2m1
                  0h1m2 0h3"/></svg>
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                This request violates the data schema:
                  value: *ref_10
                Account state is invalid:
                  value: *ref_13
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Denied by role-base access control
          content:
            application/problem+json:
              example: &ref_14
                status: 403
                title: Denied by role-base access control
                detail: The request did not pass the role based access control check.
          headers: *ref_2
        '404':
          description: Account unknown
          content:
            application/problem+json:
              example: &ref_15
                status: 404
                title: Account unknown
                detail: >-
                  The provided account identifier could not be matched to an
                  existing account.
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /activate-mfa:
    post:
      tags: *ref_11
      operationId: activateLocalAccountMfa
      summary: Activate local account MFA
      description: >-
        Activates MFA on a local Morio account, and provides scratch codes as
        fallback.


        Three scratch codes will be provided that can each be used once as a
        fallback for the TOTP token, in case the device generating the token is
        unavailable.
      requestBody:
        description: The invite code, as well as username and (identity) provider
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                invite:
                  type: string
                  minLength: 48
                  maxLength: 48
                  description: The account invite code
                provider:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The ID of the identity provider to use for this account
                token:
                  type: string
                  minLength: 3
                  maxLength: 12
                  description: The TOTP token (one-time password)
                password:
                  type: string
                  minLength: 3
                  maxLength: 1024
                  description: The account's password
                username:
                  type: string
                  minLength: 2
                  maxLength: 255
                  description: The username of the account
              required:
                - invite
                - provider
                - token
                - password
                - username
              additionalProperties: false
            example:
              username: testAccount1722234633560
              invite: 055319ca21a36ac7b7a008694bb48cf6b882242a5f78b97d
              provider: local
              token: '171589'
              password: kAsflASD8900)()lmn#LE$Q0-
      responses:
        '200':
          description: MFA secret and QR code
          content:
            application/json:
              example:
                scratch_codes:
                  - >-
                    06858bad92373bfd4746b6128c5ab769f7b12a652101eeec1741e4dc7432fe99
                  - >-
                    d21da1e5e7cf70b1044f11e06a39135fab248f7f4d849d964c81a7e9e72d498f
                  - >-
                    7c68b780d1c77d17d292780acc44564e374262c58193daf867c6011cce4a9bab
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                This request violates the data schema:
                  value: *ref_10
                Account state is invalid:
                  value: *ref_13
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Denied by role-base access control
          content:
            application/problem+json:
              example: *ref_14
          headers: *ref_2
        '404':
          description: Account unknown
          content:
            application/problem+json:
              example: *ref_15
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /apikeys:
    get:
      tags: &ref_17
        - apikeys
      security: *ref_16
      operationId: listApiKeys
      summary: List API keys
      description: >-
        Returns the list of API keys.


        - When using the endpoint with the `user` role, the list will include
        all API keys created by the current user.

        - When using the endpoint with the `manager` role, the list will include
        all API keys belonging to accounts created by the current user.

        - When using the endpoint with a higher role (`operator`, `engineer`, or
        even `root`), the list will include all API keys.
      responses:
        '200':
          description: API key list
          content:
            application/json:
              example:
                - id: 68b04077-e103-4b8e-9e5f-7b5daff57b96
                  name: testKey2024-07-28T16:07:30.612Z
                  status: active
                  role: user
                  created_by: local.test_user
                  created_at: '2024-07-28T16:07:30.848Z'
                  updated_by: null
                  updated_at: null
                  last_login: null
                  key: 68b04077-e103-4b8e-9e5f-7b5daff57b96
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: &ref_19
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /apikey:
    post:
      tags: *ref_17
      operationId: createApiKey
      summary: Create API key
      description: >-
        Creates a Morio API key. The role of the API key can not be higher than
        the role of the user creating the API key.
      requestBody:
        description: The API key settings
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 2
                  description: A name for the API key
                expires:
                  type: number
                  format: float
                  minimum: 1
                  maximum: 730
                  description: Number of days before the API key expires
                role:
                  type: string
                  enum:
                    - user
                    - manager
                    - operator
                    - engineer
                    - root
                  description: The role to assign to the API key
              required:
                - name
                - expires
                - role
              additionalProperties: false
            example: &ref_18 {}
      responses:
        '200':
          description: API key details
          content:
            application/json:
              example: *ref_18
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_19
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                Nominative account required:
                  value:
                    status: 403
                    title: Nominative account required
                    detail: This action is only available to nominative accounts.
                Role unavailable:
                  value:
                    status: 403
                    title: Role unavailable
                    detail: The requested role is not available to this account.
                Database Failure:
                  value: &ref_20
                    status: 403
                    title: Database Failure
                    detail: >-
                      Could not complete the request because the database
                      returned an error.
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /apikey/{id}/rotate:
    patch:
      tags: *ref_17
      operationId: rotateApiKey
      summary: Rotate API key
      description: Updates an existing API key.
      parameters: &ref_21
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            description: The ID of the API key
          required: true
          description: The API key ID (a UUID)
      responses:
        '200':
          description: API key details
          content:
            application/json:
              example:
                id: 600d03a3-573b-4f64-b127-96f0157cb6b0
                name: testKey2024-07-29T06:47:57.472Z
                status: active
                role: user
                created_by: local.test_user
                created_at: '2024-07-29T06:47:57.679Z'
                expires_at: '2024-07-30T06:47:57.679Z'
                updated_by: local.test_user
                updated_at: '2024-07-29T06:47:57.872Z'
                secret: >-
                  90a28457c6bc7c5b5b40aa94730bf12b1f0bb726bfc015652147598ca781d3f7b61551716ffa8839cbad41e20ea76ffa
                last_login: null
                key: 600d03a3-573b-4f64-b127-96f0157cb6b0
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                Database Failure:
                  value: *ref_20
                Role insufficient:
                  value: &ref_22
                    status: 403
                    title: Role insufficient
                    detail: This endpoint required a higher role.
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /apikey/{id}/enable:
    patch:
      tags: *ref_17
      operationId: enableApiKey
      summary: Enable API key
      description: Updates an existing API key.
      parameters: *ref_21
      responses:
        '200':
          description: API key details
          content:
            application/json:
              example:
                id: 600d03a3-573b-4f64-b127-96f0157cb6b0
                name: testKey2024-07-29T06:47:57.472Z
                status: active
                role: user
                created_by: local.test_user
                created_at: '2024-07-29T06:47:57.679Z'
                expires_at: '2024-07-30T06:47:57.679Z'
                updated_by: local.test_user
                updated_at: '2024-07-29T06:47:58.048Z'
                last_login: '2024-07-29T06:47:57.985Z'
                key: 600d03a3-573b-4f64-b127-96f0157cb6b0
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                Database Failure:
                  value: *ref_20
                Role insufficient:
                  value: *ref_22
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /apikey/{id}/disable:
    patch:
      tags: *ref_17
      operationId: disableApiKey
      summary: Disable API key
      description: Updates an existing API key.
      parameters: *ref_21
      responses:
        '200':
          description: API key details
          content:
            application/json:
              example:
                id: 600d03a3-573b-4f64-b127-96f0157cb6b0
                name: testKey2024-07-29T06:47:57.472Z
                status: disabled
                role: user
                created_by: local.test_user
                created_at: '2024-07-29T06:47:57.679Z'
                expires_at: '2024-07-30T06:47:57.679Z'
                updated_by: local.test_user
                updated_at: '2024-07-29T06:47:58.020Z'
                last_login: '2024-07-29T06:47:57.985Z'
                key: 600d03a3-573b-4f64-b127-96f0157cb6b0
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                Database Failure:
                  value: *ref_20
                Role insufficient:
                  value: *ref_22
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /apikey/{id}:
    delete:
      tags: *ref_17
      operationId: deleteApiKey
      summary: Delete API key
      description: Removes a Morio API key.
      parameters: *ref_21
      responses:
        '204':
          description: No response body
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                Database Failure:
                  value: *ref_20
                Role insufficient:
                  value: *ref_22
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /login:
    post:
      tags: &ref_24
        - authentication
      operationId: login
      summary: Authenticate
      description: >-
        Generates a JSON Web Token that can be used for subsequential API
        access.
      requestBody:
        description: The Morio settings you want to validate
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/Request/login/apikey'
                - $ref: '#/components/schemas/Request/login/ldap'
                - $ref: '#/components/schemas/Request/login/local'
                - $ref: '#/components/schemas/Request/login/mrt'
            examples:
              apikey:
                value:
                  provider: apikey
                  data:
                    api_key: 724098e3-930a-4c93-9fac-9a55decfb735
                    api_key_secret: >-
                      c0502771315e8239462adcccab7b6867e6d2742e3675c7aacac369f43a8f27b836292009b6badb7bc7a293b10e3275d2
              ldap:
                value:
                  provider: ldap
                  data:
                    username: nidhubhs
                    password: VEePvJuorS0NZC43Ta1
                    role: user
              local:
                value:
                  provider: local
                  data:
                    username: testAccount1722068362387
                    password: 62adcccab7b6867e6d2
                    role: manager
                    token: '234923'
              mrt:
                value:
                  provider: mrt
                  data:
                    mrt: >-
                      mrt.14887e49a38949f0d82915f4becdf7d700e3dcfacf64fcec00681a5f74b1a600
                    role: engineer
      responses:
        '200':
          description: Account details
          content:
            application/json:
              examples:
                apikey:
                  value:
                    jwt: >-
                      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiYXBpa2V5LjVlNTg1OGRiLWVlZjItNGM1YS05OGFhLTFlZDczM2FjODhhZSIsInJvbGUiOiJ1c2VyIiwicHJvdmlkZXIiOiJhcGlrZXkiLCJub2RlIjoiMzliMGI1ZmQtNjY0OC00MWY4LWIzYjktZGY5NmM1ZDExNTc5IiwiY2x1c3RlciI6Ijg2MDI5MDZmLTU0MzctNGNjZS1iMTUwLTdjMzM4N2RhMzZmYSIsImlhdCI6MTcyMjIzNjk5NiwibmJmIjoxNzIyMjM2OTk2LCJleHAiOjE3MjIyNTEzOTYsImF1ZCI6Im1vcmlvIiwiaXNzIjoibW9yaW8iLCJzdWIiOiJtb3JpbyJ9.LLx3wjEvAi4FdggXrkxdNTps3G50r4vhBcQF2FPEaJz9sYCxlewFKarPpmWvBu5JbkjpiZ7Nzv8rFGtNQBGt96Y4eZkPuqQ4nr6DaMp7UgoDcLqsV-2jlmLStHsHk3Bbd2Sm1eyMQvsdBeebd2fz4EGgziYd2uW4rvSGHSeTAGOymoWXilAI5nrOpiWczcIVnIfyhgdtSNwFc7MowiBGJGv0xELJQrWST3QZx_G6VNLYwJkPXaBna2dfC2UQ5nsr4RVRjaGzIVfmWfnHp7fZo-xjV_-QciXZUJcROoWjCdroDt_BDjZdWe8j8-VsyCyXAJ9cnsntFgknFRH2CYZb5jYlH2_gBSk-PIYSsTbAOjmPK0AxiUHJnRonMgP5Fdc1dF_GowAdlsBxyKffSN3z6tZbH3DvELmtT27O8tnZYnEKAFgAod4f_fXphiIcssEt-kAbhs7HsJp4rDI5l3Ur-HkxvjOuzPeNmishqjgqWHwFwH4fU34Hkdk9Fp7KIWRXbT_sV2bzuj7GwVlndnCGsCXU99vwwVBMTh-Yw61FxDcC0tHbHp72A9tAKtUfBaR8L0gbnnRbik5Z_dnN6kx_rgVA5D7rNCfj5j4vn4cyeCklywH51ApQtTr_EMddOJTxulOnktSbCwpvioPY5hjgQMHsH8vbh4__ja2aIXt89lc
                    data:
                      user: apikey.5e5858db-eef2-4c5a-98aa-1ed733ac88ae
                      role: user
                      provider: apikey
                  summary: apikey Example
                ldap:
                  value:
                    jwt: >-
                      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoidXNlcjIiLCJyb2xlIjoibWFuYWdlciIsImhpZ2hlc3Rfcm9sZSI6Im1hbmFnZXIiLCJwcm92aWRlciI6ImxkYXAiLCJub2RlIjoiYzljNGE5NTMtMTlmMi00YzFmLThkYTYtODk5ZGQ0MzEyMjdlIiwiY2x1c3RlciI6IjBmZjBkYzY2LTA3ZDQtNDAwYi04NWM2LTJiMDYwZmU3ZjQ2NiIsImlhdCI6MTcyMjIzNzM1MCwibmJmIjoxNzIyMjM3MzUwLCJleHAiOjE3MjIyNTE3NTAsImF1ZCI6Im1vcmlvIiwiaXNzIjoibW9yaW8iLCJzdWIiOiJtb3JpbyJ9.Z856Wb_D_I4qFXaGADT65XqrK-uCAwcjkpFYYtApWybjTErPJSKYTuILKKNxwfGBrDTn7VSf8nhieU47JmDYOSc7a5XbRCUuFuJ2SzK7cOxbsF6VtN3MSrykSkM17N42rB3qlXu-X4wY4eAXsvBBRG6AQI8Wo_ejMcIl239N01fdvcmiR-6EAfW1072BPE5Sl_zdx81Fw4QPKwjoIMKK-pjZJSjtTAKoLyZxJlRJnnmrXs7cGiVmvjgzz_jV--I6y9kd8ALFz4Ci8fXgRWc810Iiz_QAPz-j9AEKjvcnKY7tOixpS5AAnDtuhIQD2tvruCFfnHsUwlPxN1zgleFd9puaiVrTKWOVdvDVucohihBVk13f-jeBML1oU3j5arDowchkJnGkALEa6wTBd53qYI5QUT8_rQR-bhmtPQePMqjr1rryYNULJciQs6-Ie9vRiYYbs_aDJgCf-TDVffsYrccfpgvt_c6WAuhxLqCilVRtkcx7cJxoCaWu72Z_UTXMj_-dkj-Kv3J3Czd7xwjha_lOKazN1eR5ReqSGwo0xD0QXCdlvFM0MQjO42p_3fZdMY41hSz3IyHuj7Dyv9xLMYf_JA2W09TOP4PjYwqXUUZDDAElE7BTjtMpXR4zci21r4fsC6mckhAZL9P17b-LHA7M-H5mhmoKG4ExCbcpJ0w
                    data:
                      user: user2
                      role: manager
                      highest_role: manager
                      provider: ldap
                  summary: ldap Example
                local:
                  value:
                    jwt: >-
                      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoibG9jYWwudGVzdEFjY291bnQxNzIyMjM2OTIyMDQ4Iiwicm9sZSI6InVzZXIiLCJhdmFpbGFibGVfcm9sZXMiOlsidXNlciJdLCJoaWdoZXN0X3JvbGUiOiJ1c2VyIiwicHJvdmlkZXIiOiJsb2NhbCIsIm5vZGUiOiIzOWIwYjVmZC02NjQ4LTQxZjgtYjNiOS1kZjk2YzVkMTE1NzkiLCJjbHVzdGVyIjoiODYwMjkwNmYtNTQzNy00Y2NlLWIxNTAtN2MzMzg3ZGEzNmZhIiwiaWF0IjoxNzIyMjM2OTIzLCJuYmYiOjE3MjIyMzY5MjMsImV4cCI6MTcyMjI1MTMyMywiYXVkIjoibW9yaW8iLCJpc3MiOiJtb3JpbyIsInN1YiI6Im1vcmlvIn0.sij21XpVw2i6SjTZtms9Sl4WsTYh6wgcr0c79x7-6OQPaWam-Ne8t_mzcI5Opa8qOjdFBDBoRHjairzyURpQ-p0BmrDANp4gw17lAqvmgGySwTC-T0yqdRpvZLV85ZhSps3XqiTuWObOVztd3MOLc6xbbp-SEIk6VimzDWcSQbInDfTCbbx4OivWjIcpA6XGfVcXWWtZiJz7y8E8E2jrckV3jkqRUZuhZ_HIcOyh1LSKb4WWWybCcu-D6hC1VipX_oy2Q8227V-VY1Kgryxe-F8xckgBkIoFjdejVsz4UpkvWXsYEJEZjgKLC0zZEZJVaEJC3w6QpNj-nc5d5dgF0TDq_6T0GvTaoN_UZGBgYioGTd0wXHpw0Trzc0VQrN5O3yBYjnhsbwSWlhHlClSAbV_CCy2qUAyDOrXBGmOlIYN8YZ_eJe-wIYioISd9dd0h5rbTSjtMqpX8fDoRZv0jFraVDOk0eMwiGM_TKhsFfR3sx0samCt7k3nCTseLeufCxRUkBZmeoG7o0NrZ0tbTrUoS9XJX_PDK3v9u-Z1LqjmJe7nERG55gXQer-_a5yWn-LKWooAYFW3iLwZEpvAxQF_VtW2xoCkrj5BD9UOnotj6emHmK76oURrSd3waQ_EWmnwf86dSXPQiljp41jHt95V7jyN5P4my-ogotTKxoGA
                    data:
                      user: local.testAccount1722236922048
                      role: user
                      available_roles:
                        - user
                      highest_role: user
                      provider: local
                  summary: local Example
                mrt:
                  value:
                    jwt: >-
                      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoicm9vdCIsInJvbGUiOiJ1c2VyIiwiYXZhaWxhYmxlX3JvbGVzIjpbInVzZXIiLCJtYW5hZ2VyIiwib3BlcmF0b3IiLCJlbmdpbmVlciIsInJvb3QiXSwiaGlnaGVzdF9yb2xlIjoicm9vdCIsInByb3ZpZGVyIjoibXJ0Iiwibm9kZSI6IjM5YjBiNWZkLTY2NDgtNDFmOC1iM2I5LWRmOTZjNWQxMTU3OSIsImNsdXN0ZXIiOiI4NjAyOTA2Zi01NDM3LTRjY2UtYjE1MC03YzMzODdkYTM2ZmEiLCJpYXQiOjE3MjIyMzcwNTgsIm5iZiI6MTcyMjIzNzA1OCwiZXhwIjoxNzIyMjUxNDU4LCJhdWQiOiJtb3JpbyIsImlzcyI6Im1vcmlvIiwic3ViIjoibW9yaW8ifQ.Il7nNLfxv6g-m1ZrqLWgdmdFnv_rnOFnAxE40tqO_3KcQeckwqv8pw0vPtmNKCkbgXgIMqKOoFnw39bOIy8pZJkm-tiA5mC8bn8i-aKPNH8B2F1puNj2k902ah27gOE9MVPnCGi_KaZgglJ3A34BjPqodQm0pj9xjx403mYOHCpD6CkPKqClRWXpDli_Vaco0TAakZTUyM85QfgADetNKvNLj9MuosZeXjWMnH_4jzMuNi6zkY1h_kjV4C5XflCh5kY6vrH9esPAKeUAemxzMZypF2bcaHqnoPnKK0J3kePHaREwJ_bOe9CMuDMwOMOIXmX0xFBJxYgD7bd4vvy4PyespdGsBYNqPWzS1iyx-JfLJ33xVKizBGvBLNF3HQnH7GFdfs3P9VpJCGsc6xkLckIFiVkUhlYdYXz91wuS_RzvHzzdJpd5JJWEa642DnF5x0YpeOX-gCG0u8EWMGzvvSmC8ZWK8urpNAmSnr_lc0JeTOD5_wiq-4kiiwujG-FmOLHLWK5Gl5qJZNcEozqmjjolJaWjDvZ845LGpUfMtq1Tx0cZWazckPAZBFrcvhF6yztNpsAzaG454Y7zlT0OrirVYXWtsciMAAsAVRO-56y_0SCkgSKOtLMoJevjbwX4RKbJtjCL6jrT0lfKnRP0RBxEJyVMTb1jSUF9mQjEVMw
                    data:
                      user: root
                      role: user
                      available_roles:
                        - user
                        - manager
                        - operator
                        - engineer
                        - root
                      highest_role: root
                      provider: mrt
                  summary: mrt Example
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Response/login/apikey'
                  - $ref: '#/components/schemas/Response/login/ldap'
                  - $ref: '#/components/schemas/Response/login/local'
                  - $ref: '#/components/schemas/Response/login/mrt'
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: Multiple responses with this status code
          content:
            application/problem+json:
              examples:
                This request violates the data schema:
                  value: *ref_10
                Account state is invalid:
                  value: *ref_13
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Identity Provider Unknown
          content:
            application/problem+json:
              example:
                status: 403
                title: Identity Provider Unknown
                detail: Cannot authenticate because the identity provider is unknown.
          headers: *ref_2
        '409':
          description: Conflict with an existing account
          content:
            application/problem+json:
              example: *ref_23
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /token:
    get:
      tags: *ref_24
      operationId: renewJwt
      summary: Renew JWT
      description: >-
        This will return a new JSON Web Token that can replace the current
        token. This will only work if the current token is not expired yet.
      responses:
        '200':
          description: JSON Web Token
          content:
            application/json:
              example:
                jwt: >-
                  eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoibG9jYWwudGVzdEFjY291bnQxNzIyMTg2NzE0OTU0Iiwicm9sZSI6InVzZXIiLCJhdmFpbGFibGVfcm9sZXMiOltdLCJwcm92aWRlciI6ImxvY2FsIiwiaWF0IjoxNzIyMTg2NzE2LCJuYmYiOjE3MjIxODY3MTYsImV4cCI6MTcyMjIwMTExNiwiYXVkIjoibW9yaW8iLCJpc3MiOiJtb3JpbyIsInN1YiI6Im1vcmlvIn0.CR28Y2xIBtDPOGZSpfSnee7qkRBBG470g4BgcpknJee-VEePvJuorS0NZC43Ta1-4Vx2684K7RgPZNsgW-SAN5yF8PdFe5-y9XtgEn3N3ZmXUCogJoRBQxjGC4UaK6Nrse4dJcqpnxhvUv1yPBcTbS0ycPvMynUd0szkG92u6jyPoDuLFErmDlEgCDlDsPPig81N9zg3Bb0fP44Acc0RpBGybgijYBbPsVZBRSolAr6bBtwuoqcD3Q2pMrkovKduZ1Uob1Cgu8sdmB9DwWETKflEzkcafR96Upej7t1OIiM4AdlznURJvOo2CKffK4GNOsdltQysDF3_aEmRjIY9qJxygQ_sHmPf3-t3MuRvd8zcr9lupN4QRvXCjyUMSg_i25Zq-psnP_aNb0rf6qNCBigNPdsR6QR0V_SotKPNFV9OpkuC44f39-h0IV3ZTYuPoy0WVIRLCQCkTA_1nRnXAOXTjc7wRlLFJ00olYSOQudauuP_JJ8Xpfy_2up_24Mqn__x4ulbPjQpjjirNtEgHJwpzKEES-2E0FFsJEs5V9w-LOtrc7Xyn7HQ2hyuWYHvnTePa2qxpmcowiFC3jdkE1sxF8HU5v46a5xV6no7QAPN7E5wzVj5pE7zSWRRU4m06NjYgVARqa755XrpY-TvYifk9XDboS1ZHYSM0oZJ-jI
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: &ref_25
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /whoami:
    get:
      tags: *ref_24
      operationId: whoami
      summary: Who am I?
      description: This will return info about the currently authenticated account
      responses:
        '200':
          description: JSON Web Token
          content:
            application/json:
              examples:
                apikey:
                  value:
                    value:
                      user: apikey.724098e3-930a-4c93-9fac-9a55decfb735
                      role: user
                      provider: apikey
                      node: 39b0b5fd-6648-41f8-b3b9-df96c5d11579
                      cluster: 8602906f-5437-4cce-b150-7c3387da36fa
                      iat: 1722187044
                      nbf: 1722187044
                      exp: 1722201444
                      aud: morio
                      iss: morio
                      sub: morio
                  summary: apikey Example
                local:
                  value:
                    value:
                      user: local.testAccount1722187141724
                      role: user
                      available_roles:
                        - user
                      highest_role: user
                      provider: local
                      node: 39b0b5fd-6648-41f8-b3b9-df96c5d11579
                      cluster: 8602906f-5437-4cce-b150-7c3387da36fa
                      iat: 1722187142
                      nbf: 1722187142
                      exp: 1722201542
                      aud: morio
                      iss: morio
                      sub: morio
                  summary: local Example
                mrt:
                  value:
                    value:
                      user: root
                      role: user
                      available_roles:
                        - user
                        - manager
                        - operator
                        - engineer
                        - root
                      highest_role: root
                      provider: mrt
                      node: 39b0b5fd-6648-41f8-b3b9-df96c5d11579
                      cluster: 8602906f-5437-4cce-b150-7c3387da36fa
                      iat: 1722187191
                      nbf: 1722187191
                      exp: 1722201591
                      aud: morio
                      iss: morio
                      sub: morio
                  summary: mrt Example
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_25
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /pkgs/clients/deb/build:
    post:
      tags: &ref_26
        - client packages
      operationId: buildDebPkg
      summary: Build .deb package
      description: >-
        This will trigger the build of a .deb client package.


        Note that this will start an ephemeral container to start the build.
        This API endpoint will not wait for the build to complete before
        retuning.
      requestBody:
        description: The configuration for building the `.deb` client package
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                Package:
                  type: string
                Source:
                  type: string
                Section:
                  type: string
                  enum:
                    - utils
                Priority:
                  type: string
                  enum:
                    - required,important,standard,optional,extra
                Architecture:
                  type: string
                Essential:
                  type: string
                  enum:
                    - 'no'
                Depends:
                  type: array
                  items: {}
                Installed-Size:
                  type: number
                  format: float
                Maintainer:
                  type: string
                Changed-By:
                  type: string
                Uploaders:
                  type: array
                  items: {}
                Homepage:
                  type: string
                Description:
                  type: string
                DetailedDescription:
                  type: string
                Vcs-Git:
                  type: string
                Version:
                  type: string
                Revision:
                  type: number
                  format: float
              required:
                - Package
                - Source
                - Section
                - Priority
                - Architecture
                - Essential
                - Depends
                - Installed-Size
                - Maintainer
                - Changed-By
                - Uploaders
                - Homepage
                - Description
                - DetailedDescription
                - Vcs-Git
                - Version
                - Revision
              additionalProperties: false
            example:
              Package: morio-client
              Source: morio-client
              Section: utils
              Priority: optional
              Architecture: amd64
              Essential: 'no'
              Depends:
                - - auditbeat
                  - '>= 8.12'
                - - filebeat
                  - '>= 8.12'
                - - metricbeat
                  - '>= 8.12'
              Installed-Size: 5000
              Maintainer: CERT-EU <services@cert.europa.eu>
              Changed-By: Joost De Cock <joost.decock@cert.europa.eu>
              Uploaders:
                - Joost De Cock <joost.decock@cert.europa.eu>
              Homepage: https://github.com/certeu/morio
              Description: >-
                The Morio client collects and ships observability data to a
                Morio instance.
              DetailedDescription: >-
                Deploy this Morio client (based on Elastic Beats) on your
                endpoints,

                and collect their data on one or more centralized Morio
                instances

                for analysis, further processing, downstream routing &
                filtering,

                or event-driven automation.
              Vcs-Git: https://github.com/certeu/morio -b main [clients/linux]
              Version: 0.2.0
              Revision: 1
      responses:
        '200':
          description: Confirmation data
          content:
            application/json:
              example:
                result: ok
                status: building
                settings:
                  Package: morio-client
                  Source: morio-client
                  Section: utils
                  Priority: optional
                  Architecture: amd64
                  Essential: 'no'
                  Installed-Size: 5000
                  Maintainer: CERT-EU <services@cert.europa.eu>
                  Changed-By: Joost De Cock <joost.decock@cert.europa.eu>
                  Homepage: https://github.com/certeu/morio
                  Description: >-
                    The Morio client collects and ships observability data to a
                    Morio instance.
                      Deploy this Morio client (based on Elastic Beats) on your endpoints,
                      and collect their data on one or more centralized Morio instances
                      for analysis, further processing, downstream routing & filtering,
                      or event-driven automation.
                  Vcs-Git: https://github.com/certeu/morio -b main [clients/linux]
                  Version: 0.2.0-1
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_25
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /pkgs/clients/deb/defaults:
    get:
      tags: *ref_26
      operationId: getDebDefaults
      summary: Get .deb package defaults
      description: >-
        This will return the default values to create a new .deb client package.


        Note that configuration of a `.deb`package needs to be correct or the
        package will not function.

        You can adapt these defaults (that's why we provide them), but should
        [consult the Debian documnentation on
        packaging](https://wiki.debian.org/Packaging).
      responses:
        '200':
          description: Debian client package defaults
          content:
            application/json:
              example:
                Package: morio-client
                Source: morio-client
                Section: utils
                Priority: optional
                Architecture: amd64
                Essential: 'no'
                Depends:
                  - - auditbeat
                    - '>= 8.12'
                  - - filebeat
                    - '>= 8.12'
                  - - metricbeat
                    - '>= 8.12'
                Installed-Size: 5000
                Maintainer: CERT-EU <services@cert.europa.eu>
                Changed-By: Joost De Cock <joost.decock@cert.europa.eu>
                Uploaders:
                  - Joost De Cock <joost.decock@cert.europa.eu>
                Homepage: https://github.com/certeu/morio
                Description: >-
                  The Morio client collects and ships observability data to a
                  Morio instance.
                DetailedDescription: >-
                  Deploy this Morio client (based on Elastic Beats) on your
                  endpoints,

                  and collect their data on one or more centralized Morio
                  instances

                  for analysis, further processing, downstream routing &
                  filtering,

                  or event-driven automation.
                Vcs-Git: https://github.com/certeu/morio -b main [clients/linux]
                Version: 0.2.0
                Revision: 1
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_25
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /ca/certificate:
    post:
      tags: &ref_27
        - cryptography
      operationId: generateCertificate
      summary: Generate X.509 certificate
      description: >-
        Generates an X.509 certificate, issued by Morio's internal Certificate
        Authority
      requestBody:
        description: The Morio settings you want to validate
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                certificate:
                  type: object
                  properties:
                    cn:
                      type: string
                    c:
                      type: string
                    st:
                      type: string
                    l:
                      type: string
                    o:
                      type: string
                    ou:
                      type: string
                    san:
                      type: array
                      items: {}
                  required:
                    - cn
                    - c
                    - st
                    - l
                    - o
                    - ou
                    - san
                  additionalProperties: false
              additionalProperties: false
            example:
              certificate:
                cn: A Morio Certificate
                c: BE
                st: Brussels
                l: Brussels
                o: CertsRus
                ou: NotThatCrypto
                san:
                  - morio-name1.brussels.morio.it
                  - morio-name2.brussels.morio.it
                  - morio-name3.brussels.morio.it
      responses:
        '200':
          description: X.509 data
          content:
            application/json:
              example:
                certificate:
                  crt: >
                    -----BEGIN CERTIFICATE-----

                    MIIFIjCCAwqgAwIBAgIQZEZGk0+zMNeeFQOzdPmE0jANBgkqhkiG9w0BAQsFADCB

                    nDELMAkGA1UEBhMCQkUxETAPBgNVBAgTCEJydXNzZWxzMREwDwYDVQQHEwhCcnVz

                    c2VsczEZMBcGA1UEChMQRW5naW5lZXJpbmcgVGVhbTEZMBcGA1UECxMQTW9yaW8g

                    VW5pdCBUZXN0czExMC8GA1UEAxMoTW9yaW8gSW50ZXJtZWRpYXRlIENlcnRpZmlj

                    YXRlIEF1dGhvcml0eTAeFw0yNDA3MjkwOTI1MDRaFw0yNjA3MzAwOTI2MDRaMB4x

                    HDAaBgNVBAMTE0EgTW9yaW8gQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEBAQUA

                    A4IBDwAwggEKAoIBAQC/lhIGkpFmgqh3roMLONXNkSz6WegKmI72WKmw4hUBOdeL

                    i0zSmtrBWxj1+f7AA9niPWaU+TISuD5V6pSTGqYA0Q+cX3MNe/hJUk+hnjohqASR

                    tW4MXbxs0xiaKGL8O30F7DPP2YTLCiAwn2ljFkA5jI6YvFh7lSPDJRMJBL7GlK2X

                    fIfaJC793U75mB1GRJQJ6VS0REXkh6fFPXyA01E7DhlLBcmzSsUKwXo36agewWpq

                    DIVWtNDG6CEJVvtdjOTCx5aDysCsfDyVax0/ufCy176ryakqru4YahtuFBLdkmgw

                    1PTjhLKNyGcJb59JtzaC2gnPQ9jGQLGu8lAe1IjZAgMBAAGjgdwwgdkwDgYDVR0P

                    AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4E

                    FgQU6r8GEWT1O4DJsB6Bcy7dOiz5NN4wHwYDVR0jBBgwFoAUoSdQN6s/1SyP/x1y

                    15KPY89ogRUwHQYDVR0RBBYwFIISdW5pdC50ZXN0Lm1vcmlvLml0MEkGDCsGAQQB

                    gqRkxihAAQQ5MDcCAQEEBWFkbWluBCtDVTJzVDhZT3Q0aGJhWFhCUmthREVRVFoz

                    Qk5aSk9EalpTdmt3a2E1M0JNMA0GCSqGSIb3DQEBCwUAA4ICAQA2Abl/JkbsaSVW

                    nyF3FY6Kf4tBs+ZpVufyn5JLyWbA9T/QccBAGw7k7nOSWXhVoDjFBRyX6aVkUUuD

                    LfX30vztU9fXkVmPO7ElBVG163zh+l3+jtZhKmGmHyFmipsDKSRu+zNlyjJYkxD+

                    A+HsTM1cG8+W/KLPOIfQZeE/9HmUCAOtsMeXWuSOmXuq5ZjPQEClAAG0luDVGXuF

                    0gyUDSfe7T8pVdUdlBMLixEyuFBFmZ0jjrf3jDDdor6xM8rl9gFJEGsv24NbHQCu

                    58u1rcLUswMh6xJr3Umc7V3h0Mfaqss2RupB+6s2jgtwNXUPrts8guXKl74qmISq

                    8Voon8kJ3KJqau4rjnpIDFLFErgbBtwfViEH1YRWYGrxSRqD5oDjDDudg3zekFQ6

                    YH0yjCKpSJB9JcF/EDKHU4mwatl80PWo9kLDyivvtUq+cIQn9AJR99NiOSLkUbBv

                    iC6KSkGOSGoibQOKpXCQJkqJLlKgR2IEfy8HiN+Or971JNEKApv7duU8iIpk0Svl

                    20pI4oz4qSpt8hJzW/4CAD3sPnsQrlYmxLWQDNgJhebqwMqya37RDzny22gThpo8

                    GpCrWQi/h5iZUO1o/h/Qy1wNB/K+zzJgGKCJw+BOzfXuX8uNWIYZc6C19AfcuJuR

                    Q0qAthZjtW6wcj7ohuhq49szIug44A==

                    -----END CERTIFICATE-----
                  ca: >
                    -----BEGIN CERTIFICATE-----

                    MIIGWjCCBEKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBlDELMAkGA1UEBhMCQkUx

                    ETAPBgNVBAgTCEJydXNzZWxzMREwDwYDVQQHEwhCcnVzc2VsczEZMBcGA1UEChMQ

                    RW5naW5lZXJpbmcgVGVhbTEZMBcGA1UECxMQTW9yaW8gVW5pdCBUZXN0czEpMCcG

                    A1UEAxMgTW9yaW8gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMjQwNzI5

                    MDcxMzM3WhcNMjkwNzI5MDcxMzM3WjCBnDELMAkGA1UEBhMCQkUxETAPBgNVBAgT

                    CEJydXNzZWxzMREwDwYDVQQHEwhCcnVzc2VsczEZMBcGA1UEChMQRW5naW5lZXJp

                    bmcgVGVhbTEZMBcGA1UECxMQTW9yaW8gVW5pdCBUZXN0czExMC8GA1UEAxMoTW9y

                    aW8gSW50ZXJtZWRpYXRlIENlcnRpZmljYXRlIEF1dGhvcml0eTCCAiIwDQYJKoZI

                    hvcNAQEBBQADggIPADCCAgoCggIBAJdVXnZsMS6/esyEgOBZIowVQOygS7OX1h8/

                    6Wi2HZxcXk6NY6a53s1e0AVqqgnbcT5iSmdVdlsJw2uhHtm+AHAGnWQr+dNwLYBK

                    1e6V5rTrW4oDZ4eMjVzEGfOkvYJplnTi27iqmrj/Em6xZ++z3E5Ujs/OP1k0HXQj

                    DVgNa9hP4fV/JWOd8krWglgGQhSLINhenRldD51IpRfM3jUkxMC1WinAQ/10cv62

                    KQzHGmPK/gDnNb0mJvF5JD0rN+Fr6Y+HY/M5Ti9jEw2JAZwt189fRG/Fpuje/Oca

                    mWDWfiEHszrTwgIGQvNURmdsDUaXKO/DbCq8dDG9bWARREXnU/C3sOVtD1H5Lm12

                    w/LCGa3+81DFcSXcwwxppGl9JgA69nfp8HJTHR1zeNPM1eCPukz/26A3mWEh0zU6

                    xaqS0oeO0+aaPreLn+W7n36/oI0gc1m3hdQtOljBZFOGQQzkP+fQR0Wh/Z/+41N8

                    cM1IALhsXq3Ot0w9R8ewIAitUf5lqXNDmZkFM3Z51fB1novAW6QECk1no+Hiq10s

                    SHMyKkBPAeXMzxEutkT84XxBPvBfFxOyRdQim7hT9bn2t7BWQD49gkDonVGTh+HL

                    iwydENkBuj/5M6+X6f4K1SsdttvyMqO4wxcJyaDB9O2h9S6WAkCL+zCV02BPjrFq

                    XfIqC5XJAgMBAAGjgawwgakwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAvQwOwYD

                    VR0lBDQwMgYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQG

                    CCsGAQUFBwMIMBEGCWCGSAGG+EIBAQQEAwIA9zAdBgNVHQ4EFgQUoSdQN6s/1SyP

                    /x1y15KPY89ogRUwHQYDVR0RBBYwFIISdW5pdC50ZXN0Lm1vcmlvLml0MA0GCSqG

                    SIb3DQEBCwUAA4ICAQAV/yCUT8sZZj7VmSDxdQ6pbL/JWuWI6uA1g1nYNYORf7NA

                    0OSFeb9SCJxAsQoTO2iWmDfwSd1mYIIKDDZ59l8COrWyIlPFvLxaJrfQFuMrK1yN

                    2JDaS+qKRwX2MRdjKQNLR87Ql2oC4ZynJdnflMkSP7Kw3yiok/YpUnf7y5iCuHTe

                    TXatprHebxFAcQJIhx+VNGpe5saRCGiCLfVcB6hXVKhMXHoXfrwhj4nKe8H0I/tx

                    67r2JzvrQBBeVSGqoXDWgbK3RzAyPoom1jj4lot/WajVE2tc/3p0YwluZDiyuhOw

                    VEexHB5g7PdqPY9U5yvBVTDa1lDhPp/5oxXrfhFjIjfrA9IpW6qATqx27001vhY7

                    eTduv3rO0SH60ueBtKr77PA/9qjG+yck3N4uxPofGKZ+ccqEAbeGkxyIY3UaD0EJ

                    ZjWg4QXvhnSL2cnwriJLDXQewiiXYH4ZKWCDbztgu2D49SUp/OO3AIQsf2w4EKit

                    sfz4snFiACNIm+FzZSwdZR/epL5IDZtOjV0XoFOBiWxsc7i5j9DEUDBfheAVxULO

                    he+ZxO+04Zx7NxB5ibJkwLLb5ITsug6qmIlcZ13IZ4QhkrUNcVZfxT2k0tJbfAxh

                    ZvYknMm1bpmi7AEuC4yg2ojnxTEvQsQsWrVKyFyZNEfDLHtBc6q8Y0SF/ILzug==

                    -----END CERTIFICATE-----
                  certChain:
                    - >
                      -----BEGIN CERTIFICATE-----

                      MIIFIjCCAwqgAwIBAgIQZEZGk0+zMNeeFQOzdPmE0jANBgkqhkiG9w0BAQsFADCB

                      nDELMAkGA1UEBhMCQkUxETAPBgNVBAgTCEJydXNzZWxzMREwDwYDVQQHEwhCcnVz

                      c2VsczEZMBcGA1UEChMQRW5naW5lZXJpbmcgVGVhbTEZMBcGA1UECxMQTW9yaW8g

                      VW5pdCBUZXN0czExMC8GA1UEAxMoTW9yaW8gSW50ZXJtZWRpYXRlIENlcnRpZmlj

                      YXRlIEF1dGhvcml0eTAeFw0yNDA3MjkwOTI1MDRaFw0yNjA3MzAwOTI2MDRaMB4x

                      HDAaBgNVBAMTE0EgTW9yaW8gQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEBAQUA

                      A4IBDwAwggEKAoIBAQC/lhIGkpFmgqh3roMLONXNkSz6WegKmI72WKmw4hUBOdeL

                      i0zSmtrBWxj1+f7AA9niPWaU+TISuD5V6pSTGqYA0Q+cX3MNe/hJUk+hnjohqASR

                      tW4MXbxs0xiaKGL8O30F7DPP2YTLCiAwn2ljFkA5jI6YvFh7lSPDJRMJBL7GlK2X

                      fIfaJC793U75mB1GRJQJ6VS0REXkh6fFPXyA01E7DhlLBcmzSsUKwXo36agewWpq

                      DIVWtNDG6CEJVvtdjOTCx5aDysCsfDyVax0/ufCy176ryakqru4YahtuFBLdkmgw

                      1PTjhLKNyGcJb59JtzaC2gnPQ9jGQLGu8lAe1IjZAgMBAAGjgdwwgdkwDgYDVR0P

                      AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4E

                      FgQU6r8GEWT1O4DJsB6Bcy7dOiz5NN4wHwYDVR0jBBgwFoAUoSdQN6s/1SyP/x1y

                      15KPY89ogRUwHQYDVR0RBBYwFIISdW5pdC50ZXN0Lm1vcmlvLml0MEkGDCsGAQQB

                      gqRkxihAAQQ5MDcCAQEEBWFkbWluBCtDVTJzVDhZT3Q0aGJhWFhCUmthREVRVFoz

                      Qk5aSk9EalpTdmt3a2E1M0JNMA0GCSqGSIb3DQEBCwUAA4ICAQA2Abl/JkbsaSVW

                      nyF3FY6Kf4tBs+ZpVufyn5JLyWbA9T/QccBAGw7k7nOSWXhVoDjFBRyX6aVkUUuD

                      LfX30vztU9fXkVmPO7ElBVG163zh+l3+jtZhKmGmHyFmipsDKSRu+zNlyjJYkxD+

                      A+HsTM1cG8+W/KLPOIfQZeE/9HmUCAOtsMeXWuSOmXuq5ZjPQEClAAG0luDVGXuF

                      0gyUDSfe7T8pVdUdlBMLixEyuFBFmZ0jjrf3jDDdor6xM8rl9gFJEGsv24NbHQCu

                      58u1rcLUswMh6xJr3Umc7V3h0Mfaqss2RupB+6s2jgtwNXUPrts8guXKl74qmISq

                      8Voon8kJ3KJqau4rjnpIDFLFErgbBtwfViEH1YRWYGrxSRqD5oDjDDudg3zekFQ6

                      YH0yjCKpSJB9JcF/EDKHU4mwatl80PWo9kLDyivvtUq+cIQn9AJR99NiOSLkUbBv

                      iC6KSkGOSGoibQOKpXCQJkqJLlKgR2IEfy8HiN+Or971JNEKApv7duU8iIpk0Svl

                      20pI4oz4qSpt8hJzW/4CAD3sPnsQrlYmxLWQDNgJhebqwMqya37RDzny22gThpo8

                      GpCrWQi/h5iZUO1o/h/Qy1wNB/K+zzJgGKCJw+BOzfXuX8uNWIYZc6C19AfcuJuR

                      Q0qAthZjtW6wcj7ohuhq49szIug44A==

                      -----END CERTIFICATE-----
                    - >
                      -----BEGIN CERTIFICATE-----

                      MIIGWjCCBEKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBlDELMAkGA1UEBhMCQkUx

                      ETAPBgNVBAgTCEJydXNzZWxzMREwDwYDVQQHEwhCcnVzc2VsczEZMBcGA1UEChMQ

                      RW5naW5lZXJpbmcgVGVhbTEZMBcGA1UECxMQTW9yaW8gVW5pdCBUZXN0czEpMCcG

                      A1UEAxMgTW9yaW8gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMjQwNzI5

                      MDcxMzM3WhcNMjkwNzI5MDcxMzM3WjCBnDELMAkGA1UEBhMCQkUxETAPBgNVBAgT

                      CEJydXNzZWxzMREwDwYDVQQHEwhCcnVzc2VsczEZMBcGA1UEChMQRW5naW5lZXJp

                      bmcgVGVhbTEZMBcGA1UECxMQTW9yaW8gVW5pdCBUZXN0czExMC8GA1UEAxMoTW9y

                      aW8gSW50ZXJtZWRpYXRlIENlcnRpZmljYXRlIEF1dGhvcml0eTCCAiIwDQYJKoZI

                      hvcNAQEBBQADggIPADCCAgoCggIBAJdVXnZsMS6/esyEgOBZIowVQOygS7OX1h8/

                      6Wi2HZxcXk6NY6a53s1e0AVqqgnbcT5iSmdVdlsJw2uhHtm+AHAGnWQr+dNwLYBK

                      1e6V5rTrW4oDZ4eMjVzEGfOkvYJplnTi27iqmrj/Em6xZ++z3E5Ujs/OP1k0HXQj

                      DVgNa9hP4fV/JWOd8krWglgGQhSLINhenRldD51IpRfM3jUkxMC1WinAQ/10cv62

                      KQzHGmPK/gDnNb0mJvF5JD0rN+Fr6Y+HY/M5Ti9jEw2JAZwt189fRG/Fpuje/Oca

                      mWDWfiEHszrTwgIGQvNURmdsDUaXKO/DbCq8dDG9bWARREXnU/C3sOVtD1H5Lm12

                      w/LCGa3+81DFcSXcwwxppGl9JgA69nfp8HJTHR1zeNPM1eCPukz/26A3mWEh0zU6

                      xaqS0oeO0+aaPreLn+W7n36/oI0gc1m3hdQtOljBZFOGQQzkP+fQR0Wh/Z/+41N8

                      cM1IALhsXq3Ot0w9R8ewIAitUf5lqXNDmZkFM3Z51fB1novAW6QECk1no+Hiq10s

                      SHMyKkBPAeXMzxEutkT84XxBPvBfFxOyRdQim7hT9bn2t7BWQD49gkDonVGTh+HL

                      iwydENkBuj/5M6+X6f4K1SsdttvyMqO4wxcJyaDB9O2h9S6WAkCL+zCV02BPjrFq

                      XfIqC5XJAgMBAAGjgawwgakwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAvQwOwYD

                      VR0lBDQwMgYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQG

                      CCsGAQUFBwMIMBEGCWCGSAGG+EIBAQQEAwIA9zAdBgNVHQ4EFgQUoSdQN6s/1SyP

                      /x1y15KPY89ogRUwHQYDVR0RBBYwFIISdW5pdC50ZXN0Lm1vcmlvLml0MA0GCSqG

                      SIb3DQEBCwUAA4ICAQAV/yCUT8sZZj7VmSDxdQ6pbL/JWuWI6uA1g1nYNYORf7NA

                      0OSFeb9SCJxAsQoTO2iWmDfwSd1mYIIKDDZ59l8COrWyIlPFvLxaJrfQFuMrK1yN

                      2JDaS+qKRwX2MRdjKQNLR87Ql2oC4ZynJdnflMkSP7Kw3yiok/YpUnf7y5iCuHTe

                      TXatprHebxFAcQJIhx+VNGpe5saRCGiCLfVcB6hXVKhMXHoXfrwhj4nKe8H0I/tx

                      67r2JzvrQBBeVSGqoXDWgbK3RzAyPoom1jj4lot/WajVE2tc/3p0YwluZDiyuhOw

                      VEexHB5g7PdqPY9U5yvBVTDa1lDhPp/5oxXrfhFjIjfrA9IpW6qATqx27001vhY7

                      eTduv3rO0SH60ueBtKr77PA/9qjG+yck3N4uxPofGKZ+ccqEAbeGkxyIY3UaD0EJ

                      ZjWg4QXvhnSL2cnwriJLDXQewiiXYH4ZKWCDbztgu2D49SUp/OO3AIQsf2w4EKit

                      sfz4snFiACNIm+FzZSwdZR/epL5IDZtOjV0XoFOBiWxsc7i5j9DEUDBfheAVxULO

                      he+ZxO+04Zx7NxB5ibJkwLLb5ITsug6qmIlcZ13IZ4QhkrUNcVZfxT2k0tJbfAxh

                      ZvYknMm1bpmi7AEuC4yg2ojnxTEvQsQsWrVKyFyZNEfDLHtBc6q8Y0SF/ILzug==

                      -----END CERTIFICATE-----
                  tlsOptions:
                    cipherSuites:
                      - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
                      - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
                    minVersion: 1.2
                    maxVersion: 1.3
                    renegotiation: false
                key: "-----BEGIN RSA PRIVATE KEY-----\r\nMIIEpQIBAAKCAQEAv5YSBpKRZoKod66DCzjVzZEs+lnoCpiO9lipsOIVATnXi4tM\r\n0prawVsY9fn+wAPZ4j1mlPkyErg+VeqUkxqmANEPnF9zDXv4SVJPoZ46IagEkbVu\r\nDF28bNMYmihi/Dt9Bewzz9mEywogMJ9pYxZAOYyOmLxYe5UjwyUTCQS+xpStl3yH\r\n2iQu/d1O+ZgdRkSUCelUtERF5IenxT18gNNROw4ZSwXJs0rFCsF6N+moHsFqagyF\r\nVrTQxughCVb7XYzkwseWg8rArHw8lWsdP7nwste+q8mpKq7uGGobbhQS3ZJoMNT0\r\n44SyjchnCW+fSbc2gtoJz0PYxkCxrvJQHtSI2QIDAQABAoIBAC0DD7Ienm20tesE\r\ng8JPtJ/LA4PAOs2+gRwswZWO0HuMwPEGpeJ3Qn0aL5efCDTJ0teeMGtAzvxp8C9U\r\nYVrccHMRqzbEkC3zWea0IYRpveOpa4VmWHgsT7hLsmSJp5P2UA3jrFqhktr3Qo/Z\r\n7DM9B5LdzKTi33ENnazcGYhNZpsV7Eg+GZI8oP4mLNJ6ARvEEk3xzV1bsmJxHKnt\r\nSGg4Vib+a8/Ac90rcXPztjOy6r1tnuXaeeKdfMyQ24t1wiD7KPuwU/0BCHUuORqn\r\n6WMpMeBbTTCuaRvvNvZdG5JIZ2GkZRn/XUDUSBi4l0WDfiCc2mcr7BQbGkMnQhOw\r\ncfkkK+cCgYEA4wzqMPKoGZ5uPSnyZpyxLwke8Mu0kFdvgq+wMhpNKq+ZqN1mq/nx\r\n6G7TiSbxF6Kqsht8lnWGVs3+psqcMTQPDklUKM6cVxbJrXNZqYENwsMqKqdBmRXR\r\nPPIWfjht5GSxCdMX0Pefo8qsB1nkC2+62lDPu6D3FUk3iDasUBj/cuMCgYEA2AOU\r\nA3POMiO8MstzvhCYo471WM7QmuORDETlQw9dt9OC0u9RMjJuAhHDl618onfo3ByP\r\nuKkUN4zdZ7fjG0B0pwjP92H763BtWSzXc4tJz4YzAo5zkPxtt5MLGb2eG1n3xsm7\r\n7CVlPNU9C0xf5gQM0ddW8GrqX2lszFkZY76alhMCgYEAr2xMCROCs4CH9fPR2Fwa\r\nPZgTcsJAuQEFI/iv7pYJpwBTfXfKGvebYxU1lRMkVTmWHtRD10/oQmsX5DBIq29o\r\nboZTYs/3VQZDPiMQVHlkc2Us0BW4BhooNqlonY7lwP/XFRsmnIqlqfwuG+Pk4L0r\r\npf+n8HS2UpjmMfTj/2LBAzcCgYEAtkdesQMZrgmll59CzdGnW+0Yb5YlRW5eSWIh\r\nq9LdnG8o5+H2PEt9tNVUnTtR/q78mjCnvoU+gBmoAwuS4r4jMYgoJXJTaDr4qtVC\r\nAUg6QpnVlYSrVF8OHmhAZ7owHphukxpML1rm8MxntI8AJVKplrEFtd4iY9zMaCuP\r\nVzHRtG0CgYEAm/BRJG7eVtBwzSKMJzdFgyIZFPZTrgkaZtnxrOarCkHwWbOW9i3y\r\nRBO4QuoVTU4XMUrQxQPDQLZ/Feo08qNuNSnbp3yTeQRIHhBnGqY2YjiRAIVPReDl\r\nCY9RafOlspqXqxQIEtz7rSS7Ezn46G158LvXGI+/1qHPxlejU/7uswc=\r\n-----END RSA PRIVATE KEY-----\r\n"
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_25
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /decrypt:
    post:
      tags: *ref_27
      operationId: decryptData
      summary: Decrypt data
      description: Decrypts data with Morio's internal key pair
      requestBody:
        description: The data you want to decrypt
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                iv:
                  type: string
                ct:
                  type: string
              required:
                - iv
                - ct
              additionalProperties: false
            examples:
              text:
                value: &ref_30
                  iv: f098ed647cae1e2ddfc53240c786c3ab
                  ct: >-
                    43a24de68ca4e8625692e3b3dc8e586d5e146531d49a70c727bac838d57bcda0
                summary: text Example
              json:
                value: &ref_31
                  iv: de2ec1efba8dbbdfa85afd4a13319160
                  ct: >-
                    67aadb5e24d387f5ff4a9e6827590052ea0a78b015860a2b4f5c79801f6d3ec3294c29214a4e15cf90ba633f5df825c42f82e7c5ef14ace06a3b1981f7992991ee3816cd0c372629382966344431563ad1cffd50f444c35250806dccc36b88c0
                summary: json Example
      responses:
        '200':
          description: Decrypted data
          content:
            application/json:
              examples:
                text:
                  value: &ref_28
                    data: This is secret
                  summary: text Example
                json:
                  value: &ref_29
                    data: >-
                      { "secret1": "Some string", "secret2": ["an", "array",
                      "of", "strings"] }
                  summary: json Example
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /encrypt:
    post:
      tags: *ref_27
      operationId: encryptData
      summary: Encrypt data
      description: Encrypts data with Morio's internal key pair
      requestBody:
        description: The data you want to encrypt
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: string
              required:
                - data
              additionalProperties: false
            examples:
              text:
                value: *ref_28
                summary: text Example
              json:
                value: *ref_29
                summary: json Example
      responses:
        '200':
          description: Encrypted data
          content:
            application/json:
              examples:
                text:
                  value: *ref_30
                  summary: text Example
                json:
                  value: *ref_31
                  summary: json Example
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/allcontainers:
    get:
      tags: &ref_32
        - docker
      summary: List containers
      description: >-
        This is a proxy endpoint for the Docker API on the host system that
        returns list of all containers available on the host system.


        To only get the running containers, use the `/docker/containers`
        endpoint instead.
      operationId: allcontainersGet
      responses:
        '200':
          description: >-
            [See **List Containers** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerList) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: &ref_33
                status: 409
                title: Not available in ephemeral mode
                detail: >-
                  This endpoint is not available when Morio is running in
                  ephemeral mode. Since this system has not yet been set up,
                  this endpoint is not yet available.
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/containers:
    get:
      tags: *ref_32
      summary: List running containers
      description: >-
        This is a proxy endpoint for the Docker API on the host system that
        returns the list of containers currently running on the hoste sytem.


        To get all containers, use the `/docker/allcontainers` endpoint instead.
      operationId: containersGet
      responses:
        '200':
          description: >-
            [See **List Containers** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerList) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/df:
    get:
      tags: *ref_32
      summary: Get storage metrics
      description: >-
        This is a proxy endpoint for the Docker API on the host system that
        returns information on the used and available storage on the host sytem.


        This endpoint is named after the the `df` command on Linux.
      operationId: dfGet
      responses:
        '200':
          description: >-
            [See **Get data usage** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/System/operation/SystemDataUsage) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/images:
    get:
      tags: *ref_32
      summary: List images
      description: >-
        This is a proxy endpoint for the Docker API on the host system that
        returns the list of Docker images available on the host system.
      operationId: imagesGet
      responses:
        '200':
          description: >-
            [See **List Images** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Image/operation/ImageList) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/info:
    get:
      tags: *ref_32
      summary: Get Docker info
      description: >-
        This is a proxy endpoint for the Docker API on the host system that
        returns general information about the Docker daemon on the host system.
      operationId: infoGet
      responses:
        '200':
          description: >-
            [See **Get system information** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/System/operation/SystemInfo) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/networks:
    get:
      tags: *ref_32
      summary: List networks
      description: >-
        This is a proxy endpoint for the Docker API on the host system that
        returns a list of Docker networks on the host system.
      operationId: networksGet
      responses:
        '200':
          description: >-
            [See **List networks** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Network/operation/NetworkList) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/version:
    get:
      tags: *ref_32
      summary: Get Docker version
      description: >-
        This is a proxy endpoint for the Docker API on the host system that
        returns information on the version of Docker that is running on the host
        system.
      operationId: versionGet
      responses:
        '200':
          description: >-
            [See **Get version** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/System/operation/SystemVersion) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/container/{id}:
    get:
      tags: *ref_32
      summary: Inspect container
      description: >
        This is a proxy endpoint for the Docker API on the host system that
        returns information on the container with the ID passed as a parameter
        in the URL.


        This endpoint is equivalent to running the `inspect` command on a
        container in the Docker CLI.


        Note that Docker accepts an ID or (unambigious) name as input.
      parameters: &ref_34
        - in: path
          name: id
          schema:
            type: string
            description: The ID (or name) of the relevant Docker object
          required: true
          description: The ID (or name) of the relevant docker object
      operationId: container/idGet
      responses:
        '200':
          description: >-
            [See **Inspect a container** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerInspect/) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/container/{id}/logs:
    get:
      tags: *ref_32
      summary: Get logs
      description: >
        This is a proxy endpoint for the Docker API on the host system that
        returns logs from the container with the ID passed as a parameter in the
        URL.


        This endpoint is equivalent to running the `logs` command on a container
        in the Docker CLI.


        Note that Docker accepts an ID or (unambigious) name as input.
      parameters: *ref_34
      operationId: container/id/logsGet
      responses:
        '200':
          description: >-
            [See **Get container logs** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerInspect) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/container/{id}/stats:
    get:
      tags: *ref_32
      summary: Get usage stats
      description: >
        This is a proxy endpoint for the Docker API on the host system that
        returns stats based on resource usage from the container with the ID
        passed as a parameter in the URL.


        These stats come from a container'se `inspect` command in the Docker
        CLI.


        Note that Docker accepts an ID or (unambigious) name as input.
      parameters: *ref_34
      operationId: container/id/statsGet
      responses:
        '200':
          description: >-
            [See **Get container stats based on resource usages** in the Docker
            API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerInspect) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/image/{id}:
    get:
      tags: *ref_32
      summary: Inspect image
      description: >
        This is a proxy endpoint for the Docker API on the host system that
        returns information on the image with the ID passed as a parameter in
        the URL.


        This endpoint is equivalent to running the `inspect` command on an image
        in the Docker CLI.


        Note that Docker accepts an ID or (unambigious) name as input.
      parameters: *ref_34
      operationId: image/idGet
      responses:
        '200':
          description: >-
            [See **Inspect an image** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerInspect) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/networks/{id}:
    get:
      tags: *ref_32
      summary: Inspect network
      description: >
        This is a proxy endpoint for the Docker API on the host system that
        returns information on the network with the ID passed as a parameter in
        the URL.


        This endpoint is equivalent to running the `inspect` command on a
        network in the Docker CLI.


        Note that Docker accepts an ID or (unambigious) name as input.
      parameters: *ref_34
      operationId: networks/idGet
      responses:
        '200':
          description: >-
            [See **Inspect a network** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerInspect) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/containers/{id}/kill:
    put:
      tags: *ref_32
      operationId: containerKill
      summary: Kill container
      description: >-
        This changes, or attempts to change, the container state by issuing a
        `kill` command.
      parameters: *ref_34
      responses:
        '200':
          description: >-
            [See **Kill a container** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerKill) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/containers/{id}/pause:
    put:
      tags: *ref_32
      operationId: containerPause
      summary: Pause container
      description: >-
        This changes, or attempts to change, the container state by issuing a
        `pause` command.
      parameters: *ref_34
      responses:
        '200':
          description: >-
            [See **Pause a container** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerPause) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/containers/{id}/restart:
    put:
      tags: *ref_32
      operationId: containerRestart
      summary: Restart container
      description: >-
        This changes, or attempts to change, the container state by issuing a
        `restart` command.
      parameters: *ref_34
      responses:
        '200':
          description: >-
            [See **Restart a container** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerRestart) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/containers/{id}/start:
    put:
      tags: *ref_32
      operationId: containerStart
      summary: Start container
      description: >-
        This changes, or attempts to change, the container state by issuing a
        `start` command.
      parameters: *ref_34
      responses:
        '200':
          description: >-
            [See **Start a container** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerStart) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/containers/{id}/stop:
    put:
      tags: *ref_32
      operationId: containerStop
      summary: Stop container
      description: >-
        This changes, or attempts to change, the container state by issuing a
        `stop` command.
      parameters: *ref_34
      responses:
        '200':
          description: >-
            [See **Stop a container** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerStop) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /docker/containers/{id}/unpause:
    put:
      tags: *ref_32
      operationId: containerUnpause
      summary: Unpause container
      description: >-
        This changes, or attempts to change, the container state by issuing a
        `unpause` command.
      parameters: *ref_34
      responses:
        '200':
          description: >-
            [See **Unpause a container** in the Docker API
            docs](https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerUnpause) 
          content: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Not available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_33
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /export/keys:
    get:
      tags:
        - export
      security: *ref_16
      operationId: exportKeys
      summary: Export key data
      description: |-
        Exports Morio's cryptographic key data.

        This endpoint is only accessible to the root user.
      responses:
        '200':
          description: The key data
          content:
            application/json:
              example:
                keys:
                  data: >-
                    {"iv":"51c5f343bf74a26d483f9da100969ae6","ct":"d8eef05f08c2cbc25ef650ed096f9a73a06c3cf0fd59e7440eb70bd8596467f1bd0e94faca78e73be02f1276a51f1c1b589145702529ec91d8528ccc4474031b1ffa6923e96910d2cd815c7de13b16f65f52cf739c8be83170349bcacdf6e82a60bbb6b03b5c637bdd2a412dfe094d3ec7a045bb4037b22caa793e96f516d7e336ae0e70ea70725ffc99495c733353a82ad4a628f57da81765997cd728901c13d2343562c82dd99971fd7b84e1c1465dfec0ff82de3535eacf8d07827a814f1a6d855cdb4eead03904c56d5fb9de706c0b18fa0b6dfa45c29da7c9395be9a4f33891a73e7446dc03b5cae153d2cdb3bd3eac955f117f323061b77de9c612fc3037756f141d883d1423459ae0d977ed10c2bab0168cf2765029ab3d5633d21d738e6a55f41ca8ef4a1c76706588f54e07ab99952a1b622a8b55fa3406cbfc562c047ee29cca3b9a5a97f8e8562bd0d5ac0f40b9f358b508cedb58349598ea80740dc10ba6e5e6ce578d2f1bcdc33ff7756951daa2d9c1d035bd9d44ffa8c636971e3a652e6c09c535dc7ada15747dbc5686ba8a98879c68e1431b942b2cc0638731097a75ac4880a73868febdcd7e054030c0fc07c9e778df07b7206c06432f7cb711ff9c859d84cc598835810449a6ab7399bf044a2cf070227e0f113a3a76a9f1c582f98a023f55fb0805ce175be61c52424f362abaaeb22ec24f40fa6db89aa0c27f2720a25909bc18e250eda39222337dabb35b15e17676703e2f2d32c7ef58ccffa2d2f5be4aa14e98dd4aa8638cb809fba63e38718d6e3fafe104722b15602c603c50eee49fa42396162bd620b9062fddb95a312d0c8ced4e7c8c9d7cd25358e1e4a72b88c34692744020703e7605138832dc27bca82be102a8038c3c086091fb4252c33c0c4e1749fdd6a19e1cfce2257826d6bc922d368bf2eae0cfb28f209bf60be109b05b697ee979ab9899e9a15a5df846c90a01503e51639acb8a9ea3fe17a616d98e57eca2fc0438e9b8198b5e6f51e72415880b89d68eebc261b455decbbc8020fc27153bc80236a3851cfab68f989354f461ade607ddabcfc2e048a0ab60e21a24047a55317223a5d27f1a5210c6bd7784b37269ca8239ac0e6a23555fd6f41009bcfe3610eae95bb9edef4db05b384f98e1a1b7422ac063fc6a78836c9809ec1072d68ab78bfd92b5f9e37576adc72bb0b3faf8271cf719cda895eac35d97a06f089847e9174992b5117ae35b7247aa12e835e96f524e1caad33d74112f560a3c95d6aef18d0d80ade8c2937991f5584978c6411334f99de801599e28fbf4ee1c13b2ddddceec686ac1b9705b1c8c9d30d42df18cb59d968c67559ce63ab9148bcbc97b825634fc41f07f4a9c31b9cb30f945fa567b6fd105c2d3595e23f36d9067a82e8b72973ac06bd67197a42f2cfd55b5b0700afd0897fdaddf72cd165eb678bfc6629db8991ae70ca2c945ba2880b26149ebaad96d8b93ad829b939c887bc51ac29b89cf483311f9724da392ad5464229c6ae5d9f2f83389c447cd9c2e444905409ecb8700a6372609444408262e36d398492469ecbe947948ba98fc07a034d3c92467d7326a124a9e88f0faef27b2badcecdfef01ccb37214ab54dca0c341b4e747c5726d030617d12c45162f86ffacff18357be8126ec1ea7306ee031e758ae555519fe9b97a5728418addb57e00cf889abf3024b4569e4c7926411957947195551dbec6b023c1c553dce26307e0a40b23894a132f2a6cbeb4bcddb57df9f1974833f9a610605b3364713394e3953bb664003e9de3d39a0f1821178cb344617c8f886e5662a47d6801c765a0437e577fbe18ddb97d8e8c92b3794b7a9a7afa3d7f391161bdf38cdf635038f0139b2ad491ce7d6755f61ed2b9a14db52b1c88e37c680aadec519746b062ab7646281afad870430cba21d61254f248da640ba93a521c2b4335f063b6049468b006b37e7aa3e45155aa44d13b1b21aa211430b0f973351e074460aa79081d0b4c0c05bc2de6434f93b90dba6811c734b8334169403f36ee4bb78fa3313b57a5ad1b81754a1bc8c93ef01d2670e9abc9ca7d0e3b13f6da16980103df0f0ad64fab9d53f40a21f790f45de40eca52f00eedb2a23aed01d4b3ec6c5c6e8672a83ed5c73345fa0354fbe999c8d380914f85c4d2a8842f6ad5def7d10ff541a8333bde0d17aebf660f762b1e416eebbca3a88b57299e555e1567e1614b65c0ddcd9afaa10f58e4c1f096462018a3cd492d4dada35e1ac79f413811f483a62ba646d5570c1ef06683ff1e93edeac1bebd09bcdb66a126f94941b1186281f6407077b9cd77eeeed7db20018e4dfd18d51d3f0d8cc6ac8603c869df502c1d8f4b583ffc9c0d37e4302734228b7ab621b4a149f610052698ab68b55ad49aacbe6d5160d60fd381675b04f0bb9754601c8b7c25e1fd51c73fd55e2c53287bbe587c4fbf978e4890c35ee5e369261e65500837903069b15fd8638ae478e5e18513c09ffb36ba377e1a0b4200ccf1bd48c57a55d2e0bfa4307f35bfebdc0906afe017fd81fc2b359624cd43031873ffcb9b41db1585414dde90abe90d6fce7951c5f26cecf91b187e18886293af3b7843c9b1f418022c208272eee1fe27dfb901f3655120ef2d9995a408fdcd7cafd09cf366b49cddab1038e7291930f93a09b77ac9a95b9a7d408a5af94e4117f7efa7d45536f09bba0e9473bdf78d6b1a81ddbf77b58d0cfbe9f7c50a1d6c69c789e2bf8edbbd2788fd517849e69487a1950f40235e9a20074d8452db0b5fef57d6f8cc633bcee7566254cc9182091e6824f73ef32686b06b0eed9afc7a0b53e7982e0148d097b61d6b4040cfda1463959fca2f759885f5e1fc564dc8bb6244ccaf7707a4c9ebc00eef664c9cc73a6fa5f36aa9bc175b6f261af78104f03eabb9e45f25e6abf3edb465a4a72014488c3190c70608bb1394a43f06dcac87e33992ccd149c6db38144804d510271eb4f7896c390b45c7179e60cc8991db633a8277ea2796a133c2ce2c070a7996aa0bc789d528f5d42c65627481cd7152b8545555512ee22438d6906470c98aa15ce313e331a818acd4a5744d55605e735f2bb8ebbf23503db7fb036bf84808d871db4165e0fedc04203333f2b6295f8f9307cf62eb3d4872feb6d36b4d68472da91ec13c562b12012d4fc5e2d03818507a257ebb2e38c469fbe730be5f7fb10b6ec5c6661354cea27218da228e69298a65c6d74169eccc04f219f4d0791eea51168a60479ac04fa6aaa68c876d1ff5804a3dd1657ea8b535ed64effaa3f7d38e3be6c97e7bbd5d4a7467e2ff4ed9ec282388e93d766e1bec0239e4530db0b81d981260d2afcf86eed6ee27d30e7c0e112377e400d26a880e892f9bd58490aed073ef3ed977c11ee1af4777033efa9889ffc809e431a3d05a12b7ebea13a6242d003c3335768459e163097c62e4c99b7d5db0b0df431178d6e8d74101df87d503a50c4954967ca5ae628c0fb266d3413a21bbd2af0cd5ec8351b8b355e951e0826bc24e3ac2194407d95645fd3c6efd255c80877ec0cd2fe0cb311528099bd8c42c013893168fabd7834fff47c1ab767cd5307858c9bc599f6816101326c2eb9ffa5e9e1dd4e0aaf15cf1daeaeb691c067e9c6753117a63cabac3e6ed7f043171cefe68a3c81c6e1cb64e838f02cf2bb7f00bd341dcf16b9944beeff21705f3f0c135e9ca7f8cbaf7974e85de7d7aedcbc1ed1afa92181b81046c26d34e469f449f63d93241153be72fd14e01cd442bb0408a4c5351238208f8fba6e80a3a41583e823471ba55efac8b0ac78e929b497e4acbe343705ccff14e07b27edc9191940e849bc95e55f0f30f9e7345d39b84b7c6c2119215b83dff879b612e2e18f98694cc5c5f479913a576181c6594525fff31d97e9d9d5036fe5ea4bacd0bb430836aa0a4d01060ec1c4dcb14f65b22732577f303d528e7dd96ccf11f6e5114529151687e8c14597812f00c9e57610d3ab75e6de3ade5e055b035129f804f4e3a141cec9aa9cff42060b3c54b956aacf6380854256519acdc34e154f3fb546fe2c5db99b1f6d90694583340ad3d0d936ad7e26bd579be1953e87d5951b62a0f9d7c596536841a36b4d709a0f50ab80798540e01033321c9256191c6565a7f9d52385a08472b5c225deba98f469ab2e0bd9a674ae36314ad747bc7ceb397a9a7ca548145e5b49ea3f1327467f97fb872b17a7a5857ec68aa6500f535911b138328fe7271648d91a089cd360c2232952f8b39ee05a1176b5c5e83c0c1c641655aaae676fe80b52fe550c08eaab93a4af64fba25ffb4adb8aa10f693b504af7760242607ae01b5927841d2c7279421a6f928c5fc650e2517b2667bd83a5682d4021fb0b3504f410d9217a089c3f1295610cafe7bbb48f12050833ce50e8c103c1f82463ff3aa21ef798c2fcbc511905c496f46ee093ffcb5dafbc8b4e8d5e9d3b03c6d63baf2ae53aeda4ba3b9a57e4f9f66144e01ea6b38d792b0adbcf1a7554e6bb4cd0dc7523baf4805dc50c8117209c1da71d932437831f19243eecfe536c1e697e0125ffc28d8d2484b193e109bb95630357fa7dd83b8d28c6ed2b64e7fb5f0d20a27a7f835e61a704e4a2001acb501e9f4e617cde5c53d2655e4b14f176aaf17d35d00511a331d61fe0092ca15bb73c317f6dfcfe2ffdd6b4eaea3faec6d4991eb2c47f488ed355d9950f7cc3d2d248483c83908ab87d4af218c482b36f3935869c49439901b17c04206e6f342af8dc4c339f4d6222fbb97ce4e0ce2de08e7fba3f36ee7978d4424232a1c1f060d0462531d72ec0120f1c6ddc34a554298875bcfd91578c86024e26a4915dd769a1497f289f57550ad37d845a8059bf6a04e851383655da1b03b6518bbac49ad4f7b7d91ffb08c5506a0d23618c8b635d3351921e53b6cef89f300fdf750c2ef25bad39b330d9561a2126cd891da9d1929ce57db8cfcc32a8ff27615aa86a91a0721af8a6a38382fb88b759435e69cf47d66482b40f2e8cd3b6f286be4aa47935bacd41b92c24e247726afa671320025aa8fedd714a7a3f83eefce2594e6882a7122cf32e19a392a8befdf0b11c8115837401e6065a028fb86bf589b2263dc1df57ff9191706ef94c9bce88974d40c37a6c3e389427a87920bf511221d928cb2b8c8902ff87915db1ae87fab0483d02ab3af9b5c85c56172157e14d0a602bd41070430617c5b9b4f46250de63bb6e3af5ebeaa439556d01912fd5b9385430e67ff27e0e423dd394465242b178ee5db5c1445c84b7b0ed43989d40965db20e15a2c61753590475ae5f172fc32c3d27479677f4473d2b88e113930bf4a4ddf619493b59b9220ed99a8759af4314806ac57bd085dec90d5ee84e2d764dd4f813a1c8d7346ac132865a6c101f16f1e3a8c929d175676893010bb73e03cd8320d943f697d3898092778f1dd7af14cc8299c891ee7d67835faf788105e9ab4b207589ab3a2057c0f119f72565aeefb64fca6c553dc815890dd641576ac2f08a1304930a15676e4f3d1bbe9a874a3155d09cd51b6877847a97daa6f1cb2fd8e57a14bf0938753a4c17e4ba081bc4c1495fad6f0eb1169b375ba2406e543d8f37856949f845303a8515058e594a62fb4d8cf5570aa2ac168dd80b0dcf5ed02828d4f5f47fa9f16e156d8224281608042148763112012e17192b02df6b4425a8c8395b51af67de1d54be9c942057425387c59397fc2b880f3274b8bee22cf30a4948245c4f1dacdd68d74f2180fddf9344b1d0a4345e5a273210a330d703d64f240a21c2c69faafe597792d83c004972dcc1ad32001b6de02e9b0951230e84bed0b9325a213b222b5ed30f63254d4dbded210e085f94f7b7c6094fc067db41ee1af9aaa39c4199570c5f678998e9faaf2b1656f42ef94cb1ba21e4a3ab0fba8eddbdbab4eef05a21b34b27a47668c87e812fac50b3b8dfba5a064bbbbb7f0b981aa9dba79a3448ffcb35036a0a1b9159fc23f2151e1d8d1f24d84419a13b458f21416ffa31c2bd437389222e203345164636566dd7d2d4b3897279e332927003301c6e4c32bb23ba05cb4a55a76233236cfbc18c9d29cae486ad4321e42dc902e7f9b4a807e381c7bc090ad1fef0fcbdc91d38d5511329550fbf8876e311245cd04be064201b75f591f3a34126bb34b3f0d22848bc921490c56a29e5db1db3098d784e74ba0d2ae637c19c229992cc7e1b3e94d664ddc30b698b08e00cf467a466b6a997bef8ddf507eb2fd0074106deccb4d75b609a456c761c19431b2c43e1099c5074f6f5c89f1ae7a275d097465f0204c517cef30a525c5eff5ce6f6f6134bbc42b70843005615471f16ccd7c0c1cd34d1673799c56b8a8bf7505454fbdc060aeb7128b825e8c891642bad2820ae365a131054f220bf759abe00e87e7e950d18254b07f67e2c053a49d0b06f2b650ed73c3f93e4d7af130eba927724c70aa046d02b04592548407d79b01aab6e5fd1d141beab472a870cd6a4f6facefae337b25c22e9a1861a4ca5a71d250bcb306db8a46fbc4ab568111de70a4ed4f4b62cf9e466b734857beda61d56dfb6183a76b25479a8cc296740b889e01848f12b3566ae23652573e390e3c29b9bdc5663b0b4cd2d48f4e20804de36aef7bd9281c5fcf32b5bfbc80eb18268dd4a3f7c2bba6cdb3193ce0bfd8b372a929da8845d1f7636726e7d21c494285a470db355e7e058f52a1226a90b7f949c64a025d62a8d69077c9c109d09ead3ad6be9b36d94ad5c032c3b67903445f996c665108458ab4606452196162e149171bedea49535282a3b23b941c8bb40478e05cea23c3c5cdd4ec538fe68f01840d7f107648fd68bffd765de1826059c2de19d02b7bce263013f6723fbd174d743c76229356c293fc7666e506867860c9cc340bd5dbe2e4d93f9b2d903d669b41968606a54c5f71e5d6b92a8e48e0e48e65f2f13979572bdea0512267e6a98c3bbaf267cf0855bdb3a4e0a443b028a9548fb24832c5deaab02ead28432a6615a9bb96a972ee5a6773b428cdd3b351765f6329203a6b73b758f594afe055bfed1b085635d63c520f35f181c290064e0316b03696409b1cbcad2d2a988329759a13be3e671a681155e4ae637c4110997df819641102ad766342581b49e6ead051d2e2172649460f7cf5d4fb1f41c73289a2f4616eb703504ff2b17fd8a3556a85a81bf7b2b77fcd070d9761a5c93d3c4bf0f050f18b7c9a5c2b250dcc6b6f17ac25952b98690a5f2d2000f2a843da0045c267db72b99cc97ac8b9fbe1cd6fcc17a423278956d4af58afbc5825d70d533e5766b477d8a8b1bf7eaefb335a74241c5eddf844d9e1265706f117d2c1eff328fae33fbf2d2f2b8409d95b63053ccd56eae82153d7b05b15bd77e9b9dd03ab454ba1ee3aa44973ae5403ed657e9a5ed822012033b5a53e325d9c4342f6799b55960fbbb2f05d97b4859fcb5d0833d02e79f9ae8fbb333ea1d6c0474a86d744eac69aac4f0c0b8d3e6b872bf60df29c84d475ad67efa78ae69c6e8bda7e974af959c6f53ed1b516cf131b0645eb9ee9e9a71abf48c2dd492fdc711ed4a8c4f3242b1a397a8fa371d9eb8053df011d3ea44cefa4facccbb41bebce1d0ffab573de31ea0861d41ae7c84bf387c4be66af332ac39a4760def8c5c85a7cade0005e68280377497cf52af5d4201d2fc64b4047a6491abe24b0c9d97f753ddcd0a37bef327860a3064fe92e24aeed149fd1e015737d6815d2f2dd0ecc42c1a784c622f7c89c5b09a89b69367f8099e3b3a5d96386860cba986569bcfc67532739f1cb050172a4d4c973ac86875874e75a9105a4cd612da6a1c3d1ea0e7e0c5a2ebecd38fd2252abbaffbdd57c4563aa3dad5e974961d324d4b4808abb88a32128b73666f9396a977f40927449bae43f19b577b0a7b8a64e1b609b178a4a16e1f1942d59499eed76e5eb5e366a81128532abf67a39392dd5fe9af0de591b2301990b47cbb7a53be91a72ffa30348208d12c37afc953da7e3632c3df7028e53a6af8a3578c123cae5793739ffd9c9656573be094498cdef43fbb2747372c58986802ab2f486bb23a95d9a49c5df2a0542be6ca106c5b6499be2273704324f174b983a5767ecae81cbb5ba94e16f9c1465c245a02f93420e667b51e74ad664f8ea735461b8a10e25a15392b55f9af4d8c2f15101764d667ca220ef73308782d2c960c4484d7ff20c8e700fb5779d8a38653e0fecd49d81b89d542e2ea578b0dc755fcb44b121cbe5b08415e7722afe249d7a5530c53570e8e576bd703c736a4ce047ce041d088e921a68a2a454085113e04352e9118aefc0f8ffd162658b3baa320af0e0c9d140e4c0e93dc9b7dfee09c7c7e7538ceaed7e995d2ee6e1b897a7fd2b6c6dd3066c264be79189308929c798f3d9b2e02e8272c52041e20b5bf37824ff914f566730f43b5e95d72c2934dabe2fecc0cd826efdb7f96599a42e83924eeaaa5a94ed4877689f4627cff50c52c06d845b83b5d0b6c0b2ae53c73a88385059dc9554de26789a944e2141c18e2c5636910cfcb7226a20d7dc8f8b95e0d66d30130377e474fac503d4ee2908b7964e66bfb5fb08b4e995a59595cf50dc7a50cc7fb4686b9b9f504dd670522417f3567006ec27907d3c8fa1151d3f309cb82cc0bf48a6cf4c3bf1391ad58734ab1b3c18529b96b66144db43e25ea1582b7e08256507234101c8156d987f600ca60082ce6d68c12e5d0ba5b7c862b37544958c2b0bd1075454054d79ed8482fad1d7f055237ec474657924ab3d772515775fcf10f60082ae1759593b8598ab412d7d07f335cd75149650947d648dc0fc421463cc13155c8dc3c4cc8e367c0fbc6edf9fe1efc9041401e3bc80ecaced83919a16a14b5cc154abd6ea9c7b7fba156d768f438c6689230ee8ca4d85fc90b8a231789d8893fe37748b22e45026f4d31b019443e0b75cd2537d59b8e1afada92b8cfa3afb12d46ba9132228cf0ff3d82affd184dc0f540abd99610678f0c5665d8d32c786b0028413d7495478a72b36ca386e87e747758fc9a3bc878598e219231112ee2aefe2db2e79a1786cb7d40adcd7feb485a57022688f157aa92a3270ae70d1aa4a82d4865f428705e0a6292ac241499ad73b75fbb98333a15b7a6b75825422de7388ed49635ad30533ea2f913e47926866db165bb7505dc7ab36b115b567bc747dd47913bb56ab2c7ab2c89dffc45061ceb8fde6593618358371198583f52cd23a33504d67ea323a1f87607d7a56aa262d3501271af3c49ffe1129706871cb3739cb95970488999adda5e0b504cc543ef6716f9de556839178875d0ca2c4cef933486508917b441ad12a789bf61d71c9c7a4b94d58187c3842f91c7ab1227aabce235dea3b2d92e7b5d7715398d5c120bcf52543e6ca17a78fa3c534521651573fc32bd9775f976262c14fce2dfcf60e51d5e48127cfd022f3f064bc63ecc0989a341c4377265d81011d995aaa81037225a781b5a2557da34366a77dfc67d9dceac2857183935e1df270bcdec1e60517abf5acc9913c1574ed07c6c0c9e335b037811e694c587db9d8a5dc55c7734a2cde98f1acd9c067bab9a8bb480bb44688634c88f20a300bc0e5e0b3c7d325e67b6ba36a8f87b2260c6617a1f3ea770a1490216b40ef42ad812d4fa2f5e17b04d4041b562e6df65d79ab1631e69872b43077b91d525ad81945b9b1a9394d6175567011d65020d55d7263807a4dc139faa029211433c55721cabe0de9abbdbe6e0e15f81f23bbb1255315c63045858e1fe99f40dff36c6e5096272978b5150d9802b87cf62322039c92d714e9610a3a6e8eca7fb00295081108b82ece04efcc64ae8ee11fc9918fb20e184bec76bdf3ee0f25ddd055f901e049fec5339a806b0910621c61c767a675bf5b1ee0b05f90161336533626e243f643958b18588c850695d3ca15f18fcaa851599125dd814160a998fa94dbbbcbe56b8eff8c4e69f58987f66c5590043c4404e9bb11f93eda9e0f665e3fa3db146d2a70b3056a3070e0087276b8240d8b3327832b952eb4e40b2ea4d9d9e2900d4f46df6db27a30a07181d64c059d850942529e7450aa3ca1919489375ffef7f473e96e26f43b1cb25f3f22b4c651a0fd70c0520f28df94404685083346b174a431914fd4390161daca2f9a6ecacb986f812ce165b04e356f9a9559c378ceef80d2849efb63e1c2af3a984aece5674c3e5462787275828c8ac80ecdcafd9eb1c41287b95c36d40e2fd57cf318b9e5c947c51a8f65854cf6227b8cf1380f422264c852134b14a5bdf34ed2dc62fbfe7f2a0b8e96292c6a7d18623e090da6da78d885d04f2f43d130aab65a782f41254163cf95d6ec7273e25ecef18c6161569030f8f9e891b73d04f7811eb037246701ef9c1543bd2fd0bb75b64ddd8b89e502b587db2ea614a70ad7793b04bda8c556bb6dff7232c66e72900b5cd5d15404acea7af240fb56b2f6a543b0c7e316225588dafe5edf9667bd8465f650a8fd553288a749cabe5bf5ca97c8368f516930e9bb5f5e43e09d244e6485e6b9f82f095671fe2d91e61a1b930da01cf304cd4ea3d987c75fee4d3450b05a5046781c2f9b00b6850047412af3853eb0f2f31f98c63c8c50eee0827e2ccc39052a2ed85fb9265f39487a4e743723cf49b99f775eb65addfbb065a5b734b93f0eb587a56a4ef9cdd89aa56cc8eae333f4c836276dac5f9917c96651ee106862d280706e98321802002b10bce5f41f2bbd1bd646ddbfe01a7eacc4d70ff674249bb710b5771e322f309e2059daf7899e5d53ccf70063eb5ecff91ed37f875dbc4e6fd7f49961fa182a9e5451f98a529e0449e3669d4d2e9115dc2a9fabc0f95193c563f5d23f51bd138168b067e11d17fc6e6ada36af94066920718fad5b6f5e9b5f242cc791675be34f810185a49a1188c354ac8bc667a3373a5926007c86961e741c5174c7829e1d12ea6c41506df233614f4e254734d2aaa88a93973f4cd3ca39b954f4706a4de2ba147e868d13803b1c8c7f0946c307caaa33198e6ee3f130d84ef8d435f8807b21880ce7762a2b0a059653c9e5ade96abe23317ec9f6d77140eb5106f412151aca92d05555b6d2e8a8f9640c597f2c1452ead38ab01419cde0149a52e3611f1b463d59c439ae4e6359489aea53cd57dd0102d6ff229a585b00797ef482533cccdf0d1be85a2890d2750f271d39e3e811e385e06461b43906a2444e3135d0a77857fe77b4c0ee29df1b8d7bd28a3d655cfa588350d5380bcdf9c9c95f532f648d54185274ab3919c4b34b7dfa4ec9045f9c220e497d8dc16e0187e83e90809d3097e3d922489b8ccd6a94c92bce69e43c058ea94231d8984d09e61d4e51f052906b6900eea341db9c14877698e01a932b556e67bc771501562a63569bf6131899fa90394a8aab540524737d798c4018ab80a9051a01e14aa0269749c4d1e2740fc5c4d74c68447b1a05f593912791999018144ea40a197159b7dc0c69f7b644499f93828e854e71d763e94afebbcd0bfc2bb0d7517759a21fcdae6063368b99821191a098f51448a68003ab4edae2cab967b115c32193c883111cffb894f2f082340ca488433c8d1daf90e4bff44a5bf1da3f1971862feca4eb623030b14fbfe5859969e42181e3fa5f613298f1d6d8ed17ed3d8f5c23d89287b09656d2d59d803411911beabf5a0b9a6a2ecdefe43f429ed214551f4db908ded23fc475f8a16972e2332e3cdde70117b8025cbf4a082c52d11068eca5b51513207824b37540e7a41daeb32b5d3c85bf5a3e4756cc185e7a529b0ce3bfac7a01a0d96e56ae197ffcea342ca38089b33a344812d1deb7ac9faa914690e64328a2ad543452014106b23be36d566cd5ff702fa1c4558f298760ff6b1de1391ea417103c58572d794740fb21a979749b29eae74611b417a1858ed078667f3b097817dbb3d56ad368f9ba1e19efe08c450e5d4188d30eb22db6fa214a84bc734e05241027a9ea6ad8a8ffe09371f8295d1ea4c9fb2f851726543b02f2db7f03e8cb5d172849bdb7e5e222f4682b925451a39035249778c89b82ca02a653debb6c6f07fe2907118d289a67ad20ca5d6ee31c20204591bca807801366fe77229d880993c6a0067a23f8a760e03cf8e899b02544428577766abd960d8066a52d0967ebdd15c66fb83b4adf5d15742dc0632652caefea09053d3cd9ffaae750e2bc082d34564fdd5eb2ee37acb51c8478aa3c2391aafef14cc1896d2080cf3d91f2ab2a68986553ca7d86cf913e66f69787934813339fdd38892684f22b7a4ffbd4f3df69e112b95cbb3f2178e2d05be4ffdbee037264204a603b92a3009adc94dd3e0ae7043437a9847187c5ca953daed70733e9257627dcc4fcb63c5ca4f06171d63255b43614e9397ccc298eb6575ab3616c3ca8ec5c01a0f8a666ec77610391c59b7ad600d4796360f32ca380dc01fb4aecabdf8d9daa1e1b679087d7672bebffd8f224f3b5d22969a3453cb2c90a0e093427ab21d25289dd3211847e73cad83b073038bf31a819e566cd60a40bc3861ca8807047ea6c1c225f7418a0350d89f079d321fef4b3a838e27ee850ec852edba6c38e9378329d17811cbe5e39c6ab1f8c5bfe6dba1958dac2aef11eec341abe1b78b67046f17c036e30f1c924f50a7bfd15643f287420c380c8dfcd7296b7134f20cf0c22759a23d17ef94aa2834eb81df564e901b7884b9b717779b4daffde45d573f5cfb20cfdc1334d23fe92f5961f25a50b840b4eeba2781e67fa77219d454cf78f0ab592313b065b4992d19c94c53d8fb620c3cd7ff6974eee0126846ade5d3e4be8564e01db76dd9ef76126774ee10fece94a4959919353494effa00188e00648566083dc51ac83d08ca9d27eaa656704a17fe62181189c4ab317392645a3ac14a592082ebdd499e6be29285781177d54214f65979336aa68d02c2e9da240d2d5a3d6688d7204566ee9aa1dd08cd3051244fcaaef9442eb23793940807d28f99eb1106cd8740379dd5bbfa366a1eec7abdf9a7cd9153fdfc3f3f107b0c26efbdb485ba1f852f7ea8ff2619de307ad770183f6a7dd8d4b1478cf830ff25db875d4755958a1f116ee7f28f84c02212b645a4bf26dc7bce8ea080743de39cbeff54d05e541e8e092452aeaafec49b8f38b8ad8021ab024f51729335b07009521dc4beb3eaafd94dfae6d8a7ebc89698e9c3ec5c0a308e92db32de55aee7351978e0efac951fbb611a8c3531ce5e9f62986e47c8d35f86627ce0cf211dcdc0b889a8b2e41d1f10ab213bf828edecaa973482b47af029e73213519f317ded8ace96bd1df38ee26ff305abbc8604389ee72354285a0fbe6d65c08c9a03dd274f1bbac9b2629c1a31b6a4f43d6b90a0ca94e3bfc2535a3e33ac897747938180ad7edf6910cabf325a90e94001bf72e4d4e44a19a8fc874ad6275da1a7469e10aac16e61fedf046b267d2fb4ed09982457f05af4998ef5a8dc6559a741d1fec9b45a2f25114f68f28f685b8a9ffab4e5befe362b107adb2b3e3df5ef5f7e249e81c61e904bd73884ac8d2ff8f4c01e337cc8014ca5173c2b72e18fa7df7bd79539b9b6a7ab7770da84ed63b5bb945e67a12a499e32065398a0380115094a2f96f736c7e1433e332fa03442c28b4fe776c6b31d863653b3168d85d4248739513b1482702bc44500d1f01e7476f5edfe16b9469d0ce2b1afa1117005d91c5d11d0f504459a5afcc7827505a7266cc9b5ae65ae23556b33c1439e3529658c798ae966d86c3b94f47b21380474ef11b37c61db0f232556e35933747f38711120054d1d103c835147332362b7abfcf70f43c380ba782478445c247ce1c8b0e1af47f09716734d06b740553d65bddd9c5266e962ff209818e608e2db478705eb023a0b6f34dbe6215e718ff75962343dd19164d0ff6127631d685d3e5b6316e48b048f7cb8cce0ab699e28a2655a60ca033b7d7a9a164c94eb40967ebbd5db9320880782b196a8e16dde19a2501ccd280888004f58c5fab84f8a734d1c2d01890c3956a5f982206745f79356bc6b68c331729a8bbc2617c65645897d9312df649d08d73621bf5b8143e2733d60982ec97fddce3827d9bdca9136d47fc724dce39be243c97c1e4e408eac2c468648a842ef33b00fb516541497d81d694b0a2e393ce42902ea49bec9a477f67a8b8f9636b035351b5fd8b3aab2c588d1c383a31d28fb5e0984355cc6f1bba231e646d84d430650f66e651e16b3c0b85627cff027c37c7e3c0651322d17eb65d1cf30183919ea7f88bdce98d37075e3d9deb2bf8e710fdbe15a87c52c5e8eba7012608ed0ad5581b367e33e74ca9d973b88ecc8bbfb8b5a40a37903dd1ad3973ba8fd4de9ce9613d4acf2238c1a589dfca2a6a5390bfaab82781a56b078f4cec90c57b257e52105bee3dbec2210e176984317434c57fac19b21e3b23b13ca925908d68dfb6a601ddbade72cf7f1eb9f785a91ea196add5baf2ac72035362b4dab1c4619e77228b4c31d564dec0233b1c5a195d8d38cce899a5e771f8728e4879aa6790bfc75aaa49269c9de7b1e120fb4ca931588304a2cc985a6b30ec71a59f08d1e9db93de0fdb054b821a625e60c028900eed91b029b7260eabc4c42c99f6c7c2c90799ea50bf630bb54d0b2e245fb12659b85d0e041a717cba83ebe59db54feb82d3db4774b39b2708b84bfde8e41032b1f9afc0ff8e4d338b747c7f79ee043354391bf935c270292ec0517efc1e657977256aef370067dea62653bd82ec76c112039fa97c332afe0ea44e60920959c66a14ee3029db7ed1ccc8643162f7fc3da8dad2a0a586959dd7c53708e816c2706a94a06b625cabde8a64265a2a4d64524335c0e186b7bd18b1afe58fc863a66db53048e4aa2a08063137fcaec2ddbbf3b3638d5f09dc9ef22ab48287213d32bb0a14ae4580f3d7b6ad426c77b2c056e49570e148fe4606bff55bfbbf52a6eb3b7066664c34657e088d19becf1a0ee72934f75dcc84352d7081bddc18a05485a8d57f51a5000d75c1fafeff7ff04c301edada029c81df83f169f8dae9d19839c22d4cdacda2c3397ad5c9fe516a629ec2824d0dbf3b539d08cb79e18fe68955a5d817de8a51764ab3b9fcbcb7888a5e99f4c311f5906ea6a3f59f87beca07101cdcbf620634017be63c9f8841a0cba3b50efa306c59742d0c87756aca6ae48be64e17e60fdf0d347897d7d9285ddeb717da994c02c55c1486de7e219efd3587bcaf986c6fa7cd8326a58c511c2c9728d0704fbea26887053c7168518962776e7da5f9848ae0c6e0f5f3ea6474d9c28b6ae8d309d96e7b60958f42346c3a3c9398f4fd74a2e9332e38de6da322e01b774200e5cbabde0b7125c3a89aadb1ba41910f5e41993e06a8d63d4a6fcd7afeedc843bc0fa9785c02fdfb1b0092d19d0e50680e2ca6be96db75995c81553e20849558cfa617a0b9a88af9d171a455ca9901a1ca309243643062ca6a9da3dd736f32b94e06469b49f736094d1789d855448f0aad704ecd0b2c63025ab34b627c3065b2c1d1b0d6cc9fe4a056d5acc4e111d2dde05009e90a4ef7f58d445a30a0a465598d48f441f8c80646e3586e09142c74468c56c04e94d4c5285470a9f88bd1720abddb11851dc53d42d7ba987ccd06e1c75d181c0817f9331a35b529dc711be2818a9e0a633f4663dbc41b3f94b5872ca215f58701a9fd61643ef61c0bba9cfa0d3ee84fdeb1e34e66bf1f80b28c56621a06cf0ff90b40fb4dfb10a123971da72bf711a665cce405e4ae0a2298ff2c3858dd6a3023c719299bff67d769bc5860f1bd076f71656b7ba44ed27106f0d8e9b05267025e0cf3857685197cc65cdef8fb8c69e1a1df51a4616d5bbabf2b300348c3ec30600ea19078470f0f84dbdbd64d66760ad46d48ca1e6264883494979854ec872eb011cb87739ed252f681b2f3f72223a966829d11b0eb294d71247cf7492af8e4d3319cd70c4d0db579ba2a9755ca9c19d34c7b1b3eb91ce4ff539e3d1a8e66401f42a53cbce261c82d9c4d9754da81ec2ee72ec877a864fb0491780325352891e06956429531fb89c5572e39d6ffe9ec0ab027065758631bb1961c636816e370eab34e3f365c3ec7da5d49c6ac5bd65e2ae58a4d5e463ba6ec8b7bbaa31b748d3e4d99075d25e538dfdf7a79623ed1a75aa9d70f5e26c7dd9099188efb7e2f2d9b895907371ff8dec4b3452290e3c5056e51348948bdeff55cb9f7e6bd7bbd93508dd38e6e5a07662967ad1ca632cffca3ce71f3b0d446eb5d33d1ff2ff329f30664f7fa415b4ce6efcf94b4abccc2ab17fde87722c7c7a120ac7c8fb16d467b69b398317e53091a7bbe43316b40e66a0f33469ce2163d11d079791270bbd01bee841e7cf31fd60e27c0c649895b0f532900ae83e2bada50a42a3434c9238d0535f35d4cbf95c4b716165ad6a16cc687e1caba1f1e78d39f4e50dfc5574742f28b55e77bbb9f56d07bc5a500d8051a3422072a663d4f62aabec365f00ee18e462e81948fe5301b2a65199d0c1e6add2e4316fbf4408bd35760dee0448ccf52d1a84e3becf2808622e972e787668525926e81926b72f6d9264c19c19905c5c6e00dc3134a8faef5251ea8a49c5effeb70a481ca426e7c99b3a004f773a412a51173139f388b2d6f83baa3c7aed025b68df3a3b66cbc6e2f7e8828de1120fac023d9ad57121f2a9bbdb87f1d72e778141bb3a3e4d4a33b5c30147edbf06651b6e5ac64defa9bc59e7430d491265de51058ee2397507c30ffe5b67ade8f4b2694a491c2363aa5978954fe4d75c48bee86c86ddb5ecb936e13240370a6e47773a5503d4779db266075a40ce9853faecb81fad2fd129058feb9b16338f0152e6a414e4e80c7470ad37ec6ce0d56306923feb5a5d849bd80c40ea93452702aa4b40a0335e362e66fca4f4959201aa85ee4b256be0a90d0c4de41e33902288624d7523129dc278eedfb2a9eb468893633f2a57380d06de399db57f2ff5d510a0a91bfffcdea3732ce445247f641727631d12ef055dbbebaed92714fc42728e6c0205d98704dbdc6cdc14508ec4aa06e20da8265c8f58578a56370e60e4c147e029f2662666e704920b0d535e216835bdc4400ad74e7694245e50fc8c249d8a7f6aa4ddd2878d336bbf94fc5430cd2cbcb34111bac78af385acdb93a3894578412f28f0c789b093ad778e17654faaa3e4a3421036693319d02999beace339a6e41c895fa5e72ca7f2907412db0c1c9f858a8c53b0581b104f9f3614b6f99ee67867dd914ddbb2d84ce482daeac2cad019e6a8bb5f774ac39873180578f492c7bd5d554bb0bbc528bb6f31298543fa1ecc647b53f8d27280048a8a4ce908f90529d14aafdeae06f482ad804ed369782516ea8b7d72214c25f2fdad841e02dd2ac4dd4b6d0896f97cdd1100076f91973f2731630d9f805013b79d5b516aa0c428df92eef6f33fe5e209ff3f1b8a8002fcb3702abd227a0f73789d32d0888d235c03df4566cfe951980ef268c9d44d614a901d24d2e6487ef11a69d743443a08def1b7b72fbd81800d11ddfae45e031e4adba239744208555aa3ffdc15f785dfa72f667152dd7f4cd21cc88dd7f66d771910171ea625d691176cf7ecddfe01d5aea19aed57d47bc6c17d15d392cea10459ca5faeadf8f79ec1ea0b10b02f6848e6ed0a57f3c23312fcb76cf9f165466dd6dba8c020dabd1cfc1c2d68d4719b031cac3f45d30649e6ea64c1cd3f87df5711633df649f71d8bf47904a2a887684b099a7128fb25e222400fe0ced53e4df22d6853535f4ab90e412f3dbb46983ea194c6bdb142a5cf45521215e9cbc5332cd089d6f64ce9f954cf55d9a1dda8325d9afb317fab18541219e4bc1c585354bede3b088d82df1151e8b3d49f6da07710f0008ea02005bc7b0fdb34bff1ca259c7616f2ebe6f582c31cf351c43266ee90ad0bf2be8cd9d36e46cc90754789b96ea1c7b8fc7c0cdfca301c6b064e4095ad98e855d98fcccfd279ed06f89ed1781b1820a52bd49051cd37973541aca67263d526ed86baeda5dbbf628eabe22f70702b0c427665086bb10137facec54e55b5fd6ea8bf38e4a4523079879ac50522a6fea07e27166297e0587da748a24f693704477bce21ef9b8b3163c73646fcad8cb22dd13b096502267f112a5548c2e177de732938f37c7e43fde969934e3b3089e3ab2ee03a882129aa25364121f6431d6eb2cbedaaec5603a52373473a22c0c4782cc6131898470d4a36996714408e42ec8726c2fc56a83456258b656997f415f107fd49a53fd8188d1f95a19f3be423828940eb147de677f108dad350e72bb8849443a936b20f82a061c8068613d12f1ebeb682a51ced1ddce8f47a59e6d92411297de38c92aa6c403660b2e31329c9d1e39e6f497f8c94a6b4e025d40ab198f865b8e4f0ac2c225b688844b7e8410c756ffd362961cd80a23ed9504066ed5a7efc41c5c5022b620984b5bf8c8c815587fffa14f3a9944d28669359304d0abc2e45c1034ae3a883d818ef89a93b6eb62909ec10e23b70aa32a316a0500b031882155db62c6194d1e106c1c0163e86a6a11794d1316d27913168659e018a335c6ec9e3577592afc16bf5de1b930e3e8fe3856fafab9bb9b899a2c3f0f5716578da331d5724b1286a29086db72dc5198f138156df8c60bf9a3392e454cfcea02dd4bae5688e3f9d7b4639a811c691b4b41d3401bc05da0ca825ace1facc2ea6a512a4ffbeda666cf116e1edade39fe56c89e26adfe7ce8f4a1cf70e2fee6e7b3cb6ae1c17e45388a0d2128214dc8b5b080d012efb2d0cd64508fef2734bfcc6c40718aa2a5ea9776780a479348411abf4983500f2024989a03719039f037a54b0de5bd46e56dc1276fdb0e69c6067115d0b380c92bba103d84a2f1e548fe283a0926fe059feb796ab22c309a905aabff1b1f3bf9938145925e09379ca34829396b0d53852a1b66e5322fae2c8270628081c2cb050723b603fd4a6c7b70318677803bc22ebeb95576add6529b4b40db3ccb405798d9e785f3fd7565f41312e07b3f99f03a1e868741862dd083095cbc908011e7f8a165597c9530e90d5f3f5e943e8a0667e54f22acea290125299f04b18c0dbe4b71a211d524e596f2b2341bee1a4cd96f562fda626d4a64d5f7d6ee40da38555fa380275f14838e6fac1ab2508c4d89244bf9fcbe882a5d0939463fd541fa9ba3882a4f8186f631770752f1367015a07ff6f1d9b50a35241eba081057dffb1f8ac91b6a57cc9d9d0c10d3ef4a536248c14eb7da9fca7e49f8b1d3da972cddfad85b43ba2e67e94837f8734fde93c6d129fb9aa266efa309ed33dc3427a3f5081ef847407cd6bfbc28bf32ad33e6fc4840ffca07b2399e42277d8f0b5cfeec5e0a00560b096fff1e9fbad9e002475dbbb1c7e05655e45c1459e9ac87869b6320f030a17e51077cd546d4c39cc452cbe0e2cb0ff98674e0f432d388ef7424e758154fb973836e3bea14f560c7ee4c0a87616b8222bbf155c8ee44c66542a3a20133d9e7f6ffc2de8eed16066d5229d41800abb8bc4fc40adc630c73fffdc370716360f729359bcf87e482739bd928a560428204e2ed16605527206b3ca33c39798ab17206e94349d3c5f64e2b1a8f95c099686b949948201d292e21eb70b53c0d7cd02724e01d1233cc008af02e3c1728705f4d7b252e6d71098a29b501a2bad5a98ab28ade87758f60fda0a4fefaad4999f8f4791cf18a6159e7351e7aa5868acc9119e069a3a58234489adee09e20d538ad6e32896c213acce3d83ba0f41756e7ef9859ad18d74f82ca4cfad0e87d192d411f3a43dfa4e8bb5dbdbc0c063dcc8901f8dafd892e57dbfd0fb10886dcd855ec665f8ede6507974f3c8eb9bc0607fe234a5fcd0c676744864f88c2658a8ebac5a50e7ca0d9d96ef5eb1caebadb320f2da946af1f47ce599f4471015948dbe14ec7fd3c14c98ddd63d95d9e1e88d54ad3b02e483f6be77e36dfdcd90dfb0c74d93a82e2219a2f4c17f792ae42a56955f97c481aca6ed2896d18945167f6b28ce4a27d3c89cd2317fcbabcb4228542c30492778b328606a3a2644516061a496f595b13ecc0ea73f09f5052d5723ddf4ebf43794c02429f6a5bba68c79a0b21be83e28bf16969003f5cbe6e3cc77f4cd03bc4bee61710e9f63c8211f9b5782c2a48b663f3ef523e97d885a69a697fb0780d26b1607e8ac7c8a4a0ae4272f36d882510dd6a359ece57c48783d29698cf06caf4f63ec829406fa063a0c0e92bacf295cd33e098b586cbc369c16c3d4eccb990698b730288b0d801b5a3c1c1f4ee89379c39bc7e0991cb5153ff4be4e216cc3476764ea2e6a7f5651a17b510993b900e02d70b3402704055979dddd1e5282261bf17d566c8e6f09404affcdd375c353f22cd4204551311a6b615e735242d3b71b1364c178cf4ecd7c55c2d949c72d892c8acec034bd253ef7263bc6e11dcd56c8b97a078fd43b16470bb9cabc458b0ad57d3726f7f4d983797781d09551d10549be73fbd1c77ab67152dd538620deed02577dbe5af9706b2ac4eb73438442263e3d5c1be8fb51b0cbf506ae4249b99e898c02442d8dd5eea5017c2b08f5b2aff2ccb8c04ae3d30a81cc87da3cc86b8032caa88efb52b390d8b4360238dd4f112e71eb71355fd30a96ca811e22ce9064ffd88fa4a1b63afe7fe68fee4b85865e6c28239ad070c8843a3c19c1100b7a39200ae269f6f74189f0989f02dce653a8021196452ffc2a3d6c4bfc1ed8303b5162cd8d9ddf0a750f1db589ceb9624577d71dd025a39ec71dfc94852c8a763e9b513f33c30c088f0a190e3c139d72a2eda0a40e95efc3b34390c47eeda2603ae0ca45fb0c0b5ba261274d6300c2eee36782a7db4f87d6858004f44de1929cdac2f1db7059938e55812f846e011e53ee350af2e964721798e7975eb663949d87c0a2bf1ee68d149f322aa73582047cb6a6c6a28650062859820a5a3e5c5f9394a85eb7a999420ca4961318ceee15d64cbece9d9c0114bb3473e7bc813abcdb905da1f4e09079e39b1224107a44eceaa1ae6f741fcb1829356ded30593585fc84894b3e74715b86b9c7e1bc6d3e0d9410af5a4b0725e73e9da13d43786247a33cdc84132a1a757c4435eedf44cba6ac89d3938fa39a1712d276848c87c1d75963726f0f35a7cc5d806f614377ffc249e11044d7a55be2177761ac12b1c7af5536c50b5d1843c6cb03b1ebe73e9cdb64f426b3d3570d621db0c3f0339881917eb54cdeec0dae96f20a05d48e52e6d4dc95ffc564cd155f61b364921d86267364c2738c52fbd58f41498d137faa3f24798f927779c474e4efb19afe905218a68c5c2a72f8a77c4635ff644881d8490f345f7d85c4dbace9860ba3dba9f772f4168269f2a7bcf81b89c5e28a45c64ca851cb0285c03f3ca88a163b40ccca772155d1b9358f54483c1fe9da3b8030ae5a0fedc441f21bc5966ca762f83b437ca7b49482ab9c33fb1c7ee20565733b847dd35c9179bb266c70fcfa7231c66526bbaf50c854d0dc515be9139d09fe4793991d299fbb3a19e682505b52b1a62777132863895c76903faac45ae53cbe73cfa076b4bd7b147f6a58c24c6a9264be052fb5ce2693104d13338bd24e669ba5ed9c9890aa583f9799cc8b99d45fbf2557010b0e4f3a82c3eb7ba80728908c38f4933925e61236020a9e993b0d3d76c229163a1f4a187faa094731b353d82039657786d4ce73c1d37aea2d959d395a6047616cf4bd0a7132fcb1784b105a8b615094b6d1d47cd070823029005e57ddfa94be51f4ea93071ba5ec324b285b5e0072e996fe4558af8671f608129f7de4f000abf9b7135c8e1fef678b5c2933f1c3c1b61489876ceca4261847eba037929358b8be795f926622101453f5e949fcbc79cb8412ba50eeec27a6adbd3323de14269b6e9b753a14dbf9339de67632a47d7424bba91ebd6fce4badff59fb3661ff68e80847112322cd5f9e581a4671f8cdc1456b3320178636882ce09d741f224ac1c8146ea96ca7f3599edda018ad39f60540411a241ea7e1b43253e8eb34d780b7cbe5c6035d6e9e2848f40df48bdbe94643cc8d8f543822cb7cdd7bd633e642b330e615d2c70fcf1fb5dc1c4ada21d41d0967430bd94f2e462415885acb639dc9c584a3ec28d82e56517cf30106ca06b3ae54736a9a509d174fa160f5093350e567171a0fea06b745361e20df61f8c320a607a0896637039cc998b1664cf897d08bf0567a2ca29506ae3a232dcc6545029852b5a19629fe5436577e769392c4b33332fee78c209ce66e38de0f4c5ba11555986d2cdb6e1715592ebb406d3d5a09526dfb1dcd5640057c52274e769d3fc09d2a8657b9a3ddd961e10e1ffc513f44decb7a6528705945e3be05ff4218bf6412d527345a76903fa8f987d6a921aeb1c0da2c82c40f23b38516334067f2d27de2303869c1fea685af33e11e39b8800e505e8a03e5dffe95b035bd4664d6b24b071de96cb4f288515896f772038718de5c2c326e403cc9f96799a8aadc003f608b4be40d249f3890729ef90246c82d60a27b52eed494f5cf7bdc275e906ea446f901ce38c7131ced100a8a21b82a4e741163c3489f14aee2b70887f96d43fc03f4775e6a38f594a08be9daca5b36028a4aeda8c659f2590b468e6c140b16fcf960177b23d4c4ddf4d80a9bdb35c51dfced0c57333f9351721fa64de0f84a9382cbf3e227e17dcdd6c855cc61c5fc58a8778486312faba2e453d0568260fc9dbf0780bf63727f106e8dcdab4f01db543ebf719ad8fed3218c1eca27691f66c78d7d7282a12010a69dd379be5f190f66a06a81f088b11313c8a8925e832ffed708a2004cf11587bd479ba5c32c75d6b8d71dd523b571654d8c45cc85bf52f65f2d3c9e932eea22e46952af862f5d4aedf29295ff7429bae1964651d224136ad38a3cd143aa40f75fa38708728aa31694b8e4e7304325a31abf7a44c3372ad3c0ca737ff203e103532e23539172f92ba3f580e7eb9cd591e474e63557e07f4010d63234263f5826946cff3ff17670be3eb3c29dc3ca80f14149afe96e338b77f2095c8a9ccab32bf7fd5451a41718e5cae9dbe78ba003594be6cd01f620157f1f8d407f503fae4bee8a54d4876a8bf43be235d90b078763aca8884eae4fcfdf2eae02aa0090d892b73257a12f69463249bdce28a324b7a4e15c7b1e5e9536135c3f4ea1580d5e8e7f7ce114a8b0c43bfeab3db06a793e224f66d96849001ce21388c5d4455f35bc48ba5f209ccf0f88c7b96ef6dcaf2e6ff06adf82d1be6b1d3e9209211117ac83a9cd80b56a1bac1ae815efc3c8ce4dc0001ca350057397546f8ff1f19702619d55991ce37edcb3d6268c4a463e733f03f3570d6aa1d4138817021c3b6cfcb9df2ad1486b07a6ead5e33ef256d0b9c99cb943e4dea418cf069b65fa1341a946c49ee01f58419ab122e166208b0c4d272cc92f81407e83f08042f079395b65ad35a23bb7b1901eff6cfeba150e73650e30c522d5a093cb5ff08b4390e254cd0f875b237e18016864b4519b7f5ddabc6e55be59c7955470ccf717bb17fea7c377baf34ffb1637f44b5ab98426bde375d494a4e529fc5a9f2b26911365fed0c25c90149d96c01759063e82b415c17f0053caad83692d32528e2d1182d472c8b40b75af077cc31eb377b16a9df9b991bf703a73ae61db3b34205c46b1c72c88d23846797d76d2d192e6776c36eca50aa88e66d963ba027b8d828e596d3a831983d4352b5ee3897738adb2d5eebc1704b5bdad828468d707343d7a8a4cae708b65106fd8454e0c897f873d21ac8fc4a87f52f6de8435f6fcb47665013518036e7850bf23f702dc510f66cb54d9de8c549291e4c9bf838bb51dcba66313c7cdd18235be245f0b47e4f5af6ea1901bcb23dd9ee14ff225936902b06939a69f194a66b307d603e809508bfb46d3417b951720f42a800fa9e1c1a0f9614e346850401e4e53a83b8e70f121223f0ab613ee6a4711aa2bfb6a3ef1da838338ab1d641c0d68fc5fd3e0b54f149e3f3106187f2869d0442bd77a2c5bb942addcd760ed2a52ba31525cb77534be0b21b700c13f76b0177da41c5c0aa3ea654880a6d51f5224e3f3583c2e7286255028029c9b1b4687e701ee99e5e4d48a7a081e4ac7f3d00291d94acdf8efb7cf18f72a286043b2cf5876f29ef1c158681682fdcc271647e871e0321abe7a5fa875e666151cd3c918407692b183348c9f894381bee8b5532c0ec1297392b0910556d457425662560832d8f80b103ff7534aa4323cd23f632be46df643d276624d5832e87376ea0b5aeb0eefa95dfa7de79010206bcfccc8eb928076658a21765a42d39057325c74d735b31701243c90bded8f507dcdbd9b03f0e4d0f24d48f798e211bf105c42e0bedc1005cd599904271ed92f9e6282044266188b7d5f7e2c29503d9960f50f3604ca69d88628b7dbe4891016205e1a4584df59264cb70c95c53523ce087cc493a808f15a1232ba4c8e6d7d2df844a1c2e7dc011ce88382fe7ed82badcfc85f6d2443decd0fdbfbaaf543f2b74913d3a3d3f6f6b3d531b44cf6810272d6492449b9820ef17406f8eb2883b6d8ec90d534bbc2812355a9bfda6f0384050ead49c0dd88dc2522e7326ec6d204a2af57e87794eb21a43e29ec81ae1914781c11ce96f1e7d3e50c570c6ce1f04c27ff42c3f3c3522e4fbf2abbe5946d12406f6dc7a16ffcffd950744156b8a009d39c6b496b5d015c67d3df525a65892a357a62de8e2d8e77fdbc6266a4307c04204bd63a6efee72d3beb3082ddfac34787895b7aac867d948210c2867a253ed12867b2ce706fa9ca42167e1f1633386f3b26bfe7528b32bc46b6f36e1f30751af3d93231d15359486c89e3a2d203413032d8100a81567d2a6adae7217f550bec3a33b3e72d41c9c2b6c706339f2cf7b1bd0b516d271f8a459779bb4eb23933647b04727cf2f1aa0b078f93e31b16c121934c62db96ba80d367889e9ed8d24d0952ce0ec30ce713e8008f3bc84fa102d3e15cceb479f39d8ec6789ad21a211bb1df4fb1d723c193fdb21ec1fb4570a79d91f5bf99f75f2fb27d4edabb7c68627f9004e9c40f5298095e206f6c3ab5bbc95d2246d2230a9f7e910fe39f115da94ff1aee7a45fac486bf111f986c951a3e31b8dad26aa5767e400f00cd13767633b13bdff7b7af12e62e0d6346c6496804b189a1cdddf49b1cc05df02b4c07a6e67e88d090b75d486a383cca8d14c353386e19"}
                  key: >
                    -----BEGIN ENCRYPTED PRIVATE KEY-----

                    MIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIPAN75riWFpoCAggA

                    MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBBdSHvgJxfhTc1YPTPA/40tBIIJ

                    UL6wSlfGahITNLbxQCa6ocwQkXsbyJKdMspAmXPdrf71yA7QDLFxoiOHXPUyhgGS

                    akJoboSNPccKCmaEtYjlnKZA0NlajyDlzDexc8YxAWus+34ruZm2Dx7mMT4W2WFx

                    bAM9hpuVRkD9tA2oZ0kT4OCk+nx9VHCkJMEfGs9plC9sZbt2zNL4uqFwA2dvvx5r

                    gFt2cMUQTwtf7re8T/Szet17dPbam+S4kUy0NTwkIFgsB26Wn9OhCPMZgvScy+bf

                    VTDKWZoQ0sx4c+T6wMcZGOS758df8G6VEv7RSsGpcu+QfWNpUbAoxkE+bf2ggVxV

                    j429hmNoGRYx2c4eOii5AEtADekWVFP9p81hg4lW2Xo1Xmv7ckHh4OIDWxbhOMS5

                    jB7GoM9TS3LQ4CuIRyPE8kL9ib2p8r/08PcwBoLpTNBXvSZ/NP4G52A4Yah16Zkd

                    C859N1Z/yT+zyteNMppyj1xjkAgrtUWB7e9za9mnROwfFCLWYxh2sRJijV0Ii241

                    DycI6z7EmHLRGOVD0XMIYC10JQ4vzII3YNT5nyfVQsg+UqMUi54MKZCwe7wtR70E

                    se9h1pkkSuEjqamCquhQNGFANhsi8jLzz3MvIHq5VXrDO5v3pxWA69niw6+PH1Ni

                    C/w+KeNQqSOTjIO8hBXWg4+tCDWhbhRcZmkaVdR59TXlhzi3rkxIjvuaCiiva3AZ

                    0zwBjCBGTZb7TWc5SK9h7UI3n5Z5lHCORUaSwE0NoUj/ywtiuRwAzRomOtupEfJw

                    CGXJHVjZBxPW1XlU93Uek5wGiFTrP26mdVY4Eowk4H+o5duCvVavq4FRUI0VRgjQ

                    DFABBnfQIm8obuvYEIMMqwWVEq1/zrTqSMp954I3o0x0rFUfwRLs0Mjlc4BuIM51

                    tdMKG03MoNnn7Iai5JooVUZ2INeseaPiTD5JU/EA2ucnjl1NUNs16MRPLbtp1AWE

                    NrEHu4Wj+/rYfqN3Q5O+xJg0hHUgzDjli6lT09b3ZgllqhQZxU3SkdfCJ3Qh1px7

                    7S+uJANRa4tQsv5wzv5Mo1kq738AJ224pgBxVcEyK+0WEn0TfLMoEwQH4cqLmC5v

                    3yWbWH67dQCk3jL2KMm/4psWn67JJEBRfKsmnY6n/nZfmaTEETFWIQbJNdbw2rST

                    SJGVpY2ksxdACtQpdO4zHw73P1/0FD09JzksTQSAIOD4jKsYDPLIgi+bhDCloc+6

                    2R0sIwAN1zRL4thxQI75ro224xWVbqnEvfkSZJpD9IkBoFAqbwW7aFWd0GYdiUdz

                    orOWfwNaezDiOPTLw/dqPbAQCyH3o4eqs6D+RMLA9pJuEgHpVSwCmLKzljMmUs4U

                    AhHzlKpjPLWzR3kirz7N/uGK4aqGAdCxYcl87taYSJ0eY9V+ggC1J2LbRla3Wdet

                    kOFNtlv9m6z3Jtp1uwwQONLOxTs4spc5HhnsHVlQAFToVdYMUHbw3NoZN3ti5VEm

                    UjuvgYRhfrNg5ACX4fqIYGBOAOqYnltGZfwipVxUhIYtS47PpHxVyosFVzgZA6ZA

                    Jf/ifINpLA3AWCp1vWGiqjbENtDfreSA/p6fU6rgPegV4opie1liRlYk5srRHKZM

                    c1rPP4aLzPc5G13MPKKdTLIC0OmJ5GfFW/kebnZyey2o8dfZ1A61Kqy+4b0zshJW

                    b3LT7j2jIcqMxEJ1gUO8XS8pPPSn7sqnww7LIyTcE4j/xr0+L0a71PjILyv5bNCP

                    L4zFf/YkIxFizgrJcObZBzxvwLlo0lX84J1v1Zo5hXEC/1cNLzz3J26voVwgzjB7

                    +XJu/K2imtzFHtMQjuvISTmHfzFfeUKS1RHShsqcViSUU0Xk45XUB5bllMJ1laBK

                    ipIQz+7SzGqP5dBsVWjjPBg+fFuiSgFgefuNqkt9PcyF1EjJE9TThwXs+Aq/QRKH

                    0O1xSpZ8trXFfUi0oQEWl7iFMe2X0NJKHcNCSFIYr7CGNGlXZ22xrRF7bGWakXYz

                    //xHzBae6MWaA1F3YmjDPp5k1fzVz698acKbN3gIi+S57VuUSwuCnnr8vccwx0Dq

                    DNGw0PIQj1SGZHXai09bGpB7HtmZSTbaUOJ/mhjj0SyJd8zCeD326xIpJx8Hgxy7

                    8hl9Q4NOINWLLF5G645zBdLD3yrt/k8miXLJCj8ScCfV8vDRiv0uc/Ds9BaDsEvq

                    fMN/wAJLw7Z+STcNpdmN1Ktgt9XfkqYzB7FU81GxKljOfSyqCZ/IJHEtN3gNGSmA

                    zVNVqLfvypfJJ2tkU77l2AVMTuWwOZQcPOPhFGv/okwLXZp/7Uf9TvhrCaa5LtS2

                    3oaGA9RmtQQHdRtDN/jrMpIPtQ90ICcj/bIavIfvTAR+g2uNxVz7fjGarBQGoGX6

                    6Fc+n6pWbdWiMXXeI1Uk09Nk5xBy1s5AOJsJWgvBV9s4N3miHTWmajb67+p9qhBj

                    UrkVAyTsLnMapMBpW9P7WsQSAdxULCzEowXTnmyvkxbyfDVGur9wQlCl9X4GkZf3

                    WiOLKpGDl5vnYGqRQUT9b0MNaK7uGKa21OPgLhWbeVufggVb0MeQVtnwvIRaUN3W

                    5cfkinnbT8EpEFb4qNJ53d9XZa1/RtWo7Uuq7MupNoaf0xpP5z6DwGRawyeuoXNj

                    iEfisHIHeJmnrQE09z7LS5LYHp0d1L4D+fIxdNFc2iqjl3J+arMz/MlU2+kEwQHO

                    NWbBHwpQklPJ1xbO7mF13ThjRv46f3r//YlkR8ywIahc/pmzNj4PQjBHVdQEN7DQ

                    ZyWoIOc/dz75htSAbcS30VsdwhVOZawlxscBIeis8XlB2vPY/aoIhhZ2T6qECYPK

                    wYVpqxmpNUkKCtvbEQfsrMkZPChNqndu0taqXBq3wCz6aQYFg3I93syyzaK4HdhS

                    /WJ9T3BHoEiXrK/FkpAZ0JIp6z+D8rHRgrj4SA1e6zMHiFq4GkJzvEhSF3jwDNkL

                    ByzNKHfA4Ks2+RSIgLuc+UqnpN03uk3c6XhY7Kg9GG37g5TVdtodl0SpDhBaKq/4

                    AtcOQZjhh/XI2c6Ca1ZNjI61g35nCTFcw8fogM91dc65Q8L1mRpiqTuLPUypG6xM

                    u7zVoJxV1jTCZIYxnfwaWALy+5HniAEJKqhdRx83bw59ezaUbLr60GNB6XacBGI2

                    so/l+UzAkIDPTzRHzuSJUpu92cMtTLxLqPgpPOStWTJI

                    -----END ENCRYPTED PRIVATE KEY-----
                  seal:
                    hash: >-
                      655806c8f1a6dd94f3f7d42cf82520df9e39a5f7a140bc45e3c453552479264fc98b2d3aaa6b22246d7fcf23fea98a71eaadcaa82630bc30647d127c009817c5
                    salt: >-
                      6db1932f0babfdb5e91a3737ca83647b556575dbb9506e18325a7c5dd989037b
              schema:
                type: object
                properties:
                  keys:
                    type: object
                    properties:
                      data:
                        type: string
                      key:
                        type: string
                        pattern: .*ENCRYPTED PRIVATE KEY.*
                      seal:
                        type: object
                        properties:
                          hash:
                            type: string
                          salt:
                            type: string
                        required:
                          - hash
                          - salt
                        additionalProperties: false
                    required:
                      - data
                      - key
                    additionalProperties: false
                additionalProperties: false
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /setup:
    post:
      operationId: setup
      tags:
        - settings
        - anonymous
      summary: Set up Morio
      description: >-
        This will handle the initial setup of Morio. Or rather, it will ask
        Morio Core to do so after validation.


        This endpoint does not require authentication. However, it is only
        available in ephemeral Mode.

        In other words, once Morio is set up, this endpoint becomes unavailable.
      requestBody:
        description: The Morio settings to use for the initial setup
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                cluster:
                  type: object
                  properties:
                    name:
                      type: string
                      pattern: ^[A-Za-z0-9\s-_,.;:()]+$
                      minLength: 2
                      maxLength: 255
                    broker_nodes:
                      type: array
                      items:
                        type: string
                      minItems: 1
                      maxItems: 9
                    flanking_nodes:
                      type: array
                      items:
                        type: string
                      minItems: 0
                      maxItems: 36
                    fqdn:
                      type: string
                      oneOf:
                        - {}
                        - x-required: true
                  required:
                    - name
                    - broker_nodes
                  additionalProperties: false
                metadata:
                  type: object
                  properties:
                    comment:
                      anyOf:
                        - type: string
                        - type: array
                          items:
                            type: string
                    version:
                      anyOf:
                        - type: string
                        - type: number
                          format: float
                  additionalProperties: false
                connector:
                  type: object
                  properties: {}
                  additionalProperties: false
                tokens:
                  type: object
                  properties:
                    flags:
                      type: object
                      properties:
                        DISABLE_ROOT_TOKEN:
                          type: boolean
                        DISABLE_IDP_APIKEY:
                          type: boolean
                        DISABLE_IDP_LDAP:
                          type: boolean
                        DISABLE_IDP_LOCAL:
                          type: boolean
                        DISABLE_IDP_MRT:
                          type: boolean
                        DISABLE_IDP_OIDC:
                          type: boolean
                        DISABLE_SERVICE_UI:
                          type: boolean
                        ENFORCE_HTTP_MTLS:
                          type: boolean
                        RESEED_ON_RELOAD:
                          type: boolean
                      additionalProperties: false
                    secrets:
                      type: object
                      properties: {}
                      additionalProperties: false
                    vars:
                      type: object
                      properties: {}
                      additionalProperties: false
                  additionalProperties: false
                iam:
                  type: object
                  properties:
                    providers:
                      type: object
                      properties: {}
                      additionalProperties: false
                    ui:
                      type: object
                      properties:
                        visibility:
                          type: object
                          properties: {}
                          additionalProperties: false
                        order:
                          type: array
                          items: {}
                      additionalProperties: false
                  additionalProperties: false
                vault:
                  type: object
                  properties:
                    url:
                      type: string
                    verify_certificate:
                      type: boolean
                    role:
                      type: string
                    jwt_auth_path:
                      type: string
                    kv_path:
                      type: string
                  required:
                    - url
                  additionalProperties: false
                preseed:
                  anyOf:
                    - type: object
                      properties:
                        url:
                          type: string
                        git:
                          type: object
                          properties: {}
                          additionalProperties:
                            type: object
                            properties:
                              id:
                                type: string
                              url:
                                type: string
                              ref:
                                type: string
                              user:
                                anyOf:
                                  - type: string
                                  - type: object
                                    properties:
                                      vault:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              path:
                                                type: string
                                              key:
                                                type: string
                                              instance:
                                                type: string
                                            required:
                                              - path
                                              - key
                                            additionalProperties: false
                                    additionalProperties: false
                              token:
                                anyOf:
                                  - type: string
                                  - type: object
                                    properties:
                                      vault:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              path:
                                                type: string
                                              key:
                                                type: string
                                              instance:
                                                type: string
                                            required:
                                              - path
                                              - key
                                            additionalProperties: false
                                    additionalProperties: false
                            additionalProperties: false
                        base:
                          anyOf:
                            - type: object
                              properties:
                                url:
                                  type: string
                                headers:
                                  type: object
                                  properties: {}
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              required:
                                - url
                              additionalProperties: false
                            - type: object
                              properties:
                                gitlab:
                                  type: object
                                  properties:
                                    url:
                                      type: string
                                    project_id:
                                      type: number
                                      format: float
                                    file_path:
                                      type: string
                                    ref:
                                      type: string
                                    token:
                                      anyOf:
                                        - type: string
                                        - type: object
                                          properties:
                                            vault:
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  properties:
                                                    path:
                                                      type: string
                                                    key:
                                                      type: string
                                                    instance:
                                                      type: string
                                                  required:
                                                    - path
                                                    - key
                                                  additionalProperties: false
                                          additionalProperties: false
                                  required:
                                    - url
                                    - project_id
                                    - file_path
                                    - token
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              additionalProperties: false
                            - type: object
                              properties:
                                github:
                                  type: object
                                  properties:
                                    url:
                                      type: string
                                    owner:
                                      type: string
                                    repo:
                                      type: string
                                    file_path:
                                      type: string
                                    ref:
                                      type: string
                                    token:
                                      anyOf:
                                        - type: string
                                        - type: object
                                          properties:
                                            vault:
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  properties:
                                                    path:
                                                      type: string
                                                    key:
                                                      type: string
                                                    instance:
                                                      type: string
                                                  required:
                                                    - path
                                                    - key
                                                  additionalProperties: false
                                          additionalProperties: false
                                  required:
                                    - owner
                                    - repo
                                    - file_path
                                    - token
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              additionalProperties: false
                            - type: string
                        overlays:
                          anyOf:
                            - type: array
                              items:
                                anyOf:
                                  - type: object
                                    properties:
                                      url:
                                        type: string
                                      headers:
                                        type: object
                                        properties: {}
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    required:
                                      - url
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      gitlab:
                                        type: object
                                        properties:
                                          url:
                                            type: string
                                          project_id:
                                            type: number
                                            format: float
                                          file_path:
                                            type: string
                                          ref:
                                            type: string
                                          token:
                                            anyOf:
                                              - type: string
                                              - type: object
                                                properties:
                                                  vault:
                                                    anyOf:
                                                      - type: string
                                                      - type: object
                                                        properties:
                                                          path:
                                                            type: string
                                                          key:
                                                            type: string
                                                          instance:
                                                            type: string
                                                        required:
                                                          - path
                                                          - key
                                                        additionalProperties: false
                                                additionalProperties: false
                                        required:
                                          - url
                                          - project_id
                                          - file_path
                                          - token
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      github:
                                        type: object
                                        properties:
                                          url:
                                            type: string
                                          owner:
                                            type: string
                                          repo:
                                            type: string
                                          file_path:
                                            type: string
                                          ref:
                                            type: string
                                          token:
                                            anyOf:
                                              - type: string
                                              - type: object
                                                properties:
                                                  vault:
                                                    anyOf:
                                                      - type: string
                                                      - type: object
                                                        properties:
                                                          path:
                                                            type: string
                                                          key:
                                                            type: string
                                                          instance:
                                                            type: string
                                                        required:
                                                          - path
                                                          - key
                                                        additionalProperties: false
                                                additionalProperties: false
                                        required:
                                          - owner
                                          - repo
                                          - file_path
                                          - token
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    additionalProperties: false
                                  - type: string
                            - type: string
                        keys:
                          type: object
                          properties:
                            data:
                              type: string
                            key:
                              type: string
                              pattern: .*ENCRYPTED PRIVATE KEY.*
                            seal:
                              type: object
                              properties:
                                hash:
                                  type: string
                                salt:
                                  type: string
                              required:
                                - hash
                                - salt
                              additionalProperties: false
                          required:
                            - data
                            - key
                          additionalProperties: false
                      additionalProperties: false
                    - type: string
                client:
                  type: object
                  properties:
                    modules:
                      type: object
                      properties: {}
                      additionalProperties:
                        type: string
                  additionalProperties: false
              additionalProperties: false
            examples:
              cluster1:
                value: *ref_8
                summary: cluster1 Example
              cluster3:
                value: &ref_43
                  name: Morio Cluster Test
                  broker_nodes:
                    - morio-node1.tokyo.morio.it
                    - morio-node2.tokyo.morio.it
                    - morio-node3.tokyo.morio.it
                  fqdn: morio-cluster.tokyo.morio.it
                  tokens: *ref_35
                  iam: *ref_36
                  ui: *ref_37
                summary: cluster3 Example
      responses:
        '200':
          description: Setup result
          content:
            application/json:
              example: &ref_40
                result: success
                uuids:
                  node: 40361cd8-a149-4675-bd46-11a2b48acd04
                  cluster: 26e66c95-c342-49fc-8e3a-f5ca69b392ba
                root_token:
                  about: >-
                    This is the Morio root token. You can use it to authenticate
                    before any authentication providers have been set up. Store
                    it in a safe space, as it will never be shown again.
                  value: >-
                    mrt.7297ef89ed8c855ffc6786e0377bb7bf5e0137dcbc367494aebd39782747ab43
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Only available in ephemeral mode
          content:
            application/problem+json:
              example: &ref_41
                status: 409
                title: Only available in ephemeral mode
                detail: >-
                  This endpoint is only available when Morio is running in
                  ephemeral mode. Since this system has been set up, this
                  endpoint is no longer available.
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /preseed:
    post:
      operationId: preseed
      tags:
        - settings
        - anonymous
      summary: Preseed Morio
      description: >-
        This will handle the initial setup of Morio via preseeded settings. Or
        rather, it will ask Morio Core to do so after validation.


        This endpoint does not require authentication. However, it is only
        available in ephemeral Mode.

        In other words, once Morio is set up, this endpoint becomes unavailable.
      requestBody:
        description: The Morio preseed settings to use for the initial setup
        required: true
        content:
          application/json:
            schema:
              anyOf:
                - type: object
                  properties:
                    url:
                      type: string
                    git:
                      type: object
                      properties: {}
                      additionalProperties:
                        type: object
                        properties:
                          id:
                            type: string
                          url:
                            type: string
                          ref:
                            type: string
                          user:
                            anyOf:
                              - type: string
                              - type: object
                                properties:
                                  vault:
                                    anyOf:
                                      - type: string
                                      - type: object
                                        properties:
                                          path:
                                            type: string
                                          key:
                                            type: string
                                          instance:
                                            type: string
                                        required:
                                          - path
                                          - key
                                        additionalProperties: false
                                additionalProperties: false
                          token:
                            anyOf:
                              - type: string
                              - type: object
                                properties:
                                  vault:
                                    anyOf:
                                      - type: string
                                      - type: object
                                        properties:
                                          path:
                                            type: string
                                          key:
                                            type: string
                                          instance:
                                            type: string
                                        required:
                                          - path
                                          - key
                                        additionalProperties: false
                                additionalProperties: false
                        additionalProperties: false
                    base:
                      anyOf:
                        - type: object
                          properties:
                            url:
                              type: string
                            headers:
                              type: object
                              properties: {}
                              additionalProperties: false
                            keys:
                              type: object
                              properties:
                                data:
                                  type: string
                                key:
                                  type: string
                                  pattern: .*ENCRYPTED PRIVATE KEY.*
                                seal:
                                  type: object
                                  properties:
                                    hash:
                                      type: string
                                    salt:
                                      type: string
                                  required:
                                    - hash
                                    - salt
                                  additionalProperties: false
                              required:
                                - data
                                - key
                              additionalProperties: false
                          required:
                            - url
                          additionalProperties: false
                        - type: object
                          properties:
                            gitlab:
                              type: object
                              properties:
                                url:
                                  type: string
                                project_id:
                                  type: number
                                  format: float
                                file_path:
                                  type: string
                                ref:
                                  type: string
                                token:
                                  anyOf:
                                    - type: string
                                    - type: object
                                      properties:
                                        vault:
                                          anyOf:
                                            - type: string
                                            - type: object
                                              properties:
                                                path:
                                                  type: string
                                                key:
                                                  type: string
                                                instance:
                                                  type: string
                                              required:
                                                - path
                                                - key
                                              additionalProperties: false
                                      additionalProperties: false
                              required:
                                - url
                                - project_id
                                - file_path
                                - token
                              additionalProperties: false
                            keys:
                              type: object
                              properties:
                                data:
                                  type: string
                                key:
                                  type: string
                                  pattern: .*ENCRYPTED PRIVATE KEY.*
                                seal:
                                  type: object
                                  properties:
                                    hash:
                                      type: string
                                    salt:
                                      type: string
                                  required:
                                    - hash
                                    - salt
                                  additionalProperties: false
                              required:
                                - data
                                - key
                              additionalProperties: false
                          additionalProperties: false
                        - type: object
                          properties:
                            github:
                              type: object
                              properties:
                                url:
                                  type: string
                                owner:
                                  type: string
                                repo:
                                  type: string
                                file_path:
                                  type: string
                                ref:
                                  type: string
                                token:
                                  anyOf:
                                    - type: string
                                    - type: object
                                      properties:
                                        vault:
                                          anyOf:
                                            - type: string
                                            - type: object
                                              properties:
                                                path:
                                                  type: string
                                                key:
                                                  type: string
                                                instance:
                                                  type: string
                                              required:
                                                - path
                                                - key
                                              additionalProperties: false
                                      additionalProperties: false
                              required:
                                - owner
                                - repo
                                - file_path
                                - token
                              additionalProperties: false
                            keys:
                              type: object
                              properties:
                                data:
                                  type: string
                                key:
                                  type: string
                                  pattern: .*ENCRYPTED PRIVATE KEY.*
                                seal:
                                  type: object
                                  properties:
                                    hash:
                                      type: string
                                    salt:
                                      type: string
                                  required:
                                    - hash
                                    - salt
                                  additionalProperties: false
                              required:
                                - data
                                - key
                              additionalProperties: false
                          additionalProperties: false
                        - type: string
                    overlays:
                      anyOf:
                        - type: array
                          items:
                            anyOf:
                              - type: object
                                properties:
                                  url:
                                    type: string
                                  headers:
                                    type: object
                                    properties: {}
                                    additionalProperties: false
                                  keys:
                                    type: object
                                    properties:
                                      data:
                                        type: string
                                      key:
                                        type: string
                                        pattern: .*ENCRYPTED PRIVATE KEY.*
                                      seal:
                                        type: object
                                        properties:
                                          hash:
                                            type: string
                                          salt:
                                            type: string
                                        required:
                                          - hash
                                          - salt
                                        additionalProperties: false
                                    required:
                                      - data
                                      - key
                                    additionalProperties: false
                                required:
                                  - url
                                additionalProperties: false
                              - type: object
                                properties:
                                  gitlab:
                                    type: object
                                    properties:
                                      url:
                                        type: string
                                      project_id:
                                        type: number
                                        format: float
                                      file_path:
                                        type: string
                                      ref:
                                        type: string
                                      token:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              vault:
                                                anyOf:
                                                  - type: string
                                                  - type: object
                                                    properties:
                                                      path:
                                                        type: string
                                                      key:
                                                        type: string
                                                      instance:
                                                        type: string
                                                    required:
                                                      - path
                                                      - key
                                                    additionalProperties: false
                                            additionalProperties: false
                                    required:
                                      - url
                                      - project_id
                                      - file_path
                                      - token
                                    additionalProperties: false
                                  keys:
                                    type: object
                                    properties:
                                      data:
                                        type: string
                                      key:
                                        type: string
                                        pattern: .*ENCRYPTED PRIVATE KEY.*
                                      seal:
                                        type: object
                                        properties:
                                          hash:
                                            type: string
                                          salt:
                                            type: string
                                        required:
                                          - hash
                                          - salt
                                        additionalProperties: false
                                    required:
                                      - data
                                      - key
                                    additionalProperties: false
                                additionalProperties: false
                              - type: object
                                properties:
                                  github:
                                    type: object
                                    properties:
                                      url:
                                        type: string
                                      owner:
                                        type: string
                                      repo:
                                        type: string
                                      file_path:
                                        type: string
                                      ref:
                                        type: string
                                      token:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              vault:
                                                anyOf:
                                                  - type: string
                                                  - type: object
                                                    properties:
                                                      path:
                                                        type: string
                                                      key:
                                                        type: string
                                                      instance:
                                                        type: string
                                                    required:
                                                      - path
                                                      - key
                                                    additionalProperties: false
                                            additionalProperties: false
                                    required:
                                      - owner
                                      - repo
                                      - file_path
                                      - token
                                    additionalProperties: false
                                  keys:
                                    type: object
                                    properties:
                                      data:
                                        type: string
                                      key:
                                        type: string
                                        pattern: .*ENCRYPTED PRIVATE KEY.*
                                      seal:
                                        type: object
                                        properties:
                                          hash:
                                            type: string
                                          salt:
                                            type: string
                                        required:
                                          - hash
                                          - salt
                                        additionalProperties: false
                                    required:
                                      - data
                                      - key
                                    additionalProperties: false
                                additionalProperties: false
                              - type: string
                        - type: string
                    keys:
                      type: object
                      properties:
                        data:
                          type: string
                        key:
                          type: string
                          pattern: .*ENCRYPTED PRIVATE KEY.*
                        seal:
                          type: object
                          properties:
                            hash:
                              type: string
                            salt:
                              type: string
                          required:
                            - hash
                            - salt
                          additionalProperties: false
                      required:
                        - data
                        - key
                      additionalProperties: false
                  additionalProperties: false
                - type: string
            examples:
              base:
                value: *ref_38
                summary: base Example
              overlays:
                value: *ref_39
                summary: overlays Example
      responses:
        '200':
          description: Setup result
          content:
            application/json:
              example: *ref_40
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After:
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '409':
          description: Only available in ephemeral mode
          content:
            application/problem+json:
              example: *ref_41
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /settings:
    get:
      operationId: getSettings
      tags: &ref_42
        - settings
      summary: Get settings
      description: >-
        Returns the current settings.


        Note that Morio will encrypt all secrets and remove them from the
        settings. So this endpoint returns data that is safe to backup.
      responses:
        '200':
          description: Morio settings
          content:
            application/json:
              example:
                cluster:
                  name: Morio Unit Tests
                  broker_nodes:
                    - unit.test.morio.it
                tokens:
                  flags:
                    HEADLESS_MORIO: false
                    DISABLE_ROOT_TOKEN: false
                  secrets:
                    TEST_SECRET_1: >-
                      {"iv":"4b16f0efa70cdcad568441143b0ebbea","ct":"28262a424d8b3378b2ac78c7074deeec"}
                    TEST_SECRET_2: >-
                      {"iv":"bc0fb68aa6f37cc4eda8fca6a50d7448","ct":"cc786dfb1c5fe6dd4ad389855a206d57"}
                    LDAP_BIND_SECRET: >-
                      {"iv":"8b185698a44410657ce84ba6a35b82ce","ct":"7ed3e4c461455f3a4a8b44f834935b6b"}
                iam:
                  providers:
                    apikey:
                      provider: apikey
                      id: apikey
                      label: API Key
                    mrt: {}
                    local:
                      provider: local
                      id: mrt
                      label: Morio Account
                    ldap:
                      provider: ldap
                      verify_certificate: false
                      id: ldap
                      label: LDAP
                      about: Test LDAP server
                      server:
                        url: ldap://ldap:10389
                        bindDN: uid=admin,ou=system
                        bindCredentials: '{{{ LDAP_BIND_SECRET }}}'
                        searchBase: ou=Users,dc=ldap,dc=unit,dc=test,dc=morio,dc=it
                        searchFilter: (&(objectclass=person)(uid={{username}}))
                      username_field: uid
                      rbac:
                        manager:
                          attribute: employeetype
                          regex: ^manager$
                        operator:
                          attribute: employeetype
                          regex: ^admin$
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: &ref_44
              description: Tells you when to retry due to rate limiting
              schema:
                type: string
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
    post:
      operationId: applySettings
      tags: *ref_42
      summary: Apply settings
      description: >-
        This will take a full set of new Morio settings and, after validation,
        pass them to core to be applied.


        Note that this endpoint requires you to post the full settings, so when
        making updates, make sure to leave nothing behind.
      requestBody:
        description: The new Morio settings
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                cluster:
                  type: object
                  properties:
                    name:
                      type: string
                      pattern: ^[A-Za-z0-9\s-_,.;:()]+$
                      minLength: 2
                      maxLength: 255
                    broker_nodes:
                      type: array
                      items:
                        type: string
                      minItems: 1
                      maxItems: 9
                    flanking_nodes:
                      type: array
                      items:
                        type: string
                      minItems: 0
                      maxItems: 36
                    fqdn:
                      type: string
                      oneOf:
                        - {}
                        - x-required: true
                  required:
                    - name
                    - broker_nodes
                  additionalProperties: false
                metadata:
                  type: object
                  properties:
                    comment:
                      anyOf:
                        - type: string
                        - type: array
                          items:
                            type: string
                    version:
                      anyOf:
                        - type: string
                        - type: number
                          format: float
                  additionalProperties: false
                connector:
                  type: object
                  properties: {}
                  additionalProperties: false
                tokens:
                  type: object
                  properties:
                    flags:
                      type: object
                      properties:
                        DISABLE_ROOT_TOKEN:
                          type: boolean
                        DISABLE_IDP_APIKEY:
                          type: boolean
                        DISABLE_IDP_LDAP:
                          type: boolean
                        DISABLE_IDP_LOCAL:
                          type: boolean
                        DISABLE_IDP_MRT:
                          type: boolean
                        DISABLE_IDP_OIDC:
                          type: boolean
                        DISABLE_SERVICE_UI:
                          type: boolean
                        ENFORCE_HTTP_MTLS:
                          type: boolean
                        RESEED_ON_RELOAD:
                          type: boolean
                      additionalProperties: false
                    secrets:
                      type: object
                      properties: {}
                      additionalProperties: false
                    vars:
                      type: object
                      properties: {}
                      additionalProperties: false
                  additionalProperties: false
                iam:
                  type: object
                  properties:
                    providers:
                      type: object
                      properties: {}
                      additionalProperties: false
                    ui:
                      type: object
                      properties:
                        visibility:
                          type: object
                          properties: {}
                          additionalProperties: false
                        order:
                          type: array
                          items: {}
                      additionalProperties: false
                  additionalProperties: false
                vault:
                  type: object
                  properties:
                    url:
                      type: string
                    verify_certificate:
                      type: boolean
                    role:
                      type: string
                    jwt_auth_path:
                      type: string
                    kv_path:
                      type: string
                  required:
                    - url
                  additionalProperties: false
                preseed:
                  anyOf:
                    - type: object
                      properties:
                        url:
                          type: string
                        git:
                          type: object
                          properties: {}
                          additionalProperties:
                            type: object
                            properties:
                              id:
                                type: string
                              url:
                                type: string
                              ref:
                                type: string
                              user:
                                anyOf:
                                  - type: string
                                  - type: object
                                    properties:
                                      vault:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              path:
                                                type: string
                                              key:
                                                type: string
                                              instance:
                                                type: string
                                            required:
                                              - path
                                              - key
                                            additionalProperties: false
                                    additionalProperties: false
                              token:
                                anyOf:
                                  - type: string
                                  - type: object
                                    properties:
                                      vault:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              path:
                                                type: string
                                              key:
                                                type: string
                                              instance:
                                                type: string
                                            required:
                                              - path
                                              - key
                                            additionalProperties: false
                                    additionalProperties: false
                            additionalProperties: false
                        base:
                          anyOf:
                            - type: object
                              properties:
                                url:
                                  type: string
                                headers:
                                  type: object
                                  properties: {}
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              required:
                                - url
                              additionalProperties: false
                            - type: object
                              properties:
                                gitlab:
                                  type: object
                                  properties:
                                    url:
                                      type: string
                                    project_id:
                                      type: number
                                      format: float
                                    file_path:
                                      type: string
                                    ref:
                                      type: string
                                    token:
                                      anyOf:
                                        - type: string
                                        - type: object
                                          properties:
                                            vault:
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  properties:
                                                    path:
                                                      type: string
                                                    key:
                                                      type: string
                                                    instance:
                                                      type: string
                                                  required:
                                                    - path
                                                    - key
                                                  additionalProperties: false
                                          additionalProperties: false
                                  required:
                                    - url
                                    - project_id
                                    - file_path
                                    - token
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              additionalProperties: false
                            - type: object
                              properties:
                                github:
                                  type: object
                                  properties:
                                    url:
                                      type: string
                                    owner:
                                      type: string
                                    repo:
                                      type: string
                                    file_path:
                                      type: string
                                    ref:
                                      type: string
                                    token:
                                      anyOf:
                                        - type: string
                                        - type: object
                                          properties:
                                            vault:
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  properties:
                                                    path:
                                                      type: string
                                                    key:
                                                      type: string
                                                    instance:
                                                      type: string
                                                  required:
                                                    - path
                                                    - key
                                                  additionalProperties: false
                                          additionalProperties: false
                                  required:
                                    - owner
                                    - repo
                                    - file_path
                                    - token
                                  additionalProperties: false
                                keys:
                                  type: object
                                  properties:
                                    data:
                                      type: string
                                    key:
                                      type: string
                                      pattern: .*ENCRYPTED PRIVATE KEY.*
                                    seal:
                                      type: object
                                      properties:
                                        hash:
                                          type: string
                                        salt:
                                          type: string
                                      required:
                                        - hash
                                        - salt
                                      additionalProperties: false
                                  required:
                                    - data
                                    - key
                                  additionalProperties: false
                              additionalProperties: false
                            - type: string
                        overlays:
                          anyOf:
                            - type: array
                              items:
                                anyOf:
                                  - type: object
                                    properties:
                                      url:
                                        type: string
                                      headers:
                                        type: object
                                        properties: {}
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    required:
                                      - url
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      gitlab:
                                        type: object
                                        properties:
                                          url:
                                            type: string
                                          project_id:
                                            type: number
                                            format: float
                                          file_path:
                                            type: string
                                          ref:
                                            type: string
                                          token:
                                            anyOf:
                                              - type: string
                                              - type: object
                                                properties:
                                                  vault:
                                                    anyOf:
                                                      - type: string
                                                      - type: object
                                                        properties:
                                                          path:
                                                            type: string
                                                          key:
                                                            type: string
                                                          instance:
                                                            type: string
                                                        required:
                                                          - path
                                                          - key
                                                        additionalProperties: false
                                                additionalProperties: false
                                        required:
                                          - url
                                          - project_id
                                          - file_path
                                          - token
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      github:
                                        type: object
                                        properties:
                                          url:
                                            type: string
                                          owner:
                                            type: string
                                          repo:
                                            type: string
                                          file_path:
                                            type: string
                                          ref:
                                            type: string
                                          token:
                                            anyOf:
                                              - type: string
                                              - type: object
                                                properties:
                                                  vault:
                                                    anyOf:
                                                      - type: string
                                                      - type: object
                                                        properties:
                                                          path:
                                                            type: string
                                                          key:
                                                            type: string
                                                          instance:
                                                            type: string
                                                        required:
                                                          - path
                                                          - key
                                                        additionalProperties: false
                                                additionalProperties: false
                                        required:
                                          - owner
                                          - repo
                                          - file_path
                                          - token
                                        additionalProperties: false
                                      keys:
                                        type: object
                                        properties:
                                          data:
                                            type: string
                                          key:
                                            type: string
                                            pattern: .*ENCRYPTED PRIVATE KEY.*
                                          seal:
                                            type: object
                                            properties:
                                              hash:
                                                type: string
                                              salt:
                                                type: string
                                            required:
                                              - hash
                                              - salt
                                            additionalProperties: false
                                        required:
                                          - data
                                          - key
                                        additionalProperties: false
                                    additionalProperties: false
                                  - type: string
                            - type: string
                        keys:
                          type: object
                          properties:
                            data:
                              type: string
                            key:
                              type: string
                              pattern: .*ENCRYPTED PRIVATE KEY.*
                            seal:
                              type: object
                              properties:
                                hash:
                                  type: string
                                salt:
                                  type: string
                              required:
                                - hash
                                - salt
                              additionalProperties: false
                          required:
                            - data
                            - key
                          additionalProperties: false
                      additionalProperties: false
                    - type: string
                client:
                  type: object
                  properties:
                    modules:
                      type: object
                      properties: {}
                      additionalProperties:
                        type: string
                  additionalProperties: false
              additionalProperties: false
            examples:
              cluster1:
                value: *ref_8
                summary: cluster1 Example
              cluster3:
                value: *ref_43
                summary: cluster3 Example
      responses:
        '204':
          description: No response body
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /presets:
    get:
      operationId: getPresets
      tags: *ref_42
      summary: Get presets
      description: Returns the current presets.
      responses:
        '200':
          description: Morio presets
          content:
            application/json:
              example:
                MORIO_API_JWT_EXPIRY: 12h
                MORIO_API_LOG_LEVEL: trace
                MORIO_API_PORT: 3000
                MORIO_API_PREFIX: /-/api
                MORIO_BROKER_ADMIN_API_PORT: 9644
                MORIO_BROKER_KAFKA_API_EXTERNAL_PORT: 9092
                MORIO_BROKER_KAFKA_API_INTERNAL_PORT: 19092
                MORIO_BROKER_LOG_LEVEL: warn
                MORIO_BROKER_REST_API_PORT: 8082
                MORIO_BROKER_TOPICS:
                  - _redpanda.audit_log
                  - audit
                  - checks
                  - events
                  - logs
                  - metrics
                  - notifications
                  - cron.hourly
                  - cron.daily
                  - cron.weekly
                  - cron.monthly
                MORIO_BROKER_UID: 101
                MORIO_CA_CERTIFICATE_LIFETIME_DFLT: 750h
                MORIO_CA_CERTIFICATE_LIFETIME_MAX: 17544h
                MORIO_CA_CERTIFICATE_LIFETIME_MIN: 5m
                MORIO_CA_PORT: 9000
                MORIO_CA_UID: 1000
                MORIO_CONFIG_ROOT: /home/jdecock/git/morio/data/config
                MORIO_CONNECTOR_UID: 1000
                MORIO_CONSOLE_PORT: 8080
                MORIO_CONSOLE_PREFIX: console
                MORIO_CORE_CLUSTER_HEARTBEAT_INTERVAL: 30
                MORIO_CORE_CLUSTER_HEARTBEAT_MAX_RTT: 150
                MORIO_CORE_CLUSTER_STATE_CACHE_TTL: 20
                MORIO_CORE_CONFIG_FOLDER: /etc/morio
                MORIO_CORE_CRON_DAILY: 24
                MORIO_CORE_CRON_HOURLY: 1
                MORIO_CORE_CRON_MONTHLY: 720
                MORIO_CORE_CRON_WEEKLY: 720
                MORIO_CORE_LOG_LEVEL: debug
                MORIO_CORE_PORT: 3007
                MORIO_CORE_PREFIX: /-/core
                MORIO_CORE_SERVICE_CERTIFICATE_RENEWAL_DAYS: 135
                MORIO_CORE_UUID_FINGERPRINT_LENGTH: 6
                MORIO_DATA_ROOT: /home/jdecock/git/morio/data/data
                MORIO_DB_HTTP_PORT: 4001
                MORIO_DB_RAFT_PORT: 4002
                MORIO_DOCKER_SOCKET: /var/run/docker.sock
                MORIO_DOWNLOADS_FOLDER: downloads
                MORIO_ERRORS_WEB_PREFIX: https://morio.it/reference/errors/
                MORIO_INTERMEDIATE_CA_COMMON_NAME: Morio Intermediate Certificate Authority
                MORIO_INTERMEDIATE_CA_VALID_YEARS: 5
                MORIO_LOGS_ROOT: /home/jdecock/git/morio/data/logs
                MORIO_NETWORK: morionet
                MORIO_NETWORK_MTU: 1500
                MORIO_NETWORK_SUBNET: 192.168.144.32/28
                MORIO_PROXY_ACCESS_LOG_FILEPATH: /var/log/morio/traefik.access.log
                MORIO_PROXY_LOG_FILEPATH: /var/log/morio/traefik.log
                MORIO_PROXY_LOG_FORMAT: json
                MORIO_PROXY_LOG_LEVEL: DEBUG
                MORIO_REPOS_FOLDER: repos
                MORIO_ROOT_CA_COMMON_NAME: Morio Root Certificate Authority
                MORIO_ROOT_CA_VALID_YEARS: 20
                MORIO_UI_PORT: 3010
                MORIO_UI_TIMEOUT_URL_CHECK: 1500
                MORIO_UNIT_TEST_HOST: unit.test.morio.it
                MORIO_VERSION: 0.2.0
                MORIO_X509_C: BE
                MORIO_X509_CN: Morio
                MORIO_X509_L: Brussels
                MORIO_X509_O: CERT-EU
                MORIO_X509_OU: Engineering Team
                MORIO_X509_ST: Brussels
                NODE_ENV: development
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_44
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /reload:
    get:
      operationId: reload
      tags: *ref_42
      summary: Reload the API
      description: >-
        This will cause the API to re-initialize itself, including reaching out
        the Morio Core to re-load the settings.


        This is an internal route that is exposed to allow for troubleshooting.
        You probably don't want to use this.
      responses:
        '204':
          description: No response body
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /reseed:
    get:
      operationId: reseed
      tags: *ref_42
      summary: Reseed Morio
      description: >-
        This will trigger reseeding of the settings, followed by a (soft)
        restart of Morio
      responses:
        '204':
          description: No response body
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /restart:
    get:
      operationId: restart
      tags: *ref_42
      summary: Restart Morio
      description: >-
        This will cause a soft restart of core, re-bootstrapping itself based on
        the settings on disk.
      responses:
        '204':
          description: No response body
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /kv/keys/{key}:
    get:
      tags: &ref_45
        - kv
      security: *ref_16
      operationId: readKey
      summary: Read key
      description: Returns the value stored under `key` in the KV store.
      parameters: &ref_46
        - in: path
          name: key
          schema:
            type: string
            description: The key in the KV store
          required: true
          description: The key in the KV store
      responses:
        '200':
          description: Value under key
          content:
            application/json:
              example:
                key: my key
                value: my value
              schema:
                type: object
                properties:
                  key:
                    type: string
                  value: {}
                additionalProperties: false
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_44
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Database Failure
          content:
            application/problem+json:
              example: *ref_20
          headers: *ref_2
        '404':
          description: No such key
          content:
            application/problem+json:
              example: &ref_47
                status: 404
                title: No such key
                detail: >-
                  This is the API equivalent of a 404 page for the KV store.
                  This key does not exist.
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
    post:
      tags: *ref_45
      operationId: writeKey
      summary: Write key
      description: >-
        Writes a value to `key` key in the KV store.

        Values will be serialized as JSON, so you can write strucutured data.


        This endpoint will use the remainder of the URL path after `/kv/keys/`
        as the key. Examples:


        - For `/kv/keys/example` the key is `example`

        - For `/kv/keys/example/of/a/nested/key` the key is
        `example/of/a/nested/key`

        - For `/kv/keys/example/of/a/nested/key?with=query=params` the key is
        `example/of/a/nested/key`

        - For `/kv/keys/example/of/a/nested/key#with-anchor-data` the key is
        `example/of/a/nested/key`


        While you can use any approach to structure the keyspace, using a

        pseudo-directory structure like is often beneficial to keep access
        policies

        intuitive.


        The prefix `kv/keys/morio/internal/` is reserved for internal Morio use.

        You can read these keys, but attempting to write to a key with this
        prefix

        via the API wil result in a schema violation.
      parameters: *ref_46
      requestBody:
        description: The value to write
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                value:
                  anyOf:
                    - type: boolean
                    - type: array
                      items: {}
                    - type: number
                      format: float
                    - type: string
                    - type: object
                      properties: {}
                      additionalProperties: false
              additionalProperties: false
            example:
              value: My value
      responses:
        '204':
          description: No response body
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Database Failure
          content:
            application/problem+json:
              example: *ref_20
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
    delete:
      tags: *ref_45
      operationId: deleteKey
      summary: Delete key
      description: Removes the key `key` from the KV store.
      parameters: *ref_46
      responses:
        '204':
          description: No response body
        '400':
          description: This request violates the data schema
          content:
            application/problem+json:
              example: *ref_10
          headers: *ref_2
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '403':
          description: Database Failure
          content:
            application/problem+json:
              example: *ref_20
          headers: *ref_2
        '404':
          description: No such key
          content:
            application/problem+json:
              example: *ref_47
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /kv/keys:
    get:
      tags: *ref_45
      security: *ref_16
      operationId: listKeys
      summary: List keys
      description: Returns the list of keys in the KV store.
      responses:
        '200':
          description: Key list
          content:
            application/json:
              example:
                - my key
                - some other key
                - better_name
                - PIPELINE_RESULT
              schema:
                type: array
                items: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_48
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /kv/glob/{pattern}:
    get:
      tags: *ref_45
      security: *ref_16
      operationId: globKeys
      summary: Glob keys
      description: Returns the list of keys in the KV store.
      parameters:
        - in: path
          name: pattern
          schema:
            type: string
            description: The glob pattern to filter keys
          required: true
          description: The glob pattern to filter keys with
      responses:
        '200':
          description: Key list
          content:
            application/json:
              example:
                - better_name
                - PIPELINE_RESULT
              schema:
                type: array
                items: {}
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_48
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
  /kv/dump:
    get:
      tags: *ref_45
      security: *ref_16
      operationId: dumpKvData
      summary: Dump KV data
      description: Returns all keys and values in the KV store
      responses:
        '200':
          description: KV Data
          content:
            application/json:
              example:
                my key: My value
                some other key: some other value
                better_name: 12
                PIPELINE_RESULT:
                  status: success
                  duration: 123
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    about:
                      type: string
                    status:
                      type: string
                      enum:
                        - pending
                        - active
                        - disabled
                    role:
                      type: string
                      enum:
                        - user
                        - manager
                        - operator
                        - engineer
                        - root
                      description: >-
                        The requested role to assign after authentication.  Must
                        be one of: user, manager, operator, engineer, root.
                        Although root can only be assigned by the MRT identity
                        provider.
                    created_by:
                      type: string
                    created_at:
                      type: string
                      format: date-time
                    updated_by:
                      type: string
                    updated_at:
                      type: string
                      format: date-time
                    last_login:
                      type: string
                      format: date-time
                    provider:
                      type: string
                    username:
                      type: string
                  required:
                    - id
                    - role
                  additionalProperties: false
          headers:
            ratelimit: *ref_0
            ratelimit-policy: *ref_1
            Retry-After: *ref_48
        '401':
          description: Authentication required
          content:
            application/problem+json:
              example: *ref_3
          headers: *ref_2
        '429':
          description: Rate limit exceeded
          content:
            application/problem+json:
              example: *ref_4
          headers: *ref_2
        '500':
          description: Internal server error
          content:
            application/problem+json:
              example: *ref_5
security: *ref_16
