Author: jmarino
Date: Tue Oct 31 08:31:23 2006
New Revision: 469543

URL: http://svn.apache.org/viewvc?view=rev&rev=469543
Log:
[PATCH] from Ignacio SimplerCompositeReferenceInvocation6.patch applied

Modified:
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
    
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
    
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
 Tue Oct 31 08:31:23 2006
@@ -19,8 +19,8 @@
 package org.apache.tuscany.core.component;
 
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
-import java.util.Stack;
 
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.WorkContext;
@@ -87,15 +87,15 @@
         map.put(CORRELATION_ID, correlationId);
     }
 
-    public Stack<Object> getCurrentCallbackRoutingChain() {
+    public LinkedList<Object> getCurrentCallbackRoutingChain() {
         Map<Object, Object> map = workContext.get();
         if (map == null) {
             return null;
         }
-        return (Stack<Object>)map.get(CALLBACK_ROUTING_CHAIN);
+        return (LinkedList<Object>)map.get(CALLBACK_ROUTING_CHAIN);
     }
     
-    public void setCurrentCallbackRoutingChain(Stack<Object> 
callbackRoutingChain) {
+    public void setCurrentCallbackRoutingChain(LinkedList<Object> 
callbackRoutingChain) {
         Map<Object, Object> map = workContext.get();
         if (map == null) {
             map = new HashMap<Object, Object>();

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
 Tue Oct 31 08:31:23 2006
@@ -18,7 +18,7 @@
  */
 package org.apache.tuscany.core.wire;
 
-import java.util.Stack;
+import java.util.LinkedList;
 
 import org.osoa.sca.CompositeContext;
 import org.osoa.sca.CurrentCompositeContext;
@@ -152,11 +152,11 @@
             throw new UnsupportedOperationException();
         }
         
-        public Stack<Object> getCallbackRoutingChain() {
+        public LinkedList<Object> getCallbackRoutingChain() {
             return null;
         }
         
-        public void setCallbackRoutingChain(Stack<Object> fromAddresses) {
+        public void setCallbackRoutingChain(LinkedList<Object> fromAddresses) {
             throw new UnsupportedOperationException();
         }
 

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
 Tue Oct 31 08:31:23 2006
@@ -20,8 +20,8 @@
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
+import java.util.LinkedList;
 import java.util.Map;
-import java.util.Stack;
 
 import org.apache.tuscany.spi.component.WorkContext;
 import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findOperation;
@@ -55,12 +55,12 @@
     public Object invoke(Object proxy, Method method, Object[] args) throws 
Throwable {
         Object correlationId = context.getCurrentCorrelationId();
         context.setCurrentCorrelationId(null);
-        Stack<Object> callbackRoutingChain = 
context.getCurrentCallbackRoutingChain();
+        LinkedList<Object> callbackRoutingChain = 
context.getCurrentCallbackRoutingChain();
         context.setCurrentCallbackRoutingChain(null);
         if (callbackRoutingChain == null) {
             throw new AssertionError("Missing stack of from addresses");
         }
-        Object targetAddress = callbackRoutingChain.pop();
+        Object targetAddress = callbackRoutingChain.removeFirst();
         if (targetAddress == null) {
             throw new AssertionError("Popped a null from address from stack");
         }

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
 Tue Oct 31 08:31:23 2006
@@ -18,7 +18,7 @@
  */
 package org.apache.tuscany.spi.component;
 
-import java.util.Stack;
+import java.util.LinkedList;
 
 /**
  * Implementations track information associated with a request as it is 
processed by the runtime
@@ -36,14 +36,14 @@
     void setCurrentCorrelationId(Object correlationId);
     
     /**
-     * Returns the current stack of SCAObject addresses
+     * Returns the current chain of SCAObject addresses
      */
-    Stack<Object> getCurrentCallbackRoutingChain();
+    LinkedList<Object> getCurrentCallbackRoutingChain();
     
     /**
      * Sets the current stack of SCAObject addresses
      */
-    void setCurrentCallbackRoutingChain(Stack<Object> callbackRoutingChain);
+    void setCurrentCallbackRoutingChain(LinkedList<Object> 
callbackRoutingChain);
 
     /**
      * Returns the composite where a remote request came in

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
 Tue Oct 31 08:31:23 2006
@@ -19,7 +19,7 @@
 package org.apache.tuscany.spi.extension;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.Stack;
+import java.util.LinkedList;
 
 import org.apache.tuscany.spi.wire.InvocationRuntimeException;
 import org.apache.tuscany.spi.wire.Message;
@@ -57,7 +57,7 @@
                 workContext.setCurrentMessageId(null);
                 workContext.setCurrentCorrelationId(messageId);
             }
-            Stack<Object> callbackRoutingChain = msg.getCallbackRoutingChain();
+            LinkedList<Object> callbackRoutingChain = 
msg.getCallbackRoutingChain();
             if (callbackRoutingChain != null) {
                 
workContext.setCurrentCallbackRoutingChain(callbackRoutingChain);
             }

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
 Tue Oct 31 08:31:23 2006
@@ -19,7 +19,7 @@
 package org.apache.tuscany.spi.wire;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.Stack;
+import java.util.LinkedList;
 
 
 /**
@@ -34,7 +34,7 @@
                             TargetInvoker invoker,
                             Object[] args,
                             Object correlationId,
-                            Stack<Object> callbackRoutingChain)
+                            LinkedList<Object> callbackRoutingChain)
         throws Throwable {
         Interceptor headInterceptor = chain.getHeadInterceptor();
         if (headInterceptor == null) {

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
 Tue Oct 31 08:31:23 2006
@@ -18,7 +18,7 @@
  */
 package org.apache.tuscany.spi.wire;
 
-import java.util.Stack;
+import java.util.LinkedList;
 
 /**
  * Represents a request, response, or exception flowing through a wire
@@ -57,14 +57,14 @@
     void pushFromAddress(Object fromAddress);
     
     /**
-     * Returns the stack of SCAObject addresses
+     * Returns the chain of SCAObject addresses
      */
-    Stack<Object> getCallbackRoutingChain();
+    LinkedList<Object> getCallbackRoutingChain();
     
     /**
-     * Sets the stack of SCAObject addresses
+     * Sets the chain of SCAObject addresses
      */
-    void setCallbackRoutingChain(Stack<Object> fromAddresses);
+    void setCallbackRoutingChain(LinkedList<Object> fromAddresses);
 
     /**
      * Returns the id of the message

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
 Tue Oct 31 08:31:23 2006
@@ -18,7 +18,7 @@
  */
 package org.apache.tuscany.spi.wire;
 
-import java.util.Stack;
+import java.util.LinkedList;
 
 /**
  * The default implementation of a message flowed through a wire during an 
invocation
@@ -29,7 +29,7 @@
 
     private Object body;
     private TargetInvoker invoker;
-    private Stack<Object> callbackRoutingChain;
+    private LinkedList<Object> callbackRoutingChain;
     private Object messageId;
     private Object correlationId;
     private boolean isFault;
@@ -55,21 +55,21 @@
     }
 
     public Object popFromAddress() {
-        return callbackRoutingChain.pop();
+        return callbackRoutingChain.removeFirst();
     }
 
     public void pushFromAddress(Object fromAddress) {
         if (callbackRoutingChain == null) {
-            callbackRoutingChain = new Stack<Object>();
+            callbackRoutingChain = new LinkedList<Object>();
         }
-        callbackRoutingChain.push(fromAddress);
+        callbackRoutingChain.addFirst(fromAddress);
     }
 
-    public Stack<Object> getCallbackRoutingChain() {
+    public LinkedList<Object> getCallbackRoutingChain() {
         return callbackRoutingChain;
     }
     
-    public void setCallbackRoutingChain(Stack<Object> callbackRoutingChain) {
+    public void setCallbackRoutingChain(LinkedList<Object> 
callbackRoutingChain) {
         this.callbackRoutingChain = callbackRoutingChain;
     }
     

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
 Tue Oct 31 08:31:23 2006
@@ -19,7 +19,7 @@
 package org.apache.tuscany.spi.extension;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.Stack;
+import java.util.LinkedList;
 
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.wire.InboundWire;
@@ -40,7 +40,7 @@
         EasyMock.replay(wire);
         WorkContext context;
         context = EasyMock.createMock(WorkContext.class);
-        context.setCurrentCallbackRoutingChain(EasyMock.isA(Stack.class));
+        context.setCurrentCallbackRoutingChain(EasyMock.isA(LinkedList.class));
         EasyMock.replay(context);
         ExecutionMonitor monitor = 
EasyMock.createNiceMock(ExecutionMonitor.class);
         Target target = EasyMock.createMock(Target.class);

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
 Tue Oct 31 08:31:23 2006
@@ -2,7 +2,7 @@
 
 import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
-import java.util.Stack;
+import java.util.LinkedList;
 
 import junit.framework.TestCase;
 import org.easymock.EasyMock;
@@ -20,7 +20,7 @@
         OutboundInvocationChain chain = 
EasyMock.createMock(OutboundInvocationChain.class);
         EasyMock.expect(chain.getHeadInterceptor()).andReturn(interceptor);
         EasyMock.replay(chain);
-        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, 
null, new Stack<Object>());
+        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, 
null, new LinkedList<Object>());
         assertEquals("response", resp);
     }
 
@@ -31,7 +31,7 @@
         EasyMock.expect(chain.getHeadInterceptor()).andReturn(null);
         EasyMock.expect(chain.getTargetInvoker()).andReturn(invoker);
         EasyMock.replay(chain);
-        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, 
null, new Stack<Object>());
+        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, 
null, new LinkedList<Object>());
         assertEquals("response", resp);
     }
 

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
 Tue Oct 31 08:31:23 2006
@@ -19,7 +19,7 @@
 package org.apache.tuscany.binding.axis2;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.Stack;
+import java.util.LinkedList;
 
 import javax.xml.namespace.QName;
 
@@ -49,7 +49,7 @@
         throw new InvocationTargetException(new 
InvocationRuntimeException("Operation not supported"));
     }
 
-    private Object invokeTarget(final Object payload, Stack<Object> 
callbackRoutingChain) throws InvocationTargetException {
+    private Object invokeTarget(final Object payload, LinkedList<Object> 
callbackRoutingChain) throws InvocationTargetException {
         try {
             Object[] args = (Object[])payload;
             OperationClient operationClient = createOperationClient(args);

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
 Tue Oct 31 08:31:23 2006
@@ -18,8 +18,8 @@
  */
 package org.apache.tuscany.binding.axis2;
 
+import java.util.LinkedList;
 import java.util.Map;
-import java.util.Stack;
 
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.AbstractOutboundInvocationHandler;
@@ -35,8 +35,8 @@
         this.inboundWire = inboundWire;
     }
 
-    public Object invoke(Operation operation, Object[] args, Stack<Object> 
callbackRoutingChain) throws Throwable {
-        Object targetAddress = callbackRoutingChain.pop();
+    public Object invoke(Operation operation, Object[] args, 
LinkedList<Object> callbackRoutingChain) throws Throwable {
+        Object targetAddress = callbackRoutingChain.removeFirst();
         if (targetAddress == null) {
             throw new AssertionError("Popped a null from address from stack");
         }

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java?view=diff&rev=469543&r1=469542&r2=469543
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
 Tue Oct 31 08:31:23 2006
@@ -19,7 +19,7 @@
 package org.apache.tuscany.binding.axis2;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.Stack;
+import java.util.LinkedList;
 
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.InboundWire;
@@ -31,7 +31,7 @@
     
     private Operation operation;
     private InboundWire inboundWire;
-    private Stack<Object> callbackRoutingChain;
+    private LinkedList<Object> callbackRoutingChain;
     private boolean cacheable;
     Axis2CallbackInvocationHandler invocationHandler;
     
@@ -93,7 +93,7 @@
         return invoker;
     }
     
-    public void setCallbackRoutingChain(Stack<Object> callbackRoutingChain) {
+    public void setCallbackRoutingChain(LinkedList<Object> 
callbackRoutingChain) {
         this.callbackRoutingChain = callbackRoutingChain;
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to