Return-Path: Delivered-To: apmail-xml-axis-dev-archive@xml.apache.org Received: (qmail 82745 invoked by uid 500); 14 Nov 2002 12:34:10 -0000 Mailing-List: contact axis-dev-help@xml.apache.org; run by ezmlm Precedence: bulk Reply-To: axis-dev@xml.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list axis-dev@xml.apache.org Received: (qmail 82693 invoked from network); 14 Nov 2002 12:34:09 -0000 X-MimeOLE: Produced By Microsoft Exchange V6.0.6249.0 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C28BDA.176EA13A" Subject: soap 1.2 axisfault patch Date: Thu, 14 Nov 2002 13:33:53 +0100 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: soap 1.2 axisfault patch Thread-Index: AcKL2iM2Hq8iS5eDSS6FzguO7X1VSA== From: To: X-OriginalArrivalTime: 14 Nov 2002 12:34:05.0100 (UTC) FILETIME=[1E859EC0:01C28BDA] X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N This is a multi-part message in MIME format. ------_=_NextPart_001_01C28BDA.176EA13A Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, I have attached some patches about the SOAP 1.2 compliance of FAULT = (also serializers and deserialziers). Please check them and let me know = if you have any suggestions. Br, Andras ******************************************************************* --- 1_0/org/apache/axis/AxisFault.java Tue Sep 17 22:38:10 2002 +++ mysoap12/org/apache/axis/AxisFault.java Thu Nov 14 10:51:17 2002 @@ -90,9 +90,11 @@ LogFactory.getLog(AxisFault.class.getName()); =20 protected QName faultCode ; + protected Vector faultSubCode ; protected String faultString =3D ""; protected String faultActor ; protected Vector faultDetails ; // vector of Element's + protected String faultNode ; =20 /** SOAP headers which should be serialized with the Fault */ protected ArrayList faultHeaders =3D null; @@ -103,7 +105,7 @@ * AxisFault. If the Exception is an InvocationTargetException = (which * already wraps another Exception), get the wrapped Exception out = from * there and use that instead of the passed one. - */=20 + */ public static AxisFault makeFault(Exception e) { if (e instanceof InvocationTargetException) { @@ -112,14 +114,17 @@ e =3D (Exception)t; } } - =20 + if (e instanceof AxisFault) { return (AxisFault)e; } - =20 + return new AxisFault(e); } - =20 + + /** + * @deprecated + */ public AxisFault(String code, String str, String actor, Element[] details) { super (str); @@ -131,6 +136,9 @@ initFromException(this); } =20 + /** + * @deprecated + */ public AxisFault(QName code, String str, String actor, Element[] details) { super (str); @@ -142,21 +150,36 @@ initFromException(this); } =20 + public AxisFault(QName code, QName[] subcodes, String str, + String actor, String node, Element[] details) { + super (str); + setFaultCode( code ); + if (subcodes !=3D null) + for (int i =3D 0; i < subcodes.length; i++) + addFaultSubCode( subcodes[i] ); + setFaultString( str ); + setFaultActor( actor ); + setFaultNode( node ); + setFaultDetail( details ); + if (details =3D=3D null) + initFromException(this); + } + /** * Wrap an AxisFault around an existing Exception - this is private * to force everyone to use makeFault() above, which sanity-checks = us. - */=20 + */ protected AxisFault(Exception target) { super ("", target); - + // ? SOAP 1.2 or 1.1 ? setFaultCode( Constants.FAULT_SERVER_USER ); - =20 initFromException(target); } =20 public AxisFault(String message) { super (message); + // ? SOAP 1.2 or 1.1 ? setFaultCode(Constants.FAULT_SERVER_GENERAL); setFaultString(message); initFromException(this); @@ -168,14 +191,16 @@ public AxisFault() { super(); - setFaultCode(Constants.FAULT_SERVER_GENERAL); =20 + // ? SOAP 1.2 or 1.1 ? + setFaultCode( Constants.FAULT_SERVER_USER ); initFromException(this); } =20 public AxisFault (String message, Throwable t) { super (message, t); - setFaultCode(Constants.FAULT_SERVER_GENERAL); + // ? SOAP 1.2 or 1.1 ? + setFaultCode( Constants.FAULT_SERVER_USER ); setFaultString(message); } =20 @@ -190,34 +215,34 @@ } } =20 - // Set the exception message (if any) as the fault string=20 + // Set the exception message (if any) as the fault string setFaultString( target.toString() ); - =20 + if (faultDetails =3D=3D null) faultDetails =3D new Vector(); =20 Element el; - =20 + // If we're derived from AxisFault, then put the exception = class // into the "exceptionName" element in the details. This = allows // us to get back a correct Java Exception class on the other = side // (assuming they have it available). - =20 + if ((target instanceof AxisFault) && (target.getClass() !=3D AxisFault.class)) { - el =3D XMLUtils.StringToElement(Constants.NS_URI_AXIS,=20 - "exceptionName",=20 + el =3D XMLUtils.StringToElement(Constants.NS_URI_AXIS, + "exceptionName", = target.getClass().getName()); - =20 - faultDetails.add(el); =20 + + faultDetails.add(el); } - =20 - el =3D XMLUtils.StringToElement(Constants.NS_URI_AXIS,=20 - "stackTrace",=20 + + el =3D XMLUtils.StringToElement(Constants.NS_URI_AXIS, + "stackTrace", = JavaUtils.stackToString(target)); =20 faultDetails.add(el); } - =20 + public void dump() { log.debug(dumpToString()); @@ -235,11 +260,22 @@ + XMLUtils.getInnerXMLString(e); } } - =20 + + String subCodes =3D new String(); + if (faultSubCode !=3D null) { + for (int i =3D 0; i < faultSubCode.size(); i++) { + subCodes +=3D JavaUtils.LS + + (QName)faultSubCode.elementAt(i); + + } + } + return "AxisFault" + JavaUtils.LS + " faultCode: " + faultCode + JavaUtils.LS + + " faultSubcode: " + subCodes + JavaUtils.LS + " faultString: " + faultString + JavaUtils.LS + " faultActor: " + faultActor + JavaUtils.LS + + " faultNode: " + faultNode + JavaUtils.LS + " faultDetail: " + details + JavaUtils.LS ; } @@ -249,11 +285,46 @@ } =20 public void setFaultCode(String code) { - faultCode =3D new QName(Constants.NS_URI_AXIS, code); + faultCode =3D new QName(Constants.URI_SOAP12_ENV, code); + } + + /** + * This is new in SOAP 1.2, ignored in SOAP 1.1 + * @return + */ + public void addFaultSubCode(String code) { + if (faultSubCode =3D=3D null) + faultSubCode =3D new Vector(); + faultSubCode.add(new QName(Constants.NS_URI_AXIS, code)); + } + + /** + * This is new in SOAP 1.2, ignored in SOAP 1.1 + * @return + */ + public void addFaultSubCode(QName code) { + if (faultSubCode =3D=3D null) + faultSubCode =3D new Vector(); + faultSubCode.add(code); + } + + /** + * This is new in SOAP 1.2, ignored in SOAP 1.1 + * @return + */ + public void clearFaultSubCodes() { + faultSubCode =3D null; } =20 public QName getFaultCode() { - return( faultCode ); + return(faultCode); + } + + public QName[] getFaultSubCodes() { + if (faultSubCode =3D=3D null) + return null; + QName[] q =3D new QName[faultSubCode.size()]; + return (QName[])faultSubCode.toArray(q); } =20 public void setFaultString(String str) { @@ -268,14 +339,63 @@ return( faultString ); } =20 - public void setFaultActor(String actor) { - faultActor =3D actor ; + /** + * This is SOAP 1.2 equivalent of {@link = #setFaultString(java.lang.String)} + * @return + */ + public void setFaultReason(String str) { + setFaultString(str); } =20 + /** + * This is SOAP 1.2 equivalent of {@link #getFaultString()} + * @return + */ + public String getFaultReason() { + return getFaultString(); + } + + public String getFaultActor() { return( faultActor ); } =20 + public void setFaultActor(String actor) { + faultActor =3D actor ; + } + + /** + * This is SOAP 1.2 equivalent of {@link #getFaultActor()} + * @return + */ + public String getFaultRole() { + return getFaultActor(); + } + + /** + * This is SOAP 1.2 equivalent of {@link = #setFaultActor(java.lang.String)} + * @return + */ + public void setFaultRole(String role) { + setFaultActor(role); + } + + /** + * This is new in SOAP 1.2 + * @return + */ + public String getFaultNode() { + return( faultNode ); + } + + /** + * This is new in SOAP 1.2 + * @return + */ + public void setFaultNode(String node) { + faultNode =3D node; + } + public void setFaultDetail(Element[] details) { if ( details =3D=3D null ) return ; faultDetails =3D new Vector( details.length ); @@ -309,7 +429,7 @@ result[i] =3D (Element) faultDetails.elementAt(i); return result; } - =20 + public void output(SerializationContext context) throws Exception { =20 SOAPEnvelope envelope =3D new SOAPEnvelope(); ******************************************************************* --- 1_0/org/apache/axis/Constants.java Fri Sep 13 22:43:26 2002 +++ mysoap12/org/apache/axis/Constants.java Tue Nov 12 13:25:53 2002 @@ -95,7 +95,7 @@ // // Default SOAP version // - public static final SOAPConstants DEFAULT_SOAP_VERSION =3D=20 + public static final SOAPConstants DEFAULT_SOAP_VERSION =3D SOAPConstants.SOAP11_CONSTANTS; =20 // @@ -105,7 +105,7 @@ = "http://schemas.xmlsoap.org/soap/envelope/" ; public static final String URI_SOAP12_ENV =3D = "http://www.w3.org/2002/06/soap-envelope"; - public static final String URI_DEFAULT_SOAP_ENV =3D=20 + public static final String URI_DEFAULT_SOAP_ENV =3D DEFAULT_SOAP_VERSION.getEnvelopeURI(); =20 public static final String[] URIS_SOAP_ENV =3D { @@ -144,7 +144,7 @@ = "http://schemas.xmlsoap.org/soap/encoding/" ; public static final String URI_SOAP12_ENC =3D = "http://www.w3.org/2002/06/soap-encoding"; - public static final String URI_DEFAULT_SOAP_ENC =3D=20 + public static final String URI_DEFAULT_SOAP_ENC =3D DEFAULT_SOAP_VERSION.getEncodingURI(); =20 public static final String[] URIS_SOAP_ENC =3D { @@ -409,6 +409,14 @@ public static final String ELEM_FAULT_DETAIL =3D "detail" ; public static final String ELEM_FAULT_ACTOR =3D "faultactor" ; =20 + public static final String ELEM_FAULT_CODE_SOAP12 =3D "Code" ; + public static final String ELEM_FAULT_VALUE_SOAP12 =3D "Value" ; + public static final String ELEM_FAULT_SUBCODE_SOAP12 =3D "Subcode" = ; + public static final String ELEM_FAULT_REASON_SOAP12 =3D "Reason" ; + public static final String ELEM_FAULT_NODE_SOAP12 =3D "Node" ; + public static final String ELEM_FAULT_ROLE_SOAP12 =3D "Role" ; + public static final String ELEM_FAULT_DETAIL_SOAP12 =3D "Detail" ; + public static final String ATTR_MUST_UNDERSTAND =3D = "mustUnderstand" ; public static final String ATTR_ENCODING_STYLE =3D "encodingStyle" = ; public static final String ATTR_ACTOR =3D "actor" ; @@ -434,6 +442,21 @@ new QName(URI_SOAP11_ENV, = "MustUnderstand"); =20 =20 + public static final QName FAULT_SOAP12_MUSTUNDERSTAND =3D + new QName(URI_SOAP12_ENV, = "MustUnderstand"); + + public static final QName FAULT_SOAP12_VERSIONMISMATCH =3D + new QName(URI_SOAP12_ENV, = "VersionMismatch"); + + public static final QName FAULT_SOAP12_DATAENCODINGUNKNOW =3D + new QName(URI_SOAP12_ENV, = "DataEncodingUnknow"); + + public static final QName FAULT_SOAP12_SENDER =3D + new QName(URI_SOAP12_ENV, "Sender"); + + public static final QName FAULT_SOAP12_RECEIVER =3D + new QName(URI_SOAP12_ENV, = "Receiver"); + // QNames = /////////////////////////////////////////////////////////////////////////= / public static final QName QNAME_FAULTCODE =3D @@ -445,6 +468,21 @@ public static final QName QNAME_FAULTDETAILS =3D new QName("", = ELEM_FAULT_DETAIL); =20 + public static final QName QNAME_FAULTCODE_SOAP12 =3D + new QName(URI_SOAP12_ENV, = ELEM_FAULT_CODE_SOAP12); + public static final QName QNAME_FAULTVALUE_SOAP12 =3D + new QName(URI_SOAP12_ENV, = ELEM_FAULT_VALUE_SOAP12); + public static final QName QNAME_FAULTSUBCODE_SOAP12 =3D + new QName(URI_SOAP12_ENV, = ELEM_FAULT_SUBCODE_SOAP12); + public static final QName QNAME_FAULTREASON_SOAP12 =3D + new QName(URI_SOAP12_ENV, = ELEM_FAULT_REASON_SOAP12); + + public static final QName QNAME_FAULTNODE_SOAP12 =3D + new QName(URI_SOAP12_ENV, = ELEM_FAULT_NODE_SOAP12); + public static final QName QNAME_FAULTROLE_SOAP12 =3D + new QName(URI_SOAP12_ENV, = ELEM_FAULT_ROLE_SOAP12); + public static final QName QNAME_FAULTDETAIL_SOAP12 =3D + new QName(URI_SOAP12_ENV, = ELEM_FAULT_DETAIL_SOAP12); =20 // Define qnames for the all of the XSD and SOAP-ENC encodings public static final QName XSD_STRING =3D new = QName(URI_DEFAULT_SCHEMA_XSD, "string"); @@ -545,7 +583,7 @@ // When invoked from a servlet, per JAX-RPC, we need a // ServletEndpointContext object. This is where it lives. public static final String MC_SERVLET_ENDPOINT_CONTEXT =3D = "servletEndpointContext"; - =20 + public static final String AXIS_VERSION=3D"Axis/1.0"; =20 } ******************************************************************* --- 1_0/org/apache/axis/Message/SOAPFault.java Wed Sep 18 18:10:28 2002 +++ mysoap12/org/apache/axis/Message/SOAPFault.java Mon Nov 11 21:41:32 = 2002 @@ -60,6 +60,7 @@ import org.apache.axis.utils.Messages; import org.apache.axis.encoding.DeserializationContext; import org.apache.axis.encoding.SerializationContext; +import org.apache.axis.soap.SOAPConstants; import org.w3c.dom.Element; import org.xml.sax.Attributes; =20 @@ -83,21 +84,24 @@ { super(namespace, localName, prefix, attrs, context); this.fault =3D fault; - namespaceURI =3D Constants.URI_SOAP11_ENV; - name =3D Constants.ELEM_FAULT; } =20 public SOAPFault(AxisFault fault) { this.fault =3D fault; - namespaceURI =3D Constants.URI_SOAP11_ENV; - name =3D Constants.ELEM_FAULT; } =20 public void outputImpl(SerializationContext context) throws IOException { - context.registerPrefixForURI(prefix, namespaceURI); + SOAPConstants soapConstants =3D context.getMessageContext() = =3D=3D null ? + SOAPConstants.SOAP11_CONSTANTS = : + = context.getMessageContext().getSOAPConstants(); + + namespaceURI =3D soapConstants.getEnvelopeURI(); + name =3D Constants.ELEM_FAULT; + + context.registerPrefixForURI(prefix, = soapConstants.getEnvelopeURI()); context.startElement(new QName(this.getNamespaceURI(), this.getName()), attributes); @@ -108,27 +112,69 @@ if (axisFault.getFaultCode() !=3D null) { // Do this BEFORE starting the element, so the prefix = gets // registered if needed. - String faultCode =3D = context.qName2String(axisFault.getFaultCode()); - context.startElement(Constants.QNAME_FAULTCODE, null); - context.writeSafeString(faultCode); - context.endElement(); + if (soapConstants =3D=3D = SOAPConstants.SOAP12_CONSTANTS) { + String faultCode =3D = context.qName2String(axisFault.getFaultCode()); + = context.startElement(Constants.QNAME_FAULTCODE_SOAP12, null); + = context.startElement(Constants.QNAME_FAULTVALUE_SOAP12, null); + context.writeSafeString(faultCode); + context.endElement(); + QName[] subcodes =3D axisFault.getFaultSubCodes(); + if (subcodes !=3D null) { + for (int i =3D 0; i < subcodes.length; i++) { + faultCode =3D = context.qName2String(subcodes[i]); + = context.startElement(Constants.QNAME_FAULTSUBCODE_SOAP12, null); + = context.startElement(Constants.QNAME_FAULTVALUE_SOAP12, null); + context.writeSafeString(faultCode); + context.endElement(); + } + + for (int i =3D 0; i < subcodes.length; i++) + context.endElement(); + + } + context.endElement(); + } else { + String faultCode =3D = context.qName2String(axisFault.getFaultCode()); + context.startElement(Constants.QNAME_FAULTCODE, = null); + context.writeSafeString(faultCode); + context.endElement(); + } } =20 if (axisFault.getFaultString() !=3D null) { - context.startElement(Constants.QNAME_FAULTSTRING, = null); + if (soapConstants =3D=3D = SOAPConstants.SOAP12_CONSTANTS) + = context.startElement(Constants.QNAME_FAULTREASON_SOAP12, null); + else + context.startElement(Constants.QNAME_FAULTSTRING, = null); context.writeSafeString(axisFault.getFaultString()); context.endElement(); } =20 if (axisFault.getFaultActor() !=3D null) { - context.startElement(Constants.QNAME_FAULTACTOR, null); + if (soapConstants =3D=3D = SOAPConstants.SOAP12_CONSTANTS) + = context.startElement(Constants.QNAME_FAULTROLE_SOAP12, null); + else + context.startElement(Constants.QNAME_FAULTACTOR, = null); + context.writeSafeString(axisFault.getFaultActor()); context.endElement(); } =20 + if (axisFault.getFaultNode() !=3D null) { + if (soapConstants =3D=3D = SOAPConstants.SOAP12_CONSTANTS) { + = context.startElement(Constants.QNAME_FAULTNODE_SOAP12, null); + context.writeSafeString(axisFault.getFaultNode()); + context.endElement(); + } + } + Element[] faultDetails =3D axisFault.getFaultDetails(); if (faultDetails !=3D null) { - context.startElement(Constants.QNAME_FAULTDETAILS, = null); + if (soapConstants =3D=3D = SOAPConstants.SOAP12_CONSTANTS) + = context.startElement(Constants.QNAME_FAULTDETAIL_SOAP12, null); + else + context.startElement(Constants.QNAME_FAULTDETAILS, = null); + for (int i =3D 0; i < faultDetails.length; i++) { context.writeDOMElement(faultDetails[i]); } ******************************************************************* --- 1_0/org/apache/axis/Message/SOAPFaultBuilder.java Sun Jun 23 = 01:14:04 2002 +++ mysoap12/org/apache/axis/Message/SOAPFaultBuilder.java Wed Nov 13 = 21:10:12 2002 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001 The Apache Software Foundation. All rights=20 + * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,7 +10,7 @@ * are met: * * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer.=20 + * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in @@ -18,7 +18,7 @@ * distribution. * * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: =20 + * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software = itself, @@ -26,7 +26,7 @@ * * 4. The names "Axis" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this - * software without prior written permission. For written=20 + * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", @@ -61,6 +61,7 @@ import org.apache.axis.encoding.Callback; import org.apache.axis.encoding.CallbackTarget; import org.apache.axis.utils.ClassUtils; +import org.apache.axis.soap.SOAPConstants; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.w3c.dom.Element; @@ -71,10 +72,11 @@ import java.util.HashMap; import java.util.ArrayList; import java.util.Iterator; +import java.util.Vector; =20 -/**=20 +/** * Build a Fault body element. - *=20 + * * @author Sam Ruby (rubys@us.ibm.com) * @author Glen Daniels (gdaniels@macromedia.com) * @author Tom Jordahl (tomj@macromedia.com) @@ -83,46 +85,69 @@ { protected SOAPFault element; protected DeserializationContext context; - static HashMap fields =3D new HashMap(); - =20 + static HashMap fields_soap11 =3D new HashMap(); + static HashMap fields_soap12 =3D new HashMap(); + // Fault data protected String faultClassName =3D null; - protected QName faultCode =3D null; protected String faultString =3D null; protected String faultActor =3D null; protected Element[] faultDetails; + protected String faultNode =3D null; + protected QName faultCode; + protected Vector faultSubCode =3D null; + + protected SOAPFaultCodeBuilder code; =20 static { - fields.put(Constants.ELEM_FAULT_CODE, Constants.XSD_STRING); - fields.put(Constants.ELEM_FAULT_STRING, Constants.XSD_STRING); - fields.put(Constants.ELEM_FAULT_ACTOR, Constants.XSD_STRING); - fields.put(Constants.ELEM_FAULT_DETAIL, null); + fields_soap11.put(Constants.ELEM_FAULT_CODE, = Constants.XSD_STRING); + fields_soap11.put(Constants.ELEM_FAULT_STRING, = Constants.XSD_STRING); + fields_soap11.put(Constants.ELEM_FAULT_ACTOR, = Constants.XSD_STRING); + fields_soap11.put(Constants.ELEM_FAULT_DETAIL, null); } - =20 + + static { + fields_soap12.put(Constants.ELEM_FAULT_REASON_SOAP12, = Constants.XSD_STRING); + fields_soap12.put(Constants.ELEM_FAULT_ROLE_SOAP12, = Constants.XSD_STRING); + fields_soap12.put(Constants.ELEM_FAULT_NODE_SOAP12, = Constants.XSD_STRING); + fields_soap12.put(Constants.ELEM_FAULT_DETAIL_SOAP12, null); + } + public SOAPFaultBuilder(SOAPFault element, DeserializationContext context) { this.element =3D element; this.context =3D context; } =20 + private void fillAxisFault(AxisFault f) { + f.setFaultCode(code.getFaultCode()); + + SOAPFaultCodeBuilder c =3D code; + while ((c =3D c.getNext()) !=3D null) { + f.addFaultSubCode(c.getFaultCode()); + } + + f.setFaultString(faultString); + f.setFaultActor(faultActor); + f.setFaultNode(faultNode); + f.setFaultDetail(faultDetails); + } + /** * Final call back where we can populate the exception with data. - */=20 + */ public void endElement(String namespace, String localName, DeserializationContext context) throws SAXException { super.endElement(namespace, localName, context); - =20 + AxisFault f =3D null; if (faultClassName !=3D null) { try { Class exClass =3D ClassUtils.forName(faultClassName); if (AxisFault.class.isAssignableFrom(exClass)) { f =3D (AxisFault) exClass.newInstance(); - f.setFaultCode(faultCode); - f.setFaultString(faultString); - f.setFaultActor(faultActor); - f.setFaultDetail(faultDetails); + fillAxisFault(f); } } catch (Exception e) { @@ -132,12 +157,10 @@ } =20 if (f =3D=3D null) { - f =3D new AxisFault(faultCode,=20 - faultString,=20 - faultActor,=20 - faultDetails); + f =3D new AxisFault(); + fillAxisFault(f); } - =20 + element.setFault(f); } =20 @@ -149,22 +172,35 @@ throws SAXException { Deserializer currentDeser =3D null; - =20 - QName qName =3D (QName)fields.get(name); - =20 + + SOAPConstants soapConstants =3D = context.getMessageContext().getSOAPConstants(); + + QName qName; + if (soapConstants =3D=3D SOAPConstants.SOAP12_CONSTANTS) { + qName =3D (QName)fields_soap12.get(name); + if (qName =3D=3D null) { + QName thisQName =3D new QName(namespace, name); + if (thisQName.equals(Constants.QNAME_FAULTCODE_SOAP12)) + return (code =3D new = SOAPFaultCodeBuilder(context)); + } + } else { + qName =3D (QName)fields_soap11.get(name); + } + if (qName !=3D null) { currentDeser =3D context.getDeserializerForType(qName); if (currentDeser !=3D null) { - currentDeser.registerValueTarget(new = CallbackTarget(this, name)); + currentDeser.registerValueTarget(new = CallbackTarget(this, new QName(namespace, name))); } } - =20 + return (SOAPHandler)currentDeser; } =20 public void onEndChild(String namespace, String localName, DeserializationContext context) throws SAXException { + if (Constants.ELEM_FAULT_DETAIL.equals(localName)) { MessageElement el =3D context.getCurElement(); ArrayList children =3D el.getChildren(); @@ -187,7 +223,7 @@ } } =20 - /*=20 + /* * Defined by Callback. * This method gets control when the callback is invoked. * @param is the value to set. @@ -195,21 +231,31 @@ */ public void setValue(Object value, Object hint) { - String name =3D (String)hint; - if (name.equals(Constants.ELEM_FAULT_CODE)) { - QName qname =3D context.getQNameFromString((String)value); - if (qname !=3D null) { - //??when would QName make sense, this would be app = specific - faultCode =3D qname; - } else { - //?? Where would namespace come from - faultCode =3D new QName("",(String) value); - } - } else if (name.equals(Constants.ELEM_FAULT_STRING)) { - faultString =3D (String) value; - } else if (name.equals(Constants.ELEM_FAULT_ACTOR)) { - faultActor =3D (String) value; + String local =3D ((QName)hint).getLocalPart(); + if = (((QName)hint).getNamespaceURI().equals(Constants.URI_SOAP12_ENV)) { + if (local.equals(Constants.ELEM_FAULT_ROLE_SOAP12)) { + faultActor =3D (String) value; + } else if = (local.equals(Constants.ELEM_FAULT_REASON_SOAP12)) { + faultString =3D (String) value; + } else if (local.equals(Constants.ELEM_FAULT_NODE_SOAP12)) = { + faultNode =3D (String) value; + } + } else { + if (local.equals(Constants.ELEM_FAULT_CODE)) { + QName qname =3D = context.getQNameFromString((String)value); + if (qname !=3D null) { + //??when would QName make sense, this would be app = specific + faultCode =3D qname; + } else { + //?? Where would namespace come from + faultCode =3D new QName("",(String) value); + } + } else if (local.equals(Constants.ELEM_FAULT_STRING)) { + faultString =3D (String) value; + } else if (local.equals(Constants.ELEM_FAULT_ACTOR)) { + faultActor =3D (String) value; + } } - =20 + } } Added file SOAPFaultCodeBuilder.java******************************* /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software = itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Axis" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */ package org.apache.axis.message; import org.apache.axis.AxisFault; import org.apache.axis.Constants; import org.apache.axis.encoding.DeserializationContext; import org.apache.axis.encoding.Deserializer; import org.apache.axis.encoding.Callback; import org.apache.axis.encoding.CallbackTarget; import org.xml.sax.SAXException; import org.xml.sax.Attributes; import java.util.Vector; import javax.xml.namespace.QName; /** * Build a Fault body element. * * @author Sam Ruby (rubys@us.ibm.com) * @author Glen Daniels (gdaniels@macromedia.com) * @author Tom Jordahl (tomj@macromedia.com) */ public class SOAPFaultCodeBuilder extends SOAPHandler implements = Callback { // Fault data protected QName faultCode =3D null; protected SOAPFaultCodeBuilder next =3D null; protected DeserializationContext context; public SOAPFaultCodeBuilder(DeserializationContext context) { this.context =3D context; } public QName getFaultCode() { return faultCode; } public SOAPFaultCodeBuilder getNext() { return next; } public SOAPHandler onStartChild(String namespace, String name, String prefix, Attributes attributes, DeserializationContext context) throws SAXException { QName thisQName =3D new QName(namespace, name); if (thisQName.equals(Constants.QNAME_FAULTVALUE_SOAP12)) { Deserializer currentDeser =3D null; currentDeser =3D = context.getDeserializerForType(Constants.XSD_STRING); if (currentDeser !=3D null) { currentDeser.registerValueTarget(new = CallbackTarget(this, thisQName)); } return (SOAPHandler)currentDeser; } else if = (thisQName.equals(Constants.QNAME_FAULTSUBCODE_SOAP12)) { return (next =3D new SOAPFaultCodeBuilder(context)); } else return null; } /* * Defined by Callback. * This method gets control when the callback is invoked. * @param is the value to set. * @param hint is an Object that provide additional hint = information. */ public void setValue(Object value, Object hint) { QName thisQName =3D (QName)hint; if (thisQName.equals(Constants.QNAME_FAULTVALUE_SOAP12)) { QName qname =3D context.getQNameFromString((String)value); if (qname !=3D null) { faultCode =3D qname; } else { faultCode =3D new QName("",(String) value); } } } } <> <> <> = <> <>=20 ------_=_NextPart_001_01C28BDA.176EA13A Content-Type: application/octet-stream; name="AxisFault.java" Content-Transfer-Encoding: base64 Content-Description: AxisFault.java Content-Disposition: attachment; filename="AxisFault.java" LyoKICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQogKgogKgogKiBD b3B5cmlnaHQgKGMpIDIwMDEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp Z2h0cwogKiByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0 OgogKgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICoKICogMy4gVGhlIGVuZC11c2VyIGRvY3Vt ZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCiAqICAgIGlmIGFueSwg bXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CiAqICAgICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQogKiAgICAgICAgQXBh Y2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKICogICAg QWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdh cmUgaXRzZWxmLAogKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3ds ZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgogKgogKiA0LiBUaGUgbmFtZXMgIkF4aXMiIGFuZCAi QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKICogICAgbm90IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAqICAgIHNvZnR3YXJl IHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgogKiAgICBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KICoKICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIs CiAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgogKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRh dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTRUQgT1IgSU1QTElFRAogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCiAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCiAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCiAqIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAq IFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBi eSBtYW55CiAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24uICBGb3IgbW9yZQogKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJl IEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgogKi8K CnBhY2thZ2Ugb3JnLmFwYWNoZS5heGlzIDsKCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMuZW5jb2Rp bmcuU2VyaWFsaXphdGlvbkNvbnRleHQ7CmltcG9ydCBvcmcuYXBhY2hlLmF4aXMubWVzc2FnZS5T T0FQRW52ZWxvcGU7CmltcG9ydCBvcmcuYXBhY2hlLmF4aXMubWVzc2FnZS5TT0FQRmF1bHQ7Cmlt cG9ydCBvcmcuYXBhY2hlLmF4aXMubWVzc2FnZS5TT0FQSGVhZGVyRWxlbWVudDsKaW1wb3J0IG9y Zy5hcGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHM7CmltcG9ydCBvcmcuYXBhY2hlLmF4aXMudXRp bHMuWE1MVXRpbHM7CgppbXBvcnQgb3JnLmFwYWNoZS5heGlzLmNvbXBvbmVudHMubG9nZ2VyLkxv Z0ZhY3Rvcnk7CmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CgppbXBvcnQg b3JnLnczYy5kb20uRG9jdW1lbnQ7CmltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwppbXBvcnQg b3JnLnczYy5kb20uVGV4dDsKCmltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwppbXBvcnQgamF2 YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKaW1wb3J0IGphdmEudXRp bC5WZWN0b3I7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkl0 ZXJhdG9yOwoKaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CgovKioKICogQW4gZXhj ZXB0aW9uIHdoaWNoIG1hcHMgY2xlYW5seSB0byBhIFNPQVAgZmF1bHQuCiAqIFRoaXMgaXMgYSBi YXNlIGNsYXNzIGZvciBleGNlcHRpb25zIHdoaWNoIGFyZSBtYXBwZWQgdG8gZmF1bHRzLgogKgog KiBAYXV0aG9yIERvdWcgRGF2aXMgKGR1Z0B1cy5pYm0uY29tKQogKiBAYXV0aG9yIEphbWVzIFNu ZWxsIChqYXNuZWxsQHVzLmlibS5jb20pCiAqLwoKcHVibGljIGNsYXNzIEF4aXNGYXVsdCBleHRl bmRzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7CiAgICBwcm90ZWN0ZWQgc3RhdGljIExvZyBs b2cgPQogICAgICAgIExvZ0ZhY3RvcnkuZ2V0TG9nKEF4aXNGYXVsdC5jbGFzcy5nZXROYW1lKCkp OwoKICAgIHByb3RlY3RlZCBRTmFtZSAgICAgZmF1bHRDb2RlIDsKICAgIHByb3RlY3RlZCBWZWN0 b3IgICAgZmF1bHRTdWJDb2RlIDsKICAgIHByb3RlY3RlZCBTdHJpbmcgICAgZmF1bHRTdHJpbmcg PSAiIjsKICAgIHByb3RlY3RlZCBTdHJpbmcgICAgZmF1bHRBY3RvciA7CiAgICBwcm90ZWN0ZWQg VmVjdG9yICAgIGZhdWx0RGV0YWlscyA7ICAvLyB2ZWN0b3Igb2YgRWxlbWVudCdzCiAgICBwcm90 ZWN0ZWQgU3RyaW5nICAgIGZhdWx0Tm9kZSA7CgogICAgLyoqIFNPQVAgaGVhZGVycyB3aGljaCBz aG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBGYXVsdCAqLwogICAgcHJvdGVjdGVkIEFycmF5 TGlzdCBmYXVsdEhlYWRlcnMgPSBudWxsOwoKICAgIC8qKgogICAgICogTWFrZSBhbiBBeGlzRmF1 bHQgYmFzZWQgb24gYSBwYXNzZWQgRXhjZXB0aW9uLiAgSWYgdGhlIEV4Y2VwdGlvbiBpcwogICAg ICogYWxyZWFkeSBhbiBBeGlzRmF1bHQsIHNpbXBseSB1c2UgdGhhdC4gIE90aGVyd2lzZSwgd3Jh cCBpdCBpbiBhbgogICAgICogQXhpc0ZhdWx0LiAgSWYgdGhlIEV4Y2VwdGlvbiBpcyBhbiBJbnZv Y2F0aW9uVGFyZ2V0RXhjZXB0aW9uICh3aGljaAogICAgICogYWxyZWFkeSB3cmFwcyBhbm90aGVy IEV4Y2VwdGlvbiksIGdldCB0aGUgd3JhcHBlZCBFeGNlcHRpb24gb3V0IGZyb20KICAgICAqIHRo ZXJlIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBwYXNzZWQgb25lLgogICAgICovCiAgICBw dWJsaWMgc3RhdGljIEF4aXNGYXVsdCBtYWtlRmF1bHQoRXhjZXB0aW9uIGUpCiAgICB7CiAgICAg ICAgaWYgKGUgaW5zdGFuY2VvZiBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKSB7CiAgICAgICAg ICAgIFRocm93YWJsZSB0ID0gKChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKWUpLmdldFRhcmdl dEV4Y2VwdGlvbigpOwogICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikgewog ICAgICAgICAgICAgICAgZSA9IChFeGNlcHRpb24pdDsKICAgICAgICAgICAgfQogICAgICAgIH0K CiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBeGlzRmF1bHQpIHsKICAgICAgICAgICAgcmV0dXJu IChBeGlzRmF1bHQpZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgQXhpc0ZhdWx0KGUp OwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIEF4 aXNGYXVsdChTdHJpbmcgY29kZSwgU3RyaW5nIHN0ciwKICAgICAgICAgICAgICAgICAgICAgU3Ry aW5nIGFjdG9yLCBFbGVtZW50W10gZGV0YWlscykgewogICAgICAgIHN1cGVyIChzdHIpOwogICAg ICAgIHNldEZhdWx0Q29kZSggbmV3IFFOYW1lKENvbnN0YW50cy5OU19VUklfQVhJUywgY29kZSkp OwogICAgICAgIHNldEZhdWx0U3RyaW5nKCBzdHIgKTsKICAgICAgICBzZXRGYXVsdEFjdG9yKCBh Y3RvciApOwogICAgICAgIHNldEZhdWx0RGV0YWlsKCBkZXRhaWxzICk7CiAgICAgICAgaWYgKGRl dGFpbHMgPT0gbnVsbCkKICAgICAgICAgICAgaW5pdEZyb21FeGNlcHRpb24odGhpcyk7CiAgICB9 CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBwdWJsaWMgQXhpc0ZhdWx0 KFFOYW1lIGNvZGUsIFN0cmluZyBzdHIsCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhY3Rv ciwgRWxlbWVudFtdIGRldGFpbHMpIHsKICAgICAgICBzdXBlciAoc3RyKTsKICAgICAgICBzZXRG YXVsdENvZGUoIGNvZGUgKTsKICAgICAgICBzZXRGYXVsdFN0cmluZyggc3RyICk7CiAgICAgICAg c2V0RmF1bHRBY3RvciggYWN0b3IgKTsKICAgICAgICBzZXRGYXVsdERldGFpbCggZGV0YWlscyAp OwogICAgICAgIGlmIChkZXRhaWxzID09IG51bGwpCiAgICAgICAgICAgIGluaXRGcm9tRXhjZXB0 aW9uKHRoaXMpOwogICAgfQoKICAgIHB1YmxpYyBBeGlzRmF1bHQoUU5hbWUgY29kZSwgUU5hbWVb XSBzdWJjb2RlcywgU3RyaW5nIHN0ciwKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFjdG9y LCBTdHJpbmcgbm9kZSwgRWxlbWVudFtdIGRldGFpbHMpIHsKICAgICAgICBzdXBlciAoc3RyKTsK ICAgICAgICBzZXRGYXVsdENvZGUoIGNvZGUgKTsKICAgICAgICBpZiAoc3ViY29kZXMgIT0gbnVs bCkKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdWJjb2Rlcy5sZW5ndGg7IGkrKykK ICAgICAgICAgICAgICAgIGFkZEZhdWx0U3ViQ29kZSggc3ViY29kZXNbaV0gKTsKICAgICAgICBz ZXRGYXVsdFN0cmluZyggc3RyICk7CiAgICAgICAgc2V0RmF1bHRBY3RvciggYWN0b3IgKTsKICAg ICAgICBzZXRGYXVsdE5vZGUoIG5vZGUgKTsKICAgICAgICBzZXRGYXVsdERldGFpbCggZGV0YWls cyApOwogICAgICAgIGlmIChkZXRhaWxzID09IG51bGwpCiAgICAgICAgICAgIGluaXRGcm9tRXhj ZXB0aW9uKHRoaXMpOwogICAgfQoKICAgIC8qKgogICAgICogV3JhcCBhbiBBeGlzRmF1bHQgYXJv dW5kIGFuIGV4aXN0aW5nIEV4Y2VwdGlvbiAtIHRoaXMgaXMgcHJpdmF0ZQogICAgICogdG8gZm9y Y2UgZXZlcnlvbmUgdG8gdXNlIG1ha2VGYXVsdCgpIGFib3ZlLCB3aGljaCBzYW5pdHktY2hlY2tz IHVzLgogICAgICovCiAgICBwcm90ZWN0ZWQgQXhpc0ZhdWx0KEV4Y2VwdGlvbiB0YXJnZXQpIHsK ICAgICAgICBzdXBlciAoIiIsIHRhcmdldCk7CiAgICAgICAgLy8gPyBTT0FQIDEuMiBvciAxLjEg PwogICAgICAgIHNldEZhdWx0Q29kZSggQ29uc3RhbnRzLkZBVUxUX1NFUlZFUl9VU0VSICk7CiAg ICAgICAgaW5pdEZyb21FeGNlcHRpb24odGFyZ2V0KTsKICAgIH0KCiAgICBwdWJsaWMgQXhpc0Zh dWx0KFN0cmluZyBtZXNzYWdlKQogICAgewogICAgICAgIHN1cGVyIChtZXNzYWdlKTsKICAgICAg ICAvLyA/IFNPQVAgMS4yIG9yIDEuMSA/CiAgICAgICAgc2V0RmF1bHRDb2RlKENvbnN0YW50cy5G QVVMVF9TRVJWRVJfR0VORVJBTCk7CiAgICAgICAgc2V0RmF1bHRTdHJpbmcobWVzc2FnZSk7CiAg ICAgICAgaW5pdEZyb21FeGNlcHRpb24odGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBOby1h cmcgY29uc3RydWN0b3IgZm9yIGJ1aWxkaW5nIG9uZSBmcm9tIGFuIFhNTCBzdHJlYW0uCiAgICAg Ki8KICAgIHB1YmxpYyBBeGlzRmF1bHQoKQogICAgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAg Ly8gPyBTT0FQIDEuMiBvciAxLjEgPwogICAgICAgIHNldEZhdWx0Q29kZSggQ29uc3RhbnRzLkZB VUxUX1NFUlZFUl9VU0VSICk7CiAgICAgICAgaW5pdEZyb21FeGNlcHRpb24odGhpcyk7CiAgICB9 CgogICAgcHVibGljIEF4aXNGYXVsdCAoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSB0KQogICAg ewogICAgICAgIHN1cGVyIChtZXNzYWdlLCB0KTsKICAgICAgICAvLyA/IFNPQVAgMS4yIG9yIDEu MSA/CiAgICAgICAgc2V0RmF1bHRDb2RlKCBDb25zdGFudHMuRkFVTFRfU0VSVkVSX1VTRVIgKTsK ICAgICAgICBzZXRGYXVsdFN0cmluZyhtZXNzYWdlKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQg aW5pdEZyb21FeGNlcHRpb24oRXhjZXB0aW9uIHRhcmdldCkKICAgIHsKICAgICAgICBmb3IgKGlu dCBpID0gMDsgZmF1bHREZXRhaWxzICE9IG51bGwgJiYgaSA8IGZhdWx0RGV0YWlscy5zaXplKCk7 IGkrKykgewogICAgICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgZmF1bHREZXRh aWxzLmVsZW1lbnRBdChpKTsKICAgICAgICAgICAgaWYgKCJzdGFja1RyYWNlIi5lcXVhbHMoZWxl bWVudC5nZXRMb2NhbE5hbWUoKSkgJiYKICAgICAgICAgICAgICAgIENvbnN0YW50cy5OU19VUklf QVhJUy5lcXVhbHMoZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSkpIHsKICAgICAgICAgICAgICAg IC8vID8/PyBTaG91bGQgd2UgcmVwbGFjZSBpdCBvciBqdXN0IGxldCBpdCBiZT8KICAgICAgICAg ICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2V0IHRo ZSBleGNlcHRpb24gbWVzc2FnZSAoaWYgYW55KSBhcyB0aGUgZmF1bHQgc3RyaW5nCiAgICAgICAg c2V0RmF1bHRTdHJpbmcoIHRhcmdldC50b1N0cmluZygpICk7CgogICAgICAgIGlmIChmYXVsdERl dGFpbHMgPT0gbnVsbCkgZmF1bHREZXRhaWxzID0gbmV3IFZlY3RvcigpOwoKICAgICAgICBFbGVt ZW50IGVsOwoKICAgICAgICAvLyBJZiB3ZSdyZSBkZXJpdmVkIGZyb20gQXhpc0ZhdWx0LCB0aGVu IHB1dCB0aGUgZXhjZXB0aW9uIGNsYXNzCiAgICAgICAgLy8gaW50byB0aGUgImV4Y2VwdGlvbk5h bWUiIGVsZW1lbnQgaW4gdGhlIGRldGFpbHMuICBUaGlzIGFsbG93cwogICAgICAgIC8vIHVzIHRv IGdldCBiYWNrIGEgY29ycmVjdCBKYXZhIEV4Y2VwdGlvbiBjbGFzcyBvbiB0aGUgb3RoZXIgc2lk ZQogICAgICAgIC8vIChhc3N1bWluZyB0aGV5IGhhdmUgaXQgYXZhaWxhYmxlKS4KCiAgICAgICAg aWYgKCh0YXJnZXQgaW5zdGFuY2VvZiBBeGlzRmF1bHQpICYmCiAgICAgICAgICAgICh0YXJnZXQu Z2V0Q2xhc3MoKSAhPSBBeGlzRmF1bHQuY2xhc3MpKSB7CiAgICAgICAgICAgIGVsID0gWE1MVXRp bHMuU3RyaW5nVG9FbGVtZW50KENvbnN0YW50cy5OU19VUklfQVhJUywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uTmFtZSIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldENs YXNzKCkuZ2V0TmFtZSgpKTsKCiAgICAgICAgICAgIGZhdWx0RGV0YWlscy5hZGQoZWwpOwogICAg ICAgIH0KCiAgICAgICAgZWwgPSAgWE1MVXRpbHMuU3RyaW5nVG9FbGVtZW50KENvbnN0YW50cy5O U19VUklfQVhJUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YWNr VHJhY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXZhVXRpbHMu c3RhY2tUb1N0cmluZyh0YXJnZXQpKTsKCiAgICAgICAgZmF1bHREZXRhaWxzLmFkZChlbCk7CiAg ICB9CgogICAgcHVibGljIHZvaWQgZHVtcCgpCiAgICB7CiAgICAgICAgbG9nLmRlYnVnKGR1bXBU b1N0cmluZygpKTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGR1bXBUb1N0cmluZygpCiAgICB7 CiAgICAgICAgU3RyaW5nIGRldGFpbHMgPSBuZXcgU3RyaW5nKCk7CgogICAgICAgIGlmIChmYXVs dERldGFpbHMgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBmYXVsdERl dGFpbHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgIEVsZW1lbnQgZSA9IChFbGVtZW50 KSBmYXVsdERldGFpbHMuZ2V0KGkpOwogICAgICAgICAgICAgICAgZGV0YWlscyArPSBKYXZhVXRp bHMuTFMKICAgICAgICAgICAgICAgICAgICAgICAgICArICJcdCIgKyAgZS5nZXRMb2NhbE5hbWUo KSArICI6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICArIFhNTFV0aWxzLmdldElubmVyWE1M U3RyaW5nKGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgc3ViQ29k ZXMgPSBuZXcgU3RyaW5nKCk7CiAgICAgICAgaWYgKGZhdWx0U3ViQ29kZSAhPSBudWxsKSB7CiAg ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF1bHRTdWJDb2RlLnNpemUoKTsgaSsrKSB7 CiAgICAgICAgICAgICAgICBzdWJDb2RlcyArPSBKYXZhVXRpbHMuTFMKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsgKFFOYW1lKWZhdWx0U3ViQ29kZS5lbGVtZW50QXQoaSk7CgogICAgICAg ICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gIkF4aXNGYXVsdCIgKyBKYXZhVXRpbHMu TFMKICAgICAgICAgICAgKyAiIGZhdWx0Q29kZTogIiArIGZhdWx0Q29kZSArIEphdmFVdGlscy5M UwogICAgICAgICAgICArICIgZmF1bHRTdWJjb2RlOiAiICsgc3ViQ29kZXMgKyBKYXZhVXRpbHMu TFMKICAgICAgICAgICAgKyAiIGZhdWx0U3RyaW5nOiAiICsgZmF1bHRTdHJpbmcgKyBKYXZhVXRp bHMuTFMKICAgICAgICAgICAgKyAiIGZhdWx0QWN0b3I6ICIgKyBmYXVsdEFjdG9yICsgSmF2YVV0 aWxzLkxTCiAgICAgICAgICAgICsgIiBmYXVsdE5vZGU6ICIgKyBmYXVsdE5vZGUgKyBKYXZhVXRp bHMuTFMKICAgICAgICAgICAgKyAiIGZhdWx0RGV0YWlsOiAiICsgZGV0YWlscyArIEphdmFVdGls cy5MUwogICAgICAgICAgICA7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0RmF1bHRDb2RlKFFO YW1lIGNvZGUpIHsKICAgICAgICBmYXVsdENvZGUgPSBjb2RlIDsKICAgIH0KCiAgICBwdWJsaWMg dm9pZCBzZXRGYXVsdENvZGUoU3RyaW5nIGNvZGUpIHsKICAgICAgICBmYXVsdENvZGUgPSBuZXcg UU5hbWUoQ29uc3RhbnRzLlVSSV9TT0FQMTJfRU5WLCBjb2RlKTsKICAgIH0KCiAgICAvKioKICAg ICAqIFRoaXMgaXMgbmV3IGluIFNPQVAgMS4yLCBpZ25vcmVkIGluIFNPQVAgMS4xCiAgICAgKiBA cmV0dXJuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIGFkZEZhdWx0U3ViQ29kZShTdHJpbmcgY29k ZSkgewogICAgICAgIGlmIChmYXVsdFN1YkNvZGUgPT0gbnVsbCkKICAgICAgICAgICAgZmF1bHRT dWJDb2RlID0gbmV3IFZlY3RvcigpOwogICAgICAgIGZhdWx0U3ViQ29kZS5hZGQobmV3IFFOYW1l KENvbnN0YW50cy5OU19VUklfQVhJUywgY29kZSkpOwogICAgfQoKICAgIC8qKgogICAgICogVGhp cyBpcyBuZXcgaW4gU09BUCAxLjIsIGlnbm9yZWQgaW4gU09BUCAxLjEKICAgICAqIEByZXR1cm4K ICAgICAqLwogICAgcHVibGljIHZvaWQgYWRkRmF1bHRTdWJDb2RlKFFOYW1lIGNvZGUpIHsKICAg ICAgICBpZiAoZmF1bHRTdWJDb2RlID09IG51bGwpCiAgICAgICAgICAgIGZhdWx0U3ViQ29kZSA9 IG5ldyBWZWN0b3IoKTsKICAgICAgICBmYXVsdFN1YkNvZGUuYWRkKGNvZGUpOwogICAgfQoKICAg IC8qKgogICAgICogVGhpcyBpcyBuZXcgaW4gU09BUCAxLjIsIGlnbm9yZWQgaW4gU09BUCAxLjEK ICAgICAqIEByZXR1cm4KICAgICAqLwogICAgcHVibGljIHZvaWQgY2xlYXJGYXVsdFN1YkNvZGVz KCkgewogICAgICAgIGZhdWx0U3ViQ29kZSA9IG51bGw7CiAgICB9CgogICAgcHVibGljIFFOYW1l IGdldEZhdWx0Q29kZSgpIHsKICAgICAgICByZXR1cm4oZmF1bHRDb2RlKTsKICAgIH0KCiAgICBw dWJsaWMgUU5hbWVbXSBnZXRGYXVsdFN1YkNvZGVzKCkgewogICAgICAgIGlmIChmYXVsdFN1YkNv ZGUgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgUU5hbWVbXSBxID0g bmV3IFFOYW1lW2ZhdWx0U3ViQ29kZS5zaXplKCldOwogICAgICAgIHJldHVybiAoUU5hbWVbXSlm YXVsdFN1YkNvZGUudG9BcnJheShxKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRGYXVsdFN0 cmluZyhTdHJpbmcgc3RyKSB7CiAgICAgICAgaWYgKHN0ciAhPSBudWxsKSB7CiAgICAgICAgICAg IGZhdWx0U3RyaW5nID0gc3RyIDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmYXVsdFN0 cmluZyA9ICIiOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldEZhdWx0U3Ry aW5nKCkgewogICAgICAgIHJldHVybiggZmF1bHRTdHJpbmcgKTsKICAgIH0KCiAgICAvKioKICAg ICAqIFRoaXMgaXMgU09BUCAxLjIgZXF1aXZhbGVudCBvZiB7QGxpbmsgI3NldEZhdWx0U3RyaW5n KGphdmEubGFuZy5TdHJpbmcpfQogICAgICogQHJldHVybgogICAgICovCiAgICBwdWJsaWMgdm9p ZCBzZXRGYXVsdFJlYXNvbihTdHJpbmcgc3RyKSB7CiAgICAgICAgc2V0RmF1bHRTdHJpbmcoc3Ry KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgaXMgU09BUCAxLjIgZXF1aXZhbGVudCBvZiB7 QGxpbmsgI2dldEZhdWx0U3RyaW5nKCl9CiAgICAgKiBAcmV0dXJuCiAgICAgKi8KICAgIHB1Ymxp YyBTdHJpbmcgZ2V0RmF1bHRSZWFzb24oKSB7CiAgICAgICAgcmV0dXJuIGdldEZhdWx0U3RyaW5n KCk7CiAgICB9CgoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmF1bHRBY3RvcigpIHsKICAgICAgICBy ZXR1cm4oIGZhdWx0QWN0b3IgKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRGYXVsdEFjdG9y KFN0cmluZyBhY3RvcikgewogICAgICAgIGZhdWx0QWN0b3IgPSBhY3RvciA7CiAgICB9CgogICAg LyoqCiAgICAgKiBUaGlzIGlzIFNPQVAgMS4yIGVxdWl2YWxlbnQgb2Yge0BsaW5rICNnZXRGYXVs dEFjdG9yKCl9CiAgICAgKiBAcmV0dXJuCiAgICAgKi8KICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmF1 bHRSb2xlKCkgewogICAgICAgIHJldHVybiBnZXRGYXVsdEFjdG9yKCk7CiAgICB9CgogICAgLyoq CiAgICAgKiBUaGlzIGlzIFNPQVAgMS4yIGVxdWl2YWxlbnQgb2Yge0BsaW5rICNzZXRGYXVsdEFj dG9yKGphdmEubGFuZy5TdHJpbmcpfQogICAgICogQHJldHVybgogICAgICovCiAgICBwdWJsaWMg dm9pZCBzZXRGYXVsdFJvbGUoU3RyaW5nIHJvbGUpIHsKICAgICAgICBzZXRGYXVsdEFjdG9yKHJv bGUpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBpcyBuZXcgaW4gU09BUCAxLjIKICAgICAq IEByZXR1cm4KICAgICAqLwogICAgcHVibGljIFN0cmluZyBnZXRGYXVsdE5vZGUoKSB7CiAgICAg ICAgcmV0dXJuKCBmYXVsdE5vZGUgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgaXMgbmV3 IGluIFNPQVAgMS4yCiAgICAgKiBAcmV0dXJuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHNldEZh dWx0Tm9kZShTdHJpbmcgbm9kZSkgewogICAgICAgIGZhdWx0Tm9kZSA9IG5vZGU7CiAgICB9Cgog ICAgcHVibGljIHZvaWQgc2V0RmF1bHREZXRhaWwoRWxlbWVudFtdIGRldGFpbHMpIHsKICAgICAg ICBpZiAoIGRldGFpbHMgPT0gbnVsbCApIHJldHVybiA7CiAgICAgICAgZmF1bHREZXRhaWxzID0g bmV3IFZlY3RvciggZGV0YWlscy5sZW5ndGggKTsKICAgICAgICBmb3IgKCBpbnQgbG9vcCA9IDAg OyBsb29wIDwgZGV0YWlscy5sZW5ndGggOyBsb29wKysgKQogICAgICAgICAgICBmYXVsdERldGFp bHMuYWRkKCBkZXRhaWxzW2xvb3BdICk7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0RmF1bHRE ZXRhaWxTdHJpbmcoU3RyaW5nIGRldGFpbHMpIHsKICAgICAgICBmYXVsdERldGFpbHMgPSBuZXcg VmVjdG9yKCk7CiAgICAgICAgRG9jdW1lbnQgZG9jID0gWE1MVXRpbHMubmV3RG9jdW1lbnQoKTsK ICAgICAgICBFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgic3RyaW5nIik7CiAg ICAgICAgVGV4dCB0ZXh0ID0gZG9jLmNyZWF0ZVRleHROb2RlKGRldGFpbHMpOwogICAgICAgIGVs ZW1lbnQuYXBwZW5kQ2hpbGQodGV4dCk7CiAgICAgICAgZmF1bHREZXRhaWxzLmFkZChlbGVtZW50 KTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBhZGRGYXVsdERldGFpbFN0cmluZyhTdHJpbmcgZGV0 YWlsKSB7CiAgICAgICAgaWYoZmF1bHREZXRhaWxzID09IG51bGwpCiAgICAgICAgICAgIGZhdWx0 RGV0YWlscyA9IG5ldyBWZWN0b3IoKTsKICAgICAgICBEb2N1bWVudCBkb2MgPSBYTUxVdGlscy5u ZXdEb2N1bWVudCgpOwogICAgICAgIEVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50 KCJzdHJpbmciKTsKICAgICAgICBUZXh0IHRleHQgPSBkb2MuY3JlYXRlVGV4dE5vZGUoZGV0YWls KTsKICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHQpOwogICAgICAgIGZhdWx0RGV0YWls cy5hZGQoZWxlbWVudCk7CiAgICB9CgogICAgcHVibGljIEVsZW1lbnRbXSBnZXRGYXVsdERldGFp bHMoKSB7CiAgICAgICAgaWYgKGZhdWx0RGV0YWlscyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAg ICAgICBFbGVtZW50IHJlc3VsdFtdID0gbmV3IEVsZW1lbnRbZmF1bHREZXRhaWxzLnNpemUoKV07 CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPHJlc3VsdC5sZW5ndGg7IGkrKykKICAgICAgICAgICAg cmVzdWx0W2ldID0gKEVsZW1lbnQpIGZhdWx0RGV0YWlscy5lbGVtZW50QXQoaSk7CiAgICAgICAg cmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBvdXRwdXQoU2VyaWFsaXphdGlv bkNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CgogICAgICAgIFNPQVBFbnZlbG9w ZSBlbnZlbG9wZSA9IG5ldyBTT0FQRW52ZWxvcGUoKTsKCiAgICAgICAgU09BUEZhdWx0IGZhdWx0 ID0gbmV3IFNPQVBGYXVsdCh0aGlzKTsKICAgICAgICBlbnZlbG9wZS5hZGRCb2R5RWxlbWVudChm YXVsdCk7CgogICAgICAgIC8vIGFkZCBhbnkgaGVhZGVycyB3ZSBuZWVkCiAgICAgICAgaWYgKGZh dWx0SGVhZGVycyAhPSBudWxsKSB7CiAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGZhdWx0 SGVhZGVycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKICAgICAgICAgICAgICAgIFNPQVBI ZWFkZXJFbGVtZW50IGhlYWRlciA9IChTT0FQSGVhZGVyRWxlbWVudCkgaS5uZXh0KCk7CiAgICAg ICAgICAgICAgICBlbnZlbG9wZS5hZGRIZWFkZXIoaGVhZGVyKTsKICAgICAgICAgICAgfQogICAg ICAgIH0KCiAgICAgICAgZW52ZWxvcGUub3V0cHV0KGNvbnRleHQpOwogICAgfQoKICAgIHB1Ymxp YyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIGZhdWx0U3RyaW5nOwogICAgfQoK ICAgIHB1YmxpYyB2b2lkIHByaW50U3RhY2tUcmFjZShQcmludFN0cmVhbSBwcykgewogICAgICAg IHBzLnByaW50bG4oZHVtcFRvU3RyaW5nKCkpOwogICAgICAgIHN1cGVyLnByaW50U3RhY2tUcmFj ZShwcyk7CiAgICB9CgogICAgcHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKGphdmEuaW8uUHJp bnRXcml0ZXIgcHcpIHsKICAgICAgICBwdy5wcmludGxuKGR1bXBUb1N0cmluZygpKTsKICAgICAg ICBzdXBlci5wcmludFN0YWNrVHJhY2UocHcpOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGEg U09BUCBoZWFkZXIgd2hpY2ggc2hvdWxkIGJlIHNlcmlhbGl6ZWQgYWxvbmcgd2l0aCB0aGUKICAg ICAqIGZhdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBoZWFkZXIgYSBTT0FQSGVhZGVyRWxlbWVu dCBjb250YWluaW5nIHNvbWUgZmF1bHQtcmVsZXZhbnQgc3R1ZmYKICAgICAqLwogICAgcHVibGlj IHZvaWQgYWRkSGVhZGVyKFNPQVBIZWFkZXJFbGVtZW50IGhlYWRlcikgewogICAgICAgIGlmIChm YXVsdEhlYWRlcnMgPT0gbnVsbCkgewogICAgICAgICAgICBmYXVsdEhlYWRlcnMgPSBuZXcgQXJy YXlMaXN0KCk7CiAgICAgICAgfQogICAgICAgIGZhdWx0SGVhZGVycy5hZGQoaGVhZGVyKTsKICAg IH0KCiAgICBwdWJsaWMgdm9pZCBjbGVhckhlYWRlcnMoKSB7CiAgICAgICAgZmF1bHRIZWFkZXJz ID0gbnVsbDsKICAgIH0KfTsK ------_=_NextPart_001_01C28BDA.176EA13A Content-Type: application/octet-stream; name="Constants.java" Content-Transfer-Encoding: base64 Content-Description: Constants.java Content-Disposition: attachment; filename="Constants.java" LyoKICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQogKgogKgogKiBD b3B5cmlnaHQgKGMpIDIwMDEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp Z2h0cwogKiByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0 OgogKgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICoKICogMy4gVGhlIGVuZC11c2VyIGRvY3Vt ZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCiAqICAgIGlmIGFueSwg bXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CiAqICAgICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQogKiAgICAgICAgQXBh Y2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKICogICAg QWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdh cmUgaXRzZWxmLAogKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3ds ZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgogKgogKiA0LiBUaGUgbmFtZXMgIkF4aXMiIGFuZCAi QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKICogICAgbm90IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAqICAgIHNvZnR3YXJl IHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgogKiAgICBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KICoKICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIs CiAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgogKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRh dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTRUQgT1IgSU1QTElFRAogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCiAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCiAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCiAqIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAq IFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBi eSBtYW55CiAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24uICBGb3IgbW9yZQogKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJl IEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgogKi8K CnBhY2thZ2Ugb3JnLmFwYWNoZS5heGlzOwoKaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7 CmltcG9ydCBvcmcuYXBhY2hlLmF4aXMuc2NoZW1hLlNjaGVtYVZlcnNpb24xOTk5OwppbXBvcnQg b3JnLmFwYWNoZS5heGlzLnNjaGVtYS5TY2hlbWFWZXJzaW9uMjAwMDsKaW1wb3J0IG9yZy5hcGFj aGUuYXhpcy5zY2hlbWEuU2NoZW1hVmVyc2lvbjIwMDE7CgppbXBvcnQgb3JnLmFwYWNoZS5heGlz LnNvYXAuU09BUENvbnN0YW50czsKCmltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwoK cHVibGljIGNsYXNzIENvbnN0YW50cyB7CiAgICAvLyBTb21lIGNvbW1vbiBDb25zdGFudHMgdGhh dCBzaG91bGQgYmUgdXNlZCBpbiBsb2NhbCBoYW5kbGVyIG9wdGlvbnMKICAgIC8vIChOb3QgYWxs IGltcGxlbWVudGF0aW9ucyB3aWxsIGhhdmUgdGhlc2UgY29uY2VwdHMgLSBmb3IgZXhhbXBsZQog ICAgLy8gIG5vdCBhbGwgRW5naW5lcyB3aWxsIGhhdmUgbm90aW9uIG9mIHJlZ2lzdHJpZXMgYnV0 IGRlZmluaW5nIHRoZXNlCiAgICAvLyAgaGVyZSBzaG91bGQgYWxsb3cgcGVvcGxlIHRvIGFzayBp ZiB0aGV5IGV4aXN0KQogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCiAgICAvLyBOYW1lc3BhY2UgUHJl Zml4IENvbnN0YW50cwogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgU3RyaW5nIE5TX1BSRUZJWF9TT0FQX0VOViAgID0gInNvYXBlbnYiOwogICAgcHVibGljIHN0 YXRpYyBmaW5hbCBTdHJpbmcgTlNfUFJFRklYX1NPQVBfRU5DICAgPSAic29hcGVuYyI7CiAgICBw dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19QUkVGSVhfU0NIRU1BX1hTSSA9ICJ4c2kiIDsK ICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1BSRUZJWF9TQ0hFTUFfWFNEID0gInhz ZCIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfUFJFRklYX1dTREwgICAgICAg PSAid3NkbCIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfUFJFRklYX1dTRExf U09BUCAgPSAid3NkbHNvYXAiOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfUFJF RklYX1hNTFNPQVAgICAgPSAiYXBhY2hlc29hcCI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0 cmluZyBOU19QUkVGSVhfWE1MICAgICAgICA9ICJ4bWwiOwoKICAgIC8vIEF4aXMgTmFtZXNwYWNl cwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX0FYSVMgPSAiaHR0cDovL3ht bC5hcGFjaGUub3JnL2F4aXMvIjsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VS SV9YTUxTT0FQID0gImh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWwtc29hcCI7CgogICAgLy8gU3Bl Y2lhbCBuYW1lc3BhY2UgVVJJIHRvIGluZGljYXRlIGFuICJhdXRvbWF0aWNhbGx5IiBzZXJpYWxp emVkIEphdmEKICAgIC8vIHR5cGUuICBUaGlzIGFsbG93cyB1cyB0byB1c2UgdHlwZXMgd2l0aG91 dCBuZWVkaW5nIGV4cGxpY2l0IG1hcHBpbmdzLAogICAgLy8gc3VjaCB0aGF0IEphdmEgY2xhc3Nl cyBsaWtlICJvcmcuZm9vLkJhciIgbWFwIHRvIFFOYW1lcyBsaWtlCiAgICAvLyB7aHR0cDovL3ht bC5hcGFjaGUub3JnL2F4aXMvamF2YX1vcmcuZm9vLkJhcgogICAgcHVibGljIHN0YXRpYyBmaW5h bCBTdHJpbmcgTlNfVVJJX0pBVkEgPSAiaHR0cDovL3htbC5hcGFjaGUub3JnL2F4aXMvamF2YSI7 CgogICAgLy8KICAgIC8vIERlZmF1bHQgU09BUCB2ZXJzaW9uCiAgICAvLwogICAgcHVibGljIHN0 YXRpYyBmaW5hbCBTT0FQQ29uc3RhbnRzIERFRkFVTFRfU09BUF9WRVJTSU9OID0KICAgICAgICBT T0FQQ29uc3RhbnRzLlNPQVAxMV9DT05TVEFOVFM7CgogICAgLy8KICAgIC8vIFNPQVAtRU5WIE5h bWVzcGFjZXMKICAgIC8vCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfU09BUDEx X0VOViA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9zY2hlbWFzLnht bHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiA7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmlu ZyBVUklfU09BUDEyX0VOViA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0 dHA6Ly93d3cudzMub3JnLzIwMDIvMDYvc29hcC1lbnZlbG9wZSI7CiAgICBwdWJsaWMgc3RhdGlj IGZpbmFsIFN0cmluZyBVUklfREVGQVVMVF9TT0FQX0VOViA9CiAgICAgICAgREVGQVVMVF9TT0FQ X1ZFUlNJT04uZ2V0RW52ZWxvcGVVUkkoKTsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmlu Z1tdIFVSSVNfU09BUF9FTlYgPSB7CiAgICAgICAgVVJJX1NPQVAxMV9FTlYsCiAgICAgICAgVVJJ X1NPQVAxMl9FTlYsCiAgICB9OwoKICAgIC8vIENvbnN0YW50IG5hbWUgb2YgdGhlIGVudGVycHJp c2Utc3R5bGUgbG9nZ2luZyBjYXRlZ29yeS4KICAgIC8vIFRoZSBlbnRlcnByaXNlIGNhdGVnb3J5 IGlzIGZvciBzdHVmZiB0aGF0IGFuIGVudGVycHJpc2UgcHJvZHVjdCBtaWdodAogICAgLy8gd2Fu dCB0byB0cmFjaywgYnV0IGluIGEgc2ltcGxlIGVudmlyb25tZW50IChsaWtlIHRoZSBBWElTIGJ1 aWxkKSB3b3VsZAogICAgLy8gYmUgbm90aGluZyBtb3JlIHRoYW4gYSBudWlzYW5jZS4KICAgIHB1 YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOVEVSUFJJU0VfTE9HX0NBVEVHT1JZID0gIm9yZy5h cGFjaGUuYXhpcy5lbnRlcnByaXNlIjsKCiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHdo aWNoIGFjY2VwdHMgeHNkOmFueSBjb250ZW50IGluIEJlYW5zICovCiAgICBwdWJsaWMgc3RhdGlj IGZpbmFsIFN0cmluZyBBTllDT05URU5UID0gIl9hbnkiOwoKICAgIC8qKgogICAgICogUmV0dXJu cyB0cnVlIGlmIFNPQVBfRU5WIE5hbWVzcGFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGJv b2xlYW4gaXNTT0FQX0VOVihTdHJpbmcgcykgewogICAgICAgIGZvciAoaW50IGk9MDsgaTxVUklT X1NPQVBfRU5WLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChVUklTX1NPQVBfRU5WW2ld LmVxdWFscyhzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKCiAgICBwdWJsaWMgc3RhdGlj IGZpbmFsIFN0cmluZyBVUklfTElURVJBTF9FTkMgPSAiIjsKCiAgICAvLwogICAgLy8gU09BUC1F TkMgTmFtZXNwYWNlcwogICAgLy8KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9T T0FQMTFfRU5DID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3NjaGVt YXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIDsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg U3RyaW5nIFVSSV9TT0FQMTJfRU5DID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNi9zb2FwLWVuY29kaW5nIjsKICAgIHB1YmxpYyBz dGF0aWMgZmluYWwgU3RyaW5nIFVSSV9ERUZBVUxUX1NPQVBfRU5DID0KICAgICAgICBERUZBVUxU X1NPQVBfVkVSU0lPTi5nZXRFbmNvZGluZ1VSSSgpOwoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg U3RyaW5nW10gVVJJU19TT0FQX0VOQyA9IHsKICAgICAgICBVUklfU09BUDExX0VOQywKICAgICAg ICBVUklfU09BUDEyX0VOQywKICAgIH07CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYg U09BUF9FTkMgTmFtZXNwYWNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NP QVBfRU5DKFN0cmluZyBzKSB7CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPFVSSVNfU09BUF9FTkMu bGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKFVSSVNfU09BUF9FTkNbaV0uZXF1YWxzKHMp KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIHV0aWxpdHkg cm91dGluZSByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgd2hpY2ggbWlnaHQKICAg ICAqIGJlIGluIG9uZSBvZiBzZXZlcmFsIG5hbWVzcGFjZXMuCiAgICAgKgogICAgICogQHBhcmFt IGF0dHJpYnV0ZXMgdGhlIGF0dHJpYnV0ZXMgdG8gc2VhcmNoCiAgICAgKiBAcGFyYW0gc2VhcmNo IGFuIGFycmF5IG9mIG5hbWVzcGFjZSBVUkkgc3RyaW5ncyB0byBzZWFyY2gKICAgICAqIEBwYXJh bSBsb2NhbFBhcnQgaXMgdGhlIGxvY2FsIHBhcnQgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lCiAgICAg KiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG9yIG51bGwKICAgICAqLwogICAg cHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VmFsdWUoQXR0cmlidXRlcyBhdHRyaWJ1dGVzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIFtdIHNlYXJjaCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbFBhcnQpIHsKICAgICAgICBpZiAo YXR0cmlidXRlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBzZWFy Y2ggPT0gbnVsbCB8fCBsb2NhbFBhcnQgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7 CgogICAgICAgIGludCBsZW4gPSBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOwoKICAgICAgICBmb3Ig KGludCBpPTA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5nZXRM b2NhbE5hbWUoaSkuZXF1YWxzKGxvY2FsUGFydCkpIHsKICAgICAgICAgICAgICAgIFN0cmluZyB1 cmkgPSBhdHRyaWJ1dGVzLmdldFVSSShpKTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsg ajxzZWFyY2gubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoW2pd LmVxdWFscyh1cmkpKSByZXR1cm4gYXR0cmlidXRlcy5nZXRWYWx1ZShpKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9 CgogICAgLyoqCiAgICAgKiBTZWFyY2ggYW4gYXR0cmlidXRlIGNvbGxlY3Rpb24gZm9yIGEgbGlz dCBvZiBRTmFtZXMsIHJldHVybmluZwogICAgICogdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBvbmUg Zm91bmQsIG9yIG51bGwgaWYgbm9uZSB3ZXJlIGZvdW5kLgogICAgICoKICAgICAqIEBwYXJhbSBh dHRyaWJ1dGVzCiAgICAgKiBAcGFyYW0gc2VhcmNoCiAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBv ZiB0aGUgYXR0cmlidXRlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFZhbHVl KEF0dHJpYnV0ZXMgYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFOYW1lIFtdIHNlYXJjaCkgewogICAgICAgIGlmIChhdHRyaWJ1dGVzID09IG51bGwgfHwgc2Vh cmNoID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICBpZiAoYXR0cmli dXRlcy5nZXRMZW5ndGgoKSA9PSAwKSByZXR1cm4gbnVsbDsKCiAgICAgICAgU3RyaW5nIHZhbHVl ID0gbnVsbDsKICAgICAgICBmb3IgKGludCBpPTA7ICh2YWx1ZSA9PSBudWxsKSAmJiAoaSA8IHNl YXJjaC5sZW5ndGgpOyBpKyspIHsKICAgICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLmdldFZh bHVlKHNlYXJjaFtpXS5nZXROYW1lc3BhY2VVUkkoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlYXJjaFtpXS5nZXRMb2NhbFBhcnQoKSk7CiAgICAgICAgfQoKICAg ICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBlcXVhbHMKICAgICAqIFRo ZSBmaXJzdCBRTmFtZSBpcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBuYW1lLiAgVGhlIHNl Y29uZCBxbmFtZSBpcyBjb21wYXJlZAogICAgICogd2l0aCB0aGUgZmlyc3QgY29uc2lkZXJpbmcg YWxsIG5hbWVzcGFjZSB1cmkgdmVyc2lvbnMuCiAgICAgKiBAcGFyYW0gZmlyc3QgQ3VycmVudGx5 IHN1cHBvcnRlZCBRTmFtZQogICAgICogQHBhcmFtIHNlY29uZCBhbnkgcW5hbWUKICAgICAqIEBy ZXR1cm4gdHJ1ZSBpZiB0aGUgcW5hbWVzIHJlcHJlc2VudCB0aGUgc2FtZSBxbmFtZSAocGFzdGVy IG5hbWVzcGFjZSB1cmkgdmVyc2lvbnMgY29uc2lkZXJlZAogICAgICovCiAgICBwdWJsaWMgc3Rh dGljIGJvb2xlYW4gZXF1YWxzKFFOYW1lIGZpcnN0LCBRTmFtZSBzZWNvbmQpIHsKICAgICAgICBp ZiAoZmlyc3QgPT0gc2Vjb25kKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0K ICAgICAgICBpZiAoZmlyc3Q9PW51bGwgfHwgc2Vjb25kPT1udWxsKSB7CiAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGZpcnN0LmVxdWFscyhzZWNvbmQpKSB7 CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWZpcnN0Lmdl dExvY2FsUGFydCgpLmVxdWFscyhzZWNvbmQuZ2V0TG9jYWxQYXJ0KCkpKSB7CiAgICAgICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBm aXJzdC5nZXROYW1lc3BhY2VVUkkoKTsKICAgICAgICBTdHJpbmdbXSBzZWFyY2ggPSBudWxsOwog ICAgICAgIGlmIChuYW1lc3BhY2VVUkkuZXF1YWxzKFVSSV9ERUZBVUxUX1NPQVBfRU5DKSkKICAg ICAgICAgICAgc2VhcmNoID0gVVJJU19TT0FQX0VOQzsKICAgICAgICBlbHNlIGlmIChuYW1lc3Bh Y2VVUkkuZXF1YWxzKFVSSV9ERUZBVUxUX1NPQVBfRU5WKSkKICAgICAgICAgICAgc2VhcmNoID0g VVJJU19TT0FQX0VOVjsKICAgICAgICBlbHNlIGlmIChuYW1lc3BhY2VVUkkuZXF1YWxzKFVSSV9E RUZBVUxUX1NDSEVNQV9YU0QpKQogICAgICAgICAgICBzZWFyY2ggPSBVUklTX1NDSEVNQV9YU0Q7 CiAgICAgICAgZWxzZSBpZiAobmFtZXNwYWNlVVJJLmVxdWFscyhVUklfREVGQVVMVF9TQ0hFTUFf WFNJKSkKICAgICAgICAgICAgc2VhcmNoID0gVVJJU19TQ0hFTUFfWFNJOwogICAgICAgIGVsc2UK ICAgICAgICAgICAgc2VhcmNoID0gbmV3IFN0cmluZ1tdIHtuYW1lc3BhY2VVUkl9OwoKICAgICAg ICBmb3IgKGludCBpPTA7IGkgPCBzZWFyY2gubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYg KHNlYXJjaFtpXS5lcXVhbHMoc2Vjb25kLmdldE5hbWVzcGFjZVVSSSgpKSkgewogICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgfQoKICAgIC8vIE1pc2MgU09BUCBOYW1lc3BhY2VzCiAgICBwdWJsaWMgc3Rh dGljIGZpbmFsIFN0cmluZyBVUklfU09BUDExX05FWFRfQUNUT1IgPQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvYWN0 b3IvbmV4dCIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1NPQVAxMl9ORVhU X0FDVE9SID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3 LnczLm9yZy8yMDAyLzA2L3NvYXAtZW52ZWxvcGUvYWN0b3IvbmV4dCI7CgogICAgcHVibGljIHN0 YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1NPQVAxMl9GQVVMVCA9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNi9zb2FwLWZhdWx0cyI7 CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1NPQVAxMl9VUEdSQURFID0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAy LzA2L3NvYXAtdXBncmFkZSI7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1NP QVAxMl9SUEMgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93 d3cudzMub3JnLzIwMDIvMDYvc29hcC1ycGMiOwoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3Ry aW5nIFVSSV9TT0FQMTFfSFRUUCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIjsKICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgU3RyaW5nIFVSSV9TT0FQMTJfSFRUUCA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA2L2h0dHAiOwoKICAgIHB1Ymxp YyBzdGF0aWMgZmluYWwgU3RyaW5nIE5TX1VSSV9YTUxOUyA9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7CgogICAg cHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1hNTCA9CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3Bh Y2UiOwoKICAgIC8vCiAgICAvLyBTY2hlbWEgWFNEIE5hbWVzcGFjZXMKICAgIC8vCiAgICBwdWJs aWMgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfMTk5OV9TQ0hFTUFfWFNEID0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1M U2NoZW1hIjsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV8yMDAwX1NDSEVNQV9Y U0QgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53 My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEiOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg VVJJXzIwMDFfU0NIRU1BX1hTRCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7CgogICAgcHVibGljIHN0 YXRpYyBmaW5hbCBTdHJpbmcgVVJJX0RFRkFVTFRfU0NIRU1BX1hTRCA9IFVSSV8yMDAxX1NDSEVN QV9YU0Q7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBVUklTX1NDSEVNQV9YU0Qg PSB7CiAgICAgICAgVVJJXzE5OTlfU0NIRU1BX1hTRCwKICAgICAgICBVUklfMjAwMF9TQ0hFTUFf WFNELAogICAgICAgIFVSSV8yMDAxX1NDSEVNQV9YU0QsCiAgICB9OwogICAgcHVibGljIHN0YXRp YyBmaW5hbCBRTmFtZSBbXSBRTkFNRVNfTklMID0gewogICAgICAgIFNjaGVtYVZlcnNpb24xOTk5 LlFOQU1FX05JTCwKICAgICAgICBTY2hlbWFWZXJzaW9uMjAwMC5RTkFNRV9OSUwsCiAgICAgICAg U2NoZW1hVmVyc2lvbjIwMDEuUU5BTUVfTklMCiAgICB9OwoKICAgIC8qKgogICAgICogUmV0dXJu cyB0cnVlIGlmIFNjaGVtYVhTRCBOYW1lc3BhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBi b29sZWFuIGlzU2NoZW1hWFNEKFN0cmluZyBzKSB7CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPFVS SVNfU0NIRU1BX1hTRC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoVVJJU19TQ0hFTUFf WFNEW2ldLmVxdWFscyhzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vCiAgICAv LyBTY2hlbWEgWFNJIE5hbWVzcGFjZXMKICAgIC8vCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0 cmluZyBVUklfMTk5OV9TQ0hFTUFfWFNJID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWE1MU2NoZW1hLWluc3RhbmNlIjsKICAgIHB1Ymxp YyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV8yMDAwX1NDSEVNQV9YU0kgPQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9YTUxTY2hlbWEtaW5z dGFuY2UiOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJXzIwMDFfU0NIRU1BX1hT SSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8y MDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBV UklfREVGQVVMVF9TQ0hFTUFfWFNJID0gVVJJXzIwMDFfU0NIRU1BX1hTSTsKCiAgICBwdWJsaWMg c3RhdGljIGZpbmFsIFN0cmluZ1tdIFVSSVNfU0NIRU1BX1hTSSA9IHsKICAgICAgICBVUklfMTk5 OV9TQ0hFTUFfWFNJLAogICAgICAgIFVSSV8yMDAwX1NDSEVNQV9YU0ksCiAgICAgICAgVVJJXzIw MDFfU0NIRU1BX1hTSSwKICAgIH07CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgU2No ZW1hWFNJIE5hbWVzcGFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTY2hl bWFYU0koU3RyaW5nIHMpIHsKICAgICAgICBmb3IgKGludCBpPTA7IGk8VVJJU19TQ0hFTUFfWFNJ Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChVUklTX1NDSEVNQV9YU0lbaV0uZXF1YWxz KHMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8KICAgIC8vIFdTREwgTmFtZXNw YWNlCiAgICAvLwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfVVJJX1dTREwxMSA9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2Fw Lm9yZy93c2RsLyI7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBOU19VUklTX1dT REwgPSB7CiAgICAgICAgTlNfVVJJX1dTREwxMSwKICAgIH07CgogICAgLyoqCiAgICAgKiBSZXR1 cm5zIHRydWUgaWYgV1NETCBOYW1lc3BhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBib29s ZWFuIGlzV1NETChTdHJpbmcgcykgewogICAgICAgIGZvciAoaW50IGk9MDsgaTxOU19VUklTX1dT REwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKE5TX1VSSVNfV1NETFtpXS5lcXVhbHMo cykpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLwogICAgLy8gV1NETCBTT0FQIE5h bWVzcGFjZQogICAgLy8KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9XU0RMMTFf U09BUCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vc2NoZW1hcy54 bWxzb2FwLm9yZy93c2RsL3NvYXAvIjsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1td IE5TX1VSSVNfV1NETF9TT0FQID0gewogICAgICAgIFVSSV9XU0RMMTFfU09BUCwKICAgIH07Cgog ICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgV1NETCBTT0FQIE5hbWVzcGFjZQogICAgICov CiAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXU0RMU09BUChTdHJpbmcgcykgewogICAgICAg IGZvciAoaW50IGk9MDsgaTxOU19VUklTX1dTRExfU09BUC5sZW5ndGg7IGkrKykgewogICAgICAg ICAgICBpZiAoTlNfVVJJU19XU0RMX1NPQVBbaV0uZXF1YWxzKHMpKSB7CiAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFs c2U7CiAgICB9CgogICAgLy8gQXhpcyBNZWNoYW5pc20gVHlwZQogICAgcHVibGljIHN0YXRpYyBm aW5hbCBTdHJpbmcgQVhJU19TQVggPSAiQXhpcyBTQVggTWVjaGFuaXNtIjsKCiAgICBwdWJsaWMg c3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0VOVkVMT1BFID0gIkVudmVsb3BlIiA7CiAgICBwdWJs aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0hFQURFUiAgID0gIkhlYWRlciIgOwogICAgcHVi bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9CT0RZICAgICA9ICJCb2R5IiA7CiAgICBwdWJs aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0ZBVUxUICAgID0gIkZhdWx0IiA7CgogICAgcHVi bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9NSVNVTkRFUlNUT09EID0gIk1pc3VuZGVyc3Rv b2QiOwoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFVTFRfQ09ERSAgID0g ImZhdWx0Y29kZSIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9GQVVMVF9T VFJJTkcgPSAiZmF1bHRzdHJpbmciIDsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVM RU1fRkFVTFRfREVUQUlMID0gImRldGFpbCIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJp bmcgRUxFTV9GQVVMVF9BQ1RPUiAgPSAiZmF1bHRhY3RvciIgOwoKICAgIHB1YmxpYyBzdGF0aWMg ZmluYWwgU3RyaW5nIEVMRU1fRkFVTFRfQ09ERV9TT0FQMTIgPSAiQ29kZSIgOwogICAgcHVibGlj IHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9GQVVMVF9WQUxVRV9TT0FQMTIgPSAiVmFsdWUiIDsK ICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFVTFRfU1VCQ09ERV9TT0FQMTIg PSAiU3ViY29kZSIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFTV9GQVVMVF9S RUFTT05fU09BUDEyID0gIlJlYXNvbiIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg RUxFTV9GQVVMVF9OT0RFX1NPQVAxMiA9ICJOb2RlIiA7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFs IFN0cmluZyBFTEVNX0ZBVUxUX1JPTEVfU09BUDEyID0gIlJvbGUiIDsKICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgU3RyaW5nIEVMRU1fRkFVTFRfREVUQUlMX1NPQVAxMiA9ICJEZXRhaWwiIDsKCiAg ICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01VU1RfVU5ERVJTVEFORCA9ICJtdXN0 VW5kZXJzdGFuZCIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9FTkNPRElO R19TVFlMRSAgPSAiZW5jb2RpbmdTdHlsZSIgOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJp bmcgQVRUUl9BQ1RPUiAgICAgICAgICAgPSAiYWN0b3IiIDsKICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgU3RyaW5nIEFUVFJfUk9MRSAgICAgICAgICAgID0gInJvbGUiIDsKICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgU3RyaW5nIEFUVFJfUk9PVCAgICAgICAgICAgID0gInJvb3QiIDsKICAgIHB1Ymxp YyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSUQgICAgICAgICAgICAgID0gImlkIiA7CiAgICBw dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0hSRUYgICAgICAgICAgICA9ICJocmVmIiA7 CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1FOQU1FICAgICAgICAgICA9ICJx bmFtZSI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FSUkFZX1RZUEUgICAg ICA9ICJhcnJheVR5cGUiOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9PRkZT RVQgICAgICAgICAgPSAib2Zmc2V0IjsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFU VFJfUE9TSVRJT04gICAgICAgID0gInBvc2l0aW9uIjsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg U3RyaW5nIEFUVFJfVFlQRSAgICAgICAgICAgID0gInR5cGUiOwogICAgcHVibGljIHN0YXRpYyBm aW5hbCBTdHJpbmcgQVRUUl9IQU5ETEVSSU5GT0NIQUlOID0gImhhbmRsZXJJbmZvQ2hhaW4iOwoK ICAgIC8vIEZhdWx0IENvZGVzCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgcHVibGljIHN0YXRp YyBmaW5hbCBTdHJpbmcgRkFVTFRfU0VSVkVSX0dFTkVSQUwgPQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VydmVyLmdlbmVyYWxFeGNlcHRpb24i OwoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBVUxUX1NFUlZFUl9VU0VSID0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlcnZlci51 c2VyRXhjZXB0aW9uIjsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgRkFVTFRfTVVTVFVO REVSU1RBTkQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFFOYW1lKFVS SV9TT0FQMTFfRU5WLCAiTXVzdFVuZGVyc3RhbmQiKTsKCgogICAgcHVibGljIHN0YXRpYyBmaW5h bCBRTmFtZSBGQVVMVF9TT0FQMTJfTVVTVFVOREVSU1RBTkQgPQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmV3IFFOYW1lKFVSSV9TT0FQMTJfRU5WLCAiTXVzdFVuZGVyc3RhbmQi KTsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIEZBVUxUX1NPQVAxMl9WRVJTSU9OTUlT TUFUQ0ggPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFFOYW1lKFVSSV9T T0FQMTJfRU5WLCAiVmVyc2lvbk1pc21hdGNoIik7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBR TmFtZSBGQVVMVF9TT0FQMTJfREFUQUVOQ09ESU5HVU5LTk9XID0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5ldyBRTmFtZShVUklfU09BUDEyX0VOViwgIkRhdGFFbmNvZGluZ1Vu a25vdyIpOwoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgRkFVTFRfU09BUDEyX1NFTkRF UiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUU5hbWUoVVJJX1NPQVAx Ml9FTlYsICJTZW5kZXIiKTsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIEZBVUxUX1NP QVAxMl9SRUNFSVZFUiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUU5h bWUoVVJJX1NPQVAxMl9FTlYsICJSZWNlaXZlciIpOwoKICAgIC8vIFFOYW1lcwogICAgLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRkFVTFRDT0RF ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUU5hbWUoIiIs IEVMRU1fRkFVTFRfQ09ERSk7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0ZB VUxUU1RSSU5HID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFFO YW1lKCIiLCBFTEVNX0ZBVUxUX1NUUklORyk7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1l IFFOQU1FX0ZBVUxUQUNUT1IgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmV3IFFOYW1lKCIiLCBFTEVNX0ZBVUxUX0FDVE9SKTsKICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgUU5hbWUgUU5BTUVfRkFVTFRERVRBSUxTID0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuZXcgUU5hbWUoIiIsIEVMRU1fRkFVTFRfREVUQUlMKTsKCiAgICBwdWJs aWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0ZBVUxUQ09ERV9TT0FQMTIgPQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBRTmFtZShVUklfU09BUDEyX0VOViwg RUxFTV9GQVVMVF9DT0RFX1NPQVAxMik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFFO QU1FX0ZBVUxUVkFMVUVfU09BUDEyID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuZXcgUU5hbWUoVVJJX1NPQVAxMl9FTlYsIEVMRU1fRkFVTFRfVkFMVUVfU09BUDEy KTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVfRkFVTFRTVUJDT0RFX1NPQVAx MiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFFOYW1lKFVS SV9TT0FQMTJfRU5WLCBFTEVNX0ZBVUxUX1NVQkNPREVfU09BUDEyKTsKICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgUU5hbWUgUU5BTUVfRkFVTFRSRUFTT05fU09BUDEyID0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUU5hbWUoVVJJX1NPQVAxMl9FTlYsIEVMRU1f RkFVTFRfUkVBU09OX1NPQVAxMik7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFN RV9GQVVMVE5PREVfU09BUDEyID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuZXcgUU5hbWUoVVJJX1NPQVAxMl9FTlYsIEVMRU1fRkFVTFRfTk9ERV9TT0FQMTIpOwog ICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRV9GQVVMVFJPTEVfU09BUDEyID0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUU5hbWUoVVJJX1NPQVAx Ml9FTlYsIEVMRU1fRkFVTFRfUk9MRV9TT0FQMTIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBR TmFtZSBRTkFNRV9GQVVMVERFVEFJTF9TT0FQMTIgPQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5ldyBRTmFtZShVUklfU09BUDEyX0VOViwgRUxFTV9GQVVMVF9ERVRB SUxfU09BUDEyKTsKCiAgICAvLyBEZWZpbmUgcW5hbWVzIGZvciB0aGUgYWxsIG9mIHRoZSBYU0Qg YW5kIFNPQVAtRU5DIGVuY29kaW5ncwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0Rf U1RSSU5HID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxUX1NDSEVNQV9YU0QsICJzdHJpbmciKTsKICAg IHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgWFNEX0JPT0xFQU4gPSBuZXcgUU5hbWUoVVJJX0RF RkFVTFRfU0NIRU1BX1hTRCwgImJvb2xlYW4iKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5h bWUgWFNEX0RPVUJMRSA9IG5ldyBRTmFtZShVUklfREVGQVVMVF9TQ0hFTUFfWFNELCAiZG91Ymxl Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9GTE9BVCA9IG5ldyBRTmFtZShV UklfREVGQVVMVF9TQ0hFTUFfWFNELCAiZmxvYXQiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg UU5hbWUgWFNEX0lOVCA9IG5ldyBRTmFtZShVUklfREVGQVVMVF9TQ0hFTUFfWFNELCAiaW50Iik7 CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9JTlRFR0VSID0gbmV3IFFOYW1lKFVS SV9ERUZBVUxUX1NDSEVNQV9YU0QsICJpbnRlZ2VyIik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFs IFFOYW1lIFhTRF9MT05HID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxUX1NDSEVNQV9YU0QsICJsb25n Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9TSE9SVCA9IG5ldyBRTmFtZShV UklfREVGQVVMVF9TQ0hFTUFfWFNELCAic2hvcnQiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg UU5hbWUgWFNEX0JZVEUgPSBuZXcgUU5hbWUoVVJJX0RFRkFVTFRfU0NIRU1BX1hTRCwgImJ5dGUi KTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgWFNEX0RFQ0lNQUwgPSBuZXcgUU5hbWUo VVJJX0RFRkFVTFRfU0NIRU1BX1hTRCwgImRlY2ltYWwiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgUU5hbWUgWFNEX0JBU0U2NCA9IG5ldyBRTmFtZShVUklfREVGQVVMVF9TQ0hFTUFfWFNELCAi YmFzZTY0QmluYXJ5Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9IRVhCSU4g PSBuZXcgUU5hbWUoVVJJX0RFRkFVTFRfU0NIRU1BX1hTRCwgImhleEJpbmFyeSIpOwogICAgcHVi bGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfQU5ZVFlQRSA9IG5ldyBRTmFtZShVUklfREVGQVVM VF9TQ0hFTUFfWFNELCAiYW55VHlwZSIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBY U0RfQU5ZID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxUX1NDSEVNQV9YU0QsICJhbnkiKTsKICAgIHB1 YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgWFNEX1FOQU1FID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxU X1NDSEVNQV9YU0QsICJRTmFtZSIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0Rf REFURVRJTUUgPSBuZXcgUU5hbWUoVVJJX0RFRkFVTFRfU0NIRU1BX1hTRCwgImRhdGVUaW1lIik7 CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9EQVRFID0gbmV3IFFOYW1lKFVSSV9E RUZBVUxUX1NDSEVNQV9YU0QsICJkYXRlIik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1l IFhTRF9USU1FID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxUX1NDSEVNQV9YU0QsICJ0aW1lIik7CiAg ICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9USU1FSU5TVEFOVDE5OTkgPSBuZXcgUU5h bWUoVVJJXzE5OTlfU0NIRU1BX1hTRCwgInRpbWVJbnN0YW50Iik7CiAgICBwdWJsaWMgc3RhdGlj IGZpbmFsIFFOYW1lIFhTRF9USU1FSU5TVEFOVDIwMDAgPSBuZXcgUU5hbWUoVVJJXzIwMDBfU0NI RU1BX1hTRCwgInRpbWVJbnN0YW50Iik7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBY U0RfTk9STUFMSVpFRFNUUklORyA9IG5ldyBRTmFtZShVUklfMjAwMV9TQ0hFTUFfWFNELCAibm9y bWFsaXplZFN0cmluZyIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfVE9LRU4g PSBuZXcgUU5hbWUoVVJJXzIwMDFfU0NIRU1BX1hTRCwgInRva2VuIik7CgogICAgcHVibGljIHN0 YXRpYyBmaW5hbCBRTmFtZSBYU0RfVU5TSUdORURMT05HID0gbmV3IFFOYW1lKFVSSV8yMDAxX1ND SEVNQV9YU0QsICJ1bnNpZ25lZExvbmciKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUg WFNEX1VOU0lHTkVESU5UID0gbmV3IFFOYW1lKFVSSV8yMDAxX1NDSEVNQV9YU0QsICJ1bnNpZ25l ZEludCIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfVU5TSUdORURTSE9SVCA9 IG5ldyBRTmFtZShVUklfMjAwMV9TQ0hFTUFfWFNELCAidW5zaWduZWRTaG9ydCIpOwogICAgcHVi bGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfVU5TSUdORURCWVRFID0gbmV3IFFOYW1lKFVSSV8y MDAxX1NDSEVNQV9YU0QsICJ1bnNpZ25lZEJ5dGUiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg UU5hbWUgWFNEX1BPU0lUSVZFSU5URUdFUiA9IG5ldyBRTmFtZShVUklfMjAwMV9TQ0hFTUFfWFNE LCAicG9zaXRpdmVJbnRlZ2VyIik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9O RUdBVElWRUlOVEVHRVIgPSBuZXcgUU5hbWUoVVJJXzIwMDFfU0NIRU1BX1hTRCwgIm5lZ2F0aXZl SW50ZWdlciIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfTk9OTkVHQVRJVkVJ TlRFR0VSID0gbmV3IFFOYW1lKFVSSV8yMDAxX1NDSEVNQV9YU0QsICJub25OZWdhdGl2ZUludGVn ZXIiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgWFNEX05PTlBPU0lUSVZFSU5URUdF UiA9IG5ldyBRTmFtZShVUklfMjAwMV9TQ0hFTUFfWFNELCAibm9uUG9zaXRpdmVJbnRlZ2VyIik7 CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfWUVBUk1PTlRIID0gbmV3IFFOYW1l KFVSSV8yMDAxX1NDSEVNQV9YU0QsICJnWWVhck1vbnRoIik7CiAgICBwdWJsaWMgc3RhdGljIGZp bmFsIFFOYW1lIFhTRF9NT05USERBWSA9IG5ldyBRTmFtZShVUklfMjAwMV9TQ0hFTUFfWFNELCAi Z01vbnRoRGF5Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9ZRUFSID0gbmV3 IFFOYW1lKFVSSV8yMDAxX1NDSEVNQV9YU0QsICJnWWVhciIpOwogICAgcHVibGljIHN0YXRpYyBm aW5hbCBRTmFtZSBYU0RfTU9OVEggPSBuZXcgUU5hbWUoVVJJXzIwMDFfU0NIRU1BX1hTRCwgImdN b250aCIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfREFZID0gbmV3IFFOYW1l KFVSSV8yMDAxX1NDSEVNQV9YU0QsICJnRGF5Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFO YW1lIFhTRF9EVVJBVElPTiA9IG5ldyBRTmFtZShVUklfMjAwMV9TQ0hFTUFfWFNELCAiZHVyYXRp b24iKTsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFhTRF9OQU1FID0gbmV3IFFOYW1l KFVSSV8yMDAxX1NDSEVNQV9YU0QsICJOYW1lIik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFO YW1lIFhTRF9OQ05BTUUgPSBuZXcgUU5hbWUoVVJJXzIwMDFfU0NIRU1BX1hTRCwgIk5DTmFtZSIp OwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBYU0RfTk1UT0tFTiA9IG5ldyBRTmFtZShV UklfMjAwMV9TQ0hFTUFfWFNELCAiTk1UT0tFTiIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBR TmFtZSBYU0RfQU5ZVVJJID0gbmV3IFFOYW1lKFVSSV8yMDAxX1NDSEVNQV9YU0QsICJhbnlVUkki KTsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFNPQVBfQkFTRTY0ID0gbmV3IFFOYW1l KFVSSV9ERUZBVUxUX1NPQVBfRU5DLCAiYmFzZTY0Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFs IFFOYW1lIFNPQVBfU1RSSU5HID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxUX1NPQVBfRU5DLCAic3Ry aW5nIik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFNPQVBfQk9PTEVBTiA9IG5ldyBR TmFtZShVUklfREVGQVVMVF9TT0FQX0VOQywgImJvb2xlYW4iKTsKICAgIHB1YmxpYyBzdGF0aWMg ZmluYWwgUU5hbWUgU09BUF9ET1VCTEUgPSBuZXcgUU5hbWUoVVJJX0RFRkFVTFRfU09BUF9FTkMs ICJkb3VibGUiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgU09BUF9GTE9BVCA9IG5l dyBRTmFtZShVUklfREVGQVVMVF9TT0FQX0VOQywgImZsb2F0Iik7CiAgICBwdWJsaWMgc3RhdGlj IGZpbmFsIFFOYW1lIFNPQVBfSU5UID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxUX1NPQVBfRU5DLCAi aW50Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFNPQVBfTE9ORyA9IG5ldyBRTmFt ZShVUklfREVGQVVMVF9TT0FQX0VOQywgImxvbmciKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg UU5hbWUgU09BUF9TSE9SVCA9IG5ldyBRTmFtZShVUklfREVGQVVMVF9TT0FQX0VOQywgInNob3J0 Iik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFNPQVBfQllURSA9IG5ldyBRTmFtZShV UklfREVGQVVMVF9TT0FQX0VOQywgImJ5dGUiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5h bWUgU09BUF9JTlRFR0VSID0gbmV3IFFOYW1lKFVSSV9ERUZBVUxUX1NPQVBfRU5DLCAiaW50ZWdl ciIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBTT0FQX0RFQ0lNQUwgPSBuZXcgUU5h bWUoVVJJX0RFRkFVTFRfU09BUF9FTkMsICJkZWNpbWFsIik7CiAgICBwdWJsaWMgc3RhdGljIGZp bmFsIFFOYW1lIFNPQVBfQVJSQVkgPSBuZXcgUU5hbWUoVVJJX0RFRkFVTFRfU09BUF9FTkMsICJB cnJheSIpOwoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgU09BUF9NQVAgPSBuZXcgUU5h bWUoTlNfVVJJX1hNTFNPQVAsICJNYXAiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUg U09BUF9FTEVNRU5UID0gbmV3IFFOYW1lKE5TX1VSSV9YTUxTT0FQLCAiRWxlbWVudCIpOwogICAg cHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBTT0FQX1ZFQ1RPUiA9IG5ldyBRTmFtZShOU19VUklf WE1MU09BUCwgIlZlY3RvciIpOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBNSU1FX0lN QUdFID0gbmV3IFFOYW1lKE5TX1VSSV9YTUxTT0FQLCAiSW1hZ2UiKTsKICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgUU5hbWUgTUlNRV9QTEFJTlRFWFQgPSBuZXcgUU5hbWUoTlNfVVJJX1hNTFNPQVAs ICJQbGFpblRleHQiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgTUlNRV9NVUxUSVBB UlQgPSBuZXcgUU5hbWUoTlNfVVJJX1hNTFNPQVAsICJNdWx0aXBhcnQiKTsKICAgIHB1YmxpYyBz dGF0aWMgZmluYWwgUU5hbWUgTUlNRV9TT1VSQ0UgPSBuZXcgUU5hbWUoTlNfVVJJX1hNTFNPQVAs ICJTb3VyY2UiKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgTUlNRV9EQVRBX0hBTkRM RVIgPSBuZXcgUU5hbWUoTlNfVVJJX1hNTFNPQVAsICJEYXRhSGFuZGxlciIpOwoKCiAgICBwdWJs aWMgc3RhdGljIGZpbmFsIFFOYW1lIFFOQU1FX0xJVEVSQUxfSVRFTSA9IG5ldyBRTmFtZShVUklf TElURVJBTF9FTkMsIml0ZW0iKTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgUU5BTUVf UlBDX1JFU1VMVCA9IG5ldyBRTmFtZShVUklfU09BUDEyX1JQQywicmVzdWx0Iik7CgogICAgLy9R TmFtZXMgb2Ygd2VsbCBrbm93biBmYXVsdHMKICAgIC8qKgogICAgICogdGhlIG5vLXNlcnZpY2Ug ZmF1bHQgdmFsdWUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBRTkFNRV9O T19TRVJWSUNFX0ZBVUxUX0NPREUKICAgICAgICAgICAgPSBuZXcgUU5hbWUoTlNfVVJJX0FYSVMs ICJTZXJ2ZXIuTm9TZXJ2aWNlIik7CgogICAgLy8gTWlzYyBTdHJpbmdzCiAgICAvLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLwoKICAgIC8vIFdoZXJlIHRvIHB1dCB0aG9zZSBwZXNreSBKV1MgY2xhc3NlcwogICAg cHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUNfSldTX0NMQVNTRElSID0gImp3cy5jbGFzc0Rp ciIgOwogICAgLy8gV2hlcmUgd2UncmUgcm9vdGVkCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0 cmluZyBNQ19IT01FX0RJUiA9ICJob21lLmRpciI7CgogICAgLy8gUmVsYXRpdmUgcGF0aCBvZiB0 aGUgcmVxdWVzdCBVUkwgKGllLiBodHRwOi8vLi4uL2F4aXMvYS5qd3MgPSAvYS5qd3MKICAgIHB1 YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1DX1JFTEFUSVZFX1BBVEggPSAicGF0aCI7CgogICAg Ly8gTWVzc2FnZUNvbnRleHQgcGFyYW0gZm9yIHRoZSBlbmdpbmUncyBwYXRoCiAgICBwdWJsaWMg c3RhdGljIGZpbmFsIFN0cmluZyBNQ19SRUFMUEFUSCA9ICJyZWFscGF0aCI7CiAgICAvLyBNZXNz YWdlQ29udGV4dCBwYXJhbSBmb3IgdGhlIGxvY2F0aW9uIG9mIGNvbmZpZyBmaWxlcwogICAgcHVi bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUNfQ09ORklHUEFUSCA9ICJjb25maWdQYXRoIjsKICAg IC8vIE1lc3NhZ2VDb250ZXh0IHBhcmFtIGZvciB0aGUgSVAgb2YgdGhlIGNhbGxpbmcgY2xpZW50 CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQ19SRU1PVEVfQUREUiA9ICJyZW1vdGVh ZGRyIjsKICAgIC8vIFdoZW4gaW52b2tlZCBmcm9tIGEgc2VydmxldCwgcGVyIEpBWC1SUEMsIHdl IG5lZWQgIGEKICAgIC8vIFNlcnZsZXRFbmRwb2ludENvbnRleHQgb2JqZWN0LiAgVGhpcyBpcyB3 aGVyZSBpdCBsaXZlcy4KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1DX1NFUlZMRVRf RU5EUE9JTlRfQ09OVEVYVCA9ICJzZXJ2bGV0RW5kcG9pbnRDb250ZXh0IjsKCiAgICBwdWJsaWMg c3RhdGljIGZpbmFsIFN0cmluZyBBWElTX1ZFUlNJT049IkF4aXMvMS4wIjsKCn0K ------_=_NextPart_001_01C28BDA.176EA13A Content-Type: application/octet-stream; name="SOAPFaultBuilder.java" Content-Transfer-Encoding: base64 Content-Description: SOAPFaultBuilder.java Content-Disposition: attachment; filename="SOAPFaultBuilder.java" LyoKICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQogKgogKgogKiBD b3B5cmlnaHQgKGMpIDIwMDEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp Z2h0cwogKiByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0 OgogKgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICoKICogMy4gVGhlIGVuZC11c2VyIGRvY3Vt ZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCiAqICAgIGlmIGFueSwg bXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CiAqICAgICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQogKiAgICAgICAgQXBh Y2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKICogICAg QWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdh cmUgaXRzZWxmLAogKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3ds ZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgogKgogKiA0LiBUaGUgbmFtZXMgIkF4aXMiIGFuZCAi QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKICogICAgbm90IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAqICAgIHNvZnR3YXJl IHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgogKiAgICBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KICoKICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIs CiAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgogKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRh dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTRUQgT1IgSU1QTElFRAogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCiAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCiAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCiAqIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAq IFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBi eSBtYW55CiAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24uICBGb3IgbW9yZQogKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJl IEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgogKi8K cGFja2FnZSBvcmcuYXBhY2hlLmF4aXMubWVzc2FnZTsKCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMu QXhpc0ZhdWx0OwppbXBvcnQgb3JnLmFwYWNoZS5heGlzLkNvbnN0YW50czsKaW1wb3J0IG9yZy5h cGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6YXRpb25Db250ZXh0OwppbXBvcnQgb3JnLmFw YWNoZS5heGlzLmVuY29kaW5nLkRlc2VyaWFsaXplcjsKaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5l bmNvZGluZy5DYWxsYmFjazsKaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5DYWxsYmFj a1RhcmdldDsKaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy51dGlscy5DbGFzc1V0aWxzOwppbXBvcnQg b3JnLmFwYWNoZS5heGlzLnNvYXAuU09BUENvbnN0YW50czsKaW1wb3J0IG9yZy54bWwuc2F4LkF0 dHJpYnV0ZXM7CmltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247CmltcG9ydCBvcmcudzNj LmRvbS5FbGVtZW50OwppbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKCmltcG9ydCBqYXZheC54bWwu bmFtZXNwYWNlLlFOYW1lOwoKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwppbXBvcnQgamF2YS51 dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKaW1wb3J0IGphdmEudXRp bC5WZWN0b3I7CgovKioKICogQnVpbGQgYSBGYXVsdCBib2R5IGVsZW1lbnQuCiAqCiAqIEBhdXRo b3IgU2FtIFJ1YnkgKHJ1YnlzQHVzLmlibS5jb20pCiAqIEBhdXRob3IgR2xlbiBEYW5pZWxzIChn ZGFuaWVsc0BtYWNyb21lZGlhLmNvbSkKICogQGF1dGhvciBUb20gSm9yZGFobCAodG9takBtYWNy b21lZGlhLmNvbSkKICovCnB1YmxpYyBjbGFzcyBTT0FQRmF1bHRCdWlsZGVyIGV4dGVuZHMgU09B UEhhbmRsZXIgaW1wbGVtZW50cyBDYWxsYmFjawp7CiAgICBwcm90ZWN0ZWQgU09BUEZhdWx0IGVs ZW1lbnQ7CiAgICBwcm90ZWN0ZWQgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBjb250ZXh0OwogICAg c3RhdGljIEhhc2hNYXAgZmllbGRzX3NvYXAxMSA9IG5ldyBIYXNoTWFwKCk7CiAgICBzdGF0aWMg SGFzaE1hcCBmaWVsZHNfc29hcDEyID0gbmV3IEhhc2hNYXAoKTsKCiAgICAvLyBGYXVsdCBkYXRh CiAgICBwcm90ZWN0ZWQgU3RyaW5nIGZhdWx0Q2xhc3NOYW1lID0gbnVsbDsKICAgIHByb3RlY3Rl ZCBTdHJpbmcgZmF1bHRTdHJpbmcgPSBudWxsOwogICAgcHJvdGVjdGVkIFN0cmluZyBmYXVsdEFj dG9yID0gbnVsbDsKICAgIHByb3RlY3RlZCBFbGVtZW50W10gZmF1bHREZXRhaWxzOwogICAgcHJv dGVjdGVkIFN0cmluZyAgICBmYXVsdE5vZGUgPSBudWxsOwogICAgcHJvdGVjdGVkIFFOYW1lIGZh dWx0Q29kZTsKICAgIHByb3RlY3RlZCBWZWN0b3IgZmF1bHRTdWJDb2RlID0gbnVsbDsKCiAgICBw cm90ZWN0ZWQgU09BUEZhdWx0Q29kZUJ1aWxkZXIgY29kZTsKCiAgICBzdGF0aWMgewogICAgICAg IGZpZWxkc19zb2FwMTEucHV0KENvbnN0YW50cy5FTEVNX0ZBVUxUX0NPREUsIENvbnN0YW50cy5Y U0RfU1RSSU5HKTsKICAgICAgICBmaWVsZHNfc29hcDExLnB1dChDb25zdGFudHMuRUxFTV9GQVVM VF9TVFJJTkcsIENvbnN0YW50cy5YU0RfU1RSSU5HKTsKICAgICAgICBmaWVsZHNfc29hcDExLnB1 dChDb25zdGFudHMuRUxFTV9GQVVMVF9BQ1RPUiwgQ29uc3RhbnRzLlhTRF9TVFJJTkcpOwogICAg ICAgIGZpZWxkc19zb2FwMTEucHV0KENvbnN0YW50cy5FTEVNX0ZBVUxUX0RFVEFJTCwgbnVsbCk7 CiAgICB9CgogICAgc3RhdGljIHsKICAgICAgICBmaWVsZHNfc29hcDEyLnB1dChDb25zdGFudHMu RUxFTV9GQVVMVF9SRUFTT05fU09BUDEyLCBDb25zdGFudHMuWFNEX1NUUklORyk7CiAgICAgICAg ZmllbGRzX3NvYXAxMi5wdXQoQ29uc3RhbnRzLkVMRU1fRkFVTFRfUk9MRV9TT0FQMTIsIENvbnN0 YW50cy5YU0RfU1RSSU5HKTsKICAgICAgICBmaWVsZHNfc29hcDEyLnB1dChDb25zdGFudHMuRUxF TV9GQVVMVF9OT0RFX1NPQVAxMiwgQ29uc3RhbnRzLlhTRF9TVFJJTkcpOwogICAgICAgIGZpZWxk c19zb2FwMTIucHV0KENvbnN0YW50cy5FTEVNX0ZBVUxUX0RFVEFJTF9TT0FQMTIsIG51bGwpOwog ICAgfQoKICAgIHB1YmxpYyBTT0FQRmF1bHRCdWlsZGVyKFNPQVBGYXVsdCBlbGVtZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBjb250ZXh0KSB7 CiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKICAgICAgICB0aGlzLmNvbnRleHQgPSBj b250ZXh0OwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBmaWxsQXhpc0ZhdWx0KEF4aXNGYXVsdCBm KSB7CiAgICAgICAgZi5zZXRGYXVsdENvZGUoY29kZS5nZXRGYXVsdENvZGUoKSk7CgogICAgICAg IFNPQVBGYXVsdENvZGVCdWlsZGVyIGMgPSBjb2RlOwogICAgICAgIHdoaWxlICgoYyA9IGMuZ2V0 TmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgIGYuYWRkRmF1bHRTdWJDb2RlKGMuZ2V0RmF1 bHRDb2RlKCkpOwogICAgICAgIH0KCiAgICAgICAgZi5zZXRGYXVsdFN0cmluZyhmYXVsdFN0cmlu Zyk7CiAgICAgICAgZi5zZXRGYXVsdEFjdG9yKGZhdWx0QWN0b3IpOwogICAgICAgIGYuc2V0RmF1 bHROb2RlKGZhdWx0Tm9kZSk7CiAgICAgICAgZi5zZXRGYXVsdERldGFpbChmYXVsdERldGFpbHMp OwogICAgfQoKICAgIC8qKgogICAgICogRmluYWwgY2FsbCBiYWNrIHdoZXJlIHdlIGNhbiBwb3B1 bGF0ZSB0aGUgZXhjZXB0aW9uIHdpdGggZGF0YS4KICAgICAqLwogICAgcHVibGljIHZvaWQgZW5k RWxlbWVudChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBEZXNlcmlhbGl6YXRpb25Db250ZXh0IGNvbnRleHQpCiAgICAgICAgICAg IHRocm93cyBTQVhFeGNlcHRpb24gewogICAgICAgIHN1cGVyLmVuZEVsZW1lbnQobmFtZXNwYWNl LCBsb2NhbE5hbWUsIGNvbnRleHQpOwoKICAgICAgICBBeGlzRmF1bHQgZiA9IG51bGw7CiAgICAg ICAgaWYgKGZhdWx0Q2xhc3NOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAg ICAgICAgICAgIENsYXNzIGV4Q2xhc3MgPSBDbGFzc1V0aWxzLmZvck5hbWUoZmF1bHRDbGFzc05h bWUpOwogICAgICAgICAgICAgICAgaWYgKEF4aXNGYXVsdC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9t KGV4Q2xhc3MpKSB7CiAgICAgICAgICAgICAgICAgICAgZiA9IChBeGlzRmF1bHQpIGV4Q2xhc3Mu bmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICAgICBmaWxsQXhpc0ZhdWx0KGYpOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24g ZSkgewogICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaGVyZSwgc2luY2UgYSBw cm9ibGVtIGFib3ZlIG1lYW5zCiAgICAgICAgICAgICAgICAvLyB3ZSdsbCBqdXN0IGZhbGwgdGhy b3VnaCBhbmQgdXNlIGEgcGxhaW4gQXhpc0ZhdWx0LgogICAgICAgICAgICB9CiAgICAgICAgfQoK ICAgICAgICBpZiAoZiA9PSBudWxsKSB7CiAgICAgICAgICAgIGYgID0gbmV3IEF4aXNGYXVsdCgp OwogICAgICAgICAgICBmaWxsQXhpc0ZhdWx0KGYpOwogICAgICAgIH0KCiAgICAgICAgZWxlbWVu dC5zZXRGYXVsdChmKTsKICAgIH0KCiAgICBwdWJsaWMgU09BUEhhbmRsZXIgb25TdGFydENoaWxk KFN0cmluZyBuYW1lc3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJl Zml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzIGF0dHJp YnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2VyaWFsaXphdGlv bkNvbnRleHQgY29udGV4dCkKICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCiAgICB7CiAgICAg ICAgRGVzZXJpYWxpemVyIGN1cnJlbnREZXNlciA9IG51bGw7CgogICAgICAgIFNPQVBDb25zdGFu dHMgc29hcENvbnN0YW50cyA9IGNvbnRleHQuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXRTT0FQQ29u c3RhbnRzKCk7CgogICAgICAgIFFOYW1lIHFOYW1lOwogICAgICAgIGlmIChzb2FwQ29uc3RhbnRz ID09IFNPQVBDb25zdGFudHMuU09BUDEyX0NPTlNUQU5UUykgewogICAgICAgICAgICBxTmFtZSA9 IChRTmFtZSlmaWVsZHNfc29hcDEyLmdldChuYW1lKTsKICAgICAgICAgICAgaWYgKHFOYW1lID09 IG51bGwpIHsKICAgICAgICAgICAgICAgIFFOYW1lIHRoaXNRTmFtZSA9IG5ldyBRTmFtZShuYW1l c3BhY2UsIG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKHRoaXNRTmFtZS5lcXVhbHMoQ29uc3Rh bnRzLlFOQU1FX0ZBVUxUQ09ERV9TT0FQMTIpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAo Y29kZSA9IG5ldyBTT0FQRmF1bHRDb2RlQnVpbGRlcihjb250ZXh0KSk7CiAgICAgICAgICAgIH0K ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBxTmFtZSA9IChRTmFtZSlmaWVsZHNfc29hcDEx LmdldChuYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChxTmFtZSAhPSBudWxsKSB7CiAgICAg ICAgICAgIGN1cnJlbnREZXNlciA9IGNvbnRleHQuZ2V0RGVzZXJpYWxpemVyRm9yVHlwZShxTmFt ZSk7CiAgICAgICAgICAgIGlmIChjdXJyZW50RGVzZXIgIT0gbnVsbCkgewogICAgICAgICAgICAg ICAgY3VycmVudERlc2VyLnJlZ2lzdGVyVmFsdWVUYXJnZXQobmV3IENhbGxiYWNrVGFyZ2V0KHRo aXMsIG5ldyBRTmFtZShuYW1lc3BhY2UsIG5hbWUpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9 CgogICAgICAgIHJldHVybiAoU09BUEhhbmRsZXIpY3VycmVudERlc2VyOwogICAgfQoKICAgIHB1 YmxpYyB2b2lkIG9uRW5kQ2hpbGQoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGxvY2FsTmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBjb250ZXh0 KQogICAgICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKCiAgICAgICAgaWYgKENvbnN0YW50 cy5FTEVNX0ZBVUxUX0RFVEFJTC5lcXVhbHMobG9jYWxOYW1lKSkgewogICAgICAgICAgICBNZXNz YWdlRWxlbWVudCBlbCA9IGNvbnRleHQuZ2V0Q3VyRWxlbWVudCgpOwogICAgICAgICAgICBBcnJh eUxpc3QgY2hpbGRyZW4gPSBlbC5nZXRDaGlsZHJlbigpOwogICAgICAgICAgICBpZiAoY2hpbGRy ZW4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgRWxlbWVudCBbXSBlbGVtZW50cyA9IG5ldyBF bGVtZW50IFtjaGlsZHJlbi5zaXplKCldOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldID0gKChNZXNzYWdlRWxlbWVudCljaGls ZHJlbi5nZXQoaSkpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFzRE9NKCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChlbGVtZW50c1tpXS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoImV4Y2VwdGlvbk5hbWUi KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCB0ZXh0ID0gKFRleHQpZWxlbWVu dHNbaV0uZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRD bGFzc05hbWUgPSB0ZXh0LmdldERhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHRocm93IG5ldyBTQVhFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmF1bHREZXRhaWxzID0gZWxlbWVudHM7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoKICAgICAqIERlZmluZWQgYnkg Q2FsbGJhY2suCiAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIGNvbnRyb2wgd2hlbiB0aGUgY2FsbGJh Y2sgaXMgaW52b2tlZC4KICAgICAqIEBwYXJhbSBpcyB0aGUgdmFsdWUgdG8gc2V0LgogICAgICog QHBhcmFtIGhpbnQgaXMgYW4gT2JqZWN0IHRoYXQgcHJvdmlkZSBhZGRpdGlvbmFsIGhpbnQgaW5m b3JtYXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKE9iamVjdCB2YWx1ZSwg T2JqZWN0IGhpbnQpCiAgICB7CiAgICAgICAgU3RyaW5nIGxvY2FsID0gKChRTmFtZSloaW50KS5n ZXRMb2NhbFBhcnQoKTsKICAgICAgICBpZiAoKChRTmFtZSloaW50KS5nZXROYW1lc3BhY2VVUkko KS5lcXVhbHMoQ29uc3RhbnRzLlVSSV9TT0FQMTJfRU5WKSkgewogICAgICAgICAgICBpZiAobG9j YWwuZXF1YWxzKENvbnN0YW50cy5FTEVNX0ZBVUxUX1JPTEVfU09BUDEyKSkgewogICAgICAgICAg ICAgICAgZmF1bHRBY3RvciA9IChTdHJpbmcpIHZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYg KGxvY2FsLmVxdWFscyhDb25zdGFudHMuRUxFTV9GQVVMVF9SRUFTT05fU09BUDEyKSkgewogICAg ICAgICAgICAgICAgZmF1bHRTdHJpbmcgPSAoU3RyaW5nKSB2YWx1ZTsKICAgICAgICAgICAgfSBl bHNlIGlmIChsb2NhbC5lcXVhbHMoQ29uc3RhbnRzLkVMRU1fRkFVTFRfTk9ERV9TT0FQMTIpKSB7 CiAgICAgICAgICAgICAgICBmYXVsdE5vZGUgPSAoU3RyaW5nKSB2YWx1ZTsKICAgICAgICAgICAg fQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChsb2NhbC5lcXVhbHMoQ29uc3RhbnRz LkVMRU1fRkFVTFRfQ09ERSkpIHsKICAgICAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gY29udGV4 dC5nZXRRTmFtZUZyb21TdHJpbmcoKFN0cmluZyl2YWx1ZSk7CiAgICAgICAgICAgICAgICBpZiAo cW5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIC8vPz93aGVuIHdvdWxkIFFOYW1l IG1ha2Ugc2Vuc2UsIHRoaXMgd291bGQgYmUgYXBwIHNwZWNpZmljCiAgICAgICAgICAgICAgICAg ICAgZmF1bHRDb2RlID0gcW5hbWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgICAgIC8vPz8gV2hlcmUgd291bGQgbmFtZXNwYWNlIGNvbWUgZnJvbQogICAgICAgICAg ICAgICAgICAgIGZhdWx0Q29kZSA9IG5ldyBRTmFtZSgiIiwoU3RyaW5nKSB2YWx1ZSk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWwuZXF1YWxzKENvbnN0YW50 cy5FTEVNX0ZBVUxUX1NUUklORykpIHsKICAgICAgICAgICAgICAgIGZhdWx0U3RyaW5nID0gKFN0 cmluZykgdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWwuZXF1YWxzKENvbnN0YW50 cy5FTEVNX0ZBVUxUX0FDVE9SKSkgewogICAgICAgICAgICAgICAgZmF1bHRBY3RvciA9IChTdHJp bmcpIHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIH0KfQo= ------_=_NextPart_001_01C28BDA.176EA13A Content-Type: application/octet-stream; name="SOAPFaultCodeBuilder.java" Content-Transfer-Encoding: base64 Content-Description: SOAPFaultCodeBuilder.java Content-Disposition: attachment; filename="SOAPFaultCodeBuilder.java" LyoKICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQogKgogKgogKiBD b3B5cmlnaHQgKGMpIDIwMDEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp Z2h0cwogKiByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0 OgogKgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICoKICogMy4gVGhlIGVuZC11c2VyIGRvY3Vt ZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCiAqICAgIGlmIGFueSwg bXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CiAqICAgICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQogKiAgICAgICAgQXBh Y2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKICogICAg QWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdh cmUgaXRzZWxmLAogKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3ds ZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgogKgogKiA0LiBUaGUgbmFtZXMgIkF4aXMiIGFuZCAi QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKICogICAgbm90IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAqICAgIHNvZnR3YXJl IHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgogKiAgICBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KICoKICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIs CiAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgogKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRh dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTRUQgT1IgSU1QTElFRAogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCiAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCiAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCiAqIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAq IFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBi eSBtYW55CiAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24uICBGb3IgbW9yZQogKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJl IEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgogKi8K cGFja2FnZSBvcmcuYXBhY2hlLmF4aXMubWVzc2FnZTsKCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMu QXhpc0ZhdWx0OwppbXBvcnQgb3JnLmFwYWNoZS5heGlzLkNvbnN0YW50czsKaW1wb3J0IG9yZy5h cGFjaGUuYXhpcy5lbmNvZGluZy5EZXNlcmlhbGl6YXRpb25Db250ZXh0OwppbXBvcnQgb3JnLmFw YWNoZS5heGlzLmVuY29kaW5nLkRlc2VyaWFsaXplcjsKaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5l bmNvZGluZy5DYWxsYmFjazsKaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5DYWxsYmFj a1RhcmdldDsKaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy54bWwu c2F4LkF0dHJpYnV0ZXM7CmltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwppbXBvcnQgamF2YXgueG1s Lm5hbWVzcGFjZS5RTmFtZTsKCi8qKgogKiBCdWlsZCBhIEZhdWx0IGJvZHkgZWxlbWVudC4KICoK ICogQGF1dGhvciBTYW0gUnVieSAocnVieXNAdXMuaWJtLmNvbSkKICogQGF1dGhvciBHbGVuIERh bmllbHMgKGdkYW5pZWxzQG1hY3JvbWVkaWEuY29tKQogKiBAYXV0aG9yIFRvbSBKb3JkYWhsICh0 b21qQG1hY3JvbWVkaWEuY29tKQogKi8KcHVibGljIGNsYXNzIFNPQVBGYXVsdENvZGVCdWlsZGVy IGV4dGVuZHMgU09BUEhhbmRsZXIgaW1wbGVtZW50cyBDYWxsYmFjawp7CiAgICAvLyBGYXVsdCBk YXRhCiAgICBwcm90ZWN0ZWQgUU5hbWUgZmF1bHRDb2RlID0gbnVsbDsKICAgIHByb3RlY3RlZCBT T0FQRmF1bHRDb2RlQnVpbGRlciBuZXh0ID0gbnVsbDsKICAgIHByb3RlY3RlZCBEZXNlcmlhbGl6 YXRpb25Db250ZXh0IGNvbnRleHQ7CgogICAgcHVibGljIFNPQVBGYXVsdENvZGVCdWlsZGVyKERl c2VyaWFsaXphdGlvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgIHRoaXMuY29udGV4dCA9IGNv bnRleHQ7CiAgICB9CgogICAgcHVibGljIFFOYW1lIGdldEZhdWx0Q29kZSgpIHsKICAgICAgICBy ZXR1cm4gZmF1bHRDb2RlOwogICAgfQoKICAgIHB1YmxpYyBTT0FQRmF1bHRDb2RlQnVpbGRlciBn ZXROZXh0KCkgewogICAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIHB1YmxpYyBTT0FQSGFu ZGxlciBvblN0YXJ0Q2hpbGQoU3RyaW5nIG5hbWVzcGFjZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFN0cmluZyBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEF0dHJpYnV0ZXMgYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBjb250ZXh0KQogICAgICAgIHRocm93cyBTQVhFeGNl cHRpb24KICAgIHsKCiAgICAgICAgUU5hbWUgdGhpc1FOYW1lID0gbmV3IFFOYW1lKG5hbWVzcGFj ZSwgbmFtZSk7CiAgICAgICAgaWYgKHRoaXNRTmFtZS5lcXVhbHMoQ29uc3RhbnRzLlFOQU1FX0ZB VUxUVkFMVUVfU09BUDEyKSkgewogICAgICAgICAgICBEZXNlcmlhbGl6ZXIgY3VycmVudERlc2Vy ID0gbnVsbDsKICAgICAgICAgICAgY3VycmVudERlc2VyID0gY29udGV4dC5nZXREZXNlcmlhbGl6 ZXJGb3JUeXBlKENvbnN0YW50cy5YU0RfU1RSSU5HKTsKICAgICAgICAgICAgaWYgKGN1cnJlbnRE ZXNlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBjdXJyZW50RGVzZXIucmVnaXN0ZXJWYWx1 ZVRhcmdldChuZXcgQ2FsbGJhY2tUYXJnZXQodGhpcywgdGhpc1FOYW1lKSk7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgcmV0dXJuIChTT0FQSGFuZGxlciljdXJyZW50RGVzZXI7CiAgICAgICAg fSBlbHNlIGlmICh0aGlzUU5hbWUuZXF1YWxzKENvbnN0YW50cy5RTkFNRV9GQVVMVFNVQkNPREVf U09BUDEyKSkgewogICAgICAgICAgICByZXR1cm4gKG5leHQgPSBuZXcgU09BUEZhdWx0Q29kZUJ1 aWxkZXIoY29udGV4dCkpOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXR1cm4gbnVsbDsK ICAgIH0KCiAgICAvKgogICAgICogRGVmaW5lZCBieSBDYWxsYmFjay4KICAgICAqIFRoaXMgbWV0 aG9kIGdldHMgY29udHJvbCB3aGVuIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLgogICAgICogQHBh cmFtIGlzIHRoZSB2YWx1ZSB0byBzZXQuCiAgICAgKiBAcGFyYW0gaGludCBpcyBhbiBPYmplY3Qg dGhhdCBwcm92aWRlIGFkZGl0aW9uYWwgaGludCBpbmZvcm1hdGlvbi4KICAgICAqLwogICAgcHVi bGljIHZvaWQgc2V0VmFsdWUoT2JqZWN0IHZhbHVlLCBPYmplY3QgaGludCkgewogICAgICAgIFFO YW1lIHRoaXNRTmFtZSA9IChRTmFtZSloaW50OwogICAgICAgIGlmICh0aGlzUU5hbWUuZXF1YWxz KENvbnN0YW50cy5RTkFNRV9GQVVMVFZBTFVFX1NPQVAxMikpIHsKICAgICAgICAgICAgUU5hbWUg cW5hbWUgPSBjb250ZXh0LmdldFFOYW1lRnJvbVN0cmluZygoU3RyaW5nKXZhbHVlKTsKICAgICAg ICAgICAgaWYgKHFuYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGZhdWx0Q29kZSA9IHFu YW1lOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZmF1bHRDb2RlID0gbmV3 IFFOYW1lKCIiLChTdHJpbmcpIHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K fQo= ------_=_NextPart_001_01C28BDA.176EA13A Content-Type: application/octet-stream; name="SOAPFault.java" Content-Transfer-Encoding: base64 Content-Description: SOAPFault.java Content-Disposition: attachment; filename="SOAPFault.java" LyoKICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQogKgogKgogKiBD b3B5cmlnaHQgKGMpIDIwMDEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp Z2h0cwogKiByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0 OgogKgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICoKICogMy4gVGhlIGVuZC11c2VyIGRvY3Vt ZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCiAqICAgIGlmIGFueSwg bXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CiAqICAgICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQogKiAgICAgICAgQXBh Y2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKICogICAg QWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdh cmUgaXRzZWxmLAogKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3ds ZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgogKgogKiA0LiBUaGUgbmFtZXMgIkF4aXMiIGFuZCAi QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKICogICAgbm90IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAqICAgIHNvZnR3YXJl IHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgogKiAgICBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KICoKICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIs CiAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgogKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRh dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTRUQgT1IgSU1QTElFRAogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCiAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCiAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCiAqIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAq IFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBi eSBtYW55CiAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24uICBGb3IgbW9yZQogKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJl IEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgogKi8K cGFja2FnZSBvcmcuYXBhY2hlLmF4aXMubWVzc2FnZTsKCmltcG9ydCBvcmcuYXBhY2hlLmF4aXMu QXhpc0ZhdWx0OwppbXBvcnQgb3JnLmFwYWNoZS5heGlzLkNvbnN0YW50czsKaW1wb3J0IG9yZy5h cGFjaGUuYXhpcy51dGlscy5KYXZhVXRpbHM7CmltcG9ydCBvcmcuYXBhY2hlLmF4aXMudXRpbHMu TWVzc2FnZXM7CmltcG9ydCBvcmcuYXBhY2hlLmF4aXMuZW5jb2RpbmcuRGVzZXJpYWxpemF0aW9u Q29udGV4dDsKaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5lbmNvZGluZy5TZXJpYWxpemF0aW9uQ29u dGV4dDsKaW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5zb2FwLlNPQVBDb25zdGFudHM7CmltcG9ydCBv cmcudzNjLmRvbS5FbGVtZW50OwppbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKCmltcG9y dCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwppbXBvcnQgamF2YXgueG1sLnNvYXAuU09BUEV4 Y2VwdGlvbjsKCmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwoKLyoqIEEgRmF1bHQgYm9keSBl bGVtZW50LgogKgogKiBAYXV0aG9yIFNhbSBSdWJ5IChydWJ5c0B1cy5pYm0uY29tKQogKiBAYXV0 aG9yIEdsZW4gRGFuaWVscyAoZ2RhbmllbHNAbWFjcm9tZWRpYS5jb20pCiAqIEBhdXRob3IgVG9t IEpvcmRhaGwgKHRvbWpAbWFjcm9tZWRpYS5jb20pCiAqLwpwdWJsaWMgY2xhc3MgU09BUEZhdWx0 IGV4dGVuZHMgU09BUEJvZHlFbGVtZW50IGltcGxlbWVudHMgamF2YXgueG1sLnNvYXAuU09BUEZh dWx0CnsKICAgIHByb3RlY3RlZCBBeGlzRmF1bHQgZmF1bHQ7CgogICAgcHVibGljIFNPQVBGYXVs dChTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcHJlZml4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyBhdHRycywgRGVzZXJpYWxpemF0aW9u Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHN1cGVyKG5hbWVzcGFjZSwgbG9jYWxOYW1l LCBwcmVmaXgsIGF0dHJzLCBjb250ZXh0KTsKICAgICAgICB0aGlzLmZhdWx0ID0gZmF1bHQ7CiAg ICB9CgogICAgcHVibGljIFNPQVBGYXVsdChBeGlzRmF1bHQgZmF1bHQpCiAgICB7CiAgICAgICAg dGhpcy5mYXVsdCA9IGZhdWx0OwogICAgfQoKICAgIHB1YmxpYyB2b2lkIG91dHB1dEltcGwoU2Vy aWFsaXphdGlvbkNvbnRleHQgY29udGV4dCkKICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KICAg IHsKICAgICAgICBTT0FQQ29uc3RhbnRzIHNvYXBDb25zdGFudHMgPSBjb250ZXh0LmdldE1lc3Nh Z2VDb250ZXh0KCkgPT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTT0FQQ29uc3RhbnRzLlNPQVAxMV9DT05TVEFOVFMgOgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRNZXNzYWdlQ29udGV4dCgpLmdldFNPQVBD b25zdGFudHMoKTsKCiAgICAgICAgbmFtZXNwYWNlVVJJID0gc29hcENvbnN0YW50cy5nZXRFbnZl bG9wZVVSSSgpOwogICAgICAgIG5hbWUgPSBDb25zdGFudHMuRUxFTV9GQVVMVDsKCiAgICAgICAg Y29udGV4dC5yZWdpc3RlclByZWZpeEZvclVSSShwcmVmaXgsIHNvYXBDb25zdGFudHMuZ2V0RW52 ZWxvcGVVUkkoKSk7CiAgICAgICAgY29udGV4dC5zdGFydEVsZW1lbnQobmV3IFFOYW1lKHRoaXMu Z2V0TmFtZXNwYWNlVVJJKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMuZ2V0TmFtZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVz KTsKCiAgICAgICAgLy8gWFhYIC0gQ2FuIGZhdWx0IGJlIGFueXRoaW5nIGJ1dCBhbiBBeGlzRmF1 bHQgaGVyZT8KICAgICAgICAgaWYgKGZhdWx0IGluc3RhbmNlb2YgQXhpc0ZhdWx0KSB7CiAgICAg ICAgICAgIEF4aXNGYXVsdCBheGlzRmF1bHQgPSAoQXhpc0ZhdWx0KSBmYXVsdDsKICAgICAgICAg ICAgaWYgKGF4aXNGYXVsdC5nZXRGYXVsdENvZGUoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAg ICAvLyBEbyB0aGlzIEJFRk9SRSBzdGFydGluZyB0aGUgZWxlbWVudCwgc28gdGhlIHByZWZpeCBn ZXRzCiAgICAgICAgICAgICAgICAvLyByZWdpc3RlcmVkIGlmIG5lZWRlZC4KICAgICAgICAgICAg ICAgIGlmIChzb2FwQ29uc3RhbnRzID09IFNPQVBDb25zdGFudHMuU09BUDEyX0NPTlNUQU5UUykg ewogICAgICAgICAgICAgICAgICAgIFN0cmluZyBmYXVsdENvZGUgPSBjb250ZXh0LnFOYW1lMlN0 cmluZyhheGlzRmF1bHQuZ2V0RmF1bHRDb2RlKCkpOwogICAgICAgICAgICAgICAgICAgIGNvbnRl eHQuc3RhcnRFbGVtZW50KENvbnN0YW50cy5RTkFNRV9GQVVMVENPREVfU09BUDEyLCBudWxsKTsK ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0RWxlbWVudChDb25zdGFudHMuUU5BTUVf RkFVTFRWQUxVRV9TT0FQMTIsIG51bGwpOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3Jp dGVTYWZlU3RyaW5nKGZhdWx0Q29kZSk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmRF bGVtZW50KCk7CiAgICAgICAgICAgICAgICAgICAgUU5hbWVbXSBzdWJjb2RlcyA9IGF4aXNGYXVs dC5nZXRGYXVsdFN1YkNvZGVzKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YmNvZGVzICE9 IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdWJj b2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRDb2Rl ID0gY29udGV4dC5xTmFtZTJTdHJpbmcoc3ViY29kZXNbaV0pOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGV4dC5zdGFydEVsZW1lbnQoQ29uc3RhbnRzLlFOQU1FX0ZBVUxUU1VCQ09E RV9TT0FQMTIsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdGFy dEVsZW1lbnQoQ29uc3RhbnRzLlFOQU1FX0ZBVUxUVkFMVUVfU09BUDEyLCBudWxsKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVTYWZlU3RyaW5nKGZhdWx0Q29kZSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuZEVsZW1lbnQoKTsKICAgICAg ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBzdWJjb2Rlcy5sZW5ndGg7IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRleHQuZW5kRWxlbWVudCgpOwoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgY29udGV4dC5lbmRFbGVtZW50KCk7CiAgICAgICAgICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAgICAgICAgIFN0cmluZyBmYXVsdENvZGUgPSBjb250ZXh0LnFOYW1lMlN0cmlu ZyhheGlzRmF1bHQuZ2V0RmF1bHRDb2RlKCkpOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQu c3RhcnRFbGVtZW50KENvbnN0YW50cy5RTkFNRV9GQVVMVENPREUsIG51bGwpOwogICAgICAgICAg ICAgICAgICAgIGNvbnRleHQud3JpdGVTYWZlU3RyaW5nKGZhdWx0Q29kZSk7CiAgICAgICAgICAg ICAgICAgICAgY29udGV4dC5lbmRFbGVtZW50KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIGlmIChheGlzRmF1bHQuZ2V0RmF1bHRTdHJpbmcoKSAhPSBudWxs KSB7CiAgICAgICAgICAgICAgICBpZiAoc29hcENvbnN0YW50cyA9PSBTT0FQQ29uc3RhbnRzLlNP QVAxMl9DT05TVEFOVFMpCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdGFydEVsZW1lbnQo Q29uc3RhbnRzLlFOQU1FX0ZBVUxUUkVBU09OX1NPQVAxMiwgbnVsbCk7CiAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdGFydEVsZW1lbnQoQ29uc3RhbnRz LlFOQU1FX0ZBVUxUU1RSSU5HLCBudWxsKTsKICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVT YWZlU3RyaW5nKGF4aXNGYXVsdC5nZXRGYXVsdFN0cmluZygpKTsKICAgICAgICAgICAgICAgIGNv bnRleHQuZW5kRWxlbWVudCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYXhpc0Zh dWx0LmdldEZhdWx0QWN0b3IoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAoc29hcENv bnN0YW50cyA9PSBTT0FQQ29uc3RhbnRzLlNPQVAxMl9DT05TVEFOVFMpCiAgICAgICAgICAgICAg ICAgICAgY29udGV4dC5zdGFydEVsZW1lbnQoQ29uc3RhbnRzLlFOQU1FX0ZBVUxUUk9MRV9TT0FQ MTIsIG51bGwpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGNvbnRl eHQuc3RhcnRFbGVtZW50KENvbnN0YW50cy5RTkFNRV9GQVVMVEFDVE9SLCBudWxsKTsKCiAgICAg ICAgICAgICAgICBjb250ZXh0LndyaXRlU2FmZVN0cmluZyhheGlzRmF1bHQuZ2V0RmF1bHRBY3Rv cigpKTsKICAgICAgICAgICAgICAgIGNvbnRleHQuZW5kRWxlbWVudCgpOwogICAgICAgICAgICB9 CgogICAgICAgICAgICBpZiAoYXhpc0ZhdWx0LmdldEZhdWx0Tm9kZSgpICE9IG51bGwpIHsKICAg ICAgICAgICAgICAgIGlmIChzb2FwQ29uc3RhbnRzID09IFNPQVBDb25zdGFudHMuU09BUDEyX0NP TlNUQU5UUykgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhcnRFbGVtZW50KENvbnN0 YW50cy5RTkFNRV9GQVVMVE5PREVfU09BUDEyLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICBj b250ZXh0LndyaXRlU2FmZVN0cmluZyhheGlzRmF1bHQuZ2V0RmF1bHROb2RlKCkpOwogICAgICAg ICAgICAgICAgICAgIGNvbnRleHQuZW5kRWxlbWVudCgpOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9CgogICAgICAgICAgICBFbGVtZW50W10gZmF1bHREZXRhaWxzID0gYXhpc0ZhdWx0 LmdldEZhdWx0RGV0YWlscygpOwogICAgICAgICAgICBpZiAoZmF1bHREZXRhaWxzICE9IG51bGwp IHsKICAgICAgICAgICAgICAgIGlmIChzb2FwQ29uc3RhbnRzID09IFNPQVBDb25zdGFudHMuU09B UDEyX0NPTlNUQU5UUykKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0RWxlbWVudChD b25zdGFudHMuUU5BTUVfRkFVTFRERVRBSUxfU09BUDEyLCBudWxsKTsKICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0RWxlbWVudChDb25zdGFudHMu UU5BTUVfRkFVTFRERVRBSUxTLCBudWxsKTsKCiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IGZhdWx0RGV0YWlscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGNv bnRleHQud3JpdGVET01FbGVtZW50KGZhdWx0RGV0YWlsc1tpXSk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICBjb250ZXh0LmVuZEVsZW1lbnQoKTsKICAgICAgICAgICAgfQogICAg ICAgIH0KCiAgICAgICAgY29udGV4dC5lbmRFbGVtZW50KCk7CiAgICB9CgogICAgcHVibGljIEF4 aXNGYXVsdCBnZXRGYXVsdCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhdWx0OwogICAgfQoKICAg IHB1YmxpYyB2b2lkIHNldEZhdWx0KEF4aXNGYXVsdCBmYXVsdCkKICAgIHsKICAgICAgICB0aGlz LmZhdWx0ID0gZmF1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoaXMgPENPREU+U09B UEZhdWx0RXhjZXB0aW9uPC9DT0RFPiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4KICAgICAqICAgZmF1 bHQgY29kZS4KICAgICAqCiAgICAgKiAgIDxQPkZhdWx0IGNvZGVzLCB3aGljaCBnaXZlbiBpbmZv cm1hdGlvbiBhYm91dCB0aGUgZmF1bHQsCiAgICAgKiAgIGFyZSBkZWZpbmVkIGluIHRoZSBTT0FQ IDEuMSBzcGVjaWZpY2F0aW9uLjwvUD4KICAgICAqIEBwYXJhbSAgIGZhdWx0Q29kZSBhIDxDT0RF PlN0cmluZzwvQ09ERT4gZ2l2aW5nCiAgICAgKiAgICAgdGhlIGZhdWx0IGNvZGUgdG8gYmUgc2V0 OyBtdXN0IGJlIG9uZSBvZiB0aGUgZmF1bHQgY29kZXMKICAgICAqICAgICBkZWZpbmVkIGluIHRo ZSBTT0FQIDEuMSBzcGVjaWZpY2F0aW9uCiAgICAgKiBAdGhyb3dzICBTT0FQRXhjZXB0aW9uIGlm IHRoZXJlIHdhcyBhbiBlcnJvciBpbgogICAgICogICAgIGFkZGluZyB0aGUgPENPREU+ZmF1bHRD b2RlPC9DT0RFPiB0byB0aGUgdW5kZXJseWluZyBYTUwKICAgICAqICAgICB0cmVlLgogICAgICov CiAgICBwdWJsaWMgdm9pZCBzZXRGYXVsdENvZGUoU3RyaW5nIGZhdWx0Q29kZSkgdGhyb3dzIFNP QVBFeGNlcHRpb24gewogICAgICAgIGZhdWx0LnNldEZhdWx0Q29kZShmYXVsdENvZGUpOwogICAg fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgZmF1bHQgY29kZSBmb3IgdGhpcyA8Q09ERT5TT0FQ RmF1bHRFeGNlcHRpb248L0NPREU+CiAgICAgKiBvYmplY3QuCiAgICAgKiBAcmV0dXJuIGEgPENP REU+U3RyaW5nPC9DT0RFPiB3aXRoIHRoZSBmYXVsdCBjb2RlCiAgICAgKi8KICAgIHB1YmxpYyBT dHJpbmcgZ2V0RmF1bHRDb2RlKCkgewogICAgICAgIHJldHVybiBmYXVsdC5nZXRGYXVsdENvZGUo KS5nZXRMb2NhbFBhcnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqICBTZXRzIHRoaXMgPENPREU+ U09BUEZhdWx0RXhjZXB0aW9uPC9DT0RFPiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4KICAgICAqICAg ZmF1bHQgYWN0b3IuCiAgICAgKgogICAgICogICA8UD5UaGUgZmF1bHQgYWN0b3IgaXMgdGhlIHJl Y2lwaWVudCBpbiB0aGUgbWVzc2FnZSBwYXRoIHdobwogICAgICogICBjYXVzZWQgdGhlIGZhdWx0 IHRvIGhhcHBlbi48L1A+CiAgICAgKiBAcGFyYW0gICBmYXVsdEFjdG9yIGEgPENPREU+U3RyaW5n PC9DT0RFPgogICAgICogICAgIGlkZW50aWZ5aW5nIHRoZSBhY3RvciB0aGF0IGNhdXNlZCB0aGlz IDxDT0RFPgogICAgICogICAgIFNPQVBGYXVsdEV4Y2VwdGlvbjwvQ09ERT4gb2JqZWN0CiAgICAg KiBAdGhyb3dzICBTT0FQRXhjZXB0aW9uICBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4KICAgICAq ICAgICBhZGRpbmcgdGhlIDxDT0RFPmZhdWx0QWN0b3I8L0NPREU+IHRvIHRoZSB1bmRlcmx5aW5n IFhNTAogICAgICogICAgIHRyZWUuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHNldEZhdWx0QWN0 b3IoU3RyaW5nIGZhdWx0QWN0b3IpIHRocm93cyBTT0FQRXhjZXB0aW9uIHsKICAgICAgICBmYXVs dC5zZXRGYXVsdEFjdG9yKGZhdWx0QWN0b3IpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0 aGUgZmF1bHQgYWN0b3IgZm9yIHRoaXMgPENPREU+U09BUEZhdWx0RXhjZXB0aW9uPC9DT0RFPgog ICAgICogb2JqZWN0LgogICAgICogQHJldHVybiAgYSA8Q09ERT5TdHJpbmc8L0NPREU+IGdpdmlu ZyB0aGUgYWN0b3IgaW4gdGhlIG1lc3NhZ2UKICAgICAqICAgICBwYXRoIHRoYXQgY2F1c2VkIHRo aXMgPENPREU+U09BUEZhdWx0RXhjZXB0aW9uPC9DT0RFPiBvYmplY3QKICAgICAqIEBzZWUgI3Nl dEZhdWx0QWN0b3IoamF2YS5sYW5nLlN0cmluZykgc2V0RmF1bHRBY3RvcihqYXZhLmxhbmcuU3Ry aW5nKQogICAgICovCiAgICBwdWJsaWMgU3RyaW5nIGdldEZhdWx0QWN0b3IoKSB7CiAgICAgICAg cmV0dXJuIGZhdWx0LmdldEZhdWx0QWN0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMg dGhlIGZhdWx0IHN0cmluZyBmb3IgdGhpcyA8Q09ERT5TT0FQRmF1bHRFeGNlcHRpb248L0NPREU+ CiAgICAgKiBvYmplY3QgdG8gdGhlIGdpdmVuIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0g ZmF1bHRTdHJpbmcgYSA8Q09ERT5TdHJpbmc8L0NPREU+CiAgICAgKiAgICAgZ2l2aW5nIGFuIGV4 cGxhbmF0aW9uIG9mIHRoZSBmYXVsdAogICAgICogQHRocm93cyAgU09BUEV4Y2VwdGlvbiAgaWYg dGhlcmUgd2FzIGFuIGVycm9yIGluCiAgICAgKiAgICAgYWRkaW5nIHRoZSA8Q09ERT5mYXVsdFN0 cmluZzwvQ09ERT4gdG8gdGhlIHVuZGVybHlpbmcgWE1MCiAgICAgKiAgICAgdHJlZS4KICAgICAq IEBzZWUgI2dldEZhdWx0U3RyaW5nKCkgZ2V0RmF1bHRTdHJpbmcoKQogICAgICovCiAgICBwdWJs aWMgdm9pZCBzZXRGYXVsdFN0cmluZyhTdHJpbmcgZmF1bHRTdHJpbmcpIHRocm93cyBTT0FQRXhj ZXB0aW9uIHsKICAgICAgICBmYXVsdC5zZXRGYXVsdFN0cmluZyhmYXVsdFN0cmluZyk7CiAgICB9 CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBmYXVsdCBzdHJpbmcgZm9yIHRoaXMgPENPREU+U09B UEZhdWx0RXhjZXB0aW9uPC9DT0RFPgogICAgICogb2JqZWN0LgogICAgICogQHJldHVybiBhIDxD T0RFPlN0cmluZzwvQ09ERT4gZ2l2aW5nIGFuIGV4cGxhbmF0aW9uIG9mIHRoZQogICAgICogICAg IGZhdWx0CiAgICAgKi8KICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmF1bHRTdHJpbmcoKSB7CiAgICAg ICAgcmV0dXJuIGZhdWx0LmdldEZhdWx0U3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBS ZXR1cm5zIHRoZSBkZXRhaWwgZWxlbWVudCBmb3IgdGhpcyA8Q09ERT5TT0FQRmF1bHRFeGNlcHRp b248L0NPREU+CiAgICAgKiAgIG9iamVjdC4KICAgICAqCiAgICAgKiAgIDxQPkEgPENPREU+RGV0 YWlsPC9DT0RFPiBvYmplY3QgY2FycmllcwogICAgICogICBhcHBsaWNhdGlvbi1zcGVjaWZpYyBl cnJvciBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIDxDT0RFPgogICAgICogICBTT0FQQm9keUVsZW1l bnQ8L0NPREU+IG9iamVjdHMuPC9QPgogICAgICogQHJldHVybiAgYSA8Q09ERT5EZXRhaWw8L0NP REU+IG9iamVjdCB3aXRoCiAgICAgKiAgICAgYXBwbGljYXRpb24tc3BlY2lmaWMgZXJyb3IgaW5m b3JtYXRpb24KICAgICAqLwogICAgcHVibGljIGphdmF4LnhtbC5zb2FwLkRldGFpbCBnZXREZXRh aWwoKSB7CiAgICAgICAgaWYodGhpcy5nZXRDaGlsZHJlbigpPT1udWxsIHx8IHRoaXMuZ2V0Q2hp bGRyZW4oKS5zaXplKCk8PTApCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVy biAoamF2YXgueG1sLnNvYXAuRGV0YWlsKSB0aGlzLmdldENoaWxkcmVuKCkuZ2V0KDApOwogICAg fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIDxDT0RFPkRldGFpbDwvQ09ERT4gb2JqZWN0IGFu ZCBzZXRzIGl0IGFzIHRoZQogICAgICogICA8Q09ERT5EZXRhaWw8L0NPREU+IG9iamVjdCBmb3Ig dGhpcyA8Q09ERT5TT0FQRmF1bHRFeGNlcHRpb248L0NPREU+CiAgICAgKiAgIG9iamVjdC4KICAg ICAqCiAgICAgKiAgIDxQPkl0IGlzIGlsbGVnYWwgdG8gYWRkIGEgZGV0YWlsIHdoZW4gdGhlIGZh dWx0IGFscmVhZHkKICAgICAqICAgY29udGFpbnMgYSBkZXRhaWwuIFRoZXJlZm9yZSwgdGhpcyBt ZXRob2Qgc2hvdWxkIGJlIGNhbGxlZAogICAgICogICBvbmx5IGFmdGVyIHRoZSBleGlzdGluZyBk ZXRhaWwgaGFzIGJlZW4gcmVtb3ZlZC48L1A+CiAgICAgKiBAcmV0dXJuIHRoZSBuZXcgPENPREU+ RGV0YWlsPC9DT0RFPiBvYmplY3QKICAgICAqIEB0aHJvd3MgIFNPQVBFeGNlcHRpb24gIGlmIHRo aXMKICAgICAqICAgICA8Q09ERT5TT0FQRmF1bHRFeGNlcHRpb248L0NPREU+IG9iamVjdCBhbHJl YWR5IGNvbnRhaW5zIGEgdmFsaWQKICAgICAqICAgICA8Q09ERT5EZXRhaWw8L0NPREU+IG9iamVj dAogICAgICovCiAgICBwdWJsaWMgamF2YXgueG1sLnNvYXAuRGV0YWlsIGFkZERldGFpbCgpIHRo cm93cyBTT0FQRXhjZXB0aW9uIHsKICAgICAgICBpZihnZXREZXRhaWwoKSE9bnVsbCl7CiAgICAg ICAgICAgIHRocm93IG5ldyBTT0FQRXhjZXB0aW9uKE1lc3NhZ2VzLmdldE1lc3NhZ2UoInZhbHVl UHJlc2VudCIpKTsKICAgICAgICB9CiAgICAgICAgRGV0YWlsIGRldGFpbCA9IG5ldyBEZXRhaWwo ZmF1bHQpOwogICAgICAgIGFkZENoaWxkRWxlbWVudChkZXRhaWwpOwogICAgICAgIHJldHVybiBk ZXRhaWw7CiAgICB9Cn0K ------_=_NextPart_001_01C28BDA.176EA13A--