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: Jan Kratochvil To: git-commits@fedoraproject.org Subject: [rpms/gdb] fix-dup-patch: Fix performance regression when inferior opens many libraries (Gary Benson). Date: Thu, 23 Jul 2026 18:30:59 GMT Message-ID: <178483145944.1.2987811335688759862.rpms-gdb-6d620330a43c@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: fix-dup-patch X-Git-Rev: 6d620330a43ca2fbe902365bf3456e4a705d7299 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZ2RiCkJyYW5jaCA6 IGZpeC1kdXAtcGF0Y2gKQ29tbWl0IDogNmQ2MjAzMzBhNDNjYTJmYmU5MDIzNjViZjM0NTZlNGE3 MDVkNzI5OQpBdXRob3IgOiBKYW4gS3JhdG9jaHZpbCA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNv bT4KRGF0ZSAgIDogMjAxMy0wNS0xOVQxODo0NDowNSswMjowMApTdGF0cyAgOiArMjU5Mi8tMjYw NSBpbiAxMyBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3Jw bXMvZ2RiL2MvNmQ2MjAzMzBhNDNjYTJmYmU5MDIzNjViZjM0NTZlNGE3MDVkNzI5OT9icmFuY2g9 Zml4LWR1cC1wYXRjaAoKTG9nOgpGaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aGVuIGluZmVy aW9yIG9wZW5zIG1hbnkgbGlicmFyaWVzIChHYXJ5IEJlbnNvbikuCgotLS0KZGlmZiAtLWdpdCBh L2dkYi1kbG9wZW4tc3RhcC1wcm9iZS0xb2Y3LnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2Jl LTFvZjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3NDgwMgot LS0gL2Rldi9udWxsCisrKyBiL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS0xb2Y3LnBhdGNoCkBAIC0w LDAgKzEsMTE5IEBACitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxMy0w NS9tc2cwMDYyNS5odG1sCitTdWJqZWN0OiBbUkZBIDEvN10gUHJvYmVzIEFQSSBjb252ZW5pZW5j ZSBwYXRjaAorCisKKy0tdXVLVnpBbUIrYyt6UWxodQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWlu OyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKKworVGhpcyBw YXRjaCBleHBvc2VzIHBhcnQgb2YgdGhlIHByb2JlcyBBUEkgaW4gYSBtb3JlIGNvbnZlbmllbnQK K3dheS4gIEkndmUgaW5jbHVkZWQgaXQgZm9yIGNvbXBsZXRlbmVzcywgYnV0IGl0IGhhcyBwcmV2 aW91c2x5CitiZWVuIGFwcHJvdmVkOgorCisgIGh0dHA6Ly93d3cuY3lnd2luLmNvbS9tbC9nZGIt cGF0Y2hlcy8yMDEyLTA3L21zZzAwMzQwLmh0bWwKKworLS11dUtWekFtQitjK3pRbGh1CitDb250 ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRp b246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJydGxkLXByb2Jlcy0xLWNvbnZlbmllbmNlLnBhdGNo IgorCisyMDEzLTA1LTE2ICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVkaGF0LmNvbT4KKworCSog cHJvYmUuaCAoZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50KTogTmV3IGRlY2xhcmF0aW9uLgorCShl dmFsdWF0ZV9wcm9iZV9hcmd1bWVudCk6IExpa2V3aXNlLgorCSogcHJvYmUuYyAoZ2V0X3Byb2Jl X2FyZ3VtZW50X2NvdW50KTogTmV3IGZ1bmN0aW9uLgorCShldmFsdWF0ZV9wcm9iZV9hcmd1bWVu dCk6IExpa2V3aXNlLgorCShwcm9iZV9zYWZlX2V2YWx1YXRlX2F0X3BjKTogVXNlIHRoZSBhYm92 ZSBuZXcgZnVuY3Rpb25zLgorCitkaWZmIC0tZ2l0IGEvZ2RiL3Byb2JlLmggYi9nZGIvcHJvYmUu aAoraW5kZXggOGQ0NGNhMi4uMWQyOWI4NyAxMDA2NDQKKy0tLSBhL2dkYi9wcm9iZS5oCisrKysg Yi9nZGIvcHJvYmUuaAorQEAgLTIxNCw2ICsyMTQsMTYgQEAgZXh0ZXJuIHZvaWQgaW5mb19wcm9i ZXNfZm9yX29wcyAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHksCisgCisgZXh0ZXJuIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICoqaW5mb19wcm9iZXNfY21kbGlzdF9nZXQgKHZvaWQpOworIAorKy8q IFJldHVybiB0aGUgYXJndW1lbnQgY291bnQgb2YgdGhlIHNwZWNpZmllZCBwcm9iZS4gICovCisr CisrZXh0ZXJuIHVuc2lnbmVkIGdldF9wcm9iZV9hcmd1bWVudF9jb3VudCAoc3RydWN0IHByb2Jl ICpwcm9iZSk7CisrCisrLyogRXZhbHVhdGUgYXJndW1lbnQgTiBvZiB0aGUgc3BlY2lmaWVkIHBy b2JlLiAgTiBtdXN0IGJlIGJldHdlZW4gMAorKyAgIGluY2x1c2l2ZSBhbmQgZ2V0X3Byb2JlX2Fy Z3VtZW50X2NvdW50IGV4Y2x1c2l2ZS4gICovCisrCisrZXh0ZXJuIHN0cnVjdCB2YWx1ZSAqZXZh bHVhdGVfcHJvYmVfYXJndW1lbnQgKHN0cnVjdCBwcm9iZSAqcHJvYmUsCisrCQkJCQkgICAgICB1 bnNpZ25lZCBuKTsKKysKKyAvKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgZmluZHMgYSBw cm9iZSBhdCB0aGUgUEMgaW4gRlJBTUUgYW5kCisgICAgZXZhbHVhdGVzIGFyZ3VtZW50IE4sIHdp dGggMCA8PSBOIDwgbnVtYmVyX29mX2FyZ3MuICBJZiB0aGVyZSBpcyBubworICAgIHByb2JlIGF0 IHRoYXQgbG9jYXRpb24sIG9yIGlmIHRoZSBwcm9iZSBkb2VzIG5vdCBoYXZlIGVub3VnaCBhcmd1 bWVudHMsCitkaWZmIC0tZ2l0IGEvZ2RiL3Byb2JlLmMgYi9nZGIvcHJvYmUuYworaW5kZXggNzdm M2IxMy4uYTYxZjRlYSAxMDA2NDQKKy0tLSBhL2dkYi9wcm9iZS5jCisrKysgYi9nZGIvcHJvYmUu YworQEAgLTYwOCwyOCArNjA4LDU1IEBAIGluZm9fcHJvYmVzX2NvbW1hbmQgKGNoYXIgKmFyZywg aW50IGZyb21fdHR5KQorIAorIC8qIFNlZSBjb21tZW50cyBpbiBwcm9iZS5oLiAgKi8KKyAKKyt1 bnNpZ25lZAorK2dldF9wcm9iZV9hcmd1bWVudF9jb3VudCAoc3RydWN0IHByb2JlICpwcm9iZSkK Kyt7CisrICBjb25zdCBzdHJ1Y3Qgc3ltX3Byb2JlX2ZucyAqcHJvYmVfZm5zOworKworKyAgZ2Ri X2Fzc2VydCAocHJvYmUtPm9iamZpbGUgIT0gTlVMTCk7CisrICBnZGJfYXNzZXJ0IChwcm9iZS0+ b2JqZmlsZS0+c2YgIT0gTlVMTCk7CisrCisrICBwcm9iZV9mbnMgPSBwcm9iZS0+b2JqZmlsZS0+ c2YtPnN5bV9wcm9iZV9mbnM7CisrCisrICBnZGJfYXNzZXJ0IChwcm9iZV9mbnMgIT0gTlVMTCk7 CisrCisrICByZXR1cm4gcHJvYmVfZm5zLT5zeW1fZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50IChw cm9iZSk7CisrfQorKworKy8qIFNlZSBjb21tZW50cyBpbiBwcm9iZS5oLiAgKi8KKysKKytzdHJ1 Y3QgdmFsdWUgKgorK2V2YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChzdHJ1Y3QgcHJvYmUgKnByb2Jl LCB1bnNpZ25lZCBuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBzeW1fcHJvYmVfZm5zICpwcm9iZV9m bnM7CisrCisrICBnZGJfYXNzZXJ0IChwcm9iZS0+b2JqZmlsZSAhPSBOVUxMKTsKKysgIGdkYl9h c3NlcnQgKHByb2JlLT5vYmpmaWxlLT5zZiAhPSBOVUxMKTsKKysKKysgIHByb2JlX2ZucyA9IHBy b2JlLT5vYmpmaWxlLT5zZi0+c3ltX3Byb2JlX2ZuczsKKysKKysgIGdkYl9hc3NlcnQgKHByb2Jl X2ZucyAhPSBOVUxMKTsKKysKKysgIHJldHVybiBwcm9iZV9mbnMtPnN5bV9ldmFsdWF0ZV9wcm9i ZV9hcmd1bWVudCAocHJvYmUsIG4pOworK30KKysKKysvKiBTZWUgY29tbWVudHMgaW4gcHJvYmUu aC4gICovCisrCisgc3RydWN0IHZhbHVlICoKKyBwcm9iZV9zYWZlX2V2YWx1YXRlX2F0X3BjIChz dHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIHVuc2lnbmVkIG4pCisgeworICAgc3RydWN0IHByb2Jl ICpwcm9iZTsKKy0gIGNvbnN0IHN0cnVjdCBzeW1fcHJvYmVfZm5zICpwcm9iZV9mbnM7CisgICB1 bnNpZ25lZCBuX2FyZ3M7CisgCisgICBwcm9iZSA9IGZpbmRfcHJvYmVfYnlfcGMgKGdldF9mcmFt ZV9wYyAoZnJhbWUpKTsKKyAgIGlmICghcHJvYmUpCisgICAgIHJldHVybiBOVUxMOworIAorLSAg Z2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUgIT0gTlVMTCk7CistICBnZGJfYXNzZXJ0IChwcm9i ZS0+b2JqZmlsZS0+c2YgIT0gTlVMTCk7CistICBnZGJfYXNzZXJ0IChwcm9iZS0+b2JqZmlsZS0+ c2YtPnN5bV9wcm9iZV9mbnMgIT0gTlVMTCk7CistCistICBwcm9iZV9mbnMgPSBwcm9iZS0+b2Jq ZmlsZS0+c2YtPnN5bV9wcm9iZV9mbnM7CistICBuX2FyZ3MgPSBwcm9iZV9mbnMtPnN5bV9nZXRf cHJvYmVfYXJndW1lbnRfY291bnQgKHByb2JlKTsKKy0KKysgIG5fYXJncyA9IGdldF9wcm9iZV9h cmd1bWVudF9jb3VudCAocHJvYmUpOworICAgaWYgKG4gPj0gbl9hcmdzKQorICAgICByZXR1cm4g TlVMTDsKKyAKKy0gIHJldHVybiBwcm9iZV9mbnMtPnN5bV9ldmFsdWF0ZV9wcm9iZV9hcmd1bWVu dCAocHJvYmUsIG4pOworKyAgcmV0dXJuIGV2YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChwcm9iZSwg bik7CisgfQorIAorIC8qIFNlZSBjb21tZW50IGluIHByb2JlLmguICAqLworCistLXV1S1Z6QW1C K2MrelFsaHUtLQorCgpkaWZmIC0tZ2l0IGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTJvZjcucGF0 Y2ggYi9nZGItZGxvcGVuLXN0YXAtcHJvYmUtMm9mNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zNjA2Y2VjCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiLWRsb3Blbi1z dGFwLXByb2JlLTJvZjcucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK2h0dHA6Ly9zb3VyY2V3YXJl Lm9yZy9tbC9nZGItcGF0Y2hlcy8yMDEzLTA1L21zZzAwNjI3Lmh0bWwKK1N1YmplY3Q6IFtSRkEg Mi83XSBBUEkgZm9yIGluaGliaXRpbmcgc2VjdGlvbiBtYXAgdXBkYXRlcworCisKKy0tYlBnOU5k cE05RUVUeHZxdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitD b250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKKworVGhpcyBwYXRjaCBhZGRzIGEgY291cGxlIG9m IGZ1bmN0aW9ucyB0byBhbGxvdyBzZWN0aW9uIG1hcCB1cGRhdGVzCit0byBiZSB0ZW1wb3Jhcmls eSBpbmhpYml0ZWQuICBXaXRob3V0IHRoaXMgYWJpbGl0eSwgdGhlIGNhbGxzIHRvCitldmFsdWF0 ZV9wcm9iZV9hcmd1bWVudCBpbiBzdnI0X2hhbmRsZV9zb2xpYl9ldmVudCB0cmlnZ2VyIGEgc2Vj dGlvbgorbWFwIHVwZGF0ZSBldmVyeSB0aW1lIGEgZ3JvdXAgb2Ygc2hhcmVkIG9iamVjdHMgYXJl IG1hcHBlZCwgd2hpY2gKK3NpZ25pZmljYW50bHkgYWZmZWN0cyBwZXJmb3JtYW5jZS4gIFRoZSB1 cGRhdGVzIGFyZSB1bm5lY2Vzc2FyeSBpbgordGhpcyBjYXNlIGFzIHRoZSBzZWN0aW9ucyBpbiBx dWVzdGlvbiBhcmUgaW4gdGhlIHJ1bnRpbWUgbGlua2VyIGFuZAorc28gYWxyZWFkeSBpbiB0aGUg c2VjdGlvbiBtYXAuCisKKy0tYlBnOU5kcE05RUVUeHZxdAorQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBm aWxlbmFtZT0icnRsZC1wcm9iZXMtMi1pbmhpYml0LXNtLXVwZGF0ZXMucGF0Y2giCisKKzIwMTMt MDUtMTYgIEdhcnkgQmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgorCisJKiBvYmpmaWxlcy5o IChpbmhpYml0X3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBOZXcgZnVuY3Rpb24KKwlkZWNsYXJhdGlv bi4KKwkocmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBMaWtld2lzZS4KKwkocmVzdW1lX3Nl Y3Rpb25fbWFwX3VwZGF0ZXNfY2xlYW51cCk6IExpa2V3aXNlLgorCSogb2JqZmlsZXMuYyAob2Jq ZmlsZV9wc3BhY2VfaW5mbyk6IFJlbW92ZWQgZmllbGQKKwkib2JqZmlsZXNfY2hhbmdlZF9wIi4g IE5ldyBmaWVsZHMgIm5ld19vYmpmaWxlc19hdmFpbGFibGUiLAorCSJzZWN0aW9uX21hcF9kaXJ0 eSIgYW5kICJpbmhpYml0X3VwZGF0ZXMiLgorCShhbGxvY2F0ZV9vYmpmaWxlKTogU2V0IG5ld19v YmpmaWxlc19hdmFpbGFibGUuCisJKGZyZWVfb2JqZmlsZSk6IFNldCBzZWN0aW9uX21hcF9kaXJ0 eS4KKwkob2JqZmlsZV9yZWxvY2F0ZTEpOiBMaWtld2lzZS4KKwkoaW5fcGx0X3NlY3Rpb24pOiBM aWtld2lzZS4KKwkoZmluZF9wY19zZWN0aW9uKTogVXBkYXRlIHRoZSBjb25kaXRpb25zIHVuZGVy IHdoaWNoIHRoZQorCXNlY3Rpb24gbWFwIHdpbGwgYmUgdXBkYXRlZC4KKwkoaW5oaWJpdF9zZWN0 aW9uX21hcF91cGRhdGVzKTogTmV3IGZ1bmN0aW9uLgorCShyZXN1bWVfc2VjdGlvbl9tYXBfdXBk YXRlcyk6IExpa2V3aXNlLgorCShyZXN1bWVfc2VjdGlvbl9tYXBfdXBkYXRlc19jbGVhbnVwKTog TGlrZXdpc2UuCisKK2RpZmYgLS1naXQgYS9nZGIvb2JqZmlsZXMuaCBiL2dkYi9vYmpmaWxlcy5o CitpbmRleCA5MzE0OWUyLi4wYjdlZWE5IDEwMDY0NAorLS0tIGEvZ2RiL29iamZpbGVzLmgKKysr KyBiL2dkYi9vYmpmaWxlcy5oCitAQCAtNTAxLDYgKzUwMSwyMiBAQCBleHRlcm4gaW50IGluX3Bs dF9zZWN0aW9uIChDT1JFX0FERFIsIGNoYXIgKik7CisgICAgbW9kdWxlcy4gICovCisgREVDTEFS RV9SRUdJU1RSWShvYmpmaWxlKTsKKyAKKysvKiBJbiBub3JtYWwgdXNlLCB0aGUgc2VjdGlvbiBt YXAgd2lsbCBiZSByZWJ1aWx0IGJ5IEZJTkRfUENfU0VDVElPTgorKyAgIGlmIG9iamZpbGVzIGhh dmUgYmVlbiBhZGRlZCwgcmVtb3ZlZCBvciByZWxvY2F0ZWQgc2luY2UgaXQgd2FzIGxhc3QKKysg ICBjYWxsZWQuICBDYWxsaW5nIElOSElCSVRfU0VDVElPTl9NQVBfVVBEQVRFUyB3aWxsIGluaGli aXQgdGhpcworKyAgIGJlaGF2aW9yIHVudGlsIFJFU1VNRV9TRUNUSU9OX01BUF9VUERBVEVTIGlz IGNhbGxlZC4gIElmIHlvdSBjYWxsCisrICAgSU5ISUJJVF9TRUNUSU9OX01BUF9VUERBVEVTIHlv dSBtdXN0IGVuc3VyZSB0aGF0IGV2ZXJ5IGNhbGwgdG8KKysgICBGSU5EX1BDX1NFQ1RJT04gaW4g dGhlIGluaGliaXRlZCByZWdpb24gcmVsYXRlcyB0byBhIHNlY3Rpb24gdGhhdAorKyAgIGlzIGFs cmVhZHkgaW4gdGhlIHNlY3Rpb24gbWFwIGFuZCBoYXMgbm90IHNpbmNlIGJlZW4gcmVtb3ZlZCBv cgorKyAgIHJlbG9jYXRlZC4gICovCisrZXh0ZXJuIHZvaWQgaW5oaWJpdF9zZWN0aW9uX21hcF91 cGRhdGVzICh2b2lkKTsKKysKKysvKiBSZXN1bWUgYXV0b21hdGljYWxseSByZWJ1aWxkaW5nIHRo ZSBzZWN0aW9uIG1hcCBhcyByZXF1aXJlZC4gICovCisrZXh0ZXJuIHZvaWQgcmVzdW1lX3NlY3Rp b25fbWFwX3VwZGF0ZXMgKHZvaWQpOworKworKy8qIFZlcnNpb24gb2YgdGhlIGFib3ZlIHN1aXRh YmxlIGZvciB1c2UgYXMgYSBjbGVhbnVwLiAgKi8KKytleHRlcm4gdm9pZCByZXN1bWVfc2VjdGlv bl9tYXBfdXBkYXRlc19jbGVhbnVwICh2b2lkICphcmcpOworKworIGV4dGVybiB2b2lkIGRlZmF1 bHRfaXRlcmF0ZV9vdmVyX29iamZpbGVzX2luX3NlYXJjaF9vcmRlcgorICAgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoLAorICAgIGl0ZXJhdGVfb3Zlcl9vYmpmaWxlc19pbl9zZWFyY2hfb3JkZXJf Y2JfZnR5cGUgKmNiLAorZGlmZiAtLWdpdCBhL2dkYi9vYmpmaWxlcy5jIGIvZ2RiL29iamZpbGVz LmMKK2luZGV4IDNlNDllYTIuLjNhZjEwNjQgMTAwNjQ0CistLS0gYS9nZGIvb2JqZmlsZXMuYwor KysrIGIvZ2RiL29iamZpbGVzLmMKK0BAIC02Nyw5ICs2NywxOCBAQCBzdHJ1Y3Qgb2JqZmlsZSAq cnRfY29tbW9uX29iamZpbGU7CS8qIEZvciBydW50aW1lIGNvbW1vbiBzeW1ib2xzICovCisgCisg c3RydWN0IG9iamZpbGVfcHNwYWNlX2luZm8KKyB7CistICBpbnQgb2JqZmlsZXNfY2hhbmdlZF9w OworICAgc3RydWN0IG9ial9zZWN0aW9uICoqc2VjdGlvbnM7CisgICBpbnQgbnVtX3NlY3Rpb25z OworKworKyAgLyogTm9uemVybyBpZiBvYmplY3QgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIHNpbmNl IHRoZSBzZWN0aW9uIG1hcAorKyAgICAgd2FzIGxhc3QgdXBkYXRlZC4gICovCisrICBpbnQgbmV3 X29iamZpbGVzX2F2YWlsYWJsZTsKKysKKysgIC8qIE5vbnplcm8gaWYgdGhlIHNlY3Rpb24gbWFw IE1VU1QgYmUgdXBkYXRlZCBiZWZvcmUgdXNlLiAgKi8KKysgIGludCBzZWN0aW9uX21hcF9kaXJ0 eTsKKysKKysgIC8qIE5vbnplcm8gaWYgc2VjdGlvbiBtYXAgdXBkYXRlcyBzaG91bGQgYmUgaW5o aWJpdGVkIGlmIHBvc3NpYmxlLiAgKi8KKysgIGludCBpbmhpYml0X3VwZGF0ZXM7CisgfTsKKyAK KyAvKiBQZXItcHJvZ3JhbS1zcGFjZSBkYXRhIGtleS4gICovCitAQCAtMzE3LDcgKzMyNiw3IEBA IGFsbG9jYXRlX29iamZpbGUgKGJmZCAqYWJmZCwgaW50IGZsYWdzKQorICAgb2JqZmlsZS0+Zmxh Z3MgfD0gZmxhZ3M7CisgCisgICAvKiBSZWJ1aWxkIHNlY3Rpb24gbWFwIG5leHQgdGltZSB3ZSBu ZWVkIGl0LiAgKi8KKy0gIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChvYmpmaWxlLT5wc3BhY2Up LT5vYmpmaWxlc19jaGFuZ2VkX3AgPSAxOworKyAgZ2V0X29iamZpbGVfcHNwYWNlX2RhdGEgKG9i amZpbGUtPnBzcGFjZSktPm5ld19vYmpmaWxlc19hdmFpbGFibGUgPSAxOworIAorICAgcmV0dXJu IG9iamZpbGU7CisgfQorQEAgLTY0Niw3ICs2NTUsNyBAQCBmcmVlX29iamZpbGUgKHN0cnVjdCBv YmpmaWxlICpvYmpmaWxlKQorICAgb2JzdGFja19mcmVlICgmb2JqZmlsZS0+b2JqZmlsZV9vYnN0 YWNrLCAwKTsKKyAKKyAgIC8qIFJlYnVpbGQgc2VjdGlvbiBtYXAgbmV4dCB0aW1lIHdlIG5lZWQg aXQuICAqLworLSAgZ2V0X29iamZpbGVfcHNwYWNlX2RhdGEgKG9iamZpbGUtPnBzcGFjZSktPm9i amZpbGVzX2NoYW5nZWRfcCA9IDE7CisrICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAob2JqZmls ZS0+cHNwYWNlKS0+c2VjdGlvbl9tYXBfZGlydHkgPSAxOworIAorICAgeGZyZWUgKG9iamZpbGUp OworIH0KK0BAIC04MjYsNyArODM1LDcgQEAgb2JqZmlsZV9yZWxvY2F0ZTEgKHN0cnVjdCBvYmpm aWxlICpvYmpmaWxlLAorICAgfQorIAorICAgLyogUmVidWlsZCBzZWN0aW9uIG1hcCBuZXh0IHRp bWUgd2UgbmVlZCBpdC4gICovCistICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAob2JqZmlsZS0+ cHNwYWNlKS0+b2JqZmlsZXNfY2hhbmdlZF9wID0gMTsKKysgIGdldF9vYmpmaWxlX3BzcGFjZV9k YXRhIChvYmpmaWxlLT5wc3BhY2UpLT5zZWN0aW9uX21hcF9kaXJ0eSA9IDE7CisgCisgICAvKiBV cGRhdGUgdGhlIHRhYmxlIGluIGV4ZWNfb3BzLCB1c2VkIHRvIHJlYWQgbWVtb3J5LiAgKi8KKyAg IEFMTF9PQkpGSUxFX09TRUNUSU9OUyAob2JqZmlsZSwgcykKK0BAIC0xMjkxLDExICsxMzAwLDE0 IEBAIHN0YXRpYyB2b2lkCisgdXBkYXRlX3NlY3Rpb25fbWFwIChzdHJ1Y3QgcHJvZ3JhbV9zcGFj ZSAqcHNwYWNlLAorIAkJICAgIHN0cnVjdCBvYmpfc2VjdGlvbiAqKipwbWFwLCBpbnQgKnBtYXBf c2l6ZSkKKyB7CisrICBzdHJ1Y3Qgb2JqZmlsZV9wc3BhY2VfaW5mbyAqcHNwYWNlX2luZm87Cisg ICBpbnQgYWxsb2Nfc2l6ZSwgbWFwX3NpemUsIGk7CisgICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKnMs ICoqbWFwOworICAgc3RydWN0IG9iamZpbGUgKm9iamZpbGU7CisgCistICBnZGJfYXNzZXJ0IChn ZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAocHNwYWNlKS0+b2JqZmlsZXNfY2hhbmdlZF9wICE9IDAp OworKyAgcHNwYWNlX2luZm8gPSBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9n cmFtX3NwYWNlKTsKKysgIGdkYl9hc3NlcnQgKHBzcGFjZV9pbmZvLT5zZWN0aW9uX21hcF9kaXJ0 eSAhPSAwCisrCSAgICAgIHx8IHBzcGFjZV9pbmZvLT5uZXdfb2JqZmlsZXNfYXZhaWxhYmxlICE9 IDApOworIAorICAgbWFwID0gKnBtYXA7CisgICB4ZnJlZSAobWFwKTsKK0BAIC0xMzY1LDcgKzEz NzcsOSBAQCBmaW5kX3BjX3NlY3Rpb24gKENPUkVfQUREUiBwYykKKyAgICAgcmV0dXJuIHM7Cisg CisgICBwc3BhY2VfaW5mbyA9IGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dy YW1fc3BhY2UpOworLSAgaWYgKHBzcGFjZV9pbmZvLT5vYmpmaWxlc19jaGFuZ2VkX3AgIT0gMCkK KysgIGlmIChwc3BhY2VfaW5mby0+c2VjdGlvbl9tYXBfZGlydHkKKysgICAgICB8fCAocHNwYWNl X2luZm8tPm5ld19vYmpmaWxlc19hdmFpbGFibGUKKysJICAmJiAhcHNwYWNlX2luZm8tPmluaGli aXRfdXBkYXRlcykpCisgICAgIHsKKyAgICAgICB1cGRhdGVfc2VjdGlvbl9tYXAgKGN1cnJlbnRf cHJvZ3JhbV9zcGFjZSwKKyAJCQkgICZwc3BhY2VfaW5mby0+c2VjdGlvbnMsCitAQCAtMTM3Myw3 ICsxMzg3LDggQEAgZmluZF9wY19zZWN0aW9uIChDT1JFX0FERFIgcGMpCisgCisgICAgICAgLyog RG9uJ3QgbmVlZCB1cGRhdGVzIHRvIHNlY3Rpb24gbWFwIHVudGlsIG9iamZpbGVzIGFyZSBhZGRl ZCwKKyAgICAgICAgICByZW1vdmVkIG9yIHJlbG9jYXRlZC4gICovCistICAgICAgcHNwYWNlX2lu Zm8tPm9iamZpbGVzX2NoYW5nZWRfcCA9IDA7CisrICAgICAgcHNwYWNlX2luZm8tPm5ld19vYmpm aWxlc19hdmFpbGFibGUgPSAwOworKyAgICAgIHBzcGFjZV9pbmZvLT5zZWN0aW9uX21hcF9kaXJ0 eSA9IDA7CisgICAgIH0KKyAKKyAgIC8qIFRoZSBDIHN0YW5kYXJkIChJU08vSUVDIDk4OTk6VEMy KSByZXF1aXJlcyB0aGUgQkFTRSBhcmd1bWVudCB0bworQEAgLTE0MTQsMTQgKzE0MjksMzggQEAg aW5fcGx0X3NlY3Rpb24gKENPUkVfQUREUiBwYywgY2hhciAqbmFtZSkKKyB9CisgDAorIAorLS8q IFNldCBvYmpmaWxlc19jaGFuZ2VkX3Agc28gc2VjdGlvbiBtYXAgd2lsbCBiZSByZWJ1aWx0IG5l eHQgdGltZSBpdAorKy8qIFNldCBzZWN0aW9uX21hcF9kaXJ0eSBzbyBzZWN0aW9uIG1hcCB3aWxs IGJlIHJlYnVpbHQgbmV4dCB0aW1lIGl0CisgICAgaXMgdXNlZC4gIENhbGxlZCBieSByZXJlYWRf c3ltYm9scy4gICovCisgCisgdm9pZAorIG9iamZpbGVzX2NoYW5nZWQgKHZvaWQpCisgeworICAg LyogUmVidWlsZCBzZWN0aW9uIG1hcCBuZXh0IHRpbWUgd2UgbmVlZCBpdC4gICovCistICBnZXRf b2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKS0+b2JqZmlsZXNfY2hh bmdlZF9wID0gMTsKKysgIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1f c3BhY2UpLT5zZWN0aW9uX21hcF9kaXJ0eSA9IDE7CisrfQorKworKy8qIFNlZSBjb21tZW50cyBp biBvYmpmaWxlcy5oLiAgKi8KKysKKyt2b2lkCisraW5oaWJpdF9zZWN0aW9uX21hcF91cGRhdGVz ICh2b2lkKQorK3sKKysgIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1f c3BhY2UpLT5pbmhpYml0X3VwZGF0ZXMgPSAxOworK30KKysKKysvKiBTZWUgY29tbWVudHMgaW4g b2JqZmlsZXMuaC4gICovCisrCisrdm9pZAorK3Jlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzICh2 b2lkKQorK3sKKysgIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1fc3Bh Y2UpLT5pbmhpYml0X3VwZGF0ZXMgPSAwOworK30KKysKKysvKiBTZWUgY29tbWVudHMgaW4gb2Jq ZmlsZXMuaC4gICovCisrCisrdm9pZAorK3Jlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzX2NsZWFu dXAgKHZvaWQgKmFyZykKKyt7CisrICByZXN1bWVfc2VjdGlvbl9tYXBfdXBkYXRlcyAoKTsKKyB9 CisgCisgLyogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSAiaXRlcmF0ZV9vdmVy X29iamZpbGVzX2luX3NlYXJjaF9vcmRlciIKKworLS1iUGc5TmRwTTlFRVR4dnF0LS0KKwoKZGlm ZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS0zb2Y3LnBhdGNoIGIvZ2RiLWRsb3Blbi1z dGFwLXByb2JlLTNvZjcucGF0Y2gKaW5kZXggMjMzN2RlZC4uOTMyNTFjYSAxMDA2NDQKLS0tIGEv Z2RiLWRsb3Blbi1zdGFwLXByb2JlLTNvZjcucGF0Y2gKKysrIGIvZ2RiLWRsb3Blbi1zdGFwLXBy b2JlLTNvZjcucGF0Y2gKQEAgLTEsOTggKzEsMzE0IEBACi0yMDEyLTA3LTE5ICBHYXJ5IEJlbnNv biAgPGdiZW5zb25AcmVkaGF0LmNvbT4KK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0 Y2hlcy8yMDEzLTA1L21zZzAwNjI2Lmh0bWwKK1N1YmplY3Q6IFtSRkEgMy83XSBOZXcgZ2Ric2Vy dmVyIGZ1bmN0aW9uYWxpdHkKIAotCSogcHJvYmUuaCAoZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50 KTogTmV3IGRlY2xhcmF0aW9uLgotCShldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCk6IExpa2V3aXNl LgotCSogcHJvYmUuYyAoZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50KTogTmV3IGZ1bmN0aW9uLgot CShldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCk6IExpa2V3aXNlLgotCShwcm9iZV9zYWZlX2V2YWx1 YXRlX2F0X3BjKTogVXNlIHRoZSBhYm92ZSBuZXcgZnVuY3Rpb25zLgogCi1kaWZmIC0tZ2l0IGEv Z2RiL3Byb2JlLmggYi9nZGIvcHJvYmUuaAotaW5kZXggOGQ0NGNhMi4uMWQyOWI4NyAxMDA2NDQK LS0tLSBhL2dkYi9wcm9iZS5oCi0rKysgYi9nZGIvcHJvYmUuaAotQEAgLTIxNCw2ICsyMTQsMTYg QEAgZXh0ZXJuIHZvaWQgaW5mb19wcm9iZXNfZm9yX29wcyAoY2hhciAqYXJnLCBpbnQgZnJvbV90 dHksCistLUtjOUhOanB6T1hWYzdGRlUKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNl dD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCisKK1RoaXMgcGF0Y2ggdXBk YXRlcyBnZGJzZXJ2ZXIgdG8gYWxsb3cgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCBpbiB0aGUKK2Fu bmV4IG9mIHFYZmVyOmxpYnJhcmllcy1zdnI0OnJlYWQgdG8gYWxsb3cgdGhhdCBmdW5jdGlvbiB0 byB0cmFuc2ZlcgorcGFydGlhbCBsaXN0cyBvZiBsaWJyYXJpZXMuICBUaGUgYWJpbGl0eSBvZiBn ZGJzZXJ2ZXIgdG8gc3VwcG9ydAordGhlc2UgYXJndW1lbnRzIGlzIGluZGljYXRlZCBieSBhIHFT dXBwb3J0ZWQgcmVzcG9uc2UgY29udGFpbmluZworImF1Z21lbnRlZC1saWJyYXJpZXMtc3ZyNC1y ZWFkKyIuCisKKy0tS2M5SE5qcHpPWFZjN0ZGVQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBj aGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFt ZT0icnRsZC1wcm9iZXMtMy1nZGJzZXJ2ZXIucGF0Y2giCisKKzIwMTMtMDUtMTYgIEdhcnkgQmVu c29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgorCisJKiBzZXJ2ZXIuYyAoaGFuZGxlX3F1ZXJ5KTog QWRkICJhdWdtZW50ZWQtbGlicmFyaWVzLXN2cjQtcmVhZCsiCisJdG8gcVN1cHBvcnRlZCByZXNw b25zZSB3aGVuIGFwcHJvcHJpYXRlLgorCShoYW5kbGVfcXhmZXJfbGlicmFyaWVzX3N2cjQpOiBB bGxvdyBxWGZlcjpsaWJyYXJpZXMtc3ZyNDpyZWFkCisJd2l0aCBub256ZXJvLWxlbmd0aCBhbm5l eC4KKwkqIGxpbnV4LWxvdy5jIChsaW51eF9xeGZlcl9saWJyYXJpZXNfc3ZyNCk6IFBhcnNlIGFu ZCBoYW5kbGUKKwlhcmd1bWVudHMgc3VwcGxpZWQgaW4gYW5uZXguCisKK2RpZmYgLS1naXQgYS9n ZGIvZ2Ric2VydmVyL3NlcnZlci5jIGIvZ2RiL2dkYnNlcnZlci9zZXJ2ZXIuYworaW5kZXggNmJi MzZkOC4uMGE4ZjY4YiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvc2VydmVyLmMKKysrKyBi L2dkYi9nZGJzZXJ2ZXIvc2VydmVyLmMKK0BAIC0xMTE1LDggKzExMTUsNyBAQCBoYW5kbGVfcXhm ZXJfbGlicmFyaWVzX3N2cjQgKGNvbnN0IGNoYXIgKmFubmV4LAorICAgaWYgKHdyaXRlYnVmICE9 IE5VTEwpCisgICAgIHJldHVybiAtMjsKICAKLSBleHRlcm4gc3RydWN0IGNtZF9saXN0X2VsZW1l bnQgKippbmZvX3Byb2Jlc19jbWRsaXN0X2dldCAodm9pZCk7CistICBpZiAoYW5uZXhbMF0gIT0g J1wwJyB8fCAhdGFyZ2V0X3J1bm5pbmcgKCkKKy0gICAgICB8fCB0aGVfdGFyZ2V0LT5xeGZlcl9s aWJyYXJpZXNfc3ZyNCA9PSBOVUxMKQorKyAgaWYgKCF0YXJnZXRfcnVubmluZyAoKSB8fCB0aGVf dGFyZ2V0LT5xeGZlcl9saWJyYXJpZXNfc3ZyNCA9PSBOVUxMKQorICAgICByZXR1cm4gLTE7CiAg Ci0rLyogUmV0dXJuIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUgc3BlY2lmaWVkIHByb2JlLiAg Ki8KLSsKLStleHRlcm4gdW5zaWduZWQgZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50IChzdHJ1Y3Qg cHJvYmUgKnByb2JlKTsKLSsKLSsvKiBFdmFsdWF0ZSBhcmd1bWVudCBOIG9mIHRoZSBzcGVjaWZp ZWQgcHJvYmUuICBOIG11c3QgYmUgYmV0d2VlbiAwCi0rICAgaW5jbHVzaXZlIGFuZCBnZXRfcHJv YmVfYXJndW1lbnRfY291bnQgZXhjbHVzaXZlLiAgKi8KLSsKLStleHRlcm4gc3RydWN0IHZhbHVl ICpldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCAoc3RydWN0IHByb2JlICpwcm9iZSwKLSsJCQkJCSAg ICAgIHVuc2lnbmVkIG4pOwotKwotIC8qIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBmaW5k cyBhIHByb2JlIGF0IHRoZSBQQyBpbiBGUkFNRSBhbmQKLSAgICBldmFsdWF0ZXMgYXJndW1lbnQg Tiwgd2l0aCAwIDw9IE4gPCBudW1iZXJfb2ZfYXJncy4gIElmIHRoZXJlIGlzIG5vCi0gICAgcHJv YmUgYXQgdGhhdCBsb2NhdGlvbiwgb3IgaWYgdGhlIHByb2JlIGRvZXMgbm90IGhhdmUgZW5vdWdo IGFyZ3VtZW50cywKLWRpZmYgLS1naXQgYS9nZGIvcHJvYmUuYyBiL2dkYi9wcm9iZS5jCi1pbmRl eCA3N2YzYjEzLi5hNjFmNGVhIDEwMDY0NAotLS0tIGEvZ2RiL3Byb2JlLmMKLSsrKyBiL2dkYi9w cm9iZS5jCi1AQCAtNjMyLDI4ICs2MzIsNTUgQEAgaW5mb19wcm9iZXNfY29tbWFuZCAoY2hhciAq YXJnLCBpbnQgZnJvbV90dHkpCisgICByZXR1cm4gdGhlX3RhcmdldC0+cXhmZXJfbGlicmFyaWVz X3N2cjQgKGFubmV4LCByZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4pOworQEAgLTE3NDMs NyArMTc0Miw4IEBAIGhhbmRsZV9xdWVyeSAoY2hhciAqb3duX2J1ZiwgaW50IHBhY2tldF9sZW4s IGludCAqbmV3X3BhY2tldF9sZW5fcCkKKyAJICAgICAgIFBCVUZTSVogLSAxKTsKICAKLSAvKiBT ZWUgY29tbWVudHMgaW4gcHJvYmUuaC4gICovCisgICAgICAgaWYgKHRoZV90YXJnZXQtPnF4ZmVy X2xpYnJhcmllc19zdnI0ICE9IE5VTEwpCistCXN0cmNhdCAob3duX2J1ZiwgIjtxWGZlcjpsaWJy YXJpZXMtc3ZyNDpyZWFkKyIpOworKwlzdHJjYXQgKG93bl9idWYsICI7cVhmZXI6bGlicmFyaWVz LXN2cjQ6cmVhZCsiCisrCQkiO2F1Z21lbnRlZC1saWJyYXJpZXMtc3ZyNC1yZWFkKyIpOworICAg ICAgIGVsc2UKKyAJeworIAkgIC8qIFdlIGRvIG5vdCBoYXZlIGFueSBob29rIHRvIGluZGljYXRl IHdoZXRoZXIgdGhlIG5vbi1TVlI0IHRhcmdldAorZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIv bGludXgtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5jCitpbmRleCA3MmM1MWUwLi5i ZWIzYjhmIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuYworKysrIGIvZ2Ri L2dkYnNlcnZlci9saW51eC1sb3cuYworQEAgLTU2NzcsNiArNTY3NywxMiBAQCBsaW51eF9xeGZl cl9saWJyYXJpZXNfc3ZyNCAoY29uc3QgY2hhciAqYW5uZXgsIHVuc2lnbmVkIGNoYXIgKnJlYWRi dWYsCisgICAgIH07CisgICBjb25zdCBzdHJ1Y3QgbGlua19tYXBfb2Zmc2V0cyAqbG1vOworICAg dW5zaWduZWQgaW50IG1hY2hpbmU7CisrICBpbnQgcHRyX3NpemU7CisrICBDT1JFX0FERFIgbG1f YWRkciA9IDAsIGxtX3ByZXYgPSAwOworKyAgaW50IGFsbG9jYXRlZCA9IDEwMjQ7CisrICBjaGFy ICpwOworKyAgQ09SRV9BRERSIGxfbmFtZSwgbF9hZGRyLCBsX2xkLCBsX25leHQsIGxfcHJldjsK KysgIGludCBoZWFkZXJfZG9uZSA9IDA7CiAgCi0rdW5zaWduZWQKLStnZXRfcHJvYmVfYXJndW1l bnRfY291bnQgKHN0cnVjdCBwcm9iZSAqcHJvYmUpCi0rewotKyAgY29uc3Qgc3RydWN0IHN5bV9w cm9iZV9mbnMgKnByb2JlX2ZuczsKLSsKLSsgIGdkYl9hc3NlcnQgKHByb2JlLT5vYmpmaWxlICE9 IE5VTEwpOwotKyAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUtPnNmICE9IE5VTEwpOwotKwot KyAgcHJvYmVfZm5zID0gcHJvYmUtPm9iamZpbGUtPnNmLT5zeW1fcHJvYmVfZm5zOwotKwotKyAg Z2RiX2Fzc2VydCAocHJvYmVfZm5zICE9IE5VTEwpOwotKwotKyAgcmV0dXJuIHByb2JlX2Zucy0+ c3ltX2dldF9wcm9iZV9hcmd1bWVudF9jb3VudCAocHJvYmUpOwotK30KLSsKLSsvKiBTZWUgY29t bWVudHMgaW4gcHJvYmUuaC4gICovCi0rCi0rc3RydWN0IHZhbHVlICoKLStldmFsdWF0ZV9wcm9i ZV9hcmd1bWVudCAoc3RydWN0IHByb2JlICpwcm9iZSwgdW5zaWduZWQgbikKLSt7Ci0rICBjb25z dCBzdHJ1Y3Qgc3ltX3Byb2JlX2ZucyAqcHJvYmVfZm5zOworICAgaWYgKHdyaXRlYnVmICE9IE5V TEwpCisgICAgIHJldHVybiAtMjsKK0BAIC01Njg3LDEyOCArNTY5MywxNDYgQEAgbGludXhfcXhm ZXJfbGlicmFyaWVzX3N2cjQgKGNvbnN0IGNoYXIgKmFubmV4LCB1bnNpZ25lZCBjaGFyICpyZWFk YnVmLAorICAgeHNucHJpbnRmIChmaWxlbmFtZSwgc2l6ZW9mIGZpbGVuYW1lLCAiL3Byb2MvJWQv ZXhlIiwgcGlkKTsKKyAgIGlzX2VsZjY0ID0gZWxmXzY0X2ZpbGVfcCAoZmlsZW5hbWUsICZtYWNo aW5lKTsKKyAgIGxtbyA9IGlzX2VsZjY0ID8gJmxtb182NGJpdF9vZmZzZXRzIDogJmxtb18zMmJp dF9vZmZzZXRzOworKyAgcHRyX3NpemUgPSBpc19lbGY2NCA/IDggOiA0OworIAorLSAgaWYgKHBy aXYtPnJfZGVidWcgPT0gMCkKKy0gICAgcHJpdi0+cl9kZWJ1ZyA9IGdldF9yX2RlYnVnIChwaWQs IGlzX2VsZjY0KTsKKysgIGlmIChhbm5leFswXSA9PSAnXDAnKQorKyAgICB7CisrICAgICAgaW50 IHJfdmVyc2lvbiA9IDA7CisgCistICAvKiBXZSBmYWlsZWQgdG8gZmluZCBEVF9ERUJVRy4gIFN1 Y2ggc2l0dWF0aW9uIHdpbGwgbm90IGNoYW5nZSBmb3IgdGhpcworLSAgICAgaW5mZXJpb3IgLSBk byBub3QgcmV0cnkgaXQuICBSZXBvcnQgaXQgdG8gR0RCIGFzIEUwMSwgc2VlIGZvciB0aGUgcmVh c29ucworLSAgICAgYXQgdGhlIEdEQiBzb2xpYi1zdnI0LmMgc2lkZS4gICovCistICBpZiAocHJp di0+cl9kZWJ1ZyA9PSAoQ09SRV9BRERSKSAtMSkKKy0gICAgcmV0dXJuIC0xOworKyAgICAgIGlm IChwcml2LT5yX2RlYnVnID09IDApCisrCXByaXYtPnJfZGVidWcgPSBnZXRfcl9kZWJ1ZyAocGlk LCBpc19lbGY2NCk7CisgCistICBpZiAocHJpdi0+cl9kZWJ1ZyA9PSAwKQorLSAgICB7CistICAg ICAgZG9jdW1lbnQgPSB4c3RyZHVwICgiPGxpYnJhcnktbGlzdC1zdnI0IHZlcnNpb249XCIxLjBc Ii8+XG4iKTsKKysgICAgICAvKiBXZSBmYWlsZWQgdG8gZmluZCBEVF9ERUJVRy4gIFN1Y2ggc2l0 dWF0aW9uIHdpbGwgbm90IGNoYW5nZQorKwkgZm9yIHRoaXMgaW5mZXJpb3IgLSBkbyBub3QgcmV0 cnkgaXQuICBSZXBvcnQgaXQgdG8gR0RCIGFzCisrCSBFMDEsIHNlZSBmb3IgdGhlIHJlYXNvbnMg YXQgdGhlIEdEQiBzb2xpYi1zdnI0LmMgc2lkZS4gICovCisrICAgICAgaWYgKHByaXYtPnJfZGVi dWcgPT0gKENPUkVfQUREUikgLTEpCisrCXJldHVybiAtMTsKICsKLSsgIGdkYl9hc3NlcnQgKHBy b2JlLT5vYmpmaWxlICE9IE5VTEwpOwotKyAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUtPnNm ICE9IE5VTEwpOworKyAgICAgIGlmIChwcml2LT5yX2RlYnVnICE9IDApCisrCXsKKysJICBpZiAo bGludXhfcmVhZF9tZW1vcnkgKHByaXYtPnJfZGVidWcgKyBsbW8tPnJfdmVyc2lvbl9vZmZzZXQs CisrCQkJCSAodW5zaWduZWQgY2hhciAqKSAmcl92ZXJzaW9uLAorKwkJCQkgc2l6ZW9mIChyX3Zl cnNpb24pKSAhPSAwCisrCSAgICAgIHx8IHJfdmVyc2lvbiAhPSAxKQorKwkgICAgeworKwkgICAg ICB3YXJuaW5nICgidW5leHBlY3RlZCByX2RlYnVnIHZlcnNpb24gJWQiLCByX3ZlcnNpb24pOwor KwkgICAgfQorKwkgIGVsc2UgaWYgKHJlYWRfb25lX3B0ciAocHJpdi0+cl9kZWJ1ZyArIGxtby0+ cl9tYXBfb2Zmc2V0LAorKwkJCQkgJmxtX2FkZHIsIHB0cl9zaXplKSAhPSAwKQorKwkgICAgewor KwkgICAgICB3YXJuaW5nICgidW5hYmxlIHRvIHJlYWQgcl9tYXAgZnJvbSAweCVseCIsCisrCQkg ICAgICAgKGxvbmcpIHByaXYtPnJfZGVidWcgKyBsbW8tPnJfbWFwX29mZnNldCk7CisrCSAgICB9 CisrCX0KKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgaW50IGFsbG9jYXRlZCA9IDEw MjQ7CistICAgICAgY2hhciAqcDsKKy0gICAgICBjb25zdCBpbnQgcHRyX3NpemUgPSBpc19lbGY2 NCA/IDggOiA0OworLSAgICAgIENPUkVfQUREUiBsbV9hZGRyLCBsbV9wcmV2LCBsX25hbWUsIGxf YWRkciwgbF9sZCwgbF9uZXh0LCBsX3ByZXY7CistICAgICAgaW50IHJfdmVyc2lvbiwgaGVhZGVy X2RvbmUgPSAwOworLQorLSAgICAgIGRvY3VtZW50ID0geG1hbGxvYyAoYWxsb2NhdGVkKTsKKy0g ICAgICBzdHJjcHkgKGRvY3VtZW50LCAiPGxpYnJhcnktbGlzdC1zdnI0IHZlcnNpb249XCIxLjBc IiIpOworLSAgICAgIHAgPSBkb2N1bWVudCArIHN0cmxlbiAoZG9jdW1lbnQpOworLQorLSAgICAg IHJfdmVyc2lvbiA9IDA7CistICAgICAgaWYgKGxpbnV4X3JlYWRfbWVtb3J5IChwcml2LT5yX2Rl YnVnICsgbG1vLT5yX3ZlcnNpb25fb2Zmc2V0LAorLQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKikg JnJfdmVyc2lvbiwKKy0JCQkgICAgIHNpemVvZiAocl92ZXJzaW9uKSkgIT0gMAorLQkgIHx8IHJf dmVyc2lvbiAhPSAxKQorKyAgICAgIHdoaWxlIChhbm5leFswXSAhPSAnXDAnKQorIAl7CistCSAg d2FybmluZyAoInVuZXhwZWN0ZWQgcl9kZWJ1ZyB2ZXJzaW9uICVkIiwgcl92ZXJzaW9uKTsKKy0J ICBnb3RvIGRvbmU7CisrCSAgY29uc3QgY2hhciAqc2VwOworKwkgIENPUkVfQUREUiAqYWRkcnA7 CisrCSAgaW50IGxlbjsKICsKLSsgIHByb2JlX2ZucyA9IHByb2JlLT5vYmpmaWxlLT5zZi0+c3lt X3Byb2JlX2ZuczsKKysJICBzZXAgPSBzdHJjaHIgKGFubmV4LCAnPScpOworKwkgIGlmICghc2Vw KQorKwkgICAgYnJlYWs7CiArCi0rICBnZGJfYXNzZXJ0IChwcm9iZV9mbnMgIT0gTlVMTCk7Cisr CSAgbGVuID0gc2VwIC0gYW5uZXg7CisrCSAgaWYgKGxlbiA9PSA1ICYmICFzdHJuY21wIChhbm5l eCwgInN0YXJ0IiwgNSkpCisrCSAgICBhZGRycCA9ICZsbV9hZGRyOworKwkgIGVsc2UgaWYgKGxl biA9PSA0ICYmICFzdHJuY21wIChhbm5leCwgInByZXYiLCA0KSkKKysJICAgIGFkZHJwID0gJmxt X3ByZXY7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBhbm5leCA9IHN0cmNociAoc2VwLCAn OycpOworKwkgICAgICBpZiAoIWFubmV4KQorKwkJYnJlYWs7CisrCSAgICAgIGFubmV4Kys7Cisr CSAgICAgIGNvbnRpbnVlOworKwkgICAgfQogKwotKyAgcmV0dXJuIHByb2JlX2Zucy0+c3ltX2V2 YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChwcm9iZSwgbik7Ci0rfQorKwkgIGFubmV4ID0gZGVjb2Rl X2FkZHJlc3NfdG9fc2VtaWNvbG9uIChhZGRycCwgc2VwICsgMSk7CisgCX0KKysgICAgfQorIAor LSAgICAgIGlmIChyZWFkX29uZV9wdHIgKHByaXYtPnJfZGVidWcgKyBsbW8tPnJfbWFwX29mZnNl dCwKKy0JCQkmbG1fYWRkciwgcHRyX3NpemUpICE9IDApCisrICBkb2N1bWVudCA9IHhtYWxsb2Mg KGFsbG9jYXRlZCk7CisrICBzdHJjcHkgKGRvY3VtZW50LCAiPGxpYnJhcnktbGlzdC1zdnI0IHZl cnNpb249XCIxLjBcIiIpOworKyAgcCA9IGRvY3VtZW50ICsgc3RybGVuIChkb2N1bWVudCk7CiAr Ci0rLyogU2VlIGNvbW1lbnRzIGluIHByb2JlLmguICAqLworKyAgd2hpbGUgKGxtX2FkZHIKKysJ ICYmIHJlYWRfb25lX3B0ciAobG1fYWRkciArIGxtby0+bF9uYW1lX29mZnNldCwKKysJCQkgICZs X25hbWUsIHB0cl9zaXplKSA9PSAwCisrCSAmJiByZWFkX29uZV9wdHIgKGxtX2FkZHIgKyBsbW8t PmxfYWRkcl9vZmZzZXQsCisrCQkJICAmbF9hZGRyLCBwdHJfc2l6ZSkgPT0gMAorKwkgJiYgcmVh ZF9vbmVfcHRyIChsbV9hZGRyICsgbG1vLT5sX2xkX29mZnNldCwKKysJCQkgICZsX2xkLCBwdHJf c2l6ZSkgPT0gMAorKwkgJiYgcmVhZF9vbmVfcHRyIChsbV9hZGRyICsgbG1vLT5sX3ByZXZfb2Zm c2V0LAorKwkJCSAgJmxfcHJldiwgcHRyX3NpemUpID09IDAKKysJICYmIHJlYWRfb25lX3B0ciAo bG1fYWRkciArIGxtby0+bF9uZXh0X29mZnNldCwKKysJCQkgICZsX25leHQsIHB0cl9zaXplKSA9 PSAwKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgY2hhciBsaWJuYW1lW1BBVEhfTUFYXTsKICsK LSBzdHJ1Y3QgdmFsdWUgKgotIHByb2JlX3NhZmVfZXZhbHVhdGVfYXRfcGMgKHN0cnVjdCBmcmFt ZV9pbmZvICpmcmFtZSwgdW5zaWduZWQgbikKLSB7Ci0gICBzdHJ1Y3QgcHJvYmUgKnByb2JlOwot LSAgY29uc3Qgc3RydWN0IHN5bV9wcm9iZV9mbnMgKnByb2JlX2ZuczsKLSAgIHVuc2lnbmVkIG5f YXJnczsKKysgICAgICBpZiAobG1fcHJldiAhPSBsX3ByZXYpCisgCXsKKy0JICB3YXJuaW5nICgi dW5hYmxlIHRvIHJlYWQgcl9tYXAgZnJvbSAweCVseCIsCistCQkgICAobG9uZykgcHJpdi0+cl9k ZWJ1ZyArIGxtby0+cl9tYXBfb2Zmc2V0KTsKKy0JICBnb3RvIGRvbmU7CisrCSAgd2FybmluZyAo IkNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSBsaXN0OiAweCVseCAhPSAweCVseCIsCisrCQkgICAo bG9uZykgbG1fcHJldiwgKGxvbmcpIGxfcHJldik7CisrCSAgYnJlYWs7CisgCX0KKyAKKy0gICAg ICBsbV9wcmV2ID0gMDsKKy0gICAgICB3aGlsZSAocmVhZF9vbmVfcHRyIChsbV9hZGRyICsgbG1v LT5sX25hbWVfb2Zmc2V0LAorLQkJCSAgICZsX25hbWUsIHB0cl9zaXplKSA9PSAwCistCSAgICAg JiYgcmVhZF9vbmVfcHRyIChsbV9hZGRyICsgbG1vLT5sX2FkZHJfb2Zmc2V0LAorLQkJCSAgICAg ICZsX2FkZHIsIHB0cl9zaXplKSA9PSAwCistCSAgICAgJiYgcmVhZF9vbmVfcHRyIChsbV9hZGRy ICsgbG1vLT5sX2xkX29mZnNldCwKKy0JCQkgICAgICAmbF9sZCwgcHRyX3NpemUpID09IDAKKy0J ICAgICAmJiByZWFkX29uZV9wdHIgKGxtX2FkZHIgKyBsbW8tPmxfcHJldl9vZmZzZXQsCistCQkJ ICAgICAgJmxfcHJldiwgcHRyX3NpemUpID09IDAKKy0JICAgICAmJiByZWFkX29uZV9wdHIgKGxt X2FkZHIgKyBsbW8tPmxfbmV4dF9vZmZzZXQsCistCQkJICAgICAgJmxfbmV4dCwgcHRyX3NpemUp ID09IDApCisrICAgICAgLyogTm90IGNoZWNraW5nIGZvciBlcnJvciBiZWNhdXNlIHJlYWRpbmcg bWF5IHN0b3AgYmVmb3JlCisrCSB3ZSd2ZSBnb3QgUEFUSF9NQVggd29ydGggb2YgY2hhcmFjdGVy cy4gICovCisrICAgICAgbGlibmFtZVswXSA9ICdcMCc7CisrICAgICAgbGludXhfcmVhZF9tZW1v cnkgKGxfbmFtZSwgbGlibmFtZSwgc2l6ZW9mIChsaWJuYW1lKSAtIDEpOworKyAgICAgIGxpYm5h bWVbc2l6ZW9mIChsaWJuYW1lKSAtIDFdID0gJ1wwJzsKKysgICAgICBpZiAobGlibmFtZVswXSAh PSAnXDAnKQorIAl7CistCSAgdW5zaWduZWQgY2hhciBsaWJuYW1lW1BBVEhfTUFYXTsKKysJICAv KiA2eCB0aGUgc2l6ZSBmb3IgeG1sX2VzY2FwZV90ZXh0IGJlbG93LiAgKi8KKysJICBzaXplX3Qg bGVuID0gNiAqIHN0cmxlbiAoKGNoYXIgKikgbGlibmFtZSk7CisrCSAgY2hhciAqbmFtZTsKICAK LSAgIHByb2JlID0gZmluZF9wcm9iZV9ieV9wYyAoZ2V0X2ZyYW1lX3BjIChmcmFtZSkpOwotICAg aWYgKCFwcm9iZSkKLSAgICAgcmV0dXJuIE5VTEw7CistCSAgaWYgKGxtX3ByZXYgIT0gbF9wcmV2 KQorKwkgIGlmICghaGVhZGVyX2RvbmUpCisgCSAgICB7CistCSAgICAgIHdhcm5pbmcgKCJDb3Jy dXB0ZWQgc2hhcmVkIGxpYnJhcnkgbGlzdDogMHglbHggIT0gMHglbHgiLAorLQkJICAgICAgIChs b25nKSBsbV9wcmV2LCAobG9uZykgbF9wcmV2KTsKKy0JICAgICAgYnJlYWs7CisrCSAgICAgIC8q IFRlcm1pbmF0ZSBgPGxpYnJhcnktbGlzdC1zdnI0Jy4gICovCisrCSAgICAgICpwKysgPSAnPic7 CisrCSAgICAgIGhlYWRlcl9kb25lID0gMTsKKyAJICAgIH0KICAKLS0gIGdkYl9hc3NlcnQgKHBy b2JlLT5vYmpmaWxlICE9IE5VTEwpOwotLSAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUtPnNm ICE9IE5VTEwpOwotLSAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUtPnNmLT5zeW1fcHJvYmVf Zm5zICE9IE5VTEwpOworLQkgIC8qIE5vdCBjaGVja2luZyBmb3IgZXJyb3IgYmVjYXVzZSByZWFk aW5nIG1heSBzdG9wIGJlZm9yZQorLQkgICAgIHdlJ3ZlIGdvdCBQQVRIX01BWCB3b3J0aCBvZiBj aGFyYWN0ZXJzLiAgKi8KKy0JICBsaWJuYW1lWzBdID0gJ1wwJzsKKy0JICBsaW51eF9yZWFkX21l bW9yeSAobF9uYW1lLCBsaWJuYW1lLCBzaXplb2YgKGxpYm5hbWUpIC0gMSk7CistCSAgbGlibmFt ZVtzaXplb2YgKGxpYm5hbWUpIC0gMV0gPSAnXDAnOworLQkgIGlmIChsaWJuYW1lWzBdICE9ICdc MCcpCisrCSAgd2hpbGUgKGFsbG9jYXRlZCA8IHAgLSBkb2N1bWVudCArIGxlbiArIDIwMCkKKyAJ ICAgIHsKKy0JICAgICAgLyogNnggdGhlIHNpemUgZm9yIHhtbF9lc2NhcGVfdGV4dCBiZWxvdy4g ICovCistCSAgICAgIHNpemVfdCBsZW4gPSA2ICogc3RybGVuICgoY2hhciAqKSBsaWJuYW1lKTsK Ky0JICAgICAgY2hhciAqbmFtZTsKIC0KLS0gIHByb2JlX2ZucyA9IHByb2JlLT5vYmpmaWxlLT5z Zi0+c3ltX3Byb2JlX2ZuczsKLS0gIG5fYXJncyA9IHByb2JlX2Zucy0+c3ltX2dldF9wcm9iZV9h cmd1bWVudF9jb3VudCAocHJvYmUpOworLQkgICAgICBpZiAoIWhlYWRlcl9kb25lKQorLQkJewor LQkJICAvKiBUZXJtaW5hdGUgYDxsaWJyYXJ5LWxpc3Qtc3ZyNCcuICAqLworLQkJICAqcCsrID0g Jz4nOworLQkJICBoZWFkZXJfZG9uZSA9IDE7CistCQl9CiAtCi0rICBuX2FyZ3MgPSBnZXRfcHJv YmVfYXJndW1lbnRfY291bnQgKHByb2JlKTsKLSAgIGlmIChuID49IG5fYXJncykKLSAgICAgcmV0 dXJuIE5VTEw7CistCSAgICAgIHdoaWxlIChhbGxvY2F0ZWQgPCBwIC0gZG9jdW1lbnQgKyBsZW4g KyAyMDApCistCQl7CistCQkgIC8qIEV4cGFuZCB0byBndWFyYW50ZWUgc3VmZmljaWVudCBzdG9y YWdlLiAgKi8KKy0JCSAgdWludHB0cl90IGRvY3VtZW50X2xlbiA9IHAgLSBkb2N1bWVudDsKKy0K Ky0JCSAgZG9jdW1lbnQgPSB4cmVhbGxvYyAoZG9jdW1lbnQsIDIgKiBhbGxvY2F0ZWQpOworLQkJ ICBhbGxvY2F0ZWQgKj0gMjsKKy0JCSAgcCA9IGRvY3VtZW50ICsgZG9jdW1lbnRfbGVuOworLQkJ fQorKwkgICAgICAvKiBFeHBhbmQgdG8gZ3VhcmFudGVlIHN1ZmZpY2llbnQgc3RvcmFnZS4gICov CisrCSAgICAgIHVpbnRwdHJfdCBkb2N1bWVudF9sZW4gPSBwIC0gZG9jdW1lbnQ7CisgCistCSAg ICAgIG5hbWUgPSB4bWxfZXNjYXBlX3RleHQgKChjaGFyICopIGxpYm5hbWUpOworLQkgICAgICBw ICs9IHNwcmludGYgKHAsICI8bGlicmFyeSBuYW1lPVwiJXNcIiBsbT1cIjB4JWx4XCIgIgorLQkJ CSAgICAgICAibF9hZGRyPVwiMHglbHhcIiBsX2xkPVwiMHglbHhcIi8+IiwKKy0JCQkgICAgbmFt ZSwgKHVuc2lnbmVkIGxvbmcpIGxtX2FkZHIsCistCQkJICAgICh1bnNpZ25lZCBsb25nKSBsX2Fk ZHIsICh1bnNpZ25lZCBsb25nKSBsX2xkKTsKKy0JICAgICAgZnJlZSAobmFtZSk7CistCSAgICB9 CistCSAgZWxzZSBpZiAobG1fcHJldiA9PSAwKQorLQkgICAgeworLQkgICAgICBzcHJpbnRmIChw LCAiIG1haW4tbG09XCIweCVseFwiIiwgKHVuc2lnbmVkIGxvbmcpIGxtX2FkZHIpOworLQkgICAg ICBwID0gcCArIHN0cmxlbiAocCk7CisrCSAgICAgIGRvY3VtZW50ID0geHJlYWxsb2MgKGRvY3Vt ZW50LCAyICogYWxsb2NhdGVkKTsKKysJICAgICAgYWxsb2NhdGVkICo9IDI7CisrCSAgICAgIHAg PSBkb2N1bWVudCArIGRvY3VtZW50X2xlbjsKKyAJICAgIH0KICAKLS0gIHJldHVybiBwcm9iZV9m bnMtPnN5bV9ldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCAocHJvYmUsIG4pOwotKyAgcmV0dXJuIGV2 YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChwcm9iZSwgbik7Ci0gfQorLQkgIGlmIChsX25leHQgPT0g MCkKKy0JICAgIGJyZWFrOworLQorLQkgIGxtX3ByZXYgPSBsbV9hZGRyOworLQkgIGxtX2FkZHIg PSBsX25leHQ7CisrCSAgbmFtZSA9IHhtbF9lc2NhcGVfdGV4dCAoKGNoYXIgKikgbGlibmFtZSk7 CisrCSAgcCArPSBzcHJpbnRmIChwLCAiPGxpYnJhcnkgbmFtZT1cIiVzXCIgbG09XCIweCVseFwi ICIKKysJCQkibF9hZGRyPVwiMHglbHhcIiBsX2xkPVwiMHglbHhcIi8+IiwKKysJCQluYW1lLCAo dW5zaWduZWQgbG9uZykgbG1fYWRkciwKKysJCQkodW5zaWduZWQgbG9uZykgbF9hZGRyLCAodW5z aWduZWQgbG9uZykgbF9sZCk7CisrCSAgZnJlZSAobmFtZSk7CisgCX0KKy0gICAgZG9uZToKKy0g ICAgICBpZiAoIWhlYWRlcl9kb25lKQorKyAgICAgIGVsc2UgaWYgKGxtX3ByZXYgPT0gMCkKKyAJ eworLQkgIC8qIEVtcHR5IGxpc3Q7IHRlcm1pbmF0ZSBgPGxpYnJhcnktbGlzdC1zdnI0Jy4gICov CistCSAgc3RyY3B5IChwLCAiLz4iKTsKKysJICBzcHJpbnRmIChwLCAiIG1haW4tbG09XCIweCVs eFwiIiwgKHVuc2lnbmVkIGxvbmcpIGxtX2FkZHIpOworKwkgIHAgPSBwICsgc3RybGVuIChwKTsK KyAJfQorLSAgICAgIGVsc2UKKy0Jc3RyY3B5IChwLCAiPC9saWJyYXJ5LWxpc3Qtc3ZyND4iKTsK KysKKysgICAgICBsbV9wcmV2ID0gbG1fYWRkcjsKKysgICAgICBsbV9hZGRyID0gbF9uZXh0Owor ICAgICB9CiAgCi0gLyogU2VlIGNvbW1lbnQgaW4gcHJvYmUuaC4gICovCisrICBpZiAoIWhlYWRl cl9kb25lKQorKyAgICB7CisrICAgICAgLyogRW1wdHkgbGlzdDsgdGVybWluYXRlIGA8bGlicmFy eS1saXN0LXN2cjQnLiAgKi8KKysgICAgICBzdHJjcHkgKHAsICIvPiIpOworKyAgICB9CisrICBl bHNlCisrICAgIHN0cmNweSAocCwgIjwvbGlicmFyeS1saXN0LXN2cjQ+Iik7CisrCisgICBkb2N1 bWVudF9sZW4gPSBzdHJsZW4gKGRvY3VtZW50KTsKKyAgIGlmIChvZmZzZXQgPCBkb2N1bWVudF9s ZW4pCisgICAgIGRvY3VtZW50X2xlbiAtPSBvZmZzZXQ7CisKKy0tS2M5SE5qcHpPWFZjN0ZGVS0t CisKCmRpZmYgLS1naXQgYS9nZGItZGxvcGVuLXN0YXAtcHJvYmUtNG9mNy5wYXRjaCBiL2dkYi1k bG9wZW4tc3RhcC1wcm9iZS00b2Y3LnBhdGNoCmluZGV4IDI5OTkzMWEuLjIyNGMzNjYgMTAwNjQ0 Ci0tLSBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS00b2Y3LnBhdGNoCisrKyBiL2dkYi1kbG9wZW4t c3RhcC1wcm9iZS00b2Y3LnBhdGNoCkBAIC0xLDEzMSArMSwxNDYgQEAKLTIwMTItMDctMTkgIEdh cnkgQmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgoraHR0cDovL3NvdXJjZXdhcmUub3JnL21s L2dkYi1wYXRjaGVzLzIwMTMtMDUvbXNnMDA2MjguaHRtbAorU3ViamVjdDogW1JGQSA0LzddIEdE QiBzdXBwb3J0IGZvciBuZXcgZ2Ric2VydmVyIGZ1bmN0aW9uYWxpdHkKIAotCSogc29saWItc3Zy NC5jIChzdnI0X2luZm8pOiBNb3ZlIGVhcmxpZXIuCi0JKHNvbGliX3N2cjRfcHNwYWNlX2RhdGEp OiBMaWtld2lzZS4KLQkoc3ZyNF9wc3BhY2VfZGF0YV9jbGVhbnVwKTogTGlrZXdpc2UuCi0JKGdl dF9zdnI0X2luZm8pOiBMaWtld2lzZS4KIAotZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1zdnI0LmMg Yi9nZGIvc29saWItc3ZyNC5jCi1pbmRleCAzMDdlNDgzLi5jODhiOWNiIDEwMDY0NAotLS0tIGEv Z2RiL3NvbGliLXN2cjQuYwotKysrIGIvZ2RiL3NvbGliLXN2cjQuYwotQEAgLTEwNiw2ICsxMDYs NTkgQEAgc3RhdGljIGNvbnN0ICBjaGFyICogY29uc3QgbWFpbl9uYW1lX2xpc3RbXSA9Ci0gICBO VUxMCi0gfTsKKy0tQ2FQS2doM1hIcHEzckVVVgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBj aGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKKworVGhpcyBwYXRj aCBhZGRzIGNsaWVudCBzdXBwb3J0IGZvciB0aGUgbmV3IGdkYnNlcnZlciBmdW5jdGlvbmFsaXR5 Citwcm92aWRlZCBieSBwYXRjaCAzIG9mIHRoaXMgc2VyaWVzLgorCistLUNhUEtnaDNYSHBxM3JF VVYKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1E aXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InJ0bGQtcHJvYmVzLTQtcmVtb3RlLnBh dGNoIgorCisyMDEzLTA1LTE2ICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVkaGF0LmNvbT4KKwor CSogdGFyZ2V0LmggKHRhcmdldF9vcHMpOiBOZXcgZmllbGQKKwkidG9fYXVnbWVudGVkX2xpYnJh cmllc19zdnI0X3JlYWQiLgorCSh0YXJnZXRfYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQp OiBOZXcgbWFjcm8uCisJKiB0YXJnZXQuYyAodXBkYXRlX2N1cnJlbnRfdGFyZ2V0KTogSGFuZGxl CisJdG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQuCisJKiByZW1vdGUuYyAocmVtb3Rl X3N0YXRlKTogTmV3IGZpZWxkCisJImF1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkIi4KKwko cmVtb3RlX2F1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkX2ZlYXR1cmUpOiBOZXcgZnVuY3Rp b24uCisJKHJlbW90ZV9wcm90b2NvbF9mZWF0dXJlcyk6IEFkZCBlbnRyeSBmb3IKKwkiYXVnbWVu dGVkLWxpYnJhcmllcy1zdnI0LXJlYWQiLgorCShyZW1vdGVfYXVnbWVudGVkX2xpYnJhcmllc19z dnI0X3JlYWQpOiBOZXcgZnVuY3Rpb24uCisJKGluaXRfcmVtb3RlX29wcyk6IEluaXRpYWxpemUK KwlyZW1vdGVfb3BzLnRvX2F1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkLgorCitkaWZmIC0t Z2l0IGEvZ2RiL3RhcmdldC5oIGIvZ2RiL3RhcmdldC5oCitpbmRleCBlOTM3ZDM5Li5hODU4N2U4 IDEwMDY0NAorLS0tIGEvZ2RiL3RhcmdldC5oCisrKysgYi9nZGIvdGFyZ2V0LmgKK0BAIC05NDEs NiArOTQxLDEwIEBAIHN0cnVjdCB0YXJnZXRfb3BzCisgICAgICAgIChpbmNsdXNpdmUpIHRvIGZ1 bmN0aW9uIEVORCAoZXhjbHVzaXZlKS4gICovCisgICAgIHZvaWQgKCp0b19jYWxsX2hpc3Rvcnlf cmFuZ2UpIChVTE9OR0VTVCBiZWdpbiwgVUxPTkdFU1QgZW5kLCBpbnQgZmxhZ3MpOwogIAotKy8q IFBlciBwc3BhY2UgU1ZSNCBzcGVjaWZpYyBkYXRhLiAgKi8KLSsKLStzdHJ1Y3Qgc3ZyNF9pbmZv Ci0rewotKyAgQ09SRV9BRERSIGRlYnVnX2Jhc2U7CS8qIEJhc2Ugb2YgZHluYW1pYyBsaW5rZXIg c3RydWN0dXJlcy4gICovCisrICAgIC8qIE5vbnplcm8gaWYgVEFSR0VUX09CSkVDVF9MSUJSQVJJ RVNfU1ZSNCBtYXkgYmUgcmVhZCB3aXRoIGEKKysgICAgICAgbm9uLWVtcHR5IGFubmV4LiAgKi8K KysgICAgaW50ICgqdG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQpICh2b2lkKTsKICsK LSsgIC8qIFZhbGlkaXR5IGZsYWcgZm9yIGRlYnVnX2xvYWRlcl9vZmZzZXQuICAqLwotKyAgaW50 IGRlYnVnX2xvYWRlcl9vZmZzZXRfcDsKLSsKLSsgIC8qIExvYWQgYWRkcmVzcyBmb3IgdGhlIGR5 bmFtaWMgbGlua2VyLCBpbmZlcnJlZC4gICovCi0rICBDT1JFX0FERFIgZGVidWdfbG9hZGVyX29m ZnNldDsKLSsKLSsgIC8qIE5hbWUgb2YgdGhlIGR5bmFtaWMgbGlua2VyLCB2YWxpZCBpZiBkZWJ1 Z19sb2FkZXJfb2Zmc2V0X3AuICAqLwotKyAgY2hhciAqZGVidWdfbG9hZGVyX25hbWU7Ci0rCi0r ICAvKiBMb2FkIG1hcCBhZGRyZXNzIGZvciB0aGUgbWFpbiBleGVjdXRhYmxlLiAgKi8KLSsgIENP UkVfQUREUiBtYWluX2xtX2FkZHI7Ci0rCi0rICBDT1JFX0FERFIgaW50ZXJwX3RleHRfc2VjdF9s b3c7Ci0rICBDT1JFX0FERFIgaW50ZXJwX3RleHRfc2VjdF9oaWdoOwotKyAgQ09SRV9BRERSIGlu dGVycF9wbHRfc2VjdF9sb3c7Ci0rICBDT1JFX0FERFIgaW50ZXJwX3BsdF9zZWN0X2hpZ2g7Ci0r fTsKKyAgICAgaW50IHRvX21hZ2ljOworICAgICAvKiBOZWVkIHN1Yi1zdHJ1Y3R1cmUgZm9yIHRh cmdldCBtYWNoaW5lIHJlbGF0ZWQgcmF0aGVyIHRoYW4gY29tbSByZWxhdGVkPworICAgICAgKi8K K0BAIC0xODA5LDYgKzE4MTMsOSBAQCBleHRlcm4gY2hhciAqdGFyZ2V0X2ZpbGVpb19yZWFkX3N0 cmFsbG9jIChjb25zdCBjaGFyICpmaWxlbmFtZSk7CisgI2RlZmluZSB0YXJnZXRfY2FuX3VzZV9h Z2VudCgpIFwKKyAgICgqY3VycmVudF90YXJnZXQudG9fY2FuX3VzZV9hZ2VudCkgKCkKKyAKKysj ZGVmaW5lIHRhcmdldF9hdWdtZW50ZWRfbGlicmFyaWVzX3N2cjRfcmVhZCgpIFwKKysgICgqY3Vy cmVudF90YXJnZXQudG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQpICgpCiArCi0rLyog UGVyLXByb2dyYW0tc3BhY2UgZGF0YSBrZXkuICAqLwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJv Z3JhbV9zcGFjZV9kYXRhICpzb2xpYl9zdnI0X3BzcGFjZV9kYXRhOworIC8qIENvbW1hbmQgbG9n Z2luZyBmYWNpbGl0eS4gICovCisgCisgI2RlZmluZSB0YXJnZXRfbG9nX2NvbW1hbmQocCkJCQkJ CQlcCitkaWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5jIGIvZ2RiL3RhcmdldC5jCitpbmRleCA4NjUz ZGFjLi41MTliOTdmIDEwMDY0NAorLS0tIGEvZ2RiL3RhcmdldC5jCisrKysgYi9nZGIvdGFyZ2V0 LmMKK0BAIC03MzEsNiArNzMxLDcgQEAgdXBkYXRlX2N1cnJlbnRfdGFyZ2V0ICh2b2lkKQorICAg ICAgIElOSEVSSVQgKHRvX3RyYWNlZnJhbWVfaW5mbywgdCk7CisgICAgICAgSU5IRVJJVCAodG9f dXNlX2FnZW50LCB0KTsKKyAgICAgICBJTkhFUklUICh0b19jYW5fdXNlX2FnZW50LCB0KTsKKysg ICAgICBJTkhFUklUICh0b19hdWdtZW50ZWRfbGlicmFyaWVzX3N2cjRfcmVhZCwgdCk7CisgICAg ICAgSU5IRVJJVCAodG9fbWFnaWMsIHQpOworICAgICAgIElOSEVSSVQgKHRvX3N1cHBvcnRzX2V2 YWx1YXRpb25fb2ZfYnJlYWtwb2ludF9jb25kaXRpb25zLCB0KTsKKyAgICAgICBJTkhFUklUICh0 b19jYW5fcnVuX2JyZWFrcG9pbnRfY29tbWFuZHMsIHQpOworQEAgLTk3NSw2ICs5NzYsOSBAQCB1 cGRhdGVfY3VycmVudF90YXJnZXQgKHZvaWQpCisgICBkZV9mYXVsdCAodG9fY2FuX3VzZV9hZ2Vu dCwKKyAJICAgIChpbnQgKCopICh2b2lkKSkKKyAJICAgIHJldHVybl96ZXJvKTsKKysgIGRlX2Zh dWx0ICh0b19hdWdtZW50ZWRfbGlicmFyaWVzX3N2cjRfcmVhZCwKKysJICAgIChpbnQgKCopICh2 b2lkKSkKKysJICAgIHJldHVybl96ZXJvKTsKKyAgIGRlX2ZhdWx0ICh0b19leGVjdXRpb25fZGly ZWN0aW9uLCBkZWZhdWx0X2V4ZWN1dGlvbl9kaXJlY3Rpb24pOworIAorICN1bmRlZiBkZV9mYXVs dAorZGlmZiAtLWdpdCBhL2dkYi9yZW1vdGUuYyBiL2dkYi9yZW1vdGUuYworaW5kZXggNTFiZjAy NS4uZTFjZjhhNCAxMDA2NDQKKy0tLSBhL2dkYi9yZW1vdGUuYworKysrIGIvZ2RiL3JlbW90ZS5j CitAQCAtMzQzLDYgKzM0MywxMCBAQCBzdHJ1Y3QgcmVtb3RlX3N0YXRlCisgICAvKiBUcnVlIGlm IHRoZSBzdHViIGNhbiBjb2xsZWN0IHN0cmluZ3MgdXNpbmcgdHJhY2VueiBieXRlY29kZS4gICov CisgICBpbnQgc3RyaW5nX3RyYWNpbmc7CisgCisrICAvKiBUcnVlIGlmIHRoZSBzdHViIHN1cHBv cnRzIHFYZmVyOmxpYnJhcmllcy1zdnI0OnJlYWQgd2l0aCBhCisrICAgICBub24tZW1wdHkgYW5u ZXguICAqLworKyAgaW50IGF1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkOwogKworICAgLyog Tm9uemVybyBpZiB0aGUgdXNlciBoYXMgcHJlc3NlZCBDdHJsLUMsIGJ1dCB0aGUgdGFyZ2V0IGhh c24ndAorICAgICAgcmVzcG9uZGVkIHRvIHRoYXQuICAqLworICAgaW50IGN0cmxjX3BlbmRpbmdf cDsKK0BAIC0zOTMxLDYgKzM5MzUsMTYgQEAgcmVtb3RlX3N0cmluZ190cmFjaW5nX2ZlYXR1cmUg KGNvbnN0IHN0cnVjdCBwcm90b2NvbF9mZWF0dXJlICpmZWF0dXJlLAorICAgcnMtPnN0cmluZ190 cmFjaW5nID0gKHN1cHBvcnQgPT0gUEFDS0VUX0VOQUJMRSk7CisgfQorIAogK3N0YXRpYyB2b2lk Ci0rc3ZyNF9wc3BhY2VfZGF0YV9jbGVhbnVwIChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNl LCB2b2lkICphcmcpCisrcmVtb3RlX2F1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkX2ZlYXR1 cmUKKysgIChjb25zdCBzdHJ1Y3QgcHJvdG9jb2xfZmVhdHVyZSAqZmVhdHVyZSwKKysgICBlbnVt IHBhY2tldF9zdXBwb3J0IHN1cHBvcnQsIGNvbnN0IGNoYXIgKnZhbHVlKQogK3sKLSsgIHN0cnVj dCBzdnI0X2luZm8gKmluZm87CisrICBzdHJ1Y3QgcmVtb3RlX3N0YXRlICpycyA9IGdldF9yZW1v dGVfc3RhdGUgKCk7CiArCi0rICBpbmZvID0gcHJvZ3JhbV9zcGFjZV9kYXRhIChwc3BhY2UsIHNv bGliX3N2cjRfcHNwYWNlX2RhdGEpOwotKyAgeGZyZWUgKGluZm8pOworKyAgcnMtPmF1Z21lbnRl ZF9saWJyYXJpZXNfc3ZyNF9yZWFkID0gKHN1cHBvcnQgPT0gUEFDS0VUX0VOQUJMRSk7CiArfQog KwotKy8qIEdldCB0aGUgY3VycmVudCBzdnI0IGRhdGEuICBJZiBub25lIGlzIGZvdW5kIHlldCwg YWRkIGl0IG5vdy4gIFRoaXMKLSsgICBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhIHZhbGlkIG9i amVjdC4gICovCi0rCi0rc3RhdGljIHN0cnVjdCBzdnI0X2luZm8gKgotK2dldF9zdnI0X2luZm8g KHZvaWQpCisgc3RhdGljIHN0cnVjdCBwcm90b2NvbF9mZWF0dXJlIHJlbW90ZV9wcm90b2NvbF9m ZWF0dXJlc1tdID0geworICAgeyAiUGFja2V0U2l6ZSIsIFBBQ0tFVF9ESVNBQkxFLCByZW1vdGVf cGFja2V0X3NpemUsIC0xIH0sCisgICB7ICJxWGZlcjphdXh2OnJlYWQiLCBQQUNLRVRfRElTQUJM RSwgcmVtb3RlX3N1cHBvcnRlZF9wYWNrZXQsCitAQCAtMzk0MSw2ICszOTU1LDggQEAgc3RhdGlj IHN0cnVjdCBwcm90b2NvbF9mZWF0dXJlIHJlbW90ZV9wcm90b2NvbF9mZWF0dXJlc1tdID0gewor ICAgICBQQUNLRVRfcVhmZXJfbGlicmFyaWVzIH0sCisgICB7ICJxWGZlcjpsaWJyYXJpZXMtc3Zy NDpyZWFkIiwgUEFDS0VUX0RJU0FCTEUsIHJlbW90ZV9zdXBwb3J0ZWRfcGFja2V0LAorICAgICBQ QUNLRVRfcVhmZXJfbGlicmFyaWVzX3N2cjQgfSwKKysgIHsgImF1Z21lbnRlZC1saWJyYXJpZXMt c3ZyNC1yZWFkIiwgUEFDS0VUX0RJU0FCTEUsCisrICAgIHJlbW90ZV9hdWdtZW50ZWRfbGlicmFy aWVzX3N2cjRfcmVhZF9mZWF0dXJlLCAtMSB9LAorICAgeyAicVhmZXI6bWVtb3J5LW1hcDpyZWFk IiwgUEFDS0VUX0RJU0FCTEUsIHJlbW90ZV9zdXBwb3J0ZWRfcGFja2V0LAorICAgICBQQUNLRVRf cVhmZXJfbWVtb3J5X21hcCB9LAorICAgeyAicVhmZXI6c3B1OnJlYWQiLCBQQUNLRVRfRElTQUJM RSwgcmVtb3RlX3N1cHBvcnRlZF9wYWNrZXQsCitAQCAtMTEzNDMsNiArMTEzNTksMTQgQEAgcmVt b3RlX3JlYWRfYnRyYWNlIChzdHJ1Y3QgYnRyYWNlX3RhcmdldF9pbmZvICp0aW5mbywKKyAgIHJl dHVybiBidHJhY2U7CisgfQorIAorK3N0YXRpYyBpbnQKKytyZW1vdGVfYXVnbWVudGVkX2xpYnJh cmllc19zdnI0X3JlYWQgKHZvaWQpCiArewotKyAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbzsKLSsK LSsgIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwgc29s aWJfc3ZyNF9wc3BhY2VfZGF0YSk7Ci0rICBpZiAoaW5mbyAhPSBOVUxMKQotKyAgICByZXR1cm4g aW5mbzsKKysgIHN0cnVjdCByZW1vdGVfc3RhdGUgKnJzID0gZ2V0X3JlbW90ZV9zdGF0ZSAoKTsK ICsKLSsgIGluZm8gPSBYWkFMTE9DIChzdHJ1Y3Qgc3ZyNF9pbmZvKTsKLSsgIHNldF9wcm9ncmFt X3NwYWNlX2RhdGEgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0 YSwgaW5mbyk7Ci0rICByZXR1cm4gaW5mbzsKKysgIHJldHVybiBycy0+YXVnbWVudGVkX2xpYnJh cmllc19zdnI0X3JlYWQ7CiArfQogKwotIC8qIFJldHVybiBub24temVybyBpZiBHREJfU09fTkFN RSBhbmQgSU5GRVJJT1JfU09fTkFNRSByZXByZXNlbnQKLSAgICB0aGUgc2FtZSBzaGFyZWQgbGli cmFyeS4gICovCi0gCi1AQCAtMjkxLDU5ICszNDQsNiBAQCBsbV9hZGRyX2NoZWNrIChzdHJ1Y3Qg c29fbGlzdCAqc28sIGJmZCAqYWJmZCkKLSAgIHJldHVybiBzby0+bG1faW5mby0+bF9hZGRyOwor IHN0YXRpYyB2b2lkCisgaW5pdF9yZW1vdGVfb3BzICh2b2lkKQorIHsKK0BAIC0xMTQ2NSw2ICsx MTQ4OSw4IEBAIFNwZWNpZnkgdGhlIHNlcmlhbCBkZXZpY2UgaXQgaXMgY29ubmVjdGVkIHRvXG5c CisgICByZW1vdGVfb3BzLnRvX2Rpc2FibGVfYnRyYWNlID0gcmVtb3RlX2Rpc2FibGVfYnRyYWNl OworICAgcmVtb3RlX29wcy50b190ZWFyZG93bl9idHJhY2UgPSByZW1vdGVfdGVhcmRvd25fYnRy YWNlOworICAgcmVtb3RlX29wcy50b19yZWFkX2J0cmFjZSA9IHJlbW90ZV9yZWFkX2J0cmFjZTsK KysgIHJlbW90ZV9vcHMudG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQgPQorKyAgICBy ZW1vdGVfYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQ7CiAgfQogIAotLS8qIFBlciBwc3Bh Y2UgU1ZSNCBzcGVjaWZpYyBkYXRhLiAgKi8KLS0KLS1zdHJ1Y3Qgc3ZyNF9pbmZvCi0tewotLSAg Q09SRV9BRERSIGRlYnVnX2Jhc2U7CS8qIEJhc2Ugb2YgZHluYW1pYyBsaW5rZXIgc3RydWN0dXJl cy4gICovCi0tCi0tICAvKiBWYWxpZGl0eSBmbGFnIGZvciBkZWJ1Z19sb2FkZXJfb2Zmc2V0LiAg Ki8KLS0gIGludCBkZWJ1Z19sb2FkZXJfb2Zmc2V0X3A7Ci0tCi0tICAvKiBMb2FkIGFkZHJlc3Mg Zm9yIHRoZSBkeW5hbWljIGxpbmtlciwgaW5mZXJyZWQuICAqLwotLSAgQ09SRV9BRERSIGRlYnVn X2xvYWRlcl9vZmZzZXQ7Ci0tCi0tICAvKiBOYW1lIG9mIHRoZSBkeW5hbWljIGxpbmtlciwgdmFs aWQgaWYgZGVidWdfbG9hZGVyX29mZnNldF9wLiAgKi8KLS0gIGNoYXIgKmRlYnVnX2xvYWRlcl9u YW1lOwotLQotLSAgLyogTG9hZCBtYXAgYWRkcmVzcyBmb3IgdGhlIG1haW4gZXhlY3V0YWJsZS4g ICovCi0tICBDT1JFX0FERFIgbWFpbl9sbV9hZGRyOwotLQotLSAgQ09SRV9BRERSIGludGVycF90 ZXh0X3NlY3RfbG93OwotLSAgQ09SRV9BRERSIGludGVycF90ZXh0X3NlY3RfaGlnaDsKLS0gIENP UkVfQUREUiBpbnRlcnBfcGx0X3NlY3RfbG93OwotLSAgQ09SRV9BRERSIGludGVycF9wbHRfc2Vj dF9oaWdoOwotLX07Ci0tCi0tLyogUGVyLXByb2dyYW0tc3BhY2UgZGF0YSBrZXkuICAqLwotLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZV9kYXRhICpzb2xpYl9zdnI0X3BzcGFjZV9k YXRhOwotLQotLXN0YXRpYyB2b2lkCi0tc3ZyNF9wc3BhY2VfZGF0YV9jbGVhbnVwIChzdHJ1Y3Qg cHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCB2b2lkICphcmcpCi0tewotLSAgc3RydWN0IHN2cjRfaW5m byAqaW5mbzsKLS0KLS0gIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEgKHBzcGFjZSwgc29saWJf c3ZyNF9wc3BhY2VfZGF0YSk7Ci0tICB4ZnJlZSAoaW5mbyk7Ci0tfQotLQotLS8qIEdldCB0aGUg Y3VycmVudCBzdnI0IGRhdGEuICBJZiBub25lIGlzIGZvdW5kIHlldCwgYWRkIGl0IG5vdy4gIFRo aXMKLS0gICBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhIHZhbGlkIG9iamVjdC4gICovCi0tCi0t c3RhdGljIHN0cnVjdCBzdnI0X2luZm8gKgotLWdldF9zdnI0X2luZm8gKHZvaWQpCi0tewotLSAg c3RydWN0IHN2cjRfaW5mbyAqaW5mbzsKLS0KLS0gIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEg KGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0YSk7Ci0tICBpZiAo aW5mbyAhPSBOVUxMKQotLSAgICByZXR1cm4gaW5mbzsKLS0KLS0gIGluZm8gPSBYWkFMTE9DIChz dHJ1Y3Qgc3ZyNF9pbmZvKTsKLS0gIHNldF9wcm9ncmFtX3NwYWNlX2RhdGEgKGN1cnJlbnRfcHJv Z3JhbV9zcGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0YSwgaW5mbyk7Ci0tICByZXR1cm4gaW5m bzsKLS19Ci0tCi0gLyogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotIAotIHN0YXRpYyBp bnQgbWF0Y2hfbWFpbiAoY29uc3QgY2hhciAqKTsKKyAvKiBTZXQgdXAgdGhlIGV4dGVuZGVkIHJl bW90ZSB2ZWN0b3IgYnkgbWFraW5nIGEgY29weSBvZiB0aGUgc3RhbmRhcmQKKworLS1DYVBLZ2gz WEhwcTNyRVVWLS0KKwoKZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS01b2Y3LnBh dGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcucGF0Y2gKaW5kZXggY2IxOGNkNi4uMmVh ODczZCAxMDA2NDQKLS0tIGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcucGF0Y2gKKysrIGIv Z2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcucGF0Y2gKQEAgLTEsMTcgKzEsMTA4OSBAQAotMjAx Mi0wNy0xOSAgR2FyeSBCZW5zb24gIDxnYmVuc29uQHJlZGhhdC5jb20+CitodHRwOi8vc291cmNl d2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxMy0wNS9tc2cwMDYzMi5odG1sCitTdWJqZWN0OiBb UkZBIDUvN10gSW1wcm92ZWQgbGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZQogCi0JKiBzb2xpYi1z dnI0LmMgKHN2cjRfaW5mbyk6IE1hZGUgZGVidWdfbG9hZGVyX29mZnNldF9wIGEgYml0ZmllbGQu CiAKLWRpZmYgLS1naXQgYS9nZGIvc29saWItc3ZyNC5jIGIvZ2RiL3NvbGliLXN2cjQuYwotaW5k ZXggYzg4YjljYi4uOGU0MWYxOSAxMDA2NDQKLS0tLSBhL2dkYi9zb2xpYi1zdnI0LmMKLSsrKyBi L2dkYi9zb2xpYi1zdnI0LmMKLUBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IHN2cjRfaW5mbwot ICAgQ09SRV9BRERSIGRlYnVnX2Jhc2U7CS8qIEJhc2Ugb2YgZHluYW1pYyBsaW5rZXIgc3RydWN0 dXJlcy4gICovCistLXFzZStXQkg0Z3Vlc2lwWisKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsg Y2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCisKK1RoaXMgcGF0 Y2ggaW1wbGVtZW50cyB0aGUgcHJvYmVzLWJhc2VkIHJ1bnRpbWUgbGlua2VyIGludGVyZmFjZS4K K0l0IHdvcmtzIGFzIGZvbGxvd3M6CisKKyAtIE9uIGluZmVyaW9yIHN0YXJ0dXAsIEdEQiBzZWFy Y2hlcyB0aGUgZHluYW1pYyBsaW5rZXIgZm9yIGEKKyAgIG51bWJlciBvZiBuYW1lZCBwcm9iZXMu CisKKyAtIElmIGFsbCBwcm9iZXMgYXJlIGZvdW5kLCBHREIgc2V0cyBhIGJyZWFrcG9pbnQgb24g ZWFjaCBvbmUuCisgICBPdGhlcndpc2UsIHRoZSBzdGFuZGFyZCBmdW5jdGlvbiBfZGxfZGVidWdf c3RhdGUgaXMgdXNlZC4KKworIC0gV2hlbiB1c2luZyBwcm9iZXMsIGEgcGVyLXBzcGFjZSBsaXN0 IGlzIG1haW50YWluZWQgb2YgYWxsCisgICBsaWJyYXJpZXMgY3VycmVudGx5IGxvYWRlZCBieSB0 aGUgaW5mZXJpb3IuICBJdCdzIHVwZGF0ZWQKKyAgIGFzIG5lY2Vzc2FyeSBldmVyeSB0aW1lIGEg c29saWIgZXZlbnQgc3RvcCBvY2N1cnMuCisKKyAtIFdoZW4gdXNpbmcgcHJvYmVzLCBzdnI0X2N1 cnJlbnRfc29zIHdpbGwgcmV0dXJuIGEgY29weSBvZgorICAgdGhlIGNhY2hlZCBsaXN0LiAgV2hl biBub3QgdXNpbmcgcHJvYmVzIHRoZSBlbnRpcmUgbGlzdAorICAgd2lsbCBiZSBmZXRjaGVkIGZy b20gdGhlIGluZmVyaW9yIGFzIGJlZm9yZS4KKworIC0gSWYgYW55IGVycm9yIG9jY3VycywgR0RC IHdpbGwgcHJpbnQgYSB3YXJuaW5nIGFuZCByZXZlcnQgdG8KKyAgIHRoZSBzdGFuZGFyZCBpbnRl cmZhY2UuCisKKy0tcXNlK1dCSDRndWVzaXBaKworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBj aGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFt ZT0icnRsZC1wcm9iZXMtNS1tYWluLWNoYW5nZXMucGF0Y2giCisKKzIwMTMtMDUtMTYgIEdhcnkg QmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgorCisJKiBicmVha3BvaW50LmggKGhhbmRsZV9z b2xpYl9ldmVudCk6IE1vdmVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisJdG8gc29saWIuaC4KKwkq IGJyZWFrcG9pbnQuYyAoaGFuZGxlX3NvbGliX2V2ZW50KTogTW92ZWQgZnVuY3Rpb24gdG8gc29s aWIuYy4KKwkoYnBzdGF0X3N0b3Bfc3RhdHVzKTogUGFzcyBuZXcgYXJndW1lbnQgdG8gaGFuZGxl X3NvbGliX2V2ZW50LgorCSogc29saWIuaCAodXBkYXRlX3NvbGliX2JyZWFrcG9pbnRzKTogTmV3 IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorCShoYW5kbGVfc29saWJfZXZlbnQpOiBNb3ZlZCBmdW5j dGlvbiBkZWNsYXJhdGlvbiBmcm9tCisJYnJlYWtwb2ludC5oLgorCSogc29saWIuYyAodXBkYXRl X3NvbGliX2JyZWFrcG9pbnRzKTogTmV3IGZ1bmN0aW9uLgorCShoYW5kbGVfc29saWJfZXZlbnQp OiBNb3ZlZCBmdW5jdGlvbiBmcm9tIGJyZWFrcG9pbnQuYy4KKwlVcGRhdGVkIHRvIGNhbGwgc29s aWJfb3BzLT5oYW5kbGVfZXZlbnQgaWYgbm90IE5VTEwuCisJKiBzb2xpc3QuaCAodGFyZ2V0X3Nv X29wcyk6IE5ldyBmaWVsZHMgInVwZGF0ZV9icmVha3BvaW50cyIgYW5kCisJImhhbmRsZV9ldmVu dCIuCisJKiBpbmZydW4uYyAoc2V0X3N0b3Bfb25fc29saWJfZXZlbnRzKTogTmV3IGZ1bmN0aW9u LgorCShfaW5pdGlhbGl6ZV9pbmZydW4pOiBVc2UgdGhlIGFib3ZlIGZvciAic2V0CisJc3RvcC1v bi1zb2xpYi1ldmVudHMiLgorCShoYW5kbGVfaW5mZXJpb3JfZXZlbnQpOiBQYXNzIG5ldyBhcmd1 bWVudCB0byBoYW5kbGVfc29saWJfZXZlbnQuCisJKiBzb2xpYi1zdnI0LmMgKHByb2JlLmgpOiBO ZXcgaW5jbHVkZS4KKwkoc3ZyNF9mcmVlX2xpYnJhcnlfbGlzdCk6IE5ldyBmb3J3YXJkIGRlY2xh cmF0aW9uLgorCShwcm9iZV9hY3Rpb24pOiBOZXcgZW51bS4KKwkocHJvYmVfaW5mbyk6IE5ldyBz dHJ1Y3QuCisJKHByb2JlX2luZm8pOiBOZXcgc3RhdGljIHZhcmlhYmxlLgorCShOVU1fUFJPQkVT KTogTmV3IGRlZmluaXRpb24uCisJKHN2cjRfaW5mbyk6IE5ldyBmaWVsZHMgInVzaW5nX3hmZXIi LCAicHJvYmVzX3RhYmxlIiBhbmQKKwkic29saWJfbGlzdCIuCisJKGZyZWVfcHJvYmVzX3RhYmxl KTogTmV3IGZ1bmN0aW9uLgorCShmcmVlX3NvbGliX2xpc3QpOiBOZXcgZnVuY3Rpb24uCisJKHN2 cjRfcHNwYWNlX2RhdGFfY2xlYW51cCk6IEZyZWUgcHJvYmVzIHRhYmxlIGFuZCBzb2xpYiBsaXN0 LgorCShzdnI0X2NvcHlfbGlicmFyeV9saXN0KTogTmV3IGZ1bmN0aW9uLgorCShzdnI0X2N1cnJl bnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyk6IE5ldyBwYXJhbWV0ZXIgImFubmV4Ii4KKwkoc3Zy NF9yZWFkX3NvX2xpc3QpOiBOZXcgcGFyYW1ldGVyICJwcmV2X2xtIi4KKwkoc3ZyNF9jdXJyZW50 X3Nvc19kaXJlY3QpOiBSZW5hbWVkIGZyb20gInN2cjRfY3VycmVudF9zb3MiLgorCShzdnI0X2N1 cnJlbnRfc29zKTogTmV3IGZ1bmN0aW9uLgorCShwcm9iZV9hbmRfYWN0aW9uKTogTmV3IHN0cnVj dC4KKwkoaGFzaF9wcm9iZV9hbmRfYWN0aW9uKTogTmV3IGZ1bmN0aW9uLgorCShlcXVhbF9wcm9i ZV9hbmRfYWN0aW9uKTogTGlrZXdpc2UuCisJKHJlZ2lzdGVyX3NvbGliX2V2ZW50X3Byb2JlKTog TGlrZXdpc2UuCisJKHNvbGliX2V2ZW50X3Byb2JlX2F0KTogTGlrZXdpc2UuCisJKHNvbGliX2V2 ZW50X3Byb2JlX2FjdGlvbik6IExpa2V3aXNlLgorCShzb2xpc3RfdXBkYXRlX2Z1bGwpOiBMaWtl d2lzZS4KKwkoc29saXN0X3VwZGF0ZV9pbmNyZW1lbnRhbCk6IExpa2V3aXNlLgorCShkaXNhYmxl X3Byb2Jlc19pbnRlcmZhY2VfY2xlYW51cCk6IExpa2V3aXNlLgorCShzdnI0X2hhbmRsZV9zb2xp Yl9ldmVudCk6IExpa2V3aXNlLgorCShzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50 KTogTGlrZXdpc2UuCisJKHN2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzKTogTGlr ZXdpc2UuCisJKHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzKTogTGlrZXdpc2Uu CisJKGVuYWJsZV9icmVhayk6IEZyZWUgcHJvYmVzIHRhYmxlIGJlZm9yZSBjcmVhdGluZyBicmVh a3BvaW50cy4KKwlVc2Ugc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHMgdG8gY3Jl YXRlIGJyZWFrcG9pbnRzLgorCShzdnI0X3NvbGliX2NyZWF0ZV9pbmZlcmlvcl9ob29rKTogRnJl ZSB0aGUgc29saWIgbGlzdC4KKwkoX2luaXRpYWxpemVfc3ZyNF9zb2xpYik6IEluaXRpYWxpc2UK KwlzdnI0X3NvX29wcy5oYW5kbGVfc29saWJfZXZlbnQgYW5kIHN2cjRfc29fb3BzLnVwZGF0ZV9i cmVha3BvaW50cy4KKworSW5kZXg6IGdkYi03LjYvZ2RiL2JyZWFrcG9pbnQuaAorPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0tIGdkYi03LjYub3JpZy9nZGIvYnJlYWtwb2ludC5oCTIwMTMtMDUtMTkgMTY6MTY6MjAu NTUxMDg3MjcwICswMjAwCisrKysgZ2RiLTcuNi9nZGIvYnJlYWtwb2ludC5oCTIwMTMtMDUtMTkg MTY6MTY6MjAuODM3MDg2OTQ4ICswMjAwCitAQCAtMTU1Miw4ICsxNTUyLDYgQEAgZXh0ZXJuIGlu dCB1c2VyX2JyZWFrcG9pbnRfcCAoc3RydWN0IGJyZQorIC8qIEF0dGVtcHQgdG8gZGV0ZXJtaW5l IGFyY2hpdGVjdHVyZSBvZiBsb2NhdGlvbiBpZGVudGlmaWVkIGJ5IFNBTC4gICovCisgZXh0ZXJu IHN0cnVjdCBnZGJhcmNoICpnZXRfc2FsX2FyY2ggKHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgc2Fs KTsKKyAKKy1leHRlcm4gdm9pZCBoYW5kbGVfc29saWJfZXZlbnQgKHZvaWQpOworLQorIGV4dGVy biB2b2lkIGJyZWFrcG9pbnRfZnJlZV9vYmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSk7 CisgCisgZXh0ZXJuIHZvaWQgYnJlYWtwb2ludHNfcmVsb2NhdGUgKHN0cnVjdCBvYmpmaWxlICpv YmpmaWxlLAorSW5kZXg6IGdkYi03LjYvZ2RiL3NvbGliLmgKKz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGIt Ny42Lm9yaWcvZ2RiL3NvbGliLmgJMjAxMy0wMS0wMSAwNzozMjo1MS4wMDAwMDAwMDAgKzAxMDAK KysrKyBnZGItNy42L2dkYi9zb2xpYi5oCTIwMTMtMDUtMTkgMTY6MTY6MjAuODM4MDg2OTQ2ICsw MjAwCitAQCAtOTAsNCArOTAsMTIgQEAgZXh0ZXJuIENPUkVfQUREUiBnZGJfYmZkX2xvb2t1cF9z eW1ib2xfZgorIAkJCQkJCQkJICAgICAgdm9pZCAqKSwKKyAJCQkJCQkgICAgdm9pZCAqZGF0YSk7 CisgCisrLyogRW5hYmxlIG9yIGRpc2FibGUgb3B0aW9uYWwgc29saWIgZXZlbnQgYnJlYWtwb2lu dHMgYXMgYXBwcm9wcmlhdGUuICAqLworKworK2V4dGVybiB2b2lkIHVwZGF0ZV9zb2xpYl9icmVh a3BvaW50cyAodm9pZCk7CisrCisrLyogSGFuZGxlIGFuIHNvbGliIGV2ZW50IGJ5IGNhbGxpbmcg c29saWJfYWRkLiAgKi8KKysKKytleHRlcm4gdm9pZCBoYW5kbGVfc29saWJfZXZlbnQgKHZvaWQp OworKworICNlbmRpZiAvKiBTT0xJQl9IICovCitJbmRleDogZ2RiLTcuNi9nZGIvc29saWIuYwor PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorLS0tIGdkYi03LjYub3JpZy9nZGIvc29saWIuYwkyMDEzLTA1LTE5IDE2OjE2 OjIwLjQ2ODA4NzM2MyArMDIwMAorKysrIGdkYi03LjYvZ2RiL3NvbGliLmMJMjAxMy0wNS0xOSAx NjoxNjoyMC44MzgwODY5NDYgKzAyMDAKK0BAIC0xMjIxLDYgKzEyMjEsMzggQEAgbm9fc2hhcmVk X2xpYnJhcmllcyAoY2hhciAqaWdub3JlZCwgaW50CisgICBvYmpmaWxlX3B1cmdlX3NvbGlicyAo KTsKKyB9CisgCisrLyogU2VlIHNvbGliLmguICAqLworKworK3ZvaWQKKyt1cGRhdGVfc29saWJf YnJlYWtwb2ludHMgKHZvaWQpCisreworKyAgc3RydWN0IHRhcmdldF9zb19vcHMgKm9wcyA9IHNv bGliX29wcyAodGFyZ2V0X2dkYmFyY2ggKCkpOworKworKyAgaWYgKG9wcy0+dXBkYXRlX2JyZWFr cG9pbnRzICE9IE5VTEwpCisrICAgIG9wcy0+dXBkYXRlX2JyZWFrcG9pbnRzICgpOworK30KKysK KysvKiBTZWUgc29saWIuaC4gICovCisrCisrdm9pZAorK2hhbmRsZV9zb2xpYl9ldmVudCAodm9p ZCkKKyt7CisrICBzdHJ1Y3QgdGFyZ2V0X3NvX29wcyAqb3BzID0gc29saWJfb3BzICh0YXJnZXRf Z2RiYXJjaCAoKSk7CisrCisrICBpZiAob3BzLT5oYW5kbGVfZXZlbnQgIT0gTlVMTCkKKysgICAg b3BzLT5oYW5kbGVfZXZlbnQgKCk7CisrCisrICBjbGVhcl9wcm9ncmFtX3NwYWNlX3NvbGliX2Nh Y2hlIChjdXJyZW50X2luZmVyaW9yICgpLT5wc3BhY2UpOworKworKyAgLyogQ2hlY2sgZm9yIGFu eSBuZXdseSBhZGRlZCBzaGFyZWQgbGlicmFyaWVzIGlmIHdlJ3JlIHN1cHBvc2VkIHRvCisrICAg ICBiZSBhZGRpbmcgdGhlbSBhdXRvbWF0aWNhbGx5LiAgU3dpdGNoIHRlcm1pbmFsIGZvciBhbnkg bWVzc2FnZXMKKysgICAgIHByb2R1Y2VkIGJ5IGJyZWFrcG9pbnRfcmVfc2V0LiAgKi8KKysgIHRh cmdldF90ZXJtaW5hbF9vdXJzX2Zvcl9vdXRwdXQgKCk7CisrICBzb2xpYl9hZGQgKE5VTEwsIDAs ICZjdXJyZW50X3RhcmdldCwgYXV0b19zb2xpYl9hZGQpOworKyAgdGFyZ2V0X3Rlcm1pbmFsX2lu ZmVyaW9yICgpOworK30KKysKKysKKyAvKiBSZWxvYWQgc2hhcmVkIGxpYnJhcmllcywgYnV0IGF2 b2lkIHJlbG9hZGluZyB0aGUgc2FtZSBzeW1ib2wgZmlsZQorICAgIHdlIGFscmVhZHkgaGF2ZSBs b2FkZWQuICAqLworIAorSW5kZXg6IGdkYi03LjYvZ2RiL3NvbGlzdC5oCis9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LS0gZ2RiLTcuNi5vcmlnL2dkYi9zb2xpc3QuaAkyMDEzLTAxLTAxIDA3OjMyOjUxLjAwMDAwMDAw MCArMDEwMAorKysrIGdkYi03LjYvZ2RiL3NvbGlzdC5oCTIwMTMtMDUtMTkgMTY6MTY6MjAuODM4 MDg2OTQ2ICswMjAwCitAQCAtMTQ4LDYgKzE0OCwxOSBAQCBzdHJ1Y3QgdGFyZ2V0X3NvX29wcwor ICAgICAgICBjb3JlIGZpbGUgKGluIHBhcnRpY3VsYXIsIGZvciByZWFkb25seSBzZWN0aW9ucyku ICAqLworICAgICBpbnQgKCprZWVwX2RhdGFfaW5fY29yZSkgKENPUkVfQUREUiB2YWRkciwKKyAJ CQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpOworKworKyAgICAvKiBFbmFibGUgb3IgZGlzYWJs ZSBvcHRpb25hbCBzb2xpYiBldmVudCBicmVha3BvaW50cyBhcworKyAgICAgICBhcHByb3ByaWF0 ZS4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlcgorKyAgICAgICBzdG9wX29uX3NvbGli X2V2ZW50cyBpcyBjaGFuZ2VkLiAgVGhpcyBwb2ludGVyIGNhbiBiZQorKyAgICAgICBOVUxMLCBp biB3aGljaCBjYXNlIG5vIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpcyBuZWNlc3NhcnkKKysgICAg ICAgZm9yIHRoaXMgdGFyZ2V0LiAgKi8KKysgICAgdm9pZCAoKnVwZGF0ZV9icmVha3BvaW50cykg KHZvaWQpOworKworKyAgICAvKiBUYXJnZXQtc3BlY2lmaWMgcHJvY2Vzc2luZyBvZiBzb2xpYiBl dmVudHMgdGhhdCB3aWxsIGJlCisrICAgICAgIHBlcmZvcm1lZCBiZWZvcmUgc29saWJfYWRkIGlz IGNhbGxlZC4gIFRoaXMgcG9pbnRlciBjYW4gYmUKKysgICAgICAgTlVMTCwgaW4gd2hpY2ggY2Fz ZSBubyBzcGVjaWZpYyBwcmVwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQorKyAgICAgICBmb3IgdGhp cyB0YXJnZXQuICAqLworKyAgICB2b2lkICgqaGFuZGxlX2V2ZW50KSAodm9pZCk7CisgICB9Owor IAorIC8qIEZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSAoc29fbGlzdCAqKS4gICov CitJbmRleDogZ2RiLTcuNi9nZGIvaW5mcnVuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGItNy42Lm9y aWcvZ2RiL2luZnJ1bi5jCTIwMTMtMDUtMTkgMTY6MTY6MjAuNTA4MDg3MzE4ICswMjAwCisrKysg Z2RiLTcuNi9nZGIvaW5mcnVuLmMJMjAxMy0wNS0xOSAxNjoxNjoyMC44NDAwODY5NDQgKzAyMDAK K0BAIC0zNzAsNiArMzcwLDE2IEBAIHN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzdGVwX3N0YXJ0X2Z1 bmN0aW8KKyAvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gZ2l2ZSBjb250cm9sIHRvIHRoZSB1c2Vy IHdoZW4gd2UncmUgbm90aWZpZWQKKyAgICBvZiBzaGFyZWQgbGlicmFyeSBldmVudHMgYnkgdGhl IGR5bmFtaWMgbGlua2VyLiAgKi8KKyBpbnQgc3RvcF9vbl9zb2xpYl9ldmVudHM7CisrCisrLyog RW5hYmxlIG9yIGRpc2FibGUgb3B0aW9uYWwgc2hhcmVkIGxpYnJhcnkgZXZlbnQgYnJlYWtwb2lu dHMKKysgICBhcyBhcHByb3ByaWF0ZSB3aGVuIHRoZSBhYm92ZSBmbGFnIGlzIGNoYW5nZWQuICAq LworKworK3N0YXRpYyB2b2lkCisrc2V0X3N0b3Bfb25fc29saWJfZXZlbnRzIChjaGFyICphcmdz LCBpbnQgZnJvbV90dHksIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjKQorK3sKKysgIHVwZGF0 ZV9zb2xpYl9icmVha3BvaW50cyAoKTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBzaG93X3N0b3Bf b25fc29saWJfZXZlbnRzIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorIAkJ CSAgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2YWx1ZSkKK0BAIC03 MzM1LDcgKzczNDUsNyBAQCBTaG93IHN0b3BwaW5nIGZvciBzaGFyZWQgbGlicmFyeSBldmVudHMu CisgSWYgbm9uemVybywgZ2RiIHdpbGwgZ2l2ZSBjb250cm9sIHRvIHRoZSB1c2VyIHdoZW4gdGhl IGR5bmFtaWMgbGlua2VyXG5cCisgbm90aWZpZXMgZ2RiIG9mIHNoYXJlZCBsaWJyYXJ5IGV2ZW50 cy4gIFRoZSBtb3N0IGNvbW1vbiBldmVudCBvZiBpbnRlcmVzdFxuXAorIHRvIHRoZSB1c2VyIHdv dWxkIGJlIGxvYWRpbmcvdW5sb2FkaW5nIG9mIGEgbmV3IGxpYnJhcnkuIiksCistCQkJICAgIE5V TEwsCisrCQkJICAgIHNldF9zdG9wX29uX3NvbGliX2V2ZW50cywKKyAJCQkgICAgc2hvd19zdG9w X29uX3NvbGliX2V2ZW50cywKKyAJCQkgICAgJnNldGxpc3QsICZzaG93bGlzdCk7CisgCitJbmRl eDogZ2RiLTcuNi9nZGIvc29saWItc3ZyNC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmln L2dkYi9zb2xpYi1zdnI0LmMJMjAxMy0wNS0xOSAxNjoxNjoyMC40NjgwODczNjMgKzAyMDAKKysr KyBnZGItNy42L2dkYi9zb2xpYi1zdnI0LmMJMjAxMy0wNS0xOSAxNjoyMTo0MC4yODU4MTYwODQg KzAyMDAKK0BAIC00Nyw5ICs0NywxMiBAQAorICNpbmNsdWRlICJleGNlcHRpb25zLmgiCisgI2lu Y2x1ZGUgImdkYl9iZmQuaCIKKyAKKysjaW5jbHVkZSAicHJvYmUuaCIKKysKKyBzdGF0aWMgc3Ry dWN0IGxpbmtfbWFwX29mZnNldHMgKnN2cjRfZmV0Y2hfbGlua19tYXBfb2Zmc2V0cyAodm9pZCk7 Cisgc3RhdGljIGludCBzdnI0X2hhdmVfbGlua19tYXBfb2Zmc2V0cyAodm9pZCk7Cisgc3RhdGlj IHZvaWQgc3ZyNF9yZWxvY2F0ZV9tYWluX2V4ZWN1dGFibGUgKHZvaWQpOworK3N0YXRpYyB2b2lk IHN2cjRfZnJlZV9saWJyYXJ5X2xpc3QgKHZvaWQgKnBfbGlzdCk7CisgCisgLyogTGluayBtYXAg aW5mbyB0byBpbmNsdWRlIGluIGFuIGFsbG9jYXRlZCBzb19saXN0IGVudHJ5LiAgKi8KKyAKK0BA IC0xMDYsNiArMTA5LDU1IEBAIHN0YXRpYyBjb25zdCAgY2hhciAqIGNvbnN0IG1haW5fbmFtZV9s aXMKKyAgIE5VTEwKKyB9OworIAorKy8qIFdoYXQgdG8gZG8gd2hlbiBhIHByb2JlIHN0b3Agb2Nj dXJzLiAgKi8KKysKKytlbnVtIHByb2JlX2FjdGlvbgorKyAgeworKyAgICAvKiBTb21ldGhpbmcg d2VudCBzZXJpb3VzbHkgd3JvbmcuICBTdG9wIHVzaW5nIHByb2JlcyBhbmQKKysgICAgICAgcmV2 ZXJ0IHRvIHVzaW5nIHRoZSBvbGRlciBpbnRlcmZhY2UuICAqLworKyAgICBQUk9CRVNfSU5URVJG QUNFX0ZBSUxFRCwKKysKKysgICAgLyogTm8gYWN0aW9uIGlzIHJlcXVpcmVkLiAgVGhlIHNoYXJl ZCBvYmplY3QgbGlzdCBpcyBzdGlsbAorKyAgICAgICB2YWxpZC4gICovCisrICAgIERPX05PVEhJ TkcsCisrCisrICAgIC8qIFRoZSBzaGFyZWQgb2JqZWN0IGxpc3Qgc2hvdWxkIGJlIHJlbG9hZGVk IGVudGlyZWx5LiAgKi8KKysgICAgRlVMTF9SRUxPQUQsCisrCisrICAgIC8qIEF0dGVtcHQgdG8g aW5jcmVtZW50YWxseSB1cGRhdGUgdGhlIHNoYXJlZCBvYmplY3QgbGlzdC4gSWYKKysgICAgICAg dGhlIHVwZGF0ZSBmYWlscyBvciBpcyBub3QgcG9zc2libGUsIGZhbGwgYmFjayB0byByZWxvYWRp bmcKKysgICAgICAgdGhlIGxpc3QgaW4gZnVsbC4gICovCisrICAgIFVQREFURV9PUl9SRUxPQUQs CisrICB9OworKworKy8qIEEgcHJvYmUncyBuYW1lIGFuZCBpdHMgYXNzb2NpYXRlZCBhY3Rpb24u ICAqLworKworK3N0cnVjdCBwcm9iZV9pbmZvCisreworKyAgLyogVGhlIG5hbWUgb2YgdGhlIHBy b2JlLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrICAvKiBXaGF0IHRvIGRvIHdoZW4g YSBwcm9iZSBzdG9wIG9jY3Vycy4gICovCisrICBlbnVtIHByb2JlX2FjdGlvbiBhY3Rpb247Cisr fTsKKysKKysvKiBBIGxpc3Qgb2YgbmFtZWQgcHJvYmVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGFj dGlvbnMuICBJZiBhbGwKKysgICBwcm9iZXMgYXJlIHByZXNlbnQgaW4gdGhlIGR5bmFtaWMgbGlu a2VyIHRoZW4gdGhlIHByb2Jlcy1iYXNlZAorKyAgIGludGVyZmFjZSB3aWxsIGJlIHVzZWQuICAq LworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvYmVfaW5mbyBwcm9iZV9pbmZvW10gPQorK3sK KysgIHsgImluaXRfc3RhcnQiLCBET19OT1RISU5HIH0sCisrICB7ICJpbml0X2NvbXBsZXRlIiwg RlVMTF9SRUxPQUQgfSwKKysgIHsgIm1hcF9zdGFydCIsIERPX05PVEhJTkcgfSwKKysgIHsgIm1h cF9mYWlsZWQiLCBET19OT1RISU5HIH0sCisrICB7ICJyZWxvY19jb21wbGV0ZSIsIFVQREFURV9P Ul9SRUxPQUQgfSwKKysgIHsgInVubWFwX3N0YXJ0IiwgRE9fTk9USElORyB9LAorKyAgeyAidW5t YXBfY29tcGxldGUiLCBGVUxMX1JFTE9BRCB9LAorK307CisrCisrI2RlZmluZSBOVU1fUFJPQkVT IEFSUkFZX1NJWkUgKHByb2JlX2luZm8pCisrCisgLyogUmV0dXJuIG5vbi16ZXJvIGlmIEdEQl9T T19OQU1FIGFuZCBJTkZFUklPUl9TT19OQU1FIHJlcHJlc2VudAorICAgIHRoZSBzYW1lIHNoYXJl ZCBsaWJyYXJ5LiAgKi8KKyAKK0BAIC0zMTMsMTcgKzM2NSw1NiBAQCBzdHJ1Y3Qgc3ZyNF9pbmZv CisgICBDT1JFX0FERFIgaW50ZXJwX3RleHRfc2VjdF9oaWdoOworICAgQ09SRV9BRERSIGludGVy cF9wbHRfc2VjdF9sb3c7CisgICBDT1JFX0FERFIgaW50ZXJwX3BsdF9zZWN0X2hpZ2g7CisrCisr ICAvKiBOb256ZXJvIGlmIHRoZSBsaXN0IG9mIG9iamVjdHMgd2FzIGxhc3Qgb2J0YWluZWQgZnJv bSB0aGUgdGFyZ2V0CisrICAgICB2aWEgcVhmZXI6bGlicmFyaWVzLXN2cjQ6cmVhZC4gICovCisr ICBpbnQgdXNpbmdfeGZlcjsKKysKKysgIC8qIFRhYmxlIG1hcHBpbmcgYnJlYWtwb2ludCBhZGRy ZXNzZXMgdG8gcHJvYmVzIGFuZCBhY3Rpb25zLCB1c2VkCisrICAgICBieSB0aGUgcHJvYmVzLWJh c2VkIGludGVyZmFjZS4gICovCisrICBodGFiX3QgcHJvYmVzX3RhYmxlOworKworKyAgLyogTGlz dCBvZiBvYmplY3RzIGxvYWRlZCBpbnRvIHRoZSBpbmZlcmlvciwgdXNlZCBieSB0aGUgcHJvYmVz LQorKyAgICAgYmFzZWQgaW50ZXJmYWNlLiAgKi8KKysgIHN0cnVjdCBzb19saXN0ICpzb2xpYl9s aXN0OworIH07CisgCisgLyogUGVyLXByb2dyYW0tc3BhY2UgZGF0YSBrZXkuICAqLworIHN0YXRp YyBjb25zdCBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZV9kYXRhICpzb2xpYl9zdnI0X3BzcGFjZV9kYXRh OworIAorKy8qIEZyZWUgdGhlIHByb2JlcyB0YWJsZS4gICovCisrCisrc3RhdGljIHZvaWQKKytm cmVlX3Byb2Jlc190YWJsZSAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykKKyt7CisrICBpZiAoaW5m by0+cHJvYmVzX3RhYmxlID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIGh0YWJfZGVsZXRl IChpbmZvLT5wcm9iZXNfdGFibGUpOworKyAgaW5mby0+cHJvYmVzX3RhYmxlID0gTlVMTDsKKyt9 CisrCisrLyogRnJlZSB0aGUgc29saWIgbGlzdC4gICovCisrCisrc3RhdGljIHZvaWQKKytmcmVl X3NvbGliX2xpc3QgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8pCisreworKyAgc3ZyNF9mcmVlX2xp YnJhcnlfbGlzdCAoJmluZm8tPnNvbGliX2xpc3QpOworKyAgaW5mby0+c29saWJfbGlzdCA9IE5V TEw7CisrfQorKworIHN0YXRpYyB2b2lkCisgc3ZyNF9wc3BhY2VfZGF0YV9jbGVhbnVwIChzdHJ1 Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCB2b2lkICphcmcpCisgeworICAgc3RydWN0IHN2cjRf aW5mbyAqaW5mbzsKKyAKKyAgIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEgKHBzcGFjZSwgc29s aWJfc3ZyNF9wc3BhY2VfZGF0YSk7CisrICBpZiAoaW5mbyA9PSBOVUxMKQorKyAgICByZXR1cm47 CisrCisrICBmcmVlX3Byb2Jlc190YWJsZSAoaW5mbyk7CisrICBmcmVlX3NvbGliX2xpc3QgKGlu Zm8pOworKworICAgeGZyZWUgKGluZm8pOworIH0KKyAKK0BAIC05ODIsNiArMTA3MywzNiBAQCBz dnI0X2ZyZWVfbGlicmFyeV9saXN0ICh2b2lkICpwX2xpc3QpCisgICAgIH0KKyB9CisgCisrLyog Q29weSBsaWJyYXJ5IGxpc3QuICAqLworKworK3N0YXRpYyBzdHJ1Y3Qgc29fbGlzdCAqCisrc3Zy NF9jb3B5X2xpYnJhcnlfbGlzdCAoc3RydWN0IHNvX2xpc3QgKnNyYykKKyt7CisrICBzdHJ1Y3Qg bGlua19tYXBfb2Zmc2V0cyAqbG1vID0gc3ZyNF9mZXRjaF9saW5rX21hcF9vZmZzZXRzICgpOwor KyAgc3RydWN0IHNvX2xpc3QgKmRzdCA9IE5VTEw7CisrICBzdHJ1Y3Qgc29fbGlzdCAqKmxpbmsg PSAmZHN0OworKworKyAgd2hpbGUgKHNyYyAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RydWN0 IHNvX2xpc3QgKm5ldzsKKysKKysgICAgICBuZXcgPSBYWkFMTE9DIChzdHJ1Y3Qgc29fbGlzdCk7 CisrCisrICAgICAgbWVtY3B5IChuZXcsIHNyYywgc2l6ZW9mIChzdHJ1Y3Qgc29fbGlzdCkpOwor KworKyAgICAgIG5ldy0+bG1faW5mbyA9IHhtYWxsb2MgKGxtby0+bGlua19tYXBfc2l6ZSk7Cisr ICAgICAgbWVtY3B5IChuZXctPmxtX2luZm8sIHNyYy0+bG1faW5mbywgbG1vLT5saW5rX21hcF9z aXplKTsKKysKKysgICAgICBuZXctPm5leHQgPSBOVUxMOworKyAgICAgICpsaW5rID0gbmV3Owor KyAgICAgIGxpbmsgPSAmbmV3LT5uZXh0OworKworKyAgICAgIHNyYyA9IHNyYy0+bmV4dDsKKysg ICAgfQorKworKyAgcmV0dXJuIGRzdDsKKyt9CisrCisgI2lmZGVmIEhBVkVfTElCRVhQQVQKKyAK KyAjaW5jbHVkZSAieG1sLXN1cHBvcnQuaCIKK0BAIC0xMDk3LDE0ICsxMjE4LDE5IEBAIHN2cjRf cGFyc2VfbGlicmFyaWVzIChjb25zdCBjaGFyICpkb2N1bWUKKyAgIHJldHVybiAwOworIH0KKyAK Ky0vKiBBdHRlbXB0IHRvIGdldCBzb19saXN0IGZyb20gdGFyZ2V0IHZpYSBxWGZlcjpsaWJyYXJp ZXM6cmVhZCBwYWNrZXQuCisrLyogQXR0ZW1wdCB0byBnZXQgc29fbGlzdCBmcm9tIHRhcmdldCB2 aWEgcVhmZXI6bGlicmFyaWVzLXN2cjQ6cmVhZCBwYWNrZXQuCisgCisgICAgUmV0dXJuIDAgaWYg cGFja2V0IG5vdCBzdXBwb3J0ZWQsICpTT19MSVNUX1JFVFVSTiBpcyBub3QgbW9kaWZpZWQgaW4g c3VjaAorICAgIGNhc2UuICBSZXR1cm4gMSBpZiAqU09fTElTVF9SRVRVUk4gY29udGFpbnMgdGhl IGxpYnJhcnkgbGlzdCwgaXQgbWF5IGJlCistICAgZW1wdHksIGNhbGxlciBpcyByZXNwb25zaWJs ZSBmb3IgZnJlZWluZyBhbGwgaXRzIGVudHJpZXMuICAqLworKyAgIGVtcHR5LCBjYWxsZXIgaXMg cmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYWxsIGl0cyBlbnRyaWVzLgorKworKyAgIE5vdGUgdGhh dCBBTk5FWCBtdXN0IGJlIE5VTEwgaWYgdGhlIHJlbW90ZSBkb2VzIG5vdCBleHBsaWNpdGx5IGFs bG93CisrICAgcVhmZXI6bGlicmFyaWVzLXN2cjQ6cmVhZCBwYWNrZXRzIHdpdGggbm9uLWVtcHR5 IGFubmV4ZXMuICBTdXBwb3J0IGZvcgorKyAgIHRoaXMgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGFy Z2V0X2F1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkICgpLiAgKi8KKyAKKyBzdGF0aWMgaW50 Cistc3ZyNF9jdXJyZW50X3Nvc192aWFfeGZlcl9saWJyYXJpZXMgKHN0cnVjdCBzdnI0X2xpYnJh cnlfbGlzdCAqbGlzdCkKKytzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyAoc3Ry dWN0IHN2cjRfbGlicmFyeV9saXN0ICpsaXN0LAorKwkJCQkgICAgIGNvbnN0IGNoYXIgKmFubmV4 KQorIHsKKyAgIGNoYXIgKnN2cjRfbGlicmFyeV9kb2N1bWVudDsKKyAgIGludCByZXN1bHQ7CitA QCAtMTExMyw3ICsxMjM5LDcgQEAgc3ZyNF9jdXJyZW50X3Nvc192aWFfeGZlcl9saWJyYXJpZXMg KHN0cgorICAgLyogRmV0Y2ggdGhlIGxpc3Qgb2Ygc2hhcmVkIGxpYnJhcmllcy4gICovCisgICBz dnI0X2xpYnJhcnlfZG9jdW1lbnQgPSB0YXJnZXRfcmVhZF9zdHJhbGxvYyAoJmN1cnJlbnRfdGFy Z2V0LAorIAkJCQkJCVRBUkdFVF9PQkpFQ1RfTElCUkFSSUVTX1NWUjQsCistCQkJCQkJTlVMTCk7 CisrCQkJCQkJYW5uZXgpOworICAgaWYgKHN2cjRfbGlicmFyeV9kb2N1bWVudCA9PSBOVUxMKQor ICAgICByZXR1cm4gMDsKKyAKK0BAIC0xMTI3LDcgKzEyNTMsOCBAQCBzdnI0X2N1cnJlbnRfc29z X3ZpYV94ZmVyX2xpYnJhcmllcyAoc3RyCisgI2Vsc2UKKyAKKyBzdGF0aWMgaW50Cistc3ZyNF9j dXJyZW50X3Nvc192aWFfeGZlcl9saWJyYXJpZXMgKHN0cnVjdCBzdnI0X2xpYnJhcnlfbGlzdCAq bGlzdCkKKytzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyAoc3RydWN0IHN2cjRf bGlicmFyeV9saXN0ICpsaXN0LAorKwkJCQkgICAgIGNvbnN0IGNoYXIgKmFubmV4KQorIHsKKyAg IHJldHVybiAwOworIH0KK0BAIC0xMTYxLDE1ICsxMjg4LDE3IEBAIHN2cjRfZGVmYXVsdF9zb3Mg KHZvaWQpCisgICByZXR1cm4gbmV3OworIH0KKyAKKy0vKiBSZWFkIHRoZSB3aG9sZSBpbmZlcmlv ciBsaWJyYXJpZXMgY2hhaW4gc3RhcnRpbmcgYXQgYWRkcmVzcyBMTS4gIEFkZCB0aGUKKy0gICBl bnRyaWVzIHRvIHRoZSB0YWlsIHJlZmVyZW5jZWQgYnkgTElOS19QVFJfUFRSLiAgSWdub3JlIHRo ZSBmaXJzdCBlbnRyeSBpZgorLSAgIElHTk9SRV9GSVJTVCBhbmQgc2V0IGdsb2JhbCBNQUlOX0xN X0FERFIgYWNjb3JkaW5nIHRvIGl0LiAgKi8KKysvKiBSZWFkIHRoZSB3aG9sZSBpbmZlcmlvciBs aWJyYXJpZXMgY2hhaW4gc3RhcnRpbmcgYXQgYWRkcmVzcyBMTS4KKysgICBFeHBlY3QgdGhlIGZp cnN0IGVudHJ5IGluIHRoZSBjaGFpbidzIHByZXZpb3VzIGVudHJ5IHRvIGJlIFBSRVZfTE0uCisr ICAgQWRkIHRoZSBlbnRyaWVzIHRvIHRoZSB0YWlsIHJlZmVyZW5jZWQgYnkgTElOS19QVFJfUFRS LiAgSWdub3JlIHRoZQorKyAgIGZpcnN0IGVudHJ5IGlmIElHTk9SRV9GSVJTVCBhbmQgc2V0IGds b2JhbCBNQUlOX0xNX0FERFIgYWNjb3JkaW5nCisrICAgdG8gaXQuICBSZXR1cm5zIG5vbnplcm8g dXBvbiBzdWNjZXNzLiAgKi8KKyAKKy1zdGF0aWMgdm9pZAorLXN2cjRfcmVhZF9zb19saXN0IChD T1JFX0FERFIgbG0sIHN0cnVjdCBzb19saXN0ICoqKmxpbmtfcHRyX3B0ciwKKy0JCSAgIGludCBp Z25vcmVfZmlyc3QpCisrc3RhdGljIGludAorK3N2cjRfcmVhZF9zb19saXN0IChDT1JFX0FERFIg bG0sIENPUkVfQUREUiBwcmV2X2xtLAorKwkJICAgc3RydWN0IHNvX2xpc3QgKioqbGlua19wdHJf cHRyLCBpbnQgaWdub3JlX2ZpcnN0KQorIHsKKy0gIENPUkVfQUREUiBwcmV2X2xtID0gMCwgbmV4 dF9sbTsKKysgIENPUkVfQUREUiBuZXh0X2xtOworIAorICAgZm9yICg7IGxtICE9IDA7IHByZXZf bG0gPSBsbSwgbG0gPSBuZXh0X2xtKQorICAgICB7CitAQCAtMTE4NSw3ICsxMzE0LDcgQEAgc3Zy NF9yZWFkX3NvX2xpc3QgKENPUkVfQUREUiBsbSwgc3RydWN0CisgICAgICAgaWYgKG5ldy0+bG1f aW5mbyA9PSBOVUxMKQorIAl7CisgCSAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CistCSAgYnJl YWs7CisrCSAgcmV0dXJuIDA7CisgCX0KKyAKKyAgICAgICBuZXh0X2xtID0gbmV3LT5sbV9pbmZv LT5sX25leHQ7CitAQCAtMTE5Niw3ICsxMzI1LDcgQEAgc3ZyNF9yZWFkX3NvX2xpc3QgKENPUkVf QUREUiBsbSwgc3RydWN0CisgCQkgICBwYWRkcmVzcyAodGFyZ2V0X2dkYmFyY2ggKCksIHByZXZf bG0pLAorIAkJICAgcGFkZHJlc3MgKHRhcmdldF9nZGJhcmNoICgpLCBuZXctPmxtX2luZm8tPmxf cHJldikpOworIAkgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworLQkgIGJyZWFrOworKwkgIHJl dHVybiAwOworIAl9CisgCisgICAgICAgLyogRm9yIFNWUjQgdmVyc2lvbnMsIHRoZSBmaXJzdCBl bnRyeSBpbiB0aGUgbGluayBtYXAgaXMgZm9yIHRoZQorQEAgLTEyOTEsMTcgKzE0MjAsMTkgQEAg c3ZyNF9yZWFkX3NvX2xpc3QgKENPUkVfQUREUiBsbSwgc3RydWN0CisgICAgICAgKipsaW5rX3B0 cl9wdHIgPSBuZXc7CisgICAgICAgKmxpbmtfcHRyX3B0ciA9ICZuZXctPm5leHQ7CisgICAgIH0K KysKKysgIHJldHVybiAxOworIH0KKyAKKy0vKiBJbXBsZW1lbnQgdGhlICJjdXJyZW50X3NvcyIg dGFyZ2V0X3NvX29wcyBtZXRob2QuICAqLworKy8qIFJlYWQgdGhlIGZ1bGwgbGlzdCBvZiBjdXJy ZW50bHkgbG9hZGVkIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20KKysgICB0aGUgaW5mZXJp b3IuICAqLworIAorIHN0YXRpYyBzdHJ1Y3Qgc29fbGlzdCAqCistc3ZyNF9jdXJyZW50X3NvcyAo dm9pZCkKKytzdnI0X2N1cnJlbnRfc29zX2RpcmVjdCAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykK KyB7CisgICBDT1JFX0FERFIgbG07CisgICBzdHJ1Y3Qgc29fbGlzdCAqaGVhZCA9IE5VTEw7Cisg ICBzdHJ1Y3Qgc29fbGlzdCAqKmxpbmtfcHRyID0gJmhlYWQ7CistICBzdHJ1Y3Qgc3ZyNF9pbmZv ICppbmZvOworICAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG87CisgICBpbnQgaWdub3JlX2ZpcnN0 OworICAgc3RydWN0IHN2cjRfbGlicmFyeV9saXN0IGxpYnJhcnlfbGlzdDsKK0BAIC0xMzE0LDE5 ICsxNDQ1LDE2IEBAIHN2cjRfY3VycmVudF9zb3MgKHZvaWQpCisgICAgICBVbmZvcnR1bmF0ZWx5 IHN0YXRpY2FsbHkgbGlua2VkIGluZmVyaW9ycyB3aWxsIGFsc28gZmFsbCBiYWNrIHRocm91Z2gg dGhpcworICAgICAgc3Vib3B0aW1hbCBjb2RlIHBhdGguICAqLworIAorLSAgaWYgKHN2cjRfY3Vy cmVudF9zb3NfdmlhX3hmZXJfbGlicmFyaWVzICgmbGlicmFyeV9saXN0KSkKKysgIGluZm8tPnVz aW5nX3hmZXIgPSBzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyAoJmxpYnJhcnlf bGlzdCwKKysJCQkJCQkJICBOVUxMKTsKKysgIGlmIChpbmZvLT51c2luZ194ZmVyKQorICAgICB7 CisgICAgICAgaWYgKGxpYnJhcnlfbGlzdC5tYWluX2xtKQorLQl7CistCSAgaW5mbyA9IGdldF9z dnI0X2luZm8gKCk7CistCSAgaW5mby0+bWFpbl9sbV9hZGRyID0gbGlicmFyeV9saXN0Lm1haW5f bG07CistCX0KKysJaW5mby0+bWFpbl9sbV9hZGRyID0gbGlicmFyeV9saXN0Lm1haW5fbG07Cisg CisgICAgICAgcmV0dXJuIGxpYnJhcnlfbGlzdC5oZWFkID8gbGlicmFyeV9saXN0LmhlYWQgOiBz dnI0X2RlZmF1bHRfc29zICgpOworICAgICB9CisgCistICBpbmZvID0gZ2V0X3N2cjRfaW5mbyAo KTsKKy0KKyAgIC8qIEFsd2F5cyBsb2NhdGUgdGhlIGRlYnVnIHN0cnVjdCwgaW4gY2FzZSBpdCBo YXMgbW92ZWQuICAqLworICAgaW5mby0+ZGVidWdfYmFzZSA9IDA7CisgICBsb2NhdGVfYmFzZSAo aW5mbyk7CitAQCAtMTM0OSw3ICsxNDc3LDcgQEAgc3ZyNF9jdXJyZW50X3NvcyAodm9pZCkKKyAg ICAgIGBzdHJ1Y3Qgc29fbGlzdCcgbm9kZXMuICAqLworICAgbG0gPSBzb2xpYl9zdnI0X3JfbWFw IChpbmZvKTsKKyAgIGlmIChsbSkKKy0gICAgc3ZyNF9yZWFkX3NvX2xpc3QgKGxtLCAmbGlua19w dHIsIGlnbm9yZV9maXJzdCk7CisrICAgIHN2cjRfcmVhZF9zb19saXN0IChsbSwgMCwgJmxpbmtf cHRyLCBpZ25vcmVfZmlyc3QpOworIAorICAgLyogT24gU29sYXJpcywgdGhlIGR5bmFtaWMgbGlu a2VyIGlzIG5vdCBpbiB0aGUgbm9ybWFsIGxpc3Qgb2YKKyAgICAgIHNoYXJlZCBvYmplY3RzLCBz byBtYWtlIHN1cmUgd2UgcGljayBpdCB1cCB0b28uICBIYXZpbmcKK0BAIC0xMzU3LDcgKzE0ODUs NyBAQCBzdnI0X2N1cnJlbnRfc29zICh2b2lkKQorICAgICAgZm9yIHNraXBwaW5nIGR5bmFtaWMg bGlua2VyIHJlc29sdmVyIGNvZGUuICAqLworICAgbG0gPSBzb2xpYl9zdnI0X3JfbGRzb21hcCAo aW5mbyk7CisgICBpZiAobG0pCistICAgIHN2cjRfcmVhZF9zb19saXN0IChsbSwgJmxpbmtfcHRy LCAwKTsKKysgICAgc3ZyNF9yZWFkX3NvX2xpc3QgKGxtLCAwLCAmbGlua19wdHIsIDApOworIAor ICAgZGlzY2FyZF9jbGVhbnVwcyAoYmFja190byk7CisgCitAQCAtMTM2Nyw2ICsxNDk1LDIyIEBA IHN2cjRfY3VycmVudF9zb3MgKHZvaWQpCisgICByZXR1cm4gaGVhZDsKKyB9CisgCisrLyogSW1w bGVtZW50IHRoZSAiY3VycmVudF9zb3MiIHRhcmdldF9zb19vcHMgbWV0aG9kLiAgKi8KKysKKytz dGF0aWMgc3RydWN0IHNvX2xpc3QgKgorK3N2cjRfY3VycmVudF9zb3MgKHZvaWQpCisreworKyAg c3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7CisrCisrICAvKiBJZiB3 ZSBhcmUgdXNpbmcgdGhlIHByb2JlcyBpbnRlcmZhY2UgYW5kIHRoZSBzb2xpYiBsaXN0IGhhcwor KyAgICAgYmVlbiBjYWNoZWQgdGhlbiB3ZSBzaW1wbHkgcmV0dXJuIHRoYXQuICAqLworKyAgaWYg KGluZm8tPnNvbGliX2xpc3QgIT0gTlVMTCkKKysgICAgcmV0dXJuIHN2cjRfY29weV9saWJyYXJ5 X2xpc3QgKGluZm8tPnNvbGliX2xpc3QpOworKworKyAgLyogT3RoZXJ3aXNlIG9idGFpbiB0aGUg c29saWIgbGlzdCBkaXJlY3RseSBmcm9tIHRoZSBpbmZlcmlvci4gICovCisrICByZXR1cm4gc3Zy NF9jdXJyZW50X3Nvc19kaXJlY3QgKGluZm8pOworK30KKysKKyAvKiBHZXQgdGhlIGFkZHJlc3Mg b2YgdGhlIGxpbmtfbWFwIGZvciBhIGdpdmVuIE9CSkZJTEUuICAqLworIAorIENPUkVfQUREUgor QEAgLTE0NDksNiArMTU5Myw0MzQgQEAgZXhlY19lbnRyeV9wb2ludCAoc3RydWN0IGJmZCAqYWJm ZCwgc3RydQorICAgcmV0dXJuIGdkYmFyY2hfYWRkcl9iaXRzX3JlbW92ZSAodGFyZ2V0X2dkYmFy Y2ggKCksIGFkZHIpOworIH0KKyAKKysvKiBBIHByb2JlIGFuZCBpdHMgYXNzb2NpYXRlZCBhY3Rp b24uICAqLworKworK3N0cnVjdCBwcm9iZV9hbmRfYWN0aW9uCisreworKyAgLyogVGhlIHByb2Jl LiAgKi8KKysgIHN0cnVjdCBwcm9iZSAqcHJvYmU7CisrCisrICAvKiBUaGUgYWN0aW9uLiAgKi8K KysgIGVudW0gcHJvYmVfYWN0aW9uIGFjdGlvbjsKKyt9OworKworKy8qIFJldHVybnMgYSBoYXNo IGNvZGUgZm9yIHRoZSBwcm9iZV9hbmRfYWN0aW9uIHJlZmVyZW5jZWQgYnkgcC4gICovCisrCisr c3RhdGljIGhhc2h2YWxfdAorK2hhc2hfcHJvYmVfYW5kX2FjdGlvbiAoY29uc3Qgdm9pZCAqcCkK Kyt7CisrICBjb25zdCBzdHJ1Y3QgcHJvYmVfYW5kX2FjdGlvbiAqcGEgPSBwOworKworKyAgcmV0 dXJuIChoYXNodmFsX3QpIHBhLT5wcm9iZS0+YWRkcmVzczsKKyt9CisrCisrLyogUmV0dXJucyBu b24temVybyBpZiB0aGUgcHJvYmVfYW5kX2FjdGlvbnMgcmVmZXJlbmNlZCBieSBwMSBhbmQgcDIK KysgICBhcmUgZXF1YWwuICAqLworKworK3N0YXRpYyBpbnQKKytlcXVhbF9wcm9iZV9hbmRfYWN0 aW9uIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisreworKyAgY29uc3Qgc3RydWN0 IHByb2JlX2FuZF9hY3Rpb24gKnBhMSA9IHAxOworKyAgY29uc3Qgc3RydWN0IHByb2JlX2FuZF9h Y3Rpb24gKnBhMiA9IHAyOworKworKyAgcmV0dXJuIHBhMS0+cHJvYmUtPmFkZHJlc3MgPT0gcGEy LT5wcm9iZS0+YWRkcmVzczsKKyt9CisrCisrLyogUmVnaXN0ZXIgYSBzb2xpYiBldmVudCBwcm9i ZSBhbmQgaXRzIGFzc29jaWF0ZWQgYWN0aW9uIGluIHRoZQorKyAgIHByb2JlcyB0YWJsZS4gICov CisrCisrc3RhdGljIHZvaWQKKytyZWdpc3Rlcl9zb2xpYl9ldmVudF9wcm9iZSAoc3RydWN0IHBy b2JlICpwcm9iZSwgZW51bSBwcm9iZV9hY3Rpb24gYWN0aW9uKQorK3sKKysgIHN0cnVjdCBzdnI0 X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOworKyAgc3RydWN0IHByb2JlX2FuZF9hY3Rp b24gbG9va3VwLCAqcGE7CisrICB2b2lkICoqc2xvdDsKKysKKysgIC8qIENyZWF0ZSB0aGUgcHJv YmVzIHRhYmxlLCBpZiBuZWNlc3NhcnkuICAqLworKyAgaWYgKGluZm8tPnByb2Jlc190YWJsZSA9 PSBOVUxMKQorKyAgICB7CisrICAgICAgaW5mby0+cHJvYmVzX3RhYmxlID0gaHRhYl9jcmVhdGVf YWxsb2MgKDEsIGhhc2hfcHJvYmVfYW5kX2FjdGlvbiwKKysJCQkJCSAgICAgIGVxdWFsX3Byb2Jl X2FuZF9hY3Rpb24sCisrCQkJCQkgICAgICB4ZnJlZSwgeGNhbGxvYywgeGZyZWUpOworKyAgICB9 CisrCisrICBsb29rdXAucHJvYmUgPSBwcm9iZTsKKysgIHNsb3QgPSBodGFiX2ZpbmRfc2xvdCAo aW5mby0+cHJvYmVzX3RhYmxlLCAmbG9va3VwLCBJTlNFUlQpOworKyAgZ2RiX2Fzc2VydCAoKnNs b3QgPT0gSFRBQl9FTVBUWV9FTlRSWSk7CisrCisrICBwYSA9IFhDTkVXIChzdHJ1Y3QgcHJvYmVf YW5kX2FjdGlvbik7CisrICBwYS0+cHJvYmUgPSBwcm9iZTsKKysgIHBhLT5hY3Rpb24gPSBhY3Rp b247CisrCisrICAqc2xvdCA9IHBhOworK30KKysKKysvKiBHZXQgdGhlIHNvbGliIGV2ZW50IHBy b2JlIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24sIGFuZCB0aGUKKysgICBhY3Rpb24gYXNzb2Np YXRlZCB3aXRoIGl0LiAgUmV0dXJucyBOVUxMIGlmIG5vIHNvbGliIGV2ZW50IHByb2JlCisrICAg d2FzIGZvdW5kLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IHByb2JlX2FuZF9hY3Rpb24gKgorK3Nv bGliX2V2ZW50X3Byb2JlX2F0IChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBDT1JFX0FERFIgYWRk cmVzcykKKyt7CisrICBzdHJ1Y3QgcHJvYmUgbG9va3VwX3Byb2JlOworKyAgc3RydWN0IHByb2Jl X2FuZF9hY3Rpb24gbG9va3VwOworKyAgdm9pZCAqKnNsb3Q7CisrCisrICBsb29rdXBfcHJvYmUu YWRkcmVzcyA9IGFkZHJlc3M7CisrICBsb29rdXAucHJvYmUgPSAmbG9va3VwX3Byb2JlOworKyAg c2xvdCA9IGh0YWJfZmluZF9zbG90IChpbmZvLT5wcm9iZXNfdGFibGUsICZsb29rdXAsIE5PX0lO U0VSVCk7CisrCisrICBpZiAoc2xvdCA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysg IHJldHVybiAoc3RydWN0IHByb2JlX2FuZF9hY3Rpb24gKikgKnNsb3Q7CisrfQorKworKy8qIERl Y2lkZSB3aGF0IGFjdGlvbiB0byB0YWtlIHdoZW4gdGhlIHNwZWNpZmllZCBzb2xpYiBldmVudCBw cm9iZSBpcworKyAgIGhpdC4gICovCisrCisrc3RhdGljIGVudW0gcHJvYmVfYWN0aW9uCisrc29s aWJfZXZlbnRfcHJvYmVfYWN0aW9uIChzdHJ1Y3QgcHJvYmVfYW5kX2FjdGlvbiAqcGEpCisrewor KyAgZW51bSBwcm9iZV9hY3Rpb24gYWN0aW9uOworKyAgdW5zaWduZWQgcHJvYmVfYXJnYzsKKysK KysgIGFjdGlvbiA9IHBhLT5hY3Rpb247CisrICBpZiAoYWN0aW9uID09IERPX05PVEhJTkcgfHwg YWN0aW9uID09IFBST0JFU19JTlRFUkZBQ0VfRkFJTEVEKQorKyAgICByZXR1cm4gYWN0aW9uOwor KworKyAgZ2RiX2Fzc2VydCAoYWN0aW9uID09IEZVTExfUkVMT0FEIHx8IGFjdGlvbiA9PSBVUERB VEVfT1JfUkVMT0FEKTsKKysKKysgIC8qIENoZWNrIHRoYXQgYW4gYXBwcm9wcmlhdGUgbnVtYmVy IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzdXBwbGllZC4KKysgICAgIFdlIGV4cGVjdDoKKysgICAg ICAgYXJnMDogTG1pZF90IGxtaWQgKG1hbmRhdG9yeSkKKysgICAgICAgYXJnMTogc3RydWN0IHJf ZGVidWcgKmRlYnVnX2Jhc2UgKG1hbmRhdG9yeSkKKysgICAgICAgYXJnMjogc3RydWN0IGxpbmtf bWFwICpuZXcgKG9wdGlvbmFsLCBmb3IgaW5jcmVtZW50YWwgdXBkYXRlcykgICovCisrICBwcm9i ZV9hcmdjID0gZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50IChwYS0+cHJvYmUpOworKyAgaWYgKHBy b2JlX2FyZ2MgPT0gMikKKysgICAgYWN0aW9uID0gRlVMTF9SRUxPQUQ7CisrICBlbHNlIGlmIChw cm9iZV9hcmdjIDwgMikKKysgICAgYWN0aW9uID0gUFJPQkVTX0lOVEVSRkFDRV9GQUlMRUQ7Cisr CisrICByZXR1cm4gYWN0aW9uOworK30KKysKKysvKiBQb3B1bGF0ZSB0aGUgc2hhcmVkIG9iamVj dCBsaXN0IGJ5IHJlYWRpbmcgdGhlIGVudGlyZSBsaXN0IG9mCisrICAgc2hhcmVkIG9iamVjdHMg ZnJvbSB0aGUgaW5mZXJpb3IuICBSZXR1cm5zIG5vbnplcm8gb24gc3VjY2Vzcy4gICovCisrCisr c3RhdGljIGludAorK3NvbGlzdF91cGRhdGVfZnVsbCAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykK Kyt7CisrICBzdnI0X2ZyZWVfbGlicmFyeV9saXN0ICgmaW5mby0+c29saWJfbGlzdCk7CisrICBp bmZvLT5zb2xpYl9saXN0ID0gc3ZyNF9jdXJyZW50X3Nvc19kaXJlY3QgKGluZm8pOworKworKyAg cmV0dXJuIDE7CisrfQorKworKy8qIFVwZGF0ZSB0aGUgc2hhcmVkIG9iamVjdCBsaXN0IHN0YXJ0 aW5nIGZyb20gdGhlIGxpbmstbWFwIGVudHJ5CisrICAgcGFzc2VkIGJ5IHRoZSBsaW5rZXIgaW4g dGhlIHByb2JlJ3MgdGhpcmQgYXJndW1lbnQuICBSZXR1cm5zCisrICAgbm9uemVybyBpZiB0aGUg bGlzdCB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIG9yIHplcm8gdG8gaW5kaWNhdGUKKysgICBm YWlsdXJlLiAgKi8KKysKKytzdGF0aWMgaW50Cisrc29saXN0X3VwZGF0ZV9pbmNyZW1lbnRhbCAo c3RydWN0IHN2cjRfaW5mbyAqaW5mbywgQ09SRV9BRERSIGxtKQorK3sKKysgIHN0cnVjdCBzb19s aXN0ICp0YWlsOworKyAgQ09SRV9BRERSIHByZXZfbG07CisrCisrICAvKiBGYWxsIGJhY2sgdG8g YSBmdWxsIHVwZGF0ZSBpZiB3ZSBoYXZlbid0IHJlYWQgYW55dGhpbmcgeWV0LiAgKi8KKysgIGlm IChpbmZvLT5zb2xpYl9saXN0ID09IE5VTEwpCisrICAgIHJldHVybiAwOworKworKyAgLyogRmFs bCBiYWNrIHRvIGEgZnVsbCB1cGRhdGUgaWYgd2UgYXJlIHVzaW5nIGEgcmVtb3RlIHRhcmdldAor KyAgICAgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGluY3JlbWVudGFsIHRyYW5zZmVycy4gICovCisr ICBpZiAoaW5mby0+dXNpbmdfeGZlciAmJiAhdGFyZ2V0X2F1Z21lbnRlZF9saWJyYXJpZXNfc3Zy NF9yZWFkKCkpCisrICAgIHJldHVybiAwOworKworKyAgLyogV2FsayB0byB0aGUgZW5kIG9mIHRo ZSBsaXN0LiAgKi8KKysgIGZvciAodGFpbCA9IGluZm8tPnNvbGliX2xpc3Q7IHRhaWwtPm5leHQ7 IHRhaWwgPSB0YWlsLT5uZXh0KTsKKysgIHByZXZfbG0gPSB0YWlsLT5sbV9pbmZvLT5sbV9hZGRy OworKworKyAgLyogUmVhZCB0aGUgbmV3IG9iamVjdHMuICAqLworKyAgaWYgKGluZm8tPnVzaW5n X3hmZXIpCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgc3ZyNF9saWJyYXJ5X2xpc3QgbGlicmFyeV9s aXN0OworKyAgICAgIGNoYXIgYW5uZXhbNjRdOworKworKyAgICAgIHhzbnByaW50ZiAoYW5uZXgs IHNpemVvZiAoYW5uZXgpLCAic3RhcnQ9JWx4O3ByZXY9JWx4IiwgbG0sIHByZXZfbG0pOworKyAg ICAgIGlmICghc3ZyNF9jdXJyZW50X3Nvc192aWFfeGZlcl9saWJyYXJpZXMgKCZsaWJyYXJ5X2xp c3QsIGFubmV4KSkKKysJcmV0dXJuIDA7CisrCisrICAgICAgdGFpbC0+bmV4dCA9IGxpYnJhcnlf bGlzdC5oZWFkOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgc29fbGlz dCAqKmxpbmsgPSAmdGFpbC0+bmV4dDsKKysKKysgICAgICBpZiAoIXN2cjRfcmVhZF9zb19saXN0 IChsbSwgcHJldl9sbSwgJmxpbmssIDApKQorKwlyZXR1cm4gMDsKKysgICAgfQorKworKyAgcmV0 dXJuIDE7CisrfQorKworKy8qIERpc2FibGUgdGhlIHByb2Jlcy1iYXNlZCBsaW5rZXIgaW50ZXJm YWNlIGFuZCByZXZlcnQgdG8gdGhlCisrICAgb3JpZ2luYWwgaW50ZXJmYWNlLiAgV2UgZG9uJ3Qg cmVzZXQgdGhlIGJyZWFrcG9pbnRzIGFzIHRoZQorKyAgIG9uZXMgc2V0IHVwIGZvciB0aGUgcHJv YmVzLWJhc2VkIGludGVyZmFjZSBhcmUgYWRlcXVhdGUuICAqLworKworK3N0YXRpYyB2b2lkCisr ZGlzYWJsZV9wcm9iZXNfaW50ZXJmYWNlX2NsZWFudXAgKHZvaWQgKmFyZykKKyt7CisrICBzdHJ1 Y3Qgc3ZyNF9pbmZvICppbmZvID0gZ2V0X3N2cjRfaW5mbyAoKTsKKysKKysgIHdhcm5pbmcgKF8o IlByb2Jlcy1iYXNlZCBkeW5hbWljIGxpbmtlciBpbnRlcmZhY2UgZmFpbGVkLlxuIgorKwkgICAg ICJSZXZlcnRpbmcgdG8gb3JpZ2luYWwgaW50ZXJmYWNlLlxuIikpOworKworKyAgZnJlZV9wcm9i ZXNfdGFibGUgKGluZm8pOworKyAgZnJlZV9zb2xpYl9saXN0IChpbmZvKTsKKyt9CisrCisrLyog VXBkYXRlIHRoZSBzb2xpYiBsaXN0IGFzIGFwcHJvcHJpYXRlIHdoZW4gdXNpbmcgdGhlCisrICAg cHJvYmVzLWJhc2VkIGxpbmtlciBpbnRlcmZhY2UuICBEbyBub3RoaW5nIGlmIHVzaW5nIHRoZQor KyAgIHN0YW5kYXJkIGludGVyZmFjZS4gICovCisrCisrc3RhdGljIHZvaWQKKytzdnI0X2hhbmRs ZV9zb2xpYl9ldmVudCAodm9pZCkKKyt7CisrICBzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvID0gZ2V0 X3N2cjRfaW5mbyAoKTsKKysgIHN0cnVjdCBwcm9iZV9hbmRfYWN0aW9uICpwYTsKKysgIGVudW0g cHJvYmVfYWN0aW9uIGFjdGlvbjsKKysgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW4sICp1c21f Y2hhaW47CisrICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKysgIENPUkVfQUREUiBwYywgZGVidWdfYmFz ZSwgbG0gPSAwOworKyAgaW50IGlzX2luaXRpYWxfbnM7CisrCisrICAvKiBEbyBub3RoaW5nIGlm IG5vdCB1c2luZyB0aGUgcHJvYmVzIGludGVyZmFjZS4gICovCisrICBpZiAoaW5mby0+cHJvYmVz X3RhYmxlID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIC8qIElmIGFueXRoaW5nIGdvZXMg d3Jvbmcgd2UgcmV2ZXJ0IHRvIHRoZSBvcmlnaW5hbCBsaW5rZXIKKysgICAgIGludGVyZmFjZS4g ICovCisrICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKGRpc2FibGVfcHJvYmVzX2ludGVyZmFj ZV9jbGVhbnVwLCBOVUxMKTsKKysKKysgIHBjID0gcmVnY2FjaGVfcmVhZF9wYyAoZ2V0X2N1cnJl bnRfcmVnY2FjaGUgKCkpOworKyAgcGEgPSBzb2xpYl9ldmVudF9wcm9iZV9hdCAoaW5mbywgcGMp OworKyAgaWYgKHBhID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7CisrCisrICBhY3Rpb24gPSBz b2xpYl9ldmVudF9wcm9iZV9hY3Rpb24gKHBhKTsKKysgIGlmIChhY3Rpb24gPT0gUFJPQkVTX0lO VEVSRkFDRV9GQUlMRUQpCisrICAgIGdvdG8gZXJyb3I7CisrCisrICBpZiAoYWN0aW9uID09IERP X05PVEhJTkcpCisrICAgIHJldHVybjsKKysKKysgIC8qIEVWQUxVQVRFX1BST0JFX0FSR1VNRU5U IGxvb2tzIHVwIHN5bWJvbHMgaW4gdGhlIGR5bmFtaWMgbGlua2VyCisrICAgICB1c2luZyBGSU5E X1BDX1NFQ1RJT04uICBGSU5EX1BDX1NFQ1RJT04gaXMgYWNjZWxlcmF0ZWQgYnkgYSBjYWNoZQor KyAgICAgY2FsbGVkIHRoZSBzZWN0aW9uIG1hcC4gIFRoZSBzZWN0aW9uIG1hcCBpcyBpbnZhbGlk YXRlZCBldmVyeQorKyAgICAgdGltZSBhIHNoYXJlZCBsaWJyYXJ5IGlzIGxvYWRlZCBvciB1bmxv YWRlZCwgYW5kIGlmIHRoZSBpbmZlcmlvcgorKyAgICAgaXMgZ2VuZXJhdGluZyBhIGxvdCBvZiBz aGFyZWQgbGlicmFyeSBldmVudHMgdGhlbiB0aGUgc2VjdGlvbiBtYXAKKysgICAgIHdpbGwgYmUg dXBkYXRlZCBldmVyeSB0aW1lIFNWUjRfSEFORExFX1NPTElCX0VWRU5UIGlzIGNhbGxlZC4KKysg ICAgIFdlIGNhbGxlZCBGSU5EX1BDX1NFQ1RJT04gaW4gU1ZSNF9DUkVBVEVfU09MSUJfRVZFTlRf QlJFQUtQT0lOVFMsCisrICAgICBzbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIGR5bmFtaWMg bGlua2VyJ3Mgc2VjdGlvbnMgYXJlIGluIHRoZQorKyAgICAgc2VjdGlvbiBtYXAuICBXZSBjYW4g dGhlcmVmb3JlIGluaGliaXQgc2VjdGlvbiBtYXAgdXBkYXRlcyBhY3Jvc3MKKysgICAgIHRoZXNl IGNhbGxzIHRvIEVWQUxVQVRFX1BST0JFX0FSR1VNRU5UIGFuZCBzYXZlIGEgbG90IG9mIHRpbWUu ICAqLworKyAgaW5oaWJpdF9zZWN0aW9uX21hcF91cGRhdGVzICgpOworKyAgdXNtX2NoYWluID0g bWFrZV9jbGVhbnVwIChyZXN1bWVfc2VjdGlvbl9tYXBfdXBkYXRlc19jbGVhbnVwLCBOVUxMKTsK KysKKysgIHZhbCA9IGV2YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChwYS0+cHJvYmUsIDEpOworKyAg aWYgKHZhbCA9PSBOVUxMKQorKyAgICBnb3RvIGVycm9yOworKworKyAgZGVidWdfYmFzZSA9IHZh bHVlX2FzX2FkZHJlc3MgKHZhbCk7CisrICBpZiAoZGVidWdfYmFzZSA9PSAwKQorKyAgICBnb3Rv IGVycm9yOworKworKyAgLyogQWx3YXlzIGxvY2F0ZSB0aGUgZGVidWcgc3RydWN0LCBpbiBjYXNl IGl0IG1vdmVkLiAgKi8KKysgIGluZm8tPmRlYnVnX2Jhc2UgPSAwOworKyAgaWYgKGxvY2F0ZV9i YXNlIChpbmZvKSA9PSAwKQorKyAgICBnb3RvIGVycm9yOworKworKyAgLyogRG8gbm90IHByb2Nl c3MgbmFtZXNwYWNlcyBvdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZS4gICovCisrICBpZiAoZGVi dWdfYmFzZSAhPSBpbmZvLT5kZWJ1Z19iYXNlKQorKyAgICBhY3Rpb24gPSBET19OT1RISU5HOwor KworKyAgaWYgKGFjdGlvbiA9PSBVUERBVEVfT1JfUkVMT0FEKQorKyAgICB7CisrICAgICAgdmFs ID0gZXZhbHVhdGVfcHJvYmVfYXJndW1lbnQgKHBhLT5wcm9iZSwgMik7CisrICAgICAgaWYgKHZh bCAhPSBOVUxMKQorKwlsbSA9IHZhbHVlX2FzX2FkZHJlc3MgKHZhbCk7CisrCisrICAgICAgaWYg KGxtID09IDApCisrCWFjdGlvbiA9IEZVTExfUkVMT0FEOworKyAgICB9CisrCisrICAvKiBSZXN1 bWUgc2VjdGlvbiBtYXAgdXBkYXRlcy4gICovCisrICBkb19jbGVhbnVwcyAodXNtX2NoYWluKTsK KysKKysgIGlmIChhY3Rpb24gPT0gVVBEQVRFX09SX1JFTE9BRCkKKysgICAgeworKyAgICAgIGlm ICghc29saXN0X3VwZGF0ZV9pbmNyZW1lbnRhbCAoaW5mbywgbG0pKQorKwlhY3Rpb24gPSBGVUxM X1JFTE9BRDsKKysgICAgfQorKworKyAgaWYgKGFjdGlvbiA9PSBGVUxMX1JFTE9BRCkKKysgICAg eworKyAgICAgIGlmICghc29saXN0X3VwZGF0ZV9mdWxsIChpbmZvKSkKKysJZ290byBlcnJvcjsK KysgICAgfQorKworKyAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NoYWluKTsKKysgIHJldHVybjsK KysKKysgZXJyb3I6CisrICAvKiBXZSBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZSwgYnV0IGlmIHdl IGRvIHdlIGRpc2FibGUgdGhlCisrICAgICBwcm9iZXMgaW50ZXJmYWNlIGFuZCByZXZlcnQgdG8g dGhlIG9yaWdpbmFsIGludGVyZmFjZS4gICovCisrCisrICBkb19jbGVhbnVwcyAob2xkX2NoYWlu KTsKKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9uIGZvciBzdnI0X3VwZGF0ZV9zb2xpYl9ldmVu dF9icmVha3BvaW50cy4gICovCisrCisrc3RhdGljIGludAorK3N2cjRfdXBkYXRlX3NvbGliX2V2 ZW50X2JyZWFrcG9pbnQgKHN0cnVjdCBicmVha3BvaW50ICpiLCB2b2lkICphcmcpCisreworKyAg c3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7CisrICBzdHJ1Y3QgYnBf bG9jYXRpb24gKmxvYzsKKysKKysgIGlmIChiLT50eXBlICE9IGJwX3NobGliX2V2ZW50KQorKyAg ICByZXR1cm4gMDsgLyogQ29udGludWUgaXRlcmF0aW5nLiAgKi8KKysKKysgIGZvciAobG9jID0g Yi0+bG9jOyBsb2M7IGxvYyA9IGxvYy0+bmV4dCkKKysgICAgeworKyAgICAgIHN0cnVjdCBwcm9i ZV9hbmRfYWN0aW9uICpwYSA9IHNvbGliX2V2ZW50X3Byb2JlX2F0IChpbmZvLCBsb2MtPmFkZHJl c3MpOworKworKyAgICAgIGlmIChwYSAhPSBOVUxMKQorKwl7CisrCSAgaWYgKHBhLT5hY3Rpb24g PT0gRE9fTk9USElORykKKysJICAgIGItPmVuYWJsZV9zdGF0ZSA9IChzdG9wX29uX3NvbGliX2V2 ZW50cworKwkJCSAgICAgICA/IGJwX2VuYWJsZWQgOiBicF9kaXNhYmxlZCk7CisrCisrCSAgcmV0 dXJuIDA7IC8qIENvbnRpbnVlIGl0ZXJhdGluZy4gICovCisrCX0KKysgICAgfQorKworKyAgcmV0 dXJuIDA7IC8qIENvbnRpbnVlIGl0ZXJhdGluZy4gICovCisrfQorKworKy8qIEVuYWJsZSBvciBk aXNhYmxlIG9wdGlvbmFsIHNvbGliIGV2ZW50IGJyZWFrcG9pbnRzIGFzIGFwcHJvcHJpYXRlLgor KyAgIENhbGxlZCB3aGVuZXZlciBzdG9wX29uX3NvbGliX2V2ZW50cyBpcyBjaGFuZ2VkLiAgKi8K KysKKytzdGF0aWMgdm9pZAorK3N2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh2 b2lkKQorK3sKKysgIHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwor KworKyAgaWYgKGluZm8tPnByb2Jlc190YWJsZSkKKysgICAgaXRlcmF0ZV9vdmVyX2JyZWFrcG9p bnRzIChzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50LCBOVUxMKTsKKyt9CisrCisr LyogQ3JlYXRlIGFuZCByZWdpc3RlciBzb2xpYiBldmVudCBicmVha3BvaW50cy4gICovCisrCisr c3RhdGljIHZvaWQKKytzdnI0X2NyZWF0ZV9wcm9iZV9icmVha3BvaW50cyAoc3RydWN0IGdkYmFy Y2ggKmdkYmFyY2gsCisrCQkJICAgICAgIFZFQyAocHJvYmVfcCkgKipwcm9iZXMpCisreworKyAg aW50IGk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BST0JFUzsgaSsrKQorKyAgICB7Cisr ICAgICAgZW51bSBwcm9iZV9hY3Rpb24gYWN0aW9uID0gcHJvYmVfaW5mb1tpXS5hY3Rpb247Cisr ICAgICAgc3RydWN0IHByb2JlICpwcm9iZTsKKysgICAgICBpbnQgaXg7CisrCisrICAgICAgZm9y IChpeCA9IDA7CisrCSAgIFZFQ19pdGVyYXRlIChwcm9iZV9wLCBwcm9iZXNbaV0sIGl4LCBwcm9i ZSk7CisrCSAgICsraXgpCisrCXsKKysJICBjcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludCAo Z2RiYXJjaCwgcHJvYmUtPmFkZHJlc3MpOworKwkgIHJlZ2lzdGVyX3NvbGliX2V2ZW50X3Byb2Jl IChwcm9iZSwgYWN0aW9uKTsKKysJfQorKyAgICB9CisrCisrICBzdnI0X3VwZGF0ZV9zb2xpYl9l dmVudF9icmVha3BvaW50cyAoKTsKKyt9CisrCisrLyogQm90aCB0aGUgU3VuT1MgYW5kIHRoZSBT VlI0IGR5bmFtaWMgbGlua2VycyBjYWxsIGEgbWFya2VyIGZ1bmN0aW9uCisrICAgYmVmb3JlIGFu ZCBhZnRlciBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgc2hhcmVkIGxpYnJhcmllcy4gIFRoZSBzb2xl CisrICAgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBhbGxvdyBkZWJ1Z2dlcnMgdG8gc2V0 IGEgYnJlYWtwb2ludCBzbworKyAgIHRoZXkgY2FuIHRyYWNrIHRoZXNlIGNoYW5nZXMuCisrCisr ICAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgZ2xpYmMgZHluYW1pYyBsaW5rZXIgY29udGFpbiBuYW1l ZCBwcm9iZXMKKysgICB0byBhbGxvdyBtb3JlIGZpbmUgZ3JhaW5lZCBzdG9wcGluZy4gIEdpdmVu IHRoZSBhZGRyZXNzIG9mIHRoZQorKyAgIG9yaWdpbmFsIG1hcmtlciBmdW5jdGlvbiwgdGhpcyBm dW5jdGlvbiBhdHRlbXB0cyB0byBmaW5kIHRoZXNlCisrICAgcHJvYmVzLCBhbmQgaWYgZm91bmQs IHNldHMgYnJlYWtwb2ludHMgb24gdGhvc2UgaW5zdGVhZC4gIElmIHRoZQorKyAgIHByb2JlcyBh cmVuJ3QgZm91bmQsIGEgc2luZ2xlIGJyZWFrcG9pbnQgaXMgc2V0IG9uIHRoZSBvcmlnaW5hbAor KyAgIG1hcmtlciBmdW5jdGlvbi4gICovCisrCisrc3RhdGljIHZvaWQKKytzdnI0X2NyZWF0ZV9z b2xpYl9ldmVudF9icmVha3BvaW50cyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisrCQkJCSAg ICAgQ09SRV9BRERSIGFkZHJlc3MpCisreworKyAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdl dF9zdnI0X2luZm8gKCk7CisrICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKm9zOworKworKyAgb3MgPSBm aW5kX3BjX3NlY3Rpb24gKGFkZHJlc3MpOworKyAgaWYgKG9zICE9IE5VTEwpCisrICAgIHsKKysg ICAgICBpbnQgd2l0aF9wcmVmaXg7CisrCisrICAgICAgZm9yICh3aXRoX3ByZWZpeCA9IDA7IHdp dGhfcHJlZml4IDw9IDE7IHdpdGhfcHJlZml4KyspCisrCXsKKysJICBWRUMgKHByb2JlX3ApICpw cm9iZXNbTlVNX1BST0JFU107CisrCSAgaW50IGFsbF9wcm9iZXNfZm91bmQgPSAxOworKwkgIGlu dCBpOworKworKwkgIG1lbXNldCAocHJvYmVzLCAwLCBzaXplb2YgKHByb2JlcykpOworKwkgIGZv ciAoaSA9IDA7IGkgPCBOVU1fUFJPQkVTOyBpKyspCisrCSAgICB7CisrCSAgICAgIGNoYXIgbmFt ZVszMl0gPSB7ICdcMCcgfTsKKysKKysJICAgICAgLyogRmVkb3JhIDE3LCBSSEVMIDYuMiwgYW5k IFJIRUwgNi4zIHNoaXBwZWQgd2l0aCBhbgorKwkJIGVhcmx5IHZlcnNpb24gb2YgdGhlIHByb2Jl cyBjb2RlIGluIHdoaWNoIHRoZSBwcm9iZXMnCisrCQkgbmFtZXMgd2VyZSBwcmVmaXhlZCB3aXRo ICJydGxkXyIgYW5kIHRoZSAibWFwX2ZhaWxlZCIKKysJCSBwcm9iZSBkaWQgbm90IGV4aXN0LiAg VGhlIGxvY2F0aW9ucyBvZiB0aGUgcHJvYmVzIGFyZQorKwkJIG90aGVyd2lzZSB0aGUgc2FtZSwg c28gd2UgY2hlY2sgZm9yIHByb2JlcyB3aXRoCisrCQkgcHJlZml4ZWQgbmFtZXMgaWYgcHJvYmVz IHdpdGggdW5wcmVmaXhlZCBuYW1lcyBhcmUKKysJCSBub3QgcHJlc2VudC4gICovCisrCisrCSAg ICAgIGlmICh3aXRoX3ByZWZpeCkKKysJCXN0cm5jYXQgKG5hbWUsICJydGxkXyIsIHNpemVvZiAo bmFtZSkgLSBzdHJsZW4gKG5hbWUpIC0gMSk7CisrCisrCSAgICAgIHN0cm5jYXQgKG5hbWUsIHBy b2JlX2luZm9baV0ubmFtZSwKKysJCSAgICAgICBzaXplb2YgKG5hbWUpIC0gc3RybGVuIChuYW1l KSAtIDEpOworKworKwkgICAgICBwcm9iZXNbaV0gPSBmaW5kX3Byb2Jlc19pbl9vYmpmaWxlIChv cy0+b2JqZmlsZSwgInJ0bGQiLCBuYW1lKTsKKysKKysJICAgICAgaWYgKCFzdHJjbXAgKG5hbWUs ICJydGxkX21hcF9mYWlsZWQiKSkKKysJCWNvbnRpbnVlOworKworKwkgICAgICBpZiAoIVZFQ19s ZW5ndGggKHByb2JlX3AsIHByb2Jlc1tpXSkpCisrCQl7CisrCQkgIGFsbF9wcm9iZXNfZm91bmQg PSAwOworKwkJICBicmVhazsKKysJCX0KKysJICAgIH0KKysKKysJICBpZiAoYWxsX3Byb2Jlc19m b3VuZCkKKysJICAgIHN2cjRfY3JlYXRlX3Byb2JlX2JyZWFrcG9pbnRzIChnZGJhcmNoLCBwcm9i ZXMpOworKworKwkgIGZvciAoaSA9IDA7IGkgPCBOVU1fUFJPQkVTOyBpKyspCisrCSAgICBWRUNf ZnJlZSAocHJvYmVfcCwgcHJvYmVzW2ldKTsKKysKKysJICBpZiAoYWxsX3Byb2Jlc19mb3VuZCkK KysJICAgIHJldHVybjsKKysJfQorKyAgICB9CisrCisrICBjcmVhdGVfc29saWJfZXZlbnRfYnJl YWtwb2ludCAoZ2RiYXJjaCwgYWRkcmVzcyk7CisrfQorKworIC8qIEhlbHBlciBmdW5jdGlvbiBm b3IgZ2RiX2JmZF9sb29rdXBfc3ltYm9sLiAgKi8KKyAKKyBzdGF0aWMgaW50CitAQCAtMTUwMSw2 ICsyMDczLDggQEAgZW5hYmxlX2JyZWFrIChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBpbgorICAg aW5mby0+aW50ZXJwX3RleHRfc2VjdF9sb3cgPSBpbmZvLT5pbnRlcnBfdGV4dF9zZWN0X2hpZ2gg PSAwOworICAgaW5mby0+aW50ZXJwX3BsdF9zZWN0X2xvdyA9IGluZm8tPmludGVycF9wbHRfc2Vj dF9oaWdoID0gMDsKKyAKKysgIGZyZWVfcHJvYmVzX3RhYmxlIChpbmZvKTsKKysKKyAgIC8qIElm IHdlIGFscmVhZHkgaGF2ZSBhIHNoYXJlZCBsaWJyYXJ5IGxpc3QgaW4gdGhlIHRhcmdldCwgYW5k CisgICAgICByX2RlYnVnIGNvbnRhaW5zIHJfYnJrLCBzZXQgdGhlIGJyZWFrcG9pbnQgdGhlcmUg LSB0aGlzIHNob3VsZAorICAgICAgbWVhbiByX2JyayBoYXMgYWxyZWFkeSBiZWVuIHJlbG9jYXRl ZC4gIEFzc3VtZSB0aGUgZHluYW1pYyBsaW5rZXIKK0BAIC0xNTMyLDcgKzIxMDYsNyBAQCBlbmFi bGVfYnJlYWsgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8sIGluCisgCSBUaGF0IGtub3dsZWRnZSBp cyBlbmNvZGVkIGluIHRoZSBhZGRyZXNzLCBpZiBpdCdzIFRodW1iIHRoZSBsb3cgYml0CisgCSBp cyAxLiAgSG93ZXZlciwgd2UndmUgc3RyaXBwZWQgdGhhdCBpbmZvIGFib3ZlIGFuZCBpdCdzIG5v dCBjbGVhcgorIAkgd2hhdCBhbGwgdGhlIGNvbnNlcXVlbmNlcyBhcmUgb2YgcGFzc2luZyBhIG5v bi1hZGRyX2JpdHNfcmVtb3ZlJ2QKKy0JIGFkZHJlc3MgdG8gY3JlYXRlX3NvbGliX2V2ZW50X2Jy ZWFrcG9pbnQuICBUaGUgY2FsbCB0bworKwkgYWRkcmVzcyB0byBzdnI0X2NyZWF0ZV9zb2xpYl9l dmVudF9icmVha3BvaW50cy4gIFRoZSBjYWxsIHRvCisgCSBmaW5kX3BjX3NlY3Rpb24gdmVyaWZp ZXMgd2Uga25vdyBhYm91dCB0aGUgYWRkcmVzcyBhbmQgaGF2ZSBzb21lCisgCSBob3BlIG9mIGNv bXB1dGluZyB0aGUgcmlnaHQga2luZCBvZiBicmVha3BvaW50IHRvIHVzZSAodmlhCisgCSBzeW1i b2wgaW5mbykuICBJdCBkb2VzIG1lYW4gdGhhdCBHREIgbmVlZHMgdG8gYmUgcG9pbnRlZCBhdCBh CitAQCAtMTU3MCw3ICsyMTQ0LDcgQEAgZW5hYmxlX2JyZWFrIChzdHJ1Y3Qgc3ZyNF9pbmZvICpp bmZvLCBpbgorIAkJKyBiZmRfc2VjdGlvbl9zaXplICh0bXBfYmZkLCBpbnRlcnBfc2VjdCk7Cisg CSAgICB9CisgCistCSAgY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKHRhcmdldF9nZGJh cmNoICgpLCBzeW1fYWRkcik7CisrCSAgc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2lu dHMgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7CisgCSAgcmV0dXJuIDE7CisgCX0KKyAg ICAgfQorQEAgLTE3MjgsNyArMjMwMiw4IEBAIGVuYWJsZV9icmVhayAoc3RydWN0IHN2cjRfaW5m byAqaW5mbywgaW4KKyAKKyAgICAgICBpZiAoc3ltX2FkZHIgIT0gMCkKKyAJeworLQkgIGNyZWF0 ZV9zb2xpYl9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgbG9hZF9hZGRyICsg c3ltX2FkZHIpOworKwkgIHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh0YXJn ZXRfZ2RiYXJjaCAoKSwKKysJCQkJCSAgICAgICBsb2FkX2FkZHIgKyBzeW1fYWRkcik7CisgCSAg eGZyZWUgKGludGVycF9uYW1lKTsKKyAJICByZXR1cm4gMTsKKyAJfQorQEAgLTE3NTQsNyArMjMy OSw3IEBAIGVuYWJsZV9icmVhayAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgaW4KKyAJICBzeW1f YWRkciA9IGdkYmFyY2hfY29udmVydF9mcm9tX2Z1bmNfcHRyX2FkZHIgKHRhcmdldF9nZGJhcmNo ICgpLAorIAkJCQkJCQkgc3ltX2FkZHIsCisgCQkJCQkJCSAmY3VycmVudF90YXJnZXQpOworLQkg IGNyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgc3ltX2Fk ZHIpOworKwkgIHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh0YXJnZXRfZ2Ri YXJjaCAoKSwgc3ltX2FkZHIpOworIAkgIHJldHVybiAxOworIAl9CisgICAgIH0KK0BAIC0xNzcw LDcgKzIzNDUsNyBAQCBlbmFibGVfYnJlYWsgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8sIGluCisg CSAgICAgIHN5bV9hZGRyID0gZ2RiYXJjaF9jb252ZXJ0X2Zyb21fZnVuY19wdHJfYWRkciAodGFy Z2V0X2dkYmFyY2ggKCksCisgCQkJCQkJCSAgICAgc3ltX2FkZHIsCisgCQkJCQkJCSAgICAgJmN1 cnJlbnRfdGFyZ2V0KTsKKy0JICAgICAgY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKHRh cmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7CisrCSAgICAgIHN2cjRfY3JlYXRlX3NvbGliX2V2 ZW50X2JyZWFrcG9pbnRzICh0YXJnZXRfZ2RiYXJjaCAoKSwgc3ltX2FkZHIpOworIAkgICAgICBy ZXR1cm4gMTsKKyAJICAgIH0KKyAJfQorQEAgLTIyNjYsNiArMjg0MSw5IEBAIHN2cjRfc29saWJf Y3JlYXRlX2luZmVyaW9yX2hvb2sgKGludCBmcm8KKyAKKyAgIGluZm8gPSBnZXRfc3ZyNF9pbmZv ICgpOworIAorKyAgLyogRnJlZSB0aGUgcHJvYmVzLWJhc2VkIGludGVyZmFjZSdzIHNvbGliIGxp c3QuICAqLworKyAgZnJlZV9zb2xpYl9saXN0IChpbmZvKTsKKysKKyAgIC8qIFJlbG9jYXRlIHRo ZSBtYWluIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5LiAgKi8KKyAgIHN2cjRfcmVsb2NhdGVfbWFp bl9leGVjdXRhYmxlICgpOworIAorQEAgLTI1MDcsNCArMzA4NSw2IEBAIF9pbml0aWFsaXplX3N2 cjRfc29saWIgKHZvaWQpCisgICBzdnI0X3NvX29wcy5sb29rdXBfbGliX2dsb2JhbF9zeW1ib2wg PSBlbGZfbG9va3VwX2xpYl9zeW1ib2w7CisgICBzdnI0X3NvX29wcy5zYW1lID0gc3ZyNF9zYW1l OworICAgc3ZyNF9zb19vcHMua2VlcF9kYXRhX2luX2NvcmUgPSBzdnI0X2tlZXBfZGF0YV9pbl9j b3JlOworKyAgc3ZyNF9zb19vcHMudXBkYXRlX2JyZWFrcG9pbnRzID0gc3ZyNF91cGRhdGVfc29s aWJfZXZlbnRfYnJlYWtwb2ludHM7CisrICBzdnI0X3NvX29wcy5oYW5kbGVfZXZlbnQgPSBzdnI0 X2hhbmRsZV9zb2xpYl9ldmVudDsKKyB9CitJbmRleDogZ2RiLTcuNi9nZGIvYnJlYWtwb2ludC5j Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9icmVha3BvaW50LmMJMjAxMy0wNS0x OSAxNjoxNjoyMC42MDYwODcyMDggKzAyMDAKKysrKyBnZGItNy42L2dkYi9icmVha3BvaW50LmMJ MjAxMy0wNS0xOSAxNjoyMTo1NS4yODg4MDUyNjkgKzAyMDAKK0BAIC01MzYxLDI1ICs1MzYxLDYg QEAgaGFuZGxlX2ppdF9ldmVudCAodm9pZCkKKyAgIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAo KTsKKyB9CiAgCi0gICAvKiBWYWxpZGl0eSBmbGFnIGZvciBkZWJ1Z19sb2FkZXJfb2Zmc2V0LiAg Ki8KLS0gIGludCBkZWJ1Z19sb2FkZXJfb2Zmc2V0X3A7Ci0rICB1bnNpZ25lZCBpbnQgZGVidWdf bG9hZGVyX29mZnNldF9wIDogMTsKKy0vKiBIYW5kbGUgYW4gc29saWIgZXZlbnQgYnkgY2FsbGlu ZyBzb2xpYl9hZGQuICAqLworLQorLXZvaWQKKy1oYW5kbGVfc29saWJfZXZlbnQgKHZvaWQpCist eworLSAgY2xlYXJfcHJvZ3JhbV9zcGFjZV9zb2xpYl9jYWNoZSAoY3VycmVudF9pbmZlcmlvciAo KS0+cHNwYWNlKTsKKy0KKy0gIC8qIENoZWNrIGZvciBhbnkgbmV3bHkgYWRkZWQgc2hhcmVkIGxp YnJhcmllcyBpZiB3ZSdyZSBzdXBwb3NlZCB0bworLSAgICAgYmUgYWRkaW5nIHRoZW0gYXV0b21h dGljYWxseS4gIFN3aXRjaCB0ZXJtaW5hbCBmb3IgYW55IG1lc3NhZ2VzCistICAgICBwcm9kdWNl ZCBieSBicmVha3BvaW50X3JlX3NldC4gICovCistICB0YXJnZXRfdGVybWluYWxfb3Vyc19mb3Jf b3V0cHV0ICgpOworLSNpZmRlZiBTT0xJQl9BREQKKy0gIFNPTElCX0FERCAoTlVMTCwgMCwgJmN1 cnJlbnRfdGFyZ2V0LCBhdXRvX3NvbGliX2FkZCk7CistI2Vsc2UKKy0gIHNvbGliX2FkZCAoTlVM TCwgMCwgJmN1cnJlbnRfdGFyZ2V0LCBhdXRvX3NvbGliX2FkZCk7CistI2VuZGlmCistICB0YXJn ZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CistfQorLQorIC8qIFByZXBhcmUgV0hBVCBmaW5hbCBk ZWNpc2lvbiBmb3IgaW5mcnVuLiAgKi8KICAKLSAgIC8qIExvYWQgYWRkcmVzcyBmb3IgdGhlIGR5 bmFtaWMgbGlua2VyLCBpbmZlcnJlZC4gICovCi0gICBDT1JFX0FERFIgZGVidWdfbG9hZGVyX29m ZnNldDsKKyAvKiBEZWNpZGUgd2hhdCBpbmZydW4gbmVlZHMgdG8gZG8gd2l0aCB0aGlzIGJwc3Rh dC4gICovCgpkaWZmIC0tZ2l0IGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTZvZjcucGF0Y2ggYi9n ZGItZGxvcGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaAppbmRleCBhY2E0YmZkLi41MDBhYjM0IDEw MDY0NAotLS0gYS9nZGItZGxvcGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaAorKysgYi9nZGItZGxv cGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaApAQCAtMSwxNTAxICsxLDE2NSBAQAotZ2RiLwotMjAx Mi0wNy0zMCAgR2FyeSBCZW5zb24gIDxnYmVuc29uQHJlZGhhdC5jb20+CitodHRwOi8vc291cmNl d2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxMy0wNS9tc2cwMDYzMS5odG1sCitTdWJqZWN0OiBb UkZBIDYvN10gTGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZSB0ZXN0cyBieSBKYW4KIAotCSogYnJl YWtwb2ludC5oIChoYW5kbGVfc29saWJfZXZlbnQpOiBNb3ZlZCBmdW5jdGlvbiBkZWZpbml0aW9u Ci0JdG8gc29saWIuaCwgYW5kIGFkZGVkIGEgbmV3IHBhcmFtZXRlci4KLQkqIGJyZWFrcG9pbnQu YyAoaGFuZGxlX3NvbGliX2V2ZW50KTogTW92ZWQgZnVuY3Rpb24gdG8gc29saWIuYwotCWFuZCBh ZGRlZCBhIG5ldyBwYXJhbWV0ZXIuCi0JKGJwc3RhdF9zdG9wX3N0YXR1cyk6IFBhc3MgbmV3IGFy Z3VtZW50IHRvIGhhbmRsZV9zb2xpYl9ldmVudC4KLQkqIHNvbGliLmggKGJyZWFrcG9pbnQuaCk6 IE5ldyBpbmNsdWRlLgotCShoYW5kbGVfc29saWJfZXZlbnQpOiBNb3ZlZCBmdW5jdGlvbiBkZWZp bml0aW9uIGZyb20gYnJlYWtwb2ludC5oCi0JYW5kIGFkZGVkIGEgbmV3IHBhcmFtZXRlci4KLQko dXBkYXRlX3NvbGliX2JyZWFrcG9pbnRzKTogTmV3IGZ1bmN0aW9uIGRlZmluaXRpb24uCi0JKiBz b2xpYi5jIChoYW5kbGVfc29saWJfZXZlbnQpOiBNb3ZlZCBmdW5jdGlvbiBmcm9tIGJyZWFrcG9p bnQuYwotCWFuZCBhZGRlZCBhIG5ldyBwYXJhbWV0ZXIuCi0JKHVwZGF0ZV9zb2xpYl9icmVha3Bv aW50cyk6IE5ldyBmdW5jdGlvbi4KLQkqIHNvbGlzdC5oIChicmVha3BvaW50LmgpOiBOZXcgaW5j bHVkZS4KLQkodGFyZ2V0X3NvX29wcyk6IE5ldyBmaWVsZHMgImhhbmRsZV9zb2xpYl9ldmVudCIg YW5kCi0JInVwZGF0ZV9icmVha3BvaW50cyIuCi0JKiBpbmZydW4uYyAoc2V0X3N0b3Bfb25fc29s aWJfZXZlbnRzKTogTmV3IGZ1bmN0aW9uLgotCShfaW5pdGlhbGl6ZV9pbmZydW4pOiBVc2UgdGhl IGFib3ZlIGZvciAic2V0IHN0b3Atb24tc29saWItZXZlbnRzIi4KLQkoaGFuZGxlX2luZmVyaW9y X2V2ZW50KTogUGFzcyBuZXcgYXJndW1lbnQgdG8gaGFuZGxlX3NvbGliX2V2ZW50LgotCSogc29s aWItc3ZyNC5jIChwcm9iZS5oKTogTmV3IGluY2x1ZGUuCi0JKG5hbWVzcGFjZV90YWJsZV9mbGF0 dGVuKTogTmV3IGZvcndhcmQgZGVjbGFyYXRpb24uCi0JKGxtX2luZm8pOiBOZXcgZmllbGRzICJs bWlkIiBhbmQgImluX2luaXRpYWxfbnMiLgotCShwcm9iZV9hY3Rpb24pOiBOZXcgZW51bS4KLQko cHJvYmVfaW5mbyk6IE5ldyBzdHJ1Y3QuCi0JKHByb2JlX2luZm8pOiBOZXcgc3RhdGljIHZhcmlh YmxlLgotCShOVU1fUFJPQkVTKTogTmV3IGRlZmluaXRpb24uCi0JKHN2cjRfaW5mbyk6IE5ldyBm aWVsZHMgICJ1c2luZ19wcm9iZXMiLCAicHJvYmVzIiBhbmQKLQkibmFtZXNwYWNlX3RhYmxlIi4K LQkoZnJlZV9wcm9iZXMpOiBOZXcgZnVuY3Rpb24uCi0JKGZyZWVfbmFtZXNwYWNlX3RhYmxlKTog TGlrZXdpc2UuCi0JKHN2cjRfcHNwYWNlX2RhdGFfY2xlYW51cCk6IEZyZWUgcHJvYmVzIGFuZCBu YW1lc3BhY2UgdGFibGUuCi0JKHN2cjRfc2FtZSk6IEFsc28gY29tcGFyZSBuYW1lc3BhY2VzIGlm IHVzaW5nIHByb2Jlcy4KLQkobG1fYWRkcl9jaGVjayk6IE9ubHkgcHJpbnQgLmR5bmFtaWMgc2Vj dGlvbiBhdCB3cm9uZyBhZGRyZXNzCi0Jd2FybmluZyBmb3IgaW5pdGlhbCBuYW1lc3BhY2UgaWYg dXNpbmcgcHJvYmVzLgotCShyX21hcF9mcm9tX2RlYnVnX2Jhc2UpOiBOZXcgZnVuY3Rpb24uCi0J KHNvbGliX3N2cjRfcl9tYXApOiBDYWxsIHRoZSBhYm92ZS4KLQkoc3ZyNF9yZWFkX3NvX2xpc3Qp OiBOZXcgcGFyYW1ldGVyICJwcmV2X2xtIi4KLQlDaGFuZ2VkCXJldHVybiB0eXBlIGZyb20gdm9p ZCB0byBpbnQuCi0JUmV0dXJuIG5vbnplcm8gb24gc3VjY2VzcywgemVybyBvbiBlcnJvci4KLQko c3ZyNF9jdXJyZW50X3Nvc19mcm9tX2RlYnVnX2Jhc2UpOiBOZXcgZnVuY3Rpb24uCi0JKHN2cjRf Y3VycmVudF9zb3MpOiBDcmVhdGUgcmVzdWx0IGZyb20gbmFtZXNwYWNlIHRhYmxlIGlmIGF2YWls YWJsZS4KLQlVc2Ugc3ZyNF9jdXJyZW50X3Nvc19mcm9tX2RlYnVnX2Jhc2UgdG8gZ2VuZXJhdGUg bGlzdCBvdGhlcndpc2UuCi0JKHByb2JlX2FuZF9pbmZvKTogTmV3IHN0cnVjdC4KLQkoc29saWJf ZXZlbnRfcHJvYmVfYXQpOiBOZXcgZnVuY3Rpb24uCi0JKHNvbGliX2V2ZW50X3Byb2JlX2FjdGlv bik6IExpa2V3aXNlLgotCShuYW1lc3BhY2UpOiBOZXcgc3RydWN0LgotCShoYXNoX25hbWVzcGFj ZSk6IE5ldyBmdW5jdGlvbi4KLQkoZXF1YWxfbmFtZXNwYWNlKTogTGlrZXdpc2UuCi0JKGZyZWVf bmFtZXNwYWNlKTogTGlrZXdpc2UuCi0JKG5hbWVzcGFjZV91cGRhdGVfZnVsbCk6IExpa2V3aXNl LgotCShuYW1lc3BhY2VfdXBkYXRlX2luY3JlbWVudGFsKTogTGlrZXdpc2UuCi0JKHN2cjRfaGFu ZGxlX3NvbGliX2V2ZW50KTogTGlrZXdpc2UuCi0JKG5hbWVzcGFjZV90YWJsZV9mbGF0dGVuX2hl bHBlcik6IExpa2V3aXNlLgotCShuYW1lc3BhY2VfdGFibGVfZmxhdHRlbik6IExpa2V3aXNlLgot CShzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50KTogTGlrZXdpc2UuCi0JKHN2cjRf dXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzKTogTGlrZXdpc2UuCi0JKHN2cjRfY3JlYXRl X3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzKTogTGlrZXdpc2UuCi0JKGVuYWJsZV9icmVhayk6IEZy ZWUgcHJvYmVzIGJlZm9yZSBjcmVhdGluZyBicmVha3BvaW50cy4KLQlVc2Ugc3ZyNF9jcmVhdGVf c29saWJfZXZlbnRfYnJlYWtwb2ludHMgdG8gY3JlYXRlIGJyZWFrcG9pbnRzLgotCShzdnI0X3Nv bGliX2NyZWF0ZV9pbmZlcmlvcl9ob29rKTogRnJlZSB0aGUgbmFtZXNwYWNlIHRhYmxlLgotCShf aW5pdGlhbGl6ZV9zdnI0X3NvbGliKTogSW5pdGlhbGlzZSBzdnI0X3NvX29wcy5oYW5kbGVfc29s aWJfZXZlbnQKLQlhbmQgc3ZyNF9zb19vcHMudXBkYXRlX2JyZWFrcG9pbnRzLgogCi1nZGIvdGVz dHN1aXRlCi0yMDEyLTA3LTMwICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVkaGF0LmNvbT4KKy0t SVlWOWNScjJ1NnJqY1A0QgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFz Y2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKIAotCSogZ2RiLmJhc2UvYnJlYWstaW50 ZXJwLmV4cCAoc29saWJfYnApOiBOZXcgY29uc3RhbnQuCi0JKHJlYWNoXzEpOiBVc2UgdGhlIGFi b3ZlIGluc3RlYWQgb2YgIl9kbF9kZWJ1Z19zdGF0ZSIuCi0JKHRlc3RfYXR0YWNoKTogTGlrZXdp c2UuCi0JKHRlc3RfbGQpOiBMaWtld2lzZS4KLQkqIGdkYi5iYXNlL2JyZWFrLXByb2Jlcy5leHA6 IE5ldyBmaWxlLgotCSogZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmM6IExpa2V3aXNlLgotCSogZ2Ri LmJhc2UvYnJlYWstcHJvYmVzLXNvbGliLmM6IExpa2V3aXNlLgotCSogZ2RiLmJhc2UvaW5mby1z aGFyZWQuZXhwOiBOZXcgZmlsZS4KLQkqIGdkYi5iYXNlL2luZm8tc2hhcmVkLmM6IExpa2V3aXNl LgotCSogZ2RiLmJhc2UvaW5mby1zaGFyZWQtc29saWIxLmM6IExpa2V3aXNlLgotCSogZ2RiLmJh c2UvaW5mby1zaGFyZWQtc29saWIyLmM6IExpa2V3aXNlLgotCSogZ2RiLmJhc2UvYnJlYWstZGxt b3Blbi5leHA6IExpa2V3aXNlLgotCSogZ2RiLmJhc2UvYnJlYWstZGxtb3Blbi5jOiBMaWtld2lz ZS4KLQkqIGdkYi5iYXNlL2JyZWFrLWRsbW9wZW4tc29saWIuYzogTGlrZXdpc2UuCi0KLUluZGV4 OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9icmVha3BvaW50LmgKLT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBn ZGItNy41LjUwLjIwMTMwMjE1Lm9yaWcvZ2RiL2JyZWFrcG9pbnQuaAkyMDEzLTAyLTE1IDIyOjM3 OjE5LjAwMDAwMDAwMCArMDEwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL2JyZWFrcG9p bnQuaAkyMDEzLTAyLTE1IDIyOjM3OjQ3LjE4NTQzMjI5NiArMDEwMAotQEAgLTE1NTIsOCArMTU1 Miw2IEBAIGV4dGVybiBpbnQgdXNlcl9icmVha3BvaW50X3AgKHN0cnVjdCBicmUKLSAvKiBBdHRl bXB0IHRvIGRldGVybWluZSBhcmNoaXRlY3R1cmUgb2YgbG9jYXRpb24gaWRlbnRpZmllZCBieSBT QUwuICAqLwotIGV4dGVybiBzdHJ1Y3QgZ2RiYXJjaCAqZ2V0X3NhbF9hcmNoIChzdHJ1Y3Qgc3lt dGFiX2FuZF9saW5lIHNhbCk7Ci0gCi0tZXh0ZXJuIHZvaWQgaGFuZGxlX3NvbGliX2V2ZW50ICh2 b2lkKTsKLS0KLSBleHRlcm4gdm9pZCBicmVha3BvaW50X2ZyZWVfb2JqZmlsZSAoc3RydWN0IG9i amZpbGUgKm9iamZpbGUpOwotIAotIGV4dGVybiB2b2lkIGJyZWFrcG9pbnRzX3JlbG9jYXRlIChz dHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9i cmVha3BvaW50LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnZGItNy41LjUwLjIwMTMwMjE1Lm9yaWcvZ2Ri L2JyZWFrcG9pbnQuYwkyMDEzLTAyLTE1IDIyOjM3OjMwLjAwMDAwMDAwMCArMDEwMAotKysrIGdk Yi03LjUuNTAuMjAxMzAyMTUvZ2RiL2JyZWFrcG9pbnQuYwkyMDEzLTAyLTE1IDIyOjM3OjM1Ljc1 NTQxNzU4NCArMDEwMAotQEAgLTUyNTAsNyArNTI1MCw3IEBAIGJwc3RhdF9zdG9wX3N0YXR1cyAo c3RydWN0IGFkZHJlc3Nfc3BhY2UKLSAgICAgewotICAgICAgIGlmIChicy0+YnJlYWtwb2ludF9h dCAmJiBicy0+YnJlYWtwb2ludF9hdC0+dHlwZSA9PSBicF9zaGxpYl9ldmVudCkKLSAJewotLQkg IGhhbmRsZV9zb2xpYl9ldmVudCAoKTsKLSsJICBoYW5kbGVfc29saWJfZXZlbnQgKGJzKTsKLSAJ ICBicmVhazsKLSAJfQotICAgICB9Ci1AQCAtNTM0NiwyNSArNTM0Niw2IEBAIGhhbmRsZV9qaXRf ZXZlbnQgKHZvaWQpCi0gICB0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7Ci0gfQotIAotLS8q IEhhbmRsZSBhbiBzb2xpYiBldmVudCBieSBjYWxsaW5nIHNvbGliX2FkZC4gICovCi0tCi0tdm9p ZAotLWhhbmRsZV9zb2xpYl9ldmVudCAodm9pZCkKLS17Ci0tICBjbGVhcl9wcm9ncmFtX3NwYWNl X3NvbGliX2NhY2hlIChjdXJyZW50X2luZmVyaW9yICgpLT5wc3BhY2UpOwotLQotLSAgLyogQ2hl Y2sgZm9yIGFueSBuZXdseSBhZGRlZCBzaGFyZWQgbGlicmFyaWVzIGlmIHdlJ3JlIHN1cHBvc2Vk IHRvCi0tICAgICBiZSBhZGRpbmcgdGhlbSBhdXRvbWF0aWNhbGx5LiAgU3dpdGNoIHRlcm1pbmFs IGZvciBhbnkgbWVzc2FnZXMKLS0gICAgIHByb2R1Y2VkIGJ5IGJyZWFrcG9pbnRfcmVfc2V0LiAg Ki8KLS0gIHRhcmdldF90ZXJtaW5hbF9vdXJzX2Zvcl9vdXRwdXQgKCk7Ci0tI2lmZGVmIFNPTElC X0FERAotLSAgU09MSUJfQUREIChOVUxMLCAwLCAmY3VycmVudF90YXJnZXQsIGF1dG9fc29saWJf YWRkKTsKLS0jZWxzZQotLSAgc29saWJfYWRkIChOVUxMLCAwLCAmY3VycmVudF90YXJnZXQsIGF1 dG9fc29saWJfYWRkKTsKLS0jZW5kaWYKLS0gIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsK LS19Ci0tCi0gLyogUHJlcGFyZSBXSEFUIGZpbmFsIGRlY2lzaW9uIGZvciBpbmZydW4uICAqLwot IAotIC8qIERlY2lkZSB3aGF0IGluZnJ1biBuZWVkcyB0byBkbyB3aXRoIHRoaXMgYnBzdGF0LiAg Ki8KLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9zb2xpYi5oCi09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LS0gZ2RiLTcuNS41MC4yMDEzMDIxNS5vcmlnL2dkYi9zb2xpYi5oCTIwMTMtMDEtMDEgMDc6MzI6 NTEuMDAwMDAwMDAwICswMTAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvc29saWIuaAky MDEzLTAyLTE1IDIyOjM3OjM1Ljc1NzQxNzU4OCArMDEwMAotQEAgLTIwLDYgKzIwLDkgQEAKLSAj aWZuZGVmIFNPTElCX0gKLSAjZGVmaW5lIFNPTElCX0gKLSAKLSsvKiBGb3IgYnBzdGF0LiAgKi8K LSsjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgotKwotIC8qIEZvcndhcmQgZGVjbCdzIGZvciBwcm90 b3R5cGVzICovCi0gc3RydWN0IHNvX2xpc3Q7Ci0gc3RydWN0IHRhcmdldF9vcHM7Ci1AQCAtOTAs NCArOTMsMTUgQEAgZXh0ZXJuIENPUkVfQUREUiBnZGJfYmZkX2xvb2t1cF9zeW1ib2xfZgotIAkJ CQkJCQkJICAgICAgdm9pZCAqKSwKLSAJCQkJCQkgICAgdm9pZCAqZGF0YSk7Ci0gCi0rLyogSGFu ZGxlIGFuIHNvbGliIGV2ZW50IGJ5IGNhbGxpbmcgc29saWJfYWRkLiAgVGFyZ2V0cyB3aGljaCBo YW5kbGUKLSsgICBzb2xpYiBldmVudHMgdXNpbmcgYnJlYWtwb2ludHMgbXVzdCBwYXNzIGEgdmFs aWQgYnBzdGF0LiAgVGFyZ2V0cwotKyAgIHdoaWNoIGhhbmRsZSBzb2xpYiBldmVudHMgdXNpbmcg c29tZSBvdGhlciBtZWNoYW5pc20gc2hvdWxkIHBhc3MKLSsgICBOVUxMLiAgKi8KLSsKLStleHRl cm4gdm9pZCBoYW5kbGVfc29saWJfZXZlbnQgKGJwc3RhdCBicyk7Ci0rCi0rLyogRW5hYmxlIG9y IGRpc2FibGUgb3B0aW9uYWwgc29saWIgZXZlbnQgYnJlYWtwb2ludHMgYXMgYXBwcm9wcmlhdGUu ICAqLwotKwotK2V4dGVybiB2b2lkIHVwZGF0ZV9zb2xpYl9icmVha3BvaW50cyAodm9pZCk7Ci0r Ci0gI2VuZGlmIC8qIFNPTElCX0ggKi8KLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9z b2xpYi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2RiLTcuNS41MC4yMDEzMDIxNS5vcmlnL2dkYi9zb2xp Yi5jCTIwMTMtMDItMTUgMjI6Mzc6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgZ2RiLTcuNS41MC4y MDEzMDIxNS9nZGIvc29saWIuYwkyMDEzLTAyLTE1IDIyOjM3OjM1Ljc1NzQxNzU4OCArMDEwMAot QEAgLTEyMjEsNiArMTIyMSw0MiBAQCBub19zaGFyZWRfbGlicmFyaWVzIChjaGFyICppZ25vcmVk LCBpbnQKLSAgIG9iamZpbGVfcHVyZ2Vfc29saWJzICgpOwotIH0KLSAKLSsvKiBTZWUgc29saWIu aC4gICovCi0rCi0rdm9pZAotK2hhbmRsZV9zb2xpYl9ldmVudCAoYnBzdGF0IGJzKQotK3sKLSsg IHN0cnVjdCB0YXJnZXRfc29fb3BzICpvcHMgPSBzb2xpYl9vcHMgKHRhcmdldF9nZGJhcmNoICgp KTsKLSsKLSsgIGlmIChvcHMtPmhhbmRsZV9zb2xpYl9ldmVudCAhPSBOVUxMKQotKyAgICBvcHMt PmhhbmRsZV9zb2xpYl9ldmVudCAoYnMpOwotKwotKyAgY2xlYXJfcHJvZ3JhbV9zcGFjZV9zb2xp Yl9jYWNoZSAoY3VycmVudF9pbmZlcmlvciAoKS0+cHNwYWNlKTsKLSsKLSsgIC8qIENoZWNrIGZv ciBhbnkgbmV3bHkgYWRkZWQgc2hhcmVkIGxpYnJhcmllcyBpZiB3ZSdyZSBzdXBwb3NlZCB0bwot KyAgICAgYmUgYWRkaW5nIHRoZW0gYXV0b21hdGljYWxseS4gIFN3aXRjaCB0ZXJtaW5hbCBmb3Ig YW55IG1lc3NhZ2VzCi0rICAgICBwcm9kdWNlZCBieSBicmVha3BvaW50X3JlX3NldC4gICovCi0r ICB0YXJnZXRfdGVybWluYWxfb3Vyc19mb3Jfb3V0cHV0ICgpOwotKyNpZmRlZiBTT0xJQl9BREQK LSsgIFNPTElCX0FERCAoTlVMTCwgMCwgJmN1cnJlbnRfdGFyZ2V0LCBhdXRvX3NvbGliX2FkZCk7 Ci0rI2Vsc2UKLSsgIHNvbGliX2FkZCAoTlVMTCwgMCwgJmN1cnJlbnRfdGFyZ2V0LCBhdXRvX3Nv bGliX2FkZCk7Ci0rI2VuZGlmCi0rICB0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7Ci0rfQot KwotKy8qIFNlZSBzb2xpYi5oLiAgKi8KLSsKLSt2b2lkCi0rdXBkYXRlX3NvbGliX2JyZWFrcG9p bnRzICh2b2lkKQotK3sKLSsgIHN0cnVjdCB0YXJnZXRfc29fb3BzICpvcHMgPSBzb2xpYl9vcHMg KHRhcmdldF9nZGJhcmNoICgpKTsKLSsKLSsgIGlmIChvcHMtPnVwZGF0ZV9icmVha3BvaW50cyAh PSBOVUxMKQotKyAgICBvcHMtPnVwZGF0ZV9icmVha3BvaW50cyAoKTsKLSt9Ci0rCi0rCi0gLyog UmVsb2FkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBhdm9pZCByZWxvYWRpbmcgdGhlIHNhbWUgc3lt Ym9sIGZpbGUKLSAgICB3ZSBhbHJlYWR5IGhhdmUgbG9hZGVkLiAgKi8KLSAKLUluZGV4OiBnZGIt Ny41LjUwLjIwMTMwMjE1L2dkYi9zb2xpc3QuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdkYi03LjUuNTAu MjAxMzAyMTUub3JpZy9nZGIvc29saXN0LmgJMjAxMy0wMS0wMSAwNzozMjo1MS4wMDAwMDAwMDAg KzAxMDAKLSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9zb2xpc3QuaAkyMDEzLTAyLTE1IDIy OjM3OjM1Ljc1ODQxNzU5MCArMDEwMAotQEAgLTIyLDYgKzIyLDggQEAKLSAjZGVmaW5lIFNPX05B TUVfTUFYX1BBVEhfU0laRSA1MTIJLyogRklYTUU6IFNob3VsZCBiZSBkeW5hbWljICovCi0gLyog Rm9yIGRvbWFpbl9lbnVtIGRvbWFpbi4gICovCi0gI2luY2x1ZGUgInN5bXRhYi5oIgotKy8qIEZv ciBicHN0YXQuICAqLwotKyNpbmNsdWRlICJicmVha3BvaW50LmgiCi0gCi0gLyogRm9yd2FyZCBk ZWNsYXJhdGlvbiBmb3IgdGFyZ2V0IHNwZWNpZmljIGxpbmsgbWFwIGluZm9ybWF0aW9uLiAgVGhp cwotICAgIHN0cnVjdCBpcyBvcGFxdWUgdG8gYWxsIGJ1dCB0aGUgdGFyZ2V0IHNwZWNpZmljIGZp bGUuICAqLwotQEAgLTE0OCw2ICsxNTAsMjAgQEAgc3RydWN0IHRhcmdldF9zb19vcHMKLSAgICAg ICAgY29yZSBmaWxlIChpbiBwYXJ0aWN1bGFyLCBmb3IgcmVhZG9ubHkgc2VjdGlvbnMpLiAgKi8K LSAgICAgaW50ICgqa2VlcF9kYXRhX2luX2NvcmUpIChDT1JFX0FERFIgdmFkZHIsCi0gCQkJICAg ICAgdW5zaWduZWQgbG9uZyBzaXplKTsKLSsKLSsgICAgLyogVGFyZ2V0LXNwZWNpZmljIGhhbmRs aW5nIG9mIHNvbGliIGV2ZW50cy4gIEZvciB0YXJnZXRzIHdoaWNoCi0rICAgICAgIGhhbmRsZSBz b2xpYiBldmVudHMgdXNpbmcgYnJlYWtwb2ludHMgYSB2YWxpZCBicHN0YXQgbXVzdCBiZQotKyAg ICAgICBwYXNzZWQuICBUYXJnZXRzIHdoaWNoIGhhbmRsZSBzb2xpYiBldmVudHMgdXNpbmcgc29t ZSBvdGhlcgotKyAgICAgICBtZWNoYW5pc20gc2hvdWxkIHBhc3MgTlVMTC4gIFRoaXMgcG9pbnRl ciBjYW4gYmUgTlVMTCwgaW4gd2hpY2gKLSsgICAgICAgY2FzZSBubyBzcGVjaWZpYyBoYW5kbGlu ZyBpcyBuZWNlc3NhcnkgZm9yIHRoaXMgdGFyZ2V0LiAgKi8KLSsgICAgdm9pZCAoKmhhbmRsZV9z b2xpYl9ldmVudCkgKGJwc3RhdCBicyk7Ci0rCi0rICAgIC8qIEVuYWJsZSBvciBkaXNhYmxlIG9w dGlvbmFsIHNvbGliIGV2ZW50IGJyZWFrcG9pbnRzIGFzCi0rICAgICAgIGFwcHJvcHJpYXRlLiAg VGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyCi0rICAgICAgIHN0b3Bfb25fc29saWJfZXZl bnRzIGlzIGNoYW5nZWQuICBUaGlzIHBvaW50ZXIgY2FuIGJlCi0rICAgICAgIE5VTEwsIGluIHdo aWNoIGNhc2Ugbm8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGlzIG5lY2Vzc2FyeQotKyAgICAgICBm b3IgdGhpcyB0YXJnZXQuICAqLwotKyAgICB2b2lkICgqdXBkYXRlX2JyZWFrcG9pbnRzKSAodm9p ZCk7Ci0gICB9OwotIAotIC8qIEZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSAoc29f bGlzdCAqKS4gICovCi1JbmRleDogZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvaW5mcnVuLmMKLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tLSBnZGItNy41LjUwLjIwMTMwMjE1Lm9yaWcvZ2RiL2luZnJ1bi5jCTIwMTMt MDItMTUgMjI6Mzc6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDIxNS9n ZGIvaW5mcnVuLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjA0MTc1OTQgKzAxMDAKLUBAIC0zNjks NiArMzY5LDE2IEBAIHN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzdGVwX3N0YXJ0X2Z1bmN0aW8KLSAv KiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gZ2l2ZSBjb250cm9sIHRvIHRoZSB1c2VyIHdoZW4gd2Un cmUgbm90aWZpZWQKLSAgICBvZiBzaGFyZWQgbGlicmFyeSBldmVudHMgYnkgdGhlIGR5bmFtaWMg bGlua2VyLiAgKi8KLSBpbnQgc3RvcF9vbl9zb2xpYl9ldmVudHM7Ci0rCi0rLyogRW5hYmxlIG9y IGRpc2FibGUgb3B0aW9uYWwgc2hhcmVkIGxpYnJhcnkgZXZlbnQgYnJlYWtwb2ludHMKLSsgICBh cyBhcHByb3ByaWF0ZSB3aGVuIHRoZSBhYm92ZSBmbGFnIGlzIGNoYW5nZWQuICAqLwotKwotK3N0 YXRpYyB2b2lkCi0rc2V0X3N0b3Bfb25fc29saWJfZXZlbnRzIChjaGFyICphcmdzLCBpbnQgZnJv bV90dHksIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjKQotK3sKLSsgIHVwZGF0ZV9zb2xpYl9i cmVha3BvaW50cyAoKTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBzaG93X3N0b3Bfb25fc29saWJf ZXZlbnRzIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAotIAkJCSAgIHN0cnVj dCBjbWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2YWx1ZSkKLUBAIC0zMzQ2LDcgKzMz NTYsNyBAQCBoYW5kbGVfaW5mZXJpb3JfZXZlbnQgKHN0cnVjdCBleGVjdXRpb25fCi0gCSAgICBj b250ZXh0X3N3aXRjaCAoZWNzLT5wdGlkKTsKLSAJICByZWdjYWNoZSA9IGdldF90aHJlYWRfcmVn Y2FjaGUgKGVjcy0+cHRpZCk7Ci0gCi0tCSAgaGFuZGxlX3NvbGliX2V2ZW50ICgpOwotKwkgIGhh bmRsZV9zb2xpYl9ldmVudCAoTlVMTCk7Ci0gCi0gCSAgZWNzLT5ldmVudF90aHJlYWQtPmNvbnRy b2wuc3RvcF9icHN0YXQKLSAJICAgID0gYnBzdGF0X3N0b3Bfc3RhdHVzIChnZXRfcmVnY2FjaGVf YXNwYWNlIChyZWdjYWNoZSksCi1AQCAtNzMzNCw3ICs3MzQ0LDcgQEAgU2hvdyBzdG9wcGluZyBm b3Igc2hhcmVkIGxpYnJhcnkgZXZlbnRzLgotIElmIG5vbnplcm8sIGdkYiB3aWxsIGdpdmUgY29u dHJvbCB0byB0aGUgdXNlciB3aGVuIHRoZSBkeW5hbWljIGxpbmtlclxuXAotIG5vdGlmaWVzIGdk YiBvZiBzaGFyZWQgbGlicmFyeSBldmVudHMuICBUaGUgbW9zdCBjb21tb24gZXZlbnQgb2YgaW50 ZXJlc3RcblwKLSB0byB0aGUgdXNlciB3b3VsZCBiZSBsb2FkaW5nL3VubG9hZGluZyBvZiBhIG5l dyBsaWJyYXJ5LiIpLAotLQkJCSAgICBOVUxMLAotKwkJCSAgICBzZXRfc3RvcF9vbl9zb2xpYl9l dmVudHMsCi0gCQkJICAgIHNob3dfc3RvcF9vbl9zb2xpYl9ldmVudHMsCi0gCQkJICAgICZzZXRs aXN0LCAmc2hvd2xpc3QpOwotIAotSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3NvbGli LXN2cjQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0tIGdkYi03LjUuNTAuMjAxMzAyMTUub3JpZy9nZGIvc29s aWItc3ZyNC5jCTIwMTMtMDItMTUgMjI6Mzc6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgZ2RiLTcu NS41MC4yMDEzMDIxNS9nZGIvc29saWItc3ZyNC5jCTIwMTMtMDItMTUgMjI6Mzc6MzUuNzYxNDE3 NTk2ICswMTAwCi1AQCAtNDYsMTAgKzQ2LDEyIEBACi0gI2luY2x1ZGUgImF1eHYuaCIKLSAjaW5j bHVkZSAiZXhjZXB0aW9ucy5oIgotICNpbmNsdWRlICJnZGJfYmZkLmgiCi0rI2luY2x1ZGUgInBy b2JlLmgiCi0gCi0gc3RhdGljIHN0cnVjdCBsaW5rX21hcF9vZmZzZXRzICpzdnI0X2ZldGNoX2xp bmtfbWFwX29mZnNldHMgKHZvaWQpOwotIHN0YXRpYyBpbnQgc3ZyNF9oYXZlX2xpbmtfbWFwX29m ZnNldHMgKHZvaWQpOwotIHN0YXRpYyB2b2lkIHN2cjRfcmVsb2NhdGVfbWFpbl9leGVjdXRhYmxl ICh2b2lkKTsKLStzdGF0aWMgc3RydWN0IHNvX2xpc3QgKm5hbWVzcGFjZV90YWJsZV9mbGF0dGVu IChodGFiX3QgbmFtZXNwYWNlX3RhYmxlKTsKLSAKLSAvKiBMaW5rIG1hcCBpbmZvIHRvIGluY2x1 ZGUgaW4gYW4gYWxsb2NhdGVkIHNvX2xpc3QgZW50cnkuICAqLwotIAotQEAgLTcwLDYgKzcyLDE2 IEBAIHN0cnVjdCBsbV9pbmZvCi0gCi0gICAgIC8qIFZhbHVlcyByZWFkIGluIGZyb20gaW5mZXJp b3IncyBmaWVsZHMgb2YgdGhlIHNhbWUgbmFtZS4gICovCi0gICAgIENPUkVfQUREUiBsX2xkLCBs X25leHQsIGxfcHJldiwgbF9uYW1lOwotKwotKyAgICAvKiBOdW1lcmljIGxpbmstbWFwIElEIG9m IHRoZSBuYW1lc3BhY2UgdGhpcyBvYmplY3QgaXMgbG9hZGVkCi0rICAgICAgIGludG8uICBUaGlz IHZhbHVlIGlzIG9ubHkgdmFsaWQgd2hlbiB1c2luZyB0aGUgcHJvYmVzLWJhc2VkCi0rICAgICAg IGludGVyZmFjZS4gICovCi0rICAgIExPTkdFU1QgbG1pZDsKLSsKLSsgICAgLyogTm9uemVybyBp ZiB0aGUgbmFtZXNwYWNlIGxpc3QgdGhpcyBvYmplY3QgaXMgbG9hZGVkIGludG8gaXMgdGhlCi0r ICAgICAgIGFwcGxpY2F0aW9uJ3MgaW5pdGlhbCBuYW1lc3BhY2UgKExNX0lEX0JBU0UpLiAgVGhp cyB2YWx1ZSBpcwotKyAgICAgICBvbmx5IHZhbGlkIHdoZW4gdXNpbmcgdGhlIHByb2Jlcy1iYXNl ZCBpbnRlcmZhY2UuICAqLwotKyAgICB1bnNpZ25lZCBpbnQgaW5faW5pdGlhbF9ucyA6IDE7Ci0g ICB9OwotIAotIC8qIE9uIFNWUjQgc3lzdGVtcywgYSBsaXN0IG9mIHN5bWJvbHMgaW4gdGhlIGR5 bmFtaWMgbGlua2VyIHdoZXJlCi1AQCAtMTA2LDYgKzExOCw1MyBAQCBzdGF0aWMgY29uc3QgIGNo YXIgKiBjb25zdCBtYWluX25hbWVfbGlzCi0gICBOVUxMCi0gfTsKLSAKLSsvKiBXaGF0IHRvIGRv IHdpdGggdGhlIG5hbWVzcGFjZSB0YWJsZSB3aGVuIGEgcHJvYmUgc3RvcCBvY2N1cnMuICAqLwot KwotK2VudW0gcHJvYmVfYWN0aW9uCi0rICB7Ci0rICAgIC8qIFNvbWV0aGluZyB3ZW50IHNlcmlv dXNseSB3cm9uZy4gIFN0b3AgdXNpbmcgcHJvYmVzIGFuZAotKyAgICAgICByZXZlcnQgdG8gdXNp bmcgdGhlIG9sZGVyIGludGVyZmFjZS4gICovCi0rICAgIE5BTUVTUEFDRV9UQUJMRV9JTlZBTElE QVRFLAotKwotKyAgICAvKiBObyBhY3Rpb24gaXMgcmVxdWlyZWQuICBUaGlzIG5hbWVzcGFjZSBp cyBzdGlsbCB2YWxpZC4gICovCi0rICAgIE5BTUVTUEFDRV9OT19BQ1RJT04sCi0rCi0rICAgIC8q IFRoaXMgbmFtZXNwYWNlIHNob3VsZCBiZSByZWxvYWRlZCBlbnRpcmVseS4gICovCi0rICAgIE5B TUVTUEFDRV9SRUxPQUQsCi0rCi0rICAgIC8qIEF0dGVtcHQgdG8gaW5jcmVtZW50YWxseSB1cGRh dGUgdGhpcyBuYW1lc3BhY2UuIElmIHRoZQotKyAgICAgICB1cGRhdGUgZmFpbHMgb3IgaXMgbm90 IHBvc3NpYmxlLCBmYWxsIGJhY2sgdG8gcmVsb2FkaW5nCi0rICAgICAgIHRoZSBuYW1lc3BhY2Ug aW4gZnVsbC4gICovCi0rICAgIE5BTUVTUEFDRV9VUERBVEVfT1JfUkVMT0FELAotKyAgfTsKLSsK LSsvKiBBIHByb2JlJ3MgbmFtZSBhbmQgaXRzIGFzc29jaWF0ZWQgYWN0aW9uLiAgKi8KLSsKLStz dHJ1Y3QgcHJvYmVfaW5mbwotK3sKLSsgIC8qIFRoZSBuYW1lIG9mIHRoZSBwcm9iZS4gICovCi0r ICBjb25zdCBjaGFyICpuYW1lOwotKwotKyAgLyogV2hhdCB0byBkbyB3aXRoIHRoZSBuYW1lc3Bh Y2UgdGFibGUgd2hlbiBhIHByb2JlIHN0b3Agb2NjdXJzLiAgKi8KLSsgIGVudW0gcHJvYmVfYWN0 aW9uIGFjdGlvbjsKLSt9OwotKwotKy8qIEEgbGlzdCBvZiBuYW1lZCBwcm9iZXMgYW5kIHRoZWly IGFzc29jaWF0ZWQgYWN0aW9ucy4gIElmIGFsbAotKyAgIHByb2JlcyBhcmUgcHJlc2VudCBpbiB0 aGUgZHluYW1pYyBsaW5rZXIgdGhlbiB0aGUgcHJvYmVzLWJhc2VkCi0rICAgaW50ZXJmYWNlIHdp bGwgYmUgdXNlZC4gICovCi0rCi0rc3RhdGljIGNvbnN0IHN0cnVjdCBwcm9iZV9pbmZvIHByb2Jl X2luZm9bXSA9Ci0rewotKyAgeyAiaW5pdF9zdGFydCIsIE5BTUVTUEFDRV9OT19BQ1RJT04gfSwK LSsgIHsgImluaXRfY29tcGxldGUiLCBOQU1FU1BBQ0VfUkVMT0FEIH0sCi0rICB7ICJtYXBfc3Rh cnQiLCBOQU1FU1BBQ0VfTk9fQUNUSU9OIH0sCi0rICB7ICJyZWxvY19jb21wbGV0ZSIsIE5BTUVT UEFDRV9VUERBVEVfT1JfUkVMT0FEIH0sCi0rICB7ICJ1bm1hcF9zdGFydCIsIE5BTUVTUEFDRV9O T19BQ1RJT04gfSwKLSsgIHsgInVubWFwX2NvbXBsZXRlIiwgTkFNRVNQQUNFX1JFTE9BRCB9LAot K307Ci0rCi0rI2RlZmluZSBOVU1fUFJPQkVTIEFSUkFZX1NJWkUgKHByb2JlX2luZm8pCi0rCi0g LyogUGVyIHBzcGFjZSBTVlI0IHNwZWNpZmljIGRhdGEuICAqLwotIAotIHN0cnVjdCBzdnI0X2lu Zm8KLUBAIC0xMjgsMTcgKzE4Nyw1OCBAQCBzdHJ1Y3Qgc3ZyNF9pbmZvCi0gICBDT1JFX0FERFIg aW50ZXJwX3RleHRfc2VjdF9oaWdoOwotICAgQ09SRV9BRERSIGludGVycF9wbHRfc2VjdF9sb3c7 Ci0gICBDT1JFX0FERFIgaW50ZXJwX3BsdF9zZWN0X2hpZ2g7Ci0rCi0rICAvKiBOb256ZXJvIGlm IHdlIGFyZSB1c2luZyB0aGUgcHJvYmVzLWJhc2VkIGludGVyZmFjZS4gICovCi0rICB1bnNpZ25l ZCBpbnQgdXNpbmdfcHJvYmVzIDogMTsKLSsKLSsgIC8qIE5hbWVkIHByb2JlcyBpbiB0aGUgZHlu YW1pYyBsaW5rZXIuICAqLwotKyAgVkVDIChwcm9iZV9wKSAqcHJvYmVzW05VTV9QUk9CRVNdOwot KwotKyAgLyogVGFibGUgb2YgZHluYW1pYyBsaW5rZXIgbmFtZXNwYWNlcywgdXNlZCBieSB0aGUg cHJvYmVzLWJhc2VkCi0rICAgICBpbnRlcmZhY2UuICAqLwotKyAgaHRhYl90IG5hbWVzcGFjZV90 YWJsZTsKLSB9OwotIAotIC8qIFBlci1wcm9ncmFtLXNwYWNlIGRhdGEga2V5LiAgKi8KLSBzdGF0 aWMgY29uc3Qgc3RydWN0IHByb2dyYW1fc3BhY2VfZGF0YSAqc29saWJfc3ZyNF9wc3BhY2VfZGF0 YTsKLSAKLSsvKiBGcmVlIGFueSBhbGxvY2F0ZWQgcHJvYmUgdmVjdG9ycy4gICovCi0rCi0rc3Rh dGljIHZvaWQKLStmcmVlX3Byb2JlcyAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykKLSt7Ci0rICBp bnQgaTsKLSsKLSsgIGZvciAoaSA9IDA7IGkgPCBOVU1fUFJPQkVTOyBpKyspCi0rICAgIFZFQ19m cmVlIChwcm9iZV9wLCBpbmZvLT5wcm9iZXNbaV0pOwotKwotKyAgbWVtc2V0IChpbmZvLT5wcm9i ZXMsIDAsIHNpemVvZiAoaW5mby0+cHJvYmVzKSk7Ci0rfQotKwotKy8qIEZyZWUgdGhlIG5hbWVz cGFjZSB0YWJsZS4gICovCi0rCi0rc3RhdGljIHZvaWQKLStmcmVlX25hbWVzcGFjZV90YWJsZSAo c3RydWN0IHN2cjRfaW5mbyAqaW5mbykKLSt7Ci0rICBpZiAoaW5mby0+bmFtZXNwYWNlX3RhYmxl ID09IE5VTEwpCi0rICAgIHJldHVybjsKLSsKLSsgIGh0YWJfZGVsZXRlIChpbmZvLT5uYW1lc3Bh Y2VfdGFibGUpOwotKyAgaW5mby0+bmFtZXNwYWNlX3RhYmxlID0gTlVMTDsKLSt9Ci0rCi0gc3Rh dGljIHZvaWQKLSBzdnI0X3BzcGFjZV9kYXRhX2NsZWFudXAgKHN0cnVjdCBwcm9ncmFtX3NwYWNl ICpwc3BhY2UsIHZvaWQgKmFyZykKLSB7Ci0gICBzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvOwotIAot ICAgaW5mbyA9IHByb2dyYW1fc3BhY2VfZGF0YSAocHNwYWNlLCBzb2xpYl9zdnI0X3BzcGFjZV9k YXRhKTsKLSsgIGlmIChpbmZvID09IE5VTEwpCi0rICAgIHJldHVybjsKLSsKLSsgIGZyZWVfcHJv YmVzIChpbmZvKTsKLSsgIGZyZWVfbmFtZXNwYWNlX3RhYmxlIChpbmZvKTsKLSsKLSAgIHhmcmVl IChpbmZvKTsKLSB9Ci0gCi1AQCAtMTg3LDEwICsyODcsMjEgQEAgc3ZyNF9zYW1lXzEgKGNvbnN0 IGNoYXIgKmdkYl9zb19uYW1lLCBjbwotICAgcmV0dXJuIDA7Ci0gfQotIAotKy8qIFJldHVybiBu b24temVybyBpZiBHREIgYW5kIElORkVSSU9SIHJlcHJlc2VudCB0aGUgc2FtZSBzaGFyZWQKLSsg ICBsaWJyYXJ5LiAgKi8KLSsKLSBzdGF0aWMgaW50Ci0gc3ZyNF9zYW1lIChzdHJ1Y3Qgc29fbGlz dCAqZ2RiLCBzdHJ1Y3Qgc29fbGlzdCAqaW5mZXJpb3IpCi0gewotLSAgcmV0dXJuIChzdnI0X3Nh bWVfMSAoZ2RiLT5zb19vcmlnaW5hbF9uYW1lLCBpbmZlcmlvci0+c29fb3JpZ2luYWxfbmFtZSkp OwotKyAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7Ci0rCi0rICBp ZiAoaW5mby0+dXNpbmdfcHJvYmVzKQotKyAgICB7Ci0rICAgICAgaWYgKGdkYi0+bG1faW5mby0+ bG1pZCAhPSBpbmZlcmlvci0+bG1faW5mby0+bG1pZCkKLSsJcmV0dXJuIDA7Ci0rICAgIH0KLSsK LSsgIHJldHVybiBzdnI0X3NhbWVfMSAoZ2RiLT5zb19vcmlnaW5hbF9uYW1lLCBpbmZlcmlvci0+ c29fb3JpZ2luYWxfbmFtZSk7Ci0gfQotIAotIHN0YXRpYyBzdHJ1Y3QgbG1faW5mbyAqCi1AQCAt MzIxLDE4ICs0MzIsMjYgQEAgbG1fYWRkcl9jaGVjayAoc3RydWN0IHNvX2xpc3QgKnNvLCBiZmQg KgotIAkgICAgfQotIAkgIGVsc2UKLSAJICAgIHsKLS0JICAgICAgLyogVGhlcmUgaXMgbm8gd2F5 IHRvIHZlcmlmeSB0aGUgbGlicmFyeSBmaWxlIG1hdGNoZXMuICBwcmVsaW5rCi0tCQkgY2FuIGR1 cmluZyBwcmVsaW5raW5nIG9mIGFuIHVucHJlbGlua2VkIGZpbGUgKG9yIHVucHJlbGlua2luZwot LQkJIG9mIGEgcHJlbGlua2VkIGZpbGUpIHNoaWZ0IHRoZSBEWU5BTUlDIHNlZ21lbnQgYnkgYXJi aXRyYXJ5Ci0tCQkgb2Zmc2V0IHdpdGhvdXQgYW55IHBhZ2Ugc2l6ZSBhbGlnbm1lbnQuICBUaGVy ZSBpcyBubyB3YXkgdG8KLS0JCSBmaW5kIG91dCB0aGUgRUxGIGhlYWRlciBhbmQvb3IgUHJvZ3Jh bSBIZWFkZXJzIGZvciBhIGxpbWl0ZWQKLS0JCSB2ZXJpZmljYXRpb24gaWYgaXQgdGhleSBtYXRj aC4gIE9uZSBjb3VsZCBkbyBhIHZlcmlmaWNhdGlvbgotLQkJIG9mIHRoZSBEWU5BTUlDIHNlZ21l bnQuICBTdGlsbCB0aGUgZm91bmQgYWRkcmVzcyBpcyB0aGUgYmVzdAotLQkJIG9uZSBHREIgY291 bGQgZmluZC4gICovCi0tCi0tCSAgICAgIHdhcm5pbmcgKF8oIi5keW5hbWljIHNlY3Rpb24gZm9y IFwiJXNcIiAiCi0tCQkJICJpcyBub3QgYXQgdGhlIGV4cGVjdGVkIGFkZHJlc3MgIgotLQkJCSAi KHdyb25nIGxpYnJhcnkgb3IgdmVyc2lvbiBtaXNtYXRjaD8pIiksIHNvLT5zb19uYW1lKTsKLSsJ ICAgICAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7Ci0rCi0rCSAg ICAgIGlmICghaW5mby0+dXNpbmdfcHJvYmVzIHx8IHNvLT5sbV9pbmZvLT5pbl9pbml0aWFsX25z KQotKwkJewotKwkJICAvKiBUaGVyZSBpcyBubyB3YXkgdG8gdmVyaWZ5IHRoZSBsaWJyYXJ5IGZp bGUKLSsJCSAgICAgbWF0Y2hlcy4gIHByZWxpbmsgY2FuIGR1cmluZyBwcmVsaW5raW5nIG9mIGFu Ci0rCQkgICAgIHVucHJlbGlua2VkIGZpbGUgKG9yIHVucHJlbGlua2luZyBvZiBhIHByZWxpbmtl ZAotKwkJICAgICBmaWxlKSBzaGlmdCB0aGUgRFlOQU1JQyBzZWdtZW50IGJ5IGFyYml0cmFyeQot KwkJICAgICBvZmZzZXQgd2l0aG91dCBhbnkgcGFnZSBzaXplIGFsaWdubWVudC4gIFRoZXJlIGlz Ci0rCQkgICAgIG5vIHdheSB0byBmaW5kIG91dCB0aGUgRUxGIGhlYWRlciBhbmQvb3IgUHJvZ3Jh bQotKwkJICAgICBIZWFkZXJzIGZvciBhIGxpbWl0ZWQgdmVyaWZpY2F0aW9uIGlmIGl0IHRoZXkK LSsJCSAgICAgbWF0Y2guICBPbmUgY291bGQgZG8gYSB2ZXJpZmljYXRpb24gb2YgdGhlCi0rCQkg ICAgIERZTkFNSUMgc2VnbWVudC4gIFN0aWxsIHRoZSBmb3VuZCBhZGRyZXNzIGlzIHRoZQotKwkJ ICAgICBiZXN0IG9uZSBHREIgY291bGQgZmluZC4gICovCi0rCi0rCQkgIHdhcm5pbmcgKF8oIi5k eW5hbWljIHNlY3Rpb24gZm9yIFwiJXNcIiAiCi0rCQkJICAgICAiaXMgbm90IGF0IHRoZSBleHBl Y3RlZCBhZGRyZXNzICIKLSsJCQkgICAgICIod3JvbmcgbGlicmFyeSBvciB2ZXJzaW9uIG1pc21h dGNoPykiKSwKLSsJCQkgICBzby0+c29fbmFtZSk7Ci0rCQl9Ci0gCSAgICB9Ci0gCX0KLSAKLUBA IC03NzQsMTYgKzg5MywxMCBAQCBsb2NhdGVfYmFzZSAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykK LSAgIHJldHVybiBpbmZvLT5kZWJ1Z19iYXNlOwotIH0KLSAKLS0vKiBGaW5kIHRoZSBmaXJzdCBl bGVtZW50IGluIHRoZSBpbmZlcmlvcidzIGR5bmFtaWMgbGluayBtYXAsIGFuZAotLSAgIHJldHVy biBpdHMgYWRkcmVzcyBpbiB0aGUgaW5mZXJpb3IuICBSZXR1cm4gemVybyBpZiB0aGUgYWRkcmVz cwotLSAgIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLgotLQotLSAgIEZJWE1FOiBQZXJoYXBzIHdl IHNob3VsZCB2YWxpZGF0ZSB0aGUgaW5mbyBzb21laG93LCBwZXJoYXBzIGJ5Ci0tICAgY2hlY2tp bmcgcl92ZXJzaW9uIGZvciBhIGtub3duIHZlcnNpb24gbnVtYmVyLCBvciByX3N0YXRlIGZvcgot LSAgIFJUX0NPTlNJU1RFTlQuICAqLwotKy8qIFJlYWQgdGhlIHJfbWFwIGZpZWxkIGZyb20gdGhl IHN1cHBsaWVkIHJfZGVidWcgc3RydWN0dXJlLiAgKi8KLSAKLSBzdGF0aWMgQ09SRV9BRERSCi0t c29saWJfc3ZyNF9yX21hcCAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykKLStyX21hcF9mcm9tX2Rl YnVnX2Jhc2UgKENPUkVfQUREUiBkZWJ1Z19iYXNlKQotIHsKLSAgIHN0cnVjdCBsaW5rX21hcF9v ZmZzZXRzICpsbW8gPSBzdnI0X2ZldGNoX2xpbmtfbWFwX29mZnNldHMgKCk7Ci0gICBzdHJ1Y3Qg dHlwZSAqcHRyX3R5cGUgPSBidWlsdGluX3R5cGUgKHRhcmdldF9nZGJhcmNoICgpKS0+YnVpbHRp bl9kYXRhX3B0cjsKLUBAIC03OTIsMTMgKzkwNSwyNyBAQCBzb2xpYl9zdnI0X3JfbWFwIChzdHJ1 Y3Qgc3ZyNF9pbmZvICppbmZvCi0gCi0gICBUUllfQ0FUQ0ggKGV4LCBSRVRVUk5fTUFTS19FUlJP UikKLSAgICAgewotLSAgICAgIGFkZHIgPSByZWFkX21lbW9yeV90eXBlZF9hZGRyZXNzIChpbmZv LT5kZWJ1Z19iYXNlICsgbG1vLT5yX21hcF9vZmZzZXQsCi0rICAgICAgYWRkciA9IHJlYWRfbWVt b3J5X3R5cGVkX2FkZHJlc3MgKGRlYnVnX2Jhc2UgKyBsbW8tPnJfbWFwX29mZnNldCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX3R5cGUpOwotICAgICB9Ci0g ICBleGNlcHRpb25fcHJpbnQgKGdkYl9zdGRlcnIsIGV4KTsKLSAgIHJldHVybiBhZGRyOwotIH0K LSAKLSsvKiBGaW5kIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBpbmZlcmlvcidzIGR5bmFtaWMg bGluayBtYXAsIGFuZAotKyAgIHJldHVybiBpdHMgYWRkcmVzcyBpbiB0aGUgaW5mZXJpb3IuICBS ZXR1cm4gemVybyBpZiB0aGUgYWRkcmVzcwotKyAgIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLgot KwotKyAgIEZJWE1FOiBQZXJoYXBzIHdlIHNob3VsZCB2YWxpZGF0ZSB0aGUgaW5mbyBzb21laG93 LCBwZXJoYXBzIGJ5Ci0rICAgY2hlY2tpbmcgcl92ZXJzaW9uIGZvciBhIGtub3duIHZlcnNpb24g bnVtYmVyLCBvciByX3N0YXRlIGZvcgotKyAgIFJUX0NPTlNJU1RFTlQuICAqLwotKwotK3N0YXRp YyBDT1JFX0FERFIKLStzb2xpYl9zdnI0X3JfbWFwIChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvKQot K3sKLSsgIHJldHVybiByX21hcF9mcm9tX2RlYnVnX2Jhc2UgKGluZm8tPmRlYnVnX2Jhc2UpOwot K30KLSsKLSAvKiBGaW5kIHJfYnJrIGZyb20gdGhlIGluZmVyaW9yJ3MgZGVidWcgYmFzZS4gICov Ci0gCi0gc3RhdGljIENPUkVfQUREUgotQEAgLTExNjEsMTUgKzEyODgsMTcgQEAgc3ZyNF9kZWZh dWx0X3NvcyAodm9pZCkKLSAgIHJldHVybiBuZXc7Ci0gfQotIAotLS8qIFJlYWQgdGhlIHdob2xl IGluZmVyaW9yIGxpYnJhcmllcyBjaGFpbiBzdGFydGluZyBhdCBhZGRyZXNzIExNLiAgQWRkIHRo ZQotLSAgIGVudHJpZXMgdG8gdGhlIHRhaWwgcmVmZXJlbmNlZCBieSBMSU5LX1BUUl9QVFIuICBJ Z25vcmUgdGhlIGZpcnN0IGVudHJ5IGlmCi0tICAgSUdOT1JFX0ZJUlNUIGFuZCBzZXQgZ2xvYmFs IE1BSU5fTE1fQUREUiBhY2NvcmRpbmcgdG8gaXQuICAqLwotKy8qIFJlYWQgdGhlIHdob2xlIGlu ZmVyaW9yIGxpYnJhcmllcyBjaGFpbiBzdGFydGluZyBhdCBhZGRyZXNzIExNLgotKyAgIEV4cGVj dCB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIGNoYWluJ3MgcHJldmlvdXMgZW50cnkgdG8gYmUgUFJF Vl9MTS4KLSsgICBBZGQgdGhlIGVudHJpZXMgdG8gdGhlIHRhaWwgcmVmZXJlbmNlZCBieSBMSU5L X1BUUl9QVFIuICBJZ25vcmUgdGhlCi0rICAgZmlyc3QgZW50cnkgaWYgSUdOT1JFX0ZJUlNUIGFu ZCBzZXQgZ2xvYmFsIE1BSU5fTE1fQUREUiBhY2NvcmRpbmcKLSsgICB0byBpdC4gIFJldHVybnMg bm9uemVybyB1cG9uIHN1Y2Nlc3MuICAqLwotIAotLXN0YXRpYyB2b2lkCi0tc3ZyNF9yZWFkX3Nv X2xpc3QgKENPUkVfQUREUiBsbSwgc3RydWN0IHNvX2xpc3QgKioqbGlua19wdHJfcHRyLAotLQkJ ICAgaW50IGlnbm9yZV9maXJzdCkKLStzdGF0aWMgaW50Ci0rc3ZyNF9yZWFkX3NvX2xpc3QgKENP UkVfQUREUiBsbSwgQ09SRV9BRERSIHByZXZfbG0sCi0rCQkgICBzdHJ1Y3Qgc29fbGlzdCAqKips aW5rX3B0cl9wdHIsIGludCBpZ25vcmVfZmlyc3QpCi0gewotLSAgQ09SRV9BRERSIHByZXZfbG0g PSAwLCBuZXh0X2xtOwotKyAgQ09SRV9BRERSIG5leHRfbG07Ci0gCi0gICBmb3IgKDsgbG0gIT0g MDsgcHJldl9sbSA9IGxtLCBsbSA9IG5leHRfbG0pCi0gICAgIHsKLUBAIC0xMTg1LDcgKzEzMTQs NyBAQCBzdnI0X3JlYWRfc29fbGlzdCAoQ09SRV9BRERSIGxtLCBzdHJ1Y3QKLSAgICAgICBpZiAo bmV3LT5sbV9pbmZvID09IE5VTEwpCi0gCXsKLSAJICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsK LS0JICBicmVhazsKLSsJICByZXR1cm4gMDsKLSAJfQotIAotICAgICAgIG5leHRfbG0gPSBuZXct PmxtX2luZm8tPmxfbmV4dDsKLUBAIC0xMTk2LDcgKzEzMjUsNyBAQCBzdnI0X3JlYWRfc29fbGlz dCAoQ09SRV9BRERSIGxtLCBzdHJ1Y3QKLSAJCSAgIHBhZGRyZXNzICh0YXJnZXRfZ2RiYXJjaCAo KSwgcHJldl9sbSksCi0gCQkgICBwYWRkcmVzcyAodGFyZ2V0X2dkYmFyY2ggKCksIG5ldy0+bG1f aW5mby0+bF9wcmV2KSk7Ci0gCSAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7Ci0tCSAgYnJlYWs7 Ci0rCSAgcmV0dXJuIDA7Ci0gCX0KLSAKLSAgICAgICAvKiBGb3IgU1ZSNCB2ZXJzaW9ucywgdGhl IGZpcnN0IGVudHJ5IGluIHRoZSBsaW5rIG1hcCBpcyBmb3IgdGhlCi1AQCAtMTI5MSwyMCArMTQy MCw2MSBAQCBzdnI0X3JlYWRfc29fbGlzdCAoQ09SRV9BRERSIGxtLCBzdHJ1Y3QKLSAgICAgICAq KmxpbmtfcHRyX3B0ciA9IG5ldzsKLSAgICAgICAqbGlua19wdHJfcHRyID0gJm5ldy0+bmV4dDsK LSAgICAgfQotKwotKyAgcmV0dXJuIDE7Ci0gfQotIAotLS8qIEltcGxlbWVudCB0aGUgImN1cnJl bnRfc29zIiB0YXJnZXRfc29fb3BzIG1ldGhvZC4gICovCi0rLyogUmVhZCB0aGUgbGlzdCBvZiBs b2FkZWQgbGlicmFyaWVzIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyJ3MgYmFzZQotKyAgIHN0cnVj dHVyZS4gICovCi0gCi0gc3RhdGljIHN0cnVjdCBzb19saXN0ICoKLS1zdnI0X2N1cnJlbnRfc29z ICh2b2lkKQotK3N2cjRfY3VycmVudF9zb3NfZnJvbV9kZWJ1Z19iYXNlICh2b2lkKQotIHsKLSsg IHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwotICAgQ09SRV9BRERS IGxtOwotICAgc3RydWN0IHNvX2xpc3QgKmhlYWQgPSBOVUxMOwotICAgc3RydWN0IHNvX2xpc3Qg KipsaW5rX3B0ciA9ICZoZWFkOwotLSAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbzsKLSAgIHN0cnVj dCBjbGVhbnVwICpiYWNrX3RvOwotICAgaW50IGlnbm9yZV9maXJzdDsKLSsKLSsgIGdkYl9hc3Nl cnQgKGluZm8tPmRlYnVnX2Jhc2UpOwotKwotKyAgLyogQXNzdW1lIHRoYXQgZXZlcnl0aGluZyBp cyBhIGxpYnJhcnkgaWYgdGhlIGR5bmFtaWMgbG9hZGVyIHdhcyBsb2FkZWQKLSsgICAgIGxhdGUg YnkgYSBzdGF0aWMgZXhlY3V0YWJsZS4gICovCi0rICBpZiAoZXhlY19iZmQgJiYgYmZkX2dldF9z ZWN0aW9uX2J5X25hbWUgKGV4ZWNfYmZkLCAiLmR5bmFtaWMiKSA9PSBOVUxMKQotKyAgICBpZ25v cmVfZmlyc3QgPSAwOwotKyAgZWxzZQotKyAgICBpZ25vcmVfZmlyc3QgPSAxOwotKwotKyAgYmFj a190byA9IG1ha2VfY2xlYW51cCAoc3ZyNF9mcmVlX2xpYnJhcnlfbGlzdCwgJmhlYWQpOwotKwot KyAgLyogV2FsayB0aGUgaW5mZXJpb3IncyBsaW5rIG1hcCBsaXN0LCBhbmQgYnVpbGQgb3VyIGxp c3Qgb2YKLSsgICAgIGBzdHJ1Y3Qgc29fbGlzdCcgbm9kZXMuICAqLwotKyAgbG0gPSBzb2xpYl9z dnI0X3JfbWFwIChpbmZvKTsKLSsgIGlmIChsbSkKLSsgICAgc3ZyNF9yZWFkX3NvX2xpc3QgKGxt LCAwLCAmbGlua19wdHIsIGlnbm9yZV9maXJzdCk7Ci0rCi0rICAvKiBPbiBTb2xhcmlzLCB0aGUg ZHluYW1pYyBsaW5rZXIgaXMgbm90IGluIHRoZSBub3JtYWwgbGlzdCBvZgotKyAgICAgc2hhcmVk IG9iamVjdHMsIHNvIG1ha2Ugc3VyZSB3ZSBwaWNrIGl0IHVwIHRvby4gIEhhdmluZwotKyAgICAg c3ltYm9sIGluZm9ybWF0aW9uIGZvciB0aGUgZHluYW1pYyBsaW5rZXIgaXMgcXVpdGUgY3J1Y2lh bAotKyAgICAgZm9yIHNraXBwaW5nIGR5bmFtaWMgbGlua2VyIHJlc29sdmVyIGNvZGUuICAqLwot KyAgbG0gPSBzb2xpYl9zdnI0X3JfbGRzb21hcCAoaW5mbyk7Ci0rICBpZiAobG0pCi0rICAgIHN2 cjRfcmVhZF9zb19saXN0IChsbSwgMCwgJmxpbmtfcHRyLCAwKTsKLSsKLSsgIGRpc2NhcmRfY2xl YW51cHMgKGJhY2tfdG8pOwotKwotKyAgcmV0dXJuIGhlYWQ7Ci0rfQotKwotKy8qIEltcGxlbWVu dCB0aGUgImN1cnJlbnRfc29zIiB0YXJnZXRfc29fb3BzIG1ldGhvZC4gICovCi0rCi0rc3RhdGlj IHN0cnVjdCBzb19saXN0ICoKLStzdnI0X2N1cnJlbnRfc29zICh2b2lkKQotK3sKLSsgIHN0cnVj dCBzdnI0X2luZm8gKmluZm87Ci0gICBzdHJ1Y3Qgc3ZyNF9saWJyYXJ5X2xpc3QgbGlicmFyeV9s aXN0OwotKyAgc3RydWN0IHNvX2xpc3QgKnJlc3VsdDsKLSAKLSAgIC8qIEZhbGwgYmFjayB0byBt YW51YWwgZXhhbWluYXRpb24gb2YgdGhlIHRhcmdldCBpZiB0aGUgcGFja2V0IGlzIG5vdAotICAg ICAgc3VwcG9ydGVkIG9yIGdkYnNlcnZlciBmYWlsZWQgdG8gZmluZCBEVF9ERUJVRy4gIGdkYi5z ZXJ2ZXIvc29saWItbGlzdC5leHAKLUBAIC0xMzI3LDYgKzE0OTcsMTAgQEAgc3ZyNF9jdXJyZW50 X3NvcyAodm9pZCkKLSAKLSAgIGluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwotIAotKyAgLyogSWYg d2UgaGF2ZSBhIG5hbWVzcGFjZSB0YWJsZSB0aGVuIHJldHVybiBhIGZsYXR0ZW5lZCBjb3B5LiAg Ki8KLSsgIGlmIChpbmZvLT5uYW1lc3BhY2VfdGFibGUgIT0gTlVMTCkKLSsgICAgcmV0dXJuIG5h bWVzcGFjZV90YWJsZV9mbGF0dGVuIChpbmZvLT5uYW1lc3BhY2VfdGFibGUpOwotKwotICAgLyog QWx3YXlzIGxvY2F0ZSB0aGUgZGVidWcgc3RydWN0LCBpbiBjYXNlIGl0IGhhcyBtb3ZlZC4gICov Ci0gICBpbmZvLT5kZWJ1Z19iYXNlID0gMDsKLSAgIGxvY2F0ZV9iYXNlIChpbmZvKTsKLUBAIC0x MzM2LDM1ICsxNTEwLDEyIEBAIHN2cjRfY3VycmVudF9zb3MgKHZvaWQpCi0gICBpZiAoISBpbmZv LT5kZWJ1Z19iYXNlKQotICAgICByZXR1cm4gc3ZyNF9kZWZhdWx0X3NvcyAoKTsKLSAKLS0gIC8q IEFzc3VtZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgYSBsaWJyYXJ5IGlmIHRoZSBkeW5hbWljIGxvYWRl ciB3YXMgbG9hZGVkCi0tICAgICBsYXRlIGJ5IGEgc3RhdGljIGV4ZWN1dGFibGUuICAqLwotLSAg aWYgKGV4ZWNfYmZkICYmIGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChleGVjX2JmZCwgIi5keW5h bWljIikgPT0gTlVMTCkKLS0gICAgaWdub3JlX2ZpcnN0ID0gMDsKLS0gIGVsc2UKLS0gICAgaWdu b3JlX2ZpcnN0ID0gMTsKLS0KLS0gIGJhY2tfdG8gPSBtYWtlX2NsZWFudXAgKHN2cjRfZnJlZV9s aWJyYXJ5X2xpc3QsICZoZWFkKTsKLS0KLS0gIC8qIFdhbGsgdGhlIGluZmVyaW9yJ3MgbGluayBt YXAgbGlzdCwgYW5kIGJ1aWxkIG91ciBsaXN0IG9mCi0tICAgICBgc3RydWN0IHNvX2xpc3QnIG5v ZGVzLiAgKi8KLS0gIGxtID0gc29saWJfc3ZyNF9yX21hcCAoaW5mbyk7Ci0tICBpZiAobG0pCi0t ICAgIHN2cjRfcmVhZF9zb19saXN0IChsbSwgJmxpbmtfcHRyLCBpZ25vcmVfZmlyc3QpOwotLQot LSAgLyogT24gU29sYXJpcywgdGhlIGR5bmFtaWMgbGlua2VyIGlzIG5vdCBpbiB0aGUgbm9ybWFs IGxpc3Qgb2YKLS0gICAgIHNoYXJlZCBvYmplY3RzLCBzbyBtYWtlIHN1cmUgd2UgcGljayBpdCB1 cCB0b28uICBIYXZpbmcKLS0gICAgIHN5bWJvbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGR5bmFtaWMg bGlua2VyIGlzIHF1aXRlIGNydWNpYWwKLS0gICAgIGZvciBza2lwcGluZyBkeW5hbWljIGxpbmtl ciByZXNvbHZlciBjb2RlLiAgKi8KLS0gIGxtID0gc29saWJfc3ZyNF9yX2xkc29tYXAgKGluZm8p OwotLSAgaWYgKGxtKQotLSAgICBzdnI0X3JlYWRfc29fbGlzdCAobG0sICZsaW5rX3B0ciwgMCk7 Ci0tCi0tICBkaXNjYXJkX2NsZWFudXBzIChiYWNrX3RvKTsKLSsgIHJlc3VsdCA9IHN2cjRfY3Vy cmVudF9zb3NfZnJvbV9kZWJ1Z19iYXNlICgpOwotIAotLSAgaWYgKGhlYWQgPT0gTlVMTCkKLSsg IGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgcmV0dXJuIHN2cjRfZGVmYXVsdF9zb3MgKCk7Ci0g Ci0tICByZXR1cm4gaGVhZDsKLSsgIHJldHVybiByZXN1bHQ7Ci0gfQotIAotIC8qIEdldCB0aGUg YWRkcmVzcyBvZiB0aGUgbGlua19tYXAgZm9yIGEgZ2l2ZW4gT0JKRklMRS4gICovCi1AQCAtMTQ0 OSw2ICsxNjAwLDQ5OCBAQCBleGVjX2VudHJ5X3BvaW50IChzdHJ1Y3QgYmZkICphYmZkLCBzdHJ1 Ci0gICByZXR1cm4gZ2RiYXJjaF9hZGRyX2JpdHNfcmVtb3ZlICh0YXJnZXRfZ2RiYXJjaCAoKSwg YWRkcik7Ci0gfQotIAotKy8qIEEgcHJvYmUgYW5kIGl0cyBhc3NvY2lhdGVkIGluZm9ybWF0aW9u IHN0cnVjdHVyZS4gICovCi0rCi0rc3RydWN0IHByb2JlX2FuZF9pbmZvCi0rewotKyAgLyogVGhl IHByb2JlLiAgKi8KLSsgIHN0cnVjdCBwcm9iZSAqcHJvYmU7Ci0rCi0rICAvKiBUaGUgcHJvYmVf aW5mbyBmcm9tIHdoaWNoIHRoZSBwcm9iZSB3YXMgY3JlYXRlZC4gICovCi0rICBjb25zdCBzdHJ1 Y3QgcHJvYmVfaW5mbyAqaW5mbzsKLSt9OwotKwotKy8qIEdldCB0aGUgc29saWIgZXZlbnQgcHJv YmUgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiwgYW5kIHRoZQotKyAgIHByb2JlX2luZm8gdGhl IHByb2JlIHdhcyBjcmVhdGVkIHdpdGguICBGaWxscyBpbiBSRVNVTFQgYW5kCi0rICAgcmV0dXJu cyBub256ZXJvIGlmIGEgc29saWIgZXZlbnQgcHJvYmUgd2FzIGZvdW5kIGF0IHRoZQotKyAgIHNw ZWNpZmllZCBsb2NhdGlvbi4gIFJldHVybnMgemVybyBpZiBubyBzb2xpYiBldmVudCBwcm9iZQot KyAgIHdhcyBmb3VuZC4gICovCi0rCi0rc3RhdGljIGludAotK3NvbGliX2V2ZW50X3Byb2JlX2F0 IChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBzdHJ1Y3QgYnBfbG9jYXRpb24gKmxvYywKLSsJCSAg ICAgIHN0cnVjdCBwcm9iZV9hbmRfaW5mbyAqcmVzdWx0KQotK3sKLSsgIGludCBpOwotKwotKyAg Zm9yIChpID0gMDsgaSA8IE5VTV9QUk9CRVM7IGkrKykKLSsgICAgewotKyAgICAgIHN0cnVjdCBw cm9iZSAqcHJvYmU7Ci0rICAgICAgaW50IGl4OwotKwotKyAgICAgIGZvciAoaXggPSAwOyBWRUNf aXRlcmF0ZSAocHJvYmVfcCwgaW5mby0+cHJvYmVzW2ldLCBpeCwgcHJvYmUpOyArK2l4KQotKwl7 Ci0rCSAgaWYgKGxvYy0+cHNwYWNlID09IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZQotKwkgICAgICAm JiBsb2MtPmFkZHJlc3MgPT0gcHJvYmUtPmFkZHJlc3MpCi0rCSAgICB7Ci0rCSAgICAgIHJlc3Vs dC0+aW5mbyA9ICZwcm9iZV9pbmZvW2ldOwotKwkgICAgICByZXN1bHQtPnByb2JlID0gcHJvYmU7 Ci0rCi0rCSAgICAgIHJldHVybiAxOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSsgIHJldHVy biAwOwotK30KLSsKLSsvKiBEZWNpZGUgd2hhdCBhY3Rpb24gdG8gdGFrZSB3aGVuIHRoZSBzcGVj aWZpZWQgc29saWIgZXZlbnQgcHJvYmUgaXMKLSsgICBoaXQuICAqLwotKwotK3N0YXRpYyBlbnVt IHByb2JlX2FjdGlvbgotK3NvbGliX2V2ZW50X3Byb2JlX2FjdGlvbiAoc3RydWN0IHByb2JlX2Fu ZF9pbmZvICpwaSkKLSt7Ci0rICBlbnVtIHByb2JlX2FjdGlvbiBhY3Rpb247Ci0rICB1bnNpZ25l ZCBwcm9iZV9hcmdjOwotKwotKyAgYWN0aW9uID0gcGktPmluZm8tPmFjdGlvbjsKLSsgIGlmIChh Y3Rpb24gPT0gTkFNRVNQQUNFX05PX0FDVElPTiB8fCBhY3Rpb24gPT0gTkFNRVNQQUNFX1RBQkxF X0lOVkFMSURBVEUpCi0rICAgIHJldHVybiBhY3Rpb247Ci0rCi0rICBnZGJfYXNzZXJ0IChhY3Rp b24gPT0gTkFNRVNQQUNFX1JFTE9BRAotKwkgICAgICB8fCBhY3Rpb24gPT0gTkFNRVNQQUNFX1VQ REFURV9PUl9SRUxPQUQpOwotKwotKyAgLyogQ2hlY2sgdGhhdCBhbiBhcHByb3ByaWF0ZSBudW1i ZXIgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHN1cHBsaWVkLgotKyAgICAgV2UgZXhwZWN0OgotKyAg ICAgICBhcmcwOiBMbWlkX3QgbG1pZCAobWFuZGF0b3J5KQotKyAgICAgICBhcmcxOiBzdHJ1Y3Qg cl9kZWJ1ZyAqZGVidWdfYmFzZSAobWFuZGF0b3J5KQotKyAgICAgICBhcmcyOiBzdHJ1Y3QgbGlu a19tYXAgKm5ldyAob3B0aW9uYWwsIGZvciBpbmNyZW1lbnRhbCB1cGRhdGVzKSAgKi8KLSsgIHBy b2JlX2FyZ2MgPSBnZXRfcHJvYmVfYXJndW1lbnRfY291bnQgKHBpLT5wcm9iZSk7Ci0rICBpZiAo cHJvYmVfYXJnYyA9PSAyKQotKyAgICBhY3Rpb24gPSBOQU1FU1BBQ0VfUkVMT0FEOwotKyAgZWxz ZSBpZiAocHJvYmVfYXJnYyA8IDIpCi0rICAgIGFjdGlvbiA9IE5BTUVTUEFDRV9UQUJMRV9JTlZB TElEQVRFOwotKwotKyAgcmV0dXJuIGFjdGlvbjsKLSt9Ci0rCi0rLyogQSBuYW1lc3BhY2UgaW4g dGhlIGR5bmFtaWMgbGlua2VyLiAgKi8KLSsKLStzdHJ1Y3QgbmFtZXNwYWNlCi0rewotKyAgLyog TnVtZXJpYyBsaW5rLW1hcCBJRCBvZiB0aGUgbmFtZXNwYWNlLiAgKi8KLSsgIExPTkdFU1QgbG1p ZDsKLSsKLSsgIC8qIExpc3Qgb2Ygb2JqZWN0cyBsb2FkZWQgaW50byB0aGUgbmFtZXNwYWNlLiAg Ki8KLSsgIHN0cnVjdCBzb19saXN0ICpzb2xpc3Q7Ci0rfTsKLSsKLSsvKiBSZXR1cm5zIGEgaGFz aCBjb2RlIGZvciB0aGUgbmFtZXNwYWNlIHJlZmVyZW5jZWQgYnkgcC4gICovCi0rCi0rc3RhdGlj IGhhc2h2YWxfdAotK2hhc2hfbmFtZXNwYWNlIChjb25zdCB2b2lkICpwKQotK3sKLSsgIGNvbnN0 IHN0cnVjdCBuYW1lc3BhY2UgKm5zID0gcDsKLSsKLSsgIHJldHVybiAoaGFzaHZhbF90KSBucy0+ bG1pZDsKLSt9Ci0rCi0rLyogUmV0dXJucyBub24temVybyBpZiB0aGUgbmFtZXNwYWNlcyByZWZl cmVuY2VkIGJ5IHAxIGFuZCBwMgotKyAgIGFyZSBlcXVhbC4gICovCi0rCi0rc3RhdGljIGludAot K2VxdWFsX25hbWVzcGFjZSAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQotK3sKLSsg IGNvbnN0IHN0cnVjdCBuYW1lc3BhY2UgKm5zMSA9IHAxOwotKyAgY29uc3Qgc3RydWN0IG5hbWVz cGFjZSAqbnMyID0gcDI7Ci0rCi0rICByZXR1cm4gbnMxLT5sbWlkID09IG5zMi0+bG1pZDsKLSt9 Ci0rCi0rLyogRnJlZSBhIG5hbWVzcGFjZS4gICovCi0rCi0rc3RhdGljIHZvaWQKLStmcmVlX25h bWVzcGFjZSAodm9pZCAqcCkKLSt7Ci0rICBzdHJ1Y3QgbmFtZXNwYWNlICpucyA9IHA7Ci0rCi0r ICBzdnI0X2ZyZWVfbGlicmFyeV9saXN0IChucy0+c29saXN0KTsKLSsgIHhmcmVlIChucyk7Ci0r fQotKwotKy8qIFBvcHVsYXRlIHRoaXMgbmFtZXNwYWNlIGJ5IHJlYWRpbmcgdGhlIGVudGlyZSBs aXN0IG9mIHNoYXJlZAotKyAgIG9iamVjdHMgZnJvbSB0aGUgaW5mZXJpb3IuICBSZXR1cm5zIG5v bnplcm8gb24gc3VjY2Vzcy4gICovCi0rCi0rc3RhdGljIGludAotK25hbWVzcGFjZV91cGRhdGVf ZnVsbCAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgTE9OR0VTVCBsbWlkLAotKwkJICAgICAgIENP UkVfQUREUiBkZWJ1Z19iYXNlLCBpbnQgaXNfaW5pdGlhbF9ucykKLSt7Ci0rICBzdHJ1Y3Qgc29f bGlzdCAqcmVzdWx0ID0gTlVMTCwgKnNvOwotKyAgc3RydWN0IG5hbWVzcGFjZSBsb29rdXAsICpu czsKLSsgIHZvaWQgKipzbG90OwotKwotKyAgLyogUmVhZCB0aGUgbGlzdCBvZiBzaGFyZWQgb2Jq ZWN0cyBmcm9tIHRoZSBpbmZlcmlvci4gIFRoZQotKyAgICAgaW5pdGlhbCBuYW1lc3BhY2UgcmVx dWlyZXMgZXh0cmEgcHJvY2Vzc2luZyBhbmQgaXMgaGFuZGxlZAotKyAgICAgc2VwYXJhdGVseS4g ICovCi0rICBpZiAoaXNfaW5pdGlhbF9ucykKLSsgICAgewotKyAgICAgIHJlc3VsdCA9IHN2cjRf Y3VycmVudF9zb3NfZnJvbV9kZWJ1Z19iYXNlICgpOwotKyAgICB9Ci0rICBlbHNlCi0rICAgIHsK LSsgICAgICBDT1JFX0FERFIgbG0gPSByX21hcF9mcm9tX2RlYnVnX2Jhc2UgKGRlYnVnX2Jhc2Up OwotKyAgICAgIHN0cnVjdCBzb19saXN0ICoqbGlua19wdHIgPSAmcmVzdWx0OwotKwotKyAgICAg IGlmICghc3ZyNF9yZWFkX3NvX2xpc3QgKGxtLCAwLCAmbGlua19wdHIsIDApKQotKwlyZXR1cm4g MDsKLSsgICAgfQotKwotKyAgLyogSWYgdGhlIG5hbWVzcGFjZSBpcyBlbXB0eSB0aGVuIGRlbGV0 ZSBpdCBmcm9tIHRoZSB0YWJsZS4gICovCi0rICBpZiAocmVzdWx0ID09IE5VTEwpCi0rICAgIHsK LSsgICAgICBpZiAoaW5mby0+bmFtZXNwYWNlX3RhYmxlICE9IE5VTEwpCi0rCXsKLSsJICBsb29r dXAubG1pZCA9IGxtaWQ7Ci0rCSAgaHRhYl9yZW1vdmVfZWx0IChpbmZvLT5uYW1lc3BhY2VfdGFi bGUsICZsb29rdXApOwotKwl9Ci0rCi0rICAgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsgIC8q IEZpbGwgaW4gdGhlIGxpbmstbWFwIElEcyBhbmQgaW5pdGlhbCBuYW1lc3BhY2UgZmxhZ3MuICAq LwotKyAgZm9yIChzbyA9IHJlc3VsdDsgc287IHNvID0gc28tPm5leHQpCi0rICAgIHsKLSsgICAg ICBzby0+bG1faW5mby0+bG1pZCA9IGxtaWQ7Ci0rICAgICAgc28tPmxtX2luZm8tPmluX2luaXRp YWxfbnMgPSBpc19pbml0aWFsX25zOwotKyAgICB9Ci0rCi0rICAvKiBDcmVhdGUgdGhlIG5hbWVz cGFjZSB0YWJsZSwgaWYgbmVjZXNzYXJ5LiAgKi8KLSsgIGlmIChpbmZvLT5uYW1lc3BhY2VfdGFi bGUgPT0gTlVMTCkKLSsgICAgewotKyAgICAgIGluZm8tPm5hbWVzcGFjZV90YWJsZSA9IGh0YWJf Y3JlYXRlX2FsbG9jICgxLCBoYXNoX25hbWVzcGFjZSwKLSsJCQkJCQkgZXF1YWxfbmFtZXNwYWNl LAotKwkJCQkJCSBmcmVlX25hbWVzcGFjZSwKLSsJCQkJCQkgeGNhbGxvYywgeGZyZWUpOwotKyAg ICB9Ci0rCi0rICAvKiBVcGRhdGUgdGhlIG5hbWVzcGFjZSB0YWJsZSB3aXRoIG91ciBuZXcgbGlz dC4gICovCi0rICBsb29rdXAubG1pZCA9IGxtaWQ7Ci0rICBzbG90ID0gaHRhYl9maW5kX3Nsb3Qg KGluZm8tPm5hbWVzcGFjZV90YWJsZSwgJmxvb2t1cCwgSU5TRVJUKTsKLSsgIGlmICgqc2xvdCA9 PSBIVEFCX0VNUFRZX0VOVFJZKQotKyAgICB7Ci0rICAgICAgbnMgPSBYQ05FVyAoc3RydWN0IG5h bWVzcGFjZSk7Ci0rICAgICAgbnMtPmxtaWQgPSBsbWlkOwotKyAgICAgICpzbG90ID0gbnM7Ci0r ICAgIH0KLSsgIGVsc2UKLSsgICAgewotKyAgICAgIG5zID0gKnNsb3Q7Ci0rICAgICAgc3ZyNF9m cmVlX2xpYnJhcnlfbGlzdCAobnMtPnNvbGlzdCk7Ci0rICAgIH0KLSsgIG5zLT5zb2xpc3QgPSBy ZXN1bHQ7Ci0rCi0rICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogVXBkYXRlIHRoaXMgbmFtZXNwYWNl IHN0YXJ0aW5nIGZyb20gdGhlIGxpbmstbWFwIGVudHJ5IHBhc3NlZCBieQotKyAgIHRoZSBsaW5r ZXIgaW4gdGhlIHByb2JlJ3MgdGhpcmQgYXJndW1lbnQuICBSZXR1cm5zIG5vbnplcm8gaWYgdGhl Ci0rICAgbGlzdCB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIG9yIHplcm8gdG8gaW5kaWNhdGUg ZmFpbHVyZS4gICovCi0rCi0rc3RhdGljIGludAotK25hbWVzcGFjZV91cGRhdGVfaW5jcmVtZW50 YWwgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8sIExPTkdFU1QgbG1pZCwKLSsJCQkgICAgICBDT1JF X0FERFIgbG0sIGludCBpc19pbml0aWFsX25zKQotK3sKLSsgIHN0cnVjdCBuYW1lc3BhY2UgbG9v a3VwLCAqbnM7Ci0rICBzdHJ1Y3Qgc29fbGlzdCAqdGFpbCwgKipsaW5rLCAqc287Ci0rICBzdHJ1 Y3QgdmFsdWUgKnZhbDsKLSsKLSsgIC8qIEZpbmQgb3VyIG5hbWVzcGFjZSBpbiB0aGUgdGFibGUu ICAqLwotKyAgaWYgKGluZm8tPm5hbWVzcGFjZV90YWJsZSA9PSBOVUxMKQotKyAgICByZXR1cm4g MDsKLSsKLSsgIGxvb2t1cC5sbWlkID0gbG1pZDsKLSsgIG5zID0gaHRhYl9maW5kIChpbmZvLT5u YW1lc3BhY2VfdGFibGUsICZsb29rdXApOwotKyAgaWYgKG5zID09IE5VTEwpCi0rICAgIHJldHVy biAwOwotKwotKyAgLyogV2FsayB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiAgKi8KLSsgIHRhaWwg PSBucy0+c29saXN0OwotKyAgaWYgKHRhaWwgPT0gTlVMTCkKLSsgICAgcmV0dXJuIDA7Ci0rCi0r ICB3aGlsZSAodGFpbC0+bmV4dCkKLSsgICAgdGFpbCA9IHRhaWwtPm5leHQ7Ci0rICBsaW5rID0g JnRhaWwtPm5leHQ7Ci0rCi0rICAvKiBSZWFkIHRoZSBuZXcgb2JqZWN0cy4gICovCi0rICBpZiAo IXN2cjRfcmVhZF9zb19saXN0IChsbSwgdGFpbC0+bG1faW5mby0+bG1fYWRkciwgJmxpbmssIDAp KQotKyAgICByZXR1cm4gMDsKLSsKLSsgIC8qIEZpbGwgaW4gdGhlIGxpbmstbWFwIElEcyBhbmQg aW5pdGlhbCBuYW1lc3BhY2UgZmxhZ3MuICAqLwotKyAgZm9yIChzbyA9IHRhaWw7IHNvOyBzbyA9 IHNvLT5uZXh0KQotKyAgICB7Ci0rICAgICAgc28tPmxtX2luZm8tPmxtaWQgPSBsbWlkOwotKyAg ICAgIHNvLT5sbV9pbmZvLT5pbl9pbml0aWFsX25zID0gaXNfaW5pdGlhbF9uczsKLSsgICAgfQot KwotKyAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIFVwZGF0ZSB0aGUgbmFtZXNwYWNlIHRhYmxlIGFz IGFwcHJvcHJpYXRlIHdoZW4gdXNpbmcgdGhlCi0rICAgcHJvYmVzLWJhc2VkIGxpbmtlciBpbnRl cmZhY2UuICBEbyBub3RoaW5nIGlmIHVzaW5nIHRoZQotKyAgIHN0YW5kYXJkIGludGVyZmFjZS4g ICovCi0rCi0rc3RhdGljIHZvaWQKLStzdnI0X2hhbmRsZV9zb2xpYl9ldmVudCAoYnBzdGF0IGJz KQotK3sKLSsgIHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwotKyAg c3RydWN0IHByb2JlX2FuZF9pbmZvIGJ1ZiwgKnBpID0gJmJ1ZjsKLSsgIGVudW0gcHJvYmVfYWN0 aW9uIGFjdGlvbjsKLSsgIHN0cnVjdCB2YWx1ZSAqdmFsOwotKyAgTE9OR0VTVCBsbWlkOwotKyAg Q09SRV9BRERSIGRlYnVnX2Jhc2UsIGxtID0gMDsKLSsgIGludCBpc19pbml0aWFsX25zOwotKwot KyAgLyogSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlu Y29ycmVjdGx5Ci0rICAgICBieSB0aGUgaGFuZGxlX3NvbGliX2V2ZW50IGluIGhhbmRsZV9pbmZl cmlvcl9ldmVudCBpZiBHREIgZ29lcwotKyAgICAgZnVsbHkgbXVsdGktdGFyZ2V0LiAgKi8KLSsg IGdkYl9hc3NlcnQgKGJzICE9IE5VTEwpOwotKwotKyAgaWYgKCFpbmZvLT51c2luZ19wcm9iZXMp Ci0rICAgIHJldHVybjsKLSsKLSsgIGlmICghc29saWJfZXZlbnRfcHJvYmVfYXQgKGluZm8sIGJz LT5icF9sb2NhdGlvbl9hdCwgcGkpKQotKyAgICBnb3RvIGVycm9yOwotKwotKyAgYWN0aW9uID0g c29saWJfZXZlbnRfcHJvYmVfYWN0aW9uIChwaSk7Ci0rICBpZiAoYWN0aW9uID09IE5BTUVTUEFD RV9UQUJMRV9JTlZBTElEQVRFKQotKyAgICBnb3RvIGVycm9yOwotKwotKyAgaWYgKGFjdGlvbiA9 PSBOQU1FU1BBQ0VfTk9fQUNUSU9OKQotKyAgICByZXR1cm47Ci0rCi0rICB2YWwgPSBldmFsdWF0 ZV9wcm9iZV9hcmd1bWVudCAocGktPnByb2JlLCAwKTsKLSsgIGlmICh2YWwgPT0gTlVMTCkKLSsg ICAgZ290byBlcnJvcjsKLSsKLSsgIGxtaWQgPSB2YWx1ZV9hc19sb25nICh2YWwpOwotKwotKyAg dmFsID0gZXZhbHVhdGVfcHJvYmVfYXJndW1lbnQgKHBpLT5wcm9iZSwgMSk7Ci0rICBpZiAodmFs ID09IE5VTEwpCi0rICAgIGdvdG8gZXJyb3I7Ci0rCi0rICBkZWJ1Z19iYXNlID0gdmFsdWVfYXNf YWRkcmVzcyAodmFsKTsKLSsgIGlmIChkZWJ1Z19iYXNlID09IDApCi0rICAgIGdvdG8gZXJyb3I7 Ci0rCi0rICAvKiBBbHdheXMgbG9jYXRlIHRoZSBkZWJ1ZyBzdHJ1Y3QsIGluIGNhc2UgaXQgbW92 ZWQuICAqLwotKyAgaW5mby0+ZGVidWdfYmFzZSA9IDA7Ci0rICBpZiAobG9jYXRlX2Jhc2UgKGlu Zm8pID09IDApCi0rICAgIGdvdG8gZXJyb3I7Ci0rCi0rICBpc19pbml0aWFsX25zID0gKGRlYnVn X2Jhc2UgPT0gaW5mby0+ZGVidWdfYmFzZSk7Ci0rCi0rICBpZiAoYWN0aW9uID09IE5BTUVTUEFD RV9VUERBVEVfT1JfUkVMT0FEKQotKyAgICB7Ci0rICAgICAgdmFsID0gZXZhbHVhdGVfcHJvYmVf YXJndW1lbnQgKHBpLT5wcm9iZSwgMik7Ci0rICAgICAgaWYgKHZhbCAhPSBOVUxMKQotKwlsbSA9 IHZhbHVlX2FzX2FkZHJlc3MgKHZhbCk7Ci0rCi0rICAgICAgaWYgKGxtID09IDApCi0rCWFjdGlv biA9IE5BTUVTUEFDRV9SRUxPQUQ7Ci0rICAgIH0KLSsKLSsgIGlmIChhY3Rpb24gPT0gTkFNRVNQ QUNFX1VQREFURV9PUl9SRUxPQUQpCi0rICAgIHsKLSsgICAgICBpZiAobmFtZXNwYWNlX3VwZGF0 ZV9pbmNyZW1lbnRhbCAoaW5mbywgbG1pZCwgbG0sIGlzX2luaXRpYWxfbnMpKQotKwlyZXR1cm47 Ci0rCi0rICAgICAgYWN0aW9uID0gTkFNRVNQQUNFX1JFTE9BRDsKLSsgICAgfQotKwotKyAgZ2Ri X2Fzc2VydCAoYWN0aW9uID09IE5BTUVTUEFDRV9SRUxPQUQpOwotKwotKyAgaWYgKG5hbWVzcGFj ZV91cGRhdGVfZnVsbCAoaW5mbywgbG1pZCwgZGVidWdfYmFzZSwgaXNfaW5pdGlhbF9ucykpCi0r ICAgIHJldHVybjsKLSsKLSsgZXJyb3I6Ci0rCi0rICAvKiBXZSBzaG91bGQgbmV2ZXIgcmVhY2gg aGVyZSwgYnV0IGlmIHdlIGRvIHdlIGRpc2FibGUgdGhlCi0rICAgICBwcm9iZXMgaW50ZXJmYWNl IGFuZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGludGVyZmFjZS4KLSsgICAgIFdlIGRvbid0IHJl c2V0IHRoZSBicmVha3BvaW50cyBhcyB0aGUgb25lcyB3ZSd2ZSBzZXQgdXAKLSsgICAgIGFyZSBh ZGVxdWF0ZS4gICovCi0rICB3YXJuaW5nIChfKCJQcm9iZXMtYmFzZWQgZHluYW1pYyBsaW5rZXIg aW50ZXJmYWNlIGZhaWxlZC5cbiIKLSsJICAgICAiUmV2ZXJ0aW5nIHRvIG9yaWdpbmFsIGludGVy ZmFjZS5cbiIpKTsKLSsKLSsgIGZyZWVfbmFtZXNwYWNlX3RhYmxlIChpbmZvKTsKLSsgIGZyZWVf cHJvYmVzIChpbmZvKTsKLSsgIGluZm8tPnVzaW5nX3Byb2JlcyA9IDA7Ci0rfQotKwotKy8qIEhl bHBlciBmdW5jdGlvbiBmb3IgbmFtZXNwYWNlX3RhYmxlX2ZsYXR0ZW4uICAqLwotKwotK3N0YXRp YyBpbnQKLStuYW1lc3BhY2VfdGFibGVfZmxhdHRlbl9oZWxwZXIgKHZvaWQgKipzbG90LCB2b2lk ICphcmcpCi0rewotKyAgc3RydWN0IG5hbWVzcGFjZSAqbnMgPSAoc3RydWN0IG5hbWVzcGFjZSAq KSAqc2xvdDsKLSsgIHN0cnVjdCBzb19saXN0ICpzcmMgPSBucy0+c29saXN0OwotKyAgc3RydWN0 IHNvX2xpc3QgKipsaW5rID0gKHN0cnVjdCBzb19saXN0ICoqKSBhcmc7Ci0rCi0rICB3aGlsZSAo KmxpbmspCi0rICAgIGxpbmsgPSAmKCpsaW5rKS0+bmV4dDsKLSsKLSsgIHdoaWxlIChzcmMgIT0g TlVMTCkKLSsgICAgewotKyAgICAgIHN0cnVjdCBzb19saXN0ICpkc3Q7Ci0rCi0rICAgICAgZHN0 ID0geG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qgc29fbGlzdCkpOwotKyAgICAgIG1lbWNweSAoZHN0 LCBzcmMsIHNpemVvZiAoc3RydWN0IHNvX2xpc3QpKTsKLSsKLSsgICAgICBkc3QtPmxtX2luZm8g PSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBsbV9pbmZvKSk7Ci0rICAgICAgbWVtY3B5IChkc3Qt PmxtX2luZm8sIHNyYy0+bG1faW5mbywgc2l6ZW9mIChzdHJ1Y3QgbG1faW5mbykpOwotKwotKyAg ICAgICpsaW5rID0gZHN0OwotKyAgICAgIGxpbmsgPSAmZHN0LT5uZXh0OwotKwotKyAgICAgIHNy YyA9IHNyYy0+bmV4dDsKLSsgICAgfQotKwotKyAgKmxpbmsgPSBOVUxMOwotKwotKyAgcmV0dXJu IDE7IC8qIENvbnRpbnVlIHRyYXZlcnNhbC4gICovCi0rfQotKwotKy8qIEZsYXR0ZW4gdGhlIG5h bWVzcGFjZSB0YWJsZSBpbnRvIGEgc2luZ2xlIGxpc3QuICAqLwotKwotK3N0YXRpYyBzdHJ1Y3Qg c29fbGlzdCAqCi0rbmFtZXNwYWNlX3RhYmxlX2ZsYXR0ZW4gKGh0YWJfdCBuYW1lc3BhY2VfdGFi bGUpCi0rewotKyAgc3RydWN0IHNvX2xpc3QgKmRzdCA9IE5VTEw7Ci0rCi0rICBodGFiX3RyYXZl cnNlIChuYW1lc3BhY2VfdGFibGUsIG5hbWVzcGFjZV90YWJsZV9mbGF0dGVuX2hlbHBlciwgJmRz dCk7Ci0rCi0rICByZXR1cm4gZHN0OwotK30KLSsKLSsvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHN2 cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzLiAgKi8KLSsKLStzdGF0aWMgaW50Ci0r c3ZyNF91cGRhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludCAoc3RydWN0IGJyZWFrcG9pbnQgKmIs IHZvaWQgKmFyZykKLSt7Ci0rICBzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvID0gZ2V0X3N2cjRfaW5m byAoKTsKLSsgIHN0cnVjdCBicF9sb2NhdGlvbiAqbG9jOwotKwotKyAgaWYgKGItPnR5cGUgIT0g YnBfc2hsaWJfZXZlbnQpCi0rICAgIHJldHVybiAwOyAvKiBDb250aW51ZSBpdGVyYXRpbmcuICAq LwotKwotKyAgZm9yIChsb2MgPSBiLT5sb2M7IGxvYzsgbG9jID0gbG9jLT5uZXh0KQotKyAgICB7 Ci0rICAgICAgc3RydWN0IHByb2JlX2FuZF9pbmZvIGJ1ZiwgKnBpID0gJmJ1ZjsKLSsKLSsgICAg ICBpZiAoc29saWJfZXZlbnRfcHJvYmVfYXQgKGluZm8sIGxvYywgcGkpKQotKwl7Ci0rCSAgaWYg KHBpLT5pbmZvLT5hY3Rpb24gPT0gTkFNRVNQQUNFX05PX0FDVElPTikKLSsJICAgIGItPmVuYWJs ZV9zdGF0ZSA9IChzdG9wX29uX3NvbGliX2V2ZW50cwotKwkJCSAgICAgICA/IGJwX2VuYWJsZWQg OiBicF9kaXNhYmxlZCk7Ci0rCi0rCSAgcmV0dXJuIDA7IC8qIENvbnRpbnVlIGl0ZXJhdGluZy4g ICovCi0rCX0KLSsgICAgfQotKwotKyAgcmV0dXJuIDA7IC8qIENvbnRpbnVlIGl0ZXJhdGluZy4g ICovCi0rfQotKwotKy8qIEVuYWJsZSBvciBkaXNhYmxlIG9wdGlvbmFsIHNvbGliIGV2ZW50IGJy ZWFrcG9pbnRzIGFzIGFwcHJvcHJpYXRlLgotKyAgIENhbGxlZCB3aGVuZXZlciBzdG9wX29uX3Nv bGliX2V2ZW50cyBpcyBjaGFuZ2VkLiAgKi8KLSsKLStzdGF0aWMgdm9pZAotK3N2cjRfdXBkYXRl X3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh2b2lkKQotK3sKLSsgIHN0cnVjdCBzdnI0X2luZm8g KmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwotKwotKyAgaWYgKGluZm8tPnVzaW5nX3Byb2JlcykK LSsgICAgaXRlcmF0ZV9vdmVyX2JyZWFrcG9pbnRzIChzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9i cmVha3BvaW50LCBOVUxMKTsKLSt9Ci0rCi0rLyogQm90aCB0aGUgU3VuT1MgYW5kIHRoZSBTVlI0 IGR5bmFtaWMgbGlua2VycyBjYWxsIGEgbWFya2VyIGZ1bmN0aW9uCi0rICAgYmVmb3JlIGFuZCBh ZnRlciBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgc2hhcmVkIGxpYnJhcmllcy4gIFRoZSBzb2xlCi0r ICAgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBhbGxvdyBkZWJ1Z2dlcnMgdG8gc2V0IGEg YnJlYWtwb2ludCBzbwotKyAgIHRoZXkgY2FuIHRyYWNrIHRoZXNlIGNoYW5nZXMuCi0rCi0rICAg U29tZSB2ZXJzaW9ucyBvZiB0aGUgZ2xpYmMgZHluYW1pYyBsaW5rZXIgY29udGFpbiBuYW1lZCBw cm9iZXMKLSsgICB0byBhbGxvdyBtb3JlIGZpbmUgZ3JhaW5lZCBzdG9wcGluZy4gIEdpdmVuIHRo ZSBhZGRyZXNzIG9mIHRoZQotKyAgIG9yaWdpbmFsIG1hcmtlciBmdW5jdGlvbiwgdGhpcyBmdW5j dGlvbiBhdHRlbXB0cyB0byBmaW5kIHRoZXNlCi0rICAgcHJvYmVzLCBhbmQgaWYgZm91bmQsIHNl dHMgYnJlYWtwb2ludHMgb24gdGhvc2UgaW5zdGVhZC4gIElmIHRoZQotKyAgIHByb2JlcyBhcmVu J3QgZm91bmQsIGEgc2luZ2xlIGJyZWFrcG9pbnQgaXMgc2V0IG9uIHRoZSBvcmlnaW5hbAotKyAg IG1hcmtlciBmdW5jdGlvbi4gICovCi0rCi0rc3RhdGljIHZvaWQKLStzdnI0X2NyZWF0ZV9zb2xp Yl9ldmVudF9icmVha3BvaW50cyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCi0rCQkJCSAgICAg Q09SRV9BRERSIGFkZHJlc3MpCi0rewotKyAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9z dnI0X2luZm8gKCk7Ci0rICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKm9zOwotKwotKyAgb3MgPSBmaW5k X3BjX3NlY3Rpb24gKGFkZHJlc3MpOwotKyAgaWYgKG9zICE9IE5VTEwpCi0rICAgIHsKLSsgICAg ICBpbnQgd2l0aF9wcmVmaXg7Ci0rCi0rICAgICAgZm9yICh3aXRoX3ByZWZpeCA9IDA7IHdpdGhf cHJlZml4IDw9IDE7IHdpdGhfcHJlZml4KyspCi0rCXsKLSsJICBpbnQgYWxsX3Byb2Jlc19mb3Vu ZCA9IDE7Ci0rCSAgaW50IGk7Ci0rCi0rCSAgZm9yIChpID0gMDsgaSA8IE5VTV9QUk9CRVM7IGkr KykKLSsJICAgIHsKLSsJICAgICAgY2hhciBuYW1lWzMyXSA9IHsgJ1wwJyB9OwotKwotKwkgICAg ICAvKiBGZWRvcmEgMTcsIFJIRUwgNi4yLCBhbmQgUkhFTCA2LjMgc2hpcHBlZCB3aXRoIGFuCi0r CQkgZWFybHkgdmVyc2lvbiBvZiB0aGUgcHJvYmVzIGNvZGUgaW4gd2hpY2ggdGhlIHByb2JlcycK LSsJCSBuYW1lcyB3ZXJlIHByZWZpeGVkIHdpdGggInJ0bGRfIi4gIFRoZSBsb2NhdGlvbnMgYW5k Ci0rCQkgYXJndW1lbnRzIG9mIHRoZSBwcm9iZXMgYXJlIG90aGVyd2lzZSB0aGUgc2FtZSwgc28g d2UKLSsJCSBjaGVjayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24gaWYgdGhlIHVucHJlZml4ZWQK LSsJCSBwcm9iZXMgYXJlIG5vdCBmb3VuZC4gICovCi0rCi0rCSAgICAgIGlmICh3aXRoX3ByZWZp eCkKLSsJCXN0cm5jYXQgKG5hbWUsICJydGxkXyIsIHNpemVvZiAobmFtZSkpOwotKwotKwkgICAg ICBzdHJuY2F0IChuYW1lLCBwcm9iZV9pbmZvW2ldLm5hbWUsIHNpemVvZiAobmFtZSkgLSBzaXpl b2YgKCJydGxkXyIpKTsKLSsKLSsJICAgICAgaW5mby0+cHJvYmVzW2ldID0gZmluZF9wcm9iZXNf aW5fb2JqZmlsZSAob3MtPm9iamZpbGUsICJydGxkIiwKLSsJCQkJCQkJbmFtZSk7Ci0rCi0rCSAg ICAgIGlmICghVkVDX2xlbmd0aCAocHJvYmVfcCwgaW5mby0+cHJvYmVzW2ldKSkKLSsJCXsKLSsJ CSAgZnJlZV9wcm9iZXMgKGluZm8pOwotKwkJICBhbGxfcHJvYmVzX2ZvdW5kID0gMDsKLSsJCSAg YnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCi0rCSAgaWYgKGFsbF9wcm9iZXNfZm91bmQpCi0rCSAg ICB7Ci0rCSAgICAgIGluZm8tPnVzaW5nX3Byb2JlcyA9IDE7Ci0rCi0rCSAgICAgIGZvciAoaSA9 IDA7IGkgPCBOVU1fUFJPQkVTOyBpKyspCi0rCQl7Ci0rCQkgIHN0cnVjdCBwcm9iZSAqcHJvYmU7 Ci0rCQkgIGludCBpeDsKLSsKLSsJCSAgZm9yIChpeCA9IDA7Ci0rCQkgICAgICAgVkVDX2l0ZXJh dGUgKHByb2JlX3AsIGluZm8tPnByb2Jlc1tpXSwgaXgsIHByb2JlKTsKLSsJCSAgICAgICArK2l4 KQotKwkJICAgIGNyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50IChnZGJhcmNoLCBwcm9iZS0+ YWRkcmVzcyk7Ci0rCQl9Ci0rCi0rCSAgICAgIHN2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFr cG9pbnRzICgpOwotKwkgICAgICByZXR1cm47Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKyAg Y3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKGdkYmFyY2gsIGFkZHJlc3MpOwotK30KLSsK LSAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGdkYl9iZmRfbG9va3VwX3N5bWJvbC4gICovCi0gCi0g c3RhdGljIGludAotQEAgLTE1MDEsNiArMjE0NCw5IEBAIGVuYWJsZV9icmVhayAoc3RydWN0IHN2 cjRfaW5mbyAqaW5mbywgaW4KLSAgIGluZm8tPmludGVycF90ZXh0X3NlY3RfbG93ID0gaW5mby0+ aW50ZXJwX3RleHRfc2VjdF9oaWdoID0gMDsKLSAgIGluZm8tPmludGVycF9wbHRfc2VjdF9sb3cg PSBpbmZvLT5pbnRlcnBfcGx0X3NlY3RfaGlnaCA9IDA7Ci0gCi0rICBmcmVlX3Byb2JlcyAoaW5m byk7Ci0rICBpbmZvLT51c2luZ19wcm9iZXMgPSAwOwotKwotICAgLyogSWYgd2UgYWxyZWFkeSBo YXZlIGEgc2hhcmVkIGxpYnJhcnkgbGlzdCBpbiB0aGUgdGFyZ2V0LCBhbmQKLSAgICAgIHJfZGVi dWcgY29udGFpbnMgcl9icmssIHNldCB0aGUgYnJlYWtwb2ludCB0aGVyZSAtIHRoaXMgc2hvdWxk Ci0gICAgICBtZWFuIHJfYnJrIGhhcyBhbHJlYWR5IGJlZW4gcmVsb2NhdGVkLiAgQXNzdW1lIHRo ZSBkeW5hbWljIGxpbmtlcgotQEAgLTE1MzIsNyArMjE3OCw3IEBAIGVuYWJsZV9icmVhayAoc3Ry dWN0IHN2cjRfaW5mbyAqaW5mbywgaW4KLSAJIFRoYXQga25vd2xlZGdlIGlzIGVuY29kZWQgaW4g dGhlIGFkZHJlc3MsIGlmIGl0J3MgVGh1bWIgdGhlIGxvdyBiaXQKLSAJIGlzIDEuICBIb3dldmVy LCB3ZSd2ZSBzdHJpcHBlZCB0aGF0IGluZm8gYWJvdmUgYW5kIGl0J3Mgbm90IGNsZWFyCi0gCSB3 aGF0IGFsbCB0aGUgY29uc2VxdWVuY2VzIGFyZSBvZiBwYXNzaW5nIGEgbm9uLWFkZHJfYml0c19y ZW1vdmUnZAotLQkgYWRkcmVzcyB0byBjcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludC4gIFRo ZSBjYWxsIHRvCi0rCSBhZGRyZXNzIHRvIHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9p bnRzLiAgVGhlIGNhbGwgdG8KLSAJIGZpbmRfcGNfc2VjdGlvbiB2ZXJpZmllcyB3ZSBrbm93IGFi b3V0IHRoZSBhZGRyZXNzIGFuZCBoYXZlIHNvbWUKLSAJIGhvcGUgb2YgY29tcHV0aW5nIHRoZSBy aWdodCBraW5kIG9mIGJyZWFrcG9pbnQgdG8gdXNlICh2aWEKLSAJIHN5bWJvbCBpbmZvKS4gIEl0 IGRvZXMgbWVhbiB0aGF0IEdEQiBuZWVkcyB0byBiZSBwb2ludGVkIGF0IGEKLUBAIC0xNTcwLDcg KzIyMTYsNyBAQCBlbmFibGVfYnJlYWsgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8sIGluCi0gCQkr IGJmZF9zZWN0aW9uX3NpemUgKHRtcF9iZmQsIGludGVycF9zZWN0KTsKLSAJICAgIH0KLSAKLS0J ICBjcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludCAodGFyZ2V0X2dkYmFyY2ggKCksIHN5bV9h ZGRyKTsKLSsJICBzdnI0X2NyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cyAodGFyZ2V0X2dk YmFyY2ggKCksIHN5bV9hZGRyKTsKLSAJICByZXR1cm4gMTsKLSAJfQotICAgICB9Ci1AQCAtMTcy OCw3ICsyMzc0LDggQEAgZW5hYmxlX2JyZWFrIChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBpbgot IAotICAgICAgIGlmIChzeW1fYWRkciAhPSAwKQotIAl7Ci0tCSAgY3JlYXRlX3NvbGliX2V2ZW50 X2JyZWFrcG9pbnQgKHRhcmdldF9nZGJhcmNoICgpLCBsb2FkX2FkZHIgKyBzeW1fYWRkcik7Ci0r CSAgc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHMgKHRhcmdldF9nZGJhcmNoICgp LAotKwkJCQkJICAgICAgIGxvYWRfYWRkciArIHN5bV9hZGRyKTsKLSAJICB4ZnJlZSAoaW50ZXJw X25hbWUpOwotIAkgIHJldHVybiAxOwotIAl9Ci1AQCAtMTc1NCw3ICsyNDAxLDcgQEAgZW5hYmxl X2JyZWFrIChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBpbgotIAkgIHN5bV9hZGRyID0gZ2RiYXJj aF9jb252ZXJ0X2Zyb21fZnVuY19wdHJfYWRkciAodGFyZ2V0X2dkYmFyY2ggKCksCi0gCQkJCQkJ CSBzeW1fYWRkciwKLSAJCQkJCQkJICZjdXJyZW50X3RhcmdldCk7Ci0tCSAgY3JlYXRlX3NvbGli X2V2ZW50X2JyZWFrcG9pbnQgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7Ci0rCSAgc3Zy NF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHMgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1f YWRkcik7Ci0gCSAgcmV0dXJuIDE7Ci0gCX0KLSAgICAgfQotQEAgLTE3NzAsNyArMjQxNyw3IEBA IGVuYWJsZV9icmVhayAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgaW4KLSAJICAgICAgc3ltX2Fk ZHIgPSBnZGJhcmNoX2NvbnZlcnRfZnJvbV9mdW5jX3B0cl9hZGRyICh0YXJnZXRfZ2RiYXJjaCAo KSwKLSAJCQkJCQkJICAgICBzeW1fYWRkciwKLSAJCQkJCQkJICAgICAmY3VycmVudF90YXJnZXQp OwotLQkgICAgICBjcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludCAodGFyZ2V0X2dkYmFyY2gg KCksIHN5bV9hZGRyKTsKLSsJICAgICAgc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2lu dHMgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7Ci0gCSAgICAgIHJldHVybiAxOwotIAkg ICAgfQotIAl9Ci1AQCAtMjI2Niw2ICsyOTEzLDkgQEAgc3ZyNF9zb2xpYl9jcmVhdGVfaW5mZXJp b3JfaG9vayAoaW50IGZybwotIAotICAgaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7Ci0gCi0rICAv KiBGcmVlIHRoZSBwcm9iZXMtYmFzZWQgaW50ZXJmYWNlJ3MgbmFtZXNwYWNlIHRhYmxlLiAgKi8K LSsgIGZyZWVfbmFtZXNwYWNlX3RhYmxlIChpbmZvKTsKLSsKLSAgIC8qIFJlbG9jYXRlIHRoZSBt YWluIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5LiAgKi8KLSAgIHN2cjRfcmVsb2NhdGVfbWFpbl9l eGVjdXRhYmxlICgpOwotIAotQEAgLTI1MDcsNCArMzE1Nyw2IEBAIF9pbml0aWFsaXplX3N2cjRf c29saWIgKHZvaWQpCi0gICBzdnI0X3NvX29wcy5sb29rdXBfbGliX2dsb2JhbF9zeW1ib2wgPSBl bGZfbG9va3VwX2xpYl9zeW1ib2w7Ci0gICBzdnI0X3NvX29wcy5zYW1lID0gc3ZyNF9zYW1lOwot ICAgc3ZyNF9zb19vcHMua2VlcF9kYXRhX2luX2NvcmUgPSBzdnI0X2tlZXBfZGF0YV9pbl9jb3Jl OwotKyAgc3ZyNF9zb19vcHMuaGFuZGxlX3NvbGliX2V2ZW50ID0gc3ZyNF9oYW5kbGVfc29saWJf ZXZlbnQ7Ci0rICBzdnI0X3NvX29wcy51cGRhdGVfYnJlYWtwb2ludHMgPSBzdnI0X3VwZGF0ZV9z b2xpYl9ldmVudF9icmVha3BvaW50czsKLSB9Ci1JbmRleDogZ2RiLTcuNS41MC4yMDEzMDIxNS9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLWRsbW9wZW4tc29saWIuYwotPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGdk Yi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1kbG1vcGVuLXNv bGliLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjE0MTc1OTYgKzAxMDAKLUBAIC0wLDAgKzEsMjQg QEAKLSsvKiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsK LSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rI2luY2x1ZGUg PHN0ZGlvLmg+Ci0rCi0raW50Ci0rZm9vIChpbnQgbikKLSt7Ci0rICBwcmludGYgKCJmb28gJWRc biIsIG4pOwotKwotKyAgcmV0dXJuIDA7Ci0rfQotSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAyMTUv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1kbG1vcGVuLmMKLT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAv ZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41 LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstZGxtb3Blbi5jCTIwMTMt MDItMTUgMjI6Mzc6MzUuNzYyNDE3NTk4ICswMTAwCi1AQCAtMCwwICsxLDU4IEBACi0rLyogQ29w eXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK LSsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNkZWZpbmUgX0dOVV9TT1VSQ0UK LSsjaW5jbHVkZSA8ZGxmY24uaD4KLSsKLSt2b2lkCi0rc3RvcCAoKQotK3sKLSt9Ci0rCi0raW50 Ci0rbWFpbiAoKQotK3sKLSsgIHZvaWQgKmhhbmRsZTEsICpoYW5kbGUyLCAqaGFuZGxlMzsKLSsg IHZvaWQgKCpmdW5jKShpbnQpOwotKwotKyAgaGFuZGxlMSA9IGRsbW9wZW4gKExNX0lEX05FV0xN LCBTSExJQl9OQU1FLCBSVExEX0xBWlkpOwotKyAgc3RvcCAoKTsKLSsKLSsgIGZ1bmMgPSAodm9p ZCAoKikoaW50KSkgZGxzeW0gKGhhbmRsZTEsICJmb28iKTsKLSsgIGZ1bmMgKDEpOwotKwotKyAg aGFuZGxlMiA9IGRsbW9wZW4gKExNX0lEX05FV0xNLCBTSExJQl9OQU1FLCBSVExEX0xBWlkpOwot KyAgc3RvcCAoKTsKLSsKLSsgIGZ1bmMgPSAodm9pZCAoKikoaW50KSkgZGxzeW0gKGhhbmRsZTIs ICJmb28iKTsKLSsgIGZ1bmMgKDIpOwotKwotKyAgaGFuZGxlMyA9IGRsb3BlbiAoU0hMSUJfTkFN RSwgUlRMRF9MQVpZKTsKLSsgIHN0b3AgKCk7Ci0rCi0rICBmdW5jID0gKHZvaWQgKCopKGludCkp IGRsc3ltIChoYW5kbGUzLCAiZm9vIik7Ci0rICBmdW5jICgzKTsKLSsKLSsgIGRsY2xvc2UgKGhh bmRsZTEpOwotKyAgc3RvcCAoKTsKLSsKLSsgIGRsY2xvc2UgKGhhbmRsZTIpOwotKyAgc3RvcCAo KTsKLSsKLSsgIGRsY2xvc2UgKGhhbmRsZTMpOwotKyAgc3RvcCAoKTsKLSsKLSsgIHJldHVybiAw OwotK30KLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv YnJlYWstZGxtb3Blbi5leHAKK1RoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgdGVzdHN1aXRlIHRvIGNv cGUgd2l0aCBzb21lIGNoYW5nZXMgcmVzdWx0aW5nCitmcm9tIHRoZSBwcm9iZXMtYmFzZWQgaW50 ZXJmYWNlLCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiAgVGhpcyBwYXRjaCBpcworcHJpbmNpcGFsbHkg dGhlIHdvcmsgb2YgSmFuIEtyYXRvY2h2aWwuCisKKy0tSVlWOWNScjJ1NnJqY1A0QgorQ29udGVu dC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9u OiBhdHRhY2htZW50OyBmaWxlbmFtZT0icnRsZC1wcm9iZXMtNi10ZXN0cy1qay5wYXRjaCIKKwor MjAxMy0wNS0xNiAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgor CSAgICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVkaGF0LmNvbT4KKworCSogbGliL2dkYi5leHAg KGJ1aWxkX2V4ZWN1dGFibGVfZnJvbV9zcGVjcyk6IFVzZSBnZGJfY29tcGlsZV9wdGhyZWFkLAor CWdkYl9jb21waWxlX3NobGliIG9yIGdkYl9jb21waWxlX3NobGliX3B0aHJlYWRzIHdoZXJlIGFw cHJvcHJpYXRlLgorCSogbGliL3ByZWxpbmstc3VwcG9ydC5leHAgKGJ1aWxkX2V4ZWN1dGFibGVf b3duX2xpYnMpOiBBbGxvdyBJTlRFUlAKKwl0byBiZSBzZXQgdG8gIm5vIiB0byBpbmRpY2F0ZSB0 aGF0IG5vIGxkLnNvIGNvcHkgc2hvdWxkIGJlIG1hZGUuCisJKiBnZGIuYmFzZS9icmVhay1pbnRl cnAuZXhwIChzb2xpYl9icCk6IE5ldyBjb25zdGFudC4KKwkocmVhY2hfMSk6IFVzZSB0aGUgYWJv dmUgaW5zdGVhZCBvZiAiX2RsX2RlYnVnX3N0YXRlIi4KKwkodGVzdF9hdHRhY2gpOiBMaWtld2lz ZS4KKwkodGVzdF9sZCk6IExpa2V3aXNlLgorCSogZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJl YWQuZXhwOiBOZXcgZmlsZS4KKwkqIGdkYi50aHJlYWRzL2Rsb3Blbi1saWJwdGhyZWFkLmM6IExp a2V3aXNlLgorCSogZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJlYWQtbGliLmM6IExpa2V3aXNl LgorCSogZ2RiLmJhc2Uvc29saWItY29ycnVwdGVkLmV4cDogRGlzYWJsZSB0ZXN0IGlmIEdEQiBp cyB1c2luZyBwcm9iZXMuCisKK0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvbGliL2dkYi5l eHAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAw MDAgKzAwMDAKLSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv YnJlYWstZGxtb3Blbi5leHAJMjAxMy0wMi0xNSAyMjozNzozNS43NjI0MTc1OTggKzAxMDAKLUBA IC0wLDAgKzEsMTI1IEBACi0rIyBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KLSsKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK LSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0r IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0raWYgeyBbc2tp cF9zaGxpYl90ZXN0c10gfHwgW2lzX3JlbW90ZSB0YXJnZXRdIH0gewotKyAgICByZXR1cm4gMAot K30KLSsKLStzdGFuZGFyZF90ZXN0ZmlsZQotKwotK3NldCBsaWJuYW1lICR0ZXN0ZmlsZS1zb2xp YgotK3NldCBzcmNmaWxlX2xpYiAkc3JjZGlyLyRzdWJkaXIvJGxpYm5hbWUuYwotK3NldCBiaW5m aWxlX2xpYiBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGxpYm5hbWUuc29dCi0rCi0rc2V0IG5vcm1h bF9icCAiX2RsX2RlYnVnX3N0YXRlIgotK3NldCBwcm9iZXNfYnAgImRsX21haW4iCi0rCi0raWYg eyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHNyY2ZpbGVfbGliICRiaW5maWxlX2xpYiBcCi0rCSAgW2xp c3QgYWRkaXRpb25hbF9mbGFncz0tZlBJQ11dICE9ICIiIH0gewotKyAgICB1bnRlc3RlZCAiQ291 bGQgbm90IGNvbXBpbGUgJGJpbmZpbGVfbGliLiIKLSsgICAgcmV0dXJuIC0xCi0rfQotKwotK2lm IHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHRlc3RmaWxlLmV4cCAkdGVzdGZpbGUgJHNyY2ZpbGUg XAotKwkgIFtsaXN0IGFkZGl0aW9uYWxfZmxhZ3M9LURTSExJQl9OQU1FXD1cIiRiaW5maWxlX2xp YlwiIGxpYnM9LWxkbF1dIH0gewotKyAgICByZXR1cm4gLTEKLSt9CistLS0gZ2RiLTcuNi5vcmln L2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAJMjAxMy0wNS0xOSAxNjowNTozNy44ODE4NDA2NDYg KzAyMDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAJMjAxMy0wNS0xOSAx NjowNjoxMC40MzY4MjI5NjQgKzAyMDAKK0BAIC00MDExLDIyICs0MDExLDYgQEAgcHJvYyBidWls ZF9leGVjdXRhYmxlX2Zyb21fc3BlY3Mge3Rlc3RuYQorIAorICAgICBzZXQgYmluZmlsZSBbc3Rh bmRhcmRfb3V0cHV0X2ZpbGUgJGV4ZWN1dGFibGVdCisgCistICAgIHNldCBvYmplY3RzIHt9Cist ICAgIHNldCBpIDAKKy0gICAgZm9yZWFjaCB7cyBsb2NhbF9vcHRpb25zfSAkYXJncyB7CistICAg ICAgICBpZiAgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzfSIgIiR7Ymlu ZmlsZX0ke2l9Lm8iIG9iamVjdCAkbG9jYWxfb3B0aW9uc10gIT0gIiIgfSB7CistICAgICAgICAg ICAgdW50ZXN0ZWQgJHRlc3RuYW1lCistICAgICAgICAgICAgcmV0dXJuIC0xCistICAgICAgICB9 CistICAgICAgICBsYXBwZW5kIG9iamVjdHMgIiR7YmluZmlsZX0ke2l9Lm8iCistCWluY3IgaQor LSAgICB9CistICAgIAorLSAgICBpZiAgeyBbZ2RiX2NvbXBpbGUgJG9iamVjdHMgIiR7YmluZmls ZX0iIGV4ZWN1dGFibGUgJG9wdGlvbnNdICE9ICIiIH0geworLSAgICAgICAgdW50ZXN0ZWQgJHRl c3RuYW1lCistICAgICAgICByZXR1cm4gLTEKKy0gICAgfQorLQorICAgICBzZXQgaW5mb19vcHRp b25zICIiCisgICAgIGlmIHsgW2xzZWFyY2ggLWV4YWN0ICRvcHRpb25zICJjKysiXSA+PSAwIH0g eworIAlzZXQgaW5mb19vcHRpb25zICJjKysiCitAQCAtNDAzNCw2ICs0MDE4LDQyIEBAIHByb2Mg YnVpbGRfZXhlY3V0YWJsZV9mcm9tX3NwZWNzIHt0ZXN0bmEKKyAgICAgaWYgW2dldF9jb21waWxl cl9pbmZvICR7aW5mb19vcHRpb25zfV0geworICAgICAgICAgcmV0dXJuIC0xCisgICAgIH0KICsK LSsjIFJ1biAiaW5mbyBzaGFyZWRsaWJyYXJ5IiBhbmQgY2hlY2sgb3VyIGxpYnJhcnkgaXMgc2hv d24gdGhlIGV4cGVjdGVkCi0rIyBudW1iZXIgb2YgdGltZXMuCi0rcHJvYyBjaGVja19pbmZvX3No YXJlZCB7IHRlc3QgZXhwZWN0IH0gewotKyAgICBnbG9iYWwgbGlibmFtZQotKyAgICBnbG9iYWwg Z2RiX3Byb21wdAorKyAgICBzZXQgYmluZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGV4ZWN1 dGFibGVdCiArCi0rICAgIHNldCBhY3R1YWwgMAorKyAgICBzZXQgZnVuYyBnZGJfY29tcGlsZQor KyAgICBzZXQgZnVuY19pbmRleCBbbHNlYXJjaCAtcmVnZXhwICRvcHRpb25zIHteKHB0aHJlYWRz fHNobGlifHNobGliX3B0aHJlYWRzKSR9XQorKyAgICBpZiB7JGZ1bmNfaW5kZXggIT0gLTF9IHsK KysJc2V0IGZ1bmMgIiR7ZnVuY31fW2xpbmRleCAkb3B0aW9ucyAkZnVuY19pbmRleF0iCisrICAg IH0KICsKLSsgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgImluZm8gc2hhcmVkbGlicmFyeSIgJHRlc3Qg ewotKwktcmUgJGxpYm5hbWUgewotKwkgICAgaW5jciBhY3R1YWwgMQotKwkgICAgZXhwX2NvbnRp bnVlCisrICAgICMgZ2RiX2NvbXBpbGVfc2hsaWIgYW5kIGdkYl9jb21waWxlX3NobGliX3B0aHJl YWRzIGRvIG5vdCB1c2UgdGhlIDNyZAorKyAgICAjIHBhcmFtZXRlci4gIFRoZXkgYWxzbyByZXF1 aXJlcyAkc291cmNlcyB3aGlsZSBnZGJfY29tcGlsZSBhbmQKKysgICAgIyBnZGJfY29tcGlsZV9w dGhyZWFkcyByZXF1aXJlICRvYmplY3RzLiAgTW9yZW92ZXIgdGhleSBpZ25vcmUgYW55IG9wdGlv bnMuCisrICAgIGlmIFtzdHJpbmcgbWF0Y2ggZ2RiX2NvbXBpbGVfc2hsaWIqICRmdW5jXSB7Cisr CXNldCBzb3VyY2VzX3BhdGgge30KKysJZm9yZWFjaCB7cyBsb2NhbF9vcHRpb25zfSAkYXJncyB7 CisrCSAgICBsYXBwZW5kIHNvdXJjZXNfcGF0aCAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3N9Igog Kwl9Ci0rCS1yZSAiXHJcbiRnZGJfcHJvbXB0ICQiIHsKLSsJICAgIGlmIHsgJGFjdHVhbCA9PSAk ZXhwZWN0IH0gewotKwkJcGFzcyAkdGVzdAotKwkgICAgfSBlbHNlIHsKLSsJCWZhaWwgJHRlc3QK KysJc2V0IHJldCBbJGZ1bmMgJHNvdXJjZXNfcGF0aCAiJHtiaW5maWxlfSIgJG9wdGlvbnNdCisr ICAgIH0gZWxzZSB7CisrCXNldCBvYmplY3RzIHt9CisrCXNldCBpIDAKKysJZm9yZWFjaCB7cyBs b2NhbF9vcHRpb25zfSAkYXJncyB7CisrCSAgICBpZiAgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGly fS8ke3N1YmRpcn0vJHtzfSIgIiR7YmluZmlsZX0ke2l9Lm8iIG9iamVjdCAkbG9jYWxfb3B0aW9u c10gIT0gIiIgfSB7CisrCQl1bnRlc3RlZCAkdGVzdG5hbWUKKysJCXJldHVybiAtMQogKwkgICAg fQorKwkgICAgbGFwcGVuZCBvYmplY3RzICIke2JpbmZpbGV9JHtpfS5vIgorKwkgICAgaW5jciBp CiArCX0KKysJc2V0IHJldCBbJGZ1bmMgJG9iamVjdHMgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUg JG9wdGlvbnNdCisrICAgIH0KKysgICAgaWYgIHsgJHJldCAhPSAiIiB9IHsKKysgICAgICAgIHVu dGVzdGVkICR0ZXN0bmFtZQorKyAgICAgICAgcmV0dXJuIC0xCiArICAgIH0KLSt9Ci0rCi0rIyBF bmFibGUgc3RvcC1vbi1zb2xpYi1ldmVudHMKLStnZGJfdGVzdF9ub19vdXRwdXQgInNldCBzdG9w LW9uLXNvbGliLWV2ZW50cyAxIgotKwotKyMgUnVuIHRvIHRoZSBmaXJzdCBzdG9wCi0rZ2RiX3Rl c3QgInJ1biIgIi4qU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnQuKiIKICsKLSsj IFhGQUlMIGlmIHdlIGFyZSBub3QgdXNpbmcgcHJvYmVzCi0rc2V0IHRlc3QgImVuc3VyZSB1c2lu ZyBwcm9iZXMiCi0rc2V0IHVzaW5nX3Byb2JlcyAwCi0rZ2RiX3Rlc3RfbXVsdGlwbGUgImJ0IiAk dGVzdCB7Ci0rICAgIC1yZSAiIzAgK1xbXlxyXG5cXSpcXG0oX19HSV8pPyRub3JtYWxfYnBcXE0u KiRnZGJfcHJvbXB0ICQiIHsKLSsJeGZhaWwgJHRlc3QKKyAgICAgcmV0dXJuIDAKKyB9CisgCitJ bmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2xpYi9wcmVsaW5rLXN1cHBvcnQuZXhwCis9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi90ZXN0c3VpdGUvbGliL3ByZWxpbmstc3VwcG9y dC5leHAJMjAxMy0wNS0xOSAxNjowNTozNy44ODE4NDA2NDYgKzAyMDAKKysrKyBnZGItNy42L2dk Yi90ZXN0c3VpdGUvbGliL3ByZWxpbmstc3VwcG9ydC5leHAJMjAxMy0wNS0xOSAxNjowNTozOS4x MDA4Mzk5ODAgKzAyMDAKK0BAIC05NSw4ICs5NSw5IEBAIHByb2MgZmlsZV9jb3B5IHtzcmMgZGVz dH0geworICMgV3JhcCBmdW5jdGlvbiBidWlsZF9leGVjdXRhYmxlIHNvIHRoYXQgdGhlIHJlc3Vs dGluZyBleGVjdXRhYmxlIGlzIGZ1bGx5CisgIyBzZWxmLXN1ZmZpY2llbnQgKHdpdGhvdXQgZGVw ZW5kZW5jaWVzIG9uIHN5c3RlbSBsaWJyYXJpZXMpLiAgUGFyYW1ldGVyCisgIyBJTlRFUlAgbWF5 IGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxvYWRlciAobGQuc28pIHRvIGJlIHVzZWQgdGhhdCBpcwor LSMgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgc3lzdGVtIG9uZS4gIExpYnJhcmllcyBvbiB3 aGljaCB0aGUgZXhlY3V0YWJsZQorLSMgZGVwZW5kcyBhcmUgY29waWVkIGludG8gZGlyZWN0b3J5 IERJUi4gIERlZmF1bHQgRElSIHZhbHVlIHRvCisrIyBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVs dCBzeXN0ZW0gb25lLiAgSU5URVJQIGNhbiBiZSBzZXQgdG8gIm5vIiBpZiBubyBsZC5zbworKyMg Y29weSBzaG91bGQgYmUgbWFkZS4gIExpYnJhcmllcyBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBk ZXBlbmRzIGFyZSBjb3BpZWQKKysjIGludG8gZGlyZWN0b3J5IERJUi4gIERlZmF1bHQgRElSIHZh bHVlIHRvCisgIyBgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke0VYRUNVVEFCTEV9LmQnLgorICMKKyAj IEluIGNhc2Ugb2Ygc3VjY2VzcywgcmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFyZ3Vt ZW50cyB0byBiZSB1c2VkCitAQCAtMTUxLDggKzE1MiwxNSBAQCBwcm9jIGJ1aWxkX2V4ZWN1dGFi bGVfb3duX2xpYnMge3Rlc3RuYW1lCisgCisgICAgIGlmIHskaW50ZXJwID09ICIifSB7CisgCXNl dCBpbnRlcnBfc3lzdGVtIFtzZWN0aW9uX2dldCAkYmluZmlsZSAuaW50ZXJwXQorLQlzZXQgaW50 ZXJwICR7ZGlyfS9bZmlsZSB0YWlsICRpbnRlcnBfc3lzdGVtXQorLQlmaWxlX2NvcHkgJGludGVy cF9zeXN0ZW0gJGludGVycAorKwlpZiB7JGludGVycF9zeXN0ZW0gPT0gIiJ9IHsKKysJICAgIGZh aWwgIiR0ZXN0IGNvdWxkIG5vdCBmaW5kIC5pbnRlcnAiCisrCX0gZWxzZSB7CisrCSAgICBzZXQg aW50ZXJwICR7ZGlyfS9bZmlsZSB0YWlsICRpbnRlcnBfc3lzdGVtXQorKwkgICAgZmlsZV9jb3B5 ICRpbnRlcnBfc3lzdGVtICRpbnRlcnAKKysJfQogKyAgICB9Ci0rICAgIC1yZSAiIzAgK1xbXlxy XG5cXSpcXG0oX19HSV8pPyRwcm9iZXNfYnBcXE0uKiRnZGJfcHJvbXB0ICQiIHsKLSsJcGFzcyAk dGVzdAotKwlzZXQgdXNpbmdfcHJvYmVzIDEKKysgICAgaWYgeyRpbnRlcnAgPT0gIm5vIn0gewor KwlzZXQgaW50ZXJwICIiCisgICAgIH0KKyAKKyAgICAgc2V0IGRlc3RzIHt9CitAQCAtMTY0LDEz ICsxNzIsMTkgQEAgcHJvYyBidWlsZF9leGVjdXRhYmxlX293bl9saWJzIHt0ZXN0bmFtZQorIAor ICAgICAjIERvIG5vdCBsYXBwZW5kIGl0IHNvIHRoYXQgIi1ycGF0aCAkZGlyIiBvdmVycmlkZXMg YW55IHBvc3NpYmxlICItcnBhdGgicworICAgICAjIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyIHRv IGJlIGFibGUgdG8gbGluayBpdCBmb3IgbGRkIiBhYm92ZS4KKy0gICAgc2V0IG9wdGlvbnMgW2xp bnNlcnQgJG9wdGlvbnMgMCAibGRmbGFncz0tV2wsLS1keW5hbWljLWxpbmtlciwkaW50ZXJwLC1y cGF0aCwkZGlyIl0KKysgICAgc2V0IG9wdGlvbnMgW2xpbnNlcnQgJG9wdGlvbnMgMCAibGRmbGFn cz0tV2wsLXJwYXRoLCRkaXIiXQorKyAgICBpZiB7JGludGVycCAhPSAiIn0geworKwlzZXQgb3B0 aW9ucyBbbGluc2VydCAkb3B0aW9ucyAwICJsZGZsYWdzPS1XbCwtLWR5bmFtaWMtbGlua2VyLCRp bnRlcnAiXQogKyAgICB9Ci0rfQotKwotK2lmIHsgJHVzaW5nX3Byb2JlcyB9IHsKLSsgICAgIyBT ZXQgdXAgYnJlYWtwb2ludHMuCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAic2V0IHN0b3Atb24t c29saWItZXZlbnRzIDAiCi0rICAgIGdkYl90ZXN0ICJicmVhayBzdG9wIiB7QnJlYWtwb2ludCBb MC05XSsgYXQgLip9Ci0rICAgIGdkYl90ZXN0X25vX291dHB1dCAic2V0IGJyZWFrcG9pbnQgcGVu ZGluZyBvbiIKLSsgICAgZ2RiX3Rlc3QgImJyZWFrIGZvbyIge0JyZWFrcG9pbnQgWzAtOV0rIFwo Zm9vXCkgcGVuZGluZ1wufQotKwotKyAgICAjIENoZWNrIG91ciBsaWJyYXJ5IGlzbid0IGxvYWRl ZC4KLSsgICAgY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjMSIgMAotKwot KyAgICAjIFJ1biB0byB0aGUgZmlyc3Qgc3RvcCBhbmQgY2hlY2sgb3VyIGxpYnJhcnkgbG9hZGVk LgotKyAgICBnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9 Ci0rICAgIGNoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzIiIDEKLSsKLSsg ICAgIyBUaGUgbmV4dCBzdG9wIHNob3VsZCBiZSB0aGUgZnVuY3Rpb24gaW4gdGhlIGxpYnJhcnku Ci0rICAgIGdkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIGZvbyBcKFwpIGZy b20gLip9Ci0rCi0rICAgICMgUnVuIHRvIHRoZSBuZXh0IHN0b3AgYW5kIGNoZWNrIG91ciBsaWJy YXJ5IGlzIG5vdyBsb2FkZWQgdHdpY2UuCi0rICAgIGdkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBb MC05XSssIC4qIGluIHN0b3AgXChcKX0KLSsgICAgY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hh cmVkbGlicmFyeSAjMyIgMgotKwotKyAgICAjIFRoZSBuZXh0IHN0b3Agc2hvdWxkIGJlIHRoZSBm dW5jdGlvbiBpbiB0aGUgbGlicmFyeS4KLSsgICAgZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFsw LTldKywgLiogaW4gZm9vIFwoXCkgZnJvbSAuKn0KLSsKLSsgICAgIyBSdW4gdG8gdGhlIG5leHQg c3RvcCBhbmQgY2hlY2sgb3VyIGxpYnJhcnkgaXMgbm93IGxvYWRlZCB0aHJlZQotKyAgICAjIHRp bWVzLgotKyAgICBnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwo XCl9Ci0rICAgIGNoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzQiIDMKLSsK LSsgICAgIyBUaGUgbmV4dCBzdG9wIHNob3VsZCBiZSB0aGUgZnVuY3Rpb24gaW4gdGhlIGxpYnJh cnkuCi0rICAgIGdkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIGZvbyBcKFwp IGZyb20gLip9Ci0rCi0rICAgICMgUnVuIHRvIHRoZSBuZXh0IHN0b3AgYW5kIGNoZWNrIG91ciBs aWJyYXJ5IGlzIG5vdyBsb2FkZWQgdHdpY2UuCi0rICAgIGdkYl90ZXN0ICJjIiB7QnJlYWtwb2lu dCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0KLSsgICAgY2hlY2tfaW5mb19zaGFyZWQgImluZm8g c2hhcmVkbGlicmFyeSAjNSIgMgotKwotKyAgICAjIFJ1biB0byB0aGUgbmV4dCBzdG9wIGFuZCBj aGVjayBvdXIgbGlicmFyeSBpcyBub3cgbG9hZGVkIG9uY2UuCi0rICAgIGdkYl90ZXN0ICJjIiB7 QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0KLSsgICAgY2hlY2tfaW5mb19zaGFy ZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNiIgMQotKwotKyAgICAjIFJ1biB0byB0aGUgbmV4dCBz dG9wIGFuZCBjaGVjayBvdXIgbGlicmFyeSBpcyBub3QgbG9hZGVkLgotKyAgICBnZGJfdGVzdCAi YyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9Ci0rICAgIGNoZWNrX2luZm9f c2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzciIDAKLSt9Ci1JbmRleDogZ2RiLTcuNS41MC4y MDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLWludGVycC5leHAKKyAKKyAgICAg aWYge1tidWlsZF9leGVjdXRhYmxlICR0ZXN0bmFtZSAkZXhlY3V0YWJsZSAkc291cmNlcyAkb3B0 aW9uc10gPT0gLTF9IHsKKyAJcmV0dXJuICIiCisgICAgIH0KKyAKKy0gICAgc2V0IHByZWxpbmtf YXJncyAiLS1keW5hbWljLWxpbmtlcj0kaW50ZXJwIC0tbGQtbGlicmFyeS1wYXRoPSRkaXIgJGJp bmZpbGUgJGludGVycCBbY29uY2F0ICRkZXN0c10iCisrICAgIHNldCBwcmVsaW5rX2FyZ3MgIi0t bGQtbGlicmFyeS1wYXRoPSRkaXIgJGJpbmZpbGUgW2NvbmNhdCAkZGVzdHNdIgorKyAgICBpZiB7 JGludGVycCAhPSAiIn0geworKwlzZXQgcHJlbGlua19hcmdzICItLWR5bmFtaWMtbGlua2VyPSRp bnRlcnAgJHByZWxpbmtfYXJncyAkaW50ZXJwIgorKyAgICB9CisgICAgIHJldHVybiAkcHJlbGlu a19hcmdzCisgfQorIAorSW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVh ay1pbnRlcnAuZXhwCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2RiLTcuNS41MC4yMDEzMDIxNS5vcmlnL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstaW50ZXJwLmV4cAkyMDEzLTAxLTAxIDA3OjMzOjI1 LjAwMDAwMDAwMCArMDEwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYmFzZS9icmVhay1pbnRlcnAuZXhwCTIwMTMtMDItMTUgMjI6Mzc6MzUuNzYyNDE3NTk4ICsw MTAwCistLS0gZ2RiLTcuNi5vcmlnL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstaW50ZXJw LmV4cAkyMDEzLTA1LTE5IDE2OjA1OjM3Ljg4Mjg0MDY0NiArMDIwMAorKysrIGdkYi03LjYvZ2Ri L3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1pbnRlcnAuZXhwCTIwMTMtMDUtMTkgMTY6MDU6Mzku MTAxODM5OTc5ICswMjAwCiBAQCAtMTA5LDEyICsxMDksMTkgQEAgcHJvYyBzdHJpcF9kZWJ1ZyB7 ZGVzdH0gewogICAgICB9CiAgfQpAQCAtMTU5MSw3MyArMjU1LDEzIEBAIEluZGV4OiBnZGItNy41 LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstaW50ZXJwLmV4cAogIAog IAkgICAgIyBVc2UgdHdvIHNlcGFyYXRlIGdkYl90ZXN0X211bHRpcGxlIHN0YXRlbWVudHMgdG8g YXZvaWQgdGltZW91dHMgZHVlCiAgCSAgICAjIHRvIHNsb3cgcHJvY2Vzc2luZyBvZiB3aWxkY2Fy ZCBjYXB0dXJpbmcgbG9uZyBvdXRwdXQKLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLXNvbGliLmMKLT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAv ZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41 LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLXNvbGliLmMJ MjAxMy0wMi0xNSAyMjozNzozNS43NjI0MTc1OTggKzAxMDAKLUBAIC0wLDAgKzEsMjQgQEAKLSsv KiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0r Ci0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlv Lmg+Ci0rCi0raW50Ci0rZm9vIChpbnQgbikKLSt7Ci0rICBwcmludGYgKCJmb28gJWRcbiIsIG4p OwotKwotKyAgcmV0dXJuIDA7Ci0rfQotSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuYwotPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVs bAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGdkYi03LjUuNTAuMjAx MzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuYwkyMDEzLTAyLTE1IDIy OjM3OjM1Ljc2MzQxNzYwMCArMDEwMAotQEAgLTAsMCArMSwyNiBAQAotKy8qIENvcHlyaWdodCAy MDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0r ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKLSsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQotKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSsKLSsjaW5jbHVkZSA8ZGxmY24uaD4KLSsKLStpbnQK LSttYWluICgpCi0rewotKyAgdm9pZCAqaGFuZGxlID0gZGxvcGVuIChTSExJQl9OQU1FLCBSVExE X0xBWlkpOwotKwotKyAgZGxjbG9zZSAoaGFuZGxlKTsKLSsKLSsgIHJldHVybiAwOwotK30KLUlu ZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJv YmVzLmV4cAorSW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9kbG9wZW4t bGlicHRocmVhZC5leHAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDow MDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4cAkyMDEzLTAyLTE1IDIyOjM3OjM1Ljc2MzQxNzYw MCArMDEwMAotQEAgLTAsMCArMSw3NiBAQAotKyMgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCi0rCisrKysgZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi50aHJl YWRzL2Rsb3Blbi1saWJwdGhyZWFkLmV4cAkyMDEzLTA1LTE5IDE2OjA1OjM5LjEwMTgzOTk3OSAr MDIwMAorQEAgLTAsMCArMSw3NCBAQAorKyMgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisrIwogKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICsjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiArIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgpAQCAtMTY3MSw3MyArMjc1LDczIEBAIEluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1 L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4cAogKyMgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICsj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgogKwotK2lmIHsgW3NraXBfc2hsaWJfdGVzdHNdIHx8IFtpc19yZW1vdGUg dGFyZ2V0XSB9IHsKKytpZiB7IVtpc3RhcmdldCAqLWxpbnV4Kl0gfHwgW3NraXBfc2hsaWJfdGVz dHNdfSB7CiArICAgIHJldHVybiAwCiArfQogKwotK3N0YW5kYXJkX3Rlc3RmaWxlCisrbG9hZF9s aWIgcHJlbGluay1zdXBwb3J0LmV4cAogKwotK3NldCBsaWJuYW1lICR0ZXN0ZmlsZS1zb2xpYgot K3NldCBzcmNmaWxlX2xpYiAkc3JjZGlyLyRzdWJkaXIvJGxpYm5hbWUuYwotK3NldCBiaW5maWxl X2xpYiBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGxpYm5hbWUuc29dCisrc2V0IHRlc3RmaWxlICJk bG9wZW4tbGlicHRocmVhZCIKKytzZXQgc3JjbWFpbmZpbGUgJHt0ZXN0ZmlsZX0uYworK3NldCBz cmNsaWJmaWxlICR7dGVzdGZpbGV9LWxpYi5jCisrc2V0IGV4ZWN1dGFibGUgJHt0ZXN0ZmlsZX0K KytzZXQgYmluZmlsZV9saWIgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke2V4ZWN1dGFibGV9LnNvCisr c2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke2V4ZWN1dGFibGV9Cisrc2V0IGxpYl9k bG9wZW4gW3NobGliX3RhcmdldF9maWxlICR7ZXhlY3V0YWJsZX0uc29dCiArCi0rc2V0IG5vcm1h bF9icCAiX2RsX2RlYnVnX3N0YXRlIgotK3NldCBwcm9iZXNfYnAgImRsX21haW4iCisrIyBVc2Ug YnVpbGRfZXhlY3V0YWJsZV9vd25fbGlicyBhcyBwcmVsaW5rZWQgbGlicHRocmVhZC5zbyBjYW4g cHJvZHVjZSBmYWxzZQorKyMgUEFTUyAtIGl0IGlzIE9LIGlmIEdEQiBwcm9jZXNzZXMgaXQgc3Rp bGwgYmVmb3JlIHJlbG9jYXRpb24uCiArCi0raWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHNyY2Zp bGVfbGliICRiaW5maWxlX2xpYiBcCi0rCSAgW2xpc3QgYWRkaXRpb25hbF9mbGFncz0tZlBJQ11d ICE9ICIiIH0gewotKyAgICB1bnRlc3RlZCAiQ291bGQgbm90IGNvbXBpbGUgJGJpbmZpbGVfbGli LiIKKytzZXQgcmVsaW5rX2FyZ3MgW2J1aWxkX2V4ZWN1dGFibGVfb3duX2xpYnMgJHt0ZXN0Zmls ZX0uZXhwICR7ZXhlY3V0YWJsZX0uc28gJHNyY2xpYmZpbGUge2RlYnVnIHNobGliX3B0aHJlYWRz fSBub10KKytpZiB7JHJlbGlua19hcmdzID09ICIiIHx8ICFbcHJlbGlua19ubyAkcmVsaW5rX2Fy Z3NdCisrICAgIHx8IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke2V4ZWN1 dGFibGV9ICR7c3JjbWFpbmZpbGV9IHtkZWJ1ZyBzaGxpYl9sb2FkfV0gfSB7CiArICAgIHJldHVy biAtMQogK30KKytnZGJfbG9hZF9zaGxpYnMgJGJpbmZpbGVfbGliCiArCi0raWYgeyBbcHJlcGFy ZV9mb3JfdGVzdGluZyAkdGVzdGZpbGUuZXhwICR0ZXN0ZmlsZSAkc3JjZmlsZSBcCi0rCSAgW2xp c3QgYWRkaXRpb25hbF9mbGFncz0tRFNITElCX05BTUVcPVwiJGJpbmZpbGVfbGliXCIgbGlicz0t bGRsXV0gfSB7CisraWYgeyAhW3J1bnRvX21haW5dIH0gewogKyAgICByZXR1cm4gLTEKICt9CiAr Ci0rIyBFbmFibGUgc3RvcC1vbi1zb2xpYi1ldmVudHMKLStnZGJfdGVzdF9ub19vdXRwdXQgInNl dCBzdG9wLW9uLXNvbGliLWV2ZW50cyAxIgotKwotKyMgUnVuIHRvIHRoZSBmaXJzdCBzdG9wCi0r Z2RiX3Rlc3QgInJ1biIgIi4qU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnQuKiIK LSsKLSsjIFhGQUlMIGlmIHdlIGFyZSBub3QgdXNpbmcgcHJvYmVzCi0rc2V0IHRlc3QgImVuc3Vy ZSB1c2luZyBwcm9iZXMiCi0rc2V0IHVzaW5nX3Byb2JlcyAwCi0rZ2RiX3Rlc3RfbXVsdGlwbGUg ImJ0IiAkdGVzdCB7Ci0rICAgIC1yZSAiIzAgK1xbXlxyXG5cXSpcXG0oX19HSV8pPyRub3JtYWxf YnBcXE0uKiRnZGJfcHJvbXB0ICQiIHsKKytzZXQgdGVzdCAiaW5mbyBwcm9iZXMgYWxsIHJ0bGQg cnRsZF9tYXBfY29tcGxldGUiCisrZ2RiX3Rlc3RfbXVsdGlwbGUgJHRlc3QgJHRlc3QgeworKyAg ICAtcmUgIlxbIFx0XF1ydGxkX21hcF9jb21wbGV0ZVxbIFx0XF0rMHhcWzAtOWEtZlxdKy4qXHJc biRnZGJfcHJvbXB0ICQiIHsKKysJcGFzcyAkdGVzdAorKyAgICB9CisrICAgIC1yZSAiTm8gcHJv YmVzIG1hdGNoZWRcXC5cclxuJGdkYl9wcm9tcHQgJCIgewogKwl4ZmFpbCAkdGVzdAorKwl1bnRl c3RlZCAke3Rlc3RmaWxlfS5leHAKKysJcmV0dXJuCiArICAgIH0KLSsgICAgLXJlICIjMCArXFte XHJcblxdKlxcbShfX0dJXyk/JHByb2Jlc19icFxcTS4qJGdkYl9wcm9tcHQgJCIgeworK30KKysK KytzZXQgdGVzdCAibGlicHRocmVhZC5zbyBub3QgZm91bmQiCisrZ2RiX3Rlc3RfbXVsdGlwbGUg ImluZm8gc2hhcmVkbGlicmFyeSIgJHRlc3QgeworKyAgICAtcmUgIi9saWJwdGhyZWFkXFwuc28u KlxyXG4kZ2RiX3Byb21wdCAkIiB7CisrCWZhaWwgJHRlc3QKKysgICAgfQorKyAgICAtcmUgIi9s aWJjXFwuc28uKlxyXG4kZ2RiX3Byb21wdCAkIiB7CiArCXBhc3MgJHRlc3QKLSsJc2V0IHVzaW5n X3Byb2JlcyAxCiArICAgIH0KICt9CiArCi0raWYgeyAkdXNpbmdfcHJvYmVzIH0gewotKyAgICAj IFJ1biB0aWwgaXQgbG9hZHMgb3VyIGxpYnJhcnkKLSsgICAgc2V0IHRlc3QgInJ1biB0aWwgb3Vy IGxpYnJhcnkgbG9hZHMiCi0rICAgIHNldCBsb2FkZWRfbGlicmFyeSAwCi0rICAgIHdoaWxlIHsg ISRsb2FkZWRfbGlicmFyeSB9IHsKLSsJZ2RiX3Rlc3RfbXVsdGlwbGUgImMiICR0ZXN0IHsKLSsJ ICAgIC1yZSAiSW5mZXJpb3IgbG9hZGVkICRiaW5maWxlX2xpYlxcTS4qJGdkYl9wcm9tcHQgJCIg ewotKwkJcGFzcyAkdGVzdAotKwkJc2V0IGxvYWRlZF9saWJyYXJ5IDEKLSsJICAgIH0KLSsJICAg IC1yZSAiU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnRcXE0uKiRnZGJfcHJvbXB0 ICQiIHsKLSsJICAgIH0KLSsJfQotKyAgICB9CisrZ2RiX3Rlc3QgInNldCB2YXJpYWJsZSBmaWxl bmFtZT1cIiRsaWJfZGxvcGVuXCIiCiArCi0rICAgICMgQ2FsbCBzb21ldGhpbmcgdG8gZW5zdXJl IHRoYXQgcmVsb2NhdGlvbiBvY2N1cnJlZAotKyAgICBnZGJfdGVzdCAiY2FsbCBmb28oMjMpIiAi Zm9vIDIzLipcXFwkLiogPSAuKiIKLSt9Ci1JbmRleDogZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIv dGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLXNvbGliMS5jCisrZ2RiX2JyZWFrcG9pbnQg Im5vdGlmeSIKKysKKysjIFRoZSBlcnJvciB3YXM6CisrIyBDYW5ub3QgZmluZCBuZXcgdGhyZWFk czogZ2VuZXJpYyBlcnJvcgorK2dkYl9jb250aW51ZV90b19icmVha3BvaW50ICJub3RpZnkiICIu KiBub3RpZnktaGVyZSAuKiIKKysKKytnZGJfdGVzdCAiaW5mbyBzaGFyZWRsaWJyYXJ5IiB7L2xp YnB0aHJlYWRcLnNvLip9ICJsaWJwdGhyZWFkLnNvIGZvdW5kIgorSW5kZXg6IGdkYi03LjYvZ2Ri L3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9kbG9wZW4tbGlicHRocmVhZC5jCiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAt LS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCi0rKysgZ2Ri LTcuNS41MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLXNvbGli MS5jCTIwMTMtMDItMTUgMjI6Mzc6MzUuNzYzNDE3NjAwICswMTAwCi1AQCAtMCwwICsxLDI0IEBA Ci0rLyogQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrKysg Z2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL2Rsb3Blbi1saWJwdGhyZWFkLmMJMjAx My0wNS0xOSAxNjowNTozOS4xMDE4Mzk5NzkgKzAyMDAKK0BAIC0wLDAgKzEsNDYgQEAKKysvKiBU aGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKworKyAgIENv cHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogKwogKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CiArICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE3NTIsNTAgKzM1Niw0MyBAQCBJbmRleDogZ2Ri LTcuNS41MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLXNvbGli MS5jCiArICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKICsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiArCi0rI2luY2x1ZGUgPHN0 ZGlvLmg+CisrI2luY2x1ZGUgPGRsZmNuLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNs dWRlIDxhc3NlcnQuaD4KICsKLStpbnQKLStmb28gKGludCBuKQotK3sKLSsgIHByaW50ZiAoImZv byAlZFxuIiwgbik7Cisrc3RhdGljIGNvbnN0IGNoYXIgKnZvbGF0aWxlIGZpbGVuYW1lOwogKwot KyAgcmV0dXJuIDA7Cisrc3RhdGljIHZvaWQKKytub3RpZnkgKHZvaWQpCisreworKyAgZmlsZW5h bWUgPSBOVUxMOyAvKiBub3RpZnktaGVyZSAqLwogK30KLUluZGV4OiBnZGItNy41LjUwLjIwMTMw MjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvaW5mby1zaGFyZWQtc29saWIyLmMKLT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsr KyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvaW5mby1zaGFyZWQt c29saWIyLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjM0MTc2MDAgKzAxMDAKLUBAIC0wLDAgKzEs MjQgQEAKLSsvKiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K LSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKwotKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisraW50CisrbWFpbiAodm9pZCkKKyt7CisrICB2b2lkICpoOworKyAgdm9pZCAoKmZw KSAodm9pZCAoKikgKHZvaWQpKTsKICsKLSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKysgIGFzc2VydCAoZmlsZW5hbWUgIT0gTlVMTCk7CisrICBoID0gZGxvcGVuIChmaWxlbmFt ZSwgUlRMRF9MQVpZKTsKKysgIGFzc2VydCAoaCAhPSBOVUxMKTsKICsKLSsjaW5jbHVkZSA8c3Rk aW8uaD4KKysgIGZwID0gZGxzeW0gKGgsICJmIik7CisrICBhc3NlcnQgKGZwICE9IE5VTEwpOwog KwotK2ludAotK2JhciAoaW50IG4pCi0rewotKyAgcHJpbnRmICgiYmFyICVkXG4iLCBuKTsKKysg IGZwIChub3RpZnkpOwogKwogKyAgcmV0dXJuIDA7CiArfQotSW5kZXg6IGdkYi03LjUuNTAuMjAx MzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJlZC5jCitJbmRleDogZ2RiLTcu Ni9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL2Rsb3Blbi1saWJwdGhyZWFkLWxpYi5jCiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CiAtLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAw Ci0rKysgZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hh cmVkLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjM0MTc2MDAgKzAxMDAKLUBAIC0wLDAgKzEsNDgg QEAKLSsvKiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysr KyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJlYWQtbGli LmMJMjAxMy0wNS0xOSAxNjowNTozOS4xMDE4Mzk5NzkgKzAyMDAKK0BAIC0wLDAgKzEsNDAgQEAK KysvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKwor KyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogKwogKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CiArICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE4MTAsMTgwICs0MDcsNjQgQEAgSW5k ZXg6IGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJl ZC5jCiArICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKICsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiArCi0rI2luY2x1ZGUgPGRs ZmNuLmg+CisrI2luY2x1ZGUgPHB0aHJlYWQuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CiArCi0r dm9pZAotK3N0b3AgKCkKKytzdGF0aWMgdm9pZCAqCisrdGZ1bmMgKHZvaWQgKmFyZykKICt7Cisr ICB2b2lkICgqbm90aWZ5cCkgKHZvaWQpID0gYXJnOworKworKyAgbm90aWZ5cCAoKTsKICt9CiAr Ci0raW50Ci0rbWFpbiAoKQorK3ZvaWQKKytmICh2b2lkICgqbm90aWZ5cCkgKHZvaWQpKQogK3sK LSsgIHZvaWQgKmhhbmRsZTEsICpoYW5kbGUyOwotKyAgdm9pZCAoKmZ1bmMpKGludCk7Ci0rCi0r ICBoYW5kbGUxID0gZGxvcGVuIChTSExJQjFfTkFNRSwgUlRMRF9MQVpZKTsKLSsgIHN0b3AgKCk7 Ci0rCi0rICBoYW5kbGUyID0gZGxvcGVuIChTSExJQjJfTkFNRSwgUlRMRF9MQVpZKTsKLSsgIHN0 b3AgKCk7Ci0rCi0rICBmdW5jID0gKHZvaWQgKCopKGludCkpIGRsc3ltIChoYW5kbGUxLCAiZm9v Iik7Ci0rICBmdW5jICgxKTsKLSsKLSsgIGZ1bmMgPSAodm9pZCAoKikoaW50KSkgZGxzeW0gKGhh bmRsZTIsICJiYXIiKTsKLSsgIGZ1bmMgKDIpOwotKwotKyAgZGxjbG9zZSAoaGFuZGxlMSk7Ci0r ICBzdG9wICgpOworKyAgcHRocmVhZF90IHQ7CisrICBpbnQgaTsKICsKLSsgIGRsY2xvc2UgKGhh bmRsZTIpOwotKyAgc3RvcCAoKTsKKysgIGkgPSBwdGhyZWFkX2NyZWF0ZSAoJnQsIE5VTEwsIHRm dW5jLCBub3RpZnlwKTsKKysgIGFzc2VydCAoaSA9PSAwKTsKICsKLSsgIHJldHVybiAwOworKyAg aSA9IHB0aHJlYWRfam9pbiAodCwgTlVMTCk7CisrICBhc3NlcnQgKGkgPT0gMCk7CiArfQotSW5k ZXg6IGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJl ZC5leHAKK0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItY29ycnVw dGVkLmV4cAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAw MDAwMDAwMCArMDAwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIu YmFzZS9pbmZvLXNoYXJlZC5leHAJMjAxMy0wMi0xNSAyMjozNzozNS43NjQ0MTc2MDIgKzAxMDAK LUBAIC0wLDAgKzEsMTM5IEBACi0rIyBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KLSsKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKLSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0rIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0raWYgeyBb c2tpcF9zaGxpYl90ZXN0c10gfHwgW2lzX3JlbW90ZSB0YXJnZXRdIH0gewotKyAgICByZXR1cm4g MAotK30KLSsKLStzdGFuZGFyZF90ZXN0ZmlsZQotKwotK3NldCBsaWIxbmFtZSAkdGVzdGZpbGUt c29saWIxCi0rc2V0IHNyY2ZpbGVfbGliMSAkc3JjZGlyLyRzdWJkaXIvJGxpYjFuYW1lLmMKLStz ZXQgYmluZmlsZV9saWIxIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkbGliMW5hbWUuc29dCi0rc2V0 IGRlZmluZTEgLURTSExJQjFfTkFNRVw9XCIkYmluZmlsZV9saWIxXCIKLSsKLStzZXQgbGliMm5h bWUgJHRlc3RmaWxlLXNvbGliMgotK3NldCBzcmNmaWxlX2xpYjIgJHNyY2Rpci8kc3ViZGlyLyRs aWIybmFtZS5jCi0rc2V0IGJpbmZpbGVfbGliMiBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGxpYjJu YW1lLnNvXQotK3NldCBkZWZpbmUyIC1EU0hMSUIyX05BTUVcPVwiJGJpbmZpbGVfbGliMlwiCi0r Ci0raWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHNyY2ZpbGVfbGliMSAkYmluZmlsZV9saWIxIFwK LSsJICBbbGlzdCBhZGRpdGlvbmFsX2ZsYWdzPS1mUElDXV0gIT0gIiIgfSB7Ci0rICAgIHVudGVz dGVkICJDb3VsZCBub3QgY29tcGlsZSAkYmluZmlsZV9saWIxLiIKLSsgICAgcmV0dXJuIC0xCi0r fQotKwotK2lmIHsgW2dkYl9jb21waWxlX3NobGliICRzcmNmaWxlX2xpYjIgJGJpbmZpbGVfbGli MiBcCi0rCSAgW2xpc3QgYWRkaXRpb25hbF9mbGFncz0tZlBJQ11dICE9ICIiIH0gewotKyAgICB1 bnRlc3RlZCAiQ291bGQgbm90IGNvbXBpbGUgJGJpbmZpbGVfbGliMi4iCi0rICAgIHJldHVybiAt MQotK30KLSsKLStzZXQgY2ZsYWdzICIkZGVmaW5lMSAkZGVmaW5lMiIKLStpZiB7IFtwcmVwYXJl X2Zvcl90ZXN0aW5nICR0ZXN0ZmlsZS5leHAgJHRlc3RmaWxlICRzcmNmaWxlIFwKLSsJICBbbGlz dCBhZGRpdGlvbmFsX2ZsYWdzPSRjZmxhZ3MgbGlicz0tbGRsXV0gfSB7Ci0rICAgIHJldHVybiAt MQotK30KLSsKLSsjIFJ1biAiaW5mbyBzaGFyZWRsaWJyYXJ5IiBhbmQgY2hlY2sgZm9yIHRoZSBw cmVzZW5jZSBvciBhYnNlbmNlIG9mCi0rIyBvdXIgbGlicmFyaWVzLgotK3Byb2MgY2hlY2tfaW5m b19zaGFyZWQgeyB0ZXN0IGV4cGVjdDEgZXhwZWN0MiB9IHsKLSsgICAgZ2xvYmFsIGxpYjFuYW1l Ci0rICAgIGdsb2JhbCBsaWIybmFtZQotKyAgICBnbG9iYWwgZ2RiX3Byb21wdAotKwotKyAgICBz ZXQgYWN0dWFsMSAwCi0rICAgIHNldCBhY3R1YWwyIDAKLSsKLSsgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgImluZm8gc2hhcmVkbGlicmFyeSIgJHRlc3QgewotKwktcmUgJGxpYjFuYW1lIHsKLSsJICAg IHNldCBhY3R1YWwxIDEKLSsJICAgIGV4cF9jb250aW51ZQotKwl9Ci0rCS1yZSAkbGliMm5hbWUg ewotKwkgICAgc2V0IGFjdHVhbDIgMQotKwkgICAgZXhwX2NvbnRpbnVlCi0rCX0KLSsJLXJlICJc clxuJGdkYl9wcm9tcHQgJCIgewotKwkgICAgaWYgeyAkYWN0dWFsMSA9PSAkZXhwZWN0MSAmJiAk YWN0dWFsMiA9PSAkZXhwZWN0MiB9IHsKLSsJCXBhc3MgJHRlc3QKLSsJICAgIH0gZWxzZSB7Ci0r CQlmYWlsICR0ZXN0Ci0rCSAgICB9CistLS0gZ2RiLTcuNi5vcmlnL2dkYi90ZXN0c3VpdGUvZ2Ri LmJhc2Uvc29saWItY29ycnVwdGVkLmV4cAkyMDEzLTA1LTE5IDE2OjA1OjM3Ljg4Mzg0MDY0NSAr MDIwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1jb3JydXB0ZWQu ZXhwCTIwMTMtMDUtMTkgMTY6MDU6MzkuMTAyODM5OTc4ICswMjAwCitAQCAtMzYsNiArMzYsMzMg QEAgaWYgIVtydW50b19tYWluXSB7CisgICAgIHJldHVybgorIH0KKyAKKysjIFdpdGggcHJvYmVz IGludGVyZmFjZSBHREIgbm8gbG9uZ2VyIHNjYW5zIHRoZSBpbmZlcmlvciBsaWJyYXJ5IGxpc3Qg c28gaXRzCisrIyBjb3JydXB0aW9uIGNhbm5vdCBiZSB0ZXN0ZWQuICBUaGVyZSBpcyBubyB3YXkg dG8gZGlzYWJsZSB0aGUgcHJvYmVzCisrIyBpbnRlcmZhY2UuCisrCisrc2V0IHByb2JlcyB7IGlu aXRfc3RhcnQgaW5pdF9jb21wbGV0ZSBtYXBfc3RhcnQgcmVsb2NfY29tcGxldGUgdW5tYXBfc3Rh cnQKKysJICAgICB1bm1hcF9jb21wbGV0ZSB9Cisrc2V0IHRlc3QgImluZm8gcHJvYmVzIgorK2dk Yl90ZXN0X211bHRpcGxlICR0ZXN0ICR0ZXN0IHsKKysgICAgLXJlICJecnRsZFxbIFx0XF0rKD86 cnRsZF8pPyhcW2Etel9cXSspXFsgXHRcXSIgeworKwlzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAk cHJvYmVzICRleHBlY3Rfb3V0KDEsc3RyaW5nKV0KKysJaWYgeyAkaWR4ID49IDAgfSB7CisrCSAg ICBzZXQgcHJvYmVzIFtscmVwbGFjZSAkcHJvYmVzICRpZHggJGlkeF0KICsJfQotKyAgICB9Ci0r fQotKwotKyMgU2V0IHVwIGJyZWFrcG9pbnRzLgotK2dkYl90ZXN0ICJicmVhayBzdG9wIiB7QnJl YWtwb2ludCBbMC05XSsgYXQgLip9Ci0rZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgYnJlYWtwb2lu dCBwZW5kaW5nIG9uIgotK2dkYl90ZXN0ICJicmVhayBmb28iIHtCcmVha3BvaW50IFswLTldKyBc KGZvb1wpIHBlbmRpbmdcLn0KLStnZGJfdGVzdCAiYnJlYWsgYmFyIiB7QnJlYWtwb2ludCBbMC05 XSsgXChiYXJcKSBwZW5kaW5nXC59Ci0rCi0rIyBDaGVjayBuZWl0aGVyIG9mIHRoZSBsaWJyYXJp ZXMgYXJlIGxvYWRlZCBhdCB0aGUgc3RhcnQuCi0rZ2RiX3Rlc3QgInN0YXJ0IiB7VGVtcG9yYXJ5 IGJyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBtYWluIFwoXCl9Ci0rY2hlY2tfaW5mb19zaGFyZWQg ImluZm8gc2hhcmVkbGlicmFyeSAjMSIgMCAwCi0rCi0rIyBSdW4gdG8gdGhlIGZpcnN0IHN0b3Ag YW5kIGNoZWNrIHRoYXQgb25seSB0aGUgZmlyc3QgbGlicmFyeSBpcyBsb2FkZWQuCi0rZ2RiX3Rl c3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gc3RvcCBcKFwpfQotK2NoZWNrX2luZm9f c2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzIiIDEgMAotKwotKyMgUnVuIHRvIHRoZSBzZWNv bmQgc3RvcCBhbmQgY2hlY2sgdGhhdCBib3RoIGxpYnJhcmllcyBhcmUgbG9hZGVkLgotK2dkYl90 ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0KLStjaGVja19pbmZv X3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5ICMzIiAxIDEKLSsKLSsjIENoZWNrIHRoYXQgdGhl IG5leHQgc3RvcCBpcyBpbiBmb28uCi0rZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywg LiogaW4gZm9vIFwoXCkgZnJvbSAuKn0KLSsKLSsjIENoZWNrIHRoYXQgdGhlIG5leHQgc3RvcCBp cyBpbiBiYXIuCi0rZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gYmFyIFwo XCkgZnJvbSAuKn0KLSsKLSsjIFJlc3RhcnQgdGhlIGluZmVyaW9yIGFuZCBtYWtlIHN1cmUgdGhl cmUgYXJlIG5vIGJyZWFrcG9pbnQgcmVzZXQKLSsjIGVycm9ycy4gIFRoZXNlIGNhbiBoYXBwZW4g d2l0aCB0aGUgcHJvYmVzLWJhc2VkIHJ1bnRpbWUgbGlua2VyCi0rIyBpbnRlcmZhY2UgaWYgdGhl IGNhY2hlIGlzIG5vdCBjbGVhcmVkIGNvcnJlY3RseS4KLStzZXQgdGVzdCAicmVzdGFydCIKLStn ZGJfdGVzdF9tdWx0aXBsZSAicnVuIiAkdGVzdCB7Ci0rICAgIC1yZSB7U3RhcnQgaXQgZnJvbSB0 aGUgYmVnaW5uaW5nXD8gXCh5IG9yIG5cKSB9IHsKLSsJc2VuZF9nZGIgInlcbiIKICsJZXhwX2Nv bnRpbnVlCiArICAgIH0KLSsgICAgLXJlIHtFcnJvciBpbiByZS1zZXR0aW5nIGJyZWFrcG9pbnR9 IHsKLSsJZmFpbCAkdGVzdAorKyAgICAtcmUgIl5cW15cclxuXF0qXHJcbiIgeworKwlleHBfY29u dGludWUKICsgICAgfQotKyAgICAtcmUgIlxyXG4kZ2RiX3Byb21wdCAkIiB7Ci0rCXBhc3MgJHRl c3QKKysgICAgLXJlICJeJGdkYl9wcm9tcHQgJCIgewogKyAgICB9CiArfQorK2lmIHsgW2xsZW5n dGggJHByb2Jlc10gPT0gMCB9IHsKKysgICAgeGZhaWwgJHRlc3QKKysgICAgdW50ZXN0ZWQgIkdE QiBpcyB1c2luZyBwcm9iZXMiCisrICAgIHJldHVybgorK30KICsKLSsjIFdlJ3JlIGF0IHRoZSBm aXJzdCBzdG9wLiAgQ2hlY2sgdGhhdCBvbmx5IHRoZSBmaXJzdCBsaWJyYXJ5IGlzIGxvYWRlZC4K LStjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5ICM0IiAxIDAKLSsKLSsjIFJ1 biB0byB0aGUgc2Vjb25kIHN0b3AgYW5kIGNoZWNrIHRoYXQgYm90aCBsaWJyYXJpZXMgYXJlIGxv YWRlZC4KLStnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9 Ci0rY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNSIgMSAxCi0rCi0rIyBD aGVjayB0aGF0IHRoZSBuZXh0IHN0b3AgaXMgaW4gZm9vLgotK2dkYl90ZXN0ICJjIiB7QnJlYWtw b2ludCBbMC05XSssIC4qIGluIGZvbyBcKFwpIGZyb20gLip9Ci0rCi0rIyBDaGVjayB0aGF0IHRo ZSBuZXh0IHN0b3AgaXMgaW4gYmFyLgotK2dkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSss IC4qIGluIGJhciBcKFwpIGZyb20gLip9Ci0rCi0rIyBSdW4gdG8gdGhlIG5leHQgc3RvcCBhbmQg Y2hlY2sgdGhhdCB0aGUgZmlyc3QgbGlicmFyeSBoYXMgYmVlbiB1bmxvYWRlZC4KLStnZGJfdGVz dCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9Ci0rY2hlY2tfaW5mb19z aGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNiIgMCAxCi0rCi0rIyBSdW4gdG8gdGhlIGxhc3Qg c3RvcCBhbmQgY2hlY2sgdGhhdCBib3RoIGxpYnJhcmllcyBhcmUgZ29uZS4KLStnZGJfdGVzdCAi YyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9Ci0rY2hlY2tfaW5mb19zaGFy ZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNyIgMCAwCisgZ2RiX3Rlc3QgImluZm8gc2hhcmVkbGli cmFyeSIgIkZyb20gKiBUbyAuKiIgIm5vcm1hbCBsaXN0IgorIAorICMgR0RCIGNoZWNrcyB0aGVy ZSBmb3IgbWF0Y2hpbmcgTF9QUkVWLgoKZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1wcm9i ZS03b2Y3LnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTdvZjcucGF0Y2gKaW5kZXggOGYy YjQxOS4uMzAzNTdlOSAxMDA2NDQKLS0tIGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTdvZjcucGF0 Y2gKKysrIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTdvZjcucGF0Y2gKQEAgLTEsMTQ3ICsxLDQz NSBAQAotMjAxMi0wNy0zMCAgR2FyeSBCZW5zb24gIDxnYmVuc29uQHJlZGhhdC5jb20+CitodHRw Oi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxMy0wNS9tc2cwMDYzMC5odG1sCitT dWJqZWN0OiBbUkZBIDcvN10gTGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZSB0ZXN0cwogCi0JKiBv YmpmaWxlcy5oIChpbmhpYml0X3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBOZXcgZnVuY3Rpb24KLQlk ZWNsYXJhdGlvbi4KLQkocmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBMaWtld2lzZS4KLQko cmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXNfY2xlYW51cCk6IExpa2V3aXNlLgotCSogb2JqZmls ZXMuYyAob2JqZmlsZV9wc3BhY2VfaW5mbyk6IE5ldyBmaWVsZCAiaW5oaWJpdF91cGRhdGVzIi4K LQkoZmluZF9wY19zZWN0aW9uKTogRG8gbm90IHVwZGF0ZSB0aGUgc2VjdGlvbiBtYXAgaWYKLQlp bmhpYml0X3VwZGF0ZXMgaXMgc2V0LgotCShpbmhpYml0X3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBO ZXcgZnVuY3Rpb24uCi0JKHJlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzKTogTGlrZXdpc2UuCi0J KHJlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzX2NsZWFudXApOiBMaWtld2lzZS4KLQkqIHNvbGli LXN2cjQuYyAoc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQpOiBJbmhpYml0IHNlY3Rpb24gbWFwCi0J dXBkYXRlcyBmb3IgY2FsbHMgdG8gZXZhbHVhdGVfcHJvYmVfYXJndW1lbnQuCiAKLUluZGV4OiBn ZGItNy41LjUwLjIwMTMwMTE4L2dkYi9vYmpmaWxlcy5oCi09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2RiLTcu NS41MC4yMDEzMDExOC5vcmlnL2dkYi9vYmpmaWxlcy5oCTIwMTMtMDEtMTggMjM6MTg6MTYuODYy MzE1NjczICswMTAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDExOC9nZGIvb2JqZmlsZXMuaAkyMDEz LTAxLTE4IDIzOjE4OjM2LjcwMjM0MzQ4MiArMDEwMAotQEAgLTUwOCw2ICs1MDgsMjIgQEAgZXh0 ZXJuIGludCBpbl9wbHRfc2VjdGlvbiAoQ09SRV9BRERSLCBjaAotICAgIG1vZHVsZXMuICAqLwot IERFQ0xBUkVfUkVHSVNUUlkob2JqZmlsZSk7Ci0gCi0rLyogSW4gbm9ybWFsIHVzZSwgdGhlIHNl Y3Rpb24gbWFwIHdpbGwgYmUgcmVidWlsdCBieSBGSU5EX1BDX1NFQ1RJT04KLSsgICBpZiBvYmpm aWxlcyBoYXZlIGJlZW4gYWRkZWQsIHJlbW92ZWQgb3IgcmVsb2NhdGVkIHNpbmNlIGl0IHdhcyBs YXN0Ci0rICAgY2FsbGVkLiAgQ2FsbGluZyBJTkhJQklUX1NFQ1RJT05fTUFQX1VQREFURVMgd2ls bCBpbmhpYml0IHRoaXMKLSsgICBiZWhhdmlvciB1bnRpbCBSRVNVTUVfU0VDVElPTl9NQVBfVVBE QVRFUyBpcyBjYWxsZWQuICBJZiB5b3UgY2FsbAotKyAgIElOSElCSVRfU0VDVElPTl9NQVBfVVBE QVRFUyB5b3UgbXVzdCBlbnN1cmUgdGhhdCBldmVyeSBjYWxsIHRvCi0rICAgRklORF9QQ19TRUNU SU9OIGluIHRoZSBpbmhpYml0ZWQgcmVnaW9uIHJlbGF0ZXMgdG8gYSBzZWN0aW9uIHRoYXQKLSsg ICBpcyBhbHJlYWR5IGluIHRoZSBzZWN0aW9uIG1hcCBhbmQgaGFzIG5vdCBzaW5jZSBiZWVuIHJl bW92ZWQgb3IKLSsgICByZWxvY2F0ZWQuICAqLwotK2V4dGVybiB2b2lkIGluaGliaXRfc2VjdGlv bl9tYXBfdXBkYXRlcyAodm9pZCk7Ci0rCi0rLyogUmVzdW1lIGF1dG9tYXRpY2FsbHkgcmVidWls ZGluZyB0aGUgc2VjdGlvbiBtYXAgYXMgcmVxdWlyZWQuICAqLwotK2V4dGVybiB2b2lkIHJlc3Vt ZV9zZWN0aW9uX21hcF91cGRhdGVzICh2b2lkKTsKLSsKLSsvKiBWZXJzaW9uIG9mIHRoZSBhYm92 ZSBzdWl0YWJsZSBmb3IgdXNlIGFzIGEgY2xlYW51cC4gICovCi0rZXh0ZXJuIHZvaWQgcmVzdW1l X3NlY3Rpb25fbWFwX3VwZGF0ZXNfY2xlYW51cCAodm9pZCAqYXJnKTsKLSsKLSBleHRlcm4gdm9p ZCBkZWZhdWx0X2l0ZXJhdGVfb3Zlcl9vYmpmaWxlc19pbl9zZWFyY2hfb3JkZXIKLSAgIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLSAgICBpdGVyYXRlX292ZXJfb2JqZmlsZXNfaW5fc2VhcmNo X29yZGVyX2NiX2Z0eXBlICpjYiwKLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMTE4L2dkYi9vYmpm aWxlcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2RiLTcuNS41MC4yMDEzMDExOC5vcmlnL2dkYi9vYmpm aWxlcy5jCTIwMTMtMDEtMTggMjM6MTg6MTMuNjQ3MzExMDA2ICswMTAwCi0rKysgZ2RiLTcuNS41 MC4yMDEzMDExOC9nZGIvb2JqZmlsZXMuYwkyMDEzLTAxLTE4IDIzOjE4OjE2Ljg2MjMxNTY3MyAr MDEwMAotQEAgLTY5LDYgKzY5LDkgQEAgc3RydWN0IG9iamZpbGVfcHNwYWNlX2luZm8KLSAgIGlu dCBvYmpmaWxlc19jaGFuZ2VkX3A7Ci0gICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKipzZWN0aW9uczsK LSAgIGludCBudW1fc2VjdGlvbnM7Ci0rCi0rICAvKiBOb256ZXJvIGlmIHNlY3Rpb24gbWFwIHVw ZGF0ZXMgc2hvdWxkIGJlIGluaGliaXRlZC4gICovCi0rICBpbnQgaW5oaWJpdF91cGRhdGVzOwot IH07Ci0gCi0gLyogUGVyLXByb2dyYW0tc3BhY2UgZGF0YSBrZXkuICAqLwotQEAgLTEzNTYsNyAr MTM1OSw3IEBAIGZpbmRfcGNfc2VjdGlvbiAoQ09SRV9BRERSIHBjKQotICAgICByZXR1cm4gczsK LSAKLSAgIHBzcGFjZV9pbmZvID0gZ2V0X29iamZpbGVfcHNwYWNlX2RhdGEgKGN1cnJlbnRfcHJv Z3JhbV9zcGFjZSk7Ci0tICBpZiAocHNwYWNlX2luZm8tPm9iamZpbGVzX2NoYW5nZWRfcCAhPSAw KQotKyAgaWYgKHBzcGFjZV9pbmZvLT5vYmpmaWxlc19jaGFuZ2VkX3AgJiYgIXBzcGFjZV9pbmZv LT5pbmhpYml0X3VwZGF0ZXMpCi0gICAgIHsKLSAgICAgICB1cGRhdGVfc2VjdGlvbl9tYXAgKGN1 cnJlbnRfcHJvZ3JhbV9zcGFjZSwKLSAJCQkgICZwc3BhY2VfaW5mby0+c2VjdGlvbnMsCi1AQCAt MTQxNSw2ICsxNDE4LDMwIEBAIG9iamZpbGVzX2NoYW5nZWQgKHZvaWQpCi0gICBnZXRfb2JqZmls ZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKS0+b2JqZmlsZXNfY2hhbmdlZF9w ID0gMTsKLSB9Ci0gCi0rLyogU2VlIGNvbW1lbnRzIGluIG9iamZpbGVzLmguICAqLworLS1EQ0Ev QzlXU25EdGw1MHp1CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkK K0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCitUaGlzIHBhdGNoIGFkZHMgc29tZSB0ZXN0 Y2FzZXMgZm9yIHRoZSBsaW5rZXItZGVidWdnZXIgaW50ZXJmYWNlLgorCistLURDQS9DOVdTbkR0 bDUwenUKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVu dC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InJ0bGQtcHJvYmVzLTctdGVzdHMt Z2IucGF0Y2giCisKKzIwMTMtMDUtMTYgIEdhcnkgQmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29t PgorCisJKiBnZGIuYmFzZS9icmVhay1wcm9iZXMuZXhwOiBOZXcgZmlsZS4KKwkqIGdkYi5iYXNl L2JyZWFrLXByb2Jlcy5jOiBMaWtld2lzZS4KKwkqIGdkYi5iYXNlL2JyZWFrLXByb2Jlcy1zb2xp Yi5jOiBMaWtld2lzZS4KKwkqIGdkYi5iYXNlL2luZm8tc2hhcmVkLmV4cDogTmV3IGZpbGUuCisJ KiBnZGIuYmFzZS9pbmZvLXNoYXJlZC5jOiBMaWtld2lzZS4KKwkqIGdkYi5iYXNlL2luZm8tc2hh cmVkLXNvbGliMS5jOiBMaWtld2lzZS4KKwkqIGdkYi5iYXNlL2luZm8tc2hhcmVkLXNvbGliMi5j OiBMaWtld2lzZS4KKworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWst cHJvYmVzLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4cAorbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjgzNzI2MzYKKy0tLSAvZGV2L251bGwK KysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4cAorQEAgLTAsMCAr MSw3NyBAQAorKyMgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CiArCi0rdm9pZAotK2luaGliaXRfc2VjdGlvbl9tYXBfdXBkYXRlcyAodm9pZCkKKysjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisraWYgeyBbc2tpcF9zaGxpYl90ZXN0c10gfSB7Cisr ICAgIHJldHVybiAwCisrfQorKworK3N0YW5kYXJkX3Rlc3RmaWxlCisrCisrc2V0IGxpYm5hbWUg JHRlc3RmaWxlLXNvbGliCisrc2V0IHNyY2ZpbGVfbGliICRzcmNkaXIvJHN1YmRpci8kbGlibmFt ZS5jCisrc2V0IGJpbmZpbGVfbGliIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkbGlibmFtZS5zb10K KysKKytzZXQgbm9ybWFsX2JwICJfZGxfZGVidWdfc3RhdGUiCisrc2V0IHByb2Jlc19icCAiZGxf bWFpbiIKKysKKytpZiB7IFtnZGJfY29tcGlsZV9zaGxpYiAkc3JjZmlsZV9saWIgJGJpbmZpbGVf bGliIFwKKysJICBbbGlzdCBhZGRpdGlvbmFsX2ZsYWdzPS1mUElDXV0gIT0gIiIgfSB7CisrICAg IHVudGVzdGVkICJDb3VsZCBub3QgY29tcGlsZSAkYmluZmlsZV9saWIuIgorKyAgICByZXR1cm4g LTEKKyt9CisrCisraWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAkdGVzdGZpbGUuZXhwICR0ZXN0 ZmlsZSAkc3JjZmlsZSBcCisrCSAgW2xpc3QgYWRkaXRpb25hbF9mbGFncz0tRFNITElCX05BTUVc PVwiJGJpbmZpbGVfbGliXCIgbGlicz0tbGRsXV0gfSB7CisrICAgIHJldHVybiAtMQorK30KKysK KysjIEVuYWJsZSBzdG9wLW9uLXNvbGliLWV2ZW50cworK2dkYl90ZXN0X25vX291dHB1dCAic2V0 IHN0b3Atb24tc29saWItZXZlbnRzIDEiCisrCisrIyBTdGFydCB0aGUgaW5mZXJpb3IgYW5kIHJ1 biB0byB0aGUgZmlyc3Qgc3RvcAorK2dkYl9ydW5fY21kCisrZ2RiX3Rlc3QgIiIgIi4qU3RvcHBl ZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnQuKiIKKysKKysjIFhGQUlMIGlmIHdlIGFyZSBu b3QgdXNpbmcgcHJvYmVzCisrc2V0IHRlc3QgImVuc3VyZSB1c2luZyBwcm9iZXMiCisrc2V0IHVz aW5nX3Byb2JlcyAwCisrZ2RiX3Rlc3RfbXVsdGlwbGUgImJ0IiAkdGVzdCB7CisrICAgIC1yZSAi IzAgK1xbXlxyXG5cXSpcXG0oX19HSV8pPyRub3JtYWxfYnBcXE0uKiRnZGJfcHJvbXB0ICQiIHsK KysJeGZhaWwgJHRlc3QKKysgICAgfQorKyAgICAtcmUgIiMwICtcW15cclxuXF0qXFxtKF9fR0lf KT8kcHJvYmVzX2JwXFxNLiokZ2RiX3Byb21wdCAkIiB7CisrCXBhc3MgJHRlc3QKKysJc2V0IHVz aW5nX3Byb2JlcyAxCisrICAgIH0KKyt9CisrCisraWYgeyAkdXNpbmdfcHJvYmVzIH0geworKyAg ICAjIFJ1biB0aWwgaXQgbG9hZHMgb3VyIGxpYnJhcnkKKysgICAgc2V0IHRlc3QgInJ1biB0aWwg b3VyIGxpYnJhcnkgbG9hZHMiCisrICAgIHNldCBsb2FkZWRfbGlicmFyeSAwCisrICAgIHdoaWxl IHsgISRsb2FkZWRfbGlicmFyeSB9IHsKKysJZ2RiX3Rlc3RfbXVsdGlwbGUgImMiICR0ZXN0IHsK KysJICAgIC1yZSAiSW5mZXJpb3IgbG9hZGVkICRiaW5maWxlX2xpYlxcTS4qJGdkYl9wcm9tcHQg JCIgeworKwkJcGFzcyAkdGVzdAorKwkJc2V0IGxvYWRlZF9saWJyYXJ5IDEKKysJICAgIH0KKysJ ICAgIC1yZSAiU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnRcXE0uKiRnZGJfcHJv bXB0ICQiIHsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICAgICMgQ2FsbCBzb21ldGhpbmcg dG8gZW5zdXJlIHRoYXQgcmVsb2NhdGlvbiBvY2N1cnJlZAorKyAgICBnZGJfdGVzdCAiY2FsbCBm b28oMjMpIiAiXFxcJC4qID0gMzEuKlxcXE0uKiIKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJl YWstcHJvYmVzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hNzc4MDk5 CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLXByb2Jl cy5jCitAQCAtMCwwICsxLDI2IEBACisrLyogQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworKworKyNpbmNsdWRlIDxkbGZjbi5oPgorKworK2ludAorK21haW4gKCkKICt7Ci0rICBn ZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKS0+aW5oaWJpdF91 cGRhdGVzID0gMTsKKysgIHZvaWQgKmhhbmRsZSA9IGRsb3BlbiAoU0hMSUJfTkFNRSwgUlRMRF9M QVpZKTsKKysKKysgIGRsY2xvc2UgKGhhbmRsZSk7CisrCisrICByZXR1cm4gMDsKICt9CitkaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMtc29saWIuYyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLXNvbGliLmMKK25ldyBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iZGRlMmRiCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIv dGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLXByb2Jlcy1zb2xpYi5jCitAQCAtMCwwICsxLDIyIEBA CisrLyogQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiArCi0r LyogU2VlIGNvbW1lbnRzIGluIG9iamZpbGVzLmguICAqLworKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCiArCi0rdm9pZAotK3Jlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzICh2b2lkKQor KyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50CisrZm9vIChpbnQgbikKICt7 Ci0rICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKS0+aW5o aWJpdF91cGRhdGVzID0gMDsKKysgIHJldHVybiBuICogbiAvIDE3OworK30KK2RpZmYgLS1naXQg YS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLmV4cCBiL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2UvaW5mby1zaGFyZWQuZXhwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw MDAwMC4uMWRhYmI5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9pbmZvLXNoYXJlZC5leHAKK0BAIC0wLDAgKzEsMTQ1IEBACisrIyBDb3B5cmlnaHQgMjAxMyBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisrCisraWYgeyBbc2tpcF9zaGxpYl90ZXN0c10gfSB7CisrICAgIHJldHVybiAwCisr fQorKworK3N0YW5kYXJkX3Rlc3RmaWxlCisrCisrc2V0IGxpYjFuYW1lICR0ZXN0ZmlsZS1zb2xp YjEKKytzZXQgc3JjZmlsZV9saWIxICRzcmNkaXIvJHN1YmRpci8kbGliMW5hbWUuYworK3NldCBi aW5maWxlX2xpYjEgW3N0YW5kYXJkX291dHB1dF9maWxlICRsaWIxbmFtZS5zb10KKytzZXQgZGVm aW5lMSAtRFNITElCMV9OQU1FXD1cIiRiaW5maWxlX2xpYjFcIgorKworK3NldCBsaWIybmFtZSAk dGVzdGZpbGUtc29saWIyCisrc2V0IHNyY2ZpbGVfbGliMiAkc3JjZGlyLyRzdWJkaXIvJGxpYjJu YW1lLmMKKytzZXQgYmluZmlsZV9saWIyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkbGliMm5hbWUu c29dCisrc2V0IGRlZmluZTIgLURTSExJQjJfTkFNRVw9XCIkYmluZmlsZV9saWIyXCIKKysKKytp ZiB7IFtnZGJfY29tcGlsZV9zaGxpYiAkc3JjZmlsZV9saWIxICRiaW5maWxlX2xpYjEgXAorKwkg IFtsaXN0IGFkZGl0aW9uYWxfZmxhZ3M9LWZQSUNdXSAhPSAiIiB9IHsKKysgICAgdW50ZXN0ZWQg IkNvdWxkIG5vdCBjb21waWxlICRiaW5maWxlX2xpYjEuIgorKyAgICByZXR1cm4gLTEKKyt9Cisr CisraWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHNyY2ZpbGVfbGliMiAkYmluZmlsZV9saWIyIFwK KysJICBbbGlzdCBhZGRpdGlvbmFsX2ZsYWdzPS1mUElDXV0gIT0gIiIgfSB7CisrICAgIHVudGVz dGVkICJDb3VsZCBub3QgY29tcGlsZSAkYmluZmlsZV9saWIyLiIKKysgICAgcmV0dXJuIC0xCisr fQorKworK3NldCBjZmxhZ3MgIiRkZWZpbmUxICRkZWZpbmUyIgorK2lmIHsgW3ByZXBhcmVfZm9y X3Rlc3RpbmcgJHRlc3RmaWxlLmV4cCAkdGVzdGZpbGUgJHNyY2ZpbGUgXAorKwkgIFtsaXN0IGFk ZGl0aW9uYWxfZmxhZ3M9JGNmbGFncyBsaWJzPS1sZGxdXSB9IHsKKysgICAgcmV0dXJuIC0xCisr fQorKworKyMgUnVuICJpbmZvIHNoYXJlZGxpYnJhcnkiIGFuZCBjaGVjayBmb3IgdGhlIHByZXNl bmNlIG9yIGFic2VuY2Ugb2YKKysjIG91ciBsaWJyYXJpZXMuCisrcHJvYyBjaGVja19pbmZvX3No YXJlZCB7IHRlc3QgZXhwZWN0MSBleHBlY3QyIH0geworKyAgICBnbG9iYWwgbGliMW5hbWUKKysg ICAgZ2xvYmFsIGxpYjJuYW1lCisrICAgIGdsb2JhbCBnZGJfcHJvbXB0CisrCisrICAgIHNldCBh Y3R1YWwxIDAKKysgICAgc2V0IGFjdHVhbDIgMAorKworKyAgICBnZGJfdGVzdF9tdWx0aXBsZSAi aW5mbyBzaGFyZWRsaWJyYXJ5IiAkdGVzdCB7CisrCS1yZSAkbGliMW5hbWUgeworKwkgICAgc2V0 IGFjdHVhbDEgMQorKwkgICAgZXhwX2NvbnRpbnVlCisrCX0KKysJLXJlICRsaWIybmFtZSB7Cisr CSAgICBzZXQgYWN0dWFsMiAxCisrCSAgICBleHBfY29udGludWUKKysJfQorKwktcmUgIlxyXG4k Z2RiX3Byb21wdCAkIiB7CisrCSAgICBpZiB7ICRhY3R1YWwxID09ICRleHBlY3QxICYmICRhY3R1 YWwyID09ICRleHBlY3QyIH0geworKwkJcGFzcyAkdGVzdAorKwkgICAgfSBlbHNlIHsKKysJCWZh aWwgJHRlc3QKKysJICAgIH0KKysJfQorKyAgICB9CisrfQorKworKyMgU3RhcnQgdGhlIGluZmVy aW9yLCBhbmQgY2hlY2sgbmVpdGhlciBvZiB0aGUgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQKKysj IHRoZSBzdGFydC4KKytydW50b19tYWluCisrY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVk bGlicmFyeSAjMSIgMCAwCisrCisrIyBTZXQgdXAgYnJlYWtwb2ludHMuCisrZ2RiX3Rlc3QgImJy ZWFrIHN0b3AiIHtCcmVha3BvaW50IFswLTldKyBhdCAuKn0KKytnZGJfdGVzdF9ub19vdXRwdXQg InNldCBicmVha3BvaW50IHBlbmRpbmcgb24iCisrZ2RiX3Rlc3QgImJyZWFrIGZvbyIge0JyZWFr cG9pbnQgWzAtOV0rIFwoZm9vXCkgcGVuZGluZ1wufQorK2dkYl90ZXN0ICJicmVhayBiYXIiIHtC cmVha3BvaW50IFswLTldKyBcKGJhclwpIHBlbmRpbmdcLn0KKysKKysjIFJ1biB0byB0aGUgZmly c3Qgc3RvcCBhbmQgY2hlY2sgdGhhdCBvbmx5IHRoZSBmaXJzdCBsaWJyYXJ5IGlzIGxvYWRlZC4K KytnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9CisrY2hl Y2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjMiIgMSAwCisrCisrIyBSdW4gdG8g dGhlIHNlY29uZCBzdG9wIGFuZCBjaGVjayB0aGF0IGJvdGggbGlicmFyaWVzIGFyZSBsb2FkZWQu CisrZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gc3RvcCBcKFwpfQorK2No ZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzMiIDEgMQorKworKyMgQ2hlY2sg dGhhdCB0aGUgbmV4dCBzdG9wIGlzIGluIGZvby4KKytnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQg WzAtOV0rLCAuKiBpbiBmb28gXChcKSBmcm9tIC4qfQorKworKyMgQ2hlY2sgdGhhdCB0aGUgbmV4 dCBzdG9wIGlzIGluIGJhci4KKytnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBp biBiYXIgXChcKSBmcm9tIC4qfQorKworKyMgUmVzdGFydCB0aGUgaW5mZXJpb3IgYW5kIG1ha2Ug c3VyZSB0aGVyZSBhcmUgbm8gYnJlYWtwb2ludCByZXNldAorKyMgZXJyb3JzLiAgVGhlc2UgY2Fu IGhhcHBlbiB3aXRoIHRoZSBwcm9iZXMtYmFzZWQgcnVudGltZSBsaW5rZXIKKysjIGludGVyZmFj ZSBpZiB0aGUgY2FjaGUgaXMgbm90IGNsZWFyZWQgY29ycmVjdGx5LgorK3NldCB0ZXN0ICJyZXN0 YXJ0IgorK2dkYl9ydW5fY21kCisrZ2RiX3Rlc3RfbXVsdGlwbGUgIiIgJHRlc3QgeworKyAgICAt cmUge1N0YXJ0IGl0IGZyb20gdGhlIGJlZ2lubmluZ1w/IFwoeSBvciBuXCkgfSB7CisrCXNlbmRf Z2RiICJ5XG4iCisrCWV4cF9jb250aW51ZQorKyAgICB9CisrICAgIC1yZSB7RXJyb3IgaW4gcmUt c2V0dGluZyBicmVha3BvaW50fSB7CisrCWZhaWwgJHRlc3QKKysgICAgfQorKyAgICAtcmUgIlxy XG4kZ2RiX3Byb21wdCAkIiB7CisrCXBhc3MgJHRlc3QKKysgICAgfQogK30KICsKLSsvKiBTZWUg Y29tbWVudHMgaW4gb2JqZmlsZXMuaC4gICovCisrIyBDaGVjayB0aGF0IG5laXRoZXIgbGlicmFy eSBpcyBsb2FkZWQuCisrY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNCIg MCAwCisrCisrIyBSdW4gdG8gdGhlIGZpcnN0IHN0b3AgYW5kIGNoZWNrIHRoYXQgb25seSB0aGUg Zmlyc3QgbGlicmFyeSBpcyBsb2FkZWQuCisrZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTld KywgLiogaW4gc3RvcCBcKFwpfQorK2NoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJh cnkgIzUiIDEgMAorKworKyMgUnVuIHRvIHRoZSBzZWNvbmQgc3RvcCBhbmQgY2hlY2sgdGhhdCBi b3RoIGxpYnJhcmllcyBhcmUgbG9hZGVkLgorK2dkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05 XSssIC4qIGluIHN0b3AgXChcKX0KKytjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJy YXJ5ICM2IiAxIDEKKysKKysjIENoZWNrIHRoYXQgdGhlIG5leHQgc3RvcCBpcyBpbiBmb28uCisr Z2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gZm9vIFwoXCkgZnJvbSAuKn0K KysKKysjIENoZWNrIHRoYXQgdGhlIG5leHQgc3RvcCBpcyBpbiBiYXIuCisrZ2RiX3Rlc3QgImMi IHtCcmVha3BvaW50IFswLTldKywgLiogaW4gYmFyIFwoXCkgZnJvbSAuKn0KKysKKysjIFJ1biB0 byB0aGUgbmV4dCBzdG9wIGFuZCBjaGVjayB0aGF0IHRoZSBmaXJzdCBsaWJyYXJ5IGhhcyBiZWVu IHVubG9hZGVkLgorK2dkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3Ag XChcKX0KKytjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5ICM3IiAwIDEKKysK KysjIFJ1biB0byB0aGUgbGFzdCBzdG9wIGFuZCBjaGVjayB0aGF0IGJvdGggbGlicmFyaWVzIGFy ZSBnb25lLgorK2dkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChc KX0KKytjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5ICM4IiAwIDAKK2RpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLmMgYi9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw MDAwMDAwLi5kNjk5YTExCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL2luZm8tc2hhcmVkLmMKK0BAIC0wLDAgKzEsNDggQEAKKysvKiBDb3B5cmlnaHQgMjAxMyBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysg ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCisrCisrI2luY2x1ZGUgPGRsZmNuLmg+CiArCiArdm9pZAotK3Jl c3VtZV9zZWN0aW9uX21hcF91cGRhdGVzX2NsZWFudXAgKHZvaWQgKmFyZykKKytzdG9wICgpCisr eworK30KKysKKytpbnQKKyttYWluICgpCisreworKyAgdm9pZCAqaGFuZGxlMSwgKmhhbmRsZTI7 CisrICB2b2lkICgqZnVuYykoaW50KTsKKysKKysgIGhhbmRsZTEgPSBkbG9wZW4gKFNITElCMV9O QU1FLCBSVExEX0xBWlkpOworKyAgc3RvcCAoKTsKKysKKysgIGhhbmRsZTIgPSBkbG9wZW4gKFNI TElCMl9OQU1FLCBSVExEX0xBWlkpOworKyAgc3RvcCAoKTsKKysKKysgIGZ1bmMgPSAodm9pZCAo KikoaW50KSkgZGxzeW0gKGhhbmRsZTEsICJmb28iKTsKKysgIGZ1bmMgKDEpOworKworKyAgZnVu YyA9ICh2b2lkICgqKShpbnQpKSBkbHN5bSAoaGFuZGxlMiwgImJhciIpOworKyAgZnVuYyAoMik7 CisrCisrICBkbGNsb3NlIChoYW5kbGUxKTsKKysgIHN0b3AgKCk7CisrCisrICBkbGNsb3NlICho YW5kbGUyKTsKKysgIHN0b3AgKCk7CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJlZC1zb2xpYjEuYyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvaW5mby1zaGFyZWQtc29saWIxLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAwMDAwMDAwLi45OTc5ZWU3CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2luZm8tc2hhcmVkLXNvbGliMS5jCitAQCAtMCwwICsxLDI0IEBACisrLyogQ29w eXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgor KworK2ludAorK2ZvbyAoaW50IG4pCiArewotKyAgcmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXMg KCk7Ci0rfQotKwotIC8qIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciB0aGUgIml0ZXJh dGVfb3Zlcl9vYmpmaWxlc19pbl9zZWFyY2hfb3JkZXIiCi0gICAgZ2RiYXJjaCBtZXRob2QuICBJ dCBpcyBlcXVpdmFsZW50IHRvIHVzZSB0aGUgQUxMX09CSkZJTEVTIG1hY3JvLAotICAgIHNlYXJj aGluZyB0aGUgb2JqZmlsZXMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHN0b3JlZCBpbnRlcm5hbGx5 LAotSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAxMTgvZ2RiL3NvbGliLXN2cjQuYwotPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0tIGdkYi03LjUuNTAuMjAxMzAxMTgub3JpZy9nZGIvc29saWItc3ZyNC5jCTIwMTMtMDEt MTggMjM6MTg6MTMuNjQ5MzExMDEwICswMTAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDExOC9nZGIv c29saWItc3ZyNC5jCTIwMTMtMDEtMTggMjM6MTg6MTYuODYzMzE1Njc1ICswMTAwCi1AQCAtMTg0 OSw2ICsxODQ5LDcgQEAgc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQgKGJwc3RhdCBicykKLSAgIHN0 cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwotICAgc3RydWN0IHByb2Jl X2FuZF9pbmZvIGJ1ZiwgKnBpID0gJmJ1ZjsKLSAgIGVudW0gcHJvYmVfYWN0aW9uIGFjdGlvbjsK LSsgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwcyA9IE5VTEw7Ci0gICBzdHJ1Y3QgdmFsdWUgKnZh bDsKLSAgIExPTkdFU1QgbG1pZDsKLSAgIENPUkVfQUREUiBkZWJ1Z19iYXNlLCBsbSA9IDA7Ci1A QCAtMTg3Miw2ICsxODczLDE5IEBAIHN2cjRfaGFuZGxlX3NvbGliX2V2ZW50IChicHN0YXQgYnMp Ci0gICBpZiAoYWN0aW9uID09IE5BTUVTUEFDRV9OT19BQ1RJT04pCi0gICAgIHJldHVybjsKLSAK LSsgIC8qIEVWQUxVQVRFX1BST0JFX0FSR1VNRU5UIGxvb2tzIHVwIHN5bWJvbHMgaW4gdGhlIGR5 bmFtaWMgbGlua2VyCi0rICAgICB1c2luZyBGSU5EX1BDX1NFQ1RJT04uICBGSU5EX1BDX1NFQ1RJ T04gaXMgYWNjZWxlcmF0ZWQgYnkgYSBjYWNoZQotKyAgICAgY2FsbGVkIHRoZSBzZWN0aW9uIG1h cC4gIFRoZSBzZWN0aW9uIG1hcCBpcyBpbnZhbGlkYXRlZCBldmVyeQotKyAgICAgdGltZSBhIHNo YXJlZCBsaWJyYXJ5IGlzIGxvYWRlZCBvciB1bmxvYWRlZCwgYW5kIGlmIHRoZSBpbmZlcmlvcgot KyAgICAgaXMgZ2VuZXJhdGluZyBhIGxvdCBvZiBzaGFyZWQgbGlicmFyeSBldmVudHMgdGhlbiB0 aGUgc2VjdGlvbiBtYXAKLSsgICAgIHdpbGwgYmUgdXBkYXRlZCBldmVyeSB0aW1lIFNWUjRfSEFO RExFX1NPTElCX0VWRU5UIGlzIGNhbGxlZC4KLSsgICAgIFdlIGNhbGxlZCBGSU5EX1BDX1NFQ1RJ T04gaW4gU1ZSNF9DUkVBVEVfU09MSUJfRVZFTlRfQlJFQUtQT0lOVFMsCi0rICAgICBzbyB3ZSBj YW4gZ3VhcmFudGVlIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyJ3Mgc2VjdGlvbnMgYXJlIGluIHRo ZQotKyAgICAgc2VjdGlvbiBtYXAuICBXZSBjYW4gdGhlcmVmb3JlIGluaGliaXQgc2VjdGlvbiBt YXAgdXBkYXRlcyBhY3Jvc3MKLSsgICAgIHRoZXNlIGNhbGxzIHRvIEVWQUxVQVRFX1BST0JFX0FS R1VNRU5UIGFuZCBzYXZlIGEgbG90IG9mIHRpbWUuICAqLwotKyAgaW5oaWJpdF9zZWN0aW9uX21h cF91cGRhdGVzICgpOwotKyAgY2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKHJlc3VtZV9zZWN0aW9u X21hcF91cGRhdGVzX2NsZWFudXAsIE5VTEwpOwotKwotICAgdmFsID0gZXZhbHVhdGVfcHJvYmVf YXJndW1lbnQgKHBpLT5wcm9iZSwgMCk7Ci0gICBpZiAodmFsID09IE5VTEwpCi0gICAgIGdvdG8g ZXJyb3I7Ci1AQCAtMTkwMyw2ICsxOTE3LDkgQEAgc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQgKGJw c3RhdCBicykKLSAJYWN0aW9uID0gTkFNRVNQQUNFX1JFTE9BRDsKLSAgICAgfQotIAotKyAgZG9f Y2xlYW51cHMgKGNsZWFudXBzKTsKLSsgIGNsZWFudXBzID0gTlVMTDsKLSsKLSAgIGlmIChhY3Rp b24gPT0gTkFNRVNQQUNFX1VQREFURV9PUl9SRUxPQUQpCi0gICAgIHsKLSAgICAgICBpZiAobmFt ZXNwYWNlX3VwZGF0ZV9pbmNyZW1lbnRhbCAoaW5mbywgbG1pZCwgbG0sIGlzX2luaXRpYWxfbnMp KQotQEAgLTE5MjUsNiArMTk0Miw4IEBAIHN2cjRfaGFuZGxlX3NvbGliX2V2ZW50IChicHN0YXQg YnMpCi0gICB3YXJuaW5nIChfKCJQcm9iZXMtYmFzZWQgZHluYW1pYyBsaW5rZXIgaW50ZXJmYWNl IGZhaWxlZC5cbiIKLSAJICAgICAiUmV2ZXJ0aW5nIHRvIG9yaWdpbmFsIGludGVyZmFjZS5cbiIp KTsKLSAKLSsgIGlmIChjbGVhbnVwcyAhPSBOVUxMKQotKyAgICBkb19jbGVhbnVwcyAoY2xlYW51 cHMpOwotICAgZnJlZV9uYW1lc3BhY2VfdGFibGUgKGluZm8pOwotICAgZnJlZV9wcm9iZXMgKGlu Zm8pOwotICAgaW5mby0+dXNpbmdfcHJvYmVzID0gMDsKKysgIHByaW50ZiAoImZvbyAlZFxuIiwg bik7CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu YmFzZS9pbmZvLXNoYXJlZC1zb2xpYjIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvaW5mby1z aGFyZWQtc29saWIyLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNGVk MWU2CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hh cmVkLXNvbGliMi5jCitAQCAtMCwwICsxLDI0IEBACisrLyogQ29weXJpZ2h0IDIwMTMgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uICAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludAorK2JhciAoaW50 IG4pCisreworKyAgcHJpbnRmICgiYmFyICVkXG4iLCBuKTsKKysKKysgIHJldHVybiAwOworK30K KworLS1EQ0EvQzlXU25EdGw1MHp1LS0KKwoKZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1w cm9iZS1maXh1cC5wYXRjaCBiL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS1maXh1cC5wYXRjaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGUxOGMxCi0tLSAvZGV2L251bGwKKysr IGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLWZpeHVwLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKKy0t LSBnZGItNy42LXgvZ2RiL3NvbGliLXN2cjQuYwkyMDEzLTA1LTE5IDE2OjA0OjM2LjgzODg3NDU5 NSArMDIwMAorKysrIGdkYi03LjYvZ2RiL3NvbGliLXN2cjQuYwkyMDEzLTA1LTE5IDE2OjEyOjM1 LjExMjUxNDk3OCArMDIwMAorQEAgLTEwNzgsNyArMTA3OCw2IEBAIHN2cjRfZnJlZV9saWJyYXJ5 X2xpc3QgKHZvaWQgKnBfbGlzdCkKKyBzdGF0aWMgc3RydWN0IHNvX2xpc3QgKgorIHN2cjRfY29w eV9saWJyYXJ5X2xpc3QgKHN0cnVjdCBzb19saXN0ICpzcmMpCisgeworLSAgc3RydWN0IGxpbmtf bWFwX29mZnNldHMgKmxtbyA9IHN2cjRfZmV0Y2hfbGlua19tYXBfb2Zmc2V0cyAoKTsKKyAgIHN0 cnVjdCBzb19saXN0ICpkc3QgPSBOVUxMOworICAgc3RydWN0IHNvX2xpc3QgKipsaW5rID0gJmRz dDsKKyAKK0BAIC0xMDkwLDggKzEwODksOCBAQCBzdnI0X2NvcHlfbGlicmFyeV9saXN0IChzdHJ1 Y3Qgc29fbGlzdCAqCisgCisgICAgICAgbWVtY3B5IChuZXcsIHNyYywgc2l6ZW9mIChzdHJ1Y3Qg c29fbGlzdCkpOworIAorLSAgICAgIG5ldy0+bG1faW5mbyA9IHhtYWxsb2MgKGxtby0+bGlua19t YXBfc2l6ZSk7CistICAgICAgbWVtY3B5IChuZXctPmxtX2luZm8sIHNyYy0+bG1faW5mbywgbG1v LT5saW5rX21hcF9zaXplKTsKKysgICAgICBuZXctPmxtX2luZm8gPSB4bWFsbG9jIChzaXplb2Yg KCpuZXctPmxtX2luZm8pKTsKKysgICAgICBtZW1jcHkgKG5ldy0+bG1faW5mbywgc3JjLT5sbV9p bmZvLCBzaXplb2YgKCpuZXctPmxtX2luZm8pKTsKKyAKKyAgICAgICBuZXctPm5leHQgPSBOVUxM OworICAgICAgICpsaW5rID0gbmV3OworQEAgLTE3NDcsNyArMTc0Niw3IEBAIHNvbGlzdF91cGRh dGVfaW5jcmVtZW50YWwgKHN0cnVjdCBzdnI0X2kKKyAgICAgICBzdHJ1Y3Qgc3ZyNF9saWJyYXJ5 X2xpc3QgbGlicmFyeV9saXN0OworICAgICAgIGNoYXIgYW5uZXhbNjRdOworIAorLSAgICAgIHhz bnByaW50ZiAoYW5uZXgsIHNpemVvZiAoYW5uZXgpLCAic3RhcnQ9JWx4O3ByZXY9JWx4IiwgbG0s IHByZXZfbG0pOworKyAgICAgIHhzbnByaW50ZiAoYW5uZXgsIHNpemVvZiAoYW5uZXgpLCAic3Rh cnQ9JWx4O3ByZXY9JWx4IiwgKHVuc2lnbmVkIGxvbmcpIGxtLCAodW5zaWduZWQgbG9uZykgcHJl dl9sbSk7CisgICAgICAgaWYgKCFzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyAo JmxpYnJhcnlfbGlzdCwgYW5uZXgpKQorIAlyZXR1cm4gMDsKKyAKK0BAIC0xODEzLDcgKzE4MTIs MTAgQEAgc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQgKHZvaWQpCisgICAgIGdvdG8gZXJyb3I7Cisg CisgICBpZiAoYWN0aW9uID09IERPX05PVEhJTkcpCisreworK2RvX2NsZWFudXBzIChvbGRfY2hh aW4pOworICAgICByZXR1cm47CisrfQorIAorICAgLyogRVZBTFVBVEVfUFJPQkVfQVJHVU1FTlQg bG9va3MgdXAgc3ltYm9scyBpbiB0aGUgZHluYW1pYyBsaW5rZXIKKyAgICAgIHVzaW5nIEZJTkRf UENfU0VDVElPTi4gIEZJTkRfUENfU0VDVElPTiBpcyBhY2NlbGVyYXRlZCBieSBhIGNhY2hlCist LS0gZ2RiLTcuNi14L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4cAkyMDEz LTA1LTE5IDE2OjA2OjE5LjQ1MjgxODA5MCArMDIwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuZXhwCTIwMTMtMDUtMTkgMTY6MDc6NDkuNzMwNzcwMTM1 ICswMjAwCitAQCAtNjAsMTQgKzYwLDE1IEBAIGdkYl90ZXN0X211bHRpcGxlICJidCIgJHRlc3Qg eworIGlmIHsgJHVzaW5nX3Byb2JlcyB9IHsKKyAgICAgIyBSdW4gdGlsIGl0IGxvYWRzIG91ciBs aWJyYXJ5CisgICAgIHNldCB0ZXN0ICJydW4gdGlsIG91ciBsaWJyYXJ5IGxvYWRzIgorLSAgICBz ZXQgbG9hZGVkX2xpYnJhcnkgMAorLSAgICB3aGlsZSB7ICEkbG9hZGVkX2xpYnJhcnkgfSB7Cisr ICAgIHNldCBub3RfbG9hZGVkX2xpYnJhcnkgMQorKyAgICB3aGlsZSB7ICRub3RfbG9hZGVkX2xp YnJhcnkgfSB7CisrCXNldCBub3RfbG9hZGVkX2xpYnJhcnkgMAorIAlnZGJfdGVzdF9tdWx0aXBs ZSAiYyIgJHRlc3QgeworIAkgICAgLXJlICJJbmZlcmlvciBsb2FkZWQgJGJpbmZpbGVfbGliXFxN LiokZ2RiX3Byb21wdCAkIiB7CisgCQlwYXNzICR0ZXN0CistCQlzZXQgbG9hZGVkX2xpYnJhcnkg MQorIAkgICAgfQorIAkgICAgLXJlICJTdG9wcGVkIGR1ZSB0byBzaGFyZWQgbGlicmFyeSBldmVu dFxcTS4qJGdkYl9wcm9tcHQgJCIgeworKwkJc2V0IG5vdF9sb2FkZWRfbGlicmFyeSAxCisgCSAg ICB9CisgCX0KKyAgICAgfQoKZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS1pbmhp Yml0LnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLWluaGliaXQucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNDE3ZWMuLjAwMDAwMDAKLS0tIGEvZ2RiLWRsb3Blbi1z dGFwLXByb2JlLWluaGliaXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1o dHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTkxMTcxMgotCi0tLS0g Li9nZGIvb2JqZmlsZXMuYy1vcmlnCTIwMTMtMDMtMjEgMTg6NTE6MDAuMTQxOTU3MzMxICswMTAw Ci0rKysgLi9nZGIvb2JqZmlsZXMuYwkyMDEzLTAzLTIxIDE5OjIwOjI1LjYxNTUxOTc0OCArMDEw MAotQEAgLTYxNSw2ICs2MTUsNyBAQCBmcmVlX29iamZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpm aWxlKQotICAgb2JzdGFja19mcmVlICgmb2JqZmlsZS0+b2JqZmlsZV9vYnN0YWNrLCAwKTsKLSAK LSAgIC8qIFJlYnVpbGQgc2VjdGlvbiBtYXAgbmV4dCB0aW1lIHdlIG5lZWQgaXQuICAqLwotKyAg Z2RiX2Fzc2VydCAoIWdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChvYmpmaWxlLT5wc3BhY2UpLT5p bmhpYml0X3VwZGF0ZXMpOwotICAgZ2V0X29iamZpbGVfcHNwYWNlX2RhdGEgKG9iamZpbGUtPnBz cGFjZSktPm9iamZpbGVzX2NoYW5nZWRfcCA9IDE7Ci0gCi0gICB4ZnJlZSAob2JqZmlsZSk7Ci1A QCAtMTI4NCw2ICsxMjg1LDIxIEBAIGJzZWFyY2hfY21wIChjb25zdCB2b2lkICprZXksIGNvbnN0 IHZvaWQKLSAgIHJldHVybiAxOwotIH0KLSAKLStzdGF0aWMgdm9pZAotK3VwZGF0ZV9zcGFjZV9p bmZvX3NlY3Rpb25zIChzdHJ1Y3Qgb2JqZmlsZV9wc3BhY2VfaW5mbyAqcHNwYWNlX2luZm8pCi0r ewotKyAgaWYgKHBzcGFjZV9pbmZvLT5vYmpmaWxlc19jaGFuZ2VkX3AgJiYgIXBzcGFjZV9pbmZv LT5pbmhpYml0X3VwZGF0ZXMpCi0rICAgIHsKLSsgICAgICB1cGRhdGVfc2VjdGlvbl9tYXAgKGN1 cnJlbnRfcHJvZ3JhbV9zcGFjZSwKLSsJCQkgICZwc3BhY2VfaW5mby0+c2VjdGlvbnMsCi0rCQkJ ICAmcHNwYWNlX2luZm8tPm51bV9zZWN0aW9ucyk7Ci0rCi0rICAgICAgLyogRG9uJ3QgbmVlZCB1 cGRhdGVzIHRvIHNlY3Rpb24gbWFwIHVudGlsIG9iamZpbGVzIGFyZSBhZGRlZCwKLSsgICAgICAg ICByZW1vdmVkIG9yIHJlbG9jYXRlZC4gICovCi0rICAgICAgcHNwYWNlX2luZm8tPm9iamZpbGVz X2NoYW5nZWRfcCA9IDA7Ci0rICAgIH0KLSt9Ci0rCi0gLyogUmV0dXJucyBhIHNlY3Rpb24gd2hv c2UgcmFuZ2UgaW5jbHVkZXMgUEMgb3IgTlVMTCBpZiBub25lIGZvdW5kLiAgICovCi0gCi0gc3Ry dWN0IG9ial9zZWN0aW9uICoKLUBAIC0xMjk4LDE2ICsxMzE0LDcgQEAgZmluZF9wY19zZWN0aW9u IChDT1JFX0FERFIgcGMpCi0gICAgIHJldHVybiBzOwotIAotICAgcHNwYWNlX2luZm8gPSBnZXRf b2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKTsKLS0gIGlmIChwc3Bh Y2VfaW5mby0+b2JqZmlsZXNfY2hhbmdlZF9wICYmICFwc3BhY2VfaW5mby0+aW5oaWJpdF91cGRh dGVzKQotLSAgICB7Ci0tICAgICAgdXBkYXRlX3NlY3Rpb25fbWFwIChjdXJyZW50X3Byb2dyYW1f c3BhY2UsCi0tCQkJICAmcHNwYWNlX2luZm8tPnNlY3Rpb25zLAotLQkJCSAgJnBzcGFjZV9pbmZv LT5udW1fc2VjdGlvbnMpOwotLQotLSAgICAgIC8qIERvbid0IG5lZWQgdXBkYXRlcyB0byBzZWN0 aW9uIG1hcCB1bnRpbCBvYmpmaWxlcyBhcmUgYWRkZWQsCi0tICAgICAgICAgcmVtb3ZlZCBvciBy ZWxvY2F0ZWQuICAqLwotLSAgICAgIHBzcGFjZV9pbmZvLT5vYmpmaWxlc19jaGFuZ2VkX3AgPSAw OwotLSAgICB9Ci0rICB1cGRhdGVfc3BhY2VfaW5mb19zZWN0aW9ucyAocHNwYWNlX2luZm8pOwot IAotICAgLyogVGhlIEMgc3RhbmRhcmQgKElTTy9JRUMgOTg5OTpUQzIpIHJlcXVpcmVzIHRoZSBC QVNFIGFyZ3VtZW50IHRvCi0gICAgICBic2VhcmNoIGJlIG5vbi1OVUxMLiAgKi8KLUBAIC0xNDcx LDYgKzE0NzgsNyBAQCBvYmpmaWxlc19jaGFuZ2VkICh2b2lkKQotIHZvaWQKLSBpbmhpYml0X3Nl Y3Rpb25fbWFwX3VwZGF0ZXMgKHZvaWQpCi0gewotKyAgdXBkYXRlX3NwYWNlX2luZm9fc2VjdGlv bnMgKGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1fc3BhY2UpKTsKLSAg IGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1fc3BhY2UpLT5pbmhpYml0 X3VwZGF0ZXMgPSAxOwotIH0KLSAKCmRpZmYgLS1naXQgYS9nZGItZGxvcGVuLXN0YXAtcHJvYmUt bWFwZmFpbGVkLnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLW1hcGZhaWxlZC5wYXRjaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAzMGY0Yi4uMDAwMDAwMAotLS0gYS9nZGIt ZGxvcGVuLXN0YXAtcHJvYmUtbWFwZmFpbGVkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAg KzAsMCBAQAotY29tbWl0IDIxZmQwODBkMThmMjgwYzE5ZmRjNTQ4OTcyNmRjZDZjNjZlYjVmYmYK LUF1dGhvcjogR2FyeSBCZW5zb24gPGdiZW5zb25AcmVkaGF0LmNvbT4KLURhdGU6ICAgVHVlIEph biA4IDEyOjEyOjE0IDIwMTMgKzAwMDAKLQotICAgIEFsc28gc3RvcCBvbiAibWFwX2ZhaWxlZCIg d2hlcmUgYXBwcm9wcmlhdGUKLQotUmVtb3ZlZCBhIGNvbW1lbnQgcGF0Y2ggaHVuay4KLQotZGlm ZiAtLWdpdCBhL2dkYi9zb2xpYi1zdnI0LmMgYi9nZGIvc29saWItc3ZyNC5jCi1pbmRleCA1ZWI4 NGJhLi5hNDZmZDc0IDEwMDY0NAotLS0tIGEvZ2RiL3NvbGliLXN2cjQuYwotKysrIGIvZ2RiL3Nv bGliLXN2cjQuYwotQEAgLTE2MCw2ICsxNjAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Jl X2luZm8gcHJvYmVfaW5mb1tdID0KLSAgIHsgImluaXRfc3RhcnQiLCBOQU1FU1BBQ0VfTk9fQUNU SU9OIH0sCi0gICB7ICJpbml0X2NvbXBsZXRlIiwgTkFNRVNQQUNFX1JFTE9BRCB9LAotICAgeyAi bWFwX3N0YXJ0IiwgTkFNRVNQQUNFX05PX0FDVElPTiB9LAotKyAgeyAibWFwX2ZhaWxlZCIsIE5B TUVTUEFDRV9OT19BQ1RJT04gfSwKLSAgIHsgInJlbG9jX2NvbXBsZXRlIiwgTkFNRVNQQUNFX1VQ REFURV9PUl9SRUxPQUQgfSwKLSAgIHsgInVubWFwX3N0YXJ0IiwgTkFNRVNQQUNFX05PX0FDVElP TiB9LAotICAgeyAidW5tYXBfY29tcGxldGUiLCBOQU1FU1BBQ0VfUkVMT0FEIH0sCi1AQCAtMjA1 Niw2ICsyMDU4LDkgQEAgc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHMgKHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoLAotIAkgICAgICBpbmZvLT5wcm9iZXNbaV0gPSBmaW5kX3Byb2Jl c19pbl9vYmpmaWxlIChvcy0+b2JqZmlsZSwgInJ0bGQiLAotIAkJCQkJCQluYW1lKTsKLSAKLSsJ ICAgICAgaWYgKCFzdHJjbXAgKG5hbWUsICJydGxkX21hcF9mYWlsZWQiKSkKLSsJCWNvbnRpbnVl OwotKwotIAkgICAgICBpZiAoIVZFQ19sZW5ndGggKHByb2JlX3AsIGluZm8tPnByb2Jlc1tpXSkp Ci0gCQl7Ci0gCQkgIGZyZWVfcHJvYmVzIChpbmZvKTsKCmRpZmYgLS1naXQgYS9nZGItZGxvcGVu LXN0YXAtcHJvYmUtdGVzdC5wYXRjaCBiL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS10ZXN0LnBhdGNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjJlYmQxLi4wMDAwMDAwCi0tLSBhL2dk Yi1kbG9wZW4tc3RhcC1wcm9iZS10ZXN0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICsw LDAgQEAKLWNvbW1pdCA1YmZkYzMyY2QzYmYzNzNjM2IwMmUxZmQ4NjRlZDhjZWFiMDI5MmIyCi1B dXRob3I6IEphbiBLcmF0b2NodmlsIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgotRGF0ZTog ICBNb24gQXVnIDggMTI6MDg6NTMgMjAxMSArMDIwMAotCi0gICAgK3Rlc3RjYXNlCi0KLUluZGV4 OiBnZGItNy40LjUwLjIwMTIwNzE0L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxp YnB0aHJlYWQtbGliLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDow MDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy40LjUwLjIwMTIwNzE0L2dkYi90ZXN0c3Vp dGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJlYWQtbGliLmMJMjAxMi0wNy0xNSAwODo1MToz OC4yMzg3MDEyODIgKzAyMDAKLUBAIC0wLDAgKzEsNDAgQEAKLSsvKiBUaGlzIHRlc3RjYXNlIGlz IHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgotKwotKyAgIENvcHlyaWdodCAyMDExIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKLSsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KLSsKLSsjaW5jbHVkZSA8cHRocmVhZC5oPgotKyNpbmNsdWRlIDxh c3NlcnQuaD4KLSsKLStzdGF0aWMgdm9pZCAqCi0rdGZ1bmMgKHZvaWQgKmFyZykKLSt7Ci0rICB2 b2lkICgqbm90aWZ5cCkgKHZvaWQpID0gYXJnOwotKwotKyAgbm90aWZ5cCAoKTsKLSt9Ci0rCi0r dm9pZAotK2YgKHZvaWQgKCpub3RpZnlwKSAodm9pZCkpCi0rewotKyAgcHRocmVhZF90IHQ7Ci0r ICBpbnQgaTsKLSsKLSsgIGkgPSBwdGhyZWFkX2NyZWF0ZSAoJnQsIE5VTEwsIHRmdW5jLCBub3Rp ZnlwKTsKLSsgIGFzc2VydCAoaSA9PSAwKTsKLSsKLSsgIGkgPSBwdGhyZWFkX2pvaW4gKHQsIE5V TEwpOwotKyAgYXNzZXJ0IChpID09IDApOwotK30KLUluZGV4OiBnZGItNy40LjUwLjIwMTIwNzE0 L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJlYWQuYwotPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotKysr IGdkYi03LjQuNTAuMjAxMjA3MTQvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9kbG9wZW4tbGli cHRocmVhZC5jCTIwMTItMDctMTUgMDg6NTE6MzguMjM5NzAxMjc3ICswMjAwCi1AQCAtMCwwICsx LDQ2IEBACi0rLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dl ci4KLSsKLSsgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K LSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rI2luY2x1 ZGUgPGRsZmNuLmg+Ci0rI2luY2x1ZGUgPHN0ZGRlZi5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4K LSsKLStzdGF0aWMgY29uc3QgY2hhciAqdm9sYXRpbGUgZmlsZW5hbWU7Ci0rCi0rc3RhdGljIHZv aWQKLStub3RpZnkgKHZvaWQpCi0rewotKyAgZmlsZW5hbWUgPSBOVUxMOyAvKiBub3RpZnktaGVy ZSAqLwotK30KLSsKLStpbnQKLSttYWluICh2b2lkKQotK3sKLSsgIHZvaWQgKmg7Ci0rICB2b2lk ICgqZnApICh2b2lkICgqKSAodm9pZCkpOwotKwotKyAgYXNzZXJ0IChmaWxlbmFtZSAhPSBOVUxM KTsKLSsgIGggPSBkbG9wZW4gKGZpbGVuYW1lLCBSVExEX0xBWlkpOwotKyAgYXNzZXJ0IChoICE9 IE5VTEwpOwotKwotKyAgZnAgPSBkbHN5bSAoaCwgImYiKTsKLSsgIGFzc2VydCAoZnAgIT0gTlVM TCk7Ci0rCi0rICBmcCAobm90aWZ5KTsKLSsKLSsgIHJldHVybiAwOwotK30KLUluZGV4OiBnZGIt Ny40LjUwLjIwMTIwNzE0L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJl YWQuZXhwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAw MDAwMDAwICswMDAwCi0rKysgZ2RiLTcuNC41MC4yMDEyMDcxNC9nZGIvdGVzdHN1aXRlL2dkYi50 aHJlYWRzL2Rsb3Blbi1saWJwdGhyZWFkLmV4cAkyMDEyLTA3LTE1IDA5OjA4OjAxLjc2MDI1ODU4 OCArMDIwMAotQEAgLTAsMCArMSw3NCBAQAotKyMgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0r IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0r IyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsK LStpZiB7IVtpc3RhcmdldCAqLWxpbnV4Kl0gfHwgW3NraXBfc2hsaWJfdGVzdHNdfSB7Ci0rICAg IHJldHVybiAwCi0rfQotKwotK2xvYWRfbGliIHByZWxpbmstc3VwcG9ydC5leHAKLSsKLStzZXQg dGVzdGZpbGUgImRsb3Blbi1saWJwdGhyZWFkIgotK3NldCBzcmNtYWluZmlsZSAke3Rlc3RmaWxl fS5jCi0rc2V0IHNyY2xpYmZpbGUgJHt0ZXN0ZmlsZX0tbGliLmMKLStzZXQgZXhlY3V0YWJsZSAk e3Rlc3RmaWxlfQotK3NldCBiaW5maWxlX2xpYiAke29iamRpcn0vJHtzdWJkaXJ9LyR7ZXhlY3V0 YWJsZX0uc28KLStzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7ZXhlY3V0YWJsZX0K LStzZXQgbGliX2Rsb3BlbiBbc2hsaWJfdGFyZ2V0X2ZpbGUgJHtleGVjdXRhYmxlfS5zb10KLSsK LSsjIFVzZSBidWlsZF9leGVjdXRhYmxlX293bl9saWJzIGFzIHByZWxpbmtlZCBsaWJwdGhyZWFk LnNvIGNhbiBwcm9kdWNlIGZhbHNlCi0rIyBQQVNTIC0gaXQgaXMgT0sgaWYgR0RCIHByb2Nlc3Nl cyBpdCBzdGlsbCBiZWZvcmUgcmVsb2NhdGlvbi4KLSsKLStzZXQgcmVsaW5rX2FyZ3MgW2J1aWxk X2V4ZWN1dGFibGVfb3duX2xpYnMgJHt0ZXN0ZmlsZX0uZXhwICR7ZXhlY3V0YWJsZX0uc28gJHNy Y2xpYmZpbGUge2RlYnVnIHNobGliX3B0aHJlYWRzfSBub10KLStpZiB7JHJlbGlua19hcmdzID09 ICIiIHx8ICFbcHJlbGlua19ubyAkcmVsaW5rX2FyZ3NdCi0rICAgIHx8IFtwcmVwYXJlX2Zvcl90 ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke2V4ZWN1dGFibGV9ICR7c3JjbWFpbmZpbGV9IHtkZWJ1 ZyBzaGxpYl9sb2FkfV0gfSB7Ci0rICAgIHJldHVybiAtMQotK30KLStnZGJfbG9hZF9zaGxpYnMg JGJpbmZpbGVfbGliCi0rCi0raWYgeyAhW3J1bnRvX21haW5dIH0gewotKyAgICByZXR1cm4gLTEK LSt9Ci0rCi0rc2V0IHRlc3QgImluZm8gcHJvYmVzIGFsbCBydGxkIHJ0bGRfbWFwX2NvbXBsZXRl IgotK2dkYl90ZXN0X211bHRpcGxlICR0ZXN0ICR0ZXN0IHsKLSsgICAgLXJlICJcWyBcdFxdcnRs ZF9tYXBfY29tcGxldGVcWyBcdFxdKzB4XFswLTlhLWZcXSsuKlxyXG4kZ2RiX3Byb21wdCAkIiB7 Ci0rCXBhc3MgJHRlc3QKLSsgICAgfQotKyAgICAtcmUgIk5vIHByb2JlcyBtYXRjaGVkXFwuXHJc biRnZGJfcHJvbXB0ICQiIHsKLSsJeGZhaWwgJHRlc3QKLSsJdW50ZXN0ZWQgJHt0ZXN0ZmlsZX0u ZXhwCi0rCXJldHVybgotKyAgICB9Ci0rfQotKwotK3NldCB0ZXN0ICJsaWJwdGhyZWFkLnNvIG5v dCBmb3VuZCIKLStnZGJfdGVzdF9tdWx0aXBsZSAiaW5mbyBzaGFyZWRsaWJyYXJ5IiAkdGVzdCB7 Ci0rICAgIC1yZSAiL2xpYnB0aHJlYWRcXC5zby4qXHJcbiRnZGJfcHJvbXB0ICQiIHsKLSsJZmFp bCAkdGVzdAotKyAgICB9Ci0rICAgIC1yZSAiL2xpYmNcXC5zby4qXHJcbiRnZGJfcHJvbXB0ICQi IHsKLSsJcGFzcyAkdGVzdAotKyAgICB9Ci0rfQotKwotK2dkYl90ZXN0ICJzZXQgdmFyaWFibGUg ZmlsZW5hbWU9XCIkbGliX2Rsb3BlblwiIgotKwotK2dkYl9icmVha3BvaW50ICJub3RpZnkiCi0r Ci0rIyBUaGUgZXJyb3Igd2FzOgotKyMgQ2Fubm90IGZpbmQgbmV3IHRocmVhZHM6IGdlbmVyaWMg ZXJyb3IKLStnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAibm90aWZ5IiAiLiogbm90aWZ5LWhl cmUgLioiCi0rCi0rZ2RiX3Rlc3QgImluZm8gc2hhcmVkbGlicmFyeSIgey9saWJwdGhyZWFkXC5z by4qfSAibGlicHRocmVhZC5zbyBmb3VuZCIKLUluZGV4OiBnZGItNy40LjUwLjIwMTIwNzE0L2dk Yi90ZXN0c3VpdGUvbGliL2dkYi5leHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnZGItNy40LjUwLjIwMTIw NzE0Lm9yaWcvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAkyMDEyLTA3LTE1IDA4OjUxOjM2Ljgw MzcwOTIyMiArMDIwMAotKysrIGdkYi03LjQuNTAuMjAxMjA3MTQvZ2RiL3Rlc3RzdWl0ZS9saWIv Z2RiLmV4cAkyMDEyLTA3LTE1IDA5OjAyOjQxLjk4MzAyODE5NyArMDIwMAotQEAgLTM3NzQsMjIg KzM3NzQsNiBAQCBwcm9jIGJ1aWxkX2V4ZWN1dGFibGVfZnJvbV9zcGVjcyB7dGVzdG5hCi0gCi0g ICAgIHNldCBiaW5maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkZXhlY3V0YWJsZV0KLSAKLS0g ICAgc2V0IG9iamVjdHMge30KLS0gICAgc2V0IGkgMAotLSAgICBmb3JlYWNoIHtzIGxvY2FsX29w dGlvbnN9ICRhcmdzIHsKLS0gICAgICAgIGlmICB7IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9LyR7 c3ViZGlyfS8ke3N9IiAiJHtiaW5maWxlfSR7aX0ubyIgb2JqZWN0ICRsb2NhbF9vcHRpb25zXSAh PSAiIiB9IHsKLS0gICAgICAgICAgICB1bnRlc3RlZCAkdGVzdG5hbWUKLS0gICAgICAgICAgICBy ZXR1cm4gLTEKLS0gICAgICAgIH0KLS0gICAgICAgIGxhcHBlbmQgb2JqZWN0cyAiJHtiaW5maWxl fSR7aX0ubyIKLS0JaW5jciBpCi0tICAgIH0KLS0gICAgCi0tICAgIGlmICB7IFtnZGJfY29tcGls ZSAkb2JqZWN0cyAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSAkb3B0aW9uc10gIT0gIiIgfSB7Ci0t ICAgICAgICB1bnRlc3RlZCAkdGVzdG5hbWUKLS0gICAgICAgIHJldHVybiAtMQotLSAgICB9Ci0t Ci0gICAgIHNldCBpbmZvX29wdGlvbnMgIiIKLSAgICAgaWYgeyBbbHNlYXJjaCAtZXhhY3QgJG9w dGlvbnMgImMrKyJdID49IDAgfSB7Ci0gCXNldCBpbmZvX29wdGlvbnMgImMrKyIKLUBAIC0zNzk3 LDYgKzM3ODEsNDIgQEAgcHJvYyBidWlsZF9leGVjdXRhYmxlX2Zyb21fc3BlY3Mge3Rlc3RuYQot ICAgICBpZiBbZ2V0X2NvbXBpbGVyX2luZm8gJHtpbmZvX29wdGlvbnN9XSB7Ci0gICAgICAgICBy ZXR1cm4gLTEKLSAgICAgfQotKwotKyAgICBzZXQgYmluZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2Zp bGUgJGV4ZWN1dGFibGVdCi0rCi0rICAgIHNldCBmdW5jIGdkYl9jb21waWxlCi0rICAgIHNldCBm dW5jX2luZGV4IFtsc2VhcmNoIC1yZWdleHAgJG9wdGlvbnMge14ocHRocmVhZHN8c2hsaWJ8c2hs aWJfcHRocmVhZHMpJH1dCi0rICAgIGlmIHskZnVuY19pbmRleCAhPSAtMX0gewotKwlzZXQgZnVu YyAiJHtmdW5jfV9bbGluZGV4ICRvcHRpb25zICRmdW5jX2luZGV4XSIKLSsgICAgfQotKwotKyAg ICAjIGdkYl9jb21waWxlX3NobGliIGFuZCBnZGJfY29tcGlsZV9zaGxpYl9wdGhyZWFkcyBkbyBu b3QgdXNlIHRoZSAzcmQKLSsgICAgIyBwYXJhbWV0ZXIuICBUaGV5IGFsc28gcmVxdWlyZXMgJHNv dXJjZXMgd2hpbGUgZ2RiX2NvbXBpbGUgYW5kCi0rICAgICMgZ2RiX2NvbXBpbGVfcHRocmVhZHMg cmVxdWlyZSAkb2JqZWN0cy4gIE1vcmVvdmVyIHRoZXkgaWdub3JlIGFueSBvcHRpb25zLgotKyAg ICBpZiBbc3RyaW5nIG1hdGNoIGdkYl9jb21waWxlX3NobGliKiAkZnVuY10gewotKwlzZXQgc291 cmNlc19wYXRoIHt9Ci0rCWZvcmVhY2gge3MgbG9jYWxfb3B0aW9uc30gJGFyZ3MgewotKwkgICAg bGFwcGVuZCBzb3VyY2VzX3BhdGggIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzfSIKLSsJfQotKwlz ZXQgcmV0IFskZnVuYyAkc291cmNlc19wYXRoICIke2JpbmZpbGV9IiAkb3B0aW9uc10KLSsgICAg fSBlbHNlIHsKLSsJc2V0IG9iamVjdHMge30KLSsJc2V0IGkgMAotKwlmb3JlYWNoIHtzIGxvY2Fs X29wdGlvbnN9ICRhcmdzIHsKLSsJICAgIGlmICB7IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9LyR7 c3ViZGlyfS8ke3N9IiAiJHtiaW5maWxlfSR7aX0ubyIgb2JqZWN0ICRsb2NhbF9vcHRpb25zXSAh PSAiIiB9IHsKLSsJCXVudGVzdGVkICR0ZXN0bmFtZQotKwkJcmV0dXJuIC0xCi0rCSAgICB9Ci0r CSAgICBsYXBwZW5kIG9iamVjdHMgIiR7YmluZmlsZX0ke2l9Lm8iCi0rCSAgICBpbmNyIGkKLSsJ fQotKwlzZXQgcmV0IFskZnVuYyAkb2JqZWN0cyAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSAkb3B0 aW9uc10KLSsgICAgfQotKyAgICBpZiAgeyAkcmV0ICE9ICIiIH0gewotKyAgICAgICAgdW50ZXN0 ZWQgJHRlc3RuYW1lCi0rICAgICAgICByZXR1cm4gLTEKLSsgICAgfQotKwotICAgICByZXR1cm4g MAotIH0KLSAKLUluZGV4OiBnZGItNy40LjUwLjIwMTIwNzE0L2dkYi90ZXN0c3VpdGUvbGliL3By ZWxpbmstc3VwcG9ydC5leHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnZGItNy40LjUwLjIwMTIwNzE0Lm9y aWcvZ2RiL3Rlc3RzdWl0ZS9saWIvcHJlbGluay1zdXBwb3J0LmV4cAkyMDEyLTAxLTA0IDA5OjI3 OjU2LjAwMDAwMDAwMCArMDEwMAotKysrIGdkYi03LjQuNTAuMjAxMjA3MTQvZ2RiL3Rlc3RzdWl0 ZS9saWIvcHJlbGluay1zdXBwb3J0LmV4cAkyMDEyLTA3LTE1IDA4OjUxOjM4LjI0MzcwMTI1NCAr MDIwMAotQEAgLTk1LDggKzk1LDkgQEAgcHJvYyBmaWxlX2NvcHkge3NyYyBkZXN0fSB7Ci0gIyBX cmFwIGZ1bmN0aW9uIGJ1aWxkX2V4ZWN1dGFibGUgc28gdGhhdCB0aGUgcmVzdWx0aW5nIGV4ZWN1 dGFibGUgaXMgZnVsbHkKLSAjIHNlbGYtc3VmZmljaWVudCAod2l0aG91dCBkZXBlbmRlbmNpZXMg b24gc3lzdGVtIGxpYnJhcmllcykuICBQYXJhbWV0ZXIKLSAjIElOVEVSUCBtYXkgYmUgdXNlZCB0 byBzcGVjaWZ5IGEgbG9hZGVyIChsZC5zbykgdG8gYmUgdXNlZCB0aGF0IGlzCi0tIyBkaWZmZXJl bnQgZnJvbSB0aGUgZGVmYXVsdCBzeXN0ZW0gb25lLiAgTGlicmFyaWVzIG9uIHdoaWNoIHRoZSBl eGVjdXRhYmxlCi0tIyBkZXBlbmRzIGFyZSBjb3BpZWQgaW50byBkaXJlY3RvcnkgRElSLiAgRGVm YXVsdCBESVIgdmFsdWUgdG8KLSsjIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IHN5c3RlbSBv bmUuICBJTlRFUlAgY2FuIGJlIHNldCB0byAibm8iIGlmIG5vIGxkLnNvCi0rIyBjb3B5IHNob3Vs ZCBiZSBtYWRlLiAgTGlicmFyaWVzIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGRlcGVuZHMgYXJl IGNvcGllZAotKyMgaW50byBkaXJlY3RvcnkgRElSLiAgRGVmYXVsdCBESVIgdmFsdWUgdG8KLSAj IGAke29iamRpcn0vJHtzdWJkaXJ9LyR7RVhFQ1VUQUJMRX0uZCcuCi0gIwotICMgSW4gY2FzZSBv ZiBzdWNjZXNzLCByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXJndW1lbnRzIHRvIGJl IHVzZWQKLUBAIC0xNTEsOCArMTUyLDE1IEBAIHByb2MgYnVpbGRfZXhlY3V0YWJsZV9vd25fbGli cyB7dGVzdG5hbWUKLSAKLSAgICAgaWYgeyRpbnRlcnAgPT0gIiJ9IHsKLSAJc2V0IGludGVycF9z eXN0ZW0gW3NlY3Rpb25fZ2V0ICRiaW5maWxlIC5pbnRlcnBdCi0tCXNldCBpbnRlcnAgJHtkaXJ9 L1tmaWxlIHRhaWwgJGludGVycF9zeXN0ZW1dCi0tCWZpbGVfY29weSAkaW50ZXJwX3N5c3RlbSAk aW50ZXJwCi0rCWlmIHskaW50ZXJwX3N5c3RlbSA9PSAiIn0gewotKwkgICAgZmFpbCAiJHRlc3Qg Y291bGQgbm90IGZpbmQgLmludGVycCIKLSsJfSBlbHNlIHsKLSsJICAgIHNldCBpbnRlcnAgJHtk aXJ9L1tmaWxlIHRhaWwgJGludGVycF9zeXN0ZW1dCi0rCSAgICBmaWxlX2NvcHkgJGludGVycF9z eXN0ZW0gJGludGVycAotKwl9Ci0rICAgIH0KLSsgICAgaWYgeyRpbnRlcnAgPT0gIm5vIn0gewot KwlzZXQgaW50ZXJwICIiCi0gICAgIH0KLSAKLSAgICAgc2V0IGRlc3RzIHt9Ci1AQCAtMTY0LDEz ICsxNzIsMTkgQEAgcHJvYyBidWlsZF9leGVjdXRhYmxlX293bl9saWJzIHt0ZXN0bmFtZQotIAot ICAgICAjIERvIG5vdCBsYXBwZW5kIGl0IHNvIHRoYXQgIi1ycGF0aCAkZGlyIiBvdmVycmlkZXMg YW55IHBvc3NpYmxlICItcnBhdGgicwotICAgICAjIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyIHRv IGJlIGFibGUgdG8gbGluayBpdCBmb3IgbGRkIiBhYm92ZS4KLS0gICAgc2V0IG9wdGlvbnMgW2xp bnNlcnQgJG9wdGlvbnMgMCAibGRmbGFncz0tV2wsLS1keW5hbWljLWxpbmtlciwkaW50ZXJwLC1y cGF0aCwkZGlyIl0KLSsgICAgc2V0IG9wdGlvbnMgW2xpbnNlcnQgJG9wdGlvbnMgMCAibGRmbGFn cz0tV2wsLXJwYXRoLCRkaXIiXQotKyAgICBpZiB7JGludGVycCAhPSAiIn0gewotKwlzZXQgb3B0 aW9ucyBbbGluc2VydCAkb3B0aW9ucyAwICJsZGZsYWdzPS1XbCwtLWR5bmFtaWMtbGlua2VyLCRp bnRlcnAiXQotKyAgICB9Ci0gCi0gICAgIGlmIHtbYnVpbGRfZXhlY3V0YWJsZSAkdGVzdG5hbWUg JGV4ZWN1dGFibGUgJHNvdXJjZXMgJG9wdGlvbnNdID09IC0xfSB7Ci0gCXJldHVybiAiIgotICAg ICB9Ci0gCi0tICAgIHNldCBwcmVsaW5rX2FyZ3MgIi0tZHluYW1pYy1saW5rZXI9JGludGVycCAt LWxkLWxpYnJhcnktcGF0aD0kZGlyICRiaW5maWxlICRpbnRlcnAgW2NvbmNhdCAkZGVzdHNdIgot KyAgICBzZXQgcHJlbGlua19hcmdzICItLWxkLWxpYnJhcnktcGF0aD0kZGlyICRiaW5maWxlIFtj b25jYXQgJGRlc3RzXSIKLSsgICAgaWYgeyRpbnRlcnAgIT0gIiJ9IHsKLSsJc2V0IHByZWxpbmtf YXJncyAiLS1keW5hbWljLWxpbmtlcj0kaW50ZXJwICRwcmVsaW5rX2FyZ3MgJGludGVycCIKLSsg ICAgfQotICAgICByZXR1cm4gJHByZWxpbmtfYXJncwotIH0KLSAKCmRpZmYgLS1naXQgYS9nZGIt ZGxvcGVuLXN0YXAtcHJvYmUtdGVzdDIucGF0Y2ggYi9nZGItZGxvcGVuLXN0YXAtcHJvYmUtdGVz dDIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYTRmNmIuLjAwMDAwMDAK LS0tIGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLXRlc3QyLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsNjkgKzAsMCBAQAotaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1wYXRjaGVzLzIwMTIt MDgvbXNnMDA1MDAuaHRtbAotU3ViamVjdDogW3BhdGNoXSB0ZXN0c3VpdGU6IE1ha2Ugc29saWIt Y29ycnVwdGVkLmV4cCB1bnRlc3RlZCBmb3IgcHJvYmVzICBbUmU6IFtSRkEgMC80IHRha2UgMl0g SW1wcm92ZWQgbGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZV0KLQotT24gRnJpLCAxNyBBdWcgMjAx MiAyMjo1Mzo1MyArMDIwMCwgSmFuIEtyYXRvY2h2aWwgd3JvdGU6Ci0+IEl0IHJlZ3Jlc3NlcyB3 aXRoIGdsaWJjLWRlYnVnaW5mbyBpbnN0YWxsZWQ6Ci0+IAotPiBpbmZvIHNoYXJlZGxpYnJhcnle TQotPiBGcm9tICAgICAgICAgICAgICAgIFRvICAgICAgICAgICAgICAgICAgU3ltcyBSZWFkICAg U2hhcmVkIE9iamVjdCBMaWJyYXJ5Xk0KLT4gMHgwMDAwN2ZmZmY3ZGRjYjIwICAweDAwMDA3ZmZm ZjdkZjYzZDkgIFllcyAgICAgICAgIC9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMl5NCi0+IDB4 MDAwMDdmZmZmN2FlMDViMCAgMHgwMDAwN2ZmZmY3YjRhZDc4ICBZZXMgICAgICAgICAvbGliNjQv bGlibS5zby42Xk0KLT4gMHgwMDAwN2ZmZmY3NzQzMWEwICAweDAwMDA3ZmZmZjc4ODNjZjAgIFll cyAgICAgICAgIC9saWI2NC9saWJjLnNvLjZeTQotPiAoZ2RiKSBGQUlMOiBnZGIuYmFzZS9zb2xp Yi1jb3JydXB0ZWQuZXhwOiBjb3JydXB0ZWQgbGlzdAotPiAKLT4gQnV0IEkgZ3Vlc3MgdGhlcmUg aXMgbm8gbG9uZ2VyIGEgd2F5IHRvIHRlc3QgaXQgd2l0aCBwcm9iZXMgc28gaXQgc2hvdWxkIGp1 c3QKLT4gcnVuIHNvbWUgJ2luZm8gcHJvYmVzJyBhbmQgbWFrZSB0aGlzIHRlc3QgVU5URVNURUQg aWYgcnRsZCBwcm9iZXMgYXJlCi0+IGF2YWlsYWJsZS4KLQotSSBoYWQgdG8gaW1wbGVtZW50IGl0 IGZvciBGZWRvcmEgYWxyZWFkeSBhbnl3YXkuCi0KLQotUmVnYXJkcywKLUphbgotCi0KLWdkYi90 ZXN0c3VpdGUvCi0yMDEyLTA4LTE4ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJl ZGhhdC5jb20+Ci0KLQkqIGdkYi5iYXNlL3NvbGliLWNvcnJ1cHRlZC5leHA6IE5ldyB2YXJpYWJs ZSBwcm9iZXMuCi0JKGluZm8gcHJvYmVzKTogTmV3IHRlc3QuCi0KLWRpZmYgLS1naXQgYS9nZGIv dGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWNvcnJ1cHRlZC5leHAgYi9nZGIvdGVzdHN1aXRlL2dk Yi5iYXNlL3NvbGliLWNvcnJ1cHRlZC5leHAKLWluZGV4IDg0YjNiMGMuLmM5ZjU1ZDYgMTAwNjQ0 Ci0tLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWNvcnJ1cHRlZC5leHAKLSsrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItY29ycnVwdGVkLmV4cAotQEAgLTM2LDYgKzM2 LDMzIEBAIGlmICFbcnVudG9fbWFpbl0gewotICAgICByZXR1cm4KLSB9Ci0gCi0rIyBXaXRoIHBy b2JlcyBpbnRlcmZhY2UgR0RCIG5vIGxvbmdlciBzY2FucyB0aGUgaW5mZXJpb3IgbGlicmFyeSBs aXN0IHNvIGl0cwotKyMgY29ycnVwdGlvbiBjYW5ub3QgYmUgdGVzdGVkLiAgVGhlcmUgaXMgbm8g d2F5IHRvIGRpc2FibGUgdGhlIHByb2JlcwotKyMgaW50ZXJmYWNlLgotKwotK3NldCBwcm9iZXMg eyBpbml0X3N0YXJ0IGluaXRfY29tcGxldGUgbWFwX3N0YXJ0IHJlbG9jX2NvbXBsZXRlIHVubWFw X3N0YXJ0Ci0rCSAgICAgdW5tYXBfY29tcGxldGUgfQotK3NldCB0ZXN0ICJpbmZvIHByb2JlcyIK LStnZGJfdGVzdF9tdWx0aXBsZSAkdGVzdCAkdGVzdCB7Ci0rICAgIC1yZSAiXnJ0bGRcWyBcdFxd Kyg/OnJ0bGRfKT8oXFthLXpfXF0rKVxbIFx0XF0iIHsKLSsJc2V0IGlkeCBbbHNlYXJjaCAtZXhh Y3QgJHByb2JlcyAkZXhwZWN0X291dCgxLHN0cmluZyldCi0rCWlmIHsgJGlkeCA+PSAwIH0gewot KwkgICAgc2V0IHByb2JlcyBbbHJlcGxhY2UgJHByb2JlcyAkaWR4ICRpZHhdCi0rCX0KLSsJZXhw X2NvbnRpbnVlCi0rICAgIH0KLSsgICAgLXJlICJeXFteXHJcblxdKlxyXG4iIHsKLSsJZXhwX2Nv bnRpbnVlCi0rICAgIH0KLSsgICAgLXJlICJeJGdkYl9wcm9tcHQgJCIgewotKyAgICB9Ci0rfQot K2lmIHsgW2xsZW5ndGggJHByb2Jlc10gPT0gMCB9IHsKLSsgICAgeGZhaWwgJHRlc3QKLSsgICAg dW50ZXN0ZWQgIkdEQiBpcyB1c2luZyBwcm9iZXMiCi0rICAgIHJldHVybgotK30KLSsKLSBnZGJf dGVzdCAiaW5mbyBzaGFyZWRsaWJyYXJ5IiAiRnJvbSAqIFRvIC4qIiAibm9ybWFsIGxpc3QiCi0g Ci0gIyBHREIgY2hlY2tzIHRoZXJlIGZvciBtYXRjaGluZyBMX1BSRVYuCi0KCmRpZmYgLS1naXQg YS9nZGIuc3BlYyBiL2dkYi5zcGVjCmluZGV4IDg5YzJkODMuLjE2YmMzZjAgMTAwNjQ0Ci0tLSBh L2dkYi5zcGVjCisrKyBiL2dkYi5zcGVjCkBAIC0zNiw3ICszNiw3IEBAIFZlcnNpb246IDcuNgog CiAjIFRoZSByZWxlYXNlIGFsd2F5cyBjb250YWlucyBhIGxlYWRpbmcgcmVzZXJ2ZWQgbnVtYmVy LCBzdGFydCBpdCBhdCAxLgogIyBgdXBzdHJlYW0nIGlzIG5vdCBhIHBhcnQgb2YgYG5hbWUnIHRv IHN0YXkgZnVsbHkgcnBtIGRlcGVuZGVuY2llcyBjb21wYXRpYmxlIGZvciB0aGUgdGVzdGluZy4K LVJlbGVhc2U6IDI4JXs/ZGlzdH0KK1JlbGVhc2U6IDI5JXs/ZGlzdH0KIAogTGljZW5zZTogR1BM djMrIGFuZCBHUEx2Mysgd2l0aCBleGNlcHRpb25zIGFuZCBHUEx2MisgYW5kIEdQTHYyKyB3aXRo IGV4Y2VwdGlvbnMgYW5kIEdQTCsgYW5kIExHUEx2MisgYW5kIEJTRCBhbmQgUHVibGljIERvbWFp bgogR3JvdXA6IERldmVsb3BtZW50L0RlYnVnZ2VycwpAQCAtNTA0LDE2ICs1MDQsMTYgQEAgUGF0 Y2g1Nzk6IGdkYi03LjIuNTAtc3BhcmMtYWRkLXdvcmthcm91bmQtdG8tYnJva2VuLWRlYnVnLWZp bGVzLnBhdGNoCiAKICMgRml4IGRsb3BlbiBvZiBsaWJwdGhyZWFkLnNvLCBwYXRjaGVkIGdsaWJj IHJlcXVpcmVkIChHYXJ5IEJlbnNvbiwgQlogNjY5NDMyKS4KICMgRml4IGNyYXNoIHJlZ3Jlc3Np b24gZnJvbSB0aGUgZGxvcGVuIG9mIGxpYnB0aHJlYWQuc28gZml4IChCWiA5MTE3MTIpLgorIyBG aXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aGVuIGluZmVyaW9yIG9wZW5zIG1hbnkgbGlicmFy aWVzIChHYXJ5IEJlbnNvbikuCiAjPXB1c2gKLVBhdGNoNzE4OiBnZGItZGxvcGVuLXN0YXAtcHJv YmUtM29mNy5wYXRjaAotUGF0Y2g3MTk6IGdkYi1kbG9wZW4tc3RhcC1wcm9iZS00b2Y3LnBhdGNo Ci1QYXRjaDcyMDogZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcucGF0Y2gKLVBhdGNoNzIxOiBn ZGItZGxvcGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaAotUGF0Y2g3MjI6IGdkYi1kbG9wZW4tc3Rh cC1wcm9iZS03b2Y3LnBhdGNoCi1QYXRjaDYxOTogZ2RiLWRsb3Blbi1zdGFwLXByb2JlLXRlc3Qu cGF0Y2gKLVBhdGNoNzIzOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtdGVzdDIucGF0Y2gKLVBhdGNo ODIyOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtbWFwZmFpbGVkLnBhdGNoCi1QYXRjaDgyNzogZ2Ri LWRsb3Blbi1zdGFwLXByb2JlLWluaGliaXQucGF0Y2gKK1BhdGNoNzE4OiBnZGItZGxvcGVuLXN0 YXAtcHJvYmUtMW9mNy5wYXRjaAorUGF0Y2g3MTk6IGdkYi1kbG9wZW4tc3RhcC1wcm9iZS0yb2Y3 LnBhdGNoCitQYXRjaDcyMDogZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTNvZjcucGF0Y2gKK1BhdGNo NzIxOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtNG9mNy5wYXRjaAorUGF0Y2g3MjI6IGdkYi1kbG9w ZW4tc3RhcC1wcm9iZS01b2Y3LnBhdGNoCitQYXRjaDcyMzogZ2RiLWRsb3Blbi1zdGFwLXByb2Jl LTZvZjcucGF0Y2gKK1BhdGNoODIyOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtN29mNy5wYXRjaAor UGF0Y2g4Mjc6IGdkYi1kbG9wZW4tc3RhcC1wcm9iZS1maXh1cC5wYXRjaAogCiAjIFdvcmsgYXJv dW5kIFBSIGxpYmMvMTMwOTcgImxpbnV4LXZkc28uc28uMSIgd2FybmluZyBtZXNzYWdlLgogIz1w dXNoCkBAIC04NzYsNyArODc2LDYgQEAgZmluZCAtbmFtZSAiKi5pbmZvKiJ8eGFyZ3Mgcm0gLWYK ICVwYXRjaDcyMyAtcDEKICVwYXRjaDgyMiAtcDEKICVwYXRjaDgyNyAtcDEKLSVwYXRjaDYxOSAt cDEKICVwYXRjaDYyNyAtcDEKICVwYXRjaDYzNCAtcDEKICVwYXRjaDY1MyAtcDEKQEAgLTEzOTgs NiArMTM5Nyw5IEBAIGZpCiAlZW5kaWYgIyAwJXshP2VsNToxfSB8fCAiJXtfdGFyZ2V0X2NwdX0i ID09ICJub2FyY2giCiAKICVjaGFuZ2Vsb2cKKyogU3VuIE1heSAxOSAyMDEzIEphbiBLcmF0b2No dmlsIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPiAtIDcuNi0yOS5mYzE5CistIEZpeCBwZXJm b3JtYW5jZSByZWdyZXNzaW9uIHdoZW4gaW5mZXJpb3Igb3BlbnMgbWFueSBsaWJyYXJpZXMgKEdh cnkgQmVuc29uKS4KKwogKiBUaHUgTWF5ICA5IDIwMTMgSmFuIEtyYXRvY2h2aWwgPGphbi5rcmF0 b2NodmlsQHJlZGhhdC5jb20+IC0gNy42LTI4LmZjMTkKIC0gRml4IG5lZWRsZXNzIGV4cGFuc2lv biBvZiBub24tZ2RiaW5kZXggc3ltdGFicyAoRG91ZyBFdmFucykuCiAK