---559023410-851401618-924116343=:9289
Content-Type: TEXT/PLAIN; charset=US-ASCII
Hi,
Usually during "rapid prototyping" I modify my code a lot, switch some
parts on, some off, ... . Unfortunately, I usually ( very often ) forget
to SetBranchStatus, enabling/disabling appropriate ( currently used )
ntuple branches. This leads to very difficult to find bugs ( or slows down
the analysis, if unneeded branches are "on" ).
I finally decided to implement a new MakeClass routine which loads
appropriate branches on demand ( during first use of any leaf that belongs
to the branch ).
Please find attached the MakeClass.cxx macro, the automatically generated
( $ROOTSYS/test/hsimple.root related ) ntuple.hpp file, the ntuple.cxx
file ( modified to demonstrate the way one uses it ) and the Linux EGCS
Makefile ( to try to create the shared library ).
For the time being the MakeClass.cxx macro is quite dumb.
Feel free to add something to it ... .
The only "disadvantage" that I see is that accessing a "leaf" requires to
call "leaf()" ( instead of "leaf", as in the original MakeClass )
The additional advantage of this macro is that one can easily build the
shared library from it ( which is impossible if one uses the original
TTree::MakeClass macro ).
( Of course, I know - calling a function is always slower then accessing
directly a variable, but ... if I subtract the time spent to find missing
SetBranchStatus and the time spent to load unneeded branches ... .)
Jacek.
---559023410-851401618-924116343=:9289
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="MakeClass.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990414205903.9289B@uranos.cto.us.edu.pl>
Content-Description: MakeClass.cxx
Ly9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQpJbnRfdCBN
YWtlQ2xhc3MoVFRyZWUgKnQsIGNvbnN0IGNoYXIgKmNsYXNzbmFtZSA9IDAp
DQp7DQovLz09PT0+DQovLyotKi0qLSotKi0qLSpHZW5lcmF0ZSBza2VsZXRv
biBhbmFseXNpcyBjbGFzcyBmb3IgdGhpcyBUcmVlKi0qLSotKi0qLSotKg0K
Ly8qLSogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLy8NCi8vICAgVGhlIGZvbGxvd2luZyBmaWxl
cyBhcmUgcHJvZHVjZWQ6IGNsYXNzbmFtZS5ocHAgYW5kIGNsYXNzbmFtZS5j
eHgNCi8vICAgaWYgY2xhc3NuYW1lIGlzIE5VTEwsIGNsYXNzbmFtZSB3aWxs
IGJlIG5hbWVvZnRyZWUuDQovLw0KLy8gICBUaGUgZ2VuZXJhdGVkIGNvZGUg
aW4gY2xhc3NuYW1lLmhwcCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nOg0KLy8g
ICAgICAtIElkZW50aWZpY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCBUcmVlIGFu
ZCBJbnB1dCBmaWxlIG5hbWUNCi8vICAgICAgLSBEZWZpbml0aW9uIG9mIGFu
YWx5c2lzIGNsYXNzIChkYXRhIGFuZCBmdW5jdGlvbnMpDQovLyAgICAgIC0g
dGhlIGZvbGxvd2luZyBjbGFzcyBmdW5jdGlvbnM6DQovLyAgICAgICAgIC1j
b25zdHJ1Y3RvciAoY29ubmVjdGluZyBieSBkZWZhdWx0IHRoZSBUcmVlIGZp
bGUpDQovLyAgICAgICAgIC1HZXRFdmVudChJbnRfdCBldmVudCkNCi8vICAg
ICAgICAgLUluaXQoVFRyZWUgKnRyZWUpIHRvIGluaXRpYWxpemUgYSBuZXcg
VFRyZWUNCi8vICAgICAgICAgLVNob3coSW50X3QgZXZlbnQpIHRvIHJlYWQg
YW5kIER1bXAgZXZlbnQNCi8vDQovLyAgIFRoZSBnZW5lcmF0ZWQgY29kZSBp
biBjbGFzc25hbWUuY3h4IGluY2x1ZGVzIG9ubHkgdGhlIG1haW4NCi8vICAg
YW5hbHlzaXMgZnVuY3Rpb24gTG9vcC4NCi8vDQovLyAgIFRvIHVzZSB0aGlz
IGZ1bmN0aW9uOg0KLy8gICAgICAtIGNvbm5lY3QgeW91ciBUcmVlIGZpbGUg
KGVnOiBURmlsZSBmKCJteWZpbGUucm9vdCIpOykNCi8vICAgICAgLSBULT5N
YWtlQ2xhc3MoIk15Q2xhc3MiKTsNCi8vICAgIHdoZXJlIFQgaXMgdGhlIG5h
bWUgb2YgdGhlIFRyZWUgaW4gZmlsZSBteWZpbGUucm9vdA0KLy8gICAgYW5k
IE15Q2xhc3MuaHBwLCBNeUNsYXNzLmN4eCB0aGUgbmFtZSBvZiB0aGUgZmls
ZXMgY3JlYXRlZCBieSB0aGlzIGZ1bmN0aW9uLg0KLy8gICBJbiBhIFJvb3Qg
c2Vzc2lvbiwgeW91IGNhbiBkbzoNCi8vICAgICAgUm9vdCA+IC5MIE15Q2xh
c3MuY3h4DQovLyAgICAgIFJvb3QgPiBNeUNsYXNzIHQNCi8vICAgICAgUm9v
dCA+IHQuR2V0RXZlbnQoMTIpOyAvLyBGaWxsIHQgZGF0YSBtZW1iZXJzIHdp
dGggZXZlbnQgbnVtYmVyIDEyDQovLyAgICAgIFJvb3QgPiB0LlNob3coKTsg
ICAgICAgLy8gU2hvdyB2YWx1ZXMgb2YgZXZlbnQgMTINCi8vICAgICAgUm9v
dCA+IHQuU2hvdygxNik7ICAgICAvLyBSZWFkIGFuZCBzaG93IHZhbHVlcyBv
ZiBldmVudCAxNg0KLy8gICAgICBSb290ID4gdC5Mb29wKCk7ICAgICAgIC8v
IExvb3Agb24gYWxsIGV2ZW50cw0KLy8NCi8vPT09PT4NCg0KLy8gQ2hlY2sg
YWdhaW5zdCBhbiBpbnZhbGlkIFRyZWUgcG9pbnRlcg0KICAgaWYgKCF0KSBy
ZXR1cm4gMTsNCiAgIGlmICghdC0+SXNBKCktPkluaGVyaXRzRnJvbSgiVFRy
ZWUiKSkgew0KICAgICAgcHJpbnRmKCJBdHRlbXB0IHRvIE1ha2VDbGFzcyBm
b3IgYSBub24tVFRyZWUgb2JqZWN0XG4iKTsNCiAgICAgIHJldHVybiAyOw0K
ICAgfQ0KDQovLyBDb25uZWN0IG91dHB1dCBmaWxlcw0KICAgY2hhciAqdGhl
YWQgPSBuZXcgY2hhclsyNTZdOw0KDQogICBpZiAoIWNsYXNzbmFtZSkgY2xh
c3NuYW1lID0gdC0+R2V0TmFtZSgpOw0KICAgc3ByaW50Zih0aGVhZCwiJXMu
aHBwIixjbGFzc25hbWUpOw0KICAgRklMRSAqZnAgPSBmb3Blbih0aGVhZCwi
dyIpOw0KICAgaWYgKCFmcCkgew0KICAgICAgcHJpbnRmKCJDYW5ub3Qgb3Bl
biBvdXRwdXQgZmlsZTolc1xuIix0aGVhZCk7DQogICAgICBkZWxldGUgW10g
dGhlYWQ7DQogICAgICByZXR1cm4gMzsNCiAgIH0NCiAgIGNoYXIgKnRjaW1w
ID0gbmV3IGNoYXJbMjU2XTsNCiAgIHNwcmludGYodGNpbXAsIiVzLmN4eCIs
Y2xhc3NuYW1lKTsNCiAgIEZJTEUgKmZwYyA9IGZvcGVuKHRjaW1wLCJ3Iik7
DQogICBpZiAoIWZwYykgew0KICAgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiBv
dXRwdXQgZmlsZTolc1xuIix0Y2ltcCk7DQogICAgICBkZWxldGUgW10gdGhl
YWQ7DQogICAgICBkZWxldGUgW10gdGNpbXA7DQogICAgICByZXR1cm4gMzsN
CiAgIH0NCiAgIGNoYXIgKnRyZWVmaWxlID0gbmV3IGNoYXJbMTAwMF07DQog
ICBpZiAodC0+R2V0RGlyZWN0b3J5KCkgJiYgdC0+R2V0RGlyZWN0b3J5KCkt
PkdldEZpbGUoKSkNCiAgICAgICAgICAgICAgICBzdHJjcHkodHJlZWZpbGUs
dC0+R2V0RGlyZWN0b3J5KCktPkdldEZpbGUoKS0+R2V0TmFtZSgpKTsNCiAg
IGVsc2UgICAgICAgICBzdHJjcHkodHJlZWZpbGUsIk1lbW9yeSBEaXJlY3Rv
cnkiKTsNCg0KLy89PT09PT09PT09PT09PT09PT09PT09R2VuZXJhdGUgY2xh
c3NuYW1lLmhwcD09PT09PT09PT09PT09PT09PT09PQ0KICAgLy8gUHJpbnQg
aGVhZGVyDQogICBUT2JqQXJyYXkgKmxlYXZlcyA9IHQtPkdldExpc3RPZkxl
YXZlcygpOw0KICAgSW50X3QgbmxlYXZlcyA9IGxlYXZlcy0+R2V0RW50cmll
c0Zhc3QoKTsNCiAgIFREYXRpbWUgdGQ7DQogICBmcHJpbnRmKGZwLCIvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vXG4iKTsNCiAgIGZwcmludGYoZnAsIi8vICAgVGhpcyBjbGFz
cyBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBcbiIpOw0KICAg
ZnByaW50ZihmcCwiLy8gICAgICglcyBieSBST09UIHZlcnNpb24lcylcbiIs
dGQuQXNTdHJpbmcoKSxnUk9PVC0+R2V0VmVyc2lvbigpKTsNCiAgIGZwcmlu
dGYoZnAsIi8vICAgZnJvbSBUVHJlZSAlcy8lc1xuIix0LT5HZXROYW1lKCks
dC0+R2V0VGl0bGUoKSk7DQogICBmcHJpbnRmKGZwLCIvLyAgIGZvdW5kIG9u
IGZpbGU6ICVzXG4iLHRyZWVmaWxlKTsNCiAgIGZwcmludGYoZnAsIi8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy9cbiIpOw0KICAgZnByaW50ZihmcCwiXG4iKTsNCiAgIGZwcmlu
dGYoZnAsIlxuIik7DQogICBmcHJpbnRmKGZwLCIjaWZuZGVmICVzX2hwcFxu
IixjbGFzc25hbWUpOw0KICAgZnByaW50ZihmcCwiI2RlZmluZSAlc19ocHBc
biIsY2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnAsIlxuIik7DQogICBmcHJp
bnRmKGZwLCIjaWZuZGVmIF9fQ0lOVF9fXG4iKTsNCiAgIGZwcmludGYoZnAs
IiNpbmNsdWRlIFwiVFJPT1QuaFwiXG4iKTsNCiAgIGZwcmludGYoZnAsIiNp
bmNsdWRlIFwiVEJyYW5jaC5oXCJcbiIpOw0KICAgZnByaW50ZihmcCwiI2lu
Y2x1ZGUgXCJUVHJlZS5oXCJcbiIpOw0KICAgZnByaW50ZihmcCwiI2luY2x1
ZGUgXCJURmlsZS5oXCJcbiIpOw0KICAgZnByaW50ZihmcCwiI2Vsc2VcbiIp
Ow0KICAgZnByaW50ZihmcCwiY2xhc3MgVEJyYW5jaDtcbiIpOw0KICAgZnBy
aW50ZihmcCwiY2xhc3MgVFRyZWU7XG4iKTsNCiAgIGZwcmludGYoZnAsImNs
YXNzIFRGaWxlO1xuIik7DQogICBmcHJpbnRmKGZwLCIjZW5kaWZcbiIpOw0K
ICAgZnByaW50ZihmcCwiXG4iKTsNCiAgIGZwcmludGYoZnAsImNsYXNzICVz
IHtcbiIsY2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnAsIiAgIHB1YmxpYyA6
XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIFRUcmVlICAgICAgICAgICpmVHJl
ZTsgLy9wb2ludGVyIHRvIHRoZSBhbmFseXplZCBUVHJlZVxuIik7DQogICBm
cHJpbnRmKGZwLCIgICBJbnRfdCAgICAgICAgICBmRXZlbnQ7IC8vY3VycmVu
dCBFdmVudCBudW1iZXJcbiIpOw0KDQoNCi8vIEZpcnN0IGxvb3Agb24gYWxs
IGJyYW5jaGVzIHRvIGdlbmVyYXRlIGJyYW5jaCBkZWNsYXJhdGlvbnMNCiAg
IGZwcmludGYoZnAsIi8vRGVjbGFyYXRpb24gb2YgYnJhbmNoZXNcbiIpOw0K
ICAgSW50X3QgbmIsIGk7DQogICBuYiA9IHQtPkdldExpc3RPZkJyYW5jaGVz
KCkuR2V0RW50cmllc0Zhc3QoKTsNCiAgIGZvciAoaT0wO2k8bmI7aSsrKSAg
ew0KICAgICAgYnJhbmNoID0gKFRCcmFuY2gqKXQtPkdldExpc3RPZkJyYW5j
aGVzKCkuVW5jaGVja2VkQXQoaSk7DQogICAgICBmcHJpbnRmKGZwLCIlcyUt
MTVzIGJyYW5jaF8lcztcbiIsIiAgICIsIkludF90IiwgYnJhbmNoLT5HZXRO
YW1lKCkpOw0KICAgICAgZnByaW50ZihmcCwiJXMlLTE1cyAqYnJhbmNoX3Bv
aW50ZXJfJXM7XG4iLCIgICAiLCJUQnJhbmNoIiwgYnJhbmNoLT5HZXROYW1l
KCkpOw0KICAgfQ0KDQovLyBGaXJzdCBsb29wIG9uIGFsbCBsZWF2ZXMgdG8g
Z2VuZXJhdGUgbGVhZiBkZWNsYXJhdGlvbnMNCiAgIGZwcmludGYoZnAsIi8v
RGVjbGFyYXRpb24gb2YgbGVhdmVzXG4iKTsNCiAgIEludF90IGxlbiwgbDsN
CiAgIFRMZWFmICpsZWFmY291bnQ7DQogICBUTGVhZk9iamVjdCAqbGVhZm9i
ajsNCiAgIGNoYXIgKmJuYW1lOw0KICAgY29uc3QgY2hhciAqaGVhZE9LICA9
ICIgICAiOw0KICAgY29uc3QgY2hhciAqaGVhZGNvbSA9ICIgLy8iOw0KICAg
Y29uc3QgY2hhciAqaGVhZDsNCiAgIGNoYXIgYnJhbmNobmFtZVs2NF07DQog
ICBmb3IgKGw9MDtsPG5sZWF2ZXM7bCsrKSB7DQogICAgICBUTGVhZiAqbGVh
ZiA9IChUTGVhZiopbGVhdmVzLT5VbmNoZWNrZWRBdChsKTsNCiAgICAgIGxl
biA9IGxlYWYtPkdldExlbigpOw0KICAgICAgbGVhZmNvdW50ID1sZWFmLT5H
ZXRMZWFmQ291bnQoKTsNCiAgICAgIFRCcmFuY2ggKmJyYW5jaCA9IGxlYWYt
PkdldEJyYW5jaCgpOw0KICAgICAgaWYgKGxlYWZjb3VudCkgc3RyY3B5KGJy
YW5jaG5hbWUsYnJhbmNoLT5HZXROYW1lKCkpOw0KICAgICAgZWxzZSAgICAg
ICAgICAgc3RyY3B5KGJyYW5jaG5hbWUsbGVhZi0+R2V0VGl0bGUoKSk7DQog
ICAgICBjaGFyICp0d29kaW0gPSAoY2hhciopc3Ryc3RyKGxlYWYtPkdldFRp
dGxlKCksIl1bIik7DQogICAgICBibmFtZSA9IGJyYW5jaG5hbWU7DQogICAg
ICB3aGlsZSAoKmJuYW1lKSB7aWYgKCpibmFtZSA9PSAnLicpICpibmFtZT0n
Xyc7IGJuYW1lKys7fQ0KICAgICAgaWYgKGJyYW5jaC0+SXNBKCkgPT0gVEJy
YW5jaE9iamVjdDo6Q2xhc3MoKSkgew0KICAgICAgICAgaWYgKGJyYW5jaC0+
R2V0TGlzdE9mQnJhbmNoZXMoKS0+R2V0RW50cmllc0Zhc3QoKSkgY29udGlu
dWU7DQogICAgICAgICBsZWFmb2JqID0gKFRMZWFmT2JqZWN0KilsZWFmOw0K
ICAgICAgICAgaWYgKGxlYWZvYmotPkdldENsYXNzKCkpIGhlYWQgPSBoZWFk
T0s7DQogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgaGVhZCA9
IGhlYWRjb207DQogICAgICAgICBmcHJpbnRmKGZwLCIlcyUtMTVzIColcztc
biIsaGVhZCxsZWFmb2JqLT5HZXRUeXBlTmFtZSgpLCBsZWFmb2JqLT5HZXRO
YW1lKCkpOw0KICAgICAgICAgY29udGludWU7DQogICAgICB9DQogICAgICBp
ZiAobGVhZmNvdW50KSB7DQogICAgICAgICBsZW4gPSBsZWFmY291bnQtPkdl
dE1heGltdW0oKTsNCiAgICAgICAgIGlmICh0d29kaW0pIHsNCiAgICAgICAg
ICAgIGZwcmludGYoZnAsIiAgICUtMTVzICVzWyVkXSVzO1xuIixsZWFmLT5H
ZXRUeXBlTmFtZSgpLCBicmFuY2huYW1lLGxlbiwoY2hhciopKHR3b2RpbSsx
KSk7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZnByaW50Zihm
cCwiICAgJS0xNXMgJXNbJWRdO1xuIixsZWFmLT5HZXRUeXBlTmFtZSgpLCBi
cmFuY2huYW1lLGxlbik7DQogICAgICAgICB9DQogICAgICB9IGVsc2Ugew0K
ICAgICAgICAgZnByaW50ZihmcCwiICAgJS0xNXMgbGVhZl8lcztcbiIsbGVh
Zi0+R2V0VHlwZU5hbWUoKSwgYnJhbmNobmFtZSk7DQogICAgICAgICBmcHJp
bnRmKGZwLCIgICAlLTE1cyAlcyh2b2lkKSB7IixsZWFmLT5HZXRUeXBlTmFt
ZSgpLCBicmFuY2huYW1lKTsNCiAgICAgICAgIGZwcmludGYoZnAsImlmIChi
cmFuY2hfJXMpIHJldHVybiBsZWFmXyVzOyIsYnJhbmNoLT5HZXROYW1lKCks
IGJyYW5jaG5hbWUpOw0KICAgICAgICAgZnByaW50ZihmcCwiYnJhbmNoX3Bv
aW50ZXJfJXMtPkdldEV2ZW50KGZFdmVudCk7IixicmFuY2gtPkdldE5hbWUo
KSk7DQogICAgICAgICBmcHJpbnRmKGZwLCJicmFuY2hfJXMgPSAxOyByZXR1
cm4gbGVhZl8lczt9XG4iLGJyYW5jaC0+R2V0TmFtZSgpLCBicmFuY2huYW1l
KTsNCiAgICAgICAgIGZwcmludGYoZnAsIiAgICUtMTVzICVzKCVzIHZhbHVl
KSB7cmV0dXJuIGxlYWZfJXMgPSB2YWx1ZTt9XG4iLGxlYWYtPkdldFR5cGVO
YW1lKCksIGJyYW5jaG5hbWUsIGxlYWYtPkdldFR5cGVOYW1lKCksIGJyYW5j
aG5hbWUpOw0KICAgICAgfQ0KICAgfQ0KDQovLyBnZW5lcmF0ZSBjbGFzcyBt
ZW1iZXIgZnVuY3Rpb25zIHByb3RvdHlwZXMNCiAgIGZwcmludGYoZnAsIlxu
Iik7DQogICBmcHJpbnRmKGZwLCIgICAlcyhUVHJlZSAqdHJlZSA9IDApO1xu
IixjbGFzc25hbWUpOw0KICAgZnByaW50ZihmcCwiICAgfiVzKCkgezt9XG4i
LGNsYXNzbmFtZSk7DQogICBmcHJpbnRmKGZwLCIgICBJbnRfdCBHZXRFdmVu
dChJbnRfdCBldmVudCk7XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIHZvaWQg
SW5pdChUVHJlZSAqdHJlZSk7XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIHZv
aWQgTG9vcCgpO1xuIik7DQogICBmcHJpbnRmKGZwLCIgICB2b2lkIFNob3co
SW50X3QgZXZlbnQgPSAtMSk7XG4iKTsNCiAgIGZwcmludGYoZnAsIn07XG4i
KTsNCiAgIGZwcmludGYoZnAsIlxuIik7DQogICBmcHJpbnRmKGZwLCIjZW5k
aWZcbiIpOw0KICAgZnByaW50ZihmcCwiXG4iKTsNCg0KICAgZnByaW50Zihm
cCwiI2lmZGVmICVzX2N4eFxuIixjbGFzc25hbWUpOw0KICAgZnByaW50Zihm
cCwiXG4iKTsNCg0KLy8gZ2VuZXJhdGUgY29kZSBmb3IgY2xhc3MgY29uc3Ry
dWN0b3INCiAgIGZwcmludGYoZnAsIiVzOjolcyhUVHJlZSAqdHJlZSlcbiIs
Y2xhc3NuYW1lLGNsYXNzbmFtZSk7DQogICBmcHJpbnRmKGZwLCJ7XG4iKTsN
CiAgIGZwcmludGYoZnAsIi8vIGlmIHBhcmFtZXRlciB0cmVlIGlzIG5vdCBz
cGVjaWZpZWQgKG9yIHplcm8pLCBjb25uZWN0IHRoZSBmaWxlXG4iKTsNCiAg
IGZwcmludGYoZnAsIi8vIHVzZWQgdG8gZ2VuZXJhdGUgdGhpcyBjbGFzcyBh
bmQgcmVhZCB0aGUgVHJlZS5cbiIpOw0KICAgZnByaW50ZihmcCwiICAgaWYg
KHRyZWUgPT0gMCkge1xuIik7DQogICBmcHJpbnRmKGZwLCIgICAgICBURmls
ZSAqZiA9IChURmlsZSopZ1JPT1QtPkdldExpc3RPZkZpbGVzKCktPkZpbmRP
YmplY3QoXCIlc1wiKTtcbiIsdHJlZWZpbGUpOw0KICAgZnByaW50ZihmcCwi
ICAgICAgaWYgKCFmKSB7XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgICAgICAg
IGYgPSBuZXcgVEZpbGUoXCIlc1wiKTtcbiIsdHJlZWZpbGUpOw0KICAgZnBy
aW50ZihmcCwiICAgICAgfVxuIik7DQogICBmcHJpbnRmKGZwLCIgICAgICB0
cmVlID0gKFRUcmVlKilnRGlyZWN0b3J5LT5HZXQoXCIlc1wiKTtcblxuIix0
LT5HZXROYW1lKCkpOw0KICAgZnByaW50ZihmcCwiICAgfVxuIik7DQogICBm
cHJpbnRmKGZwLCIgICBJbml0KHRyZWUpO1xuIik7DQogICBmcHJpbnRmKGZw
LCJ9XG4iKTsNCiAgIGZwcmludGYoZnAsIlxuIik7DQoNCi8vIGdlbmVyYXRl
IGNvZGUgZm9yIGNsYXNzIG1lbWJlciBmdW5jdGlvbiBHZXRFdmVudCgpDQog
ICBmcHJpbnRmKGZwLCJJbnRfdCAlczo6R2V0RXZlbnQoSW50X3QgZXZlbnQp
XG4iLGNsYXNzbmFtZSk7DQogICBmcHJpbnRmKGZwLCJ7XG4iKTsNCiAgIGZw
cmludGYoZnAsIi8vIFJlYWQgc3BlY2lmaWVkIGV2ZW50IGZyb20gdGhlIFRy
ZWUgaW50byBkYXRhIG1lbWJlcnNcbiIpOw0KICAgZnByaW50ZihmcCwiICAg
aWYgKCFmVHJlZSkgcmV0dXJuIDA7XG4iKTsNCiAgIGZwcmludGYoZnAsIiAg
IC8vIGlmIChmRXZlbnQ9PWV2ZW50KSByZXR1cm4gMTtcbiIpOw0KICAgbmIg
PSB0LT5HZXRMaXN0T2ZCcmFuY2hlcygpLkdldEVudHJpZXNGYXN0KCk7DQog
ICBmb3IgKGk9MDtpPG5iO2krKykgIHsNCiAgICAgIGJyYW5jaCA9IChUQnJh
bmNoKil0LT5HZXRMaXN0T2ZCcmFuY2hlcygpLlVuY2hlY2tlZEF0KGkpOw0K
ICAgICAgZnByaW50ZihmcCwiICAgYnJhbmNoXyVzID0gMDtcbiIsYnJhbmNo
LT5HZXROYW1lKCkpOw0KICAgfQ0KICAgZnByaW50ZihmcCwiICAgZkV2ZW50
ID0gZXZlbnQ7XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIHJldHVybiAxO1xu
Iik7DQogICBmcHJpbnRmKGZwLCJ9XG4iKTsNCiAgIGZwcmludGYoZnAsIlxu
Iik7DQoNCg0KLy8gZ2VuZXJhdGUgY29kZSBmb3IgY2xhc3MgbWVtYmVyIGZ1
bmN0aW9uIEluaXQoKQ0KICAgZnByaW50ZihmcCwidm9pZCAlczo6SW5pdChU
VHJlZSAqdHJlZSlcbiIsY2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnAsIntc
biIpOw0KICAgZnByaW50ZihmcCwiLy8gICBTZXQgYnJhbmNoIGFkZHJlc3Nl
c1xuIik7DQogICBmcHJpbnRmKGZwLCIgICBpZiAodHJlZSA9PSAwKSByZXR1
cm47XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIGZUcmVlID0gdHJlZTtcbiIp
Ow0KICAgZm9yIChsPTA7bDxubGVhdmVzO2wrKykgew0KICAgICAgVExlYWYg
KmxlYWYgPSAoVExlYWYqKWxlYXZlcy0+VW5jaGVja2VkQXQobCk7DQogICAg
ICBsZW4gPSBsZWFmLT5HZXRMZW4oKTsNCiAgICAgIGxlYWZjb3VudCA9bGVh
Zi0+R2V0TGVhZkNvdW50KCk7DQogICAgICBUQnJhbmNoICpicmFuY2ggPSBs
ZWFmLT5HZXRCcmFuY2goKTsNCiAgICAgIGlmIChsZWFmY291bnQpIHN0cmNw
eShicmFuY2huYW1lLGJyYW5jaC0+R2V0TmFtZSgpKTsNCiAgICAgIGVsc2Ug
ICAgICAgICAgIHN0cmNweShicmFuY2huYW1lLGxlYWYtPkdldFRpdGxlKCkp
Ow0KICAgICAgYm5hbWUgPSBicmFuY2huYW1lOw0KICAgICAgd2hpbGUgKCpi
bmFtZSkge2lmICgqYm5hbWUgPT0gJy4nKSAqYm5hbWU9J18nOyBibmFtZSsr
O30NCiAgICAgIGNoYXIgKmJyYWsgPSBzdHJzdHIoYnJhbmNobmFtZSwiWyIp
Ow0KICAgICAgaWYgKGJyYWspICpicmFrID0gMDsNCiAgICAgIGhlYWQgPSBo
ZWFkT0s7DQogICAgICBpZiAoYnJhbmNoLT5Jc0EoKSA9PSBUQnJhbmNoT2Jq
ZWN0OjpDbGFzcygpKSB7DQogICAgICAgICBpZiAoYnJhbmNoLT5HZXRMaXN0
T2ZCcmFuY2hlcygpLT5HZXRFbnRyaWVzRmFzdCgpKSBjb250aW51ZTsNCiAg
ICAgICAgIGxlYWZvYmogPSAoVExlYWZPYmplY3QqKWxlYWY7DQogICAgICAg
ICBpZiAoIWxlYWZvYmotPkdldENsYXNzKCkpIGhlYWQgPSBoZWFkY29tOw0K
ICAgICAgICAgc3RyY3B5KGJyYW5jaG5hbWUsYnJhbmNoLT5HZXROYW1lKCkp
Ow0KICAgICAgfQ0KICAgICAgaWYgKGxlYWZjb3VudCkgbGVuID0gbGVhZmNv
dW50LT5HZXRNYXhpbXVtKCkrMTsNCiAgICAgIGlmIChsZW4gPiAxKSBmcHJp
bnRmKGZwLCIgICAlc2ZUcmVlLT5TZXRCcmFuY2hBZGRyZXNzKFwiJXNcIiwl
cyk7XG4iLGhlYWQsYnJhbmNoLT5HZXROYW1lKCksYnJhbmNobmFtZSk7DQog
ICAgICBlbHNlICAgICAgICAgZnByaW50ZihmcCwiICAgJXNmVHJlZS0+U2V0
QnJhbmNoQWRkcmVzcyhcIiVzXCIsJmxlYWZfJXMpO1xuIixoZWFkLGJyYW5j
aC0+R2V0TmFtZSgpLGJyYW5jaG5hbWUpOw0KICAgfQ0KICAgZnByaW50Zihm
cCwiICAgZlRyZWUtPlNldEJyYW5jaFN0YXR1cyhcIipcIiwwKTsgIC8vIGRp
c2FibGUgYWxsIGJyYW5jaGVzXG4iKTsNCiAgIG5iID0gdC0+R2V0TGlzdE9m
QnJhbmNoZXMoKS5HZXRFbnRyaWVzRmFzdCgpOw0KICAgZm9yIChpPTA7aTxu
YjtpKyspICB7DQogICAgICBicmFuY2ggPSAoVEJyYW5jaCopdC0+R2V0TGlz
dE9mQnJhbmNoZXMoKS5VbmNoZWNrZWRBdChpKTsNCiAgICAgIGZwcmludGYo
ZnAsIiAgIGJyYW5jaF8lcyA9IDA7XG4iLGJyYW5jaC0+R2V0TmFtZSgpKTsN
CiAgICAgIGZwcmludGYoZnAsIiAgIGJyYW5jaF9wb2ludGVyXyVzID0gZlRy
ZWUtPkdldEJyYW5jaChcIiVzXCIpO1xuIixicmFuY2gtPkdldE5hbWUoKSxi
cmFuY2gtPkdldE5hbWUoKSk7DQogICB9DQogICBmcHJpbnRmKGZwLCIgICBm
RXZlbnQgPSAtMTtcbiIpOw0KICAgZnByaW50ZihmcCwifVxuIik7DQogICBm
cHJpbnRmKGZwLCJcbiIpOw0KDQovLyBnZW5lcmF0ZSBjb2RlIGZvciBjbGFz
cyBtZW1iZXIgZnVuY3Rpb24gU2hvdygpDQogICBmcHJpbnRmKGZwLCJ2b2lk
ICVzOjpTaG93KEludF90IGV2ZW50KVxuIixjbGFzc25hbWUpOw0KICAgZnBy
aW50ZihmcCwie1xuIik7DQogICBmcHJpbnRmKGZwLCIvLyBQcmludCBjb250
ZW50cyBvZiBldmVudC5cbiIpOw0KICAgZnByaW50ZihmcCwiLy8gSWYgZXZl
bnQgaXMgbm90IHNwZWNpZmllZCwgcHJpbnQgY3VycmVudCBldmVudFxuIik7
DQoNCiAgIGZwcmludGYoZnAsIiAgIGlmICghZlRyZWUpIHJldHVybjtcbiIp
Ow0KICAgZnByaW50ZihmcCwiICAgaWYgKGV2ZW50Pj0wKSBmRXZlbnQgPSBl
dmVudDtcbiIpOw0KICAgZnByaW50ZihmcCwiICAgZWxzZSBldmVudCA9IGZF
dmVudDtcbiIpOw0KICAgZnByaW50ZihmcCwiICAgaWYgKGZFdmVudDwwKSBy
ZXR1cm47XG4iKTsNCiAgIGZwcmludGYoZnAsIiAgIGZUcmVlLT5TZXRCcmFu
Y2hTdGF0dXMoXCIqXCIsMSk7ICAvLyBlbmFibGUgYWxsIGJyYW5jaGVzXG4i
KTsNCiAgIGZwcmludGYoZnAsIiAgIGZUcmVlLT5TaG93KGZFdmVudCk7XG4i
KTsNCiAgIGZwcmludGYoZnAsIiAgIGZUcmVlLT5TZXRCcmFuY2hTdGF0dXMo
XCIqXCIsMCk7ICAvLyBkaXNhYmxlIGFsbCBicmFuY2hlc1xuIik7DQogICBu
YiA9IHQtPkdldExpc3RPZkJyYW5jaGVzKCkuR2V0RW50cmllc0Zhc3QoKTsN
CiAgIGZvciAoaT0wO2k8bmI7aSsrKSAgew0KICAgICAgYnJhbmNoID0gKFRC
cmFuY2gqKXQtPkdldExpc3RPZkJyYW5jaGVzKCkuVW5jaGVja2VkQXQoaSk7
DQogICAgICBmcHJpbnRmKGZwLCIgICBicmFuY2hfJXMgPSAxO1xuIixicmFu
Y2gtPkdldE5hbWUoKSk7DQogICB9DQogICBmcHJpbnRmKGZwLCJ9XG4iKTsN
CiAgIGZwcmludGYoZnAsIlxuIik7DQoNCiAgIGZwcmludGYoZnAsIiNlbmRp
ZlxuIik7DQogICBmcHJpbnRmKGZwLCJcbiIpOw0KDQovLz09PT09PT09PT09
PT09PT09PT09PT1HZW5lcmF0ZSBjbGFzc25hbWUuY3h4PT09PT09PT09PT09
PT09PT09PT09DQovLyBnZW5lcmF0ZSBjb2RlIGZvciBjbGFzcyBtZW1iZXIg
ZnVuY3Rpb24gTG9vcCgpDQogICBmcHJpbnRmKGZwYywiI2lmbmRlZiAlc19j
eHhcbiIsY2xhc3NuYW1lKTsNCiAgIGZwcmludGYoZnBjLCIjZGVmaW5lICVz
X2N4eFxuIixjbGFzc25hbWUpOw0KICAgZnByaW50ZihmcGMsIiNlbmRpZlxu
Iik7DQogICBmcHJpbnRmKGZwYywiXG4iKTsNCiAgIGZwcmludGYoZnBjLCIj
aW5jbHVkZSBcIiVzXCJcbiIsdGhlYWQpOw0KICAgZnByaW50ZihmcGMsIlxu
Iik7DQogICBmcHJpbnRmKGZwYywiI2lmbmRlZiBfX0NJTlRfX1xuIik7DQog
ICBmcHJpbnRmKGZwYywiLy8gUGxhY2UgaGVyZSBhbGwgUk9PVCByZWxhdGVk
IGluY2x1ZGVzIHRoYXQgeW91IG5lZWRcbiIpOw0KICAgZnByaW50ZihmcGMs
IiNlbmRpZlxuIik7DQogICBmcHJpbnRmKGZwYywiXG4iKTsNCiAgIGZwcmlu
dGYoZnBjLCJ2b2lkICVzOjpMb29wKClcbiIsY2xhc3NuYW1lKTsNCiAgIGZw
cmludGYoZnBjLCJ7XG4iKTsNCiAgIGZwcmludGYoZnBjLCJcbi8vICAgICBU
aGlzIGlzIHRoZSBsb29wIHNrZWxldG9uXG4iKTsNCiAgIGZwcmludGYoZnBj
LCIgICBpZiAoZlRyZWUgPT0gMCkgcmV0dXJuO1xuIik7DQogICBmcHJpbnRm
KGZwYywiXG4gICBTdGF0X3QgbmVudHJpZXMgPSBmVHJlZS0+R2V0RW50cmll
cygpO1xuIik7DQogICBmcHJpbnRmKGZwYywiXG4gICBJbnRfdCBuYnl0ZXMg
PSAwLCBuYiA9IDA7XG4iKTsNCiAgIGZwcmludGYoZnBjLCIgICAgIGZvciAo
SW50X3QgaT0wOyBpPG5lbnRyaWVzO2krKykge1xuIik7DQogICBmcHJpbnRm
KGZwYywiICAgICAgICBuYiA9IGZUcmVlLT5HZXRFdmVudChpKTsgICBuYnl0
ZXMgKz0gbmI7XG4iKTsNCiAgIGZwcmludGYoZnBjLCIgICAgIH1cbiIpOw0K
ICAgZnByaW50ZihmcGMsIn1cbiIpOw0KICAgZnByaW50ZihmcGMsIlxuIik7
DQoNCiAgIHByaW50ZigiRmlsZXM6ICVzIGFuZCAlcyBnZW5lcmF0ZWQgZnJv
bSBUcmVlOiAlc1xuIix0aGVhZCx0Y2ltcCx0LT5HZXROYW1lKCkpOw0KICAg
ZGVsZXRlIFtdIHRoZWFkOw0KICAgZGVsZXRlIFtdIHRjaW1wOw0KICAgZGVs
ZXRlIFtdIHRyZWVmaWxlOw0KICAgZmNsb3NlKGZwKTsNCiAgIGZjbG9zZShm
cGMpOw0KDQogICByZXR1cm4gMDsNCn0NCg0KLy9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXw0K
---559023410-851401618-924116343=:9289
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ntuple.hpp"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990414205903.9289C@uranos.cto.us.edu.pl>
Content-Description: ntuple.hpp
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLw0KLy8gICBUaGlzIGNsYXNzIGhhcyBiZWVuIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIA0KLy8gICAgIChXZWQgQXByIDE0IDIwOjI0
OjEzIDE5OTkgYnkgUk9PVCB2ZXJzaW9uIDIuMjEvMDgpDQovLyAgIGZyb20g
VFRyZWUgbnR1cGxlL0RlbW8gbnR1cGxlDQovLyAgIGZvdW5kIG9uIGZpbGU6
IGhzaW1wbGUucm9vdA0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQoNCiNpZm5kZWYgbnR1
cGxlX2hwcA0KI2RlZmluZSBudHVwbGVfaHBwDQoNCiNpZm5kZWYgX19DSU5U
X18NCiNpbmNsdWRlICJUUk9PVC5oIg0KI2luY2x1ZGUgIlRCcmFuY2guaCIN
CiNpbmNsdWRlICJUVHJlZS5oIg0KI2luY2x1ZGUgIlRGaWxlLmgiDQojZWxz
ZQ0KY2xhc3MgVEJyYW5jaDsNCmNsYXNzIFRUcmVlOw0KY2xhc3MgVEZpbGU7
DQojZW5kaWYNCg0KY2xhc3MgbnR1cGxlIHsNCiAgIHB1YmxpYyA6DQogICBU
VHJlZSAgICAgICAgICAqZlRyZWU7IC8vcG9pbnRlciB0byB0aGUgYW5hbHl6
ZWQgVFRyZWUNCiAgIEludF90ICAgICAgICAgIGZFdmVudDsgLy9jdXJyZW50
IEV2ZW50IG51bWJlcg0KLy9EZWNsYXJhdGlvbiBvZiBicmFuY2hlcw0KICAg
SW50X3QgICAgICAgICAgIGJyYW5jaF9weDsNCiAgIFRCcmFuY2ggICAgICAg
ICAqYnJhbmNoX3BvaW50ZXJfcHg7DQogICBJbnRfdCAgICAgICAgICAgYnJh
bmNoX3B5Ow0KICAgVEJyYW5jaCAgICAgICAgICpicmFuY2hfcG9pbnRlcl9w
eTsNCiAgIEludF90ICAgICAgICAgICBicmFuY2hfcHo7DQogICBUQnJhbmNo
ICAgICAgICAgKmJyYW5jaF9wb2ludGVyX3B6Ow0KICAgSW50X3QgICAgICAg
ICAgIGJyYW5jaF9yYW5kb207DQogICBUQnJhbmNoICAgICAgICAgKmJyYW5j
aF9wb2ludGVyX3JhbmRvbTsNCiAgIEludF90ICAgICAgICAgICBicmFuY2hf
aTsNCiAgIFRCcmFuY2ggICAgICAgICAqYnJhbmNoX3BvaW50ZXJfaTsNCi8v
RGVjbGFyYXRpb24gb2YgbGVhdmVzDQogICBGbG9hdF90ICAgICAgICAgbGVh
Zl9weDsNCiAgIEZsb2F0X3QgICAgICAgICBweCh2b2lkKSB7aWYgKGJyYW5j
aF9weCkgcmV0dXJuIGxlYWZfcHg7YnJhbmNoX3BvaW50ZXJfcHgtPkdldEV2
ZW50KGZFdmVudCk7YnJhbmNoX3B4ID0gMTsgcmV0dXJuIGxlYWZfcHg7fQ0K
ICAgRmxvYXRfdCAgICAgICAgIHB4KEZsb2F0X3QgdmFsdWUpIHtyZXR1cm4g
bGVhZl9weCA9IHZhbHVlO30NCiAgIEZsb2F0X3QgICAgICAgICBsZWFmX3B5
Ow0KICAgRmxvYXRfdCAgICAgICAgIHB5KHZvaWQpIHtpZiAoYnJhbmNoX3B5
KSByZXR1cm4gbGVhZl9weTticmFuY2hfcG9pbnRlcl9weS0+R2V0RXZlbnQo
ZkV2ZW50KTticmFuY2hfcHkgPSAxOyByZXR1cm4gbGVhZl9weTt9DQogICBG
bG9hdF90ICAgICAgICAgcHkoRmxvYXRfdCB2YWx1ZSkge3JldHVybiBsZWFm
X3B5ID0gdmFsdWU7fQ0KICAgRmxvYXRfdCAgICAgICAgIGxlYWZfcHo7DQog
ICBGbG9hdF90ICAgICAgICAgcHoodm9pZCkge2lmIChicmFuY2hfcHopIHJl
dHVybiBsZWFmX3B6O2JyYW5jaF9wb2ludGVyX3B6LT5HZXRFdmVudChmRXZl
bnQpO2JyYW5jaF9weiA9IDE7IHJldHVybiBsZWFmX3B6O30NCiAgIEZsb2F0
X3QgICAgICAgICBweihGbG9hdF90IHZhbHVlKSB7cmV0dXJuIGxlYWZfcHog
PSB2YWx1ZTt9DQogICBGbG9hdF90ICAgICAgICAgbGVhZl9yYW5kb207DQog
ICBGbG9hdF90ICAgICAgICAgcmFuZG9tKHZvaWQpIHtpZiAoYnJhbmNoX3Jh
bmRvbSkgcmV0dXJuIGxlYWZfcmFuZG9tO2JyYW5jaF9wb2ludGVyX3JhbmRv
bS0+R2V0RXZlbnQoZkV2ZW50KTticmFuY2hfcmFuZG9tID0gMTsgcmV0dXJu
IGxlYWZfcmFuZG9tO30NCiAgIEZsb2F0X3QgICAgICAgICByYW5kb20oRmxv
YXRfdCB2YWx1ZSkge3JldHVybiBsZWFmX3JhbmRvbSA9IHZhbHVlO30NCiAg
IEZsb2F0X3QgICAgICAgICBsZWFmX2k7DQogICBGbG9hdF90ICAgICAgICAg
aSh2b2lkKSB7aWYgKGJyYW5jaF9pKSByZXR1cm4gbGVhZl9pO2JyYW5jaF9w
b2ludGVyX2ktPkdldEV2ZW50KGZFdmVudCk7YnJhbmNoX2kgPSAxOyByZXR1
cm4gbGVhZl9pO30NCiAgIEZsb2F0X3QgICAgICAgICBpKEZsb2F0X3QgdmFs
dWUpIHtyZXR1cm4gbGVhZl9pID0gdmFsdWU7fQ0KDQogICBudHVwbGUoVFRy
ZWUgKnRyZWUgPSAwKTsNCiAgIH5udHVwbGUoKSB7O30NCiAgIEludF90IEdl
dEV2ZW50KEludF90IGV2ZW50KTsNCiAgIHZvaWQgSW5pdChUVHJlZSAqdHJl
ZSk7DQogICB2b2lkIExvb3AoKTsNCiAgIHZvaWQgU2hvdyhJbnRfdCBldmVu
dCA9IC0xKTsNCn07DQoNCiNlbmRpZg0KDQojaWZkZWYgbnR1cGxlX2N4eA0K
DQpudHVwbGU6Om50dXBsZShUVHJlZSAqdHJlZSkNCnsNCi8vIGlmIHBhcmFt
ZXRlciB0cmVlIGlzIG5vdCBzcGVjaWZpZWQgKG9yIHplcm8pLCBjb25uZWN0
IHRoZSBmaWxlDQovLyB1c2VkIHRvIGdlbmVyYXRlIHRoaXMgY2xhc3MgYW5k
IHJlYWQgdGhlIFRyZWUuDQogICBpZiAodHJlZSA9PSAwKSB7DQogICAgICBU
RmlsZSAqZiA9IChURmlsZSopZ1JPT1QtPkdldExpc3RPZkZpbGVzKCktPkZp
bmRPYmplY3QoImhzaW1wbGUucm9vdCIpOw0KICAgICAgaWYgKCFmKSB7DQog
ICAgICAgICBmID0gbmV3IFRGaWxlKCJoc2ltcGxlLnJvb3QiKTsNCiAgICAg
IH0NCiAgICAgIHRyZWUgPSAoVFRyZWUqKWdEaXJlY3RvcnktPkdldCgibnR1
cGxlIik7DQoNCiAgIH0NCiAgIEluaXQodHJlZSk7DQp9DQoNCkludF90IG50
dXBsZTo6R2V0RXZlbnQoSW50X3QgZXZlbnQpDQp7DQovLyBSZWFkIHNwZWNp
ZmllZCBldmVudCBmcm9tIHRoZSBUcmVlIGludG8gZGF0YSBtZW1iZXJzDQog
ICBpZiAoIWZUcmVlKSByZXR1cm4gMDsNCiAgIC8vIGlmIChmRXZlbnQ9PWV2
ZW50KSByZXR1cm4gMTsNCiAgIGJyYW5jaF9weCA9IDA7DQogICBicmFuY2hf
cHkgPSAwOw0KICAgYnJhbmNoX3B6ID0gMDsNCiAgIGJyYW5jaF9yYW5kb20g
PSAwOw0KICAgYnJhbmNoX2kgPSAwOw0KICAgZkV2ZW50ID0gZXZlbnQ7DQog
ICByZXR1cm4gMTsNCn0NCg0Kdm9pZCBudHVwbGU6OkluaXQoVFRyZWUgKnRy
ZWUpDQp7DQovLyAgIFNldCBicmFuY2ggYWRkcmVzc2VzDQogICBpZiAodHJl
ZSA9PSAwKSByZXR1cm47DQogICBmVHJlZSA9IHRyZWU7DQogICAgICBmVHJl
ZS0+U2V0QnJhbmNoQWRkcmVzcygicHgiLCZsZWFmX3B4KTsNCiAgICAgIGZU
cmVlLT5TZXRCcmFuY2hBZGRyZXNzKCJweSIsJmxlYWZfcHkpOw0KICAgICAg
ZlRyZWUtPlNldEJyYW5jaEFkZHJlc3MoInB6IiwmbGVhZl9weik7DQogICAg
ICBmVHJlZS0+U2V0QnJhbmNoQWRkcmVzcygicmFuZG9tIiwmbGVhZl9yYW5k
b20pOw0KICAgICAgZlRyZWUtPlNldEJyYW5jaEFkZHJlc3MoImkiLCZsZWFm
X2kpOw0KICAgZlRyZWUtPlNldEJyYW5jaFN0YXR1cygiKiIsMCk7ICAvLyBk
aXNhYmxlIGFsbCBicmFuY2hlcw0KICAgYnJhbmNoX3B4ID0gMDsNCiAgIGJy
YW5jaF9wb2ludGVyX3B4ID0gZlRyZWUtPkdldEJyYW5jaCgicHgiKTsNCiAg
IGJyYW5jaF9weSA9IDA7DQogICBicmFuY2hfcG9pbnRlcl9weSA9IGZUcmVl
LT5HZXRCcmFuY2goInB5Iik7DQogICBicmFuY2hfcHogPSAwOw0KICAgYnJh
bmNoX3BvaW50ZXJfcHogPSBmVHJlZS0+R2V0QnJhbmNoKCJweiIpOw0KICAg
YnJhbmNoX3JhbmRvbSA9IDA7DQogICBicmFuY2hfcG9pbnRlcl9yYW5kb20g
PSBmVHJlZS0+R2V0QnJhbmNoKCJyYW5kb20iKTsNCiAgIGJyYW5jaF9pID0g
MDsNCiAgIGJyYW5jaF9wb2ludGVyX2kgPSBmVHJlZS0+R2V0QnJhbmNoKCJp
Iik7DQogICBmRXZlbnQgPSAtMTsNCn0NCg0Kdm9pZCBudHVwbGU6OlNob3co
SW50X3QgZXZlbnQpDQp7DQovLyBQcmludCBjb250ZW50cyBvZiBldmVudC4N
Ci8vIElmIGV2ZW50IGlzIG5vdCBzcGVjaWZpZWQsIHByaW50IGN1cnJlbnQg
ZXZlbnQNCiAgIGlmICghZlRyZWUpIHJldHVybjsNCiAgIGlmIChldmVudD49
MCkgZkV2ZW50ID0gZXZlbnQ7DQogICBlbHNlIGV2ZW50ID0gZkV2ZW50Ow0K
ICAgaWYgKGZFdmVudDwwKSByZXR1cm47DQogICBmVHJlZS0+U2V0QnJhbmNo
U3RhdHVzKCIqIiwxKTsgIC8vIGVuYWJsZSBhbGwgYnJhbmNoZXMNCiAgIGZU
cmVlLT5TaG93KGZFdmVudCk7DQogICBmVHJlZS0+U2V0QnJhbmNoU3RhdHVz
KCIqIiwwKTsgIC8vIGRpc2FibGUgYWxsIGJyYW5jaGVzDQogICBicmFuY2hf
cHggPSAxOw0KICAgYnJhbmNoX3B5ID0gMTsNCiAgIGJyYW5jaF9weiA9IDE7
DQogICBicmFuY2hfcmFuZG9tID0gMTsNCiAgIGJyYW5jaF9pID0gMTsNCn0N
Cg0KI2VuZGlmDQoNCg==
---559023410-851401618-924116343=:9289
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ntuple.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990414205903.9289D@uranos.cto.us.edu.pl>
Content-Description: ntuple.cxx
I2lmbmRlZiBudHVwbGVfY3h4DQojZGVmaW5lIG50dXBsZV9jeHgNCiNlbmRp
Zg0KDQojaW5jbHVkZSAibnR1cGxlLmhwcCINCg0KI2lmbmRlZiBfX0NJTlRf
Xw0KLy8gUGxhY2UgaGVyZSBhbGwgUk9PVCByZWxhdGVkIGluY2x1ZGVzIHRo
YXQgeW91IG5lZWQNCiNpbmNsdWRlICJUSDEuaCINCiNpbmNsdWRlICJUSDIu
aCINCiNpbmNsdWRlICJUQ2FudmFzLmgiDQojZW5kaWYNCg0Kdm9pZCBudHVw
bGU6Okxvb3AoKQ0Kew0KDQovLyAgICAgVGhpcyBpcyB0aGUgbG9vcCBza2Vs
ZXRvbg0KICAgaWYgKGZUcmVlID09IDApIHJldHVybjsNCg0KICAgVEgxRiAq
aF9weD0gbmV3IFRIMUYoInB4IiwicHgiLDEwMCwtNCw0KTsNCiAgIFRIMUYg
KmhfcHk9IG5ldyBUSDFGKCJweSIsInB5IiwxMDAsLTUsNSk7DQogICBUSDFG
ICpoX3B6PSBuZXcgVEgxRigicHoiLCJweiIsMTAwLDAsMjApOw0KICAgVEgx
RiAqaF9yYW5kb209IG5ldyBUSDFGKCJyYW5kb20iLCJyYW5kb20iLDEwMCww
LDEpOw0KICAgVEgxRiAqaF9pPSBuZXcgVEgxRigiaSIsImkiLDEwMCwwLDMw
MDAwKTsNCiAgIFRIMkYgKmhfcHhwej0gbmV3IFRIMkYoInB4cHoiLCJweHB6
IiwxMDAsMCwyMCwxMDAsLTQsNCk7DQoNCiAgIFN0YXRfdCBuZW50cmllcyA9
IGZUcmVlLT5HZXRFbnRyaWVzKCk7DQoNCiAgIEludF90IG5ieXRlcyA9IDAs
IG5iID0gMDsNCiAgICAgZm9yIChJbnRfdCBsPTA7IGw8bmVudHJpZXM7bCsr
KSB7DQogICAgICAgIG5iID0gZlRyZWUtPkdldEV2ZW50KGwpOyAgIG5ieXRl
cyArPSBuYjsNCgloX3B4LT5GaWxsKHB4KCkpOw0KCWhfcHktPkZpbGwocHko
KSk7DQoJaF9wei0+RmlsbChweigpKTsNCgloX3JhbmRvbS0+RmlsbChyYW5k
b20oKSk7DQoJaF9pLT5GaWxsKGkoKSk7DQoJaF9weHB6LT5GaWxsKHB6KCks
cHgoKSk7DQogICAgIH0NCiAgICAgVENhbnZhcyAqYyA9IG5ldyBUQ2FudmFz
KCJjIik7DQogICAgIGMtPkRpdmlkZSgyLDMpOw0KICAgICBjLT5jZCgxKTsN
CiAgICAgaF9weC0+RHJhdygpOw0KICAgICBjLT5jZCgyKTsNCiAgICAgaF9w
eS0+RHJhdygpOw0KICAgICBjLT5jZCgzKTsNCiAgICAgaF9wei0+RHJhdygp
Ow0KICAgICBjLT5jZCg0KTsNCiAgICAgaF9yYW5kb20tPkRyYXcoKTsNCiAg
ICAgYy0+Y2QoNSk7DQogICAgIGhfaS0+RHJhdygpOw0KICAgICBjLT5jZCg2
KTsNCiAgICAgaF9weHB6LT5EcmF3KCk7DQp9DQoNCg==
---559023410-851401618-924116343=:9289
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990414205903.9289E@uranos.cto.us.edu.pl>
Content-Description: Makefile
U3JjU3VmICAgICAgICA9IGN4eA0KSW5jU3VmICAgICAgICA9IGhwcA0KDQpP
YmpTdWYgICAgICAgID0gbw0KRXhlU3VmICAgICAgICA9DQpEbGxTdWYgICAg
ICAgID0gc28NCk91dFB1dE9wdCAgICAgPSAtbw0KDQpST09UTElCUyAgICAg
ID0gLUwkKFJPT1RTWVMpL2xpYiAtbE5ldyAtbEJhc2UgLWxDaW50IC1sQ2xp
YiAtbENvbnQgLWxGdW5jIFwNCiAgICAgICAgICAgICAgICAtbEdyYWYgLWxH
cmFmM2QgLWxIaXN0IC1sSHRtbCAtbE1hdHJpeCAtbE1ldGEgLWxNaW51aXQg
LWxOZXQgXA0KICAgICAgICAgICAgICAgIC1sUGh5c2ljcyAtbFBvc3RzY3Jp
cHQgLWxQcm9vZiAtbFRyZWUgLWxVbml4IC1sWmlwDQpST09UR0xJQlMgICAg
ID0gLWxHcGFkIC1sR3VpIC1sR1gxMSAtbFgzZA0KDQojIExpbnV4IHdpdGgg
ZWdjcw0KRUdDUyAgICAgICAgICA9IC9vcHQvZWdjcy9wcm8NCkNYWCAgICAg
ICAgICAgPSBnKysNCkNYWEZMQUdTICAgICAgPSAtZyAtTzIgLVdhbGwgLWZu
by1ydHRpIC1mbm8tZXhjZXB0aW9ucyAtZlBJQyAtSSQoUk9PVFNZUykvaW5j
bHVkZQ0KTEQgICAgICAgICAgICA9IGcrKw0KTERGTEFHUyAgICAgICA9IC1n
IC1PMiAtV2wsLXJwYXRoLCQoRUdDUykvbGliOiQoUk9PVFNZUykvbGliDQpT
T0ZMQUdTICAgICAgID0gLXNoYXJlZA0KTElCUyAgICAgICAgICA9ICQoUk9P
VExJQlMpIC1sbSAtbGRsIC1yZHluYW1pYw0KR0xJQlMgICAgICAgICA9ICQo
Uk9PVExJQlMpICQoUk9PVEdMSUJTKSAtTC91c3IvWDExUjYvbGliIFwNCiAg
ICAgICAgICAgICAgICAtbFhwbSAtbFgxMSAtbG0gLWxkbCAtcmR5bmFtaWMN
Cg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCk5U
VVBMRU8gICAgICAgPSBudHVwbGUuJChPYmpTdWYpIG50dXBsZURpY3QuJChP
YmpTdWYpDQpOVFVQTEVTICAgICAgID0gbnR1cGxlLiQoU3JjU3VmKSBudHVw
bGVEaWN0LiQoU3JjU3VmKQ0KTlRVUExFU08gICAgICA9IG50dXBsZS4kKERs
bFN1ZikNCg0KT0JKUyAgICAgICAgICA9ICQoTlRVUExFTykNCg0KUFJPR1JB
TVMgICAgICA9ICQoTlRVUExFU08pDQoNCmFsbDogICAgICAgICAgICAkKFBS
T0dSQU1TKQ0KDQokKE5UVVBMRVNPKTogICAgJChOVFVQTEVPKQ0KCQkkKExE
KSAkKFNPRkxBR1MpICQoTERGTEFHUykgJChOVFVQTEVPKSAkKE91dFB1dE9w
dCkgJChOVFVQTEVTTykNCg0KY2xlYW46DQoJCUBybSAtZiAkKE9CSlMpICpE
aWN0LiogY29yZQ0KDQouU1VGRklYRVM6IC4kKFNyY1N1ZikNCg0KIyMjDQoN
Cm50dXBsZS4kKE9ialN1Zik6IG50dXBsZS4kKFNyY1N1ZikgbnR1cGxlLiQo
SW5jU3VmKQ0KbnR1cGxlRGljdC4kKFNyY1N1Zik6IG50dXBsZS4kKEluY1N1
ZikNCglAZWNobyAiR2VuZXJhdGluZyBkaWN0aW9uYXJ5IG50dXBsZURpY3Qu
Li4iDQoJQCQoUk9PVFNZUykvYmluL3Jvb3RjaW50IC1mIG50dXBsZURpY3Qu
JChTcmNTdWYpIC1jIG50dXBsZS4kKEluY1N1ZikNCg0KLiQoU3JjU3VmKS4k
KE9ialN1Zik6DQoJJChDWFgpICQoQ1hYRkxBR1MpIC1jICQ8DQo=
---559023410-851401618-924116343=:9289--