From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v4 25/26] tools/libxc: Use featuresets rather than guesswork Date: Wed, 23 Mar 2016 16:36:28 +0000 Message-ID: <1458750989-28967-26-git-send-email-andrew.cooper3@citrix.com> References: <1458750989-28967-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1458750989-28967-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Ian Jackson List-Id: xen-devel@lists.xenproject.org SXQgaXMgY29uY2VwdHVhbGx5IHdyb25nIHRvIGJhc2UgYSBWTSdzIGZlYXR1cmVzZXQgb24gdGhl IGZlYXR1cmVzIHZpc2libGUgdG8KdGhlIHRvb2xzdGFjayB3aGljaCBoYXBwZW5zIHRvIGNvbnN0 cnVjdCBpdC4KCkluc3RlYWQsIHRoZSBmZWF0dXJlc2V0IHVzZWQgaXMgZWl0aGVyIGFuIGV4cGxp Y2l0IG9uZSBwYXNzZWQgYnkgdGhlCnRvb2xzdGFjaywgb3IgdGhlIGRlZmF1bHQgd2hpY2ggWGVu IGJlbGlldmVzIGl0IGNhbiBnaXZlIHRvIHRoZSBndWVzdC4KCkNvbGxlY3QgYWxsIHRoZSBmZWF0 dXJlIG1hbmlwdWxhdGlvbiBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIHdoaWNoIGFkanVzdHMgdGhl CmZlYXR1cmVzZXQsIGFuZCBwZXJmb3JtIGRlZXAgZGVwZW5kZW5jeSByZW1vdmFsLgoKU2lnbmVk LW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQWNrZWQt Ynk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQpDQzogSWFuIEphY2tzb24gPElh bi5KYWNrc29uQGV1LmNpdHJpeC5jb20+Cgp2MjoKICogSm9pbiBzZXZlcmFsIHJlbGF0ZWQgcGF0 Y2hlcyB0b2dldGhlci4KdjM6CiAqIENvcnJlY3RseSBhZGp1c3QgSFRUL0NNUF9MRUdBQ1kgaW4g dGhlIHBvbGljeS4gIFBWIGd1ZXN0cyBzZWUgaG9zdCBkZXRhaWxzLAogICBzbyBnZXQgdGhlIGhv c3QgZmVhdHVyZXMuICBIVk0gZ3Vlc3RzIGhhdmUgdGhlaXIgdmNwdSB0b3BvbG9neSBwcmVzZW50 ZWQgaW4KICAgYW4gSFRUIGNvbXBhdGlibGUgbWFub3IgKGV2ZW4gaWYgZW5kcyB1cCByZXBvcnRp bmcgMSBjcHUpLCBzbyBoYXZlCiAgIENNUF9MRUdBQ1kgdW5jb25kaXRpb25hbGx5IGNsZWFyZWQu Ci0tLQogdG9vbHMvbGlieGMveGNfY3B1aWRfeDg2LmMgfCAzNTYgKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTM3IGluc2VydGlv bnMoKyksIDIxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19jcHVp ZF94ODYuYyBiL3Rvb2xzL2xpYnhjL3hjX2NwdWlkX3g4Ni5jCmluZGV4IGE5MmY1ZTQuLmZjN2Uy MGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX2NwdWlkX3g4Ni5jCisrKyBiL3Rvb2xzL2xp YnhjL3hjX2NwdWlkX3g4Ni5jCkBAIC0yMSw3ICsyMSw5IEBACiAKICNpbmNsdWRlIDxzdGRsaWIu aD4KICNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSAi eGNfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInhjX2JpdG9wcy5oIgogI2luY2x1ZGUgPHhlbi9odm0v cGFyYW1zLmg+CiAKIGVudW0gewpAQCAtMzEsMTIgKzMzLDE0IEBAIGVudW0gewogI2luY2x1ZGUg Il94Y19jcHVpZF9hdXRvZ2VuLmgiCiAKICNkZWZpbmUgYml0bWFza29mKGlkeCkgICAgICAoMXUg PDwgKChpZHgpICYgMzEpKQotI2RlZmluZSBjbGVhcl9iaXQoaWR4LCBkc3QpICgoZHN0KSAmPSB+ Yml0bWFza29mKGlkeCkpCi0jZGVmaW5lIHNldF9iaXQoaWR4LCBkc3QpICAgKChkc3QpIHw9ICBi aXRtYXNrb2YoaWR4KSkKKyNkZWZpbmUgZmVhdHVyZXdvcmRfb2YoaWR4KSAoKGlkeCkgPj4gNSkK KyNkZWZpbmUgY2xlYXJfZmVhdHVyZShpZHgsIGRzdCkgKChkc3QpICY9IH5iaXRtYXNrb2YoaWR4 KSkKKyNkZWZpbmUgc2V0X2ZlYXR1cmUoaWR4LCBkc3QpICAgKChkc3QpIHw9ICBiaXRtYXNrb2Yo aWR4KSkKIAogI2RlZmluZSBERUZfTUFYX0JBU0UgMHgwMDAwMDAwZHUKICNkZWZpbmUgREVGX01B WF9JTlRFTEVYVCAgMHg4MDAwMDAwOHUKICNkZWZpbmUgREVGX01BWF9BTURFWFQgICAgMHg4MDAw MDAxY3UKKyNkZWZpbmUgQ09NTU9OXzFEIENQVUlEX0NPTU1PTl8xRF9GRUFUVVJFUwogCiBpbnQg eGNfZ2V0X2NwdV9sZXZlbGxpbmdfY2Fwcyh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QgKmNh cHMpCiB7CkBAIC0zMjIsMzcgKzMyNiw2IEBAIHN0YXRpYyB2b2lkIGFtZF94Y19jcHVpZF9wb2xp Y3koeGNfaW50ZXJmYWNlICp4Y2gsCiAgICAgICAgICAgICByZWdzWzBdID0gREVGX01BWF9BTURF WFQ7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSAweDgwMDAwMDAxOiB7Ci0gICAgICAgIGlm ICggIWluZm8tPnBhZSApCi0gICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEFFLCBy ZWdzWzNdKTsKLQotICAgICAgICAvKiBGaWx0ZXIgYWxsIG90aGVyIGZlYXR1cmVzIGFjY29yZGlu ZyB0byBhIHdoaXRlbGlzdC4gKi8KLSAgICAgICAgcmVnc1syXSAmPSAoYml0bWFza29mKFg4Nl9G RUFUVVJFX0xBSEZfTE0pIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFU VVJFX0NNUF9MRUdBQ1kpIHwKLSAgICAgICAgICAgICAgICAgICAgKGluZm8tPm5lc3RlZGh2bSA/ IGJpdG1hc2tvZihYODZfRkVBVFVSRV9TVk0pIDogMCkgfAotICAgICAgICAgICAgICAgICAgICBi aXRtYXNrb2YoWDg2X0ZFQVRVUkVfQ1I4X0xFR0FDWSkgfAotICAgICAgICAgICAgICAgICAgICBi aXRtYXNrb2YoWDg2X0ZFQVRVUkVfQUJNKSB8Ci0gICAgICAgICAgICAgICAgICAgIGJpdG1hc2tv ZihYODZfRkVBVFVSRV9TU0U0QSkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2 X0ZFQVRVUkVfTUlTQUxJR05TU0UpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4 Nl9GRUFUVVJFXzNETk9XUFJFRkVUQ0gpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29m KFg4Nl9GRUFUVVJFX09TVlcpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9G RUFUVVJFX1hPUCkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVf TFdQKSB8Ci0gICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9GTUE0KSB8 Ci0gICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9UQk0pIHwKLSAgICAg ICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0RCRVhUKSk7Ci0gICAgICAgIHJl Z3NbM10gJj0gKDB4MDE4M2YzZmYgfCAvKiBmZWF0dXJlcyBzaGFyZWQgd2l0aCAweDAwMDAwMDAx OkVEWCAqLwotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfTlgpIHwK LSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0xNKSB8Ci0gICAgICAg ICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9QQUdFMUdCKSB8Ci0gICAgICAgICAg ICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9TWVNDQUxMKSB8Ci0gICAgICAgICAgICAg ICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9NTVhFWFQpIHwKLSAgICAgICAgICAgICAgICAg ICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0ZGWFNSKSB8Ci0gICAgICAgICAgICAgICAgICAgIGJp dG1hc2tvZihYODZfRkVBVFVSRV8zRE5PVykgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNr b2YoWDg2X0ZFQVRVUkVfM0ROT1dFWFQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAg Y2FzZSAweDgwMDAwMDA4OgogICAgICAgICAvKgogICAgICAgICAgKiBFQ1hbMTU6MTJdIGlzIEFw aWNJZENvcmVTaXplOiBFQ1hbNzowXSBpcyBOdW1iZXJPZkNvcmVzIChtaW51cyBvbmUpLgpAQCAt Mzk5LDEyICszNzIsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF94Y19jcHVpZF9wb2xpY3koeGNfaW50 ZXJmYWNlICp4Y2gsCiB7CiAgICAgc3dpdGNoICggaW5wdXRbMF0gKQogICAgIHsKLSAgICBjYXNl IDB4MDAwMDAwMDE6Ci0gICAgICAgIC8qIEVDWFs1XSBpcyBhdmFpbGFiaWxpdHkgb2YgVk1YICov Ci0gICAgICAgIGlmICggaW5mby0+bmVzdGVkaHZtICkKLSAgICAgICAgICAgIHNldF9iaXQoWDg2 X0ZFQVRVUkVfVk1YLCByZWdzWzJdKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIDB4MDAw MDAwMDQ6CiAgICAgICAgIC8qCiAgICAgICAgICAqIEVBWFszMToyNl0gaXMgTWF4aW11bSBDb3Jl cyBQZXIgUGFja2FnZSAobWludXMgb25lKS4KQEAgLTQyMCwxOSArMzg3LDYgQEAgc3RhdGljIHZv aWQgaW50ZWxfeGNfY3B1aWRfcG9saWN5KHhjX2ludGVyZmFjZSAqeGNoLAogICAgICAgICAgICAg cmVnc1swXSA9IERFRl9NQVhfSU5URUxFWFQ7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSAw eDgwMDAwMDAxOiB7Ci0gICAgICAgIC8qIE9ubHkgYSBmZXcgZmVhdHVyZXMgYXJlIGFkdmVydGlz ZWQgaW4gSW50ZWwncyAweDgwMDAwMDAxLiAqLwotICAgICAgICByZWdzWzJdICY9IChiaXRtYXNr b2YoWDg2X0ZFQVRVUkVfTEFIRl9MTSkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2Yo WDg2X0ZFQVRVUkVfM0ROT1dQUkVGRVRDSCkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNr b2YoWDg2X0ZFQVRVUkVfQUJNKSk7Ci0gICAgICAgIHJlZ3NbM10gJj0gKGJpdG1hc2tvZihYODZf RkVBVFVSRV9OWCkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVf TE0pIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1BBR0UxR0Ip IHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1NZU0NBTEwpIHwK LSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1JEVFNDUCkpOwotICAg ICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIDB4ODAwMDAwMDU6CiAgICAgICAgIHJlZ3Nb MF0gPSByZWdzWzFdID0gcmVnc1syXSA9IDA7CiAgICAgICAgIGJyZWFrOwpAQCAtNDQ0LDEwICsz OTgsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF94Y19jcHVpZF9wb2xpY3koeGNfaW50ZXJmYWNlICp4 Y2gsCiAgICAgfQogfQogCi0jZGVmaW5lIFhTQVZFT1BUICAgICAgICAoMSA8PCAwKQotI2RlZmlu ZSBYU0FWRUMgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgWEdFVEJWMSAgICAgICAgICgxIDw8 IDIpCi0jZGVmaW5lIFhTQVZFUyAgICAgICAgICAoMSA8PCAzKQogLyogQ29uZmlndXJlIGV4dGVu ZGVkIHN0YXRlIGVudW1lcmF0aW9uIGxlYXZlcyAoMHgwMDAwMDAwRCBmb3IgeHNhdmUpICovCiBz dGF0aWMgdm9pZCB4Y19jcHVpZF9jb25maWdfeHNhdmUoeGNfaW50ZXJmYWNlICp4Y2gsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNwdWlkX2RvbWFpbl9p bmZvICppbmZvLApAQCAtNDg0LDkgKzQzNCw3IEBAIHN0YXRpYyB2b2lkIHhjX2NwdWlkX2NvbmZp Z194c2F2ZSh4Y19pbnRlcmZhY2UgKnhjaCwKICAgICAgICAgcmVnc1sxXSA9IDUxMiArIDY0OyAv KiBGUC9TU0UgKyBYU0FWRS5IRUFERVIgKi8KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOiAv KiBsZWFmIDEgKi8KLSAgICAgICAgcmVnc1swXSAmPSAoWFNBVkVPUFQgfCBYU0FWRUMgfCBYR0VU QlYxIHwgWFNBVkVTKTsKLSAgICAgICAgaWYgKCAhaW5mby0+aHZtICkKLSAgICAgICAgICAgIHJl Z3NbMF0gJj0gflhTQVZFUzsKKyAgICAgICAgcmVnc1swXSA9IGluZm8tPmZlYXR1cmVzZXRbZmVh dHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfWFNBVkVPUFQpXTsKICAgICAgICAgcmVnc1syXSAmPSBp bmZvLT54ZmVhdHVyZV9tYXNrOwogICAgICAgICByZWdzWzNdID0gMDsKICAgICAgICAgYnJlYWs7 CkBAIC01MjAsODUgKzQ2OCwyMiBAQCBzdGF0aWMgdm9pZCB4Y19jcHVpZF9odm1fcG9saWN5KHhj X2ludGVyZmFjZSAqeGNoLAogICAgICAgICAgKi8KICAgICAgICAgcmVnc1sxXSA9IChyZWdzWzFd ICYgMHgwMDAwZmZmZnUpIHwgKChyZWdzWzFdICYgMHgwMDdmMDAwMHUpIDw8IDEpOwogCi0gICAg ICAgIHJlZ3NbMl0gJj0gKGJpdG1hc2tvZihYODZfRkVBVFVSRV9TU0UzKSB8Ci0gICAgICAgICAg ICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9QQ0xNVUxRRFEpIHwKLSAgICAgICAgICAg ICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1NTU0UzKSB8Ci0gICAgICAgICAgICAgICAg ICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9GTUEpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0 bWFza29mKFg4Nl9GRUFUVVJFX0NYMTYpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29m KFg4Nl9GRUFUVVJFX1BDSUQpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9G RUFUVVJFX1NTRTRfMSkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRV UkVfU1NFNF8yKSB8Ci0gICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9N T1ZCRSkgIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1BPUENO VCkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfQUVTTkkpIHwK LSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0YxNkMpIHwKLSAgICAg ICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1JEUkFORCkgfAotICAgICAgICAg ICAgICAgICAgICAoKGluZm8tPnhmZWF0dXJlX21hc2sgIT0gMCkgPwotICAgICAgICAgICAgICAg ICAgICAgKGJpdG1hc2tvZihYODZfRkVBVFVSRV9BVlgpIHwKLSAgICAgICAgICAgICAgICAgICAg ICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfWFNBVkUpKSA6IDApKTsKLQotICAgICAgICByZWdzWzJd IHw9IChiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgfAotICAgICAgICAgICAgICAg ICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfVFNDX0RFQURMSU5FKSB8Ci0gICAgICAgICAgICAg ICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9YMkFQSUMpKTsKLQotICAgICAgICByZWdzWzNd ICY9IChiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfRlBVKSB8Ci0gICAgICAgICAgICAgICAgICAgIGJp dG1hc2tvZihYODZfRkVBVFVSRV9WTUUpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29m KFg4Nl9GRUFUVVJFX0RFKSB8Ci0gICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVB VFVSRV9QU0UpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1RT QykgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfTVNSKSB8Ci0g ICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9QQUUpIHwKLSAgICAgICAg ICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX01DRSkgfAotICAgICAgICAgICAgICAg ICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfQ1g4KSB8Ci0gICAgICAgICAgICAgICAgICAgIGJp dG1hc2tvZihYODZfRkVBVFVSRV9BUElDKSB8Ci0gICAgICAgICAgICAgICAgICAgIGJpdG1hc2tv ZihYODZfRkVBVFVSRV9TRVApIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9G RUFUVVJFX01UUlIpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJF X1BHRSkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfTUNBKSB8 Ci0gICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9DTU9WKSB8Ci0gICAg ICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9QQVQpIHwKLSAgICAgICAgICAg ICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0NMRkxVU0gpIHwKLSAgICAgICAgICAgICAg ICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1BTRTM2KSB8Ci0gICAgICAgICAgICAgICAgICAg IGJpdG1hc2tvZihYODZfRkVBVFVSRV9NTVgpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFz a29mKFg4Nl9GRUFUVVJFX0ZYU1IpIHwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4 Nl9GRUFUVVJFX1NTRSkgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRV UkVfU1NFMikgfAotICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfSFRU KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgLyogV2UgYWx3YXlzIHN1cHBvcnQgTVRSUiBNU1Jz LiAqLwotICAgICAgICByZWdzWzNdIHw9IGJpdG1hc2tvZihYODZfRkVBVFVSRV9NVFJSKTsKLQot ICAgICAgICBpZiAoICFpbmZvLT5wYWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhcl9i aXQoWDg2X0ZFQVRVUkVfUEFFLCByZWdzWzNdKTsKLSAgICAgICAgICAgIGNsZWFyX2JpdChYODZf RkVBVFVSRV9QU0UzNiwgcmVnc1szXSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmVnc1syXSA9IGlu Zm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfU1NFMyldOworICAgICAg ICByZWdzWzNdID0gKGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVf RlBVKV0gfAorICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9IVFQpKTsK ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4MDAwMDAwMDc6IC8qIEludGVsLWRlZmluZWQg Q1BVIGZlYXR1cmVzICovCi0gICAgICAgIGlmICggaW5wdXRbMV0gPT0gMCApIHsKLSAgICAgICAg ICAgIHJlZ3NbMV0gJj0gKGJpdG1hc2tvZihYODZfRkVBVFVSRV9UU0NfQURKVVNUKSB8Ci0gICAg ICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfQk1JMSkgfAotICAgICAg ICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0hMRSkgIHwKLSAgICAgICAg ICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9BVlgyKSB8Ci0gICAgICAgICAg ICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfU01FUCkgfAotICAgICAgICAgICAg ICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0JNSTIpIHwKLSAgICAgICAgICAgICAg ICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9FUk1TKSB8Ci0gICAgICAgICAgICAgICAg ICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfSU5WUENJRCkgfAotICAgICAgICAgICAgICAg ICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1JUTSkgIHwKLSAgICAgICAgICAgICAgICAg ICAgICAgICgoaW5mby0+eGZlYXR1cmVfbWFzayAhPSAwKSA/Ci0gICAgICAgICAgICAgICAgICAg ICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfTVBYKSA6IDApICB8Ci0gICAgICAgICAgICAgICAg ICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfUkRTRUVEKSAgfAotICAgICAgICAgICAgICAg ICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0FEWCkgIHwKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9TTUFQKSB8Ci0gICAgICAgICAgICAgICAgICAg ICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfRlNHU0JBU0UpIHwKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9QQ09NTUlUKSB8Ci0gICAgICAgICAgICAgICAg ICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfQ0xXQikgfAotICAgICAgICAgICAgICAgICAg ICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX0NMRkxVU0hPUFQpKTsKLSAgICAgICAgICAgIHJl Z3NbMl0gJj0gYml0bWFza29mKFg4Nl9GRUFUVVJFX1BLVSk7Ci0gICAgICAgIH0gZWxzZQotICAg ICAgICAgICAgcmVnc1sxXSA9IHJlZ3NbMl0gPSAwOwotCisgICAgICAgIGlmICggaW5wdXRbMV0g PT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ3NbMV0gPSBpbmZvLT5mZWF0dXJlc2V0 W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX0ZTR1NCQVNFKV07CisgICAgICAgICAgICByZWdz WzJdID0gaW5mby0+ZmVhdHVyZXNldFtmZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9QUkVGRVRD SFdUMSldOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg cmVnc1sxXSA9IDA7CisgICAgICAgICAgICByZWdzWzJdID0gMDsKKyAgICAgICAgfQogICAgICAg ICByZWdzWzBdID0gcmVnc1szXSA9IDA7CiAgICAgICAgIGJyZWFrOwogCkBAIC02MTEsMTQgKzQ5 Niw5IEBAIHN0YXRpYyB2b2lkIHhjX2NwdWlkX2h2bV9wb2xpY3koeGNfaW50ZXJmYWNlICp4Y2gs CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDgwMDAwMDAxOgotICAgICAgICBpZiAoICFp bmZvLT5wYWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVf TEFIRl9MTSwgcmVnc1syXSk7Ci0gICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTE0s IHJlZ3NbM10pOwotICAgICAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX05YLCByZWdzWzNd KTsKLSAgICAgICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9QU0UzNiwgcmVnc1szXSk7Ci0g ICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEFHRTFHQiwgcmVnc1szXSk7Ci0gICAg ICAgIH0KKyAgICAgICAgcmVnc1syXSA9IChpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29m KFg4Nl9GRUFUVVJFX0xBSEZfTE0pXSAmCisgICAgICAgICAgICAgICAgICAgfmJpdG1hc2tvZihY ODZfRkVBVFVSRV9DTVBfTEVHQUNZKSk7CisgICAgICAgIHJlZ3NbM10gPSBpbmZvLT5mZWF0dXJl c2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX1NZU0NBTEwpXTsKICAgICAgICAgYnJlYWs7 CiAKICAgICBjYXNlIDB4ODAwMDAwMDc6CkBAIC02NjIsNjggKzU0MiwzNCBAQCBzdGF0aWMgdm9p ZCB4Y19jcHVpZF9wdl9wb2xpY3koeGNfaW50ZXJmYWNlICp4Y2gsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvICppbmZvLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqaW5wdXQsIHVu c2lnbmVkIGludCAqcmVncykKIHsKLSAgICBpZiAoIChpbnB1dFswXSAmIDB4N2ZmZmZmZmYpID09 IDB4MDAwMDAwMDEgKQotICAgIHsKLSAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1ZNRSwg cmVnc1szXSk7Ci0gICAgICAgIGlmICggIWluZm8tPnB2aCApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9QU0UsIHJlZ3NbM10pOwotICAgICAgICAgICAgY2xl YXJfYml0KFg4Nl9GRUFUVVJFX1BHRSwgcmVnc1szXSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2xl YXJfYml0KFg4Nl9GRUFUVVJFX01DRSwgcmVnc1szXSk7Ci0gICAgICAgIGNsZWFyX2JpdChYODZf RkVBVFVSRV9NQ0EsIHJlZ3NbM10pOwotICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTVRS UiwgcmVnc1szXSk7Ci0gICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9QU0UzNiwgcmVnc1sz XSk7Ci0gICAgfQotCiAgICAgc3dpdGNoICggaW5wdXRbMF0gKQogICAgIHsKICAgICBjYXNlIDB4 MDAwMDAwMDE6Ci0gICAgICAgIGlmICggaW5mby0+dmVuZG9yID09IFZFTkRPUl9BTUQgKQotICAg ICAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1NFUCwgcmVnc1szXSk7Ci0gICAgICAgIGNs ZWFyX2JpdChYODZfRkVBVFVSRV9EUywgcmVnc1szXSk7Ci0gICAgICAgIGNsZWFyX2JpdChYODZf RkVBVFVSRV9UTTEsIHJlZ3NbM10pOwotICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEJF LCByZWdzWzNdKTsKLQotICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfRFRFUzY0LCByZWdz WzJdKTsKLSAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX01PTklUT1IsIHJlZ3NbMl0pOwot ICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfRFNDUEwsIHJlZ3NbMl0pOwotICAgICAgICBj bGVhcl9iaXQoWDg2X0ZFQVRVUkVfVk1YLCByZWdzWzJdKTsKLSAgICAgICAgY2xlYXJfYml0KFg4 Nl9GRUFUVVJFX1NNWCwgcmVnc1syXSk7Ci0gICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9F SVNULCByZWdzWzJdKTsKLSAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1RNMiwgcmVnc1sy XSk7Ci0gICAgICAgIGlmICggIWluZm8tPnB2NjQgKQotICAgICAgICAgICAgY2xlYXJfYml0KFg4 Nl9GRUFUVVJFX0NYMTYsIHJlZ3NbMl0pOwotICAgICAgICBpZiAoIGluZm8tPnhmZWF0dXJlX21h c2sgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9Y U0FWRSwgcmVnc1syXSk7Ci0gICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfQVZYLCBy ZWdzWzJdKTsKLSAgICAgICAgfQotICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfWFRQUiwg cmVnc1syXSk7Ci0gICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9QRENNLCByZWdzWzJdKTsK LSAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BDSUQsIHJlZ3NbMl0pOwotICAgICAgICBj bGVhcl9iaXQoWDg2X0ZFQVRVUkVfRENBLCByZWdzWzJdKTsKLSAgICAgICAgc2V0X2JpdChYODZf RkVBVFVSRV9IWVBFUlZJU09SLCByZWdzWzJdKTsKKyAgICB7CisgICAgICAgIC8qIEhvc3QgdG9w b2xvZ3kgZXhwb3NlZCB0byBQViBndWVzdC4gIFByb3ZpZGUgaG9zdCB2YWx1ZS4gKi8KKyAgICAg ICAgYm9vbCBob3N0X2h0dCA9IHJlZ3NbM10gJiBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfSFRUKTsK KworICAgICAgICByZWdzWzJdID0gaW5mby0+ZmVhdHVyZXNldFtmZWF0dXJld29yZF9vZihYODZf RkVBVFVSRV9TU0UzKV07CisgICAgICAgIHJlZ3NbM10gPSAoaW5mby0+ZmVhdHVyZXNldFtmZWF0 dXJld29yZF9vZihYODZfRkVBVFVSRV9GUFUpXSAmCisgICAgICAgICAgICAgICAgICAgfmJpdG1h c2tvZihYODZfRkVBVFVSRV9IVFQpKTsKKworICAgICAgICBpZiAoIGhvc3RfaHR0ICkKKyAgICAg ICAgICAgIHJlZ3NbM10gfD0gYml0bWFza29mKFg4Nl9GRUFUVVJFX0hUVCk7CiAgICAgICAgIGJy ZWFrOworICAgIH0KIAogICAgIGNhc2UgMHgwMDAwMDAwNzoKICAgICAgICAgaWYgKCBpbnB1dFsx XSA9PSAwICkKICAgICAgICAgewotICAgICAgICAgICAgcmVnc1sxXSAmPSAoYml0bWFza29mKFg4 Nl9GRUFUVVJFX0JNSTEpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZf RkVBVFVSRV9ITEUpICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZF QVRVUkVfQVZYMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFU VVJFX0JNSTIpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVS RV9FUk1TKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVf UlRNKSAgfAotICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFza29mKFg4Nl9GRUFUVVJFX1JE U0VFRCkgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hc2tvZihYODZfRkVBVFVSRV9B RFgpICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfRlNH U0JBU0UpKTsKLSAgICAgICAgICAgIGlmICggaW5mby0+eGZlYXR1cmVfbWFzayA9PSAwICkKLSAg ICAgICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTVBYLCByZWdzWzFdKTsKKyAgICAg ICAgICAgIHJlZ3NbMV0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFU VVJFX0ZTR1NCQVNFKV07CisgICAgICAgICAgICByZWdzWzJdID0gaW5mby0+ZmVhdHVyZXNldFtm ZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9QUkVGRVRDSFdUMSldOwogICAgICAgICB9CiAgICAg ICAgIGVsc2UKKyAgICAgICAgewogICAgICAgICAgICAgcmVnc1sxXSA9IDA7Ci0gICAgICAgIHJl Z3NbMF0gPSByZWdzWzJdID0gcmVnc1szXSA9IDA7CisgICAgICAgICAgICByZWdzWzJdID0gMDsK KyAgICAgICAgfQorICAgICAgICByZWdzWzBdID0gcmVnc1szXSA9IDA7CiAgICAgICAgIGJyZWFr OwogCiAgICAgY2FzZSAweDAwMDAwMDBkOgpAQCAtNzMxLDMwICs1NzcsMTkgQEAgc3RhdGljIHZv aWQgeGNfY3B1aWRfcHZfcG9saWN5KHhjX2ludGVyZmFjZSAqeGNoLAogICAgICAgICBicmVhazsK IAogICAgIGNhc2UgMHg4MDAwMDAwMToKLSAgICAgICAgaWYgKCAhaW5mby0+cHY2NCApCi0gICAg ICAgIHsKLSAgICAgICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9MTSwgcmVnc1szXSk7Ci0g ICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTEFIRl9MTSwgcmVnc1syXSk7Ci0gICAg ICAgICAgICBpZiAoIGluZm8tPnZlbmRvciAhPSBWRU5ET1JfQU1EICkKLSAgICAgICAgICAgICAg ICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfU1lTQ0FMTCwgcmVnc1szXSk7Ci0gICAgICAgIH0KLSAg ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXRfYml0KFg4Nl9GRUFUVVJFX1NZ U0NBTEwsIHJlZ3NbM10pOwotICAgICAgICB9Ci0gICAgICAgIGlmICggIWluZm8tPnB2aCApCi0g ICAgICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEFHRTFHQiwgcmVnc1szXSk7Ci0gICAg ICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9SRFRTQ1AsIHJlZ3NbM10pOwotCi0gICAgICAgIGNs ZWFyX2JpdChYODZfRkVBVFVSRV9TVk0sIHJlZ3NbMl0pOwotICAgICAgICBjbGVhcl9iaXQoWDg2 X0ZFQVRVUkVfT1NWVywgcmVnc1syXSk7Ci0gICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9J QlMsIHJlZ3NbMl0pOwotICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfU0tJTklULCByZWdz WzJdKTsKLSAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1dEVCwgcmVnc1syXSk7Ci0gICAg ICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9MV1AsIHJlZ3NbMl0pOwotICAgICAgICBjbGVhcl9i aXQoWDg2X0ZFQVRVUkVfTk9ERUlEX01TUiwgcmVnc1syXSk7Ci0gICAgICAgIGNsZWFyX2JpdChY ODZfRkVBVFVSRV9UT1BPRVhULCByZWdzWzJdKTsKKyAgICB7CisgICAgICAgIC8qIEhvc3QgdG9w b2xvZ3kgZXhwb3NlZCB0byBQViBndWVzdC4gIFByb3ZpZGUgaG9zdCBDTVBfTEVHQUNZIHZhbHVl LiAqLworICAgICAgICBib29sIGhvc3RfY21wX2xlZ2FjeSA9IHJlZ3NbMl0gJiBiaXRtYXNrb2Yo WDg2X0ZFQVRVUkVfQ01QX0xFR0FDWSk7CisKKyAgICAgICAgcmVnc1syXSA9IChpbmZvLT5mZWF0 dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX0xBSEZfTE0pXSAmCisgICAgICAgICAg ICAgICAgICAgfmJpdG1hc2tvZihYODZfRkVBVFVSRV9DTVBfTEVHQUNZKSk7CisgICAgICAgIHJl Z3NbM10gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX1NZU0NB TEwpXTsKKworICAgICAgICBpZiAoIGhvc3RfY21wX2xlZ2FjeSApCisgICAgICAgICAgICByZWdz WzJdIHw9IGJpdG1hc2tvZihYODZfRkVBVFVSRV9DTVBfTEVHQUNZKTsKKwogICAgICAgICBicmVh azsKKyAgICB9CiAKICAgICBjYXNlIDB4MDAwMDAwMDU6IC8qIE1PTklUT1IvTVdBSVQgKi8KICAg ICBjYXNlIDB4MDAwMDAwMGE6IC8qIEFyY2hpdGVjdHVyYWwgUGVyZm9ybWFuY2UgTW9uaXRvciBG ZWF0dXJlcyAqLwpAQCAtODMzLDYgKzY2OCw4NyBAQCB2b2lkIHhjX2NwdWlkX3RvX3N0cihjb25z dCB1bnNpZ25lZCBpbnQgKnJlZ3MsIGNoYXIgKipzdHJzKQogICAgIH0KIH0KIAorc3RhdGljIHZv aWQgc2FuaXRpc2VfZmVhdHVyZXNldChzdHJ1Y3QgY3B1aWRfZG9tYWluX2luZm8gKmluZm8pCit7 CisgICAgY29uc3QgdWludDMyX3QgZnNfc2l6ZSA9IHhjX2dldF9jcHVfZmVhdHVyZXNldF9zaXpl KCk7CisgICAgdWludDMyX3QgZGlzYWJsZWRfZmVhdHVyZXNbZnNfc2l6ZV07CisgICAgc3RhdGlj IGNvbnN0IHVpbnQzMl90IGRlZXBfZmVhdHVyZXNbXSA9IElOSVRfREVFUF9GRUFUVVJFUzsKKyAg ICB1bnNpZ25lZCBpbnQgaSwgYjsKKworICAgIGlmICggaW5mby0+aHZtICkKKyAgICB7CisgICAg ICAgIC8qIEhWTSBHdWVzdCAqLworCisgICAgICAgIGlmICggIWluZm8tPnBhZSApCisgICAgICAg ICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEFFLCBpbmZvLT5mZWF0dXJlc2V0KTsKKworICAg ICAgICBpZiAoICFpbmZvLT5uZXN0ZWRodm0gKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVh cl9iaXQoWDg2X0ZFQVRVUkVfU1ZNLCBpbmZvLT5mZWF0dXJlc2V0KTsKKyAgICAgICAgICAgIGNs ZWFyX2JpdChYODZfRkVBVFVSRV9WTVgsIGluZm8tPmZlYXR1cmVzZXQpOworICAgICAgICB9Cisg ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFBWIG9yIFBWSCBHdWVzdCAqLworCisg ICAgICAgIGlmICggIWluZm8tPnB2NjQgKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhcl9i aXQoWDg2X0ZFQVRVUkVfTE0sIGluZm8tPmZlYXR1cmVzZXQpOworICAgICAgICAgICAgaWYgKCBp bmZvLT52ZW5kb3IgIT0gVkVORE9SX0FNRCApCisgICAgICAgICAgICAgICAgY2xlYXJfYml0KFg4 Nl9GRUFUVVJFX1NZU0NBTEwsIGluZm8tPmZlYXR1cmVzZXQpOworICAgICAgICB9CisKKyAgICAg ICAgaWYgKCAhaW5mby0+cHZoICkKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJfYml0KFg4 Nl9GRUFUVVJFX1BTRSwgaW5mby0+ZmVhdHVyZXNldCk7CisgICAgICAgICAgICBjbGVhcl9iaXQo WDg2X0ZFQVRVUkVfUFNFMzYsIGluZm8tPmZlYXR1cmVzZXQpOworICAgICAgICAgICAgY2xlYXJf Yml0KFg4Nl9GRUFUVVJFX1BHRSwgaW5mby0+ZmVhdHVyZXNldCk7CisgICAgICAgICAgICBjbGVh cl9iaXQoWDg2X0ZFQVRVUkVfUEFHRTFHQiwgaW5mby0+ZmVhdHVyZXNldCk7CisgICAgICAgIH0K KyAgICB9CisKKyAgICBpZiAoIGluZm8tPnhmZWF0dXJlX21hc2sgPT0gMCApCisgICAgICAgIGNs ZWFyX2JpdChYODZfRkVBVFVSRV9YU0FWRSwgaW5mby0+ZmVhdHVyZXNldCk7CisKKyAgICAvKiBE aXNhYmxlIGRlZXAgZGVwZW5kZW5jaWVzIG9mIGRpc2FibGVkIGZlYXR1cmVzLiAqLworICAgIGZv ciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaXNhYmxlZF9mZWF0dXJlcyk7ICsraSApCisgICAg ICAgIGRpc2FibGVkX2ZlYXR1cmVzW2ldID0gfmluZm8tPmZlYXR1cmVzZXRbaV0gJiBkZWVwX2Zl YXR1cmVzW2ldOworCisgICAgZm9yICggYiA9IDA7IGIgPCBzaXplb2YoZGlzYWJsZWRfZmVhdHVy ZXMpICogQ0hBUl9CSVQ7ICsrYiApCisgICAgeworICAgICAgICBjb25zdCB1aW50MzJfdCAqZGZz OworCisgICAgICAgIGlmICggIXRlc3RfYml0KGIsIGRpc2FibGVkX2ZlYXR1cmVzKSB8fAorICAg ICAgICAgICAgICEoZGZzID0geGNfZ2V0X2ZlYXR1cmVfZGVlcF9kZXBzKGIpKSApCisgICAgICAg ICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRp c2FibGVkX2ZlYXR1cmVzKTsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mby0+ZmVh dHVyZXNldFtpXSAmPSB+ZGZzW2ldOworICAgICAgICAgICAgZGlzYWJsZWRfZmVhdHVyZXNbaV0g Jj0gfmRmc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoIGluZm8tPnZlbmRv ciApCisgICAgeworICAgIGNhc2UgVkVORE9SX0lOVEVMOgorICAgICAgICAvKiBJbnRlbCBjbGVh cnMgdGhlIGNvbW1vbiBiaXRzIGluIGUxZC4gKi8KKyAgICAgICAgaW5mby0+ZmVhdHVyZXNldFtm ZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9TWVNDQUxMKV0gJj0gfkNPTU1PTl8xRDsKKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIFZFTkRPUl9BTUQ6CisgICAgICAgIC8qIEFNRCBkdXBsaWNh dGVzIHRoZSBjb21tb24gYml0cyBiZXR3ZWVuIDFkIGFuZCBlMWQuICovCisgICAgICAgIGluZm8t PmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfU1lTQ0FMTCldID0KKyAgICAg ICAgICAgICgoaW5mby0+ZmVhdHVyZXNldFtmZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9GUFUp XSAmIENPTU1PTl8xRCkgfAorICAgICAgICAgICAgIChpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3 b3JkX29mKFg4Nl9GRUFUVVJFX1NZU0NBTEwpXSAmIH5DT01NT05fMUQpKTsKKyAgICAgICAgYnJl YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIGludCB4Y19j cHVpZF9hcHBseV9wb2xpY3koeGNfaW50ZXJmYWNlICp4Y2gsIGRvbWlkX3QgZG9taWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpmZWF0dXJlc2V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJfZmVhdHVyZXMpCkBAIC04NTYsNiArNzcyLDgg QEAgaW50IHhjX2NwdWlkX2FwcGx5X3BvbGljeSh4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBk b21pZCwKICAgICBlbHNlCiAgICAgICAgIGV4dF9tYXggPSAocmVnc1swXSA8PSBERUZfTUFYX0lO VEVMRVhUKSA/IHJlZ3NbMF0gOiBERUZfTUFYX0lOVEVMRVhUOwogCisgICAgc2FuaXRpc2VfZmVh dHVyZXNldCgmaW5mbyk7CisKICAgICBpbnB1dFswXSA9IDA7CiAgICAgaW5wdXRbMV0gPSBYRU5f Q1BVSURfSU5QVVRfVU5VU0VEOwogICAgIGZvciAoIDsgOyApCkBAIC0xMDI3LDkgKzk0NSw5IEBA IGludCB4Y19jcHVpZF9zZXQoCiAgICAgICAgICAgICAgICAgdmFsID0gcG9sdmFsOwogCiAgICAg ICAgICAgICBpZiAoIHZhbCApCi0gICAgICAgICAgICAgICAgc2V0X2JpdCgzMSAtIGosIHJlZ3Nb aV0pOworICAgICAgICAgICAgICAgIHNldF9mZWF0dXJlKDMxIC0gaiwgcmVnc1tpXSk7CiAgICAg ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2xlYXJfYml0KDMxIC0gaiwgcmVnc1tpXSk7 CisgICAgICAgICAgICAgICAgY2xlYXJfZmVhdHVyZSgzMSAtIGosIHJlZ3NbaV0pOwogCiAgICAg ICAgICAgICBjb25maWdfdHJhbnNmb3JtZWRbaV1bal0gPSBjb25maWdbaV1bal07CiAgICAgICAg ICAgICBpZiAoIGNvbmZpZ1tpXVtqXSA9PSAncycgKQotLSAKMi4xLjQKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=