You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2006/11/30 20:19:37 UTC

svn commit: r481043 [2/2] - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/message/ rt/bindings/http/src/test/java/org/apache/cxf/binding/http/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/ rt/bindings/soap/src/main/java/org/ap...

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java Thu Nov 30 11:19:29 2006
@@ -41,6 +41,7 @@
 import org.apache.cxf.BusException;
 import org.apache.cxf.bus.cxf.CXFBusFactory;
 import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.service.model.EndpointInfo;
@@ -105,8 +106,11 @@
             throw new RuntimeException("Could not find resource " + message);
         }
         
-        copy(is, os);
+        IOUtils.copy(is, os);
 
+        is.close();
+        os.close();
+        
         byte[] bs = obs.getResponseStream().toByteArray();
         
         return bs;
@@ -125,24 +129,7 @@
                                             + new String(bs));
         }
     }
-   
-    protected void copy(final InputStream input, final OutputStream output)
-        throws IOException {
-        int bufferSize = 1024;
-        try {
-            final byte[] buffer = new byte[bufferSize];
 
-            int n = input.read(buffer);
-            while (-1 != n) {
-                output.write(buffer, 0, n);
-                n = input.read(buffer);
-            }
-        } finally {
-            input.close();
-            output.close();
-        }
-    }
-    
     /**
      * Assert that the following XPath query selects one or more nodes.
      * 
@@ -214,9 +201,10 @@
         return basedirPath;
     }
     
-    class TestMessageObserver implements MessageObserver {
+    public static class TestMessageObserver implements MessageObserver {
         ByteArrayOutputStream response = new ByteArrayOutputStream();
         boolean written;
+        String contentType;
         
         public ByteArrayOutputStream getResponseStream() throws Exception {
             synchronized (this) {
@@ -227,10 +215,18 @@
             return response;
         }
         
+        public String getResponseContentType() {
+            return contentType;
+        }
 
         public void onMessage(Message message) {
             try {
-                copy(message.getContent(InputStream.class), response);
+                contentType = (String) message.get(Message.CONTENT_TYPE);
+                InputStream is = message.getContent(InputStream.class);
+                IOUtils.copy(is, response);
+                
+                is.close();
+                response.close();
             } catch (IOException e) {
                 e.printStackTrace();
                 fail();

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Thu Nov 30 11:19:29 2006
@@ -41,6 +41,9 @@
 import javax.xml.transform.dom.DOMResult;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import org.xml.sax.SAXException;
 
@@ -205,6 +208,17 @@
                     ns = "";
                 }
 
+                NodeList nodes = d.getDocumentElement().getChildNodes();
+                for (int i = 0; i < nodes.getLength(); i++) {
+                    Node n = nodes.item(i);
+                    if (n instanceof Element) {
+                        Element e = (Element) n;
+                        if (e.getLocalName().equals("import")) {
+                            d.getDocumentElement().removeChild(e);
+                        }
+                    }
+                }
+                
                 // Don't include WS-Addressing bits
                 if ("http://www.w3.org/2005/08/addressing/wsdl".equals(ns)) {
                     continue;

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java Thu Nov 30 11:19:29 2006
@@ -24,9 +24,7 @@
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.ResourceBundle;
-import java.util.Set;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
@@ -51,19 +49,10 @@
 import org.apache.cxf.service.model.MessagePartInfo;
 
 /**
- * JAXBEncoderDecoder
- * 
- * @author apaibir
+ * Utility functions for JAXB.
  */
 public final class JAXBEncoderDecoder {
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JAXBEncoderDecoder.class);
-
-    private static Set<String> filter = new HashSet<String>();
-    
-    static {
-        filter.add("void");
-        filter.add("javax.activation.DataHandler");
-    }
     
     private JAXBEncoderDecoder() {
     }
@@ -194,10 +183,6 @@
                                     Class<?> clazz,
                                     AttachmentUnmarshaller au) {
         Object obj = null;
-        
-        if (clazz != null && filter.contains(clazz.getName())) {
-            clazz = null;
-        }
         
         try {
             Unmarshaller u = createUnmarshaller(context, clazz);

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentMarshaller.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentMarshaller.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentMarshaller.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentMarshaller.java Thu Nov 30 11:19:29 2006
@@ -20,15 +20,16 @@
 package org.apache.cxf.jaxb.attachment;
 
 import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.UUID;
 
 import javax.activation.DataHandler;
 import javax.xml.bind.attachment.AttachmentMarshaller;
 
-import org.apache.cxf.binding.attachment.AttachmentImpl;
-import org.apache.cxf.binding.attachment.AttachmentUtil;
-import org.apache.cxf.binding.attachment.ByteDataSource;
+import org.apache.cxf.attachment.AttachmentImpl;
+import org.apache.cxf.attachment.AttachmentUtil;
+import org.apache.cxf.attachment.ByteDataSource;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Message;
@@ -43,6 +44,9 @@
     public JAXBAttachmentMarshaller(Message messageParam) {
         super();
         this.message = messageParam;
+        if (message.getAttachments() == null) {
+            message.setAttachments(new ArrayList<Attachment>());
+        }
         atts = message.getAttachments();
     }
 

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java Thu Nov 30 11:19:29 2006
@@ -22,18 +22,16 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.logging.Logger;
 
 import javax.activation.DataHandler;
-import javax.mail.MessagingException;
+import javax.activation.DataSource;
 import javax.xml.bind.attachment.AttachmentUnmarshaller;
 
-import org.apache.cxf.binding.attachment.AttachmentDeserializer;
+import org.apache.cxf.attachment.LazyDataSource;
 import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.helpers.HttpHeaderHelper;
+import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.interceptor.Fault;
-import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Message;
 
 public class JAXBAttachmentUnmarshaller extends AttachmentUnmarshaller {
@@ -41,85 +39,41 @@
 
     private Message message;
 
-    private AttachmentDeserializer ad;
-
     public JAXBAttachmentUnmarshaller(Message messageParam) {
         super();
         this.message = messageParam;
-        ad = message.get(AttachmentDeserializer.class);
-        if (ad == null) {
-            throw new Fault(new org.apache.cxf.common.i18n.Message("NO_ATTACHMENT_DESERIALIZER", LOG));
-        }
     }
 
     @Override
     public DataHandler getAttachmentAsDataHandler(String contentId) {
-        return getAttachment(contentId).getDataHandler();
+        return new DataHandler(getAttachmentDataSource(contentId));
     }
 
     @Override
     public byte[] getAttachmentAsByteArray(String contentId) {
-        // TODO Auto-generated method stub
-        Attachment att = getAttachment(contentId);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         try {
-            copy(att.getDataHandler().getInputStream(), bos);
+            InputStream is = getAttachmentDataSource(contentId).getInputStream();
+            IOUtils.copy(is, bos);
+            is.close();
+            bos.close();
         } catch (IOException e) {
             throw new Fault(new org.apache.cxf.common.i18n.Message("ATTACHMENT_READ_ERROR", LOG), e);
         }
         return bos.toByteArray();
     }
 
-    public static void copy(InputStream input, OutputStream output) throws IOException {
-        try {
-            final byte[] buffer = new byte[8096];
-            for (int n = input.read(buffer); -1 != n; n = input.read(buffer)) {
-                output.write(buffer, 0, n);
-            }
-        } finally {
-            output.close();
-            input.close();
-        }
-    }
-
     @Override
     public boolean isXOPPackage() {
-        String contentTypeOfSoapBodyPart;
-        Attachment primaryMimePart = message.getContent(Attachment.class);
-        if (primaryMimePart == null) {
-            return false;
-        } else {
-            contentTypeOfSoapBodyPart = primaryMimePart.getHeader(HttpHeaderHelper
-                    .getHeaderKey(HttpHeaderHelper.CONTENT_TYPE));
-        }
-        if (contentTypeOfSoapBodyPart != null
-                && contentTypeOfSoapBodyPart.indexOf("application/xop+xml") >= 0) {
-
-            if (contentTypeOfSoapBodyPart.indexOf("application/soap+xml") >= 0) {
-                return true;
-            } else if (contentTypeOfSoapBodyPart.indexOf("text/xml") >= 0) {
-                return true;
-            }
-        }
-        return false;
-
+        return Boolean.TRUE.equals(message.getContextualProperty(
+            org.apache.cxf.message.Message.MTOM_ENABLED));
     }
 
-    private Attachment getAttachment(String contentId) {
-        Attachment att = null;
-        try {
-            att = ad.getAttachment(contentId);
-        } catch (MessagingException me) {
-            throw new Fault(new org.apache.cxf.common.i18n.Message("FAILED_GETTING_ATTACHMENT", LOG,
-                    contentId), me);
-        } catch (IOException ioe) {
-            throw new Fault(new org.apache.cxf.common.i18n.Message("FAILED_GETTING_ATTACHMENT", LOG,
-                    contentId), ioe);
-        }
-        if (att == null) {
-            throw new IllegalArgumentException("Attachment " + contentId + " was not found.");
+    private DataSource getAttachmentDataSource(String contentId) {
+        if (contentId.startsWith("cid:")) {
+            contentId = contentId.substring(4);
         }
-        return att;
+        return new LazyDataSource(contentId, message.getAttachments());
     }
 
 }

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java Thu Nov 30 11:19:29 2006
@@ -25,7 +25,6 @@
 
 import org.w3c.dom.Node;
 
-import org.apache.cxf.binding.attachment.AttachmentDeserializer;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.jaxb.JAXBDataReaderFactory;
 import org.apache.cxf.jaxb.JAXBEncoderDecoder;
@@ -46,10 +45,7 @@
     }
     
     public Object read(MessagePartInfo part, Message input) {
-        JAXBAttachmentUnmarshaller au = null;        
-        if (input.get(AttachmentDeserializer.class) != null) {
-            au = new JAXBAttachmentUnmarshaller(input);            
-        }
+        JAXBAttachmentUnmarshaller au = new JAXBAttachmentUnmarshaller(input);
         Object source = null;
         XMLStreamReader xsr = (XMLStreamReader)input.getContent(XMLStreamReader.class);
         if (xsr != null) {

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java Thu Nov 30 11:19:29 2006
@@ -155,7 +155,10 @@
     
     @Override
     public String getBeanName() {
-        return endpointInfo.getName().toString() + ".http-conduit";
+        if (endpointInfo.getName() != null) {
+            return endpointInfo.getName().toString() + ".http-conduit";
+        }
+        return null;
     }
     
     /**
@@ -184,13 +187,6 @@
         connection.setReadTimeout((int)getClient().getReceiveTimeout());
         connection.setUseCaches(false);
         
-        if (null != message.get(Message.CONTENT_TYPE)) {
-            connection.setRequestProperty(HttpHeaderHelper.CONTENT_TYPE, 
-                    (String)message.get(Message.CONTENT_TYPE));
-        } else {
-            connection.setRequestProperty(HttpHeaderHelper.CONTENT_TYPE, "text/xml");
-        }
-        
         if (connection instanceof HttpURLConnection) {
             String httpRequestMethod = (String)message.get(Message.HTTP_REQUEST_METHOD);
             HttpURLConnection hc = (HttpURLConnection)connection;           
@@ -337,9 +333,16 @@
      * @throws IOException
      */
     protected void flushHeaders(Message message) throws IOException {
+        URLConnection connection = (URLConnection)message.get(HTTP_CONNECTION);
+        String ct = (String) message.get(Message.CONTENT_TYPE);
+        if (null != ct) {
+            connection.setRequestProperty(HttpHeaderHelper.CONTENT_TYPE, ct);
+        } else {
+            connection.setRequestProperty(HttpHeaderHelper.CONTENT_TYPE, "text/xml");
+        }
+        
         Map<String, List<String>> headers = 
             CastUtils.cast((Map<?, ?>)message.get(Message.PROTOCOL_HEADERS));
-        URLConnection connection = (URLConnection)message.get(HTTP_CONNECTION);
         if (null != headers) {
             for (String header : headers.keySet()) {
                 List<String> headerList = headers.get(header);
@@ -474,6 +477,8 @@
             }
             inMessage.put(Message.PROTOCOL_HEADERS, headers);
             inMessage.put(Message.RESPONSE_CODE, responseCode);
+            inMessage.put(Message.CONTENT_TYPE, connection.getHeaderField(HttpHeaderHelper.CONTENT_TYPE));
+
             if (connection instanceof HttpURLConnection) {
                 HttpURLConnection hc = (HttpURLConnection)connection;
                 in = hc.getErrorStream();
@@ -602,6 +607,8 @@
             // REVISIT: how to get response headers?
             //inMessage.put(Message.PROTOCOL_HEADERS, req.getXXX());
             setHeaders(inMessage);
+            inMessage.put(Message.ENCODING, resp.getCharacterEncoding());
+            inMessage.put(Message.CONTENT_TYPE, resp.getContentType());
             inMessage.put(Message.RESPONSE_CODE, HttpURLConnection.HTTP_OK);
             InputStream is = new WrapperInputStream(responseStream, req, resp);
             inMessage.setContent(InputStream.class, is);

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java Thu Nov 30 11:19:29 2006
@@ -222,6 +222,8 @@
      * @param headers the current set of headers
      */
     protected void copyResponseHeaders(Message message, HttpResponse response) {
+        response.setContentType((String) message.get(Message.CONTENT_TYPE));
+
         Map<?, ?> headers = (Map<?, ?>)message.get(Message.PROTOCOL_HEADERS);
         if (null != headers) {
             for (Iterator<?> iter = headers.keySet().iterator(); iter.hasNext();) {

Modified: incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java (original)
+++ incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalConduit.java Thu Nov 30 11:19:29 2006
@@ -24,7 +24,7 @@
 import java.io.OutputStream;
 import java.io.PipedInputStream;
 
-import org.apache.cxf.binding.attachment.CachedOutputStream;
+import org.apache.cxf.attachment.CachedOutputStream;
 import org.apache.cxf.io.AbstractCachedOutputStream;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java Thu Nov 30 11:19:29 2006
@@ -22,11 +22,7 @@
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.UndeclaredThrowableException;
-import java.util.List;
 
-// import javax.activation.DataHandler;
-// import javax.activation.DataSource;
-// import javax.mail.util.ByteArrayDataSource;
 import javax.xml.namespace.QName;
 import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Holder;
@@ -37,12 +33,9 @@
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactoryHelper;
-import org.apache.cxf.binding.soap.interceptor.AttachmentOutInterceptor;
-import org.apache.cxf.binding.soap.interceptor.MultipartMessageInterceptor;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.ClientImpl;
 import org.apache.cxf.endpoint.ServerImpl;
-import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.jaxws.EndpointInvocationHandler;
 import org.apache.cxf.jaxws.JAXWSMethodInvoker;
 import org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl;
@@ -83,8 +76,10 @@
                 org.apache.cxf.endpoint.EndpointImpl endpoint = new JaxWsEndpointImpl(bus, service, ei);
                 SOAPBinding jaxWsSoapBinding = new SOAPBindingImpl(ei.getBinding()); 
                 jaxWsSoapBinding.setMTOMEnabled(true);
-                modifyBindingInterceptors(endpoint.getBinding().getInInterceptors(), endpoint.getBinding()
-                        .getOutInterceptors());
+
+                endpoint.getInInterceptors().add(new TestMultipartMessageInterceptor());
+                endpoint.getOutInterceptors().add(new TestAttachmentOutInterceptor());
+                
                 endpoint.getEndpointInfo().setAddress(address);
                 MessageObserver observer = new ChainInitiationObserver(endpoint, bus);
                 ServerImpl server = new ServerImpl(bus, endpoint, observer);
@@ -177,40 +172,14 @@
         JaxWsEndpointImpl jaxwsEndpoint = new JaxWsEndpointImpl(bus, service, ei);
         SOAPBinding jaxWsSoapBinding = new SOAPBindingImpl(ei.getBinding());
         jaxWsSoapBinding.setMTOMEnabled(true);
-        modifyBindingInterceptors(jaxwsEndpoint.getBinding().getInInterceptors(), jaxwsEndpoint.getBinding()
-                .getOutInterceptors());
+        
+        jaxwsEndpoint.getBinding().getInInterceptors().add(new TestMultipartMessageInterceptor());
+        jaxwsEndpoint.getBinding().getOutInterceptors().add(new TestAttachmentOutInterceptor());
+        
         Client client = new ClientImpl(bus, jaxwsEndpoint);
         InvocationHandler ih = new EndpointInvocationHandler(client, jaxwsEndpoint.getJaxwsBinding());
         Object obj = Proxy.newProxyInstance(serviceEndpointInterface.getClassLoader(), new Class[] {
             serviceEndpointInterface, BindingProvider.class }, ih);
         return serviceEndpointInterface.cast(obj);
     }
-
-    private static void modifyBindingInterceptors(List<Interceptor> in, List<Interceptor> out) {
-        Interceptor inRemoved = null;
-        Interceptor outRemoved = null;
-        for (Interceptor i : in) {
-            if (i instanceof MultipartMessageInterceptor) {
-                inRemoved = i;
-            }
-        }
-        if (inRemoved != null) {
-            in.add(new TestMultipartMessageInterceptor());
-            in.remove(inRemoved);
-        } else {
-            fail("hasn't found MultipartMessageInterceptor in soap binding");
-        }
-        for (Interceptor o : out) {
-            if (o instanceof AttachmentOutInterceptor) {
-                outRemoved = o;
-            }
-        }
-        if (outRemoved != null) {
-            out.add(new TestAttachmentOutInterceptor());
-            out.remove(outRemoved);
-        } else {
-            fail("hasn't found AttachmentOutInterceptor in soap binding");
-        }
-    }
-
 }

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Data.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Data.java?view=auto&rev=481043
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Data.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Data.java Thu Nov 30 11:19:29 2006
@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.systest.mtom;
+
+import javax.activation.DataHandler;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlMimeType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "Data", namespace = "http://mtom.systest.cxf.apache.org")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Data {
+
+    @XmlElement(name = "someData", namespace = "http://mtom.systest.cxf.apache.org")
+    @XmlMimeType("application/octet-stream")
+    protected DataHandler someData;
+
+    public DataHandler getSomeData() {
+        return someData;
+    }
+
+    public void setSomeData(DataHandler someData) {
+        this.someData = someData;
+    }
+
+}

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Data.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Data.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Data.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/EchoService.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/EchoService.java?view=auto&rev=481043
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/EchoService.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/EchoService.java Thu Nov 30 11:19:29 2006
@@ -0,0 +1,28 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.systest.mtom;
+
+import javax.jws.WebService;
+
+@WebService
+public class EchoService {
+    public Data echo(Data input) {
+        return input;
+    }
+}

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/EchoService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/EchoService.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/EchoService.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java?view=auto&rev=481043
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java Thu Nov 30 11:19:29 2006
@@ -0,0 +1,111 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.systest.mtom;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusException;
+import org.apache.cxf.BusFactoryHelper;
+import org.apache.cxf.attachment.AttachmentDeserializer;
+import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
+import org.apache.cxf.message.Attachment;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.test.AbstractCXFTest;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.transport.ConduitInitiator;
+import org.apache.cxf.transport.ConduitInitiatorManager;
+
+public class MtomServerTest extends AbstractCXFTest {
+    public void testMtomRequest() throws Exception {
+        JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
+        sf.setServiceClass(EchoService.class);
+        sf.setBus(getBus());
+        String address = "http://localhost:9036/EchoService";
+        sf.setAddress(address);
+        Map<String, Object> props = new HashMap<String, Object>();
+        props.put(Message.MTOM_ENABLED, Boolean.TRUE);
+        sf.setProperties(props);
+        sf.create();
+
+        EndpointInfo ei = new EndpointInfo(null, "http://schemas.xmlsoap.org/wsdl/http");
+        ei.setAddress("http://localhost:9036/EchoService");
+
+        ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
+        ConduitInitiator conduitInit = conduitMgr.getConduitInitiator("http://schemas.xmlsoap.org/soap/http");
+        Conduit conduit = conduitInit.getConduit(ei);
+
+        TestMessageObserver obs = new TestMessageObserver();
+        conduit.setMessageObserver(obs);
+
+        Message m = new MessageImpl();
+        String ct = "multipart/related; type=\"application/xop+xml\"; "
+                    + "start=\"<so...@xfire.codehaus.org>\"; "
+                    + "start-info=\"text/xml; charset=utf-8\"; "
+                    + "boundary=\"----=_Part_4_701508.1145579811786\"";
+
+        m.put(Message.CONTENT_TYPE, ct);
+        conduit.send(m);
+
+        OutputStream os = m.getContent(OutputStream.class);
+        InputStream is = getResourceAsStream("request");
+        if (is == null) {
+            throw new RuntimeException("Could not find resource " + "request");
+        }
+
+        IOUtils.copy(is, os);
+
+        os.flush();
+        is.close();
+        os.close();
+
+        byte[] res = obs.getResponseStream().toByteArray();
+
+        MessageImpl resMsg = new MessageImpl();
+        resMsg.setContent(InputStream.class, new ByteArrayInputStream(res));
+        resMsg.put(Message.CONTENT_TYPE, obs.getResponseContentType());
+        AttachmentDeserializer deserializer = new AttachmentDeserializer(resMsg);
+        deserializer.initializeAttachments();
+
+        Collection<Attachment> attachments = resMsg.getAttachments();
+        assertNotNull(attachments);
+        assertEquals(1, attachments.size());
+
+        Attachment inAtt = attachments.iterator().next();
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        IOUtils.copy(inAtt.getDataHandler().getInputStream(), out);
+        out.close();
+        assertEquals(37448, out.size());
+    }
+
+    @Override
+    protected Bus createBus() throws BusException {
+        return BusFactoryHelper.newInstance().getDefaultBus();
+    }
+
+}

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestAttachmentOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestAttachmentOutInterceptor.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestAttachmentOutInterceptor.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestAttachmentOutInterceptor.java Thu Nov 30 11:19:29 2006
@@ -21,15 +21,21 @@
 
 import junit.framework.TestCase;
 
-import org.apache.cxf.binding.soap.SoapMessage;
-import org.apache.cxf.binding.soap.interceptor.AttachmentOutInterceptor;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Attachment;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
 
-public class TestAttachmentOutInterceptor extends AttachmentOutInterceptor {
+public class TestAttachmentOutInterceptor extends AbstractPhaseInterceptor<Message> {
 
-    public void handleMessage(SoapMessage message) throws Fault {
-        super.handleMessage(message);
+    
+    public TestAttachmentOutInterceptor() {
+        super();
+        setPhase(Phase.SEND);
+    }
+
+    public void handleMessage(Message message) throws Fault {
         TestCase.assertEquals("check attachment count", message.getAttachments().size(), 1);
         Attachment att = message.getAttachments().iterator().next();
         TestCase.assertNotNull("Attachment is null", att);

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestMultipartMessageInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestMultipartMessageInterceptor.java?view=diff&rev=481043&r1=481042&r2=481043
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestMultipartMessageInterceptor.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/TestMultipartMessageInterceptor.java Thu Nov 30 11:19:29 2006
@@ -21,16 +21,20 @@
 
 import junit.framework.TestCase;
 
-import org.apache.cxf.binding.attachment.AttachmentDeserializer;
-import org.apache.cxf.binding.soap.SoapMessage;
-import org.apache.cxf.binding.soap.interceptor.MultipartMessageInterceptor;
 import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
 
-public class TestMultipartMessageInterceptor extends MultipartMessageInterceptor {
+public class TestMultipartMessageInterceptor extends AbstractPhaseInterceptor<Message> {
 
-    public void handleMessage(SoapMessage message) throws Fault {
-        super.handleMessage(message);
-        AttachmentDeserializer ad = message.get(AttachmentDeserializer.class);
-        TestCase.assertNotNull("Not MIME Message received, Attachment Deserializer hasn't been created", ad);
+    public TestMultipartMessageInterceptor() {
+        super();
+        setPhase(Phase.INVOKE);
+    }
+
+    public void handleMessage(Message message) throws Fault {
+        TestCase.assertNotNull(message.getAttachments());
+        TestCase.assertEquals(1, message.getAttachments().size());
     }
 }

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request?view=auto&rev=481043
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request Thu Nov 30 11:19:29 2006
@@ -0,0 +1,505 @@
+
+------=_Part_4_701508.1145579811786
+Content-Type: text/xml
+Content-Transfer-Encoding: binary
+Content-ID: <echo.xml>
+
+<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
+ <env:Body>
+  <m:echo xmlns:m="http://mtom.systest.cxf.apache.org">
+    <m:Data>
+      <m:someData><xop:Include 
+        xmlns:xop='http://www.w3.org/2004/08/xop/include' 
+        href='cid:xfire_logo.jpg'/>
+      </m:someData>
+    </m:Data>
+  </m:echo>
+ </env:Body>
+</env:Envelope>
+------=_Part_4_701508.1145579811786
+Content-Type: image/jpeg
+Content-Transfer-Encoding: base64
+Content-ID: <xfire_logo.jpg>
+
+/9j/4AAQSkZJRgABAgEBLAEsAAD/4Q1dRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA
+AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodp
+AAQAAAABAAAAnAAAAMgAAAEsAAAAAQAAASwAAAABQWRvYmUgUGhvdG9zaG9wIDcuMAAyMDA0OjA5
+OjE2IDExOjQyOjQwAAAAAAOgAQADAAAAAf//AACgAgAEAAAAAQAAAL6gAwAEAAAAAQAAAEkAAAAA
+AAAABgEDAAMAAAABAAYAAAEaAAUAAAABAAABFgEbAAUAAAABAAABHgEoAAMAAAABAAIAAAIBAAQA
+AAABAAABJgICAAQAAAABAAAMLwAAAAAAAABIAAAAAQAAAEgAAAAB/9j/4AAQSkZJRgABAgEASABI
+AAD/7QAMQWRvYmVfQ00AAv/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwP
+FRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQO
+Dg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEI
+ADEAgAMBIgACEQEDEQH/3QAEAAj/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEF
+AQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMi
+cYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj
+80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcG
+BTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kST
+VKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/
+2gAMAwEAAhEDEQA/AK316zfrbgdevrys7Jrxbi5+D6NjqqnUT7WBtBqa+3H3+lker+m+hZ/NW0rr
+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
+ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPgo8ZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBh
+Z2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5w
+cmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFu
+YWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tl
+eT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1h
+dC5QTUhvcml6b250YWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20u
+YXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJp
+bnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9k
+RGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwNC0wOS0xNlQxNzoxODowOVo8L2RhdGU+CgkJCQk8a2V5
+PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9p
+bnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnBy
+aW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBw
+bGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGlu
+Z21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5
+PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VG
+b3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxr
+ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFw
+cGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlj
+a2V0Lm1vZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDQtMDktMTZUMTc6MTg6MDlaPC9kYXRlPgoJ
+CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVn
+ZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5h
+cHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20u
+YXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmlu
+dGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFy
+cmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBh
+Z2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk+CgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20u
+YXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJp
+bnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9k
+RGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwNC0wOS0xNlQxNzoxODowOVo8L2RhdGU+CgkJCQk8a2V5
+PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9p
+bnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnBy
+aW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFJlczwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBw
+bGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGlu
+Z21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5
+PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VG
+b3JtYXQuUE1WZXJ0aWNhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNv
+bS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5w
+cmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5t
+b2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA0LTA5LTE2VDE3OjE4OjA5WjwvZGF0ZT4KCQkJCTxr
+ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8
+L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUu
+cHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5j
+b20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5w
+cmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRl
+bUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
+LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJ
+CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNv
+bS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
+LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA0LTA5LTE2VDE3OjE4OjA5WjwvZGF0
+ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxp
+bnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5j
+b20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk+Cgk8ZGljdD4K
+CQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5
+PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJ
+CQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJPGtleT5jb20u
+YXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4K
+CQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwv
+a2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8
+L3JlYWw+CgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw+NTc2PC9yZWFsPgoJCQkJ
+CTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJ
+CQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJCTxrZXk+
+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwNC0wOS0x
+NlQxODo0MTowN1o8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRl
+RmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJy
+YXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3Rl
+ZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu
+Y3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmlu
+Zz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJy
+YXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRq
+dXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4K
+CQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw+CgkJCQkJCTxyZWFs
+PjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
+dC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0
+cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJ
+CTxkYXRlPjIwMDQtMDktMTZUMTg6NDE6MDdaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnBy
+aW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJ
+PC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBl
+ckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQu
+dGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNj
+cmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9r
+ZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVy
+SW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+bmEtbGV0dGVyPC9zdHJpbmc+CgkJ
+CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+
+Y29tLmFwcGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBs
+ZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDAtMDctMjhUMjI6NTc6
+MDRaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tl
+eT4KCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwv
+ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJl
+Y3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8
+L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJ
+CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4K
+CQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0
+ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJ
+CQk8cmVhbD4wLjA8L3JlYWw+CgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw+NTc2
+PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNs
+aWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5n
+PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRh
+dGU+MjAwNC0wOS0xNlQxNzoxODowOVo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu
+dGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2Rp
+Y3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5m
+by5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUu
+cHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0u
+UG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFy
+cmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
+LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJ
+CTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8
+L3JlYWw+CgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29t
+LmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5w
+cmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu
+bW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDQtMDktMTZUMTc6MTg6MDlaPC9kYXRlPgoJCQkJ
+CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdl
+cj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNv
+bS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJ
+CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29t
+LmFwcGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJp
+bnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5
+PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0
+cmluZz5MZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xp
+ZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3Ry
+aW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJ
+PGRhdGU+MjAwMC0wNy0yOFQyMjo1NzowNFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp
+bnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8
+L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
+dC5BUElWZXJzaW9uPC9rZXk+CgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFw
+cGxlLnByaW50LnRpY2tldC5wcml2YXRlTG9jazwva2V5PgoJCTxmYWxzZS8+CgkJPGtleT5jb20u
+YXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5Q
+YXBlckluZm9UaWNrZXQ8L3N0cmluZz4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
+Y2tldC5BUElWZXJzaW9uPC9rZXk+Cgk8c3RyaW5nPjAwLjIwPC9zdHJpbmc+Cgk8a2V5PmNvbS5h
+cHBsZS5wcmludC50aWNrZXQucHJpdmF0ZUxvY2s8L2tleT4KCTxmYWxzZS8+Cgk8a2V5PmNvbS5h
+cHBsZS5wcmludC50aWNrZXQudHlwZTwva2V5PgoJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFn
+ZUZvcm1hdFRpY2tldDwvc3RyaW5nPgo8L2RpY3Q+CjwvcGxpc3Q+CgA4QklNA+kAAAAAAHgAAwAA
+AEgASAAAAAAC3gJA/+7/7gMGAlIDZwUoA/wAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMA
+AAABf/8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAA4QklNA+0AAAAAABABLAAAAAEAAQEsAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4
+QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklN
+BAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYA
+AAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAA
+AAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD/////////////////
+////////////A+gAAAAA/////////////////////////////wPoAAAAAP//////////////////
+//////////8D6AAAOEJJTQQAAAAAAAACAAA4QklNBAIAAAAAAAQAAAAAOEJJTQQIAAAAAAAQAAAA
+AQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAAz8AAAAGAAAAAAAAAAAAAABJ
+AAAAvgAAAAUAeABmAGkAcgBlAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAC+AAAA
+SQAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIA
+AAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxv
+bmcAAAAAAAAAAEJ0b21sb25nAAAASQAAAABSZ2h0bG9uZwAAAL4AAAAGc2xpY2VzVmxMcwAAAAFP
+YmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcA
+AAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlw
+ZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAA
+AAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAEkAAAAAUmdo
+dGxvbmcAAAC+AAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQA
+AAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxU
+ZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZh
+dWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdD
+b2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9u
+ZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3Jp
+Z2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQRAAAAAAABAQA4QklNBBQAAAAAAAQAAAAEOEJJTQQMAAAA
+AAxLAAAAAQAAAIAAAAAxAAABgAAASYAAAAwvABgAAf/Y/+AAEEpGSUYAAQIBAEgASAAA/+0ADEFk
+b2JlX0NNAAL/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMY
+EQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4O
+FBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAxAIADASIA
+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
+FWPJPHIThIxkOocM/VWjI6a3D6hlX5dzXmxuWXRYwnYDXQbPW20/omfo7XX/AKT9N/P+nYj4PS+q
+4t9Zt6tblYtYj0LKqtzht2M9TJa31nbfp7/pvWqkmjDAEEAgitQZa8P737/+GvPM5ZAxkRISs1KM
+JcPH83t3H9X/ANTf/9L1VJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfq
+pJfKqSSn6qSXyqkkp//ZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0
+AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIAA3AC4AMAAAAAEA
+OEJJTQQGAAAAAAAHAAUAAAABAQD/4RJIaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hw
+YWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pgo8P2Fkb2Jl
+LXhhcC1maWx0ZXJzIGVzYz0iQ1IiPz4KPHg6eGFwbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRh
+LycgeDp4YXB0az0nWE1QIHRvb2xraXQgMi44LjItMzMsIGZyYW1ld29yayAxLjUnPgo8cmRmOlJE
+RiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMn
+IHhtbG5zOmlYPSdodHRwOi8vbnMuYWRvYmUuY29tL2lYLzEuMC8nPgoKIDxyZGY6RGVzY3JpcHRp
+b24gYWJvdXQ9J3V1aWQ6OTg0ZjA4YjQtMDk2Ny0xMWQ5LWIyNTItYmUzNTU5MTY0ZGVjJwogIHht
+bG5zOnhhcE1NPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vJz4KICA8eGFwTU06RG9j
+dW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6OTg0ZjA4YjItMDk2Ny0xMWQ5LWIyNTItYmUz
+NTU5MTY0ZGVjPC94YXBNTTpEb2N1bWVudElEPgogPC9yZGY6RGVzY3JpcHRpb24+Cgo8L3JkZjpS
+REY+CjwveDp4YXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAKPD94cGFja2V0IGVuZD0ndyc/Pv/uAA5BZG9iZQBkQAAAAAH/2wCEAAQDAwMDAwQD
+AwQGBAMEBgcFBAQFBwgGBgcGBggKCAkJCQkICgoMDAwMDAoMDAwMDAwMDAwMDAwMDAwMDAwMDAwB
+BAUFCAcIDwoKDxQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwM
+DAwMDAwMDP/AABEIAEkAvgMBEQACEQEDEQH/3QAEABj/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMC
+BgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJzAQID
+EQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYXVGR0
+w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eHl6e3
+x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUFBAUG
+BAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXi
+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
+FX//2Q==
+------=_Part_4_701508.1145579811786--

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request
------------------------------------------------------------------------------
    svn:executable = *