{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "$schema": {
        "type": "string",
        "format": "uri"
      },
      "name.short": {
        "type": "string",
        "maxLength": 30,
        "$ref": "#/definitions/nonEmptyString"
      },
      "name.full": {
        "type": "string",
        "maxLength": 100,
        "$ref": "#/definitions/nonEmptyString"
      },
      "description.short": {
        "type": "string",
        "maxLength": 80,
        "$ref": "#/definitions/nonEmptyString"
      },
      "description.full": {
        "type": "string",
        "maxLength": 4000,
        "$ref": "#/definitions/nonEmptyString"
      },
      "localizationKeys": {
        "type": "object",
        "patternProperties": {
          "^\\[\\[[a-zA-Z_][a-zA-Z0-9_]*\\]\\]$": {
            "type": "string"
          }
        }
      }
    },
    "patternProperties": {
      "^staticTabs\\[([0-9]|1[0-5])\\]\\.name$": {
        "type": "string",
        "maxLength": 128
      },
      "^bots\\[0\\]\\.commandLists\\[[0-2]\\]\\.commands\\[[0-9]\\]\\.title$": {
        "type": "string",
        "maxLength": 128
      },
      "^bots\\[0\\]\\.commandLists\\[[0-2]\\]\\.commands\\[[0-9]\\]\\.description$": {
        "type": "string",
        "maxLength": 4000
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.title$": {
        "type": "string",
        "maxLength": 32
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.description$": {
        "type": "string",
        "maxLength": 128
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.parameters\\[[0-4]\\]\\.title$": {
        "type": "string",
        "maxLength": 32
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.parameters\\[[0-4]\\]\\.description$": {
        "type": "string",
        "maxLength": 128
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.parameters\\[[0-4]\\]\\.value$": {
        "type": "string",
        "maxLength": 512
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.parameters\\[[0-4]\\]\\.choices\\[[0-9]\\]\\.title$": {
        "type": "string",
        "maxLength": 128
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.samplePrompts\\[[0-4]\\]\\.text$": {
        "type": "string",
        "maxLength": 128
      },
      "^composeExtensions\\[0\\]\\.commands\\[[0-9]\\]\\.taskInfo\\.title$": {
        "type": "string",
        "maxLength": 64
      },
      "^activities.activityTypes\\[\\b([0-9]|[1-8][0-9]|9[0-9]|1[01][0-9]|12[0-7])\\b]\\.description$": {
        "type": "string",
        "maxLength": 128
      },
      "^activities.activityTypes\\[\\b([0-9]|[1-8][0-9]|9[0-9]|1[01][0-9]|12[0-7])\\b]\\.templateText$": {
        "type": "string",
        "maxLength": 128
      },
      "^meetingExtensionDefinition.scenes\\[[0-9]\\]\\.name$": {
        "type": "string",
        "maxLength": 128
      },
      "^extensions\\[[0]\\]\\.audienceClaimUrl$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.label$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.customMobileRibbonGroups\\[[0-9]\\]\\.label$": {
        "type": "string",
        "maxLength": 32
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.customMobileRibbonGroups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.icons\\[[0-8]\\]\\.url$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.customMobileRibbonGroups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.label$": {
        "type": "string",
        "maxLength": 32
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.icons\\[[0-2]\\]\\.url$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.label$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.icons\\[[0-2]\\]\\.url$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.label$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.supertip\\.title$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.supertip\\.description$": {
        "type": "string",
        "maxLength": 250
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.items\\[[1]?[0-9]\\]\\.icons\\[[0-2]\\]\\.url$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.items\\[[1]?[0-9]\\]\\.label$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.items\\[[1]?[0-9]\\]\\.supertip\\.title$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.tabs\\[[1]?[0-9]\\]\\.groups\\[[0-9]\\]\\.controls\\[[1]?[0-9]\\]\\.items\\[[1]?[0-9]\\]\\.supertip\\.description$": {
        "type": "string",
        "maxLength": 250
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.fixedControls\\[[1]?[0-9]\\]\\.label$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.fixedControls\\[[1]?[0-9]\\]\\.supertip\\.title$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.fixedControls\\[[1]?[0-9]\\]\\.supertip\\.description$": {
        "type": "string",
        "maxLength": 128
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.spamPreProcessingDialog\\.title$": {
        "type": "string",
        "maxLength": 128
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.spamPreProcessingDialog\\.description$": {
        "type": "string",
        "maxLength": 250
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.spamPreProcessingDialog\\.spamFreeTextSectionTitle$": {
        "type": "string",
        "maxLength": 128
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.spamPreProcessingDialog\\.spamReportingOptions\\.title$": {
        "type": "string",
        "maxLength": 128
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.spamPreProcessingDialog\\.spamReportingOptions\\.options\\[[0-4]\\]$": {
        "type": "string",
        "maxLength": 128
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.spamPreProcessingDialog\\.spamMoreInfo\\.text$": {
        "type": "string",
        "maxLength": 128
      },
      "^extensions\\[[0]\\]\\.ribbons\\[[0-9]\\]\\.spamPreProcessingDialog\\.spamMoreInfo\\.url$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.runtimes\\[[1]?[0-9]\\]\\.code\\.page$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.runtimes\\[[1]?[0-9]\\]\\.code\\.script$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.runtimes\\[[1]?[0-9]\\]\\.actions\\[[1]?[0-9]\\]\\.displayName$": {
        "type": "string",
        "maxLength": 64
      },
      "^extensions\\[[0]\\]\\.alternates\\[[0-9]\\]\\.alternateIcons\\.icon\\.url$": {
        "type": "string",
        "maxLength": 2048
      },
      "^extensions\\[[0]\\]\\.alternates\\[[0-9]\\]\\.alternateIcons\\.highResolutionIcon\\.url$": {
        "type": "string",
        "maxLength": 2048
      },
      "^copilotAgents.customEngineAgents\\[0\\]\\.disclaimer.text$": {
        "type": "string",
        "maxLength": 500
      }
    },
    "required": [ "name.short", "description.short", "description.full" ],
    "definitions": {
      "nonEmptyString": {
        "type": "string",
        "pattern": "^(?![nN][uU][lL]{2}$)\\s*\\S.*"
      }
    }
  }