nroff
[email protected] ("Nathan Thompson") Tue, 8 Aug 2006 10:16:18 -0400
| Newsgroups | perl.ppt |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_13296_2457140.1155046578388 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Half-expecting this to bounce. Years ago I submitted this for the power tools project but it was dropped. I stumbled across this now and I'm trying again - I think it's amusing. See attached. Thanks. ------=_Part_13296_2457140.1155046578388 Content-Type: application/octet-stream; name=nroff Content-Transfer-Encoding: base64 X-Attachment-Id: f_eqmcv8bi Content-Disposition: attachment; filename="nroff" IyFwZXJsIC13DQojIFdobyB3b3VsZCB3cml0ZSBhIHZlcnNpb24gb2YgbnJvZmYgaW4gUGVybD8N CiMgQ29weXJpZ2h0IDIwMDAgYnkgTmF0aGFuIFNjb3R0IFRob21wc29uIDxxdWltYnkgYXQgY2l0 eS1uZXQgZG90IGNvbT4uDQojIFlvdSBtYXkgZm9sZCwgc3BpbmRsZSBhbmQgbXV0aWxhdGUgYWNj b3JkaW5nIHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UNCiMgKHNlZSBodHRwOi8vd3d3LmdudS5v cmcvIGZvciBkZXRhaWxzKS4NCiMgTWFudWFsIHBhZ2UgYXQgYm90dG9tLg0KIw0KIyAkSWQ6IG4g MS4yIDIwMDAvMDcvMjYgMjA6MzE6MzggbnRob21wc28gRXhwIG50aG9tcHNvICQNCiMNCiMgSSBo YXZlIHN0cml2ZW4gdG8gcmVtYWluIHRydWUgdG8gdHJvZmYncyAicmViYXJiYXRpdmUgaW5wdXQg c3ludGF4LA0KIyBteXN0ZXJpb3VzIGFuZCB1bmRvY3VtZW50ZWQgcHJvcGVydGllcyBpbiBzb21l IGFyZWFzLA0KIyBhbmQgYSB2b3JhY2lvdXMgYXBwZXRpdGUgZm9yIGNvbXB1dGVyIHJlc291cmNl cyIuDQojDQojIFBvcnRpbmc6DQojICRNYWNyb1BhdGggaXMgdGhlIHN5c3RlbSBwYXRoIHRvIHRo ZSBzdGFuZGFyZCBtYWNybyBmaWxlcw0KIyBpbmNsdWRlZCBieSB0aGUgLW0gc3dpdGNoICguZS5n LiAtbWFuIGluY2x1ZGVzICcvdXNyL2xpYi90bWFjL3RtYWMuYW4nKS4NCiMgV2l0aCBsdWNrIGZl dyBvdGhlciBzeXN0ZW0gZGVwZW5kZW5jaWVzIGV4aXN0Lg0KIw0KIyBDaGFyYWN0ZXIgU2V0Og0K IyBBbnkgOC1iaXQgY2hhcmFjdGVyIHNldCBzaG91bGQgYmUgdXNhYmxlLg0KIyBZb3UgY2FuIGNo YW5nZSB0aGUgJExFQURFUl9DSEFSICgiXDAwMSIsIFNPSCBpbiBBU0NJSSkuDQojIFJ1ZGltZW50 YXJ5IFVuaWNvZGUgc3VwcG9ydCBpcyBlbmFibGVkIGJ5IHRoZSAtdSBzd2l0Y2gsDQojIHdoaWNo IGZvcmNlcyB0aGUgaW5wdXQgZmlsZXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgVVRGLTguDQojDQoj IE91dHB1dCBEZXZpY2VzOg0KIyBUaGUgb3V0cHV0IGRldmljZSBpcyBqdXN0IGEgcGFja2FnZSBs b2FkZWQgdmlhIHRoZSAnLVQnIHN3aXRjaA0KIyBzbyBuZXcgZGV2aWNlcyBjYW4gYmUgZWFzaWx5 IGFkZGVkLiAgVGhlIGRlZmF1bHQgaXMgcGxhaW4gdGV4dA0KIyAoc2VlIHRoZSBPdXRwdXQgcGFj a2FnZSBpbiB0aGUgX19EQVRBX18gc2VjdGlvbi4pDQojIFN1cHBvcnQgZm9yIHRoZSBNZXJnZW50 aGFsZXIgTGlub3Ryb24gMjAyIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UuDQojDQojIFRvIERvOg0K IyAqIEEgZmV3IG1vcmUgcmVxdWVzdHMgYW5kIGVzY2FwZXMsIGdlbmVyYWxseSBlYXN5Lg0KIyAq IEdyb2ZmIGNvbXBhdGliaWxpdHkgLSB0aGlzIGlzIGEgYml0IGhhcmRlci4NCiMgKiBFcnJvciBj aGVja2luZyBhbmQgbWVzc2FnZXMuICBQcmludCBiYWNrdHJhY2UuDQojICogRmFzdGVyIHBhcnNp bmcuICBPbmUgcmVhc29uIHdoeSBsaW5lLW9yaWVudGVkIHBhcnNpbmcgaXMgd2llcmQgaXMgdGhh dA0KIyAgIHBhcnNlZCBtb3Rpb25zLCBmb250LWlmaWVkIGNoYXJhY3RlcnMgYW5kIGNvbnRyb2wg c2VxdWVuY2VzIGFyZQ0KIyAgIGZlZCBiYWNrIGludG8gdGhlIGlucHV0IGxpbmVzIHZpYSBkaXZl cnNpb25zLg0KIyAgIFNpbmNlIFBlcmwgbm93IHN1cHBvcnRzIHdpZGUgKGludC1zaXplZCkgY2hh cnMsIHRoZXNlIHRoaW5ncyBjb3VsZCBiZQ0KIyAgIGVuY29kZWQgaW4gd2lkZSBjaGFycyBzaW1p bGFyIHRvIHRoZSBzY2hlbWUgaW4gdGhlIG9yaWdpbmFsIHRyb2ZmLA0KIyAgIG1ha2luZyBhbGxv d2FuY2UgdG8gYWNjb21vZGF0ZSAxNi1iaXQgVW5pY29kZSBjaGFyYWN0ZXJzLg0KIyAqIFN1cHBv cnQgZm9yIGZ1bGwgdHJvZmYgLSBhbiBhcHByb3ByaWF0ZSBQb3N0U2NyaXB0IG91dHB1dCBkZXZp Y2UgYW5kDQojICAgc29tZSBjaGFuZ2VzIHRvIHN1cHBvcnQgcHJvcG9ydGlvbmFsIGZvbnRzIGFu ZCB0aGUgbGlrZS4NCg0KdXNlIHN0cmljdDsNCg0KbXkgJE1hY3JvUGF0aCA9ICcvdXNyL2xpYi90 bWFjLyc7ICAgICAjIFdoZXJlIHRvIGZpbmQgdGhlICctbScgc3dpdGNoIG1hY3Jvcw0KbXkgJE91 dHB1dERldmljZSA9ICdscCc7DQpteSAkR3JvZmZDb21wYXRpYmxlOyAgICAgICAgICMgW2ZpeF0g YSBmYWlyIGFtb3VudCBvZiB3b3JrIG5lZWRlZCB5ZXQgZm9yIHRoaXMNCm15ICRGb3JjZVVuaWNv ZGU7DQpteSAkRGVidWc7DQpteSAkTEVBREVSX0NIQVIgPSAiXDAwMSI7DQpteSAkRVNDQVBFX0NI QVIgPSAnXFwnOw0KbXkgJEVTQ0FQRSA9IHF1b3RlbWV0YSAkRVNDQVBFX0NIQVI7DQpteSAkQ09O VFJPTCA9IHF1b3RlbWV0YSAnLic7DQpteSAkQUxUQ09OVFJPTCA9IHF1b3RlbWV0YSAnXCcnOw0K bXkgJE9IWVBIRU4gPSAnJzsNCg0KIyBOdW1iZXJlZCBzZWN0aW9ucyBiZWxvdyByZWZlciB0byBz ZWN0aW9ucyBpbiB0aGUgVHJvZmYgVXNlcidzIE1hbnVhbA0KIyAoSm9zZXBoIEYuIE9zc2FubmEs IEJyaWFuIFcuIEtlcm5pZ2hhbiwgMTk5Mik7IGxvb2sgdGhlcmUgZm9yIGhpbnRzLg0KDQojIC0t LSAxLjMgTnVtZXJpY2FsIFBhcmFtZXRlciBJbnB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCg0KcGFja2FnZSBQYXJhbTsNCg0KIyBBIFBhcmFtIGlzIHVzZWQg Zm9yIHRoZSBwYXJhbWV0ZXJzIG9mIGJ1aWx0LWluIHJlcXVlc3RzLg0KIyBVc3VhbGx5IHRoZXNl IGFyZSBzY2FsZWQgbnVtYmVycywgYW5kIGlmIG5vIG5ldyB2YWx1ZSBpcyBzcGVjaWZpZWQsDQoj IHJldmVydCB0byB0aGUgcHJldmlvdXMgdmFsdWUgb3IgdGhlIGRlZmF1bHQuDQojIFNjYWxpbmcg aXMgYWx3YXlzIGRvbmUgaWYgeW91IHNwZWNpZnkgZGVmYXVsdCBVTklUUy4NCiMgSWYgbm8gVU5J VFMgYXJlIHNwZWNpZmllZCwgbm9uLW51bWVyaWMgdmFsdWVzIGNhbiBiZSB1c2VkLg0KIyBJZiBh IERFRkFVTFQgaXMgZ2l2ZW4sIHRoYXQgdmFsdWUgaXMgdXNlZCB3aGVuIHJldmVydGluZyBpbnN0 ZWFkIG9mIHRoZQ0KIyBwcmV2aW91cyB2YWx1ZS4NCiMgRXhhbXBsZTogUGFyYW0tPm5ldyggVkFM VUUgPT4gJzFpJywgVU5JVFMgPT4gJ3YnLCBERUZBVUxUID0+ICcxaScgKTsNCg0Kc3ViIG5ldw0K ew0KICAgIG15ICRjbGFzcyA9IHNoaWZ0Ow0KICAgIG15ICRzZWxmID0gYmxlc3MoIHsgQF8gfSwg KHJlZigkY2xhc3MpIHx8ICRjbGFzcykgKTsNCiAgICAkc2VsZi0+e1ZBTFVFfSA9IFNjYWxlOjpF eHByKCAkc2VsZi0+e1ZBTFVFfSwgJHNlbGYtPntVTklUU30gKQ0KICAgICAgICBpZiBkZWZpbmVk ICRzZWxmLT57VU5JVFN9Ow0KICAgICRzZWxmLT57REVGQVVMVH0gPSBTY2FsZTo6RXhwciggJHNl bGYtPntERUZBVUxUfSwgJHNlbGYtPntVTklUU30gKQ0KICAgICAgICBpZiBkZWZpbmVkKCAkc2Vs Zi0+e0RFRkFVTFR9ICkgYW5kIGRlZmluZWQoICRzZWxmLT57VU5JVFN9ICk7DQogICAgJHNlbGYt PntPTER9ID0gJHNlbGYtPntWQUxVRX07DQogICAgJHNlbGY7DQp9DQoNCnN1YiBWYWx1ZSB7ICRf WzBde1ZBTFVFfSB9DQpzdWIgQ2xvbmUgeyBibGVzcyggeyAleyRfWzBdfSB9LCByZWYoJF9bMF0p ICkgfQ0KDQojIFJldmVydGluZyBzYXZlcyB0aGUgY3VycmVudCB2YWx1ZSwgY2hhbmdlcyB0byBk ZWZhdWx0IG9yIHByZXZpb3VzIHZhbHVlDQoNCnN1YiBSZXZlcnQNCnsNCiAgICBteSAkc2VsZiA9 IHNoaWZ0Ow0KICAgICggJHNlbGYtPntPTER9LCAkc2VsZi0+e1ZBTFVFfSApID0gKCAkc2VsZi0+ e1ZBTFVFfSwNCiAgICAgICAgKCBkZWZpbmVkKCRzZWxmLT57REVGQVVMVH0pID8gJHNlbGYtPntE RUZBVUxUfSA6ICRzZWxmLT57T0xEfSApICk7DQp9DQoNCiMgUmV2ZXJ0IGFuZCBhc3N1bWUgYSBu ZXcgdmFsdWUgKGlmIGdpdmVuLikNCg0Kc3ViIFNldA0Kew0KICAgIG15ICRzZWxmID0gc2hpZnQ7 DQogICAgJHNlbGYtPlJldmVydCgpOw0KICAgIGlmICggZGVmaW5lZCAkX1swXSApDQogICAgew0K CSRzZWxmLT57VkFMVUV9ID0gZGVmaW5lZCggJHNlbGYtPntVTklUU30gKQ0KCSAgICAgICAgICAg ICAgID8gU2NhbGU6OkV4cHIoICRfWzBdLCAkc2VsZi0+e1VOSVRTfSApDQoJCSAgICAgICA6ICRf WzBdOw0KICAgIH0NCn0NCg0KIyBJZiB0aGUgbmV3IHZhbHVlIGlzIGV4cGxpY2l0bHkgc2lnbmVk LCBhZGQgaXQgdG8gdGhlIGN1cnJlbnQgdmFsdWUuDQojIE90aGVyd2lzZSB0aGUgbmV3IHZhbHVl IHJlcGxhY2VzIHRoZSBjdXJyZW50IHZhbHVlLg0KDQpzdWIgU2V0T3JBZGQNCnsNCiAgICBteSAk c2VsZiA9IHNoaWZ0Ow0KICAgIG15ICRuID0gc2hpZnQ7DQogICAgJHNlbGYtPlNldCggJG4gKTsN CiAgICAkc2VsZi0+e1ZBTFVFfSArPSAkc2VsZi0+e09MRH0gaWYgZGVmaW5lZCggJG4gKSBhbmQg JG4gPX4gL15bLStdLzsNCn0NCg0KIyAtLS0gMS40IE51bWVyaWNhbCBFeHByZXNzaW9ucyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCnBhY2thZ2UgU2Nh bGU7DQoNCnVzZSB2YXJzIHF3eyAlX3VuaXQgJV9vcCAkT1AgJE5VTSB9Ow0KDQolX3VuaXQgPSAo DQogICAgJ2knID0+IHN1YiB7IHNoaWZ0KCkgKiBPdXRwdXQ6OlJlc29sdXRpb24oKSB9LA0KICAg ICdjJyA9PiBzdWIgeyBzaGlmdCgpICogT3V0cHV0OjpSZXNvbHV0aW9uKCkgKiAxMDAgLyAyNTQg fSwNCiAgICAnUCcgPT4gc3ViIHsgc2hpZnQoKSAqIE91dHB1dDo6UmVzb2x1dGlvbigpIC8gNiB9 LA0KICAgICdtJyA9PiBzdWIgeyBzaGlmdCgpICogRm9udDo6RW1TcGFjZSgpIH0sDQogICAgJ24n ID0+IHN1YiB7IHNoaWZ0KCkgKiBGb250OjpFblNwYWNlKCkgfSwNCiAgICAncCcgPT4gc3ViIHsg c2hpZnQoKSAqIE91dHB1dDo6UmVzb2x1dGlvbigpIC8gNzIgfSwNCiAgICAndScgPT4gc3ViIHsg c2hpZnQoKSB9LA0KICAgICd2JyA9PiBzdWIgeyBzaGlmdCgpICogRW52OjpWKCkgfQ0KKTsNCg0K JV9vcCA9ICgNCiAgICAnKycgID0+IHN1YiB7ICRfWzBdICsgJF9bMV0gfSwNCiAgICAnLScgID0+ IHN1YiB7ICRfWzBdIC0gJF9bMV0gfSwNCiAgICAnKicgID0+IHN1YiB7ICRfWzBdICogJF9bMV0g fSwNCiAgICAnLycgID0+IHN1YiB7ICgkX1sxXSAhPSAwKSA/ICgkX1swXSAvICRfWzFdKSA6IDAg fSwNCiAgICAnJScgID0+IHN1YiB7ICgkX1sxXSAhPSAwKSA/ICgkX1swXSAlICRfWzFdKSA6IDAg fSwNCiAgICAnJicgID0+IHN1YiB7ICEhKCAkX1swXSAmJiAkX1sxXSApIH0sDQogICAgJzonICA9 PiBzdWIgeyAhISggJF9bMF0gfHwgJF9bMV0gKSB9LA0KICAgICc8JyAgPT4gc3ViIHsgISEoICRf WzBdIDwgICRfWzFdICkgfSwNCiAgICAnPicgID0+IHN1YiB7ICEhKCAkX1swXSA+ICAkX1sxXSAp IH0sDQogICAgJz0nICA9PiBzdWIgeyAhISggJF9bMF0gPT0gJF9bMV0gKSB9LA0KICAgICc9PScg PT4gc3ViIHsgISEoICRfWzBdID09ICRfWzFdICkgfSwNCiAgICAnPD0nID0+IHN1YiB7ICEhKCAk X1swXSA8PSAkX1sxXSApIH0sDQogICAgJz49JyA9PiBzdWIgeyAhISggJF9bMF0gPj0gJF9bMV0g KSB9LA0KKTsNCg0Kc3ViIEZyb20NCnsNCiAgICBteSAoJG4sJHUpID0gQF87DQogICAgaW50KCBl eGlzdHMoJF91bml0eyR1fSkgPyAkX3VuaXR7JHV9LT4oJG4pIDogJG4gKTsNCn0NCg0KIyBSb3Vu ZCB0aGUgZ2l2ZW4gcG9zaXRpb24gdG8gYWxsb3dhYmxlIG91dHB1dCBkZXZpY2UgbW90aW9ucy4N Cg0Kc3ViIFJvdW5kSG9yaXpvbnRhbA0Kew0KICAgIG15ICRuID0gc2hpZnQ7DQogICAgJG4gPSBp bnQoICRuICsgT3V0cHV0OjpNaW5Ib3Jpem9udGFsKCkgLyAyICkgLSAoJG4gPCAwKTsNCiAgICAo ICRuIC0gKCAkbiAlIE91dHB1dDo6TWluSG9yaXpvbnRhbCgpICkgKTsNCn0NCg0Kc3ViIFJvdW5k VmVydGljYWwNCnsNCiAgICBteSAkbiA9IHNoaWZ0Ow0KICAgICRuID0gaW50KCAkbiArIE91dHB1 dDo6TWluVmVydGljYWwoKSAvIDIgKSAtICgkbiA8IDApOw0KICAgICggJG4gLSAoICRuICUgT3V0 cHV0OjpNaW5WZXJ0aWNhbCgpICkgKTsNCn0NCg0KIyBFdmFsdWF0ZSBhIG1vdGlvbiBleHByZXNz aW9uICh0aG9zZSBzdGFydGluZyB3aXRoICd8JyBhcmUgYWJzb2x1dGUpLg0KDQpzdWIgVG9Ib3Jp em9udGFsDQp7DQogICAgbXkgKCRuLCR1KSA9IEBfOw0KICAgICggKCAkbiA9fiBzL15cfC8vICkN CiAgICAgPyAoIFJvdW5kSG9yaXpvbnRhbCggRXhwcigkbiwkdSkgKSAtIFBhcnNlOjpIb3Jpem9u dGFsUG9zaXRpb24oKSApDQogICAgIDogUm91bmRIb3Jpem9udGFsKCBFeHByKCRuLCR1KSApICk7 DQp9DQoNCnN1YiBUb1ZlcnRpY2FsDQp7DQogICAgbXkgKCRuLCR1KSA9IEBfOw0KICAgICggKCAk biA9fiBzL15cfC8vICkNCiAgICAgPyAoIFJvdW5kVmVydGljYWwoIEV4cHIoJG4sJHUpICkgLSBE aXZlcnNpb246OlZlcnRpY2FsUG9zaXRpb24oKSApDQogICAgIDogUm91bmRWZXJ0aWNhbCggRXhw cigkbiwkdSkgKSApOw0KfQ0KDQojICRpbnRlcm5hbF91bml0cyA9IEV4cHIoICRleHByZXNzaW9u LCAkZGVmYXVsdF91bml0ICkNCiMgVGhlcmUgaXMgbm8gb3BlcmF0b3IgcHJlY2lkZW5jZSwganVz dCBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24uDQojIElmIG5vIGRlZmF1bHQgdW5pdCBpcyBnaXZl biwgZXhwbGljaXQgdW5pdHMgYXJlIGlnbm9yZWQuDQoNCiRPUCA9ICdbK1wtXC8qXCVcJjpdfFs8 Pj1dPT8nOw0KJE5VTSA9ICdbKy1dP1xkKlwuP1xkKyc7DQoNCnN1YiBFeHByDQp7DQogICAgbXkg KCRlLCRkKSA9IEBfOw0KICAgIHJldHVybiAwIHVubGVzcyBkZWZpbmVkKCRlKSBhbmQgJGUgPX4g L1xkLzsNCiAgICAkZSA9fiBzLyhcZCpcLj9cZCspKFtpY1BtbnB1dl0/KS9Gcm9tKCQxLCQyfHwk ZCkvZWcgaWYgJGQ7DQogICAgJGUgPX4gcy9bQS1aYS16XS8vZzsgICAgICAgICMgeWVwLCBpZ25v cmUgc3B1cmlvdXMgdW5pdHMNCiAgICAxIHdoaWxlICggJGUgPX4gcy9cKCgkTlVNKVwpLyQxL28g fHwNCiAgICAgICAgICAgICAgJGUgPX4gcy8oJE5VTSkoJE9QKSgkTlVNKS8kX29weyQyfS0+KCQx LCQzKS9lbyApOw0KICAgIHJldHVybiAwIHVubGVzcyAkZSA9fiAvXiROVU0kL287DQogICAgaW50 KCAkZSApOw0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnBhY2thZ2UgRW52Ow0KDQojIE1h bnkgcGFyYW1ldGVycyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGVudmlyb25tZW50 Lg0KIyBUaGVyZSBhcmUgb25seSAzIGVudmlyb25tZW50cyAobnVtYmVyZWQgMCwxLDIsIHN1cnBy aXNpbmdseSkNCiMgYW5kIHRoZSBjdXJyZW50IG51bWJlciBpcyBwdXNoZWQgb24gYSBzdGFjay4g IFNlZSB0aGUgLmV2IG1hY3JvLg0KDQpzdWIgQ2hhbmdlVG8NCnsNCiAgICBteSAkbiA9IHNoaWZ0 Ow0KICAgIGlmICggZGVmaW5lZCAkbiBhbmQgJG4gPX4gL15cZC8gKQ0KICAgIHsNCiAgICAgICAg cHVzaCggQEVudjo6X3N0YWNrLCAkbiApIGlmICggJG4gPj0gMCBhbmQgJG4gPD0gMiApOw0KICAg IH0NCiAgICBlbHNpZiAoIEBFbnY6Ol9zdGFjayA+IDEgKQ0KICAgIHsNCiAgICAgICAgcG9wIEBF bnY6Ol9zdGFjazsNCiAgICB9DQogICAgJEVudjo6X2N1cnJlbnQgPSAkRW52OjpfZW52aXJvbm1l bnRbJEVudjo6X3N0YWNrWy0xXV07DQp9DQoNCiMgQVVUT0xPQUQgZ2l2ZXMgdXMgZnVuY3Rpb24t bmFtZSBhY2Nlc3MgdG8gY3VycmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsDQojIGUuZy4gRW52 OjpGb250TmFtZSgpIC4NCg0Kc3ViIEFVVE9MT0FEDQp7DQogICAgZGllICJVbmRlZmluZWQ6ICRF bnY6OkFVVE9MT0FEXG4iIA0KICAgICAgICB1bmxlc3MgZXhpc3RzICRFbnY6Ol9jdXJyZW50LT57 JEVudjo6QVVUT0xPQUR9Ow0KICAgICRFbnY6Ol9jdXJyZW50LT57JEVudjo6QVVUT0xPQUR9ID0g c2hpZnQgaWYgQF87DQogICAgJEVudjo6X2N1cnJlbnQtPnskRW52OjpBVVRPTE9BRH07DQp9DQoN CiMgVGhlIGVudmlyb25tZW50cyB3aWxsIGJlIGluaXRpYWxpemVkIGFmdGVyIHRoZSBvdXRwdXQg ZGV2aWNlIGlzIGxvYWRlZCwNCiMgc2luY2UgYW55IHNjYWxlZCB2YWx1ZXMgZGVwZW5kIG9uIHRo ZSBkZXZpY2UgcmVzb2x1dGlvbi4NCg0Kc3ViIEluaXQNCnsNCiAgICBmb3JlYWNoICggMCwxLDIg KQ0KICAgIHsNCiAgICAgICAgJEVudjo6X2Vudmlyb25tZW50WyRfXSA9IHsNCiAgICAgICAgJ0Vu djo6Rm9udE5hbWUnICAgICAgPT4gUGFyYW0tPm5ldyggVkFMVUUgPT4gJ1InICksDQogICAgICAg ICdFbnY6OlRpdGxlTGVuZ3RoJyAgID0+IFBhcmFtLT5uZXcoIFZBTFVFID0+ICc2LjVpJywgVU5J VFMgPT4gJ20nICksDQogICAgICAgICdFbnY6Ok5ld0xpbmVMZW5ndGgnID0+IFBhcmFtLT5uZXco IFZBTFVFID0+ICc2LjVpJywgVU5JVFMgPT4gJ20nICksDQogICAgICAgICdFbnY6Ok5ld0luZGVu dCcgICAgID0+IFBhcmFtLT5uZXcoIFZBTFVFID0+ICcwdScsICAgVU5JVFMgPT4gJ20nICksDQog ICAgICAgICdFbnY6OkluZGVudCcgICAgICAgICAgICAgICAgICAgPT4gMCwNCiAgICAgICAgJ0Vu djo6TmV3VGVtcEluZGVudCcgICAgICAgICAgICA9PiB1bmRlZiwNCiAgICAgICAgJ0Vudjo6VGVt cEluZGVudCcgICAgICAgICAgICAgICA9PiB1bmRlZiwNCiAgICAgICAgJ0Vudjo6TGluZUxlbmd0 aCcgICAgICAgICAgICAgICA9PiBTY2FsZTo6RXhwcignNi41aScsJ3UnKSwNCiAgICAgICAgJ0Vu djo6RWxlbWVudHMnICAgICAgICAgICAgICAgICA9PiBbXSwNCiAgICAgICAgJ0Vudjo6RWxlbWVu dHNMZW5ndGgnICAgICAgICAgICA9PiAwLA0KICAgICAgICAnRW52OjpOb0ZpbGwnICAgICAgICAg ICAgICAgICAgID0+IDAsDQogICAgICAgICdFbnY6Ok5vQWRqdXN0JyAgICAgICAgICAgICAgICAg PT4gMCwNCiAgICAgICAgJ0Vudjo6QWRqdXN0VHlwZScgICAgICAgICAgICAgICA9PiAnYicsDQog ICAgICAgICdFbnY6OklucHV0VHJhcENvdW50JyAgICAgICAgICAgPT4gMCwNCiAgICAgICAgJ0Vu djo6SW5wdXRUcmFwTWFjcm8nICAgICAgICAgICA9PiB1bmRlZiwNCiAgICAgICAgJ0Vudjo6Q2Vu dGVyZWRMaW5lcycgICAgICAgICAgICA9PiAwLA0KICAgICAgICAnRW52OjpUYWJTdG9wcycgICAg ICAgICAgICAgICAgID0+IFtdLA0KICAgICAgICAnRW52OjpWZXJ0aWNhbFNwYWNlJyA9PiBQYXJh bS0+bmV3KCBWQUxVRSA9PiAnMWkvNnUnLCBVTklUUyA9PiAncCcgKSwNCiAgICAgICAgJ0Vudjo6 Q0MnICAgICAgICAgICAgICAgICAgICAgICA9PiAnLicsDQogICAgICAgICdFbnY6OkMyJyAgICAg ICAgICAgICAgICAgICAgICAgPT4gJ1wnJywNCiAgICAgICAgJ0Vudjo6VEMnICAgICAgICAgICAg ICAgICAgICAgICA9PiB1bmRlZiwNCiAgICAgICAgJ0Vudjo6TEMnICAgICAgICAgICAgICAgICAg ICAgICA9PiAnLicsDQogICAgICAgICdFbnY6OlVuZGVybGluZScgICAgICAgICAgICAgICAgPT4g MCwNCiAgICAgICAgJ0Vudjo6U2F2ZWRGb250JyAgICAgICAgICAgICAgICA9PiB1bmRlZiwNCgkn RW52OjpNYXJnaW5DaGFyJyAgICAgICAgICAgICAgID0+IHVuZGVmLA0KICAgICAgICAnRW52OjpN YXJnaW5DaGFyU3BhY2UnICAgICAgICAgID0+IFNjYWxlOjpFeHByKCcwLjJpJywndScpLA0KCSdF bnY6OkxpbmVCdWZmZXInICAgICAgICAgICAgICAgPT4gW10sDQogICAgICAgIH07DQogICAgfQ0K ICAgIENoYW5nZVRvKCAwICk7DQp9DQoNCnN1YiBWIHsgVmVydGljYWxTcGFjZSgpLT5WYWx1ZSgp IH0gICAgIyBBcyBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbmRpcmVjdGlvbg0KDQojIC0tLSAy LiBGb250IGFuZCBDaGFyYWN0ZXIgU2l6ZSBDb250cm9sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCg0KcGFja2FnZSBGb250Ow0KDQpzdWIgSW5pdCAgICAgICAgeyBARm9u dDo6X21vdW50ZWQgPSBPdXRwdXQ6OkZvbnRzKCkgfQ0Kc3ViIE5hbWUgICAgICAgIHsgKCRGb250 OjpfbG9jYWwgfHwgRW52OjpGb250TmFtZSgpKS0+VmFsdWUoKSB9DQpzdWIgTG9jYWxpemUgICAg eyAkRm9udDo6X2xvY2FsID0gRW52OjpGb250TmFtZSgpLT5DbG9uZSgpIH0NCnN1YiBVbmxvY2Fs aXplICB7ICRGb250OjpfbG9jYWwgPSB1bmRlZiB9DQpzdWIgRW1TcGFjZSAgICAgeyBPdXRwdXQ6 OkVtU3BhY2UoIE5hbWUoKSApIH0NCnN1YiBFblNwYWNlICAgICB7IE91dHB1dDo6RW5TcGFjZSgg TmFtZSgpICkgfQ0Kc3ViIENoYXJXaWR0aCAgIHsgT3V0cHV0OjpDaGFyV2lkdGgoIHNoaWZ0KCks IE5hbWUoKSApIH0NCg0Kc3ViIENoYW5nZVRvDQp7DQogICAgbXkgJGZvbnQgPSBzaGlmdDsNCiAg ICBpZiAoICFkZWZpbmVkKCRmb250KSBvciAoJGZvbnQgZXEgJ1AnKSApDQogICAgew0KICAgICAg ICAoJEZvbnQ6Ol9sb2NhbCB8fCBFbnY6OkZvbnROYW1lKCkpLT5SZXZlcnQoKTsNCiAgICB9DQog ICAgZWxzZQ0KICAgIHsNCiAgICAgICAgJGZvbnQgPSAkRm9udDo6X21vdW50ZWRbJGZvbnQtMV0g aWYgKCAkZm9udCA9fiAvXlxkKyQvICk7DQogICAgICAgICRmb250ID0gJ1InIHVubGVzcyAkZm9u dCA9fiAvXltSSUJTXSskLzsNCiAgICAgICAgKCRGb250OjpfbG9jYWwgfHwgRW52OjpGb250TmFt ZSgpKS0+U2V0KCAkZm9udCApOw0KICAgIH0NCn0NCg0KTWFjcm86OkJ1aWx0aW4oICdmdCcsIDEs IHN1YiB7ICAgICAgICAgICAgICAgICAgIyAuZnQgLSBjaGFuZ2UgZm9udA0KICAgIENoYW5nZVRv KCBzaGlmdCApOyB9ICk7DQoNCk1hY3JvOjpCdWlsdGluKCAnZnAnLCAzLCBzdWIgeyAgICAgICAg ICAgICAgICAgICMgLmZwIC0gY2hhbmdlIGZvbnQgcG9zaXRpb24NCiAgICAkRm9udDo6X21vdW50 ZWRbICRfWzBdIF0gPSAkX1sxXQ0KCWlmICggJF9bMF0gPiAxIGFuZCBkZWZpbmVkKCAkX1sxXSAp ICk7IH0gKTsNCg0KJEZvbnQ6Ol91bmRlcmxpbmVfZm9udCA9ICdJJzsNCg0KTWFjcm86OkJ1aWx0 aW4oICd1bCcsIDEsIHN1YiB7ICAgICAgICAgICAgICAgICAgIyAudWwgLSB1bmRlcmxpbmUgTiBs aW5lcw0KICAgIEVudjo6VW5kZXJsaW5lKCBAXyA/IHNoaWZ0IDogMSApOw0KICAgIEVudjo6U2F2 ZWRGb250KCBOYW1lKCkgKTsNCiAgICBDaGFuZ2VUbyggRW52OjpVbmRlcmxpbmUoKSA/ICRGb250 OjpfdW5kZXJsaW5lX2ZvbnQgOiB1bmRlZiApOyB9ICk7DQoNCk1hY3JvOjpCdWlsdGluKCAndWYn LCAxLCBzdWIgeyAgICAgICAgICAgICAgICAgICMgLnVmIC0gdW5kZXJsaW5lIGZvbnQNCiAgICAk Rm9udDo6X3VuZGVybGluZV9mb250ID0gQF8gPyBzaGlmdCA6ICdJJzsgfSApOw0KDQpzdWIgQ291 bnRMaW5lDQp7DQogICAgaWYgKCBteSAkbiA9IEVudjo6VW5kZXJsaW5lKCkgKQ0KICAgIHsNCiAg ICAgICAgRW52OjpVbmRlcmxpbmUoIC0tJG4gKTsNCglDaGFuZ2VUbyggRW52OjpTYXZlZEZvbnQo KSApIHVubGVzcyAkbjsNCiAgICB9DQp9DQoNCiMgLS0tIDMuIFBhZ2UgQ29udHJvbCAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpwYWNr YWdlIERpdmVyc2lvbjsNCg0KIyBBVVRPTE9BRCBnaXZlcyB1cyBmdW5jdGlvbi1uYW1lIGFjY2Vz cyB0byB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQNCiMgZGl2ZXJzaW9uLCBlLmcuIERpdmVyc2lv bjo6VmVydGljYWxQb3NpdGlvbigpIC4NCg0Kc3ViIEFVVE9MT0FEDQp7DQogICAgZGllICJVbmRl ZmluZWQ6ICREaXZlcnNpb246OkFVVE9MT0FEXG4iDQogICAgICAgIHVubGVzcyBleGlzdHMgJERp dmVyc2lvbjo6X3N0YWNrWy0xXXskRGl2ZXJzaW9uOjpBVVRPTE9BRH07DQogICAgJERpdmVyc2lv bjo6X3N0YWNrWy0xXXskRGl2ZXJzaW9uOjpBVVRPTE9BRH0gPSBzaGlmdCBpZiBAXzsNCiAgICAk RGl2ZXJzaW9uOjpfc3RhY2tbLTFdeyREaXZlcnNpb246OkFVVE9MT0FEfTsNCn0NCg0Kc3ViIERp dmVydFRvDQp7DQogICAgcHVzaCBARGl2ZXJzaW9uOjpfc3RhY2ssIHsNCiAgICAgICAgJ0RpdmVy c2lvbjo6Tm9TcGFjZScgICAgICAgICAgPT4gMCwNCiAgICAgICAgJ0RpdmVyc2lvbjo6TWFyaycg ICAgICAgICAgICAgPT4gMCwNCiAgICAgICAgJ0RpdmVyc2lvbjo6VmVydGljYWxQb3NpdGlvbicg PT4gMCwNCiAgICAgICAgJ0RpdmVyc2lvbjo6SGlnaFdhdGVyJyAgICAgICAgPT4gMCwNCiAgICAg ICAgJ0RpdmVyc2lvbjo6TWFjcm9OYW1lJyAgICAgICAgPT4gJycsDQogICAgICAgICdEaXZlcnNp b246OlRyYXAnICAgICAgICAgICAgID0+IHVuZGVmLA0KICAgICAgICAnRGl2ZXJzaW9uOjpMYXN0 VGV4dEJhc2VsaW5lJyA9PiAwLA0KICAgICAgICAnRGl2ZXJzaW9uOjpIZWlnaHQnICAgICAgICAg ICA9PiAwLA0KICAgICAgICAnRGl2ZXJzaW9uOjpXaWR0aCcgICAgICAgICAgICA9PiAwLA0KICAg IH07DQogICAgTWFjcm9OYW1lKHNoaWZ0KTsNCn07DQoNCkRpdmVydFRvKCk7ICAgICMgRXN0YWJs aXNoIHRoZSAwdGggbGV2ZWwgZGl2ZXJzaW9uDQoNCnN1YiBMZXZlbCAgICAgIHsgJCNEaXZlcnNp b246Ol9zdGFjayB9DQoNCnN1YiBFbmREaXZlcnQNCnsNCiAgICBSZWc6OlNldCggJ2RuJywgSGVp Z2h0KCkgKTsNCiAgICBSZWc6OlNldCggJ2RsJywgV2lkdGgoKSApOw0KICAgIHBvcCBARGl2ZXJz aW9uOjpfc3RhY2sgaWYgKCBMZXZlbCgpID4gMCApOw0KfQ0KDQpzdWIgT3V0cHV0DQp7DQogICAg bXkgQGVsZW1lbnRzID0gQF87DQogICAgaWYgKCBMZXZlbCgpID4gMCApDQogICAgew0KICAgICAg ICBteSAoJGhlaWdodCwgJHdpZHRoKSA9IChIZWlnaHQoKSwwKTsNCgltYXAgeyAkd2lkdGggKz0g JF8tPldpZHRoKCk7ICRoZWlnaHQgKz0gJF8tPkhlaWdodCgpOyB9IEBlbGVtZW50czsNCglXaWR0 aCgkd2lkdGgpIGlmIFdpZHRoKCkgPCAkd2lkdGg7DQoJSGVpZ2h0KCRoZWlnaHQpOw0KICAgICAg ICBNYWNybzo6QXBwZW5kKCBNYWNyb05hbWUoKSwgQGVsZW1lbnRzICk7DQogICAgfQ0KICAgIGVs c2UNCiAgICB7DQogICAgICAgIGZvcmVhY2ggKCBAZWxlbWVudHMgKSB7ICRfLT5QcmludCgpOyB9 DQogICAgfQ0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGhlIFBhZ2UgcGFja2FnZSBo YW5kbGVzIHZlcnRpY2FsIG1vdGlvbnMsIHBhZ2UgdHJhcHMsIGFzc2VtYmxpbmcgbGluZXMNCiMg aW50byB0aGVpciBwbGFjZXMgb24gdGhlIHBhZ2UuDQoNCnBhY2thZ2UgUGFnZTsNCg0Kc3ViIElu aXQNCnsNCiAgICAkUGFnZTo6Rmlyc3RQYWdlID0gMTsNCiAgICAkUGFnZTo6X251bWJlciA9IDA7 DQogICAgIyBEZWZhdWx0IHVuaXQgZm9yIHBhZ2Ugb2Zmc2V0IGlzIG0sIE5PVCB2IGFzIGluIHRo ZSBVc2VyJ3MgTWFudWFsDQogICAgJFBhZ2U6Ol9vZmZzZXQgPSBQYXJhbS0+bmV3KFZBTFVFID0+ IDAsIFVOSVRTID0+ICdtJyk7DQogICAgJFBhZ2U6Ol9sZW5ndGggPSBQYXJhbS0+bmV3KFZBTFVF ID0+ICcxMWknLCBVTklUUyA9PiAndicsDQoJCQkJREVGQVVMVCA9PiAnMTFpJyk7DQp9DQpzdWIg TnVtYmVyIHsgJFBhZ2U6Ol9udW1iZXIgfQ0Kc3ViIE9mZnNldCB7ICRQYWdlOjpfb2Zmc2V0LT5W YWx1ZSgpIH0NCnN1YiBMZW5ndGggeyAkUGFnZTo6X2xlbmd0aC0+VmFsdWUoKSB9DQoNCnN1YiBC ZWdpblBhZ2UNCnsNCiAgICBpZiAoIGRlZmluZWQgJFBhZ2U6Ol9uZXh0X251bWJlciApDQogICAg ew0KICAgICAgICAoJFBhZ2U6Ol9udW1iZXIsICRQYWdlOjpfbmV4dF9udW1iZXIpID0gKCRQYWdl OjpfbmV4dF9udW1iZXIsIHVuZGVmKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAg KyskUGFnZTo6X251bWJlcjsNCiAgICB9DQogICAgUmVnOjpTZXQoICclJywgTnVtYmVyKCkgKTsN CiAgICBEaXZlcnNpb246OlZlcnRpY2FsUG9zaXRpb24oMCk7DQogICAgRGl2ZXJzaW9uOjpIaWdo V2F0ZXIoMCk7DQogICAgRGl2ZXJzaW9uOjpPdXRwdXQoIFBhcnNlOjpNYWtlTmV3UGFnZSgpICkg dW5sZXNzICRQYWdlOjpGaXJzdFBhZ2U7DQogICAgUGFyc2U6OkVuZFBhZ2VFamVjdCgpOw0KICAg ICRQYWdlOjpGaXJzdFBhZ2UgPSAwOw0KICAgIFRyYXA6OlNwcmluZ1RvcFRyYXAoKSB1bmxlc3Mg SW5wdXQ6Ok5vTW9yZUZpbGVzKCk7DQp9DQoNCnN1YiBBZGRMaW5lDQp7DQogICAgbXkgQGVsZW1l bnRzID0gQF87DQogICAgRGl2ZXJzaW9uOjpPdXRwdXQoIFBhcnNlOjpNYWtlTW90aW9uKCBPZmZz ZXQoKSwgMCApICkgaWYgT2Zmc2V0KCk7DQogICAgZm9yZWFjaCBteSAkZWxlbWVudCAoIEBlbGVt ZW50cyApDQogICAgew0KCWlmICggJGVsZW1lbnQtPklzQnJlYWsoKSApDQoJew0KCSAgICBNb3Zl VmVydGljYWwoICRlbGVtZW50LT5IZWlnaHQoKSApOw0KCX0NCgllbHNlDQoJew0KCSAgICBEaXZl cnNpb246Ok91dHB1dCggJGVsZW1lbnQgKTsNCgl9DQogICAgfQ0KICAgIERpdmVyc2lvbjo6TGFz dFRleHRCYXNlbGluZSggRGl2ZXJzaW9uOjpWZXJ0aWNhbFBvc2l0aW9uKCkgKTsNCiAgICBSZWc6 OlNldCggJ25sJywgRGl2ZXJzaW9uOjpMYXN0VGV4dEJhc2VsaW5lKCkgKTsNCiAgICBEaXZlcnNp b246OkhpZ2hXYXRlciggRGl2ZXJzaW9uOjpWZXJ0aWNhbFBvc2l0aW9uKCkgKQ0KICAgICAgICBp ZiBEaXZlcnNpb246OkhpZ2hXYXRlcigpIDwgRGl2ZXJzaW9uOjpWZXJ0aWNhbFBvc2l0aW9uKCk7 DQogICAgRGl2ZXJzaW9uOjpOb1NwYWNlKDApOw0KfQ0KDQpzdWIgTW92ZVZlcnRpY2FsICAgICAg ICAjIHJlbGF0aXZlIG1vdGlvbg0Kew0KICAgIHJldHVybiAwIGlmICRUcmFwOjpQZW5kaW5nOw0K ICAgIG15ICRvZmZzZXQgPSBzaGlmdDsNCiAgICBpZiAoICRvZmZzZXQgPiAwICkNCiAgICB7DQog ICAgICAgIGlmICggVHJhcDo6RGlzdGFuY2VUb05leHQoKSA8PSAkb2Zmc2V0IGFuZCBteSAkdHJh cCA9IFRyYXA6Ok5leHQoKSApDQogICAgICAgIHsNCiAgICAgICAgICAgICRvZmZzZXQgPSBUcmFw OjpEaXN0YW5jZVRvTmV4dCgpOw0KICAgICAgICAgICAgVHJhcDo6U3ByaW5nKCAkdHJhcCApOw0K ICAgICAgICB9DQogICAgfQ0KICAgIG15ICRwb3MgPSAkb2Zmc2V0ICsgRGl2ZXJzaW9uOjpWZXJ0 aWNhbFBvc2l0aW9uKCk7IA0KICAgIGlmICggJHBvcyA8IDAgKQ0KICAgIHsNCiAgICAgICAgJG9m ZnNldCA9IC0gRGl2ZXJzaW9uOjpWZXJ0aWNhbFBvc2l0aW9uKCk7DQogICAgICAgICRwb3MgPSAw Ow0KICAgIH0NCiAgICBEaXZlcnNpb246OlZlcnRpY2FsUG9zaXRpb24oICRwb3MgKTsNCiAgICBE aXZlcnNpb246Ok91dHB1dCggUGFyc2U6Ok1ha2VOZXdMaW5lKCAkb2Zmc2V0ICkgKSBpZiAkb2Zm c2V0Ow0KICAgIEJlZ2luUGFnZSgpIGlmICggJHBvcyA+PSBMZW5ndGgoKSApOw0KfQ0KDQoNCk1h Y3JvOjpCdWlsdGluKCAncGwnLCAxLCBzdWIgeyAgICAgICAgICAgICAgICAgICMgLnBsIC0gc2V0 IHBhZ2UgTGVuZ3RoDQogICAgJFBhZ2U6Ol9sZW5ndGgtPlNldE9yQWRkKCAkX1swXSApOyB9ICk7 DQoNCk1hY3JvOjpCdWlsdGluKCAnYnAnLCAxLCBzdWIgeyAJCQkjIC5icCAtIGJlZ2luIHBhZ2UN CiAgICB1bmxlc3MgKCBEaXZlcnNpb246Ok5vU3BhY2UoKSBhbmQgKEBfID09IDApICkNCiAgICB7 DQoJIyBUcmlja3k6IGNhbGwgRm9yY2VQYWdlRWplY3QgYmVmb3JlIEJyZWFrLCBiZWNhdXNlIHRo ZSBicmVhayBjb3VsZA0KCSMgc3ByaW5nIGEgcGFnZSB0cmFwIHRoYXQgY29uZmxpY3RzIHdpdGgg dGhlIHBhZ2UgZWplY3Qgc2V0dXAuDQoJIyBBIGhpbnQgdGhhdCBvdXIgaW1wbGVtZW50YXRpb24g aXMgbm90IGlkZWFsLg0KICAgICAgICBQYXJzZTo6Rm9yY2VQYWdlRWplY3QoKTsNCiAgICAgICAg TGluZTo6QnJlYWsoKTsNCiAgICAgICAgaWYgKCBkZWZpbmVkICRfWzBdICkNCiAgICAgICAgew0K ICAgICAgICAgICAgJFBhZ2U6Ol9uZXh0X251bWJlciA9ICRfWzBdOw0KICAgICAgICAgICAgJFBh Z2U6Ol9uZXh0X251bWJlciArPSBQYWdlOjpOdW1iZXIoKSBpZiAkX1swXSA9fiAvXlstK10vOw0K ICAgICAgICB9DQogICAgfQ0KfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ3BuJywgMSwgc3ViIHsg ICAgICAgICAgICAgICAgICAjIC5wbiAtIHBhZ2UgbnVtYmVyDQogICAgaWYgKCBkZWZpbmVkICRf WzBdICkNCiAgICB7DQogICAgICAgICRQYWdlOjpfbmV4dF9udW1iZXIgPSAkX1swXTsNCiAgICAg ICAgJFBhZ2U6Ol9uZXh0X251bWJlciArPSBQYWdlOjpOdW1iZXIoKSBpZiAkX1swXSA9fiAvXlst K10vOw0KICAgIH0NCn0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdwbycsIDEsIHN1YiB7CSAgICAg ICAgICAgICAgICAjIC5wbyAtIHBhZ2Ugb2Zmc2V0DQogICAgJFBhZ2U6Ol9vZmZzZXQtPlNldE9y QWRkKCAkX1swXSApOyB9ICk7DQoNCk1hY3JvOjpCdWlsdGluKCAnbmUnLCAxLCBzdWIgewkJCSMg Lm5lIC0gTmVlZCB2ZXJ0aWNhbCBzcGFjZQ0KICAgIG15ICRuZWVkID0gU2NhbGU6OkV4cHIoICgg ZGVmaW5lZCgkX1swXSkgPyAkX1swXSA6ICcxJyApLCAndicgKTsNCiAgICBNb3ZlVmVydGljYWwo IFRyYXA6OkRpc3RhbmNlVG9OZXh0KCkgKQ0KICAgICAgICBpZiAoICRuZWVkID4gVHJhcDo6RGlz dGFuY2VUb05leHQoKSApOw0KfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ21rJywgMSwgc3ViIHsJ ICAgICAgICAgICAgICAgICMgLm1rIC0gbWFyayB2ZXJ0aWNhbCBwb3NpdGlvbg0KICAgIGlmICgg ZGVmaW5lZCAkX1swXSApDQogICAgew0KICAgICAgICBSZWc6OlNldCggJF9bMF0sIERpdmVyc2lv bjo6VmVydGljYWxQb3NpdGlvbigpICk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAg IERpdmVyc2lvbjo6TWFyayggRGl2ZXJzaW9uOjpWZXJ0aWNhbFBvc2l0aW9uKCkgKTsNCiAgICB9 DQp9ICk7DQoNCk1hY3JvOjpCdWlsdGluKCAncnQnLCAxLCBzdWIgewkgICAgICAgICAgICAgICAg IyAucnQgLSByZXR1cm4gdG8gbWFyaw0KICAgIG15ICRuID0gZGVmaW5lZCgkX1swXSkgPyBTY2Fs ZTo6RXhwcigkX1swXSwndicpIA0KICAgICAgICA6ICggRGl2ZXJzaW9uOjpNYXJrKCkgLSBEaXZl cnNpb246OlZlcnRpY2FsUG9zaXRpb24oKSApOw0KICAgIE1vdmVWZXJ0aWNhbCggJG4gKSBpZiAo ICRuIDwgMCApOw0KfSApOw0KDQoNCiMgLS0tIDQuIFRleHQgRmlsbGluZywgQWRqdXN0aW5nIGFu ZCBDZW50ZXJpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIFRoZSBMaW5l IHBhY2thZ2UgaXMgYWxsIGFib3V0IGNvbXBvc2luZyBhbiBvdXRwdXQgbGluZSAtIGluZGVudGlu ZywgZmlsbGluZywNCiMgYWRqdXN0aW5nLCBoYW5kbGluZyBoeXBoZW5zLg0KDQpwYWNrYWdlIExp bmU7DQoNCnN1YiBJbmRlbnQgeyBkZWZpbmVkKEVudjo6VGVtcEluZGVudCgpKSA/IEVudjo6VGVt cEluZGVudCgpIDogRW52OjpJbmRlbnQoKSB9IA0KDQojIFVwZGF0ZSBsaW5lIGRpbWVuc2lvbnMg anVzdCBiZWZvcmUgY29tcG9zaW5nIGEgbGluZTsNCiMgaW5kZW50LCB0ZW1wb3JhcnkgaW5kZW50 IGFuZCBsaW5lIGxlbmd0aCBhcmUgZGVsYXllZCBpZiBhIGxpbmUgaXMNCiMgcGFydGlhbGx5IGNv bGxlY3RlZC4NCg0Kc3ViIFVwZGF0ZURpbWVuc2lvbnMNCnsNCiAgICByZXR1cm4gaWYgRW52OjpF bGVtZW50c0xlbmd0aCgpOw0KICAgIEVudjo6SW5kZW50KCBFbnY6Ok5ld0luZGVudCgpLT5WYWx1 ZSgpICk7DQogICAgRW52OjpUZW1wSW5kZW50KCBFbnY6Ok5ld1RlbXBJbmRlbnQoKSApOw0KICAg IEVudjo6TGluZUxlbmd0aCggRW52OjpOZXdMaW5lTGVuZ3RoKCktPlZhbHVlKCkgKTsNCn0NCg0K IyBGbHVzaCBhbnkgbGluZXMgYnVmZmVyZWQgZHVlIHRvIHBlbmRpbmcgcGFnZSB0cmFwcy4NCg0K c3ViIEZsdXNoDQp7DQogICAgUGFnZTo6QWRkTGluZSggQHsgc2hpZnQoIEB7RW52OjpMaW5lQnVm ZmVyKCl9ICkgfSApDQoJd2hpbGUgKCBAe0Vudjo6TGluZUJ1ZmZlcigpfSBhbmQgISAkVHJhcDo6 UGVuZGluZyApOw0KfQ0KDQojIEFkZCB0aGUgY29tcG9zZWQgbGluZSB0byB0aGUgdGhlIHBhZ2Ug YW5kIHJlc2V0IGFsbCByZWxhdGVkIHZhcmlhYmxlcy4NCiMgQSBtYXJnaW4gY2hhcmFjdGVyLCBp ZiBkZWZpbmVkLCBpcyBhZGRlZCBhdCB0aGlzIHBvaW50Lg0KIyBJZiBhIHBhZ2UgdHJhcCBpcyBw ZW5kaW5nIGV4ZWN1dGlvbiwgd2UgYnVmZmVyIHRoZSBvdXRwdXQgZm9yIGxhdGVyLg0KDQpzdWIg QWRkVG9QYWdlDQp7DQogICAgdW5zaGlmdCggQHtFbnY6OkVsZW1lbnRzKCl9LCBQYXJzZTo6TWFr ZU1vdGlvbihJbmRlbnQoKSwgMCkgKSBpZiBJbmRlbnQoKTsNCiAgICBpZiAoIGRlZmluZWQoIEVu djo6TWFyZ2luQ2hhcigpICkgYW5kIEVudjo6RWxlbWVudHNMZW5ndGgoKSApDQogICAgew0KICAg ICAgICBteSAkc3BhY2UgPSBFbnY6OkxpbmVMZW5ndGgoKSAtIEluZGVudCgpIC0gRW52OjpFbGVt ZW50c0xlbmd0aCgpDQoJICAgICAgICAgICsgRW52OjpNYXJnaW5DaGFyU3BhY2UoKTsNCgkkc3Bh Y2UgPSAwIGlmICRzcGFjZSA8IDA7DQoJcHVzaCggQHtFbnY6OkVsZW1lbnRzKCl9LCBQYXJzZTo6 TWFrZU1vdGlvbiggJHNwYWNlLCAwICksDQoJICAgICAgRW52OjpNYXJnaW5DaGFyKCkgKTsNCiAg ICB9DQogICAgcHVzaCBAe0Vudjo6RWxlbWVudHMoKX0sIFBhcnNlOjpNYWtlTmV3TGluZSgpOw0K ICAgIHVubGVzcyAoICRUcmFwOjpQZW5kaW5nICkNCiAgICB7DQoJRmx1c2goKTsNCiAgICAgICAg UGFnZTo6QWRkTGluZSggQHtFbnY6OkVsZW1lbnRzKCl9ICk7DQogICAgfQ0KICAgIGVsc2UNCiAg ICB7DQoJcHVzaCggQHtFbnY6OkxpbmVCdWZmZXIoKX0sIFsgQHtFbnY6OkVsZW1lbnRzKCl9IF0g KTsNCiAgICB9DQogICAgQHtFbnY6OkVsZW1lbnRzKCl9ID0gKCk7DQogICAgRW52OjpFbGVtZW50 c0xlbmd0aCggMCApOw0KICAgIEVudjo6TmV3VGVtcEluZGVudCggdW5kZWYgKTsNCiAgICBVcGRh dGVEaW1lbnNpb25zKCk7DQp9DQoNCnN1YiBVbmNvbmRpdGlvbmFsQnJlYWsNCnsNCiAgICBGbHVz aCgpOw0KICAgIGlmICggRW52OjpFbGVtZW50c0xlbmd0aCgpID4gMCApDQogICAgew0KICAgICAg ICBFbnY6OkVsZW1lbnRzTGVuZ3RoKCBFbnY6OkVsZW1lbnRzTGVuZ3RoKCkgDQoJCQkgICAgIC0g cG9wKCBAe0Vudjo6RWxlbWVudHMoKX0gKS0+V2lkdGgoKSApDQoJICAgIGlmICggRW52OjpFbGVt ZW50cygpLT5bLTFdLT5Jc0FkanVzdGFibGUoKSApOw0KICAgICAgICBBZGp1c3RTbnVnKCkgdW5s ZXNzIEVudjo6Tm9BZGp1c3QoKTsNCiAgICAgICAgQWRkVG9QYWdlKCk7DQogICAgfQ0KfQ0KDQpz dWIgQnJlYWsNCnsNCiAgICBQYWdlOjpCZWdpblBhZ2UoKSBpZiAkUGFnZTo6Rmlyc3RQYWdlOw0K ICAgIFVuY29uZGl0aW9uYWxCcmVhaygpIHVubGVzcyAkTGluZTo6U3VwcHJlc3NCcmVhazsNCn0N Cg0KIyBDb21wb3NlIGFuIG91dHB1dCBsaW5lLCBmaWxsZWQgYW5kIGFkanVzdGVkIGFzIG5lY2Vz c2FyeSwgZ2l2ZW4gZWxlbWVudHMNCiMgZnJvbSBpbnB1dCBsaW5lcy4NCg0Kc3ViIENvbXBvc2UN CnsNCiAgICBteSBAZWxlbWVudHMgPSBAXzsNCiAgICBQYWdlOjpCZWdpblBhZ2UoKSBpZiAkUGFn ZTo6Rmlyc3RQYWdlOw0KICAgIFVwZGF0ZURpbWVuc2lvbnMoKTsNCg0KICAgIGZvcmVhY2ggbXkg JGVsZW1lbnQgKCBAZWxlbWVudHMgKQ0KICAgIHsNCiAgICAgICAgaWYgKCAkZWxlbWVudC0+SXNC cmVhaygpICkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCBFbnY6OkNlbnRlcmVkTGluZXMo KSA+IDAgKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIEFkanVzdFNudWcoKTsNCiAg ICAgICAgICAgICAgICBBZGRUb1BhZ2UoKTsNCiAgICAgICAgICAgICAgICBFbnY6OkNlbnRlcmVk TGluZXMoIEVudjo6Q2VudGVyZWRMaW5lcygpIC0gMSApOw0KICAgICAgICAgICAgICAgIG5leHQ7 DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNpZiAoIEVudjo6Tm9GaWxsKCkgb3IgKCBF bnY6OkVsZW1lbnRzTGVuZ3RoKCkNCiAgICAgICAgICAgICAgICAgICBhbmQgRW52OjpFbGVtZW50 cygpLT5bMF0tPklzQWRqdXN0YWJsZSgpICkgKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgIEFkZFRvUGFnZSgpOw0KICAgICAgICAgICAgICAgIG5leHQ7DQogICAgICAgICAgICB9DQog ICAgICAgICAgICAkZWxlbWVudCA9IFBhcnNlOjpNYWtlU3BhY2UoKTsgIyBuZXdsaW5lIGJlY29t ZXMgc3BhY2UgaW4gZmlsbCBtb2RlDQogICAgICAgIH0NCg0KICAgICAgICAjIEluIGZpbGwgbW9k ZSwgZGl0Y2ggY29uc2VjdXRpdmUgc3BhY2VzOg0KICAgICAgICBuZXh0IGlmICghRW52OjpOb0Zp bGwoKSBhbmQgJGVsZW1lbnQtPklzQWRqdXN0YWJsZSgpDQogICAgICAgICAgICBhbmQgQHtFbnY6 OkVsZW1lbnRzKCl9IGFuZCBFbnY6OkVsZW1lbnRzKCktPlstMV0tPklzQWRqdXN0YWJsZSgpKTsN Cg0KICAgICAgICBwdXNoIEB7RW52OjpFbGVtZW50cygpfSwgJGVsZW1lbnQ7DQogICAgICAgIEVu djo6RWxlbWVudHNMZW5ndGgoIEVudjo6RWxlbWVudHNMZW5ndGgoKSArICRlbGVtZW50LT5XaWR0 aCgpICk7DQogICAgICAgIG5leHQgaWYgRW52OjpOb0ZpbGwoKTsNCg0KCSMgSWYgdGhlIGNvbGxl Y3RlZCBsaW5lIGlzIHRvbyBsb25nIGF0IHRoaXMgcG9pbnQsIGJhY2sgdXANCgkjIHRvIGEgYnJl YWthYmxlIHBvaW50IGFuZCBvdXRwdXQsIGZpbGxpbmcgaWYgYXBwcm9wcmlhdGU6DQogICAgICAg IGlmICggRW52OjpFbGVtZW50c0xlbmd0aCgpID4gRW52OjpMaW5lTGVuZ3RoKCkgLSBJbmRlbnQo KSApDQogICAgICAgIHsNCiAgICAgICAgICAgIG15IEBzYXZlOw0KICAgICAgICAgICAgbXkgJHNh dmVfbGVuZ3RoID0gMDsNCiAgICAgICAgICAgIHdoaWxlICggbXkgJGVsZW1lbnQgPSBwb3AgQHtF bnY6OkVsZW1lbnRzKCl9ICkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBFbnY6OkVs ZW1lbnRzTGVuZ3RoKEVudjo6RWxlbWVudHNMZW5ndGgoKS0kZWxlbWVudC0+V2lkdGgoKSk7DQog ICAgICAgICAgICAgICAgaWYgKCBFbnY6OkVsZW1lbnRzTGVuZ3RoKCkgYW5kIA0KCQkgICAgICgg JGVsZW1lbnQtPklzQWRqdXN0YWJsZSgpDQoJCSAgICAgICBvciAoIEVudjo6RWxlbWVudHMoKS0+ Wy0xXS0+VmFsdWUoKSBlcSAnLScNCgkJCSAgICBhbmQgJGVsZW1lbnQtPlZhbHVlKCkgPX4gL1x3 Lw0KCQkJICAgIGFuZCBkZWZpbmVkKCBFbnY6OkVsZW1lbnRzKCktPlstMl0gKQ0KCQkJICAgIGFu ZCBFbnY6OkVsZW1lbnRzKCktPlstMl0tPlZhbHVlKCkgPX4gL1x3LyApICkgKQ0KCQl7DQogICAg ICAgICAgICAgICAgICAgIEFkanVzdCgpIHVubGVzcyBFbnY6Ok5vQWRqdXN0KCk7DQogICAgICAg ICAgICAgICAgICAgIEFkZFRvUGFnZSgpOw0KICAgICAgICAgICAgICAgICAgICBsYXN0IGlmICRl bGVtZW50LT5Jc0FkanVzdGFibGUoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgdW5zaGlmdCBAc2F2ZSwgJGVsZW1lbnQ7DQogICAgICAgICAgICAgICAgJHNhdmVfbGVuZ3Ro ICs9ICRlbGVtZW50LT5XaWR0aCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgQHtFbnY6 OkVsZW1lbnRzKCl9ID0gQHNhdmU7DQogICAgICAgICAgICBFbnY6OkVsZW1lbnRzTGVuZ3RoKCAk c2F2ZV9sZW5ndGggKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0Kc3ViIEFkanVzdA0Kew0KICAg IGlmICggRW52OjpBZGp1c3RUeXBlKCkgPX4gL1tscmNdLyApDQogICAgew0KICAgICAgICBBZGp1 c3RTbnVnKCk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIEFkanVzdFdpZGUoKTsN CiAgICB9DQp9DQoNCnN1YiBBZGp1c3RTbnVnDQp7DQogICAgbXkgJGZpbGwgPSBFbnY6OkxpbmVM ZW5ndGgoKSAtIEluZGVudCgpIC0gRW52OjpFbGVtZW50c0xlbmd0aCgpOw0KICAgIHJldHVybiBp ZiAkZmlsbCA8PSAwOw0KICAgIGlmICggKEVudjo6Q2VudGVyZWRMaW5lcygpID4gMCkgb3IgRW52 OjpBZGp1c3RUeXBlKCkgPX4gL1tjcl0vICkNCiAgICB7DQoJJGZpbGwgPSBQb3J0aW9uV2lkdGgo ICRmaWxsLCAyLCAwICkgdW5sZXNzIEVudjo6QWRqdXN0VHlwZSgpIGVxICdyJzsNCiAgICAgICAg dW5zaGlmdCBAe0Vudjo6RWxlbWVudHMoKX0sIFBhcnNlOjpNYWtlTW90aW9uKCRmaWxsLDApOw0K ICAgICAgICBFbnY6OkVsZW1lbnRzTGVuZ3RoKCBFbnY6OkVsZW1lbnRzTGVuZ3RoKCkgKyAkZmls bCApOw0KICAgIH0NCiAgICAjIGVsc2UgYWRqdXN0IGxlZnQgLSBkbyBub3RoaW5nDQp9DQoNCnN1 YiBBZGp1c3RXaWRlDQp7DQogICAgbXkgJGZpbGwgPSBFbnY6OkxpbmVMZW5ndGgoKSAtIEluZGVu dCgpIC0gRW52OjpFbGVtZW50c0xlbmd0aCgpOw0KICAgIHJldHVybiBpZiAkZmlsbCA8PSAwOw0K ICAgIG15ICRzcGFjZXMgPSAwOw0KICAgIG1hcCB7ICsrJHNwYWNlcyBpZiAkXy0+SXNBZGp1c3Rh YmxlKCkgfSBAe0Vudjo6RWxlbWVudHMoKX07DQogICAgbXkgJGkgPSAwOw0KICAgIGZvcmVhY2gg KCBAe0Vudjo6RWxlbWVudHMoKX0gKQ0KICAgIHsNCiAgICAgICAgaWYgKCAkXy0+SXNBZGp1c3Rh YmxlKCkgKQ0KICAgICAgICB7DQogICAgICAgICAgICAkXy0+QWRqdXN0V2lkdGgoICRfLT5XaWR0 aCgpICsgUG9ydGlvbldpZHRoKCAkZmlsbCwgJHNwYWNlcywNCiAgICAgICAgICAgICAgICAoJExp bmU6Ol9sZWZ0d2FyZCA/ICRpIDogKCRzcGFjZXMtJGktMSkpICkgKTsNCiAgICAgICAgICAgICsr JGk7DQogICAgICAgIH0NCiAgICB9DQogICAgJExpbmU6Ol9sZWZ0d2FyZCA9ICEgJExpbmU6Ol9s ZWZ0d2FyZDsNCiAgICBFbnY6OkVsZW1lbnRzTGVuZ3RoKCBFbnY6OkVsZW1lbnRzTGVuZ3RoKCkg KyAkZmlsbCApOw0KfQ0KDQpzdWIgUG9ydGlvbldpZHRoICAgICAjICRtaW5lIGlzIFswLi4kZGl2 aXNvci0xXQ0Kew0KICAgIG15ICgkd2lkdGgsJGRpdmlzb3IsJG1pbmUpID0gQF87DQogICAgbXkg JHBpZWNlcyA9IGludCggJHdpZHRoIC8gT3V0cHV0OjpNaW5Ib3Jpem9udGFsKCkgKTsNCiAgICBt eSAkcG9ydGlvbiA9IGludCgkcGllY2VzIC8gJGRpdmlzb3IpICsgKCRtaW5lIDwgKCRwaWVjZXMg JSAkZGl2aXNvcikpOw0KICAgICgkcG9ydGlvbiAqIE91dHB1dDo6TWluSG9yaXpvbnRhbCgpKTsN Cn0NCg0KTWFjcm86OkJ1aWx0aW4oICdicicsIDAsIHN1YiB7CQkJIyAuYnIgLSBicmVhaw0KICAg IEJyZWFrKCk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdmaScsIDAsIHN1YiB7CQkJIyAuZmkg LSBmaWxsDQogICAgQnJlYWsoKTsNCiAgICBFbnY6Ok5vRmlsbCggMCApOyB9ICk7DQoNCk1hY3Jv OjpCdWlsdGluKCAnbmYnLCAwLCBzdWIgewkJCSMgLm5mIC0gbm8gZmlsbA0KICAgIEJyZWFrKCk7 DQogICAgRW52OjpOb0ZpbGwoIDEgKTsgfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ2FkJywgMSwg c3ViIHsJCQkjIC5hZCAtIHNldCBhZGp1c3QNCiAgICBpZiAoIGRlZmluZWQgJF9bMF0gKQ0KICAg IHsNCiAgICAgICAgbXkgJHR5cGUgPSAoICRfWzBdID1+IC9eXGQrJC8gKSA/IGNociggJF9bMF0g KSA6ICRfWzBdOw0KICAgICAgICBFbnY6OkFkanVzdFR5cGUoICR0eXBlICkgaWYgKCAkdHlwZSA9 fiAvXltscmNibl0kLyApOw0KICAgIH0NCiAgICBFbnY6Ok5vQWRqdXN0KCAwICk7IH0gKTsNCg0K TWFjcm86OkJ1aWx0aW4oICduYScsIDAsIHN1YiB7CQkJIyAubmEgLSBubyBhZGp1c3QNCiAgICBF bnY6Ok5vQWRqdXN0KCAxICk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdjZScsIDEsIHN1YiB7 CQkJIyAuY2UgLSBjZW50ZXIgbGluZXMNCiAgICBCcmVhaygpOw0KICAgIEVudjo6Q2VudGVyZWRM aW5lcyggZGVmaW5lZCgkX1swXSkgPyBTY2FsZTo6RXhwcigkX1swXSkgOiAxICk7IH0gKTsNCg0K IyAtLS0gNS4gVmVydGljYWwgU3BhY2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCk1hY3JvOjpCdWlsdGluKCAndnMnLCAxLCBzdWIgeyAg ICAgICAgICAgICAgICAgICMgLnZzIC0gdmVydCBiYXNlbGluZSBzcGFjZQ0KICAgIEVudjo6VmVy dGljYWxTcGFjZSgpLT5TZXQoIHNoaWZ0ICk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdzcCcs IDEsIHN1YiB7IAkJCSMgLnNwIC0gdmVydGljYWwgc3BhY2UNCiAgICBMaW5lOjpCcmVhaygpOw0K ICAgIFBhZ2U6Ok1vdmVWZXJ0aWNhbChTY2FsZTo6VG9WZXJ0aWNhbCgoZGVmaW5lZCgkX1swXSkg PyAkX1swXSA6IDEpLCAndicpKQ0KICAgICAgICB1bmxlc3MgRGl2ZXJzaW9uOjpOb1NwYWNlKCk7 IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdzdicsIDEsIHN1YiB7CQkJIyAuc3YgLSBTYXZlIHZl cnRpY2FsIHNwYWNlDQogICAgbXkgJHNhdmUgPSBTY2FsZTo6RXhwciggKCBkZWZpbmVkKCRfWzBd KSA/ICRfWzBdIDogJzEnICksICd2JyApOw0KICAgIGlmICggJHNhdmUgPiBUcmFwOjpEaXN0YW5j ZVRvTmV4dCgpICkNCiAgICB7DQogICAgICAgICRQYWdlOjpfc2F2ZWRfc3BhY2UgPSAkc2F2ZTsN CiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgUGFnZTo6TW92ZVZlcnRpY2FsKCAkc2F2 ZSApOw0KICAgICAgICAkUGFnZTo6X3NhdmVkX3NwYWNlID0gdW5kZWY7DQogICAgfQ0KfSApOw0K DQpNYWNybzo6QnVpbHRpbiggJ29zJywgMCwgc3ViIHsJCQkjIC5vcyAtIG91dHB1dCBzYXZlZCBz cGFjZQ0KICAgIGlmICggZGVmaW5lZCAkUGFnZTo6X3NhdmVkX3NwYWNlICkNCiAgICB7DQogICAg ICAgIFBhZ2U6Ok1vdmVWZXJ0aWNhbCggJFBhZ2U6Ol9zYXZlZF9zcGFjZSApOw0KICAgICAgICAk UGFnZTo6X3NhdmVkX3NwYWNlID0gdW5kZWY7DQogICAgfQ0KfSApOw0KDQpNYWNybzo6QnVpbHRp biggJ25zJywgMCwgc3ViIHsJCQkjIC5ucyAtIE5vIHNwYWNpbmcNCiAgICBEaXZlcnNpb246Ok5v U3BhY2UoMSk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdycycsIDAsIHN1YiB7CQkJIyAucnMg LSBSZXN0b3JlIHNwYWNpbmcNCiAgICBEaXZlcnNpb246Ok5vU3BhY2UoMCk7IH0gKTsNCg0KIyAt LS0gNi4gTGluZSBMZW5ndGggYW5kIEluZGVudGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQoNCk1hY3JvOjpCdWlsdGluKCAnbGwnLCAxLCBzdWIgeyAgICAg ICAgICAgICAgICAgICMgLmxsIC0gc2V0IGxpbmUgbGVuZ3RoDQogICAgRW52OjpOZXdMaW5lTGVu Z3RoKCktPlNldE9yQWRkKCAkX1swXSApOw0KICAgIEVudjo6TmV3TGluZUxlbmd0aCgpLT5TZXQo IDAgKSBpZiBFbnY6Ok5ld0xpbmVMZW5ndGgoKS0+VmFsdWUoKSA8IDA7DQogICAgTGluZTo6VXBk YXRlRGltZW5zaW9ucygpOw0KfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ2luJywgMSwgc3ViIHsg ICAgICAgICAgICAgICAgICAjIC5pbiAtIHNldCBpbmRlbnQNCiAgICBMaW5lOjpCcmVhaygpOw0K ICAgIEVudjo6TmV3SW5kZW50KCktPlNldE9yQWRkKCAkX1swXSApOw0KICAgIEVudjo6TmV3SW5k ZW50KCktPlNldCggMCApIGlmIEVudjo6TmV3SW5kZW50KCktPlZhbHVlKCkgPCAwOw0KICAgIEVu djo6TmV3VGVtcEluZGVudCggdW5kZWYgKTsgICAgICAgICAgICAgICAgICAgIyAuaW4gdHJ1bXBz IC50aQ0KICAgIExpbmU6OlVwZGF0ZURpbWVuc2lvbnMoKTsNCn0gKTsNCg0KTWFjcm86OkJ1aWx0 aW4oICd0aScsIDEsIHN1YiB7ICAgICAgICAgICAgICAgICAgIyAudGkgLSBzZXQgdGVtcG9yYXJ5 IGluZGVudA0KICAgIExpbmU6OkJyZWFrKCk7DQogICAgbXkgJHZhbHVlOw0KICAgIGlmICggZGVm aW5lZCAkX1swXSApDQogICAgew0KCSR2YWx1ZSA9IFNjYWxlOjpFeHByKCRfWzBdLCAnbScpOw0K CSR2YWx1ZSArPSBFbnY6OkluZGVudCgpIGlmICggJF9bMF0gPX4gL15bLStdLyApOw0KCSR2YWx1 ZSA9IDAgaWYgJHZhbHVlIDwgMDsNCiAgICB9DQogICAgRW52OjpOZXdUZW1wSW5kZW50KCAkdmFs dWUgKTsNCiAgICBMaW5lOjpVcGRhdGVEaW1lbnNpb25zKCk7DQp9ICk7DQoNCiMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KIyBXaGVuIGFuIGlucHV0IGNoYXJhY3RlciBpcyBpbnRlcnByZXRlZCBhcyBw YXJ0IG9mIHRoZSBkb2N1bWVudCB0ZXh0DQojIGl0IGJlY29tZXMgYSBQcmludEVsZW1lbnQsIHdp dGggbW90aW9uIGFuZCBmb250IGluZm9ybWF0aW9uLg0KIyBBIFByaW50RWxlbWVudCBpcyBhbiBh cnJheSBjb250YWluaW5nIGEgdmFsdWUsIHdpZHRoLCBoZWlnaHQgYW5kIGZvbnQuDQoNCnBhY2th Z2UgUHJpbnRFbGVtZW50Ow0KDQpzdWIgbmV3DQp7DQogICAgbXkgJGNsYXNzID0gc2hpZnQ7DQog ICAgYmxlc3MoIFsgQF8gXSwgKHJlZigkY2xhc3MpIHx8ICRjbGFzcykgKTsNCn0NCg0Kc3ViIENs b25lICAgICAgICB7IGJsZXNzKCBbIEB7JF9bMF19IF0sIHJlZigkX1swXSkgKTsgfQ0Kc3ViIFZh bHVlICAgICAgICB7ICRfWzBdWzBdIH0NCnN1YiBXaWR0aCAgICAgICAgeyAkX1swXVsxXSB9DQpz dWIgSGVpZ2h0ICAgICAgIHsgJF9bMF1bMl0gfQ0Kc3ViIEZvbnQgICAgICAgICB7ICRfWzBdWzNd IH0NCnN1YiBBZGp1c3RXaWR0aCAgeyAkX1swXVsxXSA9ICRfWzFdOyB9DQpzdWIgUHJpbnQgICAg ICAgIHt9DQpzdWIgSXNBZGp1c3RhYmxlIHsgMCB9DQpzdWIgSXNCcmVhayAgICAgIHsgMCB9DQpz dWIgSXNTcGFjZSAgICAgIHsgMCB9DQpzdWIgSXNIeXBoZW4gICAgIHsgMCB9DQpzdWIgSXNFcXVh bFRvDQp7DQogICAgbXkgKCRtZSwkeW91KSA9IEBfOw0KICAgIGZvcmVhY2ggKCAwLi4zICkgeyBy ZXR1cm4gMCB1bmxlc3MgJG1lLT5bJF9dIGVxICR5b3UtPlskX107IH0NCiAgICAxOw0KfQ0KDQpA Q2hhckVsZW1lbnQ6OklTQSAgICAgID0gJ1ByaW50RWxlbWVudCc7DQpATW90aW9uRWxlbWVudDo6 SVNBICAgID0gJ1ByaW50RWxlbWVudCc7DQpAU3BhY2VFbGVtZW50OjpJU0EgICAgID0gJ1ByaW50 RWxlbWVudCc7DQpATmV3TGluZUVsZW1lbnQ6OklTQSAgID0gJ1ByaW50RWxlbWVudCc7DQpATmV3 UGFnZUVsZW1lbnQ6OklTQSAgID0gJ1ByaW50RWxlbWVudCc7DQpASHlwaGVuRWxlbWVudDo6SVNB ICAgID0gJ1ByaW50RWxlbWVudCc7DQoNCnN1YiBTcGFjZUVsZW1lbnQ6OklzQWRqdXN0YWJsZSAg eyAxIH0NCnN1YiBOZXdMaW5lRWxlbWVudDo6SXNCcmVhayAgICAgeyAxIH0NCnN1YiBOZXdQYWdl RWxlbWVudDo6SXNCcmVhayAgICAgeyAxIH0NCnN1YiBTcGFjZUVsZW1lbnQ6OklzU3BhY2UgICAg ICAgeyAxIH0NCnN1YiBNb3Rpb25FbGVtZW50OjpJc1NwYWNlICAgICAgeyAkX1swXS0+SGVpZ2h0 KCkgPT0gMCB9DQpzdWIgSHlwaGVuRWxlbWVudDo6SXNIeXBoZW4gICAgIHsgMSB9DQoNCnN1YiBD aGFyRWxlbWVudDo6UHJpbnQNCnsNCiAgICBteSAkbWUgPSBzaGlmdDsNCiAgICBPdXRwdXQ6OkNo YXIoICRtZS0+VmFsdWUoKSwgJG1lLT5XaWR0aCgpLCAkbWUtPkZvbnQoKSApOw0KfQ0Kc3ViIE1v dGlvbkVsZW1lbnQ6OlByaW50ICAgeyBPdXRwdXQ6Ok1vdGlvbigkX1swXS0+V2lkdGgoKSwgJF9b MF0tPkhlaWdodCgpKSB9DQpzdWIgU3BhY2VFbGVtZW50OjpQcmludCAgICB7IE91dHB1dDo6TW90 aW9uKCRfWzBdLT5XaWR0aCgpLCAwKSB9DQpzdWIgTmV3TGluZUVsZW1lbnQ6OlByaW50ICB7IE91 dHB1dDo6TmV3TGluZSgkX1swXS0+SGVpZ2h0KCkpIH0NCnN1YiBOZXdQYWdlRWxlbWVudDo6UHJp bnQgIHsgT3V0cHV0OjpOZXdQYWdlKCkgfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnBhY2th Z2UgUGFyc2U7DQoNCnN1YiBNYWtlTmV3UGFnZSB7IE5ld1BhZ2VFbGVtZW50LT5uZXcoICcnLCAw LCAwLCAwICkgfQ0Kc3ViIE1ha2VIeXBoZW4gIHsgSHlwaGVuRWxlbWVudC0+bmV3KCAnJywgMCwg MCwgMCApIH0NCg0Kc3ViIE1ha2VOZXdMaW5lDQp7DQogICAgbXkgJHZlcnQgPSBzaGlmdCB8fCBT Y2FsZTo6Um91bmRWZXJ0aWNhbChFbnY6OlYoKSk7DQogICAgTmV3TGluZUVsZW1lbnQtPm5ldygg JycsIDAsICR2ZXJ0LCAwICk7DQp9DQoNCnN1YiBNYWtlQ2hhcg0Kew0KICAgIG15ICRjID0gc2hp ZnQ7DQogICAgbXkgJHdpZHRoID0gc2hpZnQgfHwgRm9udDo6Q2hhcldpZHRoKCRjKTsNCiAgICBt eSAkZm9udCA9IEZvbnQ6Ok5hbWUoKTsNCiAgICBDaGFyRWxlbWVudC0+bmV3KCAkYywgJHdpZHRo LCAwLCBGb250OjpOYW1lKCkgKTsNCn0NCg0Kc3ViIE1ha2VTcGFjZQ0Kew0KICAgIG15ICR3aWR0 aCA9IEZvbnQ6OkNoYXJXaWR0aCgnICcpOw0KICAgIFNwYWNlRWxlbWVudC0+bmV3KCAnJywgJHdp ZHRoLCAwLCAwICk7DQp9DQoNCnN1YiBNYWtlTW90aW9uDQp7DQogICAgbXkgJHggPSBTY2FsZTo6 VG9Ib3Jpem9udGFsKCBzaGlmdCwgJ3UnICk7DQogICAgbXkgJHkgPSBTY2FsZTo6VG9WZXJ0aWNh bCggc2hpZnQsICd1JyApOw0KICAgIE1vdGlvbkVsZW1lbnQtPm5ldyggJycsICR4LCAkeSwgMCAp Ow0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUmVhZGluZyBpbnB1dC4NCiMgV2UgcmVh ZCBvbmUgY2hhcmFjdGVyIChvciBvbmUgUHJpbnRFbGVtZW50KSBhdCBhIHRpbWUuICBTb3JyeS4N Cg0KdXNlIHZhcnMgcXd7DQogICAgQF9wdXNoYmFjayAkX2VvbCAkX2NvcHlfbW9kZSAkX2NvbnRp bnVlX3RleHQgJF9mb3JjZV90ZXh0ICRfaW50ZXJwb2xhdGUNCn07DQoNCiMgUmVhZENoYXIoKSwg UGVla0NoYXIoKSBpbnRlcnByZXQgZXNjYXBlIHNlcXVlbmNlcy4NCiMgUmVhZFJhd0NoYXIoKSwg UGVla1Jhd0NoYXIoKSBkbyBub3QgaW50ZXJwcmV0IGVzY2FwZSBzZXF1ZW5jZXMuDQojIEBfcHVz aGJhY2sgaXMgdG8gYmUgdXNlZCBvbmx5IGZvciBleHBhbmRlZCBlc2NhcGUgc2VxdWVuY2VzLCBh bmQgc28NCiMgY2hhcmFjdGVycyB0YWtlbiBmcm9tIHRoZXJlIGFyZSB0byBiZSBwcm90ZWN0ZWQg YWdhaW5zdCBmdXJ0aGVyIGV4cGFuc2lvbi4NCg0Kc3ViIFJlYWRSYXdDaGFyICB7IEBfcHVzaGJh Y2sgPyBzaGlmdChAX3B1c2hiYWNrKSA6IElucHV0OjpSZWFkQ2hhcigpIH0NCnN1YiBQZWVrUmF3 Q2hhciAgeyBAX3B1c2hiYWNrID8gJF9wdXNoYmFja1swXSA6IElucHV0OjpQZWVrQ2hhcigpIH0N CnN1YiBJc01vcmVJbnB1dCAgeyAhSW5wdXQ6OklzRW1wdHkoKSBvciBAX3B1c2hiYWNrOyB9DQpz dWIgU2tpcFNwYWNlICAgIHsgUmVhZFJhd0NoYXIoKSB3aGlsZSAoIFBlZWtSYXdDaGFyKCkgZXEg JyAnICk7IH0NCnN1YiBJZ25vcmVMaW5lICAgeyAxIHVudGlsICggSXNOZXdsaW5lKCBSZWFkUmF3 Q2hhcigpICkgb3IgISBJc01vcmVJbnB1dCgpICk7IH0NCnN1YiBDb3B5TW9kZSAgICAgeyBAXyA/ ICgkX2NvcHlfbW9kZSA9IHNoaWZ0KSA6ICRfY29weV9tb2RlOyB9DQoNCiMgR2V0IGlucHV0IHdp dGggZXNjYXBlIHNlcXVlbmNlIHN1YnN0aXR1dGlvbjoNCg0Kc3ViIFJlYWRDaGFyDQp7DQogICAg bXkgJGM7DQogICAgdW5zaGlmdCggQF9wdXNoYmFjaywgR2V0RXNjYXBlU2VxdWVuY2UoKSApDQoJ dW50aWwgKCBAX3B1c2hiYWNrIG9yICgkYyA9IElucHV0OjpSZWFkQ2hhcigpKSBuZSAkRVNDQVBF X0NIQVIgKTsNCiAgICBAX3B1c2hiYWNrID8gc2hpZnQoIEBfcHVzaGJhY2sgKSA6ICRjOw0KfQ0K DQpzdWIgUGVla0NoYXINCnsNCiAgICB1bnRpbCAoIEBfcHVzaGJhY2sgb3IgSW5wdXQ6OlBlZWtD aGFyKCkgbmUgJEVTQ0FQRV9DSEFSICkNCiAgICB7DQogICAgICAgIElucHV0OjpSZWFkQ2hhcigp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEaXNjYXJkIGVzY2FwZQ0KICAgICAgICB1 bnNoaWZ0KCBAX3B1c2hiYWNrLCBHZXRFc2NhcGVTZXF1ZW5jZSgpICk7ICAgICMgTWF5YmUgcmVj dXJzaW9uDQogICAgfQ0KICAgIFBlZWtSYXdDaGFyKCk7DQp9DQoNCnN1YiBJc05ld2xpbmUNCnsN CiAgICBteSAkZSA9IHNoaWZ0Ow0KICAgICggJGUgZXEgIlxuIiBvciAoIHJlZigkZSkgYW5kICRl LT5Jc0JyZWFrKCkgKSApOw0KfQ0KDQojIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBjaGFycyBv ciBQcmludEVsZW1lbnRzIGFyZSBlcXVhbDoNCg0Kc3ViIEFyZUVxdWFsDQp7DQogICAgbXkgKCRh LCAkYikgPSBAXzsNCiAgICByZXR1cm4gMSBpZiAkYSBlcSAkYjsNCiAgICByZXR1cm4gMSBpZiAo IHJlZiAkYSBhbmQgcmVmICRiIGFuZCAkYS0+SXNFcXVhbFRvKCRiKSApOw0KICAgIDA7DQp9DQoN CiMgUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGFycmF5cyBvZiBjaGFycyBhbmQgUHJpbnRFbGVt ZW50cyBhcmUgZXF1YWw6DQoNCnN1YiBBcmVFcXVhbExpc3RzDQp7DQogICAgbXkgKCRhLCAkYikg PSBAXzsNCiAgICByZXR1cm4gMCBpZiBAJGEgIT0gQCRiOw0KICAgIGZvcmVhY2ggKCAwIC4uICQj JGEgKSB7IHJldHVybiAwIHVubGVzcyBBcmVFcXVhbCggJGEtPlskX10sICRiLT5bJF9dICk7IH0N CiAgICAxOw0KfQ0KDQpzdWIgR2V0TWFjcm9OYW1lDQp7DQogICAgbXkgJG5hbWUgPSAnJzsNCiAg ICBSZWFkUmF3Q2hhcigpIHdoaWxlIFBlZWtSYXdDaGFyKCkgPX4gL15bIFx0XSQvOyAgICMgc2tp cCB0YWJzIHRvbw0KICAgIGlmICggJEdyb2ZmQ29tcGF0aWJsZSApDQogICAgew0KCSRuYW1lID0g R2V0QXJnVG8oJyAnKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCgkkbmFtZSA9IFJlYWRDaGFy KCkgaWYgUGVla0NoYXIoKSA9fiAvXlxTJC87DQoJJG5hbWUgLj0gUmVhZENoYXIoKSBpZiBQZWVr Q2hhcigpID1+IC9eXFMkLzsNCiAgICB9DQogICAgJG5hbWU7DQp9DQoNCiMgR2F0aGVyVW50aWwo JGVuZG1hcmtlciwkdGV4dG1vZGUpDQojIFJlYWQgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgZW5k IG1hcmtlciBvciBuZXdsaW5lLA0KIyByZXR1cm4gYWxsIGJ1dCB0aGUgZW5kIG1hcmtlci4NCiMg SWYgJHRleHRtb2RlIHR1cm4gcGxhaW4gY2hhcmFjdGVycyBpbnRvIFByaW50RWxlbWVudHMuDQoN CnN1YiBHYXRoZXJVbnRpbA0Kew0KICAgIG15ICRlbmRtYXJrZXIgPSBzaGlmdDsNCiAgICBteSAk dGV4dG1vZGUgPSBzaGlmdDsNCiAgICBteSAoQHBhcnRzLCAkZSwgJHByb3RlY3QpOw0KICAgIHdo aWxlICggSXNNb3JlSW5wdXQoKSApDQogICAgew0KCSRwcm90ZWN0ID0gKCBAX3B1c2hiYWNrID4g MCApOw0KCSRlID0gUmVhZENoYXIoKTsNCglsYXN0IGlmICEgJHByb3RlY3QgYW5kICggQXJlRXF1 YWwoJGUsJGVuZG1hcmtlcikgb3IgSXNOZXdsaW5lKCRlKSApOw0KCSRlID0gTWFrZUNoYXIoJGUp IGlmICR0ZXh0bW9kZSBhbmQgISByZWYoJGUpOw0KCXB1c2ggQHBhcnRzLCAkZTsNCiAgICB9DQog ICAgJF9lb2wgPSBJc05ld2xpbmUoJGUpOw0KICAgIEBwYXJ0czsNCn0NCg0KIyBNb3N0IGFyZ3Vt ZW50cyBhcmUgZXhwZWN0ZWQgYXMgcGxhaW4gc3RyaW5ncy4NCg0Kc3ViIEdldEFyZ1RvDQp7DQog ICAgam9pbiAnJywgbWFwIHsgcmVmKCRfKSA/ICcgJyA6ICRfIH0gR2F0aGVyVW50aWwoc2hpZnQs MCk7DQp9DQoNCnN1YiBHZXRMaW5lIHsgR2V0QXJnVG8oIlxuIik7IH0NCg0KIyBHaXZlbiBhIGRl bGltaXRlciwgcmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgc2VxdWVuY2UgdG8gZm9sbG93DQoNCnN1 YiBHZXRXaWR0aFVudGlsDQp7DQogICAgbXkgJHdpZHRoID0gMDsNCiAgICBGb250OjpMb2NhbGl6 ZSgpOw0KICAgIGZvcmVhY2ggKCBHYXRoZXJVbnRpbChzaGlmdCwxKSApIHsgJHdpZHRoICs9ICRf LT5XaWR0aCgpOyB9DQogICAgRm9udDo6VW5sb2NhbGl6ZSgpOw0KICAgICR3aWR0aDsNCn0NCg0K c3ViIEdldFByaW50Q2hhcg0Kew0KICAgIHJldHVybiBpZiBQZWVrQ2hhciBlcSAiXG4iOw0KICAg IG15ICRlID0gUmVhZENoYXIoKTsNCiAgICAoIHJlZigkZSkgPyAkZSA6IE1ha2VDaGFyKCRlKSAp Ow0KfQ0KDQpzdWIgR2V0WmVyb1dpZHRoQ2hhcg0Kew0KICAgIG15ICRlID0gR2V0UHJpbnRDaGFy KCk7DQogICAgJGUtPkFkanVzdFdpZHRoKDApIGlmICRlOw0KICAgICRlOw0KfQ0KDQojIHJldHVy biB0aGUgbmFtZSBpbiBhbiBlc2NhcGUgc2VxdWVuY2UgbGlrZSBcZyh4eCBvciBcZ3gNCg0Kc3Vi IEdldEVzY05hbWUNCnsNCiAgICBteSAkYyA9IFJlYWRDaGFyKCk7DQogICAgJGMgPSBHZXRBcmdU bygnXScpIGlmICRHcm9mZkNvbXBhdGlibGUgYW5kICRjIGVxICdbJzsNCiAgICByZXR1cm4gJGMg dW5sZXNzICRjIGVxICcoJzsNCiAgICBSZWFkQ2hhcigpIC4gUmVhZENoYXIoKTsNCn0NCg0KIyBy ZXR1cm4gdGhlIG5hbWUgYW5kIHNpZ24gaW4gYW4gZXNjYXBlIHNlcXVlbmNlIGxpa2UgXG4rKHh4 IG9yIFxuLXgNCg0Kc3ViIEdldFNpZ25lZEVzY05hbWUNCnsNCiAgICBteSAkaW5jciA9IChQZWVr Q2hhcigpID1+IC9eWy0rXSQvKSA/IFJlYWRDaGFyKCkgOiAnJzsNCiAgICAoR2V0RXNjTmFtZSgp LCAkaW5jcik7DQp9DQoNCnN1YiBHZXRGb250U2l6ZSAgIyBmb3IgdGhlIHZhcmlvdXMgXHMgZXNj YXBlIHNlcXVlbmNlcw0Kew0KICAgIG15ICgkYywkaW5jcikgPSBHZXRTaWduZWRFc2NOYW1lKCk7 DQogICAgJGMgLj0gUmVhZENoYXIoKSBpZiAhJGluY3IgYW5kICRjID4gMCBhbmQgJGMgPCA0IGFu ZCBQZWVrQ2hhcigpID1+IC9cZC87DQogICAgKCRjLCAkaW5jcik7DQp9DQoNCiMgRWF0IHRoZSBz ZXF1ZW5jZSAoc2FucyBlc2NhcGUpOyBtYXliZSByZXR1cm4gYSBjaGFyIG9yIFByaW50RWxlbWVu dC4NCg0Kc3ViIEdldEVzY2FwZVNlcXVlbmNlDQp7DQogICAgbG9jYWwgJF8gPSBSZWFkUmF3Q2hh cigpOw0KICAgIHJldHVybiAkXyBpZiByZWYgJF87DQoNCiAgICAjIENvcHkgbW9kZSBlc2NhcGVz IGZpcnN0Og0KDQogICAgL1wiLyAgICAgICAgYW5kIElnbm9yZUxpbmUoKSwgcmV0dXJuICJcbiI7 DQogICAgL1wqLyAgICAgICAgYW5kIE1hY3JvOjpJbnZva2UoR2V0RXNjTmFtZSgpLDEpLCAoJF9p bnRlcnBvbGF0ZT0xKSwgcmV0dXJuOw0KICAgIC9cJC8gICAgICAgIGFuZCBJbnB1dDo6T3BlbkFy Z04oUmVhZENoYXIoKSksIHJldHVybjsNCiAgICAvYS8gICAgICAgICBhbmQgcmV0dXJuICRMRUFE RVJfQ0hBUjsNCiAgICAvbi8gICAgICAgICBhbmQgcmV0dXJuIHNwbGl0KC8vLFJlZzo6VmFsdWUo R2V0U2lnbmVkRXNjTmFtZSgpKSk7DQogICAgL3QvICAgICAgICAgYW5kIHJldHVybiAiXHQiOw0K ICAgIC9cbi8gICAgICAgIGFuZCByZXR1cm47DQogICAgL1wuLyAgICAgICAgYW5kIHJldHVybiAn Lic7DQogICAgLyRFU0NBUEUvICAgYW5kIHJldHVybiAkRVNDQVBFX0NIQVI7DQogICAgcmV0dXJu ICgkRVNDQVBFX0NIQVIsJF8pIGlmIENvcHlNb2RlKCk7DQoNCiAgICAvXCUvICAgICAgICBhbmQg KCRPSFlQSEVOIG5lICcnKSBhbmQgcmV0dXJuIE1ha2VIeXBoZW4oKTsNCiAgICAvWyAwXS8gICAg ICBhbmQgcmV0dXJuIE1ha2VNb3Rpb24oRm9udDo6Q2hhcldpZHRoKCQmKSwwKTsNCiAgICAvW3xe XCZdLyAgICBhbmQgcmV0dXJuIE1ha2VNb3Rpb24oMCwwKTsNCiAgICAvYy8gICAgICAgICBhbmQg KCRfY29udGludWVfdGV4dD0xKSwgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAg L0MvICAgICAgICAgYW5kIHJldHVybiBNYWtlQ2hhcihHZXRBcmdUbyhSZWFkQ2hhcigpKSk7DQog ICAgL2QvICAgICAgICAgYW5kIHJldHVybiBNYWtlTW90aW9uKDAsKEVudjo6VigpLzIpKTsNCiAg ICAvZS8gICAgICAgICBhbmQgcmV0dXJuIE1ha2VDaGFyKCAkRVNDQVBFX0NIQVIgKTsNCiAgICAv Zi8gICAgICAgICBhbmQgRm9udDo6Q2hhbmdlVG8oR2V0RXNjTmFtZSgpKSwgICAgICAgICAgICAg ICByZXR1cm47DQogICAgL2cvICAgICAgICAgYW5kIHJldHVybiBzcGxpdCgvLyxSZWc6OkZvcm1h dE9mKEdldEVzY05hbWUoKSkpOw0KICAgIC9oLyAgICAgICAgIGFuZCByZXR1cm4gTWFrZU1vdGlv bihHZXRBcmdUbyhSZWFkQ2hhcigpKSwwKTsNCiAgICAvay8gICAgICAgICBhbmQgS2VlcChSZWFk Q2hhcigpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgL3IvICAgICAg ICAgYW5kIHJldHVybiBNYWtlTW90aW9uKDAsLUVudjo6VigpKTsNCiAgICAvdS8gICAgICAgICBh bmQgcmV0dXJuIE1ha2VNb3Rpb24oMCwoLUVudjo6VigpLzIpKTsNCiAgICAvdi8gICAgICAgICBh bmQgcmV0dXJuIE1ha2VNb3Rpb24oMCxHZXRBcmdUbyhSZWFkQ2hhcigpKSk7DQogICAgL3cvICAg ICAgICAgYW5kIHJldHVybiBzcGxpdCgvLyxHZXRXaWR0aFVudGlsKFJlYWRDaGFyKCkpKTsNCiAg ICAvei8gICAgICAgICBhbmQgcmV0dXJuIEdldFplcm9XaWR0aENoYXIoKTsNCiAgICAvXHsvICAg ICAgICBhbmQgcHVzaChASWY6Ol9zdGFjaywgJElmOjpfa2VlcF9lbHNlKSwgICAgICAgICByZXR1 cm47DQogICAgL1x9LyAgICAgICAgYW5kICgkSWY6Ol9rZWVwX2Vsc2UgPSBwb3AgQElmOjpfc3Rh Y2spLCAgICAgICAgcmV0dXJuOw0KDQogICAgIyBOb3QgKHlldD8pIHN1cHBvcnRlZDoNCg0KICAg IC9bYkRIbExOb1NYeF0vIGFuZCBHYXRoZXJVbnRpbChSZWFkQ2hhcigpKSwgcmV0dXJuOw0KICAg IC9wLyAgICAgICAgIGFuZCByZXR1cm47DQogICAgL3MvICAgICAgICAgYW5kIEdldEZvbnRTaXpl KCksIHJldHVybjsNCg0KICAgICMgaGFuZGxlIGVzY2FwZWQgY2hhcnMgXCh4eCBvciBceCA6DQoN CiAgICAvXCgvICAgICAgICBhbmQgcmV0dXJuIE1ha2VDaGFyKCBSZWFkQ2hhcigpIC4gUmVhZENo YXIoKSApOw0KICAgIE1ha2VDaGFyKCRfKTsNCn0NCg0KIyBBcmd1bWVudHMgYXJlIHNlcGFyYXRl ZCBieSBzcGFjZXMuICBJZiBkb3VibGUtcXVvdGVkLCB0aGV5IG1heSBiZSBudWxsDQojIG9yIGNv bnRhaW4gc3BhY2VzIG9yIGNvbnRhaW4gYSAiIGJ5IGRvdWJsaW5nIGl0OyANCiMgZS5nLiAiIiIi IGFtb3VudHMgdG8gYSBzaW5nbGUgIi4NCg0Kc3ViIEdldE1hY3JvQXJncw0Kew0KICAgIG15IEBh bGw7DQogICAgbXkgQGFyZzsNCiAgICBDb3B5TW9kZSgxKTsNCiAgICB3aGlsZSAoIElzTW9yZUlu cHV0KCkgKQ0KICAgIHsNCiAgICAgICAgQGFyZyA9ICgpOw0KCVNraXBTcGFjZSgpOw0KCWlmICgg UGVla1Jhd0NoYXIoKSBlcSAnIicgKQ0KCXsNCgkgICAgd2hpbGUgKCBQZWVrUmF3Q2hhcigpIGVx ICciJyApDQoJICAgIHsNCgkJcHVzaCBAYXJnLCBSZWFkUmF3Q2hhcigpOw0KCQlwdXNoIEBhcmcs IEdhdGhlclVudGlsKCAnIicsIDAgKTsNCgkgICAgfQ0KCSAgICBzaGlmdCBAYXJnOw0KCSAgICBw dXNoIEBhbGwsIFsgQGFyZyBdOw0KCX0NCgllbHNlDQoJew0KCSAgICBwdXNoIEBhcmcsIEdhdGhl clVudGlsKCAnICcsIDAgKTsNCgkgICAgcHVzaCBAYWxsLCBbIEBhcmcgXSBpZiBAYXJnOw0KCX0N CglsYXN0IGlmICRfZW9sOw0KICAgIH0NCiAgICBDb3B5TW9kZSgwKTsNCiAgICBAYWxsOw0KfQ0K DQojIEFyZ3VtZW50cyBmb3IgYnVpbHRpbnMgYXJlIGNvbnNvbGlkYXRlZCBpbnRvIHBsYWluIHN0 cmluZ3M6DQoNCnN1YiBHZXRCdWlsdGluQXJncw0Kew0KICAgIG15ICRleHBlY3RlZCA9IHNoaWZ0 Ow0KICAgIHJldHVybiAoKSB1bmxlc3MgJGV4cGVjdGVkID49IDA7IA0KICAgIG15KCAkYXJnLCBA YXJncyk7DQogICAgZG8gew0KCVNraXBTcGFjZSgpOw0KICAgICAgICAkYXJnID0gR2V0QXJnVG8o JyAnKTsNCglwdXNoIEBhcmdzLCAkYXJnIGlmICRhcmcgbmUgJyc7DQogICAgfSB1bnRpbCAoICRf ZW9sICk7DQogICAgQGFyZ3M7DQp9DQoNCnN1YiBHZXRNYWNyb1N0cmluZ0RlZg0Kew0KICAgIG15 ICRuYW1lID0gR2V0TWFjcm9OYW1lKCk7DQogICAgU2tpcFNwYWNlKCk7DQogICAgUmVhZFJhd0No YXIoKSBpZiBQZWVrUmF3Q2hhcigpIGVxICciJzsNCiAgICBDb3B5TW9kZSgxKTsNCiAgICBteSBA cGFydHMgPSBHYXRoZXJVbnRpbCgiXG4iKTsNCiAgICBDb3B5TW9kZSgwKTsNCiAgICAoJG5hbWUs IEBwYXJ0cyk7DQp9DQoNCnVzZSB2YXJzIHF3eyAkX2lucHV0X3dpZHRoIEBfaW5wdXRfZWxlbWVu dHMgfTsNCg0KJF9pbnB1dF93aWR0aCA9IDA7DQpAX2lucHV0X2VsZW1lbnRzID0gKCk7DQoNCnN1 YiBBZGRUZXh0DQp7DQogICAgZm9yZWFjaCAoIEBfICkgeyAkX2lucHV0X3dpZHRoICs9ICRfLT5X aWR0aCgpOyB9DQogICAgcHVzaCBAX2lucHV0X2VsZW1lbnRzLCBAXyA7DQp9DQoNCnN1YiBIb3Jp em9udGFsUG9zaXRpb24geyAkX2lucHV0X3dpZHRoIH0NCnN1YiBLZWVwICAgICAgICAgICAgICAg eyBSZWc6OlNldCggc2hpZnQoKSwgSG9yaXpvbnRhbFBvc2l0aW9uKCkgKSB9DQoNCnN1YiBGbHVz aA0Kew0KICAgIHVubGVzcyAoICRfY29udGludWVfdGV4dCApDQogICAgew0KCSMgUmVtb3ZlIGV4 dHJhIHRyYWlsaW5nIHNwYWNlcw0KCWZvcmVhY2ggKCByZXZlcnNlKCAwIC4uICQjX2lucHV0X2Vs ZW1lbnRzICkgKQ0KCXsNCgkgICAgbmV4dCBpZiAkX2lucHV0X2VsZW1lbnRzWyRfXS0+SXNCcmVh aygpOw0KCSAgICBsYXN0IHVubGVzcyAkX2lucHV0X2VsZW1lbnRzWyRfXS0+SXNTcGFjZSgpOw0K CSAgICBzcGxpY2UoIEBfaW5wdXRfZWxlbWVudHMsICRfLCAxICk7DQoJfQ0KICAgIH0NCiAgICBM aW5lOjpDb21wb3NlKCBAX2lucHV0X2VsZW1lbnRzICk7DQogICAgJF9pbnB1dF93aWR0aCA9IDA7 DQogICAgQF9pbnB1dF9lbGVtZW50cyA9ICgpOw0KfQ0KDQp1c2UgdmFycyBxd3sgJF90YWJfZmls bCAkX3RhYl9pbmRleCAkX3RhYl9wb3MgfTsNCg0Kc3ViIEhhbmRsZVRhYg0Kew0KICAgIEZpbGxU YWIoKSBpZiBkZWZpbmVkICRfdGFiX3BvczsNCiAgICAkX3RhYl9maWxsID0gKGRlZmluZWQoJF9b MF0gYW5kICFyZWYoJF9bMF0pKSApDQoJPyBQYXJzZTo6TWFrZUNoYXIoJF9bMF0pIDogJF9bMF07 DQogICAgJF90YWJfaW5kZXggPSBzY2FsYXIgQF9pbnB1dF9lbGVtZW50czsNCiAgICAkX3RhYl9w b3MgPSBIb3Jpem9udGFsUG9zaXRpb24oKTsNCiAgICBGaWxsVGFiKCkgdW5sZXNzIFRhYjo6RGVs YXlUYWJGaWxsKCAkX3RhYl9wb3MgKTsNCn0NCg0Kc3ViIEZpbGxUYWINCnsNCiAgICBteSAkbmV4 dF93aWR0aCA9IEhvcml6b250YWxQb3NpdGlvbigpIC0gJF90YWJfcG9zOw0KICAgIG15ICR0YWJf d2lkdGggPSBUYWI6OkRpc3RhbmNlVG9UYWIoICRfdGFiX3BvcywgJG5leHRfd2lkdGggKTsNCiAg ICBpZiAoICRfdGFiX2ZpbGwgKQ0KICAgIHsNCglteSBAZmlsbCA9ICgkX3RhYl9maWxsLT5DbG9u ZSgpKSB4IGludCgkdGFiX3dpZHRoLyRfdGFiX2ZpbGwtPldpZHRoKCkpOw0KCXNwbGljZSBAX2lu cHV0X2VsZW1lbnRzLCAkX3RhYl9pbmRleCwgMCwgQGZpbGw7DQogICAgfQ0KICAgIGVsc2UNCiAg ICB7DQoJc3BsaWNlIEBfaW5wdXRfZWxlbWVudHMsICRfdGFiX2luZGV4LCAwLCBNYWtlTW90aW9u KCAkdGFiX3dpZHRoLCAwICk7DQogICAgfQ0KICAgICRfdGFiX3BvcyA9ICRfdGFiX2luZGV4ID0g JF90YWJfZmlsbCA9IHVuZGVmOw0KICAgICRfaW5wdXRfd2lkdGggKz0gJHRhYl93aWR0aDsNCn0N Cg0Kc3ViIEhhbmRsZUZpZWxkDQp7DQogICAgbXkgKEBwYXJ0cywkcGFkcyk7DQogICAgZm9yZWFj aCAoIEdhdGhlclVudGlsKCAkRmllbGQ6OkRlbGltLCAwICkgKQ0KICAgIHsNCiAgICAgICAgcHVz aCggQHBhcnRzLCAkXyApLCBuZXh0IGlmIHJlZigkXyk7DQogICAgICAgIC8kRmllbGQ6OlBhZC8g YW5kICsrJHBhZHMgYW5kIHB1c2goIEBwYXJ0cywgTWFrZVNwYWNlKCkgKSBhbmQgbmV4dDsNCiAg ICAgICAgcHVzaCBAcGFydHMsIE1ha2VDaGFyKCRfKTsNCiAgICB9DQogICAgbXkgJHdpZHRoOw0K ICAgIGZvcmVhY2ggKCBAcGFydHMgKSB7ICR3aWR0aCArPSAkXy0+V2lkdGgoKTsgfQ0KICAgIG15 ICRmaWxsID0gVGFiOjpEaXN0YW5jZVRvVGFiKCBIb3Jpem9udGFsUG9zaXRpb24oKSwgMCApIC0g JHdpZHRoOw0KICAgIG15ICRpID0gMDsNCiAgICBmb3JlYWNoICggQHBhcnRzICkNCiAgICB7DQog ICAgICAgIGlmICggJF8tPklzQWRqdXN0YWJsZSgpICkNCiAgICAgICAgew0KICAgICAgICAgICAg JF8tPkFkanVzdFdpZHRoKCAkXy0+V2lkdGgoKSArIA0KCQkJICAgIExpbmU6OlBvcnRpb25XaWR0 aCggJGZpbGwsICRwYWRzLCAkaSApICk7DQogICAgICAgICAgICArKyRpOw0KICAgICAgICB9DQog ICAgfQ0KICAgIEFkZFRleHQoIEBwYXJ0cyApOw0KfQ0KDQpzdWIgSGFuZGxlVGV4dExpbmUNCnsN CiAgICBteSAkZTsNCiAgICB3aGlsZSAoIElzTW9yZUlucHV0KCkgKQ0KICAgIHsNCgkkZSA9IFJl YWRDaGFyKCk7DQoJaWYgKCAkX2ludGVycG9sYXRlICkNCgl7DQoJICAgIHVuc2hpZnQoIEBfcHVz aGJhY2ssICRlICk7DQoJICAgICRfY29udGludWVfdGV4dCA9IDE7DQoJICAgIGxhc3Q7DQoJfQ0K CWlmICggcmVmICRlICkNCgl7DQoJICAgIEFkZFRleHQoICRlICk7DQoJICAgIGxhc3QgaWYgJGUt PklzQnJlYWsoKTsNCgl9DQoJZWxzZQ0KCXsNCiAgICAgICAgICAgIGlmICggJGUgZXEgIiAiICkN CgkgICAgeyANCgkJQWRkVGV4dCggTWFrZVNwYWNlKCkgKTsNCgkgICAgfQ0KCSAgICBlbHNpZiAo ICRlIGVxICJcbiIgKQ0KCSAgICB7DQoJCUZpbGxUYWIoKSBpZiBkZWZpbmVkICRfdGFiX3BvczsN CgkJQWRkVGV4dCggTWFrZU5ld0xpbmUoKSApIHVubGVzcyAkX2NvbnRpbnVlX3RleHQ7DQoJCWxh c3Q7DQoJICAgIH0NCgkgICAgZWxzaWYgKCAkZSBlcSAiXHQiICkNCgkgICAgew0KCQlIYW5kbGVU YWIoIEVudjo6VEMoKSApOw0KCSAgICB9DQoJICAgIGVsc2lmICggJGUgZXEgJExFQURFUl9DSEFS ICkNCgkgICAgew0KCQlIYW5kbGVUYWIoIEVudjo6TEMoKSApOw0KCSAgICB9DQoJICAgIGVsc2lm ICggJGUgZXEgJE9IWVBIRU4gKQ0KCSAgICB7DQoJCUFkZFRleHQoIE1ha2VIeXBoZW4oKSApOw0K CSAgICB9DQoJICAgIGVsc2lmICggJGUgZXEgJEZpZWxkOjpEZWxpbSApDQoJICAgIHsgDQoJCUhh bmRsZUZpZWxkKCk7DQoJICAgIH0NCgkgICAgZWxzZQ0KCSAgICB7DQoJCUFkZFRleHQoIE1ha2VD aGFyKCRlKSApOw0KCSAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgdW5sZXNzICggJF9pbnRl cnBvbGF0ZSApDQogICAgew0KCUZsdXNoKCk7DQogICAgICAgIEZvbnQ6OkNvdW50TGluZSgpOyAg ICAgICAgICAgICAgIyBjb3VudCBpbnB1dCBsaW5lcyBmb3IgdW5kZXJsaW5pbmcNCiAgICAgICAg SW5wdXRUcmFwOjpDb3VudExpbmUoKTsgICAgICAgICAjIGNoZWNrIGZvciBpbnB1dCB0cmFwcyBs YXN0DQogICAgfQ0KfQ0KDQp1c2UgdmFycyBxd3sgJF9mb3JjZV9wYWdlX2VqZWN0ICRfaW5wdXRf bGV2ZWwgfTsNCg0Kc3ViIEZvcmNlUGFnZUVqZWN0DQp7DQogICAgdW5sZXNzICggJF9mb3JjZV9w YWdlX2VqZWN0ICkNCiAgICB7DQoJJF9mb3JjZV9wYWdlX2VqZWN0ID0gMTsNCgkkX2lucHV0X2xl dmVsID0gSW5wdXQ6OkxldmVsKCk7DQogICAgfQ0KfQ0KDQpzdWIgRW5kUGFnZUVqZWN0IHsgJF9m b3JjZV9wYWdlX2VqZWN0ID0gMCB9DQoNCnN1YiBJbnRlcnByZXRJbnB1dA0Kew0KICAgIG15ICRl Ow0KICAgIHdoaWxlICggSXNNb3JlSW5wdXQoKSBvciAkX2ZvcmNlX3BhZ2VfZWplY3QgKQ0KICAg IHsNCiAgICAgICAgJFRyYXA6OlBlbmRpbmcgPSAwOw0KCSRfaW50ZXJwb2xhdGUgPSAwOw0KDQog ICAgICAgICMgV2hpbGUgZm9yY2luZyBhIHBhZ2UgZWplY3Qgd2UgY2hlY2sgdGhlIGlucHV0IHN0 YWNrIGxldmVsDQogICAgICAgICMgdG8gYWxsb3cgb25seSBuZXcgdHJhcHMgdG8gYmUgaW50ZXJw cmV0ZWQgd2hpbGUgZWplY3Rpbmc6DQoNCiAgICAgICAgaWYgKCAkX2ZvcmNlX3BhZ2VfZWplY3Qg YW5kICggSW5wdXQ6OkxldmVsKCkgPT0gJF9pbnB1dF9sZXZlbCApICkNCgl7DQoJICAgIFBhZ2U6 Ok1vdmVWZXJ0aWNhbCggUGFnZTo6TGVuZ3RoKCktRGl2ZXJzaW9uOjpWZXJ0aWNhbFBvc2l0aW9u KCkgKQ0KCQl1bmxlc3MgRGl2ZXJzaW9uOjpMZXZlbCgpOw0KCSAgICBuZXh0Ow0KCX0NCiAgICAg ICAgaWYgKCBQZWVrQ2hhcigpID1+IC9eJENPTlRST0x8JEFMVENPTlRST0wkLyBhbmQgISAkX2Zv cmNlX3RleHQgKQ0KCXsNCgkgICAgJExpbmU6OlN1cHByZXNzQnJlYWsgPSAoIFJlYWRDaGFyKCkg PX4gL14kQUxUQ09OVFJPTCQvICk7DQogICAgICAgICAgICBteSAkbmFtZSA9IEdldE1hY3JvTmFt ZSgpOw0KICAgICAgICAgICAgU2tpcFNwYWNlKCk7DQoJICAgIGlmICggJG5hbWUgbmUgJycgKQ0K CSAgICB7DQoJICAgICAgICBNYWNybzo6SW52b2tlKCAkbmFtZSApOw0KICAgICAgICAgICAgfQ0K CSAgICBlbHNlDQoJICAgIHsNCgkJSWdub3JlTGluZSgpOw0KCSAgICB9DQogICAgICAgIH0NCiAg ICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAkX2ZvcmNlX3RleHQgPSAkX2NvbnRp bnVlX3RleHQgPSAwOw0KCSAgICBIYW5kbGVUZXh0TGluZSgpOw0KICAgICAgICB9DQogICAgfQ0K fQ0KDQpzdWIgR2V0Q29uZGl0aW9uDQp7DQogICAgbXkgJG5vdCA9IFBlZWtSYXdDaGFyKCkgZXEg JyEnOw0KICAgIFJlYWRSYXdDaGFyKCkgaWYgJG5vdDsNCiAgICBsb2NhbCAkXyA9IFBlZWtSYXdD aGFyKCk7DQogICAgL15bZW90bl0kLyBhbmQgUmVhZFJhd0NoYXIoKTsNCiAgICAvXmUkLyBhbmQg cmV0dXJuICghKChQYWdlOjpOdW1iZXIoKSAmIDEpIHhvciAkbm90KSk7DQogICAgL15vJC8gYW5k IHJldHVybiAoKFBhZ2U6Ok51bWJlcigpICYgMSkgeG9yICRub3QpOw0KICAgIC9edCQvIGFuZCBy ZXR1cm4gJG5vdDsNCiAgICAvXm4kLyBhbmQgcmV0dXJuICEgJG5vdDsNCiAgICBpZiAoIC9bXiRF U0NBUEVcZFxzXChdLyApDQogICAgew0KCW15ICRkZWxpbSA9IFJlYWRSYXdDaGFyKCk7DQogICAg ICAgIG15IEBvbmUgPSBHYXRoZXJVbnRpbCgkZGVsaW0pOw0KICAgICAgICBteSBAdHdvID0gR2F0 aGVyVW50aWwoJGRlbGltKTsNCiAgICAgICAgcmV0dXJuICggQXJlRXF1YWxMaXN0cyhcQG9uZSwg XEB0d28pIHhvciAkbm90ICk7DQogICAgfQ0KICAgICgoU2NhbGU6OkV4cHIoR2V0QXJnVG8oJyAn KSkgPiAwKSB4b3IgJG5vdCk7DQp9DQoNCnN1YiBQcm9jZXNzQ29uZGl0aW9uYWxCb2R5DQp7DQog ICAgbXkgJHJldGFpbiA9IHNoaWZ0Ow0KICAgIFNraXBTcGFjZSgpOw0KICAgIHVubGVzcyAoICRy ZXRhaW4gKSAjIHNraXAgb3ZlciBib2R5IGlmIGNvbmRpdGlvbiBpcyBmYWxzZQ0KICAgIHsNCglt eSAkYyA9IFJlYWRSYXdDaGFyKCk7DQoJaWYgKCAkYyBlcSAkRVNDQVBFX0NIQVIgYW5kIFBlZWtS YXdDaGFyKCkgZXEgJ3snICkNCgl7DQoJICAgIFJlYWRSYXdDaGFyKCk7DQogICAgICAgICAgICBt eSAkbGV2ZWwgPSAxOw0KICAgICAgICAgICAgd2hpbGUgKCBkZWZpbmVkKCAkYyA9IFJlYWRSYXdD aGFyKCkgKSApDQogICAgICAgICAgICB7DQoJCWlmICggJGMgZXEgJEVTQ0FQRV9DSEFSICkNCgkJ ew0KCQkgICAgJGMgPSBSZWFkUmF3Q2hhcigpOw0KCQkgICAgbGFzdCBpZiAoICRjIGVxICd9JyBh bmQgLS0kbGV2ZWwgPT0gMCApOw0KCQkgICAgKyskbGV2ZWwgaWYgJGMgZXEgJ3snOw0KCQl9DQog ICAgICAgICAgICB9DQoJICAgIHdhcm4gIk1pc3NpbmcgXH0gaW4gY29uZGl0aW9uYWwuXG4iIGlm ICRsZXZlbDsNCiAgICAgICAgfQ0KCUlnbm9yZUxpbmUoKTsNCiAgICB9DQp9DQoNCnN1YiBQcm9j ZXNzVGl0bGUNCnsNCiAgICBteSAkZGVsaW0gPSBSZWFkQ2hhcigpOw0KICAgIG15IEB3aWR0aCA9 ICgwLDAsMCk7DQogICAgbXkgKEB0aXRsZSwkZSk7DQogICAgZm9yZWFjaCBteSAkbiAoIDAsMSwy ICkNCiAgICB7DQoJd2hpbGUgKCBJc01vcmVJbnB1dCgpICkNCgl7DQoJICAgICRlID0gUmVhZENo YXIoKTsNCgkgICAgbGFzdCBpZiBBcmVFcXVhbCgkZSwkZGVsaW0pIG9yIElzTmV3bGluZSgkZSk7 DQoJICAgIGlmICggQXJlRXF1YWwoJGUsICRUaXRsZTo6UEMpICkNCgkgICAgew0KCQlmb3JlYWNo ICRlICggc3BsaXQoIC8vLCBSZWc6OlZhbHVlKCclJykgKSApDQoJCXsgDQoJCSAgICAkZSA9IE1h a2VDaGFyKCRlKSB1bmxlc3MgcmVmKCRlKTsNCgkJICAgICR3aWR0aFskbl0gKz0gJGUtPldpZHRo KCk7DQoJCSAgICBwdXNoIEB7JHRpdGxlWyRuXX0sICRlOw0KCQl9DQoJICAgIH0NCgkgICAgZWxz ZQ0KCSAgICB7DQoJCSRlID0gTWFrZUNoYXIoJGUpIHVubGVzcyByZWYoJGUpOw0KCQkkd2lkdGhb JG5dICs9ICRlLT5XaWR0aCgpOw0KCQlwdXNoIEB7JHRpdGxlWyRuXX0sICRlOw0KCSAgICB9DQog ICAgICAgIH0NCglsYXN0IGlmIElzTmV3bGluZSgkZSk7DQogICAgfQ0KICAgIElnbm9yZUxpbmUo KSB1bmxlc3MgSXNOZXdsaW5lKCRlKTsNCiAgICBteSAkZmlsbCA9IEVudjo6VGl0bGVMZW5ndGgo KS0+VmFsdWUoKSAtICR3aWR0aFswXSAtICR3aWR0aFsxXSAtICR3aWR0aFsyXTsNCiAgICAkZmls bCA9IDAgaWYgJGZpbGwgPCAwOw0KICAgIFBhZ2U6OkFkZExpbmUoIEB7JHRpdGxlWzBdfSwNCiAg ICAgICAgICAgICAgICAgICBQYXJzZTo6TWFrZU1vdGlvbihMaW5lOjpQb3J0aW9uV2lkdGgoJGZp bGwsMiwwKSwgMCksDQogICAgICAgICAgICAgICAgICAgQHskdGl0bGVbMV19LA0KICAgICAgICAg ICAgICAgICAgIFBhcnNlOjpNYWtlTW90aW9uKExpbmU6OlBvcnRpb25XaWR0aCgkZmlsbCwyLDEp LCAwKSwNCiAgICAgICAgICAgICAgICAgICBAeyR0aXRsZVsyXX0sIFBhcnNlOjpNYWtlTmV3TGlu ZSgpICk7DQp9DQoNCnN1YiBHZXRNYWNyb0RlZg0Kew0KICAgIG15IEBlbmQgPSBzcGxpdCggLy8s IHNoaWZ0ICk7DQogICAgQ29weU1vZGUoMSk7DQogICAgbXkgKEBwYXJ0cywgQGxpbmUpOw0KICAg IHdoaWxlICggISBJbnB1dDo6SXNFbXB0eSgpICkNCiAgICB7DQoJQGxpbmUgPSBHYXRoZXJVbnRp bCgiXG4iKTsNCglsYXN0IGlmIEFyZUVxdWFsTGlzdHMoIFxAZW5kLCBcQGxpbmUgKTsNCiAgICAg ICAgcHVzaCBAcGFydHMsIEBsaW5lLCAiXG4iOw0KICAgIH0NCiAgICBDb3B5TW9kZSgwKTsNCiAg ICBAcGFydHM7DQp9DQoNCnN1YiBUcmFuc2xhdGVDaGFycw0Kew0KICAgIG15IEBjaGFycyA9IEdh dGhlclVudGlsKCJcbiIsMSk7DQogICAgd2hpbGUgKCBAY2hhcnMgKQ0KICAgIHsNCiAgICAgICAg T3V0cHV0OjpNYXBDaGFyKCBzaGlmdChAY2hhcnMpLT5WYWx1ZSgpLA0KCQkJIChAY2hhcnMgPyBz aGlmdChAY2hhcnMpLT5WYWx1ZSgpIDogJyAnKSApOw0KICAgIH0NCn0NCg0KIyAubGkgLSBhIERF UFJFQ0FURUQgcm9mZiBjb21tYW5kOiB0cmVhdCB0aGUgbmV4dCBsaW5lIGFzIHRleHQuDQojIFVz ZWQgaW4gdGhlIDd0aCBlZGl0aW9uIG1hbiBwYWdlcy4NCg0KTWFjcm86OkJ1aWx0aW4oICdsaScs IDAsIHN1YiB7DQogICAgJF9mb3JjZV90ZXh0ID0gMTsNCn0gKTsNCg0KIyAtLS0gNy4gTWFjcm9z LCBTdHJpbmdzLCBEaXZlcnNpb24sIGFuZCBQb3NpdGlvbiBUcmFwcyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQoNCnBhY2thZ2UgTWFjcm87DQoNCiMgJU1hY3JvOjpfcmVxdWVzdCBwcm92aWRlcyB0 aGUgbmFtZXNwYWNlIGZvciBidWlsdGlucyBhbmQgbWFjcm9zLg0KIyBFYWNoIGlzIGEgYmxlc3Nl ZCBhcnJheSwgd2hpY2ggZm9yIGJ1aWx0aW5zIGNvbnRhaW5zIGEgcmVmIHRvIGEgc3ViDQojIGFu ZCBhIGNvdW50IG9mIGFyZ3VtZW50cyB0byBwYXJzZS4gIA0KIyBBIG1hY3JvIGlzIGFuIGFycmF5 IG9mIGNoYXJzIG9yIFByaW50RWxlbWVudHMuDQoNCiMgTWFjcm86OkJ1aWx0aW4oICRuYW1lLCAk bnVtYmVyX29mX2FyZ3MsICRzdWIgKSBkZWZpbmVzIGEgYnVpbHQtaW4gcmVxdWVzdC4NCiMgVGhl ICRudW1iZXJfb2ZfYXJncyBjb250cm9scyB0aGUgYXV0b21hdGljIHBhcnNpbmcgb2YgYXJndW1l bnRzLg0KIyBJZiB5b3Ugc3BlY2lmeSAwIGFyZ3MsIHRoZSByZXN0IG9mIHRoZSBsaW5lIHdpbGwg c3RpbGwgYmUgY29uc3VtZWQsDQojIHNvIHNwZWNpZnkgLTEgaWYgdGhlIGJ1aWx0aW4gd2lsbCBk byBhIHNwZWNpYWwgcGFyc2Ugd2hlbiBpdCBpcyBydW4uDQoNCnN1YiBCdWlsdGluICAgeyAkTWFj cm86Ol9yZXF1ZXN0eyRfWzBdfSA9IGJsZXNzKFsgJF9bMV0sICRfWzJdIF0sICdCdWlsdGluJyk7 IH0NCnN1YiBJc0RlZmluZWQgeyBkZWZpbmVkICRNYWNybzo6X3JlcXVlc3R7c2hpZnQoKX07IH0N CnN1YiBJc01hY3JvICAgeyBJc0RlZmluZWQoJF9bMF0pIGFuZCByZWYoJE1hY3JvOjpfcmVxdWVz dHskX1swXX0pIGVxICdNYWNybyc7IH0NCg0KIyBNYWNyb3MgYXJlICJydW4iIGJ5IGhvb2tpbmcg dGhlbSB1cCBhcyBhbiBpbnB1dCBzb3VyY2UuDQojIFRoZSBmbGFnICRub19wYXJzZSBzdXBwcmVz c2VzIHRoZSBwYXJzaW5nIG9mIGFyZ3VtZW50cyANCiMgZm9yIG1hY3JvcyBpbnZva2VkIGFzIHRy YXBzIG9yIHN0cmluZyBpbnRlcnBvbGF0aW9uLg0KDQpzdWIgUnVuDQp7DQogICAgbXkgKCRtZSwk bm9fcGFyc2UpID0gQF87DQogICAgbXkgJGEgPSBbIFBhcnNlOjpHZXRNYWNyb0FyZ3MoKSBdIHVu bGVzcyAkbm9fcGFyc2U7DQogICAgbXkgJHQgPSBbIG1hcCggKHJlZigkXykgPyAkXy0+Q2xvbmUo KSA6ICRfKSwgQCRtZSApIF07DQogICAgSW5wdXQ6OlB1c2hDb250ZXh0KCBNYWNyb0NvbnRleHQt Pm5ldyggJHQsICRhICkgKTsNCn0NCg0KIyBCdWlsdGlucyBhcmUgcnVuIGltbWVkaWF0ZWx5IHdo ZW4gaW52b2tlZDoNCg0Kc3ViIEJ1aWx0aW46OlJ1bg0Kew0KICAgIG15ICRtZSA9IHNoaWZ0Ow0K ICAgIG15ICRub19wYXJzZSA9IHNoaWZ0Ow0KICAgIG15IEBhcmdzID0gUGFyc2U6OkdldEJ1aWx0 aW5BcmdzKCRtZS0+WzBdKSB1bmxlc3MgJG5vX3BhcnNlOw0KICAgICRtZS0+WzFdLT4oIEBhcmdz ICk7DQp9DQoNCnN1YiBNYWNyb0NvbnRleHQ6Om5ldyAgICAgICB7IGJsZXNzKCB7VEVYVCA9PiAk X1sxXSwgQVJHUyA9PiAkX1syXX0sICRfWzBdICkgfQ0Kc3ViIE1hY3JvQ29udGV4dDo6SXNFbXB0 eSAgIHsgISBAeyRfWzBde1RFWFR9fSB9DQpzdWIgTWFjcm9Db250ZXh0OjpQZWVrQ2hhciAgeyAk X1swXS0+e1RFWFR9WzBdIH0NCnN1YiBNYWNyb0NvbnRleHQ6OlJlYWRDaGFyICB7IHNoaWZ0IEB7 JF9bMF0tPntURVhUfX0gfQ0Kc3ViIE1hY3JvQ29udGV4dDo6VG90YWxBcmdzIHsgcmVmKCRfWzBd e0FSR1N9KSA/IHNjYWxhcihAeyRfWzBde0FSR1N9fSkgOiAwIH0NCg0Kc3ViIE1hY3JvQ29udGV4 dDo6T3BlbkFyZ04NCnsNCiAgICBteSAoJG1lLCRuKSA9IEBfOw0KICAgIGlmICggJG4gZXEgJyon IGFuZCAkR3JvZmZDb21wYXRpYmxlICkNCiAgICB7DQogICAgICAgIGZvcmVhY2ggbXkgJGFyZyAo IHJldmVyc2UgQHskbWUtPntBUkdTfX0gKQ0KCXsNCgkgICAgdW5zaGlmdCBAeyRtZS0+e1RFWFR9 fSwgbWFwKCAocmVmKCRfKSA/ICRfLT5DbG9uZSgpIDogJF8pLCBAJGFyZyApOw0KCSAgICB1bnNo aWZ0IEB7JG1lLT57VEVYVH19LCAnICc7DQoJfQ0KCXNoaWZ0IEB7JG1lLT57VEVYVH19Ow0KICAg IH0NCiAgICBlbHNpZiAoICRuID4gMCBhbmQgJG4gPD0gJG1lLT5Ub3RhbEFyZ3MoKSApDQogICAg ew0KICAgICAgICBteSAkYXJnID0gJG1lLT57QVJHU31bJG4tMV07DQogICAgICAgIHVuc2hpZnQo IEB7JG1lLT57VEVYVH19LCBtYXAoIChyZWYoJF8pID8gJF8tPkNsb25lKCkgOiAkXyksIEAkYXJn ICkgKTsNCiAgICB9DQp9DQoNCiMgSW52b2tlKCRuYW1lLCRub19wYXJzZSkgcnVucyB0aGUgbmFt ZWQgYnVpbHRpbiByZXF1ZXN0IG9yIG1hY3JvLg0KIyBUaGUgZmxhZyAkbm9fcGFyc2UgaW5kaWNh dGVzIHRoaXMgaXMgYSB0cmFwIG9yIGludGVycG9sYXRlZCBtYWNybzoNCg0Kc3ViIEludm9rZQ0K ew0KICAgIG15ICRuYW1lID0gc2hpZnQ7DQogICAgbXkgJG5vX3BhcnNlID0gc2hpZnQ7DQogICAg aWYgKCBJc0RlZmluZWQoICRuYW1lICkgKQ0KICAgIHsNCgkkTWFjcm86Ol9yZXF1ZXN0eyRuYW1l fS0+UnVuKCRub19wYXJzZSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQoJUGFyc2U6Oklnbm9y ZUxpbmUoKSB1bmxlc3MgJG5vX3BhcnNlOw0KICAgIH0NCn0NCg0Kc3ViIEFkZERlZmluaXRpb24N CnsgDQogICAgbXkgJG5hbWUgPSBzaGlmdDsNCiAgICBteSAkZW5kID0gKCBkZWZpbmVkKCRfWzBd KSA/ICIuJF9bMF0iIDogJy4uJyApOw0KICAgIG15IEBwYXJ0cyA9IFBhcnNlOjpHZXRNYWNyb0Rl ZiggJGVuZCApOw0KICAgIHB1c2ggQHskTWFjcm86Ol9yZXF1ZXN0eyRuYW1lfX0sIEBwYXJ0cyBp ZiBkZWZpbmVkICRuYW1lOw0KfQ0KDQpzdWIgQXBwZW5kDQp7IA0KICAgIG15ICRuYW1lID0gc2hp ZnQ7DQogICAgcHVzaCggQHskTWFjcm86Ol9yZXF1ZXN0eyRuYW1lfX0sIEBfICkgaWYgZGVmaW5l ZCAkbmFtZTsNCn0NCg0KQnVpbHRpbiggJ2lnJywgMSwgc3ViIHsgICAgICAgICAgICAgICAgICAg ICAgICAgIyAuaWcgLSBpZ25vcmUgaW5wdXQNCiAgICBteSAkZW5kID0gKCBkZWZpbmVkKCRfWzBd KSA/ICIuJF9bMF0iIDogJy4uJyApOw0KICAgIFBhcnNlOjpHZXRNYWNyb0RlZiggJGVuZCApOyB9 ICk7DQoNCkJ1aWx0aW4oICdkZScsIDIsIHN1YiB7ICAgICAgICAgICAgICAgICAgICAgICAgICMg LmRlIC0gZGVmaW5lIG1hY3JvDQogICAgJE1hY3JvOjpfcmVxdWVzdHskX1swXX0gPSBibGVzcyBb XTsNCiAgICBBZGREZWZpbml0aW9uKCAkX1swXSwgJF9bMV0gKTsgfSApOw0KDQpCdWlsdGluKCAn YW0nLCAyLCBzdWIgeyAgICAgICAgICAgICAgICAgICAgICAgICAjIC5hbSAtIGFwcGVuZCBtYWNy bw0KICAgICRNYWNybzo6X3JlcXVlc3R7JF9bMF19ID0gYmxlc3MgW10gdW5sZXNzIElzTWFjcm8o JF9bMF0pOw0KICAgIEFkZERlZmluaXRpb24oICRfWzBdLCAkX1sxXSApOyB9ICk7DQoNCkJ1aWx0 aW4oICdkcycsIC0xLCBzdWIgeyAgICAgICAgICAgICAgICAgICAgICAgICMgLmRzIC0gZGVmaW5l IHN0cmluZw0KICAgIG15ICgkbmFtZSxAcGFydHMpID0gUGFyc2U6OkdldE1hY3JvU3RyaW5nRGVm KCk7DQogICAgJE1hY3JvOjpfcmVxdWVzdHskbmFtZX0gPSBibGVzcyBbIEBwYXJ0cyBdOw0KfSAp Ow0KDQpCdWlsdGluKCAnYXMnLCAtMSwgc3ViIHsgICAgICAgICAgICAgICAgICAgICAgICAjIC5h cyAtIGFwcGVuZCBzdHJpbmcNCiAgICBteSAoJG5hbWUsQHBhcnRzKSA9IFBhcnNlOjpHZXRNYWNy b1N0cmluZ0RlZigpOw0KICAgICRNYWNybzo6X3JlcXVlc3R7JG5hbWV9ID0gYmxlc3MgW10gdW5s ZXNzIElzTWFjcm8oJG5hbWUpOw0KICAgIHB1c2ggQHskTWFjcm86Ol9yZXF1ZXN0eyRuYW1lfX0s IEBwYXJ0czsNCn0gKTsNCg0KQnVpbHRpbiggJ3JtJywgMSwgc3ViIHsgICAgICAgICAgICAgICAg ICAgICAgICAgIyAucm0gLSByZW1vdmUgbWFjcm8NCiAgICBmb3JlYWNoIChAXykgeyBkZWxldGUg JE1hY3JvOjpfcmVxdWVzdHskX307IH0gfSApOw0KDQpCdWlsdGluKCAncm4nLCAyLCBzdWIgeyAg ICAgICAgICAgICAgICAgICAgICAgICAjIC5ybiAtIHJlbmFtZSBtYWNybw0KICAgICRNYWNybzo6 X3JlcXVlc3R7JF9bMV19ID0gJE1hY3JvOjpfcmVxdWVzdHskX1swXX07DQogICAgZGVsZXRlICRN YWNybzo6X3JlcXVlc3R7JF9bMF19OyB9ICk7DQoNCkJ1aWx0aW4oICdkaScsIDEsIHN1YiB7ICAg ICAgICAgICAgICAgICAgICAgICAgICMgLmRpIC0gZGl2ZXJ0IG91dHB1dA0KICAgIGlmICggJF9b MF0gKQ0KICAgIHsNCiAgICAgICAgJE1hY3JvOjpfcmVxdWVzdHskX1swXX0gPSBibGVzcyBbXTsN CiAgICAgICAgRGl2ZXJzaW9uOjpEaXZlcnRUbyggJF9bMF0gKTsNCiAgICB9DQogICAgZWxzZQ0K ICAgIHsNCiAgICAgICAgRGl2ZXJzaW9uOjpFbmREaXZlcnQoKTsNCiAgICB9DQp9ICk7DQoNCkJ1 aWx0aW4oICdkYScsIDEsIHN1YiB7ICAgICAgICAgICAgICAgICAgICAgICAgICMgLmRhIC0gZGl2 ZXJ0LCBhcHBlbmRpbmcNCiAgICBpZiAoICRfWzBdICkNCiAgICB7DQogICAgICAgICRNYWNybzo6 X3JlcXVlc3R7JF9bMF19ID0gYmxlc3MgW10gdW5sZXNzIElzTWFjcm8oICRfWzBdICk7DQogICAg ICAgIERpdmVyc2lvbjo6RGl2ZXJ0VG8oICRfWzBdICk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7 DQogICAgICAgIERpdmVyc2lvbjo6RW5kRGl2ZXJ0KCk7DQogICAgfQ0KfSApOw0KDQpCdWlsdGlu KCAnd2gnLCAyLCBzdWIgeyAgICAgICAgICAgICAgICAgICAgICAgICAjIC53aCAtICh3aGVuKSBz ZXQgcGFnZSB0cmFwDQogICAgbXkgJHdoZXJlID0gU2NhbGU6OkV4cHIoJF9bMF0sICd2Jyk7DQog ICAgJHdoZXJlICs9IFBhZ2U6Okxlbmd0aCgpIGlmICR3aGVyZSA8IDA7DQogICAgVHJhcDo6U2V0 KCAkd2hlcmUsICRfWzFdICk7IH0gKTsNCg0KQnVpbHRpbiggJ2NoJywgMiwgc3ViIHsgICAgICAg ICAgICAgICAgICAgICAgICAgIyAuY2ggLSBjaGFuZ2UgcGFnZSB0cmFwDQogICAgbXkgJHdoZXJl ID0gU2NhbGU6OkV4cHIoJF9bMV0sICd2Jyk7DQogICAgJHdoZXJlICs9IFBhZ2U6Okxlbmd0aCgp IGlmICR3aGVyZSA8IDA7DQogICAgVHJhcDo6TW92ZSggJF9bMF0sICR3aGVyZSApIH0gKTsNCg0K QnVpbHRpbiggJ2R0JywgMiwgc3ViIHsgICAgICAgICAgICAgICAgICAgICAgICAgIyAuZHQgLSBk aXZlcnNpb24gdHJhcA0KICAgIGlmICggQF8gPT0gMiApDQogICAgew0KICAgICAgICBteSAkd2hl cmUgPSBTY2FsZTo6RXhwcigkX1swXSwgJ3YnKTsNCiAgICAgICAgRGl2ZXJzaW9uOjpUcmFwKCB7 IFdIRVJFID0+ICR3aGVyZSwgV0hBVCA9PiAkX1sxXSB9ICk7DQogICAgfQ0KICAgIGVsc2UNCiAg ICB7DQogICAgICAgIERpdmVyc2lvbjo6VHJhcCggdW5kZWYgKTsNCiAgICB9DQp9ICk7DQoNCkJ1 aWx0aW4oICdpdCcsIDIsIHN1YiB7ICAgICAgICAgICAgICAgICAgICAgICAgICMgLml0IC0gaW5w dXQgbGluZSBjb3VudCB0cmFwDQogICAgSW5wdXRUcmFwOjpTZXQoU2NhbGU6OkV4cHIoJF9bMF0p LCAkX1sxXSk7IH0gKTsNCg0KQnVpbHRpbiggJ2VtJywgMSwgc3ViIHsgICAgICAgICAgICAgICAg ICAgICAgICAgIyAuZW0gLSBlbmRpbmcgbWFjcm8NCiAgICAkbWFpbjo6RW5kTWFjcm8gPSAkX1sw XSBpZiBkZWZpbmVkKCAkX1swXSApOyB9ICk7DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KcGFj a2FnZSBJbnB1dFRyYXA7DQoNCiMgSW5wdXQgbGluZSBjb3VudCB0cmFwOiAgd2UgZGVjcmVtZW50 IHRoZSBnaXZlbiBjb3VudCBmb3IgZWFjaCBpbnB1dCBsaW5lLA0KIyBhbmQgc3ByaW5nIHRoZSB0 cmFwIHdoZW4gdGhlIGNvdW50IGlzIHplcm8uDQoNCnN1YiBTZXQNCnsNCiAgICBFbnY6OklucHV0 VHJhcENvdW50KCBzaGlmdCApOw0KICAgIEVudjo6SW5wdXRUcmFwTWFjcm8oIHNoaWZ0ICk7DQp9 DQoNCnN1YiBDb3VudExpbmUNCnsNCiAgICBpZiAoIGRlZmluZWQoIEVudjo6SW5wdXRUcmFwTWFj cm8oKSApIGFuZCAoIEVudjo6SW5wdXRUcmFwQ291bnQoKSA+IDAgKSApDQogICAgew0KICAgICAg ICBpZiAoIEVudjo6SW5wdXRUcmFwQ291bnQoIEVudjo6SW5wdXRUcmFwQ291bnQoKSAtIDEgKSA9 PSAwICkNCiAgICAgICAgew0KICAgICAgICAgICAgTWFjcm86Okludm9rZSggRW52OjpJbnB1dFRy YXBNYWNybygpLCAxICk7DQoJICAgICRUcmFwOjpQZW5kaW5nID0gMTsNCiAgICAgICAgfQ0KICAg IH0NCn0NCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpwYWNrYWdlIFRyYXA7DQoNCiMgUGFnZSBv ciBwb3NpdGlvbiB0cmFwcy4gIFRoZSBkb2N1bWVudGVkIGJlaGF2aW9yIGltcGxpZXMgdGhhdCB3 ZSBtdXN0DQojIHByZXNlcnZlIHRoZSBvcmRlciBpbiB3aGljaCB0cmFwcyBhcmUgY3JlYXRlZCwg c28gd2UganVzdCBhcHBlbmQgbmV3DQojIHRyYXBzIHRvIHRoZSBsaXN0IGFuZCBzZWFyY2ggaXQg aW4gdGhhdCBvcmRlci4NCiMgICAgIHRyYXAtPntXSEVSRX0gaXMgYSB2ZXJ0aWNhbCBwb3NpdGlv biBpbiBpbnRlcm5hbCB1bml0cw0KIyAgICAgdHJhcC0+e1dIQVR9IGlzIG5hbWUgb2YgdGhlIG1h Y3JvIHRvIHRyaWdnZXINCiMgVGhlcmUgaXMgYWxzbyB0aGUgZGl2ZXJzaW9uIHRyYXAsIGlmIGFu eSwgd2l0aCB0aGUgY3VycmVudCBkaXZlcnNpb24uDQoNCiMgUmV0dXJuIGEgcmVmZXJlbmNlIHRv IHRoZSBuZXh0IHRyYXAgYmV5b25kIHRoZSBjdXJyZW50IHBvc2l0aW9uDQoNCnN1YiBOZXh0DQp7 DQogICAgbXkgJHdoZXJlID0gRGl2ZXJzaW9uOjpWZXJ0aWNhbFBvc2l0aW9uKCk7DQogICAgbXkg JG5leHQ7DQogICAgJG5leHQgPSBEaXZlcnNpb246OlRyYXAoKSANCglpZiAoIERpdmVyc2lvbjo6 VHJhcCgpIGFuZCAoIERpdmVyc2lvbjo6VHJhcCgpLT57V0hFUkV9ID4gJHdoZXJlICkNCgkgICAg YW5kIE1hY3JvOjpJc0RlZmluZWQoIERpdmVyc2lvbjo6VHJhcCgpLT57V0hBVH0gKSApOw0KICAg IGZvcmVhY2ggbXkgJHRyYXAgKCBAVHJhcDo6X2xpc3QgKQ0KICAgIHsNCiAgICAgICAgaWYgKCAo ICR0cmFwLT57V0hFUkV9ID4gJHdoZXJlICkgDQoJICAgICYmICggISAkbmV4dCB8fCAoICR0cmFw LT57V0hFUkV9IDwgJG5leHQtPntXSEVSRX0gKSApICkNCgl7DQoJICAgICRuZXh0ID0gJHRyYXAg aWYgTWFjcm86OklzRGVmaW5lZCggJHRyYXAtPntXSEFUfSApOw0KCX0NCiAgICB9DQogICAgJG5l eHQ7DQp9DQoNCiMgUmV0dXJuIHRoZSBkaXN0YW5jZSAoaW50ZXJuYWwgdW5pdHMpIHRvIHRoZSBu ZXh0IHBhZ2UgdHJhcCBvciBwYWdlIGJvdHRvbQ0KDQpzdWIgRGlzdGFuY2VUb05leHQNCnsNCiAg ICBteSAkdHJhcCA9IE5leHQoKTsNCiAgICBteSAkdGhlcmUgPSAkdHJhcCA/ICR0cmFwLT57V0hF UkV9IDogUGFnZTo6TGVuZ3RoKCk7DQogICAgKCR0aGVyZSAtIERpdmVyc2lvbjo6VmVydGljYWxQ b3NpdGlvbigpKTsNCn0NCg0KIyBTZXQoJHdoZXJlLCR3aGF0KQ0KIyBPbmx5IHNldCB0aGUgdHJh cCBpZiAkd2hlcmUgaXMgbm90IGFscmVhZHkgdXNlZC4NCiMgSWYgJHdoYXQgaXMgbnVsbCwgZGVs ZXRlIHRoZSB0cmFwIGF0ICR3aGVyZSAoaWYgYW55LikNCg0Kc3ViIFNldA0Kew0KICAgIG15ICgk d2hlcmUsJHdoYXQpID0gQF87DQogICAgJHdoZXJlID0gU2NhbGU6OlJvdW5kVmVydGljYWwoJHdo ZXJlKTsNCiAgICBteSAkaTsNCiAgICBmb3JlYWNoIG15ICR0cmFwICggQFRyYXA6Ol9saXN0ICkN CiAgICB7DQogICAgICAgIGlmICggJHRyYXAtPntXSEVSRX0gPT0gJHdoZXJlICkNCiAgICAgICAg ew0KICAgICAgICAgICAgc3BsaWNlKCBAVHJhcDo6X2xpc3QsICRpLCAxICkgdW5sZXNzIGRlZmlu ZWQgJHdoYXQ7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCgkrKyRpOw0KICAgIH0N CiAgICBwdXNoKCBAVHJhcDo6X2xpc3QsIHsgV0hFUkUgPT4gJHdoZXJlLCBXSEFUID0+ICR3aGF0 IH0gKSBpZiBkZWZpbmVkICR3aGF0Ow0KfQ0KDQpzdWIgTW92ZQ0Kew0KICAgIG15ICgkd2hhdCwk d2hlcmUpID0gQF87DQogICAgJHdoZXJlID0gU2NhbGU6OlJvdW5kVmVydGljYWwoJHdoZXJlKTsN CiAgICBteSAkaTsNCiAgICBmb3JlYWNoIG15ICR0cmFwICggQFRyYXA6Ol9saXN0ICkNCiAgICB7 DQogICAgICAgIGlmICggJHRyYXAtPntXSEFUfSBlcSAkd2hhdCApDQogICAgICAgIHsNCiAgICAg ICAgICAgIGlmICggZGVmaW5lZCAkd2hlcmUgKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICR0cmFwLT57V0hFUkV9ID0gJHdoZXJlOw0KICAgICAgICAgICAgfQ0KCSAgICBlbHNlDQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3BsaWNlKCBAVHJhcDo6X2xpc3QsICRpLCAx ICk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBsYXN0Ow0KICAgICAgICB9DQoJKyskaTsN CiAgICB9DQp9DQoNCnN1YiBTcHJpbmcNCnsNCiAgICBteSAkdHJhcCA9IHNoaWZ0Ow0KICAgIE1h Y3JvOjpJbnZva2UoICR0cmFwLT57V0hBVH0sIDEgKTsNCiAgICAkVHJhcDo6UGVuZGluZyA9IDE7 DQp9DQoNCnN1YiBTcHJpbmdUb3BUcmFwDQp7DQogICAgZm9yZWFjaCBteSAkdHJhcCAoIEBUcmFw OjpfbGlzdCApDQogICAgew0KICAgICAgICBpZiAoICR0cmFwLT57V0hFUkV9ID09IDAgKQ0KCXsN CgkgICAgU3ByaW5nKCAkdHJhcCApOw0KICAgICAgICAgICAgbGFzdDsNCgl9DQogICAgfQ0KfQ0K DQojIC0tLSA4LiBOdW1iZXIgcmVnaXN0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnBhY2thZ2UgUmVnOw0KDQp1c2UgdmFycyBxd3sgJV9y ZWcgJV9wcmVkZWZpbmVkICVfVGVuT2YgJV9GaXZlT2YgfTsNCg0KIyAkX3JlZ3tuYW1lfXtOVU19 IGlzIHRoZSB2YWx1ZSwNCiMgJF9yZWd7bmFtZX17SU5DUn0gaXMgdGhlIGluY3JlbWVudCwNCiMg JF9yZWd7bmFtZX17Rk1UfSBpcyB0aGUgcHJpbnQgZm9ybWF0Lg0KDQpNYWNybzo6QnVpbHRpbigg J25yJywgMywgc3ViIHsgCQkJIyAubnIgLSBkZWZpbmUgbnVtYmVyIHJlZ2lzdGVyDQogICAgbXkg KCRuYW1lLCRleHByLCRpbmNyKSA9IEBfOw0KICAgICRleHByID0gMCB1bmxlc3MgJGV4cHI7DQog ICAgJF9yZWd7JG5hbWV9e05VTX0gPSAwIHVubGVzcyBkZWZpbmVkICRfcmVneyRuYW1lfXtOVU19 Ow0KICAgICRfcmVneyRuYW1lfXtOVU19ID0gKCRleHByID1+IC9eWystXS8pDQogICAgICAgID8g KCAkX3JlZ3skbmFtZX17TlVNfSArIFNjYWxlOjpFeHByKCRleHByLCd1JykgKQ0KICAgICAgICA6 IFNjYWxlOjpFeHByKCRleHByLCd1Jyk7DQogICAgJF9yZWd7JG5hbWV9e0lOQ1J9ID0gU2NhbGU6 OkV4cHIoJGluY3IsJ3UnKSBpZiBkZWZpbmVkICRpbmNyOw0KICAgICRfcmVneyRuYW1lfXtGTVR9 ID0gJzEnIHVubGVzcyAkX3JlZ3skbmFtZX17Rk1UfTsNCn0gKTsNCg0KTWFjcm86OkJ1aWx0aW4o ICdycicsIDEsIHN1YiB7CQkJIyAucnIgLSByZW1vdmUgbnVtYmVyIHJlZ2lzdGVyDQogICAgZm9y ZWFjaCAoQF8pIHsgZGVsZXRlICRfcmVneyRfWzBdfTsgfSB9ICk7DQoNCk1hY3JvOjpCdWlsdGlu KCAnYWYnLCAyLCBzdWIgewkJCSMgLmFmIC0gYXNzaWduIGZvcm1hdA0KICAgICRfcmVneyRfWzBd fXtGTVR9ID0gKCAkX1sxXSA9fiAvXihcZCt8W2lJYUFdKSQvICkNCiAgICAgICAgPyAkX1sxXSA6 ICcxJzsNCn0gKTsNCg0KJV9wcmVkZWZpbmVkID0gKCAgICAgICAgICAgICAgICAgICAjIFJlYWQt b25seSByZWdpc3RlcnMNCiAgICAnJCQnID0+IHN1YiB7ICQkIH0sDQogICAgJy4kJyA9PiBzdWIg eyBJbnB1dDo6VG90YWxBcmdzKCkgfSwgICAgIycNCiAgICAnLkEnID0+IHN1YiB7IDEgfSwNCiAg ICAnLmMnID0+IHN1YiB7IElucHV0OjpMaW5lTnVtYmVyKCkgfSwNCiAgICAnLmQnID0+IHN1YiB7 IERpdmVyc2lvbjo6VmVydGljYWxQb3NpdGlvbigpIH0sDQogICAgJy5GJyA9PiBzdWIgeyBJbnB1 dDo6Tm93UGxheWluZygpIH0sDQogICAgJy5mJyA9PiBzdWIgeyBGb250OjpOYW1lKCkgfSwNCiAg ICAnLmgnID0+IHN1YiB7IERpdmVyc2lvbjo6SGlnaHdhdGVyKCkgfSwNCiAgICAnLmknID0+IHN1 YiB7IEVudjo6SW5kZW50KCkgfSwNCiAgICAnLmonID0+IHN1YiB7IG9yZCggRW52OjpBZGp1c3RU eXBlKCkgKSB9LA0KICAgICcubCcgPT4gc3ViIHsgRW52OjpMaW5lTGVuZ3RoKCkgfSwNCiAgICAn Lm8nID0+IHN1YiB7IFBhZ2U6Ok9mZnNldCgpIH0sDQogICAgJy5wJyA9PiBzdWIgeyBQYWdlOjpM ZW5ndGgoKSB9LA0KICAgICcuUicgPT4gc3ViIHsgMTAwMDAgfSwNCiAgICAnLnMnID0+IHN1YiB7 IDEwIH0sDQogICAgJy50JyA9PiBzdWIgeyBUcmFwOjpEaXN0YW5jZVRvTmV4dCgpIH0sDQogICAg Jy5UJyA9PiBzdWIgeyAxIH0sDQogICAgJy51JyA9PiBzdWIgeyAhIEVudjo6Tm9GaWxsKCkgfSwN CiAgICAnLnYnID0+IHN1YiB7IEVudjo6VigpIH0sDQogICAgJy56JyA9PiBzdWIgeyBEaXZlcnNp b246Ok1hY3JvTmFtZSgpIH0sDQopOw0KDQpteSBAdGltZSA9IGxvY2FsdGltZSh0aW1lKCkpOw0K U2V0KCAnZHcnLCAkdGltZVs2XSsxICk7DQpTZXQoICdkeScsICR0aW1lWzNdICk7DQpTZXQoICdt bycsICR0aW1lWzRdKzEgKTsNClNldCggJ3lyJywgc3Vic3RyKCR0aW1lWzVdLC0yLDIpICk7ICAg ICMganVzdCBsYXN0IDIgZGlnaXRzIG9mIHllYXINCg0Kc3ViIFZhbHVlDQp7DQogICAgbXkgKCRu YW1lLCRpbmNyKSA9IEBfOw0KICAgIHJldHVybiBUb0Zvcm1hdCggJF9wcmVkZWZpbmVkeyRuYW1l fS0+KCksICRfcmVneyRuYW1lfXtGTVR9ICkNCiAgICAgICAgaWYgZGVmaW5lZCAkX3ByZWRlZmlu ZWR7JG5hbWV9Ow0KICAgICRfcmVneyRuYW1lfXtOVU19ID0gMCB1bmxlc3MgZGVmaW5lZCggJF9y ZWd7JG5hbWV9e05VTX0gKTsNCiAgICBpZiAoICRpbmNyIGFuZCBkZWZpbmVkKCAkX3JlZ3skbmFt ZX17SU5DUn0gKSApDQogICAgew0KICAgICAgICAkX3JlZ3skbmFtZX17TlVNfSArPSAkX3JlZ3sk bmFtZX17SU5DUn0gaWYgJGluY3IgZXEgJysnOw0KICAgICAgICAkX3JlZ3skbmFtZX17TlVNfSAt PSAkX3JlZ3skbmFtZX17SU5DUn0gaWYgJGluY3IgZXEgJy0nOw0KICAgIH0NCiAgICBteSAkdiA9 IFRvRm9ybWF0KCAkX3JlZ3skbmFtZX17TlVNfSwgJF9yZWd7JG5hbWV9e0ZNVH0gKTsNCiAgICAk djsNCn0NCg0Kc3ViIEZvcm1hdE9mIHsgJF9yZWd7JF9bMF19e0ZNVH07IH0NCnN1YiBTZXQgICAg ICB7ICRfcmVneyRfWzBdfXtOVU19ID0gJF9bMV07IH0NCg0KIyBUcm9mZiB1c2VzIHogYW5kIHcg dG8gcmVwcmVzZW50IDEwMDAwIGFuZCA1MDAwIHJlc3BlY3RpdmVseS4NCg0KJV9UZW5PZiAgPSAo ICdpJz0+J3gnLCAneCc9PidjJywgJ2MnPT4nbScsICdtJz0+J3onICk7DQolX0ZpdmVPZiA9ICgg J2knPT4ndicsICd4Jz0+J2wnLCAnYyc9PidkJywgJ20nPT4ndycgKTsNCg0Kc3ViIFRvUm9tYW5O dW1lcmFscw0Kew0KICAgIG15ICRuID0gaW50IHNoaWZ0Ow0KICAgIHJldHVybiAkbiBpZiAoJG4g PiA5OTk5OSBvciAkbiA8IDApOw0KICAgIG15ICRyID0gam9pbignJywgcmV2ZXJzZSBtYXAoKCRf IHggKGNob3AoJG4pfHwwKSksIHF3KGkgeCBjIG0geikpKTsNCiAgICAkciA9fiBzLyhbbWN4aV0p XDF7OH0vJDEkX1Rlbk9meyQxfS9nOw0KICAgICRyID1+IHMvKFttY3hpXSlcMXs0fS8kX0ZpdmVP ZnskMX0vZzsNCiAgICAkciA9fiBzLyhbbWN4aV0pXDF7M30vJDEkX0ZpdmVPZnskMX0vZzsNCiAg ICAkciB8fCAnMCc7DQp9DQoNCnN1YiBUb0FiYw0Kew0KICAgIG15ICRuID0gaW50IHNoaWZ0Ow0K ICAgIHJldHVybiAkbiBpZiAoJG4gPCAwKTsNCiAgICBteSAkczsNCiAgICB3aGlsZSAoICRuICkN CiAgICB7DQogICAgICAgICRzID0gY2hyKCAoKCRuLTEpICUgMjYpICsgb3JkKCdhJykgKSAuICRz Ow0KICAgICAgICAkbiA9IGludCgoJG4tMSkgLyAyNik7DQogICAgfQ0KICAgICRzIHx8ICcwJzsN Cn0NCg0Kc3ViIFRvRm9ybWF0DQp7DQogICAgbXkgKCRuLCRmKSA9IEBfOw0KICAgICRuID0gJzAn IHVubGVzcyAkbjsNCiAgICByZXR1cm4gJG4gdW5sZXNzICRmOw0KICAgIHJldHVybiBUb1JvbWFu TnVtZXJhbHMoJG4pICAgICAgICAgIGlmICRmIGVxICdpJzsNCiAgICByZXR1cm4gdWMoIFRvUm9t YW5OdW1lcmFscygkbikgKSAgICBpZiAkZiBlcSAnSSc7DQogICAgcmV0dXJuIFRvQWJjKCRuKSAg ICAgICAgICAgICAgICAgICAgaWYgJGYgZXEgJ2EnOw0KICAgIHJldHVybiB1YyggVG9BYmMoJG4p ICkgICAgICAgICAgICAgIGlmICRmIGVxICdBJzsNCiAgICBteSAkd2lkdGggPSBsZW5ndGgoJGYp Ow0KICAgICggJHdpZHRoID8gc3ByaW50ZiggIiUwJHt3aWR0aH1kIiwgJG4gKSA6ICRuICk7DQp9 DQoNCiMgLS0tIDkuIFRhYnMsIExlYWRlcnMsIGFuZCBGaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpwYWNrYWdlIFRhYjsNCg0KIyBUYWJzIHdpbGwg YmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgdGhlIG91dHB1dCBkZXZpY2UgaXMgbG9hZGVkLA0KIyBzaW5j ZSBzY2FsZWQgdmFsdWVzIGRlcGVuZCBvbiB0aGUgZGV2aWNlIHJlc29sdXRpb24uDQoNCnN1YiBJ bml0DQp7DQogICAgJEZpZWxkOjpEZWxpbSA9ICRGaWVsZDo6UGFkID0gJyc7DQogICAgZm9yZWFj aCAoIDAsMSwyICkNCiAgICB7DQogICAgICAgIEVudjo6Q2hhbmdlVG8oJF8pOw0KCVNldFRhYnMo ICgnKzAuOGknKSB4IDEwICk7DQoJRW52OjpDaGFuZ2VUbygpOyAgICAgICAgICAgICAjIHBvcCBl bnZpcm9ubWVudCBzdGFjaw0KICAgIH0NCn0NCg0Kc3ViIFNldFRhYnMNCnsNCiAgICBteSBAc3Rv cHMgPSBAXzsNCiAgICBteSAkZGlzdGFuY2UgPSAwOw0KICAgIG15ICR0eXBlOw0KICAgIEB7RW52 OjpUYWJTdG9wcygpfSA9ICgpOw0KICAgIGZvcmVhY2ggbXkgJHMgKCBAc3RvcHMgKQ0KICAgIHsN CiAgICAgICAgJHR5cGUgPSAnJzsNCiAgICAgICAgJHMgPX4gL14oLispKFtSQ10pJC8gYW5kICgk cyA9ICQxKSBhbmQgKCR0eXBlID0gJDIpOw0KICAgICAgICAkZGlzdGFuY2UgPSAoICRzID1+IC9e XCsvICkgDQogICAgICAgICAgICAgICAgICA/ICggJGRpc3RhbmNlICsgU2NhbGU6OkV4cHIoJHMs J20nKSApDQogICAgICAgICAgICAgICAgICA6IFNjYWxlOjpFeHByKCRzLCdtJyk7DQogICAgICAg IG5leHQgaWYgKCAkZGlzdGFuY2UgPD0gMCApOw0KICAgICAgICBwdXNoIEB7RW52OjpUYWJTdG9w cygpfSwgeyBXSEVSRSA9PiAkZGlzdGFuY2UsIFRZUEUgPT4gJHR5cGUgfTsNCiAgICB9DQogICAg QHtFbnY6OlRhYlN0b3BzKCl9ID0gc29ydCB7ICRhLT57V0hFUkV9IDw9PiAkYi0+e1dIRVJFfSB9 DQogICAgICAgICAgICAgICAgICAgICAgICAgQHtFbnY6OlRhYlN0b3BzKCl9Ow0KfQ0KDQpzdWIg TmV4dFRhYg0Kew0KICAgIG15ICR3aGVyZSA9IHNoaWZ0Ow0KICAgIG15ICRuZXh0Ow0KICAgIGZv cmVhY2ggbXkgJHRhYiAoIEB7RW52OjpUYWJTdG9wcygpfSApDQogICAgew0KICAgICAgICBpZiAo ICR0YWItPntXSEVSRX0gPiAkd2hlcmUgKSANCgl7DQoJICAgICRuZXh0ID0gJHRhYjsNCiAgICAg ICAgICAgIGxhc3Q7DQoJfQ0KICAgIH0NCiAgICAkbmV4dDsNCn0NCg0Kc3ViIERpc3RhbmNlVG9U YWINCnsNCiAgICBteSAoJHdoZXJlLCR3aWR0aCkgPSBAXzsNCiAgICBteSAkdGFiID0gTmV4dFRh Yigkd2hlcmUpIG9yIHJldHVybiAwOw0KICAgIG15ICRkaXN0YW5jZSA9ICR0YWItPntXSEVSRX0g LSAkd2hlcmU7DQogICAgJGRpc3RhbmNlIC09ICR3aWR0aCAgICAgICAgIGlmICggJHRhYi0+e1RZ UEV9IGVxICdSJyApOw0KICAgICRkaXN0YW5jZSAtPSAkd2lkdGgvMiAgICAgICBpZiAoICR0YWIt PntUWVBFfSBlcSAnQycgKTsNCiAgICBTY2FsZTo6Um91bmRIb3Jpem9udGFsKCRkaXN0YW5jZSk7 DQp9DQoNCiMgTm9ybWFsIChsZWZ0IGp1c3RpZmllZCkgdGFicyBjYW4gYmUgZmlsbGVkIGFzIHdl IGVuY291bnRlciB0aGVtLg0KIyBGb3Igb3RoZXIgdGFiIHR5cGVzIHdlIGRlbGF5IHVudGlsIHdl IGdldCB0aGUgd2lkdGggb2YgdGhlIGZvbGxvd2luZyBzdHJpbmcuDQoNCnN1YiBEZWxheVRhYkZp bGwNCnsNCiAgICBteSAkd2hlcmUgPSBzaGlmdDsNCiAgICBteSAkdGFiID0gTmV4dFRhYigkd2hl cmUpIG9yIHJldHVybiAwOw0KICAgICggJHRhYi0+e1RZUEV9IGVxICdSJyApIG9yICggJHRhYi0+ e1RZUEV9IGVxICdDJyApOw0KfQ0KDQpNYWNybzo6QnVpbHRpbiggJ3RhJywgMSwgc3ViIHsJICAg ICAgICAgICAgICAgICMgLnRhIC0gc2V0IHRhYnMNCiAgICBTZXRUYWJzKCBAXyApOyB9ICk7DQoN Ck1hY3JvOjpCdWlsdGluKCAndGMnLCAxLCBzdWIgewkJCSMgLnRjIC0gdGFiIGZpbGwgY2hhcmFj dGVyDQogICAgRW52OjpUQyggc2hpZnQgKTsgfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ2xjJywg MSwgc3ViIHsJCQkjIC5sYyAtIGxlYWRlciBmaWxsIGNoYXJhY3Rlcg0KICAgIEVudjo6TEMoIHNo aWZ0ICk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdmYycsIDIsIHN1YiB7CQkJIyAuZmMgLSBm aWVsZCBkZWxpbSBjaGFyYWN0ZXINCiAgICBpZiAoIEBfICkNCiAgICB7DQoJJEZpZWxkOjpEZWxp bSA9IHNoaWZ0Ow0KCSRGaWVsZDo6UGFkID0gc2hpZnQgfHwgJyAnOw0KICAgIH0NCiAgICBlbHNl DQogICAgew0KCSRGaWVsZDo6RGVsaW0gPSAkRmllbGQ6OlBhZCA9ICcnOw0KICAgIH0NCn0gKTsN Cg0KIyAtLS0gMTAuIElucHV0IGFuZCBPdXRwdXQgQ29udmVudGlvbnMgYW5kIENoYXJhY3RlciBU cmFuc2xhdGlvbnMgLS0tLS0tLS0tLS0tDQoNCk1hY3JvOjpCdWlsdGluKCAnZWMnLCAxLCBzdWIg ewkJCSMgLmVjIC0gZXNjYXBlIGNoYXJhY3Rlcg0KICAgICRFU0NBUEVfQ0hBUiA9IGRlZmluZWQo ICRfWzBdICkgPyAkX1swXSA6ICdcXCc7DQogICAgJEVTQ0FQRSA9IHF1b3RlbWV0YSgkRVNDQVBF X0NIQVIpOyB9ICk7DQoNCk1hY3JvOjpCdWlsdGluKCAnZW8nLCAwLCBzdWIgewkJCSMgLmVvIC0g dHVybiBlc2NhcGUgb2ZmDQogICAgJEVTQ0FQRV9DSEFSID0gJEVTQ0FQRSA9ICcnOyB9ICk7DQoN Ck1hY3JvOjpCdWlsdGluKCAnY2MnLCAxLCBzdWIgewkJCSMgLmNjIC0gY29udHJvbCBjaGFyYWN0 ZXINCiAgICBFbnY6OkNDKCBkZWZpbmVkKCAkX1swXSApID8gJF9bMF0gOiAnLicgKTsNCiAgICAk Q09OVFJPTCA9IHF1b3RlbWV0YSBFbnY6OkNDKCk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdj MicsIDEsIHN1YiB7CQkJIyAuYzIgLSBuby1icmVhayBjb250cm9sDQogICAgRW52OjpDMiggZGVm aW5lZCggJF9bMF0gKSA/ICRfWzBdIDogJ1wnJyApOw0KICAgICRBTFRDT05UUk9MID0gcXVvdGVt ZXRhIEVudjo6QzIoKTsgfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ3RyJywgLTEsIHN1YiB7CQkJ IyAudHIgLSB0cmFuc2xhdGUgY2hhcmFjdGVycw0KICAgIFBhcnNlOjpUcmFuc2xhdGVDaGFycygp OyB9ICk7DQoNCiMgLS0tIDEzLiBIeXBoZW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpNYWNybzo6QnVpbHRpbiggJ2hjJywg MSwgc3ViIHsJCQkjIC5oYyAtIGh5cGhlbmF0aW9uIGNoYXJhY3Rlcg0KICAgICRPSFlQSEVOID0g QF8gPyBzaGlmdCA6ICcnOyB9ICk7DQoNCiMgLS0tIDE0LiBUaHJlZS1QYXJ0IFRpdGxlcyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQokVGl0bGU6 OlBDID0gJyUnOw0KDQpNYWNybzo6QnVpbHRpbiggJ3RsJywgLTEsIHN1YiB7CQkJIyAudGwgLSB0 aHJlZS1wYXJ0IHRpdGxlDQogICAgUGFyc2U6OlByb2Nlc3NUaXRsZSgpOyB9ICk7DQoNCk1hY3Jv OjpCdWlsdGluKCAnbHQnLCAxLCBzdWIgewkJCSMgLmx0IC0gbGVuZ3RoIG9mIHRpdGxlDQogICAg RW52OjpUaXRsZUxlbmd0aCgpLT5TZXRPckFkZCggJF9bMF0gKTsgfSApOw0KDQpNYWNybzo6QnVp bHRpbiggJ3BjJywgMSwgc3ViIHsJCQkjIC5wYyAtIHBhZ2UgbnVtYmVyIGNoYXJhY3Rlcg0KICAg ICRUaXRsZTo6UEMgPSAkX1swXSBpZiBkZWZpbmVkICRfWzBdOyB9ICk7DQoNCiMgLS0tIDE2LiBD b25kaXRpb25hbCBBY2NlcHRhbmNlIG9mIElucHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KDQpNYWNybzo6QnVpbHRpbiggJ2lmJywgLTEsIHN1YiB7CQkJIyAuaWYgLSBj b25kaXRpb25hbA0KICAgIFBhcnNlOjpQcm9jZXNzQ29uZGl0aW9uYWxCb2R5KCBQYXJzZTo6R2V0 Q29uZGl0aW9uKCkgKTsNCiAgICAkSWY6Ol9rZWVwX2Vsc2UgPSAwOyB9ICk7DQoNCk1hY3JvOjpC dWlsdGluKCAnaWUnLCAtMSwgc3ViIHsJCQkjIC5pZSAtIGlmLCBlbHNlDQogICAgJElmOjpfa2Vl cF9lbHNlID0gISBQYXJzZTo6R2V0Q29uZGl0aW9uKCk7DQogICAgUGFyc2U6OlByb2Nlc3NDb25k aXRpb25hbEJvZHkoICEgJElmOjpfa2VlcF9lbHNlICk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4o ICdlbCcsIC0xLCBzdWIgewkJCSMgLmVsIC0gZWxzZQ0KICAgIFBhcnNlOjpQcm9jZXNzQ29uZGl0 aW9uYWxCb2R5KCAkSWY6Ol9rZWVwX2Vsc2UgKTsNCiAgICAkSWY6Ol9rZWVwX2Vsc2UgPSAwOyB9 ICk7DQoNCiMgLS0tIDE3LiBFbnZpcm9ubWVudCBTd2l0Y2hpbmcgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpNYWNybzo6QnVpbHRpbiggJ2V2JywgMSwg c3ViIHsJCQkjIC5ldiAtIHN3aXRjaCBlbnZpcm9ubWVudA0KICAgIEVudjo6Q2hhbmdlVG8oIHNo aWZ0ICk7IH0gKTsNCg0KIyAtLS0gMTguIEluc2VydGlvbnMgZnJvbSB0aGUgU3RhbmRhcmQgSW5w dXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCk1hY3JvOjpCdWlsdGluKCAn cmQnLCAxLCBzdWIgewkJCSMgLnJkIC0gcmVhZCBpbnRlcmFjdGl2ZWx5DQogICAgcHJpbnQoICRf WzBdIHx8ICJcYSIgKTsNCiAgICBJbnB1dDo6T3BlbkZpbGUoICRJbnB1dDo6U1RESU4gKTsNCn0g KTsNCg0KTWFjcm86OkJ1aWx0aW4oICdleCcsIDEsIHN1YiB7CQkJIyAuZXggLSBleGl0DQogICAg SW5wdXQ6OkFiYW5kb24oKTsgfSApOw0KDQojIC0tLSAxOS4gSW5wdXQvT3V0cHV0IEZpbGUgU3dp dGNoaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KTWFjcm86 OkJ1aWx0aW4oICdzbycsIDEsIHN1YiB7CQkJIyAuc28gLSBzd2l0Y2ggc291cmNlIGZpbGUNCiAg ICBJbnB1dDo6T3BlbkZpbGUoICRfWzBdICkgaWYgZGVmaW5lZCggJF9bMF0gKTsgfSApOw0KDQpN YWNybzo6QnVpbHRpbiggJ254JywgMSwgc3ViIHsgICAgICAgICAgICAgICAgICAjIC5ueCAtIG5l eHQgc291cmNlIGZpbGUNCiAgICBJbnB1dDo6TmV4dEZpbGUoICRfWzBdICkgaWYgZGVmaW5lZCgg JF9bMF0gKTsgfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ3N5JywgLTEsIHN1YiB7ICAgICAgICAg ICAgICAgICAgIyAuc3kgLSBleGVjdXRlIHByb2dyYW0NCiAgICBzeXN0ZW0oIFBhcnNlOjpHZXRM aW5lKCkgKTsgfSApOw0KDQpNYWNybzo6QnVpbHRpbiggJ3BpJywgLTEsIHN1YiB7ICAgICAgICAg ICAgICAgICAgIyAucGkgLSBvdXRwdXQgdG8gcGlwZQ0KICAgIG9wZW4oIFNURE9VVCwgJ3wnLiBQ YXJzZTo6R2V0TGluZSgpICk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdjZicsIDEsIHN1YiB7 ICAgICAgICAgICAgICAgICAgIyAuY2YgLSBjb3B5IGZpbGUgdG8gb3V0cHV0DQogICAgb3Blbigg SU4sIHNoaWZ0KCkgKSBvciByZXR1cm47DQogICAgcHJpbnQgd2hpbGUgKDxJTj4pOyB9ICk7DQoN CiMgLS0tIDIwLiBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIFtmaXhdIEhhbmRsZSBvdXIgb3duIHBhcnNpbmcg Zm9yIG1hcmdpbiBjaGFyIGFyZ3VtZW50LCB1Z2gNCg0KTWFjcm86OkJ1aWx0aW4oICdtYycsIC0x LCBzdWIgewkJCSMgLm1jIC0gbWFyZ2luIGNoYXJhY3Rlcg0KICAgIG15ICRjaGFyID0gUGFyc2U6 OkdldFByaW50Q2hhcigpOw0KICAgICRjaGFyID0gUGFyc2U6Ok1ha2VDaGFyKCRjaGFyKSBpZiBk ZWZpbmVkKCAkY2hhciApIGFuZCAhcmVmKCAkY2hhciApOw0KICAgIEVudjo6TWFyZ2luQ2hhcigg JGNoYXIgKTsNCiAgICBteSAkbiA9IFBhcnNlOjpHZXRCdWlsdGluQXJncygxKTsNCiAgICBFbnY6 Ok1hcmdpbkNoYXJTcGFjZSggU2NhbGU6OkV4cHIoJG4sJ20nKSApIGlmIGRlZmluZWQgJG47DQp9 ICk7DQoNCk1hY3JvOjpCdWlsdGluKCAndG0nLCAtMSwgc3ViIHsJCQkjIC50bSAtIHRleHQgbWVz c2FnZQ0KICAgIHByaW50IFNUREVSUiBQYXJzZTo6R2V0TGluZSgpLCAiXG4iOyB9ICk7DQoNCk1h Y3JvOjpCdWlsdGluKCAnYWInLCAtMSwgc3ViIHsJCQkjIC5hYiAtIGFib3J0DQogICAgcHJpbnQg U1RERVJSIFBhcnNlOjpHZXRMaW5lKCksICJcbiI7DQogICAgZXhpdCgxKTsgfSApOw0KDQpNYWNy bzo6QnVpbHRpbiggJ2ZsJywgMCwgc3ViIHsJCQkjIC5mbCAtIGZsdXNoIG91dHB1dCBidWZmZXIN CiAgICBPdXRwdXQ6OkZsdXNoKCk7IH0gKTsNCg0KTWFjcm86OkJ1aWx0aW4oICdsZicsIDIsIHN1 YiB7CQkJIyAubGYgLSBsaW5lIGFuZCBmaWxlIG5hbWUNCiAgICBJbnB1dDo6U2V0TGluZSggJF9b MF0sICRfWzFdICk7IH0gKTsNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpwYWNrYWdlIElucHV0 Ow0KDQojICAgICAgICAgRmlsZXMoQG5hbWVzKSAgICAgICAgICBTdXBwbHkgbmFtZXMgb2YgZmls ZXMgdG8gcmVhZCAoaW4gb3JkZXIpDQojICAgICAgICAgT3BlbkZpbGUoJGZpbGVuYW1lKSAgICBP cGVuLCBzYXZpbmcgY3VycmVudCBvcGVuIGZpbGUNCiMgICAgICAgICBOZXh0RmlsZSgkZmlsZW5h bWUpICAgIFJlcGxhY2UgdGhlIGN1cnJlbnQgb3BlbiBmaWxlDQojICRuYW1lID0gTm93UGxheWlu ZygpICAgICAgICAgICBDdXJyZW50IGZpbGVuYW1lDQojICRjaGFyID0gUmVhZENoYXIoKSAgICAg ICAgICAgICBSZWFkIGZyb20gY3VycmVudCBmaWxlIG9yIG1hY3JvDQojICRkb25lID0gSXNFbXB0 eSgpICAgICAgICAgICAgICBUcnVlIHdoZW4gYWxsIGlucHV0IHJ1bnMgb3V0DQojICAgICAgICAg QWJhbmRvbigpICAgICAgICAgICAgICBTdG9wIHJlYWRpbmcgYWxsIGlucHV0DQojICRuICAgID0g TGluZU51bWJlcigpICAgICAgICAgICBOdW1iZXIgb2YgbGluZXMgcmVhZCBmcm9tIGN1cnJlbnQg ZmlsZQ0KIyAgICAgICAgIFNldExpbmUoJG4sJGZpbGVuYW1lKSAgU2V0IHRoZSBjdXJyZW50IGxp bmUgbnVtYmVyIGFuZCBmaWxlbmFtZQ0KIyAkbiAgICA9IExldmVsKCkgICAgICAgICAgICAgICAg UmV0dXJuIG51bWJlciBvZiBpbnB1dCBzb3VyY2VzIG9uIHRoZSBzdGFjaw0KIyAgICAgICAgIFB1 c2hDb250ZXh0KCRjb250ZXh0KSAgUHVzaCB0aGUgZ2l2ZW4gRmlsZUNvbnRleHQgb3IgTWFjcm9D b250ZXh0DQojICAgICAgICAgUG9wQ29udGV4dCgpICAgICAgICAgICBQb3AgdGhlIGN1cnJlbnQg aW5wdXQgc291cmNlIChjb250ZXh0KQ0KIyAgICAgICAgIE9wZW5BcmdOKCRuKSAgICAgICAgICAg T3BlbiB0aGUgTnRoIG1hY3JvIGFyZ3VtZW50IGZvciBpbnB1dA0KIyAgICAgICAgIFRvdGFsQXJn cygpICAgICAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgbWFjcm8gYXJndW1lbnRzDQoNCiRJ bnB1dDo6U1RESU4gPSAnKCpzdGFuZGFyZCBpbnB1dCopJzsNCg0KdXNlIHZhcnMgcXd7IEBfZmls ZW5hbWVzIEBfc3RhY2sgJF9jb250ZXh0IH07DQoNCnN1YiBQdXNoQ29udGV4dA0Kew0KICAgIG15 ICRjID0gc2hpZnQ7DQogICAgcmV0dXJuIGlmICRjLT5Jc0VtcHR5KCk7DQogICAgJF9jb250ZXh0 ID0gJGM7DQogICAgcHVzaCBAX3N0YWNrLCAkX2NvbnRleHQ7DQp9DQoNCnN1YiBQb3BDb250ZXh0 DQp7DQogICAgcG9wIEBfc3RhY2s7DQogICAgJF9jb250ZXh0ID0gJF9zdGFja1stMV07DQp9DQoN CnN1YiBUb3Btb3N0RmlsZSAgeyBncmVwKCAocmVmKCRfKSA9fiAvXkYvIGFuZCByZXR1cm4gJF8p LCByZXZlcnNlIEBfc3RhY2sgKSB9DQpzdWIgVG9wbW9zdE1hY3JvIHsgZ3JlcCggKHJlZigkXykg PX4gL15NLyBhbmQgcmV0dXJuICRfKSwgcmV2ZXJzZSBAX3N0YWNrICkgfQ0KDQpzdWIgT3BlbkZp bGUNCnsNCiAgICBteSAkZiA9IEZpbGVDb250ZXh0LT5uZXcoIHNoaWZ0ICk7DQogICAgUHVzaENv bnRleHQoICRmICkgaWYgJGY7DQp9DQoNCnN1YiBOZXh0RmlsZQ0Kew0KICAgIG15ICRuYW1lID0g c2hpZnQ7DQogICAgaWYgKCBUb3Btb3N0RmlsZSgpICkNCiAgICB7DQoJVG9wbW9zdEZpbGUoKS0+ T3BlbiggJG5hbWUgKTsNCiAgICB9DQogICAgZWxzaWYgKCBteSAkZiA9IEZpbGVDb250ZXh0LT5u ZXcoICRuYW1lICkgKQ0KICAgIHsNCgl1bnNoaWZ0IEBfc3RhY2ssICRmOyAgIyBtYWtlIHRoaXMg dGhlIGJvdHRvbS1tb3N0IGNvbnRleHQNCiAgICB9DQp9DQoNCnN1YiBPcGVuSGFuZGxlDQp7DQog ICAgbXkgJG5hbWUgPSBzaGlmdDsNCiAgICByZXR1cm4gKlNURElOIGlmICRuYW1lIGVxICRJbnB1 dDo6U1RESU47DQogICAgbG9jYWwgKkhBTkRMRTsNCiAgICB1bmxlc3MgKCBvcGVuKCAqSEFORExF LCAkbmFtZSApICkNCiAgICB7DQogICAgICAgIHdhcm4gIkNhbid0IG9wZW4gZmlsZSAkbmFtZTog JCFcbiI7DQoJcmV0dXJuOw0KICAgIH0JDQogICAgKkhBTkRMRTsNCn0NCg0Kc3ViIEZpbGVDb250 ZXh0OjpuZXcNCnsNCiAgICBteSAoJGNsYXNzLCRuYW1lKSA9IEBfOw0KICAgIG15ICRoYW5kbGUg PSBJbnB1dDo6T3BlbkhhbmRsZSggJG5hbWUgKSBvciByZXR1cm47DQogICAgYmxlc3MoIHtIQU5E TEUgPT4gJGhhbmRsZSwgTkFNRSA9PiAkbmFtZSwgTElORSA9PiAxLCBURVhUID0+IFtdfSwgJGNs YXNzICk7DQp9DQoNCnN1YiBGaWxlQ29udGV4dDo6T3Blbg0Kew0KICAgIG15ICgkbWUsJG5hbWUp ID0gQF87DQogICAgbXkgJGhhbmRsZSA9IElucHV0OjpPcGVuSGFuZGxlKCAkbmFtZSApIG9yIHJl dHVybjsNCiAgICAleyRtZX0gPSAoIEhBTkRMRSA9PiAkaGFuZGxlLCBOQU1FID0+ICRuYW1lLCBM SU5FID0+IDEsIFRFWFQgPT4gW10gKTsNCn0NCg0Kc3ViIEZpbGVDb250ZXh0OjpOZXh0TGluZQ0K ew0KICAgIG15ICRtZSA9IHNoaWZ0Ow0KICAgIEB7JG1lLT57VEVYVH19ID0gJEZvcmNlVW5pY29k ZSANCgk/IG1hcCggY2hyKCRfKSwgdW5wYWNrKCAiVSoiLCByZWFkbGluZSgkbWUtPntIQU5ETEV9 KSApICkNCgk6IHNwbGl0IC8vLCByZWFkbGluZSgkbWUtPntIQU5ETEV9KTsNCiAgICAkbWUtPntM SU5FfSsrOw0KfQ0KDQpzdWIgRmlsZUNvbnRleHQ6OlJlYWRDaGFyDQp7DQogICAgbXkgJG1lID0g c2hpZnQ7DQogICAgJG1lLT5OZXh0TGluZSgpIHVubGVzcyBAeyRtZS0+e1RFWFR9fTsNCiAgICBz aGlmdCBAeyRtZS0+e1RFWFR9fTsNCn0NCg0Kc3ViIEZpbGVDb250ZXh0OjpQZWVrQ2hhcg0Kew0K ICAgIG15ICRtZSA9IHNoaWZ0Ow0KICAgICRtZS0+TmV4dExpbmUoKSB1bmxlc3MgQHskbWUtPntU RVhUfX07DQogICAgJG1lLT57VEVYVH1bMF07DQp9DQoNCnN1YiBGaWxlQ29udGV4dDo6SXNFbXB0 eSB7IGVvZiggJF9bMF17SEFORExFfSApIGFuZCAhQHskX1swXXtURVhUfX0gfQ0KDQpzdWIgUmVh ZENoYXINCnsNCiAgICB1bnRpbCAoICRfY29udGV4dCApDQogICAgew0KCXJldHVybiAnJyB1bmxl c3MgQF9maWxlbmFtZXM7DQoJT3BlbkZpbGUoIHNoaWZ0IEBfZmlsZW5hbWVzICk7DQogICAgfQ0K ICAgIG15ICRjaGFyID0gJF9jb250ZXh0LT5SZWFkQ2hhcigpOw0KICAgIFBvcENvbnRleHQoKSBp ZiAkX2NvbnRleHQtPklzRW1wdHkoKTsNCiAgICAkY2hhcjsNCn0NCg0Kc3ViIFBlZWtDaGFyDQp7 DQogICAgT3BlbkZpbGUoIHNoaWZ0IEBfZmlsZW5hbWVzICkgaWYgISAkX2NvbnRleHQgYW5kIEBf ZmlsZW5hbWVzOw0KICAgICRfY29udGV4dCA/ICRfY29udGV4dC0+UGVla0NoYXIoKSA6ICcnOw0K fQ0KDQpzdWIgQWJhbmRvbg0Kew0KICAgIHVuZGVmICRfY29udGV4dDsNCiAgICB1bmRlZiBAX3N0 YWNrOw0KICAgIHVuZGVmIEBfZmlsZW5hbWVzOw0KfQ0KDQpzdWIgU2V0TGluZQ0Kew0KICAgIGlm ICggVG9wbW9zdEZpbGUoKSApDQogICAgew0KCVRvcG1vc3RGaWxlKCktPntMSU5FfSA9ICRfWzBd OyAgIyBkaXJlY3QgbWFuaXB1bGF0aW9uOiBob3cgZXZpbA0KCVRvcG1vc3RGaWxlKCktPntOQU1F fSA9ICRfWzFdIGlmIGRlZmluZWQgJF9bMV07DQogICAgfQ0KfQ0KDQpzdWIgQWRkRmlsZXMgICAg eyBwdXNoIEBfZmlsZW5hbWVzLCBAXyB9DQpzdWIgSXNFbXB0eSAgICAgeyAhICggQF9zdGFjayBv ciBAX2ZpbGVuYW1lcyApIH0NCnN1YiBOb01vcmVGaWxlcyB7ICEgKCBUb3Btb3N0RmlsZSgpIG9y IEBfZmlsZW5hbWVzICkgfQ0Kc3ViIExldmVsICAgICAgIHsgc2NhbGFyIEBfc3RhY2sgfQ0Kc3Vi IE5vd1BsYXlpbmcgIHsgVG9wbW9zdEZpbGUoKSA/IFRvcG1vc3RGaWxlKCktPntOQU1FfSA6ICcn IH0NCnN1YiBMaW5lTnVtYmVyICB7IFRvcG1vc3RGaWxlKCkgPyBUb3Btb3N0RmlsZSgpLT57TElO RX0gOiAwIH0NCnN1YiBPcGVuQXJnTiAgICB7IFRvcG1vc3RNYWNybygpLT5PcGVuQXJnTihzaGlm dCkgaWYgVG9wbW9zdE1hY3JvKCk7IH0NCnN1YiBUb3RhbEFyZ3MgICB7IFRvcG1vc3RNYWNybygp ID8gVG9wbW9zdE1hY3JvKCktPlRvdGFsQXJncygpIDogMCB9DQoNCiMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KcGFja2FnZSBtYWluOw0KDQpAQVJHViA9IG1hcCB7ICgkXyBlcSAnLScpID8gJElucHV0 OjpTVERJTiA6ICRfIH0gQEFSR1Y7DQoNCndoaWxlICggQEFSR1YgYW5kICRBUkdWWzBdID1+IC9e LS8gKQ0Kew0KICAgICRfID0gc2hpZnQ7DQogICAgL14tZCQvICAgICAgICAgICAgICBhbmQgZG8g eyAkRGVidWcgPSAkfCA9IDE7ICAgICAgICAgICAgICAgbmV4dDsgfTsNCiAgICAvXi1nJC8gICAg ICAgICAgICAgIGFuZCBkbyB7ICsrJEdyb2ZmQ29tcGF0aWJsZTsgICAgICAgICAgICBuZXh0OyB9 Ow0KICAgIC9eLWkkLyAgICAgICAgICAgICAgYW5kIGRvIHsgcHVzaCBAQVJHViwgJElucHV0OjpT VERJTjsgICAgIG5leHQ7IH07DQogICAgL14tciguKShcZCspLyAgICAgICBhbmQgZG8geyBSZWc6 OlNldCgkMSwkMik7ICAgICAgICAgICAgICAgbmV4dDsgfTsNCiAgICAvXi1tKC4rKS8gICAgICAg ICAgIGFuZCBkbyB7IElucHV0OjpBZGRGaWxlcyggIiR7TWFjcm9QYXRofXRtYWMuJDEiICk7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OyB9Ow0KICAgIC9eLW4oXGQrKS8g ICAgICAgICAgYW5kIGRvIHsgJFBhZ2U6Ol9udW1iZXItPlNldCgkMS0xKTsgICAgIG5leHQ7IH07 DQogICAgL14tVCguKykvICAgICAgICAgICBhbmQgZG8geyAkT3V0cHV0RGV2aWNlID0gJDE7ICAg ICAgICAgICAgbmV4dDsgfTsNCiAgICAvXi11JC8gICAgICAgICAgICAgIGFuZCBkbyB7IGlmICgg ZGVmaW5lZCAkXlYgKQ0KCQkJCSB7DQoJCQkJICAgICArKyRGb3JjZVVuaWNvZGU7DQoJCQkJIH0N CgkJCQkgZWxzZQ0KCQkJCSB7DQoJCQkJICAgICB3YXJuKCAiLXUgc3dpdGNoIChVbmljb2RlKSBy ZXF1aXJlcyAiLA0KCQkJCQkgICAiUGVybCB2ZXJzaW9uIDUuNiBvciBsYXRlclxuIiApOw0KCQkJ CSB9DQoJCQkJIG5leHQ7DQoJCQkgICAgIH07DQogICAgd2FybiAiVW5rbm93biBvcHRpb246ICRf XG4iOw0KfQ0KDQojIE5vdyB3ZSBsb2FkIHRoZSBvdXRwdXQgZGV2aWNlIChkZWZhdWx0IGlzICds cCcpOg0KDQppZiAoICRPdXRwdXREZXZpY2UgPX4gL15scHxjb2wkLyApDQp7DQogICAgZXZhbCgg am9pbiggJycsIDxEQVRBPiApICk7DQogICAgZGllICJDYW4ndCBsb2FkIGRlZmF1bHQgb3V0cHV0 IGRldmljZTogJEAiIGlmICRAOw0KICAgIE91dHB1dDo6T3ZlcnN0cmlrZSgwKSBpZiAkT3V0cHV0 RGV2aWNlIGVxICdjb2wnOw0KfQ0KZWxzaWYgKCAhIHJlcXVpcmUgJE91dHB1dERldmljZSApDQp7 DQogICAgZGllICJDYW4ndCBsb2FkIG91dHB1dCBkZXZpY2UgJE91dHB1dERldmljZTogJCFcbiI7 DQp9DQoNCiMgQW5kIG5vdyBpbml0aWFsaXplIHRob3NlIHRoaW5ncyB0aGF0IHNvbWVob3cgZGVw ZW5kIG9uIHRoZSBvdXRwdXQgZGV2aWNlDQojIChtb3N0bHkgYmVjYXVzZSBvZiBzY2FsZWQgdmFs dWVzLCB3aGljaCBkZXBlbmQgb24gZGV2aWNlIHJlc29sdXRpb24pOg0KDQpFbnY6OkluaXQoKTsN CkZvbnQ6OkluaXQoKTsNClBhZ2U6OkluaXQoKTsNClRhYjo6SW5pdCgpOw0KDQpwdXNoIEBBUkdW LCAkSW5wdXQ6OlNURElOIHVubGVzcyBAQVJHVjsgICAgIyBCeSBkZWZhdWx0IHJlYWQgc3RkaW4N CklucHV0OjpBZGRGaWxlcyggQEFSR1YgKTsNCg0KUGFyc2U6OkludGVycHJldElucHV0KCk7DQpM aW5lOjpVbmNvbmRpdGlvbmFsQnJlYWsoKTsNCmlmICggZGVmaW5lZCAkbWFpbjo6RW5kTWFjcm8g KQ0Kew0KICAgIE1hY3JvOjpJbnZva2UoICRtYWluOjpFbmRNYWNybywgMSApOw0KICAgIFBhcnNl OjpJbnRlcnByZXRJbnB1dCgpOw0KfQ0KaWYgKCBEaXZlcnNpb246OlZlcnRpY2FsUG9zaXRpb24o KSA+IDAgKQ0Kew0KICAgIFBhcnNlOjpGb3JjZVBhZ2VFamVjdCgpOw0KICAgIFBhcnNlOjpJbnRl cnByZXRJbnB1dCgpOw0KfQ0KDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpfX0RBVEFfXw0K DQpwYWNrYWdlIE91dHB1dDsNCg0KIyBUaGlzIGlzIHRoZSBkZWZhdWx0IG91dHB1dCBkZXZpY2Us IHByaW50aW5nIHBsYWluIHRleHQuDQojIFRoaXMgYnVmZmVycyBlYWNoIHBhZ2UgdG8gZWxpbWlu YXRlIHJldmVyc2UgdmVydGljYWwgbW90aW9uLg0KDQojIFRoZSBzdGFuZGFyZCBPdXRwdXQgZGV2 aWNlIGludGVyZmFjZSBpczoNCiMgJHVuaXRzID0gUmVzb2x1dGlvbigpICAgICAgICAgICAgICBE ZXZpY2UgdW5pdHMgcGVyIGluY2gNCiMgJHVuaXRzID0gTWluSG9yaXpvbnRhbCgpICAgICAgICAg ICBNaW5pbXVtIGhvcml6b250YWwgbW92ZW1lbnQgKGRldmljZSB1bml0cykNCiMgJHVuaXRzID0g TWluVmVydGljYWwoKSAgICAgICAgICAgICBNaW5pbXVtIHZlcnRpY2FsIG1vdmVtZW50IChkZXZp Y2UgdW5pdHMpDQojICAgICAgICAgIENoYXIoJG5hbWUsJHdpZHRoLCRmb250KSAgUHV0IGNoYXJh Y3RlciwgYWR2YW5jZSBjdXJyZW50IHBvc2l0aW9uDQojICAgICAgICAgIE1vdGlvbigkeCwkeSkg ICAgICAgICAgICAgTW92ZSBjdXJyZW50IHBvc2l0aW9uIHJlbGF0aXZlDQojICAgICAgICAgIE5l d0xpbmUoJHZlcnRpY2FsKSAgICAgICAgQWR2YW5jZSB0byBwYWdlIGxlZnQgd2l0aCB2ZXJ0aWNh bCBtb3Rpb24NCiMgICAgICAgICAgTmV3UGFnZSgpICAgICAgICAgICAgICAgICBTdGFydCBhIG5l dyBwYWdlIChmbHVzaGluZyBjdXJyZW50IHBhZ2UpDQojICAgICAgICAgIEZsdXNoKCkgICAgICAg ICAgICAgICAgICAgRmx1c2ggY3VycmVudCBwYWdlDQojIEBuYW1lcyA9IEZvbnRzKCkgICAgICAg ICAgICAgICAgICAgTmFtZXMgb2YgZm9udHMgaW4gbW91bnRlZCBvcmRlcg0KIyAkdW5pdHMgPSBD aGFyV2lkdGgoJG5hbWUsJGZvbnQpICAgIFdpZHRoIG9mIGNoYXJhY3RlciBpbiBkZXZpY2UgdW5p dHMNCiMgJHVuaXRzID0gU3RyaW5nV2lkdGgoJHN0ciwkZm9udCkgICBXaWR0aCBvZiBzdHJpbmcg aW4gZGV2aWNlIHVuaXRzDQojICR1bml0cyA9IEVtU3BhY2UoJGZvbnQpICAgICAgICAgICAgV2lk dGggb2YgYW4gRW0gc3BhY2UgaW4gZGV2aWNlIHVuaXRzDQojICR1bml0cyA9IEVuU3BhY2UoJGZv bnQpICAgICAgICAgICAgV2lkdGggb2YgYW4gRW4gc3BhY2UgaW4gZGV2aWNlIHVuaXRzDQojICAg ICAgICAgIE1hcENoYXIoJGZyb20sJHRvKSAgICAgICAgU3Vic3RpdHV0ZSBjaGFyYWN0ZXIgb24g b3V0cHV0DQoNCnVzZSB2YXJzIHF3eyANCiAgICAkX292ZXJzdHJpa2UgJF9saW5lICRfY29sIEBf YnVmZmVyICVfZm9udF9lZmZlY3QgJV90cmFuc2xhdGUgJV9mb250bWFwDQp9Ow0KDQokX292ZXJz dHJpa2UgPSAxOw0KJF9saW5lID0gMDsNCiRfY29sID0gMDsNCg0Kc3ViIFJlc29sdXRpb24gICAg eyAyNDAgfSAgICAgIyBkZXZpY2UgdW5pdHMgcGVyIGluY2gNCnN1YiBNaW5Ib3Jpem9udGFsIHsg MjQgfSAgICAgICMgZGV2aWNlIHVuaXRzIHBlciBjaGFyYWN0ZXIgKDEvMTAgaW5jaCkNCnN1YiBN aW5WZXJ0aWNhbCAgIHsgNDAgfSAgICAgICMgZGV2aWNlIHVuaXRzIHBlciBsaW5lICgxLzYgaW5j aCkNCnN1YiBNYXhMaW5lcyAgICAgIHsgNjYgfSAgICAgICMgMTEgdmVydGljYWwgaW5jaGVzIG9u IGEgcGFnZQ0Kc3ViIEVtU3BhY2UgICAgICAgeyBNaW5Ib3Jpem9udGFsKCkgfQ0Kc3ViIEVuU3Bh Y2UgICAgICAgeyBNaW5Ib3Jpem9udGFsKCkgfQ0Kc3ViIE5ld0xpbmUgICAgICAgeyAkX2NvbD0w OyBNb3Rpb24oMCxzaGlmdCgpKTsgfQ0Kc3ViIE5ld1BhZ2UgICAgICAgeyBGbHVzaCgpOyB9DQpz dWIgRm9udHMgICAgICAgICB7IHF3eyBSIEkgQiBCSSBTIH0gfQ0Kc3ViIE92ZXJzdHJpa2UgICAg eyAkX292ZXJzdHJpa2UgPSBzaGlmdCB9DQoNCnN1YiBGbHVzaA0Kew0KICAgIGZvcmVhY2ggbXkg JG4gKCAwLi4oTWF4TGluZXMoKS0xKSApDQogICAgew0KICAgICAgICBtYXAoIHByaW50KCBkZWZp bmVkKCRfKSA/ICRfIDogJyAnICksIEB7JF9idWZmZXJbJG5dfSApDQogICAgICAgICAgICBpZiBk ZWZpbmVkKCAkX2J1ZmZlclskbl0gKTsNCglwcmludCAiXG4iOw0KICAgICAgICAkX2J1ZmZlclsk bl0gPSBbXTsNCiAgICB9DQogICAgJF9saW5lID0gJF9jb2wgPSAwOw0KfQ0KDQolX2ZvbnRfZWZm ZWN0ID0gKA0KICAgIEkgPT4gc3ViIHsgIl9cYiRfWzBdIiB9LA0KICAgIEIgPT4gc3ViIHsgIiRf WzBdXGIkX1swXSIgfSwNCiAgICBCSSA9PiBzdWIgeyAiX1xiJF9bMF1cYiRfWzBdIiB9LA0KKTsN Cg0Kc3ViIF9jaGFyDQp7DQogICAgbXkgKCRuYW1lLCAkd2lkdGgsICRmb250KSA9IEBfOw0KICAg IGlmICggJG5hbWUgZXEgIlxiIiApDQogICAgew0KICAgICAgICAtLSRfY29sIGlmICRfY29sID4g MDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCglpZiAoICRfb3ZlcnN0cmlrZSApDQoJew0KCSAg ICAkX2J1ZmZlclskX2xpbmVdWyRfY29sXSAuPSAiXGIiDQoJCWlmIGRlZmluZWQgJF9idWZmZXJb JF9saW5lXVskX2NvbF07DQoJICAgIG15ICRlZmZlY3QgPSAkX2ZvbnRfZWZmZWN0eyRmb250fTsN CgkgICAgJG5hbWUgPSAkZWZmZWN0LT4oJG5hbWUpIGlmICRlZmZlY3Q7DQoJICAgICRfYnVmZmVy WyRfbGluZV1bJF9jb2xdIC49ICRuYW1lOw0KCX0NCgllbHNlDQoJew0KCSAgICAkX2J1ZmZlclsk X2xpbmVdWyRfY29sXSA9ICRuYW1lOw0KCX0NCgkrKyRfY29sIGlmICR3aWR0aDsNCiAgICB9DQp9 DQoNCnN1YiBDaGFyDQp7DQogICAgbXkgKCRuYW1lLCAkd2lkdGgsICRmb250KSA9IEBfOw0KICAg ICRuYW1lID0gJF90cmFuc2xhdGV7JG5hbWV9IGlmIGV4aXN0cyAkX3RyYW5zbGF0ZXskbmFtZX07 DQogICAgaWYgKCBsZW5ndGgoICRuYW1lICkgPiAxICkNCiAgICB7DQoJZm9yZWFjaCAoIHNwbGl0 KCAvLywgKCRfZm9udG1hcHskbmFtZX18fCcgJykgKSApDQogICAgICAgIHsNCiAgICAgICAgICAg IF9jaGFyKCAkXywgJHdpZHRoLCAkZm9udCApOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UN CiAgICB7DQogICAgICAgIF9jaGFyKCAkbmFtZSwgJHdpZHRoLCAkZm9udCApOw0KICAgIH0NCn0N Cg0Kc3ViIE1vdGlvbiAgICAgICMgcmVsYXRpdmUsIG5vdCBhYnNvbHV0ZSBtb3Rpb24NCnsNCiAg ICBteSAkY29sID0gaW50KCBzaGlmdCgpIC8gTWluSG9yaXpvbnRhbCgpICk7DQogICAgbXkgJGxp bmUgPSBpbnQoIHNoaWZ0KCkgLyBNaW5WZXJ0aWNhbCgpICk7DQogICAgcmV0dXJuIHVubGVzcyAk Y29sIG9yICRsaW5lOw0KICAgICRfbGluZSArPSAkbGluZTsNCiAgICAkX2xpbmUgPSAwIGlmICRf bGluZSA8IDA7DQogICAgJF9jb2wgKz0gJGNvbDsNCiAgICAkX2NvbCA9IDAgaWYgJF9jb2wgPCAw Ow0KfQ0KDQpzdWIgQ2hhcldpZHRoDQp7DQogICAgbXkgKCRuYW1lLCAkZm9udCkgPSBAXzsNCiAg ICByZXR1cm4gLU1pbkhvcml6b250YWwoKSBpZiAkbmFtZSBlcSAiXGIiOw0KICAgICggKGxlbmd0 aCgkbmFtZSkgPiAxKSA/IFN0cmluZ1dpZHRoKCAkX2ZvbnRtYXB7ICRuYW1lIH0gKSANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBNaW5Ib3Jpem9udGFsKCkgKTsNCn0NCg0Kc3ViIFN0cmlu Z1dpZHRoDQp7DQogICAgbXkgKCRzLCAkZm9udCkgPSBAXzsNCiAgICByZXR1cm4gMCB1bmxlc3Mg ZGVmaW5lZCAkczsNCiAgICAkcyA9fiBzL1teXGJdW1xiXS8vZzsNCiAgICAoIGxlbmd0aCgkcykg KiBNaW5Ib3Jpem9udGFsKCkgKTsNCn0NCg0Kc3ViIE1hcENoYXINCnsNCiAgICAkX3RyYW5zbGF0 ZXskX1swXX0gPSAkX1sxXTsNCn0NCg0KJV9mb250bWFwID0gKA0KICAgICdiYScgPT4gJ3wnLCAg ICAnYmInID0+ICd8JywgICAgJ2J2JyA9PiAnfCcsICAgICdicicgPT4gJ3wnLA0KICAgICdydScg PT4gJ18nLCAgICAndWwnID0+ICdfJywgICAgJ2RnJyA9PiAifFxiKyIsICdkZCcgPT4gIj1cYnwi LA0KICAgICdlbScgPT4gJy0nLCAgICAnZW4nID0+ICctJywgICAgJ2h5JyA9PiAnLScsDQogICAg J2J1JyA9PiAnKicsICAgICcqKicgPT4gJyonLA0KICAgICdjaScgPT4gJ28nLCAgICAnYyonID0+ ICJvXGIqIiwgJ2MrJyA9PiAib1xiKyIsDQogICAgJ2NvJyA9PiAnKEMpJywgICdyZycgPT4gJyhS KScsICAndG0nID0+ICcodG0pJywNCiAgICAnZmYnID0+ICdmZicsICAgJ2ZpJyA9PiAnZmknLCAg ICdmbCcgPT4gJ2ZsJywgICAnRmknID0+ICdmZmknLA0KICAgICdGbCcgPT4gJ2ZmbCcsICAnMTQn ID0+ICcxLzQnLCAgJzEyJyA9PiAnMS8yJywgICczNCcgPT4gJzMvNCcsDQogICAgJ2YvJyA9PiAn LycsICAgICdzaCcgPT4gJyMnLCAgICAnc2wnID0+ICcvJywgICAgJ3JzJyA9PiAnXFwnLA0KICAg ICdwbCcgPT4gJysnLCAgICAnbWknID0+ICctJywgICAgJy0rJyA9PiAnLSsnLCAgICcrLScgPT4g JystJywNCiAgICAnPD0nID0+ICc8PScsICAgJz49JyA9PiAnPj0nLCAgICc9PScgPT4gJz09Jywg ICAnIT0nID0+ICchPScsDQogICAgJz1+JyA9PiAnPX4nLCAgICd+PScgPT4gJ349JywgICAnfn4n ID0+ICd+PScsICAgJ2VxJyA9PiAnPScsICAgIA0KICAgICdvcicgPT4gJ3wnLCAgICAnYXQnID0+ ICdAJywNCiAgICAncmgnID0+ICctPicsICAgJ2xoJyA9PiAnPC0nLCAgICc+PicgPT4gJz4+Jywg ICAnPDwnID0+ICc8PCcsDQogICAgJ2ZtJyA9PiAiJyIsICAgICdzZCcgPT4gIicnIiwgICAnaGEn ID0+ICdeJywgICAgJ3RpJyA9PiAnficsDQogICAgJ2xCJyA9PiAnWycsICAgICdyQicgPT4gJ10n LCAgICAnbEMnID0+ICd7JywgICAgJ3JDJyA9PiAnfScsDQopOw0KDQojIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCl9fRU5EX18NCg0KPWhlYWQxIE5BTUUNCg0KbnJvZmYgLSB0ZXh0IGZvcm1hdHRpbmcN Cg0KPWhlYWQxIFNZTk9QU0lTDQoNCiAgbnJvZmYgWyBvcHRpb25zIF0gWyBmaWxlIF0gLi4uDQoN Cj1oZWFkMSBERVNDUklQVElPTg0KDQpOcm9mZiBmb3JtYXRzIHRleHQgZm9yIHRlcm1pbmFscyBh bmQgcHJpbnRlcnMgdGhhdCB1c2UgZml4ZWQtd2lkdGggZm9udHMuDQpJZiBubyBmaWxlIGlzIGdp dmVuLCBucm9mZiByZWFkcyBmcm9tIHN0YW5kYXJkIGlucHV0Lg0KVGhlIGZpbGUgbmFtZSAnLScg aXMgYWxzbyB0YWtlbiB0byBtZWFuIHN0YW5kYXJkIGlucHV0Lg0KUmVzdWx0cyBhcmUgcHJpbnRl ZCB0byBzdGFuZGFyZCBvdXRwdXQuDQoNCk9wdGlvbnMgYXJlOg0KDQogIC1pICAgICAgICBSZWFk IGZyb20gc3RhbmRhcmQgaW5wdXQgYWZ0ZXIgYWxsIG90aGVyIGZpbGVzLg0KDQogIC1tbmFtZSAg ICBSZWFkIHRoZSBzdGFuZGFyZCBtYWNybyBmaWxlIC91c3IvbGliL3RtYWMvdG1hYy5uYW1lIGJl Zm9yZSANCiAgICAgICAgICAgIHByb2Nlc3NpbmcgaW5wdXQuDQoNCiAgLW5OICAgICAgIFNldCBw YWdlIG51bWJlcmluZyB0byBiZWdpbiBhdCBOLg0KDQogIC1yYU4gICAgICBTZXQgdGhlIG51bWJl ciByZWdpc3RlciBuYW1lZCBieSB0aGUgc2luZ2xlIGNoYXJhY3RlciAnYScgdG8gTi4NCg0KICAt VG5hbWUgICAgVXNlIHRoZSBvdXRwdXQgZGV2aWNlICduYW1lJy4NCiAgICAgICAgICAgIC1UbHAg aXMgdGhlIGRlZmF1bHQsIGZvciBwbGFpbiB0ZXh0IHdpdGggb3ZlcnN0cmlraW5nLg0KICAgICAg ICAgICAgLVRjb2wgaXMgcGxhaW4gdGV4dCB3aXRoIG92ZXJzdHJpa2luZyBzdXBwcmVzc2VkLg0K DQogIC11ICAgICAgICBJbnRlcnByZXQgdGhlIGlucHV0IHRleHQgYXMgVVRGLTggKFVuaWNvZGUp Lg0KDQo9aGVhZDEgU0VFIEFMU08NCg0KVHJvZmYgVXNlcidzIE1hbnVhbCwgSm9zZXBoIEYuIE9z c2FubmEsIEJyaWFuIFcuIEtlcm5pZ2hhbiwgMTk5Mg0KDQo9aGVhZDEgQlVHUw0KDQpUaGVyZSBh cmUgYWxtb3N0IG5vIGVycm9yIG1lc3NhZ2VzLg0KDQpEb24ndCBleHBlY3QgdG8gdXNlIHRoaXMg d2l0aCBncm9mZiBtYWNyb3MuDQpUaGUgbWFueSBncm9mZiBleHRlbnNpb25zIGFyZSBub3Qgc3Vw cG9ydGVkLg0KDQpCdWlsdGluIHJlcXVlc3RzIG5vdCB5ZXQgc3VwcG9ydGVkOg0KIGNvbnRpbnVv dXMgdW5kZXJsaW5lICguY3UpLA0KIG9wdGlvbmFsIGh5cGhlbnMgYW5kIGF1dG9tYXRpYyBoeXBo ZW5hdGlvbiAoLm5oLCAuaHksIC5odyksDQogbGluZSBzcGFjaW5nICgubHMpLA0KIG91dHB1dCBs aW5lIG51bWJlcmluZyAoLm5tLCAubm4pLg0KDQpFc2NhcGUgc2VxdWVuY2VzIG5vdCB5ZXQgc3Vw cG9ydGVkIGluY2x1ZGU6DQogdHJhbnNwYXJlbnQgb3V0cHV0IChcISksDQogYnJhY2tldCBidWls ZGluZyAoXGIpLA0KIGxpbmUgZHJhd2luZyAoXGwsIFxMKSwNCiBjaGFyYWN0ZXIgbnVtYmVyIChc TiksDQogb3ZlcnN0cmlrZSBjaGFyYWN0ZXJzIChcbyksDQogYnJlYWsgYW5kIHNwcmVhZCBvdXRw dXQgbGluZSAoXHApLA0KIGV4dHJhIGxpbmUgKFx4KSwNCiBkZXZpY2UgY29udHJvbCAoXFgpLg0K DQo9aGVhZDEgQVVUSE9SDQoNCk5hdGhhbiBTY290dCBUaG9tcHNvbiA8IHF1aW1ieSBhdCBjaXR5 LW5ldCBkb3QgY29tID4NCg== ------=_Part_13296_2457140.1155046578388--