From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v5 03/21] xen/x86: Generate deep dependencies of features Date: Thu, 7 Apr 2016 12:57:08 +0100 Message-ID: <1460030246-30153-4-git-send-email-andrew.cooper3@citrix.com> References: <1460030246-30153-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: <1460030246-30153-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 dGhhbgogICBhdHRlbXB0aW5nIHRvIG9wZW5jb2RlIGZvcl9lYWNoX3NldF9iaXQoKQp2NToKICog RnVydGhlciB0d2Vha2luZyBvZiB0aGUgU1NFKiBkZXBlbmRlbmNpZXMuCi0tLQogeGVuL2FyY2gv eDg2L2NwdWlkLmMgICAgICAgIHwgIDU2ICsrKysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2Fz bS14ODYvY3B1aWQuaCB8ICAgMiArCiB4ZW4vdG9vbHMvZ2VuLWNwdWlkLnB5ICAgICAgfCAxNTMg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDMgZmlsZXMgY2hh bmdlZCwgMjEwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS94ZW4v YXJjaC94ODYvY3B1aWQuYyBiL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCmluZGV4IDQxNDM5ZjguLmUx ZTBlNDQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCisrKyBiL3hlbi9hcmNoL3g4 Ni9jcHVpZC5jCkBAIC0xMSw2ICsxMSw3IEBAIGNvbnN0IHVpbnQzMl90IHNwZWNpYWxfZmVhdHVy ZXNbXSA9IElOSVRfU1BFQ0lBTF9GRUFUVVJFUzsKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBfX2lu aXRjb25zdCBwdl9mZWF0dXJlbWFza1tdID0gSU5JVF9QVl9GRUFUVVJFUzsKIHN0YXRpYyBjb25z dCB1aW50MzJfdCBfX2luaXRjb25zdCBodm1fc2hhZG93X2ZlYXR1cmVtYXNrW10gPSBJTklUX0hW TV9TSEFET1dfRkVBVFVSRVM7CiBzdGF0aWMgY29uc3QgdWludDMyX3QgX19pbml0Y29uc3QgaHZt X2hhcF9mZWF0dXJlbWFza1tdID0gSU5JVF9IVk1fSEFQX0ZFQVRVUkVTOworc3RhdGljIGNvbnN0 IHVpbnQzMl90IF9faW5pdGNvbnN0IGRlZXBfZmVhdHVyZXNbXSA9IElOSVRfREVFUF9GRUFUVVJF UzsKIAogdWludDMyX3QgX19yZWFkX21vc3RseSByYXdfZmVhdHVyZXNldFtGU0NBUElOVFNdOwog dWludDMyX3QgX19yZWFkX21vc3RseSBwdl9mZWF0dXJlc2V0W0ZTQ0FQSU5UU107CkBAIC0xOCwx MiArMTksMzYgQEAgdWludDMyX3QgX19yZWFkX21vc3RseSBodm1fZmVhdHVyZXNldFtGU0NBUElO VFNdOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2FuaXRpc2VfZmVhdHVyZXNldCh1aW50MzJfdCAq ZnMpCiB7CisgICAgLyogZm9yX2VhY2hfc2V0X2JpdCgpIHVzZXMgdW5zaWduZWQgbG9uZ3MuICBF eHRlbmQgd2l0aCB6ZXJvZXMuICovCisgICAgdWludDMyX3QgZGlzYWJsZWRfZmVhdHVyZXNbCisg ICAgICAgIFJPVU5EVVAoRlNDQVBJTlRTLCBzaXplb2YodW5zaWduZWQgbG9uZykvc2l6ZW9mKHVp bnQzMl90KSldID0ge307CiAgICAgdW5zaWduZWQgaW50IGk7CiAKICAgICBmb3IgKCBpID0gMDsg aSA8IEZTQ0FQSU5UUzsgKytpICkKICAgICB7CiAgICAgICAgIC8qIENsYW1wIHRvIGtub3duIG1h c2suICovCiAgICAgICAgIGZzW2ldICY9IGtub3duX2ZlYXR1cmVzW2ldOworCisgICAgICAgIC8q CisgICAgICAgICAqIElkZW50aWZ5IHdoaWNoIGZlYXR1cmVzIHdpdGggZGVlcCBkZXBlbmRlbmNp ZXMgaGF2ZSBiZWVuCisgICAgICAgICAqIGRpc2FibGVkLgorICAgICAgICAgKi8KKyAgICAgICAg ZGlzYWJsZWRfZmVhdHVyZXNbaV0gPSB+ZnNbaV0gJiBkZWVwX2ZlYXR1cmVzW2ldOworICAgIH0K KworICAgIGZvcl9lYWNoX3NldF9iaXQoaSwgKHZvaWQgKilkaXNhYmxlZF9mZWF0dXJlcywKKyAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihkaXNhYmxlZF9mZWF0dXJlcykgKiA4KQorICAgIHsK KyAgICAgICAgY29uc3QgdWludDMyX3QgKmRmcyA9IGxvb2t1cF9kZWVwX2RlcHMoaSk7CisgICAg ICAgIHVuc2lnbmVkIGludCBqOworCisgICAgICAgIEFTU0VSVChkZnMpOyAvKiBkZWVwX2ZlYXR1 cmVzW10gc2hvdWxkIGd1YXJlbnRlZSB0aGlzLiAqLworCisgICAgICAgIGZvciAoIGogPSAwOyBq IDwgRlNDQVBJTlRTOyArK2ogKQorICAgICAgICB7CisgICAgICAgICAgICBmc1tqXSAmPSB+ZGZz W2pdOworICAgICAgICAgICAgZGlzYWJsZWRfZmVhdHVyZXNbal0gJj0gfmRmc1tqXTsKKyAgICAg ICAgfQogICAgIH0KIAogICAgIC8qCkBAIC0xNjQsNiArMTg5LDM2IEBAIHZvaWQgX19pbml0IGNh bGN1bGF0ZV9mZWF0dXJlc2V0cyh2b2lkKQogICAgIGNhbGN1bGF0ZV9odm1fZmVhdHVyZXNldCgp OwogfQogCitjb25zdCB1aW50MzJfdCAqIF9faW5pdCBsb29rdXBfZGVlcF9kZXBzKHVpbnQzMl90 IGZlYXR1cmUpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIHVpbnQzMl90 IGZlYXR1cmU7CisgICAgICAgIHVpbnQzMl90IGZzW0ZTQ0FQSU5UU107CisgICAgfSBkZWVwX2Rl cHNbXSBfX2luaXRjb25zdCA9IElOSVRfREVFUF9ERVBTOworICAgIHVuc2lnbmVkIGludCBzdGFy dCA9IDAsIGVuZCA9IEFSUkFZX1NJWkUoZGVlcF9kZXBzKTsKKworICAgIEJVSUxEX0JVR19PTihB UlJBWV9TSVpFKGRlZXBfZGVwcykgIT0gTlJfREVFUF9ERVBTKTsKKworICAgIC8qIEZhc3QgZWFy bHkgZXhpdC4gKi8KKyAgICBpZiAoICF0ZXN0X2JpdChmZWF0dXJlLCBkZWVwX2ZlYXR1cmVzKSAp CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogZGVlcF9kZXBzW10gaXMgc29ydGVkLiAg UGVyZm9ybSBhIGJpbmFyeSBzZWFyY2guICovCisgICAgd2hpbGUgKCBzdGFydCA8IGVuZCApCisg ICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbWlkID0gc3RhcnQgKyAoKGVuZCAtIHN0YXJ0KSAv IDIpOworCisgICAgICAgIGlmICggZGVlcF9kZXBzW21pZF0uZmVhdHVyZSA+IGZlYXR1cmUgKQor ICAgICAgICAgICAgZW5kID0gbWlkOworICAgICAgICBlbHNlIGlmICggZGVlcF9kZXBzW21pZF0u ZmVhdHVyZSA8IGZlYXR1cmUgKQorICAgICAgICAgICAgc3RhcnQgPSBtaWQgKyAxOworICAgICAg ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZGVlcF9kZXBzW21pZF0uZnM7CisgICAgfQorCisg ICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBi dWlsZF9hc3NlcnRpb25zKHZvaWQpCiB7CiAgICAgQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoa25v d25fZmVhdHVyZXMpICE9IEZTQ0FQSU5UUyk7CkBAIC0xNzEsNiArMjI2LDcgQEAgc3RhdGljIHZv aWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGJ1aWxkX2Fzc2VydGlvbnModm9pZCkKICAgICBCVUlM RF9CVUdfT04oQVJSQVlfU0laRShwdl9mZWF0dXJlbWFzaykgIT0gRlNDQVBJTlRTKTsKICAgICBC VUlMRF9CVUdfT04oQVJSQVlfU0laRShodm1fc2hhZG93X2ZlYXR1cmVtYXNrKSAhPSBGU0NBUElO VFMpOwogICAgIEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGh2bV9oYXBfZmVhdHVyZW1hc2spICE9 IEZTQ0FQSU5UUyk7CisgICAgQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZGVlcF9mZWF0dXJlcykg IT0gRlNDQVBJTlRTKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYv Y3B1aWQuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1aWQuaAppbmRleCA1MDQxYmNkLi40NzI1 NjcyIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmgKKysrIGIveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9jcHVpZC5oCkBAIC0yOSw2ICsyOSw4IEBAIGV4dGVybiB1aW50MzJfdCBo dm1fZmVhdHVyZXNldFtGU0NBUElOVFNdOwogCiB2b2lkIGNhbGN1bGF0ZV9mZWF0dXJlc2V0cyh2 b2lkKTsKIAorY29uc3QgdWludDMyX3QgKmxvb2t1cF9kZWVwX2RlcHModWludDMyX3QgZmVhdHVy ZSk7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiAhX19YODZfQ1BVSURf SF9fICovCiAKZGlmZiAtLWdpdCBhL3hlbi90b29scy9nZW4tY3B1aWQucHkgYi94ZW4vdG9vbHMv Z2VuLWNwdWlkLnB5CmluZGV4IGY5NzFhYjIuLjU3NTMzZGUgMTAwNzU1Ci0tLSBhL3hlbi90b29s cy9nZW4tY3B1aWQucHkKKysrIGIveGVuL3Rvb2xzL2dlbi1jcHVpZC5weQpAQCAtMTQ0LDYgKzE0 NCwxNDEgQEAgZGVmIGNydW5jaF9udW1iZXJzKHN0YXRlKToKICAgICBzdGF0ZS5odm1fc2hhZG93 ID0gZmVhdHVyZXNldF90b191aW50MzJzKHN0YXRlLnJhd19odm1fc2hhZG93LCBucl9lbnRyaWVz KQogICAgIHN0YXRlLmh2bV9oYXAgPSBmZWF0dXJlc2V0X3RvX3VpbnQzMnMoc3RhdGUucmF3X2h2 bV9oYXAsIG5yX2VudHJpZXMpCiAKKyAgICAjCisgICAgIyBGZWF0dXJlIGRlcGVuZGVuY3kgaW5m b3JtYXRpb24uCisgICAgIworICAgICMgISEhIFdBUk5JTkcgISEhCisgICAgIworICAgICMgQSBs b3Qgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIHdyaXR0ZW4gdGV4dCBv ZiB2ZW5kb3JzCisgICAgIyBzb2Z0d2FyZSBtYW51YWxzLCByYXRoZXIgdGhhbiBkaXJlY3RseSBm cm9tIGEgc3RhdGVtZW50LiAgQXMgc3VjaCwgaXQKKyAgICAjIGRvZXMgY29udGFpbiBndWVzc3dv cmsgYW5kIGFzc3VtcHRpb25zLCBhbmQgbWF5IG5vdCBhY2N1cmF0ZWx5IG1hdGNoCisgICAgIyBo YXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMuCisgICAgIworICAgICMgSXQgaXMgaG93ZXZlciBkZXNp Z25lZCB0byBjcmVhdGUgYW4gZW5kIHJlc3VsdCBmb3IgYSBndWVzdCB3aGljaCBkb2VzCisgICAg IyBwbGF1c2libHkgbWF0Y2ggcmVhbCBoYXJkd2FyZS4KKyAgICAjCisgICAgIyAhISEgV0FSTklO RyAhISEKKyAgICAjCisgICAgIyBUaGUgZm9ybWF0IG9mIHRoaXMgZGljdGlvbmFyeSBpcyB0aGF0 IHRoZSBmZWF0dXJlIGluIHRoZSBrZXkgaXMgYSBkaXJlY3QKKyAgICAjIHByZXJlcXVpc2l0ZSBv ZiBlYWNoIGZlYXR1cmUgaW4gdGhlIHZhbHVlLgorICAgICMKKyAgICAjIFRoZSBmaXJzdCBjb25z aWRlcmF0aW9uIGlzIGFib3V0IHdoaWNoIGZ1bmN0aW9uYWxpdHkgaXMgcGh5c2ljYWxseSBidWls dAorICAgICMgb24gdG9wIG9mIG90aGVyIGZlYXR1cmVzLiAgVGhlIHNlY29uZCBjb25zaWRlcmF0 aW9uLCB3aGljaCBpcyBtb3JlCisgICAgIyBzdWJqZWN0aXZlLCBpcyB3aGV0aGVyIHJlYWwgaGFy ZHdhcmUgd291bGQgZXZlciBiZSBmb3VuZCBzdXBwb3J0aW5nCisgICAgIyBmZWF0dXJlIFggYnV0 IG5vdCBZLgorICAgICMKKyAgICBkZXBzID0geworICAgICAgICAjIEZQVSBpcyB0YWtlbiB0byBt ZWFuIHN1cHBvcnQgZm9yIHRoZSB4ODcgcmVnaXNlcnMgYXMgd2VsbCBhcyB0aGUKKyAgICAgICAg IyBpbnN0cnVjdGlvbnMuICBNTVggaXMgZG9jdW1lbnRlZCB0byBhbGlhcyB0aGUgJU1NIHJlZ2lz dGVycyBvdmVyIHRoZQorICAgICAgICAjIHg4NyAlU1QgcmVnaXN0ZXJzIGluIGhhcmR3YXJlLgor ICAgICAgICBGUFU6IFtNTVhdLAorCisgICAgICAgICMgVGhlIFBTRTM2IGZlYXR1cmUgaW5kaWNh dGVzIHRoYXQgcmVzZXJ2ZWQgYml0cyBpbiBhIFBTRSBzdXBlcnBhZ2UKKyAgICAgICAgIyBtYXkg YmUgdXNlZCBhcyBleHRyYSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMuCisgICAgICAgIFBTRTogW1BT RTM2XSwKKworICAgICAgICAjIEVudGVyaW5nIExvbmcgTW9kZSByZXF1aXJlcyB0aGF0ICVDUjQu UEFFIGlzIHNldC4gIFRoZSBOWCBhbmQgUEtVCisgICAgICAgICMgcGFnZXRhYmxlIGJpdHMgYXJl IG9ubHkgcmVwcmVzZW50YWJsZSBpbiB0aGUgNjRiaXQgUFRFIGZvcm1hdAorICAgICAgICAjIG9m ZmVyZWQgYnkgUEFFLgorICAgICAgICBQQUU6IFtMTSwgTlgsIFBLVV0sCisKKyAgICAgICAgIyBB UElDIGlzIHNwZWNpYWwsIGJ1dCBYMkFQSUMgZG9lcyBkZXBlbmQgb24gQVBJQyBiZWluZyBhdmFp bGFibGUgaW4KKyAgICAgICAgIyB0aGUgZmlyc3QgcGxhY2UuCisgICAgICAgIEFQSUM6IFtYMkFQ SUNdLAorCisgICAgICAgICMgQU1EIGJ1aWx0IE1NWEV4dGVudGlvbnMgYW5kIDNETm93IGFzIGV4 dGVudGlvbnMgdG8gTU1YLgorICAgICAgICBNTVg6IFtNTVhFWFQsIF8zRE5PV10sCisKKyAgICAg ICAgIyBUaGUgRlhTQVZFL0ZYUlNUT1IgaW5zdHJ1Y3Rpb25zIHdlcmUgaW50cm9kdWNlZCBpbnRv IGhhcmR3YXJlIGJlZm9yZQorICAgICAgICAjIFNTRSwgd2hpY2ggaXMgd2h5IHRoZXkgYmVoYXZl IGRpZmZlcmVudGx5IGJhc2VkIG9uICVDUjQuT1NGWFNBVkUgYW5kCisgICAgICAgICMgaGF2ZSB0 aGVpciBvd24gZmVhdHVyZSBiaXQuICBBTUQgaG93ZXZlciBpbnRyb2R1Y2UgdGhlIEZhc3QgRlhT UgorICAgICAgICAjIGZlYXR1cmUgYXMgYW4gb3B0aW1pc2F0aW9uLgorICAgICAgICBGWFNSOiBb RkZYU1IsIFNTRV0sCisKKyAgICAgICAgIyBTU0UgaXMgdGFrZW4gdG8gbWVhbiBzdXBwb3J0IGZv ciB0aGUgJVhNTSByZWdpc3RlcnMgYXMgd2VsbCBhcyB0aGUKKyAgICAgICAgIyBpbnN0cnVjdGlv bnMuICBTZXZlcmFsIGZ1dGhlciBpbnN0cnVjdGlvbiBzZXRzIGFyZSBidWlsdCBvbiBjb3JlCisg ICAgICAgICMgJVhNTSBzdXBwb3J0LCB3aXRob3V0IHNwZWNpZmljIGludGVyLWRlcGVuZGVuY2ll cy4KKyAgICAgICAgU1NFOiBbU1NFMiwgU1NFMywgU1NTRTMsIFNTRTRBLAorICAgICAgICAgICAg ICBBRVNOSSwgU0hBXSwKKworICAgICAgICAjIFNTRTIgd2FzIHJlLXNwZWNpZmllZCBhcyBjb3Jl IGluc3RydWN0aW9ucyBmb3IgNjRiaXQuCisgICAgICAgIFNTRTI6IFtMTV0sCisKKyAgICAgICAg IyBTU0U0LjEgZXhwbGljaXRseSBkZXBlbmRzIG9uIFNTRTMgYW5kIFNTU0UzCisgICAgICAgIFNT RTM6IFtTU0U0XzFdLAorICAgICAgICBTU1NFMzogW1NTRTRfMV0sCisKKyAgICAgICAgIyBTU0U0 LjIgZXhwbGljaXRseSBkZXBlbmRzIG9uIFNTRTQuMQorICAgICAgICBTU0U0XzE6IFtTU0U0XzJd LAorCisgICAgICAgICMgQU1EIHNwZWNpZnkgbm8gcmVsYXRpb25zaGlwIGJldHdlZW4gUE9QQ05U IGFuZCBTU0U0LjIuICBJbnRlbAorICAgICAgICAjIGRvY3VtZW50IHRoYXQgU1NFNC4yIHNob3Vs ZCBiZSBjaGVja2VkIGZvciBiZWZvcmUgY2hlY2tpbmcgZm9yCisgICAgICAgICMgUE9QQ05ULiAg SG93ZXZlciwgaXQgaGFzIGl0cyBvd24gZmVhdHVyZSBiaXQsIGFuZCBvcGVyYXRlcyBvbiBHUFJz CisgICAgICAgICMgcmF0aGVyIHRoYW4gJVhNTSBzdGF0ZSwgc28gZG9lc24ndCBpbmhlcmVudGx5 IGRlcGVuZCBvbiBTU0UuCisgICAgICAgICMgVGhlcmVmb3JlLCB3ZSBkbyBub3Qgc3BlY2lmeSBh IGRlcGVuZGVuY3kgYmV0d2VlbiBTU0U0XzIgYW5kIFBPUENOVC4KKyAgICAgICAgIworICAgICAg ICAjIFNTRTRfMjogW1BPUENOVF0KKworICAgICAgICAjIFRoZSBJTlZQQ0lEIGluc3RydWN0aW9u IGRlcGVuZHMgb24gUENJRCBpbmZyYXN0cnVjdHVyZSBiZWluZworICAgICAgICAjIGF2YWlsYWJs ZS4KKyAgICAgICAgUENJRDogW0lOVlBDSURdLAorCisgICAgICAgICMgWFNBVkUgaXMgYW4gZXh0 cmEgc2V0IG9mIGluc3RydWN0aW9ucyBmb3Igc3RhdGUgbWFuYWdlbWVudCwgYnV0CisgICAgICAg ICMgZG9lc24ndCBjb25zdGl0dWUgbmV3IHN0YXRlIGl0c2VsZi4gIFNvbWUgb2YgdGhlIGRlcGVu ZGVudCBmZWF0dXJlcworICAgICAgICAjIGFyZSBpbnN0cnVjdGlvbnMgYnVpbHQgb24gdG9wIG9m IGJhc2UgWFNBVkUsIHdoaWxlIG90aGVycyBhcmUgbmV3CisgICAgICAgICMgaW5zdHJ1Y3Rpb24g Z3JvdXBzIHdoaWNoIGFyZSBzcGVjaWZpZWQgdG8gcmVxdWlyZSBYU0FWRSBmb3Igc3RhdGUKKyAg ICAgICAgIyBtYW5hZ2VtZW50LgorICAgICAgICBYU0FWRTogW1hTQVZFT1BULCBYU0FWRUMsIFhH RVRCVjEsIFhTQVZFUywKKyAgICAgICAgICAgICAgICBBVlgsIE1QWCwgUEtVLCBMV1BdLAorCisg ICAgICAgICMgQVZYIGlzIHRha2VuIHRvIG1lYW4gaGFyZHdhcmUgc3VwcG9ydCBmb3IgVkVYIGVu Y29kZWQgaW5zdHJ1Y3Rpb25zLAorICAgICAgICAjIDI1NmJpdCByZWdpc3RlcnMsIGFuZCB0aGUg aW5zdHJ1Y3Rpb25zIHRoZW1zZWx2ZXMuICBFYWNoIG9mIHRoZXNlCisgICAgICAgICMgc3Vic2Vx dWVudCBpbnN0cnVjdGlvbiBncm91cHMgbWF5IG9ubHkgYmUgVkVYIGVuY29kZWQuCisgICAgICAg IEFWWDogW0ZNQSwgRk1BNCwgRjE2QywgQVZYMiwgWE9QXSwKKworICAgICAgICAjIENYMTYgaXMg b25seSBlbmNvZGFibGUgaW4gTG9uZyBNb2RlLiAgTEFIRl9MTSBpbmRpY2F0ZXMgdGhhdCB0aGUK KyAgICAgICAgIyBTQUhGL0xBSEYgaW5zdHJ1Y3Rpb25zIGFyZSByZWludHJvZHVjZWQgaW4gTG9u ZyBNb2RlLiAgMUdCCisgICAgICAgICMgc3VwZXJwYWdlcyBhbmQgUENJRCBhcmUgb25seSBhdmFp bGFibGUgaW4gNCBsZXZlbCBwYWdpbmcuCisgICAgICAgIExNOiBbQ1gxNiwgUENJRCwgTEFIRl9M TSwgUEFHRTFHQl0sCisKKyAgICAgICAgIyBBTUQgSzYtMisgYW5kIEs2LUlJSSBwcm9jZXNzb3Jz IHNoaXBwZWQgd2l0aCAzRE5vdyssIGJleW9uZCB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCAzRE5v dyBpbiB0aGUgZWFybGllciBLNiBwcm9jZXNzb3JzLgorICAgICAgICBfM0ROT1c6IFtfM0ROT1dF WFRdLAorICAgIH0KKworICAgIGRlZXBfZmVhdHVyZXMgPSB0dXBsZShzb3J0ZWQoZGVwcy5rZXlz KCkpKQorICAgIHN0YXRlLmRlZXBfZGVwcyA9IHt9CisKKyAgICBmb3IgZmVhdCBpbiBkZWVwX2Zl YXR1cmVzOgorCisgICAgICAgIHNlZW4gPSBbZmVhdF0KKyAgICAgICAgdG9fcHJvY2VzcyA9IGxp c3QoZGVwc1tmZWF0XSkKKworICAgICAgICB3aGlsZSBsZW4odG9fcHJvY2Vzcyk6CisKKyAgICAg ICAgICAgICMgVG8gZGVidWcsIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOgorICAgICAg ICAgICAgIyBkZWYgcmVwbChsKToKKyAgICAgICAgICAgICMgICAgIHJldHVybiAiWyIgKyAiLCAi LmpvaW4oKHN0YXRlLm5hbWVzW3hdIGZvciB4IGluIGwpKSArICJdIgorICAgICAgICAgICAgIyBw cmludCA+PnN5cy5zdGRlcnIsICJGZWF0dXJlICVzLCBzZWVuICVzLCB0b19wcm9jZXNzICVzICIg JSBcCisgICAgICAgICAgICAjICAgICAoc3RhdGUubmFtZXNbZmVhdF0sIHJlcGwoc2VlbiksIHJl cGwodG9fcHJvY2VzcykpCisKKyAgICAgICAgICAgIGYgPSB0b19wcm9jZXNzLnBvcCgwKQorCisg ICAgICAgICAgICBpZiBmIGluIHNlZW46CisgICAgICAgICAgICAgICAgcmFpc2UgRmFpbCgiRVJS T1I6IEN5Y2xlIGZvdW5kIHdpdGggJXMgd2hlbiBwcm9jZXNzaW5nICVzIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgJSAoc3RhdGUubmFtZXNbZl0sIHN0YXRlLm5hbWVzW2ZlYXRdKSkKKwor ICAgICAgICAgICAgc2Vlbi5hcHBlbmQoZikKKyAgICAgICAgICAgIHRvX3Byb2Nlc3MgPSBsaXN0 KHNldCh0b19wcm9jZXNzICsgZGVwcy5nZXQoZiwgW10pKSkKKworICAgICAgICBzdGF0ZS5kZWVw X2RlcHNbZmVhdF0gPSBzZWVuWzE6XQorCisgICAgc3RhdGUuZGVlcF9mZWF0dXJlcyA9IGZlYXR1 cmVzZXRfdG9fdWludDMycyhkZXBzLmtleXMoKSwgbnJfZW50cmllcykKKyAgICBzdGF0ZS5ucl9k ZWVwX2RlcHMgPSBsZW4oc3RhdGUuZGVlcF9kZXBzLmtleXMoKSkKKworICAgIGZvciBrLCB2IGlu IHN0YXRlLmRlZXBfZGVwcy5pdGVyaXRlbXMoKToKKyAgICAgICAgc3RhdGUuZGVlcF9kZXBzW2td ID0gZmVhdHVyZXNldF90b191aW50MzJzKHYsIG5yX2VudHJpZXMpCisKIAogZGVmIHdyaXRlX3Jl c3VsdHMoc3RhdGUpOgogICAgIHN0YXRlLm91dHB1dC53cml0ZSgKQEAgLTE3MCw2ICszMDUsMTIg QEAgZGVmIHdyaXRlX3Jlc3VsdHMoc3RhdGUpOgogI2RlZmluZSBJTklUX0hWTV9TSEFET1dfRkVB VFVSRVMgeyBcXFxuJXNcbn0KIAogI2RlZmluZSBJTklUX0hWTV9IQVBfRkVBVFVSRVMgeyBcXFxu JXNcbn0KKworI2RlZmluZSBOUl9ERUVQX0RFUFMgJXNVCisKKyNkZWZpbmUgSU5JVF9ERUVQX0ZF QVRVUkVTIHsgXFxcbiVzXG59CisKKyNkZWZpbmUgSU5JVF9ERUVQX0RFUFMgeyBcXAogIiIiICUg KHN0YXRlLm5yX2VudHJpZXMsCiAgICAgICAgc3RhdGUuY29tbW9uXzFkLAogICAgICAgIGZvcm1h dF91aW50MzJzKHN0YXRlLmtub3duLCA0KSwKQEAgLTE3NywxMCArMzE4LDIwIEBAIGRlZiB3cml0 ZV9yZXN1bHRzKHN0YXRlKToKICAgICAgICBmb3JtYXRfdWludDMycyhzdGF0ZS5wdiwgNCksCiAg ICAgICAgZm9ybWF0X3VpbnQzMnMoc3RhdGUuaHZtX3NoYWRvdywgNCksCiAgICAgICAgZm9ybWF0 X3VpbnQzMnMoc3RhdGUuaHZtX2hhcCwgNCksCisgICAgICAgc3RhdGUubnJfZGVlcF9kZXBzLAor ICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRlLmRlZXBfZmVhdHVyZXMsIDQpLAogICAgICAgICkp CiAKKyAgICBmb3IgZGVwIGluIHNvcnRlZChzdGF0ZS5kZWVwX2RlcHMua2V5cygpKToKKyAgICAg ICAgc3RhdGUub3V0cHV0LndyaXRlKAorICAgICAgICAgICAgIiAgICB7ICUjeFUsIC8qICVzICov IHsgXFxcbiVzXG4gICAgfSwgfSwgXFxcbiIKKyAgICAgICAgICAgICUgKGRlcCwgc3RhdGUubmFt ZXNbZGVwXSwKKyAgICAgICAgICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRlLmRlZXBfZGVwc1tk ZXBdLCA4KQorICAgICAgICAgICApKQorCiAgICAgc3RhdGUub3V0cHV0LndyaXRlKAotIiIiCisi IiJ9CisKICNlbmRpZiAvKiBfX1hFTl9YODZfX0ZFQVRVUkVTRVRfREFUQV9fICovCiAiIiIpCiAK LS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK