#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

http\://camel.apache.org/schema/spring-security/camel-spring-security.xsd=schema/camel-spring-security.xsd

http\://camel.apache.org/schema/spring-security/camel-spring-security-2.3.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.4.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.5.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.6.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.7.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.7.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.7.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.7.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.7.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.7.5.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.8.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.8.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.8.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.8.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.8.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.8.5.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.8.6.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.5.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.6.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.7.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.9.8.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.5.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.6.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.10.7.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.11.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.11.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.11.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.11.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.11.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.12.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.12.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.12.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.12.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.12.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.12.5.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.13.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.13.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.13.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.13.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.13.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.14.0.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.14.1.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.14.2.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.14.3.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-2.14.4.xsd=schema/camel-spring-security.xsd
http\://camel.apache.org/schema/spring-security/camel-spring-security-${project.version}.xsd=schema/camel-spring-security.xsd