<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>229</bug_id>
          
          <creation_ts>2006-06-21 08:41:14 +0200</creation_ts>
          <short_desc>GLJFrame Utility Class</short_desc>
          <delta_ts>2015-09-27 03:15:03 +0200</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>all</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>FEATURE</cf_type>
          <cf_scm_refs></cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>245</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:49:04 +0100</bug_when>
    <thetext>


---- Reported by eteq 2006-06-21 08:41:15 ----

This is a Swing JFrame with a GLCanvas attached, with a variety of utility
methods for tasks like switching to fullscreen mode, changing GLCapabilities,
and input events.



---- Additional Comments From eteq 2006-06-21 08:42:34 ----

Created an attachment
The GLJFrame source file (in package com.sun.opengl.util)




---- Additional Comments From eteq 2006-06-22 20:59:31 ----

Created an attachment
Slightly updated version to support context sharing and with NetBeans comments removed




---- Additional Comments From kbr 2006-11-14 06:46:17 ----

As this has been incorporated into the joglutils project this bug is being closed.




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:49 EDT  ---

This bug was previously known as _bug_ 229 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=229
Imported an attachment (id=82)
Imported an attachment (id=83)

The original submitter of attachment 82 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 83 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>82</attachid>
            <date>2006-06-21 08:42:00 +0200</date>
            <delta_ts>2006-06-21 08:42:00 +0200</delta_ts>
            <desc>The GLJFrame source file (in package com.sun.opengl.util)</desc>
            <filename>GLJFrame.java</filename>
            <type>application/msword</type>
            <size>21552</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">LyoNCiAqIENvcHlyaWdodCAoYykgMjAwNiBFcmlrIFRvbGxlcnVkIChlcmlrLnRvbGxlcnVkQGdt
YWlsLmNvbSkgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqIA0KICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlDQogKiBtZXQ6DQogKiAgIA0KICogLSBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqICAgIA0K
ICogLSBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0DQogKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICogICANCiAqIFRo
ZSBuYW1lcyBvZiBFcmlrIFRvbGxlcnVkLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIG9yIHRoZSBu
YW1lcyBvZg0KICogY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICogICAgDQogKiBUaGlzIHNvZnR3YXJl
IGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4gQUxM
DQogKiBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBX
QVJSQU5USUVTLA0KICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQQ0KICogUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZS
SU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIEVSSUsgVE9MTEVSVUQsDQogKiBTVU4gTUlD
Uk9TWVNURU1TLCBJTkMuICgiU1VOIiksIEFORCBTVU4nUyBMSUNFTlNPUlMgU0hBTEwgTk9UIEJF
IExJQUJMRSBGT1INCiAqIEFOWSBEQU1BR0VTIFNVRkZFUkVEIEJZIExJQ0VOU0VFIEFTIEEgUkVT
VUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1INCiAqIERJU1RSSUJVVElORyBUSElTIFNPRlRXQVJF
IE9SIElUUyBERVJJVkFUSVZFUy4gSU4gTk8gRVZFTlQgV0lMTCBCRU4NCiAqIENIQVBQRUxMLCBT
VU4sIE9SIFNVTidTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUIFJFVkVOVUUsIFBS
T0ZJVCANCiAqIE9SIERBVEEsIE9SIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBDT05T
RVFVRU5USUFMLCBJTkNJREVOVEFMIE9SDQogKiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENB
VVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwNCiAqIEFSSVNJ
TkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEJFTg0KICogQ0hBUFBFTEwgT1IgU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCiAqICAgDQogKiBZb3UgYWNrbm93bGVkZ2UgdGhh
dCB0aGlzIHNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCBvciBpbnRlbmRlZCBmb3IgdXNlDQogKiBp
biB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBh
bnkgbnVjbGVhcg0KICogZmFjaWxpdHkuDQogKi8NCg0KcGFja2FnZSBjb20uc3VuLm9wZW5nbC51
dGlsOw0KDQppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLio7DQppbXBvcnQgamF2YXguc3dpbmcu
KjsNCmltcG9ydCBqYXZhLmF3dC4qOw0KaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7DQoNCi8qKg0K
ICogQSBKRnJhbWUgY29udGFpbmluZyBhIGhlYXZ5d2VpZ2h0IHtAbGluayBHTENhbnZhc30gd2l0
aCBhIHNpbmdsZSBhdHRhY2hlZCB7QGxpbmsgR0xFdmVudExpc3RlbmVyfS4gDQogKiBOb3RlOiB0
aGUgZGVmYXVsdCBjbG9zZSBvcGVyYXRpb24gaGFzIGJlZW4gY2hhbmdlZCB0byBleGl0IHJhdGhl
ciB0aGFuIGRpc3Bvc2UuDQogKiBAYXV0aG9yIEVyaWsgSi4gVG9sbGVydWQNCiAqLw0KcHVibGlj
IGNsYXNzIEdMSkZyYW1lIGV4dGVuZHMgSkZyYW1lIHsNCiAgICBwcml2YXRlIEdMRXZlbnRMaXN0
ZW5lciBsaXN0ZW5lcjsNCiAgICBwcml2YXRlIEdMQ2FwYWJpbGl0aWVzIGNhcHM7DQogICAgcHJp
dmF0ZSBjb20uc3VuLm9wZW5nbC51dGlsLkFuaW1hdG9yIGFuaW1hdG9yOw0KICAgIA0KICAgIC8q
Kg0KICAgICAqIENyZWF0ZXMgbmV3IGZvcm0gR0xKRnJhbWUNCiAgICAgKiBAcGFyYW0gbGlzdGVu
ZXIgdGhlIEdMRXZlbnRMaXN0ZW5lciB0byBhdHRhY2ggdG8gdGhlIEdMQ2FudmFzDQogICAgICov
DQogICAgcHVibGljIEdMSkZyYW1lKEdMRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgew0KICAgICAg
ICB0aGlzKCJPcGVuR0wgV2luZG93IiwgbGlzdGVuZXIpOw0KICAgIH0NCiAgICAvKioNCiAgICAg
KiBDcmVhdGVzIG5ldyBmb3JtIEdMSkZyYW1lDQogICAgICogQHBhcmFtIHRpdGxlIHRoZSB0aXRs
ZSBmb3IgdGhlIHdpbmRvdw0KICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgR0xFdmVudExpc3Rl
bmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52YXMNCiAgICAgKi8NCiAgICBwdWJsaWMgR0xKRnJh
bWUoU3RyaW5nIHRpdGxlLCBHTEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsNCiAgICAgICAgc3Vw
ZXIodGl0bGUpOw0KICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7DQogICAgICAgIHRo
aXMuY2FwcyA9IG5ldyBHTENhcGFiaWxpdGllcygpOw0KICAgICAgICBpbml0Q29tcG9uZW50cygp
Ow0KICAgICAgICAoKEdMQ2FudmFzKW1haW5DYW52YXMpLmFkZEdMRXZlbnRMaXN0ZW5lcihsaXN0
ZW5lcik7DQogICAgICAgIGFuaW1hdG9yID0gbnVsbDsNCiAgICB9DQogICAgLyoqDQogICAgICog
Q3JlYXRlcyBuZXcgZm9ybSBHTEpGcmFtZQ0KICAgICAqIEBwYXJhbSB0aXRsZSB0aXRsZSBmb3Ig
dGhlIHdpbmRvdw0KICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgR0xFdmVudExpc3RlbmVyIHRv
IGF0dGFjaCB0byB0aGUgR0xDYW52YXMNCiAgICAgKiBAcGFyYW0gY2FwYWJpbGl0aWVzIHRoZSBH
TENhcGFiaWxpdGllcyB0byByZXF1ZXN0IGZvciB0aGUgR0xDYW52YXMNCiAgICAgKi8NCiAgICBw
dWJsaWMgR0xKRnJhbWUoU3RyaW5nIHRpdGxlLCBHTEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIEdM
Q2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcykgew0KICAgICAgICBzdXBlcih0aXRsZSk7DQogICAg
ICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsNCiAgICAgICAgdGhpcy5jYXBzID0gKEdMQ2Fw
YWJpbGl0aWVzKWNhcGFiaWxpdGllcy5jbG9uZSgpOw0KICAgICAgICBpbml0Q29tcG9uZW50cygp
Ow0KICAgICAgICAoKEdMQ2FudmFzKW1haW5DYW52YXMpLmFkZEdMRXZlbnRMaXN0ZW5lcihsaXN0
ZW5lcik7DQogICAgICAgIGFuaW1hdG9yID0gbnVsbDsNCiAgICB9DQogICAgLyoqDQogICAgICog
Q3JlYXRlcyBuZXcgZm9ybSBHTEpGcmFtZQ0KICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgR0xF
dmVudExpc3RlbmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52YXMNCiAgICAgKiBAcGFyYW0gY2Fw
YWJpbGl0aWVzIHRoZSBHTENhcGFiaWxpdGllcyB0byByZXF1ZXN0IGZvciB0aGUgR0xDYW52YXMN
CiAgICAgKi8NCiAgICBwdWJsaWMgR0xKRnJhbWUoR0xFdmVudExpc3RlbmVyIGxpc3RlbmVyLCBH
TENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMpIHsNCiAgICAgICAgdGhpcygiT3BlbkdMIFdpbmRv
dyIsIGxpc3RlbmVyLCBjYXBhYmlsaXRpZXMpOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBDcmVh
dGVzIG5ldyBmb3JtIEdMSkZyYW1lDQogICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBHTEV2ZW50
TGlzdGVuZXIgdG8gYXR0YWNoIHRvIHRoZSBHTENhbnZhcw0KICAgICAqIEBwYXJhbSB3aWR0aCB0
aGUgaG9yaXpvbnRhbCBzaXplIGZvciB0aGUgR0xDYW52YXMgaW4gcGl4ZWxzDQogICAgICogQHBh
cmFtIGhlaWdodCB0aGUgdmVydGljYWwgc2l6ZSBmb3IgdGhlIEdMQ2FudmFzIGluIHBpeGVscw0K
ICAgICAqLw0KICAgIHB1YmxpYyBHTEpGcmFtZShHTEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkgew0KICAgICAgICB0aGlzKCJPcGVuR0wgV2luZG93IixsaXN0
ZW5lcik7DQogICAgICAgIG1haW5DYW52YXMuc2V0U2l6ZSh3aWR0aCxoZWlnaHQpOw0KICAgICAg
ICB0aGlzLnBhY2soKTsNCiAgICB9DQogICAgLyoqDQogICAgICogQ3JlYXRlcyBuZXcgZm9ybSBH
TEpGcmFtZQ0KICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgZm9yIHRoZSB3aW5kb3cNCiAg
ICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIEdMRXZlbnRMaXN0ZW5lciB0byBhdHRhY2ggdG8gdGhl
IEdMQ2FudmFzDQogICAgICogQHBhcmFtIHdpZHRoIHRoZSBob3Jpem9udGFsIHNpemUgZm9yIHRo
ZSBHTENhbnZhcyBpbiBwaXhlbHMNCiAgICAgKiBAcGFyYW0gaGVpZ2h0IHRoZSB2ZXJ0aWNhbCBz
aXplIGZvciB0aGUgR0xDYW52YXMgaW4gcGl4ZWxzDQogICAgICovDQogICAgcHVibGljIEdMSkZy
YW1lKFN0cmluZyB0aXRsZSwgR0xFdmVudExpc3RlbmVyIGxpc3RlbmVyLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpIHsNCiAgICAgICAgdGhpcyh0aXRsZSxsaXN0ZW5lcik7DQogICAgICAgIG1haW5D
YW52YXMuc2V0U2l6ZSh3aWR0aCxoZWlnaHQpOw0KICAgICAgICB0aGlzLnBhY2soKTsNCiAgICB9
DQogICAgLyoqDQogICAgICogQ3JlYXRlcyBuZXcgZm9ybSBHTEpGcmFtZQ0KICAgICAqIEBwYXJh
bSBsaXN0ZW5lciB0aGUgR0xFdmVudExpc3RlbmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52YXMN
CiAgICAgKiBAcGFyYW0gZnVsbHNjcmVlbiBpZiB0cnVlLCB0aGlzIHdpbmRvdyBpcyBnZW5lcmF0
ZWQgaW4gZnVsbHNjcmVlbiBtb2RlDQogICAgICovDQogICAgcHVibGljIEdMSkZyYW1lKEdMRXZl
bnRMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVhbiBmdWxsc2NyZWVuKSB7DQogICAgICAgIHRoaXMo
Ik9wZW5HTCBXaW5kb3ciLGxpc3RlbmVyKTsNCiAgICAgICAgdGhpcy5zZXRGdWxsc2NyZWVuKGZ1
bGxzY3JlZW4pOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBDcmVhdGVzIG5ldyBmb3JtIEdMSkZy
YW1lDQogICAgICogQHBhcmFtIHRpdGxlIHRoZSB0aXRsZSBmb3IgdGhlIHdpbmRvdw0KICAgICAq
IEBwYXJhbSBsaXN0ZW5lciB0aGUgR0xFdmVudExpc3RlbmVyIHRvIGF0dGFjaCB0byB0aGUgR0xD
YW52YXMNCiAgICAgKiBAcGFyYW0gZnVsbHNjcmVlbiBpZiB0cnVlLCB0aGlzIHdpbmRvdyBpcyBn
ZW5lcmF0ZWQgaW4gZnVsbHNjcmVlbiBtb2RlDQogICAgICovDQogICAgcHVibGljIEdMSkZyYW1l
KFN0cmluZyB0aXRsZSwgR0xFdmVudExpc3RlbmVyIGxpc3RlbmVyLCBib29sZWFuIGZ1bGxzY3Jl
ZW4pIHsNCiAgICAgICAgdGhpcyh0aXRsZSxsaXN0ZW5lcik7DQogICAgICAgIHRoaXMuc2V0RnVs
bHNjcmVlbihmdWxsc2NyZWVuKTsNCiAgICB9DQogICAgDQogICAgLyoqIFRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgY29uc3RydWN0b3IgdG8NCiAgICAgKiBpbml0aWFsaXpl
IHRoZSBmb3JtLg0KICAgICAqIFdBUk5JTkc6IERvIE5PVCBtb2RpZnkgdGhpcyBjb2RlLiBUaGUg
Y29udGVudCBvZiB0aGlzIG1ldGhvZCBpcw0KICAgICAqIGFsd2F5cyByZWdlbmVyYXRlZCBieSB0
aGUgRm9ybSBFZGl0b3IuDQogICAgICovDQogICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0
ZT0iY29sbGFwc2VkIiBkZXNjPSIgR2VuZXJhdGVkIENvZGUgIj4gICAgICAgICAgICAgICAgICAg
ICAgICAgIA0KICAgIHByaXZhdGUgdm9pZCBpbml0Q29tcG9uZW50cygpIHsNCiAgICAgICAgbWFp
bkNhbnZhcyA9IG5ldyBHTENhbnZhcyhjYXBzKTsNCg0KICAgICAgICBzZXREZWZhdWx0Q2xvc2VP
cGVyYXRpb24oamF2YXguc3dpbmcuV2luZG93Q29uc3RhbnRzLkVYSVRfT05fQ0xPU0UpOw0KICAg
ICAgICBhZGRDb21wb25lbnRMaXN0ZW5lcihuZXcgamF2YS5hd3QuZXZlbnQuQ29tcG9uZW50QWRh
cHRlcigpIHsNCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbXBvbmVudFJlc2l6ZWQoamF2YS5h
d3QuZXZlbnQuQ29tcG9uZW50RXZlbnQgZXZ0KSB7DQogICAgICAgICAgICAgICAgZm9ybUNvbXBv
bmVudFJlc2l6ZWQoZXZ0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAg
bWFpbkNhbnZhcy5zZXRTaXplKDUwMCw1MDApOw0KICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFk
ZChtYWluQ2FudmFzLCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQuQ0VOVEVSKTsNCg0KICAgICAgICBw
YWNrKCk7DQogICAgfS8vIDwvZWRpdG9yLWZvbGQ+ICAgICAgICAgICAgICAgICAgICAgICAgDQog
ICAgDQogICAgcHJpdmF0ZSB2b2lkIGZvcm1Db21wb25lbnRSZXNpemVkKGphdmEuYXd0LmV2ZW50
LkNvbXBvbmVudEV2ZW50IGV2dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgDQogICAgICAgIHRoaXMubWFpbkNhbnZhcy5zZXRTaXplKHRoaXMuZ2V0Um9vdFBhbmUoKS5n
ZXRTaXplKCkpOw0KICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQog
ICAgDQogICAgLy8gVmFyaWFibGVzIGRlY2xhcmF0aW9uIC0gZG8gbm90IG1vZGlmeSAgICAgICAg
ICAgICAgICAgICAgIA0KICAgIHByaXZhdGUgamF2YS5hd3QuQ2FudmFzIG1haW5DYW52YXM7DQog
ICAgLy8gRW5kIG9mIHZhcmlhYmxlcyBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICANCiAg
ICAvKioNCiAgICAgKiBTZXRzIHRoZSBldmVudCBsaXN0ZW5lciBhdHRhY2hlZCB0byB0aGUgR0xj
YW52YXMuICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3QgcmVwYWludCB0aGlzIGNvbXBv
bmVudCwgc28gaXQgd2lsbCBub3QgaW1tZWRpYXRlbHkgdXBkYXRlLg0KICAgICAqIEBwYXJhbSBs
aXN0ZW5lciB0aGUgR0xFdmVudExpc3RlbmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52YXMNCiAg
ICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRHTEV2ZW50TGlzdGVuZXIoR0xFdmVudExpc3RlbmVy
IGxpc3RlbmVyKSB7DQogICAgICAgICgoR0xDYW52YXMpdGhpcy5tYWluQ2FudmFzKS5yZW1vdmVH
TEV2ZW50TGlzdGVuZXIodGhpcy5saXN0ZW5lcik7DQogICAgICAgIHRoaXMubGlzdGVuZXIgPSBs
aXN0ZW5lcjsNCiAgICAgICAgKChHTENhbnZhcyl0aGlzLm1haW5DYW52YXMpLmFkZEdMRXZlbnRM
aXN0ZW5lcihsaXN0ZW5lcik7DQogICAgICAgIA0KICAgIH0NCiAgICAvKioNCiAgICAgKiBSZXRy
aWV2ZXMgdGhlIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgR0xKRnJhbWUNCiAgICAgKiBAcmV0dXJu
IHRoZSBHTEV2ZW50TGlzdGVuZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBHTENhbnZhcw0KICAgICAq
Lw0KICAgIHB1YmxpYyBHTEV2ZW50TGlzdGVuZXIgZ2V0R0xFdmVudExpc3RlbmVyKCkgew0KICAg
ICAgICByZXR1cm4gdGhpcy5saXN0ZW5lcjsNCiAgICB9DQogICAgLyoqDQogICAgICogU2V0cyB0
aGUgZnVsbHNjcmVlbiBzdGF0dXMgb2YgdGhpcyB3aW5kb3cuICBJZiBmdWxsIHNjcmVlbiBleGNs
dXNpdmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLCBmdWxsc2NyZWVuIGlzIGVtdWxhdGVkIGJ5IHN3
aW5nIChzZWUgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL3R1dG9yaWFs
L2V4dHJhL2Z1bGxzY3JlZW4vZXhjbHVzaXZlbW9kZS5odG1sIj4gRnVsbC1TY3JlZW4gRXhjbHVz
aXZlIE1vZGUgVHV0b3JpYWwgPC9hPikuIElmIGZ1bGxzY3JlZW4gaXMgdG8gYmUgaW52b2tlZCB1
bmRlciBXaW5kb3dzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBWTSBiZSBydW4gd2l0aCAt
RHN1bi5qYXZhMmQubm9kZHJhdz10cnVlDQogICAgICogQHBhcmFtIGZzIHRoZSBtb2RlIHRvIHNl
dCB0aGlzIHdpbmRvdyB0byAtIHRydWUgZm9yIGZ1bGwgc2NyZWVuLCBmYWxzZSBmb3Igd2luZG93
ZWQgbW9kZQ0KICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBmdWxsIHNjcmVlbiBleGNsdXNpdmUgbW9k
ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIGlmIG5vdC4NCiAgICAgKi8NCiAgICBwdWJsaWMgYm9vbGVh
biBzZXRGdWxsc2NyZWVuKGJvb2xlYW4gZnMpIHsNCiAgICAgICAgLy9UT0RPOiBmaXggdG8gbWFr
ZSBkb3VibGUtYnVmZmVyZWQgYW5kIHJldHVybiB0byBub24tZnMgbW9kZSBwcm9wZXJseSAodXNl
IGluaXRDb21wb25lbnRzKCk/KQ0KICAgICAgICBHcmFwaGljc0RldmljZSBkZXYgPSBHcmFwaGlj
c0Vudmlyb25tZW50LmdldExvY2FsR3JhcGhpY3NFbnZpcm9ubWVudCgpLmdldERlZmF1bHRTY3Jl
ZW5EZXZpY2UoKTsNCiAgICAgICAgYm9vbGVhbiB2aXNpYmxlID0gdGhpcy5pc1Zpc2libGUoKTsN
CiAgICAgICAgaWYgKGZzKSB7DQogICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsNCiAgICAgICAg
ICAgIHRoaXMuc2V0VW5kZWNvcmF0ZWQodHJ1ZSk7DQogICAgICAgICAgICB0aGlzLnNldFJlc2l6
YWJsZShmYWxzZSk7DQogICAgICAgICAgICB0cnl7DQogICAgICAgICAgICAgICAgZGV2LnNldEZ1
bGxTY3JlZW5XaW5kb3codGhpcyk7DQogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkg
ew0KICAgICAgICAgICAgICAgIGRldi5zZXRGdWxsU2NyZWVuV2luZG93KG51bGwpOw0KICAgICAg
ICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7DQogICAgICAgICAgICAgICAgSk9wdGlvblBh
bmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywiQ291bGQgbm90IGVudGVyIGZ1bGxzY3JlZW4gZXhj
bHVzaXZlIG1vZGUuIiwiRnVsbHNjcmVlbiBlcnJvciIsSk9wdGlvblBhbmUuRVJST1JfTUVTU0FH
RSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLnNldFZpc2libGUodmlzaWJsZSk7
DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsNCiAgICAgICAg
ICAgIHRoaXMuc2V0VW5kZWNvcmF0ZWQoZmFsc2UpOw0KICAgICAgICAgICAgdGhpcy5zZXRSZXNp
emFibGUodHJ1ZSk7DQogICAgICAgICAgICBkZXYuc2V0RnVsbFNjcmVlbldpbmRvdyhudWxsKTsN
CiAgICAgICAgICAgIHRoaXMuc2V0VmlzaWJsZSh2aXNpYmxlKTsNCiAgICAgICAgfQ0KICAgICAg
ICByZXR1cm4gZGV2LmlzRnVsbFNjcmVlblN1cHBvcnRlZCgpOw0KICAgIH0NCiAgICAvKioNCiAg
ICAgKiBSZXNpemVzIHRoaXMgR0xKRnJhbWUgdG8gbWF0Y2ggYSBHTENhbnZhcyBvZiB0aGUgc3Bl
Y2lmaWVkIHNpemUuICBUaGlzIGhhcyBubyBlZmZlY3QgaWYgZnVsbHNjcmVlbiBtb2RlIGlzIGFj
dGl2ZS4NCiAgICAgKiBAcGFyYW0gd2lkdGggdGhlIG5ldyBob3Jpem9udGFsIHNpemUgZm9yIHRo
ZSBHTENhbnZhc3MgaW4gcGl4ZWxzDQogICAgICogQHBhcmFtIGhlaWdodCB0aGUgbmV3IHZlcnRp
Y2FsIHNpemUgZm9yIHRoZSBHTENhbnZhc3MgaW4gcGl4ZWxzDQogICAgICovDQogICAgcHVibGlj
IHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsNCiAgICAgICAgDQogICAgICAg
IGphdmEuYXd0LkdyYXBoaWNzRGV2aWNlIGRldiA9IGphdmEuYXd0LkdyYXBoaWNzRW52aXJvbm1l
bnQuZ2V0TG9jYWxHcmFwaGljc0Vudmlyb25tZW50KCkuZ2V0RGVmYXVsdFNjcmVlbkRldmljZSgp
Ow0KICAgICAgICBpZiAoZGV2LmdldEZ1bGxTY3JlZW5XaW5kb3coKSAhPSB0aGlzKSB7DQogICAg
ICAgICAgICBtYWluQ2FudmFzLnNldFNpemUod2lkdGgsaGVpZ2h0KTsNCiAgICAgICAgICAgIHRo
aXMucGFjaygpOw0KICAgICAgICAgICAgbWFpbkNhbnZhcy5yZXBhaW50KCk7DQogICAgICAgIH0N
CiAgICB9DQogICAgLyoqDQogICAgICogUmVzaXplcyB0aGlzIEdMSkZyYW1lIHRvIG1hdGNoIGEg
R0xDYW52YXMgb2YgdGhlIHNwZWNpZmllZCBzaXplLiBUaGlzIGhhcyBubyBlZmZlY3QgaWYgZnVs
bHNjcmVlbiBtb2RlIGlzIGFjdGl2ZS4NCiAgICAgKiBAcGFyYW0gZCB0aGUgbmV3IHNpemUgZm9y
IHRoZSBHTENhbnZhc3MgaW4gcGl4ZWxzDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0U2l6
ZShqYXZhLmF3dC5EaW1lbnNpb24gZCkgew0KICAgICAgICBqYXZhLmF3dC5HcmFwaGljc0Rldmlj
ZSBkZXYgPSBqYXZhLmF3dC5HcmFwaGljc0Vudmlyb25tZW50LmdldExvY2FsR3JhcGhpY3NFbnZp
cm9ubWVudCgpLmdldERlZmF1bHRTY3JlZW5EZXZpY2UoKTsNCiAgICAgICAgaWYgKGRldi5nZXRG
dWxsU2NyZWVuV2luZG93KCkgIT0gdGhpcykgew0KICAgICAgICAgICAgbWFpbkNhbnZhcy5zZXRT
aXplKGQpOw0KICAgICAgICAgICAgdGhpcy5wYWNrKCk7DQogICAgICAgIH0NCiAgICB9DQogICAg
LyoqDQogICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgRnJhbWUgaXMgdGhlIEZ1bGwtU2NyZWVuIEV4
Y2x1c2l2ZSBNb2RlIHdpbmRvdy4NCiAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyB3aW5kb3cg
aXMgaW4gZnVsbHNjcmVlbiBtb2RlDQogICAgICovDQogICAgcHVibGljIGJvb2xlYW4gaXNGdWxs
c2NyZWVuKCkgew0KICAgICAgICBqYXZhLmF3dC5HcmFwaGljc0RldmljZSBkZXYgPSBqYXZhLmF3
dC5HcmFwaGljc0Vudmlyb25tZW50LmdldExvY2FsR3JhcGhpY3NFbnZpcm9ubWVudCgpLmdldERl
ZmF1bHRTY3JlZW5EZXZpY2UoKTsNCiAgICAgICAgcmV0dXJuIChkZXYuZ2V0RnVsbFNjcmVlbldp
bmRvdygpID09IHRoaXMpOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBUaGUge0BsaW5rIEdMQ2Fw
YWJpbGl0aWVzfSB1c2VkIHdpdGggdGhlIEdMQ2FudmFzLg0KICAgICAqIEByZXR1cm4gYSBjb3B5
IG9mIHRoZSBjYXBhYmlsaXRpZXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYXR0YWNoZWQgR0xDYW52
YXMNCiAgICAgKi8NCiAgICBwdWJsaWMgR0xDYXBhYmlsaXRpZXMgZ2V0R0xDYXBhYmlsaXRpZXMo
KSB7DQogICAgICAgIHJldHVybiAoR0xDYXBhYmlsaXRpZXMpdGhpcy5jYXBzLmNsb25lKCk7DQog
ICAgfQ0KICAgIC8qKg0KICAgICAqIFJlYnVpbGRzIHRoZSBHTENhbnZhcyB3aXRoIHRoZSBzcGVj
aWZpZWQgY2FwYmlsaXRpZXMuIFdpbGwgZGlzcG9zZSBhbmQgcmUtY3JlYXRlIHRoZSBKRnJhbWUg
YW5kIEdMQ2FudmFzIHdpdGggdGhlIG5ldyBjYXBhYmlsaXRpZXMuDQogICAgICogQHBhcmFtIGNh
cHMgdGhlIGNhcGFiaWxpdGllcyB0byBiZSBjb3BpZWQgaW50byB0aGlzIEdMSkZyYW1lDQogICAg
ICovDQogICAgcHVibGljIHZvaWQgc2V0R0xDYXBhYmlsaXRpZXMoR0xDYXBhYmlsaXRpZXMgY2Fw
cykgew0KICAgICAgICAvL2dldCBvbGQgc2V0dXANCiAgICAgICAgYm9vbGVhbiB2aXMgPSB0aGlz
LmlzVmlzaWJsZSgpOw0KICAgICAgICB0aGlzLmNhcHMgPSAoR0xDYXBhYmlsaXRpZXMpY2Fwcy5j
bG9uZSgpOw0KICAgICAgICBib29sZWFuIGZzID0gdGhpcy5pc0Z1bGxzY3JlZW4oKTsNCiAgICAg
ICAgamF2YS5hd3QuRGltZW5zaW9uIGQgPSB0aGlzLm1haW5DYW52YXMuZ2V0U2l6ZSgpOw0KICAg
ICAgICANCiAgICAgICAgdGhpcy5kaXNwb3NlKCk7DQogICAgICAgIA0KICAgICAgICAvL3JlLWZv
cm0gY2FudmFzIHdpdGggbmV3IGNhcHMNCiAgICAgICAgdGhpcy5tYWluQ2FudmFzID0gbmV3IEdM
Q2FudmFzKGNhcHMpOw0KICAgICAgICB0aGlzLmdldENvbnRlbnRQYW5lKCkucmVtb3ZlQWxsKCk7
DQogICAgICAgIHRoaXMuYWRkKG1haW5DYW52YXMpOw0KICAgICAgICANCiAgICAgICAgDQogICAg
ICAgIG1haW5DYW52YXMuc2V0U2l6ZShkKTsNCiAgICAgICAgDQogICAgICAgIEdMQ2FudmFzIGds
YyA9IChHTENhbnZhcykgbWFpbkNhbnZhczsNCiAgICAgICAgLy9yZS1hcHBseSBHTEV2ZW50TGlz
dGVuZXINCiAgICAgICAgZ2xjLmFkZEdMRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7DQogICAgICAg
IC8vcmUtYXBwbHkgaW5wdXQgbGlzdGVuZXJzIGZyb20gdGhlIEpQYW5lbCBsaXN0ZW5lcnMNCiAg
ICAgICAgZm9yKElucHV0TWV0aG9kTGlzdGVuZXIgbCA6IHRoaXMuZ2V0SW5wdXRNZXRob2RMaXN0
ZW5lcnMoKSkNCiAgICAgICAgICAgIGdsYy5hZGRJbnB1dE1ldGhvZExpc3RlbmVyKGwpOw0KICAg
ICAgICBmb3IoS2V5TGlzdGVuZXIgbCA6IHRoaXMuZ2V0S2V5TGlzdGVuZXJzKCkpDQogICAgICAg
ICAgICBnbGMuYWRkS2V5TGlzdGVuZXIobCk7DQogICAgICAgIGZvcihNb3VzZUxpc3RlbmVyIGwg
OiB0aGlzLmdldE1vdXNlTGlzdGVuZXJzKCkpDQogICAgICAgICAgICBnbGMuYWRkTW91c2VMaXN0
ZW5lcihsKTsNCiAgICAgICAgZm9yKE1vdXNlTW90aW9uTGlzdGVuZXIgbCA6IHRoaXMuZ2V0TW91
c2VNb3Rpb25MaXN0ZW5lcnMoKSkNCiAgICAgICAgICAgIGdsYy5hZGRNb3VzZU1vdGlvbkxpc3Rl
bmVyKGwpOw0KICAgICAgICBmb3IoTW91c2VXaGVlbExpc3RlbmVyIGwgOiB0aGlzLmdldE1vdXNl
V2hlZWxMaXN0ZW5lcnMoKSkNCiAgICAgICAgICAgIGdsYy5hZGRNb3VzZVdoZWVsTGlzdGVuZXIo
bCk7DQogICAgICAgIA0KICAgICAgICB0aGlzLnNldEZ1bGxzY3JlZW4oZnMpOw0KICAgICAgICB0
aGlzLnNldFZpc2libGUodmlzKTsNCiAgICAgICAgDQogICAgfQ0KICAgIC8qKg0KICAgICAqIFJl
cGFpbnQgdGhlIEpGcmFtZSBhbmQgcmVuZGVyIHRoZSBHTENhbnZhcyBpZiBubyBhbmltYXRvciBp
cyBwcmVzZW50LiAgSWYgYW5pbWF0b3IgaXMgYXR0YWNoZWQsIG9ubHkgcmVwYWludHMgdGhlIEpG
cmFtZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCByZXBhaW50KCkgew0KICAgICAgICBzdXBl
ci5yZXBhaW50KCk7DQogICAgICAgIGlmICh0aGlzLmFuaW1hdG9yID09IG51bGwpDQogICAgICAg
ICAgICAoKEdMQ2FudmFzKXRoaXMubWFpbkNhbnZhcykuZGlzcGxheSgpOw0KICAgIH0NCiAgICAv
KioNCiAgICAgKiBSZW1vdmVzIElucHV0TWV0aG9kTGlzdGVuZXJzLCBLZXlMaXN0ZW5lcnMsTW91
c2VMaXN0ZW5lcnMsIE1vdXNlTW90aW9uTGlzdGVuZXJzLCBhbmQgTW91c2VXaGVlbExpc3RlbmVy
cyBmcm9tIHRoaXMgYW5kIHRoZSBHTENhbnZhcy4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBj
bGVhcklucHV0TGlzdGVuZXJzKCkgew0KICAgICAgICBJbnB1dE1ldGhvZExpc3RlbmVyW10gaW1s
cyA9IHN1cGVyLmdldElucHV0TWV0aG9kTGlzdGVuZXJzKCk7DQogICAgICAgIEtleUxpc3RlbmVy
W10ga2xzID0gc3VwZXIuZ2V0S2V5TGlzdGVuZXJzKCk7DQogICAgICAgIE1vdXNlTGlzdGVuZXJb
XSBtbHMgPSBzdXBlci5nZXRNb3VzZUxpc3RlbmVycygpOw0KICAgICAgICBNb3VzZU1vdGlvbkxp
c3RlbmVyW10gbW1scyA9IHN1cGVyLmdldE1vdXNlTW90aW9uTGlzdGVuZXJzKCk7DQogICAgICAg
IE1vdXNlV2hlZWxMaXN0ZW5lcltdIG13bHMgPSBzdXBlci5nZXRNb3VzZVdoZWVsTGlzdGVuZXJz
KCk7DQogICAgICAgIGZvcihJbnB1dE1ldGhvZExpc3RlbmVyIGwgOiBpbWxzKSB7DQogICAgICAg
ICAgICBtYWluQ2FudmFzLnJlbW92ZUlucHV0TWV0aG9kTGlzdGVuZXIobCk7DQogICAgICAgICAg
ICBzdXBlci5yZW1vdmVJbnB1dE1ldGhvZExpc3RlbmVyKGwpOw0KICAgICAgICB9DQogICAgICAg
IA0KICAgICAgICBmb3IoS2V5TGlzdGVuZXIgbCA6IGtscyl7DQogICAgICAgICAgICBtYWluQ2Fu
dmFzLnJlbW92ZUtleUxpc3RlbmVyKGwpOw0KICAgICAgICAgICAgc3VwZXIucmVtb3ZlS2V5TGlz
dGVuZXIobCk7DQogICAgICAgIH0NCiAgICAgICAgZm9yKE1vdXNlTGlzdGVuZXIgbCA6IG1scyl7
DQogICAgICAgICAgICBtYWluQ2FudmFzLnJlbW92ZU1vdXNlTGlzdGVuZXIobCk7DQogICAgICAg
ICAgICBzdXBlci5yZW1vdmVNb3VzZUxpc3RlbmVyKGwpOw0KICAgICAgICB9DQogICAgICAgIGZv
cihNb3VzZU1vdGlvbkxpc3RlbmVyIGwgOiBtbWxzKXsNCiAgICAgICAgICAgIG1haW5DYW52YXMu
cmVtb3ZlTW91c2VNb3Rpb25MaXN0ZW5lcihsKTsNCiAgICAgICAgICAgIHN1cGVyLnJlbW92ZU1v
dXNlTW90aW9uTGlzdGVuZXIobCk7DQogICAgICAgIH0NCiAgICAgICAgZm9yKE1vdXNlV2hlZWxM
aXN0ZW5lciBsIDogbXdscyl7DQogICAgICAgICAgICBtYWluQ2FudmFzLnJlbW92ZU1vdXNlV2hl
ZWxMaXN0ZW5lcihsKTsNCiAgICAgICAgICAgIHN1cGVyLnJlbW92ZU1vdXNlV2hlZWxMaXN0ZW5l
cihsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAvKioNCiAgICAgKiBHZW5lcmF0ZXMgYSBuZXcg
e0BsaW5rIEFuaW1hdG9yfSBmb3IgdXBkYXRpbmcgdGhlIEdMQ2FudmFzLCBhbmQgc3RhcnRzIGl0
Lg0KICAgICAqIEByZXR1cm4gdGhlIGdlbmVyYXRlZCBBbmltYXRvcg0KICAgICAqLw0KICAgIHB1
YmxpYyBjb20uc3VuLm9wZW5nbC51dGlsLkFuaW1hdG9yIGdlbmVyYXRlQW5pbWF0b3IoKSB7DQog
ICAgICAgIGlmICh0aGlzLmFuaW1hdG9yICE9IG51bGwpIHsNCiAgICAgICAgICAgIHRoaXMuYW5p
bWF0b3Iuc3RvcCgpOw0KICAgICAgICAgICAgdGhpcy5hbmltYXRvci5yZW1vdmUoKEdMQ2FudmFz
KW1haW5DYW52YXMpOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuYW5pbWF0b3IgPSBuZXcgY29t
LnN1bi5vcGVuZ2wudXRpbC5BbmltYXRvcigoR0xDYW52YXMpbWFpbkNhbnZhcyk7DQogICAgICAg
IHRoaXMuYW5pbWF0b3Iuc3RhcnQoKTsNCiAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0b3I7DQog
ICAgfQ0KICAgIC8qKg0KICAgICAqIFJldHJpZXZlcyB0aGUgYXR0YWNoZWQgQW5pbWF0b3IgY29u
bmVjdGVkIHRvIHRoZSBHTENhbnZhcy4NCiAgICAgKiBAcmV0dXJuIFRoZSBBbmltYXRvciBhdHRh
Y2hlZCB0byB0aGlzLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIEFuaW1hdG9yDQogICAgICovDQog
ICAgcHVibGljIGNvbS5zdW4ub3BlbmdsLnV0aWwuQW5pbWF0b3IgZ2V0QW5pbWF0b3IoKSB7DQog
ICAgICAgIHJldHVybiB0aGlzLmFuaW1hdG9yOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBTcGVj
aWZpZXMgYW4ge0BsaW5rIEFuaW1hdG9yfSBmb3IgdXBkYXRpbmcgdGhlIEdMQ2FudmFzLCBhbmQg
c3RhcnRzIGl0Lg0KICAgICAqIEBwYXJhbSBhbmltIEFuaW1hdG9yIHRvIHVzZSB0byBhbmltYXRl
IHRoZSBHTENhbnZhcw0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldEFuaW1hdG9yKGNvbS5z
dW4ub3BlbmdsLnV0aWwuQW5pbWF0b3IgYW5pbSkgew0KICAgICAgICB0aGlzLnNldEFuaW1hdG9y
KGFuaW0sdHJ1ZSk7DQogICAgfQ0KICAgIC8qKg0KICAgICAqIFNwZWNpZmllcyBhbiB7QGxpbmsg
QW5pbWF0b3J9IGZvciB1cGRhdGluZyB0aGUgR0xDYW52YXMsIGFuZCBvcHRpb25hbGx5IHN0YXJ0
cyBpdC4NCiAgICAgKiBAcGFyYW0gYW5pbSBBbmltYXRvciAgdG8gdXNlIHRvIGFuaW1hdGUgdGhl
IEdMQ2FudmFzDQogICAgICogQHBhcmFtIHN0YXJ0IHN0YXJ0cyB0aGUgYW5pbWF0b3IgaWYgdHJ1
ZSwganVzdCBzZXRzIGl0IGlmIG5vdA0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldEFuaW1h
dG9yKGNvbS5zdW4ub3BlbmdsLnV0aWwuQW5pbWF0b3IgYW5pbSwgYm9vbGVhbiBzdGFydCkgew0K
ICAgICAgICBpZiAodGhpcy5hbmltYXRvciAhPSBudWxsKSB7DQogICAgICAgICAgICB0aGlzLmFu
aW1hdG9yLnN0b3AoKTsNCiAgICAgICAgICAgIHRoaXMuYW5pbWF0b3IucmVtb3ZlKChHTENhbnZh
cyltYWluQ2FudmFzKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmFuaW1hdG9yID0gYW5pbTsN
CiAgICAgICAgdGhpcy5hbmltYXRvci5hZGQoKEdMQ2FudmFzKW1haW5DYW52YXMpOw0KICAgICAg
ICBpZiAoc3RhcnQpDQogICAgICAgICAgICB0aGlzLmFuaW1hdG9yLnN0YXJ0KCk7DQogICAgfQ0K
ICAgIC8qKg0KICAgICAqIFN0b3BzIGFuZCByZW1vdmVzIHRoZSB7QGxpbmsgQW5pbWF0b3J9Lg0K
ICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHJlbW92ZUFuaW1hdG9yKCkgew0KICAgICAgICB0aGlz
LmFuaW1hdG9yLnN0b3AoKTsNCiAgICAgICAgdGhpcy5hbmltYXRvci5yZW1vdmUoKEdMQ2FudmFz
KW1haW5DYW52YXMpOw0KICAgICAgICB0aGlzLmFuaW1hdG9yID0gbnVsbDsNCiAgICB9DQogICAg
LyoqDQogICAgICogRGV0ZXJtaW5lcyBpZiB0aGlzIEdMSkZyYW1lIGlzIHJ1bm5pbmcgb24gYW4g
e0BsaW5rIEFuaW1hdG9yfS4NCiAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIEdMSkZyYW1lIGhh
cyBhbiBhdHRhY2hlZCBhbmltYXRvci4NCiAgICAgKi8NCiAgICBwdWJsaWMgYm9vbGVhbiBpc0Fu
aW1hdGVkKCkgew0KICAgICAgICByZXR1cm4gKGFuaW1hdG9yIT1udWxsKTsNCiAgICB9DQogICAg
DQogICAgLyoqDQogICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBsaXN0ZW5lciBzbyB0
aGF0IGl0IG5vIGxvbmdlciByZWNlaXZlcyBrZXkgZXZlbnRzIGZyb20gdGhpcyBjb21wb25lbnQg
YW5kIHRoZSBHTENhbnZhcy4gVGhpcyBtZXRob2QgcGVyZm9ybXMgbm8gZnVuY3Rpb24sIG5vciBk
b2VzIGl0IHRocm93IGFuIGV4Y2VwdGlvbiwgaWYgdGhlIGxpc3RlbmVyIHNwZWNpZmllZCBieSB0
aGUgYXJndW1lbnQgd2FzIG5vdCBwcmV2aW91c2x5IGFkZGVkIHRvIHRoaXMgY29tcG9uZW50LiBJ
ZiBsaXN0ZW5lciBsIGlzIG51bGwsIG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIG5vIGFjdGlv
biBpcyBwZXJmb3JtZWQuDQogICAgICogQHBhcmFtIGwgdGhlIGtleSBsaXN0ZW5lci4NCiAgICAg
Ki8NCiAgICBwdWJsaWMgdm9pZCByZW1vdmVLZXlMaXN0ZW5lcihLZXlMaXN0ZW5lciBsKSB7DQog
ICAgICAgIHN1cGVyLnJlbW92ZUtleUxpc3RlbmVyKGwpOw0KICAgICAgICBtYWluQ2FudmFzLnJl
bW92ZUtleUxpc3RlbmVyKGwpOw0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiBBZGRzIHRo
ZSBzcGVjaWZpZWQga2V5IGxpc3RlbmVyIHRvIHJlY2VpdmUga2V5IGV2ZW50cyBmcm9tIHRoaXMg
Y29tcG9uZW50IGFuZCB0aGUgR0xDYW52YXMuIElmIGwgaXMgbnVsbCwgbm8gZXhjZXB0aW9uIGlz
IHRocm93biBhbmQgbm8gYWN0aW9uIGlzIHBlcmZvcm1lZC4NCiAgICAgKiBAcGFyYW0gbCB0aGUg
a2V5IGxpc3RlbmVyLg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIGFkZEtleUxpc3RlbmVyKEtl
eUxpc3RlbmVyIGwpIHsNCiAgICAgICAgc3VwZXIuYWRkS2V5TGlzdGVuZXIobCk7DQogICAgICAg
IG1haW5DYW52YXMuYWRkS2V5TGlzdGVuZXIobCk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAg
ICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBtb3VzZSBsaXN0ZW5lciBzbyB0aGF0IGl0IG5vIGxv
bmdlciByZWNlaXZlcyBtb3VzZSBldmVudHMgZnJvbSB0aGlzIGNvbXBvbmVudCBhbmQgdGhlIEdM
Q2FudmFzLiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBubyBmdW5jdGlvbiwgbm9yIGRvZXMgaXQgdGhy
b3cgYW4gZXhjZXB0aW9uLCBpZiB0aGUgbGlzdGVuZXIgc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVu
dCB3YXMgbm90IHByZXZpb3VzbHkgYWRkZWQuIElmIGxpc3RlbmVyIGwgaXMgbnVsbCwgbm8gZXhj
ZXB0aW9uIGlzIHRocm93biBhbmQgbm8gYWN0aW9uIGlzIHBlcmZvcm1lZC4NCiAgICAgKiBAcGFy
YW0gbCB0aGUgbW91c2UgbGlzdGVuZXINCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCByZW1vdmVN
b3VzZUxpc3RlbmVyKE1vdXNlTGlzdGVuZXIgbCkgew0KICAgICAgICBzdXBlci5yZW1vdmVNb3Vz
ZUxpc3RlbmVyKGwpOw0KICAgICAgICBtYWluQ2FudmFzLnJlbW92ZU1vdXNlTGlzdGVuZXIobCk7
DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIEFkZHMgdGhlIHNwZWNpZmllZCBtb3VzZSBs
aXN0ZW5lciB0byByZWNlaXZlIG1vdXNlIGV2ZW50cyBmcm9tIHRoaXMgY29tcG9uZW50IGFuZCB0
aGUgR0xDYW52YXMuIElmIGxpc3RlbmVyIGwgaXMgbnVsbCwgbm8gZXhjZXB0aW9uIGlzIHRocm93
biBhbmQgbm8gYWN0aW9uIGlzIHBlcmZvcm1lZC4NCiAgICAgKiBAcGFyYW0gbCB0aGUgbW91c2Ug
bGlzdGVuZXINCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBhZGRNb3VzZUxpc3RlbmVyKE1vdXNl
TGlzdGVuZXIgbCkgew0KICAgICAgICBzdXBlci5hZGRNb3VzZUxpc3RlbmVyKGwpOw0KICAgICAg
ICBtYWluQ2FudmFzLmFkZE1vdXNlTGlzdGVuZXIobCk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0K
ICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBtb3VzZSB3aGVlbCBsaXN0ZW5lciBzbyB0aGF0
IGl0IG5vIGxvbmdlciByZWNlaXZlcyBtb3VzZSB3aGVlbCBldmVudHMgZnJvbSB0aGlzIGNvbXBv
bmVudCBhbmQgdGhlIEdMQ2FudmFzLiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBubyBmdW5jdGlvbiwg
bm9yIGRvZXMgaXQgdGhyb3cgYW4gZXhjZXB0aW9uLCBpZiB0aGUgbGlzdGVuZXIgc3BlY2lmaWVk
IGJ5IHRoZSBhcmd1bWVudCB3YXMgbm90IHByZXZpb3VzbHkgYWRkZWQuIElmIGwgaXMgbnVsbCwg
bm8gZXhjZXB0aW9uIGlzIHRocm93biBhbmQgbm8gYWN0aW9uIGlzIHBlcmZvcm1lZC4NCiAgICAg
KiBAcGFyYW0gbCB0aGUgbW91c2Ugd2hlZWwgbGlzdGVuZXINCiAgICAgKi8NCiAgICBwdWJsaWMg
dm9pZCByZW1vdmVNb3VzZVdoZWVsTGlzdGVuZXIoTW91c2VXaGVlbExpc3RlbmVyIGwpIHsNCiAg
ICAgICAgc3VwZXIucmVtb3ZlTW91c2VXaGVlbExpc3RlbmVyKGwpOw0KICAgICAgICBtYWluQ2Fu
dmFzLnJlbW92ZU1vdXNlV2hlZWxMaXN0ZW5lcihsKTsNCiAgICB9DQogICAgDQogICAgLyoqDQog
ICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIG1vdXNlIG1vdGlvbiBsaXN0ZW5lciBzbyB0aGF0
IGl0IG5vIGxvbmdlciByZWNlaXZlcyBtb3VzZSBtb3Rpb24gZXZlbnRzIGZyb20gdGhpcyBjb21w
b25lbnQgYW5kIHRoZSBHTENhbnZhcy4gVGhpcyBtZXRob2QgcGVyZm9ybXMgbm8gZnVuY3Rpb24s
IG5vciBkb2VzIGl0IHRocm93IGFuIGV4Y2VwdGlvbiwgaWYgdGhlIGxpc3RlbmVyIHNwZWNpZmll
ZCBieSB0aGUgYXJndW1lbnQgd2FzIG5vdCBwcmV2aW91c2x5IGFkZGVkLiBJZiBsaXN0ZW5lciBs
IGlzIG51bGwsIG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIG5vIGFjdGlvbiBpcyBwZXJmb3Jt
ZWQuDQogICAgICogQHBhcmFtIGwgdGhlIG1vdXNlIG1vdGlvbiBsaXN0ZW5lci4NCiAgICAgKi8N
CiAgICBwdWJsaWMgdm9pZCByZW1vdmVNb3VzZU1vdGlvbkxpc3RlbmVyKE1vdXNlTW90aW9uTGlz
dGVuZXIgbCkgew0KICAgICAgICBzdXBlci5yZW1vdmVNb3VzZU1vdGlvbkxpc3RlbmVyKGwpOw0K
ICAgICAgICBtYWluQ2FudmFzLnJlbW92ZU1vdXNlTW90aW9uTGlzdGVuZXIobCk7DQogICAgfQ0K
ICAgIA0KICAgIC8qKg0KICAgICAqDQogICAgICogQWRkcyB0aGUgc3BlY2lmaWVkIG1vdXNlIHdo
ZWVsIGxpc3RlbmVyIHRvIHJlY2VpdmUgbW91c2Ugd2hlZWwgZXZlbnRzIGZyb20gdGhpcyBjb21w
b25lbnQgYW5kIHRoZSBHTENhbnZhcy4NCiAgICAgKg0KICAgICAqIEZvciBpbmZvcm1hdGlvbiBv
biBob3cgbW91c2Ugd2hlZWwgZXZlbnRzIGFyZSBkaXNwYXRjaGVkLCBzZWUgdGhlIGNsYXNzIGRl
c2NyaXB0aW9uIGZvciB7QGxpbmsgTW91c2VXaGVlbEV2ZW50fS4NCiAgICAgKg0KICAgICAqIElm
IGwgaXMgbnVsbCwgbm8gZXhjZXB0aW9uIGlzIHRocm93biBhbmQgbm8gYWN0aW9uIGlzIHBlcmZv
cm1lZC4NCiAgICAgKiBAcGFyYW0gbCB0aGUgbW91c2Ugd2hlZWwgbGlzdGVuZXINCiAgICAgKi8N
CiAgICBwdWJsaWMgdm9pZCBhZGRNb3VzZVdoZWVsTGlzdGVuZXIoTW91c2VXaGVlbExpc3RlbmVy
IGwpIHsNCiAgICAgICAgc3VwZXIuYWRkTW91c2VXaGVlbExpc3RlbmVyKGwpOw0KICAgICAgICBt
YWluQ2FudmFzLmFkZE1vdXNlV2hlZWxMaXN0ZW5lcihsKTsNCiAgICB9DQogICAgDQogICAgLyoq
DQogICAgICogQWRkcyB0aGUgc3BlY2lmaWVkIG1vdXNlIG1vdGlvbiBsaXN0ZW5lciB0byByZWNl
aXZlIG1vdXNlIG1vdGlvbiBldmVudHMgZnJvbSB0aGlzIGNvbXBvbmVudCBhbmQgdGhlIEdMQ2Fu
dmFzLiBJZiBsaXN0ZW5lciBsIGlzIG51bGwsIG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIG5v
IGFjdGlvbiBpcyBwZXJmb3JtZWQuDQogICAgICogQHBhcmFtIGwgdGhlIG1vdXNlIG1vdGlvbiBs
aXN0ZW5lci4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBhZGRNb3VzZU1vdGlvbkxpc3RlbmVy
KE1vdXNlTW90aW9uTGlzdGVuZXIgbCkgew0KICAgICAgICBzdXBlci5hZGRNb3VzZU1vdGlvbkxp
c3RlbmVyKGwpOw0KICAgICAgICBtYWluQ2FudmFzLmFkZE1vdXNlTW90aW9uTGlzdGVuZXIobCk7
DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBpbnB1
dCBtZXRob2QgbGlzdGVuZXIgc28gdGhhdCBpdCBubyBsb25nZXIgcmVjZWl2ZXMgaW5wdXQgbWV0
aG9kIGV2ZW50cyBmcm9tIHRoaXMgY29tcG9uZW50IGFuZCB0aGUgR0xDYW52YXMuIFRoaXMgbWV0
aG9kIHBlcmZvcm1zIG5vIGZ1bmN0aW9uLCBub3IgZG9lcyBpdCB0aHJvdyBhbiBleGNlcHRpb24s
IGlmIHRoZSBsaXN0ZW5lciBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50IHdhcyBub3QgcHJldmlv
dXNseSBhZGRlZC4gSWYgbGlzdGVuZXIgbCBpcyBudWxsLCBubyBleGNlcHRpb24gaXMgdGhyb3du
IGFuZCBubyBhY3Rpb24gaXMgcGVyZm9ybWVkLg0KICAgICAqIEBwYXJhbSBsIHRoZSBpbnB1dCBt
ZXRob2QgbGlzdGVuZXINCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCByZW1vdmVJbnB1dE1ldGhv
ZExpc3RlbmVyKGphdmEuYXd0LmV2ZW50LklucHV0TWV0aG9kTGlzdGVuZXIgbCkgew0KICAgICAg
ICBzdXBlci5yZW1vdmVJbnB1dE1ldGhvZExpc3RlbmVyKGwpOw0KICAgICAgICBtYWluQ2FudmFz
LnJlbW92ZUlucHV0TWV0aG9kTGlzdGVuZXIobCk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAg
ICAqIEFkZHMgdGhlIHNwZWNpZmllZCBpbnB1dCBtZXRob2QgbGlzdGVuZXIgdG8gcmVjZWl2ZSBp
bnB1dCBtZXRob2QgZXZlbnRzIGZyb20gdGhpcyBjb21wb25lbnQgYW5kIHRoZSBHTENhbnZhcy4g
QSBjb21wb25lbnQgd2lsbCBvbmx5IHJlY2VpdmUgaW5wdXQgbWV0aG9kIGV2ZW50cyBmcm9tIGlu
cHV0IG1ldGhvZHMgaWYgaXQgYWxzbyBvdmVycmlkZXMgZ2V0SW5wdXRNZXRob2RSZXF1ZXN0cyB0
byByZXR1cm4gYW4gSW5wdXRNZXRob2RSZXF1ZXN0cyBpbnN0YW5jZS4gSWYgbGlzdGVuZXIgbCBp
cyBudWxsLCBubyBleGNlcHRpb24gaXMgdGhyb3duIGFuZCBubyBhY3Rpb24gaXMgcGVyZm9ybWVk
Lg0KICAgICAqIEBwYXJhbSBsIHRoZSBpbnB1dCBtZXRob2QgbGlzdGVuZXINCiAgICAgKi8NCiAg
ICBwdWJsaWMgdm9pZCBhZGRJbnB1dE1ldGhvZExpc3RlbmVyKGphdmEuYXd0LmV2ZW50LklucHV0
TWV0aG9kTGlzdGVuZXIgbCkgew0KICAgICAgICBzdXBlci5hZGRJbnB1dE1ldGhvZExpc3RlbmVy
KGwpOw0KICAgICAgICBtYWluQ2FudmFzLmFkZElucHV0TWV0aG9kTGlzdGVuZXIobCk7DQogICAg
fQ0KfQ0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>83</attachid>
            <date>2006-06-22 20:59:00 +0200</date>
            <delta_ts>2006-06-22 20:59:00 +0200</delta_ts>
            <desc>Slightly updated version to support context sharing and with NetBeans comments removed</desc>
            <filename>GLJFrame.java</filename>
            <type>text/plain</type>
            <size>23373</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">LyoNCiAqIENvcHlyaWdodCAoYykgMjAwNiBFcmlrIFRvbGxlcnVkIChlcmlrLnRvbGxlcnVkQGdt
YWlsLmNvbSkgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCiAqIA0KICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlDQogKiBtZXQ6DQogKiAgIA0KICogLSBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqICAgIA0K
ICogLSBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0DQogKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICogICANCiAqIFRo
ZSBuYW1lcyBvZiBFcmlrIFRvbGxlcnVkLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIG9yIHRoZSBu
YW1lcyBvZg0KICogY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICogICAgDQogKiBUaGlzIHNvZnR3YXJl
IGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4gQUxM
DQogKiBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBX
QVJSQU5USUVTLA0KICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQQ0KICogUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZS
SU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIEVSSUsgVE9MTEVSVUQsDQogKiBTVU4gTUlD
Uk9TWVNURU1TLCBJTkMuICgiU1VOIiksIEFORCBTVU4nUyBMSUNFTlNPUlMgU0hBTEwgTk9UIEJF
IExJQUJMRSBGT1INCiAqIEFOWSBEQU1BR0VTIFNVRkZFUkVEIEJZIExJQ0VOU0VFIEFTIEEgUkVT
VUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1INCiAqIERJU1RSSUJVVElORyBUSElTIFNPRlRXQVJF
IE9SIElUUyBERVJJVkFUSVZFUy4gSU4gTk8gRVZFTlQgV0lMTCBCRU4NCiAqIENIQVBQRUxMLCBT
VU4sIE9SIFNVTidTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUIFJFVkVOVUUsIFBS
T0ZJVCANCiAqIE9SIERBVEEsIE9SIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBDT05T
RVFVRU5USUFMLCBJTkNJREVOVEFMIE9SDQogKiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENB
VVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwNCiAqIEFSSVNJ
TkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEJFTg0KICogQ0hBUFBFTEwgT1IgU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCiAqICAgDQogKiBZb3UgYWNrbm93bGVkZ2UgdGhh
dCB0aGlzIHNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCBvciBpbnRlbmRlZCBmb3IgdXNlDQogKiBp
biB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBh
bnkgbnVjbGVhcg0KICogZmFjaWxpdHkuDQogKi8NCg0KcGFja2FnZSBjb20uc3VuLm9wZW5nbC51
dGlsOw0KDQppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLio7DQppbXBvcnQgamF2YXguc3dpbmcu
KjsNCmltcG9ydCBqYXZhLmF3dC4qOw0KaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7DQoNCi8qKg0K
ICogQSBKRnJhbWUgY29udGFpbmluZyBhIGhlYXZ5d2VpZ2h0IHtAbGluayBHTENhbnZhc30gd2l0
aCBhIHNpbmdsZSBhdHRhY2hlZCB7QGxpbmsgR0xFdmVudExpc3RlbmVyfS4gDQogKiBOb3RlOiB0
aGUgZGVmYXVsdCBjbG9zZSBvcGVyYXRpb24gaGFzIGJlZW4gY2hhbmdlZCB0byBleGl0IHJhdGhl
ciB0aGFuIGRpc3Bvc2UuDQogKiBAYXV0aG9yIEVyaWsgSi4gVG9sbGVydWQNCiAqLw0KcHVibGlj
IGNsYXNzIEdMSkZyYW1lIGV4dGVuZHMgSkZyYW1lIHsNCglwcml2YXRlIENhbnZhcyBtYWluQ2Fu
dmFzOw0KICAgIHByaXZhdGUgR0xFdmVudExpc3RlbmVyIGxpc3RlbmVyOw0KICAgIHByaXZhdGUg
R0xDYXBhYmlsaXRpZXMgY2FwczsNCiAgICBwcml2YXRlIGNvbS5zdW4ub3BlbmdsLnV0aWwuQW5p
bWF0b3IgYW5pbWF0b3I7DQogICAgcHJpdmF0ZSBHTENvbnRleHQgY29udGV4dFRvU2hhcmVXaXRo
Ow0KICAgIA0KICAgIC8qKg0KICAgICAqIENyZWF0ZXMgbmV3IGZvcm0gR0xKRnJhbWUNCiAgICAg
KiBAcGFyYW0gbGlzdGVuZXIgdGhlIEdMRXZlbnRMaXN0ZW5lciB0byBhdHRhY2ggdG8gdGhlIEdM
Q2FudmFzDQogICAgICovDQogICAgcHVibGljIEdMSkZyYW1lKEdMRXZlbnRMaXN0ZW5lciBsaXN0
ZW5lcikgew0KICAgICAgICB0aGlzKCJPcGVuR0wgV2luZG93IiwgbGlzdGVuZXIpOw0KICAgIH0N
CiAgICAvKioNCiAgICAgKiBDcmVhdGVzIG5ldyBmb3JtIEdMSkZyYW1lDQogICAgICogQHBhcmFt
IHRpdGxlIHRoZSB0aXRsZSBmb3IgdGhlIHdpbmRvdw0KICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0
aGUgR0xFdmVudExpc3RlbmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52YXMNCiAgICAgKi8NCiAg
ICBwdWJsaWMgR0xKRnJhbWUoU3RyaW5nIHRpdGxlLCBHTEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIp
IHsNCiAgICAgICAgc3VwZXIodGl0bGUpOw0KICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVu
ZXI7DQogICAgICAgIHRoaXMuY2FwcyA9IG5ldyBHTENhcGFiaWxpdGllcygpOw0KICAgICAgICBp
bml0Q29tcG9uZW50cygpOw0KICAgICAgICAoKEdMQ2FudmFzKW1haW5DYW52YXMpLmFkZEdMRXZl
bnRMaXN0ZW5lcihsaXN0ZW5lcik7DQogICAgICAgIGFuaW1hdG9yID0gbnVsbDsNCiAgICAgICAg
dGhpcy5jb250ZXh0VG9TaGFyZVdpdGggPSBudWxsOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBD
cmVhdGVzIG5ldyBmb3JtIEdMSkZyYW1lDQogICAgICogQHBhcmFtIHRpdGxlIHRpdGxlIGZvciB0
aGUgd2luZG93DQogICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBHTEV2ZW50TGlzdGVuZXIgdG8g
YXR0YWNoIHRvIHRoZSBHTENhbnZhcw0KICAgICAqIEBwYXJhbSBjYXBhYmlsaXRpZXMgdGhlIEdM
Q2FwYWJpbGl0aWVzIHRvIHJlcXVlc3QgZm9yIHRoZSBHTENhbnZhcw0KICAgICAqLw0KICAgIHB1
YmxpYyBHTEpGcmFtZShTdHJpbmcgdGl0bGUsIEdMRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgR0xD
YXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzKSB7DQogICAgICAgIHN1cGVyKHRpdGxlKTsNCiAgICAg
ICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOw0KICAgICAgICB0aGlzLmNhcHMgPSAoR0xDYXBh
YmlsaXRpZXMpY2FwYWJpbGl0aWVzLmNsb25lKCk7DQogICAgICAgIGluaXRDb21wb25lbnRzKCk7
DQogICAgICAgICgoR0xDYW52YXMpbWFpbkNhbnZhcykuYWRkR0xFdmVudExpc3RlbmVyKGxpc3Rl
bmVyKTsNCiAgICAgICAgYW5pbWF0b3IgPSBudWxsOw0KICAgICAgICB0aGlzLmNvbnRleHRUb1No
YXJlV2l0aCA9IG51bGw7DQogICAgfQ0KICAgIC8qKg0KICAgICAqIENyZWF0ZXMgbmV3IGZvcm0g
R0xKRnJhbWUNCiAgICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIEdMRXZlbnRMaXN0ZW5lciB0byBh
dHRhY2ggdG8gdGhlIEdMQ2FudmFzDQogICAgICogQHBhcmFtIGNvbnRleHRUb1NoYXJlV2l0aCB0
aGUgY29udGV4dCB0byBzaGFyZSB3aXRoDQogICAgICogQHNlZSBqYXZheC5tZWRpYS5vcGVuZ2wu
R0xDYW52YXMjamF2YXgubWVkaWEub3BlbmdsLkdMQ2FudmFzKGphdmF4Lm1lZGlhLm9wZW5nbC5H
TENhcGFiaWxpdGllcyxqYXZheC5tZWRpYS5vcGVuZ2wuR0xDYXBhYmlsaXRpZXNDaG9vc2VyLGph
dmF4Lm1lZGlhLm9wZW5nbC5HTENvbnRleHQsamF2YXgubWVkaWEub3BlbmdsLkdyYXBoaWNzRGV2
aWNlKQ0KICAgICAqLw0KICAgIHB1YmxpYyBHTEpGcmFtZShHTEV2ZW50TGlzdGVuZXIgbGlzdGVu
ZXIsIEdMQ29udGV4dCBjb250ZXh0VG9TaGFyZVdpdGgpIHsNCiAgICAgICAgdGhpcyhsaXN0ZW5l
cik7DQogICAgICAgIHRoaXMuY29udGV4dFRvU2hhcmVXaXRoID0gY29udGV4dFRvU2hhcmVXaXRo
Ow0KICAgICAgICANCiAgICB9DQogICAgLyoqDQogICAgICogQ3JlYXRlcyBuZXcgZm9ybSBHTEpG
cmFtZQ0KICAgICAqIEBwYXJhbSB0aXRsZSB0aXRsZSBmb3IgdGhlIHdpbmRvdw0KICAgICAqIEBw
YXJhbSBsaXN0ZW5lciB0aGUgR0xFdmVudExpc3RlbmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52
YXMNCiAgICAgKiBAcGFyYW0gY2FwYWJpbGl0aWVzIHRoZSBHTENhcGFiaWxpdGllcyB0byByZXF1
ZXN0IGZvciB0aGUgR0xDYW52YXMNCiAgICAgKiBAcGFyYW0gY29udGV4dFRvU2hhcmVXaXRoIHRo
ZSBjb250ZXh0IHRvIHNoYXJlIHdpdGgNCiAgICAgKiBAc2VlIGphdmF4Lm1lZGlhLm9wZW5nbC5H
TENhbnZhcyNqYXZheC5tZWRpYS5vcGVuZ2wuR0xDYW52YXMoamF2YXgubWVkaWEub3BlbmdsLkdM
Q2FwYWJpbGl0aWVzLGphdmF4Lm1lZGlhLm9wZW5nbC5HTENhcGFiaWxpdGllc0Nob29zZXIsamF2
YXgubWVkaWEub3BlbmdsLkdMQ29udGV4dCxqYXZheC5tZWRpYS5vcGVuZ2wuR3JhcGhpY3NEZXZp
Y2UpDQogICAgICovDQogICAgcHVibGljIEdMSkZyYW1lKFN0cmluZyB0aXRsZSwgR0xFdmVudExp
c3RlbmVyIGxpc3RlbmVyLCBHTENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMsIEdMQ29udGV4dCBj
b250ZXh0VG9TaGFyZVdpdGgpIHsNCiAgICAgICAgdGhpcyh0aXRsZSxsaXN0ZW5lcixjYXBhYmls
aXRpZXMpOw0KICAgICAgICB0aGlzLmNvbnRleHRUb1NoYXJlV2l0aCA9IGNvbnRleHRUb1NoYXJl
V2l0aDsNCiAgICB9DQogICAgLyoqDQogICAgICogQ3JlYXRlcyBuZXcgZm9ybSBHTEpGcmFtZQ0K
ICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgR0xFdmVudExpc3RlbmVyIHRvIGF0dGFjaCB0byB0
aGUgR0xDYW52YXMNCiAgICAgKiBAcGFyYW0gY2FwYWJpbGl0aWVzIHRoZSBHTENhcGFiaWxpdGll
cyB0byByZXF1ZXN0IGZvciB0aGUgR0xDYW52YXMNCiAgICAgKi8NCiAgICBwdWJsaWMgR0xKRnJh
bWUoR0xFdmVudExpc3RlbmVyIGxpc3RlbmVyLCBHTENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMp
IHsNCiAgICAgICAgdGhpcygiT3BlbkdMIFdpbmRvdyIsIGxpc3RlbmVyLCBjYXBhYmlsaXRpZXMp
Ow0KICAgIH0NCiAgICAvKioNCiAgICAgKiBDcmVhdGVzIG5ldyBmb3JtIEdMSkZyYW1lDQogICAg
ICogQHBhcmFtIGxpc3RlbmVyIHRoZSBHTEV2ZW50TGlzdGVuZXIgdG8gYXR0YWNoIHRvIHRoZSBH
TENhbnZhcw0KICAgICAqIEBwYXJhbSB3aWR0aCB0aGUgaG9yaXpvbnRhbCBzaXplIGZvciB0aGUg
R0xDYW52YXMgaW4gcGl4ZWxzDQogICAgICogQHBhcmFtIGhlaWdodCB0aGUgdmVydGljYWwgc2l6
ZSBmb3IgdGhlIEdMQ2FudmFzIGluIHBpeGVscw0KICAgICAqLw0KICAgIHB1YmxpYyBHTEpGcmFt
ZShHTEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkgew0KICAg
ICAgICB0aGlzKCJPcGVuR0wgV2luZG93IixsaXN0ZW5lcik7DQogICAgICAgIG1haW5DYW52YXMu
c2V0U2l6ZSh3aWR0aCxoZWlnaHQpOw0KICAgICAgICB0aGlzLnBhY2soKTsNCiAgICB9DQogICAg
LyoqDQogICAgICogQ3JlYXRlcyBuZXcgZm9ybSBHTEpGcmFtZQ0KICAgICAqIEBwYXJhbSB0aXRs
ZSB0aGUgdGl0bGUgZm9yIHRoZSB3aW5kb3cNCiAgICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIEdM
RXZlbnRMaXN0ZW5lciB0byBhdHRhY2ggdG8gdGhlIEdMQ2FudmFzDQogICAgICogQHBhcmFtIHdp
ZHRoIHRoZSBob3Jpem9udGFsIHNpemUgZm9yIHRoZSBHTENhbnZhcyBpbiBwaXhlbHMNCiAgICAg
KiBAcGFyYW0gaGVpZ2h0IHRoZSB2ZXJ0aWNhbCBzaXplIGZvciB0aGUgR0xDYW52YXMgaW4gcGl4
ZWxzDQogICAgICovDQogICAgcHVibGljIEdMSkZyYW1lKFN0cmluZyB0aXRsZSwgR0xFdmVudExp
c3RlbmVyIGxpc3RlbmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsNCiAgICAgICAgdGhpcyh0
aXRsZSxsaXN0ZW5lcik7DQogICAgICAgIG1haW5DYW52YXMuc2V0U2l6ZSh3aWR0aCxoZWlnaHQp
Ow0KICAgICAgICB0aGlzLnBhY2soKTsNCiAgICB9DQogICAgLyoqDQogICAgICogQ3JlYXRlcyBu
ZXcgZm9ybSBHTEpGcmFtZQ0KICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgR0xFdmVudExpc3Rl
bmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52YXMNCiAgICAgKiBAcGFyYW0gZnVsbHNjcmVlbiBp
ZiB0cnVlLCB0aGlzIHdpbmRvdyBpcyBnZW5lcmF0ZWQgaW4gZnVsbHNjcmVlbiBtb2RlDQogICAg
ICovDQogICAgcHVibGljIEdMSkZyYW1lKEdMRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgYm9vbGVh
biBmdWxsc2NyZWVuKSB7DQogICAgICAgIHRoaXMoIk9wZW5HTCBXaW5kb3ciLGxpc3RlbmVyKTsN
CiAgICAgICAgdGhpcy5zZXRGdWxsc2NyZWVuKGZ1bGxzY3JlZW4pOw0KICAgIH0NCiAgICAvKioN
CiAgICAgKiBDcmVhdGVzIG5ldyBmb3JtIEdMSkZyYW1lDQogICAgICogQHBhcmFtIHRpdGxlIHRo
ZSB0aXRsZSBmb3IgdGhlIHdpbmRvdw0KICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgR0xFdmVu
dExpc3RlbmVyIHRvIGF0dGFjaCB0byB0aGUgR0xDYW52YXMNCiAgICAgKiBAcGFyYW0gZnVsbHNj
cmVlbiBpZiB0cnVlLCB0aGlzIHdpbmRvdyBpcyBnZW5lcmF0ZWQgaW4gZnVsbHNjcmVlbiBtb2Rl
DQogICAgICovDQogICAgcHVibGljIEdMSkZyYW1lKFN0cmluZyB0aXRsZSwgR0xFdmVudExpc3Rl
bmVyIGxpc3RlbmVyLCBib29sZWFuIGZ1bGxzY3JlZW4pIHsNCiAgICAgICAgdGhpcyh0aXRsZSxs
aXN0ZW5lcik7DQogICAgICAgIHRoaXMuc2V0RnVsbHNjcmVlbihmdWxsc2NyZWVuKTsNCiAgICB9
DQogICAgDQoNCiAgICBwcml2YXRlIHZvaWQgaW5pdENvbXBvbmVudHMoKSB7DQogICAgICAgIG1h
aW5DYW52YXMgPSBuZXcgR0xDYW52YXMoY2FwcyxudWxsLGNvbnRleHRUb1NoYXJlV2l0aCxudWxs
KTsNCg0KICAgICAgICBzZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oamF2YXguc3dpbmcuV2luZG93
Q29uc3RhbnRzLkVYSVRfT05fQ0xPU0UpOw0KICAgICAgICBhZGRDb21wb25lbnRMaXN0ZW5lcihu
ZXcgamF2YS5hd3QuZXZlbnQuQ29tcG9uZW50QWRhcHRlcigpIHsNCiAgICAgICAgICAgIHB1Ymxp
YyB2b2lkIGNvbXBvbmVudFJlc2l6ZWQoamF2YS5hd3QuZXZlbnQuQ29tcG9uZW50RXZlbnQgZXZ0
KSB7DQogICAgICAgICAgICAgICAgZm9ybUNvbXBvbmVudFJlc2l6ZWQoZXZ0KTsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgbWFpbkNhbnZhcy5zZXRTaXplKDUwMCw1MDAp
Ow0KICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZChtYWluQ2FudmFzLCBqYXZhLmF3dC5Cb3Jk
ZXJMYXlvdXQuQ0VOVEVSKTsNCg0KICAgICAgICBwYWNrKCk7DQogICAgfQ0KICAgIA0KICAgIHBy
aXZhdGUgdm9pZCBmb3JtQ29tcG9uZW50UmVzaXplZChqYXZhLmF3dC5ldmVudC5Db21wb25lbnRF
dmVudCBldnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAg
ICB0aGlzLm1haW5DYW52YXMuc2V0U2l6ZSh0aGlzLmdldFJvb3RQYW5lKCkuZ2V0U2l6ZSgpKTsN
CiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KDQogICAg
LyoqDQogICAgICogU2V0cyB0aGUgZXZlbnQgbGlzdGVuZXIgYXR0YWNoZWQgdG8gdGhlIEdMY2Fu
dmFzLiAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgbm90IHJlcGFpbnQgdGhpcyBjb21wb25l
bnQsIHNvIGl0IHdpbGwgbm90IGltbWVkaWF0ZWx5IHVwZGF0ZS4NCiAgICAgKiBAcGFyYW0gbGlz
dGVuZXIgdGhlIEdMRXZlbnRMaXN0ZW5lciB0byBhdHRhY2ggdG8gdGhlIEdMQ2FudmFzDQogICAg
ICovDQogICAgcHVibGljIHZvaWQgc2V0R0xFdmVudExpc3RlbmVyKEdMRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lcikgew0KICAgICAgICAoKEdMQ2FudmFzKXRoaXMubWFpbkNhbnZhcykucmVtb3ZlR0xF
dmVudExpc3RlbmVyKHRoaXMubGlzdGVuZXIpOw0KICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlz
dGVuZXI7DQogICAgICAgICgoR0xDYW52YXMpdGhpcy5tYWluQ2FudmFzKS5hZGRHTEV2ZW50TGlz
dGVuZXIobGlzdGVuZXIpOw0KICAgICAgICANCiAgICB9DQogICAgLyoqDQogICAgICogUmV0cmll
dmVzIHRoZSBldmVudCBsaXN0ZW5lciBmb3IgdGhlIEdMSkZyYW1lDQogICAgICogQHJldHVybiB0
aGUgR0xFdmVudExpc3RlbmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgR0xDYW52YXMNCiAgICAgKi8N
CiAgICBwdWJsaWMgR0xFdmVudExpc3RlbmVyIGdldEdMRXZlbnRMaXN0ZW5lcigpIHsNCiAgICAg
ICAgcmV0dXJuIHRoaXMubGlzdGVuZXI7DQogICAgfQ0KICAgIC8qKg0KICAgICAqIFNldHMgdGhl
IGZ1bGxzY3JlZW4gc3RhdHVzIG9mIHRoaXMgd2luZG93LiAgSWYgZnVsbCBzY3JlZW4gZXhjbHVz
aXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZCwgZnVsbHNjcmVlbiBpcyBlbXVsYXRlZCBieSBzd2lu
ZyAoc2VlIDxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vZG9jcy9ib29rcy90dXRvcmlhbC9l
eHRyYS9mdWxsc2NyZWVuL2V4Y2x1c2l2ZW1vZGUuaHRtbCI+IEZ1bGwtU2NyZWVuIEV4Y2x1c2l2
ZSBNb2RlIFR1dG9yaWFsIDwvYT4pLiBJZiBmdWxsc2NyZWVuIGlzIHRvIGJlIGludm9rZWQgdW5k
ZXIgV2luZG93cywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgVk0gYmUgcnVuIHdpdGggLURz
dW4uamF2YTJkLm5vZGRyYXc9dHJ1ZQ0KICAgICAqIEBwYXJhbSBmcyB0aGUgbW9kZSB0byBzZXQg
dGhpcyB3aW5kb3cgdG8gLSB0cnVlIGZvciBmdWxsIHNjcmVlbiwgZmFsc2UgZm9yIHdpbmRvd2Vk
IG1vZGUNCiAgICAgKiBAcmV0dXJuIHRydWUgaWYgZnVsbCBzY3JlZW4gZXhjbHVzaXZlIG1vZGUg
aXMgc3VwcG9ydGVkLCBmYWxzZSBpZiBub3QuDQogICAgICovDQogICAgcHVibGljIGJvb2xlYW4g
c2V0RnVsbHNjcmVlbihib29sZWFuIGZzKSB7DQogICAgICAgIC8vVE9ETzogZml4IHRvIG1ha2Ug
ZG91YmxlLWJ1ZmZlcmVkIGFuZCByZXR1cm4gdG8gbm9uLWZzIG1vZGUgcHJvcGVybHkgKHVzZSBp
bml0Q29tcG9uZW50cygpPykNCiAgICAgICAgR3JhcGhpY3NEZXZpY2UgZGV2ID0gR3JhcGhpY3NF
bnZpcm9ubWVudC5nZXRMb2NhbEdyYXBoaWNzRW52aXJvbm1lbnQoKS5nZXREZWZhdWx0U2NyZWVu
RGV2aWNlKCk7DQogICAgICAgIGJvb2xlYW4gdmlzaWJsZSA9IHRoaXMuaXNWaXNpYmxlKCk7DQog
ICAgICAgIGlmIChmcykgew0KICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7DQogICAgICAgICAg
ICB0aGlzLnNldFVuZGVjb3JhdGVkKHRydWUpOw0KICAgICAgICAgICAgdGhpcy5zZXRSZXNpemFi
bGUoZmFsc2UpOw0KICAgICAgICAgICAgdHJ5ew0KICAgICAgICAgICAgICAgIGRldi5zZXRGdWxs
U2NyZWVuV2luZG93KHRoaXMpOw0KICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsN
CiAgICAgICAgICAgICAgICBkZXYuc2V0RnVsbFNjcmVlbldpbmRvdyhudWxsKTsNCiAgICAgICAg
ICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOw0KICAgICAgICAgICAgICAgIEpPcHRpb25QYW5l
LnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIkNvdWxkIG5vdCBlbnRlciBmdWxsc2NyZWVuIGV4Y2x1
c2l2ZSBtb2RlLiIsIkZ1bGxzY3JlZW4gZXJyb3IiLEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0Up
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5zZXRWaXNpYmxlKHZpc2libGUpOw0K
ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7DQogICAgICAgICAg
ICB0aGlzLnNldFVuZGVjb3JhdGVkKGZhbHNlKTsNCiAgICAgICAgICAgIHRoaXMuc2V0UmVzaXph
YmxlKHRydWUpOw0KICAgICAgICAgICAgZGV2LnNldEZ1bGxTY3JlZW5XaW5kb3cobnVsbCk7DQog
ICAgICAgICAgICB0aGlzLnNldFZpc2libGUodmlzaWJsZSk7DQogICAgICAgIH0NCiAgICAgICAg
cmV0dXJuIGRldi5pc0Z1bGxTY3JlZW5TdXBwb3J0ZWQoKTsNCiAgICB9DQogICAgLyoqDQogICAg
ICogUmVzaXplcyB0aGlzIEdMSkZyYW1lIHRvIG1hdGNoIGEgR0xDYW52YXMgb2YgdGhlIHNwZWNp
ZmllZCBzaXplLiAgVGhpcyBoYXMgbm8gZWZmZWN0IGlmIGZ1bGxzY3JlZW4gbW9kZSBpcyBhY3Rp
dmUuDQogICAgICogQHBhcmFtIHdpZHRoIHRoZSBuZXcgaG9yaXpvbnRhbCBzaXplIGZvciB0aGUg
R0xDYW52YXNzIGluIHBpeGVscw0KICAgICAqIEBwYXJhbSBoZWlnaHQgdGhlIG5ldyB2ZXJ0aWNh
bCBzaXplIGZvciB0aGUgR0xDYW52YXNzIGluIHBpeGVscw0KICAgICAqLw0KICAgIHB1YmxpYyB2
b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7DQogICAgICAgIA0KICAgICAgICBq
YXZhLmF3dC5HcmFwaGljc0RldmljZSBkZXYgPSBqYXZhLmF3dC5HcmFwaGljc0Vudmlyb25tZW50
LmdldExvY2FsR3JhcGhpY3NFbnZpcm9ubWVudCgpLmdldERlZmF1bHRTY3JlZW5EZXZpY2UoKTsN
CiAgICAgICAgaWYgKGRldi5nZXRGdWxsU2NyZWVuV2luZG93KCkgIT0gdGhpcykgew0KICAgICAg
ICAgICAgbWFpbkNhbnZhcy5zZXRTaXplKHdpZHRoLGhlaWdodCk7DQogICAgICAgICAgICB0aGlz
LnBhY2soKTsNCiAgICAgICAgICAgIG1haW5DYW52YXMucmVwYWludCgpOw0KICAgICAgICB9DQog
ICAgfQ0KICAgIC8qKg0KICAgICAqIFJlc2l6ZXMgdGhpcyBHTEpGcmFtZSB0byBtYXRjaCBhIEdM
Q2FudmFzIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gVGhpcyBoYXMgbm8gZWZmZWN0IGlmIGZ1bGxz
Y3JlZW4gbW9kZSBpcyBhY3RpdmUuDQogICAgICogQHBhcmFtIGQgdGhlIG5ldyBzaXplIGZvciB0
aGUgR0xDYW52YXNzIGluIHBpeGVscw0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldFNpemUo
amF2YS5hd3QuRGltZW5zaW9uIGQpIHsNCiAgICAgICAgamF2YS5hd3QuR3JhcGhpY3NEZXZpY2Ug
ZGV2ID0gamF2YS5hd3QuR3JhcGhpY3NFbnZpcm9ubWVudC5nZXRMb2NhbEdyYXBoaWNzRW52aXJv
bm1lbnQoKS5nZXREZWZhdWx0U2NyZWVuRGV2aWNlKCk7DQogICAgICAgIGlmIChkZXYuZ2V0RnVs
bFNjcmVlbldpbmRvdygpICE9IHRoaXMpIHsNCiAgICAgICAgICAgIG1haW5DYW52YXMuc2V0U2l6
ZShkKTsNCiAgICAgICAgICAgIHRoaXMucGFjaygpOw0KICAgICAgICB9DQogICAgfQ0KICAgIC8q
Kg0KICAgICAqIERldGVybWluZXMgaWYgdGhlIEZyYW1lIGlzIHRoZSBGdWxsLVNjcmVlbiBFeGNs
dXNpdmUgTW9kZSB3aW5kb3cuDQogICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgd2luZG93IGlz
IGluIGZ1bGxzY3JlZW4gbW9kZQ0KICAgICAqLw0KICAgIHB1YmxpYyBib29sZWFuIGlzRnVsbHNj
cmVlbigpIHsNCiAgICAgICAgamF2YS5hd3QuR3JhcGhpY3NEZXZpY2UgZGV2ID0gamF2YS5hd3Qu
R3JhcGhpY3NFbnZpcm9ubWVudC5nZXRMb2NhbEdyYXBoaWNzRW52aXJvbm1lbnQoKS5nZXREZWZh
dWx0U2NyZWVuRGV2aWNlKCk7DQogICAgICAgIHJldHVybiAoZGV2LmdldEZ1bGxTY3JlZW5XaW5k
b3coKSA9PSB0aGlzKTsNCiAgICB9DQogICAgLyoqDQogICAgICogVGhlIHtAbGluayBHTENhcGFi
aWxpdGllc30gdXNlZCB3aXRoIHRoZSBHTENhbnZhcy4NCiAgICAgKiBAcmV0dXJuIGEgY29weSBv
ZiB0aGUgY2FwYWJpbGl0aWVzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGF0dGFjaGVkIEdMQ2FudmFz
DQogICAgICovDQogICAgcHVibGljIEdMQ2FwYWJpbGl0aWVzIGdldEdMQ2FwYWJpbGl0aWVzKCkg
ew0KICAgICAgICByZXR1cm4gKEdMQ2FwYWJpbGl0aWVzKXRoaXMuY2Fwcy5jbG9uZSgpOw0KICAg
IH0NCiAgICAvKioNCiAgICAgKiBSZWJ1aWxkcyB0aGUgR0xDYW52YXMgd2l0aCB0aGUgc3BlY2lm
aWVkIGNhcGJpbGl0aWVzLiBXaWxsIGRpc3Bvc2UgYW5kIHJlLWNyZWF0ZSB0aGUgSkZyYW1lIGFu
ZCBHTENhbnZhcyB3aXRoIHRoZSBuZXcgY2FwYWJpbGl0aWVzLg0KICAgICAqIEBwYXJhbSBjYXBz
IHRoZSBjYXBhYmlsaXRpZXMgdG8gYmUgY29waWVkIGludG8gdGhpcyBHTEpGcmFtZQ0KICAgICAq
Lw0KICAgIHB1YmxpYyB2b2lkIHNldEdMQ2FwYWJpbGl0aWVzKEdMQ2FwYWJpbGl0aWVzIGNhcHMp
IHsNCiAgICAgICAgLy9nZXQgb2xkIHNldHVwDQogICAgICAgIGJvb2xlYW4gdmlzID0gdGhpcy5p
c1Zpc2libGUoKTsNCiAgICAgICAgdGhpcy5jYXBzID0gKEdMQ2FwYWJpbGl0aWVzKWNhcHMuY2xv
bmUoKTsNCiAgICAgICAgYm9vbGVhbiBmcyA9IHRoaXMuaXNGdWxsc2NyZWVuKCk7DQogICAgICAg
IGphdmEuYXd0LkRpbWVuc2lvbiBkID0gdGhpcy5tYWluQ2FudmFzLmdldFNpemUoKTsNCiAgICAg
ICAgDQogICAgICAgIHRoaXMuZGlzcG9zZSgpOw0KICAgICAgICANCiAgICAgICAgLy9yZS1mb3Jt
IGNhbnZhcyB3aXRoIG5ldyBjYXBzDQogICAgICAgIHRoaXMubWFpbkNhbnZhcyA9IG5ldyBHTENh
bnZhcyhjYXBzKTsNCiAgICAgICAgdGhpcy5nZXRDb250ZW50UGFuZSgpLnJlbW92ZUFsbCgpOw0K
ICAgICAgICB0aGlzLmFkZChtYWluQ2FudmFzKTsNCiAgICAgICAgDQogICAgICAgIA0KICAgICAg
ICBtYWluQ2FudmFzLnNldFNpemUoZCk7DQogICAgICAgIA0KICAgICAgICBHTENhbnZhcyBnbGMg
PSAoR0xDYW52YXMpIG1haW5DYW52YXM7DQogICAgICAgIC8vcmUtYXBwbHkgR0xFdmVudExpc3Rl
bmVyDQogICAgICAgIGdsYy5hZGRHTEV2ZW50TGlzdGVuZXIobGlzdGVuZXIpOw0KICAgICAgICAv
L3JlLWFwcGx5IGlucHV0IGxpc3RlbmVycyBmcm9tIHRoZSBKUGFuZWwgbGlzdGVuZXJzDQogICAg
ICAgIGZvcihJbnB1dE1ldGhvZExpc3RlbmVyIGwgOiB0aGlzLmdldElucHV0TWV0aG9kTGlzdGVu
ZXJzKCkpDQogICAgICAgICAgICBnbGMuYWRkSW5wdXRNZXRob2RMaXN0ZW5lcihsKTsNCiAgICAg
ICAgZm9yKEtleUxpc3RlbmVyIGwgOiB0aGlzLmdldEtleUxpc3RlbmVycygpKQ0KICAgICAgICAg
ICAgZ2xjLmFkZEtleUxpc3RlbmVyKGwpOw0KICAgICAgICBmb3IoTW91c2VMaXN0ZW5lciBsIDog
dGhpcy5nZXRNb3VzZUxpc3RlbmVycygpKQ0KICAgICAgICAgICAgZ2xjLmFkZE1vdXNlTGlzdGVu
ZXIobCk7DQogICAgICAgIGZvcihNb3VzZU1vdGlvbkxpc3RlbmVyIGwgOiB0aGlzLmdldE1vdXNl
TW90aW9uTGlzdGVuZXJzKCkpDQogICAgICAgICAgICBnbGMuYWRkTW91c2VNb3Rpb25MaXN0ZW5l
cihsKTsNCiAgICAgICAgZm9yKE1vdXNlV2hlZWxMaXN0ZW5lciBsIDogdGhpcy5nZXRNb3VzZVdo
ZWVsTGlzdGVuZXJzKCkpDQogICAgICAgICAgICBnbGMuYWRkTW91c2VXaGVlbExpc3RlbmVyKGwp
Ow0KICAgICAgICANCiAgICAgICAgdGhpcy5zZXRGdWxsc2NyZWVuKGZzKTsNCiAgICAgICAgdGhp
cy5zZXRWaXNpYmxlKHZpcyk7DQogICAgICAgIA0KICAgIH0NCiAgICAvKioNCiAgICAgKiBSZXBh
aW50IHRoZSBKRnJhbWUgYW5kIHJlbmRlciB0aGUgR0xDYW52YXMgaWYgbm8gYW5pbWF0b3IgaXMg
cHJlc2VudC4gIElmIGFuaW1hdG9yIGlzIGF0dGFjaGVkLCBvbmx5IHJlcGFpbnRzIHRoZSBKRnJh
bWUuDQogICAgICovDQogICAgcHVibGljIHZvaWQgcmVwYWludCgpIHsNCiAgICAgICAgc3VwZXIu
cmVwYWludCgpOw0KICAgICAgICBpZiAodGhpcy5hbmltYXRvciA9PSBudWxsKQ0KICAgICAgICAg
ICAgKChHTENhbnZhcyl0aGlzLm1haW5DYW52YXMpLmRpc3BsYXkoKTsNCiAgICB9DQogICAgLyoq
DQogICAgICogUmVtb3ZlcyBJbnB1dE1ldGhvZExpc3RlbmVycywgS2V5TGlzdGVuZXJzLE1vdXNl
TGlzdGVuZXJzLCBNb3VzZU1vdGlvbkxpc3RlbmVycywgYW5kIE1vdXNlV2hlZWxMaXN0ZW5lcnMg
ZnJvbSB0aGlzIGFuZCB0aGUgR0xDYW52YXMuDQogICAgICovDQogICAgcHVibGljIHZvaWQgY2xl
YXJJbnB1dExpc3RlbmVycygpIHsNCiAgICAgICAgSW5wdXRNZXRob2RMaXN0ZW5lcltdIGltbHMg
PSBzdXBlci5nZXRJbnB1dE1ldGhvZExpc3RlbmVycygpOw0KICAgICAgICBLZXlMaXN0ZW5lcltd
IGtscyA9IHN1cGVyLmdldEtleUxpc3RlbmVycygpOw0KICAgICAgICBNb3VzZUxpc3RlbmVyW10g
bWxzID0gc3VwZXIuZ2V0TW91c2VMaXN0ZW5lcnMoKTsNCiAgICAgICAgTW91c2VNb3Rpb25MaXN0
ZW5lcltdIG1tbHMgPSBzdXBlci5nZXRNb3VzZU1vdGlvbkxpc3RlbmVycygpOw0KICAgICAgICBN
b3VzZVdoZWVsTGlzdGVuZXJbXSBtd2xzID0gc3VwZXIuZ2V0TW91c2VXaGVlbExpc3RlbmVycygp
Ow0KICAgICAgICBmb3IoSW5wdXRNZXRob2RMaXN0ZW5lciBsIDogaW1scykgew0KICAgICAgICAg
ICAgbWFpbkNhbnZhcy5yZW1vdmVJbnB1dE1ldGhvZExpc3RlbmVyKGwpOw0KICAgICAgICAgICAg
c3VwZXIucmVtb3ZlSW5wdXRNZXRob2RMaXN0ZW5lcihsKTsNCiAgICAgICAgfQ0KICAgICAgICAN
CiAgICAgICAgZm9yKEtleUxpc3RlbmVyIGwgOiBrbHMpew0KICAgICAgICAgICAgbWFpbkNhbnZh
cy5yZW1vdmVLZXlMaXN0ZW5lcihsKTsNCiAgICAgICAgICAgIHN1cGVyLnJlbW92ZUtleUxpc3Rl
bmVyKGwpOw0KICAgICAgICB9DQogICAgICAgIGZvcihNb3VzZUxpc3RlbmVyIGwgOiBtbHMpew0K
ICAgICAgICAgICAgbWFpbkNhbnZhcy5yZW1vdmVNb3VzZUxpc3RlbmVyKGwpOw0KICAgICAgICAg
ICAgc3VwZXIucmVtb3ZlTW91c2VMaXN0ZW5lcihsKTsNCiAgICAgICAgfQ0KICAgICAgICBmb3Io
TW91c2VNb3Rpb25MaXN0ZW5lciBsIDogbW1scyl7DQogICAgICAgICAgICBtYWluQ2FudmFzLnJl
bW92ZU1vdXNlTW90aW9uTGlzdGVuZXIobCk7DQogICAgICAgICAgICBzdXBlci5yZW1vdmVNb3Vz
ZU1vdGlvbkxpc3RlbmVyKGwpOw0KICAgICAgICB9DQogICAgICAgIGZvcihNb3VzZVdoZWVsTGlz
dGVuZXIgbCA6IG13bHMpew0KICAgICAgICAgICAgbWFpbkNhbnZhcy5yZW1vdmVNb3VzZVdoZWVs
TGlzdGVuZXIobCk7DQogICAgICAgICAgICBzdXBlci5yZW1vdmVNb3VzZVdoZWVsTGlzdGVuZXIo
bCk7DQogICAgICAgIH0NCiAgICB9DQogICAgLyoqDQogICAgICogR2VuZXJhdGVzIGEgbmV3IHtA
bGluayBBbmltYXRvcn0gZm9yIHVwZGF0aW5nIHRoZSBHTENhbnZhcywgYW5kIHN0YXJ0cyBpdC4N
CiAgICAgKiBAcmV0dXJuIHRoZSBnZW5lcmF0ZWQgQW5pbWF0b3INCiAgICAgKi8NCiAgICBwdWJs
aWMgY29tLnN1bi5vcGVuZ2wudXRpbC5BbmltYXRvciBnZW5lcmF0ZUFuaW1hdG9yKCkgew0KICAg
ICAgICBpZiAodGhpcy5hbmltYXRvciAhPSBudWxsKSB7DQogICAgICAgICAgICB0aGlzLmFuaW1h
dG9yLnN0b3AoKTsNCiAgICAgICAgICAgIHRoaXMuYW5pbWF0b3IucmVtb3ZlKChHTENhbnZhcylt
YWluQ2FudmFzKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmFuaW1hdG9yID0gbmV3IGNvbS5z
dW4ub3BlbmdsLnV0aWwuQW5pbWF0b3IoKEdMQ2FudmFzKW1haW5DYW52YXMpOw0KICAgICAgICB0
aGlzLmFuaW1hdG9yLnN0YXJ0KCk7DQogICAgICAgIHJldHVybiB0aGlzLmFuaW1hdG9yOw0KICAg
IH0NCiAgICAvKioNCiAgICAgKiBSZXRyaWV2ZXMgdGhlIGF0dGFjaGVkIEFuaW1hdG9yIGNvbm5l
Y3RlZCB0byB0aGUgR0xDYW52YXMuDQogICAgICogQHJldHVybiBUaGUgQW5pbWF0b3IgYXR0YWNo
ZWQgdG8gdGhpcywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBBbmltYXRvcg0KICAgICAqLw0KICAg
IHB1YmxpYyBjb20uc3VuLm9wZW5nbC51dGlsLkFuaW1hdG9yIGdldEFuaW1hdG9yKCkgew0KICAg
ICAgICByZXR1cm4gdGhpcy5hbmltYXRvcjsNCiAgICB9DQogICAgLyoqDQogICAgICogU3BlY2lm
aWVzIGFuIHtAbGluayBBbmltYXRvcn0gZm9yIHVwZGF0aW5nIHRoZSBHTENhbnZhcywgYW5kIHN0
YXJ0cyBpdC4NCiAgICAgKiBAcGFyYW0gYW5pbSBBbmltYXRvciB0byB1c2UgdG8gYW5pbWF0ZSB0
aGUgR0xDYW52YXMNCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRBbmltYXRvcihjb20uc3Vu
Lm9wZW5nbC51dGlsLkFuaW1hdG9yIGFuaW0pIHsNCiAgICAgICAgdGhpcy5zZXRBbmltYXRvcihh
bmltLHRydWUpOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBTcGVjaWZpZXMgYW4ge0BsaW5rIEFu
aW1hdG9yfSBmb3IgdXBkYXRpbmcgdGhlIEdMQ2FudmFzLCBhbmQgb3B0aW9uYWxseSBzdGFydHMg
aXQuDQogICAgICogQHBhcmFtIGFuaW0gQW5pbWF0b3IgIHRvIHVzZSB0byBhbmltYXRlIHRoZSBH
TENhbnZhcw0KICAgICAqIEBwYXJhbSBzdGFydCBzdGFydHMgdGhlIGFuaW1hdG9yIGlmIHRydWUs
IGp1c3Qgc2V0cyBpdCBpZiBub3QNCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRBbmltYXRv
cihjb20uc3VuLm9wZW5nbC51dGlsLkFuaW1hdG9yIGFuaW0sIGJvb2xlYW4gc3RhcnQpIHsNCiAg
ICAgICAgaWYgKHRoaXMuYW5pbWF0b3IgIT0gbnVsbCkgew0KICAgICAgICAgICAgdGhpcy5hbmlt
YXRvci5zdG9wKCk7DQogICAgICAgICAgICB0aGlzLmFuaW1hdG9yLnJlbW92ZSgoR0xDYW52YXMp
bWFpbkNhbnZhcyk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5hbmltYXRvciA9IGFuaW07DQog
ICAgICAgIHRoaXMuYW5pbWF0b3IuYWRkKChHTENhbnZhcyltYWluQ2FudmFzKTsNCiAgICAgICAg
aWYgKHN0YXJ0KQ0KICAgICAgICAgICAgdGhpcy5hbmltYXRvci5zdGFydCgpOw0KICAgIH0NCiAg
ICAvKioNCiAgICAgKiBTdG9wcyBhbmQgcmVtb3ZlcyB0aGUge0BsaW5rIEFuaW1hdG9yfS4NCiAg
ICAgKi8NCiAgICBwdWJsaWMgdm9pZCByZW1vdmVBbmltYXRvcigpIHsNCiAgICAgICAgdGhpcy5h
bmltYXRvci5zdG9wKCk7DQogICAgICAgIHRoaXMuYW5pbWF0b3IucmVtb3ZlKChHTENhbnZhcylt
YWluQ2FudmFzKTsNCiAgICAgICAgdGhpcy5hbmltYXRvciA9IG51bGw7DQogICAgfQ0KICAgIC8q
Kg0KICAgICAqIERldGVybWluZXMgaWYgdGhpcyBHTEpGcmFtZSBpcyBydW5uaW5nIG9uIGFuIHtA
bGluayBBbmltYXRvcn0uDQogICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBHTEpGcmFtZSBoYXMg
YW4gYXR0YWNoZWQgYW5pbWF0b3IuDQogICAgICovDQogICAgcHVibGljIGJvb2xlYW4gaXNBbmlt
YXRlZCgpIHsNCiAgICAgICAgcmV0dXJuIChhbmltYXRvciE9bnVsbCk7DQogICAgfQ0KICAgIA0K
ICAgIC8qKg0KICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgbGlzdGVuZXIgc28gdGhh
dCBpdCBubyBsb25nZXIgcmVjZWl2ZXMga2V5IGV2ZW50cyBmcm9tIHRoaXMgY29tcG9uZW50IGFu
ZCB0aGUgR0xDYW52YXMuIFRoaXMgbWV0aG9kIHBlcmZvcm1zIG5vIGZ1bmN0aW9uLCBub3IgZG9l
cyBpdCB0aHJvdyBhbiBleGNlcHRpb24sIGlmIHRoZSBsaXN0ZW5lciBzcGVjaWZpZWQgYnkgdGhl
IGFyZ3VtZW50IHdhcyBub3QgcHJldmlvdXNseSBhZGRlZCB0byB0aGlzIGNvbXBvbmVudC4gSWYg
bGlzdGVuZXIgbCBpcyBudWxsLCBubyBleGNlcHRpb24gaXMgdGhyb3duIGFuZCBubyBhY3Rpb24g
aXMgcGVyZm9ybWVkLg0KICAgICAqIEBwYXJhbSBsIHRoZSBrZXkgbGlzdGVuZXIuDQogICAgICov
DQogICAgcHVibGljIHZvaWQgcmVtb3ZlS2V5TGlzdGVuZXIoS2V5TGlzdGVuZXIgbCkgew0KICAg
ICAgICBzdXBlci5yZW1vdmVLZXlMaXN0ZW5lcihsKTsNCiAgICAgICAgbWFpbkNhbnZhcy5yZW1v
dmVLZXlMaXN0ZW5lcihsKTsNCiAgICB9DQogICAgDQogICAgLyoqDQogICAgICogQWRkcyB0aGUg
c3BlY2lmaWVkIGtleSBsaXN0ZW5lciB0byByZWNlaXZlIGtleSBldmVudHMgZnJvbSB0aGlzIGNv
bXBvbmVudCBhbmQgdGhlIEdMQ2FudmFzLiBJZiBsIGlzIG51bGwsIG5vIGV4Y2VwdGlvbiBpcyB0
aHJvd24gYW5kIG5vIGFjdGlvbiBpcyBwZXJmb3JtZWQuDQogICAgICogQHBhcmFtIGwgdGhlIGtl
eSBsaXN0ZW5lci4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBhZGRLZXlMaXN0ZW5lcihLZXlM
aXN0ZW5lciBsKSB7DQogICAgICAgIHN1cGVyLmFkZEtleUxpc3RlbmVyKGwpOw0KICAgICAgICBt
YWluQ2FudmFzLmFkZEtleUxpc3RlbmVyKGwpOw0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAg
KiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgbW91c2UgbGlzdGVuZXIgc28gdGhhdCBpdCBubyBsb25n
ZXIgcmVjZWl2ZXMgbW91c2UgZXZlbnRzIGZyb20gdGhpcyBjb21wb25lbnQgYW5kIHRoZSBHTENh
bnZhcy4gVGhpcyBtZXRob2QgcGVyZm9ybXMgbm8gZnVuY3Rpb24sIG5vciBkb2VzIGl0IHRocm93
IGFuIGV4Y2VwdGlvbiwgaWYgdGhlIGxpc3RlbmVyIHNwZWNpZmllZCBieSB0aGUgYXJndW1lbnQg
d2FzIG5vdCBwcmV2aW91c2x5IGFkZGVkLiBJZiBsaXN0ZW5lciBsIGlzIG51bGwsIG5vIGV4Y2Vw
dGlvbiBpcyB0aHJvd24gYW5kIG5vIGFjdGlvbiBpcyBwZXJmb3JtZWQuDQogICAgICogQHBhcmFt
IGwgdGhlIG1vdXNlIGxpc3RlbmVyDQogICAgICovDQogICAgcHVibGljIHZvaWQgcmVtb3ZlTW91
c2VMaXN0ZW5lcihNb3VzZUxpc3RlbmVyIGwpIHsNCiAgICAgICAgc3VwZXIucmVtb3ZlTW91c2VM
aXN0ZW5lcihsKTsNCiAgICAgICAgbWFpbkNhbnZhcy5yZW1vdmVNb3VzZUxpc3RlbmVyKGwpOw0K
ICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiBBZGRzIHRoZSBzcGVjaWZpZWQgbW91c2UgbGlz
dGVuZXIgdG8gcmVjZWl2ZSBtb3VzZSBldmVudHMgZnJvbSB0aGlzIGNvbXBvbmVudCBhbmQgdGhl
IEdMQ2FudmFzLiBJZiBsaXN0ZW5lciBsIGlzIG51bGwsIG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24g
YW5kIG5vIGFjdGlvbiBpcyBwZXJmb3JtZWQuDQogICAgICogQHBhcmFtIGwgdGhlIG1vdXNlIGxp
c3RlbmVyDQogICAgICovDQogICAgcHVibGljIHZvaWQgYWRkTW91c2VMaXN0ZW5lcihNb3VzZUxp
c3RlbmVyIGwpIHsNCiAgICAgICAgc3VwZXIuYWRkTW91c2VMaXN0ZW5lcihsKTsNCiAgICAgICAg
bWFpbkNhbnZhcy5hZGRNb3VzZUxpc3RlbmVyKGwpOw0KICAgIH0NCiAgICANCiAgICAvKioNCiAg
ICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgbW91c2Ugd2hlZWwgbGlzdGVuZXIgc28gdGhhdCBp
dCBubyBsb25nZXIgcmVjZWl2ZXMgbW91c2Ugd2hlZWwgZXZlbnRzIGZyb20gdGhpcyBjb21wb25l
bnQgYW5kIHRoZSBHTENhbnZhcy4gVGhpcyBtZXRob2QgcGVyZm9ybXMgbm8gZnVuY3Rpb24sIG5v
ciBkb2VzIGl0IHRocm93IGFuIGV4Y2VwdGlvbiwgaWYgdGhlIGxpc3RlbmVyIHNwZWNpZmllZCBi
eSB0aGUgYXJndW1lbnQgd2FzIG5vdCBwcmV2aW91c2x5IGFkZGVkLiBJZiBsIGlzIG51bGwsIG5v
IGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIG5vIGFjdGlvbiBpcyBwZXJmb3JtZWQuDQogICAgICog
QHBhcmFtIGwgdGhlIG1vdXNlIHdoZWVsIGxpc3RlbmVyDQogICAgICovDQogICAgcHVibGljIHZv
aWQgcmVtb3ZlTW91c2VXaGVlbExpc3RlbmVyKE1vdXNlV2hlZWxMaXN0ZW5lciBsKSB7DQogICAg
ICAgIHN1cGVyLnJlbW92ZU1vdXNlV2hlZWxMaXN0ZW5lcihsKTsNCiAgICAgICAgbWFpbkNhbnZh
cy5yZW1vdmVNb3VzZVdoZWVsTGlzdGVuZXIobCk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAg
ICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBtb3VzZSBtb3Rpb24gbGlzdGVuZXIgc28gdGhhdCBp
dCBubyBsb25nZXIgcmVjZWl2ZXMgbW91c2UgbW90aW9uIGV2ZW50cyBmcm9tIHRoaXMgY29tcG9u
ZW50IGFuZCB0aGUgR0xDYW52YXMuIFRoaXMgbWV0aG9kIHBlcmZvcm1zIG5vIGZ1bmN0aW9uLCBu
b3IgZG9lcyBpdCB0aHJvdyBhbiBleGNlcHRpb24sIGlmIHRoZSBsaXN0ZW5lciBzcGVjaWZpZWQg
YnkgdGhlIGFyZ3VtZW50IHdhcyBub3QgcHJldmlvdXNseSBhZGRlZC4gSWYgbGlzdGVuZXIgbCBp
cyBudWxsLCBubyBleGNlcHRpb24gaXMgdGhyb3duIGFuZCBubyBhY3Rpb24gaXMgcGVyZm9ybWVk
Lg0KICAgICAqIEBwYXJhbSBsIHRoZSBtb3VzZSBtb3Rpb24gbGlzdGVuZXIuDQogICAgICovDQog
ICAgcHVibGljIHZvaWQgcmVtb3ZlTW91c2VNb3Rpb25MaXN0ZW5lcihNb3VzZU1vdGlvbkxpc3Rl
bmVyIGwpIHsNCiAgICAgICAgc3VwZXIucmVtb3ZlTW91c2VNb3Rpb25MaXN0ZW5lcihsKTsNCiAg
ICAgICAgbWFpbkNhbnZhcy5yZW1vdmVNb3VzZU1vdGlvbkxpc3RlbmVyKGwpOw0KICAgIH0NCiAg
ICANCiAgICAvKioNCiAgICAgKg0KICAgICAqIEFkZHMgdGhlIHNwZWNpZmllZCBtb3VzZSB3aGVl
bCBsaXN0ZW5lciB0byByZWNlaXZlIG1vdXNlIHdoZWVsIGV2ZW50cyBmcm9tIHRoaXMgY29tcG9u
ZW50IGFuZCB0aGUgR0xDYW52YXMuDQogICAgICoNCiAgICAgKiBGb3IgaW5mb3JtYXRpb24gb24g
aG93IG1vdXNlIHdoZWVsIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCwgc2VlIHRoZSBjbGFzcyBkZXNj
cmlwdGlvbiBmb3Ige0BsaW5rIE1vdXNlV2hlZWxFdmVudH0uDQogICAgICoNCiAgICAgKiBJZiBs
IGlzIG51bGwsIG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIG5vIGFjdGlvbiBpcyBwZXJmb3Jt
ZWQuDQogICAgICogQHBhcmFtIGwgdGhlIG1vdXNlIHdoZWVsIGxpc3RlbmVyDQogICAgICovDQog
ICAgcHVibGljIHZvaWQgYWRkTW91c2VXaGVlbExpc3RlbmVyKE1vdXNlV2hlZWxMaXN0ZW5lciBs
KSB7DQogICAgICAgIHN1cGVyLmFkZE1vdXNlV2hlZWxMaXN0ZW5lcihsKTsNCiAgICAgICAgbWFp
bkNhbnZhcy5hZGRNb3VzZVdoZWVsTGlzdGVuZXIobCk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0K
ICAgICAqIEFkZHMgdGhlIHNwZWNpZmllZCBtb3VzZSBtb3Rpb24gbGlzdGVuZXIgdG8gcmVjZWl2
ZSBtb3VzZSBtb3Rpb24gZXZlbnRzIGZyb20gdGhpcyBjb21wb25lbnQgYW5kIHRoZSBHTENhbnZh
cy4gSWYgbGlzdGVuZXIgbCBpcyBudWxsLCBubyBleGNlcHRpb24gaXMgdGhyb3duIGFuZCBubyBh
Y3Rpb24gaXMgcGVyZm9ybWVkLg0KICAgICAqIEBwYXJhbSBsIHRoZSBtb3VzZSBtb3Rpb24gbGlz
dGVuZXIuDQogICAgICovDQogICAgcHVibGljIHZvaWQgYWRkTW91c2VNb3Rpb25MaXN0ZW5lcihN
b3VzZU1vdGlvbkxpc3RlbmVyIGwpIHsNCiAgICAgICAgc3VwZXIuYWRkTW91c2VNb3Rpb25MaXN0
ZW5lcihsKTsNCiAgICAgICAgbWFpbkNhbnZhcy5hZGRNb3VzZU1vdGlvbkxpc3RlbmVyKGwpOw0K
ICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgaW5wdXQg
bWV0aG9kIGxpc3RlbmVyIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIHJlY2VpdmVzIGlucHV0IG1ldGhv
ZCBldmVudHMgZnJvbSB0aGlzIGNvbXBvbmVudCBhbmQgdGhlIEdMQ2FudmFzLiBUaGlzIG1ldGhv
ZCBwZXJmb3JtcyBubyBmdW5jdGlvbiwgbm9yIGRvZXMgaXQgdGhyb3cgYW4gZXhjZXB0aW9uLCBp
ZiB0aGUgbGlzdGVuZXIgc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudCB3YXMgbm90IHByZXZpb3Vz
bHkgYWRkZWQuIElmIGxpc3RlbmVyIGwgaXMgbnVsbCwgbm8gZXhjZXB0aW9uIGlzIHRocm93biBh
bmQgbm8gYWN0aW9uIGlzIHBlcmZvcm1lZC4NCiAgICAgKiBAcGFyYW0gbCB0aGUgaW5wdXQgbWV0
aG9kIGxpc3RlbmVyDQogICAgICovDQogICAgcHVibGljIHZvaWQgcmVtb3ZlSW5wdXRNZXRob2RM
aXN0ZW5lcihqYXZhLmF3dC5ldmVudC5JbnB1dE1ldGhvZExpc3RlbmVyIGwpIHsNCiAgICAgICAg
c3VwZXIucmVtb3ZlSW5wdXRNZXRob2RMaXN0ZW5lcihsKTsNCiAgICAgICAgbWFpbkNhbnZhcy5y
ZW1vdmVJbnB1dE1ldGhvZExpc3RlbmVyKGwpOw0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAg
KiBBZGRzIHRoZSBzcGVjaWZpZWQgaW5wdXQgbWV0aG9kIGxpc3RlbmVyIHRvIHJlY2VpdmUgaW5w
dXQgbWV0aG9kIGV2ZW50cyBmcm9tIHRoaXMgY29tcG9uZW50IGFuZCB0aGUgR0xDYW52YXMuIEEg
Y29tcG9uZW50IHdpbGwgb25seSByZWNlaXZlIGlucHV0IG1ldGhvZCBldmVudHMgZnJvbSBpbnB1
dCBtZXRob2RzIGlmIGl0IGFsc28gb3ZlcnJpZGVzIGdldElucHV0TWV0aG9kUmVxdWVzdHMgdG8g
cmV0dXJuIGFuIElucHV0TWV0aG9kUmVxdWVzdHMgaW5zdGFuY2UuIElmIGxpc3RlbmVyIGwgaXMg
bnVsbCwgbm8gZXhjZXB0aW9uIGlzIHRocm93biBhbmQgbm8gYWN0aW9uIGlzIHBlcmZvcm1lZC4N
CiAgICAgKiBAcGFyYW0gbCB0aGUgaW5wdXQgbWV0aG9kIGxpc3RlbmVyDQogICAgICovDQogICAg
cHVibGljIHZvaWQgYWRkSW5wdXRNZXRob2RMaXN0ZW5lcihqYXZhLmF3dC5ldmVudC5JbnB1dE1l
dGhvZExpc3RlbmVyIGwpIHsNCiAgICAgICAgc3VwZXIuYWRkSW5wdXRNZXRob2RMaXN0ZW5lcihs
KTsNCiAgICAgICAgbWFpbkNhbnZhcy5hZGRJbnB1dE1ldGhvZExpc3RlbmVyKGwpOw0KICAgIH0N
CiAgICAvKioNCiAgICAgKiBHZXRzIHRoZSBHTCBwaXBlbGluZSBmb3IgdGhlIGNhbnZhcyBpbiB0
aGlzIEdMSlBhbmUuDQogICAgICogQHJldHVybiB0aGUgR0wgcGlwZWxpbmUgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgR0xDYW52YXMNCiAgICAgKiBAc2VlIGphdmF4Lm1lZGlhLm9wZW5nbC5HTENhbnZh
cyNnZXRHTCgpDQogICAgICovDQogICAgcHVibGljIEdMIGdldEdMKCkgew0KICAgICAgICByZXR1
cm4gKChHTENhbnZhcyltYWluQ2FudmFzKS5nZXRHTCgpOw0KICAgIH0NCiAgICAvKioNCiAgICAg
KiAgU2V0cyB0aGUgR0wgcGlwZWxpbmUgZm9yIHRoZSBjYW52YXMgaW4gdGhpcyBHTEpQYW5lLg0K
ICAgICAqIEBzZWUgamF2YXgubWVkaWEub3BlbmdsLkdMQ2FudmFzI3NldEdMKGphdmF4Lm1lZGlh
Lm9wZW5nbC5HTCkNCiAgICAgKiBAcGFyYW0gZ2wgVGhlIHBpcGVsaW5lIHRvIGF0dGFjaCB0byB0
aGlzIEdMQ2FudmFzDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0R0woR0wgZ2wpIHsNCiAg
ICAgICAgKChHTENhbnZhcyltYWluQ2FudmFzKS5zZXRHTChnbCk7DQogICAgfQ0KICAgIC8qKg0K
ICAgICAqIFJldHJpZXZlcyB0aGUgR0xDb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgR0xDYW52
YXMgb24gdGhpcyBHTEpGcmFtZQ0KICAgICAqIEBzZWUgamF2YXgubWVkaWEub3BlbmdsLkdMQ2Fu
dmFzI2dldENvbnRleHQoKQ0KICAgICAqIEByZXR1cm4gdGhlIGFzc29jaWF0ZWQgR0xDb250ZXh0
DQogICAgICovDQogICAgcHVibGljIEdMQ29udGV4dCBnZXRDb250ZXh0KCkgew0KICAgICAgICBy
ZXR1cm4gKChHTENhbnZhcyltYWluQ2FudmFzKS5nZXRDb250ZXh0KCk7DQogICAgfQ0KICAgIA0K
fQ0K
</data>

          </attachment>
      

    </bug>

</bugzilla>