Return-Path: Delivered-To: apmail-jakarta-ant-dev-archive@apache.org Received: (qmail 7637 invoked from network); 18 Feb 2002 14:15:49 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 18 Feb 2002 14:15:49 -0000 Received: (qmail 5666 invoked by uid 97); 18 Feb 2002 14:15:25 -0000 Delivered-To: qmlist-jakarta-archive-ant-dev@jakarta.apache.org Received: (qmail 5620 invoked by uid 97); 18 Feb 2002 14:15:25 -0000 Mailing-List: contact ant-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Ant Developers List" Reply-To: "Ant Developers List" Delivered-To: mailing list ant-dev@jakarta.apache.org Received: (qmail 5609 invoked from network); 18 Feb 2002 14:15:24 -0000 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C1B886.B1DF6C64" Subject: Next set of JavaDoc patches X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3 Date: Mon, 18 Feb 2002 14:15:19 -0000 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: Next set of JavaDoc patches Thread-Index: AcG4hrHl+n/Zj5VOTd+AiUUYV9/2ZA== From: "Jon Skeet" To: X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ------_=_NextPart_001_01C1B886.B1DF6C64 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Patches to: BuildLogger (going back over my own changes again :) DefaultLogger DemuxOutputStream DirectoryScanner ExitException FileScanner Notes: Identified thread-safety problem in DemuxOutputStream (look for XXX) Minor refactoring in DirectoryScanner (extracted tokenizePath) Jon ------_=_NextPart_001_01C1B886.B1DF6C64 Content-Type: text/plain; name="patches20020218.txt" Content-Transfer-Encoding: base64 Content-Description: patches20020218.txt Content-Disposition: attachment; filename="patches20020218.txt" SW5kZXg6IHNyYy9tYWluL29yZy9hcGFjaGUvdG9vbHMvYW50L0J1aWxkTG9nZ2VyLmphdmEKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvY3ZzcHVibGljL2pha2FydGEtYW50L3NyYy9tYWluL29y Zy9hcGFjaGUvdG9vbHMvYW50L0J1aWxkTG9nZ2VyLmphdmEsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuOApkaWZmIC11IC1yMS44IEJ1aWxkTG9nZ2VyLmphdmEKLS0tIHNyYy9tYWluL29yZy9hcGFj aGUvdG9vbHMvYW50L0J1aWxkTG9nZ2VyLmphdmEJMTUgRmViIDIwMDIgMTM6NTk6MzggLTAwMDAJ MS44CisrKyBzcmMvbWFpbi9vcmcvYXBhY2hlL3Rvb2xzL2FudC9CdWlsZExvZ2dlci5qYXZhCTE4 IEZlYiAyMDAyIDE0OjEyOjUzIC0wMDAwCkBAIC02OCwxMCArNjgsMTAgQEAKIHB1YmxpYyBpbnRl cmZhY2UgQnVpbGRMb2dnZXIgZXh0ZW5kcyBCdWlsZExpc3RlbmVyIHsKICAgICAKICAgICAvKioK LSAgICAgKiBTZXRzIHRoZSBtc2dPdXRwdXRMZXZlbCB0aGlzIGxvZ2dlciBpcyB0byByZXNwb25k IHRvLgorICAgICAqIFNldHMgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgbWVzc2FnZSB0aGlzIGxvZ2dl ciBzaG91bGQgcmVzcG9uZCB0by4KICAgICAgKgotICAgICAqIE9ubHkgbWVzc2FnZXMgd2l0aCBh IG1lc3NhZ2UgbGV2ZWwgbG93ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gCi0gICAgICog bGV2ZWwgYXJlIG91dHB1dCB0byB0aGUgbG9nLgorICAgICAqIE9ubHkgbWVzc2FnZXMgd2l0aCBh IG1lc3NhZ2UgbGV2ZWwgbG93ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgCisgICAgICogZ2l2ZW4g bGV2ZWwgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gdGhlIGxvZy4KICAgICAgKiA8UD4KICAgICAgKiBD b25zdGFudHMgZm9yIHRoZSBtZXNzYWdlIGxldmVscyBhcmUgaW4gdGhlIAogICAgICAqIHtAbGlu ayBQcm9qZWN0IFByb2plY3R9IGNsYXNzLiBUaGUgb3JkZXIgb2YgdGhlIGxldmVscywgZnJvbSBs ZWFzdCAKQEAgLTk0LDggKzk0LDggQEAKICAgICAvKioKICAgICAgKiBTZXRzIHRoaXMgbG9nZ2Vy IHRvIHByb2R1Y2UgZW1hY3MgKGFuZCBvdGhlciBlZGl0b3IpIGZyaWVuZGx5IG91dHB1dC4KICAg ICAgKgotICAgICAqIEBwYXJhbSBlbWFjc01vZGUgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgb3V0cHV0 IGlzIHRvIGJlIHVuYWRvcm5lZCBzbyB0aGF0IAotICAgICAqIGVtYWNzIGFuZCBvdGhlciBlZGl0 b3JzIGNhbiBwYXJzZSBmaWxlcyBuYW1lcywgZXRjLgorICAgICAqIEBwYXJhbSBlbWFjc01vZGUg PGNvZGU+dHJ1ZTwvY29kZT4gaWYgb3V0cHV0IGlzIHRvIGJlIHVuYWRvcm5lZCBzbyB0aGF0Cisg ICAgICogICAgICAgICAgICAgICAgICBlbWFjcyBhbmQgb3RoZXIgZWRpdG9ycyBjYW4gcGFyc2Ug ZmlsZXMgbmFtZXMsIGV0Yy4KICAgICAgKi8KICAgICB2b2lkIHNldEVtYWNzTW9kZShib29sZWFu IGVtYWNzTW9kZSk7CiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAqIFNldHMgdGhlIG91dHB1 dCBzdHJlYW0gdG8gd2hpY2ggdGhpcyBsb2dnZXIgaXMgdG8gc2VuZCBlcnJvciBtZXNzYWdlcy4K ICAgICAgKgogICAgICAqIEBwYXJhbSBlcnIgVGhlIGVycm9yIHN0cmVhbSBmb3IgdGhlIGxvZ2dl ci4KLSAgICAgKiAgICAgICAgICAgIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8Y29kZT4uCisgICAg ICogICAgICAgICAgICBNdXN0IG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KICAgICAgKi8KICAg ICB2b2lkIHNldEVycm9yUHJpbnRTdHJlYW0oUHJpbnRTdHJlYW0gZXJyKTsgICAgCiB9CkluZGV4 OiBzcmMvbWFpbi9vcmcvYXBhY2hlL3Rvb2xzL2FudC9EZWZhdWx0TG9nZ2VyLmphdmEKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2hvbWUvY3ZzcHVibGljL2pha2FydGEtYW50L3NyYy9tYWluL29yZy9h cGFjaGUvdG9vbHMvYW50L0RlZmF1bHRMb2dnZXIuamF2YSx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4zMgpkaWZmIC11IC1yMS4zMiBEZWZhdWx0TG9nZ2VyLmphdmEKLS0tIHNyYy9tYWluL29yZy9h cGFjaGUvdG9vbHMvYW50L0RlZmF1bHRMb2dnZXIuamF2YQk1IEZlYiAyMDAyIDIxOjM4OjI1IC0w MDAwCTEuMzIKKysrIHNyYy9tYWluL29yZy9hcGFjaGUvdG9vbHMvYW50L0RlZmF1bHRMb2dnZXIu amF2YQkxOCBGZWIgMjAwMiAxNDoxMjo1NCAtMDAwMApAQCAtNjIsMzUgKzYyLDUyIEBACiBpbXBv cnQgb3JnLmFwYWNoZS50b29scy5hbnQudXRpbC5EYXRlVXRpbHM7CiAKIC8qKgotICogIFdyaXRl cyBidWlsZCBldmVudCB0byBhIFByaW50U3RyZWFtLiBDdXJyZW50bHksIGl0Ci0gKiAgb25seSB3 cml0ZXMgd2hpY2ggdGFyZ2V0cyBhcmUgYmVpbmcgZXhlY3V0ZWQsIGFuZAotICogIGFueSBtZXNz YWdlcyB0aGF0IGdldCBsb2dnZWQuCisgKiBXcml0ZXMgYnVpbGQgZXZlbnRzIHRvIGEgUHJpbnRT dHJlYW0uIEN1cnJlbnRseSwgaXQKKyAqIG9ubHkgd3JpdGVzIHdoaWNoIHRhcmdldHMgYXJlIGJl aW5nIGV4ZWN1dGVkLCBhbmQKKyAqIGFueSBtZXNzYWdlcyB0aGF0IGdldCBsb2dnZWQuCiAgKi8K IHB1YmxpYyBjbGFzcyBEZWZhdWx0TG9nZ2VyIGltcGxlbWVudHMgQnVpbGRMb2dnZXIgeworICAg IC8qKiAKKyAgICAgKiBTaXplIG9mIGxlZnQtaGFuZCBjb2x1bW4gZm9yIHJpZ2h0LWp1c3RpZmll ZCB0YXNrIG5hbWUuCisgICAgICogQHNlZSAjbWVzc2FnZUxvZ2dlZChCdWlsZEV2ZW50KQorICAg ICAqLwogICAgIHByaXZhdGUgc3RhdGljIGludCBMRUZUX0NPTFVNTl9TSVpFID0gMTI7CiAKKyAg ICAvKiogUHJpbnRTdHJlYW0gdG8gd3JpdGUgbm9uLWVycm9yIG1lc3NhZ2VzIHRvICovCiAgICAg cHJvdGVjdGVkIFByaW50U3RyZWFtIG91dDsKKyAgICAvKiogUHJpbnRTdHJlYW0gdG8gd3JpdGUg ZXJyb3IgbWVzc2FnZXMgdG8gKi8KICAgICBwcm90ZWN0ZWQgUHJpbnRTdHJlYW0gZXJyOworICAg IC8qKiBMb3dlc3QgbGV2ZWwgb2YgbWVzc2FnZSB0byB3cml0ZSBvdXQgKi8KICAgICBwcm90ZWN0 ZWQgaW50IG1zZ091dHB1dExldmVsID0gUHJvamVjdC5NU0dfRVJSOworICAgIC8qKiBUaW1lIG9m IHRoZSBzdGFydCBvZiB0aGUgYnVpbGQgKi8KICAgICBwcml2YXRlIGxvbmcgc3RhcnRUaW1lID0g U3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLSAgICAvKiogbGluZSBzZXBhcmF0b3IgKi8K KyAgICAvKiogTGluZSBzZXBhcmF0b3IgKi8KICAgICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0 cmluZyBsU2VwID0gU3RyaW5nVXRpbHMuTElORV9TRVA7Ci0KKyAgICAKKyAgICAvKiogV2hldGhl ciBvciBub3QgdG8gdXNlIGVtYWNzLXN0eWxlIG91dHB1dCAqLwogICAgIHByb3RlY3RlZCBib29s ZWFuIGVtYWNzTW9kZSA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogU2V0IHRoZSBtc2dPdXRw dXRMZXZlbCB0aGlzIGxvZ2dlciBpcyB0byByZXNwb25kIHRvLgorICAgICAqIFNvbGUgY29uc3Ry dWN0b3IuCisgICAgICovCisgICAgcHVibGljIERlZmF1bHRMb2dnZXIoKSB7CisgICAgfQorCisg ICAgLyoqCisgICAgICogU2V0cyB0aGUgaGlnaGVzdCBsZXZlbCBvZiBtZXNzYWdlIHRoaXMgbG9n Z2VyIHNob3VsZCByZXNwb25kIHRvLgogICAgICAqCi0gICAgICogT25seSBtZXNzYWdlcyB3aXRo IGEgbWVzc2FnZSBsZXZlbCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBsZXZlbCBh cmUKLSAgICAgKiBvdXRwdXQgdG8gdGhlIGxvZy4KKyAgICAgKiBPbmx5IG1lc3NhZ2VzIHdpdGgg YSBtZXNzYWdlIGxldmVsIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIAorICAgICAqIGdpdmVu IGxldmVsIHNob3VsZCBiZSB3cml0dGVuIHRvIHRoZSBsb2cuCisgICAgICogPFA+CisgICAgICog Q29uc3RhbnRzIGZvciB0aGUgbWVzc2FnZSBsZXZlbHMgYXJlIGluIHRoZSAKKyAgICAgKiB7QGxp bmsgUHJvamVjdCBQcm9qZWN0fSBjbGFzcy4gVGhlIG9yZGVyIG9mIHRoZSBsZXZlbHMsIGZyb20g bGVhc3QgCisgICAgICogdG8gbW9zdCB2ZXJib3NlLCBpcyA8Y29kZT5NU0dfRVJSPC9jb2RlPiwg PGNvZGU+TVNHX1dBUk48L2NvZGU+LCAKKyAgICAgKiA8Y29kZT5NU0dfSU5GTzwvY29kZT4sIDxj b2RlPk1TR19WRVJCT1NFPC9jb2RlPiwgCisgICAgICogPGNvZGU+TVNHX0RFQlVHPC9jb2RlPi4K ICAgICAgKiA8UD4KLSAgICAgKiBDb25zdGFudHMgZm9yIHRoZSBtZXNzYWdlIGxldmVscyBhcmUg aW4gUHJvamVjdC5qYXZhLiBUaGUgb3JkZXIgb2YKLSAgICAgKiB0aGUgbGV2ZWxzLCBmcm9tIGxl YXN0IHRvIG1vc3QgdmVyYm9zZSwgaXMgTVNHX0VSUiwgTVNHX1dBUk4sCi0gICAgICogTVNHX0lO Rk8sIE1TR19WRVJCT1NFLCBNU0dfREVCVUcuCi0gICAgICoKICAgICAgKiBUaGUgZGVmYXVsdCBt ZXNzYWdlIGxldmVsIGZvciBEZWZhdWx0TG9nZ2VyIGlzIFByb2plY3QuTVNHX0VSUi4KLSAgICAg KgorICAgICAqIAogICAgICAqIEBwYXJhbSBsZXZlbCB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgdGhl IGxvZ2dlci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlT3V0cHV0TGV2ZWwo aW50IGxldmVsKSB7CkBAIC05OCw0MCArMTE1LDUxIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAg ICogU2V0IHRoZSBvdXRwdXQgc3RyZWFtIHRvIHdoaWNoIHRoaXMgbG9nZ2VyIGlzIHRvIHNlbmQg aXRzIG91dHB1dC4KKyAgICAgKiBTZXRzIHRoZSBvdXRwdXQgc3RyZWFtIHRvIHdoaWNoIHRoaXMg bG9nZ2VyIGlzIHRvIHNlbmQgaXRzIG91dHB1dC4KICAgICAgKgotICAgICAqIEBwYXJhbSBvdXRw dXQgdGhlIG91dHB1dCBzdHJlYW0gZm9yIHRoZSBsb2dnZXIuCisgICAgICogQHBhcmFtIG91dHB1 dCBUaGUgb3V0cHV0IHN0cmVhbSBmb3IgdGhlIGxvZ2dlci4KKyAgICAgKiAgICAgICAgICAgICAg IE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lk IHNldE91dHB1dFByaW50U3RyZWFtKFByaW50U3RyZWFtIG91dHB1dCkgewogICAgICAgICB0aGlz Lm91dCA9IG5ldyBQcmludFN0cmVhbShvdXRwdXQsIHRydWUpOwogICAgIH0KIAogICAgIC8qKgot ICAgICAqIFNldCB0aGUgb3V0cHV0IHN0cmVhbSB0byB3aGljaCB0aGlzIGxvZ2dlciBpcyB0byBz ZW5kIGVycm9yIG1lc3NhZ2VzLgorICAgICAqIFNldHMgdGhlIG91dHB1dCBzdHJlYW0gdG8gd2hp Y2ggdGhpcyBsb2dnZXIgaXMgdG8gc2VuZCBlcnJvciBtZXNzYWdlcy4KICAgICAgKgotICAgICAq IEBwYXJhbSBlcnIgdGhlIGVycm9yIHN0cmVhbSBmb3IgdGhlIGxvZ2dlci4KKyAgICAgKiBAcGFy YW0gZXJyIFRoZSBlcnJvciBzdHJlYW0gZm9yIHRoZSBsb2dnZXIuCisgICAgICogICAgICAgICAg ICBNdXN0IG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9p ZCBzZXRFcnJvclByaW50U3RyZWFtKFByaW50U3RyZWFtIGVycikgewogICAgICAgICB0aGlzLmVy ciA9IG5ldyBQcmludFN0cmVhbShlcnIsIHRydWUpOwogICAgIH0KIAogICAgIC8qKgotICAgICAq IFNldCB0aGlzIGxvZ2dlciB0byBwcm9kdWNlIGVtYWNzIChhbmQgb3RoZXIgZWRpdG9yKSBmcmll bmRseSBvdXRwdXQuCisgICAgICogU2V0cyB0aGlzIGxvZ2dlciB0byBwcm9kdWNlIGVtYWNzIChh bmQgb3RoZXIgZWRpdG9yKSBmcmllbmRseSBvdXRwdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0g ZW1hY3NNb2RlIHRydWUgaWYgb3V0cHV0IGlzIHRvIGJlIHVuYWRvcm5lZCBzbyB0aGF0IGVtYWNz IGFuZCBvdGhlcgotICAgICAqIGVkaXRvcnMgY2FuIHBhcnNlIGZpbGVzIG5hbWVzLCBldGMuCisg ICAgICogQHBhcmFtIGVtYWNzTW9kZSA8Y29kZT50cnVlPC9jb2RlPiBpZiBvdXRwdXQgaXMgdG8g YmUgdW5hZG9ybmVkIHNvIHRoYXQKKyAgICAgKiAgICAgICAgICAgICAgICAgIGVtYWNzIGFuZCBv dGhlciBlZGl0b3JzIGNhbiBwYXJzZSBmaWxlcyBuYW1lcywgZXRjLgogICAgICAqLwogICAgIHB1 YmxpYyB2b2lkIHNldEVtYWNzTW9kZShib29sZWFuIGVtYWNzTW9kZSkgewogICAgICAgICB0aGlz LmVtYWNzTW9kZSA9IGVtYWNzTW9kZTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBSZXNwb25k cyB0byBhIGJ1aWxkIGJlaW5nIHN0YXJ0ZWQgYnkganVzdCByZW1lbWJlcmluZyB0aGUgY3VycmVu dCB0aW1lLgorICAgICAqIAorICAgICAqIEBwYXJhbSBldmVudCBJZ25vcmVkLgorICAgICAqLwog ICAgIHB1YmxpYyB2b2lkIGJ1aWxkU3RhcnRlZChCdWlsZEV2ZW50IGV2ZW50KSB7CiAgICAgICAg IHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgIH0KIAogICAgIC8q KgotICAgICAqICBQcmludHMgd2hldGhlciB0aGUgYnVpbGQgc3VjY2VlZGVkIG9yIGZhaWxlZCwg YW5kCi0gICAgICogIGFueSBlcnJvcnMgdGhlIG9jY3VyZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAg ICAgKiBQcmludHMgd2hldGhlciB0aGUgYnVpbGQgc3VjY2VlZGVkIG9yIGZhaWxlZCwKKyAgICAg KiBhbnkgZXJyb3JzIHRoZSBvY2N1cmVkIGR1cmluZyB0aGUgYnVpbGQsIGFuZAorICAgICAqIGhv dyBsb25nIHRoZSBidWlsZCB0b29rLgorICAgICAqIAorICAgICAqIEBwYXJhbSBldmVudCBBbiBl dmVudCB3aXRoIGFueSByZWxldmFudCBleHRyYSBpbmZvcm1hdGlvbi4KKyAgICAgKiAgICAgICAg ICAgICAgTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGlj IHZvaWQgYnVpbGRGaW5pc2hlZChCdWlsZEV2ZW50IGV2ZW50KSB7CiAgICAgICAgIFRocm93YWJs ZSBlcnJvciA9IGV2ZW50LmdldEV4Y2VwdGlvbigpOwpAQCAtMTcyLDYgKzIwMCwxMyBAQAogICAg ICAgICBsb2cobXNnKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBMb2dzIGEgbWVzc2FnZSB0 byBzYXkgdGhhdCB0aGUgdGFyZ2V0IGhhcyBzdGFydGVkIGlmIHRoaXMKKyAgICAgKiBsb2dnZXIg YWxsb3dzIGluZm9ybWF0aW9uLWxldmVsIG1lc3NhZ2VzLgorICAgICAqIAorICAgICAqIEBwYXJh bSBldmVudCBBbiBldmVudCB3aXRoIGFueSByZWxldmFudCBleHRyYSBpbmZvcm1hdGlvbi4KKyAg ICAgKiAgICAgICAgICAgICAgTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICAq LwogICAgIHB1YmxpYyB2b2lkIHRhcmdldFN0YXJ0ZWQoQnVpbGRFdmVudCBldmVudCkgewogICAg ICAgICBpZiAoUHJvamVjdC5NU0dfSU5GTyA8PSBtc2dPdXRwdXRMZXZlbCkgewogICAgICAgICAg ICAgU3RyaW5nIG1zZyA9IFN0cmluZ1V0aWxzLkxJTkVfU0VQICsgZXZlbnQuZ2V0VGFyZ2V0KCku Z2V0TmFtZSgpICsgIjoiOwpAQCAtMTgwLDEyICsyMTUsMzUgQEAKICAgICAgICAgfQogICAgIH0K IAotICAgIHB1YmxpYyB2b2lkIHRhcmdldEZpbmlzaGVkKEJ1aWxkRXZlbnQgZXZlbnQpIHsKLSAg ICB9CisgICAgLyoqCisgICAgICogTm8tb3AgaW1wbGVtZW50YXRpb24uCisgICAgICogCisgICAg ICogQHBhcmFtIGV2ZW50IElnbm9yZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGFyZ2V0 RmluaXNoZWQoQnVpbGRFdmVudCBldmVudCkge30KIAorICAgIC8qKgorICAgICAqIE5vLW9wIGlt cGxlbWVudGF0aW9uLgorICAgICAqIAorICAgICAqIEBwYXJhbSBldmVudCBJZ25vcmVkLgorICAg ICAqLwogICAgIHB1YmxpYyB2b2lkIHRhc2tTdGFydGVkKEJ1aWxkRXZlbnQgZXZlbnQpIHt9CisK KyAgICAvKioKKyAgICAgKiBOby1vcCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKiAKKyAgICAgKiBA cGFyYW0gZXZlbnQgSWdub3JlZC4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB0YXNrRmluaXNo ZWQoQnVpbGRFdmVudCBldmVudCkge30KIAorICAgIC8qKgorICAgICAqIExvZ3MgYSBtZXNzYWdl LCBpZiB0aGUgcHJpb3JpdHkgaXMgc3VpdGFibGUuCisgICAgICogSW4gbm9uLWVtYWNzIG1vZGUs IHRhc2sgbGV2ZWwgbWVzc2FnZXMgYXJlIHByZWZpeGVkIGJ5IHRoZQorICAgICAqIHRhc2sgbmFt ZSB3aGljaCBpcyByaWdodC1qdXN0aWZpZWQuCisgICAgICogCisgICAgICogQHBhcmFtIGV2ZW50 IEEgQnVpbGRFdmVudCBjb250YWluaW5nIG1lc3NhZ2UgaW5mb3JtYXRpb24uCisgICAgICogICAg ICAgICAgICAgIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgorICAgICAqLwogICAgIHB1 YmxpYyB2b2lkIG1lc3NhZ2VMb2dnZWQoQnVpbGRFdmVudCBldmVudCkgewogICAgICAgICBpbnQg cHJpb3JpdHkgPSBldmVudC5nZXRQcmlvcml0eSgpOwogICAgICAgICAvLyBGaWx0ZXIgb3V0IG1l c3NhZ2VzIGJhc2VkIG9uIHByaW9yaXR5CkBAIC0yMTYsMTAgKzI3NCwyNyBAQAogICAgICAgICB9 CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGZvcm1hdCBh IHNwZWNpZmllZCBsZW5ndGggb2YgdGltZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gbWlsbGlz IExlbmd0aCBvZiB0aW1lIHRvIGZvcm1hdCwgaW4gbWlsbGlzZW9uZHMuCisgICAgICogCisgICAg ICogQHNlZSBEYXRlVXRpbHMjZm9ybWF0RWxhcHNlZFRpbWUobG9uZykKKyAgICAgKi8KICAgICBw cm90ZWN0ZWQgc3RhdGljIFN0cmluZyBmb3JtYXRUaW1lKGZpbmFsIGxvbmcgbWlsbGlzKSB7CiAg ICAgICAgIHJldHVybiBEYXRlVXRpbHMuZm9ybWF0RWxhcHNlZFRpbWUobWlsbGlzKTsKICAgICB9 CiAKKyAgICAvKioKKyAgICAgKiBQcmludHMgYSBtZXNzYWdlIHRvIGEgUHJpbnRTdHJlYW0uCisg ICAgICogCisgICAgICogQHBhcmFtIG1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIHByaW50LiAKKyAg ICAgKiAgICAgICAgICAgICAgICAgU2hvdWxkIG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KKyAg ICAgKiBAcGFyYW0gc3RyZWFtICAgQSBQcmludFN0cmVhbSB0byBwcmludCB0aGUgbWVzc2FnZSB0 by4gCisgICAgICogICAgICAgICAgICAgICAgIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+ LgorICAgICAqIEBwYXJhbSBwcmlvcml0eSBUaGUgcHJpb3JpdHkgb2YgdGhlIG1lc3NhZ2UuIAor ICAgICAqICAgICAgICAgICAgICAgICAoSWdub3JlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLikK KyAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBwcmludE1lc3NhZ2UoZmluYWwgU3RyaW5nIG1l c3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFByaW50U3RyZWFt IHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHByaW9y aXR5KSB7CkBAIC0yMjksNiArMzA0LDggQEAKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1l bnRhdGlvbiB3aGljaCBhbGxvd3Mgc3ViY2xhc3NlcyB0byByZWNlaXZlIHRoZQogICAgICAqIHNh bWUgb3V0cHV0IHRoYXQgaXMgZ2VuZXJhdGVkIGhlcmUuCisgICAgICogCisgICAgICogQHBhcmFt IG1lc3NhZ2UgTWVzc2FnZSBiZWluZyBsb2dnZWQuIFNob3VsZCBub3QgYmUgPGNvZGU+bnVsbDwv Y29kZT4uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSB7 fQogfQpJbmRleDogc3JjL21haW4vb3JnL2FwYWNoZS90b29scy9hbnQvRGVtdXhPdXRwdXRTdHJl YW0uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnNwdWJsaWMvamFrYXJ0YS1hbnQv c3JjL21haW4vb3JnL2FwYWNoZS90b29scy9hbnQvRGVtdXhPdXRwdXRTdHJlYW0uamF2YSx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXIxLjMgRGVtdXhPdXRwdXRTdHJlYW0uamF2 YQotLS0gc3JjL21haW4vb3JnL2FwYWNoZS90b29scy9hbnQvRGVtdXhPdXRwdXRTdHJlYW0uamF2 YQkxMCBKYW4gMjAwMiAxMToyMToxOSAtMDAwMAkxLjMKKysrIHNyYy9tYWluL29yZy9hcGFjaGUv dG9vbHMvYW50L0RlbXV4T3V0cHV0U3RyZWFtLmphdmEJMTggRmViIDIwMDIgMTQ6MTI6NTYgLTAw MDAKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBW ZXJzaW9uIDEuMQogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBUaGUgQXBhY2hlIFNvZnR3YXJl IEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBUaGUg QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCiAgKiByZXNlcnZlZC4KICAq CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKQEAgLTU5LDIyICs1OSwzMyBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNl cHRpb247CiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAotCiAvKioKICAqIExvZ3MgY29u dGVudCB3cml0dGVuIGJ5IGEgdGhyZWFkIGFuZCBmb3J3YXJkcyB0aGUgYnVmZmVycyBvbnRvIHRo ZQogICogcHJvamVjdCBvYmplY3Qgd2hpY2ggd2lsbCBmb3J3YXJkIHRoZSBjb250ZW50IHRvIHRo ZSBhcHByb3ByaWF0ZQotICogdGFzayAKKyAqIHRhc2suCiAgKgogICogQGF1dGhvciBDb25vciBN YWNOZWlsbAogICovCiBwdWJsaWMgY2xhc3MgRGVtdXhPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRw dXRTdHJlYW0gewogCisgICAgLyoqIE1heGltdW0gYnVmZmVyIHNpemUgKi8KICAgICBwcml2YXRl IGZpbmFsIHN0YXRpYyBpbnQgTUFYX1NJWkUgPSAxMDI0OwotICAgIAorICAgIC8qKiBNYXBwaW5n IGZyb20gdGhyZWFkIHRvIGJ1ZmZlciAoVGhyZWFkLT5CeXRlT3V0cHV0U3RyZWFtKSAqLwogICAg IHByaXZhdGUgSGFzaHRhYmxlIGJ1ZmZlcnMgPSBuZXcgSGFzaHRhYmxlKCk7CiAvLyAgICBwcml2 YXRlIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBidWZmZXIgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3Ry ZWFtKCk7CisgICAgLyoqIAorICAgICAqIFdoZXRoZXIgdGhlIG5leHQgbGluZS10ZXJtaW5hdG9y IHNob3VsZCBiZSBza2lwcGVkIGluIHRlcm1zCisgICAgICogb2YgcHJvY2Vzc2luZyB0aGUgYnVm ZmVyIG9yIG5vdC4gVXNlZCB0byBhdm9pZCBcclxuIGludm9raW5nCisgICAgICogcHJvY2Vzc0J1 ZmZlciB0d2ljZS4KKyAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gc2tpcCA9IGZhbHNlOwor ICAgIC8qKgorICAgICAqIFRoZSBwcm9qZWN0IHRvIHNlbmQgb3V0cHV0IHRvCisgICAgICovCiAg ICAgcHJpdmF0ZSBQcm9qZWN0IHByb2plY3Q7CisgICAgLyoqCisgICAgICogV2hldGhlciBvciBu b3QgdGhpcyBzdHJlYW0gcmVwcmVzZW50cyBhbiBlcnJvciBzdHJlYW0KKyAgICAgKi8KICAgICBw cml2YXRlIGJvb2xlYW4gaXNFcnJvclN0cmVhbTsKICAgICAKICAgICAvKioKQEAgLTg4LDYgKzk5 LDExIEBACiAgICAgICAgIHRoaXMuaXNFcnJvclN0cmVhbSA9IGlzRXJyb3JTdHJlYW07CiAgICAg fQogCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0 aGUgY3VycmVudCB0aHJlYWQuCisgICAgICogCisgICAgICogQHJldHVybiBhIEJ5dGVBcnJheU91 dHB1dFN0cmVhbSBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkIHRvIHdyaXRlIGRhdGEgdG8KKyAgICAg Ki8KICAgICBwcml2YXRlIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBnZXRCdWZmZXIoKSB7CiAgICAg ICAgIFRocmVhZCBjdXJyZW50ID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKICAgICAgICAgQnl0 ZUFycmF5T3V0cHV0U3RyZWFtIGJ1ZmZlciA9IChCeXRlQXJyYXlPdXRwdXRTdHJlYW0pYnVmZmVy cy5nZXQoY3VycmVudCk7CkBAIC05OCwxNCArMTE0LDE3IEBACiAgICAgICAgIHJldHVybiBidWZm ZXI7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmVzZXRzIHRoZSBidWZmZXIgZm9yIHRoZSBj dXJyZW50IHRocmVhZC4KKyAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgcmVzZXRCdWZmZXIoKSB7 ICAgIAogICAgICAgICBUaHJlYWQgY3VycmVudCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7CiAg ICAgICAgIGJ1ZmZlcnMucmVtb3ZlKGN1cnJlbnQpOwogICAgIH0KICAgICAKICAgICAvKioKLSAg ICAgKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgYnVmZmVyIGFuZCBmbHVzaCB0aGUgYnVmZmVyLCBp ZiBhIGxpbmUKLSAgICAgKiBzZXBhcmF0b3IgaXMgZGV0ZWN0ZWQuCisgICAgICogV3JpdGVzIHRo ZSBkYXRhIHRvIHRoZSBidWZmZXIgYW5kIGZsdXNoZXMgdGhlIGJ1ZmZlciBpZiBhIGxpbmUKKyAg ICAgKiBzZXBhcmF0b3IgaXMgZGV0ZWN0ZWQgb3IgaWYgdGhlIGJ1ZmZlciBoYXMgcmVhY2hlZCBp dHMgbWF4aW11bSBzaXplLgogICAgICAqCiAgICAgICogQHBhcmFtIGNjIGRhdGEgdG8gbG9nIChi eXRlKS4KICAgICAgKi8KQEAgLTEyMiwxMiArMTQxLDIxIEBACiAgICAgICAgICAgICAgICAgcHJv Y2Vzc0J1ZmZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNraXAgPSAo YyA9PSAnXHInKTsKKyAgICAgICAvLyBYWFg6IFRoaXMgaXNuJ3QgdGhyZWFkc2FmZS4gQ29uc2lk ZXIgdHdvIHRocmVhZHMgbG9nZ2luZworICAgICAgIC8vIEhlbGxvXHJcbgorICAgICAgIC8vIGFu ZAorICAgICAgIC8vIFRoZXJlXHJcbgorICAgICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUsIHdpdGgg dGhlIHR3byAnXHIncyBib3RoIGJlaW5nIHNlbnQgYmVmb3JlCisgICAgICAgLy8gZWl0aGVyICdc bicsIGFuZCB0aGUgJ1xuJ3MgY29taW5nIGluIHRoZSBvcHBvc2l0ZSBvcmRlciAodGhyZWFkLXdp c2UpCisgICAgICAgLy8gdG8gdGhlICdccidzIC0gb25lIGJ1ZmZlciB3aWxsIGJlIHByb2Nlc3Nl ZCB0d2ljZSwgYW5kIHRoZSBvdGhlciB3b24ndAorICAgICAgIC8vIGJlIHByb2Nlc3NlZCBhdCBh bGwuCisgICAgICAgc2tpcCA9IChjID09ICdccicpOwogICAgIH0KIAogCiAgICAgLyoqCi0gICAg ICogQ29udmVydHMgdGhlIGJ1ZmZlciB0byBhIHN0cmluZyBhbmQgc2VuZHMgaXQgdG8gPGNvZGU+ cHJvY2Vzc0xpbmU8L2NvZGU+CisgICAgICogQ29udmVydHMgdGhlIGJ1ZmZlciB0byBhIHN0cmlu ZyBhbmQgc2VuZHMgaXQgdG8gCisgICAgICoge0BsaW5rIFByb2plY3QjZGVtdXhPdXRwdXQoU3Ry aW5nLGJvb2xlYW4pIFByb2plY3QuZGVtdXhPdXRwdXR9LgogICAgICAqLwogICAgIHByb3RlY3Rl ZCB2b2lkIHByb2Nlc3NCdWZmZXIoKSB7CiAgICAgICAgIFN0cmluZyBvdXRwdXQgPSBnZXRCdWZm ZXIoKS50b1N0cmluZygpOwpAQCAtMTM2LDE0ICsxNjQsMTUgQEAKICAgICB9CiAKICAgICAvKioK LSAgICAgKiBXcml0ZXMgYWxsIHJlbWFpbmluZworICAgICAqIEVxdWl2YWxlbnQgdG8gY2FsbGlu ZyB7QGxpbmsgI2ZsdXNoIGZsdXNofSBvbiB0aGUgc3RyZWFtLgogICAgICAqLwogICAgIHB1Ymxp YyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgZmx1c2goKTsKICAg ICB9CiAKICAgICAvKioKLSAgICAgKiBXcml0ZXMgYWxsIHJlbWFpbmluZworICAgICAqIFdyaXRl cyBhbGwgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlciBhc3NvY2lhdGVkCisgICAgICogd2l0 aCB0aGUgY3VycmVudCB0aHJlYWQgdG8gdGhlIHByb2plY3QuCiAgICAgICovCiAgICAgcHVibGlj IHZvaWQgZmx1c2goKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBpZiAoZ2V0QnVmZmVy KCkuc2l6ZSgpID4gMCkgewpJbmRleDogc3JjL21haW4vb3JnL2FwYWNoZS90b29scy9hbnQvRGly ZWN0b3J5U2Nhbm5lci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2N2c3B1YmxpYy9q YWthcnRhLWFudC9zcmMvbWFpbi9vcmcvYXBhY2hlL3Rvb2xzL2FudC9EaXJlY3RvcnlTY2FubmVy LmphdmEsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtdSAtcjEuMjEgRGlyZWN0b3J5 U2Nhbm5lci5qYXZhCi0tLSBzcmMvbWFpbi9vcmcvYXBhY2hlL3Rvb2xzL2FudC9EaXJlY3RvcnlT Y2FubmVyLmphdmEJMyBGZWIgMjAwMiAwMTo1MzozNCAtMDAwMAkxLjIxCisrKyBzcmMvbWFpbi9v cmcvYXBhY2hlL3Rvb2xzL2FudC9EaXJlY3RvcnlTY2FubmVyLmphdmEJMTggRmViIDIwMDIgMTQ6 MTI6NTkgLTAwMDAKQEAgLTU5LDcgKzU5LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9r ZW5pemVyOwogCiAvKioKLSAqIENsYXNzIGZvciBzY2FubmluZyBhIGRpcmVjdG9yeSBmb3IgZmls ZXMvZGlyZWN0b3JpZXMgdGhhdCBtYXRjaCBhIGNlcnRhaW4KKyAqIENsYXNzIGZvciBzY2Fubmlu ZyBhIGRpcmVjdG9yeSBmb3IgZmlsZXMvZGlyZWN0b3JpZXMgd2hpY2ggbWF0Y2ggY2VydGFpbgog ICogY3JpdGVyaWEuCiAgKiA8cD4KICAqIFRoZXNlIGNyaXRlcmlhIGNvbnNpc3Qgb2YgYSBzZXQg b2YgaW5jbHVkZSBhbmQgZXhjbHVkZSBwYXR0ZXJucy4gV2l0aCB0aGVzZQpAQCAtNjgsOCArNjgs OCBAQAogICogPHA+CiAgKiBUaGUgaWRlYSBpcyBzaW1wbGUuIEEgZ2l2ZW4gZGlyZWN0b3J5IGlz IHJlY3Vyc2l2ZWx5IHNjYW5uZWQgZm9yIGFsbCBmaWxlcwogICogYW5kIGRpcmVjdG9yaWVzLiBF YWNoIGZpbGUvZGlyZWN0b3J5IGlzIG1hdGNoZWQgYWdhaW5zdCBhIHNldCBvZiBpbmNsdWRlCi0g KiBhbmQgZXhjbHVkZSBwYXR0ZXJucy4gT25seSBmaWxlcy9kaXJlY3RvcmllcyB0aGF0IG1hdGNo IGF0IGxlYXN0IG9uZQotICogcGF0dGVybiBvZiB0aGUgaW5jbHVkZSBwYXR0ZXJuIGxpc3QsIGFu ZCBkb24ndCBtYXRjaCBhIHBhdHRlcm4gb2YgdGhlCisgKiBhbmQgZXhjbHVkZSBwYXR0ZXJucy4g T25seSBmaWxlcy9kaXJlY3RvcmllcyB3aGljaCBtYXRjaCBhdCBsZWFzdCBvbmUKKyAqIHBhdHRl cm4gb2YgdGhlIGluY2x1ZGUgcGF0dGVybiBsaXN0LCBhbmQgZG9uJ3QgbWF0Y2ggYW55IHBhdHRl cm4gb2YgdGhlCiAgKiBleGNsdWRlIHBhdHRlcm4gbGlzdCB3aWxsIGJlIHBsYWNlZCBpbiB0aGUg bGlzdCBvZiBmaWxlcy9kaXJlY3RvcmllcyBmb3VuZC4KICAqIDxwPgogICogV2hlbiBubyBsaXN0 IG9mIGluY2x1ZGUgcGF0dGVybnMgaXMgc3VwcGxpZWQsICIqKiIgd2lsbCBiZSB1c2VkLCB3aGlj aApAQCAtODAsMTYgKzgwLDE2IEBACiAgKiBUaGUgbmFtZSB0byBiZSBtYXRjaGVkIGlzIHNwbGl0 IHVwIGluIHBhdGggc2VnbWVudHMuIEEgcGF0aCBzZWdtZW50IGlzIHRoZQogICogbmFtZSBvZiBh IGRpcmVjdG9yeSBvciBmaWxlLCB3aGljaCBpcyBib3VuZGVkIGJ5CiAgKiA8Y29kZT5GaWxlLnNl cGFyYXRvcjwvY29kZT4gKCcvJyB1bmRlciBVTklYLCAnXCcgdW5kZXIgV2luZG93cykuCi0gKiBF LmcuICJhYmMvZGVmL2doaS94eXouamF2YSIgaXMgc3BsaXQgdXAgaW4gdGhlIHNlZ21lbnRzICJh YmMiLCAiZGVmIiwgImdoaSIKLSAqIGFuZCAieHl6LmphdmEiLgorICogRm9yIGV4YW1wbGUsICJh YmMvZGVmL2doaS94eXouamF2YSIgaXMgc3BsaXQgdXAgaW4gdGhlIHNlZ21lbnRzICJhYmMiLCAK KyAqICJkZWYiLCJnaGkiIGFuZCAieHl6LmphdmEiLgogICogVGhlIHNhbWUgaXMgZG9uZSBmb3Ig dGhlIHBhdHRlcm4gYWdhaW5zdCB3aGljaCBzaG91bGQgYmUgbWF0Y2hlZC4KICAqIDxwPgotICog VGhlbiB0aGUgc2VnbWVudHMgb2YgdGhlIG5hbWUgYW5kIHRoZSBwYXR0ZXJuIHdpbGwgYmUgbWF0 Y2hlZCBhZ2FpbnN0IGVhY2gKLSAqIG90aGVyLiBXaGVuICcqKicgaXMgdXNlZCBmb3IgYSBwYXRo IHNlZ21lbnQgaW4gdGhlIHBhdHRlcm4sIHRoZW4gaXQgbWF0Y2hlcworICogVGhlIHNlZ21lbnRz IG9mIHRoZSBuYW1lIGFuZCB0aGUgcGF0dGVybiBhcmUgdGhlbiBtYXRjaGVkIGFnYWluc3QgZWFj aAorICogb3RoZXIuIFdoZW4gJyoqJyBpcyB1c2VkIGZvciBhIHBhdGggc2VnbWVudCBpbiB0aGUg cGF0dGVybiwgaXQgbWF0Y2hlcwogICogemVybyBvciBtb3JlIHBhdGggc2VnbWVudHMgb2YgdGhl IG5hbWUuCiAgKiA8cD4KLSAqIFRoZXJlIGFyZSBzcGVjaWFsIGNhc2UgcmVnYXJkaW5nIHRoZSB1 c2Ugb2YgPGNvZGU+RmlsZS5zZXBhcmF0b3I8L2NvZGU+cyBhdAotICogdGhlIGJlZ2lubmluZ29m IHRoZSBwYXR0ZXJuIGFuZCB0aGUgc3RyaW5nIHRvIG1hdGNoOjxicj4KKyAqIFRoZXJlIGlzIGEg c3BlY2lhbCBjYXNlIHJlZ2FyZGluZyB0aGUgdXNlIG9mIDxjb2RlPkZpbGUuc2VwYXJhdG9yPC9j b2RlPnMKKyAqIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdHRlcm4gYW5kIHRoZSBzdHJpbmcg dG8gbWF0Y2g6PGJyPgogICogV2hlbiBhIHBhdHRlcm4gc3RhcnRzIHdpdGggYSA8Y29kZT5GaWxl LnNlcGFyYXRvcjwvY29kZT4sIHRoZSBzdHJpbmcKICAqIHRvIG1hdGNoIG11c3QgYWxzbyBzdGFy dCB3aXRoIGEgPGNvZGU+RmlsZS5zZXBhcmF0b3I8L2NvZGU+LgogICogV2hlbiBhIHBhdHRlcm4g ZG9lcyBub3Qgc3RhcnQgd2l0aCBhIDxjb2RlPkZpbGUuc2VwYXJhdG9yPC9jb2RlPiwgdGhlCkBA IC05OCw4ICs5OCw4IEBACiAgKiBtYXRjaC4KICAqIDxwPgogICogV2hlbiBhIG5hbWUgcGF0aCBz ZWdtZW50IGlzIG1hdGNoZWQgYWdhaW5zdCBhIHBhdHRlcm4gcGF0aCBzZWdtZW50LCB0aGUKLSAq IGZvbGxvd2luZyBzcGVjaWFsIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQ6Ci0gKiAnKicgbWF0Y2hl cyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycywKKyAqIGZvbGxvd2luZyBzcGVjaWFsIGNoYXJhY3Rl cnMgY2FuIGJlIHVzZWQ6PGJyPgorICogJyonIG1hdGNoZXMgemVybyBvciBtb3JlIGNoYXJhY3Rl cnM8YnI+CiAgKiAnPycgbWF0Y2hlcyBvbmUgY2hhcmFjdGVyLgogICogPHA+CiAgKiBFeGFtcGxl czoKQEAgLTExMSwxMCArMTExLDEwIEBACiAgKiA8cD4KICAqICIqKiIgbWF0Y2hlcyBldmVyeXRo aW5nIGluIGEgZGlyZWN0b3J5IHRyZWUuCiAgKiA8cD4KLSAqICIqKlx0ZXN0XCoqXFhZWioiIG1h dGNoZXMgYWxsIGZpbGVzL2RpcnMgdGhhdCBzdGFydCB3aXRoICJYWVoiIGFuZCB3aGVyZQorICog IioqXHRlc3RcKipcWFlaKiIgbWF0Y2hlcyBhbGwgZmlsZXMvZGlycyB3aGljaCBzdGFydCB3aXRo ICJYWVoiIGFuZCB3aGVyZQogICogdGhlcmUgaXMgYSBwYXJlbnQgZGlyZWN0b3J5IGNhbGxlZCB0 ZXN0IChlLmcuICJhYmNcdGVzdFxkZWZcZ2hpXFhZWjEyMyIpLgogICogPHA+Ci0gKiBDYXNlIHNl bnNpdGl2aXR5IG1heSBiZSB0dXJuZWQgb2ZmIGlmIG5lY2Vzc2FyeS4gIEJ5IGRlZmF1bHQsIGl0 IGlzCisgKiBDYXNlIHNlbnNpdGl2aXR5IG1heSBiZSB0dXJuZWQgb2ZmIGlmIG5lY2Vzc2FyeS4g QnkgZGVmYXVsdCwgaXQgaXMKICAqIHR1cm5lZCBvbi4KICAqIDxwPgogICogRXhhbXBsZSBvZiB1 c2FnZToKQEAgLTEyOSwyMCArMTI5LDIxIEBACiAgKgogICogICBTeXN0ZW0ub3V0LnByaW50bG4o IkZJTEVTOiIpOwogICogICBTdHJpbmdbXSBmaWxlcyA9IGRzLmdldEluY2x1ZGVkRmlsZXMoKTsK LSAqICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7aSsrKSB7CisgKiAgIGZvciAo aW50IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKICAqICAgICBTeXN0ZW0ub3V0LnBy aW50bG4oZmlsZXNbaV0pOwogICogICB9CiAgKiA8L3ByZT4KICAqIFRoaXMgd2lsbCBzY2FuIGEg ZGlyZWN0b3J5IGNhbGxlZCB0ZXN0IGZvciAuY2xhc3MgZmlsZXMsIGJ1dCBleGNsdWRlcyBhbGwK LSAqIC5jbGFzcyBmaWxlcyBpbiBhbGwgZGlyZWN0b3JpZXMgdW5kZXIgYSBkaXJlY3RvcnkgY2Fs bGVkICJtb2R1bGVzIgorICogZmlsZXMgaW4gYWxsIHByb3BlciBzdWJkaXJlY3RvcmllcyBvZiBh IGRpcmVjdG9yeSBjYWxsZWQgIm1vZHVsZXMiCiAgKgotICogQGF1dGhvciBBcm5vdXQgSi4gS3Vp cGVyIDxhIGhyZWY9Im1haWx0bzphamt1aXBlckB3eHMubmwiPmFqa3VpcGVyQHd4cy5ubDwvYT4K KyAqIEBhdXRob3IgQXJub3V0IEouIEt1aXBlciAKKyAqIDxhIGhyZWY9Im1haWx0bzphamt1aXBl ckB3eHMubmwiPmFqa3VpcGVyQHd4cy5ubDwvYT4KICAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRv OnVtYWdlc2hAcmVkaWZmbWFpbC5jb20iPk1hZ2VzaCBVbWFzYW5rYXI8L2E+CiAgKi8KIHB1Ymxp YyBjbGFzcyBEaXJlY3RvcnlTY2FubmVyIGltcGxlbWVudHMgRmlsZVNjYW5uZXIgewogCiAgICAg LyoqCi0gICAgICogUGF0dGVybnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgYnkgZGVmYXVsdC4K KyAgICAgKiBQYXR0ZXJucyB3aGljaCBzaG91bGQgYmUgZXhjbHVkZWQgYnkgZGVmYXVsdC4KICAg ICAgKgogICAgICAqIEBzZWUgI2FkZERlZmF1bHRFeGNsdWRlcygpCiAgICAgICovCkBAIC0xNjAs MTAzICsxNjEsOTMgQEAKICAgICAgICAgIioqL3Zzc3Zlci5zY2MiCiAgICAgfTsKIAotICAgIC8q KgotICAgICAqIFRoZSBiYXNlIGRpcmVjdG9yeSB3aGljaCBzaG91bGQgYmUgc2Nhbm5lZC4KLSAg ICAgKi8KKyAgICAvKiogVGhlIGJhc2UgZGlyZWN0b3J5IHRvIGJlIHNjYW5uZWQuICovCiAgICAg cHJvdGVjdGVkIEZpbGUgYmFzZWRpcjsKIAotICAgIC8qKgotICAgICAqIFRoZSBwYXR0ZXJucyBm b3IgdGhlIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkLgotICAgICAqLworICAgIC8qKiBU aGUgcGF0dGVybnMgZm9yIHRoZSBmaWxlcyB0byBiZSBpbmNsdWRlZC4gKi8KICAgICBwcm90ZWN0 ZWQgU3RyaW5nW10gaW5jbHVkZXM7CiAKLSAgICAvKioKLSAgICAgKiBUaGUgcGF0dGVybnMgZm9y IHRoZSBmaWxlcyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZC4KLSAgICAgKi8KKyAgICAvKiogVGhl IHBhdHRlcm5zIGZvciB0aGUgZmlsZXMgdG8gYmUgZXhjbHVkZWQuICovCiAgICAgcHJvdGVjdGVk IFN0cmluZ1tdIGV4Y2x1ZGVzOwogCi0gICAgLyoqCi0gICAgICogVGhlIGZpbGVzIHRoYXQgd2hl cmUgZm91bmQgYW5kIG1hdGNoZWQgYXQgbGVhc3Qgb25lIGluY2x1ZGVzLCBhbmQgbWF0Y2hlZAot ICAgICAqIG5vIGV4Y2x1ZGVzLgotICAgICAqLworICAgIC8qKiBUaGUgZmlsZXMgd2hpY2ggbWF0 Y2hlZCBhdCBsZWFzdCBvbmUgaW5jbHVkZSBhbmQgbm8gZXhjbHVkZXMuICovCiAgICAgcHJvdGVj dGVkIFZlY3RvciBmaWxlc0luY2x1ZGVkOwogCi0gICAgLyoqCi0gICAgICogVGhlIGZpbGVzIHRo YXQgd2hlcmUgZm91bmQgYW5kIGRpZCBub3QgbWF0Y2ggYW55IGluY2x1ZGVzLgotICAgICAqLwor ICAgIC8qKiBUaGUgZmlsZXMgd2hpY2ggZGlkIG5vdCBtYXRjaCBhbnkgaW5jbHVkZXMuICovCiAg ICAgcHJvdGVjdGVkIFZlY3RvciBmaWxlc05vdEluY2x1ZGVkOwogCi0gICAgLyoqCi0gICAgICog VGhlIGZpbGVzIHRoYXQgd2hlcmUgZm91bmQgYW5kIG1hdGNoZWQgYXQgbGVhc3Qgb25lIGluY2x1 ZGVzLCBhbmQgYWxzbwotICAgICAqIG1hdGNoZWQgYXQgbGVhc3Qgb25lIGV4Y2x1ZGVzLgorICAg IC8qKiAKKyAgICAgKiBUaGUgZmlsZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgaW5jbHVk ZSBhbmQgYXQgbGVhc3QgCisgICAgICogb25lIGV4Y2x1ZGUuCiAgICAgICovCiAgICAgcHJvdGVj dGVkIFZlY3RvciBmaWxlc0V4Y2x1ZGVkOwogCi0gICAgLyoqCi0gICAgICogVGhlIGRpcmVjdG9y aWVzIHRoYXQgd2hlcmUgZm91bmQgYW5kIG1hdGNoZWQgYXQgbGVhc3Qgb25lIGluY2x1ZGVzLCBh bmQKLSAgICAgKiBtYXRjaGVkIG5vIGV4Y2x1ZGVzLgotICAgICAqLworICAgIC8qKiBUaGUgZGly ZWN0b3JpZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgaW5jbHVkZSBhbmQgbm8gZXhjbHVk ZXMuICovCiAgICAgcHJvdGVjdGVkIFZlY3RvciBkaXJzSW5jbHVkZWQ7CiAKLSAgICAvKioKLSAg ICAgKiBUaGUgZGlyZWN0b3JpZXMgdGhhdCB3aGVyZSBmb3VuZCBhbmQgZGlkIG5vdCBtYXRjaCBh bnkgaW5jbHVkZXMuCi0gICAgICovCisgICAgLyoqIFRoZSBkaXJlY3RvcmllcyB3aGljaCB3ZXJl IGZvdW5kIGFuZCBkaWQgbm90IG1hdGNoIGFueSBpbmNsdWRlcy4gKi8KICAgICBwcm90ZWN0ZWQg VmVjdG9yIGRpcnNOb3RJbmNsdWRlZDsKIAotICAgIC8qKgotICAgICAqIFRoZSBmaWxlcyB0aGF0 IHdoZXJlIGZvdW5kIGFuZCBtYXRjaGVkIGF0IGxlYXN0IG9uZSBpbmNsdWRlcywgYW5kIGFsc28K LSAgICAgKiBtYXRjaGVkIGF0IGxlYXN0IG9uZSBleGNsdWRlcy4KKyAgICAvKiogCisgICAgICog VGhlIGRpcmVjdG9yaWVzIHdoaWNoIG1hdGNoZWQgYXQgbGVhc3Qgb25lIGluY2x1ZGUgYW5kIGF0 IGxlYXN0IG9uZSAKKyAgICAgKiBleGNsdWRlLgogICAgICAqLwogICAgIHByb3RlY3RlZCBWZWN0 b3IgZGlyc0V4Y2x1ZGVkOwogCi0gICAgLyoqCi0gICAgICogSGF2ZSB0aGUgVmVjdG9ycyBob2xk aW5nIG91ciByZXN1bHRzIGJlZW4gYnVpbHQgYnkgYSBzbG93IHNjYW4/Ci0gICAgICovCisgICAg LyoqIFdoZXRoZXIgb3Igbm90IG91ciByZXN1bHRzIHdlcmUgYnVpbHQgYnkgYSBzbG93IHNjYW4u ICovCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaGF2ZVNsb3dSZXN1bHRzID0gZmFsc2U7CiAKLSAg ICAvKioKLSAgICAgKiBTaG91bGQgdGhlIGZpbGUgc3lzdGVtIGJlIHRyZWF0ZWQgYXMgYSBjYXNl IHNlbnNpdGl2ZSBvbmU/CisgICAgLyoqIAorICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBmaWxl IHN5c3RlbSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIGNhc2Ugc2Vuc2l0aXZlIAorICAgICAqIG9u ZS4gCiAgICAgICovCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNDYXNlU2Vuc2l0aXZlID0gdHJ1 ZTsKIAotICAgIC8qKgotICAgICAqIElzIGV2ZXJ5dGhpbmcgd2UndmUgc2VlbiBzbyBmYXIgaW5j bHVkZWQ/Ci0gICAgICovCisgICAgLyoqIFdoZXRoZXIgb3Igbm90IGV2ZXJ5dGhpbmcgdGVzdGVk IHNvIGZhciBoYXMgYmVlbiBpbmNsdWRlZC4gKi8KICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBldmVy eXRoaW5nSW5jbHVkZWQgPSB0cnVlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IuCisg ICAgICogU29sZSBjb25zdHJ1Y3Rvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGlyZWN0b3J5U2Nh bm5lcigpIHsKICAgICB9CiAKLQogICAgIC8qKgotICAgICAqIERvZXMgdGhlIHBhdGggbWF0Y2gg dGhlIHN0YXJ0IG9mIHRoaXMgcGF0dGVybiB1cCB0byB0aGUgZmlyc3QgIioqIi4KLSAgICAgKgot ICAgICAqIDxwPlRoaXMgaXMgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIHRlc3QgYW5kIHNob3VsZCBv bmx5IGJlIHVzZWQgaWYgeW91Ci0gICAgICogY2FuIGxpdmUgd2l0aCBmYWxzZSBwb3NpdGl2ZXMu PC9wPgotICAgICAqCi0gICAgICogPHA+PGNvZGU+cGF0dGVybj0qKlxcYTwvY29kZT4gYW5kIDxj b2RlPnN0cj1iPC9jb2RlPiB3aWxsIHlpZWxkIHRydWUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0g cGF0dGVybiB0aGUgKG5vbi1udWxsKSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QKLSAgICAgKiBA cGFyYW0gc3RyICAgICB0aGUgKG5vbi1udWxsKSBzdHJpbmcgKHBhdGgpIHRvIG1hdGNoCisgICAg ICogVGVzdHMgd2hldGhlciBvciBub3QgYSBnaXZlbiBwYXRoIG1hdGNoZXMgdGhlIHN0YXJ0IG9m IGEgZ2l2ZW4gCisgICAgICogcGF0dGVybiB1cCB0byB0aGUgZmlyc3QgIioqIi4KKyAgICAgKiA8 cD4KKyAgICAgKiBUaGlzIGlzIG5vdCBhIGdlbmVyYWwgcHVycG9zZSB0ZXN0IGFuZCBzaG91bGQg b25seSBiZSB1c2VkIGlmIHlvdQorICAgICAqIGNhbiBsaXZlIHdpdGggZmFsc2UgcG9zaXRpdmVz LiBGb3IgZXhhbXBsZSwgPGNvZGU+cGF0dGVybj0qKlxhPC9jb2RlPiAKKyAgICAgKiBhbmQgPGNv ZGU+c3RyPWI8L2NvZGU+IHdpbGwgeWllbGQgPGNvZGU+dHJ1ZTwvY29kZT4uCisgICAgICoKKyAg ICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0LiBNdXN0IG5v dCBiZSAKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPi4KKyAgICAgKiBA cGFyYW0gc3RyICAgICBUaGUgcGF0aCB0byBtYXRjaCwgYXMgYSBTdHJpbmcuIE11c3Qgbm90IGJl IAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LgorICAgICAqIAorICAg ICAqIEByZXR1cm4gd2hldGhlciBvciBub3QgYSBnaXZlbiBwYXRoIG1hdGNoZXMgdGhlIHN0YXJ0 IG9mIGEgZ2l2ZW4gCisgICAgICogcGF0dGVybiB1cCB0byB0aGUgZmlyc3QgIioqIi4KICAgICAg Ki8KICAgICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbWF0Y2hQYXR0ZXJuU3RhcnQoU3RyaW5n IHBhdHRlcm4sIFN0cmluZyBzdHIpIHsKICAgICAgICAgcmV0dXJuIG1hdGNoUGF0dGVyblN0YXJ0 KHBhdHRlcm4sIHN0ciwgdHJ1ZSk7CiAgICAgfQotCiAgICAgLyoqCi0gICAgICogRG9lcyB0aGUg cGF0aCBtYXRjaCB0aGUgc3RhcnQgb2YgdGhpcyBwYXR0ZXJuIHVwIHRvIHRoZSBmaXJzdCAiKioi LgotICAgICAqCi0gICAgICogPHA+VGhpcyBpcyBub3QgYSBnZW5lcmFsIHB1cnBvc2UgdGVzdCBh bmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UKLSAgICAgKiBjYW4gbGl2ZSB3aXRoIGZhbHNl IHBvc2l0aXZlcy48L3A+Ci0gICAgICoKLSAgICAgKiA8cD48Y29kZT5wYXR0ZXJuPSoqXFxhPC9j b2RlPiBhbmQgPGNvZGU+c3RyPWI8L2NvZGU+IHdpbGwgeWllbGQgdHJ1ZS4KLSAgICAgKgotICAg ICAqIEBwYXJhbSBwYXR0ZXJuICAgICAgICAgICAgIHRoZSAobm9uLW51bGwpIHBhdHRlcm4gdG8g bWF0Y2ggYWdhaW5zdAotICAgICAqIEBwYXJhbSBzdHIgICAgICAgICAgICAgICAgIHRoZSAobm9u LW51bGwpIHN0cmluZyAocGF0aCkgdG8gbWF0Y2gKLSAgICAgKiBAcGFyYW0gaXNDYXNlU2Vuc2l0 aXZlICAgICBtdXN0IG1hdGNoZXMgYmUgY2FzZSBzZW5zaXRpdmU/CisgICAgICogVGVzdHMgd2hl dGhlciBvciBub3QgYSBnaXZlbiBwYXRoIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4gCisg ICAgICogcGF0dGVybiB1cCB0byB0aGUgZmlyc3QgIioqIi4KKyAgICAgKiA8cD4KKyAgICAgKiBU aGlzIGlzIG5vdCBhIGdlbmVyYWwgcHVycG9zZSB0ZXN0IGFuZCBzaG91bGQgb25seSBiZSB1c2Vk IGlmIHlvdQorICAgICAqIGNhbiBsaXZlIHdpdGggZmFsc2UgcG9zaXRpdmVzLiBGb3IgZXhhbXBs ZSwgPGNvZGU+cGF0dGVybj0qKlxhPC9jb2RlPiAKKyAgICAgKiBhbmQgPGNvZGU+c3RyPWI8L2Nv ZGU+IHdpbGwgeWllbGQgPGNvZGU+dHJ1ZTwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0g cGF0dGVybiBUaGUgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0LiBNdXN0IG5vdCBiZSAKKyAgICAg KiAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gc3RyICAg ICBUaGUgcGF0aCB0byBtYXRjaCwgYXMgYSBTdHJpbmcuIE11c3Qgbm90IGJlIAorICAgICAqICAg ICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LgorICAgICAqIEBwYXJhbSBpc0Nhc2VTZW5z aXRpdmUgV2hldGhlciBvciBub3QgbWF0Y2hpbmcgc2hvdWxkIGJlIHBlcmZvcm1lZCAKKyAgICAg KiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2Vuc2l0aXZlbHkuCisgICAgICogCisgICAg ICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGdpdmVuIHBhdGggbWF0Y2hlcyB0aGUgc3RhcnQg b2YgYSBnaXZlbiAKKyAgICAgKiBwYXR0ZXJuIHVwIHRvIHRoZSBmaXJzdCAiKioiLgogICAgICAq LwogICAgIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBtYXRjaFBhdHRlcm5TdGFydChTdHJpbmcg cGF0dGVybiwgU3RyaW5nIHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbGVhbiBpc0Nhc2VTZW5zaXRpdmUpIHsKQEAgLTI2OSwxNyArMjYwLDgg QEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIFZlY3Rv ciBwYXREaXJzID0gbmV3IFZlY3RvcigpOwotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBu ZXcgU3RyaW5nVG9rZW5pemVyKHBhdHRlcm4sRmlsZS5zZXBhcmF0b3IpOwotICAgICAgICB3aGls ZSAoc3QuaGFzTW9yZVRva2VucygpKSB7Ci0gICAgICAgICAgICBwYXREaXJzLmFkZEVsZW1lbnQo c3QubmV4dFRva2VuKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9yIHN0ckRpcnMgPSBu ZXcgVmVjdG9yKCk7Ci0gICAgICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsRmlsZS5z ZXBhcmF0b3IpOwotICAgICAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7Ci0gICAgICAg ICAgICBzdHJEaXJzLmFkZEVsZW1lbnQoc3QubmV4dFRva2VuKCkpOwotICAgICAgICB9CisgICAg ICAgIFZlY3RvciBwYXREaXJzID0gdG9rZW5pemVQYXRoIChwYXR0ZXJuKTsKKyAgICAgICAgVmVj dG9yIHN0ckRpcnMgPSB0b2tlbml6ZVBhdGggKHN0cik7CiAKICAgICAgICAgaW50IHBhdElkeFN0 YXJ0ID0gMDsKICAgICAgICAgaW50IHBhdElkeEVuZCAgID0gcGF0RGlycy5zaXplKCktMTsKQEAg LTMxMywyNyArMjk1LDMyIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogTWF0Y2hlcyBhIHBh dGggYWdhaW5zdCBhIHBhdHRlcm4uCisgICAgICogVGVzdHMgd2hldGhlciBvciBub3QgYSBnaXZl biBwYXRoIG1hdGNoZXMgYSBnaXZlbiBwYXR0ZXJuLgogICAgICAqCi0gICAgICogQHBhcmFtIHBh dHRlcm4gdGhlIChub24tbnVsbCkgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0Ci0gICAgICogQHBh cmFtIHN0ciAgICAgdGhlIChub24tbnVsbCkgc3RyaW5nIChwYXRoKSB0byBtYXRjaAorICAgICAq IEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QuIE11c3Qgbm90IGJl IAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LgorICAgICAqIEBwYXJh bSBzdHIgICAgIFRoZSBwYXRoIHRvIG1hdGNoLCBhcyBhIFN0cmluZy4gTXVzdCBub3QgYmUgCisg ICAgICogICAgICAgICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4uCiAgICAgICoKLSAgICAgKiBA cmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gdGhlIHBhdHRlcm4gbWF0Y2hlcyBhZ2FpbnN0 IHRoZSBzdHJpbmcuCi0gICAgICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNl LgorICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHBhdHRlcm4gbWF0Y2hl cyBhZ2FpbnN0IHRoZSBzdHJpbmcsIAorICAgICAqICAgICAgICAgb3IgPGNvZGU+ZmFsc2U8L2Nv ZGU+IG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbWF0 Y2hQYXRoKFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgc3RyKSB7CiAgICAgICAgIHJldHVybiBtYXRj aFBhdGgocGF0dGVybiwgc3RyLCB0cnVlKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBNYXRj aGVzIGEgcGF0aCBhZ2FpbnN0IGEgcGF0dGVybi4KKyAgICAgKiBUZXN0cyB3aGV0aGVyIG9yIG5v dCBhIGdpdmVuIHBhdGggbWF0Y2hlcyBhIGdpdmVuIHBhdHRlcm4uCiAgICAgICoKLSAgICAgKiBA cGFyYW0gcGF0dGVybiAgICAgICAgICAgIHRoZSAobm9uLW51bGwpIHBhdHRlcm4gdG8gbWF0Y2gg YWdhaW5zdAotICAgICAqIEBwYXJhbSBzdHIgICAgICAgICAgICAgICAgdGhlIChub24tbnVsbCkg c3RyaW5nIChwYXRoKSB0byBtYXRjaAotICAgICAqIEBwYXJhbSBpc0Nhc2VTZW5zaXRpdmUgICAg bXVzdCBhIGNhc2Ugc2Vuc2l0aXZlIG1hdGNoIGJlIGRvbmU/CisgICAgICogQHBhcmFtIHBhdHRl cm4gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdC4gTXVzdCBub3QgYmUgCisgICAgICogICAg ICAgICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICogQHBhcmFtIHN0ciAgICAgVGhl IHBhdGggdG8gbWF0Y2gsIGFzIGEgU3RyaW5nLiBNdXN0IG5vdCBiZSAKKyAgICAgKiAgICAgICAg ICAgICAgICA8Y29kZT5udWxsPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gaXNDYXNlU2Vuc2l0aXZl IFdoZXRoZXIgb3Igbm90IG1hdGNoaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgCisgICAgICogICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbnNpdGl2ZWx5LgogICAgICAqCi0gICAgICogQHJl dHVybiA8Y29kZT50cnVlPC9jb2RlPiB3aGVuIHRoZSBwYXR0ZXJuIG1hdGNoZXMgYWdhaW5zdCB0 aGUgc3RyaW5nLgotICAgICAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4K KyAgICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBwYXR0ZXJuIG1hdGNoZXMg YWdhaW5zdCB0aGUgc3RyaW5nLCAKKyAgICAgKiAgICAgICAgIG9yIDxjb2RlPmZhbHNlPC9jb2Rl PiBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIG1hdGNo UGF0aChTdHJpbmcgcGF0dGVybiwgU3RyaW5nIHN0ciwgYm9vbGVhbiBpc0Nhc2VTZW5zaXRpdmUp IHsKICAgICAgICAgLy8gV2hlbiBzdHIgc3RhcnRzIHdpdGggYSBGaWxlLnNlcGFyYXRvciwgcGF0 dGVybiBoYXMgdG8gc3RhcnQgd2l0aCBhCkBAIC0zNDUsMTcgKzMzMiw4IEBACiAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBWZWN0b3IgcGF0RGlycyA9IG5l dyBWZWN0b3IoKTsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2Vu aXplcihwYXR0ZXJuLEZpbGUuc2VwYXJhdG9yKTsKLSAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVU b2tlbnMoKSkgewotICAgICAgICAgICAgcGF0RGlycy5hZGRFbGVtZW50KHN0Lm5leHRUb2tlbigp KTsKLSAgICAgICAgfQotCi0gICAgICAgIFZlY3RvciBzdHJEaXJzID0gbmV3IFZlY3RvcigpOwot ICAgICAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoc3RyLEZpbGUuc2VwYXJhdG9yKTsKLSAg ICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgewotICAgICAgICAgICAgc3RyRGlycy5h ZGRFbGVtZW50KHN0Lm5leHRUb2tlbigpKTsKLSAgICAgICAgfQorICAgICAgICBWZWN0b3IgcGF0 RGlycyA9IHRva2VuaXplUGF0aCAocGF0dGVybik7CisgICAgICAgIFZlY3RvciBzdHJEaXJzID0g dG9rZW5pemVQYXRoIChzdHIpOwogCiAgICAgICAgIGludCBwYXRJZHhTdGFydCA9IDA7CiAgICAg ICAgIGludCBwYXRJZHhFbmQgICA9IHBhdERpcnMuc2l6ZSgpLTE7CkBAIC00NjAsMzcgKzQzOCw0 MCBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLQogICAgIC8qKgotICAgICAqIE1h dGNoZXMgYSBzdHJpbmcgYWdhaW5zdCBhIHBhdHRlcm4uIFRoZSBwYXR0ZXJuIGNvbnRhaW5zIHR3 byBzcGVjaWFsCi0gICAgICogY2hhcmFjdGVyczoKLSAgICAgKiAnKicgd2hpY2ggbWVhbnMgemVy byBvciBtb3JlIGNoYXJhY3RlcnMsCi0gICAgICogJz8nIHdoaWNoIG1lYW5zIG9uZSBhbmQgb25s eSBvbmUgY2hhcmFjdGVyLgotICAgICAqCi0gICAgICogQHBhcmFtIHBhdHRlcm4gdGhlIChub24t bnVsbCkgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0Ci0gICAgICogQHBhcmFtIHN0ciAgICAgdGhl IChub24tbnVsbCkgc3RyaW5nIHRoYXQgbXVzdCBiZSBtYXRjaGVkIGFnYWluc3QgdGhlCi0gICAg ICogICAgICAgICAgICAgICAgcGF0dGVybgorICAgICAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IGEg c3RyaW5nIG1hdGNoZXMgYWdhaW5zdCBhIHBhdHRlcm4uIAorICAgICAqIFRoZSBwYXR0ZXJuIG1h eSBjb250YWluIHR3byBzcGVjaWFsIGNoYXJhY3RlcnM6PGJyPgorICAgICAqICcqJyBtZWFucyB6 ZXJvIG9yIG1vcmUgY2hhcmFjdGVyczxicj4KKyAgICAgKiAnPycgbWVhbnMgb25lIGFuZCBvbmx5 IG9uZSBjaGFyYWN0ZXIKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVy biB0byBtYXRjaCBhZ2FpbnN0LiAKKyAgICAgKiAgICAgICAgICAgICAgICBNdXN0IG5vdCBiZSA8 Y29kZT5udWxsPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gc3RyICAgICBUaGUgc3RyaW5nIHdoaWNo IG11c3QgYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuLgorICAgICAqICAgICAgICAgICAg ICAgIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVy biA8Y29kZT50cnVlPC9jb2RlPiB3aGVuIHRoZSBzdHJpbmcgbWF0Y2hlcyBhZ2FpbnN0IHRoZSBw YXR0ZXJuLAotICAgICAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKyAg ICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyBhZ2Fp bnN0IHRoZSBwYXR0ZXJuLAorICAgICAqICAgICAgICAgb3IgPGNvZGU+ZmFsc2U8L2NvZGU+IG90 aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gbWF0Y2goU3RyaW5n IHBhdHRlcm4sIFN0cmluZyBzdHIpIHsKICAgICAgICAgcmV0dXJuIG1hdGNoKHBhdHRlcm4sIHN0 ciwgdHJ1ZSk7CiAgICAgfQogCi0KICAgICAvKioKLSAgICAgKiBNYXRjaGVzIGEgc3RyaW5nIGFn YWluc3QgYSBwYXR0ZXJuLiBUaGUgcGF0dGVybiBjb250YWlucyB0d28gc3BlY2lhbAotICAgICAq IGNoYXJhY3RlcnM6Ci0gICAgICogJyonIHdoaWNoIG1lYW5zIHplcm8gb3IgbW9yZSBjaGFyYWN0 ZXJzLAotICAgICAqICc/JyB3aGljaCBtZWFucyBvbmUgYW5kIG9ubHkgb25lIGNoYXJhY3Rlci4K LSAgICAgKgotICAgICAqIEBwYXJhbSBwYXR0ZXJuIHRoZSAobm9uLW51bGwpIHBhdHRlcm4gdG8g bWF0Y2ggYWdhaW5zdAotICAgICAqIEBwYXJhbSBzdHIgICAgIHRoZSAobm9uLW51bGwpIHN0cmlu ZyB0aGF0IG11c3QgYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZQotICAgICAqICAgICAgICAgICAgICAg IHBhdHRlcm4KKyAgICAgKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCBhIHN0cmluZyBtYXRjaGVzIGFn YWluc3QgYSBwYXR0ZXJuLiAKKyAgICAgKiBUaGUgcGF0dGVybiBtYXkgY29udGFpbiB0d28gc3Bl Y2lhbCBjaGFyYWN0ZXJzOjxicj4KKyAgICAgKiAnKicgbWVhbnMgemVybyBvciBtb3JlIGNoYXJh Y3RlcnM8YnI+CisgICAgICogJz8nIG1lYW5zIG9uZSBhbmQgb25seSBvbmUgY2hhcmFjdGVyCisg ICAgICogCisgICAgICogQHBhcmFtIHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5z dC4gCisgICAgICogICAgICAgICAgICAgICAgTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4u CisgICAgICogQHBhcmFtIHN0ciAgICAgVGhlIHN0cmluZyB3aGljaCBtdXN0IGJlIG1hdGNoZWQg YWdhaW5zdCB0aGUgcGF0dGVybi4KKyAgICAgKiAgICAgICAgICAgICAgICBNdXN0IG5vdCBiZSA8 Y29kZT5udWxsPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gaXNDYXNlU2Vuc2l0aXZlIFdoZXRoZXIg b3Igbm90IG1hdGNoaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgCisgICAgICogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIHNlbnNpdGl2ZWx5LgogICAgICAqCi0gICAgICogQHJldHVybiA8Y29k ZT50cnVlPC9jb2RlPiB3aGVuIHRoZSBzdHJpbmcgbWF0Y2hlcyBhZ2FpbnN0IHRoZSBwYXR0ZXJu LAotICAgICAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKyAgICAgKgor ICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHN0cmluZyBtYXRjaGVzIGFn YWluc3QgdGhlIHBhdHRlcm4sIAorICAgICAqICAgICAgICAgb3IgPGNvZGU+ZmFsc2U8L2NvZGU+ IG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbWF0Y2go U3RyaW5nIHBhdHRlcm4sIFN0cmluZyBzdHIsIGJvb2xlYW4gaXNDYXNlU2Vuc2l0aXZlKSB7CiAg ICAgICAgIGNoYXJbXSBwYXRBcnIgPSBwYXR0ZXJuLnRvQ2hhckFycmF5KCk7CkBAIC02NDAsNjMg KzYyMSw3OSBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLQotCiAgICAgLyoqCi0g ICAgICogU2V0cyB0aGUgYmFzZWRpciBmb3Igc2Nhbm5pbmcuIFRoaXMgaXMgdGhlIGRpcmVjdG9y eSB0aGF0IGlzIHNjYW5uZWQKLSAgICAgKiByZWN1cnNpdmVseS4gQWxsICcvJyBhbmQgJ1wnIGNo YXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5Ci0gICAgICogPGNvZGU+RmlsZS5zZXBhcmF0b3JDaGFy PC9jb2RlPi4gU28gdGhlIHNlcGFyYXRvciB1c2VkIG5lZWQgbm90IG1hdGNoCisgICAgICogQnJl YWtzIGEgcGF0aCB1cCBpbnRvIGEgVmVjdG9yIG9mIHBhdGggZWxlbWVudHMsIHRva2VuaXppbmcg b24KKyAgICAgKiA8Y29kZT5GaWxlLnNlcGFyYXRvcjwvY29kZT4uCisgICAgICogCisgICAgICog QHBhcmFtIHBhdGggUGF0aCB0byB0b2tlbml6ZS4gTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29k ZT4uCisgICAgICogCisgICAgICogQHJldHVybiBhIFZlY3RvciBvZiBwYXRoIGVsZW1lbnRzIGZy b20gdGhlIHRva2VuaXplZCBwYXRoCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgVmVjdG9y IHRva2VuaXplUGF0aCAoU3RyaW5nIHBhdGgpIHsKKyAgICAgICAgVmVjdG9yIHJldCA9IG5ldyBW ZWN0b3IoKTsKKyAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXpl cihwYXRoLEZpbGUuc2VwYXJhdG9yKTsKKyAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMo KSkgeworICAgICAgICAgICAgcmV0LmFkZEVsZW1lbnQoc3QubmV4dFRva2VuKCkpOworICAgICAg ICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNl dHMgdGhlIGJhc2UgZGlyZWN0b3J5IHRvIGJlIHNjYW5uZWQuIFRoaXMgaXMgdGhlIGRpcmVjdG9y eSB3aGljaCBpcworICAgICAqIHNjYW5uZWQgcmVjdXJzaXZlbHkuIEFsbCAnLycgYW5kICdcJyBj aGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieQorICAgICAqIDxjb2RlPkZpbGUuc2VwYXJhdG9yQ2hh cjwvY29kZT4sIHNvIHRoZSBzZXBhcmF0b3IgdXNlZCBuZWVkIG5vdCBtYXRjaAogICAgICAqIDxj b2RlPkZpbGUuc2VwYXJhdG9yQ2hhcjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gYmFz ZWRpciB0aGUgKG5vbi1udWxsKSBiYXNlZGlyIGZvciBzY2FubmluZworICAgICAqIEBwYXJhbSBi YXNlZGlyIFRoZSBiYXNlIGRpcmVjdG9yeSB0byBzY2FuLiAKKyAgICAgKiAgICAgICAgICAgICAg ICBNdXN0IG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9p ZCBzZXRCYXNlZGlyKFN0cmluZyBiYXNlZGlyKSB7CiAgICAgICAgIHNldEJhc2VkaXIobmV3IEZp bGUoYmFzZWRpci5yZXBsYWNlKCcvJyxGaWxlLnNlcGFyYXRvckNoYXIpLnJlcGxhY2UoJ1xcJyxG aWxlLnNlcGFyYXRvckNoYXIpKSk7CiAgICAgfQogCi0KLQogICAgIC8qKgotICAgICAqIFNldHMg dGhlIGJhc2VkaXIgZm9yIHNjYW5uaW5nLiBUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdGhhdCBpcyBz Y2FubmVkCi0gICAgICogcmVjdXJzaXZlbHkuCisgICAgICogU2V0cyB0aGUgYmFzZSBkaXJlY3Rv cnkgdG8gYmUgc2Nhbm5lZC4gVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHdoaWNoIGlzIAorICAgICAq IHNjYW5uZWQgcmVjdXJzaXZlbHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gYmFzZWRpciB0aGUg YmFzZWRpciBmb3Igc2Nhbm5pbmcKKyAgICAgKiBAcGFyYW0gYmFzZWRpciBUaGUgYmFzZSBkaXJl Y3RvcnkgZm9yIHNjYW5uaW5nLiAKKyAgICAgKiAgICAgICAgICAgICAgICBTaG91bGQgbm90IGJl IDxjb2RlPm51bGw8L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEJhc2VkaXIo RmlsZSBiYXNlZGlyKSB7CiAgICAgICAgIHRoaXMuYmFzZWRpciA9IGJhc2VkaXI7CiAgICAgfQog Ci0KLQogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGJhc2VkaXIgdGhhdCBpcyB1c2VkIGZvciBz Y2FubmluZy4gVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQKLSAgICAgKiBpcyBzY2FubmVkIHJl Y3Vyc2l2ZWx5LgorICAgICAqIFJldHVybnMgdGhlIGJhc2UgZGlyZWN0b3J5IHRvIGJlIHNjYW5u ZWQuIAorICAgICAqIFRoaXMgaXMgdGhlIGRpcmVjdG9yeSB3aGljaCBpcyBzY2FubmVkIHJlY3Vy c2l2ZWx5LgogICAgICAqCi0gICAgICogQHJldHVybiB0aGUgYmFzZWRpciB0aGF0IGlzIHVzZWQg Zm9yIHNjYW5uaW5nCisgICAgICogQHJldHVybiB0aGUgYmFzZSBkaXJlY3RvcnkgdG8gYmUgc2Nh bm5lZAogICAgICAqLwogICAgIHB1YmxpYyBGaWxlIGdldEJhc2VkaXIoKSB7CiAgICAgICAgIHJl dHVybiBiYXNlZGlyOwogICAgIH0KIAotCi0KICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjYXNl IHNlbnNpdGl2aXR5IG9mIHRoZSBmaWxlIHN5c3RlbQorICAgICAqIFNldHMgd2hldGhlciBvciBu b3QgdGhlIGZpbGUgc3lzdGVtIHNob3VsZCBiZSByZWdhcmRlZCBhcyBjYXNlIHNlbnNpdGl2ZS4K ICAgICAgKgotICAgICAqIEBwYXJhbSBzcGVjaWZpZXMgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgY2Fz ZSBzZW5zaXRpdmUKKyAgICAgKiBAcGFyYW0gaXNDYXNlU2Vuc2l0aXZlIHdoZXRoZXIgb3Igbm90 IHRoZSBmaWxlIHN5c3RlbSBzaG91bGQgYmUgCisgICAgICogICAgICAgICAgICAgICAgICAgICAg ICByZWdhcmRlZCBhcyBhIGNhc2Ugc2Vuc2l0aXZlIG9uZQogICAgICAqLwogICAgIHB1YmxpYyB2 b2lkIHNldENhc2VTZW5zaXRpdmUoYm9vbGVhbiBpc0Nhc2VTZW5zaXRpdmUpIHsKICAgICAgICAg dGhpcy5pc0Nhc2VTZW5zaXRpdmUgPSBpc0Nhc2VTZW5zaXRpdmU7CiAgICAgfQogCiAgICAgLyoq Ci0gICAgICogU2V0cyB0aGUgc2V0IG9mIGluY2x1ZGUgcGF0dGVybnMgdG8gdXNlLiBBbGwgJy8n IGFuZCAnXCcgY2hhcmFjdGVycyBhcmUKLSAgICAgKiByZXBsYWNlZCBieSA8Y29kZT5GaWxlLnNl cGFyYXRvckNoYXI8L2NvZGU+LiBTbyB0aGUgc2VwYXJhdG9yIHVzZWQgbmVlZAotICAgICAqIG5v dCBtYXRjaCA8Y29kZT5GaWxlLnNlcGFyYXRvckNoYXI8L2NvZGU+LgorICAgICAqIFNldHMgdGhl IGxpc3Qgb2YgaW5jbHVkZSBwYXR0ZXJucyB0byB1c2UuIEFsbCAnLycgYW5kICdcJyBjaGFyYWN0 ZXJzIAorICAgICAqIGFyZSByZXBsYWNlZCBieSA8Y29kZT5GaWxlLnNlcGFyYXRvckNoYXI8L2Nv ZGU+LCBzbyB0aGUgc2VwYXJhdG9yIHVzZWQgCisgICAgICogbmVlZCBub3QgbWF0Y2ggPGNvZGU+ RmlsZS5zZXBhcmF0b3JDaGFyPC9jb2RlPi4KICAgICAgKiA8cD4KICAgICAgKiBXaGVuIGEgcGF0 dGVybiBlbmRzIHdpdGggYSAnLycgb3IgJ1wnLCAiKioiIGlzIGFwcGVuZGVkLgogICAgICAqCi0g ICAgICogQHBhcmFtIGluY2x1ZGVzIGxpc3Qgb2YgaW5jbHVkZSBwYXR0ZXJucworICAgICAqIEBw YXJhbSBpbmNsdWRlcyBBIGxpc3Qgb2YgaW5jbHVkZSBwYXR0ZXJucy4KKyAgICAgKiAgICAgICAg ICAgICAgICAgTWF5IGJlIDxjb2RlPm51bGw8L2NvZGU+LCBpbmRpY2F0aW5nIHRoYXQgYWxsIGZp bGVzIAorICAgICAqICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaW5jbHVkZWQuIElmIGEgbm9u LTxjb2RlPm51bGw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgIGxpc3QgaXMgZ2l2ZW4s IGFsbCBlbGVtZW50cyBtdXN0IGJlIAorICAgICAqIG5vbi08Y29kZT5udWxsPC9jb2RlPi4KICAg ICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRJbmNsdWRlcyhTdHJpbmdbXSBpbmNsdWRlcykgewog ICAgICAgICBpZiAoaW5jbHVkZXMgPT0gbnVsbCkgewpAQCAtNzE0LDE2ICs3MTEsMTcgQEAKICAg ICAgICAgfQogICAgIH0KIAotCi0KICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBzZXQgb2YgZXhj bHVkZSBwYXR0ZXJucyB0byB1c2UuIEFsbCAnLycgYW5kICdcJyBjaGFyYWN0ZXJzIGFyZQotICAg ICAqIHJlcGxhY2VkIGJ5IDxjb2RlPkZpbGUuc2VwYXJhdG9yQ2hhcjwvY29kZT4uIFNvIHRoZSBz ZXBhcmF0b3IgdXNlZCBuZWVkCi0gICAgICogbm90IG1hdGNoIDxjb2RlPkZpbGUuc2VwYXJhdG9y Q2hhcjwvY29kZT4uCisgICAgICogU2V0cyB0aGUgbGlzdCBvZiBleGNsdWRlIHBhdHRlcm5zIHRv IHVzZS4gQWxsICcvJyBhbmQgJ1wnIGNoYXJhY3RlcnMgCisgICAgICogYXJlIHJlcGxhY2VkIGJ5 IDxjb2RlPkZpbGUuc2VwYXJhdG9yQ2hhcjwvY29kZT4sIHNvIHRoZSBzZXBhcmF0b3IgdXNlZCAK KyAgICAgKiBuZWVkIG5vdCBtYXRjaCA8Y29kZT5GaWxlLnNlcGFyYXRvckNoYXI8L2NvZGU+Lgog ICAgICAqIDxwPgogICAgICAqIFdoZW4gYSBwYXR0ZXJuIGVuZHMgd2l0aCBhICcvJyBvciAnXCcs ICIqKiIgaXMgYXBwZW5kZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXhjbHVkZXMgbGlzdCBv ZiBleGNsdWRlIHBhdHRlcm5zCisgICAgICogQHBhcmFtIGV4Y2x1ZGVzIEEgbGlzdCBvZiBleGNs dWRlIHBhdHRlcm5zLiAKKyAgICAgKiAgICAgICAgICAgICAgICAgTWF5IGJlIDxjb2RlPm51bGw8 L2NvZGU+LCBpbmRpY2F0aW5nIHRoYXQgbm8gZmlsZXMgCisgICAgICogICAgICAgICAgICAgICAg IHNob3VsZCBiZSBleGNsdWRlZC4gSWYgYSBub24tPGNvZGU+bnVsbDwvY29kZT4gbGlzdCBpcyAK KyAgICAgKiAgICAgICAgICAgICAgICAgZ2l2ZW4sIGFsbCBlbGVtZW50cyBtdXN0IGJlIG5vbi08 Y29kZT5udWxsPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFeGNsdWRlcyhT dHJpbmdbXSBleGNsdWRlcykgewogICAgICAgICBpZiAoZXhjbHVkZXMgPT0gbnVsbCkgewpAQCAt NzQyLDIyICs3NDAsMjMgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBIYXMgdGhlIHNjYW5u ZXIgZXhjbHVkZWQgb3Igb21pdHRlZCBhbnkgZmlsZXMgb3IgZGlyZWN0b3JpZXMgaXQKLSAgICAg KiBjYW1lIGFjY3Jvc3M/CisgICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc2Nhbm5l ciBoYXMgaW5jbHVkZWQgYWxsIHRoZSBmaWxlcyBvcgorICAgICAqIGRpcmVjdG9yaWVzIGl0IGhh cyBjb21lIGFjcm9zcyBzbyBmYXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgYWxs IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGhhdmUgYmVlbiBmb3VuZCwKLSAgICAgKiBhcmUg aW5jbHVkZWQuCisgICAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbGwgZmlsZXMg YW5kIGRpcmVjdG9yaWVzIHdoaWNoIGhhdmUgCisgICAgICogICAgICAgICBiZWVuIGZvdW5kIHNv IGZhciBoYXZlIGJlZW4gaW5jbHVkZWQuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNF dmVyeXRoaW5nSW5jbHVkZWQoKSB7CiAgICAgICAgIHJldHVybiBldmVyeXRoaW5nSW5jbHVkZWQ7 CiAgICAgfQogCi0KICAgICAvKioKLSAgICAgKiBTY2FucyB0aGUgYmFzZSBkaXJlY3RvcnkgZm9y IGZpbGVzIHRoYXQgbWF0Y2ggYXQgbGVhc3Qgb25lIGluY2x1ZGUKLSAgICAgKiBwYXR0ZXJuLCBh bmQgZG9uJ3QgbWF0Y2ggYW55IGV4Y2x1ZGUgcGF0dGVybnMuCisgICAgICogU2NhbnMgdGhlIGJh c2UgZGlyZWN0b3J5IGZvciBmaWxlcyB3aGljaCBtYXRjaCBhdCBsZWFzdCBvbmUgaW5jbHVkZQor ICAgICAqIHBhdHRlcm4gYW5kIGRvbid0IG1hdGNoIGFueSBleGNsdWRlIHBhdHRlcm5zLgogICAg ICAqCi0gICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gd2hlbiBiYXNlZGly IHdhcyBzZXQgaW5jb3JyZWNseQorICAgICAqIEBleGNlcHRpb24gSWxsZWdhbFN0YXRlRXhjZXB0 aW9uIGlmIHRoZSBiYXNlIGRpcmVjdG9yeSB3YXMgc2V0IAorICAgICAqICAgICAgICAgICAgaW5j b3JyZWN0bHkgKGkuZS4gaWYgaXQgaXMgPGNvZGU+bnVsbDwvY29kZT4sIGRvZXNuJ3QgZXhpc3Qs CisgICAgICogICAgICAgICAgICBvciBpc24ndCBhIGRpcmVjdG9yeSkuCiAgICAgICovCiAgICAg cHVibGljIHZvaWQgc2NhbigpIHsKICAgICAgICAgaWYgKGJhc2VkaXIgPT0gbnVsbCkgewpAQCAt ODAxLDkgKzgwMCwxMiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRvcGxldmVsIGludm9j YXRpb24gZm9yIHRoZSBzY2FuLgotICAgICAqCi0gICAgICogPHA+UmV0dXJucyBpbW1lZGlhdGVs eSBpZiBhIHNsb3cgc2NhbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZC4KKyAgICAgKiBUb3Ag bGV2ZWwgaW52b2NhdGlvbiBmb3IgYSBzbG93IHNjYW4uIEEgc2xvdyBzY2FuIGJ1aWxkcyB1cCBh IGZ1bGwKKyAgICAgKiBsaXN0IG9mIGV4Y2x1ZGVkL2luY2x1ZGVkIGZpbGVzL2RpcmVjdG9yaWVz LCB3aGVyZWFzIGEgZmFzdCBzY2FuIAorICAgICAqIHdpbGwgb25seSBoYXZlIGZ1bGwgcmVzdWx0 cyBmb3IgaW5jbHVkZWQgZmlsZXMsIGFzIGl0IGlnbm9yZXMgCisgICAgICogZGlyZWN0b3JpZXMg d2hpY2ggY2FuJ3QgcG9zc2libHkgaG9sZCBhbnkgaW5jbHVkZWQgZmlsZXMvZGlyZWN0b3JpZXMu CisgICAgICogPHA+CisgICAgICogUmV0dXJucyBpbW1lZGlhdGVseSBpZiBhIHNsb3cgc2NhbiBo YXMgYWxyZWFkeSBiZWVuIGNvbXBsZXRlZC4KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBz bG93U2NhbigpIHsKICAgICAgICAgaWYgKGhhdmVTbG93UmVzdWx0cykgewpAQCAtODMzLDE2ICs4 MzUsMTcgQEAKICAgICAgICAgaGF2ZVNsb3dSZXN1bHRzICA9IHRydWU7CiAgICAgfQogCi0KICAg ICAvKioKLSAgICAgKiBTY2FucyB0aGUgcGFzc2VkIGRpciBmb3IgZmlsZXMgYW5kIGRpcmVjdG9y aWVzLiBGb3VuZCBmaWxlcyBhbmQKKyAgICAgKiBTY2FucyB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGZv ciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIEZvdW5kIGZpbGVzIGFuZAogICAgICAqIGRpcmVjdG9y aWVzIGFyZSBwbGFjZWQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBjb2xsZWN0aW9ucywgYmFzZWQgb24g dGhlCiAgICAgICogbWF0Y2hpbmcgb2YgaW5jbHVkZXMgYW5kIGV4Y2x1ZGVzLiBXaGVuIGEgZGly ZWN0b3J5IGlzIGZvdW5kLCBpdCBpcwogICAgICAqIHNjYW5uZWQgcmVjdXJzaXZlbHkuCiAgICAg ICoKLSAgICAgKiBAcGFyYW0gZGlyICAgdGhlIGRpcmVjdG9yeSB0byBzY2FuCi0gICAgICogQHBh cmFtIHZwYXRoIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBiYXNlZGlyIChuZWVkZWQgdG8gcHJl dmVudAotICAgICAqICAgICAgICAgICAgICBwcm9ibGVtcyB3aXRoIGFuIGFic29sdXRlIHBhdGgg d2hlbiB1c2luZyBkaXIpCisgICAgICogQHBhcmFtIGRpciAgIFRoZSBkaXJlY3RvcnkgdG8gc2Nh bi4gTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICogQHBhcmFtIHZwYXRoIFRo ZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSAobmVlZGVkIHRvIAorICAgICAq ICAgICAgICAgICAgICBwcmV2ZW50IHByb2JsZW1zIHdpdGggYW4gYWJzb2x1dGUgcGF0aCB3aGVu IHVzaW5nIAorICAgICAqICAgICAgICAgICAgICBkaXIpLiBNdXN0IG5vdCBiZSA8Y29kZT5udWxs PC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gZmFzdCAgV2hldGhlciBvciBub3QgdGhpcyBjYWxsIGlz IHBhcnQgb2YgYSBmYXN0IHNjYW4uCiAgICAgICoKICAgICAgKiBAc2VlICNmaWxlc0luY2x1ZGVk CiAgICAgICogQHNlZSAjZmlsZXNOb3RJbmNsdWRlZApAQCAtODUwLDYgKzg1Myw3IEBACiAgICAg ICogQHNlZSAjZGlyc0luY2x1ZGVkCiAgICAgICogQHNlZSAjZGlyc05vdEluY2x1ZGVkCiAgICAg ICogQHNlZSAjZGlyc0V4Y2x1ZGVkCisgICAgICogQHNlZSAjc2xvd1NjYW4KICAgICAgKi8KICAg ICBwcm90ZWN0ZWQgdm9pZCBzY2FuZGlyKEZpbGUgZGlyLCBTdHJpbmcgdnBhdGgsIGJvb2xlYW4g ZmFzdCkgewogICAgICAgICBTdHJpbmdbXSBuZXdmaWxlcyA9IGRpci5saXN0KCk7CkBAIC05MDks MTggKzkxMywxNyBAQAogICAgICAgICB9CiAgICAgfQogCi0KLQogICAgIC8qKgotICAgICAqIFRl c3RzIHdoZXRoZXIgYSBuYW1lIG1hdGNoZXMgYWdhaW5zdCBhdCBsZWFzdCBvbmUgaW5jbHVkZSBw YXR0ZXJuLgorICAgICAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IGEgbmFtZSBtYXRjaGVzIGFnYWlu c3QgYXQgbGVhc3Qgb25lIGluY2x1ZGUgCisgICAgICogcGF0dGVybi4KICAgICAgKgotICAgICAq IEBwYXJhbSBuYW1lIHRoZSBuYW1lIHRvIG1hdGNoCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5h bWUgdG8gbWF0Y2guIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgogICAgICAqIEByZXR1 cm4gPGNvZGU+dHJ1ZTwvY29kZT4gd2hlbiB0aGUgbmFtZSBtYXRjaGVzIGFnYWluc3QgYXQgbGVh c3Qgb25lCi0gICAgICogICAgICAgICBpbmNsdWRlIHBhdHRlcm4sIDxjb2RlPmZhbHNlPC9jb2Rl PiBvdGhlcndpc2UuCisgICAgICogICAgICAgICBpbmNsdWRlIHBhdHRlcm4sIG9yIDxjb2RlPmZh bHNlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNJ bmNsdWRlZChTdHJpbmcgbmFtZSkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluY2x1 ZGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hQYXRoKGluY2x1ZGVzW2ld LG5hbWUsIGlzQ2FzZVNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaFBhdGgoaW5j bHVkZXNbaV0sIG5hbWUsIGlzQ2FzZVNlbnNpdGl2ZSkpIHsKICAgICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtOTI4LDExICs5MzEsMTIgQEAK ICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0cyB3aGV0aGVyIGEgbmFtZSBtYXRjaGVzIHRo ZSBzdGFydCBvZiBhdCBsZWFzdCBvbmUgaW5jbHVkZSBwYXR0ZXJuLgorICAgICAqIFRlc3RzIHdo ZXRoZXIgb3Igbm90IGEgbmFtZSBtYXRjaGVzIHRoZSBzdGFydCBvZiBhdCBsZWFzdCBvbmUgaW5j bHVkZSAKKyAgICAgKiBwYXR0ZXJuLgogICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5h bWUgdG8gbWF0Y2gKLSAgICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gdGhlIG5h bWUgbWF0Y2hlcyBhZ2FpbnN0IGF0IGxlYXN0IG9uZQotICAgICAqICAgICAgICAgaW5jbHVkZSBw YXR0ZXJuLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAqIEBwYXJhbSBuYW1l IFRoZSBuYW1lIHRvIG1hdGNoLiBNdXN0IG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KKyAgICAg KiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gdGhlIG5hbWUgbWF0Y2hlcyBhZ2FpbnN0 IHRoZSBzdGFydCBvZiBhdCAKKyAgICAgKiAgICAgICAgIGxlYXN0IG9uZSBpbmNsdWRlIHBhdHRl cm4sIG9yIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHJvdGVj dGVkIGJvb2xlYW4gY291bGRIb2xkSW5jbHVkZWQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBpbmNsdWRlcy5sZW5ndGg7IGkrKykgewpAQCAtOTQ0LDExICs5NDgs MTIgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0cyB3aGV0aGVyIGEgbmFtZSBtYXRj aGVzIGFnYWluc3QgYXQgbGVhc3Qgb25lIGV4Y2x1ZGUgcGF0dGVybi4KKyAgICAgKiBUZXN0cyB3 aGV0aGVyIG9yIG5vdCBhIG5hbWUgbWF0Y2hlcyBhZ2FpbnN0IGF0IGxlYXN0IG9uZSBleGNsdWRl IAorICAgICAqIHBhdHRlcm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSB0 byBtYXRjaAorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRvIG1hdGNoLiBNdXN0IG5vdCBi ZSA8Y29kZT5udWxsPC9jb2RlPi4KICAgICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdo ZW4gdGhlIG5hbWUgbWF0Y2hlcyBhZ2FpbnN0IGF0IGxlYXN0IG9uZQotICAgICAqICAgICAgICAg ZXhjbHVkZSBwYXR0ZXJuLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorICAgICAqICAg ICAgICAgZXhjbHVkZSBwYXR0ZXJuLCBvciA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgog ICAgICAqLwogICAgIHByb3RlY3RlZCBib29sZWFuIGlzRXhjbHVkZWQoU3RyaW5nIG5hbWUpIHsK ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleGNsdWRlcy5sZW5ndGg7IGkrKykgewpAQCAt OTU5LDEzICs5NjQsMTMgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotCiAgICAg LyoqCi0gICAgICogR2V0IHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgdGhhdCBtYXRjaGVkIGF0IGxl YXN0IG9uZSBvZiB0aGUgaW5jbHVkZQotICAgICAqIHBhdHRlcm5zLCBhbmQgbWF0Y2hlZCBub25l IG9mIHRoZSBleGNsdWRlIHBhdHRlcm5zLgotICAgICAqIFRoZSBuYW1lcyBhcmUgcmVsYXRpdmUg dG8gdGhlIGJhc2VkaXIuCisgICAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzIHdo aWNoIG1hdGNoZWQgYXQgbGVhc3Qgb25lIG9mIHRoZSAKKyAgICAgKiBpbmNsdWRlIHBhdHRlcm5z IGFuZCBub25lIG9mIHRoZSBleGNsdWRlIHBhdHRlcm5zLgorICAgICAqIFRoZSBuYW1lcyBhcmUg cmVsYXRpdmUgdG8gdGhlIGJhc2UgZGlyZWN0b3J5LgogICAgICAqCi0gICAgICogQHJldHVybiB0 aGUgbmFtZXMgb2YgdGhlIGZpbGVzCisgICAgICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGZp bGVzIHdoaWNoIG1hdGNoZWQgYXQgbGVhc3Qgb25lIG9mIHRoZQorICAgICAqICAgICAgICAgaW5j bHVkZSBwYXR0ZXJucyBhbmQgbm9uZSBvZiB0aGUgZXhjbHVkZSBwYXR0ZXJucy4KICAgICAgKi8K ICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SW5jbHVkZWRGaWxlcygpIHsKICAgICAgICAgaW50IGNv dW50ID0gZmlsZXNJbmNsdWRlZC5zaXplKCk7CkBAIC05NzYsMTMgKzk4MSwxNSBAQAogICAgICAg ICByZXR1cm4gZmlsZXM7CiAgICAgfQogCi0KLQogICAgIC8qKgotICAgICAqIEdldCB0aGUgbmFt ZXMgb2YgdGhlIGZpbGVzIHRoYXQgbWF0Y2hlZCBhdCBub25lIG9mIHRoZSBpbmNsdWRlIHBhdHRl cm5zLgotICAgICAqIFRoZSBuYW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJhc2VkaXIuCi0gICAg ICoKLSAgICAgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMKKyAgICAgKiBSZXR1cm5z IHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgd2hpY2ggbWF0Y2hlZCBub25lIG9mIHRoZSBpbmNsdWRl IAorICAgICAqIHBhdHRlcm5zLiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIGRp cmVjdG9yeS4gVGhpcyBpbnZvbHZlcworICAgICAqIHBlcmZvcm1pbmcgYSBzbG93IHNjYW4gaWYg b25lIGhhcyBub3QgYWxyZWFkeSBiZWVuIGNvbXBsZXRlZC4KKyAgICAgKgorICAgICAqIEByZXR1 cm4gdGhlIG5hbWVzIG9mIHRoZSBmaWxlcyB3aGljaCBtYXRjaGVkIG5vbmUgb2YgdGhlIGluY2x1 ZGUgCisgICAgICogICAgICAgICBwYXR0ZXJucy4KKyAgICAgKiAKKyAgICAgKiBAc2VlICNzbG93 U2NhbgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXROb3RJbmNsdWRlZEZpbGVzKCkg ewogICAgICAgICBzbG93U2NhbigpOwpAQCAtOTk0LDE0ICsxMDAxLDE2IEBACiAgICAgICAgIHJl dHVybiBmaWxlczsKICAgICB9CiAKLQotCiAgICAgLyoqCi0gICAgICogR2V0IHRoZSBuYW1lcyBv ZiB0aGUgZmlsZXMgdGhhdCBtYXRjaGVkIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5jbHVkZQotICAg ICAqIHBhdHRlcm5zLCBhbiBtYXRjaGVkIGFsc28gYXQgbGVhc3Qgb25lIG9mIHRoZSBleGNsdWRl IHBhdHRlcm5zLgotICAgICAqIFRoZSBuYW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJhc2VkaXIu Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMKKyAgICAgKiBS ZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUg b2YgdGhlIAorICAgICAqIGluY2x1ZGUgcGF0dGVybnMgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUg ZXhjbHVkZSBwYXR0ZXJucy4KKyAgICAgKiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBi YXNlIGRpcmVjdG9yeS4gVGhpcyBpbnZvbHZlcworICAgICAqIHBlcmZvcm1pbmcgYSBzbG93IHNj YW4gaWYgb25lIGhhcyBub3QgYWxyZWFkeSBiZWVuIGNvbXBsZXRlZC4KKyAgICAgKgorICAgICAq IEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBmaWxlcyB3aGljaCBtYXRjaGVkIGF0IGxlYXN0IG9u ZSBvZiB0aGUgCisgICAgICogICAgICAgICBpbmNsdWRlIHBhdHRlcm5zIGFuZCBhdCBhdCBsZWFz dCBvbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCisgICAgICogCisgICAgICogQHNlZSAjc2xv d1NjYW4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RXhjbHVkZWRGaWxlcygpIHsK ICAgICAgICAgc2xvd1NjYW4oKTsKQEAgLTEwMTMsMTQgKzEwMjIsMTMgQEAKICAgICAgICAgcmV0 dXJuIGZpbGVzOwogICAgIH0KIAotCi0KICAgICAvKioKLSAgICAgKiBHZXQgdGhlIG5hbWVzIG9m IHRoZSBkaXJlY3RvcmllcyB0aGF0IG1hdGNoZWQgYXQgbGVhc3Qgb25lIG9mIHRoZSBpbmNsdWRl Ci0gICAgICogcGF0dGVybnMsIGFuIG1hdGNoZWQgbm9uZSBvZiB0aGUgZXhjbHVkZSBwYXR0ZXJu cy4KLSAgICAgKiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlZGlyLgorICAgICAq IFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBkaXJlY3RvcmllcyB3aGljaCBtYXRjaGVkIGF0IGxl YXN0IG9uZSBvZiB0aGUgCisgICAgICogaW5jbHVkZSBwYXR0ZXJucyBhbmQgbm9uZSBvZiB0aGUg ZXhjbHVkZSBwYXR0ZXJucy4KKyAgICAgKiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBi YXNlIGRpcmVjdG9yeS4KICAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBk aXJlY3RvcmllcworICAgICAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBkaXJlY3RvcmllcyB3 aGljaCBtYXRjaGVkIGF0IGxlYXN0IG9uZSBvZiB0aGUKKyAgICAgKiBpbmNsdWRlIHBhdHRlcm5z IGFuZCBub25lIG9mIHRoZSBleGNsdWRlIHBhdHRlcm5zLgogICAgICAqLwogICAgIHB1YmxpYyBT dHJpbmdbXSBnZXRJbmNsdWRlZERpcmVjdG9yaWVzKCkgewogICAgICAgICBpbnQgY291bnQgPSBk aXJzSW5jbHVkZWQuc2l6ZSgpOwpAQCAtMTAzMSwxNCArMTAzOSwxNSBAQAogICAgICAgICByZXR1 cm4gZGlyZWN0b3JpZXM7CiAgICAgfQogCi0KLQogICAgIC8qKgotICAgICAqIEdldCB0aGUgbmFt ZXMgb2YgdGhlIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2hlZCBhdCBub25lIG9mIHRoZSBpbmNsdWRl Ci0gICAgICogcGF0dGVybnMuCi0gICAgICogVGhlIG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUg YmFzZWRpci4KKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMgd2hp Y2ggbWF0Y2hlZCBub25lIG9mIHRoZSBpbmNsdWRlCisgICAgICogcGF0dGVybnMuIFRoZSBuYW1l cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgZGlyZWN0b3J5LiBUaGlzIGludm9sdmVzCisgICAg ICogcGVyZm9ybWluZyBhIHNsb3cgc2NhbiBpZiBvbmUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gY29t cGxldGVkLgogICAgICAqCi0gICAgICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGRpcmVjdG9y aWVzCisgICAgICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGRpcmVjdG9yaWVzIHdoaWNoIG1h dGNoZWQgbm9uZSBvZiB0aGUgaW5jbHVkZQorICAgICAqIHBhdHRlcm5zLgorICAgICAqIAorICAg ICAqIEBzZWUgI3Nsb3dTY2FuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZ1tdIGdldE5vdElu Y2x1ZGVkRGlyZWN0b3JpZXMoKSB7CiAgICAgICAgIHNsb3dTY2FuKCk7CkBAIC0xMDUwLDE0ICsx MDU5LDE2IEBACiAgICAgICAgIHJldHVybiBkaXJlY3RvcmllczsKICAgICB9CiAKLQotCiAgICAg LyoqCi0gICAgICogR2V0IHRoZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMgdGhhdCBtYXRjaGVk IGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5jbHVkZQotICAgICAqIHBhdHRlcm5zLCBhbiBtYXRjaGVk IGFsc28gYXQgbGVhc3Qgb25lIG9mIHRoZSBleGNsdWRlIHBhdHRlcm5zLgotICAgICAqIFRoZSBu YW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJhc2VkaXIuCi0gICAgICoKLSAgICAgKiBAcmV0dXJu IHRoZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBv ZiB0aGUgZGlyZWN0b3JpZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlIAorICAg ICAqIGluY2x1ZGUgcGF0dGVybnMgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgZXhjbHVkZSBwYXR0 ZXJucy4KKyAgICAgKiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIGRpcmVjdG9y eS4gVGhpcyBpbnZvbHZlcworICAgICAqIHBlcmZvcm1pbmcgYSBzbG93IHNjYW4gaWYgb25lIGhh cyBub3QgYWxyZWFkeSBiZWVuIGNvbXBsZXRlZC4KKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRo ZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2Yg dGhlIAorICAgICAqIGluY2x1ZGUgcGF0dGVybnMgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgZXhj bHVkZSBwYXR0ZXJucy4KKyAgICAgKiAKKyAgICAgKiBAc2VlICNzbG93U2NhbgogICAgICAqLwog ICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRFeGNsdWRlZERpcmVjdG9yaWVzKCkgewogICAgICAgICBz bG93U2NhbigpOwpAQCAtMTA2OSwxMSArMTA4MCw4IEBACiAgICAgICAgIHJldHVybiBkaXJlY3Rv cmllczsKICAgICB9CiAKLQotCiAgICAgLyoqCi0gICAgICogQWRkcyB0aGUgYXJyYXkgd2l0aCBk ZWZhdWx0IGV4Y2x1c2lvbnMgdG8gdGhlIGN1cnJlbnQgZXhjbHVzaW9ucyBzZXQuCi0gICAgICoK KyAgICAgKiBBZGRzIGRlZmF1bHQgZXhjbHVzaW9ucyB0byB0aGUgY3VycmVudCBleGNsdXNpb25z IHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGREZWZhdWx0RXhjbHVkZXMoKSB7CiAg ICAgICAgIGludCBleGNsdWRlc0xlbmd0aCA9IGV4Y2x1ZGVzID09IG51bGwgPyAwIDogZXhjbHVk ZXMubGVuZ3RoOwpAQCAtMTA4Nyw1ICsxMDk1LDQgQEAKICAgICAgICAgfQogICAgICAgICBleGNs dWRlcyA9IG5ld0V4Y2x1ZGVzOwogICAgIH0KLQogfQpJbmRleDogc3JjL21haW4vb3JnL2FwYWNo ZS90b29scy9hbnQvRXhpdEV4Y2VwdGlvbi5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21l L2N2c3B1YmxpYy9qYWthcnRhLWFudC9zcmMvbWFpbi9vcmcvYXBhY2hlL3Rvb2xzL2FudC9FeGl0 RXhjZXB0aW9uLmphdmEsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1yMS4zIEV4 aXRFeGNlcHRpb24uamF2YQotLS0gc3JjL21haW4vb3JnL2FwYWNoZS90b29scy9hbnQvRXhpdEV4 Y2VwdGlvbi5qYXZhCTUgRmViIDIwMDIgMTY6NTg6MzQgLTAwMDAJMS4zCisrKyBzcmMvbWFpbi9v cmcvYXBhY2hlL3Rvb2xzL2FudC9FeGl0RXhjZXB0aW9uLmphdmEJMTggRmViIDIwMDIgMTQ6MTM6 MDEgLTAwMDAKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNl bnNlLCBWZXJzaW9uIDEuMQogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBUaGUgQXBhY2hlIFNv ZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAw MiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCiAgKiByZXNlcnZl ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTYyLDYgKzYyLDcgQEAKICAqLwogcHVibGljIGNsYXNz IEV4aXRFeGNlcHRpb24gZXh0ZW5kcyBTZWN1cml0eUV4Y2VwdGlvbiB7CiAKKyAgICAvKiogU3Rh dHVzIGNvZGUgKi8KICAgICBwcml2YXRlIGludCBzdGF0dXM7CiAgICAgCiAgICAgLyoqCkluZGV4 OiBzcmMvbWFpbi9vcmcvYXBhY2hlL3Rvb2xzL2FudC9GaWxlU2Nhbm5lci5qYXZhCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9ob21lL2N2c3B1YmxpYy9qYWthcnRhLWFudC9zcmMvbWFpbi9vcmcvYXBh Y2hlL3Rvb2xzL2FudC9GaWxlU2Nhbm5lci5qYXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgK ZGlmZiAtdSAtcjEuOCBGaWxlU2Nhbm5lci5qYXZhCi0tLSBzcmMvbWFpbi9vcmcvYXBhY2hlL3Rv b2xzL2FudC9GaWxlU2Nhbm5lci5qYXZhCTEwIEphbiAyMDAyIDExOjIxOjE5IC0wMDAwCTEuOAor Kysgc3JjL21haW4vb3JnL2FwYWNoZS90b29scy9hbnQvRmlsZVNjYW5uZXIuamF2YQkxOCBGZWIg MjAwMiAxNDoxMzowMyAtMDAwMApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGUgQXBhY2hlIFNv ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIw MDEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cworICogQ29weXJp Z2h0IChjKSAyMDAwLTIwMDIgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp Z2h0cwogICogcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01NiwxMDcgKzU2LDEzOCBA QAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIAogLyoqCi0gKiBBbiBpbnRlcmZhY2UgdXNlZCB0byBk ZXNjcmliZSB0aGUgYWN0aW9ucyByZXF1aXJlZCBieSBhbnkgdHlwZSBvZiAKKyAqIEFuIGludGVy ZmFjZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhY3Rpb25zIHJlcXVpcmVkIG9mIGFueSB0eXBlIG9m IAogICogZGlyZWN0b3J5IHNjYW5uZXIuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRmlsZVNjYW5u ZXIgewogICAgIC8qKgotICAgICAqIEFkZHMgYW4gYXJyYXkgd2l0aCBkZWZhdWx0IGV4Y2x1c2lv bnMgdG8gdGhlIGN1cnJlbnQgZXhjbHVzaW9ucyBzZXQuCi0gICAgICoKKyAgICAgKiBBZGRzIGRl ZmF1bHQgZXhjbHVzaW9ucyB0byB0aGUgY3VycmVudCBleGNsdXNpb25zIHNldC4KICAgICAgKi8K ICAgICB2b2lkIGFkZERlZmF1bHRFeGNsdWRlcygpOworICAgIAogICAgIC8qKgotICAgICAqIEdl dHMgdGhlIGJhc2VkaXIgdGhhdCBpcyB1c2VkIGZvciBzY2FubmluZy4gVGhpcyBpcyB0aGUgZGly ZWN0b3J5IHRoYXQKLSAgICAgKiBpcyBzY2FubmVkIHJlY3Vyc2l2ZWx5LgorICAgICAqIFJldHVy bnMgdGhlIGJhc2UgZGlyZWN0b3J5IHRvIGJlIHNjYW5uZWQuIAorICAgICAqIFRoaXMgaXMgdGhl IGRpcmVjdG9yeSB3aGljaCBpcyBzY2FubmVkIHJlY3Vyc2l2ZWx5LgogICAgICAqCi0gICAgICog QHJldHVybiB0aGUgYmFzZWRpciB0aGF0IGlzIHVzZWQgZm9yIHNjYW5uaW5nCisgICAgICogQHJl dHVybiB0aGUgYmFzZSBkaXJlY3RvcnkgdG8gYmUgc2Nhbm5lZAogICAgICAqLwogICAgIEZpbGUg Z2V0QmFzZWRpcigpOworICAgIAogICAgIC8qKgotICAgICAqIEdldCB0aGUgbmFtZXMgb2YgdGhl IGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlIGluY2x1ZGUKLSAg ICAgKiBwYXR0ZXJucywgYW4gbWF0Y2hlZCBhbHNvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZXhjbHVk ZSBwYXR0ZXJucy4KLSAgICAgKiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlZGly LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGRpcmVjdG9yaWVzCisg ICAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGRpcmVjdG9yaWVzIHdoaWNoIG1hdGNoZWQg YXQgbGVhc3Qgb25lIG9mIHRoZSAKKyAgICAgKiBpbmNsdWRlIHBhdHRlcm5zIGFuZCBhdCBsZWFz dCBvbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCisgICAgICogVGhlIG5hbWVzIGFyZSByZWxh dGl2ZSB0byB0aGUgYmFzZSBkaXJlY3RvcnkuCisgICAgICogCisgICAgICogQHJldHVybiB0aGUg bmFtZXMgb2YgdGhlIGRpcmVjdG9yaWVzIHdoaWNoIG1hdGNoZWQgYXQgbGVhc3Qgb25lIG9mIHRo ZSAKKyAgICAgKiBpbmNsdWRlIHBhdHRlcm5zIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlIGV4Y2x1 ZGUgcGF0dGVybnMuCiAgICAgICovCiAgICAgU3RyaW5nW10gZ2V0RXhjbHVkZWREaXJlY3Rvcmll cygpOworICAgIAogICAgIC8qKgotICAgICAqIEdldCB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzIHRo YXQgbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlIGluY2x1ZGUKLSAgICAgKiBwYXR0ZXJucywg YW4gbWF0Y2hlZCBhbHNvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZXhjbHVkZSBwYXR0ZXJucy4KLSAg ICAgKiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlZGlyLgotICAgICAqCi0gICAg ICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzCi0gICAgICovCisgICAgICogUmV0dXJu cyB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzIHdoaWNoIG1hdGNoZWQgYXQgbGVhc3Qgb25lIG9mIHRo ZSAKKyAgICAgKiBpbmNsdWRlIHBhdHRlcm5zIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlIGV4Y2x1 ZGUgcGF0dGVybnMuCisgICAgICogVGhlIG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZSBk aXJlY3RvcnkuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMg d2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlIAorICAgICAqICAgICAgICAgaW5jbHVk ZSBwYXR0ZXJucyBhbmQgYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBleGNsdWRlIHBhdHRlcm5zLgor ICAgICAqIAorICAgICAqLyAgICAKICAgICBTdHJpbmdbXSBnZXRFeGNsdWRlZEZpbGVzKCk7Cisg ICAgCiAgICAgLyoqCi0gICAgICogR2V0IHRoZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMgdGhh dCBtYXRjaGVkIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5jbHVkZQotICAgICAqIHBhdHRlcm5zLCBh biBtYXRjaGVkIG5vbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCi0gICAgICogVGhlIG5hbWVz IGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZWRpci4KKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBv ZiB0aGUgZGlyZWN0b3JpZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlIAorICAg ICAqIGluY2x1ZGUgcGF0dGVybnMgYW5kIG5vbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCisg ICAgICogVGhlIG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZSBkaXJlY3RvcnkuCiAgICAg ICoKLSAgICAgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMKKyAgICAgKiBA cmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZGlyZWN0b3JpZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFz dCBvbmUgb2YgdGhlCisgICAgICogaW5jbHVkZSBwYXR0ZXJucyBhbmQgbm9uZSBvZiB0aGUgZXhj bHVkZSBwYXR0ZXJucy4KICAgICAgKi8KICAgICBTdHJpbmdbXSBnZXRJbmNsdWRlZERpcmVjdG9y aWVzKCk7CisgICAgCiAgICAgLyoqCi0gICAgICogR2V0IHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMg dGhhdCBtYXRjaGVkIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5jbHVkZQotICAgICAqIHBhdHRlcm5z LCBhbiBtYXRjaGVkIG5vbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCi0gICAgICogVGhlIG5h bWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZWRpci4KKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1l cyBvZiB0aGUgZmlsZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlIAorICAgICAq IGluY2x1ZGUgcGF0dGVybnMgYW5kIG5vbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCisgICAg ICogVGhlIG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZSBkaXJlY3RvcnkuCiAgICAgICoK LSAgICAgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMKKyAgICAgKiBAcmV0dXJuIHRo ZSBuYW1lcyBvZiB0aGUgZmlsZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlCisg ICAgICogICAgICAgICBpbmNsdWRlIHBhdHRlcm5zIGFuZCBub25lIG9mIHRoZSBleGNsdWRlIHBh dHRlcm5zLgogICAgICAqLwogICAgIFN0cmluZ1tdIGdldEluY2x1ZGVkRmlsZXMoKTsKKyAgICAK ICAgICAvKioKLSAgICAgKiBHZXQgdGhlIG5hbWVzIG9mIHRoZSBkaXJlY3RvcmllcyB0aGF0IG1h dGNoZWQgYXQgbm9uZSBvZiB0aGUgaW5jbHVkZQotICAgICAqIHBhdHRlcm5zLgotICAgICAqIFRo ZSBuYW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJhc2VkaXIuCisgICAgICogUmV0dXJucyB0aGUg bmFtZXMgb2YgdGhlIGRpcmVjdG9yaWVzIHdoaWNoIG1hdGNoZWQgbm9uZSBvZiB0aGUgaW5jbHVk ZQorICAgICAqIHBhdHRlcm5zLiBUaGUgbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIGRp cmVjdG9yeS4KICAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBkaXJlY3Rv cmllcwotICAgICAqLworICAgICAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBkaXJlY3Rvcmll cyB3aGljaCBtYXRjaGVkIG5vbmUgb2YgdGhlIGluY2x1ZGUKKyAgICAgKiBwYXR0ZXJucy4KKyAg ICAgKi8gICAgCiAgICAgU3RyaW5nW10gZ2V0Tm90SW5jbHVkZWREaXJlY3RvcmllcygpOworICAg IAogICAgIC8qKgotICAgICAqIEdldCB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzIHRoYXQgbWF0Y2hl ZCBhdCBub25lIG9mIHRoZSBpbmNsdWRlIHBhdHRlcm5zLgotICAgICAqIFRoZSBuYW1lcyBhcmUg cmVsYXRpdmUgdG8gdGhlIGJhc2VkaXIuCisgICAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhl IGZpbGVzIHdoaWNoIG1hdGNoZWQgbm9uZSBvZiB0aGUgaW5jbHVkZSAKKyAgICAgKiBwYXR0ZXJu cy4gVGhlIG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZSBkaXJlY3RvcnkuCiAgICAgICoK LSAgICAgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMKKyAgICAgKiBAcmV0dXJuIHRo ZSBuYW1lcyBvZiB0aGUgZmlsZXMgd2hpY2ggbWF0Y2hlZCBub25lIG9mIHRoZSBpbmNsdWRlIAor ICAgICAqICAgICAgICAgcGF0dGVybnMuCiAgICAgICovCiAgICAgU3RyaW5nW10gZ2V0Tm90SW5j bHVkZWRGaWxlcygpOworICAgIAogICAgIC8qKgotICAgICAqIFNjYW5zIHRoZSBiYXNlIGRpcmVj dG9yeSBmb3IgZmlsZXMgdGhhdCBtYXRjaCBhdCBsZWFzdCBvbmUgaW5jbHVkZQotICAgICAqIHBh dHRlcm4sIGFuZCBkb24ndCBtYXRjaCBhbnkgZXhjbHVkZSBwYXR0ZXJucy4KKyAgICAgKiBTY2Fu cyB0aGUgYmFzZSBkaXJlY3RvcnkgZm9yIGZpbGVzIHdoaWNoIG1hdGNoIGF0IGxlYXN0IG9uZSBp bmNsdWRlCisgICAgICogcGF0dGVybiBhbmQgZG9uJ3QgbWF0Y2ggYW55IGV4Y2x1ZGUgcGF0dGVy bnMuCiAgICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB3aGVu IGJhc2VkaXIgd2FzIHNldCBpbmNvcnJlY2x5CisgICAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsU3Rh dGVFeGNlcHRpb24gaWYgdGhlIGJhc2UgZGlyZWN0b3J5IHdhcyBzZXQgCisgICAgICogICAgICAg ICAgICBpbmNvcnJlY3RseSAoaS5lLiBpZiBpdCBpcyA8Y29kZT5udWxsPC9jb2RlPiwgZG9lc24n dCBleGlzdCwKKyAgICAgKiAgICAgICAgICAgIG9yIGlzbid0IGEgZGlyZWN0b3J5KS4KICAgICAg Ki8KICAgICB2b2lkIHNjYW4oKTsKKyAgICAKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBiYXNl ZGlyIGZvciBzY2FubmluZy4gVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgaXMgc2Nhbm5lZAot ICAgICAqIHJlY3Vyc2l2ZWx5LiAKKyAgICAgKiBTZXRzIHRoZSBiYXNlIGRpcmVjdG9yeSB0byBi ZSBzY2FubmVkLiBUaGlzIGlzIHRoZSBkaXJlY3Rvcnkgd2hpY2ggaXMKKyAgICAgKiBzY2FubmVk IHJlY3Vyc2l2ZWx5LiBBbGwgJy8nIGFuZCAnXCcgY2hhcmFjdGVycyBzaG91bGQgYmUgcmVwbGFj ZWQgYnkKKyAgICAgKiA8Y29kZT5GaWxlLnNlcGFyYXRvckNoYXI8L2NvZGU+LCBzbyB0aGUgc2Vw YXJhdG9yIHVzZWQgbmVlZCBub3QgbWF0Y2gKKyAgICAgKiA8Y29kZT5GaWxlLnNlcGFyYXRvckNo YXI8L2NvZGU+LgogICAgICAqCi0gICAgICogQHBhcmFtIGJhc2VkaXIgdGhlIChub24tbnVsbCkg YmFzZWRpciBmb3Igc2Nhbm5pbmcKKyAgICAgKiBAcGFyYW0gYmFzZWRpciBUaGUgYmFzZSBkaXJl Y3RvcnkgdG8gc2Nhbi4gCisgICAgICogICAgICAgICAgICAgICAgTXVzdCBub3QgYmUgPGNvZGU+ bnVsbDwvY29kZT4uCiAgICAgICovCiAgICAgdm9pZCBzZXRCYXNlZGlyKFN0cmluZyBiYXNlZGly KTsKKyAgICAKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBiYXNlZGlyIGZvciBzY2FubmluZy4g VGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgaXMgc2Nhbm5lZAotICAgICAqIHJlY3Vyc2l2ZWx5 LgorICAgICAqIFNldHMgdGhlIGJhc2UgZGlyZWN0b3J5IHRvIGJlIHNjYW5uZWQuIFRoaXMgaXMg dGhlIGRpcmVjdG9yeSB3aGljaCBpcyAKKyAgICAgKiBzY2FubmVkIHJlY3Vyc2l2ZWx5LgogICAg ICAqCi0gICAgICogQHBhcmFtIGJhc2VkaXIgdGhlIGJhc2VkaXIgZm9yIHNjYW5uaW5nCisgICAg ICogQHBhcmFtIGJhc2VkaXIgVGhlIGJhc2UgZGlyZWN0b3J5IGZvciBzY2FubmluZy4gCisgICAg ICogICAgICAgICAgICAgICAgU2hvdWxkIG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KICAgICAg Ki8KICAgICB2b2lkIHNldEJhc2VkaXIoRmlsZSBiYXNlZGlyKTsKKyAgICAKICAgICAvKioKLSAg ICAgKiBTZXRzIHRoZSBzZXQgb2YgZXhjbHVkZSBwYXR0ZXJucyB0byB1c2UuCisgICAgICogU2V0 cyB0aGUgbGlzdCBvZiBleGNsdWRlIHBhdHRlcm5zIHRvIHVzZS4KICAgICAgKgotICAgICAqIEBw YXJhbSBleGNsdWRlcyBsaXN0IG9mIGV4Y2x1ZGUgcGF0dGVybnMKLSAgICAgKi8KKyAgICAgKiBA cGFyYW0gZXhjbHVkZXMgQSBsaXN0IG9mIGV4Y2x1ZGUgcGF0dGVybnMuIAorICAgICAqICAgICAg ICAgICAgICAgICBNYXkgYmUgPGNvZGU+bnVsbDwvY29kZT4sIGluZGljYXRpbmcgdGhhdCBubyBm aWxlcyAKKyAgICAgKiAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGV4Y2x1ZGVkLiBJZiBhIG5v bi08Y29kZT5udWxsPC9jb2RlPiBsaXN0IGlzIAorICAgICAqICAgICAgICAgICAgICAgICBnaXZl biwgYWxsIGVsZW1lbnRzIG11c3QgYmUgbm9uLTxjb2RlPm51bGw8L2NvZGU+LgorICAgICAqLyAg ICAKICAgICB2b2lkIHNldEV4Y2x1ZGVzKFN0cmluZ1tdIGV4Y2x1ZGVzKTsKKyAgICAKICAgICAv KioKLSAgICAgKiBTZXRzIHRoZSBzZXQgb2YgaW5jbHVkZSBwYXR0ZXJucyB0byB1c2UuCisgICAg ICogU2V0cyB0aGUgbGlzdCBvZiBpbmNsdWRlIHBhdHRlcm5zIHRvIHVzZS4KICAgICAgKgotICAg ICAqIEBwYXJhbSBpbmNsdWRlcyBsaXN0IG9mIGluY2x1ZGUgcGF0dGVybnMKKyAgICAgKiBAcGFy YW0gaW5jbHVkZXMgQSBsaXN0IG9mIGluY2x1ZGUgcGF0dGVybnMuCisgICAgICogICAgICAgICAg ICAgICAgIE1heSBiZSA8Y29kZT5udWxsPC9jb2RlPiwgaW5kaWNhdGluZyB0aGF0IGFsbCBmaWxl cyAKKyAgICAgKiAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGluY2x1ZGVkLiBJZiBhIG5vbi08 Y29kZT5udWxsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICBsaXN0IGlzIGdpdmVuLCBh bGwgZWxlbWVudHMgbXVzdCBiZSAKKyAgICAgKiBub24tPGNvZGU+bnVsbDwvY29kZT4uCiAgICAg ICovCiAgICAgdm9pZCBzZXRJbmNsdWRlcyhTdHJpbmdbXSBpbmNsdWRlcyk7CiAKICAgICAvKioK LSAgICAgKiBTZXRzIHRoZSBjYXNlIHNlbnNpdGl2aXR5IG9mIHRoZSBmaWxlIHN5c3RlbQorICAg ICAqIFNldHMgd2hldGhlciBvciBub3QgdGhlIGZpbGUgc3lzdGVtIHNob3VsZCBiZSByZWdhcmRl ZCBhcyBjYXNlIHNlbnNpdGl2ZS4KICAgICAgKgotICAgICAqIEBwYXJhbSBzcGVjaWZpZXMgaWYg dGhlIGZpbGVzeXN0ZW0gaXMgY2FzZSBzZW5zaXRpdmUKKyAgICAgKiBAcGFyYW0gaXNDYXNlU2Vu c2l0aXZlIHdoZXRoZXIgb3Igbm90IHRoZSBmaWxlIHN5c3RlbSBzaG91bGQgYmUgCisgICAgICog ICAgICAgICAgICAgICAgICAgICAgICByZWdhcmRlZCBhcyBhIGNhc2Ugc2Vuc2l0aXZlIG9uZQog ICAgICAqLwogICAgIHZvaWQgc2V0Q2FzZVNlbnNpdGl2ZShib29sZWFuIGlzQ2FzZVNlbnNpdGl2 ZSk7CiB9Cg== ------_=_NextPart_001_01C1B886.B1DF6C64 Content-Type: text/plain; charset=us-ascii -- To unsubscribe, e-mail: For additional commands, e-mail: ------_=_NextPart_001_01C1B886.B1DF6C64--