From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v4 08/26] xen/x86: Generate deep dependencies of features Date: Wed, 23 Mar 2016 16:36:11 +0000 Message-ID: <1458750989-28967-9-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 , Jan Beulich List-Id: xen-devel@lists.xenproject.org U29tZSBmZWF0dXJlcyBkZXBlbmQgb24gb3RoZXIgZmVhdHVyZXMuICBXb3JraW5nIG91dCBhbmQg bWFpbnRhaW5pbmcgdGhlIGV4YWN0CmRlcGVuZGVuY3kgdHJlZSBpcyBjb21wbGljYXRlZCwgc28g aXQgaXMgZXhwcmVzc2VkIGluIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbgpzY3JpcHQuCgpBdCBy dW50aW1lLCBYZW4gbmVlZHMgdG8gYmUgZGlzYWJsZSBhbGwgZmVhdHVyZXMgd2hpY2ggYXJlIGRl cGVuZGVudCBvbiBhCmZlYXR1cmUgYmVpbmcgZGlzYWJsZWQuICBCZWNhdXNlIG9mIHRoZSBmbGF0 dGVuaW5nIHBlcmZvcm1lZCBhdCBjb21waWxlIHRpbWUsCnJ1bnRpbWUgY2FuIHVzZSBhIHNpbmds ZSBtYXNrIHRvIGRpc2FibGUgYWxsIGV2ZW50dWFsIGZlYXR1cmVzLgoKU2lnbmVkLW9mZi1ieTog QW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KLS0tCkNDOiBKYW4gQmV1 bGljaCA8SkJldWxpY2hAc3VzZS5jb20+Cgp2MjoKICogTmV3Lgp2MzoKICogVmFzdGx5IG1vcmUg cmVzZXJjaCBhbmQgY29tbWVudHMuCnY0OgogKiBFeHBhbmQgY29tbWl0IG1lc3NhZ2UuCiAqIE1v cmUgdHdlYWtzIHRvIHRoZSBkZXBlbmRlbmN5IHRyZWUuCiAqIEF2b2lkIGZvcl9lYWNoX3NldF9i aXQoKSB3YWxraW5nIG9mZiB0aGUgZW5kIG9mIGRpc2FibGVkX2ZlYXR1cmVzW10uCiAgIEV4cGFu ZGluZyBkaXNhYmxlZF9mZWF0dXJlc1tdIHR1cm5zIG91dCB0byBiZSBmYXIgbW9yZSBzaW1wbGUg dGhhbgogICBhdHRlbXB0aW5nIHRvIG9wZW5jb2RlIGZvcl9lYWNoX3NldF9iaXQoKQotLS0KIHhl bi9hcmNoL3g4Ni9jcHVpZC5jICAgICAgICB8ICA1NiArKysrKysrKysrKysrKysrKwogeGVuL2lu Y2x1ZGUvYXNtLXg4Ni9jcHVpZC5oIHwgICAyICsKIHhlbi90b29scy9nZW4tY3B1aWQucHkgICAg ICB8IDE0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMyBm aWxlcyBjaGFuZ2VkLCAyMDAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdp dCBhL3hlbi9hcmNoL3g4Ni9jcHVpZC5jIGIveGVuL2FyY2gveDg2L2NwdWlkLmMKaW5kZXggNDE0 MzlmOC4uZTFlMGU0NCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2NwdWlkLmMKKysrIGIveGVu L2FyY2gveDg2L2NwdWlkLmMKQEAgLTExLDYgKzExLDcgQEAgY29uc3QgdWludDMyX3Qgc3BlY2lh bF9mZWF0dXJlc1tdID0gSU5JVF9TUEVDSUFMX0ZFQVRVUkVTOwogc3RhdGljIGNvbnN0IHVpbnQz Ml90IF9faW5pdGNvbnN0IHB2X2ZlYXR1cmVtYXNrW10gPSBJTklUX1BWX0ZFQVRVUkVTOwogc3Rh dGljIGNvbnN0IHVpbnQzMl90IF9faW5pdGNvbnN0IGh2bV9zaGFkb3dfZmVhdHVyZW1hc2tbXSA9 IElOSVRfSFZNX1NIQURPV19GRUFUVVJFUzsKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBfX2luaXRj b25zdCBodm1faGFwX2ZlYXR1cmVtYXNrW10gPSBJTklUX0hWTV9IQVBfRkVBVFVSRVM7CitzdGF0 aWMgY29uc3QgdWludDMyX3QgX19pbml0Y29uc3QgZGVlcF9mZWF0dXJlc1tdID0gSU5JVF9ERUVQ X0ZFQVRVUkVTOwogCiB1aW50MzJfdCBfX3JlYWRfbW9zdGx5IHJhd19mZWF0dXJlc2V0W0ZTQ0FQ SU5UU107CiB1aW50MzJfdCBfX3JlYWRfbW9zdGx5IHB2X2ZlYXR1cmVzZXRbRlNDQVBJTlRTXTsK QEAgLTE4LDEyICsxOSwzNiBAQCB1aW50MzJfdCBfX3JlYWRfbW9zdGx5IGh2bV9mZWF0dXJlc2V0 W0ZTQ0FQSU5UU107CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzYW5pdGlzZV9mZWF0dXJlc2V0KHVp bnQzMl90ICpmcykKIHsKKyAgICAvKiBmb3JfZWFjaF9zZXRfYml0KCkgdXNlcyB1bnNpZ25lZCBs b25ncy4gIEV4dGVuZCB3aXRoIHplcm9lcy4gKi8KKyAgICB1aW50MzJfdCBkaXNhYmxlZF9mZWF0 dXJlc1sKKyAgICAgICAgUk9VTkRVUChGU0NBUElOVFMsIHNpemVvZih1bnNpZ25lZCBsb25nKS9z aXplb2YodWludDMyX3QpKV0gPSB7fTsKICAgICB1bnNpZ25lZCBpbnQgaTsKIAogICAgIGZvciAo IGkgPSAwOyBpIDwgRlNDQVBJTlRTOyArK2kgKQogICAgIHsKICAgICAgICAgLyogQ2xhbXAgdG8g a25vd24gbWFzay4gKi8KICAgICAgICAgZnNbaV0gJj0ga25vd25fZmVhdHVyZXNbaV07CisKKyAg ICAgICAgLyoKKyAgICAgICAgICogSWRlbnRpZnkgd2hpY2ggZmVhdHVyZXMgd2l0aCBkZWVwIGRl cGVuZGVuY2llcyBoYXZlIGJlZW4KKyAgICAgICAgICogZGlzYWJsZWQuCisgICAgICAgICAqLwor ICAgICAgICBkaXNhYmxlZF9mZWF0dXJlc1tpXSA9IH5mc1tpXSAmIGRlZXBfZmVhdHVyZXNbaV07 CisgICAgfQorCisgICAgZm9yX2VhY2hfc2V0X2JpdChpLCAodm9pZCAqKWRpc2FibGVkX2ZlYXR1 cmVzLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRpc2FibGVkX2ZlYXR1cmVzKSAqIDgp CisgICAgeworICAgICAgICBjb25zdCB1aW50MzJfdCAqZGZzID0gbG9va3VwX2RlZXBfZGVwcyhp KTsKKyAgICAgICAgdW5zaWduZWQgaW50IGo7CisKKyAgICAgICAgQVNTRVJUKGRmcyk7IC8qIGRl ZXBfZmVhdHVyZXNbXSBzaG91bGQgZ3VhcmVudGVlIHRoaXMuICovCisKKyAgICAgICAgZm9yICgg aiA9IDA7IGogPCBGU0NBUElOVFM7ICsraiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZzW2pd ICY9IH5kZnNbal07CisgICAgICAgICAgICBkaXNhYmxlZF9mZWF0dXJlc1tqXSAmPSB+ZGZzW2pd OworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoKQEAgLTE2NCw2ICsxODksMzYgQEAgdm9pZCBf X2luaXQgY2FsY3VsYXRlX2ZlYXR1cmVzZXRzKHZvaWQpCiAgICAgY2FsY3VsYXRlX2h2bV9mZWF0 dXJlc2V0KCk7CiB9CiAKK2NvbnN0IHVpbnQzMl90ICogX19pbml0IGxvb2t1cF9kZWVwX2RlcHMo dWludDMyX3QgZmVhdHVyZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAg dWludDMyX3QgZmVhdHVyZTsKKyAgICAgICAgdWludDMyX3QgZnNbRlNDQVBJTlRTXTsKKyAgICB9 IGRlZXBfZGVwc1tdIF9faW5pdGNvbnN0ID0gSU5JVF9ERUVQX0RFUFM7CisgICAgdW5zaWduZWQg aW50IHN0YXJ0ID0gMCwgZW5kID0gQVJSQVlfU0laRShkZWVwX2RlcHMpOworCisgICAgQlVJTERf QlVHX09OKEFSUkFZX1NJWkUoZGVlcF9kZXBzKSAhPSBOUl9ERUVQX0RFUFMpOworCisgICAgLyog RmFzdCBlYXJseSBleGl0LiAqLworICAgIGlmICggIXRlc3RfYml0KGZlYXR1cmUsIGRlZXBfZmVh dHVyZXMpICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBkZWVwX2RlcHNbXSBpcyBz b3J0ZWQuICBQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaC4gKi8KKyAgICB3aGlsZSAoIHN0YXJ0IDwg ZW5kICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtaWQgPSBzdGFydCArICgoZW5kIC0g c3RhcnQpIC8gMik7CisKKyAgICAgICAgaWYgKCBkZWVwX2RlcHNbbWlkXS5mZWF0dXJlID4gZmVh dHVyZSApCisgICAgICAgICAgICBlbmQgPSBtaWQ7CisgICAgICAgIGVsc2UgaWYgKCBkZWVwX2Rl cHNbbWlkXS5mZWF0dXJlIDwgZmVhdHVyZSApCisgICAgICAgICAgICBzdGFydCA9IG1pZCArIDE7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBkZWVwX2RlcHNbbWlkXS5mczsKKyAg ICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVf dW51c2VkIGJ1aWxkX2Fzc2VydGlvbnModm9pZCkKIHsKICAgICBCVUlMRF9CVUdfT04oQVJSQVlf U0laRShrbm93bl9mZWF0dXJlcykgIT0gRlNDQVBJTlRTKTsKQEAgLTE3MSw2ICsyMjYsNyBAQCBz dGF0aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQgYnVpbGRfYXNzZXJ0aW9ucyh2b2lkKQog ICAgIEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHB2X2ZlYXR1cmVtYXNrKSAhPSBGU0NBUElOVFMp OwogICAgIEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGh2bV9zaGFkb3dfZmVhdHVyZW1hc2spICE9 IEZTQ0FQSU5UUyk7CiAgICAgQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoaHZtX2hhcF9mZWF0dXJl bWFzaykgIT0gRlNDQVBJTlRTKTsKKyAgICBCVUlMRF9CVUdfT04oQVJSQVlfU0laRShkZWVwX2Zl YXR1cmVzKSAhPSBGU0NBUElOVFMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv YXNtLXg4Ni9jcHVpZC5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC5oCmluZGV4IDUwNDFi Y2QuLjQ3MjU2NzIgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1aWQuaAorKysg Yi94ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmgKQEAgLTI5LDYgKzI5LDggQEAgZXh0ZXJuIHVp bnQzMl90IGh2bV9mZWF0dXJlc2V0W0ZTQ0FQSU5UU107CiAKIHZvaWQgY2FsY3VsYXRlX2ZlYXR1 cmVzZXRzKHZvaWQpOwogCitjb25zdCB1aW50MzJfdCAqbG9va3VwX2RlZXBfZGVwcyh1aW50MzJf dCBmZWF0dXJlKTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qICFfX1g4 Nl9DUFVJRF9IX18gKi8KIApkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2dlbi1jcHVpZC5weSBiL3hl bi90b29scy9nZW4tY3B1aWQucHkKaW5kZXggNGZkNjAzZC4uMWNlYzVkOCAxMDA3NTUKLS0tIGEv eGVuL3Rvb2xzL2dlbi1jcHVpZC5weQorKysgYi94ZW4vdG9vbHMvZ2VuLWNwdWlkLnB5CkBAIC0x NDQsNiArMTQ0LDEzMSBAQCBkZWYgY3J1bmNoX251bWJlcnMoc3RhdGUpOgogICAgIHN0YXRlLmh2 bV9zaGFkb3cgPSBmZWF0dXJlc2V0X3RvX3VpbnQzMnMoc3RhdGUucmF3X2h2bV9zaGFkb3csIG5y X2VudHJpZXMpCiAgICAgc3RhdGUuaHZtX2hhcCA9IGZlYXR1cmVzZXRfdG9fdWludDMycyhzdGF0 ZS5yYXdfaHZtX2hhcCwgbnJfZW50cmllcykKIAorICAgICMKKyAgICAjIEZlYXR1cmUgZGVwZW5k ZW5jeSBpbmZvcm1hdGlvbi4KKyAgICAjCisgICAgIyAhISEgV0FSTklORyAhISEKKyAgICAjCisg ICAgIyBBIGxvdCBvZiB0aGlzIGluZm9ybWF0aW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgd3JpdHRl biB0ZXh0IG9mIHZlbmRvcnMKKyAgICAjIHNvZnR3YXJlIG1hbnVhbHMsIHJhdGhlciB0aGFuIGRp cmVjdGx5IGZyb20gYSBzdGF0ZW1lbnQuICBBcyBzdWNoLCBpdAorICAgICMgZG9lcyBjb250YWlu IGd1ZXNzd29yayBhbmQgYXNzdW1wdGlvbnMsIGFuZCBtYXkgbm90IGFjY3VyYXRlbHkgbWF0Y2gK KyAgICAjIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucy4KKyAgICAjCisgICAgIyBJdCBpcyBob3dl dmVyIGRlc2lnbmVkIHRvIGNyZWF0ZSBhbiBlbmQgcmVzdWx0IGZvciBhIGd1ZXN0IHdoaWNoIGRv ZXMKKyAgICAjIHBsYXVzaWJseSBtYXRjaCByZWFsIGhhcmR3YXJlLgorICAgICMKKyAgICAjICEh ISBXQVJOSU5HICEhIQorICAgICMKKyAgICAjIFRoZSBmb3JtYXQgb2YgdGhpcyBkaWN0aW9uYXJ5 IGlzIHRoYXQgdGhlIGZlYXR1cmUgaW4gdGhlIGtleSBpcyBhIGRpcmVjdAorICAgICMgcHJlcmVx dWlzaXRlIG9mIGVhY2ggZmVhdHVyZSBpbiB0aGUgdmFsdWUuCisgICAgIworICAgICMgVGhlIGZp cnN0IGNvbnNpZGVyYXRpb24gaXMgYWJvdXQgd2hpY2ggZnVuY3Rpb25hbGl0eSBpcyBwaHlzaWNh bGx5IGJ1aWx0CisgICAgIyBvbiB0b3Agb2Ygb3RoZXIgZmVhdHVyZXMuICBUaGUgc2Vjb25kIGNv bnNpZGVyYXRpb24sIHdoaWNoIGlzIG1vcmUKKyAgICAjIHN1YmplY3RpdmUsIGlzIHdoZXRoZXIg cmVhbCBoYXJkd2FyZSB3b3VsZCBldmVyIGJlIGZvdW5kIHN1cHBvcnRpbmcKKyAgICAjIGZlYXR1 cmUgWCBidXQgbm90IFkuCisgICAgIworICAgIGRlcHMgPSB7CisgICAgICAgICMgRlBVIGlzIHRh a2VuIHRvIG1lYW4gc3VwcG9ydCBmb3IgdGhlIHg4NyByZWdpc2VycyBhcyB3ZWxsIGFzIHRoZQor ICAgICAgICAjIGluc3RydWN0aW9ucy4gIE1NWCBpcyBkb2N1bWVudGVkIHRvIGFsaWFzIHRoZSAl TU0gcmVnaXN0ZXJzIG92ZXIgdGhlCisgICAgICAgICMgeDg3ICVTVCByZWdpc3RlcnMgaW4gaGFy ZHdhcmUuCisgICAgICAgIEZQVTogW01NWF0sCisKKyAgICAgICAgIyBUaGUgUFNFMzYgZmVhdHVy ZSBpbmRpY2F0ZXMgdGhhdCByZXNlcnZlZCBiaXRzIGluIGEgUFNFIHN1cGVycGFnZQorICAgICAg ICAjIG1heSBiZSB1c2VkIGFzIGV4dHJhIHBoeXNpY2FsIGFkZHJlc3MgYml0cy4KKyAgICAgICAg UFNFOiBbUFNFMzZdLAorCisgICAgICAgICMgRW50ZXJpbmcgTG9uZyBNb2RlIHJlcXVpcmVzIHRo YXQgJUNSNC5QQUUgaXMgc2V0LiAgVGhlIE5YIGFuZCBQS1UKKyAgICAgICAgIyBwYWdldGFibGUg Yml0cyBhcmUgb25seSByZXByZXNlbnRhYmxlIGluIHRoZSA2NGJpdCBQVEUgZm9ybWF0CisgICAg ICAgICMgb2ZmZXJlZCBieSBQQUUuCisgICAgICAgIFBBRTogW0xNLCBOWCwgUEtVXSwKKworICAg ICAgICAjIEFQSUMgaXMgc3BlY2lhbCwgYnV0IFgyQVBJQyBkb2VzIGRlcGVuZCBvbiBBUElDIGJl aW5nIGF2YWlsYWJsZSBpbgorICAgICAgICAjIHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAgQVBJ QzogW1gyQVBJQ10sCisKKyAgICAgICAgIyBBTUQgYnVpbHQgTU1YRXh0ZW50aW9ucyBhbmQgM0RO b3cgYXMgZXh0ZW50aW9ucyB0byBNTVguCisgICAgICAgIE1NWDogW01NWEVYVCwgXzNETk9XXSwK KworICAgICAgICAjIFRoZSBGWFNBVkUvRlhSU1RPUiBpbnN0cnVjdGlvbnMgd2VyZSBpbnRyb2R1 Y2VkIGludG8gaGFyZHdhcmUgYmVmb3JlCisgICAgICAgICMgU1NFLCB3aGljaCBpcyB3aHkgdGhl eSBiZWhhdmUgZGlmZmVyZW50bHkgYmFzZWQgb24gJUNSNC5PU0ZYU0FWRSBhbmQKKyAgICAgICAg IyBoYXZlIHRoZWlyIG93biBmZWF0dXJlIGJpdC4gIEFNRCBob3dldmVyIGludHJvZHVjZSB0aGUg RmFzdCBGWFNSCisgICAgICAgICMgZmVhdHVyZSBhcyBhbiBvcHRpbWlzYXRpb24uCisgICAgICAg IEZYU1I6IFtGRlhTUiwgU1NFXSwKKworICAgICAgICAjIFNTRSBpcyB0YWtlbiB0byBtZWFuIHN1 cHBvcnQgZm9yIHRoZSAlWE1NIHJlZ2lzdGVycyBhcyB3ZWxsIGFzIHRoZQorICAgICAgICAjIGlu c3RydWN0aW9ucy4KKyAgICAgICAgU1NFOiBbU1NFMl0sCisKKyAgICAgICAgIyBTU0UyIHdhcyBh bHNvIHJlLXNwZWNpZmllZCBhcyBjb3JlIGZvciA2NGJpdC4gIFRoZSBBRVNOSSBhbmQgU0hBCisg ICAgICAgICMgaW5zdHJ1Y3Rpb24gZ3JvdXBzIGFyZSBkb2N1bWVudGVkIHRvIHJlcXVpcmUgY2hl Y2tpbmcgZm9yIFNTRTIKKyAgICAgICAgIyBzdXBwb3J0IGFzIGEgcHJlcmVxdWlzaXRlLgorICAg ICAgICBTU0UyOiBbU1NFMywgTE0sIEFFU05JLCBTSEFdLAorCisgICAgICAgICMgQU1EIEsxMCBw cm9jZXNzb3JzIGhhcyBTU0UzIGFuZCBTU0U0QS4gIEJvYmNhdC9CYXJjZWxvbmEgcHJvY2Vzc29y cworICAgICAgICAjIHN1YnNlcXVlbnRseSBpbmNsdWRlZCBTU1NFMywgYW5kIEJ1bGxkb3plciBz dWJzZXF1ZW50bHkgaW5jbHVkZWQKKyAgICAgICAgIyBTU0U0XzEuICBJbnRlbCBoYXZlIG5ldmVy IHNoaXBwZWQgU1NFNEEuCisgICAgICAgIFNTRTM6IFtTU1NFMywgU1NFNF8xLCBTU0U0XzIsIFNT RTRBXSwKKworICAgICAgICAjIFRoZSBJTlZQQ0lEIGluc3RydWN0aW9uIGRlcGVuZHMgb24gUENJ RCBpbmZyYXN0cnVjdHVyZSBiZWluZworICAgICAgICAjIGF2YWlsYWJsZS4KKyAgICAgICAgUENJ RDogW0lOVlBDSURdLAorCisgICAgICAgICMgWFNBVkUgaXMgYW4gZXh0cmEgc2V0IG9mIGluc3Ry dWN0aW9ucyBmb3Igc3RhdGUgbWFuYWdlbWVudCwgYnV0CisgICAgICAgICMgZG9lc24ndCBjb25z dGl0dWUgbmV3IHN0YXRlIGl0c2VsZi4gIFNvbWUgb2YgdGhlIGRlcGVuZGVudCBmZWF0dXJlcwor ICAgICAgICAjIGFyZSBpbnN0cnVjdGlvbnMgYnVpbHQgb24gdG9wIG9mIGJhc2UgWFNBVkUsIHdo aWxlIG90aGVycyBhcmUgbmV3CisgICAgICAgICMgaW5zdHJ1Y3Rpb24gZ3JvdXBzIHdoaWNoIGFy ZSBzcGVjaWZpZWQgdG8gcmVxdWlyZSBYU0FWRSBmb3Igc3RhdGUKKyAgICAgICAgIyBtYW5hZ2Vt ZW50LgorICAgICAgICBYU0FWRTogW1hTQVZFT1BULCBYU0FWRUMsIFhHRVRCVjEsIFhTQVZFUywK KyAgICAgICAgICAgICAgICBBVlgsIE1QWCwgUEtVLCBMV1BdLAorCisgICAgICAgICMgQVZYIGlz IHRha2VuIHRvIG1lYW4gaGFyZHdhcmUgc3VwcG9ydCBmb3IgVkVYIGVuY29kZWQgaW5zdHJ1Y3Rp b25zLAorICAgICAgICAjIDI1NmJpdCByZWdpc3RlcnMsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRo ZW1zZWx2ZXMuICBFYWNoIG9mIHRoZXNlCisgICAgICAgICMgc3Vic2VxdWVudCBpbnN0cnVjdGlv biBncm91cHMgbWF5IG9ubHkgYmUgVkVYIGVuY29kZWQuCisgICAgICAgIEFWWDogW0ZNQSwgRk1B NCwgRjE2QywgQVZYMiwgWE9QXSwKKworICAgICAgICAjIENYMTYgaXMgb25seSBlbmNvZGFibGUg aW4gTG9uZyBNb2RlLiAgTEFIRl9MTSBpbmRpY2F0ZXMgdGhhdCB0aGUKKyAgICAgICAgIyBTQUhG L0xBSEYgaW5zdHJ1Y3Rpb25zIGFyZSByZWludHJvZHVjZWQgaW4gTG9uZyBNb2RlLiAgMUdCCisg ICAgICAgICMgc3VwZXJwYWdlcyBhbmQgUENJRCBhcmUgb25seSBhdmFpbGFibGUgaW4gNCBsZXZl bCBwYWdpbmcuCisgICAgICAgIExNOiBbQ1gxNiwgUENJRCwgTEFIRl9MTSwgUEFHRTFHQl0sCisK KyAgICAgICAgIyBBTUQgSzYtMisgYW5kIEs2LUlJSSBwcm9jZXNzb3JzIHNoaXBwZWQgd2l0aCAz RE5vdyssIGJleW9uZCB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCAzRE5vdyBpbiB0aGUgZWFybGll ciBLNiBwcm9jZXNzb3JzLgorICAgICAgICBfM0ROT1c6IFtfM0ROT1dFWFRdLAorICAgIH0KKwor ICAgIGRlZXBfZmVhdHVyZXMgPSB0dXBsZShzb3J0ZWQoZGVwcy5rZXlzKCkpKQorICAgIHN0YXRl LmRlZXBfZGVwcyA9IHt9CisKKyAgICBmb3IgZmVhdCBpbiBkZWVwX2ZlYXR1cmVzOgorCisgICAg ICAgIHNlZW4gPSBbZmVhdF0KKyAgICAgICAgdG9fcHJvY2VzcyA9IGxpc3QoZGVwc1tmZWF0XSkK KworICAgICAgICB3aGlsZSBsZW4odG9fcHJvY2Vzcyk6CisKKyAgICAgICAgICAgICMgVG8gZGVi dWcsIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOgorICAgICAgICAgICAgIyBkZWYgcmVw bChsKToKKyAgICAgICAgICAgICMgICAgIHJldHVybiAiWyIgKyAiLCAiLmpvaW4oKHN0YXRlLm5h bWVzW3hdIGZvciB4IGluIGwpKSArICJdIgorICAgICAgICAgICAgIyBwcmludCA+PnN5cy5zdGRl cnIsICJGZWF0dXJlICVzLCBzZWVuICVzLCB0b19wcm9jZXNzICVzICIgJSBcCisgICAgICAgICAg ICAjICAgICAoc3RhdGUubmFtZXNbZmVhdF0sIHJlcGwoc2VlbiksIHJlcGwodG9fcHJvY2Vzcykp CisKKyAgICAgICAgICAgIGYgPSB0b19wcm9jZXNzLnBvcCgwKQorCisgICAgICAgICAgICBpZiBm IGluIHNlZW46CisgICAgICAgICAgICAgICAgcmFpc2UgRmFpbCgiRVJST1I6IEN5Y2xlIGZvdW5k IHdpdGggJXMgd2hlbiBwcm9jZXNzaW5nICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg JSAoc3RhdGUubmFtZXNbZl0sIHN0YXRlLm5hbWVzW2ZlYXRdKSkKKworICAgICAgICAgICAgc2Vl bi5hcHBlbmQoZikKKyAgICAgICAgICAgIHRvX3Byb2Nlc3MgPSBsaXN0KHNldCh0b19wcm9jZXNz ICsgZGVwcy5nZXQoZiwgW10pKSkKKworICAgICAgICBzdGF0ZS5kZWVwX2RlcHNbZmVhdF0gPSBz ZWVuWzE6XQorCisgICAgc3RhdGUuZGVlcF9mZWF0dXJlcyA9IGZlYXR1cmVzZXRfdG9fdWludDMy cyhkZXBzLmtleXMoKSwgbnJfZW50cmllcykKKyAgICBzdGF0ZS5ucl9kZWVwX2RlcHMgPSBsZW4o c3RhdGUuZGVlcF9kZXBzLmtleXMoKSkKKworICAgIGZvciBrLCB2IGluIHN0YXRlLmRlZXBfZGVw cy5pdGVyaXRlbXMoKToKKyAgICAgICAgc3RhdGUuZGVlcF9kZXBzW2tdID0gZmVhdHVyZXNldF90 b191aW50MzJzKHYsIG5yX2VudHJpZXMpCisKIAogZGVmIHdyaXRlX3Jlc3VsdHMoc3RhdGUpOgog ICAgIHN0YXRlLm91dHB1dC53cml0ZSgKQEAgLTE3MCw2ICsyOTUsMTIgQEAgZGVmIHdyaXRlX3Jl c3VsdHMoc3RhdGUpOgogI2RlZmluZSBJTklUX0hWTV9TSEFET1dfRkVBVFVSRVMgeyBcXFxuJXNc bn0KIAogI2RlZmluZSBJTklUX0hWTV9IQVBfRkVBVFVSRVMgeyBcXFxuJXNcbn0KKworI2RlZmlu ZSBOUl9ERUVQX0RFUFMgJXNVCisKKyNkZWZpbmUgSU5JVF9ERUVQX0ZFQVRVUkVTIHsgXFxcbiVz XG59CisKKyNkZWZpbmUgSU5JVF9ERUVQX0RFUFMgeyBcXAogIiIiICUgKHN0YXRlLm5yX2VudHJp ZXMsCiAgICAgICAgc3RhdGUuY29tbW9uXzFkLAogICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRl Lmtub3duLCA0KSwKQEAgLTE3NywxMCArMzA4LDIwIEBAIGRlZiB3cml0ZV9yZXN1bHRzKHN0YXRl KToKICAgICAgICBmb3JtYXRfdWludDMycyhzdGF0ZS5wdiwgNCksCiAgICAgICAgZm9ybWF0X3Vp bnQzMnMoc3RhdGUuaHZtX3NoYWRvdywgNCksCiAgICAgICAgZm9ybWF0X3VpbnQzMnMoc3RhdGUu aHZtX2hhcCwgNCksCisgICAgICAgc3RhdGUubnJfZGVlcF9kZXBzLAorICAgICAgIGZvcm1hdF91 aW50MzJzKHN0YXRlLmRlZXBfZmVhdHVyZXMsIDQpLAogICAgICAgICkpCiAKKyAgICBmb3IgZGVw IGluIHNvcnRlZChzdGF0ZS5kZWVwX2RlcHMua2V5cygpKToKKyAgICAgICAgc3RhdGUub3V0cHV0 LndyaXRlKAorICAgICAgICAgICAgIiAgICB7ICUjeFUsIC8qICVzICovIHsgXFxcbiVzXG4gICAg fSwgfSwgXFxcbiIKKyAgICAgICAgICAgICUgKGRlcCwgc3RhdGUubmFtZXNbZGVwXSwKKyAgICAg ICAgICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRlLmRlZXBfZGVwc1tkZXBdLCA4KQorICAgICAg ICAgICApKQorCiAgICAgc3RhdGUub3V0cHV0LndyaXRlKAotIiIiCisiIiJ9CisKICNlbmRpZiAv KiBfX1hFTl9YODZfX0ZFQVRVUkVTRVRfREFUQV9fICovCiAiIiIpCiAKLS0gCjIuMS40CgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK