Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 72008 invoked from network); 12 Jun 2009 13:19:23 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 12 Jun 2009 13:19:23 -0000 Received: (qmail 47729 invoked by uid 500); 12 Jun 2009 13:19:33 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 47642 invoked by uid 500); 12 Jun 2009 13:19:33 -0000 Mailing-List: contact axis-dev-help@ws.apache.org; run by ezmlm Precedence: bulk Reply-To: axis-dev@ws.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-dev@ws.apache.org Received: (qmail 47633 invoked by uid 99); 12 Jun 2009 13:19:33 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jun 2009 13:19:33 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy) Received: from [194.105.232.27] (HELO smtp-out-02.simnet.is) (194.105.232.27) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jun 2009 13:19:20 +0000 Authentication-Results: smtp-out-02.simnetpro.is; dkim=neutral (message not signed) header.i=none X-SBRS: 4.0 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvYCAOPyMUqdnWTZjGdsb2JhbACXKIEZAQEBChyofY8ZhAsF X-IronPort-AV: E=Sophos;i="4.42,209,1243814400"; d="scan'208";a="199298206" Received: from mta-cust-out-2.simnet.is ([157.157.132.81]) by smtp-out-02.simnetpro.is with ESMTP; 12 Jun 2009 13:18:55 +0000 Received: from eagle.betware.com (unknown [157.157.100.217]) by mta-cust-out-2.simnet.is (Postfix) with ESMTP id F1C5F233992 for ; Fri, 12 Jun 2009 13:18:54 +0000 (GMT) Received: from eagle.betware.com ([fe80::6d4a:3be1:65aa:8413]) by eagle.betware.com ([fe80::6d4a:3be1:65aa:8413%11]) with mapi; Fri, 12 Jun 2009 13:15:26 +0000 From: =?iso-8859-1?Q?P=E9tur_Run=F3lfsson?= To: "axis-dev@ws.apache.org" Date: Fri, 12 Jun 2009 13:15:25 +0000 Subject: RE: [Axis2] Bring back hours, minutes, seconds when Date is formatted in SimpleTypeMapper Thread-Topic: [Axis2] Bring back hours, minutes, seconds when Date is formatted in SimpleTypeMapper Thread-Index: AcnrHotts0BvKEH1RCSMtIzzDgmsKQAOxgdg Message-ID: References: ,<60708f4b0906112230h1d010e4fl2d1be48916261e9d@mail.gmail.com> In-Reply-To: <60708f4b0906112230h1d010e4fl2d1be48916261e9d@mail.gmail.com> Accept-Language: en-US, is-IS Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US, is-IS x-tm-as-product-ver: SMEX-8.0.0.1307-5.600.1016-16698.007 x-tm-as-result: No--53.124100-0.000000-31 x-tm-as-user-approved-sender: Yes x-tm-as-user-blocked-sender: No Content-Type: multipart/mixed; boundary="_002_FEA9B2D12070D743936FCA6A92FEA11903ECBFA7F8eaglebetwarec_" MIME-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org --_002_FEA9B2D12070D743936FCA6A92FEA11903ECBFA7F8eaglebetwarec_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I would prefer not to have to use java.util.Calendar to represent timestamp= s. There are a couple of reasons: * The rest of the application uses java.util.Date for this purpose. Having = to use Calendar for the SOAP layer would introduce extra conversions and m= ake the code less consistent. * Date includes both date and time. Mapping it to xs:date loses information= . The mapping for other types is not lossy (as far as I can tell). * It would be very easy to accidentally use Date instead of Calendar. This = error wouldn't be detected until at runtime, and might easily slip through = testing depending on how the dates are being used (sometimes timestamps are= stored with both date and time, but only the date portion might be display= ed). That said, here's a different patch that doesn't modify how Axis2 formats d= ates, but would solve the issue for me. This moves the implementation of SimpleTypeMap into a new class SimpleTypeM= ap, that has instance methods instead of static methods. A service paramete= r, SimpleTypeMap, can be used to specify a subclass of SimpleTypeMap to use= . The implementation of SimpleTypeMap is the same as SimpleTypeMapper was, = except that getStringValue has been split into different protected methods = and getCurrentMessageContext is no longer called inside getStringValue sinc= e AxisService is now available as a member. This allows much more flexibility than the earlier patch, at the cost that = the only way to take advantage of it is to write some code (the first patch= required only configuration). Potential use cases for this include: * Detailed control of how dates are formatted (should timezone be included?= which timezone? use offsets (+00:00) or canonical representation (Z)? map = Date to xs:date, xs:dateTime, xs:time or something else? include millisecon= ds or not?) * Custom types can be mapped to simple types (for example Joda date and tim= e classes can be mapped to xs:dateTime etc., or an Image class might be map= ped to base64binary instead of being treated as a complex type). I actually prefer this patch to the first one (for example, the first patch= lacked a corresponding option in Java2WSDL, but for this patch such an opt= ion already exists: -sg). Regards, P=E9tur Run=F3lfsson Betware ________________________________________ From: Amila Suriarachchi [amilasuriarachchi@gmail.com] Sent: Friday, June 12, 2009 05:30 To: axis-dev@ws.apache.org Subject: Re: [Axis2] Bring back hours, minutes, seconds when Date is format= ted in SimpleTypeMapper On Thu, Jun 11, 2009 at 8:02 PM, P=E9tur Run=F3lfsson > wrote: Hi, It seems that the schema type for java.util.Date has changed from xs:dateTi= me to xs:date in Axis2 1.5. This is preventing me from upgrading, since the= application depends on having both the date and time available for many op= erations. Now the convention is to map java.util.Date to xs:date and java.util.Calend= ar to xs:datetime is it possible you to convert your app to use Calendar instead of date wher= e you need to have datetime. here the reason is that if you represent something like birthday which repr= esent in java as java.util.date and should map to a xs:date. thanks, Amila. The attached patch adds a configuration option to change the schema type ba= ck to xs:dateTime. When the service parameter JavaDateSchemaType is set to = xs:dateTime, the format used by SimpleTypeMapper is yyyy-MM-dd'T'HH:mm:ss.S= SSZ, otherwise it is yyyy-MM-dd like before. Note that the format is differ= ent from Axis2 1.4.1 because of the TimeZone parameter that was added in 1.= 5. Setting the TimeZone to GMT restores the old behavior completely. This patch only modifies the formatting in SimpleTypeMapper. Java2WSDL stil= l treats Date as xs:date. This doesn't matter for me, since the schema is e= asy to fix using a custom SchemaGenerator or by running the wsdl through se= d. Still, it doesn't seem hard to add the corresponding support to Java2WSD= L. This fixes issues AXIS2-4329 and AXIS2-4370. Regards, P=E9tur Run=F3lfsson Betware The content of this e-mail, together with any of its attachments, is for th= e exclusive and confidential use of the named addressee(s) and it may conta= in legally privileged and confidential information and/or copyrighted mater= ial. Any other distribution, use or reproduction without the sender's prior= consent is unauthorized and strictly prohibited. If you have by coincidenc= e, mistake or without specific authorization received this e-mail in error,= please notify the sender by e-mail immediately, uphold strict confidential= ity and neither read, copy, transfer, disseminate, disclose nor otherwise m= ake use of its content in any way and delete the material from your compute= r. The content of the e-mail and its attachments is the liability of the indiv= idual sender, if it does not relate to the affairs of Betware. Betware does not assume any civil or criminal liability should the e-mail o= r it=B4s attachments be virus infected. -- Amila Suriarachchi WSO2 Inc. blog: http://amilachinthaka.blogspot.com/ The content of this e-mail, together with any of its attachments, is for th= e exclusive and confidential use of the named addressee(s) and it may conta= in legally privileged and confidential information and/or copyrighted mater= ial. Any other distribution, use or reproduction without the sender's prior= consent is unauthorized and strictly prohibited. If you have by coincidenc= e, mistake or without specific authorization received this e-mail in error,= please notify the sender by e-mail immediately, uphold strict confidential= ity and neither read, copy, transfer, disseminate, disclose nor otherwise m= ake use of its content in any way and delete the material from your compute= r. The content of the e-mail and its attachments is the liability of the indiv= idual sender, if it does not relate to the affairs of Betware. Betware does not assume any civil or criminal liability should the e-mail o= r it=B4s attachments be virus infected. --_002_FEA9B2D12070D743936FCA6A92FEA11903ECBFA7F8eaglebetwarec_ Content-Type: text/x-diff; name="Adb-SimpleTypeMap.patch" Content-Description: Adb-SimpleTypeMap.patch Content-Disposition: attachment; filename="Adb-SimpleTypeMap.patch"; size=31965; creation-date="Fri, 12 Jun 2009 13:04:55 GMT"; modification-date="Fri, 12 Jun 2009 13:04:55 GMT" Content-Transfer-Encoding: base64 SW5kZXg6IHRlc3Qvb3JnL2FwYWNoZS9heGlzMi9kYXRhYmluZGluZy90eXBlbWFwcGluZy9TaW1w bGVUeXBlTWFwcGVyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3Qvb3JnL2FwYWNoZS9heGlz Mi9kYXRhYmluZGluZy90eXBlbWFwcGluZy9TaW1wbGVUeXBlTWFwcGVyVGVzdC5qYXZhCShyZXZp c2lvbiAwKQorKysgdGVzdC9vcmcvYXBhY2hlL2F4aXMyL2RhdGFiaW5kaW5nL3R5cGVtYXBwaW5n L1NpbXBsZVR5cGVNYXBwZXJUZXN0LmphdmEJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBA CisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0Yp IHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNl ZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRp dGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhl IEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vu c2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlz IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkg b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hl Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJB U0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVp dGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVj aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1 bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuYXhpczIuZGF0YWJp bmRpbmcudHlwZW1hcHBpbmc7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmF4aXMyLmNvbnRleHQuTWVz c2FnZUNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5heGlzMi5kZXNjcmlwdGlvbi5BeGlzU2Vy dmljZTsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IGphdmF4 LmFjdGl2YXRpb24uRGF0YUhhbmRsZXI7CisKK2ltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIu VHJhbnNmZXJhYmxlOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0 aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CisKK3B1YmxpYyBjbGFzcyBTaW1w bGVUeXBlTWFwcGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworICAgIHByaXZhdGUgTWVzc2Fn ZUNvbnRleHQgbXNnQ29udGV4dDsKKyAgICBwcml2YXRlIEF4aXNTZXJ2aWNlIGF4aXNTZXJ2aWNl OworICAgIHByaXZhdGUgVGltZVpvbmUgcHJldlRpbWVab25lOworICAgIAorICAgIEBPdmVycmlk ZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAg IHByZXZUaW1lWm9uZSA9IFRpbWVab25lLmdldERlZmF1bHQoKTsKKyAgICAgICAgCisgICAgICAg IGF4aXNTZXJ2aWNlID0gbmV3IEF4aXNTZXJ2aWNlKCk7CisgICAgICAgIG1zZ0NvbnRleHQgPSBu ZXcgTWVzc2FnZUNvbnRleHQoKTsKKyAgICAgICAgbXNnQ29udGV4dC5zZXRBeGlzU2VydmljZShh eGlzU2VydmljZSk7CisgICAgICAgIE1lc3NhZ2VDb250ZXh0LnNldEN1cnJlbnRNZXNzYWdlQ29u dGV4dChtc2dDb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVj dGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTWVzc2FnZUNv bnRleHQuc2V0Q3VycmVudE1lc3NhZ2VDb250ZXh0KG51bGwpOworICAgICAgICAKKyAgICAgICAg VGltZVpvbmUuc2V0RGVmYXVsdChwcmV2VGltZVpvbmUpOworICAgIH0KKworICAgIHB1YmxpYyB2 b2lkIHRlc3REYXRhSGFuZGxlclR5cGVzKCkgeworICAgICAgICBhc3NlcnRUcnVlKFNpbXBsZVR5 cGVNYXBwZXIuaXNEYXRhSGFuZGxlcihEYXRhSGFuZGxlci5jbGFzcykpOworICAgICAgICBhc3Nl cnRUcnVlKFNpbXBsZVR5cGVNYXBwZXIuaXNEYXRhSGFuZGxlcihUcmFuc2ZlcmFibGUuY2xhc3Mp KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Tm9uRGF0YUhhbmRsZXJUeXBlcygpIHsK KyAgICAgICAgYXNzZXJ0RmFsc2UoU2ltcGxlVHlwZU1hcHBlci5pc0RhdGFIYW5kbGVyKE9iamVj dC5jbGFzcykpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRTdHJpbmdWYWx1ZUZy b21EYXRlKCkgeworICAgICAgICBEYXRlIGRhdGUgPSBnZXREYXRlKCk7CisKKyAgICAgICAgU3Ry aW5nIHJlc3VsdCA9IFNpbXBsZVR5cGVNYXBwZXIuZ2V0U3RyaW5nVmFsdWUoZGF0ZSk7CisgICAg ICAgIGFzc2VydEVxdWFscygiMjAwOS0wNi0xMCIsIHJlc3VsdCk7CisgICAgfQorCisgICAgcHVi bGljIHZvaWQgdGVzdEdldFN0cmluZ1ZhbHVlRnJvbURhdGVXaXRoVGltZVpvbmUoKSB0aHJvd3Mg RXhjZXB0aW9uIHsKKyAgICAgICAgVGltZVpvbmUuc2V0RGVmYXVsdChUaW1lWm9uZS5nZXRUaW1l Wm9uZSgiRXVyb3BlL0hlbHNpbmtpIikpOworCisgICAgICAgIERhdGUgZGF0ZSA9IGdldERhdGUo KTsKKworICAgICAgICBheGlzU2VydmljZS5hZGRQYXJhbWV0ZXIoIlRpbWVab25lIiwgIlBhY2lm aWMvSG9ub2x1bHUiKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyByZXN1bHQgPSBTaW1wbGVU eXBlTWFwcGVyLmdldFN0cmluZ1ZhbHVlKGRhdGUpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjIw MDktMDYtMDkiLCByZXN1bHQpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ3Vz dG9tRm9ybWF0TWFwIGV4dGVuZHMgU2ltcGxlVHlwZU1hcCB7CisgICAgICAgIEBPdmVycmlkZQor ICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGZvcm1hdERhdGUoT2JqZWN0IG9iaikgeworICAgICAg ICAgICAgcmV0dXJuICJIZWxsbywgd29ybGQhIjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg ICBwdWJsaWMgdm9pZCB0ZXN0R2V0U3RyaW5nVmFsdWVXaXRoQ3VzdG9tRm9ybWF0KCkgdGhyb3dz IEV4Y2VwdGlvbiB7CisgICAgICAgIERhdGUgZGF0ZSA9IGdldERhdGUoKTsKKworICAgICAgICBh eGlzU2VydmljZS5hZGRQYXJhbWV0ZXIoIlNpbXBsZVR5cGVNYXAiLCBDdXN0b21Gb3JtYXRNYXAu Y2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyByZXN1bHQgPSBTaW1w bGVUeXBlTWFwcGVyLmdldFN0cmluZ1ZhbHVlKGRhdGUpOworICAgICAgICBhc3NlcnRFcXVhbHMo IkhlbGxvLCB3b3JsZCEiLCByZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIERhdGUg Z2V0RGF0ZSgpIHsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2Uo KTsKKyAgICAgICAgY2FsLmNsZWFyKCk7CisgICAgICAgIGNhbC5zZXQoMjAwOSwgQ2FsZW5kYXIu SlVORSwgMTAsIDksIDE2LCAzNyk7CisgICAgICAgIHJldHVybiBjYWwuZ2V0VGltZSgpOworICAg IH0KK30KCkluZGV4OiBzcmMvb3JnL2FwYWNoZS9heGlzMi9kYXRhYmluZGluZy90eXBlbWFwcGlu Zy9TaW1wbGVUeXBlTWFwcGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL29yZy9hcGFjaGUvYXhp czIvZGF0YWJpbmRpbmcvdHlwZW1hcHBpbmcvU2ltcGxlVHlwZU1hcHBlci5qYXZhCShyZXZpc2lv biA3ODQwOTcpCisrKyBzcmMvb3JnL2FwYWNoZS9heGlzMi9kYXRhYmluZGluZy90eXBlbWFwcGlu Zy9TaW1wbGVUeXBlTWFwcGVyLmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTE5LDI5NyArMTksNzcg QEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLmF4aXMyLmRhdGFiaW5kaW5nLnR5cGVtYXBwaW5nOwog Ci1pbXBvcnQgb3JnLmFwYWNoZS5heGlvbS5hdHRhY2htZW50cy51dGlscy5EYXRhSGFuZGxlclV0 aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuYXhpb20ub20uT01FbGVtZW50OwotaW1wb3J0IG9yZy5h cGFjaGUuYXhpb20ub20uT01Ob2RlOwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpb20ub20uT01UZXh0 OwotaW1wb3J0IG9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRpbmcudXRpbHMuQ29udmVydGVyVXRp bDsKLWltcG9ydCBvcmcuYXBhY2hlLmF4aXMyLmNvbnRleHQuTWVzc2FnZUNvbnRleHQ7Ci1pbXBv cnQgb3JnLmFwYWNoZS5heGlzMi5kZXNjcmlwdGlvbi5BeGlzU2VydmljZTsKIAogaW1wb3J0IGph dmF4LmFjdGl2YXRpb24uRGF0YUhhbmRsZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5R TmFtZTsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0 aWwuKjsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhh c2hTZXQ7CisKIHB1YmxpYyBjbGFzcyBTaW1wbGVUeXBlTWFwcGVyIHsKIAotICAgIHByaXZhdGUg c3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkcgPSAiamF2YS5sYW5nLlN0cmluZyI7Ci0gICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdfSU5UID0gImphdmEubGFuZy5JbnRlZ2VyIjsKLSAg ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV19ET1VCTEUgPSAiamF2YS5sYW5nLkRvdWJs ZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdfTE9ORyA9ICJqYXZhLmxhbmcu TG9uZyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdfQllURSA9ICJqYXZhLmxh bmcuQnl0ZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdfU0hPUlQgPSAiamF2 YS5sYW5nLlNob3J0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV19CT09MRUFO ID0gImphdmEubGFuZy5Cb29sZWFuIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg V19DSEFSID0gImphdmEubGFuZy5DaGFyYWN0ZXIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFs IFN0cmluZyBXX0ZMT0FUID0gImphdmEubGFuZy5GbG9hdCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5nIFdfQ0FMRU5EQVIgPSAiamF2YS51dGlsLkNhbGVuZGFyIjsKLSAgICBwcml2 YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV19EQVRFID0gImphdmEudXRpbC5EYXRlIjsKLSAgICBw cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5UID0gImludCI7Ci0gICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgU3RyaW5nIEJPT0xFQU4gPSAiYm9vbGVhbiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5nIEJZVEUgPSAiYnl0ZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry aW5nIERPVUJMRSA9ICJkb3VibGUiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBT SE9SVCA9ICJzaG9ydCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPTkcgPSAi bG9uZyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZMT0FUID0gImZsb2F0IjsK LSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hBUiA9ICJjaGFyIjsKLQotICAgIC8q Ci0gICAgICogVG8gc3VwcG9ydCBkZXNlcmlhbGl6ZSBCaWdEZWNpbWFsLCBCaWdJbnRlZ2VyCi0g ICAgICogRGF5LCBEdXJhdGlvbiwgTW9udGgsIE1vbnRoRGF5LCBUaW1lLCBZZWFyLCBZZWFyTW9u dGgKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklHX0RFQ0lNQUwg PSAiamF2YS5tYXRoLkJpZ0RlY2ltYWwiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu ZyBCSUdfSU5URUdFUiA9ICJqYXZhLm1hdGguQmlnSW50ZWdlciI7Ci0gICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgU3RyaW5nIERBWSA9ICJvcmcuYXBhY2hlLmF4aXMyLmRhdGFiaW5kaW5nLnR5cGVz LkRheSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERVUkFUSU9OID0gIm9yZy5h cGFjaGUuYXhpczIuZGF0YWJpbmRpbmcudHlwZXMuRHVyYXRpb24iOwotICAgIHByaXZhdGUgc3Rh dGljIGZpbmFsIFN0cmluZyBNT05USCA9ICJvcmcuYXBhY2hlLmF4aXMyLmRhdGFiaW5kaW5nLnR5 cGVzLk1vbnRoIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9OVEhfREFZID0g Im9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRpbmcudHlwZXMuTW9udGhEYXkiOwotICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FID0gIm9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRp bmcudHlwZXMuVGltZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFlFQVIgPSAi b3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5ZZWFyIjsKLSAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBTdHJpbmcgWUVBUl9NT05USCA9ICJvcmcuYXBhY2hlLmF4aXMyLmRhdGFiaW5k aW5nLnR5cGVzLlllYXJNb250aCI7Ci0KKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVUeXBlTWFw IGdldFR5cGVNYXAoKSB7CisgICAgICAgIHJldHVybiBTaW1wbGVUeXBlTWFwLmdldEluc3RhbmNl KCk7CisgICAgfQorICAgIAogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldFNpbXBsZVR5cGVP YmplY3QoQ2xhc3MgcGFyYW1ldGVyLCBPTUVsZW1lbnQgdmFsdWUpIHsKLSAgICAgICAgU3RyaW5n IG5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpOwotICAgICAgICBTdHJpbmcgdGV4dCA9IHZhbHVl LmdldFRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmKG5hbWUuZXF1YWxzKFNUUklORykpIHsK LSAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9IGVsc2UgIGlmICh0ZXh0ID09IG51 bGwgfHwgdGV4dC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAg ICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhJTlQpKSB7Ci0gICAgICAgICAgICByZXR1cm4g bmV3IEludGVnZXIodGV4dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoQk9PTEVB TikpIHsKLSAgICAgICAgICAgIHJldHVybiBDb252ZXJ0ZXJVdGlsLmNvbnZlcnRUb0Jvb2xlYW4o dGV4dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoQllURSkpIHsKLSAgICAgICAg ICAgIHJldHVybiBuZXcgQnl0ZSh0ZXh0KTsKLSAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFs cyhET1VCTEUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZSh0ZXh0KTsKLSAgICAg ICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhTSE9SVCkpIHsKLSAgICAgICAgICAgIHJldHVybiBu ZXcgU2hvcnQodGV4dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoTE9ORykpIHsK LSAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZyh0ZXh0KTsKLSAgICAgICAgfSBlbHNlIGlmIChu YW1lLmVxdWFscyhGTE9BVCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQodGV4dCk7 Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoQ0hBUikpIHsKLSAgICAgICAgICAgIHJl dHVybiB0ZXh0LnRvQ2hhckFycmF5KClbMF07Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVh bHMoV19JTlQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIodGV4dCk7Ci0gICAg ICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoV19CT09MRUFOKSkgewotICAgICAgICAgICAgcmV0 dXJuIEJvb2xlYW4udmFsdWVPZih0ZXh0KTsKLSAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFs cyhXX0JZVEUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUodGV4dCk7Ci0gICAgICAg IH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoV19ET1VCTEUpKSB7Ci0gICAgICAgICAgICByZXR1cm4g bmV3IERvdWJsZSh0ZXh0KTsKLSAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhXX1NIT1JU KSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydCh0ZXh0KTsKLSAgICAgICAgfSBlbHNl IGlmIChuYW1lLmVxdWFscyhXX0xPTkcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IExvbmco dGV4dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoV19GTE9BVCkpIHsKLSAgICAg ICAgICAgIHJldHVybiBuZXcgRmxvYXQodGV4dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5l cXVhbHMoV19DSEFSKSkgewotICAgICAgICAgICAgcmV0dXJuIHRleHQudG9DaGFyQXJyYXkoKVsw XTsKLSAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhXX0NBTEVOREFSKSkgewotICAgICAg ICAgICAgcmV0dXJuIG1ha2VDYWxlbmRhcih0ZXh0KTsKLSAgICAgICAgfSBlbHNlIGlmIChuYW1l LmVxdWFscyhXX0RBVEUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZURhdGUodGV4dCk7Ci0g ICAgICAgIH0vKgotICAgICAgICAgKiByZXR1cm4gdGhlIGNvcnJlcHNvbmRpbmcgb2JqZWN0IGZv ciBhZGRpbmcgZGF0YSB0eXBlCi0gICAgICAgICAqLwotICAgICAgICBlbHNlIGlmKG5hbWUuZXF1 YWxzKEJJR19ERUNJTUFMKSkgewotICAgICAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVj aW1hbCh0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKG5hbWUuZXF1YWxzKEJJR19J TlRFR0VSKSkgewotICAgICAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcih0ZXh0 KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKG5hbWUuZXF1YWxzKERBWSkpIHsKLSAgICAg ICAgCXJldHVybiBuZXcgb3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5EYXkodGV4 dCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihuYW1lLmVxdWFscyhEVVJBVElPTikpIHsK LSAgICAgICAgCXJldHVybiBuZXcgb3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5E dXJhdGlvbih0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKG5hbWUuZXF1YWxzKE1P TlRIKSkgewotICAgICAgICAJcmV0dXJuIG5ldyBvcmcuYXBhY2hlLmF4aXMyLmRhdGFiaW5kaW5n LnR5cGVzLk1vbnRoKHRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYobmFtZS5lcXVh bHMoTU9OVEhfREFZKSkgewotICAgICAgICAJcmV0dXJuIG5ldyBvcmcuYXBhY2hlLmF4aXMyLmRh dGFiaW5kaW5nLnR5cGVzLk1vbnRoRGF5KHRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug aWYobmFtZS5lcXVhbHMoVElNRSkpIHsKLSAgICAgICAgCXJldHVybiBuZXcgb3JnLmFwYWNoZS5h eGlzMi5kYXRhYmluZGluZy50eXBlcy5UaW1lKHRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGVs c2UgaWYobmFtZS5lcXVhbHMoWUVBUikpIHsKLSAgICAgICAgCXJldHVybiBuZXcgb3JnLmFwYWNo ZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5ZZWFyKHRleHQpOwotICAgICAgICB9Ci0gICAgICAg IGVsc2UgaWYobmFtZS5lcXVhbHMoWUVBUl9NT05USCkpIHsKLSAgICAgICAgCXJldHVybiBuZXcg b3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5ZZWFyTW9udGgodGV4dCk7Ci0gICAg ICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAg fQorICAgICAgICByZXR1cm4gZ2V0VHlwZU1hcCgpLmdldFNpbXBsZVR5cGVPYmplY3QocGFyYW1l dGVyLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBBcnJheUxpc3QgZ2V0QXJy YXlMaXN0KE9NRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKSB7Ci0gICAgICAgIEl0 ZXJhdG9yIGNoaWxkaXRyID0gZWxlbWVudC5nZXRDaGlsZHJlbldpdGhOYW1lKG5ldyBRTmFtZShs b2NhbE5hbWUpKTsKLSAgICAgICAgQXJyYXlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0g ICAgICAgIHdoaWxlIChjaGlsZGl0ci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIE9iamVjdCBv ID0gY2hpbGRpdHIubmV4dCgpOwotICAgICAgICAgICAgbGlzdC5hZGQobyk7Ci0gICAgICAgIH0K LSAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAgIHJldHVybiBnZXRUeXBlTWFwKCkuZ2V0QXJy YXlMaXN0KGVsZW1lbnQsIGxvY2FsTmFtZSk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBI YXNoU2V0IGdldEhhc2hTZXQoT01FbGVtZW50IGVsZW1lbnQsIFN0cmluZyBsb2NhbE5hbWUpIHsK LSAgICAgICAgSXRlcmF0b3IgY2hpbGRpdHIgPSBlbGVtZW50LmdldENoaWxkcmVuV2l0aE5hbWUo bmV3IFFOYW1lKGxvY2FsTmFtZSkpOwotICAgICAgICBmaW5hbCBIYXNoU2V0IGxpc3QgPSBuZXcg SGFzaFNldCgpOwotICAgICAgICB3aGlsZSAoY2hpbGRpdHIuaGFzTmV4dCgpKSB7Ci0gICAgICAg ICAgICBPTUVsZW1lbnQgbyA9IChPTUVsZW1lbnQpIGNoaWxkaXRyLm5leHQoKTsKLSAgICAgICAg ICAgIGxpc3QuYWRkKG8uZ2V0VGV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlz dDsKKyAgICAgICAgcmV0dXJuIGdldFR5cGVNYXAoKS5nZXRIYXNoU2V0KGVsZW1lbnQsIGxvY2Fs TmFtZSk7CiAgICAgfQogCiAKICAgICAKICAgICBwdWJsaWMgc3RhdGljIERhdGFIYW5kbGVyIGdl dERhdGFIYW5kbGVyKE9NRWxlbWVudCBlbGVtZW50KSB7Ci0gICAgICAgIE9NTm9kZSBub2RlID0g ZWxlbWVudC5nZXRGaXJzdE9NQ2hpbGQoKTsKLSAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBP TVRleHQpIHsKLSAgICAgICAgICAgIE9NVGV4dCB0eHQgPSAoT01UZXh0KW5vZGU7Ci0gICAgICAg ICAgICBpZiAodHh0LmlzT3B0aW1pemVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKERh dGFIYW5kbGVyKXR4dC5nZXREYXRhSGFuZGxlcigpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICByZXR1cm4gKERhdGFIYW5kbGVyKURhdGFIYW5kbGVyVXRpbHMuZ2V0RGF0 YUhhbmRsZXJGcm9tVGV4dCh0eHQuZ2V0VGV4dCgpLCBudWxsKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIGdldFR5cGVNYXAo KS5nZXREYXRhSGFuZGxlcihlbGVtZW50KTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBzdGF0aWMg QXJyYXlMaXN0IGdldEFycmF5TGlzdChPTUVsZW1lbnQgZWxlbWVudCkgewotICAgICAgICBJdGVy YXRvciBjaGlsZGl0ciA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oKTsKLSAgICAgICAgQXJyYXlMaXN0 IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHdoaWxlIChjaGlsZGl0ci5oYXNOZXh0 KCkpIHsKLSAgICAgICAgICAgIE9iamVjdCBvID0gY2hpbGRpdHIubmV4dCgpOwotICAgICAgICAg ICAgbGlzdC5hZGQobyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAg IHJldHVybiBnZXRUeXBlTWFwKCkuZ2V0QXJyYXlMaXN0KGVsZW1lbnQpOwogICAgIH0KIAogICAg IHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NpbXBsZVR5cGUoT2JqZWN0IG9iaikgewotICAgICAg ICBTdHJpbmcgb2JqQ2xhc3NOYW1lID0gb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpOwotICAgICAg ICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQ2FsZW5kYXIgfHwgb2JqIGluc3RhbmNlb2YgRGF0ZSB8 fCBpc1NpbXBsZVR5cGUob2JqQ2xhc3NOYW1lKTsKKyAgICAgICAgcmV0dXJuIGdldFR5cGVNYXAo KS5pc1NpbXBsZVR5cGUob2JqKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4g aXNTaW1wbGVUeXBlKENsYXNzIG9iaikgewotICAgICAgICBTdHJpbmcgb2JqQ2xhc3NOYW1lID0g b2JqLmdldE5hbWUoKTsKLSAgICAgICAgcmV0dXJuIGlzU2ltcGxlVHlwZShvYmpDbGFzc05hbWUp OworICAgICAgICByZXR1cm4gZ2V0VHlwZU1hcCgpLmlzU2ltcGxlVHlwZShvYmopOwogICAgIH0K IAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RhdGFIYW5kbGVyKENsYXNzIG9iaikgewot ICAgICAgIHJldHVybiBvYmouaXNBc3NpZ25hYmxlRnJvbShEYXRhSGFuZGxlci5jbGFzcykgJiYg IW9iai5lcXVhbHMoT2JqZWN0LmNsYXNzKTsKKyAgICAgICAgcmV0dXJuIGdldFR5cGVNYXAoKS5p c0RhdGFIYW5kbGVyKG9iaik7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlz SGFzaFNldChDbGFzcyBvYmopIHsKLSAgICAgICAgcmV0dXJuIGphdmEudXRpbC5IYXNoU2V0LmNs YXNzLmlzQXNzaWduYWJsZUZyb20ob2JqKTsKKyAgICAgICAgcmV0dXJuIGdldFR5cGVNYXAoKS5p c0hhc2hTZXQob2JqKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Nv bGxlY3Rpb24oQ2xhc3Mgb2JqKSB7Ci0gICAgICAgIHJldHVybiBqYXZhLnV0aWwuQ29sbGVjdGlv bi5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKG9iaik7CisgICAgICAgIHJldHVybiBnZXRUeXBlTWFw KCkuaXNDb2xsZWN0aW9uKG9iaik7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFu IGlzU2ltcGxlVHlwZShTdHJpbmcgb2JqQ2xhc3NOYW1lKSB7Ci0gICAgICAgIGlmIChvYmpDbGFz c05hbWUuZXF1YWxzKFNUUklORykpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg ICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoSU5UKSkgewotICAgICAgICAgICAgcmV0 dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhCT09MRUFO KSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqQ2xh c3NOYW1lLmVxdWFscyhCWVRFKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg IH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhET1VCTEUpKSB7Ci0gICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChvYmpDbGFzc05hbWUuZXF1YWxzKFNIT1JU KSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqQ2xh c3NOYW1lLmVxdWFscyhMT05HKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg IH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhGTE9BVCkpIHsKLSAgICAgICAgICAgIHJl dHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoQ0hBUikp IHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNz TmFtZS5lcXVhbHMoV19JTlQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg fSBlbHNlIGlmIChvYmpDbGFzc05hbWUuZXF1YWxzKFdfQk9PTEVBTikpIHsKLSAgICAgICAgICAg IHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoV19C WVRFKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAob2Jq Q2xhc3NOYW1lLmVxdWFscyhXX0RPVUJMRSkpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot ICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoV19TSE9SVCkpIHsKLSAgICAg ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVh bHMoV19MT05HKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBp ZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhXX0ZMT0FUKSkgewotICAgICAgICAgICAgcmV0dXJuIHRy dWU7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhXX0NBTEVOREFSKSkg ewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NO YW1lLmVxdWFscyhXX0RBVEUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg fSAvKgotICAgICAgICAgKiBjb25zaWRlciBCaWdEZWNpbWFsLCBCaWdJbnRlZ2VyLCBEYXksIER1 cmF0aW9uLCBNb250aAotICAgICAgICAgKiBNb250aERheSwgVGltZSwgWWVhciwgWWVhck1vbnRo IGFzIHNpbXBsZSB0eXBlCi0gICAgICAgICAqLwotICAgICAgICBlbHNlIHJldHVybiBvYmpDbGFz c05hbWUuZXF1YWxzKEJJR19ERUNJTUFMKQotICAgICAgICAgICAgICAgICAgICB8fCBvYmpDbGFz c05hbWUuZXF1YWxzKEJJR19JTlRFR0VSKQotICAgICAgICAgICAgICAgICAgICB8fCBvYmpDbGFz c05hbWUuZXF1YWxzKERBWSkKLSAgICAgICAgICAgICAgICAgICAgfHwgb2JqQ2xhc3NOYW1lLmVx dWFscyhEVVJBVElPTikKLSAgICAgICAgICAgICAgICAgICAgfHwgb2JqQ2xhc3NOYW1lLmVxdWFs cyhNT05USCkKLSAgICAgICAgICAgICAgICAgICAgfHwgb2JqQ2xhc3NOYW1lLmVxdWFscyhNT05U SF9EQVkpCi0gICAgICAgICAgICAgICAgICAgIHx8IG9iakNsYXNzTmFtZS5lcXVhbHMoVElNRSkK LSAgICAgICAgICAgICAgICAgICAgfHwgb2JqQ2xhc3NOYW1lLmVxdWFscyhZRUFSKQotICAgICAg ICAgICAgICAgICAgICB8fCBvYmpDbGFzc05hbWUuZXF1YWxzKFlFQVJfTU9OVEgpIHx8IG9iakNs YXNzTmFtZS5lcXVhbHMoV19DSEFSKTsKKyAgICAgICAgcmV0dXJuIGdldFR5cGVNYXAoKS5pc1Np bXBsZVR5cGUob2JqQ2xhc3NOYW1lKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIFN0cmlu ZyBnZXRTdHJpbmdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2Vv ZiBGbG9hdCB8fAotICAgICAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIERvdWJsZSkgewotICAg ICAgICAgICAgZG91YmxlIGRhdGE7Ci0gICAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRmxv YXQpIHsKLSAgICAgICAgICAgICAgICBkYXRhID0gKChGbG9hdClvYmopLmRvdWJsZVZhbHVlKCk7 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRhdGEgPSAoRG91YmxlKW9i ajsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChEb3VibGUuaXNOYU4oZGF0YSkpIHsK LSAgICAgICAgICAgICAgICByZXR1cm4gIk5hTiI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRh dGEgPT0gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu ICJJTkYiOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhID09IERvdWJsZS5ORUdBVElWRV9J TkZJTklUWSkgewotICAgICAgICAgICAgICAgIHJldHVybiAiLUlORiI7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBDYWxlbmRhcikgewotICAg ICAgICAgICAgQ2FsZW5kYXIgY2FsZW5kYXIgPSAoQ2FsZW5kYXIpIG9iajsKLSAgICAgICAgICAg IHJldHVybiBDb252ZXJ0ZXJVdGlsLmNvbnZlcnRUb1N0cmluZyhjYWxlbmRhcik7Ci0gICAgICAg IH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkgewotICAgICAgICAgICAgU2ltcGxlRGF0 ZUZvcm1hdCB6dWx1ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsKLQotICAg ICAgICAgICAgTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQgPSBNZXNzYWdlQ29udGV4dC5n ZXRDdXJyZW50TWVzc2FnZUNvbnRleHQoKTsKLSAgICAgICAgICAgIEF4aXNTZXJ2aWNlIGF4aXNT ZXJ2Y2UgPSBtZXNzYWdlQ29udGV4dC5nZXRBeGlzU2VydmljZSgpOwotICAgICAgICAgICAgLy8g aWYgdGhlIHVzZXIgaGFzIGdpdmVuIGEgcGlydGljdWFsciB0aW1lem9uZSB3ZSB1c2UgaXQuCi0g ICAgICAgICAgICBpZiAoYXhpc1NlcnZjZS5nZXRQYXJhbWV0ZXIoIlRpbWVab25lIikgIT0gbnVs bCl7Ci0gICAgICAgICAgICAgICB6dWx1LnNldFRpbWVab25lKFRpbWVab25lLmdldFRpbWVab25l KChTdHJpbmcpYXhpc1NlcnZjZS5nZXRQYXJhbWV0ZXIoIlRpbWVab25lIikuZ2V0VmFsdWUoKSkp OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4genVsdS5mb3JtYXQob2JqKTsK LSAgICAgICAgfQotICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVy biBnZXRUeXBlTWFwKCkuZ2V0U3RyaW5nVmFsdWUob2JqKTsKICAgICB9CiAKICAgICBwdWJsaWMg c3RhdGljIE9iamVjdCBtYWtlQ2FsZW5kYXIoU3RyaW5nIHNvdXJjZSkgewotICAgICAgICByZXR1 cm4gQ29udmVydGVyVXRpbC5jb252ZXJ0VG9EYXRlVGltZShzb3VyY2UpOworICAgICAgICByZXR1 cm4gZ2V0VHlwZU1hcCgpLm1ha2VDYWxlbmRhcihzb3VyY2UpOwogICAgIH0KIAogICAgIHB1Ymxp YyBzdGF0aWMgT2JqZWN0IG1ha2VEYXRlKFN0cmluZyBzb3VyY2UpIHsKLSAgICAgICAgcmV0dXJu IENvbnZlcnRlclV0aWwuY29udmVydFRvRGF0ZVRpbWUoc291cmNlKS5nZXRUaW1lKCk7CisgICAg ICAgIHJldHVybiBnZXRUeXBlTWFwKCkubWFrZURhdGUoc291cmNlKTsKICAgICB9CiAKIH0KSW5k ZXg6IHNyYy9vcmcvYXBhY2hlL2F4aXMyL2RhdGFiaW5kaW5nL3R5cGVtYXBwaW5nL1NpbXBsZVR5 cGVNYXAuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzcmMvb3JnL2FwYWNoZS9heGlzMi9kYXRhYmluZGlu Zy90eXBlbWFwcGluZy9TaW1wbGVUeXBlTWFwLmphdmEJKHJldmlzaW9uIDApCisrKyBzcmMvb3Jn L2FwYWNoZS9heGlzMi9kYXRhYmluZGluZy90eXBlbWFwcGluZy9TaW1wbGVUeXBlTWFwLmphdmEJ KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFw YWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250 cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3Ry aWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdh cmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAq IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJM aWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UK KyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z ZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor ICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g d3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp c3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig Q09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNl ZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy bWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitw YWNrYWdlIG9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRpbmcudHlwZW1hcHBpbmc7CisKK2ltcG9y dCBvcmcuYXBhY2hlLmF4aW9tLmF0dGFjaG1lbnRzLnV0aWxzLkRhdGFIYW5kbGVyVXRpbHM7Citp bXBvcnQgb3JnLmFwYWNoZS5heGlvbS5vbS5PTUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5h eGlvbS5vbS5PTU5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS5heGlvbS5vbS5PTVRleHQ7CitpbXBv cnQgb3JnLmFwYWNoZS5heGlzMi5BeGlzRmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5heGlzMi5j b250ZXh0Lk1lc3NhZ2VDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRp bmcudXRpbHMuQ29udmVydGVyVXRpbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmF4aXMyLmRlc2NyaXB0 aW9uLkF4aXNTZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuYXhpczIudXRpbC5Mb2FkZXI7Citp bXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOworaW1wb3J0IG9yZy5hcGFjaGUu Y29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CisKK2ltcG9ydCBqYXZheC5hY3RpdmF0aW9uLkRh dGFIYW5kbGVyOworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CisKK2ltcG9ydCBq YXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisg KiA8cD4KKyAqIEhhbmRsZXMgY29udmVyc2lvbiBvZiBYTUwgc2ltcGxlIHR5cGVzIGZyb20gSmF2 YSBvYmplY3QgdG8gc3RyaW5ncyBhbmQgYmFjay4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBj YW4gYmUgY3VzdG9taXplZCBieSBzZXR0aW5nIHRoZSB7QHZhbHVlICNDTEFTU19QQVJBTX0gc2Vy dmljZSBwYXJhbWV0ZXIuIAorICogPC9wPiAKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZVR5cGVN YXAgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFOQ0VfUEFSQU0gPSAi b3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlbWFwcGluZy5TaW1wbGVUeXBlTWFwLmlu c3RhbmNlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19QQVJBTSA9ICJT aW1wbGVUeXBlTWFwIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkcg PSAiamF2YS5sYW5nLlN0cmluZyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdf SU5UID0gImphdmEubGFuZy5JbnRlZ2VyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp bmcgV19ET1VCTEUgPSAiamF2YS5sYW5nLkRvdWJsZSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgU3RyaW5nIFdfTE9ORyA9ICJqYXZhLmxhbmcuTG9uZyI7CisgICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5nIFdfQllURSA9ICJqYXZhLmxhbmcuQnl0ZSI7CisgICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgU3RyaW5nIFdfU0hPUlQgPSAiamF2YS5sYW5nLlNob3J0IjsKKyAgICBwcml2YXRl IHN0YXRpYyBmaW5hbCBTdHJpbmcgV19CT09MRUFOID0gImphdmEubGFuZy5Cb29sZWFuIjsKKyAg ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV19DSEFSID0gImphdmEubGFuZy5DaGFyYWN0 ZXIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXX0ZMT0FUID0gImphdmEubGFu Zy5GbG9hdCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdfQ0FMRU5EQVIgPSAi amF2YS51dGlsLkNhbGVuZGFyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV19E QVRFID0gImphdmEudXRpbC5EYXRlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg SU5UID0gImludCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJPT0xFQU4gPSAi Ym9vbGVhbiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJZVEUgPSAiYnl0ZSI7 CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERPVUJMRSA9ICJkb3VibGUiOworICAg IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9SVCA9ICJzaG9ydCI7CisgICAgcHJpdmF0 ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPTkcgPSAibG9uZyI7CisgICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5nIEZMT0FUID0gImZsb2F0IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT dHJpbmcgQ0hBUiA9ICJjaGFyIjsKKworICAgIC8qCisgICAgICogVG8gc3VwcG9ydCBkZXNlcmlh bGl6ZSBCaWdEZWNpbWFsLCBCaWdJbnRlZ2VyCisgICAgICogRGF5LCBEdXJhdGlvbiwgTW9udGgs IE1vbnRoRGF5LCBUaW1lLCBZZWFyLCBZZWFyTW9udGgKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBTdHJpbmcgQklHX0RFQ0lNQUwgPSAiamF2YS5tYXRoLkJpZ0RlY2ltYWwiOwor ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSUdfSU5URUdFUiA9ICJqYXZhLm1hdGgu QmlnSW50ZWdlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBWSA9ICJvcmcu YXBhY2hlLmF4aXMyLmRhdGFiaW5kaW5nLnR5cGVzLkRheSI7CisgICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5nIERVUkFUSU9OID0gIm9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRpbmcudHlw ZXMuRHVyYXRpb24iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT05USCA9ICJv cmcuYXBhY2hlLmF4aXMyLmRhdGFiaW5kaW5nLnR5cGVzLk1vbnRoIjsKKyAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBTdHJpbmcgTU9OVEhfREFZID0gIm9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRp bmcudHlwZXMuTW9udGhEYXkiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1F ID0gIm9yZy5hcGFjaGUuYXhpczIuZGF0YWJpbmRpbmcudHlwZXMuVGltZSI7CisgICAgcHJpdmF0 ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFlFQVIgPSAib3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGlu Zy50eXBlcy5ZZWFyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWUVBUl9NT05U SCA9ICJvcmcuYXBhY2hlLmF4aXMyLmRhdGFiaW5kaW5nLnR5cGVzLlllYXJNb250aCI7CisKKyAg ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coU2ltcGxl VHlwZU1hcC5jbGFzcyk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlVHlwZU1hcCBk ZWZhdWx0SW5zdGFuY2UgPSBuZXcgU2ltcGxlVHlwZU1hcCgpOworICAgIHByaXZhdGUgQXhpc1Nl cnZpY2UgYXhpc1NlcnZpY2U7CisgICAgCisgICAgcHVibGljIHN0YXRpYyBTaW1wbGVUeXBlTWFw IGdldEluc3RhbmNlKCkgeworICAgICAgICBNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCA9 IE1lc3NhZ2VDb250ZXh0LmdldEN1cnJlbnRNZXNzYWdlQ29udGV4dCgpOworICAgICAgICBpZiAo bWVzc2FnZUNvbnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGdldEluc3RhbmNl KG1lc3NhZ2VDb250ZXh0LmdldEF4aXNTZXJ2aWNlKCkpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgcmV0dXJuIGRlZmF1bHRJbnN0YW5jZTsKKyAgICAgICAgfQorICAgIH0KKworICAg IHB1YmxpYyBzdGF0aWMgU2ltcGxlVHlwZU1hcCBnZXRJbnN0YW5jZShBeGlzU2VydmljZSBheGlz U2VydmljZSkgeworICAgICAgICBTaW1wbGVUeXBlTWFwIGluc3RhbmNlID0gKFNpbXBsZVR5cGVN YXApIGF4aXNTZXJ2aWNlLmdldFBhcmFtZXRlclZhbHVlKElOU1RBTkNFX1BBUkFNKTsKKyAgICAg ICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUg PSAoU3RyaW5nKSBheGlzU2VydmljZS5nZXRQYXJhbWV0ZXJWYWx1ZShDTEFTU19QQVJBTSk7Cisg ICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjbGFz c05hbWUgPSBjbGFzc05hbWUudHJpbSgpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAg ICAgICAgICAgICAgIENsYXNzIGNsYXp6ID0gTG9hZGVyLmxvYWRDbGFzcyhheGlzU2VydmljZS5n ZXRDbGFzc0xvYWRlcigpLCBjbGFzc05hbWUpOworICAgICAgICAgICAgICAgICAgICBpbnN0YW5j ZSA9IChTaW1wbGVUeXBlTWFwKSBjbGF6ei5uZXdJbnN0YW5jZSgpOworICAgICAgICAgICAgICAg IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBS dW50aW1lRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIFNpbXBsZVR5cGVNYXAgaW5zdGFuY2Ug b2YgdHlwZSAnIiArIGNsYXNzTmFtZSArICInIiwgZSk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBTaW1wbGVU eXBlTWFwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0YW5jZS5zZXRBeGlzU2Vy dmljZShheGlzU2VydmljZSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGF4 aXNTZXJ2aWNlLmFkZFBhcmFtZXRlcihJTlNUQU5DRV9QQVJBTSwgaW5zdGFuY2UpOworICAgICAg ICAgICAgfSBjYXRjaCAoQXhpc0ZhdWx0IGUpIHsKKyAgICAgICAgICAgICAgICAvLyBQcm9iYWJs eSBtZWFucyBzb21lYm9keSBlbHNlIGFkZGVkIHRoZSBwYXJhbWV0ZXIgY29uY3VycmVudGx5LCBk b2Vzbid0IHJlYWxseSBtYXR0ZXIuCisgICAgICAgICAgICAgICAgbG9nLndhcm4oIkZhaWxlZCB0 byBhZGQgU2ltcGxlVHlwZU1hcCB0byBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lk IHNldEF4aXNTZXJ2aWNlKEF4aXNTZXJ2aWNlIGF4aXNTZXJ2aWNlKSB7CisgICAgICAgIHRoaXMu YXhpc1NlcnZpY2UgPSBheGlzU2VydmljZTsKKyAgICB9CisKKyAgICBwdWJsaWMgQXhpc1NlcnZp Y2UgZ2V0QXhpc1NlcnZpY2UoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmF4aXNTZXJ2aWNlOwor ICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0U2ltcGxlVHlwZU9iamVjdChDbGFzcyBwYXJh bWV0ZXIsIE9NRWxlbWVudCB2YWx1ZSkgeworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUg PSBwYXJhbWV0ZXIuZ2V0TmFtZSgpOworICAgICAgICBTdHJpbmcgdGV4dCA9IHZhbHVlLmdldFRl eHQoKTsKKyAgICAgICAgCisgICAgICAgIGlmKG5hbWUuZXF1YWxzKFNUUklORykpIHsKKyAgICAg ICAgICAgIHJldHVybiB0ZXh0OworICAgICAgICB9IGVsc2UgIGlmICh0ZXh0ID09IG51bGwgfHwg dGV4dC5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg fSBlbHNlIGlmIChuYW1lLmVxdWFscyhJTlQpKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IElu dGVnZXIodGV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoQk9PTEVBTikpIHsK KyAgICAgICAgICAgIHJldHVybiBDb252ZXJ0ZXJVdGlsLmNvbnZlcnRUb0Jvb2xlYW4odGV4dCk7 CisgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoQllURSkpIHsKKyAgICAgICAgICAgIHJl dHVybiBuZXcgQnl0ZSh0ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhET1VC TEUpKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZSh0ZXh0KTsKKyAgICAgICAgfSBl bHNlIGlmIChuYW1lLmVxdWFscyhTSE9SVCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU2hv cnQodGV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoTE9ORykpIHsKKyAgICAg ICAgICAgIHJldHVybiBuZXcgTG9uZyh0ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVx dWFscyhGTE9BVCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQodGV4dCk7CisgICAg ICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoQ0hBUikpIHsKKyAgICAgICAgICAgIHJldHVybiB0 ZXh0LnRvQ2hhckFycmF5KClbMF07CisgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoV19J TlQpKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIodGV4dCk7CisgICAgICAgIH0g ZWxzZSBpZiAobmFtZS5lcXVhbHMoV19CT09MRUFOKSkgeworICAgICAgICAgICAgcmV0dXJuIEJv b2xlYW4udmFsdWVPZih0ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhXX0JZ VEUpKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUodGV4dCk7CisgICAgICAgIH0gZWxz ZSBpZiAobmFtZS5lcXVhbHMoV19ET1VCTEUpKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IERv dWJsZSh0ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhXX1NIT1JUKSkgewor ICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydCh0ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChu YW1lLmVxdWFscyhXX0xPTkcpKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcodGV4dCk7 CisgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoV19GTE9BVCkpIHsKKyAgICAgICAgICAg IHJldHVybiBuZXcgRmxvYXQodGV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMo V19DSEFSKSkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQudG9DaGFyQXJyYXkoKVswXTsKKyAg ICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhXX0NBTEVOREFSKSkgeworICAgICAgICAgICAg cmV0dXJuIG1ha2VDYWxlbmRhcih0ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFs cyhXX0RBVEUpKSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZURhdGUodGV4dCk7CisgICAgICAg IH0vKgorICAgICAgICAgKiByZXR1cm4gdGhlIGNvcnJlcHNvbmRpbmcgb2JqZWN0IGZvciBhZGRp bmcgZGF0YSB0eXBlCisgICAgICAgICAqLworICAgICAgICBlbHNlIGlmKG5hbWUuZXF1YWxzKEJJ R19ERUNJTUFMKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1h bCh0ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKG5hbWUuZXF1YWxzKEJJR19JTlRF R0VSKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcih0ZXh0 KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKG5hbWUuZXF1YWxzKERBWSkpIHsKKyAgICAg ICAgICAgIHJldHVybiBuZXcgb3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5EYXko dGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihuYW1lLmVxdWFscyhEVVJBVElPTikp IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgb3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50 eXBlcy5EdXJhdGlvbih0ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKG5hbWUuZXF1 YWxzKE1PTlRIKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBvcmcuYXBhY2hlLmF4aXMyLmRh dGFiaW5kaW5nLnR5cGVzLk1vbnRoKHRleHQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYo bmFtZS5lcXVhbHMoTU9OVEhfREFZKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBvcmcuYXBh Y2hlLmF4aXMyLmRhdGFiaW5kaW5nLnR5cGVzLk1vbnRoRGF5KHRleHQpOworICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYobmFtZS5lcXVhbHMoVElNRSkpIHsKKyAgICAgICAgICAgIHJldHVybiBu ZXcgb3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5UaW1lKHRleHQpOworICAgICAg ICB9CisgICAgICAgIGVsc2UgaWYobmFtZS5lcXVhbHMoWUVBUikpIHsKKyAgICAgICAgICAgIHJl dHVybiBuZXcgb3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5ZZWFyKHRleHQpOwor ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYobmFtZS5lcXVhbHMoWUVBUl9NT05USCkpIHsKKyAg ICAgICAgICAgIHJldHVybiBuZXcgb3JnLmFwYWNoZS5heGlzMi5kYXRhYmluZGluZy50eXBlcy5Z ZWFyTW9udGgodGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBy ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0 QXJyYXlMaXN0KE9NRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbG9jYWxOYW1lKSB7CisgICAgICAg IEl0ZXJhdG9yIGNoaWxkaXRyID0gZWxlbWVudC5nZXRDaGlsZHJlbldpdGhOYW1lKG5ldyBRTmFt ZShsb2NhbE5hbWUpKTsKKyAgICAgICAgQXJyYXlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7 CisgICAgICAgIHdoaWxlIChjaGlsZGl0ci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIE9iamVj dCBvID0gY2hpbGRpdHIubmV4dCgpOworICAgICAgICAgICAgbGlzdC5hZGQobyk7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgcHVibGljIEhhc2hTZXQgZ2V0 SGFzaFNldChPTUVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGxvY2FsTmFtZSkgeworICAgICAgICBJ dGVyYXRvciBjaGlsZGl0ciA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW5XaXRoTmFtZShuZXcgUU5hbWUo bG9jYWxOYW1lKSk7CisgICAgICAgIGZpbmFsIEhhc2hTZXQgbGlzdCA9IG5ldyBIYXNoU2V0KCk7 CisgICAgICAgIHdoaWxlIChjaGlsZGl0ci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIE9NRWxl bWVudCBvID0gKE9NRWxlbWVudCkgY2hpbGRpdHIubmV4dCgpOworICAgICAgICAgICAgbGlzdC5h ZGQoby5nZXRUZXh0KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0K KworCisgICAgcHVibGljIERhdGFIYW5kbGVyIGdldERhdGFIYW5kbGVyKE9NRWxlbWVudCBlbGVt ZW50KSB7CisgICAgICAgIE9NTm9kZSBub2RlID0gZWxlbWVudC5nZXRGaXJzdE9NQ2hpbGQoKTsK KyAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBPTVRleHQpIHsKKyAgICAgICAgICAgIE9NVGV4 dCB0eHQgPSAoT01UZXh0KW5vZGU7CisgICAgICAgICAgICBpZiAodHh0LmlzT3B0aW1pemVkKCkp IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKERhdGFIYW5kbGVyKXR4dC5nZXREYXRhSGFuZGxl cigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKERhdGFI YW5kbGVyKURhdGFIYW5kbGVyVXRpbHMuZ2V0RGF0YUhhbmRsZXJGcm9tVGV4dCh0eHQuZ2V0VGV4 dCgpLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs bDsKKyAgICB9CisKKworICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0QXJyYXlMaXN0KE9NRWxlbWVu dCBlbGVtZW50KSB7CisgICAgICAgIEl0ZXJhdG9yIGNoaWxkaXRyID0gZWxlbWVudC5nZXRDaGls ZHJlbigpOworICAgICAgICBBcnJheUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAg ICAgd2hpbGUgKGNoaWxkaXRyLmhhc05leHQoKSkgeworICAgICAgICAgICAgT2JqZWN0IG8gPSBj aGlsZGl0ci5uZXh0KCk7CisgICAgICAgICAgICBsaXN0LmFkZChvKTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NpbXBsZVR5 cGUoT2JqZWN0IG9iaikgeworICAgICAgICBTdHJpbmcgb2JqQ2xhc3NOYW1lID0gb2JqLmdldENs YXNzKCkuZ2V0TmFtZSgpOworICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQ2FsZW5kYXIg fHwgb2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBpc1NpbXBsZVR5cGUob2JqQ2xhc3NOYW1lKTsKKyAg ICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NpbXBsZVR5cGUoQ2xhc3Mgb2JqKSB7CisgICAg ICAgIFN0cmluZyBvYmpDbGFzc05hbWUgPSBvYmouZ2V0TmFtZSgpOworICAgICAgICByZXR1cm4g aXNTaW1wbGVUeXBlKG9iakNsYXNzTmFtZSk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4g aXNEYXRhSGFuZGxlcihDbGFzcyBvYmopIHsKKyAgICAgICByZXR1cm4gb2JqLmlzQXNzaWduYWJs ZUZyb20oRGF0YUhhbmRsZXIuY2xhc3MpICYmICFvYmouZXF1YWxzKE9iamVjdC5jbGFzcyk7Cisg ICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNIYXNoU2V0KENsYXNzIG9iaikgeworICAgICAg ICByZXR1cm4gamF2YS51dGlsLkhhc2hTZXQuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShvYmopOwor ICAgIH0KKworCisgICAgcHVibGljIGJvb2xlYW4gaXNDb2xsZWN0aW9uKENsYXNzIG9iaikgewor ICAgICAgICByZXR1cm4gamF2YS51dGlsLkNvbGxlY3Rpb24uY2xhc3MuaXNBc3NpZ25hYmxlRnJv bShvYmopOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzU2ltcGxlVHlwZShTdHJpbmcg b2JqQ2xhc3NOYW1lKSB7CisgICAgICAgIGlmIChvYmpDbGFzc05hbWUuZXF1YWxzKFNUUklORykp IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNz TmFtZS5lcXVhbHMoSU5UKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0g ZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhCT09MRUFOKSkgeworICAgICAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhCWVRFKSkg eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NO YW1lLmVxdWFscyhET1VCTEUpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg fSBlbHNlIGlmIChvYmpDbGFzc05hbWUuZXF1YWxzKFNIT1JUKSkgeworICAgICAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhMT05HKSkg eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NO YW1lLmVxdWFscyhGTE9BVCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9 IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoQ0hBUikpIHsKKyAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoV19JTlQpKSB7 CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChvYmpDbGFzc05h bWUuZXF1YWxzKFdfQk9PTEVBTikpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg ICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoV19CWVRFKSkgeworICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhXX0RP VUJMRSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG9i akNsYXNzTmFtZS5lcXVhbHMoV19TSE9SVCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor ICAgICAgICB9IGVsc2UgaWYgKG9iakNsYXNzTmFtZS5lcXVhbHMoV19MT05HKSkgeworICAgICAg ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFs cyhXX0ZMT0FUKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBp ZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhXX0NBTEVOREFSKSkgeworICAgICAgICAgICAgcmV0dXJu IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAob2JqQ2xhc3NOYW1lLmVxdWFscyhXX0RBVEUpKSB7 CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSAvKgorICAgICAgICAgKiBjb25z aWRlciBCaWdEZWNpbWFsLCBCaWdJbnRlZ2VyLCBEYXksIER1cmF0aW9uLCBNb250aAorICAgICAg ICAgKiBNb250aERheSwgVGltZSwgWWVhciwgWWVhck1vbnRoIGFzIHNpbXBsZSB0eXBlCisgICAg ICAgICAqLworICAgICAgICBlbHNlIHJldHVybiBvYmpDbGFzc05hbWUuZXF1YWxzKEJJR19ERUNJ TUFMKQorICAgICAgICAgICAgICAgICAgICB8fCBvYmpDbGFzc05hbWUuZXF1YWxzKEJJR19JTlRF R0VSKQorICAgICAgICAgICAgICAgICAgICB8fCBvYmpDbGFzc05hbWUuZXF1YWxzKERBWSkKKyAg ICAgICAgICAgICAgICAgICAgfHwgb2JqQ2xhc3NOYW1lLmVxdWFscyhEVVJBVElPTikKKyAgICAg ICAgICAgICAgICAgICAgfHwgb2JqQ2xhc3NOYW1lLmVxdWFscyhNT05USCkKKyAgICAgICAgICAg ICAgICAgICAgfHwgb2JqQ2xhc3NOYW1lLmVxdWFscyhNT05USF9EQVkpCisgICAgICAgICAgICAg ICAgICAgIHx8IG9iakNsYXNzTmFtZS5lcXVhbHMoVElNRSkKKyAgICAgICAgICAgICAgICAgICAg fHwgb2JqQ2xhc3NOYW1lLmVxdWFscyhZRUFSKQorICAgICAgICAgICAgICAgICAgICB8fCBvYmpD bGFzc05hbWUuZXF1YWxzKFlFQVJfTU9OVEgpIHx8IG9iakNsYXNzTmFtZS5lcXVhbHMoV19DSEFS KTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKE9iamVjdCBvYmop IHsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEZsb2F0IHx8CisgICAgICAgICAgICAgICAg b2JqIGluc3RhbmNlb2YgRG91YmxlKSB7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0RmxvYXRp bmdQb2ludChvYmopOworICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIENhbGVuZGFy KSB7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0Q2FsZW5kYXIob2JqKTsKKyAgICAgICAgfSBl bHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0 RGF0ZShvYmopOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTsKKyAg ICB9CisKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGZvcm1hdEZsb2F0aW5nUG9pbnQoT2JqZWN0IG9i aikgeworICAgICAgICBkb3VibGUgZGF0YTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEZs b2F0KSB7CisgICAgICAgICAgICBkYXRhID0gKChGbG9hdClvYmopLmRvdWJsZVZhbHVlKCk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYXRhID0gKERvdWJsZSlvYmo7CisgICAgICAg IH0KKyAgICAgICAgaWYgKERvdWJsZS5pc05hTihkYXRhKSkgeworICAgICAgICAgICAgcmV0dXJu ICJOYU4iOworICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gRG91YmxlLlBPU0lUSVZFX0lORklO SVRZKSB7CisgICAgICAgICAgICByZXR1cm4gIklORiI7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0 YSA9PSBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpIHsKKyAgICAgICAgICAgIHJldHVybiAiLUlO RiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7 CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIFN0cmluZyBmb3JtYXRDYWxl bmRhcihPYmplY3Qgb2JqKSB7CisgICAgICAgIENhbGVuZGFyIGNhbGVuZGFyID0gKENhbGVuZGFy KSBvYmo7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXJVdGlsLmNvbnZlcnRUb1N0cmluZyhjYWxl bmRhcik7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBTdHJpbmcgZm9ybWF0RGF0ZShPYmpl Y3Qgb2JqKSB7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgenVsdSA9IG5ldyBTaW1wbGVEYXRl Rm9ybWF0KCJ5eXl5LU1NLWRkIik7CisKKyAgICAgICAgLy8gaWYgdGhlIHVzZXIgaGFzIGdpdmVu IGEgcGlydGljdWFsciB0aW1lem9uZSB3ZSB1c2UgaXQuCisgICAgICAgIGlmIChheGlzU2Vydmlj ZS5nZXRQYXJhbWV0ZXIoIlRpbWVab25lIikgIT0gbnVsbCl7CisgICAgICAgICAgIHp1bHUuc2V0 VGltZVpvbmUoVGltZVpvbmUuZ2V0VGltZVpvbmUoKFN0cmluZylheGlzU2VydmljZS5nZXRQYXJh bWV0ZXIoIlRpbWVab25lIikuZ2V0VmFsdWUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0 dXJuIHp1bHUuZm9ybWF0KG9iaik7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBPYmplY3QgbWFr ZUNhbGVuZGFyKFN0cmluZyBzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlclV0aWwu Y29udmVydFRvRGF0ZVRpbWUoc291cmNlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IG1h a2VEYXRlKFN0cmluZyBzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlclV0aWwuY29u dmVydFRvRGF0ZVRpbWUoc291cmNlKS5nZXRUaW1lKCk7CisgICAgfQorfQoK --_002_FEA9B2D12070D743936FCA6A92FEA11903ECBFA7F8eaglebetwarec_--