diff options
Diffstat (limited to 'BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml')
-rw-r--r-- | BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml | 540 |
1 files changed, 275 insertions, 265 deletions
diff --git a/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml b/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml index 31d0d24a..f193388f 100644 --- a/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml +++ b/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml @@ -1,266 +1,276 @@ -<?xml version="1.0" encoding="UTF-8"?>
- <!--
- Copyright 2008 Federal Chancellery Austria and Graz University of
- Technology Licensed 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.
- -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
-
- <!-- configuration -->
- <bean id="configurationResource"
- class="org.springframework.web.context.support.ServletContextParameterFactoryBean">
- <property name="initParamName" value="configurationResource" />
- </bean>
-
- <bean id="configuration" class="at.gv.egiz.bku.spring.ConfigurationFactoryBean">
- <property name="configurationResource" ref="configurationResource" />
- <property name="failOnMissingResource" value="true" />
- </bean>
-
- <bean id="sslPKIProfile" class="at.gv.egiz.bku.spring.PKIProfileFactoryBean">
- <property name="configuration" ref="configuration"/>
- <property name="trustProfileId" value="SSL"/>
- </bean>
-
- <bean id="sslSocketFactory" class="at.gv.egiz.bku.spring.SSLSocketFactoryBean">
- <property name="configuration" ref="configuration"/>
- <property name="pkiProfile" ref="sslPKIProfile"/>
- </bean>
-
- <bean id="hostnameVerifier" class="at.gv.egiz.bku.spring.ConfigurableHostnameVerifier">
- <property name="configuration" ref="configuration"/>
- </bean>
-
- <bean id="urlDereferencer" class="at.gv.egiz.bku.utils.urldereferencer.URLDereferencerImpl"
- factory-method="getInstance">
- <property name="SSLSocketFactory" ref="sslSocketFactory"/>
- <property name="hostnameVerifier" ref="hostnameVerifier"/>
- </bean>
-
- <!-- security manager for the command invoker -->
- <bean id="securityManager" class="at.gv.egiz.bku.spring.SecurityManagerFactoryBean">
- <property name="configuration" ref="configuration" />
- </bean>
-
- <!-- command invoker -->
- <bean id="slCommandInvoker" class="at.gv.egiz.bku.binding.SLCommandInvokerImpl">
- <property name="securityManager" ref="securityManager" />
- </bean>
-
- <!-- Security Layer command factory -->
-
- <bean id="abstractCommandFactory" class="at.gv.egiz.bku.slcommands.AbstractSLCommandFactory"
- abstract="true">
- <property name="configuration" ref="configuration"/>
- </bean>
-
- <bean id="certificatesInfoboxFactory"
- class="at.gv.egiz.bku.slcommands.impl.CertificatesInfoboxFactory" />
- <bean id="identityLinkInfoboxFactory"
- class="at.gv.egiz.bku.slcommands.impl.IdentityLinkInfoboxFactory">
- <property name="identityLinkTransformer">
- <bean class="at.gv.egiz.idlink.IdentityLinkTransformer">
- <property name="urlDereferencer" ref="urlDereferencer"/>
- </bean>
- </property>
- </bean>
- <bean id="cardChannelInfoboxFactory"
- class="at.gv.egiz.bku.slcommands.impl.CardChannelInfoboxFactory" />
- <bean id="svPersonendatenInfoboxFactory"
- class="at.gv.egiz.bku.slcommands.impl.SVPersonendatenInfoboxFactory" />
-
- <bean id="infoboxFactory" class="at.gv.egiz.bku.slcommands.impl.InfoboxFactory">
- <property name="infoboxFactories">
- <map>
- <entry key="Certificates" value-ref="certificatesInfoboxFactory" />
- <entry key="IdentityLink" value-ref="identityLinkInfoboxFactory" />
- <entry key="CardChannel" value-ref="cardChannelInfoboxFactory" />
- <entry key="SV-Personendaten" value-ref="svPersonendatenInfoboxFactory" />
- </map>
- </property>
- </bean>
-
- <bean id="nullOperationCommandFactory"
- class="at.gv.egiz.bku.slcommands.impl.NullOperationCommandFactory"
- parent="abstractCommandFactory" />
- <bean id="nullOperationRequest" class="javax.xml.namespace.QName">
- <constructor-arg
- value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" />
- <constructor-arg value="NullOperationRequest" />
- </bean>
- <bean id="infoboxReadCommandFactory"
- class="at.gv.egiz.bku.slcommands.impl.InfoboxReadCommandFactory"
- parent="abstractCommandFactory">
- <property name="infoboxFactory" ref="infoboxFactory" />
- </bean>
- <bean id="infoboxReadRequest" class="javax.xml.namespace.QName">
- <constructor-arg
- value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" />
- <constructor-arg value="InfoboxReadRequest" />
- </bean>
- <bean id="infoboxUpdateCommandFactory"
- class="at.gv.egiz.bku.slcommands.impl.InfoboxUpdateCommandFactory"
- parent="abstractCommandFactory">
- <property name="infoboxFactory" ref="infoboxFactory" />
- </bean>
- <bean id="infoboxUpdateRequest" class="javax.xml.namespace.QName">
- <constructor-arg
- value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" />
- <constructor-arg value="InfoboxUpdateRequest" />
- </bean>
- <bean id="createXMLSignatureCommandFactory"
- class="at.gv.egiz.bku.slcommands.impl.CreateXMLSignatureCommandFactory"
- parent="abstractCommandFactory" />
- <bean id="createXMLSignatureRequest" class="javax.xml.namespace.QName">
- <constructor-arg
- value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" />
- <constructor-arg value="CreateXMLSignatureRequest" />
- </bean>
- <bean id="getStatusCommandFactory" class="at.gv.egiz.bku.slcommands.impl.GetStatusCommandFactory"
- parent="abstractCommandFactory" />
- <bean id="getStatusRequest" class="javax.xml.namespace.QName">
- <constructor-arg
- value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" />
- <constructor-arg value="GetStatusRequest" />
- </bean>
-
- <bean id="slCommandFactory" class="at.gv.egiz.bku.slcommands.SLCommandFactory"
- factory-method="getInstance">
- <property name="concreteFactories">
- <map>
- <entry key-ref="nullOperationRequest" value-ref="nullOperationCommandFactory" />
- <entry key-ref="infoboxReadRequest" value-ref="infoboxReadCommandFactory" />
- <entry key-ref="infoboxUpdateRequest" value-ref="infoboxUpdateCommandFactory" />
- <entry key-ref="createXMLSignatureRequest" value-ref="createXMLSignatureCommandFactory" />
- <entry key-ref="getStatusRequest" value-ref="getStatusCommandFactory" />
- </map>
- </property>
- <!--
- The following properties may be used to introduce additional XML
- schemas and binding classes to the command factory.
- -->
- <!--
- If property jaxbContextPackageNames is not set the default JAXBContext
- is created with the package names given below.
- -->
- <!--
- <property name="jaxbContextPackageNames">
- <list>
- <value>at.buergerkarte.namespaces.securitylayer._1</value>
- <value>org.w3._2000._09.xmldsig_</value>
- <value>at.buergerkarte.namespaces.cardchannel</value>
- <value>at.buergerkarte.namespaces.securitylayer._20020225_</value>
- <value>at.buergerkarte.namespaces.securitylayer._20020831_</value>
- </list>
- </property>
- -->
- <!--
- If property schemaUrls is not set the default schema is created from
- the URLs listed below.
- -->
- <!--
- <property name="schemaUrls">
- <list>
- <value>classpath:at/gv/egiz/bku/slschema/xml.xsd</value>
- <value>classpath:at/gv/egiz/bku/slschema/xmldsig-core-schema.xsd</value>
- <value>classpath:at/gv/egiz/bku/slschema/Core-1.2.xsd</value>
- <value>classpath:at/gv/egiz/bku/slschema/Core.20020225.xsd</value>
- <value>classpath:at/gv/egiz/bku/slschema/Core.20020831.xsd</value>
- </list>
- </property>
- -->
- </bean>
-
- <!-- STAL factory -->
- <bean id="stalFactory" class="at.gv.egiz.stal.service.impl.RequestBrokerSTALFactory"
- scope="singleton">
- <property name="configuration" ref="configuration" />
- </bean>
-
- <!-- binding processor factories -->
- <bean id="httpBindingProcessorFactory" class="at.gv.egiz.bku.binding.HTTPBindingProcessorFactory">
- <property name="configuration" ref="configuration" />
- <property name="urlDereferencer" ref="urlDereferencer" />
- <property name="sslSocketFactory" ref="sslSocketFactory" />
- <property name="hostnameVerifier" ref="hostnameVerifier" />
- <property name="slCommandFactory" ref="slCommandFactory" />
- </bean>
- <bean id="samlBindingProcessorFactory" class="at.gv.egiz.mocca.id.SAMLBindingProcessorFactory">
- <property name="configuration" ref="configuration" />
- <property name="slCommandFactory" ref="slCommandFactory" />
- <property name="urlDereferencer" ref="urlDereferencer" />
- </bean>
-
- <!-- binding processor manager -->
- <bean id="bindingProcessorManager" class="at.gv.egiz.bku.binding.BindingProcessorManagerImpl"
- scope="singleton">
- <property name="stalFactory" ref="stalFactory" />
- <property name="slCommandInvoker" ref="slCommandInvoker" />
- <property name="factories">
- <list>
- <ref bean="httpBindingProcessorFactory"/>
- <ref bean="samlBindingProcessorFactory"/>
- </list>
- </property>
- </bean>
-
- <bean id="attributeExporter"
- class="org.springframework.web.context.support.ServletContextAttributeExporter">
- <property name="attributes">
- <map>
- <entry key="bindingProcessorManager" value-ref="bindingProcessorManager"/>
- </map>
- </property>
- </bean>
-
- <!-- Shutdown Event handler -->
- <bean id="shutdownHandler" class="at.gv.egiz.bku.spring.ShutdownHandler">
- <property name="bindingProcessorManager" ref="bindingProcessorManager" />
- </bean>
-
- <!-- do not launch MBeanServer by default
- | (the contextPathFactoryBean requires Servlet 2.5)
- <bean
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="properties">
- <map>
- <entry key="contextPath">
- <bean class="at.gv.egiz.bku.online.spring.ServletContextPathFactoryBean"/>
- </entry>
- </map>
- </property>
- </bean>
-
- <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
- <property name="locateExistingServerIfPossible" value="true" />
- </bean>
-
- <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
- <property name="server" ref="mbeanServer"/>
- <property name="beans">
- <map>
- <entry
- key="at.gv.egiz.mocca:type=bindingProcessorManager,contextPath=${contextPath},name=HTTP"
- value-ref="bindingProcessorManager" />
- <entry
- key="at.gv.egiz.mocca:type=stalFactory,contextPath=${contextPath},name=RequestBrocker"
- value-ref="stalFactory" />
- <entry
- key="at.gv.egiz.mocca:type=slCommandInvoker,contextPath=${contextPath},name=CommandInvoker"
- value-ref="slCommandInvoker" />
- </map>
- </property>
- </bean>
- -->
-
-
+<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2011 by Graz University of Technology, Austria + MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + initiative of the Federal Chancellery Austria and Graz University of Technology. + + Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + the European Commission - subsequent versions of the EUPL (the "Licence"); + You may not use this work except in compliance with the Licence. + You may obtain a copy of the Licence at: + http://www.osor.eu/eupl/ + + Unless required by applicable law or agreed to in writing, software + distributed under the Licence is distributed on an "AS IS" basis, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the Licence for the specific language governing permissions and + limitations under the Licence. + + This product combines work with different licenses. See the "NOTICE" text + file for details on the various modules and licenses. + The "NOTICE" text file is part of the distribution. Any derivative works + that you distribute must include a readable copy of the "NOTICE" text file. +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> + + <!-- configuration --> + <bean id="configurationResource" + class="org.springframework.web.context.support.ServletContextParameterFactoryBean"> + <property name="initParamName" value="configurationResource" /> + </bean> + + <bean id="configuration" class="at.gv.egiz.bku.spring.ConfigurationFactoryBean"> + <property name="configurationResource" ref="configurationResource" /> + <property name="failOnMissingResource" value="true" /> + </bean> + + <bean id="sslPKIProfile" class="at.gv.egiz.bku.spring.PKIProfileFactoryBean"> + <property name="configuration" ref="configuration"/> + <property name="trustProfileId" value="SSL"/> + </bean> + + <bean id="sslSocketFactory" class="at.gv.egiz.bku.spring.SSLSocketFactoryBean"> + <property name="configuration" ref="configuration"/> + <property name="pkiProfile" ref="sslPKIProfile"/> + </bean> + + <bean id="hostnameVerifier" class="at.gv.egiz.bku.spring.ConfigurableHostnameVerifier"> + <property name="configuration" ref="configuration"/> + </bean> + + <bean id="urlDereferencer" class="at.gv.egiz.bku.utils.urldereferencer.URLDereferencerImpl" + factory-method="getInstance"> + <property name="SSLSocketFactory" ref="sslSocketFactory"/> + <property name="hostnameVerifier" ref="hostnameVerifier"/> + </bean> + + <!-- security manager for the command invoker --> + <bean id="securityManager" class="at.gv.egiz.bku.spring.SecurityManagerFactoryBean"> + <property name="configuration" ref="configuration" /> + </bean> + + <!-- command invoker --> + <bean id="slCommandInvoker" class="at.gv.egiz.bku.binding.SLCommandInvokerImpl"> + <property name="securityManager" ref="securityManager" /> + </bean> + + <!-- Security Layer command factory --> + + <bean id="abstractCommandFactory" class="at.gv.egiz.bku.slcommands.AbstractSLCommandFactory" + abstract="true"> + <property name="configuration" ref="configuration"/> + </bean> + + <bean id="certificatesInfoboxFactory" + class="at.gv.egiz.bku.slcommands.impl.CertificatesInfoboxFactory" /> + <bean id="identityLinkInfoboxFactory" + class="at.gv.egiz.bku.slcommands.impl.IdentityLinkInfoboxFactory"> + <property name="identityLinkTransformer"> + <bean class="at.gv.egiz.idlink.IdentityLinkTransformer"> + <property name="urlDereferencer" ref="urlDereferencer"/> + </bean> + </property> + </bean> + <bean id="cardChannelInfoboxFactory" + class="at.gv.egiz.bku.slcommands.impl.CardChannelInfoboxFactory" /> + <bean id="svPersonendatenInfoboxFactory" + class="at.gv.egiz.bku.slcommands.impl.SVPersonendatenInfoboxFactory" /> + + <bean id="infoboxFactory" class="at.gv.egiz.bku.slcommands.impl.InfoboxFactory"> + <property name="infoboxFactories"> + <map> + <entry key="Certificates" value-ref="certificatesInfoboxFactory" /> + <entry key="IdentityLink" value-ref="identityLinkInfoboxFactory" /> + <entry key="CardChannel" value-ref="cardChannelInfoboxFactory" /> + <entry key="SV-Personendaten" value-ref="svPersonendatenInfoboxFactory" /> + </map> + </property> + </bean> + + <bean id="nullOperationCommandFactory" + class="at.gv.egiz.bku.slcommands.impl.NullOperationCommandFactory" + parent="abstractCommandFactory" /> + <bean id="nullOperationRequest" class="javax.xml.namespace.QName"> + <constructor-arg + value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" /> + <constructor-arg value="NullOperationRequest" /> + </bean> + <bean id="infoboxReadCommandFactory" + class="at.gv.egiz.bku.slcommands.impl.InfoboxReadCommandFactory" + parent="abstractCommandFactory"> + <property name="infoboxFactory" ref="infoboxFactory" /> + </bean> + <bean id="infoboxReadRequest" class="javax.xml.namespace.QName"> + <constructor-arg + value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" /> + <constructor-arg value="InfoboxReadRequest" /> + </bean> + <bean id="infoboxUpdateCommandFactory" + class="at.gv.egiz.bku.slcommands.impl.InfoboxUpdateCommandFactory" + parent="abstractCommandFactory"> + <property name="infoboxFactory" ref="infoboxFactory" /> + </bean> + <bean id="infoboxUpdateRequest" class="javax.xml.namespace.QName"> + <constructor-arg + value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" /> + <constructor-arg value="InfoboxUpdateRequest" /> + </bean> + <bean id="createXMLSignatureCommandFactory" + class="at.gv.egiz.bku.slcommands.impl.CreateXMLSignatureCommandFactory" + parent="abstractCommandFactory" /> + <bean id="createXMLSignatureRequest" class="javax.xml.namespace.QName"> + <constructor-arg + value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" /> + <constructor-arg value="CreateXMLSignatureRequest" /> + </bean> + <bean id="getStatusCommandFactory" class="at.gv.egiz.bku.slcommands.impl.GetStatusCommandFactory" + parent="abstractCommandFactory" /> + <bean id="getStatusRequest" class="javax.xml.namespace.QName"> + <constructor-arg + value="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" /> + <constructor-arg value="GetStatusRequest" /> + </bean> + + <bean id="slCommandFactory" class="at.gv.egiz.bku.slcommands.SLCommandFactory" + factory-method="getInstance"> + <property name="concreteFactories"> + <map> + <entry key-ref="nullOperationRequest" value-ref="nullOperationCommandFactory" /> + <entry key-ref="infoboxReadRequest" value-ref="infoboxReadCommandFactory" /> + <entry key-ref="infoboxUpdateRequest" value-ref="infoboxUpdateCommandFactory" /> + <entry key-ref="createXMLSignatureRequest" value-ref="createXMLSignatureCommandFactory" /> + <entry key-ref="getStatusRequest" value-ref="getStatusCommandFactory" /> + </map> + </property> + <!-- + The following properties may be used to introduce additional XML + schemas and binding classes to the command factory. + --> + <!-- + If property jaxbContextPackageNames is not set the default JAXBContext + is created with the package names given below. + --> + <!-- + <property name="jaxbContextPackageNames"> + <list> + <value>at.buergerkarte.namespaces.securitylayer._1</value> + <value>org.w3._2000._09.xmldsig_</value> + <value>at.buergerkarte.namespaces.cardchannel</value> + <value>at.buergerkarte.namespaces.securitylayer._20020225_</value> + <value>at.buergerkarte.namespaces.securitylayer._20020831_</value> + </list> + </property> + --> + <!-- + If property schemaUrls is not set the default schema is created from + the URLs listed below. + --> + <!-- + <property name="schemaUrls"> + <list> + <value>classpath:at/gv/egiz/bku/slschema/xml.xsd</value> + <value>classpath:at/gv/egiz/bku/slschema/xmldsig-core-schema.xsd</value> + <value>classpath:at/gv/egiz/bku/slschema/Core-1.2.xsd</value> + <value>classpath:at/gv/egiz/bku/slschema/Core.20020225.xsd</value> + <value>classpath:at/gv/egiz/bku/slschema/Core.20020831.xsd</value> + </list> + </property> + --> + </bean> + + <!-- STAL factory --> + <bean id="stalFactory" class="at.gv.egiz.stal.service.impl.RequestBrokerSTALFactory" + scope="singleton"> + <property name="configuration" ref="configuration" /> + </bean> + + <!-- binding processor factories --> + <bean id="httpBindingProcessorFactory" class="at.gv.egiz.bku.binding.HTTPBindingProcessorFactory"> + <property name="configuration" ref="configuration" /> + <property name="urlDereferencer" ref="urlDereferencer" /> + <property name="sslSocketFactory" ref="sslSocketFactory" /> + <property name="hostnameVerifier" ref="hostnameVerifier" /> + <property name="slCommandFactory" ref="slCommandFactory" /> + </bean> + <bean id="samlBindingProcessorFactory" class="at.gv.egiz.mocca.id.SAMLBindingProcessorFactory"> + <property name="configuration" ref="configuration" /> + <property name="slCommandFactory" ref="slCommandFactory" /> + <property name="urlDereferencer" ref="urlDereferencer" /> + </bean> + + <!-- binding processor manager --> + <bean id="bindingProcessorManager" class="at.gv.egiz.bku.binding.BindingProcessorManagerImpl" + scope="singleton"> + <property name="stalFactory" ref="stalFactory" /> + <property name="slCommandInvoker" ref="slCommandInvoker" /> + <property name="factories"> + <list> + <ref bean="httpBindingProcessorFactory"/> + <ref bean="samlBindingProcessorFactory"/> + </list> + </property> + </bean> + + <bean id="attributeExporter" + class="org.springframework.web.context.support.ServletContextAttributeExporter"> + <property name="attributes"> + <map> + <entry key="bindingProcessorManager" value-ref="bindingProcessorManager"/> + </map> + </property> + </bean> + + <!-- Shutdown Event handler --> + <bean id="shutdownHandler" class="at.gv.egiz.bku.spring.ShutdownHandler"> + <property name="bindingProcessorManager" ref="bindingProcessorManager" /> + </bean> + + <!-- do not launch MBeanServer by default + | (the contextPathFactoryBean requires Servlet 2.5) + <bean + class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> + <property name="properties"> + <map> + <entry key="contextPath"> + <bean class="at.gv.egiz.bku.online.spring.ServletContextPathFactoryBean"/> + </entry> + </map> + </property> + </bean> + + <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"> + <property name="locateExistingServerIfPossible" value="true" /> + </bean> + + <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"> + <property name="server" ref="mbeanServer"/> + <property name="beans"> + <map> + <entry + key="at.gv.egiz.mocca:type=bindingProcessorManager,contextPath=${contextPath},name=HTTP" + value-ref="bindingProcessorManager" /> + <entry + key="at.gv.egiz.mocca:type=stalFactory,contextPath=${contextPath},name=RequestBrocker" + value-ref="stalFactory" /> + <entry + key="at.gv.egiz.mocca:type=slCommandInvoker,contextPath=${contextPath},name=CommandInvoker" + value-ref="slCommandInvoker" /> + </map> + </property> + </bean> + --> + + </beans>
\ No newline at end of file |