<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="FrameInterval">
    <xs:all>
      <xs:element name="Unit" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Milliseconds"/>
            <xs:enumeration value="Frames"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Interval" type="xs:integer" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:simpleType name="MediaContainer">
    <xs:restriction base="xs:string">
      <xs:enumeration value="TS"/>
      <xs:enumeration value="fMP4"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="VStreamPlatform">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="System" minOccurs="0">
          <xs:complexType>
            <xs:all>

              <xs:element name="DeviceName" type="xs:string" minOccurs="0" />

              <xs:element name="IPScheme" minOccurs="0">
                <xs:complexType>
                  <xs:choice>

                    <xs:element name="DHCP" />

                    <xs:element name="Static">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="IPAddress" type="IPv4Address" />
                          <xs:element name="SubnetMask" type="IPv4Address" />
                          <xs:element name="Gateway" type="IPv4Address" />
                          <xs:element name="DNSServer" type="IPv4Address" minOccurs="0" />
                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                  </xs:choice>
                </xs:complexType>
              </xs:element>

              <xs:element name="XMLPollInterval" type="xs:integer" minOccurs="0" />
              <xs:element name="NTPServer" type="xs:string" minOccurs="1" />
              <xs:element name="Timezone" type="xs:string" minOccurs="1" />

            </xs:all>
          </xs:complexType>
        </xs:element>

        <xs:element name="InputChannel" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:all>

              <xs:element name="Name" type="xs:string" minOccurs="0" />

              <xs:element name="AudioInputType" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Auto" />
                    <xs:enumeration value="Embedded_Audio" />
                    <xs:enumeration value="3p5mm_Audio" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="SdiIgnoreAudioPhase" type="xs:boolean" minOccurs="0" />
              <xs:element name="VideoInputType" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Auto" />
                    <xs:enumeration value="HDMI_Video" />
                    <xs:enumeration value="SDI_Video" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="VideoRotation" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Rotate0" />
                    <xs:enumeration value="Rotate90" />
                    <xs:enumeration value="Rotate180" />
                    <xs:enumeration value="Rotate270" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="GraphicOverlay" minOccurs="0">
                <xs:complexType>
                  <xs:all>

                    <xs:element name="Enable" type="xs:boolean" />

                    <xs:element name="Position" minOccurs="0">
                      <xs:complexType>
                        <xs:all>

                          <xs:element name="Preset">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="Manual" />
                                <xs:enumeration value="Fullscreen" />
                                <xs:enumeration value="LowerThird" />
                                <xs:enumeration value="TopLeft" />
                                <xs:enumeration value="BottomLeft" />
                                <xs:enumeration value="TopCenter" />
                                <xs:enumeration value="Center" />
                                <xs:enumeration value="BottomCenter" />
                                <xs:enumeration value="TopRight" />
                                <xs:enumeration value="BottomRight" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                          <xs:element name="X" type="xs:integer" minOccurs="0" />      <!--Percentage-->
                          <xs:element name="Y" type="xs:integer" minOccurs="0" />      <!--Percentage-->
                          <xs:element name="Width" type="xs:integer" minOccurs="0" />  <!--Percentage-->
                          <xs:element name="Height" type="xs:integer" minOccurs="0" /> <!--Percentage-->

                          <xs:element name="LockAspectRatio" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="NoLock" />
                                <xs:enumeration value="LockToWidth" />
                                <xs:enumeration value="LockToHeight" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                  </xs:all>
                </xs:complexType>
              </xs:element>

              <xs:element name="InputType" minOccurs="0">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="Hardware">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="HardwareChannel" type="xs:integer"/>
                        </xs:all>
                      </xs:complexType>
                    </xs:element>
                  </xs:choice>
                </xs:complexType>
              </xs:element>

              <xs:element name="EnablePersistentInput" type="xs:boolean" minOccurs="0" />
              <xs:element name="ForceAVMute" type="xs:boolean" minOccurs="0" />
              <xs:element name="EnableCEF" type="xs:boolean" minOccurs="0"/>
              <xs:element name="CEFUrl" type="xs:string" minOccurs="0"/>
            </xs:all>
            <xs:attribute name="id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>

        <xs:element name="AudioEncoder" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:all>

              <xs:element name="Name" type="xs:string" minOccurs="0" />
              <xs:element name="EnableRetry" type="xs:boolean" minOccurs="0" />
              <xs:element name="InputChannelID" type="xs:integer" minOccurs="1" maxOccurs="1"/>

              <xs:element name="Codec">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="MPEG4_AAC" />
                    <xs:element name="Opus" />
                  </xs:choice>
                </xs:complexType>
              </xs:element>

              <xs:element name="AudioBitrate" type="xs:integer" minOccurs="0" />

              <xs:element name="BitrateMode" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Variable" />
                    <xs:enumeration value="Constant" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="AudioMixMode" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Stereo" />
                    <xs:enumeration value="DualMono" />
                    <xs:enumeration value="LeftMono" />
                    <xs:enumeration value="RightMono" />
                    <xs:enumeration value="CrossMono" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="SelectedChannels" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Channel" type="xs:integer" minOccurs="1" maxOccurs="6"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>

            </xs:all>
            <xs:attribute name="id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>

        <xs:element name="DataEncoder" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:all>

              <xs:element name="Name" type="xs:string" minOccurs="0" />
              <xs:element name="InputChannelID" type="xs:integer" minOccurs="0" maxOccurs="1"/>

              <xs:element name="Codec">
                <xs:complexType>
                  <xs:choice>

                    <xs:element name="SynchronousKLV" />

                    <xs:element name="SCTE35">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="SpliceDuration" type="xs:integer" minOccurs="0" /> <!--Milliseconds-->
                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="SMPTE2038">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="StopProcessing" type="xs:boolean" minOccurs="0" />
                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                  </xs:choice>
                </xs:complexType>
              </xs:element>
            </xs:all>

            <xs:attribute name="id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>

        <xs:element name="VideoEncoder" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:all>

              <xs:element name="Name" type="xs:string" minOccurs="0" />
              <xs:element name="EnableRetry" type="xs:boolean" minOccurs="0" />
              <xs:element name="InputChannelID" type="xs:integer" minOccurs="1" maxOccurs="1"/>
              <xs:element name="VideoEncoderSyncGroupID" type="xs:integer" minOccurs="0" maxOccurs="1"/>

              <xs:element name="VideoCodec">
                <xs:complexType>
                  <xs:choice>

                    <xs:element name="H264">
                      <xs:complexType>
                        <xs:all>

                          <xs:element name="Profile" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="Baseline" />
                                <xs:enumeration value="Main" />
                                <xs:enumeration value="High" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="H265">
                      <xs:complexType>
                        <xs:all>

                          <xs:element name="Profile" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="Main" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                  </xs:choice>
                </xs:complexType>
              </xs:element>

              <xs:element name="VideoBitrate" type="xs:integer" minOccurs="0" />

              <xs:element name="BitrateMode" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Variable" />
                    <xs:enumeration value="Constant" />
                    <xs:enumeration value="ConstantStrict" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="ScalingResolution" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Passthrough" />
                    <xs:enumeration value="3840x2160" />
                    <xs:enumeration value="2560x1440" />
                    <xs:enumeration value="1920x1200" />
                    <xs:enumeration value="1920x1080" />
                    <xs:enumeration value="1280x720" />
                    <xs:enumeration value="960x540" />
                    <xs:enumeration value="720x576" />
                    <xs:enumeration value="854x480" />
                    <xs:enumeration value="640x360" />
                    <xs:enumeration value="480x270" />
                    <xs:enumeration value="320x180" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="LimitTo30FPS" type="xs:boolean" minOccurs="0" />

              <xs:element name="KeyframeInterval" type="FrameInterval" minOccurs="0" />

              <xs:element name="LatencyMode" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="High" />
                    <xs:enumeration value="Normal" />
                    <xs:enumeration value="Low" />
                    <xs:enumeration value="Lowest" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="KLVEnable" type="xs:boolean" minOccurs="0" />
              <xs:element name="AllowOutputsToAdjustBitrate" type="xs:boolean" minOccurs="0" />
              <xs:element name="CCEnable" type="xs:boolean" minOccurs="0" />

            </xs:all>
            <xs:attribute name="id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>

        <xs:element name="VideoEncoderSyncGroup" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:all>

              <xs:element name="Name" type="xs:string" minOccurs="0" />

              <xs:element name="InputChannelID" type="xs:integer" minOccurs="1" maxOccurs="1" />

              <xs:element name="LimitTo30FPS" type="xs:boolean" minOccurs="0" />

              <xs:element name="KeyframeInterval" type="FrameInterval" minOccurs="0" />

              <xs:element name="LatencyMode" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="High" />
                    <xs:enumeration value="Normal" />
                    <xs:enumeration value="Low" />
                    <xs:enumeration value="Lowest" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

            </xs:all>
          <xs:attribute name="id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>

        <xs:element name="Output" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>

              <xs:element name="Name" type="xs:string" minOccurs="0" />
              <xs:element name="Enable" type="xs:boolean" />

              <xs:element name="AudioSource" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="AudioEncoderID" type="xs:integer" />
                  </xs:choice>
                </xs:complexType>
              </xs:element>
              <xs:element name="VideoSource" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="VideoEncoderID" type="xs:integer" />
                    <xs:element name="VideoEncoderSyncGroupID" type="xs:integer" />
                  </xs:choice>
                </xs:complexType>
              </xs:element>
              <xs:element name="DataSource" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="DataEncoderID" type="xs:integer" />
                  </xs:choice>
                </xs:complexType>
              </xs:element>

              <xs:element name="EnableRetry" type="xs:boolean" minOccurs="0" />
              <xs:element name="UnlimitedRetries" type="xs:boolean" minOccurs="0" />

              <xs:element name="OutputType">
                <xs:complexType>
                  <xs:choice>

                    <xs:element name="Unicast">
                      <xs:complexType>
                        <xs:all>

                          <xs:element name="Protocol" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="RTP" />
                                <xs:enumeration value="UDP" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                          <xs:element name="DestinationIP" type="IPv4Address" minOccurs="0" />

                          <xs:element name="DestinationPort" type="xs:integer" minOccurs="0" />

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="Multicast">
                      <xs:complexType>
                        <xs:all>

                          <xs:element name="Protocol" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="RTP" />
                                <xs:enumeration value="UDP" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                          <xs:element name="MulticastAddress" type="IPv4Address" minOccurs="0" />

                          <xs:element name="DestinationPort" type="xs:integer" minOccurs="0" />

                          <xs:element name="TTL" type="xs:integer" minOccurs="0" />

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="SRT">
                      <xs:complexType>
                        <xs:all>

                          <xs:element name="CallMode">
                            <xs:complexType>
                              <xs:choice>

                                <xs:element name="Caller">
                                  <xs:complexType>
                                    <xs:all>
                                      <xs:element name="DestinationHost" type="xs:string" minOccurs="0" />
                                      <xs:element name="DestinationPort" type="xs:integer" minOccurs="0" />
                                      <xs:element name="StreamID" type="xs:string" minOccurs="0" />
                                    </xs:all>
                                  </xs:complexType>
                                </xs:element>

                                <xs:element name="Listener">
                                  <xs:complexType>
                                    <xs:all>
                                      <xs:element name="Port" type="xs:string" minOccurs="0" />
                                    </xs:all>
                                  </xs:complexType>
                                </xs:element>

                              </xs:choice>
                            </xs:complexType>
                          </xs:element>

                          <xs:element name="Latency" type="xs:integer" minOccurs="0" />
                          <xs:element name="BandwithOverheadPercentage" type="xs:integer" minOccurs="0" />
                          <xs:element name="EncryptionEnabled" type="xs:boolean" minOccurs="0" />
                          <xs:element name="Password" type="xs:string" minOccurs="0" />

                          <xs:element name="EncryptionKeySize" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="AES128" />
                                <xs:enumeration value="AES192" />
                                <xs:enumeration value="AES256" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="Zixi">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="DestinationIP" type="xs:string" minOccurs="0" />
                          <xs:element name="DestinationPort" type="xs:integer" minOccurs="0" />
                          <xs:element name="StreamID" type="xs:string" minOccurs="0" />
                          <xs:element name="MaxLatencyMS" type="xs:integer" minOccurs="0" />
                          <xs:element name="FECPercentage" type="xs:integer" minOccurs="0" />
                          <xs:element name="EncryptionEnabled" type="xs:boolean" minOccurs="0" />
                          <xs:element name="Passphrase" type="xs:string" minOccurs="0" />
                          <xs:element name="EncryptionKey" type="xs:string" minOccurs="0" />
                          <xs:element name="EncryptionKeySize" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="AES128" />
                                <xs:enumeration value="AES192" />
                                <xs:enumeration value="AES256" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>
                          <xs:element name="EnableBackPressureBitrateAdjustment" type="xs:boolean" minOccurs="0" />
                          <xs:element name="IgnoreDTLSCertError" type="xs:boolean" minOccurs="0" />
                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="RTSP">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="StreamName" type="xs:string" minOccurs="0" />
                          <xs:element name="ServerPort" type="xs:integer" minOccurs="0" />
                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="RTMP">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="URL" type="xs:string" minOccurs="0" />
                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="HTTPPush">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="ManifestType" minOccurs="0">
                            <xs:complexType>
                              <xs:all>
                                <xs:element name="HLS" minOccurs="0"/>
                                <xs:element name="DASH" minOccurs="0"/>
                              </xs:all>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="SegmentLength" type="xs:integer" minOccurs="0" />
                          <xs:element name="NumberOfSegments" type="xs:integer" minOccurs="0" />
                          <xs:element name="SaveSegmentWindow" type="xs:boolean" minOccurs="0" />
                          <xs:element name="MediaContainer" type="MediaContainer" minOccurs="0" />

                          <xs:element name="Synchronization" minOccurs="0">
                            <xs:complexType>
                              <xs:all>
                                <xs:element name="Enable" type="xs:boolean" />
                                <xs:element name="DashPresentationDelay" type="xs:integer" minOccurs="0" />
                                <xs:element name="DASHTimeService" type="xs:string" minOccurs="0" />
                              </xs:all>
                            </xs:complexType>
                          </xs:element>

                          <xs:element name="UltraLowLatency" minOccurs="0">
                            <xs:complexType>
                              <xs:all>
                                <xs:element name="Enable" type="xs:boolean" />
                                <xs:element name="ChunkInterval" type="FrameInterval" minOccurs="0"/>
                                <xs:element name="TargetLatencyMs" type="xs:integer" minOccurs="0" />
                              </xs:all>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="PushURL" type="xs:string" minOccurs="0" />
                          <xs:element name="PushURLSecondary" type="xs:string" minOccurs="0" />

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="FileRecord">
                      <xs:complexType>
                        <xs:all>

                          <xs:element name="FilenameBase" type="xs:string" minOccurs="0" />

                          <xs:element name="FilenameTimezone" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="UTC"/>
                                <xs:enumeration value="LOCALTIME"/>
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                          <xs:element  name="MediaContainer" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="TS"/>
                                <xs:enumeration value="MP4"/>
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>

                          <xs:element name="DeviceSelectionPolicy" minOccurs="0"><xs:complexType><xs:all>
                            <xs:element name="Policy">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="Attach_Time_First" />
                                  <xs:enumeration value="Attach_Time_Last" />
                                  <xs:enumeration value="Free_Space_Max" />
                                  <xs:enumeration value="Total_Space_Max" />
                                  <xs:enumeration value="Volume_UUID" />
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:element>
                            <xs:element name="Data" type="xs:string" minOccurs="0" />
                          </xs:all></xs:complexType></xs:element>

                          <xs:element name="DeleteOldestWhenFull" type="xs:boolean" minOccurs="0" />

                          <xs:element name="LimitMaxFileSize" minOccurs="0"><xs:complexType><xs:all>
                              <xs:element name="Enable" type="xs:boolean"/>
                              <xs:element name="Value" type="xs:integer" minOccurs="0"/>
                          </xs:all></xs:complexType></xs:element>

                          <xs:element name="FTPUpload" minOccurs="0">
                            <xs:complexType>
                              <xs:all>
                                <xs:element name="Enable" type="xs:boolean" />
                                <xs:element name="Protocol" minOccurs="0">
                                  <xs:complexType>
                                    <xs:choice>
                                      <xs:element name="FTP" />
                                      <xs:element name="SFTP" />
                                    </xs:choice>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="Server" type="xs:string" minOccurs="0" />
                                <xs:element name="Port" type="xs:integer" minOccurs="0" />
                                <xs:element name="Username" type="xs:string" minOccurs="0" />
                                <xs:element name="Password" type="xs:string" minOccurs="0" />
                                <xs:element name="FilePath" type="xs:string" minOccurs="0" />
                                <xs:element name="DeleteFileAfterUpload" type="xs:boolean" minOccurs="0" />
                              </xs:all>
                            </xs:complexType>
                          </xs:element>

                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="WHIP">
                      <xs:complexType>
                        <xs:all>
                          <xs:element name="Service" minOccurs="0">
                            <xs:simpleType>
                              <xs:restriction base="xs:string">
                                <xs:enumeration value="generic" />
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>
                          <xs:element name="ServiceData">
                            <xs:complexType>
                              <xs:choice>
                                <xs:element name="Generic">
                                  <xs:complexType>
                                    <xs:all>
                                      <xs:element name="URL" type="xs:string" minOccurs="0" />
                                      <xs:element name="AuthorizationToken" type="xs:string" minOccurs="0" />
                                    </xs:all>
                                  </xs:complexType>
                                </xs:element>
                              </xs:choice>
                            </xs:complexType>
                          </xs:element>
                        </xs:all>
                      </xs:complexType>
                    </xs:element>

                  </xs:choice>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
            <xs:attribute name="id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>

        <xs:element name="Thumbnail" minOccurs="0">
          <xs:complexType>
            <xs:all>
              <xs:element name="Enable" type="xs:boolean" />
              <xs:element name="Interval" type="xs:integer" minOccurs="0" />
              <xs:element name="Width" type="xs:integer" minOccurs="0" />
            </xs:all>
          </xs:complexType>
        </xs:element>

      </xs:sequence>
      <xs:attribute name="version" type="xs:integer" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="IPv4Address">
    <xs:annotation>
      <xs:documentation>IPv4 address in dot-decimal notation. Equivalent to [0-255].[0-255].[0-255].[0-255]</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" />
    </xs:restriction>
  </xs:simpleType>

</xs:schema>
