Getting MDR 4.0 working with TCK

"Brian Topping" <[email protected]> Wed, 20 Oct 2004 07:21:25 -0400
Newsgroups gmane.comp.java.netbeans.modules.mdr.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.

------_=_NextPart_001_01C4B696.EFA79900
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi Martin & Co.

I'm trying to get the JMI TCK working against the MDR 4.0 sources, but =
not
having much luck.  I think I usually get an NPE on all the tests except =
the
SignatureTest.  Since MDR still works, I'm guessing it's in the =
interface to
the TCK.  I updated it as best I could and attached it here.  It is =
loading
the test MOF input files and generating the first dozen or so lines of =
the
classes in the output directory but dies on every test as in this stack
trace:

DEBUG [20 Oct '04 7:09:01] - metamodel=3Dcz.tst.Cluster
DEBUG [20 Oct '04 7:09:01] - xmi import =
path=3Dmetamodels/cz/tst/Cluster.xml
ERROR [20 Oct '04 7:09:01] -=20
java.lang.NullPointerException
	at java.util.Hashtable.get(Hashtable.java:333)
	at
org.netbeans.lib.jmi.mapping.GenericMapper.getTypeName(GenericMapper.java=
:185
)
	at
org.netbeans.lib.jmi.mapping.JavaMapper.structureTemplate(JavaMapper.java=
:107
0)
	at
org.netbeans.lib.jmi.mapping.GenericMapper.visitRefObject(GenericMapper.j=
ava:
353)
	at
org.netbeans.lib.jmi.mapping.GenericMapper.visitRefObject(GenericMapper.j=
ava:
330)
	at
org.netbeans.lib.jmi.mapping.GenericMapper.visitRefPackage(GenericMapper.=
java
:384)
	at
org.netbeans.lib.jmi.mapping.GenericMapper.visitRefBaseObject(GenericMapp=
er.j
ava:392)
	at
org.netbeans.lib.jmi.mapping.JMIMapperImpl.generate(JMIMapperImpl.java:57=
)
	at
org.netbeans.mdr.jmitck.OldNBMDRGenerator.generateJMI(OldNBMDRGenerator.j=
ava:
318)
	at
org.netbeans.mdr.jmitck.OldNBMDRGenerator.generate(OldNBMDRGenerator.java=
:137
)
	at
com.sun.jmitck.MetamodelLoader.loadIfNecessary(MetamodelLoader.java:96)
	at
com.sun.jmitck.mapping.JmiMappingTestScript.setupIfNecessary(JmiMappingTe=
stSc
ript.java:93)
	at
com.sun.jmitck.mapping.JmiMappingTestScript.runScript(JmiMappingTestScrip=
t.ja
va:51)
	at com.sun.jmitck.JmiScript.run(JmiScript.java:70)
	at com.sun.javatest.Script.run(Script.java:220)
	at com.sun.javatest.Harness.runTest(Harness.java:648)
	at com.sun.javatest.Harness.access$800(Harness.java:33)
	at com.sun.javatest.Harness$2.run(Harness.java:748)
INFO [20 Oct '04 7:09:01] - =3D=3D=3D Test Completed
(mapping/cz/tst/testpackage1/SubclassClass.html/Test48) <<<<

I've attached the Generator I cooked up from what's in the TCK.  Summary =
of
changes were to take the generator class out of the loader loop; I think =
I
understand the use of MetaInfServicesLookup now and it didn't look =
compatible
with the code that was in the Generator.  Otherwise, just went through =
and
converted to using the static getInstance interfaces on the four points =
the
Generator grabs classes from the MDR classpath.  It seems like it =
wouldn't be
loading the MOF if it was really bad, but I'm not sure.

Thanks a bunch for any time you can make for this.

-b

------_=_NextPart_001_01C4B696.EFA79900
Content-Type: application/octet-stream;
	name="OldNBMDRGenerator.java"
Content-Transfer-Encoding: base64
Content-Description: OldNBMDRGenerator.java
Content-Disposition: attachment;
	filename="OldNBMDRGenerator.java"

LyoKICogJEZpbGUkICAgICAgICAkUmV2aXNpb24kICAgJERhdGUkICAkQXV0aG9yJAogKgogKiBD
b3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuCiAqLwpwYWNrYWdlIG9yZy5uZXRi
ZWFucy5tZHIuam1pdGNrOwoKaW1wb3J0IGNvbS5zdW4uamF2YXRlc3QuU3RhdHVzOwppbXBvcnQg
b3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CmltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWls
ZEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlByb2plY3Q7CmltcG9ydCBv
cmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5KYXZhYzsKaW1wb3J0IG9yZy5uZXRiZWFucy5h
cGkubWRyLkNyZWF0aW9uRmFpbGVkRXhjZXB0aW9uOwppbXBvcnQgb3JnLm5ldGJlYW5zLmFwaS5t
ZHIuSk1JTWFwcGVyOwppbXBvcnQgb3JnLm5ldGJlYW5zLmFwaS5tZHIuTURSTWFuYWdlcjsKaW1w
b3J0IG9yZy5uZXRiZWFucy5hcGkubWRyLk1EUmVwb3NpdG9yeTsKaW1wb3J0IG9yZy5uZXRiZWFu
cy5hcGkueG1pLlhNSVJlYWRlcjsKaW1wb3J0IG9yZy5uZXRiZWFucy5hcGkueG1pLlhNSVJlYWRl
ckZhY3Rvcnk7CmltcG9ydCBvcmcubmV0YmVhbnMubW9kdWxlcy5qbWl1dGlscy5GU1NGSW1wbDsK
aW1wb3J0IG9yZy5vcGVuaWRlLmZpbGVzeXN0ZW1zLkxvY2FsRmlsZVN5c3RlbTsKaW1wb3J0IG9y
Zy5vcGVuaWRlLnV0aWwuTG9va3VwOwppbXBvcnQgb3JnLm9wZW5pZGUudXRpbC5Mb29rdXBMaXN0
ZW5lcjsKCmltcG9ydCBqYXZheC5qbWkubW9kZWwuTW9kZWxQYWNrYWdlOwppbXBvcnQgamF2YXgu
am1pLnJlZmxlY3QuUmVmUGFja2FnZTsKaW1wb3J0IGphdmF4LmptaS54bWkuTWFsZm9ybWVkWE1J
RXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5GaWxlOwppbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0
U3RyZWFtOwppbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKaW1wb3J0IGphdmEubmV0LlVSTDsK
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsK
Ci8qKgogKiBJbnRlcmFjdGluZyB3aXRoIEpNSSBUQ0sgZm9yIHRoZSBjb2RlIGdlbmVyYXRpb24K
ICogZmVhdHVyZXMgb2YgTmV0YmVhbnMgTURSIGltcGxlbWVudGF0aW9uIG9mIEpNSS4KICovCnB1
YmxpYyBjbGFzcyBPbGROQk1EUkdlbmVyYXRvciBpbXBsZW1lbnRzIGNvbS5zdW4uam1pdGNrLnZl
bmRvcndyYXBwZXIuR2VuZXJhdG9yIHsKICAgIHByaXZhdGUgTURSZXBvc2l0b3J5IHJlcG9zaXRv
cnkgPSBudWxsOwogICAgcHJpdmF0ZSBQcm9wZXJ0aWVzIHByb3BzOwogICAgcHJpdmF0ZSBGaWxl
IGZpbGVSb290RGlyOwogICAgcHJpdmF0ZSBGaWxlIGdlbmVyYXRlZEZpbGVEaXI7CiAgICBwcml2
YXRlIFByaW50V3JpdGVyIHN0YWNrVHJhY2VMb2dXcml0ZXIgPSBudWxsOwogICAgLyoqCiAgICAg
KiBAcGFyYW0gQXJyYXlMaXN0IC0gZm9yIFJlcG9zaXRvcnlMb29rdXAuCiAgICAgKi8KCiAgICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nID0gTG9nZ2VyLmdldExvZ2dlcihPbGROQk1E
UkdlbmVyYXRvci5jbGFzcyk7CgogICAgLyoqCiAgICAgKiBJbnN0YW50aWF0ZSBMb29rdXAgJmFt
cDsgY3JlYXRlIG5ldyBSZXBvc2l0b3J5TG9va3VwLgogICAgICovCiAgICBwdWJsaWMgT2xkTkJN
RFJHZW5lcmF0b3IoKSB7CiAgICAgICAgLy8gcHJvcGVydGllcyBzZXQgZm9yIHJ1bm5pbmcgTURS
IHdpdGhvdXQgTmV0YmVhbnMgSURFCiAgICAgICAgaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3Jn
Lm9wZW5pZGUudmVyc2lvbiIpID09IG51bGwpIHsKICAgICAgICAgICAgU3lzdGVtLnNldFByb3Bl
cnR5KCJvcmcubmV0YmVhbnMubWRyLnN0b3JhZ2Vtb2RlbC5TdG9yYWdlRmFjdG9yeUNsYXNzTmFt
ZSIsICJvcmcubmV0YmVhbnMubWRyLnBlcnNpc3RlbmNlLmJ0cmVlaW1wbC5idHJlZXN0b3JhZ2Uu
QnRyZWVGYWN0b3J5Iik7CiAgICAgICAgfQoKLy8gICAgICBpbnN0YW5jZXMuYWRkKG5ldyBOQk1E
Uk1hbmFnZXJJbXBsKCkpOwovLyAgICAgIGluc3RhbmNlcy5hZGQobmV3IFhNSVNheFJlYWRlcklt
cGwoKSk7Ci8vICAgICAgaW5zdGFuY2VzLmFkZChuZXcgSk1JTWFwcGVySW1wbCgpKTsKLy8gICAg
ICBpbnN0YW5jZXMuYWRkKG5ldyBYTUlXcml0ZXJJbXBsKCkpOwoKICAgICAgICB0cnkgewogICAg
ICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJzdGFj
a3RyYWNlLmxvZyIpOwogICAgICAgICAgICBzdGFja1RyYWNlTG9nV3JpdGVyID0gbmV3IFByaW50
V3JpdGVyKG91dCk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAg
Ly8gRmlsZU5vdEZvdW5kRXhjZXB0aW9uIG9yIFNlY3VyaXR5RXhjZXB0aW9uCiAgICAgICAgICAg
IGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUGVy
Zm9ybSBhbnkgcmVxdWlyZWQgaW5paWFsaXphdGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogICAgICog
TURSIHdpbGwgZ2VuZXJhdGUgSk1JIGZpbGVzIHRvICRUQ0tESVIvc2VydmVycywgdGh1cyB3ZSB3
aWxsCiAgICAgKiBoYXZlIHRvIGlucHV0IHRoZSBzYW1lIHBhdGggaW4gSmF2YXRlc3QgQ29uZmln
dXJhdGlvbiBJbnRlcnZpZXcuCiAgICAgKgogICAgICogQHBhcmFtIHAgICAgICAgcHJvcGVydGll
cyBsb2FkZWQgZnJvbSBhIHByb3BlcnRpZXMgZmlsZSwgaWYgcHJvdmlkZWQKICAgICAqICAgICAg
ICAgICAgICAgIGJ5IHRoZSB2ZW5kb3IgKG1heSBiZSBudWxsKQogICAgICogQHBhcmFtIHJvb3RE
aXIgdGhlIHJvb3QgZGlyZWN0b3J5IGZvciB0aGUgSmF2YXRlc3QgZXhlY3V0aW9uCiAgICAgKi8K
ICAgIHB1YmxpYyB2b2lkIGluaXQoUHJvcGVydGllcyBwLCBGaWxlIHJvb3REaXIpIHsKICAgICAg
ICB0aGlzLnByb3BzID0gcDsKICAgICAgICB0aGlzLmZpbGVSb290RGlyID0gcm9vdERpcjsKCiAg
ICAgICAgLy8gbWltaWMgUkkgVENLIFdyYXBwZXIsIGdlbmVyYXRlIEpNSSB0byByb290RGlyL3Nl
cnZlcnMKICAgICAgICBTdHJpbmcgZ2VuRmlsZVBhdGggPSByb290RGlyLnRvU3RyaW5nKCkgKyBT
eXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIikgKyAic2VydmVycyI7CiAgICAgICAg
U3lzdGVtLnNldFByb3BlcnR5KCJvcmcubmV0YmVhbnMubWRyLnBlcnNpc3RlbmNlLkRpciIsIGdl
bkZpbGVQYXRoKTsKCiAgICAgICAgbG9nLmRlYnVnKCJyb290RGlyID0gIiArIHJvb3REaXIpOwog
ICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8vIGxvY2F0aW9uIGZvciBnZW5lcmF0aW5nIEpNSSBj
bGFzcyBmaWxlcwogICAgICAgICAgICBnZW5lcmF0ZWRGaWxlRGlyID0gbmV3IEZpbGUoZ2VuRmls
ZVBhdGgpOwogICAgICAgICAgICBnZW5lcmF0ZWRGaWxlRGlyLm1rZGlyKCk7CiAgICAgICAgICAg
IGdlbkZpbGVQYXRoID0gZ2VuZXJhdGVkRmlsZURpci5nZXRDYW5vbmljYWxQYXRoKCk7CiAgICAg
ICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiU2VydmVyLkRpcmVjdG9yeSIsIGdlbkZpbGVQYXRo
KTsKICAgICAgICB9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAg
ICBpb2UucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2VMb2dXcml0ZXIpOwogICAgICAgICAgICBs
b2cuZXJyb3IoIiIsIGlvZSk7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJFcnJvciBpbiBjcmVhdGluZyBwYXRoIGZvciBKTUkgZ2VuZXJhdGlvbiEiKTsKICAgICAgICB9
CiAgICAgICAgbG9nLmRlYnVnKCJnZW5GaWxlUGF0aCA9ICIgKyBnZW5GaWxlUGF0aCk7CgogICAg
ICAgIHJlcG9zaXRvcnkgPSBNRFJNYW5hZ2VyLmdldERlZmF1bHQoKS5nZXREZWZhdWx0UmVwb3Np
dG9yeSgpOwogICAgICAgIGxvZy5kZWJ1ZygicmVwb3NpdG9yeSA9ICIgKyByZXBvc2l0b3J5KTsK
ICAgICAgICBpZiAocmVwb3NpdG9yeSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiUmVwb3NpdG9yeSBub3QgZm91bmQhIik7CiAgICAgICAgZWxzZQogICAg
ICAgICAgICByZXBvc2l0b3J5LmdldEV4dGVudE5hbWVzKCk7CS8vIHN0YXJ0IHVwIHRoZSByZXBv
c2l0b3J5CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgY29kZSBjb3JyZXNwb25k
aW5nIHRvIHRoZSBuYW1lZCBtZXRhbW9kZWwuICBUaGlzCiAgICAgKiBtZXRob2QgbXVzdCBsb2Fk
IHRoZSBYTUkgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZXRhbW9kZWwKICAgICAqIG5hbWUs
IGFuZCBnZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBieXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRo
ZQogICAgICogSk1JIHNwZWNpZmljYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIG1ldGFtb2Rl
bCAgICAgIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1ldGFtb2RlbCwgd2hpY2gKICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGNvcnJlc3BvbmQgdG8gYW4gWE1JIGZpbGUg
aW4gdGhlIDxjb2RlPm1ldGFtb2RlbHM8L2NvZGU+CiAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0b3J5CiAgICAgKiBAcGFyYW0gU3RyaW5nICAgICAgICAgeG1pRmlsZUxvY2F0aW9u
IGZpbGUgbG9jYXRpb24gb2YgdGhlIFhNSSBmaWxlCiAgICAgKiBAcGFyYW0gaW50ZXJmYWNlc09u
bHkgW2lnbm9yZWQgYnkgTURSXQogICAgICogICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHdo
ZW4gb25seSB0aGUgaW50ZXJmYWNlcywgZW51bQogICAgICogICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzZXMsIGFuZCBleGNlcHRpb25zIHNwZWNpZmllZCBieSB0aGUgSk1JIG5lZWQgYmUgZ2Vu
ZXJhdGVkLgogICAgICogICAgICAgICAgICAgICAgICAgICAgIFdoZW4gZmFsc2UsIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aG9zZSBpbnRlcmZhY2VzIG11c3QgYWxzbyBiZQogICAgICogICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVhdGVkLgogICAgICogQHJldHVybiBhIFN0YXR1cyBpbnN0YW5j
ZSwgc2V0IHRvIGVpdGhlciBwYXNzZWQsIGlmIGNvZGUKICAgICAqICAgICAgICAgZ2VuZXJhdGlv
biBjb21wbGV0ZWQsIG9yIHRvIGVycm9yLCBpZiBub3QuCiAgICAgKi8KICAgIHB1YmxpYyBTdGF0
dXMgZ2VuZXJhdGUoU3RyaW5nIG1ldGFtb2RlbCwgU3RyaW5nIHhtaUltcG9ydFBhdGgsIGJvb2xl
YW4gaW50ZXJmYWNlc09ubHkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsb2cuZGVidWco
Im1ldGFtb2RlbD0iICsgbWV0YW1vZGVsKTsKICAgICAgICAgICAgbG9nLmRlYnVnKCJ4bWkgaW1w
b3J0IHBhdGg9IiArIHhtaUltcG9ydFBhdGgpOwoKICAgICAgICAgICAgbG9hZFhNSU1vZGVsKG1l
dGFtb2RlbCwgeG1pSW1wb3J0UGF0aCk7CiAgICAgICAgICAgIGdlbmVyYXRlSk1JKG1ldGFtb2Rl
bCwgZ2VuZXJhdGVkRmlsZURpcik7CiAgICAgICAgICAgIGNvbXBpbGVKTUkoZ2VuZXJhdGVkRmls
ZURpcik7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgLy90LnBy
aW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICBsb2cuZXJyb3IoIiIsIHQpOwogICAgICAgICAg
ICByZXR1cm4gU3RhdHVzLmVycm9yKHQudG9TdHJpbmcoKSk7CiAgICAgICAgfQoKICAgICAgICBy
ZXR1cm4gU3RhdHVzLnBhc3NlZCgiQ29kZSBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IGZvciBtZXRh
bW9kZWw6ICIgKyBtZXRhbW9kZWwpOwogICAgfQoKICAgIC8qKgogICAgICogW1JldHVybnMgbnVs
bCBzaW5jZSBNRFIgaGFzIG5vIHN1Y2ggZGVwZW5kZW5jeS5dCiAgICAgKiA8cC8+CiAgICAgKiBS
ZXR1cm5zIHRoZSBjbGFzc3BhdGggcmVxdWlyZWQgZm9yIHRoZSBnZW5lcmF0ZWQgY29kZS4gIFRo
aXMKICAgICAqIG1ldGhvZCBvbmx5IG5lZWRzIHRvIGNyZWF0ZSB0aGUgY2xhc3NwYXRoIGlmIHRo
ZSBjbGFzc3BhdGggb2YKICAgICAqIGdlbmVyYXRlZCBjb2RlIGNoYW5nZXMgZnJvbSBvbmUgZ2Vu
ZXJhdGlvbiBleGVjdXRpb24gdG8gdGhlCiAgICAgKiBuZXh0LiAgRm9yIGluc3RhbmNlLCBpZiB0
aGUgaW1wbGVtZW50aW9uIHBsYWNlcyB0aGUgZ2VuZXJhdGVkCiAgICAgKiBjb2RlIGluIGEgamFy
IGZpbGUgbmFtZWQgYWZ0ZXIgdGhlIG1ldGFtb2RlbCwgdGhpcyBtZXRob2Qgd291bGQKICAgICAq
IGJlIGludm9rZWQuICBUaGUgY2hvaWNlIHdoZXRoZXIgdGhpcyBtZXRob2QgaXMgaW52b2tlZCBv
ciBub3QgaXMKICAgICAqIGNvbnRyb2xsZWQgYnkgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBz
ZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KICAgICAqIGVkaXRvci4KICAgICAqCiAgICAgKiBAcGFy
YW0gbWV0YW1vZGVsIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgbWV0YW1vZGVsICh0
aGUKICAgICAqICAgICAgICAgICAgICAgICAgc2FtZSBuYW1lIHRoYXQgaXMgcGFzc2VkIGluIHRv
IHRoZSBnZW5lcmF0ZSBtZXRob2QpLgogICAgICogQHJldHVybiBhIGNsYXNzcGF0aCwgdXNpbmcg
dGhlIGNsYXNzcGF0aCBzZXBhcmF0b3JzIGFwcHJvcHJpYXRlCiAgICAgKiAgICAgICAgIGZvciB0
aGUgY3VycmVudCBwbGF0Zm9ybQogICAgICovCiAgICBwdWJsaWMgU3RyaW5nIGdldE1ldGFtb2Rl
bExvYWRQYXRoKFN0cmluZyBtZXRhbW9kZWwpIHsKICAgICAgICAvLyByZXR1cm4gInNlcnZlcnM6
bmV0YmVhbnMvbmJtZHIuamFyIjsKICAgICAgICAvLyBsZXQgdGhlIENvbmZpZ3VyYXRpb24gRWRp
dG9yIHRha2VzIGNhcmUgb2YgaXQ7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoq
CiAgICAgKiBSZXR1cm5zIGEgbmV3IFJlZlBhY2thZ2UsIHJldHVybmluZyBhIHVuaXF1ZSBpZGVu
dGlmaWVyLCB3aGljaAogICAgICogY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBuZXcgUmVmUGFj
a2FnZS4KICAgICAqIFByZS1jb25kaXRpb24gZm9yIE1EUjogdGhlIGdlbmVyYXRlZCBpbnRlcmZh
Y2VzIG11c3QgYmUgY29udGFpbmVkIGluIHRoZQogICAgICogJENMQVNTUEFUSC4KICAgICAqCiAg
ICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgdGhlIG5hbWUgb2YgdGhlIE1vZGVsLlBhY2thZ2UgZGVm
aW5pbmcgdGhlIFJlZlBhY2thZ2UKICAgICAqIEBwYXJhbSBwcmVmaXggICAgICB0aGUgcGFja2Fn
ZSBwcmVmaXggdXNlZCBpbiBjb2RlIGdlbmVyYXRpb24gKGFzCiAgICAgKiAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lZCBieSBhIHRhZyBpbiB0aGUgbWV0YW1vZGVsKQogICAgICogQHJldHVybiBS
ZWZQYWNrYWdlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UsIG51bGwgaWYgZXJyb3Igb2NjdXJlZAog
ICAgICovCiAgICBwdWJsaWMgUmVmUGFja2FnZSBjcmVhdGVSZWZQYWNrYWdlKFN0cmluZyBwYWNr
YWdlTmFtZSwgU3RyaW5nIHByZWZpeCkgewogICAgICAgIFN0cmluZyBuYW1lc1tdID0gcmVwb3Np
dG9yeS5nZXRFeHRlbnROYW1lcygpOwogICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgaW5z
dGFuY2VzCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewog
ICAgICAgICAgICBSZWZQYWNrYWdlIGV4dGVudCA9IHJlcG9zaXRvcnkuZ2V0RXh0ZW50KG5hbWVz
W2ldKTsKICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBpdCBpcyBpbnN0YW5jZSBvZiBNT0Yg
bW9kZWwKICAgICAgICAgICAgaWYgKGV4dGVudCBpbnN0YW5jZW9mIGphdmF4LmptaS5tb2RlbC5N
b2RlbFBhY2thZ2UpIHsKICAgICAgICAgICAgICAgIGphdmF4LmptaS5tb2RlbC5Nb2RlbFBhY2th
Z2UgcGtnID0gKGphdmF4LmptaS5tb2RlbC5Nb2RlbFBhY2thZ2UpIGV4dGVudDsKICAgICAgICAg
ICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHBhY2thZ2VzIGluIHRoZSBpbnN0YW5j
ZQogICAgICAgICAgICAgICAgZm9yIChqYXZhLnV0aWwuSXRlcmF0b3IgaXQgPSBwa2cuZ2V0TW9m
UGFja2FnZSgpLnJlZkFsbE9mQ2xhc3MoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CiAg
ICAgICAgICAgICAgICAgICAgamF2YXguam1pLm1vZGVsLk1vZlBhY2thZ2UgdGVtcCA9IChqYXZh
eC5qbWkubW9kZWwuTW9mUGFja2FnZSkgaXQubmV4dCgpOwogICAgICAgICAgICAgICAgICAgIC8v
IGNoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgaXMgb2YgdGhlIHNlYXJjaGVkIG5hbWUgYW5kIHdo
ZXRoZXIgaXQgaXMgb3V0ZXJtb3N0CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAuZ2V0TmFt
ZSgpLmVxdWFscyhwYWNrYWdlTmFtZSkgJiYgdGVtcC5nZXRDb250YWluZXIoKSA9PSBudWxsKQog
ICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXBvc2l0b3J5LmNyZWF0ZUV4dGVudCgiSW5z
dGFuY2Ugb2YgIiArIHBhY2thZ2VOYW1lLCB0ZW1wKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoQ3JlYXRpb25GYWlsZWRFeGNlcHRpb24gY2ZlKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjZmUucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2VMb2dXcml0ZXIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKCIiLCBjZmUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oY2ZlLmdldE1lc3NhZ2Uo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgICAvLyBwYWNrYWdlIHRoYXQgaGFzIHRvIGJlIGluc3RhbnRp
YXRlZCBjb3VsZCBub3QgYmUgZm91bmQKICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiUGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiIG5vdCBmb3VuZC4iKTsKICAgIH0KCiAgICAv
KioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgWG1pUmVhZGVyLgogICAgICoKICAgICAq
IEByZXR1cm4gWG1pUmVhZGVyIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBqYXZheC5qbWku
eG1pLlhtaVJlYWRlciBjcmVhdGVYbWlSZWFkZXIoKSB7CiAgICAgICAgcmV0dXJuIFhNSVJlYWRl
ckZhY3RvcnkuZ2V0RGVmYXVsdCgpLmNyZWF0ZVhNSVJlYWRlcigpOwogICAgfQoKICAgIC8qKgog
ICAgICogW05vIGFjdGlvbiBmb3IgTURSXQogICAgICogQ2xlYW4tdXAgYWZ0ZXIgYSBsaXN0IG9m
IFJlZlBhY2thZ2UgaW5zdGFuY2VzLCBhZnRlciBjb21wbGV0aW9uCiAgICAgKiBvZiBhIHRlc3Qu
ICBBbiBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbiB0aGUgb3BvcnR1bml0eSB0byByZW1vdmUKICAg
ICAqIG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgZXh0ZW50cyBhcyB0aGUgcmVzdWx0IG9mIHRoZSB0
ZXN0LCBvcgogICAgICogcGVyZm9ybSBhbnkgb3RoZXIgdXNlZnVsIGNsZWFudXAuICBObyBhY3Rp
b24gaXMgbmVjZXNzYXJ5OwogICAgICogaG93ZXZlciwgY2xlYW51cCBhY3Rpdml0aWVzIG1heSBh
dm9pZCBpc3N1ZXMgc3VjaCBhcyBydW5uaW5nIG91dAogICAgICogb2YgbWVtb3J5LCBmYWlsaW5n
IHN1YnNlcXVlbnQgdGVzdHMgZHVlIHRvIGEgcHJldmlvdXMgdGVzdAogICAgICogZmFpbHVyZSB0
aGF0IGNvcnJ1cHRzIGFuIGV4dGVudCwgZXRjLgogICAgICoKICAgICAqIEBwYXJhbSByZWZQYWNr
YWdlcyBhIGxpc3Qgb2YgdGhlIFJlZlBhY2thZ2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZvciBhIHRl
c3QuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHJldGlyZShSZWZQYWNrYWdlIHJlZlBhY2thZ2Up
IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdG9wLWxldmVsIFJlZlBhY2thZ2UsIGFzIGlk
ZW5pdGlmaWVkIGJ5IHRoZSBhcmd1bWVudC4KICAgICAqIFRoZSB0b3AtbGV2ZWwgUmVmUGFja2Fn
ZSBjb3JyZXNwb25kcyB0byBhIHRvcC1sZXZlbAogICAgICogTW9kZWwuUGFja2FnZSBpbiBhIG1l
dGFtb2RlbC4gIFRoZSBpZGVudGlmaWVyIG1heSBiZQogICAgICogaW1wbGVtZW50YXRpb24tc3Bl
Y2lmaWMsIGJ1dCBtdXN0IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZQogICAgICogUmVmUGFja2FnZS4g
IElmIHRoZSBSZWZQYWNrYWdlIGRvZXMgbm90IGV4aXN0LCB0aGUKICAgICAqIGltcGxlbWVudGF0
aW9uIG1heSBlaXRoZXIgcmV0dXJuIG51bGwsIG9yIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZQogICAg
ICogYW5kIHJldHVybiBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gaWQgdW5pcXVlbHkgaWRlbnRp
ZmllcyBhIFJlZlBhY2thZ2UKICAgICAqIEByZXR1cm4gUmVmUGFja2FnZSBpbnN0YW5jZSBhY2Nv
cmRpbmcgdG8gaWQKICAgICAqLwogICAgcHJpdmF0ZSBSZWZQYWNrYWdlIGdldFJlcG9zaXRvcnko
U3RyaW5nIGlkKSB7Ci8vICAgICAgTURSZXBvc2l0b3J5IG1kciA9IE1EUk1hbmFnZXIuZ2V0RGVm
YXVsdCgpLmdldFJlcG9zaXRvcnkoaWQpOwovLyAgICAgIC8vIG51bGwgaWYgdGhlIHJlcG9zaXRv
cnkgb2YgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3QgZXhpc3QKLy8gICAgICBpZihtZHIgPT0gbnVs
bCkKICAgICAgICByZXR1cm4gcmVwb3NpdG9yeS5nZXRFeHRlbnQoaWQpOwogICAgfQoKICAgIC8q
KgogICAgICogTG9hZCBhIG1ldGFtb2RlbCBmcm9tIFhNSSBmaWxlIHRvIHRoZSBkZWZhdWx0IHJl
cG9zaXRvcnkgdW5kZXIgPGNvZGU+bmFtZTwvY29kZT4uCiAgICAgKgogICAgICogQHBhcmFtIFN0
cmluZyBwYWNrYWdlIG5hbWUKICAgICAqIEBwYXJhbSBTdHJpbmcgeG1pRmlsZW5hbWUKICAgICAq
IEB0aHJvd3MgRXhjZXB0aW9uIHdyYXBwZXIgZm9yIENyZWF0aW9uRmFpbGVkRXhjZXB0aW9uLAog
ICAgICogICAgICAgICAgICAgICAgICAgSU9FeGNlcHRpb24sIGFuZCBNYWxmb3JtZWRYTUlFeGNl
cHRpb24KICAgICAqLwogICAgcHJpdmF0ZSB2b2lkIGxvYWRYTUlNb2RlbChTdHJpbmcgbmFtZSwg
U3RyaW5nIHhtaUZpbGVuYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAvLyBpcyBtb2Rl
bCBsb2FkZWQgYWxyZWFkeT8KICAgICAgICAvL2xvZy5kZWJ1ZygibG9hZFhNSU1vZGVsKG5hbWU9
IiArIG5hbWUgKyAiLCB4bWlGaWxlbmFtZT0iICsgeG1pRmlsZW5hbWUgKyAiKSIpOwogICAgICAg
IFJlZlBhY2thZ2UgbXAgPSByZXBvc2l0b3J5LmdldEV4dGVudChuYW1lKTsKICAgICAgICBpZiAo
bXAgPT0gbnVsbCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy9sb2cuZGVi
dWcoInJlcG9zaXRvcnkgPSAiICsgcmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICBsb2cuZGVi
dWcoInhtaUZpbGVuYW1lID0gIiArIHhtaUZpbGVuYW1lKTsKCiAgICAgICAgICAgICAgICAvL1VS
TCB4bWlVUkwgPSBOQk1EUkdlbmVyYXRvci5jbGFzcy5nZXRSZXNvdXJjZSh4bWlGaWxlbmFtZSk7
CiAgICAgICAgICAgICAgICBGaWxlIHhtaUZpbGUgPSBuZXcgRmlsZSh4bWlGaWxlbmFtZSk7CiAg
ICAgICAgICAgICAgICBVUkwgeG1pVVJMID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmICh4bWlG
aWxlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB4bWlVUkwgPSB4bWlGaWxlLnRvVVJM
KCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFeGNlcHRpb24oIk51bGxQb2ludGVyRXhjZXB0aW9uOiBmaWxlbmFtZSAiICsgeG1pRmlsZW5h
bWUgKyAiIG5vdCBmb3VuZCEgbG9hZFhNSU1vZGVsIGZhaWxlZC4iKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygieG1pVVJMPSAiICsgeG1pVVJMKTsKICAgICAg
ICAgICAgICAgIFN0cmluZyB4bWlVUkxTdHJpbmcgPSBudWxsOwogICAgICAgICAgICAgICAgaWYg
KHhtaVVSTCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgeG1pVVJMU3RyaW5nID0geG1p
VVJMLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk51bGxQb2ludGVyRXhjZXB0aW9uOiBmaWxlbmFtZSAi
ICsgeG1pRmlsZW5hbWUgKyAiIG5vdCBmb3VuZCEgbG9hZFhNSU1vZGVsIGZhaWxlZC4iKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygieG1pVVJMU3RyaW5nID0g
IiArIHhtaVVSTFN0cmluZyk7CgogICAgICAgICAgICAgICAgUmVmUGFja2FnZSBtb2RlbCA9IHJl
cG9zaXRvcnkuY3JlYXRlRXh0ZW50KG5hbWUpOwogICAgICAgICAgICAgICAgWE1JUmVhZGVyIHht
aXJlYWRlciA9IFhNSVJlYWRlckZhY3RvcnkuZ2V0RGVmYXVsdCgpLmNyZWF0ZVhNSVJlYWRlcigp
OwogICAgICAgICAgICAgICAgeG1pcmVhZGVyLnJlYWQoeG1pVVJMU3RyaW5nLCBtb2RlbCk7CiAg
ICAgICAgICAgIH0gY2F0Y2ggKENyZWF0aW9uRmFpbGVkRXhjZXB0aW9uIGNmZSkgewogICAgICAg
ICAgICAgICAgY2ZlLnByaW50U3RhY2tUcmFjZShzdGFja1RyYWNlTG9nV3JpdGVyKTsKICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNyZWF0aW9uRmFpbGVkRXhjZXB0aW9uOiBD
b3VsZCBub3QgcmVhZCB0aGUgcmVxdWlyZWQgWE1JIGZpbGUuICIgKyBjZmUuZ2V0TWVzc2FnZSgp
KTsKICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAg
ICAgICAgICAgIGlvZS5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZUxvZ1dyaXRlcik7CiAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJT0V4Y2VwdGlvbjogQ291bGQgbm90IHJl
YWQgdGhlIHJlcXVpcmVkIFhNSSBmaWxlLiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CiAgICAgICAg
ICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFhNSUV4Y2VwdGlvbiB4bWllKSB7CiAgICAgICAgICAgICAg
ICB4bWllLnByaW50U3RhY2tUcmFjZShzdGFja1RyYWNlTG9nV3JpdGVyKTsKICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlNBWEV4Y2VwdGlvbjogQ291bGQgbm90IHJlYWQgdGhl
IHJlcXVpcmVkIFhNSSBmaWxlLiAiICsgeG1pZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICB9
CiAgICAgICAgfSAvL2Vsc2UgTW9kZWwgaGFzIHByb2JhYmx5IGJlZW4gbG9hZGVkCiAgICB9Cgog
ICAgLyoqCiAgICAgKiBHZW5lcmF0ZSBKTUkgY2xhc3NlcyBhY2NvcmRpbmlnIHRvIHBrZ05hbWUg
c3RvcmVkIGluIE1EUi4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyaW5nIHBrZ05hbWUKICAgICAq
IEBwYXJhbSBGaWxlICAgZ2VuRmlsZVBhdGgKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIHdyYXBw
ZXIgZm9yIGphdmEuYmVhbnMuUHJvcGVydHlWZXRvRXhjZXB0aW9uCiAgICAgKiAgICAgICAgICAg
ICAgICAgICBhbmQgamF2YS5pby5JT0V4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIHZvaWQg
Z2VuZXJhdGVKTUkoU3RyaW5nIHBrZ05hbWUsIEZpbGUgZ2VuRmlsZVBhdGgpIHRocm93cyBFeGNl
cHRpb24gewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIG9yZy5vcGVuaWRlLmZpbGVzeXN0ZW1z
LkZpbGVTeXN0ZW0gdGFyZ2V0RlMgPSBuZXcgb3JnLm9wZW5pZGUuZmlsZXN5c3RlbXMuTG9jYWxG
aWxlU3lzdGVtKCk7CiAgICAgICAgICAgICgoTG9jYWxGaWxlU3lzdGVtKSB0YXJnZXRGUykuc2V0
Um9vdERpcmVjdG9yeShnZW5GaWxlUGF0aCk7CgogICAgICAgICAgICBNb2RlbFBhY2thZ2UgcGtn
ID0gKE1vZGVsUGFja2FnZSkgZ2V0UmVwb3NpdG9yeShwa2dOYW1lKTsKCiAgICAgICAgICAgIEpN
SU1hcHBlciBqbWlNYXBwZXIgPSAoSk1JTWFwcGVyKUxvb2t1cC5nZXREZWZhdWx0KCkubG9va3Vw
KEpNSU1hcHBlci5jbGFzcyk7CiAgICAgICAgICAgIGptaU1hcHBlci5nZW5lcmF0ZShuZXcgRlNT
RkltcGwodGFyZ2V0RlMpLCBwa2cpOwogICAgICAgIH0gY2F0Y2ggKGphdmEuYmVhbnMuUHJvcGVy
dHlWZXRvRXhjZXB0aW9uIHByb3BlKSB7CiAgICAgICAgICAgIHByb3BlLnByaW50U3RhY2tUcmFj
ZShzdGFja1RyYWNlTG9nV3JpdGVyKTsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigi
UHJvcGVydHlWZXRvRXhjZXB0aW9uOiBVbmFibGUgdG8gY3JlYXRlIEphdmFEYXRhT2JqZWN0ISAi
ICsgcHJvcGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0
aW9uIGlvZSkgewogICAgICAgICAgICBpb2UucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2VMb2dX
cml0ZXIpOwogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJT0V4Y2VwdGlvbjogVW5h
YmxlIHRvIGNyZWF0ZSBKYXZhRGF0YU9iamVjdCEgIiArIGlvZS5nZXRNZXNzYWdlKCkpOwogICAg
ICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgTURSIGdlbmVyYXRlZCBKTUkgc291
cmNlIGZpbGVzIGluIDxjb2RlPmdlbkZpbGVQYXRoPC9jb2RlPi4KICAgICAqIFVzZSBKYXJrYXRh
IEFudCBQcm9qZWN0IHRvIGNvbXBpbGUgcmVjdXJzaXZlbHkgd2hpY2ggd2lsbCBzdWJzZXF1ZW50
bHkKICAgICAqIGNhbGwgPGNvZGU+Y29tLnN1bi50b29scy5qYXZhYy5NYWluPC9jb2RlPi4KICAg
ICAqIE5vdGU6IGlmIHRoZXJlIGlzIGFueSBjb21waWxhdGlvbiBlcnJvciBpbiBvbmUgc3ViLWRp
cmVjdG9yeSwgQW50IHdvdWxkCiAgICAgKiBiYWlsIG91dC4KICAgICAqCiAgICAgKiBAcGFyYW0g
RmlsZSBnZW5GaWxlUGF0aAogICAgICogQHRocm93cyBFeGNlcHRpb24gd3JhcHBlciBmb3Igb3Jn
LmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSB2b2lk
IGNvbXBpbGVKTUkoRmlsZSBnZW5GaWxlUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAg
bG9nLmRlYnVnKCJTdGFydCBjb21waWxpbmcgZmlsZXMgaW4gIiArIGdlbkZpbGVQYXRoKTsKICAg
ICAgICB0cnkgewogICAgICAgICAgICBKYXZhYyBhbnRKYXZhYyA9IG5ldyBvcmcuYXBhY2hlLnRv
b2xzLmFudC50YXNrZGVmcy5KYXZhYygpOwogICAgICAgICAgICBQcm9qZWN0IGFudFByb2ogPSBu
ZXcgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdCgpOwoKICAgICAgICAgICAgYW50UHJvai5p
bml0KCk7CgogICAgICAgICAgICBhbnRKYXZhYy5zZXRQcm9qZWN0KGFudFByb2opOwogICAgICAg
ICAgICBhbnRKYXZhYy5zZXRTcmNkaXIobmV3IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlBh
dGgobnVsbCwgZ2VuRmlsZVBhdGgudG9TdHJpbmcoKSkpOwogICAgICAgICAgICBhbnRKYXZhYy5z
ZXREZXN0ZGlyKGdlbkZpbGVQYXRoKTsKCiAgICAgICAgICAgIGFudEphdmFjLnNldENsYXNzcGF0
aChuZXcgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuUGF0aChudWxsLCBTeXN0ZW0uZ2V0UHJv
cGVydHkoImphdmEuY2xhc3MucGF0aCIpKSk7CgogICAgICAgICAgICBhbnRKYXZhYy5leGVjdXRl
KCk7ICAvLyBjb21waWxlIGFsbCBKYXZhIHNvdXJjZSBmaWxlcyBpbiBnZW5GaWxlUGF0aAogICAg
ICAgIH0gY2F0Y2ggKEJ1aWxkRXhjZXB0aW9uIGJ1aWxkRXgpIHsKICAgICAgICAgICAgYnVpbGRF
eC5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZUxvZ1dyaXRlcik7CiAgICAgICAgICAgIGxvZy5l
cnJvcigiIiwgYnVpbGRFeCk7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkJ1aWxk
RXhjZXB0aW9uOiBFcnJvciBvY2N1cmVkIHdoZW4gY29tcGlsaW5nLiAiICsgYnVpbGRFeCk7CiAg
ICAgICAgfQogICAgICAgIGxvZy5kZWJ1ZygiRmluaXNoZWQgY29tcGlsaW5nIGZpbGVzIGluICIg
KyBnZW5GaWxlUGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBmb3IgUmVwb3NpdG9yeUxvb2t1
cAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBSZXN1bHQgZXh0ZW5kcyBMb29rdXAu
UmVzdWx0IHsKICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdCByZXN1bHQgPSBuZXcgQXJy
YXlMaXN0KCk7CgogICAgICAgIHB1YmxpYyBSZXN1bHQoT2JqZWN0IG8pIHsKICAgICAgICAgICAg
aWYgKG8gIT0gbnVsbCkgcmVzdWx0LmFkZChvKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAg
ICAgICAqIFJlZ2lzdGVycyBhIGxpc3RlbmVyIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZXJlIGlz
IGEgcG9zc2libGUKICAgICAgICAgKiBjaGFuZ2UgaW4gdGhpcyByZXN1bHQuCiAgICAgICAgICoK
ICAgICAgICAgKiBAcGFyYW0gbCB0aGUgbGlzdGVuZXIgdG8gYWRkCiAgICAgICAgICovCiAgICAg
ICAgcHVibGljIHZvaWQgYWRkTG9va3VwTGlzdGVuZXIoTG9va3VwTGlzdGVuZXIgbCkgewogICAg
ICAgICAgICAvLyB0aGlzIGxvb2t1cCBuZXZlciBjaGFuZ2VzIHNvIG5vdGhpbmcgbmVlZCB0byBi
ZSByZWdpc3RlcmVkCiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgYWxsIGlu
c3RhbmNlcyBpbiB0aGUgcmVzdWx0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBjb2xs
ZWN0aW9uIG9mIGFsbCBpbnN0YW5jZXMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgamF2YS51
dGlsLkNvbGxlY3Rpb24gYWxsSW5zdGFuY2VzKCkgewogICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogVW5yZWdpc3RlcnMgYSBsaXN0ZW5l
ciBwcmV2aW91c2x5IGFkZGVkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGwgdGhlIGxp
c3RlbmVyIHRvIHJlbW92ZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxv
b2t1cExpc3RlbmVyKExvb2t1cExpc3RlbmVyIGwpIHsKICAgICAgICAgICAgLy8gbm90aGluZyB3
YXMgcmVnaXN0ZXJlZAogICAgICAgIH0KICAgIH0gLy8gZW5kIHByaXZhdGUgc3RhdGljIGNsYXNz
IFJlc3VsdAoKICAgIC8qcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAg
IHsKICAgICAgIE5CTURSR2VuZXJhdG9yIG5ibWRyID0gbmV3IE5CTURSR2VuZXJhdG9yKCk7CiAg
ICAgICB0cnkgewogICAgICAgICAgb3JnLmFwYWNoZS5sb2c0ai5Qcm9wZXJ0eUNvbmZpZ3VyYXRv
ci5jb25maWd1cmUobmJtZHIuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZSgibG9nZ2VyLnByb3BlcnRp
ZXMiKSk7CiAgICAgICAgICBuYm1kci5pbml0KG51bGwsIG5ldyBGaWxlKCIvZXhwb3J0L2hvbWUv
am1pdGNrIikpOwogICAgICAgICAgLy9uYm1kci5nZW5lcmF0ZSgiY29tLnRzdC5HcmFwaFRoZW9y
eSIsICJtZXRhbW9kZWxzL2NvbS90c3QvR3JhcGhUaGVvcnkueG1sIiwgZmFsc2UpOwogICAgICAg
ICAgLy9uYm1kci5nZW5lcmF0ZSgiY29tLnRzdC5TaW1wbGVNb2RlbCIsICJtZXRhbW9kZWxzL2Nv
bS90c3QvU2ltcGxlTW9kZWwueG1sIiwgZmFsc2UpOwogICAgICAgICAgbmJtZHIuZ2VuZXJhdGUo
ImN6LnRzdC5DbHVzdGVyIiwgIm1ldGFtb2RlbHMvY3ovdHN0L0NsdXN0ZXIueG1sIiwgZmFsc2Up
OwogICAgICAgICAgLy9uYm1kci5nZW5lcmF0ZSgiY29tLnRzdDIuUmVmZXJlbmNlTW9kZWwiLCAi
bWV0YW1vZGVscy9jb20vdHN0Mi9SZWZlcmVuY2VNb2RlbC54bWwiLCBmYWxzZSk7CiAgICAgICAg
ICAvL25ibWRyLmdlbmVyYXRlKCJjb20udHN0My5Db21wb3NpdGlvbiIsICJtZXRhbW9kZWxzL2Nv
bS90c3QzL0NvbXBvc2l0aW9uLnhtbCIsIGZhbHNlKTsKICAgICAgICAgIC8vbmJtZHIuZ2VuZXJh
dGUoImNvbS50c3Q0LkNvbnRhaW5tZW50IiwgIm1ldGFtb2RlbHMvY29tL3RzdDQvQ29udGFpbm1l
bnQueG1sIiwgZmFsc2UpOwogICAgICAgICAgUmVmUGFja2FnZSBwa2cgPSBuYm1kci5jcmVhdGVS
ZWZQYWNrYWdlKCJjb20udHN0LlNpbXBsZU1vZGVsIiwgIiIpOwogICAgICAgfSBjYXRjaChUaHJv
d2FibGUgdCkgewogICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KICAgIH0q
Lwp9Cg==

------_=_NextPart_001_01C4B696.EFA79900--