From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?QWxleGFuZHJhIEjDoWprb3bDoSA8YWhhamtvdmFAcmVkaGF0LmNvbT4=?= To: git-commits@fedoraproject.org Subject: [rpms/gdb] gdb-17.2-rebase-f44: Rebase to FSF GDB 16.1. Date: Sun, 28 Jun 2026 00:02:02 GMT Message-ID: <178260492228.1.4659770524731920611.rpms-gdb-5fc2d96b3010@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: gdb-17.2-rebase-f44 X-Git-Rev: 5fc2d96b30102d32189266b67ff9c2087d1e70d9 ICAgICAgICAgIEEgbmV3IGNvbW1pdCBoYXMgYmVlbiBwdXNoZWQuCgogICAgICAgICAgUmVwbyAg IDogcnBtcy9nZGIKICAgICAgICAgIEJyYW5jaCA6IGdkYi0xNy4yLXJlYmFzZS1mNDQKICAgICAg ICAgIENvbW1pdCA6IDVmYzJkOTZiMzAxMDJkMzIxODkyNjZiNjdmZjljMjA4N2QxZTcwZDkKICAg ICAgICAgIEF1dGhvciA6IEFsZXhhbmRyYSBIw6Fqa292w6EgPGFoYWprb3ZhQHJlZGhhdC5jb20+ CiAgICAgICAgICBEYXRlICAgOiAyMDI1LTAyLTA2VDIwOjE4OjQwKzAxOjAwCiAgICAgICAgICBT dGF0cyAgOiArMTgvLTEwMzA1IGluIDExIGZpbGUocykKICAgICAgICAgIFVSTCAgICA6IGh0dHBz Oi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvZ2RiL2MvNWZjMmQ5NmIzMDEwMmQzMjE4OTI2 NmI2N2ZmOWMyMDg3ZDFlNzBkOT9icmFuY2g9Z2RiLTE3LjItcmViYXNlLWY0NAoKICAgICAgICAg IExvZzoKICAgICAgICAgIFJlYmFzZSB0byBGU0YgR0RCIDE2LjEuCgpEcm9wcGVkOgpnZGItYmFj a3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gKZ2RiLWNhdGNocG9pbnQtcmUtc2V0 LnBhdGNoCmdkYi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKCi0tLQpkaWZmIC0t Z2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggYjE1YTEzYy4uMGFlNmIxZSAxMDA2 NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNSBAQAogL25l dy1mZWRvcmEtcmVsZWFzZQogL2dkYi1saWJzdGRjKystdjMtcHl0aG9uLTguMS4xLTIwMTgwNjI2 LnRhci54egogL3YyLjAuNS50YXIuZ3oKLS9nZGItMTUuMS50YXIueHoKLS9nZGItMTUuMi50YXIu eHoKKy9nZGItMTYuMS50YXIueHoKKy9nZGItMTYuMC50YXIuZ3oKCmRpZmYgLS1naXQgYS9fZ2Ri LnNwZWMuUGF0Y2guaW5jbHVkZSBiL19nZGIuc3BlYy5QYXRjaC5pbmNsdWRlCmluZGV4IDMxNTM4 ZTYuLmY2ZTkxNjAgMTAwNjQ0Ci0tLSBhL19nZGIuc3BlYy5QYXRjaC5pbmNsdWRlCisrKyBiL19n ZGIuc3BlYy5QYXRjaC5pbmNsdWRlCkBAIC01MywzOSArNTMsNyBAQCBQYXRjaDAxMDogZ2RiLXJo YnoxMDg0NDA0LXBwYzY0LXMzOTB4LXdyb25nLXByb2xvZ3VlLXNraXAtTzItZy0zb2YzLnBhdGNo CiAjPWZlZG9yYQogUGF0Y2gwMTE6IGdkYi1hZGQtaW5kZXgucGF0Y2gKIAotIyBCYWNrcG9ydCBv ZiB1cHN0cmVhbSBjb21taXQgMzZmYjIwZmE5MzQ4NGIxMDRkLiAgVGhpcyBpcyBub3QgcmVhbGx5 Ci0jIHJlbGV2YW50IGZvciBvdXIgYnJhbmNoLCBidXQgbGF0ZXIgY29tbWl0cyB0aGF0IGFyZSBp bXBvcnRhbnQsIGFuZAotIyB3aGljaCB3ZSB3YW50IHRvIGJhY2twb3J0LCBjb25mbGljdCB1bmxl c3MgdGhlIGNsZWFudXAgaW4gdGhpcwotIyBwYXRjaCBpcyBpbiBwbGFjZS4KLSMKLSMgVGhpcyBj b21taXQgd2lsbCBiZSBwYXJ0IG9mIEdEQiAxNiwgc28gdGhpcyBiYWNrLXBvcnQgc2hvdWxkIGRy b3AKLSMgb3V0IHdoZW4gd2UgcmViYXNlIG9udG8gR0RCIDE2LgotIwotIyBnZGI6IHJlbW92ZSBR TlggTmV1dHJpbm8gc3VwcG9ydAotIwotIyBSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIHRoZSBRTlgg TmV1dHJpbm8gT1MgKHRkZXAgYW5kIG5hdGl2ZSBiaXRzKS4gIFRoaXMKLSMgaGFzIGJlZW4gdW5t YWludGFpbmVkIGZvciB5ZWFycywgYW5kIHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gc2VlIGlmIGl0 Ci0jIHdvcmtzIChvciBldmVuIGJ1aWxkcywgZm9yIHRoZSBuYXRpdmUgcGFydHMpLiAgV2l0aG91 dCBzb21lYm9keSBhY3RpdmVseQotIyBtYWludGFpbmluZyBpdCwgdGhpcyBpcyBqdXN0IGEgYnVy ZGVuIGZvciBkZXZlbG9wZXJzLCBlc3BlY2lhbGx5IHRoYXQKLSMgdGhpcyBwb3J0IGRvZXMgYSBm ZXcgd2VpcmQgdW5pcXVlIHRoaW5ncyB0aGF0IHJlcXVpcmUgcmVhc29uaW5nIGFib3V0Ci0jIHdo ZW4gZG9pbmcgYmlnIGNoYW5nZS4KLSMKLSMgU3VwcG9ydCBmb3IgR0RCc2VydmVyIHdhcyByZW1v dmVkIGluIDIwMjAsIGNvbW1pdCA2MTNmMTQ5YTkwZDYKLSMgKCJnZGJzZXJ2ZXI6IHJlbW92ZSBz dXBwb3J0IGZvciBOZXV0cmlubyIpLgotIwotIyBDaGFuZ2UtSWQ6IEk0ZTI1ZWMyNmFiMDY2MzY2 MjlhZGViZDAyY2ViMTYxZWUzMWMyMzJkCi0jIEFwcHJvdmVkLWJ5OiBLZXZpbiBCdWV0dG5lciA8 a2V2aW5iQHJlZGhhdC5jb20+Ci1QYXRjaDAxMjogZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3Vw cG9ydC5wYXRjaAotCi0jIEJhY2twb3J0IHBhdGNoZXMgcmVsYXRlZCB0byBidWlsZC1pZCB1c2Fn ZSB3aGVuIG9wZW5pbmcgYSBjb3JlCi0jIGZpbGUsIGFuZCBhbHNvIGltcHJvdmluZyBnZW5lcmFs IGJ1aWxkLWlkIGJhc2VkIGxvb2t1cC4gIFRoZXNlIHdpbGwKLSMgYWxsIGRyb3Agb3V0IHdoZW4g cmViYXNpbmcgdG8gR0RCIDE2LgotUGF0Y2gwMTM6IGdkYi1iYWNrcG9ydC1idWlsZGlkLXJlbGF0 ZWQtY2hhbmdlcy5wYXRjaAotCiAjIE5vdCBhIGJhY2twb3J0LiAgQWRkIGEgbmV3IHNjcmlwdCB3 aGljaCBob29rcyBpbnRvIEdEQiBhbmQgc3VnZ2VzdHMKICMgUlBNcyB0byBpbnN0YWxsIHdoZW4g R0RCIGZpbmRzIGFuIG9iamZpbGUgd2l0aCBubyBkZWJ1ZyBpbmZvLgotUGF0Y2gwMTQ6IGdkYi1h ZGQtcnBtLXN1Z2dlc3Rpb24tc2NyaXB0LnBhdGNoCi0KLQotUGF0Y2gwMTU6IGdkYi1jYXRjaHBv aW50LXJlLXNldC5wYXRjaAorUGF0Y2gwMTI6IGdkYi1hZGQtcnBtLXN1Z2dlc3Rpb24tc2NyaXB0 LnBhdGNoCiAKCmRpZmYgLS1naXQgYS9fZ2RiLnNwZWMucGF0Y2guaW5jbHVkZSBiL19nZGIuc3Bl Yy5wYXRjaC5pbmNsdWRlCmluZGV4IGY2MzBmYzIuLmRhZDRkMGEgMTAwNjQ0Ci0tLSBhL19nZGIu c3BlYy5wYXRjaC5pbmNsdWRlCisrKyBiL19nZGIuc3BlYy5wYXRjaC5pbmNsdWRlCkBAIC0xMCw2 ICsxMCwzIEBACiAlcGF0Y2ggLXAxIC1QMDEwCiAlcGF0Y2ggLXAxIC1QMDExCiAlcGF0Y2ggLXAx IC1QMDEyCi0lcGF0Y2ggLXAxIC1QMDEzCi0lcGF0Y2ggLXAxIC1QMDE0Ci0lcGF0Y2ggLXAxIC1Q MDE1CgpkaWZmIC0tZ2l0IGEvX2dpdF91cHN0cmVhbV9jb21taXQgYi9fZ2l0X3Vwc3RyZWFtX2Nv bW1pdAppbmRleCAwZTA4N2E5Li4xOTQ5OTM1IDEwMDY0NAotLS0gYS9fZ2l0X3Vwc3RyZWFtX2Nv bW1pdAorKysgYi9fZ2l0X3Vwc3RyZWFtX2NvbW1pdApAQCAtMSArMSBAQAotMjNjODRkYjViM2Ni NGU4YTBkNTU1Yzc2ZTFhMGFiNTZkYzgzNTVmMworZjJhMGU1MWNkYTRkYTY4NmUzNWNhM2JjMDhh NGI1ZGFkNzEzMDQ3MwoKZGlmZiAtLWdpdCBhL19wYXRjaF9vcmRlciBiL19wYXRjaF9vcmRlcgpp bmRleCA1YWU3NzA3Li4wNDdmNDcyIDEwMDY0NAotLS0gYS9fcGF0Y2hfb3JkZXIKKysrIGIvX3Bh dGNoX29yZGVyCkBAIC05LDcgKzksNCBAQCBnZGItcmhiei04MTgzNDMtc2V0LXNvbGliLWFic29s dXRlLXByZWZpeC10ZXN0Y2FzZS5wYXRjaAogZ2RiLXJoYnoxMTQ5MjA1LWNhdGNoLXN5c2NhbGwt YWZ0ZXItZm9yay10ZXN0LnBhdGNoCiBnZGItcmhiejEwODQ0MDQtcHBjNjQtczM5MHgtd3Jvbmct cHJvbG9ndWUtc2tpcC1PMi1nLTNvZjMucGF0Y2gKIGdkYi1hZGQtaW5kZXgucGF0Y2gKLWdkYi1y ZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKLWdkYi1iYWNrcG9ydC1idWlsZGlkLXJl bGF0ZWQtY2hhbmdlcy5wYXRjaAogZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0Y2gK LWdkYi1jYXRjaHBvaW50LXJlLXNldC5wYXRjaAoKZGlmZiAtLWdpdCBhL2dkYi1hZGQtcnBtLXN1 Z2dlc3Rpb24tc2NyaXB0LnBhdGNoIGIvZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0 Y2gKaW5kZXggNTEzNTdmNC4uOThiZGE3MSAxMDA2NDQKLS0tIGEvZ2RiLWFkZC1ycG0tc3VnZ2Vz dGlvbi1zY3JpcHQucGF0Y2gKKysrIGIvZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0 Y2gKQEAgLTE0LDcgKzE0LDcgQEAgc3VnZ2VzdHMgZGVidWdpbmZvIFJQTXMgdG8gaW5zdGFsbC4K IGRpZmYgLS1naXQgYS9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4gYi9nZGIvZGF0YS1k aXJlY3RvcnkvTWFrZWZpbGUuaW4KIC0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5p bgogKysrIGIvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCi1AQCAtOTEsNiArOTEsNyBA QCBQWVRIT05fRklMRV9MSVNUID0gXAorQEAgLTkyLDYgKzkyLDcgQEAgUFlUSE9OX0ZJTEVfTElT VCA9IFwKICAJZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weSBcCiAgCWdkYi9jb21tYW5kL3By ZXR0eV9wcmludGVycy5weSBcCiAgCWdkYi9jb21tYW5kL3Byb21wdC5weSBcCkBAIC0zMyw3ICsz Myw3IEBAIGRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4 aW5mbwogICogTWFuIFBhZ2VzOjogICAgICAgICAgICAgICAgICAgTWFudWFsIHBhZ2VzCiAgKiBD b3B5aW5nOjogICAgICAgICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBz YXlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3cgeW91IGNhbiBjb3B5IGFu ZCBzaGFyZSBAdmFsdWV7R0RCTn0KLUBAIC01MDM0MSw2ICs1MDM0MiwxMTEgQEAgU2hvdyB0aGUg Y3VycmVudCB2ZXJib3NpdHkgc2V0dGluZy4KK0BAIC01MDU3Niw2ICs1MDU3NywxMTEgQEAgU2hv dyB0aGUgY3VycmVudCB2ZXJib3NpdHkgc2V0dGluZy4KICAKICBAZW5kIHRhYmxlCiAgCkBAIC05 NTcsNyArOTU3LDcgQEAgZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1t aXNzaW5nLW9iamZpbGUucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi4KIGRpZmYgLS1naXQgYS9nZGIv dGVzdHN1aXRlL2xpYi9nZGIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAogLS0tIGEv Z2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAogKysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4 cAotQEAgLTIzOCw3ICsyMzgsOCBAQCBpZiAhW2luZm8gZXhpc3RzIElOVEVSTkFMX0dEQkZMQUdT XSB7CitAQCAtMjU1LDcgKzI1NSw4IEBAIGlmICFbaW5mbyBleGlzdHMgSU5URVJOQUxfR0RCRkxB R1NdIHsKICAJCSAgICItbngiIFwKICAJCSAgICItcSIgXAogIAkJICAgey1pZXggInNldCBoZWln aHQgMCJ9IFwKQEAgLTk2Nyw3ICs5NjcsNyBAQCBkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9s aWIvZ2RiLmV4cCBiL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKICAKICAgICAgIyBJZiBERUJV R0lORk9EX1VSTFMgaXMgc2V0LCBnZGIgd2lsbCB0cnkgdG8gZG93bmxvYWQgc291cmNlcyBhbmQK ICAgICAgIyBkZWJ1ZyBpbmZvIGZvciBmLmkuIHN5c3RlbSBsaWJyYXJpZXMuICBQcmV2ZW50IHRo aXMuCi1AQCAtMjQ5Myw2ICsyNDk0LDE4IEBAIHByb2MgZGVmYXVsdF9nZGJfc3RhcnQgeyB9IHsK K0BAIC0yNjEwLDYgKzI2MTEsMTggQEAgcHJvYyBkZWZhdWx0X2dkYl9zdGFydCB7IH0gewogIAl9 CiAgICAgIH0KICAKCmRpZmYgLS1naXQgYS9nZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNo YW5nZXMucGF0Y2ggYi9nZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhY2U4YzUuLjAwMDAwMDAKLS0tIGEvZ2Ri LWJhY2twb3J0LWJ1aWxkaWQtcmVsYXRlZC1jaGFuZ2VzLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsNjc1MyArMCwwIEBACi1Gcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQotRnJvbTogQW5kcmV3IEJ1cmdlc3MgPGFidXJnZXNzQHJlZGhhdC5jb20+Ci1EYXRlOiBX ZWQsIDMxIEp1bCAyMDI0IDE1OjU4OjIwICswMTAwCi1TdWJqZWN0OiBnZGItYmFja3BvcnQtYnVp bGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gKLQotOzsgQmFja3BvcnQgcGF0Y2hlcyByZWxhdGVk IHRvIGJ1aWxkLWlkIHVzYWdlIHdoZW4gb3BlbmluZyBhIGNvcmUKLTs7IGZpbGUsIGFuZCBhbHNv IGltcHJvdmluZyBnZW5lcmFsIGJ1aWxkLWlkIGJhc2VkIGxvb2t1cC4gIFRoZXNlIHdpbGwKLTs7 IGFsbCBkcm9wIG91dCB3aGVuIHJlYmFzaW5nIHRvIEdEQiAxNi4KLQotYmFja3BvcnQgdGhlIGZv bGxvd2luZyBwYXRjaGVzIHJlbGF0ZWQgdG8gYnVpbGQtaWQgdXNhZ2UKLQotVGhpcyBvbmUgcGF0 Y2ggYmFja3BvcnRzIHRoZSBmb2xsb3dpbmcgdXBzdHJlYW0gY29tbWl0czoKLQotICAqIDE5NTc5 NWIwZmQ0IGdkYjogZml4IGEgdGFyZ2V0OiBwcmVmaXggaXNzdWUgaW4gZmluZF9zZXBhcmF0ZV9k ZWJ1Z19maWxlCi0gICogZWE0Yzk2OGNlNTQgZ2RiOiBhdm9pZCAnLy8nIGluIGZpbGVuYW1lcyB3 aGVuIHNlYXJjaGluZyBmb3IgZGVidWdpbmZvCi0gICogMjI4MzZjYTg4NTkgZ2RiOiBjaGVjayBm b3IgbXVsdGlwbGUgbWF0Y2hpbmcgYnVpbGQtaWQgZmlsZXMKLSAgKiA2ZDQ1YWY5NmVhNSBnZGJz ZXJ2ZXI6IGFkZCBnZGJzZXJ2ZXIgc3VwcG9ydCBmb3IgdkZpbGU6OnN0YXQgcGFja2V0Ci0gICog MzA1NWUzZDJmMTMgZ2RiOiBhZGQgR0RCIHNpZGUgdGFyZ2V0X29wczo6ZmlsZWlvX3N0YXQgaW1w bGVtZW50YXRpb24KLSAgKiAwOGExMTVjYzFjNCBnZGI6IGFkZCB0YXJnZXRfZmlsZWlvX3N0YXQs IGJ1dCBubyBpbXBsZW1lbnRhdGlvbnMgeWV0Ci0gICogYzdlMzhlZTQ3YzkgZ2RiOiBhdm9pZCBk dXBsaWNhdGUgc2VhcmNoIGluIGJ1aWxkX2lkX3RvX2JmZF9zdWZmaXgKLSAgKiAxMGFjN2U4MGMw MSBnZGI6IHJlbW92ZSBmaW5kX2FuZF9vcGVuX3NvbGliIHNvX2xpc3QgbWV0aG9kCi0gICogM2Uz NWI0ZGVhZTIgZ2RiL3Rlc3RzdWl0ZTogdGVzdHMgZm9yIGRlYnVnIGxvb2t1cCB3aXRoaW4gdGhl IHN5c3Jvb3QKLSAgKiA2ZGZkMDcyMjJjMCBnZGI6IGNvbnZlcnQgc2VwYXJhdGUtZGVidWctZmls ZSB0byBuZXcoaXNoKSBkZWJ1ZyBzY2hlbWUKLSAgKiA1Y2FiYzgwOThlNiBnZGIvcHl0aG9uOiBp bXBsZW1lbnQgUHl0aG9uIGZpbmRfZXhlY19ieV9idWlsZF9pZCBob29rCi0gICogZWYxYTQxZjIw YjcgZ2RiOiBhZGQgZXh0ZW5zaW9uIGhvb2sgZXh0X2xhbmdfZmluZF9vYmpmaWxlX2Zyb21fYnVp bGRpZAotICAqIDYyOWJjYzY4ZDc5IGdkYjogcmVuYW1lIGV4dF9sYW5nX21pc3NpbmdfZGVidWdp bmZvX3Jlc3VsdAotICAqIDczZDczMTJmZjYxIGdkYjogdXNlIG1hcHBlZCBmaWxlIGluZm9ybWF0 aW9uIHRvIGltcHJvdmUgZGVidWdpbmZvZCB0ZXh0Ci0gICogNWRkZDBkN2VlZmIgZ2RiL3B5dGhv bjogYXZvaWQgZGVwZW5kaW5nIG9uIHRoZSBjdXJzZXMgbGlicmFyeQotICAqIDgzNThkMzliNGYw IGdkYjogdW5pZnkgYnVpbGQtaWQgdG8gb2JqZmlsZSBsb29rdXAgY29kZQotICAqIGZhODI2YTRi YmU5IGdkYjogaW1wcm92ZSBzaGFyZWQgbGlicmFyeSBidWlsZC1pZCBjaGVjayBmb3IgY29yZS1m aWxlcwotICAqIGE0N2E2NzljNzY5IGdkYi9jb3JlZmlsZTogaW1wcm92ZSBmaWxlIGJhY2tlZCBt YXBwaW5nIGhhbmRsaW5nCi0gICogNTIyODc1ZjY3OWIgZ2RiL2NvcmVmaWxlOiBkb24ndCBwcmV0 ZW5kIHVuYXZhaWxhYmxlIHNlY3Rpb25zIGFyZSByZWFkYWJsZQotICAqIDk3ODMyNDcxODk5IGdk Yi9idWlsZC1pZDogcHJvdGVjdCBhZ2FpbnN0IHdlaXJkbHkgc2hvcnQgYnVpbGQtaWRzCi0gICog OTU0M2MzNzYyMGMgZ2RiL3Rlc3RzdWl0ZTogbWFrZSBnZGJfZ251X3N0cmlwX2RlYnVnIGNvbnNp c3RlbnQKLSAgKiBmYzI0MGJiMTQzYyBnZGIvZmlsZWlvOiBmaXggZXJybm8gZm9yIHBhY2tldHMg d2hlcmUgYW4gYXR0YWNobWVudCBpcyBleHBlY3RlZAotICAqIGRmMDQ0NWIzNzBmIGdkYi90ZXN0 c3VpdGU6IGZpeCB0eXBvICd1bnN1cHBvcnQnIHRvICd1bnN1cHBvcnRlZCcKLQotSSd2ZSBtZXJn ZWQgdGhlc2UgaW50byBhIHNpbmdsZSAobGFyZ2UpIHBhdGNoIGFzIHRoZXNlIGFsbCBtZXJnZWQK LXdpdGhvdXQgYW55IGNoYW5nZXMgKGkuZS4gdGhlc2UgcmVwcmVzZW50IGV4YWN0bHkgdGhlIHVw c3RyZWFtIGNvZGUpLAotYW5kIGFsbCBvZiB0aGVzZSB3aWxsIGJlIGluY2x1ZGVkIGluIEdEQiAx NiwgYW5kIHNvIHNob3VsZCBhbGwgZHJvcAotb3V0IHRvZ2V0aGVyIHdoZW4gd2UgcmViYXNlIHRv IEdEQiAxNiAodGhlIG5leHQgcmViYXNlKS4KLQotQWxsIG9mIHRoZXNlIHBhdGNoZXMgcmVsYXRl IHRvIGVpdGhlciBidWlsZC1pZCB1c2FnZSB3aGVuIG9wZW5pbmcgYQotY29yZSBmaWxlLCBvciBp bXByb3ZpbmcgR0RCJ3MgYnVpbGQtaWQgYmFzZWQgZGVidWcgbG9va3VwLgotCi1kaWZmIC0tZ2l0 IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwotLS0tIGEvZ2RiL05FV1MKLSsrKyBiL2dkYi9ORVdTCi1A QCAtMSw2ICsxLDM2IEBACi0gCQlXaGF0IGhhcyBjaGFuZ2VkIGluIEdEQj8KLSAJICAgICAoT3Jn YW5pemVkIHJlbGVhc2UgYnkgcmVsZWFzZSkKLSAKLSsqKiogQ2hhbmdlIHNpbmNlIEdEQiAxNQot KwotKyogUHl0aG9uIEFQSQotKwotKyAgKiogTmV3IG1vZHVsZSBnZGIubWlzc2luZ19vYmpmaWxl IHRoYXQgZmFjaWxpdGF0ZXMgZGVhbGluZyB3aXRoCi0rICAgICBtaXNzaW5nIG9iamZpbGVzIHdo ZW4gb3BlbmluZyBhIGNvcmUtZmlsZS4KLSsKLSsgICoqIE5ldyBmdW5jdGlvbiBnZGIubWlzc2lu Z19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIgdGhhdCBjYW4KLSsgICAgIHJlZ2lzdGVyIGFuIGlu c3RhbmNlIG9mIGEgc3ViLWNsYXNzIG9mCi0rICAgICBnZGIubWlzc2luZ19kZWJ1Zy5NaXNzaW5n T2JqZmlsZUhhbmRsZXIgYXMgYSBoYW5kbGVyIGZvciBtaXNzaW5nCi0rICAgICBvYmpmaWxlcy4K LSsKLSsgICoqIE5ldyBjbGFzcyBnZGIubWlzc2luZ19vYmpmaWxlLk1pc3NpbmdPYmpmaWxlSGFu ZGxlciB3aGljaCBjYW4gYmUKLSsgICAgIHN1Yi1jbGFzc2VkIHRvIGNyZWF0ZSBoYW5kbGVycyBm b3IgbWlzc2luZyBvYmpmaWxlcy4KLSsKLSsqIE5ldyBjb21tYW5kcwotKwotK2luZm8gbWlzc2lu Zy1vYmpmaWxlLWhhbmRsZXJzCi0rICBMaXN0IGFsbCB0aGUgcmVnaXN0ZXJlZCBtaXNzaW5nLW9i amZpbGUgaGFuZGxlcnMuCi0rCi0rZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIExPQ1VT IEhBTkRMRVIKLStkaXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIExPQ1VTIEhBTkRMRVIK LSsgIEVuYWJsZSBvciBkaXNhYmxlIGEgbWlzc2luZy1vYmpmaWxlIGhhbmRsZXIgd2l0aCBhIG5h bWUgbWF0Y2hpbmcgdGhlCi0rICByZWd1bGFyIGV4cHJlc3Npb24gSEFORExFUiwgaW4gTE9DVVMu Ci0rCi0rICBMT0NVUyBjYW4gYmUgJ2dsb2JhbCcgdG8gb3BlcmF0ZSBvbiBnbG9iYWwgbWlzc2lu Zy1vYmpmaWxlIGhhbmRsZXIsCi0rICAncHJvZ3NwYWNlJyB0byBvcGVyYXRlIG9uIGhhbmRsZXJz IHdpdGhpbiB0aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlLAotKyAgb3IgY2FuIGJlIGEgcmVndWxh ciBleHByZXNzaW9uIHdoaWNoIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZW5hbWUKLSsgIG9m IHRoZSBwcmltYXJ5IGV4ZWN1dGFibGUgaW4gZWFjaCBwcm9ncmFtIHNwYWNlLgotKwotICoqKiBD aGFuZ2VzIGluIEdEQiAxNQotIAotICogVGhlIE1QWCBjb21tYW5kcyAic2hvdy9zZXQgbXB4IGJv dW5kIiBoYXZlIGJlZW4gZGVwcmVjYXRlZCwgYXMgSW50ZWwKLUBAIC0yMTIsNiArMjQyLDExIEBA IHFJc0FkZHJlc3NUYWdnZWQKLSAgIGZpbGUgaXMgYWJvdXQsIHRoaXMgbmV3IHBhY2tldCBwcm92 aWRlcyBhIG1vcmUgZ2VuZXJpYyB3YXkgdG8gcGVyZm9ybSBzdWNoCi0gICBhIGNoZWNrLgotIAot K3ZGaWxlOnN0YXQKLSsgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBvbiB0aGUgcmVt b3RlIHN5c3RlbS4gIExpa2UKLSsgIHZGaWxlOmZzdGF0IGJ1dCB0YWtlcyBhIGZpbGVuYW1lIHJh dGhlciB0aGFuIGFuIG9wZW4gZmlsZQotKyAgZGVzY3JpcHRvci4KLSsKLSAqKiogQ2hhbmdlcyBp biBHREIgMTQKLSAKLSAqIEdEQiBub3cgc3VwcG9ydHMgdGhlIEFBcmNoNjQgU2NhbGFibGUgTWF0 cml4IEV4dGVuc2lvbiAyIChTTUUyKSwgd2hpY2gKLWRpZmYgLS1naXQgYS9nZGIvYnVpbGQtaWQu YyBiL2dkYi9idWlsZC1pZC5jCi0tLS0gYS9nZGIvYnVpbGQtaWQuYwotKysrIGIvZ2RiL2J1aWxk LWlkLmMKLUBAIC0yNiw2ICsyNiw5IEBACi0gI2luY2x1ZGUgImZpbGVuYW1lcy5oIgotICNpbmNs dWRlICJnZGJjb3JlLmgiCi0gI2luY2x1ZGUgImNsaS9jbGktc3R5bGUuaCIKLSsjaW5jbHVkZSAi Z2Ric3VwcG9ydC9zY29wZWRfZmQuaCIKLSsjaW5jbHVkZSAiZGVidWdpbmZvZC1zdXBwb3J0Lmgi Ci0rI2luY2x1ZGUgImV4dGVuc2lvbi5oIgotIAotIC8qIFNlZSBidWlsZC1pZC5oLiAgKi8KLSAK LUBAIC03Myw3MyArNzYsMTc3IEBAIGJ1aWxkX2lkX3ZlcmlmeSAoYmZkICphYmZkLCBzaXplX3Qg Y2hlY2tfbGVuLCBjb25zdCBiZmRfYnl0ZSAqY2hlY2spCi0gICByZXR1cm4gcmV0dmFsOwotIH0K LSAKLS0vKiBIZWxwZXIgZm9yIGJ1aWxkX2lkX3RvX2RlYnVnX2JmZC4gIExJTksgaXMgYSBwYXRo IHRvIGEgcG90ZW50aWFsCi0tICAgYnVpbGQtaWQtYmFzZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwg cG90ZW50aWFsbHkgYSBzeW1saW5rIHRvIHRoZSByZWFsIGZpbGUuCi0tICAgSWYgdGhlIGZpbGUg ZXhpc3RzIGFuZCBtYXRjaGVzIEJVSUxEX0lELCByZXR1cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0 LiAgKi8KLSsvKiBIZWxwZXIgZm9yIGJ1aWxkX2lkX3RvX2RlYnVnX2JmZC4gIE9SSUdJTkFMX0xJ Tksgd2l0aCBTVUZGSVggYXBwZW5kZWQgaXMKLSsgICBhIHBhdGggdG8gYSBwb3RlbnRpYWwgYnVp bGQtaWQtYmFzZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwgcG90ZW50aWFsbHkgYQotKyAgIHN5bWxp bmsgdG8gdGhlIHJlYWwgZmlsZS4gIElmIHRoZSBmaWxlIGV4aXN0cyBhbmQgbWF0Y2hlcyBCVUlM RF9JRCwKLSsgICByZXR1cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0LiAgKi8KLSAKLSBzdGF0aWMg Z2RiX2JmZF9yZWZfcHRyCi0tYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3Ry aW5nICZsaW5rLCBzaXplX3QgYnVpbGRfaWRfbGVuLAotLQkJCSBjb25zdCBiZmRfYnl0ZSAqYnVp bGRfaWQpCi0rYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmln aW5hbF9saW5rLAotKwkJCSBzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVp bGRfaWQsCi0rCQkJIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLSB7Ci0tICBpZiAoc2VwYXJhdGVfZGVi dWdfZmlsZV9kZWJ1ZykKLSsgIHRyaWJvb2wgc3VwcG9ydHNfdGFyZ2V0X3N0YXQgPSBUUklCT09M X1VOS05PV047Ci0rCi0rICAvKiBEcm9wIHRoZSAndGFyZ2V0OicgcHJlZml4IGlmIHRoZSB0YXJn ZXQgZmlsZXN5c3RlbSBpcyBsb2NhbC4gICovCi0rICBzdGQ6OnN0cmluZ192aWV3IG9yaWdpbmFs X2xpbmtfdmlldyAob3JpZ2luYWxfbGluayk7Ci0rICBpZiAoaXNfdGFyZ2V0X2ZpbGVuYW1lIChv cmlnaW5hbF9saW5rKSAmJiB0YXJnZXRfZmlsZXN5c3RlbV9pc19sb2NhbCAoKSkKLSsgICAgb3Jp Z2luYWxfbGlua192aWV3Ci0rICAgICAgPSBvcmlnaW5hbF9saW5rX3ZpZXcuc3Vic3RyIChzdHJs ZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkpOwotKwotKyAgLyogVGhlIHVwcGVyIGJvdW5kIG9m ICcxMCcgaGVyZSBpcyBjb21wbGV0ZWx5IGFyYml0cmFyeS4gIFRoZSBsb29wIHNob3VsZAotKyAg ICAgdGVybWluYXRlIHZpYSAnYnJlYWsnIHdoZW4gZWl0aGVyIChhKSBhIHJlYWRhYmxlIHN5bWxp bmsgaXMgZm91bmQsIG9yCi0rICAgICAoYikgYSBub24tZXhpc3RpbmcgZW50cnkgaXMgZm91bmQu Ci0rCi0rICAgICBIb3dldmVyLCBmb3IgcmVtb3RlIHRhcmdldHMsIHdlIHJlbHkgb24gdGhlIHJl bW90ZSByZXR1cm5pbmcgc2FuZQotKyAgICAgZXJyb3IgY29kZXMuICBJZiBhIHJlbW90ZSBzZW5k cyBiYWNrIHRoZSB3cm9uZyBlcnJvciBjb2RlIHRoZW4gaXQKLSsgICAgIG1pZ2h0IHRyaWNrIEdE QiBpbnRvIHRoaW5raW5nIHRoYXQgdGhlIHN5bWxpbmsgZXhpc3RzLCBidXQgcG9pbnRzIHRvIGEK LSsgICAgIG1pc3NpbmcgZmlsZSwgaW4gd2hpY2ggY2FzZSBHREIgd2lsbCB0cnkgdGhlIG5leHQg c2Vxbm8uICBXZSBkb24ndAotKyAgICAgd2FudCBhIGJyb2tlbiByZW1vdGUgdG8gY2F1c2UgR0RC IHRvIHNwaW4gaGVyZSBmb3JldmVyLCBoZW5jZSBhIGZpeGVkCi0rICAgICB1cHBlciBib3VuZC4g ICovCi0rCi0rICBmb3IgKHVuc2lnbmVkIHNlcW5vID0gMDsgc2Vxbm8gPCAxMDsgc2Vxbm8rKykK LSAgICAgewotLSAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiAgVHJ5aW5nICVzLi4u IiksIGxpbmsuY19zdHIgKCkpOwotLSAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0ZGxvZyk7Ci0tICAg IH0KLSsgICAgICBzdGQ6OnN0cmluZyBsaW5rIChvcmlnaW5hbF9saW5rX3ZpZXcpOwotIAotLSAg LyogbHJlYWxwYXRoKCkgaXMgZXhwZW5zaXZlIGV2ZW4gZm9yIHRoZSB1c3VhbGx5IG5vbi1leGlz dGVudCBmaWxlcy4gICovCi0tICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBmaWxlbmFt ZV9ob2xkZXI7Ci0tICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IG51bGxwdHI7Ci0tICBpZiAoaXNf dGFyZ2V0X2ZpbGVuYW1lIChsaW5rKSkKLS0gICAgZmlsZW5hbWUgPSBsaW5rLmNfc3RyICgpOwot LSAgZWxzZSBpZiAoYWNjZXNzIChsaW5rLmNfc3RyICgpLCBGX09LKSA9PSAwKQotLSAgICB7Ci0t ICAgICAgZmlsZW5hbWVfaG9sZGVyLnJlc2V0IChscmVhbHBhdGggKGxpbmsuY19zdHIgKCkpKTsK LS0gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lX2hvbGRlci5nZXQgKCk7Ci0tICAgIH0KLSsgICAg ICBpZiAoc2Vxbm8gPiAwKQotKwlzdHJpbmdfYXBwZW5kZiAobGluaywgIi4ldSIsIHNlcW5vKTsK LSAKLS0gIGlmIChmaWxlbmFtZSA9PSBOVUxMKQotLSAgICB7Ci0tICAgICAgaWYgKHNlcGFyYXRl X2RlYnVnX2ZpbGVfZGVidWcpCi0tCWdkYl9wcmludGYgKGdkYl9zdGRsb2csCi0tCQkgICAgXygi IG5vLCB1bmFibGUgdG8gY29tcHV0ZSByZWFsIHBhdGhcbiIpKTsKLSsgICAgICBsaW5rICs9IHN1 ZmZpeDsKLSAKLS0gICAgICByZXR1cm4ge307Ci0tICAgIH0KLSsgICAgICBzZXBhcmF0ZV9kZWJ1 Z19maWxlX2RlYnVnX3ByaW50ZiAoIlRyeWluZyAlcy4uLiIsIGxpbmsuY19zdHIgKCkpOwotIAot LSAgLyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzLiAg Ki8KLS0gIGdkYl9iZmRfcmVmX3B0ciBkZWJ1Z19iZmQgPSBnZGJfYmZkX29wZW4gKGZpbGVuYW1l LCBnbnV0YXJnZXQpOwotKyAgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGZpbGVu YW1lX2hvbGRlcjsKLSsgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IG51bGxwdHI7Ci0rICAg ICAgaWYgKGlzX3RhcmdldF9maWxlbmFtZSAobGluaykpCi0rCXsKLSsJICBnZGJfYXNzZXJ0IChs aW5rLmxlbmd0aCAoKSA+PSBzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkpOwotKwkgIGNv bnN0IGNoYXIgKmxpbmtfb25fdGFyZ2V0Ci0rCSAgICA9IGxpbmsuY19zdHIgKCkgKyBzdHJsZW4g KFRBUkdFVF9TWVNST09UX1BSRUZJWCk7Ci0rCi0rCSAgZmlsZWlvX2Vycm9yIHRhcmdldF9lcnJu bzsKLSsJICBpZiAoc3VwcG9ydHNfdGFyZ2V0X3N0YXQgIT0gVFJJQk9PTF9GQUxTRSkKLSsJICAg IHsKLSsJICAgICAgc3RydWN0IHN0YXQgc2I7Ci0rCSAgICAgIGludCByZXMgPSB0YXJnZXRfZmls ZWlvX3N0YXQgKG51bGxwdHIsIGxpbmtfb25fdGFyZ2V0LCAmc2IsCi0rCQkJCQkgICAgJnRhcmdl dF9lcnJubyk7Ci0rCi0rCSAgICAgIGlmIChyZXMgIT0gMCAmJiB0YXJnZXRfZXJybm8gIT0gRklM RUlPX0VOT1NZUykKLSsJCXsKLSsJCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYg KCJwYXRoIGRvZXNuJ3QgZXhpc3QiKTsKLSsJCSAgYnJlYWs7Ci0rCQl9Ci0rCSAgICAgIGVsc2Ug aWYgKHJlcyAhPSAwICYmIHRhcmdldF9lcnJubyA9PSBGSUxFSU9fRU5PU1lTKQotKwkJc3VwcG9y dHNfdGFyZ2V0X3N0YXQgPSBUUklCT09MX0ZBTFNFOwotKwkgICAgICBlbHNlCi0rCQl7Ci0rCQkg IHN1cHBvcnRzX3RhcmdldF9zdGF0ID0gVFJJQk9PTF9UUlVFOwotKwkJICBmaWxlbmFtZSA9IGxp bmsuY19zdHIgKCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCi0rCSAgaWYgKHN1cHBvcnRzX3RhcmdldF9z dGF0ID09IFRSSUJPT0xfRkFMU0UpCi0rCSAgICB7Ci0rCSAgICAgIGdkYl9hc3NlcnQgKGZpbGVu YW1lID09IG51bGxwdHIpOwotKwotKwkgICAgICAvKiBDb25uZWN0aW5nIHRvIGEgdGFyZ2V0IHRo YXQgZG9lc24ndCBzdXBwb3J0ICdzdGF0Jy4gIFRyeQotKwkJICdyZWFkbGluaycgYXMgYW4gYWx0 ZXJuYXRpdmUuICBUaGlzIGlzbid0IGlkZWFsLCBidXQgaXMKLSsJCSBtYXliZSBiZXR0ZXIgdGhh biBub3RoaW5nLiAgUmV0dXJucyBFSU5WQUwgaWYgdGhlIHBhdGgKLSsJCSBpc24ndCBhIHN5bWJv bGljIGxpbmssIHdoaWNoIGhpbnRzIHRoYXQgdGhlIHBhdGggaXMKLSsJCSBhdmFpbGFibGUgLS0g dGhlcmUgYXJlIG90aGVyIGVycm9ycyBlLmcuIEVOT0VOVCBmb3Igd2hlbgotKwkJIHRoZSBwYXRo IGRvZXNuJ3QgZXhpc3QsIGJ1dCB3ZSBqdXN0IGFzc3VtZSB0aGF0IGFueXRoaW5nCi0rCQkgb3Ro ZXIgdGhhbiBFSU5WQUwgaW5kaWNhdGVzIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QuICAqLwotKwkg ICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBsaW5rX3RhcmdldAotKwkJPSB0YXJnZXRf ZmlsZWlvX3JlYWRsaW5rIChudWxscHRyLCBsaW5rX29uX3RhcmdldCwKLSsJCQkJCSAgJnRhcmdl dF9lcnJubyk7Ci0rCSAgICAgIGlmIChsaW5rX3RhcmdldC5oYXNfdmFsdWUgKCkKLSsJCSAgfHwg dGFyZ2V0X2Vycm5vID09IEZJTEVJT19FSU5WQUwpCi0rCQlmaWxlbmFtZSA9IGxpbmsuY19zdHIg KCk7Ci0rCSAgICAgIGVsc2UKLSsJCXsKLSsJCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19w cmludGYgKCJwYXRoIGRvZXNuJ3QgZXhpc3QiKTsKLSsJCSAgYnJlYWs7Ci0rCQl9Ci0rCSAgICB9 Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICBzdHJ1Y3Qgc3RhdCBidWY7Ci0rCi0rCSAgLyog VGhlIGBhY2Nlc3MnIGNhbGwgYmVsb3cgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZXMgTElOSywg YnV0Ci0rCSAgICAgd2Ugd2FudCB0byBzdG9wIGluY3JlbWVudGluZyBTRVFOTyBvbmNlIHdlIGZp bmQgYSBzeW1saW5rCi0rCSAgICAgdGhhdCBkb2Vzbid0IGV4aXN0LiAgKi8KLSsJICBpZiAobHN0 YXQgKGxpbmsuY19zdHIgKCksICZidWYpICE9IDApCi0rCSAgICB7Ci0rCSAgICAgIHNlcGFyYXRl X2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgicGF0aCBkb2Vzbid0IGV4aXN0Iik7Ci0rCSAgICAg IGJyZWFrOwotKwkgICAgfQotKwotKwkgIC8qIENhbiBMSU5LIGJlIGFjY2Vzc2VkLCBvciBpZiBM SU5LIGlzIGEgc3ltbGluaywgY2FuIHRoZSBmaWxlCi0rCSAgICAgcG9pbnRlZCB0b28gYmUgYWNj ZXNzZWQ/ICBEbyB0aGlzIGFzIGxyZWFscGF0aCgpIGlzCi0rCSAgICAgZXhwZW5zaXZlLCBldmVu IGZvciB0aGUgdXN1YWxseSBub24tZXhpc3RlbnQgZmlsZXMuICAqLwotKwkgIGlmIChhY2Nlc3Mg KGxpbmsuY19zdHIgKCksIEZfT0spID09IDApCi0rCSAgICB7Ci0rCSAgICAgIGZpbGVuYW1lX2hv bGRlci5yZXNldCAobHJlYWxwYXRoIChsaW5rLmNfc3RyICgpKSk7Ci0rCSAgICAgIGZpbGVuYW1l ID0gZmlsZW5hbWVfaG9sZGVyLmdldCAoKTsKLSsJICAgIH0KLSsJfQotIAotLSAgaWYgKGRlYnVn X2JmZCA9PSBOVUxMKQotLSAgICB7Ci0tICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVi dWcpCi0tCWdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiBubywgdW5hYmxlIHRvIG9wZW4uXG4i KSk7Ci0rICAgICAgaWYgKGZpbGVuYW1lID09IG51bGxwdHIpCi0rCXsKLSsJICBzZXBhcmF0ZV9k ZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoInVuYWJsZSB0byBjb21wdXRlIHJlYWwgcGF0aCIpOwot KwkgIGNvbnRpbnVlOwotKwl9Ci0gCi0tICAgICAgcmV0dXJuIHt9OwotLSAgICB9Ci0rICAgICAg LyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzLiAgKi8K LSsgICAgICBnZGJfYmZkX3JlZl9wdHIgZGVidWdfYmZkID0gZ2RiX2JmZF9vcGVuIChmaWxlbmFt ZSwgZ251dGFyZ2V0KTsKLSAKLS0gIGlmICghYnVpbGRfaWRfdmVyaWZ5IChkZWJ1Z19iZmQuZ2V0 KCksIGJ1aWxkX2lkX2xlbiwgYnVpbGRfaWQpKQotLSAgICB7Ci0tICAgICAgaWYgKHNlcGFyYXRl X2RlYnVnX2ZpbGVfZGVidWcpCi0tCWdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiBubywgYnVp bGQtaWQgZG9lcyBub3QgbWF0Y2guXG4iKSk7Ci0rICAgICAgaWYgKGRlYnVnX2JmZCA9PSBOVUxM KQotKwl7Ci0rCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJ1bmFibGUgdG8g b3BlbiBgJXNgIiwgZmlsZW5hbWUpOwotKwkgIGNvbnRpbnVlOwotKwl9Ci0gCi0tICAgICAgcmV0 dXJuIHt9OwotLSAgICB9Ci0rICAgICAgaWYgKCFidWlsZF9pZF92ZXJpZnkgKGRlYnVnX2JmZC5n ZXQoKSwgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCkpCi0rCXsKLSsJICBzZXBhcmF0ZV9kZWJ1Z19m aWxlX2RlYnVnX3ByaW50ZiAoImJ1aWxkLWlkIGRvZXMgbm90IG1hdGNoIik7Ci0rCSAgY29udGlu dWU7Ci0rCX0KLSAKLS0gIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLSAgICBnZGJf cHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgeWVzIVxuIikpOwotKyAgICAgIHNlcGFyYXRlX2RlYnVn X2ZpbGVfZGVidWdfcHJpbnRmICgiZm91bmQgYSBtYXRjaCIpOwotKyAgICAgIHJldHVybiBkZWJ1 Z19iZmQ7Ci0rICAgIH0KLSAKLS0gIHJldHVybiBkZWJ1Z19iZmQ7Ci0rICBzZXBhcmF0ZV9kZWJ1 Z19maWxlX2RlYnVnX3ByaW50ZiAoIm5vIHN1aXRhYmxlIGZpbGUgZm91bmQiKTsKLSsgIHJldHVy biB7fTsKLSB9Ci0gCi0gLyogQ29tbW9uIGNvZGUgZm9yIGZpbmRpbmcgQkZEcyBvZiBhIGdpdmVu IGJ1aWxkLWlkLiAgVGhpcyBmdW5jdGlvbgotICAgIHdvcmtzIHdpdGggYm90aCBkZWJ1Z2luZm8g ZmlsZXMgKFNVRkZJWCA9PSAiLmRlYnVnIikgYW5kIGV4ZWN1dGFibGUKLS0gICBmaWxlcyAoU1VG RklYID09ICIiKS4gICovCi0rICAgZmlsZXMgKFNVRkZJWCA9PSAiIikuCi0rCi0rICAgVGhlIGJ1 aWxkLWlkIHdpbGwgYmUgc3BsaXQgaW50byBhIHNpbmdsZSBieXRlIHN1Yi1kaXJlY3RvcnksIGZv bGxvd2VkIGJ5Ci0rICAgdGhlIHJlbWFpbmluZyBidWlsZC1pZCBieXRlcyBhcyB0aGUgZmlsZW5h bWUsIGkuZS4gd2UgdXNlIHRoZSBsb29rdXAKLSsgICBmb3JtYXQ6IGAuYnVpbGQtaWQveHgveXku Li4uenpgLiAgQXMgYSBjb25zZXF1ZW5jZSwgaWYgQlVJTERfSURfTEVOIGlzCi0rICAgbGVzcyB0 aGFuIDIgKGJ5dGVzKSwgbm8gcmVzdWx0cyB3aWxsIGJlIGZvdW5kIGFzIHRoZXJlIGFyZSBub3Qg ZW5vdWdoCi0rICAgYnl0ZXMgdG8gZm9ybSB0aGUgYHl5Li4uLnp6YCBwYXJ0IG9mIHRoZSBsb29r dXAgZmlsZW5hbWUuICAqLwotIAotIHN0YXRpYyBnZGJfYmZkX3JlZl9wdHIKLSBidWlsZF9pZF90 b19iZmRfc3VmZml4IChzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRf aWQsCi0gCQkJY29uc3QgY2hhciAqc3VmZml4KQotIHsKLSsgIFNFUEFSQVRFX0RFQlVHX0ZJTEVf U0NPUEVEX0RFQlVHX0VOVEVSX0VYSVQ7Ci0rCi0rICBpZiAoYnVpbGRfaWRfbGVuIDwgMikKLSsg ICAgewotKyAgICAgIC8qIFplcm8gbGVuZ3RoIGJ1aWxkLWlkcyBhcmUgaWdub3JlZCBieSBiZmQu ICAqLwotKyAgICAgIGdkYl9hc3NlcnQgKGJ1aWxkX2lkX2xlbiA+IDApOwotKyAgICAgIHNlcGFy YXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmCi0rCSgiSWdub3Jpbmcgc2hvcnQgYnVpbGQtaWQg YCVzJyBmb3IgYnVpbGQtaWQgYmFzZWQgbG9va3VwIiwKLSsJIGJpbjJoZXggKGJ1aWxkX2lkLCBi dWlsZF9pZF9sZW4pLmNfc3RyICgpKTsKLSsgICAgICByZXR1cm4ge307Ci0rICAgIH0KLSsKLSAg IC8qIEtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBzbyB0aGF0IERFQlVHX0ZJTEVfRElSRUNU T1JZIGJlaW5nICIiIHdpbGwKLSAgICAgIGNhdXNlICIvLmJ1aWxkLWlkLy4uLiIgbG9va3Vwcy4g ICovCi0gCi1AQCAtMTU4LDMwICsyNjUsMzMgQEAgYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoc2l6 ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkLAotICAgICAgIHN0ZDo6 c3RyaW5nIGxpbmsgPSBkZWJ1Z2Rpci5nZXQgKCk7Ci0gICAgICAgbGluayArPSAiLy5idWlsZC1p ZC8iOwotIAotLSAgICAgIGlmIChzaXplID4gMCkKLS0JewotLQkgIHNpemUtLTsKLS0JICBzdHJp bmdfYXBwZW5kZiAobGluaywgIiUwMngvIiwgKHVuc2lnbmVkKSAqZGF0YSsrKTsKLS0JfQotKyAg ICAgIGdkYl9hc3NlcnQgKHNpemUgPiAxKTsKLSsgICAgICBzaXplLS07Ci0rICAgICAgc3RyaW5n X2FwcGVuZGYgKGxpbmssICIlMDJ4LyIsICh1bnNpZ25lZCkgKmRhdGErKyk7Ci0gCi0gICAgICAg d2hpbGUgKHNpemUtLSA+IDApCi0gCXN0cmluZ19hcHBlbmRmIChsaW5rLCAiJTAyeCIsICh1bnNp Z25lZCkgKmRhdGErKyk7Ci0gCi0tICAgICAgbGluayArPSBzdWZmaXg7Ci0tCi0gICAgICAgZ2Ri X2JmZF9yZWZfcHRyIGRlYnVnX2JmZAotLQk9IGJ1aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChsaW5r LCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lkKTsKLSsJPSBidWlsZF9pZF90b19kZWJ1Z19iZmRfMSAo bGluaywgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgc3VmZml4KTsKLSAgICAgICBpZiAoZGVidWdf YmZkICE9IE5VTEwpCi0gCXJldHVybiBkZWJ1Z19iZmQ7Ci0gCi0gICAgICAgLyogVHJ5IHRvIGxv b2sgdW5kZXIgdGhlIHN5c3Jvb3QgYXMgd2VsbC4gIElmIHRoZSBzeXNyb290IGlzCi0gCSAiL3Ro ZS9zeXNyb290IiwgaXQgd2lsbCBnaXZlCi0tCSAiL3RoZS9zeXNyb290L3Vzci9saWIvZGVidWcv LmJ1aWxkLWlkL2FiL2NkZWYuZGVidWciLiAgKi8KLSsJICIvdGhlL3N5c3Jvb3QvdXNyL2xpYi9k ZWJ1Zy8uYnVpbGQtaWQvYWIvY2RlZi5kZWJ1ZyIuCi0rCi0rCSBJZiB0aGUgc3lzcm9vdCBpcyAn dGFyZ2V0OicgYW5kIHRoZSB0YXJnZXQgZmlsZXN5c3RlbSBpcyBsb2NhbCB0bwotKwkgR0RCIHRo ZW4gJ3RhcmdldDovcGF0aC90by9jaGVjaycgYmVjb21lcyAnL3BhdGgvdG8vY2hlY2snIHdoaWNo Ci0rCSB3ZSBqdXN0IGNoZWNrZWQgYWJvdmUuICAqLwotIAotLSAgICAgIGlmICghZ2RiX3N5c3Jv b3QuZW1wdHkgKCkpCi0rICAgICAgaWYgKCFnZGJfc3lzcm9vdC5lbXB0eSAoKQotKwkgICYmIChn ZGJfc3lzcm9vdCAhPSBUQVJHRVRfU1lTUk9PVF9QUkVGSVgKLSsJICAgICAgfHwgIXRhcmdldF9m aWxlc3lzdGVtX2lzX2xvY2FsICgpKSkKLSAJewotIAkgIGxpbmsgPSBnZGJfc3lzcm9vdCArIGxp bms7Ci0tCSAgZGVidWdfYmZkID0gYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGxpbmssIGJ1aWxk X2lkX2xlbiwgYnVpbGRfaWQpOwotKwkgIGRlYnVnX2JmZCA9IGJ1aWxkX2lkX3RvX2RlYnVnX2Jm ZF8xIChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lkLAotKwkJCQkJICAgICAgIHN1ZmZpeCk7 Ci0gCSAgaWYgKGRlYnVnX2JmZCAhPSBOVUxMKQotIAkgICAgcmV0dXJuIGRlYnVnX2JmZDsKLSAJ fQotQEAgLTE5OCw5ICszMDgsMTEgQEAgYnVpbGRfaWRfdG9fZGVidWdfYmZkIChzaXplX3QgYnVp bGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpCi0gICByZXR1cm4gYnVpbGRfaWRf dG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgIi5kZWJ1ZyIpOwotIH0KLSAK LS0vKiBTZWUgYnVpbGQtaWQuaC4gICovCi0rLyogRmluZCBhbmQgb3BlbiBhIEJGRCBmb3IgYW4g ZXhlY3V0YWJsZSBmaWxlIGdpdmVuIGEgYnVpbGQtaWQuICBJZiBubyBCRkQKLSsgICBjYW4gYmUg Zm91bmQsIHJldHVybiBOVUxMLiAgVGhlIHJldHVybmVkIHJlZmVyZW5jZSB0byB0aGUgQkZEIG11 c3QgYmUKLSsgICByZWxlYXNlZCBieSB0aGUgY2FsbGVyLiAgKi8KLSAKLS1nZGJfYmZkX3JlZl9w dHIKLStzdGF0aWMgZ2RiX2JmZF9yZWZfcHRyCi0gYnVpbGRfaWRfdG9fZXhlY19iZmQgKHNpemVf dCBidWlsZF9pZF9sZW4sIGNvbnN0IGJmZF9ieXRlICpidWlsZF9pZCkKLSB7Ci0gICByZXR1cm4g YnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgIiIpOwotQEAg LTIxNywxMCArMzI5LDkgQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlX2J5X2J1aWxkaWQgKHN0 cnVjdCBvYmpmaWxlICpvYmpmaWxlLAotICAgYnVpbGRfaWQgPSBidWlsZF9pZF9iZmRfZ2V0IChv YmpmaWxlLT5vYmZkLmdldCAoKSk7Ci0gICBpZiAoYnVpbGRfaWQgIT0gTlVMTCkKLSAgICAgewot LSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQlnZGJfcHJpbnRmIChnZGJf c3RkbG9nLAotLQkJICAgIF8oIlxuTG9va2luZyBmb3Igc2VwYXJhdGUgZGVidWcgaW5mbyAoYnVp bGQtaWQpIGZvciAiCi0tCQkgICAgICAiJXNcbiIpLCBvYmpmaWxlX25hbWUgKG9iamZpbGUpKTsK LSsgICAgICBTRVBBUkFURV9ERUJVR19GSUxFX1NDT1BFRF9ERUJVR19TVEFSVF9FTkQKLSsJKCJs b29raW5nIGZvciBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIChidWlsZC1pZCkgZm9yICVzIiwKLSsJIG9i amZpbGVfbmFtZSAob2JqZmlsZSkpOwotIAotICAgICAgIGdkYl9iZmRfcmVmX3B0ciBhYmZkIChi dWlsZF9pZF90b19kZWJ1Z19iZmQgKGJ1aWxkX2lkLT5zaXplLAotIAkJCQkJCSAgIGJ1aWxkX2lk LT5kYXRhKSk7Ci1AQCAtMjI5LDkgKzM0MCw5IEBAIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZV9i eV9idWlsZGlkIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKLSAJICAmJiBmaWxlbmFtZV9jbXAg KGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSwKLSAJCQkgICBvYmpmaWxlX25hbWUgKG9i amZpbGUpKSA9PSAwKQotIAl7Ci0tCSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0t CSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAiXCIlc1wiOiBzZXBhcmF0ZSBkZWJ1ZyBpbmZv IGZpbGUgaGFzIG5vICIKLS0JCQkiZGVidWcgaW5mbyIsIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQu Z2V0ICgpKSk7Ci0rCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYKLSsJICAgICgi XCIlc1wiOiBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGZpbGUgaGFzIG5vIGRlYnVnIGluZm8iLAotKwkg ICAgIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSk7Ci0gCSAgd2FybmluZ3MtPndhcm4g KF8oIlwiJXBzXCI6IHNlcGFyYXRlIGRlYnVnIGluZm8gZmlsZSBoYXMgbm8gIgotIAkJCSAgICAi ZGVidWcgaW5mbyIpLAotIAkJCSAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxl ICgpLAotQEAgLTI0MywzICszNTQsNzggQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlX2J5X2J1 aWxkaWQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAotIAotICAgcmV0dXJuIHN0ZDo6c3RyaW5n ICgpOwotIH0KLSsKLSsvKiBTZWUgYnVpbGQtaWQuaC4gICovCi0rCi0rZ2RiX2JmZF9yZWZfcHRy Ci0rZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChwcm9ncmFtX3NwYWNlICpwc3BhY2UsCi0rCQkJ ICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAotKwkJCSAgY29uc3QgY2hhciAqZXhwZWN0 ZWRfZmlsZW5hbWUpCi0rewotKyAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQ7Ci0rCi0rICBmb3IgKHVu c2lnbmVkIGF0dGVtcHQgPSAwLCBtYXhfYXR0ZW1wdHMgPSAxOwotKyAgICAgICBhdHRlbXB0IDwg bWF4X2F0dGVtcHRzICYmIGFiZmQgPT0gbnVsbHB0cjsKLSsgICAgICAgKythdHRlbXB0KQotKyAg ICB7Ci0rICAgICAgLyogVHJ5IHRvIGZpbmQgdGhlIGV4ZWN1dGFibGUgKG9yIHNoYXJlZCBvYmpl Y3QpIGJ5IGxvb2tpbmcgZm9yIGEKLSsJIChzeW0pbGluayBvbiBkaXNrIGZyb20gdGhlIGJ1aWxk LWlkIHRvIHRoZSBvYmplY3QgZmlsZS4gICovCi0rICAgICAgYWJmZCA9IGJ1aWxkX2lkX3RvX2V4 ZWNfYmZkIChidWlsZF9pZC0+c2l6ZSwgYnVpbGRfaWQtPmRhdGEpOwotKwotKyAgICAgIGlmIChh YmZkICE9IG51bGxwdHIgfHwgYXR0ZW1wdCA+IDApCi0rCWJyZWFrOwotKwotKyAgICAgIC8qIEF0 dGVtcHQgdG8gcXVlcnkgZGVidWdpbmZvZCBmb3IgdGhlIGV4ZWN1dGFibGUuICBUaGlzIHdpbGwg b25seQotKwkgZ2V0IHJ1biBkdXJpbmcgdGhlIGZpcnN0IGF0dGVtcHQsIGlmIGFuIGV4dGVuc2lv biBsYW5ndWFnZSBob29rCi0rCSAoc2VlIGJlbG93KSBhc2tlZCBmb3IgYSBzZWNvbmQgYXR0ZW1w dCB0aGVuIHdlIHdpbGwgaGF2ZSBhbHJlYWR5Ci0rCSBicm9rZW4gb3V0IG9mIHRoZSBsb29wIGFi b3ZlLiAgKi8KLSsgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBwYXRoOwotKyAg ICAgIHNjb3BlZF9mZCBmZCA9IGRlYnVnaW5mb2RfZXhlY19xdWVyeSAoYnVpbGRfaWQtPmRhdGEs IGJ1aWxkX2lkLT5zaXplLAotKwkJCQkJICAgIGV4cGVjdGVkX2ZpbGVuYW1lLCAmcGF0aCk7Ci0r ICAgICAgaWYgKGZkLmdldCAoKSA+PSAwKQotKwl7Ci0rCSAgYWJmZCA9IGdkYl9iZmRfb3BlbiAo cGF0aC5nZXQgKCksIGdudXRhcmdldCk7Ci0rCi0rCSAgaWYgKGFiZmQgPT0gbnVsbHB0cikKLSsJ ICAgIHdhcm5pbmcgKF8oIlwiJXBzXCIgZnJvbSBkZWJ1Z2luZm9kIGNhbm5vdCBiZSBvcGVuZWQg YXMgYmZkOiAlcyIpLAotKwkJICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5 bGUgKCksIHBhdGguZ2V0ICgpKSwKLSsJCSAgICAgZ2RiX2JmZF9lcnJtc2cgKGJmZF9nZXRfZXJy b3IgKCksIG51bGxwdHIpLmNfc3RyICgpKTsKLSsJICBlbHNlIGlmICghYnVpbGRfaWRfdmVyaWZ5 IChhYmZkLmdldCAoKSwgYnVpbGRfaWQtPnNpemUsCi0rCQkJCSAgICAgYnVpbGRfaWQtPmRhdGEp KQotKwkgICAgYWJmZCA9IG51bGxwdHI7Ci0rCX0KLSsKLSsgICAgICBpZiAoYWJmZCAhPSBudWxs cHRyKQotKwlicmVhazsKLSsKLSsgICAgICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IGV4 dF9yZXN1bHQKLSsJPSBleHRfbGFuZ19maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIChwc3BhY2Us IGJ1aWxkX2lkLAotKwkJCQkJICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUpOwotKyAgICAgIGlmICgh ZXh0X3Jlc3VsdC5maWxlbmFtZSAoKS5lbXB0eSAoKSkKLSsJewotKwkgIC8qIFRoZSBleHRlbnNp b24gaWRlbnRpZmllZCB0aGUgZmlsZSBmb3IgdXMuICAqLwotKwkgIGFiZmQgPSBnZGJfYmZkX29w ZW4gKGV4dF9yZXN1bHQuZmlsZW5hbWUgKCkuY19zdHIgKCksIGdudXRhcmdldCk7Ci0rCSAgaWYg KGFiZmQgPT0gbnVsbHB0cikKLSsJICAgIHsKLSsJICAgICAgd2FybmluZyAoXygiXCIlcHNcIiBm cm9tIGV4dGVuc2lvbiBjYW5ub3QgYmUgb3BlbmVkIGFzIGJmZDogJXMiKSwKLSsJCSAgICAgICBz dHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCi0rCQkJCSAgICAgIGV4dF9y ZXN1bHQuZmlsZW5hbWUgKCkuY19zdHIgKCkpLAotKwkJICAgICAgIGdkYl9iZmRfZXJybXNnIChi ZmRfZ2V0X2Vycm9yICgpLCBudWxscHRyKS5jX3N0ciAoKSk7Ci0rCSAgICAgIGJyZWFrOwotKwkg ICAgfQotKwotKwkgIC8qIElmIHRoZSBleHRlbnNpb24gZ2F2ZSB1cyBhIHBhdGggdG8gYSBmaWxl IHRoZW4gd2UgYWx3YXlzCi0rCSAgICAgYXNzdW1lIHRoYXQgaXQgaXMgdGhlIGNvcnJlY3QgZmls ZSwgd2UgZG8gbm8gYWRkaXRpb25hbCBjaGVjawotKwkgICAgIG9mIGl0cyBidWlsZC1pZC4gICov Ci0rCX0KLSsgICAgICBlbHNlIGlmIChleHRfcmVzdWx0LnRyeV9hZ2FpbiAoKSkKLSsJewotKwkg IC8qIFRoZSBleHRlbnNpb24gbWlnaHQgaGF2ZSBpbnN0YWxsZWQgdGhlIGZpbGUgaW4gdGhlIGV4 cGVjdGVkCi0rCSAgICAgbG9jYXRpb24sIHdlIHNob3VsZCB0cnkgYWdhaW4uICAqLwotKwkgIG1h eF9hdHRlbXB0cyA9IDI7Ci0rCSAgY29udGludWU7Ci0rCX0KLSsgICAgfQotKwotKyAgcmV0dXJu IGFiZmQ7Ci0rfQotZGlmZiAtLWdpdCBhL2dkYi9idWlsZC1pZC5oIGIvZ2RiL2J1aWxkLWlkLmgK LS0tLSBhL2dkYi9idWlsZC1pZC5oCi0rKysgYi9nZGIvYnVpbGQtaWQuaAotQEAgLTQwLDEzICs0 MCw2IEBAIGV4dGVybiBpbnQgYnVpbGRfaWRfdmVyaWZ5IChiZmQgKmFiZmQsCi0gZXh0ZXJuIGdk Yl9iZmRfcmVmX3B0ciBidWlsZF9pZF90b19kZWJ1Z19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4s Ci0gCQkJCQkgICAgICBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpOwotIAotLS8qIEZpbmQgYW5k IG9wZW4gYSBCRkQgZm9yIGFuIGV4ZWN1dGFibGUgZmlsZSBnaXZlbiBhIGJ1aWxkLWlkLiAgSWYg bm8gQkZECi0tICAgY2FuIGJlIGZvdW5kLCByZXR1cm4gTlVMTC4gIFRoZSByZXR1cm5lZCByZWZl cmVuY2UgdG8gdGhlIEJGRCBtdXN0IGJlCi0tICAgcmVsZWFzZWQgYnkgdGhlIGNhbGxlci4gICov Ci0tCi0tZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBidWlsZF9pZF90b19leGVjX2JmZCAoc2l6ZV90 IGJ1aWxkX2lkX2xlbiwKLS0JCQkJCSAgICAgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkKTsKLS0K LSAvKiBGaW5kIHRoZSBzZXBhcmF0ZSBkZWJ1ZyBmaWxlIGZvciBPQkpGSUxFLCBieSB1c2luZyB0 aGUgYnVpbGQtaWQKLSAgICBhc3NvY2lhdGVkIHdpdGggT0JKRklMRSdzIEJGRC4gIElmIHN1Y2Nl c3NmdWwsIHJldHVybnMgdGhlIGZpbGUgbmFtZSBmb3IgdGhlCi0gICAgc2VwYXJhdGUgZGVidWcg ZmlsZSwgb3RoZXJ3aXNlLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgotQEAgLTYwLDYgKzUzLDIy IEBAIGV4dGVybiBnZGJfYmZkX3JlZl9wdHIgYnVpbGRfaWRfdG9fZXhlY19iZmQgKHNpemVfdCBi dWlsZF9pZF9sZW4sCi0gZXh0ZXJuIHN0ZDo6c3RyaW5nIGZpbmRfc2VwYXJhdGVfZGVidWdfZmls ZV9ieV9idWlsZGlkCi0gICAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGRlZmVycmVkX3dhcm5p bmdzICp3YXJuaW5ncyk7Ci0gCi0rLyogRmluZCBhbiBvYmpmaWxlIChleGVjdXRhYmxlIG9yIHNo YXJlZCBsaWJyYXJ5KSB0aGF0IG1hdGNoZXMgQlVJTERfSUQuCi0rICAgVGhpcyBpcyBkb25lIGJ5 IGZpcnN0IGNoZWNraW5nIGluIHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBmb3IgYQotKyAgIHN1 aXRhYmxlIC5idWlsZC1pZC8gc3ViLWRpcmVjdG9yeSwgYW5kIGxvb2tpbmcgZm9yIGEgZmlsZSB3 aXRoIHRoZQotKyAgIHJlcXVpcmVkIGJ1aWxkLWlkICh1c3VhbGx5IGEgc3ltYm9saWMgbGluayBv ciBoYXJkIGxpbmsgdG8gdGhlIGFjdHVhbAotKyAgIGZpbGUpLgotKwotKyAgIElmIHRoYXQgZG9l c24ndCBmaW5kIHVzIGEgZmlsZSB0aGVuIHdlIGNhbGwgdG8gZGVidWdpbmZvZCB0byBzZWUgaWYg aXQKLSsgICBjYW4gcHJvdmlkZSB0aGUgcmVxdWlyZWQgZmlsZS4KLSsKLSsgICBFWFBFQ1RFRF9G SUxFTkFNRSBpcyB1c2VkIGluIG91dHB1dCBtZXNzYWdlcyBmcm9tIGRlYnVnaW5mb2QsIHRoaXMK LSsgICBzaG91bGQgYmUgdGhlIGZpbGUgd2Ugd2VyZSBsb29raW5nIGZvciBidXQgY291bGRuJ3Qg ZmluZC4gICovCi0rCi0rZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBmaW5kX29iamZpbGVfYnlfYnVp bGRfaWQKLSsgIChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCBjb25zdCBiZmRfYnVpbGRf aWQgKmJ1aWxkX2lkLAotKyAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVuYW1lKTsKLSsKLSAv KiBSZXR1cm4gYW4gaGV4LXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBCVUlMRF9JRC4gICovCi0g Ci0gc3RhdGljIGlubGluZSBzdGQ6OnN0cmluZwotZGlmZiAtLWdpdCBhL2dkYi9jb3JlbG93LmMg Yi9nZGIvY29yZWxvdy5jCi0tLS0gYS9nZGIvY29yZWxvdy5jCi0rKysgYi9nZGIvY29yZWxvdy5j Ci1AQCAtNDcsMTcgKzQ3LDEzMCBAQAotICNpbmNsdWRlICJnZGJzdXBwb3J0L3BhdGhzdHVmZi5o IgotICNpbmNsdWRlICJnZGJzdXBwb3J0L3Njb3BlZF9mZC5oIgotICNpbmNsdWRlICJnZGJzdXBw b3J0L3g4Ni14c3RhdGUuaCIKLS0jaW5jbHVkZSAiZGVidWdpbmZvZC1zdXBwb3J0LmgiCi0gI2lu Y2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0gI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+Ci0gI2luY2x1 ZGUgImNsaS9jbGktY21kcy5oIgotICNpbmNsdWRlICJ4bWwtdGRlc2MuaCIKLSAjaW5jbHVkZSAi bWVtdGFnLmgiCi0rI2luY2x1ZGUgImNsaS9jbGktc3R5bGUuaCIKLSAKLSAjaWZuZGVmIE9fTEFS R0VGSUxFCi0gI2RlZmluZSBPX0xBUkdFRklMRSAwCi0gI2VuZGlmCi0gCi0rLyogQSBtZW1fcmFu Z2UgYW5kIHRoZSBidWlsZC1pZCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUgbWFwcGVkIGludG8g dGhlCi0rICAgZ2l2ZW4gcmFuZ2UuICAqLwotKwotK3N0cnVjdCBtZW1fcmFuZ2VfYW5kX2J1aWxk X2lkCi0rewotKyAgbWVtX3JhbmdlX2FuZF9idWlsZF9pZCAobWVtX3JhbmdlICYmciwgY29uc3Qg YmZkX2J1aWxkX2lkICppZCkKLSsgICAgOiByYW5nZSAociksCi0rICAgICAgYnVpbGRfaWQgKGlk KQotKyAgeyAvKiBOb3RoaW5nLiAgKi8gfQotKwotKyAgLyogQSByYW5nZSBvZiBtZW1vcnkgYWRk cmVzc2VzLiAgKi8KLSsgIG1lbV9yYW5nZSByYW5nZTsKLSsKLSsgIC8qIFRoZSBidWlsZC1pZCBv ZiB0aGUgZmlsZSBtYXBwZWQgaW50byBSQU5HRS4gICovCi0rICBjb25zdCBiZmRfYnVpbGRfaWQg KmJ1aWxkX2lkOwotK307Ci0rCi0rLyogQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyBjcmVh dGVkIHdpdGhpbiB0aGUgY29yZV90YXJnZXQgYW5kIGlzIHVzZWQKLSsgICB0byBob2xkIGFsbCB0 aGUgaW5mb3JtYXRpb24gdGhhdCByZWxhdGluZyB0byBtYXBwZWQgZmlsZXMsIHRoZWlyIGFkZHJl c3MKLSsgICByYW5nZXMsIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGJ1aWxkLWlkcy4gICovCi0r Ci0rc3RydWN0IG1hcHBlZF9maWxlX2luZm8KLSt7Ci0rICAvKiBTZWUgY29tbWVudCBvbiBmdW5j dGlvbiBkZWZpbml0aW9uLiAgKi8KLSsKLSsgIHZvaWQgYWRkIChjb25zdCBjaGFyICpzb25hbWUs IGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVuYW1lLAotKwkgICAgY29uc3QgY2hhciAqYWN0dWFs X2ZpbGVuYW1lLCBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+ICYmcmFuZ2VzLAotKwkgICAgY29uc3Qg YmZkX2J1aWxkX2lkICpidWlsZF9pZCk7Ci0rCi0rICAvKiBTZWUgY29tbWVudCBvbiBmdW5jdGlv biBkZWZpbml0aW9uLiAgKi8KLSsKLSsgIHN0ZDo6b3B0aW9uYWwgPGNvcmVfdGFyZ2V0X21hcHBl ZF9maWxlX2luZm8+Ci0rICBsb29rdXAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzdGQ6 Om9wdGlvbmFsPENPUkVfQUREUj4gJmFkZHIpOwotKwotK3ByaXZhdGU6Ci0rCi0rICAvKiBIZWxw ZXIgZm9yIDo6bG9va3VwLiAgQlVJTERfSUQgaXMgYSBidWlsZC1pZCB0aGF0IHdhcyBmb3VuZCBp bgotKyAgICAgb25lIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoaXMgY2xhc3MuICBM b29rdXAgdGhlCi0rICAgICBjb3JyZXNwb25kaW5nIGZpbGVuYW1lIGluIG1fYnVpbGRfaWRfdG9f ZmlsZW5hbWVfbWFwIGFuZCByZXR1cm4gYSBwYWlyCi0rICAgICBjb250YWluaW5nIHRoZSBidWls ZC1pZCBhbmQgZmlsZW5hbWUuCi0rCi0rICAgICBJZiBubyBjb3JyZXNwb25kaW5nIGZpbGVuYW1l IGlzIGZvdW5kIGluIG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFwCi0rICAgICB0aGVuIHRoZSBy ZXR1cm5lZCBwYWlyIGNvbnRhaW5zIEJVSUxEX0lEIGFuZCBhbiBlbXB0eSBzdHJpbmcuCi0rCi0r ICAgICBJZiBCVUlMRF9JRCBpcyBudWxscHRyIHRoZW4gdGhlIHJldHVybmVkIHBhaXIgY29udGFp bnMgbnVsbHB0ciBhbmQgYW4KLSsgICAgIGVtcHR5IHN0cmluZy4gICovCi0rCi0rICBzdHJ1Y3Qg Y29yZV90YXJnZXRfbWFwcGVkX2ZpbGVfaW5mbwotKyAgbWFrZV9yZXN1bHQgKGNvbnN0IGJmZF9i dWlsZF9pZCAqYnVpbGRfaWQpCi0rICB7Ci0rICAgIGlmIChidWlsZF9pZCAhPSBudWxscHRyKQot KyAgICAgIHsKLSsgICAgICBhdXRvIGl0ID0gbV9idWlsZF9pZF90b19maWxlbmFtZV9tYXAuZmlu ZCAoYnVpbGRfaWQpOwotKyAgICAgIGlmIChpdCAhPSBtX2J1aWxkX2lkX3RvX2ZpbGVuYW1lX21h cC5lbmQgKCkpCi0rCXJldHVybiB7IGJ1aWxkX2lkLCBpdC0+c2Vjb25kIH07Ci0rICAgIH0KLSsK LSsgICAgcmV0dXJuIHsgYnVpbGRfaWQsIHt9IH07Ci0rICB9Ci0rCi0rICAvKiBBIHR5cGUgdGhh dCBtYXBzIGEgc3RyaW5nIHRvIGEgYnVpbGQtaWQuICAqLwotKyAgdXNpbmcgc3RyaW5nX3RvX2J1 aWxkX2lkX21hcAotKyAgICA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgY29uc3Qg YmZkX2J1aWxkX2lkICo+OwotKwotKyAgLyogQSB0eXBlIHRoYXQgbWFwcyBhIGJ1aWxkLWlkIHRv IGEgc3RyaW5nLiAgKi8KLSsgIHVzaW5nIGJ1aWxkX2lkX3RvX3N0cmluZ19tYXAKLSsgICAgPSBz dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgYmZkX2J1aWxkX2lkICosIHN0ZDo6c3RyaW5nPjsKLSsK LSsgIC8qIFdoZW4gbG9hZGluZyBhIGNvcmUgZmlsZSwgdGhlIGJ1aWxkLWlkcyBhcmUgZXh0cmFj dGVkIGJhc2VkIG9uIHRoZQotKyAgICAgZmlsZSBiYWNrZWQgbWFwcGluZ3MuICBUaGlzIG1hcCBh c3NvY2lhdGVzIHRoZSBuYW1lIG9mIGEgZmlsZSB0aGF0IHdhcwotKyAgICAgbWFwcGVkIGludG8g dGhlIGNvcmUgZmlsZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkLWlkLiAgVGhlCi0rICAg ICBidWlsZC1pZCBwb2ludGVycyBpbiB0aGlzIG1hcCB3aWxsIG5ldmVyIGJlIG51bGxwdHIgYXMg d2Ugb25seSByZWNvcmQKLSsgICAgIGZpbGVzIGlmIHRoZXkgaGF2ZSBhIGJ1aWxkLWlkLiAgKi8K LSsKLSsgIHN0cmluZ190b19idWlsZF9pZF9tYXAgbV9maWxlbmFtZV90b19idWlsZF9pZF9tYXA7 Ci0rCi0rICAvKiBNYXAgYSBidWlsZC1pZCBwb2ludGVyIGJhY2sgdG8gdGhlIG5hbWUgb2YgdGhl IGZpbGUgdGhhdCB3YXMgbWFwcGVkCi0rICAgICBpbnRvIHRoZSBpbmZlcmlvcidzIGFkZHJlc3Mg c3BhY2UuICBJZiB3ZSBsb29rdXAgYSBtYXRjaGluZyBidWlsZC1pZAotKyAgICAgdXNpbmcgZWl0 aGVyIGEgc29uYW1lIG9yIGFuIGFkZHJlc3MgdGhlbiB0aGlzIG1hcCBhbGxvd3MgdXMgdG8gYWxz bwotKyAgICAgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byBhIGZpbGUgd2l0aCBhIG1hdGNoaW5nIGJ1 aWxkLWlkLiAgKi8KLSsKLSsgIGJ1aWxkX2lkX3RvX3N0cmluZ19tYXAgbV9idWlsZF9pZF90b19m aWxlbmFtZV9tYXA7Ci0rCi0rICAvKiBJZiB0aGUgZmlsZSB0aGF0IHdhcyBtYXBwZWQgaW50byB0 aGUgY29yZSBmaWxlIHdhcyBhIHNoYXJlZCBsaWJyYXJ5Ci0rICAgICB0aGVuIGl0IG1pZ2h0IGhh dmUgYSBEVF9TT05BTUUgdGFnIGluIGl0cyAuZHluYW1pYyBzZWN0aW9uLCB0aGlzIHRhZwotKyAg ICAgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBzaGFyZWQgb2JqZWN0LiAgV2hlbiBvcGVuaW5nIGEg c2hhcmVkIGxpYnJhcnksCi0rICAgICBpZiBpdCdzIGJhc2VuYW1lIGFwcGVhcnMgaW4gdGhpcyBt YXAgdGhlbiB3ZSBjYW4gdXNlIHRoZSBjb3JyZXNwb25kaW5nCi0rICAgICBidWlsZC1pZC4KLSsK LSsgICAgIEluIHRoZSByYXJlIGNhc2UgdGhhdCB0d28gZGlmZmVyZW50IGZpbGVzIGhhdmUgdGhl IHNhbWUgRFRfU09OQU1FCi0rICAgICB2YWx1ZSB0aGVuIHRoZSBidWlsZC1pZCBwb2ludGVyIGlu IHRoaXMgbWFwIHdpbGwgYmUgbnVsbHB0ciwgdGhpcwotKyAgICAgaW5kaWNhdGVzIHRoYXQgaXQn cyBub3QgcG9zc2libGUgdG8gZmluZCBhIGJ1aWxkLWlkIGJhc2VkIG9uIHRoZSBnaXZlbgotKyAg ICAgRFRfU09OQU1FIHZhbHVlLiAgKi8KLSsKLSsgIHN0cmluZ190b19idWlsZF9pZF9tYXAgbV9z b25hbWVfdG9fYnVpbGRfaWRfbWFwOwotKwotKyAgLyogVGhpcyB2ZWN0b3IgbWFwcyBtZW1vcnkg cmFuZ2VzIG9udG8gYW4gYXNzb2NpYXRlZCBidWlsZC1pZC4gIFRoZQotKyAgICAgcmFuZ2VzIGFy ZSB0aG9zZSBvZiB0aGUgZmlsZXMgbWFwcGVkIGludG8gdGhlIGNvcmUgZmlsZS4KLSsKLSsgICAg IEVudHJpZXMgaW4gdGhpcyB2ZWN0b3IgbXVzdCBub3Qgb3ZlcmxhcCwgYW5kIGFyZSBzb3J0ZWQg YmUgaW5jcmVhc2luZwotKyAgICAgbWVtb3J5IGFkZHJlc3MuICBXaXRoaW4gZWFjaCBlbnRyeSB0 aGUgYnVpbGQtaWQgcG9pbnRlciB3aWxsIG5vdCBiZQotKyAgICAgbnVsbHB0ci4KLSsKLSsgICAg IFdoaWxlIGJ1aWxkaW5nIHRoaXMgdmVjdG9yIHRoZSBlbnRyaWVzIGFyZSBub3Qgc29ydGVkLCB0 aGV5IGFyZQotKyAgICAgc29ydGVkIG9uY2UgYWZ0ZXIgdGhlIHRhYmxlIGhhcyBmaW5pc2hlZCBi ZWluZyBidWlsdC4gICovCi0rCi0rICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2VfYW5kX2J1aWxkX2lk PiBtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdDsKLSsKLSsgIC8qIEZhbHNlIGlmIGFkZHJlc3Nf dG9fYnVpbGRfaWRfbGlzdCBpcyB1bnNvcnRlZCwgb3RoZXJ3aXNlIHRydWUuICAqLwotKwotKyAg Ym9vbCBtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdF9zb3J0ZWQgPSBmYWxzZTsKLSt9OwotKwot IC8qIFRoZSBjb3JlIGZpbGUgdGFyZ2V0LiAgKi8KLSAKLSBzdGF0aWMgY29uc3QgdGFyZ2V0X2lu Zm8gY29yZV90YXJnZXRfaW5mbyA9IHsKLUBAIC0xMzQsNiArMjQ3LDM0IEBAIGNsYXNzIGNvcmVf dGFyZ2V0IGZpbmFsIDogcHVibGljIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQKLSAgIC8qIFNlZSBk ZWZpbml0aW9uLiAgKi8KLSAgIHZvaWQgaW5mb19wcm9jX21hcHBpbmdzIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCk7Ci0gCi0rICBzdGQ6Om9wdGlvbmFsIDxjb3JlX3RhcmdldF9tYXBwZWRfZmls ZV9pbmZvPgotKyAgbG9va3VwX21hcHBlZF9maWxlX2luZm8gKGNvbnN0IGNoYXIgKmZpbGVuYW1l LAotKwkJCSAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAmYWRkcikKLSsgIHsKLSsg ICAgcmV0dXJuIG1fbWFwcGVkX2ZpbGVfaW5mby5sb29rdXAgKGZpbGVuYW1lLCBhZGRyKTsKLSsg IH0KLSsKLSsgIC8qIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHBlY3RlZCBleGVj dXRhYmxlIGZpbGVuYW1lIG9idGFpbmVkCi0rICAgICBmcm9tIHRoZSBtYXBwZWQgZmlsZSBpbmZv cm1hdGlvbiB3aXRoaW4gdGhlIGNvcmUgZmlsZS4gIFRoZSBmaWxlbmFtZQotKyAgICAgcmV0dXJu ZWQgd2lsbCBiZSBmb3IgdGhlIG1hcHBlZCBmaWxlIHdob3NlIEVMRiBoZWFkZXJzIGFyZSBtYXBw ZWQgYXQKLSsgICAgIHRoZSBsb3dlc3QgYWRkcmVzcyAoaS5lLiB3aGljaCBHREIgZW5jb3VudGVy cyBmaXJzdCkuCi0rCi0rICAgICBJZiBubyBzdWl0YWJsZSBmaWxlbmFtZSBjYW4gYmUgZm91bmQg dGhlbiB0aGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgYmUKLSsgICAgIGVtcHR5LgotKwotKyAgICAg SWYgdGhlcmUgYXJlIG5vIGJ1aWxkLWlkcyBlbWJlZGRlZCBpbnRvIHRoZSBjb3JlIGZpbGUgdGhl biB0aGUKLSsgICAgIHJldHVybmVkIHN0cmluZyB3aWxsIGJlIGVtcHR5LgotKwotKyAgICAgSWYg YSBub24tZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIHRoZW4gdGhlcmUgaXMgbm8gZ3VhcmFudGVl IHRoYXQgdGhlCi0rICAgICBuYW1lZCBmaWxlIGV4aXN0cyBvbiBkaXNrLCBvciBpZiBpdCBkb2Vz IGV4aXN0IG9uIGRpc2ssIHRoZW4gdGhlCi0rICAgICBvbi1kaXNrIGZpbGUgbWlnaHQgaGF2ZSBh IGRpZmZlcmVudCBidWlsZC1pZCB0byB0aGUgZGVzaXJlZAotKyAgICAgYnVpbGQtaWQuICAqLwot KyAgY29uc3Qgc3RkOjpzdHJpbmcgJgotKyAgZXhwZWN0ZWRfZXhlY19maWxlbmFtZSAoKSBjb25z dAotKyAgewotKyAgICByZXR1cm4gbV9leHBlY3RlZF9leGVjX2ZpbGVuYW1lOwotKyAgfQotKwot IHByaXZhdGU6IC8qIHBlci1jb3JlIGRhdGEgKi8KLSAKLSAgIC8qIEdldCByaWQgb2YgdGhlIGNv cmUgaW5mZXJpb3IuICAqLwotQEAgLTE1NiwxOSArMjk3LDIzIEBAIGNsYXNzIGNvcmVfdGFyZ2V0 IGZpbmFsIDogcHVibGljIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQKLSAgICAgIHN0aWxsIGJlIHVz ZWZ1bC4gICovCi0gICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+IG1fY29yZV91bmF2YWlsYWJsZV9t YXBwaW5nczsKLSAKLS0gIC8qIEJ1aWxkIG1fY29yZV9maWxlX21hcHBpbmdzLiAgQ2FsbGVkIGZy b20gdGhlIGNvbnN0cnVjdG9yLiAgKi8KLS0gIHZvaWQgYnVpbGRfZmlsZV9tYXBwaW5ncyAoKTsK LSsgIC8qIERhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgaW5mb3JtYXRpb24gbWFwcGluZyBmaWxl bmFtZXMgYW5kIGFkZHJlc3MKLSsgICAgIHJhbmdlcyB0byB0aGUgY29ycmVzcG9uZGluZyBidWls ZC1pZHMgYXMgd2VsbCBhcyB0aGUgcmV2ZXJzZSBidWlsZC1pZAotKyAgICAgdG8gZmlsZW5hbWUg bWFwcGluZy4gICovCi0rICBtYXBwZWRfZmlsZV9pbmZvIG1fbWFwcGVkX2ZpbGVfaW5mbzsKLSAK LS0gIC8qIEhlbHBlciBtZXRob2QgZm9yIHhmZXJfcGFydGlhbC4gICovCi0tICBlbnVtIHRhcmdl dF94ZmVyX3N0YXR1cyB4ZmVyX21lbW9yeV92aWFfbWFwcGluZ3MgKGdkYl9ieXRlICpyZWFkYnVm LAotLQkJCQkJCSAgICBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsCi0tCQkJCQkJICAgIFVMT05H RVNUIG9mZnNldCwKLS0JCQkJCQkgICAgVUxPTkdFU1QgbGVuLAotLQkJCQkJCSAgICBVTE9OR0VT VCAqeGZlcmVkX2xlbik7Ci0rICAvKiBCdWlsZCBtX2NvcmVfZmlsZV9tYXBwaW5ncyBhbmQgbV9t YXBwZWRfZmlsZV9pbmZvLiAgQ2FsbGVkIGZyb20gdGhlCi0rICAgICBjb25zdHJ1Y3Rvci4gICov Ci0rICB2b2lkIGJ1aWxkX2ZpbGVfbWFwcGluZ3MgKCk7Ci0gCi0gICAvKiBGSVhNRToga2V0dGVu aXMvMjAwMzEwMjM6IEV2ZW50dWFsbHkgdGhpcyBmaWVsZCBzaG91bGQKLSAgICAgIGRpc2FwcGVh ci4gICovCi0gICBzdHJ1Y3QgZ2RiYXJjaCAqbV9jb3JlX2dkYmFyY2ggPSBOVUxMOwotKwotKyAg LyogSWYgbm90IGVtcHR5IHRoZW4gdGhpcyBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0 YWJsZSBkaXNjb3ZlcmVkCi0rICAgICB3aGVuIHByb2Nlc3NpbmcgdGhlIG1lbW9yeS1tYXBwZWQg ZmlsZSBpbmZvcm1hdGlvbi4gIFRoaXMgd2lsbCBvbmx5Ci0rICAgICBiZSBzZXQgaWYgd2UgZmlu ZCBhIG1hcHBlZCB3aXRoIGEgc3VpdGFibGUgYnVpbGQtaWQuICAqLwotKyAgc3RkOjpzdHJpbmcg bV9leHBlY3RlZF9leGVjX2ZpbGVuYW1lOwotIH07Ci0gCi0gY29yZV90YXJnZXQ6OmNvcmVfdGFy Z2V0ICgpCi1AQCAtMjE2LDkgKzM2MSw1MSBAQCBjb3JlX3RhcmdldDo6Y29yZV90YXJnZXQgKCkK LSB2b2lkCi0gY29yZV90YXJnZXQ6OmJ1aWxkX2ZpbGVfbWFwcGluZ3MgKCkKLSB7Ci0rICAvKiBU eXBlIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgZmlsZSBtYXBwZWQgaW50byB0 aGUgaW5mZXJpb3IKLSsgICAgIGF0IHRoZSBwb2ludCB3aGVuIHRoZSBjb3JlIGZpbGUgd2FzIGNy ZWF0ZWQuICBBc3NvY2lhdGVzIGEgYnVpbGQtaWQKLSsgICAgIHdpdGggdGhlIGxpc3Qgb2YgcmVn aW9ucyB0aGUgZmlsZSBpcyBtYXBwZWQgaW50by4gICovCi0rICBzdHJ1Y3QgbWFwcGVkX2ZpbGUK LSsgIHsKLSsgICAgLyogVHlwZSBmb3IgYSByZWdpb24gb2YgYSBmaWxlIHRoYXQgd2FzIG1hcHBl ZCBpbnRvIHRoZSBpbmZlcmlvciB3aGVuCi0rICAgICAgIHRoZSBjb3JlIGZpbGUgd2FzIGdlbmVy YXRlZC4gICovCi0rICAgIHN0cnVjdCByZWdpb24KLSsgICAgewotKyAgICAgIC8qIENvbnN0cnVj dG9yLiAgIFNlZSBtZW1iZXIgdmFyaWFibGVzIGZvciBhcmd1bWVudCBkZXNjcmlwdGlvbnMuICAq LwotKyAgICAgIHJlZ2lvbiAoQ09SRV9BRERSIHN0YXJ0XywgQ09SRV9BRERSIGVuZF8sIENPUkVf QUREUiBmaWxlX29mc18pCi0rCTogc3RhcnQgKHN0YXJ0XyksCi0rCSAgZW5kIChlbmRfKSwKLSsJ ICBmaWxlX29mcyAoZmlsZV9vZnNfKQotKyAgICAgIHsgLyogTm90aGluZy4gICovIH0KLSsKLSsg ICAgICAvKiBUaGUgaW5mZXJpb3IgYWRkcmVzcyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBtYXBwZWQg cmVnaW9uLiAgKi8KLSsgICAgICBDT1JFX0FERFIgc3RhcnQ7Ci0rCi0rICAgICAgLyogVGhlIGlu ZmVyaW9yIGFkZHJlc3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcHBlZCByZWdpb24uICAqLwot KyAgICAgIENPUkVfQUREUiBlbmQ7Ci0rCi0rICAgICAgLyogVGhlIG9mZnNldCB3aXRoaW4gdGhl IG1hcHBlZCBmaWxlIGZvciB0aGlzIGNvbnRlbnQuICAqLwotKyAgICAgIENPUkVfQUREUiBmaWxl X29mczsKLSsgICAgfTsKLSsKLSsgICAgLyogSWYgbm90IG51bGxwdHIsIHRoZW4gdGhpcyBpcyB0 aGUgYnVpbGQtaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSsgICAgICAgZmlsZS4gICovCi0rICAg IGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQgPSBudWxscHRyOwotKwotKyAgICAvKiBJZiB0 cnVlIHRoZW4gd2UgaGF2ZSBzZWVuIG11bHRpcGxlIGRpZmZlcmVudCBidWlsZC1pZHMgYXNzb2Np YXRlZAotKyAgICAgICB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lLiAgVGhlIGJ1aWxkX2lkIGZpZWxk IHdpbGwgaGF2ZSBiZWVuIHNldCBiYWNrCi0rICAgICAgIHRvIG51bGxwdHIsIGFuZCB3ZSBzaG91 bGQgbm90IHNldCBidWlsZF9pZCBpbiBmdXR1cmUuICAqLwotKyAgICBib29sIGlnbm9yZV9idWls ZF9pZF9wID0gZmFsc2U7Ci0rCi0rICAgIC8qIEFsbCB0aGUgbWFwcGVkIHJlZ2lvbnMgb2YgdGhp cyBmaWxlLiAgKi8KLSsgICAgc3RkOjp2ZWN0b3I8cmVnaW9uPiByZWdpb25zOwotKyAgfTsKLSsK LSAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RydWN0IGJmZCAqPiBiZmRfbWFw OwotICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiB1bmF2YWlsYWJsZV9wYXRoczsK LSAKLSsgIC8qIEFsbCBmaWxlcyBtYXBwZWQgaW50byB0aGUgY29yZSBmaWxlLiAgVGhlIGtleSBp cyB0aGUgZmlsZW5hbWUuICAqLwotKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBt YXBwZWRfZmlsZT4gbWFwcGVkX2ZpbGVzOwotKwotICAgLyogU2VlIGxpbnV4X3JlYWRfY29yZV9m aWxlX21hcHBpbmdzKCkgaW4gbGludXgtdGRlcC5jIGZvciBhbiBleGFtcGxlCi0gICAgICByZWFk X2NvcmVfZmlsZV9tYXBwaW5ncyBtZXRob2QuICAqLwotICAgZ2RiYXJjaF9yZWFkX2NvcmVfZmls ZV9tYXBwaW5ncyAobV9jb3JlX2dkYmFyY2gsCi1AQCAtMjM5LDg3ICs0MjYsMjA2IEBAIGNvcmVf dGFyZ2V0OjpidWlsZF9maWxlX21hcHBpbmdzICgpCi0gCSAgIHdlZWQgb3V0IG5vbi1maWxlLWJh Y2tlZCBtYXBwaW5ncy4gICovCi0gCWdkYl9hc3NlcnQgKGZpbGVuYW1lICE9IG51bGxwdHIpOwot IAotLQlpZiAodW5hdmFpbGFibGVfcGF0aHMuZmluZCAoZmlsZW5hbWUpICE9IHVuYXZhaWxhYmxl X3BhdGhzLmVuZCAoKSkKLS0JICB7Ci0tCSAgICAvKiBXZSBoYXZlIGFscmVhZHkgc2VlbiBzb21l IG1hcHBpbmcgZm9yIEZJTEVOQU1FIGJ1dCBmYWlsZWQgdG8KLS0JICAgICAgIGZpbmQvb3BlbiB0 aGUgZmlsZS4gIFRoZXJlIGlzIG5vIHBvaW50IGluIHRyeWluZyB0aGUgc2FtZQotLQkgICAgICAg dGhpbmcgYWdhaW4gc28ganVzdCByZWNvcmQgdGhhdCB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpIGlz Ci0tCSAgICAgICB1bmF2YWlsYWJsZS4gICovCi0tCSAgICBtX2NvcmVfdW5hdmFpbGFibGVfbWFw cGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOwotLQkgICAgcmV0dXJuOwot LQkgIH0KLS0KLS0Jc3RydWN0IGJmZCAqYmZkID0gYmZkX21hcFtmaWxlbmFtZV07Ci0tCWlmIChi ZmQgPT0gbnVsbHB0cikKLSsJLyogQWRkIHRoaXMgbWFwcGVkIHJlZ2lvbiB0byB0aGUgZGF0YSBm b3IgRklMRU5BTUUuICAqLwotKwltYXBwZWRfZmlsZSAmZmlsZV9kYXRhID0gbWFwcGVkX2ZpbGVz W2ZpbGVuYW1lXTsKLSsJZmlsZV9kYXRhLnJlZ2lvbnMuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5k LCBmaWxlX29mcyk7Ci0rCWlmIChidWlsZF9pZCAhPSBudWxscHRyICYmICFmaWxlX2RhdGEuaWdu b3JlX2J1aWxkX2lkX3ApCi0gCSAgewotLQkgICAgLyogVXNlIGV4ZWNfZmlsZV9maW5kKCkgdG8g ZG8gc3lzcm9vdCBleHBhbnNpb24uICBJdCdsbAotLQkgICAgICAgYWxzbyBzdHJpcCB0aGUgcG90 ZW50aWFsIHN5c3Jvb3QgInRhcmdldDoiIHByZWZpeC4gIElmCi0tCSAgICAgICB0aGVyZSBpcyBu byBzeXNyb290LCBhbiBlcXVpdmFsZW50IChwb3NzaWJseSBtb3JlCi0tCSAgICAgICBjYW5vbmlj YWwpIHBhdGhuYW1lIHdpbGwgYmUgcHJvdmlkZWQuICAqLwotLQkgICAgZ2RiOjp1bmlxdWVfeG1h bGxvY19wdHI8Y2hhcj4gZXhwYW5kZWRfZm5hbWUKLS0JICAgICAgPSBleGVjX2ZpbGVfZmluZCAo ZmlsZW5hbWUsIE5VTEwpOwotLQotLQkgICAgaWYgKGV4cGFuZGVkX2ZuYW1lID09IG51bGxwdHIg JiYgYnVpbGRfaWQgIT0gbnVsbHB0cikKLS0JICAgICAgZGVidWdpbmZvZF9leGVjX3F1ZXJ5IChi dWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQtPnNpemUsCi0tCQkJCSAgICAgZmlsZW5hbWUsICZleHBh bmRlZF9mbmFtZSk7Ci0tCi0tCSAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cikKLSsJ ICAgIGlmIChmaWxlX2RhdGEuYnVpbGRfaWQgPT0gbnVsbHB0cikKLSsJICAgICAgZmlsZV9kYXRh LmJ1aWxkX2lkID0gYnVpbGRfaWQ7Ci0rCSAgICBlbHNlIGlmICghYnVpbGRfaWRfZXF1YWwgKGJ1 aWxkX2lkLCBmaWxlX2RhdGEuYnVpbGRfaWQpKQotIAkgICAgICB7Ci0tCQltX2NvcmVfdW5hdmFp bGFibGVfbWFwcGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOwotLQkJdW5h dmFpbGFibGVfcGF0aHMuaW5zZXJ0IChmaWxlbmFtZSk7Ci0tCQl3YXJuaW5nIChfKCJDYW4ndCBv cGVuIGZpbGUgJXMgZHVyaW5nIGZpbGUtYmFja2VkIG1hcHBpbmcgIgotLQkJCSAgICJub3RlIHBy b2Nlc3NpbmciKSwKLS0JCQkgZmlsZW5hbWUpOwotLQkJcmV0dXJuOwotKwkJd2FybmluZyAoXygi TXVsdGlwbGUgYnVpbGQtaWRzIGZvdW5kIGZvciAlcHMiKSwKLSsJCQkgc3R5bGVkX3N0cmluZyAo ZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLCBmaWxlbmFtZSkpOwotKwkJZmlsZV9kYXRhLmJ1aWxk X2lkID0gbnVsbHB0cjsKLSsJCWZpbGVfZGF0YS5pZ25vcmVfYnVpbGRfaWRfcCA9IHRydWU7Ci0g CSAgICAgIH0KLSsJICB9Ci0rICAgICAgfSk7Ci0gCi0tCSAgICBiZmQgPSBiZmRfb3BlbnIgKGV4 cGFuZGVkX2ZuYW1lLmdldCAoKSwgImJpbmFyeSIpOwotKyAgLyogR2V0IHRoZSBidWlsZC1pZCBv ZiB0aGUgY29yZSBmaWxlLiAgKi8KLSsgIGNvbnN0IGJmZF9idWlsZF9pZCAqY29yZV9idWlsZF9p ZAotKyAgICA9IGJ1aWxkX2lkX2JmZF9nZXQgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9i ZmQgKCkpOwotIAotLQkgICAgaWYgKGJmZCA9PSBudWxscHRyIHx8ICFiZmRfY2hlY2tfZm9ybWF0 IChiZmQsIGJmZF9vYmplY3QpKQotLQkgICAgICB7Ci0tCQltX2NvcmVfdW5hdmFpbGFibGVfbWFw cGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOwotLQkJdW5hdmFpbGFibGVf cGF0aHMuaW5zZXJ0IChmaWxlbmFtZSk7Ci0tCQl3YXJuaW5nIChfKCJDYW4ndCBvcGVuIGZpbGUg JXMgd2hpY2ggd2FzIGV4cGFuZGVkIHRvICVzICIKLSsgIGZvciAoY29uc3QgYXV0byAmaXRlciA6 IG1hcHBlZF9maWxlcykKLSsgICAgewotKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZmaWxlbmFt ZSA9IGl0ZXIuZmlyc3Q7Ci0rICAgICAgY29uc3QgbWFwcGVkX2ZpbGUgJmZpbGVfZGF0YSA9IGl0 ZXIuc2Vjb25kOwotKwotKyAgICAgIC8qIElmIHRoaXMgbWFwcGVkIGZpbGUgaGFzIHRoZSBzYW1l IGJ1aWxkLWlkIGFzIHdhcyBkaXNjb3ZlcmVkIGZvcgotKwkgdGhlIGNvcmUtZmlsZSBpdHNlbGYs IHRoZW4gd2UgYXNzdW1lIHRoaXMgaXMgdGhlIG1haW4KLSsJIGV4ZWN1dGFibGUuICBSZWNvcmQg dGhlIGZpbGVuYW1lIGFzIHdlIGNhbiB1c2UgdGhpcyBsYXRlci4gICovCi0rICAgICAgaWYgKGZp bGVfZGF0YS5idWlsZF9pZCAhPSBudWxscHRyCi0rCSAgJiYgbV9leHBlY3RlZF9leGVjX2ZpbGVu YW1lLmVtcHR5ICgpCi0rCSAgJiYgYnVpbGRfaWRfZXF1YWwgKGZpbGVfZGF0YS5idWlsZF9pZCwg Y29yZV9idWlsZF9pZCkpCi0rCW1fZXhwZWN0ZWRfZXhlY19maWxlbmFtZSA9IGZpbGVuYW1lOwot KwotKyAgICAgIC8qIFVzZSBleGVjX2ZpbGVfZmluZCgpIHRvIGRvIHN5c3Jvb3QgZXhwYW5zaW9u LiAgSXQnbGwKLSsJIGFsc28gc3RyaXAgdGhlIHBvdGVudGlhbCBzeXNyb290ICJ0YXJnZXQ6IiBw cmVmaXguICBJZgotKwkgdGhlcmUgaXMgbm8gc3lzcm9vdCwgYW4gZXF1aXZhbGVudCAocG9zc2li bHkgbW9yZQotKwkgY2Fub25pY2FsKSBwYXRobmFtZSB3aWxsIGJlIHByb3ZpZGVkLiAgKi8KLSsg ICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBleHBhbmRlZF9mbmFtZQotKwk9IGV4 ZWNfZmlsZV9maW5kIChmaWxlbmFtZS5jX3N0ciAoKSwgbnVsbHB0cik7Ci0rCi0rICAgICAgYm9v bCBidWlsZF9pZF9taXNtYXRjaCA9IGZhbHNlOwotKyAgICAgIGlmIChleHBhbmRlZF9mbmFtZSAh PSBudWxscHRyICYmIGZpbGVfZGF0YS5idWlsZF9pZCAhPSBudWxscHRyKQotKwl7Ci0rCSAgLyog V2UgdGVtcG9yYXJpbHkgb3BlbiB0aGUgYmZkIGFzIGEgc3RydWN0dXJlZCB0YXJnZXQsIHRoaXMK LSsJICAgICBhbGxvd3MgdXMgdG8gcmVhZCB0aGUgYnVpbGQtaWQgZnJvbSB0aGUgYmZkIGlmIHRo ZXJlIGlzIG9uZS4KLSsJICAgICBGb3IgdGhpcyB0YXNrIGl0J3MgT0sgaWYgd2UgcmV1c2UgYW4g YWxyZWFkeSBvcGVuIGJmZCBvYmplY3QsCi0rCSAgICAgc28gd2UgbWFrZSB0aGlzIGNhbGwgdGhy b3VnaCBHREIncyBiZmQgY2FjaGUuICBPbmNlIHdlJ3ZlCi0rCSAgICAgY2hlY2tlZCB0aGUgYnVp bGQtaWQgKGlmIHRoZXJlIGlzIG9uZSkgd2UnbGwgZHJvcCB0aGlzCi0rCSAgICAgcmVmZXJlbmNl IGFuZCByZS1vcGVuIHRoZSBiZmQgdXNpbmcgdGhlICJiaW5hcnkiIHRhcmdldC4gICovCi0rCSAg Z2RiX2JmZF9yZWZfcHRyIHRtcF9iZmQKLSsJICAgID0gZ2RiX2JmZF9vcGVuIChleHBhbmRlZF9m bmFtZS5nZXQgKCksIGdudXRhcmdldCk7Ci0rCi0rCSAgaWYgKHRtcF9iZmQgIT0gbnVsbHB0cgot KwkgICAgICAmJiBiZmRfY2hlY2tfZm9ybWF0ICh0bXBfYmZkLmdldCAoKSwgYmZkX29iamVjdCkK LSsJICAgICAgJiYgYnVpbGRfaWRfYmZkX2dldCAodG1wX2JmZC5nZXQgKCkpICE9IG51bGxwdHIp Ci0rCSAgICB7Ci0rCSAgICAgIC8qIFRoZSBuZXdseSBvcGVuZWQgVE1QX0JGRCBoYXMgYSBidWls ZC1pZCwgYW5kIHRoaXMgbWFwcGVkCi0rCQkgZmlsZSBoYXMgYSBidWlsZC1pZCBleHRyYWN0ZWQg ZnJvbSB0aGUgY29yZS1maWxlLiAgQ2hlY2sKLSsJCSB0aGUgYnVpbGQtaWQncyBtYXRjaCwgYW5k IGlmIG5vdCwgcmVqZWN0IFRNUF9CRkQuICAqLwotKwkgICAgICBjb25zdCBzdHJ1Y3QgYmZkX2J1 aWxkX2lkICpmb3VuZAotKwkJPSBidWlsZF9pZF9iZmRfZ2V0ICh0bXBfYmZkLmdldCAoKSk7Ci0r CSAgICAgIGlmICghYnVpbGRfaWRfZXF1YWwgKGZvdW5kLCBmaWxlX2RhdGEuYnVpbGRfaWQpKQot KwkJYnVpbGRfaWRfbWlzbWF0Y2ggPSB0cnVlOwotKwkgICAgfQotKwl9Ci0rCi0rICAgICAgZ2Ri X2JmZF9yZWZfcHRyIGFiZmQ7Ci0rICAgICAgaWYgKGV4cGFuZGVkX2ZuYW1lICE9IG51bGxwdHIg JiYgIWJ1aWxkX2lkX21pc21hdGNoKQotKwl7Ci0rCSAgc3RydWN0IGJmZCAqYiA9IGJmZF9vcGVu ciAoZXhwYW5kZWRfZm5hbWUuZ2V0ICgpLCAiYmluYXJ5Iik7Ci0rCSAgYWJmZCA9IGdkYl9iZmRf cmVmX3B0cjo6bmV3X3JlZmVyZW5jZSAoYik7Ci0rCX0KLSsKLSsgICAgICBpZiAoKGV4cGFuZGVk X2ZuYW1lID09IG51bGxwdHIKLSsJICAgfHwgYWJmZCA9PSBudWxscHRyCi0rCSAgIHx8ICFiZmRf Y2hlY2tfZm9ybWF0IChhYmZkLmdldCAoKSwgYmZkX29iamVjdCkpCi0rCSAgJiYgZmlsZV9kYXRh LmJ1aWxkX2lkICE9IG51bGxwdHIpCi0rCXsKLSsJICBhYmZkID0gZmluZF9vYmpmaWxlX2J5X2J1 aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2UsCi0rCQkJCQkgICBmaWxlX2RhdGEuYnVpbGRf aWQsCi0rCQkJCQkgICBmaWxlbmFtZS5jX3N0ciAoKSk7Ci0rCi0rCSAgaWYgKGFiZmQgIT0gbnVs bHB0cikKLSsJICAgIHsKLSsJICAgICAgLyogVGhlIGZpbmRfb2JqZmlsZV9ieV9idWlsZF9pZCB3 aWxsIGhhdmUgb3BlbmVkIEFCRkQgdXNpbmcKLSsJCSB0aGUgR05VVEFSR0VUIGdsb2JhbCBiZmQg dHlwZSwgaG93ZXZlciwgd2UgbmVlZCB0aGUgYmZkCi0rCQkgb3BlbmVkIGFzIHRoZSBiaW5hcnkg dHlwZSAoc2VlIHRoZSBmdW5jdGlvbidzIGhlYWRlcgotKwkJIGNvbW1lbnQpLCBzbyBub3cgd2Ug cmVvcGVuIEFCRkQgd2l0aCB0aGUgZGVzaXJlZCBiaW5hcnkKLSsJCSB0eXBlLiAgKi8KLSsJICAg ICAgZXhwYW5kZWRfZm5hbWUKLSsJCT0gbWFrZV91bmlxdWVfeHN0cmR1cCAoYmZkX2dldF9maWxl bmFtZSAoYWJmZC5nZXQgKCkpKTsKLSsJICAgICAgc3RydWN0IGJmZCAqYiA9IGJmZF9vcGVuciAo ZXhwYW5kZWRfZm5hbWUuZ2V0ICgpLCAiYmluYXJ5Iik7Ci0rCSAgICAgIGdkYl9hc3NlcnQgKGIg IT0gbnVsbHB0cik7Ci0rCSAgICAgIGFiZmQgPSBnZGJfYmZkX3JlZl9wdHI6Om5ld19yZWZlcmVu Y2UgKGIpOwotKwkgICAgfQotKwl9Ci0rCi0rICAgICAgc3RkOjp2ZWN0b3I8bWVtX3JhbmdlPiBy YW5nZXM7Ci0rICAgICAgZm9yIChjb25zdCBtYXBwZWRfZmlsZTo6cmVnaW9uICZyZWdpb24gOiBm aWxlX2RhdGEucmVnaW9ucykKLSsJcmFuZ2VzLmVtcGxhY2VfYmFjayAocmVnaW9uLnN0YXJ0LCBy ZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KTsKLSsKLSsgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUg PT0gbnVsbHB0cgotKwkgIHx8IGFiZmQgPT0gbnVsbHB0cgotKwkgIHx8ICFiZmRfY2hlY2tfZm9y bWF0IChhYmZkLmdldCAoKSwgYmZkX29iamVjdCkpCi0rCXsKLSsJICAvKiBJZiBBQkZEIHdhcyBv cGVuZWQsIGJ1dCB0aGUgd3JvbmcgZm9ybWF0LCBjbG9zZSBpdCBub3cuICAqLwotKwkgIGFiZmQg PSBudWxscHRyOwotKwotKwkgIC8qIFJlY29yZCBhbGwgcmVnaW9ucyBmb3IgdGhpcyBmaWxlIGFz IHVuYXZhaWxhYmxlLiAgKi8KLSsJICBmb3IgKGNvbnN0IG1hcHBlZF9maWxlOjpyZWdpb24gJnJl Z2lvbiA6IGZpbGVfZGF0YS5yZWdpb25zKQotKwkgICAgbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBp bmdzLmVtcGxhY2VfYmFjayAocmVnaW9uLnN0YXJ0LAotKwkJCQkJCSAgICAgIHJlZ2lvbi5lbmQK LSsJCQkJCQkgICAgICAtIHJlZ2lvbi5zdGFydCk7Ci0rCi0rCSAgLyogQW5kIGdpdmUgdGhlIHVz ZXIgYW4gYXBwcm9wcmlhdGUgd2FybmluZy4gICovCi0rCSAgaWYgKGJ1aWxkX2lkX21pc21hdGNo KQotKwkgICAgewotKwkgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cgotKwkJICB8 fCBmaWxlbmFtZSA9PSBleHBhbmRlZF9mbmFtZS5nZXQgKCkpCi0rCQl3YXJuaW5nIChfKCJGaWxl ICVwcyBkb2Vzbid0IG1hdGNoIGJ1aWxkLWlkIGZyb20gY29yZS1maWxlICIKLSsJCQkgICAiZHVy aW5nIGZpbGUtYmFja2VkIG1hcHBpbmcgcHJvY2Vzc2luZyIpLAotKwkJCSBzdHlsZWRfc3RyaW5n IChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCi0rCQkJCQlmaWxlbmFtZS5jX3N0ciAoKSkpOwot KwkgICAgICBlbHNlCi0rCQl3YXJuaW5nIChfKCJGaWxlICVwcyB3aGljaCB3YXMgZXhwYW5kZWQg dG8gJXBzLCBkb2Vzbid0IG1hdGNoICIKLSsJCQkgICAiYnVpbGQtaWQgZnJvbSBjb3JlLWZpbGUg ZHVyaW5nIGZpbGUtYmFja2VkICIKLSsJCQkgICAibWFwcGluZyBwcm9jZXNzaW5nIiksCi0rCQkJ IHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKLSsJCQkJCWZpbGVuYW1l LmNfc3RyICgpKSwKLSsJCQkgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgp LAotKwkJCQkJZXhwYW5kZWRfZm5hbWUuZ2V0ICgpKSk7Ci0rCSAgICB9Ci0rCSAgZWxzZQotKwkg ICAgewotKwkgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cgotKwkJICB8fCBmaWxl bmFtZSA9PSBleHBhbmRlZF9mbmFtZS5nZXQgKCkpCi0rCQl3YXJuaW5nIChfKCJDYW4ndCBvcGVu IGZpbGUgJXBzIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nICIKLSsJCQkgICAibm90ZSBwcm9j ZXNzaW5nIiksCi0rCQkJIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwK LSsJCQkJCWZpbGVuYW1lLmNfc3RyICgpKSk7Ci0rCSAgICAgIGVsc2UKLSsJCXdhcm5pbmcgKF8o IkNhbid0IG9wZW4gZmlsZSAlcHMgd2hpY2ggd2FzIGV4cGFuZGVkIHRvICVwcyAiCi0gCQkJICAg ImR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nIG5vdGUgcHJvY2Vzc2luZyIpLAotLQkJCSBmaWxl bmFtZSwgZXhwYW5kZWRfZm5hbWUuZ2V0ICgpKTsKLSsJCQkgc3R5bGVkX3N0cmluZyAoZmlsZV9u YW1lX3N0eWxlLnN0eWxlICgpLAotKwkJCQkJZmlsZW5hbWUuY19zdHIgKCkpLAotKwkJCSBzdHls ZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCi0rCQkJCQlleHBhbmRlZF9mbmFt ZS5nZXQgKCkpKTsKLSsJICAgIH0KLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8qIEVuc3Vy ZSB0aGF0IHRoZSBiZmQgd2lsbCBiZSBjbG9zZWQgd2hlbiBjb3JlX2JmZCBpcyBjbG9zZWQuCi0r CSAgICAgVGhpcyBjYW4gYmUgY2hlY2tlZCBiZWZvcmUvYWZ0ZXIgYSBjb3JlIGZpbGUgZGV0YWNo IHZpYSAibWFpbnQKLSsJICAgICBpbmZvIGJmZHMiLiAgKi8KLSsJICBnZGJfYmZkX3JlY29yZF9p bmNsdXNpb24gKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCksCi0rCQkJCSAgICBh YmZkLmdldCAoKSk7Ci0rCi0rCSAgLyogQ3JlYXRlIHNlY3Rpb25zIGZvciBlYWNoIG1hcHBlZCBy ZWdpb24uICAqLwotKwkgIGZvciAoY29uc3QgbWFwcGVkX2ZpbGU6OnJlZ2lvbiAmcmVnaW9uIDog ZmlsZV9kYXRhLnJlZ2lvbnMpCi0rCSAgICB7Ci0rCSAgICAgIC8qIE1ha2UgbmV3IEJGRCBzZWN0 aW9uLiAgQWxsIHNlY3Rpb25zIGhhdmUgdGhlIHNhbWUgbmFtZSwKLSsJCSB3aGljaCBpcyBwZXJt aXR0ZWQgYnkgYmZkX21ha2Vfc2VjdGlvbl9hbnl3YXkoKS4gICovCi0rCSAgICAgIGFzZWN0aW9u ICpzZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2FueXdheSAoYWJmZC5nZXQgKCksICJsb2FkIik7Ci0r CSAgICAgIGlmIChzZWMgPT0gbnVsbHB0cikKLSsJCWVycm9yIChfKCJDYW4ndCBtYWtlIHNlY3Rp b24iKSk7Ci0rCSAgICAgIHNlYy0+ZmlsZXBvcyA9IHJlZ2lvbi5maWxlX29mczsKLSsJICAgICAg YmZkX3NldF9zZWN0aW9uX2ZsYWdzIChzZWMsIFNFQ19SRUFET05MWSB8IFNFQ19IQVNfQ09OVEVO VFMpOwotKwkgICAgICBiZmRfc2V0X3NlY3Rpb25fc2l6ZSAoc2VjLCByZWdpb24uZW5kIC0gcmVn aW9uLnN0YXJ0KTsKLSsJICAgICAgYmZkX3NldF9zZWN0aW9uX3ZtYSAoc2VjLCByZWdpb24uc3Rh cnQpOwotKwkgICAgICBiZmRfc2V0X3NlY3Rpb25fbG1hIChzZWMsIHJlZ2lvbi5zdGFydCk7Ci0r CSAgICAgIGJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQgKHNlYywgMik7Ci0rCi0rCSAgICAgIC8q IFNldCB0YXJnZXRfc2VjdGlvbiBmaWVsZHMuICAqLwotKwkgICAgICBtX2NvcmVfZmlsZV9tYXBw aW5ncy5lbXBsYWNlX2JhY2sgKHJlZ2lvbi5zdGFydCwgcmVnaW9uLmVuZCwgc2VjKTsKLSsJICAg IH0KLSsJfQotIAotLQkJaWYgKGJmZCAhPSBudWxscHRyKQotLQkJICBiZmRfY2xvc2UgKGJmZCk7 Ci0tCQlyZXR1cm47Ci0tCSAgICAgIH0KLS0JICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBiZmQgd2ls bCBiZSBjbG9zZWQgd2hlbiBjb3JlX2JmZCBpcyBjbG9zZWQuIAotLQkgICAgICAgVGhpcyBjYW4g YmUgY2hlY2tlZCBiZWZvcmUvYWZ0ZXIgYSBjb3JlIGZpbGUgZGV0YWNoIHZpYQotLQkgICAgICAg Im1haW50IGluZm8gYmZkcyIuICAqLwotLQkgICAgZ2RiX2JmZF9yZWNvcmRfaW5jbHVzaW9uIChj dXJyZW50X3Byb2dyYW1fc3BhY2UtPmNvcmVfYmZkICgpLCBiZmQpOwotLQkgICAgYmZkX21hcFtm aWxlbmFtZV0gPSBiZmQ7Ci0tCSAgfQotKyAgICAgIC8qIElmIHRoaXMgaXMgYSBiZmQgd2l0aCBh IGJ1aWxkLWlkIHRoZW4gcmVjb3JkIHRoZSBmaWxlbmFtZSwKLSsJIG9wdGlvbmFsIHNvbmFtZSAo RFRfU09OQU1FIC5keW5hbWljIGF0dHJpYnV0ZSksIGFuZCB0aGUgcmFuZ2Ugb2YKLSsJIGFkZHJl c3NlcyBhdCB3aGljaCB0aGlzIGJmZCBpcyBtYXBwZWQuICBUaGlzIGluZm9ybWF0aW9uIGNhbiBi ZQotKwkgdXNlZCB0byBwZXJmb3JtIGJ1aWxkLWlkIGNoZWNraW5nIHdoZW4gbG9hZGluZyB0aGUg c2hhcmVkCi0rCSBsaWJyYXJpZXMuICAqLwotKyAgICAgIGlmIChmaWxlX2RhdGEuYnVpbGRfaWQg IT0gbnVsbHB0cikKLSsJewotKwkgIG5vcm1hbGl6ZV9tZW1fcmFuZ2VzICgmcmFuZ2VzKTsKLSAK LS0JLyogTWFrZSBuZXcgQkZEIHNlY3Rpb24uICBBbGwgc2VjdGlvbnMgaGF2ZSB0aGUgc2FtZSBu YW1lLAotLQkgICB3aGljaCBpcyBwZXJtaXR0ZWQgYnkgYmZkX21ha2Vfc2VjdGlvbl9hbnl3YXko KS4gICovCi0tCWFzZWN0aW9uICpzZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2FueXdheSAoYmZkLCAi bG9hZCIpOwotLQlpZiAoc2VjID09IG51bGxwdHIpCi0tCSAgZXJyb3IgKF8oIkNhbid0IG1ha2Ug c2VjdGlvbiIpKTsKLS0Jc2VjLT5maWxlcG9zID0gZmlsZV9vZnM7Ci0tCWJmZF9zZXRfc2VjdGlv bl9mbGFncyAoc2VjLCBTRUNfUkVBRE9OTFkgfCBTRUNfSEFTX0NPTlRFTlRTKTsKLS0JYmZkX3Nl dF9zZWN0aW9uX3NpemUgKHNlYywgZW5kIC0gc3RhcnQpOwotLQliZmRfc2V0X3NlY3Rpb25fdm1h IChzZWMsIHN0YXJ0KTsKLS0JYmZkX3NldF9zZWN0aW9uX2xtYSAoc2VjLCBzdGFydCk7Ci0tCWJm ZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQgKHNlYywgMik7Ci0tCi0tCS8qIFNldCB0YXJnZXRfc2Vj dGlvbiBmaWVsZHMuICAqLwotLQltX2NvcmVfZmlsZV9tYXBwaW5ncy5lbXBsYWNlX2JhY2sgKHN0 YXJ0LCBlbmQsIHNlYyk7Ci0tCi0tCS8qIElmIHRoaXMgaXMgYSBiZmQgb2YgYSBzaGFyZWQgbGli cmFyeSwgcmVjb3JkIGl0cyBzb25hbWUKLS0JICAgYW5kIGJ1aWxkIGlkLiAgKi8KLS0JaWYgKGJ1 aWxkX2lkICE9IG51bGxwdHIpCi0tCSAgewotLQkgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8 Y2hhcj4gc29uYW1lCi0tCSAgICAgID0gZ2RiX2JmZF9yZWFkX2VsZl9zb25hbWUgKGJmZC0+Zmls ZW5hbWUpOwotLQkgICAgaWYgKHNvbmFtZSAhPSBudWxscHRyKQotLQkgICAgICBzZXRfY2JmZF9z b25hbWVfYnVpbGRfaWQgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y2JmZCwKLS0JCQkJCXNvbmFt ZS5nZXQgKCksIGJ1aWxkX2lkKTsKLS0JICB9Ci0tICAgICAgfSk7Ci0rCSAgY29uc3QgY2hhciAq YWN0dWFsX2ZpbGVuYW1lID0gbnVsbHB0cjsKLSsJICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxj aGFyPiBzb25hbWU7Ci0rCSAgaWYgKGFiZmQgIT0gbnVsbHB0cikKLSsJICAgIHsKLSsJICAgICAg YWN0dWFsX2ZpbGVuYW1lID0gYmZkX2dldF9maWxlbmFtZSAoYWJmZC5nZXQgKCkpOwotKwkgICAg ICBzb25hbWUgPSBnZGJfYmZkX3JlYWRfZWxmX3NvbmFtZSAoYWN0dWFsX2ZpbGVuYW1lKTsKLSsJ ICAgIH0KLSsKLSsJICBtX21hcHBlZF9maWxlX2luZm8uYWRkIChzb25hbWUuZ2V0ICgpLCBmaWxl bmFtZS5jX3N0ciAoKSwKLSsJCQkJICBhY3R1YWxfZmlsZW5hbWUsIHN0ZDo6bW92ZSAocmFuZ2Vz KSwKLSsJCQkJICBmaWxlX2RhdGEuYnVpbGRfaWQpOwotKwl9Ci0rICAgIH0KLSAKLSAgIG5vcm1h bGl6ZV9tZW1fcmFuZ2VzICgmbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzKTsKLSB9Ci1AQCAt NTY0LDM2ICs4NzAsMzEgQEAgcmVuYW1lX3ZtY29yZV9pZGxlX3JlZ19zZWN0aW9ucyAoYmZkICph YmZkLCBpbmZlcmlvciAqaW5mKQotICAgIEJGRCBBQkZELiAgKi8KLSAKLSBzdGF0aWMgdm9pZAot LWxvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGJmZCAqYWJmZCwgaW50IGZyb21f dHR5KQotK2xvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGJmZCAqYWJmZCwgY29y ZV90YXJnZXQgKnRhcmdldCwKLSsJCQkJICAgIGludCBmcm9tX3R0eSkKLSB7Ci0gICBjb25zdCBi ZmRfYnVpbGRfaWQgKmJ1aWxkX2lkID0gYnVpbGRfaWRfYmZkX2dldCAoYWJmZCk7Ci0gICBpZiAo YnVpbGRfaWQgPT0gbnVsbHB0cikKLSAgICAgcmV0dXJuOwotIAotLSAgZ2RiX2JmZF9yZWZfcHRy IGV4ZWNiZmQKLS0gICAgPSBidWlsZF9pZF90b19leGVjX2JmZCAoYnVpbGRfaWQtPnNpemUsIGJ1 aWxkX2lkLT5kYXRhKTsKLSsgIC8qIFRoZSBmaWxlbmFtZSB1c2VkIGZvciB0aGUgZmluZF9vYmpm aWxlX2J5X2J1aWxkX2lkIGNhbGwuICAqLwotKyAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7Ci0gCi0t ICBpZiAoZXhlY2JmZCA9PSBudWxscHRyKQotKyAgaWYgKCF0YXJnZXQtPmV4cGVjdGVkX2V4ZWNf ZmlsZW5hbWUgKCkuZW1wdHkgKCkpCi0rICAgIGZpbGVuYW1lID0gdGFyZ2V0LT5leHBlY3RlZF9l eGVjX2ZpbGVuYW1lICgpOwotKyAgZWxzZQotICAgICB7Ci0tICAgICAgLyogQXR0ZW1wdCB0byBx dWVyeSBkZWJ1Z2luZm9kIGZvciB0aGUgZXhlY3V0YWJsZS4gICovCi0tICAgICAgZ2RiOjp1bmlx dWVfeG1hbGxvY19wdHI8Y2hhcj4gZXhlY3BhdGg7Ci0tICAgICAgc2NvcGVkX2ZkIGZkID0gZGVi dWdpbmZvZF9leGVjX3F1ZXJ5IChidWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQtPnNpemUsCi0tCQkJ CQkgICAgYWJmZC0+ZmlsZW5hbWUsICZleGVjcGF0aCk7Ci0tCi0tICAgICAgaWYgKGZkLmdldCAo KSA+PSAwKQotLQl7Ci0tCSAgZXhlY2JmZCA9IGdkYl9iZmRfb3BlbiAoZXhlY3BhdGguZ2V0ICgp LCBnbnV0YXJnZXQpOwotLQotLQkgIGlmIChleGVjYmZkID09IG51bGxwdHIpCi0tCSAgICB3YXJu aW5nIChfKCJcIiVzXCIgZnJvbSBkZWJ1Z2luZm9kIGNhbm5vdCBiZSBvcGVuZWQgYXMgYmZkOiAl cyIpLAotLQkJICAgICBleGVjcGF0aC5nZXQgKCksCi0tCQkgICAgIGdkYl9iZmRfZXJybXNnIChi ZmRfZ2V0X2Vycm9yICgpLCBudWxscHRyKS5jX3N0ciAoKSk7Ci0tCSAgZWxzZSBpZiAoIWJ1aWxk X2lkX3ZlcmlmeSAoZXhlY2JmZC5nZXQgKCksIGJ1aWxkX2lkLT5zaXplLAotLQkJCQkgICAgIGJ1 aWxkX2lkLT5kYXRhKSkKLS0JICAgIGV4ZWNiZmQucmVzZXQgKG51bGxwdHIpOwotLQl9Ci0rICAg ICAgLyogV2UgZGlkbid0IGZpbmQgYW4gZXhlY3V0YWJsZSBuYW1lIGZyb20gdGhlIG1hcHBlZCBm aWxlCi0rCSBpbmZvcm1hdGlvbiwgc28gYXMgYSBzdGFuZC1pbiBidWlsZCBhIHN0cmluZyBiYXNl ZCBvbiB0aGUKLSsJIGJ1aWxkLWlkLiAgKi8KLSsgICAgICBzdGQ6OnN0cmluZyBidWlsZF9pZF9o ZXhfc3RyID0gYmluMmhleCAoYnVpbGRfaWQtPmRhdGEsIGJ1aWxkX2lkLT5zaXplKTsKLSsgICAg ICBmaWxlbmFtZSA9IHN0cmluZ19wcmludGYgKCJ3aXRoIGJ1aWxkLWlkICVzIiwgYnVpbGRfaWRf aGV4X3N0ci5jX3N0ciAoKSk7Ci0gICAgIH0KLSAKLSsgIGdkYl9iZmRfcmVmX3B0ciBleGVjYmZk Ci0rICAgID0gZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2Us IGJ1aWxkX2lkLAotKwkJCQlmaWxlbmFtZS5jX3N0ciAoKSk7Ci0rCi0gICBpZiAoZXhlY2JmZCAh PSBudWxscHRyKQotICAgICB7Ci0gICAgICAgZXhlY19maWxlX2F0dGFjaCAoYmZkX2dldF9maWxl bmFtZSAoZXhlY2JmZC5nZXQgKCkpLCBmcm9tX3R0eSk7Ci1AQCAtNzI0LDcgKzEwMjUsNyBAQCBj b3JlX3RhcmdldF9vcGVuIChjb25zdCBjaGFyICphcmcsIGludCBmcm9tX3R0eSkKLSAKLSAgIGlm IChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmV4ZWNfYmZkICgpID09IG51bGxwdHIpCi0gICAgIGxv Y2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+ Y29yZV9iZmQgKCksCi0tCQkJCQlmcm9tX3R0eSk7Ci0rCQkJCQl0YXJnZXQsIGZyb21fdHR5KTsK LSAKLSAgIHBvc3RfY3JlYXRlX2luZmVyaW9yIChmcm9tX3R0eSk7Ci0gCi1AQCAtOTYzLDU1ICsx MjY0LDYgQEAgY29yZV90YXJnZXQ6OmZpbGVzX2luZm8gKCkKLSAgIHByaW50X3NlY3Rpb25faW5m byAoJm1fY29yZV9zZWN0aW9uX3RhYmxlLCBjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmNvcmVfYmZk ICgpKTsKLSB9Ci0gDAotLS8qIEhlbHBlciBtZXRob2QgZm9yIGNvcmVfdGFyZ2V0Ojp4ZmVyX3Bh cnRpYWwuICAqLwotLQotLWVudW0gdGFyZ2V0X3hmZXJfc3RhdHVzCi0tY29yZV90YXJnZXQ6Onhm ZXJfbWVtb3J5X3ZpYV9tYXBwaW5ncyAoZ2RiX2J5dGUgKnJlYWRidWYsCi0tCQkJCSAgICAgICBj b25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsCi0tCQkJCSAgICAgICBVTE9OR0VTVCBvZmZzZXQsIFVM T05HRVNUIGxlbiwKLS0JCQkJICAgICAgIFVMT05HRVNUICp4ZmVyZWRfbGVuKQotLXsKLS0gIGVu dW0gdGFyZ2V0X3hmZXJfc3RhdHVzIHhmZXJfc3RhdHVzOwotLQotLSAgeGZlcl9zdGF0dXMgPSAo c2VjdGlvbl90YWJsZV94ZmVyX21lbW9yeV9wYXJ0aWFsCi0tCQkgICAocmVhZGJ1Ziwgd3JpdGVi dWYsCi0tCQkgICAgb2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4sCi0tCQkgICAgbV9jb3JlX2ZpbGVf bWFwcGluZ3MpKTsKLS0KLS0gIGlmICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZFUl9PSyB8fCBt X2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wdHkgKCkpCi0tICAgIHJldHVybiB4ZmVyX3N0 YXR1czsKLS0KLS0gIC8qIFRoZXJlIGFyZSBpbnN0YW5jZXMgLSBlLmcuIHdoZW4gZGVidWdnaW5n IHdpdGhpbiBhIGRvY2tlcgotLSAgICAgY29udGFpbmVyIHVzaW5nIHRoZSBBVUZTIHN0b3JhZ2Ug ZHJpdmVyIC0gd2hlcmUgdGhlIHBhdGhuYW1lcwotLSAgICAgb2J0YWluZWQgZnJvbSB0aGUgbm90 ZSBzZWN0aW9uIGFyZSBpbmNvcnJlY3QuICBEZXNwaXRlIHRoZSBwYXRoCi0tICAgICBiZWluZyB3 cm9uZywganVzdCBrbm93aW5nIHRoZSBzdGFydCBhbmQgZW5kIGFkZHJlc3NlcyBvZiB0aGUKLS0g ICAgIG1hcHBpbmdzIGlzIHN0aWxsIHVzZWZ1bDsgd2UgY2FuIGF0dGVtcHQgYW4gYWNjZXNzIG9m IHRoZSBmaWxlCi0tICAgICBzdHJhdHVtIGNvbnN0cmFpbmVkIHRvIHRoZSBhZGRyZXNzIHJhbmdl cyBjb3JyZXNwb25kaW5nIHRvIHRoZQotLSAgICAgdW5hdmFpbGFibGUgbWFwcGluZ3MuICAqLwot LQotLSAgVUxPTkdFU1QgbWVtYWRkciA9IG9mZnNldDsKLS0gIFVMT05HRVNUIG1lbWVuZCA9IG9m ZnNldCArIGxlbjsKLS0KLS0gIGZvciAoY29uc3QgYXV0byAmbXIgOiBtX2NvcmVfdW5hdmFpbGFi bGVfbWFwcGluZ3MpCi0tICAgIHsKLS0gICAgICBpZiAobXIuY29udGFpbnMgKG1lbWFkZHIpKQot LQl7Ci0tCSAgaWYgKCFtci5jb250YWlucyAobWVtZW5kKSkKLS0JICAgIGxlbiA9IG1yLnN0YXJ0 ICsgbXIubGVuZ3RoIC0gbWVtYWRkcjsKLS0KLS0JICB4ZmVyX3N0YXR1cyA9IHRoaXMtPmJlbmVh dGggKCktPnhmZXJfcGFydGlhbCAoVEFSR0VUX09CSkVDVF9NRU1PUlksCi0tCQkJCQkJCU5VTEws Ci0tCQkJCQkJCXJlYWRidWYsCi0tCQkJCQkJCXdyaXRlYnVmLAotLQkJCQkJCQlvZmZzZXQsCi0t CQkJCQkJCWxlbiwKLS0JCQkJCQkJeGZlcmVkX2xlbik7Ci0tCSAgYnJlYWs7Ci0tCX0KLS0gICAg fQotLQotLSAgcmV0dXJuIHhmZXJfc3RhdHVzOwotLX0KLSAKLSBlbnVtIHRhcmdldF94ZmVyX3N0 YXR1cwotIGNvcmVfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwgKGVudW0gdGFyZ2V0X29iamVjdCBvYmpl Y3QsIGNvbnN0IGNoYXIgKmFubmV4LAotQEAgLTEwMzksMjYgKzEyOTEsNzIgQEAgY29yZV90YXJn ZXQ6OnhmZXJfcGFydGlhbCAoZW51bSB0YXJnZXRfb2JqZWN0IG9iamVjdCwgY29uc3QgY2hhciAq YW5uZXgsCi0gCWlmICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZFUl9PSykKLSAJICByZXR1cm4g VEFSR0VUX1hGRVJfT0s7Ci0gCi0tCS8qIENoZWNrIGZpbGUgYmFja2VkIG1hcHBpbmdzLiAgSWYg dGhleSdyZSBhdmFpbGFibGUsIHVzZQotLQkgICBjb3JlIGZpbGUgcHJvdmlkZWQgbWFwcGluZ3Mg KGUuZy4gZnJvbSAubm90ZS5saW51eGNvcmUuZmlsZQotLQkgICBvciB0aGUgbGlrZSkgYXMgdGhp cyBzaG91bGQgcHJvdmlkZSBhIG1vcmUgYWNjdXJhdGUKLS0JICAgcmVzdWx0LiAgSWYgbm90LCBj aGVjayB0aGUgc3RyYXR1bSBiZW5lYXRoIHVzLCB3aGljaCBzaG91bGQKLS0JICAgYmUgdGhlIGZp bGUgc3RyYXR1bS4KLSsJLyogQ2hlY2sgZmlsZSBiYWNrZWQgbWFwcGluZ3MuICBJZiB0aGV5J3Jl IGF2YWlsYWJsZSwgdXNlIGNvcmUgZmlsZQotKwkgICBwcm92aWRlZCBtYXBwaW5ncyAoZS5nLiBm cm9tIC5ub3RlLmxpbnV4Y29yZS5maWxlIG9yIHRoZSBsaWtlKQotKwkgICBhcyB0aGlzIHNob3Vs ZCBwcm92aWRlIGEgbW9yZSBhY2N1cmF0ZSByZXN1bHQuICAqLwotKwlpZiAoIW1fY29yZV9maWxl X21hcHBpbmdzLmVtcHR5ICgpKQotKwkgIHsKLSsJICAgIHhmZXJfc3RhdHVzID0gc2VjdGlvbl90 YWJsZV94ZmVyX21lbW9yeV9wYXJ0aWFsCi0rCQkJICAgIChyZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zm c2V0LCBsZW4sIHhmZXJlZF9sZW4sCi0rCQkJICAgICBtX2NvcmVfZmlsZV9tYXBwaW5ncyk7Ci0r CSAgICBpZiAoeGZlcl9zdGF0dXMgPT0gVEFSR0VUX1hGRVJfT0spCi0rCSAgICAgIHJldHVybiB4 ZmVyX3N0YXR1czsKLSsJICB9Ci0gCi0tCSAgIFdlIGFsc28gY2hlY2sgdW5hdmFpbGFibGUgbWFw cGluZ3MgZHVlIHRvIERvY2tlci9BVUZTIGRyaXZlcgotLQkgICBpc3N1ZXMuICAqLwotLQlpZiAo IW1fY29yZV9maWxlX21hcHBpbmdzLmVtcHR5ICgpCi0tCSAgICB8fCAhbV9jb3JlX3VuYXZhaWxh YmxlX21hcHBpbmdzLmVtcHR5ICgpKQotKwkvKiBJZiB0aGUgYWNjZXNzIGlzIHdpdGhpbiBhbiB1 bmF2YWlsYWJsZSBmaWxlIG1hcHBpbmcgdGhlbiB3ZSB0cnkKLSsJICAgdG8gY2hlY2sgaW4gdGhl IHN0cmF0dW0gYmVsb3cgKHRoZSBleGVjdXRhYmxlIHN0cmF0dW0pLiAgVGhlCi0rCSAgIHRoaW5r aW5nIGhlcmUgaXMgdGhhdCBpZiB0aGUgbWFwcGluZyB3YXMgcmVhZC93cml0ZSB0aGVuIHRoZQot KwkgICBjb250ZW50cyB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBpbnRvIHRoZSBjb3JlIGZpbGUg YW5kIHRoZQotKwkgICBhY2Nlc3Mgd291bGQgaGF2ZSBiZWVuIHNhdGlzZmllZCBieSBtX2NvcmVf c2VjdGlvbl90YWJsZS4KLSsKLSsJICAgQnV0IGlmIHRoZSBhY2Nlc3MgaGFzIG5vdCB5ZXQgYmVl biByZXNvbHZlZCB0aGVuIHdlIGNhbiBhc3N1bWUKLSsJICAgdGhlIGFjY2VzcyBpcyByZWFkLW9u bHkuICBJZiB0aGUgZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kCi0rCSAgIGR1cmluZyB0aGUgbWFw cGVkIGZpbGUgY2hlY2sgdGhlbiB3ZSdsbCBoYXZlIGFuIHVuYXZhaWxhYmxlCi0rCSAgIG1hcHBp bmcgZW50cnksIGhvd2V2ZXIsIGlmIHRoZSB1c2VyIGhhcyBwcm92aWRlZCB0aGUgZXhlY3V0YWJs ZQotKwkgICAobWF5YmUgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24pIHRoZW4gd2UgbWlnaHQgYmUg YWJsZSB0bwotKwkgICByZXNvbHZlIHRoZSBhY2Nlc3MgZnJvbSB0aGVyZS4KLSsKLSsJICAgSWYg dGhhdCBmYWlscywgYnV0IHRoZSBhY2Nlc3MgaXMgd2l0aGluIGFuIHVuYXZhaWxhYmxlIHJlZ2lv biwKLSsJICAgdGhlbiB0aGUgYWNjZXNzIGl0c2VsZiBzaG91bGQgZmFpbC4gICovCi0rCWZvciAo Y29uc3QgYXV0byAmbXIgOiBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MpCi0gCSAgewotLQkg ICAgeGZlcl9zdGF0dXMgPSB4ZmVyX21lbW9yeV92aWFfbWFwcGluZ3MgKHJlYWRidWYsIHdyaXRl YnVmLCBvZmZzZXQsCi0rCSAgICBpZiAobXIuY29udGFpbnMgKG9mZnNldCkpCi0rCSAgICAgIHsK LSsJCWlmICghbXIuY29udGFpbnMgKG9mZnNldCArIGxlbikpCi0rCQkgIGxlbiA9IG1yLnN0YXJ0 ICsgbXIubGVuZ3RoIC0gb2Zmc2V0OwotKwotKwkJeGZlcl9zdGF0dXMKLSsJCSAgPSB0aGlzLT5i ZW5lYXRoICgpLT54ZmVyX3BhcnRpYWwgKFRBUkdFVF9PQkpFQ1RfTUVNT1JZLAotKwkJCQkJCSAg ICBudWxscHRyLCByZWFkYnVmLAotKwkJCQkJCSAgICB3cml0ZWJ1Ziwgb2Zmc2V0LAotIAkJCQkJ CSAgICBsZW4sIHhmZXJlZF9sZW4pOwotKwkJaWYgKHhmZXJfc3RhdHVzID09IFRBUkdFVF9YRkVS X09LKQotKwkJICByZXR1cm4gVEFSR0VUX1hGRVJfT0s7Ci0rCi0rCQlyZXR1cm4gVEFSR0VUX1hG RVJfRV9JTzsKLSsJICAgICAgfQotKwkgIH0KLSsKLSsJLyogVGhlIGZvbGxvd2luZyBpcyBhY3Rp bmcgYXMgYSBmYWxsYmFjayBpbiBjYXNlIHdlIGVuY291bnRlciBhCi0rCSAgIHNpdHVhdGlvbiB3 aGVyZSB0aGUgY29yZSBmaWxlIGlzIGxhY2tpbmcgYW5kIG1hcHBlZCBmaWxlCi0rCSAgIGluZm9y bWF0aW9uLiAgSGVyZSB3ZSBxdWVyeSB0aGUgZXhlYyBmaWxlIHN0cmF0dW0gdG8gc2VlIGlmIGl0 Ci0rCSAgIGNhbiByZXNvbHZlIHRoZSBhY2Nlc3MuICBEb2luZyB0aGlzIHdoZW4gd2UgYXJlIG1p c3NpbmcgbWFwcGVkCi0rCSAgIGZpbGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgdGhlIGJlc3Qgd2Ug Y2FuIGRvLCBidXQgdGhlcmUgYXJlCi0rCSAgIGNlcnRhaW5seSBjYXNlcyB0aGlzIHdpbGwgZ2V0 IHdyb25nLCBlLmcuIGlmIGFuIGluZmVyaW9yIGNyZWF0ZWQKLSsJICAgYSB6ZXJvIGluaXRpYWxp c2VkIG1hcHBpbmcgb3ZlciB0aGUgdG9wIG9mIHNvbWUgZGF0YSB0aGF0IGV4aXN0cwotKwkgICB3 aXRoaW4gdGhlIGV4ZWN1dGFibGUgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIHRoZSBleGVjdXRhYmxl IGRhdGEKLSsJICAgcmF0aGVyIHRoYW4gdGhlIHplcm8gZGF0YS4gIE1heWJlIHdlIHNob3VsZCBq dXN0IGRyb3AgdGhpcwotKwkgICBibG9jaz8gICovCi0rCWlmIChtX2NvcmVfZmlsZV9tYXBwaW5n cy5lbXB0eSAoKQotKwkgICAgJiYgbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzLmVtcHR5ICgp KQotKwkgIHsKLSsJICAgIHhmZXJfc3RhdHVzCi0rCSAgICAgID0gdGhpcy0+YmVuZWF0aCAoKS0+ eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4LCByZWFkYnVmLAotKwkJCQkJCXdyaXRlYnVmLCBv ZmZzZXQsIGxlbiwKLSsJCQkJCQl4ZmVyZWRfbGVuKTsKLSsJICAgIGlmICh4ZmVyX3N0YXR1cyA9 PSBUQVJHRVRfWEZFUl9PSykKLSsJICAgICAgcmV0dXJuIFRBUkdFVF9YRkVSX09LOwotIAkgIH0K LS0JZWxzZQotLQkgIHhmZXJfc3RhdHVzID0gdGhpcy0+YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFs IChvYmplY3QsIGFubmV4LCByZWFkYnVmLAotLQkJCQkJCQl3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4s Ci0tCQkJCQkJCXhmZXJlZF9sZW4pOwotLQlpZiAoeGZlcl9zdGF0dXMgPT0gVEFSR0VUX1hGRVJf T0spCi0tCSAgcmV0dXJuIFRBUkdFVF9YRkVSX09LOwotIAotIAkvKiBGaW5hbGx5LCBhdHRlbXB0 IHRvIGFjY2VzcyBkYXRhIGluIGNvcmUgZmlsZSBzZWN0aW9ucyB3aXRoCi0gCSAgIG5vIGNvbnRl bnRzLiAgVGhlc2Ugd2lsbCB0eXBpY2FsbHkgcmVhZCBhcyBhbGwgemVyby4gICovCi1AQCAtMTUx NSw2ICsxODEzLDE4MiBAQCBtYWludGVuYW5jZV9wcmludF9jb3JlX2ZpbGVfYmFja2VkX21hcHBp bmdzIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCi0gICAgIHRhcmctPmluZm9fcHJv Y19tYXBwaW5ncyAodGFyZy0+Y29yZV9nZGJhcmNoICgpKTsKLSB9Ci0gCi0rLyogQWRkIG1vcmUg ZGV0YWlscyBkaXNjb3ZlcmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvcmUtZmlsZSdzIG1hcHBl ZCBmaWxlCi0rICAgaW5mb3JtYXRpb24sIHdlJ3JlIGJ1aWxkaW5nIG1hcHMgYmV0d2VlbiBmaWxl bmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nCi0rICAgYnVpbGQtaWRzLCBiZXR3ZWVuIGFkZHJl c3MgcmFuZ2VzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBidWlsZC1pZHMsIGFuZAotKyAgIGFsc28g YSByZXZlcnNlIG1hcCBiZXR3ZWVuIGJ1aWxkLWlkIGFuZCB0aGUgY29ycmVzcG9uZGluZyBmaWxl bmFtZS4KLSsKLSsgICBTT05BTUUgaXMgdGhlIERUX1NPTkFNRSBhdHRyaWJ1dGUgZXh0cmFjdGVk IGZyb20gdGhlIC5keW5hbWljIHNlY3Rpb24gb2YKLSsgICBhIHNoYXJlZCBsaWJyYXJ5IHRoYXQg d2FzIG1hcHBlZCBpbnRvIHRoZSBjb3JlIGZpbGUuICBUaGlzIGNhbiBiZQotKyAgIG51bGxwdHIg aWYgdGhlIG1hcHBlZCBmaWxlcyB3YXMgbm90IGEgc2hhcmVkIGxpYnJhcnksIG9yIGRpZG4ndCBo YXZlIGEKLSsgICBEVF9TT05BTUUgYXR0cmlidXRlLgotKwotKyAgIEVYUEVDVEVEX0ZJTEVOQU1F IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgd2FzIG1hcHBlZCBpbnRvIHRoZQotKyAgIGlu ZmVyaW9yIGFzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIGZpbGUsIHRoaXMgc2hvdWxkIG5ldmVy IGJlIG51bGxwdHIuCi0rCi0rICAgQUNUVUFMX0ZJTEVOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBh Y3R1YWwgZmlsZSBHREIgZm91bmQgdG8gcHJvdmlkZSB0aGUKLSsgICBtYXBwZWQgZmlsZSBpbmZv cm1hdGlvbiwgdGhpcyBjYW4gYmUgbnVsbHB0ciBpZiBHREIgZmFpbGVkIHRvIGZpbmQgYQotKyAg IHN1aXRhYmxlIGZpbGUuICBUaGlzIG1pZ2h0IGJlIGRpZmZlcmVudCB0byBFWFBFQ1RFRF9GSUxF TkFNRSwgZS5nLiBHREIKLSsgICBtaWdodCBoYXZlIGRvd25sb2FkZWQgdGhlIGZpbGUgZnJvbSBk ZWJ1Z2luZm9kIGFuZCBzbyBBQ1RVQUxfRklMRU5BTUUKLSsgICB3aWxsIGJlIGEgZmlsZSBpbiB0 aGUgZGVidWdpbmZvZCBjbGllbnQgY2FjaGUuCi0rCi0rICAgUkFOR0VTIGlzIHRoZSBsaXN0IG9m IG1lbW9yeSByYW5nZXMgYXQgd2hpY2ggdGhpcyBmaWxlIHdhcyBtYXBwZWQgaW50bwotKyAgIHRo ZSBpbmZlcmlvci4KLSsKLSsgICBCVUlMRF9JRCBpcyB0aGUgYnVpbGQtaWQgZm9yIHRoaXMgbWFw cGVkIGZpbGUsIHRoaXMgd2lsbCBuZXZlciBiZQotKyAgIG51bGxwdHIuICBOb3QgZXZlcnkgbWFw cGVkIGZpbGUgd2lsbCBoYXZlIGEgYnVpbGQtaWQsIGJ1dCB0aGVyZSdzIG5vCi0rICAgcG9pbnQg Y2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGZhaWxlZCB0byBmaW5kIGEgYnVpbGQtaWQ7IHRo aXMKLSsgICBzdHJ1Y3R1cmUgb25seSBleGlzdHMgc28gd2UgY2FuIGxvb2t1cCBmaWxlcyBiYXNl ZCBvbiB0aGVpciBidWlsZC1pZC4gICovCi0rCi0rdm9pZAotK21hcHBlZF9maWxlX2luZm86OmFk ZCAoY29uc3QgY2hhciAqc29uYW1lLAotKwkJICAgICAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2Zp bGVuYW1lLAotKwkJICAgICAgIGNvbnN0IGNoYXIgKmFjdHVhbF9maWxlbmFtZSwKLSsJCSAgICAg ICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+ICYmcmFuZ2VzLAotKwkJICAgICAgIGNvbnN0IGJmZF9i dWlsZF9pZCAqYnVpbGRfaWQpCi0rewotKyAgZ2RiX2Fzc2VydCAoYnVpbGRfaWQgIT0gbnVsbHB0 cik7Ci0rICBnZGJfYXNzZXJ0IChleHBlY3RlZF9maWxlbmFtZSAhPSBudWxscHRyKTsKLSsKLSsg IGlmIChzb25hbWUgIT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIC8qIElmIHdlIGFscmVhZHkg aGF2ZSBhbiBlbnRyeSB3aXRoIHRoaXMgU09OQU1FIHRoZW4gdGhpcyBpbmRpY2F0ZXMKLSsJIHRo YXQgdGhlIGluZmVyaW9yIGhhcyB0d28gZmlsZXMgbWFwcGVkIGludG8gbWVtb3J5IHdpdGggZGlm ZmVyZW50Ci0rCSBmaWxlIG5hbWVzIChhbmQgbW9zdCBsaWtlbHkgZGlmZmVyZW50IGJ1aWxkLWlk cyksIGJ1dCB3aXRoIHRoZQotKwkgc2FtZSBEVF9TT05BTUUgYXR0cmlidXRlLiAgSW4gdGhpcyBj YXNlIHdlIGNhbid0IHVzZSB0aGUKLSsJIERUX1NPTkFNRSB0byBmaWd1cmUgb3V0IHRoZSBleHBl Y3RlZCBidWlsZC1pZCBvZiBhIHNoYXJlZAotKwkgbGlicmFyeSwgc28gcG9pc29uIHRoZSBlbnRy eSBmb3IgdGhpcyBTT05BTUUgYnkgc2V0dGluZyB0aGUgZW50cnkKLSsJIHRvIG51bGxwdHIuICAq LwotKyAgICAgIGF1dG8gaXQgPSBtX3NvbmFtZV90b19idWlsZF9pZF9tYXAuZmluZCAoc29uYW1l KTsKLSsgICAgICBpZiAoaXQgIT0gbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwLmVuZCAoKQotKwkg ICYmIGl0LT5zZWNvbmQgIT0gbnVsbHB0cgotKwkgICYmICFidWlsZF9pZF9lcXVhbCAoaXQtPnNl Y29uZCwgYnVpbGRfaWQpKQotKwltX3NvbmFtZV90b19idWlsZF9pZF9tYXBbc29uYW1lXSA9IG51 bGxwdHI7Ci0rICAgICAgZWxzZQotKwltX3NvbmFtZV90b19idWlsZF9pZF9tYXBbc29uYW1lXSA9 IGJ1aWxkX2lkOwotKyAgICB9Ci0rCi0rICAvKiBXaGVuIHRoZSBjb3JlIGZpbGUgaXMgaW5pdGlh bGx5IG9wZW5lZCBhbmQgdGhlIG1hcHBlZCBmaWxlcyBhcmUKLSsgICAgIHBhcnNlZCwgd2UgZ3Jv dXAgdGhlIGJ1aWxkLWlkIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBmaWxlIG5hbWUuICBBcwot KyAgICAgYSBjb25zZXF1ZW5jZSwgd2Ugc2hvdWxkIHNlZSBlYWNoIEVYUEVDVEVEX0ZJTEVOQU1F IHZhbHVlIGV4YWN0bHkKLSsgICAgIG9uY2UuICBUaGlzIG1lYW5zIHRoYXQgZWFjaCBpbnNlcnRp b24gc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiAgKi8KLSsgIGNvbnN0IGF1dG8gW2l0LCBpbnNlcnRl ZF0KLSsgICAgPSBtX2ZpbGVuYW1lX3RvX2J1aWxkX2lkX21hcC5lbXBsYWNlIChleHBlY3RlZF9m aWxlbmFtZSwgYnVpbGRfaWQpOwotKyAgZ2RiX2Fzc2VydCAoaW5zZXJ0ZWQpOwotKwotKyAgLyog U2V0dXAgdGhlIHJldmVyc2UgYnVpbGQtaWQgdG8gZmlsZSBuYW1lIG1hcC4gICovCi0rICBpZiAo YWN0dWFsX2ZpbGVuYW1lICE9IG51bGxwdHIpCi0rICAgIG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVf bWFwLmVtcGxhY2UgKGJ1aWxkX2lkLCBhY3R1YWxfZmlsZW5hbWUpOwotKwotKyAgLyogU2V0dXAg dGhlIGxpc3Qgb2YgbWVtb3J5IHJhbmdlIHRvIGJ1aWxkLWlkIG9iamVjdHMuICAqLwotKyAgZm9y IChtZW1fcmFuZ2UgJnIgOiByYW5nZXMpCi0rICAgIG1fYWRkcmVzc190b19idWlsZF9pZF9saXN0 LmVtcGxhY2VfYmFjayAoc3RkOjptb3ZlIChyKSwgYnVpbGRfaWQpOwotKwotKyAgLyogQXQgdGhp cyBwb2ludCB0aGUgbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3QgaXMgdW5zb3J0ZWQgKHdlIGp1 c3QKLSsgICAgIGFkZGVkIHNvbWUgZW50cmllcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0KS4gIEFs bCBlbnRyaWVzIHNob3VsZCBiZQotKyAgICAgYWRkZWQgYmVmb3JlIGFueSBsb29rLXVwcyBhcmUg cGVyZm9ybWVkLCBhbmQgdGhlIGxpc3QgaXMgb25seSBzb3J0ZWQKLSsgICAgIHdoZW4gdGhlIGZp cnN0IGxvb2stdXAgaXMgcGVyZm9ybWVkLiAgKi8KLSsgIGdkYl9hc3NlcnQgKCFtX2FkZHJlc3Nf dG9fYnVpbGRfaWRfbGlzdF9zb3J0ZWQpOwotK30KLSsKLSsvKiBGSUxFTkFNRSBpcyB0aGUgbmFt ZSBvZiBhIGZpbGUgR0RCIGlzIHRyeWluZyB0byBsb2FkLCBhbmQgQUREUiBpcwotKyAgIChvcHRp b25hbGx5KSBhbiBhZGRyZXNzIHdpdGhpbiB0aGUgZmlsZSBpbiB0aGUgaW5mZXJpb3IncyBhZGRy ZXNzIHNwYWNlLgotKwotKyAgIFNlYXJjaCB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbiBnYXRoZXJl ZCBmcm9tIHRoZSBjb3JlLWZpbGUncyBtYXBwZWQgZmlsZQotKyAgIGluZm9ybWF0aW9uIGxvb2tp bmcgZm9yIGEgZmlsZSBuYW1lZCBGSUxFTkFNRSwgb3IgZm9yIGEgZmlsZSB0aGF0IGNvdmVycwot KyAgIEFERFIuICBJZiBhIG1hdGNoIGlzIGZvdW5kIHRoZW4gcmV0dXJuIHRoZSBidWlsZC1pZCBm b3IgdGhlIGZpbGUgYWxvbmcKLSsgICB3aXRoIHRoZSBsb2NhdGlvbiB3aGVyZSBHREIgZm91bmQg dGhlIG1hcHBlZCBmaWxlLgotKwotKyAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgbWFwcGVkIGZpbGUg bWlnaHQgYmUgdGhlIGVtcHR5IHN0cmluZyBpZiBHREIgd2FzCi0rICAgdW5hYmxlIHRvIGZpbmQg dGhlIG1hcHBlZCBmaWxlLgotKwotKyAgIElmIG5vIGJ1aWxkLWlkIGNhbiBiZSBmb3VuZCBmb3Ig RklMRU5BTUUgdGhlbiBHREIgd2lsbCByZXR1cm4gYSBwYWlyCi0rICAgY29udGFpbmluZyBudWxs cHRyIChmb3IgdGhlIGJ1aWxkLWlkKSBhbmQgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgZmlsZQot KyAgIG5hbWUuICAqLwotKwotK3N0ZDo6b3B0aW9uYWwgPGNvcmVfdGFyZ2V0X21hcHBlZF9maWxl X2luZm8+Ci0rbWFwcGVkX2ZpbGVfaW5mbzo6bG9va3VwIChjb25zdCBjaGFyICpmaWxlbmFtZSwK LSsJCQkgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAmYWRkcikKLSt7Ci0rICBpZiAo ZmlsZW5hbWUgIT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIC8qIElmIHRoZXJlJ3MgYSBtYXRj aGluZyBlbnRyeSBpbiBtX2ZpbGVuYW1lX3RvX2J1aWxkX2lkX21hcCB0aGVuIHRoZQotKwkgYXNz b2NpYXRlZCBidWlsZC1pZCB3aWxsIG5vdCBiZSBudWxscHRyLCBhbmQgY2FuIGJlIHVzZWQgdG8K LSsJIHZhbGlkYXRlIHRoYXQgRklMRU5BTUUgaXMgY29ycmVjdC4gICovCi0rICAgICAgYXV0byBp dCA9IG1fZmlsZW5hbWVfdG9fYnVpbGRfaWRfbWFwLmZpbmQgKGZpbGVuYW1lKTsKLSsgICAgICBp ZiAoaXQgIT0gbV9maWxlbmFtZV90b19idWlsZF9pZF9tYXAuZW5kICgpKQotKwlyZXR1cm4gbWFr ZV9yZXN1bHQgKGl0LT5zZWNvbmQpOwotKyAgICB9Ci0rCi0rICBpZiAoYWRkci5oYXNfdmFsdWUg KCkpCi0rICAgIHsKLSsgICAgICAvKiBPbiB0aGUgZmlyc3QgbG9va3VwLCBzb3J0IHRoZSBhZGRy ZXNzX3RvX2J1aWxkX2lkX2xpc3QuICAqLwotKyAgICAgIGlmICghbV9hZGRyZXNzX3RvX2J1aWxk X2lkX2xpc3Rfc29ydGVkKQotKwl7Ci0rCSAgc3RkOjpzb3J0IChtX2FkZHJlc3NfdG9fYnVpbGRf aWRfbGlzdC5iZWdpbiAoKSwKLSsJCSAgICAgbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3QuZW5k ICgpLAotKwkJICAgICBbXSAoY29uc3QgbWVtX3JhbmdlX2FuZF9idWlsZF9pZCAmYSwKLSsJCQkg Y29uc3QgbWVtX3JhbmdlX2FuZF9idWlsZF9pZCAmYikgewotKwkJICAgICAgIHJldHVybiBhLnJh bmdlIDwgYi5yYW5nZTsKLSsJCSAgICAgfSk7Ci0rCSAgbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xp c3Rfc29ydGVkID0gdHJ1ZTsKLSsJfQotKwotKyAgICAgIC8qIExvb2sgZm9yIHRoZSBmaXJzdCBl bnRyeSB3aG9zZSByYW5nZSdzIHN0YXJ0IGFkZHJlc3MgaXMgbm90IGxlc3MKLSsJIHRoYW4sIG9y IGVxdWFsIHRvbywgdGhlIGFkZHJlc3MgQUREUi4gIElmIHdlIGZpbmQgc3VjaCBhbiBlbnRyeSwK LSsJIHRoZW4gdGhlIHByZXZpb3VzIGVudHJ5J3MgcmFuZ2UgbWlnaHQgY29udGFpbiBBRERSLiAg SWYgaXQgZG9lcwotKwkgdGhlbiB0aGF0IHByZXZpb3VzIGVudHJ5J3MgYnVpbGQtaWQgY2FuIGJl IHVzZWQuICAqLwotKyAgICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kCi0rCShtX2FkZHJl c3NfdG9fYnVpbGRfaWRfbGlzdC5iZWdpbiAoKSwKLSsJIG1fYWRkcmVzc190b19idWlsZF9pZF9s aXN0LmVuZCAoKSwKLSsJICphZGRyLAotKwkgW10gKGNvbnN0IG1lbV9yYW5nZV9hbmRfYnVpbGRf aWQgJmEsCi0rCSAgICAgY29uc3QgQ09SRV9BRERSICZiKSB7Ci0rCSAgcmV0dXJuIGEucmFuZ2Uu c3RhcnQgPD0gYjsKLSsJfSk7Ci0rCi0rICAgICAgaWYgKGl0ICE9IG1fYWRkcmVzc190b19idWls ZF9pZF9saXN0LmJlZ2luICgpKQotKwl7Ci0rCSAgLS1pdDsKLSsKLSsJICBpZiAoaXQtPnJhbmdl LmNvbnRhaW5zICgqYWRkcikpCi0rCSAgICByZXR1cm4gbWFrZV9yZXN1bHQgKGl0LT5idWlsZF9p ZCk7Ci0rCX0KLSsgICAgfQotKwotKyAgaWYgKGZpbGVuYW1lICE9IG51bGxwdHIpCi0rICAgIHsK LSsgICAgICAvKiBJZiB0aGUgYmFzZW5hbWUgb2YgRklMRU5BTUUgYXBwZWFycyBpbiBtX3NvbmFt ZV90b19idWlsZF9pZF9tYXAKLSsJIHRoZW4gd2hlbiB0aGUgbWFwcGVkIGZpbGVzIHdlcmUgcHJv Y2Vzc2VkLCB3ZSBzYXcgYSBmaWxlIHdpdGggYQotKwkgRFRfU09OQU1FIGF0dHJpYnV0ZSBjb3Jy ZXNwb25kaW5nIHRvIEZJTEVOQU1FLCB1c2UgdGhhdCBidWlsZC1pZAotKwkgdG8gdmFsaWRhdGUg RklMRU5BTUUuCi0rCi0rCSBIb3dldmVyLCB0aGUgYnVpbGQtaWQgaW4gdGhpcyBtYXAgbWlnaHQg YmUgbnVsbHB0ciBpZiB3ZSBzYXcKLSsJIG11bHRpcGxlIG1hcHBlZCBmaWxlcyB3aXRoIHRoZSBz YW1lIERUX1NPTkFNRSBhdHRyaWJ1dGUgKHRob3VnaAotKwkgdGhpcyBzaG91bGQgYmUgcHJldHR5 IHJhcmUpLiAgKi8KLSsgICAgICBhdXRvIGl0Ci0rCT0gbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFw LmZpbmQgKGxiYXNlbmFtZSAoZmlsZW5hbWUpKTsKLSsgICAgICBpZiAoaXQgIT0gbV9zb25hbWVf dG9fYnVpbGRfaWRfbWFwLmVuZCAoKQotKwkgICYmIGl0LT5zZWNvbmQgIT0gbnVsbHB0cikKLSsJ cmV0dXJuIG1ha2VfcmVzdWx0IChpdC0+c2Vjb25kKTsKLSsgICAgfQotKwotKyAgcmV0dXJuIHt9 OwotK30KLSsKLSsvKiBTZWUgZ2RiY29yZS5oLiAgKi8KLSsKLStzdGQ6Om9wdGlvbmFsIDxjb3Jl X3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvPgotK2NvcmVfdGFyZ2V0X2ZpbmRfbWFwcGVkX2ZpbGUg KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotKwkJCSAgICAgIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERS PiBhZGRyKQotK3sKLSsgIGNvcmVfdGFyZ2V0ICp0YXJnID0gZ2V0X2N1cnJlbnRfY29yZV90YXJn ZXQgKCk7Ci0rICBpZiAodGFyZyA9PSBudWxscHRyIHx8IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+ Y2JmZC5nZXQgKCkgPT0gbnVsbHB0cikKLSsgICAgcmV0dXJuIHt9OwotKwotKyAgcmV0dXJuIHRh cmctPmxvb2t1cF9tYXBwZWRfZmlsZV9pbmZvIChmaWxlbmFtZSwgYWRkcik7Ci0rfQotKwotIHZv aWQgX2luaXRpYWxpemVfY29yZWxvdyAoKTsKLSB2b2lkCi0gX2luaXRpYWxpemVfY29yZWxvdyAo KQotZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbiBiL2dkYi9kYXRh LWRpcmVjdG9yeS9NYWtlZmlsZS5pbgotLS0tIGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxl LmluCi0rKysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KLUBAIC03Nyw2ICs3Nyw4 IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCi0gCWdkYi9GcmFtZUl0ZXJhdG9yLnB5IFwKLSAJZ2Ri L2ZyYW1lcy5weSBcCi0gCWdkYi9taXNzaW5nX2RlYnVnLnB5IFwKLSsJZ2RiL21pc3Npbmdfb2Jq ZmlsZS5weSBcCi0rCWdkYi9taXNzaW5nX2ZpbGVzLnB5IFwKLSAJZ2RiL3ByaW50aW5nLnB5IFwK LSAJZ2RiL3Byb21wdC5weSBcCi0gCWdkYi9zdHlsaW5nLnB5IFwKLUBAIC04Niw3ICs4OCw3IEBA IFBZVEhPTl9GSUxFX0xJU1QgPSBcCi0gCWdkYi9jb21tYW5kL19faW5pdF9fLnB5IFwKLSAJZ2Ri L2NvbW1hbmQvZXhwbG9yZS5weSBcCi0gCWdkYi9jb21tYW5kL2ZyYW1lX2ZpbHRlcnMucHkgXAot LQlnZGIvY29tbWFuZC9taXNzaW5nX2RlYnVnLnB5IFwKLSsJZ2RiL2NvbW1hbmQvbWlzc2luZ19m aWxlcy5weSBcCi0gCWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weSBcCi0gCWdkYi9jb21t YW5kL3Byb21wdC5weSBcCi0gCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkgXAotZGlmZiAt LWdpdCBhL2dkYi9kZWJ1Z2luZm9kLXN1cHBvcnQuYyBiL2dkYi9kZWJ1Z2luZm9kLXN1cHBvcnQu YwotLS0tIGEvZ2RiL2RlYnVnaW5mb2Qtc3VwcG9ydC5jCi0rKysgYi9nZGIvZGVidWdpbmZvZC1z dXBwb3J0LmMKLUBAIC00MDksNyArNDA5LDcgQEAgZGVidWdpbmZvZF9leGVjX3F1ZXJ5IChjb25z dCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZCwKLSAgIHN0ZDo6b3B0aW9uYWw8dGFyZ2V0X3Rlcm1p bmFsOjpzY29wZWRfcmVzdG9yZV90ZXJtaW5hbF9zdGF0ZT4gdGVybV9zdGF0ZTsKLSAKLSAgIHsK LS0gICAgdXNlcl9kYXRhIGRhdGEgKCJleGVjdXRhYmxlIGZvciIsIGZpbGVuYW1lKTsKLSsgICAg dXNlcl9kYXRhIGRhdGEgKCJmaWxlIiwgZmlsZW5hbWUpOwotIAotICAgICBkZWJ1Z2luZm9kX3Nl dF91c2VyX2RhdGEgKGMsICZkYXRhKTsKLSAgICAgaWYgKHRhcmdldF9zdXBwb3J0c190ZXJtaW5h bF9vdXJzICgpKQotQEAgLTQyMyw3ICs0MjMsNyBAQCBkZWJ1Z2luZm9kX2V4ZWNfcXVlcnkgKGNv bnN0IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLAotICAgICBkZWJ1Z2luZm9kX3NldF91c2VyX2Rh dGEgKGMsIG51bGxwdHIpOwotICAgfQotIAotLSAgcHJpbnRfb3V0Y29tZSAoZmQuZ2V0ICgpLCAi ZXhlY3V0YWJsZSBmb3IiLCBmaWxlbmFtZSk7Ci0rICBwcmludF9vdXRjb21lIChmZC5nZXQgKCks ICJmaWxlIiwgZmlsZW5hbWUpOwotIAotICAgaWYgKGZkLmdldCAoKSA+PSAwKQotICAgICBkZXN0 bmFtZS0+cmVzZXQgKGRuYW1lKTsKLWRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIv Z2RiL2RvYy9nZGIudGV4aW5mbwotLS0tIGEvZ2RiL2RvYy9nZGIudGV4aW5mbwotKysrIGIvZ2Ri L2RvYy9nZGIudGV4aW5mbwotQEAgLTIxNzg2LDYgKzIxNzg2LDcgQEAgY29udGFpbmVkIGluIEB2 YXJ7ZmlsZW5hbWV9IGJ5IHVzaW5nIHRoZSBAc2FtcHstcmVhZG5ldmVyfSBvcHRpb24uCi0gQGMg KGVnIHJvb3RlZCBpbiB2YWwgb2YgZW52IHZhciBHREJTWU1TKSBjb3VsZCBleGlzdCBmb3IgbWFw cGFibGUgc3ltYm9sCi0gQGMgZmlsZXMuCi0gCi0rQGFuY2hvcntjb3JlLWZpbGUgY29tbWFuZH0K LSBAa2luZGV4IGNvcmUtZmlsZQotIEBpdGVtIGNvcmUtZmlsZSBAcntbfUB2YXJ7ZmlsZW5hbWV9 QHJ7XX0KLSBAaXRlbXggY29yZQotQEAgLTI0NTM0LDYgKzI0NTM1LDEwIEBAIGZ1dHVyZSBjb25u ZWN0aW9ucyBpcyBzaG93bi4gIFRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYXJlOgotIEB0YWIgQGNv ZGV7dkZpbGU6ZnN0YXR9Ci0gQHRhYiBIb3N0IEkvTwotIAotK0BpdGVtIEBjb2Rle2hvc3Rpby1z dGF0LXBhY2tldH0KLStAdGFiIEBjb2Rle3ZGaWxlOnN0YXR9Ci0rQHRhYiBIb3N0IEkvTwotKwot IEBpdGVtIEBjb2Rle2hvc3Rpby1zZXRmcy1wYWNrZXR9Ci0gQHRhYiBAY29kZXt2RmlsZTpzZXRm c30KLSBAdGFiIEhvc3QgSS9PCi1AQCAtNDYyODksNiArNDYyOTQsMTMgQEAgYW5kIHRoZSByZXR1 cm4gdmFsdWUgaXMgdGhlIHNpemUgb2YgdGhpcyBhdHRhY2htZW50IGluIGJ5dGVzLgotIElmIGFu IGVycm9yIG9jY3VycyB0aGUgcmV0dXJuIHZhbHVlIGlzIC0xLiAgVGhlIGZvcm1hdCBvZiB0aGUK LSByZXR1cm5lZCBiaW5hcnkgYXR0YWNobWVudCBpcyBhcyBkZXNjcmliZWQgaW4gQHJlZntzdHJ1 Y3Qgc3RhdH0uCi0gCi0rQGl0ZW0gdkZpbGU6c3RhdDogQHZhcntmaWxlbmFtZX0KLStHZXQgaW5m b3JtYXRpb24gYWJvdXQgdGhlIGZpbGUgQHZhcntmaWxlbmFtZX0gb24gdGhlIHRhcmdldC4KLStP biBzdWNjZXNzIHRoZSBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCBhcyBhIGJpbmFyeSBhdHRhY2ht ZW50Ci0rYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNpemUgb2YgdGhpcyBhdHRhY2htZW50 IGluIGJ5dGVzLgotK0lmIGFuIGVycm9yIG9jY3VycyB0aGUgcmV0dXJuIHZhbHVlIGlzIC0xLiAg VGhlIGZvcm1hdCBvZiB0aGUKLStyZXR1cm5lZCBiaW5hcnkgYXR0YWNobWVudCBpcyBhcyBkZXNj cmliZWQgaW4gQHJlZntzdHJ1Y3Qgc3RhdH0uCi0rCi0gQGl0ZW0gdkZpbGU6dW5saW5rOiBAdmFy e2ZpbGVuYW1lfQotIERlbGV0ZSB0aGUgZmlsZSBhdCBAdmFye2ZpbGVuYW1lfSBvbiB0aGUgdGFy Z2V0LiAgUmV0dXJuIDAsCi0gb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJzLiAgVGhlIEB2YXJ7Zmls ZW5hbWV9IGlzIGEgc3RyaW5nLgotZGlmZiAtLWdpdCBhL2dkYi9kb2MvcHl0aG9uLnRleGkgYi9n ZGIvZG9jL3B5dGhvbi50ZXhpCi0tLS0gYS9nZGIvZG9jL3B5dGhvbi50ZXhpCi0rKysgYi9nZGIv ZG9jL3B5dGhvbi50ZXhpCi1AQCAtMjMxLDYgKzIzMSw3IEBAIG9wdGlvbmFsIGFyZ3VtZW50cyB3 aGlsZSBza2lwcGluZyBvdGhlcnMuICBFeGFtcGxlOgotICogVFVJIFdpbmRvd3MgSW4gUHl0aG9u OjogICAgICAgSW1wbGVtZW50aW5nIG5ldyBUVUkgd2luZG93cy4KLSAqIERpc2Fzc2VtYmx5IElu IFB5dGhvbjo6ICAgICAgIEluc3RydWN0aW9uIERpc2Fzc2VtYmx5IEluIFB5dGhvbgotICogTWlz c2luZyBEZWJ1ZyBJbmZvIEluIFB5dGhvbjo6IEhhbmRsZSBtaXNzaW5nIGRlYnVnIGluZm8gZnJv bSBQeXRob24uCi0rKiBNaXNzaW5nIE9iamZpbGVzIEluIFB5dGhvbjo6ICBIYW5kbGUgb2JqZmls ZXMgZnJvbSBQeXRob24uCi0gQGVuZCBtZW51Ci0gCi0gQG5vZGUgQmFzaWMgUHl0aG9uCi1AQCAt NTM3MCwxMCArNTM3MSwxMSBAQCBUaGUgQGNvZGV7ZnJhbWVfZmlsdGVyc30gYXR0cmlidXRlIGlz IGEgZGljdGlvbmFyeSBvZiBmcmFtZSBmaWx0ZXIKLSBvYmplY3RzLiAgQHhyZWZ7RnJhbWUgRmls dGVyIEFQSX0sIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIEBlbmQgZGVmdmFyCi0gCi0tQGRlZnZh ciBQcm9nc3BhY2UubWlzc2luZ19kZWJ1Z19oYW5kbGVycwotLVRoZSBAY29kZXttaXNzaW5nX2Rl YnVnX2hhbmRsZXJzfSBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIHRoZSBtaXNzaW5nCi0tZGVidWcg aGFuZGxlciBvYmplY3RzIGZvciB0aGlzIHByb2dyYW0gc3BhY2UuICBAeHJlZntNaXNzaW5nIERl YnVnCi0tSW5mbyBJbiBQeXRob259LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLStAZGVmdmFyIFBy b2dzcGFjZS5taXNzaW5nX2ZpbGVfaGFuZGxlcnMKLStUaGUgQGNvZGV7bWlzc2luZ19maWxlX2hh bmRsZXJzfSBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIHR1cGxlcy4gIEVhY2gKLSt0dXBsZSBob2xk cyBhIG1pc3NpbmctZmlsZSBoYW5kbGVyIG9iamVjdCBmb3IgdGhpcyBwcm9ncmFtIHNwYWNlLiAg Rm9yCi0rbW9yZSBpbmZvcm1hdGlvbiwgQHB4cmVme01pc3NpbmcgRGVidWcgSW5mbyBJbiBQeXRo b259LCBhbmQKLStAcmVme01pc3NpbmcgT2JqZmlsZXMgSW4gUHl0aG9ufS4KLSBAZW5kIGRlZnZh cgotIAotIEEgcHJvZ3JhbSBzcGFjZSBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgotQEAgLTU1 NDksNiArNTU1MSw3IEBAIFNlcGFyYXRlIGRlYnVnIGluZm8gb2JqZmlsZXMgYXJlIGFkZGVkIHdp dGggdGhlCi0gQGNvZGV7Z2RiLk9iamZpbGUuYWRkX3NlcGFyYXRlX2RlYnVnX2ZpbGV9IG1ldGhv ZCwgZGVzY3JpYmVkIGJlbG93LgotIEBlbmQgZGVmdmFyCi0gCi0rQGFuY2hvcntPYmpmaWxlLmJ1 aWxkX2lkfQotIEBkZWZ2YXIgT2JqZmlsZS5idWlsZF9pZAotIFRoZSBidWlsZCBJRCBvZiB0aGUg b2JqZmlsZSBhcyBhIHN0cmluZy4KLSBJZiB0aGUgb2JqZmlsZSBkb2VzIG5vdCBoYXZlIGEgYnVp bGQgSUQgdGhlbiB0aGUgdmFsdWUgaXMgQGNvZGV7Tm9uZX0uCi1AQCAtODEzNyw2ICs4MTQwLDE4 OSBAQCByZXR1cm5zIGEgdmFsdWUgb3RoZXIgdGhhbiBAY29kZXtOb25lfSwgbm8gZnVydGhlciBo YW5kbGVycyBhcmUgY2FsbGVkCi0gZm9yIHRoaXMgb2JqZmlsZS4KLSBAZW5kIGRlZnVuCi0gCi0r QG5vZGUgTWlzc2luZyBPYmpmaWxlcyBJbiBQeXRob24KLStAc3Vic3Vic2VjdGlvbiBNaXNzaW5n IE9iamZpbGVzIEluIFB5dGhvbgotK0BjaW5kZXggcHl0aG9uLCBoYW5kbGUgbWlzc2luZyBvYmpm aWxlcwotKwotK1doZW4gQHZhbHVle0dEQk59IG9wZW5zIGEgY29yZSBmaWxlLCBmb3IgZXhhbXBs ZSB3aXRoIHRoZQotK0BrYmR7Y29yZS1maWxlfSBjb21tYW5kIChAcHhyZWZ7Y29yZS1maWxlIGNv bW1hbmR9KSwgQHZhbHVle0dEQk59IHdpbGwKLSthdHRlbXB0IHRvIGxvYWQgdGhlIGNvcnJlc3Bv bmRpbmcgZXhlY3V0YWJsZSBhbmQgc2hhcmVkIGxpYnJhcmllcy4KLStPZnRlbiB0aGVzZSBmaWxl cyBjYW4gYmUgZm91bmQgb24gdGhlIGxvY2FsIG1hY2hpbmUsIGJ1dCBzb21ldGltZXMKLSt0aGVz ZSBmaWxlcyBjYW5ub3QgYmUgZm91bmQsIGluIHdoaWNoIGNhc2UgdGhlIGRlYnVnZ2luZyBleHBl cmllbmNlCi0rd2lsbCBiZSByZXN0cmljdGVkLgotKwotK0lmIEB2YWx1ZXtHREJOfSBmYWlscyB0 byBsb2NhdGUgYSBwYXJ0aWN1bGFyIGZpbGUgdGhlbiB0aGVyZSBpcyBhbgotK29wcG9ydHVuaXR5 IGZvciBhIFB5dGhvbiBleHRlbnNpb24gdG8gc3RlcCBpbi4gIEEgUHl0aG9uIGV4dGVuc2lvbiBj YW4KLStwb3RlbnRpYWxseSBsb2NhdGUgdGhlIG1pc3NpbmcgZmlsZSB1c2luZyBzb21lIHBsYXRm b3JtLSBvcgotK3Byb2plY3Qtc3BlY2lmaWMgc3RlcHMsIGFuZCBpbmZvcm0gQHZhbHVle0dEQk59 IG9mIGl0cyBsb2NhdGlvbi4gIE9yIGEKLStQeXRob24gZXh0ZW5zaW9uIG1pZ2h0IHByb3ZpZGUg c29tZSBwbGF0Zm9ybS0gb3IgcHJvamVjdC1zcGVjaWZpYwotK2FkdmljZSB0byB0aGUgdXNlciBh Ym91dCBob3cgdG8gb2J0YWluIHRoZSBtaXNzaW5nIGZpbGUuCi0rCi0rQSBtaXNzaW5nLW9iamZp bGUgUHl0aG9uIGV4dGVuc2lvbiBjb25zaXN0cyBvZiBhIGhhbmRsZXIgb2JqZWN0IHdoaWNoCi0r aGFzIHRoZSBAY29kZXtuYW1lfSBhbmQgQGNvZGV7ZW5hYmxlZH0gYXR0cmlidXRlcywgYW5kIGlt cGxlbWVudHMgdGhlCi0rQGNvZGV7X19jYWxsX199IG1ldGhvZC4gIFdoZW4gQHZhbHVle0dEQk59 IGVuY291bnRlcnMgYSBzaXR1YXRpb24KLSt3aGVyZSBhIGZpbGUgY2Fubm90IGJlIGZvdW5kLCBi dXQgdGhlIGJ1aWxkLWlkIChAcHhyZWZ7YnVpbGQgSUR9KSBmb3IKLSt0aGUgbWlzc2luZyBmaWxl IGlzIGtub3duLCB0aGVuIHRoZSBAY29kZXtfX2NhbGxfX30gbWV0aG9kIGlzIGludm9rZWQKLSt0 byB0cnkgYW5kIGZpbmQgdGhlIGZpbGUuICBGdWxsIGRldGFpbHMgb2YgaG93IGhhbmRsZXJzIGFy ZSB3cml0dGVuCi0rY2FuIGJlIGZvdW5kIGJlbG93LgotKwotK0BzdWJoZWFkaW5nIFRoZSBAY29k ZXtnZGIubWlzc2luZ19vYmpmaWxlfSBNb2R1bGUKLSsKLStAdmFsdWV7R0RCTn0gY29tZXMgd2l0 aCBhIEBjb2Rle2dkYi5taXNzaW5nX29iamZpbGV9IG1vZHVsZSB3aGljaAotK2NvbnRhaW5zIHRo ZSBmb2xsb3dpbmcgY2xhc3MgYW5kIGdsb2JhbCBmdW5jdGlvbjoKLSsKLStAZGVmdHB7Y2xhc3N9 IGdkYi5taXNzaW5nX29iamZpbGUuTWlzc2luZ09iamZpbGVIYW5kbGVyCi0rCi0rQGNvZGV7TWlz c2luZ09iamZpbGVIYW5kbGVyfSBpcyBhIGJhc2UgY2xhc3MgZnJvbSB3aGljaCB1c2VyLWNyZWF0 ZWQKLStoYW5kbGVycyBjYW4gZGVyaXZlLCB0aG91Z2ggaXQgaXMgbm90IHJlcXVpcmVkIHRoYXQg aGFuZGxlcnMgZGVyaXZlCi0rZnJvbSB0aGlzIGNsYXNzLCBzbyBsb25nIGFzIGFueSB1c2VyIGNy ZWF0ZWQgaGFuZGxlciBoYXMgdGhlCi0rQGNvZGV7bmFtZX0gYW5kIEBjb2Rle2VuYWJsZWR9IGF0 dHJpYnV0ZXMsIGFuZCBpbXBsZW1lbnRzIHRoZQotK0Bjb2Rle19fY2FsbF9ffSBtZXRob2QuCi0r Ci0rQGRlZnVuIE1pc3NpbmdPYmpmaWxlSGFuZGxlci5fX2luaXRfXyAobmFtZSkKLStUaGUgQHZh cntuYW1lfSBpcyBhIHN0cmluZyB1c2VkIHRvIHJlZmVyZW5jZSB0aGlzIG1pc3Npbmctb2JqZmls ZQotK2hhbmRsZXIgd2l0aGluIHNvbWUgQHZhbHVle0dEQk59IGNvbW1hbmRzLiAgVmFsaWQgbmFt ZXMgY29uc2lzdCBvZiB0aGUKLStjaGFyYWN0ZXJzIEBzYW1we1stX2EtekEtWjAtOV19LCBjcmVh dGluZyBhIGhhbmRsZXIgd2l0aCBhbiBpbnZhbGlkCi0rbmFtZSByYWlzZXMgYSBAY29kZXtWYWx1 ZUVycm9yfSBleGNlcHRpb24uCi0rQGVuZCBkZWZ1bgotKwotK0BkZWZ1biBNaXNzaW5nT2JqZmls ZUhhbmRsZXIuX19jYWxsX18gKHBzcGFjZSwgYnVpbGRfaWQsIGZpbGVuYW1lKQotKwotK1N1Yi1j bGFzc2VzIG11c3Qgb3ZlcnJpZGUgdGhlIEBjb2Rle19fY2FsbF9ffSBtZXRob2QuICBUaGUKLStA dmFye3BzcGFjZX0gYXJndW1lbnQgd2lsbCBiZSBhIEBjb2Rle2dkYi5Qcm9nc3BhY2V9Ci0rKEBw eHJlZntQcm9nc3BhY2VzIEluIFB5dGhvbn0pLCB0aGlzIGlzIHRoZSBwcm9ncmFtIHNwYWNlIGlu IHdoaWNoCi0rQHZhbHVle0dEQk59IGlzIGxvb2tpbmcgZm9yIHRoZSBtaXNzaW5nIGZpbGUuCi0r Ci0rVGhlIEB2YXJ7YnVpbGRfaWR9IGFyZ3VtZW50IGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl IGJ1aWxkLWlkIG9mIHRoZQotK2ZpbGUgdGhhdCBpcyBtaXNzaW5nLCB0aGlzIHdpbGwgYmUgaW4g dGhlIHNhbWUgZm9ybWF0IGFzIHJldHVybmVkIGJ5Ci0rQGNvZGV7T2JqZmlsZS5idWlsZF9pZH0g KEBweHJlZntPYmpmaWxlLmJ1aWxkX2lkfSkuCi0rCi0rVGhlIEB2YXJ7ZmlsZW5hbWV9IGFyZ3Vt ZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQKLStAdmFsdWV7R0RCTn0gaXMg bG9va2luZyBmb3IuICBUaGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHRvIGFsbG93Ci0raGFu ZGxlcnMgdG8gZ2VuZXJhdGUgaW5mb3JtYXRpdmUgbWVzc2FnZXMgZm9yIHRoZSB1c2VyLiAgQSBo YW5kbGVyIGlzCi0rbm90IHJlcXVpcmVkIHRvIHBsYWNlIHRoZSBtaXNzaW5nIGZpbGUgYXQgdGhp cyBsb2NhdGlvbi4gIFRoZXJlIG1pZ2h0Ci0rYWxyZWFkeSBiZSBhIGZpbGUgcHJlc2VudCBhdCB0 aGlzIGxvY2F0aW9uLCBidXQgaXQgbWlnaHQgbm90IG1hdGNoIHRoZQotK3JlcXVpcmVkIGJ1aWxk LWlkLCBpbiB3aGljaCBjYXNlIEB2YWx1ZXtHREJOfSB3aWxsIGhhdmUgaWdub3JlZCBpdC4KLStJ biBzb21lIGxpbWl0ZWQgY2FzZXMgQHZhbHVle0dEQk59IG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGVz dGFibGlzaCB0aGUKLStAdmFye2ZpbGVuYW1lfSBvZiB0aGUgZmlsZSBpdCBpcyBzZWFyY2hpbmcg Zm9yLCBpbiB0aGlzIGNhc2UKLStAdmFsdWV7R0RCTn0gd2lsbCB1c2UgYSBzdHJpbmcgQHNhbXB7 d2l0aCBidWlsZC1pZCBAdmFye2J1aWxkX2lkfX0gYXMgYQotK3JlcGxhY2VtZW50LgotKwotK1Ro ZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgQGNvZGV7X19jYWxsX199IG1ldGhvZCBpbmRpY2F0ZXMg d2hhdAotK0B2YWx1ZXtHREJOfSBzaG91bGQgZG8gbmV4dC4gIFRoZSBwb3NzaWJsZSByZXR1cm4g dmFsdWVzIGFyZToKLSsKLStAaXRlbWl6ZSBAYnVsbGV0Ci0rQGl0ZW0gQGNvZGV7Tm9uZX0KLSsK LStUaGlzIGluZGljYXRlcyB0aGF0IHRoaXMgaGFuZGxlciBjb3VsZCBub3QgbG9jYXRlIHRoZSBt aXNzaW5nIGZpbGUgYW5kCi0rQHZhbHVle0dEQk59IHNob3VsZCBjYWxsIGFueSBvdGhlciByZWdp c3RlcmVkIGhhbmRsZXJzLgotKwotK0BpdGVtIEBjb2Rle1RydWV9Ci0rCi0rVGhpcyBpbmRpY2F0 ZXMgdGhhdCB0aGlzIGhhbmRsZXIgaGFzIGluc3RhbGxlZCB0aGUgbWlzc2luZyBmaWxlIGludG8g YQotK2xvY2F0aW9uIHdoZXJlIEB2YWx1ZXtHREJOfSB3b3VsZCBub3JtYWxseSBleHBlY3QgdG8g ZmluZCBpdC4gIFRoZQotK29ubHkgbG9jYXRpb24gaW4gd2hpY2ggQHZhbHVle0dEQk59IHdpbGwg bG9vayBpcyB3aXRoaW4gdGhlCi0rQGZpbGV7LmJ1aWxkLWlkfSBzdWItZGlyZWN0b3J5IHdpdGhp biB0aGUgQHZhcntkZWJ1Zy1maWxlLWRpcmVjdG9yeX0KLSsoQHB4cmVme2RlYnVnLWZpbGUtZGly ZWN0b3J5fSkuCi0rCi0rQHZhbHVle0dEQk59IHdpbGwgcmVwZWF0IHRoZSBub3JtYWwgbG9va3Vw IHByb2Nlc3MsIHdoaWNoIHNob3VsZCBub3cKLStmaW5kIHRoZSBwcmV2aW91c2x5IG1pc3Npbmcg ZmlsZS4KLSsKLStJZiBAdmFsdWV7R0RCTn0gc3RpbGwgZG9lc24ndCBmaW5kIGZpbGUgYWZ0ZXIg dGhpcyBzZWNvbmQgYXR0ZW1wdCwKLSt0aGVuIHRoZSBQeXRob24gbWlzc2luZy1vYmpmaWxlIGhh bmRsZXJzIGFyZSBub3QgaW52b2tlZCBhIHNlY29uZAotK3RpbWUsIHRoaXMgcHJldmVudHMgYSBi YWRseSBiZWhhdmVkIGhhbmRsZXIgY2F1c2luZyBAdmFsdWV7R0RCTn0gdG8KLStnZXQgc3R1Y2sg aW4gYSBsb29wLiAgQHZhbHVle0dEQk59IHdpbGwgY29udGludWUgd2l0aG91dCB0aGUgbWlzc2lu ZwotK2ZpbGUsIHRob3VnaCB0aGlzIHdpbGwgZGVncmFkZSB0aGUgZGVidWdnaW5nIGV4cGVyaWVu Y2UuCi0rCi0rQGl0ZW0gQGNvZGV7RmFsc2V9Ci0rCi0rVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGlz IGhhbmRsZXIgaGFzIGRvbmUgZXZlcnl0aGluZyB0aGF0IGl0IGludGVuZHMKLSt0byBkbyBidXQg dGhlIG1pc3NpbmcgZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuICBAdmFsdWV7R0RCTn0gd2lsbCBu b3QKLStjYWxsIGFueSBvdGhlciByZWdpc3RlcmVkIGhhbmRsZXJzIHRvIGxvb2sgZm9yIHRoZSBt aXNzaW5nIGZpbGUuCi0rQHZhbHVle0dEQk59IHdpbGwgY29udGludWUgd2l0aG91dCB0aGUgbWlz c2luZyBmaWxlLCB0aG91Z2ggdGhpcyB3aWxsCi0rZGVncmFkZSB0aGUgZGVidWdnaW5nIGV4cGVy aWVuY2UuCi0rCi0rQGl0ZW0gQSBzdHJpbmcKLSsKLStUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3Vs ZCBjb250YWluIGEgZmlsZW5hbWUuICBAdmFsdWV7R0RCTn0gd2lsbCBub3QKLStjYWxsIGFueSBm dXJ0aGVyIHJlZ2lzdGVyZWQgaGFuZGxlcnMsIGFuZCB3aWxsIGluc3RlYWQgdXNlIHRoZQotK3Jl dHVybmVkIGZpbGVuYW1lIGFzIHRoZSBtaXNzaW5nIGZpbGUuCi0rQGVuZCBpdGVtaXplCi0rCi0r SW52b2tpbmcgdGhlIEBjb2Rle19fY2FsbF9ffSBtZXRob2QgZnJvbSB0aGlzIGJhc2UgY2xhc3Mg d2lsbCByYWlzZSBhCi0rQGNvZGV7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZXhjZXB0aW9uLgotK0Bl bmQgZGVmdW4KLSsKLStAZGVmdmFyIE1pc3NpbmdPYmpmaWxlSGFuZGxlci5uYW1lCi0rQSByZWFk LW9ubHkgYXR0cmlidXRlIHdoaWNoIGlzIGEgc3RyaW5nLCB0aGUgbmFtZSBvZiB0aGlzIGhhbmRs ZXIKLStwYXNzZWQgdG8gdGhlIEBjb2Rle19faW5pdF9ffSBtZXRob2QuCi0rQGVuZCBkZWZ2YXIK LSsKLStAZGVmdmFyIE1pc3NpbmdPYmpmaWxlSGFuZGxlci5lbmFibGVkCi0rQSBtb2RpZmlhYmxl IGF0dHJpYnV0ZSBjb250YWluaW5nIGEgYm9vbGVhbjsgd2hlbiBAY29kZXtUcnVlfSwgdGhlCi0r aGFuZGxlciBpcyBlbmFibGVkLCBhbmQgd2lsbCBiZSB1c2VkIGJ5IEB2YWx1ZXtHREJOfS4gIFdo ZW4KLStAY29kZXtGYWxzZX0sIHRoZSBoYW5kbGVyIGhhcyBiZWVuIGRpc2FibGVkLCBhbmQgd2ls bCBub3QgYmUgdXNlZC4KLStAZW5kIGRlZnZhcgotK0BlbmQgZGVmdHAKLSsKLStAZGVmdW4gZ2Ri Lm1pc3Npbmdfb2JqZmlsZS5yZWdpc3Rlcl9oYW5kbGVyIChsb2N1cywgaGFuZGxlciwgcmVwbGFj ZT1AY29kZXtGYWxzZX0pCi0rUmVnaXN0ZXIgYSBuZXcgbWlzc2luZy1vYmpmaWxlIGhhbmRsZXIg d2l0aCBAdmFsdWV7R0RCTn0uCi0rCi0rQHZhcntoYW5kbGVyfSBpcyBhbiBpbnN0YW5jZSBvZiBh IHN1Yi1jbGFzcyBvZgotK0Bjb2Rle01pc3NpbmdPYmpmaWxlSGFuZGxlcn0sIG9yIGF0IGxlYXN0 IGFuIGluc3RhbmNlIG9mIGFuIG9iamVjdCB0aGF0Ci0raGFzIHRoZSBzYW1lIGF0dHJpYnV0ZXMg YW5kIG1ldGhvZHMgYXMgQGNvZGV7TWlzc2luZ09iamZpbGVIYW5kbGVyfS4KLSsKLStAdmFye2xv Y3VzfSBzcGVjaWZpZXMgdG8gd2hpY2ggaGFuZGxlciBsaXN0IHRvIHByZXBlbmQgQHZhcntoYW5k bGVyfS4KLStJdCBjYW4gYmUgZWl0aGVyIGEgQGNvZGV7Z2RiLlByb2dzcGFjZX0gKEBweHJlZntQ cm9nc3BhY2VzIEluIFB5dGhvbn0pCi0rb3IgQGNvZGV7Tm9uZX0sIGluIHdoaWNoIGNhc2UgdGhl IGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBnbG9iYWxseS4gIFRoZQotK25ld2x5IHJlZ2lzdGVyZWQg QHZhcntoYW5kbGVyfSB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGhhbmRsZXIKLStm cm9tIHRoZSBzYW1lIGxvY3VzLiAgVHdvIGhhbmRsZXJzIGluIHRoZSBzYW1lIGxvY3VzIGNhbm5v dCBoYXZlIHRoZQotK3NhbWUgbmFtZSwgYW4gYXR0ZW1wdCB0byBhZGQgYSBoYW5kbGVyIHdpdGgg YW4gYWxyZWFkeSBleGlzdGluZyBuYW1lCi0rcmFpc2VzIGFuIGV4Y2VwdGlvbiB1bmxlc3MgQHZh cntyZXBsYWNlfSBpcyBAY29kZXtUcnVlfSwgaW4gd2hpY2ggY2FzZQotK3RoZSBvbGQgaGFuZGxl ciBpcyBkZWxldGVkIGFuZCB0aGUgbmV3IGhhbmRsZXIgaXMgcHJlcGVuZGVkIHRvIHRoZQotK3Nl bGVjdGVkIGhhbmRsZXIgbGlzdC4KLSsKLStAdmFsdWV7R0RCTn0gZmlyc3QgY2FsbHMgdGhlIGhh bmRsZXJzIGZvciB0aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlLAotK2FuZCB0aGVuIHRoZSBnbG9i YWxseSByZWdpc3RlcmVkIGhhbmRsZXJzLiAgQXMgc29vbiBhcyBhIGhhbmRsZXIKLStyZXR1cm5z IGEgdmFsdWUgb3RoZXIgdGhhbiBAY29kZXtOb25lfSwgbm8gZnVydGhlciBoYW5kbGVycyBhcmUK LStjYWxsZWQuCi0rQGVuZCBkZWZ1bgotKwotK0BzdWJoZWFkaW5nIE1hbmFnaW5nIE1pc3Npbmct T2JqZmlsZSBIYW5kbGVycwotKwotK0B2YWx1ZXtHREJOfSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcg Y29tbWFuZHMgdG8gbWFuYWdlIHJlZ2lzdGVyZWQKLSttaXNzaW5nLW9iamZpbGUgaGFuZGxlcnM6 Ci0rCi0rQHRhYmxlIEBjb2RlCi0rCi0rQGtpbmRleCBpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5k bGVycwotK0BpdGVtIGluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIEBye1t9IEB2YXJ7bG9j dXN9IEBye1t9IEB2YXJ7bmFtZS1yZWdleHB9IEBye119IEBye119Ci0rTGlzdHMgYWxsIHJlZ2lz dGVyZWQgbWlzc2luZy1vYmpmaWxlIGhhbmRsZXJzLiAgQXJndW1lbnRzIEB2YXJ7bG9jdXN9Ci0r YW5kIEB2YXJ7bmFtZS1yZWdleHB9IGFyZSBib3RoIG9wdGlvbmFsIGFuZCBjYW4gYmUgdXNlZCB0 byBmaWx0ZXIKLSt3aGljaCBoYW5kbGVycyBhcmUgbGlzdGVkLgotKwotK1RoZSBAdmFye2xvY3Vz fSBhcmd1bWVudCBzaG91bGQgYmUgZWl0aGVyIEBrYmR7Z2xvYmFsfSwKLStAa2Jke3Byb2dzcGFj ZX0sIG9yIHRoZSBuYW1lIG9mIGFuIG9iamVjdCBmaWxlLiAgT25seSBoYW5kbGVycwotK3JlZ2lz dGVyZWQgZm9yIHRoZSBzcGVjaWZpZWQgbG9jdXMgd2lsbCBiZSBsaXN0ZWQuCi0rCi0rVGhlIEB2 YXJ7bmFtZS1yZWdleHB9IGlzIGEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gbWF0Y2ggYWdh aW5zdAotK2hhbmRsZXIgbmFtZXMuCi0rCi0rQGtpbmRleCBkaXNhYmxlIG1pc3Npbmctb2JqZmls ZS1oYW5kbGVyCi0rQGl0ZW0gZGlzYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciBAcntbfSBA dmFye2xvY3VzfSBAcntbfSBAdmFye25hbWUtcmVnZXhwfSBAcntdfSBAcntdfQotK1RoZSBAdmFy e2xvY3VzfSBhbmQgQHZhcntuYW1lLXJlZ2V4cH0gYXJlIGludGVycHJldGVkIGFzIGluIEBrYmR7 aW5mbwotK21pc3Npbmctb2JqZmlsZS1oYW5kbGVyc30gYWJvdmUsIGJ1dCBpbnN0ZWFkIG9mIGxp c3RpbmcgdGhlIG1hdGNoaW5nCi0raGFuZGxlcnMsIGFsbCBvZiB0aGUgbWF0Y2hpbmcgaGFuZGxl cnMgYXJlIGRpc2FibGVkLiAgVGhlCi0rQGNvZGV7ZW5hYmxlZH0gZmllbGQgb2YgZWFjaCBtYXRj aGluZyBoYW5kbGVyIGlzIHNldCB0byBAY29kZXtGYWxzZX0uCi0rCi0rQGtpbmRleCBlbmFibGUg bWlzc2luZy1vYmpmaWxlLWhhbmRsZXIKLStAaXRlbSBlbmFibGUgbWlzc2luZy1vYmpmaWxlLWhh bmRsZXIgQHJ7W30gQHZhcntsb2N1c30gQHJ7W30gQHZhcntuYW1lLXJlZ2V4cH0gQHJ7XX0gQHJ7 XX0KLStUaGUgQHZhcntsb2N1c30gYW5kIEB2YXJ7bmFtZS1yZWdleHB9IGFyZSBpbnRlcnByZXRl ZCBhcyBpbiBAa2Jke2luZm8KLSttaXNzaW5nLW9iamZpbGUtaGFuZGxlcnN9IGFib3ZlLCBidXQg aW5zdGVhZCBvZiBsaXN0aW5nIHRoZSBtYXRjaGluZwotK2hhbmRsZXJzLCBhbGwgb2YgdGhlIG1h dGNoaW5nIGhhbmRsZXJzIGFyZSBlbmFibGVkLiAgVGhlCi0rQGNvZGV7ZW5hYmxlZH0gZmllbGQg b2YgZWFjaCBtYXRjaGluZyBoYW5kbGVyIGlzIHNldCB0byBAY29kZXtUcnVlfS4KLStAZW5kIHRh YmxlCi0rCi0gQG5vZGUgUHl0aG9uIEF1dG8tbG9hZGluZwotIEBzdWJzZWN0aW9uIFB5dGhvbiBB dXRvLWxvYWRpbmcKLSBAY2luZGV4IFB5dGhvbiBhdXRvLWxvYWRpbmcKLWRpZmYgLS1naXQgYS9n ZGIvZXh0ZW5zaW9uLXByaXYuaCBiL2dkYi9leHRlbnNpb24tcHJpdi5oCi0tLS0gYS9nZGIvZXh0 ZW5zaW9uLXByaXYuaAotKysrIGIvZ2RiL2V4dGVuc2lvbi1wcml2LmgKLUBAIC0yODcsOSArMjg3 LDIyIEBAIHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2Vfb3BzCi0gICAvKiBHaXZlIGV4dGVuc2lv biBsYW5ndWFnZXMgYSBjaGFuY2UgdG8gZGVhbCB3aXRoIG1pc3NpbmcgZGVidWcKLSAgICAgIGlu Zm9ybWF0aW9uLiAgT0JKRklMRSBpcyB0aGUgZmlsZSBmb3Igd2hpY2ggR0RCIHdhcyB1bmFibGUg dG8gZmluZAotICAgICAgYW55IGRlYnVnIGluZm9ybWF0aW9uLiAgKi8KLS0gIGV4dF9sYW5nX21p c3NpbmdfZGVidWdpbmZvX3Jlc3VsdAotKyAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAot ICAgICAoKmhhbmRsZV9taXNzaW5nX2RlYnVnaW5mbykgKGNvbnN0IHN0cnVjdCBleHRlbnNpb25f bGFuZ3VhZ2VfZGVmbiAqLAotIAkJCQkgc3RydWN0IG9iamZpbGUgKm9iamZpbGUpOwotKwotKyAg LyogR2l2ZSBleHRlbnNpb24gbGFuZ3VhZ2VzIGEgY2hhbmNlIHRvIGRlYWwgd2l0aCBtaXNzaW5n IG9iamZpbGVzLgotKyAgICAgUFNQQUNFIGlzIHRoZSBwcm9ncmFtIHNwYWNlIGluIHdoaWNoIEdE QiBpcyBzZWFyY2hpbmcgZm9yIGEgbWlzc2luZwotKyAgICAgb2JqZmlsZSwgYW5kIHdpbGwgbm90 IGJlIE5VTEwuICBCVUlMRF9JRCBpcyB0aGUgYnVpbGQtaWQgb2YgdGhlCi0rICAgICBvYmpmaWxl IHdlJ3JlIGxvb2tpbmcgZm9yLCBhbmQgd2lsbCBub3QgYmUgTlVMTC4gIEZJTEVOQU1FIGlzIHRo ZSBuYW1lCi0rICAgICBvZiB0aGUgZmlsZSB3ZSdyZSBsb29raW5nIGZvciwgYW5kIHdpbGwgbm90 IGJlIE5VTEwuICBTZWUKLSsgICAgIGV4dF9sYW5nX2ZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQg Zm9yIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotKyAgICAgYWJvdXQgdGhlIG1lYW5pbmcg b2YgRklMRU5BTUUuICAqLwotKyAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAotKyAgICAo KmZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQpIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1 YWdlX2RlZm4gKiwKLSsJCQkJICBwcm9ncmFtX3NwYWNlICpwc3BhY2UsCi0rCQkJCSAgY29uc3Qg c3RydWN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQsCi0rCQkJCSAgY29uc3QgY2hhciAqZmlsZW5h bWUpOwotIH07Ci0gCi0gLyogU3RhdGUgbmVjZXNzYXJ5IHRvIHJlc3RvcmUgYSBzaWduYWwgaGFu ZGxlciB0byBpdHMgcHJldmlvdXMgdmFsdWUuICAqLwotZGlmZiAtLWdpdCBhL2dkYi9leHRlbnNp b24uYyBiL2dkYi9leHRlbnNpb24uYwotLS0tIGEvZ2RiL2V4dGVuc2lvbi5jCi0rKysgYi9nZGIv ZXh0ZW5zaW9uLmMKLUBAIC0xMDQwLDcgKzEwNDAsNyBAQCBleHRfbGFuZ19wcmludF9pbnNuIChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIGFkZHJlc3MsCi0gCi0gLyogU2VlIGV4 dGVuc2lvbi5oLiAgKi8KLSAKLS1leHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQKLStl eHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0Ci0gZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVi dWdpbmZvIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKLSB7Ci0gICBmb3IgKGNvbnN0IHN0cnVj dCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZyA6IGV4dGVuc2lvbl9sYW5ndWFnZXMp Ci1AQCAtMTA0OCw3ICsxMDQ4LDcgQEAgZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZv IChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKLSAgICAgICBpZiAoZXh0bGFuZy0+b3BzID09IG51 bGxwdHIKLSAJICB8fCBleHRsYW5nLT5vcHMtPmhhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyA9PSBu dWxscHRyKQotIAljb250aW51ZTsKLS0gICAgICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19y ZXN1bHQgcmVzdWx0Ci0rICAgICAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCByZXN1bHQK LSAJPSBleHRsYW5nLT5vcHMtPmhhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAoZXh0bGFuZywgb2Jq ZmlsZSk7Ci0gICAgICAgaWYgKCFyZXN1bHQuZmlsZW5hbWUgKCkuZW1wdHkgKCkgfHwgcmVzdWx0 LnRyeV9hZ2FpbiAoKSkKLSAJcmV0dXJuIHJlc3VsdDsKLUBAIC0xMDU3LDYgKzEwNTcsMjggQEAg ZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmls ZSkKLSAgIHJldHVybiB7fTsKLSB9Ci0gCi0rLyogU2VlIGV4dGVuc2lvbi5oLiAgKi8KLSsKLStl eHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0Ci0rZXh0X2xhbmdfZmluZF9vYmpmaWxlX2Zyb21f YnVpbGRpZCAocHJvZ3JhbV9zcGFjZSAqcHNwYWNlLAotKwkJCQkgICAgY29uc3Qgc3RydWN0IGJm ZF9idWlsZF9pZCAqYnVpbGRfaWQsCi0rCQkJCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKLSt7 Ci0rICBmb3IgKGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZyA6 IGV4dGVuc2lvbl9sYW5ndWFnZXMpCi0rICAgIHsKLSsgICAgICBpZiAoZXh0bGFuZy0+b3BzID09 IG51bGxwdHIKLSsJICB8fCBleHRsYW5nLT5vcHMtPmZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQg PT0gbnVsbHB0cikKLSsJY29udGludWU7Ci0rICAgICAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jl c3VsdCByZXN1bHQKLSsJPSBleHRsYW5nLT5vcHMtPmZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQg KGV4dGxhbmcsIHBzcGFjZSwgYnVpbGRfaWQsCi0rCQkJCQkJICAgZmlsZW5hbWUpOwotKyAgICAg IGlmICghcmVzdWx0LmZpbGVuYW1lICgpLmVtcHR5ICgpIHx8IHJlc3VsdC50cnlfYWdhaW4gKCkp Ci0rCXJldHVybiByZXN1bHQ7Ci0rICAgIH0KLSsKLSsgIHJldHVybiB7fTsKLSt9Ci0rCi0gLyog Q2FsbGVkIHZpYSBhbiBvYnNlcnZlciBiZWZvcmUgZ2RiIHByaW50cyBpdHMgcHJvbXB0LgotICAg IEl0ZXJhdGUgb3ZlciB0aGUgZXh0ZW5zaW9uIGxhbmd1YWdlcyBnaXZpbmcgdGhlbSBhIGNoYW5j ZSB0bwotICAgIGNoYW5nZSB0aGUgcHJvbXB0LiAgVGhlIGZpcnN0IG9uZSB0byBjaGFuZ2UgdGhl IHByb21wdCB3aW5zLAotZGlmZiAtLWdpdCBhL2dkYi9leHRlbnNpb24uaCBiL2dkYi9leHRlbnNp b24uaAotLS0tIGEvZ2RiL2V4dGVuc2lvbi5oCi0rKysgYi9nZGIvZXh0ZW5zaW9uLmgKLUBAIC0z Niw2ICszNiw3IEBAIHN0cnVjdCB1aV9maWxlOwotIHN0cnVjdCB1aV9vdXQ7Ci0gc3RydWN0IHZh bHVlOwotIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zOwotK3N0cnVjdCBwcm9ncmFtX3NwYWNl OwotIAotIC8qIEEgZnVuY3Rpb24gdG8gbG9hZCBhbmQgcHJvY2VzcyBhIHNjcmlwdCBmaWxlLgot ICAgIFRoZSBmaWxlIGhhcyBiZWVuIG9wZW5lZCBhbmQgaXMgcmVhZHkgdG8gYmUgcmVhZCBmcm9t IHRoZSBiZWdpbm5pbmcuCi1AQCAtMzU4LDIzICszNTksMjMgQEAgZXh0ZXJuIHN0ZDo6b3B0aW9u YWw8aW50PiBleHRfbGFuZ19wcmludF9pbnNuCi0gICAgaXQuICBBbmQgdGhlIHRoaXJkIG9wdGlv biBpcyBmb3IgdGhlIGV4dGVuc2lvbiB0byBqdXN0IHJldHVybiBhIG51bGwKLSAgICByZXN1bHQs IGluZGljYXRpb24gdGhlcmUgaXMgbm90aGluZyB0aGUgZXh0ZW5zaW9uIGNhbiBkbyB0byBwcm92 aWRlIHRoZQotICAgIG1pc3NpbmcgZGVidWcgaW5mb3JtYXRpb24uICAqLwotLXN0cnVjdCBleHRf bGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQKLStzdHJ1Y3QgZXh0X2xhbmdfbWlzc2luZ19m aWxlX3Jlc3VsdAotIHsKLSAgIC8qIERlZmF1bHQgcmVzdWx0LiAgVGhlIGV4dGVuc2lvbiB3YXMg dW5hYmxlIHRvIHByb3ZpZGUgdGhlIG1pc3NpbmcgZGVidWcKLSAgICAgIGluZm8uICAqLwotLSAg ZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0ICgpCi0rICBleHRfbGFuZ19taXNzaW5n X2ZpbGVfcmVzdWx0ICgpCi0gICB7IC8qIE5vdGhpbmcuICAqLyB9Ci0gCi0gICAvKiBXaGVuIFRS WV9BR0FJTiBpcyB0cnVlIEdEQiBzaG91bGQgdHJ5IHNlYXJjaGluZyBhZ2FpbiwgdGhlIGV4dGVu c2lvbgotICAgICAgbWF5IGhhdmUgaW5zdGFsbGVkIHRoZSBtaXNzaW5nIGRlYnVnIGluZm8gaW50 byBhIHN1aXRhYmxlIGxvY2F0aW9uLgotICAgICAgV2hlbiBUUllfQUdBSU4gaXMgZmFsc2UgdGhp cyBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0LCBubwotICAgICAgYXJndW1lbnQsIGNvbnN0 cnVjdG9yLiAgKi8KLS0gIGV4dF9sYW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdCAoYm9vbCB0 cnlfYWdhaW4pCi0rICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IChib29sIHRyeV9hZ2Fp bikKLSAgICAgOiBtX3RyeV9hZ2FpbiAodHJ5X2FnYWluKQotICAgeyAvKiBOb3RoaW5nLiAgKi8g fQotIAotICAgLyogTG9vayBpbiBGSUxFTkFNRSBmb3IgdGhlIG1pc3NpbmcgZGVidWcgaW5mby4g ICovCi0tICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgKHN0ZDo6c3RyaW5nICYm ZmlsZW5hbWUpCi0rICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IChzdGQ6OnN0cmluZyAm JmZpbGVuYW1lKQotICAgICA6IG1fZmlsZW5hbWUgKHN0ZDo6bW92ZSAoZmlsZW5hbWUpKQotICAg eyAvKiBOb3RoaW5nLiAgKi8gfQotIAotQEAgLTQwNCw5ICs0MDUsMjggQEAgc3RydWN0IGV4dF9s YW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdAotIAotIC8qIENhbGxlZCB3aGVuIEdEQiBmYWls ZWQgdG8gZmluZCBhbnkgZGVidWcgaW5mb3JtYXRpb24gZm9yIE9CSkZJTEUuICAqLwotIAotLWV4 dGVybiBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgZXh0X2xhbmdfaGFuZGxlX21p c3NpbmdfZGVidWdpbmZvCi0rZXh0ZXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZXh0 X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvCi0gICAoc3RydWN0IG9iamZpbGUgKm9iamZp bGUpOwotIAotKy8qIENhbGxlZCB3aGVuIEdEQiBvcGVucyBhIGNvcmUtZmlsZSB0byBmaW5kIGFu eSBvYmplY3QgZmlsZXMgZm9yIHdoaWNoIGEKLSsgICBidWlsZC1pZCBjb3VsZCBiZSBleHRyYWN0 ZWQgZnJvbSB0aGUgY29yZS1maWxlLCBidXQgdGhlIG1hdGNoaW5nIGZpbGUKLSsgICBjb3VsZCBu b3Qgb3RoZXJ3aXNlIGJlIGZvdW5kIGJ5IEdEQi4KLSsKLSsgICBQU1BBQ0UgaXMgdGhlIHByb2dy YW0gc3BhY2UgaW4gd2hpY2ggR0RCIGlzIG9wZW5pbmcgdGhlIGNvcmUtZmlsZSBhbmQKLSsgICBp cyBsb29raW5nIGZvciBhIG1pc3Npbmcgb2JqZWN0IGZpbGUuICBCVUlMRF9JRCBpcyB0aGUgYnVp bGQtaWQgb2YgdGhlCi0rICAgZmlsZSBiZWluZyBsb29rZWQgZm9yLCBhbmQgd2lsbCBub3QgYmUg TlVMTC4gIEZJTEVOQU1FIGlzIHRoZSBuYW1lIG9mCi0rICAgdGhlIGZpbGUgR0RCIGlzIGxvb2tp bmcgZm9yLCB0aGlzIHdpbGwgbm90IGJlIE5VTEwuICBUaGUgRklMRU5BTUUgaXMKLSsgICBwcm92 aWRlZCBvbmx5IGZvciBjcmVhdGluZyBoZWxwZnVsIG1lc3NhZ2VzIGZvciB0aGUgdXNlci4gIEZJ TEVOQU1FCi0rICAgbWlnaHQgYWxyZWFkeSBleGlzdCBvbiBkaXNrIGJ1dCBoYXZlIHRoZSB3cm9u ZyBidWlsZC1pZCwgb2YgRklMRU5BTUUKLSsgICBtaWdodCBub3QgZXhpc3Qgb24gZGlzay4gIElm IHRoZSBtaXNzaW5nIG9iamZpbGUgY2FuIGJlIGZvdW5kIHRoZW4gaXQKLSsgICBkb2VzIG5vdCBo YXZlIHRvIGJlIHBsYWNlZCBhdCB0aGUgbG9jYXRpb24gRklMRU5BTUUuCi0rCi0rICAgVGhlIHJl dHVybmVkIG9iamVjdCBpbmRpY2F0ZXMgaWYgdGhlIGZpbGUgY291bGQgYmUgZm91bmQgb3Igbm90 LiAgKi8KLSsKLStleHRlcm4gZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCBleHRfbGFuZ19m aW5kX29iamZpbGVfZnJvbV9idWlsZGlkCi0rICAocHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCBjb25z dCBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZCwKLSsgICBjb25zdCBjaGFyICpmaWxlbmFt ZSk7Ci0rCi0gI2lmIEdEQl9TRUxGX1RFU1QKLSBuYW1lc3BhY2Ugc2VsZnRlc3RzIHsKLSBleHRl cm4gdm9pZCAoKmhvb2tfc2V0X2FjdGl2ZV9leHRfbGFuZykgKCk7Ci1kaWZmIC0tZ2l0IGEvZ2Ri L2dkYmNvcmUuaCBiL2dkYi9nZGJjb3JlLmgKLS0tLSBhL2dkYi9nZGJjb3JlLmgKLSsrKyBiL2dk Yi9nZGJjb3JlLmgKLUBAIC0xOTYsNCArMTk2LDcwIEBAIGNsYXNzIHRocmVhZF9zZWN0aW9uX25h bWUKLSAgIHN0ZDo6c3RyaW5nIG1fc3RvcmFnZTsKLSB9OwotIAotKy8qIFR5cGUgcmV0dXJuZWQg ZnJvbSBjb3JlX3RhcmdldF9maW5kX21hcHBlZF9maWxlLiAgSG9sZHMgaW5mb3JtYXRpb24KLSsg ICBhYm91dCBhIG1hcHBlZCBmaWxlIHRoYXQgd2FzIHByb2Nlc3NlZCB3aGVuIGEgY29yZSBmaWxl IHdhcyBpbml0aWFsbHkKLSsgICBsb2FkZWQuICAqLwotK3N0cnVjdCBjb3JlX3RhcmdldF9tYXBw ZWRfZmlsZV9pbmZvCi0rewotKyAgLyogQ29uc3RydWN0b3IuICBCVUlMRF9JRCBpcyBub3QgbnVs bHB0ciwgYW5kIGlzIHRoZSBidWlsZC1pZCBmb3IgdGhlCi0rICAgICBtYXBwZWQgZmlsZS4gIEZJ TEVOQU1FIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0aGF0IEdEQiBsb2FkZWQgdG8KLSsg ICAgIHByb3ZpZGUgdGhlIG1hcHBlZCBmaWxlLiAgVGhpcyBtaWdodCBiZSBkaWZmZXJlbnQgZnJv bSB0aGUgbmFtZSBvZiB0aGUKLSsgICAgIG1hcHBlZCBmaWxlIG1lbnRpb25lZCBpbiB0aGUgY29y ZSBmaWxlLCBlLmcuIGlmIEdEQiBkb3dubG9hZHMgYSBmaWxlCi0rICAgICBmcm9tIGRlYnVnaW5m b2QgdGhlbiBGSUxFTkFNRSB3b3VsZCBwb2ludCBpbnRvIHRoZSBkZWJ1Z2luZm9kIGNsaWVudAot KyAgICAgY2FjaGUuICBUaGUgRklMRU5BTUUgY2FuIGJlIHRoZSBlbXB0eSBzdHJpbmcgaWYgR0RC IHdhcyB1bmFibGUgdG8gZmluZAotKyAgICAgYSBmaWxlIHRvIHByb3ZpZGUgdGhlIG1hcHBlZCBm aWxlLiAgKi8KLSsKLSsgIGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8gKGNvbnN0IGJmZF9i dWlsZF9pZCAqYnVpbGRfaWQsCi0rCQkJCWNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lKQotKyAg ICA6IG1fYnVpbGRfaWQgKGJ1aWxkX2lkKSwKLSsgICAgICBtX2ZpbGVuYW1lIChmaWxlbmFtZSkK LSsgIHsKLSsgICAgZ2RiX2Fzc2VydCAobV9idWlsZF9pZCAhPSBudWxscHRyKTsKLSsgIH0KLSsK LSsgIC8qIFRoZSBidWlsZC1pZCBmb3IgdGhpcyBtYXBwZWQgZmlsZS4gICovCi0rCi0rICBjb25z dCBiZmRfYnVpbGRfaWQgKgotKyAgYnVpbGRfaWQgKCkgY29uc3QKLSsgIHsKLSsgICAgcmV0dXJu IG1fYnVpbGRfaWQ7Ci0rICB9Ci0rCi0rICAvKiBUaGUgZmlsZSBHREIgdXNlZCB0byBwcm92aWRl IHRoaXMgbWFwcGVkIGZpbGUuICAqLwotKwotKyAgY29uc3Qgc3RkOjpzdHJpbmcgJgotKyAgZmls ZW5hbWUgKCkgY29uc3QKLSsgIHsKLSsgICAgcmV0dXJuIG1fZmlsZW5hbWU7Ci0rICB9Ci0rCi0r cHJpdmF0ZToKLSsgIGNvbnN0IGJmZF9idWlsZF9pZCAqbV9idWlsZF9pZCA9IG51bGxwdHI7Ci0r ICBjb25zdCBzdGQ6OnN0cmluZyBtX2ZpbGVuYW1lOwotK307Ci0rCi0rLyogSWYgdGhlIGN1cnJl bnQgaW5mZXJpb3IgaGFzIGEgY29yZV90YXJnZXQgZm9yIGl0cyBwcm9jZXNzIHRhcmdldCwgdGhl bgotKyAgIGxvb2t1cCBpbmZvcm1hdGlvbiBhYm91dCBhIG1hcHBlZCBmaWxlIHRoYXQgd2FzIGRp c2NvdmVyZWQgd2hlbiB0aGUKLSsgICBjb3JlIGZpbGUgd2FzIGxvYWRlZC4KLSsKLSsgICBUaGUg RklMRU5BTUUgaXMgdGhlIGZpbGUgd2UncmUgbG9va2luZyBmb3IuICBUaGUgQUREUiwgaWYgcHJv dmlkZWQsIGlzIGEKLSsgICBtYXBwZWQgYWRkcmVzcyB3aXRoaW4gdGhlIGluZmVyaW9yIHdoaWNo IGlzIGtub3duIHRvIGJlIHBhcnQgb2YgdGhlIGZpbGUKLSsgICB3ZSBhcmUgbG9va2luZyBmb3Iu Ci0rCi0rICAgQXMgYW4gZXhhbXBsZSwgd2hlbiBsb2FkaW5nIHNoYXJlZCBsaWJyYXJpZXMgdGhp cyBmdW5jdGlvbiBjYW4gYmUKLSsgICBjYWxsZWQsIGluIHRoYXQgY2FzZSBGSUxFTkFNRSB3aWxs IGJlIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQotKyAgIHRoYXQgR0RCIGlzIHRyeWlu ZyB0byBsb2FkIGFuZCBBRERSIHdpbGwgYmUgYW4gaW5mZXJpb3IgYWRkcmVzcyB3aGljaCBpcwot KyAgIHBhcnQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IHdlIGFyZSBsb29raW5nIGZvci4KLSsKLSsg ICBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIG1hcHBlZCBmaWxlIHdoaWNoIG1hdGNoZXMgRklM RU5BTUUgYW5kL29yCi0rICAgd2hpY2ggY292ZXJzIEFERFIgYW5kIHJldHVybnMgaW5mb3JtYXRp b24gYWJvdXQgdGhhdCBmaWxlLgotKwotKyAgIFRoZSByZXR1cm5lZCBpbmZvcm1hdGlvbiBpbmNs dWRlcyB0aGUgbmFtZSBvZiB0aGUgbWFwcGVkIGZpbGUgaWYga25vd24KLSsgICBhbmQgdGhlIGJ1 aWxkLWlkIGZvciB0aGUgbWFwcGVkIGZpbGUgaWYga25vd24uCi0rCi0rICAgKi8KLStzdGQ6Om9w dGlvbmFsPGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8+Ci0rY29yZV90YXJnZXRfZmluZF9t YXBwZWRfZmlsZSAoY29uc3QgY2hhciAqZmlsZW5hbWUsCi0rCQkJICAgICAgc3RkOjpvcHRpb25h bDxDT1JFX0FERFI+IGFkZHIpOwotKwotICNlbmRpZiAvKiAhZGVmaW5lZCAoR0RCQ09SRV9IKSAq LwotZGlmZiAtLWdpdCBhL2dkYi9pbmYtY2hpbGQuYyBiL2dkYi9pbmYtY2hpbGQuYwotLS0tIGEv Z2RiL2luZi1jaGlsZC5jCi0rKysgYi9nZGIvaW5mLWNoaWxkLmMKLUBAIC0zMjAsNiArMzIwLDIx IEBAIGluZl9jaGlsZF90YXJnZXQ6OmZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAq c2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2VyCi0gICByZXR1cm4gcmV0OwotIH0KLSAKLSsvKiBJ bXBsZW1lbnRhdGlvbiBvZiB0b19maWxlaW9fc3RhdC4gICovCi0rCi0raW50Ci0raW5mX2NoaWxk X3RhcmdldDo6ZmlsZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpm aWxlbmFtZSwKLSsJCQkgICAgICAgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdl dF9lcnJubykKLSt7Ci0rICBpbnQgcmV0OwotKwotKyAgcmV0ID0gbHN0YXQgKGZpbGVuYW1lLCBz Yik7Ci0rICBpZiAocmV0ID09IC0xKQotKyAgICAqdGFyZ2V0X2Vycm5vID0gaG9zdF90b19maWxl aW9fZXJyb3IgKGVycm5vKTsKLSsKLSsgIHJldHVybiByZXQ7Ci0rfQotKwotIC8qIEltcGxlbWVu dGF0aW9uIG9mIHRvX2ZpbGVpb19jbG9zZS4gICovCi0gCi0gaW50Ci1kaWZmIC0tZ2l0IGEvZ2Ri L2luZi1jaGlsZC5oIGIvZ2RiL2luZi1jaGlsZC5oCi0tLS0gYS9nZGIvaW5mLWNoaWxkLmgKLSsr KyBiL2dkYi9pbmYtY2hpbGQuaAotQEAgLTgxLDYgKzgxLDggQEAgY2xhc3MgaW5mX2NoaWxkX3Rh cmdldAotICAgaW50IGZpbGVpb19wcmVhZCAoaW50IGZkLCBnZGJfYnl0ZSAqcmVhZF9idWYsIGlu dCBsZW4sCi0gCQkgICAgVUxPTkdFU1Qgb2Zmc2V0LCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJu bykgb3ZlcnJpZGU7Ci0gICBpbnQgZmlsZWlvX2ZzdGF0IChpbnQgZmQsIHN0cnVjdCBzdGF0ICpz YiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pIG92ZXJyaWRlOwotKyAgaW50IGZpbGVpb19z dGF0IChzdHJ1Y3QgaW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0rCQkgICBz dHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVycmlkZTsKLSAg IGludCBmaWxlaW9fY2xvc2UgKGludCBmZCwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pIG92 ZXJyaWRlOwotICAgaW50IGZpbGVpb191bmxpbmsgKHN0cnVjdCBpbmZlcmlvciAqaW5mLAotIAkJ ICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9n ZGIvX19pbml0X18ucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKLS0tLSBhL2dk Yi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weQotKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL19f aW5pdF9fLnB5Ci1AQCAtODcsOCArODcsOSBAQCB4bWV0aG9kcyA9IFtdCi0gZnJhbWVfZmlsdGVy cyA9IHt9Ci0gIyBJbml0aWFsIGZyYW1lIHVud2luZGVycy4KLSBmcmFtZV91bndpbmRlcnMgPSBb XQotLSMgSW5pdGlhbCBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzLgotLW1pc3NpbmdfZGVidWdfaGFu ZGxlcnMgPSBbXQotKyMgVGhlIG1pc3NpbmcgZmlsZSBoYW5kbGVycy4gIEVhY2ggaXRlbSBpcyBh IHR1cGxlIHdpdGggdGhlIGZvcm0KLSsjIChUWVBFLCBIQU5ETEVSKSB3aGVyZSBUWVBFIGlzIGEg c3RyaW5nIGVpdGhlciAnZGVidWcnIG9yICdvYmpmaWxlJy4KLSttaXNzaW5nX2ZpbGVfaGFuZGxl cnMgPSBbXQotIAotIAotIGRlZiBfZXhlY3V0ZV91bndpbmRlcnMocGVuZGluZ19mcmFtZSk6Ci1A QCAtMjcxLDYgKzI3Miw2MSBAQCBjbGFzcyBUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAg ICAgICAgICAgc3VwZXIoKS5zdGFydCgpCi0gCi0gCi0rZGVmIF9maWx0ZXJfbWlzc2luZ19maWxl X2hhbmRsZXJzKGhhbmRsZXJzLCBoYW5kbGVyX3R5cGUpOgotKyAgICAiIiJFYWNoIGxpc3Qgb2Yg bWlzc2luZyBmaWxlIGhhbmRsZXJzIGlzIGEgbGlzdCBvZiB0dXBsZXMsIHRoZSBmaXJzdAotKyAg ICBpdGVtIGluIHRoZSB0dXBsZSBpcyBhIHN0cmluZyBlaXRoZXIgJ2RlYnVnJyBvciAnb2JqZmls ZScgdG8KLSsgICAgaW5kaWNhdGUgd2hhdCB0eXBlIG9mIGhhbmRsZXIgaXQgaXMuICBUaGUgc2Vj b25kIGl0ZW0gaW4gdGhlIHR1cGxlCi0rICAgIGlzIHRoZSBhY3R1YWwgaGFuZGxlciBvYmplY3Qu Ci0rCi0rICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgSEFORExFUl9UWVBFIHdoaWNoIGlzIGEgc3Ry aW5nLCBlaXRoZXIgJ2RlYnVnJwotKyAgICBvciAnb2JqZmlsZScgYW5kIEhBTkRMRVJTLCBhIGxp c3Qgb2YgdHVwbGVzLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMKLSsgICAgYW4gaXRlcmFibGUgb3Zl ciBhbGwgb2YgdGhlIGhhbmRsZXIgb2JqZWN0cyAoZXh0cmFjdGVkIGZyb20gdGhlCi0rICAgIHR1 cGxlcykgd2hpY2ggbWF0Y2ggSEFORExFUl9UWVBFLgotKyAgICAiIiIKLSsKLSsgICAgcmV0dXJu IG1hcChsYW1iZGEgdDogdFsxXSwgZmlsdGVyKGxhbWJkYSB0OiB0WzBdID09IGhhbmRsZXJfdHlw ZSwgaGFuZGxlcnMpKQotKwotKwotK2RlZiBfaGFuZGxlX21pc3NpbmdfZmlsZXMocHNwYWNlLCBo YW5kbGVyX3R5cGUsIGNiKToKLSsgICAgIiIiSGVscGVyIGZvciBfaGFuZGxlX21pc3NpbmdfZGVi dWdpbmZvIGFuZCBfaGFuZGxlX21pc3Npbmdfb2JqZmlsZS4KLSsKLSsgICAgQXJndW1lbnRzOgot KyAgICAgICAgcHNwYWNlOiBUaGUgZ2RiLlByb2dzcGFjZSBpbiB3aGljaCB3ZSdyZSBvcGVyYXRp bmcuICBVc2VkIHRvCi0rICAgICAgICAgICAgbG9va3VwIHByb2dyYW0gc3BhY2Ugc3BlY2lmaWMg aGFuZGxlcnMuCi0rICAgICAgICBoYW5kbGVyX3R5cGU6IEEgc3RyaW5nLCBlaXRoZXIgJ2RlYnVn JyBvciAnb2JqZmlsZScsIHRoaXMgaXMgdGhlCi0rICAgICAgICAgICAgdHlwZSBvZiBoYW5kbGVy IHdlJ3JlIGxvb2tpbmcgZm9yLgotKyAgICAgICAgY2I6IEEgY2FsbGJhY2sgd2hpY2ggdGFrZXMg YSBoYW5kbGVyIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKLSsgICAgICAgICAgICBjYWxsaW5n IHRoZSBoYW5kbGVyLgotKwotKyAgICBSZXR1cm5zOgotKyAgICAgICAgTm9uZTogTm8gc3VpdGFi bGUgZmlsZSBjb3VsZCBiZSBmb3VuZC4KLSsgICAgICAgIEZhbHNlOiBBIGhhbmRsZXIgaGFzIGRl Y2lkZWQgdGhhdCB0aGUgcmVxdWVzdGVkIGZpbGUgY2Fubm90IGJlCi0rICAgICAgICAgICAgICAg IGZvdW5kLCBhbmQgbm8gZnVydGhlciBzZWFyY2hpbmcgc2hvdWxkIGJlIGRvbmUuCi0rICAgICAg ICBUcnVlOiBUaGUgZmlsZSBoYXMgYmVlbiBmb3VuZCBhbmQgaW5zdGFsbGVkIGluIGEgbG9jYXRp b24KLSsgICAgICAgICAgICAgICAgd2hlcmUgR0RCIHdvdWxkIG5vcm1hbGx5IGxvb2sgZm9yIGl0 LiAgR0RCIHNob3VsZAotKyAgICAgICAgICAgICAgICByZXBlYXQgaXRzIGxvb2t1cCBwcm9jZXNz LCB0aGUgZmlsZSBzaG91bGQgbm93IGJlIGluCi0rICAgICAgICAgICAgICAgIHBsYWNlLgotKyAg ICAgICAgQSBzdHJpbmc6IFRoaXMgaXMgdGhlIGZpbGVuYW1lIG9mIHdoZXJlIHRoZSBtaXNzaW5n IGZpbGUgY2FuCi0rICAgICAgICAgICAgICAgIGJlIGZvdW5kLgotKyAgICAiIiIKLSsKLSsgICAg Zm9yIGhhbmRsZXIgaW4gX2ZpbHRlcl9taXNzaW5nX2ZpbGVfaGFuZGxlcnMoCi0rICAgICAgICBw c3BhY2UubWlzc2luZ19maWxlX2hhbmRsZXJzLCBoYW5kbGVyX3R5cGUKLSsgICAgKToKLSsgICAg ICAgIGlmIGhhbmRsZXIuZW5hYmxlZDoKLSsgICAgICAgICAgICByZXN1bHQgPSBjYihoYW5kbGVy KQotKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKLSsgICAgICAgICAgICAgICAg cmV0dXJuIHJlc3VsdAotKwotKyAgICBmb3IgaGFuZGxlciBpbiBfZmlsdGVyX21pc3NpbmdfZmls ZV9oYW5kbGVycyhtaXNzaW5nX2ZpbGVfaGFuZGxlcnMsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICAg ICBpZiBoYW5kbGVyLmVuYWJsZWQ6Ci0rICAgICAgICAgICAgcmVzdWx0ID0gY2IoaGFuZGxlcikK LSsgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6Ci0rICAgICAgICAgICAgICAgIHJl dHVybiByZXN1bHQKLSsKLSsgICAgcmV0dXJuIE5vbmUKLSsKLSsKLSBkZWYgX2hhbmRsZV9taXNz aW5nX2RlYnVnaW5mbyhvYmpmaWxlKToKLSAgICAgIiIiSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVk IGZyb20gR0RCIHRvIGV4ZWN1dGUgbWlzc2luZyBkZWJ1ZwotICAgICBoYW5kbGVycy4KLUBAIC0y OTMsMTggKzM0OSw0NiBAQCBkZWYgX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyhvYmpmaWxlKToK LSAgICAgICAgIEEgc3RyaW5nOiBUaGlzIGlzIHRoZSBmaWxlbmFtZSBvZiBhIGZpbGUgY29udGFp bmluZyB0aGUKLSAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBkZWJ1ZyBpbmZvcm1hdGlvbi4K LSAgICAgIiIiCi0rCi0gICAgIHBzcGFjZSA9IG9iamZpbGUucHJvZ3NwYWNlCi0gCi0tICAgIGZv ciBoYW5kbGVyIGluIHBzcGFjZS5taXNzaW5nX2RlYnVnX2hhbmRsZXJzOgotLSAgICAgICAgaWYg aGFuZGxlci5lbmFibGVkOgotLSAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIob2JqZmlsZSkK LS0gICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6Ci0tICAgICAgICAgICAgICAgIHJl dHVybiByZXN1bHQKLSsgICAgcmV0dXJuIF9oYW5kbGVfbWlzc2luZ19maWxlcyhwc3BhY2UsICJk ZWJ1ZyIsIGxhbWJkYSBoOiBoKG9iamZpbGUpKQotIAotLSAgICBmb3IgaGFuZGxlciBpbiBtaXNz aW5nX2RlYnVnX2hhbmRsZXJzOgotLSAgICAgICAgaWYgaGFuZGxlci5lbmFibGVkOgotLSAgICAg ICAgICAgIHJlc3VsdCA9IGhhbmRsZXIob2JqZmlsZSkKLS0gICAgICAgICAgICBpZiByZXN1bHQg aXMgbm90IE5vbmU6Ci0tICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAKLS0gICAgcmV0 dXJuIE5vbmUKLStkZWYgX2hhbmRsZV9taXNzaW5nX29iamZpbGUocHNwYWNlLCBidWlsZGlkLCBm aWxlbmFtZSk6Ci0rICAgICIiIkludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQiB0byBl eGVjdXRlIG1pc3Npbmcgb2JqZmlsZQotKyAgICBoYW5kbGVycy4KLSsKLSsgICAgUnVuIGVhY2gg b2YgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkLCBhbmQgZW5hYmxlZCBtaXNzaW5nIG9iamZpbGUK LSsgICAgaGFuZGxlciBvYmplY3RzIGZvciB0aGUgZ2RiLlByb2dzcGFjZSBwYXNzZWQgaW4gYXMg YW4gYXJndW1lbnQsCi0rICAgIGFuZCB0aGVuIGZyb20gdGhlIGdsb2JhbCBsaXN0LiAgU3RvcCBh ZnRlciB0aGUgZmlyc3QgaGFuZGxlciB0aGF0Ci0rICAgIHJldHVybnMgYSByZXN1bHQgb3RoZXIg dGhhbiBOb25lLgotKwotKyAgICBBcmd1bWVudHM6Ci0rICAgICAgICBwc3BhY2U6IEEgZ2RiLlBy b2dzcGFjZSBmb3Igd2hpY2ggdGhlIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVycwotKyAgICAgICAg ICAgICAgICBzaG91bGQgYmUgcnVuLiAgVGhpcyBpcyB0aGUgcHJvZ3JhbSBzcGFjZSBpbiB3aGlj aCBhbgotKyAgICAgICAgICAgICAgICBvYmpmaWxlIHdhcyBmb3VuZCB0byBiZSBtaXNzaW5nLgot KyAgICAgICAgYnVpbGRpZDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYnVpbGQtaWQgd2UncmUg bG9va2luZyBmb3IuCi0rICAgICAgICBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxl IEdEQiB0cmllZCB0byBmaW5kIGJ1dAotKyAgICAgICAgICAgICAgICAgIGNvdWxkbid0LiAgVGhp cyBpcyBub3Qgd2hlcmUgdGhlIGZpbGUgc2hvdWxkIGJlCi0rICAgICAgICAgICAgICAgICAgcGxh Y2VkIGlmIGZvdW5kLCBpbiBmYWN0LCB0aGlzIGZpbGUgbWlnaHQgYWxyZWFkeQotKyAgICAgICAg ICAgICAgICAgIGV4aXN0IG9uIGRpc2sgYnV0IGhhdmUgdGhlIHdyb25nIGJ1aWxkLWlkLiAgVGhp cyBpcwotKyAgICAgICAgICAgICAgICAgIG1vc3RseSBwcm92aWRlZCBpbiBvcmRlciB0byBiZSB1 c2VkIGluIG1lc3NhZ2VzIHRvCi0rICAgICAgICAgICAgICAgICAgdGhlIHVzZXIuCi0rCi0rICAg IFJldHVybnM6Ci0rICAgICAgICBOb25lOiBObyBvYmpmaWxlIGNvdWxkIGJlIGZvdW5kIGZvciB0 aGlzIGJ1aWxkLWlkLgotKyAgICAgICAgRmFsc2U6IEEgaGFuZGxlciBoYXMgZG9uZSBhbGwgaXQg Y2FuIHdpdGggZm9yIHRoaXMgYnVpbGQtaWQsCi0rICAgICAgICAgICAgICAgYnV0IG5vIG9iamZp bGUgY291bGQgYmUgZm91bmQuCi0rICAgICAgICBUcnVlOiBBbiBvYmpmaWxlIG1pZ2h0IGhhdmUg YmVlbiBpbnN0YWxsZWQgYnkgYSBoYW5kbGVyLCBHREIKLSsgICAgICAgICAgICAgIHNob3VsZCBj aGVjayBhZ2Fpbi4gIFRoZSBvbmx5IHBsYWNlIEdEQiBjaGVja3MgaXMgd2l0aGluCi0rICAgICAg ICAgICAgICB0aGUgLmJ1aWxkLWlkIHN1Yi1kaXJlY3Rvcnkgd2l0aGluIHRoZQotKyAgICAgICAg ICAgICAgZGVidWctZmlsZS1kaXJlY3RvcnkuICBJZiB0aGUgcmVxdWlyZWQgZmlsZSB3YXMgbm90 Ci0rICAgICAgICAgICAgICBpbnN0YWxsZWQgdGhlcmUgdGhlbiBHREIgd2lsbCBub3QgZmluZCBp dC4KLSsgICAgICAgIEEgc3RyaW5nOiBUaGlzIGlzIHRoZSBmaWxlbmFtZSBvZiBhIGZpbGUgY29u dGFpbmluZyB0aGUKLSsgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9iamZpbGUuCi0rICAgICIi IgotKwotKyAgICByZXR1cm4gX2hhbmRsZV9taXNzaW5nX2ZpbGVzKAotKyAgICAgICAgcHNwYWNl LCAib2JqZmlsZSIsIGxhbWJkYSBoOiBoKHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpCi0rICAg ICkKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2RlYnVn LnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weQotc2ltaWxh cml0eSBpbmRleCA1NCUKLXJlbmFtZSBmcm9tIGdkYi9weXRob24vbGliL2dkYi9jb21tYW5kL21p c3NpbmdfZGVidWcucHkKLXJlbmFtZSB0byBnZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNz aW5nX2ZpbGVzLnB5Ci0tLS0gYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2Rl YnVnLnB5Ci0rKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2ZpbGVzLnB5 Ci1AQCAtMSw0ICsxLDQgQEAKLS0jIE1pc3NpbmcgZGVidWcgcmVsYXRlZCBjb21tYW5kcy4KLSsj IE1pc3NpbmcgZGVidWcgYW5kIG9iamZpbGUgcmVsYXRlZCBjb21tYW5kcy4KLSAjCi0gIyBDb3B5 cmlnaHQgMjAyMy0yMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICMKLUBAIC0y MSw3ICsyMSw3IEBAIGltcG9ydCBnZGIKLSAKLSAKLSBkZWYgdmFsaWRhdGVfcmVnZXhwKGV4cCwg aWRzdHJpbmcpOgotLSAgICAiIiJDb21waWxlIGV4cCBpbnRvIGEgY29tcGlsZXIgcmVndWxhciBl eHByZXNzaW9uIG9iamVjdC4KLSsgICAgIiIiQ29tcGlsZSBleHAgaW50byBhIGNvbXBpbGVkIHJl Z3VsYXIgZXhwcmVzc2lvbiBvYmplY3QuCi0gCi0gICAgIEFyZ3VtZW50czoKLSAgICAgICAgIGV4 cDogVGhlIHN0cmluZyB0byBjb21waWxlIGludG8gYSByZS5QYXR0ZXJuIG9iamVjdC4KLUBAIC0z MywxNCArMzMsMTUgQEAgZGVmIHZhbGlkYXRlX3JlZ2V4cChleHAsIGlkc3RyaW5nKToKLSAgICAg UmFpc2VzOgotICAgICAgICAgU3ludGF4RXJyb3I6IElmIGV4cCBpcyBhbiBpbnZhbGlkIHJlZ2V4 cC4KLSAgICAgIiIiCi0rCi0gICAgIHRyeToKLSAgICAgICAgIHJldHVybiByZS5jb21waWxlKGV4 cCkKLSAgICAgZXhjZXB0IFN5bnRheEVycm9yOgotICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3Io IkludmFsaWQgJXMgcmVnZXhwOiAlcy4iICUgKGlkc3RyaW5nLCBleHApKQotIAotIAotLWRlZiBw YXJzZV9taXNzaW5nX2RlYnVnX2NvbW1hbmRfYXJncyhhcmcpOgotLSAgICAiIiJJbnRlcm5hbCB1 dGlsaXR5IHRvIHBhcnNlIG1pc3NpbmcgZGVidWcgaGFuZGxlciBjb21tYW5kIGFyZ3YuCi0rZGVm IHBhcnNlX21pc3NpbmdfZmlsZV9jb21tYW5kX2FyZ3MoYXJnKToKLSsgICAgIiIiSW50ZXJuYWwg dXRpbGl0eSB0byBwYXJzZSBtaXNzaW5nIGZpbGUgaGFuZGxlciBjb21tYW5kIGFyZ3YuCi0gCi0g ICAgIEFyZ3VtZW50czoKLSAgICAgICAgIGFyZzogVGhlIGFyZ3VtZW50cyB0byB0aGUgY29tbWFu ZC4gVGhlIGZvcm1hdCBpczoKLUBAIC01Miw2ICs1Myw3IEBAIGRlZiBwYXJzZV9taXNzaW5nX2Rl YnVnX2NvbW1hbmRfYXJncyhhcmcpOgotICAgICBSYWlzZXM6Ci0gICAgICAgICBTeW50YXhFcnJv cjogYW4gZXJyb3IgcHJvY2Vzc2luZyBBUkcKLSAgICAgIiIiCi0rCi0gICAgIGFyZ3YgPSBnZGIu c3RyaW5nX3RvX2FyZ3YoYXJnKQotICAgICBhcmdjID0gbGVuKGFyZ3YpCi0gICAgIGlmIGFyZ2Mg PiAyOgotQEAgLTY4LDEwICs3MCwxMCBAQCBkZWYgcGFyc2VfbWlzc2luZ19kZWJ1Z19jb21tYW5k X2FyZ3MoYXJnKToKLSAgICAgKQotIAotIAotLWNsYXNzIEluZm9NaXNzaW5nRGVidWdIYW5kZXJz KGdkYi5Db21tYW5kKToKLS0gICAgIiIiR0RCIGNvbW1hbmQgdG8gbGlzdCBtaXNzaW5nIGRlYnVn IGhhbmRsZXJzLgotK2NsYXNzIEluZm9NaXNzaW5nRmlsZUhhbmRsZXJzKGdkYi5Db21tYW5kKToK LSsgICAgIiIiR0RCIGNvbW1hbmQgdG8gbGlzdCBtaXNzaW5nIEhUWVBFIGhhbmRsZXJzLgotIAot LSAgICBVc2FnZTogaW5mbyBtaXNzaW5nLWRlYnVnLWhhbmRsZXJzIFtMT0NVUy1SRUdFWFAgW05B TUUtUkVHRVhQXV0KLSsgICAgVXNhZ2U6IGluZm8gbWlzc2luZy1IVFlQRS1oYW5kbGVycyBbTE9D VVMtUkVHRVhQIFtOQU1FLVJFR0VYUF1dCi0gCi0gICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3Vs YXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhlCi0gICAgIGhhbmRsZXIu ICBJZiBpdCBpcyBvbWl0dGVkLCBhbGwgcmVnaXN0ZXJlZCBoYW5kbGVycyBmcm9tIGFsbAotQEAg LTc5LDM4ICs4MSw0NyBAQCBjbGFzcyBJbmZvTWlzc2luZ0RlYnVnSGFuZGVycyhnZGIuQ29tbWFu ZCk6Ci0gICAgIHRoZSBoYW5kbGVycyBmcm9tIHRoZSBjdXJyZW50IHByb2dzcGFjZSwgb3IgYSBy ZWd1bGFyIGV4cHJlc3Npb24KLSAgICAgbWF0Y2hpbmcgZmlsZW5hbWVzIG9mIHByb2dzcGFjZXMu Ci0gCi0tICAgIE5BTUUtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBt aXNzaW5nIGRlYnVnCi0rICAgIE5BTUUtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRv IGZpbHRlciBtaXNzaW5nIEhUWVBFCi0gICAgIGhhbmRsZXIgbmFtZXMuICBJZiB0aGlzIG9taXR0 ZWQgZm9yIGEgc3BlY2lmaWVkIGxvY3VzLCB0aGVuIGFsbAotICAgICByZWdpc3RlcmVkIGhhbmRs ZXJzIGluIHRoZSBsb2N1cyBhcmUgbGlzdGVkLgotICAgICAiIiIKLSAKLS0gICAgZGVmIF9faW5p dF9fKHNlbGYpOgotLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiaW5mbyBtaXNzaW5nLWRlYnVn LWhhbmRsZXJzIiwgZ2RiLkNPTU1BTkRfRklMRVMpCi0rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBo YW5kbGVyX3R5cGUpOgotKyAgICAgICAgIyBVcGRhdGUgdGhlIGRvYyBzdHJpbmcgYmVmb3JlIGNh bGxpbmcgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciwKLSsgICAgICAgICMgcmVwbGFjaW5nIHRoZSBz dHJpbmcgJ0hUWVBFJyB3aXRoIHRoZSB2YWx1ZSBvZiBIQU5ETEVSX1RZUEUuCi0rICAgICAgICAj IFRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2lsbCBncmFiIGEgY29weSBvZiB0aGlzIHN0cmluZyB0 bwotKyAgICAgICAgIyB1c2UgYXMgdGhlIGNvbW1hbmRzIGhlbHAgdGV4dC4KLSsgICAgICAgIHNl bGYuX19kb2NfXyA9IHNlbGYuX19kb2NfXy5yZXBsYWNlKCJIVFlQRSIsIGhhbmRsZXJfdHlwZSkK LSsgICAgICAgIHN1cGVyKCkuX19pbml0X18oCi0rICAgICAgICAgICAgImluZm8gbWlzc2luZy0i ICsgaGFuZGxlcl90eXBlICsgIi1oYW5kbGVycyIsIGdkYi5DT01NQU5EX0ZJTEVTCi0rICAgICAg ICApCi0rICAgICAgICBzZWxmLmhhbmRsZXJfdHlwZSA9IGhhbmRsZXJfdHlwZQotIAotICAgICBk ZWYgbGlzdF9oYW5kbGVycyhzZWxmLCB0aXRsZSwgaGFuZGxlcnMsIG5hbWVfcmUpOgotLSAgICAg ICAgIiIiTGlzdHMgdGhlIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMgd2hvc2UgbmFtZSBtYXRjaGVz IHJlZ2V4cC4KLSsgICAgICAgICIiIkxpc3RzIHRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMgd2hv c2UgbmFtZSBtYXRjaGVzIHJlZ2V4cC4KLSAKLSAgICAgICAgIEFyZ3VtZW50czoKLSAgICAgICAg ICAgICB0aXRsZTogVGhlIGxpbmUgdG8gcHJpbnQgYmVmb3JlIHRoZSBsaXN0LgotLSAgICAgICAg ICAgIGhhbmRsZXJzOiBUaGUgbGlzdCBvZiB0aGUgbWlzc2luZyBkZWJ1ZyBoYW5kbGVycy4KLSsg ICAgICAgICAgICBoYW5kbGVyczogVGhlIGxpc3Qgb2YgdGhlIG1pc3NpbmcgZmlsZSBoYW5kbGVy cy4KLSAgICAgICAgICAgICBuYW1lX3JlOiBoYW5kbGVyIG5hbWUgZmlsdGVyLgotICAgICAgICAg IiIiCi0rCi0gICAgICAgICBpZiBub3QgaGFuZGxlcnM6Ci0gICAgICAgICAgICAgcmV0dXJuCi0g ICAgICAgICBwcmludCh0aXRsZSkKLS0gICAgICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgot KyAgICAgICAgZm9yIGhhbmRsZXIgaW4gZ2RiLl9maWx0ZXJfbWlzc2luZ19maWxlX2hhbmRsZXJz KGhhbmRsZXJzLCBzZWxmLmhhbmRsZXJfdHlwZSk6Ci0gICAgICAgICAgICAgaWYgbmFtZV9yZS5t YXRjaChoYW5kbGVyLm5hbWUpOgotICAgICAgICAgICAgICAgICBwcmludCgKLSAgICAgICAgICAg ICAgICAgICAgICIgICVzJXMiICUgKGhhbmRsZXIubmFtZSwgIiIgaWYgaGFuZGxlci5lbmFibGVk IGVsc2UgIiBbZGlzYWJsZWRdIikKLSAgICAgICAgICAgICAgICAgKQotIAotICAgICBkZWYgaW52 b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgotLSAgICAgICAgbG9jdXNfcmUsIG5hbWVfcmUgPSBw YXJzZV9taXNzaW5nX2RlYnVnX2NvbW1hbmRfYXJncyhhcmcpCi0rICAgICAgICBsb2N1c19yZSwg bmFtZV9yZSA9IHBhcnNlX21pc3NpbmdfZmlsZV9jb21tYW5kX2FyZ3MoYXJnKQotIAotICAgICAg ICAgaWYgbG9jdXNfcmUubWF0Y2goInByb2dzcGFjZSIpIGFuZCBsb2N1c19yZS5wYXR0ZXJuICE9 ICIiOgotICAgICAgICAgICAgIGNwID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkKLSAgICAgICAg ICAgICBzZWxmLmxpc3RfaGFuZGxlcnMoCi0tICAgICAgICAgICAgICAgICJQcm9nc3BhY2UgJXM6 IiAlIGNwLmZpbGVuYW1lLCBjcC5taXNzaW5nX2RlYnVnX2hhbmRsZXJzLCBuYW1lX3JlCi0rICAg ICAgICAgICAgICAgICJQcm9nc3BhY2UgJXM6IiAlIGNwLmZpbGVuYW1lLCBjcC5taXNzaW5nX2Zp bGVfaGFuZGxlcnMsIG5hbWVfcmUKLSAgICAgICAgICAgICApCi0gCi0gICAgICAgICBmb3IgcHJv Z3NwYWNlIGluIGdkYi5wcm9nc3BhY2VzKCk6Ci1AQCAtMTI1LDU4ICsxMzYsNzEgQEAgY2xhc3Mg SW5mb01pc3NpbmdEZWJ1Z0hhbmRlcnMoZ2RiLkNvbW1hbmQpOgotICAgICAgICAgICAgICAgICAg ICAgbXNnID0gIlByb2dzcGFjZSAlczoiICUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgc2Vs Zi5saXN0X2hhbmRsZXJzKAotICAgICAgICAgICAgICAgICAgICAgbXNnLAotLSAgICAgICAgICAg ICAgICAgICAgcHJvZ3NwYWNlLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMsCi0rICAgICAgICAgICAg ICAgICAgICBwcm9nc3BhY2UubWlzc2luZ19maWxlX2hhbmRsZXJzLAotICAgICAgICAgICAgICAg ICAgICAgbmFtZV9yZSwKLSAgICAgICAgICAgICAgICAgKQotIAotICAgICAgICAgIyBQcmludCBn bG9iYWwgaGFuZGxlcnMgbGFzdCwgYXMgdGhlc2UgYXJlIGludm9rZWQgbGFzdC4KLSAgICAgICAg IGlmIGxvY3VzX3JlLm1hdGNoKCJnbG9iYWwiKToKLS0gICAgICAgICAgICBzZWxmLmxpc3RfaGFu ZGxlcnMoIkdsb2JhbDoiLCBnZGIubWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZSkKLSsg ICAgICAgICAgICBzZWxmLmxpc3RfaGFuZGxlcnMoIkdsb2JhbDoiLCBnZGIubWlzc2luZ19maWxl X2hhbmRsZXJzLCBuYW1lX3JlKQotIAotIAotLWRlZiBkb19lbmFibGVfaGFuZGxlcjEoaGFuZGxl cnMsIG5hbWVfcmUsIGZsYWcpOgotLSAgICAiIiJFbmFibGUvZGlzYWJsZSBtaXNzaW5nIGRlYnVn IGhhbmRsZXJzIHdob3NlIG5hbWVzIG1hdGNoIGdpdmVuIHJlZ2V4LgotK2RlZiBkb19lbmFibGVf aGFuZGxlcjEoaGFuZGxlcnMsIG5hbWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICIi IkVuYWJsZS9kaXNhYmxlIG1pc3NpbmcgZmlsZSBoYW5kbGVycyB3aG9zZSBuYW1lcyBtYXRjaCBn aXZlbiByZWdleC4KLSAKLSAgICAgQXJndW1lbnRzOgotLSAgICAgICAgaGFuZGxlcnM6IFRoZSBs aXN0IG9mIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMuCi0rICAgICAgICBoYW5kbGVyczogVGhlIGxp c3Qgb2YgbWlzc2luZyBmaWxlIGhhbmRsZXJzLgotICAgICAgICAgbmFtZV9yZTogSGFuZGxlciBu YW1lIGZpbHRlci4KLSAgICAgICAgIGZsYWc6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNo b3VsZCBlbmFibGUgb3IgZGlzYWJsZS4KLSsgICAgICAgIGhhbmRsZXJfdHlwZTogQSBzdHJpbmcs IGVpdGhlciAnZGVidWcnIG9yICdvYmpmaWxlJywgdXNlIHRvIGNvbnRyb2wKLSsgICAgICAgICAg ICB3aGljaCBoYW5kbGVycyBhcmUgbW9kaWZpZWQuCi0gCi0gICAgIFJldHVybnM6Ci0gICAgICAg ICBUaGUgbnVtYmVyIG9mIGhhbmRsZXJzIGFmZmVjdGVkLgotICAgICAiIiIKLSsKLSAgICAgdG90 YWwgPSAwCi0tICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgotKyAgICBmb3IgaGFuZGxlciBp biBnZGIuX2ZpbHRlcl9taXNzaW5nX2ZpbGVfaGFuZGxlcnMoaGFuZGxlcnMsIGhhbmRsZXJfdHlw ZSk6Ci0gICAgICAgICBpZiBuYW1lX3JlLm1hdGNoKGhhbmRsZXIubmFtZSkgYW5kIGhhbmRsZXIu ZW5hYmxlZCAhPSBmbGFnOgotICAgICAgICAgICAgIGhhbmRsZXIuZW5hYmxlZCA9IGZsYWcKLSAg ICAgICAgICAgICB0b3RhbCArPSAxCi0gICAgIHJldHVybiB0b3RhbAotIAotIAotLWRlZiBkb19l bmFibGVfaGFuZGxlcihhcmcsIGZsYWcpOgotLSAgICAiIiJFbmFibGUgb3IgZGlzYWJsZSBtaXNz aW5nIGRlYnVnIGhhbmRsZXJzLiIiIgotLSAgICAobG9jdXNfcmUsIG5hbWVfcmUpID0gcGFyc2Vf bWlzc2luZ19kZWJ1Z19jb21tYW5kX2FyZ3MoYXJnKQotK2RlZiBkb19lbmFibGVfaGFuZGxlcihh cmcsIGZsYWcsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICIiIkVuYWJsZSBvciBkaXNhYmxlIG1pc3Np bmcgZmlsZSBoYW5kbGVycy4iIiIKLSsKLSsgICAgKGxvY3VzX3JlLCBuYW1lX3JlKSA9IHBhcnNl X21pc3NpbmdfZmlsZV9jb21tYW5kX2FyZ3MoYXJnKQotICAgICB0b3RhbCA9IDAKLSAgICAgaWYg bG9jdXNfcmUubWF0Y2goImdsb2JhbCIpOgotLSAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX2hh bmRsZXIxKGdkYi5taXNzaW5nX2RlYnVnX2hhbmRsZXJzLCBuYW1lX3JlLCBmbGFnKQotKyAgICAg ICAgdG90YWwgKz0gZG9fZW5hYmxlX2hhbmRsZXIxKAotKyAgICAgICAgICAgIGdkYi5taXNzaW5n X2ZpbGVfaGFuZGxlcnMsIG5hbWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZQotKyAgICAgICAgKQot ICAgICBpZiBsb2N1c19yZS5tYXRjaCgicHJvZ3NwYWNlIikgYW5kIGxvY3VzX3JlLnBhdHRlcm4g IT0gIiI6Ci0gICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfaGFuZGxlcjEoCi0tICAgICAgICAg ICAgZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkubWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9y ZSwgZmxhZwotKyAgICAgICAgICAgIGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLm1pc3NpbmdfZmls ZV9oYW5kbGVycywgbmFtZV9yZSwgZmxhZywgaGFuZGxlcl90eXBlCi0gICAgICAgICApCi0gICAg IGZvciBwcm9nc3BhY2UgaW4gZ2RiLnByb2dzcGFjZXMoKToKLSAgICAgICAgIGZpbGVuYW1lID0g cHJvZ3NwYWNlLmZpbGVuYW1lIG9yICIiCi0gICAgICAgICBpZiBsb2N1c19yZS5tYXRjaChmaWxl bmFtZSk6Ci0tICAgICAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX2hhbmRsZXIxKHByb2dzcGFj ZS5taXNzaW5nX2RlYnVnX2hhbmRsZXJzLCBuYW1lX3JlLCBmbGFnKQotKyAgICAgICAgICAgIHRv dGFsICs9IGRvX2VuYWJsZV9oYW5kbGVyMSgKLSsgICAgICAgICAgICAgICAgcHJvZ3NwYWNlLm1p c3NpbmdfZmlsZV9oYW5kbGVycywgbmFtZV9yZSwgZmxhZywgaGFuZGxlcl90eXBlCi0rICAgICAg ICAgICAgKQotICAgICBwcmludCgKLS0gICAgICAgICIlZCBtaXNzaW5nIGRlYnVnIGhhbmRsZXIl cyAlcyIKLS0gICAgICAgICUgKHRvdGFsLCAiIiBpZiB0b3RhbCA9PSAxIGVsc2UgInMiLCAiZW5h YmxlZCIgaWYgZmxhZyBlbHNlICJkaXNhYmxlZCIpCi0rICAgICAgICAiJWQgbWlzc2luZyAlcyBo YW5kbGVyJXMgJXMiCi0rICAgICAgICAlICgKLSsgICAgICAgICAgICB0b3RhbCwKLSsgICAgICAg ICAgICBoYW5kbGVyX3R5cGUsCi0rICAgICAgICAgICAgIiIgaWYgdG90YWwgPT0gMSBlbHNlICJz IiwKLSsgICAgICAgICAgICAiZW5hYmxlZCIgaWYgZmxhZyBlbHNlICJkaXNhYmxlZCIsCi0rICAg ICAgICApCi0gICAgICkKLSAKLSAKLS1jbGFzcyBFbmFibGVNaXNzaW5nRGVidWdIYW5kbGVyKGdk Yi5Db21tYW5kKToKLS0gICAgIiIiR0RCIGNvbW1hbmQgdG8gZW5hYmxlIG1pc3NpbmcgZGVidWcg aGFuZGxlcnMuCi0rY2xhc3MgRW5hYmxlTWlzc2luZ0ZpbGVIYW5kbGVyKGdkYi5Db21tYW5kKToK LSsgICAgIiIiR0RCIGNvbW1hbmQgdG8gZW5hYmxlIG1pc3NpbmcgSFRZUEUgaGFuZGxlcnMuCi0g Ci0tICAgIFVzYWdlOiBlbmFibGUgbWlzc2luZy1kZWJ1Zy1oYW5kbGVyIFtMT0NVUy1SRUdFWFAg W05BTUUtUkVHRVhQXV0KLSsgICAgVXNhZ2U6IGVuYWJsZSBtaXNzaW5nLUhUWVBFLWhhbmRsZXIg W0xPQ1VTLVJFR0VYUCBbTkFNRS1SRUdFWFBdXQotIAotICAgICBMT0NVUy1SRUdFWFAgaXMgYSBy ZWd1bGFyIGV4cHJlc3Npb24gc3BlY2lmeWluZyB0aGUgaGFuZGxlcnMgdG8KLSAgICAgZW5hYmxl LiAgSXQgY2FuIGJlICdnbG9iYWwnLCAncHJvZ3NwYWNlJyBmb3IgdGhlIGN1cnJlbnQKLUBAIC0x ODcsMTggKzIxMSwyNiBAQCBjbGFzcyBFbmFibGVNaXNzaW5nRGVidWdIYW5kbGVyKGdkYi5Db21t YW5kKToKLSAgICAgaW4gdGhlIGxvY3VzIGFyZSBhZmZlY3RlZC4KLSAgICAgIiIiCi0gCi0tICAg IGRlZiBfX2luaXRfXyhzZWxmKToKLS0gICAgICAgIHN1cGVyKCkuX19pbml0X18oImVuYWJsZSBt aXNzaW5nLWRlYnVnLWhhbmRsZXIiLCBnZGIuQ09NTUFORF9GSUxFUykKLSsgICAgZGVmIF9faW5p dF9fKHNlbGYsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICAgICAjIFVwZGF0ZSB0aGUgZG9jIHN0cmlu ZyBiZWZvcmUgY2FsbGluZyB0aGUgcGFyZW50IGNvbnN0cnVjdG9yLAotKyAgICAgICAgIyByZXBs YWNpbmcgdGhlIHN0cmluZyAnSFRZUEUnIHdpdGggdGhlIHZhbHVlIG9mIEhBTkRMRVJfVFlQRS4K LSsgICAgICAgICMgVGhlIHBhcmVudCBjb25zdHJ1Y3RvciB3aWxsIGdyYWIgYSBjb3B5IG9mIHRo aXMgc3RyaW5nIHRvCi0rICAgICAgICAjIHVzZSBhcyB0aGUgY29tbWFuZHMgaGVscCB0ZXh0Lgot KyAgICAgICAgc2VsZi5fX2RvY19fID0gc2VsZi5fX2RvY19fLnJlcGxhY2UoIkhUWVBFIiwgaGFu ZGxlcl90eXBlKQotKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygKLSsgICAgICAgICAgICAiZW5h YmxlIG1pc3NpbmctIiArIGhhbmRsZXJfdHlwZSArICItaGFuZGxlciIsIGdkYi5DT01NQU5EX0ZJ TEVTCi0rICAgICAgICApCi0rICAgICAgICBzZWxmLmhhbmRsZXJfdHlwZSA9IGhhbmRsZXJfdHlw ZQotIAotICAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgotICAgICAgICAgIiIi R0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29tbWFuZC4iIiIKLS0gICAgICAgIGRvX2Vu YWJsZV9oYW5kbGVyKGFyZywgVHJ1ZSkKLSsgICAgICAgIGRvX2VuYWJsZV9oYW5kbGVyKGFyZywg VHJ1ZSwgc2VsZi5oYW5kbGVyX3R5cGUpCi0gCi0gCi0tY2xhc3MgRGlzYWJsZU1pc3NpbmdEZWJ1 Z0hhbmRsZXIoZ2RiLkNvbW1hbmQpOgotLSAgICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIG1p c3NpbmcgZGVidWcgaGFuZGxlcnMuCi0rY2xhc3MgRGlzYWJsZU1pc3NpbmdGaWxlSGFuZGxlcihn ZGIuQ29tbWFuZCk6Ci0rICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2FibGUgbWlzc2luZyBIVFlQ RSBoYW5kbGVycy4KLSAKLS0gICAgVXNhZ2U6IGRpc2FibGUgbWlzc2luZy1kZWJ1Zy1oYW5kbGVy IFtMT0NVUy1SRUdFWFAgW05BTUUtUkVHRVhQXV0KLSsgICAgVXNhZ2U6IGRpc2FibGUgbWlzc2lu Zy1IVFlQRS1oYW5kbGVyIFtMT0NVUy1SRUdFWFAgW05BTUUtUkVHRVhQXV0KLSAKLSAgICAgTE9D VVMtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHNwZWNpZnlpbmcgdGhlIGhhbmRsZXJz IHRvCi0gICAgIGVuYWJsZS4gIEl0IGNhbiBiZSAnZ2xvYmFsJywgJ3Byb2dzcGFjZScgZm9yIHRo ZSBjdXJyZW50Ci1AQCAtMjA5LDE5ICsyNDEsMjggQEAgY2xhc3MgRGlzYWJsZU1pc3NpbmdEZWJ1 Z0hhbmRsZXIoZ2RiLkNvbW1hbmQpOgotICAgICBpbiB0aGUgbG9jdXMgYXJlIGFmZmVjdGVkLgot ICAgICAiIiIKLSAKLS0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotLSAgICAgICAgc3VwZXIoKS5f X2luaXRfXygiZGlzYWJsZSBtaXNzaW5nLWRlYnVnLWhhbmRsZXIiLCBnZGIuQ09NTUFORF9GSUxF UykKLSsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICAgICAjIFVw ZGF0ZSB0aGUgZG9jIHN0cmluZyBiZWZvcmUgY2FsbGluZyB0aGUgcGFyZW50IGNvbnN0cnVjdG9y LAotKyAgICAgICAgIyByZXBsYWNpbmcgdGhlIHN0cmluZyAnSFRZUEUnIHdpdGggdGhlIHZhbHVl IG9mIEhBTkRMRVJfVFlQRS4KLSsgICAgICAgICMgVGhlIHBhcmVudCBjb25zdHJ1Y3RvciB3aWxs IGdyYWIgYSBjb3B5IG9mIHRoaXMgc3RyaW5nIHRvCi0rICAgICAgICAjIHVzZSBhcyB0aGUgY29t bWFuZHMgaGVscCB0ZXh0LgotKyAgICAgICAgc2VsZi5fX2RvY19fID0gc2VsZi5fX2RvY19fLnJl cGxhY2UoIkhUWVBFIiwgaGFuZGxlcl90eXBlKQotKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygK LSsgICAgICAgICAgICAiZGlzYWJsZSBtaXNzaW5nLSIgKyBoYW5kbGVyX3R5cGUgKyAiLWhhbmRs ZXIiLCBnZGIuQ09NTUFORF9GSUxFUwotKyAgICAgICAgKQotKyAgICAgICAgc2VsZi5oYW5kbGVy X3R5cGUgPSBoYW5kbGVyX3R5cGUKLSAKLSAgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21f dHR5KToKLSAgICAgICAgICIiIkdEQiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQu IiIiCi0tICAgICAgICBkb19lbmFibGVfaGFuZGxlcihhcmcsIEZhbHNlKQotKyAgICAgICAgZG9f ZW5hYmxlX2hhbmRsZXIoYXJnLCBGYWxzZSwgc2VsZi5oYW5kbGVyX3R5cGUpCi0gCi0gCi0tZGVm IHJlZ2lzdGVyX21pc3NpbmdfZGVidWdfaGFuZGxlcl9jb21tYW5kcygpOgotLSAgICAiIiJJbnN0 YWxscyB0aGUgbWlzc2luZyBkZWJ1ZyBoYW5kbGVyIGNvbW1hbmRzLiIiIgotLSAgICBJbmZvTWlz c2luZ0RlYnVnSGFuZGVycygpCi0tICAgIEVuYWJsZU1pc3NpbmdEZWJ1Z0hhbmRsZXIoKQotLSAg ICBEaXNhYmxlTWlzc2luZ0RlYnVnSGFuZGxlcigpCi0rZGVmIHJlZ2lzdGVyX21pc3NpbmdfZmls ZV9oYW5kbGVyX2NvbW1hbmRzKCk6Ci0rICAgICIiIkluc3RhbGxzIHRoZSBtaXNzaW5nIGZpbGUg aGFuZGxlciBjb21tYW5kcy4iIiIKLSsgICAgZm9yIGhhbmRsZXJfdHlwZSBpbiBbImRlYnVnIiwg Im9iamZpbGUiXToKLSsgICAgICAgIEluZm9NaXNzaW5nRmlsZUhhbmRsZXJzKGhhbmRsZXJfdHlw ZSkKLSsgICAgICAgIEVuYWJsZU1pc3NpbmdGaWxlSGFuZGxlcihoYW5kbGVyX3R5cGUpCi0rICAg ICAgICBEaXNhYmxlTWlzc2luZ0ZpbGVIYW5kbGVyKGhhbmRsZXJfdHlwZSkKLSAKLSAKLS1yZWdp c3Rlcl9taXNzaW5nX2RlYnVnX2hhbmRsZXJfY29tbWFuZHMoKQotK3JlZ2lzdGVyX21pc3Npbmdf ZmlsZV9oYW5kbGVyX2NvbW1hbmRzKCkKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIv bWlzc2luZ19kZWJ1Zy5weSBiL2dkYi9weXRob24vbGliL2dkYi9taXNzaW5nX2RlYnVnLnB5Ci0t LS0gYS9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19kZWJ1Zy5weQotKysrIGIvZ2RiL3B5dGhv bi9saWIvZ2RiL21pc3NpbmdfZGVidWcucHkKLUBAIC0xNyw0OCArMTcsMTEgQEAKLSBNaXNzaW5n RGVidWdIYW5kbGVyIGJhc2UgY2xhc3MsIGFuZCByZWdpc3Rlcl9oYW5kbGVyIGZ1bmN0aW9uLgot ICIiIgotIAotLWltcG9ydCBzeXMKLS0KLSBpbXBvcnQgZ2RiCi0rZnJvbSBnZGIubWlzc2luZ19m aWxlcyBpbXBvcnQgTWlzc2luZ0ZpbGVIYW5kbGVyCi0gCi0taWYgc3lzLnZlcnNpb25faW5mbyA+ PSAoMywgNyk6Ci0tICAgICMgRnVuY3Rpb25zIHN0ci5pc2FzY2lpKCkgYW5kIHN0ci5pc2FsbnVt IGFyZSBhdmFpbGFibGUgc3RhcnRpbmcgUHl0aG9uCi0tICAgICMgMy43LgotLSAgICBkZWYgaXNh c2NpaShjaCk6Ci0tICAgICAgICByZXR1cm4gY2guaXNhc2NpaSgpCi0tCi0tICAgIGRlZiBpc2Fs bnVtKGNoKToKLS0gICAgICAgIHJldHVybiBjaC5pc2FsbnVtKCkKLS0KLS1lbHNlOgotLSAgICAj IEZhbGwgYmFjayB0byBjdXJzZXMuYXNjaWkuaXNhc2NpaSgpIGFuZCBjdXJzZXMuYXNjaWkuaXNh bG51bSgpIGZvcgotLSAgICAjIGVhcmxpZXIgdmVyc2lvbnMuCi0tICAgIGZyb20gY3Vyc2VzLmFz Y2lpIGltcG9ydCBpc2FsbnVtLCBpc2FzY2lpCi0tCi0tCi0tZGVmIF92YWxpZGF0ZV9uYW1lKG5h bWUpOgotLSAgICAiIiJWYWxpZGF0ZSBhIG1pc3NpbmcgZGVidWcgaGFuZGxlciBuYW1lIHN0cmlu Zy4KLS0KLS0gICAgSWYgbmFtZSBpcyB2YWxpZCBhcyBhIG1pc3NpbmcgZGVidWcgaGFuZGxlciBu YW1lLCB0aGVuIHRoaXMKLS0gICAgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiAgSWYgbmFtZSBpcyBu b3QgdmFsaWQgdGhlbiBhbiBleGNlcHRpb24gaXMKLS0gICAgcmFpc2VkLgotLQotLSAgICBBcmd1 bWVudHM6Ci0tICAgICAgICBuYW1lOiBBIHN0cmluZywgdGhlIG5hbWUgb2YgYSBtaXNzaW5nIGRl YnVnIGhhbmRsZXIuCi0tCi0tICAgIFJldHVybnM6Ci0tICAgICAgICBOb3RoaW5nLgotIAotLSAg ICBSYWlzZXM6Ci0tICAgICAgICBWYWx1ZUVycm9yOiBJZiBuYW1lIGlzIGludmFsaWQgYXMgYSBt aXNzaW5nIGRlYnVnIGhhbmRsZXIKLS0gICAgICAgICAgICAgICAgICAgIG5hbWUuCi0tICAgICIi IgotLSAgICBmb3IgY2ggaW4gbmFtZToKLS0gICAgICAgIGlmIG5vdCBpc2FzY2lpKGNoKSBvciBu b3QgKGlzYWxudW0oY2gpIG9yIGNoIGluICJfLSIpOgotLSAgICAgICAgICAgIHJhaXNlIFZhbHVl RXJyb3IoImludmFsaWQgY2hhcmFjdGVyICclcycgaW4gaGFuZGxlciBuYW1lOiAlcyIgJSAoY2gs IG5hbWUpKQotLQotLQotLWNsYXNzIE1pc3NpbmdEZWJ1Z0hhbmRsZXIob2JqZWN0KToKLStjbGFz cyBNaXNzaW5nRGVidWdIYW5kbGVyKE1pc3NpbmdGaWxlSGFuZGxlcik6Ci0gICAgICIiIkJhc2Ug Y2xhc3MgZm9yIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMgd3JpdHRlbiBpbiBQeXRob24uCi0gCi0g ICAgIEEgbWlzc2luZyBkZWJ1ZyBoYW5kbGVyIGhhcyBhIHNpbmdsZSBtZXRob2QgX19jYWxsX18g YWxvbmcgd2l0aAotQEAgLTY5LDQxICszMiw4IEBAIGNsYXNzIE1pc3NpbmdEZWJ1Z0hhbmRsZXIo b2JqZWN0KToKLSAgICAgICAgIGVuYWJsZWQ6IFdoZW4gdHJ1ZSB0aGlzIGhhbmRsZXIgaXMgZW5h YmxlZC4KLSAgICAgIiIiCi0gCi0tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLS0gICAg ICAgICIiIkNvbnN0cnVjdG9yLgotLQotLSAgICAgICAgQXJnczoKLS0gICAgICAgICAgICBuYW1l OiBBbiBpZGVudGlmeWluZyBuYW1lIGZvciB0aGlzIGhhbmRsZXIuCi0tCi0tICAgICAgICBSYWlz ZXM6Ci0tICAgICAgICAgICAgVHlwZUVycm9yOiBuYW1lIGlzIG5vdCBhIHN0cmluZy4KLS0gICAg ICAgICAgICBWYWx1ZUVycm9yOiBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4KLS0g ICAgICAgICIiIgotLQotLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLS0g ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZvciBuYW1lOiAlcyIg JSB0eXBlKG5hbWUpKQotLQotLSAgICAgICAgX3ZhbGlkYXRlX25hbWUobmFtZSkKLS0KLS0gICAg ICAgIHNlbGYuX25hbWUgPSBuYW1lCi0tICAgICAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZQotLQot LSAgICBAcHJvcGVydHkKLS0gICAgZGVmIG5hbWUoc2VsZik6Ci0tICAgICAgICByZXR1cm4gc2Vs Zi5fbmFtZQotLQotLSAgICBAcHJvcGVydHkKLS0gICAgZGVmIGVuYWJsZWQoc2VsZik6Ci0tICAg ICAgICByZXR1cm4gc2VsZi5fZW5hYmxlZAotLQotLSAgICBAZW5hYmxlZC5zZXR0ZXIKLS0gICAg ZGVmIGVuYWJsZWQoc2VsZiwgdmFsdWUpOgotLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFs dWUsIGJvb2wpOgotLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW5jb3JyZWN0IHR5cGUg Zm9yIGVuYWJsZWQgYXR0cmlidXRlOiAlcyIgJSB0eXBlKHZhbHVlKSkKLS0gICAgICAgIHNlbGYu X2VuYWJsZWQgPSB2YWx1ZQotLQotICAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqZmlsZSk6Ci0t ICAgICAgICAiIiJHREIgaGFuZGxlIG1pc3NpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIGFuIG9i amZpbGUuCi0rICAgICAgICAiIiJIYW5kbGUgbWlzc2luZyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3Ig YW4gb2JqZmlsZS4KLSAKLSAgICAgICAgIEFyZ3VtZW50czoKLSAgICAgICAgICAgICBvYmpmaWxl OiBBIGdkYi5PYmpmaWxlIGZvciB3aGljaCBHREIgY291bGQgbm90IGZpbmQgYW55Ci1AQCAtMTI0 LDYyICs1NCw1IEBAIGNsYXNzIE1pc3NpbmdEZWJ1Z0hhbmRsZXIob2JqZWN0KToKLSAKLSAKLSBk ZWYgcmVnaXN0ZXJfaGFuZGxlcihsb2N1cywgaGFuZGxlciwgcmVwbGFjZT1GYWxzZSk6Ci0tICAg ICIiIlJlZ2lzdGVyIGhhbmRsZXIgaW4gZ2l2ZW4gbG9jdXMuCi0tCi0tICAgIFRoZSBoYW5kbGVy IGlzIHByZXBlbmRlZCB0byB0aGUgbG9jdXMncyBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzCi0tICAg IGxpc3QuIFRoZSBuYW1lIG9mIGhhbmRsZXIgc2hvdWxkIGJlIHVuaXF1ZSAob3IgcmVwbGFjZSBt dXN0IGJlCi0tICAgIFRydWUpLgotLQotLSAgICBBcmd1bWVudHM6Ci0tICAgICAgICBsb2N1czog RWl0aGVyIGEgcHJvZ3NwYWNlLCBvciBOb25lIChpbiB3aGljaCBjYXNlIHRoZSB1bndpbmRlcgot LSAgICAgICAgICAgICAgIGlzIHJlZ2lzdGVyZWQgZ2xvYmFsbHkpLgotLSAgICAgICAgaGFuZGxl cjogQW4gb2JqZWN0IG9mIGEgZ2RiLk1pc3NpbmdEZWJ1Z0hhbmRsZXIgc3ViY2xhc3MuCi0tCi0t ICAgICAgICByZXBsYWNlOiBJZiBUcnVlLCByZXBsYWNlcyBleGlzdGluZyBoYW5kbGVyIHdpdGgg dGhlIHNhbWUgbmFtZQotLSAgICAgICAgICAgICAgICAgd2l0aGluIGxvY3VzLiAgT3RoZXJ3aXNl LCByYWlzZXMgUnVudGltZUV4Y2VwdGlvbiBpZgotLSAgICAgICAgICAgICAgICAgdW53aW5kZXIg d2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgotLQotLSAgICBSZXR1cm5zOgotLSAg ICAgICAgTm90aGluZy4KLS0KLS0gICAgUmFpc2VzOgotLSAgICAgICAgUnVudGltZUVycm9yOiBU aGUgbmFtZSBvZiBoYW5kbGVyIGlzIG5vdCB1bmlxdWUuCi0tICAgICAgICBUeXBlRXJyb3I6IEJh ZCBsb2N1cyB0eXBlLgotLSAgICAgICAgQXR0cmlidXRlRXJyb3I6IFJlcXVpcmVkIGF0dHJpYnV0 ZXMgb2YgaGFuZGxlciBhcmUgbWlzc2luZy4KLS0gICAgIiIiCi0tCi0tICAgIGlmIGxvY3VzIGlz IE5vbmU6Ci0tICAgICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJib3NlIik6Ci0tICAgICAgICAg ICAgZ2RiLndyaXRlKCJSZWdpc3RlcmluZyBnbG9iYWwgJXMgaGFuZGxlciAuLi5cbiIgJSBoYW5k bGVyLm5hbWUpCi0tICAgICAgICBsb2N1cyA9IGdkYgotLSAgICBlbGlmIGlzaW5zdGFuY2UobG9j dXMsIGdkYi5Qcm9nc3BhY2UpOgotLSAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIp OgotLSAgICAgICAgICAgIGdkYi53cml0ZSgKLS0gICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5n ICVzIGhhbmRsZXIgZm9yICVzIC4uLlxuIiAlIChoYW5kbGVyLm5hbWUsIGxvY3VzLmZpbGVuYW1l KQotLSAgICAgICAgICAgICkKLS0gICAgZWxzZToKLS0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigi bG9jdXMgc2hvdWxkIGJlIGdkYi5Qcm9nc3BhY2Ugb3IgTm9uZSIpCi0tCi0tICAgICMgU29tZSBz YW5pdHkgY2hlY2tzIG9uIEhBTkRMRVIuICBDYWxsaW5nIGdldGF0dHIgd2lsbCByYWlzZSBhbgot LSAgICAjIGV4Y2VwdGlvbiBpZiB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QsIHdoaWNoIGlz IHdoYXQgd2Ugd2FudC4KLS0gICAgIyBUaGVzZSBjaGVja3MgYXJlIG5vdCBleGhhdXN0aXZlOyB3 ZSBkb24ndCBjaGVjayB0aGUgYXR0cmlidXRlcwotLSAgICAjIGhhdmUgdGhlIGNvcnJlY3QgdHlw ZXMsIG9yIHRoZSBtZXRob2QgaGFzIHRoZSBjb3JyZWN0IHNpZ25hdHVyZSwKLS0gICAgIyBidXQg dGhpcyBzaG91bGQgY2F0Y2ggc29tZSBiYXNpYyBtaXN0YWtlcy4KLS0gICAgZ2V0YXR0cihoYW5k bGVyLCAibmFtZSIpCi0tICAgIGdldGF0dHIoaGFuZGxlciwgImVuYWJsZWQiKQotLSAgICBjYWxs X21ldGhvZCA9IGdldGF0dHIoaGFuZGxlciwgIl9fY2FsbF9fIikKLS0gICAgaWYgbm90IGNhbGxh YmxlKGNhbGxfbWV0aG9kKToKLS0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAotLSAgICAg ICAgICAgICInJXMnIG9iamVjdCdzICdfX2NhbGxfXycgYXR0cmlidXRlIGlzIG5vdCBjYWxsYWJs ZSIKLS0gICAgICAgICAgICAlIHR5cGUoaGFuZGxlcikuX19uYW1lX18KLS0gICAgICAgICkKLS0K LS0gICAgaSA9IDAKLS0gICAgZm9yIG5lZWRsZSBpbiBsb2N1cy5taXNzaW5nX2RlYnVnX2hhbmRs ZXJzOgotLSAgICAgICAgaWYgbmVlZGxlLm5hbWUgPT0gaGFuZGxlci5uYW1lOgotLSAgICAgICAg ICAgIGlmIHJlcGxhY2U6Ci0tICAgICAgICAgICAgICAgIGRlbCBsb2N1cy5taXNzaW5nX2RlYnVn X2hhbmRsZXJzW2ldCi0tICAgICAgICAgICAgZWxzZToKLS0gICAgICAgICAgICAgICAgcmFpc2Ug UnVudGltZUVycm9yKCJIYW5kbGVyICVzIGFscmVhZHkgZXhpc3RzLiIgJSBoYW5kbGVyLm5hbWUp Ci0tICAgICAgICBpICs9IDEKLS0gICAgbG9jdXMubWlzc2luZ19kZWJ1Z19oYW5kbGVycy5pbnNl cnQoMCwgaGFuZGxlcikKLSsgICAgIiIiU2VlIGdkYi5taXNzaW5nX2ZpbGVzLnJlZ2lzdGVyX2hh bmRsZXIuIiIiCi0rICAgIGdkYi5taXNzaW5nX2ZpbGVzLnJlZ2lzdGVyX2hhbmRsZXIoImRlYnVn IiwgbG9jdXMsIGhhbmRsZXIsIHJlcGxhY2UpCi1kaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIv Z2RiL21pc3NpbmdfZmlsZXMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19maWxlcy5w eQotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi9weXRob24v bGliL2dkYi9taXNzaW5nX2ZpbGVzLnB5Ci1AQCAtMCwwICsxLDIwNCBAQAotKyMgQ29weXJpZ2h0 IChDKSAyMDIzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotKyIiIgotK01pc3NpbmdGaWxlSGFuZGxlciBiYXNl IGNsYXNzLCBhbmQgc3VwcG9ydCBmdW5jdGlvbnMgdXNlZCBieSB0aGUKLSttaXNzaW5nX2RlYnVn LnB5IGFuZCBtaXNzaW5nX29iamZpbGUucHkgbW9kdWxlcy4KLSsiIiIKLSsKLStpbXBvcnQgc3lz Ci0rCi0raW1wb3J0IGdkYgotKwotK2lmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDcpOgotKyAg ICAjIEZ1bmN0aW9ucyBzdHIuaXNhc2NpaSgpIGFuZCBzdHIuaXNhbG51bSBhcmUgYXZhaWxhYmxl IHN0YXJ0aW5nIFB5dGhvbgotKyAgICAjIDMuNy4KLSsgICAgZGVmIGlzYXNjaWkoY2gpOgotKyAg ICAgICAgcmV0dXJuIGNoLmlzYXNjaWkoKQotKwotKyAgICBkZWYgaXNhbG51bShjaCk6Ci0rICAg ICAgICByZXR1cm4gY2guaXNhbG51bSgpCi0rCi0rZWxzZToKLSsgICAgIyBPbGRlciB2ZXJzaW9u IG9mIFB5dGhvbiBkb2Vzbid0IGhhdmUgc3RyLmlzYXNjaWkoKSBhbmQKLSsgICAgIyBzdHIuaXNh bG51bSgpIHNvIHByb3ZpZGUgb3VyIG93bi4KLSsgICAgIwotKyAgICAjIFdlIGNvdWxkIGltcG9y dCBpc2FsbnVtKCkgYW5kIGlzYXNjaWkoKSBmcm9tIHRoZSBjdXJzZXMgbGlicmFyeSwKLSsgICAg IyBidXQgdGhhdCBhZGRzIGFuIGV4dHJhIGRlcGVuZGVuY3kuICBHaXZlbiB0aGVzZSBmdW5jdGlv bnMgYXJlCi0rICAgICMgYm90aCBzbWFsbCBhbmQgdHJpdmlhbCBsZXRzIGltcGxlbWVudCB0aGVt IGhlcmUuCi0rICAgICMKLSsgICAgIyBUaGVzZSBkZWZpbml0aW9ucyBhcmUgYmFzZWQgb24gdGhv c2UgaW4gdGhlIGN1cnNlcyBsaWJyYXJ5LCBidXQKLSsgICAgIyBzaW1wbGlmaWVkIGFzIHdlIGtu b3cgQyB3aWxsIGFsd2F5cyBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgJ3N0cicuCi0rCi0rICAgIGRl ZiBpc2RpZ2l0KGMpOgotKyAgICAgICAgcmV0dXJuIDQ4IDw9IG9yZChjKSA8PSA1NwotKwotKyAg ICBkZWYgaXNsb3dlcihjKToKLSsgICAgICAgIHJldHVybiA5NyA8PSBvcmQoYykgPD0gMTIyCi0r Ci0rICAgIGRlZiBpc3VwcGVyKGMpOgotKyAgICAgICAgcmV0dXJuIDY1IDw9IG9yZChjKSA8PSA5 MAotKwotKyAgICBkZWYgaXNhbHBoYShjKToKLSsgICAgICAgIHJldHVybiBpc3VwcGVyKGMpIG9y IGlzbG93ZXIoYykKLSsKLSsgICAgZGVmIGlzYWxudW0oYyk6Ci0rICAgICAgICByZXR1cm4gaXNh bHBoYShjKSBvciBpc2RpZ2l0KGMpCi0rCi0rICAgIGRlZiBpc2FzY2lpKGMpOgotKyAgICAgICAg cmV0dXJuIDAgPD0gb3JkKGMpIDw9IDEyNwotKwotKwotK2RlZiBfdmFsaWRhdGVfbmFtZShuYW1l KToKLSsgICAgIiIiVmFsaWRhdGUgYSBtaXNzaW5nIGZpbGUgaGFuZGxlciBuYW1lIHN0cmluZy4K LSsKLSsgICAgSWYgbmFtZSBpcyB2YWxpZCBhcyBhIG1pc3NpbmcgZmlsZSBoYW5kbGVyIG5hbWUs IHRoZW4gdGhpcwotKyAgICBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuICBJZiBuYW1lIGlzIG5vdCB2 YWxpZCB0aGVuIGFuIGV4Y2VwdGlvbiBpcwotKyAgICByYWlzZWQuCi0rCi0rICAgIEFyZ3VtZW50 czoKLSsgICAgICAgIG5hbWU6IEEgc3RyaW5nLCB0aGUgbmFtZSBvZiBhIG1pc3NpbmcgZmlsZSBo YW5kbGVyLgotKwotKyAgICBSZXR1cm5zOgotKyAgICAgICAgTm90aGluZy4KLSsKLSsgICAgUmFp c2VzOgotKyAgICAgICAgVmFsdWVFcnJvcjogSWYgbmFtZSBpcyBpbnZhbGlkIGFzIGEgbWlzc2lu ZyBmaWxlIGhhbmRsZXIKLSsgICAgICAgICAgICAgICAgICAgIG5hbWUuCi0rICAgICIiIgotKwot KyAgICBmb3IgY2ggaW4gbmFtZToKLSsgICAgICAgIGlmIG5vdCBpc2FzY2lpKGNoKSBvciBub3Qg KGlzYWxudW0oY2gpIG9yIGNoIGluICJfLSIpOgotKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy b3IoImludmFsaWQgY2hhcmFjdGVyICclcycgaW4gaGFuZGxlciBuYW1lOiAlcyIgJSAoY2gsIG5h bWUpKQotKwotKwotK2NsYXNzIE1pc3NpbmdGaWxlSGFuZGxlcihvYmplY3QpOgotKyAgICAiIiJC YXNlIGNsYXNzIGZvciBtaXNzaW5nIGZpbGUgaGFuZGxlcnMgd3JpdHRlbiBpbiBQeXRob24uCi0r Ci0rICAgIEEgbWlzc2luZyBmaWxlIGhhbmRsZXIgaGFzIGEgc2luZ2xlIG1ldGhvZCBfX2NhbGxf XyBhbG9uZyB3aXRoIHRoZQotKyAgICByZWFkL3dyaXRlIGF0dHJpYnV0ZSBlbmFibGVkLCBhbmQg YSByZWFkLW9ubHkgYXR0cmlidXRlIG5hbWUuICBUaGUKLSsgICAgYXR0cmlidXRlcyBhcmUgcHJv dmlkZWQgYnkgdGhpcyBjbGFzcyB3aGlsZSB0aGUgX19jYWxsX18gbWV0aG9kIGlzCi0rICAgIHBy b3ZpZGVkIGJ5IGEgc3ViLWNsYXNzLiAgRWFjaCBzdWItY2xhc3NlcyBfX2NhbGxfXyBtZXRob2Qg d2lsbAotKyAgICBoYXZlIGEgZGlmZmVyZW50IHNpZ25hdHVyZS4KLSsKLSsgICAgQXR0cmlidXRl czoKLSsgICAgICAgIG5hbWU6IFJlYWQtb25seSBhdHRyaWJ1dGUsIHRoZSBuYW1lIG9mIHRoaXMg aGFuZGxlci4KLSsgICAgICAgIGVuYWJsZWQ6IFdoZW4gdHJ1ZSB0aGlzIGhhbmRsZXIgaXMgZW5h YmxlZC4KLSsgICAgIiIiCi0rCi0rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSsgICAg ICAgICIiIkNvbnN0cnVjdG9yLgotKwotKyAgICAgICAgQXJnczoKLSsgICAgICAgICAgICBuYW1l OiBBbiBpZGVudGlmeWluZyBuYW1lIGZvciB0aGlzIGhhbmRsZXIuCi0rCi0rICAgICAgICBSYWlz ZXM6Ci0rICAgICAgICAgICAgVHlwZUVycm9yOiBuYW1lIGlzIG5vdCBhIHN0cmluZy4KLSsgICAg ICAgICAgICBWYWx1ZUVycm9yOiBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4KLSsg ICAgICAgICIiIgotKwotKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLSsg ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZvciBuYW1lOiAlcyIg JSB0eXBlKG5hbWUpKQotKwotKyAgICAgICAgX3ZhbGlkYXRlX25hbWUobmFtZSkKLSsKLSsgICAg ICAgIHNlbGYuX25hbWUgPSBuYW1lCi0rICAgICAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZQotKwot KyAgICBAcHJvcGVydHkKLSsgICAgZGVmIG5hbWUoc2VsZik6Ci0rICAgICAgICByZXR1cm4gc2Vs Zi5fbmFtZQotKwotKyAgICBAcHJvcGVydHkKLSsgICAgZGVmIGVuYWJsZWQoc2VsZik6Ci0rICAg ICAgICByZXR1cm4gc2VsZi5fZW5hYmxlZAotKwotKyAgICBAZW5hYmxlZC5zZXR0ZXIKLSsgICAg ZGVmIGVuYWJsZWQoc2VsZiwgdmFsdWUpOgotKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFs dWUsIGJvb2wpOgotKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW5jb3JyZWN0IHR5cGUg Zm9yIGVuYWJsZWQgYXR0cmlidXRlOiAlcyIgJSB0eXBlKHZhbHVlKSkKLSsgICAgICAgIHNlbGYu X2VuYWJsZWQgPSB2YWx1ZQotKwotKwotK2RlZiByZWdpc3Rlcl9oYW5kbGVyKGhhbmRsZXJfdHlw ZSwgbG9jdXMsIGhhbmRsZXIsIHJlcGxhY2U9RmFsc2UpOgotKyAgICAiIiJSZWdpc3RlciBoYW5k bGVyIGluIGdpdmVuIGxvY3VzLgotKwotKyAgICBUaGUgaGFuZGxlciBpcyBwcmVwZW5kZWQgdG8g dGhlIGxvY3VzJ3MgbWlzc2luZyBmaWxlIGhhbmRsZXJzCi0rICAgIGxpc3QuIFRoZSBuYW1lIG9m IGhhbmRsZXIgc2hvdWxkIGJlIHVuaXF1ZSAob3IgcmVwbGFjZSBtdXN0IGJlCi0rICAgIFRydWUp LCBhbmQgdGhlIG5hbWUgbXVzdCBwYXNzIHRoZSBfdmFsaWRhdGVfbmFtZSBjaGVjay4KLSsKLSsg ICAgQXJndW1lbnRzOgotKyAgICAgICAgaGFuZGxlcl90eXBlOiBBIHN0cmluZywgZWl0aGVyICdk ZWJ1Zycgb3IgJ29iamZpbGUnIGluZGljYXRpbmcgdGhlCi0rICAgICAgICAgICAgdHlwZSBvZiBo YW5kbGVyIHRvIGJlIHJlZ2lzdGVyZWQuCi0rICAgICAgICBsb2N1czogRWl0aGVyIGEgcHJvZ3Nw YWNlLCBvciBOb25lIChpbiB3aGljaCBjYXNlIHRoZSB1bndpbmRlcgotKyAgICAgICAgICAgICAg IGlzIHJlZ2lzdGVyZWQgZ2xvYmFsbHkpLgotKyAgICAgICAgaGFuZGxlcjogQW4gb2JqZWN0IHVz ZWQgYXMgYSBtaXNzaW5nIGZpbGUgaGFuZGxlci4gIFVzdWFsbHkgYQotKyAgICAgICAgICAgIHN1 Yi1jbGFzcyBvZiBNaXNzaW5nRmlsZUhhbmRsZXIuCi0rICAgICAgICByZXBsYWNlOiBJZiBUcnVl LCByZXBsYWNlcyBleGlzdGluZyBoYW5kbGVyIHdpdGggdGhlIHNhbWUgbmFtZQotKyAgICAgICAg ICAgICAgICAgd2l0aGluIGxvY3VzLiAgT3RoZXJ3aXNlLCByYWlzZXMgUnVudGltZUV4Y2VwdGlv biBpZgotKyAgICAgICAgICAgICAgICAgdW53aW5kZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVh ZHkgZXhpc3RzLgotKwotKyAgICBSZXR1cm5zOgotKyAgICAgICAgTm90aGluZy4KLSsKLSsgICAg UmFpc2VzOgotKyAgICAgICAgUnVudGltZUVycm9yOiBUaGUgbmFtZSBvZiBoYW5kbGVyIGlzIG5v dCB1bmlxdWUuCi0rICAgICAgICBUeXBlRXJyb3I6IEJhZCBsb2N1cyB0eXBlLgotKyAgICAgICAg QXR0cmlidXRlRXJyb3I6IFJlcXVpcmVkIGF0dHJpYnV0ZXMgb2YgaGFuZGxlciBhcmUgbWlzc2lu Zy4KLSsgICAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSBuYW1lIG9mIHRoZSBoYW5kbGVyIGlzIGlu dmFsaWQsIG9yIGlmCi0rICAgICAgICAgICAgaGFuZGxlcl90eXBlIGlzIG5laXRoZXIgJ2RlYnVn JyBvciAnb2JqZmlsZScuCi0rICAgICIiIgotKwotKyAgICBpZiBoYW5kbGVyX3R5cGUgIT0gImRl YnVnIiBhbmQgaGFuZGxlcl90eXBlICE9ICJvYmpmaWxlIjoKLSsgICAgICAgIHJhaXNlIFZhbHVl RXJyb3IoImhhbmRsZXJfdHlwZSBtdXN0IGJlICdkZWJ1Zycgb3IgJ29iamZpbGUnIikKLSsKLSsg ICAgaWYgbG9jdXMgaXMgTm9uZToKLSsgICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJvc2Ui KToKLSsgICAgICAgICAgICBnZGIud3JpdGUoIlJlZ2lzdGVyaW5nIGdsb2JhbCAlcyBoYW5kbGVy IC4uLlxuIiAlIGhhbmRsZXIubmFtZSkKLSsgICAgICAgIGxvY3VzID0gZ2RiCi0rICAgIGVsaWYg aXNpbnN0YW5jZShsb2N1cywgZ2RiLlByb2dzcGFjZSk6Ci0rICAgICAgICBpZiBnZGIucGFyYW1l dGVyKCJ2ZXJib3NlIik6Ci0rICAgICAgICAgICAgZ2RiLndyaXRlKAotKyAgICAgICAgICAgICAg ICAiUmVnaXN0ZXJpbmcgJXMgaGFuZGxlciBmb3IgJXMgLi4uXG4iICUgKGhhbmRsZXIubmFtZSwg bG9jdXMuZmlsZW5hbWUpCi0rICAgICAgICAgICAgKQotKyAgICBlbHNlOgotKyAgICAgICAgcmFp c2UgVHlwZUVycm9yKCJsb2N1cyBzaG91bGQgYmUgZ2RiLlByb2dzcGFjZSBvciBOb25lIikKLSsK LSsgICAgIyBTb21lIHNhbml0eSBjaGVja3Mgb24gSEFORExFUi4gIENhbGxpbmcgZ2V0YXR0ciB3 aWxsIHJhaXNlIGFuCi0rICAgICMgZXhjZXB0aW9uIGlmIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBl eGlzdCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LgotKyAgICAjIFRoZXNlIGNoZWNrcyBhcmUgbm90 IGV4aGF1c3RpdmU7IHdlIGRvbid0IGNoZWNrIHRoZSBhdHRyaWJ1dGVzCi0rICAgICMgaGF2ZSB0 aGUgY29ycmVjdCB0eXBlcywgb3IgdGhlIG1ldGhvZCBoYXMgdGhlIGNvcnJlY3Qgc2lnbmF0dXJl LAotKyAgICAjIGJ1dCB0aGlzIHNob3VsZCBjYXRjaCBzb21lIGJhc2ljIG1pc3Rha2VzLgotKyAg ICBuYW1lID0gZ2V0YXR0cihoYW5kbGVyLCAibmFtZSIpCi0rICAgIF92YWxpZGF0ZV9uYW1lKG5h bWUpCi0rCi0rICAgIGdldGF0dHIoaGFuZGxlciwgImVuYWJsZWQiKQotKwotKyAgICBjYWxsX21l dGhvZCA9IGdldGF0dHIoaGFuZGxlciwgIl9fY2FsbF9fIikKLSsgICAgaWYgbm90IGNhbGxhYmxl KGNhbGxfbWV0aG9kKToKLSsgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAotKyAgICAgICAg ICAgICInJXMnIG9iamVjdCdzICdfX2NhbGxfXycgYXR0cmlidXRlIGlzIG5vdCBjYWxsYWJsZSIK LSsgICAgICAgICAgICAlIHR5cGUoaGFuZGxlcikuX19uYW1lX18KLSsgICAgICAgICkKLSsKLSsg ICAgaSA9IDAKLSsgICAgZm9yIG5lZWRsZSBpbiBsb2N1cy5taXNzaW5nX2ZpbGVfaGFuZGxlcnM6 Ci0rICAgICAgICBpZiBuZWVkbGVbMF0gPT0gaGFuZGxlcl90eXBlIGFuZCBuZWVkbGVbMV0ubmFt ZSA9PSBoYW5kbGVyLm5hbWU6Ci0rICAgICAgICAgICAgaWYgcmVwbGFjZToKLSsgICAgICAgICAg ICAgICAgZGVsIGxvY3VzLm1pc3NpbmdfZmlsZV9oYW5kbGVyc1tpXQotKyAgICAgICAgICAgIGVs c2U6Ci0rICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiSGFuZGxlciAlcyBhbHJl YWR5IGV4aXN0cy4iICUgaGFuZGxlci5uYW1lKQotKyAgICAgICAgaSArPSAxCi0rICAgIGxvY3Vz Lm1pc3NpbmdfZmlsZV9oYW5kbGVycy5pbnNlcnQoMCwgKGhhbmRsZXJfdHlwZSwgaGFuZGxlcikp Ci1kaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3Npbmdfb2JqZmlsZS5weSBiL2dk Yi9weXRob24vbGliL2dkYi9taXNzaW5nX29iamZpbGUucHkKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0 Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19vYmpmaWxl LnB5Ci1AQCAtMCwwICsxLDY3IEBACi0rIyBDb3B5cmlnaHQgKEMpIDIwMjQgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwot KyIiIgotK01pc3NpbmdPYmpmaWxlSGFuZGxlciBiYXNlIGNsYXNzLCBhbmQgcmVnaXN0ZXJfaGFu ZGxlciBmdW5jdGlvbi4KLSsiIiIKLSsKLStpbXBvcnQgZ2RiCi0rZnJvbSBnZGIubWlzc2luZ19m aWxlcyBpbXBvcnQgTWlzc2luZ0ZpbGVIYW5kbGVyCi0rCi0rCi0rY2xhc3MgTWlzc2luZ09iamZp bGVIYW5kbGVyKE1pc3NpbmdGaWxlSGFuZGxlcik6Ci0rICAgICIiIkJhc2UgY2xhc3MgZm9yIG1p c3Npbmcgb2JqZmlsZSBoYW5kbGVycyB3cml0dGVuIGluIFB5dGhvbi4KLSsKLSsgICAgQSBtaXNz aW5nIG9iamZpbGUgaGFuZGxlciBoYXMgYSBzaW5nbGUgbWV0aG9kIF9fY2FsbF9fIGFsb25nIHdp dGgKLSsgICAgdGhlIHJlYWQvd3JpdGUgYXR0cmlidXRlIGVuYWJsZWQsIGFuZCBhIHJlYWQtb25s eSBhdHRyaWJ1dGUgbmFtZS4KLSsKLSsgICAgQXR0cmlidXRlczoKLSsgICAgICAgIG5hbWU6IFJl YWQtb25seSBhdHRyaWJ1dGUsIHRoZSBuYW1lIG9mIHRoaXMgaGFuZGxlci4KLSsgICAgICAgIGVu YWJsZWQ6IFdoZW4gdHJ1ZSB0aGlzIGhhbmRsZXIgaXMgZW5hYmxlZC4KLSsgICAgIiIiCi0rCi0r ICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBidWlsZGlkLCBmaWxlbmFtZSk6Ci0rICAgICAgICAiIiJI YW5kbGUgYSBtaXNzaW5nIG9iamZpbGUgd2hlbiBHREIgY2FuIGtub3dzIHRoZSBidWlsZC1pZC4K LSsKLSsgICAgICAgIEFyZ3VtZW50czoKLSsKLSsgICAgICAgICAgICBidWlsZGlkOiBBIHN0cmlu ZyBjb250YWluaW5nIHRoZSBidWlsZC1pZCBmb3IgdGhlIG9iamZpbGUKLSsgICAgICAgICAgICAg ICAgR0RCIGlzIHNlYXJjaGluZyBmb3IuCi0rICAgICAgICAgICAgZmlsZW5hbWU6IEEgc3RyaW5n IGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgR0RCIGlzCi0rICAgICAgICAgICAgICAg IHNlYXJjaGluZyBmb3IuICBUaGlzIGlzIHByb3ZpZGVkIG9ubHkgZm9yIHRoZSBwdXJwb3NlCi0r ICAgICAgICAgICAgICAgIG9mIGNyZWF0aW5nIGRpYWdub3N0aWMgbWVzc2FnZXMuICBJZiB0aGUg ZmlsZSBpcyBmb3VuZAotKyAgICAgICAgICAgICAgICBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIHBs YWNlZCBoZXJlLCBhbmQgdGhpcyBmaWxlCi0rICAgICAgICAgICAgICAgIG1pZ2h0IGFscmVhZHkg ZXhpc3QgYnV0IEdEQiBoYXMgZGV0ZXJtaW5lZCBpdCBpcyBub3QKLSsgICAgICAgICAgICAgICAg c3VpdGFibGUgZm9yIHVzZSwgZS5nLiBpZiB0aGUgYnVpbGQtaWQgZG9lc24ndCBtYXRjaC4KLSsK LSsgICAgICAgIFJldHVybnM6Ci0rCi0rICAgICAgICAgICAgVHJ1ZTogR0RCIHNob3VsZCB0cnkg YWdhaW4gdG8gbG9jYXRlIHRoZSBtaXNzaW5nIG9iamZpbGUsCi0rICAgICAgICAgICAgICAgIHRo ZSBoYW5kbGVyIG1heSBoYXZlIGluc3RhbGxlZCB0aGUgbWlzc2luZyBmaWxlLgotKyAgICAgICAg ICAgIEZhbHNlOiBHREIgc2hvdWxkIG1vdmUgb24gd2l0aG91dCB0aGUgb2JqZmlsZS4gIFRoZQot KyAgICAgICAgICAgICAgICBoYW5kbGVyIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhpcyBvYmpmaWxl IGlzIG5vdAotKyAgICAgICAgICAgICAgICBhdmFpbGFibGUuCi0rICAgICAgICAgICAgQSBzdHJp bmc6IEdEQiBzaG91bGQgbG9hZCB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aDsgaXQKLSsgICAg ICAgICAgICAgICAgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBvYmpmaWxlLgotKyAgICAgICAgICAg IE5vbmU6IFRoaXMgaGFuZGxlciBjYW4ndCBoZWxwIHdpdGggdGhpcyBvYmpmaWxlLiAgR0RCCi0r ICAgICAgICAgICAgICAgIHNob3VsZCB0cnkgYW55IG90aGVyIHJlZ2lzdGVyZWQgaGFuZGxlcnMu Ci0rCi0rICAgICAgICAiIiIKLSsgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIk1p c3NpbmdPYmpmaWxlSGFuZGxlci5fX2NhbGxfXygpIikKLSsKLSsKLStkZWYgcmVnaXN0ZXJfaGFu ZGxlcihsb2N1cywgaGFuZGxlciwgcmVwbGFjZT1GYWxzZSk6Ci0rICAgICIiIlNlZSBnZGIubWlz c2luZ19maWxlcy5yZWdpc3Rlcl9oYW5kbGVyLiIiIgotKyAgICBnZGIubWlzc2luZ19maWxlcy5y ZWdpc3Rlcl9oYW5kbGVyKCJvYmpmaWxlIiwgbG9jdXMsIGhhbmRsZXIsIHJlcGxhY2UpCi1kaWZm IC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYyBiL2dkYi9weXRob24vcHktcHJvZ3Nw YWNlLmMKLS0tLSBhL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMKLSsrKyBiL2dkYi9weXRob24v cHktcHJvZ3NwYWNlLmMKLUBAIC01NSw4ICs1NSw4IEBAIHN0cnVjdCBwc3BhY2Vfb2JqZWN0Ci0g ICAvKiBUaGUgZGVidWcgbWV0aG9kIGxpc3QuICAqLwotICAgUHlPYmplY3QgKnhtZXRob2RzOwot IAotLSAgLyogVGhlIG1pc3NpbmcgZGVidWcgaGFuZGxlciBsaXN0LiAgKi8KLS0gIFB5T2JqZWN0 ICptaXNzaW5nX2RlYnVnX2hhbmRsZXJzOwotKyAgLyogVGhlIG1pc3NpbmcgZmlsZSBoYW5kbGVy IGxpc3QuICAqLwotKyAgUHlPYmplY3QgKm1pc3NpbmdfZmlsZV9oYW5kbGVyczsKLSB9OwotIAot IGV4dGVybiBQeVR5cGVPYmplY3QgcHNwYWNlX29iamVjdF90eXBlCi1AQCAtMTY2LDcgKzE2Niw3 IEBAIHBzcHlfZGVhbGxvYyAoUHlPYmplY3QgKnNlbGYpCi0gICBQeV9YREVDUkVGIChwc19zZWxm LT5mcmFtZV91bndpbmRlcnMpOwotICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+dHlwZV9wcmludGVy cyk7Ci0gICBQeV9YREVDUkVGIChwc19zZWxmLT54bWV0aG9kcyk7Ci0tICBQeV9YREVDUkVGIChw c19zZWxmLT5taXNzaW5nX2RlYnVnX2hhbmRsZXJzKTsKLSsgIFB5X1hERUNSRUYgKHBzX3NlbGYt Pm1pc3NpbmdfZmlsZV9oYW5kbGVycyk7Ci0gICBQeV9UWVBFIChzZWxmKS0+dHBfZnJlZSAoc2Vs Zik7Ci0gfQotIAotQEAgLTIwMiw4ICsyMDIsOCBAQCBwc3B5X2luaXRpYWxpemUgKHBzcGFjZV9v YmplY3QgKnNlbGYpCi0gICBpZiAoc2VsZi0+eG1ldGhvZHMgPT0gTlVMTCkKLSAgICAgcmV0dXJu IDA7Ci0gCi0tICBzZWxmLT5taXNzaW5nX2RlYnVnX2hhbmRsZXJzID0gUHlMaXN0X05ldyAoMCk7 Ci0tICBpZiAoc2VsZi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVycyA9PSBudWxscHRyKQotKyAgc2Vs Zi0+bWlzc2luZ19maWxlX2hhbmRsZXJzID0gUHlMaXN0X05ldyAoMCk7Ci0rICBpZiAoc2VsZi0+ bWlzc2luZ19maWxlX2hhbmRsZXJzID09IG51bGxwdHIpCi0gICAgIHJldHVybiAwOwotIAotICAg cmV0dXJuIDE7Ci1AQCAtMzQ5LDE4ICszNDksMTggQEAgcHNweV9nZXRfeG1ldGhvZHMgKFB5T2Jq ZWN0ICpvLCB2b2lkICppZ25vcmUpCi0gLyogUmV0dXJuIHRoZSBsaXN0IG9mIG1pc3NpbmcgZGVi dWcgaGFuZGxlcnMgZm9yIHRoaXMgcHJvZ3JhbSBzcGFjZS4gICovCi0gCi0gc3RhdGljIFB5T2Jq ZWN0ICoKLS1wc3B5X2dldF9taXNzaW5nX2RlYnVnX2hhbmRsZXJzIChQeU9iamVjdCAqbywgdm9p ZCAqaWdub3JlKQotK3BzcHlfZ2V0X21pc3NpbmdfZmlsZV9oYW5kbGVycyAoUHlPYmplY3QgKm8s IHZvaWQgKmlnbm9yZSkKLSB7Ci0gICBwc3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmpl Y3QgKikgbzsKLSAKLS0gIFB5X0lOQ1JFRiAoc2VsZi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVycyk7 Ci0tICByZXR1cm4gc2VsZi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVyczsKLSsgIFB5X0lOQ1JFRiAo c2VsZi0+bWlzc2luZ19maWxlX2hhbmRsZXJzKTsKLSsgIHJldHVybiBzZWxmLT5taXNzaW5nX2Zp bGVfaGFuZGxlcnM7Ci0gfQotIAotIC8qIFNldCB0aGlzIHByb2dyYW0gc3BhY2UncyBsaXN0IG9m IG1pc3NpbmcgZGVidWcgaGFuZGxlcnMgdG8gSEFORExFUlMuICAqLwotIAotIHN0YXRpYyBpbnQK LS1wc3B5X3NldF9taXNzaW5nX2RlYnVnX2hhbmRsZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3Qg KmhhbmRsZXJzLAotK3BzcHlfc2V0X21pc3NpbmdfZmlsZV9oYW5kbGVycyAoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICpoYW5kbGVycywKLSAJCQkJIHZvaWQgKmlnbm9yZSkKLSB7Ci0gICBwc3BhY2Vf b2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3QgKikgbzsKLUBAIC0zODAsOSArMzgwLDkgQEAg cHNweV9zZXRfbWlzc2luZ19kZWJ1Z19oYW5kbGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpo YW5kbGVycywKLSAgICAgfQotIAotICAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQg UkhTIGFyZSByZWxhdGVkIHNvbWVob3cuICAqLwotLSAgZ2RicHlfcmVmPD4gdG1wIChzZWxmLT5t aXNzaW5nX2RlYnVnX2hhbmRsZXJzKTsKLSsgIGdkYnB5X3JlZjw+IHRtcCAoc2VsZi0+bWlzc2lu Z19maWxlX2hhbmRsZXJzKTsKLSAgIFB5X0lOQ1JFRiAoaGFuZGxlcnMpOwotLSAgc2VsZi0+bWlz c2luZ19kZWJ1Z19oYW5kbGVycyA9IGhhbmRsZXJzOwotKyAgc2VsZi0+bWlzc2luZ19maWxlX2hh bmRsZXJzID0gaGFuZGxlcnM7Ci0gCi0gICByZXR1cm4gMDsKLSB9Ci1AQCAtNzc5LDggKzc3OSw4 IEBAIHN0YXRpYyBnZGJfUHlHZXRTZXREZWYgcHNwYWNlX2dldHNldFtdID0KLSAgICAgIlR5cGUg cHJpbnRlcnMuIiwgTlVMTCB9LAotICAgeyAieG1ldGhvZHMiLCBwc3B5X2dldF94bWV0aG9kcywg TlVMTCwKLSAgICAgIkRlYnVnIG1ldGhvZHMuIiwgTlVMTCB9LAotLSAgeyAibWlzc2luZ19kZWJ1 Z19oYW5kbGVycyIsIHBzcHlfZ2V0X21pc3NpbmdfZGVidWdfaGFuZGxlcnMsCi0tICAgIHBzcHlf c2V0X21pc3NpbmdfZGVidWdfaGFuZGxlcnMsICJNaXNzaW5nIGRlYnVnIGhhbmRsZXJzLiIsIE5V TEwgfSwKLSsgIHsgIm1pc3NpbmdfZmlsZV9oYW5kbGVycyIsIHBzcHlfZ2V0X21pc3NpbmdfZmls ZV9oYW5kbGVycywKLSsgICAgcHNweV9zZXRfbWlzc2luZ19maWxlX2hhbmRsZXJzLCAiTWlzc2lu ZyBmaWxlIGhhbmRsZXJzLiIsIE5VTEwgfSwKLSAgIHsgTlVMTCB9Ci0gfTsKLSAKLWRpZmYgLS1n aXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5jIGIvZ2RiL3B5dGhvbi9weXRob24uYwotLS0tIGEvZ2Ri L3B5dGhvbi9weXRob24uYwotKysrIGIvZ2RiL3B5dGhvbi9weXRob24uYwotQEAgLTM1LDYgKzM1 LDcgQEAKLSAjaW5jbHVkZSAibG9jYXRpb24uaCIKLSAjaW5jbHVkZSAicnVuLW9uLW1haW4tdGhy ZWFkLmgiCi0gI2luY2x1ZGUgIm9ic2VydmFibGUuaCIKLSsjaW5jbHVkZSAiYnVpbGQtaWQuaCIK LSAKLSAjaWYgR0RCX1NFTEZfVEVTVAotICNpbmNsdWRlICJnZGJzdXBwb3J0L3NlbGZ0ZXN0Lmgi Ci1AQCAtMTI4LDggKzEyOSwxMSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4g Z2RicHlfY29sb3JpemUKLSAgIChjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUsIGNvbnN0IHN0 ZDo6c3RyaW5nICZjb250ZW50cyk7Ci0gc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+ IGdkYnB5X2NvbG9yaXplX2Rpc2FzbQotIChjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgZ2Ri YXJjaCAqZ2RiYXJjaCk7Ci0tc3RhdGljIGV4dF9sYW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3Vs dCBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8KLStzdGF0aWMgZXh0X2xhbmdfbWlzc2lu Z19maWxlX3Jlc3VsdCBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8KLSAgIChjb25zdCBz dHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsIHN0cnVjdCBvYmpmaWxlICpv YmpmaWxlKTsKLStzdGF0aWMgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCBnZGJweV9maW5k X29iamZpbGVfZnJvbV9idWlsZGlkCi0rICAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFn ZV9kZWZuICpleHRsYW5nLCBwcm9ncmFtX3NwYWNlICpwc3BhY2UsCi0rICAgY29uc3Qgc3RydWN0 IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQsIGNvbnN0IGNoYXIgKm1pc3NpbmdfZmlsZW5hbWUpOwot IAotIC8qIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBnZGIgcHJvcGVyIGFuZCBsb2FkaW5nIG9mIHB5 dGhvbiBzY3JpcHRzLiAgKi8KLSAKLUBAIC0xNzcsNyArMTgxLDggQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2Vfb3BzIHB5dGhvbl9leHRlbnNpb25fb3BzID0KLSAKLSAg IGdkYnB5X3ByaW50X2luc24sCi0gCi0tICBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8K LSsgIGdkYnB5X2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbywKLSsgIGdkYnB5X2ZpbmRfb2JqZmls ZV9mcm9tX2J1aWxkaWQKLSB9OwotIAotICNlbmRpZiAvKiBIQVZFX1BZVEhPTiAqLwotQEAgLTE3 NjEsMTAgKzE3NjYsMTAgQEAgZ2RicHlfZ2V0X2N1cnJlbnRfb2JqZmlsZSAoUHlPYmplY3QgKnVu dXNlZDEsIFB5T2JqZWN0ICp1bnVzZWQyKQotIC8qIEltcGxlbWVudCB0aGUgJ2hhbmRsZV9taXNz aW5nX2RlYnVnaW5mbycgaG9vayBmb3IgUHl0aG9uLiAgR0RCIGhhcwotICAgIGZhaWxlZCB0byBm aW5kIGFueSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgT0JKRklMRS4gIFRoZSBleHRlbnNpb24gaGFz IGEKLSAgICBjaGFuY2UgdG8gcmVjb3JkIHRoaXMsIG9yIGV2ZW4gaW5zdGFsbCB0aGUgcmVxdWly ZWQgZGVidWcgaW5mb3JtYXRpb24uCi0tICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBleHRfbGFu Z19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgaW4KLS0gICBleHRlbnNpb24tcHJpdi5oIGZvciBk ZXRhaWxzIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLwotKyAgIFNlZSB0aGUgZGVzY3JpcHRpb24g b2YgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCBpbiBleHRlbnNpb24tcHJpdi5oCi0rICAg Zm9yIGRldGFpbHMgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCi0gCi0tc3RhdGljIGV4dF9sYW5n X21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdAotK3N0YXRpYyBleHRfbGFuZ19taXNzaW5nX2ZpbGVf cmVzdWx0Ci0gZ2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvIChjb25zdCBzdHJ1Y3QgZXh0 ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsCi0gCQkJCXN0cnVjdCBvYmpmaWxlICpvYmpm aWxlKQotIHsKLUBAIC0xODEyLDcgKzE4MTcsNyBAQCBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1 Z2luZm8gKGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKLSAg IGlmIChQeUJvb2xfQ2hlY2sgKHB5b19leGVjdXRlX3JldC5nZXQgKCkpKQotICAgICB7Ci0gICAg ICAgYm9vbCB0cnlfYWdhaW4gPSBQeU9iamVjdF9Jc1RydWUgKHB5b19leGVjdXRlX3JldC5nZXQg KCkpOwotLSAgICAgIHJldHVybiBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgKHRy eV9hZ2Fpbik7Ci0rICAgICAgcmV0dXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgKHRy eV9hZ2Fpbik7Ci0gICAgIH0KLSAKLSAgIGlmICghZ2RicHlfaXNfc3RyaW5nIChweW9fZXhlY3V0 ZV9yZXQuZ2V0ICgpKSkKLUBAIC0xODMyLDcgKzE4MzcsMTA4IEBAIGdkYnB5X2hhbmRsZV9taXNz aW5nX2RlYnVnaW5mbyAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRs YW5nLAotICAgICAgIHJldHVybiB7fTsKLSAgICAgfQotIAotLSAgcmV0dXJuIGV4dF9sYW5nX21p c3NpbmdfZGVidWdpbmZvX3Jlc3VsdCAoc3RkOjpzdHJpbmcgKGZpbGVuYW1lLmdldCAoKSkpOwot KyAgcmV0dXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgKHN0ZDo6c3RyaW5nIChmaWxl bmFtZS5nZXQgKCkpKTsKLSt9Ci0rCi0rLyogSW1wbGVtZW50IHRoZSBmaW5kX29iamZpbGVfZnJv bV9idWlsZGlkIGhvb2sgZm9yIFB5dGhvbi4gIFBTUEFDRSBpcyB0aGUKLSsgICBwcm9ncmFtIHNw YWNlIGluIHdoaWNoIEdEQiBpcyB0cnlpbmcgdG8gZmluZCBhbiBvYmpmaWxlLCBCVUlMRF9JRCBp cyB0aGUKLSsgICBidWlsZC1pZCBmb3IgdGhlIG1pc3Npbmcgb2JqZmlsZSwgYW5kIEVYUEVDVEVE X0ZJTEVOQU1FIGlzIGEgbm9uLU5VTEwKLSsgICBzdHJpbmcgd2hpY2ggY2FuIGJlIHVzZWQgKGlm IG5lZWRlZCkgaW4gbWVzc2FnZXMgdG8gdGhlIHVzZXIsIGFuZAotKyAgIHJlcHJlc2VudHMgdGhl IGZpbGUgR0RCIGlzIGxvb2tpbmcgZm9yLiAgKi8KLSsKLStzdGF0aWMgZXh0X2xhbmdfbWlzc2lu Z19maWxlX3Jlc3VsdAotK2dkYnB5X2ZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQgKGNvbnN0IHN0 cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKLSsJCQkJIHByb2dyYW1fc3Bh Y2UgKnBzcGFjZSwKLSsJCQkJIGNvbnN0IHN0cnVjdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAot KwkJCQkgY29uc3QgY2hhciAqbWlzc2luZ19maWxlbmFtZSkKLSt7Ci0rICBnZGJfYXNzZXJ0IChw c3BhY2UgIT0gbnVsbHB0cik7Ci0rICBnZGJfYXNzZXJ0IChidWlsZF9pZCAhPSBudWxscHRyKTsK LSsgIGdkYl9hc3NlcnQgKG1pc3NpbmdfZmlsZW5hbWUgIT0gbnVsbHB0cik7Ci0rCi0rICAvKiBF YXJseSBleGl0IGlmIFB5dGhvbiBpcyBub3QgaW5pdGlhbGlzZWQuICAqLwotKyAgaWYgKCFnZGJf cHl0aG9uX2luaXRpYWxpemVkIHx8IGdkYl9weXRob25fbW9kdWxlID09IG51bGxwdHIpCi0rICAg IHJldHVybiB7fTsKLSsKLSsgIGdkYnB5X2VudGVyIGVudGVyX3B5OwotKwotKyAgLyogQ29udmVy dCBCVUlMRF9JRCBpbnRvIGEgUHl0aG9uIG9iamVjdC4gICovCi0rICBzdGQ6OnN0cmluZyBoZXhf Zm9ybSA9IGJpbjJoZXggKGJ1aWxkX2lkLT5kYXRhLCBidWlsZF9pZC0+c2l6ZSk7Ci0rICBnZGJw eV9yZWY8PiBweW9fYnVpbGRpZCA9IGhvc3Rfc3RyaW5nX3RvX3B5dGhvbl9zdHJpbmcgKGhleF9m b3JtLmNfc3RyICgpKTsKLSsgIGlmIChweW9fYnVpbGRpZCA9PSBudWxscHRyKQotKyAgICB7Ci0r ICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Ci0rICAgICAgcmV0dXJuIHt9OwotKyAgICB9Ci0r Ci0rICAvKiBDb252ZXJ0IE1JU1NJTkdfRklMRU5BTUUgdG8gYSBQeXRob24gb2JqZWN0LiAgKi8K LSsgIGdkYnB5X3JlZjw+IHB5b19maWxlbmFtZSA9IGhvc3Rfc3RyaW5nX3RvX3B5dGhvbl9zdHJp bmcgKG1pc3NpbmdfZmlsZW5hbWUpOwotKyAgaWYgKHB5b19maWxlbmFtZSA9PSBudWxscHRyKQot KyAgICB7Ci0rICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Ci0rICAgICAgcmV0dXJuIHt9Owot KyAgICB9Ci0rCi0rICAvKiBDb252ZXJ0IFBTUEFDRSB0byBhIFB5dGhvbiBvYmplY3QuICAqLwot KyAgZ2RicHlfcmVmPD4gcHlvX3BzcGFjZSA9IHBzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChwc3Bh Y2UpOwotKyAgaWYgKHB5b19wc3BhY2UgPT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIGdkYnB5 X3ByaW50X3N0YWNrICgpOwotKyAgICAgIHJldHVybiB7fTsKLSsgICAgfQotKwotKyAgLyogTG9v a3VwIHRoZSBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIHRoZSBHREIgbW9kdWxlLiAgKi8KLSsgIGdk YnB5X3JlZjw+IHB5b19oYW5kbGVyCi0rICAgIChQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChnZGJf cHl0aG9uX21vZHVsZSwgIl9oYW5kbGVfbWlzc2luZ19vYmpmaWxlIikpOwotKyAgaWYgKHB5b19o YW5kbGVyID09IG51bGxwdHIpCi0rICAgIHsKLSsgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsK LSsgICAgICByZXR1cm4ge307Ci0rICAgIH0KLSsKLSsgIC8qIENhbGwgdGhlIGZ1bmN0aW9uLCBw YXNzaW5nIGluIHRoZSBQeXRob24gb2JqZmlsZSBvYmplY3QuICAqLwotKyAgZ2RicHlfcmVmPD4g cHlvX2V4ZWN1dGVfcmV0Ci0rICAgIChQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzIChweW9f aGFuZGxlci5nZXQgKCksIHB5b19wc3BhY2UuZ2V0ICgpLAotKwkJCQkgICBweW9fYnVpbGRpZC5n ZXQgKCksIHB5b19maWxlbmFtZS5nZXQgKCksCi0rCQkJCSAgIG51bGxwdHIpKTsKLSsgIGlmIChw eW9fZXhlY3V0ZV9yZXQgPT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIC8qIElmIHRoZSBoYW5k bGVyIGlzIGNhbmNlbGxlZCBkdWUgdG8gYSBDdHJsLUMsIHRoZW4gcHJvcGFnYXRlCi0rCSB0aGUg Q3RybC1DIGFzIGEgR0RCIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgaXQuICAqLwot KyAgICAgIGdkYnB5X3ByaW50X3N0YWNrX29yX3F1aXQgKCk7Ci0rICAgICAgcmV0dXJuIHt9Owot KyAgICB9Ci0rCi0rICAvKiBQYXJzZSB0aGUgcmVzdWx0LCBhbmQgY29udmVydCBpdCBiYWNrIHRv IHRoZSBDKysgb2JqZWN0LiAgKi8KLSsgIGlmIChweW9fZXhlY3V0ZV9yZXQgPT0gUHlfTm9uZSkK LSsgICAgcmV0dXJuIHt9OwotKwotKyAgaWYgKFB5Qm9vbF9DaGVjayAocHlvX2V4ZWN1dGVfcmV0 LmdldCAoKSkpCi0rICAgIHsKLSsgICAgICAvKiBXZSBrbm93IHRoZSB2YWx1ZSBpcyBhIGJvb2ws IHNvIGl0IG11c3QgYmUgZWl0aGVyIFB5X1RydWUgb3IKLSsJIFB5X0ZhbHNlLiAgQW55dGhpbmcg ZWxzZSB3b3VsZCBub3QgZ2V0IHBhc3QgdGhlIGFib3ZlIGNoZWNrLiAgKi8KLSsgICAgICBib29s IHRyeV9hZ2FpbiA9IHB5b19leGVjdXRlX3JldC5nZXQgKCkgPT0gUHlfVHJ1ZTsKLSsgICAgICBy ZXR1cm4gZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAodHJ5X2FnYWluKTsKLSsgICAgfQot KwotKyAgaWYgKCFnZGJweV9pc19zdHJpbmcgKHB5b19leGVjdXRlX3JldC5nZXQgKCkpKQotKyAg ICB7Ci0rICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAotKwkJICAgICAg ICJyZXR1cm4gdmFsdWUgZnJvbSBfZmluZF9vYmpmaWxlX2J5X2J1aWxkaWQgc2hvdWxkICIKLSsJ CSAgICAgICAiYmUgTm9uZSwgYSBib29sLCBvciBhIHN0ciIpOwotKyAgICAgIGdkYnB5X3ByaW50 X3N0YWNrICgpOwotKyAgICAgIHJldHVybiB7fTsKLSsgICAgfQotKwotKyAgZ2RiOjp1bmlxdWVf eG1hbGxvY19wdHI8Y2hhcj4gZmlsZW5hbWUKLSsgICAgPSBweXRob25fc3RyaW5nX3RvX2hvc3Rf c3RyaW5nIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgpKTsKLSsgIGlmIChmaWxlbmFtZSA9PSBudWxs cHRyKQotKyAgICB7Ci0rICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Ci0rICAgICAgcmV0dXJu IHt9OwotKyAgICB9Ci0rCi0rICByZXR1cm4gZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAo c3RkOjpzdHJpbmcgKGZpbGVuYW1lLmdldCAoKSkpOwotIH0KLSAKLSAvKiBDb21wdXRlIHRoZSBs aXN0IG9mIGFjdGl2ZSBweXRob24gdHlwZSBwcmludGVycyBhbmQgc3RvcmUgdGhlbSBpbgotZGlm ZiAtLWdpdCBhL2dkYi9yZW1vdGUuYyBiL2dkYi9yZW1vdGUuYwotLS0tIGEvZ2RiL3JlbW90ZS5j Ci0rKysgYi9nZGIvcmVtb3RlLmMKLUBAIC0yNDYsNiArMjQ2LDcgQEAgZW51bSB7Ci0gICBQQUNL RVRfdkZpbGVfdW5saW5rLAotICAgUEFDS0VUX3ZGaWxlX3JlYWRsaW5rLAotICAgUEFDS0VUX3ZG aWxlX2ZzdGF0LAotKyAgUEFDS0VUX3ZGaWxlX3N0YXQsCi0gICBQQUNLRVRfcVhmZXJfYXV4diwK LSAgIFBBQ0tFVF9xWGZlcl9mZWF0dXJlcywKLSAgIFBBQ0tFVF9xWGZlcl9leGVjX2ZpbGUsCi1A QCAtOTk2LDYgKzk5Nyw5IEBAIGNsYXNzIHJlbW90ZV90YXJnZXQgOiBwdWJsaWMgcHJvY2Vzc19z dHJhdHVtX3RhcmdldAotIAotICAgaW50IGZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3Rh dCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVycmlkZTsKLSAKLSsgIGludCBm aWxlaW9fc3RhdCAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAot KwkJICAgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJp ZGU7Ci0rCi0gICBpbnQgZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19lcnJvciAqdGFyZ2V0 X2Vycm5vKSBvdmVycmlkZTsKLSAKLSAgIGludCBmaWxlaW9fdW5saW5rIChzdHJ1Y3QgaW5mZXJp b3IgKmluZiwKLUBAIC0xMjY2MSw2ICsxMjY2NSw5IEBAIHJlbW90ZV90YXJnZXQ6OnJlbW90ZV9o b3N0aW9fc2VuZF9jb21tYW5kIChpbnQgY29tbWFuZF9ieXRlcywgaW50IHdoaWNoX3BhY2tldCwK LSAgICAgICByZXR1cm4gLTE7Ci0gICAgIH0KLSAKLSsgIGlmICgqcmVtb3RlX2Vycm5vICE9IEZJ TEVJT19TVUNDRVNTKQotKyAgICByZXR1cm4gLTE7Ci0rCi0gICAvKiBNYWtlIHN1cmUgd2Ugc2F3 IGFuIGF0dGFjaG1lbnQgaWYgYW5kIG9ubHkgaWYgd2UgZXhwZWN0ZWQgb25lLiAgKi8KLSAgIGlm ICgoYXR0YWNobWVudF90bXAgPT0gTlVMTCAmJiBhdHRhY2htZW50ICE9IE5VTEwpCi0gICAgICAg fHwgKGF0dGFjaG1lbnRfdG1wICE9IE5VTEwgJiYgYXR0YWNobWVudCA9PSBOVUxMKSkKLUBAIC0x MzAyNyw2ICsxMzAzNCw0MSBAQCByZW1vdGVfdGFyZ2V0OjpmaWxlaW9fcmVhZGxpbmsgKHN0cnVj dCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgIHJldHVybiByZXQ7Ci0g fQotIAotKy8qIEhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgOjpmaWxlaW9fZnN0YXQgYW5kIDo6 ZmlsZWlvX3N0YXQgcmVzdWx0Ci0rICAgcHJvY2Vzc2luZy4gIFdoZW4gdGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgdGhlIHJlbW90ZSBzeXNjYWxsIGhhcyBiZWVuCi0rICAgcGVyZm9ybWVkIGFuZCB3 ZSBrbm93IHdlIGRpZG4ndCBnZXQgYW4gZXJyb3IgYmFjay4KLSsKLSsgICBBVFRBQ0hNRU5UIGFu ZCBBVFRBQ0hNRU5UX0xFTiBhcmUgdGhlIGF0dGFjaG1lbnQgZGF0YSBleHRyYWN0ZWQgZnJvbSB0 aGUKLSsgICByZW1vdGUgc3lzY2FsbCByZXBseS4gIEVYUEVDVEVEX0xFTiBpcyB0aGUgbGVuZ3Ro IHJldHVybmVkIGZyb20gdGhlCi0rICAgZnN0YXQgb3Igc3RhdCBjYWxsLCB0aGlzIHRoZSBsZW5n dGggb2YgdGhlIHJldHVybmVkIGRhdGEgKGluIEFUVEFDSE1FTlQpCi0rICAgb25jZSBpdCBoYXMg YmVlbiBkZWNvZGVkLiAgVGhlIGZzdGF0L3N0YXQgcmVzdWx0IChmcm9tIHRoZSBBVFRBQ0hNRU5U Ci0rICAgZGF0YSkgaXMgdG8gYmUgcGxhY2VkIGluIFNULiAgKi8KLSsKLStzdGF0aWMgaW50Ci0r ZmlsZWlvX3Byb2Nlc3NfZnN0YXRfYW5kX3N0YXRfcmVwbHkgKGNvbnN0IGNoYXIgKmF0dGFjaG1l bnQsCi0rCQkJCSAgICAgaW50IGF0dGFjaG1lbnRfbGVuLAotKwkJCQkgICAgIGludCBleHBlY3Rl ZF9sZW4sCi0rCQkJCSAgICAgc3RydWN0IHN0YXQgKnN0KQotK3sKLSsgIHN0cnVjdCBmaW9fc3Rh dCBmc3Q7Ci0rCi0rICBpbnQgcmVhZF9sZW4KLSsgICAgPSByZW1vdGVfdW5lc2NhcGVfaW5wdXQg KChnZGJfYnl0ZSAqKSBhdHRhY2htZW50LCBhdHRhY2htZW50X2xlbiwKLSsJCQkgICAgIChnZGJf Ynl0ZSAqKSAmZnN0LCBzaXplb2YgKGZzdCkpOwotKwotKyAgaWYgKHJlYWRfbGVuICE9IGV4cGVj dGVkX2xlbikKLSsgICAgZXJyb3IgKF8oInZGaWxlOmZzdGF0IHJldHVybmVkICVkLCBidXQgJWQg Ynl0ZXMuIiksCi0rCSAgIGV4cGVjdGVkX2xlbiwgcmVhZF9sZW4pOwotKwotKyAgaWYgKHJlYWRf bGVuICE9IHNpemVvZiAoZnN0KSkKLSsgICAgZXJyb3IgKF8oInZGaWxlOmZzdGF0IHJldHVybmVk ICVkIGJ5dGVzLCBidXQgZXhwZWN0aW5nICVkLiIpLAotKwkgICByZWFkX2xlbiwgKGludCkgc2l6 ZW9mIChmc3QpKTsKLSsKLSsgIHJlbW90ZV9maWxlaW9fdG9faG9zdF9zdGF0ICgmZnN0LCBzdCk7 Ci0rCi0rICByZXR1cm4gMDsKLSt9Ci0rCi0gLyogSW1wbGVtZW50YXRpb24gb2YgdG9fZmlsZWlv X2ZzdGF0LiAgKi8KLSAKLSBpbnQKLUBAIC0xMzAzNyw4ICsxMzA3OSw2IEBAIHJlbW90ZV90YXJn ZXQ6OmZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsIGZpbGVpb19lcnJvciAq cmVtb3RlX2Vycm5vCi0gICBpbnQgbGVmdCA9IGdldF9yZW1vdGVfcGFja2V0X3NpemUgKCk7Ci0g ICBpbnQgYXR0YWNobWVudF9sZW4sIHJldDsKLSAgIGNvbnN0IGNoYXIgKmF0dGFjaG1lbnQ7Ci0t ICBzdHJ1Y3QgZmlvX3N0YXQgZnN0OwotLSAgaW50IHJlYWRfbGVuOwotIAotICAgcmVtb3RlX2J1 ZmZlcl9hZGRfc3RyaW5nICgmcCwgJmxlZnQsICJ2RmlsZTpmc3RhdDoiKTsKLSAKLUBAIC0xMzA3 MCwxOSArMTMxMTAsNDEgQEAgcmVtb3RlX3RhcmdldDo6ZmlsZWlvX2ZzdGF0IChpbnQgZmQsIHN0 cnVjdCBzdGF0ICpzdCwgZmlsZWlvX2Vycm9yICpyZW1vdGVfZXJybm8KLSAgICAgICByZXR1cm4g MDsKLSAgICAgfQotIAotLSAgcmVhZF9sZW4gPSByZW1vdGVfdW5lc2NhcGVfaW5wdXQgKChnZGJf Ynl0ZSAqKSBhdHRhY2htZW50LCBhdHRhY2htZW50X2xlbiwKLS0JCQkJICAgIChnZGJfYnl0ZSAq KSAmZnN0LCBzaXplb2YgKGZzdCkpOwotKyAgcmV0dXJuIGZpbGVpb19wcm9jZXNzX2ZzdGF0X2Fu ZF9zdGF0X3JlcGx5IChhdHRhY2htZW50LCBhdHRhY2htZW50X2xlbiwKLSsJCQkJCSAgICAgIHJl dCwgc3QpOwotK30KLSAKLS0gIGlmIChyZWFkX2xlbiAhPSByZXQpCi0tICAgIGVycm9yIChfKCJ2 RmlsZTpmc3RhdCByZXR1cm5lZCAlZCwgYnV0ICVkIGJ5dGVzLiIpLCByZXQsIHJlYWRfbGVuKTsK LSsvKiBJbXBsZW1lbnRhdGlvbiBvZiB0b19maWxlaW9fc3RhdC4gICovCi0gCi0tICBpZiAocmVh ZF9sZW4gIT0gc2l6ZW9mIChmc3QpKQotLSAgICBlcnJvciAoXygidkZpbGU6ZnN0YXQgcmV0dXJu ZWQgJWQgYnl0ZXMsIGJ1dCBleHBlY3RpbmcgJWQuIiksCi0tCSAgIHJlYWRfbGVuLCAoaW50KSBz aXplb2YgKGZzdCkpOwotK2ludAotK3JlbW90ZV90YXJnZXQ6OmZpbGVpb19zdGF0IChzdHJ1Y3Qg aW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0rCQkJICAgIHN0cnVjdCBzdGF0 ICpzdCwgZmlsZWlvX2Vycm9yICpyZW1vdGVfZXJybm8pCi0rewotKyAgc3RydWN0IHJlbW90ZV9z dGF0ZSAqcnMgPSBnZXRfcmVtb3RlX3N0YXRlICgpOwotKyAgY2hhciAqcCA9IHJzLT5idWYuZGF0 YSAoKTsKLSsgIGludCBsZWZ0ID0gZ2V0X3JlbW90ZV9wYWNrZXRfc2l6ZSAoKSAtIDE7Ci0gCi0t ICByZW1vdGVfZmlsZWlvX3RvX2hvc3Rfc3RhdCAoJmZzdCwgc3QpOwotKyAgaWYgKHJlbW90ZV9o b3N0aW9fc2V0X2ZpbGVzeXN0ZW0gKGluZiwgcmVtb3RlX2Vycm5vKSAhPSAwKQotKyAgICByZXR1 cm4ge307Ci0gCi0tICByZXR1cm4gMDsKLSsgIHJlbW90ZV9idWZmZXJfYWRkX3N0cmluZyAoJnAs ICZsZWZ0LCAidkZpbGU6c3RhdDoiKTsKLSsKLSsgIHJlbW90ZV9idWZmZXJfYWRkX2J5dGVzICgm cCwgJmxlZnQsIChjb25zdCBnZGJfYnl0ZSAqKSBmaWxlbmFtZSwKLSsJCQkgICBzdHJsZW4gKGZp bGVuYW1lKSk7Ci0rCi0rICBpbnQgYXR0YWNobWVudF9sZW47Ci0rICBjb25zdCBjaGFyICphdHRh Y2htZW50OwotKyAgaW50IHJldCA9IHJlbW90ZV9ob3N0aW9fc2VuZF9jb21tYW5kIChwIC0gcnMt PmJ1Zi5kYXRhICgpLCBQQUNLRVRfdkZpbGVfc3RhdCwKLSsJCQkJCXJlbW90ZV9lcnJubywgJmF0 dGFjaG1lbnQsCi0rCQkJCQkmYXR0YWNobWVudF9sZW4pOwotKwotKyAgLyogVW5saWtlIDo6Zmls ZWlvX2ZzdGF0LCB0aGUgc3RhdCBmaWxlaW8gY2FsbCB3YXMgYWRkZWQgbGF0ZXIgb24sIGFuZAot KyAgICAgaGFzIG5vbmUgb2YgdGhlIGxlZ2FjeSBiZmQgaXNzdWVzLCBzbyB3ZSBjYW4ganVzdCBy ZXR1cm4gdGhlIGVycm9yLiAgKi8KLSsgIGlmIChyZXQgPCAwKQotKyAgICByZXR1cm4gcmV0Owot KwotKyAgcmV0dXJuIGZpbGVpb19wcm9jZXNzX2ZzdGF0X2FuZF9zdGF0X3JlcGx5IChhdHRhY2ht ZW50LCBhdHRhY2htZW50X2xlbiwKLSsJCQkJCSAgICAgIHJldCwgc3QpOwotIH0KLSAKLSAvKiBJ bXBsZW1lbnRhdGlvbiBvZiB0b19maWxlc3lzdGVtX2lzX2xvY2FsLiAgKi8KLUBAIC0xNjE1Nyw2 ICsxNjIxOSw4IEBAIFNob3cgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYWRkcmVzcyAoaW4gYml0 cykgaW4gYSBtZW1vcnkgcGFja2V0LiIpLCBOVUxMLAotIAotICAgYWRkX3BhY2tldF9jb25maWdf Y21kIChQQUNLRVRfdkZpbGVfZnN0YXQsICJ2RmlsZTpmc3RhdCIsICJob3N0aW8tZnN0YXQiLCAw KTsKLSAKLSsgIGFkZF9wYWNrZXRfY29uZmlnX2NtZCAoUEFDS0VUX3ZGaWxlX3N0YXQsICJ2Rmls ZTpzdGF0IiwgImhvc3Rpby1zdGF0IiwgMCk7Ci0rCi0gICBhZGRfcGFja2V0X2NvbmZpZ19jbWQg KFBBQ0tFVF92QXR0YWNoLCAidkF0dGFjaCIsICJhdHRhY2giLCAwKTsKLSAKLSAgIGFkZF9wYWNr ZXRfY29uZmlnX2NtZCAoUEFDS0VUX3ZSdW4sICJ2UnVuIiwgInJ1biIsIDApOwotZGlmZiAtLWdp dCBhL2dkYi9zb2xpYi1haXguYyBiL2dkYi9zb2xpYi1haXguYwotLS0tIGEvZ2RiL3NvbGliLWFp eC5jCi0rKysgYi9nZGIvc29saWItYWl4LmMKLUBAIC02ODksNiArNjg5LDExIEBAIGNvbnN0IHNv bGliX29wcyBzb2xpYl9haXhfc29fb3BzID0KLSAgIHNvbGliX2FpeF9vcGVuX3N5bWJvbF9maWxl X29iamVjdCwKLSAgIHNvbGliX2FpeF9pbl9keW5zeW1fcmVzb2x2ZV9jb2RlLAotICAgc29saWJf YWl4X2JmZF9vcGVuLAotKyAgbnVsbHB0ciwKLSsgIG51bGxwdHIsCi0rICBudWxscHRyLAotKyAg bnVsbHB0ciwKLSsgIGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAotIH07Ci0gCi0gdm9pZCBfaW5p dGlhbGl6ZV9zb2xpYl9haXggKCk7Ci1kaWZmIC0tZ2l0IGEvZ2RiL3NvbGliLWRhcndpbi5jIGIv Z2RiL3NvbGliLWRhcndpbi5jCi0tLS0gYS9nZGIvc29saWItZGFyd2luLmMKLSsrKyBiL2dkYi9z b2xpYi1kYXJ3aW4uYwotQEAgLTY2NSw0ICs2NjUsOSBAQCBjb25zdCBzb2xpYl9vcHMgZGFyd2lu X3NvX29wcyA9Ci0gICBvcGVuX3N5bWJvbF9maWxlX29iamVjdCwKLSAgIGRhcndpbl9pbl9keW5z eW1fcmVzb2x2ZV9jb2RlLAotICAgZGFyd2luX2JmZF9vcGVuLAotKyAgbnVsbHB0ciwKLSsgIG51 bGxwdHIsCi0rICBudWxscHRyLAotKyAgbnVsbHB0ciwKLSsgIGRlZmF1bHRfZmluZF9zb2xpYl9h ZGRyLAotIH07Ci1kaWZmIC0tZ2l0IGEvZ2RiL3NvbGliLWRzYnQuYyBiL2dkYi9zb2xpYi1kc2J0 LmMKLS0tLSBhL2dkYi9zb2xpYi1kc2J0LmMKLSsrKyBiL2dkYi9zb2xpYi1kc2J0LmMKLUBAIC05 MTQsNiArOTE0LDExIEBAIGNvbnN0IHNvbGliX29wcyBkc2J0X3NvX29wcyA9Ci0gICBvcGVuX3N5 bWJvbF9maWxlX29iamVjdCwKLSAgIGRzYnRfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKLSAgIHNv bGliX2JmZF9vcGVuLAotKyAgbnVsbHB0ciwKLSsgIG51bGxwdHIsCi0rICBudWxscHRyLAotKyAg bnVsbHB0ciwKLSsgIGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAotIH07Ci0gCi0gdm9pZCBfaW5p dGlhbGl6ZV9kc2J0X3NvbGliICgpOwotZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1mcnYuYyBiL2dk Yi9zb2xpYi1mcnYuYwotLS0tIGEvZ2RiL3NvbGliLWZydi5jCi0rKysgYi9nZGIvc29saWItZnJ2 LmMKLUBAIC0xMDg2LDQgKzEwODYsOSBAQCBjb25zdCBzb2xpYl9vcHMgZnJ2X3NvX29wcyA9Ci0g ICBvcGVuX3N5bWJvbF9maWxlX29iamVjdCwKLSAgIGZydl9pbl9keW5zeW1fcmVzb2x2ZV9jb2Rl LAotICAgc29saWJfYmZkX29wZW4sCi0rICBudWxscHRyLAotKyAgbnVsbHB0ciwKLSsgIG51bGxw dHIsCi0rICBudWxscHRyLAotKyAgZGVmYXVsdF9maW5kX3NvbGliX2FkZHIsCi0gfTsKLWRpZmYg LS1naXQgYS9nZGIvc29saWItc3ZyNC5jIGIvZ2RiL3NvbGliLXN2cjQuYwotLS0tIGEvZ2RiL3Nv bGliLXN2cjQuYwotKysrIGIvZ2RiL3NvbGliLXN2cjQuYwotQEAgLTMzNTMsNiArMzM1MywxNSBA QCBzdnI0X2l0ZXJhdGVfb3Zlcl9vYmpmaWxlc19pbl9zZWFyY2hfb3JkZXIKLSAgICAgfQotIH0K LSAKLSsvKiBTZWUgc29saWJfb3BzOjpmaW5kX3NvbGliX2FkZHIgaW4gc29saXN0LmguICAqLwot KwotK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4KLStzdnI0X2ZpbmRfc29saWJfYWRk ciAoc29saWIgJnNvKQotK3sKLSsgIGF1dG8gKmxpID0gZ2RiOjpjaGVja2VkX3N0YXRpY19jYXN0 PGxtX2luZm9fc3ZyNCAqPiAoc28ubG1faW5mby5nZXQgKCkpOwotKyAgcmV0dXJuIGxpLT5sX2Fk ZHJfaW5mZXJpb3I7Ci0rfQotKwotIGNvbnN0IHN0cnVjdCBzb2xpYl9vcHMgc3ZyNF9zb19vcHMg PQotIHsKLSAgIHN2cjRfcmVsb2NhdGVfc2VjdGlvbl9hZGRyZXNzZXMsCi1AQCAtMzM2MywxMSAr MzM3MiwxMSBAQCBjb25zdCBzdHJ1Y3Qgc29saWJfb3BzIHN2cjRfc29fb3BzID0KLSAgIG9wZW5f c3ltYm9sX2ZpbGVfb2JqZWN0LAotICAgc3ZyNF9pbl9keW5zeW1fcmVzb2x2ZV9jb2RlLAotICAg c29saWJfYmZkX29wZW4sCi0tICBudWxscHRyLAotICAgc3ZyNF9zYW1lLAotICAgc3ZyNF9rZWVw X2RhdGFfaW5fY29yZSwKLSAgIHN2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzLAot ICAgc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQsCi0rICBzdnI0X2ZpbmRfc29saWJfYWRkciwKLSB9 OwotIAotIHZvaWQgX2luaXRpYWxpemVfc3ZyNF9zb2xpYiAoKTsKLWRpZmYgLS1naXQgYS9nZGIv c29saWItdGFyZ2V0LmMgYi9nZGIvc29saWItdGFyZ2V0LmMKLS0tLSBhL2dkYi9zb2xpYi10YXJn ZXQuYwotKysrIGIvZ2RiL3NvbGliLXRhcmdldC5jCi1AQCAtNDEyLDQgKzQxMiw5IEBAIGNvbnN0 IHNvbGliX29wcyBzb2xpYl90YXJnZXRfc29fb3BzID0KLSAgIHNvbGliX3RhcmdldF9vcGVuX3N5 bWJvbF9maWxlX29iamVjdCwKLSAgIHNvbGliX3RhcmdldF9pbl9keW5zeW1fcmVzb2x2ZV9jb2Rl LAotICAgc29saWJfYmZkX29wZW4sCi0rICBudWxscHRyLAotKyAgbnVsbHB0ciwKLSsgIG51bGxw dHIsCi0rICBudWxscHRyLAotKyAgZGVmYXVsdF9maW5kX3NvbGliX2FkZHIsCi0gfTsKLWRpZmYg LS1naXQgYS9nZGIvc29saWIuYyBiL2dkYi9zb2xpYi5jCi0tLS0gYS9nZGIvc29saWIuYwotKysr IGIvZ2RiL3NvbGliLmMKLUBAIC00NSw3ICs0NSw2IEBACi0gI2luY2x1ZGUgImdkYl9iZmQuaCIK LSAjaW5jbHVkZSAiZ2Ric3VwcG9ydC9maWxlc3R1ZmYuaCIKLSAjaW5jbHVkZSAiZ2Ric3VwcG9y dC9zY29wZWRfZmQuaCIKLS0jaW5jbHVkZSAiZGVidWdpbmZvZC1zdXBwb3J0LmgiCi0gI2luY2x1 ZGUgInNvdXJjZS5oIgotICNpbmNsdWRlICJjbGkvY2xpLXN0eWxlLmgiCi0gCi1AQCAtMTEzLDcg KzExMiw2IEBAIHNob3dfc29saWJfc2VhcmNoX3BhdGggKHN0cnVjdCB1aV9maWxlICpmaWxlLCBp bnQgZnJvbV90dHksCi0gc3RhdGljIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+Ci0gc29s aWJfZmluZF8xIChjb25zdCBjaGFyICppbl9wYXRobmFtZSwgaW50ICpmZCwgYm9vbCBpc19zb2xp YikKLSB7Ci0tICBjb25zdCBzb2xpYl9vcHMgKm9wcyA9IGdkYmFyY2hfc29fb3BzIChjdXJyZW50 X2luZmVyaW9yICgpLT5hcmNoICgpKTsKLSAgIGludCBmb3VuZF9maWxlID0gLTE7Ci0gICBnZGI6 OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiB0ZW1wX3BhdGhuYW1lOwotICAgY29uc3QgY2hhciAq ZnNraW5kID0gZWZmZWN0aXZlX3RhcmdldF9maWxlX3N5c3RlbV9raW5kICgpOwotQEAgLTI5Niwx MiArMjk0LDYgQEAgc29saWJfZmluZF8xIChjb25zdCBjaGFyICppbl9wYXRobmFtZSwgaW50ICpm ZCwgYm9vbCBpc19zb2xpYikKLSAJCQl0YXJnZXRfbGJhc2VuYW1lIChmc2tpbmQsIGluX3BhdGhu YW1lKSwKLSAJCQlPX1JET05MWSB8IE9fQklOQVJZLCAmdGVtcF9wYXRobmFtZSk7Ci0gCi0tICAv KiBJZiBub3QgZm91bmQsIGFuZCB3ZSdyZSBsb29raW5nIGZvciBhIHNvbGliLCB0cnkgdG8gdXNl IHRhcmdldAotLSAgICAgc3VwcGxpZWQgc29saWIgc2VhcmNoIG1ldGhvZC4gICovCi0tICBpZiAo aXNfc29saWIgJiYgZm91bmRfZmlsZSA8IDAgJiYgb3BzLT5maW5kX2FuZF9vcGVuX3NvbGliKQot LSAgICBmb3VuZF9maWxlID0gb3BzLT5maW5kX2FuZF9vcGVuX3NvbGliIChpbl9wYXRobmFtZSwg T19SRE9OTFkgfCBPX0JJTkFSWSwKLS0JCQkJCSAgICZ0ZW1wX3BhdGhuYW1lKTsKLS0KLSAgIC8q IElmIG5vdCBmb3VuZCwgbmV4dCBzZWFyY2ggdGhlIGluZmVyaW9yJ3MgJFBBVEggZW52aXJvbm1l bnQgdmFyaWFibGUuICAqLwotICAgaWYgKGZvdW5kX2ZpbGUgPCAwICYmIHN5c3Jvb3QgPT0gTlVM TCkKLSAgICAgZm91bmRfZmlsZSA9IG9wZW5wIChjdXJyZW50X2luZmVyaW9yICgpLT5lbnZpcm9u bWVudC5nZXQgKCJQQVRIIiksCi1AQCAtNDc1LDU4ICs0NjcsNiBAQCBzb2xpYl9iZmRfb3BlbiAo Y29uc3QgY2hhciAqcGF0aG5hbWUpCi0gICByZXR1cm4gYWJmZDsKLSB9Ci0gCi0tLyogTWFwcGlu ZyBvZiBhIGNvcmUgZmlsZSdzIHNoYXJlZCBsaWJyYXJ5IHNvbmFtZXMgdG8gdGhlaXIgcmVzcGVj dGl2ZQotLSAgIGJ1aWxkLWlkcy4gIEFkZGVkIHRvIHRoZSByZWdpc3RyaWVzIG9mIGNvcmUgZmls ZSBiZmRzLiAgKi8KLS0KLS10eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg c3RkOjpzdHJpbmc+IHNvbmFtZV9idWlsZF9pZF9tYXA7Ci0tCi0tLyogS2V5IHVzZWQgdG8gYXNz b2NpYXRlIGEgc29uYW1lX2J1aWxkX2lkX21hcCB0byBhIGNvcmUgZmlsZSBiZmQuICAqLwotLQot LXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnaXN0cnk8YmZkPjo6a2V5PHNvbmFtZV9idWlsZF9pZF9t YXA+Ci0tICBjYmZkX3NvbmFtZV9idWlsZF9pZF9kYXRhX2tleTsKLS0KLS0vKiBTZWUgc29saWIu aC4gICovCi0tCi0tdm9pZAotLXNldF9jYmZkX3NvbmFtZV9idWlsZF9pZCAoZ2RiX2JmZF9yZWZf cHRyIGFiZmQsIGNvbnN0IGNoYXIgKnNvbmFtZSwKLS0JCQkgIGNvbnN0IGJmZF9idWlsZF9pZCAq YnVpbGRfaWQpCi0tewotLSAgZ2RiX2Fzc2VydCAoYWJmZC5nZXQgKCkgIT0gbnVsbHB0cik7Ci0t ICBnZGJfYXNzZXJ0IChzb25hbWUgIT0gbnVsbHB0cik7Ci0tICBnZGJfYXNzZXJ0IChidWlsZF9p ZCAhPSBudWxscHRyKTsKLS0KLS0gIHNvbmFtZV9idWlsZF9pZF9tYXAgKm1hcHB0cgotLSAgICA9 IGNiZmRfc29uYW1lX2J1aWxkX2lkX2RhdGFfa2V5LmdldCAoYWJmZC5nZXQgKCkpOwotLQotLSAg aWYgKG1hcHB0ciA9PSBudWxscHRyKQotLSAgICBtYXBwdHIgPSBjYmZkX3NvbmFtZV9idWlsZF9p ZF9kYXRhX2tleS5lbXBsYWNlIChhYmZkLmdldCAoKSk7Ci0tCi0tICAoKm1hcHB0cilbc29uYW1l XSA9IGJ1aWxkX2lkX3RvX3N0cmluZyAoYnVpbGRfaWQpOwotLX0KLS0KLS0vKiBJZiBTT05BTUUg aGFkIGEgYnVpbGQtaWQgYXNzb2NpYXRlZCB3aXRoIGl0IGluIEFCRkQncyByZWdpc3RyeSBieSBh Ci0tICAgcHJldmlvdXMgY2FsbCB0byBzZXRfY2JmZF9zb25hbWVfYnVpbGRfaWQgdGhlbiByZXR1 cm4gdGhlIGJ1aWxkLWlkCi0tICAgYXMgYSBOVUxMLXRlcm1pbmF0ZWQgaGV4IHN0cmluZy4gICov Ci0tCi0tc3RhdGljIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+Ci0tZ2V0X2NiZmRfc29u YW1lX2J1aWxkX2lkIChnZGJfYmZkX3JlZl9wdHIgYWJmZCwgY29uc3QgY2hhciAqc29uYW1lKQot LXsKLS0gIGlmIChhYmZkLmdldCAoKSA9PSBudWxscHRyIHx8IHNvbmFtZSA9PSBudWxscHRyKQot LSAgICByZXR1cm4ge307Ci0tCi0tICBzb25hbWVfYnVpbGRfaWRfbWFwICptYXBwdHIKLS0gICAg PSBjYmZkX3NvbmFtZV9idWlsZF9pZF9kYXRhX2tleS5nZXQgKGFiZmQuZ2V0ICgpKTsKLS0KLS0g IGlmIChtYXBwdHIgPT0gbnVsbHB0cikKLS0gICAgcmV0dXJuIHt9OwotLQotLSAgYXV0byBpdCA9 IG1hcHB0ci0+ZmluZCAobGJhc2VuYW1lIChzb25hbWUpKTsKLS0gIGlmIChpdCA9PSBtYXBwdHIt PmVuZCAoKSkKLS0gICAgcmV0dXJuIHt9OwotLQotLSAgcmV0dXJuIG1ha2VfdW5pcXVlX3hzdHJk dXAgKGl0LT5zZWNvbmQuY19zdHIgKCkpOwotLX0KLS0KLSAvKiBHaXZlbiBhIHBvaW50ZXIgdG8g b25lIG9mIHRoZSBzaGFyZWQgb2JqZWN0cyBpbiBvdXIgbGlzdCBvZiBtYXBwZWQKLSAgICBvYmpl Y3RzLCB1c2UgdGhlIHJlY29yZGVkIG5hbWUgdG8gb3BlbiBhIGJmZCBkZXNjcmlwdG9yIGZvciB0 aGUKLSAgICBvYmplY3QsIGJ1aWxkIGEgc2VjdGlvbiB0YWJsZSwgcmVsb2NhdGUgYWxsIHRoZSBz ZWN0aW9uIGFkZHJlc3NlcwotQEAgLTU0NiwzNiArNDg2LDU1IEBAIHNvbGliX21hcF9zZWN0aW9u cyAoc29saWIgJnNvKQotIAotICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZmlsZW5h bWUgKHRpbGRlX2V4cGFuZCAoc28uc29fbmFtZS5jX3N0ciAoKSkpOwotICAgZ2RiX2JmZF9yZWZf cHRyIGFiZmQgKG9wcy0+YmZkX29wZW4gKGZpbGVuYW1lLmdldCAoKSkpOwotLSAgZ2RiOjp1bmlx dWVfeG1hbGxvY19wdHI8Y2hhcj4gYnVpbGRfaWRfaGV4c3RyCi0tICAgID0gZ2V0X2NiZmRfc29u YW1lX2J1aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmNiZmQsCi0tCQkJCXNvLnNvX25h bWUuY19zdHIgKCkpOwotKwotKyAgLyogSWYgd2UgaGF2ZSBhIGNvcmUgdGFyZ2V0IHRoZW4gdGhl IGNvcmUgdGFyZ2V0IG1pZ2h0IGhhdmUgc29tZSBoZWxwZnVsCi0rICAgICBpbmZvcm1hdGlvbiAo aS5lLiBidWlsZC1pZHMpIGFib3V0IHRoZSBzaGFyZWQgbGlicmFyaWVzIHdlIGFyZSB0cnlpbmcK LSsgICAgIHRvIGxvYWQuICBHcmFiIHRob3NlIGhpbnRzIG5vdyBhbmQgdXNlIHRoZSBiZWxvdyB0 byB2YWxpZGF0ZSBvciBmaW5kCi0rICAgICB0aGUgc2hhcmVkIGxpYnJhcmllcy4KLSsKLSsgICAg IElmIHdlIGRvbid0IGhhdmUgYSBjb3JlIHRhcmdldCB0aGVuIHRoaXMgd2lsbCByZXR1cm4gYW4g ZW1wdHkgc3RydWN0Ci0rICAgICB3aXRoIG5vIGhpbnQgaW5mb3JtYXRpb24sIHdlIHRoZW4gbG9v a3VwIHRoZSBzaGFyZWQgbGlicmFyeSBiYXNlZCBvbgotKyAgICAgaXRzIGZpbGVuYW1lLiAgKi8K LSsgIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiBzb2xpYl9hZGRyID0gb3BzLT5maW5kX3NvbGli X2FkZHIgKHNvKTsKLSsgIHN0ZDo6b3B0aW9uYWwgPGNvbnN0IGNvcmVfdGFyZ2V0X21hcHBlZF9m aWxlX2luZm8+IG1hcHBlZF9maWxlX2luZm8KLSsgICAgPSBjb3JlX3RhcmdldF9maW5kX21hcHBl ZF9maWxlIChzby5zb19uYW1lLmNfc3RyICgpLCBzb2xpYl9hZGRyKTsKLSAKLSAgIC8qIElmIHdl IGFscmVhZHkga25vdyB0aGUgYnVpbGQtaWQgb2YgdGhpcyBzb2xpYiBmcm9tIGEgY29yZSBmaWxl LCB2ZXJpZnkKLSAgICAgIGl0IG1hdGNoZXMgQUJGRCdzIGJ1aWxkLWlkLiAgSWYgdGhlcmUgaXMg YSBtaXNtYXRjaCBvciB0aGUgc29saWIgd2Fzbid0Ci0gICAgICBmb3VuZCwgYXR0ZW1wdCB0byBx dWVyeSBkZWJ1Z2luZm9kIGZvciB0aGUgY29ycmVjdCBzb2xpYi4gICovCi0tICBpZiAoYnVpbGRf aWRfaGV4c3RyLmdldCAoKSAhPSBudWxscHRyKQotKyAgaWYgKG1hcHBlZF9maWxlX2luZm8uaGFz X3ZhbHVlICgpKQotICAgICB7Ci0tICAgICAgYm9vbCBtaXNtYXRjaCA9IGZhbHNlOwotKyAgICAg IGJvb2wgbWlzbWF0Y2ggPSAoYWJmZCAhPSBudWxscHRyCi0rCQkgICAgICAgJiYgYnVpbGRfaWRf YmZkX2dldCAoYWJmZC5nZXQgKCkpICE9IG51bGxwdHIKLSsJCSAgICAgICAmJiAhYnVpbGRfaWRf ZXF1YWwgKG1hcHBlZF9maWxlX2luZm8tPmJ1aWxkX2lkICgpLAotKwkJCQkJICAgYnVpbGRfaWRf YmZkX2dldCAoYWJmZC5nZXQgKCkpKSk7Ci0gCi0tICAgICAgaWYgKGFiZmQgIT0gbnVsbHB0ciAm JiBhYmZkLT5idWlsZF9pZCAhPSBudWxscHRyKQotLQl7Ci0tCSAgc3RkOjpzdHJpbmcgYnVpbGRf aWQgPSBidWlsZF9pZF90b19zdHJpbmcgKGFiZmQtPmJ1aWxkX2lkKTsKLS0KLS0JICBpZiAoYnVp bGRfaWQgIT0gYnVpbGRfaWRfaGV4c3RyLmdldCAoKSkKLS0JICAgIG1pc21hdGNoID0gdHJ1ZTsK LS0JfQotICAgICAgIGlmIChhYmZkID09IG51bGxwdHIgfHwgbWlzbWF0Y2gpCi0gCXsKLS0JICBz Y29wZWRfZmQgZmQgPSBkZWJ1Z2luZm9kX2V4ZWNfcXVlcnkgKAotLQkgICAgKGNvbnN0IHVuc2ln bmVkIGNoYXIgKikgYnVpbGRfaWRfaGV4c3RyLmdldCAoKSwgMCwKLS0JICAgIHNvLnNvX25hbWUu Y19zdHIgKCksICZmaWxlbmFtZSk7Ci0tCi0tCSAgaWYgKGZkLmdldCAoKSA+PSAwKQotLQkgICAg YWJmZCA9IG9wcy0+YmZkX29wZW4gKGZpbGVuYW1lLmdldCAoKSk7Ci0tCSAgZWxzZSBpZiAobWlz bWF0Y2gpCi0tCSAgICB3YXJuaW5nIChfICgiQnVpbGQtaWQgb2YgJXBzIGRvZXMgbm90IG1hdGNo IGNvcmUgZmlsZS4iKSwKLS0JCSAgICAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0 eWxlICgpLAotLQkJCQkgICAgZmlsZW5hbWUuZ2V0ICgpKSk7Ci0rCSAgLyogSWYgR0RCIGZvdW5k IGEgc3VpdGFibGUgZmlsZSBkdXJpbmcgdGhlIGZpbGUgbWFwcGluZwotKwkgICAgIHByb2Nlc3Np bmcgc3RhZ2UgdGhlbiBsZXRzIHVzZSB0aGF0LiAgV2UgZG9uJ3QgY2hlY2sgdGhlCi0rCSAgICAg YnVpbGQtaWQgYWZ0ZXIgb3BlbmluZyB0aGlzIGZpbGUsIGVpdGhlciB0aGlzIGZpbGUgd2FzIGZv dW5kCi0rCSAgICAgYnkgYnVpbGQtaWQsIGluIHdoaWNoIGNhc2UgaXQncyBnb2luZyB0byBtYXRj aCwgb3IgdGhpcyBmaWxlCi0rCSAgICAgZG9lc24ndCBoYXZlIGEgYnVpbGQtaWQsIHNvIGNoZWNr aW5nIHRlbGxzIHVzIG5vdGhpbmcuCi0rCSAgICAgSG93ZXZlciwgaWYgaXQgd2FzIGdvb2QgZW5v dWdoIGR1cmluZyB0aGUgbWFwcGVkIGZpbGUKLSsJICAgICBwcm9jZXNzaW5nLCB3ZSBhc3N1bWUg aXQncyBnb29kIGVub3VnaCBub3cuICAqLwotKwkgIGlmICghbWFwcGVkX2ZpbGVfaW5mby0+Zmls ZW5hbWUgKCkuZW1wdHkgKCkpCi0rCSAgICBhYmZkID0gb3BzLT5iZmRfb3BlbiAobWFwcGVkX2Zp bGVfaW5mby0+ZmlsZW5hbWUgKCkuY19zdHIgKCkpOwotKwkgIGVsc2UKLSsJICAgIGFiZmQgPSBu dWxscHRyOwotKwotKwkgIGlmIChhYmZkID09IG51bGxwdHIpCi0rCSAgICBhYmZkID0gZmluZF9v YmpmaWxlX2J5X2J1aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2UsCi0rCQkJCQkgICAgIG1h cHBlZF9maWxlX2luZm8tPmJ1aWxkX2lkICgpLAotKwkJCQkJICAgICBzby5zb19uYW1lLmNfc3Ry ICgpKTsKLSsKLSsJICBpZiAoYWJmZCA9PSBudWxscHRyICYmIG1pc21hdGNoKQotKwkgICAgewot KwkgICAgICB3YXJuaW5nIChfICgiQnVpbGQtaWQgb2YgJXBzIGRvZXMgbm90IG1hdGNoIGNvcmUg ZmlsZS4iKSwKLSsJCSAgICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUg KCksCi0rCQkJCSAgICAgIGZpbGVuYW1lLmdldCAoKSkpOwotKwkgICAgICBhYmZkID0gbnVsbHB0 cjsKLSsJICAgIH0KLSAJfQotICAgICB9Ci0gCi1AQCAtMTcwNSw2ICsxNjY0LDE0IEBAIHJlbW92 ZV91c2VyX2FkZGVkX29iamZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQotICAgICB9Ci0g fQotIAotKy8qIFNlZSBzb2xpc3QuaC4gICovCi0rCi0rc3RkOjpvcHRpb25hbDxDT1JFX0FERFI+ Ci0rZGVmYXVsdF9maW5kX3NvbGliX2FkZHIgKHNvbGliICZzbykKLSt7Ci0rICByZXR1cm4ge307 Ci0rfQotKwotIHZvaWQgX2luaXRpYWxpemVfc29saWIgKCk7Ci0gCi0gdm9pZAotZGlmZiAtLWdp dCBhL2dkYi9zb2xpYi5oIGIvZ2RiL3NvbGliLmgKLS0tLSBhL2dkYi9zb2xpYi5oCi0rKysgYi9n ZGIvc29saWIuaAotQEAgLTEzNiwxMSArMTM2LDQgQEAgZXh0ZXJuIHZvaWQgdXBkYXRlX3NvbGli X2JyZWFrcG9pbnRzICh2b2lkKTsKLSAKLSBleHRlcm4gdm9pZCBoYW5kbGVfc29saWJfZXZlbnQg KHZvaWQpOwotIAotLS8qIEFzc29jaWF0ZSBTT05BTUUgd2l0aCBCVUlMRF9JRCBpbiBBQkZEJ3Mg cmVnaXN0cnkgc28gdGhhdCBpdCBjYW4gYmUKLS0gICByZXRyaWV2ZWQgd2l0aCBnZXRfY2JmZF9z b25hbWVfYnVpbGRfaWQuICAqLwotLQotLWV4dGVybiB2b2lkIHNldF9jYmZkX3NvbmFtZV9idWls ZF9pZCAoZ2RiX2JmZF9yZWZfcHRyIGFiZmQsCi0tCQkJCSAgICAgIGNvbnN0IGNoYXIgKnNvbmFt ZSwKLS0JCQkJICAgICAgY29uc3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZCk7Ci0tCi0gI2VuZGlm IC8qIFNPTElCX0ggKi8KLWRpZmYgLS1naXQgYS9nZGIvc29saXN0LmggYi9nZGIvc29saXN0LmgK LS0tLSBhL2dkYi9zb2xpc3QuaAotKysrIGIvZ2RiL3NvbGlzdC5oCi1AQCAtMTMyLDE0ICsxMzIs NiBAQCBzdHJ1Y3Qgc29saWJfb3BzCi0gICAvKiBGaW5kIGFuZCBvcGVuIHNoYXJlZCBsaWJyYXJ5 IGJpbmFyeSBmaWxlLiAgKi8KLSAgIGdkYl9iZmRfcmVmX3B0ciAoKmJmZF9vcGVuKSAoY29uc3Qg Y2hhciAqcGF0aG5hbWUpOwotIAotLSAgLyogT3B0aW9uYWwgZXh0cmEgaG9vayBmb3IgZmluZGlu ZyBhbmQgb3BlbmluZyBhIHNvbGliLgotLSAgICAgSWYgVEVNUF9QQVRITkFNRSBpcyBub24tTlVM TDogSWYgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZCBhCi0tICAgICBwb2ludGVyIHRv IGEgbWFsbG9jJ2QgYW5kIHJlYWxwYXRoJ2QgY29weSBvZiBTT05BTUUgaXMgc3RvcmVkIHRoZXJl LAotLSAgICAgb3RoZXJ3aXNlIE5VTEwgaXMgc3RvcmVkIHRoZXJlLiAgKi8KLS0gIGludCAoKmZp bmRfYW5kX29wZW5fc29saWIpIChjb25zdCBjaGFyICpzb25hbWUsCi0tCQkJICAgICAgdW5zaWdu ZWQgb19mbGFncywKLS0JCQkgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiAqdGVt cF9wYXRobmFtZSk7Ci0tCi0gICAvKiBHaXZlbiB0d28gc29fbGlzdCBvYmplY3RzLCBvbmUgZnJv bSB0aGUgR0RCIHRocmVhZCBsaXN0Ci0gICAgICBhbmQgYW5vdGhlciBmcm9tIHRoZSBsaXN0IHJl dHVybmVkIGJ5IGN1cnJlbnRfc29zLCByZXR1cm4gMQotICAgICAgaWYgdGhleSByZXByZXNlbnQg dGhlIHNhbWUgbGlicmFyeS4KLUBAIC0xNjcsNiArMTU5LDIzIEBAIHN0cnVjdCBzb2xpYl9vcHMK LSAgICAgIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gc3BlY2lmaWMgcHJlcHJvY2Vzc2luZyBpcyBu ZWNlc3NhcnkKLSAgICAgIGZvciB0aGlzIHRhcmdldC4gICovCi0gICB2b2lkICgqaGFuZGxlX2V2 ZW50KSAodm9pZCk7Ci0rCi0rICAvKiBSZXR1cm4gYW4gYWRkcmVzcyB3aXRoaW4gdGhlIGluZmVy aW9yJ3MgYWRkcmVzcyBzcGFjZSB3aGljaCBpcyBrbm93bgotKyAgICAgdG8gYmUgcGFydCBvZiBT Ty4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggYWRkcmVzcywgb3IgR0RCIGRvZXNuJ3Qga25vdwotKyAg ICAgaG93IHRvIGZpZ3VyZSBvdXQgc3VjaCBhbiBhZGRyZXNzIHRoZW4gYW4gZW1wdHkgb3B0aW9u YWwgaXMKLSsgICAgIHJldHVybmVkLgotKwotKyAgICAgVGhlIHJldHVybmVkIGFkZHJlc3MgY2Fu IGJlIHVzZWQgd2hlbiBsb2FkaW5nIHRoZSBzaGFyZWQgbGlicmFyaWVzCi0rICAgICBmb3IgYSBj b3JlIGZpbGUuICBHREIga25vd3MgdGhlIGJ1aWxkLWlkcyBmb3IgKHNvbWUpIGZpbGVzIG1hcHBl ZAotKyAgICAgaW50byB0aGUgaW5mZXJpb3IncyBhZGRyZXNzIHNwYWNlLCBhbmQga25vd3MgdGhl IGFkZHJlc3MgcmFuZ2VzIHdoaWNoCi0rICAgICB0aG9zZSBtYXBwZWQgZmlsZXMgY292ZXIuICBJ ZiBHREIgY2FuIGZpZ3VyZSBvdXQgYSByZXByZXNlbnRhdGl2ZQotKyAgICAgYWRkcmVzcyBmb3Ig dGhlIGxpYnJhcnkgdGhlbiB0aGlzIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGEgbGlicmFyeSB0byBh Ci0rICAgICBtYXBwZWQgZmlsZSwgYW5kIHRodXMgdG8gYSBidWlsZC1pZC4gIEdEQiBjYW4gdGhl biB1c2UgdGhpcwotKyAgICAgaW5mb3JtYXRpb24gdG8gaGVscCBsb2NhdGUgdGhlIHNoYXJlZCBs aWJyYXJ5IG9iamZpbGUsIGlmIHRoZSBvYmpmaWxlCi0rICAgICBpcyBub3QgaW4gdGhlIGV4cGVj dGVkIHBsYWNlIChhcyBkZWZpbmVkIGJ5IHRoZSBzaGFyZWQgbGlicmFyaWVzIGZpbGUKLSsgICAg IG5hbWUpLiAgKi8KLSsKLSsgIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAoKmZpbmRfc29saWJf YWRkcikgKHNvbGliICZzbyk7Ci0gfTsKLSAKLSAvKiBBIHVuaXF1ZSBwb2ludGVyIHRvIGEgc29f bGlzdC4gICovCi1AQCAtMTg2LDQgKzE5NSw5IEBAIGV4dGVybiBnZGJfYmZkX3JlZl9wdHIgc29s aWJfYmZkX2ZvcGVuIChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZkKTsKLSAvKiBGaW5kIHNv bGliIGJpbmFyeSBmaWxlIGFuZCBvcGVuIGl0LiAgKi8KLSBleHRlcm4gZ2RiX2JmZF9yZWZfcHRy IHNvbGliX2JmZF9vcGVuIChjb25zdCBjaGFyICppbl9wYXRobmFtZSk7Ci0gCi0rLyogQSBkZWZh dWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBzb2xpYl9vcHM6OmZpbmRfc29saWJfYWRkciBjYWxs YmFjay4KLSsgICBUaGlzIGp1c3QgcmV0dXJucyBhbiBlbXB0eSBzdGQ6Om9wdGlvbmFsPENPUkVf QUREUj4gaW5kaWNhdGluZyBHREIgaXMKLSsgICB1bmFibGUgdG8gZmluZCBhbiBhZGRyZXNzIHdp dGhpbiB0aGUgbGlicmFyeSBTTy4gICovCi0rZXh0ZXJuIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERS PiBkZWZhdWx0X2ZpbmRfc29saWJfYWRkciAoc29saWIgJnNvKTsKLSsKLSAjZW5kaWYKLWRpZmYg LS1naXQgYS9nZGIvc3ltZmlsZS1kZWJ1Zy5jIGIvZ2RiL3N5bWZpbGUtZGVidWcuYwotLS0tIGEv Z2RiL3N5bWZpbGUtZGVidWcuYwotKysrIGIvZ2RiL3N5bWZpbGUtZGVidWcuYwotQEAgLTYzNyw3 ICs2MzcsNyBAQCBvYmpmaWxlOjpmaW5kX2FuZF9hZGRfc2VwYXJhdGVfc3ltYm9sX2ZpbGUgKHN5 bWZpbGVfYWRkX2ZsYWdzIHN5bWZpbGVfZmxhZ3MpCi0gCSAgICAgdGhlIHVzZXIgYSBzeXN0ZW0g c3BlY2lmaWMgbWVzc2FnZSB0aGF0IGd1aWRlcyB0aGVtIHRvIGZpbmRpbmcKLSAJICAgICB0aGUg bWlzc2luZyBkZWJ1ZyBpbmZvLiAgKi8KLSAKLS0JICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5m b19yZXN1bHQgZXh0X3Jlc3VsdAotKwkgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZXh0 X3Jlc3VsdAotIAkgICAgPSBleHRfbGFuZ19oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8gKHRoaXMp OwotIAkgIGlmICghZXh0X3Jlc3VsdC5maWxlbmFtZSAoKS5lbXB0eSAoKSkKLSAJICAgIHsKLWRp ZmYgLS1naXQgYS9nZGIvc3ltZmlsZS5jIGIvZ2RiL3N5bWZpbGUuYwotLS0tIGEvZ2RiL3N5bWZp bGUuYwotKysrIGIvZ2RiL3N5bWZpbGUuYwotQEAgLTEyMzcsNiArMTIzNyw4IEBAIHNlcGFyYXRl X2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9u ZyBjcmMsCi0gCQkJICAgIHN0cnVjdCBvYmpmaWxlICpwYXJlbnRfb2JqZmlsZSwKLSAJCQkgICAg ZGVmZXJyZWRfd2FybmluZ3MgKndhcm5pbmdzKQotIHsKLSsgIFNFUEFSQVRFX0RFQlVHX0ZJTEVf U0NPUEVEX0RFQlVHX0VOVEVSX0VYSVQ7Ci0rCi0gICB1bnNpZ25lZCBsb25nIGZpbGVfY3JjOwot ICAgaW50IGZpbGVfY3JjX3A7Ci0gICBzdHJ1Y3Qgc3RhdCBwYXJlbnRfc3RhdCwgYWJmZF9zdGF0 OwotQEAgLTEyNTEsMTkgKzEyNTMsMTMgQEAgc2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHMgKGNv bnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBsb25nIGNyYywKLSAgIGlmIChmaWxlbmFt ZV9jbXAgKG5hbWUuY19zdHIgKCksIG9iamZpbGVfbmFtZSAocGFyZW50X29iamZpbGUpKSA9PSAw KQotICAgICByZXR1cm4gMDsKLSAKLS0gIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQot LSAgICB7Ci0tICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgXygiICBUcnlpbmcgJXMuLi4i KSwgbmFtZS5jX3N0ciAoKSk7Ci0tICAgICAgZ2RiX2ZsdXNoIChnZGJfc3RkbG9nKTsKLS0gICAg fQotKyAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJUcnlpbmcgJXMuLi4iLCBu YW1lLmNfc3RyICgpKTsKLSAKLSAgIGdkYl9iZmRfcmVmX3B0ciBhYmZkIChnZGJfYmZkX29wZW4g KG5hbWUuY19zdHIgKCksIGdudXRhcmdldCkpOwotIAotICAgaWYgKGFiZmQgPT0gTlVMTCkKLSAg ICAgewotLSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQlnZGJfcHJpbnRm IChnZGJfc3RkbG9nLCBfKCIgbm8sIHVuYWJsZSB0byBvcGVuLlxuIikpOwotLQotKyAgICAgIHNl cGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgidW5hYmxlIHRvIG9wZW4gZmlsZSIpOwot ICAgICAgIHJldHVybiAwOwotICAgICB9Ci0gCi1AQCAtMTI4NSwxMCArMTI4MSw3IEBAIHNlcGFy YXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQg bG9uZyBjcmMsCi0gICAgICAgaWYgKGFiZmRfc3RhdC5zdF9kZXYgPT0gcGFyZW50X3N0YXQuc3Rf ZGV2Ci0gCSAgJiYgYWJmZF9zdGF0LnN0X2lubyA9PSBwYXJlbnRfc3RhdC5zdF9pbm8pCi0gCXsK LS0JICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKLS0JICAgIGdkYl9wcmludGYgKGdk Yl9zdGRsb2csCi0tCQkJXygiIG5vLCBzYW1lIGZpbGUgYXMgdGhlIG9iamZpbGUuXG4iKSk7Ci0t Ci0rCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJzYW1lIGZpbGUgYXMgdGhl IG9iamZpbGUiKTsKLSAJICByZXR1cm4gMDsKLSAJfQotICAgICAgIHZlcmlmaWVkX2FzX2RpZmZl cmVudCA9IDE7Ci1AQCAtMTMwMCw5ICsxMjkzLDcgQEAgc2VwYXJhdGVfZGVidWdfZmlsZV9leGlz dHMgKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBsb25nIGNyYywKLSAKLSAgIGlm ICghZmlsZV9jcmNfcCkKLSAgICAgewotLSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2Rl YnVnKQotLQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgbm8sIGVycm9yIGNvbXB1dGluZyBD UkMuXG4iKSk7Ci0tCi0rICAgICAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJl cnJvciBjb21wdXRpbmcgQ1JDIik7Ci0gICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLSAKLUBAIC0x MzE4LDIwICsxMzA5LDE4IEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6 OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCi0gCXsKLSAJICBpZiAoIWdkYl9iZmRf Y3JjIChwYXJlbnRfb2JqZmlsZS0+b2JmZC5nZXQgKCksICZwYXJlbnRfY3JjKSkKLSAJICAgIHsK LS0JICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0tCQlnZGJfcHJpbnRmIChn ZGJfc3RkbG9nLAotLQkJCSAgICBfKCIgbm8sIGVycm9yIGNvbXB1dGluZyBDUkMuXG4iKSk7Ci0t Ci0rCSAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiZXJyb3IgY29tcHV0 aW5nIENSQyIpOwotIAkgICAgICByZXR1cm4gMDsKLSAJICAgIH0KLSAJfQotIAotICAgICAgIGlm ICh2ZXJpZmllZF9hc19kaWZmZXJlbnQgfHwgcGFyZW50X2NyYyAhPSBmaWxlX2NyYykKLSAJewot LQkgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQkgICAgZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywgInRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3VuZCBpbiBcIiVzXCIiCi0tCQkJIiBk b2VzIG5vdCBtYXRjaCBcIiVzXCIgKENSQyBtaXNtYXRjaCkuXG4iLAotLQkJCW5hbWUuY19zdHIg KCksIG9iamZpbGVfbmFtZSAocGFyZW50X29iamZpbGUpKTsKLSsJICBzZXBhcmF0ZV9kZWJ1Z19m aWxlX2RlYnVnX3ByaW50ZgotKwkgICAgKCJ0aGUgZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4g XCIlc1wiIGRvZXMgbm90IG1hdGNoICIKLSsJICAgICAiXCIlc1wiIChDUkMgbWlzbWF0Y2gpLiIs IG5hbWUuY19zdHIgKCksCi0rCSAgICAgb2JqZmlsZV9uYW1lIChwYXJlbnRfb2JqZmlsZSkpOwot KwotIAkgIHdhcm5pbmdzLT53YXJuIChfKCJ0aGUgZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4g XCIlcHNcIiIKLSAJCQkgICAgIiBkb2VzIG5vdCBtYXRjaCBcIiVwc1wiIChDUkMgbWlzbWF0Y2gp LiIpLAotIAkJCSAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAotQEAg LTEzNDMsOCArMTMzMiw3IEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6 OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCi0gICAgICAgcmV0dXJuIDA7Ci0gICAg IH0KLSAKLS0gIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLSAgICBnZGJfcHJpbnRm IChnZGJfc3RkbG9nLCBfKCIgeWVzIVxuIikpOwotKyAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1 Z19wcmludGYgKCJmb3VuZCBhIG1hdGNoIik7Ci0gCi0gICByZXR1cm4gMTsKLSB9Ci1AQCAtMTM4 NSwyMyArMTM3MywxOCBAQCBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUgKGNvbnN0IGNoYXIgKmRp ciwKLSAJCQkgIHVuc2lnbmVkIGxvbmcgY3JjMzIsIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAot IAkJCSAgZGVmZXJyZWRfd2FybmluZ3MgKndhcm5pbmdzKQotIHsKLS0gIGlmIChzZXBhcmF0ZV9k ZWJ1Z19maWxlX2RlYnVnKQotLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAotLQkJXygiXG5M b29raW5nIGZvciBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIChkZWJ1ZyBsaW5rKSBmb3IgIgotLQkJICAi JXNcbiIpLCBvYmpmaWxlX25hbWUgKG9iamZpbGUpKTsKLSsgIFNFUEFSQVRFX0RFQlVHX0ZJTEVf U0NPUEVEX0RFQlVHX1NUQVJUX0VORAotKyAgICAoImxvb2tpbmcgZm9yIHNlcGFyYXRlIGRlYnVn IGluZm8gKGRlYnVnIGxpbmspIGZvciAlcyIsCi0rICAgICBvYmpmaWxlX25hbWUgKG9iamZpbGUp KTsKLSAKLSAgIC8qIEZpcnN0IHRyeSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG9yaWdp bmFsIGZpbGUuICAqLwotLSAgc3RkOjpzdHJpbmcgZGVidWdmaWxlID0gZGlyOwotLSAgZGVidWdm aWxlICs9IGRlYnVnbGluazsKLSsgIHN0ZDo6c3RyaW5nIGRlYnVnZmlsZSA9IHBhdGhfam9pbiAo ZGlyLCBkZWJ1Z2xpbmspOwotIAotICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChk ZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLCB3YXJuaW5ncykpCi0gICAgIHJldHVybiBkZWJ1Z2Zp bGU7Ci0gCi0gICAvKiBUaGVuIHRyeSBpbiB0aGUgc3ViZGlyZWN0b3J5IG5hbWVkIERFQlVHX1NV QkRJUkVDVE9SWS4gICovCi0tICBkZWJ1Z2ZpbGUgPSBkaXI7Ci0tICBkZWJ1Z2ZpbGUgKz0gREVC VUdfU1VCRElSRUNUT1JZOwotLSAgZGVidWdmaWxlICs9ICIvIjsKLS0gIGRlYnVnZmlsZSArPSBk ZWJ1Z2xpbms7Ci0rICBkZWJ1Z2ZpbGUgPSBwYXRoX2pvaW4gKGRpciwgREVCVUdfU1VCRElSRUNU T1JZLCBkZWJ1Z2xpbmspOwotIAotICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChk ZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLCB3YXJuaW5ncykpCi0gICAgIHJldHVybiBkZWJ1Z2Zp bGU7Ci1AQCAtMTQxNCwxMCArMTM5NywxMyBAQCBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUgKGNv bnN0IGNoYXIgKmRpciwKLSAgIGJvb2wgdGFyZ2V0X3ByZWZpeCA9IGlzX3RhcmdldF9maWxlbmFt ZSAoZGlyKTsKLSAgIGNvbnN0IGNoYXIgKmRpcl9ub3RhcmdldAotICAgICA9IHRhcmdldF9wcmVm aXggPyBkaXIgKyBzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkgOiBkaXI7Ci0rICBjb25z dCBjaGFyICp0YXJnZXRfcHJlZml4X3N0ciA9IHRhcmdldF9wcmVmaXggPyBUQVJHRVRfU1lTUk9P VF9QUkVGSVggOiAiIjsKLSAgIHN0ZDo6dmVjdG9yPGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNo YXI+PiBkZWJ1Z2Rpcl92ZWMKLSAgICAgPSBkaXJuYW1lc190b19jaGFyX3B0cl92ZWMgKGRlYnVn X2ZpbGVfZGlyZWN0b3J5LmNfc3RyICgpKTsKLS0gIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNo YXI+IGNhbm9uX3N5c3Jvb3QKLS0gICAgPSBnZGJfcmVhbHBhdGggKGdkYl9zeXNyb290LmNfc3Ry ICgpKTsKLSsgIGNvbnN0IGNoYXIgKnN5c3Jvb3Rfc3RyID0gZ2RiX3N5c3Jvb3QuY19zdHIgKCk7 Ci0rICBpZiAoaXNfdGFyZ2V0X2ZpbGVuYW1lIChzeXNyb290X3N0cikgJiYgdGFyZ2V0X2ZpbGVz eXN0ZW1faXNfbG9jYWwgKCkpCi0rICAgIHN5c3Jvb3Rfc3RyICs9IHN0cmxlbiAoVEFSR0VUX1NZ U1JPT1RfUFJFRklYKTsKLSsgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGNhbm9uX3N5 c3Jvb3QgPSBnZGJfcmVhbHBhdGggKHN5c3Jvb3Rfc3RyKTsKLSAKLSAgLyogTVMtV2luZG93cy9N Uy1ET1MgZG9uJ3QgYWxsb3cgY29sb25zIGluIGZpbGUgbmFtZXM7IHdlIG11c3QKLSAgICAgY29u dmVydCB0aGUgZHJpdmUgbGV0dGVyIGludG8gYSBvbmUtbGV0dGVyIGRpcmVjdG9yeSwgc28gdGhh dCB0aGUKLUBAIC0xNDQyLDEyICsxNDI4LDggQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlIChj b25zdCBjaGFyICpkaXIsCi0gCi0gICBmb3IgKGNvbnN0IGdkYjo6dW5pcXVlX3htYWxsb2NfcHRy PGNoYXI+ICZkZWJ1Z2RpciA6IGRlYnVnZGlyX3ZlYykKLSAgICAgewotLSAgICAgIGRlYnVnZmls ZSA9IHRhcmdldF9wcmVmaXggPyBUQVJHRVRfU1lTUk9PVF9QUkVGSVggOiAiIjsKLS0gICAgICBk ZWJ1Z2ZpbGUgKz0gZGVidWdkaXI7Ci0tICAgICAgZGVidWdmaWxlICs9ICIvIjsKLS0gICAgICBk ZWJ1Z2ZpbGUgKz0gZHJpdmU7Ci0tICAgICAgZGVidWdmaWxlICs9IGRpcl9ub3RhcmdldDsKLS0g ICAgICBkZWJ1Z2ZpbGUgKz0gZGVidWdsaW5rOwotKyAgICAgIGRlYnVnZmlsZSA9IHBhdGhfam9p biAodGFyZ2V0X3ByZWZpeF9zdHIsIGRlYnVnZGlyLmdldCAoKSwKLSsJCQkgICAgIGRyaXZlLmNf c3RyICgpLCBkaXJfbm90YXJnZXQsIGRlYnVnbGluayk7Ci0gCi0gICAgICAgaWYgKHNlcGFyYXRl X2RlYnVnX2ZpbGVfZXhpc3RzIChkZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLCB3YXJuaW5ncykp Ci0gCXJldHVybiBkZWJ1Z2ZpbGU7Ci1AQCAtMTQ2NCwzOSArMTQ0NiwxOCBAQCBmaW5kX3NlcGFy YXRlX2RlYnVnX2ZpbGUgKGNvbnN0IGNoYXIgKmRpciwKLSAJewotIAkgIC8qIElmIHRoZSBmaWxl IGlzIGluIHRoZSBzeXNyb290LCB0cnkgdXNpbmcgaXRzIGJhc2UgcGF0aCBpbgotIAkgICAgIHRo ZSBnbG9iYWwgZGVidWdmaWxlIGRpcmVjdG9yeS4gICovCi0tCSAgZGVidWdmaWxlID0gdGFyZ2V0 X3ByZWZpeCA/IFRBUkdFVF9TWVNST09UX1BSRUZJWCA6ICIiOwotLQkgIGRlYnVnZmlsZSArPSBk ZWJ1Z2RpcjsKLS0JICBkZWJ1Z2ZpbGUgKz0gIi8iOwotLQkgIGRlYnVnZmlsZSArPSBiYXNlX3Bh dGg7Ci0tCSAgZGVidWdmaWxlICs9ICIvIjsKLS0JICBkZWJ1Z2ZpbGUgKz0gZGVidWdsaW5rOwot KwkgIGRlYnVnZmlsZSA9IHBhdGhfam9pbiAodGFyZ2V0X3ByZWZpeF9zdHIsIGRlYnVnZGlyLmdl dCAoKSwKLSsJCQkJIGJhc2VfcGF0aCwgZGVidWdsaW5rKTsKLSAKLSAJICBpZiAoc2VwYXJhdGVf ZGVidWdfZmlsZV9leGlzdHMgKGRlYnVnZmlsZSwgY3JjMzIsIG9iamZpbGUsIHdhcm5pbmdzKSkK LSAJICAgIHJldHVybiBkZWJ1Z2ZpbGU7Ci0gCi0gCSAgLyogSWYgdGhlIGZpbGUgaXMgaW4gdGhl IHN5c3Jvb3QsIHRyeSB1c2luZyBpdHMgYmFzZSBwYXRoIGluCi0tCSAgICAgdGhlIHN5c3Jvb3Qn cyBnbG9iYWwgZGVidWdmaWxlIGRpcmVjdG9yeS4gIEdEQl9TWVNST09UCi0tCSAgICAgbWlnaHQg cmVmZXIgdG8gYSB0YXJnZXQ6IHBhdGg7IHdlIHN0cmlwIHRoZSAidGFyZ2V0OiIKLS0JICAgICBw cmVmaXggLS0gYnV0IGlmIHRoYXQgd291bGQgeWllbGQgdGhlIGVtcHR5IHN0cmluZywgd2UKLS0J ICAgICBkb24ndCBib3RoZXIgYXQgYWxsLCBiZWNhdXNlIHRoYXQgd291bGQganVzdCBnaXZlIHRo ZQotLQkgICAgIHNhbWUgcmVzdWx0IGFzIGFib3ZlLiAgKi8KLSsJICAgICB0aGUgc3lzcm9vdCdz IGdsb2JhbCBkZWJ1Z2ZpbGUgZGlyZWN0b3J5LiAgKi8KLSAJICBpZiAoZ2RiX3N5c3Jvb3QgIT0g VEFSR0VUX1NZU1JPT1RfUFJFRklYKQotIAkgICAgewotLQkgICAgICBkZWJ1Z2ZpbGUgPSB0YXJn ZXRfcHJlZml4ID8gVEFSR0VUX1NZU1JPT1RfUFJFRklYIDogIiI7Ci0tCSAgICAgIGlmIChpc190 YXJnZXRfZmlsZW5hbWUgKGdkYl9zeXNyb290KSkKLS0JCXsKLS0JCSAgc3RkOjpzdHJpbmcgcm9v dAotLQkJICAgID0gZ2RiX3N5c3Jvb3Quc3Vic3RyIChzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BS RUZJWCkpOwotLQkJICBnZGJfYXNzZXJ0ICghcm9vdC5lbXB0eSAoKSk7Ci0tCQkgIGRlYnVnZmls ZSArPSByb290OwotLQkJfQotLQkgICAgICBlbHNlCi0tCQlkZWJ1Z2ZpbGUgKz0gZ2RiX3N5c3Jv b3Q7Ci0tCSAgICAgIGRlYnVnZmlsZSArPSBkZWJ1Z2RpcjsKLS0JICAgICAgZGVidWdmaWxlICs9 ICIvIjsKLS0JICAgICAgZGVidWdmaWxlICs9IGJhc2VfcGF0aDsKLS0JICAgICAgZGVidWdmaWxl ICs9ICIvIjsKLS0JICAgICAgZGVidWdmaWxlICs9IGRlYnVnbGluazsKLSsJICAgICAgZGVidWdm aWxlID0gcGF0aF9qb2luIChnZGJfc3lzcm9vdC5jX3N0ciAoKSwgZGVidWdkaXIuZ2V0ICgpLAot KwkJCQkgICAgIGJhc2VfcGF0aCwgZGVidWdsaW5rKTsKLSAKLSAJICAgICAgaWYgKHNlcGFyYXRl X2RlYnVnX2ZpbGVfZXhpc3RzIChkZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLAotIAkJCQkJICAg ICAgd2FybmluZ3MpKQotZGlmZiAtLWdpdCBhL2dkYi9zeW1maWxlLmggYi9nZGIvc3ltZmlsZS5o Ci0tLS0gYS9nZGIvc3ltZmlsZS5oCi0rKysgYi9nZGIvc3ltZmlsZS5oCi1AQCAtMzcxLDYgKzM3 MSwyNSBAQCBleHRlcm4gZ2RiX2JmZF9yZWZfcHRyIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZV9p bl9zZWN0aW9uIChzdHJ1Y3Qgb2JqZmlsZSAqKTsKLSAKLSBleHRlcm4gYm9vbCBzZXBhcmF0ZV9k ZWJ1Z19maWxlX2RlYnVnOwotIAotKy8qIFByaW50IGEgInNlcGFyYXRlLWRlYnVnLWZpbGUiIGRl YnVnIHN0YXRlbWVudC4gICovCi0rCi0rI2RlZmluZSBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVn X3ByaW50ZihmbXQsIC4uLikJCVwKLSsgIGRlYnVnX3ByZWZpeGVkX3ByaW50Zl9jb25kIChzZXBh cmF0ZV9kZWJ1Z19maWxlX2RlYnVnLAlcCi0rCQkJICAgICAgInNlcGFyYXRlLWRlYnVnLWZpbGUi LAkJXAotKwkJCSAgICAgIGZtdCwgIyNfX1ZBX0FSR1NfXykKLSsKLSsvKiBQcmludCAic2VwYXJh dGUtZGVidWctZmlsZSIgZW50ZXIvZXhpdCBkZWJ1ZyBzdGF0ZW1lbnRzLiAgKi8KLSsKLSsjZGVm aW5lIFNFUEFSQVRFX0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVHX0VOVEVSX0VYSVQgXAotKyAgc2Nv cGVkX2RlYnVnX2VudGVyX2V4aXQgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcsCVwKLSsJCQkg ICAic2VwYXJhdGUtZGVidWctZmlsZSIpCi0rCi0rLyogUHJpbnQgInNlcGFyYXRlLWRlYnVnLWZp bGUiIHN0YXJ0L2VuZCBkZWJ1ZyBzdGF0ZW1lbnRzLiAgKi8KLSsKLSsjZGVmaW5lIFNFUEFSQVRF X0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVHX1NUQVJUX0VORChmbXQsIC4uLikgXAotKyAgc2NvcGVk X2RlYnVnX3N0YXJ0X2VuZCAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZywJICAgICBcCi0rCQkJ ICAic2VwYXJhdGUtZGVidWctZmlsZSIsIGZtdCwgIyNfX1ZBX0FSR1NfXykKLSsKLSAvKiBSZWFk IGZ1bGwgc3ltYm9scyBpbW1lZGlhdGVseS4gICovCi0gCi0gZXh0ZXJuIGludCByZWFkbm93X3N5 bWJvbF9maWxlczsKLWRpZmYgLS1naXQgYS9nZGIvdGFyZ2V0LmMgYi9nZGIvdGFyZ2V0LmMKLS0t LSBhL2dkYi90YXJnZXQuYwotKysrIGIvZ2RiL3RhcmdldC5jCi1AQCAtMzE5Niw2ICszMTk2LDE0 IEBAIHRhcmdldF9vcHM6OmZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2IsIGZp bGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKQotICAgcmV0dXJuIC0xOwotIH0KLSAKLStpbnQKLSt0 YXJnZXRfb3BzOjpmaWxlaW9fc3RhdCAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAotKwkJCSBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vy cm5vKQotK3sKLSsgICp0YXJnZXRfZXJybm8gPSBGSUxFSU9fRU5PU1lTOwotKyAgcmV0dXJuIC0x OwotK30KLSsKLSBpbnQKLSB0YXJnZXRfb3BzOjpmaWxlaW9fY2xvc2UgKGludCBmZCwgZmlsZWlv X2Vycm9yICp0YXJnZXRfZXJybm8pCi0gewotQEAgLTMzMTUsNiArMzMyMywyOSBAQCB0YXJnZXRf ZmlsZWlvX2ZzdGF0IChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJn ZXRfZXJybm8pCi0gCi0gLyogU2VlIHRhcmdldC5oLiAgKi8KLSAKLStpbnQKLSt0YXJnZXRfZmls ZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSsJ CSAgICBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKQotK3sKLSsg IGZvciAodGFyZ2V0X29wcyAqdCA9IGRlZmF1bHRfZmlsZWlvX3RhcmdldCAoKTsgdCAhPSBOVUxM OyB0ID0gdC0+YmVuZWF0aCAoKSkKLSsgICAgewotKyAgICAgIGludCByZXQgPSB0LT5maWxlaW9f c3RhdCAoaW5mLCBmaWxlbmFtZSwgc2IsIHRhcmdldF9lcnJubyk7Ci0rCi0rICAgICAgaWYgKHJl dCA9PSAtMSAmJiAqdGFyZ2V0X2Vycm5vID09IEZJTEVJT19FTk9TWVMpCi0rCWNvbnRpbnVlOwot KwotKyAgICAgIHRhcmdldF9kZWJ1Z19wcmludGZfbm9mdW5jICgidGFyZ2V0X2ZpbGVpb19zdGF0 ICglcykgPSAlZCAoJWQpIiwKLSsJCQkJICBmaWxlbmFtZSwgcmV0LAotKwkJCQkgIHJldCAhPSAt MSA/IDAgOiAqdGFyZ2V0X2Vycm5vKTsKLSsgICAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rCi0r ICAqdGFyZ2V0X2Vycm5vID0gRklMRUlPX0VOT1NZUzsKLSsgIHJldHVybiAtMTsKLSt9Ci0rCi0r LyogU2VlIHRhcmdldC5oLiAgKi8KLSsKLSBpbnQKLSB0YXJnZXRfZmlsZWlvX2Nsb3NlIChpbnQg ZmQsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKQotIHsKLWRpZmYgLS1naXQgYS9nZGIvdGFy Z2V0LmggYi9nZGIvdGFyZ2V0LmgKLS0tLSBhL2dkYi90YXJnZXQuaAotKysrIGIvZ2RiL3Rhcmdl dC5oCi1AQCAtMTAxMSw2ICsxMDExLDE0IEBAIHN0cnVjdCB0YXJnZXRfb3BzCi0gICAgICAgICpU QVJHRVRfRVJSTk8pLiAgKi8KLSAgICAgdmlydHVhbCBpbnQgZmlsZWlvX2ZzdGF0IChpbnQgZmQs IHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pOwotIAotKyAgICAv KiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGUgRklMRU5BTUUgYW5kIHB1dCBpdCBpbiBT Qi4gIExvb2sgZm9yCi0rICAgICAgIEZJTEVOQU1FIGluIHRoZSBmaWxlc3lzdGVtIGFzIHNlZW4g YnkgSU5GLiAgSWYgSU5GIGlzIE5VTEwsIHVzZSB0aGUKLSsgICAgICAgZmlsZXN5c3RlbSBzZWVu IGJ5IHRoZSBkZWJ1Z2dlciAoR0RCIG9yLCBmb3IgcmVtb3RlIHRhcmdldHMsIHRoZQotKyAgICAg ICByZW1vdGUgc3R1YikuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBpZiBhbiBlcnJvciBv Y2N1cnMgKGFuZAotKyAgICAgICBzZXQgKlRBUkdFVF9FUlJOTykuICAqLwotKyAgICB2aXJ0dWFs IGludCBmaWxlaW9fc3RhdCAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVu YW1lLAotKwkJCSAgICAgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJu byk7Ci0rCi0gICAgIC8qIENsb3NlIEZEIG9uIHRoZSB0YXJnZXQuICBSZXR1cm4gMCwgb3IgLTEg aWYgYW4gZXJyb3Igb2NjdXJzCi0gICAgICAgIChhbmQgc2V0ICpUQVJHRVRfRVJSTk8pLiAgKi8K LSAgICAgdmlydHVhbCBpbnQgZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19lcnJvciAqdGFy Z2V0X2Vycm5vKTsKLUBAIC0yMjIwLDYgKzIyMjgsMTQgQEAgZXh0ZXJuIGludCB0YXJnZXRfZmls ZWlvX3ByZWFkIChpbnQgZmQsIGdkYl9ieXRlICpyZWFkX2J1ZiwgaW50IGxlbiwKLSBleHRlcm4g aW50IHRhcmdldF9maWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnNiLAotIAkJCQlm aWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubyk7Ci0gCi0rLyogR2V0IGluZm9ybWF0aW9uIGFib3V0 IHRoZSBmaWxlIGF0IEZJTEVOQU1FIG9uIHRoZSB0YXJnZXQgYW5kIHB1dCBpdCBpbgotKyAgIFNC LiAgTG9vayBpbiB0aGUgZmlsZXN5c3RlbSBhcyBzZWVuIGJ5IElORi4gIElmIElORiBpcyBOVUxM LCB1c2UgdGhlCi0rICAgZmlsZXN5c3RlbSBzZWVuIGJ5IHRoZSBkZWJ1Z2dlciAoR0RCIG9yLCBm b3IgcmVtb3RlIHRhcmdldHMsIHRoZSByZW1vdGUKLSsgICBzdHViKS4gIFJldHVybiAwIG9uIHN1 Y2Nlc3MsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycyAoYW5kIHNldAotKyAgICpUQVJHRVRfRVJS Tk8pLiAgKi8KLStleHRlcm4gaW50IHRhcmdldF9maWxlaW9fc3RhdCAoc3RydWN0IGluZmVyaW9y ICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotKwkJCSAgICAgICBzdHJ1Y3Qgc3RhdCAqc2Is IGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKTsKLSsKLSAvKiBDbG9zZSBGRCBvbiB0aGUgdGFy Z2V0LiAgUmV0dXJuIDAsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycwotICAgIChhbmQgc2V0ICpU QVJHRVRfRVJSTk8pLiAgKi8KLSBleHRlcm4gaW50IHRhcmdldF9maWxlaW9fY2xvc2UgKGludCBm ZCwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pOwotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvYnVpbGQtaWQtc2Vxbm8uYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnVp bGQtaWQtc2Vxbm8uYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnVpbGQtaWQtc2Vxbm8uYwotQEAgLTAsMCArMSwyMiBA QAotKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0r Ci0rICAgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0r ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotK2ludAotK21haW4g KHZvaWQpCi0rewotKyAgcmV0dXJuIDA7Ci0rfQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2UvYnVpbGQtaWQtc2Vxbm8uZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9idWls ZC1pZC1zZXFuby5leHAKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2J1aWxkLWlkLXNlcW5vLmV4cAotQEAgLTAsMCArMSwx MzMgQEAKLSsjIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIu Ci0rIwotKyMgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0r IwotKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0r IyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot KyMKLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLSsjIFNldHVwIGEgLmJ1aWxkLWlk LyBiYXNlZCBkZWJ1ZyBkaXJlY3RvcnkgY29udGFpbmluZyBtdWx0aXBsZSBlbnRyaWVzCi0rIyBm b3IgdGhlIHNhbWUgYnVpbGQtaWQsIHdpdGggZWFjaCBlbnRyeSBnaXZlbiBhIGRpZmZlcmVudCBz ZXF1ZW5jZQotKyMgbnVtYmVyLgotKyMKLSsjIEVuc3VyZSB0aGF0IEdEQiB3aWxsIHNjYW4gb3Zl ciBicm9rZW4gc3ltbGlua3MgZm9yIHRoZSBzYW1lIGJ1aWxkLWlkCi0rIyAoYnV0IGRpZmZlcmVu dCBzZXF1ZW5jZSBudW1iZXIpIHRvIGZpbmQgbGF0ZXIgd29ya2luZyBzeW1saW5rcy4KLSsjCi0r IyBUaGlzIHRlc3Qgb25seSBwbGFjZXMgZGVidWcgaW5mb3JtYXRpb24gb24gdGhlIGhvc3QsIHNv IGl0IGlzIGFsd2F5cwotKyMgbG9jYWwgdG8gR0RCLgotKwotK3JlcXVpcmUgeyFpc19yZW1vdGUg aG9zdH0KLSsKLStzdGFuZGFyZF90ZXN0ZmlsZQotKwotK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAi ZmFpbGVkIHRvIHByZXBhcmUiICR0ZXN0ZmlsZSAkc3JjZmlsZV0gPT0gLTF9IHsKLSsgICAgcmV0 dXJuIC0xCi0rfQotKwotKyMgU3BsaXQgb3V0IEJJTkZJTEUuZGVidWcuICBSZW1vdmUgZGVidWcg ZnJvbSBCSU5GSUxFLgotK2lmIHtbZ2RiX2dudV9zdHJpcF9kZWJ1ZyAkYmluZmlsZV0gIT0gMH0g ewotKyAgICByZXR1cm4gLTEKLSt9Ci0rCi0rIyBHZXQgdGhlICcuYnVpbGQtaWQveHgveHh4Li4u eHh4JyBwYXJ0IG9mIHRoZSBmaWxlbmFtZS4KLStzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxk X2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkYmluZmlsZV0KLSsKLSsjIEhpZGUgKHJlbmFtZSkgQklO RklMRS5kZWJ1ZywgdGhpcyBzaG91bGQgZW5zdXJlIEdEQiBjYW4ndCBmaW5kIGl0Ci0rIyBkaXJl Y3RseSBidXQgbmVlZHMgdG8gbG9vayBmb3IgdGhlIGJ1aWxkLWlkIGJhc2VkIGZpbGUgaW4gdGhl IGRlYnVnCi0rIyBkaXJlY3RvcnkuCi0rc2V0IGhpZGRlbl9kZWJ1Z2luZm8gW3N0YW5kYXJkX291 dHB1dF9maWxlICJoaWRkZW5fJHRlc3RmaWxlLmRlYnVnIl0KLStyZW1vdGVfZXhlYyBidWlsZCAi bXYgJHtiaW5maWxlfS5kZWJ1ZyAkaGlkZGVuX2RlYnVnaW5mbyIKLSsKLSsjIEEgZmlsZW5hbWUg dGhhdCBkb2Vzbid0IGV4aXN0LiAgU29tZSBzeW1saW5rcyB3aWxsIHBvaW50IGF0IHRoaXMKLSsj IGZpbGUuCi0rc2V0IG1pc3NpbmdfZGVidWdpbmZvIFtob3N0X3N0YW5kYXJkX291dHB1dF9maWxl ICJtaXNzaW5nX2RlYnVnaW5mbyJdCi0rCi0rIyBDcmVhdGUgdGhlIGRlYnVnIGRpcmVjdG9yeSwg YW5kIHRoZSAuYnVpbGQtaWQgZGlyZWN0b3J5IHN0cnVjdHVyZQotKyMgd2l0aGluIGl0LgotK3Nl dCBkZWJ1Z2RpciBbaG9zdF9zdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVidWciXQotK3JlbW90ZV9l eGVjIGhvc3QgIm1rZGlyIC1wICRkZWJ1Z2Rpci9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxl bmFtZV0iCi0rCi0rc2V0IGhvc3RfaGlkZGVuX2RlYnVnaW5mbyBbZ2RiX3JlbW90ZV9kb3dubG9h ZCBob3N0ICRoaWRkZW5fZGVidWdpbmZvXQotK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkaG9z dF9oaWRkZW5fZGVidWdpbmZvICRkZWJ1Z2Rpci8kYnVpbGRfaWRfZmlsZW5hbWUiCi0rCi0rIyBT dGFydCBHREIgYW5kIGxvYWQgZ2xvYmFsIEJJTkZJTEUuICBJZiBGSU5EX0RFQlVHSU5GTyBpcyB0 cnVlIHRoZW4KLSsjIHdlIGV4cGVjdCBHREIgdG8gZmluZCB0aGUgZGVidWcgaW5mb3JtYXRpb24g bWF0Y2hpbmcgQklORklMRSwKLSsjIG90aGVyd2lzZSwgd2UgZXhwZWN0IEdEQiBub3QgdG8gZmlu ZCB0aGUgZGVidWcgaW5mb3JtYXRpb24uCi0rcHJvYyBsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdf aXNfZm91bmQgeyBmaW5kX2RlYnVnaW5mbyB0ZXN0bmFtZSB9IHsKLSsgICAgd2l0aF90ZXN0X3By ZWZpeCAiJHRlc3RuYW1lIiB7Ci0rCWNsZWFuX3Jlc3RhcnQKLSsKLSsJZ2RiX3Rlc3Rfbm9fb3V0 cHV0ICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkgJDo6ZGVidWdkaXIiIFwKLSsJICAgICJzZXQg ZGVidWctZmlsZS1kaXJlY3RvcnkiCi0rCi0rCWdkYl9maWxlX2NtZCAkOjpiaW5maWxlCi0rCi0r CWlmIHsgJGZpbmRfZGVidWdpbmZvIH0gewotKwkgICAgZ2RiX2Fzc2VydCB7IFtyZWdleHAgW3N0 cmluZ190b19yZWdleHAgXAotKwkJCQkgICAgICAiUmVhZGluZyBzeW1ib2xzIGZyb20gJDo6aGlk ZGVuX2RlYnVnaW5mby4uLiJdIFwKLSsJCQkgICAgICAkOjpnZGJfZmlsZV9jbWRfbXNnXSB9IFwK LSsJCSJkZWJ1Z2luZm8gd2FzIHJlYWQgdmlhIGJ1aWxkLWlkIgotKwl9IGVsc2UgewotKwkgICAg Z2RiX2Fzc2VydCB7IFtyZWdleHAgIlxcKE5vIGRlYnVnZ2luZyBzeW1ib2xzIGZvdW5kIGluIFxb XlxyXG5cXSsvJDo6dGVzdGZpbGVcXCkiIFwKLSsJCQkgICAgICAkOjpnZGJfZmlsZV9jbWRfbXNn XSB9IFwKLSsJICAgIH0KLSsgICAgfQotK30KLSsKLSsjIFJldHVybiBhIGNvcHkgb2YgRklMRU5B TUUsIHdoaWNoIHNob3VsZCBlbmQgJy5kZWJ1ZycsIHdpdGggTlVNQkVSCi0rIyBhZGRlZCwgZS5n LiBhZGRfc2Vxbm8gMSAiZm9vLmRlYnVnIiAtLT4gImZvby4xLmRlYnVnIi4KLStwcm9jIGFkZF9z ZXFubyB7IG51bWJlciBmaWxlbmFtZSB9IHsKLSsgICAgcmV0dXJuIFtyZWdzdWIgIlwuZGVidWdc JCIgJGZpbGVuYW1lICIuJHtudW1iZXJ9LmRlYnVnIl0KLSt9Ci0rCi0rbG9hZF9iaW5maWxlX2No ZWNrX2RlYnVnX2lzX2ZvdW5kIHRydWUgXAotKyAgICAiZmluZCBkZWJ1Z2luZm8gd2l0aCBhIHNp bmdsZSBidWlsZC1pZCBmaWxlIgotKwotK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkaG9zdF9o aWRkZW5fZGVidWdpbmZvIFwKLSsJCQkkZGVidWdkaXIvW2FkZF9zZXFubyAxICRidWlsZF9pZF9m aWxlbmFtZV0iCi0rcmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRob3N0X2hpZGRlbl9kZWJ1Z2lu Zm8gXAotKwkJCSRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDIgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKLSty ZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJGhvc3RfaGlkZGVuX2RlYnVnaW5mbyBcCi0rCQkJJGRl YnVnZGlyL1thZGRfc2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5hbWVdIgotKwotK2xvYWRfYmluZmls ZV9jaGVja19kZWJ1Z19pc19mb3VuZCB0cnVlIFwKLSsgICAgImZpbmQgZGVidWdpbmZvIHdpdGgg NCBidWlsZC1pZCBmaWxlcyIKLSsKLStyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJG1pc3Npbmdf ZGVidWdpbmZvICRkZWJ1Z2Rpci8kYnVpbGRfaWRfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxl X2NoZWNrX2RlYnVnX2lzX2ZvdW5kIHRydWUgXAotKyAgICAiZmluZCBkZWJ1Z2luZm8sIGZpcnN0 IGJ1aWxkLWlkIGZpbGUgaXMgYmFkIgotKwotK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkbWlz c2luZ19kZWJ1Z2luZm8gXAotKwkJCSRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDEgJGJ1aWxkX2lkX2Zp bGVuYW1lXSIKLStyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZvIFwK LSsJCQkkZGVidWdkaXIvW2FkZF9zZXFubyAzICRidWlsZF9pZF9maWxlbmFtZV0iCi0rCi0rbG9h ZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kIHRydWUgIFwKLSsgICAgImZpbmQgZGVidWdp bmZvLCBmaXJzdCAyIGJ1aWxkLWlkIGZpbGVzIGFyZSBiYWQiCi0rCi0rcmVtb3RlX2V4ZWMgaG9z dCAibG4gLWZzICRtaXNzaW5nX2RlYnVnaW5mbyBcCi0rCQkJJGRlYnVnZGlyL1thZGRfc2Vxbm8g MiAkYnVpbGRfaWRfZmlsZW5hbWVdIgotKwotK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19m b3VuZCBmYWxzZSAgXAotKyAgICAiY2Fubm90IGZpbmQgZGVidWdpbmZvLCBhbGwgYnVpbGQtaWQg ZmlsZXMgYXJlIGJhZCIKLSsKLStyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJGhvc3RfaGlkZGVu X2RlYnVnaW5mbyBcCi0rCQkJJGRlYnVnZGlyL1thZGRfc2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5h bWVdIgotKwotK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCB0cnVlICBcCi0rICAg ICJmaW5kIGRlYnVnaW5mbywgbGFzdCBidWlsZC1pZCBmaWxlIGlzIGdvb2QiCi0rCi0rcmVtb3Rl X2V4ZWMgaG9zdCAicm0gLWYgJGRlYnVnZGlyL1thZGRfc2Vxbm8gMSAkYnVpbGRfaWRfZmlsZW5h bWVdIgotKwotK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCBmYWxzZSAgXAotKyAg ICAiY2Fubm90IGZpbmQgZGVidWdpbmZvLCBmaWxlIHdpdGggc2Vxbm8gMSBpcyBtaXNzaW5nIgot ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZpbGUtYnVpbGRpZC5leHAg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLWJ1aWxkaWQuZXhwCi0tLS0gYS9nZGIv dGVzdHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLWJ1aWxkaWQuZXhwCi0rKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL2NvcmVmaWxlLWJ1aWxkaWQuZXhwCi1AQCAtMTcyLDExICsxNzIsOSBAQCBw cm9jIGxvY2F0ZV9leGVjX2Zyb21fY29yZV9idWlsZF9pZCB7Y29yZWZpbGUgYnVpbGRpZCBzdWZm aXggXAotIAkibWtkaXIgLXAgW2ZpbGUgam9pbiAkZGVidWdkaXIgW2ZpbGUgZGlybmFtZSAkYnVp bGRpZF1dIgotIAotICAgICBzZXQgZmlsZXNfbGlzdCB7fQotKyAgICBsYXBwZW5kIGZpbGVzX2xp c3QgJGJpbmZpbGUgJGJ1aWxkaWQKLSAgICAgaWYgeyRzZXBkZWJ1Z30gewotLQlsYXBwZW5kIGZp bGVzX2xpc3QgIiRiaW5maWxlLnN0cmlwcGVkIiAkYnVpbGRpZAotIAlsYXBwZW5kIGZpbGVzX2xp c3QgIiRiaW5maWxlLmRlYnVnIiAiJGJ1aWxkaWQuZGVidWciCi0tICAgIH0gZWxzZSB7Ci0tCWxh cHBlbmQgZmlsZXNfbGlzdCAkYmluZmlsZSAkYnVpbGRpZAotICAgICB9Ci0gICAgIGlmIHskc2hh cmVkfSB7Ci0gCWdsb2JhbCBzaGFyZWRpcgotQEAgLTIwMCwxMiArMTk4LDcgQEAgcHJvYyBsb2Nh dGVfZXhlY19mcm9tX2NvcmVfYnVpbGRfaWQge2NvcmVmaWxlIGJ1aWxkaWQgc3VmZml4IFwKLSAg ICAgZ2RiX3Rlc3QgImNvcmUtZmlsZSAkY29yZWZpbGUiICJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0 aCAuKiIgXAotIAkibG9hZCBjb3JlIGZpbGUiCi0gICAgIGlmIHskc3ltbGlua30gewotLQlpZiB7 JHNlcGRlYnVnfSB7Ci0tCSAgICBzZXQgZXhwZWN0ZWRfZmlsZSBbZmlsZSBqb2luICRidWlsZGRp ciBcCi0tCQkJCSAgIFtmaWxlIHRhaWwgIiRiaW5maWxlLnN0cmlwcGVkIl1dCi0tCX0gZWxzZSB7 Ci0tCSAgICBzZXQgZXhwZWN0ZWRfZmlsZSBbZmlsZSBqb2luICRidWlsZGRpciBbZmlsZSB0YWls ICRiaW5maWxlXV0KLS0JfQotKwlzZXQgZXhwZWN0ZWRfZmlsZSBbZmlsZSBqb2luICRidWlsZGRp ciBbZmlsZSB0YWlsICRiaW5maWxlXV0KLSAgICAgfSBlbHNlIHsKLSAJc2V0IGV4cGVjdGVkX2Zp bGUgJGJ1aWxkaWQKLSAgICAgfQotQEAgLTI0NSwxNSArMjM4LDEyIEBAIHByb2MgZG9fY29yZWZp bGVfYnVpbGRpZF90ZXN0cyB7YXJnc30gewotIAotICAgICBpZiB7JHNlcGRlYnVnfSB7Ci0gCSMg U3RyaXAgZGVidWdpbmZvIGludG8gaXRzIG93biBmaWxlLgotLQlpZiB7W2dkYl9nbnVfc3RyaXBf ZGVidWcgW3N0YW5kYXJkX291dHB1dF9maWxlICRwcm9ncmFtX3RvX3J1bl1dIFwKLS0JCSE9IDB9 IHsKLSsJaWYge1tnZGJfZ251X3N0cmlwX2RlYnVnIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkcHJv Z3JhbV90b19ydW5dIFwKLSsJCSBuby1kZWJ1Z2xpbmtdICE9IDB9IHsKLSAJICAgIHVudGVzdGVk ICJjb3VsZCBub3Qgc3RyaXAgZXhlY3V0YWJsZSAgZm9yIFtqb2luICRzdWZmaXggXCBdIgotIAkg ICAgcmV0dXJuCi0gCX0KLSAKLS0JIyBSdW4gdGhlIHN0cmlwcGVkIHByb2dyYW0gaW5zdGVhZCBv ZiB0aGUgb3JpZ2luYWwuCi0tCXNldCBwcm9ncmFtX3RvX3J1biBbZmlsZSBqb2luICRidWlsZGRp ciBcCi0tCQkJCVtmaWxlIHRhaWwgIiRiaW5maWxlLnN0cmlwcGVkIl1dCi0gCWxhcHBlbmQgc3Vm Zml4ICJzZXBkZWJ1ZyIKLSAgICAgfQotIAotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LmJhc2UvY29yZWZpbGUuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9jb3JlZmlsZS5leHAK LS0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZpbGUuZXhwCi0rKysgYi9nZGIvdGVz dHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLmV4cAotQEAgLTE5OSw2ICsxOTksNDUgQEAgZ2RiX3Rl c3QgInVwIiAiI1xbMC05XF0qICooXFswLTl4YS1mSCdcXSogaW4pPyAuKiBcXCguKlxcKS4qIiAi dXAgKHJlaW5pdCkiCi0gCi0gZ2RiX3Rlc3QgImNvcmUiICJObyBjb3JlIGZpbGUgbm93LiIKLSAK LSsjIFRlbXBvcmFyaWx5IG1vdmUgY29yZW1tYXAuZGF0YSBvdXQgb2YgdGhlIHdheSBhbmQgcmVs b2FkIHRoZSBjb3JlCi0rIyBmaWxlLiAgV2Ugc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gcmVhZCBi dWYyIGFzIHRoZSBjb250ZW50cyBvZiB0aGlzCi0rIyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBjb3Jl IGZpbGUuICBJbiBjb250cmFzdCBidWYycm8gc2hvdWxkIG5vIGxvbmdlcgotKyMgYmUgcmVhZGFi bGUgYXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgcmVnaW9uIGFyZSBub3Qgd2l0aGluIHRoZSBjb3Jl Ci0rIyBmaWxlLCBHREIgcmVsaWVzIG9uIHJlYWRpbmcgdGhpcyBmcm9tIHRoZSBjb3JlbW1hcC5k YXRhIGZpbGUsIHdoaWNoCi0rIyBjYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLgotK3NldCBjb3JlbW1h cF9kYXRhX2ZpbGVuYW1lIFwKLSsgICAgW3N0YW5kYXJkX291dHB1dF9maWxlIGNvcmVkaXIuW2dl dHBpZF0vY29yZW1tYXAuZGF0YV0KLStzZXQgY29yZW1tYXBfZGF0YV9iYWNrdXBfZmlsZW5hbWUg XAotKyAgICBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgY29yZWRpci5bZ2V0cGlkXS9jb3JlbW1hcC5k YXRhLmJhY2t1cF0KLStyZW1vdGVfZXhlYyBob3N0ICJtdiAke2NvcmVtbWFwX2RhdGFfZmlsZW5h bWV9IFwKLSsJCSAgJHtjb3JlbW1hcF9kYXRhX2JhY2t1cF9maWxlbmFtZX0iCi0rCi0rY2xlYW5f cmVzdGFydCAkYmluZmlsZQotKwotKyMgTG9hZCB0aGUgY29yZSBmaWxlIGFuZCBjaGVjayB3ZSBn ZXQgYSB3YXJuaW5nIGFib3V0IHRoZQotKyMgY29yZW1tYXAuZGF0YSBmaWxlIGJlaW5nIG1pc3Np bmcuCi0rZ2RiX3Rlc3RfbXVsdGlwbGUgImNvcmUtZmlsZSAkY29yZWZpbGUiICJ3YXJuIGFib3V0 IGNvcmVtbWFwLmRhdGEgbWlzc2luZyIgewotKyAgICAtcmUgLXdyYXAgIndhcm5pbmc6IENhbid0 IG9wZW4gZmlsZSBcW15cclxuXF0rL2NvcmVtbWFwLmRhdGEgZHVyaW5nIGZpbGUtYmFja2VkIG1h cHBpbmcgbm90ZSBwcm9jZXNzaW5nXHJcbi4qIiB7Ci0rCXBhc3MgJGdkYl90ZXN0X25hbWUKLSsg ICAgfQotK30KLSsKLSsjIFRoaXMgeGZhaWwgd2FzIGp1c3QgY29waWVkIGZyb20gZWFybGllciBp biB0aGUgc2NyaXB0IHdoZXJlIHdlIGFsc28KLSsjIHJlYWQgZnJvbSBidWYyLgotK3NldHVwX3hm YWlsICIqLSotc3Vub3MqIiAiKi0qLWFpeCoiCi0rZ2RiX3Rlc3QgIngvOGJkIGJ1ZjIiIFwKLSsg ICAgIi4qOi4qMC4qMS4qMi4qMy4qNC4qNS4qNi4qNy4qIiBcCi0rICAgICJhY2Nlc3NpbmcgbW1h cHBlZCBkYXRhIGluIGNvcmUgZmlsZSB3aXRoIGNvcmVtbWFwLmRhdGEgcmVtb3ZlZCIKLSsKLStn ZGJfdGVzdCAieC84YmQgYnVmMnJvIiBcCi0rICAgICIkaGV4XFteOlxdKjpcXHMrQ2Fubm90IGFj Y2VzcyBtZW1vcnkgYXQgYWRkcmVzcyAkaGV4IiBcCi0rICAgICJhY2Nlc3NpbmcgcmVhZC1vbmx5 IG1tYXBwZWQgZGF0YSBpbiBjb3JlIGZpbGUgd2l0aCBjb3JlbW1hcC5kYXRhIHJlbW92ZWQiCi0r Ci0rIyBSZXN0b3JlIHRoZSBjb3JlbW1hcC5kYXRhIGZpbGUgc28gbGF0ZXIgdGVzdHMgZG9uJ3Qg Z2l2ZSB3YXJuaW5ncwotKyMgd2hlbiB0aGUgY29yZSBmaWxlIGlzIHJlbG9hZGVkLgotK3JlbW90 ZV9leGVjIGhvc3QgIm12ICR7Y29yZW1tYXBfZGF0YV9iYWNrdXBfZmlsZW5hbWV9IFwKLSsJCSAg JHtjb3JlbW1hcF9kYXRhX2ZpbGVuYW1lfSIKLSsKLSAjIFRlc3QgdGhhdCB3ZSBjYW4gdW5sb2Fk IHRoZSBjb3JlIHdpdGggdGhlICJkZXRhY2giIGNvbW1hbmQuCi0gCi0gcHJvY193aXRoX3ByZWZp eCBjb3JlZmlsZV9kZXRhY2gge30gewotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJh c2Uvc29saWItc2VhcmNoLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItc2VhcmNo LmV4cAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1zZWFyY2guZXhwCi0rKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLXNlYXJjaC5leHAKLUBAIC00Myw3ICs0Mywx MSBAQCBzZXQgcmlnaHRfYmluZmlsZTJfbGliIFwKLSBzZXQgYmluZmlsZTFfbGliIFtzdGFuZGFy ZF9vdXRwdXRfZmlsZSAke2xpYm5hbWUxfS5zb10KLSBzZXQgYmluZmlsZTJfbGliIFtzdGFuZGFy ZF9vdXRwdXRfZmlsZSAke2xpYm5hbWUyfS5zb10KLSAKLS1zZXQgbGliX2ZsYWdzIFtsaXN0IGRl YnVnIGxkZmxhZ3M9LVdsLC1Cc3ltYm9saWNdCi0rIyBXaGVuIHRoaXMgdGVzdCB3YXMgd3JpdHRl biwgR0RCJ3MgYWJpbGl0eSB0byB0cmFjayBkb3duIHNoYXJlZAotKyMgbGlicmFyaWVzIGZvciBh IGNvcmUgZmlsZSBiYXNlZCBvbiB0aGUgYnVpbGQtaWQgbXVjaCBwb29yZXIuICBBcyBHREIKLSsj IGhhcyBpbXByb3ZlZCB3ZSBub3cgbmVlZCB0byBkaXNhYmxlIGJ1aWxkLWlkcyBpbiBvcmRlciBm b3IgdGhpcyB0ZXN0Ci0rIyB0byBmdW5jdGlvbiBhcyBleHBlY3RlZC4KLStzZXQgbGliX2ZsYWdz IFtsaXN0IGRlYnVnIG5vLWJ1aWxkLWlkIGxkZmxhZ3M9LVdsLC1Cc3ltYm9saWNdCi0gc2V0IHdy b25nX2xpYl9mbGFncyAiJGxpYl9mbGFncyBhZGRpdGlvbmFsX2ZsYWdzPS1EQVJSQVlfU0laRT0x IgotIHNldCByaWdodF9saWJfZmxhZ3MgIiRsaWJfZmxhZ3MgYWRkaXRpb25hbF9mbGFncz0tREFS UkFZX1NJWkU9ODE5MiBhZGRpdGlvbmFsX2ZsYWdzPS1EUklHSFQiCi0gCi1kaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zeXNyb290LWRlYnVnLWxvb2t1cC5leHAgYi9nZGIvdGVz dHN1aXRlL2dkYi5iYXNlL3N5c3Jvb3QtZGVidWctbG9va3VwLmV4cAotbmV3IGZpbGUgbW9kZSAx MDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc3lzcm9v dC1kZWJ1Zy1sb29rdXAuZXhwCi1AQCAtMCwwICsxLDE4NCBAQAotKyMgQ29weXJpZ2h0IDIwMjQg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KLSsKLSsjIFRlc3QgR0RCJ3MgYWJpbGl0eSB0byBmaW5kIGRlYnVnIGluZm9ybWF0 aW9uIGJ5IGxvb2tpbmcgd2l0aGluIHRoZQotKyMgc3lzcm9vdC4KLSsjCi0rIyBXZSBjb21waWxl IGEgc3RhdGljIGJpbmFyeSAodG8gcmVkdWNlIHdoYXQgd2UgbmVlZCB0byBjb3B5IGludG8gdGhl Ci0rIyBzeXNyb290KSwgc3BsaXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gdGhlIGJpbmFy eSwgYW5kIHNldHVwIGEKLSsjIHN5c3Jvb3QuCi0rIwotKyMgVGhlIGRlYnVnLWZpbGUtZGlyZWN0 b3J5IGlzIHNldCB0byBqdXN0ICcvZGVidWcnLCBidXQgd2UncmUKLSsjIGV4cGVjdGluZyBHREIg dG8gYWN0dWFsbHkgbG9vayBpbiAnJFNZU1JPT1QvZGVidWcnLgotKyMKLSsjIFRoZXJlJ3MgYSB0 ZXN0IGZvciB1c2luZyAuYnVpbGQtaWQgYmFzZWQgbG9va3VwLCBhbmQgYSB0ZXN0IGZvcgotKyMg Z251X2RlYnVnbGluayBiYXNlZCBsb29rdXAuCi0rCi0rcmVxdWlyZSB7IWlzX3JlbW90ZSBob3N0 fQotKwotK3N0YW5kYXJkX3Rlc3RmaWxlIG1haW4uYwotKwotKyMgQ3JlYXRlIGEgY29weSBvZiBC SU5GSUxFLCBzcGxpdCBvdXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uLCBhbmQgdGhlbgotKyMgc2V0 dXAgYSBzeXNyb290LiAgSGlkZSAoYnkgbW92aW5nKSB0aGUgYWN0dWFsIGRlYnVnIGluZm9ybWF0 aW9uIGZpbGUKLSsjIGFuZCBjcmVhdGUgYSBzeW1saW5rIHRvIHRoZSBoaWRkZW4gZGVidWcgaW5m b3JtYXRpb24gZnJvbSB3aXRoaW4gdGhlCi0rIyBzeXNyb290LgotKyMKLSsjIFN0YXJ0IEdEQiwg c2V0IHRoZSBzeXNyb290LCBhbmQgdGhlbiBsb2FkIHRoZSBleGVjdXRhYmxlLCBlbnN1cmUgR0RC Ci0rIyBmaW5kcyB0aGUgZGVidWcgaW5mb3JtYXRpb24sIHdoaWNoIG11c3QgaGF2ZSBoYXBwZW5l ZCBieSBsb29raW4gaW4KLSsjIHRoZSBzeXNyb290LgotK3Byb2Nfd2l0aF9wcmVmaXggbG9va3Vw X3ZpYV9idWlsZF9pZCB7fSB7Ci0rICAgIHNldCBmaWxlbmFtZSAkezo6YmluZmlsZX1fMQotKyAg ICBpZiB7IFtidWlsZF9leGVjdXRhYmxlICJidWlsZCBleGVjIiAke2ZpbGVuYW1lfSAkOjpzcmNm aWxlIFwKLSsJICAgICAge2FkZGl0aW9uYWxfZmxhZ3M9LXN0YXRpYyBkZWJ1ZyBidWlsZC1pZH1d IH0gewotKwlyZXR1cm4KLSsgICAgfQotKwotKyAgICAjIFNwbGl0IGRlYnVnIGluZm9ybWF0aW9u IGludG8gYSAuZGVidWcgZmlsZSwgcmVtb3ZlIGRlYnVnCi0rICAgICMgaW5mb3JtYXRpb24gZnJv bSBGSUxFTkFNRS4gIERvbid0IGFkZCBhIC5nbnVfZGVidWdsaW5rIHRvCi0rICAgICMgRklMRU5B TUUsIHdlIHJlbHkgb24gdGhlIGJ1aWxkLWlkLgotKyAgICBpZiB7W2dkYl9nbnVfc3RyaXBfZGVi dWcgJGZpbGVuYW1lIHsgbm8tZGVidWdsaW5rIH1dICE9IDB9IHsKLSsJdW5zdXBwb3J0ZWQgImNh bm5vdCBzcGxpdCBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIGV4ZWN1dGFibGUiCi0rCXJldHVybgot KyAgICB9Ci0rCi0rICAgIHNldCBzeXNyb290IFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAic3lzcm9v dDEiXQotKyAgICBzZXQgZGVidWdfZGlyICIvZGVidWciCi0rCi0rICAgIHNldCBkZWJ1Z19zeW1s aW5rIFwKLSsJJHtzeXNyb290fSR7ZGVidWdfZGlyfS9bYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVf Z2V0ICRmaWxlbmFtZV0KLSsKLSsgICAgc2V0IGJ1aWxkX2lkX2RpciBbZmlsZSBkaXJuYW1lICRk ZWJ1Z19zeW1saW5rXQotKwotKyAgICBzZXQgZGVidWdfZmlsZW5hbWUgJHtmaWxlbmFtZX1faGlk ZGVuX2RlYnVnCi0rCi0rICAgIHJlbW90ZV9leGVjIGJ1aWxkICJta2RpciAtcCAkYnVpbGRfaWRf ZGlyIgotKyAgICByZW1vdGVfZXhlYyBidWlsZCAibXYgJGZpbGVuYW1lLmRlYnVnICRkZWJ1Z19m aWxlbmFtZSIKLSsgICAgcmVtb3RlX2V4ZWMgYnVpbGQgImxuIC1zZiAkZGVidWdfZmlsZW5hbWUg JGRlYnVnX3N5bWxpbmsiCi0rCi0rICAgIGZvcmVhY2hfd2l0aF9wcmVmaXggc3lzcm9vdF9wcmVm aXggeyAiIiAidGFyZ2V0OiIgfSB7Ci0rCWNsZWFuX3Jlc3RhcnQKLSsKLSsJZ2RiX3Rlc3Rfbm9f b3V0cHV0ICJzZXQgc3lzcm9vdCAke3N5c3Jvb3RfcHJlZml4fSRzeXNyb290IiAic2V0IHN5c3Jv b3QiCi0rCWdkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICRkZWJ1 Z19kaXIiCi0rCi0rCWdkYl9maWxlX2NtZCAkZmlsZW5hbWUKLSsKLSsJZ2RiX2Fzc2VydCB7ICQ6 OmdkYl9maWxlX2NtZF9kZWJ1Z19pbmZvIGVxICJkZWJ1ZyIgfSBcCi0rCSAgICAiZW5zdXJlIGRl YnVnIGluZm9ybWF0aW9uIHdhcyBmb3VuZCIKLSsKLSsJaWYgeyAkc3lzcm9vdF9wcmVmaXggZXEg InRhcmdldDoiCi0rCSAgICAgJiYgW3RhcmdldF9pbmZvIGdkYl9wcm90b2NvbF0gPT0gImV4dGVu ZGVkLXJlbW90ZSJ9IHsKLSsJICAgICMgT25seSB3aGVuIHVzaW5nIHRoZSBleHRlbmRlZC1yZW1v dGUgYm9hcmQgd2lsbCB3ZSBoYXZlCi0rCSAgICAjIHN0YXJ0ZWQgYSByZW1vdGUgdGFyZ2V0IGJ5 IHRoaXMgcG9pbnQuICBJbiB0aGlzIGNhc2UgR0RCCi0rCSAgICAjIHdpbGwgc2VlIHRoZSAndGFy Z2V0OicgcHJlZml4IGFzIHJlbW90ZSwgYW5kIHNvIHRoZQotKwkgICAgIyByZXBvcnRlZCBmaWxl bmFtZSB3aWxsIGluY2x1ZGUgdGhlICd0YXJnZXQ6JyBwcmVmaXguCi0rCSAgICAjCi0rCSAgICAj IEluIGFsbCBvdGhlciBjYXNlcyB3ZSB3aWxsIHN0aWxsIGJlIHVzaW5nIHRoZSBkZWZhdWx0LAot KwkgICAgIyBpbml0aWFsIHRhcmdldCwgaW4gd2hpY2ggY2FzZSBHREIgY29uc2lkZXJzIHRoZQot KwkgICAgIyAndGFyZ2V0OicgcHJlZml4IHRvIGluZGljYXRlIHRoZSBsb2NhbCBmaWxlc3lzdGVt LgotKwkgICAgc2V0IGxvb2t1cF9maWxlbmFtZSAkc3lzcm9vdF9wcmVmaXgkZGVidWdfc3ltbGlu awotKwl9IGVsc2UgewotKwkgICAgc2V0IGxvb2t1cF9maWxlbmFtZSAkZGVidWdfZmlsZW5hbWUK LSsJfQotKwlzZXQgcmUgW3N0cmluZ190b19yZWdleHAgIlJlYWRpbmcgc3ltYm9scyBmcm9tICRs b29rdXBfZmlsZW5hbWUuLi4iXQotKwlnZGJfYXNzZXJ0IHtbcmVnZXhwICRyZSAkOjpnZGJfZmls ZV9jbWRfbXNnXX0gXAotKwkgICAgImRlYnVnIHN5bWJvbHMgcmVhZCBmcm9tIGNvcnJlY3QgZmls ZSIKLSsgICAgfQotK30KLSsKLSsjIENyZWF0ZSBhIGNvcHkgb2YgQklORklMRSwgc3BsaXQgb3V0 IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiwgYW5kIHRoZW4KLSsjIHNldHVwIGEgc3lzcm9vdC4gIEhp ZGUgKGJ5IG1vdmluZykgdGhlIGFjdHVhbCBkZWJ1ZyBpbmZvcm1hdGlvbiBmaWxlCi0rIyBhbmQg Y3JlYXRlIGEgc3ltbGluayB0byB0aGUgaGlkZGVuIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gd2l0 aGluIHRoZQotKyMgc3lzcm9vdC4KLSsjCi0rIyBDb3B5IHRoZSBleGVjdXRhYmxlIGludG8gdGhl IHN5c3Jvb3QgYW5kIHRoZW4gc3RhcnQgR0RCLCBzZXQgdGhlCi0rIyBzeXNyb290LCBhbmQgbG9h ZCB0aGUgZXhlY3V0YWJsZS4gIENoZWNrIHRoYXQgR0RCIGZpbmRzIHRoZSBkZWJ1ZwotKyMgaW5m b3JtYXRpb24sIHdoaWNoIG11c3QgaGF2ZSBoYXBwZW5lZCBieSBsb29raW4gaW4gdGhlIHN5c3Jv b3QuCi0rcHJvY193aXRoX3ByZWZpeCBsb29rdXBfdmlhX2RlYnVnbGluayB7fSB7Ci0rICAgIHNl dCBmaWxlbmFtZSAkezo6YmluZmlsZX1fMgotKyAgICBpZiB7IFtidWlsZF9leGVjdXRhYmxlICJi dWlsZCBleGVjIiAke2ZpbGVuYW1lfSAkOjpzcmNmaWxlIFwKLSsJICAgICAge2FkZGl0aW9uYWxf ZmxhZ3M9LXN0YXRpYyBkZWJ1ZyBuby1idWlsZC1pZH1dIH0gewotKwlyZXR1cm4KLSsgICAgfQot KwotKyAgICAjIFNwbGl0IGRlYnVnIGluZm9ybWF0aW9uIGludG8gYSAuZGVidWcgZmlsZSwgcmVt b3ZlIGRlYnVnCi0rICAgICMgaW5mb3JtYXRpb24gZnJvbSBGSUxFTkFNRS4KLSsgICAgaWYge1tn ZGJfZ251X3N0cmlwX2RlYnVnICRmaWxlbmFtZV0gIT0gMH0gewotKwl1bnN1cHBvcnRlZCAiY2Fu bm90IHNwbGl0IGRlYnVnIGluZm9ybWF0aW9uIGZyb20gZXhlY3V0YWJsZSIKLSsJcmV0dXJuCi0r ICAgIH0KLSsKLSsgICAgIyBXZSdyZSBnb2luZyB0byBzZXR1cCB0aGUgc3lzcm9vdCBsaWtlIHRo aXM6Ci0rICAgICMKLSsgICAgIyBzeXNyb290Mi8KLSsgICAgIyAgICBiaW4vCi0rICAgICMgICAg ICAkRklMRU5BTUUKLSsgICAgIyAgICBkZWJ1Zy8KLSsgICAgIyAgICAgIGJpbi8KLSsgICAgIyAg ICAgICAgJEZJTEVOQU1FLmRlYnVnCi0rICAgICMKLSsgICAgIyBXaGVuIGxvb2tpbmcgdXAgZGVi dWcgaW5mb3JtYXRpb24gdmlhIHRoZSBkZWJ1Z2xpbmssIEdEQiB3aWxsCi0rICAgICMgb25seSBz ZWFyY2ggaW4gdGhlIHN5c3Jvb3QgaWYgdGhlIG9yaWdpbmFsIG9iamZpbGUgd2FzIGluIHRoZQot KyAgICAjIHN5c3Jvb3QuICBBbmQgR0RCIHdpbGwgcmVzb2x2ZSBzeW1saW5rcywgc28gaWYgdGhl IG9iamZpbGUgaXMKLSsgICAgIyBzeW1saW5rZWQgdG8gb3V0c2lkZSB0aGUgc3lzcm9vdCwgR0RC IHdpbGwgbm90IHNlYXJjaCBpbiB0aGUKLSsgICAgIyBzeXNyb290IGZvciB0aGUgZGVidWcgaW5m b3JtYXRpb24uCi0rICAgICMKLSsgICAgIyBTbyB3ZSBoYXZlIHRvIGNvcHkgdGhlIGV4ZWN1dGFi bGUgaW50byB0aGUgc3lzcm9vdC4KLSsgICAgIwotKyAgICAjIFdlIGFyZSBPSyB0byBzeW1saW5r IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB0byBhIGZpbGUgb3V0c2lkZSB0aGUKLSsgICAgIyBzeXNy b290IHRob3VnaC4KLSsKLSsgICAgc2V0IHN5c3Jvb3QgW3N0YW5kYXJkX291dHB1dF9maWxlICJz eXNyb290MiJdCi0rCi0rICAgIGZvcmVhY2ggcGF0aCB7IGJpbiBkZWJ1Zy9iaW4gfSB7Ci0rCXJl bW90ZV9leGVjIGJ1aWxkICJta2RpciAtcCAkc3lzcm9vdC8kcGF0aCIKLSsgICAgfQotKwotKyAg ICAjIENvcHkgdGhlIGV4ZWN1dGFibGUgaW50byB0aGUgc3lzcm9vdC4KLSsgICAgc2V0IGZpbGVf YmFzZW5hbWUgW2ZpbGUgdGFpbCAkZmlsZW5hbWVdCi0rICAgIHNldCBleGVjX2luX3N5c3Jvb3Qg JHtzeXNyb290fS9iaW4vJHtmaWxlX2Jhc2VuYW1lfQotKyAgICByZW1vdGVfZXhlYyBidWlsZCAi Y3AgJGZpbGVuYW1lICRleGVjX2luX3N5c3Jvb3QiCi0rCi0rICAgICMgUmVuYW1lIHRoZSBkZWJ1 ZyBmaWxlIG91dHNpZGUgb2YgdGhlIHN5c3Jvb3QsIHRoaXMgc2hvdWxkIHN0b3AKLSsgICAgIyBH REIgZmluZGluZyB0aGlzIGZpbGUgImJ5IGFjY2lkZW50Ii4KLSsgICAgc2V0IGRlYnVnX2ZpbGVu YW1lICR7ZmlsZW5hbWV9X2hpZGRlbl9kZWJ1ZwotKyAgICByZW1vdGVfZXhlYyBidWlsZCAibXYg JGZpbGVuYW1lLmRlYnVnICRkZWJ1Z19maWxlbmFtZSIKLSsKLSsgICAgIyBTeW1saW5rIHRoZSBk ZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBzeXNyb290LgotKyAgICBzZXQgZGVidWdfc3ltbGlu ayBcCi0rCSR7c3lzcm9vdH0vZGVidWcvYmluLyR7ZmlsZV9iYXNlbmFtZX0uZGVidWcKLSsgICAg cmVtb3RlX2V4ZWMgYnVpbGQgImxuIC1zZiAkZGVidWdfZmlsZW5hbWUgJGRlYnVnX3N5bWxpbmsi Ci0rCi0rICAgIGZvcmVhY2hfd2l0aF9wcmVmaXggc3lzcm9vdF9wcmVmaXggeyAiIiAidGFyZ2V0 OiIgfSB7Ci0rCSMgUmVzdGFydCBHREIgYW5kIHNldHVwIHRoZSBzeXNyb290IGFuZCBkZWJ1ZyBk aXJlY3RvcnkuCi0rCWNsZWFuX3Jlc3RhcnQKLSsJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgc3lz cm9vdCAke3N5c3Jvb3RfcHJlZml4fSRzeXNyb290IiAic2V0IHN5c3Jvb3QiCi0rCWdkYl90ZXN0 X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IC9kZWJ1ZyIKLSsKLSsJIyBMb2Fk IHRoZSBleGVjdXRhYmxlLCB3ZSBleHBlY3QgR0RCIHRvIGZpbmQgdGhlIGRlYnVnIGluZm9ybWF0 aW9uCi0rCSMgaW4gdGhlIHN5c3Jvb3QuCi0rCWdkYl9maWxlX2NtZCAke3N5c3Jvb3RfcHJlZml4 fSRleGVjX2luX3N5c3Jvb3QKLSsKLSsJZ2RiX2Fzc2VydCB7ICQ6OmdkYl9maWxlX2NtZF9kZWJ1 Z19pbmZvIGVxICJkZWJ1ZyIgfSBcCi0rCSAgICAiZW5zdXJlIGRlYnVnIGluZm9ybWF0aW9uIHdh cyBmb3VuZCIKLSsKLSsJc2V0IHJlIFtzdHJpbmdfdG9fcmVnZXhwICJSZWFkaW5nIHN5bWJvbHMg ZnJvbSAke3N5c3Jvb3RfcHJlZml4fSRkZWJ1Z19zeW1saW5rLi4uIl0KLSsJZ2RiX2Fzc2VydCB7 W3JlZ2V4cCAkcmUgJDo6Z2RiX2ZpbGVfY21kX21zZ119IFwKLSsJICAgICJkZWJ1ZyBzeW1ib2xz IHJlYWQgZnJvbSBjb3JyZWN0IGZpbGUiCi0rICAgIH0KLSt9Ci0rCi0rbG9va3VwX3ZpYV9idWls ZF9pZAotK2xvb2t1cF92aWFfZGVidWdsaW5rCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuZGVidWdpbmZvZC9idWlsZC1pZC1uby1kZWJ1Zy13YXJuaW5nLmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmRlYnVnaW5mb2QvYnVpbGQtaWQtbm8tZGVidWctd2FybmluZy5leHAKLS0tLSBhL2dk Yi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvYnVpbGQtaWQtbm8tZGVidWctd2FybmluZy5leHAK LSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvYnVpbGQtaWQtbm8tZGVidWctd2Fy bmluZy5leHAKLUBAIC0zMCwxNCArMzAsMTEgQEAgaWYge1tidWlsZF9leGVjdXRhYmxlICJidWls ZCBleGVjdXRhYmxlIiAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9IFwKLSAgICAgcmV0dXJuIC0xCi0g fQotIAotLSMgU3BsaXQgQklORklMRSBpbnRvIEJJTkZJTEUuc3RyaXBwZWQgYW5kIEJJTkZJTEUu ZGVidWcsIHRoZSBmaXJzdCBpcwotLSMgdGhlIGV4ZWN1dGFibGUgd2l0aCB0aGUgZGVidWcgaW5m b3JtYXRpb24gcmVtb3ZlZCwgYW5kIHRoZSBzZWNvbmQgaXMKLS0jIHRoZSBkZWJ1ZyBpbmZvcm1h dGlvbi4KLSsjIFNwbGl0IGRlYnVnIGluZm9ybWF0aW9uIGZyb20gQklORklMRSBpbnRvIEJJTkZJ TEUuZGVidWcuCi0gIwotLSMgSG93ZXZlciwgYnkgcGFzc2luZyB0aGUgIm5vLWRlYnVnbGluayIg ZmxhZyB3ZSBwcmV2ZW50IHRoaXMgcHJvYwotLSMgZnJvbSBhZGRpbmcgYSAuZ251X2RlYnVnbGlu ayBzZWN0aW9uIHRvIHRoZSBleGVjdXRhYmxlLiAgQW55IGxvb2t1cAotLSMgb2YgdGhlIGRlYnVn IGluZm9ybWF0aW9uIGJ5IEdEQiB3aWxsIG5lZWQgdG8gYmUgZG9uZSBiYXNlZCBvbiB0aGUKLS0j IGJ1aWxkLWlkLgotKyMgQnkgcGFzc2luZyB0aGUgIm5vLWRlYnVnbGluayIgZmxhZyB3ZSBwcmV2 ZW50IHRoaXMgcHJvYyBmcm9tIGFkZGluZwotKyMgYSAuZ251X2RlYnVnbGluayBzZWN0aW9uIHRv IEJJTkZJTEUuICBBbnkgbG9va3VwIG9mIHRoZSBkZWJ1ZwotKyMgaW5mb3JtYXRpb24gYnkgR0RC IHdpbGwgbmVlZCB0byBiZSBkb25lIGJhc2VkIG9uIHRoZSBidWlsZC1pZC4KLSBpZiB7W2dkYl9n bnVfc3RyaXBfZGVidWcgJGJpbmZpbGUgbm8tZGVidWdsaW5rXX0gewotICAgICB1bnN1cHBvcnRl ZCAiY2Fubm90IHByb2R1Y2Ugc2VwYXJhdGUgZGVidWcgaW5mbyBmaWxlcyIKLSAgICAgcmV0dXJu IC0xCi1AQCAtNTksMTIgKzU2LDYgQEAgc2V0IGRlYnVnaW5mb2RfZGVidWdkaXIgW3N0YW5kYXJk X291dHB1dF9maWxlICJkZWJ1ZyJdCi0gcmVtb3RlX2V4ZWMgYnVpbGQgIm1rZGlyICRkZWJ1Z2lu Zm9kX2RlYnVnZGlyIgotIHJlbW90ZV9leGVjIGJ1aWxkICJtdiAkZGVidWdmaWxlICRkZWJ1Z2lu Zm9kX2RlYnVnZGlyIgotIAotLSMgVGhpcyBpcyBCSU5GSUxFIHdpdGggdGhlIGRlYnVnIGluZm9y bWF0aW9uIHJlbW92ZWQuICBXZSBhcmUgZ29pbmcgdG8KLS0jIHBsYWNlIHRoaXMgaW4gdGhlIEJV SUxEX0lEX0RFQlVHX0ZJTEUgbG9jYXRpb24sIHRoaXMgd291bGQgdXN1YWxseQotLSMgcmVwcmVz ZW50IGEgbWlzdGFrZSBieSB0aGUgdXNlciwgYW5kIHdpbGwgdHJpZ2dlciBhIHdhcm5pbmcgZnJv bQotLSMgR0RCLCB0aGlzIGlzIHRoZSB3YXJuaW5nIHdlIGFyZSBjaGVja2luZyBmb3IuCi0tc2V0 IHN0cmlwcGVkX2JpbmZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxlICIke2JpbmZpbGV9LnN0cmlw cGVkIl0KLS0KLSAjIENyZWF0ZSB0aGUgLmJ1aWxkLWlkL1BSRUZJWCBkaXJlY3RvcnkgbmFtZSBm cm9tCi0gIyAuYnVpbGQtaWQvUFJFRklYL1NVRkZJWC5kZWJ1ZyBmaWxlbmFtZS4KLSBzZXQgZGVi dWdkaXIgW2ZpbGUgZGlybmFtZSAke2J1aWxkX2lkX2RlYnVnX2ZpbGV9XQotQEAgLTc2LDcgKzY3 LDcgQEAgcmVtb3RlX2V4ZWMgYnVpbGQgIm1rZGlyIC1wICRkZWJ1Z2RpciIKLSAjIGluZm9ybWF0 aW9uLCB3aGljaCB3aWxsIHBvaW50IGJhY2sgYXQgdGhpcyBmaWxlLCB3aGljaCBhbHNvIGRvZXNu J3QKLSAjIGhhdmUgZGVidWcgaW5mb3JtYXRpb24sIHdoaWNoIGNvdWxkIGNhdXNlIGEgbG9vcC4g IEJ1dCBHREIgd2lsbCBzcG90Ci0gIyB0aGlzIGFuZCBnaXZlIGEgd2FybmluZy4KLS1yZW1vdGVf ZXhlYyBidWlsZCAibXYgJHtzdHJpcHBlZF9iaW5maWxlfSAke2J1aWxkX2lkX2RlYnVnX2ZpbGV9 IgotK3JlbW90ZV9leGVjIGJ1aWxkICJtdiAke2JpbmZpbGV9ICR7YnVpbGRfaWRfZGVidWdfZmls ZX0iCi0gCi0gIyBOb3cgc3RhcnQgR0RCLgotIGNsZWFuX3Jlc3RhcnQKLWRpZmYgLS1naXQgYS9n ZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTEuYyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMS5jCi1uZXcg ZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu ZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0xLmMKLUBAIC0wLDAgKzEsMjQgQEAKLSsv KiBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0r Ci0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rLyogVGhpcyBpcyBpbiB0 aGUgc2hhcmVkIGxpYnJhcnkuICAqLwotK2V4dGVybiBpbnQgZm9vICh2b2lkKTsKLSsKLStpbnQK LSttYWluICh2b2lkKQotK3sKLSsgIGludCByZXMgPSBmb28gKCk7Ci0rICByZXR1cm4gcmVzOwot K30KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1h cHBlZC1maWxlLTIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFw cGVkLWZpbGUtMi5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0yLmMKLUBA IC0wLDAgKzEsMjIgQEAKLSsvKiBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0r Ci0rdm9sYXRpbGUgaW50ICpsaWJyYXJ5X3B0ciA9IChpbnQgKikgUE9JTlRFUl9WQUxVRTsKLSsK LStpbnQKLStmb28gKHZvaWQpCi0rewotKyAgcmV0dXJuICpsaWJyYXJ5X3B0cjsKLSt9Ci1kaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmls ZS0zLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxl LTMuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0 c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMy5jCi1AQCAtMCwwICsx LDQ1IEBACi0rLyogQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu Ci0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNpbmNs dWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjaW5jbHVkZSA8ZmNudGwu aD4KLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0rI2lu Y2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgotKwotK3ZvbGF0aWxlIHZv aWQqIGxpYnJhcnlfYmFzZV9hZGRyZXNzID0gMDsKLSt2b2xhdGlsZSBpbnQgKnB0ciA9IDA7Ci0r Ci0raW50Ci0rbWFpbiAoKQotK3sKLSsgIHN0cnVjdCBzdGF0IGJ1ZjsKLSsgIGludCByZXM7Ci0r Ci0rICBpbnQgZmQgPSBvcGVuIChTSExJQl9GSUxFTkFNRSwgT19SRE9OTFkpOwotKyAgYXNzZXJ0 IChmZCAhPSAtMSk7Ci0rCi0rICByZXMgPSBmc3RhdCAoZmQsICZidWYpOwotKyAgYXNzZXJ0IChy ZXMgPT0gMCk7Ci0rCi0rICBsaWJyYXJ5X2Jhc2VfYWRkcmVzcwotKyAgICA9IG1tYXAgKE5VTEws IGJ1Zi5zdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7Ci0rCi0rICByZXMg PSAqcHRyOwkvKiBVbmRlZmluZWQgYmVoYXZpb3VyIGhlcmUuICAqLwotKwotKyAgcmV0dXJuIDA7 Ci0rfQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUt bWFwcGVkLWZpbGUuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1t YXBwZWQtZmlsZS5leHAKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLmV4cAot QEAgLTAsMCArMSwzODAgQEAKLSsjIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKLSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0rIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyMg VGhpcyB0ZXN0IGNoZWNrcyBHREIncyBhYmlsaXR5IHRvIHVzZSBidWlsZC1pZHMgd2hlbiBzZXR0 aW5nIHVwIGZpbGUgYmFja2VkCi0rIyBtYXBwaW5ncyBhcyBwYXJ0IG9mIHJlYWRpbmcgYSBjb3Jl LWZpbGUuCi0rIwotKyMgQSBjb3JlLWZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBmaWxlcyB0 aGF0IHdlcmUgbWFwcGVkIGludG8gdGhlIHByb2Nlc3MKLSsjIGF0IHRoZSB0aW1lIG9mIHRoZSBj b3JlLWZpbGUgY3JlYXRpb24uICBJZiB0aGUgZmlsZSB3YXMgbWFwcGVkIHJlYWQtb25seQotKyMg dGhlbiB0aGUgZmlsZSBjb250ZW50cyB3aWxsIG5vdCBiZSBwcmVzZW50IGluIHRoZSBjb3JlLWZp bGUsIGJ1dCBpbnN0ZWFkIEdEQgotKyMgaXMgZXhwZWN0ZWQgdG8gb3BlbiB0aGUgbWFwcGVkIGZp bGUgYW5kIHJlYWQgdGhlIGNvbnRlbnRzIGZyb20gdGhlcmUgaWYKLSsjIG5lZWRlZC4gIEFuZCB0 aGlzIGlzIHdoYXQgR0RCIGRvZXMuCi0rIwotKyMgR0RCICh2aWEgdGhlIEJGRCBsaWJyYXJ5KSB3 aWxsIGFsc28gc3BvdCBpZiBhIG1hcHBlZCBsb29rcyBsaWtlIGEgdmFsaWQgRUxGCi0rIyBhbmQg Y29udGFpbnMgYSBidWlsZC1pZCwgdGhpcyBidWlsZC1pZCBpcyBwYXNzZWQgYmFjayB0byBHREIg c28gdGhhdCBHREIgY2FuCi0rIyB2YWxpZGF0ZSB0aGUgb24tZGlzayBmaWxlIGl0IGZpbmRzIG1h dGNoZXMgdGhlIGZpbGUgdGhhdCB3YXMgbWFwcGVkIHdoZW4gdGhlCi0rIyBjb3JlLWZpbGUgd2Fz IGNyZWF0ZWQuCi0rIwotKyMgSW4gYWRkaXRpb24sIGlmIHRoZSBvbi1kaXNrIGZpbGUgaXMgZm91 bmQgdG8gaGF2ZSBhIG5vbi1tYXRjaGluZyBidWlsZC1pZAotKyMgdGhlbiBHREIgY2FuIHVzZSBk ZWJ1Z2luZm9kIHRvICh0cnkpIGFuZCBkb3dubG9hZCBhIHN1aXRhYmxlIGZpbGUuCi0rIwotKyMg VGhpcyB0ZXN0IGlzIGFib3V0IGNoZWNraW5nIHRoYXQgdGhpcyBmaWxlIGJhY2tlZCBtYXBwaW5n IG1lY2hhbmlzbSB3b3JrcwotKyMgY29ycmVjdGx5OyB0aGF0IEdEQiB3aWxsIHNwb3Qgd2hlbiB0 aGUgYnVpbGQtaWRzIGZhaWwgdG8gbWF0Y2ggYW5kIHdpbGwKLSsjIHJlZnVzZSB0byBsb2FkIGFu IGluY29ycmVjdCBmaWxlLiAgQWRkaXRpb25hbGx5IHdlIGNoZWNrIHRoYXQgdGhlIGNvcnJlY3QK LSsjIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBkZWJ1Z2luZm9kLgotKyMKLSsjIFRoZSB0 ZXN0IGlzIHJhdGhlciBjb250cml2ZWQgdGhvdWdoLiAgSW5zdGVhZCBvZiByZWx5aW5nIG9uIGhh dmluZyBhIHNoYXJlZAotKyMgbGlicmFyeSBtYXBwZWQgYXQgdGhlIHRpbWUgb2YgY3Jhc2ggd2Ug bW1hcCBhIHNoYXJlZCBsaWJyYXJ5IGludG8gdGhlCi0rIyBwcm9jZXNzIGFuZCB0aGVuIGNoZWNr IHRoaXMgbWFwcGluZyB3aXRoaW4gdGhlIHRlc3QuCi0rIwotKyMgVGhlIHByb2JsZW0gd2l0aCB1 c2luZyBhIG5vcm1hbCBzaGFyZWQgbGlicmFyeSBsb2FkIGZvciB0aGlzIHRlc3QgaXMgdGhhdAot KyMgdGhlIHNoYXJlZCBsaWJyYXJ5IGxpc3QgaXMgcHJvY2Vzc2VkIGFzIHBhcnQgb2YgYSBzZXBh cmF0ZSBzdGVwIHdoZW4gb3BlbmluZwotKyMgdGhlIGNvcmUgZmlsZS4gIFJpZ2h0IG5vdyB0aGlz IHNlcGFyYXRlIHN0ZXAgZG9lc24ndCBjaGVjayB0aGUgYnVpbGQtaWRzCi0rIyBjb3JyZWN0bHks IHNvIEdEQiB3aWxsIHBvdGVudGlhbGx5IG9wZW4gdGhlIHdyb25nIHNoYXJlZCBsaWJyYXJ5IGZp bGUuICBUaGUKLSsjIHNlY3Rpb25zIG9mIHRoaXMgaW5jb3JyZWN0IHNoYXJlZCBsaWJyYXJ5IGFy ZSB0aGVuIGFkZGVkIHRvIEdEQidzIGxpc3Qgb2YKLSsjIHRhcmdldCBzZWN0aW9ucywgYW5kIGFy ZSB1c2VkIHRvIHNhdGlzZnkgbWVtb3J5IHJlYWRzLCB3aGljaCBjYW4gZ2l2ZSB0aGUKLSsjIHdy b25nIHJlc3VsdHMuCi0rIwotKyMgVGhpcyBvYnZpb3VzbHkgbmVlZHMgZml4aW5nLCBidXQgaXMg YSBzZXBhcmF0ZSBwcm9ibGVtIGZyb20gdGhlIG9uZSBiZWluZwotKyMgdGVzdGVkIGhlcmUsIHNv IHRoaXMgdGVzdCBkZWxpYmVyYXRlbHkgY2hlY2tzIHRoZSBtYXBwaW5nIHVzaW5nIGEgZmlsZSB0 aGF0Ci0rIyBpcyBtbWFwZWQgcmF0aGVyIHRoYW4gbG9hZGVkIGFzIGEgc2hhcmVkIGxpYnJhcnks IGFzIHN1Y2ggdGhlIGZpbGUgaXMgaW4gdGhlCi0rIyBjb3JlLWZpbGVzIGxpc3Qgb2YgbWFwcGVk IGZpbGVzLCBidXQgaXMgbm90IGluIHRoZSBzaGFyZWQgbGlicmFyeSBsaXN0LgotKyMKLSsjIERl c3BpdGUgdGhpcyB0ZXN0IGxpdmluZyBpbiB0aGUgZ2RiLmRlYnVnaW5mb2QvIGRpcmVjdG9yeSwg b25seSB0aGUgbGFzdAotKyMgcGFydCBvZiB0aGlzIHRlc3QgYWN0dWFsbHkgdXNlcyBkZWJ1Z2lu Zm9kLCBldmVyeXRoaW5nIHVwIHRvIHRoYXQgcG9pbnQgaXMKLSsjIHByZXR0eSBnZW5lcmljLgot KwotK3JlcXVpcmUgeyFpc19yZW1vdGUgaG9zdH0KLStyZXF1aXJlIHshaXNfcmVtb3RlIHRhcmdl dH0KLSsKLStsb2FkX2xpYiBkZWJ1Z2luZm9kLXN1cHBvcnQuZXhwCi0rCi0rcmVxdWlyZSBhbGxv d19zaGxpYl90ZXN0cwotKwotK3N0YW5kYXJkX3Rlc3RmaWxlIC0xLmMgLTIuYyAtMy5jCi0rCi0r IyBDb21waWxlIGFuIGV4ZWN1dGFibGUgdGhhdCBsb2FkcyB0aGUgc2hhcmVkIGxpYnJhcnkgYXMg YW4gYWN0dWFsCi0rIyBzaGFyZWQgbGlicmFyeSwgdGhlbiB1c2UgR0RCIHRvIGZpZ3VyZSBvdXQg dGhlIG9mZnNldCBvZiB0aGUKLSsjIHZhcmlhYmxlICdsaWJyYXJ5X3B0cicgd2l0aGluIHRoZSBs aWJyYXJ5LgotK3NldCBsaWJyYXJ5X2ZpbGVuYW1lIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAibGli Zm9vLnNvIl0KLStzZXQgYmluZmlsZTIgW3N0YW5kYXJkX291dHB1dF9maWxlICJsaWJyYXJ5X2xv YWRlciJdCi0rCi0raWYge1twcmVwYXJlX2Zvcl90ZXN0aW5nX2Z1bGwgImJ1aWxkIGV4ZWMgd2hp Y2ggbG9hZHMgdGhlIHNoYXJlZCBsaWJyYXJ5IiBcCi0rCSBbbGlzdCAkbGlicmFyeV9maWxlbmFt ZSBcCi0rCSAgICAgIHsgZGVidWcgc2hsaWIgYnVpbGQtaWQgXAotKwkJICAgIGFkZGl0aW9uYWxf ZmxhZ3M9LURQT0lOVEVSX1ZBTFVFPTB4MTIzNDU2NzggfSBcCi0rCSAgICAgICRzcmNmaWxlMiB7 fV0gXAotKwkgW2xpc3QgJGJpbmZpbGUyIFtsaXN0IGRlYnVnIHNobGliPSRsaWJyYXJ5X2ZpbGVu YW1lIF0gXAotKwkgICAgICAkc3JjZmlsZSB7IGRlYnVnIH1dXSAhPSAwfSB7Ci0rICAgIHJldHVy bgotK30KLSsKLStpZiB7IVtydW50b19tYWluXX0gewotKyAgICByZXR1cm4KLSt9Ci0rCi0raWYg eyBbaXNfYWRkcmVzc196ZXJvX3JlYWRhYmxlXSB9IHsKLSsgICAgcmV0dXJuCi0rfQotKwotK3Nl dCBwdHJfYWRkcmVzcyBbZ2V0X2hleGFkZWNpbWFsX3ZhbHVlb2YgIiZsaWJyYXJ5X3B0ciIgInVu a25vd24iXQotKwotK3NldCBwdHJfb2Zmc2V0ICJ1bmtub3duIgotK2dkYl90ZXN0X211bHRpcGxl ICJpbmZvIHByb2MgbWFwcGluZ3MiICIiIHsKLSsgICAgLXJlICJeXFxzKygkaGV4KVxccysoJGhl eClcXHMrJGhleFxccysoJGhleClcW15cclxuXF0rJGxpYnJhcnlfZmlsZW5hbWVcclxuIiB7Ci0r CXNldCBsb3dfYWRkciAkZXhwZWN0X291dCgxLHN0cmluZykKLSsJc2V0IGhpZ2hfYWRkciAkZXhw ZWN0X291dCgyLHN0cmluZykKLSsJc2V0IGZpbGVfb2Zmc2V0ICRleHBlY3Rfb3V0KDMsc3RyaW5n KQotKwotKwlpZiB7W2V4cHIgJHB0cl9hZGRyZXNzID49ICRsb3dfYWRkcl0gJiYgW2V4cHIgJHB0 cl9hZGRyZXNzIDwgJGhpZ2hfYWRkcl19IHsKLSsJICAgIHNldCBtYXBwaW5nX29mZnNldCBbZXhw ciAkcHRyX2FkZHJlc3MgLSAkbG93X2FkZHJdCi0rCSAgICBzZXQgcHRyX29mZnNldCBbZm9ybWF0 IDB4JXggW2V4cHIgJGZpbGVfb2Zmc2V0ICsgJG1hcHBpbmdfb2Zmc2V0XV0KLSsJfQotKwotKwll eHBfY29udGludWUKLSsgICAgfQotKwotKyAgICAtcmUgIl4kZ2RiX3Byb21wdCAkIiB7Ci0rICAg IH0KLSsKLSsgICAgLXJlICIoXlxbXlxyXG5cXSopXHJcbiIgewotKwlzZXQgdG1wICRleHBlY3Rf b3V0KDEsc3RyaW5nKQotKwlleHBfY29udGludWUKLSsgICAgfQotK30KLSsKLStnZGJfYXNzZXJ0 IHsgJHB0cl9vZmZzZXQgbmUgInVua25vd24iIH0gXAotKyAgICAiZm91bmQgcG9pbnRlciBvZmZz ZXQiCi0rCi0rc2V0IHB0cl9zaXplIFtnZXRfaW50ZWdlcl92YWx1ZW9mICJzaXplb2YgKGxpYnJh cnlfcHRyKSIgInVua25vd24iXQotK3NldCBwdHJfZm9ybWF0X2NoYXIgIiIKLStpZiB7ICRwdHJf c2l6ZSA9PSAyIH0gewotKyAgICBzZXQgcHRyX2Zvcm1hdF9jaGFyICJiIgotK30gZWxzZWlmIHsg JHB0cl9zaXplID09IDQgfSB7Ci0rICAgIHNldCBwdHJfZm9ybWF0X2NoYXIgInciCi0rfSBlbHNl aWYgeyAkcHRyX3NpemUgPT0gOCB9IHsKLSsgICAgc2V0IHB0cl9mb3JtYXRfY2hhciAiZyIKLSt9 Ci0raWYgeyAkcHRyX2Zvcm1hdF9jaGFyIGVxICIiIH0gewotKyAgICB1bnRlc3RlZCAiY291bGQg bm90IGZpZ3VyZSBvdXQgc2l6ZSBvZiBsaWJyYXJ5X3B0ciB2YXJpYWJsZSIKLSsgICAgcmV0dXJu Ci0rfQotKwotKyMgSGVscGVyIHByb2MgdG8gcmVhZCBhIHZhbHVlIGZyb20gaW5mZXJpb3IgbWVt b3J5LiAgUmVhZHMgYXQgYWRkcmVzcyBoZWxkIGluCi0rIyBnbG9iYWwgUFRSX0FERFJFU1MsIGFu ZCB1c2UgUFRSX0ZPUk1BVF9DSEFSIGZvciB0aGUgc2l6ZSBvZiB0aGUgcmVhZC4KLStwcm9jIHJl YWRfcHRyX3ZhbHVlIHsgfSB7Ci0rICAgIHNldCB2YWx1ZSAiIgotKyAgICBnZGJfdGVzdF9tdWx0 aXBsZSAieC8xJHs6OnB0cl9mb3JtYXRfY2hhcn14ICR7OjpwdHJfYWRkcmVzc30iICIiIHsKLSsJ LXJlIC13cmFwICJeJHs6OmhleH0oPzpcXHMrPFxbXj5cXSs+KT86XFxzKygkOjpoZXgpIiB7Ci0r CSAgICBzZXQgdmFsdWUgJGV4cGVjdF9vdXQoMSxzdHJpbmcpCi0rCX0KLSsJLXJlIC13cmFwICJe JHs6OmhleH0oPzpcXHMrPFxbXj5cXSs+KT86XFxzK0Nhbm5vdCBhY2Nlc3MgbWVtb3J5IGF0IGFk ZHJlc3MgJHs6OmhleH0iIHsKLSsJICAgIHNldCB2YWx1ZSAidW5hdmFpbGFibGUiCi0rCX0KLSsg ICAgfQotKyAgICByZXR1cm4gJHZhbHVlCi0rfQotKwotK3NldCBwdHJfZXhwZWN0ZWRfdmFsdWUg W3JlYWRfcHRyX3ZhbHVlXQotK2lmIHsgJHB0cl9leHBlY3RlZF92YWx1ZSBlcSAiIiB9IHsKLSsg ICAgdW50ZXN0ZWQgImNvdWxkIG5vdCBmaW5kIGV4cGVjdGVkIHZhbHVlIGZvciBsaWJyYXJ5X3B0 ciIKLSsgICAgcmV0dXJuCi0rfQotKwotKyMgTm93IGNvbXBpbGUgYSBzZWNvbmQgZXhlY3V0YWJs ZS4gIFRoaXMgb25lIGRvZXNuJ3QgbG9hZCB0aGUgc2hhcmVkCi0rIyBsaWJyYXJ5IGFzIGFuIGFj dHVhbCBzaGFyZWQgbGlicmFyeSwgYnV0IGluc3RlYWQgbW1hcHMgdGhlIGxpYnJhcnkKLSsjIGlu dG8gdGhlIGV4ZWN1dGFibGUuCi0rIwotKyMgTG9hZCB0aGlzIGV4ZWN1dGFibGUgd2l0aGluIEdE QiBhbmQgY29uZmlybSB0aGF0IHdlIGNhbiB1c2UgdGhlCi0rIyBvZmZzZXQgd2UgY2FsY3VsYXRl ZCBwcmV2aW91c2x5IHRvIHZpZXcgdGhlIHZhbHVlIG9mICdsaWJyYXJ5X3B0cicuCi0rc2V0IG9w dHMgW2xpc3QgZGVidWcgYWRkaXRpb25hbF9mbGFncz0tRFNITElCX0ZJTEVOQU1FPVwiJGxpYnJh cnlfZmlsZW5hbWVcIl0KLStpZiB7W3ByZXBhcmVfZm9yX3Rlc3RpbmcgInByZXBhcmUgc2Vjb25k IGV4ZWN1dGFibGUiICRiaW5maWxlIFwKLSsJICRzcmNmaWxlMyAkb3B0c10gIT0gMH0gewotKyAg ICByZXR1cm4KLSt9Ci0rCi0raWYgeyFbcnVudG9fbWFpbl19IHsKLSsgICAgcmV0dXJuCi0rfQot KwotK2dkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJVbmRlZmluZWQgYmVoYXZp b3VyIGhlcmUiICRzcmNmaWxlM10KLStnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAicnVuIHRv IGJyZWFrcG9pbnQiCi0rCi0rc2V0IGxpYnJhcnlfYmFzZV9hZGRyZXNzIFwKLSsgICAgW2dldF9o ZXhhZGVjaW1hbF92YWx1ZW9mICJsaWJyYXJ5X2Jhc2VfYWRkcmVzcyIgInVua25vd24iXQotK3Nl dCBwdHJfYWRkcmVzcyBbZm9ybWF0IDB4JXggW2V4cHIgJGxpYnJhcnlfYmFzZV9hZGRyZXNzICsg JHB0cl9vZmZzZXRdXQotKwotK3NldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQotK2dkYl9h c3NlcnQgeyAkcHRyX3ZhbHVlID09ICRwdHJfZXhwZWN0ZWRfdmFsdWUgfSBcCi0rICAgICJjaGVj ayB2YWx1ZSBvZiBwb2ludGVyIHZhcmlhYmxlIgotKwotKyMgTm93IHJlcnVuIHRoZSBzZWNvbmQg ZXhlY3V0YWJsZSBvdXRzaWRlIG9mIEdEQi4gIFRoZSBleGVjdXRhYmxlIHNob3VsZCBjcmFzaAot KyMgYW5kIGdlbmVyYXRlIGEgY29yZWZpbGUuCi0rc2V0IGNvcmVmaWxlIFtjb3JlX2ZpbmQgJGJp bmZpbGVdCi0raWYgeyRjb3JlZmlsZSBlcSAiIn0gewotKyAgICB1bnRlc3RlZCAiY291bGQgbm90 IGdlbmVyYXRlIGNvcmUgZmlsZSIKLSsgICAgcmV0dXJuCi0rfQotKwotKyMgTG9hZCBhIGNvcmUg ZmlsZSBmcm9tIHRoZSBnbG9iYWwgQ09SRUZJTEUuICBVc2UgVEVTVE5BTUUgYXMgdGhlIG5hbWUK LSsjIG9mIHRoZSB0ZXN0LgotKyMKLSsjIElmIExJTkVfUkUgaXMgbm90IHRoZSBlbXB0eSBzdHJp bmcgdGhlbiB0aGlzIGlzIGEgcmVnZXhwIGZvciBhIGxpbmUKLSsjIHRoYXQgd2UgZXhwZWN0IHRv IHNlZSBpbiB0aGUgb3V0cHV0IHdoZW4gbG9hZGluZyB0aGUgY29yZSBmaWxlLCBpZgotKyMgdGhl IGxpbmUgaXMgbm90IHByZXNlbnQgdGhlbiB0aGlzIHRlc3Qgd2lsbCBmYWlsLgotKyMKLSsjIEFu eSBsaW5lcyBiZWdpbm5pbmcgd2l0aCAnd2FybmluZzogJyB3aWxsIGNhdXNlIHRoaXMgdGVzdCB0 byBmYWlsLgotKyMKLSsjIEEgY291cGxlIG9mIG90aGVyIHN0YW5kYXJkIGxpbmVzIHRoYXQgYXJl IHByb2R1Y2VkIHdoZW4gbG9hZGluZyBhCi0rIyBjb3JlIGZpbGUgYXJlIGFsc28gY2hlY2tlZCBm b3IsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZpbGUKLSsjIGxvYWRpbmcgaGFzIHByb2dy ZXNzZWQgYXMgZXhwZWN0ZWQuCi0rcHJvYyBsb2FkX2NvcmVfZmlsZSB7IHRlc3RuYW1lIHsgbGlu ZV9yZSAiIiB9IH0gewotKyAgICBzZXQgY29kZSB7fQotKwotKyAgICBpZiB7ICRsaW5lX3JlIG5l ICIiIH0gewotKwlhcHBlbmQgY29kZSB7Ci0rCSAgICAtcmUgIl4kbGluZV9yZVxyXG4iIHsKLSsJ CXNldCBzYXdfZXhwZWN0ZWRfbGluZSB0cnVlCi0rCQlleHBfY29udGludWUKLSsJICAgIH0KLSsJ fQotKwlzZXQgc2F3X2V4cGVjdGVkX2xpbmUgZmFsc2UKLSsgICAgfSBlbHNlIHsKLSsJc2V0IHNh d19leHBlY3RlZF9saW5lIHRydWUKLSsgICAgfQotKwotKyAgICBzZXQgc2F3X3Vua25vd25fd2Fy bmluZyBmYWxzZQotKyAgICBzZXQgc2F3X2dlbmVyYXRlZF9ieV9saW5lIGZhbHNlCi0rICAgIHNl dCBzYXdfcHJvZ190ZXJtaW5hdGVkX2xpbmUgZmFsc2UKLSsKLSsgICAgYXBwZW5kIGNvZGUgewot KwktcmUgIl53YXJuaW5nOiBcW15cclxuXF0rXHJcbiIgewotKwkgICAgc2V0IHNhd191bmtub3du X3dhcm5pbmcgdHJ1ZQotKwkgICAgZXhwX2NvbnRpbnVlCi0rCX0KLSsKLSsJLXJlICJeQ29yZSB3 YXMgZ2VuZXJhdGVkIGJ5IFxbXlxyXG5cXStcclxuIiB7Ci0rCSAgICBzZXQgc2F3X2dlbmVyYXRl ZF9ieV9saW5lIHRydWUKLSsJICAgIGV4cF9jb250aW51ZQotKwl9Ci0rCi0rCS1yZSAiXlByb2dy YW0gdGVybWluYXRlZCB3aXRoIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHRcXC5c clxuIiB7Ci0rCSAgICBzZXQgc2F3X3Byb2dfdGVybWluYXRlZF9saW5lIHRydWUKLSsJICAgIGV4 cF9jb250aW51ZQotKwl9Ci0rCi0rCS1yZSAiXiQ6OmdkYl9wcm9tcHQgJCIgewotKwkgICAgZ2Ri X2Fzc2VydCB7JHNhd19nZW5lcmF0ZWRfYnlfbGluZSBcCi0rCQkJICAgICYmICRzYXdfcHJvZ190 ZXJtaW5hdGVkX2xpbmUgXAotKwkJCSAgICAmJiAkc2F3X2V4cGVjdGVkX2xpbmUgXAotKwkJCSAg ICAmJiAhJHNhd191bmtub3duX3dhcm5pbmd9IFwKLSsJCSRnZGJfdGVzdF9uYW1lCi0rCX0KLSsK LSsJLXJlICJeXFteXHJcblxdKlxyXG4iIHsKLSsJICAgIGV4cF9jb250aW51ZQotKwl9Ci0rICAg IH0KLSsKLSsgICAgc2V0IHJlcyBbY2F0Y2ggeyByZXR1cm4gW2dkYl90ZXN0X211bHRpcGxlICJj b3JlLWZpbGUgJDo6Y29yZWZpbGUiIFwKLSsJCQkJICIkdGVzdG5hbWUiICRjb2RlXSB9IHN0cmlu Z10KLSsKLSsgICAgaWYgeyRyZXMgPT0gMX0gewotKwlnbG9iYWwgZXJyb3JJbmZvIGVycm9yQ29k ZQotKwlyZXR1cm4gLWNvZGUgZXJyb3IgLWVycm9yaW5mbyAkZXJyb3JJbmZvIC1lcnJvcmNvZGUg JGVycm9yQ29kZSAkc3RyaW5nCi0rICAgIH0gZWxzZWlmIHskcmVzID09IDJ9IHsKLSsJcmV0dXJu ICRzdHJpbmcKLSsgICAgfSBlbHNlIHsKLSsJIyBXZSBleHBlY3QgUkVTIHRvIGJlIDIgKFRDTF9S RVRVUk4pIG9yIDEgKFRDTF9FUlJPUikuICBJZiB3ZSBnZXQKLSsJIyBoZXJlIHRoZW4gc29tZWhv dyB0aGUgJ2NhdGNoJyBhYm92ZSBmaW5pc2hlZCB3aXRob3V0IGhpdHRpbmcKLSsJIyBlaXRoZXIg b2YgdGhvc2UgY2FzZXMsIHdoaWNoIGlzIC4uLi4gd2VpcmQuCi0rCXBlcnJvciAidW5leGVwY3Rl ZCByZXR1cm4gdmFsdWUsIGNvZGUgPSAkcmVzLCB2YWx1ZSA9ICRzdHJpbmciCi0rCXJldHVybiAt MQotKyAgICB9Ci0rfQotKwotKyMgQW5kIG5vdyByZXN0YXJ0IEdEQiwgbG9hZCB0aGUgY29yZS1m aWxlIGFuZCBjaGVjayB0aGF0IHRoZSBsaWJyYXJ5IHNob3dzIGFzCi0rIyBiZWluZyBtYXBwZWQg aW4sIGFuZCB0aGF0IHdlIGNhbiBzdGlsbCByZWFkIHRoZSBsaWJyYXJ5X3B0ciB2YWx1ZSBmcm9t Ci0rIyBtZW1vcnkuCi0rY2xlYW5fcmVzdGFydCAkYmluZmlsZQotKwotK2xvYWRfY29yZV9maWxl ICJsb2FkIGNvcmUgZmlsZSIKLSsKLStzZXQgbGlicmFyeV9iYXNlX2FkZHJlc3MgW2dldF9oZXhh ZGVjaW1hbF92YWx1ZW9mICJsaWJyYXJ5X2Jhc2VfYWRkcmVzcyIgXAotKwkJCSAgICAgICJ1bmtu b3duIiAiZ2V0IGxpYnJhcnlfYmFzZV9hZGRyZXNzIGluIGNvcmUtZmlsZSJdCi0rc2V0IHB0cl9h ZGRyZXNzIFtmb3JtYXQgMHgleCBbZXhwciAkbGlicmFyeV9iYXNlX2FkZHJlc3MgKyAkcHRyX29m ZnNldF1dCi0rCi0rc2V0IHB0cl92YWx1ZSBbcmVhZF9wdHJfdmFsdWVdCi0rZ2RiX2Fzc2VydCB7 ICRwdHJfdmFsdWUgPT0gJHB0cl9leHBlY3RlZF92YWx1ZSB9IFwKLSsgICAgImNoZWNrIHZhbHVl IG9mIHBvaW50ZXIgdmFyaWFibGUgZnJvbSBjb3JlLWZpbGUiCi0rCi0rIyBOb3cgbW92ZSB0aGUg c2hhcmVkIGxpYnJhcnkgZmlsZSBhd2F5IGFuZCByZXN0YXJ0IEdEQi4gIFRoaXMgdGltZSB3aGVu IHdlCi0rIyBsb2FkIHRoZSBjb3JlLWZpbGUgd2Ugc2hvdWxkIHNlZSBhIHdhcm5pbmcgdGhhdCBH REIgaGFzIGZhaWxlZCB0byBtYXAgaW4gdGhlCi0rIyBsaWJyYXJ5IGZpbGUuICBBbiBhdHRlbXB0 IHRvIHJlYWQgdGhlIHZhcmlhYmxlIGZyb20gdGhlIGxpYnJhcnkgZmlsZSBzaG91bGQKLSsjIGZh aWwgLyBnaXZlIGEgd2FybmluZy4KLStzZXQgbGlicmFyeV9iYWNrdXBfZmlsZW5hbWUgW3N0YW5k YXJkX291dHB1dF9maWxlICJsaWJmb28uc28uYmFja3VwIl0KLStyZW1vdGVfZXhlYyBidWlsZCAi bXYgXCIkbGlicmFyeV9maWxlbmFtZVwiIFwiJGxpYnJhcnlfYmFja3VwX2ZpbGVuYW1lXCIiCi0r Ci0rY2xlYW5fcmVzdGFydCAkYmluZmlsZQotKwotK2xvYWRfY29yZV9maWxlICJsb2FkIGNvcmVm aWxlIHdpdGggbGlicmFyeSBmaWxlIG1pc3NpbmciIFwKLSsgICAgIndhcm5pbmc6IENhbid0IG9w ZW4gZmlsZSBbc3RyaW5nX3RvX3JlZ2V4cCAkbGlicmFyeV9maWxlbmFtZV0gZHVyaW5nIGZpbGUt YmFja2VkIG1hcHBpbmcgbm90ZSBwcm9jZXNzaW5nIgotKwotK3NldCBwdHJfdmFsdWUgW3JlYWRf cHRyX3ZhbHVlXQotK2dkYl9hc3NlcnQgeyAkcHRyX3ZhbHVlIGVxICJ1bmF2YWlsYWJsZSIgfSBc Ci0rICAgICJjaGVjayB2YWx1ZSBvZiBwb2ludGVyIGlzIHVuYXZhaWxhYmxlIHdpdGggbGlicmFy eSBmaWxlIG1pc3NpbmciCi0rCi0rIyBOb3cgc3ltbGluayB0aGUgLmJ1aWxkLWlkL3h4L3h4eC4u Lnh4eCBmaWxlbmFtZSB3aXRoaW4gdGhlIGRlYnVnCi0rIyBkaXJlY3RvcnkgdG8gbGlicmFyeSB3 ZSBqdXN0IG1vdmVkIGFzaWRlLiAgUmVzdGFydCBHREIgYW5kIHNldHVwIHRoZQotKyMgZGVidWct ZmlsZS1kaXJlY3RvcnkgYmVmb3JlIGxvYWRpbmcgdGhlIGNvcmUgZmlsZS4KLSsjCi0rIyBHREIg c2hvdWxkIGxvb2t1cCB0aGUgZmlsZSB0byBtYXAgdmlhIHRoZSBidWlsZC1pZCBsaW5rIGluIHRo ZQotKyMgLmJ1aWxkLWlkLyBkaXJlY3RvcnkuCi0rc2V0IGRlYnVnZGlyIFtzdGFuZGFyZF9vdXRw dXRfZmlsZSAiZGVidWdkaXIiXQotK3NldCBidWlsZF9pZF9maWxlbmFtZSBcCi0rICAgICRkZWJ1 Z2Rpci9bYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0ICRsaWJyYXJ5X2JhY2t1cF9maWxlbmFt ZSAiIl0KLSsKLStyZW1vdGVfZXhlYyBidWlsZCAibWtkaXIgLXAgW2ZpbGUgZGlybmFtZSAkYnVp bGRfaWRfZmlsZW5hbWVdIgotK3JlbW90ZV9leGVjIGJ1aWxkICJsbiAtc2YgJGxpYnJhcnlfYmFj a3VwX2ZpbGVuYW1lICRidWlsZF9pZF9maWxlbmFtZSIKLSsKLStjbGVhbl9yZXN0YXJ0ICRiaW5m aWxlCi0rCi0rZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkgJGRl YnVnZGlyIiBcCi0rICAgICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkiCi0rCi0rbG9hZF9jb3Jl X2ZpbGUgImxvYWQgY29yZWZpbGUsIGxvb2t1cCBpbiBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKLSsK LStzZXQgcHRyX3ZhbHVlIFtyZWFkX3B0cl92YWx1ZV0KLStnZGJfYXNzZXJ0IHsgJHB0cl92YWx1 ZSA9PSAkcHRyX2V4cGVjdGVkX3ZhbHVlIH0gXAotKyAgICAiY2hlY2sgdmFsdWUgb2YgcG9pbnRl ciB2YXJpYWJsZSBmcm9tIGNvcmUtZmlsZSwgbG9va3VwIGluIGRlYnVnLWZpbGUtZGlyZWN0b3J5 IgotKwotKyMgQnVpbGQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgc2hhcmVkIGxpYnJhcnksIGtlZXAg dGhlIGxpYnJhcnkgdGhlIHNhbWUgc2l6ZSwKLSsjIGJ1dCBjaGFuZ2UgdGhlIGNvbnRlbnRzIHNv IHRoZSBidWlsZC1pZCBjaGFuZ2VzLiAgVGhlbiByZXN0YXJ0IEdEQiBhbmQgbG9hZAotKyMgdGhl IGNvcmUtZmlsZSBhZ2Fpbi4gIEdEQiBzaG91bGQgc3BvdCB0aGF0IHRoZSBidWlsZC1pZCBmb3Ig dGhlIHNoYXJlZAotKyMgbGlicmFyeSBpcyBub3QgYXMgZXhwZWN0ZWQsIGFuZCBzaG91bGQgcmVm dXNlIHRvIG1hcCBpbiB0aGUgc2hhcmVkIGxpYnJhcnkuCi0raWYge1tidWlsZF9leGVjdXRhYmxl ICJidWlsZCBzZWNvbmQgdmVyc2lvbiBvZiBzaGFyZWQgbGlicmFyeSIgXAotKwkgJGxpYnJhcnlf ZmlsZW5hbWUgJHNyY2ZpbGUyIFwKLSsJIHsgZGVidWcgc2hsaWIgYnVpbGQtaWQgXAotKwkgICAg ICAgYWRkaXRpb25hbF9mbGFncz0tRFBPSU5URVJfVkFMVUU9MHgxMTIyMzM0NCB9XSAhPSAwfSB7 Ci0rICAgIHJldHVybgotK30KLSsKLStjbGVhbl9yZXN0YXJ0ICRiaW5maWxlCi0rCi0rbG9hZF9j b3JlX2ZpbGUgImxvYWQgY29yZWZpbGUgd2l0aCB3cm9uZyBsaWJyYXJ5IGluIHBsYWNlIiBcCi0r ICAgICJ3YXJuaW5nOiBGaWxlIFtzdHJpbmdfdG9fcmVnZXhwICRsaWJyYXJ5X2ZpbGVuYW1lXSBk b2Vzbid0IG1hdGNoIGJ1aWxkLWlkIGZyb20gY29yZS1maWxlIGR1cmluZyBmaWxlLWJhY2tlZCBt YXBwaW5nIHByb2Nlc3NpbmciCi0rCi0rc2V0IHB0cl92YWx1ZSBbcmVhZF9wdHJfdmFsdWVdCi0r Z2RiX2Fzc2VydCB7ICRwdHJfdmFsdWUgZXEgInVuYXZhaWxhYmxlIiB9IFwKLSsgICAgImNoZWNr IHZhbHVlIG9mIHBvaW50ZXIgaXMgdW5hdmFpbGFibGUgd2l0aCB3cm9uZyBsaWJyYXJ5IGluIHBs YWNlIgotKwotKyMgU2V0dXAgYSBkZWJ1Z2luZm9kIHNlcnZlciB3aGljaCBjYW4gc2VydmUgdGhl IG9yaWdpbmFsIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCi0rIyBUaGVuIHJlc3RhcnQgR0RCIGFuZCBs b2FkIHRoZSBjb3JlLWZpbGUuICBHREIgc2hvdWxkIGRvd25sb2FkIHRoZSBvcmlnaW5hbAotKyMg c2hhcmVkIGxpYnJhcnkgZnJvbSBkZWJ1Z2luZm9kIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIHRo ZSBmaWxlIGJhY2tlZAotKyMgbWFwcGluZy4KLStpZiB7IVthbGxvd19kZWJ1Z2luZm9kX3Rlc3Rz XX0gewotKyAgICB1bnRlc3RlZCAic2tpcHBpZyBkZWJ1Z2luZm9kIHBhcnRzIG9mIHRoaXMgdGVz dCIKLSsgICAgcmV0dXJuCi0rfQotKwotK3NldCBzZXJ2ZXJfZGlyIFtzdGFuZGFyZF9vdXRwdXRf ZmlsZSAiZGVidWdpbmZvZC5zZXJ2ZXIiXQotK2ZpbGUgbWtkaXIgJHNlcnZlcl9kaXIKLStmaWxl IHJlbmFtZSAtZm9yY2UgJGxpYnJhcnlfYmFja3VwX2ZpbGVuYW1lICRzZXJ2ZXJfZGlyCi0rCi0r cHJlcGFyZV9mb3JfZGVidWdpbmZvZCBjYWNoZSBkYgotKwotK3NldCB1cmwgW3N0YXJ0X2RlYnVn aW5mb2QgJGRiICRzZXJ2ZXJfZGlyXQotK2lmIHsgJHVybCBlcSAiIiB9IHsKLSsgICAgdW5yZXNv bHZlZCAiZmFpbGVkIHRvIHN0YXJ0IGRlYnVnaW5mb2Qgc2VydmVyIgotKyAgICByZXR1cm4KLSt9 Ci0rCi0rd2l0aF9kZWJ1Z2luZm9kX2VudiAkY2FjaGUgewotKyAgICBzZXRlbnYgREVCVUdJTkZP RF9VUkxTICR1cmwKLSsKLSsgICAgY2xlYW5fcmVzdGFydAotKyAgICBnZGJfdGVzdF9ub19vdXRw dXQgInNldCBkZWJ1Z2luZm9kIGVuYWJsZWQgb24iIFwKLSsJImVuYWJsZWQgZGVidWdpbmZvZCBm b3IgaW5pdGlhbCB0ZXN0IgotKyAgICBnZGJfbG9hZCAkYmluZmlsZQotKwotKyAgICBsb2FkX2Nv cmVfZmlsZSAibG9hZCBjb3JlZmlsZSwgZG93bmxvYWQgbGlicmFyeSBmcm9tIGRlYnVnaW5mb2Qi IFwKLSsJIkRvd25sb2FkaW5nXFteXHJcblxdKiBmaWxlIFtzdHJpbmdfdG9fcmVnZXhwICRsaWJy YXJ5X2ZpbGVuYW1lXVxcLlxcLlxcLiIKLSsKLSsgICAgc2V0IHB0cl92YWx1ZSBbcmVhZF9wdHJf dmFsdWVdCi0rICAgIGdkYl9hc3NlcnQgeyAkcHRyX3ZhbHVlID09ICRwdHJfZXhwZWN0ZWRfdmFs dWUgfSBcCi0rCSJjaGVjayB2YWx1ZSBvZiBwb2ludGVyIHZhcmlhYmxlIGFmdGVyIGRvd25sb2Fk aW5nIGxpYnJhcnkgZmlsZSIKLSt9Ci0rCi0rc3RvcF9kZWJ1Z2luZm9kCi1kaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS0xLmMgYi9nZGIv dGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL3NvbGliLXdpdGgtc29uYW1lLTEuYwotbmV3IGZpbGUg bW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVn aW5mb2Qvc29saWItd2l0aC1zb25hbWUtMS5jCi1AQCAtMCwwICsxLDM5IEBACi0rLyogQ29weXJp Z2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsK LSsvKiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVzZSB0d28gdmFyaWFibGVzIGhhdmUgbmFtZXMg b2YgdGhlIHNhbWUgbGVuZ3RoCi0rICAgc28gdGhhdCB0aGUgZGVidWcgaW5mb3JtYXRpb24gaW4g dGhlIHR3byBsaWJyYXJ5IHZlcnNpb25zIGlzIGxhaWQgb3V0Ci0rICAgdGhlIHNhbWUuICBJZiB0 aGV5IGRpZmZlciB0aGVuIHRoZSAuZHluYW1pYyBzZWN0aW9uIG1pZ2h0IG1vdmUsIHdoaWNoCi0r ICAgd2lsbCB0cmlnZ2VyIGEgZGlmZmVyZW50IGNoZWNrIHdpdGhpbiBHREIgdGhhbiB0aGUgb25l IHdlIGFjdHVhbGx5IHdhbnQKLSsgICB0byBjaGVjay4gICovCi0rCi0rI2lmIExJQl9WRVJTSU9O ID09IDEKLSt2b2xhdGlsZSBpbnQgKmxpYnJhcnlfMV92YXIgPSAodm9sYXRpbGUgaW50ICopIDB4 MTIzNDU2Nzg7Ci0rI2VsaWYgTElCX1ZFUlNJT04gPT0gMgotK3ZvbGF0aWxlIGludCAqbGlicmFy eV8yX3ZhciA9ICh2b2xhdGlsZSBpbnQgKikgMHgxMTIyMzM0NDsKLSsjZWxzZQotKyMgZXJyb3Ig VW5rbm93biBsaWJyYXJ5IHZlcnNpb24KLSsjZW5kaWYKLSsKLStpbnQKLStmb28gKHZvaWQpCi0r ewotKyAgLyogVGhpcyBzaG91bGQgdHJpZ2dlciBhIGNvcmUgZHVtcC4gICovCi0rICBhYm9ydCAo KTsKLSsKLSsgIHJldHVybiAwOwotK30KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5k ZWJ1Z2luZm9kL3NvbGliLXdpdGgtc29uYW1lLTIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVn aW5mb2Qvc29saWItd2l0aC1zb25hbWUtMi5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9k ZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNv bmFtZS0yLmMKLUBAIC0wLDAgKzEsNDEgQEAKLSsvKiBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot KwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCi0rCi0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxkbGZjbi5oPgot KyNpbmNsdWRlIDxzdGRkZWYuaD4KLSsKLSsvKiBUaGlzIGlzIGluIHRoZSBzaGFyZWQgbGlicmFy eS4gICovCi0rZXh0ZXJuIGludCBmb28gKHZvaWQpOwotKwotKy8qIFRoaXMgaXMgdXBkYXRlZCBi eSB0aGUgLmV4cCBmaWxlLiAgKi8KLStjaGFyICpsaWJuYW1lID0gImxpYmZvb18yLnNvIjsKLSsK LStpbnQKLSttYWluICh2b2lkKQotK3sKLSsgIHZvaWQgKmhhbmRsZTsKLSsgIGludCByZXMsIHRt cDsKLSsKLSsgIGhhbmRsZSA9IGRsb3BlbiAobGlibmFtZSwgUlRMRF9MQVpZKTsKLSsgIGFzc2Vy dCAoaGFuZGxlICE9IE5VTEwpOwotKwotKyAgcmVzID0gZm9vICgpOwotKwotKyAgdG1wID0gZGxj bG9zZSAoaGFuZGxlKTsKLSsgIGFzc2VydCAodG1wID09IDApOwotKwotKyAgcmV0dXJuIHJlczsK LSt9Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRo LXNvbmFtZS5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL3NvbGliLXdpdGgtc29u YW1lLmV4cAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWItd2l0aC1zb25hbWUuZXhwCi1AQCAtMCwwICsx LDI5MCBAQAotKyMgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu Ci0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rIyBUaGlzIHRlc3Qg ZXhlcmNpc2VzIEdEQidzIGFiaWxpdHkgdG8gdmFsaWRhdGUgYnVpbGQtaWRzIHdoZW4gbG9hZGlu ZwotKyMgc2hhcmVkIGxpYnJhcmllcyBmb3IgYSBjb3JlIGZpbGUuCi0rIwotKyMgVGhlIHRlc3Qg Y3JlYXRlcyB0d28gInZlcnNpb25zIiBvZiBhIHNoYXJlZCBsaWJyYXJ5LCBzZXRzIHVwIGEKLSsj IHN5bWxpbmsgdG8gcG9pbnQgdG8gb25lIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGFuZCBjcmVh dGVzIGEgY29yZSBmaWxlLgotKyMKLSsjIFdlIHRoZW4gdHJ5IHJlLWxvYWRpbmcgdGhlIGNvcmUg ZmlsZSBhbmQgZXhlY3V0YWJsZSBhbmQgY2hlY2sgdGhhdAotKyMgR0RCIGlzIGFibGUgdG8gY29y cmVjdGx5IGxvYWQgdGhlIHNoYXJlZCBsaWJyYXJ5LiAgVG8gY29uZnVzZSB0aGluZ3MKLSsjIHdl IHJldGFyZ2V0IHRoZSBsaWJyYXJ5IHN5bWxpbmsgYXQgdGhlIG90aGVyIHZlcnNpb24gb2YgdGhl IGxpYnJhcnkuCi0rIwotKyMgQWZ0ZXIgdGhhdCB3ZSByZXBlYXQgdGhlIHRlc3QsIGJ1dCB0aGlz IHRpbWUgZGVsZXRpbmcgdGhlIHN5bWxpbmsKLSsjIGNvbXBsZXRlbHkuCi0rIwotKyMgVGhlbiB3 ZSByZW1vdmUgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgY29tcGxldGVseSwgYXQgdGhpcyBw b2ludAotKyMgd2UgZG8gZXhwZWN0IEdEQiB0byBnaXZlIGEgd2FybmluZyBhYm91dCBiZWluZyB1 bmFibGUgdG8gbG9hZCB0aGUgbGlicmFyeS4KLSsjCi0rIyBBbmQgZmluYWxseSwgd2Ugc2V0dXAg ZGVidWdpbmZvZCBhbmQgaGF2ZSBpdCBzZXJ2ZSB0aGUgbWlzc2luZwotKyMgbGlicmFyeSBmaWxl LCBHREIgc2hvdWxkIGNvcnJlY3RseSBkb3dubG9hZCB0aGUgbGlicmFyeSBmaWxlLgotKyMKLSsj IERlc3BpdGUgdGhpcyB0ZXN0IGxpdmluZyBpbiB0aGUgZ2RiLmRlYnVnaW5mb2QvIGRpcmVjdG9y eSwgb25seSB0aGUgbGFzdAotKyMgcGFydCBvZiB0aGlzIHRlc3QgYWN0dWFsbHkgdXNlcyBkZWJ1 Z2luZm9kLCBldmVyeXRoaW5nIHVwIHRvIHRoYXQgcG9pbnQgaXMKLSsjIHByZXR0eSBnZW5lcmlj LgotKwotK2xvYWRfbGliIGRlYnVnaW5mb2Qtc3VwcG9ydC5leHAKLSsKLStyZXF1aXJlIGFsbG93 X3NobGliX3Rlc3RzCi0rcmVxdWlyZSB7aXN0YXJnZXQgIiotbGludXgqIn0KLStyZXF1aXJlIHsh aXNfcmVtb3RlIGhvc3R9Ci0rcmVxdWlyZSB7IXVzaW5nX2Zpc3Npb259Ci0rCi0rc3RhbmRhcmRf dGVzdGZpbGUgLTEuYyAtMi5jCi0rCi0rIyBCdWlsZCB0d28gc2ltaWxhciwgYnV0IHNsaWdodGx5 IGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2hhcmVkCi0rIyBsaWJyYXJ5LiAgQm90aCBsaWJy YXJpZXMgaGF2ZSBEVF9TT05BTUUgc2V0IHRvIHRoZSBnZW5lcmljCi0rIyBsaWJmb28uc28sIHdl J2xsIGNyZWF0ZSBhIHN5bWxpbmsgd2l0aCB0aGF0IG5hbWUgbGF0ZXIuCi0rc2V0IGxpYnJhcnlf MV9maWxlbmFtZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImxpYmZvb18xLnNvIl0KLStzZXQgbGli cmFyeV8yX2ZpbGVuYW1lIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAibGliZm9vXzIuc28iXQotKwot KyMgVGhlIGdlbmVyaWMgbmFtZSBmb3IgdGhlIGxpYnJhcnkuCi0rc2V0IGxpYnJhcnlfZmlsZW5h bWUgW3N0YW5kYXJkX291dHB1dF9maWxlICJsaWJmb28uc28iXQotKwotKyMgV2hlbiBjb21waWxp bmcgYSBzaGFyZWQgbGlicmFyeSB0aGUgLVdsLC1zb25hbWUsTkFNRSBvcHRpb24gaXMKLSsjIGF1 dG9tYXRpY2FsbHkgYWRkZWQgYmFzZWQgb24gdGhlIGZpbmFsIG5hbWUgb2YgdGhlIGxpYnJhcnku ICBXZSB3YW50Ci0rIyB0byBjb21waWxlIGxpYmZvb18xLnNvLCBidXQgc2V0IHRoZSBzb25hbWUg dG8gbGliZm9vLnNvLiAgVG8gYWNoaWV2ZQotKyMgdGhpcyB3ZSBmaXJzdCBjb21waWxlIGludG8g bGliZm9vLnNvLCBhbmQgdGhlbiByZW5hbWUgdGhlIGxpYnJhcnkgdG8KLSsjIGxpYmZvb18xLnNv LgotK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQgbGliZm9vXzEuc28iICRsaWJyYXJ5X2Zp bGVuYW1lIFwKLSsJICRzcmNmaWxlIFwKLSsJICAgICAgeyBkZWJ1ZyBzaGxpYiBidWlsZC1pZCBc Ci0rCQkgICAgYWRkaXRpb25hbF9mbGFncz0tRExJQl9WRVJTSU9OPTEgfV0gPT0gLTF9IHsKLSsg ICAgcmV0dXJuCi0rfQotK3JlbW90ZV9leGVjIGJ1aWxkICJtdiAke2xpYnJhcnlfZmlsZW5hbWV9 ICR7bGlicmFyeV8xX2ZpbGVuYW1lfSIKLSsKLSsjIFNlZSB0aGUgY29tbWVudCBhYm92ZSwgYnV0 IHRoaXMgdGltZSB3ZSByZW5hbWUgdG8gbGliZm9vXzIuc28uCi0raWYge1tidWlsZF9leGVjdXRh YmxlICJidWlsZCBsaWJmb29fMi5zbyIgJGxpYnJhcnlfZmlsZW5hbWUgXAotKwkgJHNyY2ZpbGUg XAotKwkgICAgICB7IGRlYnVnIHNobGliIGJ1aWxkLWlkIFwKLSsJCSAgICBhZGRpdGlvbmFsX2Zs YWdzPS1ETElCX1ZFUlNJT049MiB9XSA9PSAtMX0gewotKyAgICByZXR1cm4KLSt9Ci0rcmVtb3Rl X2V4ZWMgYnVpbGQgIm12ICR7bGlicmFyeV9maWxlbmFtZX0gJHtsaWJyYXJ5XzJfZmlsZW5hbWV9 IgotKwotKyMgQ3JlYXRlIGxpYmZvby5zbyBzeW1saW5rIHRvIHRoZSBsaWJmb29fMS5zbyBsaWJy YXJ5LiAgSWYgdGhpcwotKyMgc3ltbGluayBjcmVhdGlvbiBmYWlscyB0aGVuIHdlIGFzc3VtZSB3 ZSBjYW4ndCBjcmVhdGUgc3ltbGlua3Mgb24KLSsjIHRoaXMgaG9zdC4gIElmIHRoaXMgc3VjY2Vl ZHMgdGhlbiBsYXRlciBzeW1saW5rIGNyZWF0aW9uIGlzIHJlcXVpcmVkCi0rIyB0byBzdWNjZWVk LCBhbmQgd2lsbCB0cmlnZ2VyIGFuIEZBSUwgaWYgaXQgZG9lc24ndC4KLStzZXQgc3RhdHVzIFwK LSsgICAgW3JlbW90ZV9leGVjIGJ1aWxkIFwKLSsJICJsbiAtc2YgJHtsaWJyYXJ5XzFfZmlsZW5h bWV9ICR7bGlicmFyeV9maWxlbmFtZX0iXQotK2lmIHtbbGluZGV4ICRzdGF0dXMgMF0gIT0gMH0g ewotKyAgICB1bnN1cHBvcnRlZCAiaG9zdCBkb2VzIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtz IgotKyAgICByZXR1cm4KLSt9Ci0rCi0rIyBCdWlsZCB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgbGlu a3MgYWdhaW5zdCBsaWJmb28uc28sIHdoaWNoIGlzCi0rIyBwb2luaW5nIGF0IGxpYmZvb18xLnNv LiAgSnVzdCB0byBjb25mdXNlIHRoaW5ncyBldmVuIG1vcmUsIHRoaXMKLSsjIGV4ZWN1dGFibGUg dXNlcyBkbG9wZW4gdG8gbG9hZCBsaWJmb29fMi5zby4gIFdlaXJkIQotK2lmIHsgW2J1aWxkX2V4 ZWN1dGFibGUgImJ1aWxkIGV4ZWN1dGFibGUiICR7YmluZmlsZX0gJHtzcmNmaWxlMn0gXAotKwkg IFtsaXN0IGRlYnVnIHNobGliPSR7bGlicmFyeV9maWxlbmFtZX0gc2hsaWJfbG9hZF1dID09IC0x IH0gewotKyAgICByZXR1cm4KLSt9Ci0rCi0rIyBJZiB0aGUgYm9hcmQgZmlsZSBpcyBhdXRvbWF0 aWNhbGx5IHNwbGl0dGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24KLSsjIGludG8gYSBzZXBhcmF0 ZSBmaWxlIChlLmcuIHRoZSBjYy13aXRoLWdudS1kZWJ1Z2xpbmsuZXhwIGJvYXJkKSB0aGVuCi0r IyB0aGlzIHRlc3QgaXNuJ3QgZ29pbmcgdG8gd29yay4KLStjbGVhbl9yZXN0YXJ0Ci0rZ2RiX2Zp bGVfY21kICRiaW5maWxlCi0raWYgeyRnZGJfZmlsZV9jbWRfZGVidWdfaW5mbyBuZSAiZGVidWci fSB7Ci0rICAgIHVuc3VwcG9ydGVkICJmYWlsZWQgdG8gZmluZCBkZWJ1ZyBpbmZvcm1hdGlvbiIK LSsgICAgcmV0dXJuCi0rfQotK2lmIHtbcmVnZXhwICIke3Rlc3RmaWxlfS5kZWJ1ZyIgJGdkYl9m aWxlX2NtZF9tc2ddfSB7Ci0rICAgIHVuc3VwcG9ydGVkICJkZWJ1ZyBpbmZvcm1hdGlvbiBoYXMg YmVlbiBzcGxpdCB0byBhIHNlcGFyYXRlIGZpbGUiCi0rICAgIHJldHVybgotK30KLSsKLSsjIFJ1 biBCSU5GSUxFIHdoaWNoIHdpbGwgZ2VuZXJhdGUgYSBjb3JlZmlsZS4KLStzZXQgY29yZWZpbGUg W2NvcmVfZmluZCAkYmluZmlsZV0KLStpZiB7JGNvcmVmaWxlIGVxICIifSB7Ci0rICAgIHVudGVz dGVkICJjb3VsZCBub3QgZ2VuZXJhdGUgY29yZSBmaWxlIgotKyAgICByZXR1cm4KLSt9Ci0rCi0r IyBIZWxwZXIgcHJvYyB0byBsb2FkIGdsb2JhbCBCSU5GSUxFIGFuZCB0aGVuIGxvYWQgZ2xvYmFs IENPUkVGSUxFLgotKyMKLSsjIElmIEVYUEVDVF9XQVJOSU5HIGlzIHRydWUgdGhlbiB3ZSByZXF1 aXJlIGEgd2FybmluZyBhYm91dCBiZWluZwotKyMgdW5hYmxlIHRvIGxvYWQgdGhlIHNoYXJlZCBs aWJyYXJ5IHN5bWJvbHMsIG90aGVyd2lzZSwgRVhQRUNUX1dBUk5JTkcKLSsjIGlzIGZhbHNlIGFu ZCB3ZSByZXF1aXJlIG5vIHdhcm5pbmcuCi0rIwotKyMgSWYgRVhQRUNUX0RPV05MT0FEIGlzIHRy dWUgdGhlbiB3ZSByZXF1aXJlIGEgbGluZSBpbmRpY2F0aW5nIHRoYXQKLSsjIHRoZSBzaGFyZWQg bGlicmFyeSBpcyBiZWluZyBkb3dubG9hZGVkIGZyb20gZGVidWdpbmZvZCwgb3RoZXJ3aXNlCi0r IyB0aGUgc2hhcmVkIGxpYnJhcnkgc2hvdWxkIG5vdCBiZSBkb3dubG9hZGVkLgotKyMKLSsjIElm IERFQlVHRElSIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nIHRoZW4gJ2RlYnVnLWZpbGUtZGlyZWN0 b3J5JyBpcwotKyMgc2V0IHRvIHRoZSB2YWx1ZSBvZiBERUJVR0RJUi4KLStwcm9jIGxvYWRfZXhl Y19hbmRfY29yZV9maWxlIHsgZXhwZWN0X3dhcm5pbmcgZXhwZWN0X2Rvd25sb2FkIHRlc3RuYW1l IFwKLSsJCQkJICAge2RlYnVnZGlyICIifSB9IHsKLSsgICAgd2l0aF90ZXN0X3ByZWZpeCAkdGVz dG5hbWUgewotKwljbGVhbl9yZXN0YXJ0ICQ6OmJpbmZpbGUKLSsKLSsJaWYgeyAkZGVidWdkaXIg bmUgIiIgfSB7Ci0rCSAgICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVj dG9yeSAkZGVidWdkaXIiIFwKLSsJCSJzZXQgZGVidWcgZGlyZWN0b3J5IgotKwl9Ci0rCi0rCXNl dCBzYXdfd2FybmluZyBmYWxzZQotKwlzZXQgc2F3X2Rvd25sb2FkIGZhbHNlCi0rCXNldCBzYXdf Z2VuZXJhdGVkIGZhbHNlCi0rCXNldCBzYXdfdGVybWluYXRlZCBmYWxzZQotKwotKwlnZGJfdGVz dF9tdWx0aXBsZSAiY29yZS1maWxlICQ6OmNvcmVmaWxlIiAibG9hZCBjb3JlIGZpbGUiIHsKLSsJ ICAgIC1yZSAiXkNvcmUgd2FzIGdlbmVyYXRlZCBieSBcW15cclxuXF0rXHJcbiIgewotKwkJc2V0 IHNhd19nZW5lcmF0ZWQgdHJ1ZQotKwkJZXhwX2NvbnRpbnVlCi0rCSAgICB9Ci0rCSAgICAtcmUg Il5Qcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBzaWduYWwgXFteXHJcblxdK1xyXG4iIHsKLSsJCXNl dCBzYXdfdGVybWluYXRlZCB0cnVlCi0rCQlleHBfY29udGludWUKLSsJICAgIH0KLSsJICAgIC1y ZSAiXndhcm5pbmc6IENhbid0IG9wZW4gZmlsZSBcW15cclxuXF0rIGR1cmluZyBmaWxlLWJhY2tl ZCBtYXBwaW5nIG5vdGUgcHJvY2Vzc2luZ1xyXG4iIHsKLSsJCSMgSWdub3JlIHdhcm5pbmdzIGZy b20gdGhlIGZpbGUgYmFja2VkIG1hcHBpbmcgcGhhc2UuCi0rCQlleHBfY29udGludWUKLSsJICAg IH0KLSsJICAgIC1yZSAiXndhcm5pbmc6IENvdWxkIG5vdCBsb2FkIHNoYXJlZCBsaWJyYXJ5IHN5 bWJvbHMgZm9yIFxbXlxyXG5cXSsvbGliZm9vXFwuc29cXC5cclxuIiB7Ci0rCQlzZXQgc2F3X3dh cm5pbmcgdHJ1ZQotKwkJZXhwX2NvbnRpbnVlCi0rCSAgICB9Ci0rCSAgICAtcmUgIl5Eb3dubG9h ZGluZyBmaWxlIFxbXlxyXG5cXSsvbGliZm9vXzFcXC5zb1xcLlxcLlxcLlxyXG4iIHsKLSsJCXNl dCBzYXdfZG93bmxvYWQgdHJ1ZQotKwkJZXhwX2NvbnRpbnVlCi0rCSAgICB9Ci0rCSAgICAtcmUg Il4kOjpnZGJfcHJvbXB0ICQiIHsKLSsJCWdkYl9hc3NlcnQgeyAkc2F3X2dlbmVyYXRlZCAmJiAk c2F3X3Rlcm1pbmF0ZWQgXAotKwkJCQkgJiYgJHNhd193YXJuaW5nID09ICRleHBlY3Rfd2Fybmlu ZyBcCi0rCQkJCSAmJiAkc2F3X2Rvd25sb2FkID09ICRleHBlY3RfZG93bmxvYWQgfSBcCi0rCQkg ICAgJGdkYl90ZXN0X25hbWUKLSsJICAgIH0KLSsJICAgIC1yZSAiXlxbXlxyXG5cXSpcclxuIiB7 Ci0rCQlleHBfY29udGludWUKLSsJICAgIH0KLSsJfQotKwotKwkjIElmIHdlIGRvbid0IGV4cGVj dCBhIHdhcm5pbmcgdGhlbiBkZWJ1ZyBzeW1ib2xzIGZyb20gdGhlCi0rCSMgc2hhcmVkIGxpYnJh cnkgc2hvdWxkIGJlIGF2YWlsYWJsZS4gIENvbmZpcm0gd2UgY2FuIHJlYWQgYQotKwkjIHZhcmlh YmxlIGZyb20gdGhlIHNoYXJlZCBsaWJyYXJ5LiAgSWYgd2UgZG8gZXhwZWN0IGEgd2FybmluZwot KwkjIHRoZW4gdGhlIHNoYXJlZCBsaWJyYXJ5IGRlYnVnIHN5bWJvbHMgaGF2ZSBub3QgbG9hZGVk LCBhbmQKLSsJIyB0aGUgbGlicmFyeSB2YXJpYWJsZSBzaG91bGQgbm90IGJlIGF2YWlsYWJsZS4K LSsJaWYgeyAhJGV4cGVjdF93YXJuaW5nIH0gewotKwkgICAgZ2RiX3Rlc3QgInByaW50L3ggbGli cmFyeV8xX3ZhciIgIiA9IDB4MTIzNDU2NzgiIFwKLSsJCSJjaGVjayBsaWJyYXJ5XzFfdmFyIGNh biBiZSByZWFkIgotKwl9IGVsc2UgewotKwkgICAgZ2RiX3Rlc3QgInByaW50L3ggbGlicmFyeV8x X3ZhciIgXAotKwkJIl5ObyBzeW1ib2wgXCJsaWJyYXJ5XzFfdmFyXCIgaW4gY3VycmVudCBjb250 ZXh0XFwuIiBcCi0rCQkiY2hlY2sgbGlicmFyeV8xX3ZhciBjYW5ub3QgYmUgcmVhZCIKLSsJfQot KyAgICB9Ci0rfQotKwotKyMgSW5pdGlhbCB0ZXN0LCBqdXN0IGxvYWQgdGhlIGV4ZWN1dGFibGUg YW5kIGNvcmUgZmlsZS4gIEF0IHRoaXMgcG9pbnQKLSsjIGV2ZXJ5dGhpbmcgc2hvdWxkIGxvYWQg ZmluZSBhcyBldmVyeXRoaW5nIGlzIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kCi0rIyBpdC4KLSts b2FkX2V4ZWNfYW5kX2NvcmVfZmlsZSBmYWxzZSBmYWxzZSBcCi0rICAgICJsb2FkIGNvcmUgZmls ZSwgYWxsIGxpYnJhcmllcyBhcyBleHBlY3RlZCIKLSsKLSsjIFVwZGF0ZSBsaWJmb28uc28gc3lt bGluayB0byBwb2ludCBhdCB0aGUgc2Vjb25kIGxpYnJhcnkgdGhlbiByZWxvYWQKLSsjIHRoZSBj b3JlIGZpbGUuICBHREIgc2hvdWxkIHNwb3QgdGhhdCB0aGUgc3ltbGluayBwb2ludHMgdG8gdGhl IHdyb25nCi0rIyBmaWxlLCBidXQgc2hvdWxkIGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgY29y cmVjdCBmaWxlIHRvIGxvYWQgYXMKLSsjIHRoZSByaWdodCBmaWxlIHdpbGwgYmUgaW4gdGhlIG1h cHBlZCBmaWxlIGxpc3QuCi0rc2V0IHN0YXR1cyBbcmVtb3RlX2V4ZWMgYnVpbGQgXAotKwkJImxu IC1zZiAke2xpYnJhcnlfMl9maWxlbmFtZX0gJHtsaWJyYXJ5X2ZpbGVuYW1lfSJdCi0rZ2RiX2Fz c2VydCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAwIH0gXAotKyAgICAidXBkYXRlIGxpYnJhcnkg c3ltbGluayB0byBwb2ludCB0byB0aGUgd3JvbmcgZmlsZSIKLSsKLStsb2FkX2V4ZWNfYW5kX2Nv cmVfZmlsZSBmYWxzZSBmYWxzZSBcCi0rICAgICJsb2FkIGNvcmUgZmlsZSwgc3ltbGluayBwb2lu dHMgdG8gd3JvbmcgZmlsZSIKLSsKLSsjIFJlbW92ZSBsaWJmb28uc28gc3ltbGluayBhbmQgcmVs b2FkIHRoZSBjb3JlIGZpbGUuICBBcyBpbiB0aGUKLSsjIHByZXZpb3VzIHRlc3QgR0RCIHNob3Vs ZCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgZmlsZSB0bwotKyMgbG9hZCBhcyB0 aGUgY29ycmVjdCBmaWxlIHdpbGwgc3RpbGwgYXBwZWFyIGluIHRoZSBtYXBwZWQgZmlsZSBsaXN0 LgotK3NldCBzdGF0dXMgW3JlbW90ZV9leGVjIGJ1aWxkICJybSAtZiAke2xpYnJhcnlfZmlsZW5h bWV9Il0KLStnZGJfYXNzZXJ0IHsgW2xpbmRleCAkc3RhdHVzIDBdID09IDAgfSAicmVtb3ZlIGxp YnJhcnkgc3ltbGluayIKLSsKLStsb2FkX2V4ZWNfYW5kX2NvcmVfZmlsZSBmYWxzZSBmYWxzZSBc Ci0rICAgICJsb2FkIGNvcmUgZmlsZSwgc3ltbGluayByZW1vdmVkIgotKwotKyMgUmVtb3ZlIExJ QlJBUllfMV9GSUxFTkFNRS4gIFdlJ2xsIG5vdyBzZWUgYSB3YXJuaW5nIHRoYXQgdGhlIG1hcHBl ZAotKyMgZmlsZSBjYW4ndCBiZSBsb2FkZWQgKHdlIGlnbm9yZSB0aGF0IHdhcm5pbmcpLCBhbmQg d2UnbGwgc2VlIGEKLSsjIHdhcm5pbmcgdGhhdCB0aGUgc2hhcmVkIGxpYnJhcnkgY2FuJ3QgYmUg bG9hZGVkLgotK3NldCBsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICR7bGlicmFyeV8xX2ZpbGVu YW1lfS5iYWNrdXAKLStzZXQgc3RhdHVzIFwKLSsgICAgW3JlbW90ZV9leGVjIGJ1aWxkIFwKLSsJ ICJtdiAke2xpYnJhcnlfMV9maWxlbmFtZX0gJHtsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lfSJd Ci0rZ2RiX2Fzc2VydCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAwIH0gXAotKyAgICAicmVtb3Zl IGxpYmZvb18xLnNvIgotKwotK2xvYWRfZXhlY19hbmRfY29yZV9maWxlIHRydWUgZmFsc2UgXAot KyAgICAibG9hZCBjb3JlIGZpbGUsIGxpYmZvb18xLnNvIHJlbW92ZWQiCi0rCi0rIyBTeW1saW5r IHRoZSAuYnVpbGQtaWQveHgveHh4Li4ueHh4IGZpbGVuYW1lIHdpdGhpbiB0aGUgZGVidWcKLSsj IGRpcmVjdG9yeSB0byBMSUJSQVJZXzFfQkFDS1VQX0ZJTEVOQU1FLCBub3cgd2hlbiB3ZSByZXN0 YXJ0IEdEQiBpdAotKyMgc2hvdWxkIGZpbmQgdGhlIG1pc3NpbmcgbGlicmFyeSB3aXRoaW4gdGhl IGRlYnVnIGRpcmVjdG9yeS4KLStzZXQgZGVidWdkaXIgW3N0YW5kYXJkX291dHB1dF9maWxlICJk ZWJ1Z2RpciJdCi0rc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFwKLSsgICAgJGRlYnVnZGlyL1tidWls ZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgJGxpYnJhcnlfMV9iYWNrdXBfZmlsZW5hbWUgIiJdCi0r c2V0IHN0YXR1cyBcCi0rICAgIFtyZW1vdGVfZXhlYyBidWlsZCBcCi0rCSAibWtkaXIgLXAgW2Zp bGUgZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5hbWVdIl0KLStnZGJfYXNzZXJ0IHsgW2xpbmRleCAk c3RhdHVzIDBdID09IDAgfSBcCi0rICAgICJjcmVhdGUgc3ViLWRpcmVjdG9yeSB3aXRoaW4gdGhl IGRlYnVnIGRpcmVjdG9yeSIKLStzZXQgc3RhdHVzIFwKLSsgICAgW3JlbW90ZV9leGVjIGJ1aWxk IFwKLSsJICJsbiAtc2YgJGxpYnJhcnlfMV9iYWNrdXBfZmlsZW5hbWUgJGJ1aWxkX2lkX2ZpbGVu YW1lIl0KLStnZGJfYXNzZXJ0IHsgW2xpbmRleCAkc3RhdHVzIDBdID09IDAgfSBcCi0rICAgICJj cmVhdGUgc3ltbGluayB3aXRoaW4gdGhlIGRlYnVnIGRpcmVjdG9yeSAiCi0rCi0rbG9hZF9leGVj X2FuZF9jb3JlX2ZpbGUgZmFsc2UgZmFsc2UgXAotKyAgICAibG9hZCBjb3JlIGZpbGUsIGZpbmQg bGliZm9vXzEuc28gdGhyb3VnaCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIgXAotKyAgICAkZGVidWdk aXIKLSsKLSsjIFNldHVwIGEgZGVidWdpbmZvZCBzZXJ2ZXIgd2hpY2ggY2FuIHNlcnZlIHRoZSBv cmlnaW5hbCBzaGFyZWQKLSsjIGxpYnJhcnkgZmlsZS4KLStpZiB7IVthbGxvd19kZWJ1Z2luZm9k X3Rlc3RzXX0gewotKyAgICB1bnRlc3RlZCAic2tpcHBpZyBkZWJ1Z2luZm9kIHBhcnRzIG9mIHRo aXMgdGVzdCIKLSsgICAgcmV0dXJuCi0rfQotKwotK3NldCBzZXJ2ZXJfZGlyIFtzdGFuZGFyZF9v dXRwdXRfZmlsZSAiZGVidWdpbmZvZC5zZXJ2ZXIiXQotK2ZpbGUgbWtkaXIgJHNlcnZlcl9kaXIK LStmaWxlIHJlbmFtZSAtZm9yY2UgJGxpYnJhcnlfMV9iYWNrdXBfZmlsZW5hbWUgJHNlcnZlcl9k aXIKLSsKLStwcmVwYXJlX2Zvcl9kZWJ1Z2luZm9kIGNhY2hlIGRiCi0rCi0rc2V0IHVybCBbc3Rh cnRfZGVidWdpbmZvZCAkZGIgJHNlcnZlcl9kaXJdCi0raWYgeyAkdXJsIGVxICIiIH0gewotKyAg ICB1bnJlc29sdmVkICJmYWlsZWQgdG8gc3RhcnQgZGVidWdpbmZvZCBzZXJ2ZXIiCi0rICAgIHJl dHVybgotK30KLSsKLSt3aXRoX2RlYnVnaW5mb2RfZW52ICRjYWNoZSB7Ci0rICAgIHNldGVudiBE RUJVR0lORk9EX1VSTFMgJHVybAotKwotKyAgICBzYXZlX3ZhcnMgeyBHREJGTEFHUyB9IHsKLSsJ YXBwZW5kIEdEQkZMQUdTICIgLWV4IFwic2V0IGRlYnVnaW5mb2QgZW5hYmxlZCBvblwiIgotKwot KwkjIFJlbG9hZCB0aGUgZXhlY3V0YWJsZSBhbmQgY29yZSBmaWxlLiAgR0RCIHNob3VsZCBkb3du bG9hZAotKwkjIHRoZSBmaWxlIGxpYmZvb18xLnNvIHVzaW5nIGRlYnVnaW5mb2QgZHVyaW5nIHRo ZSBtYXBwZWQgZmlsZQotKwkjIHBoYXNlLCBidXQgc2hvdWxkIHRoZW4gcmV1c2UgdGhhdCBkb3du bG9hZCBkdXJpbmcgdGhlIHNoYXJlZAotKwkjIGxpYnJhcnkgcGhhc2UuCi0rCWxvYWRfZXhlY19h bmRfY29yZV9maWxlIGZhbHNlIHRydWUgXAotKwkgICAgImxvYWQgY29yZSBmaWxlLCB1c2UgZGVi dWdpbmZvZCIKLSsgICAgfQotK30KLSsKLStzdG9wX2RlYnVnaW5mb2QKLWRpZmYgLS1naXQgYS9n ZGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvc2hvcnQtYnVpbGQtaWQuZXhwIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuZHdhcmYyL3Nob3J0LWJ1aWxkLWlkLmV4cAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t LSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9zaG9ydC1idWlsZC1p ZC5leHAKLUBAIC0wLDAgKzEsMTE5IEBACi0rIyBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwot KyMgQ3JlYXRlIGEgZmlsZSB3aXRoIGFuIGFydGlmaWNpYWxseSBzaG9ydCAoMS1ieXRlKSBidWls ZC1pZCwgYW5kCi0rIyBjaGVjayB0aGF0IEdEQiBkb2Vzbid0IHRyeSB0byBsb2FkIGRlYnVnIGlu Zm9ybWF0aW9uLiAgSWYgd2UgZG8gdHJ5Ci0rIyB0aGVuIHdlIGVuZCB1cCBsb2FkaW5nIGZyb206 IGBkZWJ1Zy1kaXJlY3RvcnkvLmJ1aWxkLWlkL3h4Ly5kZWJ1Z2AKLSsjIHdoaWNoIGlzbid0IHJp Z2h0LgotKwotK2xvYWRfbGliIGR3YXJmLmV4cAotKwotKyMgVGhpcyB0ZXN0IGNhbiBvbmx5IGJl IHJ1biBvbiB0YXJnZXRzIHdoaWNoIHN1cHBvcnQgRFdBUkYtMiBhbmQgdXNlIGdhcy4KLStyZXF1 aXJlIGR3YXJmMl9zdXBwb3J0Ci0rCi0rIyBObyByZW1vdGUgaG9zdCB0ZXN0aW5nIGVpdGhlci4K LStyZXF1aXJlIHshaXNfcmVtb3RlIGhvc3R9Ci0rCi0rc3RhbmRhcmRfdGVzdGZpbGUgbWFpbi5j Ci0rCi0rIyBDcmVhdGUgYW4gYXNzZW1ibGVyIGZpbGUgd2hpY2ggZW5jb2RlcyBCVUlMRElEIGFz IHRoZSBidWlsZC1pZC4gIENvbXBpbGUKLSsjIHRoaXMgYWxvbmcgd2l0aCB0aGUgZ2xvYmFsIFNS Q0ZJTEUgdG8gY3JlYXRlIGEgdGVzdCBleGVjdXRhYmxlLgotKyMKLSsjIFNwbGl0IHRoZSBkZWJ1 ZyBpbmZvcm1hdGlvbiBvdXQgZnJvbSB0aGUgbmV3bHkgY3JlYXRlZCBleGVjdXRhYmxlIGFuZCBw bGFjZQotKyMgaXQgaW50byB0aGUgZGVidWcgZmlsZSBkaXJlY3RvcnkuCi0rIwotKyMgTG9hZCB0 aGUgZXhlY3V0YWJsZSBpbnRvIEdEQiBhbmQgY2hlY2sgdG8gc2VlIGlmIHRoZSBkZWJ1ZyBpbmZv cm1hdGlvbiB3YXMKLSsjIGxvYWRlZCBvciBub3QuICBGb3IgdGhpcyB0ZXN0IHdlIGFyZSBleHBl Y3RpbmcgdGhhdCB0aGUgZGVidWcgaW5mb3JtYXRpb24KLSsjIHdhcyBub3QgbG9hZGVkLiAgVGhl IHJlYXNvbiBpcyB0aGF0LCB3aXRoIHNob3J0IHZhbHVlcyBmb3IgQlVJTERJRCwgR0RCIGVuZHMK LSsjIHVwIGxvb2tpbmcgZm9yIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpbiB3ZWlyZCBsb2NhdGlv bnMuCi0rcHJvYyBydW5fdGVzdCB7IGJ1aWxkaWQgfSB7Ci0rICAgIHNldCBsZW4gW3N0cmluZyBs ZW5ndGggJGJ1aWxkaWRdCi0rCi0rICAgIHNldCBhc21fZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2Zp bGUgIiQ6OnRlc3RmaWxlLiRsZW4uUyJdCi0rICAgIER3YXJmOjphc3NlbWJsZSAkYXNtX2ZpbGUg ewotKwlkZWNsYXJlX2xhYmVscyBpbnRfbGFiZWwgaW50X2xhYmVsMgotKwotKwl1cHZhciBidWls ZGlkIGJ1aWxkaWQKLSsKLSsJYnVpbGRfaWQgJGJ1aWxkaWQKLSsKLSsJY3UgeyBsYWJlbCBjdV9z dGFydCB9IHsKLSsJICAgIGNvbXBpbGVfdW5pdCB7e2xhbmd1YWdlIEBEV19MQU5HX0N9fSB7Ci0r CQlpbnRfbGFiZWwyOiBiYXNlX3R5cGUgewotKwkJICAgIHtuYW1lIGludH0KLSsJCSAgICB7Ynl0 ZV9zaXplIDQgc2RhdGF9Ci0rCQkgICAge2VuY29kaW5nIEBEV19BVEVfc2lnbmVkfQotKwkJfQot KwotKwkJY29uc3RhbnQgewotKwkJICAgIHtuYW1lIHRoZV9pbnR9Ci0rCQkgICAge3R5cGUgOiRp bnRfbGFiZWwyfQotKwkJICAgIHtjb25zdF92YWx1ZSA5OSBkYXRhMX0KLSsJCX0KLSsJICAgIH0K LSsJfQotKwotKwlhcmFuZ2VzIHt9IGN1X3N0YXJ0IHsKLSsJICAgIGFyYW5nZSB7fSAwIDAKLSsJ fQotKyAgICB9Ci0rCi0rICAgIHNldCBleGVjZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJDo6 dGVzdGZpbGUuJGxlbl0KLSsKLSsgICAgaWYgeyBbYnVpbGRfZXhlY3V0YWJsZV9mcm9tX3NwZWNz ICJmYWlsZWQgdG8gYnVpbGQiIFwKLSsJICAgICAgJGV4ZWNmaWxlIHtkZWJ1ZyBuby1idWlsZC1p ZH0gXAotKwkgICAgICAkOjpzcmNmaWxlIGRlYnVnIFwKLSsJICAgICAgJGFzbV9maWxlIHt9XSB9 IHsKLSsJcmV0dXJuCi0rICAgIH0KLSsKLSsgICAgIyBDcmVhdGUgdGhlIGRlYnVnIGRpcmVjdG9y eS4KLSsgICAgc2V0IGRlYnVnZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVidWdkaXIuJGxl biJdCi0rICAgIHNldCBidWlsZF9pZF9kaXIgJGRlYnVnZGlyLy5idWlsZC1pZC8kYnVpbGRpZAot KyAgICByZW1vdGVfZXhlYyBob3N0ICJta2RpciAtcCAkYnVpbGRfaWRfZGlyIgotKwotKyAgICAj IFNwbGl0IG91dCB0aGUgZGVidWcgaW5mb3JtYXRpb24uCi0rICAgIGlmIHtbZ2RiX2dudV9zdHJp cF9kZWJ1ZyAkZXhlY2ZpbGUgbm8tZGVidWdsaW5rXX0gewotKwl1bnJlc29sdmVkICJmYWlsZWQg dG8gc3BsaXQgb3V0IGRlYnVnIGluZm9ybWF0aW9uIgotKwlyZXR1cm4KLSsgICAgfQotKwotKyAg ICAjIE1vdmUgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGludG8gdGhlIGRlYnVnIGRpcmVjdG9yeS4g IFdlIHBsYWNlIHRoZSBkZWJ1ZwotKyAgICAjIGluZm9ybWF0aW9uIGludG8gYSBmaWxlIGNhbGxl ZCBqdXN0ICcuZGVidWcnLiAgR0RCIHNob3VsZCBub3QgY2hlY2sgdGhpcwotKyAgICAjIGZpbGUs IGJ1dCBhdCBvbmUgcG9pbnQgR0RCIHdvdWxkIGNoZWNrIHRoaXMgZmlsZSwgZXZlbiB0aG91Z2gg dGhpcwotKyAgICAjIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLgotKyAgICBzZXQgZXhlY2ZpbGVf ZGVidWcgJHtleGVjZmlsZX0uZGVidWcKLSsgICAgcmVtb3RlX2V4ZWMgaG9zdCAibXYgJGV4ZWNm aWxlX2RlYnVnICRidWlsZF9pZF9kaXIvLmRlYnVnIgotKwotKyAgICAjIFN0YXJ0IEdEQiwgc2V0 IHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSwgYW5kIHRyeSBsb2FkaW5nIHRoZSBmaWxlLgotKyAg ICBjbGVhbl9yZXN0YXJ0Ci0rCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZp bGUtZGlyZWN0b3J5ICRkZWJ1Z2RpciIgXAotKwkic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5Igot KwotKyAgICBnZGJfZmlsZV9jbWQgJGV4ZWNmaWxlCi0rCi0rICAgIGdkYl9hc3NlcnQgeyAkOjpn ZGJfZmlsZV9jbWRfZGVidWdfaW5mbyBlcSAibm9kZWJ1ZyIgfSBcCi0rCSJubyBkZWJ1ZyBzaG91 bGQgYmUgbG9hZGVkIgotKwotKyAgICAjIEZvciBzYW5pdHksIHJlYWQgc29tZXRoaW5nIHRoYXQg d2FzIGVuY29kZWQgaW4gdGhlIGRlYnVnCi0rICAgICMgaW5mb3JtYXRpb24sIHRoaXMgc2hvdWxk IGZhaWwuCi0rICAgIGdkYl90ZXN0ICJwcmludCB0aGVfaW50IiBcCi0rCSIoPzpObyBzeW1ib2wg dGFibGUgaXMgbG9hZGVkfE5vIHN5bWJvbCBcInRoZV9pbnRcIiBpbiBjdXJyZW50IGNvbnRleHQp LioiCi0rfQotKwotK2ZvcmVhY2hfd2l0aF9wcmVmaXggYnVpbGRpZCB7IGE0ICIiIH0gewotKyAg ICBydW5fdGVzdCAkYnVpbGRpZAotK30KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktbWlzc2luZy1vYmpmaWxlLWxpYi5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LW1pc3Npbmctb2JqZmlsZS1saWIuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2 L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUt bGliLmMKLUBAIC0wLDAgKzEsMzUgQEAKLSsvKiBUaGlzIHRlc3QgcHJvZ3JhbSBpcyBwYXJ0IG9m IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KLSsKLSsgICBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot KwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCi0rCi0rc3RydWN0IGxpYl90eXBlCi0rewotKyAgaW50IGE7Ci0rICBpbnQgYjsK LSt9OwotKwotK3ZvbGF0aWxlIHN0cnVjdCBsaWJfdHlwZSBnbG9iYWxfbGliX3ZhciA9IHsgMCwg MCB9OwotKwotK2ludAotK2ZvbyAodm9pZCkKLSt7Ci0rICBpbnQgcmVzID0gMDsKLSsKLSsgIHJl cyArPSBnbG9iYWxfbGliX3Zhci5hOwotKyAgcmVzICs9IGdsb2JhbF9saWJfdmFyLmI7Ci0rCi0r ICByZXR1cm4gMDsKLSt9Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LW1pc3Npbmctb2JqZmlsZS5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmct b2JqZmlsZS5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5jCi1AQCAtMCwwICsxLDQ5 IEBACi0rLyogVGhpcyB0ZXN0IHByb2dyYW0gaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdn ZXIuCi0rCi0rICAgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu Ci0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNpbmNs dWRlIDxzdGRsaWIuaD4KLSsKLStzdHJ1Y3QgZXhlY190eXBlCi0rewotKyAgaW50IGE7Ci0rICBp bnQgYjsKLSsgIGludCBjOwotK307Ci0rCi0rdm9sYXRpbGUgc3RydWN0IGV4ZWNfdHlwZSBnbG9i YWxfZXhlY192YXIgPSB7IDAsIDAsIDAgfTsKLSsKLStleHRlcm4gaW50IGZvbyAodm9pZCk7Ci0r Ci0rdm9pZAotK2R1bXBfY29yZSAodm9pZCkKLSt7Ci0rICBhYm9ydCAoKTsKLSt9Ci0rCi0raW50 Ci0rbWFpbiAodm9pZCkKLSt7Ci0rICBpbnQgcmVzID0gZm9vICgpOwotKwotKyAgcmVzICs9IGds b2JhbF9leGVjX3Zhci5hOwotKyAgcmVzICs9IGdsb2JhbF9leGVjX3Zhci5iOwotKyAgcmVzICs9 IGdsb2JhbF9leGVjX3Zhci5jOwotKwotKyAgZHVtcF9jb3JlICgpOwotKwotKyAgcmV0dXJuIHJl czsKLSt9Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmct b2JqZmlsZS5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1vYmpmaWxl LmV4cAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUuZXhwCi1AQCAtMCwwICsxLDU2NSBA QAotKyMgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgot KwotKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0r IyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot KyMKLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLStsb2FkX2xpYiBnZGItcHl0aG9u LmV4cAotKwotK3JlcXVpcmUgYWxsb3dfcHl0aG9uX3Rlc3RzCi0rcmVxdWlyZSB7IWlzX3JlbW90 ZSBob3N0fQotKwotK3N0YW5kYXJkX3Rlc3RmaWxlIC5jIC1saWIuYwotKwotKyMgQnVpbGQgdGhl IGxpYnJhcnkuCi0rc2V0IGxpYm5hbWUgJHt0ZXN0ZmlsZX0tbGliCi0rc2V0IGxpYmZpbGUgW3N0 YW5kYXJkX291dHB1dF9maWxlICRsaWJuYW1lXQotK2lmIHsgW2J1aWxkX2V4ZWN1dGFibGUgImJ1 aWxkIHNobGliIiAkbGliZmlsZSAkc3JjZmlsZTIgXAotKwkgIHtkZWJ1ZyBzaGxpYiBidWlsZC1p ZH1dID09IC0xfSB7Ci0rICAgIHJldHVybgotK30KLSsKLSsjIEJ1aWxkIHRoZSBleGVjdXRhYmxl LgotK3NldCBvcHRzIFtsaXN0IGRlYnVnIGJ1aWxkLWlkIHNobGliPSR7bGliZmlsZX1dCi0raWYg eyBbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQgZXhlYyIgJGJpbmZpbGUgJHNyY2ZpbGUgJG9wdHNd ID09IC0xfSB7Ci0rICAgIHJldHVybgotK30KLSsKLSsjIFRoZSBjYy13aXRoLWdudS1kZWJ1Z2xp bmsgYm9hcmQgd2lsbCBzcGxpdCB0aGUgZGVidWcgb3V0IGludG8gdGhlCi0rIyAuZGVidWcgZGly ZWN0b3J5LiAgVGhpcyB0ZXN0IHNjcmlwdCByZWxpZXMgb24gaGF2aW5nIEdEQiBsb29rdXAgdGhl Ci0rIyBvYmpmaWxlIGFuZCBkZWJ1ZyB2aWEgdGhlIGJ1aWxkLWlkLCB3aGljaCB0aGlzIHRlc3Qg c2V0cyB1cC4gIFRyeWluZwotKyMgdG8gZG8gdGhhdCwgd2hpbGUgYWxzbyBzdXBwb3J0aW5nIHRo ZSBjYy13aXRoLWdudS1kZWJ1Z2xpbmsgYm9hcmQgaXMKLSsjIGp1c3QgdG9vIGNvbXBsaWNhdGVk LgotK2lmIHtbZmlsZSBpc2RpcmVjdG9yeSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgIi5kZWJ1ZyJd XX0gewotKyAgICB1bnN1cHBvcnRlZCAic3BsaXQgZGVidWcgdGVzdGluZyBub3Qgc3VwcG9ydGVk IgotKyAgICByZXR1cm4KLSt9Ci0rCi0rc2V0IHJlbW90ZV9weXRob25fZmlsZSBcCi0rICAgIFtn ZGJfcmVtb3RlX2Rvd25sb2FkIGhvc3QgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5w eV0KLSsKLSsjIEdlbmVyYXRlIGEgY29yZSBmaWxlLgotK3NldCBjb3JlZmlsZSBbY29yZV9maW5k ICRiaW5maWxlIHt9XQotK2lmIHskY29yZWZpbGUgPT0gIiJ9IHsKLSsgICAgdW5zdXBwb3J0ZWQg ImNvcmUgZmlsZSBub3QgZ2VuZXJhdGVkIgotKyAgICByZXR1cm4gMAotK30KLSsKLSsjIENyZWF0 ZSBhIGRpcmVjdG9yeSBuYW1lZCBESVJOQU1FIGZvciB1c2UgYXMgdGhlCi0rIyBkZWJ1Zy1maWxl LWRpcmVjdG9yeS4gIFBvcHVsYXRlIHRoZSBkaXJlY3Rvcnkgd2l0aCBsaW5rcyAoYmFzZWQgb24K LSsjIHRoZSBidWlsZC1pZHMpIHRvIGVhY2ggZmlsZSBpbiB0aGUgbGlzdCBGSUxFUy4KLSsjCi0r IyBSZXR1cm4gdGhlIGZ1bGwgZmlsZW5hbWUgb2YgRElSTkFNRSBvbiB0aGUgaG9zdC4KLStwcm9j IHNldHVwX2RlYnVnZGlyIHsgZGlybmFtZSBmaWxlcyB9IHsKLSsgICAgc2V0IGRlYnVnZGlyIFto b3N0X3N0YW5kYXJkX291dHB1dF9maWxlICRkaXJuYW1lXQotKwotKyAgICAjIENyZWF0ZSBiYXNp YyBlbXB0eSBkaXJlY3Rvcnkgc3RydWN0dXJlIChpbiBjYXNlIEZJTEVTIGlzIGVtcHR5KS4KLSsg ICAgcmVtb3RlX2V4ZWMgaG9zdCAibWtkaXIgLXAgJGRlYnVnZGlyLy5idWlsZC1pZC8iCi0rCi0r ICAgIGZvcmVhY2ggZmlsZSAkZmlsZXMgewotKwlzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxk X2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkZmlsZSAiIl0KLSsKLSsJcmVtb3RlX2V4ZWMgaG9zdCAi bWtkaXIgLXAgJGRlYnVnZGlyL1tmaWxlIGRpcm5hbWUgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKLSsJ cmVtb3RlX2V4ZWMgaG9zdCAibG4gLXMgJGZpbGUgJGRlYnVnZGlyLyRidWlsZF9pZF9maWxlbmFt ZSIKLSsgICAgfQotKwotKyAgICByZXR1cm4gJGRlYnVnZGlyCi0rfQotKwotKyMgUXVlcnkgc29t ZSBzeW1ib2xzIGluIHRoZSBpbmZlcmlvciB0byBzZWUgaWYgR0RCIG1hbmFnZWQgdG8gZmluZCB0 aGUKLSsjIGV4ZWN1dGFibGUgKHdoZW4gRVhFQ19MT0FERUQgaXMgdHJ1ZSkgYW5kL29yIHRoZSBs aWJyYXJ5ICh3aGVuIExJQl9MT0FERUQKLSsjIGlzIHRydWUpLgotK3Byb2MgY2hlY2tfbG9hZGVk X2RlYnVnIHsgZXhlY19sb2FkZWQgbGliX2xvYWRlZCB9IHsKLSsgICAgaWYgeyAkZXhlY19sb2Fk ZWQgfSB7Ci0rCWdkYl90ZXN0ICJ3aGF0aXMgZ2xvYmFsX2V4ZWNfdmFyIiAiXnR5cGUgPSB2b2xh dGlsZSBzdHJ1Y3QgZXhlY190eXBlIgotKwotKwlpZiB7ICRsaWJfbG9hZGVkIH0gewotKwkgICAg Z2RiX3Rlc3QgIndoYXRpcyBnbG9iYWxfbGliX3ZhciIgIl50eXBlID0gdm9sYXRpbGUgc3RydWN0 IGxpYl90eXBlIgotKwl9IGVsc2UgewotKwkgICAgZ2RiX3Rlc3QgIndoYXRpcyBnbG9iYWxfbGli X3ZhciIgXAotKwkJIl5ObyBzeW1ib2wgXCJnbG9iYWxfbGliX3ZhclwiIGluIGN1cnJlbnQgY29u dGV4dFxcLiIKLSsJfQotKyAgICB9IGVsc2UgewotKwlnZGJfdGVzdCAid2hhdGlzIGdsb2JhbF9l eGVjX3ZhciIgXAotKwkgICAgIl5ObyBzeW1ib2wgdGFibGUgaXMgbG9hZGVkXFwuICBVc2UgdGhl IFwiZmlsZVwiIGNvbW1hbmRcXC4iCi0rCWdkYl90ZXN0ICJ3aGF0aXMgZ2xvYmFsX2xpYl92YXIi IFwKLSsJICAgICJeTm8gc3ltYm9sIHRhYmxlIGlzIGxvYWRlZFxcLiAgVXNlIHRoZSBcImZpbGVc IiBjb21tYW5kXFwuIgotKyAgICB9Ci0rfQotKwotKyMgTG9hZCB0aGUgZ2xvYmFsIGNvcmVmaWxl LiAgVGhlIEVYVFJBX1JFIGlzIGNoZWNrZWQgZm9yIHByaW9yIHRvIEdEQgotKyMgYW5ub3VuY2lu ZyB0aGF0IHRoZSBjb3JlLWZpbGUgaGFzIGJlZW4gbG9hZGVkLgotK3Byb2MgbG9hZF9jb3JlX2Zp bGUgeyB7ZXh0cmFfcmUgIi4qIn0gfSB7Ci0rICAgIGdkYl90ZXN0ICJjb3JlLWZpbGUgJDo6Y29y ZWZpbGUiIFwKLSsJW211bHRpX2xpbmUgXAotKwkgICAgICIkZXh0cmFfcmUiIFwKLSsJICAgICAi Q29yZSB3YXMgZ2VuZXJhdGVkIGJ5IFxbXlxyXG5cXSsiIFwKLSsJICAgICAiUHJvZ3JhbSB0ZXJt aW5hdGVkIHdpdGggc2lnbmFsIFNJR0FCUlQsIEFib3J0ZWRcXC4iIFwKLSsJICAgICAiXFteXHJc blxdKyg/OlxyXG5cW15cclxuXF0rKT8iXSBcCi0rCSJsb2FkZWQgdGhlIGNvcmUgZmlsZSIKLSt9 Ci0rCi0rIyBTZXQgdGhlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IHRvIERJUk5BTUUuCi0rcHJvYyBz ZXRfZGVidWdfZmlsZV9kaXIgeyBkaXJuYW1lIH0gewotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQg InNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAkZGlybmFtZSIgXAotKwkic2V0IGRlYnVnLWZpbGUt ZGlyZWN0b3J5IgotK30KLSsKLSsjIFJlc3RhcnQgR0RCIGFuZCBsb2FkIHRoZSBzdXBwb3J0IFB5 dGhvbiBzY3JpcHQuCi0rcHJvYyBjbGVhbl9yZXN0YXJ0X2xvYWRfcHl0aG9uIHt9IHsKLSsgICAg Y2xlYW5fcmVzdGFydAotKyAgICBnZGJfdGVzdCAic291cmNlICQ6OnJlbW90ZV9weXRob25fZmls ZSIgIl5TdWNjZXNzIiBcCi0rCSJsb2FkIHB5dGhvbiBzY3JpcHQiCi0rfQotKwotKyMgRm9yIHNh bml0eSwgbGV0cyBjaGVjayB0aGF0IHdlIGNhbiBsb2FkIHRoZSBzcGVjaWZ5IHRoZSBleGVjdXRh YmxlCi0rIyBhbmQgdGhlbiBsb2FkIHRoZSBjb3JlLWZpbGUgdGhlIGVhc3kgd2F5LgotK3dpdGhf dGVzdF9wcmVmaXggImluaXRpYWwgc2FuaXR5IGNoZWNrIiB7Ci0rICAgIGNsZWFuX3Jlc3RhcnQg JGJpbmZpbGUKLSsgICAgbG9hZF9jb3JlX2ZpbGUKLSsgICAgY2hlY2tfbG9hZGVkX2RlYnVnIHRy dWUgdHJ1ZQotK30KLSsKLSsjIE1vdmUgdGhlIGV4ZWN1dGFibGUgYW5kIGxpYnJhcnkgaW50byBh IGxvY2F0aW9uIHRoYXQgdGhlIGNvcmUtZmlsZQotKyMgY2FuJ3QgcG9zc2libHkga25vdyBhYm91 dC4gIEFmdGVyIHRoaXMgdGhlIG9ubHkgd2F5IEdEQiBjYW4gdHJhY2sKLSsjIGRvd24gdGhlc2Ug ZmlsZXMgd2lsbCBiZSBieSBsb29raW5nIGluIHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeS4KLStz ZXQgaGlkZGVuX2RpciBbaG9zdF9zdGFuZGFyZF9vdXRwdXRfZmlsZSAiaGlkZGVuIl0KLStzZXQg aGlkZGVuX2JpbmZpbGUgIiRoaWRkZW5fZGlyLyR0ZXN0ZmlsZSIKLStzZXQgaGlkZGVuX2xpYmZp bGUgIiRoaWRkZW5fZGlyLyRsaWJuYW1lIgotK3JlbW90ZV9leGVjIGhvc3QgIm1rZGlyIC1wICRo aWRkZW5fZGlyIgotK3JlbW90ZV9leGVjIGhvc3QgIm12ICRsaWJmaWxlICRoaWRkZW5fbGliZmls ZSIKLStyZW1vdGVfZXhlYyBob3N0ICJtdiAkYmluZmlsZSAkaGlkZGVuX2JpbmZpbGUiCi0rCi0r IyBJZiB1c2luZyB0aGUgZmlzc2lvbi1kd3AgYm9hcmQgdGhlbiB3ZSdsbCBoYXZlIC5kd3AgZmls ZXMgdGhhdCBhbHNvCi0rIyBuZWVkIHRvIGJlIG1vdmVkLgotK2lmIHtbcmVtb3RlX2ZpbGUgaG9z dCBleGlzdHMgJHtsaWJmaWxlfS5kd3BdfSB7Ci0rICAgIHJlbW90ZV9leGVjIGhvc3QgIm12ICR7 bGliZmlsZX0uZHdwICR7aGlkZGVuX2xpYmZpbGV9LmR3cCIKLSt9Ci0rCi0raWYge1tyZW1vdGVf ZmlsZSBob3N0IGV4aXN0cyAke2JpbmZpbGV9LmR3cF19IHsKLSsgICAgcmVtb3RlX2V4ZWMgaG9z dCAibXYgJHtiaW5maWxlfS5kd3AgJHtoaWRkZW5fYmluZmlsZX0uZHdwIgotK30KLSsKLSt3aXRo X3Rlc3RfcHJlZml4ICJubyBvYmpmaWxlcywgbm8gZGVidWctZmlsZS1kaXJlY3RvcnkiIHsKLSsg ICAgY2xlYW5fcmVzdGFydAotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBjaGVja19sb2FkZWRf ZGVidWcgZmFsc2UgZmFsc2UKLSt9Ci0rCi0rIyBTZXR1cCBzb21lIGRlYnVnLWZpbGUtZGlyZWN0 b3JpZXMuCi0rc2V0IGRlYnVnZGlyX25vX2xpYiBcCi0rICAgIFtzZXR1cF9kZWJ1Z2RpciAiZGVi dWdkaXIubm8tbGliIiBbbGlzdCAiJGhpZGRlbl9iaW5maWxlIl1dCi0rc2V0IGRlYnVnZGlyX2Vt cHR5IFwKLSsgICAgW3NldHVwX2RlYnVnZGlyICJkZWJ1Z2Rpci5lbXB0eSIge31dCi0rc2V0IGRl YnVnZGlyX2FsbCBcCi0rICAgIFtzZXR1cF9kZWJ1Z2RpciAiZGVidWdkaXIuYWxsIiBbbGlzdCAi JGhpZGRlbl9saWJmaWxlIiBcCi0rCQkJCQkiJGhpZGRlbl9iaW5maWxlIl1dCi0rCi0rd2l0aF90 ZXN0X3ByZWZpeCAibm8gb2JqZmlsZXMgYXZhaWxhYmxlIiB7Ci0rICAgICMgQW5vdGhlciBzYW5p dHkgY2hlY2sgdGhhdCBHREIgY2FuIGZpbmQgdGhlIGZpbGVzIHZpYSB0aGUKLSsgICAgIyBkZWJ1 Zy1maWxlLWRpcmVjdG9yeS4KLSsgICAgY2xlYW5fcmVzdGFydAotKyAgICBzZXRfZGVidWdfZmls ZV9kaXIgJGRlYnVnZGlyX2VtcHR5Ci0rICAgIGxvYWRfY29yZV9maWxlCi0rICAgIGNoZWNrX2xv YWRlZF9kZWJ1ZyBmYWxzZSBmYWxzZQotK30KLSsKLSt3aXRoX3Rlc3RfcHJlZml4ICJhbGwgb2Jq ZmlsZXMgYXZhaWxhYmxlIiB7Ci0rICAgICMgQW5vdGhlciBzYW5pdHkgY2hlY2sgdGhhdCBHREIg Y2FuIGZpbmQgdGhlIGZpbGVzIHZpYSB0aGUKLSsgICAgIyBkZWJ1Zy1maWxlLWRpcmVjdG9yeS4K LSsgICAgc2V0X2RlYnVnX2ZpbGVfZGlyICRkZWJ1Z2Rpcl9hbGwKLSsgICAgbG9hZF9jb3JlX2Zp bGUKLSsgICAgY2hlY2tfbG9hZGVkX2RlYnVnIHRydWUgdHJ1ZQotK30KLSsKLSt3aXRoX3Rlc3Rf cHJlZml4ICJsaWIgb2JqZmlsZSBtaXNzaW5nIiB7Ci0rICAgICMgQW5vdGhlciBzYW5pdHkgY2hl Y2sgdGhhdCBHREIgY2FuIGZpbmQgdGhlIGZpbGVzIHZpYSB0aGUKLSsgICAgIyBkZWJ1Zy1maWxl LWRpcmVjdG9yeS4KLSsgICAgc2V0X2RlYnVnX2ZpbGVfZGlyICRkZWJ1Z2Rpcl9ub19saWIKLSsg ICAgbG9hZF9jb3JlX2ZpbGUKLSsgICAgY2hlY2tfbG9hZGVkX2RlYnVnIHRydWUgZmFsc2UKLSt9 Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAiYWxsIG9iamZpbGVzIG1pc3NpbmcsIGhhbmRsZXIgcmV0 dXJucyBOb25lIiB7Ci0rICAgIGNsZWFuX3Jlc3RhcnRfbG9hZF9weXRob24KLSsgICAgZ2RiX3Rl c3Rfbm9fb3V0cHV0IFwKLSsJInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hh bmRsZXIoTm9uZSwgaGFuZGxlcl9vYmopIiBcCi0rCSJyZWdpc3RlciBpbml0aWFsIGhhbmRsZXIi Ci0rICAgIGxvYWRfY29yZV9maWxlCi0rCi0rICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyBmYWxzZSBm YWxzZQotKwotKyAgICAjIFRoZSBoYW5kbGVyIHNob3VsZCBiZSBjYWxsZWQgdGhyZWUgdGltZXMs IG9uY2UgZm9yIHRoZQotKyAgICAjIG1hcHBlZC1maWxlLCBvbmNlIGZvciB0aGUgY29yZS1maWxl J3MgZXhlYywgYW5kIG9uY2UgZm9yIHRoZQotKyAgICAjIHNoYXJlZCBsaWJyYXJ5LgotKyAgICBn ZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfb2JqLmNhbGxfY291bnQpIiAiXjMiIFwKLSsJ ImNoZWNrIGhhbmRsZXIgd2FzIGNhbGxlZCB0aHJlZSB0aW1lcyIKLSt9Ci0rCi0rd2l0aF90ZXN0 X3ByZWZpeCAibGliIG9iamZpbGUgbWlzc2luZywgaGFuZGxlciByZXR1cm5zIE5vbmUiIHsKLSsg ICAgIyBSZXNldCBoYW5kbGVyX29iai4KLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24g aGFuZGxlcl9vYmouc2V0X21vZGUoTW9kZS5SRVRVUk5fTk9ORSkiCi0rCi0rICAgIHNldF9kZWJ1 Z19maWxlX2RpciAkZGVidWdkaXJfbm9fbGliCi0rICAgIGxvYWRfY29yZV9maWxlCi0rICAgIGNo ZWNrX2xvYWRlZF9kZWJ1ZyB0cnVlIGZhbHNlCi0rCi0rICAgICMgVGhlIGhhbmRsZXIgd2lsbCBi ZSBjYWxsZWQgdHdpY2UsIG9uY2Ugd2hlbiBHREIgdHJpZXMgdG8KLSsgICAgIyBsb2FkIHRoZSBz aGFyZWQgbGlicmFyeSBkdXJpbmcgdGhlIG1lbW9yeS1tYXBwZWQgZmlsZSBwaGFzZSwKLSsgICAg IyB0aGVuIGFnYWluIGZvciB0aGUgc2hhcmVkIGxpYnJhcnkgbG9hZGluZy4KLSsgICAgZ2RiX3Rl c3QgInB5dGhvbiBwcmludChoYW5kbGVyX29iai5jYWxsX2NvdW50KSIgIl4yIiBcCi0rCSJjaGVj ayBoYW5kbGVyIHdhcyBjYWxsZWQgdGhyZWUgdGltZXMiCi0rfQotKwotK3dpdGhfdGVzdF9wcmVm aXggImhhbmRsZXIgaW5zdGFsbHMgbGliIG9iamZpbGUiIHsKLSsgICAgc2V0IGJ1aWxkX2lkX2Zp bGVuYW1lIFtidWlsZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgXAotKwkJCQkgICAkaGlkZGVuX2xp YmZpbGUgIiJdCi0rICAgIHJlbW90ZV9leGVjIGhvc3QgXAotKwkibWtkaXIgLXAgJGRlYnVnZGly X25vX2xpYi9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxlbmFtZV0iCi0rICAgIGdkYl90ZXN0 X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfb2JqLnNldF9tb2RlKE1vZGUuUkVUVVJOX1RSVUUs IFwKLSsgICAgCVwiJGhpZGRlbl9saWJmaWxlXCIsIFwiJGRlYnVnZGlyX25vX2xpYi8kYnVpbGRf aWRfZmlsZW5hbWVcIikiIFwKLSsJImNvbmZpZ3VyZSBoYW5kbGVyIgotKwotKyAgICBsb2FkX2Nv cmVfZmlsZQotKyAgICBjaGVja19sb2FkZWRfZGVidWcgdHJ1ZSB0cnVlCi0rCi0rICAgICMgQ2xl YW51cCBzbyB0aGUgdGVzdCBjYW4gYmUgcmVwcm9kdWNlZCBhZ2FpbiBsYXRlciBpZiBuZWVkZWQu Ci0rICAgIHJlbW90ZV9leGVjIGhvc3QgInJtICRkZWJ1Z2Rpcl9ub19saWIvJGJ1aWxkX2lkX2Zp bGVuYW1lIgotK30KLSsKLSt3aXRoX3Rlc3RfcHJlZml4ICJoYW5kbGVyIHBvaW50cyB0byBsaWIg b2JqZmlsZSIgewotKyAgICBzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxkX2lkX2RlYnVnX2Zp bGVuYW1lX2dldCBcCi0rCQkJICAgICAgICRoaWRkZW5fbGliZmlsZSAiIl0KLSsgICAgcmVtb3Rl X2V4ZWMgaG9zdCBcCi0rCSJta2RpciAtcCAkZGVidWdkaXJfbm9fbGliL1tmaWxlIGRpcm5hbWUg JGJ1aWxkX2lkX2ZpbGVuYW1lXSIKLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gaGFu ZGxlcl9vYmouc2V0X21vZGUoTW9kZS5SRVRVUk5fU1RSSU5HLCBcCi0rCQkJCQkJXCIkaGlkZGVu X2xpYmZpbGVcIikiIFwKLSsJImNvbmZpZ3VyZSBoYW5kbGVyIgotKwotKyAgICBsb2FkX2NvcmVf ZmlsZQotKyAgICBjaGVja19sb2FkZWRfZGVidWcgdHJ1ZSB0cnVlCi0rCi0rICAgICMgQ2xlYW51 cCBzbyB0aGUgdGVzdCBjYW4gYmUgcmVwcm9kdWNlZCBhZ2FpbiBsYXRlciBpZiBuZWVkZWQuCi0r ICAgIHJlbW90ZV9leGVjIGhvc3QgInJtICRkZWJ1Z2Rpcl9ub19saWIvJGJ1aWxkX2lkX2ZpbGVu YW1lIgotKwotKyAgICAjIFRoZSBoYW5kbGVyIHdpbGwgb25seSBoYXZlIGJlZW4gY2FsbGVkIG9u Y2Ugd2hlbiBsb2FkaW5nIHRoZQotKyAgICAjIG1lbW9yeS1tYXBwZWQgZmlsZS4gIEdEQiBpcyBz bWFydCBlbm91Z2ggdG8gcmV1c2UgdGhlIHByZXZpb3VzbHkKLSsgICAgIyBkaXNjb3ZlcmVkIEJG RCBvYmplY3QgYXMgdGhlIHNoYXJlZCBsaWJyYXJ5LgotKyAgICBnZGJfdGVzdCAicHl0aG9uIHBy aW50KGhhbmRsZXJfb2JqLmNhbGxfY291bnQpIiAiXjEiIFwKLSsJImNoZWNrIGdvb2QgaGFuZGxl ciBoYXNuJ3QgYmVlbiBjYWxsZWQgYWdhaW4iCi0rCi0rICAgICMgVmFsaWRhdGUgdGhlIGZpbGVu YW1lIGFuZCBidWlsZC1pZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLgotKyAgICBz ZXQgZXhwZWN0ZWRfYnVpbGRpZCBbZ2V0X2J1aWxkX2lkICRoaWRkZW5fbGliZmlsZV0KLSsgICAg Z2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX2xhc3RfYnVpbGRpZCkiICJeJGV4cGVjdGVk X2J1aWxkaWQiCi0rICAgIGdkYl90ZXN0ICJweXRob24gcHJpbnQoaGFuZGxlcl9sYXN0X2ZpbGVu YW1lKSIgXAotKwkiXltzdHJpbmdfdG9fcmVnZXhwICRsaWJmaWxlXSIKLSt9Ci0rCi0rIyBSZWdp c3RlciBhbm90aGVyIGdsb2JhbCBoYW5kbGVyLCB0aGlzIG9uZSByYWlzZXMgYW4gZXhjZXB0aW9u LiAgUmVsb2FkIHRoZQotKyMgY29yZS1maWxlLCB0aGUgYmFkIGhhbmRsZXIgc2hvdWxkIGJlIGlu dm9rZWQgZmlyc3QsIHdoaWNoIHJhaXNlcyBhbgotKyMgZXhjZXRwdGlvbiwgYXQgd2hpY2ggcG9p bnQgR0RCIHNob3VsZCBza2lwIGZ1cnRoZXIgUHl0aG9uIGhhbmRsZXJzLgotK3dpdGhfdGVzdF9w cmVmaXggImhhbmRsZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiIgewotKyAgICBnZGJfdGVzdF9ub19v dXRwdXQgXAotKwkicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihO b25lLCByaGFuZGxlcikiCi0rCi0rICAgIGZvcmVhY2hfd2l0aF9wcmVmaXggZXhjZXB0aW9uX3R5 cGUge2dkYi5HZGJFcnJvciBUeXBlRXJyb3J9IHsKLSsJZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKLSsJ ICAgICJweXRob24gcmhhbmRsZXIuZXhjZXB0aW9uX3R5cGUgPSAkZXhjZXB0aW9uX3R5cGUiCi0r Ci0rCSMgTG9hZCB0aGUgY29yZSBmaWxlLiAgV2UgZXhwZWN0IHRoZSBleGNlcHRpb24gbWVzc2Fn ZSB0byBhcHBlYXIgYXQKLSsJIyBsZWFzdCBvbmNlIGluIHRoZSBvdXRwdXQuCi0rCXNldCByZSBb c3RyaW5nX3RvX3JlZ2V4cCBcCi0rCQkgICAgIlB5dGhvbiBFeGNlcHRpb24gPGNsYXNzICckZXhj ZXB0aW9uX3R5cGUnPjogbWVzc2FnZSJdCi0rCWxvYWRfY29yZV9maWxlICIke3JlfS4qIgotKwot KwkjIE91ciBvcmlnaW5hbCBoYW5kbGVyIGlzIHN0aWxsIHJlZ2lzdGVyZWQsIGJ1dCBzaG91bGQg bm90IGhhdmUgYmVlbgotKwkjIGNhbGxlZCBhZ2FpbiAoYXMgdGhlIGV4Y2VwdGlvbiBvY2N1cnMg Zmlyc3QpLgotKwlnZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfb2JqLmNhbGxfY291bnQp IiAiXjEiIFwKLSsJICAgICJjaGVjayBnb29kIGhhbmRsZXIgaGFzbid0IGJlZW4gY2FsbGVkIGFn YWluIgotKyAgICB9Ci0rfQotKwotKyMgUmUtc3RhcnQgR0RCLgotK2NsZWFuX3Jlc3RhcnRfbG9h ZF9weXRob24KLSsKLSsjIEF0dGVtcHQgdG8gcmVnaXN0ZXIgYSBtaXNzaW5nLWRlYnVnLWhhbmRs ZXIgd2l0aCBOQU1FLiAgVGhlIGV4cGVjdGF0aW9uIGlzCi0rIyB0aGF0IHRoaXMgc2hvdWxkIGZh aWwgYXMgTkFNRSBjb250YWlucyBzb21lIGludmFsaWQgY2hhcmFjdGVycy4KLStwcm9jIGNoZWNr X2JhZF9uYW1lIHtuYW1lfSB7Ci0rICAgIHNldCBuYW1lX3JlIFtzdHJpbmdfdG9fcmVnZXhwICRu YW1lXQotKyAgICBzZXQgcmUgXAotKwlbbXVsdGlfbGluZSBcCi0rCSAgICAgIlZhbHVlRXJyb3Iu KjogaW52YWxpZCBjaGFyYWN0ZXIgJy4nIGluIGhhbmRsZXIgbmFtZTogJG5hbWVfcmUiIFwKLSsJ ICAgICAiRXJyb3Igb2NjdXJyZWQgaW4gUHl0aG9uLioiXQotKwotKyAgICBnZGJfdGVzdCAicHl0 aG9uIHJlZ2lzdGVyKFwiJG5hbWVcIikiICRyZSBcCi0rCSJjaGVjayB0aGF0ICckbmFtZScgaXMg bm90IGFjY2VwdGVkIgotK30KLSsKLSsjIFdlIGRvbid0IGF0dGVtcHQgdG8gYmUgZXhoYXVzdGl2 ZSBoZXJlLCBqdXN0IGNoZWNrIGEgZmV3IHJhbmRvbSBleGFtcGxlcwotKyMgb2YgaW52YWxpZCBu YW1lcy4KLStjaGVja19iYWRfbmFtZSAiISEgQmFkIE5hbWUiCi0rY2hlY2tfYmFkX25hbWUgIkJh ZCBOYW1lIgotK2NoZWNrX2JhZF9uYW1lICIoQmFkIE5hbWUpIgotK2NoZWNrX2JhZF9uYW1lICJC YWQgXFtOYW1lXF0iCi0rY2hlY2tfYmFkX25hbWUgIkJhZCxOYW1lIgotK2NoZWNrX2JhZF9uYW1l ICJCYWQ7TmFtZSIKLSsKLSsjIENoZWNrIHRoYXQgdGhlcmUgYXJlIG5vIGhhbmRsZXJzIHJlZ2lz dGVyZWQuCi0rZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVy cyIgXAotKyAgICAiY2hlY2sgbm8gaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQiCi0rCi0rIyBHcmFi IHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2Ugb2JqZWN0LCB1c2VkIGZvciByZWdpc3RlcmluZyBo YW5kbGVyIGxhdGVyLgotK2dkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIHBzcGFjZSA9IGdkYi5z ZWxlY3RlZF9pbmZlcmlvcigpLnByb2dzcGFjZSIKLSsKLSsjIE5vdyByZWdpc3RlciBzb21lIGhh bmRsZXJzLgotK2ZvcmVhY2ggaHNwZWMge3tcIkZvb1wiIE5vbmV9Ci0rICAgIHtcIi1iYXJcIiBO b25lfQotKyAgICB7XCJiYXotXCIgcHNwYWNlfQotKyAgICB7XCJhYmMtZGVmXCIgcHNwYWNlfX0g ewotKyAgICBsYXNzaWduICRoc3BlYyBuYW1lIGxvY3VzCi0rICAgIGdkYl90ZXN0ICJweXRob24g cmVnaXN0ZXIoJG5hbWUsICRsb2N1cykiCi0rfQotKwotK3dpdGhfdGVzdF9wcmVmaXggImFsbCBo YW5kbGVycyBlbmFibGVkIiB7Ci0rICAgIGdkYl90ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1o YW5kbGVycyIgXAotKwlbbXVsdGlfbGluZSBcCi0rCSAgICAgIkN1cnJlbnQgUHJvZ3NwYWNlOiIg XAotKwkgICAgICIgIGFiYy1kZWYiIFwKLSsJICAgICAiICBiYXotIiBcCi0rCSAgICAgIkdsb2Jh bDoiIFwKLSsJICAgICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9vIl0KLSsKLSsgICAgc2V0X2Rl YnVnX2ZpbGVfZGlyICRkZWJ1Z2Rpcl9ub19saWIKLSsgICAgbG9hZF9jb3JlX2ZpbGUKLSsKLSsg ICAgIyBBcyB3ZSBwZXJmb3JtIHR3byBsb29rIHVwcywgZmlyc3QgZm9yIHRoZSBtYXBwZWQtZmls ZSB0aGVuIGZvciB0aGUKLSsgICAgIyBzaGFyZWQgbGlicmFyeSwgZWFjaCBoYW5kbGVyIHdpbGwg YmUgY2FsbGVkIHR3aWNlLgotKyAgICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfY2Fs bF9sb2cpIiBcCi0rCVtzdHJpbmdfdG9fcmVnZXhwIHtbJ2FiYy1kZWYnLCAnYmF6LScsICctYmFy JywgJ0ZvbycsICdhYmMtZGVmJywgJ2Jhei0nLCAnLWJhcicsICdGb28nXX1dCi0rICAgIGdkYl90 ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNl dCBjYWxsIGxvZyIKLSt9Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAiZGlzYWJsZSAnYmF6LSciIHsK LSsgICAgZ2RiX3Rlc3QgImRpc2FibGUgbWlzc2luZy1vYmpmaWxlLWhhbmRsZXIgcHJvZ3NwYWNl IGJhei0iIFwKLSsJIl4xIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVyIGRpc2FibGVkIgotKwotKyAg ICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKLSsJW211bHRpX2xp bmUgXAotKwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKLSsJICAgICAiICBhYmMtZGVm IiBcCi0rCSAgICAgIiAgYmF6LSBcXFxbZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAgIkdsb2JhbDoi IFwKLSsJICAgICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9vIl0KLSsKLSsgICAgbG9hZF9jb3Jl X2ZpbGUKLSsgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAot Kwlbc3RyaW5nX3RvX3JlZ2V4cCB7WydhYmMtZGVmJywgJy1iYXInLCAnRm9vJywgJ2FiYy1kZWYn LCAnLWJhcicsICdGb28nXX1dCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRs ZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNldCBjYWxsIGxvZyIKLSt9Ci0rCi0rd2l0aF90 ZXN0X3ByZWZpeCAiZGlzYWJsZSAnRm9vJyIgewotKyAgICBnZGJfdGVzdCAiZGlzYWJsZSBtaXNz aW5nLW9iamZpbGUtaGFuZGxlciAuKiBGb28iIFwKLSsJIl4xIG1pc3Npbmcgb2JqZmlsZSBoYW5k bGVyIGRpc2FibGVkIgotKwotKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFu ZGxlcnMiIFwKLSsJW211bHRpX2xpbmUgXAotKwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoi IFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAgIiAgYmF6LSBcXFxbZGlzYWJsZWRcXFxd IiBcCi0rCSAgICAgIkdsb2JhbDoiIFwKLSsJICAgICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9v IFxcXFtkaXNhYmxlZFxcXF0iXQotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBnZGJfdGVz dCAicHl0aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCi0rCVtzdHJpbmdfdG9fcmVnZXhw IHtbJ2FiYy1kZWYnLCAnLWJhcicsICdhYmMtZGVmJywgJy1iYXInXX1dCi0rICAgIGdkYl90ZXN0 X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNldCBj YWxsIGxvZyIKLSt9Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAiZGlzYWJsZSBldmVyeXRoaW5nIiB7 Ci0rICAgIGdkYl90ZXN0ICJkaXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIC4qIC4qIiBc Ci0rCSJeMiBtaXNzaW5nIG9iamZpbGUgaGFuZGxlcnMgZGlzYWJsZWQiCi0rCi0rICAgIGdkYl90 ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAotKwlbbXVsdGlfbGluZSBcCi0r CSAgICAgIlByb2dzcGFjZSBcW15cclxuXF0rOiIgXAotKwkgICAgICIgIGFiYy1kZWYgXFxcW2Rp c2FibGVkXFxcXSIgXAotKwkgICAgICIgIGJhei0gXFxcW2Rpc2FibGVkXFxcXSIgXAotKwkgICAg ICJHbG9iYWw6IiBcCi0rCSAgICAgIiAgLWJhciBcXFxbZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAg IiAgRm9vIFxcXFtkaXNhYmxlZFxcXF0iXQotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBn ZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCi0rCVtzdHJpbmdfdG9f cmVnZXhwIHtbXX1dCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2Fs bF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNldCBjYWxsIGxvZyIKLSt9Ci0rCi0rd2l0aF90ZXN0X3By ZWZpeCAiZW5hYmxlICdhYmMtZGVmJyIgewotKyAgICBzZXQgcmUgW3N0cmluZ190b19yZWdleHAg JGhpZGRlbl9iaW5maWxlXQotKwotKyAgICBnZGJfdGVzdCAiZW5hYmxlIG1pc3Npbmctb2JqZmls ZS1oYW5kbGVyIFwiJHJlXCIgYWJjLWRlZiIgXAotKwkiXjEgbWlzc2luZyBvYmpmaWxlIGhhbmRs ZXIgZW5hYmxlZCIgXAotKwkiZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIgotKwotKyAg ICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKLSsJW211bHRpX2xp bmUgXAotKwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKLSsJICAgICAiICBhYmMtZGVm IiBcCi0rCSAgICAgIiAgYmF6LSBcXFxbZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAgIkdsb2JhbDoi IFwKLSsJICAgICAiICAtYmFyIFxcXFtkaXNhYmxlZFxcXF0iIFwKLSsJICAgICAiICBGb28gXFxc W2Rpc2FibGVkXFxcXSJdCi0rCi0rICAgIGxvYWRfY29yZV9maWxlCi0rICAgIGdkYl90ZXN0ICJw eXRob24gcHJpbnQoaGFuZGxlcl9jYWxsX2xvZykiIFwKLSsJW3N0cmluZ190b19yZWdleHAge1sn YWJjLWRlZicsICdhYmMtZGVmJ119XQotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBo YW5kbGVyX2NhbGxfbG9nID0gXFtcXSIgXAotKwkicmVzZXQgY2FsbCBsb2ciCi0rfQotKwotK3dp dGhfdGVzdF9wcmVmaXggImVuYWJsZSBnbG9iYWwgaGFuZGxlcnMiIHsKLSsgICAgZ2RiX3Rlc3Qg ImVuYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciBnbG9iYWwiIFwKLSsJIl4yIG1pc3Npbmcg b2JqZmlsZSBoYW5kbGVycyBlbmFibGVkIgotKwotKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5n LW9iamZpbGUtaGFuZGxlcnMiIFwKLSsJW211bHRpX2xpbmUgXAotKwkgICAgICJQcm9nc3BhY2Ug XFteXHJcblxdKzoiIFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAgIiAgYmF6LSBcXFxb ZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAgIkdsb2JhbDoiIFwKLSsJICAgICAiICAtYmFyIiBcCi0r CSAgICAgIiAgRm9vIl0KLSsKLSsgICAgbG9hZF9jb3JlX2ZpbGUKLSsgICAgZ2RiX3Rlc3QgInB5 dGhvbiBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAotKwlbc3RyaW5nX3RvX3JlZ2V4cCB7Wydh YmMtZGVmJywgJy1iYXInLCAnRm9vJywgJ2FiYy1kZWYnLCAnLWJhcicsICdGb28nXX1dCi0rICAg IGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0r CSJyZXNldCBjYWxsIGxvZyIKLSt9Ci0rCi0rIyBBZGQgaGFuZGxlcl9vYmogdG8gdGhlIGdsb2Jh bCBoYW5kbGVyIGxpc3QsIGFuZCBjb25maWd1cmUgaXQgdG8KLSsjIHJldHVybiBGYWxzZS4gIFdl IHNob3VsZCBjYWxsIGFsbCBvZiB0aGUgcHJvZ3JhbSBzcGFjZSBzcGVjaWZpYwotKyMgaGFuZGxl cnMgKHdoaWNoIHJldHVybiBOb25lKSwgYW5kIHRoZW4gY2FsbCBoYW5kbGVyX29iaiBmcm9tIHRo ZQotKyMgZ2xvYmFsIGxpc3QsIHdoaWNoIHJldHVybnMgRmFsc2UsIGF0IHdoaWNoIHBvaW50IHdl IHNob3VsZG4ndCBjYWxsCi0rIyBhbnlvbmUgZWxzZS4KLSt3aXRoX3Rlc3RfcHJlZml4ICJyZXR1 cm4gRmFsc2UgaGFuZGxlciBpbiBnbG9iYWwgbGlzdCIgewotKyAgICBnZGJfdGVzdCAiZW5hYmxl IG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIHByb2dzcGFjZSIgXAotKwkiXjEgbWlzc2luZyBvYmpm aWxlIGhhbmRsZXIgZW5hYmxlZCIKLSsKLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKLSsJInB5 dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIoTm9uZSwgaGFuZGxlcl9v YmopIiBcCi0rCSJyZWdpc3RlciBoYW5kbGVyX29iaiBpbiBnbG9iYWwgbGlzdCIKLSsKLSsgICAg Z2RiX3Rlc3QgImluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIiBcCi0rCVttdWx0aV9saW5l IFwKLSsJICAgICAiUHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBcCi0rCSAgICAgIiAgYWJjLWRlZiIg XAotKwkgICAgICIgIGJhei0iIFwKLSsJICAgICAiR2xvYmFsOiIgXAotKwkgICAgICIgIGhhbmRs ZXIiIFwKLSsJICAgICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9vIl0KLSsKLSsgICAgZ2RiX3Rl c3Rfbm9fb3V0cHV0ICJweXRob24gaGFuZGxlcl9vYmouc2V0X21vZGUoTW9kZS5SRVRVUk5fRkFM U0UpIiBcCi0rCSJjb25maXJndXJlIGhhbmRsZXIiCi0rCi0rICAgIGxvYWRfY29yZV9maWxlCi0r ICAgIGdkYl90ZXN0ICJweXRob24gcHJpbnQoaGFuZGxlcl9jYWxsX2xvZykiIFwKLSsJW3N0cmlu Z190b19yZWdleHAge1snYWJjLWRlZicsICdiYXotJywgJ2hhbmRsZXInLCAnYWJjLWRlZicsICdi YXotJywgJ2hhbmRsZXInXX1dCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRs ZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNldCBjYWxsIGxvZyIKLSt9Ci0rCi0rIyBOb3cg YWRkIGhhbmRsZXJfb2JqIHRvIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UncyBoYW5kbGVyIGxp c3QuICBXZQotKyMgdXNlIHRoZSBzYW1lIGhhbmRsZXIgb2JqZWN0IGhlcmUsIHRoYXQncyBmaW5l LiAgV2Ugc2hvdWxkIG9ubHkgc2VlIGEKLSsjIGNhbGwgdG8gdGhlIGZpcnN0IGhhbmRsZXIgb2Jq ZWN0IGluIHRoZSBjYWxsIGxvZy4KLSt3aXRoX3Rlc3RfcHJlZml4ICJyZXR1cm4gRmFsc2UgaGFu ZGxlciBpbiBwcm9nc3BhY2UgbGlzdCIgewotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgXAotKwki cHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihwc3BhY2UsIGhhbmRs ZXJfb2JqKSIgXAotKwkicmVnaXN0ZXIgaGFuZGxlcl9vYmogaW4gcHJvZ3NwYWNlIGxpc3QiCi0r Ci0rICAgIGdkYl90ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAotKwlbbXVs dGlfbGluZSBcCi0rCSAgICAgIlByb2dzcGFjZSBcW15cclxuXF0rOiIgXAotKwkgICAgICIgIGhh bmRsZXIiIFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAgIiAgYmF6LSIgXAotKwkgICAg ICJHbG9iYWw6IiBcCi0rCSAgICAgIiAgaGFuZGxlciIgXAotKwkgICAgICIgIC1iYXIiIFwKLSsJ ICAgICAiICBGb28iXQotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBnZGJfdGVzdCAicHl0 aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCi0rCVtzdHJpbmdfdG9fcmVnZXhwIHtbJ2hh bmRsZXInLCAnaGFuZGxlciddfV0KLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gaGFu ZGxlcl9jYWxsX2xvZyA9IFxbXF0iIFwKLSsJInJlc2V0IGNhbGwgbG9nIgotK30KLSsKLSt3aXRo X3Rlc3RfcHJlZml4ICJjaGVjayBoYW5kbGVyIHJlcGxhY2VtZW50IiB7Ci0rICAgICMgRmlyc3Qs IGNoZWNrIHdlIGNhbiBoYXZlIHRoZSBzYW1lIG5hbWUgYXBwZWFyIGluIGJvdGggcHJvZ3JhbQot KyAgICAjIHNwYWNlIGFuZCBnbG9iYWwgbGlzdHMgd2l0aG91dCBnaXZpbmcgYW4gZXJyb3IuCi0r ICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIHJlZ2lzdGVyKFwiRm9vXCIsIHBzcGFjZSki Ci0rCi0rICAgIGdkYl90ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAotKwlb bXVsdGlfbGluZSBcCi0rCSAgICAgIlByb2dzcGFjZSBcW15cclxuXF0rOiIgXAotKwkgICAgICIg IEZvbyIgXAotKwkgICAgICIgIGhhbmRsZXIiIFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAg ICAgIiAgYmF6LSIgXAotKwkgICAgICJHbG9iYWw6IiBcCi0rCSAgICAgIiAgaGFuZGxlciIgXAot KwkgICAgICIgIC1iYXIiIFwKLSsJICAgICAiICBGb28iXQotKwotKyAgICAjIE5vdyBjaGVjayB0 aGF0IHdlIGdldCBhbiBlcnJvciBpZiB3ZSB0cnkgdG8gYWRkIGEgaGFuZGxlciB3aXRoCi0rICAg ICMgdGhlIHNhbWUgbmFtZS4KLSsgICAgZ2RiX3Rlc3QgInB5dGhvbiBnZGIubWlzc2luZ19vYmpm aWxlLnJlZ2lzdGVyX2hhbmRsZXIocHNwYWNlLCBsb2dfaGFuZGxlcihcIkZvb1wiKSkiIFwKLSsJ W211bHRpX2xpbmUgXAotKwkgICAgICJSdW50aW1lRXJyb3IuKjogSGFuZGxlciBGb28gYWxyZWFk eSBleGlzdHNcXC4iIFwKLSsJICAgICAiRXJyb3Igb2NjdXJyZWQgaW4gUHl0aG9uLioiXQotKwot KyAgICBnZGJfdGVzdCAicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxl cihoYW5kbGVyPWxvZ19oYW5kbGVyKFwiRm9vXCIpLCBsb2N1cz1wc3BhY2UpIiBcCi0rCVttdWx0 aV9saW5lIFwKLSsJICAgICAiUnVudGltZUVycm9yLio6IEhhbmRsZXIgRm9vIGFscmVhZHkgZXhp c3RzXFwuIiBcCi0rCSAgICAgIkVycm9yIG9jY3VycmVkIGluIFB5dGhvbi4qIl0KLSsKLSsgICAg IyBBbmQgbm93IHRyeSBhZ2FpbiwgYnV0IHRoaXMgdGltZSB3aXRoICdyZXBsYWNlPVRydWUnLCB3 ZQotKyAgICAjIHNob3VsZG4ndCBnZXQgYW4gZXJyb3IgaW4gdGhpcyBjYXNlLgotKyAgICBnZGJf dGVzdF9ub19vdXRwdXQgXAotKwkicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJf aGFuZGxlcihwc3BhY2UsIGxvZ19oYW5kbGVyKFwiRm9vXCIpLCByZXBsYWNlPVRydWUpIgotKwot KyAgICBnZGJfdGVzdF9ub19vdXRwdXQgXAotKwkicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUu cmVnaXN0ZXJfaGFuZGxlcihoYW5kbGVyPWxvZ19oYW5kbGVyKFwiRm9vXCIpLCBsb2N1cz1Ob25l LCByZXBsYWNlPVRydWUpIgotKwotKyAgICAjIE5vdyBkaXNhYmxlIGEgaGFuZGxlciBhbmQgY2hl Y2sgd2Ugc3RpbGwgbmVlZCB0byB1c2UgJ3JlcGxhY2U9VHJ1ZScuCi0rICAgIGdkYl90ZXN0ICJk aXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIHByb2dzcGFjZSBGb28iIFwKLSsJIl4xIG1p c3Npbmcgb2JqZmlsZSBoYW5kbGVyIGRpc2FibGVkIgotKwotKyAgICBnZGJfdGVzdCAicHl0aG9u IGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihwc3BhY2UsIGxvZ19oYW5kbGVy KFwiRm9vXCIpKSIgXAotKwlbbXVsdGlfbGluZSBcCi0rCSAgICAgIlJ1bnRpbWVFcnJvci4qOiBI YW5kbGVyIEZvbyBhbHJlYWR5IGV4aXN0c1xcLiIgXAotKwkgICAgICJFcnJvciBvY2N1cnJlZCBp biBQeXRob24uKiJdIFwKLSsJInN0aWxsIGdldCBhbiBlcnJvciB3aGVuIGhhbmRsZXIgaXMgZGlz YWJsZWQiCi0rCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCBcCi0rCSJweXRob24gZ2RiLm1pc3Np bmdfb2JqZmlsZS5yZWdpc3Rlcl9oYW5kbGVyKHBzcGFjZSwgbG9nX2hhbmRsZXIoXCJGb29cIiks IHJlcGxhY2U9VHJ1ZSkiIFwKLSsJImNhbiByZXBsYWNlIGEgZGlzYWJsZWQgaGFuZGxlciIKLSt9 Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmls ZS5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUucHkKLW5l dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktbWlzc2luZy1vYmpmaWxlLnB5Ci1AQCAtMCwwICsxLDE2NyBAQAotKyMgQ29w eXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyMgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0r IyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLStpbXBvcnQgc2h1dGlsCi0raW1wb3J0IG9zCi0r ZnJvbSBlbnVtIGltcG9ydCBFbnVtCi0rCi0raW1wb3J0IGdkYgotK2Zyb20gZ2RiLm1pc3Npbmdf b2JqZmlsZSBpbXBvcnQgTWlzc2luZ09iamZpbGVIYW5kbGVyCi0rCi0rIyBBIGdsb2JhbCBsb2cg dGhhdCBpcyBmaWxsZWQgaW4gYnkgaW5zdGFuY2VzIG9mIHRoZSBMT0dfSEFORExFUiBjbGFzcwot KyMgd2hlbiB0aGV5IGFyZSBjYWxsZWQuCi0raGFuZGxlcl9jYWxsX2xvZyA9IFtdCi0rCi0rIyBB IGdsb2JhbCBob2xkaW5nIGEgc3RyaW5nLCB0aGUgYnVpbGQtaWQgb2YgdGhlIGxhc3QgbWlzc2lu ZyBvYmpmaWxlCi0rIyB3aGljaCB0cmlnZ2VyZWQgdGhlICdoYW5kbGVyJyBjbGFzcyBiZWxvdy4g IFRoaXMgaXMgc2V0IGluIHRoZQotKyMgX19jYWxsX18gbWV0aG9kIG9mIHRoZSAnaGFuZGxlcicg Y2xhc3MgYW5kIHRoZW4gY2hlY2tlZCBmcm9tIHRoZQotKyMgZXhwZWN0IHNjcmlwdC4KLStoYW5k bGVyX2xhc3RfYnVpbGRpZCA9IE5vbmUKLSsKLSsKLSsjIEEgZ2xvYmFsIGhvbGRpbmcgYSBzdHJp bmcsIHRoZSBmaWxlbmFtZSBvZiB0aGUgbGFzdCBtaXNzaW5nIG9iamZpbGUKLSsjIHdoaWNoIHRy aWdnZXJlZCB0aGUgJ2hhbmRsZXInIGNsYXNzIGJlbG93LiAgVGhpcyBpcyBzZXQgaW4gdGhlCi0r IyBfX2NhbGxfXyBtZXRob2Qgb2YgdGhlICdoYW5kbGVyJyBjbGFzcyBhbmQgdGhlbiBjaGVja2Vk IGZyb20gdGhlCi0rIyBleHBlY3Qgc2NyaXB0LgotK2hhbmRsZXJfbGFzdF9maWxlbmFtZSA9IE5v bmUKLSsKLSsKLSsjIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgbWFrZXMgc29tZSBhc3NlcnRpb25z IGFib3V0IHRoZSBhcmd1bWVudHMKLSsjIHBhc3NlZCB0byBhIE1pc3NpbmdPYmpmaWxlSGFuZGxl ci5fX2NhbGxfXygpIG1ldGhvZC4KLStkZWYgY2hlY2tfYXJncyhwc3BhY2UsIGJ1aWxkaWQsIGZp bGVuYW1lKToKLSsgICAgYXNzZXJ0IHR5cGUoZmlsZW5hbWUpID09IHN0cgotKyAgICBhc3NlcnQg ZmlsZW5hbWUgIT0gIiIKLSsgICAgYXNzZXJ0IHR5cGUocHNwYWNlKSA9PSBnZGIuUHJvZ3NwYWNl Ci0rICAgIGFzc2VydCB0eXBlKGJ1aWxkaWQpID09IHN0cgotKyAgICBhc3NlcnQgYnVpbGRpZCAh PSAiIgotKwotKwotKyMgRW51bSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgJ2hhbmRsZXInIGNsYXNz IGZyb20gdGhlIHRlc3Qgc2NyaXB0LgotK2NsYXNzIE1vZGUoRW51bSk6Ci0rICAgIFJFVFVSTl9O T05FID0gMAotKyAgICBSRVRVUk5fVFJVRSA9IDEKLSsgICAgUkVUVVJOX0ZBTFNFID0gMgotKyAg ICBSRVRVUk5fU1RSSU5HID0gMwotKwotKwotKyMgQSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlciB3 aGljaCBjYW4gYmUgY29uZmlndXJlZCB0byByZXR1cm4gZWFjaCBvZgotKyMgdGhlIGRpZmZlcmVu dCBwb3NzaWJsZSByZXR1cm4gdHlwZXMuCi0rY2xhc3MgaGFuZGxlcihNaXNzaW5nT2JqZmlsZUhh bmRsZXIpOgotKyAgICBkZWYgX19pbml0X18oc2VsZik6Ci0rICAgICAgICBzdXBlcigpLl9faW5p dF9fKCJoYW5kbGVyIikKLSsgICAgICAgIHNlbGYuX2NhbGxfY291bnQgPSAwCi0rICAgICAgICBz ZWxmLl9tb2RlID0gTW9kZS5SRVRVUk5fTk9ORQotKwotKyAgICBkZWYgX19jYWxsX18oc2VsZiwg cHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSk6Ci0rICAgICAgICBnbG9iYWwgaGFuZGxlcl9jYWxs X2xvZywgaGFuZGxlcl9sYXN0X2J1aWxkaWQsIGhhbmRsZXJfbGFzdF9maWxlbmFtZQotKyAgICAg ICAgY2hlY2tfYXJncyhwc3BhY2UsIGJ1aWxkaWQsIGZpbGVuYW1lKQotKyAgICAgICAgaGFuZGxl cl9jYWxsX2xvZy5hcHBlbmQoc2VsZi5uYW1lKQotKyAgICAgICAgaGFuZGxlcl9sYXN0X2J1aWxk aWQgPSBidWlsZGlkCi0rICAgICAgICBoYW5kbGVyX2xhc3RfZmlsZW5hbWUgPSBmaWxlbmFtZQot KyAgICAgICAgc2VsZi5fY2FsbF9jb3VudCArPSAxCi0rICAgICAgICBpZiBzZWxmLl9tb2RlID09 IE1vZGUuUkVUVVJOX05PTkU6Ci0rICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSsKLSsgICAgICAg IGlmIHNlbGYuX21vZGUgPT0gTW9kZS5SRVRVUk5fVFJVRToKLSsgICAgICAgICAgICBzaHV0aWwu Y29weShzZWxmLl9zcmMsIHNlbGYuX2Rlc3QpCi0rCi0rICAgICAgICAgICAgIyBJZiB3ZSdyZSB1 c2luZyB0aGUgZmlzc2lvbi1kd3AgYm9hcmQgdGhlbiB0aGVyZSB3aWxsCi0rICAgICAgICAgICAg IyBhbHNvIGJlIGEgLmR3cCBmaWxlIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkLgotKyAgICAgICAg ICAgIGR3cF9zcmMgPSBzZWxmLl9zcmMgKyAiLmR3cCIKLSsgICAgICAgICAgICBpZiBvcy5wYXRo LmV4aXN0cyhkd3Bfc3JjKToKLSsgICAgICAgICAgICAgICAgZHdwX2Rlc3QgPSBzZWxmLl9kZXN0 ICsgIi5kd3AiCi0rICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KGR3cF9zcmMsIGR3cF9kZXN0 KQotKwotKyAgICAgICAgICAgIHJldHVybiBUcnVlCi0rCi0rICAgICAgICBpZiBzZWxmLl9tb2Rl ID09IE1vZGUuUkVUVVJOX0ZBTFNFOgotKyAgICAgICAgICAgIHJldHVybiBGYWxzZQotKwotKyAg ICAgICAgaWYgc2VsZi5fbW9kZSA9PSBNb2RlLlJFVFVSTl9TVFJJTkc6Ci0rICAgICAgICAgICAg cmV0dXJuIHNlbGYuX2Rlc3QKLSsKLSsgICAgICAgIGFzc2VydCBGYWxzZQotKwotKyAgICBAcHJv cGVydHkKLSsgICAgZGVmIGNhbGxfY291bnQoc2VsZik6Ci0rICAgICAgICAiIiJSZXR1cm4gYSBj b3VudCwgdGhlIG51bWJlciBvZiBjYWxscyB0byBfX2NhbGxfXyBzaW5jZSB0aGUgbGFzdAotKyAg ICAgICAgY2FsbCB0byBzZXRfbW9kZS4KLSsgICAgICAgICIiIgotKyAgICAgICAgcmV0dXJuIHNl bGYuX2NhbGxfY291bnQKLSsKLSsgICAgZGVmIHNldF9tb2RlKHNlbGYsIG1vZGUsICphcmdzKToK LSsgICAgICAgIHNlbGYuX2NhbGxfY291bnQgPSAwCi0rICAgICAgICBzZWxmLl9tb2RlID0gbW9k ZQotKwotKyAgICAgICAgaWYgbW9kZSA9PSBNb2RlLlJFVFVSTl9OT05FOgotKyAgICAgICAgICAg IGFzc2VydCBsZW4oYXJncykgPT0gMAotKyAgICAgICAgICAgIHJldHVybgotKwotKyAgICAgICAg aWYgbW9kZSA9PSBNb2RlLlJFVFVSTl9UUlVFOgotKyAgICAgICAgICAgIGFzc2VydCBsZW4oYXJn cykgPT0gMgotKyAgICAgICAgICAgIHNlbGYuX3NyYyA9IGFyZ3NbMF0KLSsgICAgICAgICAgICBz ZWxmLl9kZXN0ID0gYXJnc1sxXQotKyAgICAgICAgICAgIHJldHVybgotKwotKyAgICAgICAgaWYg bW9kZSA9PSBNb2RlLlJFVFVSTl9GQUxTRToKLSsgICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3Mp ID09IDAKLSsgICAgICAgICAgICByZXR1cm4KLSsKLSsgICAgICAgIGlmIG1vZGUgPT0gTW9kZS5S RVRVUk5fU1RSSU5HOgotKyAgICAgICAgICAgIGFzc2VydCBsZW4oYXJncykgPT0gMQotKyAgICAg ICAgICAgIHNlbGYuX2Rlc3QgPSBhcmdzWzBdCi0rICAgICAgICAgICAgcmV0dXJuCi0rCi0rICAg ICAgICBhc3NlcnQgRmFsc2UKLSsKLSsKLSsjIEEgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXIgd2hp Y2ggcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFRoZSB0eXBlIG9mCi0rIyBleGNlcHRpb24gdG8gYmUg cmFpc2VkIGlzIGNvbmZpZ3VyZWQgZnJvbSB0aGUgdGVzdCBzY3JpcHQuCi0rY2xhc3MgZXhjZXB0 aW9uX2hhbmRsZXIoTWlzc2luZ09iamZpbGVIYW5kbGVyKToKLSsgICAgZGVmIF9faW5pdF9fKHNl bGYpOgotKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiZXhjZXB0aW9uX2hhbmRsZXIiKQotKyAg ICAgICAgc2VsZi5leGNlcHRpb25fdHlwZSA9IE5vbmUKLSsKLSsgICAgZGVmIF9fY2FsbF9fKHNl bGYsIHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpOgotKyAgICAgICAgZ2xvYmFsIGhhbmRsZXJf Y2FsbF9sb2cKLSsgICAgICAgIGNoZWNrX2FyZ3MocHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSkK LSsgICAgICAgIGhhbmRsZXJfY2FsbF9sb2cuYXBwZW5kKHNlbGYubmFtZSkKLSsgICAgICAgIGFz c2VydCBzZWxmLmV4Y2VwdGlvbl90eXBlIGlzIG5vdCBOb25lCi0rICAgICAgICByYWlzZSBzZWxm LmV4Y2VwdGlvbl90eXBlKCJtZXNzYWdlIikKLSsKLSsKLSsjIEEgdmVyeSBzaW1wbGUgbG9nZ2lu ZyBtaXNzaW5nIG9iamZpbGUgaGFuZGxlci4gIEFsd2F5cyByZXR1cm5zIE5vbmUKLSsjIHNvIHRo YXQgR0RCIHdpbGwgdHJ5IGFueSBvdGhlciByZWdpc3RlcmVkIGhhbmRsZXJzLCBidXQgZmlyc3Qg bG9ncwotKyMgdGhlIG5hbWUgb2YgdGhpcyBoYW5kbGVyIGludG8gdGhlIGdsb2JhbCBIQU5ETEVS X0NBTExfTE9HLCB3aGljaCBjYW4KLSsjIHRoZW4gYmUgY2hlY2tlZCBmcm9tIHRoZSB0ZXN0IHNj cmlwdC4KLStjbGFzcyBsb2dfaGFuZGxlcihNaXNzaW5nT2JqZmlsZUhhbmRsZXIpOgotKyAgICBk ZWYgX19jYWxsX18oc2VsZiwgcHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSk6Ci0rICAgICAgICBn bG9iYWwgaGFuZGxlcl9jYWxsX2xvZwotKyAgICAgICAgY2hlY2tfYXJncyhwc3BhY2UsIGJ1aWxk aWQsIGZpbGVuYW1lKQotKyAgICAgICAgaGFuZGxlcl9jYWxsX2xvZy5hcHBlbmQoc2VsZi5uYW1l KQotKyAgICAgICAgcmV0dXJuIE5vbmUKLSsKLSsKLSsjIEEgYmFzaWMgaGVscGVyIGZ1bmN0aW9u LCB0aGlzIGtlZXBzIGxpbmVzIHNob3J0ZXIgaW4gdGhlIFRDTCBzY3JpcHQuCi0rZGVmIHJlZ2lz dGVyKG5hbWUsIGxvY3VzPU5vbmUpOgotKyAgICBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVy X2hhbmRsZXIobG9jdXMsIGxvZ19oYW5kbGVyKG5hbWUpKQotKwotKwotKyMgQ3JlYXRlIGluc3Rh bmNlcyBvZiB0aGUgaGFuZGxlcnMsIGJ1dCBkb24ndCBpbnN0YWxsIGFueS4gIFdlIGluc3RhbGwK LSsjIHRoZXNlIGFzIG5lZWRlZCBmcm9tIHRoZSBUQ0wgc2NyaXB0LgotK3JoYW5kbGVyID0gZXhj ZXB0aW9uX2hhbmRsZXIoKQotK2hhbmRsZXJfb2JqID0gaGFuZGxlcigpCi0rCi0rcHJpbnQoIlN1 Y2Nlc3MiKQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnNlcnZlci9idWlsZC1pZC1z ZXFuby5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuc2VydmVyL2J1aWxkLWlkLXNlcW5vLmMKLW5ldyBm aWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5z ZXJ2ZXIvYnVpbGQtaWQtc2Vxbm8uYwotQEAgLTAsMCArMSwyMiBAQAotKy8qIFRoaXMgdGVzdGNh c2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0rCi0rICAgQ29weXJpZ2h0IDIw MjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Ci0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotK2ludAotK21haW4gKHZvaWQpCi0rewotKyAgcmV0 dXJuIDA7Ci0rfQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnNlcnZlci9idWlsZC1p ZC1zZXFuby5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5zZXJ2ZXIvYnVpbGQtaWQtc2Vxbm8uZXhw Ci1uZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuc2VydmVyL2J1aWxkLWlkLXNlcW5vLmV4cAotQEAgLTAsMCArMSwxOTggQEAKLSsjIFRo aXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0rIwotKyMgQ29w eXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLSsjIFNldHVwIGEgLmJ1aWxkLWlkLyBiYXNlZCBkZWJ1 ZyBkaXJlY3RvcnkgY29udGFpbmluZyBtdWx0aXBsZSBlbnRyaWVzCi0rIyBmb3IgdGhlIHNhbWUg YnVpbGQtaWQsIHdpdGggZWFjaCBlbnRyeSBnaXZlbiBhIGRpZmZlcmVudCBzZXF1ZW5jZQotKyMg bnVtYmVyLgotKyMKLSsjIEVuc3VyZSB0aGF0IEdEQiB3aWxsIHNjYW4gb3ZlciBicm9rZW4gc3lt bGlua3MgZm9yIHRoZSBzYW1lIGJ1aWxkLWlkCi0rIyAoYnV0IGRpZmZlcmVudCBzZXF1ZW5jZSBu dW1iZXIpIHRvIGZpbmQgbGF0ZXIgd29ya2luZyBzeW1saW5rcy4KLSsjCi0rIyBUaGlzIHRlc3Qg cGxhY2VzIHRoZSBidWlsZC1pZCBmaWxlcyB3aXRoaW4gYSBkaXJlY3RvcnkgbmV4dCB0byB3aGVy ZQotKyMgZ2Ric2VydmVyIGlzIHN0YXJ0ZWQsIGFuZCBwbGFjZXMgYSByZWxhdGl2ZSBhZGRyZXNz IGluIHRoZQotKyMgZGVidWctZmlsZS1kaXJlY3RvcnksIGluIHRoaXMgd2F5IHdlIHJlcXVpcmUg R0RCIHRvIGZpbmQgdGhlIGRlYnVnCi0rIyBpbmZvcm1hdGlvbiB2aWEgZ2Ric2VydmVyLgotKwot K3JlcXVpcmUgeyFpc19yZW1vdGUgaG9zdH0KLSsKLStsb2FkX2xpYiBnZGJzZXJ2ZXItc3VwcG9y dC5leHAKLSsKLStzdGFuZGFyZF90ZXN0ZmlsZQotKwotK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAi ZmFpbGVkIHRvIHByZXBhcmUiICR0ZXN0ZmlsZSAkc3JjZmlsZV0gPT0gLTF9IHsKLSsgICAgcmV0 dXJuIC0xCi0rfQotKwotKyMgU3BsaXQgb3V0IEJJTkZJTEUuZGVidWcuICBSZW1vdmUgZGVidWcg ZnJvbSBCSU5GSUxFLgotK2lmIHtbZ2RiX2dudV9zdHJpcF9kZWJ1ZyAkYmluZmlsZV0gIT0gMH0g ewotKyAgICByZXR1cm4gLTEKLSt9Ci0rCi0rIyBHZXQgdGhlICcuYnVpbGQtaWQveHgveHh4Li4u eHh4JyBwYXJ0IG9mIHRoZSBmaWxlbmFtZS4KLStzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxk X2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkYmluZmlsZV0KLSsKLSsjIEhpZGUgKHJlbmFtZSkgQklO RklMRS5kZWJ1ZywgdGhpcyBzaG91bGQgZW5zdXJlIEdEQiBjYW4ndCBmaW5kIGl0Ci0rIyBkaXJl Y3RseSBidXQgbmVlZHMgdG8gbG9vayBmb3IgdGhlIGJ1aWxkLWlkIGJhc2VkIGZpbGUgaW4gdGhl IGRlYnVnCi0rIyBkaXJlY3RvcnkuCi0rc2V0IGhpZGRlbl9kZWJ1Z2luZm8gW3N0YW5kYXJkX291 dHB1dF9maWxlICJoaWRkZW5fJHRlc3RmaWxlLmRlYnVnIl0KLStyZW1vdGVfZXhlYyBidWlsZCAi bXYgJHtiaW5maWxlfS5kZWJ1ZyAkaGlkZGVuX2RlYnVnaW5mbyIKLSsKLSsjIEEgZmlsZW5hbWUg dGhhdCBkb2Vzbid0IGV4aXN0LiAgU29tZSBzeW1saW5rcyB3aWxsIHBvaW50IGF0IHRoaXMKLSsj IGZpbGUuCi0rc2V0IG1pc3NpbmdfZGVidWdpbmZvICJtaXNzaW5nX2RlYnVnaW5mbyIKLSsKLSsj IEhlbHBlciBjYWxsZWQgZnJvbSBnZGJfZmluaXNoIHdoZW4gdGhlICd0YXJnZXQnIGlzIHJlbW90 ZS4gIEVuc3VyZSB0aGUKLSsjIGRlYnVnIGRpcmVjdG9yeSB3ZSBjcmVhdGUgaXMgZGVsZXRlZC4K LStwcm9jIGNsZWFudXBfcmVtb3RlX3RhcmdldCB7fSB7Ci0rICAgIHJlbW90ZV9leGVjIHRhcmdl dCAicm0gLWZyIGRlYnVnLyIKLSt9Ci0rCi0raWYgeyAhW2lzX3JlbW90ZSB0YXJnZXRdIH0gewot KyAgICBzZXQgZ2Ric2VydmVyX2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImdkYnNlcnZlci1k aXIiXS8KLSt9IGVsc2UgewotKyAgICBsYXBwZW5kIGdkYl9maW5pc2hfaG9va3MgY2xlYW51cF9y ZW1vdGVfdGFyZ2V0Ci0rICAgIHNldCBnZGJzZXJ2ZXJfZGlyICIiCi0rfQotKwotKyMgQ29weSBm aWxlcyB0byB0aGUgdGFyZ2V0IChpZiBuZWVkZWQpLgotK3NldCB0YXJnZXRfYmluZmlsZSBbZ2Ri X3JlbW90ZV9kb3dubG9hZCB0YXJnZXQgJGJpbmZpbGVdCi0rc2V0IHRhcmdldF9kZWJ1Z2luZm8g W2dkYl9yZW1vdGVfZG93bmxvYWQgdGFyZ2V0ICRoaWRkZW5fZGVidWdpbmZvXQotKwotKyMgU2V0 dXAgdGhlIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSB0YXJnZXQuCi0rc2V0IGRlYnVnZGlyICIk e2dkYnNlcnZlcl9kaXJ9ZGVidWciCi0rcmVtb3RlX2V4ZWMgdGFyZ2V0IFwKLSsgICAgIm1rZGly IC1wICRkZWJ1Z2Rpci9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxlbmFtZV0iCi0rcmVtb3Rl X2V4ZWMgdGFyZ2V0IFwKLSsgICAgImxuIC1zZiAkdGFyZ2V0X2RlYnVnaW5mbyAkZGVidWdkaXIv JGJ1aWxkX2lkX2ZpbGVuYW1lIgotKwotKyMgU3RhcnQgR0RCIGFuZCBsb2FkIGdsb2JhbCBCSU5G SUxFLiAgSWYgREVCVUdJTkZPX0ZJTEUgaXMgbm90IHRoZQotKyMgZW1wdHkgc3RyaW5nIHRoZW4g dGhpcyBjb250YWlucyB0aGUgJy5idWlsZC1pZC94eC94eHguLi4ueHh4eCcgcGFydAotKyMgb2Yg dGhlIGZpbGVuYW1lIHdoaWNoIHdlIGV4cGVjdCBHREIgdG8gcmVhZCBmcm9tIHRoZSByZW1vdGUg dGFyZ2V0LgotKyMgSWYgREVCVUdJTkZPX0ZJTEUgaXMgdGhlIGVtcHR5IHN0cmluZyB0aGVuIHdl IGRvbid0IGV4cGVjdCBHREIgdG8KLSsjIGZpbmQgYW55IGRlYnVnIGluZm9ybWF0aW9uLgotK3By b2MgbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kIHsgZGVidWdpbmZvX2ZpbGUgdGVz dG5hbWUgfSB7Ci0rICAgIHdpdGhfdGVzdF9wcmVmaXggIiR0ZXN0bmFtZSIgewotKwl3aXRoX3Rp bWVvdXRfZmFjdG9yIDUgewotKwkgICAgIyBQcm9iaW5nIGZvciAuYnVpbGQtaWQgYmFzZWQgZGVi dWcgZmlsZXMgb24gcmVtb3RlCi0rCSAgICAjIHRhcmdldHMgdXNlcyB0aGUgdkZpbGU6c3RhdCBw YWNrZXQgYnkgZGVmYXVsdCwgdGhvdWdoCi0rCSAgICAjIHRoZXJlIGlzIGEgd29yayBhcm91bmQg dGhhdCBhdm9pZHMgdGhpcyB3aGljaCBjYW4gYmUKLSsJICAgICMgdXNlZCBpZiBHREIgaXMgY29u bmVjdGVkIHRvIGFuIG9sZGVyIGdkYnNlcnZlciB3aXRob3V0Ci0rCSAgICAjICdzdGF0JyBzdXBw b3J0LgotKwkgICAgIwotKwkgICAgIyBDaGVjayB0aGUgd29yayBhcm91bmQgd29ya3MgYnkgZGlz YWJsaW5nIHVzZSBvZiB0aGUKLSsJICAgICMgdkZpbGU6c3RhdCBwYWNrZXQuCi0rCSAgICBmb3Jl YWNoX3dpdGhfcHJlZml4IHN0YXRfcGt0IHthdXRvIG9mZn0gewotKwkJY2xlYW5fcmVzdGFydAot KwotKwkJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkgZGVidWci IFwKLSsJCSAgICAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgotKwotKwkJZ2RiX3Rlc3Rfbm9f b3V0cHV0ICJzZXQgc3lzcm9vdCB0YXJnZXQ6IgotKwotKwkJZ2RiX3Rlc3QgInNldCByZW1vdGUg aG9zdGlvLXN0YXQtcGFja2V0ICRzdGF0X3BrdCIKLSsKLSsJCSMgTWFrZSBzdXJlIHdlJ3JlIGRp c2Nvbm5lY3RlZCwgaW4gY2FzZSB3ZSdyZSB0ZXN0aW5nIHdpdGggYW4KLSsJCSMgZXh0ZW5kZWQt cmVtb3RlIGJvYXJkLCB0aGVyZWZvcmUgYWxyZWFkeSBjb25uZWN0ZWQuCi0rCQlnZGJfdGVzdCAi ZGlzY29ubmVjdCIgIi4qIgotKwotKwkJIyBTdGFydCBnZGJzZXJ2ZXIuICBUaGlzIG5lZWRzIHRv IGJlIGRvbmUgYWZ0ZXIgc3RhcnRpbmcgR0RCLiAgV2hlbgotKwkJIyBnZGJzZXJ2ZXIgaXMgcnVu bmluZyBsb2NhbCB0byBHREIsIHN0YXJ0IGdkYnNlcnZlciBpbiBhIHN1Yi1kaXJlY3RvcnksCi0r CQkjIHRoaXMgcHJldmVudHMgR0RCIGZyb20gZmluZGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24g aXRzZWxmLgotKwkJaWYgeyAhW2lzX3JlbW90ZSB0YXJnZXRdIH0gewotKwkJICAgIHdpdGhfY3dk ICQ6OmdkYnNlcnZlcl9kaXIgewotKwkJCXNldCByZXMgW2dkYnNlcnZlcl9zdGFydCAiIiAkOjp0 YXJnZXRfYmluZmlsZV0KLSsJCSAgICB9Ci0rCQl9IGVsc2UgewotKwkJICAgIHNldCByZXMgW2dk YnNlcnZlcl9zdGFydCAiIiAkOjp0YXJnZXRfYmluZmlsZV0KLSsJCX0KLSsJCXNldCBnZGJzZXJ2 ZXJfcHJvdG9jb2wgW2xpbmRleCAkcmVzIDBdCi0rCQlzZXQgZ2Ric2VydmVyX2dkYnBvcnQgW2xp bmRleCAkcmVzIDFdCi0rCi0rCQkjIENvbm5lY3QgdG8gZ2Ric2VydmVyLiAgVGhlIG91dHB1dCB3 aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBnbG9iYWwKLSsJCSMgR0RCX1RBUkdFVF9SRU1PVEVfQ01E X01TRywgYW5kIHdlJ2xsIG1hdGNoIGFnYWluc3QgdGhpcyBiZWxvdy4KLSsJCWdkYl9hc3NlcnQg e1tnZGJfdGFyZ2V0X2NtZCAkZ2Ric2VydmVyX3Byb3RvY29sICRnZGJzZXJ2ZXJfZ2RicG9ydF0g PT0gMH0gXAotKwkJICAgICJjb25uZWN0IHRvIGdkYnNlcnZlciIKLSsKLSsJCWlmIHsgJGRlYnVn aW5mb19maWxlIG5lICIiIH0gewotKwkJICAgIGdkYl9hc3NlcnQgeyBbcmVnZXhwICJSZWFkaW5n IHN5bWJvbHMgZnJvbSB0YXJnZXQ6ZGVidWcvW3N0cmluZ190b19yZWdleHAgJGRlYnVnaW5mb19m aWxlXVxcLlxcLlxcLiIgXAotKwkJCQkgICAgICAkOjpnZGJfdGFyZ2V0X3JlbW90ZV9jbWRfbXNn XSB9IFwKLSsJCQkiZGVidWdpbmZvIHdhcyByZWFkIHZpYSBidWlsZC1pZCIKLSsJCSAgICBnZGJf YXNzZXJ0IHsgW3JlZ2V4cCAiUmVhZGluZyBkZWJ1Zy9bc3RyaW5nX3RvX3JlZ2V4cCAkZGVidWdp bmZvX2ZpbGVdIGZyb20gcmVtb3RlIHRhcmdldFxcLlxcLlxcLiIgXAotKwkJCQkgICAgICAkOjpn ZGJfdGFyZ2V0X3JlbW90ZV9jbWRfbXNnXSB9IFwKLSsJCQkiZGVidWdpbmZvIHdhcyByZWFkIGZy b20gcmVtb3RlIHRhcmdldCIKLSsJCX0gZWxzZSB7Ci0rCQkgICAgZ2RiX2Fzc2VydCB7IFtyZWdl eHAgIlxcKE5vIGRlYnVnZ2luZyBzeW1ib2xzIGZvdW5kIGluIFxbXlxyXG5cXSsvJDo6dGVzdGZp bGVcXCkiIFwKLSsJCQkJICAgICAgJDo6Z2RiX3RhcmdldF9yZW1vdGVfY21kX21zZ10gfQotKwkJ fQotKwkgICAgfQotKwl9Ci0rICAgIH0KLSt9Ci0rCi0rIyBSZXR1cm4gYSBjb3B5IG9mIEZJTEVO QU1FLCB3aGljaCBzaG91bGQgZW5kICcuZGVidWcnLCB3aXRoIE5VTUJFUgotKyMgYWRkZWQsIGUu Zy4gYWRkX3NlcW5vIDEgImZvby5kZWJ1ZyIgLS0+ICJmb28uMS5kZWJ1ZyIuCi0rcHJvYyBhZGRf c2Vxbm8geyBudW1iZXIgZmlsZW5hbWUgfSB7Ci0rICAgIHJldHVybiBbcmVnc3ViICJcLmRlYnVn XCQiICRmaWxlbmFtZSAiLiR7bnVtYmVyfS5kZWJ1ZyJdCi0rfQotKwotKyMgUHJlY29tcHV0ZSBz ZXF1ZW5jZSBudW1iZXJlZCBidWlsZC1pZCBmaWxlbmFtZXMuCi0rc2V0IGJ1aWxkX2lkXzFfZmls ZW5hbWUgW2FkZF9zZXFubyAxICRidWlsZF9pZF9maWxlbmFtZV0KLStzZXQgYnVpbGRfaWRfMl9m aWxlbmFtZSBbYWRkX3NlcW5vIDIgJGJ1aWxkX2lkX2ZpbGVuYW1lXQotK3NldCBidWlsZF9pZF8z X2ZpbGVuYW1lIFthZGRfc2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5hbWVdCi0rCi0rbG9hZF9iaW5m aWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kICRidWlsZF9pZF9maWxlbmFtZSBcCi0rICAgICJmaW5k IGRlYnVnaW5mbyB3aXRoIGEgc2luZ2xlIGJ1aWxkLWlkIGZpbGUiCi0rCi0rcmVtb3RlX2V4ZWMg dGFyZ2V0ICJsbiAtZnMgJHRhcmdldF9kZWJ1Z2luZm8gXAotKwkJCSRkZWJ1Z2Rpci8kYnVpbGRf aWRfMV9maWxlbmFtZSIKLStyZW1vdGVfZXhlYyB0YXJnZXQgImxuIC1mcyAkdGFyZ2V0X2RlYnVn aW5mbyBcCi0rCQkJJGRlYnVnZGlyLyRidWlsZF9pZF8yX2ZpbGVuYW1lIgotK3JlbW90ZV9leGVj IHRhcmdldCAibG4gLWZzICR0YXJnZXRfZGVidWdpbmZvIFwKLSsJCQkkZGVidWdkaXIvJGJ1aWxk X2lkXzNfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kICRi dWlsZF9pZF9maWxlbmFtZSBcCi0rICAgICJmaW5kIGRlYnVnaW5mbyB3aXRoIDQgYnVpbGQtaWQg ZmlsZXMiCi0rCi0rcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZv ICRkZWJ1Z2Rpci8kYnVpbGRfaWRfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2Rl YnVnX2lzX2ZvdW5kICRidWlsZF9pZF8xX2ZpbGVuYW1lIFwKLSsgICAgImZpbmQgZGVidWdpbmZv LCBmaXJzdCBidWlsZC1pZCBmaWxlIGlzIGJhZCIKLSsKLStyZW1vdGVfZXhlYyB0YXJnZXQgImxu IC1mcyAkbWlzc2luZ19kZWJ1Z2luZm8gXAotKwkJCSRkZWJ1Z2Rpci8kYnVpbGRfaWRfMV9maWxl bmFtZSIKLStyZW1vdGVfZXhlYyB0YXJnZXQgImxuIC1mcyAkbWlzc2luZ19kZWJ1Z2luZm8gXAot KwkJCSRkZWJ1Z2Rpci8kYnVpbGRfaWRfM19maWxlbmFtZSIKLSsKLStsb2FkX2JpbmZpbGVfY2hl Y2tfZGVidWdfaXNfZm91bmQgJGJ1aWxkX2lkXzJfZmlsZW5hbWUgIFwKLSsgICAgImZpbmQgZGVi dWdpbmZvLCBmaXJzdCAyIGJ1aWxkLWlkIGZpbGVzIGFyZSBiYWQiCi0rCi0rcmVtb3RlX2V4ZWMg dGFyZ2V0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZvIFwKLSsJCQkkZGVidWdkaXIvJGJ1aWxk X2lkXzJfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kICIi ICBcCi0rICAgICJjYW5ub3QgZmluZCBkZWJ1Z2luZm8sIGFsbCBidWlsZC1pZCBmaWxlcyBhcmUg YmFkIgotKwotK3JlbW90ZV9leGVjIHRhcmdldCAibG4gLWZzICR0YXJnZXRfZGVidWdpbmZvIFwK LSsJCQkkZGVidWdkaXIvJGJ1aWxkX2lkXzNfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2No ZWNrX2RlYnVnX2lzX2ZvdW5kICRidWlsZF9pZF8zX2ZpbGVuYW1lICBcCi0rICAgICJmaW5kIGRl YnVnaW5mbywgbGFzdCBidWlsZC1pZCBmaWxlIGlzIGdvb2QiCi0rCi0rcmVtb3RlX2V4ZWMgdGFy Z2V0ICJybSAtZiAkZGVidWdkaXIvJGJ1aWxkX2lkXzFfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5m aWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kICIiICBcCi0rICAgICJjYW5ub3QgZmluZCBkZWJ1Z2lu Zm8sIGZpbGUgd2l0aCBzZXFubyAxIGlzIG1pc3NpbmciCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3Rz dWl0ZS9saWIvZHdhcmYuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZHdhcmYuZXhwCi0tLS0gYS9n ZGIvdGVzdHN1aXRlL2xpYi9kd2FyZi5leHAKLSsrKyBiL2dkYi90ZXN0c3VpdGUvbGliL2R3YXJm LmV4cAotQEAgLTI5OTMsMjUgKzI5OTMsMzIgQEAgbmFtZXNwYWNlIGV2YWwgRHdhcmYgewotIAot ICAgICBwcm9jIF9ub3RlIHt0eXBlIG5hbWUgaGV4ZGF0YX0gewotIAlzZXQgbmFtZWxlbiBbZXhw ciBbc3RyaW5nIGxlbmd0aCAkbmFtZV0gKyAxXQotKwlzZXQgZGF0YWxlbiBbZXhwciBbc3RyaW5n IGxlbmd0aCAkaGV4ZGF0YV0gLyAyXQotIAotIAkjIE5hbWUgc2l6ZS4KLSAJX29wIC40Ynl0ZSAk bmFtZWxlbgotIAkjIERhdGEgc2l6ZS4KLS0JX29wIC40Ynl0ZSBbZXhwciBbc3RyaW5nIGxlbmd0 aCAkaGV4ZGF0YV0gLyAyXQotKwlfb3AgLjRieXRlICRkYXRhbGVuCi0gCSMgVHlwZS4KLSAJX29w IC40Ynl0ZSAkdHlwZQotIAkjIFRoZSBuYW1lLgotIAlfb3AgLmFzY2lpIFtfcXVvdGUgJG5hbWVd Ci0tCSMgQWxpZ25tZW50LgotKwkjIEFsaWdubWVudCAodG8gNC1ieXRlIGJvdW5kYXJ5KS4KLSAJ c2V0IGFsaWduIDIKLSAJc2V0IHRvdGFsIFtleHByIHsoJG5hbWVsZW4gKyAoMSA8PCAkYWxpZ24p IC0gMSkgJiAtKDEgPDwgJGFsaWduKX1dCi0gCWZvciB7c2V0IGkgJG5hbWVsZW59IHskaSA8ICR0 b3RhbH0ge2luY3IgaX0gewotLQkgICAgX29wIC5ieXRlIDAKLSsJICAgIF9vcCAuYnl0ZSAwIHBh ZGRpbmcKLSAJfQotIAkjIFRoZSBkYXRhLgotIAlmb3JlYWNoIHthIGJ9IFtzcGxpdCAkaGV4ZGF0 YSB7fV0gewotIAkgICAgX29wIC5ieXRlIDB4JGEkYgotIAl9Ci0rCSMgQWxpZ25tZW50ICh0byA0 LWJ5dGUgYm91bmRhcnkpLgotKwlzZXQgYWxpZ24gMgotKwlzZXQgdG90YWwgW2V4cHIgeygkZGF0 YWxlbiArICgxIDw8ICRhbGlnbikgLSAxKSAmIC0oMSA8PCAkYWxpZ24pfV0KLSsJZm9yIHtzZXQg aSAkZGF0YWxlbn0geyRpIDwgJHRvdGFsfSB7aW5jciBpfSB7Ci0rCSAgICBfb3AgLmJ5dGUgMCBw YWRkaW5nCi0rCX0KLSAgICAgfQotIAotICAgICAjIEVtaXQgYSBub3RlIHNlY3Rpb24gaG9sZGlu ZyB0aGUgZ2l2ZW4gYnVpbGQtaWQuCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2Ri LmV4cCBiL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKLS0tLSBhL2dkYi90ZXN0c3VpdGUvbGli L2dkYi5leHAKLSsrKyBiL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKLUBAIC01MzM3LDYgKzUz MzcsNyBAQCBwcm9jIHF1b3RlX2Zvcl9ob3N0IHsgYXJncyB9IHsKLSAjICAgICBkZWJ1ZyBpbmZv cm1hdGlvbgotICMgICAtIHRleHRfc2VnbWVudD1hZGRyOiBUZWxsIHRoZSBsaW5rZXIgdG8gcGxh Y2UgdGhlIHRleHQgc2VnbWVudCBhdCBBRERSLgotICMgICAtIGJ1aWxkLWlkOiBFbnN1cmUgdGhl IGZpbmFsIGJpbmFyeSBpbmNsdWRlcyBhIGJ1aWxkLWlkLgotKyMgICAtIG5vLWJ1aWxkLWlkOiBF bnN1cmUgdGhlIGZpbmFsIGJpbmFyeSBkb2VzIG5vdCBpbmNsdWRlIGEgYnVpbGQtaWQuCi0gIyAg IC0gY29sdW1uLWluZm8vbm8tY29sdW1uLWluZm86IEVuYWJsZS9EaXNhYmxlIGdlbmVyYXRpb24g b2YgY29sdW1uIHRhYmxlCi0gIyAgICAgaW5mb3JtYXRpb24uCi0gIwotQEAgLTU0NDgsNiArNTQ0 OSwxOCBAQCBwcm9jIGdkYl9jb21waWxlIHtzb3VyY2UgZGVzdCB0eXBlIG9wdGlvbnN9IHsKLSAJ bGFwcGVuZCBuZXdfb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0tV2wsLS1idWlsZC1pZCIKLSAg ICAgfQotIAotKyAgICAjIElmIHRoZSAnbm8tYnVpbGQtaWQnIG9wdGlvbiBpcyB1c2VkIHRoZW4g ZGlzYWJsZSB0aGUgYnVpbGQtaWQuCi0rICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJG9wdGlvbnMg bm8tYnVpbGQtaWRdID4gMH0gewotKwlsYXBwZW5kIG5ld19vcHRpb25zICJhZGRpdGlvbmFsX2Zs YWdzPS1XbCwtLWJ1aWxkLWlkPW5vbmUiCi0rICAgIH0KLSsKLSsgICAgIyBTYW5pdHkgY2hlY2su ICBJZiBib3RoICdidWlsZC1pZCcgYW5kICduby1idWlsZC1pZCcgYXJlIHVzZWQKLSsgICAgIyB0 aGVuIHdoYXQgaXMgZXhwZWN0ZWQgZnJvbSB1cyEKLSsgICAgaWYge1tsc2VhcmNoIC1leGFjdCAk b3B0aW9ucyBidWlsZC1pZF0gPiAwCi0rCSYmIFtsc2VhcmNoIC1leGFjdCAkb3B0aW9ucyBuby1i dWlsZC1pZF0gPiAwfSB7Ci0rCWVycm9yICJjYW5ub3QgdXNlIGJ1aWxkLWlkIGFuZCBuby1idWls ZC1pZCBvcHRpb25zIgotKyAgICB9Ci0rCi0gICAgICMgVHJlYXRpbmcgLmMgaW5wdXQgZmlsZXMg YXMgQysrIGlzIGRlcHJlY2F0ZWQgaW4gQ2xhbmcsIHNvCi0gICAgICMgZXhwbGljaXRseSBmb3Jj ZSBDKysgbGFuZ3VhZ2UuCi0gICAgIGlmIHsgISRnZXR0aW5nX2NvbXBpbGVyX2luZm8KLUBAIC04 MTQ0LDIxICs4MTU3LDI1IEBAIHByb2MgZ2V0X2J1aWxkX2lkIHsgZmlsZW5hbWUgfSB7Ci0gCi0g IyBSZXR1cm4gdGhlIGJ1aWxkLWlkIGhleCBzdHJpbmcgKHVzdWFsbHkgMTYwIGJpdHMgYXMgNDAg aGV4IGNoYXJhY3RlcnMpCi0gIyBjb252ZXJ0ZWQgdG8gdGhlIGZvcm06IC5idWlsZC1pZC9hYi9j ZGVmMTIzNC4uLjg5LmRlYnVnCi0rIwotKyMgVGhlICcuZGVidWcnIHN1ZmZpeCBjYW4gYmUgY2hh bmdlZCBieSBwYXNzaW5nIHRoZSBTVUZGSVggYXJndW1lbnQuCi0rIwotICMgUmV0dXJuICIiIGlm IG5vIGJ1aWxkLWlkIGZvdW5kLgotLXByb2MgYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0IHsg ZmlsZW5hbWUgfSB7Ci0rcHJvYyBidWlsZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgeyBmaWxlbmFt ZSB7c3VmZml4ICIuZGVidWcifSB9IHsKLSAgICAgc2V0IGRhdGEgW2dldF9idWlsZF9pZCAkZmls ZW5hbWVdCi0gICAgIGlmIHsgJGRhdGEgPT0gIiIgfSB7Ci0gCXJldHVybiAiIgotICAgICB9Ci0g ICAgIHJlZ3N1YiB7Xi4ufSAkZGF0YSB7XDAvfSBkYXRhCi0tICAgIHJldHVybiAiLmJ1aWxkLWlk LyR7ZGF0YX0uZGVidWciCi0rICAgIHJldHVybiAiLmJ1aWxkLWlkLyR7ZGF0YX0ke3N1ZmZpeH0i Ci0gfQotIAotICMgREVTVCBzaG91bGQgYmUgYSBmaWxlIGNvbXBpbGVkIHdpdGggZGVidWcgaW5m b3JtYXRpb24uICBUaGlzIHByb2MKLS0jIGNyZWF0ZXMgdHdvIG5ldyBmaWxlcyBERVNULmRlYnVn IHdoaWNoIGNvbnRhaW5zIHRoZSBkZWJ1ZwotLSMgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20g REVTVCwgYW5kIERFU1Quc3RyaXBwZWQsIHdoaWNoIGlzIGEgY29weQotLSMgb2YgREVTVCB3aXRo IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiByZW1vdmVkLiAgQSAnLmdudV9kZWJ1Z2xpbmsnCi0tIyBz ZWN0aW9uIHdpbGwgYmUgYWRkZWQgdG8gREVTVC5zdHJpcHBlZCB0aGF0IHBvaW50cyB0byBERVNU LmRlYnVnLgotKyMgY3JlYXRlcyBERVNULmRlYnVnIHdoaWNoIGNvbnRhaW5zIHRoZSBkZWJ1ZyBp bmZvcm1hdGlvbiBleHRyYWN0ZWQKLSsjIGZyb20gREVTVCwgYW5kIERFU1QgaXMgdXBkYXRlZCB3 aXRoIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiByZW1vdmVkLgotKyMKLSsjIEJ5IGRlZmF1bHQgYSAn LmdudV9kZWJ1Z2xpbmsnIHNlY3Rpb24gd2lsbCBiZSBhZGRlZCB0byBERVNUIHRoYXQKLSsjIHBv aW50cyB0byBERVNULmRlYnVnLgotICMKLSAjIElmIEFSR1MgaXMgcGFzc2VkLCBpdCBpcyBhIGxp c3Qgb2Ygb3B0aW9uYWwgZmxhZ3MuICBUaGUgY3VycmVudGx5Ci0gIyBzdXBwb3J0ZWQgZmxhZ3Mg YXJlOgotQEAgLTgxNjYsNyArODE4Myw3IEBAIHByb2MgYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVf Z2V0IHsgZmlsZW5hbWUgfSB7Ci0gIyAgIC0gbm8tbWFpbiA6IHJlbW92ZSB0aGUgc3ltYm9sIGVu dHJ5IGZvciBtYWluIGZyb20gdGhlIHNlcGFyYXRlCi0gIyAgICAgICAgICAgICAgIGRlYnVnIGZp bGUgREVTVC5kZWJ1ZywKLSAjICAgLSBuby1kZWJ1Z2xpbmsgOiBkb24ndCBhZGQgdGhlICcuZ251 X2RlYnVnbGluaycgc2VjdGlvbiB0bwotLSMgICAgICAgICAgICAgICAgICAgIERFU1Quc3RyaXBw ZWQuCi0rIyAgICAgICAgICAgICAgICAgICAgREVTVC4KLSAjCi0gIyBGdW5jdGlvbiByZXR1cm5z IHplcm8gb24gc3VjY2Vzcy4gIEZ1bmN0aW9uIHdpbGwgcmV0dXJuIG5vbi16ZXJvIGZhaWx1cmUg Y29kZQotICMgb24gc29tZSB0YXJnZXRzIG5vdCBzdXBwb3J0aW5nIHNlcGFyYXRlIGRlYnVnIGlu Zm8gKHN1Y2ggYXMgaTM4Ni1tc2RvcykuCi1AQCAtODIyNSwyMCArODI0MiwyNiBAQCBwcm9jIGdk Yl9nbnVfc3RyaXBfZGVidWcgeyBkZXN0IGFyZ3MgfSB7Ci0gICAgICMgVW5sZXNzIHRoZSAibm8t ZGVidWdsaW5rIiBmbGFnIGlzIHBhc3NlZCwgdGhlbiBsaW5rIHRoZSB0d28KLSAgICAgIyBwcmV2 aW91cyBvdXRwdXQgZmlsZXMgdG9nZXRoZXIsIGFkZGluZyB0aGUgLmdudV9kZWJ1Z2xpbmsKLSAg ICAgIyBzZWN0aW9uIHRvIHRoZSBzdHJpcHBlZF9maWxlLCBjb250YWluaW5nIGEgcG9pbnRlciB0 byB0aGUKLS0gICAgIyBkZWJ1Z19maWxlLCBzYXZlIHRoZSBuZXcgZmlsZSBpbiBkZXN0LgotKyAg ICAjIGRlYnVnX2ZpbGUuCi0gICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGFyZ3MgIm5vLWRlYnVn bGluayJdID09IC0xfSB7Ci0tCXNldCByZXN1bHQgW2NhdGNoICJleGVjICRvYmpjb3B5X3Byb2dy YW0gLS1hZGQtZ251LWRlYnVnbGluaz0ke2RlYnVnX2ZpbGV9ICR7c3RyaXBwZWRfZmlsZX0gJHtk ZXN0fSIgb3V0cHV0XQotKwlzZXQgcmVzdWx0IFtjYXRjaCAiZXhlYyAkb2JqY29weV9wcm9ncmFt IC0tYWRkLWdudS1kZWJ1Z2xpbms9JHtkZWJ1Z19maWxlfSAke3N0cmlwcGVkX2ZpbGV9ICR7c3Ry aXBwZWRfZmlsZX0tdG1wIiBvdXRwdXRdCi0gCXZlcmJvc2UgInJlc3VsdCBpcyAkcmVzdWx0Igot IAl2ZXJib3NlICJvdXRwdXQgaXMgJG91dHB1dCIKLSAJaWYgeyRyZXN1bHQgPT0gMX0gewotIAkg ICAgcmV0dXJuIDEKLSAJfQotKwlmaWxlIGRlbGV0ZSAiJHtzdHJpcHBlZF9maWxlfSIKLSsJZmls ZSByZW5hbWUgIiR7c3RyaXBwZWRfZmlsZX0tdG1wIiAiJHtzdHJpcHBlZF9maWxlfSIKLSAgICAg fQotIAotICAgICAjIFdvcmthcm91bmQgUFIgYmludXRpbHMvMTA4MDI6Ci0gICAgICMgUHJlc2Vy dmUgdGhlICd4JyBiaXQgYWxzbyBmb3IgUElFcyAoUG9zaXRpb24gSW5kZXBlbmRlbnQgRXhlY3V0 YWJsZXMpLgotLSAgICBzZXQgcGVybSBbZmlsZSBhdHRyaWJ1dGVzICR7c3RyaXBwZWRfZmlsZX0g LXBlcm1pc3Npb25zXQotLSAgICBmaWxlIGF0dHJpYnV0ZXMgJHtkZXN0fSAtcGVybWlzc2lvbnMg JHBlcm0KLSsgICAgc2V0IHBlcm0gW2ZpbGUgYXR0cmlidXRlcyAke2Rlc3R9IC1wZXJtaXNzaW9u c10KLSsgICAgZmlsZSBhdHRyaWJ1dGVzICR7c3RyaXBwZWRfZmlsZX0gLXBlcm1pc3Npb25zICRw ZXJtCi0rCi0rICAgICMgTW92ZSB0aGUgc3RyaXBwZWRfZmlsZSBiYWNrIGludG8gZGVzdC4KLSsg ICAgZmlsZSBkZWxldGUgJHtkZXN0fQotKyAgICBmaWxlIHJlbmFtZSAke3N0cmlwcGVkX2ZpbGV9 ICR7ZGVzdH0KLSAKLSAgICAgcmV0dXJuIDAKLSB9Ci1kaWZmIC0tZ2l0IGEvZ2Ric2VydmVyL2hv c3Rpby5jYyBiL2dkYnNlcnZlci9ob3N0aW8uY2MKLS0tLSBhL2dkYnNlcnZlci9ob3N0aW8uY2MK LSsrKyBiL2dkYnNlcnZlci9ob3N0aW8uY2MKLUBAIC00ODYsNiArNDg2LDQyIEBAIGhhbmRsZV9m c3RhdCAoY2hhciAqb3duX2J1ZiwgaW50ICpuZXdfcGFja2V0X2xlbikKLSAgICAgd3JpdGVfZW5u IChvd25fYnVmKTsKLSB9Ci0gCi0rc3RhdGljIHZvaWQKLStoYW5kbGVfc3RhdCAoY2hhciAqb3du X2J1ZiwgaW50ICpuZXdfcGFja2V0X2xlbikKLSt7Ci0rICBpbnQgYnl0ZXNfc2VudDsKLSsgIGNo YXIgKnA7Ci0rICBzdHJ1Y3Qgc3RhdCBzdDsKLSsgIHN0cnVjdCBmaW9fc3RhdCBmc3Q7Ci0rICBj aGFyIGZpbGVuYW1lW0hPU1RJT19QQVRIX01BWF07Ci0rCi0rICBwID0gb3duX2J1ZiArIHN0cmxl biAoInZGaWxlOnN0YXQ6Iik7Ci0rCi0rICBpZiAocmVxdWlyZV9maWxlbmFtZSAoJnAsIGZpbGVu YW1lKQotKyAgICAgIHx8IHJlcXVpcmVfZW5kIChwKSkKLSsgICAgewotKyAgICAgIGhvc3Rpb19w YWNrZXRfZXJyb3IgKG93bl9idWYpOwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKwotKyAgaWYg KGxzdGF0IChmaWxlbmFtZSwgJnN0KSA9PSAtMSkKLSsgICAgewotKyAgICAgIGhvc3Rpb19lcnJv ciAob3duX2J1Zik7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rCi0rICBob3N0X3RvX2ZpbGVp b19zdGF0ICgmc3QsICZmc3QpOwotKwotKyAgYnl0ZXNfc2VudCA9IGhvc3Rpb19yZXBseV93aXRo X2RhdGEgKG93bl9idWYsCi0rCQkJCSAgICAgICAoY2hhciAqKSAmZnN0LCBzaXplb2YgKGZzdCks Ci0rCQkJCSAgICAgICBuZXdfcGFja2V0X2xlbik7Ci0rCi0rICAvKiBJZiB0aGUgcmVzcG9uc2Ug ZG9lcyBub3QgZml0IGludG8gYSBzaW5nbGUgcGFja2V0LCBkbyBub3QgYXR0ZW1wdAotKyAgICAg dG8gcmV0dXJuIGEgcGFydGlhbCByZXNwb25zZSwgYnV0IHNpbXBseSBmYWlsLiAgKi8KLSsgIGlm IChieXRlc19zZW50IDwgc2l6ZW9mIChmc3QpKQotKyAgICB3cml0ZV9lbm4gKG93bl9idWYpOwot K30KLSsKLSBzdGF0aWMgdm9pZAotIGhhbmRsZV9jbG9zZSAoY2hhciAqb3duX2J1ZikKLSB7Ci1A QCAtNjAzLDYgKzYzOSw4IEBAIGhhbmRsZV92RmlsZSAoY2hhciAqb3duX2J1ZiwgaW50IHBhY2tl dF9sZW4sIGludCAqbmV3X3BhY2tldF9sZW4pCi0gICAgIGhhbmRsZV9wd3JpdGUgKG93bl9idWYs IHBhY2tldF9sZW4pOwotICAgZWxzZSBpZiAoc3RhcnRzd2l0aCAob3duX2J1ZiwgInZGaWxlOmZz dGF0OiIpKQotICAgICBoYW5kbGVfZnN0YXQgKG93bl9idWYsIG5ld19wYWNrZXRfbGVuKTsKLSsg IGVsc2UgaWYgKHN0YXJ0c3dpdGggKG93bl9idWYsICJ2RmlsZTpzdGF0OiIpKQotKyAgICBoYW5k bGVfc3RhdCAob3duX2J1ZiwgbmV3X3BhY2tldF9sZW4pOwotICAgZWxzZSBpZiAoc3RhcnRzd2l0 aCAob3duX2J1ZiwgInZGaWxlOmNsb3NlOiIpKQotICAgICBoYW5kbGVfY2xvc2UgKG93bl9idWYp OwotICAgZWxzZSBpZiAoc3RhcnRzd2l0aCAob3duX2J1ZiwgInZGaWxlOnVubGluazoiKSkKLWRp ZmYgLS1naXQgYS9nZGJzdXBwb3J0L3BhdGhzdHVmZi5jYyBiL2dkYnN1cHBvcnQvcGF0aHN0dWZm LmNjCi0tLS0gYS9nZGJzdXBwb3J0L3BhdGhzdHVmZi5jYwotKysrIGIvZ2Ric3VwcG9ydC9wYXRo c3R1ZmYuY2MKLUBAIC0xOTgsMTEgKzE5OCwxNyBAQCBwYXRoX2pvaW4gKGdkYjo6YXJyYXlfdmll dzxjb25zdCBjaGFyICo+IHBhdGhzKQotICAgICB7Ci0gICAgICAgY29uc3QgY2hhciAqcGF0aCA9 IHBhdGhzW2ldOwotIAotLSAgICAgIGlmIChpID4gMCkKLS0JZ2RiX2Fzc2VydCAoc3RybGVuIChw YXRoKSA9PSAwIHx8ICFJU19BQlNPTFVURV9QQVRIIChwYXRoKSk7Ci0tCi0tICAgICAgaWYgKCFy ZXQuZW1wdHkgKCkgJiYgIUlTX0RJUl9TRVBBUkFUT1IgKHJldC5iYWNrICgpKSkKLS0JICByZXQg Kz0gJy8nOwotKyAgICAgIGlmICghcmV0LmVtcHR5ICgpKQotKwl7Ci0rCSAgLyogSWYgUkVUIGRv ZXNuJ3QgYWxyZWFkeSBlbmQgd2l0aCBhIHNlcGFyYXRvciB0aGVuIGFkZCBvbmUuICAqLwotKwkg IGlmICghSVNfRElSX1NFUEFSQVRPUiAocmV0LmJhY2sgKCkpKQotKwkgICAgcmV0ICs9ICcvJzsK LSsKLSsJICAvKiBOb3cgdGhhdCBSRVQgZW5kcyB3aXRoIGEgc2VwYXJhdG9yLCBpZ25vcmUgYW55 IGF0IHRoZSBzdGFydCBvZgotKwkgICAgIFBBVEguICAqLwotKwkgIHdoaWxlIChJU19ESVJfU0VQ QVJBVE9SIChwYXRoWzBdKSkKLSsJICAgICsrcGF0aDsKLSsJfQotIAotICAgICAgIHJldC5hcHBl bmQgKHBhdGgpOwotICAgICB9Ci1kaWZmIC0tZ2l0IGEvZ2Ric3VwcG9ydC9wYXRoc3R1ZmYuaCBi L2dkYnN1cHBvcnQvcGF0aHN0dWZmLmgKLS0tLSBhL2dkYnN1cHBvcnQvcGF0aHN0dWZmLmgKLSsr KyBiL2dkYnN1cHBvcnQvcGF0aHN0dWZmLmgKLUBAIC02NCw4ICs2NCwxMCBAQCBleHRlcm4gY29u c3QgY2hhciAqY2hpbGRfcGF0aCAoY29uc3QgY2hhciAqcGFyZW50LCBjb25zdCBjaGFyICpjaGls ZCk7Ci0gCi0gLyogSm9pbiBlbGVtZW50cyBpbiBQQVRIUyBpbnRvIGEgc2luZ2xlIHBhdGguCi0g Ci0tICAgVGhlIGZpcnN0IGVsZW1lbnQgY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLiAgQWxs IHRoZSBvdGhlcnMgbXVzdCBiZQotLSAgIHJlbGF0aXZlLiAgKi8KLSsgICBUaGUgZmlyc3QgZWxl bWVudCBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUuICBPbmx5IGEgc2luZ2xlIGRpcmVjdG9y eQotKyAgIHNlcGFyYXRvciB3aWxsIGJlIHBsYWNlZCBiZXR3ZWVuIGVsZW1lbnRzIG9mIFBBVEhT LCBpZiBvbmUgZWxlbWVudCBlbmRzCi0rICAgd2l0aCBhIGRpcmVjdG9yeSBzZXBhcmF0b3IsIG9y IGFuIGVsZW1lbnQgc3RhcnRzIHdpdGggYSBkaXJlY3RvcnkKLSsgICBzZXBhcmF0b3IsIHRoZW4g dGhlc2Ugd2lsbCBiZSBjb2xsYXBzZWQgaW50byBhIHNpbmdsZSBzZXBhcmF0b3IuICAqLwotIAot IGV4dGVybiBzdGQ6OnN0cmluZyBwYXRoX2pvaW4gKGdkYjo6YXJyYXlfdmlldzxjb25zdCBjaGFy ICo+IHBhdGhzKTsKLSAKCmRpZmYgLS1naXQgYS9nZGItY2F0Y2hwb2ludC1yZS1zZXQucGF0Y2gg Yi9nZGItY2F0Y2hwb2ludC1yZS1zZXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDQ5ODk3MDAuLjAwMDAwMDAKLS0tIGEvZ2RiLWNhdGNocG9pbnQtcmUtc2V0LnBhdGNoCisr KyAvZGV2L251bGwKQEAgLTEsNTc1ICswLDAgQEAKLUZyb20gRkVET1JBX1BBVENIRVMgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbmRyZXcgQnVyZ2VzcyA8YWJ1cmdlc3NAcmVkaGF0 LmNvbT4KLURhdGU6IFdlZCwgMTQgQXVnIDIwMjQgMTU6MTY6NDYgKzAxMDAKLVN1YmplY3Q6IGdk Yi1jYXRjaHBvaW50LXJlLXNldC5wYXRjaAotCi0gICAgOzsgQmFja3BvcnQgdXBzdHJlYW0gY29t bWl0IGE5MmU5NDMwMTRmIHRvIGZpeCByaGJ6MjMwNDI5Ni4KLQotZ2RiOiBpbXBsZW1lbnQgOjpy ZV9zZXQgbWV0aG9kIGZvciBjYXRjaHBvaW50IGNsYXNzCi0KLUl0IGlzIHBvc3NpYmxlIHRvIGF0 dGFjaCBhIGNvbmRpdGlvbiB0byBhIGNhdGNocG9pbnQuICBUaGlzIGNhbid0IGJlCi1kb25lIHdo ZW4gdGhlIGNhdGNocG9pbnQgaXMgY3JlYXRlZCwgYnV0IGNhbiBiZSBkb25lIHdpdGggdGhlCi0n Y29uZGl0aW9uJyBjb21tYW5kLCB0aGlzIGlzIGRvY3VtZW50ZWQgaW4gdGhlIEdEQiBtYW51YWw6 Ci0KLSAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgJ2lmJyBrZXl3b3JkIHdpdGggdGhlICd3YXRj aCcgY29tbWFuZC4gIFRoZQotICAnY2F0Y2gnIGNvbW1hbmQgZG9lcyBub3QgcmVjb2duaXplIHRo ZSAnaWYnIGtleXdvcmQ7ICdjb25kaXRpb24nIGlzIHRoZQotICBvbmx5IHdheSB0byBpbXBvc2Ug YSBmdXJ0aGVyIGNvbmRpdGlvbiBvbiBhIGNhdGNocG9pbnQuCi0KLUEgR0RCIGNyYXNoIHdhcyBy ZXBvcnRlZCBhZ2FpbnN0IEZlZG9yYSBHREIgd2hlcmUgYSB1c2VyIGhhZCBhdHRhY2hlZAotYSBj b25kaXRpb24gdG8gYSBjYXRjaHBvaW50IGFuZCB0aGVuIHJlc3RhcnRlZCB0aGUgaW5mZXJpb3Iu ICBXaGVuIHRoZQotY2F0Y2hwb2ludCB3YXMgaGl0IEdEQiB3b3VsZCBpbW1lZGlhdGVseSBzZWdm YXVsdC4gIEkgd2FzIGFibGUgdG8KLXJlcHJvZHVjZSB0aGUgZmFpbHVyZSBvbiB1cHN0cmVhbSBH REI6Ci0KLSAgKGdkYikgZmlsZSAuL3NvbWUvYmluYXJ5Ci0gIChnZGIpIGNhdGNoIHN5c2NhbGwg d3JpdGUKLSAgKGdkYikgcnVuCi0gIC4uLgotICBDYXRjaHBvaW50IDEgKHJldHVybmVkIGZyb20g c3lzY2FsbCB3cml0ZSksIDB4MDAwMDdmZmZmN2I1OTRhNyBpbiB3cml0ZSAoKSBmcm9tIC9saWI2 NC9saWJjLnNvLjYKLSAgKGdkYikgY29uZGl0aW9uIDEgJF9zdHJlcSgoY2hhciAqKSAkcnNpLCAi Zm9vYmFyIikgPT0gMAotICAoZ2RiKSBydW4KLSAgLi4uCi0gIEZhdGFsIHNpZ25hbDogU2VnbWVu dGF0aW9uIGZhdWx0Ci0gIC4uLgotCi1XaGF0IGhhcHBlbmVkIGhlcmUgaXMgdGhhdCBvbiB0aGUg c3lzdGVtIGluIHF1ZXN0aW9uIHdlIGhhZCBkZWJ1ZwotaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZv ciBib3RoIHRoZSBtYWluIGFwcGxpY2F0aW9uIGFuZCBhbHNvIGZvcgotbGliYy4KLQotV2hlbiB0 aGUgY29uZGl0aW9uIHdhcyBhdHRhY2hlZCBHREIgd2FzIHN0b3BwZWQgaW5zaWRlIGxpYmMgYW5k IGFzIHRoZQotZGVidWcgaW5mb3JtYXRpb24gd2FzIGF2YWlsYWJsZSBHREIgZm91bmQgYSByZWZl cmVuY2UgdG8gdGhlICdjaGFyJwotdHlwZSAoZm9yIHRoZSBjYXN0KSBpbnNpZGUgbGliYydzIGRl YnVnIGluZm9ybWF0aW9uLgotCi1XaGVuIHRoZSBpbmZlcmlvciBpcyByZXN0YXJ0ZWQgR0RCIGRp c2NhcmRzIGFsbCBvZiB0aGUgb2JqZmlsZXMKLWFzc29jaWF0ZWQgd2l0aCBzaGFyZWQgbGlicmFy aWVzLCBhbmQgdGhpcyBpbmNsdWRlcyBsaWJjLiAgQXMgc3VjaCB0aGUKLSdjaGFyJyB0eXBlLCB3 aGljaCBpcyBvYmpmaWxlIG93bmVkLCBpcyBkaXNjYXJkZWQgYW5kIHRoZSByZWZlcmVuY2UgdG8K LWl0IGZyb20gdGhlIGNhdGNocG9pbnQncyBjb25kaXRpb24gZXhwcmVzc2lvbiBiZWNvbWVzIGlu dmFsaWQuCi0KLU5vdywgaWYgaXQgd2VyZSBhIGJyZWFrcG9pbnQgaW5zdGVhZCBvZiBhIGNhdGNo cG9pbnQsIHdoYXQgd291bGQKLWhhcHBlbiBpcyB0aGF0IGFmdGVyIHRoZSBzaGFyZWQgbGlicmFy eSBvYmpmaWxlcyBoYWQgYmVlbiBkaXNjYXJkZWQKLXdlJ2QgY2FsbCB0aGUgdmlydHVhbCBicmVh a3BvaW50OjpyZV9zZXQgbWV0aG9kIG9uIHRoZSBicmVha3BvaW50LCBhbmQKLXRoaXMgd291bGQg dXBkYXRlIHRoZSBicmVha3BvaW50J3MgY29uZGl0aW9uIGV4cHJlc3Npb24uICBUaGlzIGlzCi1i ZWNhdXNlIHVzZXIgYnJlYWtwb2ludHMgYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiB0aGUgY29k ZV9icmVha3BvaW50Ci1jbGFzcyBhbmQgdGhlIGNvZGVfYnJlYWtwb2ludDo6cmVfc2V0IG1ldGhv ZCBjb250YWlucyB0aGUgY29kZSB0bwotcmVjb21wdXRlIHRoZSBicmVha3BvaW50J3MgY29uZGl0 aW9uIGV4cHJlc3Npb24uCi0KLUhvd2V2ZXIsIGNhdGNocG9pbnRzIGFyZSBpbnN0YW5jZXMgb2Yg dGhlIGNhdGNocG9pbnQgY2xhc3Mgd2hpY2gKLWluaGVyaXRzIGZyb20gdGhlIGJhc2UgYnJlYWtw b2ludCBjbGFzcy4gIFRoZSBjYXRjaHBvaW50IGNsYXNzIGRvZXMKLW5vdCBvdmVycmlkZSBicmVh a3BvaW50OjpyZV9zZXQsIGFuZCBicmVha3BvaW50OjpyZV9zZXQgaXMgZW1wdHkhCi0KLVRoZSBj b25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgY2F0Y2hwb2ludCBjb25kaXRpb24gZXhwcmVzc2lv bnMgYXJlCi1uZXZlciByZWNvbXB1dGVkLCBhbmQgdGhlIGRhbmdsaW5nIHBvaW50ZXIgdG8gdGhl IG5vdyBkZWxldGVkLCBvYmpmaWxlCi1vd25lZCB0eXBlICdjaGFyJyBpcyBsZWZ0IGFyb3VuZCwg YW5kLCB3aGVuIHRoZSBjYXRjaHBvaW50IGlzIGhpdCwgdGhlCi1pbnZhbGlkIHBvaW50ZXIgaXMg dXNlZCB3aGVuIEdEQiB0cmllcyB0byBldmFsdWF0ZSB0aGUgY29uZGl0aW9uCi1leHByZXNzaW9u LgotCi1JbiB0aGlzIGNvbW1pdCBJIGhhdmUgaW1wbGVtZW50ZWQgY2F0Y2hwb2ludDo6cmVfc2V0 LiAgVGhpcyBpcyBwcmV0dHkKLXNpbXBsZSBhbmQganVzdCByZWNvbXB1dGVzIHRoZSBjb25kaXRp b24gZXhwcmVzc2lvbiBhcyB5b3UnZCBleHBlY3QuCi1JZiB0aGUgY29uZGl0aW9uIGRvZXNuJ3Qg ZXZhbHVhdGUgdGhlbiB0aGUgY2F0Y2hwb2ludCBpcyBtYXJrZWQgYXMKLWRpc2FibGVkX2J5X2Nv bmQuCi0KLUkgaGF2ZSBhbHNvIG1hZGUgYnJlYWtwb2ludDo6cmVfc2V0IHB1cmUgdmlydHVhbC4g IFdpdGggdGhlIGFkZGl0aW9uCi1vZiBjYXRjaHBvaW50OjpyZV9zZXQgZXZlcnkgc3ViLWNsYXNz IG9mIGJyZWFrcG9pbnQgbm93IGltcGxlbWVudHMgdGhlCi06OnJlX3NldCBtZXRob2QsIGFuZCBp ZiBuZXcgc3ViLWNsYXNzZXMgYXJlIGFkZGVkIGluIHRoZSBmdXR1cmUgSQotdGhpbmsgdGhhdCB0 aGV5IF9tdXN0XyBpbXBsZW1lbnQgOjpyZV9zZXQgaW4gb3JkZXIgdG8gYXZvaWQgdGhpcwotcHJv YmxlbS4gIEFzIHN1Y2ggZmFsbGluZyBiYWNrIHRvIGFuIGVtcHR5IGJyZWFrcG9pbnQ6OnJlX3Nl dCBkb2Vzbid0Ci1zZWVtIGhlbHBmdWwuCi0KLUZvciB0ZXN0aW5nIEkgaGF2ZSBub3QgcmVsaWVk IG9uIHN0b3BwaW5nIGluIGxpYmMgYW5kIGhhdmluZyBsaWJjCi1kZWJ1ZyBpbmZvcm1hdGlvbiBh dmFpbGFibGUsIHRoaXMgZG9lc24ndCBzZWVtIGxpa2UgYSBnb29kIGlkZWEgZm9yCi10aGUgR0RC IHRlc3RzdWl0ZS4gIEluc3RlYWQgSSBjcmVhdGUgYSAocmF0aGVyIHBvaW50bGVzcykgY29uZGl0 aW9uCi1jaGVjayB0aGF0IHVzZXMgYSB0eXBlIGRlZmluZWQgb25seSB3aXRoaW4gYSBzaGFyZWQg bGlicmFyeS4gIFdoZW4gdGhlCi1pbmZlcmlvciBpcyByZXN0YXJ0ZWQgdGhlIGNhdGNocG9pbnQg d2lsbCB0ZW1wb3JhcmlseSBiZSBtYXJrZWQgYXMKLWRpc2FibGVkX2J5X2NvbmQgKGR1ZSB0byB0 aGUgdHlwZSBub3QgYmVpbmcgYXZhaWxhYmxlKSwgYnV0IG9uY2UgdGhlCi1zaGFyZWQgbGlicmFy eSBpcyBsb2FkZWQgYWdhaW4gdGhlIGNhdGNocG9pbnQgd2lsbCBiZSByZS1lbmFibGVkLgotV2l0 aG91dCB0aGUgZml4ZXMgYWJvdmUgdGhlbiB0aGUgc2FtZSBjcmFzaGluZyBiZWhhdmlvdXIgY2Fu IGJlCi1vYnNlcnZlZC4KLQotT25lIHBvaW50IG9mIG5vdGU6IHRoZSBkYW5nbGluZyBwb2ludGVy IG9mIGNvdXJzZSBleHBvc2VzIHVuZGVmaW5lZAotYmVoYXZpb3VyLCB3aXRoIG5vIGd1YXJhbnRl ZSBvZiBhIGNyYXNoLiAgVGhvdWdoIGEgY3Jhc2ggaXMgd2hhdCBJCi11c3VhbGx5IHNlZSBJIGhh dmUgc2VlIEdEQiB0aHJvdyByYW5kb20gZXJyb3JzIGZyb20gdGhlIGV4cHJlc3Npb24KLWV2YWx1 YXRpb24gY29kZSwgYW5kIG9uY2UsIEkgc2F3IG5vIHByb2JsZW0gYXQgYWxsISAgSWYgeW91IHJl Y29tcGlsZQotR0RCIHdpdGggdGhlIGFkZHJlc3Mgc2FuaXRpemVyLCBvciBydW4gdW5kZXIgdmFs Z3JpbmQsIHRoZW4gdGhlIGJ1Zwotd2lsbCBiZSBleHBvc2VkIGV2ZXJ5IHRpbWUuCi0KLUFmdGVy IGZpeGluZyB0aGlzIGJ1ZyBJIGNoZWNrZWQgYnVnemlsbGEgYW5kIGZvdW5kIFBSIGdkYi8yOTk2 MCB3aGljaAotaXMgdGhlIHNhbWUgYnVnLiAgSSB3YXMgYWJsZSB0byByZXByb2R1Y2UgdGhlIGJ1 ZyBiZWZvcmUgdGhpcyBjb21taXQsCi1hbmQgYWZ0ZXIgdGhpcyBjb21taXQgR0RCIGlzIG5vIGxv bmdlciBjcmFzaGluZy4KLQotQmVmb3JlOgotCi0gIChnZGIpIGZpbGUgL3RtcC9oZWxsby54Ci0g IFJlYWRpbmcgc3ltYm9scyBmcm9tIC90bXAvaGVsbG8ueC4uLgotICAoZ2RiKSBydW4KLSAgU3Rh cnRpbmcgcHJvZ3JhbTogL3RtcC9oZWxsby54Ci0gIEhlbGxvIFdvcmxkCi0gIFtJbmZlcmlvciAx IChwcm9jZXNzIDExMDE4NTUpIGV4aXRlZCBub3JtYWxseV0KLSAgKGdkYikgY2F0Y2ggc3lzY2Fs bCAxCi0gIENhdGNocG9pbnQgMSAoc3lzY2FsbCAnd3JpdGUnIFsxXSkKLSAgKGdkYikgY29uZGl0 aW9uIDEgd3JpdGUuZmQgPT0gMQotICAoZ2RiKSBydW4KLSAgU3RhcnRpbmcgcHJvZ3JhbTogL3Rt cC9oZWxsby54Ci0KLSAgRmF0YWwgc2lnbmFsOiBTZWdtZW50YXRpb24gZmF1bHQKLSAgLi4uCi0K LUFuZCBhZnRlcjoKLQotICAoZ2RiKSBmaWxlIC90bXAvaGVsbG8ueAotICBSZWFkaW5nIHN5bWJv bHMgZnJvbSAvdG1wL2hlbGxvLnguLi4KLSAgKGdkYikgcnVuCi0gIFN0YXJ0aW5nIHByb2dyYW06 IC90bXAvaGVsbG8ueAotICBIZWxsbyBXb3JsZAotICBBcmdzOiAoIDAgLCAxICwgMiAsIDMgLCA0 ICwgNSAsIDYgLCA3ICkKLSAgW0luZmVyaW9yIDEgKHByb2Nlc3MgMTEwMjM3MykgZXhpdGVkIG5v cm1hbGx5XQotICAoZ2RiKSBjYXRjaCBzeXNjYWxsIDEKLSAgQ2F0Y2hwb2ludCAxIChzeXNjYWxs ICd3cml0ZScgWzFdKQotICAoZ2RiKSBjb25kaXRpb24gMSB3cml0ZS5mZCA9PSAxCi0gIChnZGIp IHIKLSAgU3RhcnRpbmcgcHJvZ3JhbTogL3RtcC9oZWxsby54Ci0gIEVycm9yIGluIHRlc3Rpbmcg Y29uZGl0aW9uIGZvciBicmVha3BvaW50IDE6Ci0gIEF0dGVtcHQgdG8gZXh0cmFjdCBhIGNvbXBv bmVudCBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGEgc3RydWN0dXJlLgotCi0gIENhdGNocG9pbnQg MSAoY2FsbCB0byBzeXNjYWxsIHdyaXRlKSwgMHgwMDAwN2ZmZmY3ZWI5NGE3IGluIHdyaXRlICgp Ci0gICAgIGZyb20gL2xpYjY0L2xpYmMuc28uNgotICAoZ2RiKSBwdHlwZSB3cml0ZQotICB0eXBl ID0gPHVua25vd24gcmV0dXJuIHR5cGU+ICgpCi0gIChnZGIpCi0KLU5vdGljZSB3ZSBnZXQgdGhl IGVycm9yIG5vdyB3aGVuIHRoZSBjb25kaXRpb24gZmFpbHMgdG8gZXZhbHVhdGUuCi1UaGlzIHNl ZW1zIHJlYXNvbmFibGUgZ2l2ZW4gdGhhdCAnd3JpdGUnIHdpbGwgYmUgYSBmdW5jdGlvbiwgYW5k Ci1pbmRlZWQgdGhlIGZpbmFsICdwdHlwZScgc2hvd3MgdGhhdCBpdCdzIGEgZnVuY3Rpb24sIG5v dCBhIHN0cnVjdC4KLQotQnVnOiBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3df YnVnLmNnaT9pZD0yOTk2MAotCi1SZXZpZXdlZC1CeTogVG9tIGRlIFZyaWVzIDx0ZGV2cmllc0Bz dXNlLmRlPgotCi1kaWZmIC0tZ2l0IGEvZ2RiL2JyZWFrcG9pbnQuYyBiL2dkYi9icmVha3BvaW50 LmMKLS0tLSBhL2dkYi9icmVha3BvaW50LmMKLSsrKyBiL2dkYi9icmVha3BvaW50LmMKLUBAIC04 MTQ2LDYgKzgxNDYsNjAgQEAgY2F0Y2hwb2ludDo6Y2F0Y2hwb2ludCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIGJvb2wgdGVtcCwKLSAgIHBzcGFjZSA9IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZTsK LSB9Ci0gCi0rLyogU2VlIGJyZWFrcG9pbnQuaC4gICovCi0rCi0rdm9pZAotK2NhdGNocG9pbnQ6 OnJlX3NldCAoKQotK3sKLSsgIC8qIEFsbCBjYXRjaHBvaW50cyBhcmUgYXNzb2NpYXRlZCB3aXRo IGEgc3BlY2lmaWMgcHJvZ3JhbV9zcGFjZS4gICovCi0rICBnZGJfYXNzZXJ0IChwc3BhY2UgIT0g bnVsbHB0cik7Ci0rCi0rICAvKiBDYXRjaHBvaW50cyBoYXZlIGEgc2luZ2xlIGR1bW15IGxvY2F0 aW9uLiAgKi8KLSsgIGdkYl9hc3NlcnQgKGxvY2F0aW9ucyAoKS5zaXplICgpID09IDEpOwotKyAg YnBfbG9jYXRpb24gJmJsID0gbV9sb2NhdGlvbnMuZnJvbnQgKCk7Ci0rCi0rICBpZiAoY29uZF9z dHJpbmcgPT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIC8qIEl0IHNob3VsZG4ndCBiZSBwb3Nz aWJsZSB0byBoYXZlIGEgcGFyc2VkIGNvbmRpdGlvbiBleHByZXNzaW9uCi0rCSBjYWNoZWQgb24g dGhpcyBsb2NhdGlvbiBpZiB0aGUgY2F0Y2hwb2ludCBkb2Vzbid0IGhhdmUgYSBjb25kaXRpb24K LSsJIHN0cmluZyBzZXQuICAqLwotKyAgICAgIGdkYl9hc3NlcnQgKGJsLmNvbmQgPT0gbnVsbHB0 cik7Ci0rCi0rICAgICAgLyogTm90aGluZyB0byByZS1jb21wdXRlLCBhbmQgdGhlIGNhdGNocG9p bnQgY2Fubm90IGNoYW5nZS4gICovCi0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rCi0rICBib29s IHByZXZpb3VzX2Rpc2FibGVkX2J5X2NvbmQgPSBibC5kaXNhYmxlZF9ieV9jb25kOwotKwotKyAg LyogU3RhcnQgYnkgbWFya2luZyB0aGUgbG9jYXRpb24gZGlzYWJsZWQgYW5kIGRpc2NhcmRpbmcg dGhlIHByZXZpb3VzbHkKLSsgICAgIGNvbXB1dGVkIGNvbmRpdGlvbiBleHByZXNzaW9uLiAgTm93 IGlmIHdlIGdldCBhbiBleGNlcHRpb24sIGV2ZW4gaWYKLSsgICAgIGl0J3MgYSBxdWl0IGV4Y2Vw dGlvbiwgd2UnbGwgbGVhdmUgdGhlIGxvY2F0aW9uIGRpc2FibGVkIGFuZCB0aGVyZQotKyAgICAg d2lsbCBiZSBubyAocG9zc2libHkgaW52YWxpZCkgZXhwcmVzc2lvbiBjYWNoZWQuICAqLwotKyAg YmwuZGlzYWJsZWRfYnlfY29uZCA9IHRydWU7Ci0rICBibC5jb25kID0gbnVsbHB0cjsKLSsKLSsg IGNvbnN0IGNoYXIgKnMgPSBjb25kX3N0cmluZy5nZXQgKCk7Ci0rICB0cnkKLSsgICAgewotKyAg ICAgIHN3aXRjaF90b19wcm9ncmFtX3NwYWNlX2FuZF90aHJlYWQgKHBzcGFjZSk7Ci0rCi0rICAg ICAgYmwuY29uZCA9IHBhcnNlX2V4cF8xICgmcywgYmwuYWRkcmVzcywgYmxvY2tfZm9yX3BjIChi bC5hZGRyZXNzKSwKLSsJCQkgICAgIG51bGxwdHIpOwotKyAgICAgIGJsLmRpc2FibGVkX2J5X2Nv bmQgPSBmYWxzZTsKLSsgICAgfQotKyAgY2F0Y2ggKGNvbnN0IGdkYl9leGNlcHRpb25fZXJyb3Ig JmUpCi0rICAgIHsKLSsgICAgICAvKiBBbnkgZXhjZXB0aW9uIHRocm93biBtdXN0IGJlIGZyb20g ZWl0aGVyIHRoZSBwYXJzZV9leHBfMSBvcgotKwkgZWFybGllciBpbiB0aGUgdHJ5IGJsb2NrLiAg QXMgc3VjaCB0aGUgZm9sbG93aW5nIHR3byBhc3NlcnRzCi0rCSBzaG91bGQgYmUgdHJ1ZS4gICov Ci0rICAgICAgZ2RiX2Fzc2VydCAoYmwuZGlzYWJsZWRfYnlfY29uZCk7Ci0rICAgICAgZ2RiX2Fz c2VydCAoYmwuY29uZCA9PSBudWxscHRyKTsKLSsgICAgfQotKwotKyAgaWYgKHByZXZpb3VzX2Rp c2FibGVkX2J5X2NvbmQgIT0gYmwuZGlzYWJsZWRfYnlfY29uZCkKLSsgICAgbm90aWZ5X2JyZWFr cG9pbnRfbW9kaWZpZWQgKHRoaXMpOwotK30KLSsKLSAvKiBOb3RpZnkgaW50ZXJwcmV0ZXJzIGFu ZCBvYnNlcnZlcnMgdGhhdCBicmVha3BvaW50IEIgd2FzIGNyZWF0ZWQuICAqLwotIAotIHN0YXRp YyB2b2lkCi1kaWZmIC0tZ2l0IGEvZ2RiL2JyZWFrcG9pbnQuaCBiL2dkYi9icmVha3BvaW50LmgK LS0tLSBhL2dkYi9icmVha3BvaW50LmgKLSsrKyBiL2dkYi9icmVha3BvaW50LmgKLUBAIC03MDIs MTEgKzcwMiwxMCBAQCBzdHJ1Y3QgYnJlYWtwb2ludCA6IHB1YmxpYyBpbnRydXNpdmVfbGlzdF9u b2RlPGJyZWFrcG9pbnQ+Ci0gCi0gICAvKiBSZWV2YWx1YXRlIGEgYnJlYWtwb2ludC4gIFRoaXMg aXMgbmVjZXNzYXJ5IGFmdGVyIHN5bWJvbHMgY2hhbmdlCi0gICAgICAoZS5nLiwgYW4gZXhlY3V0 YWJsZSBvciBEU08gd2FzIGxvYWRlZCwgb3IgdGhlIGluZmVyaW9yIGp1c3QKLS0gICAgIHN0YXJ0 ZWQpLiAgKi8KLS0gIHZpcnR1YWwgdm9pZCByZV9zZXQgKCkKLS0gIHsKLS0gICAgLyogTm90aGlu ZyB0byByZS1zZXQuICAqLwotLSAgfQotKyAgICAgc3RhcnRlZCkuICBUaGlzIGlzIHB1cmUgdmly dHVhbCBhcywgYXQgYSBtaW5pbXVtLCBlYWNoIHN1Yi1jbGFzcyBtdXN0Ci0rICAgICByZWNvbXB1 dGUgYW55IGNhY2hlZCBjb25kaXRpb24gZXhwcmVzc2lvbnMgYmFzZWQgb2ZmIG9mIHRoZQotKyAg ICAgY29uZF9zdHJpbmcgbWVtYmVyIHZhcmlhYmxlLiAgKi8KLSsgIHZpcnR1YWwgdm9pZCByZV9z ZXQgKCkgPSAwOwotIAotICAgLyogSW5zZXJ0IHRoZSBicmVha3BvaW50IG9yIHdhdGNocG9pbnQg b3IgYWN0aXZhdGUgdGhlIGNhdGNocG9pbnQuCi0gICAgICBSZXR1cm4gMCBmb3Igc3VjY2Vzcywg MSBpZiB0aGUgYnJlYWtwb2ludCwgd2F0Y2hwb2ludCBvcgotQEAgLTExMjAsNiArMTExOSwxMCBA QCBzdHJ1Y3QgY2F0Y2hwb2ludCA6IHB1YmxpYyBicmVha3BvaW50Ci0gICBjYXRjaHBvaW50IChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgYm9vbCB0ZW1wLCBjb25zdCBjaGFyICpjb25kX3N0cmlu Zyk7Ci0gCi0gICB+Y2F0Y2hwb2ludCAoKSBvdmVycmlkZSA9IDA7Ci0rCi0rICAvKiBJZiB0aGUg Y2F0Y2hwb2ludCBoYXMgYSBjb25kaXRpb24gc2V0IHRoZW4gcmVjb21wdXRlIHRoZSBjYWNoZWQK LSsgICAgIGV4cHJlc3Npb24gd2l0aGluIHRoZSBzaW5nbGUgZHVtbXkgbG9jYXRpb24uICAqLwot KyAgdm9pZCByZV9zZXQgKCkgb3ZlcnJpZGU7Ci0gfTsKLSAKLSAMCi1kaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQtbGliLmMgYi9nZGIvdGVz dHN1aXRlL2dkYi5iYXNlL3Jlc2V0LWNhdGNocG9pbnQtY29uZC1saWIuYwotbmV3IGZpbGUgbW9k ZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvcmVz ZXQtY2F0Y2hwb2ludC1jb25kLWxpYi5jCi1AQCAtMCwwICsxLDc2IEBACi0rLyogVGhpcyB0ZXN0 Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KLSsKLSsgICBDb3B5cmlnaHQg MjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1 ZGUgPHNpZ25hbC5oPgotKyNpbmNsdWRlIDx1bmlzdGQuaD4KLSsjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+Ci0rI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0rI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNs dWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rCi0rLyogVGhpcyB0eXBlIGlz IHVzZWQgYnkgR0RCLiAgKi8KLStzdHJ1Y3QgbGliX3R5cGUKLSt7Ci0rICBpbnQgYTsKLSsgIGlu dCBiOwotKyAgaW50IGM7Ci0rfTsKLSsKLSsvKiBFbnN1cmUgdGhlIHR5cGUgYWJvdmUgaXMgdXNl ZC4gICovCi0rdm9sYXRpbGUgc3RydWN0IGxpYl90eXBlIGdsb2JhbF9saWJfb2JqZWN0ID0geyAx LCAyLCAzIH07Ci0rCi0rLyogVGhpcyBwb2ludGVyIGlzIGNoZWNrZWQgYnkgR0RCLiAgKi8KLSt2 b2xhdGlsZSB2b2lkICpvcGFxdWVfcHRyID0gMDsKLSsKLSt2b2lkCi0rbGliX2Z1bmNfdGVzdF9z eXNjYWxsICh2b2lkKQotK3sKLSsgIHB1dHMgKCJJbnNpZGUgbGlicmFyeVxuIik7Ci0rICBmZmx1 c2ggKHN0ZG91dCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rc2lnX2hhbmRsZXIgKGludCBzaWdu bykKLSt7Ci0rICAvKiBOb3RoaW5nLiAgKi8KLSt9Ci0rCi0rdm9pZAotK2xpYl9mdW5jX3Rlc3Rf c2lnbmFsICh2b2lkKQotK3sKLSsgIHNpZ25hbCAoU0lHVVNSMSwgc2lnX2hhbmRsZXIpOwotKwot KyAga2lsbCAoZ2V0cGlkICgpLCBTSUdVU1IxKTsKLSt9Ci0rCi0rdm9pZAotK2xpYl9mdW5jX3Rl c3RfZm9yayAodm9pZCkKLSt7Ci0rICBwaWRfdCBwaWQgPSBmb3JrICgpOwotKyAgYXNzZXJ0IChw aWQgIT0gLTEpOwotKwotKyAgaWYgKHBpZCA9PSAwKQotKyAgICB7Ci0rICAgICAgLyogQ2hpbGQ6 IGp1c3QgZXhpdC4gICovCi0rICAgICAgZXhpdCAoMCk7Ci0rICAgIH0KLSsKLSsgIC8qIFBhcmVu dC4gICovCi0rICB3YWl0cGlkIChwaWQsIE5VTEwsIDApOwotK30KLWRpZmYgLS1naXQgYS9nZGIv dGVzdHN1aXRlL2dkYi5iYXNlL3Jlc2V0LWNhdGNocG9pbnQtY29uZC5jIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQK LS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvcmVzZXQtY2F0Y2hw b2ludC1jb25kLmMKLUBAIC0wLDAgKzEsNTAgQEAKLSsvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQg b2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgotKwotKyAgIENvcHlyaWdodCAyMDI0IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKLSsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u Ci0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAgKi8KLSsKLStleHRlcm4gdm9pZCBsaWJfZnVuY190ZXN0X3N5c2NhbGwgKHZvaWQp OwotK2V4dGVybiB2b2lkIGxpYl9mdW5jX3Rlc3Rfc2lnbmFsICh2b2lkKTsKLStleHRlcm4gdm9p ZCBsaWJfZnVuY190ZXN0X2ZvcmsgKHZvaWQpOwotKwotKy8qIFdlIHVzZSB0aGlzIHRvIHBlcmZv cm0gc29tZSBmaWxsZXIgd29yay4gICovCi0rdm9sYXRpbGUgaW50IGdsb2JhbF92YXIgPSAwOwot KwotKy8qIEp1c3Qgc29tZXdoZXJlIGZvciBHREIgdG8gcHV0IGEgYnJlYWtwb2ludC4gICovCi0r dm9pZAotK2JyZWFrcHRfYmVmb3JlX2V4aXQgKHZvaWQpCi0rewotKyAgLyogTm90aGluZy4gICov Ci0rfQotKwotK2ludAotK21haW4gKHZvaWQpCi0rewotKyNpZiBkZWZpbmVkIFRFU1RfU1lTQ0FM TAotKyAgbGliX2Z1bmNfdGVzdF9zeXNjYWxsICgpOwotKyNlbGlmIGRlZmluZWQgVEVTVF9TSUdO QUwKLSsgIGxpYl9mdW5jX3Rlc3Rfc2lnbmFsICgpOwotKyNlbGlmIGRlZmluZWQgVEVTVF9GT1JL Ci0rICBsaWJfZnVuY190ZXN0X2ZvcmsgKCk7Ci0rI2Vsc2UKLSsjIGVycm9yIGNvbXBpbGUgd2l0 aCBzdWl0YWJsZSAtRFRFU1RfeHh4IG1hY3JvIGRlZmluZWQKLSsjZW5kaWYKLSsKLSsgICsrZ2xv YmFsX3ZhcjsKLSsKLSsgIGJyZWFrcHRfYmVmb3JlX2V4aXQgKCk7Ci0rCi0rICByZXR1cm4gMDsK LSt9Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50 LWNvbmQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQu ZXhwCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQuZXhwCi1AQCAtMCwwICsxLDE2OSBA QAotKyMgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0r IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwot KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotKyMgVGVzdCB0aGF0IHRoZSBjb25kaXRp b24gZm9yIGEgY2F0Y2hwb2ludCBpcyBjb3JyZWN0bHkgcmVzZXQgYWZ0ZXIKLSsjIHNoYXJlZCBs aWJyYXJpZXMgYXJlIHVubG9hZGVkLCBhcyBoYXBwZW5zIHdoZW4gYW4gaW5mZXJpb3IgaXMKLSsj IHJlc3RhcnRlZC4KLSsjCi0rIyBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZW4sIHdoZW4gdGhlIGNh dGNocG9pbnQgaXMgaGl0IG9uIHRoZSBzZWNvbmQKLSsjIHJ1biwgd2UnbGwgZXZhbHVhdGUgdGhl IHBhcnNlZCBleHByZXNzaW9uIGZyb20gdGhlIGZpcnN0IHJ1biwgd2hpY2gKLSsjIG1pZ2h0IGlu Y2x1ZGUgcmVmZXJlbmNlcyB0byB0eXBlcyBvd25lZCBieSB0aGUgbm93IGRlbGV0ZWQgb2JqZmls ZQotKyMgKGZvciB0aGUgc2hhcmVkIGxpYnJhcnkgbG9hZGVkIGluIHRoZSBmaXJzdCBydW4pLgot KyMKLSsjIFRoaXMgc2NyaXB0cyB0ZXN0cyBhIG51bWJlciBvZiBkaWZmZXJlbnQgY2F0Y2hwb2lu dCB0eXBlcy4gIEluc2lkZQotKyMgR0RCIHRoZXNlIGFyZSBhbGwgc3ViLWNsYXNzZXMgb2YgdGhl ICdjYXRjaHBvaW50JyB0eXBlLCB3aGljaCBpcwotKyMgd2hlcmUgdGhlIGZpeCBmb3IgdGhlIGFi b3ZlIGlzc3VlIHJlc2lkZXMsIHNvIGFsbCBjYXRjaHBvaW50IHR5cGVzCi0rIyBzaG91bGQgd29y ayBjb3JyZWN0bHkuCi0rCi0rc3RhbmRhcmRfdGVzdGZpbGUgLmMgLWxpYi5jCi0rCi0rc2V0IGxp YmZpbGUgJGJpbmZpbGUtbGliLnNvCi0rCi0rc2V0IHB5ZmlsZSBbZ2RiX3JlbW90ZV9kb3dubG9h ZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCi0rCi0raWYge1tidWls ZF9leGVjdXRhYmxlICJidWlsZCBzaGFyZWQgbGlicmFyeSIgJGxpYmZpbGUgJHNyY2ZpbGUyIFwK LSsJIHtkZWJ1ZyBzaGxpYn1dID09IC0xfSB7Ci0rICAgIHJldHVybgotK30KLSsKLSsjIERlcGVu ZGluZyBvbiB3aGV0aGVyIG9yIG5vdCBsaWJjIGRlYnVnIGluZm8gaXMgaW5zdGFsbGVkLCB3aGVu IHdlCi0rIyBoaXQgYSBzeXNjYWxsIGNhdGNocG9pbnQgaW5zaWRlIGxpYmMgdGhlcmUgbWlnaHQg YmUgYSBzb3VyY2UgbGluZQotKyMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4KLSsjCi0rIyBUaGlz IHJlZ2V4cCB3aWxsIG1hdGNoIGFuIG9wdGlvbmFsIGxpbmUgYW5kIGNhbiBiZSBhZGRlZCB0byB0 aGUKLSsjIGV4cGVjdGVkIGNhdGNocG9pbnQgb3V0cHV0IHRvIGlnbm9yZSB0aGUgKHBvc3NpYmx5 IG1pc3NpbmcpIHNvdXJjZQotKyMgbGluZS4KLStzZXQgbGliY19zcmNfbGluZV9yZSAiKD86XHJc blxbXlxyXG5cXSspPyIKLSsKLSsjIENoZWNrIHRoZSBQeXRob24gYnBfbW9kaWZpZWRfbGlzdCBh bmQgdGhlbiByZXNldCB0aGUgbGlzdCBiYWNrIHRvCi0rIyBlbXB0eS4gIFRFU1ROQU1FIGlzIGp1 c3QgYSBzdHJpbmcuICBCUF9OVU0gaXMgYSBsaXN0IG9mIGJyZWFrcG9pbnQKLSsjIG51bWJlcnMg dGhhdCBhcmUgZXhwZWN0ZWQgdG8gYXBwZWFyIChpbiB0aGUgZ2l2ZW4gb3JkZXIpIGluIHRoZQot KyMgYnBfbW9kaWZpZWRfbGlzdC4KLSsKLStwcm9jIGNoZWNrX21vZGlmaWVkX2JwX2xpc3QgeyB0 ZXN0bmFtZSBicF9udW0gfSB7Ci0rICAgIGlmIHsgW2FsbG93X3B5dGhvbl90ZXN0c10gfSB7Ci0r CXNldCBleHBlY3RlZCBbam9pbiAkYnBfbnVtICIsICJdCi0rCi0rCWdkYl90ZXN0ICJweXRob24g cHJpbnQoYnBfbW9kaWZpZWRfbGlzdCkiICJcXFxbJGV4cGVjdGVkXFxcXSIgXAotKwkgICAgJHRl c3RuYW1lCi0rCWdkYl90ZXN0X25vX291dHB1dCAtbm9wYXNzICJweXRob24gYnBfbW9kaWZpZWRf bGlzdD1cW1xdIiBcCi0rCSAgICAicmVzZXQgYnBfbW9kaWZpZWRfbGlzdCBhZnRlciAkdGVzdG5h bWUiCi0rICAgIH0KLSt9Ci0rCi0rIyBCdWlsZCBhbiBleGVjdXRhYmxlIGFuZCBydW4gdGVzdHMg b24gJ2NhdGNoIE1PREUnLgotKwotK3Byb2MgcnVuX3Rlc3QgeyBtb2RlIH0gewotKyAgICBzZXQg ZXhlY19uYW1lICR7OjpiaW5maWxlfS0ke21vZGV9Ci0rCi0rICAgIHNldCBtYWNybyBURVNUX1tz dHJpbmcgdG91cHBlciAkbW9kZV0KLSsKLSsgICAgaWYge1tidWlsZF9leGVjdXRhYmxlICJidWls ZCB0ZXN0IGV4ZWN1dGFibGUiICRleGVjX25hbWUgJDo6c3JjZmlsZSBcCi0rCSAgICAgW2xpc3Qg ZGVidWcgc2hsaWI9JDo6bGliZmlsZSBhZGRpdGlvbmFsX2ZsYWdzPS1EJHttYWNyb31dXSA9PSAt MX0gewotKwlyZXR1cm4KLSsgICAgfQotKwotKyAgICBjbGVhbl9yZXN0YXJ0ICRleGVjX25hbWUK LSsgICAgZ2RiX2xvYWRfc2hsaWIgJDo6bGliZmlsZQotKwotKyAgICBpZiB7IVtydW50b19tYWlu XX0gewotKwlyZXR1cm4KLSsgICAgfQotKwotKyAgICBpZiB7ICRtb2RlIGVxICJzeXNjYWxsIiB9 IHsKLSsJZ2RiX3Rlc3QgImNhdGNoIHN5c2NhbGwgd3JpdGUiIFwKLSsJICAgICJDYXRjaHBvaW50 ICQ6OmRlY2ltYWwgXFwoc3lzY2FsbCAnd3JpdGUnIFxbXilcXStcXCkiCi0rCXNldCBjYXRjaF9y ZSAiY2FsbCB0byBzeXNjYWxsIHdyaXRlIgotKyAgICB9IGVsc2VpZiB7ICRtb2RlIGVxICJzaWdu YWwiIH0gewotKwlnZGJfdGVzdCAiY2F0Y2ggc2lnbmFsIFNJR1VTUjEiIFwKLSsJICAgICJDYXRj aHBvaW50ICQ6OmRlY2ltYWwgXFwoc2lnbmFsIFNJR1VTUjFcXCkiCi0rCXNldCBjYXRjaF9yZSAi c2lnbmFsIFNJR1VTUjEiCi0rICAgIH0gZWxzZWlmIHsgJG1vZGUgZXEgImZvcmsiIH0gewotKwln ZGJfdGVzdCAiY2F0Y2ggZm9yayIgXAotKwkgICAgIkNhdGNocG9pbnQgJDo6ZGVjaW1hbCBcXChm b3JrXFwpIgotKwlzZXQgY2F0Y2hfcmUgImZvcmtlZCBwcm9jZXNzICQ6OmRlY2ltYWwiCi0rICAg IH0gZWxzZSB7Ci0rCWVycm9yICJ1bmtub3duIG1vZGUgJG1vZGUiCi0rICAgIH0KLSsgICAgc2V0 IGNwX251bSBbZ2V0X2ludGVnZXJfdmFsdWVvZiAiXCRicG51bSIgIipVTktOT1dOKiJdCi0rCi0r ICAgIGdkYl9icmVha3BvaW50ICJicmVha3B0X2JlZm9yZV9leGl0IgotKwotKyAgICBnZGJfdGVz dCAiY29udGludWUiIFwKLSsJIkNhdGNocG9pbnQgJHtjcF9udW19IFxbXlxyXG5cXSskOjpsaWJj X3NyY19saW5lX3JlIgotKwotKyAgICBpZiB7IFthbGxvd19weXRob25fdGVzdHNdIH0gewotKwln ZGJfdGVzdF9ub19vdXRwdXQgInNvdXJjZSAkOjpweWZpbGUiICJpbXBvcnQgcHl0aG9uIHNjcmlw dHMiCi0rCWNoZWNrX21vZGlmaWVkX2JwX2xpc3QgXAotKwkgICAgImNoZWNrIGIvcCBtb2RpZmll ZCBvYnNlcnZlciBoYXMgbm90IHlldCB0cmlnZ2VyZWQiIHt9Ci0rICAgIH0KLSsKLSsgICAgd2l0 aF90ZXN0X3ByZWZpeCAid2l0aCBmYWxzZSBjb25kaXRpb24iIHsKLSsJZ2RiX3Rlc3Rfbm9fb3V0 cHV0ICJjb25kaXRpb24gJGNwX251bSAoKHN0cnVjdCBsaWJfdHlwZSAqKSBvcGFxdWVfcHRyKSAh PSAwIiBcCi0rCSAgICAic2V0IGNhdGNocG9pbnQgY29uZGl0aW9uIgotKwotKwljaGVja19tb2Rp ZmllZF9icF9saXN0IFwKLSsJICAgICJjYXRjaHBvaW50IG1vZGlmaWVkIG9uY2UgYnkgc2V0dGlu ZyBjb25kaXRpb24iIFwKLSsJICAgIFtsaXN0ICRjcF9udW1dCi0rCi0rCWdkYl9ydW5fY21kCi0r CWdkYl90ZXN0ICIiIFttdWx0aV9saW5lIFwKLSsJCQkgIkJyZWFrcG9pbnQgJDo6ZGVjaW1hbCwg bWFpbiBcXChcXCkgXFteXHJcblxdKyIgXAotKwkJCSAiJDo6ZGVjaW1hbFxccytcW15cclxuXF0r Il0KLSsKLSsJY2hlY2tfbW9kaWZpZWRfYnBfbGlzdCAiY2F0Y2hwb2ludCBtb2RpZmllZCB0d2lj ZSBhdCBzdGFydHVwIiBcCi0rCSAgICBbbGlzdCAkY3BfbnVtICRjcF9udW0gIiQ6OmRlY2ltYWwi XQotKwotKwlnZGJfdGVzdCAiY29udGludWUiIFwKLSsJICAgIFttdWx0aV9saW5lIFwKLSsJCSAi QnJlYWtwb2ludCAkOjpkZWNpbWFsLCBicmVha3B0X2JlZm9yZV9leGl0IFxcKFxcKSBhdCBcW15c clxuXF0rIiBcCi0rCQkgIiQ6OmRlY2ltYWxcXHMrXFteXHJcblxdKyJdIFwKLSsJICAgICJjb250 aW51ZSB0byBicmVha3B0X2JlZm9yZV9leGl0IgotKyAgICB9Ci0rCi0rICAgICMgQ2hlY2sgdGhl IGJwX21vZGlmaWVkX2xpc3QgYWdhaW5zdCAnLionLiAgV2UgZG9uJ3QgY2FyZSBhdCB0aGlzCi0r ICAgICMgcG9pbnQgd2hhdCdzIGluIHRoZSBsaXN0IChub3RoaW5nIHJlbGV2YW50IGhhcyBoYXBw ZW5lZCBzaW5jZSB3ZQotKyAgICAjIGxhc3QgY2hlY2tlZCksIGJ1dCB0aGlzIGhhcyB0aGUgc2lk ZSBlZmZlY3Qgb2YgY2xlYXJpbmcgdGhlIGxpc3QuCi0rICAgIGNoZWNrX21vZGlmaWVkX2JwX2xp c3QgImNsZWFyIGJwIG1vZGlmaWVkIGxpc3QiIHsgLiogfQotKwotKyAgICB3aXRoX3Rlc3RfcHJl Zml4ICJ3aXRoIHRydWUgY29uZGl0aW9uIiB7Ci0rCWdkYl90ZXN0X25vX291dHB1dCAiY29uZGl0 aW9uICRjcF9udW0gKChzdHJ1Y3QgbGliX3R5cGUgKikgb3BhcXVlX3B0cikgPT0gMCIgXAotKwkg ICAgInNldCBjYXRjaHBvaW50IGNvbmRpdGlvbiIKLSsKLSsJY2hlY2tfbW9kaWZpZWRfYnBfbGlz dCBcCi0rCSAgICAiY2F0Y2hwb2ludCBtb2RpZmllZCBvbmNlIGJ5IHNldHRpbmcgY29uZGl0aW9u IiBcCi0rCSAgICBbbGlzdCAkY3BfbnVtXQotKwotKwlnZGJfcnVuX2NtZAotKwlnZGJfdGVzdCAi IiBbbXVsdGlfbGluZSBcCi0rCQkJICJCcmVha3BvaW50ICQ6OmRlY2ltYWwsIG1haW4gXFwoXFwp IFxbXlxyXG5cXSsiIFwKLSsJCQkgIiQ6OmRlY2ltYWxcXHMrXFteXHJcblxdKyJdCi0rCi0rCWNo ZWNrX21vZGlmaWVkX2JwX2xpc3QgImNhdGNocG9pbnQgbW9kaWZpZWQgdHdpY2UgYXQgc3RhcnR1 cCIgXAotKwkgICAgW2xpc3QgJGNwX251bSAkY3BfbnVtICIkOjpkZWNpbWFsIl0KLSsKLSsJZ2Ri X3Rlc3QgImNvbnRpbnVlIiBcCi0rCSAgICAiQ2F0Y2hwb2ludCAkY3BfbnVtIFxcKCRjYXRjaF9y ZVxcKSwgXFteXHJcblxdKyQ6OmxpYmNfc3JjX2xpbmVfcmUiIFwKLSsJICAgICJjb250aW51ZSB1 bnRpbCBjYXRjaHBvaW50IGhpdCIKLSsKLSsJY2hlY2tfbW9kaWZpZWRfYnBfbGlzdCAiY2F0Y2hw b2ludCBtb2RpZmllZCBhZ2FpbiB3aGVuIGhpdCIgXAotKwkgICAgW2xpc3QgJGNwX251bV0KLSsg ICAgfQotK30KLSsKLSsjIFJ1biB0aGUgdGVzdHMuCi0rZm9yZWFjaF93aXRoX3ByZWZpeCBtb2Rl IHsgc3lzY2FsbCBzaWduYWwgZm9yayB9IHsKLSsgICAgcnVuX3Rlc3QgJG1vZGUKLSt9Ci1kaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQucHkg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3Jlc2V0LWNhdGNocG9pbnQtY29uZC5weQotbmV3IGZp bGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJh c2UvcmVzZXQtY2F0Y2hwb2ludC1jb25kLnB5Ci1AQCAtMCwwICsxLDIxIEBACi0rIyBDb3B5cmln aHQgKEMpIDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgotKwotK2JwX21vZGlmaWVkX2xpc3QgPSBbXQotKwotK2RlZiBi cF9tb2RpZmllZChicCk6Ci0rICAgIGJwX21vZGlmaWVkX2xpc3QuYXBwZW5kIChicC5udW1iZXIp Ci0rCi0rZ2RiLmV2ZW50cy5icmVha3BvaW50X21vZGlmaWVkLmNvbm5lY3QoYnBfbW9kaWZpZWQp CgpkaWZmIC0tZ2l0IGEvZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRjaCBiL2dk Yi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGQxM2M5YTEuLjAwMDAwMDAKLS0tIGEvZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8t c3VwcG9ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI5MjMgKzAsMCBAQAotRnJvbSBGRURP UkFfUEFUQ0hFUyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFNpbW9uIE1hcmNoaSA8 c2ltb24ubWFyY2hpQHBvbHltdGwuY2E+Ci1EYXRlOiBUaHUsIDI1IEp1bCAyMDI0IDEzOjQxOjM1 IC0wNDAwCi1TdWJqZWN0OiBnZGItcmVtb3ZlLXFueC1uZXV0cmluby1zdXBwb3J0LnBhdGNoCi0K LTs7IEJhY2twb3J0IG9mIHVwc3RyZWFtIGNvbW1pdCAzNmZiMjBmYTkzNDg0YjEwNGQuICBUaGlz IGlzIG5vdCByZWFsbHkKLTs7IHJlbGV2YW50IGZvciBvdXIgYnJhbmNoLCBidXQgbGF0ZXIgY29t bWl0cyB0aGF0IGFyZSBpbXBvcnRhbnQsIGFuZAotOzsgd2hpY2ggd2Ugd2FudCB0byBiYWNrcG9y dCwgY29uZmxpY3QgdW5sZXNzIHRoZSBjbGVhbnVwIGluIHRoaXMKLTs7IHBhdGNoIGlzIGluIHBs YWNlLgotOzsKLTs7IFRoaXMgY29tbWl0IHdpbGwgYmUgcGFydCBvZiBHREIgMTYsIHNvIHRoaXMg YmFjay1wb3J0IHNob3VsZCBkcm9wCi07OyBvdXQgd2hlbiB3ZSByZWJhc2Ugb250byBHREIgMTYu Ci07OwotOzsgZ2RiOiByZW1vdmUgUU5YIE5ldXRyaW5vIHN1cHBvcnQKLTs7Ci07OyBSZW1vdmUg dGhlIHN1cHBvcnQgZm9yIHRoZSBRTlggTmV1dHJpbm8gT1MgKHRkZXAgYW5kIG5hdGl2ZSBiaXRz KS4gIFRoaXMKLTs7IGhhcyBiZWVuIHVubWFpbnRhaW5lZCBmb3IgeWVhcnMsIGFuZCB3ZSBkb24n dCBoYXZlIGEgd2F5IHRvIHNlZSBpZiBpdAotOzsgd29ya3MgKG9yIGV2ZW4gYnVpbGRzLCBmb3Ig dGhlIG5hdGl2ZSBwYXJ0cykuICBXaXRob3V0IHNvbWVib2R5IGFjdGl2ZWx5Ci07OyBtYWludGFp bmluZyBpdCwgdGhpcyBpcyBqdXN0IGEgYnVyZGVuIGZvciBkZXZlbG9wZXJzLCBlc3BlY2lhbGx5 IHRoYXQKLTs7IHRoaXMgcG9ydCBkb2VzIGEgZmV3IHdlaXJkIHVuaXF1ZSB0aGluZ3MgdGhhdCBy ZXF1aXJlIHJlYXNvbmluZyBhYm91dAotOzsgd2hlbiBkb2luZyBiaWcgY2hhbmdlLgotOzsKLTs7 IFN1cHBvcnQgZm9yIEdEQnNlcnZlciB3YXMgcmVtb3ZlZCBpbiAyMDIwLCBjb21taXQgNjEzZjE0 OWE5MGQ2Ci07OyAoImdkYnNlcnZlcjogcmVtb3ZlIHN1cHBvcnQgZm9yIE5ldXRyaW5vIikuCi07 OwotOzsgQ2hhbmdlLUlkOiBJNGUyNWVjMjZhYjA2NjM2NjI5YWRlYmQwMmNlYjE2MWVlMzFjMjMy ZAotOzsgQXBwcm92ZWQtYnk6IEtldmluIEJ1ZXR0bmVyIDxrZXZpbmJAcmVkaGF0LmNvbT4KLQot ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgotLS0tIGEvZ2Ri L01ha2VmaWxlLmluCi0rKysgYi9nZGIvTWFrZWZpbGUuaW4KLUBAIC04MjgsNyArODI4LDYgQEAg QUxMX1RBUkdFVF9PQlMgPSBcCi0gCWkzODYtZ28zMi10ZGVwLm8gXAotIAlpMzg2LWxpbnV4LXRk ZXAubyBcCi0gCWkzODYtbmV0YnNkLXRkZXAubyBcCi0tCWkzODYtbnRvLXRkZXAubyBcCi0gCWkz ODYtb2JzZC10ZGVwLm8gXAotIAlpMzg2LXNvbDItdGRlcC5vIFwKLSAJaTM4Ni10ZGVwLm8gXAot QEAgLTg1Niw3ICs4NTUsNiBAQCBBTExfVEFSR0VUX09CUyA9IFwKLSAJbmRzMzItdGRlcC5vIFwK LSAJbmlvczItbGludXgtdGRlcC5vIFwKLSAJbmlvczItdGRlcC5vIFwKLS0JbnRvLXRkZXAubyBc Ci0gCW9ic2QtdGRlcC5vIFwKLSAJb3Ixay1saW51eC10ZGVwLm8gXAotIAlvcjFrLXRkZXAubyBc Ci1AQCAtMTQ0MSw3ICsxNDM5LDYgQEAgSEZJTEVTX05PX1NSQ0RJUiA9IFwKLSAJbmRzMzItdGRl cC5oIFwKLSAJbmlvczItdGRlcC5oIFwKLSAJZWxmLW5vbmUtdGRlcC5oIFwKLS0JbnRvLXRkZXAu aCBcCi0gCW9iamMtbGFuZy5oIFwKLSAJb2JqZmlsZXMuaCBcCi0gCW9ic2QtbmF0LmggXAotQEAg LTE1NzMsNyArMTU3MCw2IEBAIEhGSUxFU19OT19TUkNESVIgPSBcCi0gCWNvbXBpbGUvZ2NjLWMt cGx1Z2luLmggXAotIAljb21waWxlL2djYy1jcC1wbHVnaW4uaCBcCi0gCWNvbmZpZy9ubS1saW51 eC5oIFwKLS0JY29uZmlnL25tLW50by5oIFwKLSAJY29uZmlnL2RqZ3BwL2xhbmdpbmZvLmggXAot IAljb25maWcvZGpncHAvbmxfdHlwZXMuaCBcCi0gCWNvbmZpZy9pMzg2L25tLWkzODZnbnUuaCBc Ci1kaWZmIC0tZ2l0IGEvZ2RiL2NvbmZpZy9ubS1udG8uaCBiL2dkYi9jb25maWcvbm0tbnRvLmgK LWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotLS0tIGEvZ2RiL2NvbmZpZy9ubS1udG8uaAotKysr IC9kZXYvbnVsbAotQEAgLTEsMjkgKzAsMCBAQAotLS8qIE5hdGl2ZSBzdXBwb3J0IGZvciBRTlgg TmV1dHJpbm8gdmVyc2lvbiA2LgotLQotLSAgIENvcHlyaWdodCAoQykgMjAwMy0yMDI0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgY29kZSB3YXMgZG9uYXRlZCBi eSBRTlggU29mdHdhcmUgU3lzdGVtcyBMdGQuCi0tCi0tICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0RCLgotLQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLS0gICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgot LSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0t ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCi0tICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0j aWZuZGVmIENPTkZJR19OTV9OVE9fSAotLSNkZWZpbmUgQ09ORklHX05NX05UT19ICi0tCi0tLyog U2V0dXAgdGhlIHZhbGlkIHJlYWx0aW1lIHNpZ25hbCByYW5nZS4gICovCi0tI2RlZmluZSBSRUFM VElNRV9MTyA0MQotLSNkZWZpbmUgUkVBTFRJTUVfSEkgNTYKLS0KLS0jZW5kaWYgLyogQ09ORklH X05NX05UT19IICovCi1kaWZmIC0tZ2l0IGEvZ2RiL2NvbmZpZ3VyZS5ob3N0IGIvZ2RiL2NvbmZp Z3VyZS5ob3N0Ci0tLS0gYS9nZGIvY29uZmlndXJlLmhvc3QKLSsrKyBiL2dkYi9jb25maWd1cmUu aG9zdAotQEAgLTExMCw3ICsxMTAsNiBAQCBpWzM0NTY3XTg2LSotbWluZ3czMiopCWdkYl9ob3N0 PW1pbmd3Ci0gaVszNDU2N104Ni0qLW1zZG9zZGpncHAqKSBnZGJfaG9zdD1nbzMyIDs7Ci0gaVsz NDU2N104Ni0qLWxpbnV4KikJZ2RiX2hvc3Q9bGludXggOzsKLSBpWzM0NTY3XTg2LSotZ251KikJ Z2RiX2hvc3Q9aTM4NmdudSA7OwotLWlbMzQ1Nl04Ni0qLW50byopIAlnZGJfaG9zdD1udG8gOzsK LSBpWzM0NTY3XTg2LSotb3BlbmJzZCopCWdkYl9ob3N0PW9ic2QgOzsKLSBpWzM0NTY3XTg2LSot c29sYXJpczIqIHwgeDg2XzY0LSotc29sYXJpczIqKQotIAkJCWdkYl9ob3N0PXNvbDIgOzsKLWRp ZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLm5hdCBiL2dkYi9jb25maWd1cmUubmF0Ci0tLS0gYS9n ZGIvY29uZmlndXJlLm5hdAotKysrIGIvZ2RiL2NvbmZpZ3VyZS5uYXQKLUBAIC00MjEsMTUgKzQy MSw2IEBAIGNhc2UgJHtnZGJfaG9zdH0gaW4KLSAKLSAJZXNhYwotIAk7OwotLSAgICBudG8pCi0t CWNhc2UgJHtnZGJfaG9zdF9jcHV9IGluCi0tCSAgICBpMzg2KQotLQkJIyBIb3N0OiBJbnRlbCAz ODYgcnVubmluZyBRTlguCi0tCQlOQVRERVBGSUxFUz0nbnRvLXByb2Nmcy5vJwotLQkJTkFUX0ZJ TEU9J2NvbmZpZy9ubS1udG8uaCcKLS0JCTs7Ci0tCWVzYWMKLS0JOzsKLSAgICAgb2JzZCkKLSAJ Y2FzZSAke2dkYl9ob3N0X2NwdX0gaW4KLSAJICAgIGkzODYpCi1kaWZmIC0tZ2l0IGEvZ2RiL2Nv bmZpZ3VyZS50Z3QgYi9nZGIvY29uZmlndXJlLnRndAotLS0tIGEvZ2RiL2NvbmZpZ3VyZS50Z3QK LSsrKyBiL2dkYi9jb25maWd1cmUudGd0Ci1AQCAtMzA0LDExICszMDQsNiBAQCBpWzM0NTY3XTg2 LSotb3BlbmJzZCopCi0gCSMgVGFyZ2V0OiBPcGVuQlNEL2kzODYKLSAJZ2RiX3RhcmdldF9vYnM9 ImkzODYtYnNkLXRkZXAubyBpMzg2LW9ic2QtdGRlcC5vIGJzZC11dGhyZWFkLm8iCi0gCTs7Ci0t aVszNDU2N104Ni0qLW50byopCi0tCSMgVGFyZ2V0OiBJbnRlbCAzODYgcnVubmluZyBxbng2Lgot LQlnZGJfdGFyZ2V0X29icz0ic29saWItc3ZyNC5vIFwKLS0JCQlpMzg2LW50by10ZGVwLm8gbnRv LXRkZXAubyIKLS0JOzsKLSBpWzM0NTY3XTg2LSotc29sYXJpczIqIHwgeDg2XzY0LSotc29sYXJp czIqKQotIAkjIFRhcmdldDogU29sYXJpcyB4ODZfNjQKLSAJZ2RiX3RhcmdldF9vYnM9IiR7aTM4 Nl90b2Jqc30gJHthbWQ2NF90b2Jqc30gXAotQEAgLTgwMyw3ICs3OTgsNiBAQCBjYXNlICIke3Rh cmd9IiBpbgotIAkJZ2RiX29zYWJpPUdEQl9PU0FCSV9GUkVFQlNEIDs7Ci0gKi0qLWxpbnV4KiB8 ICotKi11Y2xpbnV4KikKLSAJCWdkYl9vc2FiaT1HREJfT1NBQklfTElOVVggOzsKLS0qLSotbnRv KikJZ2RiX29zYWJpPUdEQl9PU0FCSV9RTlhOVE8gOzsKLSBtNjgqLSotb3BlbmJzZCogfCBtODgq LSotb3BlbmJzZCogfCB2YXgtKi1vcGVuYnNkKikgOzsKLSAqLSotb3BlbmJzZCopCWdkYl9vc2Fi aT1HREJfT1NBQklfT1BFTkJTRCA7OwotICotKi1zb2xhcmlzKikJZ2RiX29zYWJpPUdEQl9PU0FC SV9TT0xBUklTIDs7Ci1kaWZmIC0tZ2l0IGEvZ2RiL2RvYy9nZGIudGV4aW5mbyBiL2dkYi9kb2Mv Z2RiLnRleGluZm8KLS0tLSBhL2dkYi9kb2MvZ2RiLnRleGluZm8KLSsrKyBiL2dkYi9kb2MvZ2Ri LnRleGluZm8KLUBAIC0yNzQyLDcgKzI3NDIsNyBAQCBlbnZpcm9ubWVudDoKLSBAZW5kIHNtYWxs ZXhhbXBsZQotIAotIFRoaXMgY29tbWFuZCBpcyBhdmFpbGFibGUgd2hlbiBkZWJ1Z2dpbmcgbG9j YWxseSBvbiBtb3N0IHRhcmdldHMsIGV4Y2x1ZGluZwotLUBzY3tkamdwcH0sIEN5Z3dpbiwgTVMg V2luZG93cywgYW5kIFFOWCBOZXV0cmluby4KLStAc2N7ZGpncHB9LCBDeWd3aW4sIGFuZCBNUyBX aW5kb3dzLgotIAotIEBraW5kZXggc2V0IHN0YXJ0dXAtd2l0aC1zaGVsbAotIEBhbmNob3J7c2V0 IHN0YXJ0dXAtd2l0aC1zaGVsbH0KLUBAIC0yMjAxMSw3ICsyMjAxMSw3IEBAIG5hbWUgYW5kIHJl bWVtYmVycyBpdCB0aGF0IHdheS4KLSBAY2luZGV4IHNoYXJlZCBsaWJyYXJpZXMKLSBAYW5jaG9y e1NoYXJlZCBMaWJyYXJpZXN9Ci0gQHZhbHVle0dEQk59IHN1cHBvcnRzIEBzY3tnbnV9L0xpbnV4 LCBNUy1XaW5kb3dzLCBTdW5PUywKLS1EYXJ3aW4vTWFjaC1PLCBTVnI0LCBJQk0gUlMvNjAwMCBB SVgsIFFOWCBOZXV0cmlubywgRkRQSUMgKEZSLVYpLCBhbmQKLStEYXJ3aW4vTWFjaC1PLCBTVnI0 LCBJQk0gUlMvNjAwMCBBSVgsIEZEUElDIChGUi1WKSwgYW5kCi0gRFNCVCAoVElDNlgpIHNoYXJl ZCBsaWJyYXJpZXMuCi0gCi0gT24gTVMtV2luZG93cyBAdmFsdWV7R0RCTn0gbXVzdCBiZSBsaW5r ZWQgd2l0aCB0aGUgRXhwYXQgbGlicmFyeSB0byBzdXBwb3J0Ci1AQCAtMjUyMDMsMTYgKzI1MjAz LDYgQEAgU2hvdyB0aGUgZmlsZSB0byB3aGljaCBAY29kZXtwcm9jZnN9IEFQSSB0cmFjZSBpcyB3 cml0dGVuLgotIFRoZXNlIGNvbW1hbmRzIGVuYWJsZSBhbmQgZGlzYWJsZSB0cmFjaW5nIG9mIGVu dHJpZXMgaW50byBhbmQgZXhpdHMKLSBmcm9tIHRoZSBAY29kZXtzeXNjYWxsfSBpbnRlcmZhY2Uu Ci0gCi0tQGl0ZW0gaW5mbyBwaWRsaXN0Ci0tQGtpbmRleCBpbmZvIHBpZGxpc3QKLS1AY2luZGV4 IHByb2Nlc3MgbGlzdCwgUU5YIE5ldXRyaW5vCi0tRm9yIFFOWCBOZXV0cmlubyBvbmx5LCB0aGlz IGNvbW1hbmQgZGlzcGxheXMgdGhlIGxpc3Qgb2YgYWxsIHRoZQotLXByb2Nlc3NlcyBhbmQgYWxs IHRoZSB0aHJlYWRzIHdpdGhpbiBlYWNoIHByb2Nlc3MuCi0tCi0tQGl0ZW0gaW5mbyBtZW1pbmZv Ci0tQGtpbmRleCBpbmZvIG1lbWluZm8KLS1AY2luZGV4IG1hcGluZm8gbGlzdCwgUU5YIE5ldXRy aW5vCi0tRm9yIFFOWCBOZXV0cmlubyBvbmx5LCB0aGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIGxp c3Qgb2YgYWxsIG1hcGluZm9zLgotIEBlbmQgdGFibGUKLSAKLSBAbm9kZSBESkdQUCBOYXRpdmUK LWRpZmYgLS1naXQgYS9nZGIvaTM4Ni1udG8tdGRlcC5jIGIvZ2RiL2kzODYtbnRvLXRkZXAuYwot ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gYS9nZGIvaTM4Ni1udG8tdGRlcC5jCi0rKysg L2Rldi9udWxsCi1AQCAtMSwzNzkgKzAsMCBAQAotLS8qIFRhcmdldC1kZXBlbmRlbnQgY29kZSBm b3IgUU5YIE5ldXRyaW5vIHg4Ni4KLS0KLS0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyNCBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLS0KLS0gICBDb250cmlidXRlZCBieSBRTlggU29m dHdhcmUgU3lzdGVtcyBMdGQuCi0tCi0tICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgotLQot LSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLS0gICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotLSAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCi0tICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0jaW5jbHVkZSAi ZXh0cmFjdC1zdG9yZS1pbnRlZ2VyLmgiCi0tI2luY2x1ZGUgImZyYW1lLmgiCi0tI2luY2x1ZGUg Im9zYWJpLmgiCi0tI2luY2x1ZGUgInJlZ2NhY2hlLmgiCi0tI2luY2x1ZGUgInRhcmdldC5oIgot LQotLSNpbmNsdWRlICJpMzg2LXRkZXAuaCIKLS0jaW5jbHVkZSAiaTM4Ny10ZGVwLmgiCi0tI2lu Y2x1ZGUgIm50by10ZGVwLmgiCi0tI2luY2x1ZGUgInNvbGliLmgiCi0tI2luY2x1ZGUgInNvbGli LXN2cjQuaCIKLS0KLS0jaWZuZGVmIFg4Nl9DUFVfRlhTUgotLSNkZWZpbmUgWDg2X0NQVV9GWFNS ICgxTCA8PCAxMikKLS0jZW5kaWYKLS0KLS0vKiBXaHkgMTM/ICBMb29rIGluIG91ciAvdXNyL2lu Y2x1ZGUveDg2L2NvbnRleHQuaCBoZWFkZXIgYXQgdGhlCi0tICAgeDg2X2NwdV9yZWdpc3RlcnMg c3RydWN0dXJlIGFuZCB5b3UnbGwgc2VlIGFuICdleHgnIGp1bmsgcmVnaXN0ZXIKLS0gICB0aGF0 IGlzIGp1c3QgZmlsbGVyLiAgRG9uJ3QgYXNrIG1lLCBhc2sgdGhlIGtlcm5lbCBndXlzLiAgKi8K LS0jZGVmaW5lIE5VTV9HUFJFR1MgMTMKLS0KLS0vKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVy YWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdCB4eHgnCi0tICAgZm9ybWF0IGFuZCBHREIn cyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLwotLQotLS8qIEZyb20gPHg4Ni9jb250ZXh0Lmg+ LiAgKi8KLS1zdGF0aWMgaW50IGkzODZudG9fZ3JlZ3NldF9yZWdfb2Zmc2V0W10gPQotLXsKLS0g IDcgKiA0LAkJCS8qICVlYXggKi8KLS0gIDYgKiA0LAkJCS8qICVlY3ggKi8KLS0gIDUgKiA0LAkJ CS8qICVlZHggKi8KLS0gIDQgKiA0LAkJCS8qICVlYnggKi8KLS0gIDExICogNCwJCQkvKiAlZXNw ICovCi0tICAyICogNCwJCQkvKiAlZXBiICovCi0tICAxICogNCwJCQkvKiAlZXNpICovCi0tICAw ICogNCwJCQkvKiAlZWRpICovCi0tICA4ICogNCwJCQkvKiAlZWlwICovCi0tICAxMCAqIDQsCQkJ LyogJWVmbGFncyAqLwotLSAgOSAqIDQsCQkJLyogJWNzICovCi0tICAxMiAqIDQsCQkJLyogJXNz ICovCi0tICAtMQkJCQkvKiBmaWxsZXIgKi8KLS19OwotLQotLS8qIEdpdmVuIGEgR0RCIHJlZ2lz dGVyIG51bWJlciBSRUdOVU0sIHJldHVybiB0aGUgb2Zmc2V0IGludG8KLS0gICBOZXV0cmlubydz IHJlZ2lzdGVyIHN0cnVjdHVyZSBvciAtMSBpZiB0aGUgcmVnaXN0ZXIgaXMgdW5rbm93bi4gICov Ci0tCi0tc3RhdGljIGludAotLW50b19yZWdfb2Zmc2V0IChpbnQgcmVnbnVtKQotLXsKLS0gIGlm IChyZWdudW0gPj0gMCAmJiByZWdudW0gPCBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVn X29mZnNldCkpCi0tICAgIHJldHVybiBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldFtyZWdudW1d OwotLQotLSAgcmV0dXJuIC0xOwotLX0KLS0KLS1zdGF0aWMgdm9pZAotLWkzODZudG9fc3VwcGx5 X2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGNoYXIgKmdwcmVncykKLS17Ci0t ICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOwotLSAgaTM4Nl9n ZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXA8aTM4Nl9nZGJhcmNoX3RkZXA+IChnZGJh cmNoKTsKLS0KLS0gIGdkYl9hc3NlcnQgKHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9PSBpMzg2 bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7Ci0tICBpMzg2X2dyZWdzZXQuc3VwcGx5X3JlZ3NldCAo JmkzODZfZ3JlZ3NldCwgcmVnY2FjaGUsIC0xLAotLQkJCSAgICAgIGdwcmVncywgTlVNX0dQUkVH UyAqIDQpOwotLX0KLS0KLS1zdGF0aWMgdm9pZAotLWkzODZudG9fc3VwcGx5X2ZwcmVnc2V0IChz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpmcHJlZ3MpCi0tewotLSAgaWYgKG50b19j cHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2X0NQVV9GWFNSKQotLSAgICBp Mzg3X3N1cHBseV9meHNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdzKTsKLS0gIGVsc2UKLS0gICAg aTM4N19zdXBwbHlfZnNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdzKTsKLS19Ci0tCi0tc3RhdGlj IHZvaWQKLS1pMzg2bnRvX3N1cHBseV9yZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs IGludCByZWdzZXQsIGNoYXIgKmRhdGEpCi0tewotLSAgc3dpdGNoIChyZWdzZXQpCi0tICAgIHsK LS0gICAgY2FzZSBOVE9fUkVHX0dFTkVSQUw6Ci0tICAgICAgaTM4Nm50b19zdXBwbHlfZ3JlZ3Nl dCAocmVnY2FjaGUsIGRhdGEpOwotLSAgICAgIGJyZWFrOwotLSAgICBjYXNlIE5UT19SRUdfRkxP QVQ6Ci0tICAgICAgaTM4Nm50b19zdXBwbHlfZnByZWdzZXQgKHJlZ2NhY2hlLCBkYXRhKTsKLS0g ICAgICBicmVhazsKLS0gICAgfQotLX0KLS0KLS1zdGF0aWMgaW50Ci0taTM4Nm50b19yZWdzZXRf aWQgKGludCByZWdubykKLS17Ci0tICBpZiAocmVnbm8gPT0gLTEpCi0tICAgIHJldHVybiBOVE9f UkVHX0VORDsKLS0gIGVsc2UgaWYgKHJlZ25vIDwgSTM4Nl9OVU1fR1JFR1MpCi0tICAgIHJldHVy biBOVE9fUkVHX0dFTkVSQUw7Ci0tICBlbHNlIGlmIChyZWdubyA8IEkzODZfTlVNX0dSRUdTICsg STM4N19OVU1fUkVHUykKLS0gICAgcmV0dXJuIE5UT19SRUdfRkxPQVQ7Ci0tICBlbHNlIGlmIChy ZWdubyA8IEkzODZfU1NFX05VTV9SRUdTKQotLSAgICByZXR1cm4gTlRPX1JFR19GTE9BVDsgLyog V2Ugc3RvcmUgeG1tIHJlZ2lzdGVycyBpbiBmeHNhdmVfYXJlYS4gICovCi0tCi0tICByZXR1cm4g LTE7CQkJLyogRXJyb3IuICAqLwotLX0KLS0KLS1zdGF0aWMgaW50Ci0taTM4Nm50b19yZWdpc3Rl cl9hcmVhIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLS0JCSAgICAgICBpbnQgcmVnbm8sIGlu dCByZWdzZXQsIHVuc2lnbmVkICpvZmYpCi0tewotLSAgaTM4Nl9nZGJhcmNoX3RkZXAgKnRkZXAg PSBnZGJhcmNoX3RkZXA8aTM4Nl9nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKLS0KLS0gICpvZmYg PSAwOwotLSAgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0dFTkVSQUwpCi0tICAgIHsKLS0gICAgICBp ZiAocmVnbm8gPT0gLTEpCi0tCXJldHVybiBOVU1fR1BSRUdTICogNDsKLS0KLS0gICAgICAqb2Zm ID0gbnRvX3JlZ19vZmZzZXQgKHJlZ25vKTsKLS0gICAgICBpZiAoKm9mZiA9PSAtMSkKLS0JcmV0 dXJuIDA7Ci0tICAgICAgcmV0dXJuIDQ7Ci0tICAgIH0KLS0gIGVsc2UgaWYgKHJlZ3NldCA9PSBO VE9fUkVHX0ZMT0FUKQotLSAgICB7Ci0tICAgICAgdW5zaWduZWQgb2ZmX2FkanVzdCwgcmVnc2l6 ZSwgcmVnc2V0X3NpemUsIHJlZ25vX2Jhc2U7Ci0tICAgICAgLyogVGhlIGZvbGxvd2luZyBhcmUg ZmxhZ3MgaW5kaWNhdGluZyBudW1iZXIgaW4gb3VyIGZ4c2F2ZV9hcmVhLiAgKi8KLS0gICAgICBp bnQgZmlyc3RfZm91ciA9IChyZWdubyA+PSBJMzg3X0ZDVFJMX1JFR05VTSAodGRlcCkKLS0JCQkm JiByZWdubyA8PSBJMzg3X0ZJU0VHX1JFR05VTSAodGRlcCkpOwotLSAgICAgIGludCBzZWNvbmRf Zm91ciA9IChyZWdubyA+IEkzODdfRklTRUdfUkVHTlVNICh0ZGVwKQotLQkJCSAmJiByZWdubyA8 PSBJMzg3X0ZPUF9SRUdOVU0gKHRkZXApKTsKLS0gICAgICBpbnQgc3RfcmVnID0gKHJlZ25vID49 IEkzODdfU1QwX1JFR05VTSAodGRlcCkKLS0JCSAgICAmJiByZWdubyA8IEkzODdfU1QwX1JFR05V TSAodGRlcCkgKyA4KTsKLS0gICAgICBpbnQgeG1tX3JlZyA9IChyZWdubyA+PSBJMzg3X1hNTTBf UkVHTlVNICh0ZGVwKQotLQkJICAgICAmJiByZWdubyA8IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVw KSk7Ci0tCi0tICAgICAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdz IHwgWDg2X0NQVV9GWFNSKQotLQl7Ci0tCSAgb2ZmX2FkanVzdCA9IDMyOwotLQkgIHJlZ3NpemUg PSAxNjsKLS0JICByZWdzZXRfc2l6ZSA9IDUxMjsKLS0JICAvKiBmeHNhdmVfYXJlYSBzdHJ1Y3R1 cmUuICAqLwotLQkgIGlmIChmaXJzdF9mb3VyKQotLQkgICAgewotLQkgICAgICAvKiBmcHVfY29u dHJvbF93b3JkLCBmcHVfc3RhdHVzX3dvcmQsIGZwdV90YWdfd29yZCwgZnB1X29wZXJhbmQKLS0J CSByZWdpc3RlcnMuICAqLwotLQkgICAgICByZWdzaXplID0gMjsgLyogVHdvIGJ5dGVzIGVhY2gu ICAqLwotLQkgICAgICBvZmZfYWRqdXN0ID0gMDsKLS0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdf RkNUUkxfUkVHTlVNICh0ZGVwKTsKLS0JICAgIH0KLS0JICBlbHNlIGlmIChzZWNvbmRfZm91cikK LS0JICAgIHsKLS0JICAgICAgLyogZnB1X2lwLCBmcHVfY3MsIGZwdV9vcCwgZnB1X2RzIHJlZ2lz dGVycy4gICovCi0tCSAgICAgIHJlZ3NpemUgPSA0OwotLQkgICAgICBvZmZfYWRqdXN0ID0gODsK LS0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfRklTRUdfUkVHTlVNICh0ZGVwKSArIDE7Ci0tCSAg ICB9Ci0tCSAgZWxzZSBpZiAoc3RfcmVnKQotLQkgICAgewotLQkgICAgICAvKiBTVCByZWdpc3Rl cnMuICAqLwotLQkgICAgICByZWdzaXplID0gMTY7Ci0tCSAgICAgIG9mZl9hZGp1c3QgPSAzMjsK LS0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfU1QwX1JFR05VTSAodGRlcCk7Ci0tCSAgICB9Ci0t CSAgZWxzZSBpZiAoeG1tX3JlZykKLS0JICAgIHsKLS0JICAgICAgLyogWE1NIHJlZ2lzdGVycy4g ICovCi0tCSAgICAgIHJlZ3NpemUgPSAxNjsKLS0JICAgICAgb2ZmX2FkanVzdCA9IDE2MDsKLS0J ICAgICAgcmVnbm9fYmFzZSA9IEkzODdfWE1NMF9SRUdOVU0gKHRkZXApOwotLQkgICAgfQotLQkg IGVsc2UgaWYgKHJlZ25vID09IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVwKSkKLS0JICAgIHsKLS0J ICAgICAgcmVnc2l6ZSA9IDQ7Ci0tCSAgICAgIG9mZl9hZGp1c3QgPSAyNDsKLS0JICAgICAgcmVn bm9fYmFzZSA9IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVwKTsKLS0JICAgIH0KLS0JICBlbHNlCi0t CSAgICB7Ci0tCSAgICAgIC8qIFdob2xlIHJlZ3NldC4gICovCi0tCSAgICAgIGdkYl9hc3NlcnQg KHJlZ25vID09IC0xKTsKLS0JICAgICAgb2ZmX2FkanVzdCA9IDA7Ci0tCSAgICAgIHJlZ25vX2Jh c2UgPSAwOwotLQkgICAgICByZWdzaXplID0gcmVnc2V0X3NpemU7Ci0tCSAgICB9Ci0tCX0KLS0g ICAgICBlbHNlCi0tCXsKLS0JICByZWdzZXRfc2l6ZSA9IDEwODsKLS0JICAvKiBmc2F2ZV9hcmVh IHN0cnVjdHVyZS4gICovCi0tCSAgaWYgKGZpcnN0X2ZvdXIgfHwgc2Vjb25kX2ZvdXIpCi0tCSAg ICB7Ci0tCSAgICAgIC8qIGZwdV9jb250cm9sX3dvcmQsIC4uLiAsIGZwdV9kcyByZWdpc3RlcnMu ICAqLwotLQkgICAgICByZWdzaXplID0gNDsKLS0JICAgICAgb2ZmX2FkanVzdCA9IDA7Ci0tCSAg ICAgIHJlZ25vX2Jhc2UgPSBJMzg3X0ZDVFJMX1JFR05VTSAodGRlcCk7Ci0tCSAgICB9Ci0tCSAg ZWxzZSBpZiAoc3RfcmVnKQotLQkgICAgewotLQkgICAgICAvKiBPbmUgb2YgU1QgcmVnaXN0ZXJz LiAgKi8KLS0JICAgICAgcmVnc2l6ZSA9IDEwOwotLQkgICAgICBvZmZfYWRqdXN0ID0gNyAqIDQ7 Ci0tCSAgICAgIHJlZ25vX2Jhc2UgPSBJMzg3X1NUMF9SRUdOVU0gKHRkZXApOwotLQkgICAgfQot LQkgIGVsc2UKLS0JICAgIHsKLS0JICAgICAgLyogV2hvbGUgcmVnc2V0LiAgKi8KLS0JICAgICAg Z2RiX2Fzc2VydCAocmVnbm8gPT0gLTEpOwotLQkgICAgICBvZmZfYWRqdXN0ID0gMDsKLS0JICAg ICAgcmVnbm9fYmFzZSA9IDA7Ci0tCSAgICAgIHJlZ3NpemUgPSByZWdzZXRfc2l6ZTsKLS0JICAg IH0KLS0JfQotLQotLSAgICAgIGlmIChyZWdubyAhPSAtMSkKLS0JKm9mZiA9IG9mZl9hZGp1c3Qg KyAocmVnbm8gLSByZWdub19iYXNlKSAqIHJlZ3NpemU7Ci0tICAgICAgZWxzZQotLQkqb2ZmID0g MDsKLS0gICAgICByZXR1cm4gcmVnc2l6ZTsKLS0gICAgfQotLSAgcmV0dXJuIC0xOwotLX0KLS0K LS1zdGF0aWMgaW50Ci0taTM4Nm50b19yZWdzZXRfZmlsbCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgaW50IHJlZ3NldCwgY2hhciAqZGF0YSkKLS17Ci0tICBpZiAocmVnc2V0ID09 IE5UT19SRUdfR0VORVJBTCkKLS0gICAgewotLSAgICAgIGludCByZWdubzsKLS0KLS0gICAgICBm b3IgKHJlZ25vID0gMDsgcmVnbm8gPCBOVU1fR1BSRUdTOyByZWdubysrKQotLQl7Ci0tCSAgaW50 IG9mZnNldCA9IG50b19yZWdfb2Zmc2V0IChyZWdubyk7Ci0tCSAgaWYgKG9mZnNldCAhPSAtMSkK LS0JICAgIHJlZ2NhY2hlLT5yYXdfY29sbGVjdCAocmVnbm8sIGRhdGEgKyBvZmZzZXQpOwotLQl9 Ci0tICAgIH0KLS0gIGVsc2UgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0ZMT0FUKQotLSAgICB7Ci0t ICAgICAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2X0NQ VV9GWFNSKQotLQlpMzg3X2NvbGxlY3RfZnhzYXZlIChyZWdjYWNoZSwgLTEsIGRhdGEpOwotLSAg ICAgIGVsc2UKLS0JaTM4N19jb2xsZWN0X2ZzYXZlIChyZWdjYWNoZSwgLTEsIGRhdGEpOwotLSAg ICB9Ci0tICBlbHNlCi0tICAgIHJldHVybiAtMTsKLS0KLS0gIHJldHVybiAwOwotLX0KLS0KLS0v KiBSZXR1cm4gd2hldGhlciBUSElTX0ZSQU1FIGNvcnJlc3BvbmRzIHRvIGEgUU5YIE5ldXRyaW5v IHNpZ3RyYW1wCi0tICAgcm91dGluZS4gICovCi0tCi0tc3RhdGljIGludAotLWkzODZudG9fc2ln dHJhbXBfcCAoY29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJhbWUpCi0tewotLSAgQ09SRV9B RERSIHBjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKLS0gIGNvbnN0IGNoYXIgKm5hbWU7 Ci0tCi0tICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAmbmFtZSwgTlVMTCwgTlVMTCk7 Ci0tICByZXR1cm4gbmFtZSAmJiBzdHJjbXAgKCJfX3NpZ25hbHN0dWIiLCBuYW1lKSA9PSAwOwot LX0KLS0KLS0vKiBBc3N1bWluZyBUSElTX0ZSQU1FIGlzIGEgUU5YIE5ldXRyaW5vIHNpZ3RyYW1w IHJvdXRpbmUsIHJldHVybiB0aGUKLS0gICBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHNpZ2Nv bnRleHQgc3RydWN0dXJlLiAgKi8KLS0KLS1zdGF0aWMgQ09SRV9BRERSCi0taTM4Nm50b19zaWdj b250ZXh0X2FkZHIgKGNvbnN0IGZyYW1lX2luZm9fcHRyICZ0aGlzX2ZyYW1lKQotLXsKLS0gIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOwotLSAg ZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gp OwotLSAgZ2RiX2J5dGUgYnVmWzRdOwotLSAgQ09SRV9BRERSIHB0cmN0eDsKLS0KLS0gIC8qIFdl IHN0b3JlIF9fdWNvbnRleHRfdCBhZGRyIGluIEVESSByZWdpc3Rlci4gICovCi0tICBnZXRfZnJh bWVfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIEkzODZfRURJX1JFR05VTSwgYnVmKTsKLS0gIHB0cmN0 eCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYnVmLCA0LCBieXRlX29yZGVyKTsKLS0gIHB0 cmN0eCArPSAyNCAvKiBDb250ZXh0IHBvaW50ZXIgaXMgYXQgdGhpcyBvZmZzZXQuICAqLzsKLS0K LS0gIHJldHVybiBwdHJjdHg7Ci0tfQotLQotLXN0YXRpYyB2b2lkCi0taW5pdF9pMzg2bnRvX29w cyAodm9pZCkKLS17Ci0tICBudG9fcmVnc2V0X2lkID0gaTM4Nm50b19yZWdzZXRfaWQ7Ci0tICBu dG9fc3VwcGx5X2dyZWdzZXQgPSBpMzg2bnRvX3N1cHBseV9ncmVnc2V0OwotLSAgbnRvX3N1cHBs eV9mcHJlZ3NldCA9IGkzODZudG9fc3VwcGx5X2ZwcmVnc2V0OwotLSAgbnRvX3N1cHBseV9hbHRy ZWdzZXQgPSBudG9fZHVtbXlfc3VwcGx5X3JlZ3NldDsKLS0gIG50b19zdXBwbHlfcmVnc2V0ID0g aTM4Nm50b19zdXBwbHlfcmVnc2V0OwotLSAgbnRvX3JlZ2lzdGVyX2FyZWEgPSBpMzg2bnRvX3Jl Z2lzdGVyX2FyZWE7Ci0tICBudG9fcmVnc2V0X2ZpbGwgPSBpMzg2bnRvX3JlZ3NldF9maWxsOwot LSAgbnRvX2ZldGNoX2xpbmtfbWFwX29mZnNldHMgPQotLSAgICBzdnI0X2lscDMyX2ZldGNoX2xp bmtfbWFwX29mZnNldHM7Ci0tfQotLQotLXN0YXRpYyB2b2lkCi0taTM4Nm50b19pbml0X2FiaSAo c3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKLS17Ci0t ICBpMzg2X2dkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcDxpMzg2X2dkYmFyY2hfdGRl cD4gKGdkYmFyY2gpOwotLSAgc3RhdGljIHNvbGliX29wcyBudG9fc3ZyNF9zb19vcHM7Ci0tCi0t ICAvKiBEZWFsIHdpdGggb3VyIHN0cmFuZ2Ugc2lnbmFscy4gICovCi0tICBudG9faW5pdGlhbGl6 ZV9zaWduYWxzICgpOwotLQotLSAgLyogTlRPIHVzZXMgRUxGLiAgKi8KLS0gIGkzODZfZWxmX2lu aXRfYWJpIChpbmZvLCBnZGJhcmNoKTsKLS0KLS0gIC8qIE5ldXRyaW5vIHJld2luZHMgdG8gbG9v ayBtb3JlIG5vcm1hbC4gIE5lZWQgdG8gb3ZlcnJpZGUgdGhlIGkzODYKLS0gICAgIGRlZmF1bHQg d2hpY2ggaXMgW3VuZm9ydHVuYXRlbHldIHRvIGRlY3JlbWVudCB0aGUgUEMuICAqLwotLSAgc2V0 X2dkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCwgMCk7Ci0tCi0tICB0ZGVwLT5n cmVnc2V0X3JlZ19vZmZzZXQgPSBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldDsKLS0gIHRkZXAt PmdyZWdzZXRfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNl dCk7Ci0tICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IE5VTV9HUFJFR1MgKiA0OwotLQotLSAgdGRl cC0+c2lndHJhbXBfcCA9IGkzODZudG9fc2lndHJhbXBfcDsKLS0gIHRkZXAtPnNpZ2NvbnRleHRf YWRkciA9IGkzODZudG9fc2lnY29udGV4dF9hZGRyOwotLSAgdGRlcC0+c2NfcmVnX29mZnNldCA9 IGkzODZudG9fZ3JlZ3NldF9yZWdfb2Zmc2V0OwotLSAgdGRlcC0+c2NfbnVtX3JlZ3MgPSBBUlJB WV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7Ci0tCi0tICAvKiBTZXRqbXAoKSdz IHJldHVybiBQQyBzYXZlZCBpbiBFRFggKDUpLiAgKi8KLS0gIHRkZXAtPmpiX3BjX29mZnNldCA9 IDIwOwkvKiA1eDMyIGJpdCBpbnRzIGluLiAgKi8KLS0KLS0gIHNldF9zb2xpYl9zdnI0X2ZldGNo X2xpbmtfbWFwX29mZnNldHMKLS0gICAgKGdkYmFyY2gsIHN2cjRfaWxwMzJfZmV0Y2hfbGlua19t YXBfb2Zmc2V0cyk7Ci0tCi0tICAvKiBJbml0aWFsaXplIHRoaXMgbGF6aWx5LCB0byBhdm9pZCBh biBpbml0aWFsaXphdGlvbiBvcmRlcgotLSAgICAgZGVwZW5kZW5jeSBvbiBzb2xpYi1zdnI0LmMn cyBfaW5pdGlhbGl6ZSByb3V0aW5lLiAgKi8KLS0gIGlmIChudG9fc3ZyNF9zb19vcHMuaW5fZHlu c3ltX3Jlc29sdmVfY29kZSA9PSBOVUxMKQotLSAgICB7Ci0tICAgICAgbnRvX3N2cjRfc29fb3Bz ID0gc3ZyNF9zb19vcHM7Ci0tCi0tICAgICAgLyogT3VyIGxvYWRlciBoYW5kbGVzIHNvbGliIHJl bG9jYXRpb25zIGRpZmZlcmVudGx5IHRoYW4gc3ZyNC4gICovCi0tICAgICAgbnRvX3N2cjRfc29f b3BzLnJlbG9jYXRlX3NlY3Rpb25fYWRkcmVzc2VzCi0tCT0gbnRvX3JlbG9jYXRlX3NlY3Rpb25f YWRkcmVzc2VzOwotLQotLSAgICAgIC8qIFN1cHBseSBhIG5pY2UgZnVuY3Rpb24gdG8gZmluZCBv dXIgc29saWJzLiAgKi8KLS0gICAgICBudG9fc3ZyNF9zb19vcHMuZmluZF9hbmRfb3Blbl9zb2xp YgotLQk9IG50b19maW5kX2FuZF9vcGVuX3NvbGliOwotLQotLSAgICAgIC8qIE91ciBsaW5rZXIg Y29kZSBpcyBpbiBsaWJjLiAgKi8KLS0gICAgICBudG9fc3ZyNF9zb19vcHMuaW5fZHluc3ltX3Jl c29sdmVfY29kZQotLQk9IG50b19pbl9keW5zeW1fcmVzb2x2ZV9jb2RlOwotLSAgICB9Ci0tICBz ZXRfZ2RiYXJjaF9zb19vcHMgKGdkYmFyY2gsICZudG9fc3ZyNF9zb19vcHMpOwotLQotLSAgc2V0 X2dkYmFyY2hfd2NoYXJfYml0IChnZGJhcmNoLCAzMik7Ci0tICBzZXRfZ2RiYXJjaF93Y2hhcl9z aWduZWQgKGdkYmFyY2gsIDApOwotLX0KLS0KLS12b2lkIF9pbml0aWFsaXplX2kzODZudG9fdGRl cCAoKTsKLS12b2lkCi0tX2luaXRpYWxpemVfaTM4Nm50b190ZGVwICgpCi0tewotLSAgaW5pdF9p Mzg2bnRvX29wcyAoKTsKLS0gIGdkYmFyY2hfcmVnaXN0ZXJfb3NhYmkgKGJmZF9hcmNoX2kzODYs IDAsIEdEQl9PU0FCSV9RTlhOVE8sCi0tCQkJICBpMzg2bnRvX2luaXRfYWJpKTsKLS0gIGdkYmFy Y2hfcmVnaXN0ZXJfb3NhYmlfc25pZmZlciAoYmZkX2FyY2hfaTM4NiwgYmZkX3RhcmdldF9lbGZf Zmxhdm91ciwKLS0JCQkJICBudG9fZWxmX29zYWJpX3NuaWZmZXIpOwotLX0KLWRpZmYgLS1naXQg YS9nZGIvbnRvLXByb2Nmcy5jIGIvZ2RiL250by1wcm9jZnMuYwotZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0Ci0tLS0gYS9nZGIvbnRvLXByb2Nmcy5jCi0rKysgL2Rldi9udWxsCi1AQCAtMSwxNTg4 ICswLDAgQEAKLS0vKiBNYWNoaW5lIGluZGVwZW5kZW50IHN1cHBvcnQgZm9yIFFOWCBOZXV0cmlu byAvcHJvYyAocHJvY2VzcyBmaWxlIHN5c3RlbSkKLS0gICBmb3IgR0RCLiAgV3JpdHRlbiBieSBD b2xpbiBCdXJnZXNzIGF0IFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIExpbWl0ZWQuCi0tCi0tICAgQ29w eXJpZ2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0tCi0t ICAgQ29udHJpYnV0ZWQgYnkgUU5YIFNvZnR3YXJlIFN5c3RlbXMgTHRkLgotLQotLSAgIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdEQi4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotLSAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Ci0tICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKLS0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot LQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0gICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCi0tCi0tCi0tI2luY2x1ZGUgPGZjbnRsLmg+Ci0tI2luY2x1ZGUgPHNwYXduLmg+ Ci0tI2luY2x1ZGUgPHN5cy9kZWJ1Zy5oPgotLSNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+Ci0tI2lu Y2x1ZGUgPHN5cy9uZXV0cmluby5oPgotLSNpbmNsdWRlIDxzeXMvc3lzcGFnZS5oPgotLSNpbmNs dWRlIDxkaXJlbnQuaD4KLS0jaW5jbHVkZSA8c3lzL25ldG1nci5oPgotLSNpbmNsdWRlIDxzeXMv YXV4di5oPgotLQotLSNpbmNsdWRlICJnZGJjb3JlLmgiCi0tI2luY2x1ZGUgImluZmVyaW9yLmgi Ci0tI2luY2x1ZGUgInRhcmdldC5oIgotLSNpbmNsdWRlICJvYmpmaWxlcy5oIgotLSNpbmNsdWRl ICJnZGJ0aHJlYWQuaCIKLS0jaW5jbHVkZSAibnRvLXRkZXAuaCIKLS0jaW5jbHVkZSAiY29tbWFu ZC5oIgotLSNpbmNsdWRlICJyZWdjYWNoZS5oIgotLSNpbmNsdWRlICJzb2xpYi5oIgotLSNpbmNs dWRlICJpbmYtY2hpbGQuaCIKLS0jaW5jbHVkZSAiZ2Ric3VwcG9ydC9maWxlc3R1ZmYuaCIKLS0j aW5jbHVkZSAiZ2Ric3VwcG9ydC9zY29wZWRfZmQuaCIKLS0KLS0jZGVmaW5lIE5VTExfUElECQkw Ci0tI2RlZmluZSBfREVCVUdfRkxBR19UUkFDRQkoX0RFQlVHX0ZMQUdfVFJBQ0VfRVhFQ3xfREVC VUdfRkxBR19UUkFDRV9SRHxcCi0tCQlfREVCVUdfRkxBR19UUkFDRV9XUnxfREVCVUdfRkxBR19U UkFDRV9NT0RJRlkpCi0tCi0taW50IGN0bF9mZDsKLS0KLS1zdGF0aWMgc2lnaGFuZGxlcl90IG9m dW5jOwotLQotLXN0YXRpYyBwcm9jZnNfcnVuIHJ1bjsKLS0KLS0vKiBDcmVhdGUgdGhlICJuYXRp dmUiIGFuZCAicHJvY2ZzIiB0YXJnZXRzLiAgKi8KLS0KLS1zdHJ1Y3QgbnRvX3Byb2Nmc190YXJn ZXQgOiBwdWJsaWMgaW5mX2NoaWxkX3RhcmdldAotLXsKLS0gIHZvaWQgb3BlbiAoY29uc3QgY2hh ciAqYXJnLCBpbnQgZnJvbV90dHkpIG92ZXJyaWRlOwotLQotLSAgdm9pZCBhdHRhY2ggKGNvbnN0 IGNoYXIgKiwgaW50KSBvdmVycmlkZSA9IDA7Ci0tCi0tICB2b2lkIHBvc3RfYXR0YWNoIChpbnQp OwotLQotLSAgdm9pZCBkZXRhY2ggKGluZmVyaW9yICosIGludCkgb3ZlcnJpZGU7Ci0tCi0tICB2 b2lkIHJlc3VtZSAocHRpZF90LCBpbnQsIGVudW0gZ2RiX3NpZ25hbCkgb3ZlcnJpZGU7Ci0tCi0t ICBwdGlkX3Qgd2FpdCAocHRpZF90LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKiwgdGFyZ2V0 X3dhaXRfZmxhZ3MpIG92ZXJyaWRlOwotLQotLSAgdm9pZCBmZXRjaF9yZWdpc3RlcnMgKHN0cnVj dCByZWdjYWNoZSAqLCBpbnQpIG92ZXJyaWRlOwotLSAgdm9pZCBzdG9yZV9yZWdpc3RlcnMgKHN0 cnVjdCByZWdjYWNoZSAqLCBpbnQpIG92ZXJyaWRlOwotLQotLSAgZW51bSB0YXJnZXRfeGZlcl9z dGF0dXMgeGZlcl9wYXJ0aWFsIChlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0LAotLQkJCQkJY29u c3QgY2hhciAqYW5uZXgsCi0tCQkJCQlnZGJfYnl0ZSAqcmVhZGJ1ZiwKLS0JCQkJCWNvbnN0IGdk Yl9ieXRlICp3cml0ZWJ1ZiwKLS0JCQkJCVVMT05HRVNUIG9mZnNldCwgVUxPTkdFU1QgbGVuLAot LQkJCQkJVUxPTkdFU1QgKnhmZXJlZF9sZW4pIG92ZXJyaWRlOwotLQotLSAgdm9pZCBmaWxlc19p bmZvICgpIG92ZXJyaWRlOwotLQotLSAgaW50IGluc2VydF9icmVha3BvaW50IChzdHJ1Y3QgZ2Ri YXJjaCAqLCBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKikgb3ZlcnJpZGU7Ci0tCi0tICBpbnQgcmVt b3ZlX2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICosIHN0cnVjdCBicF90YXJnZXRfaW5mbyAq LAotLQkJCSBlbnVtIHJlbW92ZV9icF9yZWFzb24pIG92ZXJyaWRlOwotLQotLSAgaW50IGNhbl91 c2VfaHdfYnJlYWtwb2ludCAoZW51bSBicHR5cGUsIGludCwgaW50KSBvdmVycmlkZTsKLS0KLS0g IGludCBpbnNlcnRfaHdfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKiwgc3RydWN0IGJwX3Rh cmdldF9pbmZvICopIG92ZXJyaWRlOwotLQotLSAgaW50IHJlbW92ZV9od19icmVha3BvaW50IChz dHJ1Y3QgZ2RiYXJjaCAqLCBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKikgb3ZlcnJpZGU7Ci0tCi0t ICBpbnQgaW5zZXJ0X3dhdGNocG9pbnQgKENPUkVfQUREUiwgaW50LCBlbnVtIHRhcmdldF9od19i cF90eXBlLAotLQkJCSBzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBvdmVycmlkZTsKLS0KLS0gIGludCBy ZW1vdmVfd2F0Y2hwb2ludCAoQ09SRV9BRERSLCBpbnQsIGVudW0gdGFyZ2V0X2h3X2JwX3R5cGUs Ci0tCQkJIHN0cnVjdCBleHByZXNzaW9uICopIG92ZXJyaWRlOwotLQotLSAgYm9vbCBzdG9wcGVk X2J5X3dhdGNocG9pbnQgKCkgb3ZlcnJpZGU7Ci0tCi0tICB2b2lkIGtpbGwgKCkgb3ZlcnJpZGU7 Ci0tCi0tICB2b2lkIGNyZWF0ZV9pbmZlcmlvciAoY29uc3QgY2hhciAqLCBjb25zdCBzdGQ6OnN0 cmluZyAmLAotLQkJCWNoYXIgKiosIGludCkgb3ZlcnJpZGU7Ci0tCi0tICB2b2lkIG1vdXJuX2lu ZmVyaW9yICgpIG92ZXJyaWRlOwotLQotLSAgdm9pZCBwYXNzX3NpZ25hbHMgKGdkYjo6YXJyYXlf dmlldzxjb25zdCB1bnNpZ25lZCBjaGFyPikgb3ZlcnJpZGU7Ci0tCi0tICBib29sIHRocmVhZF9h bGl2ZSAocHRpZF90IHB0aWQpIG92ZXJyaWRlOwotLQotLSAgdm9pZCB1cGRhdGVfdGhyZWFkX2xp c3QgKCkgb3ZlcnJpZGU7Ci0tCi0tICBzdGQ6OnN0cmluZyBwaWRfdG9fc3RyIChwdGlkX3QpIG92 ZXJyaWRlOwotLQotLSAgdm9pZCBpbnRlcnJ1cHQgKCkgb3ZlcnJpZGU7Ci0tCi0tICBjb25zdCBj aGFyICpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICopIG92ZXJyaWRlOwot LQotLSAgY29uc3QgY2hhciAqcGlkX3RvX2V4ZWNfZmlsZSAoaW50IHBpZCkgb3ZlcnJpZGU7Ci0t fTsKLS0KLS0vKiBGb3IgInRhcmdldCBuYXRpdmUiLiAgKi8KLS0KLS1zdGF0aWMgY29uc3QgdGFy Z2V0X2luZm8gbnRvX25hdGl2ZV90YXJnZXRfaW5mbyA9IHsKLS0gICJuYXRpdmUiLAotLSAgTl8o IlFOWCBOZXV0cmlubyBsb2NhbCBwcm9jZXNzIiksCi0tICBOXygiUU5YIE5ldXRyaW5vIGxvY2Fs IHByb2Nlc3MgKHN0YXJ0ZWQgYnkgdGhlIFwicnVuXCIgY29tbWFuZCkuIikKLS19OwotLQotLWNs YXNzIG50b19wcm9jZnNfdGFyZ2V0X25hdGl2ZSBmaW5hbCA6IHB1YmxpYyBudG9fcHJvY2ZzX3Rh cmdldAotLXsKLS0gIGNvbnN0IHRhcmdldF9pbmZvICZpbmZvICgpIGNvbnN0IG92ZXJyaWRlCi0t ICB7IHJldHVybiBudG9fbmF0aXZlX3RhcmdldF9pbmZvOyB9Ci0tfTsKLS0KLS0vKiBGb3IgInRh cmdldCBwcm9jZnMgPG5vZGU+Ii4gICovCi0tCi0tc3RhdGljIGNvbnN0IHRhcmdldF9pbmZvIG50 b19wcm9jZnNfdGFyZ2V0X2luZm8gPSB7Ci0tICAicHJvY2ZzIiwKLS0gIE5fKCJRTlggTmV1dHJp bm8gbG9jYWwgb3IgcmVtb3RlIHByb2Nlc3MiKSwKLS0gIE5fKCJRTlggTmV1dHJpbm8gcHJvY2Vz cy4gIHRhcmdldCBwcm9jZnMgTk9ERSIpCi0tfTsKLS0KLS1zdHJ1Y3QgbnRvX3Byb2Nmc190YXJn ZXRfcHJvY2ZzIGZpbmFsIDogcHVibGljIG50b19wcm9jZnNfdGFyZ2V0Ci0tewotLSAgY29uc3Qg dGFyZ2V0X2luZm8gJmluZm8gKCkgY29uc3Qgb3ZlcnJpZGUKLS0gIHsgcmV0dXJuIG50b19wcm9j ZnNfdGFyZ2V0X2luZm87IH0KLS19OwotLQotLXN0YXRpYyBwdGlkX3QgZG9fYXR0YWNoIChwdGlk X3QgcHRpZCk7Ci0tCi0tLyogVGhlc2UgdHdvIGdsb2JhbHMgYXJlIG9ubHkgZXZlciBzZXQgaW4g cHJvY2ZzX29wZW5fMSwgYnV0IGFyZQotLSAgIHJlZmVyZW5jZWQgZWxzZXdoZXJlLiAgJ250b19w cm9jZnNfbm9kZScgaXMgYSBmbGFnIHVzZWQgdG8gc2F5Ci0tICAgd2hldGhlciB3ZSBhcmUgbG9j YWwsIG9yIHdlIHNob3VsZCBnZXQgdGhlIGN1cnJlbnQgbm9kZSBkZXNjcmlwdG9yCi0tICAgZm9y IHRoZSByZW1vdGUgUU5YIG5vZGUuICAqLwotLXN0YXRpYyBjaGFyICpub2Rlc3RyOwotLXN0YXRp YyB1bnNpZ25lZCBudG9fcHJvY2ZzX25vZGUgPSBORF9MT0NBTF9OT0RFOwotLQotLS8qIFJldHVy biB0aGUgY3VycmVudCBRTlggTm9kZSwgb3IgZXJyb3Igb3V0LiAgVGhpcyBpcyBhIHNpbXBsZQot LSAgIHdyYXBwZXIgZm9yIHRoZSBuZXRtZ3Jfc3RydG9uZCgpIGZ1bmN0aW9uLiAgVGhlIHJlYXNv biB0aGlzCi0tICAgaXMgcmVxdWlyZWQgaXMgYmVjYXVzZSBRTlggbm9kZSBkZXNjcmlwdG9ycyBh cmUgdHJhbnNpZW50IHNvCi0tICAgd2UgaGF2ZSB0byByZS1hY3F1aXJlIHRoZW0gZXZlcnkgdGlt ZS4gICovCi0tc3RhdGljIHVuc2lnbmVkCi0tbnRvX25vZGUgKHZvaWQpCi0tewotLSAgdW5zaWdu ZWQgbm9kZTsKLS0KLS0gIGlmIChORF9OT0RFX0NNUCAobnRvX3Byb2Nmc19ub2RlLCBORF9MT0NB TF9OT0RFKSA9PSAwCi0tICAgICAgfHwgbm9kZXN0ciA9PSBOVUxMKQotLSAgICByZXR1cm4gTkRf TE9DQUxfTk9ERTsKLS0KLS0gIG5vZGUgPSBuZXRtZ3Jfc3RydG9uZCAobm9kZXN0ciwgMCk7Ci0t ICBpZiAobm9kZSA9PSAtMSkKLS0gICAgZXJyb3IgKF8oIkxvc3QgdGhlIFFOWCBub2RlLiAgRGVi dWcgc2Vzc2lvbiBwcm9iYWJseSBvdmVyLiIpKTsKLS0KLS0gIHJldHVybiAobm9kZSk7Ci0tfQot LQotLXN0YXRpYyBlbnVtIGdkYl9vc2FiaQotLXByb2Nmc19pc19udG9fdGFyZ2V0IChiZmQgKmFi ZmQpCi0tewotLSAgcmV0dXJuIEdEQl9PU0FCSV9RTlhOVE87Ci0tfQotLQotLS8qIFRoaXMgaXMg Y2FsbGVkIHdoZW4gd2UgY2FsbCAndGFyZ2V0IG5hdGl2ZScgb3IgJ3RhcmdldCBwcm9jZnMKLS0g ICA8YXJnPicgZnJvbSB0aGUgKGdkYikgcHJvbXB0LiAgRm9yIFFOWDYgKG50byksIHRoZSBvbmx5 IHZhbGlkIGFyZwotLSAgIHdpbGwgYmUgYSBRTlggbm9kZSBzdHJpbmcsIGVnOiAiL25ldC9zb21l X25vZGUiLiAgSWYgYXJnIGlzIG5vdCBhCi0tICAgdmFsaWQgUU5YIG5vZGUsIHdlIHdpbGwgZGVm YXVsdCB0byBsb2NhbC4gICovCi0tdm9pZAotLW50b19wcm9jZnNfdGFyZ2V0OjpvcGVuIChjb25z dCBjaGFyICphcmcsIGludCBmcm9tX3R0eSkKLS17Ci0tICBjaGFyICplbmRzdHI7Ci0tICBjaGFy IGJ1ZmZlcls1MF07Ci0tICBpbnQgdG90YWxfc2l6ZTsKLS0gIHByb2Nmc19zeXNpbmZvICpzeXNp bmZvOwotLSAgY2hhciBudG9fcHJvY2ZzX3BhdGhbUEFUSF9NQVhdOwotLQotLSAgLyogT2ZmZXIg dG8ga2lsbCBwcmV2aW91cyBpbmZlcmlvcnMgYmVmb3JlIG9wZW5pbmcgdGhpcyB0YXJnZXQuICAq LwotLSAgdGFyZ2V0X3ByZW9wZW4gKGZyb21fdHR5KTsKLS0KLS0gIG50b19pc19udG9fdGFyZ2V0 ID0gcHJvY2ZzX2lzX250b190YXJnZXQ7Ci0tCi0tICAvKiBTZXQgdGhlIGRlZmF1bHQgbm9kZSB1 c2VkIGZvciBzcGF3bmluZyB0byB0aGlzIG9uZSwKLS0gICAgIGFuZCBvbmx5IG92ZXJyaWRlIGl0 IGlmIHRoZXJlIGlzIGEgdmFsaWQgYXJnLiAgKi8KLS0KLS0gIHhmcmVlIChub2Rlc3RyKTsKLS0g IG5vZGVzdHIgPSBOVUxMOwotLQotLSAgbnRvX3Byb2Nmc19ub2RlID0gTkRfTE9DQUxfTk9ERTsK LS0gIG5vZGVzdHIgPSAoYXJnICE9IE5VTEwpID8geHN0cmR1cCAoYXJnKSA6IE5VTEw7Ci0tCi0t ICBpZiAobm9kZXN0cikKLS0gICAgewotLSAgICAgIG50b19wcm9jZnNfbm9kZSA9IG5ldG1ncl9z dHJ0b25kIChub2Rlc3RyLCAmZW5kc3RyKTsKLS0gICAgICBpZiAobnRvX3Byb2Nmc19ub2RlID09 IC0xKQotLQl7Ci0tCSAgaWYgKGVycm5vID09IEVOT1RTVVApCi0tCSAgICBnZGJfcHJpbnRmICgi UU5YIE5ldCBNYW5hZ2VyIG5vdCBmb3VuZC5cbiIpOwotLQkgIGdkYl9wcmludGYgKCJJbnZhbGlk IFFOWCBub2RlICVzOiBlcnJvciAlZCAoJXMpLlxuIiwgbm9kZXN0ciwKLS0JCSAgICAgIGVycm5v LCBzYWZlX3N0cmVycm9yIChlcnJubykpOwotLQkgIHhmcmVlIChub2Rlc3RyKTsKLS0JICBub2Rl c3RyID0gTlVMTDsKLS0JICBudG9fcHJvY2ZzX25vZGUgPSBORF9MT0NBTF9OT0RFOwotLQl9Ci0t ICAgICAgZWxzZSBpZiAoKmVuZHN0cikKLS0JewotLQkgIGlmICgqKGVuZHN0ciAtIDEpID09ICcv JykKLS0JICAgICooZW5kc3RyIC0gMSkgPSAwOwotLQkgIGVsc2UKLS0JICAgICplbmRzdHIgPSAw OwotLQl9Ci0tICAgIH0KLS0gIHNucHJpbnRmIChudG9fcHJvY2ZzX3BhdGgsIFBBVEhfTUFYIC0g MSwgIiVzJXMiLAotLQkgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogIiIsICIvcHJv YyIpOwotLQotLSAgc2NvcGVkX2ZkIGZkIChvcGVuIChudG9fcHJvY2ZzX3BhdGgsIE9fUkRPTkxZ KSk7Ci0tICBpZiAoZmQuZ2V0ICgpID09IC0xKQotLSAgICB7Ci0tICAgICAgZ2RiX3ByaW50ZiAo IkVycm9yIG9wZW5pbmcgJXMgOiAlZCAoJXMpXG4iLCBudG9fcHJvY2ZzX3BhdGgsIGVycm5vLAot LQkJICBzYWZlX3N0cmVycm9yIChlcnJubykpOwotLSAgICAgIGVycm9yIChfKCJJbnZhbGlkIHBy b2NmcyBhcmciKSk7Ci0tICAgIH0KLS0KLS0gIHN5c2luZm8gPSAodm9pZCAqKSBidWZmZXI7Ci0t ICBpZiAoZGV2Y3RsIChmZC5nZXQgKCksIERDTURfUFJPQ19TWVNJTkZPLCBzeXNpbmZvLCBzaXpl b2YgYnVmZmVyLCAwKSAhPSBFT0spCi0tICAgIHsKLS0gICAgICBnZGJfcHJpbnRmICgiRXJyb3Ig Z2V0dGluZyBzaXplOiAlZCAoJXMpXG4iLCBlcnJubywKLS0JCSAgc2FmZV9zdHJlcnJvciAoZXJy bm8pKTsKLS0gICAgICBlcnJvciAoXygiRGV2Y3RsIGZhaWxlZC4iKSk7Ci0tICAgIH0KLS0gIGVs c2UKLS0gICAgewotLSAgICAgIHRvdGFsX3NpemUgPSBzeXNpbmZvLT50b3RhbF9zaXplOwotLSAg ICAgIHN5c2luZm8gPSBhbGxvY2EgKHRvdGFsX3NpemUpOwotLSAgICAgIGlmIChzeXNpbmZvID09 IE5VTEwpCi0tCXsKLS0JICBnZGJfcHJpbnRmICgiTWVtb3J5IGVycm9yOiAlZCAoJXMpXG4iLCBl cnJubywKLS0JCSAgICAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7Ci0tCSAgZXJyb3IgKF8oImFs bG9jYSBmYWlsZWQuIikpOwotLQl9Ci0tICAgICAgZWxzZQotLQl7Ci0tCSAgaWYgKGRldmN0bCAo ZmQuZ2V0ICgpLCBEQ01EX1BST0NfU1lTSU5GTywgc3lzaW5mbywgdG90YWxfc2l6ZSwgMCkKLS0J ICAgICAgIT0gRU9LKQotLQkgICAgewotLQkgICAgICBnZGJfcHJpbnRmICgiRXJyb3IgZ2V0dGlu ZyBzeXNpbmZvOiAlZCAoJXMpXG4iLCBlcnJubywKLS0JCQkgIHNhZmVfc3RyZXJyb3IgKGVycm5v KSk7Ci0tCSAgICAgIGVycm9yIChfKCJEZXZjdGwgZmFpbGVkLiIpKTsKLS0JICAgIH0KLS0JICBl bHNlCi0tCSAgICB7Ci0tCSAgICAgIGlmIChzeXNpbmZvLT50eXBlICE9Ci0tCQkgIG50b19tYXBf YXJjaF90b19jcHV0eXBlCi0tCQkgICAgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbwotLQkJICAgICAo Y3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKSktPmFyY2hfbmFtZSkpCi0tCQllcnJvciAoXygi SW52YWxpZCB0YXJnZXQgQ1BVLiIpKTsKLS0JICAgIH0KLS0JfQotLSAgICB9Ci0tCi0tICBpbmZf Y2hpbGRfdGFyZ2V0OjpvcGVuIChhcmcsIGZyb21fdHR5KTsKLS0gIGdkYl9wcmludGYgKCJEZWJ1 Z2dpbmcgdXNpbmcgJXNcbiIsIG50b19wcm9jZnNfcGF0aCk7Ci0tfQotLQotLXN0YXRpYyB2b2lk Ci0tcHJvY2ZzX3NldF90aHJlYWQgKHB0aWRfdCBwdGlkKQotLXsKLS0gIHBpZF90IHRpZDsKLS0K LS0gIHRpZCA9IHB0aWQudGlkICgpOwotLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19DVVJU SFJFQUQsICZ0aWQsIHNpemVvZiAodGlkKSwgMCk7Ci0tfQotLQotLS8qICBSZXR1cm4gdHJ1ZSBp ZiB0aGUgdGhyZWFkIFRIIGlzIHN0aWxsIGFsaXZlLiAgKi8KLS0KLS1ib29sCi0tbnRvX3Byb2Nm c190YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCi0tewotLSAgcGlkX3QgdGlkOwot LSAgcGlkX3QgcGlkOwotLSAgcHJvY2ZzX3N0YXR1cyBzdGF0dXM7Ci0tICBpbnQgZXJyOwotLQot LSAgdGlkID0gcHRpZC50aWQgKCk7Ci0tICBwaWQgPSBwdGlkLnBpZCAoKTsKLS0KLS0gIGlmIChr aWxsIChwaWQsIDApID09IC0xKQotLSAgICByZXR1cm4gZmFsc2U7Ci0tCi0tICBzdGF0dXMudGlk ID0gdGlkOwotLSAgaWYgKChlcnIgPSBkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9DX1RJRFNUQVRV UywKLS0JCSAgICAgJnN0YXR1cywgc2l6ZW9mIChzdGF0dXMpLCAwKSkgIT0gRU9LKQotLSAgICBy ZXR1cm4gZmFsc2U7Ci0tCi0tICAvKiBUaHJlYWQgaXMgYWxpdmUgb3IgZGVhZCBidXQgbm90IHll dCBqb2luZWQsCi0tICAgICBvciBkZWFkIGFuZCB0aGVyZSBpcyBhbiBhbGl2ZSAob3IgZGVhZCB1 bmpvaW5lZCkgdGhyZWFkIHdpdGgKLS0gICAgIGhpZ2hlciB0aWQuCi0tCi0tICAgICBJZiB0aGUg dGlkIGlzIG5vdCB0aGUgc2FtZSBhcyByZXF1ZXN0ZWQsIHJlcXVlc3RlZCB0aWQgaXMgZGVhZC4g ICovCi0tICByZXR1cm4gKHN0YXR1cy50aWQgPT0gdGlkKSAmJiAoc3RhdHVzLnN0YXRlICE9IFNU QVRFX0RFQUQpOwotLX0KLS0KLS1zdGF0aWMgdm9pZAotLXVwZGF0ZV90aHJlYWRfcHJpdmF0ZV9k YXRhX25hbWUgKHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X3RocmVhZCwKLS0JCQkJIGNvbnN0IGNo YXIgKm5ld25hbWUpCi0tewotLSAgbnRvX3RocmVhZF9pbmZvICpwdGkgPSBnZXRfbnRvX3RocmVh ZF9pbmZvIChuZXdfdGhyZWFkKTsKLS0KLS0gIGdkYl9hc3NlcnQgKG5ld25hbWUgIT0gTlVMTCk7 Ci0tICBnZGJfYXNzZXJ0IChuZXdfdGhyZWFkICE9IE5VTEwpOwotLQotLSAgaWYgKHB0aSkKLS0g ICAgewotLSAgICAgIHB0aSA9IG5ldyBudG9fdGhyZWFkX2luZm87Ci0tICAgICAgbmV3X3RocmVh ZC0+cHJpdi5yZXNldCAocHRpKTsKLS0gICAgfQotLQotLSAgcHRpLT5uYW1lID0gbmV3bmFtZTsK LS19Ci0tCi0tc3RhdGljIHZvaWQgCi0tdXBkYXRlX3RocmVhZF9wcml2YXRlX2RhdGEgKHN0cnVj dCB0aHJlYWRfaW5mbyAqbmV3X3RocmVhZCwgCi0tCQkJICAgIHB0aHJlYWRfdCB0aWQsIGludCBz dGF0ZSwgaW50IGZsYWdzKQotLXsKLS0gIHByb2Nmc19pbmZvIHBpZGluZm87Ci0tICBzdHJ1Y3Qg X3RocmVhZF9uYW1lICp0bjsKLS0gIHByb2Nmc190aHJlYWRjdGwgdGN0bDsKLS0KLS0jaWYgX05U T19WRVJTSU9OID4gNjMwCi0tICBnZGJfYXNzZXJ0IChuZXdfdGhyZWFkICE9IE5VTEwpOwotLQot LSAgaWYgKGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfSU5GTywgJnBpZGluZm8sCi0tCSAgICAg IHNpemVvZihwaWRpbmZvKSwgMCkgIT0gRU9LKQotLSAgICByZXR1cm47Ci0tCi0tICBtZW1zZXQg KCZ0Y3RsLCAwLCBzaXplb2YgKHRjdGwpKTsKLS0gIHRjdGwuY21kID0gX05UT19UQ1RMX05BTUU7 Ci0tICB0biA9IChzdHJ1Y3QgX3RocmVhZF9uYW1lICopICgmdGN0bC5kYXRhKTsKLS0KLS0gIC8q IEZldGNoIG5hbWUgZm9yIHRoZSBnaXZlbiB0aHJlYWQuICAqLwotLSAgdGN0bC50aWQgPSB0aWQ7 Ci0tICB0bi0+bmFtZV9idWZfbGVuID0gc2l6ZW9mICh0Y3RsLmRhdGEpIC0gc2l6ZW9mICgqdG4p OwotLSAgdG4tPm5ld19uYW1lX2xlbiA9IC0xOyAvKiBHZXR0aW5nLCBub3Qgc2V0dGluZy4gICov Ci0tICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19USFJFQURDVEwsICZ0Y3RsLCBzaXpl b2YgKHRjdGwpLCBOVUxMKSAhPSBFT0spCi0tICAgIHRuLT5uYW1lX2J1ZlswXSA9ICdcMCc7Ci0t Ci0tICB0bi0+bmFtZV9idWZbX05UT19USFJFQURfTkFNRV9NQVhdID0gJ1wwJzsKLS0KLS0gIHVw ZGF0ZV90aHJlYWRfcHJpdmF0ZV9kYXRhX25hbWUgKG5ld190aHJlYWQsIHRuLT5uYW1lX2J1Zik7 Ci0tCi0tICBudG9fdGhyZWFkX2luZm8gKnB0aSA9IGdldF9udG9fdGhyZWFkX2luZm8gKG5ld190 aHJlYWQpOwotLSAgcHRpLT50aWQgPSB0aWQ7Ci0tICBwdGktPnN0YXRlID0gc3RhdGU7Ci0tICBw dGktPmZsYWdzID0gZmxhZ3M7Ci0tI2VuZGlmIC8qIF9OVE9fVkVSU0lPTiAqLwotLX0KLS0KLS12 b2lkCi0tbnRvX3Byb2Nmc190YXJnZXQ6OnVwZGF0ZV90aHJlYWRfbGlzdCAoKQotLXsKLS0gIHBy b2Nmc19zdGF0dXMgc3RhdHVzOwotLSAgcGlkX3QgcGlkOwotLSAgcHRpZF90IHB0aWQ7Ci0tICBw dGhyZWFkX3QgdGlkOwotLSAgc3RydWN0IHRocmVhZF9pbmZvICpuZXdfdGhyZWFkOwotLQotLSAg aWYgKGN0bF9mZCA9PSAtMSkKLS0gICAgcmV0dXJuOwotLQotLSAgcHJ1bmVfdGhyZWFkcyAoKTsK LS0KLS0gIHBpZCA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPnBpZDsKLS0KLS0gIHN0YXR1cy50aWQg PSAxOwotLQotLSAgZm9yICh0aWQgPSAxOzsgKyt0aWQpCi0tICAgIHsKLS0gICAgICBpZiAoc3Rh dHVzLnRpZCA9PSB0aWQgCi0tCSAgJiYgKGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfVElEU1RB VFVTLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApCi0tCSAgICAgICE9IEVPSykpCi0tCWJy ZWFrOwotLSAgICAgIGlmIChzdGF0dXMudGlkICE9IHRpZCkKLS0JLyogVGhlIHJlYXNvbiB3aHkg dGhpcyB3b3VsZCBub3QgYmUgZXF1YWwgaXMgdGhhdCBkZXZjdGwgbWlnaHQgaGF2ZSAKLS0JICAg cmV0dXJuZWQgZGlmZmVyZW50IHRpZCwgbWVhbmluZyB0aGUgcmVxdWVzdGVkIHRpZCBubyBsb25n ZXIgZXhpc3RzCi0tCSAgIChlLmcuIHRocmVhZCBleGl0ZWQpLiAgKi8KLS0JY29udGludWU7Ci0t ICAgICAgcHRpZCA9IHB0aWRfdCAocGlkLCAwLCB0aWQpOwotLSAgICAgIG5ld190aHJlYWQgPSB0 aGlzLT5maW5kX3RocmVhZCAocHRpZCk7Ci0tICAgICAgaWYgKCFuZXdfdGhyZWFkKQotLQluZXdf dGhyZWFkID0gYWRkX3RocmVhZCAocHRpZCk7Ci0tICAgICAgdXBkYXRlX3RocmVhZF9wcml2YXRl X2RhdGEgKG5ld190aHJlYWQsIHRpZCwgc3RhdHVzLnN0YXRlLCAwKTsKLS0gICAgICBzdGF0dXMu dGlkKys7Ci0tICAgIH0KLS0gIHJldHVybjsKLS19Ci0tCi0tc3RhdGljIHZvaWQKLS1wcm9jZnNf cGlkbGlzdCAoY29uc3QgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQotLXsKLS0gIHN0cnVjdCBk aXJlbnQgKmRpcnAgPSBOVUxMOwotLSAgY2hhciBidWZbUEFUSF9NQVhdOwotLSAgcHJvY2ZzX2lu Zm8gKnBpZGluZm8gPSBOVUxMOwotLSAgcHJvY2ZzX2RlYnVnaW5mbyAqaW5mbyA9IE5VTEw7Ci0t ICBwcm9jZnNfc3RhdHVzICpzdGF0dXMgPSBOVUxMOwotLSAgcGlkX3QgbnVtX3RocmVhZHMgPSAw OwotLSAgcGlkX3QgcGlkOwotLSAgY2hhciBuYW1lWzUxMl07Ci0tICBjaGFyIHByb2Nmc19kaXJb UEFUSF9NQVhdOwotLQotLSAgc25wcmludGYgKHByb2Nmc19kaXIsIHNpemVvZiAocHJvY2ZzX2Rp ciksICIlcyVzIiwKLS0JICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6ICIiLCAiL3By b2MiKTsKLS0KLS0gIGdkYl9kaXJfdXAgZHAgKG9wZW5kaXIgKHByb2Nmc19kaXIpKTsKLS0gIGlm IChkcCA9PSBOVUxMKQotLSAgICB7Ci0tICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwgImZh aWxlZCB0byBvcGVuZGlyIFwiJXNcIiAtICVkICglcykiLAotLQkJICBwcm9jZnNfZGlyLCBlcnJu bywgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKLS0gICAgICByZXR1cm47Ci0tICAgIH0KLS0KLS0g IC8qIFN0YXJ0IHNjYW4gYXQgZmlyc3QgcGlkLiAgKi8KLS0gIHJld2luZGRpciAoZHAuZ2V0ICgp KTsKLS0KLS0gIGRvCi0tICAgIHsKLS0gICAgICAvKiBHZXQgdGhlIHJpZ2h0IHBpZCBhbmQgcHJv Y2ZzIHBhdGggZm9yIHRoZSBwaWQuICAqLwotLSAgICAgIGRvCi0tCXsKLS0JICBkaXJwID0gcmVh ZGRpciAoZHAuZ2V0ICgpKTsKLS0JICBpZiAoZGlycCA9PSBOVUxMKQotLQkgICAgcmV0dXJuOwot LQkgIHNucHJpbnRmIChidWYsIHNpemVvZiAoYnVmKSwgIiVzJXMvJXMvYXMiLAotLQkJICAgIChu b2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6ICIiLAotLQkJICAgICIvcHJvYyIsIGRpcnAtPmRf bmFtZSk7Ci0tCSAgcGlkID0gYXRvaSAoZGlycC0+ZF9uYW1lKTsKLS0JfQotLSAgICAgIHdoaWxl IChwaWQgPT0gMCk7Ci0tCi0tICAgICAgLyogT3BlbiB0aGUgcHJvY2ZzIHBhdGguICAqLwotLSAg ICAgIHNjb3BlZF9mZCBmZCAob3BlbiAoYnVmLCBPX1JET05MWSkpOwotLSAgICAgIGlmIChmZC5n ZXQgKCkgPT0gLTEpCi0tCXsKLS0JICBnZGJfcHJpbnRmIChnZGJfc3RkZXJyLCAiZmFpbGVkIHRv IG9wZW4gJXMgLSAlZCAoJXMpXG4iLAotLQkJICAgICAgYnVmLCBlcnJubywgc2FmZV9zdHJlcnJv ciAoZXJybm8pKTsKLS0JICBjb250aW51ZTsKLS0JfQotLQotLSAgICAgIHBpZGluZm8gPSAocHJv Y2ZzX2luZm8gKikgYnVmOwotLSAgICAgIGlmIChkZXZjdGwgKGZkLmdldCAoKSwgRENNRF9QUk9D X0lORk8sIHBpZGluZm8sIHNpemVvZiAoYnVmKSwgMCkgIT0gRU9LKQotLQl7Ci0tCSAgZ2RiX3By aW50ZiAoZ2RiX3N0ZGVyciwKLS0JCSAgICAgICJkZXZjdGwgRENNRF9QUk9DX0lORk8gZmFpbGVk IC0gJWQgKCVzKVxuIiwKLS0JCSAgICAgIGVycm5vLCBzYWZlX3N0cmVycm9yIChlcnJubykpOwot LQkgIGJyZWFrOwotLQl9Ci0tICAgICAgbnVtX3RocmVhZHMgPSBwaWRpbmZvLT5udW1fdGhyZWFk czsKLS0KLS0gICAgICBpbmZvID0gKHByb2Nmc19kZWJ1Z2luZm8gKikgYnVmOwotLSAgICAgIGlm IChkZXZjdGwgKGZkLmdldCAoKSwgRENNRF9QUk9DX01BUERFQlVHX0JBU0UsIGluZm8sIHNpemVv ZiAoYnVmKSwgMCkKLS0JICAhPSBFT0spCi0tCXN0cmNweSAobmFtZSwgInVuYXZhaWxhYmxlIik7 Ci0tICAgICAgZWxzZQotLQlzdHJjcHkgKG5hbWUsIGluZm8tPnBhdGgpOwotLQotLSAgICAgIC8q IENvbGxlY3Qgc3RhdGUgaW5mbyBvbiBhbGwgdGhlIHRocmVhZHMuICAqLwotLSAgICAgIHN0YXR1 cyA9IChwcm9jZnNfc3RhdHVzICopIGJ1ZjsKLS0gICAgICBmb3IgKHN0YXR1cy0+dGlkID0gMTsg c3RhdHVzLT50aWQgPD0gbnVtX3RocmVhZHM7IHN0YXR1cy0+dGlkKyspCi0tCXsKLS0JICBjb25z dCBpbnQgZXJyCi0tCSAgICA9IGRldmN0bCAoZmQuZ2V0ICgpLCBEQ01EX1BST0NfVElEU1RBVFVT LCBzdGF0dXMsIHNpemVvZiAoYnVmKSwgMCk7Ci0tCSAgZ2RiX3ByaW50ZiAoIiVzIC0gJWQiLCBu YW1lLCBwaWQpOwotLQkgIGlmIChlcnIgPT0gRU9LICYmIHN0YXR1cy0+dGlkICE9IDApCi0tCSAg ICBnZGJfcHJpbnRmICgiLyVkXG4iLCBzdGF0dXMtPnRpZCk7Ci0tCSAgZWxzZQotLQkgICAgewot LQkgICAgICBnZGJfcHJpbnRmICgiXG4iKTsKLS0JICAgICAgYnJlYWs7Ci0tCSAgICB9Ci0tCX0K LS0gICAgfQotLSAgd2hpbGUgKGRpcnAgIT0gTlVMTCk7Ci0tfQotLQotLXN0YXRpYyB2b2lkCi0t cHJvY2ZzX21lbWluZm8gKGNvbnN0IGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKLS17Ci0tICBw cm9jZnNfbWFwaW5mbyAqbWFwaW5mb3MgPSBOVUxMOwotLSAgc3RhdGljIGludCBudW1fbWFwaW5m b3MgPSAwOwotLSAgcHJvY2ZzX21hcGluZm8gKm1hcGluZm9fcCwgKm1hcGluZm9fcDI7Ci0tICBp bnQgZmxhZ3MgPSB+MCwgZXJyLCBudW0sIGksIGo7Ci0tCi0tICBzdHJ1Y3QKLS0gIHsKLS0gICAg cHJvY2ZzX2RlYnVnaW5mbyBpbmZvOwotLSAgICBjaGFyIGJ1ZmZbX1BPU0lYX1BBVEhfTUFYXTsK LS0gIH0gbWFwOwotLQotLSAgc3RydWN0IGluZm8KLS0gIHsKLS0gICAgdW5zaWduZWQgYWRkcjsK LS0gICAgdW5zaWduZWQgc2l6ZTsKLS0gICAgdW5zaWduZWQgZmxhZ3M7Ci0tICAgIHVuc2lnbmVk IGRlYnVnX3ZhZGRyOwotLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0OwotLSAgfTsKLS0K LS0gIHN0cnVjdCBwcmludGluZm8KLS0gIHsKLS0gICAgdW5zaWduZWQgbG9uZyBsb25nIGlubzsK LS0gICAgdW5zaWduZWQgZGV2OwotLSAgICBzdHJ1Y3QgaW5mbyB0ZXh0OwotLSAgICBzdHJ1Y3Qg aW5mbyBkYXRhOwotLSAgICBjaGFyIG5hbWVbMjU2XTsKLS0gIH0gcHJpbnRtZTsKLS0KLS0gIC8q IEdldCB0aGUgbnVtYmVyIG9mIG1hcCBlbnRyeXMuICAqLwotLSAgZXJyID0gZGV2Y3RsIChjdGxf ZmQsIERDTURfUFJPQ19NQVBJTkZPLCBOVUxMLCAwLCAmbnVtKTsKLS0gIGlmIChlcnIgIT0gRU9L KQotLSAgICB7Ci0tICAgICAgcHJpbnRmICgiZmFpbGVkIGRldmN0bCBudW0gbWFwaW5mb3MgLSAl ZCAoJXMpXG4iLCBlcnIsCi0tCSAgICAgIHNhZmVfc3RyZXJyb3IgKGVycikpOwotLSAgICAgIHJl dHVybjsKLS0gICAgfQotLQotLSAgbWFwaW5mb3MgPSBYTkVXVkVDIChwcm9jZnNfbWFwaW5mbywg bnVtKTsKLS0KLS0gIG51bV9tYXBpbmZvcyA9IG51bTsKLS0gIG1hcGluZm9fcCA9IG1hcGluZm9z OwotLQotLSAgLyogRmlsbCB0aGUgbWFwIGVudHJ5cy4gICovCi0tICBlcnIgPSBkZXZjdGwgKGN0 bF9mZCwgRENNRF9QUk9DX01BUElORk8sIG1hcGluZm9fcCwgbnVtCi0tCQkqIHNpemVvZiAocHJv Y2ZzX21hcGluZm8pLCAmbnVtKTsKLS0gIGlmIChlcnIgIT0gRU9LKQotLSAgICB7Ci0tICAgICAg cHJpbnRmICgiZmFpbGVkIGRldmN0bCBtYXBpbmZvcyAtICVkICglcylcbiIsIGVyciwgc2FmZV9z dHJlcnJvciAoZXJyKSk7Ci0tICAgICAgeGZyZWUgKG1hcGluZm9zKTsKLS0gICAgICByZXR1cm47 Ci0tICAgIH0KLS0KLS0gIG51bSA9IHN0ZDo6bWluIChudW0sIG51bV9tYXBpbmZvcyk7Ci0tCi0t ICAvKiBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBtYXBpbmZvcywgYW5kIHN0b3JlIHRoZSBkYXRh IGFuZCB0ZXh0IGluZm8KLS0gICAgIHNvIHdlIGNhbiBwcmludCBpdCBhdCB0aGUgYm90dG9tIG9m IHRoZSBsb29wLiAgKi8KLS0gIGZvciAobWFwaW5mb19wID0gbWFwaW5mb3MsIGkgPSAwOyBpIDwg bnVtOyBpKyssIG1hcGluZm9fcCsrKQotLSAgICB7Ci0tICAgICAgaWYgKCEobWFwaW5mb19wLT5m bGFncyAmIGZsYWdzKSkKLS0JbWFwaW5mb19wLT5pbm8gPSAwOwotLQotLSAgICAgIGlmIChtYXBp bmZvX3AtPmlubyA9PSAwKQkvKiBBbHJlYWR5IHZpc2l0ZWQuICAqLwotLQljb250aW51ZTsKLS0K LS0gICAgICBtYXAuaW5mby52YWRkciA9IG1hcGluZm9fcC0+dmFkZHI7Ci0tCi0tICAgICAgZXJy ID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19NQVBERUJVRywgJm1hcCwgc2l6ZW9mIChtYXAp LCAwKTsKLS0gICAgICBpZiAoZXJyICE9IEVPSykKLS0JY29udGludWU7Ci0tCi0tICAgICAgbWVt c2V0ICgmcHJpbnRtZSwgMCwgc2l6ZW9mIHByaW50bWUpOwotLSAgICAgIHByaW50bWUuZGV2ID0g bWFwaW5mb19wLT5kZXY7Ci0tICAgICAgcHJpbnRtZS5pbm8gPSBtYXBpbmZvX3AtPmlubzsKLS0g ICAgICBwcmludG1lLnRleHQuYWRkciA9IG1hcGluZm9fcC0+dmFkZHI7Ci0tICAgICAgcHJpbnRt ZS50ZXh0LnNpemUgPSBtYXBpbmZvX3AtPnNpemU7Ci0tICAgICAgcHJpbnRtZS50ZXh0LmZsYWdz ID0gbWFwaW5mb19wLT5mbGFnczsKLS0gICAgICBwcmludG1lLnRleHQub2Zmc2V0ID0gbWFwaW5m b19wLT5vZmZzZXQ7Ci0tICAgICAgcHJpbnRtZS50ZXh0LmRlYnVnX3ZhZGRyID0gbWFwLmluZm8u dmFkZHI7Ci0tICAgICAgc3RyY3B5IChwcmludG1lLm5hbWUsIG1hcC5pbmZvLnBhdGgpOwotLQot LSAgICAgIC8qIENoZWNrIGZvciBtYXRjaGluZyBkYXRhLiAgKi8KLS0gICAgICBmb3IgKG1hcGlu Zm9fcDIgPSBtYXBpbmZvcywgaiA9IDA7IGogPCBudW07IGorKywgbWFwaW5mb19wMisrKQotLQl7 Ci0tCSAgaWYgKG1hcGluZm9fcDItPnZhZGRyICE9IG1hcGluZm9fcC0+dmFkZHIKLS0JICAgICAg JiYgbWFwaW5mb19wMi0+aW5vID09IG1hcGluZm9fcC0+aW5vCi0tCSAgICAgICYmIG1hcGluZm9f cDItPmRldiA9PSBtYXBpbmZvX3AtPmRldikKLS0JICAgIHsKLS0JICAgICAgbWFwLmluZm8udmFk ZHIgPSBtYXBpbmZvX3AyLT52YWRkcjsKLS0JICAgICAgZXJyID0KLS0JCWRldmN0bCAoY3RsX2Zk LCBEQ01EX1BST0NfTUFQREVCVUcsICZtYXAsIHNpemVvZiAobWFwKSwgMCk7Ci0tCSAgICAgIGlm IChlcnIgIT0gRU9LKQotLQkJY29udGludWU7Ci0tCi0tCSAgICAgIGlmIChzdHJjbXAgKG1hcC5p bmZvLnBhdGgsIHByaW50bWUubmFtZSkpCi0tCQljb250aW51ZTsKLS0KLS0JICAgICAgLyogTG93 ZXIgZGVidWdfdmFkZHIgaXMgYWx3YXlzIHRleHQsIGlmIG5lY2Vzc2FyeSwgc3dhcC4gICovCi0t CSAgICAgIGlmICgoaW50KSBtYXAuaW5mby52YWRkciA8IChpbnQpIHByaW50bWUudGV4dC5kZWJ1 Z192YWRkcikKLS0JCXsKLS0JCSAgbWVtY3B5ICgmKHByaW50bWUuZGF0YSksICYocHJpbnRtZS50 ZXh0KSwKLS0JCQkgIHNpemVvZiAocHJpbnRtZS5kYXRhKSk7Ci0tCQkgIHByaW50bWUudGV4dC5h ZGRyID0gbWFwaW5mb19wMi0+dmFkZHI7Ci0tCQkgIHByaW50bWUudGV4dC5zaXplID0gbWFwaW5m b19wMi0+c2l6ZTsKLS0JCSAgcHJpbnRtZS50ZXh0LmZsYWdzID0gbWFwaW5mb19wMi0+ZmxhZ3M7 Ci0tCQkgIHByaW50bWUudGV4dC5vZmZzZXQgPSBtYXBpbmZvX3AyLT5vZmZzZXQ7Ci0tCQkgIHBy aW50bWUudGV4dC5kZWJ1Z192YWRkciA9IG1hcC5pbmZvLnZhZGRyOwotLQkJfQotLQkgICAgICBl bHNlCi0tCQl7Ci0tCQkgIHByaW50bWUuZGF0YS5hZGRyID0gbWFwaW5mb19wMi0+dmFkZHI7Ci0t CQkgIHByaW50bWUuZGF0YS5zaXplID0gbWFwaW5mb19wMi0+c2l6ZTsKLS0JCSAgcHJpbnRtZS5k YXRhLmZsYWdzID0gbWFwaW5mb19wMi0+ZmxhZ3M7Ci0tCQkgIHByaW50bWUuZGF0YS5vZmZzZXQg PSBtYXBpbmZvX3AyLT5vZmZzZXQ7Ci0tCQkgIHByaW50bWUuZGF0YS5kZWJ1Z192YWRkciA9IG1h cC5pbmZvLnZhZGRyOwotLQkJfQotLQkgICAgICBtYXBpbmZvX3AyLT5pbm8gPSAwOwotLQkgICAg fQotLQl9Ci0tICAgICAgbWFwaW5mb19wLT5pbm8gPSAwOwotLQotLSAgICAgIGdkYl9wcmludGYg KCIlc1xuIiwgcHJpbnRtZS5uYW1lKTsKLS0gICAgICBnZGJfcHJpbnRmICgiXHR0ZXh0PSUwOHgg Ynl0ZXMgQCAweCUwOHhcbiIsIHByaW50bWUudGV4dC5zaXplLAotLQkJICBwcmludG1lLnRleHQu YWRkcik7Ci0tICAgICAgZ2RiX3ByaW50ZiAoIlx0XHRmbGFncz0lMDh4XG4iLCBwcmludG1lLnRl eHQuZmxhZ3MpOwotLSAgICAgIGdkYl9wcmludGYgKCJcdFx0ZGVidWc9JTA4eFxuIiwgcHJpbnRt ZS50ZXh0LmRlYnVnX3ZhZGRyKTsKLS0gICAgICBnZGJfcHJpbnRmICgiXHRcdG9mZnNldD0lc1xu IiwgcGhleCAocHJpbnRtZS50ZXh0Lm9mZnNldCwgOCkpOwotLSAgICAgIGlmIChwcmludG1lLmRh dGEuc2l6ZSkKLS0JewotLQkgIGdkYl9wcmludGYgKCJcdGRhdGE9JTA4eCBieXRlcyBAIDB4JTA4 eFxuIiwgcHJpbnRtZS5kYXRhLnNpemUsCi0tCQkgICAgICBwcmludG1lLmRhdGEuYWRkcik7Ci0t CSAgZ2RiX3ByaW50ZiAoIlx0XHRmbGFncz0lMDh4XG4iLCBwcmludG1lLmRhdGEuZmxhZ3MpOwot LQkgIGdkYl9wcmludGYgKCJcdFx0ZGVidWc9JTA4eFxuIiwgcHJpbnRtZS5kYXRhLmRlYnVnX3Zh ZGRyKTsKLS0JICBnZGJfcHJpbnRmICgiXHRcdG9mZnNldD0lc1xuIiwgcGhleCAocHJpbnRtZS5k YXRhLm9mZnNldCwgOCkpOwotLQl9Ci0tICAgICAgZ2RiX3ByaW50ZiAoIlx0ZGV2PTB4JXhcbiIs IHByaW50bWUuZGV2KTsKLS0gICAgICBnZGJfcHJpbnRmICgiXHRpbm89MHgleFxuIiwgKHVuc2ln bmVkIGludCkgcHJpbnRtZS5pbm8pOwotLSAgICB9Ci0tICB4ZnJlZSAobWFwaW5mb3MpOwotLSAg cmV0dXJuOwotLX0KLS0KLS0vKiBQcmludCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB3 ZSdyZSBhY2Nlc3NpbmcuICAqLwotLXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6ZmlsZXNfaW5m byAoKQotLXsKLS0gIHN0cnVjdCBpbmZlcmlvciAqaW5mID0gY3VycmVudF9pbmZlcmlvciAoKTsK LS0KLS0gIGdkYl9wcmludGYgKCJcdFVzaW5nIHRoZSBydW5uaW5nIGltYWdlIG9mICVzICVzIHZp YSAlcy5cbiIsCi0tCSAgICAgIGluZi0+YXR0YWNoX2ZsYWcgPyAiYXR0YWNoZWQiIDogImNoaWxk IiwKLS0JICAgICAgdGFyZ2V0X3BpZF90b19zdHIgKHB0aWRfdCAoaW5mLT5waWQpKS5jX3N0ciAo KSwKLS0JICAgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogImxvY2FsIG5vZGUiKTsK LS19Ci0tCi0tLyogVGFyZ2V0IHRvX3BpZF90b19leGVjX2ZpbGUgaW1wbGVtZW50YXRpb24uICAq LwotLQotLWNvbnN0IGNoYXIgKgotLW50b19wcm9jZnNfdGFyZ2V0OjpwaWRfdG9fZXhlY19maWxl IChjb25zdCBpbnQgcGlkKQotLXsKLS0gIGludCBwcm9jX2ZkOwotLSAgc3RhdGljIGNoYXIgcHJv Y19wYXRoW1BBVEhfTUFYXTsKLS0gIHNzaXplX3QgcmQ7Ci0tCi0tICAvKiBSZWFkIGV4ZSBmaWxl IG5hbWUuICAqLwotLSAgc25wcmludGYgKHByb2NfcGF0aCwgc2l6ZW9mIChwcm9jX3BhdGgpLCAi JXMvcHJvYy8lZC9leGVmaWxlIiwKLS0JICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6 ICIiLCBwaWQpOwotLSAgcHJvY19mZCA9IG9wZW4gKHByb2NfcGF0aCwgT19SRE9OTFkpOwotLSAg aWYgKHByb2NfZmQgPT0gLTEpCi0tICAgIHJldHVybiBOVUxMOwotLQotLSAgcmQgPSByZWFkIChw cm9jX2ZkLCBwcm9jX3BhdGgsIHNpemVvZiAocHJvY19wYXRoKSAtIDEpOwotLSAgY2xvc2UgKHBy b2NfZmQpOwotLSAgaWYgKHJkIDw9IDApCi0tICAgIHsKLS0gICAgICBwcm9jX3BhdGhbMF0gPSAn XDAnOwotLSAgICAgIHJldHVybiBOVUxMOwotLSAgICB9Ci0tICBwcm9jX3BhdGhbcmRdID0gJ1ww JzsKLS0gIHJldHVybiBwcm9jX3BhdGg7Ci0tfQotLQotLS8qIEF0dGFjaCB0byBwcm9jZXNzIFBJ RCwgdGhlbiBpbml0aWFsaXplIGZvciBkZWJ1Z2dpbmcgaXQuICAqLwotLXZvaWQKLS1udG9fcHJv Y2ZzX3RhcmdldDo6YXR0YWNoIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCi0tewot LSAgaW50IHBpZDsKLS0gIHN0cnVjdCBpbmZlcmlvciAqaW5mOwotLQotLSAgcGlkID0gcGFyc2Vf cGlkX3RvX2F0dGFjaCAoYXJncyk7Ci0tCi0tICBpZiAocGlkID09IGdldHBpZCAoKSkKLS0gICAg ZXJyb3IgKF8oIkF0dGFjaGluZyBHREIgdG8gaXRzZWxmIGlzIG5vdCBhIGdvb2QgaWRlYS4uLiIp KTsKLS0KLS0gIHRhcmdldF9hbm5vdW5jZV9hdHRhY2ggKGZyb21fdHR5LCBwaWQpOwotLQotLSAg cHRpZF90IHB0aWQgPSBkb19hdHRhY2ggKHB0aWRfdCAocGlkKSk7Ci0tICBpbmYgPSBjdXJyZW50 X2luZmVyaW9yICgpOwotLSAgaW5mZXJpb3JfYXBwZWFyZWQgKGluZiwgcGlkKTsKLS0gIGluZi0+ YXR0YWNoX2ZsYWcgPSB0cnVlOwotLQotLSAgaWYgKCFpbmYtPnRhcmdldF9pc19wdXNoZWQgKG9w cykpCi0tICAgIGluZi0+cHVzaF90YXJnZXQgKG9wcyk7Ci0tCi0tICB1cGRhdGVfdGhyZWFkX2xp c3QgKCk7Ci0tCi0tICBzd2l0Y2hfdG9fdGhyZWFkICh0aGlzLT5maW5kX3RocmVhZCAocHRpZCkp OwotLX0KLS0KLS12b2lkCi0tbnRvX3Byb2Nmc190YXJnZXQ6OnBvc3RfYXR0YWNoIChwaWRfdCBw aWQpCi0tewotLSAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+ZXhlY19iZmQgKCkpCi0tICAg IHNvbGliX2NyZWF0ZV9pbmZlcmlvcl9ob29rICgwKTsKLS19Ci0tCi0tc3RhdGljIHB0aWRfdAot LWRvX2F0dGFjaCAocHRpZF90IHB0aWQpCi0tewotLSAgcHJvY2ZzX3N0YXR1cyBzdGF0dXM7Ci0t ICBzdHJ1Y3Qgc2lnZXZlbnQgZXZlbnQ7Ci0tICBjaGFyIHBhdGhbUEFUSF9NQVhdOwotLQotLSAg c25wcmludGYgKHBhdGgsIFBBVEhfTUFYIC0gMSwgIiVzJXMvJWQvYXMiLAotLQkgICAgKG5vZGVz dHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogIiIsICIvcHJvYyIsIHB0aWQucGlkICgpKTsKLS0gIGN0 bF9mZCA9IG9wZW4gKHBhdGgsIE9fUkRXUik7Ci0tICBpZiAoY3RsX2ZkID09IC0xKQotLSAgICBl cnJvciAoXygiQ291bGRuJ3Qgb3BlbiBwcm9jIGZpbGUgJXMsIGVycm9yICVkICglcykiKSwgcGF0 aCwgZXJybm8sCi0tCSAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7Ci0tICBpZiAoZGV2Y3RsIChj dGxfZmQsIERDTURfUFJPQ19TVE9QLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApICE9IEVP SykKLS0gICAgZXJyb3IgKF8oIkNvdWxkbid0IHN0b3AgcHJvY2VzcyIpKTsKLS0KLS0gIC8qIERl ZmluZSBhIHNpZ2V2ZW50IGZvciBwcm9jZXNzIHN0b3BwZWQgbm90aWZpY2F0aW9uLiAgKi8KLS0g IGV2ZW50LnNpZ2V2X25vdGlmeSA9IFNJR0VWX1NJR05BTF9USFJFQUQ7Ci0tICBldmVudC5zaWdl dl9zaWdubyA9IFNJR1VTUjE7Ci0tICBldmVudC5zaWdldl9jb2RlID0gMDsKLS0gIGV2ZW50LnNp Z2V2X3ZhbHVlLnNpdmFsX3B0ciA9IE5VTEw7Ci0tICBldmVudC5zaWdldl9wcmlvcml0eSA9IC0x OwotLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19FVkVOVCwgJmV2ZW50LCBzaXplb2YgKGV2 ZW50KSwgMCk7Ci0tCi0tICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVEFUVVMsICZz dGF0dXMsIHNpemVvZiAoc3RhdHVzKSwgMCkgPT0gRU9LCi0tICAgICAgJiYgc3RhdHVzLmZsYWdz ICYgX0RFQlVHX0ZMQUdfU1RPUFBFRCkKLS0gICAgU2lnbmFsS2lsbCAobnRvX25vZGUgKCksIHB0 aWQucGlkICgpLCAwLCBTSUdDT05ULCAwLCAwKTsKLS0gIG50b19pbml0X3NvbGliX2Fic29sdXRl X3ByZWZpeCAoKTsKLS0gIHJldHVybiBwdGlkX3QgKHB0aWQucGlkICgpLCAwLCBzdGF0dXMudGlk KTsKLS19Ci0tCi0tLyogQXNrIHRoZSB1c2VyIHdoYXQgdG8gZG8gd2hlbiBhbiBpbnRlcnJ1cHQg aXMgcmVjZWl2ZWQuICAqLwotLXN0YXRpYyB2b2lkCi0taW50ZXJydXB0X3F1ZXJ5ICh2b2lkKQot LXsKLS0gIGlmIChxdWVyeSAoXygiSW50ZXJydXB0ZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHBy b2dyYW0uXG5cCi0tR2l2ZSB1cCAoYW5kIHN0b3AgZGVidWdnaW5nIGl0KT8gIikpKQotLSAgICB7 Ci0tICAgICAgdGFyZ2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlvcl9wdGlkKTsKLS0gICAgICBx dWl0ICgpOwotLSAgICB9Ci0tfQotLQotLS8qIFRoZSB1c2VyIHR5cGVkIF5DIHR3aWNlLiAgKi8K LS1zdGF0aWMgdm9pZAotLW50b19oYW5kbGVfc2lnaW50X3R3aWNlIChpbnQgc2lnbm8pCi0tewot LSAgc2lnbmFsIChzaWdubywgb2Z1bmMpOwotLSAgaW50ZXJydXB0X3F1ZXJ5ICgpOwotLSAgc2ln bmFsIChzaWdubywgbnRvX2hhbmRsZV9zaWdpbnRfdHdpY2UpOwotLX0KLS0KLS1zdGF0aWMgdm9p ZAotLW50b19oYW5kbGVfc2lnaW50IChpbnQgc2lnbm8pCi0tewotLSAgLyogSWYgdGhpcyBkb2Vz bid0IHdvcmssIHRyeSBtb3JlIHNldmVyZSBzdGVwcy4gICovCi0tICBzaWduYWwgKHNpZ25vLCBu dG9faGFuZGxlX3NpZ2ludF90d2ljZSk7Ci0tCi0tICB0YXJnZXRfaW50ZXJydXB0ICgpOwotLX0K LS0KLS1zcHRpZF90Ci0tbnRvX3Byb2Nmc190YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1 Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywKLS0JCQkgdGFyZ2V0X3dhaXRfZmxhZ3Mg b3B0aW9ucykKLS17Ci0tICBzaWdzZXRfdCBzZXQ7Ci0tICBzaWdpbmZvX3QgaW5mbzsKLS0gIHBy b2Nmc19zdGF0dXMgc3RhdHVzOwotLSAgc3RhdGljIGludCBleGl0X3NpZ25vID0gMDsJLyogVG8g dHJhY2sgc2lnbmFscyB0aGF0IGNhdXNlIHRlcm1pbmF0aW9uLiAgKi8KLS0KLS0gIG91cnN0YXR1 cy0+c2V0X3NwdXJpb3VzICgpOwotLQotLSAgaWYgKGluZmVyaW9yX3B0aWQgPT0gbnVsbF9wdGlk KQotLSAgICB7Ci0tICAgICAgb3Vyc3RhdHVzLT5zZXRfc3RvcHBlZCAoR0RCX1NJR05BTF8wKTsK LS0gICAgICBleGl0X3NpZ25vID0gMDsKLS0gICAgICByZXR1cm4gbnVsbF9wdGlkOwotLSAgICB9 Ci0tCi0tICBzaWdlbXB0eXNldCAoJnNldCk7Ci0tICBzaWdhZGRzZXQgKCZzZXQsIFNJR1VTUjEp OwotLQotLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVEFUVVMsICZzdGF0dXMsIHNpemVv ZiAoc3RhdHVzKSwgMCk7Ci0tICB3aGlsZSAoIShzdGF0dXMuZmxhZ3MgJiBfREVCVUdfRkxBR19J U1RPUCkpCi0tICAgIHsKLS0gICAgICBvZnVuYyA9IHNpZ25hbCAoU0lHSU5ULCBudG9faGFuZGxl X3NpZ2ludCk7Ci0tICAgICAgc2lnd2FpdGluZm8gKCZzZXQsICZpbmZvKTsKLS0gICAgICBzaWdu YWwgKFNJR0lOVCwgb2Z1bmMpOwotLSAgICAgIGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfU1RB VFVTLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApOwotLSAgICB9Ci0tCi0tICBudG9faW5m ZXJpb3JfZGF0YSAoTlVMTCktPnN0b3BwZWRfZmxhZ3MgPSBzdGF0dXMuZmxhZ3M7Ci0tICBudG9f aW5mZXJpb3JfZGF0YSAoTlVMTCktPnN0b3BwZWRfcGMgPSBzdGF0dXMuaXA7Ci0tCi0tICBpZiAo c3RhdHVzLmZsYWdzICYgX0RFQlVHX0ZMQUdfU1NURVApCi0tICAgIG91cnN0YXR1cy0+c2V0X3N0 b3BwZWQgKEdEQl9TSUdOQUxfVFJBUCk7Ci0tICAvKiBXYXMgaXQgYSBicmVha3BvaW50PyAgKi8K LS0gIGVsc2UgaWYgKHN0YXR1cy5mbGFncyAmIF9ERUJVR19GTEFHX1RSQUNFKQotLSAgICBvdXJz dGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMX1RSQVApOwotLSAgZWxzZSBpZiAoc3RhdHVz LmZsYWdzICYgX0RFQlVHX0ZMQUdfSVNUT1ApCi0tICAgIHsKLS0gICAgICBzd2l0Y2ggKHN0YXR1 cy53aHkpCi0tCXsKLS0JY2FzZSBfREVCVUdfV0hZX1NJR05BTExFRDoKLS0JICBvdXJzdGF0dXMt PnNldF9zdG9wcGVkIChnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3RhdHVzLmluZm8uc2lfc2lnbm8p KTsKLS0JICBleGl0X3NpZ25vID0gMDsKLS0JICBicmVhazsKLS0JY2FzZSBfREVCVUdfV0hZX0ZB VUxURUQ6Ci0tCSAgaWYgKHN0YXR1cy5pbmZvLnNpX3NpZ25vID09IFNJR1RSQVApCi0tCSAgICB7 Ci0tCSAgICAgIG91cnN0YXR1cy0+c2V0X3N0b3BwZWQgKDApOwotLQkgICAgICBleGl0X3NpZ25v ID0gMDsKLS0JICAgIH0KLS0JICBlbHNlCi0tCSAgICB7Ci0tCSAgICAgIG91cnN0YXR1cy0+c2V0 X3N0b3BwZWQKLS0JCShnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3RhdHVzLmluZm8uc2lfc2lnbm8p KTsKLS0JICAgICAgZXhpdF9zaWdubyA9IG91cnN0YXR1cy0+c2lnICgpOwotLQkgICAgfQotLQkg IGJyZWFrOwotLQotLQljYXNlIF9ERUJVR19XSFlfVEVSTUlOQVRFRDoKLS0JICB7Ci0tCSAgICBp bnQgd2FpdHZhbCA9IDA7Ci0tCi0tCSAgICB3YWl0cGlkIChpbmZlcmlvcl9wdGlkLnBpZCAoKSwg JndhaXR2YWwsIFdOT0hBTkcpOwotLQkgICAgaWYgKGV4aXRfc2lnbm8pCi0tCSAgICAgIHsKLS0J CS8qIEFibm9ybWFsIGRlYXRoLiAgKi8KLS0JCW91cnN0YXR1cy0+c2V0X3NpZ25hbGxlZCAoZXhp dF9zaWdubyk7Ci0tCSAgICAgIH0KLS0JICAgIGVsc2UKLS0JICAgICAgewotLQkJLyogTm9ybWFs IGRlYXRoLiAgKi8KLS0JCW91cnN0YXR1cy0+c2V0X2V4aXRlZCAoV0VYSVRTVEFUVVMgKHdhaXR2 YWwpKTsKLS0JICAgICAgfQotLQkgICAgZXhpdF9zaWdubyA9IDA7Ci0tCSAgICBicmVhazsKLS0J ICB9Ci0tCi0tCWNhc2UgX0RFQlVHX1dIWV9SRVFVRVNURUQ6Ci0tCSAgLyogV2UgYXJlIGFzc3Vt aW5nIGEgcmVxdWVzdGVkIHN0b3AgaXMgZHVlIHRvIGEgU0lHSU5ULiAgKi8KLS0JICBvdXJzdGF0 dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMX0lOVCk7Ci0tCSAgZXhpdF9zaWdubyA9IDA7Ci0t CSAgYnJlYWs7Ci0tCX0KLS0gICAgfQotLQotLSAgcmV0dXJuIHB0aWRfdCAoc3RhdHVzLnBpZCwg MCwgc3RhdHVzLnRpZCk7Ci0tfQotLQotLS8qIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRo ZSBpbmZlcmlvcidzIHJlZ2lzdGVycywgYm90aCB0aGUKLS0gICBnZW5lcmFsIHJlZ2lzdGVyIHNl dCBhbmQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChpZiBzdXBwb3J0ZWQpCi0tICAgYW5kIHVw ZGF0ZSBnZGIncyBpZGVhIG9mIHRoZWlyIGN1cnJlbnQgdmFsdWVzLiAgKi8KLS12b2lkCi0tbnRv X3Byb2Nmc190YXJnZXQ6OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNo ZSwgaW50IHJlZ25vKQotLXsKLS0gIHVuaW9uCi0tICB7Ci0tICAgIHByb2Nmc19ncmVnIGdyZWc7 Ci0tICAgIHByb2Nmc19mcHJlZyBmcHJlZzsKLS0gICAgcHJvY2ZzX2FsdHJlZyBhbHRyZWc7Ci0t ICB9Ci0tICByZWc7Ci0tICBpbnQgcmVnc2l6ZTsKLS0KLS0gIHByb2Nmc19zZXRfdGhyZWFkIChy ZWdjYWNoZS0+cHRpZCAoKSk7Ci0tICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19HRVRH UkVHLCAmcmVnLCBzaXplb2YgKHJlZyksICZyZWdzaXplKSA9PSBFT0spCi0tICAgIG50b19zdXBw bHlfZ3JlZ3NldCAocmVnY2FjaGUsIChjaGFyICopICZyZWcuZ3JlZyk7Ci0tICBpZiAoZGV2Y3Rs IChjdGxfZmQsIERDTURfUFJPQ19HRVRGUFJFRywgJnJlZywgc2l6ZW9mIChyZWcpLCAmcmVnc2l6 ZSkKLS0gICAgICA9PSBFT0spCi0tICAgIG50b19zdXBwbHlfZnByZWdzZXQgKHJlZ2NhY2hlLCAo Y2hhciAqKSAmcmVnLmZwcmVnKTsKLS0gIGlmIChkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9DX0dF VEFMVFJFRywgJnJlZywgc2l6ZW9mIChyZWcpLCAmcmVnc2l6ZSkKLS0gICAgICA9PSBFT0spCi0t ICAgIG50b19zdXBwbHlfYWx0cmVnc2V0IChyZWdjYWNoZSwgKGNoYXIgKikgJnJlZy5hbHRyZWcp OwotLX0KLS0KLS0vKiBIZWxwZXIgZm9yIHByb2Nmc194ZmVyX3BhcnRpYWwgdGhhdCBoYW5kbGVz IG1lbW9yeSB0cmFuc2ZlcnMuCi0tICAgQXJndW1lbnRzIGFyZSBsaWtlIHRhcmdldF94ZmVyX3Bh cnRpYWwuICAqLwotLQotLXN0YXRpYyBlbnVtIHRhcmdldF94ZmVyX3N0YXR1cwotLXByb2Nmc194 ZmVyX21lbW9yeSAoZ2RiX2J5dGUgKnJlYWRidWYsIGNvbnN0IGdkYl9ieXRlICp3cml0ZWJ1ZiwK LS0JCSAgICBVTE9OR0VTVCBtZW1hZGRyLCBVTE9OR0VTVCBsZW4sIFVMT05HRVNUICp4ZmVyZWRf bGVuKQotLXsKLS0gIGludCBuYnl0ZXM7Ci0tCi0tICBpZiAobHNlZWsgKGN0bF9mZCwgKG9mZl90 KSBtZW1hZGRyLCBTRUVLX1NFVCkgIT0gKG9mZl90KSBtZW1hZGRyKQotLSAgICByZXR1cm4gVEFS R0VUX1hGRVJfRV9JTzsKLS0KLS0gIGlmICh3cml0ZWJ1ZiAhPSBOVUxMKQotLSAgICBuYnl0ZXMg PSB3cml0ZSAoY3RsX2ZkLCB3cml0ZWJ1ZiwgbGVuKTsKLS0gIGVsc2UKLS0gICAgbmJ5dGVzID0g cmVhZCAoY3RsX2ZkLCByZWFkYnVmLCBsZW4pOwotLSAgaWYgKG5ieXRlcyA8PSAwKQotLSAgICBy ZXR1cm4gVEFSR0VUX1hGRVJfRV9JTzsKLS0gICp4ZmVyZWRfbGVuID0gbmJ5dGVzOwotLSAgcmV0 dXJuIFRBUkdFVF9YRkVSX09LOwotLX0KLS0KLS0vKiBUYXJnZXQgdG9feGZlcl9wYXJ0aWFsIGlt cGxlbWVudGF0aW9uLiAgKi8KLS0KLS1lbnVtIHRhcmdldF94ZmVyX3N0YXR1cwotLW50b19wcm9j ZnNfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwgKGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3QsCi0tCQkJ CSBjb25zdCBjaGFyICphbm5leCwgZ2RiX2J5dGUgKnJlYWRidWYsCi0tCQkJCSBjb25zdCBnZGJf Ynl0ZSAqd3JpdGVidWYsIFVMT05HRVNUIG9mZnNldCwKLS0JCQkJIFVMT05HRVNUIGxlbiwgVUxP TkdFU1QgKnhmZXJlZF9sZW4pCi0tewotLSAgc3dpdGNoIChvYmplY3QpCi0tICAgIHsKLS0gICAg Y2FzZSBUQVJHRVRfT0JKRUNUX01FTU9SWToKLS0gICAgICByZXR1cm4gcHJvY2ZzX3hmZXJfbWVt b3J5IChyZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4pOwotLSAgICBj YXNlIFRBUkdFVF9PQkpFQ1RfQVVYVjoKLS0gICAgICBpZiAocmVhZGJ1ZiAhPSBOVUxMKQotLQl7 Ci0tCSAgaW50IGVycjsKLS0JICBDT1JFX0FERFIgaW5pdGlhbF9zdGFjazsKLS0JICBkZWJ1Z19w cm9jZXNzX3QgcHJvY2luZm87Ci0tCSAgLyogRm9yIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNpemUg b2YgYXV4dl90IGlzIDggYnl0ZXMuICAqLwotLQkgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplb2Zf YXV4dl90ID0gc2l6ZW9mIChhdXh2X3QpOwotLQkgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplb2Zf dGVtcGJ1ZiA9IDIwICogc2l6ZW9mX2F1eHZfdDsKLS0JICBpbnQgdGVtcHJlYWQ7Ci0tCSAgZ2Ri X2J5dGUgKmNvbnN0IHRlbXBidWYgPSBhbGxvY2EgKHNpemVvZl90ZW1wYnVmKTsKLS0KLS0JICBp ZiAodGVtcGJ1ZiA9PSBOVUxMKQotLQkgICAgcmV0dXJuIFRBUkdFVF9YRkVSX0VfSU87Ci0tCi0t CSAgZXJyID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19JTkZPLCAmcHJvY2luZm8sCi0tCQkJ c2l6ZW9mIHByb2NpbmZvLCAwKTsKLS0JICBpZiAoZXJyICE9IEVPSykKLS0JICAgIHJldHVybiBU QVJHRVRfWEZFUl9FX0lPOwotLQotLQkgIGluaXRpYWxfc3RhY2sgPSBwcm9jaW5mby5pbml0aWFs X3N0YWNrOwotLQotLQkgIC8qIHByb2NmcyBpcyBhbHdheXMgJ3NlbGYtaG9zdGVkJywgbm8gYnl0 ZS1vcmRlciBtYW5pcHVsYXRpb24uICAqLwotLQkgIHRlbXByZWFkID0gbnRvX3JlYWRfYXV4dl9m cm9tX2luaXRpYWxfc3RhY2sgKGluaXRpYWxfc3RhY2ssIHRlbXBidWYsCi0tCQkJCQkJICAgICAg IHNpemVvZl90ZW1wYnVmLAotLQkJCQkJCSAgICAgICBzaXplb2YgKGF1eHZfdCkpOwotLQkgIHRl bXByZWFkID0gc3RkOjptaW4gKHRlbXByZWFkLCBsZW4pIC0gb2Zmc2V0OwotLQkgIG1lbWNweSAo cmVhZGJ1ZiwgdGVtcGJ1ZiArIG9mZnNldCwgdGVtcHJlYWQpOwotLQkgICp4ZmVyZWRfbGVuID0g dGVtcHJlYWQ7Ci0tCSAgcmV0dXJuIHRlbXByZWFkID8gVEFSR0VUX1hGRVJfT0sgOiBUQVJHRVRf WEZFUl9FT0Y7Ci0tCX0KLS0JLyogRmFsbHRocnUgKi8KLS0gICAgZGVmYXVsdDoKLS0gICAgICBy ZXR1cm4gdGhpcy0+YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4LAotLQkJ CQkJICAgICByZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sCi0tCQkJCQkgICAgIHhmZXJl ZF9sZW4pOwotLSAgICB9Ci0tfQotLQotLS8qIFRha2UgYSBwcm9ncmFtIHByZXZpb3VzbHkgYXR0 YWNoZWQgdG8gYW5kIGRldGFjaGVzIGl0LgotLSAgIFRoZSBwcm9ncmFtIHJlc3VtZXMgZXhlY3V0 aW9uIGFuZCB3aWxsIG5vIGxvbmdlciBzdG9wCi0tICAgb24gc2lnbmFscywgZXRjLiAgV2UnZCBi ZXR0ZXIgbm90IGhhdmUgbGVmdCBhbnkgYnJlYWtwb2ludHMKLS0gICBpbiB0aGUgcHJvZ3JhbSBv ciBpdCdsbCBkaWUgd2hlbiBpdCBoaXRzIG9uZS4gICovCi0tdm9pZAotLW50b19wcm9jZnNfdGFy Z2V0OjpkZXRhY2ggKGluZmVyaW9yICppbmYsIGludCBmcm9tX3R0eSkKLS17Ci0tICB0YXJnZXRf YW5ub3VuY2VfZGV0YWNoICgpOwotLQotLSAgaWYgKHNpZ2duYWwpCi0tICAgIFNpZ25hbEtpbGwg KG50b19ub2RlICgpLCBpbmYtPnBpZCwgMCwgMCwgMCwgMCk7Ci0tCi0tICBjbG9zZSAoY3RsX2Zk KTsKLS0gIGN0bF9mZCA9IC0xOwotLQotLSAgc3dpdGNoX3RvX25vX3RocmVhZCAoKTsKLS0gIGRl dGFjaF9pbmZlcmlvciAoaW5mLT5waWQpOwotLSAgaW5pdF90aHJlYWRfbGlzdCAoKTsKLS0gIGlu Zl9jaGlsZF9tYXliZV91bnB1c2hfdGFyZ2V0IChvcHMpOwotLX0KLS0KLS1zdGF0aWMgaW50Ci0t cHJvY2ZzX2JyZWFrcG9pbnQgKENPUkVfQUREUiBhZGRyLCBpbnQgdHlwZSwgaW50IHNpemUpCi0t ewotLSAgcHJvY2ZzX2JyZWFrIGJyazsKLS0KLS0gIGJyay50eXBlID0gdHlwZTsKLS0gIGJyay5h ZGRyID0gYWRkcjsKLS0gIGJyay5zaXplID0gc2l6ZTsKLS0gIGVycm5vID0gZGV2Y3RsIChjdGxf ZmQsIERDTURfUFJPQ19CUkVBSywgJmJyaywgc2l6ZW9mIChicmspLCAwKTsKLS0gIGlmIChlcnJu byAhPSBFT0spCi0tICAgIHJldHVybiAxOwotLSAgcmV0dXJuIDA7Ci0tfQotLQotLWludAotLW50 b19wcm9jZnNfdGFyZ2V0OjppbnNlcnRfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsCi0tCQkJCSAgICAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0KQotLXsKLS0gIGJw X3RndC0+cGxhY2VkX2FkZHJlc3MgPSBicF90Z3QtPnJlcXN0ZF9hZGRyZXNzOwotLSAgcmV0dXJu IHByb2Nmc19icmVha3BvaW50IChicF90Z3QtPnBsYWNlZF9hZGRyZXNzLCBfREVCVUdfQlJFQUtf RVhFQywgMCk7Ci0tfQotLQotLWludAotLW50b19wcm9jZnNfdGFyZ2V0OjpyZW1vdmVfYnJlYWtw b2ludCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCi0tCQkJCSAgICAgIHN0cnVjdCBicF90YXJn ZXRfaW5mbyAqYnBfdGd0LAotLQkJCQkgICAgICBlbnVtIHJlbW92ZV9icF9yZWFzb24gcmVhc29u KQotLXsKLS0gIHJldHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVz cywgX0RFQlVHX0JSRUFLX0VYRUMsIC0xKTsKLS19Ci0tCi0taW50Ci0tbnRvX3Byb2Nmc190YXJn ZXQ6Omluc2VydF9od19icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLS0JCQkJ CSBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKmJwX3RndCkKLS17Ci0tICBicF90Z3QtPnBsYWNlZF9h ZGRyZXNzID0gYnBfdGd0LT5yZXFzdGRfYWRkcmVzczsKLS0gIHJldHVybiBwcm9jZnNfYnJlYWtw b2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVzcywKLS0JCQkgICAgX0RFQlVHX0JSRUFLX0VYRUMg fCBfREVCVUdfQlJFQUtfSFcsIDApOwotLX0KLS0KLS1pbnQKLS1udG9fcHJvY2ZzX3RhcmdldDo6 cmVtb3ZlX2h3X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotLQkJCQkJIHN0 cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0KQotLXsKLS0gIHJldHVybiBwcm9jZnNfYnJlYWtw b2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVzcywKLS0JCQkgICAgX0RFQlVHX0JSRUFLX0VYRUMg fCBfREVCVUdfQlJFQUtfSFcsIC0xKTsKLS19Ci0tCi0tdm9pZAotLW50b19wcm9jZnNfdGFyZ2V0 OjpyZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSBnZGJfc2lnbmFsIHNpZ25vKQot LXsKLS0gIGludCBzaWduYWxfdG9fcGFzczsKLS0gIHByb2Nmc19zdGF0dXMgc3RhdHVzOwotLSAg c2lnc2V0X3QgKnJ1bl9mYXVsdCA9IChzaWdzZXRfdCAqKSAodm9pZCAqKSAmcnVuLmZhdWx0Owot LQotLSAgaWYgKGluZmVyaW9yX3B0aWQgPT0gbnVsbF9wdGlkKQotLSAgICByZXR1cm47Ci0tCi0t ICBwcm9jZnNfc2V0X3RocmVhZCAocHRpZCA9PSBtaW51c19vbmVfcHRpZCA/IGluZmVyaW9yX3B0 aWQgOgotLQkJICAgICBwdGlkKTsKLS0KLS0gIHJ1bi5mbGFncyA9IF9ERUJVR19SVU5fRkFVTFQg fCBfREVCVUdfUlVOX1RSQUNFOwotLSAgaWYgKHN0ZXApCi0tICAgIHJ1bi5mbGFncyB8PSBfREVC VUdfUlVOX1NURVA7Ci0tCi0tICBzaWdlbXB0eXNldCAocnVuX2ZhdWx0KTsKLS0gIHNpZ2FkZHNl dCAocnVuX2ZhdWx0LCBGTFRCUFQpOwotLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVFRSQUNF KTsKLS0gIHNpZ2FkZHNldCAocnVuX2ZhdWx0LCBGTFRJTEwpOwotLSAgc2lnYWRkc2V0IChydW5f ZmF1bHQsIEZMVFBSSVYpOwotLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVEJPVU5EUyk7Ci0t ICBzaWdhZGRzZXQgKHJ1bl9mYXVsdCwgRkxUSU9WRik7Ci0tICBzaWdhZGRzZXQgKHJ1bl9mYXVs dCwgRkxUSVpESVYpOwotLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVEZQRSk7Ci0tICAvKiBQ ZXRlciBWIHdpbGwgYmUgY2hhbmdpbmcgdGhpcyBhdCBzb21lIHBvaW50LiAgKi8KLS0gIHNpZ2Fk ZHNldCAocnVuX2ZhdWx0LCBGTFRQQUdFKTsKLS0KLS0gIHJ1bi5mbGFncyB8PSBfREVCVUdfUlVO X0FSTTsKLS0KLS0gIHNpZ25hbF90b19wYXNzID0gZ2RiX3NpZ25hbF90b19ob3N0IChzaWdubyk7 Ci0tCi0tICBpZiAoc2lnbmFsX3RvX3Bhc3MpCi0tICAgIHsKLS0gICAgICBkZXZjdGwgKGN0bF9m ZCwgRENNRF9QUk9DX1NUQVRVUywgJnN0YXR1cywgc2l6ZW9mIChzdGF0dXMpLCAwKTsKLS0gICAg ICBzaWduYWxfdG9fcGFzcyA9IGdkYl9zaWduYWxfdG9faG9zdCAoc2lnbm8pOwotLSAgICAgIGlm IChzdGF0dXMud2h5ICYgKF9ERUJVR19XSFlfU0lHTkFMTEVEIHwgX0RFQlVHX1dIWV9GQVVMVEVE KSkKLS0JewotLQkgIGlmIChzaWduYWxfdG9fcGFzcyAhPSBzdGF0dXMuaW5mby5zaV9zaWdubykK LS0JICAgIHsKLS0JICAgICAgU2lnbmFsS2lsbCAobnRvX25vZGUgKCksIGluZmVyaW9yX3B0aWQu cGlkICgpLCAwLAotLQkJCSAgc2lnbmFsX3RvX3Bhc3MsIDAsIDApOwotLQkgICAgICBydW4uZmxh Z3MgfD0gX0RFQlVHX1JVTl9DTFJGTFQgfCBfREVCVUdfUlVOX0NMUlNJRzsKLS0JICAgIH0KLS0J ICBlbHNlCQkvKiBMZXQgaXQga2lsbCB0aGUgcHJvZ3JhbSB3aXRob3V0IHRlbGxpbmcgdXMuICAq LwotLQkgICAgc2lnZGVsc2V0ICgmcnVuLnRyYWNlLCBzaWduYWxfdG9fcGFzcyk7Ci0tCX0KLS0g ICAgfQotLSAgZWxzZQotLSAgICBydW4uZmxhZ3MgfD0gX0RFQlVHX1JVTl9DTFJTSUcgfCBfREVC VUdfUlVOX0NMUkZMVDsKLS0KLS0gIGVycm5vID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19S VU4sICZydW4sIHNpemVvZiAocnVuKSwgMCk7Ci0tICBpZiAoZXJybm8gIT0gRU9LKQotLSAgICB7 Ci0tICAgICAgcGVycm9yIChfKCJydW4gZXJyb3IhXG4iKSk7Ci0tICAgICAgcmV0dXJuOwotLSAg ICB9Ci0tfQotLQotLXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6bW91cm5faW5mZXJpb3IgKCkK LS17Ci0tICBpZiAoaW5mZXJpb3JfcHRpZCAhPSBudWxsX3B0aWQpCi0tICAgIHsKLS0gICAgICBT aWduYWxLaWxsIChudG9fbm9kZSAoKSwgaW5mZXJpb3JfcHRpZC5waWQgKCksIDAsIFNJR0tJTEws IDAsIDApOwotLSAgICAgIGNsb3NlIChjdGxfZmQpOwotLSAgICB9Ci0tICBzd2l0Y2hfdG9fbm9f dGhyZWFkICgpOwotLSAgaW5pdF90aHJlYWRfbGlzdCAoKTsKLS0gIGluZl9jaGlsZF9tb3Vybl9p bmZlcmlvciAob3BzKTsKLS19Ci0tCi0tLyogVGhpcyBmdW5jdGlvbiBicmVha3MgdXAgYW4gYXJn dW1lbnQgc3RyaW5nIGludG8gYW4gYXJndW1lbnQKLS0gICB2ZWN0b3Igc3VpdGFibGUgZm9yIHBh c3NpbmcgdG8gZXhlY3ZwKCkuCi0tICAgRS5nLiwgb24gInJ1biBhIGIgYyBkIiB0aGlzIHJvdXRp bmUgd291bGQgZ2V0IGFzIGlucHV0Ci0tICAgdGhlIHN0cmluZyAiYSBiIGMgZCIsIGFuZCBhcyBv dXRwdXQgaXQgd291bGQgZmlsbCBpbiBhcmd2IHdpdGgKLS0gICB0aGUgZm91ciBhcmd1bWVudHMg ImEiLCAiYiIsICJjIiwgImQiLiAgVGhlIG9ubHkgYWRkaXRpb25hbAotLSAgIGZ1bmN0aW9uYWxp dHkgaXMgc2ltcGxlIHF1b3RpbmcuICBUaGUgZ2RiIGNvbW1hbmQ6Ci0tCXJ1biBhICJiIGMgZCIg ZgotLSAgIHdpbGwgZmlsbCBpbiBhcmd2IHdpdGggdGhlIHRocmVlIGFyZ3MgImEiLCAiYiBjIGQi LCAiZSIuICAqLwotLXN0YXRpYyB2b2lkCi0tYnJlYWt1cF9hcmdzIChjaGFyICpzY3JhdGNoLCBj aGFyICoqYXJndikKLS17Ci0tICBjaGFyICpwcCwgKmNwID0gc2NyYXRjaDsKLS0gIGNoYXIgcXVv dGluZyA9IDA7Ci0tCi0tICBmb3IgKDs7KQotLSAgICB7Ci0tICAgICAgLyogU2NhbiBwYXN0IGxl YWRpbmcgc2VwYXJhdG9ycy4gICovCi0tICAgICAgcXVvdGluZyA9IDA7Ci0tICAgICAgd2hpbGUg KCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcgfHwgKmNwID09ICdcbicpCi0tCWNwKys7Ci0tCi0t ICAgICAgLyogQnJlYWsgaWYgYXQgZW5kIG9mIHN0cmluZy4gICovCi0tICAgICAgaWYgKCpjcCA9 PSAnXDAnKQotLQlicmVhazsKLS0KLS0gICAgICAvKiBUYWtlIGFuIGFyZy4gICovCi0tICAgICAg aWYgKCpjcCA9PSAnIicpCi0tCXsKLS0JICBjcCsrOwotLQkgIHF1b3RpbmcgPSBzdHJjaHIgKGNw LCAnIicpID8gMSA6IDA7Ci0tCX0KLS0KLS0gICAgICAqYXJndisrID0gY3A7Ci0tCi0tICAgICAg LyogU2NhbiBmb3IgbmV4dCBhcmcgc2VwYXJhdG9yLiAgKi8KLS0gICAgICBwcCA9IGNwOwotLSAg ICAgIGlmIChxdW90aW5nKQotLQljcCA9IHN0cmNociAocHAsICciJyk7Ci0tICAgICAgaWYgKChj cCA9PSBOVUxMKSB8fCAoIXF1b3RpbmcpKQotLQljcCA9IHN0cmNociAocHAsICcgJyk7Ci0tICAg ICAgaWYgKGNwID09IE5VTEwpCi0tCWNwID0gc3RyY2hyIChwcCwgJ1x0Jyk7Ci0tICAgICAgaWYg KGNwID09IE5VTEwpCi0tCWNwID0gc3RyY2hyIChwcCwgJ1xuJyk7Ci0tCi0tICAgICAgLyogTm8g c2VwYXJhdG9ycyA9PiBlbmQgb2Ygc3RyaW5nID0+IGJyZWFrLiAgKi8KLS0gICAgICBpZiAoY3Ag PT0gTlVMTCkKLS0JewotLQkgIHBwID0gY3A7Ci0tCSAgYnJlYWs7Ci0tCX0KLS0KLS0gICAgICAv KiBSZXBsYWNlIHRoZSBzZXBhcmF0b3Igd2l0aCBhIHRlcm1pbmF0b3IuICAqLwotLSAgICAgICpj cCsrID0gJ1wwJzsKLS0gICAgfQotLQotLSAgLyogRXhlY3YgcmVxdWlyZXMgYSBudWxsLXRlcm1p bmF0ZWQgYXJnIHZlY3Rvci4gICovCi0tICAqYXJndiA9IE5VTEw7Ci0tfQotLQotLXZvaWQKLS1u dG9fcHJvY2ZzX3RhcmdldDo6Y3JlYXRlX2luZmVyaW9yIChjb25zdCBjaGFyICpleGVjX2ZpbGUs Ci0tCQkJCSAgICBjb25zdCBzdGQ6OnN0cmluZyAmYWxsYXJncywKLS0JCQkJICAgIGNoYXIgKipl bnYsIGludCBmcm9tX3R0eSkKLS17Ci0tICBzdHJ1Y3QgaW5oZXJpdGFuY2UgaW5oZXJpdDsKLS0g IHBpZF90IHBpZDsKLS0gIGludCBmbGFncywgZXJybjsKLS0gIGNoYXIgKiphcmd2LCAqYXJnczsK LS0gIGNvbnN0IGNoYXIgKmluID0gIiIsICpvdXQgPSAiIiwgKmVyciA9ICIiOwotLSAgaW50IGZk LCBmZHNbM107Ci0tICBzaWdzZXRfdCBzZXQ7Ci0tICBzdHJ1Y3QgaW5mZXJpb3IgKmluZjsKLS0K LS0gIGFyZ3YgPSB4bWFsbG9jICgoYWxsYXJncy5zaXplICgpIC8gKHVuc2lnbmVkKSAyICsgMikg KgotLQkJICBzaXplb2YgKCphcmd2KSk7Ci0tICBhcmd2WzBdID0gY29uc3RfY2FzdDxjaGFyICo+ IChnZXRfZXhlY19maWxlICgxKSk7Ci0tICBpZiAoIWFyZ3ZbMF0pCi0tICAgIHsKLS0gICAgICBp ZiAoZXhlY19maWxlKQotLQlhcmd2WzBdID0gZXhlY19maWxlOwotLSAgICAgIGVsc2UKLS0JcmV0 dXJuOwotLSAgICB9Ci0tCi0tICBhcmdzID0geHN0cmR1cCAoYWxsYXJncy5jX3N0ciAoKSk7Ci0t ICBicmVha3VwX2FyZ3MgKGFyZ3MsIChleGVjX2ZpbGUgIT0gTlVMTCkgPyAmYXJndlsxXSA6ICZh cmd2WzBdKTsKLS0KLS0gIGFyZ3YgPSBudG9fcGFyc2VfcmVkaXJlY3Rpb24gKGFyZ3YsICZpbiwg Jm91dCwgJmVycik7Ci0tCi0tICBmZHNbMF0gPSBTVERJTl9GSUxFTk87Ci0tICBmZHNbMV0gPSBT VERPVVRfRklMRU5POwotLSAgZmRzWzJdID0gU1RERVJSX0ZJTEVOTzsKLS0KLS0gIC8qIElmIHRo ZSB1c2VyIHNwZWNpZmllZCBJL08gdmlhIGdkYidzIC0tdHR5PSBhcmcsIHVzZSBpdCwgYnV0IG9u bHkKLS0gICAgIGlmIHRoZSBpL28gaXMgbm90IGFsc28gYmVpbmcgc3BlY2lmaWVkIHZpYSByZWRp cmVjdGlvbi4gICovCi0tICBjb25zdCBjaGFyICppbmZlcmlvcl90dHkgPSBjdXJyZW50X2luZmVy aW9yICgpLT50dHkgKCk7Ci0tICBpZiAoaW5mZXJpb3JfdHR5ICE9IG51bGxwdHIpCi0tICAgIHsK LS0gICAgICBpZiAoIWluWzBdKQotLQlpbiA9IGluZmVyaW9yX3R0eTsKLS0gICAgICBpZiAoIW91 dFswXSkKLS0Jb3V0ID0gaW5mZXJpb3JfdHR5OwotLSAgICAgIGlmICghZXJyWzBdKQotLQllcnIg PSBpbmZlcmlvcl90dHk7Ci0tICAgIH0KLS0KLS0gIGlmIChpblswXSkKLS0gICAgewotLSAgICAg IGZkID0gb3BlbiAoaW4sIE9fUkRPTkxZKTsKLS0gICAgICBpZiAoZmQgPT0gLTEpCi0tCXBlcnJv ciAoaW4pOwotLSAgICAgIGVsc2UKLS0JZmRzWzBdID0gZmQ7Ci0tICAgIH0KLS0gIGlmIChvdXRb MF0pCi0tICAgIHsKLS0gICAgICBmZCA9IG9wZW4gKG91dCwgT19XUk9OTFkpOwotLSAgICAgIGlm IChmZCA9PSAtMSkKLS0JcGVycm9yIChvdXQpOwotLSAgICAgIGVsc2UKLS0JZmRzWzFdID0gZmQ7 Ci0tICAgIH0KLS0gIGlmIChlcnJbMF0pCi0tICAgIHsKLS0gICAgICBmZCA9IG9wZW4gKGVyciwg T19XUk9OTFkpOwotLSAgICAgIGlmIChmZCA9PSAtMSkKLS0JcGVycm9yIChlcnIpOwotLSAgICAg IGVsc2UKLS0JZmRzWzJdID0gZmQ7Ci0tICAgIH0KLS0KLS0gIC8qIENsZWFyIGFueSBwZW5kaW5n IFNJR1VTUjEncyBidXQga2VlcCB0aGUgYmVoYXZpb3IgdGhlIHNhbWUuICAqLwotLSAgc2lnbmFs IChTSUdVU1IxLCBzaWduYWwgKFNJR1VTUjEsIFNJR19JR04pKTsKLS0KLS0gIHNpZ2VtcHR5c2V0 ICgmc2V0KTsKLS0gIHNpZ2FkZHNldCAoJnNldCwgU0lHVVNSMSk7Ci0tICBzaWdwcm9jbWFzayAo U0lHX1VOQkxPQ0ssICZzZXQsIE5VTEwpOwotLQotLSAgbWVtc2V0ICgmaW5oZXJpdCwgMCwgc2l6 ZW9mIChpbmhlcml0KSk7Ci0tCi0tICBpZiAoTkRfTk9ERV9DTVAgKG50b19wcm9jZnNfbm9kZSwg TkRfTE9DQUxfTk9ERSkgIT0gMCkKLS0gICAgewotLSAgICAgIGluaGVyaXQubmQgPSBudG9fbm9k ZSAoKTsKLS0gICAgICBpbmhlcml0LmZsYWdzIHw9IFNQQVdOX1NFVE5EOwotLSAgICAgIGluaGVy aXQuZmxhZ3MgJj0gflNQQVdOX0VYRUM7Ci0tICAgIH0KLS0gIGluaGVyaXQuZmxhZ3MgfD0gU1BB V05fU0VUR1JPVVAgfCBTUEFXTl9IT0xEOwotLSAgaW5oZXJpdC5wZ3JvdXAgPSBTUEFXTl9ORVdQ R1JPVVA7Ci0tICBwaWQgPSBzcGF3bnAgKGFyZ3ZbMF0sIDMsIGZkcywgJmluaGVyaXQsIGFyZ3Ys Ci0tCQlORF9OT0RFX0NNUCAobnRvX3Byb2Nmc19ub2RlLCBORF9MT0NBTF9OT0RFKSA9PSAwID8g ZW52IDogMCk7Ci0tICB4ZnJlZSAoYXJncyk7Ci0tCi0tICBzaWdwcm9jbWFzayAoU0lHX0JMT0NL LCAmc2V0LCBOVUxMKTsKLS0KLS0gIGlmIChwaWQgPT0gLTEpCi0tICAgIGVycm9yIChfKCJFcnJv ciBzcGF3bmluZyAlczogJWQgKCVzKSIpLCBhcmd2WzBdLCBlcnJubywKLS0JICAgc2FmZV9zdHJl cnJvciAoZXJybm8pKTsKLS0KLS0gIGlmIChmZHNbMF0gIT0gU1RESU5fRklMRU5PKQotLSAgICBj bG9zZSAoZmRzWzBdKTsKLS0gIGlmIChmZHNbMV0gIT0gU1RET1VUX0ZJTEVOTykKLS0gICAgY2xv c2UgKGZkc1sxXSk7Ci0tICBpZiAoZmRzWzJdICE9IFNUREVSUl9GSUxFTk8pCi0tICAgIGNsb3Nl IChmZHNbMl0pOwotLQotLSAgcHRpZF90IHB0aWQgPSBkb19hdHRhY2ggKHB0aWRfdCAocGlkKSk7 Ci0tICB1cGRhdGVfdGhyZWFkX2xpc3QgKCk7Ci0tICBzd2l0Y2hfdG9fdGhyZWFkICh0aGlzLT5m aW5kX3RocmVhZCAocHRpZCkpOwotLQotLSAgaW5mID0gY3VycmVudF9pbmZlcmlvciAoKTsKLS0g IGluZmVyaW9yX2FwcGVhcmVkIChpbmYsIHBpZCk7Ci0tICBpbmYtPmF0dGFjaF9mbGFnID0gZmFs c2U7Ci0tCi0tICBmbGFncyA9IF9ERUJVR19GTEFHX0tMQzsJLyogS2lsbC1vbi1MYXN0LUNsb3Nl IGZsYWcuICAqLwotLSAgZXJybiA9IGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfU0VUX0ZMQUcs ICZmbGFncywgc2l6ZW9mIChmbGFncyksIDApOwotLSAgaWYgKGVycm4gIT0gRU9LKQotLSAgICB7 Ci0tICAgICAgLyogRklYTUU6IGV4cGVjdGVkIHdhcm5pbmc/ICAqLwotLSAgICAgIC8qIHdhcm5p bmcoICJGYWlsZWQgdG8gc2V0IEtpbGwtb24tTGFzdC1DbG9zZSBmbGFnOiBlcnJubyA9ICVkKCVz KVxuIiwKLS0JIGVycm4sIHNhZmVfc3RyZXJyb3IoZXJybikgKTsgKi8KLS0gICAgfQotLSAgaWYg KCFpbmYtPnRhcmdldF9pc19wdXNoZWQgKG9wcykpCi0tICAgIGluZi0+cHVzaF90YXJnZXQgKG9w cyk7Ci0tICB0YXJnZXRfdGVybWluYWw6OmluaXQgKCk7Ci0tCi0tICBpZiAoY3VycmVudF9wcm9n cmFtX3NwYWNlLT5leGVjX2JmZCAoKSAhPSBOVUxMCi0tICAgICAgfHwgKGN1cnJlbnRfcHJvZ3Jh bV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxMCi0tCSAgJiYgY3VycmVudF9wcm9n cmFtX3NwYWNlLT5zeW1maWxlX29iamVjdF9maWxlLT5vYmZkICE9IE5VTEwpKQotLSAgICBzb2xp Yl9jcmVhdGVfaW5mZXJpb3JfaG9vayAoMCk7Ci0tfQotLQotLXZvaWQKLS1udG9fcHJvY2ZzX3Rh cmdldDo6aW50ZXJydXB0ICgpCi0tewotLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVE9Q LCBOVUxMLCAwLCAwKTsKLS19Ci0tCi0tdm9pZAotLW50b19wcm9jZnNfdGFyZ2V0OjpraWxsICgp Ci0tewotLSAgdGFyZ2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlvcl9wdGlkKTsKLS19Ci0tCi0t LyogRmlsbCBidWYgd2l0aCByZWdzZXQgYW5kIHJldHVybiBkZXZjdGwgY21kIHRvIGRvIHRoZSBz ZXR0aW5nLiAgUmV0dXJuCi0tICAgLTEgaWYgd2UgZmFpbCB0byBnZXQgdGhlIHJlZ3NldC4gIFN0 b3JlIHNpemUgb2YgcmVnc2V0IGluIHJlZ3NpemUuICAqLwotLXN0YXRpYyBpbnQKLS1nZXRfcmVn c2V0IChpbnQgcmVnc2V0LCBjaGFyICpidWYsIGludCBidWZzaXplLCBpbnQgKnJlZ3NpemUpCi0t ewotLSAgaW50IGRldl9nZXQsIGRldl9zZXQ7Ci0tICBzd2l0Y2ggKHJlZ3NldCkKLS0gICAgewot LSAgICBjYXNlIE5UT19SRUdfR0VORVJBTDoKLS0gICAgICBkZXZfZ2V0ID0gRENNRF9QUk9DX0dF VEdSRUc7Ci0tICAgICAgZGV2X3NldCA9IERDTURfUFJPQ19TRVRHUkVHOwotLSAgICAgIGJyZWFr OwotLQotLSAgICBjYXNlIE5UT19SRUdfRkxPQVQ6Ci0tICAgICAgZGV2X2dldCA9IERDTURfUFJP Q19HRVRGUFJFRzsKLS0gICAgICBkZXZfc2V0ID0gRENNRF9QUk9DX1NFVEZQUkVHOwotLSAgICAg IGJyZWFrOwotLQotLSAgICBjYXNlIE5UT19SRUdfQUxUOgotLSAgICAgIGRldl9nZXQgPSBEQ01E X1BST0NfR0VUQUxUUkVHOwotLSAgICAgIGRldl9zZXQgPSBEQ01EX1BST0NfU0VUQUxUUkVHOwot LSAgICAgIGJyZWFrOwotLQotLSAgICBjYXNlIE5UT19SRUdfU1lTVEVNOgotLSAgICBkZWZhdWx0 OgotLSAgICAgIHJldHVybiAtMTsKLS0gICAgfQotLSAgaWYgKGRldmN0bCAoY3RsX2ZkLCBkZXZf Z2V0LCBidWYsIGJ1ZnNpemUsIHJlZ3NpemUpICE9IEVPSykKLS0gICAgcmV0dXJuIC0xOwotLQot LSAgcmV0dXJuIGRldl9zZXQ7Ci0tfQotLQotLXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6c3Rv cmVfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pCi0tewot LSAgdW5pb24KLS0gIHsKLS0gICAgcHJvY2ZzX2dyZWcgZ3JlZzsKLS0gICAgcHJvY2ZzX2ZwcmVn IGZwcmVnOwotLSAgICBwcm9jZnNfYWx0cmVnIGFsdHJlZzsKLS0gIH0KLS0gIHJlZzsKLS0gIHVu c2lnbmVkIG9mZjsKLS0gIGludCBsZW4sIHJlZ3NldCwgcmVnc2l6ZSwgZGV2X3NldCwgZXJyOwot LSAgY2hhciAqZGF0YTsKLS0gIHB0aWRfdCBwdGlkID0gcmVnY2FjaGUtPnB0aWQgKCk7Ci0tCi0t ICBpZiAocHRpZCA9PSBudWxsX3B0aWQpCi0tICAgIHJldHVybjsKLS0gIHByb2Nmc19zZXRfdGhy ZWFkIChwdGlkKTsKLS0KLS0gIGlmIChyZWdubyA9PSAtMSkKLS0gICAgewotLSAgICAgIGZvciAo cmVnc2V0ID0gTlRPX1JFR19HRU5FUkFMOyByZWdzZXQgPCBOVE9fUkVHX0VORDsgcmVnc2V0Kysp Ci0tCXsKLS0JICBkZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0LCAoY2hhciAqKSAmcmVnLAot LQkJCQlzaXplb2YgKHJlZyksICZyZWdzaXplKTsKLS0JICBpZiAoZGV2X3NldCA9PSAtMSkKLS0J ICAgIGNvbnRpbnVlOwotLQotLQkgIGlmIChudG9fcmVnc2V0X2ZpbGwgKHJlZ2NhY2hlLCByZWdz ZXQsIChjaGFyICopICZyZWcpID09IC0xKQotLQkgICAgY29udGludWU7Ci0tCi0tCSAgZXJyID0g ZGV2Y3RsIChjdGxfZmQsIGRldl9zZXQsICZyZWcsIHJlZ3NpemUsIDApOwotLQkgIGlmIChlcnIg IT0gRU9LKQotLQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwKLS0JCQkiV2FybmluZyB1bmFi bGUgdG8gd3JpdGUgcmVnc2V0ICVkOiAlc1xuIiwKLS0JCQlyZWdubywgc2FmZV9zdHJlcnJvciAo ZXJyKSk7Ci0tCX0KLS0gICAgfQotLSAgZWxzZQotLSAgICB7Ci0tICAgICAgcmVnc2V0ID0gbnRv X3JlZ3NldF9pZCAocmVnbm8pOwotLSAgICAgIGlmIChyZWdzZXQgPT0gLTEpCi0tCXJldHVybjsK LS0KLS0gICAgICBkZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0LCAoY2hhciAqKSAmcmVnLCBz aXplb2YgKHJlZyksICZyZWdzaXplKTsKLS0gICAgICBpZiAoZGV2X3NldCA9PSAtMSkKLS0JcmV0 dXJuOwotLQotLSAgICAgIGxlbiA9IG50b19yZWdpc3Rlcl9hcmVhIChyZWdjYWNoZS0+YXJjaCAo KSwKLS0JCQkgICAgICAgcmVnbm8sIHJlZ3NldCwgJm9mZik7Ci0tCi0tICAgICAgaWYgKGxlbiA8 IDEpCi0tCXJldHVybjsKLS0KLS0gICAgICByZWdjYWNoZS0+cmF3X2NvbGxlY3QgKHJlZ25vLCAo Y2hhciAqKSAmcmVnICsgb2ZmKTsKLS0KLS0gICAgICBlcnIgPSBkZXZjdGwgKGN0bF9mZCwgZGV2 X3NldCwgJnJlZywgcmVnc2l6ZSwgMCk7Ci0tICAgICAgaWYgKGVyciAhPSBFT0spCi0tCWdkYl9w cmludGYgKGdkYl9zdGRlcnIsCi0tCQkgICAgIldhcm5pbmcgdW5hYmxlIHRvIHdyaXRlIHJlZ3Nl dCAlZDogJXNcbiIsIHJlZ25vLAotLQkJICAgIHNhZmVfc3RyZXJyb3IgKGVycikpOwotLSAgICB9 Ci0tfQotLQotLS8qIFNldCBsaXN0IG9mIHNpZ25hbHMgdG8gYmUgaGFuZGxlZCBpbiB0aGUgdGFy Z2V0LiAgKi8KLS0KLS12b2lkCi0tbnRvX3Byb2Nmc190YXJnZXQ6OnBhc3Nfc2lnbmFscwotLSAg KGdkYjo6YXJyYXlfdmlldzxjb25zdCB1bnNpZ25lZCBjaGFyPiBwYXNzX3NpZ25hbHMpCi0tewot LSAgaW50IHNpZ25vOwotLQotLSAgc2lnZmlsbHNldCAoJnJ1bi50cmFjZSk7Ci0tCi0tICBmb3Ig KHNpZ25vID0gMTsgc2lnbm8gPCBOU0lHOyBzaWdubysrKQotLSAgICB7Ci0tICAgICAgaW50IHRh cmdldF9zaWdubyA9IGdkYl9zaWduYWxfZnJvbV9ob3N0IChzaWdubyk7Ci0tICAgICAgaWYgKHRh cmdldF9zaWdubyA8IHBhc3Nfc2lnbmFscy5zaXplICgpICYmIHBhc3Nfc2lnbmFsc1t0YXJnZXRf c2lnbm9dKQotLQlzaWdkZWxzZXQgKCZydW4udHJhY2UsIHNpZ25vKTsKLS0gICAgfQotLX0KLS0K LS1zdGQ6OnN0cmluZwotLW50b19wcm9jZnNfdGFyZ2V0OjpwaWRfdG9fc3RyIChwdGlkX3QgcHRp ZCkKLS17Ci0tICBpbnQgcGlkLCB0aWQ7Ci0tICBzdHJ1Y3QgdGlkaW5mbyAqdGlwOwotLQotLSAg cGlkID0gcHRpZC5waWQgKCk7Ci0tICB0aWQgPSBwdGlkLnRpZCAoKTsKLS0KLS0jaWYgMAkJCQkv KiBOWUkgKi8KLS0gIHRpcCA9IHByb2Nmc190aHJlYWRfaW5mbyAocGlkLCB0aWQpOwotLSAgaWYg KHRpcCAhPSBOVUxMKQotLSAgICBzbnByaW50ZiAoJmJ1ZltuXSwgMTAyMywgIiAoc3RhdGUgPSAw eCUwMngpIiwgdGlwLT5zdGF0ZSk7Ci0tI2VuZGlmCi0tCi0tICByZXR1cm4gc3RyaW5nX3ByaW50 ZiAoInByb2Nlc3MgJWQiLCBwaWQpOwotLX0KLS0KLS0vKiB0b19jYW5fcnVuIGltcGxlbWVudGF0 aW9uIGZvciAidGFyZ2V0IHByb2NmcyIuICBOb3RlIHRoaXMgcmVhbGx5Ci0tICBtZWFucyAiY2Fu IHRoaXMgdGFyZ2V0IGJlIHRoZSBkZWZhdWx0IHJ1biB0YXJnZXQiLCB3aGljaCB0aGVyZSBjYW4K LS0gIGJlIG9ubHkgb25lLCBhbmQgd2UgbWFrZSBpdCBiZSAidGFyZ2V0IG5hdGl2ZSIgbGlrZSBv dGhlciBwb3J0cy4KLS0gICJ0YXJnZXQgcHJvY2ZzIDxub2RlPiIgd291bGRuJ3QgbWFrZSBzZW5z ZSBhcyBkZWZhdWx0IHJ1biB0YXJnZXQsIGFzCi0tICBpdCBuZWVkcyA8bm9kZT4uICAqLwotLQot LWludAotLW50b19wcm9jZnNfdGFyZ2V0OjpjYW5fcnVuICgpCi0tewotLSAgcmV0dXJuIDA7Ci0t fQotLQotLS8qICJ0YXJnZXQgcHJvY2ZzIi4gICovCi0tc3RhdGljIG50b19wcm9jZnNfdGFyZ2V0 X3Byb2NmcyBudG9fcHJvY2ZzX29wczsKLS0KLS0vKiAidGFyZ2V0IG5hdGl2ZSIuICAqLwotLXN0 YXRpYyBudG9fcHJvY2ZzX3RhcmdldF9uYXRpdmUgbnRvX25hdGl2ZV9vcHM7Ci0tCi0tLyogQ3Jl YXRlIHRoZSAibmF0aXZlIiBhbmQgInByb2NmcyIgdGFyZ2V0cy4gICovCi0tCi0tc3RhdGljIHZv aWQKLS1pbml0X3Byb2Nmc190YXJnZXRzICh2b2lkKQotLXsKLS0gIC8qIFJlZ2lzdGVyICJ0YXJn ZXQgbmF0aXZlIi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgcnVuIHRhcmdldC4gICovCi0tICBhZGRf dGFyZ2V0IChudG9fbmF0aXZlX3RhcmdldF9pbmZvLCBpbmZfY2hpbGRfb3Blbl90YXJnZXQpOwot LSAgc2V0X25hdGl2ZV90YXJnZXQgKCZudG9fbmF0aXZlX29wcyk7Ci0tCi0tICAvKiBSZWdpc3Rl ciAidGFyZ2V0IHByb2NmcyA8bm9kZT4iLiAgKi8KLS0gIGFkZF90YXJnZXQgKG50b19wcm9jZnNf dGFyZ2V0X2luZm8sIGluZl9jaGlsZF9vcGVuX3RhcmdldCk7Ci0tfQotLQotLSNkZWZpbmUgT1NU WVBFX05UTyAxCi0tCi0tdm9pZCBfaW5pdGlhbGl6ZV9wcm9jZnMgKCk7Ci0tdm9pZAotLV9pbml0 aWFsaXplX3Byb2NmcyAoKQotLXsKLS0gIHNpZ3NldF90IHNldDsKLS0KLS0gIGluaXRfcHJvY2Zz X3RhcmdldHMgKCk7Ci0tCi0tICAvKiBXZSB1c2UgU0lHVVNSMSB0byBnYWluIGNvbnRyb2wgYWZ0 ZXIgd2UgYmxvY2sgd2FpdGluZyBmb3IgYSBwcm9jZXNzLgotLSAgICAgV2UgdXNlIHNpZ3dhaXRl dmVudCB0byB3YWl0LiAgKi8KLS0gIHNpZ2VtcHR5c2V0ICgmc2V0KTsKLS0gIHNpZ2FkZHNldCAo JnNldCwgU0lHVVNSMSk7Ci0tICBzaWdwcm9jbWFzayAoU0lHX0JMT0NLLCAmc2V0LCBOVUxMKTsK LS0KLS0gIC8qIEluaXRpYWxseSwgbWFrZSBzdXJlIGFsbCBzaWduYWxzIGFyZSByZXBvcnRlZC4g ICovCi0tICBzaWdmaWxsc2V0ICgmcnVuLnRyYWNlKTsKLS0KLS0gIC8qIFN0dWZmIHNvbWUgaW5m b3JtYXRpb24uICAqLwotLSAgbnRvX2NwdWluZm9fZmxhZ3MgPSBTWVNQQUdFX0VOVFJZIChjcHVp bmZvKS0+ZmxhZ3M7Ci0tICBudG9fY3B1aW5mb192YWxpZCA9IDE7Ci0tCi0tICBhZGRfaW5mbyAo InBpZGxpc3QiLCBwcm9jZnNfcGlkbGlzdCwgXygicGlkbGlzdCIpKTsKLS0gIGFkZF9pbmZvICgi bWVtaW5mbyIsIHByb2Nmc19tZW1pbmZvLCBfKCJtZW1vcnkgaW5mb3JtYXRpb24iKSk7Ci0tCi0t ICBudG9faXNfbnRvX3RhcmdldCA9IHByb2Nmc19pc19udG9fdGFyZ2V0OwotLX0KLS0KLS0KLS1z dGF0aWMgaW50Ci0tcHJvY2ZzX2h3X3dhdGNocG9pbnQgKGludCBhZGRyLCBpbnQgbGVuLCBlbnVt IHRhcmdldF9od19icF90eXBlIHR5cGUpCi0tewotLSAgcHJvY2ZzX2JyZWFrIGJyazsKLS0KLS0g IHN3aXRjaCAodHlwZSkKLS0gICAgewotLSAgICBjYXNlIGh3X3JlYWQ6Ci0tICAgICAgYnJrLnR5 cGUgPSBfREVCVUdfQlJFQUtfUkQ7Ci0tICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgaHdfYWNjZXNz OgotLSAgICAgIGJyay50eXBlID0gX0RFQlVHX0JSRUFLX1JXOwotLSAgICAgIGJyZWFrOwotLSAg ICBkZWZhdWx0OgkJCS8qIE1vZGlmeS4gICovCi0tLyogRklYTUU6IGJyay50eXBlID0gX0RFQlVH X0JSRUFLX1JXTSBnaXZlcyBFSU5WQUwgZm9yIHNvbWUgcmVhc29uLiAgKi8KLS0gICAgICBicmsu dHlwZSA9IF9ERUJVR19CUkVBS19SVzsKLS0gICAgfQotLSAgYnJrLnR5cGUgfD0gX0RFQlVHX0JS RUFLX0hXOwkvKiBBbHdheXMgYXNrIGZvciBIVy4gICovCi0tICBicmsuYWRkciA9IGFkZHI7Ci0t ICBicmsuc2l6ZSA9IGxlbjsKLS0KLS0gIGVycm5vID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJP Q19CUkVBSywgJmJyaywgc2l6ZW9mIChicmspLCAwKTsKLS0gIGlmIChlcnJubyAhPSBFT0spCi0t ICAgIHsKLS0gICAgICBwZXJyb3IgKF8oIkZhaWxlZCB0byBzZXQgaGFyZHdhcmUgd2F0Y2hwb2lu dCIpKTsKLS0gICAgICByZXR1cm4gLTE7Ci0tICAgIH0KLS0gIHJldHVybiAwOwotLX0KLS0KLS1i b29sCi0tbnRvX3Byb2Nmc190YXJnZXQ6OmNhbl91c2VfaHdfYnJlYWtwb2ludCAoZW51bSBicHR5 cGUgdHlwZSwKLS0JCQkJCSAgaW50IGNudCwgaW50IG90aGVydHlwZSkKLS17Ci0tICByZXR1cm4g MTsKLS19Ci0tCi0taW50Ci0tbnRvX3Byb2Nmc190YXJnZXQ6OnJlbW92ZV9od193YXRjaHBvaW50 IChDT1JFX0FERFIgYWRkciwgaW50IGxlbiwKLS0JCQkJCSBlbnVtIHRhcmdldF9od19icF90eXBl IHR5cGUsCi0tCQkJCQkgc3RydWN0IGV4cHJlc3Npb24gKmNvbmQpCi0tewotLSAgcmV0dXJuIHBy b2Nmc19od193YXRjaHBvaW50IChhZGRyLCAtMSwgdHlwZSk7Ci0tfQotLQotLWludAotLW50b19w cm9jZnNfdGFyZ2V0OjppbnNlcnRfaHdfd2F0Y2hwb2ludCAoQ09SRV9BRERSIGFkZHIsIGludCBs ZW4sCi0tCQkJCQkgZW51bSB0YXJnZXRfaHdfYnBfdHlwZSB0eXBlLAotLQkJCQkJIHN0cnVjdCBl eHByZXNzaW9uICpjb25kKQotLXsKLS0gIHJldHVybiBwcm9jZnNfaHdfd2F0Y2hwb2ludCAoYWRk ciwgbGVuLCB0eXBlKTsKLS19Ci0tCi0tYm9vbAotLW50b19wcm9jZnNfdGFyZ2V0OjpzdG9wcGVk X2J5X3dhdGNocG9pbnQgKCkKLS17Ci0tICAvKiBOT1RFOiBudG9fc3RvcHBlZF9ieV93YXRjaHBv aW50IHdpbGwgYmUgY2FsbGVkIE9OTFkgd2hpbGUgd2UgYXJlCi0tICAgICBzdG9wcGVkIGR1ZSB0 byBhIFNJR1RSQVAuICBUaGlzIGFzc3VtZXMgZ2RiIHdvcmtzIGluICdhbGwtc3RvcCcgbW9kZTsK LS0gICAgIGZ1dHVyZSBnZGIgdmVyc2lvbnMgd2lsbCBsaWtlbHkgcnVuIGluICdub24tc3RvcCcg bW9kZSBpbiB3aGljaCBjYXNlCi0tICAgICB3ZSB3aWxsIGhhdmUgdG8gc3RvcmUvZXhhbWluZSBz dGF0dXNlcyBwZXIgdGhyZWFkIGluIHF1ZXN0aW9uLgotLSAgICAgVW50aWwgdGhlbiwgdGhpcyB3 aWxsIHdvcmsgZmluZS4gICovCi0tCi0tICBzdHJ1Y3QgaW5mZXJpb3IgKmluZiA9IGN1cnJlbnRf aW5mZXJpb3IgKCk7Ci0tICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKmluZl9kYXRhOwotLQot LSAgZ2RiX2Fzc2VydCAoaW5mICE9IE5VTEwpOwotLQotLSAgaW5mX2RhdGEgPSBudG9faW5mZXJp b3JfZGF0YSAoaW5mKTsKLS0KLS0gIHJldHVybiBpbmZfZGF0YS0+c3RvcHBlZF9mbGFncwotLQkg JiAoX0RFQlVHX0ZMQUdfVFJBQ0VfUkQKLS0JICAgIHwgX0RFQlVHX0ZMQUdfVFJBQ0VfV1IKLS0J ICAgIHwgX0RFQlVHX0ZMQUdfVFJBQ0VfTU9ESUZZKTsKLS19Ci1kaWZmIC0tZ2l0IGEvZ2RiL250 by10ZGVwLmMgYi9nZGIvbnRvLXRkZXAuYwotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0g YS9nZGIvbnRvLXRkZXAuYwotKysrIC9kZXYvbnVsbAotQEAgLTEsNTIxICswLDAgQEAKLS0vKiBu dG8tdGRlcC5jIC0gZ2VuZXJhbCBRTlggTmV1dHJpbm8gdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuCi0t Ci0tICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCi0tCi0tICAgQ29udHJpYnV0ZWQgYnkgUU5YIFNvZnR3YXJlIFN5c3RlbXMgTHRkLgotLQot LSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotLSAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5Ci0tICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLS0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotLQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0g ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCi0tCi0tI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0tI2luY2x1ZGUg Im50by10ZGVwLmgiCi0tI2luY2x1ZGUgImV4dHJhY3Qtc3RvcmUtaW50ZWdlci5oIgotLSNpbmNs dWRlICJ0b3AuaCIKLS0jaW5jbHVkZSAiaW5mZXJpb3IuaCIKLS0jaW5jbHVkZSAiaW5mcnVuLmgi Ci0tI2luY2x1ZGUgImdkYmFyY2guaCIKLS0jaW5jbHVkZSAiYmZkLmgiCi0tI2luY2x1ZGUgImVs Zi1iZmQuaCIKLS0jaW5jbHVkZSAic29saWItc3ZyNC5oIgotLSNpbmNsdWRlICJnZGJjb3JlLmgi Ci0tI2luY2x1ZGUgIm9iamZpbGVzLmgiCi0tI2luY2x1ZGUgInNvdXJjZS5oIgotLSNpbmNsdWRl ICJnZGJzdXBwb3J0L3BhdGhzdHVmZi5oIgotLQotLSNkZWZpbmUgUU5YX05PVEVfTkFNRQkiUU5Y IgotLSNkZWZpbmUgUU5YX0lORk9fU0VDVF9OQU1FICJRTlhfaW5mbyIKLS0KLS0jaWZkZWYgX19D WUdXSU5fXwotLSNpbmNsdWRlIDxzeXMvY3lnd2luLmg+Ci0tI2VuZGlmCi0tCi0tI2lmZGVmIF9f Q1lHV0lOX18KLS1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICJDOlxcUU5Yc2Rr XFx0YXJnZXRcXHFueDYiOwotLSNlbGlmIGRlZmluZWQoX19zdW5fXykgfHwgZGVmaW5lZChsaW51 eCkKLS1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICIvb3B0L1FOWHNkay90YXJn ZXQvcW54NiI7Ci0tI2Vsc2UKLS1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICIi OwotLSNlbmRpZgotLQotLXN0cnVjdCBudG9fdGFyZ2V0X29wcyBjdXJyZW50X250b190YXJnZXQ7 Ci0tCi0tc3RhdGljIGNvbnN0IHJlZ2lzdHJ5PGluZmVyaW9yPjo6a2V5PHN0cnVjdCBudG9faW5m ZXJpb3JfZGF0YT4KLS0gIG50b19pbmZlcmlvcl9kYXRhX3JlZzsKLS0KLS1zdGF0aWMgY2hhciAq Ci0tbnRvX3RhcmdldCAodm9pZCkKLS17Ci0tICBjaGFyICpwID0gZ2V0ZW52ICgiUU5YX1RBUkdF VCIpOwotLQotLSNpZmRlZiBfX0NZR1dJTl9fCi0tICBzdGF0aWMgY2hhciBidWZbUEFUSF9NQVhd OwotLSAgaWYgKHApCi0tICAgIGN5Z3dpbl9jb252X3BhdGggKENDUF9XSU5fQV9UT19QT1NJWCwg cCwgYnVmLCBQQVRIX01BWCk7Ci0tICBlbHNlCi0tICAgIGN5Z3dpbl9jb252X3BhdGggKENDUF9X SU5fQV9UT19QT1NJWCwgZGVmYXVsdF9udG9fdGFyZ2V0LCBidWYsIFBBVEhfTUFYKTsKLS0gIHJl dHVybiBidWY7Ci0tI2Vsc2UKLS0gIHJldHVybiBwID8gcCA6IGRlZmF1bHRfbnRvX3RhcmdldDsK LS0jZW5kaWYKLS19Ci0tCi0tLyogVGFrZSBhIHN0cmluZyBzdWNoIGFzIGkzODYsIHJzNjAwMCwg ZXRjLiBhbmQgbWFwIGl0IG9udG8gQ1BVVFlQRV9YODYsCi0tICAgQ1BVVFlQRV9QUEMsIGV0Yy4g YXMgZGVmaW5lZCBpbiBudG8tc2hhcmUvZHNtc2dzLmguICAqLwotLWludAotLW50b19tYXBfYXJj aF90b19jcHV0eXBlIChjb25zdCBjaGFyICphcmNoKQotLXsKLS0gIGlmICghc3RyY21wIChhcmNo LCAiaTM4NiIpIHx8ICFzdHJjbXAgKGFyY2gsICJ4ODYiKSkKLS0gICAgcmV0dXJuIENQVVRZUEVf WDg2OwotLSAgaWYgKCFzdHJjbXAgKGFyY2gsICJyczYwMDAiKSB8fCAhc3RyY21wIChhcmNoLCAi cG93ZXJwYyIpKQotLSAgICByZXR1cm4gQ1BVVFlQRV9QUEM7Ci0tICBpZiAoIXN0cmNtcCAoYXJj aCwgIm1pcHMiKSkKLS0gICAgcmV0dXJuIENQVVRZUEVfTUlQUzsKLS0gIGlmICghc3RyY21wIChh cmNoLCAiYXJtIikpCi0tICAgIHJldHVybiBDUFVUWVBFX0FSTTsKLS0gIGlmICghc3RyY21wIChh cmNoLCAic2giKSkKLS0gICAgcmV0dXJuIENQVVRZUEVfU0g7Ci0tICByZXR1cm4gQ1BVVFlQRV9V TktOT1dOOwotLX0KLS0KLS1pbnQKLS1udG9fZmluZF9hbmRfb3Blbl9zb2xpYiAoY29uc3QgY2hh ciAqc29saWIsIHVuc2lnbmVkIG9fZmxhZ3MsCi0tCQkJIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRy PGNoYXI+ICp0ZW1wX3BhdGhuYW1lKQotLXsKLS0gIGNoYXIgKmJ1ZiwgKmFyY2hfcGF0aCwgKm50 b19yb290OwotLSAgY29uc3QgY2hhciAqZW5kaWFuOwotLSAgY29uc3QgY2hhciAqYmFzZTsKLS0g IGNvbnN0IGNoYXIgKmFyY2g7Ci0tICBpbnQgYXJjaF9sZW4sIGxlbiwgcmV0OwotLSNkZWZpbmUg UEFUSF9GTVQgXAotLSAgIiVzL2xpYjolcy91c3IvbGliOiVzL3Vzci9waG90b24vbGliOiVzL3Vz ci9waG90b24vZGxsOiVzL2xpYi9kbGwiCi0tCi0tICBudG9fcm9vdCA9IG50b190YXJnZXQgKCk7 Ci0tICBnZGJhcmNoICpnZGJhcmNoID0gY3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKTsKLS0g IGlmIChzdHJjbXAgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hfbmFtZSwg ImkzODYiKSA9PSAwKQotLSAgICB7Ci0tICAgICAgYXJjaCA9ICJ4ODYiOwotLSAgICAgIGVuZGlh biA9ICIiOwotLSAgICB9Ci0tICBlbHNlIGlmIChzdHJjbXAgKGdkYmFyY2hfYmZkX2FyY2hfaW5m byAoZ2RiYXJjaCktPmFyY2hfbmFtZSwKLS0JCSAgICJyczYwMDAiKSA9PSAwCi0tCSAgIHx8IHN0 cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJjaF9uYW1lLAotLQkJICAg InBvd2VycGMiKSA9PSAwKQotLSAgICB7Ci0tICAgICAgYXJjaCA9ICJwcGMiOwotLSAgICAgIGVu ZGlhbiA9ICJiZSI7Ci0tICAgIH0KLS0gIGVsc2UKLS0gICAgewotLSAgICAgIGFyY2ggPSBnZGJh cmNoX2JmZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5hcmNoX25hbWU7Ci0tICAgICAgZW5kaWFuID0g Z2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKQotLQkgICAgICAgPT0gQkZEX0VORElBTl9CSUcg PyAiYmUiIDogImxlIjsKLS0gICAgfQotLQotLSAgLyogSW4gY2FzZSBudG9fcm9vdCBpcyBzaG9y dCwgYWRkIHN0cmxlbihzb2xpYikKLS0gICAgIHNvIHdlIGNhbiByZXVzZSBhcmNoX3BhdGggYmVs b3cuICAqLwotLQotLSAgYXJjaF9sZW4gPSAoc3RybGVuIChudG9fcm9vdCkgKyBzdHJsZW4gKGFy Y2gpICsgc3RybGVuIChlbmRpYW4pICsgMgotLQkgICAgICArIHN0cmxlbiAoc29saWIpKTsKLS0g IGFyY2hfcGF0aCA9IChjaGFyICopIGFsbG9jYSAoYXJjaF9sZW4pOwotLSAgeHNucHJpbnRmIChh cmNoX3BhdGgsIGFyY2hfbGVuLCAiJXMvJXMlcyIsIG50b19yb290LCBhcmNoLCBlbmRpYW4pOwot LQotLSAgbGVuID0gc3RybGVuIChQQVRIX0ZNVCkgKyBzdHJsZW4gKGFyY2hfcGF0aCkgKiA1ICsg MTsKLS0gIGJ1ZiA9IChjaGFyICopIGFsbG9jYSAobGVuKTsKLS0gIHhzbnByaW50ZiAoYnVmLCBs ZW4sIFBBVEhfRk1ULCBhcmNoX3BhdGgsIGFyY2hfcGF0aCwgYXJjaF9wYXRoLCBhcmNoX3BhdGgs Ci0tCSAgICAgYXJjaF9wYXRoKTsKLS0KLS0gIGJhc2UgPSBsYmFzZW5hbWUgKHNvbGliKTsKLS0g IHJldCA9IG9wZW5wIChidWYsIE9QRl9UUllfQ1dEX0ZJUlNUIHwgT1BGX1JFVFVSTl9SRUFMUEFU SCwgYmFzZSwgb19mbGFncywKLS0JICAgICAgIHRlbXBfcGF0aG5hbWUpOwotLSAgaWYgKHJldCA8 IDAgJiYgYmFzZSAhPSBzb2xpYikKLS0gICAgewotLSAgICAgIHhzbnByaW50ZiAoYXJjaF9wYXRo LCBhcmNoX2xlbiwgIi8lcyIsIHNvbGliKTsKLS0gICAgICByZXQgPSBvcGVuIChhcmNoX3BhdGgs IG9fZmxhZ3MsIDApOwotLSAgICAgIGlmICh0ZW1wX3BhdGhuYW1lKQotLQl7Ci0tCSAgaWYgKHJl dCA+PSAwKQotLQkgICAgKnRlbXBfcGF0aG5hbWUgPSBnZGJfcmVhbHBhdGggKGFyY2hfcGF0aCk7 Ci0tCSAgZWxzZQotLQkgICAgdGVtcF9wYXRobmFtZS0+cmVzZXQgKE5VTEwpOwotLQl9Ci0tICAg IH0KLS0gIHJldHVybiByZXQ7Ci0tfQotLQotLXZvaWQKLS1udG9faW5pdF9zb2xpYl9hYnNvbHV0 ZV9wcmVmaXggKHZvaWQpCi0tewotLSAgY2hhciBidWZbUEFUSF9NQVggKiAyXSwgYXJjaF9wYXRo W1BBVEhfTUFYXTsKLS0gIGNoYXIgKm50b19yb290OwotLSAgY29uc3QgY2hhciAqZW5kaWFuOwot LSAgY29uc3QgY2hhciAqYXJjaDsKLS0KLS0gIG50b19yb290ID0gbnRvX3RhcmdldCAoKTsKLS0g IGdkYmFyY2ggKmdkYmFyY2ggPSBjdXJyZW50X2luZmVyaW9yICgpLT5hcmNoICgpOwotLSAgaWYg KHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJjaF9uYW1lLCAiaTM4 NiIpID09IDApCi0tICAgIHsKLS0gICAgICBhcmNoID0gIng4NiI7Ci0tICAgICAgZW5kaWFuID0g IiI7Ci0tICAgIH0KLS0gIGVsc2UgaWYgKHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChn ZGJhcmNoKS0+YXJjaF9uYW1lLAotLQkJICAgInJzNjAwMCIpID09IDAKLS0JICAgfHwgc3RyY21w IChnZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5hcmNoX25hbWUsCi0tCQkgICAicG93 ZXJwYyIpID09IDApCi0tICAgIHsKLS0gICAgICBhcmNoID0gInBwYyI7Ci0tICAgICAgZW5kaWFu ID0gImJlIjsKLS0gICAgfQotLSAgZWxzZQotLSAgICB7Ci0tICAgICAgYXJjaCA9IGdkYmFyY2hf YmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hfbmFtZTsKLS0gICAgICBlbmRpYW4gPSBnZGJh cmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpCi0tCSAgICAgICA9PSBCRkRfRU5ESUFOX0JJRyA/ICJi ZSIgOiAibGUiOwotLSAgICB9Ci0tCi0tICB4c25wcmludGYgKGFyY2hfcGF0aCwgc2l6ZW9mIChh cmNoX3BhdGgpLCAiJXMvJXMlcyIsIG50b19yb290LCBhcmNoLCBlbmRpYW4pOwotLQotLSAgeHNu cHJpbnRmIChidWYsIHNpemVvZiAoYnVmKSwgInNldCBzb2xpYi1hYnNvbHV0ZS1wcmVmaXggJXMi LCBhcmNoX3BhdGgpOwotLSAgZXhlY3V0ZV9jb21tYW5kIChidWYsIDApOwotLX0KLS0KLS1jaGFy ICoqCi0tbnRvX3BhcnNlX3JlZGlyZWN0aW9uIChjaGFyICpwYXJndltdLCBjb25zdCBjaGFyICoq cGluLCBjb25zdCBjaGFyICoqcG91dCwgCi0tCQkgICAgICAgY29uc3QgY2hhciAqKnBlcnIpCi0t ewotLSAgY2hhciAqKmFyZ3Y7Ci0tICBjb25zdCBjaGFyICppbiwgKm91dCwgKmVyciwgKnA7Ci0t ICBpbnQgYXJnYywgaSwgbjsKLS0KLS0gIGZvciAobiA9IDA7IHBhcmd2W25dOyBuKyspOwotLSAg aWYgKG4gPT0gMCkKLS0gICAgcmV0dXJuIE5VTEw7Ci0tICBpbiA9ICIiOwotLSAgb3V0ID0gIiI7 Ci0tICBlcnIgPSAiIjsKLS0KLS0gIGFyZ3YgPSBYQ05FV1ZFQyAoY2hhciAqLCBuICsgMSk7Ci0t ICBhcmdjID0gbjsKLS0gIGZvciAoaSA9IDAsIG4gPSAwOyBuIDwgYXJnYzsgbisrKQotLSAgICB7 Ci0tICAgICAgcCA9IHBhcmd2W25dOwotLSAgICAgIGlmICgqcCA9PSAnPicpCi0tCXsKLS0JICBw Kys7Ci0tCSAgaWYgKCpwKQotLQkgICAgb3V0ID0gcDsKLS0JICBlbHNlCi0tCSAgICBvdXQgPSBw YXJndlsrK25dOwotLQl9Ci0tICAgICAgZWxzZSBpZiAoKnAgPT0gJzwnKQotLQl7Ci0tCSAgcCsr OwotLQkgIGlmICgqcCkKLS0JICAgIGluID0gcDsKLS0JICBlbHNlCi0tCSAgICBpbiA9IHBhcmd2 Wysrbl07Ci0tCX0KLS0gICAgICBlbHNlIGlmICgqcCsrID09ICcyJyAmJiAqcCsrID09ICc+JykK LS0JewotLQkgIGlmICgqcCA9PSAnJicgJiYgKihwICsgMSkgPT0gJzEnKQotLQkgICAgZXJyID0g b3V0OwotLQkgIGVsc2UgaWYgKCpwKQotLQkgICAgZXJyID0gcDsKLS0JICBlbHNlCi0tCSAgICBl cnIgPSBwYXJndlsrK25dOwotLQl9Ci0tICAgICAgZWxzZQotLQlhcmd2W2krK10gPSBwYXJndltu XTsKLS0gICAgfQotLSAgKnBpbiA9IGluOwotLSAgKnBvdXQgPSBvdXQ7Ci0tICAqcGVyciA9IGVy cjsKLS0gIHJldHVybiBhcmd2OwotLX0KLS0KLS1zdGF0aWMgQ09SRV9BRERSCi0tbG1fYWRkciAo Y29uc3Qgc29saWIgJnNvKQotLXsKLS0gIGF1dG8gKmxpID0gZ2RiOjpjaGVja2VkX3N0YXRpY19j YXN0PGNvbnN0IGxtX2luZm9fc3ZyNCAqPiAoc28ubG1faW5mby5nZXQgKCkpOwotLQotLSAgcmV0 dXJuIGxpLT5sX2FkZHI7Ci0tfQotLQotLXN0YXRpYyBDT1JFX0FERFIKLS1udG9fdHJ1bmNhdGVf cHRyIChDT1JFX0FERFIgYWRkcikKLS17Ci0tICBnZGJhcmNoICpnZGJhcmNoID0gY3VycmVudF9p bmZlcmlvciAoKS0+YXJjaCAoKTsKLS0gIGlmIChnZGJhcmNoX3B0cl9iaXQgKGdkYmFyY2gpID09 IHNpemVvZiAoQ09SRV9BRERSKSAqIDgpCi0tICAgIC8qIFdlIGRvbid0IG5lZWQgdG8gdHJ1bmNh dGUgYW55dGhpbmcsIGFuZCB0aGUgYml0IHR3aWRkbGluZyBiZWxvdwotLSAgICAgICB3aWxsIGZh aWwgZHVlIHRvIG92ZXJmbG93IHByb2JsZW1zLiAgKi8KLS0gICAgcmV0dXJuIGFkZHI7Ci0tICBl bHNlCi0tICAgIHJldHVybiBhZGRyICYgKCgoQ09SRV9BRERSKSAxIDw8IGdkYmFyY2hfcHRyX2Jp dCAoZ2RiYXJjaCkpIC0gMSk7Ci0tfQotLQotLXN0YXRpYyBFbGZfSW50ZXJuYWxfUGhkciAqCi0t ZmluZF9sb2FkX3BoZHIgKGJmZCAqYWJmZCkKLS17Ci0tICBFbGZfSW50ZXJuYWxfUGhkciAqcGhk cjsKLS0gIHVuc2lnbmVkIGludCBpOwotLQotLSAgaWYgKCFlbGZfdGRhdGEgKGFiZmQpKQotLSAg ICByZXR1cm4gTlVMTDsKLS0KLS0gIHBoZHIgPSBlbGZfdGRhdGEgKGFiZmQpLT5waGRyOwotLSAg Zm9yIChpID0gMDsgaSA8IGVsZl9lbGZoZWFkZXIgKGFiZmQpLT5lX3BobnVtOyBpKyssIHBoZHIr KykKLS0gICAgewotLSAgICAgIGlmIChwaGRyLT5wX3R5cGUgPT0gUFRfTE9BRCAmJiAocGhkci0+ cF9mbGFncyAmIFBGX1gpKQotLQlyZXR1cm4gcGhkcjsKLS0gICAgfQotLSAgcmV0dXJuIE5VTEw7 Ci0tfQotLQotLXZvaWQKLS1udG9fcmVsb2NhdGVfc2VjdGlvbl9hZGRyZXNzZXMgKHNvbGliICZz bywgdGFyZ2V0X3NlY3Rpb24gKnNlYykKLS17Ci0tICAvKiBOZXV0cmlubyB0cmVhdHMgdGhlIGxf YWRkciBiYXNlIGFkZHJlc3MgZmllbGQgaW4gbGluay5oIGFzIGRpZmZlcmVudCB0aGFuCi0tICAg ICB0aGUgYmFzZSBhZGRyZXNzIGluIHRoZSBTeXN0ZW0gViBBQkkgYW5kIHNvIHRoZSBvZmZzZXQg bmVlZHMgdG8gYmUKLS0gICAgIGNhbGN1bGF0ZWQgYW5kIGFwcGxpZWQgdG8gcmVsb2NhdGlvbnMu ICAqLwotLSAgRWxmX0ludGVybmFsX1BoZHIgKnBoZHIgPSBmaW5kX2xvYWRfcGhkciAoc2VjLT50 aGVfYmZkX3NlY3Rpb24tPm93bmVyKTsKLS0gIHVuc2lnbmVkIHZhZGRyID0gcGhkciA/IHBoZHIt PnBfdmFkZHIgOiAwOwotLQotLSAgc2VjLT5hZGRyID0gbnRvX3RydW5jYXRlX3B0ciAoc2VjLT5h ZGRyICsgbG1fYWRkciAoc28pIC0gdmFkZHIpOwotLSAgc2VjLT5lbmRhZGRyID0gbnRvX3RydW5j YXRlX3B0ciAoc2VjLT5lbmRhZGRyICsgbG1fYWRkciAoc28pIC0gdmFkZHIpOwotLX0KLS0KLS0v KiBUaGlzIGlzIGNoZWF0aW5nIGEgYml0IGJlY2F1c2Ugb3VyIGxpbmtlciBjb2RlIGlzIGluIGxp YmMuc28uICBJZiB3ZQotLSAgIGV2ZXIgaW1wbGVtZW50IGxhenkgbGlua2luZywgdGhpcyBtYXkg bmVlZCB0byBiZSByZS1leGFtaW5lZC4gICovCi0taW50Ci0tbnRvX2luX2R5bnN5bV9yZXNvbHZl X2NvZGUgKENPUkVfQUREUiBwYykKLS17Ci0tICBpZiAoaW5fcGx0X3NlY3Rpb24gKHBjKSkKLS0g ICAgcmV0dXJuIDE7Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tdm9pZAotLW50b19kdW1teV9zdXBw bHlfcmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpyZWdzKQotLXsKLS0g IC8qIERvIG5vdGhpbmcuICAqLwotLX0KLS0KLS1zdGF0aWMgdm9pZAotLW50b19zbmlmZl9hYmlf bm90ZV9zZWN0aW9uIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0LCB2b2lkICpvYmopCi0tewot LSAgY29uc3QgY2hhciAqc2VjdG5hbWU7Ci0tICB1bnNpZ25lZCBpbnQgc2VjdHNpemU7Ci0tICAv KiBCdWZmZXIgaG9sZGluZyB0aGUgc2VjdGlvbiBjb250ZW50cy4gICovCi0tICBjaGFyICpub3Rl OwotLSAgdW5zaWduZWQgaW50IG5hbWVsZW47Ci0tICBjb25zdCBjaGFyICpuYW1lOwotLSAgY29u c3QgdW5zaWduZWQgc2l6ZW9mX0VsZl9OaGRyID0gMTI7Ci0tCi0tICBzZWN0bmFtZSA9IGJmZF9z ZWN0aW9uX25hbWUgKHNlY3QpOwotLSAgc2VjdHNpemUgPSBiZmRfc2VjdGlvbl9zaXplIChzZWN0 KTsKLS0KLS0gIGlmIChzZWN0c2l6ZSA+IDEyOCkKLS0gICAgc2VjdHNpemUgPSAxMjg7Ci0tCi0t ICBpZiAoc2VjdG5hbWUgIT0gTlVMTCAmJiBzdHJzdHIgKHNlY3RuYW1lLCBRTlhfSU5GT19TRUNU X05BTUUpICE9IE5VTEwpCi0tICAgICooZW51bSBnZGJfb3NhYmkgKikgb2JqID0gR0RCX09TQUJJ X1FOWE5UTzsKLS0gIGVsc2UgaWYgKHNlY3RuYW1lICE9IE5VTEwgJiYgc3Ryc3RyIChzZWN0bmFt ZSwgIm5vdGUiKSAhPSBOVUxMCi0tCSAgICYmIHNlY3RzaXplID4gc2l6ZW9mX0VsZl9OaGRyKQot LSAgICB7Ci0tICAgICAgbm90ZSA9IFhORVdWRUMgKGNoYXIsIHNlY3RzaXplKTsKLS0gICAgICBi ZmRfZ2V0X3NlY3Rpb25fY29udGVudHMgKGFiZmQsIHNlY3QsIG5vdGUsIDAsIHNlY3RzaXplKTsK LS0gICAgICBuYW1lbGVuID0gKHVuc2lnbmVkIGludCkgYmZkX2hfZ2V0XzMyIChhYmZkLCBub3Rl KTsKLS0gICAgICBuYW1lID0gbm90ZSArIHNpemVvZl9FbGZfTmhkcjsKLS0gICAgICBpZiAoc2Vj dHNpemUgPj0gbmFtZWxlbiArIHNpemVvZl9FbGZfTmhkcgotLQkgICYmIG5hbWVsZW4gPT0gc2l6 ZW9mIChRTlhfTk9URV9OQU1FKQotLQkgICYmIDAgPT0gc3RyY21wIChuYW1lLCBRTlhfTk9URV9O QU1FKSkKLS0JKihlbnVtIGdkYl9vc2FiaSAqKSBvYmogPSBHREJfT1NBQklfUU5YTlRPOwotLQot LSAgICAgIFhERUxFVEVWRUMgKG5vdGUpOwotLSAgICB9Ci0tfQotLQotLWVudW0gZ2RiX29zYWJp Ci0tbnRvX2VsZl9vc2FiaV9zbmlmZmVyIChiZmQgKmFiZmQpCi0tewotLSAgZW51bSBnZGJfb3Nh Ymkgb3NhYmkgPSBHREJfT1NBQklfVU5LTk9XTjsKLS0KLS0gIGJmZF9tYXBfb3Zlcl9zZWN0aW9u cyAoYWJmZCwKLS0JCQkgbnRvX3NuaWZmX2FiaV9ub3RlX3NlY3Rpb24sCi0tCQkJICZvc2FiaSk7 Ci0tCi0tICByZXR1cm4gb3NhYmk7Ci0tfQotLQotLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg bnRvX3RocmVhZF9zdGF0ZV9zdHJbXSA9Ci0tewotLSAgIkRFQUQiLAkJLyogMCAgMHgwMCAqLwot LSAgIlJVTk5JTkciLAkvKiAxICAweDAxICovCi0tICAiUkVBRFkiLAkvKiAyICAweDAyICovCi0t ICAiU1RPUFBFRCIsCS8qIDMgIDB4MDMgKi8KLS0gICJTRU5EIiwJCS8qIDQgIDB4MDQgKi8KLS0g ICJSRUNFSVZFIiwJLyogNSAgMHgwNSAqLwotLSAgIlJFUExZIiwJLyogNiAgMHgwNiAqLwotLSAg IlNUQUNLIiwJLyogNyAgMHgwNyAqLwotLSAgIldBSVRUSFJFQUQiLAkvKiA4ICAweDA4ICovCi0t ICAiV0FJVFBBR0UiLAkvKiA5ICAweDA5ICovCi0tICAiU0lHU1VTUEVORCIsCS8qIDEwIDB4MGEg Ki8KLS0gICJTSUdXQUlUSU5GTyIsCS8qIDExIDB4MGIgKi8KLS0gICJOQU5PU0xFRVAiLAkvKiAx MiAweDBjICovCi0tICAiTVVURVgiLAkvKiAxMyAweDBkICovCi0tICAiQ09ORFZBUiIsCS8qIDE0 IDB4MGUgKi8KLS0gICJKT0lOIiwJCS8qIDE1IDB4MGYgKi8KLS0gICJJTlRSIiwJCS8qIDE2IDB4 MTAgKi8KLS0gICJTRU0iLAkJLyogMTcgMHgxMSAqLwotLSAgIldBSVRDVFgiLAkvKiAxOCAweDEy ICovCi0tICAiTkVUX1NFTkQiLAkvKiAxOSAweDEzICovCi0tICAiTkVUX1JFUExZIgkvKiAyMCAw eDE0ICovCi0tfTsKLS0KLS1jb25zdCBjaGFyICoKLS1udG9fZXh0cmFfdGhyZWFkX2luZm8gKHN0 cnVjdCB0YXJnZXRfb3BzICpzZWxmLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQotLXsKLS0gIGlm ICh0aSAhPSBOVUxMICYmIHRpLT5wcml2ICE9IE5VTEwpCi0tICAgIHsKLS0gICAgICBudG9fdGhy ZWFkX2luZm8gKnByaXYgPSBnZXRfbnRvX3RocmVhZF9pbmZvICh0aSk7Ci0tCi0tICAgICAgaWYg KHByaXYtPnN0YXRlIDwgQVJSQVlfU0laRSAobnRvX3RocmVhZF9zdGF0ZV9zdHIpKQotLQlyZXR1 cm4gbnRvX3RocmVhZF9zdGF0ZV9zdHIgW3ByaXYtPnN0YXRlXTsKLS0gICAgfQotLSAgcmV0dXJu ICIiOwotLX0KLS0KLS12b2lkCi0tbnRvX2luaXRpYWxpemVfc2lnbmFscyAodm9pZCkKLS17Ci0t ICAvKiBXZSB1c2UgU0lHNDUgZm9yIHB1bHNlcywgb3Igc29tZXRoaW5nLCBzbyBub3N0b3AsIG5v cHJpbnQKLS0gICAgIGFuZCBwYXNzIHRoZW0uICAqLwotLSAgc2lnbmFsX3N0b3BfdXBkYXRlIChn ZGJfc2lnbmFsX2Zyb21fbmFtZSAoIlNJRzQ1IiksIDApOwotLSAgc2lnbmFsX3ByaW50X3VwZGF0 ZSAoZ2RiX3NpZ25hbF9mcm9tX25hbWUgKCJTSUc0NSIpLCAwKTsKLS0gIHNpZ25hbF9wYXNzX3Vw ZGF0ZSAoZ2RiX3NpZ25hbF9mcm9tX25hbWUgKCJTSUc0NSIpLCAxKTsKLS0KLS0gIC8qIEJ5IGRl ZmF1bHQgd2UgZG9uJ3Qgd2FudCB0byBzdG9wIG9uIHRoZXNlIHR3bywgYnV0IHdlIGRvIHdhbnQg dG8gcGFzcy4gICovCi0tI2lmIGRlZmluZWQoU0lHU0VMRUNUKQotLSAgc2lnbmFsX3N0b3BfdXBk YXRlIChTSUdTRUxFQ1QsIDApOwotLSAgc2lnbmFsX3ByaW50X3VwZGF0ZSAoU0lHU0VMRUNULCAw KTsKLS0gIHNpZ25hbF9wYXNzX3VwZGF0ZSAoU0lHU0VMRUNULCAxKTsKLS0jZW5kaWYKLS0KLS0j aWYgZGVmaW5lZChTSUdQSE9UT04pCi0tICBzaWduYWxfc3RvcF91cGRhdGUgKFNJR1BIT1RPTiwg MCk7Ci0tICBzaWduYWxfcHJpbnRfdXBkYXRlIChTSUdQSE9UT04sIDApOwotLSAgc2lnbmFsX3Bh c3NfdXBkYXRlIChTSUdQSE9UT04sIDEpOwotLSNlbmRpZgotLX0KLS0KLS0vKiBSZWFkIEFVWFYg ZnJvbSBpbml0aWFsX3N0YWNrLiAgKi8KLS1MT05HRVNUCi0tbnRvX3JlYWRfYXV4dl9mcm9tX2lu aXRpYWxfc3RhY2sgKENPUkVfQUREUiBpbml0aWFsX3N0YWNrLCBnZGJfYnl0ZSAqcmVhZGJ1ZiwK LS0JCQkJICBMT05HRVNUIGxlbiwgc2l6ZV90IHNpemVvZl9hdXh2X3QpCi0tewotLSAgZ2RiX2J5 dGUgdGFyZzMyWzRdOyAvKiBGb3IgMzIgYml0IHRhcmdldCB2YWx1ZXMuICAqLwotLSAgZ2RiX2J5 dGUgdGFyZzY0WzhdOyAvKiBGb3IgNjQgYml0IHRhcmdldCB2YWx1ZXMuICAqLwotLSAgQ09SRV9B RERSIGRhdGFfb2ZzID0gMDsKLS0gIFVMT05HRVNUIGFuaW50OwotLSAgTE9OR0VTVCBsZW5fcmVh ZCA9IDA7Ci0tICBnZGJfYnl0ZSAqYnVmZjsKLS0gIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVy OwotLSAgaW50IHB0cl9zaXplOwotLQotLSAgaWYgKHNpemVvZl9hdXh2X3QgPT0gMTYpCi0tICAg IHB0cl9zaXplID0gODsKLS0gIGVsc2UKLS0gICAgcHRyX3NpemUgPSA0OwotLQotLSAgLyogU2tp cCBvdmVyIGFyZ2MsIGFyZ3YgYW5kIGVudnAuLi4gQ29tbWVudCBmcm9tIGxkZC5jOgotLQotLSAg ICAgVGhlIHN0YXJ0dXAgZnJhbWUgaXMgc2V0LXVwIHNvIHRoYXQgd2UgaGF2ZToKLS0gICAgIGF1 eHYKLS0gICAgIE5VTEwKLS0gICAgIC4uLgotLSAgICAgZW52cDIKLS0gICAgIGVudnAxIDwtLS0t LSB2b2lkICpmcmFtZSArIChhcmdjICsgMikgKiBzaXplb2YoY2hhciAqKQotLSAgICAgTlVMTAot LSAgICAgLi4uCi0tICAgICBhcmd2MgotLSAgICAgYXJndjEKLS0gICAgIGFyZ2MgIDwtLS0tLS0g dm9pZCAqIGZyYW1lCi0tCi0tICAgICBPbiBlbnRyeSB0byBsZGQsIGZyYW1lIGdpdmVzIHRoZSBh ZGRyZXNzIG9mIGFyZ2Mgb24gdGhlIHN0YWNrLiAgKi8KLS0gIC8qIFJlYWQgYXJnYy4gNCBieXRl cyBvbiBib3RoIDY0IGFuZCAzMiBiaXQgYXJjaGVzIGFuZCBsdWNraWx5IGxpdHRsZQotLSAgICog ZW5kaWFuLiBTbyB3ZSBqdXN0IHJlYWQgZmlyc3QgNCBieXRlcy4gICovCi0tICBpZiAodGFyZ2V0 X3JlYWRfbWVtb3J5IChpbml0aWFsX3N0YWNrICsgZGF0YV9vZnMsIHRhcmczMiwgNCkgIT0gMCkK LS0gICAgcmV0dXJuIDA7Ci0tCi0tICBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyIChj dXJyZW50X2luZmVyaW9yICgpLT5hcmNoICgpKTsKLS0KLS0gIGFuaW50ID0gZXh0cmFjdF91bnNp Z25lZF9pbnRlZ2VyICh0YXJnMzIsIHNpemVvZiAodGFyZzMyKSwgYnl0ZV9vcmRlcik7Ci0tCi0t ICAvKiBTaXplIG9mIHBvaW50ZXIgaXMgYXNzdW1lZCB0byBiZSA0IGJ5dGVzICgzMiBiaXQgYXJj aC4pICovCi0tICBkYXRhX29mcyArPSAoYW5pbnQgKyAyKSAqIHB0cl9zaXplOyAvKiArIDIgY29t ZXMgZnJvbSBhcmdjIGl0c2VsZiBhbmQKLS0JCQkJCQlOVUxMIHRlcm1pbmF0aW5nIHBvaW50ZXIg aW4KLS0JCQkJCQlhcmd2LiAgKi8KLS0KLS0gIC8qIE5vdyBsb29wIG92ZXIgZW52IHRhYmxlOiAg Ki8KLS0gIGFuaW50ID0gMDsKLS0gIHdoaWxlICh0YXJnZXRfcmVhZF9tZW1vcnkgKGluaXRpYWxf c3RhY2sgKyBkYXRhX29mcywgdGFyZzY0LCBwdHJfc2l6ZSkKLS0JID09IDApCi0tICAgIHsKLS0g ICAgICBpZiAoZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh0YXJnNjQsIHB0cl9zaXplLCBieXRl X29yZGVyKSA9PSAwKQotLQlhbmludCA9IDE7IC8qIEtlZXAgbG9vcGluZyB1bnRpbCBub24tbnVs bCBlbnRyeSBpcyBmb3VuZC4gICovCi0tICAgICAgZWxzZSBpZiAoYW5pbnQpCi0tCWJyZWFrOwot LSAgICAgIGRhdGFfb2ZzICs9IHB0cl9zaXplOwotLSAgICB9Ci0tICBpbml0aWFsX3N0YWNrICs9 IGRhdGFfb2ZzOwotLQotLSAgbWVtc2V0IChyZWFkYnVmLCAwLCBsZW4pOwotLSAgYnVmZiA9IHJl YWRidWY7Ci0tICB3aGlsZSAobGVuX3JlYWQgPD0gbGVuLXNpemVvZl9hdXh2X3QpCi0tICAgIHsK LS0gICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpbml0aWFsX3N0YWNrICsgbGVuX3JlYWQs IGJ1ZmYsIHNpemVvZl9hdXh2X3QpCi0tCSAgPT0gMCkKLS0JewotLQkgIC8qIEJvdGggMzIgYW5k IDY0IGJpdCBzdHJ1Y3R1cmVzIGhhdmUgaW50IGFzIHRoZSBmaXJzdCBmaWVsZC4gICovCi0tCSAg Y29uc3QgVUxPTkdFU1QgYV90eXBlCi0tCSAgICA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAo YnVmZiwgc2l6ZW9mICh0YXJnMzIpLCBieXRlX29yZGVyKTsKLS0KLS0JICBpZiAoYV90eXBlID09 IEFUX05VTEwpCi0tCSAgICBicmVhazsKLS0JICBidWZmICs9IHNpemVvZl9hdXh2X3Q7Ci0tCSAg bGVuX3JlYWQgKz0gc2l6ZW9mX2F1eHZfdDsKLS0JfQotLSAgICAgIGVsc2UKLS0JYnJlYWs7Ci0t ICAgIH0KLS0gIHJldHVybiBsZW5fcmVhZDsKLS19Ci0tCi0tLyogUmV0dXJuIG50b19pbmZlcmlv cl9kYXRhIGZvciB0aGUgZ2l2ZW4gSU5GRVJJT1IuICBJZiBub3QgeWV0IGNyZWF0ZWQsCi0tICAg Y29uc3RydWN0IGl0LiAgKi8KLS0KLS1zdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKgotLW50b19p bmZlcmlvcl9kYXRhIChzdHJ1Y3QgaW5mZXJpb3IgKmNvbnN0IGluZmVyaW9yKQotLXsKLS0gIHN0 cnVjdCBpbmZlcmlvciAqY29uc3QgaW5mID0gaW5mZXJpb3IgPyBpbmZlcmlvciA6IGN1cnJlbnRf aW5mZXJpb3IgKCk7Ci0tICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKmluZl9kYXRhOwotLQot LSAgZ2RiX2Fzc2VydCAoaW5mICE9IE5VTEwpOwotLQotLSAgaW5mX2RhdGEgPSBudG9faW5mZXJp b3JfZGF0YV9yZWcuZ2V0IChpbmYpOwotLSAgaWYgKGluZl9kYXRhID09IE5VTEwpCi0tICAgIGlu Zl9kYXRhID0gbnRvX2luZmVyaW9yX2RhdGFfcmVnLmVtcGxhY2UgKGluZik7Ci0tCi0tICByZXR1 cm4gaW5mX2RhdGE7Ci0tfQotZGlmZiAtLWdpdCBhL2dkYi9udG8tdGRlcC5oIGIvZ2RiL250by10 ZGVwLmgKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotLS0tIGEvZ2RiL250by10ZGVwLmgKLSsr KyAvZGV2L251bGwKLUBAIC0xLDE5NCArMCwwIEBACi0tLyogbnRvLXRkZXAuaCAtIFFOWCBOZXV0 cmlubyB0YXJnZXQgaGVhZGVyLgotLQotLSAgIENvcHlyaWdodCAoQykgMjAwMy0yMDI0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQotLSAgIENvbnRyaWJ1dGVkIGJ5IFFOWCBTb2Z0 d2FyZSBTeXN0ZW1zIEx0ZC4KLS0KLS0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCi0tCi0t ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLS0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0tICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLS0gICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot LSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLS0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotLQotLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCi0tICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotLQotLSNpZm5kZWYgTlRP X1RERVBfSAotLSNkZWZpbmUgTlRPX1RERVBfSAotLQotLSNpbmNsdWRlICJzb2xpc3QuaCIKLS0j aW5jbHVkZSAib3NhYmkuaCIKLS0jaW5jbHVkZSAicmVnc2V0LmgiCi0tI2luY2x1ZGUgImdkYnRo cmVhZC5oIgotLSNpbmNsdWRlICJnZGJzdXBwb3J0L2dkYi1jaGVja2VkLXN0YXRpYy1jYXN0Lmgi Ci0tCi0tLyogVGFyZ2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgTmV1dHJpbm8gdGFyZ2V0cyAo PHRhcmdldD4tbnRvLXRkZXAuYykuICAqLwotLQotLXN0cnVjdCBudG9fdGFyZ2V0X29wcwotLXsK LS0vKiBUaGUgQ1BVSU5GTyBmbGFncyBmcm9tIHRoZSByZW1vdGUuICBDdXJyZW50bHkgdXNlZCBi eQotLSAgIGkzODYgZm9yIGZ4c2F2ZSBidXQgZnV0dXJlIHByb29maW5nIG90aGVyIGhvc3RzLgot LSAgIFRoaXMgaXMgaW5pdGlhbGl6ZWQgaW4gcHJvY2ZzX2F0dGFjaCBvciBudG9fc3RhcnRfcmVt b3RlCi0tICAgZGVwZW5kaW5nIG9uIG91ciBob3N0L3RhcmdldC4gIEl0IHdvdWxkIG9ubHkgYmUg aW52YWxpZAotLSAgIGlmIHdlIHdlcmUgdGFsa2luZyB0byBhbiBvbGRlciBwZGVidWcgd2hpY2gg ZGlkbid0IHN1cHBvcnQKLS0gICB0aGUgY3B1aW5mbyBtZXNzYWdlLiAgKi8KLS0gIHVuc2lnbmVk IGNwdWluZm9fZmxhZ3M7Ci0tCi0tLyogVHJ1ZSBpZiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGNw dWluZm8gZnJvbSByZW1vdGUuICAqLwotLSAgaW50IGNwdWluZm9fdmFsaWQ7Ci0tCi0tLyogR2l2 ZW4gYSByZWdpc3RlciwgcmV0dXJuIGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgTmV1dHJpbm8K LS0gICByZWdzZXQgaXQgY2FtZSBmcm9tLiAgSWYgcmVnID09IC0xIHVwZGF0ZSBhbGwgcmVnc2V0 cy4gICovCi0tICBpbnQgKCpyZWdzZXRfaWQpIChpbnQpOwotLQotLSAgdm9pZCAoKnN1cHBseV9n cmVnc2V0KSAoc3RydWN0IHJlZ2NhY2hlICosIGNoYXIgKik7Ci0tCi0tICB2b2lkICgqc3VwcGx5 X2ZwcmVnc2V0KSAoc3RydWN0IHJlZ2NhY2hlICosIGNoYXIgKik7Ci0tCi0tICB2b2lkICgqc3Vw cGx5X2FsdHJlZ3NldCkgKHN0cnVjdCByZWdjYWNoZSAqLCBjaGFyICopOwotLQotLS8qIEdpdmVu IGEgcmVnc2V0LCB0ZWxsIGdkYiBhYm91dCByZWdpc3RlcnMgc3RvcmVkIGluIGRhdGEuICAqLwot LSAgdm9pZCAoKnN1cHBseV9yZWdzZXQpIChzdHJ1Y3QgcmVnY2FjaGUgKiwgaW50LCBjaGFyICop OwotLQotLS8qIEdpdmVuIGEgcmVnaXN0ZXIgYW5kIHJlZ3NldCwgY2FsY3VsYXRlIHRoZSBvZmZz ZXQgaW50byB0aGUgcmVnc2V0Ci0tICAgYW5kIHN0dWZmIGl0IGludG8gdGhlIGxhc3QgYXJndW1l bnQuICBJZiByZWdubyBpcyAtMSwgY2FsY3VsYXRlIHRoZQotLSAgIHNpemUgb2YgdGhlIGVudGly ZSByZWdzZXQuICBSZXR1cm5zIGxlbmd0aCBvZiBkYXRhLCAtMSBpZiB1bmtub3duCi0tICAgcmVn c2V0LCAwIGlmIHVua25vd24gcmVnaXN0ZXIuICAqLwotLSAgaW50ICgqcmVnaXN0ZXJfYXJlYSkg KHN0cnVjdCBnZGJhcmNoICosIGludCwgaW50LCB1bnNpZ25lZCAqKTsKLS0KLS0vKiBCdWlsZCB0 aGUgTmV1dHJpbm8gcmVnaXN0ZXIgc2V0IGluZm8gaW50byB0aGUgZGF0YSBidWZmZXIuCi0tICAg UmV0dXJuIC0xIGlmIHVua25vd24gcmVnc2V0LCAwIG90aGVyd2lzZS4gICovCi0tICBpbnQgKCpy ZWdzZXRfZmlsbCkgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqLCBpbnQsIGNoYXIgKik7Ci0tCi0t LyogR2l2ZXMgdGhlIGZldGNoX2xpbmtfbWFwX29mZnNldHMgZnVuY3Rpb24gZXhwb3N1cmUgb3V0 c2lkZSBvZgotLSAgIHNvbGliLXN2cjQuYyBzbyB0aGF0IHdlIGNhbiBvdmVycmlkZSByZWxvY2F0 ZV9zZWN0aW9uX2FkZHJlc3NlcygpLiAgKi8KLS0gIHN0cnVjdCBsaW5rX21hcF9vZmZzZXRzICoo KmZldGNoX2xpbmtfbWFwX29mZnNldHMpICh2b2lkKTsKLS0KLS0vKiBVc2VkIGJ5IG50b19lbGZf b3NhYmlfc25pZmZlciB0byBkZXRlcm1pbmUgaWYgd2UncmUgY29ubmVjdGVkIHRvIGFuCi0tICAg TmV1dHJpbm8gdGFyZ2V0LiAgKi8KLS0gIGVudW0gZ2RiX29zYWJpICgqaXNfbnRvX3RhcmdldCkg KGJmZCAqYWJmZCk7Ci0tfTsKLS0KLS1leHRlcm4gc3RydWN0IG50b190YXJnZXRfb3BzIGN1cnJl bnRfbnRvX3RhcmdldDsKLS0KLS0jZGVmaW5lIG50b19jcHVpbmZvX2ZsYWdzIChjdXJyZW50X250 b190YXJnZXQuY3B1aW5mb19mbGFncykKLS0KLS0jZGVmaW5lIG50b19jcHVpbmZvX3ZhbGlkIChj dXJyZW50X250b190YXJnZXQuY3B1aW5mb192YWxpZCkKLS0KLS0jZGVmaW5lIG50b19yZWdzZXRf aWQgKGN1cnJlbnRfbnRvX3RhcmdldC5yZWdzZXRfaWQpCi0tCi0tI2RlZmluZSBudG9fc3VwcGx5 X2dyZWdzZXQgKGN1cnJlbnRfbnRvX3RhcmdldC5zdXBwbHlfZ3JlZ3NldCkKLS0KLS0jZGVmaW5l IG50b19zdXBwbHlfZnByZWdzZXQgKGN1cnJlbnRfbnRvX3RhcmdldC5zdXBwbHlfZnByZWdzZXQp Ci0tCi0tI2RlZmluZSBudG9fc3VwcGx5X2FsdHJlZ3NldCAoY3VycmVudF9udG9fdGFyZ2V0LnN1 cHBseV9hbHRyZWdzZXQpCi0tCi0tI2RlZmluZSBudG9fc3VwcGx5X3JlZ3NldCAoY3VycmVudF9u dG9fdGFyZ2V0LnN1cHBseV9yZWdzZXQpCi0tCi0tI2RlZmluZSBudG9fcmVnaXN0ZXJfYXJlYSAo Y3VycmVudF9udG9fdGFyZ2V0LnJlZ2lzdGVyX2FyZWEpCi0tCi0tI2RlZmluZSBudG9fcmVnc2V0 X2ZpbGwgKGN1cnJlbnRfbnRvX3RhcmdldC5yZWdzZXRfZmlsbCkKLS0KLS0jZGVmaW5lIG50b19m ZXRjaF9saW5rX21hcF9vZmZzZXRzIFwKLS0oY3VycmVudF9udG9fdGFyZ2V0LmZldGNoX2xpbmtf bWFwX29mZnNldHMpCi0tCi0tI2RlZmluZSBudG9faXNfbnRvX3RhcmdldCAoY3VycmVudF9udG9f dGFyZ2V0LmlzX250b190YXJnZXQpCi0tCi0tLyogS2VlcCB0aGlzIGNvbnNpc3RhbnQgd2l0aCBu ZXV0cmlubyBzeXNwYWdlLmguICAqLwotLWVudW0KLS17Ci0tICBDUFVUWVBFX1g4NiwKLS0gIENQ VVRZUEVfUFBDLAotLSAgQ1BVVFlQRV9NSVBTLAotLSAgQ1BVVFlQRV9TUEFSRSwKLS0gIENQVVRZ UEVfQVJNLAotLSAgQ1BVVFlQRV9TSCwKLS0gIENQVVRZUEVfVU5LTk9XTgotLX07Ci0tCi0tZW51 bQotLXsKLS0gIE9TVFlQRV9RTlg0LAotLSAgT1NUWVBFX05UTwotLX07Ci0tCi0tLyogVGhlc2Ug Y29ycmVzcG9uZCB0byB0aGUgRFNNU0dfKiB2ZXJzaW9ucyBpbiBkc21zZ3MuaC4gICovCi0tZW51 bQotLXsKLS0gIE5UT19SRUdfR0VORVJBTCwKLS0gIE5UT19SRUdfRkxPQVQsCi0tICBOVE9fUkVH X1NZU1RFTSwKLS0gIE5UT19SRUdfQUxULAotLSAgTlRPX1JFR19FTkQKLS19OwotLQotLXR5cGVk ZWYgY2hhciBxbnhfcmVnNjRbOF07Ci0tCi0tdHlwZWRlZiBzdHJ1Y3QgX2RlYnVnX3JlZ3MKLS17 Ci0tICBxbnhfcmVnNjQgcGFkZGluZ1sxMDI0XTsKLS19IG50b19yZWdzZXRfdDsKLS0KLS1zdHJ1 Y3QgbnRvX3RocmVhZF9pbmZvIDogcHVibGljIHByaXZhdGVfdGhyZWFkX2luZm8KLS17Ci0tICBz aG9ydCB0aWQgPSAwOwotLSAgdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7Ci0tICB1bnNpZ25lZCBj aGFyIGZsYWdzID0gMDsKLS0gIHN0ZDo6c3RyaW5nIG5hbWU7Ci0tfTsKLS0KLS1zdGF0aWMgaW5s aW5lIG50b190aHJlYWRfaW5mbyAqCi0tZ2V0X250b190aHJlYWRfaW5mbyAodGhyZWFkX2luZm8g KnRocmVhZCkKLS17Ci0tICByZXR1cm4gZ2RiOjpjaGVja2VkX3N0YXRpY19jYXN0PG50b190aHJl YWRfaW5mbyAqPiAodGhyZWFkLT5wcml2LmdldCAoKSk7Ci0tfQotLQotLS8qIFBlci1pbmZlcmlv ciBkYXRhLCBjb21tb24gZm9yIGJvdGggcHJvY2ZzIGFuZCByZW1vdGUuICAqLwotLXN0cnVjdCBu dG9faW5mZXJpb3JfZGF0YQotLXsKLS0gIC8qIExhc3Qgc3RvcHBlZCBmbGFncyByZXN1bHQgZnJv bSB3YWl0IGZ1bmN0aW9uICovCi0tICB1bnNpZ25lZCBpbnQgc3RvcHBlZF9mbGFncyA9IDA7Ci0t Ci0tICAvKiBMYXN0IGtub3duIHN0b3BwZWQgUEMgKi8KLS0gIENPUkVfQUREUiBzdG9wcGVkX3Bj ID0gMDsKLS19OwotLQotLS8qIEdlbmVyaWMgZnVuY3Rpb25zIGluIG50by10ZGVwLmMuICAqLwot LQotLXZvaWQgbnRvX2luaXRfc29saWJfYWJzb2x1dGVfcHJlZml4ICh2b2lkKTsKLS0KLS1jaGFy ICoqbnRvX3BhcnNlX3JlZGlyZWN0aW9uIChjaGFyICpzdGFydF9hcmd2W10sIGNvbnN0IGNoYXIg KippbiwKLS0JCQkgICAgICBjb25zdCBjaGFyICoqb3V0LCBjb25zdCBjaGFyICoqZXJyKTsKLS0K LS12b2lkIG50b19yZWxvY2F0ZV9zZWN0aW9uX2FkZHJlc3NlcyAoc29saWIgJiwgdGFyZ2V0X3Nl Y3Rpb24gKik7Ci0tCi0taW50IG50b19tYXBfYXJjaF90b19jcHV0eXBlIChjb25zdCBjaGFyICop OwotLQotLWludCBudG9fZmluZF9hbmRfb3Blbl9zb2xpYiAoY29uc3QgY2hhciAqLCB1bnNpZ25l ZCwKLS0JCQkgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+ICopOwotLQotLWVudW0g Z2RiX29zYWJpIG50b19lbGZfb3NhYmlfc25pZmZlciAoYmZkICphYmZkKTsKLS0KLS12b2lkIG50 b19pbml0aWFsaXplX3NpZ25hbHMgKHZvaWQpOwotLQotLS8qIER1bW15IGZ1bmN0aW9uIGZvciBp bml0aWFsaXppbmcgbnRvX3RhcmdldF9vcHMgb24gdGFyZ2V0cyB3aGljaCBkbwotLSAgIG5vdCBk ZWZpbmUgYSBwYXJ0aWN1bGFyIHJlZ3NldC4gICovCi0tdm9pZCBudG9fZHVtbXlfc3VwcGx5X3Jl Z3NldCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgY2hhciAqcmVncyk7Ci0tCi0taW50IG50 b19pbl9keW5zeW1fcmVzb2x2ZV9jb2RlIChDT1JFX0FERFIgcGMpOwotLQotLWNvbnN0IGNoYXIg Km50b19leHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRhcmdldF9vcHMgKnNlbGYsIHN0cnVjdCB0 aHJlYWRfaW5mbyAqKTsKLS0KLS1MT05HRVNUIG50b19yZWFkX2F1eHZfZnJvbV9pbml0aWFsX3N0 YWNrIChDT1JFX0FERFIgaW5pdGlhbF9zdGFjaywKLS0JCQkJCSAgZ2RiX2J5dGUgKnJlYWRidWYs Ci0tCQkJCQkgIExPTkdFU1QgbGVuLCBzaXplX3Qgc2l6ZW9mX2F1eHZfdCk7Ci0tCi0tc3RydWN0 IG50b19pbmZlcmlvcl9kYXRhICpudG9faW5mZXJpb3JfZGF0YSAoc3RydWN0IGluZmVyaW9yICpp bmYpOwotLQotLSNlbmRpZiAvKiBOVE9fVERFUF9IICovCi1kaWZmIC0tZ2l0IGEvZ2RiL29zYWJp LmMgYi9nZGIvb3NhYmkuYwotLS0tIGEvZ2RiL29zYWJpLmMKLSsrKyBiL2dkYi9vc2FiaS5jCi1A QCAtNzAsNyArNzAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9zYWJpX25hbWVzIGdkYl9vc2Fi aV9uYW1lc1tdID0KLSAgIHsgIk9wZW5CU0QiLCBOVUxMIH0sCi0gICB7ICJXaW5kb3dzQ0UiLCBO VUxMIH0sCi0gICB7ICJESkdQUCIsIE5VTEwgfSwKLS0gIHsgIlFOWC1OZXV0cmlubyIsIE5VTEwg fSwKLSAgIHsgIkN5Z3dpbiIsIE5VTEwgfSwKLSAgIHsgIldpbmRvd3MiLCBOVUxMIH0sCi0gICB7 ICJBSVgiLCBOVUxMIH0sCi1kaWZmIC0tZ2l0IGEvZ2RiL29zYWJpLmggYi9nZGIvb3NhYmkuaAot LS0tIGEvZ2RiL29zYWJpLmgKLSsrKyBiL2dkYi9vc2FiaS5oCi1AQCAtMzUsNyArMzUsNiBAQCBl bnVtIGdkYl9vc2FiaQotICAgR0RCX09TQUJJX09QRU5CU0QsCi0gICBHREJfT1NBQklfV0lOQ0Us Ci0gICBHREJfT1NBQklfR08zMiwKLS0gIEdEQl9PU0FCSV9RTlhOVE8sCi0gICBHREJfT1NBQklf Q1lHV0lOLAotICAgR0RCX09TQUJJX1dJTkRPV1MsCi0gICBHREJfT1NBQklfQUlYLAotZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAgYi9nZGIvdGVzdHN1aXRlL2xpYi9nZGIu ZXhwCi0tLS0gYS9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCi0rKysgYi9nZGIvdGVzdHN1aXRl L2xpYi9nZGIuZXhwCi1AQCAtODA3OSw3ICs4MDc5LDYgQEAgZ2RiX2NhY2hpbmdfcHJvYyBnZGJf aGFzX2FyZ3YwIHt9IHsKLSAJICB8fCBbaXN0YXJnZXQgKi13aW5jZS1wZV0gfHwgW2lzdGFyZ2V0 ICotKi1taW5ndzMyY2UqXQotIAkgIHx8IFtpc3RhcmdldCAqLSotb3NmKl0KLSAJICB8fCBbaXN0 YXJnZXQgKi0qLWRpY29zKl0KLS0JICB8fCBbaXN0YXJnZXQgKi0qLW50bypdCi0gCSAgfHwgW2lz dGFyZ2V0ICotKi0qdm1zKl0KLSAJICB8fCBbaXN0YXJnZXQgKi0qLWx5bngqMTc4XSkgfSB7Ci0g CWZhaWwgImFyZ3ZcWzBcXSBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIHRoaXMgdGFyZ2V0IgoKZGlm ZiAtLWdpdCBhL2dkYi5zcGVjIGIvZ2RiLnNwZWMKaW5kZXggY2M1ZDU4MC4uZGIzYmI3YyAxMDA2 NDQKLS0tIGEvZ2RiLnNwZWMKKysrIGIvZ2RiLnNwZWMKQEAgLTQxLDExICs0MSwxMSBAQCBOYW1l OiAlez9zY2xfcHJlZml4fWdkYgogIyBTZWUgdGltZXN0YW1wIG9mIHNvdXJjZSBnbnVsaWIgaW5z dGFsbGVkIGludG8gZ251bGliLyAuCiAlZ2xvYmFsIHNuYXBnbnVsaWIgMjAyMjA1MDEKICVnbG9i YWwgdGFybmFtZSBnZGItJXt2ZXJzaW9ufQotVmVyc2lvbjogMTUuMgorVmVyc2lvbjogMTYuMSAK IAogIyBUaGUgcmVsZWFzZSBhbHdheXMgY29udGFpbnMgYSBsZWFkaW5nIHJlc2VydmVkIG51bWJl ciwgc3RhcnQgaXQgYXQgMS4KICMgYHVwc3RyZWFtJyBpcyBub3QgYSBwYXJ0IG9mIGBuYW1lJyB0 byBzdGF5IGZ1bGx5IHJwbSBkZXBlbmRlbmNpZXMgY29tcGF0aWJsZSBmb3IgdGhlIHRlc3Rpbmcu Ci1SZWxlYXNlOiA3JXs/ZGlzdH0KK1JlbGVhc2U6IDElez9kaXN0fQogCiBMaWNlbnNlOiBHUEwt My4wLW9yLWxhdGVyIEFORCBCU0QtMy1DbGF1c2UgQU5EIEZTRkFQIEFORCBMR1BMLTIuMS1vci1s YXRlciBBTkQgR1BMLTIuMC1vci1sYXRlciBBTkQgTEdQTC0yLjAtb3ItbGF0ZXIgQU5EIExpY2Vu c2VSZWYtRmVkb3JhLVB1YmxpYy1Eb21haW4gQU5EIEdGREwtMS4zLW9yLWxhdGVyIEFORCBMR1BM LTIuMC1vci1sYXRlciBXSVRIIEdDQy1leGNlcHRpb24tMi4wIEFORCBHUEwtMy4wLW9yLWxhdGVy IFdJVEggR0NDLWV4Y2VwdGlvbi0zLjEgQU5EIEdQTC0yLjAtb3ItbGF0ZXIgV0lUSCBHTlUtY29t cGlsZXItZXhjZXB0aW9uCiAjIERvIG5vdCBwcm92aWRlIFVSTCBmb3Igc25hcHNob3RzIGFzIHRo ZSBmaWxlIGxhc3RzIHRoZXJlIG9ubHkgZm9yIDIgZGF5cy4KQEAgLTEzNSwxMCArMTM1LDYgQEAg QnVpbGRSZXF1aXJlczogZ2NjLWMrKwogIz1wdXNoK2phbgogU291cmNlMjogZ2RiLW9ycGhhbnJp cHBlci5jCiAKLSMgTWFuIHBhZ2UgZm9yIGdzdGFjaygxKS4KLSM9cHVzaCtqYW4KLVNvdXJjZTM6 IGdkYi1nc3RhY2subWFuCi0KICMgL2V0Yy9nZGJpbml0IChmcm9tIERlYmlhbiBidXQgd2l0aCBG ZWRvcmEgY29tcGxpYW50IGxvY2F0aW9uKS4KICM9ZmVkb3JhCiBTb3VyY2U0OiBnZGJpbml0CkBA IC04MDIsNyArNzk4LDYgQEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2xpYnti ZmQqLG9wY29kZXMqLGliZXJ0eSosY3RmKixzZnJhbWUqfQogCiAjIHBzdGFjayBvYnNvbGV0aW9u CiAKLWNwIC1wICV7U09VUkNFM30gJFJQTV9CVUlMRF9ST09UJXtfbWFuZGlyfS9tYW4xL2dzdGFj ay4xCiBsbiAtcyBnc3RhY2suMSAkUlBNX0JVSUxEX1JPT1Qle19tYW5kaXJ9L21hbjEvcHN0YWNr LjEKIGxuIC1zIGdzdGFjayAkUlBNX0JVSUxEX1JPT1Qle19iaW5kaXJ9L3BzdGFjawogCkBAIC05 MjgsNiArOTIzLDEzIEBAIGZpCiAjIGVuZGlmIHNjbAogCiAlY2hhbmdlbG9nCisqIFRodSBKYW4g MjMgMjAyNSBBbGV4YW5kcmEgSMOhamtvdsOhIDxhaGFqa292YUByZWRoYXQuY29tPiAtIDE2LjEt MQorLSBSZWJhc2UgdG8gRlNGIEdEQiAxNi4xLgorICBEcm9wcGVkOgorICBnZGItYmFja3BvcnQt YnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gKKyAgZ2RiLWNhdGNocG9pbnQtcmUtc2V0LnBh dGNoCisgIGdkYi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKKwogKiBUaHUgSmFu IDIzIDIwMjUgQWxleGFuZHJhIEjDoWprb3bDoSA8YWhhamtvdmFAcmVkaGF0LmNvbT4KIC0gUmVt b3ZlIHVwc3RyZWFtZWQgZ2RiLTYuMy1nc3RhY2stMjAwNTA0MTEucGF0Y2guCiAKCmRpZmYgLS1n aXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRleCA4OTA0NmYwLi41MTFhMTg5IDEwMDY0NAotLS0g YS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEgKzEgQEAKLVNIQTUxMiAoZ2RiLTE1LjIudGFy Lnh6KSA9IDYyNDAwN2RlY2ViNWIxNWJhODljMDcyNTg4M2QxYTY5OWZhNDY3MTRlZjMwODg3ZjNk MDE2NWUxN2M1ZDY1ZDYzNDY3MTc0MGExMzVhYTY5ZTQzN2Q5MTYyMThhYmIwOGNmYTJhMzhlZDMw OWZmMTlkNDhmNTFkYTU2YjJhOGJhCitTSEE1MTIgKGdkYi0xNi4xLnRhci54eikgPSAxN2IzMjJm ZGUwNjU1YTg0OTUwNjg1MWM4NzlhYmE5YWQxZjhiZmVlODA0YjkwMGVmYzcxODgwNjA5MWJlYzc1 NTExMzgzYmQ0ZDYzMmI4YjMyYTMyZWYyMDcyMzMzMzE1ODE1MDExNTdkZjE4YThkZjUyOGFiZTZm ZjY2NzU3Nwo=