[Biojava-l] Mutable sequence dbs

hilmar.lapp@pharma.Novartis.com hilmar.lapp@pharma.Novartis.com
Thu, 10 Aug 2000 14:45:10 +0100


--0__=41256937004A76548f9e8a93df938690918c41256937004A7654
Content-type: text/plain; charset=us-ascii


I am enclosing the interface MutableSequenceDB with which I'm happy so far,
and in addition a convenience class SequenceIteratorDB implementing this
interface, which lets you view one or multiple SequenceIterator(s) as a
database.

Note the 'import' statements do not yet comply with the 1.0 release of
BioJava (I think, because SequenceDB is no longer in org.biojava.bio.seq).
In addition, SequenceIteratorDB references things you don't have: an
ExceptionHandler interface, and a MemorySequenceDB class. The first should
be obvious from the code, but I can provide it, too, if you wish. The
latter is basically a HashSequenceDB, slightly modified so that it
implements MutableSequenceDB. I can also provide this, if you wish.

I hope the attachments don't get munged by the list server.

     Hilmar


(See attached file: MutableSequenceDB.java)(See attached file:
SequenceIteratorDB.java)
--0__=41256937004A76548f9e8a93df938690918c41256937004A7654
Content-type: application/octet-stream; 
	name="MutableSequenceDB.java"
Content-Disposition: attachment; filename="MutableSequenceDB.java"
Content-transfer-encoding: base64

LyoKICogbm92c2VxIGphdmEgY2xhc3NlczogTXV0YWJsZVNlcXVlbmNlREIKICoKICogQ2hhbmdl
IGxvZzoKICogJExvZzogTXV0YWJsZVNlcXVlbmNlREIuamF2YSx2ICQKICogUmV2aXNpb24gMS4x
ICAyMDAwLzA1LzE2IDIwOjA5OjQyICBoaWxtYXIKICogSW5pdGlhbCByZXZpc2lvbgogKgogKi8K
Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwovLwovLyAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdl
IGRlZmluaXRpb24KLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8v
Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0cwovLwovLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KCmltcG9ydCBvcmcuYmlvamF2YS5iaW8uQmlvRXhjZXB0aW9uOwppbXBvcnQgb3JnLmJp
b2phdmEuYmlvLnNlcS5TZXF1ZW5jZTsKaW1wb3J0IG9yZy5iaW9qYXZhLmJpby5zZXEuU2VxdWVu
Y2VEQjsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLwovLyAgICAgICAgICAgICAgICAgICAgICAgaW50
ZXJmYWNlIGRlZmluaXRpb24KLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovKioKICogQSBkYXRhYmFz
ZSBvZiBzZXF1ZW5jZXMgd2hpY2ggYWRkcyBzdWJtaXNzaW9uIGFuZCByZW1vdmFsIHRvIFNlcXVl
bmNlREIuCiAqCiAqIEBhdXRob3IgSC5MYXBwCiAqIEB2ZXJzaW9uICRJZDogTXV0YWJsZVNlcXVl
bmNlREIuamF2YSx2IDEuMSAyMDAwLzA1LzE2IDIwOjA5OjQyIGhpbG1hciBFeHAgJAogKiovCnB1
YmxpYyBpbnRlcmZhY2UgTXV0YWJsZVNlcXVlbmNlREIgZXh0ZW5kcyBTZXF1ZW5jZURCIHsKCiAg
ICAvKioKICAgICAqIEFkZCBhIHNlcXVlbmNlIHVuZGVyIGl0cyBkZWZhdWx0IGlkLiBOb3RlIHRo
YXQgdGhlIGRhdGFiYXNlIGlzIGZyZWUKICAgICAqIHRvIGdlbmVyYXRlIGl0cyBvd24gaWQuCiAg
ICAgKgogICAgICogQHBhcmFtIHNlcSBUaGUgc2VxdWVuY2UgdG8gYWRkLgogICAgICogQHJldHVy
biBUaGUgaWQgdW5kZXIgd2hpY2ggdGhlIHNlcXVlbmNlIGhhcyBiZWVuIHN0b3JlZC4gVGhpcyBt
YXkgYmUKICAgICAqICAgICBhbiBpZCBuZXdseSBnZW5lcmF0ZWQgYnkgdGhlIGRhdGFiYXNlLgog
ICAgICogQHRocm93cyBCaW9FeGNlcHRpb24gaWYgdGhlIHN1Ym1pc3Npb24gb2YgdGhpcyBzZXF1
ZW5jZSB3YXMKICAgICAqICAgICByZWplY3RlZCBmb3IgYW55IHJlYXNvbi4KICAgICAqLwogICAg
cHVibGljIFN0cmluZyBhZGRTZXF1ZW5jZShTZXF1ZW5jZSBzZXEpIHRocm93cyBCaW9FeGNlcHRp
b247CgogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIGlkIGZy
b20gdGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNl
cXVlbmNlIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGF0YWJhc2UuCiAgICAgKi8KICAgIHB1Ymxp
YyB2b2lkIHJlbW92ZVNlcXVlbmNlKFN0cmluZyBpZCk7Cgp9Cg==

--0__=41256937004A76548f9e8a93df938690918c41256937004A7654
Content-type: application/octet-stream; 
	name="SequenceIteratorDB.java"
Content-Disposition: attachment; filename="SequenceIteratorDB.java"
Content-transfer-encoding: base64

LyoKICogbm92c2VxIGphdmEgY2xhc3NlczogU2VxdWVuY2VJdGVyYXRvckRCCiAqCiAqIENoYW5n
ZSBsb2c6CiAqICRMb2c6IFNlcXVlbmNlSXRlcmF0b3JEQi5qYXZhLHYgJAogKiBSZXZpc2lvbiAx
LjEgIDIwMDAvMDUvMTggMTI6Mzc6MDEgIGhpbG1hcgogKiBJbml0aWFsIHJldmlzaW9uCiAqCiAq
LwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2th
Z2UgZGVmaW5pdGlvbgovLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCgovLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ly8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRzCi8vCi8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwoKaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOwppbXBvcnQg
amF2YS51dGlsLkl0ZXJhdG9yOwppbXBvcnQgdXRpbHMuRXhjZXB0aW9uSGFuZGxlcjsKaW1wb3J0
IG9yZy5iaW9qYXZhLmJpby5CaW9FeGNlcHRpb247CmltcG9ydCBvcmcuYmlvamF2YS5iaW8uc2Vx
LlNlcXVlbmNlOwppbXBvcnQgb3JnLmJpb2phdmEuYmlvLnNlcS5TZXF1ZW5jZURCOwppbXBvcnQg
b3JnLmJpb2phdmEuYmlvLnNlcS5TZXF1ZW5jZUl0ZXJhdG9yOwppbXBvcnQgb3JnLmJpb2phdmEu
YmlvLnNlcS5pby4qOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vCi8vICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBkZWZpbml0aW9ucwovLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8qKgogKiBBIGNs
YXNzIGltcGxlbWVudGluZyBhIHNlcXVlbmNlIGRhdGFiYXNlIHJlcHJlc2VudGF0aW9uIG9mCiAq
IFNlcXVlbmNlSXRlcmF0b3JzLiBUaGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgaGVyZSBkZWxl
Z2F0ZXMgc3RvcmFnZSBhbmQKICogcmV0cmlldmFsIHRvIGFub3RoZXIgTXV0YWJsZVNlcXVlbmNl
REIuCiAqCiAqIEBhdXRob3IgSC5MYXBwCiAqIEB2ZXJzaW9uICRJZDogU2VxdWVuY2VJdGVyYXRv
ckRCLmphdmEsdiAxLjEgMjAwMC8wNS8xOCAxMjozNzowMSBoaWxtYXIgRXhwICQKICoqLwpwdWJs
aWMgY2xhc3MgU2VxdWVuY2VJdGVyYXRvckRCIGltcGxlbWVudHMgTXV0YWJsZVNlcXVlbmNlREIg
ewoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gcHJpdmF0ZQoKICAgIHByaXZhdGUgTXV0
YWJsZVNlcXVlbmNlREIgc2VxREI7CiAgICBwcml2YXRlIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxl
cjsKCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIHByb3RlY3RlZAogICAgCiAgICBwcm90
ZWN0ZWQgdm9pZCBzZXREZWZhdWx0cygpIHsKCWlmKHNlcURCID09IG51bGwpIHsKCSAgICBzZXFE
QiA9IG5ldyBNZW1vcnlTZXF1ZW5jZURCKE1lbW9yeVNlcXVlbmNlREIuYnlOYW1lKTsKCX0KCWlm
KGhhbmRsZXIgPT0gbnVsbCkgewoJICAgIGhhbmRsZXIgPSBuZXZlcklnbm9yZTsKCX0KICAgIH0K
CiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICAgLy8gcHVibGljCgogICAgLyoqCiAgICAgKiBJbml0
aWFsaXplcyB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuCiAgICAgKi8KICAgIHB1YmxpYyBTZXF1ZW5j
ZUl0ZXJhdG9yREIoKSB7Cgl0aGlzKG51bGwpOwogICAgfQoKICAgIC8qKgogICAgICogSW5pdGlh
bGl6ZXMgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gcGVl
ckRCIFRoZSBvYmplY3QgZm9yIGRlbGVnYXRpbmcgc3RvcmFnZSBhbmQgcmV0cmlldmFsLiBJZiBw
YXNzZWQKICAgICAqICAgICAgICAgIGFzIG51bGwsIGEgZGVmYXVsdCB3aWxsIGJlIHVzZWQgKEhh
c2hTZXF1ZW5jZURCKS4KICAgICAqLwogICAgcHVibGljIFNlcXVlbmNlSXRlcmF0b3JEQihNdXRh
YmxlU2VxdWVuY2VEQiBwZWVyREIpIHsKCXNlcURCID0gcGVlckRCOwoJc2V0RGVmYXVsdHMoKTsK
ICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gVGhlIHNlcXVlbmNlIGRhdGFiYXNlIHRvIHdo
aWNoIHN0b3JhZ2UgYW5kIHJldHJpZXZhbCBhcmUKICAgICAqICAgICAgICAgZGVsZWdhdGVkLgog
ICAgICovCiAgICBwdWJsaWMgTXV0YWJsZVNlcXVlbmNlREIgZ2V0UGVlclNlcXVlbmNlREIoKSB7
CglyZXR1cm4gc2VxREI7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIGFsbCBzZXF1ZW5jZXMg
Zm91bmQgaW4gdGhlIHNwZWNpZmllZCBpdGVyYXRvciB0byB0aGUgZGF0YWJhc2UuIFRoaXMKICAg
ICAqIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGNvbnNlY3V0aXZlbHkuCiAgICAgKgogICAgICogRXhj
ZXB0aW9ucyByYWlzZWQgYnkgdGhlIHN1Ym1pc3Npb24gb2Ygc2VxdWVuY2VzIHRvIHRoZSBwZWVy
IGRhdGFiYXNlCiAgICAgKiBhcmUgaW50ZXJjZXB0ZWQgYW5kIHBhc3NlZCB0byBleGNlcHRpb24g
aGFuZGxlciBzZXQgYmVmb3JlLiBUaGUgaGFuZGxlcgogICAgICogaXMgc3VwcG9zZWQgdG8gZGVj
aWRlIHdoZXRoZXIgb3BlcmF0aW9uIHN0b3BzIGFyZSBjb250aW51ZXMgdW50aWwgYWxsCiAgICAg
KiBzZXF1ZW5jZXMgaGF2ZSBiZWVuIGZldGNoZWQgZnJvbSB0aGUgaXRlcmF0b3IgYW5kIGhhdmUg
YmVlbiBhdHRlbXB0ZWQgdG8KICAgICAqIHN1Ym1pdC4KICAgICAqCiAgICAgKiBAcGFyYW0gaXRl
ciBUaGUgc2VxdWVuY2UgaXRlcmF0b3IgZnJvbSB3aGljaCB0byBvYnRhaW4gc2VxdWVuY2VzLgog
ICAgICovCiAgICBwdWJsaWMgdm9pZCBzdWJtaXQoU2VxdWVuY2VJdGVyYXRvciBpdGVyKSB0aHJv
d3MgQmlvRXhjZXB0aW9uIHsKCVNlcXVlbmNlIHNlcTsKCQoJd2hpbGUoaXRlci5oYXNOZXh0KCkp
IHsKCSAgICBzZXEgPSBpdGVyLm5leHRTZXF1ZW5jZSgpOwoJICAgIHRyeSB7CgkJYWRkU2VxdWVu
Y2Uoc2VxKTsKCSAgICB9CgkgICAgY2F0Y2goQmlvRXhjZXB0aW9uIGUpIHsKCQlpZighIGhhbmRs
ZXIuaGFuZGxlRXhjZXB0aW9uKGUsIHRoaXMsIHNlcSkpIHRocm93KGUpOwoJICAgIH0KCX0KICAg
IH0KCiAgICAvKioKICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IExpc3RzIGFu
ZCBTZXRzIG9mIHNlcXVlbmNlIG9iamVjdHMgYXMKICAgICAqIHdlbGwuIFRoZSBzdXBwbGllZCBp
dGVyYXRvciBpcyBzdXBwb3NlZCB0byBpdGVyYXRlIG92ZXIgU2VxdWVuY2UKICAgICAqIG9iamVj
dHMuIFdoZW5ldmVyIGFuIHVuY29tcGxpYW50IG9iamVjdCBpcyBlbmNvdW50ZXJlZCB0aGUgZXhj
ZXB0aW9uCiAgICAgKiBoYW5kbGVyIGlzIGFza2VkIHRvIGhhbmRsZSBhIENsYXNzQ2FzdEV4Y2Vw
dGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gaXRlciBUaGUgaXRlcmF0b3IgZnJvbSB3aGljaCB0
byBvYnRhaW4gc2VxdWVuY2VzLgogICAgICovCiAgICBwdWJsaWMgdm9pZCBzdWJtaXQoSXRlcmF0
b3IgaXRlcikgdGhyb3dzIEJpb0V4Y2VwdGlvbiB7CglTZXF1ZW5jZSBzZXE7CgkKCXdoaWxlKGl0
ZXIuaGFzTmV4dCgpKSB7CgkgICAgc2VxID0gbnVsbDsgLy8gdG8gaW5pdGlhbGl6ZSByZWdhcmRs
ZXNzIG9mIGV4Y2VwdGlvbnMgCgkgICAgdHJ5IHsKCQlzZXEgPSAoU2VxdWVuY2UpIGl0ZXIubmV4
dCgpOwoJCWFkZFNlcXVlbmNlKHNlcSk7CgkgICAgfQoJICAgIGNhdGNoKENsYXNzQ2FzdEV4Y2Vw
dGlvbiBlKSB7CgkJaWYoISBoYW5kbGVyLmhhbmRsZUV4Y2VwdGlvbihlLCB0aGlzLCBzZXEpKSB0
aHJvdyhlKTsKCSAgICB9CgkgICAgY2F0Y2goQmlvRXhjZXB0aW9uIGUpIHsKCQlpZighIGhhbmRs
ZXIuaGFuZGxlRXhjZXB0aW9uKGUsIHRoaXMsIHNlcSkpIHRocm93KGUpOwoJICAgIH0KCX0KICAg
IH0KICAgIAogICAgcHVibGljIFNlcXVlbmNlIGdldFNlcXVlbmNlKFN0cmluZyBpZCkgdGhyb3dz
IEJpb0V4Y2VwdGlvbiB7CglyZXR1cm4gZ2V0UGVlclNlcXVlbmNlREIoKS5nZXRTZXF1ZW5jZShp
ZCk7CiAgICB9CgogICAgcHVibGljIGphdmEudXRpbC5TZXQgaWRzKCkgewoJcmV0dXJuIGdldFBl
ZXJTZXF1ZW5jZURCKCkuaWRzKCk7CiAgICB9CgogICAgcHVibGljIFNlcXVlbmNlSXRlcmF0b3Ig
c2VxdWVuY2VJdGVyYXRvcigpIHsKCXJldHVybiBnZXRQZWVyU2VxdWVuY2VEQigpLnNlcXVlbmNl
SXRlcmF0b3IoKTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGFkZFNlcXVlbmNlKFNlcXVlbmNl
IHNlcSkgdGhyb3dzIEJpb0V4Y2VwdGlvbiB7CglyZXR1cm4gZ2V0UGVlclNlcXVlbmNlREIoKS5h
ZGRTZXF1ZW5jZShzZXEpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHJlbW92ZVNlcXVlbmNlKFN0
cmluZyBpZCkgewogICAgfQogICAgCiAgICAvKioKICAgICAqIFNldHMgdGhlIGV4Y2VwdGlvbiBo
YW5kbGVyIHVzZWQgYnkgdGhpcyBjbGFzcycgbWV0aG9kcyB3aGVyZQogICAgICogYXBwcm9wcmlh
dGUuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHNldEV4Y2VwdGlvbkhhbmRsZXIoRXhjZXB0aW9u
SGFuZGxlciBoYW5kbGVyKSB7Cgl0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwogICAgfQoKICAgIC8q
KgogICAgICogQHJldHVybiBUaGUgZXhjZXB0aW9uIGhhbmRsZXIgdXNlZCBpbiB0aGlzIGNsYXNz
LgogICAgICovCiAgICBwdWJsaWMgRXhjZXB0aW9uSGFuZGxlciBnZXRFeGNlcHRpb25IYW5kbGVy
KCkgewoJcmV0dXJuIGhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGNlcHRpb24gaGFu
ZGxlciB0aGF0IG5ldmVyIGlnbm9yZXMgYW55IGV4Y2VwdGlvbi4KICAgICAqLwogICAgcHVibGlj
IGZpbmFsIHN0YXRpYyBFeGNlcHRpb25IYW5kbGVyIG5ldmVySWdub3JlID0gbmV3IEV4Y2VwdGlv
bkhhbmRsZXIoKSB7CglwdWJsaWMgYm9vbGVhbiBoYW5kbGVFeGNlcHRpb24oVGhyb3dhYmxlIGV4
YywKCQkJCSAgICAgICBPYmplY3Qgd2hlcmUsIE9iamVjdCB3aG8pIHsKCSAgICByZXR1cm4gZmFs
c2U7Cgl9CgogICAgfTsKCiAgICAvKioKICAgICAqIEV4Y2VwdGlvbiBoYW5kbGVyIHRoYXQgaWdu
b3JlcyBldmVyeSBleGNlcHRpb24sIGJ1dCBwcmludHMgYSBtZXNzYWdlCiAgICAgKiB0byBzdGRl
cnIgYWJvdXQgdGhlIG9jY3VycmVuY2UuCiAgICAgKi8KICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMg
RXhjZXB0aW9uSGFuZGxlciBhbHdheXNJZ25vcmUgPSBuZXcgRXhjZXB0aW9uSGFuZGxlcigpewoJ
cHVibGljIGJvb2xlYW4gaGFuZGxlRXhjZXB0aW9uKFRocm93YWJsZSBleGMsCgkJCQkgICAgICAg
T2JqZWN0IHdoZXJlLCBPYmplY3Qgd2hvKSB7CgkgICAgU3lzdGVtLmVyci5wcmludGxuKCJFeGNl
cHRpb24gIiArIGV4Yy5nZXRDbGFzcygpLmdldE5hbWUoKSArCgkJCSAgICAgICAiIGluICIgKyB3
aGVyZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICI6ICIgKwoJCQkgICAgICAgZXhjLmdldE1lc3Nh
Z2UoKSk7CgkgICAgcmV0dXJuIHRydWU7Cgl9CgogICAgfTsKfQo=

--0__=41256937004A76548f9e8a93df938690918c41256937004A7654--