|
Boost-Build : |
From: Rene Rivera (grafik.list_at_[hidden])
Date: 2004-11-17 03:40:49
c_andy_martin wrote:
> --- In jamboost_at_[hidden], Rene Rivera <grafik.list_at_r...> wrote:
>
>>May I suggest Andy try with the BBv1 in the 1.32 tarballs.
>
> Sorry, I should have mentioned earlier, but I have been using the 1.32
After a long investigation, and much hair pulling, I found the "problem"
and hacked a solution.
The problem is a basic issue with the SEARCH capability of Jam. Simply
put it makes no distinction between files and directories. Which means
that it will match a directory to a header without question.
Unfortunately this is something that is not easy to fix in Jam itself.
Attached is a fix which does the search for headers "manually", and
hence can check and ignore directory matches. (replace the files from 1.32)
My brain is a few minutes from shutting down, it's 2.30am for me :-( If
anyone wants to take it upon themselves to merge this into the RC_1_32_0
branch, be my guest ;-)
Goodnight... Enjoy.
PS. If BBv2 uses SEARCH for header scanning it likely has the same issue.
-- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com - 102708583/icq --------------070906060407020908080708 Content-Type: text/plain; name="allyourbase.jam" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="allyourbase.jam" Iw0KIyAvK1wNCiMgK1wgICAgQ29weXJpZ2h0IDE5OTMsIDIwMDAgQ2hyaXN0b3BoZXIgU2Vp d2FsZC4NCiMgXCsvDQojDQojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEphbSAtIHNlZSBqYW0u YyBmb3IgQ29weXJpZ2h0IGluZm9ybWF0aW9uLg0KIw0KDQojIFRoaXMgZmlsZSBpcyBBTFNP Og0KIyAoQykgQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDEuDQojIERpc3RyaWJ1dGVk IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4NCiMgKFNl ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgaHR0cDovL3d3dy5ib29z dC5vcmcvTElDRU5TRV8xXzAudHh0KQ0KDQojDQojIEpBTUJBU0UgLSBqYW0gMi4zIHJ1bGVz ZXQgcHJvdmlkaW5nIG1ha2UoMSktbGlrZSBmdW5jdGlvbmFsaXR5DQojDQojIFN1cHBvcnRz IFVOSVgsIE5ULCBhbmQgVk1TLg0KIw0KIyAxMi8yNy85MyAoc2Vpd2FsZCkgLSBwdXJ0dXJi IGxpYnJhcnkgc291cmNlcyB3aXRoIFNPVVJDRV9HUklTVA0KIyAwNC8xOC85NCAoc2Vpd2Fs ZCkgLSB1c2UgJz89JyB3aGVuIHNldHRpbmcgT1Mgc3BlY2lmaWMgdmFycw0KIyAwNC8yMS85 NCAoc2Vpd2FsZCkgLSBkbyBSbVRlbXBzIHRvZ2V0aGVyDQojIDA1LzA1Lzk0IChzZWl3YWxk KSAtIGFsbCBzdXBwb3J0ZWQgQyBjb21waWxlcnMgc3VwcG9ydCAtbzogcmVsZWdhdGUNCiMg ICAgICAgICAgICAgICAgICAgICAgUkVMT0NBVEUgYXMgYW4gb3B0aW9uOyBzZXQgUmFubGli IHRvICIiIHRvIGRpc2FibGUgaXQNCiMgMDYvMDEvOTQgKHNlaXdhbGQpIC0gbmV3ICdhY3Rp b25zIGV4aXN0aW5nJyB0byBkbyBleGlzdGluZyBzb3VyY2VzDQojIDA4LzI1Lzk0IChzZWl3 YWxkKSAtIG5ldyBPYmplY3RDY0ZsYWdzIHJ1bGUgdG8gYXBwZW5kIHRvIHBlci10YXJnZXQg Q0NGTEFHUw0KIyAwOC8yOS85NCAoc2Vpd2FsZCkgLSBuZXcgT2JqZWN0SGRycyBydWxlIHRv IGFwcGVuZCB0byBwZXItdGFyZ2V0IEhEUlMNCiMgMDkvMTkvOTQgKHNlaXdhbGQpIC0gTGlu a0xpYnJhcmllcyBhbmQgVW5kZWZzIG5vdyBhcHBlbmQNCiMgICAgICAgICAgICAgICAgICAg IC0gUnVsZSBuYW1lcyBkb3duc2hpZnRlZC4NCiMgMTAvMDYvOTQgKHNlaXdhbGQpIC0gRHVt YiB5eWFjYyBzdHVmZiBtb3ZlZCBpbnRvIEphbWZpbGUuDQojIDEwLzE0Lzk0IChzZWl3YWxk KSAtIChDcnVkZSkgc3VwcG9ydCBmb3IgLnMsIC5DLCAuY2MsIC5jcHAsIGFuZCAuZiBmaWxl cy4NCiMgMDEvMDgvOTUgKHNlaXdhbGQpIC0gU2hlbGwgbm93IGhhbmRsZWQgd2l0aCBhd2ss IG5vdCBzZWQNCiMgMDEvMDkvOTUgKHNlaXdhbGQpIC0gSW5zdGFsbCogbm93IHRha2UgZGVz dCBkaXJlY3RvcnkgYXMgdGFyZ2V0DQojIDAxLzEwLzk1IChzZWl3YWxkKSAtIEFsbCBlbnRy aWVzIHNvcnRlZC4NCiMgMDEvMTAvOTUgKHNlaXdhbGQpIC0gTlQgc3VwcG9ydCBtb3ZlZCBp biwgd2l0aCBMYXVyYVcncyBoZWxwLiAgDQojIDAxLzEwLzk1IChzZWl3YWxkKSAtIFZNUyBz dXBwb3J0IG1vdmVkIGluLg0KIyAwMi8wNi85NSAoc2Vpd2FsZCkgLSBPYmplY3RDKytGbGFn cyBhbmQgU3ViRGlyQysrRmxhZ3MgYWRkZWQuDQojIDAyLzA3Lzk1IChzZWl3YWxkKSAtIEly b24gb3V0IHdoZW4gSERSU0VBUkNIIHVzZXMgIiIgb3IgU0VBUkNIX1NPVVJDRS4NCiMgMDIv MDgvOTUgKHNlaXdhbGQpIC0gU3ViRGlyIHdvcmtzIG9uIFZNUy4NCiMgMDIvMTQvOTUgKHNl aXdhbGQpIC0gTWtEaXIgYW5kIGVudG91cmFnZS4NCiMgMDQvMzAvOTUgKHNlaXdhbGQpIC0g VXNlIGluc3RhbGwgLWMgZmxhZyBzbyB0aGF0IGl0IGNvcGllcywgbm90IG1vdmVzLg0KIyAw Ny8xMC85NSAodGF5bG9yKSAtIFN1cHBvcnQgZm9yIE1pY3Jvc29mdCBDKysuDQojIDExLzIx Lzk2IChwZXRlcmspIC0gU3VwcG9ydCBmb3IgQmVPUw0KIyAwNy8xOS85OSAoc2lja2VsKSAt IFN1cHBvcnQgZm9yIE1hYyBPUyBYIFNlcnZlciAoYW5kIG1heWJlIGNsaWVudCkNCiMgMDIv MTgvMDAgKGJlbG1vbnRlKS0gU3VwcG9ydCBmb3IgQ3lnd2luLg0KDQojIFNwZWNpYWwgdGFy Z2V0cyBkZWZpbmVkIGluIHRoaXMgZmlsZToNCiMNCiMgYWxsICAgICAgICAgICAtIHBhcmVu dCBvZiBmaXJzdCwgc2hlbGwsIGZpbGVzLCBsaWIsIGV4ZQ0KIyBmaXJzdCAgICAgICAgIC0g Zmlyc3QgZGVwZW5kZW50IG9mICdhbGwnLCBmb3IgcG90ZW50aWFsIGluaXRpYWxpemF0aW9u DQojIHNoZWxsICAgICAgICAgLSBwYXJlbnQgb2YgYWxsIFNoZWxsIHRhcmdldHMgDQojIGZp bGVzICAgICAgICAgLSBwYXJlbnQgb2YgYWxsIEZpbGUgdGFyZ2V0cw0KIyBsaWIgICAgICAg ICAgIC0gcGFyZW50IG9mIGFsbCBMaWJyYXJ5IHRhcmdldHMNCiMgZXhlICAgICAgICAgICAt IHBhcmVudCBvZiBhbGwgTWFpbiB0YXJnZXRzDQojIGRpcnMgICAgICAgICAgLSBwYXJlbnQg b2YgYWxsIE1rRGlyIHRhcmdldHMNCiMgY2xlYW4gICAgICAgICAtIHJlbW92ZXMgYWxsIFNo ZWxsLCBGaWxlLCBMaWJyYXJ5LCBhbmQgTWFpbiB0YXJnZXRzDQojIHVuaW5zdGFsbCAgICAg LSByZW1vdmVzIGFsbCBJbnN0YWxsIHRhcmdldHMNCiMgICAgICAgDQoNCiMgUnVsZXMgZGVm aW5lZCBieSB0aGlzIGZpbGU6DQojDQojIGFzIG9iai5vIDogc291cmNlLnMgOyAgICAgICAg ICAgICAgICAgLnMgLT4gLm8NCiMgQnVsayBkaXIgOiBmaWxlcyA7ICAgICAgICAgICAgICAg ICAgICBwb3B1bGF0ZSBkaXJlY3Rvcnkgd2l0aCBtYW55IGZpbGVzDQojIENjIG9iai5vIDog c291cmNlLmMgOyAgICAgICAgICAgICAgICAgLmMgLT4gLm8NCiMgQysrIG9iai5vIDogc291 cmNlLmNjIDsgICAgICAgICAgICAgICAuY2MgLT4gLm8NCiMgQ2xlYW4gY2xlYW4gOiBzb3Vy Y2VzIDsgICAgICAgICAgICAgICByZW1vdmUgc291cmNlcyB3aXRoICdqYW0gY2xlYW4nDQoj IEZpbGUgZGVzdCA6IHNvdXJjZSA7ICAgICAgICAgICAgICAgICAgY29weSBmaWxlDQojIEZv cnRyYW4gb2JqLm8gOiBzb3VyY2UuZiA7ICAgICAgICAgICAgLmYgLT4gLm8NCiMgR2VuRmls ZSBzb3VyY2UuYyA6IHByb2dyYW0gYXJncyA7ICAgICBtYWtlIGN1c3RvbSBmaWxlDQojIEhh cmRsaW5rIHRhcmdldCA6IHNvdXJjZSA7ICAgICAgICAgICAgbWFrZSBsaW5rIGZyb20gc291 cmNlIHRvIHRhcmdldA0KIyBIZHJSdWxlIHNvdXJjZSA6IGhlYWRlcnMgOyAgICAgICAgICAg IGhhbmRsZSAjaW5jbHVkZXMNCiMgSW5zdGFsbEludG8gZGlyIDogc291cmNlcyA7ICAgICAg ICAgICBpbnN0YWxsIGFueSBmaWxlcw0KIyBJbnN0YWxsQmluIGRpciA6IHNvdXJjZXMgOyAg ICAgICAgICAgIGluc3RhbGwgYmluYXJpZXMNCiMgSW5zdGFsbExpYiBkaXIgOiBzb3VyY2Vz IDsgICAgICAgICAgICBpbnN0YWxsIGZpbGVzDQojIEluc3RhbGxGaWxlIGRpciA6IHNvdXJj ZXMgOyAgICAgICAgICAgaW5zdGFsbCBmaWxlcw0KIyBJbnN0YWxsTWFuIGRpciA6IHNvdXJj ZXMgOyAgICAgICAgICAgIGluc3RhbGwgbWFuIHBhZ2VzDQojIEluc3RhbGxTaGVsbCBkaXIg OiBzb3VyY2VzIDsgICAgICAgICAgaW5zdGFsbCBzaGVsbCBzY3JpcHRzDQojIExleCBzb3Vy Y2UuYyA6IHNvdXJjZS5sIDsgICAgICAgICAgICAgLmwgLT4gLmMNCiMgTGlicmFyeSBsaWIg OiBzb3VyY2UgOyAgICAgICAgICAgICAgICBhcmNoaXZlIGxpYnJhcnkgZnJvbSBjb21waWxl ZCBzb3VyY2VzDQojIExpYnJhcnlGcm9tT2JqZWN0cyBsaWIgOiBvYmplY3RzIDsgICAgYXJj aGl2ZSBsaWJyYXJ5IGZyb20gb2JqZWN0cw0KIyBMaW5rTGlicmFyaWVzIGltYWdlcyA6IGxp YnJhcmllcyA7ICAgIGJhZyBsaWJyYXJpZXMgb250byBNYWlucw0KIyBNYWluIGltYWdlIDog c291cmNlIDsgICAgICAgICAgICAgICAgIGxpbmsgZXhlY3V0YWJsZSBmcm9tIGNvbXBpbGVk IHNvdXJjZXMNCiMgTWFpbkZyb21PYmplY3RzIGltYWdlIDogb2JqZWN0cyA7ICAgICBsaW5r IGV4ZWN1dGFibGUgZnJvbSBvYmplY3RzDQojIE1rRGlyIGRpciA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFrZSBhIGRpcmVjdG9yeSwgaWYgbm90IHRoZXJlDQojIE9iamVjdCBv YmplY3QgOiBzb3VyY2UgOyAgICAgICAgICAgICAgY29tcGlsZSBvYmplY3QgZnJvbSBzb3Vy Y2UNCiMgT2JqZWN0Q2NGbGFncyBzb3VyY2UgOiBmbGFncyA7ICAgICAgICBhZGQgY29tcGls ZXIgZmxhZ3MgZm9yIG9iamVjdA0KIyBPYmplY3RDKytGbGFncyBzb3VyY2UgOiBmbGFncyA7 ICAgICAgIGFkZCBjb21waWxlciBmbGFncyBmb3Igb2JqZWN0DQojIE9iamVjdEhkcnMgc291 cmNlIDogZGlycyA7ICAgICAgICAgICAgYWRkIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIG9i amVjdA0KIyBPYmplY3RzIHNvdXJjZXMgOyAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUg c291cmNlcw0KIyBSbVRlbXBzIHRhcmdldCA6IHNvdXJjZXMgOyAgICAgICAgICAgIHJlbW92 ZSB0ZW1wIHNvdXJjZXMgYWZ0ZXIgdGFyZ2V0IG1hZGUNCiMgU2V0dWlkIGltYWdlcyA7ICAg ICAgICAgICAgICAgICAgICAgICBtYXJrIGV4ZWN1dGFibGVzIFNldHVpZA0KIyBTdWJEaXIg VE9QIGQxIGQyIC4uLiA7ICAgICAgICAgICAgICAgIHN0YXJ0IGEgc3ViZGlyZWN0b3J5IEph bWZpbGUNCiMgU3ViRGlyQ2NGbGFncyBmbGFncyA7ICAgICAgICAgICAgICAgICBhZGQgY29t cGlsZXIgZmxhZ3MgdW50aWwgbmV4dCBTdWJEaXINCiMgU3ViRGlyQysrRmxhZ3MgZmxhZ3Mg OyAgICAgICAgICAgICAgICBhZGQgY29tcGlsZXIgZmxhZ3MgdW50aWwgbmV4dCBTdWJEaXIN CiMgU3ViRGlySGRycyBkaXJzIDsgICAgICAgICAgICAgICAgICAgICBhZGQgaW5jbHVkZSBk aXJzIHVudGlsIG5leHQgU3ViRGlyDQojIFN1YkluY2x1ZGUgVE9QIGQxIGQyIC4uLiA7ICAg ICAgICAgICAgaW5jbHVkZSBhIHN1YmRpcmVjdG9yeSBKYW1maWxlDQojIFNoZWxsIGV4ZSA6 IHNvdXJjZSA7ICAgICAgICAgICAgICAgICAgbWFrZSBhIHNoZWxsIGV4ZWN1dGFibGUNCiMg VW5kZWZpbmVzIGltYWdlcyA6IHN5bWJvbHMgOyAgICAgICAgICBzYXZlIHVuZGVmJ3MgZm9y IGxpbmtpbmcNCiMgVXNlck9iamVjdCBvYmplY3QgOiBzb3VyY2UgOyAgICAgICAgICBoYW5k bGUgdW5rbm93biBzdWZmaXhlcyBmb3IgT2JqZWN0DQojIFlhY2Mgc291cmNlLmMgOiBzb3Vy Y2UueSA7ICAgICAgICAgICAgLnkgLT4gLmMNCiMNCiMgVXRpbGl0eSBydWxlcyB0aGF0IGhh dmUgbm8gc2lkZSBlZmZlY3RzIChub3Qgc3VwcG9ydGVkKToNCiMNCiMgRkFwcGVuZFN1ZmZp eCBmMSBmMiAuLi4gOiAkKFNVRikgOyAgICByZXR1cm4gJCg8KSB3aXRoIHN1ZmZpeGVzDQoj IGpvaW4gdmFsdWUgLi4uIDsgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhdGVuYXRl ZCB2YWx1ZXMNCiMgRkRpck5hbWUgZDEgZDIgLi4uIDsgICAgICAgICAgICAgICAgICByZXR1 cm4gcGF0aCBmcm9tIHJvb3QgdG8gZGlyDQojIEZHcmlzdCBkMSBkMiAuLi4gOyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGQxIWQyIS4uLg0KIyBGR3Jpc3RGaWxlcyB2YWx1ZSA7ICAg ICAgICAgICAgICAgICAgIHJldHVybiAkKHZhbHVlOkc9JChTT1VSQ0VfR1JJU1QpKQ0KIyBG R3Jpc3RTb3VyY2VGaWxlcyB2YWx1ZSA7ICAgICAgICAgICAgIHJldHVybiAkKHZhbHVlOkc9 JChTT1VSQ0VfR1JJU1QpKQ0KIyBGUmVsUGF0aCBkMSA6IGQyIDsgICAgICAgICAgICAgICAg ICAgIHJldHVybiByZWwgcGF0aCBmcm9tIGQxIHRvIGQyDQojIEZTdWJEaXIgZDEgZDIgLi4u IDsgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGggdG8gcm9vdA0KIw0KDQoNCiMgQnJp ZWYgcmV2aWV3IG9mIHRoZSBqYW0gbGFuZ3VhZ2U6DQojDQojIFN0YXRlbWVudHM6DQojICAg ICAgIHJ1bGUgUlVMRSAtIHN0YXRlbWVudHMgdG8gcHJvY2VzcyBhIHJ1bGUNCiMgICAgICAg YWN0aW9ucyBSVUxFIC0gc3lzdGVtIGNvbW1hbmRzIHRvIGNhcnJ5IG91dCB0YXJnZXQgdXBk YXRlDQojDQojIE1vZGlmaWVycyBvbiBhY3Rpb25zOg0KIyAgICAgICB0b2dldGhlciAtIG11 bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIHJ1bGUgb24gdGFyZ2V0IGdldCBleGVjdXRlZA0K IyAgICAgICAgICAgICAgICAgIG9uY2Ugd2l0aCB0aGVpciBzb3VyY2VzICgkKD4pKSBjb25j YXRlbmF0ZWQNCiMgICAgICAgdXBkYXRlZCAtIHJlZmVycyB0byB1cGRhdGVkIHNvdXJjZXMg KCQoPikpIG9ubHkNCiMgICAgICAgaWdub3JlIC0gaWdub3JlIHJldHVybiBzdGF0dXMgb2Yg Y29tbWFuZA0KIyAgICAgICBxdWlldGx5IC0gZG9uJ3QgdHJhY2UgaXRzIGV4ZWN1dGlvbiB1 bmxlc3MgdmVyYm9zZQ0KIyAgICAgICBwaWVjZW1lYWwgLSBpdGVyYXRlIGNvbW1hbmQgZWFj aCB0aW1lIHdpdGggYSBzbWFsbCBzdWJzZXQgb2YgJCg+KQ0KIyAgICAgICBleGlzdGluZyAt IHJlZmVycyB0byBjdXJyZW50bHkgZXhpc3Rpbmcgc291cmNlcyAoJCg+KSkgb25seQ0KIyAg ICAgICBiaW5kIHZhcnMgLSBzdWJqZWN0IHRvIGJpbmRpbmcgYmVmb3JlIGV4cGFuZGluZyBp biBhY3Rpb25zDQojDQojIFNwZWNpYWwgcnVsZXM6DQojICAgICAgIEFMV0FZUyAtIGFsd2F5 cyBidWlsZCBhIHRhcmdldA0KIyAgICAgICBERVBFTkRTIC0gYnVpbGRzIHRoZSBkZXBlbmRl bmN5IGdyYXBoDQojICAgICAgIEVDSE8gLSBibHVydCBvdXQgdGFyZ2V0cyBvbiBzdGRvdXQN CiMgICAgICAgRVhJVCAtIGJsdXJ0IG91dCB0YXJnZXRzIGFuZCBleGl0DQojICAgICAgIElO Q0xVREVTIC0gbWFya3Mgc291cmNlcyBhcyBoZWFkZXJzIGZvciB0YXJnZXQgKGEgY29kZXBl bmRlbmN5KQ0KIyAgICAgICBOT0NBUkUgLSBkb24ndCBwYW5pYyBpZiB0aGUgdGFyZ2V0IGNh bid0IGJlIGJ1aWx0DQojICAgICAgIE5PVVBEQVRFIC0gY3JlYXRlIHRoZSB0YXJnZXQgaWYg bmVlZGVkIGJ1dCBuZXZlciB1cGRhdGUgaXQgDQojICAgICAgIE5PVEZJTEUgLSBpZ25vcmUg dGhlIHRpbWVzdGFtcCBvZiB0aGUgdGFyZ2V0IChpdCdzIG5vdCBhIGZpbGUpDQojICAgICAg IFRFTVBPUkFSWSAtIHRhcmdldCBuZWVkIG5vdCBiZSBwcmVzZW50IGlmIHNvdXJjZXMgaGF2 ZW4ndCBjaGFuZ2VkDQojDQojIFNwZWNpYWwgdmFyaWFibGVzIHNldCBieSBqYW06DQojICAg ICAgICQoPCkgLSB0YXJnZXRzIG9mIGEgcnVsZSAodG8gdGhlIGxlZnQgb2YgdGhlIDopDQoj ICAgICAgICQoPikgLSBzb3VyY2VzIG9mIGEgcnVsZSAodG8gdGhlIHJpZ2h0IG9mIHRoZSA6 KQ0KIyAgICAgICAkKHh4eCkgLSB0cnVlIG9uIHh4eCAoVU5JWCwgVk1TLCBOVCwgT1MyLCBN QUMpDQojICAgICAgICQoT1MpIC0gbmFtZSBvZiBPUyAtIHZhcmllcyB3aWxkbHkNCiMgICAg ICAgJChKQU1WRVJTSU9OKSAtIHZlcnNpb24gbnVtYmVyICgyLjMpDQojDQojIFNwZWNpYWwg dmFyaWFibGVzIHVzZWQgYnkgamFtOg0KIyAgICAgICBTRUFSQ0ggLSB3aGVyZSB0byBmaW5k IHNvbWV0aGluZyAodXNlZCBkdXJpbmcgYmluZGluZyBhbmQgYWN0aW9ucykNCiMgICAgICAg TE9DQVRFIC0gd2hlcmUgdG8gcGxvcCBzb21ldGhpbmcgbm90IGZvdW5kIHdpdGggU0VBUkNI DQojICAgICAgIEhEUlJVTEUgLSBydWxlIHRvIGNhbGwgdG8gaGFuZGxlIGluY2x1ZGUgZmls ZXMNCiMgICAgICAgSERSU0NBTiAtIGVncmVwIHJlZ2V4IHRvIGV4dHJhY3QgaW5jbHVkZSBm aWxlcw0KIw0KIyBTcGVjaWFsIHRhcmdldHM6DQojICAgICAgIGFsbCAtIGRlZmF1bHQgaWYg bm9uZSBnaXZlbiBvbiBjb21tYW5kIGxpbmUNCiMNCg0KIyBJbml0aWFsaXplIHZhcmlhYmxl cw0KIw0KDQojDQojIE9TIHNwZWNpZmljIHZhcmlhYmxlIHNldHRpbmdzDQojDQoNCiMgZHdh IDYvNC8wMSAtIHJlbW92ZWQgYWxsIHNldHRpbmdzIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFi bGVzIGZvciBib29zdDoNCiMgICBDQywgQ0NGTEFHUywgQysrLCBDKytGTEFHUywgTElOSywg TElOS0ZMQUdTLCBMSU5LTElCUw0KIyBwcm9iYWJseSBhIGxvdCBtb3JlIGNvdWxkIGJlIGNs ZWFyZWQgYXdheQ0KDQppZiAkKE5UKQ0Kew0KICAgIENQICAgICAgICAgICAgICA/PSBjb3B5 IDsNCiAgICBSTSAgICAgICAgICAgICAgPz0gZGVsIC9mL3EgOw0KICAgIFNMQVNIICAgICAg ICAgICA/PSBcXCA7DQogICAgU1BMSVRQQVRIICAgICAgID89ICI7IiA7ICMgZHdhIC0tIGFk ZGVkIG1pc3NpbmcgU1BMSVRQQVRIDQogICAgU1VGTElCICAgICAgICAgID89IC5saWIgOw0K ICAgIFNVRk9CSiAgICAgICAgICA/PSAub2JqIDsNCiAgICBTVUZFWEUgICAgICAgICAgPz0g LmV4ZSA7DQogICAgU1VGRExMICAgICAgICAgID89IC5kbGwgLmxpYiA7DQogICAgZ0xJTktf VkFSSUFCTEUoLmRsbCkgPSA7ICAgICAgICAgICAgICMgZGxscyBhcmUgTk9UIGxpbmtlZCB0 byBkaXJlY3RseQ0KICAgIGdMSU5LX1ZBUklBQkxFKC5saWIpID0gTkVFRExJQlMgOyAgICAj IGluc3RlYWQsIHVzZXJzIGxpbmsgdG8gaW1wb3J0IGxpYnMNCiAgICBQUkVETEwgICAgICAg ICAgPz0gIiIgOw0KICAgIE5PQVJTQ0FOICAgICAgICA/PSB0cnVlIDsNCiAgICBTSEVMTF9F WFBPUlQgICAgPz0gOw0KICAgIFNIRUxMX1NFVCAgICAgICA/PSAic2V0ICIgOw0KICAgIA0K ICAgICMgZHdhIDYvNC8wMSAtIHJlbW92ZWQgY29tcGlsZXIgZGV0ZXJtaW5hdGlvbiBmb3Ig Ym9vc3QNCiAgICAjIGFkZGVkIHNvbWUgeWFjYy9sZXggc3R1ZmYsIGFzc3VtaW5nIGN5Z3dp biBmb3Igbm93Lg0KICAgIExFWCAgICAgICAgICAgICA/PSBmbGV4IDsNCiAgICBZQUNDICAg ICAgICAgICAgPz0gYmlzb24gLXkgOw0KICAgIFlBQ0NGSUxFUyAgICAgICA/PSB5LnRhYiA7 DQogICAgWUFDQ19PVVRQVVQgICAgID89IC0tb3V0cHV0PSA7DQogICAgTEVYX09VVFBVVCAg ICAgID89IC1vIDsNCiAgICANCiAgICBMTiAgICAgICAgICAgICAgPz0gJChDUCkgOw0KICAg IE5VTExfT1VUICAgICAgICA/PSA+TlVMOiA7DQp9DQplbHNlIGlmICQoT1MyKQ0Kew0KICAg IFdBVENPTSAgICAgICAgICA/PSAkKHdhdGNvbSkgOw0KDQogICAgaWYgISAkKFdBVENPTSkN CiAgICB7DQogICAgICAgIEVYSVQgT24gT1MyLCBzZXQgV0FUQ09NIHRvIHRoZSByb290IG9m IHRoZSBXYXRjb20gZGlyZWN0b3J5LiA7DQogICAgfQ0KDQogICAgQVIgICAgICAgICAgICAg ID89IHdsaWIgOw0KICAgIEJJTkRJUiAgICAgICAgICA/PSBcXG9zMlxcYXBwcyA7DQogICAg Q1AgICAgICAgICAgICAgID89IGNvcHkgOw0KICAgIERPVCAgICAgICAgICAgICA/PSAuIDsN CiAgICBET1RET1QgICAgICAgICAgPz0gLi4gOw0KICAgIE1WICAgICAgICAgICAgICA/PSBt b3ZlIDsNCiAgICBOT0FSU0NBTiAgICAgICAgPz0gdHJ1ZSA7DQogICAgT1BUSU0gICAgICAg ICAgID89IDsNCiAgICBSTSAgICAgICAgICAgICAgPz0gZGVsIC9mIDsNCiAgICBTTEFTSCAg ICAgICAgICAgPz0gXFwgOw0KICAgIFNQTElUUEFUSCAgICAgICA/PSAiOyIgOyAjIGR3YSAt LSBhZGRlZCBtaXNzaW5nIFNQTElUUEFUSA0KICAgIFNUREhEUlMgICAgICAgICA/PSAkKFdB VENPTSlcXGggOw0KICAgIFNVRkVYRSAgICAgICAgICA/PSAuZXhlIDsNCiAgICBTVUZMSUIg ICAgICAgICAgPz0gLmxpYiA7DQogICAgU1VGT0JKICAgICAgICAgID89IC5vYmogOw0KICAg IFVOREVGRkxBRyAgICAgICA/PSAiL3UgXyIgOw0KDQp9DQplbHNlIGlmICQoVk1TKQ0Kew0K ICAgIENITU9EICAgICAgICAgICA/PSBzZXQgZmlsZS9wcm90PSA7DQogICAgQ1AgICAgICAg ICAgICAgID89IGNvcHkvcmVwbGFjZSA7DQogICAgQ1JFTElCICAgICAgICAgID89IHRydWUg Ow0KICAgIERPVCAgICAgICAgICAgICA/PSBbXSA7DQogICAgRE9URE9UICAgICAgICAgID89 IFstXSA7DQogICAgRVhFTU9ERSAgICAgICAgID89ICh3OmUpIDsNCiAgICBGSUxFTU9ERSAg ICAgICAgPz0gKHc6cikgOw0KICAgIEhEUlMgICAgICAgICAgICA/PSA7DQogICAgTUtESVIg ICAgICAgICAgID89IGNyZWF0ZS9kaXIgOw0KICAgIE1WICAgICAgICAgICAgICA/PSByZW5h bWUgOw0KICAgIE9QVElNICAgICAgICAgICA/PSAiIiA7DQogICAgUk0gICAgICAgICAgICAg ID89IGRlbGV0ZSA7DQogICAgUlVOVk1TICAgICAgICAgID89IG1jciA7DQogICAgU0hFTExN T0RFICAgICAgID89ICh3OmVyKSA7DQogICAgU0xBU0ggICAgICAgICAgID89IC4gOw0KICAg IFNUREhEUlMgICAgICAgICA/PSBkZWNjJGxpYnJhcnlfaW5jbHVkZSA7DQogICAgU1VGRVhF ICAgICAgICAgID89IC5leGUgOw0KICAgIFNVRkxJQiAgICAgICAgICA/PSAub2xiIDsNCiAg ICBTVUZPQkogICAgICAgICAgPz0gLm9iaiA7DQoNCiAgICBzd2l0Y2ggJChPUykgDQogICAg ew0KICAgIGNhc2UgVk1TICAgICA6IExJTktMSUJTID89IHN5cyRsaWJyYXJ5OnZheGNydGwu b2xiL2xpYiA7DQogICAgfQ0KfQ0KZWxzZSBpZiAkKE1BQykNCnsNCiAgICBsb2NhbCBPUFQg Ow0KDQogICAgQ1cgICAgICA/PSAie0NXfSIgOw0KDQogICAgTUFDSERSUyA/PQ0KICAgICAg ICAgICAgIiQoVU1BQ0hEUlMpOlVuaXZlcnNhbDpJbnRlcmZhY2VzOkNJbmNsdWRlcyINCiAg ICAgICAgICAgICIkKENXKTpNU0w6TVNMX0M6TVNMX0NvbW1vbjpJbmNsdWRlIg0KICAgICAg ICAgICAgIiQoQ1cpOk1TTDpNU0xfQzpNU0xfTWFjT1M6SW5jbHVkZSIgOw0KDQogICAgTUFD TElCUyA/PQ0KICAgICAgICAgICAgIiQoQ1cpOk1hY09TIFN1cHBvcnQ6VW5pdmVyc2FsOkxp YnJhcmllczpTdHViTGlicmFyaWVzOkludGVyZmFjZWxpYiINCiAgICAgICAgICAgICIkKENX KTpNYWNPUyBTdXBwb3J0OlVuaXZlcnNhbDpMaWJyYXJpZXM6U3R1YkxpYnJhcmllczpNYXRo bGliIiA7DQoNCiAgICBNUFdMSUJTID89IA0KICAgICAgICAgICAgIiQoQ1cpOk1hY09TIFN1 cHBvcnQ6TGlicmFyaWVzOlJ1bnRpbWU6UnVudGltZSBQUEM6TVNMIE1QV0NSdW50aW1lLmxp YiINCiAgICAgICAgICAgICIkKENXKTpNU0w6TVNMX0M6TVNMX01hY09TOkxpYjpQUEM6TVNM IEMuUFBDIE1QVy5MaWIiIDsNCg0KICAgIE1QV05MTElCUyA/PSANCiAgICAgICAgICAgICIk KENXKTpNYWNPUyBTdXBwb3J0OkxpYnJhcmllczpSdW50aW1lOlJ1bnRpbWUgUFBDOk1TTCBN UFdDUnVudGltZS5saWIiDQogICAgICAgICAgICAiJChDVyk6TVNMOk1TTF9DOk1TTF9NYWNP UzpMaWI6UFBDOk1TTCBDLlBQQyBNUFcoTkwpLkxpYiIgOw0KDQogICAgU0lPVVhIRFJTID89 IDsNCg0KICAgIFNJT1VYTElCUyA/PSANCiAgICAgICAgICAgICIkKENXKTpNYWNPUyBTdXBw b3J0OkxpYnJhcmllczpSdW50aW1lOlJ1bnRpbWUgUFBDOk1TTCBSdW50aW1lUFBDLmxpYiIN CiAgICAgICAgICAgICIkKENXKTpNU0w6TVNMX0M6TVNMX01hY09TOkxpYjpQUEM6TVNMIFNJ T1VYLlBQQy5MaWIiIA0KICAgICAgICAgICAgIiQoQ1cpOk1TTDpNU0xfQzpNU0xfTWFjT1M6 TGliOlBQQzpNU0wgQy5QUEMuTGliIiA7DQoNCiAgICBDUCAgICAgICAgICAgICAgPz0gZHVw bGljYXRlIC15IDsNCiAgICBET1QgICAgICAgICAgICAgPz0gIjoiIDsNCiAgICBET1RET1Qg ICAgICAgICAgPz0gIjo6IiA7DQogICAgSERSUyAgICAgICAgICAgID89ICQoTUFDSERSUykg JChNUFdIRFJTKSA7DQogICAgTUtESVIgICAgICAgICAgID89IG5ld2ZvbGRlciA7DQogICAg TVYgICAgICAgICAgICAgID89IHJlbmFtZSAteSA7DQogICAgTk9BUlNDQU4gICAgICAgID89 IHRydWUgOw0KICAgIE9QVElNICAgICAgICAgICA/PSA7DQogICAgUk0gICAgICAgICAgICAg ID89IGRlbGV0ZSAteSA7DQogICAgU0xBU0ggICAgICAgICAgID89ICI6IiA7DQogICAgU1RE SERSUyAgICAgICAgID89IDsgDQogICAgU1VGTElCICAgICAgICAgID89IC5saWIgOw0KICAg IFNVRk9CSiAgICAgICAgICA/PSAubyA7DQp9DQplbHNlIGlmICQoT1MpID0gQkVPUyAmJiAk KE1FVFJPV0VSS1MpDQp7DQogICAgQVIgICAgICAgICAgICAgID89IG13bGQgLXhtbCAtbyA7 DQogICAgQklORElSICAgICAgICAgID89IC9ib290L2FwcHMgOw0KICAgIEZPUlRSQU4gICAg ICAgICA/PSAiIiA7DQogICAgTElCRElSICAgICAgICAgID89IC9ib290L2RldmVsb3AvbGli cmFyaWVzIDsNCiAgICBNQU5ESVIgICAgICAgICAgPz0gL2Jvb3QvZG9jdW1lbnRhdGlvbi8i U2hlbGwgVG9vbHMiL0hUTUwgOw0KICAgIE5PQVJTQ0FOICAgICAgICA/PSB0cnVlIDsNCiAg ICBTVERIRFJTICAgICAgICAgPz0gL2Jvb3QvZGV2ZWxvcC9oZWFkZXJzL3Bvc2l4IDsNCn0N CmVsc2UgaWYgJChPUykgPSBCRU9TIA0Kew0KICAgIEJJTkRJUiAgICAgICAgICA/PSAvYm9v dC9hcHBzIDsNCiAgICBGT1JUUkFOICAgICAgICAgPz0gIiIgOw0KICAgIExJQkRJUiAgICAg ICAgICA/PSAvYm9vdC9kZXZlbG9wL2xpYnJhcmllcyA7DQogICAgTk9BUlNDQU4gICAgICAg ID89IHRydWUgOw0KICAgIFNUREhEUlMgICAgICAgICA/PSAvYm9vdC9kZXZlbG9wL2hlYWRl cnMvcG9zaXggOw0KfQ0KZWxzZSBpZiAkKFVOSVgpDQp7DQogICAgc3dpdGNoICQoT1MpDQog ICAgew0KICAgIGNhc2UgQUlYIDoNCiAgICAgICAgSU1QTElCX0ZMQUdTICAgID89IC1iSTog Ow0KICAgICAgICBTVUZETEwgICAgICAgICAgPz0gLnNvIDsNCiAgICAgICAgZ0xJTktfVkFS SUFCTEUoLnNvKSA9IE5FRURMSUJTIDsgICMgc2hhcmVkIGxpYnMgc2hvdWxkIGJlIGFkZGVk IHRvIHRoZSBsaXN0IG9mIGxpYnMgbmVlZGVkDQogICAgICAgIGdMSU5LX1ZBUklBQkxFKC5p bXApID0gTkVFRElNUFMgOyAjIGltcG9ydCBsaWJzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHku DQogICAgICAgIGdTSEVMTF9MSUJQQVRIID0gTElCUEFUSCA7DQogICAgICAgIA0KICAgIGNh c2UgQU1JR0EgOg0KICAgICAgICBZQUNDICAgICAgICAgICAgPz0gYmlzb24gLXkgOw0KDQog ICAgY2FzZSBDWUdXSU4gOiAgICAgICANCiAgICAgICAgTEVYICAgICAgICAgICAgID89IGZs ZXggOw0KICAgICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KICAgICAgICBTVUZFWEUg ICAgICAgICAgPz0gLmV4ZSA7DQogICAgICAgIFlBQ0MgICAgICAgICAgICA/PSBiaXNvbiAt eSA7DQogICAgICAgIE1LRElSICAgICAgICAgICA/PSBta2RpciAtcCA7DQogICAgICAgIFNV RkRMTCAgICAgICAgICA/PSAuZGxsIDsNCg0KICAgIGNhc2UgREdVWCA6DQogICAgICAgIFJB TkxJQiAgICAgICAgICA/PSAiIiA7DQogICAgICAgIFJFTE9DQVRFICAgICAgICA/PSB0cnVl IDsNCg0KICAgIGNhc2UgSFBVWCA6DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/PSAiIiA7 DQoNCiAgICBjYXNlIElOVEVSSVggOg0KICAgICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIg Ow0KDQogICAgY2FzZSBJUklYIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsN Cg0KICAgIGNhc2UgTElOVVggOg0KICAgICAgICBDTE9ORSAgICAgICAgICAgPz0gY3AgLWZw ZCA7DQoNCiAgICBjYXNlIE1QRUlYIDoNCiAgICAgICAgSERSUyAgICAgICAgICAgICs9IC91 c3IvaW5jbHVkZSA7DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/PSAiIiA7IA0KICAgICAg ICBOT0FSU0NBTiAgICAgICAgPz0gdHJ1ZSA7DQogICAgICAgIE5PQVJVUERBVEUgICAgICA/ PSB0cnVlIDsNCg0KICAgIGNhc2UgTVZTIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89 ICIiIDsgDQoNCiAgICBjYXNlIE5FWFQgOg0KICAgICAgICBBUiAgICAgICAgICAgICAgPz0g bGlidG9vbCAtbyA7DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/PSAiIiA7DQoNCiAgICBj YXNlIE1BQ09TWCA6DQogICAgICAgIE1BTkRJUiAgICAgICAgICA/PSAvdXNyL2xvY2FsL3No YXJlL21hbiA7DQogICAgICAgIFNVRkRMTCAgICAgICAgICA/PSAuZHlsaWIgOw0KICAgICAg ICBnU0hFTExfTElCUEFUSCAgPz0gRFlMRF9MSUJSQVJZX1BBVEggOw0KICAgICAgICBOT0FS U0NBTiAgICAgICAgPz0gdHJ1ZSA7DQoNCiAgICBjYXNlIE5DUiA6DQogICAgICAgIFJBTkxJ QiAgICAgICAgICA/PSAiIiA7DQoNCiAgICBjYXNlIFBUWCA6DQogICAgICAgIFJBTkxJQiAg ICAgICAgICA/PSAiIiA7DQoNCiAgICBjYXNlIFFOWCA6DQogICAgICAgIEFSICAgICAgICAg ICAgICA/PSB3bGliIDsNCiAgICAgICAgTk9BUlNDQU4gICAgICAgID89IHRydWUgOw0KICAg ICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KDQogICAgY2FzZSBTQ08gOg0KICAgICAg ICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KICAgICAgICBSRUxPQ0FURSAgICAgICAgPz0g dHJ1ZSA7DQoNCiAgICBjYXNlIFNJTklYIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89 ICIiIDsNCg0KICAgIGNhc2UgU09MQVJJUyA6DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/ PSAiIiA7DQogICAgICAgIEFSICAgICAgICAgICAgICA/PSAiL3Vzci9jY3MvYmluL2FyIHJ1 IiA7DQoNCiAgICBjYXNlIFVOSUNPUyA6DQogICAgICAgIE5PQVJTQ0FOICAgICAgICA/PSB0 cnVlIDsNCiAgICAgICAgT1BUSU0gICAgICAgICAgID89IC1PMCA7DQoNCiAgICBjYXNlIFVO SVhXQVJFIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsNCiAgICAgICAgUkVM T0NBVEUgICAgICAgID89IHRydWUgOw0KDQogICAgY2FzZSBPU0YgOg0KICAgICAgICBnTElO S19WQVJJQUJMRSguc28pID0gTkVFRExJQlMgOyAjIHNoYXJlZCBvYmplY3RzIHNob3VsZCBi ZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBsaWJzIG5lZWRlZA0KICAgIH0NCg0KICAgICMgVU5J WCBkZWZhdWx0cw0KICAgIENITU9EICAgICAgICAgICA/PSBjaG1vZCA7DQogICAgTEVYICAg ICAgICAgICAgID89IGxleCA7DQogICAgT1BUSU0gICAgICAgICAgID89IC1PIDsNCiAgICBS QU5MSUIgICAgICAgICAgPz0gcmFubGliIDsNCiAgICBZQUNDICAgICAgICAgICAgPz0geWFj YyA7DQogICAgWUFDQ0ZJTEVTICAgICAgID89IHkudGFiIDsNCiAgICBZQUNDRkxBR1MgICAg ICAgPz0gLWQgOw0KICAgIFNIRUxMX0VYUE9SVCAgICA/PSAiZXhwb3J0ICIgOw0KICAgIFNI RUxMX1NFVCAgICAgICA/PSAiIiA7DQogICAgZ1NIRUxMX0xJQlBBVEggID89IExEX0xJQlJB UllfUEFUSCA7DQogICAgQklORElSICAgICAgICAgID89IC91c3IvbG9jYWwvYmluIDsNCiAg ICBMSUJESVIgICAgICAgICAgPz0gL3Vzci9sb2NhbC9saWIgOw0KICAgIE1BTkRJUiAgICAg ICAgICA/PSAvdXNyL2xvY2FsL21hbiA7DQogICAgU1RESERSUyAgICAgICAgID89IC91c3Iv aW5jbHVkZSA7DQp9DQogICAgDQojDQojIEdlbmVyYWwgZGVmYXVsdHM7IGEgbG90IGxpa2Ug VU5JWA0KIw0KDQpBUiAgICAgICAgICAgICAgPz0gYXIgcnUgOw0KQVMgICAgICAgICAgICAg ID89IGFzIDsNCkFTRkxBR1MgICAgICAgICA/PSA7DQpBV0sgICAgICAgICAgICAgPz0gYXdr IDsNCkJJTkRJUiAgICAgICAgICA/PSA7DQpDTE9ORSAgICAgICAgICAgPz0gJChDUCkgOw0K Q0xPTkUgICAgICAgICAgID89IGNwIC1mcCA7DQpDUCAgICAgICAgICAgICAgPz0gY3AgLWYg Ow0KQ1JFTElCICAgICAgICAgID89IDsNCkRPVCAgICAgICAgICAgICA/PSAuIDsNCkRPVERP VCAgICAgICAgICA/PSAuLiA7DQpFWEVNT0RFICAgICAgICAgPz0gNzExIDsNCkRMTE1PREUg ICAgICAgICA/PSA3NTUgOw0KRklMRU1PREUgICAgICAgID89IDY0NCA7DQpGT1JUUkFOICAg ICAgICAgPz0gZjc3IDsNCkZPUlRSQU5GTEFHUyAgICA/PSA7DQpIRFJTICAgICAgICAgICAg Pz0gOw0KSkFNRklMRSAgICAgICAgID89IEphbWZpbGUgOw0KSkFNUlVMRVMgICAgICAgID89 IEphbXJ1bGVzIDsNCkxFWCAgICAgICAgICAgICA/PSA7DQpMSUJESVIgICAgICAgICAgPz0g Ow0KTE4gICAgICAgICAgICAgID89IGxuIDsNCk1BTkRJUiAgICAgICAgICA/PSA7DQpNS0RJ UiAgICAgICAgICAgPz0gbWtkaXIgOw0KTVYgICAgICAgICAgICAgID89IG12IC1mIDsNCk9Q VElNICAgICAgICAgICA/PSA7DQpSQ1AgICAgICAgICAgICAgPz0gcmNwIDsNClJNICAgICAg ICAgICAgICA/PSBybSAtZiA7DQpSU0ggICAgICAgICAgICAgPz0gcnNoIDsNClNFRCAgICAg ICAgICAgICA/PSBzZWQgOw0KU0hFTExIRUFERVIgICAgID89ICIjIS9iaW4vc2giIDsNClNI RUxMTU9ERSAgICAgICA/PSA3NTUgOw0KU0hFTExfRVhQT1JUICAgID89IDsNClNIRUxMX1NF VCAgICAgICA/PSAiIiA7DQpTTEFTSCAgICAgICAgICAgPz0gLyA7DQpTUExJVFBBVEggICAg ICAgPz0gIjoiIDsgIyBkd2EgLS0gYWRkZWQgbWlzc2luZyBTUExJVFBBVEgNClNUREhEUlMg ICAgICAgICA/PSA7DQpTVUZFWEUgICAgICAgICAgPz0gIiIgOw0KU1VGRExMICAgICAgICAg ID89IC5zbyA7DQpTVUZMSUIgICAgICAgICAgPz0gLmEgOw0KU1VGT0JKICAgICAgICAgID89 IC5vIDsNClBSRURMTCAgICAgICAgICA/PSBsaWIgOw0KUFJFTElCICAgICAgICAgID89IGxp YiA7DQpVTkRFRkZMQUcgICAgICAgPz0gIi11IF8iIDsNCllBQ0MgICAgICAgICAgICA/PSA7 DQpZQUNDRklMRVMgICAgICAgPz0gOw0KWUFDQ0ZMQUdTICAgICAgID89IDsNCkJJTl9ESVJF Q1RPUlkgICA/PSBiaW4gOw0KDQojfiBIRFJQQVRURVJOID0gDQogICAgICAgICN+ICJeWyAg ICAgXSojWyAgICBdKmluY2x1ZGVbICAgICAgXSooWzxcIl1bXlwiPl0qW1wiPl0pLiokIiA7 DQpIRFJQQVRURVJOID0gDQogICAgICAgICJeWyAJXSojWyAJXSppbmNsdWRlWyAJXSooWzxc Il1bXlwiPl0qW1wiPl0pLiokIiA7DQogICAgICAgICAgDQojIiBNeSBKYW0gbW9kZSBnZXRz IGl0cyBzeW50YXggaGlnaGxpZ2h0aW5nIGNvbmZ1c2VkIHdpdGhvdXQgdGhpcyBjb21tZW50 DQoNCk9TRlVMTCA9ICQoT1MpJChPU1ZFUikkKE9TUExBVCkgJChPUykkKE9TUExBVCkgJChP UykkKE9TVkVSKSAkKE9TKSA7DQoNCiMNCiMgUnVsZSB0byBhdXRvbWF0ZSBwYXRjaGluZyBv ZiBzaW5nbGV0b24gdmFyaWFibGVzIGZyb20gdGhlIHVzZXIgc28gdGhhdA0KIyB0aGV5IGFy ZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgZW50cnkgaW5zdGVhZCBvZiBh cyBhIGxpc3QgaWYNCiMgdGhleSBoYXBwZW4gdG8gY29udGFpbiBzcGFjZXMuDQojDQojIFRo aXMgYWxzbyByZW1lbWJlcnMgdGhlIGZpcnN0KGdsb2JhbCkgdmFsdWUgc28gdGhhdCBpdCBj YW4gYmUgcmVzZXQNCiMgd2hlbiBjbGVhcmVkLCBidXQgdXNlZCBhZ2Fpbi4NCiMNCnJ1bGUg c2V0LWFzLXNpbmdsZXRvbiAoIHZhcmlhYmxlcyArICkNCnsNCiAgICBmb3IgbG9jYWwgdmFy aWFibGUgaW4gJCh2YXJpYWJsZXMpDQogICAgew0KICAgICAgICAkKHZhcmlhYmxlKSA9ICQo JCh2YXJpYWJsZSk6Sj0iICIpIDsNCiAgICAgICAgI34gaWYgISAkKGdTSU5HTEVUT05fU0VU KCQodmFyaWFibGUpKSkNCiAgICAgICAgI34gew0KICAgICAgICAgICAgI34gZ1NJTkdMRVRP TigkKHZhcmlhYmxlKSkgPSAkKCQodmFyaWFibGUpKSA7DQogICAgICAgICAgICAjfiBnU0lO R0xFVE9OX1NFVCgkKHZhcmlhYmxlKSkgPSB0cnVlIDsNCiAgICAgICAgI34gfQ0KICAgICAg ICAjfiAkKHZhcmlhYmxlKSA/PSAkKGdTSU5HTEVUT04oJCh2YXJpYWJsZSkpKSA7DQogICAg fQ0KfQ0KDQojDQojICJGaXgiIHRoZSBrbm93biBwb3NzaWJseSBkaXJlY3RvcnkgdmFyaWFi bGVzLg0KIw0Kc2V0LWFzLXNpbmdsZXRvbg0KICAgIEJJTkRJUg0KICAgIENXDQogICAgSkFN RklMRQ0KICAgIEpBTVJVTEVTDQogICAgSkFNU0hFTEwNCiAgICBMSUJESVINCiAgICBNQU5E SVINCiAgICBXQVRDT00NCiAgICA7DQoNCiMNCiMgQmFzZSBkZXBlbmRlbmNpZXMgLSBmaXJz dCBmb3IgImJvb3RzdHJhcCIga2luZHMgb2YgcnVsZXMNCiMNCg0KIyBkd2EgNi8xNy8wMSAt IGFkZGVkIHRlc3QNCkRFUEVORFMgYWxsIDogc2hlbGwgZmlsZXMgbGliIGRsbCBleGUgb2Jq IDsNCkRFUEVORFMgYWxsIHNoZWxsIGZpbGVzIGxpYiBkbGwgZXhlIG9iaiB0ZXN0IDogZmly c3QgOw0KTk9URklMRSBhbGwgZmlyc3Qgc2hlbGwgZmlsZXMgbGliIGRsbCBleGUgb2JqIGRp cnMgY2xlYW4gdW5pbnN0YWxsIHRlc3QgOw0KQUxXQVlTIGNsZWFuIHVuaW5zdGFsbCA7DQoN CiMNCiMgUnVsZXMNCiMNCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIHR5 cGUtREVQRU5EUyB0eXBlIDogdGFyZ2V0cy4uLg0KIw0KIyBVc2UgdGhpcyB0byBjcmVhdGUg YSBkZXBlbmRlbmN5IGJldHdlZW4gYSBmYWtlIHR5cGUtdGFyZ2V0IGFuZCBvdGhlciB0YXJn ZXRzLiBXaWxsIHByZXZlbnQNCiMgdGFyZ2V0cyBpbiBkZXBlbmRlZSBzdWJwcm9qZWN0cyBm cm9tIGJlaW5nIGFkZGVkIHRvIHRoZSB0eXBlLXRhcmdldCdzIGRlcGVuZGVuY2llcy4NCnJ1 bGUgdHlwZS1ERVBFTkRTICMgdHlwZS10YXJnZXQgOiB0YXJnZXRzLi4uDQp7DQogICAgaWYg ISAkKGdTVVBQUkVTU19GQUtFX1RBUkdFVFMpICYmICEgJChnSU5fTElCX0lOQ0xVREUpDQog ICAgew0KICAgICAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICB9DQp9DQoNCiMgZHdh IDYvNC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBBcmNoaXZlIGZpbGUtdGFyZ2V0IDogc291 cmNlcw0KIw0KIyBVc2VkIHRvIGRpc3BhdGNoIHRocm91Z2ggQXJjaGl2ZS1hY3Rpb24sIHdo aWNoIHNob3VsZCBiZSByZWRlZmluZWQgaW4gdG9vbHNldA0KIyBkZXNjcmlwdGlvbiBmaWxl cy4NCnJ1bGUgQXJjaGl2ZQ0Kew0KICAgIEFyY2hpdmUtYWN0aW9uICQoPCkgOiAkKD4pIDsN Cn0NCg0KcnVsZSBBcw0Kew0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KICAgIEFTRkxB R1Mgb24gJCg8KSArPSAkKEFTRkxBR1MpICQoU1VCRElSQVNGTEFHUykgOw0KfQ0KDQpydWxl IEJ1bGsNCnsNCiAgICBsb2NhbCBpIDsNCg0KICAgIGZvciBpIGluICQoPikNCiAgICB7DQog ICAgICAgIEZpbGUgJChpOkQ9JCg8KSkgOiAkKGkpIDsNCiAgICB9DQp9DQoNCiMgZHdhIDYv NC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KIyBmYWN0b3JlZCBvdXQgc3R1ZmYgZnJvbSB0 aGUgYnVpbHRpbiBDYyBhbmQgQysrIHJ1bGVzDQpydWxlIENjLXBsYXRmb3JtLXNwZWNpZmlj cw0Kew0KICAgICMgSWYgdGhlIGNvbXBpbGVyJ3MgLW8gZmxhZyBkb2Vzbid0IHdvcmssIHJl bG9jYXRlIHRoZSAubw0KDQogICAgaWYgJChSRUxPQ0FURSkNCiAgICB7DQogICAgICAgIENj TXYgJCg8KSA6ICQoPikgOw0KICAgIH0NCg0KICAgIGxvY2FsIF9oID0gJChTRUFSQ0hfU09V UkNFKSAkKEhEUlMpIDsNCg0KICAgIGlmICQoVk1TKSAmJiAkKF9oKQ0KICAgIHsNCiAgICAg ICAgU0xBU0hJTkMgb24gJCg8KSA9ICIvaW5jPSgiICQoX2hbMV0pICwkKF9oWzItXSkgIiki IDsNCiAgICB9DQogICAgZWxzZSBpZiAkKE1BQykgJiYgJChfaCkNCiAgICB7DQogICAgICAg IGxvY2FsIF9pIF9qIDsNCiAgICAgICAgX2ogPSAkKF9oWzFdKSA7DQogICAgICAgIGZvciBf aSBpbiAkKF9oWzItXSkNCiAgICAgICAgew0KICAgICAgICAgICAgX2ogPSAkKF9qKSwkKF9p KSA7DQogICAgICAgIH0NCiAgICAgICAgTUFDSU5DIG9uICQoPCkgPSBcIiQoX2opXCIgOw0K ICAgIH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIGFsd2F5cy1j KysgZmlsZW5hbWUuLi4NCiMNCiMgZGVjbGFyZXMgdGhhdCB0aGUgZ2l2ZW4gZmlsZXMgc2hv dWxkIGJlIGNvbXBpbGVkIGFzIEMrKywgcmVnYXJkbGVzcyBvZiB0aGVpcg0KIyBmaWxlbmFt ZSBleHRlbnNpb24uDQpydWxlIGFsd2F5cy1jKysNCnsNCiAgICBnQUxXQVlTX0MrKyArPSBb IEZHcmlzdEZpbGVzICQoPCkgXSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZv ciBib29zdA0KcnVsZSBDYw0Kew0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KDQogICAg Q2MtcGxhdGZvcm0tc3BlY2lmaWNzICQoPCkgOiAkKD4pIDsNCg0KICAgIGlmICQoPikgaW4g JChnQUxXQVlTX0MrKykNCiAgICB7DQogICAgICAgIEMrKy1hY3Rpb24gJCg8KSA6ICQoPikg Ow0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBDYy1hY3Rpb24gJCg8KSA6ICQo PikgOw0KICAgIH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpy dWxlIEMrKw0Kew0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KDQogICAgQ2MtcGxhdGZv cm0tc3BlY2lmaWNzICQoPCkgOiAkKD4pIDsNCiAgICANCiAgICBDKystYWN0aW9uICQoPCkg OiAkKD4pIDsNCn0NCg0KcnVsZSBDaG1vZA0Kew0KICAgIGlmICQoQ0hNT0QpIHsgQ2htb2Qx ICQoPCkgOyB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBjb25k aXRpb25hbCA8Y29uZD4gOiA8dHJ1ZS12YWx1ZT4gOiA8ZmFsc2UtdmFsdWU+DQojIHJldHVy bnMgPHRydWUtdmFsdWU+IGlmIDxjb25kPiwgPGZhbHNlLXZhbHVlPiBvdGhlcndpc2UNCnJ1 bGUgY29uZGl0aW9uYWwNCnsNCiAgICBpZiAkKDEpIHsgcmV0dXJuICQoMikgOyB9IGVsc2Ug eyByZXR1cm4gJCgzKSA7IH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJv b3N0DQpydWxlIEZpbGUNCnsNCiAgICB0eXBlLURFUEVORFMgZmlsZXMgOiAkKDwpIDsNCiAg ICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICBTRUFSQ0ggb24gJCg+KSA9ICQoU0VBUkNI X1NPVVJDRSkgOw0KICAgIE1PREUgb24gJCg8KSA9ICQoRklMRU1PREUpIDsNCiAgICBDaG1v ZCAkKDwpIDsNCn0NCg0KcnVsZSBGaWxlQ2xvbmUNCnsNCiAgICB0eXBlLURFUEVORFMgZmls ZXMgOiAkKDwpIDsNCiAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICBTRUFSQ0ggb24g JCg+KSA9ICQoU0VBUkNIX1NPVVJDRSkgOw0KfQ0KDQpydWxlIEZvcnRyYW4NCnsNCiAgICBE RVBFTkRTICQoPCkgOiAkKD4pIDsNCn0NCg0KcnVsZSBHZW5GaWxlIA0Kew0KICAgIGxvY2Fs IF90ID0gWyBGR3Jpc3RTb3VyY2VGaWxlcyAkKDwpIF0gOw0KICAgIGxvY2FsIF9zID0gWyBG QXBwZW5kU3VmZml4ICQoPlsxXSkgOiAkKFNVRkVYRSkgXSA7DQogICAgRGVwZW5kcyAkKF90 KSA6ICQoX3MpICQoPlsyLV0pIDsNCiAgICBHZW5GaWxlMSAkKF90KSA6ICQoX3MpICQoPlsy LV0pIDsNCiAgICBDbGVhbiBjbGVhbiA6ICQoX3QpIDsNCn0NCg0KcnVsZSBHZW5GaWxlMQ0K ew0KICAgIE1ha2VMb2NhdGUgJCg8KSA6ICQoTE9DQVRFX1NPVVJDRSkgOw0KICAgIFNFQVJD SCBvbiAkKD4pID0gJChTRUFSQ0hfU09VUkNFKSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1v ZGlmaWVkIGZvciBib29zdA0KcnVsZSBIYXJkTGluaw0Kew0KICAgIHR5cGUtREVQRU5EUyBm aWxlcyA6ICQoPCkgOw0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KICAgIFNFQVJDSCBv biAkKD4pID0gJChTRUFSQ0hfU09VUkNFKSA7DQp9DQoNCnJ1bGUgSGRyUnVsZQ0Kew0KICAg ICMgSGRyUnVsZSBzb3VyY2UgOiBoZWFkZXJzIDsNCg0KICAgICMgTi5CLiAgVGhpcyBydWxl IGlzIGNhbGxlZCBkdXJpbmcgYmluZGluZywgcG90ZW50aWFsbHkgYWZ0ZXINCiAgICAjIHRo ZSBmYXRlIG9mIG1hbnkgdGFyZ2V0cyBoYXMgYmVlbiBkZXRlcm1pbmVkLCBhbmQgbXVzdCBi ZQ0KICAgICMgdXNlZCB3aXRoIGNhdXRpb246IGRvbid0IGFkZCBkZXBlbmRlbmNpZXMgdG8g dW5yZWxhdGVkDQogICAgIyB0YXJnZXRzLCBhbmQgZG9uJ3Qgc2V0IHZhcmlhYmxlcyBvbiAk KDwpLg0KDQogICAgIyBUZWxsIEphbSB0aGF0IGFueXRoaW5nIGRlcGVuZGluZyBvbiAkKDwp IGFsc28gZGVwZW5kcyBvbiAkKD4pLA0KICAgICMgc2V0IFNFQVJDSCBzbyBKYW0gY2FuIGZp bmQgdGhlIGhlYWRlcnMsIGJ1dCB0aGVuIHNheSB3ZSBkb24ndA0KICAgICMgY2FyZSBpZiB3 ZSBjYW4ndCBhY3R1YWxseSBmaW5kIHRoZSBoZWFkZXJzICh0aGV5IG1heSBoYXZlIGJlZW4N CiAgICAjIHdpdGhpbiBpZmRlZnMpLA0KDQogICAgbG9jYWwgYW5nbGUtaW5jbHVkZXMgPSBb IE1BVENIICJbPF0oW14+XSspWz5dIiA6ICQoPikgXSA7DQogICAgbG9jYWwgcXVvdGVkLWlu Y2x1ZGVzID0gWyBNQVRDSCAiW1wiXShbXlwiXSspW1wiXSIgOiAkKD4pIF0gOw0KDQogICAg bG9jYWwgcyA7DQoNCiAgICBpZiAkKEhEUkdSSVNUKSANCiAgICB7IA0KICAgICAgICBhbmds ZS1pbmNsdWRlcyA9ICQoYW5nbGUtaW5jbHVkZXM6Rz0kKEhEUkdSSVNUKSkgOw0KICAgICAg ICBxdW90ZWQtaW5jbHVkZXMgPSAkKHF1b3RlZC1pbmNsdWRlczpHPSQoSERSR1JJU1QpKSA7 DQogICAgfSANCg0KICAgIGxvY2FsIHMgPSAkKGFuZ2xlLWluY2x1ZGVzKSAkKHF1b3RlZC1p bmNsdWRlcykgOw0KDQogICAgSU5DTFVERVMgJCg8KSA6ICQocykgOw0KICAgIE5PQ0FSRSAk KHMpIDsNCg0KICAgICMgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGRvaW5nIGEgU0VBUkNIIGZv ciB0aGUgaGVhZGVycy4gSXQncw0KICAgICMgZG9uZSB0aGlzIHdheSB0byBnZXQgYXJvdW5k IHRoZSBpbmFiaWxpdHkgb2YgSmFtIHRvIGRpc3Rpbmd1aXNoDQogICAgIyBmaWxlcyBmcm9t IGRpcmVjdG9yaWVzLiBUaGF0IHdvdWxkIGNhdXNlIHByb2JsZW1zIG9mIGZhbHNlDQogICAg IyB1cGRhdGVzIHdoZW4gYSBkaXJlY3RvcnkgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBoZWFk ZXIuIFRoZQ0KICAgICMgSGRyU2VhcmNoQW5kTG9jYXRlIGRvZXMgdGhlIHNlYXJjaCBtYW51 YWxseSBhbmQgc2V0cyBMT0NBVEUNCiAgICAjIG9ubHkgaWYgaXQgZmluZCBhIGZpbGUsIGln bm9yaW5nIGRpcmVjdG9yaWVzLg0KDQogICAgZm9yIGxvY2FsIGFuZ2xlLWluY2x1ZGUgaW4g JChhbmdsZS1pbmNsdWRlcykNCiAgICB7DQogICAgICAgIEhkclNlYXJjaEFuZExvY2F0ZSAk KGFuZ2xlLWluY2x1ZGUpIDogJChIRFJTRUFSQ0gpIDsNCiAgICB9DQogICAgZm9yIGxvY2Fs IHF1b3RlZC1pbmNsdWRlIGluICQocXVvdGVkLWluY2x1ZGVzKQ0KICAgIHsNCiAgICAgICAg SGRyU2VhcmNoQW5kTG9jYXRlICQocXVvdGVkLWluY2x1ZGUpIDogJChnQklORElORygkKDwp KTpEKSAkKEhEUlNFQVJDSCkgOw0KICAgIH0NCiAgICANCiAgICBCSU5EUlVMRSBvbiAkKHMp ID0gcmVtZW1iZXItYmluZGluZyA7DQoNCiAgICAjIFByb3BhZ2F0ZSBvbiAkKDwpIHRvICQo PikNCg0KICAgIEhEUlNFQVJDSCBvbiAkKHMpID0gJChIRFJTRUFSQ0gpIDsNCiAgICBIRFJT Q0FOIG9uICQocykgPSAkKEhEUlNDQU4pIDsNCiAgICBIRFJSVUxFIG9uICQocykgPSAkKEhE UlJVTEUpIDsNCiAgICBIRFJHUklTVCBvbiAkKHMpID0gJChIRFJHUklTVCkgOw0KfQ0KcnVs ZSBIZHJTZWFyY2hBbmRMb2NhdGUgKCBoZWFkZXIgOiBzZWFyY2ggKiApDQp7DQogICAgaWYg ISAkKGdCSU5ESU5HKCQoaGVhZGVyKSkpDQogICAgew0KICAgICAgICBsb2NhbCBoZWFkZXIt Z2xvYiA9IFsgR0xPQiAiJChzZWFyY2g6Rz0pIiA6ICQoaGVhZGVyOkc9KSBdIDsNCiAgICAg ICAgbG9jYWwgaGVhZGVyLWxvY2F0ZSA9IDsNCiAgICAgICAgZm9yIGxvY2FsIGJvdW5kLXBh dGggaW4gJChoZWFkZXItZ2xvYikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgISAkKGhl YWRlci1sb2NhdGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgISBbIEdM T0IgIiQoYm91bmQtcGF0aCkiIDogKiBdDQogICAgICAgICAgICAgICAgew0KICAgICAgICAg ICAgICAgICAgICBoZWFkZXItbG9jYXRlID0gJChib3VuZC1wYXRoKSA7DQogICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICQoaGVhZGVy LWxvY2F0ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgTE9DQVRFIG9uICQoaGVhZGVyKSA9 ICQoaGVhZGVyLWxvY2F0ZTpEKSA7DQogICAgICAgICAgICBnQklORElORygkKGhlYWRlcikp ID0gJChoZWFkZXItbG9jYXRlKSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAg ICB7DQogICAgICAgICAgICBOT1VQREFURSAkKGhlYWRlcikgOw0KICAgICAgICAgICAgTE9D QVRFIG9uICQoaGVhZGVyKSA9ICQoRE9UKSA7DQogICAgICAgICAgICBnQklORElORygkKGhl YWRlcikpID0gJChoZWFkZXI6Rz06Uj0kKERPVCkpIDsNCiAgICAgICAgfQ0KICAgIH0NCn0N Cg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIEluc3RhbGxJbnRv DQp7DQogICAgbG9jYWwgaSB0IDsNCg0KICAgIHQgPSAkKD46Rz1pbnN0YWxsZWQpIDsNCg0K ICAgIHR5cGUtREVQRU5EUyBpbnN0YWxsIDogJCh0KSA7DQogICAgREVQRU5EUyAkKHQpIDog JCg+KSA7DQogICAgU0VBUkNIIG9uICQoPikgPSAkKFNFQVJDSF9TT1VSQ0UpIDsNCiAgICBN YWtlTG9jYXRlICQodCkgOiAkKDwpIDsNCg0KICAgICMgQXJyYW5nZSBmb3IgamFtIHVuaW5z dGFsbA0KDQogICAgQ2xlYW4gdW5pbnN0YWxsIDogJCh0KSA7DQoNCiAgICBmb3IgaSBpbiAk KD4pDQogICAgew0KICAgICAgICBJbnN0YWxsICQoaTpHPWluc3RhbGxlZCkgOiAkKGkpIDsN CiAgICB9DQoNCiAgICBDaG1vZCAkKHQpIDsNCg0KICAgIGlmICQoVU5JWCkNCiAgICB7DQog ICAgICAgIGlmICQoT1dORVIpIHsgQ2hvd24gJCh0KSA7IE9XTkVSIG9uICQodCkgPSAkKE9X TkVSKSA7IH0NCiAgICAgICAgaWYgJChHUk9VUCkgeyBDaGdycCAkKHQpIDsgR1JPVVAgb24g JCh0KSA9ICQoR1JPVVApIDsgfQ0KICAgIH0NCn0NCg0KcnVsZSBJbnN0YWxsQmluDQp7DQog ICAgbG9jYWwgX3QgPSBbIEZBcHBlbmRTdWZmaXggJCg+KSA6ICQoU1VGRVhFKSBdIDsNCg0K ICAgIEluc3RhbGxJbnRvICQoPCkgOiAkKF90KSA7DQogICAgTU9ERSBvbiAkKF90Okc9aW5z dGFsbGVkKSA9ICQoRVhFTU9ERSkgOw0KfQ0KDQpydWxlIEluc3RhbGxGaWxlDQp7DQogICAg SW5zdGFsbEludG8gJCg8KSA6ICQoPikgOw0KICAgIE1PREUgb24gJCg+Okc9aW5zdGFsbGVk KSA9ICQoRklMRU1PREUpIDsNCn0NCg0KcnVsZSBJbnN0YWxsTGliDQp7DQogICAgSW5zdGFs bEludG8gJCg8KSA6ICQoPikgOw0KICAgIE1PREUgb24gJCg+Okc9aW5zdGFsbGVkKSA9ICQo RklMRU1PREUpIDsNCn0NCg0KcnVsZSBJbnN0YWxsTWFuDQp7DQogICAgIyBSZWFsbHkgdGhp cyBqdXN0IHN0cmlwcyB0aGUgLiBmcm9tIHRoZSBzdWZmaXgNCg0KICAgIGxvY2FsIGkgcyBk IDsNCg0KICAgIGZvciBpIGluICQoPikNCiAgICB7DQogICAgICAgIHN3aXRjaCAkKGk6UykN CiAgICAgICAgew0KICAgICAgICBjYXNlIC4xIDogcyA9IDEgOyBjYXNlIC4yIDogcyA9IDIg OyBjYXNlIC4zIDogcyA9IDMgOw0KICAgICAgICBjYXNlIC40IDogcyA9IDQgOyBjYXNlIC41 IDogcyA9IDUgOyBjYXNlIC42IDogcyA9IDYgOw0KICAgICAgICBjYXNlIC43IDogcyA9IDcg OyBjYXNlIC44IDogcyA9IDggOyBjYXNlIC5sIDogcyA9IGwgOw0KICAgICAgICBjYXNlIC5u IDogcyA9IG4gOyBjYXNlIC5tYW4gOiBzID0gMSA7DQogICAgICAgIH0NCg0KICAgICAgICBk ID0gbWFuJChzKSA7DQoNCiAgICAgICAgSW5zdGFsbEludG8gJChkOlI9JCg8KSkgOiAkKGkp IDsNCiAgICB9DQoNCiAgICBNT0RFIG9uICQoPjpHPWluc3RhbGxlZCkgPSAkKEZJTEVNT0RF KSA7DQp9DQoNCnJ1bGUgSW5zdGFsbFNoZWxsDQp7DQogICAgSW5zdGFsbEludG8gJCg8KSA6 ICQoPikgOw0KICAgIE1PREUgb24gJCg+Okc9aW5zdGFsbGVkKSA9ICQoU0hFTExNT0RFKSA7 DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBMZXggIyBm aWxlLmMgOiBmaWxlLmwNCnsNCiAgICAjIElmIHdlIGRvbid0IGhhdmUgYSB3YXkgb2Ygc3Bl Y2lmeWluZyB0aGUgbGV4IG91dHB1dCBmaWxlLCB3ZSdsbCBoYXZlIHRvIG1vdmUgaXQNCiAg ICAjIFdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzIGlmIHBvc3NpYmxlIGJlY2F1c2U6IGEuIGxl eCBnZW5lcmF0ZXMgI2xpbmUNCiAgICAjIGRpcmVjdGl2ZXMgZm9yIHRoZSBvdXRwdXQgZmls ZSB3aGljaCB3b3VsZCByZWZlciB0byB0aGUgd3JvbmcgcGxhY2UgYW5kDQogICAgIyBiLiB0 aGUgSmFtIGludm9jYXRpb24gZGlyZWN0b3J5IGNvdWxkIGJlIHJlYWQtb25seQ0KICAgIGlm ICEgJChMRVhfT1VUUFVUKQ0KICAgIHsNCiAgICAgICAgTGV4TXYgJCg8KSA6ICQoPikgOw0K ICAgIH0NCiAgICANCiAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICBNYWtlTG9jYXRl ICQoPCkgOiAkKExPQ0FURV9TT1VSQ0UpIDsNCiAgICBTRUFSQ0ggb24gJCg8KSA9ICQoTE9D QVRFX1NPVVJDRSkgOw0KICAgIENsZWFuIGNsZWFuIDogJCg8KSA7DQp9DQoNCiMgZHdhIDYv NC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBMaWJyYXJ5DQp7DQogICAgTGlicmFy eUZyb21PYmplY3RzICQoPCkgOiBbIE9iamVjdHMgJCg+KSBdIDsNCn0NCg0KIyBkd2EgNi80 LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIExpYnJhcnlGcm9tT2JqZWN0cw0Kew0K ICAgIGxvY2FsIF9pIF9sIDsNCg0KICAgIF9sID0gJCg8OlM9JChTVUZMSUIpKSA7DQoNCiAg ICAjIGxpYnJhcnkgZGVwZW5kcyBvbiBpdHMgbWVtYmVyIG9iamVjdHMNCg0KICAgIGlmICQo S0VFUE9CSlMpDQogICAgew0KICAgICAgICB0eXBlLURFUEVORFMgb2JqIDogJCg+KSA7DQog ICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHR5cGUtREVQRU5EUyBsaWIgOiAkKF9s KSA7DQogICAgfQ0KDQogICAgIyBTZXQgTE9DQVRFIGZvciB0aGUgbGlicmFyeSBhbmQgaXRz IGNvbnRlbnRzLiAgVGhlIGJvdW5kDQogICAgIyB2YWx1ZSBzaG93cyB1cCBhcyAkKE5FRURM SUJTKSBvbiB0aGUgTGluayBhY3Rpb25zLg0KICAgICMgRm9yIGNvbXBhdGliaWxpdHksIHdl IG9ubHkgZG8gdGhpcyBpZiB0aGUgbGlicmFyeSBkb2Vzbid0DQogICAgIyBhbHJlYWR5IGhh dmUgYSBwYXRoLg0KDQogICAgaWYgISAkKF9sOkQpDQogICAgew0KICAgICAgICBNYWtlTG9j YXRlICQoX2wpICQoX2wpKCQoPjpCUykpIDogJChMT0NBVEVfVEFSR0VUKSA7DQogICAgfQ0K DQogICAgaWYgJChOT0FSU0NBTikgDQogICAgeyANCiAgICAgICAgIyBJZiB3ZSBjYW4ndCBz Y2FuIHRoZSBsaWJyYXJ5IHRvIHRpbWVzdGFtcCBpdHMgY29udGVudHMsDQogICAgICAgICMg d2UgaGF2ZSB0byBqdXN0IG1ha2UgdGhlIGxpYnJhcnkgZGVwZW5kIGRpcmVjdGx5IG9uIHRo ZQ0KICAgICAgICAjIG9uLWRpc2sgb2JqZWN0IGZpbGVzLiAgDQoNCiAgICAgICAgREVQRU5E UyAkKF9sKSA6ICQoPikgOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAjIElm IHdlIGNhbiBzY2FuIHRoZSBsaWJyYXJ5LCB3ZSBtYWtlIHRoZSBsaWJyYXJ5IGRlcGVuZA0K ICAgICAgICAjIG9uIGl0cyBtZW1iZXJzIGFuZCBlYWNoIG1lbWJlciBkZXBlbmQgb24gdGhl IG9uLWRpc2sNCiAgICAgICAgIyBvYmplY3QgZmlsZS4NCg0KICAgICAgICBERVBFTkRTICQo X2wpIDogJChfbCkoJCg+OkJTKSkgOw0KDQogICAgICAgIGZvciBfaSBpbiAkKD4pDQogICAg ICAgIHsNCiAgICAgICAgICAgIERFUEVORFMgJChfbCkoJChfaTpCUykpIDogJChfaSkgOw0K ICAgICAgICB9DQogICAgfQ0KDQogICAgQ2xlYW4gY2xlYW4gOiAkKF9sKSA7DQoNCiAgICBp ZiAkKENSRUxJQikgeyBDcmVMaWIgJChfbCkgOiAkKD5bMV0pIDsgfQ0KDQogICAgQXJjaGl2 ZSAkKF9sKSA6ICQoPikgOw0KDQogICAgaWYgJChSQU5MSUIpIHsgUmFubGliICQoX2wpIDsg fQ0KDQogICAgIyBJZiB3ZSBjYW4ndCBzY2FuIHRoZSBsaWJyYXJ5LCB3ZSBoYXZlIHRvIGxl YXZlIHRoZSAubydzIGFyb3VuZC4NCg0KICAgIGlmICEgKCAkKE5PQVJTQ0FOKSB8fCAkKEtF RVBPQkpTKSApIHsgUm1UZW1wcyAkKF9sKSA6ICQoPikgOyB9DQp9DQoNCiMgZHdhIDYvNC8w MSAtIG1vZGlmaWVkIGZvciBib29zdCB0byBkaXNwYXRjaCB0aHJvdWdoIExpbmstYWN0aW9u IGFuZCB0byBwYXNzDQojIHRoZSB0YXJnZXQtdHlwZSB0aHJvdWdoLiAqKiogTk9XIFVOVVNF RCBCWSBCT09TVCAqKioNCiMNCiMgTGluayBleGVjdXRhYmxlLXRhcmdldCA6IG9iamVjdC10 YXJnZXQuLi4NCnJ1bGUgTGluaw0Kew0KICAgIE1PREUgb24gJCg8KSA9ICQoRVhFTU9ERSkg Ow0KICAgIExpbmstYWN0aW9uICQoPCkgOiAkKD4pIDogJCgzKSA7DQogICAgQ2htb2QgJCg8 KSA7DQp9DQoNCnJ1bGUgTGlua0xpYnJhcmllcw0Kew0KICAgICMgbWFrZSBsaWJyYXJ5IGRl cGVuZGVuY2llcyBvZiB0YXJnZXQNCiAgICAjIHNldCBORUVETElCUyB2YXJpYWJsZSB1c2Vk IGJ5ICdhY3Rpb25zIE1haW4nDQoNCiAgICBsb2NhbCBfdCA9IFsgRkFwcGVuZFN1ZmZpeCAk KDwpIDogJChTVUZFWEUpIF0gOw0KDQogICAgREVQRU5EUyAkKF90KSA6ICQoPjpTPSQoU1VG TElCKSkgOw0KICAgIE5FRURMSUJTIG9uICQoX3QpICs9ICQoPjpTPSQoU1VGTElCKSkgOw0K fQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCnJ1bGUgTWFpbg0Kew0K ICAgIE1haW5Gcm9tT2JqZWN0cyAkKDwpIDogWyBPYmplY3RzICQoPikgXSA7DQp9DQoNCiMg ZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBNYWluRnJvbU9iamVjdHMN CnsNCiAgICBsb2NhbCBfcyBfdCA7DQoNCiAgICAjIEFkZCBncmlzdCB0byBmaWxlIG5hbWVz DQogICAgIyBBZGQgc3VmZml4IHRvIGV4ZQ0KDQogICAgX3MgPSAkKD4pIDsNCiAgICBfdCA9 IFsgRkFwcGVuZFN1ZmZpeCAkKDwpIDogJChTVUZFWEUpIF0gOw0KDQogICAgaWYgJChfdCkg IT0gJCg8KQ0KICAgIHsNCiAgICAgICAgREVQRU5EUyAkKDwpIDogJChfdCkgOw0KICAgICAg ICBOT1RGSUxFICQoPCkgOw0KICAgIH0NCg0KICAgICMgbWFrZSBjb21waWxlZCBzb3VyY2Vz IGEgZGVwZW5kZW5jeSBvZiB0YXJnZXQNCg0KICAgIHR5cGUtREVQRU5EUyBleGUgOiAkKF90 KSA7DQogICAgREVQRU5EUyAkKF90KSA6ICQoX3MpIDsNCiAgICBNYWtlTG9jYXRlICQoX3Qp IDogJChMT0NBVEVfVEFSR0VUKSA7DQoNCiAgICBDbGVhbiBjbGVhbiA6ICQoX3QpIDsNCg0K ICAgIExpbmsgJChfdCkgOiAkKF9zKSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVk IGZvciBib29zdA0KcnVsZSBNYWtlTG9jYXRlDQp7DQogICAgaWYgJCg+KQ0KICAgIHsNCiAg ICAgICAgTE9DQVRFIG9uICQoPCkgPSAkKD4pIDsNCg0KICAgICAgICAjIHByb3ZpZGUgYSB3 YXkgdG8gZ2V0IGJhY2sgdGhlIGxvY2F0aW9uIGZyb20gYSBidWlsdCB0YXJnZXQgbmFtZS4N CiAgICAgICAgZ0xPQ0FURSgkKDwpKSA9ICQoPikgOyANCiAgICAgICAgDQogICAgICAgICMg V2UgYWRkIGRpcmVjdG9yeS1ncmlzdCBoZXJlIHNvIHRoYXQgaW1wbGljaXRseS1jcmVhdGVk IGRpcmVjdG9yeQ0KICAgICAgICAjIHRhcmdldCBuYW1lcyBkb24ndCBjb2xsaWRlIHdpdGgg dXNlci1zcGVjaWZpZWQgdGFyZ2V0cy4NCiAgICAgICAgRGVwZW5kcyAkKDwpIDogWyBNa0Rp ciAkKD5bMV06Rz1kaXJlY3RvcnktZ3Jpc3QpIF0gOw0KICAgIH0NCn0NCg0KIyBub3cgcmV0 dXJucyB0aGUgY3JlYXRlZCBkaXJlY3RvcnkgdGFyZ2V0IC0tIGR3YQ0KcnVsZSBNa0Rpcg0K ew0KICAgICMgSWYgZGlyIGV4aXN0cywgZG9uJ3QgdXBkYXRlIGl0DQogICAgIyBEbyB0aGlz IGV2ZW4gZm9yICQoRE9UKS4NCg0KICAgIGxvY2FsIGRpciA9ICQoPCkgOw0KICAgIGlmICQo TlQpDQogICAgew0KICAgICAgICAjIG1ha2Ugc3VyZSBzbGFzaGVzIGFsbCBnbyB0aGUgcmln aHQgd2F5DQogICAgICAgIGRpciA9IFsgc3BsaXQtcGF0aCAkKGRpcikgXSA7DQogICAgICAg IGRpciA9ICQoZGlyOko9JChTTEFTSCkpIDsNCiAgICB9DQogICAgDQogICAgbG9jYWwgcmVz dWx0ID0gJChkaXIpIDsNCiAgICANCiAgICB3aGlsZSAkKGRpcikgJiYgKCAkKGRpcikgIT0g JChET1QpICkgJiYgISAkKCQoZGlyKS1ta2RpcikgDQogICAgew0KICAgICAgICAjIENoZWVz eSBnYXRlIHRvIHByZXZlbnQgbXVsdGlwbGUgaW52b2NhdGlvbnMgb24gc2FtZSBkaXINCiAg ICAgICAgIyBNa0RpcjEgaGFzIHRoZSBhY3Rpb25zIA0KICAgICAgICAjIEFycmFuZ2UgZm9y IGphbSBkaXJzDQoNCiAgICAgICAgJChkaXIpLW1rZGlyID0gdHJ1ZSA7DQogICAgICAgIE1r RGlyMSAkKGRpcikgOw0KICAgICAgICBEZXBlbmRzIGRpcnMgOiAkKGRpcikgOw0KICAgICAg ICBOT1VQREFURSAkKGRpcikgOw0KDQoNCiAgICAgICAgIyBSZWN1cnNpdmVseSBtYWtlIHBh cmVudCBkaXJlY3Rvcmllcy4NCiAgICAgICAgIyAkKGRpcjpQKSA9ICQoZGlyKSdzIHBhcmVu dCwgJiB3ZSByZWN1cnNlIHVudGlsIHJvb3QNCg0KICAgICAgICBsb2NhbCBzID0gJChkaXI6 UCkgOw0KDQogICAgICAgIGlmICQoTlQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN3aXRj aCAkKHMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICBjYXNlICo6ICAgOiBzID0gOw0K ICAgICAgICAgICAgY2FzZSAqOlxcIDogcyA9IDsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KDQogICAgICAgIGlmICQocykgJiYgJChzKSAhPSAkKGRpcikNCiAgICAgICAgew0KICAg ICAgICAgICAgRGVwZW5kcyAkKGRpcikgOiAkKHMpIDsNCiAgICAgICAgICAgIGRpciA9ICQo cykgOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgDQogICAgICAgIHsNCiAgICAgICAgICAg IGRpciA9IDsgIyBzdG9wIGl0ZXJhdGluZw0KICAgICAgICAgICAgaWYgJChzKSB7IE5PVEZJ TEUgJChzKSA7IH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsN Cn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIE9iamVjdA0K ew0KICAgIGxvY2FsIGggOw0KDQogICAgdHlwZS1ERVBFTkRTIG9iaiA6ICQoPCkgOw0KICAg IHNldC10YXJnZXQtdmFyaWFibGVzICQoPCkgOw0KICAgIA0KICAgICMgTWFrZSBpdCBwb3Nz aWJsZSB0byBjb21waWxlIGEgZ2l2ZW4gc291cmNlIGZpbGUgYnkgZ2l2aW5nIGl0cw0KICAg ICMgb2JqZWN0IGZpbGUgbmFtZSBhcyBhIHRhcmdldC4NCiAgICB0eXBlLURFUEVORFMgJCg8 Okc9KSA6ICQoPCkgOyANCiAgICANCiAgICAjIGxvY2F0ZSBvYmplY3QgYW5kIHNlYXJjaCBm b3Igc291cmNlLCBpZiB3YW50ZWQNCg0KICAgIENsZWFuIGNsZWFuIDogJCg8KSA7DQoNCiAg ICBNYWtlTG9jYXRlICQoPCkgOiAkKExPQ0FURV9UQVJHRVQpIDsNCiAgICBTRUFSQ0ggb24g JCg+KSA9ICQoU0VBUkNIX1NPVVJDRSkgOw0KDQogICAgIyBTYXZlIEhEUlMgZm9yIC1JJChI RFJTKSBvbiBjb21waWxlLg0KICAgICMgV2Ugc2hvdWxkbid0IG5lZWQgLUkkKFNFQVJDSF9T T1VSQ0UpIGFzIGNjIGNhbiBmaW5kIGhlYWRlcnMNCiAgICAjIGluIHRoZSAuYyBmaWxlJ3Mg ZGlyZWN0b3J5LCBidXQgZ2VuZXJhdGVkIC5jIGZpbGVzIChmcm9tDQogICAgIyB5YWNjLCBs ZXgsIGV0YykgYXJlIGxvY2F0ZWQgaW4gJChMT0NBVEVfVEFSR0VUKSwgcG9zc2libHkNCiAg ICAjIGRpZmZlcmVudCBmcm9tICQoU0VBUkNIX1NPVVJDRSkuDQoNCiAgICAjIFVzZSB1bmlx dWUgdG8gY2xlYW4gdXAgY29uZnVzaW5nIGR1cGxpY2F0ZXMgYSBiaXQNCiAgICBIRFJTIG9u ICQoPCkgPSBbIHVuaXF1ZSAkKExPQ0FURV9TT1VSQ0UpICQoSERSUykgXSA7DQoNCiAgICAj IFNldCBTVERIRFJTIG9uIHRoZSBvYmplY3Qgc28gdGhhdCBtdWx0aS1jb21waWxlciBidWls ZHMgd2lsbCBzZWFyY2ggZm9yDQogICAgIyBoZWFkZXJzIGluIHRoZSByaWdodCBwbGFjZXMu IA0KICAgIFNUREhEUlMgb24gJCg8KSA9ICQoU1RESERSUykgOw0KICAgIFNZU0hEUlMgb24g JCg8KSA9ICQoU1lTSERSUykgOw0KDQogICAgIyBoYW5kbGUgI2luY2x1ZGVzIGZvciBzb3Vy Y2U6IEphbSBzY2FucyBmb3IgaGVhZGVycyB3aXRoDQogICAgIyB0aGUgcmVnZXhwIHBhdHRl cm4gJChIRFJTQ0FOKSBhbmQgdGhlbiBpbnZva2VzICQoSERSUlVMRSkNCiAgICAjIHdpdGgg dGhlIHNjYW5uZWQgZmlsZSBhcyB0aGUgdGFyZ2V0IGFuZCB0aGUgZm91bmQgaGVhZGVycw0K ICAgICMgYXMgdGhlIHNvdXJjZXMuICBIRFJTRUFSQ0ggaXMgdGhlIHZhbHVlIG9mIFNFQVJD SCB1c2VkIGZvcg0KICAgICMgdGhlIGZvdW5kIGhlYWRlciBmaWxlcy4gIEZpbmFsbHksIGlm IGphbSBtdXN0IGRlYWwgd2l0aCANCiAgICAjIGhlYWRlciBmaWxlcyBvZiB0aGUgc2FtZSBu YW1lIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcywNCiAgICAjIHRoZXkgY2FuIGJlIGRpc3Rp bmd1aXNoZWQgd2l0aCBIRFJHUklTVC4NCg0KICAgICMgJChoKSBpcyB3aGVyZSBjYyBmaXJz dCBsb29rcyBmb3IgI2luY2x1ZGUgImZvby5oIiBmaWxlcy4NCiAgICAjIElmIHRoZSBzb3Vy Y2UgZmlsZSBpcyBpbiBhIGRpc3RhbnQgZGlyZWN0b3J5LCBsb29rIHRoZXJlLg0KICAgICMg RWxzZSwgbG9vayBpbiAiIiAodGhlIGN1cnJlbnQgZGlyZWN0b3J5KS4NCg0KICAgIGlmICQo U0VBUkNIX1NPVVJDRSkNCiAgICB7DQogICAgICAgIGggPSAkKFNFQVJDSF9TT1VSQ0UpJChT TEFTSCkkKD46RCkgOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBoID0gJCg+ OkQpIDsNCiAgICB9DQoNCiAgICBIRFJSVUxFIG9uICQoPikgPSBIZHJSdWxlIDsNCiAgICBI RFJTQ0FOIG9uICQoPikgPSAkKEhEUlBBVFRFUk4pIDsNCiAgICBIRFJTRUFSQ0ggb24gJCg+ KSA9ICQoSERSUykgJChoKSAkKFNUREhEUlMpICQoU1lTSERSUykgOw0KICAgIEhEUkdSSVNU IG9uICQoPikgPSAkKEhEUkdSSVNUKSA7DQoNCiAgICAjIGlmIHNvdXJjZSBpcyBub3QgLmMs IGdlbmVyYXRlIC5jIHdpdGggc3BlY2lmaWMgcnVsZQ0KDQogICAgIyBtYWtlIHN1cmUgd2Ug ZG9uJ3QgZ2VuZXJhdGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLg0KICAgIGlmICEgJChnR0VO RVJBVEVEX1RBUkdFVCgkKDwpKSkNCiAgICB7DQogICAgICAgIHN3aXRjaCAkKD46UykNCiAg ICAgICAgew0KICAgICAgICAgICAgY2FzZSAuYXNtIDogQXMgJCg8KSA6ICQoPikgOw0KICAg ICAgICAgICAgY2FzZSAuYyA6ICAgQ2MgJCg8KSA6ICQoPikgOw0KICAgICAgICAgICAgY2Fz ZSAuQyA6ICAgQysrICQoPCkgOiAkKD4pIDsNCiAgICAgICAgICAgIGNhc2UgLmNjIDogIEMr KyAkKDwpIDogJCg+KSA7DQogICAgICAgICAgICBjYXNlIC5jcHAgOiBDKysgJCg8KSA6ICQo PikgOw0KICAgICAgICAgICAgY2FzZSAuY3h4IDogQysrICQoPCkgOiAkKD4pIDsNCiAgICAg ICAgICAgIGNhc2UgLmYgOiAgIEZvcnRyYW4gJCg8KSA6ICQoPikgOw0KICAgICAgICAgICAg Y2FzZSAucyA6ICAgQXMgJCg8KSA6ICQoPikgOw0KICAgICAgICAgICAgY2FzZSAqIDogICAg VXNlck9iamVjdCAkKDwpIDogJCg+KSA7DQogICAgICAgIH0NCiAgICAgICAgZ0dFTkVSQVRF RF9UQVJHRVQoJCg8KSkgPSB0cnVlIDsNCiAgICB9DQp9DQogICAgDQojIGR3YSA2LzQvMDEg LSBhZGRlZCBmb3IgYm9vc3QNCiMgUmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdCBm aWxlIHRhcmdldCBuYW1lcyBnaXZlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGUNCiMgdGFyZ2V0 IG5hbWVzLg0KcnVsZSBvYmplY3QtbmFtZSAjIHNvdXJjZXMuLi4NCnsNCiAgICByZXR1cm4g JCg8OkQ9OlM9JChTVUZPQkopOkc9JChUQVJHRVRfR1JJU1QpKSA7DQp9DQoNCiMgZHdhIDYv NC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBCdWlsZCBhIGdlbmVyYXRlZCBzb3VyY2UgZmls ZSBmcm9tIGlucHV0LXRhcmdldCwgYW5kIGJ1aWxkIHdoYXRldmVyIHRoYXQgZmlsZSBnZW5l cmF0ZXMuDQojIFJldHVybiBhIGxpc3Qgb2YgYWxsIG9iamVjdCB0YXJnZXQgbmFtZXMgdWx0 aW1hdGVseSBnZW5lcmF0ZWQgYnkgcmVjdXJzaXZlbHkNCiMgYnVpbGRpbmcgdGhlIHByb2R1 Y3RzIG9mIGlucHV0LXRhcmdldC4NCnJ1bGUgZ2VuLXNvdXJjZSAjIHNvdXJjZSA9PiBvYmpl Y3QtZmlsZS1uYW1lcw0Kew0KICAgIGxvY2FsIHN1ZmZpeCA9IC5jIDsNCiAgICBpZiAkKDw6 UykgaW4gLmxwcCAueXBwDQogICAgew0KICAgICAgICBzdWZmaXggPSAuY3BwIDsNCiAgICB9 DQogICAgDQogICAgbG9jYWwgaW1tZWRpYXRlLXRhcmdldCA9ICQoPDpEPTpTPSQoc3VmZml4 KTpHPSQoU09VUkNFX0dSSVNUKSkgOw0KICAgICMgbWFrZSBzdXJlIHdlIGRvbid0IHJlZ2Vu ZXJhdGUgc291cmNlcyB0d2ljZS4NCiAgICBpZiAhICQoZ0dFTkVSQVRFRF9UQVJHRVQoJChp bW1lZGlhdGUtdGFyZ2V0KSkpDQogICAgew0KICAgICAgICBzd2l0Y2ggJCg8OlMpDQogICAg ICAgIHsNCiAgICAgICAgIGNhc2UgLmwqIDogTGV4ICQoaW1tZWRpYXRlLXRhcmdldCkgOiAk KDwpIDsgU0VBUkNIIG9uICQoPCkgPSAkKFNFQVJDSF9TT1VSQ0UpIDsNCiAgICAgICAgIGNh c2UgLnkqIDogWWFjYyAkKGltbWVkaWF0ZS10YXJnZXQpIDogJCg8KSA7IFNFQVJDSCBvbiAk KDwpID0gJChTRUFSQ0hfU09VUkNFKSA7DQogICAgICAgIH0NCiAgICAgICAgZ0dFTkVSQVRF RF9UQVJHRVQoJChpbW1lZGlhdGUtdGFyZ2V0KSkgPSB0cnVlIDsNCiAgICB9DQogICAgcmV0 dXJuIFsgT2JqZWN0cyAkKGltbWVkaWF0ZS10YXJnZXQpIF0gOw0KfQ0KDQojIGR3YSA2LzQv MDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgQSBsaXN0IG9mIGFsbCBmaWxlIGV4dGVuc2lvbnMg d2hpY2ggZ2VuZXJhdGUgc291cmNlIGZpbGVzIHdoZW4gYnVpbHQuDQpTT1VSQ0VfR0VORVJB VElOR19FWFRFTlNJT05TID89IC5scHAgLnlwcCAubCAueSA7DQoNCiMgZHdhIDYvNC8wMSAt IG1vZGlmaWVkIGZvciBib29zdA0KIyBCdWlsZCBhbGwgb2JqZWN0IGZpbGVzIGdlbmVyYXRl ZCBieSBidWlsZGluZyAkKDwpLCBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUNCiMgbmFtZXMg b2YgdGhvc2Ugb2JqZWN0IGZpbGUgdGFyZ2V0cy4NCnJ1bGUgT2JqZWN0cw0Kew0KICAgIGxv Y2FsIF9pIF9uIF9yIDsNCg0KDQogICAgZm9yIF9pIGluICQoPCkNCiAgICB7DQogICAgICAg IGlmICQoX2k6UykgaW4gJChTT1VSQ0VfR0VORVJBVElOR19FWFRFTlNJT05TKQ0KICAgICAg ICB7DQogICAgICAgICAgICBfbiA9IFsgZ2VuLXNvdXJjZSAkKF9pKSBdIDsNCiAgICAgICAg fQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIF9uID0gWyBvYmplY3Qt bmFtZSAkKF9pKSBdIDsNCiAgICAgICAgICAgIE9iamVjdCAkKF9uKSA6ICQoX2kpIDsNCiAg ICAgICAgfQ0KICAgICAgICBfciArPSAkKF9uKSA7DQogICAgfQ0KICAgIA0KICAgIHJldHVy biAkKF9yKSA7DQp9DQoNCnJ1bGUgUm1UZW1wcw0Kew0KICAgIFRFTVBPUkFSWSAkKD4pIDsN Cn0NCg0KcnVsZSBTZXR1aWQNCnsNCiAgICBNT0RFIG9uIFsgRkFwcGVuZFN1ZmZpeCAkKDwp IDogJChTVUZFWEUpIF0gPSA0NzExIDsNCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQg Zm9yIGJvb3N0DQpydWxlIFNoZWxsDQp7DQogICAgdHlwZS1ERVBFTkRTIHNoZWxsIDogJCg8 KSA7DQogICAgREVQRU5EUyAkKDwpIDogJCg+KSA7DQogICAgU0VBUkNIIG9uICQoPikgPSAk KFNFQVJDSF9TT1VSQ0UpIDsNCiAgICBNT0RFIG9uICQoPCkgPSAkKFNIRUxMTU9ERSkgOw0K ICAgIENsZWFuIGNsZWFuIDogJCg8KSA7DQogICAgQ2htb2QgJCg8KSA7DQp9DQoNCiMgZHdh IDYvNy8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBzdWJwcm9qZWN0IHBhdGgNCiMNCiMgSW52 b2tlcyBTdWJEaXIgd2l0aCBhIHBhdGggZGVzY3JpcHRpb24NCnJ1bGUgc3VicHJvamVjdA0K ew0KICAgIFN1YkRpciBUT1AgWyBzcGxpdC1wYXRoICQoPCkgXSA7DQp9DQoNCiMgZHdhIDYv MTgvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgcHJvamVjdC1yb290DQojDQojIERlY2xhcmVz IHRoaXMgZGlyZWN0b3J5IHRvIGJlIHRoZSBwcm9qZWN0IHJvb3QuDQpydWxlIHByb2plY3Qt cm9vdCAoICkNCnsNCiAgICBsb2NhbCBwcm9qZWN0LWxvY2F0aW9uIDsNCiAgICBpZiAkKGdU T1ApDQogICAgew0KICAgICAgICBwcm9qZWN0LWxvY2F0aW9uID0gWyByb290LXBhdGhzICQo JChnVE9QKSkgOiBbIFBXRCBdIF0gOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAg ICBwcm9qZWN0LWxvY2F0aW9uID0gWyBQV0QgXSA7DQogICAgfQ0KICAgIGxvY2FsIG5hbWUg Ow0KICAgIG5hbWUgPSAkKFBST0pFQ1QoJChwcm9qZWN0LWxvY2F0aW9uKSkpIDsNCiAgICBu YW1lID89ICQocHJvamVjdC1sb2NhdGlvbjpCKSA7DQogICAgUFJPSkVDVCA9ICQobmFtZSkg Ow0KICAgIGdQUk9KRUNUKCQobmFtZSkpID0gJChwcm9qZWN0LWxvY2F0aW9uKSA7DQogICAg U3ViRGlyIFRPUCA7DQp9DQoNCiMgZ3JhZmlrLg0KIw0KIyBEZWNsYXJlIGVpdGhlciB5b3Vy IG93biBwcm9qZWN0LCBvciBhbiBleHRlcm5hbCBwcm9qZWN0Lg0KIw0KcnVsZSBwcm9qZWN0 ICggbmFtZSA6IGxvY2F0aW9uID8gKQ0Kew0KICAgIGlmICEgJChsb2NhdGlvbikNCiAgICB7 DQogICAgICAgIGdQUk9KRUNUKCQobmFtZSkpID0gJChnUFJPSkVDVCgkKFBST0pFQ1QpKSkg Ow0KICAgICAgICBQUk9KRUNUKCQoZ1BST0pFQ1QoJChuYW1lKSkpKSA9ICQobmFtZSkgOw0K ICAgICAgICBQUk9KRUNUID0gJChuYW1lKSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQog ICAgICAgIGdQUk9KRUNUKCQobmFtZSkpID0gWyByb290LXBhdGhzICQobG9jYXRpb24pIDog WyByb290LXBhdGhzICQoJChnVE9QKSkgOiBbIFBXRCBdIF0gXSA7DQogICAgICAgIGxvY2Fs IFsgcHJvdGVjdC1zdWJwcm9qZWN0IF0gOw0KICAgICAgICBlbnRlci1zdWJwcm9qZWN0IEAk KG5hbWUpIDsNCiAgICB9DQp9DQoNCiMgZ3JhZmlrLg0KIw0KIyBSZXR1cm5zIHRoZSBzZXQg b2YgdmFycyB0byBsb2NhbGl6ZSB0byBwcmV2ZW50IGNoYW5nZXMgZnJvbQ0KIyBhZmZlY3Rp bmcgdGhlIGN1cnJlbnQgcHJvamVjdC4gQWxzbyByZW1lbWJlcnMgdGhlIGN1cnJlbnQgdmFs dWVzDQojIHRvIHVzZSBieSBlbnRlci1zdWJwcm9qZWN0IHRvIHNldCB0aGUgZGVmYXVsdHMg Zm9yIHRoZSBuZXcgdmFycy4NCiMNCnJ1bGUgcHJvdGVjdC1zdWJwcm9qZWN0ICggKQ0Kew0K ICAgIC5UT1AgPSAkKFRPUCkgOw0KICAgIC5UT1BfVE9LRU5TID0gJChUT1BfVE9LRU5TKSA7 DQogICAgLmdUT1AgPSAkKGdUT1ApIDsNCiAgICAuUFJPSkVDVCA9ICQoUFJPSkVDVCkgOw0K ICAgIHJldHVybiBUT1AgVE9QX1RPS0VOUyBnVE9QIFBST0pFQ1QgWyBwcm90ZWN0LXN1YmRp ciBdIDsNCn0NCg0KIyBncmFmaWsuDQojDQojIFNldHMgdXAgdGhlIGVudmlyb25tZW50IGFz IGlmIHRoZSBjb250ZXh0IGlzIGFub3RoZXIgcHJvamVjdCBpbg0KIyBwcmVwYXJhdGlvbiB0 byBpbmNsdWRlIHRoZSBleHRlcm5hbCBwcm9qZWN0cyB0YXJnZXRzLiBUaGlzIGFsc28NCiMg d29ya3MgZm9yIHJlZmVyaW5nIHRvIHRoZSBjdXJyZW50IHByb2plY3QuDQojDQpydWxlIGVu dGVyLXN1YnByb2plY3QgKCBwcm9qZWN0LXBhdGggKQ0Kew0KICAgIFRPUCA9ICQoLlRPUCkg Ow0KICAgIFRPUF9UT0tFTlMgPSAkKC5UT1BfVE9LRU5TKSA7DQogICAgZ1RPUCA9ICQoLmdU T1ApIDsNCiAgICBQUk9KRUNUID0gJCguUFJPSkVDVCkgOw0KICAgIA0KICAgIGxvY2FsIHBy b2plY3QtbmFtZSA9IFsgTUFUQ0ggIl5AKFteL1xcXSspIiA6ICQocHJvamVjdC1wYXRoKSBd IDsNCiAgICBwcm9qZWN0LW5hbWUgPz0gJChQUk9KRUNUKSA7DQogICAgcHJvamVjdC1uYW1l ID89ICIiIDsNCiAgICBsb2NhbCBwcm9qZWN0LXN1YmRpciA9IFsgTUFUQ0ggIl5AW14vXFxd K1svXFxdKC4qKSIgOiAkKHByb2plY3QtcGF0aCkgXSA7DQogICAgbG9jYWwgcHJvamVjdC10 b3AgOw0KICAgIA0KICAgIGlmICQocHJvamVjdC1uYW1lKQ0KICAgIHsNCiAgICAgICAgcHJv amVjdC10b3AgPSBbIHNwbGl0LXBhdGggJChnUFJPSkVDVCgkKHByb2plY3QtbmFtZSkpKSBd IDsNCiAgICAgICAgaWYgJChwcm9qZWN0LXN1YmRpcikNCiAgICAgICAgew0KICAgICAgICAg ICAgcHJvamVjdC10b3AgKz0NCiAgICAgICAgICAgICAgICBbIHNwbGl0LXBhdGggWyByZWxh dGl2ZS1wYXRoICQocHJvamVjdC1zdWJkaXIpIF0gXQ0KICAgICAgICAgICAgICAgIFsgc3Bs aXQtcGF0aCBbIEZTdWJEaXIgWyBzcGxpdC1wYXRoIFsgcmVsYXRpdmUtcGF0aCAkKHByb2pl Y3Qtc3ViZGlyKSBdIF0gXSBdIDsNCiAgICAgICAgfQ0KICAgICAgICBUT1AgPSBbIGpvaW4t cGF0aCAkKHByb2plY3QtdG9wKSBdIDsNCiAgICAgICAgVE9QX1RPS0VOUyA9ICQocHJvamVj dC10b3ApIDsNCiAgICAgICAgZ1RPUCA9IFRPUCA7DQogICAgICAgIFBST0pFQ1QgPSAkKHBy b2plY3QtbmFtZSkgOw0KICAgIH0NCiAgICBwcm9qZWN0LXN1YmRpciA/PSAuIDsNCiAgICAN CiAgICBzdWJwcm9qZWN0ICQocHJvamVjdC1zdWJkaXIpIDsNCiAgICANCiAgICByZXR1cm4g JChwcm9qZWN0LW5hbWUpICQocHJvamVjdC1zdWJkaXIpIDsNCn0NCg0KIyBkd2EgNi83LzAx IC0gYWRkZWQgZm9yIGJvb3N0DQojIHN1YmluY2x1ZGUgcGF0aC4uLg0KIw0KIyBJbnZva2Vz IFN1YkluY2x1ZGUgZm9yIGVhY2ggcGF0aA0KcnVsZSBzdWJpbmNsdWRlDQp7DQogICAgbG9j YWwgZCA7DQogICAgZm9yIGQgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgU3ViSW5jbHVkZSBU T1AgWyBzcGxpdC1wYXRoICQoZCkgXSA7DQogICAgfQ0KfQ0KDQojIGR3YSAxMC82LzAxIC0g YWRkZWQgZm9yIGJvb3N0DQojDQojIHBhdGgtZ2xvYmFsIHZhcmlhYmxlLW5hbWUgOiBwYXRo Li4uIDsNCiMNCiMgaWYgJCh2YXJpYWJsZS1uYW1lKSBpcyB1bnNldCwgc2V0cyB2YXJpYWJs ZS1uYW1lIHRvIHBhdGguLi4NCiMgdmFyaWFibGUtbmFtZSB3aWxsIGJlIGFkanVzdGVkIG9u IGEgcGVyLXN1YnByb2plY3QgYmFzaXMgdG8gcmVmZXIgdG8gdGhlIHNhbWUgcGF0aC4NCnJ1 bGUgcGF0aC1nbG9iYWwNCnsNCiAgICAkKDwpID89ICQoPikgOw0KICAgIGdQQVRIX0dMT0JB TF9WQUxVRSgkKDwpKSA9ICQoJCg8KSkgOw0KICAgIA0KICAgIGlmICEgKCAkKDwpIGluICQo Z1BBVEhfR0xPQkFMUykgKQ0KICAgIHsNCiAgICAgICAgZ1BBVEhfR0xPQkFMUyArPSAkKDwp IDsNCiAgICB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVs ZSBTdWJEaXINCnsNCiAgICBsb2NhbCBfciA7DQoNCiAgICAjDQogICAgIyBTdWJEaXIgVE9Q IGQxIFsgLi4uIF0NCiAgICAjDQogICAgIyBUaGlzIGludHJvZHVjZXMgYSBKYW1maWxlIHRo YXQgaXMgcGFydCBvZiBhIHByb2plY3QgdHJlZSANCiAgICAjIHJvb3RlZCBhdCAkKFRPUCku ICBJdCAob25seSBvbmNlKSBpbmNsdWRlcyB0aGUgcHJvamVjdC1zcGVjaWZpYw0KICAgICMg cnVsZXMgZmlsZSAkKFRPUCkvSmFtcnVsZXMgYW5kIHRoZW4gc2V0cyBzZWFyY2ggJiBsb2Nh dGUgc3R1ZmYuDQogICAgIw0KICAgICMgSWYgdGhlIHZhcmlhYmxlICQoVE9QUlVMRVMpIGlz IHNldCAod2hlcmUgVE9QIGlzIHRoZSBmaXJzdCBhcmcgDQogICAgIyB0byBTdWJEaXIpLCB0 aGF0IGZpbGUgaXMgaW5jbHVkZWQgaW5zdGVhZCBvZiAkKFRPUCkvSmFtcnVsZXMuDQogICAg Iw0KICAgICMgZDEgLi4uIGFyZSB0aGUgZGlyZWN0b3J5IGVsZW1lbnRzIHRoYXQgbGVhZCB0 byB0aGlzIGRpcmVjdG9yeSANCiAgICAjIGZyb20gJChUT1ApLiAgV2UgY29uc3RydWN0IHRo ZSBzeXN0ZW0gZGVwZW5kZW50IHBhdGggZnJvbSB0aGVzZQ0KICAgICMgZGlyZWN0b3J5IGVs ZW1lbnRzIGluIG9yZGVyIHRvIHNldCBzZWFyY2gmbG9jYXRlIHN0dWZmLg0KICAgICMgDQoN CiAgICBpZiAhICQoJCg8WzFdKSkNCiAgICB7DQogICAgICAgIGlmICEgJCg8WzFdKQ0KICAg ICAgICB7DQogICAgICAgICAgICBFWElUIFN1YkRpciBzeW50YXggZXJyb3IgOw0KICAgICAg ICB9DQoNCiAgICAgICAgJCg8WzFdKSA9IFsgRlN1YkRpciAkKDxbMi1dKSBdIDsNCiAgICAg ICAgJCg8WzFdKV9UT0tFTlMgPSBbIHNwbGl0LXBhdGggJCgkKDxbMV0pKSBdIDsNCiAgICAg ICAgZ1RPUCA9ICQoPFsxXSkgOyAjICBub3Qgc3VyZSB3aHkgc29tZW9uZSB3b3VsZCB3YW50 IHRvIHVzZSBhbnl0aGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICMgb3RoZXIgdGhh biBUT1AsIGJ1dCBqdXN0IGluIGNhc2UuLi4NCiAgICB9DQoNCiAgICAjDQogICAgIyBJZiAk KFRPUCkvSmFtcnVsZXMgaGFzbid0IGJlZW4gaW5jbHVkZWQsIGRvIHNvLg0KICAgICMNCg0K ICAgIGxvY2FsIHRvcCA9IFsgcm9vdC1wYXRocyAkKCQoZ1RPUCkpIDogWyBQV0QgXSBdIDsN CiAgICBpZiAhICQoZ0lOQ0xVREVEKCQoSkFNUlVMRVM6Uj0kKHRvcCkpKSkNCiAgICB7DQog ICAgICAgICMgR2F0ZWQgZW50cnkuDQoNCiAgICAgICAgZ0lOQ0xVREVEKCQoSkFNUlVMRVM6 Uj0kKHRvcCkpKSA9IFRSVUUgOw0KDQogICAgICAgICMgSW5jbHVkZSBpdC4NCg0KICAgICAg ICBwcm9qZWN0LXJvb3QgOw0KICAgICAgICBpbmNsdWRlICQoSkFNUlVMRVM6Uj0kKHRvcCkp IDsNCiAgICB9DQoNCiAgICAjIEdldCBwYXRoIHRvIGN1cnJlbnQgZGlyZWN0b3J5IGZyb20g cm9vdCB1c2luZyBTdWJEaXIuDQogICAgIyBTYXZlIGRpciB0b2tlbnMgZm9yIG90aGVyIHBv dGVudGlhbCB1c2VzLg0KICAgIFNVQkRJUl9UT0tFTlMgPSAkKDxbMi1dKSA7DQogICAgDQog ICAgIyBUaGlzIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSdyZSBpbiB0aGUg ZGlyZWN0b3J5IHdoZXJlIGphbSB3YXMNCiAgICAjIGludm9rZWQgZnJvbSBzbyB0aGF0IHdl IGNhbiBtYWtlIGxvY2FsbHkgbmFtZWQgdGFyZ2V0cw0KICAgIGdJTlZPQ0FUSU9OX1NVQkRJ Ul9UT0tFTlMgPz0gJChTVUJESVJfVE9LRU5TKSA7DQogICAgZ0lOVk9DQVRJT05fU1VCRElS X1RPS0VOUyA/PSAkKERPVCkgOw0KDQogICAgIyBTVUJESVIgaXMgdGhlIHBhdGggZnJvbSB0 aGUgaW52b2NhdGlvbiBkaXJlY3RvcnkgdG8gdGhlIHN1YnByb2plY3QNCiAgICAjIGRpcmVj dG9yeS4NCiAgICBTVUJESVIgPSBbIHRva2Vucy10by1zaW1wbGUtcGF0aCAkKCQoZ1RPUClf VE9LRU5TKSAgJChTVUJESVJfVE9LRU5TKSBdIDsNCg0KICAgIFNFQVJDSF9TT1VSQ0UgPSAk KFNVQkRJUikgOw0KDQogICAgIyBUaGlzIHdpbGwgc3RyaXAgb2ZmIGFueSBsZWFkaW5nIGRv dCBvbiBTVUJESVJfVE9LRU5TDQogICAgbG9jYWwgbm9kb3Rfc3ViZGlyID0gWyBzaW1wbGlm eS1wYXRoLXRva2VucyAkKFNVQkRJUl9UT0tFTlMpIF0gOw0KDQogICAgaWYgJChBTExfTE9D QVRFX1RBUkdFVCkgJiYgISAkKGZpcnN0X0FMTF9MT0NBVEVfVEFSR0VUKQ0KICAgIHsNCiAg ICAgICAgbm9ybWFsaXplZF9BTExfTE9DQVRFX1RBUkdFVCA9IFsgam9pbi1wYXRoICQoJChn VE9QKSkgJChBTExfTE9DQVRFX1RBUkdFVCkgXSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7 DQogICAgICAgIG5vcm1hbGl6ZWRfQUxMX0xPQ0FURV9UQVJHRVQgPz0gWyBqb2luLXBhdGgg JCgkKGdUT1ApKSAkKEFMTF9MT0NBVEVfVEFSR0VUKSBdIDsNCiAgICB9DQogICAgZmlyc3Rf QUxMX0xPQ0FURV9UQVJHRVQgPz0gJChBTExfTE9DQVRFX1RBUkdFVCkgOw0KICAgIExPQ0FU RV9TT1VSQ0UgPSBbIEZEaXJOYW1lICQobm9ybWFsaXplZF9BTExfTE9DQVRFX1RBUkdFVCkg JChCSU5fRElSRUNUT1JZKSAkKFBST0pFQ1QpICQobm9kb3Rfc3ViZGlyKSBdIDsNCiAgICBM T0NBVEVfVEFSR0VUID0gJChMT0NBVEVfU09VUkNFKSA7DQogICAgSENBQ0hFRklMRSA9IFsg RkRpck5hbWUgJChub3JtYWxpemVkX0FMTF9MT0NBVEVfVEFSR0VUKSAkKEJJTl9ESVJFQ1RP UlkpIC5qYW1kZXBzIF0gOw0KICAgIA0KICAgIFNPVVJDRV9HUklTVCA9IFsgRkdyaXN0IEAk KFBST0pFQ1QpICQoU1VCRElSX1RPS0VOUykgXSA7DQoNCiAgICAjIFJlc2V0IHBlci1kaXJl Y3RvcnkgY2NmbGFncywgaGRycw0KDQogICAgU1VCRElSQ0NGTEFHUyA9IDsNCiAgICBTVUJE SVJDKytGTEFHUyA9IDsNCg0KICAgICMgVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgcGF0aCBm cm9tIHRoZSBkaXJlY3Rvcnkgb2YgSmFtJ3MgaW52b2NhdGlvbiB0byB0aGUNCiAgICAjIGRp cmVjdG9yeSBvZiB0aGUgY3VycmVudCBzdWJwcm9qZWN0Lg0KICAgIFJFTEFUSVZFX1NVQkRJ Ul9UT0tFTlMgPSBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zICQoJChnVE9QKV9UT0tFTlMpICQo U1VCRElSX1RPS0VOUykgOiAkKERPVCkgXSA7DQogICAgUkVMQVRJVkVfU1VCRElSID0gWyBq b2luLXBhdGggJChSRUxBVElWRV9TVUJESVJfVE9LRU5TKSBdIDsNCg0KICAgIGFkanVzdC1w YXRoLWdsb2JhbHMgOw0KfQ0KDQpydWxlIGluLWludm9jYXRpb24tc3ViZGlyDQp7DQogICAg bG9jYWwgc3ViZGlyLXRva2VucyA9ICQoU1VCRElSX1RPS0VOUykgOw0KICAgIHN1YmRpci10 b2tlbnMgPz0gJChET1QpIDsNCiAgICBpZiAkKHN1YmRpci10b2tlbnMpID0gJChnSU5WT0NB VElPTl9TVUJESVJfVE9LRU5TKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIHRydWUgOw0KICAg IH0NCn0NCg0KIyBUaGVzZSBhcmUgdGhlIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBnZXQgc2V0 IHVwIGJ5IFN1YkRpci4gSWYgeW91IG5lZWQgdG8NCiMgaW52b2tlIFN1YkRpciB0ZW1wb3Jh cmlseSBhbmQgdGhlbiByZXN0b3JlIHRoZW0sIGRlY2xhcmUNCiMgICAgICAgbG9jYWwgJChn U1VCRElSX0dMT0JBTFMpIDsNCmdTVUJESVJfR0xPQkFMUyA9IFNVQkRJUiBTVUJESVJfVE9L RU5TIFNFQVJDSF9TT1VSQ0UgTE9DQVRFX1NPVVJDRSBMT0NBVEVfVEFSR0VUDQogICAgU09V UkNFX0dSSVNUIFJFTEFUSVZFX1NVQkRJUiBSRUxBVElWRV9TVUJESVJfVE9LRU5TIDsgDQoN Cg0KcnVsZSBwcm90ZWN0LXN1YmRpcg0Kew0KICAgIHJldHVybiAkKGdTVUJESVJfR0xPQkFM UykgJChnUEFUSF9HTE9CQUxTKSA7DQp9DQoNCiMgcHJlcGVuZHMgcm9vdCB0byBhbnkgdW5y b290ZWQgZWxlbWVudHMgb2YgcGF0aHMsIGFuZCBzaW1wbGlmaWVzDQpydWxlIHJvb3QtcGF0 aHMgKCBwYXRocyAqIDogcm9vdCApDQp7DQogICAgbG9jYWwgcGF0aCByZXN1bHQgOw0KICAg IGZvciBwYXRoIGluICQocGF0aHMpDQogICAgew0KICAgICAgICBsb2NhbCByb290ZWQgPSAk KHBhdGg6Uj0kKHJvb3QpKSA7DQogICAgICAgIHBhdGggPSBbIHRva2Vucy10by1zaW1wbGUt cGF0aCBbIHNwbGl0LXBhdGggJChyb290ZWQ6Rz0pIF0gXSA7DQogICAgICAgIHBhdGggPSAk KHBhdGg6Rz0kKHJvb3RlZDpHKSkgOw0KICAgICAgICByZXN1bHQgKz0gJChwYXRoKSA7DQog ICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQojIEFkanVzdCBhbGwgcGF0aCBn bG9iYWxzIHNvIHRoYXQgdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3VicHJv amVjdC4NCnJ1bGUgYWRqdXN0LXBhdGgtZ2xvYmFscw0Kew0KICAgICMgY29tcHV0ZSBwYXRo IHRva2VucyBmcm9tIGN1cnJlbnQgc3VicHJvamVjdCB0byByb290DQogICAgbG9jYWwgdG9r ZW5zLXRvLXJvb3QgPSBbIHNwbGl0LXBhdGggWyBGU3ViRGlyICQoU1VCRElSX1RPS0VOUykg XSBdIDsNCiAgICANCiAgICAjIGNvbXB1dGUgcGF0aCB0b2tlbnMgZnJvbSBjdXJyZW50IHN1 YnByb2plY3QgdG8gaW52b2NhdGlvbg0KICAgICMgZGlyZWN0b3J5LiAkKERPVCkgaXMgYWRk ZWQganVzdCBpbiBjYXNlIHdlJ3JlIGJ1aWxkaW5nIGZyb20gdGhlIHByb2plY3QNCiAgICAj IHJvb3QNCiAgICBsb2NhbCB0b2tlbnMtdG8taW52b2NhdGlvbg0KICAgICAgICA9ICQodG9r ZW5zLXRvLXJvb3QpICQoZ0lOVk9DQVRJT05fU1VCRElSX1RPS0VOUykgOw0KICAgICAgICAg DQogICAgbG9jYWwgdmFyaWFibGUgOw0KICAgIGZvciB2YXJpYWJsZSBpbiAkKGdQQVRIX0dM T0JBTFMpDQogICAgew0KICAgICAgICBsb2NhbCBwYXRocyA9ICQoZ1BBVEhfR0xPQkFMX1ZB TFVFKCQodmFyaWFibGUpKSkgOw0KICAgICAgICAkKHZhcmlhYmxlKSA9IDsNCiAgICAgICAg bG9jYWwgcGF0aCA7DQogICAgICAgIGZvciBwYXRoIGluICQocGF0aHMpDQogICAgICAgIHsN CiAgICAgICAgICAgICMgaXMgcGF0aCBhbHJlYWR5IHJvb3RlZD8NCiAgICAgICAgICAgIGlm ICQocGF0aDpSPXgpID0gJChwYXRoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg ICQodmFyaWFibGUpICs9ICQocGF0aCkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGxvY2FsIHRva2VucyA9ICQo dG9rZW5zLXRvLWludm9jYXRpb24pIFsgc3BsaXQtcGF0aCAkKHBhdGgpIF0gOw0KICAgICAg ICAgICAgICAgICQodmFyaWFibGUpICs9IFsgdG9rZW5zLXRvLXNpbXBsZS1wYXRoICQodG9r ZW5zKSBdIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KIyBkd2Eg Ni80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIHN0cmlwLWdyaXN0IHZhbHVlDQojDQojIHN0 cmlwIGFsbCBsZWFkaW5nIGdyaXN0ZWQgZWxlbWVudHMgZnJvbSB2YWx1ZSBhbmQgcmV0dXJu IHRoZSByZXN1bHQuDQpydWxlIHN0cmlwLWdyaXN0DQp7DQogICAgbG9jYWwgeCA9ICQoPDpH PSkgOw0KICAgIGlmICEgJCh4OkcpDQogICAgew0KICAgICAgICByZXR1cm4gJCh4KSA7DQog ICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHJldHVybiBbIHN0cmlwLWdyaXN0ICQo eCkgXSA7DQogICAgfQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMg QnJlYWtzICQoPCkgaW50byBwYXRoIGNvbXBvbmVudHMNCiMgVGhpcyBjb3VsZCBjZXJ0YWlu bHkgYmUgaW1wcm92ZWQgbm93IHRoYXQgd2UgaGF2ZSBEYXZpZCBUdXJuZXIncyByZWd1bGFy IGV4cHJlc3Npb24gZmVhdHVyZXMuDQojDQojIHNwbGl0LXBhdGggPGZvbz5iYXIvPGJlZT5i YXovbXVtYmxlICA9PiA8Zm9vPmJhciA8YmVlPmJheiBtdW1ibGUgDQpydWxlIHNwbGl0LXBh dGgNCnsNCiAgICBsb2NhbCByZXN1bHQgPSAkKGdTUExJVC1QQVRILiQoPCkpIDsNCg0KICAg IGlmICEgJChyZXN1bHQpDQogICAgew0KICAgICAgICBsb2NhbCBwYXJlbnQgPSAkKDw6UCkg Ow0KICAgICAgICBpZiAkKE5UKQ0KICAgICAgICB7DQogICAgICAgICAgICBzd2l0Y2ggJCg8 Okc9KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICMgSXQgdHVybnMgb3V0IHRo YXQgdG8gbWF0Y2ggYSBiYWNrc2xhc2gsIHlvdSBuZWVkIGEgL3F1YWRydXBsZS8gc2xhc2gN CiAgICAgICAgICAgICAgICAjIGluIHRoZSBjYXNlIGNsYXVzZSENCiAgICAgICAgICAgICAg ICBjYXNlICpcXFxcKjoqIDogIyBjb250aW51ZSBzcGxpdHRpbmcNCiAgICAgICAgICAgICAg ICAgIGNhc2UgKjpcXFxcKlxcXFwqIDogICMgY29udGludWUgc3BsaXR0aW5nDQogICAgICAg ICAgICAgICAgICBjYXNlICo6LypcXFxcKiA6ICAjIGNvbnRpbnVlIHNwbGl0dGluZw0KICAg ICAgICAgICAgICAgICAgY2FzZSAqOlxcXFwqLyogOiAgIyBjb250aW51ZSBzcGxpdHRpbmcN CiAgICAgICAgICAgICAgICAgIGNhc2UgKjovKi8qIDogICMgY29udGludWUgc3BsaXR0aW5n DQogICAgICAgICAgICAgICAgICBjYXNlICo6LyogOiByZXN1bHQgPSAkKDwpIDsNCiAgICAg ICAgICAgICAgICBjYXNlICo6XFxcXCogOiByZXN1bHQgPSAkKDwpIDsNCiAgICAgICAgICAg ICAgICBjYXNlICo6IDogcmVzdWx0ID0gJCg8KSA7DQogICAgICAgICAgICB9DQogICAgICAg IH0NCg0KICAgICAgICBpZiAoICEgJCg8OkIpICkgJiYgKCAkKDwpICE9ICQoRE9UKSApICMg aGFuZGxlIHRoZSBjYXNlIHdoZXJlICQoPCkgaXMgYWxsIGdyaXN0Lg0KICAgICAgICB7DQog ICAgICAgICAgICByZXN1bHQgPz0gJCg8OkcpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNl IGlmICggISAkKHBhcmVudDpHPSkgKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQg Pz0gJCg8KSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAg ICAgICBsb2NhbCBwID0gWyBzcGxpdC1wYXRoICQocGFyZW50KSBdIDsNCiAgICAgICAgICAg IGxvY2FsIGIgPSBbIHN0cmlwLWdyaXN0ICQoPCkgXSA7DQogICAgICAgICAgICBwICs9ICQo YjpEPSkgOyAjIGNhbid0IHVzZSA6QiBoZXJlIGJlY2F1c2UgaXQgZGVzdHJveXMgLiBhbmQg Li4NCiAgICAgICAgICAgIHJlc3VsdCA/PSAkKHApIDsNCiAgICAgICAgfQ0KICAgICAgICBn U1BMSVQtUEFUSC4kKDwpID0gJChyZXN1bHQpIDsNCiAgICB9DQogICAgcmV0dXJuICQocmVz dWx0KSA7DQp9DQoNCnJ1bGUgc3BsaXQgKCBzdHJpbmcgc2VwYXJhdG9yICkNCnsNCiAgICBs b2NhbCByZXN1bHQgOw0KICAgIGxvY2FsIHMgPSAkKHN0cmluZykgOw0KICAgIA0KICAgIHdo aWxlICQocykNCiAgICB7DQogICAgICAgIGxvY2FsIG1hdGNoID0gWyBNQVRDSCBeKC4qKSQo c2VwYXJhdG9yKSguKikgOiAkKHMpIF0gOw0KICAgICAgICANCiAgICAgICAgbG9jYWwgdGFp bCA9ICQobWF0Y2hbMl0pIDsNCiAgICAgICAgdGFpbCA/PSAkKHMpIDsNCg0KICAgICAgICBy ZXN1bHQgPSAkKHRhaWwpICQocmVzdWx0KSA7DQogICAgICAgIHMgPSAkKG1hdGNoWzFdKSA7 DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQpydWxlIHNwbGl0LXBhdGgg KCBwYXRoICkNCnsNCiAgICBpZiAhICQoZ1NQTElUX1BBVEhfQ0FDSEUoJChwYXRoKSkpDQog ICAgew0KICAgICAgICBnU1BMSVRfUEFUSF9DQUNIRSgkKHBhdGgpKSA9DQogICAgICAgICAg WyBNQVRDSCAgIl4oWy8kKFNMQVNIKV0rKS4qIiA6ICQocGF0aCkgXSAjIHJvb3Rpbmcgc2xh c2goZXMpLCBpZiBhbnkNCiAgICAgICAgICAgIFsgc3BsaXQgJChwYXRoKSAiWy8kKFNMQVNI KV0iIF0gICAgICAgICMgdGhlIHJlc3QuDQogICAgICAgICAgICAgIDsNCiAgICB9DQogICAg cmV0dXJuICQoZ1NQTElUX1BBVEhfQ0FDSEUoJChwYXRoKSkpIDsNCn0NCg0KIyBkd2EgNi80 LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIHJldmVyc2UgaXRlbTEgaXRlbTIuLi4gDQojDQoj IFJldHVybnMgLi4uaXRlbTIgaXRlbTENCnJ1bGUgcmV2ZXJzZQ0Kew0KICAgIGxvY2FsIHJl c3VsdCA7DQogICAgZm9yIHggaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgcmVzdWx0ID0gJCh4 KSAkKHJlc3VsdCkgOw0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KIyBk d2EgNi8yOC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBzdHJpcC1pbml0aWFsIHRva2Vucy4u LiA6IGlucHV0DQojDQojIGlmIGlucHV0IGJlZ2lucyB3aXRoIHRva2VucywgcmVtb3ZlIHRo ZSBpbml0aWFsIHNlcXVlbmNlIG9mIHRva2VucyBhbmQgcmV0dXJuDQojIHRoZSByZXN0LiBP dGhlcndpc2UgcmV0dXJuIGlucHV0IHVuY2hhbmdlZC4NCnJ1bGUgc3RyaXAtaW5pdGlhbA0K ew0KICAgIGxvY2FsIHJlc3VsdCA9ICQoPikgOw0KICAgIGxvY2FsIHQgOw0KICAgIGxvY2Fs IG1hdGNoZWQgPSB0cnVlIDsNCiAgICBmb3IgdCBpbiAkKDwpDQogICAgew0KICAgICAgICBp ZiAkKG1hdGNoZWQpICYmICggJCh0KSA9ICQocmVzdWx0WzFdKSApDQogICAgICAgIHsNCiAg ICAgICAgICAgIHJlc3VsdCA9ICQocmVzdWx0WzItXSkgOw0KICAgICAgICB9DQogICAgICAg IGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgbWF0Y2hlZCA9IDsNCiAgICAgICAgICAg IHJlc3VsdCA9ICQoPikgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3Vs dCkgOw0KfQ0KDQojIGR3YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgc2ltcGxpZnkt cGF0aC10b2tlbnMgdG9rZW4xIHRva2VuMiAuLi4gdG9rZW5OIDogRE9ULW9wdA0KIw0KIyBS ZW1vdmUgcmVkdW5kYW50IGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIHBhdGggZWxlbWVu dHMNCiMgaWYgRE9ULW9wdCBpcyBzdXBwbGllZCwgZW1wdHkgcmVzdWx0cyBhcmUgcmVwbGFj ZWQgd2l0aA0KIyAkKERPVC1vcHQpLg0KIw0KIyBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zIGEg YiAuIGMgLi4gLi4gZCBlIF0gPT4gYSBkIGUNCiMgWyBzaW1wbGlmeS1wYXRoLXRva2VucyBh IGIgLi4gLi4gLi4gZCBlIF0gID0+IC4uIGQgZQ0KIyBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5z IC4uIC4uIGQgZSA6IHh4eCBdICAgPT4gLi4gLi4gZCBlIChwcm92aWRlZCBUT1AgIT0gLi4v Li4pDQojIFsgc2ltcGxpZnktcGF0aC10b2tlbnMgYSBiIC4uIC4uIDogeHh4IF0gICA9PiB4 eHgNCnJ1bGUgc2ltcGxpZnktcGF0aC10b2tlbnMNCnsNCiAgICBsb2NhbCByZXZlcnNlLXBh dGggPSBbIHJldmVyc2UgJCg8KSBdIDsNCiAgICBsb2NhbCBkb3Rkb3RzIDsNCiAgICBsb2Nh bCByZXN1bHQgOw0KICAgIGxvY2FsIHRva2VuIDsNCiAgICBmb3IgdG9rZW4gaW4gJChyZXZl cnNlLXBhdGgpDQogICAgew0KICAgICAgICBpZiAkKHRva2VuKSA9ICQoRE9UKQ0KICAgICAg ICB7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAkKHRva2VuKSA9ICQoRE9URE9UKQ0K ICAgICAgICB7DQogICAgICAgICAgICBkb3Rkb3RzICs9ICQodG9rZW4pIDsNCiAgICAgICAg fQ0KICAgICAgICBlbHNlIGlmICQoZG90ZG90cykNCiAgICAgICAgew0KICAgICAgICAgICAg ZG90ZG90cyA9ICQoZG90ZG90c1syLV0pIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQog ICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCA9ICQodG9rZW4pICQocmVzdWx0KSA7DQog ICAgICAgIH0NCiAgICB9DQoNCiAgICByZXN1bHQgPSAkKGRvdGRvdHMpICQocmVzdWx0KSA7 DQogICAgcmVzdWx0ID0gWyBzdHJpcC1pbml0aWFsICQoJChnVE9QKV9UT0tFTlMpICQoZ0lO Vk9DQVRJT05fU1VCRElSX1RPS0VOUykgOiAkKHJlc3VsdCkgXSA7DQogICAgcmVzdWx0ID89 ICQoPikgOw0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQpydWxlIHRva2Vucy10by1z aW1wbGUtcGF0aA0Kew0KICAgIHJldHVybiBbIEZEaXJOYW1lIFsgc2ltcGxpZnktcGF0aC10 b2tlbnMgICQoPCkgXSBdIDsNCn0NCg0KcnVsZSBTdWJEaXJDY0ZsYWdzDQp7DQogICAgU1VC RElSQ0NGTEFHUyArPSAkKDwpIDsNCn0NCg0KcnVsZSBTdWJEaXJDKytGbGFncw0Kew0KICAg IFNVQkRJUkMrK0ZMQUdTICs9ICQoPCkgOw0KfQ0KDQpydWxlIFN1YkRpckhkcnMNCnsNCiAg ICBTVUJESVJIRFJTICs9ICQoPCkgOw0KfQ0KDQpydWxlIFN1YkluY2x1ZGUNCnsNCiAgICBs b2NhbCBfcyA7DQoNCiAgICAjIFRoYXQncw0KICAgICMgICAgICAgU3ViSW5jbHVkZSBUT1Ag ZDEgWyBkMiBbIGQzIFsgZDQgXSBdIF0NCiAgICAjDQogICAgIyB0byBpbmNsdWRlIGEgc3Vi ZGlyZWN0b3J5J3MgSmFtZmlsZS4NCg0KICAgIGlmICEgJCgkKDxbMV0pKQ0KICAgIHsNCiAg ICAgICAgRVhJVCBUb3AgbGV2ZWwgb2Ygc291cmNlIHRyZWUgaGFzIG5vdCBiZWVuIHNldCB3 aXRoICQoPFsxXSkgOw0KICAgIH0NCg0KICAgIF9zID0gWyBGRGlyTmFtZSAkKDxbMi1dKSBd IDsNCg0KICAgICMgcHJvdGVjdCB2YXJpYWJsZXMgZnJvbSBiZWluZyBwZXJtYW5lbnRseSBz ZXQgYnkgU3ViRGlyIGludm9jYXRpb25zDQogICAgIyBpbiBpbmNsdWRlZCBmaWxlcy4NCiAg ICBsb2NhbCBwcm9qZWN0ID0gJChQUk9KRUNUKSA7DQogICAgbG9jYWwgWyBwcm90ZWN0LXN1 YmRpciBdIDsNCiAgICBQUk9KRUNUID0gJChwcm9qZWN0KSA7DQogICAgbG9jYWwgamFtZmls ZS1wYXRoDQogICAgICAgID0gWyB0b2tlbnMtdG8tc2ltcGxlLXBhdGgNCiAgICAgICAgICAg IFsgc3BsaXQtcGF0aCAkKEpBTUZJTEU6RD0kKF9zKTpSPSQoJCg8WzFdKSkpIF0gXSA7DQog ICAgbG9hZC1qYW1maWxlcyAkKGphbWZpbGUtcGF0aCkgOw0KfQ0KDQojIExvYWQgYSB1c2Vy J3MgSmFtZmlsZShzKS4NCiMNCnJ1bGUgbG9hZC1qYW1maWxlcyAoIGphbWZpbGVzICogKQ0K ew0KICAgICMgRmlyc3Qgd2UgbG9hZCB0aGUgSmFtZmlsZXMgd2l0aG91dCBnZW5lcmF0aW9u IG9mIG1haW4gdGFyZ2V0cyBzbyB0aGF0DQogICAgIyBkZXBlbmRlbmNpZXMgYXJlIHByZWxv YWRlZC4gVGhlbiB3ZSByZWxvYWQgdGhlIGZpbGVzIHdpdGggdGFyZ2V0DQogICAgIyBnZW5l cmF0aW9uIGVuYWJsZWQuDQogICAgDQogICAgbG9jYWwgamFtZmlsZSA7DQogICAgbG9jYWwg YXMtZGVwZW5kYW50ID0gJChnSU5fTElCX0lOQ0xVREUpIDsNCiAgICBsb2NhbCBnSU5fTElC X0lOQ0xVREUgOw0KICAgIA0KICAgIGdJTl9MSUJfSU5DTFVERSA9IFRSVUUgOw0KICAgIGZv ciBqYW1maWxlLXBhdGggaW4gJChqYW1maWxlcykNCiAgICB7DQogICAgICAgIGlmICEgJChn SU5DTFVERURfQVNfREVQRU5EQU5UKCQoamFtZmlsZS1wYXRoKSkpDQogICAgICAgIHsNCiAg ICAgICAgICAgIGdJTkNMVURFRF9BU19ERVBFTkRBTlQoJChqYW1maWxlLXBhdGgpKSA9IFRS VUUgOw0KICAgICAgICAgICAgaW5jbHVkZSAkKGphbWZpbGUtcGF0aCkgOw0KICAgICAgICB9 DQogICAgfQ0KICAgIA0KICAgIGlmICEgJChhcy1kZXBlbmRhbnQpDQogICAgew0KICAgICAg ICBnSU5fTElCX0lOQ0xVREUgPSA7DQogICAgICAgIGZvciBqYW1maWxlLXBhdGggaW4gJChq YW1maWxlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgISAkKGdJTkNMVURFRCgkKGph bWZpbGUtcGF0aCkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdJTkNMVURF RCgkKGphbWZpbGUtcGF0aCkpID0gVFJVRSA7DQogICAgICAgICAgICAgICAgaW5jbHVkZSAk KGphbWZpbGUtcGF0aCkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0K DQpydWxlIFVuZGVmaW5lcw0Kew0KICAgIFVOREVGUyBvbiBbIEZBcHBlbmRTdWZmaXggJCg8 KSA6ICQoU1VGRVhFKSBdICs9ICQoVU5ERUZGTEFHKSQoPikgOw0KfQ0KDQpydWxlIFVzZXJP YmplY3QNCnsNCiAgICBFWElUICJVbmtub3duIHN1ZmZpeCBvbiIgJCg+KSAiLSBzZWUgVXNl ck9iamVjdCBydWxlIGluIEphbWZpbGUoNSkuIiA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1v ZGlmaWVkIGZvciBib29zdA0KcnVsZSBZYWNjDQp7DQogICAgbG9jYWwgX2ggOw0KDQogICAg IyBDYW4ndCBqdXN0IHJlcGxhY2UgLmNwcCB3aXRoIC5oLCBiZWNhdXNlIGJpc29uIHNlZW1z IHRvIGdlbmVyYXRlIGEgLmNwcC5oIGZpbGUNCiAgICBfaCA9ICQoPCkuaCA7DQoNCiAgICAj IFNvbWUgcGxhY2VzIGRvbid0IGhhdmUgYSB5YWNjLg0KDQogICAgTWFrZUxvY2F0ZSAkKDwp ICQoX2gpIDogJChMT0NBVEVfU09VUkNFKSA7DQogICAgU0VBUkNIIG9uICQoPCkgJChfaCkg PSAkKExPQ0FURV9TT1VSQ0UpIDsNCg0KICAgIGlmICQoWUFDQykNCiAgICB7DQogICAgICAg IERFUEVORFMgJCg8KSAkKF9oKSA6ICQoPikgOw0KDQogICAgICAgICMgaWYgWUFDQyBjYW4g YWNjZXB0IGFuIG91dHB1dCBmaWxlLCB3ZSdsbCBqdXN0IGdlbmVyYXRlIHRoZSBmaWxlIHRo ZXJlLg0KICAgICAgICBZQUNDRklMRVMgb24gJCg8KSAkKF9oKSA9IFsgam9pbi1wYXRoICQo TE9DQVRFX1NPVVJDRSkgJCg8WzFdKSBdIDsNCiAgICAgICAgDQogICAgICAgIFlhY2MxICQo PCkgJChfaCkgOiAkKD4pIDsNCiAgICAgICAgDQogICAgICAgIGlmICEgJChZQUNDX09VVFBV VCkNCiAgICAgICAgew0KICAgICAgICAgICAgWWFjY012ICQoPCkgJChfaCkgOiAkKD4pIDsN CiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQ2xlYW4gY2xlYW4gOiAkKDwpICQoX2gp IDsNCiAgICB9DQoNCiAgICAjIG1ha2Ugc3VyZSBzb21lb25lIGluY2x1ZGVzICQoX2gpIGVs c2UgaXQgd2lsbCBiZQ0KICAgICMgYSBkZWFkbHkgaW5kZXBlbmRlbnQgdGFyZ2V0DQoNCiAg ICBJTkNMVURFUyAkKDwpIDogJChfaCkgOw0KfQ0KDQpydWxlIHJlbWVtYmVyLWJpbmRpbmcg KCB0YXJnZXQgOiBib3VuZC1wYXRoICkgew0KICAgIGdCSU5ESU5HKCQodGFyZ2V0KSkgPSAk KGJvdW5kLXBhdGgpIDsNCn0NCg0KIw0KIyBVdGlsaXR5IHJ1bGVzOyBubyBzaWRlIGVmZmVj dHMgb24gdGhlc2UNCiMNCg0KcnVsZSBGR3Jpc3QNCnsNCiAgICAjIFR1cm4gaW5kaXZpZHVh bCBlbGVtZW50cyBpbiAkKDwpIGludG8gZ3Jpc3QuDQoNCiAgICBsb2NhbCBfZyBfaSA7DQoN CiAgICBfZyA9ICQoPFsxXSkgOw0KDQogICAgZm9yIF9pIGluICQoPFsyLV0pDQogICAgew0K ICAgICAgICBfZyA9ICQoX2cpISQoX2kpIDsNCiAgICB9DQoNCiAgICByZXR1cm4gJChfZykg Ow0KfQ0KDQpydWxlIEZHcmlzdEZpbGVzIA0Kew0KICAgIGlmICEgJChTT1VSQ0VfR1JJU1Qp DQogICAgew0KICAgICAgICByZXR1cm4gJCg8KSA7DQogICAgfQ0KICAgIGVsc2UgDQogICAg ew0KICAgICAgICByZXR1cm4gJCg8Okc9JChTT1VSQ0VfR1JJU1QpKSA7DQogICAgfQ0KfQ0K DQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCnJ1bGUgRkdyaXN0U291cmNl RmlsZXMNCnsNCiAgICAjIFByb2R1Y2Ugc291cmNlIGZpbGUgbmFtZSBuYW1lIHdpdGggZ3Jp c3QgaW4gaXQsIA0KICAgICMgaWYgU09VUkNFX0dSSVNUIGlzIHNldC4NCg0KICAgICMgTGVh dmUgaGVhZGVyIGZpbGVzIGFsb25lLCBiZWNhdXNlIHRoZXkgaGF2ZSBhIGdsb2JhbA0KICAg ICMgdmlzaWJpbGl0eS4NCg0KICAgIGlmICEgJChTT1VSQ0VfR1JJU1QpDQogICAgew0KICAg ICAgICByZXR1cm4gJCg8KSA7DQogICAgfQ0KICAgIGVsc2UgDQogICAgew0KICAgICAgICBs b2NhbCBfaSBfbyA7DQoNCiAgICAgICAgZm9yIF9pIGluICQoPCkNCiAgICAgICAgew0KICAg ICAgICAgICAgc3dpdGNoICQoX2kpDQogICAgICAgICAgICB7DQogICAgICAgICAgICBjYXNl ICouaCA6ICAgICAgX28gKz0gJChfaSkgOw0KICAgICAgICAgICAgY2FzZSAqLmhwcCA6ICAg ICAgX28gKz0gJChfaSkgOw0KICAgICAgICAgICAgY2FzZSAqIDogICAgICAgIF9vICs9ICQo X2k6Rz0kKFNPVVJDRV9HUklTVCkpIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQog ICAgICAgIHJldHVybiAkKF9vKSA7DQogICAgfQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBtb2Rp ZmllZCBmb3IgYm9vc3QNCiMgam9pbiB2YWx1ZXMuLi4gOiBbc2VwYXJhdG9yXQ0KIw0KIyBQ YXN0ZXMgdmFsdWVzIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgbGlzdCBlbGVtZW50LCBzZXBh cmF0ZWQgYnkgYW4gb3B0aW9uYWwgc2VwYXJhdG9yLg0KcnVsZSBqb2luICggdmFsdWVzICog OiBzZXAgPyApDQp7DQogICAgc2VwID89ICIiIDsNCiAgICByZXR1cm4gJCh2YWx1ZXM6Sj0k KHNlcCkpIDsNCn0NCg0KIyBHaXZlbiAkKDwpLCB0aGUgdG9rZW5zIGNvbXByaXNpbmcgYSBy ZWxhdGl2ZSBwYXRoIGZyb20gRDEgdG8gYSBzdWJkaXJlY3RvcnkNCiMgRDIsIHJldHVybiB0 aGUgcmVsYXRpdmUgcGF0aCBmcm9tIEQyIHRvIEQxLCB1c2luZyAuLi8uLi8gZXRjLg0KcnVs ZSBGU3ViRGlyDQp7DQogICAgbG9jYWwgX2QgOw0KDQogICAgaWYgISAkKDxbMV0pIA0KICAg IHsNCiAgICAgICAgX2QgPSAkKERPVCkgOw0KICAgIH0gDQogICAgZWxzZQ0KICAgIHsNCiAg ICAgICAgX2QgPSAkKERPVERPVCkgOw0KDQogICAgICAgIGxvY2FsIF9pIDsNCiAgICAgICAg Zm9yIF9pIGluICQoPFsyLV0pDQogICAgICAgIHsNCiAgICAgICAgICAgIF9kID0gJChfZDpS PSQoRE9URE9UKSkgOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuICQoX2QpIDsN Cn0NCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIFR1cm4gaW5kaXZpZHVh bCBlbGVtZW50cyBpbiAkKDwpIGludG8gYSB1c2FibGUgcGF0aC4gSWYgJCg8KSBpcyBlbXB0 eSwgJCg+KSBpcw0KIyByZXR1cm5lZC4NCnJ1bGUgam9pbi1wYXRoDQp7DQogICAgbG9jYWwg X3MgX2kgOw0KDQogICAgaWYgISAkKDwpDQogICAgew0KICAgICAgICBfcyA9ICQoPikgOw0K ICAgIH0NCiAgICBlbHNlIGlmICQoVk1TKQ0KICAgIHsNCiAgICAgICAgIyBUaGlzIGhhbmRs ZXMgdGhlIGZvbGxvd2luZyBjYXNlczoNCiAgICAgICAgIyAgIGEgLT4gWy5hXQ0KICAgICAg ICAjICAgYSBiIGMgLT4gWy5hLmIuY10NCiAgICAgICAgIyAgIHg6IC0+IHg6DQogICAgICAg ICMgICB4OiBhIC0+IHg6W2FdDQogICAgICAgICMgICB4OlthXSBiIC0+IHg6W2EuYl0NCg0K ICAgICAgICBzd2l0Y2ggJCg8WzFdKQ0KICAgICAgICB7DQogICAgICAgIGNhc2UgKjoqIDog X3MgPSAkKDxbMV0pIDsNCiAgICAgICAgY2FzZSBcXFsqXFxdIDogX3MgPSAkKDxbMV0pIDsN CiAgICAgICAgY2FzZSAqIDogX3MgPSBbLiQoPFsxXSldIDsNCiAgICAgICAgfQ0KDQogICAg ICAgIGZvciBfaSBpbiBbLiQoPFsyLV0pXQ0KICAgICAgICB7DQogICAgICAgICAgICBfcyA9 ICQoX2k6Uj0kKF9zKSkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYgJChNQUMp DQogICAgew0KICAgICAgICBfcyA9ICQoRE9UKSA7DQoNCiAgICAgICAgZm9yIF9pIGluICQo PCkNCiAgICAgICAgew0KICAgICAgICAgICAgX3MgPSAkKF9pOlI9JChfcykpIDsNCiAgICAg ICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBfcyA9ICQoPFsxXSkgOw0K ICAgICAgICBsb2NhbCBfciA9ICQoPFsyLV0pIDsNCg0KICAgICAgICAjIEphbSBkb2Vzbid0 IGhhbmRsZSB0aGUgcm9vdCBkaXJlY3RvcnkgcHJvcGVybHkNCiAgICAgICAgaWYgJChfcykg aW4gLyAkKFNMQVNIKQ0KICAgICAgICB7DQogICAgICAgICAgICBfcyA9ICQoX3MpJChfclsx XSkgOw0KICAgICAgICAgICAgX3IgPSAkKF9yWzItXSkgOw0KICAgICAgICB9DQogICAgICAg IA0KICAgICAgICBmb3IgX2kgaW4gJChfcikNCiAgICAgICAgew0KICAgICAgICAgICAgX3Mg PSAkKF9pOlI9JChfcykpIDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiAkKF9z KSA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBGRGly TmFtZQ0Kew0KICAgICMgVHVybiBpbmRpdmlkdWFsIGVsZW1lbnRzIGluICQoPCkgaW50byBh IHVzYWJsZSBwYXRoLg0KICAgIHJldHVybiBbIGpvaW4tcGF0aCAkKDwpIDogJChET1QpIF0g Ow0KfQ0KDQoNCnJ1bGUgX21ha2VDb21tb24NCnsNCiAgICAjIHN0cmlwIGNvbW1vbiBpbml0 aWFsIGVsZW1lbnRzDQoNCiAgICBpZiAkKCQoPClbMV0pICYmICQoJCg8KVsxXSkgPSAkKCQo PilbMV0pDQogICAgew0KICAgICAgICAkKDwpID0gJCgkKDwpWzItXSkgOw0KICAgICAgICAk KD4pID0gJCgkKD4pWzItXSkgOw0KICAgICAgICBfbWFrZUNvbW1vbiAkKDwpIDogJCg+KSA7 DQogICAgfQ0KfQ0KDQoNCnJ1bGUgRlJlbFBhdGgNCnsNCiAgICBsb2NhbCBfbCBfciA7DQoN CiAgICAjIGZpcnN0IHN0cmlwIG9mZiBjb21tb24gcGFydHMNCg0KICAgIF9sID0gJCg8KSA7 DQogICAgX3IgPSAkKD4pIDsNCg0KICAgIF9tYWtlQ29tbW9uIF9sIDogX3IgOw0KDQogICAg IyBub3cgbWFrZSBwYXRoIHRvIHJvb3QgYW5kIHBhdGggZG93bg0KDQogICAgX2wgPSBbIEZT dWJEaXIgJChfbCkgXSA7DQogICAgX3IgPSBbIEZEaXJOYW1lICQoX3IpIF0gOw0KDQogICAg IyBDb25jYXRlbmF0ZSBhbmQgc2F2ZQ0KDQogICAgIyBYWFggVGhpcyBzaG91bGQgYmUgYmV0 dGVyDQoNCiAgICBpZiAkKF9yKSA9ICQoRE9UKSB7DQogICAgICAgIHJldHVybiAkKF9sKSA7 DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICQoX3I6Uj0kKF9sKSkgOw0KICAgIH0N Cn0NCg0KIyBkd2EgNi8xNy8wMSAtIG1vZGlmaWVkIGZvciBib29zdCB0byBoYW5kbGUgbXVs dGlwbGUgc3VmZml4ZXMNCnJ1bGUgRkFwcGVuZFN1ZmZpeA0Kew0KICAgIyBFLmcuLCAiRkFw cGVuZFN1ZmZpeCB5YWNjIGxleCBmb28uYmF0IDogJChTVUZFWEUpIDsiDQogICAjIHJldHVy bnMgKHlhY2MsbGV4LGZvby5iYXQpIG9uIFVuaXggYW5kIA0KICAgIyAoeWFjYy5leGUsbGV4 LmV4ZSxmb28uYmF0KSBvbiBOVC4NCg0KICAgIGlmICQoPikNCiAgICB7DQogICAgICAgIGxv Y2FsIF9pIF9vIDsNCg0KICAgICAgICBmb3IgX2kgaW4gJCg8KQ0KICAgICAgICB7DQogICAg ICAgICAgICBpZiAkKF9pOlMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgX28g Kz0gJChfaSkgJChfaTpTPSQoPlsyLV0pKSA7DQogICAgICAgICAgICB9DQogICAgICAgICAg ICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgX28gKz0gJChfaTpTPSQo PikpIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJChfbykg Ow0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICByZXR1cm4gJCg8KSA7DQogICAg fQ0KfQ0KDQpydWxlIHVubWFrZURpcg0Kew0KICAgIGlmICQoPlsxXTpEKSAmJiAkKD5bMV06 RCkgIT0gJCg+WzFdKSAmJiAkKD5bMV06RCkgIT0gXFxcXCANCiAgICB7DQogICAgICAgIHVu bWFrZURpciAkKDwpIDogJCg+WzFdOkQpICQoPlsxXTpCUykgJCg+WzItXSkgOw0KICAgIH0N CiAgICBlbHNlDQogICAgew0KICAgICAgICAkKDwpID0gJCg+KSA7DQogICAgfQ0KfQ0KDQoj DQojIEFjdGlvbnMNCiMNCg0KIw0KIyBGaXJzdCB0aGUgZGVmYXVsdHMNCiMNCg0KYWN0aW9u cyBBcw0Kew0KICAgICQoQVMpICQoQVNGTEFHUykgLUkkKEhEUlMpIC1vICQoPCkgJCg+KQ0K fQ0KDQphY3Rpb25zIENoZ3JwDQp7DQogICAgY2hncnAgJChHUk9VUCkgJCg8KQ0KfQ0KDQph Y3Rpb25zIENobW9kMQ0Kew0KICAgICQoQ0hNT0QpICQoTU9ERSkgIiQoPCkiDQp9DQoNCmFj dGlvbnMgQ2hvd24NCnsNCiAgICBjaG93biAkKE9XTkVSKSAkKDwpDQp9DQoNCmFjdGlvbnMg cGllY2VtZWFsIHRvZ2V0aGVyIGV4aXN0aW5nIENsZWFuDQp7DQogICAgJChSTSkgIiQoPiki ICQoTlVMTF9PVVQpDQp9DQoNCmFjdGlvbnMgRmlsZQ0Kew0KICAgICQoQ1ApICIkKD4pIiAi JCg8KSIgJChOVUxMX09VVCkNCn0NCg0KYWN0aW9ucyBGaWxlQ2xvbmUNCnsNCiAgICAkKENM T05FKSAiJCg+KSIgIiQoPCkiICQoTlVMTF9PVVQpDQp9DQoNCmFjdGlvbnMgR2VuRmlsZTEN CnsNCiAgICAkKD5bMV0pICQoPCkgJCg+WzItXSkNCn0NCg0KYWN0aW9ucyBGb3J0cmFuDQp7 DQogICAgJChGT1JUUkFOKSAkKEZPUlRSQU5GTEFHUykgLW8gJCg8KSAkKD4pDQp9DQoNCmFj dGlvbnMgSGFyZExpbmsNCnsNCiAgICAkKFJNKSAiJCg8KSIgMiQoTlVMTF9PVVQpICQoTlVM TF9PVVQpDQogICAgJChMTikgIiQoPikiICIkKDwpIiAkKE5VTExfT1VUKQ0KfQ0KDQphY3Rp b25zIEluc3RhbGwNCnsNCiAgICAkKENQKSAkKD4pICQoPCkgDQp9DQoNCiMgZHdhIDYvNC8w MSAtIG1vZGlmaWVkIGZvciBib29zdA0KYWN0aW9ucyB0b2dldGhlciBMZXgNCnsNCiAgICAk KExFWCkgJChMRVhGTEFHUykgJChMRVhfT1VUUFVUKSQoPCkgJCg+KQ0KfQ0KDQojIGR3YSA2 LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgTGV4TXYNCnsN CiAgICAkKE1WKSBsZXgueXkuYyAkKDwpDQp9DQoNCmFjdGlvbnMgTWtEaXIxDQp7DQogICAg JChNS0RJUikgIiQoPCkiDQp9DQoNCmFjdGlvbnMgdG9nZXRoZXIgUmFubGliDQp7DQogICAg JChSQU5MSUIpICIkKDwpIg0KfQ0KDQphY3Rpb25zIHF1aWV0bHkgdXBkYXRlZCBwaWVjZW1l YWwgdG9nZXRoZXIgUm1UZW1wcw0Kew0KICAgICQoUk0pICIkKD4pIg0KfQ0KDQphY3Rpb25z IFNoZWxsDQp7DQogICAgJChBV0spICcNCiAgICAgICAgICAgIE5SID09IDEgeyBwcmludCAi JChTSEVMTEhFQURFUikiIH0NCiAgICAgICAgICAgIE5SID09IDEgJiYgL15bIzpdLyB7IG5l eHQgfQ0KICAgICAgICAgICAgL14jIy8geyBuZXh0IH0NCiAgICAgICAgICAgIHsgcHJpbnQg fQ0KICAgICcgPCAkKD4pID4gJCg8KQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBm b3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgWWFjYzENCnsNCiAgICAkKFlBQ0MpICQoWUFD Q0ZMQUdTKSAkKFlBQ0NfT1VUUFVUKSQoPFsxXSkgJCg+KQ0KfQ0KDQojIGR3YSA2LzQvMDEg LSBtb2RpZmllZCBmb3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgWWFjY012DQp7DQogICAg JChNVikgJChZQUNDRklMRVMpLmMgJCg8WzFdKQ0KICAgICQoTVYpICQoWUFDQ0ZJTEVTKS5o ICQoPFsyXSkNCn0NCg0KIyBkd2EgNi80LzAxIC0ga2lsbGVkIGFsbCBwbGF0Zm9ybS1zcGVj aWZpYyBhY3Rpb25zIGZvciBib29zdA0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3Ig Ym9vc3QNCmFjdGlvbnMgdG9nZXRoZXIgWWFjYy1maXgtbGluZS1kaXJlY3RpdmVzDQp7DQog ICAgJChZQUNDX0ZJWF9MSU5FUykgJCg8KSA+ICQoPCkNCn0NCg== --------------070906060407020908080708 Content-Type: text/plain; name="boost-base.jam" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="boost-base.jam" I34gQ29weXJpZ2h0IDIwMDItMjAwNCBSZW5lIFJpdmVyYS4NCiN+IENvcHlyaWdodCAyMDAx LTIwMDQgRGF2aWQgQWJyYWhhbXMuDQojfiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuDQojfiAoU2VlIGFjY29tcGFueWluZyBm aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf MC50eHQpDQoNCiMgIChDKSBDb3B5cmlnaHQgRGF2aWQgQWJyYWhhbXMgYW5kIENhcmxvcyBQ aW50byBDb2VsaG8gMjAwMS4gUGVybWlzc2lvbiB0bw0KIyAgY29weSwgdXNlLCBtb2RpZnks IHNlbGwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVk IHRoaXMNCiMgIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiBUaGlz IHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyINCiMgIHdpdGhvdXQgZXhwcmVzcyBvciBp bXBsaWVkIHdhcnJhbnR5LCBhbmQgd2l0aCBubyBjbGFpbSBhcyB0byBpdHMgc3VpdGFiaWxp dHkNCiMgIGZvciBhbnkgcHVycG9zZS4NCiMNCiMgSmFtcnVsZXMgZmlsZSBieSBEYXZpZCBB YnJhaGFtcyAoYWJyYWhhbXNAbWVkaWFvbmUubmV0KSBhbmQgQ2FybG9zIFBpbnRvDQojIENv ZWxobyAoY2ZzcGNAYWx0cmFicm9hZGJhbmQuY29tKS4NCg0KIyBOb3RlcyBvbiB0aGUgZGVz aWduIG9mIHRoZSBzeXN0ZW06DQojDQojIFRoaXMgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHN1 cHBvcnQgYnVpbGRpbmcgdGhlICJzYW1lIiB0YXJnZXRzIHdpdGggbXVsdGlwbGUNCiMgYnVp bGQgdG9vbCBzdWl0ZXMgKGUuZy4gbXN2YywgZ2NjLC4uLikgIGFuZCBidWlsZCB2YXJpYW50 cyAoZS5nLiBkZWJ1ZywNCiMgcmVsZWFzZS4uLikuIEFsdGhvdWdoIGl0IGN1cnJlbnRseSB2 YXJpZXMgYWNyb3NzIHR3byBkaW1lbnNpb25zLCBpdCBzaG91bGQNCiMgdHJpdmlhbGx5IHN1 cHBvcnQgZXh0ZW5zaW9uIHRvIHRocmVlIG9yIG1vcmUsIGUuZy4gaW4gY2FzZSBvZiBjcm9z cy1wbGF0Zm9ybQ0KIyBidWlsZHMuIFRoZSB3b3JkICJzYW1lIiBpcyB3cml0dGVuIGluIHF1 b3RlcyBhYm92ZSBiZWNhdXNlIGludGVybmFsbHksDQojIHNlcGFyYXRlIHRhcmdldHMgYXJl IGdlbmVyYXRlZCBmb3IgZWFjaCB1bmlxdWUgdG9vbHNldC9idWlsZC12YXJpYW50DQojIGNv bWJpbmF0aW9uLg0KIw0KIyBTcGVjaWZpY3Mgb2YgYnVpbGQgdG9vbCBzdWl0ZXMgYXJlIHNw ZWNpZmllZCBpbiBmaWxlcyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtDQojICI8bmFtZT4tdG9v bHMuamFtIiwgd2hlcmUgPG5hbWU+IGlzIHRoZSBuYW1lIHVzZWQgdG8gaWRlbnRpZnkgdGhl IHRvb2wgc3VpdGUuDQoNCiMgV29ya2Fyb3VuZHMgZm9yIEphbSBsaW1pdGF0aW9uczoNCiMN CiMgMS4gSmFtIHN1cHBvcnRzIHNvbWV0aGluZyBsaWtlIHRoZSBzZXR0aW5nIG9mIGF0dHJp YnV0ZXMgb24gdGFyZ2V0cyB1c2luZyB0aGUNCiMgICAgc3ludGF4Og0KIyAgICAgICA8bmFt ZT4gb24gPHRhcmdldD4gPSA8ZXhwcmVzc2lvbj4NCiMNCiMgICAgVGhpcyBmYWNpbGl0eSBp cyB1c2VkIHRvIGNvbnRyb2wgYnVpbGQgYWN0aW9ucyBmb3IgaW5kaXZpZHVhbCB0YXJnZXRz DQojICAgICh0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGVzIHRha2UgcHJlY2VkZW5jZSBvdmVy IGdsb2JhbCBvbmVzIHdoZW4gYnVpbGQNCiMgICAgYWN0aW9ucyAjIGFyZSBleGVjdXRlZCku IEFuIG9idmlvdXMgYXBwcm9hY2ggd291bGQgYmUgdG8gdXNlIHRhcmdldA0KIyAgICBhdHRy aWJ1dGVzIHRvIGhvbGQgIyBwcm9wZXJ0aWVzIG9mIGJ1aWxkIHRvb2xzIChlLmcuIHdoZXJl IHRvIGZpbmQgdGhlDQojICAgIHN0YW5kYXJkIGluY2x1ZGVzKS4gICMgVW5mb3J0dW5hdGVs eSwgYWx0aG91Z2ggeW91IGNhbiB3cml0ZSB0YXJnZXQNCiMgICAgYXR0cmlidXRlcywgdGhl cmUgaXMgbm8gd2F5IHRvICMgcmVhZCB0aGVtLiBJbnN0ZWFkLCB3ZSB0YWtlIGFkdmFudGFn ZSBvZg0KIyAgICB0d28gcHJvcGVydGllcyBvZiBKYW06DQojDQojICAgIGEuIEEgdmFyaWFi bGUgbmFtZSBjYW4gYmUgZm9ybWVkIGJ5IGV2YWx1YXRpbmcgYW4gZXhwcmVzc2lvbi4gRm9y IGV4YW1wbGUsDQojICAgICAgIHRoZSBmb2xsb3dpbmcgcnVsZSwgYXBwZW5kcyBGT09CQVIg dG8gaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGZvcm0gdGhlDQojICAgICAgIG5hbWUgb2YgYSBu ZXcgdmFyaWFibGUsIHdoaWNoIGlzIGdpdmVuIHRoZSB2YWx1ZSAiYmF6Ig0KIw0KIyAgICAg ICAgICBydWxlIFggeyAkKDEpRk9PQkFSID0gYmF6IDsgfQ0KIw0KIyAgICBiLiBBbnkgY2hh cmFjdGVyIGlzIGFsbG93ZWQgaW4gYSB2YXJpYWJsZSBuYW1lLiBTbywgYWx0aG91Z2ggdGhl eSBhcmUNCiMgICAgICAgYWN0dWFsbHkgZ2xvYmFsIHZhcmlhYmxlcywgd2UgY2FuIGZvcm0g bmFtZXMgbGlrZSA8bmFtZT4uYysrLWZsYWdzIHRodXM6DQojICAgICAgIA0KIyAgICAgICAg ICBDKytGTEFHUyA9ICQoJCgxKS5jKystZmxhZ3MpICMgR2V0IHRoZSBjKystZmxhZ3MgImF0 dHJpYnV0ZSIgZnJvbSAkKDEpDQojDQojIDIuIFRoZXJlIGlzIG5vIHdheSB0byBjYWxsIGEg cnVsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZQ0KIyAgICBvdGhlciB0aGFu IGJ5IHVzaW5nIGEgc3dpdGNoIHN0YXRlbWVudC4gQmVjYXVzZSB0aGF0IGFwcHJvYWNoIHJl cXVpcmVzDQojICAgIGludHJ1c2l2ZSBjaGFuZ2VzIHRvIHJ1bGVzIHdoZW4gdGhlIHN5c3Rl bSBpcyBleHRlbmRlZCwgd2UgaGF2ZSBhdm9pZGVkDQojICAgIGl0LiBJbnN0ZWFkLCB3ZSBo YXZlIHRha2VuIGFkdmFudGFnZSBvZiB0d28gImZlYXR1cmVzIiBvZiBKYW06DQojDQojICAg IGEuIFRoZSBuYW1lIG9mIGEgZmlsZSB0byBiZSBpbmNsdWRlZCBjYW4gYmUgY29tcHV0ZWQg ZnJvbSBhbg0KIyAgICAgICBleHByZXNzaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2lu ZyBpbmNsdWRlcyBhIGZpbGUgd2hvc2UgbmFtZSBpcw0KIyAgICAgICBmb3JtZWQgYnkgY29u Y2F0ZW5hdGluZyAkKDEpIGFuZCAiLXRvb2xzLmphbSI6DQojDQojICAgICAgICAgICBpbmNs dWRlICQoMSktdG9vbHMuamFtIA0KIw0KIyAgICBiLiBBIHJ1bGUgY2FuIGJlIHJlZGVmaW5l ZCBhbnkgbnVtYmVyIG9mIHRpbWVzLiBJdHMgbGF0ZXN0IGRlZmluaXRpb24gaXMNCiMgICAg ICAgdGhlIG9uZSBpbnZva2VkLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBwcmludHMg IiMyIi4NCiMNCiMgICAgICAgICAgIHJ1bGUgWCB7IEVDSE8gIzEgOyB9DQojICAgICAgICAg ICBydWxlIFggeyBFQ0hPICMyIDsgfQ0KIyAgICAgICAgICAgWCA7DQojDQojICAgIFRvZ2V0 aGVyLCB0aGVzZSBmYWN0cyBhbGxvdyB1cyB0byBzZWxlY3QgdG9vbC1zdWl0ZS1zcGVjaWZp YyBhY3Rpb25zIGZvcg0KIyAgICBidWlsZGluZyBzcGVjaWZpYyB0YXJnZXQgdHlwZXMgYnkg cmVwZWF0ZWRseSByZWRlZmluaW5nIHRoZSBnZW5lcmFsaXplZA0KIyAgICBidWlsZCBhY3Rp b25zIGluIHRoZSB2YXJpb3VzIDxidWlsZC10b29scz4tdG9vbHMuamFtIGZpbGVzDQoNCmlm ICQoTlQpDQp7DQogICAgVE9PTFMgPz0gdmMtN18xIDsNCn0NCmVsc2UNCnsNCiAgICBUT09M UyA/PSBnY2MgOw0KfQ0KDQpTSEFSRURfVFlQRVMgPSBETEwgOw0KU1RBVElDX1RZUEVTID0g TElCIDsNCg0KIyBkZXRlY3QtYnVpbGQtdG9vbHMgPHRvb2xzLW5hbWU+IDogPGRldGVjdGlv bi1jb21tYW5kPg0KIw0KIyBEZWNsYXJlcyBhIHBzZXVkb3RhcmdldCBmb3IgdGhlIHNwZWNp ZmllZCBidWlsZCB0b29scyB3aGljaCBpcyBidWlsdCBieQ0KIyB0aGUgZ2l2ZW4gPGRldGVj dGlvbi1jb21tYW5kPi4gDQojDQojIEFsdGhvdWdoIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50 ZWQsIHRoZSBwbGFuIGlzIHRvIG1ha2UgY29tcGlsYXRpb24gb2YNCiMgdG9vbC1zcGVjaWZp YyB0YXJnZXRzIGRlcGVuZGVudCBvbiB0aGlzIHBzZXVkb3RhcmdldC4gVGhhdCB3YXksIHdl IHdpbGwgbmV2ZXINCiMgZXZlbiBhdHRlbXB0IHRvIGJ1aWxkIHRhcmdldHMgZm9yIHRvb2xz IHRoYXQgZG9uJ3QgZXhpc3QuDQpydWxlIGRldGVjdC1idWlsZC10b29scw0Kew0KICAgIGRl dGVjdGlvbi1jb21tYW5kIG9uICQoPCkgPSAkKCQoPCkuYmluLWRpcmVjdG9yeSkkKD4pIDsN Cn0NCg0KIyBsaWI6IGdlbmVyYXRvciBmdW5jdGlvbg0KIw0KcnVsZSBsaWJyYXJ5LWZpbGUg KCB0YXJnZXQgOiBzb3VyY2VzICsgKQ0Kew0KICAgIExpYnJhcnlGcm9tT2JqZWN0cyAkKDwp IDogWyBPYmplY3RzICQoPikgXSA7DQp9DQoNCiMgZXhlOiBnZW5lcmF0b3IgZnVuY3Rpb24N CiMNCnJ1bGUgZXhlY3V0YWJsZS1maWxlICggdGFyZ2V0IDogc291cmNlcyArICkNCnsNCiAg ICB0eXBlLURFUEVORFMgZXhlIDogJCg8KSA7DQogICAgbWFpbi1mcm9tLW9iamVjdHMgJCg8 KSA6IFsgT2JqZWN0cyAkKD4pIF0gOiBFWEUgOw0KfQ0KDQojIGRsbDogZ2VuZXJhdG9yIGZ1 bmN0aW9uDQojDQpydWxlIGRsbC1maWxlcyAoIG1vZHVsZSBpbXBsaWIgPyA6IHNvdXJjZXMg KiA6IHRhcmdldC10eXBlID8gKQ0Kew0KICAgIHR5cGUtREVQRU5EUyBkbGwgOiAkKDwpIDsN CiAgICANCiAgICAjIFNldCB1cCB0aGUgaW1wb3J0IGxpYnJhcnkgZGVwZW5kZW5jeSBvbiBX aW5kb3dzDQogICAgaWYgJCg8WzJdKQ0KICAgIHsNCiAgICAgICAgSU5DTFVERVMgJCg8WzFd KSA6ICQoPFsyLV0pIDsNCiAgICAgICAgSU5DTFVERVMgJCg8WzItXSkgOiAkKDxbMV0pIDsN CiAgICB9DQogICAgDQogICAgdGFyZ2V0LXR5cGUgPz0gRExMIDsNCiAgICBpZiBbIE1BVENI IF4oQ1JBWSkuKiA6ICQoSkFNVU5BTUVbLTFdKSBdICMgbm8gc2hhcmVkIGxpYnMgb24gY3Jh eQ0KICAgIHsNCiAgICAgICAgTk9URklMRSAkKDwpIDsNCiAgICB9DQogICAgZWxzZQ0KICAg IHsNCiAgICAgICAgbWFpbi1mcm9tLW9iamVjdHMgJCg8KSA6IFsgT2JqZWN0cyAkKD4pIF0g OiAkKHRhcmdldC10eXBlKSA7DQogICAgfQ0KfQ0KDQojIHRlbXBsYXRlOiBtb2RpZmllciBm dW5jdGlvbg0KIw0KIyBUaGUgdGFyZ2V0IHNwZWNzIGFyZSBtb2RpZmllZCBieSBhZGRpbmcg dGhvc2UgcHJldmlvdXNseSBzcGVjaWZpZWQgaW4gYSB0ZW1wbGF0ZSBzb3VyY2UuDQojIEFu eSBzcGVjcyBjb250YWluaW5nIHBhdGhzIGFyZSByZXJvb3RlZCB0byBjb3JyZWN0bHkgcmVm ZXJlbmNlIHRoZSBkZXBlbmRlZSBsb2NhdGlvbnMuDQojDQpydWxlIHRlbXBsYXRlLW1vZGlm aWVyICggdGFyZ2V0IDogc291cmNlICkNCnsNCiAgICBsb2NhbCBzb3VyY2UtZGlyID0gWyBk aXJlY3Rvcnktb2YgJChzb3VyY2U6Rz0pIF0gOw0KICAgIGxvY2FsIHNvdXJjZS1pZCA9IFsg dGFyZ2V0LWlkLW9mICQoc291cmNlKSBdIDsNCiAgICANCiAgICAjIE1ha2Ugc3VyZSBpdCdz IGRlZmluZWQuDQogICAgIw0KICAgIGlmICEgJChnVEFSR0VUX1RZUEUoJChzb3VyY2UtaWQp KSkNCiAgICB7DQogICAgICAgIGRlcGVuZGVudC1pbmNsdWRlICQoc291cmNlOkc9KSA7DQog ICAgfQ0KICAgIA0KICAgICMgQ29weSB0aGUgYmFzZSBzcGVjcyBpbnRvIHRoZSB0YXJnZXQg c3BlY3MsIGFkanVzdCBhbnkgcGF0aHMNCiAgICAjDQogICAgZ1RBUkdFVF9TT1VSQ0VTKCQo dGFyZ2V0KSkgKz0NCiAgICAgICAgWyByb290LXBhdGhzICQoZ1RBUkdFVF9TT1VSQ0VTKCQo c291cmNlLWlkKSkpIDogJChzb3VyY2UtZGlyKSBdIDsNCiAgICBnVEFSR0VUX0RFUFMoJCh0 YXJnZXQpKSArPQ0KICAgICAgICBbIHJvb3QtcGF0aHMgJChnVEFSR0VUX0RFUFMoJChzb3Vy Y2UtaWQpKSkgOiAkKHNvdXJjZS1kaXIpIF0gOw0KICAgIGdUQVJHRVRfUkVRVUlSRU1FTlRT KCQodGFyZ2V0KSkgKz0NCiAgICAgICAgWyBmaXh1cC1wYXRoLXByb3BlcnRpZXMgJChnVEFS R0VUX1JFUVVJUkVNRU5UUygkKHNvdXJjZS1pZCkpKSA6ICQoc291cmNlLWRpcikgXSA7DQog ICAgZ1RBUkdFVF9ERUZBVUxUX0JVSUxEKCQodGFyZ2V0KSkgKz0NCiAgICAgICAgJChnVEFS R0VUX0RFRkFVTFRfQlVJTEQoJChzb3VyY2UtaWQpKSkgOw0KfQ0KDQojIG1haW4tZnJvbS1v YmplY3RzIGV4ZS10YXJnZXQgOiBvYmotdGFyZ2V0Li4uIDogKCJFWEUifCJETEwiKQ0KIw0K IyBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgdG8gYnVpbGQgdGhlIGdpdmVuICJtYWluIiB0YXJn ZXQgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0DQojIGZpbGVzIGdpdmVuIGluIHRoZSAybmQgcGFy YW1ldGVyLiBUaGUgM3JkIHBhcmFtZXRlciBzaG91bGQgYmUgRVhFIGZvciBhbg0KIyBleGVj dXRhYmxlLCBvciBETEwgZm9yIGEgc2hhcmVkIGxpYnJhcnkuDQpydWxlIG1haW4tZnJvbS1v YmplY3RzICggdGFyZ2V0cyAqIDogb2JqZWN0cyAqIDogdHlwZSApDQp7DQogICAgIyBtYWtl IGNvbXBpbGVkIHNvdXJjZXMgYSBkZXBlbmRlbmN5IG9mIHRhcmdldA0KDQogICAgTWFrZUxv Y2F0ZSAkKHRhcmdldHMpIDogJChMT0NBVEVfVEFSR0VUKSA7DQoNCiAgICBDbGVhbiBjbGVh biA6ICQodGFyZ2V0cykgOw0KDQogICAgTU9ERSBvbiAkKHRhcmdldHMpID0gJCgkKHR5cGUp TU9ERSkgOw0KICAgIGxvY2FsIGxpbmstZnVuY3Rpb24gPSBMaW5rLSQodHlwZSkgOw0KICAg IGxvY2FsIGV4dHJhLWZpbGVzID0gWyAkKGxpbmstZnVuY3Rpb24pICQodGFyZ2V0cykgOiAk KG9iamVjdHMpIDogJCh0eXBlKSBdIDsNCiAgICBDaG1vZCAkKHRhcmdldHNbMV0pIDsNCiAg ICBERVBFTkRTICQodGFyZ2V0cykgOiAkKG9iamVjdHMpIDsNCiAgICANCiAgICAjIGxvY2F0 ZSBhbmQgYXR0YWNoIHRoZSBleHRyYSBmaWxlcyBnZW5lcmF0ZWQNCiAgICBpZiAkKGV4dHJh LWZpbGVzKQ0KICAgIHsNCiAgICAgICAgTWFrZUxvY2F0ZSAkKGV4dHJhLWZpbGVzKSA6ICQo TE9DQVRFX1RBUkdFVCkgOw0KICAgICAgICBERVBFTkRTICQodGFyZ2V0cykgOiAkKGV4dHJh LWZpbGVzKSA7DQogICAgfQ0KICAgIA0KICAgIGdGSUxFUygkKHRhcmdldHNbMV0pKSA9ICQo dGFyZ2V0cykgJChleHRyYS1maWxlcykgOw0KfQ0KDQpydWxlIC5kby1saW5rICggdGFyZ2V0 cyArIDogc291cmNlcyArIDogdHlwZSApDQp7DQogICAgIyBQcmVwYXJlIE5FRURMSUJTIGZv ciB1c2UgYnkgdGhlIHRvb2xzZXRzJyBsaW5rIGFjdGlvbiAoZS5nLiBmb3INCiAgICAjIGlu dm9raW5nIHdpdGgtY29tbWFuZC1maWxlKQ0KICAgIGxvY2FsIE5FRURMSUJTID0gWyBvbiAk KDwpIHJldHVybiAkKE5FRURMSUJTKSBdIDsNCiAgICANCiAgICByZXR1cm4gWyBMaW5rLWFj dGlvbiAkKHRhcmdldHMpIDogJChzb3VyY2VzKSA6ICQodHlwZSkgXSA7DQp9DQoNCnJ1bGUg TGluay1FWEUNCnsNCiAgICAjIE4uQi4gQnkgdGhlIHRpbWUgdGhpcyBydWxlIGlzIGludm9r ZWQsIHdlIGhhZCBiZXR0ZXIgaGF2ZSBnUlVOX1BBVEggY29tcGxldGVseSBzZXQuDQogICAg DQogICAgbG9jYWwgZXh0cmEtZmlsZXMgPSBbIC5kby1saW5rICQoPCkgOiAkKD4pIDogRVhF IF0gOw0KICAgIFJVTl9QQVRIIG9uICQoPCkgPSBbIGpvaW4gWyB1bmlxdWUgJChnUlVOX1BB VEgoJCg8KSkpICQoZ1RPT0xTRVRfTElCX1BBVEgpIF0gOiAkKFNQTElUUEFUSCkgXSA7DQog ICAgaWYgJChVTklYKSANCiAgICB7DQogICAgICAgIExJTktfTElCUEFUSCBvbiAkKDwpID0g WyBqb2luICQoZ1JVTl9MRF9MSUJSQVJZX1BBVEgoJCg8KSkpIDogJChTUExJVFBBVEgpIF0g Ow0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJChleHRyYS1maWxlcykgOw0KfQ0KDQpydWxl IExpbmstRExMDQp7DQogICAgZ1JVTl9MRF9MSUJSQVJZX1BBVEgoJCg8KSkgKz0gJChnTE9D QVRFKCQoPFsxXSkpKSAkKGdUT09MU0VUX0xJQl9QQVRIKSA7DQogICAgaWYgJChVTklYKSAN CiAgICB7DQogICAgICAgIExJTktfTElCUEFUSCBvbiAkKDwpID0gWyBqb2luICQoZ1JVTl9M RF9MSUJSQVJZX1BBVEgoJCg8KSkpIDogJChTUExJVFBBVEgpIF0gOw0KICAgIH0NCiAgICAN CiAgICByZXR1cm4gWyAuZG8tbGluayAkKDwpIDogJCg+KSA6IERMTCBdIDsNCn0NCg0KIyBz dG9yZSB0aGUgc2hlbGwncyBQQVRIIGFnYWluLCBqdXN0IGluIGNhc2Ugc29tZW9uZSB1c2Vz IFBBVEguDQojIFRoaXMgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBi YXNlIHBhdGggZm9yIHJ1bm5pbmcgYnVpbHQNCiMgcHJvZHVjdHMgZnJvbSB0aGUgY29tbWFu ZC1saW5lDQpSVU5fUEFUSCA/PSAkKFBBVEgpIDsNCmlmICQoVU5JWCkNCnsNCiAgICBMSU5L X0xJQlBBVEggPz0gJCgkKGdTSEVMTF9MSUJQQVRIKSkgOw0KICAgIGdBUFBFTkRfTERfTElC UkFSWV9QQVRIID0gIjokIiQoZ1NIRUxMX0xJQlBBVEgpIDsNCiAgICBnQVBQRU5EX1BBVEgg PSAiOiQiUEFUSCA7DQp9IA0KaWYgJChOVCkNCnsNCiAgICAjIFRyeSBzb21lIG90aGVyIGxp a2VseSBzcGVsbGluZ3MNCiAgICBSVU5fUEFUSCA/PSAkKFBhdGgpIDsNCiAgICBSVU5fUEFU SCA/PSAkKHBhdGgpIDsNCiAgICBnQVBQRU5EX0xEX0xJQlJBUllfUEFUSCA9ICI7JUxEX0xJ QlJBUllfUEFUSCUiIDsNCiAgICBnQVBQRU5EX1BBVEggPSAgO1wiJVBBVEglXCIgOw0KfQ0K DQojIE5vdyBzZXQgdGhpcywganVzdCBpbiBjYXNlIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGl0 Lg0KUEFUSCA9ICQoUlVOX1BBVEgpIDsNCmlmICQoVU5JWCkNCnsNCiAgICAkKGdTSEVMTF9M SUJQQVRIKSA9ICQoTElOS19MSUJQQVRIKSA7DQp9IA0KDQpET0xMQVIgPSAiJCIgOw0KICAN CiMgYnViYmxlIHZhcmlhYmxlLW5hbWUNCiMNCiMgSGVscGVyIGZ1bmN0aW9uIGZvciBzb3J0 LCBiZWxvdw0KIyBSZW1vdmVzIHRoZSBncmVhdGVzdCBlbGVtZW50IGZyb20gJCh2YXJpYWJs ZS1uYW1lKSBhbmQgcmV0dXJucyBpdC4NCnJ1bGUgYnViYmxlICMgDQp7DQogICAgbG9jYWwg cmVzdWx0ID0gOw0KICAgIGxvY2FsIGxhc3QgPSAkKCQoPClbMV0pIDsNCiAgICBmb3IgeCBp biAkKCQoPClbMi1dKQ0KICAgIHsNCiAgICAgICAgaWYgJChsYXN0KSA8PSAkKHgpDQogICAg ICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCArPSAkKGxhc3QpIDsNCiAgICAgICAgICAgIGxh c3QgPSAkKHgpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAg ICAgICAgIHJlc3VsdCArPSAkKHgpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAkKDwpID0g JChyZXN1bHQpIDsNCiAgICByZXR1cm4gJChsYXN0KSA7DQp9DQoNCiMgc29ydCBhcmdzDQoj DQojIHJldHVybiBhcmdzIHNvcnRlZCBpbiBsZXhpY29ncmFwaGljIG9yZGVyLg0KcnVsZSBz b3J0DQp7DQogICAgbG9jYWwgX2FsbCA9ICQoPCkgOw0KICAgIGxvY2FsIF9yZXN1bHQgPSA7 DQogICAgbG9jYWwgX2NvdW50IDsNCiAgICBmb3IgX2NvdW50IGluICQoPCkNCiAgICB7DQog ICAgICAgIF9yZXN1bHQgPSBbIGJ1YmJsZSBfYWxsIF0gJChfcmVzdWx0KSA7DQogICAgfQ0K ICAgIHJldHVybiAkKF9yZXN1bHQpIDsNCn0NCg0KIyBtaW4gYXJncw0KIw0KIyByZXR1cm4g dGhlIGxleGljb2dyYXBoaWMgbWluaW11bSBlbGVtZW50IG9mIGFyZ3MNCnJ1bGUgbWluDQp7 DQogICAgbG9jYWwgcmVzdWx0ID0gOw0KICAgIGxvY2FsIHggOw0KICAgIGZvciB4IGluICQo PCkNCiAgICB7DQogICAgICAgIGlmICEgJChyZXN1bHQpIHx8ICggJCh4KSA8ICQocmVzdWx0 KSApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCA9ICQoeCkgOw0KICAgICAgICB9 DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQojIGRpZmZlcmVuY2UgbGlz dEIgOiBsaXN0QQ0KIyByZXR1cm5zIHRoZSBlbGVtZW50cyBvZiBCIHRoYXQgYXJlIG5vdCBp biBBDQpydWxlIGRpZmZlcmVuY2UNCnsNCiAgICBsb2NhbCByZXN1bHQgPSA7DQogICAgbG9j YWwgZWxlbWVudCA7DQogICAgZm9yIGVsZW1lbnQgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAg aWYgISAoICQoZWxlbWVudCkgaW4gJCg+KSApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJl c3VsdCArPSAkKGVsZW1lbnQpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJChy ZXN1bHQpIDsNCn0NCg0KIyByZXBsYWNlIGxpc3QgOiBvbGQtdmFsdWUgbmV3LXZhbHVlDQoj DQojIHJldHVybnMgbGlzdCB3aXRoIG9jY3VycmVuY2VzIG9mIG9sZC12YWx1ZSByZXBsYWNl ZCBieSBuZXctdmFsdWUNCnJ1bGUgcmVwbGFjZQ0Kew0KICAgIGxvY2FsIHJlc3VsdCA9IDsN CiAgICBsb2NhbCB4IDsNCiAgICBmb3IgeCBpbiAkKDwpDQogICAgew0KICAgICAgICBpZiAk KHgpID0gJCg+WzFdKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQgKz0gJCg+WzJd KSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBy ZXN1bHQgKz0gJCh4KSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0 KSA7DQp9DQoNCiMgc2VsZWN0LXVuZ3Jpc3RlZCBsaXN0Li4uDQojDQojIFJldHVybnMgdGhl IGVsZW1lbnRzIG9mIGxpc3QgdGhhdCBoYXZlIG5vIGdyaXN0DQpydWxlIHNlbGVjdC11bmdy aXN0ZWQNCnsNCiAgICBsb2NhbCByZXN1bHQgeCA7DQogICAgZm9yIHggaW4gJCg8KQ0KICAg IHsNCiAgICAgICAgaWYgISAkKHg6RykNCiAgICAgICAgew0KICAgICAgICAgICAgcmVzdWx0 ICs9ICQoeCkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0K fQ0KDQpydWxlIHNlbGVjdC1ncmlzdGVkICggbGlzdCAqICkNCnsNCiAgICBsb2NhbCByZXN1 bHQgOw0KICAgIGZvciBsb2NhbCB4IGluICQobGlzdCkNCiAgICB7DQogICAgICAgIGlmICQo eDpHKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQgKz0gJCh4KSA7DQogICAgICAg IH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNCiMgUmV0dXJucyBncmlz dCB3aXRob3V0ICI8Ii8iPiIgZm9yIGVsZW1lbnRzIG1hdGNoaW5nICI8Lio+IiwNCiMgYW5k IGlnbm9yZXMgb3RoZXIgZWxlbWVudHMuDQpydWxlIHVuZ3Jpc3QgKCBuYW1lcyAqICkNCnsN CiAgICBsb2NhbCByZXN1bHQgOw0KICAgIGZvciBsb2NhbCBuYW1lIGluICQobmFtZXMpDQog ICAgew0KICAgICAgICBsb2NhbCBzdHJpcHBlZCA9IFsgTUFUQ0ggXjwoLiopPiQgOiAkKG5h bWUpIF0gOw0KICAgICAgICByZXN1bHQgKz0gJChzdHJpcHBlZCkgOw0KICAgIH0NCiAgICBy ZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KDQojIFNwbGl0IGEgcXVhbGlmaWVkIHByb3BlcnR5 IGludG8gMyBlbGVtZW50cy4gDQojDQojIEdyYW1tYXIgZGVzY3JpcHRpb24gb2YgcXVhbGlm aWVkLXByb3BlcnR5IDoNCiMgICBbWzx0b29sc2V0Pl08dmFyaWFudD5dcHJvcGVydHkNCiMN CiMgcmV0dXJucyA8dG9vbHNldD4gPHZhcmlhbnQ+IHByb3BlcnR5DQp7DQogICAgbG9jYWwg Z3Jpc3QxID0gJCg8OkcpIDsNCiAgICBsb2NhbCB1bmdyaXN0MSA9ICQoPDpHPSkgOw0KICAg IGxvY2FsIGdyaXN0MiA9ICQodW5ncmlzdDE6RykgOw0KICAgIGxvY2FsIHVuZ3Jpc3QyID0g JCh1bmdyaXN0MTpHPSkgOw0KICAgIGxvY2FsIGdyaXN0MyA9ICQodW5ncmlzdDI6RykgOw0K ICAgIGxvY2FsIHVuZ3Jpc3QzID0gJCh1bmdyaXN0MjpHPSkgOw0KICAgIGlmICQoZ3Jpc3Qz KQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICQoZ3Jpc3QxKSAkKGdyaXN0MikgJChncmlzdDMp JCh1bmdyaXN0MykgOw0KICAgIH0NCiAgICBlbHNlIGlmICQoZ3Jpc3QyKQ0KICAgIHsNCiAg ICBlbHNlDQogICAgew0KfQ0KDQpydWxlIHVuaXF1ZSAjIGxpc3QNCnsNCiAgICBsb2NhbCBy ZXN1bHQgPSA7DQogICAgbG9jYWwgZiA7DQogICAgZm9yIGYgaW4gJCg8KQ0KICAgIHsNCiAg ICAgICAgaWYgISAkKGYpIGluICQocmVzdWx0KQ0KICAgICAgICB7DQogICAgICAgICAgICBy ZXN1bHQgKz0gJChmKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0 KSA7DQp9DQoNCiMgZ2V0LXByb3BlcnRpZXMgZmVhdHVyZXMgOiBwcm9wZXJ0aWVzDQojDQoj IEdpdmVuIGEgbGlzdCBvZiBncmlzdGVkIGZlYXR1cmVzIGFuZCBhIGxpc3Qgb2YgcHJvcGVy dGllcywgcmV0dXJucyB0aGUNCiMgcHJvcGVydGllcyBtYXRjaGluZyB0aGUgZ2l2ZW4gZmVh dHVyZXMuDQpydWxlIGdldC1wcm9wZXJ0aWVzIA0Kew0KICAgIGxvY2FsIHJlc3VsdCA9IDsN CiAgICBsb2NhbCBwcm9wZXJ0eSA7DQogICAgZm9yIHByb3BlcnR5IGluICQoPikNCiAgICB7 DQogICAgICAgIGlmICQocHJvcGVydHk6RykgaW4gJCg8KQ0KICAgICAgICB7DQogICAgICAg ICAgICByZXN1bHQgKz0gJChwcm9wZXJ0eSkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJl dHVybiAkKHJlc3VsdCkgOw0KfQ0KICAgIA0KIyBnZXQtdmFsdWVzIGZlYXR1cmVzIDogcHJv cGVydGllcw0KIw0KIyBHaXZlbiBhIGxpc3Qgb2YgZ3Jpc3RlZCBmZWF0dXJlIG5hbWVzIGFu ZCBhIGxpc3Qgb2YgcHJvcGVydGllcywgcmV0dXJucyB0aGUNCiMgdmFsdWUocykgb2YgdGhl IGdpdmVuIGZlYXR1cmVzLg0KcnVsZSBnZXQtdmFsdWVzDQp7DQogICAgbG9jYWwgX3Byb3Bl cnRpZXMgPSBbIGdldC1wcm9wZXJ0aWVzICQoPCkgOiAkKD4pIF0gOw0KICAgIHJldHVybiAk KF9wcm9wZXJ0aWVzOkc9KSA7DQp9DQoNCnJ1bGUgcmVwbGFjZS1wcm9wZXJ0aWVzICggcHJv cGVydHktc2V0ICogOiBuZXctcHJvcGVydGllcyAqICkNCnsNCiAgICBsb2NhbCByZXN1bHQg PSA7DQogICAgZm9yIGxvY2FsIHggaW4gJChwcm9wZXJ0eS1zZXQpDQogICAgew0KICAgICAg ICBpZiAkKHg6RykgaW4gJChuZXctcHJvcGVydGllczpHKQ0KICAgICAgICB7DQogICAgICAg ICAgICBpZiAhICQoeDpHKSBpbiAkKHJlc3VsdDpHKQ0KICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgIHJlc3VsdCArPSBbIGdldC1wcm9wZXJ0aWVzICQoeDpHKSA6ICQobmV3LXBy b3BlcnRpZXMpIF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgIH0N CiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQgKz0gJCh4KSA7 DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNCg0KIyBu b3JtYWxpemUtcHJvcGVydGllcyBwcm9wZXJ0aWVzDQojDQpydWxlIG5vcm1hbGl6ZS1wcm9w ZXJ0aWVzDQp7DQogICAgbG9jYWwgcHJvcGVydHkgOw0KICAgIGxvY2FsIHJlc3VsdCA7DQog ICAgZm9yIHByb3BlcnR5IGluICQoPCkNCiAgICB7DQogICAgICAgIHN3aXRjaCAkKHByb3Bl cnR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgfQ0K ICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KIyBpbnRlcnNlY3Rpb24gc2V0 MSA6IHNldDINCiMNCiMgUmVtb3ZlcyBmcm9tIHNldDEgYW55IGl0ZW1zIHdoaWNoIGRvbid0 IGFwcGVhciBpbiBzZXQyIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuDQpydWxlIGludGVyc2Vj dGlvbiANCnsNCiAgICBsb2NhbCByZXN1bHQgdiA7DQogICAgZm9yIHYgaW4gJCg8KQ0KICAg IHsNCiAgICAgICAgaWYgJCh2KSBpbiAkKD4pDQogICAgICAgIHsNCiAgICAgICAgICAgIHJl c3VsdCArPSAkKHYpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQp IDsNCn0NCg0KIyBzdWJzZXQgc3ViIDogc3VwZXINCiMNCiMgUmV0dXJucyB0cnVlIGlmZiBz dWIgaXMgYSBzdWJzZXQgb2Ygc3VwZXIsIGVtcHR5IG90aGVyd2lzZQ0KcnVsZSBpcy1zdWJz ZXQNCnsNCiAgICBpZiBbIGludGVyc2VjdGlvbiAkKDwpIDogJCg+KSBdID0gJCg8KQ0KICAg IHsNCiAgICAgICAgcmV0dXJuIHRydWUgOw0KICAgIH0NCn0NCg0KIyBkaXN0cmlidXRlLWZl YXR1cmUgPGZlYXR1cmU+dmFsdWUxWy92YWx1ZTIuLi5dDQojDQojIERpc3RyaWJ1dGUgdGhl IGdpdmVuIGZlYXR1cmUgYWNyb3NzIHRoZSBzbGFzaC1zZXBhcmF0ZWQgc2V0IG9mIHZhbHVl cywgaS5lLg0KIyByZXR1cm5zIDxmZWF0dXJlPnZhbHVlMVsgPGZlYXR1cmU+L3ZhbHVlMi4u Ll0NCnJ1bGUgZGlzdHJpYnV0ZS1mZWF0dXJlDQp7DQogICAgbG9jYWwgZyA9ICQoPDpHKSA7 DQogICAgbG9jYWwgcmVzdWx0ID0gWyBzcGxpdC1wYXRoICQoPDpHPSkgXSA7DQogICAgcmV0 dXJuICQoZykkKHJlc3VsdCkgOw0KfQ0KDQojIHNldC1pbnNlcnQgdmFyaWFibGUtbmFtZSA6 IHZhbHVlLi4uIDsNCiMNCiMgQXBwZW5kcyB0aGUgZ2l2ZW4gdmFsdWVzIHRvIHRoZSBsaXN0 IGRlc2lnbmF0ZWQgYnkgdmFyaWFibGUtbmFtZSBpZiB0aGV5IGFyZQ0KIyBub3QgYWxyZWFk eSBwcmVzZW50Lg0KcnVsZSBzZXQtaW5zZXJ0DQp7DQogICAgbG9jYWwgdiA7DQogICAgZm9y IHYgaW4gJCg+KQ0KICAgIHsNCiAgICAgICAgaWYgISAoICQodikgaW4gJCgkKDwpKSApDQog ICAgICAgIHsNCiAgICAgICAgICAgICQoPCkgKz0gJCh2KSA7DQogICAgICAgIH0NCiAgICB9 DQp9DQoNCiMgZXF1YWwtc2V0cyBzZXQxIDogc2V0Mg0KIw0KIyBSZXR1cm5zIHRydWUgaWZm IHNldDEgY29udGFpbnMgdGhlIHNhbWUgZWxlbWVudHMgYXMgc2V0Mi4NCiMgTm90IHNlbnNp dGl2ZSB0byB0aGUgc2FtZSBlbGVtZW50IGFwcGVhcmluZyBtdWx0aXBsZSB0aW1lcw0KcnVs ZSBlcXVhbC1zZXRzDQp7DQogICAgaWYgKCAhIFsgZGlmZmVyZW5jZSAkKDwpIDogJCg+KSBd ICkgJiYgKCAhIFsgZGlmZmVyZW5jZSAkKD4pIDogJCg8KSBdICkNCiAgICB7DQogICAgICAg IHJldHVybiB0cnVlIDsNCiAgICB9DQp9DQoNCiMgZmVhdHVyZSBuYW1lIDogW3ZhbHVlcy4u Ll0NCiMNCiMgRGVjbGFyZXMgYSBmZWF0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUsIGFuZCB0 aGUgZ2l2ZW4gYWxsb3dlZCB2YWx1ZXMuDQpydWxlIGZlYXR1cmUNCnsNCiAgICBpZiAkKDwp IGluICQoZ0ZFQVRVUkVTKQ0KICAgIHsNCiAgICAgICAgRVhJVCBmZWF0dXJlICQoPCkgOiAk KGdGRUFUVVJFX1ZBTFVFUyg8JCg8KT4pIHJlZGVjbGFyZWQgYXMgJCg8KSA6ICQoPikgOw0K ICAgIH0NCiAgICBnRkVBVFVSRVMgKz0gPCQoPCk+IDsNCiAgICBnVU5HUklTVEVEKDwkKDwp PikgPSAkKDwpIDsNCiAgICBnRkVBVFVSRV9WQUxVRVMoPCQoPCk+KSA9ICQoPikgOw0KfQ0K DQpydWxlIGZyZWUtZmVhdHVyZQ0Kew0KICAgIGZlYXR1cmUgJCg8KSA6ICQoPikgOw0KICAg IGdGUkVFX0ZFQVRVUkVTICs9IDwkKDwpPiA7DQogICAgaWYgJCg+KQ0KICAgIHsNCiAgICAg ICAgZ1NJTkdMRV9WQUxVRURfRlJFRV9GRUFUVVJFUyArPSA8JCg8KT4gOw0KICAgIH0NCn0N Cg0KcnVsZSBwYXRoLWZlYXR1cmUNCnsNCiAgICBmcmVlLWZlYXR1cmUgJCg8KSA6ICQoPikg Ow0KICAgIGdQQVRIX0ZFQVRVUkVTICs9IDwkKDwpPiA7DQp9DQoNCnJ1bGUgZGVwZW5kZW5j eS1mZWF0dXJlDQp7DQogICAgcGF0aC1mZWF0dXJlICQoPCkgOiAkKD4pIDsNCiAgICBnREVQ RU5ERU5DWV9GRUFUVVJFUyArPSA8JCg8KT4gOw0KfQ0KDQojIGZlYXR1cmUtZGVmYXVsdCA8 ZmVhdHVyZT4uLi4NCiMNCiMgcmV0dXJuIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgY29ycmVz cG9uZGluZyB0byB0aGUgZ2l2ZW4gZmVhdHVyZShzKQ0KcnVsZSBmZWF0dXJlLWRlZmF1bHQN CnsNCiAgICBsb2NhbCByZXN1bHQgZiA7DQogICAgZm9yIGYgaW4gJCg8KQ0KICAgIHsNCiAg ICAgICAgcmVzdWx0ICs9ICQoZikkKGdGRUFUVVJFX1ZBTFVFUygkKGYpKVsxXSkgOw0KICAg IH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KIyBmbGFncyB0b29scy1uYW1lIHZh cmlhYmxlLW5hbWUgY29uZGl0aW9uIFs6IHZhbHVlKHMpXQ0KIw0KIyBEZWNsYXJlIGNvbW1h bmQtbGluZSBzZXR0aW5ncyBmb3IgYSBnaXZlbiB0b29sc2V0Lg0KIyAgIHRvb2xzZXQ6ICAg ICAgICAgdGhlIG5hbWUgb2YgdGhlIHRvb2xzZXQNCiMgICB2YXJpYWJsZS1uYW1lOiAgIHRo ZSBuYW1lIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhcnJ5 DQojICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0byBhIGNvbW1hbmQtbGluZQ0K IyAgIGNvbmRpdGlvbjogICAgICAgT25lIG9mIHRoZSBmb2xsb3dpbmc6DQojICAgICAgICAg ICAgICAgICAgICAxLiB6ZXJvIG9yIG1vcmUgcHJvcGVydHktc2V0cyBvZiB0aGUgZm9ybToN CiMgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnZhbHVlWy88ZmVhdHVyZT52 YWx1ZS4uLl0NCiMgICAgICAgICAgICAgICAgICAgIDIuIG9uZSBvciBtb3JlIDxmZWF0dXJl PlsvPGZlYXR1cmU+Li4uXQ0KIw0KIyBUaGlzIHJ1bGUgYXBwZW5kcyB0byB0aGUgc3BlY2lm aWVkIHZhcmlhYmxlLCBkZXBlbmRpbmcgb24gYSB0YXJnZXQncyBidWlsZA0KIyBjb25maWd1 cmF0aW9uIGFuZCB0aGUgZm9ybSBvZiBjb25kaXRpb24uDQojDQojICAgMS4gaWYgYW55IHNw ZWNpZmllZCBwcm9wZXJ0eS1zZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHRhcmdldCdzIGJ1aWxk IHByb3BlcnRpZXMgb3IgaWYgDQojICAgY29uZGl0aW9uIGlzIGVtcHR5LCB0aGUgdmFsdWVz IHNwZWNpZmllZCBpbiAkKDMpIHdpbGwgYmUgYXBwZW5kZWQgb25jZSB0bw0KIyAgIC92YXJp YWJsZS1uYW1lLy4NCiMNCiMgICAyLiBUaGUgdmFsdWUgb2YgZWFjaCBzcGVjaWZpZWQgZmVh dHVyZSB0aGF0IHBhcnRpY2lwYXRlcyBpbiB0aGUgdGFyZ2V0J3MNCiMgICBidWlsZCBwcm9w ZXJhdGllcyBpcyBhcHBlbmRlZCB0byAvdmFyaWFibGUtbmFtZS8uDQojDQojIFRoZSB2YXJp YWJsZSB3aWxsIGJlIHNldCAib24iIHRoZSB0YXJnZXQgc28gaXQgbWF5IGJlICB1c2VkIGlu IGl0cyBidWlsZCBhY3Rpb25zLiANCnJ1bGUgZmxhZ3MNCnsNCiAgICBsb2NhbCB0b29sc2V0 ID0gJChnQ1VSUkVOVF9UT09MU0VUKSA7DQogICAgbG9jYWwgdmFyaWFibGUgPSAkKDxbMl0p IDsNCiAgICBsb2NhbCBjb25kaXRpb24gPSAkKDxbMy1dKSA7DQoNCiAgICAjIHJlY29yZCB0 aGUgbmFtZXMgb2YgYWxsIHZhcmlhYmxlcyB1c2VkIHNvIHRoZXkgY2FuIGJlIHNldCBvbiB0 YXJnZXRzDQogICAgaWYgISAoICQodmFyaWFibGUpIGluICQoZ1RBUkdFVF9WQVJJQUJMRVMp ICkNCiAgICB7DQogICAgICAgIGdUQVJHRVRfVkFSSUFCTEVTICs9ICQodmFyaWFibGUpIDsN CiAgICAgICAgJCh2YXJpYWJsZSkgPSA7DQogICAgfQ0KDQogICAgbG9jYWwgZm91bmQgPSA7 DQogICAgbG9jYWwgeCA7DQogICAgZm9yIHggaW4gJChjb25kaXRpb24pDQogICAgew0KICAg ICAgICB4ID0gWyBzcGxpdC1wYXRoICQoeCkgXSA7DQogICAgICAgIA0KICAgICAgICAjIEFk ZCBlYWNoIGZlYXR1cmUgdG8gdGhlIHNldCBvZiBmZWF0dXJlcyByZWxldmFudCB0byB0aGUg dG9vbHNldA0KICAgICAgICBnUkVMRVZBTlRfRkVBVFVSRVMoJCh0b29sc2V0KSkgKz0gJCh4 OkcpIDsNCg0KICAgICAgICAjIGlzIGl0IGEgcHJvcGVydHkgc2V0Pw0KICAgICAgICBpZiAk KHg6Rz0pDQogICAgICAgIHsNCiAgICAgICAgICAgICAjIGlmIHRoaXMgcHJvcGVydHlfc2V0 IGlzIGEgc3Vic2V0IG9mIHRoZSBjdXJyZW50IGJ1aWxkLXByb3BlcnRpZXMNCiAgICAgICAg ICAgICBpZiAoICEgJChmb3VuZCkgKSAmJiBbIGlzLXN1YnNldCAkKHgpIDogJChnQlVJTERf UFJPUEVSVElFUykgXQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgZm91bmQg PSB0cnVlIDsNCiAgICAgICAgICAgICAgICAgJCh2YXJpYWJsZSkgKz0gJCg+KSA7DQogICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAg ICAgICAgJCh2YXJpYWJsZSkgKz0gWyBnZXQtdmFsdWVzICQoeCkgOiAkKGdCVUlMRF9QUk9Q RVJUSUVTKSBdIDsNCiAgICAgICAgICAgIGlmICQoeDpHKSBpbiAkKGdERVBFTkRFTkNZX0ZF QVRVUkVTKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdERVBFTkRFTkNZX1ZB UklBQkxFUygkKHRvb2xzZXQpKSArPSAkKHZhcmlhYmxlKSA7DQogICAgICAgICAgICB9DQog ICAgICAgIH0NCiAgICB9DQogICAgaWYgISAkKGNvbmRpdGlvbikNCiAgICB7DQogICAgICAg ICQodmFyaWFibGUpICs9ICQoPikgOw0KICAgIH0NCn0NCg0KIyBpbmNsdWRlLXRvb2xzIHRv b2xzZXQNCiMNCiMgVW5jb25kaXRpb25hbGx5IHByb2Nlc3MgdGhlIHNwZWNpZmljYXRpb24g ZmlsZSBmb3IgdGhlIGdpdmVuIHRvb2xzZXQuIEl0IGlzDQojIG5lY2Nlc3NhcnkgdG8gZG8g dGhpcyBmb3IgZWFjaCB0YXJnZXQgYnVpbHQgd2l0aCB0aGF0IHRvb2xzZXQsIHNpbmNlIHRo ZQ0KIyB0b29sc2V0IHdpbGwgaW52b2tlIHRoZSBmbGFncyBydWxlIHRvIHNldCBnbG9iYWwg dmFyaWFibGVzIGJhc2VkIG9uIHRoZSBidWlsZA0KIyBwcm9wZXJ0aWVzIG9mIHRoZSB0YXJn ZXQuDQpydWxlIGluY2x1ZGUtdG9vbHMgDQp7DQogICAgaWYgISAkKGdJTl9JTkNMVURFX1RP T0xTKQ0KICAgIHsNCiAgICAgICAgZ0NVUlJFTlRfVE9PTFNFVCA9ICQoPCkgOw0KICAgICAg ICBnUkVMRVZBTlRfRkVBVFVSRVMoJCg8KSkgPSA7ICMgY2xlYXIgcmVsZXZhbnQgZmVhdHVy ZSBzZXQNCiAgICAgICAgZ0RFUEVOREVOQ1lfVkFSSUFCTEVTKCQoPCkpID0gOw0KDQogICAg ICAgICMgY2xlYXIgYW55IGxpbmdlcmluZyB0YXJnZXQgdmFyaWFibGVzIHRoYXQgbWF5IGhh dmUgYmVlbiBkZWNsYXJlZA0KICAgICAgICAkKGdUQVJHRVRfVkFSSUFCTEVTKSA9IDsNCiAg ICAgICAgZ1RBUkdFVF9WQVJJQUJMRVMgPSBORUVETElCUyBORUVESU1QUyA7ICMgc3RhcnQg b3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcNCiAgICAgICAgZ1RPT0xTRVRfTElCX1BBVEggPSA7 DQogICAgfQ0KICAgIA0KICAgIHsNCiAgICAgICAgbG9jYWwgZ0lOX0lOQ0xVREVfVE9PTFMg PSB0cnVlIDsNCiAgICAgICAgU0VBUkNIIG9uIDxqYW0tbW9kdWxlPiQoPCktdG9vbHMuamFt ID0gJChCT09TVF9CVUlMRF9QQVRIKSA7DQogICAgICAgIGluY2x1ZGUgPGphbS1tb2R1bGU+ JCg8KS10b29scy5qYW0gOw0KICAgIH0NCiAgICANCiAgICAjIEFsd2F5cyBtYWludGFpbiB0 aGUgbGlzdCBvZiByZWxldmFudCBmZWF0dXJlcyBhcyB1bmlxdWUNCiAgICBpZiAhICQoZ0lO X0lOQ0xVREVfVE9PTFMpDQogICAgew0KICAgICAgICBnUkVMRVZBTlRfRkVBVFVSRVMoJCg8 KSkgPSBbIA0KICAgICAgICAgIHVuaXF1ZSAkKGdSRUxFVkFOVF9GRUFUVVJFUygkKDwpKSkg DQogICAgICAgICAgICAkKGdBTFdBWVNfUkVMRVZBTlQpDQogICAgICAgIF0gOw0KICAgIH0N CiAgICANCiAgICBnSU5DTFVERUQoPGphbS1tb2R1bGU+JCg8KS10b29scy5qYW0pID0gVFJV RSA7DQp9DQoNCiMgZXh0ZW5kcy10b29sc2V0IHRvb2xzZXQNCiMNCiMgVXNlZCBpbiBhIHRv b2xzZXQgZGVmaW5pdGlvbiBmaWxlOyBEZWNsYXJlcyB0aGF0IHRoZSB0b29sc2V0IGN1cnJl bnRseSBiZWluZw0KIyBkZWZpbmVkIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgZ2l2ZW4gdG9v bHNldC4NCnJ1bGUgZXh0ZW5kcy10b29sc2V0DQp7DQogICAgaW5jbHVkZS10b29scyAkKDwp IDsNCn0NCg0KIyByZWxldmFudC1mZWF0dXJlcyB0b29sc2V0DQojDQojIFJldHVybnMgdGhl IHNldCBvZiB1bmlxdWUgZmVhdHVyZXMgcmVsZXZhbnQgdG8gdGhlIGdpdmVuIHRvb2xzZXQ7 IGluY2x1ZGVzIHRoZQ0KIyB0b29sc2V0IGRlc2NyaXB0aW9uIGZpbGUgYXMgYSBzaWRlLWVm ZmVjdCBpZiBuZWNjZXNzYXJ5Lg0KcnVsZSByZWxldmFudC1mZWF0dXJlcyAjIG5hbWUNCnsN CiAgICBpZiAhICQoZ1JFTEVWQU5UX0ZFQVRVUkVTKCQoPCkpKQ0KICAgIHsNCiAgICAgICAg aW5jbHVkZS10b29scyAkKDwpIDsNCiAgICB9DQogICAgcmV0dXJuICQoZ1JFTEVWQU5UX0ZF QVRVUkVTKCQoPCkpKSA7DQp9DQoNCiMgdmFyaWFudCBuYW1lIFsgOiBwYXJlbnRzLi4uIF0g OiBbPHRvb2xzZXQ+XTxmZWF0dXJlPnZhbHVlLi4uDQojDQojIERlY2xhcmUgYSBidWlsZCB2 YXJpYW50LCB3aG9zZSBjb25maWd1cmF0aW9uIGlzIGdpdmVuIGJ5IHRoZSBnaXZlbiAob3B0 aW9uYWxseQ0KIyB0b29sc2V0LXF1YWxpZmllZCkgcHJvcGVydGllcy4NCnJ1bGUgdmFyaWFu dCAoIG5hbWUgOiBwYXJlbnRzLW9yLXByb3BlcnRpZXMgKiA6IHRvb2wtcHJvcGVydGllcyAq ICkNCnsNCiAgICBnQUxMX1ZBUklBTlRTICs9ICQobmFtZSkgOw0KICAgIGxvY2FsIHBhcmVu dHMgOw0KICAgIGlmICEgJCh0b29sLXByb3BlcnRpZXMpDQogICAgew0KICAgICAgICBpZiAk KHBhcmVudHMtb3ItcHJvcGVydGllc1sxXTpHKQ0KICAgICAgICB7DQogICAgICAgICAgICB0 b29sLXByb3BlcnRpZXMgPSAkKHBhcmVudHMtb3ItcHJvcGVydGllcykgOw0KICAgICAgICB9 DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgcGFyZW50cyA9ICQocGFy ZW50cy1vci1wcm9wZXJ0aWVzKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAg IHsNCiAgICAgICAgcGFyZW50cyA9ICQocGFyZW50cy1vci1wcm9wZXJ0aWVzKSA7DQogICAg fQ0KICAgIGxvY2FsIHRvb2xzZXQgOw0KICAgIGZvciB0b29sc2V0IGluICQoVE9PTFMpDQog ICAgew0KICAgICAgICAjIFdlIGhpamFjayBzZWxlY3QtcHJvcGVydGllcyB0byBkbyBvdXIg ZGlydHkgd29yayBoZXJlLg0KICAgICAgICAjIEJlY2F1c2UgcHJvcGVydGllcyBpbiBhIHZh cmlhbnQgZGVjbGFyYXRpb24gYXJlIG9ubHkgcXVhbGlmaWVkIHdpdGgNCiAgICAgICAgIyB0 b29sc2V0IGFuZCBub3QgdmFyaWFudCwgd2Ugc3BlY2lmeSB0aGUgdG9vbHNldCB3aGVyZQ0K ICAgICAgICAjIHNlbGVjdC1wcm9wZXJ0aWVzIGV4cGVjdHMgYSB2YXJpYW50IG5hbWUuIFRo ZSBmaXJzdCB0b29sc2V0IHBhcmFtZXRlcg0KICAgICAgICAjIGlzIG5lY2Nlc3NhcnkgdG8g Z2V0IHRoZSByZWxldmFudC1mZWF0dXJlcyBjb3JyZWN0bHkgc2V0LiBXZSBzdXBwbHkNCiAg ICAgICAgIyB0aGUgdmFyaWFudCBuYW1lIGFzIHRoZSB0YXJnZXQgbmFtZSwgc28gdGhhdCBl cnJvciBtZXNzYWdlcyB3aWxsIGxvb2sNCiAgICAgICAgIyBjb2hlcmVudC4NCiAgICAgICAg bG9jYWwgbmFtZS1wcm9wZXJ0aWVzDQogICAgICAgICAgICA9IFsgc2VsZWN0LXByb3BlcnRp ZXMgJCh0b29sc2V0KSAkKHRvb2xzZXQpICQobmFtZSkgOiAkKHRvb2wtcHJvcGVydGllcykg XSA7DQogICAgICAgIGlmICQocGFyZW50cykNCiAgICAgICAgew0KICAgICAgICAgICAgbG9j YWwgcGFyZW50IDsNCiAgICAgICAgICAgIGZvciBwYXJlbnQgaW4gJChwYXJlbnRzKQ0KICAg ICAgICAgICAgew0KICAgICAgICAgICAgICAgIGxvY2FsIHBhcmVudC1wcm9wZXJ0aWVzDQog ICAgICAgICAgICAgICAgICAgID0gJChnQkFTRV9QUk9QRVJUSUVTKCQodG9vbHNldCksJChw YXJlbnQpKSkgOw0KICAgICAgICAgICAgICAgIGxvY2FsIGluaGVyaXRlZC1mZWF0dXJlcw0K ICAgICAgICAgICAgICAgICAgICA9IFsgdW5pcXVlDQogICAgICAgICAgICAgICAgICAgICAg ICBbIGRpZmZlcmVuY2UgJChwYXJlbnQtcHJvcGVydGllczpHKSA6ICQobmFtZS1wcm9wZXJ0 aWVzOkcpIF0NCiAgICAgICAgICAgICAgICAgICAgICAgICQoZ0ZSRUVfRkVBVFVSRVMpDQog ICAgICAgICAgICAgICAgICAgICAgICAkKGdQQVRIX0ZFQVRVUkVTKQ0KICAgICAgICAgICAg ICAgICAgICAgICAgJChnREVQRU5ERU5DWV9GRUFUVVJFUyBdIDsNCiAgICAgICAgICAgICAg ICBsb2NhbCBpbmhlcml0ZWQtcHJvcGVydGllcw0KICAgICAgICAgICAgICAgICAgICA9IFsg Z2V0LXByb3BlcnRpZXMgJChpbmhlcml0ZWQtZmVhdHVyZXMpIDogJChwYXJlbnQtcHJvcGVy dGllcykgXSA7DQogICAgICAgICAgICAgICAgbmFtZS1wcm9wZXJ0aWVzDQogICAgICAgICAg ICAgICAgICAgICs9ICQoaW5oZXJpdGVkLXByb3BlcnRpZXMpIDsNCiAgICAgICAgICAgIH0N CiAgICAgICAgfQ0KICAgICAgICBnQkFTRV9QUk9QRVJUSUVTKCQodG9vbHNldCksJChuYW1l KSkgPSBbIHNvcnQgJChuYW1lLXByb3BlcnRpZXMpIF0gOw0KICAgIH0NCn0NCg0KIyBzZWxl Y3QtcHJvcGVydGllcyB0b29sc2V0IHZhcmlhbnQgdGFyZ2V0IDogcXVhbGlmaWVkLXByb3Bl cnRpZXMuLi4NCiMNCiMgUmV0dXJucw0KcnVsZSBzZWxlY3QtcHJvcGVydGllcyAoIHRvb2xz ZXQgdmFyaWFudCB0YXJnZXQgPyA6IHF1YWxpZmllZC1wcm9wZXJ0aWVzICogKQ0Kew0KICAg IGxvY2FsIHJlbGV2YW50X2ZlYXR1cmVzID0gWyByZWxldmFudC1mZWF0dXJlcyAkKHRvb2xz ZXQpIF0gOw0KICAgIGxvY2FsIG5vcm1hbGl6ZWQgPSBbIG5vcm1hbGl6ZS1wcm9wZXJ0aWVz ICQoPikgXSA7DQoNCiAgICAjIENsYXNzaWZ5IHByb3BlcnRpZXMgYnkgdGhlIHNwZWNpZmlj aXR5IG9mIHRoZWlyIHF1YWxpZmljYXRpb24uDQogICAgIyBGaXJzdCwgZ3JhYiB0aG9zZSB0 aGF0IGFwcGx5IHRvIHRoaXMgdG9vbHNldCwgb3IgYWxsIHRvb2xzZXRzDQogICAgbG9jYWwg dGhpc190b29sc2V0ID0gWyBnZXQtdmFsdWVzIDwkKHRvb2xzZXQpPiA6ICQobm9ybWFsaXpl ZCkgXSA7DQogICAgbG9jYWwgMC1zdGFycyA9IFsgZ2V0LXZhbHVlcyA8JCh2YXJpYW50KT4g OiAkKHRoaXNfdG9vbHNldCkgXSA7DQoNCiAgICAjIFNlbGVjdCBmZWF0dXJlIG5hbWVzIGZy b20gdGhlIGZlYXR1cmVzIHJlbGV2YW50IHRvIHRoZSB0b29sc2V0Lg0KICAgIGxvY2FsIGZl YXR1cmVzID0gWyBpbnRlcnNlY3Rpb24gJChyZWxldmFudF9mZWF0dXJlcykNCiAgICAgICAg OiAkKDAtc3RhcnM6RykgJCgxLXN0YXJzOkcpICQoMi1zdGFyczpHKSBdIDsNCg0KICAgIGxv Y2FsIHJlc3VsdCBmIDsNCiAgICBmb3IgZiBpbiAkKGZlYXR1cmVzKQ0KICAgIHsNCiAgICAg ICAgbG9jYWwgaXNfZnJlZSA9IFsgaW50ZXJzZWN0aW9uICQoZikgOiAkKGdGUkVFX0ZFQVRV UkVTKSBdIDsNCiAgICAgICAgDQogICAgICAgICMgR28gdGhyb3VnaCB0aGUgJChuLXN0YXJz KSBsaXN0cyBmcm9tIG1vc3QtIHRvIGxlYXN0LSBzcGVjaWZpYzsNCiAgICAgICAgIyBjb2xs ZWN0IHRoZSBiZXN0IHNldCBvZiB2YWx1ZXMgb2YgYSBzaW1wbGUgZmVhdHVyZSwgYW5kIC9h bGwvDQogICAgICAgICMgdmFsdWVzIG9mIGEgZnJlZSBmZWF0dXJlLg0KICAgICAgICBsb2Nh bCByIG4gOw0KICAgICAgICBmb3IgbiBpbiAwIDEgMg0KICAgICAgICB7DQogICAgICAgICAg ICBpZiAhICQocikgfHwgJChpc19mcmVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgIHIgKz0gWyBnZXQtdmFsdWVzICQoZikgOiAkKCQobiktc3RhcnMpIF0gOw0KICAgICAg ICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgciA9IFsgdW5pcXVlICQocikgXSA7DQog ICAgICAgIGlmICQoclsyXSkgJiYgISAkKGlzX2ZyZWUpICMgQ2hlY2sgZm9yIGNvbmZsaWN0 aW5nIHNpbXBsZS1mZWF0dXJlIHJlcXVlc3RzDQogICAgICAgIHsNCiAgICAgICAgICAgIEVY SVQgIkVycm9yOiBBbWJpZ3VvdXMgcHJvcGVydGllcyByZXF1ZXN0ZWQgZm9yIg0KICAgICAg ICAgICAgJCh0YXJnZXQpIDwkKHRvb2xzZXQpPjwkKHZhcmlhbnQpPiAiOiIgJChmKSQocikg Ow0KICAgICAgICB9DQogICAgICAgIHJlc3VsdCArPSAkKGYpJChyKSA7DQogICAgfQ0KICAg IHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KIyBnZXQgdG9vbHNldCBmZWF0dXJlcw0KU0VBUkNI IG9uIDxqYW0tbW9kdWxlPmZlYXR1cmVzLmphbSA9ICQoQk9PU1RfQlVJTERfUEFUSCkgOw0K aW5jbHVkZSA8amFtLW1vZHVsZT5mZWF0dXJlcy5qYW0gOw0KDQojIHVuZ3Jpc3QtcHJvcGVy dGllcyBwcm9wZXJ0aWVzLi4uDQojDQojIFRyYW5zZm9ybXMgYSBsaXN0IG9mIHByb3BlcnRp ZXMgb2YgdGhlIGZvcm06DQojICAgICAgIDxmZWF0dXJlMT52YWx1ZTEgWzxmZWF0dXJlMj52 YWx1ZTIuLi4gXQ0KIyBpbnRvIGEgbGlzdCBvZiB0aGUgZm9ybToNCiMgICAgICAgZmVhdHVy ZTEtdmFsdWUxIGZlYXR1cmUyLXZhbHVlMg0KIyBzdWl0YWJsZSBmb3IgdXNlIGFzIGRpcmVj dG9yeSBwYXRoIGVsZW1lbnRzDQojDQpydWxlIHVuZ3Jpc3QtcHJvcGVydGllcw0Kew0KICAg IGxvY2FsIHByb3BlcnR5IDsNCiAgICBsb2NhbCByZXN1bHQgPSA7DQogICAgZm9yIHByb3Bl cnR5IGluICQoPCkNCiAgICB7DQogICAgICAgIHJlc3VsdCArPSAkKGdVTkdSSVNURUQoJChw cm9wZXJ0eTpHKSkpLSQocHJvcGVydHk6Rz0pIDsNCiAgICB9DQogICAgcmV0dXJuICQocmVz dWx0KSA7DQp9DQoNCiMgc2V0LXRhcmdldC12YXJpYWJsZXMgdGFyZ2V0DQojDQojIGF0dGFj aCBnbG9iYWwgYnVpbGQgdG9vbCBzZXR0aW5ncyB0byB0aGUgZ2l2ZW4gZmlsZS10YXJnZXQs IHNvIHRoYXQgdGhleSBjYW4gYmUNCiMgdXNlZCBpbiBidWlsZCBhY3Rpb25zLg0KcnVsZSBz ZXQtdGFyZ2V0LXZhcmlhYmxlcyAoIHRhcmdldHMgKiApDQp7DQogICAgbG9jYWwgcyA7DQog ICAgZm9yIHMgaW4gJChnVEFSR0VUX1ZBUklBQkxFUykNCiAgICB7DQogICAgICAgICQocykg b24gJCh0YXJnZXRzKSA9ICQoJChzKSkgOw0KDQogICAgICAgICMgc2V0IHVwIGRlcGVuZGVu Y2llcyBpZiB0aGUgdGFyZ2V0IGlzIGEgInRvcC1sZXZlbCIgdGFyZ2V0DQogICAgICAgIGlm ICggJChzKSBpbiAkKGdERVBFTkRFTkNZX1ZBUklBQkxFUygkKGdDVVJSRU5UX1RPT0xTRVQp KSkgKSAmJiAkKGdUQVJHRVRfVFlQRSgkKDwpKSkNCiAgICAgICAgew0KICAgICAgICAgICAg REVQRU5EUyAkKHRhcmdldHMpIDogJCgkKHMpKSA7DQogICAgICAgIH0NCiAgICB9DQogICAg bG9jYWwgbGlicGF0aCA9IFsgZ2V0LXByb3BlcnRpZXMgPGxpYnJhcnktcGF0aD4gOiAkKGdC VUlMRF9QUk9QRVJUSUVTKSBdIDsNCiAgICBnUlVOX1BBVEgoJCh0YXJnZXRzKSkgKz0gJChs aWJwYXRoOkc9KSA7DQogICAgZ1JVTl9MRF9MSUJSQVJZX1BBVEgoJCh0YXJnZXRzKSkgKz0g JChsaWJwYXRoOkc9KSA7DQp9DQoNCiMgRm9yIHBhdGggcHJvcGVydGllcywgYWRkIGEgcmVs YXRpdmUgcGF0aCBwcmVmaXggdG8gdGhlIHZhbHVlIGFzDQojIG5lY2Nlc3NhcnkgdG8gbG9j YXRlIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBzdWJwcm9qZWN0DQojIGRpcmVj dG9yeS4NCnJ1bGUgZml4dXAtcGF0aC1wcm9wZXJ0aWVzICggcHJvcGVydGllcyAqIDogc3Vi cHJvamVjdC1kaXJlY3RvcnkgPyApDQp7DQogICAgbG9jYWwgcmVzdWx0IDsNCiAgICANCiAg ICBmb3IgbG9jYWwgcCBpbiAkKHByb3BlcnRpZXMpDQogICAgew0KICAgICAgICBpZiAkKHA6 RykgaW4gJChnUEFUSF9GRUFUVVJFUykNCiAgICAgICAgew0KICAgICAgICAgICAgIyBJZiB0 aGUgcGF0aCBwcm9wZXJ0eSB2YWx1ZSBpcyBwcm9qZWN0LXJlbGF0aXZlLCByZS1yb290DQog ICAgICAgICAgICAjIGl0IGFwcHJvcHJpYXRlbHkgZm9yIHRoYXQgcHJvamVjdA0KICAgICAg ICAgICAgbG9jYWwgcGFyc2UtcHJvamVjdCA9IFsgTUFUQ0ggXkAoW14vJChTTEFTSCldKylb LyQoU0xBU0gpXT8oLiopIDogJChwOkc9KSBdIDsNCiAgICAgICAgICAgIGlmICQocGFyc2Ut cHJvamVjdCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBsb2NhbCBwcm9qZWN0 ID0gJChwYXJzZS1wcm9qZWN0WzFdKSA7DQogICAgICAgICAgICAgICAgbG9jYWwgc3VicHJv amVjdCA9ICQocGFyc2UtcHJvamVjdFsyXSkgOw0KICAgICAgICAgICAgICAgIHAgPSBbIHJv b3QtcGF0aHMgJChzdWJwcm9qZWN0Okc9JChwOkcpKSA6ICQoZ1BST0pFQ1QoJChwcm9qZWN0 KSkpIF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAkKHN1YnByb2pl Y3QtZGlyZWN0b3J5KSAgIyByZS1yb290IGl0IHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5 DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcCA9IFsgcm9vdC1wYXRocyAkKHAp IDogJChzdWJwcm9qZWN0LWRpcmVjdG9yeSkgXSA7DQogICAgICAgICAgICB9DQogICAgICAg IH0NCiAgICAgICAgDQogICAgICAgIHJlc3VsdCArPSAkKHApIDsNCiAgICB9DQogICAgDQog ICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNCiMgcmVtb3ZlLWluY29tcGF0aWJsZS1idWls ZHMgcmVxdWlyZW1lbnRzLi4uIDogYnVpbGQtcmVxdWVzdC4uLiA6IHRhcmdldC1uYW1lDQoj DQojIElmIGFueSBlbGVtZW50IG9mIHJlcXVpcmVtZW50cyBoYXMgdGhlIHNhbWUgZ3Jpc3Qg YnV0IGEgZGlmZmVyZW50IHVuZ3Jpc3RlZA0KIyBwYXJ0IGFzIGFueSBlbGVtZW50IG9mIGJ1 aWxkLXJlcXVlc3QsIGV4aXRzIHdpdGggYW4gZXJyb3IgcmVwb3J0IGFib3V0IHRhcmdldC1u YW1lDQpydWxlIHJlbW92ZS1pbmNvbXBhdGlibGUtYnVpbGRzICggcmVxdWlyZW1lbnRzICog OiBidWlsZC1yZXF1ZXN0ICogOiB0YXJnZXQtbmFtZSArICkNCnsNCiAgICBsb2NhbCBhbGwt cHJvcGVydGllcyA9IFsgdW5pcXVlICQoPCkgJCg+KSBdIDsNCiAgICBsb2NhbCBhbGwtZmVh dHVyZXMgPSAkKGFsbC1wcm9wZXJ0aWVzOkcpIDsNCiAgICBsb2NhbCB1bmlxdWUtZmVhdHVy ZXMgPSBbIHVuaXF1ZSAkKGFsbC1mZWF0dXJlcykgXSA7DQogICAgaWYgJChhbGwtZmVhdHVy ZXMpICE9ICQodW5pcXVlLWZlYXR1cmVzKQ0KICAgIHsNCiAgICAgICAgbG9jYWwgcmVzdWx0 IDsNCiAgICAgICAgbG9jYWwgc2tpcCA7DQogICAgICAgIGZvciBsb2NhbCBwIGluICQoYnVp bGQtcmVxdWVzdCkNCiAgICAgICAgew0KICAgICAgICAgICAgIyBpZiBhIGZlYXR1cmUgb2Yg dGhlIGJ1aWxkIHJlcXVlc3QgaXMgYWxzbyBpbiB0aGUNCiAgICAgICAgICAgICMgcmVxdWly ZW1lbnRzLCBidXQgd2l0aCBkaWZmZXJpbmcgdmFsdWUocykNCiAgICAgICAgICAgIGlmICgg JChwOkcpIGluICQocmVxdWlyZW1lbnRzOkcpICkNCiAgICAgICAgICAgICAgJiYgISAoICQo cCkgaW4gJChyZXF1aXJlbWVudHMpICkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICAjIGRlY2lkZSB3aGF0IHRvIGRvLg0KICAgICAgICAgICAgICAgIGxvY2FsIHZhbHVlID0g WyBnZXQtdmFsdWVzICQocDpHKSA6ICQocmVxdWlyZW1lbnRzKSBdIDsNCiAgICAgICAgICAg ICAgICBpZiAkKHZhbHVlWzJdKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICAgICAgRVhJVCBVbmV4cGVjdGVkbHkgZm91bmQgbXVsdGlwbGUgYnVpbGQgcmVxdWVzdHMN CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZlYXR1cmUgJChwOkcpIHdpdGggdmFs dWVzICQodmFsdWVzKSA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0K ICAgICAgICAgICAgICAgIGxvY2FsIHJlcXVlc3RlZCA9IFsgc3BsaXQtcGF0aCAkKHA6Rz0p IF0gOw0KICAgICAgICAgICAgICAgIGlmICQocmVxdWVzdGVkWzJdKQ0KICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgc2tpcHBlZCA9IFsgZGlmZmVyZW5j ZSAkKHJlcXVlc3RlZCkgOiAkKHZhbHVlKSBdIDsNCiAgICAgICAgICAgICAgICAgICAgDQog ICAgICAgICAgICAgICAgICAgIGlmICEgJChnTk9XQVJOX0lOQ09NUEFUSUJMRV9CVUlMRFMp DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIEVDSE8g JCh0YXJnZXQtbmFtZSkgcmVxdWlyZXMgJChwOkcpJCh2YWx1ZSksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2tpcHBpbmcgcmVxdWVzdGVkIGJ1aWxkIGNvbmZpZ3VyYXRpb24o cykgJChwOkcpJChza2lwcGVkKS4gOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJChwOkcpJCh2 YWx1ZSkgOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAhICQoZ05PV0FSTl9JTkNP TVBBVElCTEVfQlVJTERTKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICAgICAgICBFQ0hPIHNraXBwaW5nICQodGFyZ2V0LW5hbWUpIGR1ZSB0byBpbmNvbXBh dGlibGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCByZXF1aXJlbWVudHMg JChwOkcpJCh2YWx1ZSkuIDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgICAgICBza2lwID0gdHJ1ZSA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg fQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJl c3VsdCArPSAkKHApIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAg ICAgICAgaWYgJChza2lwKQ0KICAgICAgICB7DQogICAgICAgICAgICBidWlsZC1yZXF1ZXN0 ID0gU0tJUCA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAg ICAgICBidWlsZC1yZXF1ZXN0ID0gJChyZXN1bHQpIDsNCiAgICAgICAgfQ0KICAgIH0NCiAg ICByZXR1cm4gJChidWlsZC1yZXF1ZXN0KSA7DQp9DQoNCiMgbXVsdGlwbHktcHJvcGVydHkt c2V0cyBbPGZlYXR1cmU+dmFsdWUxWy92YWx1ZTIuLi5dIF0uLi4NCiMNCiMgRXhwYW5kcyBh IHNldCBvZiAocG9zc2libHkgbXVsdGktdmFsdWVkKSBwcm9wZXJ0aWVzIGludG8gYWxsIHRo ZSBjb21iaW5hdGlvbnMNCiMgdGhhdCBpbmNsdWRlIGV2ZXJ5IGZlYXR1cmUgaW4gdGhlIHNl dC4gRWFjaCBjb21iaW5hdGlvbiBpcyBnaXZlbiBhcyBhIHBhdGgsDQojIHdpdGggdGhlIHNs YXNoIHNlcGFyYXRpbmcgdGhlIHByb3BlcnRpZXMsIHNvcnRlZCBpbiBmZWF0dXJlIG9yZGVy Lg0KcnVsZSBtdWx0aXBseS1wcm9wZXJ0eS1zZXRzDQp7DQogICAgbG9jYWwgcmVzdWx0IHAg Ow0KICAgIGZvciBwIGluIFsgc29ydCAkKDwpIF0NCiAgICB7DQogICAgICAgICMgZXhwYW5k IGFueSBtdWx0aS12YWx1ZWQgc2ltcGxlIGZlYXR1cmVzIGZyb20gdGhlIGRlZmF1bHQgYnVp bGQNCiAgICAgICAgbG9jYWwgbXVsdGlwbGUgPSBbIGRpc3RyaWJ1dGUtZmVhdHVyZSAkKHAp IF0gOw0KDQogICAgICAgICMgY29uY2F0ZW5hdGlvbiBwcm9kdWNlcyBhIHByb2R1Y3QsIHNv IHRoZSB0cmVlIGJyYW5jaGVzIGZvciBlYWNoDQogICAgICAgICMgbXVsdGktdmFsdWVkIHNp bXBsZSBmZWF0dXJlLg0KICAgICAgICByZXN1bHQgPSAkKHJlc3VsdCkvJChtdWx0aXBsZSkg Ow0KICAgICAgICByZXN1bHQgPz0gJChtdWx0aXBsZSkgOyAjIHRoaXMgdHJpY2sgYWxsb3dz IHVzIHRvIGdldCBzdGFydGVkIA0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0N Cg0KIyBSZXR1cm4gYSBsaXN0IGNvbnNpc3Rpbmcgb2YgYWxsIHRoZSBlbGVtZW50cyBvZiBw cm9wZXJ0aWVzIHdoaWNoDQojIGFyZW4ndCB0aGUgZGVmYXVsdHMgZm9yIHRoZWlyIGZlYXR1 cmVzLg0KcnVsZSByZW1vdmUtZGVmYXVsdC1wcm9wZXJ0aWVzICggcHJvcGVydGllcyAqICkN CnsNCiAgICByZXR1cm4gWyBkaWZmZXJlbmNlICQocHJvcGVydGllcykgOiBbIGZlYXR1cmUt ZGVmYXVsdCAkKHByb3BlcnRpZXM6RykgXSBdIDsNCn0NCg0KIyBtYWtlLXBhdGgtcHJvcGVy dHktc2V0cyBiYXNlLXBhdGggOiBjb21tb24tcHJvcGVydGllcyA6IHByb3BlcnR5LXNldHMN CiMNCiMgUmV0dXJucyBhIGxpc3Qgb2YgcGF0aHMgd2hlcmUgdGhlIGluaXRpYWwgdW5ncmlz dGVkIHBhcnQgb2YgZWFjaCBlbGVtZW50IGlzIGENCiMgcmVsYXRpdmUgcGF0aCB0byBhIHN1 YnZhcmlhbnQgZGlyZWN0b3J5IGZyb20gYSB0YXJnZXQncyBidWlsZCByb290IGFuZCB0aGUN CiMgcmVzdCBvZiB0aGUgZWxlbWVudCBpcyBhIHNsYXNoLXNlcGFyYXRlZCBwcm9wZXJ0eSBz ZXQgZGVzY3JpYmluZyB0aGUNCiMgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0IHRvIGJlIGJ1 aWx0Lg0KIw0KIyBFYWNoIHBhdGggcmV0dXJuZWQgaXMgYmFzZS1wYXRoIGV4dGVuZGVkIGJ5 IG9uZSBvZiB0aGUgdW5ncmlzdGVkIHByb3BlcnR5LXNldHMNCiMgKG9yIGp1c3QgdGhlIGJh c2UtcGF0aCBpZiBubyBwcm9wZXJ0eS1zZXRzIGFyZSBzdXBwbGllZCkuIEVhY2ggcHJvcGVy dHkgc2V0DQojIHJldHVybmVkIGlzIGZvcm1lZCBieSBleHRlbmRpbmcgY29tbW9uLXByb3Bl cnRpZXMgd2l0aCBvbmUgb2YgdGhlIHByb3BlcnR5LXNldHMuDQojDQojIEZvciBleGFtcGxl LA0KIw0KIyAgIG1ha2UtcGF0aC1wcm9wZXJ0eS1zZXRzIGdjYy9yZWxlYXNlIDogPHAxPnYx IDogPHAyPnYyLzxwMz52Mw0KIw0KIyByZXR1cm5zIHRoaXMgc2luZ2xlLWVsZW1lbnQgbGlz dDoNCiMNCiMgICAgICBnY2MvcmVsZWFzZS9wMi12Mi9wMy12My88cDE+djEvPHAyPnYyLzxw Mz52Mw0KIyAgICAgfDwtLSBzdWJ2YXJpYW50IHBhdGggLS0+fDwtLSBwcm9wZXJ0eS1zZXQg LS0+fA0KcnVsZSBtYWtlLXBhdGgtcHJvcGVydHktc2V0cyAoIGJhc2UtcGF0aCA6IGNvbW1v bi1wcm9wZXJ0aWVzICogOiBwcm9wZXJ0eS1zZXRzICogKQ0Kew0KICAgIGxvY2FsIHJlc3Vs dCA7DQogICAgbG9jYWwgcyA7DQogICAgZm9yIHMgaW4gJChwcm9wZXJ0eS1zZXRzKQ0KICAg IHsNCiAgICAgICAgbG9jYWwgeCA9IA0KICAgICAgICAgICMgZGlyZWN0b3J5IGNvbXBvbmVu dHMNCiAgICAgICAgICAkKGJhc2UtcGF0aCkgDQogICAgICAgICAgWyB1bmdyaXN0LXByb3Bl cnRpZXMNCiAgICAgICAgICAgICAgWyByZW1vdmUtZGVmYXVsdC1wcm9wZXJ0aWVzIFsgc3Bs aXQtcGF0aCAkKHMpIF0gXSANCiAgICAgICAgICBdIA0KICAgICAgICAgICMgcHJvcGVydGll cw0KICAgICAgICAgICQoY29tbW9uLXByb3BlcnRpZXMpICQocykgDQogICAgICAgICAgICA7 DQogICAgICAgIA0KICAgICAgICByZXN1bHQgKz0gJCh4Oko9JChTTEFTSCkpIDsNCiAgICB9 DQoNCiAgICAjIGlmIHRoZXJlIHdlcmUgbm8gb3ZlcnJpZGVzLCBqdXN0IGFkZCB0aGUgYmFz ZSB2YXJpYW50IGFuZCBwcm9wZXJ0aWVzDQogICAgaWYgISAkKHJlc3VsdCkNCiAgICB7DQog ICAgICAgIHJlc3VsdCA9IFsgam9pbiAkKGJhc2UtcGF0aCkgJChjb21tb24tcHJvcGVydGll cykgOiAkKFNMQVNIKSBdIDsNCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoN CiMgc2VncmVnYXRlLW92ZXJyaWRlcyBvdmVycmlkZS12YXIgYmFzZS12YXINCiMNCiMgcmVt b3ZlcyBlbGVtZW50cyBvZiAkKGJhc2UtdmFyKSBmcm9tICQob3ZlcnJpZGUtdmFyKSwgYW5k IHJlbW92ZXMgZWxlbWVudHMNCiMgd2hvc2UgZ3Jpc3QgaXMgaW4gJChvdmVycmlkZS12YXI6 RykgZnJvbSAkKGJhc2UtdmFyKS4NCnJ1bGUgc2VncmVnYXRlLW92ZXJyaWRlcw0Kew0KICAg ICQoPCkgPSBbIGRpZmZlcmVuY2UgJCgkKDwpKSA6ICQoJCg+KSkgXSA7DQoNCiAgICAjIFdo aWNoIGZlYXR1cmVzLCBhbmQgdGh1cyBwcm9wZXJ0aWVzLCBvZiB0aGUgYmFzZSB2YXJpYW50 IGFyZSB3ZSBrZWVwaW5nPw0KICAgIGxvY2FsIGtlcHQtZmVhdHVyZXMgPSBbIGRpZmZlcmVu Y2UgJCgkKD4pOkcpIDogJCgkKDwpOkcpIF0gOw0KICAgICQoPikgPSBbIGdldC1wcm9wZXJ0 aWVzICQoa2VwdC1mZWF0dXJlcykgOiAkKCQoPikpIF0gOw0KfQ0KDQojIElmIGFueSBzaW5n bGUtdmFsdWVkIGZyZWUtZmVhdHVyZSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIGZyZWUt cHJvcGVydHkuLi4sDQojIGV4aXQgd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdl Lg0KcnVsZSByZXBvcnQtZnJlZS1wcm9wZXJ0eS1jb25mbGljdHMgKCBmcmVlLXByb3BlcnR5 ICogOiB0YXJnZXQgKyApDQp7DQogICAgbG9jYWwgcCA9IFsgZ2V0LXByb3BlcnRpZXMgJChn U0lOR0xFX1ZBTFVFRF9GUkVFX0ZFQVRVUkVTKSA6ICQoZnJlZS1wcm9wZXJ0eSkgXSA7DQog ICAgbG9jYWwgZiA9IFsgdW5pcXVlICQocDpHKSBdIDsNCiAgICBpZiAkKHA6RykgIT0gJChm KQ0KICAgIHsNCiAgICAgICAgRVhJVCAkKD4pOiBtdWx0aXBsZSB2YWx1ZXMgZm9yIHNpbmds ZS12YWx1ZWQgZnJlZSBmZWF0dXJlKHMpDQogICAgICAgICAgICBbIGRpZmZlcmVuY2UgJChw OkcpICQoZikgXSByZXF1ZXN0ZWQgOw0KICAgIH0NCn0NCg0KIyBSZXR1cm5zIGEgbGlzdCBv ZiBwYXRoLXByb3BlcnR5LXNldHMgKHNlZSBtYWtlLXBhdGgtcHJvcGVydHktc2V0cyBhYm92 ZSkgZm9yDQojIGFsbCBidWlsZCBjb25maWd1cmF0aW9ucyBiYXNlZCBvbiB0aGUgZ2l2ZW4g dG9vbHNldCwgcmVxdWlyZW1lbnRzLCBhbmQNCiMgYnVpbGQtcmVxdWVzdC4gVGFyZ2V0LW5h bWUgaXMganVzdCB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcuDQpydWxlIGV4cGFuZC1idWls ZC1yZXF1ZXN0ICggdG9vbHNldCB2YXJpYW50IHRhcmdldCA6IHJhdy1yZXF1aXJlbWVudHMg KiA6IHJhdy1idWlsZC1yZXF1ZXN0ICogKQ0Kew0KICAgICMgZ3JhYiB0aGUgcmVxdWlyZW1l bnRzIGFuZCBCVUlMRC1yZXF1ZXN0IHJlbGV2YW50IHRvIHRoaXMgdG9vbHNldCBhbmQgdmFy aWFudA0KICAgIGxvY2FsIHJlcXVpcmVtZW50cyA9IFsgc2VsZWN0LXByb3BlcnRpZXMgJCh0 b29sc2V0KSAkKHZhcmlhbnQpIDogJChyYXctcmVxdWlyZW1lbnRzKSBdIDsNCiAgICBsb2Nh bCBidWlsZC1yZXF1ZXN0ID0gWyBzZWxlY3QtcHJvcGVydGllcyAkKHRvb2xzZXQpICQodmFy aWFudCkgOiAkKHJhdy1idWlsZC1yZXF1ZXN0KSBdIDsNCg0KICAgICMgU2VwYXJhdGUgdGhl IGZyZWUgZmVhdHVyZXMgKGUuZy4gPGRlZmluZT4sIDx1bmRlZj4sIDxpbmNsdWRlPikgZnJv bSB0aGUgb3RoZXJzDQogICAgbG9jYWwgZnJlZS1wcm9wZXJ0aWVzID0gWyBzZWdyZWdhdGUt ZnJlZS1wcm9wZXJ0aWVzIHJlcXVpcmVtZW50cyBidWlsZC1yZXF1ZXN0IF0gOw0KDQogICAg IyBDaGVjayBmb3IgY29uZmxpY3RzDQogICAgcmVwb3J0LWZyZWUtcHJvcGVydHktY29uZmxp Y3RzICQoZnJlZS1wcm9wZXJ0aWVzKSA6ICQodGFyZ2V0KSA7DQogICAgYnVpbGQtcmVxdWVz dCA9IFsgcmVtb3ZlLWluY29tcGF0aWJsZS1idWlsZHMgJChyZXF1aXJlbWVudHMpDQogICAg ICA6ICQoYnVpbGQtcmVxdWVzdCkgOiAkKHRhcmdldCkgXSA7DQoNCiAgICBpZiAkKGJ1aWxk LXJlcXVlc3QpICE9IFNLSVANCiAgICB7DQogICAgICAgICMgR2V0ICB0aGUgYmFzZSB2YXJp YW50IGZvciB0aGUgdG9vbHNldC4gSW5jbHVkZXMgZnJlZSBmZWF0dXJlcw0KICAgICAgICBs b2NhbCBiYXNlLXByb3BlcnRpZXMgPSAkKGdCQVNFX1BST1BFUlRJRVMoJCh0b29sc2V0KSwk KHZhcmlhbnQpKSkgOw0KDQogICAgICAgICMgV2hpY2ggcHJvcGVydGllcyB3aWxsIG92ZXJy aWRlIHNldHRpbmdzIGluIHRoZSBiYXNlIHZhcmlhbnQ/DQogICAgICAgIGxvY2FsIG92ZXJy aWRlLXByb3BlcnRpZXMgPSBbIHVuaXF1ZSAkKHJlcXVpcmVtZW50cykgJChidWlsZC1yZXF1 ZXN0KSBdIDsNCiAgICAgICAgc2VncmVnYXRlLW92ZXJyaWRlcyBvdmVycmlkZS1wcm9wZXJ0 aWVzIDogYmFzZS1wcm9wZXJ0aWVzIDsNCg0KICAgICAgICAjIFdoaWNoIGZlYXR1cmVzIHdp bGwgcGljayB1cCBhIGRlZmF1bHQgdmFsdWUgYmVjYXVzZSB0aGV5IGFyZSBub3QgaW4NCiAg ICAgICAgIyB0aGUgYmFzZSB2YXJpYW50IG9yIGluIHRoZSBvdmVycmlkZXM/DQogICAgICAg IGxvY2FsIHJlbGV2YW50LWZlYXR1cmVzID0gWyByZWxldmFudC1mZWF0dXJlcyAkKHRvb2xz ZXQpIF0gOw0KICAgICAgICBsb2NhbCBvdmVycmlkZS1mcmVlLWZlYXR1cmVzID0gWyBpbnRl cnNlY3Rpb24gJChnU0lOR0xFX1ZBTFVFRF9GUkVFX0ZFQVRVUkVTKQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJChmcmVlLXByb3BlcnRpZXM6RykgXSA7 DQogICAgICAgIGxvY2FsIGRlZmF1bHRlZC1mZWF0dXJlcyA9IFsgZGlmZmVyZW5jZSAkKHJl bGV2YW50LWZlYXR1cmVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAkKG92ZXJyaWRlLXByb3BlcnRpZXM6RykgJChiYXNlLXByb3BlcnRpZXM6RykNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChvdmVycmlkZS1mcmVlLWZlYXR1 cmVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDsNCiAgICAgICAg DQogICAgICAgIGxvY2FsIGRlZmF1bHRlZC1wcm9wZXJ0aWVzID0gWyBmZWF0dXJlLWRlZmF1 bHQgJChkZWZhdWx0ZWQtZmVhdHVyZXMpIF0gOw0KICAgICAgICANCiAgICAgICAgIyBWUDog ZGVmYXVsdGVkLXByb3BlcnRpZXMgaGF2ZSB0aGUgZm9ybSA8ZmVhdHVyZT52YWx1ZSBhbmQg dGhlcmUncyAxIHZhbHVlLg0KICAgICAgICAjIEhlbmNlLCBlYWNoIGVsZW1lbnQgb2YgZGVm YXVsdGVkLXByb3BlcnRpZXMgd2lsbCBiZSBwYXJ0IG9mIGVhY2gNCiAgICAgICAgIyBjb21w b25lbnQgb2Ygb3ZlcnJpZGUtc2V0cyBhbmQgd2lsbCBiZSBhIHBhcnQgb2YgZWFjaCBwcm9w ZXJ0eS1zZXQgDQogICAgICAgICMgcmV0dXJuZWQuIEJ5IHNlZ3JlZ2F0aW5nIHRoZW0sIHRo ZSByZXN1bHQgaXMgY2hhbmdlZCBpbiBvbmx5IG9uZQ0KICAgICAgICAjIHdheTogZnJlZSBw cm9wZXJ0aWVzIGRvZXMgbm90IHNob3cgdXAgaW4gdGFyZ2V0IHBhdGguDQogICAgICAgIGxv Y2FsIGRlZmF1bHRlZC1mcmVlLXByb3BlcnRpZXMgPSBbIHNlZ3JlZ2F0ZS1mcmVlLXByb3Bl cnRpZXMgZGVmYXVsdGVkLXByb3BlcnRpZXMgXSA7DQoNCiAgICAgICAgIw0KICAgICAgICAj IEFsbG93IDxkZWZhdWx0PiBwcm9wZXJ0aWVzIGFuZCBydWxlcyB0byB0YWtlIGVmZmVjdC4N CiAgICAgICAgIw0KICAgICAgICBsb2NhbCBkZWZhdWx0LXJlcXVpcmVtZW50cyA9IFsgZ2V0 LXZhbHVlcyA8ZGVmYXVsdD4gOiAkKGZyZWUtcHJvcGVydGllcykgXSA7DQogICAgICAgIA0K ICAgICAgICBkZWZhdWx0ZWQtcHJvcGVydGllcyA9IFsgcmVwbGFjZS1wcm9wZXJ0aWVzICQo ZGVmYXVsdGVkLXByb3BlcnRpZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogWyBzZWxlY3QtZ3Jpc3RlZCAkKGRlZmF1bHQtcmVxdWlyZW1lbnRzKSBdIF0gOw0KICAg ICAgICANCiAgICAgICAgbG9jYWwgbm9uLWRlZmF1bHRzID0gICQocmVxdWlyZW1lbnRzKSAk KGJ1aWxkLXJlcXVlc3QpICQoZnJlZS1wcm9wZXJ0aWVzKSA7DQoNCiAgICAgICAgZm9yIGxv Y2FsIHIgaW4gWyBzZWxlY3QtdW5ncmlzdGVkICQoZGVmYXVsdC1yZXF1aXJlbWVudHMpIF0N CiAgICAgICAgew0KICAgICAgICAgICAgbG9jYWwgeCA9IFsgJChyKSAkKHRvb2xzZXQpICQo dmFyaWFudCkgOiAkKG5vbi1kZWZhdWx0cykgXSA7DQogICAgICAgICAgICAjIEVDSE8gICQo cikgeWllbGRzICQoeCkgOw0KICAgICAgICAgICAgIyBFQ0hPIGRlZmF1bHRlZC1wcm9wZXJ0 aWVzPSAkKGRlZmF1bHRlZC1wcm9wZXJ0aWVzKSA7DQogICAgICAgICAgICBkZWZhdWx0ZWQt cHJvcGVydGllcyA9IFsgDQogICAgICAgICAgICAgIHJlcGxhY2UtcHJvcGVydGllcyAkKGRl ZmF1bHRlZC1wcm9wZXJ0aWVzKSA6ICQoeCkgXSA7DQogICAgICAgIH0NCiAgICAgICAgDQog ICAgICAgICMgSW4gY2FzZSBhbnkgZGVmYXVsdHMgc2hvdWxkIGNvbmZsaWN0IHdpdGggdGhl IHJlcXVpcmVtZW50cywNCiAgICAgICAgIyBmb3JjZSB0aGVtIHRvIG1hdGNoIHVwLg0KICAg ICAgICBkZWZhdWx0ZWQtcHJvcGVydGllcyA9IFsgcmVwbGFjZS1wcm9wZXJ0aWVzICQoZGVm YXVsdGVkLXByb3BlcnRpZXMpIDogJChyZXF1aXJlbWVudHMpIF0gOw0KDQogICAgICAgICMg Zm9ybSBvdmVycmlkZSBwcm9wZXJ0eSBzZXRzIG9mIHRoZSBmb3JtIChwcm9wZXJ0eTFbL3By b3BlcnR5Mi4uLl0gKSssDQogICAgICAgICMgc29ydGVkIGluIGZlYXR1cmUgb3JkZXIuIFRo ZXNlIHJlcHJlc2VudCB0aGUgcHJvcGVydGllcyBvZiBzdWJ2YXJpYW50cw0KICAgICAgICAj IHRoYXQgZGlmZmVyIGZyb20gdGhlIGJhc2UgdmFyaWFudCANCiAgICAgICAgbG9jYWwgb3Zl cnJpZGUtc2V0cw0KICAgICAgICAgICAgPSBbIG11bHRpcGx5LXByb3BlcnR5LXNldHMgJChv dmVycmlkZS1wcm9wZXJ0aWVzKSAkKGRlZmF1bHRlZC1wcm9wZXJ0aWVzKSBdIDsNCg0KICAg ICAgICAjIHJldHVybiBwYXRoLXByb3BlcnR5LXNldHMgY29ycmVzcG9uZGluZyB0byBlYWNo IChzdWIpdmFyaWFudCBidWlsZA0KICAgICAgICAjIGRlc2NyaWJlZC4NCiAgICAgICAgcmV0 dXJuIFsgbWFrZS1wYXRoLXByb3BlcnR5LXNldHMgDQogICAgICAgICAgICAgICAgICAgJCh0 b29sc2V0KSQoU0xBU0gpJCh2YXJpYW50KQ0KICAgICAgICAgICAgICAgICA6IFsgZml4dXAt cGF0aC1wcm9wZXJ0aWVzIA0KICAgICAgICAgICAgICAgICAgICAgICAgICQoYmFzZS1wcm9w ZXJ0aWVzKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAkKGZyZWUtcHJvcGVydGllcykg DQogICAgICAgICAgICAgICAgICAgICAgICAgJChkZWZhdWx0ZWQtZnJlZS1wcm9wZXJ0aWVz KSANCiAgICAgICAgICAgICAgICAgICAgICAgOiAkKFJFTEFUSVZFX1NVQkRJUikNCiAgICAg ICAgICAgICAgICAgICBdDQogICAgICAgICAgICAgICAgIDogJChvdmVycmlkZS1zZXRzKQ0K ICAgICAgICAgICAgICAgXSA7DQogICAgfQ0KfQ0KDQojIHNwbGl0LXBhdGgtYXQtZ3Jpc3Qg cGF0aA0KIw0KIyBCcmVha3MgcGF0aCBhdCBlYWNoICQoU0xBU0gpIHRoYXQgaXMgZm9sbG93 ZWQgYnkgZ3Jpc3QuIFRoaXMgY2FuIGJlIHVzZWQgdG8NCiMgYnJlYWsgYXBhcnQgcHJvcGVy dHkgc2V0cywgcGFydGljdWxhcmx5IHdoZXJlIHRoZSA8aW5jbHVkZT4gZmVhdHVyZSBpcyB1 c2VkLA0KIyBzaW5jZSBpdHMgdmFsdWUgaXMgdHlwaWNhbGx5IGEgcGF0aC4NCnJ1bGUgc3Bs aXQtcGF0aC1hdC1ncmlzdA0Kew0KICAgIGxvY2FsIGZ1bGwtc3BsaXQgPSBbIHNwbGl0LXBh dGggJCg8KSBdIDsNCiAgICBsb2NhbCBsYXN0IDsNCiAgICBsb2NhbCByZXN1bHQgeCA7DQog ICAgZm9yIHggaW4gJChmdWxsLXNwbGl0KQ0KICAgIHsNCiAgICAgICAgaWYgJCh4OkcpDQog ICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCArPSAkKGxhc3QpIDsNCiAgICAgICAgICAg IGxhc3QgPSAkKHgpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAg ICAgICAgICAgIGxhc3QgPSAkKGxhc3QpJChTTEFTSCkkKHgpIDsNCiAgICAgICAgICAgIGxh c3QgPz0gJCh4KSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSAk KGxhc3QpIDsNCn0NCg0KIw0KIyBHSVZFTjoNCiMNCiMgQSBzZXQgb2YgZGVwZW5kZW5jeSBz b3VyY2VzIHdpdGggZ3Jpc3QgdG8gaW5kaWNhdGUgdGhlIHR5cGVzDQojICg8ZGxsPiosIDxs aWI+KiwgZXRjKQ0KIw0KIyBSRVNVTFQ6DQojDQojIFdpbGwgdXNlIHRoZSB0eXBlLCBiYXNl bmFtZSwgYW5kIFNVRiovUFJFKiB0byBleHBhbmQgdGhlIG5hbWUNCiMgb2YgdGhlIHNvdXJj ZXMgdG8gdGhlaXIgZnVsbHkgc3BlY2lmaWMgdGFyZ2V0IG5hbWUuDQojDQojIEVYQU1QTEU6 DQojDQojIFsgZXhwYW5kLXNvdXJjZS1uYW1lcyA8bGliPnRlc3QgPGRsbD50ZXN0IDxleGU+ dGVzdCBSRUFETUUudHh0IDxweWQ+dGVzdCBdDQojDQojIFJFVFVSTlM6DQojDQojIDxsaWI+ bGlidGVzdC5hIDxkbGw+bGlidGVzdC5zbyA8ZXhlPnRlc3QuYXBwIFJFQURNRS5UWFQgPHB5 ZD50ZXN0LnNvDQojDQpydWxlIGV4cGFuZC1zb3VyY2UtbmFtZXMgKCBzb3VyY2VzICogKQ0K ew0KICAgIGxvY2FsIHgtc291cmNlcyA9IDsNCiAgICBmb3IgbG9jYWwgc291cmNlIGluICQo c291cmNlcykNCiAgICB7DQogICAgICAgIGxvY2FsIGdyaXN0ID0gWyB1bmdyaXN0ICQoc291 cmNlOkcpIF0gOw0KICAgICAgICBsb2NhbCB0eXBlID0gJChnVEFSR0VUX1RZUEVfSUQoJChn cmlzdCkpKSA7DQogICAgICAgIGlmICQodHlwZSkNCiAgICAgICAgew0KICAgICAgICAgICAg bG9jYWwgcCA9ICIiIDsgaWYgJChzb3VyY2U6Qj06Uz06Rz0pIHsgcCA9ICIvIiA7IH0NCiAg ICAgICAgICAgIGxvY2FsIHByZWZpeCA9ICIiIDsNCiAgICAgICAgICAgIGxvY2FsIHN1ZmZp eCA9ICIiIDsNCiAgICAgICAgICAgIGlmICQoUFJFJCh0eXBlKVsxXSkgeyBwcmVmaXggPSAk KFBSRSQodHlwZSlbMV0pIDsgfQ0KICAgICAgICAgICAgaWYgJChTVUYkKHR5cGUpWzFdKSB7 IHN1ZmZpeCA9ICQoU1VGJCh0eXBlKVsxXSkgOyB9DQogICAgICAgICAgICB4LXNvdXJjZXMg Kz0gJChzb3VyY2U6Qj06Uz0pJChwKSQocHJlZml4KSQoc291cmNlOkI6Uz0pJChzdWZmaXgp IDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHgt c291cmNlcyArPSAkKHNvdXJjZSkgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAk KHgtc291cmNlcykgOw0KfQ0KDQojDQojIEdJVkVOOg0KIw0KIyBBIHNldCBvZiB0YXJnZXRz IGFuZCBhIHNpbmdsZSB0YXJnZXQgdHlwZSBmb3IgYWxsIHRoZSB0YXJnZXRzDQojIChETEws IExJQiwgZXRjLikNCiMNCiMgUkVTVUxUOg0KIw0KIyBXaWxsIHVzZSB0aGUgdHlwZSwgYmFz ZW5hbWUsIGFuZCBTVUYqL1BSRSogdG8gZXhwYW5kIHRoZSBuYW1lDQojIG9mIHRoZSB0YXJn ZXRzIHRvIHRoZWlyIGZ1bGx5IHNwZWNpZmljIHRhcmdldCBuYW1lLg0KIw0KIyBFWEFNUExF Og0KIw0KIyBbIGV4cGFuZC10YXJnZXRzLW5hbWVzIGZvbyBiYXIgOiBETEwgXQ0KIw0KIyBS RVRVUk5TOg0KIw0KIyBsaWJmb28uYSBsaWJiYXIuc28NCiMNCnJ1bGUgZXhwYW5kLXRhcmdl dC1uYW1lcyAoIHRhcmdldHMgKyA6IHRhcmdldC10eXBlICkNCnsNCiAgICBsb2NhbCB4LXRh cmdldHMgPSA7DQogICAgZm9yIGxvY2FsIHRhcmdldCBpbiAkKHRhcmdldHMpDQogICAgew0K ICAgICAgICBsb2NhbCBwcmVmaXggPSAiIiA7DQogICAgICAgIGxvY2FsIHN1ZmZpeCA9ICIi IDsNCiAgICAgICAgaWYgJChQUkUkKHRhcmdldC10eXBlKVsxXSkgeyBwcmVmaXggPSAkKFBS RSQodGFyZ2V0LXR5cGUpWzFdKSA7IH0NCiAgICAgICAgaWYgJChTVUYkKHRhcmdldC10eXBl KVsxXSkgeyBzdWZmaXggPSAkKFNVRiQodGFyZ2V0LXR5cGUpWzFdKSA7IH0NCiAgICAgICAg eC10YXJnZXRzICs9ICQocHJlZml4KSQodGFyZ2V0KSQoc3VmZml4KSA7DQogICAgfQ0KICAg IHJldHVybiAkKHgtdGFyZ2V0cykgOw0KfQ0KDQojIGRlY2xhcmUtbG9jYWwtdGFyZ2V0IG5h bWUgOiBzb3VyY2VzIDogcmVxdWlyZW1lbnRzIDogbG9jYWwtQlVJTEQgOiB0YXJnZXQtdHlw ZQ0KIw0KIyBkZWNsYXJlcyBhIHN1YnByb2plY3QtbG9jYWwgdGFyZ2V0IG9mIHRoZSBnaXZl biBuYW1lIGFuZCB0YXJnZXQtdHlwZS4gVGhpcyBpcw0KIyBhbGwgdG9wLWxldmVsIHJ1bGVz IHdoaWNoIGRlY2xhcmUgdGFyZ2V0cyBzaG91bGQgZXZlbnR1YWxseSBnbyB0aHJvdWdoIGhl cmUuDQojDQojIFJFVFVSTlM6IHRoZSBhIGxpc3Qgb2YgdGFyZ2V0IG5hbWVzIGZvciB0aGUg ZmlsZXMgYnVpbHQgYnkgdGhlIHRhcmdldC4NCnJ1bGUgZGVjbGFyZS1sb2NhbC10YXJnZXQg KCB0YXJnZXQgOiBzb3VyY2VzICogOiByZXF1aXJlbWVudHMgKiA6IGRlZmF1bHQtYnVpbGQg KiA6IHRhcmdldC10eXBlICkNCnsNCiAgICAjIFdlIGV4cGFuZCBvdXQgdGhlIG5hbWUgb2Yg dGhlIHRhcmdldA0KICAgIGxvY2FsIHgtdGFyZ2V0ID0gWyBleHBhbmQtdGFyZ2V0LW5hbWVz ICQodGFyZ2V0KSA6ICQodGFyZ2V0LXR5cGUpIF0gOw0KDQogICAgIyBXZSBhZGQgU09VUkNF X0dSSVNUIHRoZSBiYXNlIHRhcmdldCBuYW1lIGhlcmUgYmVjYXVzZSB3ZSdyZSByZWZlcnJp bmcgdGhlDQogICAgIyBhYnN0cmFjdCAgdGFyZ2V0IHdoaWNoIGdlbmVyYXRlcyBhbGwgb2Yg dGhlIGFjdHVhbCBidWlsZHMuIFdlIG5lZWQgYSB3YXkgdG8NCiAgICAjIGRpc3Rpbmd1aXNo IHRhcmdldHMgb2YgdGhlIHNhbWUgbmFtZSBmcm9tIGRpZmZlcmVudCBzdWJwcm9qZWN0cy4g DQogICAgbG9jYWwgdGFyZ2V0LWlkID0gWyBGR3Jpc3RGaWxlcyAkKHgtdGFyZ2V0KSBdIDsN Cg0KICAgIGlmICEgJCh0YXJnZXQtdHlwZSkNCiAgICB7DQogICAgICAgIEVYSVQgTm8gdGFy Z2V0IHR5cGUgZ2l2ZW4gZm9yICIkKHgtdGFyZ2V0KSIgOw0KICAgIH0NCg0KICAgICMgRGVm aW5lIHRoZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgdGFyZ2V0Lg0KICAgIGdUQVJHRVRfTkFN RSgkKHRhcmdldC1pZCkpID0gJCh0YXJnZXQpIDsNCg0KICAgICMgRGVjbGFyZSB0aGUgYmFz aWMgdGFyZ2V0Lg0KICAgIGRlY2xhcmUtYmFzaWMtdGFyZ2V0ICQodGFyZ2V0LWlkKSA6ICQo c291cmNlcykgOiAkKHJlcXVpcmVtZW50cykgOiAkKGRlZmF1bHQtYnVpbGQpIDogJCh0YXJn ZXQtdHlwZSkgOw0KDQogICAgIyBHZW5lcmF0ZSBidWlsZCBpbnN0cnVjdGlvbnMsIGJ1dCBv bmx5IGlmIHRoZSB0YXJnZXQgaGFzIGEgZ2VuZXJhdG9yLg0KICAgICMNCiAgICBpZiAkKGdH RU5FUkFUT1JfRlVOQ1RJT04oJChnVEFSR0VUX1RZUEUoJCh0YXJnZXQtaWQpKSkpKQ0KICAg IHsNCiAgICAgICAgIyBTdXByZXNzIHRoZSByZWd1bGFyIGJ1aWxkIG9mIHRoaXMgdGFyZ2V0 DQogICAgICAgIGxvY2FsIHN1cHByZXNzID0gWyBnZXQtdmFsdWVzIDxzdXBwcmVzcz4gOiAk KGRlZmF1bHQtYnVpbGQpIF0gOw0KICAgICAgICBsb2NhbCBnU1VQUFJFU1NfRkFLRV9UQVJH RVRTID0gJChzdXBwcmVzc1sxXSkgOw0KDQogICAgICAgIGRlY2xhcmUtZmFrZS10YXJnZXRz ICQodGFyZ2V0KSA6ICQodGFyZ2V0LWlkKSA7DQoNCiAgICAgICAgIyBKdXN0IGdhdGhlciBp bmZvcm1hdGlvbiBpZiB3ZSBhcmUgaW5jbHVkaW5nIGEgbGlicmFyeSdzIEphbWZpbGUgZm9y IGENCiAgICAgICAgIyBkZXBlbmRlbnQgdGFyZ2V0LiBEb24ndCBnZW5lcmF0ZSBidWlsZCBp bnN0cnVjdGlvbnMgaGVyZS4NCiAgICAgICAgaWYgISAkKGdJTl9MSUJfSU5DTFVERSkNCiAg ICAgICAgew0KICAgICAgICAgICAgbWFpbi10YXJnZXQgJCh0YXJnZXQtaWQpIDogJChnVEFS R0VUX0RFRkFVTFRfQlVJTEQoJCh0YXJnZXQtaWQpKSkgOw0KICAgICAgICB9DQogICAgfQ0K DQogICAgcmV0dXJuICQoZ1RBUkdFVF9GSUxFUygkKHRhcmdldC1pZCkpKSA7DQp9DQoNCiMg ZGVjbGFyZS1iYXNpYy10YXJnZXQgdGFyZ2V0LWlkIDogc291cmNlcyA6IHJlcXVpcmVtZW50 cyA6IGxvY2FsLUJVSUxEIDogdGFyZ2V0LXR5cGUNCiMNCiMgRGVjbGFyZXMgYSBiYXNpYyB0 YXJnZXQgZm9yIHRoZSBnaXZlbiB0YXJnZXQtaWQgYW5kIHRhcmdldC10eXBlLg0KIyBBbGwg dGFyZ2V0IGdlbmVyYXRpb24gc2hvdWxkIGdvIHRocm91Z2ggaGVyZSB0byBlbnN1cmUgYWxs IHZhcnMgYXJlIHNldA0KIyBmb3IgdGhlIHRhcmdldHMuDQojDQojIFdBUk5JTkc6IFRoaXMg b25seSBkZWNsYXJlcywgbm8gYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgaGVy ZS4NCnJ1bGUgZGVjbGFyZS1iYXNpYy10YXJnZXQgKCB0YXJnZXQtaWQgOiBzb3VyY2VzICog OiByZXF1aXJlbWVudHMgKiA6IGRlZmF1bHQtYnVpbGQgKiA6IHRhcmdldC10eXBlICkNCnsN CiAgICAjIFdlIGV4cGFuZCBvdXQgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZXMNCiAgICBsb2Nh bCB4LXNvdXJjZXMgPSBbIGV4cGFuZC1zb3VyY2UtbmFtZXMgJChzb3VyY2VzKSBdIDsNCg0K ICAgICMgRGVmaW5lIHRoZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgdGFyZ2V0LCBidXQgb25s eSBpZiB3ZSBoYXZlbid0IGFscmVhZHkuDQogICAgIw0KICAgIGlmICEgJChnVEFSR0VUX1RZ UEUoJCh0YXJnZXQtaWQpKSkNCiAgICB7DQogICAgICAgICMgU2F2ZSBiYXNpYyBpbmZvcm1h dGlvbiBhYm91dCB0aGUgdGFyZ2V0Lg0KICAgICAgICAjDQogICAgICAgIGdUQVJHRVRfVFlQ RSgkKHRhcmdldC1pZCkpID0gJCh0YXJnZXQtdHlwZSkgOw0KDQogICAgICAgICMgQWRkIHRo ZSBzcGVjaWZpZWQgcmVxdWlyZW1lbnRzIHRvIGFueSByZXF1aXJlbWVudHMgZ2l2ZW4gYnkg dGhlIHRhcmdldA0KICAgICAgICAjIHR5cGUsIGFuZCB0aGUgY29ycmVzcG9uZGluZyA8dGFy Z2V0LXR5cGU+IHByb3BlcnR5Lg0KICAgICAgICAjDQogICAgICAgIGdUQVJHRVRfUkVRVUlS RU1FTlRTKCQodGFyZ2V0LWlkKSkNCiAgICAgICAgICAgID0gdG9vbHNldDo6cmVxdWlyZW1l bnRzICQocmVxdWlyZW1lbnRzKSAkKGdUQVJHRVRfVFlQRV9SRVFVSVJFTUVOVFMoJCh0YXJn ZXQtdHlwZSkpKSA7DQogICAgICAgIGlmICEgJChnTk9fVEFSR0VUX1RZUEVfUkVRVUlSRU1F TlQoJCh0YXJnZXQtdHlwZSkpKQ0KICAgICAgICB7DQogICAgICAgICAgICBnVEFSR0VUX1JF UVVJUkVNRU5UUygkKHRhcmdldC1pZCkpICs9IDx0YXJnZXQtdHlwZT4kKHRhcmdldC10eXBl KSA7DQogICAgICAgIH0NCg0KICAgICAgICAjIENvbGxlY3QgdGhlIHJlY29nbml6ZWQgZGVw ZW5kZW5jaWVzIHRvIG90aGVyIHRhcmdldHMuDQogICAgICAgICMNCiAgICAgICAgbG9jYWwg ZGVwZW5kZW5jaWVzIDsNCiAgICAgICAgZm9yIGxvY2FsIHNvdXJjZSBpbiBbIHNlbGVjdC1n cmlzdGVkICQoeC1zb3VyY2VzKSBdDQogICAgICAgIHsNCiAgICAgICAgICAgIGxvY2FsIGRl cGVuZGVuY3ktdHlwZSA9IFsgdW5ncmlzdCAkKHNvdXJjZTpHOkwpIF0gOw0KICAgICAgICAg ICAgbG9jYWwgZGVwZW5kZW5jeS10eXBlLWlkID0gJChnVEFSR0VUX1RZUEVfSUQoJChkZXBl bmRlbmN5LXR5cGUpKSkgOw0KICAgICAgICAgICAgaWYgJChnSVNfREVQRU5ERU5DWSgkKGRl cGVuZGVuY3ktdHlwZS1pZCkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdU QVJHRVRfREVQUygkKHRhcmdldC1pZCkpICs9ICQoc291cmNlOkc9JChkZXBlbmRlbmN5LXR5 cGUtaWQpKSA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAjIFNvdXJj ZXMgdGhhdCBhcmVuJ3QgcmVjb2duaXplZCBhcyB0YXJnZXRzLCBhcmUgY29uc2lkZXJlZCBy YXcgc291cmNlcy4NCiAgICAgICAgIw0KICAgICAgICBnVEFSR0VUX1NPVVJDRVMoJCh0YXJn ZXQtaWQpKQ0KICAgICAgICAgICAgPSBbIEZHcmlzdEZpbGVzDQogICAgICAgICAgICAgICAg WyBkaWZmZXJlbmNlICQoeC1zb3VyY2VzOkc9KSA6ICQoZ1RBUkdFVF9ERVBTKCQodGFyZ2V0 LWlkKSk6Rz0pIF0gXSA7DQoNCiAgICAgICAgIyBTYXZlIHRoZSBkZWZhdWx0IGJ1aWxkcy4N CiAgICAgICAgIw0KICAgICAgICBnVEFSR0VUX0RFRkFVTFRfQlVJTEQoJCh0YXJnZXQtaWQp KSA9ICQoZGVmYXVsdC1idWlsZCkgOw0KDQogICAgICAgICMgQXBwbHkgYW55IG1vZGlmaWVy cyB0byB0aGUgdGFyZ2V0IHNwZWNzLg0KICAgICAgICAjDQogICAgICAgIGZvciBsb2NhbCBt b2QgaW4gJChnVEFSR0VUX0RFUFMoJCh0YXJnZXQtaWQpKSkNCiAgICAgICAgew0KICAgICAg ICAgICAgbG9jYWwgZGVwZW5kZW5jeS10eXBlLWlkID0gWyB1bmdyaXN0ICQobW9kOkcpIF0g Ow0KICAgICAgICAgICAgbG9jYWwgbW9kaWZpZXItZnVuY3Rpb24gPSAkKGdNT0RJRklFUl9G VU5DVElPTigkKGRlcGVuZGVuY3ktdHlwZS1pZCkpKSA7DQogICAgICAgICAgICBpZiAkKG1v ZGlmaWVyLWZ1bmN0aW9uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICMgUmVt b3ZlIGFuZCBhcHBseSB0aGUgbW9kaWZpZXIuDQogICAgICAgICAgICAgICAgZ1RBUkdFVF9E RVBTKCQodGFyZ2V0LWlkKSkgPSBbIGRpZmZlcmVuY2UgJChnVEFSR0VUX0RFUFMoJCh0YXJn ZXQtaWQpKSkgOiAkKG1vZCkgXSA7DQogICAgICAgICAgICAgICAgbG9jYWwgaWdub3JlZCA9 IFsgJChtb2RpZmllci1mdW5jdGlvbikgJCh0YXJnZXQtaWQpIDogJChtb2QpIF0gOw0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgICMgVHJ5aW5nIHRvIGRlZmluZSB0 aGUgc2FtZSBzcGVjaWZpYyB0YXJnZXQgd2l0aCBhIGRpZmZlcmVudCB0eXBlLg0KICAgICMN CiAgICBlbHNlIGlmICQoZ1RBUkdFVF9UWVBFKCQodGFyZ2V0LWlkKSkpICE9ICQodGFyZ2V0 LXR5cGUpDQogICAgew0KICAgICAgICBFWElUIGNvbmZsaWN0aW5nIHRhcmdldCB0eXBlcyBm b3IgIiQoeC10YXJnZXQpIjoNCiAgICAgICAgIiQoZ1RBUkdFVF9UWVBFKCQodGFyZ2V0LWlk KSkpIiAiJCh0YXJnZXQtdHlwZSkiIDsNCiAgICB9DQp9DQoNCiMgZGlyZWN0b3J5LW9mIGZp bGVzLi4uDQojDQojIFJldHVybnMgYSBsaXN0IG9mIHRoZSBkaXJlY3RvcmllcyBjb250YWlu aW5nIGVhY2ggZWxlbWVudCBvZiBmaWxlcw0KcnVsZSBkaXJlY3Rvcnktb2YNCnsNCiAgICBs b2NhbCByZXN1bHQgZCA7DQogICAgZm9yIGQgaW4gJCg8OkQpDQogICAgew0KICAgICAgICBp ZiAkKGQpID0gIiINCiAgICAgICAgew0KICAgICAgICAgICAgcmVzdWx0ICs9ICQoRE9UKSA7 DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1 bHQgKz0gJChkKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7 DQp9DQoNCiMgdG9wLXJlbGF0aXZlLXRva2VucyBwYXRoDQojDQojIFJldHVybnMgYSBsaXN0 IG9mIHBhdGggZWxlbWVudHMgd2hpY2ggZm9ybSB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIFRP UCB0byBwYXRoLA0KIyB3aGljaCBpcyBleHBlY3RlZCB0byBiZSBnaXZlbiByZWxhdGl2ZSB0 byB0aGUgY3VycmVudCBzdWJwcm9qZWN0Lg0KcnVsZSB0b3AtcmVsYXRpdmUtdG9rZW5zDQp7 DQogICAgcmV0dXJuIFsgc2ltcGxpZnktcGF0aC10b2tlbnMgJChTVUJESVJfVE9LRU5TKSBb IHNwbGl0LXBhdGggJCg8KSBdIF0gOw0KfQ0KDQoucHJvamVjdC1yb290LXRva2VucyA9IFsg c3BsaXQtcGF0aCAkKC5ib29zdC1idWlsZC1maWxlOkQpIF0gOw0KDQojIHRyeSB0byBtYWtl IGEgcG90ZW50aWFsbHkgYWJzb2x1dGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdA0K IyByb290LiAgT25seSB3b3JrcyBmb3IgcGF0aHMgYmVsb3cgdGhlIHByb2plY3Qgcm9vdCBy aWdodCBub3c7IG90aGVycw0KIyB3aWxsIHJlbWFpbiBhYnNvbHV0ZS4NCnJ1bGUgcmVsYXRp dmUtcGF0aCAoIHBhdGggKQ0Kew0KICAgIGxvY2FsIHBhdGgtdG9rZW5zID0gWyBzcGxpdC1w YXRoICQocGF0aCkgXSA7DQogICAgDQogICAgIyB0cnkgdG8gc3RyaXAgdGhlIHByb2plY3Qg cm9vdA0KICAgIGxvY2FsIHIgPSAkKC5wcm9qZWN0LXJvb3QtdG9rZW5zKSA7DQogICAgbG9j YWwgcCA9ICQocGF0aC10b2tlbnMpIDsNCiAgICB3aGlsZSAkKHIpICYmICggJChyWzFdKSA9 ICQocFsxXSkgKQ0KICAgIHsNCiAgICAgICAgcCA9ICQocFsyLV0pIDsNCiAgICAgICAgciA9 ICQoclsyLV0pIDsNCiAgICB9DQogICAgDQogICAgIyBpZiBzdWNjZXNzZnVsLCB1c2UgdGhl IHN0cmlwcGVkIHByb2plY3Qgcm9vdA0KICAgIGlmICEgJChyKQ0KICAgIHsNCiAgICAgICAg cGF0aC10b2tlbnMgPSAkKHApIDsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIFsgdG9rZW5z LXRvLXNpbXBsZS1wYXRoICAkKHBhdGgtdG9rZW5zKSBdIDsNCn0NCg0KIyBkZXBlbmRlbnQt aW5jbHVkZSB0YXJnZXQtcGF0aC4uLg0KIw0KIyBGb3IgZWFjaCB0YXJnZXQtcGF0aCwgZW5z dXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIEphbWZpbGUgaGFzIGJlZW4NCiMgaW5jbHVkZWQu IFVzZWQgd2hlbiBhIHRhcmdldCBkZWNsYXJlcyBpdHMgZGVwZW5kZW5jeSBvbiBhbm90aGVy IHRhcmdldC4NCnJ1bGUgZGVwZW5kZW50LWluY2x1ZGUNCnsNCiAgICBsb2NhbCB0YXJnZXQg Ow0KICAgIGZvciB0YXJnZXQgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgew0KICAgICAgICAg ICAgbG9jYWwgLnByb2plY3QtcGF0aCA9IFsgdGFyZ2V0LXBhdGgtb2YgJCh0YXJnZXQpIF0g Ow0KICAgICAgICAgICAgLnByb2plY3QtcGF0aCA9ICQoLnByb2plY3QtcGF0aDpEKSA7DQog ICAgICAgICAgICANCiAgICAgICAgICAgICMgbG9hZCB0aGUgZmlsZSBhcyBhIGRlcGVuZGVu dC4NCiAgICAgICAgICAgIGxvY2FsIGdJTl9MSUJfSU5DTFVERSA9IFRSVUUgOw0KICAgICAg ICAgICAgDQogICAgICAgICAgICAjDQogICAgICAgICAgICBsb2NhbCBbIHByb3RlY3Qtc3Vi cHJvamVjdCBdIDsNCiAgICAgICAgICAgIGxvY2FsIC5wcm9qZWN0LW5hbWUtYW5kLXN1YmRp ciA9IFsgZW50ZXItc3VicHJvamVjdCAkKC5wcm9qZWN0LXBhdGgpIF0gOw0KICAgICAgICAg ICAgbG9jYWwgLnByb2plY3QtbmFtZSA9ICQoLnByb2plY3QtbmFtZS1hbmQtc3ViZGlyWzFd KSA7DQogICAgICAgICAgICBsb2NhbCAucHJvamVjdC1zdWJkaXIgPSAkKC5wcm9qZWN0LW5h bWUtYW5kLXN1YmRpclsyXSkgOw0KICAgICAgICAgICAgbG9jYWwgLmphbWZpbGUtcGF0aCA9 IFsgcm9vdC1wYXRocyAkKEpBTUZJTEUpIDogWyByb290LXBhdGhzICQoLnByb2plY3Qtc3Vi ZGlyKSA6ICQoVE9QKSBdIF0gOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBsb2FkLWph bWZpbGVzICQoLmphbWZpbGUtcGF0aCkgOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQojIHNl Z3JlZ2F0ZS1mcmVlLXByb3BlcnRpZXMgdmFyaWFibGUxIHZhcmlhYmxlMi4uLg0KIw0KIyBy ZXR1cm5zIHRoZSBhbmQgcmVtb3ZlcyB0aGUgdW5pcXVlIGxpc3Qgb2YgZnJlZSBwcm9wZXJ0 aWVzIGZyb20NCiMgJCh2YXJpYWJsZTEpICQodmFyaWFibGUyKS4uLiANCnJ1bGUgc2VncmVn YXRlLWZyZWUtcHJvcGVydGllcw0Kew0KICAgIGxvY2FsIGZyZWUtcHJvcGVydGllcyA9IFsg dW5pcXVlIFsgZ2V0LXByb3BlcnRpZXMgJChnRlJFRV9GRUFUVVJFUykgOiAkKCQoPCkpIF0g XSA7DQogICAgbG9jYWwgdiA7DQogICAgZm9yIHYgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAg JCh2KSA9IFsgZGlmZmVyZW5jZSAkKCQodikpIDogJChmcmVlLXByb3BlcnRpZXMpIF0gOw0K ICAgIH0NCiAgICByZXR1cm4gJChmcmVlLXByb3BlcnRpZXMpIDsNCn0NCg0KIyBpcy1saW5r LWNvbXBhdGlibGUgZmVhdHVyZSA6IHZhbHVlMSA6IHZhbHVlMg0KIw0KIyByZXR1cm4gbm9u LWVtcHR5IGlmZiBhIGxpYnJhcnkgYnVpbHQgd2l0aCA8ZmVhdHVyZT52YWx1ZTEgY2FuIGJl IGxpbmtlZCBpbnRvIGENCiMgdGFyZ2V0IHdpdGggPGZlYXR1cmU+dmFsdWUyLCBlbXB0eSBv dGhlcndpc2UNCnJ1bGUgaXMtbGluay1jb21wYXRpYmxlICggZmVhdHVyZSA6IHZhbHVlMSA6 IHZhbHVlMiApDQp7DQogICAgcmV0dXJuIFsgaW50ZXJzZWN0aW9uDQogICAgICAgICQoZmVh dHVyZSkgJCh2YWx1ZTE6Rz0kKGZlYXR1cmUpKQ0KICAgICAgICAkKHZhbHVlMTpHPSQoZmVh dHVyZSkpJChTTEFTSCkkKHZhbHVlMTI6Rz0kKGZlYXR1cmUpKQ0KICAgICAgICAkKHZhbHVl MjpHPSQoZmVhdHVyZSkpDQogICAgICAgIDogJChnTElOS19DT01QQVRJQkxFKSBdIDsNCn0N Cg0KIyBmaW5kLWNvbXBhdGlibGUtc3VidmFyaWFudCBtYWluLXRhcmdldCA6IHRvb2xzZXQg dmFyaWFudCA6IGRlcGVuZGVudC1zaW1wbGUtcHJvcGVydGllcw0KcnVsZSBmaW5kLWNvbXBh dGlibGUtc3VidmFyaWFudCAoIG1haW4tdGFyZ2V0IDogdG9vbHNldCB2YXJpYW50IDogZGVw ZW5kZW50LXNpbXBsZS1wcm9wZXJ0aWVzICogKQ0Kew0KICAgICMgY2FsY3VsYXRlIHRoZSBz dWJ2YXJpYW50IG9ubHkgb2Ygd2hhdCBpcyByZXF1ZXN0ZWQNCiAgICAjIHRoZSBzdWJ2YXJp YW50IHJlcXVlc3RlZC4uLg0KICAgIGxvY2FsIHN2LXJlcXVlc3QgPQ0KICAgICAgICBbIG11 bHRpcGx5LXByb3BlcnR5LXNldHMNCiAgICAgICAgICAgIFsgZ2V0LXByb3BlcnRpZXMgJChC VUlMRDpHKSA6ICQoZGVwZW5kZW50LXNpbXBsZS1wcm9wZXJ0aWVzKSBdIF0gOw0KICAgICMg dGhlIGF2YWlsYWJsZSBidWlsZCByZXF1ZXN0cy4uLg0KICAgIGxvY2FsIGJ1aWxkLXJlcXVl c3RzID0NCiAgICAgICAgWyBtdWx0aXBseS1wcm9wZXJ0eS1zZXRzIFsgc2VsZWN0LWdyaXN0 ZWQgJChCVUlMRCkgXSBdIDsNCiAgICAjIHRoZSBidWlsZCByZXF1c3Qgd2Ugd2FudCB0byBi dWlsZC4uLg0KICAgIGxvY2FsIHN2LWJ1aWxkID0NCiAgICAgICAgWyBpbnRlcnNlY3Rpb24g JChzdi1yZXF1ZXN0KSA6ICQoYnVpbGQtcmVxdWVzdHMpIF0gOw0KICAgICAgICBzdi1idWls ZCA/PSAiIiA7DQogICAgbG9jYWwgQlVJTEQgPSAkKHZhcmlhbnQpIFsgc3BsaXQtcGF0aCAk KHN2LWJ1aWxkKSBdIDsNCiAgICBsb2NhbCBnVEFSR0VUX0RFRkFVTFRfQlVJTEQoJChtYWlu LXRhcmdldCkpID0gOw0KICAgICMgdGhlIGZ1bGwgc3VidmFyaWFudCB0byBidWlsZC4uLg0K ICAgIGxvY2FsIHN1YnZhcmlhbnQgPSBbIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgJCht YWluLXRhcmdldCkgOiAkKHZhcmlhbnQpIDogJCh0b29sc2V0KSBdIDsNCg0KICAgIGxvY2Fs IHN2LXRhcmdldCA9IDsgbG9jYWwgc3YtcHJvcGVydGllcyA9IDsgbG9jYWwgc3YtdG9vbHNl dCA9IDsgbG9jYWwgc3YtdmFyaWFudCA9IDsNCiAgICBzcGxpdC10YXJnZXQtc3VidmFyaWFu dCBzdi10YXJnZXQgc3YtcHJvcGVydGllcyBzdi10b29sc2V0IHN2LXZhcmlhbnQgOiAkKHN1 YnZhcmlhbnQpIDsNCiAgICBsb2NhbCBzdi1vdmVycmlkZXMgPQ0KICAgICAgICBbIGRpZmZl cmVuY2UgJChkZXBlbmRlbnQtc2ltcGxlLXByb3BlcnRpZXMpIDogWyBzZWxlY3QtZ3Jpc3Rl ZCAkKHN2LXByb3BlcnRpZXMpIF0gXSA7DQogICAgc3Ytb3ZlcnJpZGVzICs9DQogICAgICAg IFsgZ2V0LXByb3BlcnRpZXMNCiAgICAgICAgICAgIFsgZGlmZmVyZW5jZSAkKGRlcGVuZGVu dC1zaW1wbGUtcHJvcGVydGllczpHKSA6ICQoc3Ytb3ZlcnJpZGVzOkcpIF0gOiAkKHN2LXBy b3BlcnRpZXMpIF0gOw0KDQogICAgaWYgISAkKGdUQVJHRVRfVFlQRSgkKG1haW4tdGFyZ2V0 KSkpDQogICAgew0KICAgICAgICBFWElUIHVua25vd24gZGVwZW5kZW50IHRhcmdldCAkKG1h aW4tdGFyZ2V0KSA7DQogICAgfQ0KICAgIA0KICAgICMgY2hlY2sgdG8gbWFrZSBzdXJlIHdl IGNhbiBsaW5rIGFnYWluc3QgdGhlIHN1YnZhcmlhbnQNCiAgICBsb2NhbCB0YXJnZXQtcmVx dWlyZW1lbnRzDQogICAgICAgID0gWyBzZWxlY3QtZ3Jpc3RlZCAkKGdUQVJHRVRfUkVRVUlS RU1FTlRTKCQobWFpbi10YXJnZXQpKSkgXSA7DQogICAgbG9jYWwgb3ZlcnJpZGUtY29uZmxp Y3RzDQogICAgICAgID0gWyBnZXQtcHJvcGVydGllcyAkKHRhcmdldC1yZXF1aXJlbWVudHM6 RykgJChnQUxXQVlTX1JFTEVWQU5UKSA6ICQoc3Ytb3ZlcnJpZGVzKSBdIDsNCiAgICBmb3Ig bG9jYWwgc3Ytb3ZlcnJpZGUgaW4gJChvdmVycmlkZS1jb25mbGljdHMpDQogICAgew0KICAg ICAgICBsb2NhbCBzdi1yZXF1aXJlZCA9IFsgZ2V0LXZhbHVlcyAkKHN2LW92ZXJyaWRlOkcp IDogJChzdi1wcm9wZXJ0aWVzKSBdIDsNCiAgICAgICAgaWYgJChzdi1vdmVycmlkZTpHPSkg IT0gJChzdi1yZXF1aXJlZCkgJiYNCiAgICAgICAgICAgICEgWyBpcy1saW5rLWNvbXBhdGli bGUgJChzdi1vdmVycmlkZTpHKSA6ICQoc3Ytb3ZlcnJpZGU6Rz0pIDogJChzdi1yZXF1aXJl ZCkgXQ0KICAgICAgICB7DQogICAgICAgICAgICBFWElUICQobWFpbi10YXJnZXQpOiByZXF1 aXJlZCBwcm9wZXJ0eSAkKHN2LW92ZXJyaWRlOkcpJChzdi1yZXF1aXJlZCkNCiAgICAgICAg ICAgICAgICBpbmNvbXBhdGlibGUgd2l0aCAkKHN2LW92ZXJyaWRlKSA7DQogICAgICAgIH0N CiAgICB9DQoNCiAgICAjIG5vdyB0aGF0IHdlIGhhdmUgYSBtb3N0bHkgKG9yIGNvbXBsZXRl bHkpIGNvbXBhdGlibGUgc3VidmFyaWFudCBkbyB0aGUgb3ZlcnJpZGVzDQogICAgbG9jYWwg Z1RBUkdFVF9SRVFVSVJFTUVOVFMoJChtYWluLXRhcmdldCkpID0NCiAgICAgICAgIyBwcm9w ZXJ0eSBydWxlcy4uLg0KICAgICAgICBbIHNlbGVjdC11bmdyaXN0ZWQgJChnVEFSR0VUX1JF UVVJUkVNRU5UUygkKG1haW4tdGFyZ2V0KSkpIF0NCiAgICAgICAgIyBhbHdheXMgcmVsZXZh bnQgcHJvcGVydGllcyB0byB0YXJnZXQuLi4NCiAgICAgICAgWyBkaWZmZXJlbmNlDQogICAg ICAgICAgICAkKHRhcmdldC1yZXF1aXJlbWVudHMpIDoNCiAgICAgICAgICAgIFsgZ2V0LXBy b3BlcnRpZXMgWyBkaWZmZXJlbmNlICQoc3Ytb3ZlcnJpZGVzOkcpIDogJChnQUxXQVlTX1JF TEVWQU5UKSBdIDogJCh0YXJnZXQtcmVxdWlyZW1lbnRzKSBdIF0NCiAgICAgICAgIyBsaW5r IGNvbXBhdGlibGUgcHJvcGVydGllcywgb24gdGhlIHRhcmdldC4uLg0KICAgICAgICBbIGdl dC1wcm9wZXJ0aWVzDQogICAgICAgICAgICBbIGRpZmZlcmVuY2UgJChzdi1vdmVycmlkZXM6 RykgOiAkKGdBTFdBWVNfUkVMRVZBTlQpIF0gOiAkKHRhcmdldC1yZXF1aXJlbWVudHMpIF0N CiAgICAgICAgIyBvdmVycmlkZXMgZnJvbSBkZXBlbmRlbnQuLi4NCiAgICAgICAgWyBnZXQt cHJvcGVydGllcw0KICAgICAgICAgICAgWyBkaWZmZXJlbmNlICQoc3Ytb3ZlcnJpZGVzOkcp IDogJChvdmVycmlkZS1jb25mbGljdHM6RykgXSA6ICQoZGVwZW5kZW50LXNpbXBsZS1wcm9w ZXJ0aWVzKSBdDQogICAgICAgIDsNCiAgICBzdWJ2YXJpYW50ID0gWyBleHBhbmQtdGFyZ2V0 LXN1YnZhcmlhbnRzICQoc3YtdGFyZ2V0KSA6ICQoc3YtdmFyaWFudCkgOiAkKHN2LXRvb2xz ZXQpIF0gOw0KICAgIHNwbGl0LXRhcmdldC1zdWJ2YXJpYW50IHN2LXRhcmdldCBzdi1wcm9w ZXJ0aWVzIHN2LXRvb2xzZXQgc3YtdmFyaWFudCA6ICQoc3VidmFyaWFudCkgOw0KDQogICAg cmV0dXJuICQoc3YtcHJvcGVydGllcykgOw0KfQ0KDQoNCiMgRm9yIGVhY2ggdGFyZ2V0IHNw ZWNpZmllZCBpbiBsaWJzLCBnZW5lcmF0ZSBidWlsZCBpbnN0cnVjdGlvbnMNCiMgZm9yIGEg c3VidmFyaWFudCB0aGF0IGNhbiBiZSBsaW5rZWQgd2l0aCBhIGRlcGVuZGVudCB0YXJnZXQg d2l0aA0KIyBkZXBlbmRlbnQtcHJvcGVydGllcywgcmV0dXJuaW5nIGEgbGlzdCBvZiBhbGwg Z2VuZXJhdGVkIHRhcmdldHMuDQpydWxlIGxpbmstbGlicmFyaWVzICggbGlicyAqIDogdG9v bHNldCB2YXJpYW50IDogZGVwZW5kZW50LXNpbXBsZS1wcm9wZXJ0aWVzICogKQ0Kew0KICAg IGxvY2FsIGxpYi1wYXRoIHJlc3VsdCA7DQogICAgDQogICAgZm9yIGxpYi1wYXRoIGluICQo bGlicykNCiAgICB7DQogICAgICAgIGxvY2FsIGxpYi1wYXRoID0gWyB0YXJnZXQtcGF0aC1v ZiAkKGxpYi1wYXRoKSBdIDsNCiAgICAgICAgbG9jYWwgbGliLXRhcmdldCA9IFsgdGFyZ2V0 LWlkLW9mICQobGliLXBhdGgpIF0gOw0KDQogICAgICAgICMgRW50ZXIgdGhlIGRlcGVuZGVl IHN1YnByb2plY3QNCiAgICAgICAgbG9jYWwgWyBwcm90ZWN0LXN1YnByb2plY3QgXSA7DQog ICAgICAgIGVudGVyLXN1YnByb2plY3QgWyBkaXJlY3Rvcnktb2YgJChsaWItcGF0aCkgXSA7 DQoNCiAgICAgICAgbG9jYWwgbGliLXN1YnZhcmlhbnQgPSBbIA0KICAgICAgICAgIGZpbmQt Y29tcGF0aWJsZS1zdWJ2YXJpYW50ICQobGliLXRhcmdldCkNCiAgICAgICAgICAgIDogJCh0 b29sc2V0KSAkKHZhcmlhbnQpDQogICAgICAgICAgICAgIDogJChkZXBlbmRlbnQtc2ltcGxl LXByb3BlcnRpZXMpIF0gOw0KDQogICAgICAgICMgR2VuZXJhdGUgYnVpbGQgaW5zdHJ1Y3Rp b25zIGZvciB0aGUgbGlicmFyeSB0YXJnZXQNCiAgICAgICAgcmVzdWx0ICs9IFsgc3VidmFy aWFudC10YXJnZXQgJChsaWItdGFyZ2V0KSA6ICQobGliLXN1YnZhcmlhbnQpIDogJCh0b29s c2V0KSAkKHZhcmlhbnQpIF0gOw0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0N Cg0KIyBXaGljaCBjb25maWd1cmF0aW9uKHMpIHRvIGJ1aWxkIGlmIG5vdGhpbmcgaXMgZXhw bGljaXRseSBzcGVjaWZpZWQNCkRFRkFVTFRfQlVJTEQgPz0gZGVidWcgOw0KDQojIGdldC1C VUlMRCBbdGFyZ2V0LWRlZmF1bHQtYnVpbGRdDQojDQojIHBpY2sgdGhlIGZpcnN0IG9mICgk KEJVSUxEKSwgJCg+KSwgJChERUZBVUxUX0JVSUxEKSkgd2hpY2ggaXMgc2V0LiBJZiBpdA0K IyBjb250YWlucyBubyB2YXJpYW50cywgYWRkIHZhcmlhbnRzIGZyb20gJChERUZBVUxUX0JV SUxEKS4NCnJ1bGUgZ2V0LUJVSUxEDQp7DQogIGxvY2FsIGJ1aWxkID0gJChCVUlMRCkgOw0K ICBidWlsZCA/PSAkKDwpIDsNCiAgYnVpbGQgPz0gJChERUZBVUxUX0JVSUxEKSA7DQogIGxv Y2FsIHZhcmlhbnRzID0gWyBzZWxlY3QtdW5ncmlzdGVkICQoYnVpbGQpIF0gOw0KICBpZiAh ICQodmFyaWFudHMpDQogIHsNCiAgICBidWlsZCArPSBbIHNlbGVjdC11bmdyaXN0ZWQgJChE RUZBVUxUX0JVSUxEKSBdIDsNCiAgfQ0KICByZXR1cm4gJChidWlsZCkgOw0KfQ0KDQojIGRl Y2xhcmUtZmFrZS10YXJnZXRzIGFic3RyYWN0LXRhcmdldCA6IHRhcmdldC1maWxlDQojDQoj IA0KcnVsZSBkZWNsYXJlLWZha2UtdGFyZ2V0cw0Kew0KICAgICMgbWFrZSBhIGZha2UgdGFy Z2V0IHNvIHRoYXQgaXQgY2FuIGJlIGJ1aWx0IHdpdGhvdXQga25vd2luZyB0aGUgc3VmZml4 DQogICAgIyBTaW5jZSBleGVjdXRhYmxlcyB1bmRlciAqTklYIGhhdmUgbm8gc3VmZml4LCB3 ZSdkIGJldHRlciBjaGVjaw0KICAgIGlmICQoPikgIT0gJCg8KQ0KICAgIHsNCiAgICAgICAg REVQRU5EUyAkKDwpIDogJCg+KSA7DQogICAgICAgIE5PVEZJTEUgJCg8KSA7DQogICAgfQ0K ICAgIA0KICAgICMgVGhlIGZvbGxvd2luZyBjaGVja3MgdGhhdCB3ZSdyZSBpbiB0aGUgc3Vi ZGlyZWN0b3J5IG9mIEphbSdzIGludm9jYXRpb24NCiAgICAjIHNvIHRoYXQgd2UgY2FuIGFy cmFuZ2UgZm9yIHVuZ3Jpc3RlZCB0YXJnZXQgbmFtZXMgdG8gYmUgYnVpbHQgZnJvbSB0aGUN CiAgICAjIGNvbW1hbmQtbGluZS4NCiAgICBpZiAkKDw6RykgJiYgWyBpbi1pbnZvY2F0aW9u LXN1YmRpciBdDQogICAgew0KICAgICAgICBERVBFTkRTICQoPDpHPSkgOiAkKDwpIDsgIyBh bGxvd3MgJCg8Okc9KSB0byBiZSB1c2VkIHRvIGJ1aWxkIGFsbCB2YXJpYW50cw0KICAgICAg ICBOT1RGSUxFICQoPDpHPSkgOw0KICAgIH0NCn0NCg0KIyBkZWNsYXJlLXRhcmdldC10eXBl IFRZUEUgOiBbWzxjb21waWxlcj5dPHZhcmlhbnQ+XTxmZWF0dXJlPnZhbHVlLi4uDQpydWxl IGRlY2xhcmUtdGFyZ2V0LXR5cGUNCnsNCiAgICBnVEFSR0VUX1RZUEVfUkVRVUlSRU1FTlRT KCQoPCkpID0gJCg+KSA7DQp9DQoNCmRlY2xhcmUtdGFyZ2V0LXR5cGUgRExMIDogPHNoYXJl ZC1saW5rYWJsZT50cnVlIDsNCg0KaWYgJChOVCkNCnsNCiAgZ0lNUE9SVF9TVUZGSVgoRExM KSA9IC5saWIgOw0KICBnSU1QT1JUX1NVRkZJWChMSUIpID0gLmxpYiA7DQogIGdFWFBPUlRf U1VGRklYKERMTCkgPSAubGliIDsNCn0NCmVsc2UNCnsNCiAgZ0lNUE9SVF9TVUZGSVgoRExM KSA9IC5zbyA7DQogIGdJTVBPUlRfU1VGRklYKExJQikgPSAuYSA7DQp9DQoNCiMNCiMgcHJl cGFyZSBwYXRoIGNvbnN0YW50cw0KIw0Kew0KICAgICMgVGhlIG5hbWVzIG9mIHBhdGggdmFy aWFibGVzIHRoYXQgYXJlIHNldCBvbiB0YXJnZXRzDQogICAgLnJ1bi1wYXRoLXZhcnMgPSBM RF9MSUJSQVJZX1BBVEggUEFUSCBQWVRIT05QQVRIIDsNCg0KICAgIGZvciBsb2NhbCB2IGlu ICQoLnJ1bi1wYXRoLXZhcnMpDQogICAgew0KICAgICAgICAuc2hlbGwtdmFyKCQodikpID0g JCh2KSA7DQogICAgfQ0KICAgIA0KICAgICMgRHluYW1pYyBsaWJyYXJpZXMgYXJlIGFjdHVh bGx5IGZvdW5kIG9uIFBBVEgNCiAgICBpZiAkKE5UKSB8fCAoICQoVU5JWCkgPSAkKENZR1dJ TikgKQ0KICAgIHsNCiAgICAgICAgLnNoZWxsLXZhcihMRF9MSUJSQVJZX1BBVEgpID0gUEFU SCA7DQogICAgfQ0KDQogICAgIyBUaGUgbmFtZXMgb2YgcGF0aCB2YXJpYWJsZXMgaW4gdGhl IHNoZWxsDQogICAgLnJ1bi1wYXRoLXNoZWxsLXZhcnMgPSBbIHVuaXF1ZSAkKC5zaGVsbC12 YXIoJCgucnVuLXBhdGgtdmFycykpKSBdIDsNCiAgICANCiAgICAjIFJlY29yZCB0aGUgb3Jp Z2luYWwgdmFsdWUgb2YgZWFjaCBzaGVsbCB2YXJpYWJsZQ0KICAgIGZvciBsb2NhbCB2IGlu ICQoLnJ1bi1wYXRoLXNoZWxsLXZhcnMpDQogICAgew0KICAgICAgICAucnVuLXBhdGgtc2hl bGwtdmFyLXZhbHVlKCQodikpID0gJCgkKHYpKSA7DQogICAgfQ0KICAgIA0KICAgIGlmICQo TlQpDQogICAgew0KICAgICAgICAuZW52LXByZWZpeCA9ICUgOyANCiAgICAgICAgLmVudi1z dWZmaXggPSAlIDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgLmVudi1wcmVm aXggPSAiJCIgOw0KICAgICAgICAuZW52LXN1ZmZpeCA9ICIiIDsNCiAgICB9DQp9DQoNCg0K DQojIEhlbHBlcg0KcnVsZSBkZXBlbmQtb24tbGlicyAoIHRhcmdldHMgKyA6IGxpYnMgKiAp DQp7DQogICAgTElCUEFUSCBvbiAkKDwpICs9IFsgdW5pcXVlICQoZ0xPQ0FURSgkKD4pKSkg XSA7DQogICAgREVQRU5EUyAkKDwpIDogJCg+KSA7DQogICAgIyBUbyBydW4gdGhlc2UgdGFy Z2V0cywgd2UgbmVlZCBldmVyeXRoaW5nIG5lZWRlZCB0byBydW4gdGhlIGxpYnJhcmllcw0K ICAgIGZvciBsb2NhbCB2IGluICQoLnJ1bi1wYXRoLXZhcnMpDQogICAgew0KICAgICAgICBn UlVOXyQodikoJCg8KSkgPSBbIHVuaXF1ZSAkKGdSVU5fJCh2KSgkKDwpKSkgJChnUlVOXyQo dikoJCg+KSkpIF0gOw0KICAgIH0NCn0NCg0KcnVsZSBkZXBlbmQtb24tc3RhdGljICggdGFy Z2V0cyArIDogc3RhdGljLWxpYnMgKiApDQp7DQogICAgbG9jYWwgTkVFRExJQlMgPSBbIHVu aXF1ZSAkKE5FRURMSUJTKSAkKD4pIF0gOw0KICAgIE5FRURMSUJTIG9uICQoPCkgPSBbIG9u ICQoPCkgcmV0dXJuIFsgdW5pcXVlICQoTkVFRExJQlMpICQoPikgXSBdIDsNCiAgICBkZXBl bmQtb24tbGlicyAkKHRhcmdldHMpIDogJChzdGF0aWMtbGlicykgOw0KfQ0KDQpydWxlIGRl cGVuZC1vbi1zaGFyZWQgKCB0YXJnZXRzICsgOiBkbGxzLWFuZC1pbXBvcnQtbGlicyAqICkN CnsNCiAgICBsb2NhbCBsaW5rYWJsZSA7DQogICAgDQogICAgIyBjb2xsZWN0IHRoZSBsaW5r YWJsZSBlbGVtZW50cyBvZiB0aGUgc291cmNlIGxpYnMgaW50byB0aGUgYXBwcm9wcmlhdGUg dmFyaWFibGVzDQogICAgZm9yIGxvY2FsIGYgaW4gJChkbGxzLWFuZC1pbXBvcnQtbGlicykN CiAgICB7DQogICAgICAgIGxvY2FsIHYgPSAkKGdMSU5LX1ZBUklBQkxFKCQoZjpTKSkpIDsN CiAgICAgICAgJCh2KSArPSAkKGYpIDsNCiAgICAgICAgJCh2KSBvbiAkKHRhcmdldHMpICs9 ICQoZikgOw0KICAgICAgICBpZiAkKHYpDQogICAgICAgIHsNCiAgICAgICAgICAgIGxpbmth YmxlICs9ICQoZikgOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgRklORExJQlMgb24gJCg8 KSArPSBbIHVuaXF1ZSAkKGdUQVJHRVRfQkFTRU5BTUUoJChnVEFSR0VUX1NVQlZBUklBTlQo JCg+KSkpKSkgXSA7DQogICAgDQogICAgZGVwZW5kLW9uLWxpYnMgJCh0YXJnZXRzKSA6ICQo ZGxscy1hbmQtaW1wb3J0LWxpYnMpIDsNCn0NCg0KIyBHaXZlbiBidWlsZCBwcm9wZXJ0aWVz LCByZXR1cm5zIHRoZSBub3JtYWxpc2VkIHZlcnNpb24gb2YgdGhlIDx0YWc+IGZlYXR1cmVz IGZvcg0KIyB1c2UgYnkgcmVuYW1lLXRhcmdldHMuDQpydWxlIGdldC10YWctZmVhdHVyZXMg KCB2YXJpYW50IDogYnVpbGQtcHJvcGVydGllcyAqICkNCnsNCiAgICBsb2NhbCByZXN1bHQg PSA7DQogICAgbG9jYWwgdGFncyA9IFsgZ2V0LXByb3BlcnRpZXMgPHRhZz4gOiAkKGJ1aWxk LXByb3BlcnRpZXMpIF0gOw0KICAgIGZvciBsb2NhbCB0YWcgaW4gJCh0YWdzKQ0KICAgIHsN CiAgICAgICAgdGFnID0gJCh0YWc6Rz0pIDsNCiAgICAgICAgaWYgJCh0YWc6RykNCiAgICAg ICAgew0KICAgICAgICAgICAgcmVzdWx0ICs9IDx0YWc+JCh0YWcpIDsNCiAgICAgICAgfQ0K ICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCArPSA8dGFnPjwk KHZhcmlhbnQpPiQodGFnKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICQocmVz dWx0KSA7DQp9DQoNCnJ1bGUgZ2VuZXJhdGUtZGVwZW5kZW5jaWVzICggbWFpbi10YXJnZXQg OiBzdWJ2YXJpYW50LXRhcmdldHMgKyApDQp7DQogICAgbG9jYWwgZGVwZW5kZW5jaWVzID0g JChnVEFSR0VUX0RFUFMoJChtYWluLXRhcmdldCkpKSA7DQogICAgew0KICAgICAgICAjIFBy b3RlY3QgdGFyZ2V0IHZhcmlhYmxlcyBhZ2FpbnN0IG1vZGlmaWNhdGlvbiB3aGlsZSBsaWIg ZGVwZW5kZW5jaWVzDQogICAgICAgICMgYXJlIGJ1aWx0LiBUaGV5IHdpbGwgYmUgbWFkZSBl bXB0eSBoZXJlLCBhbmQgcmVzdG9yZWQgd2hlbiB0aGlzIHNjb3BlIGV4aXRzDQogICAgICAg IGxvY2FsICQoZ1RBUkdFVF9WQVJJQUJMRVMpIDsNCg0KICAgICAgICAjIGV4dHJhY3QgdGhl IHNpbXBsZSBwcm9wZXJ0aWVzIGZyb20gZGVwZW5kZW50LXByb3BlcnRpZXMNCiAgICAgICAg bG9jYWwgcCA9ICQoZ0JVSUxEX1BST1BFUlRJRVMpIDsNCiAgICAgICAgc2VncmVnYXRlLWZy ZWUtcHJvcGVydGllcyBwIDsNCg0KICAgICAgICAjIGdlbmVyYXRlIGxpYnJhcnkgYnVpbGQg aW5zdHJ1Y3Rpb25zDQogICAgICAgIGxvY2FsIEJVSUxEID0gJChCVUlMRCkgOw0KICAgICAg ICBCVUlMRCA/PSAkKGdUQVJHRVRfREVGQVVMVF9CVUlMRCgkKG1haW4tdGFyZ2V0KSkpIDsN CiAgICAgICAgDQogICAgICAgIGZvciB0IGluIHN0YXRpYyBzaGFyZWQNCiAgICAgICAgew0K ICAgICAgICAgICAgbG9jYWwgbGliLW1haW4tdGFyZ2V0cyA9IFsgZ2V0LXZhbHVlcyA8JCgk KHQ6VSlfVFlQRVMpPiA6ICQoZGVwZW5kZW5jaWVzKSBdIDsNCiAgICAgICAgICAgIA0KICAg ICAgICAgICAgbG9jYWwgbGliLXRhcmdldHMNCiAgICAgICAgICAgICAgPSBbIGxpbmstbGli cmFyaWVzICQobGliLW1haW4tdGFyZ2V0cykNCiAgICAgICAgICAgICAgICAgIDogJChnQ1VS UkVOVF9UT09MU0VUKSAkKHZhcmlhbnQpIDogJChwKQ0KICAgICAgICAgICAgICAgIF0gOw0K ICAgICAgICAgICAgZGVwZW5kLW9uLSQodCkgJChzdWJ2YXJpYW50LXRhcmdldHMpIDogJChs aWItdGFyZ2V0cykgOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQojIEdpdmVuIG1haW4tdGFy Z2V0LCBhIG1haW4gdGFyZ2V0IG5hbWUgZ3Jpc3RlZCB3aXRoICQoU09VUkNFX0dSSVNUKSwg Z2VuZXJhdGUgYnVpbGQNCiMgaW5zdHJ1Y3Rpb25zIGZvciBhIHN1YnZhcmlhbnQgdGFyZ2V0 IHVzaW5nIHRoZSBnaXZlbiB0b29sc2V0LCB2YXJpYW50LCBldGMuDQojDQojIFJFVFVSTlM6 IHRoZSBhIGxpc3Qgb2YgdGFyZ2V0IG5hbWVzIGZvciB0aGUgZmlsZXMgYnVpbHQgYnkgdGhl IHN1YnZhcmlhbnQuIElmDQojIHRoZSBtYWluLXRhcmdldCBpcyBhIGxpYnJhcnksIHRoZSBm aXJzdCBmaWxlbmFtZSBpcyB0aGUgb25lIHRoYXQgc2hvdWxkIGJlIGxpbmtlZA0KIyBpbnRv IGEgZGVwZW5kZW50IHRhcmdldC4NCnJ1bGUgc3VidmFyaWFudC10YXJnZXQgKCBtYWluLXRh cmdldCA6IHN1YnZhcmlhbnQtaWQgYnVpbGQtcHJvcGVydGllcyAqIDogdG9vbHNldCB2YXJp YW50ICkNCnsNCiAgIyBTT1VSQ0VfR1JJU1QgaWRlbnRpZmllcyB0aGUgc3VicHJvamVjdCBk aXJlY3Rvcnk7IFRBUkdFVF9HUklTVCB3aWxsIGlkZW50aWZ5DQogICMgdGhlIHRhcmdldCBh bmQgc3VidmFyaWFudCwgc2luY2UgdW5pcXVlIHZlcnNpb25zIG9mIGZpbGVzIHdpbGwgYmUg YnVpbHQgZm9yDQogICMgdGhhdCBjb21iaW5hdGlvbi4NCiAgbG9jYWwgcHJvcGVydHktdGFn cyA9IFsgZ2V0LXRhZy1mZWF0dXJlcyAkKHZhcmlhbnQpIDogJChidWlsZC1wcm9wZXJ0aWVz KSBdIDsNCiAgbG9jYWwgdGFncyA9IFsgZ2V0LXByb3BlcnRpZXMgPHRhZz4gOiAkKGdJTVBP U0VEX1JFUVVJUkVNRU5UUygkKG1haW4tdGFyZ2V0KSkpIF0gJChwcm9wZXJ0eS10YWdzKSA7 DQogIGxvY2FsIFRBUkdFVF9HUklTVCA9IFsgam9pbi1wYXRoICQoU09VUkNFX0dSSVNUKSAk KG1haW4tdGFyZ2V0Okc9KSAkKHN1YnZhcmlhbnQtaWQpIF0gOw0KICBsb2NhbCBzdWJ2YXJp YW50ID0gJChtYWluLXRhcmdldDpHPSQoVEFSR0VUX0dSSVNUKSkgOw0KDQogICMgS2VlcCB0 cmFjayBvZiB0aGUgZ2VuZXJhdGVkIHRhcmdldHMuDQogIGlmICEgJChUQVJHRVRfR1JJU1Qp IGluICQoZ0RFQ0xBUkVEX1RBUkdFVFMpDQogIHsNCiAgICBnREVDTEFSRURfVEFSR0VUUyAr PSAkKFRBUkdFVF9HUklTVCkgOw0KICB9DQoNCiAgIyBNYWtlIHN1cmUgd2Uga25vdyBob3cg dG8gZ2VuZXJhdGUgdGhlc2UgdHlwZXMgb2YgdGFyZ2V0cy4NCiAgbG9jYWwgdGFyZ2V0LXR5 cGUgPSAkKGdUQVJHRVRfVFlQRSgkKG1haW4tdGFyZ2V0KSkpIDsNCiAgaWYgISAkKHRhcmdl dC10eXBlKQ0KICB7DQogICAgICBFWElUIHVua25vd24gdGFyZ2V0IHR5cGUgZm9yICQobWFp bi10YXJnZXQpIDsNCiAgfQ0KICANCiAgZ1RBUkdFVF9UWVBFKCQoc3VidmFyaWFudCkpID0g JCh0YXJnZXQtdHlwZSkgOw0KICANCiAgIyBMT0NBVEVfVEFSR0VUIGFmZmVjdHMgd2hlcmUg YnVpbHQgdGFyZ2V0cyBhcmUgZ2VuZXJhdGVkLiBXZSBtb3ZlIGl0DQogICMgcmVsYXRpdmUg dG8gdGhlIGRlZmF1bHQgbG9jYXRpb24gYmFzZWQgb24gdGhlIHN1YnZhcmlhbnQgDQogIGxv Y2FsIExPQ0FURV9UQVJHRVQNCiAgICA9IFsgam9pbi1wYXRoICQoTE9DQVRFX1RBUkdFVCkg JChtYWluLXRhcmdldDpHPSkgJChzdWJ2YXJpYW50LWlkKSBdIDsNCg0KICAjIFRoZSByZW5h bWVkIGJhc2UgbmFtZSBvZiB0aGUgdGFyZ2V0LiBPbmx5IGNvbnNpZGVycyB0aGUgdGFncyBk ZWZpbmVkIGRpcmVjdGx5DQogICMgb24gdGhlIHRhcmdldC4NCiAgaWYgJChnVEFSR0VUX05B TUUoJChtYWluLXRhcmdldCkpKQ0KICB7DQogICAgZ1RBUkdFVF9CQVNFTkFNRSgkKG1haW4t dGFyZ2V0KSkgPQ0KICAgICAgWyByZW5hbWUtdGFyZ2V0ICQoZ1RBUkdFVF9OQU1FKCQobWFp bi10YXJnZXQpKSkgOiBbIHNwbGl0LXBhdGggWyB1bmdyaXN0ICQoc3VidmFyaWFudDpHKSBd IF0gOiAkKHByb3BlcnR5LXRhZ3MpIF0gOw0KICB9DQoNCiAgIyBGaXJzdCBvcmRlciBuYW1l cyBoYXZlIHRoZSBzdWZmaXgsIGlmIGFueSBhY2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtLg0K ICBsb2NhbCB0YXJnZXQtZmlsZXMgPSBbIEZBcHBlbmRTdWZmaXggJChzdWJ2YXJpYW50KSA6 ICQoU1VGJCh0YXJnZXQtdHlwZSkpIF0gOw0KICAjIFNlY29uZCBvcmRlciBuYW1lcyBoYXZl IGFueSB0YWdzIGFzIGltcG9zZWQgZnJvbSBzdGFnZSB0YXJnZXQgY29udGV4dHMuDQogIHRh cmdldC1maWxlcyA9IFsgcmVuYW1lLXRhcmdldCAkKHRhcmdldC1maWxlcykgOiBbIHNwbGl0 LXBhdGggWyB1bmdyaXN0ICQoc3VidmFyaWFudDpHKSBdIF0gOiAkKHRhZ3MpIF0gOw0KICAj IFRoaXJkIG9yZGVyIG5hbWVzIGFyZSBjdXN0b21pemVkIGFzIGRldGVybWluZWQgYnkgYSBy ZW5hbWUgcnVsZSBvbiB0aGUgdGFyZ2V0IHR5cGUuDQogIGlmICQoZ05BTUVfQURKVVNUKCQo dGFyZ2V0LXR5cGUpKSkNCiAgew0KICAgIHRhcmdldC1maWxlcyA9IFsNCiAgICAgICQoZ05B TUVfQURKVVNUKCQodGFyZ2V0LXR5cGUpKSkgJCh0YXJnZXQtZmlsZXMpDQogICAgICA6ICQo c3VidmFyaWFudC1pZCkgJChidWlsZC1wcm9wZXJ0aWVzKQ0KICAgICAgOiAkKHRvb2xzZXQp ICQodmFyaWFudCkgXSA7DQogIH0NCg0KICAjIERvIG5vdGhpbmcgaWYgd2UgYWxyZWFkeSBo YXZlIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBzcGVjaWZpYw0KICAjIHRhcmdl dCBmaWxlcyBvZiB0aGlzIHN1YnZhcmlhbnQgdGFyZ2V0Lg0KICBpZiAhICQodGFyZ2V0LWZp bGVzKSBpbiAkKGdUQVJHRVRfRklMRVMoJChtYWluLXRhcmdldCkpKQ0KICB7DQogICAgZ1RB UkdFVF9TVUJWQVJJQU5UKCQodGFyZ2V0LWZpbGVzKSkgPSAkKG1haW4tdGFyZ2V0KSA7DQog ICAgDQogICAgIyMjZ1RBUkdFVF9GSUxFUygkKHN1YnZhcmlhbnQpKSA9ICQodGFyZ2V0LWZp bGVzKSA7DQogICAgZ1RBUkdFVF9GSUxFUygkKG1haW4tdGFyZ2V0KSkgKz0gJCh0YXJnZXQt ZmlsZXMpIDsNCg0KICAgICMgUmVtZW1iZXIgdGhlIHBhdGggZnJvbSB0aGUgYnVpbGQgcm9v dCB0byB0aGUgc3VidmFyaWFudCBkaXJlY3RvcnkNCiAgICBnU1VCVkFSSUFOVF9QQVRIKCQo c3VidmFyaWFudCkpID0gJChzdWJ2YXJpYW50LWlkKSA7DQogICAgDQogICAgIyBBZGQgdGFy Z2V0IHN1cHByZXNzaW9uIGlmIDxzdXBwcmVzcz4gd2FzIGluIHRoZSByZXF1aXJlbWVudHMN CiAgICBsb2NhbCBnU1VQUFJFU1NfRkFLRV9UQVJHRVRTID0gWyBnZXQtdmFsdWVzIDxzdXBw cmVzcz4gOiAkKGdUQVJHRVRfUkVRVUlSRU1FTlRTKCQobWFpbi10YXJnZXQpKSkgXSAkKGdT VVBQUkVTU19GQUtFX1RBUkdFVFMpIDsNCg0KICAgIGRlY2xhcmUtZmFrZS10YXJnZXRzICQo bWFpbi10YXJnZXQpIDogJCh0YXJnZXQtZmlsZXMpIDsNCg0KICAgICMgc2V0IHVwIGdCVUlM RF9QUk9QRVJUSUVTIGZvciBpbmNsdWRlLXRvb2xzIChiZWxvdykNCiAgICBsb2NhbCBnQlVJ TERfUFJPUEVSVElFUyA9ICQoYnVpbGQtcHJvcGVydGllcykgOw0KDQogICAgIyBJbmNsdWRl IHRoZSB0b29sc2V0IHNwZWNpZmljYXRpb24uIFRoaXMgd2lsbCBzZXQgdXAgdGhlIGdsb2Jh bCBmbGFncw0KICAgICMgdmFyaWFibGVzIGluIGEgd2F5IGFwcHJvcHJpYXRlIHRvIHRoaXMg YnVpbGQuIA0KICAgIA0KICAgIGluY2x1ZGUtdG9vbHMgJCh0b29sc2V0KSA7DQoNCiAgICAj IGhlYWRlcnMgc2hvdWxkIGJlIGlkZW50aWZpZWQgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCwg c2luY2Ugc2VhcmNoIHBhdGhzDQogICAgIyBtYXkgZGlmZmVyIGZvciBkaWZmZXJlbnQgc3Vi dmFyaWFudHMuIFRoZSBzYW1lIGhlYWRlciBuYW1lIG9yIHJlbGF0aXZlDQogICAgIyBwYXRo IG1heSByZWZlciB0byBkaWZmZXJlbnQgZmlsZXMuDQogICAgbG9jYWwgSERSR1JJU1QgPSBb IGpvaW4gJChTT1VSQ0VfR1JJU1QpICQoU1RESERSUykgJChTWVNIRFJTKSAkKEhEUlMpICIi IDogIiMiIF0gOw0KICAgIA0KICAgICMgdHJhbnNmZXIgdGFyZ2V0IHZhcmlhYmxlcyB0byB0 aGUgdGFyZ2V0IGZpbGUuDQogICAgc2V0LXRhcmdldC12YXJpYWJsZXMgJCh0YXJnZXQtZmls ZXMpIDsNCg0KICAgIGxvY2FsIGRlcGVuZGVuY2llcw0KICAgICAgICA9IFsgZ2V0LXZhbHVl cyA8JChTVEFUSUNfVFlQRVMpPiA8JChTSEFSRURfVFlQRVMpPiANCiAgICAgICAgICA6ICQo Z1RBUkdFVF9ERVBTKCQobWFpbi10YXJnZXQpKSkNCiAgICAgICAgXSA7DQogICAgICANCiAg ICBpZiAkKGRlcGVuZGVuY2llcykNCiAgICB7DQogICAgICAgICMgaW5jbHVkZSBlYWNoIGph bWZpbGUgZGVzY3JpYmluZyBhIGRlcGVuZGVlIHRhcmdldC4NCiAgICAgICAgZGVwZW5kZW50 LWluY2x1ZGUgJChkZXBlbmRlbmNpZXMpIDsNCiAgICAgICAgZ2VuZXJhdGUtZGVwZW5kZW5j aWVzICQobWFpbi10YXJnZXQpIDogJCh0YXJnZXQtZmlsZXMpIDsNCiAgICB9DQogICAgDQog ICAgbG9jYWwgZ2VuZXJhdG9yID0gJChnR0VORVJBVE9SX0ZVTkNUSU9OKCQodGFyZ2V0LXR5 cGUpKSkgOw0KICAgIGxvY2FsIHNvdXJjZXMgPSAkKGdUQVJHRVRfU09VUkNFUygkKG1haW4t dGFyZ2V0KSkpIDsNCiAgICAkKGdlbmVyYXRvcikgJCh0YXJnZXQtZmlsZXMpIDogJChzb3Vy Y2VzKSA7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAkKGdUQVJHRVRfVkFSSUFC TEVTKSA9IDsgIyBCZSBzdXJlIHRoYXQgd2UgZG9uJ3QgbWFzayBidWdzIHdpdGggbGluZ2Vy aW5nIHRhcmdldCB2YXJpYWJsZXMNCiAgfQ0KICByZXR1cm4gJCh0YXJnZXQtZmlsZXMpIDsN Cn0NCg0KIyBHZW5lcmF0ZSB0aGUgZXhwYW5kZWQgc3VidmFyaWFudHMgb2YgYSB0YXJnZXQu DQojDQpydWxlIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgKCB0YXJnZXQgOiBsb2NhbC1i dWlsZCAqIDogdG9vbHMgKyA6ICkNCnsNCiAgICBsb2NhbCBCVUlMRCA9IFsgZ2V0LUJVSUxE ICQobG9jYWwtYnVpbGQpIF0gOw0KICAgIGxvY2FsIHZhcmlhbnRzID0gWyBzZWxlY3QtdW5n cmlzdGVkICQoQlVJTEQpIF0gOw0KICAgIGxvY2FsIGJ1aWxkLXJlcXVlc3QgPSBbIGRpZmZl cmVuY2UgJChCVUlMRCkgOiAkKHZhcmlhbnRzKSBdIDsNCg0KICAgIGxvY2FsIHN1YnZhcmlh bnRzID0gOw0KICAgIGZvciBsb2NhbCB0b29sc2V0IGluICQodG9vbHMpDQogICAgew0KICAg ICAgICBmb3IgbG9jYWwgdmFyaWFudCBpbiAkKHZhcmlhbnRzKQ0KICAgICAgICB7DQogICAg ICAgICAgICBsb2NhbCBydWxlcyA9IFsgc2VsZWN0LXVuZ3Jpc3RlZA0KICAgICAgICAgICAg ICAgICQoZ1RBUkdFVF9SRVFVSVJFTUVOVFMoJCh0YXJnZXQpKSkNCiAgICAgICAgICAgICAg ICAkKGdJTVBPU0VEX1JFUVVJUkVNRU5UUygkKHRhcmdldCkpKSBdIDsNCiAgICAgICAgICAg IGxvY2FsIHJlcXVpcmVtZW50cyA9IFsgc2VsZWN0LWdyaXN0ZWQNCiAgICAgICAgICAgICAg ICAkKGdUQVJHRVRfUkVRVUlSRU1FTlRTKCQodGFyZ2V0KSkpDQogICAgICAgICAgICAgICAg JChnSU1QT1NFRF9SRVFVSVJFTUVOVFMoJCh0YXJnZXQpKSkgXSA7DQogICAgICAgICAgICAN CiAgICAgICAgICAgIGxvY2FsIGV4cGFuZGVkDQogICAgICAgICAgICAgICAgPSBbIGV4cGFu ZC1idWlsZC1yZXF1ZXN0ICQodG9vbHNldCkgJCh2YXJpYW50KSAkKHRhcmdldCkNCiAgICAg ICAgICAgICAgICAgICAgOiAkKHJlcXVpcmVtZW50cykgOiAkKGJ1aWxkLXJlcXVlc3QpIF0g Ow0KICAgICAgICAgICAgDQogICAgICAgICAgICBsb2NhbCBnTk9XQVJOX0lOQ09NUEFUSUJM RV9CVUlMRFMgPSBUUlVFIDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yIGxvY2Fs IGluc3RhbmNlIGluICQoZXhwYW5kZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgbG9jYWwgcHJvcGVydGllcyA9IFsgc3BsaXQtcGF0aC1hdC1ncmlzdCAkKGluc3RhbmNl KSBdIDsNCiAgICAgICAgICAgICAgICBmb3IgbG9jYWwgciBpbiAkKHJ1bGVzKQ0KICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IFsgJChyKSAk KHRvb2xzZXQpICQodmFyaWFudCkgOiAkKHByb3BlcnRpZXMpIF0gOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAhICggPGJ1aWxk Pm5vIGluICQocHJvcGVydGllcykgKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICAgICAgIyB0aGUgcnVsZXMgbWF5IGhhdmUgbW9kaWZpZWQgdGhlIGJ1aWxkIHJlcXVl c3QsIHJlY29uc3RydWN0IGl0DQogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBb IGV4cGFuZC1idWlsZC1yZXF1ZXN0ICQodG9vbHNldCkgJCh2YXJpYW50KSAkKHRhcmdldCkN CiAgICAgICAgICAgICAgICAgICAgICA6ICQocHJvcGVydGllc1syLV0pIDogJChidWlsZC1y ZXF1ZXN0KSBdIDsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAg IHN1YnZhcmlhbnRzICs9ICQodGFyZ2V0KXwkKHByb3BlcnRpZXMpfCQodG9vbHNldCl8JCh2 YXJpYW50KSA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UgaWYg LS1kdW1wLXVuYnVpbHQNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAg IEVDSE8gKioqKiBza2lwcGluZyBidWlsZCBvZiAkKHRhcmdldCk7IHRvb2xzZXQ9ICQodG9v bHNldCkgdmFyaWFudD0gJCh2YXJpYW50KSAqKioqIDsNCiAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIFsgdW5pcXVlICQo c3VidmFyaWFudHMpIF0gOw0KfQ0KDQojIEdpdmVuIGFuIGV4cGFuZGVkIHN1YnZhcmlhbnQg b2YgYSB0ZXJnZXQsIHNldHMgdGhlIHZhcmlvdXMgdmFyaWFibGVzIGFjY29yZGluZ2x5Lg0K Iw0KcnVsZSBzcGxpdC10YXJnZXQtc3VidmFyaWFudCAoIHRhcmdldC12YXIgcHJvcGVydGll cy12YXIgdG9vbHNldC12YXIgdmFyaWFudC12YXIgOiBzdWJ2YXJpYW50ICkNCnsNCiAgICBs b2NhbCBzdWJ2YXJpYW50LWl0ZW1zID0gWyBNQVRDSCAoLiopW3xdKC4qKVt8XSguKilbfF0o LiopIDogJChzdWJ2YXJpYW50KSBdIDsNCiAgICAkKHRhcmdldC12YXIpID0gJChzdWJ2YXJp YW50LWl0ZW1zWzFdKSA7DQogICAgJChwcm9wZXJ0aWVzLXZhcikgPSBbIHNwbGl0LXBhdGgt YXQtZ3Jpc3QgJChzdWJ2YXJpYW50LWl0ZW1zWzJdKSBdIDsNCiAgICAkKHRvb2xzZXQtdmFy KSA9ICQoc3VidmFyaWFudC1pdGVtc1szXSkgOw0KICAgICQodmFyaWFudC12YXIpID0gJChz dWJ2YXJpYW50LWl0ZW1zWzRdKSA7DQogICAgcmV0dXJuICQoKHRhcmdldC12YXIpKSA7DQp9 DQoNCiMgbWFpbi10YXJnZXQgdGFyZ2V0IDogbG9jYWwtYnVpbGQNCiMNCiMgR2VuZXJhdGVz IHJlcXVlc3RlZCBzdWJ2YXJpYW50IGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgdGhlIGdpdmVu IG1haW4gdGFyZ2V0DQpydWxlIG1haW4tdGFyZ2V0DQp7DQogICAgbG9jYWwgc3VidmFyaWFu dHMgPSBbIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgJCg8KSA6ICQoPikgOiAkKFRPT0xT KSBdIDsNCg0KICAgICMgaW5jbHVkZSBlYWNoIGphbWZpbGUgZGVzY3JpYmluZyBhIGRlcGVu ZGVlIHRhcmdldC4NCiAgICBkZXBlbmRlbnQtaW5jbHVkZSBbIGdldC12YWx1ZXMgPCQoU1RB VElDX1RZUEVTKT4gPCQoU0hBUkVEX1RZUEVTKT4gOiAkKGdUQVJHRVRfREVQUygkKDwpKSkg XSA7DQoNCiAgICBmb3IgbG9jYWwgc3VidmFyaWFudCBpbiAkKHN1YnZhcmlhbnRzKQ0KICAg IHsNCiAgICAgICAgbG9jYWwgdGFyZ2V0ID0gOw0KICAgICAgICBsb2NhbCBwcm9wZXJ0aWVz ID0gOw0KICAgICAgICBsb2NhbCB0b29sc2V0ID0gOw0KICAgICAgICBsb2NhbCB2YXJpYW50 ID0gOw0KICAgICAgICBzcGxpdC10YXJnZXQtc3VidmFyaWFudCB0YXJnZXQgcHJvcGVydGll cyB0b29sc2V0IHZhcmlhbnQgOiAkKHN1YnZhcmlhbnQpIDsNCiAgICAgICAgc3VidmFyaWFu dC10YXJnZXQgJCh0YXJnZXQpIDogJChwcm9wZXJ0aWVzKSA6ICQodG9vbHNldCkgJCh2YXJp YW50KSA7DQogICAgfQ0KfQ0KDQojIERlY2xhcmUgYW4gZXhlY3V0YWJsZSB0YXJnZXQuDQoj DQpnVEFSR0VUX1RZUEVfSUQoZXhlKSA9IEVYRSA7DQpnR0VORVJBVE9SX0ZVTkNUSU9OKEVY RSkgPSBleGVjdXRhYmxlLWZpbGUgOw0KcnVsZSBleGUgKCB0YXJnZXQgOiBzb3VyY2VzICsg OiByZXF1aXJlbWVudHMgKiA6IGRlZmF1bHQtYnVpbGQgKiApDQp7DQogICAgZGVjbGFyZS1s b2NhbC10YXJnZXQgJCh0YXJnZXQpIDogJChzb3VyY2VzKSA6ICQocmVxdWlyZW1lbnRzKSA6 ICQoZGVmYXVsdC1idWlsZCkgOiBFWEUgOw0KfQ0KDQojIERlY2xhcmUgYSBzaGFyZWQgbGli cmFyeSB0YXJnZXQuDQojDQpnVEFSR0VUX1RZUEVfSUQoZGxsKSA9IERMTCA7DQpnR0VORVJB VE9SX0ZVTkNUSU9OKERMTCkgPSBkbGwtZmlsZXMgOw0KZ0lTX0RFUEVOREVOQ1koRExMKSA9 IFRSVUUgOw0KcnVsZSBkbGwgKCB0YXJnZXQgOiBzb3VyY2VzICsgOiByZXF1aXJlbWVudHMg KiA6IGRlZmF1bHQtYnVpbGQgKiApDQp7DQogICAgaWYgJChKQU1VTkFNRVsxXSkgPSBPcGVu QlNEDQogICAgew0KICAgICAgICBpZiAhIFsgZ2V0LXZhbHVlcyA8ZGxsdmVyc2lvbj4gOiAk KHJlcXVpcmVtZW50cykgXQ0KICAgICAgICB7DQogICAgICAgICAgICByZXF1aXJlbWVudHMg Kz0gPGRsbHZlcnNpb24+MC4wIDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBkZWNsYXJlLWxv Y2FsLXRhcmdldCAkKHRhcmdldCkgOiAkKHNvdXJjZXMpIDogJChyZXF1aXJlbWVudHMpIDog JChkZWZhdWx0LWJ1aWxkKSA6IERMTCA7DQp9DQoNCiMgRGVjbGFyZSBhIHN0YXRpY2FsbHkt bGlua2VkIGxpYnJhcnkgdGFyZ2V0Lg0KIw0KZ1RBUkdFVF9UWVBFX0lEKGxpYikgPSBMSUIg Ow0KZ0dFTkVSQVRPUl9GVU5DVElPTihMSUIpID0gbGlicmFyeS1maWxlIDsNCmdJU19ERVBF TkRFTkNZKExJQikgPSBUUlVFIDsNCnJ1bGUgbGliICggdGFyZ2V0IDogc291cmNlcyArIDog cmVxdWlyZW1lbnRzICogOiBkZWZhdWx0LWJ1aWxkICogKQ0Kew0KICAgIGRlY2xhcmUtbG9j YWwtdGFyZ2V0ICQodGFyZ2V0KSA6ICQoc291cmNlcykgOiAkKHJlcXVpcmVtZW50cykgOiAk KGRlZmF1bHQtYnVpbGQpIDogTElCIDsNCn0NCg0KIyBEZWNsYXJlIGEgdGVtcGxhdGUgdGFy Z2V0IGZvciBvdGhlciB0YXJnZXRzLiBUaGlzIGlzIGEgbW9kaWZpZXIgb25seS4gSXQNCiMg QWRkcyB0aGUgc3BlY3Mgc3BlY2lmaWVkIGhlcmUgdG8gYW55IG90aGVyIHRhcmdldCBpdCdz IGEgZGVwZW5kZWUgb2YuDQojDQpnVEFSR0VUX1RZUEVfSUQodGVtcGxhdGUpID0gVEVNUExB VEUgOw0KZ01PRElGSUVSX0ZVTkNUSU9OKFRFTVBMQVRFKSA9IHRlbXBsYXRlLW1vZGlmaWVy IDsNCmdJU19ERVBFTkRFTkNZKFRFTVBMQVRFKSA9IFRSVUUgOw0KZ05PX1RBUkdFVF9UWVBF X1JFUVVJUkVNRU5UKFRFTVBMQVRFKSA9IFRSVUUgOw0KcnVsZSB0ZW1wbGF0ZSAoIHRhcmdl dCA6IHNvdXJjZXMgKiA6IHJlcXVpcmVtZW50cyAqIDogZGVmYXVsdC1idWlsZCAqICkNCnsN CiAgICBkZWNsYXJlLWxvY2FsLXRhcmdldCAkKHRhcmdldCkgOiAkKHNvdXJjZXMpIDogJChy ZXF1aXJlbWVudHMpIDogJChkZWZhdWx0LWJ1aWxkKSA6IFRFTVBMQVRFIDsNCn0NCg0KIyBE ZWNsYXJlIGFuIGV4ZWN1dGFibGUgdGFyZ2V0LCB0byBiZSBydW4gYnkgdGVzdHMuDQpydWxl IHVuaXQtdGVzdCAoIHRhcmdldCArICA6IHNvdXJjZXMgKyA6IHJlcXVpcmVtZW50cyAqIDog ZGVmYXVsdC1idWlsZCAqIDogY21kLWxpbmUgKiApDQp7DQogICAgaWYgISAkKC50ZXN0aW5n LmphbS1pbmNsdWRlZCkNCiAgICB7DQogICAgICAgIFNFQVJDSCBvbiB0ZXN0aW5nLmphbSA9 ICQoQk9PU1RfQlVJTERfUEFUSCkgOw0KICAgICAgICBpbmNsdWRlIHRlc3RpbmcuamFtIDsN CiAgICB9DQogICAgDQogICAgREVQRU5EUyBhbGwNCiAgICAgIDogWyBydW4gJChzb3VyY2Vz KQ0KICAgICAgICAgIDogJChjbWQtbGluZSkNCiAgICAgICAgICA6ICMgaW5wdXQtZmlsZXMN CiAgICAgICAgICA6ICQocmVxdWlyZW1lbnRzKQ0KICAgICAgICAgIDogJCh0YXJnZXQpDQog ICAgICAgICAgOiAkKGRlZmF1bHQtYnVpbGQpDQogICAgICAgIF0NCiAgICAgIDsNCn0NCg0K IyBVc2VkIHRvIGJ1aWxkIGNvbW1hbmQgZmlsZXMgZnJvbSBhIGxpc3Qgb2Ygc291cmNlcy4N CnJ1bGUgYnVpbGQtY29tbWFuZC1maWxlICggY29tbWFuZCA6IHNvdXJjZXMgKiA6IHByZWZp eCA/IGxpbmUtYnJlYWsgPyApDQp7DQogICAgIyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMN CiAgICBDbGVhbiBjbGVhbiA6ICQoY29tbWFuZCkgOw0KICAgIA0KICAgIERFUEVORFMgJChj b21tYW5kKSA6ICQoc291cmNlcykgOw0KICAgIA0KICAgIFBSRUZJWCBvbiAkKGNvbW1hbmQp ID0gJChwcmVmaXg6RT0pIDsNCiAgICANCiAgICBsb2NhbCAnIF8gID0gIiIgOw0KICAgIA0K ICAgIGlmICEgJChOVCkNCiAgICB7DQogICAgICAgICcgPSAnIDsNCiAgICAgICAgXyA9ICIg IiA7DQogICAgfQ0KICAgICAgICANCiAgICAnIG9uICQoY29tbWFuZCkgPSAkKCcpIDsNCiAg ICBfIG9uICQoY29tbWFuZCkgPSAkKF8pIDsNCiAgICANCiAgICBFT0wgb24gJChjb21tYW5k KSA9IFwiJChsaW5lLWJyZWFrOkU9KSQoJykkKF8pPj4kKF8pXCIgOw0KICAgIEJPTCBvbiAk KGNvbW1hbmQpID0gIlwiDQplY2hvICQoJykkKHByZWZpeDpFPSlcIiIgOw0KICAgIA0KICAg ICMgQ2hlY2sgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIHRvIGR1bXAsIHNvIHRoYXQgd2Ug ZG9uJ3QgZW5kIHVwDQogICAgIyBleGVjdXRpbmcgYSBsaW5lIG9mIHRoZSBmb3JtOg0KICAg ICMNCiAgICAjICAgIGVjaG8gPj4gZmlsZS5DTUQNCiAgICAjDQogICAgIyBvbiBXaW5kb3dz IHRoaXMgd3JpdGVzICJlY2hvIGlzIG9uLiIgaW50byB0aGUgY29tbWFuZC1maWxlLA0KICAg ICMgd2hpY2ggdGhlbiBicmVha3MgdGhlIGxpbmsuDQogICAgDQogICAgaWYgJChzb3VyY2Vz KQ0KICAgIHsNCiAgICAgICAgIyBIYW5kbGUgdGhlIGZpcnN0IHRhcmdldCBzcGVjaWFsbHks IHNvIHRoYXQgdGhlIGZpcnN0IHNvdXJjZSBmaWxlDQogICAgICAgICMgd2lsbCBjbGVhciB0 aGUgY29tbWFuZCBmaWxlDQogICAgICAgIGNvbW1hbmQtZmlsZS1kdW1wICQoY29tbWFuZCkg OiAkKHNvdXJjZXMpIDsNCiAgICB9ICAgIA0KfQ0KDQojIFF1aWV0bHkgZGVsZXRlICQoeCkg aWYgaXQgZXhpc3RzIHdpdGggJChSTTEpIiQoeCkiICANCmlmICQoTlQpDQp7DQogICAgUk0x ID0gIklGIEVYSVNUICIgIkRFTCAiIDsNCn0NCmVsc2UNCnsNCiAgICBSTTEgPSAiJChSTSkg IiA7DQp9DQoNCiMgQnVpbGQgdGhlIGNvbW1hbmQtZmlsZQ0KYWN0aW9ucyBxdWlldGx5IGNv bW1hbmQtZmlsZS1kdW1wDQp7DQogICAgJChSTTEpIiQoPCkiDQogICAgZWNobyAkKCcpJChQ UkVGSVgpIiQoPjpKPSQoRU9MKSQoPCkkKEJPTCkpIiQoJykkKF8pPj4kKF8pJCg8KQ0KfQ0K DQojIENsZWFuIHVwIHRoZSB0ZW1wb3JhcnkgQ09NTUFORC1GSUxFIHVzZWQgdG8gYnVpbGQg VEFSR0VUUy4NCnJ1bGUgcmVtb3ZlLWNvbW1hbmQtZmlsZSAoIHRhcmdldHMgKyA6IGNvbW1h bmQtZmlsZSApDQp7DQogICAgVEVNUE9SQVJZICQoY29tbWFuZC1maWxlKSA7DQogICAgQ2xl YW4gY2xlYW4gOiAkKGNvbW1hbmQtZmlsZSkgOyAjIE1hcmsgdGhlIGZpbGUgZm9yIHJlbW92 YWwgdmlhIGNsZWFuDQp9DQphY3Rpb25zIGlnbm9yZSBxdWlldGx5IHBpZWNlbWVhbCB0b2dl dGhlciByZW1vdmUtY29tbWFuZC1maWxlDQp7DQogICAgJChSTSkgJCg+KQ0KfQ0KDQojIGJ1 aWxkIFRBUkdFVFMgZnJvbSBTT1VSQ0VTIHVzaW5nIGEgY29tbWFuZC1maWxlLCB3aGVyZSBS VUxFLU5BTUUgaXMNCiMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25z IGZyb20gdGhlIGNvbW1hbmQtZmlsZSB0bw0KIyBUQVJHRVRTDQpydWxlIHdpdGgtY29tbWFu ZC1maWxlICggcnVsZS1uYW1lIHRhcmdldHMgKiA6IHNvdXJjZXMgKiA6IHByZWZpeCA/IGxp bmUtYnJlYWsgPyApDQp7DQogICAgIyBjcmVhdGUgYSBjb21tYW5kLWZpbGUgdGFyZ2V0IGFu ZCBwbGFjZSBpdCB3aGVyZSB0aGUgZmlyc3QgdGFyZ2V0DQogICAgIyB3aWxsIGJlIGJ1aWx0 DQogICAgbG9jYWwgY29tbWFuZC1maWxlID0gJCh0YXJnZXRzWzFdOlM9LkNNRCkgOw0KICAg IExPQ0FURSBvbiAkKGNvbW1hbmQtZmlsZSkgPSAkKGdMT0NBVEUoJCh0YXJnZXRzWzFdKSkp IDsNCiAgICBidWlsZC1jb21tYW5kLWZpbGUgJChjb21tYW5kLWZpbGUpIDogJChzb3VyY2Vz KSA6ICQocHJlZml4KSAkKGxpbmUtYnJlYWspIDsNCg0KICAgICMgQnVpbGQgdGhlIHRhcmdl dHMgZnJvbSB0aGUgY29tbWFuZC1maWxlIGluc3RlYWQgb2YgdGhlIHNvdXJjZXMNCiAgICBE RVBFTkRTICQodGFyZ2V0cykgOiAkKGNvbW1hbmQtZmlsZSkgOw0KICAgIGxvY2FsIHJlc3Vs dCA9IFsgJChydWxlLW5hbWUpICQodGFyZ2V0cykgOiAkKGNvbW1hbmQtZmlsZSkgXSA7DQoN CiAgICAjIGNsZWFuIHVwIGFmdGVyd2FyZHMNCiAgICAjIENhbid0IHJlYWxseSBkbyB0aGlz IHVudGlsIDxmaW5kLWxpYnJhcnk+IGFyZ3VtZW50cyBhcmUgYWNjb3VudGVkIGZvci4NCiAg ICAjIHJlbW92ZS1jb21tYW5kLWZpbGUgJCh0YXJnZXRzKSA6ICQoY29tbWFuZC1maWxlKSA7 DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoNClRBRyhwcmVmaXgpID0gIiIgOw0KVEFH KHBvc3RmaXgpID0gIiIgOw0KDQojIEdJVkVOOg0KIw0KIyBBIHRhcmdldCBzdWJ2YXJpYW50 LCB0aGUgc3VidmFyaWFudCBpbmZvLCBhbmQgYSBzZXQgb2YgcmVuYW1lIHRhZ3MuDQojDQoj IFJFU1VMVDoNCiMNCiMgVXNlcyB0aGUgcmVuYW1lIHRhZ3MsIGFuZCB0aGUgZ2xvYmFsIFRB RyBtYXAsIHRvIGFwcGVuZCBhIHRhZyB0byB0aGUNCiMgdGFyZ2V0IGJhc2VuYW1lLiBUaGUg bmV3IHN1YnZhcmlhbnQgdGFyZ2V0IGlzIHJldHVybmVkLiBUaGUgdGFnIGZvcg0KIyB0aGUg dGFyZ2V0IGlzIGNvbXBvc2VkIGZyb20gdGhlIHN1YnZhcmlhbnQgaW5mbyBhbmQgdGhlIGNv cnJlc3BvbmRpbmcNCiMgZW50cnkgaW4gdGhlIHRhZ3MuIFRoaXMgY3JlYXRlcyB0aGUgdGFn IGluIHRoZSBvcmRlciBhcyBnaXZlbiBieSB0aGUNCiMgc3VidmFyaWFudCBpbmZvLg0KIw0K IyBFWEFNUExFOg0KIw0KIyBbIHJlbmFtZS10YXJnZXQgPGdjYy9kZWJ1Zz5saWJ0ZXN0LnNv IDogZ2NjIGRlYnVnIDogPHRhZz48Z2NjPl9nY2MgPHRhZz48ZGVidWc+X2RlYnVnIF0NCiMN CiMgUkVUVVJOUzoNCiMNCiMgPGdjYy9kZWJ1Zz5saWJ0ZXN0X2djY19kZWJ1Zy5zbw0KIw0K cnVsZSByZW5hbWUtdGFyZ2V0ICggdGFyZ2V0ICsgOiBzdWJ2YXJpYW50ICogOiB0YWdzICog KQ0Kew0KICAgIGxvY2FsIHRhZy12YWx1ZXMgPSA7DQogICAgZm9yIGxvY2FsIHRhZyBpbiAk KHRhZ3MpDQogICAgew0KICAgICAgICBsb2NhbCB0YWctdG9rZW5zID0gWyBNQVRDSCAoPCko LiopKD4pKC4qKSA6ICQodGFnOkc9KSBdIDsNCiAgICAgICAgdGFnLXRva2VucyA9ICQodGFn LXRva2Vuc1syXSkgJCh0YWctdG9rZW5zWzRdKSA7DQogICAgICAgIHRhZy12YWx1ZXMgKz0g JCh0YWctdG9rZW5zWzJdOkc9JCh0YWctdG9rZW5zWzFdKSkgOw0KICAgIH0NCg0KICAgIGxv Y2FsIHRhZy10ZXh0ID0gIiIgOw0KDQogICAgIyB0aGUgcHJlZml4IG9mIHRoZSB0YWcuLi4N CiAgICAjDQogICAgbG9jYWwgcHJlZml4LXRhZyA9IFsgZ2V0LXZhbHVlcyA8cHJlZml4PiA6 ICQodGFnLXZhbHVlcykgJChUQUcocHJlZml4KTpHPXByZWZpeCkgXSA7DQogICAgdGFnLXRl eHQgPSAkKHByZWZpeC10YWdbMV0pIDsNCg0KICAgICMgdGhlIHN1YnZhcmlhbnQgdGFncy4u Lg0KICAgICMNCiAgICBmb3IgbG9jYWwgc3YgaW4gJChzdWJ2YXJpYW50KQ0KICAgIHsNCiAg ICAgICAgbG9jYWwgc3YtdGFnID0gWyBnZXQtdmFsdWVzIDwkKHN2KT4gOiAkKHRhZy12YWx1 ZXMpICQoVEFHKCQoc3YpKTpHPSQoc3YpKSBdIDsNCiAgICAgICAgaWYgJChzdi10YWcpDQog ICAgICAgIHsNCiAgICAgICAgICAgIHRhZy10ZXh0ID0gJCh0YWctdGV4dCkkKHN2LXRhZ1sx XSkgOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgIyB0aGUgcG9zdGZpeCBvZiB0aGUgdGFn Li4uDQogICAgIw0KICAgIGxvY2FsIHBvc3RmaXgtdGFnID0gWyBnZXQtdmFsdWVzIDxwb3N0 Zml4PiA6ICQodGFnLXZhbHVlcykgJChUQUcocG9zdGZpeCk6Rz1wb3N0Zml4KSBdIDsNCiAg ICB0YWctdGV4dCA9ICQodGFnLXRleHQpJChwb3N0Zml4LXRhZ1sxXSkgOw0KDQogICAgbG9j YWwgcmVuYW1lZC10YXJnZXQgPSA7DQogICAgZm9yIGxvY2FsIHQgaW4gJCh0YXJnZXQpDQog ICAgew0KICAgICAgICBsb2NhbCBCLVMgPSBbIE1BVENIIChbXlxcLl0qKSguKikgOiAkKHQ6 Rz0pIF0gOw0KICAgICAgICBsb2NhbCBCID0gJChCLVNbMV0pIDsgQiA/PSAiIiA7DQogICAg ICAgIGxvY2FsIFMgPSAkKEItU1syXSkgOyBTID89ICIiIDsNCiAgICAgICAgbG9jYWwgbmV3 LW5hbWUgPSAkKEIpJCh0YWctdGV4dCkkKFMpIDsgbmV3LW5hbWUgPSAkKG5ldy1uYW1lOkc9 JCh0OkcpKSA7DQogICAgICAgIHJlbmFtZWQtdGFyZ2V0ICs9ICQobmV3LW5hbWUpIDsNCiAg ICB9DQogICAgcmV0dXJuICQocmVuYW1lZC10YXJnZXQpIDsNCn0NCg0KcnVsZSBncmlzdC10 YXJnZXRzICggdGFyZ2V0cyArIDogc3ViZGlyLXRva2VucyAqICkNCnsNCiAgICBsb2NhbCBz dWJkaXItZ3Jpc3QgPSAiIiA7DQogICAgaWYgJChzdWJkaXItdG9rZW5zKQ0KICAgIHsNCiAg ICAgICAgc3ViZGlyLWdyaXN0ID0gWyBGR3Jpc3QgJChzdWJkaXItdG9rZW5zKSBdIDsNCiAg ICAgICAgaWYgJChTT1VSQ0VfR1JJU1QpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN1YmRp ci1ncmlzdCA9ICIhJChzdWJkaXItZ3Jpc3QpIiA7DQogICAgICAgIH0NCiAgICB9DQogICAg aWYgISAkKFNPVVJDRV9HUklTVCkNCiAgICB7DQogICAgICAgIHJldHVybiAkKHRhcmdldHM6 Rz0kKHN1YmRpci1ncmlzdCkpIDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAg cmV0dXJuICQodGFyZ2V0czpHPSQoU09VUkNFX0dSSVNUKSQoc3ViZGlyLWdyaXN0KSkgOw0K ICAgIH0NCn0NCg0KIyBFWEFNUExFOg0KIw0KIyBzdGFnZSB0ZXN0LXN0YWdlDQojICAgOiA8 ZXhlPmZvby9iYXIvdGVzdDEgPGRsbD5xd2VydHkva2V5cyBkb2NzL1JFQURNRQ0KIyAgIDog PHRhZz48cHJlZml4PiJfIiA8dGFnPjxkZWJ1Zz4iRCIgPHRhZz48cHJvZmlsZT4iUCIgPHRh Zz48Z2NjPiJHQ0MiDQojICAgOiBkZWJ1ZyBwcm9maWxlIDxzdXBwcmVzcz50cnVlDQojICAg Ow0KIw0KIyBQUk9EVUNFUzoNCiMNCiMgdGVzdC1zdGFnZS9saWJrZXlzX0dDQ0Quc28NCiMg dGVzdC1zdGFnZS9saWJrZXlzX0dDQ1Auc28NCiMgdGVzdC1zdGFnZS90ZXN0MV9HQ0NEDQoj IHRlc3Qtc3RhZ2UvdGVzdDFfR0NDUA0KIyB0ZXN0LXN0YWdlL1JFQURNRQ0KIw0KIyBJRkY6 DQojDQojICRzaGVsbD4gamFtIHRlc3Qtc3RhZ2UNCiMNCnJ1bGUgc3RhZ2UgKCBuYW1lIDog c291cmNlcyArIDogcmVxdWlyZW1lbnRzICogOiBsb2NhbC1idWlsZCAqICkNCnsNCiAgICBp ZiAhICQoZ0lOX0xJQl9JTkNMVURFKQ0KICAgIHsNCg0KICAgIGxvY2FsIHN0YWdlLWlkID0N CiAgICAgICAgWyBncmlzdC10YXJnZXRzICQobmFtZSkgXSA7DQogICAgbG9jYWwgYXJjaC1z dWJkaXJzID0gWyBnZXQtdmFsdWVzIDxhcmNoaXRlY3R1cmUtc3ViZGlycz4gOiAkKHJlcXVp cmVtZW50cykgXSA7DQogICAgbG9jYWwgdHJlZS1yb290ID0gWyBnZXQtdmFsdWVzIDx0cmVl LXN1YmRpcnM+IDogJChyZXF1aXJlbWVudHMpIF0gOw0KICAgIGlmICQodHJlZS1yb290KSB7 IHRyZWUtcm9vdCA9IFsgc3BsaXQtcGF0aCAkKHRyZWUtcm9vdFsxXSkgXSA7IH0NCiAgICBs b2NhbCBsb2NhdGUgPSBbIGdldC12YWx1ZXMgPGxvY2F0ZT4gOiAkKHJlcXVpcmVtZW50cykg XSA7DQogICAgaWYgJChsb2NhdGUpIHsgbG9jYXRlID0gWyBzcGxpdC1wYXRoICQobG9jYXRl KSBdIDsgfQ0KICAgIGxvY2FsIGZha2UtdGFyZ2V0ID0gWyBnZXQtdmFsdWVzIDx0YXJnZXQ+ IDogJChyZXF1aXJlbWVudHMpIF0gOw0KICAgIGxvY2FsIHJlbmFtZS1ydWxlID0gWyBnZXQt dmFsdWVzIDxyZW5hbWU+IDogJChyZXF1aXJlbWVudHMpIF0gOw0KDQogICAgIyBTdXByZXNz IHRoZSByZWd1bGFyIGJ1aWxkIG9mIHRoaXMgdGFyZ2V0DQogICAgbG9jYWwgZ1NVUFBSRVNT X0ZBS0VfVEFSR0VUUyA9IFsgZ2V0LXZhbHVlcyA8c3VwcHJlc3M+IDogJChsb2NhbC1idWls ZCkgXSA7DQoNCiAgICBsb2NhbCBzdGFnZS1kaXIgPSAkKG5hbWU6Rz0pIDsNCiAgICBsb2Nh bCBmaWxlcyA7DQogICAgbG9jYWwgZmlsZS1tb2RlIDsNCiAgICBsb2NhbCBmaWxlLXRhZ2dl ZCA7DQogICAgbG9jYWwgZmlsZS1zdWJkaXIgOw0KDQogICAgIyBQcmV2ZW50IGJ1aWx0IG9i amVjdCBmcm9tIGdldHRpbmcgZGVsZXRlZCBzbyB0aGF0IHdoZW4gdGFyZ2V0cyBhcmUgbGlu a2VkDQogICAgIyBtdWx0aXBsZSB0aW1lcyB0aGV5IGFyZSBhdmFpbGFibGUuDQogICAgbG9j YWwgS0VFUE9CSlMgPSB0cnVlIDsNCg0KICAgICMgRm9yIGVhY2ggc291cmNlLCBjb2xsZWN0 IGl0cyBpbmZvcm1hdGlvbiwgYW5kIHBvc3NpYmx5IGdlbmVyYXRlIGl0Lg0KICAgICMNCiAg ICBmb3IgbG9jYWwgc291cmNlIGluICQoc291cmNlcykNCiAgICB7DQogICAgICAgIHNvdXJj ZSA9IFsgc3BsaXQtcXVhbGlmaWVkLXByb3BlcnR5ICQoc291cmNlKSBdIDsNCiAgICAgICAg bG9jYWwgc291cmNlLWJ1aWxkID0gWyBNQVRDSCAiXjwoW14+XSopPiIgOiAkKHNvdXJjZVsx LTJdKSBdIDsNCiAgICAgICAgc291cmNlID0gWyBleHBhbmQtc291cmNlLW5hbWVzICQoc291 cmNlWzNdKSBdIDsNCg0KICAgICAgICBpZiAkKHNvdXJjZTpHKQ0KICAgICAgICB7DQogICAg ICAgICAgICBsb2NhbCBnSU5fTElCX0lOQ0xVREUgPSBUUlVFIDsNCg0KICAgICAgICAgICAg bG9jYWwgdGFyZ2V0ID0gJChzb3VyY2U6RD06Rz0pIDsNCiAgICAgICAgICAgIGxvY2FsIHRh cmdldC1pZCA9IFsgdGFyZ2V0LWlkLW9mICQoc291cmNlKSBdIDsNCiAgICAgICAgICAgIGxv Y2FsIHRhcmdldC1zdWJkaXIgPSBbIGRpcmVjdG9yeS1vZiBbIHRhcmdldC1wYXRoLW9mICQo c291cmNlKSBdIF0gOw0KDQogICAgICAgICAgICBkZXBlbmRlbnQtaW5jbHVkZSAkKHNvdXJj ZTpHPSkgOw0KICAgICAgICAgICAgbG9jYWwgZ0lNUE9TRURfUkVRVUlSRU1FTlRTKCQodGFy Z2V0LWlkKSkgPSAkKHJlcXVpcmVtZW50cykgOw0KICAgICAgICAgICAgbG9jYWwgc3VidmFy aWFudHMgPSBbIGV4cGFuZC10YXJnZXQtc3VidmFyaWFudHMgJCh0YXJnZXQtaWQpIDogJChs b2NhbC1idWlsZCkgOiAkKFRPT0xTKSBdIDsNCg0KICAgICAgICAgICAgZm9yIGxvY2FsIHN1 YnZhcmlhbnQgaW4gJChzdWJ2YXJpYW50cykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICBsb2NhbCBzLXRhcmdldCA9IDsNCiAgICAgICAgICAgICAgICBsb2NhbCBzLXByb3Bl cnRpZXMgPSA7DQogICAgICAgICAgICAgICAgbG9jYWwgcy10b29sc2V0ID0gOw0KICAgICAg ICAgICAgICAgIGxvY2FsIHMtdmFyaWFudCA9IDsNCiAgICAgICAgICAgICAgICBzcGxpdC10 YXJnZXQtc3VidmFyaWFudCBzLXRhcmdldCBzLXByb3BlcnRpZXMgcy10b29sc2V0IHMtdmFy aWFudCA6ICQoc3VidmFyaWFudCkgOw0KICAgICAgICAgICAgICAgIGxvY2FsIHMtc3ViZGly IDsNCiAgICAgICAgICAgICAgICBpZiAkKGFyY2gtc3ViZGlycykNCiAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICAgIGxvY2FsIGFyY2ggPSBbIGdldC12YWx1ZXMgPGlu c3RydWN0aW9uLXNldD4gOiAkKHMtcHJvcGVydGllcykgXSA7DQogICAgICAgICAgICAgICAg ICAgIGFyY2ggPz0gWyBnZXQtdmFsdWVzIDxhcmNoaXRlY3R1cmU+IDogJChzLXByb3BlcnRp ZXMpIF0gOw0KICAgICAgICAgICAgICAgICAgICBhcmNoID89ICQoT1NQTEFUOkwpIDsNCiAg ICAgICAgICAgICAgICAgICAgaWYgJChhcmNoKSA9ICJkZWZhdWx0IiB7IGFyY2ggPSAkKE9T UExBVDpMKSA7IH0NCiAgICAgICAgICAgICAgICAgICAgYXJjaCArPSBbIGdldC12YWx1ZXMg PGFkZHJlc3MtbW9kZWw+IDogJChzLXByb3BlcnRpZXMpIF0gOw0KICAgICAgICAgICAgICAg ICAgICBhcmNoICs9ICQoT1M6TCkgOw0KICAgICAgICAgICAgICAgICAgICBzLXN1YmRpciA9 ICQoYXJjaDpKPS0pIDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQog ICAgICAgICAgICAgICAgbG9jYWwgc291cmNlLWJ1aWxkLXJ1bGUgPSBbIE1BVENIICJbYF0o W15gXSspW2BdIiA6ICQoc291cmNlLWJ1aWxkWzJdKSBdIDsNCiAgICAgICAgICAgICAgICBp ZiAgKCAkKHMtdG9vbHNldCkgPSAkKHNvdXJjZS1idWlsZFsxXSkgfHwgJChzb3VyY2UtYnVp bGRbMV0pID0gKiApICYmDQogICAgICAgICAgICAgICAgICAgICAgICAoICQocy12YXJpYW50 KSA9ICQoc291cmNlLWJ1aWxkWzJdKSB8fCAkKHNvdXJjZS1idWlsZFsyXSkgPSAqICkgfHwN CiAgICAgICAgICAgICAgICAgICAgJChzb3VyY2UtYnVpbGQtcnVsZSkgJiYgWyAkKHNvdXJj ZS1idWlsZC1ydWxlKSAkKHMtdG9vbHNldCkgJChzLXZhcmlhbnQpIF0NCiAgICAgICAgICAg ICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgdGFyZ2V0LXN1YnZhcmlhbnQg PSA7DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxv Y2FsIFsgcHJvdGVjdC1zdWJwcm9qZWN0IF0gOw0KICAgICAgICAgICAgICAgICAgICAgICAg ZW50ZXItc3VicHJvamVjdCAkKHRhcmdldC1zdWJkaXIpIDsNCiAgICAgICAgICAgICAgICAg ICAgICAgIHRhcmdldC1zdWJ2YXJpYW50ID0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbIHN1YnZhcmlhbnQtdGFyZ2V0ICQocy10YXJnZXQpIDogJChzLXByb3BlcnRpZXMpIDog JChzLXRvb2xzZXQpICQocy12YXJpYW50KSBdIDsNCiAgICAgICAgICAgICAgICAgICAgfQ0K DQogICAgICAgICAgICAgICAgICAgIGxvY2FsIHN2LWZpbGVzID0gOw0KICAgICAgICAgICAg ICAgICAgICBmb3IgbG9jYWwgc3YgaW4gJCh0YXJnZXQtc3VidmFyaWFudCkNCiAgICAgICAg ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgc3YtZmlsZSA9 ICQoZ0ZJTEVTKCQoc3YpKSkgOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3YtZmlsZSA/ PSAkKHN2KSA7DQogICAgICAgICAgICAgICAgICAgICAgICBzdi1maWxlcyArPSAkKHN2LWZp bGUpIDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBzdi1m aWxlcyA9IFsgdW5pcXVlICQoc3YtZmlsZXMpIF0gOw0KICAgICAgICAgICAgICAgICAgICBm b3IgbG9jYWwgc3YgaW4gJChzdi1maWxlcykNCiAgICAgICAgICAgICAgICAgICAgew0KICAg ICAgICAgICAgICAgICAgICAgICAgbG9jYWwgcmVuYW1lZC10YXJnZXQgOw0KICAgICAgICAg ICAgICAgICAgICAgICAgbG9jYWwgc3BsaXQtcHJvcGVydGllcyA9IFsgc3BsaXQtcGF0aCAk KHMtcHJvcGVydGllc1sxXSkgXSA7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbG9j YWwgcnIgaW4gJChyZW5hbWUtcnVsZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkLXRhcmdldCArPSBbICQocnIpICQo c3YpIDogJChzcGxpdC1wcm9wZXJ0aWVzKSBdIDsNCiAgICAgICAgICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQtdGFyZ2V0ID89DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgWyByZW5hbWUtdGFyZ2V0ICQoc3YpIDogWyBzcGxpdC1w YXRoICQocy1wcm9wZXJ0aWVzWzFdKSBdIDogXSA7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgIGZpbGVzICs9ICQoc3YpIDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtbW9k ZSgkKHN2KSkgPSAkKCQoZ1RBUkdFVF9UWVBFKCQocy10YXJnZXQpKSlNT0RFKSA7DQogICAg ICAgICAgICAgICAgICAgICAgICBmaWxlLXRhZ2dlZCgkKHN2KSkgPSAkKHJlbmFtZWQtdGFy Z2V0KSA7DQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXN1YmRpcigkKHN2KSkgPSAk KHMtc3ViZGlyKSA7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsN CiAgICAgICAgICAgIGxvY2FsIHJlbmFtZWQtZmlsZSA7DQogICAgICAgICAgICBmb3IgbG9j YWwgcnIgaW4gJChyZW5hbWUtcnVsZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICByZW5hbWVkLWZpbGUgKz0gWyAkKHJyKSAkKHNvdXJjZSkgXSA7DQogICAgICAgICAgICB9 DQogICAgICAgICAgICByZW5hbWVkLWZpbGUgPz0gJChzb3VyY2UpIDsNCiAgICAgICAgICAg IA0KICAgICAgICAgICAgZmlsZXMgKz0gJChzb3VyY2UpIDsNCiAgICAgICAgICAgIGZpbGUt dGFnZ2VkKCQoc291cmNlKSkgPSAkKHJlbmFtZWQtZmlsZSkgOw0KICAgICAgICB9DQogICAg fQ0KDQogICAgIyBHZW5lcmF0ZSBhbmQgY29sbGVjdCB0aGUgZmlsZSBjb3B5IGJ1aWxkIGlu c3RydWN0aW9ucy4gSWYgd2UNCiAgICAjIGFyZSBnZXR0aW5nIGRlZmluZWQgaW4gdGhlIGRl cGVuZGVudCBwaGFzZSBza2lwIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb25zLg0KICAgICMNCiAg ICBsb2NhbCBkZXN0aW5hdGlvbi1maWxlcyA9IDsNCiAgICBsb2NhbCByZXN1bHQtZmlsZXMg PSA7DQogICAgbG9jYWwgbG9jYXRlLXRhcmdldCA9ICQobG9jYXRlKSA7DQogICAgaWYgJChB TExfTE9DQVRFX1RBUkdFVCkNCiAgICB7DQogICAgICAgIGxvY2F0ZS10YXJnZXQgPz0gWyBq b2luLXBhdGggWyBzcGxpdC1wYXRoICQoQUxMX0xPQ0FURV9UQVJHRVQpIF0gJChTVUJESVJf VE9LRU5TKSBdIDsNCiAgICB9DQogICAgbG9jYXRlLXRhcmdldCA/PSBbIHNwbGl0LXBhdGgg JChTVUJESVIpIF0gOw0KICAgIGZvciBsb2NhbCBmaWxlIGluICQoZmlsZXMpDQogICAgew0K ICAgICAgICBsb2NhbCBkZXN0aW5hdGlvbi1maWxlIDsNCiAgICAgICAgbG9jYWwgZGVzdGlu YXRpb24tc3ViZGlyIDsNCiAgICAgICAgaWYgJChmaWxlOkcpDQogICAgICAgIHsNCiAgICAg ICAgICAgIGRlc3RpbmF0aW9uLWZpbGUgPSAkKGZpbGUtdGFnZ2VkKCQoZmlsZSkpOkc9OkQ9 KSA7DQogICAgICAgICAgICBkZXN0aW5hdGlvbi1zdWJkaXIgPSAkKGZpbGUtc3ViZGlyKCQo ZmlsZSkpKSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAg ICAgICBkZXN0aW5hdGlvbi1maWxlID0gJChmaWxlLXRhZ2dlZCgkKGZpbGUpKTpEPSkgOw0K ICAgICAgICAgICAgaWYgJCh0cmVlLXJvb3QpDQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgZGVzdGluYXRpb24tc3ViZGlyID0gWyBzdHJpcC1pbml0aWFsICQodHJlZS1yb290 KSA6IFsgc3BsaXQtcGF0aCAkKGZpbGU6RCkgXSBdIDsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfQ0KICAgICAgICBkZXN0aW5hdGlvbi1maWxlID0NCiAgICAgICAgICAgIFsgZ3Jpc3Qt dGFyZ2V0cyAkKGRlc3RpbmF0aW9uLWZpbGUpIDogWyBzcGxpdC1wYXRoICQoc3RhZ2UtZGly KSBdICQoZGVzdGluYXRpb24tc3ViZGlyKSBdIDsNCiAgICAgICAgZGVzdGluYXRpb24tZmls ZXMgKz0gJChkZXN0aW5hdGlvbi1maWxlKSA7DQogICAgICAgIHsNCiAgICAgICAgICAgIGxv Y2FsIEZJTEVNT0RFID0gJChGSUxFTU9ERSkgOw0KICAgICAgICAgICAgaWYgJChmaWxlLW1v ZGUoJChmaWxlKSkpIHsgRklMRU1PREUgPSAkKGZpbGUtbW9kZSgkKGZpbGUpKSkgOyB9DQog ICAgICAgICAgICBNYWtlTG9jYXRlICQoZGVzdGluYXRpb24tZmlsZSkgOg0KICAgICAgICAg ICAgICAgIFsgRkRpck5hbWUgJChsb2NhdGUtdGFyZ2V0KSBbIHNwbGl0LXBhdGggJChzdGFn ZS1kaXIpIF0gJChkZXN0aW5hdGlvbi1zdWJkaXIpIF0gOw0KICAgICAgICAgICAgZm9yIGxv Y2FsIGRmIGluICQoZGVzdGluYXRpb24tZmlsZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICByZXN1bHQtZmlsZXMgKz0gJChkZikgOw0KICAgICAgICAgICAgICAgIEZpbGVD bG9uZSAkKGRmKSA6ICQoZmlsZSkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbG9j YWwgdGFyZ2V0ID0gJChzdGFnZS1pZCkgJChkZXN0aW5hdGlvbi1zdWJkaXIpICQoZGVzdGlu YXRpb24tZmlsZTpHPSkgOw0KICAgICAgICAgICAgZGVjbGFyZS1mYWtlLXRhcmdldHMgJCh0 YXJnZXQ6Sj0vKSA6ICQoZGVzdGluYXRpb24tZmlsZSkgOw0KICAgICAgICB9DQogICAgfQ0K DQogICAgIyBEb24ndCBleHBvc2UgZmFrZSB0YXJnZXRzIHdoZW4gc3VwcHJlc3NpbmcgZGVm YXVsdCBidWlsZHMuDQogICAgIyBCdXQgaG9ub3IgcmVxdWlyZW1lbnQgdG8gZXhwb3NlIHNv dXJjZXMgdGhyb3VnaCBnaXZlbiA8dGFyZ2V0Pi4NCiAgICAjDQogICAgaWYgISAkKGZha2Ut dGFyZ2V0KQ0KICAgIHsNCiAgICAgICAgZGVjbGFyZS1mYWtlLXRhcmdldHMgJChzdGFnZS1p ZDpHPSkgOiAkKGRlc3RpbmF0aW9uLWZpbGVzKSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7 DQogICAgICAgIGlmICQoZ1NVUFBSRVNTX0ZBS0VfVEFSR0VUUykNCiAgICAgICAgew0KICAg ICAgICAgICAgZGVjbGFyZS1mYWtlLXRhcmdldHMgJChmYWtlLXRhcmdldCkgOiAkKGZpbGVz KSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBk ZWNsYXJlLWZha2UtdGFyZ2V0cyAkKGZha2UtdGFyZ2V0KSA6ICQoZGVzdGluYXRpb24tZmls ZXMpIDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIENsZWFuIGNsZWFuIDogJChkZXN0aW5h dGlvbi1maWxlcykgOw0KDQogICAgcmV0dXJuICQocmVzdWx0LWZpbGVzKSA7DQoNCiAgICB9 DQp9DQoNCiMgR0lWRU46DQojDQojIEEgYmFyZSB0YXJnZXQsIGVpdGhlciB3aXRoIG9yIHdp dGhvdXQgZ3Jpc3QuDQojDQojIFJFVFVSTlM6DQojDQojIFRoZSBmdWxseSBxdWFsaWZpZWQg YW5kIGdyaXN0ZWQgdGFyZ2V0IElELg0KIw0KIyBFWEFNUExFOg0KIw0KIyBbIHRhcmdldC1p ZC1vZiA8bGliPi4uLy4uL3N1YjEvc3ViMi90ZXN0LmRsbCBdDQojDQojIFJFVFVSTlM6DQoj DQojIDxzdWIxIXN1YjI+dGVzdC5kbGwNCiMNCnJ1bGUgdGFyZ2V0LWlkLW9mICggdGFyZ2V0 LXJlZiApDQp7DQogICAgbG9jYWwgZ3Jpc3QgPSAkKHRhcmdldC1yZWY6RykgOw0KICAgIGxv Y2FsIHRhcmdldCA9ICQodGFyZ2V0LXJlZjpHPSkgOw0KICAgIHdoaWxlICQodGFyZ2V0Okcp DQogICAgew0KICAgICAgICBncmlzdCArPSAkKHRhcmdldDpHKSA7DQogICAgICAgIHRhcmdl dCA9ICQodGFyZ2V0Okc9KSA7DQogICAgfQ0KICAgIGxvY2FsIHBhdGggPSBbIGRpcmVjdG9y eS1vZiAkKHRhcmdldCkgXSA7DQogICAgaWYgISBbIE1BVENIICJeKEApIiA6ICQocGF0aCkg XQ0KICAgIHsNCiAgICAgICAgcGF0aCA9IFsgam9pbiBAJChQUk9KRUNUKSBbIHNpbXBsaWZ5 LXBhdGgtdG9rZW5zIFsgdG9wLXJlbGF0aXZlLXRva2VucyAkKHBhdGgpIF0gXSA6IC8gXSA7 DQogICAgfQ0KICAgIGxvY2FsIHRva2VucyA9IFsgc3BsaXQtcGF0aCAkKHBhdGgpIF0gOw0K ICAgIGxvY2FsIHByb2plY3QtbmFtZSA9IFsgTUFUQ0ggIl5AKFteL1xcXSspIiA6ICQodG9r ZW5zWzFdKSBdIDsNCiAgICBpZiAkKHByb2plY3QtbmFtZSkNCiAgICB7DQogICAgICAgIHRv a2VucyA9ICQodG9rZW5zWzItXSkgOw0KICAgIH0NCiAgICBwcm9qZWN0LW5hbWUgPz0gJChQ Uk9KRUNUKSA7DQogICAgbG9jYWwgU09VUkNFX0dSSVNUID0gWyBGR3Jpc3QgQCQocHJvamVj dC1uYW1lKSBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zICQodG9rZW5zKSBdIF0gOw0KICAgIGxv Y2FsIHRhcmdldC1pZCA9IFsgRkdyaXN0RmlsZXMgJCh0YXJnZXQ6RD0pIF0gOw0KICAgIHJl dHVybiAkKHRhcmdldC1pZCkgOw0KfQ0KDQojDQojDQpydWxlIHRhcmdldC1wYXRoLW9mICgg dGFyZ2V0LXJlZiApDQp7DQogICAgbG9jYWwgZ3Jpc3QgPSAkKHRhcmdldC1yZWY6RykgOw0K ICAgIGxvY2FsIHRhcmdldCA9ICQodGFyZ2V0LXJlZjpHPSkgOw0KICAgIHdoaWxlICQodGFy Z2V0OkcpDQogICAgew0KICAgICAgICBncmlzdCArPSAkKHRhcmdldDpHKSA7DQogICAgICAg IHRhcmdldCA9ICQodGFyZ2V0Okc9KSA7DQogICAgfQ0KICAgIGxvY2FsIHBhdGggPSBbIGRp cmVjdG9yeS1vZiAkKHRhcmdldCkgXSA7DQogICAgaWYgISBbIE1BVENIICJeKEApIiA6ICQo cGF0aCkgXQ0KICAgIHsNCiAgICAgICAgcGF0aCA9IFsgam9pbiBAJChQUk9KRUNUKSBbIHNp bXBsaWZ5LXBhdGgtdG9rZW5zIFsgdG9wLXJlbGF0aXZlLXRva2VucyAkKHBhdGgpIF0gXSA6 IC8gXSA7DQogICAgfQ0KICAgIHBhdGggPSAkKHBhdGgpLyQodGFyZ2V0OkQ9KSA7DQogICAg aWYgJChncmlzdCkNCiAgICB7DQogICAgICAgIHBhdGggPSAkKGdyaXN0Oko9IiIpJChwYXRo KSA7DQogICAgfQ0KICAgIHJldHVybiAkKHBhdGgpIDsNCn0NCg0KIyBDb21tb24gcnVsZXMg Zm9yIGdlbmVyYXRpbmcgYSBzaW5nbGUgdGFnIGJhc2VkIG9uIHRoZQ0KIyB2YXJpYW50LCBi dWlsZCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHRvb2xzZXQgdXNlZCB0byBidWlsZC4NCiMgVG8g dXNlIHBsYWNlIHRoaXMgcnVsZSBuYW1lIGluIHRoZSByZXF1aXJlbWVudGVzIHNlY3Rpb24g b2YNCiMgYSBzdGFnZSB0YXJnZXQuDQojDQojIFRoZSB0YWcgaXMgY29uc3RydWN0ZWQgYXMg c3VjaDoNCiMNCiMgICBbLTx0b29sc2V0LXRhZz5dWy08dGhyZWFkLXRhZz5dWy08cnVudGlt ZS10YWc+XVstPHZlcnNpb24tdGFnPl0NCiMNCiMgICA8dG9vbHNldC10YWc+IG1hcHMgdG8g YW4gYWJicmV2aWF0ZWQgbmFtZSBvZiB0aGUgdG9vbHNldA0KIyAgIGFuZCB3aGVuIHBvc3Np YmxlIGFuZCBhcHBsaWNhYmxlIHRoZSB2ZXJzaW9uIG9mIHRoZSB0b29sc2V0Lg0KIw0KIyAg IDx0aHJlYWQtdGFnPiAibXQiIHdoZW4gbXVsdGktdGhyZWFkaW5nIGlzIGVuYWJsZWQuDQoj DQojICAgPHJ1bnRpbWUtdGFnPiBhZGRzIHRoZXNlIHNpbmdsZSBsZXR0ZXIgdGFnczoNCiMg ICAgICAgInMiIHdoZW4gc3RhdGljIGxpbmtpbmcgdG8gcnVudGltZQ0KIyAgICAgICAiZyIg d2hlbiBsaW5raW5nIHRvIGRlYnVnIHJ1bnRpbWUNCiMgICAgICAgInkiIHdoZW4gYnVpbGRp bmcgZGVidWctcHl0aG9uIHZhcmlhbnRzDQojICAgICAgICJkIiB3aGVuIGJ1aWxkaW5nIGRl YnVnIHZhcmlhbnRzDQojICAgICAgICJwIiB3aGVuIGJ1aWxkaW5nIHdpdGggc3RscG9ydCBs aWJyYXJpZXMNCiMgICAgICAgIm4iIHdoZW4gYnVpbGRpbmcgd2l0aCBzdGxwb3J0IGFuZCB1 c2luZyBuYXRpdmUgaW9zdHJlYW1zDQojDQojIFRoZSB0YWcgYWRkZWQgaXMgYSA8dGFnPjxw cmVmaXg+IHRvIGFsbG93IGZvciBhZGRpdGlvbmFsIHRhZ3MuDQojDQpydWxlIGNvbW1vbi12 YXJpYW50LXRhZyAoIHRvb2xzZXQgdmFyaWFudCA6IHByb3BlcnRpZXMgKiApDQp7DQogICAg bG9jYWwgdGFncyA9IDsNCiAgICANCiAgICBsb2NhbCB0aHJlYWQtdGFnID0gOw0KICAgIGlm IDx0aHJlYWRpbmc+bXVsdGkgaW4gJChwcm9wZXJ0aWVzKSB7IHRocmVhZC10YWcgPSBtdCA7 IH0NCiAgICANCiAgICBsb2NhbCBydW50aW1lLXRhZyA9IDsNCiAgICBpZiA8cnVudGltZS1s aW5rPnN0YXRpYyBpbiAkKHByb3BlcnRpZXMpIHsgcnVudGltZS10YWcgKz0gcyA7IH0NCiAg ICBpZiA8cnVudGltZS1idWlsZD5kZWJ1ZyBpbiAkKHByb3BlcnRpZXMpIHsgcnVudGltZS10 YWcgKz0gZyA7IH0NCiAgICBpZiBbIE1BVENIIC4qKGRlYnVnLXB5dGhvbikuKiA6ICQodmFy aWFudCkgXSB7IHJ1bnRpbWUtdGFnICs9IHkgOyB9DQogICAgZWxzZSB7IGlmIFsgTUFUQ0gg LiooZGVidWcpLiogOiAkKHZhcmlhbnQpIF0geyBydW50aW1lLXRhZyArPSBkIDsgfSB9DQog ICAgaWYgWyBNQVRDSCAuKihzdGxwKS4qIDogJCh0b29sc2V0KSBdIHx8DQogICAgICAgIFsg TUFUQ0ggLiooc3RscCkuKiA6ICQocHJvcGVydGllczpHKSBdDQogICAgeyBydW50aW1lLXRh ZyArPSBwIDsgfQ0KICAgIGlmIDxzdGxwb3J0LWlvc3RyZWFtPm9mZiBpbiAkKHByb3BlcnRp ZXMpIHsgcnVudGltZS10YWcgKz0gbiA7IH0NCiAgICANCiAgICBsb2NhbCB0b29sc2V0LXRh ZyA9IDsNCiAgICBpZiAhICQoZ1VOVkVSU0lPTkVEX1ZBUklBTlRfVEFHKQ0KICAgIHsNCiAg ICAgICAgc3dpdGNoICQodG9vbHNldCkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSBi b3JsYW5kKiA6IHRvb2xzZXQtdGFnICs9IGJjYiA7DQogICAgICAgICAgICBjYXNlIGNvbW8q IDogdG9vbHNldC10YWcgKz0gY29tbyA7DQogICAgICAgICAgICBjYXNlIGN3cHJvOCogOiB0 b29sc2V0LXRhZyArPSBjdyA4IDsNCiAgICAgICAgICAgIGNhc2UgY3dwcm85KiA6IHRvb2xz ZXQtdGFnICs9IGN3IDkgOw0KICAgICAgICAgICAgY2FzZSBkYXJ3aW4qIDogdG9vbHNldC10 YWcgKz0gOw0KICAgICAgICAgICAgY2FzZSBlZGcqIDogdG9vbHNldC10YWcgKz0gZWRnIDsN CiAgICAgICAgICAgIGNhc2UgZ2NjKiA6IHRvb2xzZXQtdGFnICs9IGdjYyA7DQogICAgICAg ICAgICBjYXNlIGludGVsLWxpbnV4KiA6IHRvb2xzZXQtdGFnICs9IGlsIDsNCiAgICAgICAg ICAgIGNhc2UgaW50ZWwtd2luMzIqIDogdG9vbHNldC10YWcgKz0gaXcgOw0KICAgICAgICAg ICAgY2FzZSBrY2MqIDogdG9vbHNldC10YWcgKz0ga2NjIDsNCiAgICAgICAgICAgIGNhc2Ug a3lsaXgqIDogdG9vbHNldC10YWcgKz0gYmNrIDsNCiAgICAgICAgICAgIGNhc2UgbWV0cm93 ZXJrcyogOiB0b29sc2V0LXRhZyArPSBjdyA7DQogICAgICAgICAgICBjYXNlIG1pbmd3KiA6 IHRvb2xzZXQtdGFnICs9IG1ndyA7DQogICAgICAgICAgICBjYXNlIG1pcHNwcm8qIDogdG9v bHNldC10YWcgKz0gbXAgOw0KICAgICAgICAgICAgY2FzZSBtc3ZjKiA6IHRvb2xzZXQtdGFn ICs9IHZjIDYgOw0KICAgICAgICAgICAgY2FzZSBzdW5wcm8qIDogdG9vbHNldC10YWcgKz0g c3cgOw0KICAgICAgICAgICAgY2FzZSB0cnU2NGN4eCogOiB0b29sc2V0LXRhZyArPSB0cnUg Ow0KICAgICAgICAgICAgY2FzZSB2YWNwcCogOiB0b29sc2V0LXRhZyArPSB4bGMgOw0KICAg ICAgICAgICAgY2FzZSB2Y1s2NzhdW19dKiA6DQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgdG9vbHNldC10YWcgKz0gdmMgOw0KICAgICAgICAgICAgICAgIHRvb2xzZXQtdGFn ICs9IFsgTUFUQ0ggInZjKFs2NzhdKVtfXShbMDEyMzQ1Njc4OV0qKSIgOiAkKHRvb2xzZXQp IF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2FzZSB2Y1s2NzhdKiA6DQogICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgdG9vbHNldC10YWcgKz0gdmMgOw0KICAgICAg ICAgICAgICAgIHRvb2xzZXQtdGFnICs9IFsgTUFUQ0ggInZjKFs2NzhdKSIgOiAkKHRvb2xz ZXQpIF0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2FzZSAqIDoNCiAgICAgICAg ICAgIHRvb2xzZXQtdGFnICs9IFsgTUFUQ0ggIl4oW14tXSopIiA6ICQodG9vbHNldCkgXSA7 DQogICAgICAgIH0NCiAgICAgICAgdG9vbHNldC10YWcgKz0gWyBNQVRDSCAiWy1dKFswMTIz NDU2Nzg5XSspW19dKFswMTIzNDU2Nzg5XSopIiA6ICQodG9vbHNldCkgXSA7DQogICAgfQ0K ICAgIA0KICAgIGxvY2FsIHZlcnNpb24tdGFnID0gOw0KICAgIGlmICEgJChnVU5WRVJTSU9O RURfVkFSSUFOVF9UQUcpDQogICAgew0KICAgICAgICBsb2NhbCB2ZXJzaW9uLW51bWJlciA9 IFsgZ2V0LXZhbHVlcyA8dmVyc2lvbj4gOiAkKHByb3BlcnRpZXMpIF0gOw0KICAgICAgICB2 ZXJzaW9uLW51bWJlciA/PSAkKEJPT1NUX1ZFUlNJT04pIDsNCiAgICAgICAgdmVyc2lvbi10 YWcgPSBbIE1BVENIICJeKFteLl0rKVsuXShbXi5dKykiIDogJCh2ZXJzaW9uLW51bWJlclsx XSkgXSA7DQogICAgICAgIHZlcnNpb24tdGFnID0gJCh2ZXJzaW9uLXRhZzpKPSJfIikgOw0K ICAgIH0NCiAgICANCiAgICB0YWdzICs9ICQodG9vbHNldC10YWc6Sj0pIDsNCiAgICB0YWdz ICs9ICQodGhyZWFkLXRhZzpKPSkgOw0KICAgIHRhZ3MgKz0gJChydW50aW1lLXRhZzpKPSkg Ow0KICAgIHRhZ3MgKz0gJCh2ZXJzaW9uLXRhZykgOw0KICAgIA0KICAgIGlmICQodGFncykN CiAgICB7DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICQocHJvcGVydGllcykg Ow0KICAgIH0NCn0NCg0KIyBSZWN1cnNpdmUgdmVyc2lvbiBvZiBHTE9CLiBCdWlsZHMgdGhl IGdsb2Igb2YgZmlsZXMgd2hpbGUNCiMgYWxzbyBzZWFyY2hpbmcgaW4gdGhlIHN1YmRpcmVj dG9yaWVzIG9mIHRoZSBnaXZlbiByb290Lg0KIw0KcnVsZSBnbG9iLXRyZWUgKCByb290IDog cGF0dGVybnMgKiApDQp7DQogICAgbG9jYWwgZSA7DQogICAgbG9jYWwgZiA9IFsgR0xPQiAk KHJvb3QpIDogJChwYXR0ZXJucykgXSA7DQogICAgbG9jYWwgZmlsZXMgOw0KICAgIGZvciBl IGluICQoZikNCiAgICB7DQogICAgICAgIGlmICQoZTpEPSkgIT0gQ1ZTIHsgZmlsZXMgKz0g JChlKSA7IH0NCiAgICB9DQogICAgbG9jYWwgZCA9IFsgZGlmZmVyZW5jZSBbIEdMT0IgJChy b290KSA6ICogXSA6ICQoZmlsZXMpIF0gOw0KICAgIGZvciBlIGluICQoZCkNCiAgICB7DQog ICAgICAgIGlmICEgKCAkKGU6RD0pIGluIC4gLi4gKSB7IGZpbGVzICs9IFsgZ2xvYi10cmVl ICQoZSkgOiAkKHBhdHRlcm5zKSBdIDsgfQ0KICAgIH0NCiAgICByZXR1cm4gJChmaWxlcykg Ow0KfQ0KDQpydWxlIHVubGVzcyAoIHRlc3QgKiA6IG5vLXZhbHVlICogOiB5ZXMtdmFsdWUg KiApDQp7IGlmICEgJCh0ZXN0KSB7IHJldHVybiAkKG5vLXZhbHVlKSA7IH0gZWxzZSB7IHJl dHVybiAkKHllcy12YWx1ZSkgOyB9IH0NCg0KcnVsZSBjb25kICggdGVzdCAqIDogeWVzLXZh bHVlICogOiBuby12YWx1ZSAqICkNCnsgaWYgJCh0ZXN0KSB7IHJldHVybiAkKHllcy12YWx1 ZSkgOyB9IGVsc2UgeyByZXR1cm4gJChuby12YWx1ZSkgOyB9IH0NCg0KIyBJZiB0aGUgdG9v bHNldCBtYXRjaGVzIHRoZSBnaXZlbiByZWdleCBwYXR0ZXJuLCBtb2RpZnkgdGhlDQojIHN1 YnZhcmlhbnQtcGF0aCBhbmQgcHJvcGVydGllcyBmb3Igc3RhdGljIGxpbmtpbmcNCnJ1bGUg Zm9yY2UtTlQtc3RhdGljLWxpbmsgKCBwYXR0ZXJuIDogdG9vbHNldCA6IHN1YnZhcmlhbnQt cGF0aCBwcm9wZXJ0aWVzICogKQ0Kew0KICAgIGlmICAkKE5UKSAmJiBbIE1BVENIICQocGF0 dGVybikgOiAkKHRvb2xzZXQpIF0NCiAgICB7DQogICAgICAgIHByb3BlcnRpZXMgPQ0KICAg ICAgICAgIFsgZGlmZmVyZW5jZSAkKHByb3BlcnRpZXMpIDogPHJ1bnRpbWUtbGluaz5keW5h bWljIF0NCiAgICAgICAgICA8cnVudGltZS1saW5rPnN0YXRpYw0KICAgICAgICAgIDsNCiAg ICB9DQoNCiAgICByZXR1cm4gJChzdWJ2YXJpYW50LXBhdGgpICQocHJvcGVydGllcykgOw0K fQ0KDQojIFN0aWNrIHRoaXMgcnVsZSBuYW1lIGluIHlvdXIgcmVxdWlyZW1lbnRzIGlmIHlv dSBhcmUgYnVpbGRpbmcgY29kZQ0KIyB3aGljaCByZXF1aXJlcyBsb2NhbGUgc3VwcG9ydC4g IEl0IGhhbmRsZXMgdGhlIG1ldHJvd2Vya3Mtc3BlY2lmaWMNCiMgY2FzZSB0aGF0IGxvY2Fs ZSBzdXBwb3J0IGRlbWFuZHMgdGhlIHN0YXRpYyB2ZXJzaW9uIG9mIHRoZSBydW50aW1lDQoj IGxpYnJhcnkuDQpydWxlIHN0ZDo6bG9jYWxlLXN1cHBvcnQgKCB0b29sc2V0IHZhcmlhbnQg OiBzdWJ2YXJpYW50LXBhdGggcHJvcGVydGllcyAqICkNCnsNCiAgICByZXR1cm4gWyANCiAg ICAgIGZvcmNlLU5ULXN0YXRpYy1saW5rIC4qKG1ldHJvd2Vya3N8Y3dwcm98Y3cpLiogDQog ICAgICAgIDogJCh0b29sc2V0KSA6ICQoc3VidmFyaWFudC1wYXRoKSAkKHByb3BlcnRpZXMp DQogICAgICAgICAgXSA7DQp9DQoNCiMgU3RpY2sgdGhpcyBydWxlIG5hbWUgaW4geW91ciBy ZXF1aXJlbWVudHMgaWYgeW91IGFyZSBidWlsZGluZyBjb2RlDQojIHdoaWNoIHJlcXVpcmVz IGZhY2V0IHN1cHBvcnQuICBJdCBoYW5kbGVzIHRoZSBpbnRlbC13aW4zMi1zcGVjaWZpYw0K IyBjYXNlIHRoYXQgZmFjZXQgc3VwcG9ydCBzZWVtcyB0byBkZW1hbmQgdGhlIHN0YXRpYyB2 ZXJzaW9uIG9mIHRoZQ0KIyBydW50aW1lIGxpYnJhcnkuDQpydWxlIHN0ZDo6ZmFjZXQtc3Vw cG9ydCAoIHRvb2xzZXQgdmFyaWFudCA6IHN1YnZhcmlhbnQtcGF0aCBwcm9wZXJ0aWVzICog KQ0Kew0KICAgIHJldHVybiBbIA0KICAgICAgZm9yY2UtTlQtc3RhdGljLWxpbmsgLiooaW50 ZWwpLiogDQogICAgICAgIDogJCh0b29sc2V0KSA6ICQoc3VidmFyaWFudC1wYXRoKSAkKHBy b3BlcnRpZXMpDQogICAgICAgICAgXSA7DQp9DQoNCiMgbG9hZCB0aGUgc3BlY2lmaWVkIG1v ZHVsZXMgaWYgdGhleSBoYXZlbid0IGJlZW4gbG9hZGVkIGFscmVhZHkuICBJZg0KIyB0aGUg bW9kdWxlIGhhcyBubyBzdWZmaXgsICIuamFtIiBpcyBhcHBlbmRlZC4gIElmIHRoZSBtb2R1 bGUgbmFtZSBpcw0KIyBwcmVwZW5kZWQgd2l0aCBhIHBhdGgsIGl0IGlzIHNvdWdodCBpbiB0 aGF0IGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZQ0KIyBjdXJyZW50IEphbWZpbGUsIG90aGVy d2lzZSBpdCBpcyBzb3VnaHQgaW4gQk9PU1RfQlVJTERfUEFUSC4NCnJ1bGUgaW1wb3J0ICgg bW9kdWxlcyArICkNCnsNCiAgICBmb3IgbG9jYWwgbmFtZSBpbiAkKG1vZHVsZXMpDQogICAg ew0KICAgICAgICBsb2NhbCBzZWFyY2ggPSAkKEJPT1NUX0JVSUxEX1BBVEgpIDsgICMgc2Vh cmNoIGhlcmUNCiAgICAgICAgbG9jYWwgbiA9ICQobmFtZTpEPSkgOyAgICAgICAgICAgICAg ICAjIGZvciB0aGlzIGJhc2VuYW1lDQogICAgICAgIGlmICEgJChuOlMpDQogICAgICAgIHsN CiAgICAgICAgICAgIG4gPSAkKG4pLmphbSA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAg ICAgICMgaWYgYSBkaXJlY3Rvcnkgd2FzIHNwZWNpZmllZA0KICAgICAgICBsb2NhbCBkID0g JChuYW1lOkQpIDsNCiAgICAgICAgaWYgJChkKQ0KICAgICAgICB7DQogICAgICAgICAgICAj IE5vcm1hbGl6ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgaW52b2NhdGlvbiBkaXJlY3Rv cnkuDQogICAgICAgICAgICBuID0gWyByb290LXBhdGhzICQobikgOiAkKGQ6Uj0kKFNVQkRJ UikpIF0gOw0KICAgICAgICAgICAgbiA9IFsgcm9vdC1wYXRocyAkKG4pIDogWyBQV0QgXSBd IDsNCiAgICAgICAgICAgIHNlYXJjaCA9IDsgIyBubyBzZWFyY2hpbmc7IHRoZSBwYXRoIHdh cyBzcGVjaWZpZWQuDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIFNFQVJDSCBvbiAk KG4pID0gJChzZWFyY2gpIDsNCiAgICAgICAgDQogICAgICAgIGlmICEgJCgkKG4pLmluY2x1 ZGVkKQ0KICAgICAgICB7DQogICAgICAgICAgICBpbmNsdWRlICQobikgOw0KICAgICAgICAg ICAgJChuKS5pbmNsdWRlZCA9IHRydWUgOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQojIERl Y2xhcmUgYSBwcm9qZWN0J3MgaW5zdGFsbGFibGUgc291cmNlcyAocmF3IHNvdXJjZXMgb3Ig YnVpbHQgdGFyZ2V0cykNCiMNCnJ1bGUgaW5zdGFsbCAoDQogICAgbmFtZSAjIFRoZSBuYW1l IHRvIHJlZmVyIHRvIHRoZXNlIHNldCBvZiB0YXJnZXRzL3NvdXJjZXMuDQogICAgdHlwZSAj IFRoZSB0eXBlIG9mIHRhcmdldHMvc291cmNlcywgYW5kIHRoZXJlZm9yZSB0aGVpciBpbnN0 YWxsIGxvY2F0aW9uLg0KICAgIDogc291cmNlcyArICMgVGhlIHRhcmdldHMgYW5kIHNvdXJj ZXMgdG8gbWFrZSBhdmFpbGFibGUgZm9yIGluc3RhbGxhdGlvbi4NCiAgICA6IG9wdGlvbnMg Kg0KICAgICkNCnsNCiAgICBpZiAkKGdJTlNUQUxMX1NPVVJDRVMpDQogICAgew0KICAgICAg ICBsb2NhbCBfaW5jbHVkZV8gOw0KICAgICAgICBpZiAkKGdJTlNUQUxMX0lOQ0xVU0lPTlMp DQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICQobmFtZSkgaW4gJChnSU5TVEFMTF9JTkNM VVNJT05TKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIF9pbmNsdWRlXyA9IHRy dWUgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgISAkKG5h bWUpIGluICQoZ0lOU1RBTExfRVhDTFVTSU9OUykNCiAgICAgICAgew0KICAgICAgICAgICAg X2luY2x1ZGVfID0gdHJ1ZSA7DQogICAgICAgIH0NCiAgICAgICAgaWYgJChfaW5jbHVkZV8p DQogICAgICAgIHsNCiAgICAgICAgICAgIGxvY2FsIHJlc3VsdCA7DQogICAgICAgICAgICBm b3IgbG9jYWwgc291cmNlIGluICQoc291cmNlcykNCiAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICByZXN1bHQgKz0gWyB0YXJnZXQtcGF0aC1vZiAkKHNvdXJjZSkgXSA7DQogICAg ICAgICAgICB9DQogICAgICAgICAgICBpZiAhICQocmVzdWx0KSBpbiAkKGdJTlNUQUxMX1NP VVJDRVMoJCh0eXBlKSkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZ0lOU1RB TExfU09VUkNFUygkKHR5cGUpKSArPSAkKHJlc3VsdCkgOw0KICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgcmV0dXJuICQocmVzdWx0KSA7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCiMN CnJ1bGUgaW5zdGFsbC1zdWJpbmNsdWRlICggamFtZmlsZXMgKyA6IG9wdGlvbnMgKiApDQp7 DQogICAgbG9jYWwgZ0lOU1RBTExfU09VUkNFUyA9IFRSVUUgOw0KICAgIGxvY2FsIGdJTl9M SUJfSU5DTFVERSA9IFRSVUUgOw0KICAgIGxvY2FsIGdJTlNUQUxMX0VYQ0xVU0lPTlMgPSBb IGdldC12YWx1ZXMgPGV4Y2x1ZGU+IDogJChvcHRpb25zKSBdIDsNCiAgICBsb2NhbCBnSU5T VEFMTF9JTkNMVVNJT05TID0gWyBnZXQtdmFsdWVzIDxpbmNsdWRlPiA6ICQob3B0aW9ucykg XSA7DQogICAgDQogICAgZm9yIGxvY2FsIGphbWZpbGUgaW4gJChqYW1maWxlcykNCiAgICB7 DQogICAgICBsb2NhbCBzdWItamFtZmlsZSA9IFsgcmVsYXRpdmUtcGF0aCAkKGphbWZpbGUp IF0gOw0KICAgICAgZGVwZW5kZW50LWluY2x1ZGUgJChzdWItamFtZmlsZSkgOw0KICAgIH0N Cn0NCg0KIyBnZXQgcHJvamVjdCBpbnN0YWxsYXRpb24gc291cmNlcyBvZiBhIGdpdmVuIHR5 cGUNCnJ1bGUgaW5zdGFsbC1zb3VyY2VzICggdHlwZSApDQp7DQogICAgcmV0dXJuICQoZ0lO U1RBTExfU09VUkNFUygkKHR5cGUpKSkgOw0KfQ0KDQpydWxlIGNvbW1vbi1uYW1lcyAoICkN CnsNCiAgICByZXR1cm4gY29tbW9uLXZhcmlhbnQtdGFnIDsNCn0NCnJ1bGUgY29tbW9uLXN0 YWdlLXRhZyAoIHRvb2xzZXQgdmFyaWFudCA6IHN1YnZhcmlhbnQtcGF0aCBwcm9wZXJ0aWVz ICogKQ0Kew0KICAgIHJldHVybiBbIGNvbW1vbi12YXJpYW50LXRhZyAkKHRvb2xzZXQpICQo dmFyaWFudCkgOiAkKHN1YnZhcmlhbnQtcGF0aCkgJChwcm9wZXJ0aWVzKSBdIDsNCn0NCg0K IyBFbmZvcmNlcyB0b29sc2V0IGxldmVsIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhZGRlZCB0 byBhbGwgdGFyZ2V0cy4NCnJ1bGUgdG9vbHNldDo6cmVxdWlyZW1lbnRzICggdG9vbHNldCB2 YXJpYW50IDogc3VidmFyaWFudC1wYXRoIHByb3BlcnRpZXMgKiApDQp7DQogICAgbG9jYWwg cmVxdWlyZW1lbnRzID0gOw0KICAgIHN3aXRjaCAkKHRvb2xzZXQpDQogICAgew0KICAgICAg ICBjYXNlIGN3cHJvOCogOg0KICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVu dGltZSBvbmx5IGNvbWVzIGluIHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAg ICAgICBpZiA8cnVudGltZS1saW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVp cmVtZW50cyArPSA8dGhyZWFkaW5nPm11bHRpIDsgfQ0KICAgICAgICB9DQogICAgICAgIGNh c2UgY3dwcm85KiA6DQogICAgICAgIHsNCiAgICAgICAgICAgICMgZHluYW1pYyBydW50aW1l IG9ubHkgY29tZXMgaW4gdGhlIG11bHRpLXRocmVhZGluZyBmbGF2b3INCiAgICAgICAgICAg IGlmIDxydW50aW1lLWxpbms+ZHluYW1pYyBpbiAkKHByb3BlcnRpZXMpIHsgcmVxdWlyZW1l bnRzICs9IDx0aHJlYWRpbmc+bXVsdGkgOyB9DQogICAgICAgIH0NCiAgICAgICAgY2FzZSBj dyogOg0KICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVudGltZSBvbmx5IGNv bWVzIGluIHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAgICAgICBpZiA8cnVu dGltZS1saW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVpcmVtZW50cyArPSA8 dGhyZWFkaW5nPm11bHRpIDsgfQ0KICAgICAgICB9DQogICAgICAgIGNhc2UgbXN2YyogOg0K ICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVudGltZSBvbmx5IGNvbWVzIGlu IHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAgICAgICBpZiA8cnVudGltZS1s aW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVpcmVtZW50cyArPSA8dGhyZWFk aW5nPm11bHRpIDsgfQ0KICAgICAgICAgICAgaWYgWyBNQVRDSCAuKihzdGxwKS4qIDogJCh0 b29sc2V0KSBdIHx8DQogICAgICAgICAgICAgICAgWyBNQVRDSCAuKihzdGxwKS4qIDogJChw cm9wZXJ0aWVzOkcpIF0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAjIFNUTFBv cnQgZG9lc24ndCBoYXZlIGFueSBzaW5nbGUtdGhyZWFkZWQgYnVpbGRzLCBzbyB3ZSdyZSBn b2luZw0KICAgICAgICAgICAgICAgICMgdG8gZm9yY2UgYWxsIHN1Y2ggdGFyZ2V0cyB0byBi ZSBidWlsdCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuDQogICAgICAgICAgICAgICAgIyBU aGlzIGlzIGVzc2VudGlhbGx5IGEgdXNhZ2UtcmVxdWlyZW1lbnQgb24gdGhlIHN0bHBvcnQg bGlicmFyeS4NCiAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgKz0gPHRocmVhZGluZz5t dWx0aSA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2FzZSB2YyogOg0K ICAgICAgICB7DQogICAgICAgICAgICAjIGR5bmFtaWMgcnVudGltZSBvbmx5IGNvbWVzIGlu IHRoZSBtdWx0aS10aHJlYWRpbmcgZmxhdm9yDQogICAgICAgICAgICBpZiA8cnVudGltZS1s aW5rPmR5bmFtaWMgaW4gJChwcm9wZXJ0aWVzKSB7IHJlcXVpcmVtZW50cyArPSA8dGhyZWFk aW5nPm11bHRpIDsgfQ0KICAgICAgICAgICAgaWYgWyBNQVRDSCAuKihzdGxwKS4qIDogJCh0 b29sc2V0KSBdIHx8DQogICAgICAgICAgICAgICAgWyBNQVRDSCAuKihzdGxwKS4qIDogJChw cm9wZXJ0aWVzOkcpIF0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAjIFNUTFBv cnQgZG9lc24ndCBoYXZlIGFueSBzaW5nbGUtdGhyZWFkZWQgYnVpbGRzLCBzbyB3ZSdyZSBn b2luZw0KICAgICAgICAgICAgICAgICMgdG8gZm9yY2UgYWxsIHN1Y2ggdGFyZ2V0cyB0byBi ZSBidWlsdCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuDQogICAgICAgICAgICAgICAgIyBU aGlzIGlzIGVzc2VudGlhbGx5IGEgdXNhZ2UtcmVxdWlyZW1lbnQgb24gdGhlIHN0bHBvcnQg bGlicmFyeS4NCiAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgKz0gPHRocmVhZGluZz5t dWx0aSA7DQogICAgICAgICAgICAgICAgIyBTVExQb3J0IGRvZXNuJ3Qgc3VwcG9ydCA8c3Rs cG9ydC1pb3N0cmVhbT5vZmYgd2l0aCB2YzcgYW5kIHZjOC4NCiAgICAgICAgICAgICAgICAj IFRoaXMgaXMgZXNzZW50aWFsbHkgYSB1c2FnZS1yZXF1aXJlbWVudCBvbiB0aGUgc3RscG9y dCBsaWJyYXJ5Lg0KICAgICAgICAgICAgICAgIHN3aXRjaCAkKHRvb2xzZXQpDQogICAgICAg ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIHZjNyogOiByZXF1aXJlbWVu dHMgKz0gPHN0bHBvcnQtaW9zdHJlYW0+b24gOw0KICAgICAgICAgICAgICAgICAgICBjYXNl IHZjOCogOiByZXF1aXJlbWVudHMgKz0gPHN0bHBvcnQtaW9zdHJlYW0+b24gOw0KICAgICAg ICAgICAgICAgICAgICBjYXNlIHZjLTcqIDogcmVxdWlyZW1lbnRzICs9IDxzdGxwb3J0LWlv c3RyZWFtPm9uIDsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSB2Yy04KiA6IHJlcXVpcmVt ZW50cyArPSA8c3RscG9ydC1pb3N0cmVhbT5vbiA7DQogICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNhc2UgaW50ZWwtd2luMzIqIDoNCiAg ICAgICAgew0KICAgICAgICAgICAgIyBkeW5hbWljIHJ1bnRpbWUgb25seSBjb21lcyBpbiB0 aGUgbXVsdGktdGhyZWFkaW5nIGZsYXZvcg0KICAgICAgICAgICAgaWYgPHJ1bnRpbWUtbGlu az5keW5hbWljIGluICQocHJvcGVydGllcykgeyByZXF1aXJlbWVudHMgKz0gPHRocmVhZGlu Zz5tdWx0aSA7IH0NCiAgICAgICAgfQ0KICAgICAgICBjYXNlIGl3KiA6DQogICAgICAgIHsN CiAgICAgICAgICAgICMgZHluYW1pYyBydW50aW1lIG9ubHkgY29tZXMgaW4gdGhlIG11bHRp LXRocmVhZGluZyBmbGF2b3INCiAgICAgICAgICAgIGlmIDxydW50aW1lLWxpbms+ZHluYW1p YyBpbiAkKHByb3BlcnRpZXMpIHsgcmVxdWlyZW1lbnRzICs9IDx0aHJlYWRpbmc+bXVsdGkg OyB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmVxdWlyZW1lbnRzID0gWyB1bmlxdWUgJChy ZXF1aXJlbWVudHMpIF0gOw0KICAgIGxvY2FsIGZyZWUtZmVhdHVyZS1yZXF1aXJlbWVudHMg PSBbIHNlZ3JlZ2F0ZS1mcmVlLXByb3BlcnRpZXMgcHJvcGVydGllcyBdIDsNCiAgICBwcm9w ZXJ0aWVzID0NCiAgICAgICAgWyBzb3J0DQogICAgICAgICAgICBbIGRpZmZlcmVuY2UgJChw cm9wZXJ0aWVzKSA6IFsgZ2V0LXByb3BlcnRpZXMgJChyZXF1aXJlbWVudHM6RykgOiAkKHBy b3BlcnRpZXMpIF0gXQ0KICAgICAgICAgICAgJChyZXF1aXJlbWVudHMpDQogICAgICAgICAg ICBdDQogICAgICAgICQoZnJlZS1mZWF0dXJlLXJlcXVpcmVtZW50cykNCiAgICAgICAgOw0K ICAgIHJldHVybiAkKHN1YnZhcmlhbnQtcGF0aCkgJChwcm9wZXJ0aWVzKSA7DQp9DQo= --------------070906060407020908080708--
Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk