[Dynamite] idlstubs.pl

Ian Holmes ihh@fruitfly.org
Tue, 14 Mar 2000 06:05:43 -0800 (PST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1804928587-953041940=:4357
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.GSO.4.10.10003140552311.4357@fruitfly>

I've written a basic perl script to start the process of automating the
IDL-to-C mapping. All it does at the minute is draw a sketchy outline of
the mapping, but the hooks are all there. It probably duplicates work that
someone has done a lot better, which is a bit of a bummer, but on the plus
side it does exactly what we want it to (mind you, so does the better
solution, probably).

Not pretending it's useable yet -- or bug free -- but release early,
release often, no fenceposts in the code.

Try running it on these three IDL files (which I've updated quite a bit,
actually -- Ewan I hope you now approve of the way that degenerate symbols
are handled. There is no reference to scores at all any more). I made some
minor changes to our IDL-to-C mapping which I hope you'll also like:

	* if the Module name is the same as an object inside it, then the
	  object name is omitted (so we don't get names like
	  dyMetasequence_Metasequence)

	* Suffix "_static" denotes an entirely static interface (no data)

	* Inheritance is handled automatically. Only single inheritance is
	  allowed.

Inheritance works like this:

module Chat {
interface Person { long walk(); }
interface TalkShowHost : Person { long talk(); }
interface AlanPartridge : TalkShowHost { long chat(); }
};

In the C mapping, the "object" dyChat_AlanPartridge is typedef'd to be
a pointer to a dyChat_Person_str structure, as is the "object"
dyChat_Person. The actual data for a dyChat_AlanPartridge is stored in a
dyChat_AlanPartridge_str structure. To get at this data, you have to call
the macro dyChat_AlanPartridge_deriv(alan) which follows a 2-step linked
list to get from Person to TalkShowHost to AlanPartridge. That's
evolution in action.

It's all documented in the perl (sort of). (Actually in the above example
inheritance is somewhat pointless, since none of the method names have
the "_vf" suffix and so will be generated as non-virtual hooks when I/we
get round to writing the Perl to actually generate code.)

I'm delighted that Ensembl is going to use Wiki. It's great fun to use.

Ian

-- 
Ian Holmes  ....  Howard Hughes Medical Institute  ....  ihh@fruitfly.org

---559023410-1804928587-953041940=:4357
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="idlstubs.pl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.10003140552200.4357@fruitfly>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="idlstubs.pl"

IyEvdXNyL2xvY2FsL2Jpbi9wZXJsIC13DQoNCnVzZSBDYXJwOw0KDQojIE91
dHB1dCBmaWxlcw0KDQpteSBAYXV0b19oOw0KbXkgQGF1dG9fYzsNCm15IEBp
bXBsX2g7DQpteSBAaW1wbF9jOw0KDQojIElETCBzdHJpbmdzDQoNCkBpZGxf
c3RyaW5ncyA9ICgkaWRsX21vZHVsZV9zdWZmaXggPSAiTW9kdWxlIiwNCgkJ
JGlkbF9zdGF0aWNfc3VmZml4ID0gInN0YXRpYyIsDQoJCSRpZGxfdmlydHVh
bF9zdWZmaXggPSAidmYiKTsNCg0KIyBDIHN0cmluZ3MNCg0KQGNfc3RyaW5n
cyA9ICgkY19nbG9iYWxfcHJlZml4ID0gImR5IiwNCgkgICAgICAkY19zdHJ1
Y3Rfc3VmZml4ID0gInN0ciIsDQoJICAgICAgJGNfb2JqX3ZhciA9ICJvYmoi
LA0KCSAgICAgICRjX3JlZl92YXIgPSAicmVmIiwNCgkgICAgICAkY19kZXJp
dl92YXIgPSAiZGVyaXYiLA0KCSAgICAgICRjX2Jhc2VfdmFyID0gImJhc2Ui
KTsNCg0KIyBleHRlcm5hbCBsaWJyYXJ5IHR5cGVkZWZzDQoNCiVjX3R5cGVk
ZWYgPSAoIkdsaWJRdWFyayIgPT4gIkdRdWFyayIpOw0KJGdsaWJfYXJyYXkg
PSAiR0FycmF5IjsNCg0KIyBDIGF1dG9nZW5lcmF0ZWQgbWV0aG9kcw0KDQpA
Y19hdXRvX21ldGhvZHMgPSAoJGNfYWxsb2MgPSAiYWxsb2MiLCAgIyBhbGxv
Y2F0ZXMgc3RydWN0ICgmIGJhc2Ugc3RydWN0cyBmb3IgZGVyaXZlZCBpbnRl
cmZhY2VzKSwgemVyb2VzIHJlZiAmIGRlcml2DQoJCSAgICRjX2RlYWxsb2Mg
PSAiZGVhbGxvYyIsICAjIGRlYWxsb2NhdGVzIHN0cnVjdCAmIGJhc2Ugc3Ry
dWN0cw0KCQkgICAkY19yZWYgPSAicmVmIiwgICMgaW5jcmVhc2VzIHJlZg0K
CQkgICAkY191bnJlZiA9ICJ1bnJlZiIsICAjIGRlY3JlYXNlcyByZWYsIGNh
bGxzIGZyZWUgJiB0aGVuIGRlYWxsb2Mgb24gYWxsIGJhc2Ugc3RydWN0cyBv
biBjb3VudCB6ZXJvDQoJCSAgICRjX2Rlcml2ID0gImRlcml2Iik7ICAjIGNh
c3RzIHBvaW50ZXIgdG8gYmFzZW1vc3QgY2xhc3MgaW50byBwb2ludGVyIHRv
IGRlcml2ZWQgY2xhc3MgKCNkZWZpbmUnZCwgcmVjdXJzaXZlKQ0KDQojIEMg
dXNlci1pbXBsZW1lbnRlZCBtZXRob2RzDQoNCkBjX2ltcGxfbWV0aG9kcyA9
ICgkY19mcmVlID0gImZyZWUiLCAgIyBkZXN0cnVjdG9yIChzaG91bGQgbm90
IGZyZWUgbWFpbiBvYmplY3Qgc3RydWN0IC0tIHRoYXQgaXMgZG9uZSBieSBk
ZWFsbG9jKQ0KCQkgICAkY19kdW1wID0gImR1bXAiLCAgIyBvdXRwdXQgdG8g
RklMRSoNCgkJICAgJGNfZGVidWcgPSAiZGllIik7ICAjIGV4Y2VwdGlvbnMN
Cg0KZm9yZWFjaCAoQGNfYXV0b19tZXRob2RzLCBAY19pbXBsX21ldGhvZHMp
IHsgJGNfcmVzZXJ2ZWRfbWV0aG9keyRffSA9IDEgfQ0KJGNfYWxsb2MgLiAk
Y19kZWFsbG9jIC4gJGNfcmVmIC4gJGNfdW5yZWYgLiAkY19kZXJpdiAuICRj
X2ZyZWUgLiAkY19kdW1wIC4gJGNfZGVidWc7ICAjIHRyaWNrIHRoZSBQZXJs
IGNvbXBpbGVyIGludG8gdGhpbmtpbmcgd2UncmUgdXNpbmcgdGhlc2Ugc3Ry
aW5ncw0KDQojIG1haW4NCg0Kd2FybiAiSURMIHN0cmluZ3M6IEBpZGxfc3Ry
aW5nc1xuIjsNCndhcm4gIkMgc3RyaW5nczogQGNfc3RyaW5nc1xuIjsNCndh
cm4gIlJlc2VydmVkIG1ldGhvZHM6IEBjX2F1dG9fbWV0aG9kcyBAY19pbXBs
X21ldGhvZHNcbiI7DQp3aGlsZSAoKCRpZGwsJGMpID0gZWFjaCAlY190eXBl
ZGVmKSB7IHdhcm4gInR5cGVkZWYgJGlkbCAkYztcbiIgfQ0KDQp3aGlsZSAo
PD4pIHsNCiAgICBzL1wvXC8uKi8vOw0KICAgIHB1c2ggQHRleHQsICRfIHVu
bGVzcyAvXlwjLzsNCn0NCiR0ZXh0ID0gIkB0ZXh0IjsNCiR0ZXh0ID1+IHMv
XHMrLyAvZzsNCiR0ZXh0ID1+IHMvXC9cKi4qP1wqXC8vL2c7DQoNCnBhcnNl
KG5ld19jb250ZXh0KCksJHRleHQpOw0KDQojIEFsbG93ZWQgZmllbGRzIGlu
IGNvbnRleHQgaGFzaDoNCiMNCiMgb3V0ZXJfY29udGV4dCA9IHJlZmVyZW5j
ZSB0byBvdXRlciBjb250ZXh0IGhhc2gNCiMgaWRsX3Njb3BlX2xpc3QgPSBy
ZWZlcmVuY2UgdG8gYXJyYXkgb2YgaW5oZXJpdGVkIHNjb3BlcywgbW9kdWxl
LWZpcnN0DQojIGNfdHlwZSA9IHJlZmVyZW5jZSB0byBoYXNoIG9mIHNob3J0
IElETCB0eXBlIG5hbWVzIGRlZmluZWQgaW4gdGhpcyBzY29wZSB0byBnbG9i
YWwgQyB0eXBlcw0KIyBlbmNsb3Npbmdfa2V5d29yZCA9IElETCBrZXl3b3Jk
ICJtb2R1bGUiLCAiaW50ZXJmYWNlIiwgInN0cnVjdCIsICJ1bmlvbiINCiMg
c3RhdGljID0gZGVmaW5lZCBmb3Igc3RhdGljYWxseSBkZWNsYXJlZCBpbnRl
cmZhY2VzDQojIGltcGxfaF9kZWxheWVkID0gc3RyaW5nIHZpYSB3aGljaCBh
biBpbm5lciBjb250ZXh0IHJldHVybnMgYSBjbG9zaW5nIGZvcm1hdGlvbiBm
b3IgQyBzdHJ1Y3RzDQoNCnN1YiBuZXdfY29udGV4dCB7DQogICAgeyBpZGxf
c2NvcGVfbGlzdCA9PiBbXSwNCiAgICAgIGNfdHlwZSA9PiB7fSwNCiAgICAg
IGVuY2xvc2luZ19rZXl3b3JkID0+IHVuZGVmDQogICAgICB9DQp9DQoNCnN1
YiBwdXNoX2NvbnRleHQgew0KICAgIG15ICgkY29udGV4dCwka2V5d29yZCwk
aWRsX3R5cGUsJGRlZixAb3RoZXJfYXJncykgPSBAXzsNCiAgICBjcm9hayAi
QmFkIGNvbnRleHQiIHVubGVzcyAka2V5d29yZCA9fiAvXm1vZHVsZSR8Xmlu
dGVyZmFjZSR8XnN0cnVjdCR8XnVuaW9uJC8gJiYgZGVmaW5lZCgkaWRsX3R5
cGUpICYmIGRlZmluZWQoJGRlZik7DQogICAgbXkgJWlubmVyX2NvbnRleHQg
PSAoIG91dGVyX2NvbnRleHQgPT4gJGNvbnRleHQsDQoJCQkgIGlkbF9zY29w
ZV9saXN0ID0+IFtAeyRjb250ZXh0LT57ImlkbF9zY29wZV9saXN0In19LCAk
aWRsX3R5cGVdLA0KCQkJICBjX3R5cGUgPT4ge30sDQoJCQkgIGVuY2xvc2lu
Z19rZXl3b3JkID0+ICRrZXl3b3JkLA0KCQkJICBAb3RoZXJfYXJncw0KCQkJ
ICApOw0KICAgIHBhcnNlIChcJWlubmVyX2NvbnRleHQsICRkZWYpOw0KICAg
IHB1c2ggQGltcGxfaCwgJGlubmVyX2NvbnRleHR7ImltcGxfaF9kZWxheWVk
In0gaWYgZXhpc3RzICRpbm5lcl9jb250ZXh0eyJpbXBsX2hfZGVsYXllZCJ9
Ow0KfQ0KDQpzdWIgY2hlY2tfcmVzZXJ2ZWQgew0KICAgIG15ICgkaWRsX2xv
Y2FsX3R5cGUpID0gQF87DQogICAgY3JvYWsgIickaWRsX2xvY2FsX3R5cGUn
IGlzIGEgcmVzZXJ2ZWQgQyBtZXRob2QiIGlmIGV4aXN0cyAkY19yZXNlcnZl
ZF9tZXRob2R7JGlkbF9sb2NhbF90eXBlfTsNCn0NCg0Kc3ViIG5ld190eXBl
IHsNCiAgICBteSAoJGNvbnRleHQsJGlkbF9sb2NhbF90eXBlLCRjX2dsb2Jh
bF90eXBlKSA9IEBfOw0KICAgIGNyb2FrICJVbmRlZmluZWQgdHlwZSBuYW1l
IiB1bmxlc3MgZGVmaW5lZCgkaWRsX2xvY2FsX3R5cGUpICYmIGRlZmluZWQo
JGNfZ2xvYmFsX3R5cGUpOw0KICAgICRjb250ZXh0LT57ImNfdHlwZSJ9LT57
JGlkbF9sb2NhbF90eXBlfSA9ICRjX2dsb2JhbF90eXBlOw0KfQ0KDQpzdWIg
c2NvcGVfaWRsX2xvY2FsX3R5cGUgew0KICAgIG15ICgkY29udGV4dCwkaWRs
X2xvY2FsX3R5cGUpID0gQF87DQogICAgY3JvYWsgIickaWRsX2xvY2FsX3R5
cGUnIGlzIGEgcmVzZXJ2ZWQgQyBtZXRob2QiIGlmIGV4aXN0cyAkY19yZXNl
cnZlZF9tZXRob2R7JGlkbF9sb2NhbF90eXBlfTsNCiAgICBqb2luICgiOjoi
LCBAeyRjb250ZXh0LT57ImlkbF9zY29wZV9saXN0In19LCAkaWRsX2xvY2Fs
X3R5cGUpOw0KfQ0KDQpzdWIgZmluZF9pZGxfc2NvcGUgew0KICAgIG15ICgk
Y29udGV4dCwkaWRsX3R5cGUpID0gQF87DQogICAgbXkgJHNjb3BlZF9pZGxf
dHlwZSA9ICRpZGxfdHlwZTsNCiAgICBpZiAoJGlkbF90eXBlICF+IC86Oi8p
IHsNCglmb3IgKG15ICRwb3BfY29udGV4dCA9ICRjb250ZXh0OyBkZWZpbmVk
KCRwb3BfY29udGV4dCk7ICRwb3BfY29udGV4dCA9ICRwb3BfY29udGV4dC0+
eyJvdXRlcl9jb250ZXh0In0pIHsNCgkgICAgaWYgKGV4aXN0cyAkcG9wX2Nv
bnRleHQtPnsiY190eXBlIn0tPnskaWRsX3R5cGV9KSB7DQoJCSRzY29wZWRf
aWRsX3R5cGUgPSBzY29wZV9pZGxfbG9jYWxfdHlwZSAoJHBvcF9jb250ZXh0
LCAkaWRsX3R5cGUpOw0KCQlsYXN0Ow0KCSAgICB9DQoJfQ0KICAgIH0NCiAg
ICAkc2NvcGVkX2lkbF90eXBlOw0KfQ0KDQpzdWIgY19tb2R1bGVfcHJlZml4
IHsNCiAgICBteSAoJGNvbnRleHQsJGlkbF9tb2R1bGVfbmFtZSkgPSBAXzsN
CiAgICBteSBAaWRsX3Njb3BlX2xpc3QgPSBAeyRjb250ZXh0LT57ImlkbF9z
Y29wZV9saXN0In19Ow0KICAgIGNyb2FrICJDYW4ndCBkZWZpbmUgb25lIG1v
ZHVsZSBpbnNpZGUgYW5vdGhlciIgaWYgZGVmaW5lZCgkY29udGV4dC0+eyJl
bmNsb3Npbmdfa2V5d29yZCJ9KSB8fCBAeyRjb250ZXh0LT57ImlkbF9zY29w
ZV9saXN0In19Ow0KICAgIGNyb2FrICJJbnZhbGlkIG1vZHVsZSBuYW1lICck
aWRsX21vZHVsZV9uYW1lJyIgdW5sZXNzICRpZGxfbW9kdWxlX25hbWUgPX4g
cy8kaWRsX21vZHVsZV9zdWZmaXgkLy87DQogICAgJGNfZ2xvYmFsX3ByZWZp
eCAuICRpZGxfbW9kdWxlX25hbWUgLiAiXyI7DQp9DQoNCnN1YiBjX3Njb3Bl
X2xpc3Qgew0KICAgIG15ICgkY29udGV4dCkgPSBAXzsNCiAgICBteSBAY19z
Y29wZSA9IG1hcCAoKC8oLiopXyRpZGxfc3RhdGljX3N1ZmZpeCQvID8gJDEg
OiAkXyksIEB7JGNvbnRleHQtPnsiaWRsX3Njb3BlX2xpc3QifX0pOw0KICAg
IGNyb2FrICJJbnZhbGlkIG1vZHVsZSBuYW1lICckY19zY29wZVswXSciIHVu
bGVzcyBAY19zY29wZSA9PSAwIHx8ICRjX3Njb3BlWzBdID1+IHMvJGlkbF9t
b2R1bGVfc3VmZml4JC8vOw0KICAgIEBjX3Njb3BlOw0KfQ0KDQpzdWIgY190
eXBlIHsNCiAgICBteSAoJGNvbnRleHQsJGlkbF9uYW1lKSA9IEBfOw0KICAg
IGNyb2FrICJVbmRlZmluZWQgdHlwZSBuYW1lIiB1bmxlc3MgZGVmaW5lZCAk
aWRsX25hbWU7DQogICAgbXkgJGtleXdvcmQgPSAkY29udGV4dC0+eyJlbmNs
b3Npbmdfa2V5d29yZCJ9Ow0KICAgIGNyb2FrICJPbmx5IElETCBtb2R1bGVz
IGFuZCBpbnRlcmZhY2VzIGhhdmUgYSBDIG5hbWVzcGFjZSBwcmVmaXggKGtl
eXdvcmQgd2FzIFwiJGtleXdvcmRcIikiIGlmICRrZXl3b3JkICF+IC9ebW9k
dWxlJHxeaW50ZXJmYWNlJC87DQogICAgbXkgQGNfc2NvcGVfbGlzdCA9IGNf
c2NvcGVfbGlzdCgkY29udGV4dCk7DQogICAgbXkgJGNfbW9kdWxlID0gc2hp
ZnQgQGNfc2NvcGVfbGlzdDsNCiAgICBwdXNoIEBjX3Njb3BlX2xpc3QsICRp
ZGxfbmFtZTsNCiAgICBzaGlmdCBAY19zY29wZV9saXN0IGlmIEBjX3Njb3Bl
X2xpc3QgPiAwICYmICRjX3Njb3BlX2xpc3RbMF0gZXEgJGNfbW9kdWxlOw0K
ICAgICRjX2dsb2JhbF9wcmVmaXggLiBqb2luKCJfIiwgJGNfbW9kdWxlLCBA
Y19zY29wZV9saXN0KTsNCn0NCg0Kc3ViIGNfc3RydWN0IHsNCiAgICBjX3R5
cGUgKEBfKSAuICJfJGNfc3RydWN0X3N1ZmZpeCI7DQp9DQoNCnN1YiBjX29i
amVjdF90eXBlIHsNCiAgICBteSAoJGNvbnRleHQpID0gQF87DQogICAgbXkg
QGNfc2NvcGVfbGlzdCA9IGNfc2NvcGVfbGlzdCgkY29udGV4dCk7DQogICAg
Y3JvYWsgIkNhbid0IGhhdmUgYSBDIHN0cnVjdCBvciB1bmlvbiBvdXRzaWRl
IGFuIElETCBpbnRlcmZhY2UsIHN0cnVjdCBvciB1bmlvbiIgdW5sZXNzIEBj
X3Njb3BlX2xpc3QgPiAxOw0KICAgIG15ICRjX21vZHVsZSA9IHNoaWZ0IEBj
X3Njb3BlX2xpc3Q7DQogICAgc2hpZnQgQGNfc2NvcGVfbGlzdCBpZiBAY19z
Y29wZV9saXN0ID4gMCAmJiAkY19zY29wZV9saXN0WzBdIGVxICRjX21vZHVs
ZTsNCiAgICAkY19nbG9iYWxfcHJlZml4IC4gam9pbiAoIl8iLCAkY19tb2R1
bGUsIEBjX3Njb3BlX2xpc3QpOw0KfQ0KDQpzdWIgY19lbmNsb3Npbmdfc3Ry
dWN0X29yX3VuaW9uIHsNCiAgICBteSAoJGNvbnRleHQpID0gQF87DQogICAg
bXkgJHN0cnVjdF9vcl91bmlvbiA9ICRjb250ZXh0LT57ImVuY2xvc2luZ19r
ZXl3b3JkIn0gZXEgInVuaW9uIiA/ICJ1bmlvbiIgOiAic3RydWN0IjsNCiAg
ICBteSBAY19zY29wZV9saXN0ID0gY19zY29wZV9saXN0KCRjb250ZXh0KTsN
CiAgICBjcm9hayAiQ2FuJ3QgaGF2ZSBhIEMgc3RydWN0IG9yIHVuaW9uIG91
dHNpZGUgYW4gSURMIGludGVyZmFjZSwgc3RydWN0IG9yIHVuaW9uIiB1bmxl
c3MgQGNfc2NvcGVfbGlzdCA+IDE7DQogICAgbXkgJGNfbW9kdWxlID0gc2hp
ZnQgQGNfc2NvcGVfbGlzdDsNCiAgICBzaGlmdCBAY19zY29wZV9saXN0IGlm
IEBjX3Njb3BlX2xpc3QgPiAwICYmICRjX3Njb3BlX2xpc3RbMF0gZXEgJGNf
bW9kdWxlOw0KICAgICRzdHJ1Y3Rfb3JfdW5pb24gLiAiICIgLiAkY19nbG9i
YWxfcHJlZml4IC4gam9pbiAoIl8iLCAkY19tb2R1bGUsIEBjX3Njb3BlX2xp
c3QsICRjX3N0cnVjdF9zdWZmaXgpOw0KfQ0KDQpzdWIgZmluZF9zY29wZV9h
bmRfZ2V0X2NfdHlwZSB7DQogICAgbXkgKCRjb250ZXh0LCRpZGxfbG9jYWxf
dHlwZSkgPSBAXzsNCiAgICBteSAkY190eXBlID0gJGlkbF9sb2NhbF90eXBl
Ow0KICAgIG15ICRpZGxfZ2xvYmFsX3R5cGUgPSBmaW5kX2lkbF9zY29wZSgk
Y29udGV4dCwkaWRsX2xvY2FsX3R5cGUpOw0KICAgIG15ICRyZWdleHAgPSAi
XihbXjpdKz8pJGlkbF9tb2R1bGVfc3VmZml4IiAuICI6OiguKilcJCI7ICAj
IGJld2FyZSBjbGFzaCBiZXR3ZWVuIElETCdzICYgUGVybCdzICI6OiINCiAg
ICBpZiAoJGlkbF9nbG9iYWxfdHlwZSA9fiAvJHJlZ2V4cC8pIHsNCglteSAo
JGNfbW9kdWxlLCRpZGxfdHlwZV9yZW1haW5kZXIpID0gKCQxLCQyKTsNCglt
eSBAY19zY29wZV9saXN0ID0gc3BsaXQgLzo6LywgJGlkbF90eXBlX3JlbWFp
bmRlcjsNCglzaGlmdCBAY19zY29wZV9saXN0IGlmIEBjX3Njb3BlX2xpc3Qg
PiAwICYmICRjX3Njb3BlX2xpc3RbMF0gZXEgJGNfbW9kdWxlOw0KCSRjX3R5
cGUgPSAkY19nbG9iYWxfcHJlZml4IC4gam9pbiAoIl8iLCAkY19tb2R1bGUs
IEBjX3Njb3BlX2xpc3QpOw0KICAgIH0NCiAgICAkY190eXBlOw0KfQ0KDQpz
dWIgcmVwb3J0IHsNCiAgICBteSAoJGNvbnRleHQsICRmcm9tLCAkdG8pID0g
QF87DQogICAgd2FybiAiICIgeCAoMipAeyRjb250ZXh0LT57ImlkbF9zY29w
ZV9saXN0In19KSwgIiRmcm9tICAgLS0tPiAgICR0b1xuIjsNCn0NCg0Kc3Vi
IHBhcnNlIHsNCiAgICBteSAoJGNvbnRleHQsJHRleHQpID0gQF87DQogICAg
Y3JvYWsgIkNhbid0IHBhcnNlIHRoZSBhaXIiIHVubGVzcyBkZWZpbmVkICR0
ZXh0Ow0KICAgIHdoaWxlICgxKSB7DQoJJHRleHQgPX4gcy9eICsvLzsNCgkk
dGV4dCA9fiBzLyArJC8vOw0KCWxhc3QgdW5sZXNzIGxlbmd0aCAkdGV4dDsN
CglteSAoJGJlZm9yZSwgJGluc2lkZSwgJGFmdGVyKSA9IG5leHRfYmxvY2sg
KCR0ZXh0KTsNCiMJd2FybiAiYmVmb3JlPVwiJGJlZm9yZVwiIGluc2lkZT1c
IiRpbnNpZGVcIiBhZnRlcj1cIiRhZnRlclwiXG4iOw0KCWlmICgkYmVmb3Jl
ID1+IC9ebW9kdWxlIChcUyspID8kLykgeyBuZXdfbW9kdWxlICgkY29udGV4
dCwgJDEsICRpbnNpZGUpIH0NCgllbHNpZiAoJGJlZm9yZSA9fiAvXnN0cnVj
dCAoXHcrKSA/JC8pIHsgbmV3X3N0cnVjdCAoJGNvbnRleHQsICQxLCAkaW5z
aWRlKSB9DQoJZWxzaWYgKCRiZWZvcmUgPX4gL150eXBlZGVmIHNlcXVlbmNl
PCguKj8pPiAoXHcrKSA/JC8gJiYgIWRlZmluZWQoJGluc2lkZSkpIHsgbmV3
X3R5cGVkZWZfc2VxdWVuY2UgKCRjb250ZXh0LCAkMSwgJDIpIH0NCgllbHNp
ZiAoJGJlZm9yZSA9fiAvXnR5cGVkZWYgKC4qPykgKFx3KykgPyQvICYmICFk
ZWZpbmVkKCRpbnNpZGUpKSB7IG5ld190eXBlZGVmICgkY29udGV4dCwgJDEs
ICQyKSB9DQoJZWxzaWYgKCRiZWZvcmUgPX4gL15lbnVtIChcdyspID8kLykg
eyBuZXdfZW51bSAoJGNvbnRleHQsICQxLCAkaW5zaWRlKSB9DQoJZWxzaWYg
KCRiZWZvcmUgPX4gL151bmlvbiAoXHcrKSBzd2l0Y2ggP1woKFteXCldKylc
KSA/JC8pIHsgbmV3X3VuaW9uICgkY29udGV4dCwgJDEsICQyLCAkaW5zaWRl
KSB9DQoJDQoJZWxzaWYgKCRiZWZvcmUgPX4gL15leGNlcHRpb24gKFx3Kykg
PyQvKSB7IG5ld19leGNlcHRpb24gKCRjb250ZXh0LCAkMSwgJGluc2lkZSkg
fQ0KCQ0KCWVsc2lmICgkYmVmb3JlID1+IC9eaW50ZXJmYWNlIChcdys/KV8k
aWRsX3N0YXRpY19zdWZmaXggPyQvICYmICFkZWZpbmVkKCRpbnNpZGUpKSB7
IG5ld19zdGF0aWNfaW50ZXJmYWNlX2RlY2xhcmF0aW9uICgkY29udGV4dCwg
JDEpIH0NCgllbHNpZiAoJGJlZm9yZSA9fiAvXmludGVyZmFjZSAoXHcrKSA/
JC8gJiYgIWRlZmluZWQoJGluc2lkZSkpIHsgbmV3X2ludGVyZmFjZV9kZWNs
YXJhdGlvbiAoJGNvbnRleHQsICQxKSB9DQoNCgllbHNpZiAoJGJlZm9yZSA9
fiAvXmludGVyZmFjZSAoXHcrPylfJGlkbF9zdGF0aWNfc3VmZml4ID8kLykg
eyBuZXdfc3RhdGljX2ludGVyZmFjZSAoJGNvbnRleHQsICQxLCAkaW5zaWRl
KSB9DQoJZWxzaWYgKCRiZWZvcmUgPX4gL15pbnRlcmZhY2UgKFx3KykgPyQv
KSB7IG5ld19iYXNlX2ludGVyZmFjZSAoJGNvbnRleHQsICQxLCAkaW5zaWRl
KSB9DQoJZWxzaWYgKCRiZWZvcmUgPX4gL15pbnRlcmZhY2UgKFx3KykgPzog
PyhcUyspID8kLykgeyBuZXdfZGVyaXZlZF9pbnRlcmZhY2UgKCRjb250ZXh0
LCAkMSwgJDIsICRpbnNpZGUpIH0NCgkNCgllbHNpZiAoJGJlZm9yZSA9fiAv
XmF0dHJpYnV0ZSAoXHcrKSAoXHcrKSA/JC8gJiYgIWRlZmluZWQoJGluc2lk
ZSkpIHsgbmV3X2F0dHJpYnV0ZSAoJGNvbnRleHQsICQxLCAkMikgfQ0KCWVs
c2lmICgkYmVmb3JlID1+IC9ecmVhZG9ubHkgYXR0cmlidXRlIChcdyspIChc
dyspID8kLyAmJiAhZGVmaW5lZCgkaW5zaWRlKSkgeyBuZXdfcmVhZG9ubHlf
YXR0cmlidXRlICgkY29udGV4dCwgJDEsICQyKSB9DQoNCgllbHNpZiAoJGJl
Zm9yZSA9fiAvXihbXlwoXSs/KSAoXHcrKSQvKSB7IG5ld19kYXRhX21lbWJl
ciAoJGNvbnRleHQsICQxLCAkMikgfQ0KCQ0KCWVsc2lmICgkYmVmb3JlID1+
IC9eKFteXChdKykgKFx3Kz8pXyRpZGxfdmlydHVhbF9zdWZmaXggP1woKFte
XCldKilcKSA/JC8gJiYgIWRlZmluZWQgJGluc2lkZSkgeyBuZXdfdmlydHVh
bF9tZXRob2QgKCRjb250ZXh0LCAkMSwgJDIsICQzKSB9DQoJZWxzaWYgKCRi
ZWZvcmUgPX4gL14oW15cKF0rKSAoXHcrPylfJGlkbF92aXJ0dWFsX3N1ZmZp
eCA/XCgoW15cKV0qKVwpID9yYWlzZXMgP1woKFteXCldKylcKSA/JC8gJiYg
IWRlZmluZWQgJGluc2lkZSkgeyBuZXdfdmlydHVhbF9tZXRob2RfcmFpc2Vz
ICgkY29udGV4dCwgJDEsICQyLCAkMywgJDQpIH0NCg0KCWVsc2lmICgkYmVm
b3JlID1+IC9eKFteXChdKykgKFx3Kz8pID9cKChbXlwpXSopXCkgPyQvICYm
ICFkZWZpbmVkICRpbnNpZGUpIHsgbmV3X21ldGhvZCAoJGNvbnRleHQsICQx
LCAkMiwgJDMpIH0NCgllbHNpZiAoJGJlZm9yZSA9fiAvXihbXlwoXSspIChc
dys/KSA/XCgoW15cKV0qKVwpID9yYWlzZXMgP1woKFteXCldKylcKSA/JC8g
JiYgIWRlZmluZWQgJGluc2lkZSkgeyBuZXdfbWV0aG9kX3JhaXNlcyAoJGNv
bnRleHQsICQxLCAkMiwgJDMsICQ0KSB9DQoJJHRleHQgPSAkYWZ0ZXI7DQog
ICAgfQ0KfQ0KDQpzdWIgbmV3X21vZHVsZSB7DQogICAgbXkgKCRjb250ZXh0
LCRpZGxfbW9kdWxlX25hbWUsJGRlZikgPSBAXzsNCiAgICBteSAkY19wcmVm
aXggPSBjX21vZHVsZV9wcmVmaXgoJGNvbnRleHQsJGlkbF9tb2R1bGVfbmFt
ZSk7DQogICAgcmVwb3J0ICgkY29udGV4dCwgIm1vZHVsZSAkaWRsX21vZHVs
ZV9uYW1lIiwgIm5hbWVzcGFjZSAkY19wcmVmaXgiKTsNCiAgICBwdXNoX2Nv
bnRleHQoJGNvbnRleHQsIm1vZHVsZSIsJGlkbF9tb2R1bGVfbmFtZSwkZGVm
KTsNCn0NCg0Kc3ViIG5ld19zdHJ1Y3Qgew0KICAgIG15ICgkY29udGV4dCwk
aWRsX3N0cnVjdCwkZGVmKSA9IEBfOw0KICAgIGNoZWNrX3Jlc2VydmVkICgk
aWRsX3N0cnVjdCk7DQogICAgbXkgJGNfdHlwZSA9IGNfdHlwZSgkY29udGV4
dCwkaWRsX3N0cnVjdCk7DQogICAgbXkgJGNfc3RydWN0ID0gY19zdHJ1Y3Qo
JGNvbnRleHQsJGlkbF9zdHJ1Y3QpOw0KICAgIHJlcG9ydCAoJGNvbnRleHQs
ICJzdHJ1Y3QgJGlkbF9zdHJ1Y3QiLCAidHlwZWRlZiBzdHJ1Y3QgJGNfc3Ry
dWN0IHsgLi4uIH0gJGNfdHlwZSIpOw0KICAgIG5ld190eXBlICgkY29udGV4
dCwkaWRsX3N0cnVjdCwkY190eXBlKTsNCiAgICBwdXNoX2NvbnRleHQoJGNv
bnRleHQsInN0cnVjdCIsJGlkbF9zdHJ1Y3QsJGRlZik7DQp9DQoNCnN1YiBu
ZXdfdHlwZWRlZl9zZXF1ZW5jZSB7DQogICAgbXkgKCRjb250ZXh0LCRpZGxf
ZWxlbWVudF90eXBlLCRpZGxfc2VxdWVuY2VfdHlwZSkgPSBAXzsNCiAgICBj
aGVja19yZXNlcnZlZCAoJGlkbF9zZXF1ZW5jZV90eXBlKTsNCiAgICBteSAk
Y19lbGVtZW50X3R5cGUgPSBmaW5kX3Njb3BlX2FuZF9nZXRfY190eXBlICgk
Y29udGV4dCwgJGlkbF9lbGVtZW50X3R5cGUpOw0KICAgIG15ICRjX3NlcXVl
bmNlX3R5cGUgPSBjX3R5cGUoJGNvbnRleHQsJGlkbF9zZXF1ZW5jZV90eXBl
KTsNCiAgICByZXBvcnQgKCRjb250ZXh0LCAidHlwZWRlZiBzZXF1ZW5jZTwk
aWRsX2VsZW1lbnRfdHlwZT4gJGlkbF9zZXF1ZW5jZV90eXBlIiwgInR5cGVk
ZWYgJGdsaWJfYXJyYXkgJGNfc2VxdWVuY2VfdHlwZSIpOw0KICAgIG5ld190
eXBlICgkY29udGV4dCwkaWRsX3NlcXVlbmNlX3R5cGUsJGNfc2VxdWVuY2Vf
dHlwZSk7DQp9DQoNCnN1YiBuZXdfdHlwZWRlZiB7DQogICAgbXkgKCRjb250
ZXh0LCRpZGxfb2xkX3R5cGUsJGlkbF9uZXdfdHlwZSkgPSBAXzsNCiAgICBj
aGVja19yZXNlcnZlZCAoJGlkbF9uZXdfdHlwZSk7DQogICAgaWYgKGV4aXN0
cyAkY190eXBlZGVmeyRpZGxfbmV3X3R5cGV9KSB7DQoJcmVwb3J0ICgkY29u
dGV4dCwgInR5cGVkZWYgJGlkbF9vbGRfdHlwZSAkaWRsX25ld190eXBlIiwg
InR5cGVkZWYgJGNfdHlwZWRlZnskaWRsX25ld190eXBlfSAkaWRsX25ld190
eXBlIik7DQogICAgfSBlbHNlIHsNCglteSAkY19vbGRfdHlwZSA9IGZpbmRf
c2NvcGVfYW5kX2dldF9jX3R5cGUgKCRjb250ZXh0LCAkaWRsX29sZF90eXBl
KTsNCglteSAkY19uZXdfdHlwZSA9IGNfdHlwZSgkY29udGV4dCwkaWRsX25l
d190eXBlKTsNCglyZXBvcnQgKCRjb250ZXh0LCAidHlwZWRlZiAkaWRsX29s
ZF90eXBlICRpZGxfbmV3X3R5cGUiLCAidHlwZWRlZiAkY19vbGRfdHlwZSAk
Y19uZXdfdHlwZSIpOw0KCW5ld190eXBlICgkY29udGV4dCwkaWRsX25ld190
eXBlLCRjX25ld190eXBlKTsNCiAgICB9DQp9DQoNCnN1YiBuZXdfZW51bSB7
DQogICAgbXkgKCRjb250ZXh0LCRpZGxfZW51bSwkZGVmKSA9IEBfOw0KICAg
IGNoZWNrX3Jlc2VydmVkICgkaWRsX2VudW0pOw0KICAgIG15ICRjX2VudW0g
PSBjX3R5cGUoJGNvbnRleHQsJGlkbF9lbnVtKTsNCiAgICByZXBvcnQgKCRj
b250ZXh0LCAiZW51bSAkaWRsX2VudW0iLCAiZW51bSAkY19lbnVtIik7DQog
ICAgbmV3X3R5cGUgKCRjb250ZXh0LCRpZGxfZW51bSwkY19lbnVtKTsNCn0N
Cg0Kc3ViIG5ld191bmlvbiB7DQogICAgbXkgKCRjb250ZXh0LCRpZGxfdW5p
b24sJGlkbF9zd2l0Y2gsJGRlZikgPSBAXzsNCiAgICBjaGVja19yZXNlcnZl
ZCAoJGlkbF91bmlvbik7DQogICAgbXkgJGNfdHlwZSA9IGNfdHlwZSgkY29u
dGV4dCwkaWRsX3VuaW9uKTsNCiAgICBteSAkY191bmlvbiA9IGNfc3RydWN0
KCRjb250ZXh0LCRpZGxfdW5pb24pOw0KICAgIHJlcG9ydCAoJGNvbnRleHQs
ICJ1bmlvbiAkaWRsX3VuaW9uIiwgInR5cGVkZWYgdW5pb24gJGNfdW5pb24g
eyAuLi4gfSAkY190eXBlIik7DQogICAgbmV3X3R5cGUgKCRjb250ZXh0LCRp
ZGxfdW5pb24sJGNfdHlwZSk7DQogICAgJGRlZiA9fiBzL2Nhc2UgXHcrID86
ID8vL2c7DQogICAgJGRlZiA9fiBzL2RlZmF1bHQgPzogPy8vOw0KICAgIHB1
c2hfY29udGV4dCgkY29udGV4dCwidW5pb24iLCRpZGxfdW5pb24sJGRlZik7
DQp9DQoNCnN1YiBuZXdfZXhjZXB0aW9uIHsNCiAgICBteSAoJGNvbnRleHQs
JGlkbF9leGNlcHRpb24sJGRlZikgPSBAXzsNCiAgICBjaGVja19yZXNlcnZl
ZCAoJGlkbF9leGNlcHRpb24pOw0KICAgIG15ICRjX3R5cGUgPSBjX3R5cGUo
JGNvbnRleHQsJGlkbF9leGNlcHRpb24pOw0KICAgIHJlcG9ydCAoJGNvbnRl
eHQsICJleGNlcHRpb24gJGlkbF9leGNlcHRpb24iLCAiY29uc3QgY2hhciog
JGNfdHlwZSA9IFwiJGlkbF9leGNlcHRpb25cIiIpOw0KICAgIG5ld190eXBl
ICgkY29udGV4dCwkaWRsX2V4Y2VwdGlvbiwkY190eXBlKTsNCn0NCg0Kc3Vi
IG5ld19zdGF0aWNfaW50ZXJmYWNlX2RlY2xhcmF0aW9uIHsNCn0NCg0Kc3Vi
IG5ld19pbnRlcmZhY2VfZGVjbGFyYXRpb24gew0KfQ0KDQpzdWIgbmV3X3N0
YXRpY19pbnRlcmZhY2Ugew0KICAgIG15ICgkY29udGV4dCwkaWRsX2ludGVy
ZmFjZV9wcmVmaXgsJGRlZikgPSBAXzsNCiAgICBteSAkaWRsX2ludGVyZmFj
ZSA9ICRpZGxfaW50ZXJmYWNlX3ByZWZpeCAuICJfIiAuICRpZGxfc3RhdGlj
X3N1ZmZpeDsNCiAgICBjaGVja19yZXNlcnZlZCAoJGlkbF9pbnRlcmZhY2Up
Ow0KICAgIG15ICRjX25hbWVzcGFjZSA9IGNfdHlwZSgkY29udGV4dCwkaWRs
X2ludGVyZmFjZV9wcmVmaXgpIC4gIl8iOw0KICAgIHJlcG9ydCAoJGNvbnRl
eHQsICJpbnRlcmZhY2UgJGlkbF9pbnRlcmZhY2UiLCAibmFtZXNwYWNlICRj
X25hbWVzcGFjZSIpOw0KICAgIHB1c2hfY29udGV4dCgkY29udGV4dCwiaW50
ZXJmYWNlIiwkaWRsX2ludGVyZmFjZSwkZGVmLHN0YXRpYz0+MSk7DQp9DQoN
CnN1YiBuZXdfYmFzZV9pbnRlcmZhY2Ugew0KICAgIG15ICgkY29udGV4dCwk
aWRsX2ludGVyZmFjZSwkZGVmKSA9IEBfOw0KICAgIGNoZWNrX3Jlc2VydmVk
ICgkaWRsX2ludGVyZmFjZSk7DQogICAgbXkgJGNfdHlwZSA9IGNfdHlwZSgk
Y29udGV4dCwkaWRsX2ludGVyZmFjZSk7DQogICAgbXkgJGNfc3RydWN0ID0g
Y19zdHJ1Y3QoJGNvbnRleHQsJGlkbF9pbnRlcmZhY2UpOw0KICAgIHJlcG9y
dCAoJGNvbnRleHQsICJpbnRlcmZhY2UgJGlkbF9pbnRlcmZhY2UiLCAidHlw
ZWRlZiBzdHJ1Y3QgJGNfc3RydWN0KiAkY190eXBlOyBzdHJ1Y3QgJGNfc3Ry
dWN0IHsgdW5zaWduZWQgaW50IF8kY19yZWZfdmFyOyB2b2lkKiBfJGNfZGVy
aXZfdmFyOyAuLi4gfSIpOw0KICAgIG5ld190eXBlICgkY29udGV4dCwkaWRs
X2ludGVyZmFjZSwkY190eXBlKTsNCiAgICBwdXNoX2NvbnRleHQoJGNvbnRl
eHQsImludGVyZmFjZSIsJGlkbF9pbnRlcmZhY2UsJGRlZik7DQp9DQoNCnN1
YiBuZXdfZGVyaXZlZF9pbnRlcmZhY2Ugew0KICAgIG15ICgkY29udGV4dCwk
aWRsX2ludGVyZmFjZSwkaWRsX2Jhc2UsJGRlZikgPSBAXzsNCiAgICBjaGVj
a19yZXNlcnZlZCAoJGlkbF9pbnRlcmZhY2UpOw0KICAgIG15ICRjX3R5cGUg
PSBjX3R5cGUoJGNvbnRleHQsJGlkbF9pbnRlcmZhY2UpOw0KICAgIG15ICRj
X2Rlcml2ZWRfdHlwZSA9IGNfdHlwZSgkY29udGV4dCwkaWRsX2ludGVyZmFj
ZSkgLiAiXyIgLiAkY19kZXJpdjsNCiAgICBteSAkY19zdHJ1Y3QgPSBjX3N0
cnVjdCgkY29udGV4dCwkaWRsX2ludGVyZmFjZSk7DQogICAgbXkgJGNfYmFz
ZSA9IGZpbmRfc2NvcGVfYW5kX2dldF9jX3R5cGUoJGNvbnRleHQsJGlkbF9i
YXNlKTsNCiAgICByZXBvcnQgKCRjb250ZXh0LCAiaW50ZXJmYWNlICRpZGxf
aW50ZXJmYWNlIDogJGlkbF9iYXNlIiwgInR5cGVkZWYgJGNfYmFzZSAkY190
eXBlOyB0eXBlZGVmIHN0cnVjdCAkY19zdHJ1Y3QqICRjX2Rlcml2ZWRfdHlw
ZTsgc3RydWN0ICRjX3N0cnVjdCB7IHVuc2lnbmVkIGludCBfJGNfcmVmX3Zh
cjsgdm9pZCogXyRjX2Rlcml2X3ZhcjsgJGNfYmFzZSBfJGNfYmFzZV92YXI7
IC4uLiB9Iik7DQogICAgbmV3X3R5cGUgKCRjb250ZXh0LCRpZGxfaW50ZXJm
YWNlLCRjX3R5cGUpOw0KICAgIHB1c2hfY29udGV4dCgkY29udGV4dCwiaW50
ZXJmYWNlIiwkaWRsX2ludGVyZmFjZSwkZGVmKTsNCn0NCg0Kc3ViIG5ld19h
dHRyaWJ1dGUgew0KICAgIG15ICgkY29udGV4dCwkaWRsX3R5cGUsJGF0dHJp
YnV0ZV9uYW1lKSA9IEBfOw0KICAgIG15ICRjX3R5cGUgPSBmaW5kX3Njb3Bl
X2FuZF9nZXRfY190eXBlKCRjb250ZXh0LCRpZGxfdHlwZSk7DQogICAgbXkg
JGNfZW5jbG9zaW5nX3N0cnVjdF9vcl91bmlvbiA9IGNfZW5jbG9zaW5nX3N0
cnVjdF9vcl91bmlvbigkY29udGV4dCk7DQogICAgcmVwb3J0ICgkY29udGV4
dCwgImF0dHJpYnV0ZSAkaWRsX3R5cGUgJGF0dHJpYnV0ZV9uYW1lIiwgIiRj
X2VuY2xvc2luZ19zdHJ1Y3Rfb3JfdW5pb24geyAuLi4gJGNfdHlwZSAkYXR0
cmlidXRlX25hbWU7IC4uLiB9Iik7DQp9DQoNCnN1YiBuZXdfcmVhZG9ubHlf
YXR0cmlidXRlIHsNCiAgICBteSAoJGNvbnRleHQsJGlkbF90eXBlLCRhdHRy
aWJ1dGVfbmFtZSkgPSBAXzsNCiAgICBteSAkY190eXBlID0gZmluZF9zY29w
ZV9hbmRfZ2V0X2NfdHlwZSgkY29udGV4dCwkaWRsX3R5cGUpOw0KICAgIG15
ICRjX2VuY2xvc2luZ19zdHJ1Y3Rfb3JfdW5pb24gPSBjX2VuY2xvc2luZ19z
dHJ1Y3Rfb3JfdW5pb24oJGNvbnRleHQpOw0KICAgIHJlcG9ydCAoJGNvbnRl
eHQsICJyZWFkb25seSBhdHRyaWJ1dGUgJGlkbF90eXBlICRhdHRyaWJ1dGVf
bmFtZSIsICIkY19lbmNsb3Npbmdfc3RydWN0X29yX3VuaW9uIHsgLi4uICRj
X3R5cGUgJGF0dHJpYnV0ZV9uYW1lOyAuLi4gfSIpOw0KfQ0KDQpzdWIgbmV3
X2RhdGFfbWVtYmVyIHsNCiAgICBteSAoJGNvbnRleHQsJGlkbF90eXBlLCRt
ZW1iZXJfbmFtZSkgPSBAXzsNCiAgICBteSAkY190eXBlID0gZmluZF9zY29w
ZV9hbmRfZ2V0X2NfdHlwZSgkY29udGV4dCwkaWRsX3R5cGUpOw0KICAgIG15
ICRjX2VuY2xvc2luZ19zdHJ1Y3Rfb3JfdW5pb24gPSBjX2VuY2xvc2luZ19z
dHJ1Y3Rfb3JfdW5pb24oJGNvbnRleHQpOw0KICAgIHJlcG9ydCAoJGNvbnRl
eHQsICIkaWRsX3R5cGUgJG1lbWJlcl9uYW1lIiwgIiRjX2VuY2xvc2luZ19z
dHJ1Y3Rfb3JfdW5pb24geyAuLi4gJGNfdHlwZSAkbWVtYmVyX25hbWU7IC4u
LiB9Iik7DQp9DQoNCnN1YiBuZXdfdmlydHVhbF9tZXRob2Qgew0KICAgIG15
ICgkY29udGV4dCwkaWRsX3JldHVybl90eXBlLCRpZGxfbWV0aG9kX3ByZWZp
eCwkaWRsX2FyZ19saXN0KSA9IEBfOw0KICAgIGNoZWNrX3Jlc2VydmVkICgk
aWRsX21ldGhvZF9wcmVmaXgpOw0KICAgIG15ICRpZGxfbWV0aG9kX25hbWUg
PSAkaWRsX21ldGhvZF9wcmVmaXggLiAiXyRpZGxfdmlydHVhbF9zdWZmaXgi
Ow0KICAgIG15ICRjX3JldHVybl90eXBlID0gZmluZF9zY29wZV9hbmRfZ2V0
X2NfdHlwZSgkY29udGV4dCwkaWRsX3JldHVybl90eXBlKTsNCiAgICBteSAk
Y190eXBlID0gY190eXBlKCRjb250ZXh0LCRpZGxfbWV0aG9kX3ByZWZpeCk7
DQogICAgbXkgJGNfYXJnX2xpc3QgPSBjb252ZXJ0X2FyZ19saXN0X3RvX2Mg
KCRjb250ZXh0LCRpZGxfYXJnX2xpc3QpOw0KICAgIHJlcG9ydCAoJGNvbnRl
eHQsICIkaWRsX3JldHVybl90eXBlICRpZGxfbWV0aG9kX25hbWUoJGlkbF9h
cmdfbGlzdCkiLCAidHlwZWRlZiAkY19yZXR1cm5fdHlwZSAoKiRjX3R5cGUp
KCRjX2FyZ19saXN0KSIpOw0KICAgIG5ld190eXBlICgkY29udGV4dCwkaWRs
X21ldGhvZF9uYW1lLCRjX3R5cGUpOw0KfQ0KDQpzdWIgbmV3X3ZpcnR1YWxf
bWV0aG9kX3JhaXNlcyB7DQogICAgbXkgKCRjb250ZXh0LCRpZGxfcmV0dXJu
X3R5cGUsJGlkbF9tZXRob2RfcHJlZml4LCRpZGxfYXJnX2xpc3QsJGlkbF9l
eGNlcHRpb25zX2xpc3QpID0gQF87DQogICAgY2hlY2tfcmVzZXJ2ZWQgKCRp
ZGxfbWV0aG9kX3ByZWZpeCk7DQogICAgbXkgJGlkbF9tZXRob2RfbmFtZSA9
ICRpZGxfbWV0aG9kX3ByZWZpeCAuICJfJGlkbF92aXJ0dWFsX3N1ZmZpeCI7
DQogICAgbXkgJGNfcmV0dXJuX3R5cGUgPSBmaW5kX3Njb3BlX2FuZF9nZXRf
Y190eXBlKCRjb250ZXh0LCRpZGxfcmV0dXJuX3R5cGUpOw0KICAgIG15ICRj
X3R5cGUgPSBjX3R5cGUoJGNvbnRleHQsJGlkbF9tZXRob2RfcHJlZml4KTsN
CiAgICBteSAkY19hcmdfbGlzdCA9IGNvbnZlcnRfYXJnX2xpc3RfdG9fYyAo
JGNvbnRleHQsJGlkbF9hcmdfbGlzdCk7DQogICAgcmVwb3J0ICgkY29udGV4
dCwgIiRpZGxfcmV0dXJuX3R5cGUgJGlkbF9tZXRob2RfbmFtZSgkaWRsX2Fy
Z19saXN0KSByYWlzZXMgKCRpZGxfZXhjZXB0aW9uc19saXN0KSIsICJ0eXBl
ZGVmICRjX3JldHVybl90eXBlICgqJGNfdHlwZSkoJGNfYXJnX2xpc3QpIik7
DQogICAgbmV3X3R5cGUgKCRjb250ZXh0LCRpZGxfbWV0aG9kX25hbWUsJGNf
dHlwZSk7DQp9DQoNCnN1YiBuZXdfbWV0aG9kIHsNCiAgICBteSAoJGNvbnRl
eHQsJGlkbF9yZXR1cm5fdHlwZSwkaWRsX21ldGhvZF9uYW1lLCRpZGxfYXJn
X2xpc3QpID0gQF87DQogICAgY2hlY2tfcmVzZXJ2ZWQgKCRpZGxfbWV0aG9k
X25hbWUpOw0KICAgIG15ICRjX3JldHVybl90eXBlID0gZmluZF9zY29wZV9h
bmRfZ2V0X2NfdHlwZSgkY29udGV4dCwkaWRsX3JldHVybl90eXBlKTsNCiAg
ICBteSAkY19mdW5jdGlvbl9uYW1lID0gY190eXBlKCRjb250ZXh0LCRpZGxf
bWV0aG9kX25hbWUpOw0KICAgIG15ICRjX2FyZ19saXN0ID0gY29udmVydF9h
cmdfbGlzdF90b19jICgkY29udGV4dCwkaWRsX2FyZ19saXN0KTsNCiAgICBy
ZXBvcnQgKCRjb250ZXh0LCAiJGlkbF9yZXR1cm5fdHlwZSAkaWRsX21ldGhv
ZF9uYW1lKCRpZGxfYXJnX2xpc3QpIiwgIiRjX3JldHVybl90eXBlICRjX2Z1
bmN0aW9uX25hbWUoJGNfYXJnX2xpc3QpIik7DQp9DQoNCnN1YiBuZXdfbWV0
aG9kX3JhaXNlcyB7DQogICAgbXkgKCRjb250ZXh0LCRpZGxfcmV0dXJuX3R5
cGUsJGlkbF9tZXRob2RfbmFtZSwkaWRsX2FyZ19saXN0LCRleGNlcHRpb25z
X2xpc3QpID0gQF87DQogICAgY2hlY2tfcmVzZXJ2ZWQgKCRpZGxfbWV0aG9k
X25hbWUpOw0KICAgIG15ICRjX3JldHVybl90eXBlID0gZmluZF9zY29wZV9h
bmRfZ2V0X2NfdHlwZSgkY29udGV4dCwkaWRsX3JldHVybl90eXBlKTsNCiAg
ICBteSAkY19mdW5jdGlvbl9uYW1lID0gY190eXBlKCRjb250ZXh0LCRpZGxf
bWV0aG9kX25hbWUpOw0KICAgIG15ICRjX2FyZ19saXN0ID0gY29udmVydF9h
cmdfbGlzdF90b19jICgkY29udGV4dCwkaWRsX2FyZ19saXN0KTsNCiAgICBy
ZXBvcnQgKCRjb250ZXh0LCAiJGlkbF9yZXR1cm5fdHlwZSAkaWRsX21ldGhv
ZF9uYW1lKCRpZGxfYXJnX2xpc3QpIHJhaXNlcyAoJGV4Y2VwdGlvbnNfbGlz
dCkiLCAiJGNfcmV0dXJuX3R5cGUgJGNfZnVuY3Rpb25fbmFtZSgkY19hcmdf
bGlzdCkiKTsNCn0NCg0Kc3ViIGNvbnZlcnRfYXJnX2xpc3RfdG9fYyB7DQog
ICAgbXkgKCRjb250ZXh0LCRpZGxfYXJnbGlzdF9zdHJpbmcpID0gQF87DQog
ICAgbXkgQGlkbF9hcmcgPSBzcGxpdCAvICosICovLCAkaWRsX2FyZ2xpc3Rf
c3RyaW5nOw0KICAgIG15IEBjX2FyZzsNCiAgICBmb3JlYWNoICRpZGxfYXJn
IChAaWRsX2FyZykgew0KCWNyb2FrICJDb3VsZG4ndCBwYXJzZSBhcmd1bWVu
dCAnJGlkbF9hcmcnIGluICckaWRsX2FyZ2xpc3Rfc3RyaW5nJyIgdW5sZXNz
ICRpZGxfYXJnID1+IC9eID8oXHcrKSAoLio/KSAoXHcrKSA/JC87DQoJbXkg
KCRpZGxfaW5vdXQsJGlkbF90eXBlLCRhcmdfbmFtZSkgPSAoJDEsJDIsJDMp
Ow0KCWNyb2FrICJNaXNzaW5nIGlub3V0IG9uIGFyZyAnJGlkbF9hcmcnIGlu
ICckaWRsX2FyZ2xpc3Rfc3RyaW5nJyIgdW5sZXNzICRpZGxfaW5vdXQgZXEg
ImluIiB8fCAkaWRsX2lub3V0IGVxICJvdXQiIHx8ICRpZGxfaW5vdXQgZXEg
Imlub3V0IjsNCglteSAkY190eXBlID0gZmluZF9zY29wZV9hbmRfZ2V0X2Nf
dHlwZSgkY29udGV4dCwkaWRsX3R5cGUpOw0KCXB1c2ggQGNfYXJnLCAiJGNf
dHlwZSAkYXJnX25hbWUiOw0KICAgIH0NCiAgICBteSAkY19vYmplY3RfdHlw
ZSA9IGNfb2JqZWN0X3R5cGUgKCRjb250ZXh0KTsNCiAgICB1bnNoaWZ0IEBj
X2FyZywgIiRjX29iamVjdF90eXBlIF8kY19vYmpfdmFyIiB1bmxlc3MgZGVm
aW5lZCAkY29udGV4dC0+eyJzdGF0aWMifTsNCiAgICBqb2luICgiLCAiLCBA
Y19hcmcpOw0KfQ0KDQpzdWIgbmV4dF9ibG9jayB7DQogICAgbXkgKCR0ZXh0
KSA9IEBfOw0KICAgIGZvciAobXkgJGYgPSAwOyAkZiA8IGxlbmd0aCAkdGV4
dDsgKyskZikgew0KCWlmIChzdWJzdHIoJHRleHQsJGYsMSkgZXEgInsiKSB7
DQoJICAgIG15ICgkYywkbCk7DQoJICAgIGZvciAoJGwgPSAkZjsgJGwgPCBs
ZW5ndGggJHRleHQ7ICsrJGwpIHsNCgkJaWYgKHN1YnN0cigkdGV4dCwkbCwx
KSBlcSAieyIpIHsgKyskYyB9DQoJCWVsc2lmIChzdWJzdHIoJHRleHQsJGws
MSkgZXEgIn0iICYmIC0tJGM9PTApIHsNCgkJICAgIGZvciAobXkgJGEgPSAk
bDsgJGEgPCBsZW5ndGggJHRleHQ7ICsrJGEpIHsNCgkJCWlmIChzdWJzdHIo
JHRleHQsJGEsMSkgZXEgIjsiKSB7DQoJCQkgICAgZm9yICgrKyRhOyAkYTxs
ZW5ndGgkdGV4dDsgKyskYSkgeyBsYXN0IGlmIHN1YnN0cigkdGV4dCwkYSwx
KSBuZSAiICIgfQ0KCQkJICAgIHJldHVybiAoc3Vic3RyKCR0ZXh0LDAsJGYp
LHN1YnN0cigkdGV4dCwkZisxLCRsLSgkZisxKSksc3Vic3RyKCR0ZXh0LCRh
LGxlbmd0aCgkdGV4dCktJGEpKTsNCgkJCX0NCgkJICAgIH0NCgkJICAgIGNy
b2FrICJDb3VsZG4ndCBmaW5kICc7JyBhZnRlciAnfScgaW4gXCIkdGV4dFwi
IjsNCgkJfQ0KCSAgICB9DQoJICAgIGNyb2FrICJDb3VsZG4ndCBmaW5kICd9
JyBhZnRlciAneycgaW4gXCIkdGV4dFwiIjsNCgl9IGVsc2lmIChzdWJzdHIo
JHRleHQsJGYsMSkgZXEgIjsiKSB7DQoJICAgIG15ICRhOw0KCSAgICBmb3Ig
KCRhPSRmKzE7ICRhPGxlbmd0aCR0ZXh0OyArKyRhKSB7IGxhc3QgaWYgc3Vi
c3RyKCR0ZXh0LCRhLDEpIG5lICIgIiB9DQoJICAgIHJldHVybiAoc3Vic3Ry
KCR0ZXh0LDAsJGYpLHVuZGVmLHN1YnN0cigkdGV4dCwkYSxsZW5ndGgoJHRl
eHQpLSRhKSk7DQoJfQ0KICAgIH0NCiAgICBpZiAoJHRleHQgPX4gL1xTLykg
eyBjcm9hayAiQ291bGRuJ3QgcGFyc2UgXCIkdGV4dFwiIiB9DQp9DQoNCiMg
ZXhhbXBsZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW4gdW5kZXJpdmVkIGludGVy
ZmFjZSBhbmQgYSBkZXJpdmVkIGludGVyZmFjZQ0KIyANCiMgICAvLyBVbmRl
cml2ZWQgaW50ZXJmYWNlDQojIA0KIyAgIC8vIGludGVyZmFjZSBBIHsgYXR0
cmlidXRlIFQgQjsgVSBDX3ZmKC4uLik7IFYgRCgtLS0pOyB9Ow0KIyAgIC8v
IEluICJNb2R1bGVfYXV0by5oIiAoYXV0by1nZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0KQ0KIyAgIHR5cGVkZWYgc3RydWN0IE1vZHVsZV9BX3N0ciogTW9kdWxl
X0E7ICAvKiB0aGUgb2JqZWN0IHBvaW50ZXIgKi8NCiMgICB0eXBlZGVmIE1v
ZHVsZV9BIE1vZHVsZV9BX2Rlcml2OyAgLyogdGhlIG9iamVjdCBwb2ludGVy
IChzYW1lIGFzIHRoZSBvYmplY3QgcG9pbnRlciBzaW5jZSB0aGlzIGlzIGEg
YmFzZSBjbGFzcykgKi8NCiMgICAvKiBhbGxvYywgZGVhbGxvYywgZnJlZSwg
ZGVyaXYsIHJlZiwgdW5yZWYsIGR1bXAsIGRpZSAuLi4gKi8NCiMgI2RlZmlu
ZSBNb2R1bGVfQV9kZWFsbG9jIGZyZWUodGhlQSk7ICAvKiB0ZXJtaW5hdGUg
Y2hhaW5lZCBkZWFsbG9jIG1lY2hhbmlzbSAqLw0KIyAjZGVmaW5lIE1vZHVs
ZV9BX2Rlcml2IChNb2R1bGVfQSB0aGVBKSB0aGVBICAvKiB0ZXJtaW5hdGUg
Y2hhaW5lZCBpbmhlcml0YW5jZSBtZWNoYW5pc20gKi8NCiMgICBNb2R1bGVf
QSBNb2R1bGVfQV9hbGxvYygpOyAgLyogYWxsb2NhdGVzIE1vZHVsZV9BX3N0
ciBhbmQgemVyb2VzIHJlZmVyZW5jZSBjb3VudCAqLw0KIyAgIHZvaWQgTW9k
dWxlX0FfZnJlZSAoTW9kdWxlX0EgdGhlQSk7ICAvKiBkZXN0cnVjdG9yIHN0
dWIgLS0gY2FsbGVkIHJpZ2h0IGJlZm9yZSBNb2R1bGVfQV9kZWFsbG9jKCkg
Ki8NCiMgICB2b2lkIE1vZHVsZV9BX3JlZiAoTW9kdWxlX0EgdGhlQSk7ICAg
LyogaW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50ICovDQojICAgdm9pZCBNb2R1
bGVfQV91bnJlZiAoTW9kdWxlX0EgdGhlQSk7ICAgIC8qIGRlY3JlYXNlcyB0
aGUgcmVmZXJlbmNlIGNvdW50IChjYWxscyBkZXN0cnVjdG9yIG9uIGNvdW50
IHplcm8pICovDQojICAgdm9pZCBNb2R1bGVfQV9kdW1wIChNb2R1bGVfQSB0
aGVBLCBGSUxFKiBmaWxlKTsgIC8qIG91dHB1dHMgZGVidWdnaW5nIGluZm8g
Ki8NCiMgI2RlZmluZSBNb2R1bGVfQV9kaWUodGhlQSxmaWxlLGV4Y2VwKSBm
cHJpbnRmKGZpbGUsIk1vZHVsZV9BIHJhaXNlZCAlcyBleGNlcHRpb24gYXQg
bGluZSAlZCBpbiBmaWxlICVzIiwgZXhjZXAsIF9fTElORV9fLCBfX0ZJTEVf
Xyk7IGV4aXQoMSk7DQojICAgdHlwZWRlZiBVICgqTW9kdWxlX0FfQykgKE1v
ZHVsZV9BIHRoZUEsIC4uLik7ICAvKiB2aXJ0dWFsIG1lbWJlciBmdW5jdGlv
biAqLw0KIyAgIFYgTW9kdWxlX0FfRCAoTW9kdWxlX0EgdGhlQSwgLS0tKTsg
IC8qIGNvbmNyZXRlIG1lbWJlciBmdW5jdGlvbiAqLw0KIyANCiMgICAvLyBJ
biAiTW9kdWxlX2ltcGwuaCIgKHRvIGJlIGFkZGVkIHRvIGF0IHdpbGwpDQoj
ICAgI2luY2x1ZGUgIk1vZHVsZV9hdXRvLmgiDQojICAgc3RydWN0IE1vZHVs
ZV9BX3N0ciB7DQojICAgICB1bnNpZ25lZCBpbnQgX3JlZjsgIC8qIHJlZmVy
ZW5jZSBjb3VudCAqLw0KIyAgICAgdm9pZCogX2Rlcml2OyAgLyogaW5oZXJp
dGFuY2UgKi8NCiMgICAgIFQgQjsgIC8qIGF0dHJpYnV0ZSAqLw0KIyAgICAg
TW9kdWxlX0FfQyBDOyAgLyogdmlydHVhbCBtZW1iZXIgZnVuY3Rpb24gKi8N
CiMgICAgIC8qIGFueSBvdGhlciBkYXRhIGdvZXMgaGVyZSAqLw0KIyAgIH07
DQojIA0KIyAgIC8vIEluICJNb2R1bGVfYXV0by5jIiAoYXV0by1nZW5lcmF0
ZWQsIGRvIG5vdCBlZGl0KQ0KIyAgICNpbmNsdWRlICJNb2R1bGVfaW1wbC5o
Ig0KIyAgIE1vZHVsZV9BIE1vZHVsZV9BX2FsbG9jKCkgew0KIyAgICAgTW9k
dWxlX0EgdGhlQSA9IG1hbGxvYyAoc2l6ZW9mIChNb2R1bGVfQV9zdHIpKTsN
CiMgICAgIGlmICh0aGVBID09IDApIE1vZHVsZV9BX2RpZSAodGhlQSwgc3Rk
ZXJyLCAib3V0IG9mIG1lbW9yeSIpOw0KIyAgICAgdGhlQS0+X3JlZiA9ICh1
bnNpZ25lZCBpbnQpIDA7DQojICAgICB0aGVBLT5fZGVyaXYgPSAodm9pZCop
IDA7DQojICAgICB0aGVBLT5fdG9wID0gdGhlQTsNCiMgICAgIHJldHVybiB0
aGVBOw0KIyAgIH0NCiMgICB2b2lkIE1vZHVsZV9BX3JlZiAoTW9kdWxlX0Eg
dGhlQSkgeyArK3RoZUEtPnJlZjsgfQ0KIyAgIHZvaWQgTW9kdWxlX0FfdW5y
ZWYgKE1vZHVsZV9BIHRoZUEpIHsNCiMgICAgIHN3aXRjaCAodGhlQS0+cmVm
LS0pIHsNCiMgICAgIGNhc2UgMDogTW9kdWxlX0FfZGllICh0aGVBLCBzdGRl
cnIsICJuZWdhdGl2ZSByZWZlcmVuY2UgY291bnQiKTsgYnJlYWs7DQojICAg
ICBjYXNlIDE6IE1vZHVsZV9BX2ZyZWUgKHRoZUEpOyBmcmVlICh0aGVBKTsg
YnJlYWs7DQojICAgICBkZWZhdWx0OiBicmVhazsNCiMgICAgIH0NCiMgICB9
DQojIA0KIyAgIC8vIEluICJNb2R1bGVfaW1wbC5jIiAodG8gYmUgYWRkZWQg
dG8gYXQgd2lsbCkNCiMgI2luY2x1ZGUgIk1vZHVsZV9pbXBsLmgiDQojICAg
dm9pZCBNb2R1bGVfQV9mcmVlIChNb2R1bGVfQSB0aGVBKSB7ICAvKiBkZXN0
cnVjdG9yICovDQojICAgfQ0KIyAgIHZvaWQgTW9kdWxlX0FfZHVtcCAoTW9k
dWxlX0EgdGhlQSwgRklMRSogZmlsZSkgeyAgLyogb3V0cHV0ICovDQojICAg
fQ0KIyAgIFYgTW9kdWxlX0FfRCAoTW9kdWxlX0EgdGhlQSwgLS0tKSB7ICAv
KiBjb25jcmV0ZSBtZW1iZXIgZnVuY3Rpb24gKi8NCiMgICB9DQojIA0KIyAg
IC8vIERlcml2ZWQgaW50ZXJmYWNlDQojIA0KIyAgIC8vIGludGVyZmFjZSBB
IDogWCB7IGF0dHJpYnV0ZSBUIEI7IFUgQ192ZiguLi4pOyBWIEQoLS0tKTsg
fTsNCiMgICAvLyBJbiAiTW9kdWxlX2F1dG8uaCINCiMgICB0eXBlZGVmIE1v
ZHVsZV9YIE1vZHVsZV9BOyAgLyogdGhlIG9iamVjdCBwb2ludGVyICovDQoj
ICAgdHlwZWRlZiBzdHJ1Y3QgTW9kdWxlX0Ffc3RyKiBNb2R1bGVfQV9kZXJp
djsgIC8qIHRoZSBkZXJpdiBvYmplY3QgcG9pbnRlciAqLw0KIyAgIC8qIGRl
YWxsb2MsIGRlcml2LCBhbGxvYywgZnJlZSwgcmVmLCB1bnJlZiwgZHVtcCwg
ZGllIC4uLiAqLw0KIyAjZGVmaW5lIE1vZHVsZV9BX2RlYWxsb2MgKE1vZHVs
ZV9BIHRoZUEpIE1vZHVsZV9YX2RlYWxsb2MoX2Jhc2UpOyBmcmVlKHRoZUEp
OyAgLyogY2hhaW5lZCBkZWFsbG9jIG1lY2hhbmlzbSAqLw0KIyAjZGVmaW5l
IE1vZHVsZV9BX2Rlcml2IChNb2R1bGVfQSB0aGVBKSAoTW9kdWxlX0FfZGVy
aXYpIChNb2R1bGVfWF9kZXJpdih0aGVBKSkgIC8qIGNoYWluZWQgaW5oZXJp
dGFuY2UgbWVjaGFuaXNtIC0tIHRoaW5rIG9mIGFzIGEgY2FzdCAqLw0KIyAg
IC8vIHRoZSByZXN0IGlzIHRoZSBzYW1lIGFzIHRoZSB1bmRlcml2ZWQgY2Fz
ZQ0KIyANCiMgICAvLyBJbiAiTW9kdWxlX2ltcGwuaCINCiMgI2luY2x1ZGUg
Ik1vZHVsZS5oIg0KIyAgIHN0cnVjdCBNb2R1bGVfQV9zdHIgew0KIyAgICAg
dW5zaWduZWQgaW50IF9yZWY7ICAvKiByZWZlcmVuY2UgY291bnQgKi8NCiMg
ICAgIHZvaWQqIF9kZXJpdjsgIC8qIGluaGVyaXRhbmNlIGNoYWluICovDQoj
ICAgICBNb2R1bGVfWF9kZXJpdiBfYmFzZTsgIC8qIGRvdWJseSBsaW5rZWQg
bGlzdCBwb2ludGVyIGJhY2sgYWxvbmcgaW5oZXJpdGFuY2UgY2hhaW4gKi8N
CiMgICAgIE1vZHVsZV9BX1QgQjsgIC8qIGF0dHJpYnV0ZSAqLw0KIyAgICAg
TW9kdWxlX0FfQyBDOyAgLyogdmlydHVhbCBtZW1iZXIgZnVuY3Rpb24gKi8N
CiMgICAgIC8qIGFueSBvdGhlciBkYXRhIGdvZXMgaGVyZSAqLw0KIyAgIH07
DQojIA0KIyAgIC8vIEluICJNb2R1bGVfYXV0by5jIg0KIyAjaW5jbHVkZSAi
TW9kdWxlX2ludGVybmFsLmgiDQojICAgTW9kdWxlX0EgTW9kdWxlX0FfYWxs
b2MoKSB7DQojICAgICBNb2R1bGVfQV9kZXJpdiB0aGVBX2Rlcml2ID0gbWFs
bG9jIChzaXplb2YgKE1vZHVsZV9BX3N0cikpOw0KIyAgICAgaWYgKHRoZUEg
PT0gMCkgTW9kdWxlX0FfZGllICh0aGVBLCBzdGRlcnIsICJvdXQgb2YgbWVt
b3J5Iik7DQojICAgICB0aGVBLT5fcmVmID0gKHVuc2lnbmVkIGludCkgMDsN
CiMgICAgIHRoZUEtPl9kZXJpdiA9ICh2b2lkKikgMDsNCiMgICAgIE1vZHVs
ZV9YIHRoZVggPSBNb2R1bGVfWF9hbGxvYygpOw0KIyAgICAgTW9kdWxlX1hf
ZGVyaXYgdGhlWF9kZXJpdiA9IE1vZHVsZV9YX2Rlcml2KHRoZVgpOw0KIyAg
ICAgdGhlQS0+X2Jhc2UgPSB0aGVYX2Rlcml2Ow0KIyAgICAgdGhlWF9kZXJp
di0+X2Rlcml2ID0gKHZvaWQqKSB0aGVBX2Rlcml2Ow0KIyAgICAgcmV0dXJu
IHRoZVg7DQojICAgfQ0KIyAgIHZvaWQgTW9kdWxlX0FfcmVmIChNb2R1bGVf
QSB0aGVBKSB7ICsrdGhlQS0+cmVmOyB9ICAvKiBOQiB0aGlzIGluY3MgdGhl
IHJlZmNvdW50IGF0IHRoZSB0b3Agb2YgdGhlIGluaGVyaXRhbmNlIGhpZXJh
cmNoeSAqLw0KIyAgIHZvaWQgTW9kdWxlX0FfdW5yZWYgKE1vZHVsZV9BIHRo
ZUEpIHsgIC8qIE5CIHRoaXMgZGVjcyB0aGUgcmVmY291bnQgYXQgdGhlIHRv
cCBvZiB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5ICovDQojICAgICBzd2l0
Y2ggKHRoZUEtPnJlZi0tKSB7DQojICAgICBjYXNlIDA6IE1vZHVsZV9BX2Rp
ZSAodGhlQSwgc3RkZXJyLCAibmVnYXRpdmUgcmVmZXJlbmNlIGNvdW50Iik7
IGJyZWFrOw0KIyAgICAgY2FzZSAxOiBNb2R1bGVfQV9mcmVlIChNb2R1bGVf
QV9kZXJpdiAodGhlQSkpOyBNb2R1bGVfQV9kZWFsbG9jIChNb2R1bGVfQV9k
ZXJpdiAodGhlQSkpOyBicmVhazsNCiMgICAgIGRlZmF1bHQ6IGJyZWFrOw0K
IyAgICAgfQ0KIyAgIH0NCiMgDQojICAgLy8gIk1vZHVsZV9pbXBsLmMiIHNh
bWUgYXMgdW5kZXJpdmVkIGNhc2UNCiMgDQo=
---559023410-1804928587-953041940=:4357
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="SeqModule.idl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.10003140552201.4357@fruitfly>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="SeqModule.idl"

Ly8gU2VxdWVuY2VzICYgYWxwaGFiZXRzDQoNCiNpZm5kZWYgU0VRTU9EVUxF
X0lOQ0xVREVEDQojZGVmaW5lIFNFUU1PRFVMRV9JTkNMVURFRA0KDQptb2R1
bGUgU2VxTW9kdWxlIHsNCg0KICBpbnRlcmZhY2UgTGlnaHRTZXE7DQogIGlu
dGVyZmFjZSBEYXRhYmFzZVNlcTsNCiAgaW50ZXJmYWNlIERhdGFiYXNlU2Vx
SXRlcmF0b3I7DQogIGludGVyZmFjZSBGcm96ZW5EYXRhYmFzZTsNCg0KICBp
bnRlcmZhY2UgRmFzdGFEYXRhYmFzZVNlcTsNCiAgaW50ZXJmYWNlIEZhc3Rh
RGF0YWJhc2VJdGVyYXRvcjsNCiAgaW50ZXJmYWNlIEZhc3RhRGF0YWJhc2U7
DQogIGludGVyZmFjZSBGYXN0YUZhY3Rvcnlfc3RhdGljOw0KDQogIGV4Y2Vw
dGlvbiBTZXFFcnJvcnt9Ow0KICBleGNlcHRpb24gU2VxSW5kZXhPdXRPZlJh
bmdle307DQogIGV4Y2VwdGlvbiBEYXRhYmFzZVNlcUl0ZXJhdG9yRXJyb3J7
fTsNCiAgZXhjZXB0aW9uIEZyb3plbkRhdGFiYXNlRXJyb3J7fTsNCiAgZXhj
ZXB0aW9uIERhdGFiYXNlU2VxSUROb3RGb3VuZHt9Ow0KDQogIC8vIEdMaWIg
YW5kICJnZW5lcmljIiB0eXBlcw0KDQogIHR5cGVkZWYgc3RyaW5nIEdsaWJR
dWFyazsNCg0KICAvLyBTZXF1ZW5jZSBzdHJ1Y3RzDQogIA0KICBzdHJ1Y3Qg
TGlnaHRTZXFNb21lbnRvIHsNCiAgICBzdHJpbmcgbmFtZTsNCiAgICBzdHJp
bmcgc2VxOw0KICB9Ow0KICANCiAgdHlwZWRlZiBHbGliUXVhcmsgRGF0YWJh
c2VTZXFJRDsgICAgICAvLyB1bmlxdWUgdGFnIGZvciBpbmRleGluZyBEYXRh
YmFzZVNlcSdzIGZvciBhIGdpdmVuIEZyb3plbkRhdGFiYXNlDQoNCiAgc3Ry
dWN0IERhdGFiYXNlU2VxTW9tZW50byB7DQogICAgc3RyaW5nIG5hbWU7DQog
ICAgc3RyaW5nIHNlcTsNCiAgICBzdHJpbmcgYWNjZXNzaW9uX251bWJlcjsN
CiAgICBEYXRhYmFzZVNlcUlEIGlkOw0KICB9Ow0KICANCiAgLy8gTGlnaHRT
ZXEgaW50ZXJmYWNlOiBtaW5pbWFsIGd1YXJhbnRlZXMNCiAgDQogIGludGVy
ZmFjZSBMaWdodFNlcSB7DQogICAgc3RyaW5nIG5hbWVfdmYoKSAgICAvLyBm
b3IgZGlzcGxheSBvbmx5DQogICAgICByYWlzZXMgKFNlcUVycm9yKTsNCg0K
ICAgIHN0cmluZyBzZXFfdmYoKQ0KICAgICAgcmFpc2VzIChTZXFFcnJvcik7
DQoNCiAgICB1bnNpZ25lZCBsb25nIGxlbmd0aF92ZigpICAgIC8vIG5lZWQg
YSBsZW5ndGggbWV0aG9kIGJlY2F1c2Ugd2UgbWlnaHQgbm90IHdhbnQgdG8g
cmV0cmlldmUgdGhlIHdob2xlIHNlcSgpDQogICAgICByYWlzZXMgKFNlcUVy
cm9yKTsNCg0KICAgIHN0cmluZyBzdWJzZXFfdmYoaW4gdW5zaWduZWQgbG9u
ZyBzdGFydCwgaW4gdW5zaWduZWQgbG9uZyBsZW5ndGgpDQogICAgICByYWlz
ZXMgKFNlcUVycm9yLFNlcUluZGV4T3V0T2ZSYW5nZSk7DQoNCiAgICBMaWdo
dFNlcU1vbWVudG8gbWFrZV9saWdodF9zZXFfbW9tZW50b192ZigpDQogICAg
ICByYWlzZXMgKFNlcUVycm9yKTsNCiAgfTsNCg0KICAvLyBEYXRhYmFzZVNl
cSBpbnRlcmZhY2U6IHVuaXF1ZW5lc3MgZ3VhcmFudGVlIG9uIERhdGFiYXNl
U2VxSUQNCiAgDQogIGludGVyZmFjZSBEYXRhYmFzZVNlcSA6IExpZ2h0U2Vx
IHsNCiAgICBEYXRhYmFzZVNlcUlEIGlkX3ZmKCkgLy8gZ3VhcmFudGVlZCB0
byBiZSB1bmlxdWUgaWYgdGhpcyBjYW1lIGZyb20gYSBGcm96ZW5EYXRhYmFz
ZQ0KICAgICAgcmFpc2VzIChTZXFFcnJvcik7DQoNCiAgICBzdHJpbmcgYWNj
ZXNzaW9uX251bWJlcl92ZigpICAvLyBkZXNwaXRlIHRoZSBuYW1lLCB0aGlz
IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGEgdW5pcXVlIElEDQogICAgICBy
YWlzZXMgKFNlcUVycm9yKTsNCg0KICAgIERhdGFiYXNlU2VxTW9tZW50byBt
YWtlX2RhdGFiYXNlX3NlcV9tb21lbnRvX3ZmKCkNCiAgICAgIHJhaXNlcyAo
U2VxRXJyb3IpOw0KICB9Ow0KICANCiAgLy8gQWxwaGFiZXQgc3RydWN0cw0K
DQogIHR5cGVkZWYgc3RyaW5nIEFscGhhYmV0U3RyaW5nOyAgLy8gbG93ZXIg
Y2FzZSwgZS5nLiAiYWNndCIsIHdob3NlIG9yZGVyIGlzIHJlbGV2YW50DQog
IHR5cGVkZWYgc3RyaW5nIEFscGhhYmV0Q2hhclNldDsgIC8vIGxvd2VyIGNh
c2Ugc3RyaW5nIHdob3NlIG9yZGVyIHNob3VsZCBiZSBjb25zaWRlcmVkIGly
cmVsZXZhbnQNCiAgdHlwZWRlZiBzZXF1ZW5jZTxBbHBoYWJldENoYXJTZXQ+
IEFscGhhYmV0Q2hhclNldFZlY3RvcjsNCiAgDQogIGVudW0gRGVnZW5lcmF0
ZVN5bWJvbEludGVycHJldGF0aW9uIHsgQWxsT2JzZXJ2ZWQsICAgLy8gQmF5
ZXNpYW4gc3VtIG92ZXIgbWlzc2luZyBkYXRhIChzb21lIG1vbGVjdWxhciBl
dm9sdXRpb24gd29yaykNCgkJCQkJRXF1YWxseUxpa2VseVRvQmVPYnNlcnZl
ZCwgIC8vIHVud2VpZ2h0ZWQgRU0tdHlwZSBhcHByb2FjaCBmb3IgbWlzc2lu
ZyBkYXRhIFtITU1FUl0NCgkJCQkJT2JzZXJ2ZWRBdE51bGxNb2RlbEZyZXF1
ZW5jaWVzIH07ICAgLy8gd2VpZ2h0ZWQgRU0tdHlwZSBhcHByb2FjaCBmb3Ig
bWlzc2luZyBkYXRhIChEeW5hbWl0ZSBkZWZhdWx0KQ0KICANCiAgc3RydWN0
IEV4dGVuZGVkQWxwaGFiZXQgew0KICAgIHN0cmluZyBuYW1lOw0KICAgIEFs
cGhhYmV0U3RyaW5nIGFscGhhYmV0Ow0KICAgIEFscGhhYmV0U3RyaW5nIGNv
bXBsZW1lbnQ7ICAvLyBlaXRoZXIgYW4gb3JkZXItMiBwZXJtdXRhdGlvbiBv
ZiBhbHBoYWJldCwgb3IgIiIgZm9yIHByb3RlaW5zDQoNCiAgICAvLyBkZWdl
bmVyYXRlIHN5bWJvbCB0YWJsZQ0KDQogICAgQWxwaGFiZXRTdHJpbmcgZGVn
ZW5lcmF0ZV9rZXlzOyAgLy8gbG93ZXIgY2FzZSwgZS5nLiAicnluLi4uIg0K
ICAgIEFscGhhYmV0Q2hhclNldFZlY3RvciBkZWdlbmVyYXRlX3ZhbHVlczsg
IC8vIGxvd2VyIGNhc2UsIG9yZGVyIHVuaW1wb3J0YW50LCBlLmcuICJnYSIs
ImN0IiwidGNhZyIuLi4NCiAgICBBbHBoYWJldFN0cmluZyBkZWdlbmVyYXRl
X2tleXNfY29tcGxlbWVudDsgIC8vIGVpdGhlciBhbiBvcmRlci0yIHBlcm11
dGF0aW9uIG9mIGRlZ2VuZXJhdGVfa2V5cywgb3IgIiIgZm9yIHByb3RlaW5z
DQogICAgDQogICAgRGVnZW5lcmF0ZVN5bWJvbEludGVycHJldGF0aW9uIGRl
Z2VuZXJhdGVfc3ltYm9sX2ludGVycHJldGF0aW9uOw0KICB9Ow0KICB0eXBl
ZGVmIHNlcXVlbmNlPEV4dGVuZGVkQWxwaGFiZXQ+IEV4dGVuZGVkQWxwaGFi
ZXRTZXQ7DQoNCiAgLy8gRGF0YWJhc2VTZXFJdGVyYXRvciBlbnVtZXJhdGVz
IGEgc2V0IG9mIERhdGFiYXNlU2VxJ3MNCiAgDQogIGludGVyZmFjZSBEYXRh
YmFzZVNlcUl0ZXJhdG9yIHsNCg0KICAgIGJvb2xlYW4gZmluaXNoZWRfdmYo
KQ0KICAgICAgcmFpc2VzIChEYXRhYmFzZVNlcUl0ZXJhdG9yRXJyb3IpOw0K
DQogICAgRGF0YWJhc2VTZXEgbmV4dF92ZigpDQogICAgICByYWlzZXMgKERh
dGFiYXNlU2VxSXRlcmF0b3JFcnJvcik7DQogIH07DQoNCiAgLy8gQSBGcm96
ZW5EYXRhYmFzZSByZXR1cm5zIGl0ZXJhdG9ycyBvdmVyIGl0cyBzZXF1ZW5j
ZXMgJiBjYW4gYWxzbyBsb29rIHVwIHNlcXVlbmNlcyBieSBEYXRhYmFzZVNl
cUlEDQogIC8vIEl0J3MgY2FsbGVkICJmcm96ZW4iIGJlY2F1c2UgaXQncyBn
dWFyYW50ZWVkIG5vdCB0byBjaGFuZ2UgYmV0d2VlbiBjYWxscw0KDQogIGlu
dGVyZmFjZSBGcm96ZW5EYXRhYmFzZSB7DQoNCiAgICByZWFkb25seSBhdHRy
aWJ1dGUgRXh0ZW5kZWRBbHBoYWJldCBleHRlbmRlZF9hbHBoYWJldDsNCg0K
ICAgIC8vIFBvbGl0ZSBpbmRleGluZyBtZXRob2RzLCB1c2luZyB0aGUgZ3Vh
cmFudGVlZC11bmlxdWUgRGF0YWJhc2VTZXFJRA0KDQogICAgYm9vbGVhbiBj
b250YWluc19JRF92ZiAoaW4gRGF0YWJhc2VTZXFJRCBpZCk7DQoNCiAgICBE
YXRhYmFzZVNlcSBnZXRfc2VxX2J5X0lEX3ZmIChpbiBEYXRhYmFzZVNlcUlE
IGlkKQ0KICAgICAgcmFpc2VzIChGcm96ZW5EYXRhYmFzZUVycm9yLERhdGFi
YXNlU2VxSUROb3RGb3VuZCk7DQoNCiAgICAvLyBNZXRob2QgdG8gaXRlcmF0
ZSB0aHJvdWdoIGFsbCBzZXF1ZW5jZXMNCiAgICAvLyBUaGUgc2VxdWVuY2Vz
IHZpc2l0ZWQgYnkgdGhlIHJldHVybmVkIGl0ZXJhdG9yLCBhbmQgdGhlIG9y
ZGVyIGluIHdoaWNoIHRoZXkgYXJlIHZpc2l0ZWQsDQogICAgLy8gbXVzdCBy
ZW1haW4gdW5jaGFuZ2VkIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxscyB0byB0
aGlzIG1ldGhvZCAoYXMgbXVzdCBldmVyeXRoaW5nIGVsc2UpDQoNCiAgICBE
YXRhYmFzZVNlcUl0ZXJhdG9yIGVhY2hfZGF0YWJhc2Vfc2VxX3ZmKCkNCiAg
ICAgIHJhaXNlcyAoRnJvemVuRGF0YWJhc2VFcnJvcik7DQogIH07DQoNCiAg
Ly8gRkFTVEE6IHRoZSBsb3dlc3QgY29tbW9uIGRlbm9taW5hdG9yIGltcGxl
bWVudGF0aW9uIDstKQ0KDQogIGludGVyZmFjZSBGYXN0YURhdGFiYXNlU2Vx
IDogRGF0YWJhc2VTZXF7fTsNCiAgaW50ZXJmYWNlIEZhc3RhRGF0YWJhc2Ug
OiBGcm96ZW5EYXRhYmFzZXt9Ow0KICBpbnRlcmZhY2UgRmFzdGFEYXRhYmFz
ZUl0ZXJhdG9yIDogRGF0YWJhc2VTZXFJdGVyYXRvcnt9Ow0KDQogIGludGVy
ZmFjZSBGYXN0YUZhY3Rvcnlfc3RhdGljIHsNCg0KICAgIEZhc3RhRGF0YWJh
c2Ugb3Blbl9GQVNUQV9kYXRhYmFzZSAoaW4gc3RyaW5nIGZpbGVuYW1lLCAg
IC8vIGEgZmlsZWhhbmRsZSBpbnRlcmZhY2Ugd291bGQgYmUgYmV0dGVyIGhl
cmUNCgkJCQkgICAgICAgaW4gRXh0ZW5kZWRBbHBoYWJldCBleHRlbmRlZF9h
bHBoYWJldCkNCiAgICAgIHJhaXNlcyAoRnJvemVuRGF0YWJhc2VFcnJvcik7
ICAgLy8gYSBmaWxlaGFuZGxlIGludGVyZmFjZSdzIGV4Y2VwdGlvbiB3b3Vs
ZCBiZSBiZXR0ZXIgaGVyZQ0KDQogICAgRmFzdGFEYXRhYmFzZSBvcGVuX0ZB
U1RBX2RhdGFiYXNlX2FuZF9ndWVzc19hbHBoYWJldCAoaW4gc3RyaW5nIGZp
bGVuYW1lLA0KCQkJCQkJCSAgaW4gRXh0ZW5kZWRBbHBoYWJldFNldCBhdmFp
bGFibGVfZXh0ZW5kZWRfYWxwaGFiZXRzKQ0KICAgICAgcmFpc2VzIChGcm96
ZW5EYXRhYmFzZUVycm9yKTsNCiAgfTsNCg0KfTsNCg0KI2VuZGlmDQo=
---559023410-1804928587-953041940=:4357
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="ScoreModule.idl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.10003140552202.4357@fruitfly>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="ScoreModule.idl"

Ly8gU2NvcmUgbW9kdWxlDQoNCiNpZm5kZWYgU0NPUkVNT0RVTEVfSU5DTFVE
RUQNCiNkZWZpbmUgU0NPUkVNT0RVTEVfSU5DTFVERUQNCg0KI2luY2x1ZGUg
IlNlcU1vZHVsZS5pZGwiDQoNCm1vZHVsZSBTY29yZU1vZHVsZSB7DQoNCiAg
aW50ZXJmYWNlIFNjb3JpbmdTY2hlbWU7DQogIGludGVyZmFjZSBGYWN0b3J5
X3N0YXRpYzsNCiAgDQogIGV4Y2VwdGlvbiBOZWdhdGl2ZVByb2JhYmlsaXR5
e307DQogIGV4Y2VwdGlvbiBFbWl0SW5kZXhPdXRPZlJhbmdle307DQoNCiAg
Ly8gdGhlIGZvbGxvd2luZyB0eXBlZGVmcyBhcmUgaW5jbHVkZWQgZm9yIGNs
YXJpdHkNCg0KICB0eXBlZGVmIGRvdWJsZSBQcm9iYWJpbGl0eTsgICAvLyBw
cm9iYWJpbGl0eSBzcGFjZSAobm90ZSB0aGF0IGNvdW50cyBsaXZlIGluIHRo
aXMgc3BhY2UgdG9vKQ0KICB0eXBlZGVmIGRvdWJsZSBTY29yZTsgICAgICAg
ICAvLyBsb2cgdG8gYmFzZSAyIHNwYWNlDQogIHR5cGVkZWYgbG9uZyBJbnRl
Z2VyU2NvcmU7ICAvLyBpbnRlcm5hbCBmb3JtYXQNCg0KICB0eXBlZGVmIHNl
cXVlbmNlPFByb2JhYmlsaXR5PiBQcm9iYWJpbGl0eVZlY3RvcjsNCiAgdHlw
ZWRlZiBzZXF1ZW5jZTxTY29yZT4gU2NvcmVWZWN0b3I7DQogIHR5cGVkZWYg
c2VxdWVuY2U8SW50ZWdlclNjb3JlPiBJbnRlZ2VyU2NvcmVWZWN0b3I7DQoN
CiAgY29uc3QgZG91YmxlIFNjb3JlX3RvX1Byb2JhYmlsaXR5X2V4cCA9IDIu
MDsNCiAgY29uc3QgZG91YmxlIFByb2JhYmlsaXR5X3RvX1Njb3JlX2xvZyA9
IDAuNjkzMTQ3MTgwNTU5OTQ1OyAgLy8gPSBsb2coMikNCg0KICB0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgRW1pdEluZGV4OyAgIC8vIHByb3RvLSBhbHBoYWJl
dCB0b2tlbg0KICB0eXBlZGVmIHNlcXVlbmNlPEVtaXRJbmRleD4gRW1pdElu
ZGV4U2V0OyAgIC8vIHZlY3RvciBvZiB0b2tlbnMNCg0KICB0eXBlZGVmIFNj
b3JlVmVjdG9yIEVtaXRTY29yZVZlY3RvcjsgICAvLyBzY29yZSB2ZWN0b3Ig
aW5kZXhlZCBieSBFbWl0SW5kZXgNCiAgdHlwZWRlZiBQcm9iYWJpbGl0eVZl
Y3RvciBFbWl0UHJvYmFiaWxpdHlWZWN0b3I7ICAgLy8gcHJvYmFiaWxpdHkg
dmVjdG9yIGluZGV4ZWQgYnkgRW1pdEluZGV4DQogIA0KICBpbnRlcmZhY2Ug
U2NvcmluZ1NjaGVtZSB7DQogICAgDQogICAgdHlwZWRlZiBTZXFNb2R1bGU6
OkRlZ2VuZXJhdGVTeW1ib2xJbnRlcnByZXRhdGlvbiBEZWdlbmVyYXRlU3lt
Ym9sSW50ZXJwcmV0YXRpb247DQoNCiAgICAvLyBDb252ZXJzaW9uIHJhdGlv
cw0KDQogICAgLy8gRm9yIHNlbGYtY29uc2lzdGVudCBQcm9iYWJpbGl0eSBQ
LCBTY29yZSBTIGFuZCBJbnRlZ2VyU2NvcmUgSQ0KICAgIC8vICAgUCA9IGV4
cCAoU2NvcmVfdG9fUHJvYmFiaWxpdHlfZXhwICogUykNCiAgICAvLyAgIFMg
PSBsb2coUCkgLyBQcm9iYWJpbGl0eV90b19TY29yZV9sb2cNCiAgICAvLyAg
IEkgPSBTICogSW50ZWdlclNjb3JlX3RvX1Njb3JlX3JhdGlvDQoNCiAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIEludGVnZXJTY29yZV90b19TY29y
ZV9yYXRpbzsgIC8vIHZhcmlhYmxlIHBhcmFtZXRlcjsgdXNlIDEwMDAgdG8g
YmUgY29uc2lzdGVudCB3aXRoIEhNTUVSDQogICAgDQogICAgLy8gbG9va3Vw
IHRhYmxlcw0KICAgIA0KICAgIC8vIGxvb2t1cCB0YWJsZSBmb3IgdGhlIG1h
cHBpbmcgZnJvbSBJLXNwYWNlIHRvIFAtc3BhY2UNCg0KICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBQcm9iYWJpbGl0eVZlY3RvciBwcm9iX2xvb2t1cDsNCg0K
ICAgIC8vIEktc3BhY2UgbG9va3VwIHRhYmxlIGZvciB0aGUgUC1zcGFjZSBm
dW5jdGlvbiBwcm9iX2F0dGVudWF0ZTogUCAtPiAoMStQKS9QDQoNCiAgICAv
LyB0aHVzLCB0aGUgZnVuY3Rpb24gZm9yIGFkZGluZyB0d28gSS1zY29yZXMg
KEEsQikgaW4gUC1zcGFjZSBpcyBwcm9iX3N1bTogKEEsQikgLT4gbWF4KEEs
QikgKyBwcm9iX2F0dGVudWF0ZSAobWF4KEEsQikgLSBtaW4oQSxCKSkNCg0K
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJbnRlZ2VyU2NvcmVWZWN0b3IgcHJv
Yl9hdHRlbnVhdGVfbG9va3VwOw0KDQogICAgLy8gcHJvYl9zdW0gaGVscGVy
IG1ldGhvZA0KDQogICAgSW50ZWdlclNjb3JlIHByb2Jfc3VtIChpbiBJbnRl
Z2VyU2NvcmUgQSwgaW4gSW50ZWdlclNjb3JlIEIpOyAgICAvLyA9IG1heChB
LEIpICsgcHJvYl9hdHRlbnVhdGUgKG1heChBLEIpIC0gbWluKEEsQikpDQoN
CiAgICAvLyBEZWdlbmVyYXRlU3ltYm9sSW50ZXJwcmV0YXRpb24gbWV0aG9k
cw0KDQogICAgU2NvcmUgY29tYmluZV9kZWdlbmVyYXRlX2xpa2VsaWhvb2Rf
c2NvcmVzIChpbiBFbWl0U2NvcmVWZWN0b3Igbm9uZGVnZW5lcmF0ZV9saWtl
bGlob29kX3Njb3JlX3ZlYywNCgkJCQkJCWluIEVtaXRQcm9iYWJpbGl0eVZl
Y3RvciBudWxsX3Byb2JhYmlsaXR5X3ZlYywNCgkJCQkJCWluIEVtaXRJbmRl
eFNldCBkZWdlbmVyYXRlX3Bvc3NpYmlsaXR5X3NldCwNCgkJCQkJCWluIERl
Z2VuZXJhdGVTeW1ib2xJbnRlcnByZXRhdGlvbiBkZWdlbmVyYXRlX3N5bWJv
bF9pbnRlcnByZXRhdGlvbikNCiAgICAgIHJhaXNlcyAoTmVnYXRpdmVQcm9i
YWJpbGl0eSxFbWl0SW5kZXhPdXRPZlJhbmdlKTsNCg0KICAgIEVtaXRTY29y
ZVZlY3RvciBjYWxjdWxhdGVfZGVnZW5lcmF0ZV9jb3VudF9zY29yZV92ZWMg
KGluIEVtaXRQcm9iYWJpbGl0eVZlY3RvciBudWxsX3Byb2JhYmlsaXR5X3Zl
YywNCgkJCQkJCQkgIGluIEVtaXRJbmRleFNldCBkZWdlbmVyYXRlX3Bvc3Np
YmlsaXR5X3NldCwNCgkJCQkJCQkgIGluIERlZ2VuZXJhdGVTeW1ib2xJbnRl
cnByZXRhdGlvbiBkZWdlbmVyYXRlX3N5bWJvbF9pbnRlcnByZXRhdGlvbikN
CiAgICAgIHJhaXNlcyAoTmVnYXRpdmVQcm9iYWJpbGl0eSxFbWl0SW5kZXhP
dXRPZlJhbmdlKTsNCiAgfTsNCg0KICAvLyBmYWN0b3J5DQoNCiAgaW50ZXJm
YWNlIEZhY3Rvcnlfc3RhdGljIHsNCiAgICBTY29yaW5nU2NoZW1lIG5ld19z
Y29yaW5nX3NjaGVtZSAoaW4gU2NvcmluZ1NjaGVtZSBzY29yaW5nX3NjaGVt
ZSwNCgkJCQkgICAgICBpbiBkb3VibGUgSW50ZWdlclNjb3JlX3RvX1Njb3Jl
X3JhdGlvLA0KCQkJCSAgICAgIGluIHVuc2lnbmVkIGxvbmcgcHJvYl9sb29r
dXBfc2l6ZSwNCgkJCQkgICAgICBpbiB1bnNpZ25lZCBsb25nIHByb2JfYXR0
ZW51YXRlX2xvb2t1cF9zaXplKTsNCiAgfTsNCn07DQoNCiNlbmRpZg0KDQoN
Cg==
---559023410-1804928587-953041940=:4357
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="MetasequenceModule.idl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.10003140552203.4357@fruitfly>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="MetasequenceModule.idl"

Ly8gQSBNZXRhc2VxdWVuY2UgaXMgYSBsb2cgb2Rkcy1yYXRpbyBmb3IgZWFj
aCByZXNpZHVlIG9mIGEgc2VxdWVuY2UgKGUuZy4gc3BsaWNlIHNpdGUgcHJl
ZGljdGlvbiBzY29yZXMpDQoNCiNpZm5kZWYgTUVUQVNFUVVFTkNFTU9EVUxF
X0lOQ0xVREVEDQojZGVmaW5lIE1FVEFTRVFVRU5DRU1PRFVMRV9JTkNMVURF
RA0KDQojaW5jbHVkZSAiU2NvcmVNb2R1bGUuaWRsIg0KDQptb2R1bGUgTWV0
YXNlcXVlbmNlTW9kdWxlIHsNCg0KICBpbnRlcmZhY2UgS2V5ZWRNZXRhc2Vx
dWVuY2VTZXQ7DQogIGludGVyZmFjZSBGYWN0b3J5Ow0KICANCiAgZXhjZXB0
aW9uIE1ldGFzZXF1ZW5jZUtleU5vdEZvdW5ke307DQogIGV4Y2VwdGlvbiBN
ZXRhc2VxdWVuY2VJbmRleE91dE9mUmFuZ2V7fTsNCg0KICAvLyBpbXBvcnRl
ZCB0eXBlZGVmcw0KDQogIHR5cGVkZWYgc3RyaW5nIEdsaWJRdWFyazsNCg0K
ICB0eXBlZGVmIFNlcU1vZHVsZTo6TGlnaHRTZXEgTGlnaHRTZXE7DQoNCiAg
dHlwZWRlZiBTY29yZU1vZHVsZTo6U2NvcmUgU2NvcmU7DQogIHR5cGVkZWYg
U2NvcmVNb2R1bGU6OlNjb3JlVmVjdG9yIFNjb3JlVmVjdG9yOw0KICANCiAg
Ly8gb3VyIHR5cGVzDQoNCiAgdHlwZWRlZiBTY29yZVZlY3RvciBNZXRhc2Vx
dWVuY2U7DQogIHR5cGVkZWYgR2xpYlF1YXJrIE1ldGFzZXF1ZW5jZUtleTsN
CiAgDQogIC8vIEFuIE9mZnNldEtleSBpcyBhIHN0cnVjdCBob2xkaW5nIGEg
TWV0YXNlcXVlbmNlS2V5IGFuZCBhbiBvZmZzZXQgaW50byBhIGNvcnJlc3Bv
bmRpbmcgTWV0YXNlcXVlbmNlDQogIC8vIHJlcHJlc2VudGluZyBlLmcuICJ0
aGUgc3BsaWNlIHNpdGUgcHJlZGljdGlvbiBzY29yZSBmb3IgdGhlIHNlY29u
ZCBiYXNlIGluIGEgdGhyZWUtYmFzZSBjb2RvbiINCiAgDQogIHN0cnVjdCBP
ZmZzZXRLZXkgew0KICAgIE1ldGFzZXF1ZW5jZUtleSBrZXk7DQogICAgdW5z
aWduZWQgbG9uZyBvZmZzZXQ7DQogIH07DQogIHR5cGVkZWYgc2VxdWVuY2U8
T2Zmc2V0S2V5PiBPZmZzZXRLZXlWZWN0b3I7DQoNCiAgLy8gQSBLZXllZE1l
dGFzZXF1ZW5jZVNldCBpcyBhIGNvbnRhaW5lciAoa2V5PU1ldGFzZXF1ZW5j
ZUtleSxkYXRhPU1ldGFzZXF1ZW5jZSkNCiAgLy8gZm9yIGFsbCBwcmVkaWN0
aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBzZXF1ZW5jZQ0KICAvLyBlLmcuIHNw
bGljZSBzaXRlIHByZWRpY3Rpb24gc2NvcmVzLCBjb2RpbmcgcG90ZW50aWFs
cyAuLi4NCg0KICAvLyBJbXBsZW1lbnRhdGlvbk5vdGU6IHVzZSBhIEdsaWIg
S2V5ZWREYXRhTGlzdCBtYXBwaW5nIE1ldGFzZXF1ZW5jZUtleSB0byBNZXRh
c2VxdWVuY2UNCg0KICBpbnRlcmZhY2UgS2V5ZWRNZXRhc2VxdWVuY2VTZXQg
eyAgLy8gY29uY3JldGUNCg0KICAgIHZvaWQgY2xlYXIoKTsNCg0KICAgIC8v
IGtleSBtZXRob2RzDQoNCiAgICBib29sZWFuIGNvbnRhaW5zIChpbiBNZXRh
c2VxdWVuY2VLZXkga2V5KTsNCg0KICAgIC8vIGdldCAmIHNldCBkYXRhIG1l
dGhvZHMNCg0KICAgIE1ldGFzZXF1ZW5jZSBnZXRfbWV0YXNlcXVlbmNlIChp
biBNZXRhc2VxdWVuY2VLZXkga2V5KQ0KICAgICAgcmFpc2VzIChNZXRhc2Vx
dWVuY2VLZXlOb3RGb3VuZCk7DQoNCiAgICB2b2lkIHNldF9tZXRhc2VxdWVu
Y2UgKGluIE1ldGFzZXF1ZW5jZUtleSBrZXksIGluIE1ldGFzZXF1ZW5jZSBt
ZXRhc2VxKTsNCg0KICAgIC8vIG1ldGhvZHMgZm9yIGdldHRpbmcgYXQgaW5k
aXZpZHVhbCBzY29yZXMNCiAgICANCiAgICB1bnNpZ25lZCBsb25nIGdldF9t
ZXRhc2VxdWVuY2VfbGVuZ3RoIChpbiBNZXRhc2VxdWVuY2VLZXkga2V5KQ0K
ICAgICAgcmFpc2VzIChNZXRhc2VxdWVuY2VLZXlOb3RGb3VuZCk7DQoNCiAg
ICBTY29yZSBnZXRfc2NvcmUgKGluIE1ldGFzZXF1ZW5jZUtleSBrZXksIGlu
IHVuc2lnbmVkIGxvbmcgbWV0YXNlcXVlbmNlX2luZGV4KQ0KICAgICAgcmFp
c2VzIChNZXRhc2VxdWVuY2VLZXlOb3RGb3VuZCxNZXRhc2VxdWVuY2VJbmRl
eE91dE9mUmFuZ2UpOw0KICB9Ow0KICANCiAgLy8gRmFjdG9yeSBpbnRlcmZh
Y2UgZm9yIEtleWVkTWV0YXNlcXVlbmNlU2V0J3MNCg0KICBpbnRlcmZhY2Ug
RmFjdG9yeV9zdGF0aWMgeyAgLy8gY29uY3JldGUNCiAgICBLZXllZE1ldGFz
ZXF1ZW5jZVNldCBuZXdfa2V5ZWRfbWV0YXNlcXVlbmNlX3NldCgpDQogICAg
ICByYWlzZXMgKFNlcU1vZHVsZTo6U2VxRXJyb3IpOw0KICB9Ow0KICANCn07
DQoNCiNlbmRpZg0K
---559023410-1804928587-953041940=:4357--