ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDUwMTRiZmEuLmE0YjU3NmUgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjMsNiArMjMsNyBAQAogIyBHZW5lcmF0ZWQgaW5jbHVkZSBmaWxlcwogIwogaW5jbHVkZS9hc20KK2luY2x1ZGUvYXNtLSovYXNtLW9mZnNldHMuaAogaW5jbHVkZS9jb25maWcKIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaAogaW5jbHVkZS9saW51eC9jb21waWxlLmgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbAppbmRleCAxNWNlMGYyLi4zMjBhZjI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCkBAIC0yNTMsNiArMjUzLDcgQEAKICFFZHJpdmVycy91c2IvY29yZS91cmIuYwogIUVkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwogIUVkcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYworIUVkcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCiAhRWRyaXZlcnMvdXNiL2NvcmUvdXNiLmMKICFFZHJpdmVycy91c2IvY29yZS9odWIuYwogICAgIDwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCmluZGV4IDIzN2Q1NGMuLjFkNDdlNmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtMTU4LDcgKzE1OCw3IEBACiBjb3B5IHRoZSBtYWludGFpbmVyIHdoZW4geW91IGNoYW5nZSB0aGVpciBjb2RlLgogCiBGb3Igc21hbGwgcGF0Y2hlcyB5b3UgbWF5IHdhbnQgdG8gQ0MgdGhlIFRyaXZpYWwgUGF0Y2ggTW9ua2V5Ci10cml2aWFsQHJ1c3Rjb3JwLmNvbS5hdSBzZXQgdXAgYnkgUnVzdHkgUnVzc2VsbDsgd2hpY2ggY29sbGVjdHMgInRyaXZpYWwiCit0cml2aWFsQGtlcm5lbC5vcmcgbWFuYWdlZCBieSBBZHJpYW4gQnVuazsgd2hpY2ggY29sbGVjdHMgInRyaXZpYWwiCiBwYXRjaGVzLiBUcml2aWFsIHBhdGNoZXMgbXVzdCBxdWFsaWZ5IGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBydWxlczoKICBTcGVsbGluZyBmaXhlcyBpbiBkb2N1bWVudGF0aW9uCiAgU3BlbGxpbmcgZml4ZXMgd2hpY2ggY291bGQgYnJlYWsgZ3JlcCgxKS4KQEAgLTE3MSw3ICsxNzEsNyBAQAogIHNpbmNlIHBlb3BsZSBjb3B5LCBhcyBsb25nIGFzIGl0J3MgdHJpdmlhbCkKICBBbnkgZml4IGJ5IHRoZSBhdXRob3IvbWFpbnRhaW5lciBvZiB0aGUgZmlsZS4gKGllLiBwYXRjaCBtb25rZXkKICBpbiByZS10cmFuc21pc3Npb24gbW9kZSkKLVVSTDogPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9ydXN0eS90cml2aWFsLz4KK1VSTDogPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9idW5rL3RyaXZpYWwvPgogCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IDBmZTAxYzguLjMwM2M1N2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTMxLDcgKzMxLDcgQEAKIGRvY3VtZW50OgogCUNocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KIAlBcmphbiB2YW4gZGUgVmVuIDxhcmphbnZAcmVkaGF0LmNvbT4KLQlSYW5keSBEdW5sYXAgPHJkZHVubGFwQG9zZGwub3JnPgorCVJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+CiAJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KIAogVGhlIGZvbGxvd2luZyBwZW9wbGUgaGVscGVkIHdpdGggZml4ZXMvY29udHJpYnV0aW9ucyB0byB0aGUgYmlvIHBhdGNoZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dAppbmRleCA5MzNmYWU3Li5mNGI4ZGM0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CkBAIC0yNyw2ICsyNyw3IEBACiAyLjIgIFBvd2Vyc2F2ZQogMi4zICBVc2Vyc3BhY2UKIDIuNCAgT25kZW1hbmQKKzIuNSAgQ29uc2VydmF0aXZlCiAKIDMuICAgVGhlIEdvdmVybm9yIEludGVyZmFjZSBpbiB0aGUgQ1BVZnJlcSBDb3JlCiAKQEAgLTExMCw5ICsxMTEsNjQgQEAKIAogVGhlIENQVWZyZXEgZ292ZW5vciAib25kZW1hbmQiIHNldHMgdGhlIENQVSBkZXBlbmRpbmcgb24gdGhlCiBjdXJyZW50IHVzYWdlLiBUbyBkbyB0aGlzIHRoZSBDUFUgbXVzdCBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvCi1zd2l0Y2ggdGhlIGZyZXF1ZW5jeSB2ZXJ5IGZhc3QuCitzd2l0Y2ggdGhlIGZyZXF1ZW5jeSB2ZXJ5IHF1aWNrbHkuICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc3lzZnMgZmlsZQorYWNjZXNzaWJsZSBwYXJhbWV0ZXJzOgorCitzYW1wbGluZ19yYXRlOiBtZWFzdXJlZCBpbiB1UyAoMTBeLTYgc2Vjb25kcyksIHRoaXMgaXMgaG93IG9mdGVuIHlvdQord2FudCB0aGUga2VybmVsIHRvIGxvb2sgYXQgdGhlIENQVSB1c2FnZSBhbmQgdG8gbWFrZSBkZWNpc2lvbnMgb24KK3doYXQgdG8gZG8gYWJvdXQgdGhlIGZyZXF1ZW5jeS4gIFR5cGljYWxseSB0aGlzIGlzIHNldCB0byB2YWx1ZXMgb2YKK2Fyb3VuZCAnMTAwMDAnIG9yIG1vcmUuCisKK3Nob3dfc2FtcGxpbmdfcmF0ZV8obWlufG1heCk6IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNhbXBsaW5nIHJhdGVzCithdmFpbGFibGUgdGhhdCB5b3UgbWF5IHNldCAnc2FtcGxpbmdfcmF0ZScgdG8uCisKK3VwX3RocmVzaG9sZDogZGVmaW5lcyB3aGF0IHRoZSBhdmVyYWdlIENQVSB1c2FnZWQgYmV0d2VlbiB0aGUgc2FtcGxpbmdzCitvZiAnc2FtcGxpbmdfcmF0ZScgbmVlZHMgdG8gYmUgZm9yIHRoZSBrZXJuZWwgdG8gbWFrZSBhIGRlY2lzaW9uIG9uCit3aGV0aGVyIGl0IHNob3VsZCBpbmNyZWFzZSB0aGUgZnJlcXVlbmN5LiAgRm9yIGV4YW1wbGUgd2hlbiBpdCBpcyBzZXQKK3RvIGl0cyBkZWZhdWx0IHZhbHVlIG9mICc4MCcgaXQgbWVhbnMgdGhhdCBiZXR3ZWVuIHRoZSBjaGVja2luZworaW50ZXJ2YWxzIHRoZSBDUFUgbmVlZHMgdG8gYmUgb24gYXZlcmFnZSBtb3JlIHRoYW4gODAlIGluIHVzZSB0byB0aGVuCitkZWNpZGUgdGhhdCB0aGUgQ1BVIGZyZXF1ZW5jeSBuZWVkcyB0byBiZSBpbmNyZWFzZWQuICAKKworc2FtcGxpbmdfZG93bl9mYWN0b3I6IHRoaXMgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSByYXRlIHRoYXQgdGhlIENQVQorbWFrZXMgYSBkZWNpc2lvbiBvbiB3aGVuIHRvIGRlY3JlYXNlIHRoZSBmcmVxdWVuY3kuICBXaGVuIHNldCB0byBpdHMKK2RlZmF1bHQgdmFsdWUgb2YgJzUnIGl0IG1lYW5zIHRoYXQgYXQgMS81IHRoZSBzYW1wbGluZ19yYXRlIHRoZSBrZXJuZWwKK21ha2VzIGEgZGVjaXNpb24gdG8gbG93ZXIgdGhlIGZyZXF1ZW5jeS4gIEZpdmUgImxvd2VyIHJhdGUiIGRlY2lzaW9ucworaGF2ZSB0byBiZSBtYWRlIGluIGEgcm93IGJlZm9yZSB0aGUgQ1BVIGZyZXF1ZW5jeSBpcyBhY3R1YWxseSBsb3dlci4KK0lmIHNldCB0byAnMScgdGhlbiB0aGUgZnJlcXVlbmN5IGRlY3JlYXNlcyBhcyBxdWlja2x5IGFzIGl0IGluY3JlYXNlcywKK2lmIHNldCB0byAnMicgaXQgZGVjcmVhc2VzIGF0IGhhbGYgdGhlIHJhdGUgb2YgdGhlIGluY3JlYXNlLgorCitpZ25vcmVfbmljZV9sb2FkOiB0aGlzIHBhcmFtZXRlciB0YWtlcyBhIHZhbHVlIG9mICcwJyBvciAnMScsIHdoZW4gc2V0Cit0byAnMCcgKGl0cyBkZWZhdWx0KSB0aGVuIGFsbCBwcm9jZXNzZXMgYXJlIGNvdW50ZWQgdG93YXJkcyB0b3dhcmRzIHRoZQorJ2NwdSB1dGlsaXNhdGlvbicgdmFsdWUuICAgV2hlbiBzZXQgdG8gJzEnIHRoZW4gcHJvY2Vzc2VzIHRoYXQgYXJlCitydW4gd2l0aCBhICduaWNlJyB2YWx1ZSB3aWxsIG5vdCBjb3VudCAoYW5kIHRodXMgYmUgaWdub3JlZCkgaW4gdGhlCitvdmVyYWwgdXNhZ2UgY2FsY3VsYXRpb24uICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIHJ1bm5pbmcgYSBDUFUKK2ludGVuc2l2ZSBjYWxjdWxhdGlvbiBvbiB5b3VyIGxhcHRvcCB0aGF0IHlvdSBkbyBub3QgY2FyZSBob3cgbG9uZyBpdAordGFrZXMgdG8gY29tcGxldGUgYXMgeW91IGNhbiAnbmljZScgaXQgYW5kIHByZXZlbnQgaXQgZnJvbSB0YWtpbmcgcGFydAoraW4gdGhlIGRlY2lkaW5nIHByb2Nlc3Mgb2Ygd2hldGhlciB0byBpbmNyZWFzZSB5b3VyIENQVSBmcmVxdWVuY3kuCiAKIAorMi41IENvbnNlcnZhdGl2ZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQ1BVZnJlcSBnb3Zlcm5vciAiY29uc2VydmF0aXZlIiwgbXVjaCBsaWtlIHRoZSAib25kZW1hbmQiCitnb3Zlcm5vciwgc2V0cyB0aGUgQ1BVIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCB1c2FnZS4gIEl0IGRpZmZlcnMgaW4KK2JlaGF2aW91ciBpbiB0aGF0IGl0IGdyYWNlZnVsbHkgaW5jcmVhc2VzIGFuZCBkZWNyZWFzZXMgdGhlIENQVSBzcGVlZAorcmF0aGVyIHRoYW4ganVtcGluZyB0byBtYXggc3BlZWQgdGhlIG1vbWVudCB0aGVyZSBpcyBhbnkgbG9hZCBvbiB0aGUKK0NQVS4gIFRoaXMgYmVoYXZpb3VyIG1vcmUgc3VpdGFibGUgaW4gYSBiYXR0ZXJ5IHBvd2VyZWQgZW52aXJvbm1lbnQuCitUaGUgZ292ZXJub3IgaXMgdHdlYWtlZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlICJvbmRlbWFuZCIgZ292ZXJub3IKK3Rocm91Z2ggc3lzZnMgd2l0aCB0aGUgYWRkaXRpb24gb2Y6CisKK2ZyZXFfc3RlcDogdGhpcyBkZXNjcmliZXMgd2hhdCBwZXJjZW50YWdlIHN0ZXBzIHRoZSBjcHUgZnJlcSBzaG91bGQgYmUKK2luY3JlYXNlZCBhbmQgZGVjcmVhc2VkIHNtb290aGx5IGJ5LiAgQnkgZGVmYXVsdCB0aGUgY3B1IGZyZXF1ZW5jeSB3aWxsCitpbmNyZWFzZSBpbiA1JSBjaHVua3Mgb2YgeW91ciBtYXhpbXVtIGNwdSBmcmVxdWVuY3kuICBZb3UgY2FuIGNoYW5nZSB0aGlzCit2YWx1ZSB0byBhbnl3aGVyZSBiZXR3ZWVuIDAgYW5kIDEwMCB3aGVyZSAnMCcgd2lsbCBlZmZlY3RpdmVseSBsb2NrIHlvdXIKK0NQVSBhdCBhIHNwZWVkIHJlZ2FyZGxlc3Mgb2YgaXRzIGxvYWQgd2hpbHN0ICcxMDAnIHdpbGwsIGluIHRoZW9yeSwgbWFrZQoraXQgYmVoYXZlIGlkZW50aWNhbGx5IHRvIHRoZSAib25kZW1hbmQiIGdvdmVybm9yLgorCitkb3duX3RocmVzaG9sZDogc2FtZSBhcyB0aGUgJ3VwX3RocmVzaG9sZCcgZm91bmQgZm9yIHRoZSAib25kZW1hbmQiCitnb3Zlcm5vciBidXQgZm9yIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uICBGb3IgZXhhbXBsZSB3aGVuIHNldCB0byBpdHMKK2RlZmF1bHQgdmFsdWUgb2YgJzIwJyBpdCBtZWFucyB0aGF0IGlmIHRoZSBDUFUgdXNhZ2UgbmVlZHMgdG8gYmUgYmVsb3cKKzIwJSBiZXR3ZWVuIHNhbXBsZXMgdG8gaGF2ZSB0aGUgZnJlcXVlbmN5IGRlY3JlYXNlZC4KIAogMy4gVGhlIEdvdmVybm9yIEludGVyZmFjZSBpbiB0aGUgQ1BVZnJlcSBDb3JlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCmluZGV4IGJjZmJhYjguLjdlMTc3MTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWApAQCAtMTgsOCArMTgsNiBAQAogCS0gZGlyZWN0b3J5IGNvbnRhaW5pbmcgZGV2ZnMgZG9jdW1lbnRhdGlvbi4KIGV4dDIudHh0CiAJLSBpbmZvLCBtb3VudCBvcHRpb25zIGFuZCBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIEV4dDIgZmlsZXN5c3RlbS4KLWZhdF9jdmYudHh0Ci0JLSBpbmZvIG9uIHRoZSBDb21wcmVzc2VkIFZvbHVtZSBGaWxlcyBleHRlbnNpb24gdG8gdGhlIEZBVCBmaWxlc3lzdGVtCiBocGZzLnR4dAogCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIE9TLzIgSFBGUy4KIGlzb2ZzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CmluZGV4IGVlNGMwYTguLmU1NmU4NDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKQEAgLTE2Miw5ICsxNjIsOCBAQAogYSAic3RydWN0IHN1cGVyX29wZXJhdGlvbnMiIHdoaWNoIGRlc2NyaWJlcyB0aGUgbmV4dCBsZXZlbCBvZiB0aGUKIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uCiAKLVVzdWFsbHksIGEgZmlsZXN5c3RlbSB1c2VzIGdlbmVyaWMgb25lIG9mIHRoZSBnZW5lcmljIGdldF9zYigpCi1pbXBsZW1lbnRhdGlvbnMgYW5kIHByb3ZpZGVzIGEgZmlsbF9zdXBlcigpIG1ldGhvZCBpbnN0ZWFkLiBUaGUKLWdlbmVyaWMgbWV0aG9kcyBhcmU6CitVc3VhbGx5LCBhIGZpbGVzeXN0ZW0gdXNlcyBvbmUgb2YgdGhlIGdlbmVyaWMgZ2V0X3NiKCkgaW1wbGVtZW50YXRpb25zCithbmQgcHJvdmlkZXMgYSBmaWxsX3N1cGVyKCkgbWV0aG9kIGluc3RlYWQuIFRoZSBnZW5lcmljIG1ldGhvZHMgYXJlOgogCiAgIGdldF9zYl9iZGV2OiBtb3VudCBhIGZpbGVzeXN0ZW0gcmVzaWRpbmcgb24gYSBibG9jayBkZXZpY2UKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dAppbmRleCBjOTFjYWY3Li4xYzBkYjY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dApAQCAtMzgsNyArMzgsNyBAQAogV2hhdCBpcyBjb3ZlcmVkIHdpdGhpbiB0aGlzIGZpbGUgaXMgbWFpbmx5IGluZm9ybWF0aW9uIHRvIGF1dGhvcnMKIG9mIG1vZHVsZXMuIFRoZSBhdXRob3Igb2YgYW4gZXh0ZXJuYWwgbW9kdWxlcyBzaG91bGQgc3VwcGx5CiBhIG1ha2VmaWxlIHRoYXQgaGlkZXMgbW9zdCBvZiB0aGUgY29tcGxleGl0eSBzbyBvbmUgb25seSBoYXMgdG8gdHlwZQotJ21ha2UnIHRvIGJ1bGQgdGhlIG1vZHVsZS4gQSBjb21wbGV0ZSBleGFtcGxlIHdpbGwgYmUgcHJlc2VudCBpbgorJ21ha2UnIHRvIGJ1aWxkIHRoZSBtb2R1bGUuIEEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlIHByZXNlbnQgaW4KIGNoYXB0ZXIgpC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlIi4KIAogCkBAIC02OSw3ICs2OSw3IEBACiAKIC0tLSAyLjIgQXZhaWxhYmxlIHRhcmdldHMKIAotCSRLRElSIHJlZmVycyB0byBwYXRoIHRvIGtlcm5lbCBzb3VyY2UgdG9wLWxldmVsIGRpcmVjdG9yeQorCSRLRElSIHJlZmVycyB0byB0aGUgcGF0aCB0byB0aGUga2VybmVsIHNvdXJjZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CiAKIAltYWtlIC1DICRLRElSIE09YHB3ZGAKIAkJV2lsbCBidWlsZCB0aGUgbW9kdWxlKHMpIGxvY2F0ZWQgaW4gY3VycmVudCBkaXJlY3RvcnkuCkBAIC04NywxMSArODcsMTEgQEAKIAltYWtlIC1DICRLRElSIE09JFBXRCBtb2R1bGVzX2luc3RhbGwKIAkJSW5zdGFsbCB0aGUgZXh0ZXJuYWwgbW9kdWxlKHMpLgogCQlJbnN0YWxsYXRpb24gZGVmYXVsdCBpcyBpbiAvbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9leHRyYSwKLQkJYnV0IG1heSBiZSBwcmVmaXhlZCB3aXRoIElOU1RBTExfTU9EX1BBVEggLSBzZWUgc2VwYXJhdGUgY2hhdGVyLgorCQlidXQgbWF5IGJlIHByZWZpeGVkIHdpdGggSU5TVEFMTF9NT0RfUEFUSCAtIHNlZSBzZXBhcmF0ZSBjaGFwdGVyLgogCiAJbWFrZSAtQyAkS0RJUiBNPSRQV0QgY2xlYW4KIAkJUmVtb3ZlIGFsbCBnZW5lcmF0ZWQgZmlsZXMgZm9yIHRoZSBtb2R1bGUgLSB0aGUga2VybmVsCi0JCXNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IG1vZGRpZmllZC4KKwkJc291cmNlIGRpcmVjdG9yeSBpcyBub3QgbW9kaWZpZWQuCiAKIAltYWtlIC1DICRLRElSIE09YHB3ZGAgaGVscAogCQloZWxwIHdpbGwgbGlzdCB0aGUgYXZhaWxhYmxlIHRhcmdldCB3aGVuIGJ1aWxkaW5nIGV4dGVybmFsCkBAIC05OSw3ICs5OSw3IEBACiAKIC0tLSAyLjMgQXZhaWxhYmxlIG9wdGlvbnM6CiAKLQkkS0RJUiByZWZlciB0byBwYXRoIHRvIGtlcm5lbCBzcmMKKwkkS0RJUiByZWZlcnMgdG8gdGhlIHBhdGggdG8gdGhlIGtlcm5lbCBzb3VyY2UgdG9wLWxldmVsIGRpcmVjdG9yeQogCiAJbWFrZSAtQyAkS0RJUgogCQlVc2VkIHRvIHNwZWNpZnkgd2hlcmUgdG8gZmluZCB0aGUga2VybmVsIHNvdXJjZS4KQEAgLTIwNiwxMSArMjA2LDExIEBACiAKIAkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCiAJCWFsbDo6Ci0JCQkkKE1BS0UpIC1DICRLRVJORUxESVIgTT1gcHdkYCAkQAorCQkJJChNQUtFKSAtQyAkKEtFUk5FTERJUikgTT1gcHdkYCAkQAogCiAJCSMgTW9kdWxlIHNwZWNpZmljIHRhcmdldHMKIAkJZ2VuYmluOgotCQkJZWNobyAiWCIgPiA4MTIzX2Jpbmkub19zaGlwcGVkCisJCQllY2hvICJYIiA+IDgxMjNfYmluLm9fc2hpcHBlZAogCiAJCWVuZGlmCiAKQEAgLTM0MSwxMyArMzQxLDEzIEBACiAJCUVYVFJBX0NGTEFHUyA6PSAtSWluY2x1ZGUKIAkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KIAotCU5vdGUgdGhhdCBpbiB0aGUgYXNzaW5nbWVudCB0aGVyZSBpcyBubyBzcGFjZSBiZXR3ZWVuIC1JIGFuZCB0aGUgcGF0aC4KLQlUaGlzIGlzIGEga2J1aWxkIGxpbWl0YXRpb24gYW5kIG5vIHNwYWNlIG11c3QgYmUgcHJlc2VudC4KKwlOb3RlIHRoYXQgaW4gdGhlIGFzc2lnbm1lbnQgdGhlcmUgaXMgbm8gc3BhY2UgYmV0d2VlbiAtSSBhbmQgdGhlIHBhdGguCisJVGhpcyBpcyBhIGtidWlsZCBsaW1pdGF0aW9uOiAgdGhlcmUgbXVzdCBiZSBubyBzcGFjZSBwcmVzZW50LgogCiAKID09PSA2LiBNb2R1bGUgaW5zdGFsbGF0aW9uCiAKLU1vZHVsZXMgd2hpY2ggYXJlIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgaXMgaW5zdGFsbGVkIGluIHRoZSBkaXJlY3Rvcnk6CitNb2R1bGVzIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGFyZSBpbnN0YWxsZWQgaW4gdGhlIGRpcmVjdG9yeToKIAogCS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2tlcm5lbAogCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJPT4gSW5zdGFsbCBkaXI6IC9mcm9kby9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2tlcm5lbAogCiAJSU5TVEFMTF9NT0RfUEFUSCBtYXkgYmUgc2V0IGFzIGFuIG9yZGluYXJ5IHNoZWxsIHZhcmlhYmxlIG9yIGFzIGluIHRoZQotCWV4YW1wbGUgYWJvdmUgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZSB3aGVuIGNhbGxpbmcgbWFrZS4KKwlleGFtcGxlIGFib3ZlIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gY2FsbGluZyBtYWtlLgogCUlOU1RBTExfTU9EX1BBVEggaGFzIGVmZmVjdCBib3RoIHdoZW4gaW5zdGFsbGluZyBtb2R1bGVzIGluY2x1ZGVkIGluCiAJdGhlIGtlcm5lbCBhcyB3ZWxsIGFzIHdoZW4gaW5zdGFsbGluZyBleHRlcm5hbCBtb2R1bGVzLgogCkBAIC0zODQsNyArMzg0LDcgQEAKIAogPT09IDcuIE1vZHVsZSB2ZXJzaW9uaW5nCiAKLU1vZHVsZSB2ZXJzaW9uaW5nIGFyZSBlbmFibGVkIGJ5IHRoZSBDT05GSUdfTU9EVkVSU0lPTlMgdGFnLgorTW9kdWxlIHZlcnNpb25pbmcgaXMgZW5hYmxlZCBieSB0aGUgQ09ORklHX01PRFZFUlNJT05TIHRhZy4KIAogTW9kdWxlIHZlcnNpb25pbmcgaXMgdXNlZCBhcyBhIHNpbXBsZSBBQkkgY29uc2lzdGVuY3kgY2hlY2suIFRoZSBNb2R1bGUKIHZlcnNpb25pbmcgY3JlYXRlcyBhIENSQyB2YWx1ZSBvZiB0aGUgZnVsbCBwcm90b3R5cGUgZm9yIGFuIGV4cG9ydGVkIHN5bWJvbCBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNWRmZmNmZS4uNjFhNTZiMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTYzMyw2ICs2MzMsMTQgQEAKIAlpbnBvcnQuaXJxPQlbSFddIElucG9ydCAoQVRJIFhMIGFuZCBNaWNyb3NvZnQpIGJ1c21vdXNlIGRyaXZlcgogCQkJRm9ybWF0OiA8aXJxPgogCisJY29tYmluZWRfbW9kZT0JW0hXXSBjb250cm9sIHdoaWNoIGRyaXZlciB1c2VzIElERSBwb3J0cyBpbiBjb21iaW5lZAorCQkJbW9kZTogbGVnYWN5IElERSBkcml2ZXIsIGxpYmF0YSwgb3IgYm90aAorCQkJKGluIHRoZSBsaWJhdGEgY2FzZSwgbGliYXRhLmF0YXBpX2VuYWJsZWQ9MSBtYXkgYmUKKwkJCXVzZWZ1bCBhcyB3ZWxsKS4gIE5vdGUgdGhhdCB1c2luZyB0aGUgaWRlIG9yIGxpYmF0YQorCQkJb3B0aW9ucyBtYXkgYWZmZWN0IHlvdXIgZGV2aWNlIG5hbWluZyAoZS5nLiBieQorCQkJY2hhbmdpbmcgaGRjIHRvIHNkYikuCisJCQlGb3JtYXQ6IGNvbWJpbmVkIChkZWZhdWx0KSwgaWRlLCBvciBsaWJhdGEKKwogCWludHRlc3Q9CVtJQTY0XQogCiAJaW83PQkJW0hXXSBJTzcgZm9yIE1hcnZlbCBiYXNlZCBhbHBoYSBzeXN0ZW1zCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2lhbmZhci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2lhbmZhci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0NzRlYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9naWFuZmFyLnR4dApAQCAtMCwwICsxLDcyIEBACitUaGUgR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIKK1N5c2ZzIEZpbGUgZGVzY3JpcHRpb24KKworQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CitVcGRhdGVkOiAyMDA1LTA3LTI4CisKK1NZU0ZTCisKK1NldmVyYWwgb2YgdGhlIGZlYXR1cmVzIG9mIHRoZSBnaWFuZmFyIGRyaXZlciBhcmUgY29udHJvbGxlZAordGhyb3VnaCBzeXNmcyBmaWxlcy4gIFRoZXNlIGFyZToKKworYmRfc3Rhc2g6CitUbyBzdGFzaCBSWCBCdWZmZXIgRGVzY3JpcHRvcnMgaW4gdGhlIEwyLCBlY2hvICdvbicgb3IgJzEnIHRvCitiZF9zdGFzaCwgZWNobyAnb2ZmJyBvciAnMCcgdG8gZGlzYWJsZQorCityeF9zdGFzaF9sZW46CitUbyBzdGFzaCB0aGUgZmlyc3QgbiBieXRlcyBvZiB0aGUgcGFja2V0IGluIEwyLCBlY2hvIHRoZSBudW1iZXIKK29mIGJ5dGVzIHRvIGJ1Zl9zdGFzaF9sZW4uICBlY2hvIDAgdG8gZGlzYWJsZS4KKworV0FSTklORzogWW91IGNvdWxkIHJlYWxseSBzY3JldyB0aGVzZSB1cCBpZiB5b3Ugc2V0IHRoZW0gdG9vIGxvdyBvciBoaWdoIQorZmlmb190aHJlc2hvbGQ6CitUbyBjaGFuZ2UgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgY29udHJvbGxlciBuZWVkcyBpbiB0aGUKK2ZpZm8gYmVmb3JlIGl0IHN0YXJ0cyB0cmFuc21pc3Npb24sIGVjaG8gdGhlIG51bWJlciBvZiBieXRlcyB0byAKK2ZpZm9fdGhyZXNoLiAgUmFuZ2Ugc2hvdWxkIGJlIDAtNTExLgorCitmaWZvX3N0YXJ2ZToKK1doZW4gdGhlIEZJRk8gaGFzIGxlc3MgdGhhbiB0aGlzIG1hbnkgYnl0ZXMgZHVyaW5nIGEgdHJhbnNtaXQsIGl0CitlbnRlcnMgc3RhcnZlIG1vZGUsIGFuZCBpbmNyZWFzZXMgdGhlIHByaW9yaXR5IG9mIFRYIG1lbW9yeQordHJhbnNhY3Rpb25zLiAgVG8gY2hhbmdlLCBlY2hvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8KK2ZpZm9fc3RhcnZlLiAgUmFuZ2Ugc2hvdWxkIGJlIDAtNTExLgorCitmaWZvX3N0YXJ2ZV9vZmY6CitPbmNlIGluIHN0YXJ2ZSBtb2RlLCB0aGUgRklGTyByZW1haW5zIHRoZXJlIHVudGlsIGl0IGhhcyB0aGlzCittYW55IGJ5dGVzLiAgVG8gY2hhbmdlLCBlY2hvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8KK2ZpZm9fc3RhcnZlX29mZi4gIFJhbmdlIHNob3VsZCBiZSAwLTUxMS4KKworQ0hFQ0tTVU0gT0ZGTE9BRElORworCitUaGUgZVRTRUMgY29udHJvbGxlciAoZmlyc3QgaW5jbHVkZWQgaW4gcGFydHMgZnJvbSBsYXRlIDIwMDUgbGlrZQordGhlIDg1NDgpIGhhcyB0aGUgYWJpbGl0eSB0byBwZXJmb3JtIFRDUCwgVURQLCBhbmQgSVAgY2hlY2tzdW1zCitpbiBoYXJkd2FyZS4gIFRoZSBMaW51eCBrZXJuZWwgb25seSBvZmZsb2FkcyB0aGUgVENQIGFuZCBVRFAKK2NoZWNrc3VtcyAoYW5kIGFsd2F5cyBwZXJmb3JtcyB0aGUgcHNldWRvIGhlYWRlciBjaGVja3N1bXMpLCBzbwordGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIGNoZWNrc3VtbWluZyBmb3IgVENQL0lQIGFuZCBVRFAvSVAKK3BhY2tldHMuICBVc2UgZXRodG9vbCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUgZm9yIFJYCithbmQgVFguCisKK1ZMQU4KKworSW4gb3JkZXIgdG8gdXNlIFZMQU4sIHBsZWFzZSBjb25zdWx0IExpbnV4IGRvY3VtZW50YXRpb24gb24KK2NvbmZpZ3VyaW5nIFZMQU5zLiAgVGhlIGdpYW5mYXIgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIGluc2VydGlvbiBhbmQKK2V4dHJhY3Rpb24gb2YgVkxBTiBoZWFkZXJzLCBidXQgbm90IGZpbHRlcmluZy4gIEZpbHRlcmluZyB3aWxsIGJlCitkb25lIGJ5IHRoZSBrZXJuZWwuCisKK01VTFRJQ0FTVElORworCitUaGUgZ2lhbmZhciBkcml2ZXIgc3VwcG9ydHMgdXNpbmcgdGhlIGdyb3VwIGhhc2ggdGFibGUgb24gdGhlCitUU0VDIChhbmQgdGhlIGV4dGVuZGVkIGhhc2ggdGFibGUgb24gdGhlIGVUU0VDKSBmb3IgbXVsdGljYXN0CitmaWx0ZXJpbmcuICBPbiB0aGUgZVRTRUMsIHRoZSBleGFjdC1tYXRjaCBNQUMgcmVnaXN0ZXJzIGFyZSB1c2VkCitiZWZvcmUgdGhlIGhhc2ggdGFibGVzLiAgU2VlIExpbnV4IGRvY3VtZW50YXRpb24gb24gaG93IHRvIGpvaW4KK211bHRpY2FzdCBncm91cHMuCisKK1BBRERJTkcKKworVGhlIGdpYW5mYXIgZHJpdmVyIHN1cHBvcnRzIHBhZGRpbmcgcmVjZWl2ZWQgZnJhbWVzIHdpdGggMiBieXRlcwordG8gYWxpZ24gdGhlIElQIGhlYWRlciB0byBhIDE2LWJ5dGUgYm91bmRhcnksIHdoZW4gc3VwcG9ydGVkIGJ5CitoYXJkd2FyZS4KKworRVRIVE9PTAorCitUaGUgZ2lhbmZhciBkcml2ZXIgc3VwcG9ydHMgdGhlIHVzZSBvZiBldGh0b29sIGZvciBtYW55Citjb25maWd1cmF0aW9uIG9wdGlvbnMuICBZb3UgbXVzdCBydW4gZXRodG9vbCBvbmx5IG9uIGN1cnJlbnRseQorb3BlbiBpbnRlcmZhY2VzLiAgU2VlIGV0aHRvb2wgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggZWJjMDlhMS4uMmI3Y2YxOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTQ2LDYgKzQ2LDI5IEBACiAJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQIGZyYWdtZW50cy4KIAlEZWZhdWx0OiA2MDAKIAoraXBmcmFnX21heF9kaXN0IC0gSU5URUdFUgorCWlwZnJhZ19tYXhfZGlzdCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGRlZmluZXMgdGhlIAorCW1heGltdW0gImRpc29yZGVyIiB3aGljaCBpcyBhbGxvd2VkIGFtb25nIGZyYWdtZW50cyB3aGljaCBzaGFyZSBhIAorCWNvbW1vbiBJUCBzb3VyY2UgYWRkcmVzcy4gTm90ZSB0aGF0IHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpcyAKKwlub3QgdW51c3VhbCwgYnV0IGlmIGEgbGFyZ2UgbnVtYmVyIG9mIGZyYWdtZW50cyBhcnJpdmUgZnJvbSBhIHNvdXJjZSAKKwlJUCBhZGRyZXNzIHdoaWxlIGEgcGFydGljdWxhciBmcmFnbWVudCBxdWV1ZSByZW1haW5zIGluY29tcGxldGUsIGl0IAorCXByb2JhYmx5IGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBiZWxvbmdpbmcgdG8gdGhhdCBxdWV1ZSAKKwloYXZlIGJlZW4gbG9zdC4gV2hlbiBpcGZyYWdfbWF4X2Rpc3QgaXMgcG9zaXRpdmUsIGFuIGFkZGl0aW9uYWwgY2hlY2sgCisJaXMgZG9uZSBvbiBmcmFnbWVudHMgYmVmb3JlIHRoZXkgYXJlIGFkZGVkIHRvIGEgcmVhc3NlbWJseSBxdWV1ZSAtIGlmIAorCWlwZnJhZ19tYXhfZGlzdCAob3IgbW9yZSkgZnJhZ21lbnRzIGhhdmUgYXJyaXZlZCBmcm9tIGEgcGFydGljdWxhciBJUCAKKwlhZGRyZXNzIGJldHdlZW4gYWRkaXRpb25zIHRvIGFueSBJUCBmcmFnbWVudCBxdWV1ZSB1c2luZyB0aGF0IHNvdXJjZSAKKwlhZGRyZXNzLCBpdCdzIHByZXN1bWVkIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGluIHRoZSBxdWV1ZSBhcmUgCisJbG9zdC4gVGhlIGV4aXN0aW5nIGZyYWdtZW50IHF1ZXVlIHdpbGwgYmUgZHJvcHBlZCwgYW5kIGEgbmV3IG9uZSAKKwlzdGFydGVkLiBBbiBpcGZyYWdfbWF4X2Rpc3QgdmFsdWUgb2YgemVybyBkaXNhYmxlcyB0aGlzIGNoZWNrLgorCisJVXNpbmcgYSB2ZXJ5IHNtYWxsIHZhbHVlLCBlLmcuIDEgb3IgMiwgZm9yIGlwZnJhZ19tYXhfZGlzdCBjYW4KKwlyZXN1bHQgaW4gdW5uZWNlc3NhcmlseSBkcm9wcGluZyBmcmFnbWVudCBxdWV1ZXMgd2hlbiBub3JtYWwKKwlyZW9yZGVyaW5nIG9mIHBhY2tldHMgb2NjdXJzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvb3IgYXBwbGljYXRpb24gCisJcGVyZm9ybWFuY2UuIFVzaW5nIGEgdmVyeSBsYXJnZSB2YWx1ZSwgZS5nLiA1MDAwMCwgaW5jcmVhc2VzIHRoZSAKKwlsaWtlbGlob29kIG9mIGluY29ycmVjdGx5IHJlYXNzZW1ibGluZyBJUCBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGUgCisJZnJvbSBkaWZmZXJlbnQgSVAgZGF0YWdyYW1zLCB3aGljaCBjb3VsZCByZXN1bHQgaW4gZGF0YSBjb3JydXB0aW9uLgorCURlZmF1bHQ6IDY0CisKIElORVQgcGVlciBzdG9yYWdlOgogCiBpbmV0X3BlZXJfdGhyZXNob2xkIC0gSU5URUdFUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZCBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKaW5kZXggNTMzMWQ5MS4uMDlmNjMwMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC0xLDMgKzEsMzggQEAKK1JlbGVhc2UgRGF0ZQk6IEZyaSBOb3YgMTEgMTI6Mjc6MjIgRVNUIDIwMDUgLSBTZW9rbWFubiBKdSA8c2p1QGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uIDogMi4yMC40LjcgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjYgKGNtbSBtb2R1bGUpCitPbGRlciBWZXJzaW9uCTogMi4yMC40LjYgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjYgKGNtbSBtb2R1bGUpCisKKzEuCVNvcnRlZCBvdXQgUENJIElEcyB0byByZW1vdmUgbWVnYXJhaWQgc3VwcG9ydCBvdmVybGFwcy4KKwlCYXNlZCBvbiB0aGUgcGF0Y2ggZnJvbSBEYW5pZWwsIHNvcnRlZCBvdXQgUENJIElEcyBhbG9uZyB3aXRoCisJY2hhcmFjdG9yIG5vZGUgbmFtZSBjaGFuZ2UgZnJvbSAnbWVnYWRldicgdG8gJ21lZ2FkZXZfbGVnYWN5JyB0byBhdm9pZAorCWNvbmZsaWN0LgorCS0tLQorCUhvcGVmdWxseSB3ZSdsbCBiZSBnZXR0aW5nIHRoZSBidWlsZCByZXN0cmljdGlvbiB6YXBwZWQgbXVjaCBzb29uZXIsIAorCWJ1dCB3ZSBzaG91bGQgYWxzbyBiZSB0aGlua2luZyBhYm91dCB0b3RhbGx5IHJlbW92aW5nIHRoZSBoYXJkd2FyZSAKKwlzdXBwb3J0IG92ZXJsYXAgaW4gdGhlIG1lZ2FyYWlkIGRyaXZlcnMuCisKKwlUaGlzIHBhdGNoIHBlbmNpbHMgaW4gYSBkYXRlIG9mIEZlYiAwNiBmb3IgdGhpcywgYW5kIHBlcmZvcm1zIHNvbWUgCisJcHJpbnRrIGFidXNlIGluIGhvcGUgdGhhdCBleGlzdGluZyBsZWdhY3kgdXNlcnMgbWlnaHQgcGljayB1cCBvbiB3aGF0J3MKKwlnb2luZyBvbi4KKworCVNpZ25lZC1vZmYtYnk6IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CisJLS0tCisKKzIuCUZpeGVkIGEgaXNzdWU6IG1lZ2FyYWlkIGFsd2F5cyBmYWlscyB0byByZXNldCBoYW5kbGVyLgorCS0tLQorCUkgZm91bmQgdGhhdCB0aGUgbWVnYXJhaWQgZHJpdmVyIGFsd2F5cyBmYWlscyB0byByZXNldCB0aGUKKwlhZGFwdGVyIHdpdGggdGhlIGZvbGxvd2luZyBtZXNzYWdlOgorCQltZWdhcmFpZDogcmVzZXR0aW5nIHRoZSBob3N0Li4uCisJCW1lZ2FyYWlkIG1ib3g6IHJlc2V0IHNlcXVlbmNlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKwkJbWVnYXJhaWQ6IGZhc3Qgc3luYyBjb21tYW5kIHRpbWVkIG91dAorCQltZWdhcmFpZDogcmVzZXJ2YXRpb24gcmVzZXQgZmFpbGVkCisJd2hlbiB0aGUgIkNsdXN0ZXIgbW9kZSIgb2YgdGhlIGFkYXB0ZXIgQklPUyBpcyBlbmFibGVkLgorCVNvLCB3aGVuZXZlciB0aGUgcmVzZXQgb2NjdXJzLCB0aGUgYWRhcHRlciBnb2VzIHRvCisJb2ZmbGluZSBhbmQganVzdCBiZWNvbWUgdW5hdmFpbGFibGUuCisKKwlKdW4naWNoaSBOb211cmEgW21haWx0bzpqbm9tdXJhQG10Yy5iaWdsb2JlLm5lLmpwXQorCS0tLQorCiBSZWxlYXNlIERhdGUJOiBNb24gTWFyIDA3IDEyOjI3OjIyIEVTVCAyMDA1IC0gU2Vva21hbm4gSnUgPHNqdUBsc2lsLmNvbT4KIEN1cnJlbnQgVmVyc2lvbiA6IDIuMjAuNC42IChzY3NpIG1vZHVsZSksIDIuMjAuMi42IChjbW0gbW9kdWxlKQogT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC41IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CmluZGV4IDY2NTY1ZDQuLjhiYmFlM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKQEAgLTE1MCw3ICsxNTAsOCBAQAogTExEICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgICAgTExECiA9PT0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KIHNjc2lfaG9zdF9hbGxvYygpICAtLT4KLXNjc2lfYWRkX2hvc3QoKSAgLS0tLS0tLS0rCitzY3NpX2FkZF9ob3N0KCkgIC0tLS0+CitzY3NpX3NjYW5faG9zdCgpICAtLS0tLS0tKwogICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQogICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKQEAgLTE5Niw3ICsxOTcsNyBAQAogCiAKIFRoZSBob3RwbHVnIGNvbmNlcHQgbWF5IGJlIGV4dGVuZGVkIHRvIFNDU0kgZGV2aWNlcy4gQ3VycmVudGx5LCB3aGVuIGFuCi1IQkEgaXMgYWRkZWQsIHRoZSBzY3NpX2FkZF9ob3N0KCkgZnVuY3Rpb24gY2F1c2VzIGEgc2NhbiBmb3IgU0NTSSBkZXZpY2VzCitIQkEgaXMgYWRkZWQsIHRoZSBzY3NpX3NjYW5faG9zdCgpIGZ1bmN0aW9uIGNhdXNlcyBhIHNjYW4gZm9yIFNDU0kgZGV2aWNlcwogYXR0YWNoZWQgdG8gdGhlIEhCQSdzIFNDU0kgdHJhbnNwb3J0LiBPbiBuZXdlciBTQ1NJIHRyYW5zcG9ydHMgdGhlIEhCQQogbWF5IGJlY29tZSBhd2FyZSBvZiBhIG5ldyBTQ1NJIGRldmljZSBfYWZ0ZXJfIHRoZSBzY2FuIGhhcyBjb21wbGV0ZWQuCiBBbiBMTEQgY2FuIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2UgdGhlIG1pZCBsZXZlbCBhd2FyZSBvZiBhIFNDU0kgZGV2aWNlOgpAQCAtMzcyLDcgKzM3Myw3IEBACiBTdW1tYXJ5OgogICAgc2NzaV9hY3RpdmF0ZV90Y3EgLSB0dXJuIG9uIHRhZyBjb21tYW5kIHF1ZXVlaW5nCiAgICBzY3NpX2FkZF9kZXZpY2UgLSBjcmVhdGVzIG5ldyBzY3NpIGRldmljZSAobHUpIGluc3RhbmNlCi0gICBzY3NpX2FkZF9ob3N0IC0gcGVyZm9ybSBzeXNmcyByZWdpc3RyYXRpb24gYW5kIFNDU0kgYnVzIHNjYW4uCisgICBzY3NpX2FkZF9ob3N0IC0gcGVyZm9ybSBzeXNmcyByZWdpc3RyYXRpb24gYW5kIHNldCB1cCB0cmFuc3BvcnQgY2xhc3MKICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCiAgICBzY3NpX2Fzc2lnbl9sb2NrIC0gcmVwbGFjZSBkZWZhdWx0IGhvc3RfbG9jayB3aXRoIGdpdmVuIGxvY2sKICAgIHNjc2lfYmlvc19wdGFibGUgLSByZXR1cm4gY29weSBvZiBibG9jayBkZXZpY2UncyBwYXJ0aXRpb24gdGFibGUKQEAgLTM4Niw2ICszODcsNyBAQAogICAgc2NzaV9yZW1vdmVfZGV2aWNlIC0gZGV0YWNoIGFuZCByZW1vdmUgYSBTQ1NJIGRldmljZQogICAgc2NzaV9yZW1vdmVfaG9zdCAtIGRldGFjaCBhbmQgcmVtb3ZlIGFsbCBTQ1NJIGRldmljZXMgb3duZWQgYnkgaG9zdAogICAgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0IC0gcmVwb3J0IHNjc2kgX2J1c18gcmVzZXQgb2JzZXJ2ZWQKKyAgIHNjc2lfc2Nhbl9ob3N0IC0gc2NhbiBTQ1NJIGJ1cwogICAgc2NzaV90cmFja19xdWV1ZV9mdWxsIC0gdHJhY2sgc3VjY2Vzc2l2ZSBRVUVVRV9GVUxMIGV2ZW50cyAKICAgIHNjc2lfdW5ibG9ja19yZXF1ZXN0cyAtIGFsbG93IGZ1cnRoZXIgY29tbWFuZHMgdG8gYmUgcXVldWVkIHRvIGdpdmVuIGhvc3QKICAgIHNjc2lfdW5yZWdpc3RlciAtIFtjYWxscyBzY3NpX2hvc3RfcHV0KCldCkBAIC00MjUsMTAgKzQyNywxMCBAQAogICogICAgICBNaWdodCBibG9jazogeWVzCiAgKgogICogICAgICBOb3RlczogVGhpcyBjYWxsIGlzIHVzdWFsbHkgcGVyZm9ybWVkIGludGVybmFsbHkgZHVyaW5nIGEgc2NzaQotICogICAgICBidXMgc2NhbiB3aGVuIGFuIEhCQSBpcyBhZGRlZCAoaS5lLiBzY3NpX2FkZF9ob3N0KCkpLiBTbyBpdAorICogICAgICBidXMgc2NhbiB3aGVuIGFuIEhCQSBpcyBhZGRlZCAoaS5lLiBzY3NpX3NjYW5faG9zdCgpKS4gU28gaXQKICAqICAgICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBIQkEgYmVjb21lcyBhd2FyZSBvZiBhIG5ldyBzY3NpCi0gKiAgICAgIGRldmljZSAobHUpIGFmdGVyIHNjc2lfYWRkX2hvc3QoKSBoYXMgY29tcGxldGVkLiBJZiBzdWNjZXNzZnVsCi0gKiAgICAgIHRoaXMgY2FsbCB3ZSBsZWFkIHRvIHNsYXZlX2FsbG9jKCkgYW5kIHNsYXZlX2NvbmZpZ3VyZSgpIGNhbGxiYWNrcworICogICAgICBkZXZpY2UgKGx1KSBhZnRlciBzY3NpX3NjYW5faG9zdCgpIGhhcyBjb21wbGV0ZWQuIElmIHN1Y2Nlc3NmdWwKKyAqICAgICAgdGhpcyBjYWxsIGNhbiBsZWFkIHRvIHNsYXZlX2FsbG9jKCkgYW5kIHNsYXZlX2NvbmZpZ3VyZSgpIGNhbGxiYWNrcwogICogICAgICBpbnRvIHRoZSBMTEQuCiAgKgogICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTQzOSw3ICs0NDEsNyBAQAogCiAKIC8qKgotICogc2NzaV9hZGRfaG9zdCAtIHBlcmZvcm0gc3lzZnMgcmVnaXN0cmF0aW9uIGFuZCBTQ1NJIGJ1cyBzY2FuLgorICogc2NzaV9hZGRfaG9zdCAtIHBlcmZvcm0gc3lzZnMgcmVnaXN0cmF0aW9uIGFuZCBzZXQgdXAgdHJhbnNwb3J0IGNsYXNzCiAgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzY3NpIGhvc3QgaW5zdGFuY2UKICAqIEBkZXY6ICAgICBwb2ludGVyIHRvIHN0cnVjdCBkZXZpY2Ugb2YgdHlwZSBzY3NpIGNsYXNzCiAgKgpAQCAtNDQ4LDcgKzQ1MCwxMSBAQAogICogICAgICBNaWdodCBibG9jazogbm8KICAqCiAgKiAgICAgIE5vdGVzOiBPbmx5IHJlcXVpcmVkIGluICJob3RwbHVnIGluaXRpYWxpemF0aW9uIG1vZGVsIiBhZnRlciBhCi0gKiAgICAgIHN1Y2Nlc3NmdWwgY2FsbCB0byBzY3NpX2hvc3RfYWxsb2MoKS4KKyAqICAgICAgc3VjY2Vzc2Z1bCBjYWxsIHRvIHNjc2lfaG9zdF9hbGxvYygpLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAorICoJc2NhbiB0aGUgYnVzOyB0aGlzIGNhbiBiZSBkb25lIGJ5IGNhbGxpbmcgc2NzaV9zY2FuX2hvc3QoKSBvcgorICoJaW4gc29tZSBvdGhlciB0cmFuc3BvcnQtc3BlY2lmaWMgd2F5LiAgVGhlIExMRCBtdXN0IHNldCB1cAorICoJdGhlIHRyYW5zcG9ydCB0ZW1wbGF0ZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBtYXkgb25seQorICoJYWNjZXNzIHRoZSB0cmFuc3BvcnQgY2xhc3MgZGF0YSBhZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZC4KICAqCiAgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jCiAgKiovCkBAIC01NTksNyArNTY1LDcgQEAKICAqICAgICAgYXJlYSBmb3IgdGhlIExMRCdzIGV4Y2x1c2l2ZSB1c2UuCiAgKiAgICAgIEJvdGggYXNzb2NpYXRlZCByZWZjb3VudGluZyBvYmplY3RzIGhhdmUgdGhlaXIgcmVmY291bnQgc2V0IHRvIDEuCiAgKiAgICAgIEZ1bGwgcmVnaXN0cmF0aW9uIChpbiBzeXNmcykgYW5kIGEgYnVzIHNjYW4gYXJlIHBlcmZvcm1lZCBsYXRlciB3aGVuCi0gKiAgICAgIHNjc2lfYWRkX2hvc3QoKSBpcyBjYWxsZWQuCisgKiAgICAgIHNjc2lfYWRkX2hvc3QoKSBhbmQgc2NzaV9zY2FuX2hvc3QoKSBhcmUgY2FsbGVkLgogICoKICAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMgLgogICoqLwpAQCAtNjk5LDYgKzcwNSwxOSBAQAogCiAKIC8qKgorICogc2NzaV9zY2FuX2hvc3QgLSBzY2FuIFNDU0kgYnVzCisgKiBAc2hvc3Q6IGEgcG9pbnRlciB0byBhIHNjc2kgaG9zdCBpbnN0YW5jZQorICoKKyAqCU1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKglOb3RlczogU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzY3NpX2FkZF9ob3N0KCkKKyAqCisgKglEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKyAqKi8KK3ZvaWQgc2NzaV9zY2FuX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCisKKworLyoqCiAgKiBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwgLSB0cmFjayBzdWNjZXNzaXZlIFFVRVVFX0ZVTEwgZXZlbnRzIG9uIGdpdmVuCiAgKiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gZGV0ZXJtaW5lIGlmIGFuZCB3aGVuIHRoZXJlIGlzIGEgbmVlZAogICogICAgICAgICAgICAgICAgICAgICAgdG8gYWRqdXN0IHRoZSBxdWV1ZSBkZXB0aCBvbiB0aGUgZGV2aWNlLgpAQCAtMTQzMyw3ICsxNDUyLDcgQEAKICAgICAgICAgQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaCBhdCBpbmZyYWRlYWQgZG90IG9yZz4KICAgICAgICAgRG91ZyBMZWRmb3JkIDxkbGVkZm9yZCBhdCByZWRoYXQgZG90IGNvbT4KICAgICAgICAgQW5kcmllcyBCcm91d2VyIDxBbmRyaWVzIGRvdCBCcm91d2VyIGF0IGN3aSBkb3Qgbmw+Ci0gICAgICAgIFJhbmR5IER1bmxhcCA8cmRkdW5sYXAgYXQgb3NkbCBkb3Qgb3JnPgorICAgICAgICBSYW5keSBEdW5sYXAgPHJkdW5sYXAgYXQgeGVub3RpbWUgZG90IG5ldD4KICAgICAgICAgQWxhbiBTdGVybiA8c3Rlcm4gYXQgcm93bGFuZCBkb3QgaGFydmFyZCBkb3QgZWR1PgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKaW5kZXggYmFmMTdiMy4uYWQwYmVkZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKQEAgLTIwMiwxNyArMjAyLDEzIEBACiAKICogIEkgaGF2ZSBtb3JlIHF1ZXN0aW9ucywgd2hvIGNhbiBJIGFzaz8KIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVlvdSBtYXkgZmVlbCBmcmVlIHRvIHNlbmQgZW1haWwgdG8gbXlyZHJhYWxAZGVhdGhzZG9vci5jb20sIGFuZCBJIHdpbGwKLXJlc3BvbmQgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAtTXlyZHJhYWwKLQogQW5kIEknbGwgYW5zd2VyIGFueSBxdWVzdGlvbnMgYWJvdXQgdGhlIHJlZ2lzdHJhdGlvbiBzeXN0ZW0geW91IGdvdCwgYWxzbwogcmVzcG9uZGluZyBhcyBzb29uIGFzIHBvc3NpYmxlLgogIC1DcnV0Y2hlcgogCiAqICBDcmVkaXRzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1Xcml0dGVuIGJ5IE15ZHJhYWwgPG15cmRyYWFsQGRlYXRoc2Rvb3IuY29tPgorV3JpdHRlbiBieSBNeWRyYWFsIDx2dWxweW5lQHZ1bHB5bmUubmV0PgogVXBkYXRlZCBieSBBZGFtIFN1bG1pY2tpIDxhZGFtQGNmYXIudW1kLmVkdT4KIFVwZGF0ZWQgYnkgSmVyZW15IE0uIERvbGFuIDxqbWRAdHVyYm9nZWVrLm9yZz4gMjAwMS8wMS8yOCAxMDoxNTo1OQogQWRkZWQgdG8gYnkgQ3J1dGNoZXIgRHVubmF2YW50IDxjcnV0Y2hlcitrZXJuZWxAZGF0YXN0YWNrcy5jb20+CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDkzZjk3YjMuLjFlNTlkMzkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNDcwLDcgKzE0NzAsNiBAQAogTDoJa2VybmVsLWphbml0b3JzQG9zZGwub3JnCiBXOglodHRwOi8vd3d3Lmtlcm5lbGphbml0b3JzLm9yZy8KIFc6CWh0dHA6Ly9zZi5uZXQvcHJvamVjdHMva2VybmVsLWphbml0b3IvCi1XOglodHRwOi8vZGV2ZWxvcGVyLm9zZGwub3JnL3JkZHVubGFwL2tqLXBhdGNoZXMvCiBTOglNYWludGFpbmVkCiAKIEtFUk5FTCBORlNECkBAIC0xNDkxLDcgKzE0OTAsNyBAQAogUDoJRXJpYyBCaWVkZXJtYW4KIFA6CVJhbmR5IER1bmxhcAogTToJZWJpZWRlcm1AeG1pc3Npb24uY29tCi1NOglyZGR1bmxhcEBvc2RsLm9yZworTToJcmR1bmxhcEB4ZW5vdGltZS5uZXQKIFc6CWh0dHA6Ly93d3cueG1pc3Npb24uY29tL35lYmllZGVybS9maWxlcy9rZXhlYy8KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIEw6CWZhc3Rib290QG9zZGwub3JnCkBAIC0yNTkyLDcgKzI1OTEsNiBAQAogVURGIEZJTEVTWVNURU0KIFA6CUJlbiBGZW5uZW1hCiBNOgliZmVubmVtYUBmYWxjb24uY3NjLmNhbHBvbHkuZWR1Ci1MOglsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KIFc6CWh0dHA6Ly9saW51eC11ZGYuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKQEAgLTI2NDUsNiArMjY0MywxMiBAQAogTDoJbGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitVU0IgSVNQMTE2WCBEUklWRVIKK1A6CU9sYXYgS29uZ2FzCitNOglva0BhcnRlY2Rlc2lnbi5lZQorTDoJbGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUzoJTWFpbnRhaW5lZAorCiBVU0IgS0FXQVNBS0kgTFNJIERSSVZFUgogUDoJT2xpdmVyIE5ldWt1bQogTToJb2xpdmVyQG5ldWt1bS5uYW1lCkBAIC0yNjU2LDcgKzI2NjAsNyBAQAogUDoJTWF0dGhldyBEaGFybQogTToJbWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQKIEw6CWxpbnV4LXVzYi11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLUw6CWxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXVzYi1zdG9yYWdlQGxpc3RzLm9uZS1leWVkLWFsaWVuLm5ldAogUzoJTWFpbnRhaW5lZAogVzoJaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IvCiAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggNDk3ODg0ZC4uNTk5ZTc0NCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTI4NiwxMCArMjg2LDYgQEAKIGNjLW9wdGlvbiA9ICQoc2hlbGwgaWYgJChDQykgJChDRkxBR1MpICQoMSkgLVMgLW8gL2Rldi9udWxsIC14YyAvZGV2L251bGwgXAogICAgICAgICAgICAgID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gZWNobyAiJCgxKSI7IGVsc2UgZWNobyAiJCgyKSI7IGZpIDspCiAKLSMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKLWNoZWNrX2djYyA9ICQod2FybmluZyBjaGVja19nY2MgaXMgZGVwcmVjYXRlZCAtIHVzZSBjYy1vcHRpb24pIFwKLSAgICAgICAgICAgICQoY2FsbCBjYy1vcHRpb24sICQoMSksJCgyKSkKLQogIyBjYy1vcHRpb24teW4KICMgVXNhZ2U6IGZsYWcgOj0gJChjYWxsIGNjLW9wdGlvbi15biwgLW1hcmNoPXdpbmNoaXAtYzYpCiBjYy1vcHRpb24teW4gPSAkKHNoZWxsIGlmICQoQ0MpICQoQ0ZMQUdTKSAkKDEpIC1TIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsIFwKQEAgLTQ4MSwxOCArNDc3LDIwIEBACiAKICMgUmVhZCBpbiBkZXBlbmRlbmNpZXMgdG8gYWxsIEtjb25maWcqIGZpbGVzLCBtYWtlIHN1cmUgdG8gcnVuCiAjIG9sZGNvbmZpZyBpZiBjaGFuZ2VzIGFyZSBkZXRlY3RlZC4KLS1pbmNsdWRlIC5jb25maWcuY21kCistaW5jbHVkZSAua2NvbmZpZy5kCiAKIGluY2x1ZGUgLmNvbmZpZwogCiAjIElmIC5jb25maWcgbmVlZHMgdG8gYmUgdXBkYXRlZCwgaXQgd2lsbCBiZSBkb25lIHZpYSB0aGUgZGVwZW5kZW5jeQogIyB0aGF0IGF1dG9jb25mIGhhcyBvbiAuY29uZmlnLgogIyBUbyBhdm9pZCBhbnkgaW1wbGljaXQgcnVsZSB0byBraWNrIGluLCBkZWZpbmUgYW4gZW1wdHkgY29tbWFuZAotLmNvbmZpZzogOworLmNvbmZpZyAua2NvbmZpZy5kOiA7CiAKICMgSWYgLmNvbmZpZyBpcyBuZXdlciB0aGFuIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCwgc29tZW9uZSB0aW5rZXJlZAotIyB3aXRoIGl0IGFuZCBmb3Jnb3QgdG8gcnVuIG1ha2Ugb2xkY29uZmlnCi1pbmNsdWRlL2xpbnV4L2F1dG9jb25mLmg6IC5jb25maWcKKyMgd2l0aCBpdCBhbmQgZm9yZ290IHRvIHJ1biBtYWtlIG9sZGNvbmZpZy4KKyMgSWYga2NvbmZpZy5kIGlzIG1pc3NpbmcgdGhlbiB3ZSBhcmUgcHJvYmFybHkgaW4gYSBjbGVhbmVkIHRyZWUgc28KKyMgd2UgZXhlY3V0ZSB0aGUgY29uZmlnIHN0ZXAgdG8gYmUgc3VyZSB0byBjYXRjaCB1cGRhdGVkIEtjb25maWcgZmlsZXMKK2luY2x1ZGUvbGludXgvYXV0b2NvbmYuaDogLmtjb25maWcuZCAuY29uZmlnCiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvbGludXgKIAkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2VmaWxlIHNpbGVudG9sZGNvbmZpZwogZWxzZQpAQCAtMTA2Niw3ICsxMDY0LDcgQEAKIAlAZWNobyAgJyAgYWxsCQkgIC0gQnVpbGQgYWxsIHRhcmdldHMgbWFya2VkIHdpdGggWypdJwogCUBlY2hvICAnKiB2bWxpbnV4CSAgLSBCdWlsZCB0aGUgYmFyZSBrZXJuZWwnCiAJQGVjaG8gICcqIG1vZHVsZXMJICAtIEJ1aWxkIGFsbCBtb2R1bGVzJwotCUBlY2hvICAnICBtb2R1bGVzX2luc3RhbGwgLSBJbnN0YWxsIGFsbCBtb2R1bGVzJworCUBlY2hvICAnICBtb2R1bGVzX2luc3RhbGwgLSBJbnN0YWxsIGFsbCBtb2R1bGVzIHRvIElOU1RBTExfTU9EX1BBVEggKGRlZmF1bHQ6IC8pJwogCUBlY2hvICAnICBkaXIvICAgICAgICAgICAgLSBCdWlsZCBhbGwgZmlsZXMgaW4gZGlyIGFuZCBiZWxvdycKIAlAZWNobyAgJyAgZGlyL2ZpbGUuW29pc10gIC0gQnVpbGQgc3BlY2lmaWVkIHRhcmdldCBvbmx5JwogCUBlY2hvICAnICBkaXIvZmlsZS5rbyAgICAgLSBCdWlsZCBtb2R1bGUgaW5jbHVkaW5nIGZpbmFsIGxpbmsnCkBAIC0xMjQwLDggKzEyMzgsMTEgQEAKIHF1aWV0X2NtZF9UQUdTID0gTUFLRSAgICRACiBkZWZpbmUgY21kX1RBR1MKIAlybSAtZiAkQDsgXAotCUVUQUdTRj1gZXRhZ3MgLS12ZXJzaW9uIHwgZ3JlcCAtaSBleHViZXJhbnQgPi9kZXYvbnVsbCAmJiBlY2hvICItSSBfX2luaXRkYXRhLF9fZXhpdGRhdGEsRVhQT1JUX1NZTUJPTCxFWFBPUlRfU1lNQk9MX0dQTCAtLWV4dHJhPStmImA7IFwKLQkkKGFsbC1zb3VyY2VzKSB8IHhhcmdzIGV0YWdzICQkRVRBR1NGIC1hCisJRVRBR1NGPWBldGFncyAtLXZlcnNpb24gfCBncmVwIC1pIGV4dWJlcmFudCA+L2Rldi9udWxsICYmICAgICBcCisgICAgICAgICAgICAgICAgZWNobyAiLUkgX19pbml0ZGF0YSxfX2V4aXRkYXRhLF9fYWNxdWlyZXMsX19yZWxlYXNlcyAgXAorICAgICAgICAgICAgICAgICAgICAgIC1JIEVYUE9SVF9TWU1CT0wsRVhQT1JUX1NZTUJPTF9HUEwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAtLWV4dHJhPStmIC0tYy1raW5kcz0rcHgiYDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJChhbGwtc291cmNlcykgfCB4YXJncyBldGFncyAkJEVUQUdTRiAtYQogZW5kZWYKIAogVEFHUzogRk9SQ0UKQEAgLTEyNTEsOCArMTI1MiwxMSBAQAogcXVpZXRfY21kX3RhZ3MgPSBNQUtFICAgJEAKIGRlZmluZSBjbWRfdGFncwogCXJtIC1mICRAOyBcCi0JQ1RBR1NGPWBjdGFncyAtLXZlcnNpb24gfCBncmVwIC1pIGV4dWJlcmFudCA+L2Rldi9udWxsICYmIGVjaG8gIi1JIF9faW5pdGRhdGEsX19leGl0ZGF0YSxFWFBPUlRfU1lNQk9MLEVYUE9SVF9TWU1CT0xfR1BMIC0tZXh0cmE9K2YiYDsgXAotCSQoYWxsLXNvdXJjZXMpIHwgeGFyZ3MgY3RhZ3MgJCRDVEFHU0YgLWEKKwlDVEFHU0Y9YGN0YWdzIC0tdmVyc2lvbiB8IGdyZXAgLWkgZXh1YmVyYW50ID4vZGV2L251bGwgJiYgICAgIFwKKyAgICAgICAgICAgICAgICBlY2hvICItSSBfX2luaXRkYXRhLF9fZXhpdGRhdGEsX19hY3F1aXJlcyxfX3JlbGVhc2VzICBcCisgICAgICAgICAgICAgICAgICAgICAgLUkgRVhQT1JUX1NZTUJPTCxFWFBPUlRfU1lNQk9MX0dQTCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIC0tZXh0cmE9K2YgLS1jLWtpbmRzPStweCJgOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAkKGFsbC1zb3VyY2VzKSB8IHhhcmdzIGN0YWdzICQkQ1RBR1NGIC1hCiBlbmRlZgogCiB0YWdzOiBGT1JDRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwppbmRleCAwNzg5MmY0Li4yNzc0OThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJkYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMzkzLDYgKzM5NCwyNSBAQAogCSZtc3RfZmxhc2hfZGV2aWNlWzFdLAogfTsKIAorc3RhdGljIGludCBtYWluc3RvbmVfb2hjaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBzZXR1cCBQb3J0MSBHUElPIHBpbi4gKi8KKwlweGFfZ3Bpb19tb2RlKCA4OCB8IEdQSU9fQUxUX0ZOXzFfSU4pOwkvKiBVU0JIUFdSMSAqLworCXB4YV9ncGlvX21vZGUoIDg5IHwgR1BJT19BTFRfRk5fMl9PVVQpOwkvKiBVU0JIUEVOMSAqLworCisJLyogU2V0IHRoZSBQb3dlciBDb250cm9sIFBvbGFyaXR5IExvdyBhbmQgUG93ZXIgU2Vuc2UKKwkgICBQb2xhcml0eSBMb3cgdG8gYWN0aXZlIGxvdy4gKi8KKwlVSENIUiA9IChVSENIUiB8IFVIQ0hSX1BDUEwgfCBVSENIUl9QU1BMKSAmCisJCX4oVUhDSFJfU1NFUDEgfCBVSENIUl9TU0VQMiB8IFVIQ0hSX1NTRVAzIHwgVUhDSFJfU1NFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBtYWluc3RvbmVfb2hjaV9wbGF0Zm9ybV9kYXRhID0geworCS5wb3J0X21vZGUJPSBQTU1fUEVSUE9SVF9NT0RFLAorCS5pbml0CQk9IG1haW5zdG9uZV9vaGNpX2luaXQsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFpbnN0b25lX2luaXQodm9pZCkKIHsKIAlpbnQgU1c3ID0gMDsgIC8qIEZJWE1FOiBnZXQgZnJvbSBTQ1IgKE1zdCBkb2Mgc2VjdGlvbiAzLjIuMS4xKSAqLwpAQCAtNDI0LDYgKzQ0NCw3IEBACiAKIAlweGFfc2V0X21jaV9pbmZvKCZtYWluc3RvbmVfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZtYWluc3RvbmVfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X29oY2lfaW5mbygmbWFpbnN0b25lX29oY2lfcGxhdGZvcm1fZGF0YSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCBjNzIyYTlhLi5iNDFiMWVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMTk0LDYgKzE5NSwxMSBAQAogCS5yZXNvdXJjZSAgICAgICA9IHB4YTI3eF9vaGNpX3Jlc291cmNlcywKIH07CiAKK3ZvaWQgX19pbml0IHB4YV9zZXRfb2hjaV9pbmZvKHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgKmluZm8pCit7CisJb2hjaV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvOworfQorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm9oY2lfZGV2aWNlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYvbndmcGUvZnBtb2R1bGUuYyBiL2FyY2gvYXJtMjYvbndmcGUvZnBtb2R1bGUuYwppbmRleCA1MjhmYTcxLi41MjU4YzYwIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L253ZnBlL2ZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0yNi9ud2ZwZS9mcG1vZHVsZS5jCkBAIC00NiwxMCArNDYsOSBAQAogCiAjaWZkZWYgTU9EVUxFCiB2b2lkIGZwX3NlbmRfc2lnKHVuc2lnbmVkIGxvbmcgc2lnLCBQVEFTSyBwLCBpbnQgcHJpdik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gMHgyMDExNQorCiBNT0RVTEVfQVVUSE9SKCJTY290dCBCYW1icm91Z2ggPHNjb3R0YkByZWJlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk5XRlBFIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yIik7Ci0jZW5kaWYKIAogI2Vsc2UKICNkZWZpbmUgZnBfc2VuZF9zaWcJc2VuZF9zaWcKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCmluZGV4IDA0YTQwNTMuLjJiNjJkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwpAQCAtMTc3LDkgKzE3NywxMCBAQAogICovCiBzdGF0aWMgaW50IG5mb3JjZTJfc2V0X2ZzYih1bnNpZ25lZCBpbnQgZnNiKQogewotCXUzMiBwbGwsIHRlbXAgPSAwOworCXUzMiB0ZW1wID0gMDsKIAl1bnNpZ25lZCBpbnQgdGZzYjsKIAlpbnQgZGlmZjsKKwlpbnQgcGxsID0gMDsKIAogCWlmICgoZnNiID4gbWF4X2ZzYikgfHwgKGZzYiA8IE5GT1JDRTJfTUlOX0ZTQikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBGU0IgJWQgaXMgb3V0IG9mIHJhbmdlIVxuIiwgZnNiKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA2OGExZmM4Li4wZmJiZDRjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC00NSw3ICs0NSw3IEBACiAKICNkZWZpbmUgUEZYICJwb3dlcm5vdy1rODogIgogI2RlZmluZSBCRlggUEZYICJCSU9TIGVycm9yOiAiCi0jZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMS41MC40IgorI2RlZmluZSBWRVJTSU9OICJ2ZXJzaW9uIDEuNjAuMCIKICNpbmNsdWRlICJwb3dlcm5vdy1rOC5oIgogCiAvKiBzZXJpYWxpemUgZnJlcSBjaGFuZ2VzICAqLwpAQCAtMjE2LDEwICsyMTYsMTAgQEAKIAogCWRvIHsKIAkJd3Jtc3IoTVNSX0ZJRFZJRF9DVEwsIGxvLCBTVE9QX0dSQU5UXzVOUyk7Ci0gICAgICAgICAgICAgICAgaWYgKGkrKyA+IDEwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW50ZXJuYWwgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gbm8gZnVydGhlciBwc3RhdGUgY2hhbmdlcyBwb3NzaWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9CisJCWlmIChpKysgPiAxMDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImludGVybmFsIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlIGNoYW5nZXMgcG9zc2libGVcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KIAl9IHdoaWxlIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSk7CiAKIAlpZiAoc2F2ZWZpZCAhPSBkYXRhLT5jdXJyZmlkKSB7CkBAIC0zMzYsNyArMzM2LDcgQEAKIC8qIFBoYXNlIDIgLSBjb3JlIGZyZXF1ZW5jeSB0cmFuc2l0aW9uICovCiBzdGF0aWMgaW50IGNvcmVfZnJlcXVlbmN5X3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXFmaWQpCiB7Ci0JdTMyIHZjb3JlcWZpZCwgdmNvY3VycmZpZCwgdmNvZmlkZGlmZiwgc2F2ZXZpZCA9IGRhdGEtPmN1cnJ2aWQ7CisJdTMyIHZjb3JlcWZpZCwgdmNvY3VycmZpZCwgdmNvZmlkZGlmZiwgZmlkX2ludGVydmFsLCBzYXZldmlkID0gZGF0YS0+Y3VycnZpZDsKIAogCWlmICgocmVxZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgJiYgKGRhdGEtPmN1cnJmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDI6IGlsbGVnYWwgbG8tbG8gdHJhbnNpdGlvbiAweCV4IDB4JXhcbiIsCkBAIC0zNTksOSArMzU5LDExIEBACiAJICAgIDogdmNvcmVxZmlkIC0gdmNvY3VycmZpZDsKIAogCXdoaWxlICh2Y29maWRkaWZmID4gMikgeworCQkoZGF0YS0+Y3VycmZpZCAmIDEpID8gKGZpZF9pbnRlcnZhbCA9IDEpIDogKGZpZF9pbnRlcnZhbCA9IDIpOworCiAJCWlmIChyZXFmaWQgPiBkYXRhLT5jdXJyZmlkKSB7CiAJCQlpZiAoZGF0YS0+Y3VycmZpZCA+IExPX0ZJRF9UQUJMRV9UT1ApIHsKLQkJCQlpZiAod3JpdGVfbmV3X2ZpZChkYXRhLCBkYXRhLT5jdXJyZmlkICsgMikpIHsKKwkJCQlpZiAod3JpdGVfbmV3X2ZpZChkYXRhLCBkYXRhLT5jdXJyZmlkICsgZmlkX2ludGVydmFsKSkgewogCQkJCQlyZXR1cm4gMTsKIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtMzcxLDcgKzM3Myw3IEBACiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwgZGF0YS0+Y3VycmZpZCAtIDIpKQorCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwgZGF0YS0+Y3VycmZpZCAtIGZpZF9pbnRlcnZhbCkpCiAJCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDY0LDcgKzQ2Niw3IEBACiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKIAogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gY3B1KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgY3B1KTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgY3B1KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00NzQsNyArNDc2LDcgQEAKIAllYXggPSBjcHVpZF9lYXgoQ1BVSURfUFJPQ0VTU09SX1NJR05BVFVSRSk7CiAJaWYgKCgoZWF4ICYgQ1BVSURfVVNFX1hGQU1fWE1PRCkgIT0gQ1BVSURfVVNFX1hGQU1fWE1PRCkgfHwKIAkgICAgKChlYXggJiBDUFVJRF9YRkFNKSAhPSBDUFVJRF9YRkFNX0s4KSB8fAotCSAgICAoKGVheCAmIENQVUlEX1hNT0QpID4gQ1BVSURfWE1PRF9SRVZfRikpIHsKKwkgICAgKChlYXggJiBDUFVJRF9YTU9EKSA+IENQVUlEX1hNT0RfUkVWX0cpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJQcm9jZXNzb3IgY3B1aWQgJXggbm90IHN1cHBvcnRlZFxuIiwgZWF4KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNTE3LDIyICs1MTksMjQgQEAKIAkJCXByaW50ayhLRVJOX0VSUiBCRlggIm1heHZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSAlZFxuIiwgaik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAoKHBzdFtqXS5maWQgPiBNQVhfRklEKQotCQkgICAgfHwgKHBzdFtqXS5maWQgJiAxKQotCQkgICAgfHwgKGogJiYgKHBzdFtqXS5maWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkpIHsKKwkJaWYgKHBzdFtqXS5maWQgPiBNQVhfRklEKSB7CisJCQlwcmludGsoS0VSTl9FUlIgQkZYICJtYXhmaWQgZXhjZWVkZWQgd2l0aCBwc3RhdGUgJWRcbiIsIGopOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKGogJiYgKHBzdFtqXS5maWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgewogCQkJLyogT25seSBmaXJzdCBmaWQgaXMgYWxsb3dlZCB0byBiZSBpbiAibG93IiByYW5nZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidHdvIGxvdyBmaWRzIC0gJWQgOiAweCV4XG4iLCBqLCBwc3Rbal0uZmlkKTsKKwkJCXByaW50ayhLRVJOX0VSUiBCRlggInR3byBsb3cgZmlkcyAtICVkIDogMHgleFxuIiwgaiwgcHN0W2pdLmZpZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAocHN0W2pdLmZpZCA8IGxhc3RmaWQpCiAJCQlsYXN0ZmlkID0gcHN0W2pdLmZpZDsKIAl9CiAJaWYgKGxhc3RmaWQgJiAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImxhc3RmaWQgaW52YWxpZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBCRlggImxhc3RmaWQgaW52YWxpZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobGFzdGZpZCA+IExPX0ZJRF9UQUJMRV9UT1ApCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICAiZmlyc3QgZmlkIG5vdCBmcm9tIGxvIGZyZXEgdGFibGVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIEJGWCAgImZpcnN0IGZpZCBub3QgZnJvbSBsbyBmcmVxIHRhYmxlXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjMxLDcgKzYzNSw3IEBACiAKIAkJZHByaW50aygidGFibGUgdmVyczogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOwogCQlpZiAocHNiLT50YWJsZXZlcnNpb24gIT0gUFNCX1ZFUlNJT05fMV80KSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIEJGWCAiUFNCIHRhYmxlIGlzIG5vdCB2MS40XG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBCRlggIlBTQiB0YWJsZSBpcyBub3QgdjEuNFxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCkBAIC02ODksNyArNjkzLDcgQEAKIAkgKiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUsIHdoaWNoIGlzIGF2YWlsYWJsZSBvbgogCSAqIHd3dy5hbWQuY29tCiAJICovCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkJJT1MgZXJyb3IgLSBubyBQU0Igb3IgQUNQSSBfUFNTIG9iamVjdHNcbiIpOworCXByaW50ayhLRVJOX0VSUiBQRlggIkJJT1MgZXJyb3IgLSBubyBQU0Igb3IgQUNQSSBfUFNTIG9iamVjdHNcbiIpOwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC05MTIsNyArOTE2LDcgQEAKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KHBvbC0+Y3B1KSk7CiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IHBvbC0+Y3B1KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgcG9sLT5jcHUpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJsaW1pdGluZyB0byBjcHUgJXUgZmFpbGVkXG4iLCBwb2wtPmNwdSk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTk4Miw2ICs5ODYsOSBAQAogCWNwdW1hc2tfdCBvbGRtYXNrID0gQ1BVX01BU0tfQUxMOwogCWludCByYywgaTsKIAorCWlmICghY3B1X29ubGluZShwb2wtPmNwdSkpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKCFjaGVja19zdXBwb3J0ZWRfY3B1KHBvbC0+Y3B1KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEwMjEsNyArMTAyOCw3IEBACiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShwb2wtPmNwdSkpOwogCiAJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBwb2wtPmNwdSkgewotCQlwcmludGsoS0VSTl9FUlIgImxpbWl0aW5nIHRvIGNwdSAldSBmYWlsZWRcbiIsIHBvbC0+Y3B1KTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgcG9sLT5jcHUpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC0xMTYyLDEwICsxMTY5LDkgQEAKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZjcHVmcmVxX2FtZDY0X2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlBhdWwgRGV2cmllbmR0IDxwYXVsLmRldnJpZW5kdEBhbWQuY29tPiBhbmQgTWFyayBMYW5nc2RvcmYgPG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20uIik7CitNT0RVTEVfQVVUSE9SKCJQYXVsIERldnJpZW5kdCA8cGF1bC5kZXZyaWVuZHRAYW1kLmNvbT4gYW5kIE1hcmsgTGFuZ3Nkb3JmIDxtYXJrLmxhbmdzZG9yZkBhbWQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQgQXRobG9uIDY0IGFuZCBPcHRlcm9uIHByb2Nlc3NvciBmcmVxdWVuY3kgZHJpdmVyLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKHBvd2Vybm93azhfaW5pdCk7CiBtb2R1bGVfZXhpdChwb3dlcm5vd2s4X2V4aXQpOwotCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmggYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKaW5kZXggYjFlODViYi4uZDBkZTM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaApAQCAtNDIsNyArNDIsNyBAQAogI2RlZmluZSBDUFVJRF9YRkFNCQkJMHgwZmYwMDAwMAkvKiBleHRlbmRlZCBmYW1pbHkgKi8KICNkZWZpbmUgQ1BVSURfWEZBTV9LOAkJCTAKICNkZWZpbmUgQ1BVSURfWE1PRAkJCTB4MDAwZjAwMDAJLyogZXh0ZW5kZWQgbW9kZWwgKi8KLSNkZWZpbmUgQ1BVSURfWE1PRF9SRVZfRgkJMHgwMDA0MDAwMAorI2RlZmluZSBDUFVJRF9YTU9EX1JFVl9HCQkweDAwMDYwMDAwCiAjZGVmaW5lIENQVUlEX1VTRV9YRkFNX1hNT0QJCTB4MDAwMDBmMDAKICNkZWZpbmUgQ1BVSURfR0VUX01BWF9DQVBBQklMSVRJRVMJMHg4MDAwMDAwMAogI2RlZmluZSBDUFVJRF9GUkVRX1ZPTFRfQ0FQQUJJTElUSUVTCTB4ODAwMDAwMDcKQEAgLTg2LDEzICs4NiwxNCBAQAogICogICBsb3cgZmlkIHRhYmxlCiAgKiAtIGxvd2VzdCBlbnRyeSBpbiB0aGUgaGlnaCBmaWQgdGFibGUgbXVzdCBiZSBhIDw9IDIwME1IeiArIDIgKiB0aGUgZW50cnkKICAqICAgaW4gdGhlIGxvdyBmaWQgdGFibGUKLSAqIC0gdGhlIHBhcnRzIGNhbiBvbmx5IHN0ZXAgYXQgMjAwIE1IeiBpbnRlcnZhbHMsIHNvIDEuOSBHSHogaXMgbmV2ZXIgdmFsaWQKKyAqIC0gdGhlIHBhcnRzIGNhbiBvbmx5IHN0ZXAgYXQgPD0gMjAwIE1IeiBpbnRlcnZhbHMsIG9kZCBmaWQgdmFsdWVzIGFyZQorICogICBzdXBwb3J0ZWQgaW4gcmV2aXNpb24gRyBhbmQgbGF0ZXIgcmV2aXNpb25zLgogICogLSBsb3dlc3QgZnJlcXVlbmN5IG11c3QgYmUgPj0gaW50ZXJwcm9jZXNzb3IgaHlwZXJ0cmFuc3BvcnQgbGluayBzcGVlZAogICogICAob25seSBhcHBsaWVzIHRvIE1QIHN5c3RlbXMgb2J2aW91c2x5KQogICovCiAKIC8qIGZpZHMgKGZyZXF1ZW5jeSBpZGVudGlmaWVycykgYXJlIGFycmFuZ2VkIGluIDIgdGFibGVzIC0gbG8gYW5kIGhpICovCi0jZGVmaW5lIExPX0ZJRF9UQUJMRV9UT1AgICAgIDYJLyogZmlkIHZhbHVlcyBtYXJraW5nIHRoZSBib3VuZGFyeSAgICAqLworI2RlZmluZSBMT19GSURfVEFCTEVfVE9QICAgICA3CS8qIGZpZCB2YWx1ZXMgbWFya2luZyB0aGUgYm91bmRhcnkgICAgKi8KICNkZWZpbmUgSElfRklEX1RBQkxFX0JPVFRPTSAgOAkvKiBiZXR3ZWVuIHRoZSBsb3cgYW5kIGhpZ2ggdGFibGVzICAgICovCiAKICNkZWZpbmUgTE9fVkNPRlJFUV9UQUJMRV9UT1AgICAgMTQwMAkvKiBjb3JyZXNwb25kaW5nIHZjbyBmcmVxdWVuY3kgdmFsdWVzICovCkBAIC0xMDYsNyArMTA3LDcgQEAKICNkZWZpbmUgTUlOX0ZSRVEgODAwCS8qIE1pbiBhbmQgbWF4IGZyZXFzLCBwZXIgc3BlYyAqLwogI2RlZmluZSBNQVhfRlJFUSA1MDAwCiAKLSNkZWZpbmUgSU5WQUxJRF9GSURfTUFTSyAweGZmZmZmZmMxICAvKiBub3QgYSB2YWxpZCBmaWQgaWYgdGhlc2UgYml0cyBhcmUgc2V0ICovCisjZGVmaW5lIElOVkFMSURfRklEX01BU0sgMHhmZmZmZmZjMCAgLyogbm90IGEgdmFsaWQgZmlkIGlmIHRoZXNlIGJpdHMgYXJlIHNldCAqLwogI2RlZmluZSBJTlZBTElEX1ZJRF9NQVNLIDB4ZmZmZmZmYzAgIC8qIG5vdCBhIHZhbGlkIHZpZCBpZiB0aGVzZSBiaXRzIGFyZSBzZXQgKi8KIAogI2RlZmluZSBWSURfT0ZGIDB4M2YKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggNWI3ZDE4YS4uYjQyNWNkMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTQwLDYgKzQwLDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yID0gMDsKIAorc3RhdGljIHUzMiBwbWJhc2U7CiAKIC8qCiAgKiAgIFRoZXJlIGFyZSBvbmx5IHR3byBmcmVxdWVuY3kgc3RhdGVzIGZvciBlYWNoIHByb2Nlc3Nvci4gVmFsdWVzCkBAIC01Niw2ICs1NywzMyBAQAogCiAKIC8qKgorICogc3BlZWRzdGVwX2ZpbmRfcmVnaXN0ZXIgLSByZWFkIHRoZSBQTUJBU0UgYWRkcmVzcworICoKKyAqIFJldHVybnM6IC1FTk9ERVYgaWYgbm8gcmVnaXN0ZXIgY291bGQgYmUgZm91bmQKKyAqLworc3RhdGljIGludCBzcGVlZHN0ZXBfZmluZF9yZWdpc3RlciAodm9pZCkKK3sKKwlpZiAoIXNwZWVkc3RlcF9jaGlwc2V0X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBnZXQgUE1CQVNFICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNwZWVkc3RlcF9jaGlwc2V0X2RldiwgMHg0MCwgJnBtYmFzZSk7CisJaWYgKCEocG1iYXNlICYgMHgwMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzcGVlZHN0ZXAtaWNoOiBjb3VsZCBub3QgZmluZCBzcGVlZHN0ZXAgcmVnaXN0ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwbWJhc2UgJj0gMHhGRkZGRkZGRTsKKwlpZiAoIXBtYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgInNwZWVkc3RlcC1pY2g6IGNvdWxkIG5vdCBmaW5kIHNwZWVkc3RlcCByZWdpc3RlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRwcmludGsoInBtYmFzZSBpcyAweCV4XG4iLCBwbWJhc2UpOworCXJldHVybiAwOworfQorCisvKioKICAqIHNwZWVkc3RlcF9zZXRfc3RhdGUgLSBzZXQgdGhlIFNwZWVkU3RlcCBzdGF0ZQogICogQHN0YXRlOiBuZXcgcHJvY2Vzc29yIGZyZXF1ZW5jeSBzdGF0ZSAoU1BFRURTVEVQX0xPVyBvciBTUEVFRFNURVBfSElHSCkKICAqCkBAIC02MywyNyArOTEsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSAodW5zaWduZWQgaW50IHN0YXRlKQogewotCXUzMiBwbWJhc2U7CiAJdTggcG0yX2JsazsKIAl1OCB2YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFzcGVlZHN0ZXBfY2hpcHNldF9kZXYgfHwgKHN0YXRlID4gMHgxKSkKKwlpZiAoc3RhdGUgPiAweDEpCiAJCXJldHVybjsKIAotCS8qIGdldCBQTUJBU0UgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc3BlZWRzdGVwX2NoaXBzZXRfZGV2LCAweDQwLCAmcG1iYXNlKTsKLQlpZiAoIShwbWJhc2UgJiAweDAxKSkgewotCQlwcmludGsoS0VSTl9FUlIgInNwZWVkc3RlcC1pY2g6IGNvdWxkIG5vdCBmaW5kIHNwZWVkc3RlcCByZWdpc3RlclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwbWJhc2UgJj0gMHhGRkZGRkZGRTsKLQlpZiAoIXBtYmFzZSkgewotCQlwcmludGsoS0VSTl9FUlIgInNwZWVkc3RlcC1pY2g6IGNvdWxkIG5vdCBmaW5kIHNwZWVkc3RlcCByZWdpc3RlclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKiBEaXNhYmxlIElSUXMgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTMxNSwxMCArMzI5LDExIEBACiAJY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgcG9saWN5LT5jcHVzKTsKIAotCS8qIGRldGVjdCBsb3cgYW5kIGhpZ2ggZnJlcXVlbmN5ICovCisJLyogZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY3kgYW5kIHRyYW5zaXRpb24gbGF0ZW5jeSAqLwogCXJlc3VsdCA9IHNwZWVkc3RlcF9nZXRfZnJlcXMoc3BlZWRzdGVwX3Byb2Nlc3NvciwKIAkJCQkgICAgICZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5LAogCQkJCSAgICAgJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfSElHSF0uZnJlcXVlbmN5LAorCQkJCSAgICAgJnBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3ksCiAJCQkJICAgICAmc3BlZWRzdGVwX3NldF9zdGF0ZSk7CiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVzX2FsbG93ZWQpOwogCWlmIChyZXN1bHQpCkBAIC0zMzUsNyArMzUwLDYgQEAKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwogCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7Ci0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IENQVUZSRVFfRVRFUk5BTDsKIAlwb2xpY3ktPmN1ciA9IHNwZWVkOwogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNwZWVkc3RlcF9mcmVxcyk7CkBAIC00MDAsNiArNDE0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHNwZWVkc3RlcF9maW5kX3JlZ2lzdGVyKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZzcGVlZHN0ZXBfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwppbmRleCBkMzY4YjNmLi43YzQ3MDA1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwpAQCAtMzIwLDExICszMjAsMTMgQEAKIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X2ZyZXFzKHVuc2lnbmVkIGludCBwcm9jZXNzb3IsCiAJCQkJICB1bnNpZ25lZCBpbnQgKmxvd19zcGVlZCwKIAkJCQkgIHVuc2lnbmVkIGludCAqaGlnaF9zcGVlZCwKKwkJCQkgIHVuc2lnbmVkIGludCAqdHJhbnNpdGlvbl9sYXRlbmN5LAogCQkJCSAgdm9pZCAoKnNldF9zdGF0ZSkgKHVuc2lnbmVkIGludCBzdGF0ZSkpCiB7CiAJdW5zaWduZWQgaW50IHByZXZfc3BlZWQ7CiAJdW5zaWduZWQgaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdGltZXZhbCB0djEsIHR2MjsKIAogCWlmICgoIXByb2Nlc3NvcikgfHwgKCFsb3dfc3BlZWQpIHx8ICghaGlnaF9zcGVlZCkgfHwgKCFzZXRfc3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMzNyw3ICszMzksNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWRwcmludGsoInByZXZpb3VzIHNwZWVkIGlzICV1XG4iLCBwcmV2X3NwZWVkKTsKLQkKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCS8qIHN3aXRjaCB0byBsb3cgc3RhdGUgKi8KQEAgLTM1MCw4ICszNTIsMTcgQEAKIAogCWRwcmludGsoImxvdyBzcGVlZCBpcyAldVxuIiwgKmxvd19zcGVlZCk7CiAKKwkvKiBzdGFydCBsYXRlbmN5IG1lYXN1cmVtZW50ICovCisJaWYgKHRyYW5zaXRpb25fbGF0ZW5jeSkKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0djEpOworCiAJLyogc3dpdGNoIHRvIGhpZ2ggc3RhdGUgKi8KIAlzZXRfc3RhdGUoU1BFRURTVEVQX0hJR0gpOworCisJLyogZW5kIGxhdGVuY3kgbWVhc3VyZW1lbnQgKi8KKwlpZiAodHJhbnNpdGlvbl9sYXRlbmN5KQorCQlkb19nZXR0aW1lb2ZkYXkoJnR2Mik7CisKIAkqaGlnaF9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWlmICghKmhpZ2hfc3BlZWQpIHsKIAkJcmV0ID0gLUVJTzsKQEAgLTM2OSw2ICszODAsMjUgQEAKIAlpZiAoKmhpZ2hfc3BlZWQgIT0gcHJldl9zcGVlZCkKIAkJc2V0X3N0YXRlKFNQRUVEU1RFUF9MT1cpOwogCisJaWYgKHRyYW5zaXRpb25fbGF0ZW5jeSkgeworCQkqdHJhbnNpdGlvbl9sYXRlbmN5ID0gKHR2Mi50dl9zZWMgLSB0djEudHZfc2VjKSAqIFVTRUNfUEVSX1NFQyArCisJCQl0djIudHZfdXNlYyAtIHR2MS50dl91c2VjOworCQlkcHJpbnRrKCJ0cmFuc2l0aW9uIGxhdGVuY3kgaXMgJXUgdVNlY1xuIiwgKnRyYW5zaXRpb25fbGF0ZW5jeSk7CisKKwkJLyogY29udmVydCB1U2VjIHRvIG5TZWMgYW5kIGFkZCAyMCUgZm9yIHNhZmV0eSByZWFzb25zICovCisJCSp0cmFuc2l0aW9uX2xhdGVuY3kgKj0gMTIwMDsKKworCQkvKiBjaGVjayBpZiB0aGUgbGF0ZW5jeSBtZWFzdXJlbWVudCBpcyB0b28gaGlnaCBvciB0b28gbG93CisJCSAqIGFuZCBzZXQgaXQgdG8gYSBzYWZlIHZhbHVlICg1MDB1U2VjKSBpbiB0aGF0IGNhc2UKKwkJICovCisJCWlmICgqdHJhbnNpdGlvbl9sYXRlbmN5ID4gMTAwMDAwMDAgfHwgKnRyYW5zaXRpb25fbGF0ZW5jeSA8IDUwMDAwKSB7CisJCQlwcmludGsgKEtFUk5fV0FSTklORyAic3BlZWRzdGVwOiBmcmVxdWVuY3kgdHJhbnNpdGlvbiBtZWFzdXJlZCBzZWVtcyBvdXQgb2YgIgorCQkJCQkicmFuZ2UgKCV1IG5TZWMpLCBmYWxsaW5nIGJhY2sgdG8gYSBzYWZlIG9uZSBvZiAldSBuU2VjLlxuIiwKKwkJCQkJKnRyYW5zaXRpb25fbGF0ZW5jeSwgNTAwMDAwKTsKKwkJCSp0cmFuc2l0aW9uX2xhdGVuY3kgPSA1MDAwMDA7CisJCX0KKwl9CisKICBvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAocmV0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKaW5kZXggMjYxYTJjOS4uNmE3MjdmZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKQEAgLTQ0LDQgKzQ0LDUgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9mcmVxcyh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yLAogCSAgdW5zaWduZWQgaW50ICpsb3dfc3BlZWQsCiAJICB1bnNpZ25lZCBpbnQgKmhpZ2hfc3BlZWQsCisJICB1bnNpZ25lZCBpbnQgKnRyYW5zaXRpb25fbGF0ZW5jeSwKIAkgIHZvaWQgKCpzZXRfc3RhdGUpICh1bnNpZ25lZCBpbnQgc3RhdGUpKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKaW5kZXggMjcxOGZiNi4uMjhjYzVkNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKQEAgLTI2OSw2ICsyNjksNyBAQAogCQlyZXN1bHQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXFzKHNwZWVkc3RlcF9wcm9jZXNzb3IsCiAJCQkJJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3ksCiAJCQkJJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfSElHSF0uZnJlcXVlbmN5LAorCQkJCU5VTEwsCiAJCQkJJnNwZWVkc3RlcF9zZXRfc3RhdGUpOwogCiAJCWlmIChyZXN1bHQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3Byb2MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3Byb2MuYwppbmRleCBlNzkyMTMxLi42ZDkxYjI3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9wcm9jLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jCkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAogLyoKICAqCUdldCBDUFUgaW5mb3JtYXRpb24gZm9yIHVzZSBieSB0aGUgcHJvY2ZzLgpAQCAtODYsOCArODcsMTEgQEAKIAkJc2VxX3ByaW50ZihtLCAic3RlcHBpbmdcdDogdW5rbm93blxuIik7CiAKIAlpZiAoIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfVFNDKSApIHsKKwkJdW5zaWduZWQgaW50IGZyZXEgPSBjcHVmcmVxX3F1aWNrX2dldChuKTsKKwkJaWYgKCFmcmVxKQorCQkJZnJlcSA9IGNwdV9raHo7CiAJCXNlcV9wcmludGYobSwgImNwdSBNSHpcdFx0OiAldS4lMDN1XG4iLAotCQkJY3B1X2toeiAvIDEwMDAsIChjcHVfa2h6ICUgMTAwMCkpOworCQkJZnJlcSAvIDEwMDAsIChmcmVxICUgMTAwMCkpOwogCX0KIAogCS8qIENhY2hlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA1YWRkMGJjLi4wODhlNWRkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAogI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KQEAgLTUxNyw2ICs1MTgsNyBAQAogCWNoYXIgZmFtaWx5WzMyXSwgZmVhdHVyZXNbMTI4XSwgKmNwLCBzZXA7CiAJc3RydWN0IGNwdWluZm9faWE2NCAqYyA9IHY7CiAJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGludCBwcm9jX2ZyZXE7CiAJaW50IGk7CiAKIAltYXNrID0gYy0+ZmVhdHVyZXM7CkBAIC01NDksNiArNTUxLDEwIEBACiAJCXNwcmludGYoY3AsICIgMHglbHgiLCBtYXNrKTsKIAl9CiAKKwlwcm9jX2ZyZXEgPSBjcHVmcmVxX3F1aWNrX2dldChjcHVudW0pOworCWlmICghcHJvY19mcmVxKQorCQlwcm9jX2ZyZXEgPSBjLT5wcm9jX2ZyZXEgLyAxMDAwOworCiAJc2VxX3ByaW50ZihtLAogCQkgICAicHJvY2Vzc29yICA6ICVkXG4iCiAJCSAgICJ2ZW5kb3IgICAgIDogJXNcbiIKQEAgLTU2NSw3ICs1NzEsNyBAQAogCQkgICAiQm9nb01JUFMgICA6ICVsdS4lMDJsdVxuIiwKIAkJICAgY3B1bnVtLCBjLT52ZW5kb3IsIGZhbWlseSwgYy0+bW9kZWwsIGMtPnJldmlzaW9uLCBjLT5hcmNocmV2LAogCQkgICBmZWF0dXJlcywgYy0+cHBuLCBjLT5udW1iZXIsCi0JCSAgIGMtPnByb2NfZnJlcSAvIDEwMDAwMDAsIGMtPnByb2NfZnJlcSAlIDEwMDAwMDAsCisJCSAgIHByb2NfZnJlcSAvIDEwMDAsIHByb2NfZnJlcSAlIDEwMDAsCiAJCSAgIGMtPml0Y19mcmVxIC8gMTAwMDAwMCwgYy0+aXRjX2ZyZXEgJSAxMDAwMDAwLAogCQkgICBscGoqSFovNTAwMDAwLCAobHBqKkhaLzUwMDApICUgMTAwKTsKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDMzMGNmODQuLjYwMzUzZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC00MjAsNyArNDIwLDcgQEAKIAkJZ290byBvdXQ7CiAJcG9zID0gbWVyZ2VfNjQoYTQsIGE1KTsKIAlyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBmaWxlLCAmcG9zLCBjb3VudCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoIWZpbGUtPmZfb3AgfHwgIShyZWFkID0gZmlsZS0+Zl9vcC0+cmVhZCkpCkBAIC00NTUsNyArNDU1LDcgQEAKIAkJZ290byBvdXQ7CiAJcG9zID0gbWVyZ2VfNjQoYTQsIGE1KTsKIAlyZXQgPSByd192ZXJpZnlfYXJlYShXUklURSwgZmlsZSwgJnBvcywgY291bnQpOwotCWlmIChyZXQpCisJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCXJldCA9IC1FSU5WQUw7CiAJaWYgKCFmaWxlLT5mX29wIHx8ICEod3JpdGUgPSBmaWxlLT5mX29wLT53cml0ZSkpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9ib290Ly5naXRpZ25vcmUgYi9hcmNoL3g4Nl82NC9ib290Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1ZjIwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2XzY0L2Jvb3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKK2Jvb3RzZWN0CitiekltYWdlCitzZXR1cApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvYm9vdC90b29scy8uZ2l0aWdub3JlIGIvYXJjaC94ODZfNjQvYm9vdC90b29scy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OGVhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Nl82NC9ib290L3Rvb2xzLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorYnVpbGQKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvLmdpdGlnbm9yZSBiL2FyY2gveDg2XzY0L2lhMzIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGFiMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQvaWEzMi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3ZzeXNjYWxsKi5zbwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCA3NTBlMDFkLi42NGM0NTM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2VkZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTI1Niw4ICsxMjU3LDExIEBACiAJCXNlcV9wcmludGYobSwgInN0ZXBwaW5nXHQ6IHVua25vd25cbiIpOwogCQogCWlmIChjcHVfaGFzKGMsWDg2X0ZFQVRVUkVfVFNDKSkgeworCQl1bnNpZ25lZCBpbnQgZnJlcSA9IGNwdWZyZXFfcXVpY2tfZ2V0KCh1bnNpZ25lZCkoYy1jcHVfZGF0YSkpOworCQlpZiAoIWZyZXEpCisJCQlmcmVxID0gY3B1X2toejsKIAkJc2VxX3ByaW50ZihtLCAiY3B1IE1Ielx0XHQ6ICV1LiUwM3VcbiIsCi0JCQkgICAgIGNwdV9raHogLyAxMDAwLCAoY3B1X2toeiAlIDEwMDApKTsKKwkJCSAgICAgZnJlcSAvIDEwMDAsIChmcmVxICUgMTAwMCkpOwogCX0KIAogCS8qIENhY2hlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2Jsb2NrL2xsX3J3X2Jsay5jIGIvYmxvY2svbGxfcndfYmxrLmMKaW5kZXggOTljOWNhNi4uZDRiZWI5YSAxMDA2NDQKLS0tIGEvYmxvY2svbGxfcndfYmxrLmMKKysrIGIvYmxvY2svbGxfcndfYmxrLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCXEtPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSAoVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQpIC8gUEFHRV9DQUNIRV9TSVpFOwogCXEtPmJhY2tpbmdfZGV2X2luZm8uc3RhdGUgPSAwOwogCXEtPmJhY2tpbmdfZGV2X2luZm8uY2FwYWJpbGl0aWVzID0gQkRJX0NBUF9NQVBfQ09QWTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgTUFYX1NFQ1RPUlMpOworCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBTQUZFX01BWF9TRUNUT1JTKTsKIAlibGtfcXVldWVfaGFyZHNlY3Rfc2l6ZShxLCA1MTIpOwogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHEsIDUxMSk7CiAJYmxrX3F1ZXVlX2Nvbmdlc3Rpb25fdGhyZXNob2xkKHEpOwpAQCAtNTU1LDcgKzU1NSwxMiBAQAogCQlwcmludGsoIiVzOiBzZXQgdG8gbWluaW11bSAlZFxuIiwgX19GVU5DVElPTl9fLCBtYXhfc2VjdG9ycyk7CiAJfQogCi0JcS0+bWF4X3NlY3RvcnMgPSBxLT5tYXhfaHdfc2VjdG9ycyA9IG1heF9zZWN0b3JzOworCWlmIChCTEtfREVGX01BWF9TRUNUT1JTID4gbWF4X3NlY3RvcnMpCisJCXEtPm1heF9od19zZWN0b3JzID0gcS0+bWF4X3NlY3RvcnMgPSBtYXhfc2VjdG9yczsKKyAJZWxzZSB7CisJCXEtPm1heF9zZWN0b3JzID0gQkxLX0RFRl9NQVhfU0VDVE9SUzsKKwkJcS0+bWF4X2h3X3NlY3RvcnMgPSBtYXhfc2VjdG9yczsKKwl9CiB9CiAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9zZWN0b3JzKTsKQEAgLTY1Nyw4ICs2NjIsOCBAQAogdm9pZCBibGtfcXVldWVfc3RhY2tfbGltaXRzKHJlcXVlc3RfcXVldWVfdCAqdCwgcmVxdWVzdF9xdWV1ZV90ICpiKQogewogCS8qIHplcm8gaXMgImluZmluaXR5IiAqLwotCXQtPm1heF9zZWN0b3JzID0gdC0+bWF4X2h3X3NlY3RvcnMgPQotCQltaW5fbm90X3plcm8odC0+bWF4X3NlY3RvcnMsYi0+bWF4X3NlY3RvcnMpOworCXQtPm1heF9zZWN0b3JzID0gbWluX25vdF96ZXJvKHQtPm1heF9zZWN0b3JzLGItPm1heF9zZWN0b3JzKTsKKwl0LT5tYXhfaHdfc2VjdG9ycyA9IG1pbl9ub3RfemVybyh0LT5tYXhfaHdfc2VjdG9ycyxiLT5tYXhfaHdfc2VjdG9ycyk7CiAKIAl0LT5tYXhfcGh5c19zZWdtZW50cyA9IG1pbih0LT5tYXhfcGh5c19zZWdtZW50cyxiLT5tYXhfcGh5c19zZWdtZW50cyk7CiAJdC0+bWF4X2h3X3NlZ21lbnRzID0gbWluKHQtPm1heF9od19zZWdtZW50cyxiLT5tYXhfaHdfc2VnbWVudHMpOwpAQCAtMTI5Myw5ICsxMjk4LDE1IEBACiBzdGF0aWMgaW50IGxsX2JhY2tfbWVyZ2VfZm4ocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLCAKIAkJCSAgICBzdHJ1Y3QgYmlvICpiaW8pCiB7CisJdW5zaWduZWQgc2hvcnQgbWF4X3NlY3RvcnM7CiAJaW50IGxlbjsKIAotCWlmIChyZXEtPm5yX3NlY3RvcnMgKyBiaW9fc2VjdG9ycyhiaW8pID4gcS0+bWF4X3NlY3RvcnMpIHsKKwlpZiAodW5saWtlbHkoYmxrX3BjX3JlcXVlc3QocmVxKSkpCisJCW1heF9zZWN0b3JzID0gcS0+bWF4X2h3X3NlY3RvcnM7CisJZWxzZQorCQltYXhfc2VjdG9ycyA9IHEtPm1heF9zZWN0b3JzOworCisJaWYgKHJlcS0+bnJfc2VjdG9ycyArIGJpb19zZWN0b3JzKGJpbykgPiBtYXhfc2VjdG9ycykgewogCQlyZXEtPmZsYWdzIHw9IFJFUV9OT01FUkdFOwogCQlpZiAocmVxID09IHEtPmxhc3RfbWVyZ2UpCiAJCQlxLT5sYXN0X21lcmdlID0gTlVMTDsKQEAgLTEzMjUsOSArMTMzNiwxNiBAQAogc3RhdGljIGludCBsbF9mcm9udF9tZXJnZV9mbihyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsIAogCQkJICAgICBzdHJ1Y3QgYmlvICpiaW8pCiB7CisJdW5zaWduZWQgc2hvcnQgbWF4X3NlY3RvcnM7CiAJaW50IGxlbjsKIAotCWlmIChyZXEtPm5yX3NlY3RvcnMgKyBiaW9fc2VjdG9ycyhiaW8pID4gcS0+bWF4X3NlY3RvcnMpIHsKKwlpZiAodW5saWtlbHkoYmxrX3BjX3JlcXVlc3QocmVxKSkpCisJCW1heF9zZWN0b3JzID0gcS0+bWF4X2h3X3NlY3RvcnM7CisJZWxzZQorCQltYXhfc2VjdG9ycyA9IHEtPm1heF9zZWN0b3JzOworCisKKwlpZiAocmVxLT5ucl9zZWN0b3JzICsgYmlvX3NlY3RvcnMoYmlvKSA+IG1heF9zZWN0b3JzKSB7CiAJCXJlcS0+ZmxhZ3MgfD0gUkVRX05PTUVSR0U7CiAJCWlmIChyZXEgPT0gcS0+bGFzdF9tZXJnZSkKIAkJCXEtPmxhc3RfbWVyZ2UgPSBOVUxMOwpAQCAtMjE0NCw3ICsyMTYyLDcgQEAKIAlzdHJ1Y3QgYmlvICpiaW87CiAJaW50IHJlYWRpbmc7CiAKLQlpZiAobGVuID4gKHEtPm1heF9zZWN0b3JzIDw8IDkpKQorCWlmIChsZW4gPiAocS0+bWF4X2h3X3NlY3RvcnMgPDwgOSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghbGVuIHx8ICF1YnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyNTksNyArMjI3Nyw3IEBACiB7CiAJc3RydWN0IGJpbyAqYmlvOwogCi0JaWYgKGxlbiA+IChxLT5tYXhfc2VjdG9ycyA8PCA5KSkKKwlpZiAobGVuID4gKHEtPm1heF9od19zZWN0b3JzIDw8IDkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWxlbiB8fCAha2J1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzA2LDYgKzIzMjQsOCBAQAogCWdlbmVyaWNfdW5wbHVnX2RldmljZShxKTsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2V4ZWN1dGVfcnFfbm93YWl0KTsKKwogLyoqCiAgKiBibGtfZXhlY3V0ZV9ycSAtIGluc2VydCBhIHJlcXVlc3QgaW50byBxdWV1ZSBmb3IgZXhlY3V0aW9uCiAgKiBAcToJCXF1ZXVlIHRvIGluc2VydCB0aGUgcmVxdWVzdCBpbgpAQCAtMjQ0NCw3ICsyNDY0LDcgQEAKIC8qCiAgKiBxdWV1ZSBsb2NrIG11c3QgYmUgaGVsZAogICovCi1zdGF0aWMgdm9pZCBfX2Jsa19wdXRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCit2b2lkIF9fYmxrX3B1dF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybCA9IHJlcS0+cmw7CiAKQEAgLTI0NzMsNiArMjQ5Myw4IEBACiAJfQogfQogCitFWFBPUlRfU1lNQk9MX0dQTChfX2Jsa19wdXRfcmVxdWVzdCk7CisKIHZvaWQgYmxrX3B1dF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwppbmRleCA2ZTdkYjJlLi4xZDg4NTJmIDEwMDY0NAotLS0gYS9ibG9jay9zY3NpX2lvY3RsLmMKKysrIGIvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAlpZiAodmVyaWZ5X2NvbW1hbmQoZmlsZSwgY21kKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChoZHItPmR4ZmVyX2xlbiA+IChxLT5tYXhfc2VjdG9ycyA8PCA5KSkKKwlpZiAoaGRyLT5keGZlcl9sZW4gPiAocS0+bWF4X2h3X3NlY3RvcnMgPDwgOSkpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKGhkci0+ZHhmZXJfbGVuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IDdiMWNkOTMuLmM0YjlkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTM1OCw3ICszNTgsOCBAQAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgY2VydGFpbiBVU0IgYXR0YWNoZWQgc3RvcmFnZSBkZXZpY2VzCiAJICBzdWNoIGFzIGZsYXNoIGtleXMuCiAKLQkgIFdhcm5pbmc6IEVuYWJsaW5nIHRoaXMgY3JpcHBsZXMgdGhlIHVzYi1zdG9yYWdlIGRyaXZlci4KKwkgIElmIHlvdSBlbmFibGUgdGhpcyBkcml2ZXIsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGF2b2lkIGNvbmZsaWN0cworCSAgd2l0aCB1c2Itc3RvcmFnZSBieSBlbmFibGluZyBVU0JfTElCVVNVQUwuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCBiZmIyM2Q1Li4xMDc0MGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC05LDcgKzksNiBAQAogICoKICAqIFRPRE8gKHNvcnRlZCBieSBkZWNyZWFzaW5nIHByaW9yaXR5KQogICogIC0tIEtpbGwgZmlyc3Rfb3BlbiAoQWwgVmlybyBmaXhlZCB0aGUgYmxvY2sgbGF5ZXIgbm93KQotICogIC0tIERvIHJlc2V0cyB3aXRoIHVzYl9kZXZpY2VfcmVzZXQgKG5lZWRzIGEgdGhyZWFkIGNvbnRleHQsIHVzZSBraHViZCkKICAqICAtLSBzZXQgcmVhZG9ubHkgZmxhZyBmb3IgQ0RzLCBzZXQgcmVtb3ZhYmxlIGZsYWcgZm9yIENGIHJlYWRlcnMKICAqICAtLSBkbyBpbnF1aXJ5IGFuZCB2ZXJpZnkgd2UgZ290IGEgZGlzayBhbmQgbm90IGEgdGFwZSAoZm9yIExVTiBtaXNtYXRjaCkKICAqICAtLSBzcGVjaWFsIGNhc2Ugc29tZSBzZW5zZXMsIGUuZy4gM2EvMCAtPiBubyBtZWRpYSBwcmVzZW50LCByZWR1Y2UgcmV0cmllcwpAQCAtMjksNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl91c3VhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0xMDcsMTYgKzEwNyw2IEBACiAgKi8KIAogLyoKLSAqIERlZmluaXRpb25zIHdoaWNoIGhhdmUgdG8gYmUgc2NhdHRlcmVkIG9uY2Ugd2UgdW5kZXJzdGFuZCB0aGUgbGF5b3V0IGJldHRlci4KLSAqLwotCi0vKiBUcmFuc3BvcnQgKGRlc3BpdGUgUFIgaW4gdGhlIG5hbWUpICovCi0jZGVmaW5lIFVTX1BSX0JVTEsJMHg1MAkJLyogYnVsayBvbmx5ICovCi0KLS8qIFByb3RvY29sICovCi0jZGVmaW5lIFVTX1NDX1NDU0kJMHgwNgkJLyogVHJhbnNwYXJlbnQgKi8KLQotLyoKICAqIFRoaXMgbWFueSBMVU5zIHBlciBVU0IgZGV2aWNlLgogICogRXZlcnkgb25lIG9mIHRoZW0gdGFrZXMgYSBob3N0LCBzZWUgVUJfTUFYX0hPU1RTLgogICovCkBAIC0xMjUsNyArMTE1LDcgQEAKIC8qCiAgKi8KIAotI2RlZmluZSBVQl9NSU5PUlNfUEVSX01BSk9SCTgKKyNkZWZpbmUgVUJfUEFSVFNfUEVSX0xVTiAgICAgIDgKIAogI2RlZmluZSBVQl9NQVhfQ0RCX1NJWkUgICAgICAxNgkJLyogQ29ycmVzcG9uZHMgdG8gQnVsayAqLwogCkBAIC0yNDUsNiArMjM1LDEzIEBACiAJdm9pZCAqYmFjazsKIH07CiAKK3N0cnVjdCB1Yl9yZXF1ZXN0IHsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJdW5zaWduZWQgaW50IGN1cnJlbnRfdHJ5OworCXVuc2lnbmVkIGludCBuc2c7CQkvKiBzZ3ZbbnNnXSAqLworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ3ZbVUJfTUFYX1JFUV9TR107Cit9OworCiAvKgogICovCiBzdHJ1Y3QgdWJfY2FwYWNpdHkgewpAQCAtMzQwLDYgKzMzNyw4IEBACiAJaW50IHJlYWRvbmx5OwogCWludCBmaXJzdF9vcGVuOwkJCS8qIEtsdWRnZS4gU2VlIHViX2JkX29wZW4uICovCiAKKwlzdHJ1Y3QgdWJfcmVxdWVzdCB1cnE7CisKIAkvKiBVc2UgSW5nbydzIG1lbXBvb2wgaWYgb3Igd2hlbiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgY29tbWFuZC4gKi8KIAkvKgogCSAqIEN1cnJlbnRseSB3ZSBuZXZlciBuZWVkIG1vcmUgdGhhbiBvbmUgY29tbWFuZCBmb3IgdGhlIHdob2xlIGRldmljZS4KQEAgLTM2MCw2ICszNTksNyBAQAogCWF0b21pY190IHBvaXNvbjsJCS8qIFRoZSBVU0IgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZCAqLwogCWludCBvcGVuYzsJCQkvKiBwcm90ZWN0ZWQgYnkgdWJfbG9jayEgKi8KIAkJCQkJLyoga3JlZiBpcyB0b28gaW1wbGljaXQgZm9yIG91ciB0YXN0ZSAqLworCWludCByZXNldDsJCQkvKiBSZXNldCBpcyBydW5uaW5nICovCiAJdW5zaWduZWQgaW50IHRhZ2NudDsKIAljaGFyIG5hbWVbMTJdOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CkBAIC0zODcsNiArMzg3LDkgQEAKIAlzdHJ1Y3QgYnVsa19jc193cmFwIHdvcmtfYmNzOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3Qgd29ya19jcjsKIAorCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF93b3JrOworCXdhaXRfcXVldWVfaGVhZF90IHJlc2V0X3dhaXQ7CisKIAlpbnQgc2dfc3RhdFs2XTsKIAlzdHJ1Y3QgdWJfc2NzaV90cmFjZSB0cjsKIH07CkBAIC0zOTUsMTIgKzM5OCwxNCBAQAogICovCiBzdGF0aWMgdm9pZCB1Yl9jbGVhbnVwKHN0cnVjdCB1Yl9kZXYgKnNjKTsKIHN0YXRpYyBpbnQgdWJfcmVxdWVzdF9mbl8xKHN0cnVjdCB1Yl9sdW4gKmx1biwgc3RydWN0IHJlcXVlc3QgKnJxKTsKLXN0YXRpYyBpbnQgdWJfY21kX2J1aWxkX2Jsb2NrKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfbHVuICpsdW4sCi0gICAgc3RydWN0IHViX3Njc2lfY21kICpjbWQsIHN0cnVjdCByZXF1ZXN0ICpycSk7Ci1zdGF0aWMgaW50IHViX2NtZF9idWlsZF9wYWNrZXQoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9sdW4gKmx1biwKLSAgICBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCwgc3RydWN0IHJlcXVlc3QgKnJxKTsKK3N0YXRpYyB2b2lkIHViX2NtZF9idWlsZF9ibG9jayhzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX2x1biAqbHVuLAorICAgIHN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kLCBzdHJ1Y3QgdWJfcmVxdWVzdCAqdXJxKTsKK3N0YXRpYyB2b2lkIHViX2NtZF9idWlsZF9wYWNrZXQoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9sdW4gKmx1biwKKyAgICBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCwgc3RydWN0IHViX3JlcXVlc3QgKnVycSk7CiBzdGF0aWMgdm9pZCB1Yl9yd19jbWRfZG9uZShzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX3Njc2lfY21kICpjbWQpOwogc3RhdGljIHZvaWQgdWJfZW5kX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IHVwdG9kYXRlKTsKK3N0YXRpYyBpbnQgdWJfcndfY21kX3JldHJ5KHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfbHVuICpsdW4sCisgICAgc3RydWN0IHViX3JlcXVlc3QgKnVycSwgc3RydWN0IHViX3Njc2lfY21kICpjbWQpOwogc3RhdGljIGludCB1Yl9zdWJtaXRfc2NzaShzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX3Njc2lfY21kICpjbWQpOwogc3RhdGljIHZvaWQgdWJfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0KTsKIHN0YXRpYyB2b2lkIHViX3Njc2lfYWN0aW9uKHVuc2lnbmVkIGxvbmcgX2Rldik7CkBAIC00MTUsNiArNDIwLDggQEAKIHN0YXRpYyBpbnQgdWJfc3VibWl0X2NsZWFyX3N0YWxsKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCwKICAgICBpbnQgc3RhbGxlZF9waXBlKTsKIHN0YXRpYyB2b2lkIHViX3RvcF9zZW5zZV9kb25lKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfc2NzaV9jbWQgKnNjbWQpOworc3RhdGljIHZvaWQgdWJfcmVzZXRfZW50ZXIoc3RydWN0IHViX2RldiAqc2MpOworc3RhdGljIHZvaWQgdWJfcmVzZXRfdGFzayh2b2lkICphcmcpOwogc3RhdGljIGludCB1Yl9zeW5jX3R1cihzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX2x1biAqbHVuKTsKIHN0YXRpYyBpbnQgdWJfc3luY19yZWFkX2NhcChzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX2x1biAqbHVuLAogICAgIHN0cnVjdCB1Yl9jYXBhY2l0eSAqcmV0KTsKQEAgLTQyMiwxMyArNDI5LDE4IEBACiAKIC8qCiAgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCisKKyNkZWZpbmUgdWJfdXNiX2lkcyAgc3RvcmFnZV91c2JfaWRzCisjZWxzZQorCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdWJfdXNiX2lkc1tdID0gewotCS8vIHsgVVNCX0RFVklDRV9WRVIoMHgwNzgxLCAweDAwMDIsIDB4MDAwOSwgMHgwMDA5KSB9LAkvKiBTRERSLTMxICovCiAJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfU0NTSSwgVVNfUFJfQlVMSykgfSwKIAl7IH0KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1Yl91c2JfaWRzKTsKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0xJQlVTVUFMICovCiAKIC8qCiAgKiBGaW5kIG1lIGEgd2F5IHRvIGlkZW50aWZ5ICJuZXh0IGZyZWUgbWlub3IiIGZvciBhZGRfZGlzaygpLApAQCAtNTIyLDYgKzUzNCw5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sb2NrLCBmbGFncyk7CiAKIAljbnQgKz0gc3ByaW50ZihwYWdlICsgY250LAorCSAgICAicG9pc29uICVkIHJlc2V0ICVkXG4iLAorCSAgICBhdG9taWNfcmVhZCgmc2MtPnBvaXNvbiksIHNjLT5yZXNldCk7CisJY250ICs9IHNwcmludGYocGFnZSArIGNudCwKIAkgICAgInFsZW4gJWQgcW1heCAlZFxuIiwKIAkgICAgc2MtPmNtZF9xdWV1ZS5xbGVuLCBzYy0+Y21kX3F1ZXVlLnFtYXgpOwogCWNudCArPSBzcHJpbnRmKHBhZ2UgKyBjbnQsCkBAIC03NzAsNyArNzg1LDggQEAKIHsKIAlzdHJ1Y3QgdWJfZGV2ICpzYyA9IGx1bi0+dWRldjsKIAlzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZDsKLQlpbnQgcmM7CisJc3RydWN0IHViX3JlcXVlc3QgKnVycTsKKwlpbnQgbl9lbGVtOwogCiAJaWYgKGF0b21pY19yZWFkKCZzYy0+cG9pc29uKSB8fCBsdW4tPmNoYW5nZWQpIHsKIAkJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChycSk7CkBAIC03NzgsNjYgKzc5NCw3MSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAobHVuLT51cnEucnEgIT0gTlVMTCkKKwkJcmV0dXJuIC0xOwogCWlmICgoY21kID0gdWJfZ2V0X2NtZChsdW4pKSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCB1Yl9zY3NpX2NtZCkpOwogCiAJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChycSk7Ci0JaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewotCQlyYyA9IHViX2NtZF9idWlsZF9wYWNrZXQoc2MsIGx1biwgY21kLCBycSk7Ci0JfSBlbHNlIHsKLQkJcmMgPSB1Yl9jbWRfYnVpbGRfYmxvY2soc2MsIGx1biwgY21kLCBycSk7Ci0JfQotCWlmIChyYyAhPSAwKSB7Ci0JCXViX3B1dF9jbWQobHVuLCBjbWQpOwotCQl1Yl9lbmRfcnEocnEsIDApOwotCQlyZXR1cm4gMDsKLQl9Ci0JY21kLT5zdGF0ZSA9IFVCX0NNRFNUX0lOSVQ7Ci0JY21kLT5sdW4gPSBsdW47Ci0JY21kLT5kb25lID0gdWJfcndfY21kX2RvbmU7Ci0JY21kLT5iYWNrID0gcnE7CiAKLQljbWQtPnRhZyA9IHNjLT50YWdjbnQrKzsKLQlpZiAodWJfc3VibWl0X3Njc2koc2MsIGNtZCkgIT0gMCkgewotCQl1Yl9wdXRfY21kKGx1biwgY21kKTsKLQkJdWJfZW5kX3JxKHJxLCAwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdWJfY21kX2J1aWxkX2Jsb2NrKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfbHVuICpsdW4sCi0gICAgc3RydWN0IHViX3Njc2lfY21kICpjbWQsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlpbnQgdWJfZGlyOwotCWludCBuX2VsZW07Ci0JdW5zaWduZWQgaW50IGJsb2NrLCBuYmxrczsKLQotCWlmIChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCi0JCXViX2RpciA9IFVCX0RJUl9XUklURTsKLQllbHNlCi0JCXViX2RpciA9IFVCX0RJUl9SRUFEOwotCWNtZC0+ZGlyID0gdWJfZGlyOworCXVycSA9ICZsdW4tPnVycTsKKwltZW1zZXQodXJxLCAwLCBzaXplb2Yoc3RydWN0IHViX3JlcXVlc3QpKTsKKwl1cnEtPnJxID0gcnE7CiAKIAkvKgogCSAqIGdldCBzY2F0dGVybGlzdCBmcm9tIGJsb2NrIGxheWVyCiAJICovCi0Jbl9lbGVtID0gYmxrX3JxX21hcF9zZyhsdW4tPmRpc2stPnF1ZXVlLCBycSwgJmNtZC0+c2d2WzBdKTsKLQlpZiAobl9lbGVtIDw9IDApIHsKKwluX2VsZW0gPSBibGtfcnFfbWFwX3NnKGx1bi0+ZGlzay0+cXVldWUsIHJxLCAmdXJxLT5zZ3ZbMF0pOworCWlmIChuX2VsZW0gPCAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgcmVxdWVzdCBtYXAgKCVkKVxuIiwKLQkJICAgIHNjLT5uYW1lLCBuX2VsZW0pOyAvKiBQMyAqLwotCQlyZXR1cm4gLTE7CQkvKiByZXF1ZXN0IHdpdGggbm8gcy9nIGVudHJpZXM/ICovCisJCSAgICBsdW4tPm5hbWUsIG5fZWxlbSk7IC8qIFAzICovCisJCWdvdG8gZHJvcDsKIAl9CiAJaWYgKG5fZWxlbSA+IFVCX01BWF9SRVFfU0cpIHsJLyogUGFyYW5vaWEgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlcXVlc3Qgd2l0aCAlZCBzZWdtZW50c1xuIiwKLQkJICAgIHNjLT5uYW1lLCBuX2VsZW0pOwotCQlyZXR1cm4gLTE7CisJCSAgICBsdW4tPm5hbWUsIG5fZWxlbSk7CisJCWdvdG8gZHJvcDsKIAl9Ci0JY21kLT5uc2cgPSBuX2VsZW07CisJdXJxLT5uc2cgPSBuX2VsZW07CiAJc2MtPnNnX3N0YXRbbl9lbGVtIDwgNSA/IG5fZWxlbSA6IDVdKys7CiAKKwlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CisJCXViX2NtZF9idWlsZF9wYWNrZXQoc2MsIGx1biwgY21kLCB1cnEpOworCX0gZWxzZSB7CisJCXViX2NtZF9idWlsZF9ibG9jayhzYywgbHVuLCBjbWQsIHVycSk7CisJfQorCWNtZC0+c3RhdGUgPSBVQl9DTURTVF9JTklUOworCWNtZC0+bHVuID0gbHVuOworCWNtZC0+ZG9uZSA9IHViX3J3X2NtZF9kb25lOworCWNtZC0+YmFjayA9IHVycTsKKworCWNtZC0+dGFnID0gc2MtPnRhZ2NudCsrOworCWlmICh1Yl9zdWJtaXRfc2NzaShzYywgY21kKSAhPSAwKQorCQlnb3RvIGRyb3A7CisKKwlyZXR1cm4gMDsKKworZHJvcDoKKwl1Yl9wdXRfY21kKGx1biwgY21kKTsKKwl1Yl9lbmRfcnEocnEsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1Yl9jbWRfYnVpbGRfYmxvY2soc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9sdW4gKmx1biwKKyAgICBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCwgc3RydWN0IHViX3JlcXVlc3QgKnVycSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSB1cnEtPnJxOworCXVuc2lnbmVkIGludCBibG9jaywgbmJsa3M7CisKKwlpZiAocnFfZGF0YV9kaXIocnEpID09IFdSSVRFKQorCQljbWQtPmRpciA9IFVCX0RJUl9XUklURTsKKwllbHNlCisJCWNtZC0+ZGlyID0gVUJfRElSX1JFQUQ7CisKKwljbWQtPm5zZyA9IHVycS0+bnNnOworCW1lbWNweShjbWQtPnNndiwgdXJxLT5zZ3YsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpICogY21kLT5uc2cpOworCiAJLyoKIAkgKiBidWlsZCB0aGUgY29tbWFuZAogCSAqCkBAIC04NDcsNyArODY4LDcgQEAKIAlibG9jayA9IHJxLT5zZWN0b3IgPj4gbHVuLT5jYXBhY2l0eS5ic2hpZnQ7CiAJbmJsa3MgPSBycS0+bnJfc2VjdG9ycyA+PiBsdW4tPmNhcGFjaXR5LmJzaGlmdDsKIAotCWNtZC0+Y2RiWzBdID0gKHViX2RpciA9PSBVQl9ESVJfUkVBRCk/IFJFQURfMTA6IFdSSVRFXzEwOworCWNtZC0+Y2RiWzBdID0gKGNtZC0+ZGlyID09IFVCX0RJUl9SRUFEKT8gUkVBRF8xMDogV1JJVEVfMTA7CiAJLyogMTAtYnl0ZSB1c2VzIDQgYnl0ZXMgb2YgTEJBOiAyMTQ3NDgzNjQ4S0IsIDIwOTcxNTJNQiwgMjA0OEdCICovCiAJY21kLT5jZGJbMl0gPSBibG9jayA+PiAyNDsKIAljbWQtPmNkYlszXSA9IGJsb2NrID4+IDE2OwpAQCAtODU4LDE0ICs4NzksMTIgQEAKIAljbWQtPmNkYl9sZW4gPSAxMDsKIAogCWNtZC0+bGVuID0gcnEtPm5yX3NlY3RvcnMgKiA1MTI7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1Yl9jbWRfYnVpbGRfcGFja2V0KHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfbHVuICpsdW4sCi0gICAgc3RydWN0IHViX3Njc2lfY21kICpjbWQsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyB2b2lkIHViX2NtZF9idWlsZF9wYWNrZXQoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9sdW4gKmx1biwKKyAgICBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCwgc3RydWN0IHViX3JlcXVlc3QgKnVycSkKIHsKLQlpbnQgbl9lbGVtOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IHVycS0+cnE7CiAKIAlpZiAocnEtPmRhdGFfbGVuID09IDApIHsKIAkJY21kLT5kaXIgPSBVQl9ESVJfTk9ORTsKQEAgLTg3NCw0MCArODkzLDI2IEBACiAJCQljbWQtPmRpciA9IFVCX0RJUl9XUklURTsKIAkJZWxzZQogCQkJY21kLT5kaXIgPSBVQl9ESVJfUkVBRDsKLQogCX0KIAotCS8qCi0JICogZ2V0IHNjYXR0ZXJsaXN0IGZyb20gYmxvY2sgbGF5ZXIKLQkgKi8KLQluX2VsZW0gPSBibGtfcnFfbWFwX3NnKGx1bi0+ZGlzay0+cXVldWUsIHJxLCAmY21kLT5zZ3ZbMF0pOwotCWlmIChuX2VsZW0gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgcmVxdWVzdCBtYXAgKCVkKVxuIiwKLQkJICAgIHNjLT5uYW1lLCBuX2VsZW0pOyAvKiBQMyAqLwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChuX2VsZW0gPiBVQl9NQVhfUkVRX1NHKSB7CS8qIFBhcmFub2lhICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZXF1ZXN0IHdpdGggJWQgc2VnbWVudHNcbiIsCi0JCSAgICBzYy0+bmFtZSwgbl9lbGVtKTsKLQkJcmV0dXJuIC0xOwotCX0KLQljbWQtPm5zZyA9IG5fZWxlbTsKLQlzYy0+c2dfc3RhdFtuX2VsZW0gPCA1ID8gbl9lbGVtIDogNV0rKzsKKwljbWQtPm5zZyA9IHVycS0+bnNnOworCW1lbWNweShjbWQtPnNndiwgdXJxLT5zZ3YsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpICogY21kLT5uc2cpOwogCiAJbWVtY3B5KCZjbWQtPmNkYiwgcnEtPmNtZCwgcnEtPmNtZF9sZW4pOwogCWNtZC0+Y2RiX2xlbiA9IHJxLT5jbWRfbGVuOwogCiAJY21kLT5sZW4gPSBycS0+ZGF0YV9sZW47Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdWJfcndfY21kX2RvbmUoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kKQogewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGNtZC0+YmFjazsKIAlzdHJ1Y3QgdWJfbHVuICpsdW4gPSBjbWQtPmx1bjsKKwlzdHJ1Y3QgdWJfcmVxdWVzdCAqdXJxID0gY21kLT5iYWNrOworCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlpbnQgdXB0b2RhdGU7CiAKKwlycSA9IHVycS0+cnE7CisKIAlpZiAoY21kLT5lcnJvciA9PSAwKSB7CiAJCXVwdG9kYXRlID0gMTsKIApAQCAtOTI4LDkgKzkzMywxNiBAQAogCQkJCXJxLT5lcnJvcnMgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAJCQllbHNlCiAJCQkJcnEtPmVycm9ycyA9IERJRF9FUlJPUiA8PCAxNjsKKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPmVycm9yID09IC1FSU8pIHsKKwkJCQlpZiAodWJfcndfY21kX3JldHJ5KHNjLCBsdW4sIHVycSwgY21kKSA9PSAwKQorCQkJCQlyZXR1cm47CisJCQl9CiAJCX0KIAl9CiAKKwl1cnEtPnJxID0gTlVMTDsKKwogCXViX3B1dF9jbWQobHVuLCBjbWQpOwogCXViX2VuZF9ycShycSwgdXB0b2RhdGUpOwogCWJsa19zdGFydF9xdWV1ZShsdW4tPmRpc2stPnF1ZXVlKTsKQEAgLTkzOCwxMyArOTUwLDQ1IEBACiAKIHN0YXRpYyB2b2lkIHViX2VuZF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCB1cHRvZGF0ZSkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IGVuZF90aGF0X3JlcXVlc3RfZmlyc3QocnEsIHVwdG9kYXRlLCBycS0+aGFyZF9ucl9zZWN0b3JzKTsKLQkvLyBhc3NlcnQocmMgPT0gMCk7CisJZW5kX3RoYXRfcmVxdWVzdF9maXJzdChycSwgdXB0b2RhdGUsIHJxLT5oYXJkX25yX3NlY3RvcnMpOwogCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSk7CiB9CiAKK3N0YXRpYyBpbnQgdWJfcndfY21kX3JldHJ5KHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfbHVuICpsdW4sCisgICAgc3RydWN0IHViX3JlcXVlc3QgKnVycSwgc3RydWN0IHViX3Njc2lfY21kICpjbWQpCit7CisKKwlpZiAoYXRvbWljX3JlYWQoJnNjLT5wb2lzb24pKQorCQlyZXR1cm4gLUVOWElPOworCisJdWJfcmVzZXRfZW50ZXIoc2MpOworCisJaWYgKHVycS0+Y3VycmVudF90cnkgPj0gMykKKwkJcmV0dXJuIC1FSU87CisJdXJxLT5jdXJyZW50X3RyeSsrOworCS8qIFAzICovIHByaW50aygiJXM6IGRpciAlYyBsZW4vYWN0ICVkLyVkICIKKwkgICAgIltzZW5zZSAleCAlMDJ4ICUwMnhdIHJldHJ5ICVkXG4iLAorCSAgICBzYy0+bmFtZSwgVUJfRElSX0NIQVIoY21kLT5kaXIpLCBjbWQtPmxlbiwgY21kLT5hY3RfbGVuLAorCSAgICBjbWQtPmtleSwgY21kLT5hc2MsIGNtZC0+YXNjcSwgdXJxLT5jdXJyZW50X3RyeSk7CisKKwltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IHViX3Njc2lfY21kKSk7CisJdWJfY21kX2J1aWxkX2Jsb2NrKHNjLCBsdW4sIGNtZCwgdXJxKTsKKworCWNtZC0+c3RhdGUgPSBVQl9DTURTVF9JTklUOworCWNtZC0+bHVuID0gbHVuOworCWNtZC0+ZG9uZSA9IHViX3J3X2NtZF9kb25lOworCWNtZC0+YmFjayA9IHVycTsKKworCWNtZC0+dGFnID0gc2MtPnRhZ2NudCsrOworCisjaWYgMCAvKiBXYXN0ZWZ1bCAqLworCXJldHVybiB1Yl9zdWJtaXRfc2NzaShzYywgY21kKTsKKyNlbHNlCisJdWJfY21kcV9hZGQoc2MsIGNtZCk7CisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogLyoKICAqIFN1Ym1pdCBhIHJlZ3VsYXIgU0NTSSBvcGVyYXRpb24gKG5vdCBhbiBhdXRvLXNlbnNlKS4KICAqCkBAIC0xMDc1LDcgKzExMTksNyBAQAogCXN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kOwogCWludCByYzsKIAotCXdoaWxlICgoY21kID0gdWJfY21kcV9wZWVrKHNjKSkgIT0gTlVMTCkgeworCXdoaWxlICghc2MtPnJlc2V0ICYmIChjbWQgPSB1Yl9jbWRxX3BlZWsoc2MpKSAhPSBOVUxMKSB7CiAJCWlmIChjbWQtPnN0YXRlID09IFVCX0NNRFNUX0RPTkUpIHsKIAkJCXViX2NtZHFfcG9wKHNjKTsKIAkJCSgqY21kLT5kb25lKShzYywgY21kKTsKQEAgLTEwOTgsMTEgKzExNDIsMTIgQEAKIHsKIAlzdHJ1Y3QgdXJiICp1cmIgPSAmc2MtPndvcmtfdXJiOwogCXN0cnVjdCBidWxrX2NzX3dyYXAgKmJjczsKKwlpbnQgbGVuOwogCWludCByYzsKIAogCWlmIChhdG9taWNfcmVhZCgmc2MtPnBvaXNvbikpIHsKLQkJLyogQSBsaXR0bGUgdG9vIHNpbXBsaXN0aWMsIEkgZmVlbC4uLiAqLwotCQlnb3RvIEJhZF9FbmQ7CisJCXViX3N0YXRlX2RvbmUoc2MsIGNtZCwgLUVOT0RFVik7CisJCXJldHVybjsKIAl9CiAKIAlpZiAoY21kLT5zdGF0ZSA9PSBVQl9DTURTVF9DTEVBUikgewpAQCAtMTExMCw3ICsxMTU1LDYgQEAKIAkJCS8qCiAJCQkgKiBTVEFMTCB3aGlsZSBjbGVhcm5pbmcgU1RBTEwuCiAJCQkgKiBUaGUgY29udHJvbCBwaXBlIGNsZWFycyBpdHNlbGYgLSBub3RoaW5nIHRvIGRvLgotCQkJICogWFhYIE1pZ2h0IHRyeSB0byByZXNldCB0aGUgZGV2aWNlIGhlcmUgYW5kIHJldHJ5LgogCQkJICovCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBzdGFsbCBvbiBjb250cm9sIHBpcGVcbiIsCiAJCQkgICAgc2MtPm5hbWUpOwpAQCAtMTEyOSwxMSArMTE3Myw2IEBACiAKIAl9IGVsc2UgaWYgKGNtZC0+c3RhdGUgPT0gVUJfQ01EU1RfQ0xSMlNUUykgewogCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQSVBFKSB7Ci0JCQkvKgotCQkJICogU1RBTEwgd2hpbGUgY2xlYXJuaW5nIFNUQUxMLgotCQkJICogVGhlIGNvbnRyb2wgcGlwZSBjbGVhcnMgaXRzZWxmIC0gbm90aGluZyB0byBkby4KLQkJCSAqIFhYWCBNaWdodCB0cnkgdG8gcmVzZXQgdGhlIGRldmljZSBoZXJlIGFuZCByZXRyeS4KLQkJCSAqLwogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogc3RhbGwgb24gY29udHJvbCBwaXBlXG4iLAogCQkJICAgIHNjLT5uYW1lKTsKIAkJCWdvdG8gQmFkX0VuZDsKQEAgLTExNTEsMTEgKzExOTAsNiBAQAogCiAJfSBlbHNlIGlmIChjbWQtPnN0YXRlID09IFVCX0NNRFNUX0NMUlJTKSB7CiAJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpIHsKLQkJCS8qCi0JCQkgKiBTVEFMTCB3aGlsZSBjbGVhcm5pbmcgU1RBTEwuCi0JCQkgKiBUaGUgY29udHJvbCBwaXBlIGNsZWFycyBpdHNlbGYgLSBub3RoaW5nIHRvIGRvLgotCQkJICogWFhYIE1pZ2h0IHRyeSB0byByZXNldCB0aGUgZGV2aWNlIGhlcmUgYW5kIHJldHJ5LgotCQkJICovCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBzdGFsbCBvbiBjb250cm9sIHBpcGVcbiIsCiAJCQkgICAgc2MtPm5hbWUpOwogCQkJZ290byBCYWRfRW5kOwpAQCAtMTE3Miw3ICsxMjA2LDEyIEBACiAJCXViX3N0YXRlX3N0YXRfY291bnRlZChzYywgY21kKTsKIAogCX0gZWxzZSBpZiAoY21kLT5zdGF0ZSA9PSBVQl9DTURTVF9DTUQpIHsKLQkJaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSkgeworCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIC1FT1ZFUkZMT1c6CisJCQlnb3RvIEJhZF9FbmQ7CisJCWNhc2UgLUVQSVBFOgogCQkJcmMgPSB1Yl9zdWJtaXRfY2xlYXJfc3RhbGwoc2MsIGNtZCwgc2MtPmxhc3RfcGlwZSk7CiAJCQlpZiAocmMgIT0gMCkgewogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6ICIKQEAgLTExODIsMTcgKzEyMjEsMjAgQEAKIAkJCQkgKiBUaGlzIGlzIHR5cGljYWxseSBFTk9NRU0gb3Igc29tZSBvdGhlciBzdWNoIHNoaXQuCiAJCQkJICogUmV0cnlpbmcgaXMgcG9pbnRsZXNzLiBKdXN0IGRvIEJhZCBFbmQgb24gaXQuLi4KIAkJCQkgKi8KLQkJCQlnb3RvIEJhZF9FbmQ7CisJCQkJdWJfc3RhdGVfZG9uZShzYywgY21kLCByYyk7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX0NMRUFSOwogCQkJdWJfY21kdHJfc3RhdGUoc2MsIGNtZCk7CiAJCQlyZXR1cm47Ci0JCX0KLQkJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJY2FzZSAtRVNIVVRET1dOOgkvKiB1bnBsdWcgKi8KKwkJY2FzZSAtRUlMU0VROgkJLyogdW5wbHVnIHRpbWVvdXQgb24gdWhjaSAqLworCQkJdWJfc3RhdGVfZG9uZShzYywgY21kLCAtRU5PREVWKTsKKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKIAkJCWdvdG8gQmFkX0VuZDsKIAkJfQogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IFVTX0JVTEtfQ0JfV1JBUF9MRU4pIHsKLQkJCS8qIFhYWCBNdXN0IGRvIHJlc2V0IGhlcmUgdG8gdW5jb25mdXNlIHRoZSBkZXZpY2UgKi8KIAkJCWdvdG8gQmFkX0VuZDsKIAkJfQogCkBAIC0xMjExLDExICsxMjUzLDggQEAKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiCiAJCQkJICAgICJ1bmFibGUgdG8gc3VibWl0IGNsZWFyICglZClcbiIsCiAJCQkJICAgIHNjLT5uYW1lLCByYyk7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIGlzIHR5cGljYWxseSBFTk9NRU0gb3Igc29tZSBvdGhlciBzdWNoIHNoaXQuCi0JCQkJICogUmV0cnlpbmcgaXMgcG9pbnRsZXNzLiBKdXN0IGRvIEJhZCBFbmQgb24gaXQuLi4KLQkJCQkgKi8KLQkJCQlnb3RvIEJhZF9FbmQ7CisJCQkJdWJfc3RhdGVfZG9uZShzYywgY21kLCByYyk7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX0NMUjJTVFM7CiAJCQl1Yl9jbWR0cl9zdGF0ZShzYywgY21kKTsKQEAgLTEyMjQsMTQgKzEyNjMsNTAgQEAKIAkJaWYgKHVyYi0+c3RhdHVzID09IC1FT1ZFUkZMT1cpIHsKIAkJCS8qCiAJCQkgKiBBIGJhYmJsZT8gRmFpbHVyZSwgYnV0IHdlIG11c3QgdHJhbnNmZXIgQ1NXIG5vdy4KLQkJCSAqIFhYWCBUaGlzIGlzIGdvaW5nIHRvIGVuZCBpbiBwZXJwZXR1YWwgYmFiYmxlLiBSZXNldC4KIAkJCSAqLwogCQkJY21kLT5lcnJvciA9IC1FT1ZFUkZMT1c7CS8qIEEgY2hlYXAgdHJpY2suLi4gKi8KIAkJCXViX3N0YXRlX3N0YXQoc2MsIGNtZCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKHVyYi0+c3RhdHVzICE9IDApCi0JCQlnb3RvIEJhZF9FbmQ7CisKKwkJaWYgKGNtZC0+ZGlyID09IFVCX0RJUl9XUklURSkgeworCQkJLyoKKwkJCSAqIERvIG5vdCBjb250aW51ZSB3cml0ZXMgaW4gY2FzZSBvZiBhIGZhaWx1cmUuCisJCQkgKiBEb2luZyBzbyB3b3VsZCBjYXVzZSBzZWN0b3JzIHRvIGJlIG1peGVkIHVwLAorCQkJICogd2hpY2ggaXMgd29yc2UgdGhhbiBzZWN0b3JzIGxvc3QuCisJCQkgKgorCQkJICogV2UgbXVzdCB0cnkgdG8gcmVhZCB0aGUgQ1NXLCBvciBtYW55IGRldmljZXMKKwkJCSAqIGdldCBjb25mdXNlZC4KKwkJCSAqLworCQkJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJaWYgKHVyYi0+c3RhdHVzICE9IDAgfHwKKwkJCSAgICBsZW4gIT0gY21kLT5zZ3ZbY21kLT5jdXJyZW50X3NnXS5sZW5ndGgpIHsKKwkJCQljbWQtPmFjdF9sZW4gKz0gbGVuOworCQkJCXViX2NtZHRyX2FjdF9sZW4oc2MsIGNtZCk7CisKKwkJCQljbWQtPmVycm9yID0gLUVJTzsKKwkJCQl1Yl9zdGF0ZV9zdGF0KHNjLCBjbWQpOworCQkJCXJldHVybjsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElmIGFuIGVycm9yIG9jY3VycyBvbiByZWFkLCB3ZSByZWNvcmQgaXQsIGFuZAorCQkJICogY29udGludWUgdG8gZmV0Y2ggZGF0YSBpbiBvcmRlciB0byBhdm9pZCBidWJibGUuCisJCQkgKgorCQkJICogQXMgYSBzbWFsbCBzaG9ydGN1dCwgd2Ugc3RvcCBpZiB3ZSBkZXRlY3QgdGhhdAorCQkJICogYSBDU1cgbWl4ZWQgaW50byBkYXRhLgorCQkJICovCisJCQlpZiAodXJiLT5zdGF0dXMgIT0gMCkKKwkJCQljbWQtPmVycm9yID0gLUVJTzsKKworCQkJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJaWYgKHVyYi0+c3RhdHVzICE9IDAgfHwKKwkJCSAgICBsZW4gIT0gY21kLT5zZ3ZbY21kLT5jdXJyZW50X3NnXS5sZW5ndGgpIHsKKwkJCQlpZiAoKGxlbiAmIDB4MUZGKSA9PSBVU19CVUxLX0NTX1dSQVBfTEVOKQorCQkJCQlnb3RvIEJhZF9FbmQ7CisJCQl9CisJCX0KIAogCQljbWQtPmFjdF9sZW4gKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQl1Yl9jbWR0cl9hY3RfbGVuKHNjLCBjbWQpOwpAQCAtMTI0OSwxMSArMTMyNCw4IEBACiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogIgogCQkJCSAgICAidW5hYmxlIHRvIHN1Ym1pdCBjbGVhciAoJWQpXG4iLAogCQkJCSAgICBzYy0+bmFtZSwgcmMpOwotCQkJCS8qCi0JCQkJICogVGhpcyBpcyB0eXBpY2FsbHkgRU5PTUVNIG9yIHNvbWUgb3RoZXIgc3VjaCBzaGl0LgotCQkJCSAqIFJldHJ5aW5nIGlzIHBvaW50bGVzcy4gSnVzdCBkbyBCYWQgRW5kIG9uIGl0Li4uCi0JCQkJICovCi0JCQkJZ290byBCYWRfRW5kOworCQkJCXViX3N0YXRlX2RvbmUoc2MsIGNtZCwgcmMpOworCQkJCXJldHVybjsKIAkJCX0KIAogCQkJLyoKQEAgLTEyNjYsMTQgKzEzMzgsOCBAQAogCQkJdWJfY21kdHJfc3RhdGUoc2MsIGNtZCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKHVyYi0+c3RhdHVzID09IC1FT1ZFUkZMT1cpIHsKLQkJCS8qCi0JCQkgKiBYWFggV2UgYXJlIHNjcmV3ZWQgaGVyZS4gUmV0cnlpbmcgaXMgcG9pbnRsZXNzLAotCQkJICogYmVjYXVzZSB0aGUgcGlwZWxpbmVkIGRhdGEgd2lsbCBub3QgZ2V0IGluIHVudGlsCi0JCQkgKiB3ZSByZWFkIHdpdGggYSBiaWcgZW5vdWdoIGJ1ZmZlci4gV2UgbXVzdCByZXNldCBYWFguCi0JCQkgKi8KLQkJCWdvdG8gQmFkX0VuZDsKLQkJfQorCisJCS8qIENhdGNoIGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyAtRU9WRVJGTE9XIGFuZCBvdGhlciBuYXN0aWVzLiAqLwogCQlpZiAodXJiLT5zdGF0dXMgIT0gMCkKIAkJCWdvdG8gQmFkX0VuZDsKIApAQCAtMTMxOSwxNSArMTM4NSwxNSBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJcmMgPSBsZTMyX3RvX2NwdShiY3MtPlJlc2lkdWUpOwotCQlpZiAocmMgIT0gY21kLT5sZW4gLSBjbWQtPmFjdF9sZW4pIHsKKwkJbGVuID0gbGUzMl90b19jcHUoYmNzLT5SZXNpZHVlKTsKKwkJaWYgKGxlbiAhPSBjbWQtPmxlbiAtIGNtZC0+YWN0X2xlbikgewogCQkJLyoKIAkJCSAqIEl0IGlzIGFsbCByaWdodCB0byB0cmFuc2ZlciBsZXNzLCB0aGUgY2FsbGVyIGhhcwogCQkJICogdG8gY2hlY2suIEJ1dCBpdCdzIG5vdCBhbGwgcmlnaHQgaWYgdGhlIGRldmljZQogCQkJICogY291bnRzIGRpc2FncmVlIHdpdGggb3VyIGNvdW50cy4KIAkJCSAqLwogCQkJLyogUDMgKi8gcHJpbnRrKCIlczogcmVzaWQgJWQgbGVuICVkIGFjdCAlZFxuIiwKLQkJCSAgICBzYy0+bmFtZSwgcmMsIGNtZC0+bGVuLCBjbWQtPmFjdF9sZW4pOworCQkJICAgIHNjLT5uYW1lLCBsZW4sIGNtZC0+bGVuLCBjbWQtPmFjdF9sZW4pOwogCQkJZ290byBCYWRfRW5kOwogCQl9CiAKQEAgLTEzMzgsMTMgKzE0MDQsMTMgQEAKIAkJCXViX3N0YXRlX3NlbnNlKHNjLCBjbWQpOwogCQkJcmV0dXJuOwogCQljYXNlIFVTX0JVTEtfU1RBVF9QSEFTRToKLQkJCS8qIFhYWCBXZSBtdXN0IHJlc2V0IHRoZSB0cmFuc3BvcnQgaGVyZSAqLwogCQkJLyogUDMgKi8gcHJpbnRrKCIlczogc3RhdHVzIFBIQVNFXG4iLCBzYy0+bmFtZSk7CiAJCQlnb3RvIEJhZF9FbmQ7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBDU1cgc3RhdHVzIDB4JXhcbiIsCiAJCQkgICAgc2MtPm5hbWUsIGJjcy0+U3RhdHVzKTsKLQkJCWdvdG8gQmFkX0VuZDsKKwkJCXViX3N0YXRlX2RvbmUoc2MsIGNtZCwgLUVJTlZBTCk7CisJCQlyZXR1cm47CiAJCX0KIAogCQkvKiBOb3QgemVyb2luZyBlcnJvciB0byBwcmVzZXJ2ZSBhIGJhYmJsZSBpbmRpY2F0b3IgKi8KQEAgLTEzNjQsNyArMTQzMCw4IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCiAJCSAgICAid3JvbmcgY29tbWFuZCBzdGF0ZSAlZFxuIiwKIAkJICAgIHNjLT5uYW1lLCBjbWQtPnN0YXRlKTsKLQkJZ290byBCYWRfRW5kOworCQl1Yl9zdGF0ZV9kb25lKHNjLCBjbWQsIC1FSU5WQUwpOworCQlyZXR1cm47CiAJfQogCXJldHVybjsKIApAQCAtMTYxMiw2ICsxNjc5LDkzIEBACiB9CiAKIC8qCisgKiBSZXNldCBtYW5hZ2VtZW50CisgKi8KKworc3RhdGljIHZvaWQgdWJfcmVzZXRfZW50ZXIoc3RydWN0IHViX2RldiAqc2MpCit7CisKKwlpZiAoc2MtPnJlc2V0KSB7CisJCS8qIFRoaXMgaGFwcGVucyBvZnRlbiBvbiBtdWx0aS1MVU4gZGV2aWNlcy4gKi8KKwkJcmV0dXJuOworCX0KKwlzYy0+cmVzZXQgPSAxOworCisjaWYgMCAvKiBOb3QgbmVlZGVkIGJlY2F1c2UgdGhlIGRpc2Nvbm5lY3Qgd2FpdHMgZm9yIHVzLiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnViX2xvY2ssIGZsYWdzKTsKKwlzYy0+b3BlbmMrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Yl9sb2NrLCBmbGFncyk7CisjZW5kaWYKKworI2lmIDAgLyogV2UgbGV0IHRoZW0gc3RvcCB0aGVtc2VsdmVzLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IHViX2x1biAqbHVuOworCWxpc3RfZm9yX2VhY2gocCwgJnNjLT5sdW5zKSB7CisJCWx1biA9IGxpc3RfZW50cnkocCwgc3RydWN0IHViX2x1biwgbGluayk7CisJCWJsa19zdG9wX3F1ZXVlKGx1bi0+ZGlzay0+cXVldWUpOworCX0KKyNlbmRpZgorCisJc2NoZWR1bGVfd29yaygmc2MtPnJlc2V0X3dvcmspOworfQorCitzdGF0aWMgdm9pZCB1Yl9yZXNldF90YXNrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdWJfZGV2ICpzYyA9IGFyZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IHViX2x1biAqbHVuOworCWludCBsa3IsIHJjOworCisJaWYgKCFzYy0+cmVzZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJ1bm5pbmcgcmVzZXQgdW5yZXF1ZXN0ZWRcbiIsCisJCSAgICBzYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJnNjLT5wb2lzb24pKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE5vdCByZXNldHRpbmcgZGlzY29ubmVjdGVkIGRldmljZVxuIiwKKwkJICAgIHNjLT5uYW1lKTsgLyogUDMgVGhpcyBmbG9vZHMuIFJlbW92ZSBzb29uLiBYWFggKi8KKwl9IGVsc2UgaWYgKHNjLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlcyAhPSAxKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE5vdCByZXNldHRpbmcgbXVsdGktaW50ZXJmYWNlIGRldmljZVxuIiwKKwkJICAgIHNjLT5uYW1lKTsgLyogUDMgVGhpcyBmbG9vZHMuIFJlbW92ZSBzb29uLiBYWFggKi8KKwl9IGVsc2UgeworCQlpZiAoKGxrciA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoc2MtPmRldiwgc2MtPmludGYpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX05PVElDRQorCQkJICAgICIlczogdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCBmYWlsZWQgKCVkKVxuIiwKKwkJCSAgICBzYy0+bmFtZSwgbGtyKTsKKwkJfSBlbHNlIHsKKwkJCXJjID0gdXNiX3Jlc2V0X2RldmljZShzYy0+ZGV2KTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiCisJCQkJICAgICJ1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0IGZhaWxlZCAoJWQpXG4iLAorCQkJCSAgICBzYy0+bmFtZSwgcmMpOworCQkJfQorCisJCQlpZiAobGtyKQorCQkJCXVzYl91bmxvY2tfZGV2aWNlKHNjLT5kZXYpOworCQl9CisJfQorCisJLyoKKwkgKiBJbiB0aGVvcnksIG5vIGNvbW1hbmRzIGNhbiBiZSBydW5uaW5nIHdoaWxlIHJlc2V0IGlzIGFjdGl2ZSwKKwkgKiBzbyBub2JvZHkgY2FuIGFzayBmb3IgYW5vdGhlciByZXNldCwgYW5kIHNvIHdlIGRvIG5vdCBuZWVkIGFueQorCSAqIHF1ZXVlcyBvZiByZXNldHMgb3IgYW55dGhpbmcuIFdlIGRvIG5lZWQgYSBzcGlubG9jayB0aG91Z2gsCisJICogdG8gaW50ZXJhY3Qgd2l0aCBibG9jayBsYXllci4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxvY2ssIGZsYWdzKTsKKwlzYy0+cmVzZXQgPSAwOworCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT50YXNrbGV0KTsKKwlsaXN0X2Zvcl9lYWNoKHAsICZzYy0+bHVucykgeworCQlsdW4gPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCB1Yl9sdW4sIGxpbmspOworCQlibGtfc3RhcnRfcXVldWUobHVuLT5kaXNrLT5xdWV1ZSk7CisJfQorCXdha2VfdXAoJnNjLT5yZXNldF93YWl0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG9jaywgZmxhZ3MpOworfQorCisvKgogICogVGhpcyBpcyBjYWxsZWQgZnJvbSBhIHByb2Nlc3MgY29udGV4dC4KICAqLwogc3RhdGljIHZvaWQgdWJfcmV2YWxpZGF0ZShzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX2x1biAqbHVuKQpAQCAtMjE0Niw3ICsyMzAwLDcgQEAKIAlpZiAoZXBfaW4gPT0gTlVMTCB8fCBlcF9vdXQgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBmYWlsZWQgZW5kcG9pbnQgY2hlY2tcbiIsCiAJCSAgICBzYy0+bmFtZSk7Ci0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBDYWxjdWxhdGUgYW5kIHN0b3JlIHRoZSBwaXBlIHZhbHVlcyAqLwpAQCAtMjE3Miw2ICsyMzI2LDkgQEAKIAlpbnQgcmM7CiAJaW50IGk7CiAKKwlpZiAodXNiX3VzdWFsX2NoZWNrX3R5cGUoZGV2X2lkLCBVU0JfVVNfVFlQRV9VQikpCisJCXJldHVybiAtRU5YSU87CisKIAlyYyA9IC1FTk9NRU07CiAJaWYgKChzYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Yl9kZXYpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJZ290byBlcnJfY29yZTsKQEAgLTIxODEsNiArMjMzOCw4IEBACiAJdXNiX2luaXRfdXJiKCZzYy0+d29ya191cmIpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnRhc2tsZXQsIHViX3Njc2lfYWN0aW9uLCAodW5zaWduZWQgbG9uZylzYyk7CiAJYXRvbWljX3NldCgmc2MtPnBvaXNvbiwgMCk7CisJSU5JVF9XT1JLKCZzYy0+cmVzZXRfd29yaywgdWJfcmVzZXRfdGFzaywgc2MpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNjLT5yZXNldF93YWl0KTsKIAogCWluaXRfdGltZXIoJnNjLT53b3JrX3RpbWVyKTsKIAlzYy0+d29ya190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHNjOwpAQCAtMjIwMSw3ICsyMzYwLDggQEAKIAogCS8qIFhYWCBWZXJpZnkgdGhhdCB3ZSBjYW4gaGFuZGxlIHRoZSBkZXZpY2UgKGZyb20gZGVzY3JpcHRvcnMpICovCiAKLQl1Yl9nZXRfcGlwZXMoc2MsIHNjLT5kZXYsIGludGYpOworCWlmICh1Yl9nZXRfcGlwZXMoc2MsIHNjLT5kZXYsIGludGYpICE9IDApCisJCWdvdG8gZXJyX2Rldl9kZXNjOwogCiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmc2MtPmludGYtPmRldiwgJmRldl9hdHRyX2RpYWcpICE9IDApCiAJCWdvdG8gZXJyX2RpYWc7CkBAIC0yMjcyLDYgKzI0MzIsNyBAQAogCiAJLyogZGV2aWNlX3JlbW92ZV9maWxlKCZzYy0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfZGlhZyk7ICovCiBlcnJfZGlhZzoKK2Vycl9kZXZfZGVzYzoKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCS8vIHVzYl9wdXRfaW50ZihzYy0+aW50Zik7CiAJdXNiX3B1dF9kZXYoc2MtPmRldik7CkBAIC0yMzA5LDE0ICsyNDcwLDE0IEBACiAJdWJfcmV2YWxpZGF0ZShzYywgbHVuKTsKIAogCXJjID0gLUVOT01FTTsKLQlpZiAoKGRpc2sgPSBhbGxvY19kaXNrKFVCX01JTk9SU19QRVJfTUFKT1IpKSA9PSBOVUxMKQorCWlmICgoZGlzayA9IGFsbG9jX2Rpc2soVUJfUEFSVFNfUEVSX0xVTikpID09IE5VTEwpCiAJCWdvdG8gZXJyX2Rpc2thbGxvYzsKIAogCWx1bi0+ZGlzayA9IGRpc2s7CiAJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsIERSVl9OQU1FICIlYyIsIGx1bi0+aWQgKyAnYScpOwogCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgREVWRlNfTkFNRSAiLyVjIiwgbHVuLT5pZCArICdhJyk7CiAJZGlzay0+bWFqb3IgPSBVQl9NQUpPUjsKLQlkaXNrLT5maXJzdF9taW5vciA9IGx1bi0+aWQgKiBVQl9NSU5PUlNfUEVSX01BSk9SOworCWRpc2stPmZpcnN0X21pbm9yID0gbHVuLT5pZCAqIFVCX1BBUlRTX1BFUl9MVU47CiAJZGlzay0+Zm9wcyA9ICZ1Yl9iZF9mb3BzOwogCWRpc2stPnByaXZhdGVfZGF0YSA9IGx1bjsKIAlkaXNrLT5kcml2ZXJmc19kZXYgPSAmc2MtPmludGYtPmRldjsKQEAgLTIzODAsNiArMjU0MSwxMSBAQAogCWF0b21pY19zZXQoJnNjLT5wb2lzb24sIDEpOwogCiAJLyoKKwkgKiBXYWl0IGZvciByZXNldCB0byBlbmQsIGlmIGFueS4KKwkgKi8KKwl3YWl0X2V2ZW50KHNjLT5yZXNldF93YWl0LCAhc2MtPnJlc2V0KTsKKworCS8qCiAJICogQmxvdyBhd2F5IHF1ZXVlZCBjb21tYW5kcy4KIAkgKgogCSAqIEFjdHVhbGx5LCB0aGlzIG5ldmVyIHdvcmtzLCBiZWNhdXNlIGJlZm9yZSB3ZSBnZXQgaGVyZQpAQCAtMjM5Miw3ICsyNTU4LDcgQEAKIAl7CiAJCXN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kOwogCQlpbnQgY250ID0gMDsKLQkJd2hpbGUgKChjbWQgPSB1Yl9jbWRxX3BvcChzYykpICE9IE5VTEwpIHsKKwkJd2hpbGUgKChjbWQgPSB1Yl9jbWRxX3BlZWsoc2MpKSAhPSBOVUxMKSB7CiAJCQljbWQtPmVycm9yID0gLUVOT1RDT05OOwogCQkJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX0RPTkU7CiAJCQl1Yl9jbWR0cl9zdGF0ZShzYywgY21kKTsKQEAgLTI0NjEsNyArMjYyNyw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1Yl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInViIiwKIAkucHJvYmUgPQl1Yl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXViX2Rpc2Nvbm5lY3QsCkBAIC0yNDc5LDYgKzI2NDQsNyBAQAogCWlmICgocmMgPSB1c2JfcmVnaXN0ZXIoJnViX2RyaXZlcikpICE9IDApCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCisJdXNiX3VzdWFsX3NldF9wcmVzZW50KFVTQl9VU19UWVBFX1VCKTsKIAlyZXR1cm4gMDsKIAogZXJyX3JlZ2lzdGVyOgpAQCAtMjQ5NCw2ICsyNjYwLDcgQEAKIAogCWRldmZzX3JlbW92ZShERVZGU19OQU1FKTsKIAl1bnJlZ2lzdGVyX2Jsa2RldihVQl9NQUpPUiwgRFJWX05BTUUpOworCXVzYl91c3VhbF9jbGVhcl9wcmVzZW50KFVTQl9VU19UWVBFX1VCKTsKIH0KIAogbW9kdWxlX2luaXQodWJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9iY20yMDN4LmMgYi9kcml2ZXJzL2JsdWV0b290aC9iY20yMDN4LmMKaW5kZXggOGU3ZmIzNS4uM2U3YTA2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmNtMjAzeC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JjbTIwM3guYwpAQCAtMjc1LDcgKzI3NSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBiY20yMDN4X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImJjbTIwM3giLAogCS5wcm9iZQkJPSBiY20yMDN4X3Byb2JlLAogCS5kaXNjb25uZWN0CT0gYmNtMjAzeF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKaW5kZXggMDY3ZTI3OC4uODk0N2M4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCkBAIC03NjgsNyArNzY4LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJmdXNiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImJmdXNiIiwKIAkucHJvYmUJCT0gYmZ1c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBiZnVzYl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMgYi9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYwppbmRleCAzOTQ3OTYzLi45NDQ2OTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYwpAQCAtNjE5LDcgKzYxOSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBicGExMHhfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYnBhMTB4IiwKIAkucHJvYmUJCT0gYnBhMTB4X3Byb2JlLAogCS5kaXNjb25uZWN0CT0gYnBhMTB4X2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKaW5kZXggMDU3Y2IyYi4uOTIzODJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwpAQCAtMTA0NCw3ICsxMDQ0LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGhjaV91c2JfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiaGNpX3VzYiIsCiAJLnByb2JlCQk9IGhjaV91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBoY2lfdXNiX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvLmdpdGlnbm9yZSBiL2RyaXZlcnMvY2hhci8uZ2l0aWdub3JlCmluZGV4IDJiNmIxZDcuLjczZGZkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci8uZ2l0aWdub3JlCisrKyBiL2RyaXZlcnMvY2hhci8uZ2l0aWdub3JlCkBAIC0xLDMgKzEsMyBAQAogY29uc29sZW1hcF9kZWZ0YmwuYwogZGVma2V5bWFwLmMKLQorcXRyb25peG1hcC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2kycGFjay5oIGIvZHJpdmVycy9jaGFyL2lwMi9pMnBhY2suaAppbmRleCBlOWI4N2E3Li4wMDM0MmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2kycGFjay5oCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaTJwYWNrLmgKQEAgLTM1OCw3ICszNTgsNyBAQAogI2RlZmluZSBNQl9PVVRfU1RSSVBQRUQgICAgMHg0MCAgLy8gQm9hcmQgaGFzIHJlYWQgYWxsIG91dHB1dCBmcm9tIGZpZm8gCiAjZGVmaW5lIE1CX0ZBVEFMX0VSUk9SICAgICAweDIwICAvLyBCb2FyZCBoYXMgZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvcgogCi0jcHJhZ21hIHBhY2soNCkgICAgICAgICAgICAgICAgICAvLyBSZXNldCBwYWRkaW5nIHRvIGNvbW1hbmQtbGluZSBkZWZhdWx0CisjcHJhZ21hIHBhY2soKSAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHBhZGRpbmcgdG8gY29tbWFuZC1saW5lIGRlZmF1bHQKIAogI2VuZGlmICAgICAgLy8gSTJQQUNLX0gKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25faGRsYy5jIGIvZHJpdmVycy9jaGFyL25faGRsYy5jCmluZGV4IGMzNjYwZDguLmExMzNhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX2hkbGMuYworKysgYi9kcml2ZXJzL2NoYXIvbl9oZGxjLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogfQkvKiBlbmQgb2Ygbl9oZGxjX3R0eV9yZWNlaXZlKCkgKi8KIAogLyoqCi0gKiBuX2hkbGNfdHR5X3JlYWQgLSBDYWxsZWQgdG8gcmV0cmVpdmUgb25lIGZyYW1lIG9mIGRhdGEgKGlmIGF2YWlsYWJsZSkKKyAqIG5faGRsY190dHlfcmVhZCAtIENhbGxlZCB0byByZXRyaWV2ZSBvbmUgZnJhbWUgb2YgZGF0YSAoaWYgYXZhaWxhYmxlKQogICogQHR0eSAtIHBvaW50ZXIgdG8gdHR5IGluc3RhbmNlIGRhdGEKICAqIEBmaWxlIC0gcG9pbnRlciB0byBvcGVuIGZpbGUgb2JqZWN0CiAgKiBAYnVmIC0gcG9pbnRlciB0byByZXR1cm5lZCBkYXRhIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDc5OTlkYTIuLmJkZmRmZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTE1NTQsMTAgKzE1NTQsOCBAQAogCiBFWFBPUlRfU1lNQk9MKHNlY3VyZV90Y3Bfc2VxdWVuY2VfbnVtYmVyKTsKIAotCi0KLS8qIEdlbmVyYXRlIHNlY3VyZSBzdGFydGluZyBwb2ludCBmb3IgZXBoZW1lcmFsIFRDUCBwb3J0IHNlYXJjaCAqLwotdTMyIHNlY3VyZV90Y3BfcG9ydF9lcGhlbWVyYWwoX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBfX3UxNiBkcG9ydCkKKy8qIEdlbmVyYXRlIHNlY3VyZSBzdGFydGluZyBwb2ludCBmb3IgZXBoZW1lcmFsIElQVjQgdHJhbnNwb3J0IHBvcnQgc2VhcmNoICovCit1MzIgc2VjdXJlX2lwdjRfcG9ydF9lcGhlbWVyYWwoX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBfX3UxNiBkcG9ydCkKIHsKIAlzdHJ1Y3Qga2V5ZGF0YSAqa2V5cHRyID0gZ2V0X2tleXB0cigpOwogCXUzMiBoYXNoWzRdOwpAQCAtMTU3NSw3ICsxNTczLDcgQEAKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotdTMyIHNlY3VyZV90Y3B2Nl9wb3J0X2VwaGVtZXJhbChjb25zdCBfX3UzMiAqc2FkZHIsIGNvbnN0IF9fdTMyICpkYWRkciwgX191MTYgZHBvcnQpCit1MzIgc2VjdXJlX2lwdjZfcG9ydF9lcGhlbWVyYWwoY29uc3QgX191MzIgKnNhZGRyLCBjb25zdCBfX3UzMiAqZGFkZHIsIF9fdTE2IGRwb3J0KQogewogCXN0cnVjdCBrZXlkYXRhICprZXlwdHIgPSBnZXRfa2V5cHRyKCk7CiAJdTMyIGhhc2hbMTJdOwpAQCAtMTU4Niw3ICsxNTg0LDcgQEAKIAogCXJldHVybiB0d290aGlyZHNNRDRUcmFuc2Zvcm0oZGFkZHIsIGhhc2gpOwogfQotRVhQT1JUX1NZTUJPTChzZWN1cmVfdGNwdjZfcG9ydF9lcGhlbWVyYWwpOworRVhQT1JUX1NZTUJPTChzZWN1cmVfaXB2Nl9wb3J0X2VwaGVtZXJhbCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQX0RDQ1ApIHx8IGRlZmluZWQoQ09ORklHX0lQX0RDQ1BfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYwppbmRleCAwOTJlOWIxLi4xNTMzZjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYwpAQCAtMTUxLDcgKzE1MSw2IEBACiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfcGN3ZF9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJRFJJVkVSX05BTUUsCiAJLnByb2JlID0JdXNiX3Bjd2RfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2JfcGN3ZF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggODE1OTAyYy4uYTkxNjNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC04MjMsNiArODIzLDMwIEBACiAKIAogLyoqIAorICogY3B1ZnJlcV9xdWlja19nZXQgLSBnZXQgdGhlIENQVSBmcmVxdWVuY3kgKGluIGtIeikgZnJwbSBwb2xpY3ktPmN1cgorICogQGNwdTogQ1BVIG51bWJlcgorICoKKyAqIFRoaXMgaXMgdGhlIGxhc3Qga25vd24gZnJlcSwgd2l0aG91dCBhY3R1YWxseSBnZXR0aW5nIGl0IGZyb20gdGhlIGRyaXZlci4KKyAqIFJldHVybiB2YWx1ZSB3aWxsIGJlIHNhbWUgYXMgd2hhdCBpcyBzaG93biBpbiBzY2FsaW5nX2N1cl9mcmVxIGluIHN5c2ZzLgorICovCit1bnNpZ25lZCBpbnQgY3B1ZnJlcV9xdWlja19nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJaWYgKHBvbGljeSkgeworCQlkb3duKCZwb2xpY3ktPmxvY2spOworCQlyZXQgPSBwb2xpY3ktPmN1cjsKKwkJdXAoJnBvbGljeS0+bG9jayk7CisJCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOworCX0KKworCXJldHVybiAocmV0KTsKK30KK0VYUE9SVF9TWU1CT0woY3B1ZnJlcV9xdWlja19nZXQpOworCisKKy8qKiAKICAqIGNwdWZyZXFfZ2V0IC0gZ2V0IHRoZSBjdXJyZW50IENQVSBmcmVxdWVuY3kgKGluIGtIeikKICAqIEBjcHU6IENQVSBudW1iZXIKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IDJlZDVjNDMuLjM5NTQzYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC05Myw3ICs5Myw3IEBACiB7CiAJcmV0dXJuCWtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaWRsZSArCiAJCWtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaW93YWl0ICsKLQkJKCAhZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UgPyAKKwkJKCBkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSA/CiAJCSAga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5uaWNlIDoKIAkJICAwKTsKIH0KQEAgLTEyNyw3ICsxMjcsNyBAQAogc2hvd19vbmUoc2FtcGxpbmdfZG93bl9mYWN0b3IsIHNhbXBsaW5nX2Rvd25fZmFjdG9yKTsKIHNob3dfb25lKHVwX3RocmVzaG9sZCwgdXBfdGhyZXNob2xkKTsKIHNob3dfb25lKGRvd25fdGhyZXNob2xkLCBkb3duX3RocmVzaG9sZCk7Ci1zaG93X29uZShpZ25vcmVfbmljZSwgaWdub3JlX25pY2UpOworc2hvd19vbmUoaWdub3JlX25pY2VfbG9hZCwgaWdub3JlX25pY2UpOwogc2hvd19vbmUoZnJlcV9zdGVwLCBmcmVxX3N0ZXApOwogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9zYW1wbGluZ19kb3duX2ZhY3RvcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnVudXNlZCwgCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2lnbm9yZV9uaWNlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIHNzaXplX3Qgc3RvcmVfaWdub3JlX25pY2VfbG9hZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwpAQCAtMjcyLDcgKzI3Miw3IEBACiBkZWZpbmVfb25lX3J3KHNhbXBsaW5nX2Rvd25fZmFjdG9yKTsKIGRlZmluZV9vbmVfcncodXBfdGhyZXNob2xkKTsKIGRlZmluZV9vbmVfcncoZG93bl90aHJlc2hvbGQpOwotZGVmaW5lX29uZV9ydyhpZ25vcmVfbmljZSk7CitkZWZpbmVfb25lX3J3KGlnbm9yZV9uaWNlX2xvYWQpOwogZGVmaW5lX29uZV9ydyhmcmVxX3N0ZXApOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRic19hdHRyaWJ1dGVzW10gPSB7CkBAIC0yODIsNyArMjgyLDcgQEAKIAkmc2FtcGxpbmdfZG93bl9mYWN0b3IuYXR0ciwKIAkmdXBfdGhyZXNob2xkLmF0dHIsCiAJJmRvd25fdGhyZXNob2xkLmF0dHIsCi0JJmlnbm9yZV9uaWNlLmF0dHIsCisJJmlnbm9yZV9uaWNlX2xvYWQuYXR0ciwKIAkmZnJlcV9zdGVwLmF0dHIsCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCmluZGV4IDE3NzQxMTEuLmU2OWZkOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwpAQCAtODksNyArODksNyBAQAogewogCXJldHVybglrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LmlkbGUgKwogCQlrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lmlvd2FpdCArCi0JCSggIWRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlID8gCisJCSggZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UgPwogCQkgIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQubmljZSA6CiAJCSAgMCk7CiB9CkBAIC0xMjIsNyArMTIyLDcgQEAKIHNob3dfb25lKHNhbXBsaW5nX3JhdGUsIHNhbXBsaW5nX3JhdGUpOwogc2hvd19vbmUoc2FtcGxpbmdfZG93bl9mYWN0b3IsIHNhbXBsaW5nX2Rvd25fZmFjdG9yKTsKIHNob3dfb25lKHVwX3RocmVzaG9sZCwgdXBfdGhyZXNob2xkKTsKLXNob3dfb25lKGlnbm9yZV9uaWNlLCBpZ25vcmVfbmljZSk7CitzaG93X29uZShpZ25vcmVfbmljZV9sb2FkLCBpZ25vcmVfbmljZSk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3NhbXBsaW5nX2Rvd25fZmFjdG9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqdW51c2VkLCAKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xODIsNyArMTgyLDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2lnbm9yZV9uaWNlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIHNzaXplX3Qgc3RvcmVfaWdub3JlX25pY2VfbG9hZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwpAQCAtMjIzLDcgKzIyMyw3IEBACiBkZWZpbmVfb25lX3J3KHNhbXBsaW5nX3JhdGUpOwogZGVmaW5lX29uZV9ydyhzYW1wbGluZ19kb3duX2ZhY3Rvcik7CiBkZWZpbmVfb25lX3J3KHVwX3RocmVzaG9sZCk7Ci1kZWZpbmVfb25lX3J3KGlnbm9yZV9uaWNlKTsKK2RlZmluZV9vbmVfcncoaWdub3JlX25pY2VfbG9hZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZGJzX2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2FtcGxpbmdfcmF0ZV9tYXguYXR0ciwKQEAgLTIzMSw3ICsyMzEsNyBAQAogCSZzYW1wbGluZ19yYXRlLmF0dHIsCiAJJnNhbXBsaW5nX2Rvd25fZmFjdG9yLmF0dHIsCiAJJnVwX3RocmVzaG9sZC5hdHRyLAotCSZpZ25vcmVfbmljZS5hdHRyLAorCSZpZ25vcmVfbmljZV9sb2FkLmF0dHIsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC8uZ2l0aWdub3JlIGIvZHJpdmVycy9pZWVlMTM5NC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZGExMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2llZWUxMzk0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorb3VpLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggNDc1ZDk4Zi4uNzgwMDA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAKKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisKIE1PRFVMRV9BVVRIT1IoIlJvbGFuZCBEcmVpZXIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSVAtb3Zlci1JbmZpbmlCYW5kIG5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IGVmM2VlMDMuLmVkMGMyZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCisjaW5jbHVkZSA8bmV0L2RzdC5oPgorCiAjaW5jbHVkZSAiaXBvaWIuaCIKIAogI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKaW5kZXggNjRiNGEzMC4uYmMyZmNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS11c2IuYwpAQCAtMjM1LDcgKzIzNSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlmb3JjZV91c2JfaWRzKTsKIAogc3RydWN0IHVzYl9kcml2ZXIgaWZvcmNlX3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImlmb3JjZSIsCiAJLnByb2JlID0JaWZvcmNlX3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CWlmb3JjZV91c2JfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCmluZGV4IGY4NDU3ZWYuLmNhNWI0YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwpAQCAtMTcxNSw3ICsxNzE1LDYgQEAKIC8qIG91ciBkcml2ZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGhmY19kcnYgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgID0gImhmY191c2IiLAogCS5pZF90YWJsZSA9IGhmY3VzYl9pZHRhYiwKIAkucHJvYmUgPSBoZmNfdXNiX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwppbmRleCA4ZTE5MmEzLi45OWNiMGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwpAQCAtMTgwLDcgKzE4MCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHN0NTQ4MV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3Q1NDgxX3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInN0NTQ4MV91c2IiLAogCS5wcm9iZSA9CXByb2JlX3N0NTQ4MSwKIAkuZGlzY29ubmVjdCA9CWRpc2Nvbm5lY3Rfc3Q1NDgxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC8uZ2l0aWdub3JlIGIvZHJpdmVycy9tZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YWZlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACitta3RhYmxlcworcmFpZDZhbHRpdmVjKi5jCityYWlkNmludCouYworcmFpZDZ0YWJsZXMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10YWJsZS5jIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCmluZGV4IGE2ZDNiYWEuLmE2ZjJkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYworKysgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKQEAgLTYzOCw3ICs2MzgsNyBAQAogc3RhdGljIHZvaWQgY2hlY2tfZm9yX3ZhbGlkX2xpbWl0cyhzdHJ1Y3QgaW9fcmVzdHJpY3Rpb25zICpycykKIHsKIAlpZiAoIXJzLT5tYXhfc2VjdG9ycykKLQkJcnMtPm1heF9zZWN0b3JzID0gTUFYX1NFQ1RPUlM7CisJCXJzLT5tYXhfc2VjdG9ycyA9IFNBRkVfTUFYX1NFQ1RPUlM7CiAJaWYgKCFycy0+bWF4X3BoeXNfc2VnbWVudHMpCiAJCXJzLT5tYXhfcGh5c19zZWdtZW50cyA9IE1BWF9QSFlTX1NFR01FTlRTOwogCWlmICghcnMtPm1heF9od19zZWdtZW50cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYwppbmRleCAwYTc4YmEzLi5hNmM5MWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jCkBAIC01NDQsNyArNTQ0LDYgQEAKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZsZXhjb3BfdXNiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImIyYzJfZmxleGNvcF91c2IiLAogCS5wcm9iZQkJPSBmbGV4Y29wX3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGZsZXhjb3BfdXNiX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKaW5kZXggMzM2ZmMyOC4uYjk5NmZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwpAQCAtOTg2LDcgKzk4Niw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2luZXJneXQyX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNpbmVyZ3l0Ml9kcml2ZXIgPSB7Ci0JLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJPSAiY2luZXJneVQyIiwKIAkucHJvYmUJPSBjaW5lcmd5dDJfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBjaW5lcmd5dDJfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKaW5kZXggOGM3YmVmZi4uY2U0NGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGE4MDBfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZHZiX3VzYl9hODAwIiwKIAkucHJvYmUJCT0gYTgwMF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKaW5kZXggM2ZlMzgzZi4uZDA1ZmFiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKQEAgLTI0MSw3ICsyNDEsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN4dXNiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImR2Yl91c2JfY3h1c2IiLAogCS5wcm9iZQkJPSBjeHVzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYwppbmRleCBhYTI3MWEyLi41MmFjM2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKQEAgLTM3Myw3ICszNzMsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRpYnVzYl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJkdmJfdXNiX2RpYnVzYl9tYiIsCiAJLnByb2JlCQk9IGRpYnVzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYwppbmRleCA2YTA5MTJlLi41NTgwMmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKQEAgLTgyLDcgKzgyLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkaWJ1c2JfbWNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZHZiX3VzYl9kaWJ1c2JfbWMiLAogCS5wcm9iZQkJPSBkaWJ1c2JfbWNfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKaW5kZXggZjk4ZTMwNi4uNDUwNDE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCkBAIC0yMzMsNyArMjMzLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkaWdpdHZfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZHZiX3VzYl9kaWdpdHYiLAogCS5wcm9iZQkJPSBkaWdpdHZfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwppbmRleCBiNTk1NDc2Li42ZTJiYWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwpAQCAtMTk4LDcgKzE5OCw2IEBACiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkdHQyMDB1X3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJkdmJfdXNiX2R0dDIwMHUiLAogCS5wcm9iZQkJPSBkdHQyMDB1X3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKaW5kZXggMTg0MWE2Ni4uZmFjNDhmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYwpAQCAtMjAyLDcgKzIwMiw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbm92YV90X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImR2Yl91c2Jfbm92YV90X3VzYjIiLAogCS5wcm9iZQkJPSBub3ZhX3RfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VtdC0wMTAuYwppbmRleCA2ZmQ2NzY1Li4xNGYxOTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VtdC0wMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VtdC0wMTAuYwpAQCAtMTI4LDcgKzEyOCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdW10X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImR2Yl91c2JfdW10XzAxMCIsCiAJLnByb2JlCQk9IHVtdF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYwppbmRleCBkZTEzYzA0Li5hZmEwMGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMKQEAgLTI1Niw3ICsyNTYsNiBAQAogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnA3MDJ4X3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJkdmItdXNiLXZwNzAyeCIsCiAJLnByb2JlIAkJPSB2cDcwMnhfdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCmluZGV4IDc1NzY1ZTMuLjM4MzUyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwpAQCAtMjUzLDcgKzI1Myw2IEBACiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2cDcwNDVfdXNiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImR2Yl91c2JfdnA3MDQ1IiwKIAkucHJvYmUJCT0gdnA3MDQ1X3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfdXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfdXNiLmMKaW5kZXggOTc3NGU5NC4uMTQzOWNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV91c2IuYwpAQCAtNTgyLDcgKzU4Miw2IEBACiAKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNwaWFfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiY3BpYSIsCiAJLnByb2JlCQk9IGNwaWFfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBjcGlhX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IDA2ZDc2ODcuLjNhNTYxMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0xODg0LDcgKzE4ODQsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZW0yOHh4X3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSAiZW0yOHh4IiwKIAkucHJvYmUgPSBlbTI4eHhfdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gZW0yOHh4X3VzYl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCA0MjYyYTIyLi41Mzc4MzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtMzEzLDEzICszMTMsMTMgQEAKIAkJdTMyCSBsb2dfaW5mbyA9IGxlMzJfdG9fY3B1KG1yLT51LnJlcGx5LklPQ0xvZ0luZm8pOwogCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykKIAkJCW1wdF9mY19sb2dfaW5mbyhpb2MsIGxvZ19pbmZvKTsKLQkJZWxzZSBpZiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKQorCQllbHNlIGlmIChpb2MtPmJ1c190eXBlID09IFNQSSkKIAkJCW1wdF9zcF9sb2dfaW5mbyhpb2MsIGxvZ19pbmZvKTsKIAkJZWxzZSBpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpCiAJCQltcHRfc2FzX2xvZ19pbmZvKGlvYywgbG9nX2luZm8pOwogCX0KIAlpZiAoaW9jX3N0YXQgJiBNUElfSU9DU1RBVFVTX01BU0spIHsKLQkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSAmJgorCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTUEkgJiYKIAkJICAgIGNiX2lkeCAhPSBtcHRfc3RtX2luZGV4ICYmCiAJCSAgICBjYl9pZHggIT0gbXB0X2xhbl9pbmRleCkKIAkJCW1wdF9zcF9pb2NfaW5mbyhpb2MsICh1MzIpaW9jX3N0YXQsIG1mKTsKQEAgLTEzNzYsNyArMTM3Niw3IEBACiAJfQogCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEXzUzQzEwMzApIHsKIAkJaW9jLT5wcm9kX25hbWUgPSAiTFNJNTNDMTAzMCI7Ci0JCWlvYy0+YnVzX3R5cGUgPSBTQ1NJOworCQlpb2MtPmJ1c190eXBlID0gU1BJOwogCQkvKiAxMDMwIENoaXAgRml4LiBEaXNhYmxlIFNwbGl0IHRyYW5zYWN0aW9ucwogCQkgKiBmb3IgUENJWC4gU2V0IE1PU1QgYml0cyB0byB6ZXJvIGlmIFJldiA8IEMwKCA9IDgpLgogCQkgKi8KQEAgLTEzODksNyArMTM4OSw3IEBACiAJfQogCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEXzEwMzBfNTNDMTAzNSkgewogCQlpb2MtPnByb2RfbmFtZSA9ICJMU0k1M0MxMDM1IjsKLQkJaW9jLT5idXNfdHlwZSA9IFNDU0k7CisJCWlvYy0+YnVzX3R5cGUgPSBTUEk7CiAJfQogCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjQpIHsKIAkJaW9jLT5wcm9kX25hbWUgPSAiTFNJU0FTMTA2NCI7CkBAIC0zMDQyLDcgKzMwNDIsNyBAQAogCS8qIENsZWFyIHRoZSBpbnRlcm5hbCBmbGFzaCBiYWQgYml0IC0gYXV0b2luY3JlbWVudGluZyByZWdpc3RlciwKIAkgKiBzbyBtdXN0IGRvIHR3byB3cml0ZXMuCiAJICovCi0JaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgeworCWlmIChpb2MtPmJ1c190eXBlID09IFNQSSkgewogCQkvKgogCQkgKiAxMDMwIGFuZCAxMDM1IEgvVyBlcnJhdGEsIHdvcmthcm91bmQgdG8gYWNjZXNzCiAJCSAqIHRoZSBDbGVhckZsYXNoQmFkU2lnbmF0dXJlQml0CkBAIC0zMTUyLDcgKzMxNTIsNyBAQAogCWludCBjbnQsY250ZG47CiAKIAlkaW5pdHByaW50aygoS0VSTl9XQVJOSU5HIE1ZTkFNICI6IEtpY2tTdGFydGluZyAlcyFcbiIsIGlvYy0+bmFtZSkpOwotCWlmIChpb2MtPmJ1c190eXBlID09IFNDU0kpIHsKKwlpZiAoaW9jLT5idXNfdHlwZSA9PSBTUEkpIHsKIAkJLyogQWx3YXlzIGlzc3VlIGEgTXNnIFVuaXQgUmVzZXQgZmlyc3QuIFRoaXMgd2lsbCBjbGVhciBzb21lCiAJCSAqIFNDU0kgYnVzIGhhbmcgY29uZGl0aW9ucy4KIAkJICovCkBAIC0zNTgwLDcgKzM1ODAsNyBAQAogCWRpbml0cHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogJXMgTm93IG51bVNHRT0lZCBudW1fc2dlPSVkIG51bV9jaGFpbj0lZFxuIiwKIAkJaW9jLT5uYW1lLCBudW1TR0UsIG51bV9zZ2UsIG51bV9jaGFpbikpOwogCi0JaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkKKwlpZiAoaW9jLT5idXNfdHlwZSA9PSBTUEkpCiAJCW51bV9jaGFpbiAqPSBNUFRfU0NTSV9DQU5fUVVFVUU7CiAJZWxzZQogCQludW1fY2hhaW4gKj0gTVBUX0ZDX0NBTl9RVUVVRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggYmFjOGViNC4uNmM0OGQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTc2LDggKzc2LDggQEAKICNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSAiIE1PRFVMRUFVVEhPUgogI2VuZGlmCiAKLSNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjAzLjA0IgotI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDMuMDQiCisjZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wMy4wNSIKKyNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjAzLjA1IgogI2RlZmluZSBXSEFUX01BR0lDX1NUUklORwkJIkAiICIoIiAiIyIgIikiCiAKICNkZWZpbmUgc2hvd19tcHRtb2RfdmVyKHMsdmVyKSAgXApAQCAtMzIxLDcgKzMyMSw3IEBACiAgKglEeW5hbWljIE11bHRpLVBhdGhpbmcgc3BlY2lmaWMgc3R1ZmYuLi4KICAqLwogCi0vKiBWaXJ0RGV2aWNlIG5lZ29GbGFncyBmaWVsZCAqLworLyogVmlydFRhcmdldCBuZWdvRmxhZ3MgZmllbGQgKi8KICNkZWZpbmUgTVBUX1RBUkdFVF9OT19ORUdPX1dJREUJCTB4MDEKICNkZWZpbmUgTVBUX1RBUkdFVF9OT19ORUdPX1NZTkMJCTB4MDIKICNkZWZpbmUgTVBUX1RBUkdFVF9OT19ORUdPX1FBUwkJMHgwNApAQCAtMzMwLDggKzMzMCw3IEBACiAvKgogICoJVmlydERldmljZSAtIEZDIExVTiBkZXZpY2Ugb3IgU0NTSSB0YXJnZXQgZGV2aWNlCiAgKi8KLXR5cGVkZWYgc3RydWN0IF9WaXJ0RGV2aWNlIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UJKmRldmljZTsKK3R5cGVkZWYgc3RydWN0IF9WaXJ0VGFyZ2V0IHsKIAl1OAkJCSB0ZmxhZ3M7CiAJdTgJCQkgaW9jX2lkOwogCXU4CQkJIHRhcmdldF9pZDsKQEAgLTM0MiwyMSArMzQxLDE4IEBACiAJdTgJCQkgbmVnb0ZsYWdzOwkvKiBiaXQgZmllbGQsIHNlZSBhYm92ZSAqLwogCXU4CQkJIHJhaWRWb2x1bWU7CS8qIHNldCwgaWYgUkFJRCBWb2x1bWUgKi8KIAl1OAkJCSB0eXBlOwkJLyogYnl0ZSAwIG9mIElucXVpcnkgZGF0YSAqLwotCXU4CQkJIGNmbGFnczsJLyogY29udHJvbGxlciBmbGFncyAqLwotCXU4CQkJIHJzdmQxcmFpZDsKLQl1MTYJCQkgZmNfcGh5c19sdW47Ci0JdTE2CQkJIGZjX3hsYXRfbHVuOwogCXUzMgkJCSBudW1fbHVuczsKIAl1MzIJCQkgbHVuc1s4XTsJCS8qIE1heCBMVU5zIGlzIDI1NiAqLwotCXU4CQkJIHBhZFs0XTsKIAl1OAkJCSBpbnFfZGF0YVs4XTsKLQkJLyogSUVFRSBSZWdpc3RlcmVkIEV4dGVuZGVkIElkZW50aWZpZXIKLQkJICAgb2J0YWluZWQgdmlhIElOUVVJUlkgVlBEIHBhZ2UgMHg4MyAqLwotCQkvKiBOT1RFOiBEbyBub3Qgc2VwYXJhdGUgdW5pcV9wcmVwYWQgYW5kIHVuaXFfZGF0YQotCQkgICBhcyB0aGV5IGFyZSB0cmVhdGVlZCBhcyBhIHNpbmdsZSBlbnRpdHkgaW4gdGhlIGNvZGUgKi8KLQl1OAkJCSB1bmlxX3ByZXBhZFs4XTsKLQl1OAkJCSB1bmlxX2RhdGFbMjBdOwotCXU4CQkJIHBhZDJbNF07Cit9IFZpcnRUYXJnZXQ7CisKK3R5cGVkZWYgc3RydWN0IF9WaXJ0RGV2aWNlIHsKKwlWaXJ0VGFyZ2V0CSAJKnZ0YXJnZXQ7CisJdTgJCQkgaW9jX2lkOworCXU4CQkJIGJ1c19pZDsKKwl1OAkJCSB0YXJnZXRfaWQ7CisJdTgJCQkgY29uZmlndXJlZF9sdW47CisJdTMyCQkJIGx1bjsKIH0gVmlydERldmljZTsKIAogLyoKQEAgLTkwMyw3ICs4OTksNyBAQAogCiB0eXBlZGVmIGVudW0gewogCUZDLAotCVNDU0ksCisJU1BJLAogCVNBUwogfSBCVVNfVFlQRTsKIApAQCAtOTEyLDcgKzkwOCw3IEBACiAJaW50CQkJICBwb3J0OwogCXUzMgkJCSAgcGFkMDsKIAlzdHJ1Y3Qgc2NzaV9jbW5kCSoqU2NzaUxvb2t1cDsKLQlWaXJ0RGV2aWNlCQkqKlRhcmdldHM7CisJVmlydFRhcmdldAkJKipUYXJnZXRzOwogCU1QVF9MT0NBTF9SRVBMWQkJICpwTG9jYWw7CQkvKiB1c2VkIGZvciBpbnRlcm5hbCBjb21tYW5kcyAqLwogCXN0cnVjdCB0aW1lcl9saXN0CSAgdGltZXI7CiAJCS8qIFBvb2wgb2YgbWVtb3J5IGZvciBob2xkaW5nIFNDcG50cyBiZWZvcmUgZG9pbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IDYwMjEzOGYuLjk1OWQyYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtMTI0NSw3ICsxMjQ1LDcgQEAKIAlNUFRfQURBUFRFUgkJKmlvYzsKIAlzdHJ1Y3QgU2NzaV9Ib3N0CSpzaDsKIAlNUFRfU0NTSV9IT1NUCQkqaGQ7Ci0JVmlydERldmljZQkJKnZkZXY7CisJVmlydFRhcmdldAkJKnZkZXY7CiAJY2hhcgkJCSpwbWVtOwogCWludAkJCSpwZGF0YTsKIAlJT0NQYWdlMl90CQkqcElvYzI7CkBAIC0xODIyLDcgKzE4MjIsNyBAQAogCWNhc2UgTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVDoKIAkJaWYgKGlvYy0+c2gpIHsKIAkJCVNDU0lJT1JlcXVlc3RfdCAqcFNjc2lSZXEgPSAoU0NTSUlPUmVxdWVzdF90ICopIG1mOwotCQkJVmlydERldmljZQkqcFRhcmdldCA9IE5VTEw7CisJCQlWaXJ0VGFyZ2V0CSpwVGFyZ2V0ID0gTlVMTDsKIAkJCU1QVF9TQ1NJX0hPU1QJKmhkID0gTlVMTDsKIAkJCWludCBxdGFnID0gTVBJX1NDU0lJT19DT05UUk9MX1VOVEFHR0VEOwogCQkJaW50IHNjc2lkaXIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCmluZGV4IGE2MjhiZTkuLmJhNjFlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKQEAgLTg0LDEzICs4NCwxNiBAQAogc3RhdGljIGludAltcHRmY0ludGVybmFsQ3R4ID0gLTE7IC8qIFVzZWQgb25seSBmb3IgaW50ZXJuYWwgY29tbWFuZHMgKi8KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXB0ZmNfZHJpdmVyX3RlbXBsYXRlID0geworCS5tb2R1bGUJCQkJPSBUSElTX01PRFVMRSwKIAkucHJvY19uYW1lCQkJPSAibXB0ZmMiLAogCS5wcm9jX2luZm8JCQk9IG1wdHNjc2loX3Byb2NfaW5mbywKIAkubmFtZQkJCQk9ICJNUFQgRkMgSG9zdCIsCiAJLmluZm8JCQkJPSBtcHRzY3NpaF9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCQk9IG1wdHNjc2loX3FjbWQsCisJLnRhcmdldF9hbGxvYwkJCT0gbXB0c2NzaWhfdGFyZ2V0X2FsbG9jLAogCS5zbGF2ZV9hbGxvYwkJCT0gbXB0c2NzaWhfc2xhdmVfYWxsb2MsCiAJLnNsYXZlX2NvbmZpZ3VyZQkJPSBtcHRzY3NpaF9zbGF2ZV9jb25maWd1cmUsCisJLnRhcmdldF9kZXN0cm95CQkJPSBtcHRzY3NpaF90YXJnZXRfZGVzdHJveSwKIAkuc2xhdmVfZGVzdHJveQkJCT0gbXB0c2NzaWhfc2xhdmVfZGVzdHJveSwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoIAkJPSBtcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmVoX2Fib3J0X2hhbmRsZXIJCT0gbXB0c2NzaWhfYWJvcnQsCkBAIC0xNjcsMTMgKzE3MCwxNSBAQAogCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAogCQkgICJTa2lwcGluZyBiZWNhdXNlIGl0J3Mgbm90IG9wZXJhdGlvbmFsIVxuIiwKIAkJICBpb2MtPm5hbWUpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIG91dF9tcHRmY19wcm9iZTsKIAl9CiAKIAlpZiAoIWlvYy0+YWN0aXZlKSB7CiAJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJTa2lwcGluZyBiZWNhdXNlIGl0J3MgZGlzYWJsZWQhXG4iLAogCQkgIGlvYy0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X21wdGZjX3Byb2JlOwogCX0KIAogCS8qICBTYW5pdHkgY2hlY2sgLSBlbnN1cmUgYXQgbGVhc3QgMSBwb3J0IGlzIElOSVRJQVRPUiBjYXBhYmxlCkBAIC0xOTgsNyArMjAzLDggQEAKIAkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIFNDU0kgc3Vic3lzdGVtXG4iLAogCQkJaW9jLT5uYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisJCWVycm9yID0gLTE7CisJCWdvdG8gb3V0X21wdGZjX3Byb2JlOwogICAgICAgICB9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5GcmVlUWxvY2ssIGZsYWdzKTsKQEAgLTI2Niw3ICsyNzIsNyBAQAogCW1lbSA9IGttYWxsb2Moc3osIEdGUF9BVE9NSUMpOwogCWlmIChtZW0gPT0gTlVMTCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gbXB0ZmNfcHJvYmVfZmFpbGVkOworCQlnb3RvIG91dF9tcHRmY19wcm9iZTsKIAl9CiAKIAltZW1zZXQobWVtLCAwLCBzeik7CkBAIC0yODQsMTQgKzI5MCwxNCBAQAogCW1lbSA9IGttYWxsb2Moc3osIEdGUF9BVE9NSUMpOwogCWlmIChtZW0gPT0gTlVMTCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gbXB0ZmNfcHJvYmVfZmFpbGVkOworCQlnb3RvIG91dF9tcHRmY19wcm9iZTsKIAl9CiAKIAltZW1zZXQobWVtLCAwLCBzeik7Ci0JaGQtPlRhcmdldHMgPSAoVmlydERldmljZSAqKikgbWVtOworCWhkLT5UYXJnZXRzID0gKFZpcnRUYXJnZXQgKiopIG1lbTsKIAogCWRwcmludGsoKEtFUk5fSU5GTwotCSAgIiAgVGFyZ2V0cyBAICVwLCBzej0lZFxuIiwgaGQtPlRhcmdldHMsIHN6KSk7CisJICAiICB2ZGV2IEAgJXAsIHN6PSVkXG4iLCBoZC0+VGFyZ2V0cywgc3opKTsKIAogCS8qIENsZWFyIHRoZSBUTSBmbGFncwogCSAqLwpAQCAtMzMwLDEzICszMzYsMTMgQEAKIAlpZihlcnJvcikgewogCQlkcHJpbnRrKChLRVJOX0VSUiBNWU5BTQogCQkgICJzY3NpX2FkZF9ob3N0IGZhaWxlZFxuIikpOwotCQlnb3RvIG1wdGZjX3Byb2JlX2ZhaWxlZDsKKwkJZ290byBvdXRfbXB0ZmNfcHJvYmU7CiAJfQogCiAJc2NzaV9zY2FuX2hvc3Qoc2gpOwogCXJldHVybiAwOwogCi1tcHRmY19wcm9iZV9mYWlsZWQ6CitvdXRfbXB0ZmNfcHJvYmU6CiAKIAltcHRzY3NpaF9yZW1vdmUocGRldik7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKaW5kZXggZTBhOGJiOC4uMTdlOTc1N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpAQCAtMjI4LDMxICsyMjgsMzUgQEAKICAqIGltcGxlbWVudCAtPnRhcmdldF9hbGxvYy4KICAqLwogc3RhdGljIGludAotbXB0c2FzX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQorbXB0c2FzX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0ID0gZGV2aWNlLT5ob3N0OworCXN0cnVjdCBTY3NpX0hvc3QJKmhvc3QgPSBzZGV2LT5ob3N0OwogCU1QVF9TQ1NJX0hPU1QJCSpoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IHNhc19ycGh5CQkqcnBoeTsKIAlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvCSpwOworCVZpcnRUYXJnZXQJCSp2dGFyZ2V0OwogCVZpcnREZXZpY2UJCSp2ZGV2OwotCXVpbnQJCQl0YXJnZXQgPSBkZXZpY2UtPmlkOworCXN0cnVjdCBzY3NpX3RhcmdldCAJKnN0YXJnZXQ7CiAJaW50IGk7CiAKLQlpZiAoKHZkZXYgPSBoZC0+VGFyZ2V0c1t0YXJnZXRdKSAhPSBOVUxMKQotCQlnb3RvIG91dDsKLQogCXZkZXYgPSBrbWFsbG9jKHNpemVvZihWaXJ0RGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2ZGV2KSB7CiAJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgInNsYXZlX2FsbG9jIGttYWxsb2MoJXpkKSBGQUlMRUQhXG4iLAogCQkJCWhkLT5pb2MtPm5hbWUsIHNpemVvZihWaXJ0RGV2aWNlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQogCW1lbXNldCh2ZGV2LCAwLCBzaXplb2YoVmlydERldmljZSkpOwotCXZkZXYtPnRmbGFncyA9IE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVN8TVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZOwogCXZkZXYtPmlvY19pZCA9IGhkLT5pb2MtPmlkOworCXNkZXYtPmhvc3RkYXRhID0gdmRldjsKKwlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisJdnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOworCXZkZXYtPnZ0YXJnZXQgPSB2dGFyZ2V0OworCWlmICh2dGFyZ2V0LT5udW1fbHVucyA9PSAwKSB7CisJCXZ0YXJnZXQtPnRmbGFncyA9IE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVN8TVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZOworCQloZC0+VGFyZ2V0c1tzZGV2LT5pZF0gPSB2dGFyZ2V0OworCX0KIAotCXJwaHkgPSBkZXZfdG9fcnBoeShkZXZpY2UtPnNkZXZfdGFyZ2V0LT5kZXYucGFyZW50KTsKKwlycGh5ID0gZGV2X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQtPmRldi5wYXJlbnQpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmhkLT5pb2MtPnNhc190b3BvbG9neSwgbGlzdCkgewogCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX3BoeXM7IGkrKykgewogCQkJaWYgKHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnNhc19hZGRyZXNzID09CkBAIC0yNjAsNyArMjY0LDcgQEAKIAkJCQl2ZGV2LT50YXJnZXRfaWQgPQogCQkJCQlwLT5waHlfaW5mb1tpXS5hdHRhY2hlZC50YXJnZXQ7CiAJCQkJdmRldi0+YnVzX2lkID0gcC0+cGh5X2luZm9baV0uYXR0YWNoZWQuYnVzOwotCQkJCWhkLT5UYXJnZXRzW2RldmljZS0+aWRdID0gdmRldjsKKwkJCQl2ZGV2LT5sdW4gPSBzZGV2LT5sdW47CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KQEAgLTI3MSwxOSArMjc1LDI0IEBACiAJcmV0dXJuIC1FTk9ERVY7CiAKICBvdXQ6Ci0JdmRldi0+bnVtX2x1bnMrKzsKLQlkZXZpY2UtPmhvc3RkYXRhID0gdmRldjsKKwl2dGFyZ2V0LT5pb2NfaWQgPSB2ZGV2LT5pb2NfaWQ7CisJdnRhcmdldC0+dGFyZ2V0X2lkID0gdmRldi0+dGFyZ2V0X2lkOworCXZ0YXJnZXQtPmJ1c19pZCA9IHZkZXYtPmJ1c19pZDsKKwl2dGFyZ2V0LT5udW1fbHVucysrOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtcHRzYXNfZHJpdmVyX3RlbXBsYXRlID0geworCS5tb2R1bGUJCQkJPSBUSElTX01PRFVMRSwKIAkucHJvY19uYW1lCQkJPSAibXB0c2FzIiwKIAkucHJvY19pbmZvCQkJPSBtcHRzY3NpaF9wcm9jX2luZm8sCiAJLm5hbWUJCQkJPSAiTVBUIFNQSSBIb3N0IiwKIAkuaW5mbwkJCQk9IG1wdHNjc2loX2luZm8sCiAJLnF1ZXVlY29tbWFuZAkJCT0gbXB0c2NzaWhfcWNtZCwKKwkudGFyZ2V0X2FsbG9jCQkJPSBtcHRzY3NpaF90YXJnZXRfYWxsb2MsCiAJLnNsYXZlX2FsbG9jCQkJPSBtcHRzYXNfc2xhdmVfYWxsb2MsCiAJLnNsYXZlX2NvbmZpZ3VyZQkJPSBtcHRzY3NpaF9zbGF2ZV9jb25maWd1cmUsCisJLnRhcmdldF9kZXN0cm95CQkJPSBtcHRzY3NpaF90YXJnZXRfZGVzdHJveSwKIAkuc2xhdmVfZGVzdHJveQkJCT0gbXB0c2NzaWhfc2xhdmVfZGVzdHJveSwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoIAkJPSBtcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmVoX2Fib3J0X2hhbmRsZXIJCT0gbXB0c2NzaWhfYWJvcnQsCkBAIC05ODYsNyArOTk1LDYgQEAKIAkJZ290byBvdXRfZnJlZV9wb3J0X2luZm87CiAKIAlsaXN0X2FkZF90YWlsKCZwb3J0X2luZm8tPmxpc3QsICZpb2MtPnNhc190b3BvbG9neSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrKSB7CiAJCW1wdHNhc19zYXNfcGh5X3BnMChpb2MsICZwb3J0X2luZm8tPnBoeV9pbmZvW2ldLAogCQkJKE1QSV9TQVNfUEhZX1BHQURfRk9STV9QSFlfTlVNQkVSIDw8CkBAIC0xMTMzLDEzICsxMTQxLDE1IEBACiAJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCiAJCSAgIlNraXBwaW5nIGJlY2F1c2UgaXQncyBub3Qgb3BlcmF0aW9uYWwhXG4iLAogCQkgIGlvYy0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X21wdHNhc19wcm9iZTsKIAl9CiAKIAlpZiAoIWlvYy0+YWN0aXZlKSB7CiAJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJTa2lwcGluZyBiZWNhdXNlIGl0J3MgZGlzYWJsZWQhXG4iLAogCQkgIGlvYy0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X21wdHNhc19wcm9iZTsKIAl9CiAKIAkvKiAgU2FuaXR5IGNoZWNrIC0gZW5zdXJlIGF0IGxlYXN0IDEgcG9ydCBpcyBJTklUSUFUT1IgY2FwYWJsZQpAQCAtMTE2Myw3ICsxMTczLDggQEAKIAkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIFNDU0kgc3Vic3lzdGVtXG4iLAogCQkJaW9jLT5uYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisJCWVycm9yID0gLTE7CisJCWdvdG8gb3V0X21wdHNhc19wcm9iZTsKICAgICAgICAgfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+RnJlZVFsb2NrLCBmbGFncyk7CkBAIC0xMjM3LDcgKzEyNDgsNyBAQAogCW1lbSA9IGttYWxsb2Moc3osIEdGUF9BVE9NSUMpOwogCWlmIChtZW0gPT0gTlVMTCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gbXB0c2FzX3Byb2JlX2ZhaWxlZDsKKwkJZ290byBvdXRfbXB0c2FzX3Byb2JlOwogCX0KIAogCW1lbXNldChtZW0sIDAsIHN6KTsKQEAgLTEyNTUsMTQgKzEyNjYsMTQgQEAKIAltZW0gPSBrbWFsbG9jKHN6LCBHRlBfQVRPTUlDKTsKIAlpZiAobWVtID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIG1wdHNhc19wcm9iZV9mYWlsZWQ7CisJCWdvdG8gb3V0X21wdHNhc19wcm9iZTsKIAl9CiAKIAltZW1zZXQobWVtLCAwLCBzeik7Ci0JaGQtPlRhcmdldHMgPSAoVmlydERldmljZSAqKikgbWVtOworCWhkLT5UYXJnZXRzID0gKFZpcnRUYXJnZXQgKiopIG1lbTsKIAogCWRwcmludGsoKEtFUk5fSU5GTwotCSAgIiAgVGFyZ2V0cyBAICVwLCBzej0lZFxuIiwgaGQtPlRhcmdldHMsIHN6KSk7CisJICAiICB2dGFyZ2V0IEAgJXAsIHN6PSVkXG4iLCBoZC0+VGFyZ2V0cywgc3opKTsKIAogCS8qIENsZWFyIHRoZSBUTSBmbGFncwogCSAqLwpAQCAtMTMwOCwxNCArMTMxOSwxNCBAQAogCWlmIChlcnJvcikgewogCQlkcHJpbnRrKChLRVJOX0VSUiBNWU5BTQogCQkgICJzY3NpX2FkZF9ob3N0IGZhaWxlZFxuIikpOwotCQlnb3RvIG1wdHNhc19wcm9iZV9mYWlsZWQ7CisJCWdvdG8gb3V0X21wdHNhc19wcm9iZTsKIAl9CiAKIAltcHRzYXNfc2Nhbl9zYXNfdG9wb2xvZ3koaW9jKTsKIAogCXJldHVybiAwOwogCi1tcHRzYXNfcHJvYmVfZmFpbGVkOgorb3V0X21wdHNhc19wcm9iZToKIAogCW1wdHNjc2loX3JlbW92ZShwZGV2KTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggYjdiOTg0Ni4uOTNhMTZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtMTUwLDI4ICsxNTAsMjkgQEAKIGludAkJbXB0c2NzaWhfaW9jX3Jlc2V0KE1QVF9BREFQVEVSICppb2MsIGludCBwb3N0X3Jlc2V0KTsKIGludAkJbXB0c2NzaWhfZXZlbnRfcHJvY2VzcyhNUFRfQURBUFRFUiAqaW9jLCBFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKnBFdlJlcGx5KTsKIAotc3RhdGljIHZvaWQJbXB0c2NzaWhfaW5pdFRhcmdldChNUFRfU0NTSV9IT1NUICpoZCwgaW50IGJ1c19pZCwgaW50IHRhcmdldF9pZCwgdTggbHVuLCBjaGFyICpkYXRhLCBpbnQgZGxlbik7Ci1zdGF0aWMgdm9pZAltcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnREZXZpY2UgKnRhcmdldCwgY2hhciBieXRlNTYpOwotc3RhdGljIHZvaWQJbXB0c2NzaWhfc2V0X2R2ZmxhZ3MoTVBUX1NDU0lfSE9TVCAqaGQsIFNDU0lJT1JlcXVlc3RfdCAqcFJlcSk7CitzdGF0aWMgdm9pZAltcHRzY3NpaF9pbml0VGFyZ2V0KE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0VGFyZ2V0ICp2dGFyZ2V0LCB1OCBsdW4sIGNoYXIgKmRhdGEsIGludCBkbGVuKTsKK3N0YXRpYyB2b2lkCW1wdHNjc2loX3NldFRhcmdldE5lZ29QYXJtcyhNUFRfU0NTSV9IT1NUICpoZCwgVmlydFRhcmdldCAqdnRhcmdldCwgY2hhciBieXRlNTYpOwogc3RhdGljIHZvaWQJbXB0c2NzaWhfc2V0RGV2aWNlUGFnZTFGbGFncyAodTggd2lkdGgsIHU4IGZhY3RvciwgdTggb2Zmc2V0LCBpbnQgKnJlcXVlc3RlZFB0ciwgaW50ICpjb25maWd1cmF0aW9uUHRyLCB1OCBmbGFncyk7Ci1zdGF0aWMgdm9pZAltcHRzY3NpaF9ub19uZWdvdGlhdGUoTVBUX1NDU0lfSE9TVCAqaGQsIGludCB0YXJnZXRfaWQpOworc3RhdGljIHZvaWQJbXB0c2NzaWhfbm9fbmVnb3RpYXRlKE1QVF9TQ1NJX0hPU1QgKmhkLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CiBzdGF0aWMgaW50CW1wdHNjc2loX3dyaXRlU0RQMShNUFRfU0NTSV9IT1NUICpoZCwgaW50IHBvcnRudW0sIGludCB0YXJnZXQsIGludCBmbGFncyk7CiBzdGF0aWMgaW50CW1wdHNjc2loX3dyaXRlSU9DUGFnZTQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCB0YXJnZXRfaWQsIGludCBidXMpOwogaW50CQltcHRzY3NpaF9zY2FuZHZfY29tcGxldGUoTVBUX0FEQVBURVIgKmlvYywgTVBUX0ZSQU1FX0hEUiAqbWYsIE1QVF9GUkFNRV9IRFIgKnIpOwogc3RhdGljIGludAltcHRzY3NpaF9kb19jbWQoTVBUX1NDU0lfSE9TVCAqaGQsIElOVEVSTkFMX0NNRCAqaW9jbWQpOwotc3RhdGljIGludAltcHRzY3NpaF9zeW5jaHJvbml6ZV9jYWNoZShNUFRfU0NTSV9IT1NUICpoZCwgaW50IHBvcnRudW0pOworc3RhdGljIHZvaWQJbXB0c2NzaWhfc3luY2hyb25pemVfY2FjaGUoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnREZXZpY2UgKnZkZXZpY2UpOworc3RhdGljIHZvaWQJbXB0c2NzaWhfbmVnb3RpYXRlX3RvX2FzeW5fbmFycm93KE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0VGFyZ2V0ICp2dGFyZ2V0KTsKK3N0YXRpYyBpbnQJbXB0c2NzaWhfaXNfcGh5c19kaXNrKE1QVF9BREFQVEVSICppb2MsIGludCBpZCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgICBtcHRzY3NpaF9wZXJzaXN0VGFzazsKIAogI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgogc3RhdGljIGludAltcHRzY3NpaF9kb19yYWlkKE1QVF9TQ1NJX0hPU1QgKmhkLCB1OCBhY3Rpb24sIElOVEVSTkFMX0NNRCAqaW8pOwogc3RhdGljIHZvaWQJbXB0c2NzaWhfZG9tYWluVmFsaWRhdGlvbih2b2lkICpoZCk7Ci1zdGF0aWMgaW50CW1wdHNjc2loX2lzX3BoeXNfZGlzayhNUFRfQURBUFRFUiAqaW9jLCBpbnQgaWQpOwogc3RhdGljIHZvaWQJbXB0c2NzaWhfcWFzX2NoZWNrKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgaWQpOwogc3RhdGljIGludAltcHRzY3NpaF9kb0R2KE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgY2hhbm5lbCwgaW50IHRhcmdldCk7CiBzdGF0aWMgdm9pZAltcHRzY3NpaF9kdl9wYXJtcyhNUFRfU0NTSV9IT1NUICpoZCwgRFZQQVJBTUVURVJTICpkdix2b2lkICpwUGFnZSk7CiBzdGF0aWMgdm9pZAltcHRzY3NpaF9maWxsYnVmKGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsIGludCBpbmRleCwgaW50IHdpZHRoKTsKIHN0YXRpYyB2b2lkCW1wdHNjc2loX3NldF9kdmZsYWdzX3JhaWQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBpZCk7CitzdGF0aWMgdm9pZAltcHRzY3NpaF9zZXRfZHZmbGFncyhNUFRfU0NTSV9IT1NUICpoZCwgc3RydWN0IHNjc2lfY21uZCAqc2MpOwogI2VuZGlmCiAKIHZvaWQgCQltcHRzY3NpaF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKik7CkBAIC02MjcsNyArNjI4LDcgQEAKIAkJZHJlcGx5cHJpbnRrKChLRVJOX05PVElDRSAiUmVwbHkgaGE9JWQgaWQ9JWQgbHVuPSVkOlxuIgogCQkJIklPQ1N0YXR1cz0lMDR4aCBTQ1NJU3RhdGU9JTAyeGggU0NTSVN0YXR1cz0lMDJ4aFxuIgogCQkJInJlc2lkPSVkIGJ1ZmZsZW49JWQgeGZlcl9jbnQ9JWRcbiIsCi0JCQlpb2MtPmlkLCBwU2NzaVJlcS0+VGFyZ2V0SUQsIHBTY3NpUmVxLT5MVU5bMV0sCisJCQlpb2MtPmlkLCBzYy0+ZGV2aWNlLT5pZCwgc2MtPmRldmljZS0+bHVuLAogCQkJc3RhdHVzLCBzY3NpX3N0YXRlLCBzY3NpX3N0YXR1cywgc2MtPnJlc2lkLAogCQkJc2MtPnJlcXVlc3RfYnVmZmxlbiwgeGZlcl9jbnQpKTsKIApAQCAtNjQxLDcgKzY0Miw3IEBACiAJCSAgICBwU2NzaVJlcGx5LT5SZXNwb25zZUluZm8pIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiaGE9JWQgaWQ9JWQgbHVuPSVkOiAiCiAJCQkiRkNQX1Jlc3BvbnNlSW5mbz0lMDh4aFxuIiwKLQkJCWlvYy0+aWQsIHBTY3NpUmVxLT5UYXJnZXRJRCwgcFNjc2lSZXEtPkxVTlsxXSwKKwkJCWlvYy0+aWQsIHNjLT5kZXZpY2UtPmlkLCBzYy0+ZGV2aWNlLT5sdW4sCiAJCQlsZTMyX3RvX2NwdShwU2NzaVJlcGx5LT5SZXNwb25zZUluZm8pKTsKIAkJfQogCkBAIC02NzcsOCArNjc4LDggQEAKIAkJCXNjLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CiAKIAkJCS8qIEdFTSBXb3JrYXJvdW5kLiAqLwotCQkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkKLQkJCQltcHRzY3NpaF9ub19uZWdvdGlhdGUoaGQsIHNjLT5kZXZpY2UtPmlkKTsKKwkJCWlmIChpb2MtPmJ1c190eXBlID09IFNQSSkKKwkJCQltcHRzY3NpaF9ub19uZWdvdGlhdGUoaGQsIHNjKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19TQ1NJX1JFU0lEVUFMX01JU01BVENIOgkvKiAweDAwNDkgKi8KQEAgLTg5MiwxNiArODkzLDE1IEBACiAgKgkJd2hlbiBhIGx1biBpcyBkaXNhYmxlIGJ5IG1pZC1sYXllci4KICAqCQlEbyBOT1QgYWNjZXNzIHRoZSByZWZlcmVuY2VkIHNjc2lfY21uZCBzdHJ1Y3R1cmUgb3IKICAqCQltZW1iZXJzLiBXaWxsIGNhdXNlIGVpdGhlciBhIHBhZ2luZyBvciBOVUxMIHB0ciBlcnJvci4KLSAqCUBoZDogUG9pbnRlciB0byBhIFNDU0kgSE9TVCBzdHJ1Y3R1cmUKLSAqCUB0YXJnZXQ6IHRhcmdldCBpZAotICoJQGx1bjogbHVuCisgKiAgICAgIEBoZDogUG9pbnRlciB0byBhIFNDU0kgSE9TVCBzdHJ1Y3R1cmUKKyAqCUB2ZGV2aWNlOiBwZXIgZGV2aWNlIHByaXZhdGUgZGF0YQogICoKICAqCVJldHVybnM6IE5vbmUuCiAgKgogICoJQ2FsbGVkIGZyb20gc2xhdmVfZGVzdHJveS4KICAqLwogc3RhdGljIHZvaWQKLW1wdHNjc2loX3NlYXJjaF9ydW5uaW5nX2NtZHMoTVBUX1NDU0lfSE9TVCAqaGQsIHVpbnQgdGFyZ2V0LCB1aW50IGx1bikKK21wdHNjc2loX3NlYXJjaF9ydW5uaW5nX2NtZHMoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnREZXZpY2UgKnZkZXZpY2UpCiB7CiAJU0NTSUlPUmVxdWVzdF90CSptZiA9IE5VTEw7CiAJaW50CQkgaWk7CkBAIC05MDksNyArOTA5LDcgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzYzsKIAogCWRzcHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogc2VhcmNoX3J1bm5pbmcgdGFyZ2V0ICVkIGx1biAlZCBtYXggJWRcbiIsCi0JCQl0YXJnZXQsIGx1biwgbWF4KSk7CisJCQl2ZGV2aWNlLT50YXJnZXRfaWQsIHZkZXZpY2UtPmx1biwgbWF4KSk7CiAKIAlmb3IgKGlpPTA7IGlpIDwgbWF4OyBpaSsrKSB7CiAJCWlmICgoc2MgPSBoZC0+U2NzaUxvb2t1cFtpaV0pICE9IE5VTEwpIHsKQEAgLTkxOSw3ICs5MTksNyBAQAogCQkJZHNwcmludGsoKCAic2VhcmNoX3J1bm5pbmc6IGZvdW5kIChzYz0lcCwgbWYgPSAlcCkgdGFyZ2V0ICVkLCBsdW4gJWQgXG4iLAogCQkJCQloZC0+U2NzaUxvb2t1cFtpaV0sIG1mLCBtZi0+VGFyZ2V0SUQsIG1mLT5MVU5bMV0pKTsKIAotCQkJaWYgKChtZi0+VGFyZ2V0SUQgIT0gKCh1OCl0YXJnZXQpKSB8fCAobWYtPkxVTlsxXSAhPSAoKHU4KSBsdW4pKSkKKwkJCWlmICgobWYtPlRhcmdldElEICE9ICgodTgpdmRldmljZS0+dGFyZ2V0X2lkKSkgfHwgKG1mLT5MVU5bMV0gIT0gKCh1OCkgdmRldmljZS0+bHVuKSkpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIENsZWFudXAKQEAgLTk5Myw4ICs5OTMsMTAgQEAKIAlNUFRfQURBUFRFUiAJCSppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IFNjc2lfSG9zdCAJKmhvc3QgPSBpb2MtPnNoOwogCU1QVF9TQ1NJX0hPU1QJCSpoZDsKKyNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KIAlpbnQgCQkgCWNvdW50OwogCXVuc2lnbmVkIGxvbmcJIAlmbGFnczsKKyNlbmRpZgkKIAlpbnQgc3oxOwogCiAJaWYoIWhvc3QpIHsKQEAgLTEwNzUsMTEgKzEwNzcsNiBAQAogCiAJaGQgPSAoTVBUX1NDU0lfSE9TVCAqKWhvc3QtPmhvc3RkYXRhOwogCi0JLyogRmx1c2ggdGhlIGNhY2hlIG9mIHRoaXMgYWRhcHRlcgotCSAqLwotCWlmKGhkICE9IE5VTEwpCi0JCW1wdHNjc2loX3N5bmNocm9uaXplX2NhY2hlKGhkLCAwKTsKLQogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xMjg2LDcgKzEyODMsNyBAQAogCU1QVF9TQ1NJX0hPU1QJCSpoZDsKIAlNUFRfRlJBTUVfSERSCQkqbWY7CiAJU0NTSUlPUmVxdWVzdF90CQkqcFNjc2lSZXE7Ci0JVmlydERldmljZQkJKnBUYXJnZXQgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlWaXJ0RGV2aWNlCQkqdmRldiA9IFNDcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCWludAkgbHVuOwogCXUzMgkgZGF0YWxlbjsKIAl1MzIJIHNjc2ljdGw7CkBAIC0xMzQxLDggKzEzMzgsOCBAQAogCS8qIERlZmF1bHQgdG8gdW50YWdnZWQuIE9uY2UgYSB0YXJnZXQgc3RydWN0dXJlIGhhcyBiZWVuIGFsbG9jYXRlZCwKIAkgKiB1c2UgdGhlIElucXVpcnkgZGF0YSB0byBkZXRlcm1pbmUgaWYgZGV2aWNlIHN1cHBvcnRzIHRhZ2dlZC4KIAkgKi8KLQlpZiAocFRhcmdldAotCSAgICAmJiAocFRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19RX1lFUykKKwlpZiAodmRldgorCSAgICAmJiAodmRldi0+dnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19RX1lFUykKIAkgICAgJiYgKFNDcG50LT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpKSB7CiAJCXNjc2ljdGwgPSBzY3NpZGlyIHwgTVBJX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CiAJfSBlbHNlIHsKQEAgLTEzNTEsOCArMTM0OCw4IEBACiAKIAkvKiBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgbWVzc2FnZSBmcmFtZQogCSAqLwotCXBTY3NpUmVxLT5UYXJnZXRJRCA9ICh1OCkgcFRhcmdldC0+dGFyZ2V0X2lkOwotCXBTY3NpUmVxLT5CdXMgPSBwVGFyZ2V0LT5idXNfaWQ7CisJcFNjc2lSZXEtPlRhcmdldElEID0gKHU4KSB2ZGV2LT50YXJnZXRfaWQ7CisJcFNjc2lSZXEtPkJ1cyA9IHZkZXYtPmJ1c19pZDsKIAlwU2NzaVJlcS0+Q2hhaW5PZmZzZXQgPSAwOwogCXBTY3NpUmVxLT5GdW5jdGlvbiA9IE1QSV9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q7CiAJcFNjc2lSZXEtPkNEQkxlbmd0aCA9IFNDcG50LT5jbWRfbGVuOwpAQCAtMTQwMyw4ICsxNDAwLDggQEAKIAlTQ3BudC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAKICNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KLQlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpbnQgZHZTdGF0dXMgPSBoZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1twVGFyZ2V0LT50YXJnZXRfaWRdOworCWlmIChoZC0+aW9jLT5idXNfdHlwZSA9PSBTUEkpIHsKKwkJaW50IGR2U3RhdHVzID0gaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbdmRldi0+dGFyZ2V0X2lkXTsKIAkJaW50IGlzc3VlQ21kID0gMTsKIAogCQlpZiAoZHZTdGF0dXMgfHwgaGQtPmlvYy0+c3BpX2RhdGEuZm9yY2VEdikgewpAQCAtMTQzNyw3ICsxNDM0LDcgQEAKIAkJCS8qIFNldCB0aGUgRFYgZmxhZ3MuCiAJCQkgKi8KIAkJCWlmIChkdlN0YXR1cyAmIE1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FKQotCQkJCW1wdHNjc2loX3NldF9kdmZsYWdzKGhkLCBwU2NzaVJlcSk7CisJCQkJbXB0c2NzaWhfc2V0X2R2ZmxhZ3MoaGQsIFNDcG50KTsKIAogCQkJaWYgKCFpc3N1ZUNtZCkKIAkJCQlnb3RvIGZhaWw7CkBAIC0xNzQxLDYgKzE3MzgsNyBAQAogCXUzMgkJIGN0eDJhYm9ydDsKIAlpbnQJCSBzY3BudF9pZHg7CiAJaW50CQkgcmV0dmFsOworCVZpcnREZXZpY2UJICp2ZGV2OwogCiAJLyogSWYgd2UgY2FuJ3QgbG9jYXRlIG91ciBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLCByZXR1cm4gRkFJTEVEIHN0YXR1cy4KIAkgKi8KQEAgLTE3OTAsOCArMTc4OCw5IEBACiAKIAloZC0+YWJvcnRTQ3BudCA9IFNDcG50OwogCisJdmRldiA9IFNDcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCXJldHZhbCA9IG1wdHNjc2loX1RNSGFuZGxlcihoZCwgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLAotCQlTQ3BudC0+ZGV2aWNlLT5jaGFubmVsLCBTQ3BudC0+ZGV2aWNlLT5pZCwgU0NwbnQtPmRldmljZS0+bHVuLAorCQl2ZGV2LT5idXNfaWQsIHZkZXYtPnRhcmdldF9pZCwgdmRldi0+bHVuLAogCQljdHgyYWJvcnQsIDIgLyogMiBzZWNvbmQgdGltZW91dCAqLyk7CiAKIAlwcmludGsgKEtFUk5fV0FSTklORyBNWU5BTSAiOiAlczogdGFzayBhYm9ydDogJXMgKHNjPSVwKVxuIiwKQEAgLTE4MjIsNiArMTgyMSw3IEBACiB7CiAJTVBUX1NDU0lfSE9TVAkqaGQ7CiAJaW50CQkgcmV0dmFsOworCVZpcnREZXZpY2UJICp2ZGV2OwogCiAJLyogSWYgd2UgY2FuJ3QgbG9jYXRlIG91ciBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLCByZXR1cm4gRkFJTEVEIHN0YXR1cy4KIAkgKi8KQEAgLTE4MzksOCArMTgzOSw5IEBACiAJICAgICAgIGhkLT5pb2MtPm5hbWUsIFNDcG50KTsKIAlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwogCisJdmRldiA9IFNDcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCXJldHZhbCA9IG1wdHNjc2loX1RNSGFuZGxlcihoZCwgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQsCi0JCVNDcG50LT5kZXZpY2UtPmNoYW5uZWwsIFNDcG50LT5kZXZpY2UtPmlkLAorCQl2ZGV2LT5idXNfaWQsIHZkZXYtPnRhcmdldF9pZCwKIAkJMCwgMCwgNSAvKiA1IHNlY29uZCB0aW1lb3V0ICovKTsKIAogCXByaW50ayAoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiB0YXJnZXQgcmVzZXQ6ICVzIChzYz0lcClcbiIsCkBAIC0xODcxLDYgKzE4NzIsNyBAQAogewogCU1QVF9TQ1NJX0hPU1QJKmhkOwogCWludAkJIHJldHZhbDsKKwlWaXJ0RGV2aWNlCSAqdmRldjsKIAogCS8qIElmIHdlIGNhbid0IGxvY2F0ZSBvdXIgaG9zdCBhZGFwdGVyIHN0cnVjdHVyZSwgcmV0dXJuIEZBSUxFRCBzdGF0dXMuCiAJICovCkBAIC0xODg4LDggKzE4OTAsOSBAQAogCWlmIChoZC0+dGltZW91dHMgPCAtMSkKIAkJaGQtPnRpbWVvdXRzKys7CiAKKwl2ZGV2ID0gU0NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAJcmV0dmFsID0gbXB0c2NzaWhfVE1IYW5kbGVyKGhkLCBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1JFU0VUX0JVUywKLQkJU0NwbnQtPmRldmljZS0+Y2hhbm5lbCwgMCwgMCwgMCwgNSAvKiA1IHNlY29uZCB0aW1lb3V0ICovKTsKKwkJdmRldi0+YnVzX2lkLCAwLCAwLCAwLCA1IC8qIDUgc2Vjb25kIHRpbWVvdXQgKi8pOwogCiAJcHJpbnRrIChLRVJOX1dBUk5JTkcgTVlOQU0gIjogJXM6IGJ1cyByZXNldDogJXMgKHNjPSVwKVxuIiwKIAkJaGQtPmlvYy0+bmFtZSwKQEAgLTIxNTEsMjMgKzIxNTQsMzYgQEAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCiAgKglPUyBlbnRyeSBwb2ludCB0byBhbGxvdyBob3N0IGRyaXZlciB0byBhbGxvYyBtZW1vcnkKLSAqCWZvciBlYWNoIHNjc2kgZGV2aWNlLiBDYWxsZWQgb25jZSBwZXIgZGV2aWNlIHRoZSBidXMgc2Nhbi4KKyAqCWZvciBlYWNoIHNjc2kgdGFyZ2V0LiBDYWxsZWQgb25jZSBwZXIgZGV2aWNlIHRoZSBidXMgc2Nhbi4KICAqCVJldHVybiBub24temVybyBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICoJSW5pdCBtZW1vcnkgb25jZSBwZXIgaWQgKG5vdCBMVU4pLgogICovCiBpbnQKLW1wdHNjc2loX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQorbXB0c2NzaWhfdGFyZ2V0X2FsbG9jKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0ID0gZGV2aWNlLT5ob3N0OworCVZpcnRUYXJnZXQJCSp2dGFyZ2V0OworCisJdnRhcmdldCA9IGttYWxsb2Moc2l6ZW9mKFZpcnRUYXJnZXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZ0YXJnZXQpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCh2dGFyZ2V0LCAwLCBzaXplb2YoVmlydFRhcmdldCkpOworCXN0YXJnZXQtPmhvc3RkYXRhID0gdnRhcmdldDsKKwlyZXR1cm4gMDsKK30KKworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworLyoKKyAqCU9TIGVudHJ5IHBvaW50IHRvIGFsbG93IGhvc3QgZHJpdmVyIHRvIGFsbG9jIG1lbW9yeQorICoJZm9yIGVhY2ggc2NzaSBkZXZpY2UuIENhbGxlZCBvbmNlIHBlciBkZXZpY2UgdGhlIGJ1cyBzY2FuLgorICoJUmV0dXJuIG5vbi16ZXJvIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgKi8KK2ludAorbXB0c2NzaWhfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QJKmhvc3QgPSBzZGV2LT5ob3N0OwogCU1QVF9TQ1NJX0hPU1QJCSpoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGE7CisJVmlydFRhcmdldAkJKnZ0YXJnZXQ7CiAJVmlydERldmljZQkJKnZkZXY7Ci0JdWludAkJCXRhcmdldCA9IGRldmljZS0+aWQ7Ci0KLQlpZiAoaGQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKHZkZXYgPSBoZC0+VGFyZ2V0c1t0YXJnZXRdKSAhPSBOVUxMKQotCQlnb3RvIG91dDsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgCSpzdGFyZ2V0OwogCiAJdmRldiA9IGttYWxsb2Moc2l6ZW9mKFZpcnREZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZkZXYpIHsKQEAgLTIxNzcsMjUgKzIxOTMsMzMgQEAKIAl9CiAKIAltZW1zZXQodmRldiwgMCwgc2l6ZW9mKFZpcnREZXZpY2UpKTsKLQl2ZGV2LT50ZmxhZ3MgPSBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTOwogCXZkZXYtPmlvY19pZCA9IGhkLT5pb2MtPmlkOwotCXZkZXYtPnRhcmdldF9pZCA9IGRldmljZS0+aWQ7Ci0JdmRldi0+YnVzX2lkID0gZGV2aWNlLT5jaGFubmVsOwotCXZkZXYtPnJhaWRWb2x1bWUgPSAwOwotCWhkLT5UYXJnZXRzW2RldmljZS0+aWRdID0gdmRldjsKLQlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpZiAoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IGRldmljZS0+aWQpKSB7Ci0JCQl2ZGV2LT5yYWlkVm9sdW1lID0gMTsKLQkJCWRkdnRwcmludGsoKEtFUk5fSU5GTwotCQkJICAgICJSQUlEIFZvbHVtZSBAIGlkICVkXG4iLCBkZXZpY2UtPmlkKSk7Ci0JCX0KLQl9IGVsc2UgewotCQl2ZGV2LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZOwotCX0KKwl2ZGV2LT50YXJnZXRfaWQgPSBzZGV2LT5pZDsKKwl2ZGV2LT5idXNfaWQgPSBzZGV2LT5jaGFubmVsOworCXZkZXYtPmx1biA9IHNkZXYtPmx1bjsKKwlzZGV2LT5ob3N0ZGF0YSA9IHZkZXY7CiAKLSBvdXQ6Ci0JdmRldi0+bnVtX2x1bnMrKzsKLQlkZXZpY2UtPmhvc3RkYXRhID0gdmRldjsKKwlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisJdnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOworCXZkZXYtPnZ0YXJnZXQgPSB2dGFyZ2V0OworCisJaWYgKHZ0YXJnZXQtPm51bV9sdW5zID09IDApIHsKKwkJaGQtPlRhcmdldHNbc2Rldi0+aWRdID0gdnRhcmdldDsKKwkJdnRhcmdldC0+aW9jX2lkID0gaGQtPmlvYy0+aWQ7CisJCXZ0YXJnZXQtPnRmbGFncyA9IE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVM7CisJCXZ0YXJnZXQtPnRhcmdldF9pZCA9IHNkZXYtPmlkOworCQl2dGFyZ2V0LT5idXNfaWQgPSBzZGV2LT5jaGFubmVsOworCQlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU1BJKSB7CisJCQlpZiAoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IHNkZXYtPmlkKSkgeworCQkJCXZ0YXJnZXQtPnJhaWRWb2x1bWUgPSAxOworCQkJCWRkdnRwcmludGsoKEtFUk5fSU5GTworCQkJCSAgICAiUkFJRCBWb2x1bWUgQCBpZCAlZFxuIiwgc2Rldi0+aWQpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXZ0YXJnZXQtPnRmbGFncyB8PSBNUFRfVEFSR0VUX0ZMQUdTX1ZBTElEX0lOUVVJUlk7CisJCX0KKwl9CisJdnRhcmdldC0+bnVtX2x1bnMrKzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIwNCw0MCArMjIyOCw1MiBAQAogICoJQ2FsbGVkIGlmIG5vIGRldmljZSBwcmVzZW50IG9yIGRldmljZSBiZWluZyB1bmxvYWRlZAogICovCiB2b2lkCi1tcHRzY3NpaF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQorbXB0c2NzaWhfdGFyZ2V0X2Rlc3Ryb3koc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewotCXN0cnVjdCBTY3NpX0hvc3QJKmhvc3QgPSBkZXZpY2UtPmhvc3Q7CisJaWYgKHN0YXJnZXQtPmhvc3RkYXRhKQorCQlrZnJlZShzdGFyZ2V0LT5ob3N0ZGF0YSk7CisJc3RhcmdldC0+aG9zdGRhdGEgPSBOVUxMOworfQorCisvKgorICoJT1MgZW50cnkgcG9pbnQgdG8gYWxsb3cgZm9yIGhvc3QgZHJpdmVyIHRvIGZyZWUgYWxsb2NhdGVkIG1lbW9yeQorICoJQ2FsbGVkIGlmIG5vIGRldmljZSBwcmVzZW50IG9yIGRldmljZSBiZWluZyB1bmxvYWRlZAorICovCit2b2lkCittcHRzY3NpaF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0ID0gc2Rldi0+aG9zdDsKIAlNUFRfU0NTSV9IT1NUCQkqaGQgPSAoTVBUX1NDU0lfSE9TVCAqKWhvc3QtPmhvc3RkYXRhOwotCVZpcnREZXZpY2UJCSp2ZGV2OwotCXVpbnQJCQl0YXJnZXQgPSBkZXZpY2UtPmlkOwotCXVpbnQJCQlsdW4gPSBkZXZpY2UtPmx1bjsKKwlWaXJ0VGFyZ2V0CQkqdnRhcmdldDsKKwlWaXJ0RGV2aWNlCQkqdmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgCSpzdGFyZ2V0OwogCi0JaWYgKGhkID09IE5VTEwpCi0JCXJldHVybjsKKwlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisJdnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOworCXZkZXZpY2UgPSBzZGV2LT5ob3N0ZGF0YTsKIAotCW1wdHNjc2loX3NlYXJjaF9ydW5uaW5nX2NtZHMoaGQsIHRhcmdldCwgbHVuKTsKLQotCXZkZXYgPSBoZC0+VGFyZ2V0c1t0YXJnZXRdOwotCXZkZXYtPmx1bnNbMF0gJj0gfigxIDw8IGx1bik7Ci0JaWYgKC0tdmRldi0+bnVtX2x1bnMpCi0JCXJldHVybjsKLQotCWtmcmVlKGhkLT5UYXJnZXRzW3RhcmdldF0pOwotCWhkLT5UYXJnZXRzW3RhcmdldF0gPSBOVUxMOwotCi0JaWYgKGhkLT5pb2MtPmJ1c190eXBlID09IFNDU0kpIHsKLQkJaWYgKG1wdHNjc2loX2lzX3BoeXNfZGlzayhoZC0+aW9jLCB0YXJnZXQpKSB7Ci0JCQloZC0+aW9jLT5zcGlfZGF0YS5mb3JjZUR2IHw9IE1QVF9TQ1NJQ0ZHX1JFTE9BRF9JT0NfUEczOwotCQl9IGVsc2UgewotCQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbdGFyZ2V0XSA9Ci0JCQkJTVBUX1NDU0lDRkdfTkVHT1RJQVRFOwotCi0JCQlpZiAoIWhkLT5uZWdvTnZyYW0pIHsKLQkJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1t0YXJnZXRdIHw9Ci0JCQkJCU1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FOworCW1wdHNjc2loX3NlYXJjaF9ydW5uaW5nX2NtZHMoaGQsIHZkZXZpY2UpOworCXZ0YXJnZXQtPmx1bnNbMF0gJj0gfigxIDw8IHZkZXZpY2UtPmx1bik7CisJdnRhcmdldC0+bnVtX2x1bnMtLTsKKwlpZiAodnRhcmdldC0+bnVtX2x1bnMgPT0gMCkgeworCQltcHRzY3NpaF9uZWdvdGlhdGVfdG9fYXN5bl9uYXJyb3coaGQsIHZ0YXJnZXQpOworCQlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU1BJKSB7CisJCQlpZiAobXB0c2NzaWhfaXNfcGh5c19kaXNrKGhkLT5pb2MsIHZ0YXJnZXQtPnRhcmdldF9pZCkpIHsKKwkJCQloZC0+aW9jLT5zcGlfZGF0YS5mb3JjZUR2IHw9IE1QVF9TQ1NJQ0ZHX1JFTE9BRF9JT0NfUEczOworCQkJfSBlbHNlIHsKKwkJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1t2dGFyZ2V0LT50YXJnZXRfaWRdID0KKwkJCQkJTVBUX1NDU0lDRkdfTkVHT1RJQVRFOworCQkJCWlmICghaGQtPm5lZ29OdnJhbSkgeworCQkJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1t2dGFyZ2V0LT50YXJnZXRfaWRdIHw9CisJCQkJCQlNUFRfU0NTSUNGR19EVl9OT1RfRE9ORTsKKwkJCQl9CiAJCQl9CiAJCX0KKwkJaGQtPlRhcmdldHNbc2Rldi0+aWRdID0gTlVMTDsKIAl9CisJbXB0c2NzaWhfc3luY2hyb25pemVfY2FjaGUoaGQsIHZkZXZpY2UpOworCWtmcmVlKHZkZXZpY2UpOworCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKIH0KIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtMjI1MSwyMiArMjI4NywyMSBAQAogaW50CiBtcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQogewotCU1QVF9TQ1NJX0hPU1QJKmhkID0gKE1QVF9TQ1NJX0hPU1QgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKLQlWaXJ0RGV2aWNlICpwVGFyZ2V0OwotCWludAltYXhfZGVwdGg7Ci0JaW50CXRhZ2dlZDsKKwlNUFRfU0NTSV9IT1NUCQkqaGQgPSAoTVBUX1NDU0lfSE9TVCAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOworCVZpcnRUYXJnZXQgCQkqdnRhcmdldDsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgCSpzdGFyZ2V0OworCWludAkJCW1heF9kZXB0aDsKKwlpbnQJCQl0YWdnZWQ7CiAKLQlpZiAoaGQgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JaWYgKCEocFRhcmdldCA9IGhkLT5UYXJnZXRzW3NkZXYtPmlkXSkpCi0JCXJldHVybiAwOworCXN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKKwl2dGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CiAKLQlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpZiAocFRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZKSB7Ci0JCQlpZiAoIShwVGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKSkKKwlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU1BJKSB7CisJCWlmICh2dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZBTElEX0lOUVVJUlkpIHsKKwkJCWlmICghKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVMpKQogCQkJCW1heF9kZXB0aCA9IDE7Ci0JCQllbHNlIGlmICgoKHBUYXJnZXQtPmlucV9kYXRhWzBdICYgMHgxZikgPT0gMHgwMCkgJiYKLQkJCSAgICAgICAgIChwVGFyZ2V0LT5taW5TeW5jRmFjdG9yIDw9IE1QVF9VTFRSQTE2MCApKQorCQkJZWxzZSBpZiAoKCh2dGFyZ2V0LT5pbnFfZGF0YVswXSAmIDB4MWYpID09IDB4MDApICYmCisJCQkgICAgICAgICAodnRhcmdldC0+bWluU3luY0ZhY3RvciA8PSBNUFRfVUxUUkExNjAgKSkKIAkJCQltYXhfZGVwdGggPSBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIOwogCQkJZWxzZQogCQkJCW1heF9kZXB0aCA9IE1QVF9TQ1NJX0NNRF9QRVJfREVWX0xPVzsKQEAgLTIyOTUsNjQgKzIzMzAsNTggQEAKICAqCVJldHVybiBub24temVybyBpZiBmYWlscy4KICAqLwogaW50Ci1tcHRzY3NpaF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UpCittcHRzY3NpaF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBTY3NpX0hvc3QJKnNoID0gZGV2aWNlLT5ob3N0OwotCVZpcnREZXZpY2UJCSpwVGFyZ2V0OworCXN0cnVjdCBTY3NpX0hvc3QJKnNoID0gc2Rldi0+aG9zdDsKKwlWaXJ0VGFyZ2V0CQkqdnRhcmdldDsKKwlWaXJ0RGV2aWNlCQkqdmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgCSpzdGFyZ2V0OwogCU1QVF9TQ1NJX0hPU1QJCSpoZCA9IChNUFRfU0NTSV9IT1NUICopc2gtPmhvc3RkYXRhOworCWludAkJCWluZGV4ZWRfbHVuLCBsdW5faW5kZXg7CiAKLQlpZiAoKGhkID09IE5VTEwpIHx8IChoZC0+VGFyZ2V0cyA9PSBOVUxMKSkgewotCQlyZXR1cm4gMDsKLQl9CisJc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOworCXZ0YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwl2ZGV2aWNlID0gc2Rldi0+aG9zdGRhdGE7CiAKIAlkc3ByaW50aygoTVlJT0Nfc19JTkZPX0ZNVAogCQkiZGV2aWNlIEAgJXAsIGlkPSVkLCBMVU49JWQsIGNoYW5uZWw9JWRcbiIsCi0JCWhkLT5pb2MtPm5hbWUsIGRldmljZSwgZGV2aWNlLT5pZCwgZGV2aWNlLT5sdW4sIGRldmljZS0+Y2hhbm5lbCkpOwotCWRzcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCi0JCSJzZHRyICVkIHdkdHIgJWQgcHByICVkIGlucSBsZW5ndGg9JWRcbiIsCi0JCWhkLT5pb2MtPm5hbWUsIGRldmljZS0+c2R0ciwgZGV2aWNlLT53ZHRyLAotCQlkZXZpY2UtPnBwciwgZGV2aWNlLT5pbnF1aXJ5X2xlbikpOworCQloZC0+aW9jLT5uYW1lLCBzZGV2LCBzZGV2LT5pZCwgc2Rldi0+bHVuLCBzZGV2LT5jaGFubmVsKSk7CisJaWYgKGhkLT5pb2MtPmJ1c190eXBlID09IFNQSSkKKwkJZHNwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQKKwkJICAgICJzZHRyICVkIHdkdHIgJWQgcHByICVkIGlucSBsZW5ndGg9JWRcbiIsCisJCSAgICBoZC0+aW9jLT5uYW1lLCBzZGV2LT5zZHRyLCBzZGV2LT53ZHRyLAorCQkgICAgc2Rldi0+cHByLCBzZGV2LT5pbnF1aXJ5X2xlbikpOwogCi0JaWYgKGRldmljZS0+aWQgPiBzaC0+bWF4X2lkKSB7CisJaWYgKHNkZXYtPmlkID4gc2gtPm1heF9pZCkgewogCQkvKiBlcnJvciBjYXNlLCBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldmljZSwgMCwgMSk7CisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIDEpOwogCQlnb3RvIHNsYXZlX2NvbmZpZ3VyZV9leGl0OwogCX0KIAotCXBUYXJnZXQgPSBoZC0+VGFyZ2V0c1tkZXZpY2UtPmlkXTsKLQotCWlmIChwVGFyZ2V0ID09IE5VTEwpIHsKLQkJLyogRHJpdmVyIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIGRldmljZS4KLQkJICogS2VybmVsIG1heSBnZW5lcmF0ZSBhICJEdW1teSBMdW4gMCIgd2hpY2gKLQkJICogbWF5IGJlY29tZSBhIHJlYWwgTHVuIGlmIGEKLQkJICogInNjc2kgYWRkLXNpbmdsZS1kZXZpY2UiIGNvbW1hbmQgaXMgZXhlY3V0ZWQKLQkJICogd2hpbGUgdGhlIGRyaXZlciBpcyBhY3RpdmUgKGhvdC1wbHVnIGEKLQkJICogZGV2aWNlKS4gIExTSSBSYWlkIGNvbnRyb2xsZXJzIG5lZWQKLQkJICogcXVldWVfZGVwdGggc2V0IHRvIERFVl9ISUdIIGZvciB0aGlzIHJlYXNvbi4KLQkJICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldmljZSwgTVNHX1NJTVBMRV9UQUcsCi0JCQlNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIKTsKLQkJZ290byBzbGF2ZV9jb25maWd1cmVfZXhpdDsKLQl9Ci0KLQltcHRzY3NpaF9pbml0VGFyZ2V0KGhkLCBkZXZpY2UtPmNoYW5uZWwsIGRldmljZS0+aWQsIGRldmljZS0+bHVuLAotCQlkZXZpY2UtPmlucXVpcnksIGRldmljZS0+aW5xdWlyeV9sZW4gKTsKLQltcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2aWNlLCBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIKTsKKwl2ZGV2aWNlLT5jb25maWd1cmVkX2x1bj0xOworCWx1bl9pbmRleCA9ICh2ZGV2aWNlLT5sdW4gPj4gNSk7ICAvKiAzMiBsdW5zIHBlciBsdW5faW5kZXggKi8KKwlpbmRleGVkX2x1biA9ICh2ZGV2aWNlLT5sdW4gJSAzMik7CisJdnRhcmdldC0+bHVuc1tsdW5faW5kZXhdIHw9ICgxIDw8IGluZGV4ZWRfbHVuKTsKKwltcHRzY3NpaF9pbml0VGFyZ2V0KGhkLCB2dGFyZ2V0LCBzZGV2LT5sdW4sIHNkZXYtPmlucXVpcnksCisJICAgIHNkZXYtPmlucXVpcnlfbGVuICk7CisJbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIE1QVF9TQ1NJX0NNRF9QRVJfREVWX0hJR0gpOwogCiAJZHNwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQKIAkJIlF1ZXVlIGRlcHRoPSVkLCB0ZmxhZ3M9JXhcbiIsCi0JCWhkLT5pb2MtPm5hbWUsIGRldmljZS0+cXVldWVfZGVwdGgsIHBUYXJnZXQtPnRmbGFncykpOworCQloZC0+aW9jLT5uYW1lLCBzZGV2LT5xdWV1ZV9kZXB0aCwgdnRhcmdldC0+dGZsYWdzKSk7CiAKLQlkc3ByaW50aygoTVlJT0Nfc19JTkZPX0ZNVAotCQkibmVnb0ZsYWdzPSV4LCBtYXhPZmZzZXQ9JXgsIFN5bmNGYWN0b3I9JXhcbiIsCi0JCWhkLT5pb2MtPm5hbWUsIHBUYXJnZXQtPm5lZ29GbGFncywgcFRhcmdldC0+bWF4T2Zmc2V0LCBwVGFyZ2V0LT5taW5TeW5jRmFjdG9yKSk7CisJaWYgKGhkLT5pb2MtPmJ1c190eXBlID09IFNQSSkKKwkJZHNwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQKKwkJICAgICJuZWdvRmxhZ3M9JXgsIG1heE9mZnNldD0leCwgU3luY0ZhY3Rvcj0leFxuIiwKKwkJICAgIGhkLT5pb2MtPm5hbWUsIHZ0YXJnZXQtPm5lZ29GbGFncywgdnRhcmdldC0+bWF4T2Zmc2V0LAorCQkgICAgdnRhcmdldC0+bWluU3luY0ZhY3RvcikpOwogCiBzbGF2ZV9jb25maWd1cmVfZXhpdDoKIAogCWRzcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCiAJCSJ0YWdnZWQgJWQsIHNpbXBsZSAlZCwgb3JkZXJlZCAlZFxuIiwKLQkJaGQtPmlvYy0+bmFtZSxkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQsIGRldmljZS0+c2ltcGxlX3RhZ3MsCi0JCWRldmljZS0+b3JkZXJlZF90YWdzKSk7CisJCWhkLT5pb2MtPm5hbWUsc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCwgc2Rldi0+c2ltcGxlX3RhZ3MsCisJCXNkZXYtPm9yZGVyZWRfdGFncykpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzcwLDE2ICsyMzk5LDE0IEBACiBzdGF0aWMgdm9pZAogbXB0c2NzaWhfY29weV9zZW5zZV9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKnNjLCBNUFRfU0NTSV9IT1NUICpoZCwgTVBUX0ZSQU1FX0hEUiAqbWYsIFNDU0lJT1JlcGx5X3QgKnBTY3NpUmVwbHkpCiB7Ci0JVmlydERldmljZQkqdGFyZ2V0OworCVZpcnREZXZpY2UJKnZkZXY7CiAJU0NTSUlPUmVxdWVzdF90CSpwUmVxOwogCXUzMgkJIHNlbnNlX2NvdW50ID0gbGUzMl90b19jcHUocFNjc2lSZXBseS0+U2Vuc2VDb3VudCk7Ci0JaW50CQkgaW5kZXg7CiAKIAkvKiBHZXQgdGFyZ2V0IHN0cnVjdHVyZQogCSAqLwogCXBSZXEgPSAoU0NTSUlPUmVxdWVzdF90ICopIG1mOwotCWluZGV4ID0gKGludCkgcFJlcS0+VGFyZ2V0SUQ7Ci0JdGFyZ2V0ID0gaGQtPlRhcmdldHNbaW5kZXhdOworCXZkZXYgPSBzYy0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAogCWlmIChzZW5zZV9jb3VudCkgewogCQl1OCAqc2Vuc2VfZGF0YTsKQEAgLTIzOTMsNyArMjQyMCw3IEBACiAJCS8qIExvZyBTTUFSVCBkYXRhIChhc2MgPSAweDVELCBub24tSU0gY2FzZSBvbmx5KSBpZiByZXF1aXJlZC4KIAkJICovCiAJCWlmICgoaGQtPmlvYy0+ZXZlbnRzKSAmJiAoaGQtPmlvYy0+ZXZlbnRUeXBlcyAmICgxIDw8IE1QSV9FVkVOVF9TQ1NJX0RFVklDRV9TVEFUVVNfQ0hBTkdFKSkpIHsKLQkJCWlmICgoc2Vuc2VfZGF0YVsxMl0gPT0gMHg1RCkgJiYgKHRhcmdldC0+cmFpZFZvbHVtZSA9PSAwKSkgeworCQkJaWYgKChzZW5zZV9kYXRhWzEyXSA9PSAweDVEKSAmJiAodmRldi0+dnRhcmdldC0+cmFpZFZvbHVtZSA9PSAwKSkgewogCQkJCWludCBpZHg7CiAJCQkJTVBUX0FEQVBURVIgKmlvYyA9IGhkLT5pb2M7CiAKQEAgLTI0MDMsNyArMjQzMCw3IEBACiAKIAkJCQlpb2MtPmV2ZW50c1tpZHhdLmRhdGFbMF0gPSAocFJlcS0+TFVOWzFdIDw8IDI0KSB8fAogCQkJCQkoTVBJX0VWRU5UX1NDU0lfREVWX1NUQVRfUkNfU01BUlRfREFUQSA8PCAxNikgfHwKLQkJCQkJKHBSZXEtPkJ1cyA8PCA4KSB8fCBwUmVxLT5UYXJnZXRJRDsKKwkJCQkJKHNjLT5kZXZpY2UtPmNoYW5uZWwgPDwgOCkgfHwgc2MtPmRldmljZS0+aWQ7CiAKIAkJCQlpb2MtPmV2ZW50c1tpZHhdLmRhdGFbMV0gPSAoc2Vuc2VfZGF0YVsxM10gPDwgOCkgfHwgc2Vuc2VfZGF0YVsxMl07CiAKQEAgLTI1MDMsOSArMjUzMCw5IEBACiAJCS8qIDIuIENoYWluIEJ1ZmZlciBpbml0aWFsaXphdGlvbgogCQkgKi8KIAotCQkvKiA0LiBSZW5lZ290aWF0ZSB0byBhbGwgZGV2aWNlcywgaWYgU0NTSQorCQkvKiA0LiBSZW5lZ290aWF0ZSB0byBhbGwgZGV2aWNlcywgaWYgU1BJCiAJCSAqLwotCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQ1NJKSB7CisJCWlmIChpb2MtPmJ1c190eXBlID09IFNQSSkgewogCQkJZG5lZ29wcmludGsoKCJ3cml0ZVNEUDE6IEFMTF9JRFMgVVNFX05WUkFNXG4iKSk7CiAJCQltcHRzY3NpaF93cml0ZVNEUDEoaGQsIDAsIDAsIE1QVF9TQ1NJQ0ZHX0FMTF9JRFMgfCBNUFRfU0NTSUNGR19VU0VfTlZSQU0pOwogCQl9CkBAIC0yNTM0LDcgKzI1NjEsNyBAQAogCiAJCS8qIDcuIFNldCBmbGFnIHRvIGZvcmNlIERWIGFuZCByZS1yZWFkIElPQyBQYWdlIDMKIAkJICovCi0JCWlmIChpb2MtPmJ1c190eXBlID09IFNDU0kpIHsKKwkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU1BJKSB7CiAJCQlpb2MtPnNwaV9kYXRhLmZvcmNlRHYgPSBNUFRfU0NTSUNGR19ORUVEX0RWIHwgTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzM7CiAJCQlkZHZ0cHJpbnRrKCgiU2V0IHJlbG9hZCBJT0MgUGczIEZsYWdcbiIpKTsKIAkJfQpAQCAtMjU3Niw3ICsyNjAzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfSU9DX0JVU19SRVNFVDoJCQkvKiAwNCAqLwogCWNhc2UgTVBJX0VWRU5UX0VYVF9CVVNfUkVTRVQ6CQkJLyogMDUgKi8KLQkJaWYgKGhkICYmIChpb2MtPmJ1c190eXBlID09IFNDU0kpICYmIChoZC0+c29mdF9yZXNldHMgPCAtMSkpCisJCWlmIChoZCAmJiAoaW9jLT5idXNfdHlwZSA9PSBTUEkpICYmIChoZC0+c29mdF9yZXNldHMgPCAtMSkpCiAJCQloZC0+c29mdF9yZXNldHMrKzsKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfTE9HT1VUOgkJCQkvKiAwOSAqLwpAQCAtMjU5NywxMSArMjYyNCwxMSBAQAogCiAJY2FzZSBNUElfRVZFTlRfSU5URUdSQVRFRF9SQUlEOgkJCS8qIDBCICovCiAJeworI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgogCQlwTXBpRXZlbnREYXRhUmFpZF90IHBSYWlkRXZlbnREYXRhID0KIAkJICAgIChwTXBpRXZlbnREYXRhUmFpZF90KSBwRXZSZXBseS0+RGF0YTsKLSNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KIAkJLyogRG9tYWluIFZhbGlkYXRpb24gTmVlZGVkICovCi0JCWlmIChpb2MtPmJ1c190eXBlID09IFNDU0kgJiYKKwkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU1BJICYmCiAJCSAgICBwUmFpZEV2ZW50RGF0YS0+UmVhc29uQ29kZSA9PQogCQkgICAgTVBJX0VWRU5UX1JBSURfUkNfRE9NQUlOX1ZBTF9ORUVERUQpCiAJCQltcHRzY3NpaF9zZXRfZHZmbGFnc19yYWlkKGhkLCBwUmFpZEV2ZW50RGF0YS0+UGh5c0Rpc2tOdW0pOwpAQCAtMjYzMiw4ICsyNjU5LDcgQEAKIC8qCiAgKgltcHRzY3NpaF9pbml0VGFyZ2V0IC0gVGFyZ2V0LCBMVU4gYWxsb2MvZnJlZSBmdW5jdGlvbmFsaXR5LgogICoJQGhkOiBQb2ludGVyIHRvIE1QVF9TQ1NJX0hPU1Qgc3RydWN0dXJlCi0gKglAYnVzX2lkOiBCdXMgbnVtYmVyICg/KQotICoJQHRhcmdldF9pZDogU0NTSSB0YXJnZXQgaWQKKyAqCUB2dGFyZ2V0OiBwZXIgdGFyZ2V0IHByaXZhdGUgZGF0YQogICoJQGx1bjogU0NTSSBMVU4gaWQKICAqCUBkYXRhOiBQb2ludGVyIHRvIGRhdGEKICAqCUBkbGVuOiBOdW1iZXIgb2YgSU5RVUlSWSBieXRlcwpAQCAtMjY0NiwxNSArMjY3MiwxNCBAQAogICoKICAqLwogc3RhdGljIHZvaWQKLW1wdHNjc2loX2luaXRUYXJnZXQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBidXNfaWQsIGludCB0YXJnZXRfaWQsIHU4IGx1biwgY2hhciAqZGF0YSwgaW50IGRsZW4pCittcHRzY3NpaF9pbml0VGFyZ2V0KE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0VGFyZ2V0ICp2dGFyZ2V0LCB1OCBsdW4sIGNoYXIgKmRhdGEsIGludCBkbGVuKQogewotCWludAkJaW5kZXhlZF9sdW4sIGx1bl9pbmRleDsKLQlWaXJ0RGV2aWNlCSp2ZGV2OwogCVNwaUNmZ0RhdGEJKnBTcGk7CiAJY2hhcgkJZGF0YV81NjsKKwlpbnQJCWlucV9sZW47CiAKIAlkaW5pdHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiaW5pdFRhcmdldCBidXM9JWQgaWQ9JWQgbHVuPSVkIGhkPSVwXG4iLAotCQkJaGQtPmlvYy0+bmFtZSwgYnVzX2lkLCB0YXJnZXRfaWQsIGx1biwgaGQpKTsKKwkJaGQtPmlvYy0+bmFtZSwgdnRhcmdldC0+YnVzX2lkLCB2dGFyZ2V0LT50YXJnZXRfaWQsIGx1biwgaGQpKTsKIAogCS8qCiAJICogSWYgdGhlIHBlcmlwaGVyYWwgcXVhbGlmaWVyIGZpbHRlciBpcyBlbmFibGVkIHRoZW4gaWYgdGhlIHRhcmdldCByZXBvcnRzIGEgMHgxCkBAIC0yNjc0LDc1ICsyNjk5LDY4IEBACiAJaWYgKGRhdGFbMF0gJiAweGUwKQogCQlyZXR1cm47CiAKLQlpZiAoKHZkZXYgPSBoZC0+VGFyZ2V0c1t0YXJnZXRfaWRdKSA9PSBOVUxMKSB7CisJaWYgKHZ0YXJnZXQgPT0gTlVMTCkKIAkJcmV0dXJuOwotCX0KIAotCWx1bl9pbmRleCA9IChsdW4gPj4gNSk7ICAvKiAzMiBsdW5zIHBlciBsdW5faW5kZXggKi8KLQlpbmRleGVkX2x1biA9IChsdW4gJSAzMik7Ci0JdmRldi0+bHVuc1tsdW5faW5kZXhdIHw9ICgxIDw8IGluZGV4ZWRfbHVuKTsKKwlpZiAoZGF0YSkKKwkJdnRhcmdldC0+dHlwZSA9IGRhdGFbMF07CiAKLQlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpZiAoKGRhdGFbMF0gPT0gVFlQRV9QUk9DRVNTT1IpICYmIChoZC0+aW9jLT5zcGlfZGF0YS5TYWZfVGUpKSB7Ci0JCQkvKiBUcmVhdCBhbGwgUHJvY2Vzc29ycyBhcyBTQUYtVEUgaWYKLQkJCSAqIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgc2V0ICovCi0JCQl2ZGV2LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19TQUZfVEVfSVNTVUVEOwotCQkJbXB0c2NzaWhfd3JpdGVJT0NQYWdlNChoZCwgdGFyZ2V0X2lkLCBidXNfaWQpOwotCQl9ZWxzZSBpZiAoKGRhdGFbMF0gPT0gVFlQRV9QUk9DRVNTT1IpICYmCi0JCQkhKHZkZXYtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfU0FGX1RFX0lTU1VFRCApKSB7Ci0JCQlpZiAoIGRsZW4gPiA0OSApIHsKLQkJCQl2ZGV2LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZOwotCQkJCWlmICggZGF0YVs0NF0gPT0gJ1MnICYmCi0JCQkJICAgICBkYXRhWzQ1XSA9PSAnQScgJiYKLQkJCQkgICAgIGRhdGFbNDZdID09ICdGJyAmJgotCQkJCSAgICAgZGF0YVs0N10gPT0gJy0nICYmCi0JCQkJICAgICBkYXRhWzQ4XSA9PSAnVCcgJiYKLQkJCQkgICAgIGRhdGFbNDldID09ICdFJyApIHsKLQkJCQkJdmRldi0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfU0FGX1RFX0lTU1VFRDsKLQkJCQkJbXB0c2NzaWhfd3JpdGVJT0NQYWdlNChoZCwgdGFyZ2V0X2lkLCBidXNfaWQpOwotCQkJCX0KKwlpZiAoaGQtPmlvYy0+YnVzX3R5cGUgIT0gU1BJKQorCQlyZXR1cm47CisKKwlpZiAoKGRhdGFbMF0gPT0gVFlQRV9QUk9DRVNTT1IpICYmIChoZC0+aW9jLT5zcGlfZGF0YS5TYWZfVGUpKSB7CisJCS8qIFRyZWF0IGFsbCBQcm9jZXNzb3JzIGFzIFNBRi1URSBpZgorCQkgKiBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIHNldCAqLworCQl2dGFyZ2V0LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19TQUZfVEVfSVNTVUVEOworCQltcHRzY3NpaF93cml0ZUlPQ1BhZ2U0KGhkLCB2dGFyZ2V0LT50YXJnZXRfaWQsIHZ0YXJnZXQtPmJ1c19pZCk7CisJfWVsc2UgaWYgKChkYXRhWzBdID09IFRZUEVfUFJPQ0VTU09SKSAmJgorCQkhKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfU0FGX1RFX0lTU1VFRCApKSB7CisJCWlmICggZGxlbiA+IDQ5ICkgeworCQkJdnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfSU5RVUlSWTsKKwkJCWlmICggZGF0YVs0NF0gPT0gJ1MnICYmCisJCQkgICAgIGRhdGFbNDVdID09ICdBJyAmJgorCQkJICAgICBkYXRhWzQ2XSA9PSAnRicgJiYKKwkJCSAgICAgZGF0YVs0N10gPT0gJy0nICYmCisJCQkgICAgIGRhdGFbNDhdID09ICdUJyAmJgorCQkJICAgICBkYXRhWzQ5XSA9PSAnRScgKSB7CisJCQkJdnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfU0FGX1RFX0lTU1VFRDsKKwkJCQltcHRzY3NpaF93cml0ZUlPQ1BhZ2U0KGhkLCB2dGFyZ2V0LT50YXJnZXRfaWQsIHZ0YXJnZXQtPmJ1c19pZCk7CiAJCQl9CiAJCX0KLQkJaWYgKCEodmRldi0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZKSkgewotCQkJaWYgKCBkbGVuID4gOCApIHsKLQkJCQltZW1jcHkgKHZkZXYtPmlucV9kYXRhLCBkYXRhLCA4KTsKLQkJCX0gZWxzZSB7Ci0JCQkJbWVtY3B5ICh2ZGV2LT5pbnFfZGF0YSwgZGF0YSwgZGxlbik7Ci0JCQl9CisJfQorCWlmICghKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfSU5RVUlSWSkpIHsKKwkJaW5xX2xlbiA9IGRsZW4gPCA4ID8gZGxlbiA6IDg7CisJCW1lbWNweSAodnRhcmdldC0+aW5xX2RhdGEsIGRhdGEsIGlucV9sZW4pOworCQkvKiBJZiBoYXZlIG5vdCBkb25lIERWLCBzZXQgdGhlIERWIGZsYWcuCisJCSAqLworCQlwU3BpID0gJmhkLT5pb2MtPnNwaV9kYXRhOworCQlpZiAoKGRhdGFbMF0gPT0gVFlQRV9UQVBFKSB8fCAoZGF0YVswXSA9PSBUWVBFX1BST0NFU1NPUikpIHsKKwkJCWlmIChwU3BpLT5kdlN0YXR1c1t2dGFyZ2V0LT50YXJnZXRfaWRdICYgTVBUX1NDU0lDRkdfRFZfTk9UX0RPTkUpCisJCQkJcFNwaS0+ZHZTdGF0dXNbdnRhcmdldC0+dGFyZ2V0X2lkXSB8PSBNUFRfU0NTSUNGR19ORUVEX0RWOworCQl9CisJCXZ0YXJnZXQtPnRmbGFncyB8PSBNUFRfVEFSR0VUX0ZMQUdTX1ZBTElEX0lOUVVJUlk7CiAKLQkJCS8qIElmIGhhdmUgbm90IGRvbmUgRFYsIHNldCB0aGUgRFYgZmxhZy4KKwkJZGF0YV81NiA9IDB4MEY7ICAvKiBEZWZhdWx0IHRvIGZ1bGwgY2FwYWJpbGl0aWVzIGlmIElucSBkYXRhIGxlbmd0aCBpcyA8IDU3ICovCisJCWlmIChkbGVuID4gNTYpIHsKKwkJCWlmICggKCEodnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NikpKSB7CisJCQkvKiBVcGRhdGUgdGhlIHRhcmdldCBjYXBhYmlsaXRpZXMKIAkJCSAqLwotCQkJcFNwaSA9ICZoZC0+aW9jLT5zcGlfZGF0YTsKLQkJCWlmICgoZGF0YVswXSA9PSBUWVBFX1RBUEUpIHx8IChkYXRhWzBdID09IFRZUEVfUFJPQ0VTU09SKSkgewotCQkJCWlmIChwU3BpLT5kdlN0YXR1c1t0YXJnZXRfaWRdICYgTVBUX1NDU0lDRkdfRFZfTk9UX0RPTkUpCi0JCQkJCXBTcGktPmR2U3RhdHVzW3RhcmdldF9pZF0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKKwkJCQlkYXRhXzU2ID0gZGF0YVs1Nl07CisJCQkJdnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfNTY7CiAJCQl9Ci0KLQkJCXZkZXYtPnRmbGFncyB8PSBNUFRfVEFSR0VUX0ZMQUdTX1ZBTElEX0lOUVVJUlk7Ci0KLQotCQkJZGF0YV81NiA9IDB4MEY7ICAvKiBEZWZhdWx0IHRvIGZ1bGwgY2FwYWJpbGl0aWVzIGlmIElucSBkYXRhIGxlbmd0aCBpcyA8IDU3ICovCi0JCQlpZiAoZGxlbiA+IDU2KSB7Ci0JCQkJaWYgKCAoISh2ZGV2LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZBTElEXzU2KSkpIHsKLQkJCQkvKiBVcGRhdGUgdGhlIHRhcmdldCBjYXBhYmlsaXRpZXMKLQkJCQkgKi8KLQkJCQkJZGF0YV81NiA9IGRhdGFbNTZdOwotCQkJCQl2ZGV2LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NjsKLQkJCQl9Ci0JCQl9Ci0JCQltcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoaGQsIHZkZXYsIGRhdGFfNTYpOwotCQl9IGVsc2UgewotCQkJLyogSW5pdGlhbCBJbnF1aXJ5IG1heSBub3QgcmVxdWVzdCBlbm91Z2ggZGF0YSBieXRlcyB0bwotCQkJICogb2J0YWluIGJ5dGUgNTcuICBEViB3aWxsOyBpZiB0YXJnZXQgZG9lc24ndCByZXR1cm4KLQkJCSAqIGF0IGxlYXN0IDU3IGJ5dGVzLCBkYXRhWzU2XSB3aWxsIGJlIHplcm8uICovCi0JCQlpZiAoZGxlbiA+IDU2KSB7Ci0JCQkJaWYgKCAoISh2ZGV2LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZBTElEXzU2KSkpIHsKLQkJCQkvKiBVcGRhdGUgdGhlIHRhcmdldCBjYXBhYmlsaXRpZXMKLQkJCQkgKi8KLQkJCQkJZGF0YV81NiA9IGRhdGFbNTZdOwotCQkJCQl2ZGV2LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NjsKLQkJCQkJbXB0c2NzaWhfc2V0VGFyZ2V0TmVnb1Bhcm1zKGhkLCB2ZGV2LCBkYXRhXzU2KTsKLQkJCQl9CisJCX0KKwkJbXB0c2NzaWhfc2V0VGFyZ2V0TmVnb1Bhcm1zKGhkLCB2dGFyZ2V0LCBkYXRhXzU2KTsKKwl9IGVsc2UgeworCQkvKiBJbml0aWFsIElucXVpcnkgbWF5IG5vdCByZXF1ZXN0IGVub3VnaCBkYXRhIGJ5dGVzIHRvCisJCSAqIG9idGFpbiBieXRlIDU3LiAgRFYgd2lsbDsgaWYgdGFyZ2V0IGRvZXNuJ3QgcmV0dXJuCisJCSAqIGF0IGxlYXN0IDU3IGJ5dGVzLCBkYXRhWzU2XSB3aWxsIGJlIHplcm8uICovCisJCWlmIChkbGVuID4gNTYpIHsKKwkJCWlmICggKCEodnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NikpKSB7CisJCQkvKiBVcGRhdGUgdGhlIHRhcmdldCBjYXBhYmlsaXRpZXMKKwkJCSAqLworCQkJCWRhdGFfNTYgPSBkYXRhWzU2XTsKKwkJCQl2dGFyZ2V0LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NjsKKwkJCQltcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoaGQsIHZ0YXJnZXQsIGRhdGFfNTYpOwogCQkJfQogCQl9CiAJfQpAQCAtMjc1NSwxMiArMjc3MywxMiBAQAogICoKICAqLwogc3RhdGljIHZvaWQKLW1wdHNjc2loX3NldFRhcmdldE5lZ29QYXJtcyhNUFRfU0NTSV9IT1NUICpoZCwgVmlydERldmljZSAqdGFyZ2V0LCBjaGFyIGJ5dGU1NikKK21wdHNjc2loX3NldFRhcmdldE5lZ29QYXJtcyhNUFRfU0NTSV9IT1NUICpoZCwgVmlydFRhcmdldCAqdGFyZ2V0LCBjaGFyIGJ5dGU1NikKIHsKIAlTcGlDZmdEYXRhICpwc3BpX2RhdGEgPSAmaGQtPmlvYy0+c3BpX2RhdGE7CiAJaW50ICBpZCA9IChpbnQpIHRhcmdldC0+dGFyZ2V0X2lkOwogCWludCAgbnZyYW07Ci0JVmlydERldmljZQkqdmRldjsKKwlWaXJ0VGFyZ2V0CSp2dGFyZ2V0OwogCWludCBpaTsKIAl1OCB3aWR0aCA9IE1QVF9OQVJST1c7CiAJdTggZmFjdG9yID0gTVBUX0FTWU5DOwpAQCAtMjkwNSw5ICsyOTIzLDkgQEAKIAogCQkJZGR2dHByaW50aygoS0VSTl9JTkZPICJEaXNhYmxpbmcgUUFTIGR1ZSB0byBub1Fhcz0lMDJ4IG9uIGlkPSVkIVxuIiwgbm9RYXMsIGlkKSk7CiAJCQlmb3IgKGlpID0gMDsgaWkgPCBpZDsgaWkrKykgewotCQkJCWlmICggKHZkZXYgPSBoZC0+VGFyZ2V0c1tpaV0pICkgewotCQkJCQl2ZGV2LT5uZWdvRmxhZ3MgfD0gTVBUX1RBUkdFVF9OT19ORUdPX1FBUzsKLQkJCQkJbXB0c2NzaWhfd3JpdGVTRFAxKGhkLCAwLCBpaSwgdmRldi0+bmVnb0ZsYWdzKTsKKwkJCQlpZiAoICh2dGFyZ2V0ID0gaGQtPlRhcmdldHNbaWldKSApIHsKKwkJCQkJdnRhcmdldC0+bmVnb0ZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19RQVM7CisJCQkJCW1wdHNjc2loX3dyaXRlU0RQMShoZCwgMCwgaWksIHZ0YXJnZXQtPm5lZ29GbGFncyk7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yOTI2LDEwNSArMjk0NCwxNyBAQAogfQogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCi0vKiBJZiBEViBkaXNhYmxlZCAobmVnb052cmFtIHNldCB0byBVU0VfTlZBUk0pIG9yIGlmIG5vdCBMVU4gMCwgcmV0dXJuLgotICogRWxzZSBzZXQgdGhlIE5FRURfRFYgZmxhZyBhZnRlciBSZWFkIENhcGFjaXR5IElzc3VlZCAoZGlza3MpCi0gKiBvciBNb2RlIFNlbnNlIChjZHJvbXMpLgotICoKLSAqIFRhcGVzLCBpbml0VGFyZ2V0IHdpbGwgc2V0IHRoaXMgZmxhZyBvbiBjb21wbGV0aW9uIG9mIElucXVpcnkgY29tbWFuZC4KLSAqIENhbGxlZCBvbmx5IGlmIERWX05PVF9ET05FIGZsYWcgaXMgc2V0Ci0gKi8KLXN0YXRpYyB2b2lkCi1tcHRzY3NpaF9zZXRfZHZmbGFncyhNUFRfU0NTSV9IT1NUICpoZCwgU0NTSUlPUmVxdWVzdF90ICpwUmVxKQotewotCU1QVF9BREFQVEVSCSppb2MgPSBoZC0+aW9jOwotCXU4IGNtZDsKLQlTcGlDZmdEYXRhCSpwU3BpOwotCi0JZGR2dHByaW50aygoTVlJT0Nfc19OT1RFX0ZNVAotCQkiIHNldF9kdmZsYWdzOiBpZD0lZCBsdW49JWQgbmVnb052cmFtPSV4IGNtZD0leFxuIiwKLQkJaGQtPmlvYy0+bmFtZSwgcFJlcS0+VGFyZ2V0SUQsIHBSZXEtPkxVTlsxXSwgaGQtPm5lZ29OdnJhbSwgcFJlcS0+Q0RCWzBdKSk7Ci0KLQlpZiAoKHBSZXEtPkxVTlsxXSAhPSAwKSB8fCAoaGQtPm5lZ29OdnJhbSAhPSAwKSkKLQkJcmV0dXJuOwotCi0JY21kID0gcFJlcS0+Q0RCWzBdOwotCi0JaWYgKChjbWQgPT0gUkVBRF9DQVBBQ0lUWSkgfHwgKGNtZCA9PSBNT0RFX1NFTlNFKSkgewotCQlwU3BpID0gJmlvYy0+c3BpX2RhdGE7Ci0JCWlmICgoaW9jLT5yYWlkX2RhdGEuaXNSYWlkICYgKDEgPDwgcFJlcS0+VGFyZ2V0SUQpKSAmJiBpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7Ci0JCQkvKiBTZXQgTkVFRF9EViBmb3IgYWxsIGhpZGRlbiBkaXNrcwotCQkJICovCi0JCQlJb2MzUGh5c0Rpc2tfdCAqcFBEaXNrID0gIGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrOwotCQkJaW50CQludW1QRGlzayA9IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsKLQotCQkJd2hpbGUgKG51bVBEaXNrKSB7Ci0JCQkJcFNwaS0+ZHZTdGF0dXNbcFBEaXNrLT5QaHlzRGlza0lEXSB8PSBNUFRfU0NTSUNGR19ORUVEX0RWOwotCQkJCWRkdnRwcmludGsoKCJORUVEX0RWIHNldCBmb3IgcGh5cyBkaXNrIGlkICVkXG4iLCBwUERpc2stPlBoeXNEaXNrSUQpKTsKLQkJCQlwUERpc2srKzsKLQkJCQludW1QRGlzay0tOwotCQkJfQotCQl9Ci0JCXBTcGktPmR2U3RhdHVzW3BSZXEtPlRhcmdldElEXSB8PSBNUFRfU0NTSUNGR19ORUVEX0RWOwotCQlkZHZ0cHJpbnRrKCgiTkVFRF9EViBzZXQgZm9yIHZpc2libGUgZGlzayBpZCAlZFxuIiwgcFJlcS0+VGFyZ2V0SUQpKTsKLQl9Ci19Ci0KLS8qIG1wdHNjc2loX3JhaWRfc2V0X2R2X2ZsYWdzKCkKLSAqCi0gKiBOZXcgb3IgcmVwbGFjZWQgZGlzay4gU2V0IERWIGZsYWcgYW5kIHNjaGVkdWxlIERWLgotICovCi1zdGF0aWMgdm9pZAotbXB0c2NzaWhfc2V0X2R2ZmxhZ3NfcmFpZChNUFRfU0NTSV9IT1NUICpoZCwgaW50IGlkKQotewotCU1QVF9BREFQVEVSCSppb2MgPSBoZC0+aW9jOwotCVNwaUNmZ0RhdGEJKnBTcGkgPSAmaW9jLT5zcGlfZGF0YTsKLQlJb2MzUGh5c0Rpc2tfdAkqcFBEaXNrOwotCWludAkJIG51bVBEaXNrOwotCi0JaWYgKGhkLT5uZWdvTnZyYW0gIT0gMCkKLQkJcmV0dXJuOwotCi0JZGR2dHByaW50aygoIkRWIHJlcXVlc3RlZCBmb3IgcGh5cyBkaXNrIGlkICVkXG4iLCBpZCkpOwotCWlmIChpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7Ci0JCXBQRGlzayA9ICBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKLQkJbnVtUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7Ci0JCXdoaWxlIChudW1QRGlzaykgewotCQkJaWYgKGlkID09IHBQRGlzay0+UGh5c0Rpc2tOdW0pIHsKLQkJCQlwU3BpLT5kdlN0YXR1c1twUERpc2stPlBoeXNEaXNrSURdID0KLQkJCQkgICAgKE1QVF9TQ1NJQ0ZHX05FRURfRFYgfCBNUFRfU0NTSUNGR19EVl9OT1RfRE9ORSk7Ci0JCQkJcFNwaS0+Zm9yY2VEdiA9IE1QVF9TQ1NJQ0ZHX05FRURfRFY7Ci0JCQkJZGR2dHByaW50aygoIk5FRURfRFYgc2V0IGZvciBwaHlzIGRpc2sgaWQgJWRcbiIsCi0JCQkJICAgIHBQRGlzay0+UGh5c0Rpc2tJRCkpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcFBEaXNrKys7Ci0JCQludW1QRGlzay0tOwotCQl9Ci0KLQkJaWYgKG51bVBEaXNrID09IDApIHsKLQkJCS8qIFRoZSBwaHlzaWNhbCBkaXNrIHRoYXQgbmVlZHMgRFYgd2FzIG5vdCBmb3VuZAotCQkJICogaW4gdGhlIHN0b3JlZCBJT0MgUGFnZSAzLiBUaGUgZHJpdmVyIG11c3QgcmVsb2FkCi0JCQkgKiB0aGlzIHBhZ2UuIERWIHJvdXRpbmUgd2lsbCBzZXQgdGhlIE5FRURfRFYgZmxhZyBmb3IKLQkJCSAqIGFsbCBwaHlzIGRpc2tzIHRoYXQgaGF2ZSBEVl9OT1RfRE9ORSBzZXQuCi0JCQkgKi8KLQkJCXBTcGktPmZvcmNlRHYgPSBNUFRfU0NTSUNGR19ORUVEX0RWIHwgTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzM7Ci0JCQlkZHZ0cHJpbnRrKCgicGh5cyBkaXNrICVkIG5vdCBmb3VuZC4gU2V0dGluZyByZWxvYWQgSU9DIFBnMyBGbGFnXG4iLGlkKSk7Ci0JCX0KLQl9Ci19Ci0KLS8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCiAgKiBJZiBubyBUYXJnZXQsIGJ1cyByZXNldCBvbiAxc3QgSS9PLiBTZXQgdGhlIGZsYWcgdG8KICAqIHByZXZlbnQgYW55IGZ1dHVyZSBuZWdvdGlhdGlvbnMgdG8gdGhpcyBkZXZpY2UuCiAgKi8KIHN0YXRpYyB2b2lkCi1tcHRzY3NpaF9ub19uZWdvdGlhdGUoTVBUX1NDU0lfSE9TVCAqaGQsIGludCB0YXJnZXRfaWQpCittcHRzY3NpaF9ub19uZWdvdGlhdGUoTVBUX1NDU0lfSE9TVCAqaGQsIHN0cnVjdCBzY3NpX2NtbmQgKnNjKQogeworCVZpcnREZXZpY2UJKnZkZXY7CiAKLQlpZiAoKGhkLT5UYXJnZXRzKSAmJiAoaGQtPlRhcmdldHNbdGFyZ2V0X2lkXSA9PSBOVUxMKSkKLQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbdGFyZ2V0X2lkXSB8PSBNUFRfU0NTSUNGR19CTEtfTkVHTzsKLQorCWlmICgodmRldiA9IHNjLT5kZXZpY2UtPmhvc3RkYXRhKSAhPSBOVUxMKQorCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1t2ZGV2LT50YXJnZXRfaWRdIHw9IE1QVF9TQ1NJQ0ZHX0JMS19ORUdPOwogCXJldHVybjsKIH0KIApAQCAtMzEwMCw3ICszMDMwLDcgQEAKIAlNUFRfQURBUFRFUgkJKmlvYyA9IGhkLT5pb2M7CiAJQ29uZmlnX3QJCSpwUmVxOwogCVNDU0lEZXZpY2VQYWdlMV90CSpwRGF0YTsKLQlWaXJ0RGV2aWNlCQkqcFRhcmdldD1OVUxMOworCVZpcnRUYXJnZXQJCSp2dGFyZ2V0PU5VTEw7CiAJTVBUX0ZSQU1FX0hEUgkJKm1mOwogCWRtYV9hZGRyX3QJCSBkYXRhRG1hOwogCXUxNgkJCSByZXFfaWR4OwpAQCAtMzE4MCwxMSArMzExMCwxMSBAQAogCQkvKiBJZiBpZCBpcyBub3QgYSByYWlkIHZvbHVtZSwgZ2V0IHRoZSB1cGRhdGVkCiAJCSAqIHRyYW5zbWlzc2lvbiBzZXR0aW5ncyBmcm9tIHRoZSB0YXJnZXQgc3RydWN0dXJlLgogCQkgKi8KLQkJaWYgKGhkLT5UYXJnZXRzICYmIChwVGFyZ2V0ID0gaGQtPlRhcmdldHNbaWRdKSAmJiAhcFRhcmdldC0+cmFpZFZvbHVtZSkgewotCQkJd2lkdGggPSBwVGFyZ2V0LT5tYXhXaWR0aDsKLQkJCWZhY3RvciA9IHBUYXJnZXQtPm1pblN5bmNGYWN0b3I7Ci0JCQlvZmZzZXQgPSBwVGFyZ2V0LT5tYXhPZmZzZXQ7Ci0JCQluZWdvRmxhZ3MgPSBwVGFyZ2V0LT5uZWdvRmxhZ3M7CisJCWlmIChoZC0+VGFyZ2V0cyAmJiAodnRhcmdldCA9IGhkLT5UYXJnZXRzW2lkXSkgJiYgIXZ0YXJnZXQtPnJhaWRWb2x1bWUpIHsKKwkJCXdpZHRoID0gdnRhcmdldC0+bWF4V2lkdGg7CisJCQlmYWN0b3IgPSB2dGFyZ2V0LT5taW5TeW5jRmFjdG9yOworCQkJb2Zmc2V0ID0gdnRhcmdldC0+bWF4T2Zmc2V0OworCQkJbmVnb0ZsYWdzID0gdnRhcmdldC0+bmVnb0ZsYWdzOwogCQl9CiAKICNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KQEAgLTM5MDQsMzYgKzM4MzQsMTA0IEBACiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgotICoJbXB0c2NzaWhfc3luY2hyb25pemVfY2FjaGUgLSBTZW5kIFNZTkNIUk9OSVpFX0NBQ0hFIHRvIGFsbCBkaXNrcy4KLSAqCUBoZDogUG9pbnRlciB0byBNUFRfU0NTSV9IT1NUIHN0cnVjdHVyZQotICoJQHBvcnRudW06IElPQyBwb3J0IG51bWJlcgorICoJbXB0c2NzaWhfbmVnb3RpYXRlX3RvX2FzeW5fbmFycm93IC0gUmVzdG9yZSBkZXZpY2VzIHRvIGRlZmF1bHQgc3RhdGUKKyAqCUBoZDogUG9pbnRlciB0byBhIFNDU0kgSE9TVCBzdHJ1Y3R1cmUKKyAqCUB2dGFyZ2V0OiBwZXIgZGV2aWNlIHByaXZhdGUgZGF0YQogICoKICAqCVVzZXMgdGhlIElTUiwgYnV0IHdpdGggc3BlY2lhbCBwcm9jZXNzaW5nLgogICoJTVVTVCBiZSBzaW5nbGUtdGhyZWFkZWQuCiAgKgotICoJUmV0dXJuOiAwIG9uIGNvbXBsZXRpb24KICAqLwotc3RhdGljIGludAotbXB0c2NzaWhfc3luY2hyb25pemVfY2FjaGUoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBwb3J0bnVtKQorc3RhdGljIHZvaWQKK21wdHNjc2loX25lZ290aWF0ZV90b19hc3luX25hcnJvdyhNUFRfU0NTSV9IT1NUICpoZCwgVmlydFRhcmdldCAqdnRhcmdldCkKIHsKIAlNUFRfQURBUFRFUgkJKmlvYz0gaGQtPmlvYzsKLQlWaXJ0RGV2aWNlCQkqcFRhcmdldDsKLQlTQ1NJRGV2aWNlUGFnZTFfdAkqcGNmZzFEYXRhID0gTlVMTDsKLQlJTlRFUk5BTF9DTUQJCSBpb2NtZDsKKwlTQ1NJRGV2aWNlUGFnZTFfdAkqcGNmZzFEYXRhOwogCUNPTkZJR1BBUk1TCQkgY2ZnOwotCWRtYV9hZGRyX3QJCSBjZmcxX2RtYV9hZGRyID0gLTE7Ci0JQ29uZmlnUGFnZUhlYWRlcl90CSBoZWFkZXIxOwotCWludAkJCSBidXMgPSAwOwotCWludAkJCSBpZCA9IDA7Ci0JaW50CQkJIGx1bjsKLQlpbnQJCQkgaW5kZXhlZF9sdW4sIGx1bl9pbmRleDsKLQlpbnQJCQkgaG9zdElkID0gaW9jLT5wZmFjdHNbcG9ydG51bV0uUG9ydFNDU0lJRDsKLQlpbnQJCQkgbWF4X2lkOwotCWludAkJCSByZXF1ZXN0ZWQsIGNvbmZpZ3VyYXRpb24sIGRhdGE7Ci0JaW50CQkJIGRvQ29uZmlnID0gMDsKKwlkbWFfYWRkcl90CQkgY2ZnMV9kbWFfYWRkcjsKKwlDb25maWdQYWdlSGVhZGVyX3QJIGhlYWRlcjsKKwlpbnQJCQkgaWQ7CisJaW50CQkJIHJlcXVlc3RlZCwgY29uZmlndXJhdGlvbiwgZGF0YSxpOwogCXU4CQkJIGZsYWdzLCBmYWN0b3I7CiAKLQltYXhfaWQgPSBpb2MtPnNoLT5tYXhfaWQgLSAxOworCWlmIChpb2MtPmJ1c190eXBlICE9IFNQSSkKKwkJcmV0dXJuOworCisJaWYgKCFpb2MtPnNwaV9kYXRhLnNkcDFsZW5ndGgpCisJCXJldHVybjsKKworCXBjZmcxRGF0YSA9IChTQ1NJRGV2aWNlUGFnZTFfdCAqKXBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LAorCQkgaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoICogNCwgJmNmZzFfZG1hX2FkZHIpOworCisJaWYgKHBjZmcxRGF0YSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwloZWFkZXIuUGFnZVZlcnNpb24gPSBpb2MtPnNwaV9kYXRhLnNkcDF2ZXJzaW9uOworCWhlYWRlci5QYWdlTGVuZ3RoID0gaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoOworCWhlYWRlci5QYWdlTnVtYmVyID0gMTsKKwloZWFkZXIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX1NDU0lfREVWSUNFOworCWNmZy5jZmdoZHIuaGRyID0gJmhlYWRlcjsKKwljZmcucGh5c0FkZHIgPSBjZmcxX2RtYV9hZGRyOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQ7CisJY2ZnLmRpciA9IDE7CisJY2ZnLnRpbWVvdXQgPSAwOworCisJaWYgKHZ0YXJnZXQtPnJhaWRWb2x1bWUgJiYgaW9jLT5yYWlkX2RhdGEucElvY1BnMykgeworCQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOyBpKyspIHsKKwkJCWlkID0gaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2tbaV0uUGh5c0Rpc2tJRDsKKwkJCWZsYWdzID0gaGQtPmlvYy0+c3BpX2RhdGEubm9RYXM7CisJCQlpZiAoaGQtPmlvYy0+c3BpX2RhdGEubnZyYW0gJiYgKGhkLT5pb2MtPnNwaV9kYXRhLm52cmFtW2lkXSAhPSBNUFRfSE9TVF9OVlJBTV9JTlZBTElEKSkgeworCQkJCWRhdGEgPSBoZC0+aW9jLT5zcGlfZGF0YS5udnJhbVtpZF07CisJCQkJaWYgKGRhdGEgJiBNUFRfTlZSQU1fV0lERV9ESVNBQkxFKQorCQkJCQlmbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fV0lERTsKKwkJCQlmYWN0b3IgPSAoZGF0YSAmIE1QVF9OVlJBTV9TWU5DX01BU0spID4+IE1QVF9OVlJBTV9TWU5DX1NISUZUOworCQkJCWlmICgoZmFjdG9yID09IDApIHx8IChmYWN0b3IgPT0gTVBUX0FTWU5DKSkKKwkJCQkJZmxhZ3MgfD0gTVBUX1RBUkdFVF9OT19ORUdPX1NZTkM7CisJCQl9CisJCQltcHRzY3NpaF9zZXREZXZpY2VQYWdlMUZsYWdzKDAsIE1QVF9BU1lOQywgMCwgJnJlcXVlc3RlZCwKKwkJCQkmY29uZmlndXJhdGlvbiwgZmxhZ3MpOworCQkJZG5lZ29wcmludGsoKCJzeW5jcm9uaXplIGNhY2hlOiBpZD0lZCB3aWR0aD0wIGZhY3Rvcj1NUFRfQVNZTkMgIgorCQkJCSJvZmZzZXQ9MCBuZWdvRmxhZ3M9JXggcmVxdWVzdD0leCBjb25maWc9JXhcbiIsCisJCQkJaWQsIGZsYWdzLCByZXF1ZXN0ZWQsIGNvbmZpZ3VyYXRpb24pKTsKKwkJCXBjZmcxRGF0YS0+UmVxdWVzdGVkUGFyYW1ldGVycyA9IGNwdV90b19sZTMyKHJlcXVlc3RlZCk7CisJCQlwY2ZnMURhdGEtPlJlc2VydmVkID0gMDsKKwkJCXBjZmcxRGF0YS0+Q29uZmlndXJhdGlvbiA9IGNwdV90b19sZTMyKGNvbmZpZ3VyYXRpb24pOworCQkJY2ZnLnBhZ2VBZGRyID0gKHZ0YXJnZXQtPmJ1c19pZDw8OCkgfCBpZDsKKwkJCW1wdF9jb25maWcoaGQtPmlvYywgJmNmZyk7CisJCX0KKwl9IGVsc2UgeworCQlmbGFncyA9IHZ0YXJnZXQtPm5lZ29GbGFnczsKKwkJbXB0c2NzaWhfc2V0RGV2aWNlUGFnZTFGbGFncygwLCBNUFRfQVNZTkMsIDAsICZyZXF1ZXN0ZWQsCisJCQkJJmNvbmZpZ3VyYXRpb24sIGZsYWdzKTsKKwkJZG5lZ29wcmludGsoKCJzeW5jcm9uaXplIGNhY2hlOiBpZD0lZCB3aWR0aD0wIGZhY3Rvcj1NUFRfQVNZTkMgIgorCQkJIm9mZnNldD0wIG5lZ29GbGFncz0leCByZXF1ZXN0PSV4IGNvbmZpZz0leFxuIiwKKwkJCXZ0YXJnZXQtPnRhcmdldF9pZCwgZmxhZ3MsIHJlcXVlc3RlZCwgY29uZmlndXJhdGlvbikpOworCQlwY2ZnMURhdGEtPlJlcXVlc3RlZFBhcmFtZXRlcnMgPSBjcHVfdG9fbGUzMihyZXF1ZXN0ZWQpOworCQlwY2ZnMURhdGEtPlJlc2VydmVkID0gMDsKKwkJcGNmZzFEYXRhLT5Db25maWd1cmF0aW9uID0gY3B1X3RvX2xlMzIoY29uZmlndXJhdGlvbik7CisJCWNmZy5wYWdlQWRkciA9ICh2dGFyZ2V0LT5idXNfaWQ8PDgpIHwgdnRhcmdldC0+dGFyZ2V0X2lkOworCQltcHRfY29uZmlnKGhkLT5pb2MsICZjZmcpOworCX0KKworCWlmIChwY2ZnMURhdGEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhlYWRlci5QYWdlTGVuZ3RoICogNCwgcGNmZzFEYXRhLCBjZmcxX2RtYV9hZGRyKTsKK30KKworLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLworLyoqCisgKgltcHRzY3NpaF9zeW5jaHJvbml6ZV9jYWNoZSAtIFNlbmQgU1lOQ0hST05JWkVfQ0FDSEUgdG8gYWxsIGRpc2tzLgorICoJQGhkOiBQb2ludGVyIHRvIGEgU0NTSSBIT1NUIHN0cnVjdHVyZQorICoJQHZ0YXJnZXQ6IHBlciBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKglAbHVuOiBsdW4KKyAqCisgKglVc2VzIHRoZSBJU1IsIGJ1dCB3aXRoIHNwZWNpYWwgcHJvY2Vzc2luZy4KKyAqCU1VU1QgYmUgc2luZ2xlLXRocmVhZGVkLgorICoKKyAqLworc3RhdGljIHZvaWQKK21wdHNjc2loX3N5bmNocm9uaXplX2NhY2hlKE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0RGV2aWNlICp2ZGV2aWNlKQoreworCUlOVEVSTkFMX0NNRAkJIGlvY21kOwogCiAJLyogRm9sbG93aW5nIHBhcmFtZXRlcnMgd2lsbCBub3QgY2hhbmdlCiAJICogaW4gdGhpcyByb3V0aW5lLgpAQCAtMzk0NSwxMDggKzM5NDMsMzAgQEAKIAlpb2NtZC5kYXRhX2RtYSA9IC0xOwogCWlvY21kLnNpemUgPSAwOwogCWlvY21kLnJzdmQgPSBpb2NtZC5yc3ZkMiA9IDA7CisJaW9jbWQuYnVzID0gdmRldmljZS0+YnVzX2lkOworCWlvY21kLmlkID0gdmRldmljZS0+dGFyZ2V0X2lkOworCWlvY21kLmx1biA9ICh1OCl2ZGV2aWNlLT5sdW47CiAKLQkvKiBObyBTQ1NJIGhvc3RzCi0JICovCi0JaWYgKGhkLT5UYXJnZXRzID09IE5VTEwpCisJaWYgKCh2ZGV2aWNlLT52dGFyZ2V0LT50eXBlICYgVFlQRV9ESVNLKSAmJgorCSAgICAodmRldmljZS0+Y29uZmlndXJlZF9sdW4pKQorCQltcHRzY3NpaF9kb19jbWQoaGQsICZpb2NtZCk7Cit9CisKKy8qIFNlYXJjaCBJT0MgcGFnZSAzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGhpZGRlbiBwaHlzaWNhbCBkaXNrCisgKi8KKy8qIFNlYXJjaCBJT0MgcGFnZSAzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGhpZGRlbiBwaHlzaWNhbCBkaXNrCisgKi8KK3N0YXRpYyBpbnQKK21wdHNjc2loX2lzX3BoeXNfZGlzayhNUFRfQURBUFRFUiAqaW9jLCBpbnQgaWQpCit7CisJaW50IGk7CisKKwlpZiAoIWlvYy0+cmFpZF9kYXRhLmlzUmFpZCB8fCAhaW9jLT5yYWlkX2RhdGEucElvY1BnMykKIAkJcmV0dXJuIDA7CiAKLQkvKiBTa2lwIHRoZSBob3N0Ci0JICovCi0JaWYgKGlkID09IGhvc3RJZCkKLQkJaWQrKzsKLQotCS8qIFdyaXRlIFNEUDEgZm9yIGFsbCBTQ1NJIGRldmljZXMKLQkgKiBBbGxvYyBtZW1vcnkgYW5kIHNldCB1cCBjb25maWcgYnVmZmVyCi0JICovCi0JaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0NTSSkgewotCQlpZiAoaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoID4gMCkgewotCQkJcGNmZzFEYXRhID0gKFNDU0lEZXZpY2VQYWdlMV90ICopcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsCi0JCQkJCSBpb2MtPnNwaV9kYXRhLnNkcDFsZW5ndGggKiA0LCAmY2ZnMV9kbWFfYWRkcik7Ci0KLQkJCWlmIChwY2ZnMURhdGEgIT0gTlVMTCkgewotCQkJCWRvQ29uZmlnID0gMTsKLQkJCQloZWFkZXIxLlBhZ2VWZXJzaW9uID0gaW9jLT5zcGlfZGF0YS5zZHAxdmVyc2lvbjsKLQkJCQloZWFkZXIxLlBhZ2VMZW5ndGggPSBpb2MtPnNwaV9kYXRhLnNkcDFsZW5ndGg7Ci0JCQkJaGVhZGVyMS5QYWdlTnVtYmVyID0gMTsKLQkJCQloZWFkZXIxLlBhZ2VUeXBlID0gTVBJX0NPTkZJR19QQUdFVFlQRV9TQ1NJX0RFVklDRTsKLQkJCQljZmcuY2ZnaGRyLmhkciA9ICZoZWFkZXIxOwotCQkJCWNmZy5waHlzQWRkciA9IGNmZzFfZG1hX2FkZHI7Ci0JCQkJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVDsKLQkJCQljZmcuZGlyID0gMTsKLQkJCQljZmcudGltZW91dCA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBsb29wIHRocm91Z2ggYWxsIGRldmljZXMgb24gdGhpcyBwb3J0Ci0JICovCi0Jd2hpbGUgKGJ1cyA8IE1QVF9NQVhfQlVTKSB7Ci0JCWlvY21kLmJ1cyA9IGJ1czsKLQkJaW9jbWQuaWQgPSBpZDsKLQkJcFRhcmdldCA9IGhkLT5UYXJnZXRzWyhpbnQpaWRdOwotCi0JCWlmIChkb0NvbmZpZykgewotCi0JCQkvKiBTZXQgdGhlIG5lZ290aWF0aW9uIGZsYWdzICovCi0JCQlpZiAocFRhcmdldCAmJiAocFRhcmdldCA9IGhkLT5UYXJnZXRzW2lkXSkgJiYgIXBUYXJnZXQtPnJhaWRWb2x1bWUpIHsKLQkJCQlmbGFncyA9IHBUYXJnZXQtPm5lZ29GbGFnczsKLQkJCX0gZWxzZSB7Ci0JCQkJZmxhZ3MgPSBoZC0+aW9jLT5zcGlfZGF0YS5ub1FhczsKLQkJCQlpZiAoaGQtPmlvYy0+c3BpX2RhdGEubnZyYW0gJiYgKGhkLT5pb2MtPnNwaV9kYXRhLm52cmFtW2lkXSAhPSBNUFRfSE9TVF9OVlJBTV9JTlZBTElEKSkgewotCQkJCQlkYXRhID0gaGQtPmlvYy0+c3BpX2RhdGEubnZyYW1baWRdOwotCi0JCQkJCWlmIChkYXRhICYgTVBUX05WUkFNX1dJREVfRElTQUJMRSkKLQkJCQkJCWZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19XSURFOwotCi0JCQkJCWZhY3RvciA9IChkYXRhICYgTVBUX05WUkFNX1NZTkNfTUFTSykgPj4gTVBUX05WUkFNX1NZTkNfU0hJRlQ7Ci0JCQkJCWlmICgoZmFjdG9yID09IDApIHx8IChmYWN0b3IgPT0gTVBUX0FTWU5DKSkKLQkJCQkJCWZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19TWU5DOwotCQkJCX0KLQkJCX0KLQotCQkJLyogRm9yY2UgdG8gYXN5bmMsIG5hcnJvdyAqLwotCQkJbXB0c2NzaWhfc2V0RGV2aWNlUGFnZTFGbGFncygwLCBNUFRfQVNZTkMsIDAsICZyZXF1ZXN0ZWQsCi0JCQkJCSZjb25maWd1cmF0aW9uLCBmbGFncyk7Ci0JCQlkbmVnb3ByaW50aygoInN5bmNyb25pemUgY2FjaGU6IGlkPSVkIHdpZHRoPTAgZmFjdG9yPU1QVF9BU1lOQyAiCi0JCQkJIm9mZnNldD0wIG5lZ29GbGFncz0leCByZXF1ZXN0PSV4IGNvbmZpZz0leFxuIiwKLQkJCQlpZCwgZmxhZ3MsIHJlcXVlc3RlZCwgY29uZmlndXJhdGlvbikpOwotCQkJcGNmZzFEYXRhLT5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gY3B1X3RvX2xlMzIocmVxdWVzdGVkKTsKLQkJCXBjZmcxRGF0YS0+UmVzZXJ2ZWQgPSAwOwotCQkJcGNmZzFEYXRhLT5Db25maWd1cmF0aW9uID0gY3B1X3RvX2xlMzIoY29uZmlndXJhdGlvbik7Ci0JCQljZmcucGFnZUFkZHIgPSAoYnVzPDw4KSB8IGlkOwotCQkJbXB0X2NvbmZpZyhoZC0+aW9jLCAmY2ZnKTsKLQkJfQotCi0JCS8qIElmIHRhcmdldCBQdHIgTlVMTCBvciBpZiB0aGlzIHRhcmdldCBpcyBOT1QgYSBkaXNrLCBza2lwLgotCQkgKi8KLQkJaWYgKChwVGFyZ2V0KSAmJiAocFRhcmdldC0+aW5xX2RhdGFbMF0gPT0gVFlQRV9ESVNLKSl7Ci0JCQlmb3IgKGx1bj0wOyBsdW4gPD0gTVBUX0xBU1RfTFVOOyBsdW4rKykgewotCQkJCS8qIElmIExVTiBwcmVzZW50LCBpc3N1ZSB0aGUgY29tbWFuZAotCQkJCSAqLwotCQkJCWx1bl9pbmRleCA9IChsdW4gPj4gNSk7ICAvKiAzMiBsdW5zIHBlciBsdW5faW5kZXggKi8KLQkJCQlpbmRleGVkX2x1biA9IChsdW4gJSAzMik7Ci0JCQkJaWYgKHBUYXJnZXQtPmx1bnNbbHVuX2luZGV4XSAmICgxPDxpbmRleGVkX2x1bikpIHsKLQkJCQkJaW9jbWQubHVuID0gbHVuOwotCQkJCQkodm9pZCkgbXB0c2NzaWhfZG9fY21kKGhkLCAmaW9jbWQpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIGdldCBuZXh0IHJlbGV2YW50IGRldmljZSAqLwotCQlpZCsrOwotCi0JCWlmIChpZCA9PSBob3N0SWQpCi0JCQlpZCsrOwotCi0JCWlmIChpZCA+IG1heF9pZCkgewotCQkJaWQgPSAwOwotCQkJYnVzKys7Ci0JCX0KLQl9Ci0KLQlpZiAocGNmZzFEYXRhKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhlYWRlcjEuUGFnZUxlbmd0aCAqIDQsIHBjZmcxRGF0YSwgY2ZnMV9kbWFfYWRkcik7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsgaSsrKSB7CisJCWlmIChpZCA9PSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlza1tpXS5QaHlzRGlza0lEKQorCQkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTAxLDggKzQwMjEsOCBAQAogCiAJCQltc2xlZXAoMjUwKTsKIAotCQkJLyogRFYgb25seSB0byBTQ1NJIGFkYXB0ZXJzICovCi0JCQlpZiAoaW9jLT5idXNfdHlwZSAhPSBTQ1NJKQorCQkJLyogRFYgb25seSB0byBTUEkgYWRhcHRlcnMgKi8KKwkJCWlmIChpb2MtPmJ1c190eXBlICE9IFNQSSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbG9va3Mgb2sgKi8KQEAgLTQyMDUsMzIgKzQxMjUsMTIgQEAKIAlyZXR1cm47CiB9CiAKLS8qIFNlYXJjaCBJT0MgcGFnZSAzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGhpZGRlbiBwaHlzaWNhbCBkaXNrCi0gKi8KLS8qIFNlYXJjaCBJT0MgcGFnZSAzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGhpZGRlbiBwaHlzaWNhbCBkaXNrCi0gKi8KLXN0YXRpYyBpbnQKLW1wdHNjc2loX2lzX3BoeXNfZGlzayhNUFRfQURBUFRFUiAqaW9jLCBpbnQgaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWlvYy0+cmFpZF9kYXRhLmlzUmFpZCB8fCAhaW9jLT5yYWlkX2RhdGEucElvY1BnMykKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOyBpKyspIHsKLQkJaWYgKGlkID09IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrW2ldLlBoeXNEaXNrSUQpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogV3JpdGUgU0RQMSBpZiBubyBRQVMgaGFzIGJlZW4gZW5hYmxlZAogICovCiBzdGF0aWMgdm9pZAogbXB0c2NzaWhfcWFzX2NoZWNrKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgaWQpCiB7Ci0JVmlydERldmljZSAqcFRhcmdldDsKKwlWaXJ0VGFyZ2V0ICp2dGFyZ2V0OwogCWludCBpaTsKIAogCWlmIChoZC0+VGFyZ2V0cyA9PSBOVUxMKQpAQCAtNDI0MywxMSArNDE0MywxMSBAQAogCQlpZiAoKGhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW2lpXSAmIE1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FKSAhPSAwKQogCQkJY29udGludWU7CiAKLQkJcFRhcmdldCA9IGhkLT5UYXJnZXRzW2lpXTsKKwkJdnRhcmdldCA9IGhkLT5UYXJnZXRzW2lpXTsKIAotCQlpZiAoKHBUYXJnZXQgIT0gTlVMTCkgJiYgKCFwVGFyZ2V0LT5yYWlkVm9sdW1lKSkgewotCQkJaWYgKChwVGFyZ2V0LT5uZWdvRmxhZ3MgJiBoZC0+aW9jLT5zcGlfZGF0YS5ub1FhcykgPT0gMCkgewotCQkJCXBUYXJnZXQtPm5lZ29GbGFncyB8PSBoZC0+aW9jLT5zcGlfZGF0YS5ub1FhczsKKwkJaWYgKCh2dGFyZ2V0ICE9IE5VTEwpICYmICghdnRhcmdldC0+cmFpZFZvbHVtZSkpIHsKKwkJCWlmICgodnRhcmdldC0+bmVnb0ZsYWdzICYgaGQtPmlvYy0+c3BpX2RhdGEubm9RYXMpID09IDApIHsKKwkJCQl2dGFyZ2V0LT5uZWdvRmxhZ3MgfD0gaGQtPmlvYy0+c3BpX2RhdGEubm9RYXM7CiAJCQkJZG5lZ29wcmludGsoKCJ3cml0ZVNEUDE6IGlkPSVkIGZsYWdzPTBcbiIsIGlkKSk7CiAJCQkJbXB0c2NzaWhfd3JpdGVTRFAxKGhkLCAwLCBpaSwgMCk7CiAJCQl9CkBAIC00Mjg3LDcgKzQxODcsNyBAQAogbXB0c2NzaWhfZG9EdihNUFRfU0NTSV9IT1NUICpoZCwgaW50IGJ1c19udW1iZXIsIGludCBpZCkKIHsKIAlNUFRfQURBUFRFUgkJKmlvYyA9IGhkLT5pb2M7Ci0JVmlydERldmljZQkJKnBUYXJnZXQ7CisJVmlydFRhcmdldAkJKnZ0YXJnZXQ7CiAJU0NTSURldmljZVBhZ2UxX3QJKnBjZmcxRGF0YTsKIAlTQ1NJRGV2aWNlUGFnZTBfdAkqcGNmZzBEYXRhOwogCXU4CQkJKnBidWYxOwpAQCAtNDM1OCwxMiArNDI1OCwxMiBAQAogCWlvY21kLnBoeXNEaXNrTnVtID0gLTE7CiAJaW9jbWQucnN2ZCA9IGlvY21kLnJzdmQyID0gMDsKIAotCXBUYXJnZXQgPSBoZC0+VGFyZ2V0c1tpZF07CisJdnRhcmdldCA9IGhkLT5UYXJnZXRzW2lkXTsKIAogCS8qIFVzZSB0YWdnZWQgY29tbWFuZHMgaWYgcG9zc2libGUuCiAJICovCi0JaWYgKHBUYXJnZXQpIHsKLQkJaWYgKHBUYXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVMpCisJaWYgKHZ0YXJnZXQpIHsKKwkJaWYgKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVMpCiAJCQlpb2NtZC5mbGFncyB8PSBNUFRfSUNGTEFHX1RBR0dFRF9DTUQ7CiAJCWVsc2UgewogCQkJaWYgKGhkLT5pb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkIDwgMHgwMTAwMDYwMCkKQEAgLTQ1NzksNyArNDQ3OSw3IEBACiAJCS8qIFJlc2V0IHRoZSBzaXplIGZvciBkaXNrcwogCQkgKi8KIAkJaW5xMCA9ICgqcGJ1ZjEpICYgMHgxRjsKLQkJaWYgKChpbnEwID09IDApICYmIHBUYXJnZXQgJiYgIXBUYXJnZXQtPnJhaWRWb2x1bWUpIHsKKwkJaWYgKChpbnEwID09IDApICYmIHZ0YXJnZXQgJiYgIXZ0YXJnZXQtPnJhaWRWb2x1bWUpIHsKIAkJCXN6ID0gMHg0MDsKIAkJCWlvY21kLnNpemUgPSBzejsKIAkJfQpAQCAtNDU4OSw4ICs0NDg5LDcgQEAKIAkJICovCiAJCWlmIChpbnEwID09IFRZUEVfUFJPQ0VTU09SKSB7CiAJCQltcHRzY3NpaF9pbml0VGFyZ2V0KGhkLAotCQkJCWJ1cywKLQkJCQlpZCwKKwkJCQl2dGFyZ2V0LAogCQkJCWx1biwKIAkJCQlwYnVmMSwKIAkJCQlzeik7CkBAIC00NjA0LDIyICs0NTAzLDIyIEBACiAJCQlnb3RvIHRhcmdldF9kb25lOwogCiAJCWlmIChzeiA9PSAweDQwKSB7Ci0JCQlpZiAoKHBUYXJnZXQtPm1heFdpZHRoID09IDEpICYmIChwVGFyZ2V0LT5tYXhPZmZzZXQpICYmIChuZmFjdG9yIDwgMHgwQSkKLQkJCQkmJiAocFRhcmdldC0+bWluU3luY0ZhY3RvciA+IDB4MDkpKSB7CisJCQlpZiAoKHZ0YXJnZXQtPm1heFdpZHRoID09IDEpICYmICh2dGFyZ2V0LT5tYXhPZmZzZXQpICYmIChuZmFjdG9yIDwgMHgwQSkKKwkJCQkmJiAodnRhcmdldC0+bWluU3luY0ZhY3RvciA+IDB4MDkpKSB7CiAJCQkJaWYgKChwYnVmMVs1Nl0gJiAweDA0KSA9PSAwKQogCQkJCQk7CiAJCQkJZWxzZSBpZiAoKHBidWYxWzU2XSAmIDB4MDEpID09IDEpIHsKLQkJCQkJcFRhcmdldC0+bWluU3luY0ZhY3RvciA9CisJCQkJCXZ0YXJnZXQtPm1pblN5bmNGYWN0b3IgPQogCQkJCQkgICAgbmZhY3RvciA+IE1QVF9VTFRSQTMyMCA/IG5mYWN0b3IgOiBNUFRfVUxUUkEzMjA7CiAJCQkJfSBlbHNlIHsKLQkJCQkJcFRhcmdldC0+bWluU3luY0ZhY3RvciA9CisJCQkJCXZ0YXJnZXQtPm1pblN5bmNGYWN0b3IgPQogCQkJCQkgICAgbmZhY3RvciA+IE1QVF9VTFRSQTE2MCA/IG5mYWN0b3IgOiBNUFRfVUxUUkExNjA7CiAJCQkJfQogCi0JCQkJZHYubWF4LmZhY3RvciA9IHBUYXJnZXQtPm1pblN5bmNGYWN0b3I7CisJCQkJZHYubWF4LmZhY3RvciA9IHZ0YXJnZXQtPm1pblN5bmNGYWN0b3I7CiAKIAkJCQlpZiAoKHBidWYxWzU2XSAmIDB4MDIpID09IDApIHsKLQkJCQkJcFRhcmdldC0+bmVnb0ZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19RQVM7CisJCQkJCXZ0YXJnZXQtPm5lZ29GbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fUUFTOwogCQkJCQloZC0+aW9jLT5zcGlfZGF0YS5ub1FhcyA9IE1QVF9UQVJHRVRfTk9fTkVHT19RQVM7CiAJCQkJCWRkdnByaW50aygoTVlJT0Nfc19OT1RFX0ZNVAogCQkJCQkgICAgIkRWOiBTdGFydCBCYXNpYyBub1FhcyBvbiBpZD0lZCBkdWUgdG8gcGJ1ZjFbNTZdPSV4XG4iLApAQCAtNDcwMiw4ICs0NjAxLDcgQEAKIAkJCQkJCSAgICAiRFY6SW5xdWlyeSBjb21wYXJlZCBpZD0lZCwgY2FsbGluZyBpbml0VGFyZ2V0XG4iLCBpb2MtPm5hbWUsIGlkKSk7CiAJCQkJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpZF0gJj0gfk1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FOwogCQkJCQkJbXB0c2NzaWhfaW5pdFRhcmdldChoZCwKLQkJCQkJCQlidXMsCi0JCQkJCQkJaWQsCisJCQkJCQkJdnRhcmdldCwKIAkJCQkJCQlsdW4sCiAJCQkJCQkJcGJ1ZjEsCiAJCQkJCQkJc3opOwpAQCAtNTIwNCw3ICs1MTAyLDcgQEAKIHN0YXRpYyB2b2lkCiBtcHRzY3NpaF9kdl9wYXJtcyhNUFRfU0NTSV9IT1NUICpoZCwgRFZQQVJBTUVURVJTICpkdix2b2lkICpwUGFnZSkKIHsKLQlWaXJ0RGV2aWNlCQkqcFRhcmdldDsKKwlWaXJ0VGFyZ2V0CQkqdnRhcmdldDsKIAlTQ1NJRGV2aWNlUGFnZTBfdAkqcFBhZ2UwOwogCVNDU0lEZXZpY2VQYWdlMV90CSpwUGFnZTE7CiAJaW50CQkJdmFsID0gMCwgZGF0YSwgY29uZmlndXJhdGlvbjsKQEAgLTUyMjQsMTEgKzUxMjIsMTEgQEAKIAkJICogYWxyZWFkeSB0aHJvdHRsZWQgYmFjay4KIAkJICovCiAJCW5lZ29GbGFncyA9IGhkLT5pb2MtPnNwaV9kYXRhLm5vUWFzOwotCQlpZiAoKGhkLT5UYXJnZXRzKSYmKChwVGFyZ2V0ID0gaGQtPlRhcmdldHNbKGludClpZF0pICE9IE5VTEwpICYmICFwVGFyZ2V0LT5yYWlkVm9sdW1lKSB7Ci0JCQl3aWR0aCA9IHBUYXJnZXQtPm1heFdpZHRoOwotCQkJb2Zmc2V0ID0gcFRhcmdldC0+bWF4T2Zmc2V0OwotCQkJZmFjdG9yID0gcFRhcmdldC0+bWluU3luY0ZhY3RvcjsKLQkJCW5lZ29GbGFncyB8PSBwVGFyZ2V0LT5uZWdvRmxhZ3M7CisJCWlmICgoaGQtPlRhcmdldHMpJiYoKHZ0YXJnZXQgPSBoZC0+VGFyZ2V0c1soaW50KWlkXSkgIT0gTlVMTCkgJiYgIXZ0YXJnZXQtPnJhaWRWb2x1bWUpIHsKKwkJCXdpZHRoID0gdnRhcmdldC0+bWF4V2lkdGg7CisJCQlvZmZzZXQgPSB2dGFyZ2V0LT5tYXhPZmZzZXQ7CisJCQlmYWN0b3IgPSB2dGFyZ2V0LT5taW5TeW5jRmFjdG9yOworCQkJbmVnb0ZsYWdzIHw9IHZ0YXJnZXQtPm5lZ29GbGFnczsKIAkJfSBlbHNlIHsKIAkJCWlmIChoZC0+aW9jLT5zcGlfZGF0YS5udnJhbSAmJiAoaGQtPmlvYy0+c3BpX2RhdGEubnZyYW1baWRdICE9IE1QVF9IT1NUX05WUkFNX0lOVkFMSUQpKSB7CiAJCQkJZGF0YSA9IGhkLT5pb2MtPnNwaV9kYXRhLm52cmFtW2lkXTsKQEAgLTU0MzAsMTEgKzUzMjgsMTEgQEAKIAkJICogb3Igb3ZlcndyaXRlIG52cmFtIChwaHlzIGRpc2tzIG9ubHkpLgogCQkgKi8KIAotCQlpZiAoKGhkLT5UYXJnZXRzKSYmKChwVGFyZ2V0ID0gaGQtPlRhcmdldHNbKGludClpZF0pICE9IE5VTEwpICYmICFwVGFyZ2V0LT5yYWlkVm9sdW1lICkgewotCQkJcFRhcmdldC0+bWF4V2lkdGggPSBkdi0+bm93LndpZHRoOwotCQkJcFRhcmdldC0+bWF4T2Zmc2V0ID0gZHYtPm5vdy5vZmZzZXQ7Ci0JCQlwVGFyZ2V0LT5taW5TeW5jRmFjdG9yID0gZHYtPm5vdy5mYWN0b3I7Ci0JCQlwVGFyZ2V0LT5uZWdvRmxhZ3MgPSBkdi0+bm93LmZsYWdzOworCQlpZiAoKGhkLT5UYXJnZXRzKSYmKCh2dGFyZ2V0ID0gaGQtPlRhcmdldHNbKGludClpZF0pICE9IE5VTEwpICYmICF2dGFyZ2V0LT5yYWlkVm9sdW1lICkgeworCQkJdnRhcmdldC0+bWF4V2lkdGggPSBkdi0+bm93LndpZHRoOworCQkJdnRhcmdldC0+bWF4T2Zmc2V0ID0gZHYtPm5vdy5vZmZzZXQ7CisJCQl2dGFyZ2V0LT5taW5TeW5jRmFjdG9yID0gZHYtPm5vdy5mYWN0b3I7CisJCQl2dGFyZ2V0LT5uZWdvRmxhZ3MgPSBkdi0+bm93LmZsYWdzOwogCQl9IGVsc2UgewogCQkJLyogUHJlc2VydiBhbGwgZmxhZ3MsIHVzZQogCQkJICogcmVhZC1tb2RpZnktd3JpdGUgYWxnb3JpdGhtCkBAIC01NTg4LDYgKzU0ODYsOTQgQEAKIAkJYnJlYWs7CiAJfQogfQorCisvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCisvKiBJZiBEViBkaXNhYmxlZCAobmVnb052cmFtIHNldCB0byBVU0VfTlZBUk0pIG9yIGlmIG5vdCBMVU4gMCwgcmV0dXJuLgorICogRWxzZSBzZXQgdGhlIE5FRURfRFYgZmxhZyBhZnRlciBSZWFkIENhcGFjaXR5IElzc3VlZCAoZGlza3MpCisgKiBvciBNb2RlIFNlbnNlIChjZHJvbXMpLgorICoKKyAqIFRhcGVzLCBpbml0VGFyZ2V0IHdpbGwgc2V0IHRoaXMgZmxhZyBvbiBjb21wbGV0aW9uIG9mIElucXVpcnkgY29tbWFuZC4KKyAqIENhbGxlZCBvbmx5IGlmIERWX05PVF9ET05FIGZsYWcgaXMgc2V0CisgKi8KK3N0YXRpYyB2b2lkCittcHRzY3NpaF9zZXRfZHZmbGFncyhNUFRfU0NTSV9IT1NUICpoZCwgc3RydWN0IHNjc2lfY21uZCAqc2MpCit7CisJTVBUX0FEQVBURVIJKmlvYyA9IGhkLT5pb2M7CisJdTggY21kOworCVNwaUNmZ0RhdGEJKnBTcGk7CisKKwlkZHZ0cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCisJCSIgc2V0X2R2ZmxhZ3M6IGlkPSVkIGx1bj0lZCBuZWdvTnZyYW09JXggY21kPSV4XG4iLAorCQloZC0+aW9jLT5uYW1lLCBzYy0+ZGV2aWNlLT5pZCwgc2MtPmRldmljZS0+bHVuICwgaGQtPm5lZ29OdnJhbSwgc2MtPmNtbmRbMF0pKTsKKworCWlmICgoc2MtPmRldmljZS0+bHVuICE9IDApIHx8IChoZC0+bmVnb052cmFtICE9IDApKQorCQlyZXR1cm47CisKKwljbWQgPSBzYy0+Y21uZFswXTsKKworCWlmICgoY21kID09IFJFQURfQ0FQQUNJVFkpIHx8IChjbWQgPT0gTU9ERV9TRU5TRSkpIHsKKwkJcFNwaSA9ICZpb2MtPnNwaV9kYXRhOworCQlpZiAoKGlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IHNjLT5kZXZpY2UtPmlkKSkgJiYgaW9jLT5yYWlkX2RhdGEucElvY1BnMykgeworCQkJLyogU2V0IE5FRURfRFYgZm9yIGFsbCBoaWRkZW4gZGlza3MKKwkJCSAqLworCQkJSW9jM1BoeXNEaXNrX3QgKnBQRGlzayA9ICBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKKwkJCWludAkJbnVtUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7CisKKwkJCXdoaWxlIChudW1QRGlzaykgeworCQkJCXBTcGktPmR2U3RhdHVzW3BQRGlzay0+UGh5c0Rpc2tJRF0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKKwkJCQlkZHZ0cHJpbnRrKCgiTkVFRF9EViBzZXQgZm9yIHBoeXMgZGlzayBpZCAlZFxuIiwgcFBEaXNrLT5QaHlzRGlza0lEKSk7CisJCQkJcFBEaXNrKys7CisJCQkJbnVtUERpc2stLTsKKwkJCX0KKwkJfQorCQlwU3BpLT5kdlN0YXR1c1tzYy0+ZGV2aWNlLT5pZF0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKKwkJZGR2dHByaW50aygoIk5FRURfRFYgc2V0IGZvciB2aXNpYmxlIGRpc2sgaWQgJWRcbiIsIHNjLT5kZXZpY2UtPmlkKSk7CisJfQorfQorCisvKiBtcHRzY3NpaF9yYWlkX3NldF9kdl9mbGFncygpCisgKgorICogTmV3IG9yIHJlcGxhY2VkIGRpc2suIFNldCBEViBmbGFnIGFuZCBzY2hlZHVsZSBEVi4KKyAqLworc3RhdGljIHZvaWQKK21wdHNjc2loX3NldF9kdmZsYWdzX3JhaWQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBpZCkKK3sKKwlNUFRfQURBUFRFUgkqaW9jID0gaGQtPmlvYzsKKwlTcGlDZmdEYXRhCSpwU3BpID0gJmlvYy0+c3BpX2RhdGE7CisJSW9jM1BoeXNEaXNrX3QJKnBQRGlzazsKKwlpbnQJCSBudW1QRGlzazsKKworCWlmIChoZC0+bmVnb052cmFtICE9IDApCisJCXJldHVybjsKKworCWRkdnRwcmludGsoKCJEViByZXF1ZXN0ZWQgZm9yIHBoeXMgZGlzayBpZCAlZFxuIiwgaWQpKTsKKwlpZiAoaW9jLT5yYWlkX2RhdGEucElvY1BnMykgeworCQlwUERpc2sgPSAgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7CisJCW51bVBEaXNrID0gaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOworCQl3aGlsZSAobnVtUERpc2spIHsKKwkJCWlmIChpZCA9PSBwUERpc2stPlBoeXNEaXNrTnVtKSB7CisJCQkJcFNwaS0+ZHZTdGF0dXNbcFBEaXNrLT5QaHlzRGlza0lEXSA9CisJCQkJICAgIChNUFRfU0NTSUNGR19ORUVEX0RWIHwgTVBUX1NDU0lDRkdfRFZfTk9UX0RPTkUpOworCQkJCXBTcGktPmZvcmNlRHYgPSBNUFRfU0NTSUNGR19ORUVEX0RWOworCQkJCWRkdnRwcmludGsoKCJORUVEX0RWIHNldCBmb3IgcGh5cyBkaXNrIGlkICVkXG4iLAorCQkJCSAgICBwUERpc2stPlBoeXNEaXNrSUQpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBQRGlzaysrOworCQkJbnVtUERpc2stLTsKKwkJfQorCisJCWlmIChudW1QRGlzayA9PSAwKSB7CisJCQkvKiBUaGUgcGh5c2ljYWwgZGlzayB0aGF0IG5lZWRzIERWIHdhcyBub3QgZm91bmQKKwkJCSAqIGluIHRoZSBzdG9yZWQgSU9DIFBhZ2UgMy4gVGhlIGRyaXZlciBtdXN0IHJlbG9hZAorCQkJICogdGhpcyBwYWdlLiBEViByb3V0aW5lIHdpbGwgc2V0IHRoZSBORUVEX0RWIGZsYWcgZm9yCisJCQkgKiBhbGwgcGh5cyBkaXNrcyB0aGF0IGhhdmUgRFZfTk9UX0RPTkUgc2V0LgorCQkJICovCisJCQlwU3BpLT5mb3JjZUR2ID0gTVBUX1NDU0lDRkdfTkVFRF9EViB8IE1QVF9TQ1NJQ0ZHX1JFTE9BRF9JT0NfUEczOworCQkJZGR2dHByaW50aygoInBoeXMgZGlzayAlZCBub3QgZm91bmQuIFNldHRpbmcgcmVsb2FkIElPQyBQZzMgRmxhZ1xuIixpZCkpOworCQl9CisJfQorfQogI2VuZGlmIC8qIH5NUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04gKi8KIAogRVhQT1JUX1NZTUJPTChtcHRzY3NpaF9yZW1vdmUpOwpAQCAtNTU5OSw3ICs1NTg1LDkgQEAKIEVYUE9SVF9TWU1CT0wobXB0c2NzaWhfcHJvY19pbmZvKTsKIEVYUE9SVF9TWU1CT0wobXB0c2NzaWhfaW5mbyk7CiBFWFBPUlRfU1lNQk9MKG1wdHNjc2loX3FjbWQpOworRVhQT1JUX1NZTUJPTChtcHRzY3NpaF90YXJnZXRfYWxsb2MpOwogRVhQT1JUX1NZTUJPTChtcHRzY3NpaF9zbGF2ZV9hbGxvYyk7CitFWFBPUlRfU1lNQk9MKG1wdHNjc2loX3RhcmdldF9kZXN0cm95KTsKIEVYUE9SVF9TWU1CT0wobXB0c2NzaWhfc2xhdmVfZGVzdHJveSk7CiBFWFBPUlRfU1lNQk9MKG1wdHNjc2loX3NsYXZlX2NvbmZpZ3VyZSk7CiBFWFBPUlRfU1lNQk9MKG1wdHNjc2loX2Fib3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaAppbmRleCA5NzFmZGE0Li5kM2NiYTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCkBAIC05MSw3ICs5MSw5IEBACiBleHRlcm4gaW50IG1wdHNjc2loX3Byb2NfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgZnVuYyk7CiBleHRlcm4gY29uc3QgY2hhciAqIG1wdHNjc2loX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqU0Nob3N0KTsKIGV4dGVybiBpbnQgbXB0c2NzaWhfcWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworZXh0ZXJuIGludCBtcHRzY3NpaF90YXJnZXRfYWxsb2Moc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKIGV4dGVybiBpbnQgbXB0c2NzaWhfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgbXB0c2NzaWhfdGFyZ2V0X2Rlc3Ryb3koc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKIGV4dGVybiB2b2lkIG1wdHNjc2loX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggNWMwZTMwNy4uY2UzMzJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC0xMDMsMTMgKzEwMywxNiBAQAogc3RhdGljIGludAltcHRzcGlJbnRlcm5hbEN0eCA9IC0xOyAvKiBVc2VkIG9ubHkgZm9yIGludGVybmFsIGNvbW1hbmRzICovCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG1wdHNwaV9kcml2ZXJfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCQk9IFRISVNfTU9EVUxFLAogCS5wcm9jX25hbWUJCQk9ICJtcHRzcGkiLAogCS5wcm9jX2luZm8JCQk9IG1wdHNjc2loX3Byb2NfaW5mbywKIAkubmFtZQkJCQk9ICJNUFQgU1BJIEhvc3QiLAogCS5pbmZvCQkJCT0gbXB0c2NzaWhfaW5mbywKIAkucXVldWVjb21tYW5kCQkJPSBtcHRzY3NpaF9xY21kLAorCS50YXJnZXRfYWxsb2MJCQk9IG1wdHNjc2loX3RhcmdldF9hbGxvYywKIAkuc2xhdmVfYWxsb2MJCQk9IG1wdHNjc2loX3NsYXZlX2FsbG9jLAogCS5zbGF2ZV9jb25maWd1cmUJCT0gbXB0c2NzaWhfc2xhdmVfY29uZmlndXJlLAorCS50YXJnZXRfZGVzdHJveQkJCT0gbXB0c2NzaWhfdGFyZ2V0X2Rlc3Ryb3ksCiAJLnNsYXZlX2Rlc3Ryb3kJCQk9IG1wdHNjc2loX3NsYXZlX2Rlc3Ryb3ksCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aCAJCT0gbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IG1wdHNjc2loX2Fib3J0LApAQCAtMTc3LDEzICsxODAsMTUgQEAKIAkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJICAiU2tpcHBpbmcgYmVjYXVzZSBpdCdzIG5vdCBvcGVyYXRpb25hbCFcbiIsCiAJCSAgaW9jLT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBvdXRfbXB0c3BpX3Byb2JlOwogCX0KIAogCWlmICghaW9jLT5hY3RpdmUpIHsKIAkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIlNraXBwaW5nIGJlY2F1c2UgaXQncyBkaXNhYmxlZCFcbiIsCiAJCSAgaW9jLT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBvdXRfbXB0c3BpX3Byb2JlOwogCX0KIAogCS8qICBTYW5pdHkgY2hlY2sgLSBlbnN1cmUgYXQgbGVhc3QgMSBwb3J0IGlzIElOSVRJQVRPUiBjYXBhYmxlCkBAIC0yMDgsNyArMjEzLDggQEAKIAkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIFNDU0kgc3Vic3lzdGVtXG4iLAogCQkJaW9jLT5uYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisJCWVycm9yID0gLTE7CisJCWdvdG8gb3V0X21wdHNwaV9wcm9iZTsKICAgICAgICAgfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+RnJlZVFsb2NrLCBmbGFncyk7CkBAIC0yODYsNyArMjkyLDcgQEAKIAltZW0gPSBrbWFsbG9jKHN6LCBHRlBfQVRPTUlDKTsKIAlpZiAobWVtID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIG1wdHNwaV9wcm9iZV9mYWlsZWQ7CisJCWdvdG8gb3V0X21wdHNwaV9wcm9iZTsKIAl9CiAKIAltZW1zZXQobWVtLCAwLCBzeik7CkBAIC0zMDQsMTQgKzMxMCwxNCBAQAogCW1lbSA9IGttYWxsb2Moc3osIEdGUF9BVE9NSUMpOwogCWlmIChtZW0gPT0gTlVMTCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gbXB0c3BpX3Byb2JlX2ZhaWxlZDsKKwkJZ290byBvdXRfbXB0c3BpX3Byb2JlOwogCX0KIAogCW1lbXNldChtZW0sIDAsIHN6KTsKLQloZC0+VGFyZ2V0cyA9IChWaXJ0RGV2aWNlICoqKSBtZW07CisJaGQtPlRhcmdldHMgPSAoVmlydFRhcmdldCAqKikgbWVtOwogCiAJZHByaW50aygoS0VSTl9JTkZPCi0JICAiICBUYXJnZXRzIEAgJXAsIHN6PSVkXG4iLCBoZC0+VGFyZ2V0cywgc3opKTsKKwkgICIgIHZkZXYgQCAlcCwgc3o9JWRcbiIsIGhkLT5UYXJnZXRzLCBzeikpOwogCiAJLyogQ2xlYXIgdGhlIFRNIGZsYWdzCiAJICovCkBAIC0zODUsMTMgKzM5MSwxMyBAQAogCWlmKGVycm9yKSB7CiAJCWRwcmludGsoKEtFUk5fRVJSIE1ZTkFNCiAJCSAgInNjc2lfYWRkX2hvc3QgZmFpbGVkXG4iKSk7Ci0JCWdvdG8gbXB0c3BpX3Byb2JlX2ZhaWxlZDsKKwkJZ290byBvdXRfbXB0c3BpX3Byb2JlOwogCX0KIAogCXNjc2lfc2Nhbl9ob3N0KHNoKTsKIAlyZXR1cm4gMDsKIAotbXB0c3BpX3Byb2JlX2ZhaWxlZDoKK291dF9tcHRzcGlfcHJvYmU6CiAKIAltcHRzY3NpaF9yZW1vdmUocGRldik7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IDMwYmVlMTEuLmQyMTAyYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTU4NiwxNiArNTg2LDE2IEBACiAJZG1hX2FkZHJfdCB0eF9idWZzX2RtYTsKIAlzaWduZWQgY2hhciBwaHlzWzRdOwkJLyogTUlJIGRldmljZSBhZGRyZXNzZXMuICovCiAJY2hhciB0d2lzdGllLCB0d2lzdF9yb3csIHR3aXN0X2NvbDsJLyogVHdpc3RlciB0dW5lIHN0YXRlLiAqLwotCXVuc2lnbmVkIGludCBkZWZhdWx0X3BvcnQ6NDsJLyogTGFzdCBkZXYtPmlmX3BvcnQgdmFsdWUuICovCisJdW5zaWduZWQgaW50IGRlZmF1bHRfcG9ydCA6IDQ7CS8qIExhc3QgZGV2LT5pZl9wb3J0IHZhbHVlLiAqLworCXVuc2lnbmVkIGludCBoYXZlX3RocmVhZCA6IDE7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXNwaW5sb2NrX3QgcnhfbG9jazsKIAljaGlwX3QgY2hpcHNldDsKLQlwaWRfdCB0aHJfcGlkOwotCXdhaXRfcXVldWVfaGVhZF90IHRocl93YWl0OwotCXN0cnVjdCBjb21wbGV0aW9uIHRocl9leGl0ZWQ7CiAJdTMyIHJ4X2NvbmZpZzsKIAlzdHJ1Y3QgcnRsX2V4dHJhX3N0YXRzIHhzdGF0czsKLQlpbnQgdGltZV90b19kaWU7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGhyZWFkOworCiAJc3RydWN0IG1paV9pZl9pbmZvIG1paTsKIAl1bnNpZ25lZCBpbnQgcmVnc19sZW47CiAJdW5zaWduZWQgbG9uZyBmaWZvX2NvcHlfdGltZW91dDsKQEAgLTYyMCw3ICs2MjAsNyBAQAogc3RhdGljIGludCBtZGlvX3JlYWQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCiAJCQlpbnQgdmFsKTsKLXN0YXRpYyB2b2lkIHJ0bDgxMzlfc3RhcnRfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgcnRsODEzOV9zdGFydF90aHJlYWQoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHApOwogc3RhdGljIHZvaWQgcnRsODEzOV90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfaW5pdF9yaW5nIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcnRsODEzOV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNjM3LDYgKzYzNyw3IEBACiBzdGF0aWMgdm9pZCBydGw4MTM5X3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIF9fc2V0X3J4X21vZGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcnRsODEzOV9od19zdGFydCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBydGw4MTM5X3RocmVhZCAodm9pZCAqX2RhdGEpOwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBydGw4MTM5X2V0aHRvb2xfb3BzOwogCiAvKiB3cml0ZSBNTUlPIHJlZ2lzdGVyLCB3aXRoIGZsdXNoICovCkBAIC0xMDA3LDggKzEwMDgsNyBAQAogCQkoZGVidWcgPCAwID8gUlRMODEzOV9ERUZfTVNHX0VOQUJMRSA6ICgoMSA8PCBkZWJ1ZykgLSAxKSk7CiAJc3Bpbl9sb2NrX2luaXQgKCZ0cC0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQgKCZ0cC0+cnhfbG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCAoJnRwLT50aHJfd2FpdCk7Ci0JaW5pdF9jb21wbGV0aW9uICgmdHAtPnRocl9leGl0ZWQpOworCUlOSVRfV09SSygmdHAtPnRocmVhZCwgcnRsODEzOV90aHJlYWQsIGRldik7CiAJdHAtPm1paS5kZXYgPSBkZXY7CiAJdHAtPm1paS5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7CiAJdHAtPm1paS5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsKQEAgLTEzNDUsNyArMTM0NSw3IEBACiAJCQlkZXYtPmlycSwgUlRMX1I4IChNZWRpYVN0YXR1cyksCiAJCQl0cC0+bWlpLmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKIAotCXJ0bDgxMzlfc3RhcnRfdGhyZWFkKGRldik7CisJcnRsODEzOV9zdGFydF90aHJlYWQodHApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTk0LDU1ICsxNTk0LDQzIEBACiAJCSBSVExfUjggKENvbmZpZzEpKTsKIH0KIAotc3RhdGljIGludCBydGw4MTM5X3RocmVhZCAodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIHJ0bDgxMzlfdGhyZWFkICh2b2lkICpfZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gX2RhdGE7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHRocl9kZWxheTsKIAotCWRhZW1vbml6ZSgiJXMiLCBkZXYtPm5hbWUpOwotCWFsbG93X3NpZ25hbChTSUdURVJNKTsKLQotCXdoaWxlICgxKSB7Ci0JCXRpbWVvdXQgPSBuZXh0X3RpY2s7Ci0JCWRvIHsKLQkJCXRpbWVvdXQgPSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQgKCZ0cC0+dGhyX3dhaXQsIHRpbWVvdXQpOwotCQkJLyogbWFrZSBzd3N1c3AgaGFwcHkgd2l0aCBvdXIgdGhyZWFkICovCi0JCQl0cnlfdG9fZnJlZXplKCk7Ci0JCX0gd2hpbGUgKCFzaWduYWxfcGVuZGluZyAoY3VycmVudCkgJiYgKHRpbWVvdXQgPiAwKSk7Ci0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgewotCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKLQkJfQotCi0JCWlmICh0cC0+dGltZV90b19kaWUpCi0JCQlicmVhazsKLQotCQlpZiAocnRubF9sb2NrX2ludGVycnVwdGlibGUgKCkpCi0JCQlicmVhazsKKwlpZiAocnRubF9zaGxvY2tfbm93YWl0KCkgPT0gMCkgewogCQlydGw4MTM5X3RocmVhZF9pdGVyIChkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKIAkJcnRubF91bmxvY2sgKCk7CisKKwkJdGhyX2RlbGF5ID0gbmV4dF90aWNrOworCX0gZWxzZSB7CisJCS8qIHVubGlrZWx5IHJhY2UuICBtaXRpZ2F0ZSB3aXRoIGZhc3QgcG9sbC4gKi8KKwkJdGhyX2RlbGF5ID0gSFogLyAyOwogCX0KIAotCWNvbXBsZXRlX2FuZF9leGl0ICgmdHAtPnRocl9leGl0ZWQsIDApOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHAtPnRocmVhZCwgdGhyX2RlbGF5KTsKIH0KIAotc3RhdGljIHZvaWQgcnRsODEzOV9zdGFydF90aHJlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHJ0bDgxMzlfc3RhcnRfdGhyZWFkKHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwKQogewotCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXRwLT50aHJfcGlkID0gLTE7CiAJdHAtPnR3aXN0aWUgPSAwOwotCXRwLT50aW1lX3RvX2RpZSA9IDA7CiAJaWYgKHRwLT5jaGlwc2V0ID09IENIXzgxMzlfSykKIAkJdHAtPnR3aXN0aWUgPSAxOwogCWVsc2UgaWYgKHRwLT5kcnZfZmxhZ3MgJiBIQVNfTE5LX0NITkcpCiAJCXJldHVybjsKIAotCXRwLT50aHJfcGlkID0ga2VybmVsX3RocmVhZChydGw4MTM5X3RocmVhZCwgZGV2LCBDTE9ORV9GU3xDTE9ORV9GSUxFUyk7Ci0JaWYgKHRwLT50aHJfcGlkIDwgMCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBrZXJuZWwgdGhyZWFkXG4iLAotCQkJZGV2LT5uYW1lKTsKKwl0cC0+aGF2ZV90aHJlYWQgPSAxOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0cC0+dGhyZWFkLCBuZXh0X3RpY2spOworfQorCitzdGF0aWMgdm9pZCBydGw4MTM5X3N0b3BfdGhyZWFkKHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwKQoreworCWlmICh0cC0+aGF2ZV90aHJlYWQpIHsKKwkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmdHAtPnRocmVhZCk7CisJCXRwLT5oYXZlX3RocmVhZCA9IDA7CiAJfQogfQogCkBAIC0yMjI0LDIyICsyMjEyLDEyIEBACiB7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKLQlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKIAotCWlmICh0cC0+dGhyX3BpZCA+PSAwKSB7Ci0JCXRwLT50aW1lX3RvX2RpZSA9IDE7Ci0JCXdtYigpOwotCQlyZXQgPSBraWxsX3Byb2MgKHRwLT50aHJfcGlkLCBTSUdURVJNLCAxKTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBzaWduYWwgdGhyZWFkXG4iLCBkZXYtPm5hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmdHAtPnRocl9leGl0ZWQpOwotCX0KLQkKKwlydGw4MTM5X3N0b3BfdGhyZWFkKHRwKTsKKwogCWlmIChuZXRpZl9tc2dfaWZkb3duKHRwKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAweCU0LjR4LlxuIiwKIAkJCWRldi0+bmFtZSwgUlRMX1IxNiAoSW50clN0YXR1cykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggZWJkNzMxMy4uZTJmYTI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0xOTAxLDYgKzE5MDEsOCBAQAogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKK3NvdXJjZSAiZHJpdmVycy9uZXQvaXhwMjAwMC9LY29uZmlnIgorCiBjb25maWcgTVlSSV9TQlVTCiAJdHJpc3RhdGUgIk15cmlDT00gR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU0JVUwpAQCAtMjAwOCw3ICsyMDEwLDE4IEBACiAKIAkgIEl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGxpbmsgZmFpbG92ZXIgYW5kIG5ldHdvcmsgbWFuYWdlbWVudCAKIAkgIGZlYXR1cmVzIHRoYXQgInBvcnRhYmxlIiB2ZW5kb3Igc3VwcGxpZWQgc2s5OGxpbiBkcml2ZXIgZG9lcy4KLQkKKworCitjb25maWcgU0tZMgorCXRyaXN0YXRlICJTeXNLb25uZWN0IFl1a29uMiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBDUkMzMgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnQgdGhlIE1hcnZlbGwgWXVrb24gMiBHaWdhYml0IEV0aGVybmV0IGFkYXB0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNreTIuICBUaGlzIGlzIHJlY29tbWVuZGVkLgorCiBjb25maWcgU0s5OExJTgogCXRyaXN0YXRlICJNYXJ2ZWxsIFl1a29uIENoaXBzZXQgLyBTeXNLb25uZWN0IFNLLTk4eHggU3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtMjEyMCw3ICsyMTMzLDcgQEAKIAogY29uZmlnIFNQSURFUl9ORVQKIAl0cmlzdGF0ZSAiU3BpZGVyIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIgotCWRlcGVuZHMgb24gUENJICYmIFBQQ19CUEEKKwlkZXBlbmRzIG9uIFBDSSAmJiBQUENfQ0VMTAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IGNoaXBzIHByZXNlbnQgb24gdGhlCiAJICBDZWxsIFByb2Nlc3Nvci1CYXNlZCBCbGFkZXMgZnJvbSBJQk0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDRjZmZkMzQuLmI3NGE3Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xMyw3ICsxMywxMCBAQAogb2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcvCiBvYmotJChDT05GSUdfR0lBTkZBUikgKz0gZ2lhbmZhcl9kcml2ZXIubwogCi1naWFuZmFyX2RyaXZlci1vYmpzIDo9IGdpYW5mYXIubyBnaWFuZmFyX2V0aHRvb2wubyBnaWFuZmFyX21paS5vCitnaWFuZmFyX2RyaXZlci1vYmpzIDo9IGdpYW5mYXIubyBcCisJCWdpYW5mYXJfZXRodG9vbC5vIFwKKwkJZ2lhbmZhcl9taWkubyBcCisJCWdpYW5mYXJfc3lzZnMubwogCiAjCiAjIGxpbmsgb3JkZXIgaW1wb3J0YW50IGhlcmUKQEAgLTU5LDYgKzYyLDcgQEAKIG9iai0kKENPTkZJR19TUElERVJfTkVUKSArPSBzcGlkZXJuZXQubwogb2JqLSQoQ09ORklHX1RDMzU4MTUpICs9IHRjMzU4MTUubwogb2JqLSQoQ09ORklHX1NLR0UpICs9IHNrZ2Uubworb2JqLSQoQ09ORklHX1NLWTIpICs9IHNreTIubwogb2JqLSQoQ09ORklHX1NLOThMSU4pICs9IHNrOThsaW4vCiBvYmotJChDT05GSUdfU0tGUCkgKz0gc2tmcC8KIG9iai0kKENPTkZJR19WSUFfUkhJTkUpICs9IHZpYS1yaGluZS5vCkBAIC0yMDIsNiArMjA2LDcgQEAKIG9iai0kKENPTkZJR19IQU1SQURJTykgKz0gaGFtcmFkaW8vCiBvYmotJChDT05GSUdfSVJEQSkgKz0gaXJkYS8KIG9iai0kKENPTkZJR19FVFJBWF9FVEhFUk5FVCkgKz0gY3Jpcy8KK29iai0kKENPTkZJR19FTlAyNjExX01TRl9ORVQpICs9IGl4cDIwMDAvCiAKIG9iai0kKENPTkZJR19ORVRDT05TT0xFKSArPSBuZXRjb25zb2xlLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKaW5kZXggY2Y1MDM4NC4uNWNkYWUyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlCkBAIC00LDUgKzQsNSBAQAogCiBvYmotJChDT05GSUdfQk9ORElORykgKz0gYm9uZGluZy5vCiAKLWJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8KK2JvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwppbmRleCBkMmYzNGQ1Li5mM2Y1ODI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCkBAIC0xOCwzOCArMTgsNiBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCiAgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqCi0gKiBDaGFuZ2VzOgotICoKLSAqIDIwMDMvMDUvMDEgLSBUc2lwcHkgTWVuZGVsc29uIDx0c2lwcHkubWVuZGVsc29uIGF0IGludGVsIGRvdCBjb20+IGFuZAotICoJCUFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEFkZGVkIHN1cHBvcnQgZm9yIGxhY3BfcmF0ZSBtb2R1bGUgcGFyYW0uCi0gKgotICogMjAwMy8wNS8wMSAtIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBCYXNlZCBvbiBkaXNjdXNzaW9uIG9uIG1haWxpbmcgbGlzdCwgY2hhbmdlZCBsb2NraW5nIHNjaGVtZQotICoJICB0byB1c2UgbG9jay91bmxvY2sgb3IgbG9ja19iaC91bmxvY2tfYmggYXBwcm9wcmlhdGVseSBpbnN0ZWFkCi0gKgkgIG9mIGxvY2tfaXJxc2F2ZS91bmxvY2tfaXJxcmVzdG9yZS4gVGhlIG5ldyBzY2hlbWUgaGVscHMgZXhwb3NpbmcKLSAqCSAgaGlkZGVuIGJ1Z3MgYW5kIHNvbHZlcyBzeXN0ZW0gaGFuZ3MgdGhhdCBvY2N1cnJlZCBkdWUgdG8gdGhlIGZhY3QKLSAqCSAgdGhhdCBob2xkaW5nIGxvY2tfaXJxc2F2ZSBkb2Vzbid0IHByZXZlbnQgc29mdGlycXMgZnJvbSBydW5uaW5nLgotICoJICBUaGlzIGFsc28gaW5jcmVhc2VzIHRvdGFsIHRocm91Z2hwdXQgc2luY2UgaW50ZXJydXB0cyBhcmUgbm90Ci0gKgkgIGJsb2NrZWQgb24gZWFjaCB0cmFuc21pdHRlZCBwYWNrZXRzIG9yIG1vbml0b3IgdGltZW91dC4KLSAqCi0gKiAyMDAzLzA1LzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIFJlbmFtZWQgYm9uZF8zYWRfbGlua19zdGF0dXNfY2hhbmdlZCgpIHRvCi0gKgkgIGJvbmRfM2FkX2hhbmRsZV9saW5rX2NoYW5nZSgpIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVExCLgotICoKLSAqIDIwMDMvMDUvMjAgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBGaXggbG9uZyBmYWlsIG92ZXIgdGltZSB3aGVuIHJlbGVhc2luZyBsYXN0IHNsYXZlIG9mIGFuIGFjdGl2ZQotICoJICBhZ2dyZWdhdG9yIC0gc2VuZCBMQUNQRFUgb24gdW5iaW5kIG9mIHNsYXZlIHRvIHRlbGwgcGFydG5lciB0aGlzCi0gKgkgIHBvcnQgaXMgbm8gbG9uZ2VyIGFnZ3JlZ2F0YWJsZS4KLSAqCi0gKiAyMDAzLzA2LzI1IC0gVHNpcHB5IE1lbmRlbHNvbiA8dHNpcHB5Lm1lbmRlbHNvbiBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBTZW5kIExBQ1BEVSBhcyBoaWdoZXN0IHByaW9yaXR5IHBhY2tldCB0byBmdXJ0aGVyIGZpeCB0aGUgYWJvdmUKLSAqCSAgcHJvYmxlbSBvbiB2ZXJ5IGhpZ2ggVHggdHJhZmZpYyBsb2FkIHdoZXJlIHBhY2tldHMgbWF5IGdldCBkcm9wcGVkCi0gKgkgIGJ5IHRoZSBzbGF2ZS4KLSAqCi0gKiAyMDAzLzEyLzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIENvZGUgY2xlYW51cCBhbmQgc3R5bGUgY2hhbmdlcwogICovCiAKIC8vI2RlZmluZSBCT05ESU5HX0RFQlVHIDEKQEAgLTExOTgsMTAgKzExNjYsMTAgQEAKIAkJCS8vIGRldGVjdCBsb29wYmFjayBzaXR1YXRpb24KIAkJCWlmICghTUFDX0FERFJFU1NfQ09NUEFSRSgmKGxhY3BkdS0+YWN0b3Jfc3lzdGVtKSwgJihwb3J0LT5hY3Rvcl9zeXN0ZW0pKSkgewogCQkJCS8vIElORk9fUkVDRUlWRURfTE9PUEJBQ0tfRlJBTUVTCi0JCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEFuIGlsbGVnYWwgbG9vcGJhY2sgb2NjdXJyZWQgb24gYWRhcHRlciAoJXMpXG4iLAotCQkJCQkJcG9ydC0+c2xhdmUtPmRldi0+bmFtZSk7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJDaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byB2ZXJpZnkgdGhhdCBhbGwgQWRhcHRlcnMgIgotCQkJCQkJImFyZSBjb25uZWN0ZWQgdG8gODAyLjNhZCBjb21wbGlhbnQgc3dpdGNoIHBvcnRzXG4iKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IEFuIGlsbGVnYWwgbG9vcGJhY2sgb2NjdXJyZWQgb24gIgorCQkJCSAgICAgICAiYWRhcHRlciAoJXMpLiBDaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byB2ZXJpZnkgdGhhdCBhbGwgIgorCQkJCSAgICAgICAiQWRhcHRlcnMgYXJlIGNvbm5lY3RlZCB0byA4MDIuM2FkIGNvbXBsaWFudCBzd2l0Y2ggcG9ydHNcbiIsCisJCQkJICAgICAgIHBvcnQtPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgcG9ydC0+c2xhdmUtPmRldi0+bmFtZSk7CiAJCQkJX19yZWxlYXNlX3J4X21hY2hpbmVfbG9jayhwb3J0KTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0xMzc4LDggKzEzNDYsOSBAQAogCQkJfQogCQl9CiAJCWlmICghY3Vycl9wb3J0KSB7IC8vIG1lYW5pbmc6IHRoZSBwb3J0IHdhcyByZWxhdGVkIHRvIGFuIGFnZ3JlZ2F0b3IgYnV0IHdhcyBub3Qgb24gdGhlIGFnZ3JlZ2F0b3IgcG9ydCBsaXN0Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFdhcm5pbmc6IFBvcnQgJWQgKG9uICVzKSB3YXMgIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogV2FybmluZzogUG9ydCAlZCAob24gJXMpIHdhcyAiCiAJCQkgICAgICAgInJlbGF0ZWQgdG8gYWdncmVnYXRvciAlZCBidXQgd2FzIG5vdCBvbiBpdHMgcG9ydCBsaXN0XG4iLAorCQkJICAgICAgIHBvcnQtPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwKIAkJCSAgICAgICBwb3J0LT5hY3Rvcl9wb3J0X251bWJlciwgcG9ydC0+c2xhdmUtPmRldi0+bmFtZSwKIAkJCSAgICAgICBwb3J0LT5hZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIpOwogCQl9CkBAIC0xNDUwLDcgKzE0MTksOCBAQAogCiAJCQlkcHJpbnRrKCJQb3J0ICVkIGpvaW5lZCBMQUcgJWQobmV3IExBRylcbiIsIHBvcnQtPmFjdG9yX3BvcnRfbnVtYmVyLCBwb3J0LT5hZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IFBvcnQgJWQgKG9uICVzKSBkaWQgbm90IGZpbmQgYSBzdWl0YWJsZSBhZ2dyZWdhdG9yXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBQb3J0ICVkIChvbiAlcykgZGlkIG5vdCBmaW5kIGEgc3VpdGFibGUgYWdncmVnYXRvclxuIiwKKwkJCSAgICAgICBwb3J0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsCiAJCQkgICAgICAgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsIHBvcnQtPnNsYXZlLT5kZXYtPm5hbWUpOwogCQl9CiAJfQpAQCAtMTU4Miw4ICsxNTUyLDkgQEAKIAogCQkvLyBjaGVjayBpZiBhbnkgcGFydG5lciByZXBseXMKIAkJaWYgKGJlc3RfYWdncmVnYXRvci0+aXNfaW5kaXZpZHVhbCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiBObyA4MDIuM2FkIHJlc3BvbnNlIGZyb20gdGhlIGxpbmsgcGFydG5lciAiCi0JCQkJCSJmb3IgYW55IGFkYXB0ZXJzIGluIHRoZSBib25kXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IE5vIDgwMi4zYWQgcmVzcG9uc2UgZnJvbSAiCisJCQkgICAgICAgInRoZSBsaW5rIHBhcnRuZXIgZm9yIGFueSBhZGFwdGVycyBpbiB0aGUgYm9uZFxuIiwKKwkJCSAgICAgICBiZXN0X2FnZ3JlZ2F0b3ItPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCX0KIAogCQkvLyBjaGVjayBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBhZ2dyZWdhdG9yCkBAIC0xOTE1LDcgKzE4ODYsOCBAQAogCXN0cnVjdCBhZ2dyZWdhdG9yICphZ2dyZWdhdG9yOwogCiAJaWYgKGJvbmQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIlRoZSBzbGF2ZSAlcyBpcyBub3QgYXR0YWNoZWQgdG8gaXRzIGJvbmRcbiIsIHNsYXZlLT5kZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IFRoZSBzbGF2ZSAlcyBpcyBub3QgYXR0YWNoZWQgdG8gaXRzIGJvbmRcbiIsCisJCSAgICAgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xOTkwLDcgKzE5NjIsOSBAQAogCiAJLy8gaWYgc2xhdmUgaXMgbnVsbCwgdGhlIHdob2xlIHBvcnQgaXMgbm90IGluaXRpYWxpemVkCiAJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFRyeWluZyB0byB1bmJpbmQgYW4gdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiAlczogVHJ5aW5nIHRvICIKKwkJICAgICAgICJ1bmJpbmQgYW4gdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAorCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjAyMSw3ICsxOTk1LDggQEAKIAkJCQlkcHJpbnRrKCJTb21lIHBvcnQocykgcmVsYXRlZCB0byBMQUcgJWQgLSByZXBsYWNlaW5nIHdpdGggTEFHICVkXG4iLCBhZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIsIG5ld19hZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIpOwogCiAJCQkJaWYgKChuZXdfYWdncmVnYXRvci0+bGFnX3BvcnRzID09IHBvcnQpICYmIG5ld19hZ2dyZWdhdG9yLT5pc19hY3RpdmUpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBSZW1vdmluZyBhbiBhY3RpdmUgYWdncmVnYXRvclxuIik7CisJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6IFJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iLAorCQkJCQkgICAgICAgYWdncmVnYXRvci0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCQkJLy8gc2VsZWN0IG5ldyBhY3RpdmUgYWdncmVnYXRvcgogCQkJCQkgc2VsZWN0X25ld19hY3RpdmVfYWdnID0gMTsKIAkJCQl9CkBAIC0yMDUxLDE1ICsyMDI2LDE3IEBACiAJCQkJCWFkX2FnZ19zZWxlY3Rpb25fbG9naWMoX19nZXRfZmlyc3RfYWdnKHBvcnQpKTsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogV2FybmluZzogdW5iaW5kaW5nIGFnZ3JlZ2F0b3IsICIKLQkJCQkgICAgICAgImFuZCBjb3VsZCBub3QgZmluZCBhIG5ldyBhZ2dyZWdhdG9yIGZvciBpdHMgcG9ydHNcbiIpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IHVuYmluZGluZyBhZ2dyZWdhdG9yLCAiCisJCQkJICAgICAgICJhbmQgY291bGQgbm90IGZpbmQgYSBuZXcgYWdncmVnYXRvciBmb3IgaXRzIHBvcnRzXG4iLAorCQkJCSAgICAgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOwogCQkJfQogCQl9IGVsc2UgeyAvLyBpbiBjYXNlIHRoYXQgdGhlIG9ubHkgcG9ydCByZWxhdGVkIHRvIHRoaXMgYWdncmVnYXRvciBpcyB0aGUgb25lIHdlIHdhbnQgdG8gcmVtb3ZlCiAJCQlzZWxlY3RfbmV3X2FjdGl2ZV9hZ2cgPSBhZ2dyZWdhdG9yLT5pc19hY3RpdmU7CiAJCQkvLyBjbGVhciB0aGUgYWdncmVnYXRvcgogCQkJYWRfY2xlYXJfYWdnKGFnZ3JlZ2F0b3IpOwogCQkJaWYgKHNlbGVjdF9uZXdfYWN0aXZlX2FnZykgewotCQkJCXByaW50ayhLRVJOX0lORk8gIlJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiBSZW1vdmluZyBhbiBhY3RpdmUgYWdncmVnYXRvclxuIiwKKwkJCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCQkvLyBzZWxlY3QgbmV3IGFjdGl2ZSBhZ2dyZWdhdG9yCiAJCQkJYWRfYWdnX3NlbGVjdGlvbl9sb2dpYyhfX2dldF9maXJzdF9hZ2cocG9ydCkpOwogCQkJfQpAQCAtMjA4NSw3ICsyMDYyLDggQEAKIAkJCQkJLy8gY2xlYXIgdGhlIGFnZ3JlZ2F0b3IKIAkJCQkJYWRfY2xlYXJfYWdnKHRlbXBfYWdncmVnYXRvcik7CiAJCQkJCWlmIChzZWxlY3RfbmV3X2FjdGl2ZV9hZ2cpIHsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8gIlJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iKTsKKwkJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6IFJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iLAorCQkJCQkJICAgICAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCQkJCQkvLyBzZWxlY3QgbmV3IGFjdGl2ZSBhZ2dyZWdhdG9yCiAJCQkJCQlhZF9hZ2dfc2VsZWN0aW9uX2xvZ2ljKF9fZ2V0X2ZpcnN0X2FnZyhwb3J0KSk7CiAJCQkJCX0KQEAgLTIxMzEsNyArMjEwOSw4IEBACiAJCS8vIHNlbGVjdCB0aGUgYWN0aXZlIGFnZ3JlZ2F0b3IgZm9yIHRoZSBib25kCiAJCWlmICgocG9ydCA9IF9fZ2V0X2ZpcnN0X3BvcnQoYm9uZCkpKSB7CiAJCQlpZiAoIXBvcnQtPnNsYXZlKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiBib25kJ3MgZmlyc3QgcG9ydCBpcyB1bmluaXRpYWxpemVkXG4iKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBib25kJ3MgZmlyc3QgcG9ydCBpcyAiCisJCQkJICAgICAgICJ1bmluaXRpYWxpemVkXG4iLCBib25kLT5kZXYtPm5hbWUpOwogCQkJCWdvdG8gcmVfYXJtOwogCQkJfQogCkBAIC0yMTQzLDcgKzIxMjIsOCBAQAogCS8vIGZvciBlYWNoIHBvcnQgcnVuIHRoZSBzdGF0ZSBtYWNoaW5lcwogCWZvciAocG9ydCA9IF9fZ2V0X2ZpcnN0X3BvcnQoYm9uZCk7IHBvcnQ7IHBvcnQgPSBfX2dldF9uZXh0X3BvcnQocG9ydCkpIHsKIAkJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiBGb3VuZCBhbiB1bmluaXRpYWxpemVkIHBvcnRcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogV2FybmluZzogRm91bmQgYW4gdW5pbml0aWFsaXplZCAiCisJCQkgICAgICAgInBvcnRcbiIsIGJvbmQtPmRldi0+bmFtZSk7CiAJCQlnb3RvIHJlX2FybTsKIAkJfQogCkBAIC0yMTg0LDcgKzIxNjQsOCBAQAogCQlwb3J0ID0gJihTTEFWRV9BRF9JTkZPKHNsYXZlKS5wb3J0KTsKIAogCQlpZiAoIXBvcnQtPnNsYXZlKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFdhcm5pbmc6IHBvcnQgb2Ygc2xhdmUgJXMgaXMgdW5pbml0aWFsaXplZFxuIiwgc2xhdmUtPmRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBwb3J0IG9mIHNsYXZlICVzIGlzICIKKwkJCSAgICAgICAidW5pbml0aWFsaXplZFxuIiwgc2xhdmUtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0yMjMwLDggKzIyMTEsOSBAQAogCiAJLy8gaWYgc2xhdmUgaXMgbnVsbCwgdGhlIHdob2xlIHBvcnQgaXMgbm90IGluaXRpYWxpemVkCiAJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFdhcm5pbmc6IHNwZWVkIGNoYW5nZWQgZm9yIHVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKLQkJICAgICAgIHNsYXZlLT5kZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFdhcm5pbmc6ICVzOiBzcGVlZCAiCisJCSAgICAgICAiY2hhbmdlZCBmb3IgdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAorCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI1Nyw4ICsyMjM5LDkgQEAKIAogCS8vIGlmIHNsYXZlIGlzIG51bGwsIHRoZSB3aG9sZSBwb3J0IGlzIG5vdCBpbml0aWFsaXplZAogCWlmICghcG9ydC0+c2xhdmUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiBkdXBsZXggY2hhbmdlZCBmb3IgdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAotCQkgICAgICAgc2xhdmUtPmRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IGR1cGxleCBjaGFuZ2VkICIKKwkJICAgICAgICJmb3IgdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAorCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI4NSw4ICsyMjY4LDkgQEAKIAogCS8vIGlmIHNsYXZlIGlzIG51bGwsIHRoZSB3aG9sZSBwb3J0IGlzIG5vdCBpbml0aWFsaXplZAogCWlmICghcG9ydC0+c2xhdmUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiBsaW5rIHN0YXR1cyBjaGFuZ2VkIGZvciB1bmluaXRpYWxpemVkIHBvcnQgb24gJXNcbiIsCi0JCQlzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiAlczogbGluayBzdGF0dXMgY2hhbmdlZCBmb3IgIgorCQkgICAgICAgInVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKKwkJCXNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIzNjMsNyArMjM0Nyw4IEBACiAJfQogCiAJaWYgKGJvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8oYm9uZCwgJmFkX2luZm8pKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJFUlJPUjogYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAlczogRXJyb3I6ICIKKwkJICAgICAgICJib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMzcyLDcgKzIzNTcsOSBAQAogCiAJaWYgKHNsYXZlc19pbl9hZ2cgPT0gMCkgewogCQkvKnRoZSBhZ2dyZWdhdG9yIGlzIGVtcHR5Ki8KLQkJcHJpbnRrKEtFUk5fREVCVUcgIkVSUk9SOiBhY3RpdmUgYWdncmVnYXRvciBpcyBlbXB0eVxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICI6ICVzOiBFcnJvcjogYWN0aXZlICIKKwkJICAgICAgICJhZ2dyZWdhdG9yIGlzIGVtcHR5XG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMzkwLDcgKzIzNzcsOCBAQAogCX0KIAogCWlmIChzbGF2ZV9hZ2dfbm8gPj0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogRXJyb3I6IENvdWxkbid0IGZpbmQgYSBzbGF2ZSB0byB0eCBvbiBmb3IgYWdncmVnYXRvciBJRCAlZFxuIiwgYWdnX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBFcnJvcjogQ291bGRuJ3QgZmluZCBhIHNsYXZlIHRvIHR4IG9uICIKKwkJICAgICAgICJmb3IgYWdncmVnYXRvciBJRCAlZFxuIiwgZGV2LT5uYW1lLCBhZ2dfaWQpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaAppbmRleCA2NzNhMzBhLi41ZWUyY2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCkBAIC0xOCwxOSArMTgsNiBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCiAgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqCi0gKiBDaGFuZ2VzOgotICoKLSAqIDIwMDMvMDUvMDEgLSBUc2lwcHkgTWVuZGVsc29uIDx0c2lwcHkubWVuZGVsc29uIGF0IGludGVsIGRvdCBjb20+IGFuZAotICoJCUFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEFkZGVkIHN1cHBvcnQgZm9yIGxhY3BfcmF0ZSBtb2R1bGUgcGFyYW0uCi0gKgotICogMjAwMy8wNS8wMSAtIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBSZW5hbWVkIGJvbmRfM2FkX2xpbmtfc3RhdHVzX2NoYW5nZWQoKSB0bwotICoJICBib25kXzNhZF9oYW5kbGVfbGlua19jaGFuZ2UoKSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFRMQi4KLSAqCi0gKiAyMDAzLzEyLzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIENvZGUgY2xlYW51cCBhbmQgc3R5bGUgY2hhbmdlcwogICovCiAKICNpZm5kZWYgX19CT05EXzNBRF9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCBmOGZjZTM5Li44NTRkZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC0xOCwyNSArMTgsNiBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCiAgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqCi0gKiBDaGFuZ2VzOgotICoKLSAqIDIwMDMvMDYvMjUgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gRml4ZWQgc2lnbmVkL3Vuc2lnbmVkIGNhbGN1bGF0aW9uIGVycm9ycyB0aGF0IGNhdXNlZCBsb2FkIHNoYXJpbmcKLSAqCSAgdG8gY29sbGFwc2UgdG8gb25lIHNsYXZlIHVuZGVyIHZlcnkgaGVhdnkgVURQIFR4IHN0cmVzcy4KLSAqCi0gKiAyMDAzLzA4LzA2IC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gQWRkIHN1cHBvcnQgZm9yIHNldHRpbmcgYm9uZCdzIE1BQyBhZGRyZXNzIHdpdGggc3BlY2lhbAotICoJICBoYW5kbGluZyByZXF1aXJlZCBmb3IgQUxCL1RMQi4KLSAqCi0gKiAyMDAzLzEyLzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIENvZGUgY2xlYW51cCBhbmQgc3R5bGUgY2hhbmdlcwotICoKLSAqIDIwMDMvMTIvMzAgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBGaXhlZDogQ2Fubm90IHJlbW92ZSBhbmQgcmUtZW5zbGF2ZSB0aGUgb3JpZ2luYWwgYWN0aXZlIHNsYXZlLgotICoKLSAqIDIwMDQvMDEvMTQgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gQWRkIGNhcGFiaWxpdHkgdG8gdGFnIHNlbGYgZ2VuZXJhdGVkIHBhY2tldHMgaW4gQUxCL1RMQiBtb2Rlcy4KICAqLwogCiAvLyNkZWZpbmUgQk9ORElOR19ERUJVRyAxCkBAIC0xOTgsMjAgKzE3OSwyMSBAQAogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmKEJPTkRfQUxCX0lORk8oYm9uZCkpOwogCWludCBzaXplID0gVExCX0hBU0hfVEFCTEVfU0laRSAqIHNpemVvZihzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvKTsKKwlzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICpuZXdfaGFzaHRibDsKIAlpbnQgaTsKIAogCXNwaW5fbG9ja19pbml0KCYoYm9uZF9pbmZvLT50eF9oYXNodGJsX2xvY2spKTsKIAotCV9sb2NrX3R4X2hhc2h0YmwoYm9uZCk7Ci0KLQlib25kX2luZm8tPnR4X2hhc2h0YmwgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYm9uZF9pbmZvLT50eF9oYXNodGJsKSB7CisJbmV3X2hhc2h0YmwgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghbmV3X2hhc2h0YmwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCSAgICAgICAiOiBFcnJvcjogJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBUTEIgaGFzaCB0YWJsZVxuIiwKKwkJICAgICAgICI6ICVzOiBFcnJvcjogRmFpbGVkIHRvIGFsbG9jYXRlIFRMQiBoYXNoIHRhYmxlXG4iLAogCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKLQkJX3VubG9ja190eF9oYXNodGJsKGJvbmQpOwogCQlyZXR1cm4gLTE7CiAJfQorCV9sb2NrX3R4X2hhc2h0YmwoYm9uZCk7CisKKwlib25kX2luZm8tPnR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDsKIAogCW1lbXNldChib25kX2luZm8tPnR4X2hhc2h0YmwsIDAsIHNpemUpOwogCkBAIC01MTMsNyArNDk1LDggQEAKIAkJCQkgY2xpZW50X2luZm8tPm1hY19kc3QpOwogCQlpZiAoIXNrYikgewogCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkgICAgICAgIjogRXJyb3I6IGZhaWxlZCB0byBjcmVhdGUgYW4gQVJQIHBhY2tldFxuIik7CisJCQkgICAgICAgIjogJXM6IEVycm9yOiBmYWlsZWQgdG8gY3JlYXRlIGFuIEFSUCBwYWNrZXRcbiIsCisJCQkgICAgICAgY2xpZW50X2luZm8tPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC01MjMsNyArNTA2LDggQEAKIAkJCXNrYiA9IHZsYW5fcHV0X3RhZyhza2IsIGNsaWVudF9pbmZvLT52bGFuX2lkKTsKIAkJCWlmICghc2tiKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkJICAgICAgICI6IEVycm9yOiBmYWlsZWQgdG8gaW5zZXJ0IFZMQU4gdGFnXG4iKTsKKwkJCQkgICAgICAgIjogJXM6IEVycm9yOiBmYWlsZWQgdG8gaW5zZXJ0IFZMQU4gdGFnXG4iLAorCQkJCSAgICAgICBjbGllbnRfaW5mby0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQpAQCAtNjA2LDggKzU5MCw5IEBACiAKIAkJaWYgKCFjbGllbnRfaW5mby0+c2xhdmUpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJICAgICAgICI6IEVycm9yOiBmb3VuZCBhIGNsaWVudCB3aXRoIG5vIGNoYW5uZWwgaW4gIgotCQkJICAgICAgICJ0aGUgY2xpZW50J3MgaGFzaCB0YWJsZVxuIik7CisJCQkgICAgICAgIjogJXM6IEVycm9yOiBmb3VuZCBhIGNsaWVudCB3aXRoIG5vIGNoYW5uZWwgaW4gIgorCQkJICAgICAgICJ0aGUgY2xpZW50J3MgaGFzaCB0YWJsZVxuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOwogCQkJY29udGludWU7CiAJCX0KIAkJLyp1cGRhdGUgYWxsIGNsaWVudHMgdXNpbmcgdGhpcyBzcmNfaXAsIHRoYXQgYXJlIG5vdCBhc3NpZ25lZApAQCAtNzk3LDIxICs3ODIsMjIgQEAKIHsKIAlzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gJihCT05EX0FMQl9JTkZPKGJvbmQpKTsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnBrX3R5cGUgPSAmKEJPTkRfQUxCX0lORk8oYm9uZCkucmxiX3BrdF90eXBlKTsKKwlzdHJ1Y3QgcmxiX2NsaWVudF9pbmZvCSpuZXdfaGFzaHRibDsKIAlpbnQgc2l6ZSA9IFJMQl9IQVNIX1RBQkxFX1NJWkUgKiBzaXplb2Yoc3RydWN0IHJsYl9jbGllbnRfaW5mbyk7CiAJaW50IGk7CiAKIAlzcGluX2xvY2tfaW5pdCgmKGJvbmRfaW5mby0+cnhfaGFzaHRibF9sb2NrKSk7CiAKLQlfbG9ja19yeF9oYXNodGJsKGJvbmQpOwotCi0JYm9uZF9pbmZvLT5yeF9oYXNodGJsID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJvbmRfaW5mby0+cnhfaGFzaHRibCkgeworCW5ld19oYXNodGJsID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19oYXNodGJsKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkgICAgICAgIjogRXJyb3I6ICVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgUkxCIGhhc2ggdGFibGVcbiIsCisJCSAgICAgICAiOiAlczogRXJyb3I6IEZhaWxlZCB0byBhbGxvY2F0ZSBSTEIgaGFzaCB0YWJsZVxuIiwKIAkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7Ci0JCV91bmxvY2tfcnhfaGFzaHRibChib25kKTsKIAkJcmV0dXJuIC0xOwogCX0KKwlfbG9ja19yeF9oYXNodGJsKGJvbmQpOworCisJYm9uZF9pbmZvLT5yeF9oYXNodGJsID0gbmV3X2hhc2h0Ymw7CiAKIAlib25kX2luZm8tPnJ4X2hhc2h0YmxfaGVhZCA9IFJMQl9OVUxMX0lOREVYOwogCkBAIC05MjcsNyArOTEzLDggQEAKIAkJCXNrYiA9IHZsYW5fcHV0X3RhZyhza2IsIHZsYW4tPnZsYW5faWQpOwogCQkJaWYgKCFza2IpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJCQkgICAgICAgIjogRXJyb3I6IGZhaWxlZCB0byBpbnNlcnQgVkxBTiB0YWdcbiIpOworCQkJCSAgICAgICAiOiAlczogRXJyb3I6IGZhaWxlZCB0byBpbnNlcnQgVkxBTiB0YWdcbiIsCisJCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTk1NiwxMSArOTQzLDExIEBACiAJc19hZGRyLnNhX2ZhbWlseSA9IGRldi0+dHlwZTsKIAlpZiAoZGV2X3NldF9tYWNfYWRkcmVzcyhkZXYsICZzX2FkZHIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkgICAgICAgIjogRXJyb3I6IGRldl9zZXRfbWFjX2FkZHJlc3Mgb2YgZGV2ICVzIGZhaWxlZCEgQUxCICIKKwkJICAgICAgICI6ICVzOiBFcnJvcjogZGV2X3NldF9tYWNfYWRkcmVzcyBvZiBkZXYgJXMgZmFpbGVkISBBTEIgIgogCQkgICAgICAgIm1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgYmFzZSBkcml2ZXIgc3VwcG9ydCBzZXR0aW5nICIKIAkJICAgICAgICJ0aGUgaHcgYWRkcmVzcyBhbHNvIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlJ3MgIgogCQkgICAgICAgImludGVyZmFjZSBpcyBvcGVuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJICAgICAgIGRldi0+bWFzdGVyLT5uYW1lLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCXJldHVybiAwOwpAQCAtMTE1MywxNiArMTE0MCwxNiBAQAogCQkJCSAgICAgICBib25kLT5hbGJfaW5mby5ybGJfZW5hYmxlZCk7CiAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkgICAgICAgIjogV2FybmluZzogdGhlIGh3IGFkZHJlc3Mgb2Ygc2xhdmUgJXMgaXMgaW4gdXNlIGJ5ICIKKwkJICAgICAgICI6ICVzOiBXYXJuaW5nOiB0aGUgaHcgYWRkcmVzcyBvZiBzbGF2ZSAlcyBpcyBpbiB1c2UgYnkgIgogCQkgICAgICAgInRoZSBib25kOyBnaXZpbmcgaXQgdGhlIGh3IGFkZHJlc3Mgb2YgJXNcbiIsCi0JCSAgICAgICBzbGF2ZS0+ZGV2LT5uYW1lLCBmcmVlX21hY19zbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSwgZnJlZV9tYWNfc2xhdmUtPmRldi0+bmFtZSk7CiAKIAl9IGVsc2UgaWYgKGhhc19ib25kX2FkZHIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCSAgICAgICAiOiBFcnJvcjogdGhlIGh3IGFkZHJlc3Mgb2Ygc2xhdmUgJXMgaXMgaW4gdXNlIGJ5IHRoZSAiCisJCSAgICAgICAiOiAlczogRXJyb3I6IHRoZSBodyBhZGRyZXNzIG9mIHNsYXZlICVzIGlzIGluIHVzZSBieSB0aGUgIgogCQkgICAgICAgImJvbmQ7IGNvdWxkbid0IGZpbmQgYSBzbGF2ZSB3aXRoIGEgZnJlZSBodyBhZGRyZXNzIHRvICIKIAkJICAgICAgICJnaXZlIGl0ICh0aGlzIHNob3VsZCBub3QgaGF2ZSBoYXBwZW5lZClcbiIsCi0JCSAgICAgICBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMTI1MCw2ICsxMjM3LDggQEAKIAkJCXRsYl9kZWluaXRpYWxpemUoYm9uZCk7CiAJCQlyZXR1cm4gcmVzOwogCQl9CisJfSBlbHNlIHsKKwkJYm9uZC0+YWxiX2luZm8ucmxiX2VuYWJsZWQgPSAwOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTQwOSw3ICsxMzk4LDcgQEAKIAkJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwogCiAJCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJCWFsYl9zZW5kX2xlYXJuaW5nX3BhY2tldHMoc2xhdmUsc2xhdmUtPmRldi0+ZGV2X2FkZHIpOworCQkJYWxiX3NlbmRfbGVhcm5pbmdfcGFja2V0cyhzbGF2ZSwgc2xhdmUtPmRldi0+ZGV2X2FkZHIpOwogCQl9CiAKIAkJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmgKaW5kZXggZTQwOTFjZC4uMjhmMmEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaApAQCAtMTgsMTUgKzE4LDYgQEAKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQogICogZmlsZSBjYWxsZWQgTElDRU5TRS4KICAqCi0gKgotICogQ2hhbmdlczoKLSAqCi0gKiAyMDAzLzA4LzA2IC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gQWRkIHN1cHBvcnQgZm9yIHNldHRpbmcgYm9uZCdzIE1BQyBhZGRyZXNzIHdpdGggc3BlY2lhbAotICoJICBoYW5kbGluZyByZXF1aXJlZCBmb3IgQUxCL1RMQi4KLSAqCi0gKiAyMDAzLzEyLzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIENvZGUgY2xlYW51cCBhbmQgc3R5bGUgY2hhbmdlcwogICovCiAKICNpZm5kZWYgX19CT05EX0FMQl9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDk0Y2VjM2MuLjI1ODJkOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMjksNDY2ICsyOSw2IEBACiAgKgliOiBpZiBhIGh3IG1hYyBhZGRyZXNzIGFscmVhZHkgaXMgdGhlcmUsIGV0aDAncyBodyBtYWMgYWRkcmVzcwogICoJICAgd2lsbCB0aGVuIGJlIHNldCBmcm9tIGJvbmQwLgogICoKLSAqIHYwLjEgLSBmaXJzdCB3b3JraW5nIHZlcnNpb24uCi0gKiB2MC4yIC0gY2hhbmdlZCBzdGF0cyB0byBiZSBjYWxjdWxhdGVkIGJ5IHN1bW1pbmcgc2xhdmVzIHN0YXRzLgotICoKLSAqIENoYW5nZXM6Ci0gKiBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAqIC0gZml4IGxlYWtzIG9uIGZhaWx1cmUgYXQgYm9uZF9pbml0Ci0gKgotICogMjAwMC8wOS8zMCAtIFdpbGx5IFRhcnJlYXUgPHdpbGx5IGF0IG1ldGEteC5vcmc+Ci0gKiAgICAgLSBhZGRlZCB0cml2aWFsIGNvZGUgdG8gcmVsZWFzZSBhIHNsYXZlIGRldmljZS4KLSAqICAgICAtIGZpeGVkIHNlY3VyaXR5IGJ1ZyAoQ0FQX05FVF9BRE1JTiBub3QgY2hlY2tlZCkKLSAqICAgICAtIGltcGxlbWVudGVkIE1JSSBsaW5rIG1vbml0b3JpbmcgdG8gZGlzYWJsZSBkZWFkIGxpbmtzIDoKLSAqICAgICAgIEFsbCBNSUkgY2FwYWJsZSBzbGF2ZXMgYXJlIGNoZWNrZWQgZXZlcnkgPG1paW1vbj4gbWlsbGlzZWNvbmRzCi0gKiAgICAgICAoMTAwIG1zIHNlZW1zIGdvb2QpLiBUaGlzIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGJ5IHBhc3NpbmcgaXQgdG8KLSAqICAgICAgIGluc21vZC4gQSB2YWx1ZSBvZiB6ZXJvIGRpc2FibGVzIHRoZSBtb25pdG9yaW5nIChkZWZhdWx0KS4KLSAqICAgICAtIGZpeGVkIGFuIGluZmluaXRlIGxvb3AgaW4gYm9uZF94bWl0X3JvdW5kcm9iaW4oKSB3aGVuIHRoZXJlJ3Mgbm8KLSAqICAgICAgIGdvb2Qgc2xhdmUuCi0gKiAgICAgLSBtYWRlIHRoZSBjb2RlIGhvcGVmdWxseSBTTVAgc2FmZQotICoKLSAqIDIwMDAvMTAvMDMgLSBXaWxseSBUYXJyZWF1IDx3aWxseSBhdCBtZXRhLXgub3JnPgotICogICAgIC0gb3B0aW1pemVkIHNsYXZlIGxpc3RzIGJhc2VkIG9uIHJlbGV2YW50IHN1Z2dlc3Rpb25zIGZyb20gVGhvbWFzIERhdmlzCi0gKiAgICAgLSBpbXBsZW1lbnRlZCBhY3RpdmUtYmFja3VwIG1ldGhvZCB0byBvYnRhaW4gSEEgd2l0aCB0d28gc3dpdGNoZXM6Ci0gKiAgICAgICBzdGF5IGFzIGxvbmcgYXMgcG9zc2libGUgb24gdGhlIHNhbWUgYWN0aXZlIGludGVyZmFjZSwgd2hpbGUgd2UKLSAqICAgICAgIGFsc28gbW9uaXRvciB0aGUgYmFja3VwIG9uZSAoTUlJIGxpbmsgc3RhdHVzKSBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdwotICogICAgICAgaWYgd2UgYXJlIGFibGUgdG8gc3dpdGNoIGF0IGFueSB0aW1lLiAoIHBhc3MgIm1vZGU9MSIgdG8gaW5zbW9kICkKLSAqICAgICAtIGxvdHMgb2Ygc3RyZXNzIHRlc3RpbmdzIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBiZSBtb3JlIHJvYnVzdCB0aGFuIHRoZQotICogICAgICAgd2lyZXMgISA6LT4KLSAqCi0gKiAyMDAwLzEwLzA5IC0gV2lsbHkgVGFycmVhdSA8d2lsbHkgYXQgbWV0YS14Lm9yZz4KLSAqICAgICAtIGFkZGVkIHVwIGFuZCBkb3duIGRlbGF5cyBhZnRlciBsaW5rIHN0YXRlIGNoYW5nZS4KLSAqICAgICAtIG9wdGltaXplZCB0aGUgc2xhdmVzIGNoYWluaW5nIHNvIHRoYXQgd2hlbiB3ZSBydW4gZm9yd2FyZCwgd2UgbmV2ZXIKLSAqICAgICAgIHJlcGFzcyB0aHJvdWdoIHRoZSBib25kIGl0c2VsZiwgYnV0IHdlIGNhbiBmaW5kIGl0IGJ5IHNlYXJjaGluZwotICogICAgICAgYmFja3dhcmRzLiBSZW5kZXJzIHRoZSBkZWxldGlvbiBtb3JlIGRpZmZpY3VsdCwgYnV0IGFjY2VsZXJhdGVzIHRoZQotICogICAgICAgc2Nhbi4KLSAqICAgICAtIHNtYXJ0ZXIgZW5zbGF2aW5nIGFuZCByZWxlYXNpbmcuCi0gKiAgICAgLSBmaW5lciBhbmQgbW9yZSByb2J1c3QgU01QIGxvY2tpbmcKLSAqCi0gKiAyMDAwLzEwLzE3IC0gV2lsbHkgVGFycmVhdSA8d2lsbHkgYXQgbWV0YS14Lm9yZz4KLSAqICAgICAtIGZpeGVkIHR3byBwb3RlbnRpYWwgU01QIHJhY2UgY29uZGl0aW9ucwotICoKLSAqIDIwMDAvMTAvMTggLSBXaWxseSBUYXJyZWF1IDx3aWxseSBhdCBtZXRhLXgub3JnPgotICogICAgIC0gc21hbGwgZml4ZXMgdG8gdGhlIG1vbml0b3JpbmcgRlNNIGluIGNhc2Ugb2YgemVybyBkZWxheXMKLSAqIDIwMDAvMTEvMDEgLSBXaWxseSBUYXJyZWF1IDx3aWxseSBhdCBtZXRhLXgub3JnPgotICogICAgIC0gZml4ZWQgZmlyc3Qgc2xhdmUgbm90IGF1dG9tYXRpY2FsbHkgdXNlZCBpbiB0cnVuayBtb2RlLgotICogMjAwMC8xMS8xMCA6IHNwZWxsaW5nIG9mICJFdGhlckNoYW5uZWwiIGNvcnJlY3RlZC4KLSAqIDIwMDAvMTEvMTMgOiBmaXhlZCBhIHJhY2UgY29uZGl0aW9uIGluIGNhc2Ugb2YgY29uY3VycmVudCBhY2Nlc3NlcyB0byBpb2N0bCgpLgotICogMjAwMC8xMi8xNiA6IGZpeGVkIGltcHJvcGVyIHVzYWdlIG9mIHJ0bmxfZXhsb2NrX25vd2FpdCgpLgotICoKLSAqIDIwMDEvMS8zIC0gQ2hhZCBOLiBUaW5kZWwgPGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnPgotICogICAgIC0gVGhlIGJvbmRpbmcgZHJpdmVyIG5vdyBzaW11bGF0ZXMgTUlJIHN0YXR1cyBtb25pdG9yaW5nLCBqdXN0IGxpa2UKLSAqICAgICAgIGEgbm9ybWFsIG5ldHdvcmsgZGV2aWNlLiAgSXQgd2lsbCBzaG93IHRoYXQgdGhlIGxpbmsgaXMgZG93biBpZmYKLSAqICAgICAgIGV2ZXJ5IHNsYXZlIGluIHRoZSBib25kIHNob3dzIHRoYXQgdGhlaXIgbGlua3MgYXJlIGRvd24uICBJZiBhdCBsZWFzdAotICogICAgICAgb25lIHNsYXZlIGlzIHVwLCB0aGUgYm9uZCdzIE1JSSBzdGF0dXMgd2lsbCBhcHBlYXIgYXMgdXAuCi0gKgotICogMjAwMS8yLzcgLSBDaGFkIE4uIFRpbmRlbCA8Y3RpbmRlbCBhdCBpZWVlIGRvdCBvcmc+Ci0gKiAgICAgLSBBcHBsaWNhdGlvbnMgY2FuIG5vdyBxdWVyeSB0aGUgYm9uZCBmcm9tIHVzZXIgc3BhY2UgdG8gZ2V0Ci0gKiAgICAgICBpbmZvcm1hdGlvbiB3aGljaCBtYXkgYmUgdXNlZnVsLiAgVGhleSBkbyB0aGlzIGJ5IGNhbGxpbmcKLSAqICAgICAgIHRoZSBCT05EX0lORk9fUVVFUlkgaW9jdGwuICBPbmNlIHRoZSBhcHAga25vd3MgaG93IG1hbnkgc2xhdmVzCi0gKiAgICAgICBhcmUgaW4gdGhlIGJvbmQsIGl0IGNhbiBjYWxsIHRoZSBCT05EX1NMQVZFX0lORk9fUVVFUlkgaW9jdGwgdG8KLSAqICAgICAgIGdldCBzbGF2ZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAoIyBsaW5rIGZhaWx1cmVzLCBldGMpLiAgU2VlCi0gKiAgICAgICA8bGludXgvaWZfYm9uZGluZy5oPiBmb3IgbW9yZSBkZXRhaWxzLiAgVGhlIHN0cnVjdHMgb2YgaW50ZXJlc3QKLSAqICAgICAgIGFyZSBpZmJvbmQgYW5kIGlmc2xhdmUuCi0gKgotICogMjAwMS80LzUgLSBDaGFkIE4uIFRpbmRlbCA8Y3RpbmRlbCBhdCBpZWVlIGRvdCBvcmc+Ci0gKiAgICAgLSBQb3J0ZWQgdG8gMi40IEtlcm5lbAotICoKLSAqIDIwMDEvNS8yIC0gSmVmZnJleSBFLiBNYXN0IDxqZWZmIGF0IG1hc3RmYW1pbHkgZG90IGNvbT4KLSAqICAgICAtIFdoZW4gYSBkZXZpY2UgaXMgZGV0YWNoZWQgZnJvbSBhIGJvbmQsIHRoZSBzbGF2ZSBkZXZpY2UgaXMgbm8gbG9uZ2VyCi0gKiAgICAgICBsZWZ0IHRoaW5raW5nIHRoYXQgaXMgaGFzIGEgbWFzdGVyLgotICoKLSAqIDIwMDEvNS8xNiAtIEplZmZyZXkgRS4gTWFzdCA8amVmZiBhdCBtYXN0ZmFtaWx5IGRvdCBjb20+Ci0gKiAgICAgLSBtZW1zZXQgZGlkIG5vdCBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkIHRoZSBib25kIHJ3X2xvY2tzLiBVc2VkCi0gKiAgICAgICByd2xvY2tfaW5pdCB0byBpbml0aWFsaXplIHRvIHVubG9ja2VkIHN0YXRlIHRvIHByZXZlbnQgZGVhZGxvY2sgd2hlbgotICogICAgICAgZmlyc3QgYXR0ZW1wdGluZyBhIGxvY2sKLSAqICAgICAtIENhbGxlZCBTRVRfTU9EVUxFX09XTkVSIGZvciBib25kIGRldmljZQotICoKLSAqIDIwMDEvNS8xNyAtIFRpbSBBbmRlcnNvbiA8dHNhIGF0IG12aXN0YS5jb20+Ci0gKiAgICAgLSAyIHBhdGhzIGZvciByZWxlYXNpbmcgZm9yIHNsYXZlIHJlbGVhc2U7IDEgdGhyb3VnaCBpb2N0bAotICogICAgICAgYW5kIDIpIHRocm91Z2ggY2xvc2UuIEJvdGggcGF0aHMgbmVlZCB0byByZWxlYXNlIHRoZSBzYW1lIHdheS4KLSAqICAgICAtIHRoZSBmcmVlIHNsYXZlIGluIGJvbmQgcmVsZWFzZSBpcyBjaGFuZ2luZyBzbGF2ZSBzdGF0dXMgYmVmb3JlCi0gKiAgICAgICB0aGUgZnJlZS4gVGhlIG5ldGRldl9zZXRfbWFzdGVyKCkgaXMgaW50ZW5kZWQgdG8gY2hhbmdlIHNsYXZlIHN0YXRlCi0gKiAgICAgICBzbyBpdCBzaG91bGQgbm90IGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgcmVsZWFzZSBwcm9jZXNzLgotICogICAgIC0gU2ltcGxlIHJ1bGUgZm9yIHNsYXZlIHN0YXRlIGF0IHJlbGVhc2U6IG9ubHkgdGhlIGFjdGl2ZSBpbiBBL0IgYW5kCi0gKiAgICAgICBvbmx5IG9uZSBpbiB0aGUgdHJ1bmtlZCBjYXNlLgotICoKLSAqIDIwMDEvNi8wMSAtIFRpbSBBbmRlcnNvbiA8dHNhIGF0IG12aXN0YS5jb20+Ci0gKiAgICAgLSBOb3cgY2FsbCBkZXZfY2xvc2Ugd2hlbiByZWxlYXNpbmcgYSBzbGF2ZSBzbyBpdCBkb2Vzbid0IHNjcmV3IHVwCi0gKiAgICAgICBvdXQgcm91dGluZyB0YWJsZS4KLSAqCi0gKiAyMDAxLzYvMDEgLSBDaGFkIE4uIFRpbmRlbCA8Y3RpbmRlbCBhdCBpZWVlIGRvdCBvcmc+Ci0gKiAgICAgLSBBZGRlZCAvcHJvYyBzdXBwb3J0IGZvciBnZXR0aW5nIGJvbmQgYW5kIHNsYXZlIGluZm9ybWF0aW9uLgotICogICAgICAgSW5mb3JtYXRpb24gaXMgaW4gL3Byb2MvbmV0Lzxib25kIGRldmljZT4vaW5mby4KLSAqICAgICAtIENoYW5nZWQgdGhlIGxvY2tpbmcgd2hlbiBjYWxsaW5nIGJvbmRfY2xvc2UgdG8gcHJldmVudCBkZWFkbG9jay4KLSAqCi0gKiAyMDAxLzgvMDUgLSBKYW5pY2UgR2lyb3VhcmQgPGdpcm91YXJkIGF0IHVzLmlibS5jb20+Ci0gKiAgICAgLSBjb3JyZWN0IHByb2JsZW0gd2hlcmUgcmVmY250IG9mIHNsYXZlIGlzIG5vdCBpbmNyZW1lbnRlZCBpbiBib25kX2lvY3RsCi0gKiAgICAgICBzbyB0aGUgc3lzdGVtIGhhbmdzIHdoZW4gaGFsdGluZy4KLSAqICAgICAtIGNvcnJlY3QgbG9ja2luZyBwcm9ibGVtIHdoZW4gdW5hYmxlIHRvIG1hbGxvYyBpbiBib25kX2Vuc2xhdmUuCi0gKiAgICAgLSBhZGRpbmcgYm9uZF94bWl0X3hvciBsb2dpYy4KLSAqICAgICAtIGFkZGluZyBtdWx0aXBsZSBib25kIGRldmljZSBzdXBwb3J0LgotICoKLSAqIDIwMDEvOC8xMyAtIEVyaWsgSGFiYmluZ2EgPGVyaWtfaGFiYmluZ2EgYXQgaHAgZG90IGNvbT4KLSAqICAgICAtIGNvcnJlY3QgbG9ja2luZyBwcm9ibGVtIHdpdGggcnRubF9leGxvY2tfbm93YWl0Ci0gKgotICogMjAwMS84LzIzIC0gSmFuaWNlIEdpcm91YXJkIDxnaXJvdWFyZCBhdCB1cy5pYm0uY29tPgotICogICAgIC0gYnplcm8gaW5pdGlhbCBkZXZfYm9uZHMsIHRvIGNvcnJlY3Qgb29wcwotICogICAgIC0gY29udmVydCBTSU9DREVWUFJJVkFURSB0byBuZXcgTUlJIGlvY3RsIGNhbGxzCi0gKgotICogMjAwMS85LzEzIC0gVGFrYW8gSW5kb2ggPGluZG91IGRvdCB0YWthbyBhdCBqcCBkb3QgZnVqaXRzdSBkb3QgY29tPgotICogICAgIC0gQWRkIHRoZSBCT05EX0NIQU5HRV9BQ1RJVkUgaW9jdGwgaW1wbGVtZW50YXRpb24KLSAqCi0gKiAyMDAxLzkvMTQgLSBNYXJrIEh1dGggPG1odXRoIGF0IG12aXN0YSBkb3QgY29tPgotICogICAgIC0gQ2hhbmdlIE1JSV9MSU5LX1JFQURZIHRvIG5vdCBjaGVjayBmb3IgZW5kIG9mIGF1dG8tbmVnb3RpYXRpb24sCi0gKiAgICAgICBidXQgb25seSBmb3IgYW4gdXAgbGluay4KLSAqCi0gKiAyMDAxLzkvMjAgLSBDaGFkIE4uIFRpbmRlbCA8Y3RpbmRlbCBhdCBpZWVlIGRvdCBvcmc+Ci0gKiAgICAgLSBBZGQgdGhlIGRldmljZSBmaWVsZCB0byBib25kaW5nX3QuICBQcmV2aW91c2x5IHRoZSBuZXRfZGV2aWNlCi0gKiAgICAgICBjb3JyZXNwb25kaW5nIHRvIGEgYm9uZCB3YXNuJ3QgYXZhaWxhYmxlIGZyb20gdGhlIGJvbmRpbmdfdAotICogICAgICAgc3RydWN0dXJlLgotICoKLSAqIDIwMDEvOS8yNSAtIEphbmljZSBHaXJvdWFyZCA8Z2lyb3VhcmQgYXQgdXMuaWJtLmNvbT4KLSAqICAgICAtIGFkZCBhcnBfbW9uaXRvciBmb3IgYWN0aXZlIGJhY2t1cCBtb2RlCi0gKgotICogMjAwMS8xMC8yMyAtIFRha2FvIEluZG9oIDxpbmRvdSBkb3QgdGFrYW8gYXQganAgZG90IGZ1aml0c3UgZG90IGNvbT4KLSAqICAgICAtIFZhcmlvdXMgbWVtb3J5IGxlYWsgZml4ZXMKLSAqCi0gKiAyMDAxLzExLzUgLSBNYXJrIEh1dGggPG1hcmsgZG90IGh1dGggYXQgbXZpc3RhIGRvdCBjb20+Ci0gKiAgICAgLSBEb24ndCB0YWtlIHJ0bmwgbG9jayBpbiBib25kX21paV9tb25pdG9yIGFzIGl0IGRlYWRsb2NrcyB1bmRlcgotICogICAgICAgY2VydGFpbiBob3Rzd2FwIGNvbmRpdGlvbnMuCi0gKiAgICAgICBOb3RlOiAgdGhpcyBzYW1lIGNoYW5nZSBtYXkgYmUgcmVxdWlyZWQgaW4gYm9uZF9hcnBfbW9uaXRvciA/Pz8KLSAqICAgICAtIFJlbW92ZSBwb3NzaWJpbGl0eSBvZiBjYWxsaW5nIGJvbmRfc2V0aHdhZGRyIHdpdGggTlVMTCBzbGF2ZV9kZXYgcHRyCi0gKiAgICAgLSBIYW5kbGUgaG90IHN3YXAgZXRoZXJuZXQgaW50ZXJmYWNlIGRlcmVnaXN0cmF0aW9uIGV2ZW50cyB0byByZW1vdmUKLSAqICAgICAgIGtlcm5lbCBvb3BzIGZvbGxvd2luZyBob3Qgc3dhcCBvZiBlbnNsYXZlZCBpbnRlcmZhY2UKLSAqCi0gKiAyMDAyLzEvMiAtIENoYWQgTi4gVGluZGVsIDxjdGluZGVsIGF0IGllZWUgZG90IG9yZz4KLSAqICAgICAtIFJlc3RvcmUgb3JpZ2luYWwgc2xhdmUgZmxhZ3MgYXQgcmVsZWFzZSB0aW1lLgotICoKLSAqIDIwMDIvMDIvMTggLSBFcmlrIEhhYmJpbmdhIDxlcmlrX2hhYmJpbmdhIGF0IGhwIGRvdCBjb20+Ci0gKiAgICAgLSBib25kX3JlbGVhc2UoKTogY2FsbGluZyBrZnJlZSBvbiBvdXJfc2xhdmUgYWZ0ZXIgY2FsbCB0bwotICogICAgICAgYm9uZF9yZXN0b3JlX3NsYXZlX2ZsYWdzLCBub3QgYmVmb3JlCi0gKiAgICAgLSBib25kX2Vuc2xhdmUoKTogc2F2aW5nIHNsYXZlIGZsYWdzIGludG8gb3JpZ2luYWxfZmxhZ3MgYmVmb3JlCi0gKiAgICAgICBjYWxsIHRvIG5ldGRldl9zZXRfbWFzdGVyLCBzbyB0aGUgSUZGX1NMQVZFIGZsYWcgZG9lc24ndCBlbmQKLSAqICAgICAgIHVwIGluIG9yaWdpbmFsX2ZsYWdzCi0gKgotICogMjAwMi8wNC8wNSAtIE1hcmsgU21pdGggPG1hcmsuc21pdGggYXQgY29tZGV2IGRvdCBjYz4gYW5kCi0gKiAgICAgICAgICAgICAgU3RldmUgTWVhZCA8c3RldmUubWVhZCBhdCBjb21kZXYgZG90IGNjPgotICogICAgIC0gUG9ydCBHbGViIE5hdGFwb3YncyBtdWx0aWNhc3Qgc3VwcG9ydCBwYXRjaHMgZnJvbSAyLjQuMTIKLSAqICAgICAgIHRvIDIuNC4xOCBhZGRpbmcgc3VwcG9ydCBmb3IgbXVsdGljYXN0LgotICoKLSAqIDIwMDIvMDYvMTAgLSBUb255IEN1cmVpbmd0b24gPHRvbnkuY3VyZWluZ3RvbiAqIGhwX2NvbT4KLSAqICAgICAtIGNvcnJlY3RlZCB1bmluaXRpYWxpemVkIHBvaW50ZXIgKGlmci5pZnJfZGF0YSkgaW4gYm9uZF9jaGVja19kZXZfbGluazsKLSAqICAgICAgIGFjdHVhbGx5IGNoYW5nZWQgZnVuY3Rpb24gdG8gdXNlIE1JSVBIWSwgdGhlbiBNSUlSRUcsIGFuZCBmaW5hbGx5Ci0gKiAgICAgICBFVEhUT09MIHRvIGRldGVybWluZSB0aGUgbGluayBzdGF0dXMKLSAqICAgICAtIGZpeGVkIGJhZCBpZnJfZGF0YSBwb2ludGVyIGFzc2lnbm1lbnRzIGluIGJvbmRfaW9jdGwKLSAqICAgICAtIGNvcnJlY3RlZCBtb2RlIDEgYmVpbmcgcmVwb3J0ZWQgYXMgYWN0aXZlLWJhY2t1cCBpbiBib25kX2dldF9pbmZvOwotICogICAgICAgYWxzbyBhZGRlZCB0ZXh0IHRvIGRpc3Rpbmd1aXNoIHR5cGUgb2YgbG9hZCBiYWxhbmNpbmcgKHJyIG9yIHhvcikKLSAqICAgICAtIGNoYW5nZSBhcnBfaXBfdGFyZ2V0IG1vZHVsZSBwYXJhbSBmcm9tICIxLTEycyIgKGFycmF5IG9mIDEyIHB0cnMpCi0gKiAgICAgICB0byAicyIgKGEgc2luZ2xlIHB0cikKLSAqCi0gKiAyMDAyLzA4LzMwIC0gSmF5IFZvc2J1cmdoIDxmdWJhciBhdCB1cyBkb3QgaWJtIGRvdCBjb20+Ci0gKiAgICAgLSBSZW1vdmVkIGFjcXVpc2l0aW9uIG9mIHhtaXRfbG9jayBpbiBzZXRfbXVsdGljYXN0X2xpc3Q7IGNhdXNlZAotICogICAgICAgZGVhZGxvY2sgb24gU01QIChsb2NrIGlzIGhlbGQgYnkgY2FsbGVyKS4KLSAqICAgICAtIFJldmFtcGVkIFNJT0NHTUlJUEhZLCBTSU9DR01JSVJFRyBwb3J0aW9uIG9mIGJvbmRfY2hlY2tfZGV2X2xpbmsoKS4KLSAqCi0gKiAyMDAyLzA5LzE4IC0gSmF5IFZvc2J1cmdoIDxmdWJhciBhdCB1cyBkb3QgaWJtIGRvdCBjb20+Ci0gKiAgICAgLSBGaXhlZCB1cCBib25kX2NoZWNrX2Rldl9saW5rKCkgKGFuZCBjYWxsZXJzKTogcmVtb3ZlZCBzb21lIG1hZ2ljCi0gKgkgbnVtYmVycywgYmFuaXNoZWQgbG9jYWwgTUlJXyBkZWZpbmVzLCB3cmFwcGVkIGlvY3RsIGNhbGxzIHRvCi0gKgkgcHJldmVudCBFRkFVTFQgZXJyb3JzCi0gKgotICogMjAwMi85LzMwIC0gSmF5IFZvc2J1cmdoIDxmdWJhciBhdCB1cyBkb3QgaWJtIGRvdCBjb20+Ci0gKiAgICAgLSBtYWtlIHN1cmUgdGhlIGlwIHRhcmdldCBtYXRjaGVzIHRoZSBhcnBfdGFyZ2V0IGJlZm9yZSBzYXZpbmcgdGhlCi0gKgkgaHcgYWRkcmVzcy4KLSAqCi0gKiAyMDAyLzkvMzAgLSBEYW4gRWlzbmVyIDxlaXNuZXIgYXQgMnJvYm90cyBkb3QgY29tPgotICogICAgIC0gbWFrZSBzdXJlIG15X2lwIGlzIHNldCBiZWZvcmUgdGFraW5nIGRvd24gdGhlIGxpbmssIHNpbmNlCi0gKgkgbm90IGFsbCBzd2l0Y2hlcyByZXNwb25kIGlmIHRoZSBzb3VyY2UgaXAgaXMgbm90IHNldC4KLSAqCi0gKiAyMDAyLzEwLzggLSBKYW5pY2UgR2lyb3VhcmQgPGdpcm91YXJkIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KLSAqICAgICAtIHJlYWQgaW4gdGhlIGxvY2FsIGlwIGFkZHJlc3Mgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UKLSAqICAgICAtIGFkZCBwcmltYXJ5IHN1cHBvcnQKLSAqICAgICAtIG1ha2Ugc3VyZSAyKmFycF9pbnRlcnZhbCBoYXMgcGFzc2VkIHdoZW4gYSBuZXcgZGV2aWNlCi0gKiAgICAgICBpcyBicm91Z2h0IG9uLWxpbmUgYmVmb3JlIHRha2luZyBpdCBkb3duLgotICoKLSAqIDIwMDIvMDkvMTEgLSBQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZG0gYXQgbWFjcWVsIGRvdCBiZT4KLSAqICAgICAtIEFkZGVkIGJvbmRfeG1pdF9icm9hZGNhc3QgbG9naWMuCi0gKiAgICAgLSBBZGRlZCBib25kX21vZGUoKSBzdXBwb3J0IGZ1bmN0aW9uLgotICoKLSAqIDIwMDIvMTAvMjYgLSBMYXVyZW50IERlbmllbCA8bGF1cmVudC5kZW5pZWwgYXQgZnJlZS5mcj4KLSAqICAgICAtIGFsbG93IHRvIHJlZ2lzdGVyIG11bHRpY2FzdCBhZGRyZXNzZXMgb25seSBvbiBhY3RpdmUgc2xhdmUKLSAqICAgICAgICh1c2VmdWwgaW4gYWN0aXZlLWJhY2t1cCBtb2RlKQotICogICAgIC0gYWRkIG11bHRpY2FzdCBtb2R1bGUgcGFyYW1ldGVyCi0gKiAgICAgLSBmaXggZGVsZXRpb24gb2YgbXVsdGljYXN0IGdyb3VwcyBhZnRlciB1bmxvYWRpbmcgbW9kdWxlCi0gKgotICogMjAwMi8xMS8wNiAtIEthbWVzaHdhcmEgUmF5YXByb2x1IDxrYW1lc2h3YXJhLnJhbyAqIHdpcHJvX2NvbT4KLSAqICAgICAtIENoYW5nZXMgdG8gcHJldmVudCBwYW5pYyBmcm9tIGNsb3NpbmcgdGhlIGRldmljZSB0d2ljZTsgaWYgd2UgY2xvc2UKLSAqICAgICAgIHRoZSBkZXZpY2UgaW4gYm9uZF9yZWxlYXNlLCB3ZSBtdXN0IHNldCB0aGUgb3JpZ2luYWxfZmxhZ3MgdG8gZG93bgotICogICAgICAgc28gaXQgd29uJ3QgYmUgY2xvc2VkIGFnYWluIGJ5IHRoZSBuZXR3b3JrIGxheWVyLgotICoKLSAqIDIwMDIvMTEvMDcgLSBUb255IEN1cmVpbmd0b24gPHRvbnkuY3VyZWluZ3RvbiAqIGhwX2NvbT4KLSAqICAgICAtIEZpeCBhcnBfdGFyZ2V0X2h3X2FkZHIgbWVtb3J5IGxlYWsKLSAqICAgICAtIENyZWF0ZWQgYWN0aXZlYmFja3VwX2FycF9tb25pdG9yIGZ1bmN0aW9uIHRvIGhhbmRsZSBhcnAgbW9uaXRvcmluZwotICogICAgICAgaW4gYWN0aXZlIGJhY2t1cCBtb2RlIC0gdGhlIGJvbmRfYXJwX21vbml0b3IgaGFkIHNldmVyYWwgcHJvYmxlbXMuLi4KLSAqICAgICAgIHN1Y2ggYXMgYWxsb3dpbmcgc2xhdmVzIHRvIHR4IGFycHMgc2VxdWVudGlhbGx5IHdpdGhvdXQgYW55IGRlbGF5Ci0gKiAgICAgICBmb3IgYSByZXNwb25zZQotICogICAgIC0gUmVuYW1lZCBib25kX2FycF9tb25pdG9yIHRvIGxvYWRiYWxhbmNlX2FycF9tb25pdG9yIGFuZCByZS13cm90ZQotICogICAgICAgdGhpcyBmdW5jdGlvbiB0byBqdXN0IGhhbmRsZSBhcnAgbW9uaXRvcmluZyBpbiBsb2FkLWJhbGFuY2luZyBtb2RlOwotICogICAgICAgaXQgaXMgYSBsb3QgbW9yZSBjb21wYWN0IG5vdwotICogICAgIC0gQ2hhbmdlcyB0byBlbnN1cmUgb25lIGFuZCBvbmx5IG9uZSBzbGF2ZSB0cmFuc21pdHMgaW4gYWN0aXZlLWJhY2t1cAotICogICAgICAgbW9kZQotICogICAgIC0gUm9idXN0ZXNpemUgcGFyYW1ldGVyczsgd2FybiB1c2VycyBhYm91dCBiYWQgY29tYmluYXRpb25zIG9mCi0gKiAgICAgICBwYXJhbWV0ZXJzOyBhbHNvIGlmIG1paW1vbiBpcyBzcGVjaWZpZWQgYW5kIGEgbmV0d29yayBkcml2ZXIgZG9lcwotICogICAgICAgbm90IHN1cHBvcnQgTUlJIG9yIEVUSFRPT0wsIGluZm9ybSB0aGUgdXNlciBvZiB0aGlzCi0gKiAgICAgLSBDaGFuZ2VzIHRvIHN1cHBvcnQgbGlua19mYWlsdXJlX2NvdW50IHdoZW4gaW4gYXJwIG1vbml0b3JpbmcgbW9kZQotICogICAgIC0gRml4IHVwL2Rvd24gZGVsYXkgcmVwb3J0ZWQgaW4gL3Byb2MKLSAqICAgICAtIEFkZGVkIHZlcnNpb247IGxvZyB2ZXJzaW9uOyBtYWtlIHZlcnNpb24gYXZhaWxhYmxlIGZyb20gIm1vZGluZm8gLWQiCi0gKiAgICAgLSBGaXhlZCBwcm9ibGVtIGluIGJvbmRfY2hlY2tfZGV2X2xpbmsgLSBpZiB0aGUgZmlyc3QgSU9DVEwgKFNJT0NHTUlJUEgpCi0gKgkgZmFpbGVkLCB0aGUgRVRIVE9PTCBpb2N0bCBuZXZlciBnb3QgYSBjaGFuY2UKLSAqCi0gKiAyMDAyLzExLzE2IC0gTGF1cmVudCBEZW5pZWwgPGxhdXJlbnQuZGVuaWVsIGF0IGZyZWUuZnI+Ci0gKiAgICAgLSBmaXggbXVsdGljYXN0IGhhbmRsaW5nIGluIGFjdGl2ZWJhY2t1cF9hcnBfbW9uaXRvcgotICogICAgIC0gcmVtb3ZlIG9uZSB1bm5lY2Vzc2FyeSBhbmQgY29uZnVzaW5nIGN1cnJfYWN0aXZlX3NsYXZlID09IHNsYXZlIHRlc3QKLSAqCSBpbiBhY3RpdmViYWNrdXBfYXJwX21vbml0b3IKLSAqCi0gKiAgMjAwMi8xMS8xNyAtIExhdXJlbnQgRGVuaWVsIDxsYXVyZW50LmRlbmllbCBhdCBmcmVlLmZyPgotICogICAgIC0gZml4IGJvbmRfc2xhdmVfaW5mb19xdWVyeSB3aGVuIHNsYXZlX2lkID0gbnVtX3NsYXZlcwotICoKLSAqICAyMDAyLzExLzE5IC0gSmFuaWNlIEdpcm91YXJkIDxnaXJvdWFyZCBhdCB1cyBkb3QgaWJtIGRvdCBjb20+Ci0gKiAgICAgLSBjb3JyZWN0IGlmcl9kYXRhIHJlZmVyZW5jZS4gIFVwZGF0ZSBpZnJfZGF0YSByZWZlcmVuY2UKLSAqICAgICAgIHRvIG1paV9pb2N0bF9kYXRhIHN0cnVjdCB2YWx1ZXMgdG8gYXZvaWQgY29uZnVzaW9uLgotICoKLSAqICAyMDAyLzExLzIyIC0gQmVydCBCYXJiZSA8YmVydC5iYXJiZSBhdCBvcmFjbGUgZG90IGNvbT4KLSAqICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgYXJwX2lwX3RhcmdldAotICoKLSAqICAyMDAyLzEyLzEzIC0gSmF5IFZvc2J1cmdoIDxmdWJhciBhdCB1cyBkb3QgaWJtIGRvdCBjb20+Ci0gKgktIENoYW5nZWQgdG8gYWxsb3cgdGV4dCBzdHJpbmdzIGZvciBtb2RlIGFuZCBtdWx0aWNhc3QsIGUuZy4sCi0gKgkgIGluc21vZCBib25kaW5nIG1vZGU9YWN0aXZlLWJhY2t1cC4gIFRoZSBudW1iZXJzIHN0aWxsIHdvcmsuCi0gKgkgIE9uZSBjaGFuZ2U6IGFuIGludmFsaWQgY2hvaWNlIHdpbGwgY2F1c2UgbW9kdWxlIGxvYWQgZmFpbHVyZSwKLSAqCSAgcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIGJlaGF2aW9yIG9mIGp1c3QgcGlja2luZyBvbmUuCi0gKgktIE1pbm9yIGNsZWFudXBzOyBnb3QgcmlkIG9mIGR1cCBjdHlwZSBzdHVmZiwgYXRvaSBmdW5jdGlvbgotICoKLSAqIDIwMDMvMDIvMDcgLSBKYXkgVm9zYnVyZ2ggPGZ1YmFyIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KLSAqCS0gQWRkZWQgdXNlX2NhcnJpZXIgbW9kdWxlIHBhcmFtZXRlciB0aGF0IGNhdXNlcyBtaWltb24gdG8KLSAqCSAgdXNlIG5ldGlmX2NhcnJpZXJfb2soKSB0ZXN0IGluc3RlYWQgb2YgTUlJL0VUSFRPT0wgaW9jdGxzLgotICoJLSBNaW5vciBjbGVhbnVwczsgY29uc29saWRhdGVkIGlvY3RsIGNhbGxzIHRvIG9uZSBmdW5jdGlvbi4KLSAqCi0gKiAyMDAzLzAyLzA3IC0gVG9ueSBDdXJlaW5ndG9uIDx0b255LmN1cmVpbmd0b24gKiBocF9jb20+Ci0gKgktIEZpeCBib25kX21paV9tb25pdG9yKCkgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCByZXN1bHQgaW4KLSAqCSAgYm9uZGluZyByb3VuZC1yb2JpbiBtb2RlIGlnbm9yaW5nIGxpbmtzIGFmdGVyIGZhaWxvdmVyL3JlY292ZXJ5Ci0gKgotICogMjAwMy8wMy8xNyAtIEpheSBWb3NidXJnaCA8ZnViYXIgYXQgdXMgZG90IGlibSBkb3QgY29tPgotICoJLSBrbWFsbG9jIGZpeCAoR0ZQX0tFUk5FTCB0byBHRlBfQVRPTUlDKSByZXBvcnRlZCBieQotICoJICBTaG11bGlrIGRvdCBIZW4gYXQgaW50ZWwuY29tLgotICoJLSBCYXNlZCBvbiBkaXNjdXNzaW9uIG9uIG1haWxpbmcgbGlzdCwgY2hhbmdlZCB1c2Ugb2YKLSAqCSAgdXBkYXRlX3NsYXZlX2NudCgpLCBjcmVhdGVkIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBhZGRpbmcvcmVtb3ZpbmcKLSAqCSAgc2xhdmVzLCBjaGFuZ2VkIGJvbmRfeG1pdF94b3IoKSB0byBjaGVjayBzbGF2ZV9jbnQgaW5zdGVhZCBvZgotICoJICBjaGVja2luZyBzbGF2ZSBhbmQgc2xhdmUtPmRldiAod2hpY2ggb25seSB3b3JrZWQgYnkgYWNjaWRlbnQpLgotICoJLSBNaXNjIGNvZGUgY2xlYW51cDogZ2V0IGFycF9zZW5kKCkgcHJvdG90eXBlIGZyb20gaGVhZGVyIGZpbGUsCi0gKgkgIGFkZCBtYXhfYm9uZHMgdG8gYm9uZGluZy50eHQuCi0gKgotICogMjAwMy8wMy8xOCAtIFRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4gYW5kCi0gKgkJU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIE1ha2Ugc3VyZSBvbmx5IGJvbmRfYXR0YWNoX3NsYXZlKCkgYW5kIGJvbmRfZGV0YWNoX3NsYXZlKCkgY2FuCi0gKgkgIG1hbmlwdWxhdGUgdGhlIHNsYXZlIGxpc3QsIGluY2x1ZGluZyBzbGF2ZV9jbnQsIGV2ZW4gd2hlbiBpbgotICoJICBib25kX3JlbGVhc2VfYWxsKCkuCi0gKgktIEZpeGVkIGhhbmcgaW4gYm9uZF9yZWxlYXNlKCkgd2l0aCB0cmFmZmljIHJ1bm5pbmc6Ci0gKgkgIG5ldGRldl9zZXRfbWFzdGVyKCkgbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBib25kIGxvY2suCi0gKgotICogMjAwMy8wMy8xOCAtIFRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4gYW5kCi0gKgkJU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEZpeGVkIGhhbmcgaW4gYm9uZF9lbnNsYXZlKCkgd2l0aCB0cmFmZmljIHJ1bm5pbmc6Ci0gKgkgIG5ldGRldl9zZXRfbWFzdGVyKCkgbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBib25kIGxvY2suCi0gKgotICogMjAwMy8wMy8xOCAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEFkZGVkIHN1cHBvcnQgZm9yIGdldHRpbmcgc2xhdmUncyBzcGVlZCBhbmQgZHVwbGV4IHZpYSBldGh0b29sLgotICoJICBOZWVkZWQgZm9yIDgwMi4zYWQgYW5kIG90aGVyIGZ1dHVyZSBtb2Rlcy4KLSAqCi0gKiAyMDAzLzAzLzE4IC0gVHNpcHB5IE1lbmRlbHNvbiA8dHNpcHB5Lm1lbmRlbHNvbiBhdCBpbnRlbCBkb3QgY29tPiBhbmQKLSAqCQlTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gRW5hYmxlIHN1cHBvcnQgb2YgbW9kZXMgdGhhdCBuZWVkIHRvIHVzZSB0aGUgdW5pcXVlIG1hYyBhZGRyZXNzIG9mCi0gKgkgIGVhY2ggc2xhdmUuCi0gKgkgICogYm9uZF9lbnNsYXZlKCk6IE1vdmVkIHNldHRpbmcgdGhlIHNsYXZlJ3MgbWFjIGFkZHJlc3MsIGFuZAotICoJICAgIG9wZW5uaW5nIGl0LCBmcm9tIHRoZSBhcHBsaWNhdGlvbiB0byB0aGUgZHJpdmVyLiBUaGlzIGJyZWFrcwotICoJICAgIGJhY2t3YXJkIGNvbWFwdGliaWxpdHkgd2l0aCBvbGQgdmVyc2lvbnMgb2YgaWZlbnNsYXZlIHRoYXQgb3BlbgotICoJICAgICB0aGUgc2xhdmUgYmVmb3JlIGVuYWxzdmluZyBpdCAhISEuCi0gKgkgICogYm9uZF9yZWxlYXNlKCk6IFRoZSBkcml2ZXIgYWxzbyB0YWtlcyBjYXJlIG9mIGNsb3NpbmcgdGhlIHNsYXZlCi0gKgkgICAgYW5kIHJlc3RvcmluZyBpdHMgb3JpZ2luYWwgbWFjIGFkZHJlc3MuCi0gKgktIFJlbW92ZWQgdGhlIGNvZGUgdGhhdCByZXN0b3JlcyBhbGwgYmFzZSBkcml2ZXIncyBmbGFncy4KLSAqCSAgRmxhZ3MgYXJlIGF1dG9tYXRpY2FsbHkgcmVzdG9yZWQgb25jZSBhbGwgdW5kbyBzdGFnZXMgYXJlIGRvbmUKLSAqCSAgcHJvcGVybHkuCi0gKgktIEJsb2NrIHBvc3NpYmlsaXR5IG9mIGVuc2xhdmluZyBiZWZvcmUgdGhlIG1hc3RlciBpcyB1cC4gVGhpcwotICoJICBwcmV2ZW50cyBwdXR0aW5nIHRoZSBzeXN0ZW0gaW4gYW4gdW5zdGFibGUgc3RhdGUuCi0gKgotICogMjAwMy8wMy8xOCAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+LAotICoJCVRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4gYW5kCi0gKgkJU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEFkZGVkIHN1cHBvcnQgZm9yIElFRUUgODAyLjNhZCBEeW5hbWljIGxpbmsgYWdncmVnYXRpb24gbW9kZS4KLSAqCi0gKiAyMDAzLzA1LzAxIC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gQWRkZWQgQUJJIHZlcnNpb24gY29udHJvbCB0byByZXN0b3JlIGNvbXBhdGliaWxpdHkgYmV0d2VlbgotICoJICBuZXcvb2xkIGlmZW5zbGF2ZSBhbmQgbmV3L29sZCBib25kaW5nLgotICoKLSAqIDIwMDMvMDUvMDEgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gRml4ZWQgYnVnIGluIGJvbmRfcmVsZWFzZV9hbGwoKTogc2F2ZSBvbGQgdmFsdWUgb2YgY3Vycl9hY3RpdmVfc2xhdmUKLSAqCSAgYmVmb3JlIHNldHRpbmcgaXQgdG8gTlVMTC4KLSAqCS0gQ2hhbmdlZCBkcml2ZXIgdmVyc2lvbmluZyBzY2hlbWUgdG8gaW5jbHVkZSB2ZXJzaW9uIG51bWJlciBpbnN0ZWFkCi0gKgkgIG9mIHJlbGVhc2UgZGF0ZSAodGhhdCBpcyBhbHJlYWR5IGluIGFub3RoZXIgZmllbGQpLiBUaGVyZSBhcmUgMwotICoJICBmaWVsZHMgWC5ZLlogd2hlcmU6Ci0gKgkJWCAtIE1ham9yIHZlcnNpb24gLSBiaWcgYmVoYXZpb3IgY2hhbmdlcwotICoJCVkgLSBNaW5vciB2ZXJzaW9uIC0gYWRkaXRpb24gb2YgZmVhdHVyZXMKLSAqCQlaIC0gRXh0cmEgdmVyc2lvbiAtIG1pbm9yIGNoYW5nZXMgYW5kIGJ1ZyBmaXhlcwotICoJICBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIDEuMC4wIGFzIGEgYmFzZSBsaW5lLgotICoKLSAqIDIwMDMvMDUvMDEgLSBUc2lwcHkgTWVuZGVsc29uIDx0c2lwcHkubWVuZGVsc29uIGF0IGludGVsIGRvdCBjb20+IGFuZAotICoJCUFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEFkZGVkIHN1cHBvcnQgZm9yIGxhY3BfcmF0ZSBtb2R1bGUgcGFyYW0uCi0gKgktIENvZGUgYmVhdXRpZmljYXRpb24gYW5kIHN0eWxlIGNoYW5nZXMgKG1haW5seSBpbiBjb21tZW50cykuCi0gKgkgIG5ldyB2ZXJzaW9uIC0gMS4wLjEKLSAqCi0gKiAyMDAzLzA1LzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEJhc2VkIG9uIGRpc2N1c3Npb24gb24gbWFpbGluZyBsaXN0LCBjaGFuZ2VkIGxvY2tpbmcgc2NoZW1lCi0gKgkgIHRvIHVzZSBsb2NrL3VubG9jayBvciBsb2NrX2JoL3VubG9ja19iaCBhcHByb3ByaWF0ZWx5IGluc3RlYWQKLSAqCSAgb2YgbG9ja19pcnFzYXZlL3VubG9ja19pcnFyZXN0b3JlLiBUaGUgbmV3IHNjaGVtZSBoZWxwcyBleHBvc2luZwotICoJICBoaWRkZW4gYnVncyBhbmQgc29sdmVzIHN5c3RlbSBoYW5ncyB0aGF0IG9jY3VycmVkIGR1ZSB0byB0aGUgZmFjdAotICoJICB0aGF0IGhvbGRpbmcgbG9ja19pcnFzYXZlIGRvZXNuJ3QgcHJldmVudCBzb2Z0aXJxcyBmcm9tIHJ1bm5pbmcuCi0gKgkgIFRoaXMgYWxzbyBpbmNyZWFzZXMgdG90YWwgdGhyb3VnaHB1dCBzaW5jZSBpbnRlcnJ1cHRzIGFyZSBub3QKLSAqCSAgYmxvY2tlZCBvbiBlYWNoIHRyYW5zbWl0dGVkIHBhY2tldHMgb3IgbW9uaXRvciB0aW1lb3V0LgotICoJICBuZXcgdmVyc2lvbiAtIDIuMC4wCi0gKgotICogMjAwMy8wNS8wMSAtIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBBZGRlZCBzdXBwb3J0IGZvciBUcmFuc21pdCBsb2FkIGJhbGFuY2luZyBtb2RlLgotICoJLSBDb25jZW50cmF0ZSBhbGwgYXNzaWdubWVudHMgb2YgY3Vycl9hY3RpdmVfc2xhdmUgdG8gYSBzaW5nbGUgcG9pbnQKLSAqCSAgc28gc3BlY2lmaWMgbW9kZXMgY2FuIHRha2UgYWN0aW9ucyB3aGVuIHRoZSBwcmltYXJ5IGFkYXB0ZXIgaXMKLSAqCSAgY2hhbmdlZC4KLSAqCS0gVGFrZSB0aGUgdXBkZWxheSBwYXJhbWV0ZXIgaW50byBjb25zaWRlcmF0aW9uIGR1cmluZyBib25kX2Vuc2xhdmUKLSAqCSAgc2luY2Ugc29tZSBhZGFwdGVycyBsb29zZSB0aGVpciBsaW5rIGR1cmluZyBzZXR0aW5nIHRoZSBkZXZpY2UuCi0gKgktIFJlbmFtZWQgYm9uZF8zYWRfbGlua19zdGF0dXNfY2hhbmdlZCgpIHRvCi0gKgkgIGJvbmRfM2FkX2hhbmRsZV9saW5rX2NoYW5nZSgpIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVExCLgotICoJICBuZXcgdmVyc2lvbiAtIDIuMS4wCi0gKgotICogMjAwMy8wNS8wMSAtIFRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gQWRkZWQgc3VwcG9ydCBmb3IgQWRhcHRpdmUgbG9hZCBiYWxhbmNpbmcgbW9kZSB3aGljaCBpcwotICoJICBlcXVpdmFsZW50IHRvIFRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nICsgUmVjZWl2ZSBsb2FkIGJhbGFuY2luZy4KLSAqCSAgbmV3IHZlcnNpb24gLSAyLjIuMAotICoKLSAqIDIwMDMvMDUvMTUgLSBKYXkgVm9zYnVyZ2ggPGZ1YmFyIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KLSAqCS0gQXBwbGllZCBmaXggdG8gYWN0aXZlYmFja3VwX2FycF9tb25pdG9yIHBvc3RlZCB0byBib25kaW5nLWRldmVsCi0gKgkgIGJ5IFRvbnkgQ3VyZWluZ3RvbiA8dG9ueS5jdXJlaW5ndG9uICogaHBfY29tPi4gIEZpeGVzIEFSUAotICoJICBtb25pdG9yIGVuZGxlc3MgZmFpbG92ZXIgYnVnLiAgVmVyc2lvbiB0byAyLjIuMTAKLSAqCi0gKiAyMDAzLzA1LzIwIC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gRml4ZWQgYnVnIGluIEFCSSB2ZXJzaW9uIGNvbnRyb2wgLSBEb24ndCBjb21taXQgdG8gYSBzcGVjaWZpYwotICoJICBBQkkgdmVyc2lvbiBpZiByZWNlaXZpbmcgdW5zdXBwb3J0ZWQgaW9jdGwgY29tbWFuZHMuCi0gKgotICogMjAwMy8wNS8yMiAtIEpheSBWb3NidXJnaCA8ZnViYXIgYXQgdXMgZG90IGlibSBkb3QgY29tPgotICoJLSBGaXggaWZlbnNsYXZlIC1jIGNhdXNpbmcgYm9uZCB0byBsb29zZSBleGlzdGluZyByb3V0ZXM7Ci0gKgkgIGFkZGVkIGJvbmRfc2V0X21hY19hZGRyZXNzKCkgdGhhdCBkb2Vzbid0IHJlcXVpcmUgdGhlCi0gKgkgIGJvbmQgdG8gYmUgZG93bi4KLSAqCS0gSW4gY29uanVuY3Rpb24gd2l0aCBmaXggZm9yIGlmZW5zbGF2ZSAtYywgaW4KLSAqCSAgYm9uZF9jaGFuZ2VfYWN0aXZlKCksIGNoYW5naW5nIHRvIHRoZSBhbHJlYWR5IGFjdGl2ZSBzbGF2ZQotICoJICBpcyBubyBsb25nZXIgYW4gZXJyb3IgKGl0IHN1Y2Nlc3NmdWxseSBkb2VzIG5vdGhpbmcpLgotICoKLSAqIDIwMDMvMDYvMzAgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgotICogCS0gRml4ZWQgYm9uZF9jaGFuZ2VfYWN0aXZlKCkgZm9yIEFMQi9UTEIgbW9kZXMuCi0gKgkgIFZlcnNpb24gdG8gMi4yLjE0LgotICoKLSAqIDIwMDMvMDcvMjkgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgotICogCS0gRml4ZWQgQVJQIG1vbml0b3JpbmcgYnVnLgotICoJICBWZXJzaW9uIHRvIDIuMi4xNS4KLSAqCi0gKiAyMDAzLzA3LzMxIC0gV2lsbHkgVGFycmVhdSA8d2lsbHkgYXQgb2RzIGRvdCBvcmc+Ci0gKiAJLSBGaXhlZCBrZXJuZWwgcGFuaWMgd2hlbiB1c2luZyBBUlAgbW9uaXRvcmluZyB3aXRob3V0Ci0gKgkgIHNldHRpbmcgYm9uZCdzIElQIGFkZHJlc3MuCi0gKgkgIFZlcnNpb24gdG8gMi4yLjE2LgotICoKLSAqIDIwMDMvMDgvMDYgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgotICogCS0gQmFjayBwb3J0IGZyb20gMi42OiB1c2UgYWxsb2NfbmV0ZGV2KCk7IGZpeCAvcHJvYyBoYW5kbGluZzsKLSAqCSAgbWFkZSBzdGF0cyBhIHBhcnQgb2YgYm9uZCBzdHJ1Y3Qgc28gbm8gbmVlZCB0byBhbGxvY2F0ZQotICoJICBhbmQgZnJlZSBpdCBzZXBhcmF0ZWx5OyB1c2Ugc3RhbmRhcmQgbGlzdCBvcGVyYXRpb25zIGluc3RlYWQKLSAqCSAgb2YgcHJlLWFsbG9jYXRlZCBhcnJheSBvZiBib25kcy4KLSAqCSAgVmVyc2lvbiB0byAyLjMuMC4KLSAqCi0gKiAyMDAzLzA4LzA3IC0gSmF5IFZvc2J1cmdoIDxmdWJhciBhdCB1cyBkb3QgaWJtIGRvdCBjb20+LAotICoJICAgICAgIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+IGFuZAotICoJICAgICAgIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBQcm9wYWdhdGluZyBtYXN0ZXIncyBzZXR0aW5nczogRGlzdGluZ3Vpc2ggYmV0d2VlbiBtb2RlcyB0aGF0Ci0gKgkgIHVzZSBhIHByaW1hcnkgc2xhdmUgZnJvbSB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvcGFnYXRlIHNldHRpbmdzCi0gKgkgIGFjY29yZGluZ2x5OyBDb25zb2xpZGF0ZSBjaGFuZ2VfYWN0aXZlIG9wZWFydGlvbnMgYW5kIGFkZAotICoJICByZXNlbGVjdF9hY3RpdmUgYW5kIGZpbmRfYmVzdCBvcGVhcnRpb25zOyBEZWNvdXBsZSBwcm9taXNjdW91cwotICoJICBoYW5kbGluZyBmcm9tIHRoZSBtdWx0aWNhc3QgbW9kZSBzZXR0aW5nOyBBZGQgc3VwcG9ydCBmb3IgY2hhbmdpbmcKLSAqCSAgSFcgYWRkcmVzcyBhbmQgTVRVIHdpdGggcHJvcGVyIHVud2luZDsgQ29uc29saWRhdGUgcHJvY2ZzIGNvZGUsCi0gKgkgIGFkZCBDSEFOR0VOQU1FIGhhbmRsZXI7IEVuaGFuY2UgbmV0ZGV2IG5vdGlmaWNhdGlvbiBoYW5kbGluZy4KLSAqCSAgVmVyc2lvbiB0byAyLjQuMC4KLSAqCi0gKiAyMDAzLzA5LzE1IC0gU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXIgYXQgb3NkbCBkb3Qgb3JnPiwKLSAqCSAgICAgICBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBDb252ZXJ0IC9wcm9jIHRvIHNlcV9maWxlIGludGVyZmFjZS4KLSAqCSAgQ2hhbmdlIC9wcm9jL25ldC9ib25kWC9pbmZvIHRvIC9wcm9jL25ldC9ib25kaW5nL2JvbmRYLgotICoJICBTZXQgdmVyc2lvbiB0byAyLjQuMS4KLSAqCi0gKiAyMDAzLzExLzIwIC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gRml4IC9wcm9jIGNyZWF0aW9uL2Rlc3RydWN0aW9uLgotICoKLSAqIDIwMDMvMTIvMDEgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gTWFzc2l2ZSBjbGVhbnVwIC0gU2V0IHZlcnNpb24gdG8gMi41LjAKLSAqCSAgQ29kZSBjaGFuZ2VzOgotICoJICBvIENvbnNvbGlkYXRlIGZvcm1hdCBvZiBwcmludHMgYW5kIGRlYnVnIHByaW50cy4KLSAqCSAgbyBSZW1vdmUgYm9uZGluZ190L3NsYXZlX3QgdHlwZWRlZnMgYW5kIGNvbnNvbGlkYXRlIGFsbCBjYXN0cy4KLSAqCSAgbyBSZW1vdmUgZGVhZCBjb2RlIGFuZCB1bm5lY2Vzc2FyeSBjaGVja3MuCi0gKgkgIG8gQ29uc29saWRhdGUgc3RhcnRpbmcvc3RvcHBpbmcgdGltZXJzLgotICoJICBvIENvbnNvbGlkYXRlIGhhbmRsaW5nIG9mIHByaW1hcnkgbW9kdWxlIHBhcmFtIHRocm91Z2hvdXQgdGhlIGNvZGUuCi0gKgkgIG8gUmVtb3ZlZCBtdWx0aWNhc3QgbW9kdWxlIHBhcmFtIHN1cHBvcnQgLSBhbGwgc2V0dGluZ3MgYXJlIGRvbmUKLSAqCSAgICBhY2NvcmRpbmcgdG8gbW9kZS4KLSAqCSAgbyBTbGF2ZSBsaXN0IGl0ZXJhdGlvbiAtIGJvbmQgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIGxpc3QsCi0gKgkgICAgYWRkZWQgY3ljbGljIGxpc3QgaXRlcmF0aW9uIG1hY3Jvcy4KLSAqCSAgbyBDb25zb2xpZGF0ZSBlcnJvciBoYW5kbGluZyBpbiBhbGwgeG1pdCBmdW5jdGlvbnMuCi0gKgkgIFN0eWxlIGNoYW5nZXM6Ci0gKgkgIG8gQ29uc29saWRhdGUgZnVuY3Rpb24gbmFtaW5nIGFuZCBkZWNsYXJhdGlvbnMuCi0gKgkgIG8gQ29uc29saWRhdGUgZnVuY3Rpb24gcGFyYW1zIGFuZCBsb2NhbCB2YXJpYWJsZXMgbmFtZXMuCi0gKgkgIG8gQ29uc29saWRhdGUgcmV0dXJuIHZhbHVlcy4KLSAqCSAgbyBDb25zb2xpZGF0ZSBjdXJseSBicmFjZXMuCi0gKgkgIG8gQ29uc29saWRhdGUgY29uZGl0aW9uYWxzIGZvcm1hdC4KLSAqCSAgbyBDaGFuZ2Ugc3RydWN0IG1lbWJlciBuYW1lcyBhbmQgdHlwZXMuCi0gKgkgIG8gQ2hvbXAgdHJhaWxpbmcgc3BhY2VzLCByZW1vdmUgZW1wdHkgbGluZXMsIGZpeCBpbmRlbnRhdGlvbnMuCi0gKgkgIG8gUmUtb3JnYW5pemUgY29kZSBhY2NvcmRpbmcgdG8gY29udGV4dC4KLSAqCi0gKiAyMDAzLzEyLzMwIC0gQW1pciBOb2FtIDxhbWlyLm5vYW0gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gRml4ZWQ6IENhbm5vdCByZW1vdmUgYW5kIHJlLWVuc2xhdmUgdGhlIG9yaWdpbmFsIGFjdGl2ZSBzbGF2ZS4KLSAqCS0gRml4ZWQ6IFJlbGVhc2luZyB0aGUgb3JpZ2luYWwgYWN0aXZlIHNsYXZlIGNhdXNlcyBtYWMgYWRkcmVzcwotICoJCSBkdXBsaWNhdGlvbi4KLSAqCS0gQWRkIHN1cHBvcnQgZm9yIHNsYXZlcyB0aGF0IHVzZSBldGh0b29sX29wcy4KLSAqCSAgU2V0IHZlcnNpb24gdG8gMi41LjMuCi0gKgotICogMjAwNC8wMS8wNSAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIFNhdmUgYm9uZGluZyBwYXJhbWV0ZXJzIHBlciBib25kIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdsb2JhbCB2YWx1ZXMuCi0gKgkgIFNldCB2ZXJzaW9uIHRvIDIuNS40LgotICoKLSAqIDIwMDQvMDEvMTQgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gRW5oYW5jZSBWTEFOIHN1cHBvcnQ6Ci0gKgkgICogQWRkIHN1cHBvcnQgZm9yIFZMQU4gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNhcGFibGUgc2xhdmVzLgotICoJICAqIEFkZCBjYXBhYmlsaXR5IHRvIHRhZyBzZWxmIGdlbmVyYXRlZCBwYWNrZXRzIGluIEFMQi9UTEIgbW9kZXMuCi0gKgkgIFNldCB2ZXJzaW9uIHRvIDIuNi4wLgotICogMjAwNC8xMC8yOSAtIE1pdGNoIFdpbGxpYW1zIDxtaXRjaC5hLndpbGxpYW1zIGF0IGludGVsIGRvdCBjb20+Ci0gKiAgICAgIC0gRml4ZWQgYnVnIHdoZW4gdW5sb2FkaW5nIG1vZHVsZSB3aGlsZSB1c2luZyA4MDIuM2FkLiAgSWYKLSAqICAgICAgICBzcGlubG9jayBkZWJ1Z2dpbmcgaXMgdHVybmVkIG9uLCB0aGlzIGNhdXNlcyBhIHN0YWNrIGR1bXAuCi0gKiAgICAgICAgU29sdXRpb24gaXMgdG8gbW92ZSBjYWxsIHRvIGRldl9yZW1vdmVfcGFjayBvdXRzaWRlIG9mIHRoZQotICogICAgICAgIHNwaW5sb2NrLgotICogICAgICAgIFNldCB2ZXJzaW9uIHRvIDIuNi4xLgotICogMjAwNS8wNi8wNSAtIEpheSBWb3NidXJnaCA8ZnViYXJAdXMuaWJtLmNvbT4KLSAqIAktIFN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgZ3JhdHVpdG91cyBBUlBzIGluIGFjdGl2ZS1iYWNrdXAgbW9kZS4KLSAqIAkgIEluY2x1ZGVzIHN1cHBvcnQgZm9yIFZMQU4gdGFnZ2luZyBhbGwgYm9uZGluZy1nZW5lcmF0ZWQgQVJQcwotICogCSAgYXMgbmVlZGVkLiAgU2V0IHZlcnNpb24gdG8gMi42LjIuCi0gKiAyMDA1LzA2LzA4IC0gSmFzb24gR2FibGVyIDxqeWdhYmxlciBhdCBsYmwgZG90IGdvdj4KLSAqCS0gYWx0ZXJuYXRlIGhhc2hpbmcgcG9saWN5IHN1cHBvcnQgZm9yIG1vZGUgMgotICoJICAqIEFkZGVkIGtlcm5lbCBwYXJhbWV0ZXIgInhtaXRfaGFzaF9wb2xpY3kiIHRvIGFsbG93IHRoZSBzZWxlY3Rpb24KLSAqCSAgICBvZiBkaWZmZXJlbnQgaGFzaGluZyBwb2xpY2llcyBmb3IgbW9kZSAyLiAgVGhlIG9yaWdpbmFsIG1vZGUgMgotICoJICAgIHBvbGljeSBpcyB0aGUgZGVmYXVsdCwgbm93IGZvdW5kIGluIHhtaXRfaGFzaF9wb2xpY3lfbGF5ZXIyKCkuCi0gKgkgICogQWRkZWQgeG1pdF9oYXNoX3BvbGljeV9sYXllcjM0KCkKLSAqCS0gTW9kaWZpZWQgYnkgSmF5IFZvc2J1cmdoIDxmdWJhckB1cy5pYm0uY29tPiB0byBhbHNvIHN1cHBvcnQgbW9kZSA0LgotICoJICBTZXQgdmVyc2lvbiB0byAyLjYuMy4KLSAqIDIwMDUvMDkvMjYgLSBKYXkgVm9zYnVyZ2ggPGZ1YmFyQHVzLmlibS5jb20+Ci0gKgktIFJlbW92ZWQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCBpZmVuc2xhdmVzLiAgVmVyc2lvbiAyLjYuNC4KICAqLwogCiAvLyNkZWZpbmUgQk9ORElOR19ERUJVRyAxCkBAIC01NTcsNiArOTcsNyBAQAogc3RhdGljIGNoYXIgKnhtaXRfaGFzaF9wb2xpY3kgPSBOVUxMOwogc3RhdGljIGludCBhcnBfaW50ZXJ2YWwgPSBCT05EX0xJTktfQVJQX0lOVEVSVjsKIHN0YXRpYyBjaGFyICphcnBfaXBfdGFyZ2V0W0JPTkRfTUFYX0FSUF9UQVJHRVRTXSA9IHsgTlVMTCwgfTsKK3N0cnVjdCBib25kX3BhcmFtcyBib25kaW5nX2RlZmF1bHRzOwogCiBtb2R1bGVfcGFyYW0obWF4X2JvbmRzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfYm9uZHMsICJNYXggbnVtYmVyIG9mIGJvbmRlZCBkZXZpY2VzIik7CkBAIC01NjUsMTcgKzEwNiwyNCBAQAogbW9kdWxlX3BhcmFtKHVwZGVsYXksIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVwZGVsYXksICJEZWxheSBiZWZvcmUgY29uc2lkZXJpbmcgbGluayB1cCwgaW4gbWlsbGlzZWNvbmRzIik7CiBtb2R1bGVfcGFyYW0oZG93bmRlbGF5LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkb3duZGVsYXksICJEZWxheSBiZWZvcmUgY29uc2lkZXJpbmcgbGluayBkb3duLCBpbiBtaWxsaXNlY29uZHMiKTsKK01PRFVMRV9QQVJNX0RFU0MoZG93bmRlbGF5LCAiRGVsYXkgYmVmb3JlIGNvbnNpZGVyaW5nIGxpbmsgZG93biwgIgorCQkJICAgICJpbiBtaWxsaXNlY29uZHMiKTsKIG1vZHVsZV9wYXJhbSh1c2VfY2FycmllciwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModXNlX2NhcnJpZXIsICJVc2UgbmV0aWZfY2Fycmllcl9vayAodnMgTUlJIGlvY3RscykgaW4gbWlpbW9uOyAwIGZvciBvZmYsIDEgZm9yIG9uIChkZWZhdWx0KSIpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfY2FycmllciwgIlVzZSBuZXRpZl9jYXJyaWVyX29rICh2cyBNSUkgaW9jdGxzKSBpbiBtaWltb247ICIKKwkJCSAgICAgICIwIGZvciBvZmYsIDEgZm9yIG9uIChkZWZhdWx0KSIpOwogbW9kdWxlX3BhcmFtKG1vZGUsIGNoYXJwLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobW9kZSwgIk1vZGUgb2Ygb3BlcmF0aW9uIDogMCBmb3Igcm91bmQgcm9iaW4sIDEgZm9yIGFjdGl2ZS1iYWNrdXAsIDIgZm9yIHhvciIpOworTU9EVUxFX1BBUk1fREVTQyhtb2RlLCAiTW9kZSBvZiBvcGVyYXRpb24gOiAwIGZvciBiYWxhbmNlLXJyLCAiCisJCSAgICAgICAiMSBmb3IgYWN0aXZlLWJhY2t1cCwgMiBmb3IgYmFsYW5jZS14b3IsICIKKwkJICAgICAgICIzIGZvciBicm9hZGNhc3QsIDQgZm9yIDgwMi4zYWQsIDUgZm9yIGJhbGFuY2UtdGxiLCAiCisJCSAgICAgICAiNiBmb3IgYmFsYW5jZS1hbGIiKTsKIG1vZHVsZV9wYXJhbShwcmltYXJ5LCBjaGFycCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByaW1hcnksICJQcmltYXJ5IG5ldHdvcmsgZGV2aWNlIHRvIHVzZSIpOwogbW9kdWxlX3BhcmFtKGxhY3BfcmF0ZSwgY2hhcnAsIDApOwotTU9EVUxFX1BBUk1fREVTQyhsYWNwX3JhdGUsICJMQUNQRFUgdHggcmF0ZSB0byByZXF1ZXN0IGZyb20gODAyLjNhZCBwYXJ0bmVyIChzbG93L2Zhc3QpIik7CitNT0RVTEVfUEFSTV9ERVNDKGxhY3BfcmF0ZSwgIkxBQ1BEVSB0eCByYXRlIHRvIHJlcXVlc3QgZnJvbSA4MDIuM2FkIHBhcnRuZXIgIgorCQkJICAgICIoc2xvdy9mYXN0KSIpOwogbW9kdWxlX3BhcmFtKHhtaXRfaGFzaF9wb2xpY3ksIGNoYXJwLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoeG1pdF9oYXNoX3BvbGljeSwgIlhPUiBoYXNoaW5nIG1ldGhvZCA6IDAgZm9yIGxheWVyIDIgKGRlZmF1bHQpLCAxIGZvciBsYXllciAzKzQiKTsKK01PRFVMRV9QQVJNX0RFU0MoeG1pdF9oYXNoX3BvbGljeSwgIlhPUiBoYXNoaW5nIG1ldGhvZDogMCBmb3IgbGF5ZXIgMiAoZGVmYXVsdCkiCisJCQkJICAgIiwgMSBmb3IgbGF5ZXIgMys0Iik7CiBtb2R1bGVfcGFyYW0oYXJwX2ludGVydmFsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhhcnBfaW50ZXJ2YWwsICJhcnAgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoYXJwX2lwX3RhcmdldCwgY2hhcnAsIE5VTEwsIDApOwpAQCAtNTg2LDMwICsxMzQsMjcgQEAKIHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0KIAlEUlZfREVTQ1JJUFRJT04gIjogdiIgRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKIAotc3RhdGljIExJU1RfSEVBRChib25kX2Rldl9saXN0KTsKK0xJU1RfSEVBRChib25kX2Rldl9saXN0KTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpib25kX3Byb2NfZGlyID0gTlVMTDsKICNlbmRpZgogCitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBib25kaW5nX3J3c2VtOwogc3RhdGljIHUzMiBhcnBfdGFyZ2V0W0JPTkRfTUFYX0FSUF9UQVJHRVRTXSA9IHsgMCwgfSA7CiBzdGF0aWMgaW50IGFycF9pcF9jb3VudAk9IDA7CiBzdGF0aWMgaW50IGJvbmRfbW9kZQk9IEJPTkRfTU9ERV9ST1VORFJPQklOOwogc3RhdGljIGludCB4bWl0X2hhc2h0eXBlPSBCT05EX1hNSVRfUE9MSUNZX0xBWUVSMjsKIHN0YXRpYyBpbnQgbGFjcF9mYXN0CT0gMDsKIAotc3RydWN0IGJvbmRfcGFybV90YmwgewotCWNoYXIgKm1vZGVuYW1lOwotCWludCBtb2RlOwotfTsKIAotc3RhdGljIHN0cnVjdCBib25kX3Bhcm1fdGJsIGJvbmRfbGFjcF90YmxbXSA9IHsKK3N0cnVjdCBib25kX3Bhcm1fdGJsIGJvbmRfbGFjcF90YmxbXSA9IHsKIHsJInNsb3ciLAkJQURfTEFDUF9TTE9XfSwKIHsJImZhc3QiLAkJQURfTEFDUF9GQVNUfSwKIHsJTlVMTCwJCS0xfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYm9uZF9wYXJtX3RibCBib25kX21vZGVfdGJsW10gPSB7CitzdHJ1Y3QgYm9uZF9wYXJtX3RibCBib25kX21vZGVfdGJsW10gPSB7CiB7CSJiYWxhbmNlLXJyIiwJCUJPTkRfTU9ERV9ST1VORFJPQklOfSwKIHsJImFjdGl2ZS1iYWNrdXAiLAlCT05EX01PREVfQUNUSVZFQkFDS1VQfSwKIHsJImJhbGFuY2UteG9yIiwJCUJPTkRfTU9ERV9YT1J9LApAQCAtNjIwLDcgKzE2NSw3IEBACiB7CU5VTEwsCQkJLTF9LAogfTsKIAotc3RhdGljIHN0cnVjdCBib25kX3Bhcm1fdGJsIHhtaXRfaGFzaHR5cGVfdGJsW10gPSB7CitzdHJ1Y3QgYm9uZF9wYXJtX3RibCB4bWl0X2hhc2h0eXBlX3RibFtdID0gewogewkibGF5ZXIyIiwJCUJPTkRfWE1JVF9QT0xJQ1lfTEFZRVIyfSwKIHsJImxheWVyMys0IiwJCUJPTkRfWE1JVF9QT0xJQ1lfTEFZRVIzNH0sCiB7CU5VTEwsCQkJLTF9LApAQCAtNjI4LDEyICsxNzMsMTEgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3J3YXJkIGRlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm9uZF9zZXRfbW9kZV9vcHMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBtb2RlKTsKIHN0YXRpYyB2b2lkIGJvbmRfc2VuZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5lcmFsIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKmJvbmRfbW9kZV9uYW1lKGludCBtb2RlKQorY29uc3QgY2hhciAqYm9uZF9tb2RlX25hbWUoaW50IG1vZGUpCiB7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBCT05EX01PREVfUk9VTkRST0JJTiA6CkBAIC05MTAsNyArNDU0LDcgQEAKIAlyZXMgPSBib25kX2FkZF92bGFuKGJvbmQsIHZpZCk7CiAJaWYgKHJlcykgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJICAgICAgICI6ICVzOiBGYWlsZWQgdG8gYWRkIHZsYW4gaWQgJWRcbiIsCisJCSAgICAgICAiOiAlczogRXJyb3I6IEZhaWxlZCB0byBhZGQgdmxhbiBpZCAlZFxuIiwKIAkJICAgICAgIGJvbmRfZGV2LT5uYW1lLCB2aWQpOwogCX0KIH0KQEAgLTk0NCw3ICs0ODgsNyBAQAogCXJlcyA9IGJvbmRfZGVsX3ZsYW4oYm9uZCwgdmlkKTsKIAlpZiAocmVzKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkgICAgICAgIjogJXM6IEZhaWxlZCB0byByZW1vdmUgdmxhbiBpZCAlZFxuIiwKKwkJICAgICAgICI6ICVzOiBFcnJvcjogRmFpbGVkIHRvIHJlbW92ZSB2bGFuIGlkICVkXG4iLAogCQkgICAgICAgYm9uZF9kZXYtPm5hbWUsIHZpZCk7CiAJfQogfQpAQCAtMTQ0OSw3ICs5OTMsNyBAQAogICoKICAqIFdhcm5pbmc6IENhbGxlciBtdXN0IGhvbGQgY3Vycl9zbGF2ZV9sb2NrIGZvciB3cml0aW5nLgogICovCi1zdGF0aWMgdm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSkKK3ZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpCiB7CiAJc3RydWN0IHNsYXZlICpvbGRfYWN0aXZlID0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmU7CiAKQEAgLTE1MjMsNyArMTA2Nyw3IEBACiAgKgogICogV2FybmluZzogQ2FsbGVyIG11c3QgaG9sZCBjdXJyX3NsYXZlX2xvY2sgZm9yIHdyaXRpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKK3ZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKQogewogCXN0cnVjdCBzbGF2ZSAqYmVzdF9zbGF2ZTsKIApAQCAtMTU5MSw3ICsxMTM1LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IGJvbmRfc2V0aHdhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldikKK2ludCBib25kX3NldGh3YWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpCiB7CiAJZHByaW50aygiYm9uZF9kZXY9JXBcbiIsIGJvbmRfZGV2KTsKIAlkcHJpbnRrKCJzbGF2ZV9kZXY9JXBcbiIsIHNsYXZlX2Rldik7CkBAIC0xNjMxLDcgKzExNzUsNyBAQAogfQogCiAvKiBlbnNsYXZlIGRldmljZSA8c2xhdmU+IHRvIGJvbmQgZGV2aWNlIDxtYXN0ZXI+ICovCi1zdGF0aWMgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpCitpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldikKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGJvbmRfZGV2LT5wcml2OwogCXN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlID0gTlVMTDsKQEAgLTE2NDQsOCArMTE4OCw4IEBACiAJaWYgKCFib25kLT5wYXJhbXMudXNlX2NhcnJpZXIgJiYgc2xhdmVfZGV2LT5ldGh0b29sX29wcyA9PSBOVUxMICYmCiAJCXNsYXZlX2Rldi0+ZG9faW9jdGwgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCSAgICAgICAiOiBXYXJuaW5nIDogbm8gbGluayBtb25pdG9yaW5nIHN1cHBvcnQgZm9yICVzXG4iLAotCQkgICAgICAgc2xhdmVfZGV2LT5uYW1lKTsKKwkJICAgICAgICI6ICVzOiBXYXJuaW5nOiBubyBsaW5rIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgJXNcbiIsCisJCSAgICAgICBib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lKTsKIAl9CiAKIAkvKiBib25kIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgYm9uZF9vcGVuKCkgYmVmb3JlIGVuc2xhdmluZyAqLwpAQCAtMTY2NiwxNyArMTIxMCwxNyBAQAogCQlkcHJpbnRrKCIlczogTkVUSUZfRl9WTEFOX0NIQUxMRU5HRURcbiIsIHNsYXZlX2Rldi0+bmFtZSk7CiAJCWlmICghbGlzdF9lbXB0eSgmYm9uZC0+dmxhbl9saXN0KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkgICAgICAgIjogRXJyb3I6IGNhbm5vdCBlbnNsYXZlIFZMQU4gIgorCQkJICAgICAgICI6ICVzOiBFcnJvcjogY2Fubm90IGVuc2xhdmUgVkxBTiAiCiAJCQkgICAgICAgImNoYWxsZW5nZWQgc2xhdmUgJXMgb24gVkxBTiBlbmFibGVkICIKLQkJCSAgICAgICAiYm9uZCAlc1xuIiwgc2xhdmVfZGV2LT5uYW1lLAorCQkJICAgICAgICJib25kICVzXG4iLCBib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lLAogCQkJICAgICAgIGJvbmRfZGV2LT5uYW1lKTsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkgICAgICAgIjogV2FybmluZzogZW5zbGF2ZWQgVkxBTiBjaGFsbGVuZ2VkICIKKwkJCSAgICAgICAiOiAlczogV2FybmluZzogZW5zbGF2ZWQgVkxBTiBjaGFsbGVuZ2VkICIKIAkJCSAgICAgICAic2xhdmUgJXMuIEFkZGluZyBWTEFOcyB3aWxsIGJlIGJsb2NrZWQgYXMgIgogCQkJICAgICAgICJsb25nIGFzICVzIGlzIHBhcnQgb2YgYm9uZCAlc1xuIiwKLQkJCSAgICAgICBzbGF2ZV9kZXYtPm5hbWUsIHNsYXZlX2Rldi0+bmFtZSwKKwkJCSAgICAgICBib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUsCiAJCQkgICAgICAgYm9uZF9kZXYtPm5hbWUpOwogCQkJYm9uZF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOwogCQl9CkBAIC0xNzA2LDEyICsxMjUwLDExIEBACiAKIAlpZiAoc2xhdmVfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJICAgICAgICI6IEVycm9yOiBUaGUgc2xhdmUgZGV2aWNlIHlvdSBzcGVjaWZpZWQgZG9lcyAiCi0JCSAgICAgICAibm90IHN1cHBvcnQgc2V0dGluZyB0aGUgTUFDIGFkZHJlc3MuXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiWW91ciBrZXJuZWwgbGlrZWx5IGRvZXMgbm90IHN1cHBvcnQgc2xhdmUgZGV2aWNlcy5cbiIpOwotCi0JCXJlcyA9IC1FT1BOT1RTVVBQOworCQkJIjogJXM6IEVycm9yOiBUaGUgc2xhdmUgZGV2aWNlIHlvdSBzcGVjaWZpZWQgZG9lcyAiCisJCQkibm90IHN1cHBvcnQgc2V0dGluZyB0aGUgTUFDIGFkZHJlc3MuICIKKwkJCSJZb3VyIGtlcm5lbCBsaWtlbHkgZG9lcyBub3Qgc3VwcG9ydCBzbGF2ZSAiCisJCQkiZGV2aWNlcy5cbiIsIGJvbmRfZGV2LT5uYW1lKTsKKyAgCQlyZXMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBlcnJfdW5kb19mbGFnczsKIAl9CiAKQEAgLTE4MjcsMjEgKzEzNzAsMjEgQEAKIAkJCSAqIHRoZSBtZXNzYWdlcyBmb3IgbmV0aWZfY2Fycmllci4KIAkJCSAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkJICAgICAgICI6IFdhcm5pbmc6IE1JSSBhbmQgRVRIVE9PTCBzdXBwb3J0IG5vdCAiCisJCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IE1JSSBhbmQgRVRIVE9PTCBzdXBwb3J0IG5vdCAiCiAJCQkgICAgICAgImF2YWlsYWJsZSBmb3IgaW50ZXJmYWNlICVzLCBhbmQgIgogCQkJICAgICAgICJhcnBfaW50ZXJ2YWwvYXJwX2lwX3RhcmdldCBtb2R1bGUgcGFyYW1ldGVycyAiCiAJCQkgICAgICAgIm5vdCBzcGVjaWZpZWQsIHRodXMgYm9uZGluZyB3aWxsIG5vdCBkZXRlY3QgIgogCQkJICAgICAgICJsaW5rIGZhaWx1cmVzISBzZWUgYm9uZGluZy50eHQgZm9yIGRldGFpbHMuXG4iLAotCQkJICAgICAgIHNsYXZlX2Rldi0+bmFtZSk7CisJCQkgICAgICAgYm9uZF9kZXYtPm5hbWUsIHNsYXZlX2Rldi0+bmFtZSk7CiAJCX0gZWxzZSBpZiAobGlua19yZXBvcnRpbmcgPT0gLTEpIHsKIAkJCS8qIHVuYWJsZSBnZXQgbGluayBzdGF0dXMgdXNpbmcgbWlpL2V0aHRvb2wgKi8KIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCSAgICAgICAiOiBXYXJuaW5nOiBjYW4ndCBnZXQgbGluayBzdGF0dXMgZnJvbSAiCisJCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IGNhbid0IGdldCBsaW5rIHN0YXR1cyBmcm9tICIKIAkJCSAgICAgICAiaW50ZXJmYWNlICVzOyB0aGUgbmV0d29yayBkcml2ZXIgYXNzb2NpYXRlZCAiCiAJCQkgICAgICAgIndpdGggdGhpcyBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBNSUkgb3IgIgogCQkJICAgICAgICJFVEhUT09MIGxpbmsgc3RhdHVzIHJlcG9ydGluZywgdGh1cyBtaWltb24gIgogCQkJICAgICAgICJoYXMgbm8gZWZmZWN0IG9uIHRoaXMgaW50ZXJmYWNlLlxuIiwKLQkJCSAgICAgICBzbGF2ZV9kZXYtPm5hbWUpOworCQkJICAgICAgIGJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUpOwogCQl9CiAJfQogCkBAIC0xODY4LDE1ICsxNDExLDE1IEBACiAJaWYgKGJvbmRfdXBkYXRlX3NwZWVkX2R1cGxleChuZXdfc2xhdmUpICYmCiAJICAgIChuZXdfc2xhdmUtPmxpbmsgIT0gQk9ORF9MSU5LX0RPV04pKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJICAgICAgICI6IFdhcm5pbmc6IGZhaWxlZCB0byBnZXQgc3BlZWQgYW5kIGR1cGxleCBmcm9tICVzLCAiCisJCSAgICAgICAiOiAlczogV2FybmluZzogZmFpbGVkIHRvIGdldCBzcGVlZCBhbmQgZHVwbGV4IGZyb20gJXMsICIKIAkJICAgICAgICJhc3N1bWVkIHRvIGJlIDEwME1iL3NlYyBhbmQgRnVsbC5cbiIsCi0JCSAgICAgICBuZXdfc2xhdmUtPmRldi0+bmFtZSk7CisJCSAgICAgICBib25kX2Rldi0+bmFtZSwgbmV3X3NsYXZlLT5kZXYtPm5hbWUpOwogCiAJCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfODAyM0FEKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIk9wZXJhdGlvbiBvZiA4MDIuM2FkIG1vZGUgcmVxdWlyZXMgRVRIVE9PTCAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IE9wZXJhdGlvbiBvZiA4MDIuM2FkIG1vZGUgcmVxdWlyZXMgRVRIVE9PTCAiCiAJCQkgICAgICAgInN1cHBvcnQgaW4gYmFzZSBkcml2ZXIgZm9yIHByb3BlciBhZ2dyZWdhdG9yICIKLQkJCSAgICAgICAic2VsZWN0aW9uLlxuIik7CisJCQkgICAgICAgInNlbGVjdGlvbi5cbiIsIGJvbmRfZGV2LT5uYW1lKTsKIAkJfQogCX0KIApAQCAtMTk1OCw2ICsxNTAxLDEwIEBACiAKIAl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOwogCisJcmVzID0gYm9uZF9jcmVhdGVfc2xhdmVfc3ltbGlua3MoYm9uZF9kZXYsIHNsYXZlX2Rldik7CisJaWYgKHJlcykKKwkJZ290byBlcnJfdW5zZXRfbWFzdGVyOworCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCSAgICAgICAiOiAlczogZW5zbGF2aW5nICVzIGFzIGElcyBpbnRlcmZhY2Ugd2l0aCBhJXMgbGluay5cbiIsCiAJICAgICAgIGJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUsCkBAIC0xOTk5LDcgKzE1NDYsNyBAQAogICogICBmb3IgQm9uZGVkIGNvbm5lY3Rpb25zOgogICogICAgIFRoZSBmaXJzdCB1cCBpbnRlcmZhY2Ugc2hvdWxkIGJlIGxlZnQgb24gYW5kIGFsbCBvdGhlcnMgZG93bmVkLgogICovCi1zdGF0aWMgaW50IGJvbmRfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpCitpbnQgYm9uZF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldikKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGJvbmRfZGV2LT5wcml2OwogCXN0cnVjdCBzbGF2ZSAqc2xhdmUsICpvbGRjdXJyZW50OwpAQCAtMjAxMCw3ICsxNTU3LDcgQEAKIAlpZiAoIShzbGF2ZV9kZXYtPmZsYWdzICYgSUZGX1NMQVZFKSB8fAogCSAgICAoc2xhdmVfZGV2LT5tYXN0ZXIgIT0gYm9uZF9kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkgICAgICAgIjogRXJyb3I6ICVzOiBjYW5ub3QgcmVsZWFzZSAlcy5cbiIsCisJCSAgICAgICAiOiAlczogRXJyb3I6IGNhbm5vdCByZWxlYXNlICVzLlxuIiwKIAkJICAgICAgIGJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMDMxLDExICsxNTc4LDEyIEBACiAJCQkJIEVUSF9BTEVOKTsKIAlpZiAoIW1hY19hZGRyX2RpZmZlciAmJiAoYm9uZC0+c2xhdmVfY250ID4gMSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkgICAgICAgIjogV2FybmluZzogdGhlIHBlcm1hbmVudCBIV2FkZHIgb2YgJXMgIgorCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IHRoZSBwZXJtYW5lbnQgSFdhZGRyIG9mICVzICIKIAkJICAgICAgICItICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIC0gaXMgIgogCQkgICAgICAgInN0aWxsIGluIHVzZSBieSAlcy4gU2V0IHRoZSBIV2FkZHIgb2YgIgogCQkgICAgICAgIiVzIHRvIGEgZGlmZmVyZW50IGFkZHJlc3MgdG8gYXZvaWQgIgogCQkgICAgICAgImNvbmZsaWN0cy5cbiIsCisJCSAgICAgICBib25kX2Rldi0+bmFtZSwKIAkJICAgICAgIHNsYXZlX2Rldi0+bmFtZSwKIAkJICAgICAgIHNsYXZlLT5wZXJtX2h3YWRkclswXSwKIAkJICAgICAgIHNsYXZlLT5wZXJtX2h3YWRkclsxXSwKQEAgLTIxMTEsMjQgKzE2NTksMjggQEAKIAkJCWJvbmRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCSAgICAgICAiOiBXYXJuaW5nOiBjbGVhcmluZyBIVyBhZGRyZXNzIG9mICVzIHdoaWxlIGl0ICIKKwkJCSAgICAgICAiOiAlczogV2FybmluZzogY2xlYXJpbmcgSFcgYWRkcmVzcyBvZiAlcyB3aGlsZSBpdCAiCiAJCQkgICAgICAgInN0aWxsIGhhcyBWTEFOcy5cbiIsCi0JCQkgICAgICAgYm9uZF9kZXYtPm5hbWUpOworCQkJICAgICAgIGJvbmRfZGV2LT5uYW1lLCBib25kX2Rldi0+bmFtZSk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkgICAgICAgIjogV2hlbiByZS1hZGRpbmcgc2xhdmVzLCBtYWtlIHN1cmUgdGhlIGJvbmQncyAiCi0JCQkgICAgICAgIkhXIGFkZHJlc3MgbWF0Y2hlcyBpdHMgVkxBTnMnLlxuIik7CisJCQkgICAgICAgIjogJXM6IFdoZW4gcmUtYWRkaW5nIHNsYXZlcywgbWFrZSBzdXJlIHRoZSBib25kJ3MgIgorCQkJICAgICAgICJIVyBhZGRyZXNzIG1hdGNoZXMgaXRzIFZMQU5zJy5cbiIsCisJCQkgICAgICAgYm9uZF9kZXYtPm5hbWUpOwogCQl9CiAJfSBlbHNlIGlmICgoYm9uZF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQpICYmCiAJCSAgICFib25kX2hhc19jaGFsbGVuZ2VkX3NsYXZlcyhib25kKSkgewogCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBsYXN0IFZMQU4gY2hhbGxlbmdlZCBzbGF2ZSAlcyAiCisJCSAgICAgICAiOiAlczogbGFzdCBWTEFOIGNoYWxsZW5nZWQgc2xhdmUgJXMgIgogCQkgICAgICAgImxlZnQgYm9uZCAlcy4gVkxBTiBibG9ja2luZyBpcyByZW1vdmVkXG4iLAotCQkgICAgICAgc2xhdmVfZGV2LT5uYW1lLCBib25kX2Rldi0+bmFtZSk7CisJCSAgICAgICBib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lLCBib25kX2Rldi0+bmFtZSk7CiAJCWJvbmRfZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CiAJfQogCiAJd3JpdGVfdW5sb2NrX2JoKCZib25kLT5sb2NrKTsKIAorCS8qIG11c3QgZG8gdGhpcyBmcm9tIG91dHNpZGUgYW55IHNwaW5sb2NrcyAqLworCWJvbmRfZGVzdHJveV9zbGF2ZV9zeW1saW5rcyhib25kX2Rldiwgc2xhdmVfZGV2KTsKKwogCWJvbmRfZGVsX3ZsYW5zX2Zyb21fc2xhdmUoYm9uZCwgc2xhdmVfZGV2KTsKIAogCS8qIElmIHRoZSBtb2RlIFVTRVNfUFJJTUFSWSwgdGhlbiB3ZSBzaG91bGQgb25seSByZW1vdmUgaXRzCkBAIC0yMjIwLDYgKzE3NzIsNyBAQAogCQkgKi8KIAkJd3JpdGVfdW5sb2NrX2JoKCZib25kLT5sb2NrKTsKIAorCQlib25kX2Rlc3Ryb3lfc2xhdmVfc3ltbGlua3MoYm9uZF9kZXYsIHNsYXZlX2Rldik7CiAJCWJvbmRfZGVsX3ZsYW5zX2Zyb21fc2xhdmUoYm9uZCwgc2xhdmVfZGV2KTsKIAogCQkvKiBJZiB0aGUgbW9kZSBVU0VTX1BSSU1BUlksIHRoZW4gd2Ugc2hvdWxkIG9ubHkgcmVtb3ZlIGl0cwpAQCAtMjI3NCwxMiArMTgyNywxMyBAQAogCQlib25kX2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkgICAgICAgIjogV2FybmluZzogY2xlYXJpbmcgSFcgYWRkcmVzcyBvZiAlcyB3aGlsZSBpdCAiCisJCSAgICAgICAiOiAlczogV2FybmluZzogY2xlYXJpbmcgSFcgYWRkcmVzcyBvZiAlcyB3aGlsZSBpdCAiCiAJCSAgICAgICAic3RpbGwgaGFzIFZMQU5zLlxuIiwKLQkJICAgICAgIGJvbmRfZGV2LT5uYW1lKTsKKwkJICAgICAgIGJvbmRfZGV2LT5uYW1lLCBib25kX2Rldi0+bmFtZSk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJICAgICAgICI6IFdoZW4gcmUtYWRkaW5nIHNsYXZlcywgbWFrZSBzdXJlIHRoZSBib25kJ3MgIgotCQkgICAgICAgIkhXIGFkZHJlc3MgbWF0Y2hlcyBpdHMgVkxBTnMnLlxuIik7CisJCSAgICAgICAiOiAlczogV2hlbiByZS1hZGRpbmcgc2xhdmVzLCBtYWtlIHN1cmUgdGhlIGJvbmQncyAiCisJCSAgICAgICAiSFcgYWRkcmVzcyBtYXRjaGVzIGl0cyBWTEFOcycuXG4iLAorCQkgICAgICAgYm9uZF9kZXYtPm5hbWUpOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKQEAgLTIzOTcsNyArMTk1MSw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1vbml0b3JpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHJlZ3VsYXJseSB0byBtb25pdG9yIGVhY2ggc2xhdmUncyBsaW5rLiAqLwotc3RhdGljIHZvaWQgYm9uZF9taWlfbW9uaXRvcihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpCit2b2lkIGJvbmRfbWlpX21vbml0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gYm9uZF9kZXYtPnByaXY7CiAJc3RydWN0IHNsYXZlICpzbGF2ZSwgKm9sZGN1cnJlbnQ7CkBAIC0yNTk2LDggKzIxNTAsMTEgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4gKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiYm9uZGluZzogRXJyb3I6ICVzICBJbGxlZ2FsIHZhbHVlIChsaW5rPSVkKVxuIiwKLQkJCSAgICAgICBzbGF2ZS0+ZGV2LT5uYW1lLCBzbGF2ZS0+bGluayk7CisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogRXJyb3I6ICVzIElsbGVnYWwgdmFsdWUgKGxpbms9JWQpXG4iLAorCQkJICAgICAgIGJvbmRfZGV2LT5uYW1lLAorCQkJICAgICAgIHNsYXZlLT5kZXYtPm5hbWUsCisJCQkgICAgICAgc2xhdmUtPmxpbmspOwogCQkJZ290byBvdXQ7CiAJCX0gLyogZW5kIG9mIHN3aXRjaCAoc2xhdmUtPmxpbmspICovCiAKQEAgLTI3MjEsNyArMjI3OCw5IEBACiAJc3RydWN0IGZsb3dpIGZsOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCi0JZm9yIChpID0gMDsgKGkgPCBCT05EX01BWF9BUlBfVEFSR0VUUykgJiYgdGFyZ2V0c1tpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgKGkgPCBCT05EX01BWF9BUlBfVEFSR0VUUyk7IGkrKykgeworCQlpZiAoIXRhcmdldHNbaV0pCisJCQljb250aW51ZTsKIAkJZHByaW50aygiYmFzYTogdGFyZ2V0ICV4XG4iLCB0YXJnZXRzW2ldKTsKIAkJaWYgKGxpc3RfZW1wdHkoJmJvbmQtPnZsYW5fbGlzdCkpIHsKIAkJCWRwcmludGsoImJhc2E6IGVtcHR5IHZsYW46IGFycF9zZW5kXG4iKTsKQEAgLTI4MjUsNyArMjM4NCw3IEBACiAgKiBhcnAgaXMgdHJhbnNtaXR0ZWQgdG8gZ2VuZXJhdGUgdHJhZmZpYy4gc2VlIGFjdGl2ZWJhY2t1cF9hcnBfbW9uaXRvciBmb3IKICAqIGFycCBtb25pdG9yaW5nIGluIGFjdGl2ZSBiYWNrdXAgbW9kZS4KICAqLwotc3RhdGljIHZvaWQgYm9uZF9sb2FkYmFsYW5jZV9hcnBfbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKK3ZvaWQgYm9uZF9sb2FkYmFsYW5jZV9hcnBfbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGJvbmRfZGV2LT5wcml2OwogCXN0cnVjdCBzbGF2ZSAqc2xhdmUsICpvbGRjdXJyZW50OwpAQCAtMjk2Myw3ICsyNTIyLDcgQEAKICAqIG1heSBoYXZlIHJlY2VpdmVkLgogICogc2VlIGxvYWRiYWxhbmNlX2FycF9tb25pdG9yIGZvciBhcnAgbW9uaXRvcmluZyBpbiBsb2FkIGJhbGFuY2luZyBtb2RlCiAgKi8KLXN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQordm9pZCBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGJvbmRfZGV2LT5wcml2OwogCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CkBAIC0zMjQ5LDYgKzI4MDgsOCBAQAogewogCXN0cnVjdCBib25kaW5nICpib25kID0gc2VxLT5wcml2YXRlOwogCXN0cnVjdCBzbGF2ZSAqY3VycjsKKwlpbnQgaTsKKwl1MzIgdGFyZ2V0OwogCiAJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwogCWN1cnIgPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZTsKQEAgLTMyNTcsMTAgKzI4MTgsMTcgQEAKIAlzZXFfcHJpbnRmKHNlcSwgIkJvbmRpbmcgTW9kZTogJXNcbiIsCiAJCSAgIGJvbmRfbW9kZV9uYW1lKGJvbmQtPnBhcmFtcy5tb2RlKSk7CiAKKwlpZiAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFX1hPUiB8fAorCQlib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfODAyM0FEKSB7CisJCXNlcV9wcmludGYoc2VxLCAiVHJhbnNtaXQgSGFzaCBQb2xpY3k6ICVzICglZClcbiIsCisJCQl4bWl0X2hhc2h0eXBlX3RibFtib25kLT5wYXJhbXMueG1pdF9wb2xpY3ldLm1vZGVuYW1lLAorCQkJYm9uZC0+cGFyYW1zLnhtaXRfcG9saWN5KTsKKwl9CisKIAlpZiAoVVNFU19QUklNQVJZKGJvbmQtPnBhcmFtcy5tb2RlKSkgewogCQlzZXFfcHJpbnRmKHNlcSwgIlByaW1hcnkgU2xhdmU6ICVzXG4iLAotCQkJICAgKGJvbmQtPnBhcmFtcy5wcmltYXJ5WzBdKSA/Ci0JCQkgICAJYm9uZC0+cGFyYW1zLnByaW1hcnkgOiAiTm9uZSIpOworCQkJICAgKGJvbmQtPnByaW1hcnlfc2xhdmUpID8KKwkJCSAgIGJvbmQtPnByaW1hcnlfc2xhdmUtPmRldi0+bmFtZSA6ICJOb25lIik7CiAKIAkJc2VxX3ByaW50ZihzZXEsICJDdXJyZW50bHkgQWN0aXZlIFNsYXZlOiAlc1xuIiwKIAkJCSAgIChjdXJyKSA/IGN1cnItPmRldi0+bmFtZSA6ICJOb25lIik7CkBAIC0zMjczLDYgKzI4NDEsMjcgQEAKIAlzZXFfcHJpbnRmKHNlcSwgIkRvd24gRGVsYXkgKG1zKTogJWRcbiIsCiAJCSAgIGJvbmQtPnBhcmFtcy5kb3duZGVsYXkgKiBib25kLT5wYXJhbXMubWlpbW9uKTsKIAorCisJLyogQVJQIGluZm9ybWF0aW9uICovCisJaWYoYm9uZC0+cGFyYW1zLmFycF9pbnRlcnZhbCA+IDApIHsKKwkJaW50IHByaW50ZWQ9MDsKKwkJc2VxX3ByaW50ZihzZXEsICJBUlAgUG9sbGluZyBJbnRlcnZhbCAobXMpOiAlZFxuIiwKKwkJCQlib25kLT5wYXJhbXMuYXJwX2ludGVydmFsKTsKKworCQlzZXFfcHJpbnRmKHNlcSwgIkFSUCBJUCB0YXJnZXQvcyAobi5uLm4ubiBmb3JtKToiKTsKKworCQlmb3IoaSA9IDA7IChpIDwgQk9ORF9NQVhfQVJQX1RBUkdFVFMpIDtpKyspIHsKKwkJCWlmICghYm9uZC0+cGFyYW1zLmFycF90YXJnZXRzW2ldKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHByaW50ZWQpCisJCQkJc2VxX3ByaW50ZihzZXEsICIsIik7CisJCQl0YXJnZXQgPSBudG9obChib25kLT5wYXJhbXMuYXJwX3RhcmdldHNbaV0pOworCQkJc2VxX3ByaW50ZihzZXEsICIgJWQuJWQuJWQuJWQiLCBISVBRVUFEKHRhcmdldCkpOworCQkJcHJpbnRlZCA9IDE7CisJCX0KKwkJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCX0KKwogCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfODAyM0FEKSB7CiAJCXN0cnVjdCBhZF9pbmZvIGFkX2luZm87CiAKQEAgLTM0NzgsNyArMzA2NywxMCBAQAogCWJvbmRfcmVtb3ZlX3Byb2NfZW50cnkoYm9uZCk7CiAJYm9uZF9jcmVhdGVfcHJvY19lbnRyeShib25kKTsKICNlbmRpZgotCisJZG93bl93cml0ZSgmKGJvbmRpbmdfcndzZW0pKTsKKyAgICAgICAgYm9uZF9kZXN0cm95X3N5c2ZzX2VudHJ5KGJvbmQpOworICAgICAgICBib25kX2NyZWF0ZV9zeXNmc19lbnRyeShib25kKTsKKwl1cF93cml0ZSgmKGJvbmRpbmdfcndzZW0pKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTM5NTUsNiArMzU0Nyw3IEBACiAJCXJldHVybiAtRVBFUk07CiAJfQogCisJZG93bl93cml0ZSgmKGJvbmRpbmdfcndzZW0pKTsKIAlzbGF2ZV9kZXYgPSBkZXZfZ2V0X2J5X25hbWUoaWZyLT5pZnJfc2xhdmUpOwogCiAJZHByaW50aygic2xhdmVfZGV2PSVwOiBcbiIsIHNsYXZlX2Rldik7CkBAIC0zOTg3LDYgKzM1ODAsNyBAQAogCQlkZXZfcHV0KHNsYXZlX2Rldik7CiAJfQogCisJdXBfd3JpdGUoJihib25kaW5nX3J3c2VtKSk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtNDA3MSw2ICszNjY1LDcgQEAKIAlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpKSB7CiAJCWRwcmludGsoInMgJXAgcy0+cCAlcCBjX20gJXBcbiIsIHNsYXZlLAogCQkJc2xhdmUtPnByZXYsIHNsYXZlLT5kZXYtPmNoYW5nZV9tdHUpOworCiAJCXJlcyA9IGRldl9zZXRfbXR1KHNsYXZlLT5kZXYsIG5ld19tdHUpOwogCiAJCWlmIChyZXMpIHsKQEAgLTQzOTcsOCArMzk5Miw5IEBACiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAoIXNrYjIpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkJCSAgICAgICAiOiBFcnJvcjogYm9uZF94bWl0X2Jyb2FkY2FzdCgpOiAiCi0JCQkJCSAgICAgICAic2tiX2Nsb25lKCkgZmFpbGVkXG4iKTsKKwkJCQkJICAgICAgICI6ICVzOiBFcnJvcjogYm9uZF94bWl0X2Jyb2FkY2FzdCgpOiAiCisJCQkJCSAgICAgICAic2tiX2Nsb25lKCkgZmFpbGVkXG4iLAorCQkJCQkgICAgICAgYm9uZF9kZXYtPm5hbWUpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKQEAgLTQ0MzEsNyArNDAyNyw3IEBACiAvKgogICogc2V0IGJvbmQgbW9kZSBzcGVjaWZpYyBuZXQgZGV2aWNlIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGJvbmRfc2V0X21vZGVfb3BzKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgbW9kZSkKK3ZvaWQgYm9uZF9zZXRfbW9kZV9vcHMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBtb2RlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldiA9IGJvbmQtPmRldjsKIApAQCAtNDQ2Nyw3ICs0MDYzLDggQEAKIAlkZWZhdWx0OgogCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLCBtb2RlIGFscmVhZHkgY2hlY2tlZCAqLwogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJICAgICAgICI6IEVycm9yOiBVbmtub3duIGJvbmRpbmcgbW9kZSAlZFxuIiwKKwkJICAgICAgICI6ICVzOiBFcnJvcjogVW5rbm93biBib25kaW5nIG1vZGUgJWRcbiIsCisJCSAgICAgICBib25kX2Rldi0+bmFtZSwKIAkJICAgICAgIG1vZGUpOwogCQlicmVhazsKIAl9CkBAIC00NDkxLDcgKzQwODgsNyBAQAogICogRG9lcyBub3QgYWxsb2NhdGUgYnV0IGNyZWF0ZXMgYSAvcHJvYyBlbnRyeS4KICAqIEFsbG93ZWQgdG8gZmFpbC4KICAqLwotc3RhdGljIGludCBfX2luaXQgYm9uZF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IGJvbmRfcGFyYW1zICpwYXJhbXMpCitzdGF0aWMgaW50IGJvbmRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gYm9uZF9kZXYtPnByaXY7CiAKQEAgLTQ1NjUsNyArNDE2Miw3IEBACiAvKiBEZS1pbml0aWFsaXplIGRldmljZSBzcGVjaWZpYyBkYXRhLgogICogQ2FsbGVyIG11c3QgaG9sZCBydG5sX2xvY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBib25kX2RlaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpCit2b2lkIGJvbmRfZGVpbml0KHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGJvbmRfZGV2LT5wcml2OwogCkBAIC00NjAxLDcgKzQxOTgsNyBAQAogICogQ29udmVydCBzdHJpbmcgaW5wdXQgbW9kdWxlIHBhcm1zLiAgQWNjZXB0IGVpdGhlciB0aGUKICAqIG51bWJlciBvZiB0aGUgbW9kZSBvciBpdHMgc3RyaW5nIG5hbWUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJvbmRfcGFyc2VfcGFybShjaGFyICptb2RlX2FyZywgc3RydWN0IGJvbmRfcGFybV90YmwgKnRibCkKK2ludCBib25kX3BhcnNlX3Bhcm0oY2hhciAqbW9kZV9hcmcsIHN0cnVjdCBib25kX3Bhcm1fdGJsICp0YmwpCiB7CiAJaW50IGk7CiAKQEAgLTQ2NzAsNyArNDI2Nyw3IEBACiAJaWYgKG1heF9ib25kcyA8IDEgfHwgbWF4X2JvbmRzID4gSU5UX01BWCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCiAJCSAgICAgICAiOiBXYXJuaW5nOiBtYXhfYm9uZHMgKCVkKSBub3QgaW4gcmFuZ2UgJWQtJWQsIHNvIGl0ICIKLQkJICAgICAgICJ3YXMgcmVzZXQgdG8gQk9ORF9ERUZBVUxUX01BWF9CT05EUyAoJWQpIiwKKwkJICAgICAgICJ3YXMgcmVzZXQgdG8gQk9ORF9ERUZBVUxUX01BWF9CT05EUyAoJWQpXG4iLAogCQkgICAgICAgbWF4X2JvbmRzLCAxLCBJTlRfTUFYLCBCT05EX0RFRkFVTFRfTUFYX0JPTkRTKTsKIAkJbWF4X2JvbmRzID0gQk9ORF9ERUZBVUxUX01BWF9CT05EUzsKIAl9CkBAIC00ODgxLDgxICs0NDc4LDk2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIENyZWF0ZSBhIG5ldyBib25kIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgYm9uZGluZyBwYXJhbWV0ZXJzLgorICogQ2FsbGVyIG11c3QgTk9UIGhvbGQgcnRubF9sb2NrOyB3ZSBuZWVkIHRvIHJlbGVhc2UgaXQgaGVyZSBiZWZvcmUgd2UKKyAqIHNldCB1cCBvdXIgc3lzZnMgZW50cmllcy4KKyAqLworaW50IGJvbmRfY3JlYXRlKGNoYXIgKm5hbWUsIHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgYm9uZGluZyAqKm5ld2JvbmQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2OworCWludCByZXM7CisKKwlydG5sX2xvY2soKTsKKwlib25kX2RldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGJvbmRpbmcpLCBuYW1lLCBldGhlcl9zZXR1cCk7CisJaWYgKCFib25kX2RldikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBlZWshIGNhbid0IGFsbG9jIG5ldGRldiFcbiIsCisJCSAgICAgICBuYW1lKTsKKwkJcmVzID0gLUVOT01FTTsKKwkJZ290byBvdXRfcnRubDsKKwl9CisKKwkvKiBib25kX2luaXQoKSBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZXZfYWxsb2NfbmFtZSgpIChmb3IgdGhlCisJICogL3Byb2MgZmlsZXMpLCBidXQgYmVmb3JlIHJlZ2lzdGVyX25ldGRldmljZSgpLCBiZWNhdXNlIHdlCisJICogbmVlZCB0byBzZXQgZnVuY3Rpb24gcG9pbnRlcnMuCisJICovCisKKwlyZXMgPSBib25kX2luaXQoYm9uZF9kZXYsIHBhcmFtcyk7CisJaWYgKHJlcyA8IDApIHsKKwkJZ290byBvdXRfbmV0ZGV2OworCX0KKworCVNFVF9NT0RVTEVfT1dORVIoYm9uZF9kZXYpOworCisJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGJvbmRfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlnb3RvIG91dF9ib25kOworCX0KKwlpZiAobmV3Ym9uZCkKKwkJKm5ld2JvbmQgPSBib25kX2Rldi0+cHJpdjsKKworCXJ0bmxfdW5sb2NrKCk7IC8qIGFsbG93cyBzeXNmcyByZWdpc3RyYXRpb24gb2YgbmV0IGRldmljZSAqLworCXJlcyA9IGJvbmRfY3JlYXRlX3N5c2ZzX2VudHJ5KGJvbmRfZGV2LT5wcml2KTsKKwlnb3RvIGRvbmU7CitvdXRfYm9uZDoKKwlib25kX2RlaW5pdChib25kX2Rldik7CitvdXRfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KGJvbmRfZGV2KTsKK291dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7Citkb25lOgorCXJldHVybiByZXM7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGJvbmRpbmdfaW5pdCh2b2lkKQogewotCXN0cnVjdCBib25kX3BhcmFtcyBwYXJhbXM7CiAJaW50IGk7CiAJaW50IHJlczsKKwljaGFyIG5ld19ib25kX25hbWVbOF07ICAvKiBFbm91Z2ggcm9vbSBmb3IgOTk5IGJvbmRzIGF0IGluaXQuICovCiAKIAlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwogCi0JcmVzID0gYm9uZF9jaGVja19wYXJhbXMoJnBhcmFtcyk7CisJcmVzID0gYm9uZF9jaGVja19wYXJhbXMoJmJvbmRpbmdfZGVmYXVsdHMpOwogCWlmIChyZXMpIHsKLQkJcmV0dXJuIHJlczsKKwkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7Ci0KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWJvbmRfY3JlYXRlX3Byb2NfZGlyKCk7CiAjZW5kaWYKLQogCWZvciAoaSA9IDA7IGkgPCBtYXhfYm9uZHM7IGkrKykgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXY7Ci0KLQkJYm9uZF9kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBib25kaW5nKSwgIiIsIGV0aGVyX3NldHVwKTsKLQkJaWYgKCFib25kX2RldikgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0X2VycjsKLQkJfQotCi0JCXJlcyA9IGRldl9hbGxvY19uYW1lKGJvbmRfZGV2LCAiYm9uZCVkIik7Ci0JCWlmIChyZXMgPCAwKSB7Ci0JCQlmcmVlX25ldGRldihib25kX2Rldik7Ci0JCQlnb3RvIG91dF9lcnI7Ci0JCX0KLQotCQkvKiBib25kX2luaXQoKSBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZXZfYWxsb2NfbmFtZSgpIChmb3IgdGhlCi0JCSAqIC9wcm9jIGZpbGVzKSwgYnV0IGJlZm9yZSByZWdpc3Rlcl9uZXRkZXZpY2UoKSwgYmVjYXVzZSB3ZQotCQkgKiBuZWVkIHRvIHNldCBmdW5jdGlvbiBwb2ludGVycy4KLQkJICovCi0JCXJlcyA9IGJvbmRfaW5pdChib25kX2RldiwgJnBhcmFtcyk7Ci0JCWlmIChyZXMgPCAwKSB7Ci0JCQlmcmVlX25ldGRldihib25kX2Rldik7Ci0JCQlnb3RvIG91dF9lcnI7Ci0JCX0KLQotCQlTRVRfTU9EVUxFX09XTkVSKGJvbmRfZGV2KTsKLQotCQlyZXMgPSByZWdpc3Rlcl9uZXRkZXZpY2UoYm9uZF9kZXYpOwotCQlpZiAocmVzIDwgMCkgewotCQkJYm9uZF9kZWluaXQoYm9uZF9kZXYpOwotCQkJZnJlZV9uZXRkZXYoYm9uZF9kZXYpOwotCQkJZ290byBvdXRfZXJyOwotCQl9CisJCXNwcmludGYobmV3X2JvbmRfbmFtZSwgImJvbmQlZCIsaSk7CisJCXJlcyA9IGJvbmRfY3JlYXRlKG5ld19ib25kX25hbWUsJmJvbmRpbmdfZGVmYXVsdHMsIE5VTEwpOworCQlpZiAocmVzKQorCQkJZ290byBlcnI7CiAJfQogCi0JcnRubF91bmxvY2soKTsKKwlyZXMgPSBib25kX2NyZWF0ZV9zeXNmcygpOworCWlmIChyZXMpCisJCWdvdG8gZXJyOworCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZib25kX25ldGRldl9ub3RpZmllcik7CiAJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJmJvbmRfaW5ldGFkZHJfbm90aWZpZXIpOwogCi0JcmV0dXJuIDA7Ci0KLW91dF9lcnI6Ci0JLyoKLQkgKiBydG5sX3VubG9jaygpIHdpbGwgcnVuIG5ldGRldl9ydW5fdG9kbygpLCBwdXR0aW5nIHRoZQotCSAqIHRodXMtZmFyLXJlZ2lzdGVyZWQgYm9uZGluZyBkZXZpY2VzIGludG8gYSBzdGF0ZSB3aGljaAotCSAqIHVucmVnaWdpc3Rlcl9uZXRkZXZpY2UoKSB3aWxsIGFjY2VwdAotCSAqLwotCXJ0bmxfdW5sb2NrKCk7CisJZ290byBvdXQ7CitlcnI6CiAJcnRubF9sb2NrKCk7Ci0KLQkvKiBmcmVlIGFuZCB1bnJlZ2lzdGVyIGFsbCBib25kcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IGFkZGVkICovCiAJYm9uZF9mcmVlX2FsbCgpOwotCisJYm9uZF9kZXN0cm95X3N5c2ZzKCk7CiAJcnRubF91bmxvY2soKTsKLQorb3V0OgogCXJldHVybiByZXM7CisKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJvbmRpbmdfZXhpdCh2b2lkKQpAQCAtNDk2NSw2ICs0NTc3LDcgQEAKIAogCXJ0bmxfbG9jaygpOwogCWJvbmRfZnJlZV9hbGwoKTsKKwlib25kX2Rlc3Ryb3lfc3lzZnMoKTsKIAlydG5sX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDEzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwpAQCAtMCwwICsxLDEzNTggQEAKKworLyoKKyAqIENvcHlyaWdodChjKSAyMDA0LTIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisKKy8qICNkZWZpbmUgQk9ORElOR19ERUJVRyAxICovCisjaW5jbHVkZSAiYm9uZGluZy5oIgorI2RlZmluZSB0b19jbGFzc19kZXYob2JqKSBjb250YWluZXJfb2Yob2JqLHN0cnVjdCBjbGFzc19kZXZpY2Usa29iaikKKyNkZWZpbmUgdG9fbmV0X2RldihjbGFzcykgY29udGFpbmVyX29mKGNsYXNzLCBzdHJ1Y3QgbmV0X2RldmljZSwgY2xhc3NfZGV2KQorI2RlZmluZSB0b19ib25kKGNkKQkoKHN0cnVjdCBib25kaW5nICopKHRvX25ldF9kZXYoY2QpLT5wcml2KSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBib25kX2Rldl9saXN0OworZXh0ZXJuIHN0cnVjdCBib25kX3BhcmFtcyBib25kaW5nX2RlZmF1bHRzOworZXh0ZXJuIHN0cnVjdCBib25kX3Bhcm1fdGJsIGJvbmRfbW9kZV90YmxbXTsKK2V4dGVybiBzdHJ1Y3QgYm9uZF9wYXJtX3RibCBib25kX2xhY3BfdGJsW107CitleHRlcm4gc3RydWN0IGJvbmRfcGFybV90YmwgeG1pdF9oYXNodHlwZV90YmxbXTsKKworc3RhdGljIGludCBleHBlY3RlZF9yZWZjb3VudCA9IC0xOworc3RhdGljIHN0cnVjdCBjbGFzcyAqbmV0ZGV2X2NsYXNzOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGF0YSBTdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQm9uZGluZyBzeXNmcyBsb2NrLiAgV2h5IGNhbid0IHdlIGp1c3QgdXNlIHRoZSBzdWJzeXRlbSBsb2NrPworICogQmVjYXVzZSBrb2JqZWN0X3JlZ2lzdGVyIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHN1YnN5c3RlbSBsb2NrLiAgSWYKKyAqIHdlIGFscmVhZHkgaG9sZCB0aGUgbG9jayAod2hpY2ggd2Ugd291bGQgaWYgdGhlIHVzZXIgd2FzIGNyZWF0aW5nCisgKiBhIG5ldyBib25kIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZSksIHdlIGRlYWRsb2NrLgorICogVGhpcyBsb2NrIGlzIG9ubHkgbmVlZGVkIHdoZW4gZGVsZXRpbmcgYSBib25kIC0gd2UgbmVlZCB0byBtYWtlIHN1cmUKKyAqIHRoYXQgd2UgZG9uJ3QgY29sbGlkZSB3aXRoIGFuIG9uZ29pbmcgaW9jdGwuCisgKi8KKworc3RydWN0IHJ3X3NlbWFwaG9yZSBib25kaW5nX3J3c2VtOworCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogInNob3ciIGZ1bmN0aW9uIGZvciB0aGUgYm9uZF9tYXN0ZXJzIGF0dHJpYnV0ZS4KKyAqIFRoZSBjbGFzcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X2JvbmRzKHN0cnVjdCBjbGFzcyAqY2xzLCBjaGFyICpidWZmZXIpCit7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQ7CisKKwlkb3duX3JlYWQoJihib25kaW5nX3J3c2VtKSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvbmQsICZib25kX2Rldl9saXN0LCBib25kX2xpc3QpIHsKKwkJaWYgKHJlcyA+IChQQUdFX1NJWkUgLSBJRk5BTVNJWikpIHsKKwkJCS8qIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFub3RoZXIgaW50ZXJmYWNlIG5hbWUgKi8KKwkJCWlmICgoUEFHRV9TSVpFIC0gcmVzKSA+IDEwKQorCQkJCXJlcyA9IFBBR0VfU0laRSAtIDEwOworCQkJcmVzICs9IHNwcmludGYoYnVmZmVyICsgcmVzLCAiKyttb3JlKysiKTsKKwkJCWJyZWFrOworCQl9CisJCXJlcyArPSBzcHJpbnRmKGJ1ZmZlciArIHJlcywgIiVzICIsCisJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwl9CisJcmVzICs9IHNwcmludGYoYnVmZmVyICsgcmVzLCAiXG4iKTsKKwlyZXMrKzsKKwl1cF9yZWFkKCYoYm9uZGluZ19yd3NlbSkpOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiAic3RvcmUiIGZ1bmN0aW9uIGZvciB0aGUgYm9uZF9tYXN0ZXJzIGF0dHJpYnV0ZS4gIFRoaXMgaXMgd2hhdAorICogY3JlYXRlcyBhbmQgZGVsZXRlcyBlbnRpcmUgYm9uZHMuCisgKgorICogVGhlIGNsYXNzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorICoKKyAqLworCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX2JvbmRzKHN0cnVjdCBjbGFzcyAqY2xzLCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKwljaGFyIGNvbW1hbmRbSUZOQU1TSVogKyAxXSA9IHswLCB9OworCWNoYXIgKmlmbmFtZTsKKwlpbnQgcmVzID0gY291bnQ7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQ7CisJc3RydWN0IGJvbmRpbmcgKm54dDsKKworCWRvd25fd3JpdGUoJihib25kaW5nX3J3c2VtKSk7CisJc3NjYW5mKGJ1ZmZlciwgIiUxNnMiLCBjb21tYW5kKTsgLyogSUZOQU1TSVoqLworCWlmbmFtZSA9IGNvbW1hbmQgKyAxOworCWlmICgoc3RybGVuKGNvbW1hbmQpIDw9IDEpIHx8CisJICAgICFkZXZfdmFsaWRfbmFtZShpZm5hbWUpKQorCQlnb3RvIGVycl9ub19jbWQ7CisKKwlpZiAoY29tbWFuZFswXSA9PSAnKycpIHsKKworCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGJvbmQgYWxyZWFkeSBleGlzdHMuICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShib25kLCBueHQsICZib25kX2Rldl9saXN0LCBib25kX2xpc3QpCisJCQlpZiAoc3RybmljbXAoYm9uZC0+ZGV2LT5uYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkJCSI6IGNhbm5vdCBhZGQgYm9uZCAlczsgaXQgYWxyZWFkeSBleGlzdHNcbiIsCisJCQkJCWlmbmFtZSk7CisJCQkJcmVzID0gLUVQRVJNOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSI6ICVzIGlzIGJlaW5nIGNyZWF0ZWQuLi5cbiIsIGlmbmFtZSk7CisJCWlmIChib25kX2NyZWF0ZShpZm5hbWUsICZib25kaW5nX2RlZmF1bHRzLCAmYm9uZCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSI6ICVzIGludGVyZmFjZSBhbHJlYWR5IGV4aXN0cy4gQm9uZCBjcmVhdGlvbiBmYWlsZWQuXG4iLAorCQkJaWZuYW1lKTsKKwkJCXJlcyA9IC1FUEVSTTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY29tbWFuZFswXSA9PSAnLScpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvbmQsIG54dCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkKKwkJCWlmIChzdHJuaWNtcChib25kLT5kZXYtPm5hbWUsIGlmbmFtZSwgSUZOQU1TSVopID09IDApIHsKKwkJCQlydG5sX2xvY2soKTsKKwkJCQkvKiBjaGVjayB0aGUgcmVmIGNvdW50IG9uIHRoZSBib25kJ3Mga29iamVjdC4KKwkJCQkgKiBJZiBpdCdzID4gZXhwZWN0ZWQsIHRoZW4gdGhlcmUncyBhIGZpbGUgb3BlbiwKKwkJCQkgKiBhbmQgd2UgaGF2ZSB0byBmYWlsLgorCQkJCSAqLworCQkJCWlmIChhdG9taWNfcmVhZCgmYm9uZC0+ZGV2LT5jbGFzc19kZXYua29iai5rcmVmLnJlZmNvdW50KQorCQkJCQkJCT4gZXhwZWN0ZWRfcmVmY291bnQpeworCQkJCQlydG5sX3VubG9jaygpOworCQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkJCQkiOiBVbmFibGUgcmVtb3ZlIGJvbmQgJXMgZHVlIHRvIG9wZW4gcmVmZXJlbmNlcy5cbiIsCisJCQkJCQlpZm5hbWUpOworCQkJCQlyZXMgPSAtRVBFUk07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkJCSI6ICVzIGlzIGJlaW5nIGRlbGV0ZWQuLi5cbiIsCisJCQkJCWJvbmQtPmRldi0+bmFtZSk7CisJCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoYm9uZC0+ZGV2KTsKKwkJCQlib25kX2RlaW5pdChib25kLT5kZXYpOworCQkgICAgICAgIAlib25kX2Rlc3Ryb3lfc3lzZnNfZW50cnkoYm9uZCk7CisJCQkJcnRubF91bmxvY2soKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSI6IHVuYWJsZSB0byBkZWxldGUgbm9uLWV4aXN0ZW50IGJvbmQgJXNcbiIsIGlmbmFtZSk7CisJCXJlcyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworZXJyX25vX2NtZDoKKwlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJIjogbm8gY29tbWFuZCBmb3VuZCBpbiBib25kaW5nX21hc3RlcnMuIFVzZSAraWZuYW1lIG9yIC1pZm5hbWUuXG4iKTsKKwlyZXMgPSAtRVBFUk07CisKKwkvKiBBbHdheXMgcmV0dXJuIGVpdGhlciBjb3VudCBvciBhbiBlcnJvci4gIElmIHlvdSByZXR1cm4gMCwgeW91J2xsCisJICogZ2V0IGNhbGxlZCBmb3JldmVyLCB3aGljaCBpcyBiYWQuCisJICovCitvdXQ6CisJdXBfd3JpdGUoJihib25kaW5nX3J3c2VtKSk7CisJcmV0dXJuIHJlczsKK30KKy8qIGNsYXNzIGF0dHJpYnV0ZSBmb3IgYm9uZF9tYXN0ZXJzIGZpbGUuICBUaGlzIGVuZHMgdXAgaW4gL3N5cy9jbGFzcy9uZXQgKi8KK3N0YXRpYyBDTEFTU19BVFRSKGJvbmRpbmdfbWFzdGVycywgIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgIGJvbmRpbmdfc2hvd19ib25kcywgYm9uZGluZ19zdG9yZV9ib25kcyk7CisKK2ludCBib25kX2NyZWF0ZV9zbGF2ZV9zeW1saW5rcyhzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmUpCit7CisJY2hhciBsaW5rbmFtZVtJRk5BTVNJWis3XTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGZpcnN0LCBjcmVhdGUgYSBsaW5rIGZyb20gdGhlIHNsYXZlIGJhY2sgdG8gdGhlIG1hc3RlciAqLworCXJldCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCYoc2xhdmUtPmNsYXNzX2Rldi5rb2JqKSwgJihtYXN0ZXItPmNsYXNzX2Rldi5rb2JqKSwKKwkJCQkibWFzdGVyIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKiBuZXh0LCBjcmVhdGUgYSBsaW5rIGZyb20gdGhlIG1hc3RlciB0byB0aGUgc2xhdmUgKi8KKwlzcHJpbnRmKGxpbmtuYW1lLCJzbGF2ZV8lcyIsc2xhdmUtPm5hbWUpOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCYobWFzdGVyLT5jbGFzc19kZXYua29iaiksICYoc2xhdmUtPmNsYXNzX2Rldi5rb2JqKSwKKwkJCQlsaW5rbmFtZSk7CisJcmV0dXJuIHJldDsKKworfQorCit2b2lkIGJvbmRfZGVzdHJveV9zbGF2ZV9zeW1saW5rcyhzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmUpCit7CisJY2hhciBsaW5rbmFtZVtJRk5BTVNJWis3XTsKKworCXN5c2ZzX3JlbW92ZV9saW5rKCYoc2xhdmUtPmNsYXNzX2Rldi5rb2JqKSwgIm1hc3RlciIpOworCXNwcmludGYobGlua25hbWUsInNsYXZlXyVzIixzbGF2ZS0+bmFtZSk7CisJc3lzZnNfcmVtb3ZlX2xpbmsoJihtYXN0ZXItPmNsYXNzX2Rldi5rb2JqKSwgbGlua25hbWUpOworfQorCisKKy8qCisgKiBTaG93IHRoZSBzbGF2ZXMgaW4gdGhlIGN1cnJlbnQgYm9uZC4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X3NsYXZlcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CisJaW50IGksIHJlcyA9IDA7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCXJlYWRfbG9ja19iaCgmYm9uZC0+bG9jayk7CisJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgeworCQlpZiAocmVzID4gKFBBR0VfU0laRSAtIElGTkFNU0laKSkgeworCQkJLyogbm90IGVub3VnaCBzcGFjZSBmb3IgYW5vdGhlciBpbnRlcmZhY2UgbmFtZSAqLworCQkJaWYgKChQQUdFX1NJWkUgLSByZXMpID4gMTApCisJCQkJcmVzID0gUEFHRV9TSVpFIC0gMTA7CisJCQlyZXMgKz0gc3ByaW50ZihidWYgKyByZXMsICIrK21vcmUrKyIpOworCQkJYnJlYWs7CisJCX0KKwkJcmVzICs9IHNwcmludGYoYnVmICsgcmVzLCAiJXMgIiwgc2xhdmUtPmRldi0+bmFtZSk7CisJfQorCXJlYWRfdW5sb2NrX2JoKCZib25kLT5sb2NrKTsKKwlyZXMgKz0gc3ByaW50ZihidWYgKyByZXMsICJcbiIpOworCXJlcysrOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBTZXQgdGhlIHNsYXZlcyBpbiB0aGUgY3VycmVudCBib25kLiAgVGhlIGJvbmQgaW50ZXJmYWNlIG11c3QgYmUKKyAqIHVwIGZvciB0aGlzIHRvIHN1Y2NlZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGxhcmdlbHkgdGhlIHNhbWUgZmxvdyBhcyBib25kaW5nX3VwZGF0ZV9ib25kcygpLgorICovCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX3NsYXZlcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisJY2hhciBjb21tYW5kW0lGTkFNU0laICsgMV0gPSB7IDAsIH07CisJY2hhciAqaWZuYW1lOworCWludCBpLCByZXMsIGZvdW5kLCByZXQgPSBjb3VudDsKKwlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAwOworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwkvKiBRdWljayBzYW5pdHkgY2hlY2sgLS0gaXMgdGhlIGJvbmQgaW50ZXJmYWNlIHVwPyAqLworCWlmICghKGJvbmQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IFVuYWJsZSB0byB1cGRhdGUgc2xhdmVzIGJlY2F1c2UgaW50ZXJmYWNlIGlzIGRvd24uXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBOb3RlOiAgV2UgY2FuJ3QgaG9sZCBib25kLT5sb2NrIGhlcmUsIGFzIGJvbmRfY3JlYXRlIGdyYWJzIGl0LiAqLworCisJc3NjYW5mKGJ1ZmZlciwgIiUxNnMiLCBjb21tYW5kKTsgLyogSUZOQU1TSVoqLworCWlmbmFtZSA9IGNvbW1hbmQgKyAxOworCWlmICgoc3RybGVuKGNvbW1hbmQpIDw9IDEpIHx8CisJICAgICFkZXZfdmFsaWRfbmFtZShpZm5hbWUpKQorCQlnb3RvIGVycl9ub19jbWQ7CisKKwlpZiAoY29tbWFuZFswXSA9PSAnKycpIHsKKworCQkvKiBHb3QgYSBzbGF2ZSBuYW1lIGluIGlmbmFtZS4gIElzIGl0IGFscmVhZHkgaW4gdGhlIGxpc3Q/ICovCisJCWZvdW5kID0gMDsKKwkJcmVhZF9sb2NrX2JoKCZib25kLT5sb2NrKTsKKwkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkKKwkJCWlmIChzdHJuaWNtcChzbGF2ZS0+ZGV2LT5uYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkJICAgICAgICI6ICVzOiBJbnRlcmZhY2UgJXMgaXMgYWxyZWFkeSBlbnNsYXZlZCFcbiIsCisJCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgaWZuYW1lKTsKKwkJCQlyZXQgPSAtRVBFUk07CisJCQkJcmVhZF91bmxvY2tfYmgoJmJvbmQtPmxvY2spOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCXJlYWRfdW5sb2NrX2JoKCZib25kLT5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlczogQWRkaW5nIHNsYXZlICVzLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgaWZuYW1lKTsKKwkJZGV2ID0gZGV2X2dldF9ieV9uYW1lKGlmbmFtZSk7CisJCWlmICghZGV2KSB7CisJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IEludGVyZmFjZSAlcyBkb2VzIG5vdCBleGlzdCFcbiIsCisJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBpZm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCX0KKwkJZWxzZQorCQkJZGV2X3B1dChkZXYpOworCisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogRXJyb3I6IFVuYWJsZSB0byBlbnNsYXZlICVzICIKKwkJCSAgICAgICAiYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHVwLlxuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIGRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBzbGF2ZSwgdGhlbiB3ZSBuZWVkIHRvIHNldAorCQkgICB0aGUgbWFzdGVyJ3MgaGFyZHdhcmUgYWRkcmVzcyB0byBiZSB0aGUgc2FtZSBhcyB0aGUKKwkJICAgc2xhdmUncy4gKi8KKwkJaWYgKCEoKigodTMyICopICYgKGJvbmQtPmRldi0+ZGV2X2FkZHJbMF0pKSkpIHsKKwkJCW1lbWNweShib25kLT5kZXYtPmRldl9hZGRyLCBkZXYtPmRldl9hZGRyLAorCQkJICAgICAgIGRldi0+YWRkcl9sZW4pOworCQl9CisKKwkJLyogU2V0IHRoZSBzbGF2ZSdzIE1UVSB0byBtYXRjaCB0aGUgYm9uZCAqLworCQlpZiAoZGV2LT5tdHUgIT0gYm9uZC0+ZGV2LT5tdHUpIHsKKwkJCWlmIChkZXYtPmNoYW5nZV9tdHUpIHsKKwkJCQlyZXMgPSBkZXYtPmNoYW5nZV9tdHUoZGV2LAorCQkJCQkJICAgICAgYm9uZC0+ZGV2LT5tdHUpOworCQkJCWlmIChyZXMpIHsKKwkJCQkJcmV0ID0gcmVzOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRldi0+bXR1ID0gYm9uZC0+ZGV2LT5tdHU7CisJCQl9CisJCX0KKwkJcnRubF9sb2NrKCk7CisJCXJlcyA9IGJvbmRfZW5zbGF2ZShib25kLT5kZXYsIGRldik7CisJCXJ0bmxfdW5sb2NrKCk7CisJCWlmIChyZXMpIHsKKwkJCXJldCA9IHJlczsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY29tbWFuZFswXSA9PSAnLScpIHsKKwkJZGV2ID0gTlVMTDsKKwkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkKKwkJCWlmIChzdHJuaWNtcChzbGF2ZS0+ZGV2LT5uYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7CisJCQkJZGV2ID0gc2xhdmUtPmRldjsKKwkJCQlicmVhazsKKwkJCX0KKwkJaWYgKGRldikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlczogUmVtb3Zpbmcgc2xhdmUgJXNcbiIsCisJCQkJYm9uZC0+ZGV2LT5uYW1lLCBkZXYtPm5hbWUpOworCQkJcnRubF9sb2NrKCk7CisJCQlyZXMgPSBib25kX3JlbGVhc2UoYm9uZC0+ZGV2LCBkZXYpOworCQkJcnRubF91bmxvY2soKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlyZXQgPSByZXM7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQkvKiBzZXQgdGhlIHNsYXZlIE1UVSB0byB0aGUgZGVmYXVsdCAqLworCQkJaWYgKGRldi0+Y2hhbmdlX210dSkgeworCQkJCWRldi0+Y2hhbmdlX210dShkZXYsIDE1MDApOworCQkJfSBlbHNlIHsKKwkJCQlkZXYtPm10dSA9IDE1MDA7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogdW5hYmxlIHRvIHJlbW92ZSBub24tZXhpc3RlbnQgc2xhdmUgJXMgZm9yIGJvbmQgJXMuXG4iLAorCQkJCWlmbmFtZSwgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCitlcnJfbm9fY21kOgorCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBubyBjb21tYW5kIGZvdW5kIGluIHNsYXZlcyBmaWxlIGZvciBib25kICVzLiBVc2UgK2lmbmFtZSBvciAtaWZuYW1lLlxuIiwgYm9uZC0+ZGV2LT5uYW1lKTsKKwlyZXQgPSAtRVBFUk07CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2xhdmVzLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X3NsYXZlcywgYm9uZGluZ19zdG9yZV9zbGF2ZXMpOworCisvKgorICogU2hvdyBhbmQgc2V0IHRoZSBib25kaW5nIG1vZGUuICBUaGUgYm9uZCBpbnRlcmZhY2UgbXVzdCBiZSBkb3duIHRvCisgKiBjaGFuZ2UgdGhlIG1vZGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19tb2RlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzICVkXG4iLAorCQkJYm9uZF9tb2RlX3RibFtib25kLT5wYXJhbXMubW9kZV0ubW9kZW5hbWUsCisJCQlib25kLT5wYXJhbXMubW9kZSkgKyAxOworfQorCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX21vZGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBuZXdfdmFsdWUsIHJldCA9IGNvdW50OworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlpZiAoYm9uZC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6IHVuYWJsZSB0byB1cGRhdGUgbW9kZSBvZiAlcyBiZWNhdXNlIGludGVyZmFjZSBpcyB1cC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCW5ld192YWx1ZSA9IGJvbmRfcGFyc2VfcGFybSgoY2hhciAqKWJ1ZiwgYm9uZF9tb2RlX3RibCk7CisJaWYgKG5ld192YWx1ZSA8IDApICB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IElnbm9yaW5nIGludmFsaWQgbW9kZSB2YWx1ZSAlLipzLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwKKwkJICAgICAgIChpbnQpc3RybGVuKGJ1ZikgLSAxLCBidWYpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQlib25kLT5wYXJhbXMubW9kZSA9IG5ld192YWx1ZTsKKwkJYm9uZF9zZXRfbW9kZV9vcHMoYm9uZCwgYm9uZC0+cGFyYW1zLm1vZGUpOworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiBzZXR0aW5nIG1vZGUgdG8gJXMgKCVkKS5cbiIsCisJCQlib25kLT5kZXYtPm5hbWUsIGJvbmRfbW9kZV90YmxbbmV3X3ZhbHVlXS5tb2RlbmFtZSwgbmV3X3ZhbHVlKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X21vZGUsIGJvbmRpbmdfc3RvcmVfbW9kZSk7CisKKy8qCisgKiBTaG93IGFuZCBzZXQgdGhlIGJvbmRpbmcgdHJhbnNtaXQgaGFzaCBtZXRob2QuICBUaGUgYm9uZCBpbnRlcmZhY2UgbXVzdCBiZSBkb3duIHRvCisgKiBjaGFuZ2UgdGhlIHhtaXQgaGFzaCBwb2xpY3kuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd194bWl0X2hhc2goc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCWlmICgoYm9uZC0+cGFyYW1zLm1vZGUgIT0gQk9ORF9NT0RFX1hPUikgJiYKKwkgICAgKGJvbmQtPnBhcmFtcy5tb2RlICE9IEJPTkRfTU9ERV84MDIzQUQpKSB7CisJCS8vIE5vdCBBcHBsaWNhYmxlCisJCWNvdW50ID0gc3ByaW50ZihidWYsICJOQVxuIikgKyAxOworCX0gZWxzZSB7CisJCWNvdW50ID0gc3ByaW50ZihidWYsICIlcyAlZFxuIiwKKwkJCXhtaXRfaGFzaHR5cGVfdGJsW2JvbmQtPnBhcmFtcy54bWl0X3BvbGljeV0ubW9kZW5hbWUsCisJCQlib25kLT5wYXJhbXMueG1pdF9wb2xpY3kpICsgMTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfeG1pdF9oYXNoKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbmV3X3ZhbHVlLCByZXQgPSBjb3VudDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJaWYgKGJvbmQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiJXM6IEludGVyZmFjZSBpcyB1cC4gVW5hYmxlIHRvIHVwZGF0ZSB4bWl0IHBvbGljeS5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCWlmICgoYm9uZC0+cGFyYW1zLm1vZGUgIT0gQk9ORF9NT0RFX1hPUikgJiYKKwkgICAgKGJvbmQtPnBhcmFtcy5tb2RlICE9IEJPTkRfTU9ERV84MDIzQUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIiVzOiBUcmFuc21pdCBoYXNoIHBvbGljeSBpcyBpcnJlbGV2YW50IGluIHRoaXMgbW9kZS5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCW5ld192YWx1ZSA9IGJvbmRfcGFyc2VfcGFybSgoY2hhciAqKWJ1ZiwgeG1pdF9oYXNodHlwZV90YmwpOworCWlmIChuZXdfdmFsdWUgPCAwKSAgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBJZ25vcmluZyBpbnZhbGlkIHhtaXQgaGFzaCBwb2xpY3kgdmFsdWUgJS4qcy5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUsCisJCSAgICAgICAoaW50KXN0cmxlbihidWYpIC0gMSwgYnVmKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJYm9uZC0+cGFyYW1zLnhtaXRfcG9saWN5ID0gbmV3X3ZhbHVlOworCQlib25kX3NldF9tb2RlX29wcyhib25kLCBib25kLT5wYXJhbXMubW9kZSk7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6IHNldHRpbmcgeG1pdCBoYXNoIHBvbGljeSB0byAlcyAoJWQpLlxuIiwKKwkJCWJvbmQtPmRldi0+bmFtZSwgeG1pdF9oYXNodHlwZV90YmxbbmV3X3ZhbHVlXS5tb2RlbmFtZSwgbmV3X3ZhbHVlKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih4bWl0X2hhc2hfcG9saWN5LCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X3htaXRfaGFzaCwgYm9uZGluZ19zdG9yZV94bWl0X2hhc2gpOworCisvKgorICogU2hvdyBhbmQgc2V0IHRoZSBhcnAgdGltZXIgaW50ZXJ2YWwuICBUaGVyZSBhcmUgdHdvIHRyaWNreSBiaXRzCisgKiBoZXJlLiAgRmlyc3QsIGlmIEFSUCBtb25pdG9yaW5nIGlzIGFjdGl2YXRlZCwgdGhlbiB3ZSBtdXN0IGRpc2FibGUKKyAqIE1JSSBtb25pdG9yaW5nLiAgU2Vjb25kLCBpZiB0aGUgQVJQIHRpbWVyIGlzbid0IHJ1bm5pbmcsIHdlIG11c3QKKyAqIHN0YXJ0IGl0LgorICovCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfYXJwX2ludGVydmFsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMuYXJwX2ludGVydmFsKSArIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfYXJwX2ludGVydmFsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbmV3X3ZhbHVlLCByZXQgPSBjb3VudDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogbm8gYXJwX2ludGVydmFsIHZhbHVlIHNwZWNpZmllZC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKG5ld192YWx1ZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogSW52YWxpZCBhcnBfaW50ZXJ2YWwgdmFsdWUgJWQgbm90IGluIHJhbmdlIDEtJWQ7IHJlamVjdGVkLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlLCBJTlRfTUFYKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCSAgICAgICAiOiAlczogU2V0dGluZyBBUlAgbW9uaXRvcmluZyBpbnRlcnZhbCB0byAlZC5cbiIsCisJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlKTsKKwlib25kLT5wYXJhbXMuYXJwX2ludGVydmFsID0gbmV3X3ZhbHVlOworCWlmIChib25kLT5wYXJhbXMubWlpbW9uKSB7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBBUlAgbW9uaXRvcmluZyBjYW5ub3QgYmUgdXNlZCB3aXRoIE1JSSBtb25pdG9yaW5nLiAiCisJCSAgICAgICAiJXMgRGlzYWJsaW5nIE1JSSBtb25pdG9yaW5nLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJYm9uZC0+cGFyYW1zLm1paW1vbiA9IDA7CisJCS8qIEtpbGwgTUlJIHRpbWVyLCBlbHNlIGl0IGJyaW5ncyBib25kJ3MgbGluayBkb3duICovCisJCWlmIChib25kLT5hcnBfdGltZXIuZnVuY3Rpb24pIHsKKwkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSI6ICVzOiBLaWxsIE1JSSB0aW1lciwgZWxzZSBpdCBicmluZ3MgYm9uZCdzIGxpbmsgZG93bi4uLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CisJCQlkZWxfdGltZXJfc3luYygmYm9uZC0+bWlpX3RpbWVyKTsKKwkJfQorCX0KKwlpZiAoIWJvbmQtPnBhcmFtcy5hcnBfdGFyZ2V0c1swXSkgeworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogQVJQIG1vbml0b3JpbmcgaGFzIGJlZW4gc2V0IHVwLCAiCisJCSAgICAgICAiYnV0IG5vIEFSUCB0YXJnZXRzIGhhdmUgYmVlbiBzcGVjaWZpZWQuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwl9CisJaWYgKGJvbmQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJLyogSWYgdGhlIGludGVyZmFjZSBpcyB1cCwgd2UgbWF5IG5lZWQgdG8gZmlyZSBvZmYKKwkJICogdGhlIEFSUCB0aW1lci4gIElmIHRoZSBpbnRlcmZhY2UgaXMgZG93biwgdGhlCisJCSAqIHRpbWVyIHdpbGwgZ2V0IGZpcmVkIG9mZiB3aGVuIHRoZSBvcGVuIGZ1bmN0aW9uCisJCSAqIGlzIGNhbGxlZC4KKwkJICovCisJCWlmIChib25kLT5hcnBfdGltZXIuZnVuY3Rpb24pIHsKKwkJCS8qIFRoZSB0aW1lcidzIGFscmVhZHkgc2V0IHVwLCBzbyBmaXJlIGl0IG9mZiAqLworCQkJbW9kX3RpbWVyKCZib25kLT5hcnBfdGltZXIsIGppZmZpZXMgKyAxKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFNldCB1cCB0aGUgdGltZXIuICovCisJCQlpbml0X3RpbWVyKCZib25kLT5hcnBfdGltZXIpOworCQkJYm9uZC0+YXJwX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKKwkJCWJvbmQtPmFycF90aW1lci5kYXRhID0KKwkJCQkodW5zaWduZWQgbG9uZykgYm9uZC0+ZGV2OworCQkJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApIHsKKwkJCQlib25kLT5hcnBfdGltZXIuZnVuY3Rpb24gPQorCQkJCQkodm9pZCAqKQorCQkJCQkmYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbjsKKwkJCX0gZWxzZSB7CisJCQkJYm9uZC0+YXJwX3RpbWVyLmZ1bmN0aW9uID0KKwkJCQkJKHZvaWQgKikKKwkJCQkJJmJvbmRfbG9hZGJhbGFuY2VfYXJwX21vbjsKKwkJCX0KKwkJCWFkZF90aW1lcigmYm9uZC0+YXJwX3RpbWVyKTsKKwkJfQorCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYXJwX2ludGVydmFsLCBTX0lSVUdPIHwgU19JV1VTUiAsIGJvbmRpbmdfc2hvd19hcnBfaW50ZXJ2YWwsIGJvbmRpbmdfc3RvcmVfYXJwX2ludGVydmFsKTsKKworLyoKKyAqIFNob3cgYW5kIHNldCB0aGUgYXJwIHRhcmdldHMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19hcnBfdGFyZ2V0cyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCWludCBpLCByZXMgPSAwOworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQk9ORF9NQVhfQVJQX1RBUkdFVFM7IGkrKykgeworCQlpZiAoYm9uZC0+cGFyYW1zLmFycF90YXJnZXRzW2ldKQorCQkJcmVzICs9IHNwcmludGYoYnVmICsgcmVzLCAiJXUuJXUuJXUuJXUgIiwKKwkJCSAgICAgICBOSVBRVUFEKGJvbmQtPnBhcmFtcy5hcnBfdGFyZ2V0c1tpXSkpOworCX0KKwlpZiAocmVzKQorCQlyZXMtLTsgIC8qIGVhdCB0aGUgbGVmdG92ZXIgc3BhY2UgKi8KKwlyZXMgKz0gc3ByaW50ZihidWYgKyByZXMsICJcbiIpOworCXJlcysrOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfYXJwX3RhcmdldHMoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXUzMiBuZXd0YXJnZXQ7CisJaW50IGkgPSAwLCBkb25lID0gMCwgcmV0ID0gY291bnQ7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKwl1MzIgKnRhcmdldHM7CisKKwl0YXJnZXRzID0gYm9uZC0+cGFyYW1zLmFycF90YXJnZXRzOworCW5ld3RhcmdldCA9IGluX2F0b24oYnVmICsgMSk7CisJLyogbG9vayBmb3IgYWRkcyAqLworCWlmIChidWZbMF0gPT0gJysnKSB7CisJCWlmICgobmV3dGFyZ2V0ID09IDApIHx8IChuZXd0YXJnZXQgPT0gSU5BRERSX0JST0FEQ0FTVCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBpbnZhbGlkIEFSUCB0YXJnZXQgJXUuJXUuJXUuJXUgc3BlY2lmaWVkIGZvciBhZGRpdGlvblxuIiwKKyAJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBOSVBRVUFEKG5ld3RhcmdldCkpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIGxvb2sgZm9yIGFuIGVtcHR5IHNsb3QgdG8gcHV0IHRoZSB0YXJnZXQgaW4sIGFuZCBjaGVjayBmb3IgZHVwZXMgKi8KKwkJZm9yIChpID0gMDsgKGkgPCBCT05EX01BWF9BUlBfVEFSR0VUUyk7IGkrKykgeworCQkJaWYgKHRhcmdldHNbaV0gPT0gbmV3dGFyZ2V0KSB7IC8qIGR1cGxpY2F0ZSAqLworCQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJCSAgICAgICAiOiAlczogQVJQIHRhcmdldCAldS4ldS4ldS4ldSBpcyBhbHJlYWR5IHByZXNlbnRcbiIsCisJCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgTklQUVVBRChuZXd0YXJnZXQpKTsKKwkJCQlpZiAoZG9uZSkKKwkJCQkJdGFyZ2V0c1tpXSA9IDA7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWlmICh0YXJnZXRzW2ldID09IDAgJiYgIWRvbmUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkJICAgICAgICI6ICVzOiBhZGRpbmcgQVJQIHRhcmdldCAlZC4lZC4lZC4lZC5cbiIsCisJCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgTklQUVVBRChuZXd0YXJnZXQpKTsKKwkJCQlkb25lID0gMTsKKwkJCQl0YXJnZXRzW2ldID0gbmV3dGFyZ2V0OworCQkJfQorCQl9CisJCWlmICghZG9uZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IEFSUCB0YXJnZXQgdGFibGUgaXMgZnVsbCFcbiIsCisJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJfQorCWVsc2UgaWYgKGJ1ZlswXSA9PSAnLScpCXsKKwkJaWYgKChuZXd0YXJnZXQgPT0gMCkgfHwgKG5ld3RhcmdldCA9PSBJTkFERFJfQlJPQURDQVNUKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IGludmFsaWQgQVJQIHRhcmdldCAlZC4lZC4lZC4lZCBzcGVjaWZpZWQgZm9yIHJlbW92YWxcbiIsCisJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBOSVBRVUFEKG5ld3RhcmdldCkpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9yIChpID0gMDsgKGkgPCBCT05EX01BWF9BUlBfVEFSR0VUUyk7IGkrKykgeworCQkJaWYgKHRhcmdldHNbaV0gPT0gbmV3dGFyZ2V0KSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJCSAgICAgICAiOiAlczogcmVtb3ZpbmcgQVJQIHRhcmdldCAlZC4lZC4lZC4lZC5cbiIsCisJCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgTklQUVVBRChuZXd0YXJnZXQpKTsKKwkJCQl0YXJnZXRzW2ldID0gMDsKKwkJCQlkb25lID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoIWRvbmUpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogdW5hYmxlIHRvIHJlbW92ZSBub25leGlzdGVudCBBUlAgdGFyZ2V0ICVkLiVkLiVkLiVkLlxuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIE5JUFFVQUQobmV3dGFyZ2V0KSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBubyBjb21tYW5kIGZvdW5kIGluIGFycF9pcF90YXJnZXRzIGZpbGUgZm9yIGJvbmQgJXMuIFVzZSArPGFkZHI+IG9yIC08YWRkcj4uXG4iLAorCQkJYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGFycF9pcF90YXJnZXQsIFNfSVJVR08gfCBTX0lXVVNSICwgYm9uZGluZ19zaG93X2FycF90YXJnZXRzLCBib25kaW5nX3N0b3JlX2FycF90YXJnZXRzKTsKKworLyoKKyAqIFNob3cgYW5kIHNldCB0aGUgdXAgYW5kIGRvd24gZGVsYXlzLiAgVGhlc2UgbXVzdCBiZSBtdWx0aXBsZXMgb2YgdGhlCisgKiBNSUkgbW9uaXRvcmluZyB2YWx1ZSwgYW5kIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyB0aGUgbXVsdGlwbGllci4KKyAqIFRodXMsIHdlIG11c3QgdHJhbnNsYXRlIHRvIE1TIGZvciB0aGUgcmVhbCB3b3JsZC4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X2Rvd25kZWxheShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYm9uZC0+cGFyYW1zLmRvd25kZWxheSAqIGJvbmQtPnBhcmFtcy5taWltb24pICsgMTsKK30KKworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9kb3duZGVsYXkoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBuZXdfdmFsdWUsIHJldCA9IGNvdW50OworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlpZiAoIShib25kLT5wYXJhbXMubWlpbW9uKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBVbmFibGUgdG8gc2V0IGRvd24gZGVsYXkgYXMgTUlJIG1vbml0b3JpbmcgaXMgZGlzYWJsZWRcbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmbmV3X3ZhbHVlKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IG5vIGRvd24gZGVsYXkgdmFsdWUgc3BlY2lmaWVkLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobmV3X3ZhbHVlIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBJbnZhbGlkIGRvd24gZGVsYXkgdmFsdWUgJWQgbm90IGluIHJhbmdlICVkLSVkOyByZWplY3RlZC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSwgMSwgSU5UX01BWCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCWlmICgobmV3X3ZhbHVlICUgYm9uZC0+cGFyYW1zLm1paW1vbikgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBXYXJuaW5nOiBkb3duIGRlbGF5ICglZCkgaXMgbm90IGEgbXVsdGlwbGUgIgorCQkJICAgICAgICJvZiBtaWltb24gKCVkKSwgZGVsYXkgcm91bmRlZCB0byAlZCBtc1xuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSwgYm9uZC0+cGFyYW1zLm1paW1vbiwKKwkJCSAgICAgICAobmV3X3ZhbHVlIC8gYm9uZC0+cGFyYW1zLm1paW1vbikgKgorCQkJICAgICAgIGJvbmQtPnBhcmFtcy5taWltb24pOworCQl9CisJCWJvbmQtPnBhcmFtcy5kb3duZGVsYXkgPSBuZXdfdmFsdWUgLyBib25kLT5wYXJhbXMubWlpbW9uOworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiBTZXR0aW5nIGRvd24gZGVsYXkgdG8gJWQuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBib25kLT5wYXJhbXMuZG93bmRlbGF5ICogYm9uZC0+cGFyYW1zLm1paW1vbik7CisKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGRvd25kZWxheSwgU19JUlVHTyB8IFNfSVdVU1IgLCBib25kaW5nX3Nob3dfZG93bmRlbGF5LCBib25kaW5nX3N0b3JlX2Rvd25kZWxheSk7CisKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd191cGRlbGF5KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMudXBkZWxheSAqIGJvbmQtPnBhcmFtcy5taWltb24pICsgMTsKKworfQorCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX3VwZGVsYXkoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBuZXdfdmFsdWUsIHJldCA9IGNvdW50OworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlpZiAoIShib25kLT5wYXJhbXMubWlpbW9uKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBVbmFibGUgdG8gc2V0IHVwIGRlbGF5IGFzIE1JSSBtb25pdG9yaW5nIGlzIGRpc2FibGVkXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBubyB1cCBkZWxheSB2YWx1ZSBzcGVjaWZpZWQuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChuZXdfdmFsdWUgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IEludmFsaWQgZG93biBkZWxheSB2YWx1ZSAlZCBub3QgaW4gcmFuZ2UgJWQtJWQ7IHJlamVjdGVkLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlLCAxLCBJTlRfTUFYKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJaWYgKChuZXdfdmFsdWUgJSBib25kLT5wYXJhbXMubWlpbW9uKSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IHVwIGRlbGF5ICglZCkgaXMgbm90IGEgbXVsdGlwbGUgIgorCQkJICAgICAgICJvZiBtaWltb24gKCVkKSwgdXBkZWxheSByb3VuZGVkIHRvICVkIG1zXG4iLAorCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlLCBib25kLT5wYXJhbXMubWlpbW9uLAorCQkJICAgICAgIChuZXdfdmFsdWUgLyBib25kLT5wYXJhbXMubWlpbW9uKSAqCisJCQkgICAgICAgYm9uZC0+cGFyYW1zLm1paW1vbik7CisJCX0KKwkJYm9uZC0+cGFyYW1zLnVwZGVsYXkgPSBuZXdfdmFsdWUgLyBib25kLT5wYXJhbXMubWlpbW9uOworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiBTZXR0aW5nIHVwIGRlbGF5IHRvICVkLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgYm9uZC0+cGFyYW1zLnVwZGVsYXkgKiBib25kLT5wYXJhbXMubWlpbW9uKTsKKworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodXBkZWxheSwgU19JUlVHTyB8IFNfSVdVU1IgLCBib25kaW5nX3Nob3dfdXBkZWxheSwgYm9uZGluZ19zdG9yZV91cGRlbGF5KTsKKworLyoKKyAqIFNob3cgYW5kIHNldCB0aGUgTEFDUCBpbnRlcnZhbC4gIEludGVyZmFjZSBtdXN0IGJlIGRvd24sIGFuZCB0aGUgbW9kZQorICogbXVzdCBiZSBzZXQgdG8gODAyLjNhZCBtb2RlLgorICovCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfbGFjcChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlcyAlZFxuIiwKKwkJYm9uZF9sYWNwX3RibFtib25kLT5wYXJhbXMubGFjcF9mYXN0XS5tb2RlbmFtZSwKKwkJYm9uZC0+cGFyYW1zLmxhY3BfZmFzdCkgKyAxOworfQorCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX2xhY3Aoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBuZXdfdmFsdWUsIHJldCA9IGNvdW50OworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlpZiAoYm9uZC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBVbmFibGUgdG8gdXBkYXRlIExBQ1AgcmF0ZSBiZWNhdXNlIGludGVyZmFjZSBpcyB1cC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChib25kLT5wYXJhbXMubW9kZSAhPSBCT05EX01PREVfODAyM0FEKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IFVuYWJsZSB0byB1cGRhdGUgTEFDUCByYXRlIGJlY2F1c2UgYm9uZCBpcyBub3QgaW4gODAyLjNhZCBtb2RlLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCisJbmV3X3ZhbHVlID0gYm9uZF9wYXJzZV9wYXJtKChjaGFyICopYnVmLCBib25kX2xhY3BfdGJsKTsKKworCWlmICgobmV3X3ZhbHVlID09IDEpIHx8IChuZXdfdmFsdWUgPT0gMCkpIHsKKwkJYm9uZC0+cGFyYW1zLmxhY3BfZmFzdCA9IG5ld192YWx1ZTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IFNldHRpbmcgTEFDUCByYXRlIHRvICVzICglZCkuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBib25kX2xhY3BfdGJsW25ld192YWx1ZV0ubW9kZW5hbWUsIG5ld192YWx1ZSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogSWdub3JpbmcgaW52YWxpZCBMQUNQIHJhdGUgdmFsdWUgJS4qcy5cbiIsCisJCSAgICAgCWJvbmQtPmRldi0+bmFtZSwgKGludClzdHJsZW4oYnVmKSAtIDEsIGJ1Zik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobGFjcF9yYXRlLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X2xhY3AsIGJvbmRpbmdfc3RvcmVfbGFjcCk7CisKKy8qCisgKiBTaG93IGFuZCBzZXQgdGhlIE1JSSBtb25pdG9yIGludGVydmFsLiAgVGhlcmUgYXJlIHR3byB0cmlja3kgYml0cworICogaGVyZS4gIEZpcnN0LCBpZiBNSUkgbW9uaXRvcmluZyBpcyBhY3RpdmF0ZWQsIHRoZW4gd2UgbXVzdCBkaXNhYmxlCisgKiBBUlAgbW9uaXRvcmluZy4gIFNlY29uZCwgaWYgdGhlIHRpbWVyIGlzbid0IHJ1bm5pbmcsIHdlIG11c3QKKyAqIHN0YXJ0IGl0LgorICovCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfbWlpbW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMubWlpbW9uKSArIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfbWlpbW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbmV3X3ZhbHVlLCByZXQgPSBjb3VudDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogbm8gbWlpbW9uIHZhbHVlIHNwZWNpZmllZC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKG5ld192YWx1ZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogSW52YWxpZCBtaWltb24gdmFsdWUgJWQgbm90IGluIHJhbmdlICVkLSVkOyByZWplY3RlZC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSwgMSwgSU5UX01BWCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBTZXR0aW5nIE1JSSBtb25pdG9yaW5nIGludGVydmFsIHRvICVkLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlKTsKKwkJYm9uZC0+cGFyYW1zLm1paW1vbiA9IG5ld192YWx1ZTsKKwkJaWYoYm9uZC0+cGFyYW1zLnVwZGVsYXkpCisJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkgICAgICAiOiAlczogTm90ZTogVXBkYXRpbmcgdXBkZWxheSAodG8gJWQpICIKKwkJCSAgICAgICJzaW5jZSBpdCBpcyBhIG11bHRpcGxlIG9mIHRoZSBtaWltb24gdmFsdWUuXG4iLAorCQkJICAgICAgYm9uZC0+ZGV2LT5uYW1lLAorCQkJICAgICAgYm9uZC0+cGFyYW1zLnVwZGVsYXkgKiBib25kLT5wYXJhbXMubWlpbW9uKTsKKwkJaWYoYm9uZC0+cGFyYW1zLmRvd25kZWxheSkKKwkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSAgICAgICI6ICVzOiBOb3RlOiBVcGRhdGluZyBkb3duZGVsYXkgKHRvICVkKSAiCisJCQkgICAgICAic2luY2UgaXQgaXMgYSBtdWx0aXBsZSBvZiB0aGUgbWlpbW9uIHZhbHVlLlxuIiwKKwkJCSAgICAgIGJvbmQtPmRldi0+bmFtZSwKKwkJCSAgICAgIGJvbmQtPnBhcmFtcy5kb3duZGVsYXkgKiBib25kLT5wYXJhbXMubWlpbW9uKTsKKwkJaWYgKGJvbmQtPnBhcmFtcy5hcnBfaW50ZXJ2YWwpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogTUlJIG1vbml0b3JpbmcgY2Fubm90IGJlIHVzZWQgd2l0aCAiCisJCQkgICAgICAgIkFSUCBtb25pdG9yaW5nLiBEaXNhYmxpbmcgQVJQIG1vbml0b3JpbmcuLi5cbiIsCisJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJCWJvbmQtPnBhcmFtcy5hcnBfaW50ZXJ2YWwgPSAwOworCQkJLyogS2lsbCBBUlAgdGltZXIsIGVsc2UgaXQgYnJpbmdzIGJvbmQncyBsaW5rIGRvd24gKi8KKwkJCWlmIChib25kLT5taWlfdGltZXIuZnVuY3Rpb24pIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkJIjogJXM6IEtpbGwgQVJQIHRpbWVyLCBlbHNlIGl0IGJyaW5ncyBib25kJ3MgbGluayBkb3duLi4uXG4iLAorCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CisJCQkJZGVsX3RpbWVyX3N5bmMoJmJvbmQtPmFycF90aW1lcik7CisJCQl9CisJCX0KKworCQlpZiAoYm9uZC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgeworCQkJLyogSWYgdGhlIGludGVyZmFjZSBpcyB1cCwgd2UgbWF5IG5lZWQgdG8gZmlyZSBvZmYKKwkJCSAqIHRoZSBNSUkgdGltZXIuIElmIHRoZSBpbnRlcmZhY2UgaXMgZG93biwgdGhlCisJCQkgKiB0aW1lciB3aWxsIGdldCBmaXJlZCBvZmYgd2hlbiB0aGUgb3BlbiBmdW5jdGlvbgorCQkJICogaXMgY2FsbGVkLgorCQkJICovCisJCQlpZiAoYm9uZC0+bWlpX3RpbWVyLmZ1bmN0aW9uKSB7CisJCQkJLyogVGhlIHRpbWVyJ3MgYWxyZWFkeSBzZXQgdXAsIHNvIGZpcmUgaXQgb2ZmICovCisJCQkJbW9kX3RpbWVyKCZib25kLT5taWlfdGltZXIsIGppZmZpZXMgKyAxKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogU2V0IHVwIHRoZSB0aW1lci4gKi8KKwkJCQlpbml0X3RpbWVyKCZib25kLT5taWlfdGltZXIpOworCQkJCWJvbmQtPm1paV90aW1lci5leHBpcmVzID0gamlmZmllcyArIDE7CisJCQkJYm9uZC0+bWlpX3RpbWVyLmRhdGEgPQorCQkJCQkodW5zaWduZWQgbG9uZykgYm9uZC0+ZGV2OworCQkJCWJvbmQtPm1paV90aW1lci5mdW5jdGlvbiA9CisJCQkJCSh2b2lkICopICZib25kX21paV9tb25pdG9yOworCQkJCWFkZF90aW1lcigmYm9uZC0+bWlpX3RpbWVyKTsKKwkJCX0KKwkJfQorCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG1paW1vbiwgU19JUlVHTyB8IFNfSVdVU1IsIGJvbmRpbmdfc2hvd19taWltb24sIGJvbmRpbmdfc3RvcmVfbWlpbW9uKTsKKworLyoKKyAqIFNob3cgYW5kIHNldCB0aGUgcHJpbWFyeSBzbGF2ZS4gIFRoZSBzdG9yZSBmdW5jdGlvbiBpcyBtdWNoCisgKiBzaW1wbGVyIHRoYW4gYm9uZGluZ19zdG9yZV9zbGF2ZXMgZnVuY3Rpb24gYmVjYXVzZSBpdCBvbmx5IG5lZWRzIHRvCisgKiBoYW5kbGUgb25lIGludGVyZmFjZSBuYW1lLgorICogVGhlIGJvbmQgbXVzdCBiZSBhIG1vZGUgdGhhdCBzdXBwb3J0cyBhIHByaW1hcnkgZm9yIHRoaXMgYmUKKyAqIHNldC4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X3ByaW1hcnkoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgY291bnQgPSAwOworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlpZiAoYm9uZC0+cHJpbWFyeV9zbGF2ZSkKKwkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBib25kLT5wcmltYXJ5X3NsYXZlLT5kZXYtPm5hbWUpICsgMTsKKwllbHNlCisJCWNvdW50ID0gc3ByaW50ZihidWYsICJcbiIpICsgMTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9wcmltYXJ5KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwl3cml0ZV9sb2NrX2JoKCZib25kLT5sb2NrKTsKKwlpZiAoIVVTRVNfUFJJTUFSWShib25kLT5wYXJhbXMubW9kZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IFVuYWJsZSB0byBzZXQgcHJpbWFyeSBzbGF2ZTsgJXMgaXMgaW4gbW9kZSAlZFxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgYm9uZC0+ZGV2LT5uYW1lLCBib25kLT5wYXJhbXMubW9kZSk7CisJfSBlbHNlIHsKKwkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgeworCQkJaWYgKHN0cm5pY21wCisJCQkgICAgKHNsYXZlLT5kZXYtPm5hbWUsIGJ1ZiwKKwkJCSAgICAgc3RybGVuKHNsYXZlLT5kZXYtPm5hbWUpKSA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJCSAgICAgICAiOiAlczogU2V0dGluZyAlcyBhcyBwcmltYXJ5IHNsYXZlLlxuIiwKKwkJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJCQlib25kLT5wcmltYXJ5X3NsYXZlID0gc2xhdmU7CisJCQkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJLyogaWYgd2UgZ290IGhlcmUsIHRoZW4gd2UgZGlkbid0IG1hdGNoIHRoZSBuYW1lIG9mIGFueSBzbGF2ZSAqLworCisJCWlmIChzdHJsZW4oYnVmKSA9PSAwIHx8IGJ1ZlswXSA9PSAnXG4nKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IFNldHRpbmcgcHJpbWFyeSBzbGF2ZSB0byBOb25lLlxuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQkJYm9uZC0+cHJpbWFyeV9zbGF2ZSA9IDA7CisJCQkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBVbmFibGUgdG8gc2V0ICUuKnMgYXMgcHJpbWFyeSBzbGF2ZSBhcyBpdCBpcyBub3QgYSBzbGF2ZS5cbiIsCisJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCAoaW50KXN0cmxlbihidWYpIC0gMSwgYnVmKTsKKwkJfQorCX0KK291dDoKKwl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihwcmltYXJ5LCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X3ByaW1hcnksIGJvbmRpbmdfc3RvcmVfcHJpbWFyeSk7CisKKy8qCisgKiBTaG93IGFuZCBzZXQgdGhlIHVzZV9jYXJyaWVyIGZsYWcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19jYXJyaWVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMudXNlX2NhcnJpZXIpICsgMTsKK30KKworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9jYXJyaWVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbmV3X3ZhbHVlLCByZXQgPSBjb3VudDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBubyB1c2VfY2FycmllciB2YWx1ZSBzcGVjaWZpZWQuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWlmICgobmV3X3ZhbHVlID09IDApIHx8IChuZXdfdmFsdWUgPT0gMSkpIHsKKwkJYm9uZC0+cGFyYW1zLnVzZV9jYXJyaWVyID0gbmV3X3ZhbHVlOworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiBTZXR0aW5nIHVzZV9jYXJyaWVyIHRvICVkLlxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogSWdub3JpbmcgaW52YWxpZCB1c2VfY2FycmllciB2YWx1ZSAlZC5cbiIsCisJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSk7CisJfQorb3V0OgorCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih1c2VfY2FycmllciwgU19JUlVHTyB8IFNfSVdVU1IsIGJvbmRpbmdfc2hvd19jYXJyaWVyLCBib25kaW5nX3N0b3JlX2NhcnJpZXIpOworCisKKy8qCisgKiBTaG93IGFuZCBzZXQgY3VycmVudGx5IGFjdGl2ZV9zbGF2ZS4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbGF2ZSAqY3VycjsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCWludCBjb3VudDsKKworCisJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOworCWN1cnIgPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZTsKKwlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKworCWlmIChVU0VTX1BSSU1BUlkoYm9uZC0+cGFyYW1zLm1vZGUpICYmIGN1cnIpCisJCWNvdW50ID0gc3ByaW50ZihidWYsICIlc1xuIiwgY3Vyci0+ZGV2LT5uYW1lKSArIDE7CisJZWxzZQorCQljb3VudCA9IHNwcmludGYoYnVmLCAiXG4iKSArIDE7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IGk7CisJc3RydWN0IHNsYXZlICpzbGF2ZTsKKyAgICAgICAgc3RydWN0IHNsYXZlICpvbGRfYWN0aXZlID0gTlVMTDsKKyAgICAgICAgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlID0gTlVMTDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJd3JpdGVfbG9ja19iaCgmYm9uZC0+bG9jayk7CisJaWYgKCFVU0VTX1BSSU1BUlkoYm9uZC0+cGFyYW1zLm1vZGUpKSB7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBVbmFibGUgdG8gY2hhbmdlIGFjdGl2ZSBzbGF2ZTsgJXMgaXMgaW4gbW9kZSAlZFxuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgYm9uZC0+ZGV2LT5uYW1lLCBib25kLT5wYXJhbXMubW9kZSk7CisJfSBlbHNlIHsKKwkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgeworCQkJaWYgKHN0cm5pY21wCisJCQkgICAgKHNsYXZlLT5kZXYtPm5hbWUsIGJ1ZiwKKwkJCSAgICAgc3RybGVuKHNsYXZlLT5kZXYtPm5hbWUpKSA9PSAwKSB7CisgICAgICAgIAkJCW9sZF9hY3RpdmUgPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZTsKKyAgICAgICAgCQkJbmV3X2FjdGl2ZSA9IHNsYXZlOworICAgICAgICAJCQlpZiAobmV3X2FjdGl2ZSAmJiAobmV3X2FjdGl2ZSA9PSBvbGRfYWN0aXZlKSkgeworCQkJCQkvKiBkbyBub3RoaW5nICovCisJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCQkgICAgICAgCSAgICAgICAiOiAlczogJXMgaXMgYWxyZWFkeSB0aGUgY3VycmVudCBhY3RpdmUgc2xhdmUuXG4iLAorCQkJCSAgICAgICAgICAgICAgIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQllbHNlIHsKKyAgICAgICAgCQkJCWlmICgobmV3X2FjdGl2ZSkgJiYKKyAgICAgICAgICAgIAkJCQkgICAgKG9sZF9hY3RpdmUpICYmCisJCQkJICAgICAgICAgICAgKG5ld19hY3RpdmUtPmxpbmsgPT0gQk9ORF9MSU5LX1VQKSAmJgorCQkJCSAgICAgICAgICAgIElTX1VQKG5ld19hY3RpdmUtPmRldikpIHsKKwkJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCQkgICAgICAgCSAgICAgICAgICAgICAgIjogJXM6IFNldHRpbmcgJXMgYXMgYWN0aXZlIHNsYXZlLlxuIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKyAgICAgICAgICAgICAgICAJCQkJYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKGJvbmQsIG5ld19hY3RpdmUpOworICAgICAgICAJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJCQkgICAgICAgCSAgICAgICAgICAgICAgIjogJXM6IENvdWxkIG5vdCBzZXQgJXMgYXMgYWN0aXZlIHNsYXZlOyAiCisJCQkJCQkgICAgICAiZWl0aGVyICVzIGlzIGRvd24gb3IgdGhlIGxpbmsgaXMgZG93bi5cbiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSwKKwkJCQkJCSAgICAgIHNsYXZlLT5kZXYtPm5hbWUpOworCQkJCQl9CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIGlmIHdlIGdvdCBoZXJlLCB0aGVuIHdlIGRpZG4ndCBtYXRjaCB0aGUgbmFtZSBvZiBhbnkgc2xhdmUgKi8KKworCQlpZiAoc3RybGVuKGJ1ZikgPT0gMCB8fCBidWZbMF0gPT0gJ1xuJykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBTZXR0aW5nIGFjdGl2ZSBzbGF2ZSB0byBOb25lLlxuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQkJYm9uZC0+cHJpbWFyeV9zbGF2ZSA9IDA7CisJCQkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBVbmFibGUgdG8gc2V0ICUuKnMgYXMgYWN0aXZlIHNsYXZlIGFzIGl0IGlzIG5vdCBhIHNsYXZlLlxuIiwKKwkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIChpbnQpc3RybGVuKGJ1ZikgLSAxLCBidWYpOworCQl9CisJfQorb3V0OgorCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+bG9jayk7CisJcmV0dXJuIGNvdW50OworCit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYWN0aXZlX3NsYXZlLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X2FjdGl2ZV9zbGF2ZSwgYm9uZGluZ19zdG9yZV9hY3RpdmVfc2xhdmUpOworCisKKy8qCisgKiBTaG93IGxpbmsgc3RhdHVzIG9mIHRoZSBib25kIGludGVyZmFjZS4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X21paV9zdGF0dXMoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2xhdmUgKmN1cnI7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGNkKTsKKworCXJlYWRfbG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwljdXJyID0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmU7CisJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGN1cnIpID8gInVwIiA6ICJkb3duIikgKyAxOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG1paV9zdGF0dXMsIFNfSVJVR08sIGJvbmRpbmdfc2hvd19taWlfc3RhdHVzLCBOVUxMKTsKKworCisvKgorICogU2hvdyBjdXJyZW50IDgwMi4zYWQgYWdncmVnYXRvciBJRC4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X2FkX2FnZ3JlZ2F0b3Ioc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgY291bnQgPSAwOworCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChjZCk7CisKKwlpZiAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFXzgwMjNBRCkgeworCQlzdHJ1Y3QgYWRfaW5mbyBhZF9pbmZvOworCQljb3VudCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIChib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvKGJvbmQsICZhZF9pbmZvKSkgPyAgMCA6IGFkX2luZm8uYWdncmVnYXRvcl9pZCkgKyAxOworCX0KKwllbHNlCisJCWNvdW50ID0gc3ByaW50ZihidWYsICJcbiIpICsgMTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihhZF9hZ2dyZWdhdG9yLCBTX0lSVUdPLCBib25kaW5nX3Nob3dfYWRfYWdncmVnYXRvciwgTlVMTCk7CisKKworLyoKKyAqIFNob3cgbnVtYmVyIG9mIGFjdGl2ZSA4MDIuM2FkIHBvcnRzLgorICovCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfYWRfbnVtX3BvcnRzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpIHsKKwkJc3RydWN0IGFkX2luZm8gYWRfaW5mbzsKKwkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhib25kLCAmYWRfaW5mbykpID8gIDA6IGFkX2luZm8ucG9ydHMpICsgMTsKKwl9CisJZWxzZQorCQljb3VudCA9IHNwcmludGYoYnVmLCAiXG4iKSArIDE7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYWRfbnVtX3BvcnRzLCBTX0lSVUdPLCBib25kaW5nX3Nob3dfYWRfbnVtX3BvcnRzLCBOVUxMKTsKKworCisvKgorICogU2hvdyBjdXJyZW50IDgwMi4zYWQgYWN0b3Iga2V5LgorICovCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfYWRfYWN0b3Jfa2V5KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpIHsKKwkJc3RydWN0IGFkX2luZm8gYWRfaW5mbzsKKwkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhib25kLCAmYWRfaW5mbykpID8gIDAgOiBhZF9pbmZvLmFjdG9yX2tleSkgKyAxOworCX0KKwllbHNlCisJCWNvdW50ID0gc3ByaW50ZihidWYsICJcbiIpICsgMTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihhZF9hY3Rvcl9rZXksIFNfSVJVR08sIGJvbmRpbmdfc2hvd19hZF9hY3Rvcl9rZXksIE5VTEwpOworCisKKy8qCisgKiBTaG93IGN1cnJlbnQgODAyLjNhZCBwYXJ0bmVyIGtleS4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X2FkX3BhcnRuZXJfa2V5KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpIHsKKwkJc3RydWN0IGFkX2luZm8gYWRfaW5mbzsKKwkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhib25kLCAmYWRfaW5mbykpID8gIDAgOiBhZF9pbmZvLnBhcnRuZXJfa2V5KSArIDE7CisJfQorCWVsc2UKKwkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIlxuIikgKyAxOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGFkX3BhcnRuZXJfa2V5LCBTX0lSVUdPLCBib25kaW5nX3Nob3dfYWRfcGFydG5lcl9rZXksIE5VTEwpOworCisKKy8qCisgKiBTaG93IGN1cnJlbnQgODAyLjNhZCBwYXJ0bmVyIG1hYy4KKyAqLworc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X2FkX3BhcnRuZXJfbWFjKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpIHsKKwkJc3RydWN0IGFkX2luZm8gYWRfaW5mbzsKKwkJaWYgKCFib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvKGJvbmQsICZhZF9pbmZvKSkgeworCQkJY291bnQgPSBzcHJpbnRmKGJ1ZiwiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJICAgICAgIGFkX2luZm8ucGFydG5lcl9zeXN0ZW1bMF0sCisJCQkJICAgICAgIGFkX2luZm8ucGFydG5lcl9zeXN0ZW1bMV0sCisJCQkJICAgICAgIGFkX2luZm8ucGFydG5lcl9zeXN0ZW1bMl0sCisJCQkJICAgICAgIGFkX2luZm8ucGFydG5lcl9zeXN0ZW1bM10sCisJCQkJICAgICAgIGFkX2luZm8ucGFydG5lcl9zeXN0ZW1bNF0sCisJCQkJICAgICAgIGFkX2luZm8ucGFydG5lcl9zeXN0ZW1bNV0pICsgMTsKKwkJfQorCX0KKwllbHNlCisJCWNvdW50ID0gc3ByaW50ZihidWYsICJcbiIpICsgMTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihhZF9wYXJ0bmVyX21hYywgU19JUlVHTywgYm9uZGluZ19zaG93X2FkX3BhcnRuZXJfbWFjLCBOVUxMKTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwZXJfYm9uZF9hdHRyc1tdID0geworCSZjbGFzc19kZXZpY2VfYXR0cl9zbGF2ZXMuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfbW9kZS5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9hcnBfaW50ZXJ2YWwuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYXJwX2lwX3RhcmdldC5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9kb3duZGVsYXkuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfdXBkZWxheS5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9sYWNwX3JhdGUuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfeG1pdF9oYXNoX3BvbGljeS5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9taWltb24uYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfcHJpbWFyeS5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl91c2VfY2Fycmllci5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9hY3RpdmVfc2xhdmUuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfbWlpX3N0YXR1cy5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9hZF9hZ2dyZWdhdG9yLmF0dHIsCisJJmNsYXNzX2RldmljZV9hdHRyX2FkX251bV9wb3J0cy5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9hZF9hY3Rvcl9rZXkuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYWRfcGFydG5lcl9rZXkuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYWRfcGFydG5lcl9tYWMuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYm9uZGluZ19ncm91cCA9IHsKKwkubmFtZSA9ICJib25kaW5nIiwKKwkuYXR0cnMgPSBwZXJfYm9uZF9hdHRycywKK307CisKKy8qCisgKiBJbml0aWFsaXplIHN5c2ZzLiAgVGhpcyBzZXRzIHVwIHRoZSBib25kaW5nX21hc3RlcnMgZmlsZSBpbgorICogL3N5cy9jbGFzcy9uZXQuCisgKi8KK2ludCBib25kX2NyZWF0ZV9zeXNmcyh2b2lkKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBib25kaW5nICpmaXJzdGJvbmQ7CisKKwlpbml0X3J3c2VtKCZib25kaW5nX3J3c2VtKTsKKworCS8qIGdldCB0aGUgbmV0ZGV2IGNsYXNzIHBvaW50ZXIgKi8KKwlmaXJzdGJvbmQgPSBjb250YWluZXJfb2YoYm9uZF9kZXZfbGlzdC5uZXh0LCBzdHJ1Y3QgYm9uZGluZywgYm9uZF9saXN0KTsKKwlpZiAoIWZpcnN0Ym9uZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwluZXRkZXZfY2xhc3MgPSBmaXJzdGJvbmQtPmRldi0+Y2xhc3NfZGV2LmNsYXNzOworCWlmICghbmV0ZGV2X2NsYXNzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGNsYXNzX2NyZWF0ZV9maWxlKG5ldGRldl9jbGFzcywgJmNsYXNzX2F0dHJfYm9uZGluZ19tYXN0ZXJzKTsKKworCXJldHVybiByZXQ7CisKK30KKworLyoKKyAqIFJlbW92ZSAvc3lzL2NsYXNzL25ldC9ib25kaW5nX21hc3RlcnMuCisgKi8KK3ZvaWQgYm9uZF9kZXN0cm95X3N5c2ZzKHZvaWQpCit7CisJaWYgKG5ldGRldl9jbGFzcykKKwkJY2xhc3NfcmVtb3ZlX2ZpbGUobmV0ZGV2X2NsYXNzLCAmY2xhc3NfYXR0cl9ib25kaW5nX21hc3RlcnMpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBzeXNmcyBmb3IgZWFjaCBib25kLiAgVGhpcyBzZXRzIHVwIGFuZCByZWdpc3RlcnMKKyAqIHRoZSAnYm9uZGN0bCcgZGlyZWN0b3J5IGZvciBlYWNoIGluZGl2aWR1YWwgYm9uZCB1bmRlciAvc3lzL2NsYXNzL25ldC4KKyAqLworaW50IGJvbmRfY3JlYXRlX3N5c2ZzX2VudHJ5KHN0cnVjdCBib25kaW5nICpib25kKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBib25kLT5kZXY7CisJaW50IGVycjsKKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmKGRldi0+Y2xhc3NfZGV2LmtvYmopLCAmYm9uZGluZ19ncm91cCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FTUVSRyAiZWVrISBkaWRuJ3QgY3JlYXRlIGdyb3VwIVxuIik7CisJfQorCisJaWYgKGV4cGVjdGVkX3JlZmNvdW50IDwgMSkKKwkJZXhwZWN0ZWRfcmVmY291bnQgPSBhdG9taWNfcmVhZCgmYm9uZC0+ZGV2LT5jbGFzc19kZXYua29iai5rcmVmLnJlZmNvdW50KTsKKworCXJldHVybiBlcnI7Cit9CisvKgorICogUmVtb3ZlIHN5c2ZzIGVudHJpZXMgZm9yIGVhY2ggYm9uZC4KKyAqLwordm9pZCBib25kX2Rlc3Ryb3lfc3lzZnNfZW50cnkoc3RydWN0IGJvbmRpbmcgKmJvbmQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJvbmQtPmRldjsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmKGRldi0+Y2xhc3NfZGV2LmtvYmopLCAmYm9uZGluZ19ncm91cCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggMTQzM2U5MS4uMDE1YzdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTEwLDI1ICsxMCw2IEBACiAgKglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCiAgKglvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCi0gKgotICogMjAwMy8wMy8xOCAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+LAotICoJCVRzaXBweSBNZW5kZWxzb24gPHRzaXBweS5tZW5kZWxzb24gYXQgaW50ZWwgZG90IGNvbT4gYW5kCi0gKgkJU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIEFkZGVkIHN1cHBvcnQgZm9yIElFRUUgODAyLjNhZCBEeW5hbWljIGxpbmsgYWdncmVnYXRpb24gbW9kZS4KLSAqCi0gKiAyMDAzLzA1LzAxIC0gVHNpcHB5IE1lbmRlbHNvbiA8dHNpcHB5Lm1lbmRlbHNvbiBhdCBpbnRlbCBkb3QgY29tPiBhbmQKLSAqCQlBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgotICoJLSBDb2RlIGJlYXV0aWZpY2F0aW9uIGFuZCBzdHlsZSBjaGFuZ2VzIChtYWlubHkgaW4gY29tbWVudHMpLgotICoKLSAqIDIwMDMvMDUvMDEgLSBTaG11bGlrIEhlbiA8c2htdWxpay5oZW4gYXQgaW50ZWwgZG90IGNvbT4KLSAqCS0gQWRkZWQgc3VwcG9ydCBmb3IgVHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgbW9kZS4KLSAqCi0gKiAyMDAzLzEyLzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+Ci0gKgktIENvZGUgY2xlYW51cCBhbmQgc3R5bGUgY2hhbmdlcwotICoKLSAqIDIwMDUvMDUvMDUgLSBKYXNvbiBHYWJsZXIgPGp5Z2FibGVyIGF0IGxibCBkb3QgZ292PgotICogICAgICAtIGFkZGVkICJ4bWl0X3BvbGljeSIga2VybmVsIHBhcmFtZXRlciBmb3IgYWx0ZXJuYXRlIGhhc2hpbmcgcG9saWN5Ci0gKgkgIHN1cHBvcnQgZm9yIG1vZGUgMgogICovCiAKICNpZm5kZWYgX0xJTlVYX0JPTkRJTkdfSApAQCAtMzcsMTEgKzE4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYm9uZGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlICJib25kXzNhZC5oIgogI2luY2x1ZGUgImJvbmRfYWxiLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuNi41IgotI2RlZmluZSBEUlZfUkVMREFURQkiTm92ZW1iZXIgNCwgMjAwNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjMuMC4wIgorI2RlZmluZSBEUlZfUkVMREFURQkiTm92ZW1iZXIgOCwgMjAwNSIKICNkZWZpbmUgRFJWX05BTUUJImJvbmRpbmciCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiRXRoZXJuZXQgQ2hhbm5lbCBCb25kaW5nIERyaXZlciIKIApAQCAtMTUyLDYgKzEzNCwxMSBAQAogCXUzMiBhcnBfdGFyZ2V0c1tCT05EX01BWF9BUlBfVEFSR0VUU107CiB9OwogCitzdHJ1Y3QgYm9uZF9wYXJtX3RibCB7CisJY2hhciAqbW9kZW5hbWU7CisJaW50IG1vZGU7Cit9OworCiBzdHJ1Y3Qgdmxhbl9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCB2bGFuX2xpc3Q7CiAJdTMyIHZsYW5faXA7CkBAIC0xNTksNyArMTQ2LDcgQEAKIH07CiAKIHN0cnVjdCBzbGF2ZSB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgLyogZmlyc3QgLSB1c2VmdWxsIGZvciBwYW5pYyBkZWJ1ZyAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqLwogCXN0cnVjdCBzbGF2ZSAqbmV4dDsKIAlzdHJ1Y3Qgc2xhdmUgKnByZXY7CiAJczE2ICAgIGRlbGF5OwpAQCAtMTg1LDcgKzE3Miw3IEBACiAgKiAgICBiZWZvcmVoYW5kLgogICovCiBzdHJ1Y3QgYm9uZGluZyB7Ci0Jc3RydWN0ICAgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bGwgZm9yIHBhbmljIGRlYnVnICovCisJc3RydWN0ICAgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bCBmb3IgcGFuaWMgZGVidWcgKi8KIAlzdHJ1Y3QgICBzbGF2ZSAqZmlyc3Rfc2xhdmU7CiAJc3RydWN0ICAgc2xhdmUgKmN1cnJfYWN0aXZlX3NsYXZlOwogCXN0cnVjdCAgIHNsYXZlICpjdXJyZW50X2FycF9zbGF2ZTsKQEAgLTI1NSw2ICsyNDIsMjUgQEAKIAogc3RydWN0IHZsYW5fZW50cnkgKmJvbmRfbmV4dF92bGFuKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgdmxhbl9lbnRyeSAqY3Vycik7CiBpbnQgYm9uZF9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2Rldik7CitpbnQgYm9uZF9jcmVhdGUoY2hhciAqbmFtZSwgc3RydWN0IGJvbmRfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBib25kaW5nICoqbmV3Ym9uZCk7Cit2b2lkIGJvbmRfZGVpbml0KHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7CitpbnQgYm9uZF9jcmVhdGVfc3lzZnModm9pZCk7Cit2b2lkIGJvbmRfZGVzdHJveV9zeXNmcyh2b2lkKTsKK3ZvaWQgYm9uZF9kZXN0cm95X3N5c2ZzX2VudHJ5KHN0cnVjdCBib25kaW5nICpib25kKTsKK2ludCBib25kX2NyZWF0ZV9zeXNmc19lbnRyeShzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7CitpbnQgYm9uZF9jcmVhdGVfc2xhdmVfc3ltbGlua3Moc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlciwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlKTsKK3ZvaWQgYm9uZF9kZXN0cm95X3NsYXZlX3N5bWxpbmtzKHN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZSk7CitpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2Rldik7CitpbnQgYm9uZF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2Rldik7CitpbnQgYm9uZF9zZXRod2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KTsKK3ZvaWQgYm9uZF9taWlfbW9uaXRvcihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpOwordm9pZCBib25kX2xvYWRiYWxhbmNlX2FycF9tb24oc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTsKK3ZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpOwordm9pZCBib25kX3NldF9tb2RlX29wcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IG1vZGUpOworaW50IGJvbmRfcGFyc2VfcGFybShjaGFyICptb2RlX2FyZywgc3RydWN0IGJvbmRfcGFybV90YmwgKnRibCk7Citjb25zdCBjaGFyICpib25kX21vZGVfbmFtZShpbnQgbW9kZSk7Cit2b2lkIGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7Cit2b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKTsKIAogI2VuZGlmIC8qIF9MSU5VWF9CT05ESU5HX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKaW5kZXggNTNiNDFkOS4uMmM1Yjg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCkBAIC0xMzMyLDggKzEzMzIsOCBAQAogICoKICAqIFRoaXMgcnVucyB3aXRoIHNvZnRpcnFzIGRpc2FibGVkLgogICovCi11bnNpZ25lZCBpbnQgdDFfc2dlX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgdW5zaWduZWQgaW50IHFpZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdDFfc2dlX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkgICAgIHVuc2lnbmVkIGludCBxaWQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNnZSAqc2dlID0gYWRhcHRlci0+c2dlOwogCXN0cnVjdCBjbWRRICpxID0gJnNnZS0+Y21kUVtxaWRdOwpAQCAtMTM1Miw5ICsxMzUyLDEwIEBACiAJCQlzZXRfYml0KGRldi0+aWZfcG9ydCwgJnNnZS0+c3RvcHBlZF90eF9xdWV1ZXMpOwogCQkJc2dlLT5zdGF0cy5jbWRRX2Z1bGxbM10rKzsKIAkJCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKLQkJCUNIX0VSUigiJXM6IFR4IHJpbmcgZnVsbCB3aGlsZSBxdWV1ZSBhd2FrZSFcbiIsCi0JCQkgICAgICAgYWRhcHRlci0+bmFtZSk7Ci0JCQlyZXR1cm4gMTsKKwkJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQorCQkJCUNIX0VSUigiJXM6IFR4IHJpbmcgZnVsbCB3aGlsZSBxdWV1ZSBhd2FrZSFcbiIsCisJCQkJICAgICAgIGFkYXB0ZXItPm5hbWUpOworCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCQl9CiAJCWlmICh1bmxpa2VseShjcmVkaXRzIC0gY291bnQgPCBxLT5zdG9wX3RocmVzKSkgewogCQkJc2dlLT5zdGF0cy5jbWRRX2Z1bGxbM10rKzsKQEAgLTEzODksNyArMTM5MCw3IEBACiAJCQl3cml0ZWwoRl9DTURRMF9FTkFCTEUsIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX0RPT1JCRUxMKTsKIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAjZGVmaW5lIE1LX0VUSF9UWVBFX01TUyh0eXBlLCBtc3MpICgoKG1zcykgJiAweDNGRkYpIHwgKCh0eXBlKSA8PCAxNCkpCkBAIC0xNDQ5LDcgKzE0NTAsNyBAQAogCQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBFVEhfSExFTiB8fAogCQkJICAgICBza2ItPmxlbiA+IGRldi0+bXR1ICsgZXRoX2hkcl9sZW4oc2tiLT5kYXRhKSkpIHsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAogCQkvKgpAQCAtMTQ2Nyw3ICsxNDY4LDcgQEAKIAkJCXNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgc2l6ZW9mKCpjcGwpKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KG9yaWdfc2tiKTsKIAkJCWlmICghc2tiKQotCQkJCXJldHVybiAtRU5PTUVNOworCQkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAogCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIFVEUF9DU1VNX0NBUEFCTEUpICYmCkBAIC0xNDc1LDcgKzE0NzYsNyBAQAogCQkgICAgc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKQogCQkJaWYgKHVubGlrZWx5KHNrYl9jaGVja3N1bV9oZWxwKHNrYiwgMCkpKSB7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJfQogCiAJCS8qIEhtbW0sIGFzc3VtaW5nIHRvIGNhdGNoIHRoZSBncmF0aW91cyBhcnAuLi4gYW5kIHdlJ2xsIHVzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmgKaW5kZXggNDM0YjI1NS4uNmQwZDI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5oCkBAIC04OSw4ICs4OSw2IEBACiBpbnQgdDFfc2dlX3NldF9jb2FsZXNjZV9wYXJhbXMoc3RydWN0IHNnZSAqLCBzdHJ1Y3Qgc2dlX3BhcmFtcyAqKTsKIHZvaWQgdDFfc2dlX2Rlc3Ryb3koc3RydWN0IHNnZSAqKTsKIGludHJfaGFuZGxlcl90IHQxX3NlbGVjdF9pbnRyX2hhbmRsZXIoYWRhcHRlcl90ICphZGFwdGVyKTsKLXVuc2lnbmVkIGludCB0MV9zZ2VfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgcWlkLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIGludCB0MV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCB0MV9zZXRfdmxhbl9hY2NlbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IG9uX29mZik7CiB2b2lkIHQxX3NnZV9zdGFydChzdHJ1Y3Qgc2dlICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggM2Y2NTNhOS4uZTAyZTliYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0xODgsMTEgKzE4OCwxMyBAQAogCS8qIGFycmF5IG9mIGJ1ZmZlciBpbmZvcm1hdGlvbiBzdHJ1Y3RzICovCiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CiAKLQlzdHJ1Y3QgZTEwMDBfYnVmZmVyIHByZXZpb3VzX2J1ZmZlcl9pbmZvOwogCXNwaW5sb2NrX3QgdHhfbG9jazsKIAl1aW50MTZfdCB0ZGg7CiAJdWludDE2X3QgdGR0OwogCXVpbnQ2NF90IHBrdDsKKworCWJvb2xlYW5fdCBsYXN0X3R4X3RzbzsKKwogfTsKIAogc3RydWN0IGUxMDAwX3J4X3JpbmcgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IDhlYWU4YmEuLmM4OGYxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTU2MiwxMCArNTYyLDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWNoYXIgZmlybXdhcmVfdmVyc2lvblszMl07CisJdWludDE2X3QgZWVwcm9tX2RhdGE7CiAKIAlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgIGUxMDAwX2RyaXZlcl9uYW1lLCAzMik7CiAJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBlMTAwMF9kcml2ZXJfdmVyc2lvbiwgMzIpOwotCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIk4vQSIsIDMyKTsKKwkKKwkvKiBFRVBST00gaW1hZ2UgdmVyc2lvbiAjIGlzIHJlcG9ydGVkIGFzIGZpcndhcmUgdmVyc2lvbiAjIGZvcgorCSAqIDgyNTd7MXwyfDN9IGNvbnRyb2xsZXJzICovCisJZTEwMDBfcmVhZF9lZXByb20oJmFkYXB0ZXItPmh3LCA1LCAxLCAmZWVwcm9tX2RhdGEpOworCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTcxOgorCWNhc2UgZTEwMDBfODI1NzI6CisJY2FzZSBlMTAwMF84MjU3MzoKKwkJc3ByaW50ZihmaXJtd2FyZV92ZXJzaW9uLCAiJWQuJWQtJWQiLCAKKwkJCShlZXByb21fZGF0YSAmIDB4RjAwMCkgPj4gMTIsCisJCQkoZWVwcm9tX2RhdGEgJiAweDBGRjApID4+IDQsCisJCQllZXByb21fZGF0YSAmIDB4MDAwRik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwcmludGYoZmlybXdhcmVfdmVyc2lvbiwgIm4vYSIpOworCX0KKworCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgZmlybXdhcmVfdmVyc2lvbiwgMzIpOwogCXN0cm5jcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLCAzMik7CiAJZHJ2aW5mby0+bl9zdGF0cyA9IEUxMDAwX1NUQVRTX0xFTjsKIAlkcnZpbmZvLT50ZXN0aW5mb19sZW4gPSBFMTAwMF9URVNUX0xFTjsKQEAgLTk2MCwxMyArOTc5LDIxIEBACiAJCX0KIAl9CiAKLQlpZih0eGRyLT5kZXNjKQorCWlmKHR4ZHItPmRlc2MpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCB0eGRyLT5zaXplLCB0eGRyLT5kZXNjLCB0eGRyLT5kbWEpOwotCWlmKHJ4ZHItPmRlc2MpCisJCXR4ZHItPmRlc2MgPSBOVUxMOworCX0KKwlpZihyeGRyLT5kZXNjKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgcnhkci0+c2l6ZSwgcnhkci0+ZGVzYywgcnhkci0+ZG1hKTsKKwkJcnhkci0+ZGVzYyA9IE5VTEw7CisJfQogCiAJa2ZyZWUodHhkci0+YnVmZmVyX2luZm8pOworCXR4ZHItPmJ1ZmZlcl9pbmZvID0gTlVMTDsKKwogCWtmcmVlKHJ4ZHItPmJ1ZmZlcl9pbmZvKTsKKwlyeGRyLT5idWZmZXJfaW5mbyA9IE5VTEw7CisKIAlyZXR1cm47CiB9CiAKQEAgLTEzMDEsMjEgKzEzMjgsMzIgQEAKIGUxMDAwX3NldHVwX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdWludDMyX3QgcmN0bDsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0JaWYoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8Ci0JICAgYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewotCQlpZihhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NSB8fAotCQkgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NiB8fAotCQkgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NV9yZXZfMyB8fAotCQkgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Nl9yZXZfMykKKwlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAorCSAgIGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CisJCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CisJCWNhc2UgZTEwMDBfODI1NDU6CisJCWNhc2UgZTEwMDBfODI1NDY6CisJCWNhc2UgZTEwMDBfODI1NDVfcmV2XzM6CisJCWNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CiAJCQlyZXR1cm4gZTEwMDBfc2V0X3BoeV9sb29wYmFjayhhZGFwdGVyKTsKLQkJZWxzZSB7Ci0JCQlyY3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMKTsKKwkJCWJyZWFrOworCQljYXNlIGUxMDAwXzgyNTcxOgorCQljYXNlIGUxMDAwXzgyNTcyOgorI2RlZmluZSBFMTAwMF9TRVJERVNfTEJfT04gMHg0MTAKKwkJCWUxMDAwX3NldF9waHlfbG9vcGJhY2soYWRhcHRlcik7CisJCQlFMTAwMF9XUklURV9SRUcoaHcsIFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PTik7CisJCQltc2VjX2RlbGF5KDEwKTsKKwkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOwogCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX0xCTV9UQ1ZSOwotCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CisJCQlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQl9IGVsc2UgaWYoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKKwl9IGVsc2UgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQogCQlyZXR1cm4gZTEwMDBfc2V0X3BoeV9sb29wYmFjayhhZGFwdGVyKTsKIAogCXJldHVybiA3OwpAQCAtMTMyNiwyNSArMTM2NCwzNiBAQAogewogCXVpbnQzMl90IHJjdGw7CiAJdWludDE2X3QgcGh5X3JlZzsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJcmN0bCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkNUTCk7CiAJcmN0bCAmPSB+KEUxMDAwX1JDVExfTEJNX1RDVlIgfCBFMTAwMF9SQ1RMX0xCTV9NQUMpOwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJDVEwsIHJjdGwpOwogCi0JaWYoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlciB8fAotCSAgICgoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8Ci0JICAgICBhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJgotCSAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDUgfHwKLQkgICAgIGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTQ2IHx8Ci0JICAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NV9yZXZfMyB8fAotCSAgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDZfcmV2XzMpKSkgewotCQlhZGFwdGVyLT5ody5hdXRvbmVnID0gVFJVRTsKLQkJZTEwMDBfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsICZwaHlfcmVnKTsKLQkJaWYocGh5X3JlZyAmIE1JSV9DUl9MT09QQkFDSykgewotCQkJcGh5X3JlZyAmPSB+TUlJX0NSX0xPT1BCQUNLOwotCQkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLCBwaHlfcmVnKTsKLQkJCWUxMDAwX3BoeV9yZXNldCgmYWRhcHRlci0+aHcpOworCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MToKKwljYXNlIGUxMDAwXzgyNTcyOgorCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAorCQkgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcyl7CisjZGVmaW5lIEUxMDAwX1NFUkRFU19MQl9PRkYgMHg0MDAKKwkJCUUxMDAwX1dSSVRFX1JFRyhodywgU0NUTCwgRTEwMDBfU0VSREVTX0xCX09GRik7CisJCQltc2VjX2RlbGF5KDEwKTsKKwkJCWJyZWFrOwogCQl9CisJCS8qIGZhbGwgdGhydSBmb3IgQ3UgYWRhcHRlcnMgKi8KKwljYXNlIGUxMDAwXzgyNTQ1OgorCWNhc2UgZTEwMDBfODI1NDY6CisJY2FzZSBlMTAwMF84MjU0NV9yZXZfMzoKKwljYXNlIGUxMDAwXzgyNTQ2X3Jldl8zOgorCWRlZmF1bHQ6CisJCWh3LT5hdXRvbmVnID0gVFJVRTsKKwkJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgJnBoeV9yZWcpOworCQlpZiAocGh5X3JlZyAmIE1JSV9DUl9MT09QQkFDSykgeworCQkJcGh5X3JlZyAmPSB+TUlJX0NSX0xPT1BCQUNLOworCQkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZX0NUUkwsIHBoeV9yZWcpOworCQkJZTEwMDBfcGh5X3Jlc2V0KGh3KTsKKwkJfQorCQlicmVhazsKIAl9CiB9CiAKQEAgLTE0NDAsOSArMTQ4OSwxMSBAQAogZTEwMDBfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdWludDY0X3QgKmRhdGEpCiB7CiAJaWYoKCpkYXRhID0gZTEwMDBfc2V0dXBfZGVzY19yaW5ncyhhZGFwdGVyKSkpIGdvdG8gZXJyX2xvb3BiYWNrOwotCWlmKCgqZGF0YSA9IGUxMDAwX3NldHVwX2xvb3BiYWNrX3Rlc3QoYWRhcHRlcikpKSBnb3RvIGVycl9sb29wYmFjazsKKwlpZigoKmRhdGEgPSBlMTAwMF9zZXR1cF9sb29wYmFja190ZXN0KGFkYXB0ZXIpKSkKKwkJZ290byBlcnJfbG9vcGJhY2tfc2V0dXA7CiAJKmRhdGEgPSBlMTAwMF9ydW5fbG9vcGJhY2tfdGVzdChhZGFwdGVyKTsKIAllMTAwMF9sb29wYmFja19jbGVhbnVwKGFkYXB0ZXIpOworZXJyX2xvb3BiYWNrX3NldHVwOgogCWUxMDAwX2ZyZWVfZGVzY19yaW5ncyhhZGFwdGVyKTsKIGVycl9sb29wYmFjazoKIAlyZXR1cm4gKmRhdGE7CkBAIC0xNjcxLDYgKzE3MjIsMTQgQEAKIAkJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwogCQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+YmxpbmtfdGltZXIpOwogCX0KKwllbHNlIGlmKGFkYXB0ZXItPmh3Lm1hY190eXBlIDwgZTEwMDBfODI1NzMpIHsKKwkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgTEVEQ1RMLCAoRTEwMDBfTEVEQ1RMX0xFRDJfQkxJTktfUkFURSB8CisJCQlFMTAwMF9MRURDVExfTEVEMF9CTElOSyB8IEUxMDAwX0xFRENUTF9MRUQyX0JMSU5LIHwKKwkJCShFMTAwMF9MRURDVExfTU9ERV9MRURfT04gPDwgRTEwMDBfTEVEQ1RMX0xFRDJfTU9ERV9TSElGVCkgfAorCQkJKEUxMDAwX0xFRENUTF9NT0RFX0xJTktfQUNUSVZJVFkgPDwgRTEwMDBfTEVEQ1RMX0xFRDBfTU9ERV9TSElGVCkgfAorCQkJKEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PRkYgPDwgRTEwMDBfTEVEQ1RMX0xFRDFfTU9ERV9TSElGVCkpKTsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOworCX0KIAllbHNlIHsKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgTEVEQ1RMLCAoRTEwMDBfTEVEQ1RMX0xFRDJfQkxJTktfUkFURSB8CiAJCQlFMTAwMF9MRURDVExfTEVEMV9CTElOSyB8IEUxMDAwX0xFRENUTF9MRUQyX0JMSU5LIHwgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwppbmRleCBhMjY3YzUyLi4xMzZmYzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKQEAgLTU2MywxMSArNTYzLDEzIEBACiAgICAgICAgICAgICBtc2VjX2RlbGF5KDIwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGUxMDAwXzgyNTczOgotICAgICAgICAgICAgdWRlbGF5KDEwKTsKLSAgICAgICAgICAgIGN0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkxfRVhUKTsKLSAgICAgICAgICAgIGN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX0VFX1JTVDsKLSAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIGN0cmxfZXh0KTsKLSAgICAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKyAgICAgICAgICAgIGlmIChlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oaHcpID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgdWRlbGF5KDEwKTsKKyAgICAgICAgICAgICAgICBjdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMX0VYVCk7CisgICAgICAgICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfRUVfUlNUOworICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKyAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICAgICAgY2FzZSBlMTAwMF84MjU3MjoKQEAgLTg0NCwxOSArODQ2LDI3IEBACiAgICAgICogY29udHJvbCBzZXR0aW5nLCB0aGVuIHRoZSB2YXJpYWJsZSBody0+ZmMgd2lsbAogICAgICAqIGJlIGluaXRpYWxpemVkIGJhc2VkIG9uIGEgdmFsdWUgaW4gdGhlIEVFUFJPTS4KICAgICAgKi8KLSAgICBpZihlMTAwMF9yZWFkX2VlcHJvbShodywgRUVQUk9NX0lOSVRfQ09OVFJPTDJfUkVHLCAxLCAmZWVwcm9tX2RhdGEpKSB7Ci0gICAgICAgIERFQlVHT1VUKCJFRVBST00gUmVhZCBFcnJvclxuIik7Ci0gICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKLSAgICB9Ci0KLSAgICBpZihody0+ZmMgPT0gZTEwMDBfZmNfZGVmYXVsdCkgewotICAgICAgICBpZigoZWVwcm9tX2RhdGEgJiBFRVBST01fV09SRDBGX1BBVVNFX01BU0spID09IDApCi0gICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY19ub25lOwotICAgICAgICBlbHNlIGlmKChlZXByb21fZGF0YSAmIEVFUFJPTV9XT1JEMEZfUEFVU0VfTUFTSykgPT0KLSAgICAgICAgICAgICAgICBFRVBST01fV09SRDBGX0FTTV9ESVIpCi0gICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY190eF9wYXVzZTsKLSAgICAgICAgZWxzZQorICAgIGlmIChody0+ZmMgPT0gZTEwMDBfZmNfZGVmYXVsdCkgeworICAgICAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgeworICAgICAgICBjYXNlIGUxMDAwXzgyNTczOgogICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfZnVsbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfZWVwcm9tKGh3LCBFRVBST01fSU5JVF9DT05UUk9MMl9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmVlcHJvbV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKSB7CisgICAgICAgICAgICAgICAgREVCVUdPVVQoIkVFUFJPTSBSZWFkIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGVlcHJvbV9kYXRhICYgRUVQUk9NX1dPUkQwRl9QQVVTRV9NQVNLKSA9PSAwKQorICAgICAgICAgICAgICAgIGh3LT5mYyA9IGUxMDAwX2ZjX25vbmU7CisgICAgICAgICAgICBlbHNlIGlmICgoZWVwcm9tX2RhdGEgJiBFRVBST01fV09SRDBGX1BBVVNFX01BU0spID09CisgICAgICAgICAgICAgICAgICAgIEVFUFJPTV9XT1JEMEZfQVNNX0RJUikKKyAgICAgICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY190eF9wYXVzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY19mdWxsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0CkBAIC0yOTYyLDEzICsyOTcyLDIyIEBACiAgICAgaWYoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDMpIHsKICAgICAgICAgLyogUmVhZCB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGFzc2VydCB0aGUgRTEwMDBfQ1RSTF9QSFlfUlNUCiAgICAgICAgICAqIGJpdC4gVGhlbiwgdGFrZSBpdCBvdXQgb2YgcmVzZXQuCisgICAgICAgICAqIEZvciBwcmUtZTEwMDBfODI1NzEgaGFyZHdhcmUsIHdlIGRlbGF5IGZvciAxMG1zIGJldHdlZW4gdGhlIGFzc2VydCAKKyAgICAgICAgICogYW5kIGRlYXNzZXJ0LiAgRm9yIGUxMDAwXzgyNTcxIGhhcmR3YXJlIGFuZCBsYXRlciwgd2UgaW5zdGVhZCBkZWxheQorICAgICAgICAgKiBmb3IgMTBtcyBhZnRlciB0aGUgZGVhc3NlcnRpb24uCiAgICAgICAgICAqLwogICAgICAgICBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwgfCBFMTAwMF9DVFJMX1BIWV9SU1QpOwogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7Ci0gICAgICAgIG1zZWNfZGVsYXkoMTApOworICAgICAgICAKKyAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxKSAKKyAgICAgICAgICAgIG1zZWNfZGVsYXkoMTApOworICAgICAgICAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOworICAgICAgICAKKyAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkKKyAgICAgICAgICAgIG1zZWNfZGVsYXkoMTApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFJlYWQgdGhlIEV4dGVuZGVkIERldmljZSBDb250cm9sIFJlZ2lzdGVyLCBhc3NlcnQgdGhlIFBIWV9SRVNFVF9ESVIKICAgICAgICAgICogYml0IHRvIHB1dCB0aGUgUEhZIGludG8gcmVzZXQuIFRoZW4sIHRha2UgaXQgb3V0IG9mIHJlc2V0LgpAQCAtNTI3OCwxMSArNTI5NywxNSBAQAogICAgICAgICBody0+YnVzX3NwZWVkID0gZTEwMDBfYnVzX3NwZWVkX3Vua25vd247CiAgICAgICAgIGh3LT5idXNfd2lkdGggPSBlMTAwMF9idXNfd2lkdGhfdW5rbm93bjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBlMTAwMF84MjU3MToKICAgICBjYXNlIGUxMDAwXzgyNTcyOgogICAgIGNhc2UgZTEwMDBfODI1NzM6CiAgICAgICAgIGh3LT5idXNfdHlwZSA9IGUxMDAwX2J1c190eXBlX3BjaV9leHByZXNzOwogICAgICAgICBody0+YnVzX3NwZWVkID0gZTEwMDBfYnVzX3NwZWVkXzI1MDA7CisgICAgICAgIGh3LT5idXNfd2lkdGggPSBlMTAwMF9idXNfd2lkdGhfcGNpZXhfMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBlMTAwMF84MjU3MToKKyAgICAgICAgaHctPmJ1c190eXBlID0gZTEwMDBfYnVzX3R5cGVfcGNpX2V4cHJlc3M7CisgICAgICAgIGh3LT5idXNfc3BlZWQgPSBlMTAwMF9idXNfc3BlZWRfMjUwMDsKICAgICAgICAgaHctPmJ1c193aWR0aCA9IGUxMDAwX2J1c193aWR0aF9wY2lleF80OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNjY1MCw2ICs2NjczLDEyIEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIC8qIFBIWSBjb25maWd1cmF0aW9uIGZyb20gTlZNIGp1c3Qgc3RhcnRzIGFmdGVyIEVFQ0RfQVVUT19SRCBzZXRzIHRvIGhpZ2guCisgICAgICogTmVlZCB0byB3YWl0IGZvciBQSFkgY29uZmlndXJhdGlvbiBjb21wbGV0aW9uIGJlZm9yZSBhY2Nlc3NpbmcgTlZNCisgICAgICogYW5kIFBIWS4gKi8KKyAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczKQorICAgICAgICBtc2VjX2RlbGF5KDI1KTsKKwogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAppbmRleCA3NmNlMTI4Li43Y2FhMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogICAgIGUxMDAwX2J1c193aWR0aF8zMiwKICAgICBlMTAwMF9idXNfd2lkdGhfNjQsCiAgICAgZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzEsCisgICAgZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzIsCiAgICAgZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzQsCiAgICAgZTEwMDBfYnVzX3dpZHRoX3Jlc2VydmVkCiB9IGUxMDAwX2J1c193aWR0aDsKQEAgLTE0OSw2ICsxNTAsNyBAQAogICAgIGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfOTAgID0gOTAsCiAgICAgZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xMDAgPSAxMDAsCiAgICAgZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xMTAgPSAxMTAsCisgICAgZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xMTUgPSAxMTUsCiAgICAgZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xMjAgPSAxMjAsCiAgICAgZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xMzAgPSAxMzAsCiAgICAgZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xNDAgPSAxNDAsCkBAIC0xNDU3LDYgKzE0NTksNyBAQAogI2RlZmluZSBFMTAwMF9FRUNEX0FVUERFTiAgICAweDAwMTAwMDAwIC8qIEVuYWJsZSBBdXRvbm9tb3VzIEZMQVNIIHVwZGF0ZSAqLwogI2RlZmluZSBFMTAwMF9FRUNEX1NIQURWICAgICAweDAwMjAwMDAwIC8qIFNoYWRvdyBSQU0gRGF0YSBWYWxpZCAqLwogI2RlZmluZSBFMTAwMF9FRUNEX1NFQzFWQUwgICAweDAwNDAwMDAwIC8qIFNlY3RvciBPbmUgVmFsaWQgKi8KKyNkZWZpbmUgRTEwMDBfRUVDRF9TRUNWQUxfU0hJRlQgICAgICAyMgogI2RlZmluZSBFMTAwMF9TVE1fT1BDT0RFICAgICAweERCMDAKICNkZWZpbmUgRTEwMDBfSElDUl9GV19SRVNFVCAgMHhDMAogCkBAIC0xOTUxLDcgKzE5NTQsNiBAQAogCiAjZGVmaW5lIEUxMDAwX01EQUxJR04gICAgICAgICAgNDA5NgogCi0jZGVmaW5lIEUxMDAwX0dDUl9CRU0zMiAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAogI2RlZmluZSBFMTAwMF9HQ1JfTDFfQUNUX1dJVEhPVVRfTDBTX1JYIDB4MDgwMDAwMDAKIC8qIEZ1bmN0aW9uIEFjdGl2ZSBhbmQgUG93ZXIgU3RhdGUgdG8gTU5HICovCiAjZGVmaW5lIEUxMDAwX0ZBQ1RQU19GVU5DMF9QT1dFUl9TVEFURV9NQVNLICAgICAgICAgMHgwMDAwMDAwMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IGUwYWUyNDguLjQzOGE5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTcxMSw2ICs3MTEsNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTQ2OgogCWNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CisJY2FzZSBlMTAwMF84MjU3MToKIAkJaWYoKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCiAJCSAgICYmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSkgewogCQkJZTEwMDBfcmVhZF9lZXByb20oJmFkYXB0ZXItPmh3LApAQCAtMTE1OCw3ICsxMTU5LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldCh0eGRyLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7Ci0JbWVtc2V0KCZ0eGRyLT5wcmV2aW91c19idWZmZXJfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpKTsKIAogCS8qIHJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KIApAQCAtMTgxMywxMSArMTgxMyw2IEBACiAKIAkvKiBGcmVlIGFsbCB0aGUgVHggcmluZyBza19idWZmcyAqLwogCi0JaWYgKGxpa2VseSh0eF9yaW5nLT5wcmV2aW91c19idWZmZXJfaW5mby5za2IgIT0gTlVMTCkpIHsKLQkJZTEwMDBfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwKLQkJCQkmdHhfcmluZy0+cHJldmlvdXNfYnVmZmVyX2luZm8pOwotCX0KLQogCWZvcihpID0gMDsgaSA8IHR4X3JpbmctPmNvdW50OyBpKyspIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCWUxMDAwX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIGJ1ZmZlcl9pbmZvKTsKQEAgLTE4MzIsNiArMTgyNyw3IEBACiAKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisJdHhfcmluZy0+bGFzdF90eF90c28gPSAwOwogCiAJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50ZGgpOwogCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGR0KTsKQEAgLTI0MzcsNiArMjQzMywxNiBAQAogCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKICNpZmRlZiBORVRJRl9GX1RTTworCQkvKiBXb3JrYXJvdW5kIGZvciBDb250cm9sbGVyIGVycmF0dW0gLS0KKwkJICogZGVzY3JpcHRvciBmb3Igbm9uLXRzbyBwYWNrZXQgaW4gYSBsaW5lYXIgU0tCIHRoYXQgZm9sbG93cyBhCisJCSAqIHRzbyBnZXRzIHdyaXR0ZW4gYmFjayBwcmVtYXR1cmVseSBiZWZvcmUgdGhlIGRhdGEgaXMgZnVsbHkKKwkJICogRE1BZCB0byB0aGUgY29udHJvbGxlciAqLworCQlpZiAoIXNrYi0+ZGF0YV9sZW4gJiYgdHhfcmluZy0+bGFzdF90eF90c28gJiYKKwkJCQkhc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkgeworCQkJdHhfcmluZy0+bGFzdF90eF90c28gPSAwOworCQkJc2l6ZSAtPSA0OworCQl9CisKIAkJLyogV29ya2Fyb3VuZCBmb3IgcHJlbWF0dXJlIGRlc2Mgd3JpdGUtYmFja3MKIAkJICogaW4gVFNPIG1vZGUuICBBcHBlbmQgNC1ieXRlIHNlbnRpbmVsIGRlc2MgKi8KIAkJaWYodW5saWtlbHkobXNzICYmICFucl9mcmFncyAmJiBzaXplID09IGxlbiAmJiBzaXplID4gOCkpCkBAIC0yNjkzLDYgKzI2OTksMTQgQEAKIAlpZihza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKIAkJY291bnQrKzsKICNlbmRpZgorCisjaWZkZWYgTkVUSUZfRl9UU08KKwkvKiBDb250cm9sbGVyIEVycmF0dW0gd29ya2Fyb3VuZCAqLworCWlmICghc2tiLT5kYXRhX2xlbiAmJiB0eF9yaW5nLT5sYXN0X3R4X3RzbyAmJgorCQkhc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkKKwkJY291bnQrKzsKKyNlbmRpZgorCiAJY291bnQgKz0gVFhEX1VTRV9DT1VOVChsZW4sIG1heF90eGRfcHdyKTsKIAogCWlmKGFkYXB0ZXItPnBjaXhfODI1NDQpCkBAIC0yNzc0LDkgKzI3ODgsMTAgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQlpZiAobGlrZWx5KHRzbykpCisJaWYgKGxpa2VseSh0c28pKSB7CisJCXR4X3JpbmctPmxhc3RfdHhfdHNvID0gMTsKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfVFNPOwotCWVsc2UgaWYgKGxpa2VseShlMTAwMF90eF9jc3VtKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYikpKQorCX0gZWxzZSBpZiAobGlrZWx5KGUxMDAwX3R4X2NzdW0oYWRhcHRlciwgdHhfcmluZywgc2tiKSkpCiAJCXR4X2ZsYWdzIHw9IEUxMDAwX1RYX0ZMQUdTX0NTVU07CiAKIAkvKiBPbGQgbWV0aG9kIHdhcyB0byBhc3N1bWUgSVB2NCBwYWNrZXQgYnkgZGVmYXVsdCBpZiBUU08gd2FzIGVuYWJsZWQuCkBAIC0zMjI3LDM3ICszMjQyLDEyIEBACiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCiAJd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCS8qIFByZW1hdHVyZSB3cml0ZWJhY2sgb2YgVHggZGVzY3JpcHRvcnMgY2xlYXIgKGZyZWUgYnVmZmVycwotCQkgKiBhbmQgdW5tYXAgcGNpX21hcHBpbmcpIHByZXZpb3VzX2J1ZmZlcl9pbmZvICovCi0JCWlmIChsaWtlbHkodHhfcmluZy0+cHJldmlvdXNfYnVmZmVyX2luZm8uc2tiICE9IE5VTEwpKSB7Ci0JCQllMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLAotCQkJCQkmdHhfcmluZy0+cHJldmlvdXNfYnVmZmVyX2luZm8pOwotCQl9Ci0KIAkJZm9yKGNsZWFuZWQgPSBGQUxTRTsgIWNsZWFuZWQ7ICkgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKIAotI2lmZGVmIE5FVElGX0ZfVFNPCi0JCQlpZiAoIShuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pKSB7Ci0jZW5kaWYKLQkJCQllMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pbmZvKTsKLSNpZmRlZiBORVRJRl9GX1RTTwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoY2xlYW5lZCkgewotCQkJCQltZW1jcHkoJnR4X3JpbmctPnByZXZpb3VzX2J1ZmZlcl9pbmZvLAotCQkJCQkgICAgICAgYnVmZmVyX2luZm8sCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGUxMDAwX2J1ZmZlcikpOwotCQkJCQltZW1zZXQoYnVmZmVyX2luZm8sIDAsCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGUxMDAwX2J1ZmZlcikpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWUxMDAwX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKAotCQkJCQkgICAgYWRhcHRlciwgYnVmZmVyX2luZm8pOwotCQkJCX0KLQkJCX0KLSNlbmRpZgorCQkJZTEwMDBfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgYnVmZmVyX2luZm8pOwogCiAJCQl0eF9kZXNjLT5idWZmZXJfYWRkciA9IDA7CiAJCQl0eF9kZXNjLT5sb3dlci5kYXRhID0gMDsKQEAgLTMzMTgsMTIgKzMzMDgsNiBAQAogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQl9CiAJfQotI2lmZGVmIE5FVElGX0ZfVFNPCi0JaWYgKHVubGlrZWx5KCEoZW9wX2Rlc2MtPnVwcGVyLmRhdGEgJiBjcHVfdG9fbGUzMihFMTAwMF9UWERfU1RBVF9ERCkpICYmCi0JICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+cHJldmlvdXNfYnVmZmVyX2luZm8udGltZV9zdGFtcCArIEhaKSkpCi0JCWUxMDAwX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKAotCQkgICAgYWRhcHRlciwgJnR4X3JpbmctPnByZXZpb3VzX2J1ZmZlcl9pbmZvKTsKLSNlbmRpZgogCXJldHVybiBjbGVhbmVkOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggMGYwMzBiNy4uMTQ2Zjk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMiw3ICsyLDggQEAKICAqIGRyaXZlcnMvbmV0L2dpYW5mYXIuYwogICoKICAqIEdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyCi0gKiBEcml2ZXIgZm9yIEZFQyBvbiBNUEM4NTQwIGFuZCBUU0VDIG9uIE1QQzg1NDAvTVBDODU2MAorICogVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHRoZSBub24tQ1BNIGV0aGVybmV0IGNvbnRyb2xsZXJzCisgKiBvbiB0aGUgODV4eCBhbmQgODN4eCBmYW1pbHkgb2YgaW50ZWdyYXRlZCBwcm9jZXNzb3JzCiAgKiBCYXNlZCBvbiA4MjYwX2lvL2ZjY19lbmV0LmMKICAqCiAgKiBBdXRob3I6IEFuZHkgRmxlbWluZwpAQCAtMjIsOCArMjMsNiBAQAogICogIEItViArMS42MgogICoKICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9uCi0gKiAgVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHRoZSBub24tQ1BNIGV0aGVybmV0IGNvbnRyb2xsZXJzCi0gKiAgb24gdGhlIDg1eHggYW5kIDgzeHggZmFtaWx5IG9mIGludGVncmF0ZWQgcHJvY2Vzc29ycwogICoKICAqICBUaGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIHRocm91Z2ggcGxhdGZvcm1fZGV2aWNlLiAgU3RydWN0dXJlcyB3aGljaAogICogIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBuZWVkZWQgYnkgdGhlIGJvYXJkIGFyZSBkZWZpbmVkIGluIGEKQEAgLTExMCw3ICsxMDksNyBAQAogI2VuZGlmCiAKIGNvbnN0IGNoYXIgZ2Zhcl9kcml2ZXJfbmFtZVtdID0gIkdpYW5mYXIgRXRoZXJuZXQiOwotY29uc3QgY2hhciBnZmFyX2RyaXZlcl92ZXJzaW9uW10gPSAiMS4yIjsKK2NvbnN0IGNoYXIgZ2Zhcl9kcml2ZXJfdmVyc2lvbltdID0gIjEuMyI7CiAKIHN0YXRpYyBpbnQgZ2Zhcl9lbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGdmYXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEzOSw2ICsxMzgsMTAgQEAKIHN0YXRpYyB2b2lkIGdmYXJfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgICAgICAgICAgICAgICAgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCk7CiBzdGF0aWMgdm9pZCBnZmFyX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKTsKK3ZvaWQgZ2Zhcl9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBnZmFyX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgZ2Zhcl9jbGVhcl9leGFjdF9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcik7CiAKIGV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2Zhcl9ldGh0b29sX29wczsKIApAQCAtMTQ2LDEyICsxNDksMTAgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotaW50IGdmYXJfdXNlc19mY2Ioc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKKy8qIFJldHVybnMgMSBpZiBpbmNvbWluZyBmcmFtZXMgdXNlIGFuIEZDQiAqLworc3RhdGljIGlubGluZSBpbnQgZ2Zhcl91c2VzX2ZjYihzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KQogewotCWlmIChwcml2LT52bGFuX2VuYWJsZSB8fCBwcml2LT5yeF9jc3VtX2VuYWJsZSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwlyZXR1cm4gKHByaXYtPnZsYW5fZW5hYmxlIHx8IHByaXYtPnJ4X2NzdW1fZW5hYmxlKTsKIH0KIAogLyogU2V0IHVwIHRoZSBldGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlLCBwcml2YXRlIGRhdGEsCkBAIC0zMjAsMTUgKzMyMSwxMCBAQAogCWVsc2UKIAkJcHJpdi0+cGFkZGluZyA9IDA7CiAKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbiArPSBwcml2LT5wYWRkaW5nOwotCiAJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pCiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuICs9IEdNQUNfRkNCX0xFTjsKIAogCXByaXYtPnJ4X2J1ZmZlcl9zaXplID0gREVGQVVMVF9SWF9CVUZGRVJfU0laRTsKLSNpZmRlZiBDT05GSUdfR0ZBUl9CVUZTVEFTSAotCXByaXYtPnJ4X3N0YXNoX3NpemUgPSBTVEFTSF9MRU5HVEg7Ci0jZW5kaWYKIAlwcml2LT50eF9yaW5nX3NpemUgPSBERUZBVUxUX1RYX1JJTkdfU0laRTsKIAlwcml2LT5yeF9yaW5nX3NpemUgPSBERUZBVUxUX1JYX1JJTkdfU0laRTsKIApAQCAtMzUwLDYgKzM0Niw5IEBACiAJCWdvdG8gcmVnaXN0ZXJfZmFpbDsKIAl9CiAKKwkvKiBDcmVhdGUgYWxsIHRoZSBzeXNmcyBmaWxlcyAqLworCWdmYXJfaW5pdF9zeXNmcyhkZXYpOworCiAJLyogUHJpbnQgb3V0IHRoZSBkZXZpY2UgaW5mbyAqLwogCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUsIGRldi0+bmFtZSk7CiAJZm9yIChpZHggPSAwOyBpZHggPCA2OyBpZHgrKykKQEAgLTM1Nyw4ICszNTYsNyBAQAogCXByaW50aygiXG4iKTsKIAogCS8qIEV2ZW4gbW9yZSBkZXZpY2UgaW5mbyBoZWxwcyB3aGVuIGRldGVybWluaW5nIHdoaWNoIGtlcm5lbCAqLwotCS8qIHByb3ZpZGVkIHdoaWNoIHNldCBvZiBiZW5jaG1hcmtzLiAgU2luY2UgdGhpcyBpcyBnbG9iYWwgZm9yIGFsbCAqLwotCS8qIGRldmljZXMsIHdlIG9ubHkgcHJpbnQgaXQgb25jZSAqLworCS8qIHByb3ZpZGVkIHdoaWNoIHNldCBvZiBiZW5jaG1hcmtzLiAqLwogI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAlwcmludGsoS0VSTl9JTkZPICIlczogUnVubmluZyB3aXRoIE5BUEkgZW5hYmxlZFxuIiwgZGV2LT5uYW1lKTsKICNlbHNlCkBAIC00NjMsMTkgKzQ2MSw5IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgbWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLwogCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPm1yYmxyLCBwcml2LT5yeF9idWZmZXJfc2l6ZSk7CiAKLSNpZmRlZiBDT05GSUdfR0ZBUl9CVUZTVEFTSAotCS8qIElmIHdlIGFyZSBzdGFzaGluZyBidWZmZXJzLCB3ZSBuZWVkIHRvIHNldCB0aGUKLQkgKiBleHRyYWN0aW9uIGxlbmd0aCB0byB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyICovCi0JZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+YXR0cmVsaSwgcHJpdi0+cnhfc3Rhc2hfc2l6ZSA8PCAxNik7Ci0jZW5kaWYKLQogCS8qIEluaXRpYWxpemUgdGhlIE1pbmltdW0gRnJhbWUgTGVuZ3RoIFJlZ2lzdGVyICovCiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+bWluZmxyLCBNSU5GTFJfSU5JVF9TRVRUSU5HUyk7CiAKLQkvKiBTZXR1cCBBdHRyaWJ1dGVzIHNvIHRoYXQgc25vb3BpbmcgaXMgb24gZm9yIHJ4ICovCi0JZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+YXR0ciwgQVRUUl9JTklUX1NFVFRJTkdTKTsKLQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5hdHRyZWxpLCBBVFRSRUxJX0lOSVRfU0VUVElOR1MpOwotCiAJLyogQXNzaWduIHRoZSBUQkkgYW4gYWRkcmVzcyB3aGljaCB3b24ndCBjb25mbGljdCB3aXRoIHRoZSBQSFlzICovCiAJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+dGJpcGEsIFRCSVBBX1ZBTFVFKTsKIH0KQEAgLTU3Nyw4ICs1NjUsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJCWlmIChwcml2LT5yeF9za2J1ZmZbaV0pIHsKIAkJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHJ4YmRwLT5idWZQdHIsCi0JCQkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZQotCQkJCQkJKyBSWEJVRl9BTElHTk1FTlQsCisJCQkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwKIAkJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShwcml2LT5yeF9za2J1ZmZbaV0pOwpAQCAtNjM2LDYgKzYyMyw3IEBACiAJc3RydWN0IGdmYXIgKnJlZ3MgPSBwcml2LT5yZWdzOwogCWludCBlcnIgPSAwOwogCXUzMiByY3RybCA9IDA7CisJdTMyIGF0dHJzID0gMDsKIAogCWdmYXJfd3JpdGUoJnJlZ3MtPmltYXNrLCBJTUFTS19JTklUX0NMRUFSKTsKIApAQCAtNzk1LDE4ICs3ODMsNTAgQEAKIAlpZiAocHJpdi0+cnhfY3N1bV9lbmFibGUpCiAJCXJjdHJsIHw9IFJDVFJMX0NIRUNLU1VNTUlORzsKIAotCWlmIChwcml2LT5leHRlbmRlZF9oYXNoKQorCWlmIChwcml2LT5leHRlbmRlZF9oYXNoKSB7CiAJCXJjdHJsIHw9IFJDVFJMX0VYVEhBU0g7CiAKKwkJZ2Zhcl9jbGVhcl9leGFjdF9tYXRjaChkZXYpOworCQlyY3RybCB8PSBSQ1RSTF9FTUVOOworCX0KKwogCWlmIChwcml2LT52bGFuX2VuYWJsZSkKIAkJcmN0cmwgfD0gUkNUUkxfVkxBTjsKIAorCWlmIChwcml2LT5wYWRkaW5nKSB7CisJCXJjdHJsICY9IH5SQ1RSTF9QQUxfTUFTSzsKKwkJcmN0cmwgfD0gUkNUUkxfUEFERElORyhwcml2LT5wYWRkaW5nKTsKKwl9CisKIAkvKiBJbml0IHJjdHJsIGJhc2VkIG9uIG91ciBzZXR0aW5ncyAqLwogCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJjdHJsLCByY3RybCk7CiAKIAlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkKIAkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+dGN0cmwsIFRDVFJMX0lOSVRfQ1NVTSk7CiAKKwkvKiBTZXQgdGhlIGV4dHJhY3Rpb24gbGVuZ3RoIGFuZCBpbmRleCAqLworCWF0dHJzID0gQVRUUkVMSV9FTChwcml2LT5yeF9zdGFzaF9zaXplKSB8CisJCUFUVFJFTElfRUkocHJpdi0+cnhfc3Rhc2hfaW5kZXgpOworCisJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+YXR0cmVsaSwgYXR0cnMpOworCisJLyogU3RhcnQgd2l0aCBkZWZhdWx0cywgYW5kIGFkZCBzdGFzaGluZyBvciBsb2NraW5nCisJICogZGVwZW5kaW5nIG9uIHRoZSBhcHByb3ByYXRlIHZhcmlhYmxlcyAqLworCWF0dHJzID0gQVRUUl9JTklUX1NFVFRJTkdTOworCisJaWYgKHByaXYtPmJkX3N0YXNoX2VuKQorCQlhdHRycyB8PSBBVFRSX0JEU1RBU0g7CisKKwlpZiAocHJpdi0+cnhfc3Rhc2hfc2l6ZSAhPSAwKQorCQlhdHRycyB8PSBBVFRSX0JVRlNUQVNIOworCisJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+YXR0ciwgYXR0cnMpOworCisJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+Zmlmb190eF90aHIsIHByaXYtPmZpZm9fdGhyZXNob2xkKTsKKwlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5maWZvX3R4X3N0YXJ2ZSwgcHJpdi0+Zmlmb19zdGFydmUpOworCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmZpZm9fdHhfc3RhcnZlX3NodXRvZmYsIHByaXYtPmZpZm9fc3RhcnZlX29mZik7CisKKwkvKiBTdGFydCB0aGUgY29udHJvbGxlciAqLwogCWdmYXJfc3RhcnQoZGV2KTsKIAogCXJldHVybiAwOwpAQCAtODUxLDM0ICs4NzEsMzIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHR4YmQ4ICpiZHApCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0eGZjYiAqZ2Zhcl9hZGRfZmNiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0eGJkOCAqYmRwKQogewogCXN0cnVjdCB0eGZjYiAqZmNiID0gKHN0cnVjdCB0eGZjYiAqKXNrYl9wdXNoIChza2IsIEdNQUNfRkNCX0xFTik7CiAKIAltZW1zZXQoZmNiLCAwLCBHTUFDX0ZDQl9MRU4pOwogCi0JLyogRmxhZyB0aGUgYmQgc28gdGhlIGNvbnRyb2xsZXIgbG9va3MgZm9yIHRoZSBGQ0IgKi8KLQliZHAtPnN0YXR1cyB8PSBUWEJEX1RPRTsKLQogCXJldHVybiBmY2I7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZmFyX3R4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0eGZjYiAqZmNiKQogewotCWludCBsZW47CisJdTggZmxhZ3MgPSAwOwogCiAJLyogSWYgd2UncmUgaGVyZSwgaXQncyBhIElQIHBhY2tldCB3aXRoIGEgVENQIG9yIFVEUAogCSAqIHBheWxvYWQuICBXZSBzZXQgaXQgdG8gY2hlY2tzdW0sIHVzaW5nIGEgcHNldWRvLWhlYWRlcgogCSAqIHdlIHByb3ZpZGUKIAkgKi8KLQlmY2ItPmlwID0gMTsKLQlmY2ItPnR1cCA9IDE7Ci0JZmNiLT5jdHUgPSAxOwotCWZjYi0+bnBoID0gMTsKKwlmbGFncyA9IFRYRkNCX0RFRkFVTFQ7CiAKLQkvKiBOb3RpZnkgdGhlIGNvbnRyb2xsZXIgd2hhdCB0aGUgcHJvdG9jb2wgaXMgKi8KLQlpZiAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKQotCQlmY2ItPnVkcCA9IDE7CisJLyogVGVsbCB0aGUgY29udHJvbGxlciB3aGF0IHRoZSBwcm90b2NvbCBpcyAqLworCS8qIEFuZCBwcm92aWRlIHRoZSBhbHJlYWR5IGNhbGN1bGF0ZWQgcGhjcyAqLworCWlmIChza2ItPm5oLmlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKKwkJZmxhZ3MgfD0gVFhGQ0JfVURQOworCQlmY2ItPnBoY3MgPSBza2ItPmgudWgtPmNoZWNrOworCX0gZWxzZQorCQlmY2ItPnBoY3MgPSBza2ItPmgudGgtPmNoZWNrOwogCiAJLyogbDNvcyBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlCiAJICogZnJhbWUgKHNrYi0+ZGF0YSkgYW5kIHRoZSBzdGFydCBvZiB0aGUgSVAgaGRyLgpAQCAtODg3LDE3ICs5MDUsMTIgQEAKIAlmY2ItPmwzb3MgPSAodTE2KShza2ItPm5oLnJhdyAtIHNrYi0+ZGF0YSAtIEdNQUNfRkNCX0xFTik7CiAJZmNiLT5sNG9zID0gKHUxNikoc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3KTsKIAotCWxlbiA9IHNrYi0+bmguaXBoLT50b3RfbGVuIC0gZmNiLT5sNG9zOwotCi0JLyogUHJvdmlkZSB0aGUgcHNldWRvaGVhZGVyIGNzdW0gKi8KLQlmY2ItPnBoY3MgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoc2tiLT5uaC5pcGgtPnNhZGRyLAotCQkJc2tiLT5uaC5pcGgtPmRhZGRyLCBsZW4sCi0JCQlza2ItPm5oLmlwaC0+cHJvdG9jb2wsIDApOworCWZjYi0+ZmxhZ3MgPSBmbGFnczsKIH0KIAotdm9pZCBnZmFyX3R4X3ZsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHR4ZmNiICpmY2IpCit2b2lkIGlubGluZSBnZmFyX3R4X3ZsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHR4ZmNiICpmY2IpCiB7Ci0JZmNiLT52bG4gPSAxOworCWZjYi0+ZmxhZ3MgfD0gVFhGQ0JfVkxOOwogCWZjYi0+dmxjdGwgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKIH0KIApAQCAtOTA4LDYgKzkyMSw3IEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHR4ZmNiICpmY2IgPSBOVUxMOwogCXN0cnVjdCB0eGJkOCAqdHhiZHA7CisJdTE2IHN0YXR1czsKIAogCS8qIFVwZGF0ZSB0cmFuc21pdCBzdGF0cyAqLwogCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtOTE5LDE5ICs5MzMsMjIgQEAKIAl0eGJkcCA9IHByaXYtPmN1cl90eDsKIAogCS8qIENsZWFyIGFsbCBidXQgdGhlIFdSQVAgc3RhdHVzIGZsYWdzICovCi0JdHhiZHAtPnN0YXR1cyAmPSBUWEJEX1dSQVA7CisJc3RhdHVzID0gdHhiZHAtPnN0YXR1cyAmIFRYQkRfV1JBUDsKIAogCS8qIFNldCB1cCBjaGVja3N1bW1pbmcgKi8KLQlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pCi0JCQkmJiAoQ0hFQ0tTVU1fSFcgPT0gc2tiLT5pcF9zdW1tZWQpKSB7CisJaWYgKGxpa2VseSgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkKKwkJCSYmIChDSEVDS1NVTV9IVyA9PSBza2ItPmlwX3N1bW1lZCkpKSB7CiAJCWZjYiA9IGdmYXJfYWRkX2ZjYihza2IsIHR4YmRwKTsKKwkJc3RhdHVzIHw9IFRYQkRfVE9FOwogCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKIAl9CiAKIAlpZiAocHJpdi0+dmxhbl9lbmFibGUgJiYKIAkJCXVubGlrZWx5KHByaXYtPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkpIHsKLQkJaWYgKE5VTEwgPT0gZmNiKQorCQlpZiAodW5saWtlbHkoTlVMTCA9PSBmY2IpKSB7CiAJCQlmY2IgPSBnZmFyX2FkZF9mY2Ioc2tiLCB0eGJkcCk7CisJCQlzdGF0dXMgfD0gVFhCRF9UT0U7CisJCX0KIAogCQlnZmFyX3R4X3ZsYW4oc2tiLCBmY2IpOwogCX0KQEAgLTk0OSwxNCArOTY2LDE2IEBACiAJICAgIChwcml2LT5za2JfY3VydHggKyAxKSAmIFRYX1JJTkdfTU9EX01BU0socHJpdi0+dHhfcmluZ19zaXplKTsKIAogCS8qIEZsYWcgdGhlIEJEIGFzIGludGVycnVwdC1jYXVzaW5nICovCi0JdHhiZHAtPnN0YXR1cyB8PSBUWEJEX0lOVEVSUlVQVDsKKwlzdGF0dXMgfD0gVFhCRF9JTlRFUlJVUFQ7CiAKIAkvKiBGbGFnIHRoZSBCRCBhcyByZWFkeSB0byBnbywgbGFzdCBpbiBmcmFtZSwgYW5kICAqLwogCS8qIGluIG5lZWQgb2YgQ1JDICovCi0JdHhiZHAtPnN0YXR1cyB8PSAoVFhCRF9SRUFEWSB8IFRYQkRfTEFTVCB8IFRYQkRfQ1JDKTsKKwlzdGF0dXMgfD0gKFRYQkRfUkVBRFkgfCBUWEJEX0xBU1QgfCBUWEJEX0NSQyk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAorCXR4YmRwLT5zdGF0dXMgPSBzdGF0dXM7CisKIAkvKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCBCRCBpbiB0aGUgcmluZywgdGhlIG5leHQgb25lICovCiAJLyogaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmluZyAqLwogCWlmICh0eGJkcC0+c3RhdHVzICYgVFhCRF9XUkFQKQpAQCAtMTAxMCwyMSArMTAyOSw3IEBACiAvKiBDaGFuZ2VzIHRoZSBtYWMgYWRkcmVzcyBpZiB0aGUgY29udHJvbGxlciBpcyBub3QgcnVubmluZy4gKi8KIGludCBnZmFyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCWNoYXIgdG1wYnVmW01BQ19BRERSX0xFTl07Ci0JdTMyIHRlbXB2YWw7Ci0KLQkvKiBOb3cgY29weSBpdCBpbnRvIHRoZSBtYWMgcmVnaXN0ZXJzIGJhY2t3YXJkcywgY3V6ICovCi0JLyogbGl0dGxlIGVuZGlhbiBpcyBzaWxseSAqLwotCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUl9MRU47IGkrKykKLQkJdG1wYnVmW01BQ19BRERSX0xFTiAtIDEgLSBpXSA9IGRldi0+ZGV2X2FkZHJbaV07Ci0KLQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5tYWNzdG5hZGRyMSwgKigodTMyICopICh0bXBidWYpKSk7Ci0KLQl0ZW1wdmFsID0gKigodTMyICopICh0bXBidWYgKyA0KSk7Ci0KLQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5tYWNzdG5hZGRyMiwgdGVtcHZhbCk7CisJZ2Zhcl9zZXRfbWFjX2Zvcl9hZGRyKGRldiwgMCwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTAsNyArMTExNSw3IEBACiAJICAgIElOQ1JFTUVOVEFMX0JVRkZFUl9TSVpFOwogCiAJLyogT25seSBzdG9wIGFuZCBzdGFydCB0aGUgY29udHJvbGxlciBpZiBpdCBpc24ndCBhbHJlYWR5Ci0JICogc3RvcHBlZCAqLworCSAqIHN0b3BwZWQsIGFuZCB3ZSBjaGFuZ2VkIHNvbWV0aGluZyAqLwogCWlmICgob2xkc2l6ZSAhPSB0ZW1wc2l6ZSkgJiYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApKQogCQlzdG9wX2dmYXIoZGV2KTsKIApAQCAtMTIyMCw2ICsxMjI1LDcgQEAKIAogc3RydWN0IHNrX2J1ZmYgKiBnZmFyX25ld19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ4YmQ4ICpiZHApCiB7CisJdW5zaWduZWQgaW50IGFsaWduYW1vdW50OwogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gU0tCX0FMTE9DX1RJTUVPVVQ7CkBAIC0xMjMxLDE4ICsxMjM3LDE4IEBACiAJaWYgKE5VTEwgPT0gc2tiKQogCQlyZXR1cm4gTlVMTDsKIAorCWFsaWduYW1vdW50ID0gUlhCVUZfQUxJR05NRU5UIC0KKwkJKCgodW5zaWduZWQpIHNrYi0+ZGF0YSkgJiAoUlhCVUZfQUxJR05NRU5UIC0gMSkpOworCiAJLyogV2UgbmVlZCB0aGUgZGF0YSBidWZmZXIgdG8gYmUgYWxpZ25lZCBwcm9wZXJseS4gIFdlIHdpbGwgcmVzZXJ2ZQogCSAqIGFzIG1hbnkgYnl0ZXMgYXMgbmVlZGVkIHRvIGFsaWduIHRoZSBkYXRhIHByb3Blcmx5CiAJICovCi0Jc2tiX3Jlc2VydmUoc2tiLAotCQkgICAgUlhCVUZfQUxJR05NRU5UIC0KLQkJICAgICgoKHVuc2lnbmVkKSBza2ItPmRhdGEpICYgKFJYQlVGX0FMSUdOTUVOVCAtIDEpKSk7CisJc2tiX3Jlc2VydmUoc2tiLCBhbGlnbmFtb3VudCk7CiAKIAlza2ItPmRldiA9IGRldjsKIAogCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLAotCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUgKyBSWEJVRl9BTElHTk1FTlQsCi0JCQlETUFfRlJPTV9ERVZJQ0UpOworCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAliZHAtPmxlbmd0aCA9IDA7CiAKQEAgLTEzNTAsNyArMTM1Niw3IEBACiAJLyogSWYgdmFsaWQgaGVhZGVycyB3ZXJlIGZvdW5kLCBhbmQgdmFsaWQgc3VtcwogCSAqIHdlcmUgdmVyaWZpZWQsIHRoZW4gd2UgdGVsbCB0aGUga2VybmVsIHRoYXQgbm8KIAkgKiBjaGVja3N1bW1pbmcgaXMgbmVjZXNzYXJ5LiAgT3RoZXJ3aXNlLCBpdCBpcyAqLwotCWlmIChmY2ItPmNpcCAmJiAhZmNiLT5laXAgJiYgZmNiLT5jdHUgJiYgIWZjYi0+ZXR1KQorCWlmICgoZmNiLT5mbGFncyAmIFJYRkNCX0NTVU1fTUFTSykgPT0gKFJYRkNCX0NJUCB8IFJYRkNCX0NUVSkpCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJZWxzZQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CkBAIC0xNDAxLDcgKzE0MDcsNyBAQAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCiAJCS8qIFNlbmQgdGhlIHBhY2tldCB1cCB0aGUgc3RhY2sgKi8KLQkJaWYgKHVubGlrZWx5KHByaXYtPnZsZ3JwICYmIGZjYi0+dmxuKSkKKwkJaWYgKHVubGlrZWx5KHByaXYtPnZsZ3JwICYmIChmY2ItPmZsYWdzICYgUlhGQ0JfVkxOKSkpCiAJCQlyZXQgPSBnZmFyX3J4X3ZsYW4oc2tiLCBwcml2LT52bGdycCwgZmNiLT52bGN0bCk7CiAJCWVsc2UKIAkJCXJldCA9IFJFQ0VJVkUoc2tiKTsKQEAgLTE2MjAsNiArMTYyNiw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAocGh5ZGV2LT5saW5rKSB7CiAJCXUzMiB0ZW1wdmFsID0gZ2Zhcl9yZWFkKCZyZWdzLT5tYWNjZmcyKTsKKwkJdTMyIGVjbnRybCA9IGdmYXJfcmVhZCgmcmVncy0+ZWNudHJsKTsKIAogCQkvKiBOb3cgd2UgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGluIGZ1bGwgZHVwbGV4IG1vZGUuCiAJCSAqIElmIG5vdCwgd2Ugb3BlcmF0ZSBpbiBoYWxmLWR1cGxleCBtb2RlLiAqLwpAQCAtMTY0NCw2ICsxNjUxLDEzIEBACiAJCQljYXNlIDEwOgogCQkJCXRlbXB2YWwgPQogCQkJCSAgICAoKHRlbXB2YWwgJiB+KE1BQ0NGRzJfSUYpKSB8IE1BQ0NGRzJfTUlJKTsKKworCQkJCS8qIFJlZHVjZWQgbW9kZSBkaXN0aW5ndWlzaGVzCisJCQkJICogYmV0d2VlbiAxMCBhbmQgMTAwICovCisJCQkJaWYgKHBoeWRldi0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJCQllY250cmwgfD0gRUNOVFJMX1IxMDA7CisJCQkJZWxzZQorCQkJCQllY250cmwgJj0gfihFQ05UUkxfUjEwMCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKQEAgLTE2NTcsNiArMTY3MSw3IEBACiAJCX0KIAogCQlnZmFyX3dyaXRlKCZyZWdzLT5tYWNjZmcyLCB0ZW1wdmFsKTsKKwkJZ2Zhcl93cml0ZSgmcmVncy0+ZWNudHJsLCBlY250cmwpOwogCiAJCWlmICghcHJpdi0+b2xkbGluaykgewogCQkJbmV3X3N0YXRlID0gMTsKQEAgLTE3MjEsNiArMTczNiw5IEBACiAJCWdmYXJfd3JpdGUoJnJlZ3MtPmdhZGRyNiwgMHhmZmZmZmZmZik7CiAJCWdmYXJfd3JpdGUoJnJlZ3MtPmdhZGRyNywgMHhmZmZmZmZmZik7CiAJfSBlbHNlIHsKKwkJaW50IGVtX251bTsKKwkJaW50IGlkeDsKKwogCQkvKiB6ZXJvIG91dCB0aGUgaGFzaCAqLwogCQlnZmFyX3dyaXRlKCZyZWdzLT5pZ2FkZHIwLCAweDApOwogCQlnZmFyX3dyaXRlKCZyZWdzLT5pZ2FkZHIxLCAweDApOwpAQCAtMTczOSwxOCArMTc1Nyw0NyBAQAogCQlnZmFyX3dyaXRlKCZyZWdzLT5nYWRkcjYsIDB4MCk7CiAJCWdmYXJfd3JpdGUoJnJlZ3MtPmdhZGRyNywgMHgwKTsKIAorCQkvKiBJZiB3ZSBoYXZlIGV4dGVuZGVkIGhhc2ggdGFibGVzLCB3ZSBuZWVkIHRvCisJCSAqIGNsZWFyIHRoZSBleGFjdCBtYXRjaCByZWdpc3RlcnMgdG8gcHJlcGFyZSBmb3IKKwkJICogc2V0dGluZyB0aGVtICovCisJCWlmIChwcml2LT5leHRlbmRlZF9oYXNoKSB7CisJCQllbV9udW0gPSBHRkFSX0VNX05VTSArIDE7CisJCQlnZmFyX2NsZWFyX2V4YWN0X21hdGNoKGRldik7CisJCQlpZHggPSAxOworCQl9IGVsc2UgeworCQkJaWR4ID0gMDsKKwkJCWVtX251bSA9IDA7CisJCX0KKwogCQlpZihkZXYtPm1jX2NvdW50ID09IDApCiAJCQlyZXR1cm47CiAKIAkJLyogUGFyc2UgdGhlIGxpc3QsIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIGJpdHMgKi8KIAkJZm9yKG1jX3B0ciA9IGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKLQkJCWdmYXJfc2V0X2hhc2hfZm9yX2FkZHIoZGV2LCBtY19wdHItPmRtaV9hZGRyKTsKKwkJCWlmIChpZHggPCBlbV9udW0pIHsKKwkJCQlnZmFyX3NldF9tYWNfZm9yX2FkZHIoZGV2LCBpZHgsCisJCQkJCQltY19wdHItPmRtaV9hZGRyKTsKKwkJCQlpZHgrKzsKKwkJCX0gZWxzZQorCQkJCWdmYXJfc2V0X2hhc2hfZm9yX2FkZHIoZGV2LCBtY19wdHItPmRtaV9hZGRyKTsKIAkJfQogCX0KIAogCXJldHVybjsKIH0KIAorCisvKiBDbGVhcnMgZWFjaCBvZiB0aGUgZXhhY3QgbWF0Y2ggcmVnaXN0ZXJzIHRvIHplcm8sIHNvIHRoZXkKKyAqIGRvbid0IGludGVyZmVyZSB3aXRoIG5vcm1hbCByZWNlcHRpb24gKi8KK3N0YXRpYyB2b2lkIGdmYXJfY2xlYXJfZXhhY3RfbWF0Y2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaWR4OworCXU4IHplcm9fYXJyW01BQ19BRERSX0xFTl0gPSB7MCwwLDAsMCwwLDB9OworCisJZm9yKGlkeCA9IDE7aWR4IDwgR0ZBUl9FTV9OVU0gKyAxO2lkeCsrKQorCQlnZmFyX3NldF9tYWNfZm9yX2FkZHIoZGV2LCBpZHgsICh1OCAqKXplcm9fYXJyKTsKK30KKwogLyogU2V0IHRoZSBhcHByb3ByaWF0ZSBoYXNoIGJpdCBmb3IgdGhlIGdpdmVuIGFkZHIgKi8KIC8qIFRoZSBhbGdvcml0aG0gd29ya3MgbGlrZSBzbzoKICAqIDEpIFRha2UgdGhlIERlc3RpbmF0aW9uIEFkZHJlc3MgKGllIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyksIGFuZApAQCAtMTc4MSw2ICsxODI4LDMyIEBACiAJcmV0dXJuOwogfQogCisKKy8qIFRoZXJlIGFyZSBtdWx0aXBsZSBNQUMgQWRkcmVzcyByZWdpc3RlciBwYWlycyBvbiBzb21lIGNvbnRyb2xsZXJzCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG51bXRoIHBhaXIgdG8gYSBnaXZlbiBhZGRyZXNzCisgKi8KK3N0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaWR4OworCWNoYXIgdG1wYnVmW01BQ19BRERSX0xFTl07CisJdTMyIHRlbXB2YWw7CisJdTMyICptYWNwdHIgPSAmcHJpdi0+cmVncy0+bWFjc3RuYWRkcjE7CisKKwltYWNwdHIgKz0gbnVtKjI7CisKKwkvKiBOb3cgY29weSBpdCBpbnRvIHRoZSBtYWMgcmVnaXN0ZXJzIGJhY2t3YXJkcywgY3V6ICovCisJLyogbGl0dGxlIGVuZGlhbiBpcyBzaWxseSAqLworCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFDX0FERFJfTEVOOyBpZHgrKykKKwkJdG1wYnVmW01BQ19BRERSX0xFTiAtIDEgLSBpZHhdID0gYWRkcltpZHhdOworCisJZ2Zhcl93cml0ZShtYWNwdHIsICooKHUzMiAqKSAodG1wYnVmKSkpOworCisJdGVtcHZhbCA9ICooKHUzMiAqKSAodG1wYnVmICsgNCkpOworCisJZ2Zhcl93cml0ZShtYWNwdHIrMSwgdGVtcHZhbCk7Cit9CisKIC8qIEdGQVIgZXJyb3IgaW50ZXJydXB0IGhhbmRsZXIgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX2Vycm9yKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggNTA2NWJhOC4uOTRhOTFkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtOTAsMTIgKzkwLDI2IEBACiAjZGVmaW5lIEdGQVJfUlhfTUFYX1JJTkdfU0laRSAgIDI1NgogI2RlZmluZSBHRkFSX1RYX01BWF9SSU5HX1NJWkUgICAyNTYKIAorI2RlZmluZSBHRkFSX01BWF9GSUZPX1RIUkVTSE9MRCA1MTEKKyNkZWZpbmUgR0ZBUl9NQVhfRklGT19TVEFSVkUJNTExCisjZGVmaW5lIEdGQVJfTUFYX0ZJRk9fU1RBUlZFX09GRiA1MTEKKwogI2RlZmluZSBERUZBVUxUX1JYX0JVRkZFUl9TSVpFICAxNTM2CiAjZGVmaW5lIFRYX1JJTkdfTU9EX01BU0soc2l6ZSkgKHNpemUtMSkKICNkZWZpbmUgUlhfUklOR19NT0RfTUFTSyhzaXplKSAoc2l6ZS0xKQogI2RlZmluZSBKVU1CT19CVUZGRVJfU0laRSA5NzI4CiAjZGVmaW5lIEpVTUJPX0ZSQU1FX1NJWkUgOTYwMAogCisjZGVmaW5lIERFRkFVTFRfRklGT19UWF9USFIgMHgxMDAKKyNkZWZpbmUgREVGQVVMVF9GSUZPX1RYX1NUQVJWRSAweDQwCisjZGVmaW5lIERFRkFVTFRfRklGT19UWF9TVEFSVkVfT0ZGIDB4ODAKKyNkZWZpbmUgREVGQVVMVF9CRF9TVEFTSCAxCisjZGVmaW5lIERFRkFVTFRfU1RBU0hfTEVOR1RICTY0CisjZGVmaW5lIERFRkFVTFRfU1RBU0hfSU5ERVgJMAorCisvKiBUaGUgbnVtYmVyIG9mIEV4YWN0IE1hdGNoIHJlZ2lzdGVycyAqLworI2RlZmluZSBHRkFSX0VNX05VTQkxNQorCiAvKiBMYXRlbmN5IG9mIGludGVyZmFjZSBjbG9jayBpbiBuYW5vc2Vjb25kcyAqLwogLyogSW50ZXJmYWNlIGNsb2NrIGxhdGVuY3kgLCBpbiB0aGlzIGNhc2UsIG1lYW5zIHRoZQogICogdGltZSBkZXNjcmliZWQgYnkgYSB2YWx1ZSBvZiAxIGluIHRoZSBpbnRlcnJ1cHQKQEAgLTExMiwxMSArMTI2LDExIEBACiAKICNkZWZpbmUgREVGQVVMVF9UWF9DT0FMRVNDRSAxCiAjZGVmaW5lIERFRkFVTFRfVFhDT1VOVAkxNgotI2RlZmluZSBERUZBVUxUX1RYVElNRQk0MDAKKyNkZWZpbmUgREVGQVVMVF9UWFRJTUUJNAogCiAjZGVmaW5lIERFRkFVTFRfUlhfQ09BTEVTQ0UgMQogI2RlZmluZSBERUZBVUxUX1JYQ09VTlQJMTYKLSNkZWZpbmUgREVGQVVMVF9SWFRJTUUJNDAwCisjZGVmaW5lIERFRkFVTFRfUlhUSU1FCTQKIAogI2RlZmluZSBUQklQQV9WQUxVRQkJMHgxZgogI2RlZmluZSBNSUlNQ0ZHX0lOSVRfVkFMVUUJMHgwMDAwMDAwNwpAQCAtMTQ3LDYgKzE2MSw3IEBACiAKICNkZWZpbmUgRUNOVFJMX0lOSVRfU0VUVElOR1MJMHgwMDAwMTAwMAogI2RlZmluZSBFQ05UUkxfVEJJX01PREUgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEVDTlRSTF9SMTAwCQkweDAwMDAwMDA4CiAKICNkZWZpbmUgTVJCTFJfSU5JVF9TRVRUSU5HUwlERUZBVUxUX1JYX0JVRkZFUl9TSVpFCiAKQEAgLTE4MSwxMCArMTk2LDEyIEBACiAjZGVmaW5lIFJDVFJMX1BSU0RFUF9NQVNLCTB4MDAwMDAwYzAKICNkZWZpbmUgUkNUUkxfUFJTREVQX0lOSVQJMHgwMDAwMDBjMAogI2RlZmluZSBSQ1RSTF9QUk9NCQkweDAwMDAwMDA4CisjZGVmaW5lIFJDVFJMX0VNRU4JCTB4MDAwMDAwMDIKICNkZWZpbmUgUkNUUkxfQ0hFQ0tTVU1NSU5HCShSQ1RSTF9JUENTRU4gXAogCQl8IFJDVFJMX1RVQ1NFTiB8IFJDVFJMX1BSU0RFUF9JTklUKQogI2RlZmluZSBSQ1RSTF9FWFRIQVNICQkoUkNUUkxfR0hUWCkKICNkZWZpbmUgUkNUUkxfVkxBTgkJKFJDVFJMX1BSU0RFUF9JTklUKQorI2RlZmluZSBSQ1RSTF9QQURESU5HKHgpCSgoeCA8PCAxNikgJiBSQ1RSTF9QQUxfTUFTSykKIAogCiAjZGVmaW5lIFJTVEFUX0NMRUFSX1JIQUxUICAgICAgIDB4MDA4MDAwMDAKQEAgLTI1MSwyOCArMjY4LDI2IEBACiAJCUlNQVNLX1hGVU4gfCBJTUFTS19SWEMgfCBJTUFTS19CQUJUIHwgSU1BU0tfRFBFIFwKIAkJfCBJTUFTS19QRVJSKQogCisvKiBGaWZvIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgRklGT19UWF9USFJfTUFTSwkweDAxZmYKKyNkZWZpbmUgRklGT19UWF9TVEFSVkVfTUFTSwkweDAxZmYKKyNkZWZpbmUgRklGT19UWF9TVEFSVkVfT0ZGX01BU0sJMHgwMWZmCiAKIC8qIEF0dHJpYnV0ZSBmaWVsZHMgKi8KIAogLyogVGhpcyBlbmFibGVzIHJ4IHNub29waW5nIGZvciBidWZmZXJzIGFuZCBkZXNjcmlwdG9ycyAqLwotI2lmZGVmIENPTkZJR19HRkFSX0JEU1RBU0gKICNkZWZpbmUgQVRUUl9CRFNUQVNICQkweDAwMDAwODAwCi0jZWxzZQotI2RlZmluZSBBVFRSX0JEU1RBU0gJCTB4MDAwMDAwMDAKLSNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0dGQVJfQlVGU1RBU0gKICNkZWZpbmUgQVRUUl9CVUZTVEFTSAkJMHgwMDAwNDAwMAotI2RlZmluZSBTVEFTSF9MRU5HVEgJCTY0Ci0jZWxzZQotI2RlZmluZSBBVFRSX0JVRlNUQVNICQkweDAwMDAwMDAwCi0jZW5kaWYKIAogI2RlZmluZSBBVFRSX1NOT09QSU5HCQkweDAwMDAwMGMwCi0jZGVmaW5lIEFUVFJfSU5JVF9TRVRUSU5HUyAgICAgIChBVFRSX1NOT09QSU5HIFwKLQkJfCBBVFRSX0JEU1RBU0ggfCBBVFRSX0JVRlNUQVNIKQorI2RlZmluZSBBVFRSX0lOSVRfU0VUVElOR1MgICAgICBBVFRSX1NOT09QSU5HCiAKICNkZWZpbmUgQVRUUkVMSV9JTklUX1NFVFRJTkdTICAgMHgwCisjZGVmaW5lIEFUVFJFTElfRUxfTUFTSwkJMHgzZmZmMDAwMAorI2RlZmluZSBBVFRSRUxJX0VMKHgpICh4IDw8IDE2KQorI2RlZmluZSBBVFRSRUxJX0VJX01BU0sJCTB4MDAwMDNmZmYKKyNkZWZpbmUgQVRUUkVMSV9FSSh4KSAoeCkKIAogCiAvKiBUeEJEIHN0YXR1cyBmaWVsZCBiaXRzICovCkBAIC0zMjgsNiArMzQzLDcgQEAKICNkZWZpbmUgUlhGQ0JfQ1RVCQkweDA0MDAKICNkZWZpbmUgUlhGQ0JfRUlQCQkweDAyMDAKICNkZWZpbmUgUlhGQ0JfRVRVCQkweDAxMDAKKyNkZWZpbmUgUlhGQ0JfQ1NVTV9NQVNLCQkweDBmMDAKICNkZWZpbmUgUlhGQ0JfUEVSUl9NQVNLCQkweDAwMGMKICNkZWZpbmUgUlhGQ0JfUEVSUl9CQURMMwkweDAwMDgKIApAQCAtMzM5LDE0ICszNTUsNyBAQAogfTsKIAogc3RydWN0IHR4ZmNiIHsKLQl1OAl2bG46MSwKLQkJaXA6MSwKLQkJaXA2OjEsCi0JCXR1cDoxLAotCQl1ZHA6MSwKLQkJY2lwOjEsCi0JCWN0dToxLAotCQlucGg6MTsKKwl1OAlmbGFnczsKIAl1OAlyZXNlcnZlZDsKIAl1OAlsNG9zOwkvKiBMZXZlbCA0IEhlYWRlciBPZmZzZXQgKi8KIAl1OAlsM29zOyAJLyogTGV2ZWwgMyBIZWFkZXIgT2Zmc2V0ICovCkBAIC0zNjIsMTQgKzM3MSw3IEBACiB9OwogCiBzdHJ1Y3QgcnhmY2IgewotCXUxNgl2bG46MSwKLQkJaXA6MSwKLQkJaXA2OjEsCi0JCXR1cDoxLAotCQljaXA6MSwKLQkJY3R1OjEsCi0JCWVpcDoxLAotCQlldHU6MTsKKwl1MTYJZmxhZ3M7CiAJdTgJcnE7CS8qIFJlY2VpdmUgUXVldWUgaW5kZXggKi8KIAl1OAlwcm87CS8qIExheWVyIDQgUHJvdG9jb2wgKi8KIAl1MTYJcmVzZXJ2ZWQ7CkBAIC02ODgsMTIgKzY5MCwxNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAl1bnNpZ25lZCBpbnQgcnhfYnVmZmVyX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX3NpemU7CisJdW5zaWduZWQgaW50IHJ4X3N0YXNoX2luZGV4OwogCXVuc2lnbmVkIGludCB0eF9yaW5nX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZmlmb190aHJlc2hvbGQ7CisJdW5zaWduZWQgaW50IGZpZm9fc3RhcnZlOworCXVuc2lnbmVkIGludCBmaWZvX3N0YXJ2ZV9vZmY7CiAKIAl1bnNpZ25lZCBjaGFyIHZsYW5fZW5hYmxlOjEsCiAJCXJ4X2NzdW1fZW5hYmxlOjEsCi0JCWV4dGVuZGVkX2hhc2g6MTsKKwkJZXh0ZW5kZWRfaGFzaDoxLAorCQliZF9zdGFzaF9lbjoxOwogCXVuc2lnbmVkIHNob3J0IHBhZGRpbmc7CiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOwogCS8qIEluZm8gc3RydWN0dXJlIGluaXRpYWxpemVkIGJ5IGJvYXJkIHNldHVwIGNvZGUgKi8KQEAgLTczMSw2ICs3MzgsNiBAQAogZXh0ZXJuIHZvaWQgZ2Zhcl9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZ2Zhcl9waHlfdGVzdChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQlpbnQgZW5hYmxlLCB1MzIgcmVnbnVtLCB1MzIgcmVhZCk7Ci12b2lkIGdmYXJfc2V0dXBfc3Rhc2hpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGdmYXJfaW5pdF9zeXNmcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogI2VuZGlmIC8qIF9fR0lBTkZBUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCmluZGV4IGNmYTNjZDcuLjc2NWU4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIHN0YXRpYyB2b2lkIGdmYXJfZ3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKiBidWYpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAlpZiAocHJpdi0+ZWluZm8tPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTikKIAkJbWVtY3B5KGJ1Ziwgc3RhdF9nc3RyaW5ncywgR0ZBUl9TVEFUU19MRU4gKiBFVEhfR1NUUklOR19MRU4pOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmggYi9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oCmluZGV4IGU4NWViMjEuLmQ1MjdjZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaApAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBNSUlfUkVBRF9DT01NQU5EICAgICAgIDB4MDAwMDAwMDEKIAogI2RlZmluZSBHRkFSX1NVUFBPUlRFRCAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiBcCisJCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCBcCiAJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgXAogCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIFwKIAkJfCBTVVBQT1JURURfQXV0b25lZyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkMzRjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIGRyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYworICoKKyAqIEdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyCisgKiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgdGhlIG5vbi1DUE0gZXRoZXJuZXQgY29udHJvbGxlcnMKKyAqIG9uIHRoZSA4NXh4IGFuZCA4M3h4IGZhbWlseSBvZiBpbnRlZ3JhdGVkIHByb2Nlc3NvcnMKKyAqIEJhc2VkIG9uIDgyNjBfaW8vZmNjX2VuZXQuYworICoKKyAqIEF1dGhvcjogQW5keSBGbGVtaW5nCisgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIChrdW1hci5nYWxhQGZyZWVzY2FsZS5jb20pCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFN5c2ZzIGZpbGUgY3JlYXRpb24gYW5kIG1hbmFnZW1lbnQKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSAiZ2lhbmZhci5oIgorCisjZGVmaW5lIEdGQVJfQVRUUihfbmFtZSkgXAorc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93XyMjX25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKTsgXAorc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfIyNfbmFtZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBcCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsgXAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKF9uYW1lLCAwNjQ0LCBnZmFyX3Nob3dfIyNfbmFtZSwgZ2Zhcl9zZXRfIyNfbmFtZSkKKworI2RlZmluZSBHRkFSX0NSRUFURV9GSUxFKF9kZXYsIF9uYW1lKSBcCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZfZGV2LT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl8jI19uYW1lKQorCitHRkFSX0FUVFIoYmRfc3Rhc2gpOworR0ZBUl9BVFRSKHJ4X3N0YXNoX3NpemUpOworR0ZBUl9BVFRSKHJ4X3N0YXNoX2luZGV4KTsKK0dGQVJfQVRUUihmaWZvX3RocmVzaG9sZCk7CitHRkFSX0FUVFIoZmlmb19zdGFydmUpOworR0ZBUl9BVFRSKGZpZm9fc3RhcnZlX29mZik7CisKKyNkZWZpbmUgdG9fbmV0X2RldihjZCkgY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgbmV0X2RldmljZSwgY2xhc3NfZGV2KQorCitzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfYmRfc3Rhc2goc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHByaXYtPmJkX3N0YXNoX2VuPyAib24iIDogIm9mZiIpOworfQorCitzdGF0aWMgc3NpemVfdCBnZmFyX3NldF9iZF9zdGFzaChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbmV3X3NldHRpbmcgPSAwOworCXUzMiB0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBGaW5kIG91dCB0aGUgbmV3IHNldHRpbmcgKi8KKwlpZiAoIXN0cm5jbXAoIm9uIiwgYnVmLCBjb3VudC0xKSB8fCAhc3RybmNtcCgiMSIsIGJ1ZiwgY291bnQtMSkpCisJCW5ld19zZXR0aW5nID0gMTsKKwllbHNlIGlmICghc3RybmNtcCgib2ZmIiwgYnVmLCBjb3VudC0xKSB8fCAhc3RybmNtcCgiMCIsIGJ1ZiwgY291bnQtMSkpCisJCW5ld19zZXR0aW5nID0gMDsKKwllbHNlCisJCXJldHVybiBjb3VudDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBTZXQgdGhlIG5ldyBzdGFzaGluZyB2YWx1ZSAqLworCXByaXYtPmJkX3N0YXNoX2VuID0gbmV3X3NldHRpbmc7CisKKwl0ZW1wID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5hdHRyKTsKKwkKKwlpZiAobmV3X3NldHRpbmcpCisJCXRlbXAgfD0gQVRUUl9CRFNUQVNIOworCWVsc2UKKwkJdGVtcCAmPSB+KEFUVFJfQkRTVEFTSCk7CisKKwlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5hdHRyLCB0ZW1wKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X3J4X3N0YXNoX3NpemUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnJ4X3N0YXNoX3NpemUpOworfQorCitzdGF0aWMgc3NpemVfdCBnZmFyX3NldF9yeF9zdGFzaF9zaXplKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCBsZW5ndGggPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCXUzMiB0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChsZW5ndGggPiBwcml2LT5yeF9idWZmZXJfc2l6ZSkKKwkJcmV0dXJuIGNvdW50OworCisJaWYgKGxlbmd0aCA9PSBwcml2LT5yeF9zdGFzaF9zaXplKQorCQlyZXR1cm4gY291bnQ7CisKKwlwcml2LT5yeF9zdGFzaF9zaXplID0gbGVuZ3RoOworCisJdGVtcCA9IGdmYXJfcmVhZCgmcHJpdi0+cmVncy0+YXR0cmVsaSk7CisJdGVtcCAmPSB+QVRUUkVMSV9FTF9NQVNLOworCXRlbXAgfD0gQVRUUkVMSV9FTChsZW5ndGgpOworCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmF0dHJlbGksIHRlbXApOworCisJLyogVHVybiBzdGFzaGluZyBvbi9vZmYgYXMgYXBwcm9wcmlhdGUgKi8KKwl0ZW1wID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5hdHRyKTsKKworCWlmIChsZW5ndGgpCisJCXRlbXAgfD0gQVRUUl9CVUZTVEFTSDsKKwllbHNlCisJCXRlbXAgJj0gfihBVFRSX0JVRlNUQVNIKTsKKworCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmF0dHIsIHRlbXApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvdW50OworfQorCisKKy8qIFN0YXNoaW5nIHdpbGwgb25seSBiZSBlbmFibGVkIHdoZW4gcnhfc3Rhc2hfc2l6ZSAhPSAwICovCitzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfaW5kZXgoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnJ4X3N0YXNoX2luZGV4KTsKK30KKworc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfcnhfc3Rhc2hfaW5kZXgoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgc2hvcnQgaW5kZXggPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCXUzMiB0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChpbmRleCA+IHByaXYtPnJ4X3N0YXNoX3NpemUpCisJCXJldHVybiBjb3VudDsKKworCWlmIChpbmRleCA9PSBwcml2LT5yeF9zdGFzaF9pbmRleCkKKwkJcmV0dXJuIGNvdW50OworCisJcHJpdi0+cnhfc3Rhc2hfaW5kZXggPSBpbmRleDsKKworCXRlbXAgPSBnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPmF0dHJlbGkpOworCXRlbXAgJj0gfkFUVFJFTElfRUlfTUFTSzsKKwl0ZW1wIHw9IEFUVFJFTElfRUkoaW5kZXgpOworCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmF0dHJlbGksIGZsYWdzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fdGhyZXNob2xkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5maWZvX3RocmVzaG9sZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdmYXJfc2V0X2ZpZm9fdGhyZXNob2xkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCBsZW5ndGggPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCXUzMiB0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobGVuZ3RoID4gR0ZBUl9NQVhfRklGT19USFJFU0hPTEQpCisJCXJldHVybiBjb3VudDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlwcml2LT5maWZvX3RocmVzaG9sZCA9IGxlbmd0aDsKKworCXRlbXAgPSBnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPmZpZm9fdHhfdGhyKTsKKwl0ZW1wICY9IH5GSUZPX1RYX1RIUl9NQVNLOworCXRlbXAgfD0gbGVuZ3RoOworCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmZpZm9fdHhfdGhyLCB0ZW1wKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5maWZvX3N0YXJ2ZSk7Cit9CisKKworc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfZmlmb19zdGFydmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IG51bSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisJdTMyIHRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChudW0gPiBHRkFSX01BWF9GSUZPX1NUQVJWRSkKKwkJcmV0dXJuIGNvdW50OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXByaXYtPmZpZm9fc3RhcnZlID0gbnVtOworCisJdGVtcCA9IGdmYXJfcmVhZCgmcHJpdi0+cmVncy0+Zmlmb190eF9zdGFydmUpOworCXRlbXAgJj0gfkZJRk9fVFhfU1RBUlZFX01BU0s7CisJdGVtcCB8PSBudW07CisJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+Zmlmb190eF9zdGFydmUsIHRlbXApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb19zdGFydmVfb2ZmKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5maWZvX3N0YXJ2ZV9vZmYpOworfQorCitzdGF0aWMgc3NpemVfdCBnZmFyX3NldF9maWZvX3N0YXJ2ZV9vZmYoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IG51bSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisJdTMyIHRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChudW0gPiBHRkFSX01BWF9GSUZPX1NUQVJWRV9PRkYpCisJCXJldHVybiBjb3VudDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlwcml2LT5maWZvX3N0YXJ2ZV9vZmYgPSBudW07CisKKwl0ZW1wID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5maWZvX3R4X3N0YXJ2ZV9zaHV0b2ZmKTsKKwl0ZW1wICY9IH5GSUZPX1RYX1NUQVJWRV9PRkZfTUFTSzsKKwl0ZW1wIHw9IG51bTsKKwlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5maWZvX3R4X3N0YXJ2ZV9zaHV0b2ZmLCB0ZW1wKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKwordm9pZCBnZmFyX2luaXRfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgdmFsdWVzICovCisJcHJpdi0+cnhfc3Rhc2hfc2l6ZSA9IERFRkFVTFRfU1RBU0hfTEVOR1RIOworCXByaXYtPnJ4X3N0YXNoX2luZGV4ID0gREVGQVVMVF9TVEFTSF9JTkRFWDsKKwlwcml2LT5maWZvX3RocmVzaG9sZCA9IERFRkFVTFRfRklGT19UWF9USFI7CisJcHJpdi0+Zmlmb19zdGFydmUgPSBERUZBVUxUX0ZJRk9fVFhfU1RBUlZFOworCXByaXYtPmZpZm9fc3RhcnZlX29mZiA9IERFRkFVTFRfRklGT19UWF9TVEFSVkVfT0ZGOworCXByaXYtPmJkX3N0YXNoX2VuID0gREVGQVVMVF9CRF9TVEFTSDsKKworCS8qIENyZWF0ZSBvdXIgc3lzZnMgZmlsZXMgKi8KKwlHRkFSX0NSRUFURV9GSUxFKGRldiwgYmRfc3Rhc2gpOworCUdGQVJfQ1JFQVRFX0ZJTEUoZGV2LCByeF9zdGFzaF9zaXplKTsKKwlHRkFSX0NSRUFURV9GSUxFKGRldiwgcnhfc3Rhc2hfaW5kZXgpOworCUdGQVJfQ1JFQVRFX0ZJTEUoZGV2LCBmaWZvX3RocmVzaG9sZCk7CisJR0ZBUl9DUkVBVEVfRklMRShkZXYsIGZpZm9fc3RhcnZlKTsKKwlHRkFSX0NSRUFURV9GSUxFKGRldiwgZmlmb19zdGFydmVfb2ZmKTsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IGMyMmMwNTEuLmZhMTc2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTE1MzksNyArMTUzOSw2IEBACiAgKiBVU0IgZGV2aWNlIGNhbGxiYWNrcwogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXJkYV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJpcmRhLXVzYiIsCiAJLnByb2JlCQk9IGlyZGFfdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gaXJkYV91c2JfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwppbmRleCAzOTYxYTc1Li4zMTg2N2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCkBAIC0xMTUyLDcgKzExNTIsNiBAQAogICogVVNCIGRldmljZSBjYWxsYmFja3MKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlyZGFfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic3RpcjQyMDAiLAogCS5wcm9iZQkJPSBzdGlyX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gc3Rpcl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWMyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL0tjb25maWcKQEAgLTAsMCArMSw2IEBACitjb25maWcgRU5QMjYxMV9NU0ZfTkVUCisJdHJpc3RhdGUgIlJhZGlzeXMgRU5QMjYxMSBNU0YgbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfRU5QMjYxMQorCWhlbHAKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBNU0YgbmV0d29yayBpbnRlcmZhY2UgdW5pdCBpbgorCSAgdGhlIElYUDI0MDAgb24gdGhlIFJhZGlzeXMgRU5QMjYxMSBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9peHAyMDAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzgzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLSQoQ09ORklHX0VOUDI2MTFfTVNGX05FVCkgKz0gZW5wMjYxMV9tb2QubworCitlbnAyNjExX21vZC1vYmpzIDo9IGNhbGViLm8gZW5wMjYxMS5vIGl4cDI0MDAtbXNmLm8gaXhwZGV2Lm8gcG0zMzg2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvY2FsZWIuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvY2FsZWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTk1ZTEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9jYWxlYi5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFNQSS0zIGJyaWRnZSBGUEdBIG9uIHRoZSBSYWRpc3lzIEVOUDI2MTEKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KKyAqIERlZGljYXRlZCB0byBNYXJpamEgS3VsaWtvdmEuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlICJjYWxlYi5oIgorCisjZGVmaW5lIENBTEVCX0lETE8JCTB4MDAKKyNkZWZpbmUgQ0FMRUJfSURISQkJMHgwMQorI2RlZmluZSBDQUxFQl9SSUQJCTB4MDIKKyNkZWZpbmUgQ0FMRUJfUkVTRVQJCTB4MDMKKyNkZWZpbmUgQ0FMRUJfSU5UUkVOMAkJMHgwNAorI2RlZmluZSBDQUxFQl9JTlRSRU4xCQkweDA1CisjZGVmaW5lIENBTEVCX0lOVFJTVEFUMAkJMHgwNgorI2RlZmluZSBDQUxFQl9JTlRSU1RBVDEJCTB4MDcKKyNkZWZpbmUgQ0FMRUJfUE9SVEVOCQkweDA4CisjZGVmaW5lIENBTEVCX0JVUlNUCQkweDA5CisjZGVmaW5lIENBTEVCX1BPUlRQQVVTCQkweDBBCisjZGVmaW5lIENBTEVCX1BPUlRQQVVTRAkJMHgwQgorI2RlZmluZSBDQUxFQl9QSFkwUlgJCTB4MTAKKyNkZWZpbmUgQ0FMRUJfUEhZMVJYCQkweDExCisjZGVmaW5lIENBTEVCX1BIWTBUWAkJMHgxMgorI2RlZmluZSBDQUxFQl9QSFkxVFgJCTB4MTMKKyNkZWZpbmUgQ0FMRUJfSVhQUlhfSElfQ05UUgkweDE1CisjZGVmaW5lIENBTEVCX1BIWTBSWF9ISV9DTlRSCTB4MTYKKyNkZWZpbmUgQ0FMRUJfUEhZMVJYX0hJX0NOVFIJMHgxNworI2RlZmluZSBDQUxFQl9JWFBSWF9DTlRSCTB4MTgKKyNkZWZpbmUgQ0FMRUJfUEhZMFJYX0NOVFIJMHgxOQorI2RlZmluZSBDQUxFQl9QSFkxUlhfQ05UUgkweDFBCisjZGVmaW5lIENBTEVCX0lYUFRYX0NOVFIJMHgxQgorI2RlZmluZSBDQUxFQl9QSFkwVFhfQ05UUgkweDFDCisjZGVmaW5lIENBTEVCX1BIWTFUWF9DTlRSCTB4MUQKKyNkZWZpbmUgQ0FMRUJfREVCVUcwCQkweDFFCisjZGVmaW5lIENBTEVCX0RFQlVHMQkJMHgxRgorCisKK3N0YXRpYyB1OCBjYWxlYl9yZWdfcmVhZChpbnQgcmVnKQoreworCXU4IHZhbHVlOworCisJdmFsdWUgPSAqKCh2b2xhdGlsZSB1OCAqKShFTlAyNjExX0NBTEVCX1ZJUlRfQkFTRSArIHJlZykpOworCisvLwlwcmludGsoS0VSTl9JTkZPICJjYWxlYl9yZWdfcmVhZCglZCkgPSAlLjJ4XG4iLCByZWcsIHZhbHVlKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgY2FsZWJfcmVnX3dyaXRlKGludCByZWcsIHU4IHZhbHVlKQoreworCXU4IGR1bW15OworCisvLwlwcmludGsoS0VSTl9JTkZPICJjYWxlYl9yZWdfd3JpdGUoJWQsICUuMngpXG4iLCByZWcsIHZhbHVlKTsKKworCSooKHZvbGF0aWxlIHU4ICopKEVOUDI2MTFfQ0FMRUJfVklSVF9CQVNFICsgcmVnKSkgPSB2YWx1ZTsKKworCWR1bW15ID0gKigodm9sYXRpbGUgdTggKilFTlAyNjExX0NBTEVCX1ZJUlRfQkFTRSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiAlMCwgJTAiIDogIityIiAoZHVtbXkpKTsKK30KKworCit2b2lkIGNhbGViX3Jlc2V0KHZvaWQpCit7CisJLyoKKwkgKiBQZXJmb3JtIGEgY2hpcCByZXNldC4KKwkgKi8KKwljYWxlYl9yZWdfd3JpdGUoQ0FMRUJfUkVTRVQsIDB4MDIpOworCXVkZWxheSgxKTsKKworCS8qCisJICogRW5hYmxlIGFsbCBpbnRlcnJ1cHQgc291cmNlcy4gIFRoaXMgaXMgbmVlZGVkIHRvIGdldAorCSAqIG1lYW5pbmdmdWwgcmVzdWx0cyBvdXQgb2YgdGhlIHN0YXR1cyBiaXRzIChyZWdpc3RlciA2CisJICogYW5kIDcuKQorCSAqLworCWNhbGViX3JlZ193cml0ZShDQUxFQl9JTlRSRU4wLCAweGZmKTsKKwljYWxlYl9yZWdfd3JpdGUoQ0FMRUJfSU5UUkVOMSwgMHgwNyk7CisKKwkvKgorCSAqIFNldCBSWCBhbmQgVFggRklGTyB0aHJlc2hvbGRzIHRvIDEuNWtiLgorCSAqLworCWNhbGViX3JlZ193cml0ZShDQUxFQl9QSFkwUlgsIDB4MTEpOworCWNhbGViX3JlZ193cml0ZShDQUxFQl9QSFkxUlgsIDB4MTEpOworCWNhbGViX3JlZ193cml0ZShDQUxFQl9QSFkwVFgsIDB4MTEpOworCWNhbGViX3JlZ193cml0ZShDQUxFQl9QSFkxVFgsIDB4MTEpOworCisJLyoKKwkgKiBQcm9ncmFtIFNQSS0zIGJ1cnN0IHNpemUuCisJICovCisJY2FsZWJfcmVnX3dyaXRlKENBTEVCX0JVUlNULCAwKTsJLy8gNjQtYnl0ZSBSQlVGIG1wYWNrZXRzCisvLwljYWxlYl9yZWdfd3JpdGUoQ0FMRUJfQlVSU1QsIDEpOwkvLyAxMjgtYnl0ZSBSQlVGIG1wYWNrZXRzCisvLwljYWxlYl9yZWdfd3JpdGUoQ0FMRUJfQlVSU1QsIDIpOwkvLyAyNTYtYnl0ZSBSQlVGIG1wYWNrZXRzCit9CisKK3ZvaWQgY2FsZWJfZW5hYmxlX3J4KGludCBwb3J0KQoreworCXU4IHRlbXA7CisKKwl0ZW1wID0gY2FsZWJfcmVnX3JlYWQoQ0FMRUJfUE9SVEVOKTsKKwl0ZW1wIHw9IDEgPDwgcG9ydDsKKwljYWxlYl9yZWdfd3JpdGUoQ0FMRUJfUE9SVEVOLCB0ZW1wKTsKK30KKwordm9pZCBjYWxlYl9kaXNhYmxlX3J4KGludCBwb3J0KQoreworCXU4IHRlbXA7CisKKwl0ZW1wID0gY2FsZWJfcmVnX3JlYWQoQ0FMRUJfUE9SVEVOKTsKKwl0ZW1wICY9IH4oMSA8PCBwb3J0KTsKKwljYWxlYl9yZWdfd3JpdGUoQ0FMRUJfUE9SVEVOLCB0ZW1wKTsKK30KKwordm9pZCBjYWxlYl9lbmFibGVfdHgoaW50IHBvcnQpCit7CisJdTggdGVtcDsKKworCXRlbXAgPSBjYWxlYl9yZWdfcmVhZChDQUxFQl9QT1JURU4pOworCXRlbXAgfD0gMSA8PCAocG9ydCArIDQpOworCWNhbGViX3JlZ193cml0ZShDQUxFQl9QT1JURU4sIHRlbXApOworfQorCit2b2lkIGNhbGViX2Rpc2FibGVfdHgoaW50IHBvcnQpCit7CisJdTggdGVtcDsKKworCXRlbXAgPSBjYWxlYl9yZWdfcmVhZChDQUxFQl9QT1JURU4pOworCXRlbXAgJj0gfigxIDw8IChwb3J0ICsgNCkpOworCWNhbGViX3JlZ193cml0ZShDQUxFQl9QT1JURU4sIHRlbXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9jYWxlYi5oIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9jYWxlYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5M2ExZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2NhbGViLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBTUEktMyBicmlkZ2UgRlBHQSBvbiB0aGUgUmFkaXN5cyBFTlAyNjExCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0NBTEVCX0gKKyNkZWZpbmUgX19DQUxFQl9ICisKK3ZvaWQgY2FsZWJfcmVzZXQodm9pZCk7Cit2b2lkIGNhbGViX2VuYWJsZV9yeChpbnQgcG9ydCk7Cit2b2lkIGNhbGViX2Rpc2FibGVfcngoaW50IHBvcnQpOwordm9pZCBjYWxlYl9lbmFibGVfdHgoaW50IHBvcnQpOwordm9pZCBjYWxlYl9kaXNhYmxlX3R4KGludCBwb3J0KTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9lbnAyNjExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyNjUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogSVhQMjQwMCBNU0YgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciB0aGUgUmFkaXN5cyBFTlAyNjExCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdWVuZ2luZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAiaXhwZGV2LmgiCisjaW5jbHVkZSAiY2FsZWIuaCIKKyNpbmNsdWRlICJpeHAyNDAwLW1zZi5oIgorI2luY2x1ZGUgInBtMzM4Ni5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZSBSYWRpc3lzIEVOUDI2MTEgaXMgYSBQQ0kgZm9ybSBmYWN0b3IgYm9hcmQgd2l0aCB0aHJlZSBTRlAgR0JJQworICogc2xvdHMsIGNvbm5lY3RlZCB2aWEgdHdvIFBNQy9TaWVycmEgMzM4NnMgYW5kIGFuIFNQSS0zIGJyaWRnZSBGUEdBCisgKiB0byB0aGUgSVhQMjQwMC4KKyAqCisgKiAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsKKyAqIFNGUCBHQklDICMwIC0tLSsgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgfCAgUE0zMzg2ICMwICArLS0tLS0tLSsgICAgICAgICB8CisgKiBTRlAgR0JJQyAjMSAtLS0rICAgICAgICAgICAgIHwgICAgICAgfCAiQ2FsZWIiIHwgICAgICAgICArLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNQSS0zICAgKy0tLS0tLS0tLSsgSVhQMjQwMCB8CisgKiAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgICAgICAgfCBicmlkZ2UgIHwgICAgICAgICB8ICAgICAgICAgfAorICogU0ZQIEdCSUMgIzIgLS0tKyAgICAgICAgICAgICB8ICAgICAgIHwgRlBHQSAgICB8ICAgICAgICAgKy0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgIHwgIFBNMzM4NiAjMSAgKy0tLS0tLS0rICAgICAgICAgfAorICogICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICBeCisgKiAgICAgICAgICAgICAgfCAxLjI1R2JhdWQgICAgICAgICB8IDEwNE1IeiAgICAgICAgICAgfCAxMDRNSHoKKyAqICAgICAgICAgICAgICB8IFNFUkRFUyBlYS4gICAgICAgIHwgU1BJLTMgZWEuICAgICAgICB8IFNQSS0zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpeHAyNDAwX21zZl9wYXJhbWV0ZXJzIGVucDI2MTFfbXNmX3BhcmFtZXRlcnMgPQoreworCS5yeF9tb2RlID0JCUlYUDI0MDBfUlhfTU9ERV9VVE9QSUFfUE9TIHwKKwkJCQlJWFAyNDAwX1JYX01PREVfMXgzMiB8CisJCQkJSVhQMjQwMF9SWF9NT0RFX01QSFkgfAorCQkJCUlYUDI0MDBfUlhfTU9ERV9NUEhZXzMyIHwKKwkJCQlJWFAyNDAwX1JYX01PREVfTVBIWV9QT0xMRURfU1RBVFVTIHwKKwkJCQlJWFAyNDAwX1JYX01PREVfTVBIWV9MRVZFTDMgfAorCQkJCUlYUDI0MDBfUlhfTU9ERV9SQlVGX1NJWkVfNjQsCisKKwkucnhjbGswMV9tdWx0aXBsaWVyID0JSVhQMjQwMF9QTExfTVVMVElQTElFUl8xNiwKKworCS5yeF9wb2xsX3BvcnRzID0JMywKKworCS5yeF9jaGFubmVsX21vZGUgPSB7CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX01BU1RFUiB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX1BPU19QSFkgfAorCQlJWFAyNDAwX1BPUlRfUlhfTU9ERV9QT1NfUEhZX0wzIHwKKwkJSVhQMjQwMF9QT1JUX1JYX01PREVfT0REX1BBUklUWSB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFXzJfQ1lDTEVfREVDT0RFLAorCisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX01BU1RFUiB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX1BPU19QSFkgfAorCQlJWFAyNDAwX1BPUlRfUlhfTU9ERV9QT1NfUEhZX0wzIHwKKwkJSVhQMjQwMF9QT1JUX1JYX01PREVfT0REX1BBUklUWSB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFXzJfQ1lDTEVfREVDT0RFLAorCisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX01BU1RFUiB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX1BPU19QSFkgfAorCQlJWFAyNDAwX1BPUlRfUlhfTU9ERV9QT1NfUEhZX0wzIHwKKwkJSVhQMjQwMF9QT1JUX1JYX01PREVfT0REX1BBUklUWSB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFXzJfQ1lDTEVfREVDT0RFLAorCisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX01BU1RFUiB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFX1BPU19QSFkgfAorCQlJWFAyNDAwX1BPUlRfUlhfTU9ERV9QT1NfUEhZX0wzIHwKKwkJSVhQMjQwMF9QT1JUX1JYX01PREVfT0REX1BBUklUWSB8CisJCUlYUDI0MDBfUE9SVF9SWF9NT0RFXzJfQ1lDTEVfREVDT0RFCisJfSwKKworCS50eF9tb2RlID0JCUlYUDI0MDBfVFhfTU9ERV9VVE9QSUFfUE9TIHwKKwkJCQlJWFAyNDAwX1RYX01PREVfMXgzMiB8CisJCQkJSVhQMjQwMF9UWF9NT0RFX01QSFkgfAorCQkJCUlYUDI0MDBfVFhfTU9ERV9NUEhZXzMyIHwKKwkJCQlJWFAyNDAwX1RYX01PREVfTVBIWV9QT0xMRURfU1RBVFVTIHwKKwkJCQlJWFAyNDAwX1RYX01PREVfTVBIWV9MRVZFTDMgfAorCQkJCUlYUDI0MDBfVFhfTU9ERV9UQlVGX1NJWkVfNjQsCisKKwkudHhjbGswMV9tdWx0aXBsaWVyID0JSVhQMjQwMF9QTExfTVVMVElQTElFUl8xNiwKKworCS50eF9wb2xsX3BvcnRzID0JMywKKworCS50eF9jaGFubmVsX21vZGUgPSB7CisJCUlYUDI0MDBfUE9SVF9UWF9NT0RFX01BU1RFUiB8CisJCUlYUDI0MDBfUE9SVF9UWF9NT0RFX1BPU19QSFkgfAorCQlJWFAyNDAwX1BPUlRfVFhfTU9ERV9PRERfUEFSSVRZIHwKKwkJSVhQMjQwMF9QT1JUX1RYX01PREVfMl9DWUNMRV9ERUNPREUsCisKKwkJSVhQMjQwMF9QT1JUX1RYX01PREVfTUFTVEVSIHwKKwkJSVhQMjQwMF9QT1JUX1RYX01PREVfUE9TX1BIWSB8CisJCUlYUDI0MDBfUE9SVF9UWF9NT0RFX09ERF9QQVJJVFkgfAorCQlJWFAyNDAwX1BPUlRfVFhfTU9ERV8yX0NZQ0xFX0RFQ09ERSwKKworCQlJWFAyNDAwX1BPUlRfVFhfTU9ERV9NQVNURVIgfAorCQlJWFAyNDAwX1BPUlRfVFhfTU9ERV9QT1NfUEhZIHwKKwkJSVhQMjQwMF9QT1JUX1RYX01PREVfT0REX1BBUklUWSB8CisJCUlYUDI0MDBfUE9SVF9UWF9NT0RFXzJfQ1lDTEVfREVDT0RFLAorCisJCUlYUDI0MDBfUE9SVF9UWF9NT0RFX01BU1RFUiB8CisJCUlYUDI0MDBfUE9SVF9UWF9NT0RFX1BPU19QSFkgfAorCQlJWFAyNDAwX1BPUlRfVFhfTU9ERV9PRERfUEFSSVRZIHwKKwkJSVhQMjQwMF9QT1JUX1RYX01PREVfMl9DWUNMRV9ERUNPREUKKwl9Cit9OworCitzdHJ1Y3QgZW5wMjYxMV9peHBkZXZfcHJpdgoreworCXN0cnVjdCBpeHBkZXZfcHJpdgkJaXhwZGV2X3ByaXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJCXN0YXRzOworfTsKKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZHNbM107CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgbGlua19jaGVja190aW1lcjsKKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplbnAyNjExX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2ICppcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlwbTMzODZfZ2V0X3N0YXRzKGlwLT5peHBkZXZfcHJpdi5jaGFubmVsLCAmKGlwLT5zdGF0cykpOworCisJcmV0dXJuICYoaXAtPnN0YXRzKTsKK30KKworLyogQEBAIFBvbGwgdGhlIFNGUCBtb2RkZWYwIGxpbmUgdG9vLiAgKi8KKy8qIEBAQCBUcnkgdG8gdXNlIHRoZSBwbTMzODYgRE9PTCBpbnRlcnJ1cHQgYXMgd2VsbC4gICovCitzdGF0aWMgdm9pZCBlbnAyNjExX2NoZWNrX2xpbmtfc3RhdHVzKHVuc2lnbmVkIGxvbmcgX19kdW1teSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwkJaW50IHN0YXR1czsKKworCQlkZXYgPSBuZHNbaV07CisKKwkJc3RhdHVzID0gcG0zMzg2X2lzX2xpbmtfdXAoaSk7CisJCWlmIChzdGF0dXMgJiYgIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQkJLyogQEBAIFNob3VsZCByZXBvcnQgYXV0b25lZ290aWF0aW9uIHN0YXR1cy4gICovCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogTklDIExpbmsgaXMgVXBcbiIsIGRldi0+bmFtZSk7CisKKwkJCXBtMzM4Nl9lbmFibGVfdHgoaSk7CisJCQljYWxlYl9lbmFibGVfdHgoaSk7CisJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCX0gZWxzZSBpZiAoIXN0YXR1cyAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBOSUMgTGluayBpcyBEb3duXG4iLCBkZXYtPm5hbWUpOworCisJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCQkJY2FsZWJfZGlzYWJsZV90eChpKTsKKwkJCXBtMzM4Nl9kaXNhYmxlX3R4KGkpOworCQl9CisJfQorCisJbGlua19jaGVja190aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaIC8gMTA7CisJYWRkX3RpbWVyKCZsaW5rX2NoZWNrX3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgZW5wMjYxMV9zZXRfcG9ydF9hZG1pbl9zdGF0dXMoaW50IHBvcnQsIGludCB1cCkKK3sKKwlpZiAodXApIHsKKwkJY2FsZWJfZW5hYmxlX3J4KHBvcnQpOworCisJCXBtMzM4Nl9zZXRfY2Fycmllcihwb3J0LCAxKTsKKwkJcG0zMzg2X2VuYWJsZV9yeChwb3J0KTsKKwl9IGVsc2UgeworCQljYWxlYl9kaXNhYmxlX3R4KHBvcnQpOworCQlwbTMzODZfZGlzYWJsZV90eChwb3J0KTsKKwkJLyogQEBAIEZsdXNoIG91dCBwZW5kaW5nIHBhY2tldHMuICAqLworCQlwbTMzODZfc2V0X2NhcnJpZXIocG9ydCwgMCk7CisKKwkJcG0zMzg2X2Rpc2FibGVfcngocG9ydCk7CisJCWNhbGViX2Rpc2FibGVfcngocG9ydCk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBlbnAyNjExX2luaXRfbW9kdWxlKHZvaWQpCit7IAorCWludCBpOworCisJaWYgKCFtYWNoaW5lX2lzX2VucDI2MTEoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljYWxlYl9yZXNldCgpOworCXBtMzM4Nl9yZXNldCgpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQluZHNbaV0gPSBpeHBkZXZfYWxsb2MoaSwgc2l6ZW9mKHN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2KSk7CisJCWlmIChuZHNbaV0gPT0gTlVMTCkgeworCQkJd2hpbGUgKC0taSA+PSAwKQorCQkJCWZyZWVfbmV0ZGV2KG5kc1tpXSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCVNFVF9NT0RVTEVfT1dORVIobmRzW2ldKTsKKwkJbmRzW2ldLT5nZXRfc3RhdHMgPSBlbnAyNjExX2dldF9zdGF0czsKKwkJcG0zMzg2X2luaXRfcG9ydChpKTsKKwkJcG0zMzg2X2dldF9tYWMoaSwgbmRzW2ldLT5kZXZfYWRkcik7CisJfQorCisJaXhwMjQwMF9tc2ZfaW5pdCgmZW5wMjYxMV9tc2ZfcGFyYW1ldGVycyk7CisKKwlpZiAoaXhwZGV2X2luaXQoMywgbmRzLCBlbnAyNjExX3NldF9wb3J0X2FkbWluX3N0YXR1cykpIHsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCWZyZWVfbmV0ZGV2KG5kc1tpXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluaXRfdGltZXIoJmxpbmtfY2hlY2tfdGltZXIpOworCWxpbmtfY2hlY2tfdGltZXIuZnVuY3Rpb24gPSBlbnAyNjExX2NoZWNrX2xpbmtfc3RhdHVzOworCWxpbmtfY2hlY2tfdGltZXIuZXhwaXJlcyA9IGppZmZpZXM7CisJYWRkX3RpbWVyKCZsaW5rX2NoZWNrX3RpbWVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZW5wMjYxMV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWludCBpOworCisJZGVsX3RpbWVyX3N5bmMoJmxpbmtfY2hlY2tfdGltZXIpOworCisJaXhwZGV2X2RlaW5pdCgpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWZyZWVfbmV0ZGV2KG5kc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KGVucDI2MTFfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZW5wMjYxMV9jbGVhbnVwX21vZHVsZSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDAtbXNmLmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDAtbXNmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhM2E4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwMjQwMC1tc2YuYwpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIEdlbmVyaWMgbGlicmFyeSBmdW5jdGlvbnMgZm9yIHRoZSBNU0YgKE1lZGlhIGFuZCBTd2l0Y2ggRmFicmljKSB1bml0CisgKiBmb3VuZCBvbiB0aGUgSW50ZWwgSVhQMjQwMCBuZXR3b3JrIHByb2Nlc3Nvci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9peHAyMDAwLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlICJpeHAyNDAwLW1zZi5oIgorCisvKgorICogVGhpcyBpcyB0aGUgSW50ZWwgcmVjb21tZW5kZWQgUExMIGluaXQgcHJvY2VkdXJlIGFzIGRlc2NyaWJlZCBvbgorICogcGFnZSAzNDAgb2YgdGhlIElYUDI0MDAvSVhQMjgwMCBQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlIE1hbnVhbC4KKyAqLworc3RhdGljIHZvaWQgaXhwMjQwMF9wbGxfaW5pdChzdHJ1Y3QgaXhwMjQwMF9tc2ZfcGFyYW1ldGVycyAqbXApCit7CisJaW50IHJ4X2R1YWxfY2xvY2s7CisJaW50IHR4X2R1YWxfY2xvY2s7CisJdTMyIHZhbHVlOworCisJLyoKKwkgKiBJZiB0aGUgUlggbW9kZSBpcyBub3QgMXgzMiwgd2UgaGF2ZSB0byBlbmFibGUgYm90aCBSWCBQTExzCisJICogKCMwIGFuZCAjMS4pICBUaGUgc2FtZSB0aGluZyBmb3IgdGhlIFRYIGRpcmVjdGlvbi4KKwkgKi8KKwlyeF9kdWFsX2Nsb2NrID0gISEobXAtPnJ4X21vZGUgJiBJWFAyNDAwX1JYX01PREVfV0lEVEhfTUFTSyk7CisJdHhfZHVhbF9jbG9jayA9ICEhKG1wLT50eF9tb2RlICYgSVhQMjQwMF9UWF9NT0RFX1dJRFRIX01BU0spOworCisJLyoKKwkgKiBSZWFkIGluaXRpYWwgdmFsdWUuCisJICovCisJdmFsdWUgPSBpeHAyMDAwX3JlZ19yZWFkKElYUDIwMDBfTVNGX0NMS19DTlRSTCk7CisKKwkvKgorCSAqIFB1dCBQTExzIGluIHBvd2VyZG93biBhbmQgYnlwYXNzIG1vZGUuCisJICovCisJdmFsdWUgfD0gMHgwMDAwZjBmMDsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX01TRl9DTEtfQ05UUkwsIHZhbHVlKTsKKworCS8qCisJICogU2V0IHNpbmdsZSBvciBkdWFsIGNsb2NrIG1vZGUgYml0cy4KKwkgKi8KKwl2YWx1ZSAmPSB+MHgwMzAwMDAwMDsKKwl2YWx1ZSB8PSAocnhfZHVhbF9jbG9jayA8PCAyNCkgfCAodHhfZHVhbF9jbG9jayA8PCAyNSk7CisKKwkvKgorCSAqIFNldCBtdWx0aXBsaWVycy4KKwkgKi8KKwl2YWx1ZSAmPSB+MHgwMGZmMDAwMDsKKwl2YWx1ZSB8PSBtcC0+cnhjbGswMV9tdWx0aXBsaWVyIDw8IDE2OworCXZhbHVlIHw9IG1wLT5yeGNsazIzX211bHRpcGxpZXIgPDwgMTg7CisJdmFsdWUgfD0gbXAtPnR4Y2xrMDFfbXVsdGlwbGllciA8PCAyMDsKKwl2YWx1ZSB8PSBtcC0+dHhjbGsyM19tdWx0aXBsaWVyIDw8IDIyOworCisJLyoKKwkgKiBBbmQgd3JpdGUgdmFsdWUuCisJICovCisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9NU0ZfQ0xLX0NOVFJMLCB2YWx1ZSk7CisKKwkvKgorCSAqIERpc2FibGUgUExMIGJ5cGFzcyBtb2RlLgorCSAqLworCXZhbHVlICY9IH4oMHgwMDAwNTAwMCB8IHJ4X2R1YWxfY2xvY2sgPDwgMTMgfCB0eF9kdWFsX2Nsb2NrIDw8IDE1KTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX01TRl9DTEtfQ05UUkwsIHZhbHVlKTsKKworCS8qCisJICogVHVybiBvbiBQTExzLgorCSAqLworCXZhbHVlICY9IH4oMHgwMDAwMDA1MCB8IHJ4X2R1YWxfY2xvY2sgPDwgNSB8IHR4X2R1YWxfY2xvY2sgPDwgNyk7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9NU0ZfQ0xLX0NOVFJMLCB2YWx1ZSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIFBMTHMgdG8gbG9jay4gIFRoZXJlIGFyZSBsb2NrIHN0YXR1cyBiaXRzLCBidXQgSVhQMjQwMAorCSAqIGVycmF0dW0gIzY1IHNheXMgdGhhdCB0aGVzZSBsb2NrIGJpdHMgc2hvdWxkIG5vdCBiZSByZWxpZWQgdXBvbgorCSAqIGFzIHRoZXkgbWlnaHQgbm90IGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgdHJ1ZSBzdGF0ZSBvZiB0aGUgUExMcy4KKwkgKi8KKwl1ZGVsYXkoMTAwKTsKK30KKworLyoKKyAqIE5lZWRlZCBhY2NvcmRpbmcgdG8gcDQ4MCBvZiBQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlIE1hbnVhbC4KKyAqLworc3RhdGljIHZvaWQgaXhwMjQwMF9tc2ZfZnJlZV9yYnVmX2VudHJpZXMoc3RydWN0IGl4cDI0MDBfbXNmX3BhcmFtZXRlcnMgKm1wKQoreworCWludCBzaXplX2JpdHM7CisJaW50IGk7CisKKwkvKgorCSAqIFdvcmsgYXJvdW5kIElYUDI0MDAgZXJyYXR1bSAjNjkgKHNpbGVudCBSQlVGLXRvLURSQU0gdHJhbnNmZXIKKwkgKiBjb3JydXB0aW9uKSBpbiB0aGUgSW50ZWwtcmVjb21tZW5kZWQgd2F5OiBkbyBub3QgYWRkIHRoZSBSQlVGCisJICogZWxlbWVudHMgc3VzY2VwdGlibGUgdG8gY29ycnVwdGlvbiB0byB0aGUgZnJlZWxpc3QuCisJICovCisJc2l6ZV9iaXRzID0gbXAtPnJ4X21vZGUgJiBJWFAyNDAwX1JYX01PREVfUkJVRl9TSVpFX01BU0s7CisJaWYgKHNpemVfYml0cyA9PSBJWFAyNDAwX1JYX01PREVfUkJVRl9TSVpFXzY0KSB7CisJCWZvciAoaSA9IDE7IGkgPCAxMjg7IGkrKykgeworCQkJaWYgKGkgPT0gOSB8fCBpID09IDE4IHx8IGkgPT0gMjcpCisJCQkJY29udGludWU7CisJCQlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX01TRl9SQlVGX0VMRU1FTlRfRE9ORSwgaSk7CisJCX0KKwl9IGVsc2UgaWYgKHNpemVfYml0cyA9PSBJWFAyNDAwX1JYX01PREVfUkJVRl9TSVpFXzEyOCkgeworCQlmb3IgKGkgPSAxOyBpIDwgNjQ7IGkrKykgeworCQkJaWYgKGkgPT0gNCB8fCBpID09IDkgfHwgaSA9PSAxMykKKwkJCQljb250aW51ZTsKKwkJCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfTVNGX1JCVUZfRUxFTUVOVF9ET05FLCBpKTsKKwkJfQorCX0gZWxzZSBpZiAoc2l6ZV9iaXRzID09IElYUDI0MDBfUlhfTU9ERV9SQlVGX1NJWkVfMjU2KSB7CisJCWZvciAoaSA9IDE7IGkgPCAzMjsgaSsrKSB7CisJCQlpZiAoaSA9PSAyIHx8IGkgPT0gNCB8fCBpID09IDYpCisJCQkJY29udGludWU7CisJCQlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX01TRl9SQlVGX0VMRU1FTlRfRE9ORSwgaSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1MzIgaXhwMjQwMF9tc2ZfdmFsaWRfY2hhbm5lbHModTMyIHJlZykKK3sKKwl1MzIgY2hhbm5lbHM7CisKKwljaGFubmVscyA9IDA7CisJc3dpdGNoIChyZWcgJiBJWFAyNDAwX1JYX01PREVfV0lEVEhfTUFTSykgeworCWNhc2UgSVhQMjQwMF9SWF9NT0RFXzF4MzI6CisJCWNoYW5uZWxzID0gMHgxOworCQlpZiAocmVnICYgSVhQMjQwMF9SWF9NT0RFX01QSFkgJiYKKwkJICAgICEocmVnICYgSVhQMjQwMF9SWF9NT0RFX01QSFlfMzIpKQorCQkJY2hhbm5lbHMgPSAweGY7CisJCWJyZWFrOworCisJY2FzZSBJWFAyNDAwX1JYX01PREVfMngxNjoKKwkJY2hhbm5lbHMgPSAweDU7CisJCWJyZWFrOworCisJY2FzZSBJWFAyNDAwX1JYX01PREVfNHg4OgorCQljaGFubmVscyA9IDB4ZjsKKwkJYnJlYWs7CisKKwljYXNlIElYUDI0MDBfUlhfTU9ERV8xeDE2XzJ4ODoKKwkJY2hhbm5lbHMgPSAweGQ7CisJCWJyZWFrOworCX0KKworCXJldHVybiBjaGFubmVsczsKK30KKworc3RhdGljIHZvaWQgaXhwMjQwMF9tc2ZfZW5hYmxlX3J4KHN0cnVjdCBpeHAyNDAwX21zZl9wYXJhbWV0ZXJzICptcCkKK3sKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IGl4cDIwMDBfcmVnX3JlYWQoSVhQMjAwMF9NU0ZfUlhfQ09OVFJPTCkgJiAweDBmZmZmZmZmOworCXZhbHVlIHw9IGl4cDI0MDBfbXNmX3ZhbGlkX2NoYW5uZWxzKG1wLT5yeF9tb2RlKSA8PCAyODsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX01TRl9SWF9DT05UUk9MLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGl4cDI0MDBfbXNmX2VuYWJsZV90eChzdHJ1Y3QgaXhwMjQwMF9tc2ZfcGFyYW1ldGVycyAqbXApCit7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBpeHAyMDAwX3JlZ19yZWFkKElYUDIwMDBfTVNGX1RYX0NPTlRST0wpICYgMHgwZmZmZmZmZjsKKwl2YWx1ZSB8PSBpeHAyNDAwX21zZl92YWxpZF9jaGFubmVscyhtcC0+dHhfbW9kZSkgPDwgMjg7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9NU0ZfVFhfQ09OVFJPTCwgdmFsdWUpOworfQorCisKK3ZvaWQgaXhwMjQwMF9tc2ZfaW5pdChzdHJ1Y3QgaXhwMjQwMF9tc2ZfcGFyYW1ldGVycyAqbXApCit7CisJdTMyIHZhbHVlOworCWludCBpOworCisJLyoKKwkgKiBJbml0IHRoZSBSWC9UWCBQTExzIGJhc2VkIG9uIHRoZSBwYXNzZWQgcGFyYW1ldGVyIGJsb2NrLgorCSAqLworCWl4cDI0MDBfcGxsX2luaXQobXApOworCisJLyoKKwkgKiBSZXNldCBNU0YuICBCaXQgNyBpbiBJWFBfUkVTRVRfMCByZXNldHMgdGhlIE1TRi4KKwkgKi8KKwl2YWx1ZSA9IGl4cDIwMDBfcmVnX3JlYWQoSVhQMjAwMF9SRVNFVDApOworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfUkVTRVQwLCB2YWx1ZSB8IDB4ODApOworCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfUkVTRVQwLCB2YWx1ZSAmIH4weDgwKTsKKworCS8qCisJICogSW5pdGlhbGlzZSB0aGUgUlggc2VjdGlvbi4KKwkgKi8KKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX01TRl9SWF9NUEhZX1BPTExfTElNSVQsIG1wLT5yeF9wb2xsX3BvcnRzIC0gMSk7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9NU0ZfUlhfQ09OVFJPTCwgbXAtPnJ4X21vZGUpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9NU0ZfUlhfVVBfQ09OVFJPTF8wICsgaSwKKwkJCQkJCW1wLT5yeF9jaGFubmVsX21vZGVbaV0pOworCX0KKwlpeHAyNDAwX21zZl9mcmVlX3JidWZfZW50cmllcyhtcCk7CisJaXhwMjQwMF9tc2ZfZW5hYmxlX3J4KG1wKTsKKworCS8qCisJICogSW5pdGlhbGlzZSB0aGUgVFggc2VjdGlvbi4KKwkgKi8KKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX01TRl9UWF9NUEhZX1BPTExfTElNSVQsIG1wLT50eF9wb2xsX3BvcnRzIC0gMSk7CisJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9NU0ZfVFhfQ09OVFJPTCwgbXAtPnR4X21vZGUpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9NU0ZfVFhfVVBfQ09OVFJPTF8wICsgaSwKKwkJCQkJCW1wLT50eF9jaGFubmVsX21vZGVbaV0pOworCX0KKwlpeHAyNDAwX21zZl9lbmFibGVfdHgobXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwLW1zZi5oIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwLW1zZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzFhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDAtbXNmLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBHZW5lcmljIGxpYnJhcnkgZnVuY3Rpb25zIGZvciB0aGUgTVNGIChNZWRpYSBhbmQgU3dpdGNoIEZhYnJpYykgdW5pdAorICogZm91bmQgb24gdGhlIEludGVsIElYUDI0MDAgbmV0d29yayBwcm9jZXNzb3IuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICogRGVkaWNhdGVkIHRvIE1hcmlqYSBLdWxpa292YS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19JWFAyNDAwX01TRl9ICisjZGVmaW5lIF9fSVhQMjQwMF9NU0ZfSAorCitzdHJ1Y3QgaXhwMjQwMF9tc2ZfcGFyYW1ldGVycworeworCXUzMgkJCQlyeF9tb2RlOworCXVuc2lnbmVkCQkJcnhjbGswMV9tdWx0aXBsaWVyOjI7CisJdW5zaWduZWQJCQlyeGNsazIzX211bHRpcGxpZXI6MjsKKwl1bnNpZ25lZAkJCXJ4X3BvbGxfcG9ydHM6NjsKKwl1MzIJCQkJcnhfY2hhbm5lbF9tb2RlWzRdOworCisJdTMyCQkJCXR4X21vZGU7CisJdW5zaWduZWQJCQl0eGNsazAxX211bHRpcGxpZXI6MjsKKwl1bnNpZ25lZAkJCXR4Y2xrMjNfbXVsdGlwbGllcjoyOworCXVuc2lnbmVkCQkJdHhfcG9sbF9wb3J0czo2OworCXUzMgkJCQl0eF9jaGFubmVsX21vZGVbNF07Cit9OworCit2b2lkIGl4cDI0MDBfbXNmX2luaXQoc3RydWN0IGl4cDI0MDBfbXNmX3BhcmFtZXRlcnMgKm1wKTsKKworI2RlZmluZSBJWFAyNDAwX1BMTF9NVUxUSVBMSUVSXzQ4CQkweDAwCisjZGVmaW5lIElYUDI0MDBfUExMX01VTFRJUExJRVJfMjQJCTB4MDEKKyNkZWZpbmUgSVhQMjQwMF9QTExfTVVMVElQTElFUl8xNgkJMHgwMgorI2RlZmluZSBJWFAyNDAwX1BMTF9NVUxUSVBMSUVSXzEyCQkweDAzCisKKyNkZWZpbmUgSVhQMjQwMF9SWF9NT0RFX0NTSVgJCQkweDAwNDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9VVE9QSUFfUE9TCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9XSURUSF9NQVNLCQkweDAwMzAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV8xeDE2XzJ4OAkJMHgwMDMwMDAwMAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfNHg4CQkJMHgwMDIwMDAwMAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfMngxNgkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9SWF9NT0RFXzF4MzIJCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9NUEhZCQkJMHgwMDA4MDAwMAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfU1BIWQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9SWF9NT0RFX01QSFlfMzIJCQkweDAwMDQwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9NUEhZXzQJCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9NUEhZX1BPTExFRF9TVEFUVVMJMHgwMDAyMDAwMAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfTVBIWV9ESVJFQ1RfU1RBVFVTCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9SWF9NT0RFX0NCVVNfRlVMTF9EVVBMRVgJMHgwMDAxMDAwMAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfQ0JVU19TSU1QTEVYCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9NUEhZX0xFVkVMMgkJMHgwMDAwNDAwMAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfTVBIWV9MRVZFTDMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9SWF9NT0RFX0NCVVNfOEJJVAkJMHgwMDAwMjAwMAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfQ0JVU180QklUCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9DU0lYX1NJTkdMRV9GUkVFTElTVAkweDAwMDAwMjAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9DU0lYX1NQTElUX0ZSRUVMSVNUUwkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUlhfTU9ERV9SQlVGX1NJWkVfTUFTSwkJMHgwMDAwMDAwYworI2RlZmluZSBJWFAyNDAwX1JYX01PREVfUkJVRl9TSVpFXzI1NgkJMHgwMDAwMDAwOAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfUkJVRl9TSVpFXzEyOAkJMHgwMDAwMDAwNAorI2RlZmluZSBJWFAyNDAwX1JYX01PREVfUkJVRl9TSVpFXzY0CQkweDAwMDAwMDAwCisKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1JYX01PREVfU0xBVkUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1JYX01PREVfTUFTVEVSCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUE9SVF9SWF9NT0RFX1BPU19QSFlfTDMJCTB4MDAwMDAwMjAKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1JYX01PREVfUE9TX1BIWV9MMgkJMHgwMDAwMDAwMAorI2RlZmluZSBJWFAyNDAwX1BPUlRfUlhfTU9ERV9QT1NfUEhZCQkweDAwMDAwMDEwCisjZGVmaW5lIElYUDI0MDBfUE9SVF9SWF9NT0RFX1VUT1BJQQkJMHgwMDAwMDAwMAorI2RlZmluZSBJWFAyNDAwX1BPUlRfUlhfTU9ERV9FVkVOX1BBUklUWQkweDAwMDAwMDBjCisjZGVmaW5lIElYUDI0MDBfUE9SVF9SWF9NT0RFX09ERF9QQVJJVFkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1JYX01PREVfTk9fUEFSSVRZCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUE9SVF9SWF9NT0RFX1VUT1BJQV9CSUdfQ0VMTFMJMHgwMDAwMDAwMgorI2RlZmluZSBJWFAyNDAwX1BPUlRfUlhfTU9ERV9VVE9QSUFfTk9STUFMX0NFTExTCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1JYX01PREVfMl9DWUNMRV9ERUNPREUJMHgwMDAwMDAwMQorI2RlZmluZSBJWFAyNDAwX1BPUlRfUlhfTU9ERV8xX0NZQ0xFX0RFQ09ERQkweDAwMDAwMDAwCisKKyNkZWZpbmUgSVhQMjQwMF9UWF9NT0RFX0NTSVgJCQkweDAwNDAwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV9VVE9QSUFfUE9TCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV9XSURUSF9NQVNLCQkweDAwMzAwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV8xeDE2XzJ4OAkJMHgwMDMwMDAwMAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfNHg4CQkJMHgwMDIwMDAwMAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfMngxNgkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9UWF9NT0RFXzF4MzIJCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV9NUEhZCQkJMHgwMDA4MDAwMAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfU1BIWQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9UWF9NT0RFX01QSFlfMzIJCQkweDAwMDQwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV9NUEhZXzQJCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV9NUEhZX1BPTExFRF9TVEFUVVMJMHgwMDAyMDAwMAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfTVBIWV9ESVJFQ1RfU1RBVFVTCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9UWF9NT0RFX0NCVVNfRlVMTF9EVVBMRVgJMHgwMDAxMDAwMAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfQ0JVU19TSU1QTEVYCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV9NUEhZX0xFVkVMMgkJMHgwMDAwNDAwMAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfTVBIWV9MRVZFTDMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9UWF9NT0RFX0NCVVNfOEJJVAkJMHgwMDAwMjAwMAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfQ0JVU180QklUCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfVFhfTU9ERV9UQlVGX1NJWkVfTUFTSwkJMHgwMDAwMDAwYworI2RlZmluZSBJWFAyNDAwX1RYX01PREVfVEJVRl9TSVpFXzI1NgkJMHgwMDAwMDAwOAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfVEJVRl9TSVpFXzEyOAkJMHgwMDAwMDAwNAorI2RlZmluZSBJWFAyNDAwX1RYX01PREVfVEJVRl9TSVpFXzY0CQkweDAwMDAwMDAwCisKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1RYX01PREVfU0xBVkUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1RYX01PREVfTUFTVEVSCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUE9SVF9UWF9NT0RFX1BPU19QSFkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1RYX01PREVfVVRPUElBCQkweDAwMDAwMDAwCisjZGVmaW5lIElYUDI0MDBfUE9SVF9UWF9NT0RFX0VWRU5fUEFSSVRZCTB4MDAwMDAwMGMKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1RYX01PREVfT0REX1BBUklUWQkJMHgwMDAwMDAwOAorI2RlZmluZSBJWFAyNDAwX1BPUlRfVFhfTU9ERV9OT19QQVJJVFkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1RYX01PREVfVVRPUElBX0JJR19DRUxMUwkweDAwMDAwMDAyCisjZGVmaW5lIElYUDI0MDBfUE9SVF9UWF9NT0RFXzJfQ1lDTEVfREVDT0RFCTB4MDAwMDAwMDEKKyNkZWZpbmUgSVhQMjQwMF9QT1JUX1RYX01PREVfMV9DWUNMRV9ERUNPREUJMHgwMDAwMDAwMAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwX3J4LnVjIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwX3J4LnVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTczZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDBfcngudWMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBSWCB1Y29kZSBmb3IgdGhlIEludGVsIElYUDI0MDAgaW4gUE9TLVBIWSBtb2RlLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IExlbm5lcnQgQnV5dGVuaGVrCisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQXNzdW1wdGlvbnMgbWFkZSBpbiB0aGlzIGNvZGU6CisgKiAtIFRoZSBJWFAyNDAwIE1TRiBpcyBjb25maWd1cmVkIGZvciBQT1MtUEhZIG1vZGUsIGluIGEgbW9kZSB3aGVyZQorICogICBvbmx5IG9uZSBmdWxsIGVsZW1lbnQgbGlzdCBpcyB1c2VkLiAgVGhpcyBpbmNsdWRlcywgZm9yIGV4YW1wbGUsCisgKiAgIDF4MzIgU1BIWSBhbmQgMXgzMiBNUEhZMzIsIGJ1dCBub3QgNHg4IFNQSFkgb3IgMXgzMiBNUEhZNC4gIChUaGlzCisgKiAgIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QuKQorICogLSBUaGUgUkJVRiB1c2VzIDY0LWJ5dGUgbXBhY2tldHMuCisgKiAtIFJYIGRlc2NyaXB0b3JzIHJlc2lkZSBpbiBTUkFNLCBhbmQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAqCXN0cnVjdCByeF9kZXNjCisgKgl7CisgKgkvLyB0byB1ZW5naW5lCisgKgkJdTMyCWJ1Zl9waHlzX2FkZHI7CisgKgkJdTMyCWJ1Zl9sZW5ndGg7CisgKgorICoJLy8gZnJvbSB1ZW5naW5lCisgKgkJdTMyCWNoYW5uZWw7CisgKgkJdTMyCXBrdF9sZW5ndGg7CisgKgl9OworICogLSBQYWNrZXQgZGF0YSByZXNpZGVzIGluIERSQU0uCisgKiAtIFBhY2tldCBidWZmZXIgYWRkcmVzc2VzIGFyZSA4LWJ5dGUgYWxpZ25lZC4KKyAqIC0gU2NyYXRjaCByaW5nIDAgaXMgcnhfcGVuZGluZy4KKyAqIC0gU2NyYXRjaCByaW5nIDEgaXMgcnhfZG9uZSwgYW5kIGhhcyBzdGF0dXMgY29uZGl0aW9uICdmdWxsJy4KKyAqIC0gVGhlIGhvc3QgdHJpZ2dlcnMgcnhfZG9uZSBmbHVzaCBhbmQgcnhfcGVuZGluZyByZWZpbGwgb24gc2VlaW5nIElOVEEuCisgKiAtIFRoaXMgY29kZSBpcyBydW4gb24gYWxsIGVpZ2h0IHRocmVhZHMgb2YgdGhlIG1pY3JvZW5naW5lIGl0IHJ1bnMgb24uCisgKgorICogTG9jYWwgbWVtb3J5IGlzIHVzZWQgZm9yIHBlci1jaGFubmVsIFJYIHN0YXRlLgorICovCisKKyNkZWZpbmUgUlhfVEhSRUFEX0ZSRUVMSVNUXzAJCTB4MDAzMAorI2RlZmluZSBSQlVGX0VMRU1FTlRfRE9ORQkJMHgwMDQ0CisKKyNkZWZpbmUgQ0hBTk5FTF9GTEFHUwkJCSpsJGluZGV4MFswXQorI2RlZmluZSBDSEFOTkVMX0ZMQUdfUkVDRUlWSU5HCQkxCisjZGVmaW5lIFBBQ0tFVF9MRU5HVEgJCQkqbCRpbmRleDBbMV0KKyNkZWZpbmUgUEFDS0VUX0NIRUNLU1VNCQkJKmwkaW5kZXgwWzJdCisjZGVmaW5lIEJVRkZFUl9IQU5ETEUJCQkqbCRpbmRleDBbM10KKyNkZWZpbmUgQlVGRkVSX1NUQVJUCQkJKmwkaW5kZXgwWzRdCisjZGVmaW5lIEJVRkZFUl9MRU5HVEgJCQkqbCRpbmRleDBbNV0KKworI2RlZmluZSBDSEFOTkVMX1NUQVRFX1NJWkUJCTI0CS8vIGluIGJ5dGVzCisjZGVmaW5lIENIQU5ORUxfU1RBVEVfU0hJRlQJCTUJLy8gY2VpbChsb2cyKHN0YXRlIHNpemUpKQorCisKKwkuc2lnIHZvbGF0aWxlIHNpZzEKKwkuc2lnIHZvbGF0aWxlIHNpZzIKKwkuc2lnIHZvbGF0aWxlIHNpZzMKKworCS5zaWcgbXBhY2tldF9hcnJpdmVkCisJLnJlZyBhZGRfdG9fcnhfZnJlZWxpc3QKKwkucmVnIHJlYWQgJHJzdzAsICRyc3cxCisJLnhmZXJfb3JkZXIgJHJzdzAgJHJzdzEKKworCS5yZWcgemVybworCisJLyoKKwkgKiBJbml0aWFsaXNlIGFkZF90b19yeF9mcmVlbGlzdC4KKwkgKi8KKwkuYmVnaW4KKwkJLnJlZyB0ZW1wCisJCS5yZWcgdGVtcDIKKworCQlpbW1lZFthZGRfdG9fcnhfZnJlZWxpc3QsIFJYX1RIUkVBRF9GUkVFTElTVF8wXQorCQlpbW1lZF93MVthZGRfdG9fcnhfZnJlZWxpc3QsICgmJHJzdzAgfCAoJm1wYWNrZXRfYXJyaXZlZCA8PCAxMikpXQorCisJCWxvY2FsX2Nzcl9yZFtBQ1RJVkVfQ1RYX1NUU10KKwkJaW1tZWRbdGVtcCwgMF0KKwkJYWx1W3RlbXAyLCB0ZW1wLCBhbmQsIDB4MWZdCisJCWFsdV9zaGZbYWRkX3RvX3J4X2ZyZWVsaXN0LCBhZGRfdG9fcnhfZnJlZWxpc3QsIG9yLCB0ZW1wMiwgPDwyMF0KKwkJYWx1W3RlbXAyLCB0ZW1wLCBhbmQsIDB4ODBdCisJCWFsdV9zaGZbYWRkX3RvX3J4X2ZyZWVsaXN0LCBhZGRfdG9fcnhfZnJlZWxpc3QsIG9yLCB0ZW1wMiwgPDwxOF0KKwkuZW5kCisKKwlpbW1lZFt6ZXJvLCAwXQorCisJLyoKKwkgKiBTa2lwIGNvbnRleHQgMCBpbml0aWFsaXNhdGlvbj8KKwkgKi8KKwkuYmVnaW4KKwkJYnIhPWN0eFswLCBtcGFja2V0X3JlY2VpdmVfbG9vcCNdCisJLmVuZAorCisJLyoKKwkgKiBJbml0aWFsaXNlIGxvY2FsIG1lbW9yeS4KKwkgKi8KKwkuYmVnaW4KKwkJLnJlZyBhZGRyCisJCS5yZWcgdGVtcAorCisJCWltbWVkW3RlbXAsIDBdCisJaW5pdF9sb2NhbF9tZW1fbG9vcCM6CisJCWFsdV9zaGZbYWRkciwgLS0sIGIsIHRlbXAsIDw8Q0hBTk5FTF9TVEFURV9TSElGVF0KKwkJbG9jYWxfY3NyX3dyW0FDVElWRV9MTV9BRERSXzAsIGFkZHJdCisJCW5vcAorCQlub3AKKwkJbm9wCisKKwkJaW1tZWRbQ0hBTk5FTF9GTEFHUywgMF0KKworCQlhbHVbdGVtcCwgdGVtcCwgKywgMV0KKwkJYWx1Wy0tLCB0ZW1wLCBhbmQsIDB4MjBdCisJCWJlcVtpbml0X2xvY2FsX21lbV9sb29wI10KKwkuZW5kCisKKwkvKgorCSAqIEluaXRpYWxpc2Ugc2lnbmFsIHBpcGVsaW5lLgorCSAqLworCS5iZWdpbgorCQlsb2NhbF9jc3Jfd3JbU0FNRV9NRV9TSUdOQUwsICgmc2lnMSA8PCAzKV0KKwkJLnNldF9zaWcgc2lnMQorCisJCWxvY2FsX2Nzcl93cltTQU1FX01FX1NJR05BTCwgKCZzaWcyIDw8IDMpXQorCQkuc2V0X3NpZyBzaWcyCisKKwkJbG9jYWxfY3NyX3dyW1NBTUVfTUVfU0lHTkFMLCAoJnNpZzMgPDwgMyldCisJCS5zZXRfc2lnIHNpZzMKKwkuZW5kCisKK21wYWNrZXRfcmVjZWl2ZV9sb29wIzoKKwkvKgorCSAqIFN5bmNocm9uaXNlIGFuZCB3YWl0IGZvciBtcGFja2V0LgorCSAqLworCS5iZWdpbgorCQljdHhfYXJiW3NpZzFdCisJCWxvY2FsX2Nzcl93cltTQU1FX01FX1NJR05BTCwgKDB4ODAgfCAoJnNpZzEgPDwgMykpXQorCisJCW1zZltmYXN0X3dyLCAtLSwgYWRkX3RvX3J4X2ZyZWVsaXN0LCAwXQorCQkuc2V0X3NpZyBtcGFja2V0X2Fycml2ZWQKKwkJY3R4X2FyYlttcGFja2V0X2Fycml2ZWRdCisJCS5zZXQgJHJzdzAgJHJzdzEKKwkuZW5kCisKKwkvKgorCSAqIFdlIGhhbHQgaWYgd2Ugc2VlIHtpbmJwYXJlcnIscGFyZXJyLG51bGwsc29wZXJyb3J9LgorCSAqLworCS5iZWdpbgorCQlhbHVfc2hmWy0tLCAweDFiLCBhbmQsICRyc3cwLCA+PjhdCisJCWJuZVthYm9ydF9yc3dlcnIjXQorCS5lbmQKKworCS8qCisJICogUG9pbnQgbG9jYWwgbWVtb3J5IHBvaW50ZXIgdG8gdGhpcyBjaGFubmVsJ3Mgc3RhdGUgYXJlYS4KKwkgKi8KKwkuYmVnaW4KKwkJLnJlZyBjaGFuYWRkcgorCisJCWFsdVtjaGFuYWRkciwgJHJzdzAsIGFuZCwgMHgxZl0KKwkJYWx1X3NoZltjaGFuYWRkciwgLS0sIGIsIGNoYW5hZGRyLCA8PENIQU5ORUxfU1RBVEVfU0hJRlRdCisJCWxvY2FsX2Nzcl93cltBQ1RJVkVfTE1fQUREUl8wLCBjaGFuYWRkcl0KKwkJbm9wCisJCW5vcAorCQlub3AKKwkuZW5kCisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgd2UgcmVjZWl2ZWQgYSBTT1AgbXBhY2tldCB3aGlsZSB3ZSB3ZXJlIGFscmVhZHkKKwkgKiB3b3JraW5nIG9uIGEgcGFja2V0LCBvciBhIG5vbi1TT1AgbXBhY2tldCB3aGlsZSB0aGVyZSB3YXMgbm8KKwkgKiBwYWNrZXQgcGVuZGluZy4gIChTT1AgPT0gUkVDRUlWSU5HIC0+IGFib3J0KSAgSWYgZXZlcnl0aGluZydzCisJICogb2theSwgdXBkYXRlIHRoZSBSRUNFSVZJTkcgZmxhZyB0byByZWZsZWN0IG91ciBuZXcgc3RhdGUuCisJICovCisJLmJlZ2luCisJCS5yZWcgdGVtcAorCQkucmVnIGVvcAorCisJCSNpZiBDSEFOTkVMX0ZMQUdfUkVDRUlWSU5HICE9IDEKKwkJI2Vycm9yIENIQU5ORUxfRkxBR19SRUNFSVZJTkcgaXMgbm90IDEKKwkJI2VuZGlmCisKKwkJYWx1X3NoZlt0ZW1wLCAxLCBhbmQsICRyc3cwLCA+PjE1XQorCQlhbHVbdGVtcCwgdGVtcCwgeG9yLCBDSEFOTkVMX0ZMQUdTXQorCQlhbHVbLS0sIHRlbXAsIGFuZCwgQ0hBTk5FTF9GTEFHX1JFQ0VJVklOR10KKwkJYmVxW2Fib3J0X3Byb3RlcnIjXQorCisJCWFsdV9zaGZbZW9wLCAxLCBhbmQsICRyc3cwLCA+PjE0XQorCQlhbHVbQ0hBTk5FTF9GTEFHUywgdGVtcCwgeG9yLCBlb3BdCisJLmVuZAorCisJLyoKKwkgKiBDb3B5IHRoZSBtcGFja2V0IGludG8gdGhlIHJpZ2h0IHNwb3QsIGFuZCBpbiBjYXNlIG9mIEVPUCwKKwkgKiB3cml0ZSBiYWNrIHRoZSBkZXNjcmlwdG9yIGFuZCBwYXNzIHRoZSBwYWNrZXQgb24uCisJICovCisJLmJlZ2luCisJCS5yZWcgYnVmZmVyX29mZnNldAorCQkucmVnIF9wYWNrZXRfbGVuZ3RoCisJCS5yZWcgX3BhY2tldF9jaGVja3N1bQorCQkucmVnIF9idWZmZXJfaGFuZGxlCisJCS5yZWcgX2J1ZmZlcl9zdGFydAorCQkucmVnIF9idWZmZXJfbGVuZ3RoCisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIGJ1ZmZlcl9vZmZzZXQsIF9wYWNrZXRfbGVuZ3RoIGFuZAorCQkgKiBfcGFja2V0X2NoZWNrc3VtLgorCQkgKi8KKwkJLmJlZ2luCisJCQkucmVnIHRlbXAKKworCQkJYWx1Wy0tLCAxLCBhbmQsICRyc3cwLCA+PjE1XQorCQkJYmVxW25vdF9zb3AjXQorCisJCQlpbW1lZFtQQUNLRVRfTEVOR1RILCAwXQorCQkJaW1tZWRbUEFDS0VUX0NIRUNLU1VNLCAwXQorCisJCW5vdF9zb3AjOgorCQkJYWx1W2J1ZmZlcl9vZmZzZXQsIC0tLCBiLCBQQUNLRVRfTEVOR1RIXQorCQkJYWx1X3NoZlt0ZW1wLCAweGZmLCBhbmQsICRyc3cwLCA+PjE2XQorCQkJYWx1W19wYWNrZXRfbGVuZ3RoLCBidWZmZXJfb2Zmc2V0LCArLCB0ZW1wXQorCQkJYWx1W1BBQ0tFVF9MRU5HVEgsIC0tLCBiLCBfcGFja2V0X2xlbmd0aF0KKworCQkJaW1tZWRbdGVtcCwgMHhmZmZmXQorCQkJYWx1W3RlbXAsICRyc3cxLCBhbmQsIHRlbXBdCisJCQlhbHVbX3BhY2tldF9jaGVja3N1bSwgUEFDS0VUX0NIRUNLU1VNLCArLCB0ZW1wXQorCQkJYWx1W1BBQ0tFVF9DSEVDS1NVTSwgLS0sIGIsIF9wYWNrZXRfY2hlY2tzdW1dCisJCS5lbmQKKworCQkvKgorCQkgKiBBbGxvY2F0ZSBidWZmZXIgaW4gY2FzZSBvZiBTT1AuCisJCSAqLworCQkuYmVnaW4KKwkJCS5yZWcgdGVtcAorCisJCQlhbHVbdGVtcCwgMSwgYW5kLCAkcnN3MCwgPj4xNV0KKwkJCWJlcVtza2lwX2J1ZmZlcl9hbGxvYyNdCisKKwkJCS5iZWdpbgorCQkJCS5zaWcgenp6CisJCQkJLnJlZyByZWFkICRzdGVtcCAkc3RlbXAyCisJCQkJLnhmZXJfb3JkZXIgJHN0ZW1wICRzdGVtcDIKKworCQkJcnhfbm9idWZzIzoKKwkJCQlzY3JhdGNoW2dldCwgJHN0ZW1wLCB6ZXJvLCAwLCAxXSwgY3R4X3N3YXBbenp6XQorCQkJCWFsdVtfYnVmZmVyX2hhbmRsZSwgLS0sIGIsICRzdGVtcF0KKwkJCQliZXFbcnhfbm9idWZzI10KKworCQkJCXNyYW1bcmVhZCwgJHN0ZW1wLCBfYnVmZmVyX2hhbmRsZSwgMCwgMl0sCisJCQkJCQkJCWN0eF9zd2FwW3p6el0KKwkJCQlhbHVbX2J1ZmZlcl9zdGFydCwgLS0sIGIsICRzdGVtcF0KKwkJCQlhbHVbX2J1ZmZlcl9sZW5ndGgsIC0tLCBiLCAkc3RlbXAyXQorCQkJLmVuZAorCisJCXNraXBfYnVmZmVyX2FsbG9jIzoKKwkJLmVuZAorCisJCS8qCisJCSAqIFJlc3luY2hyb25pc2UuCisJCSAqLworCQkuYmVnaW4KKwkJCWN0eF9hcmJbc2lnMl0KKwkJCWxvY2FsX2Nzcl93cltTQU1FX01FX1NJR05BTCwgKDB4ODAgfCAoJnNpZzIgPDwgMykpXQorCQkuZW5kCisKKwkJLyoKKwkJICogU3luY2hyb25pc2UgYnVmZmVyIHN0YXRlLgorCQkgKi8KKwkJLmJlZ2luCisJCQkucmVnIHRlbXAKKworCQkJYWx1W3RlbXAsIDEsIGFuZCwgJHJzdzAsID4+MTVdCisJCQliZXFbY29weV9mcm9tX2xvY2FsX21lbSNdCisKKwkJCWFsdVtCVUZGRVJfSEFORExFLCAtLSwgYiwgX2J1ZmZlcl9oYW5kbGVdCisJCQlhbHVbQlVGRkVSX1NUQVJULCAtLSwgYiwgX2J1ZmZlcl9zdGFydF0KKwkJCWFsdVtCVUZGRVJfTEVOR1RILCAtLSwgYiwgX2J1ZmZlcl9sZW5ndGhdCisJCQlicltzeW5jX3N0YXRlX2RvbmUjXQorCisJCWNvcHlfZnJvbV9sb2NhbF9tZW0jOgorCQkJYWx1W19idWZmZXJfaGFuZGxlLCAtLSwgYiwgQlVGRkVSX0hBTkRMRV0KKwkJCWFsdVtfYnVmZmVyX3N0YXJ0LCAtLSwgYiwgQlVGRkVSX1NUQVJUXQorCQkJYWx1W19idWZmZXJfbGVuZ3RoLCAtLSwgYiwgQlVGRkVSX0xFTkdUSF0KKworCQlzeW5jX3N0YXRlX2RvbmUjOgorCQkuZW5kCisKKyNpZiAwCisJCS8qCisJCSAqIERlYnVnIGJ1ZmZlciBzdGF0ZSBtYW5hZ2VtZW50LgorCQkgKi8KKwkJLmJlZ2luCisJCQkucmVnIHRlbXAKKworCQkJYWx1W3RlbXAsIDEsIGFuZCwgJHJzdzAsID4+MTRdCisJCQliZXFbbm9fcG9pc29uI10KKwkJCWltbWVkW0JVRkZFUl9IQU5ETEUsIDB4ZGVhZF0KKwkJCWltbWVkW0JVRkZFUl9TVEFSVCwgMHhkZWFkXQorCQkJaW1tZWRbQlVGRkVSX0xFTkdUSCwgMHhkZWFkXQorCQlub19wb2lzb24jOgorCisJCQlpbW1lZFt0ZW1wLCAweGRlYWRdCisJCQlhbHVbLS0sIF9idWZmZXJfaGFuZGxlLCAtLCB0ZW1wXQorCQkJYmVxW3N0YXRlX2NvcnJ1cHRlZCNdCisJCQlhbHVbLS0sIF9idWZmZXJfc3RhcnQsIC0sIHRlbXBdCisJCQliZXFbc3RhdGVfY29ycnVwdGVkI10KKwkJCWFsdVstLSwgX2J1ZmZlcl9sZW5ndGgsIC0sIHRlbXBdCisJCQliZXFbc3RhdGVfY29ycnVwdGVkI10KKwkJLmVuZAorI2VuZGlmCisKKwkJLyoKKwkJICogQ2hlY2sgYnVmZmVyIGxlbmd0aC4KKwkJICovCisJCS5iZWdpbgorCQkJYWx1Wy0tLCBfYnVmZmVyX2xlbmd0aCwgLSwgX3BhY2tldF9sZW5ndGhdCisJCQlibG9bYnVmZmVyX292ZXJmbG93I10KKwkJLmVuZAorCisJCS8qCisJCSAqIENvcHkgdGhlIG1wYWNrZXQgYW5kIGdpdmUgYmFjayB0aGUgUkJVRiBlbGVtZW50LgorCQkgKi8KKwkJLmJlZ2luCisJCQkucmVnIGVsZW1lbnQKKwkJCS5yZWcgeGZlcl9zaXplCisJCQkucmVnIHRlbXAKKwkJCS5zaWcgY29weV9zaWcKKworCQkJYWx1X3NoZltlbGVtZW50LCAweDdmLCBhbmQsICRyc3cwLCA+PjI0XQorCQkJYWx1X3NoZlt4ZmVyX3NpemUsIDB4ZmYsIGFuZCwgJHJzdzAsID4+MTZdCisKKwkJCWFsdVt4ZmVyX3NpemUsIHhmZXJfc2l6ZSwgLSwgMV0KKwkJCWFsdV9zaGZbeGZlcl9zaXplLCAweDEwLCBvciwgeGZlcl9zaXplLCA+PjNdCisJCQlhbHVfc2hmW3RlbXAsIDB4MTAsIG9yLCB4ZmVyX3NpemUsIDw8MjFdCisJCQlhbHVfc2hmW3RlbXAsIHRlbXAsIG9yLCBlbGVtZW50LCA8PDExXQorCQkJYWx1X3NoZlstLSwgdGVtcCwgb3IsIDEsIDw8MThdCisKKwkJCWRyYW1bcmJ1Zl9yZCwgLS0sIF9idWZmZXJfc3RhcnQsIGJ1ZmZlcl9vZmZzZXQsIG1heF84XSwKKwkJCQkJCWluZGlyZWN0X3JlZiwgc2lnX2RvbmVbY29weV9zaWddCisJCQljdHhfYXJiW2NvcHlfc2lnXQorCisJCQlhbHVbdGVtcCwgUkJVRl9FTEVNRU5UX0RPTkUsIG9yLCBlbGVtZW50LCA8PDE2XQorCQkJbXNmW2Zhc3Rfd3IsIC0tLCB0ZW1wLCAwXQorCQkuZW5kCisKKwkJLyoKKwkJICogSWYgRU9QLCB3cml0ZSBiYWNrIHRoZSBwYWNrZXQgZGVzY3JpcHRvci4KKwkJICovCisJCS5iZWdpbgorCQkJLnJlZyB3cml0ZSAkc3RlbXAgJHN0ZW1wMgorCQkJLnhmZXJfb3JkZXIgJHN0ZW1wICRzdGVtcDIKKwkJCS5zaWcgenp6CisKKwkJCWFsdV9zaGZbLS0sIDEsIGFuZCwgJHJzdzAsID4+MTRdCisJCQliZXFbbm9fd3JpdGViYWNrI10KKworCQkJYWx1WyRzdGVtcCwgJHJzdzAsIGFuZCwgMHgxZl0KKwkJCWFsdVskc3RlbXAyLCAtLSwgYiwgX3BhY2tldF9sZW5ndGhdCisJCQlzcmFtW3dyaXRlLCAkc3RlbXAsIF9idWZmZXJfaGFuZGxlLCA4LCAyXSwgY3R4X3N3YXBbenp6XQorCisJCW5vX3dyaXRlYmFjayM6CisJCS5lbmQKKworCQkvKgorCQkgKiBSZXN5bmNocm9uaXNlLgorCQkgKi8KKwkJLmJlZ2luCisJCQljdHhfYXJiW3NpZzNdCisJCQlsb2NhbF9jc3Jfd3JbU0FNRV9NRV9TSUdOQUwsICgweDgwIHwgKCZzaWczIDw8IDMpKV0KKwkJLmVuZAorCisJCS8qCisJCSAqIElmIEVPUCwgcHV0IHRoZSBidWZmZXIgYmFjayBvbnRvIHRoZSBzY3JhdGNoIHJpbmcuCisJCSAqLworCQkuYmVnaW4KKwkJCS5yZWcgd3JpdGUgJHN0ZW1wCisJCQkuc2lnIHp6egorCisJCQlicl9pbnBfc3RhdGVbU0NSX1JpbmcxX1N0YXR1cywgcnhfZG9uZV9yaW5nX292ZXJmbG93I10KKworCQkJYWx1X3NoZlstLSwgMSwgYW5kLCAkcnN3MCwgPj4xNF0KKwkJCWJlcVttcGFja2V0X3JlY2VpdmVfbG9vcCNdCisKKwkJCWFsdVstLSwgMSwgYW5kLCAkcnN3MCwgPj4xMF0KKwkJCWJuZVtyeGVyciNdCisKKwkJCWFsdVskc3RlbXAsIC0tLCBiLCBfYnVmZmVyX2hhbmRsZV0KKwkJCXNjcmF0Y2hbcHV0LCAkc3RlbXAsIHplcm8sIDQsIDFdLCBjdHhfc3dhcFt6enpdCisJCQljYXBbZmFzdF93ciwgMCwgWFNDQUxFX0lOVF9BXQorCQkJYnJbbXBhY2tldF9yZWNlaXZlX2xvb3AjXQorCisJCXJ4ZXJyIzoKKwkJCWFsdVskc3RlbXAsIC0tLCBiLCBfYnVmZmVyX2hhbmRsZV0KKwkJCXNjcmF0Y2hbcHV0LCAkc3RlbXAsIHplcm8sIDAsIDFdLCBjdHhfc3dhcFt6enpdCisJCQliclttcGFja2V0X3JlY2VpdmVfbG9vcCNdCisJCS5lbmQKKwkuZW5kCisKKworYWJvcnRfcnN3ZXJyIzoKKwloYWx0CisKK2Fib3J0X3Byb3RlcnIjOgorCWhhbHQKKworc3RhdGVfY29ycnVwdGVkIzoKKwloYWx0CisKK2J1ZmZlcl9vdmVyZmxvdyM6CisJaGFsdAorCityeF9kb25lX3Jpbmdfb3ZlcmZsb3cjOgorCWhhbHQKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDBfcngudWNvZGUgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDBfcngudWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhZWUyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwMjQwMF9yeC51Y29kZQpAQCAtMCwwICsxLDEzMCBAQAorc3RhdGljIHN0cnVjdCBpeHAyMDAwX3VlbmdpbmVfY29kZSBpeHAyNDAwX3J4ID0KK3sKKwkuY3B1X21vZGVsX2JpdG1hc2sJPSAweDAwMDAwM2ZlLAorCS5jcHVfbWluX3JldmlzaW9uCT0gMCwKKwkuY3B1X21heF9yZXZpc2lvbgk9IDI1NSwKKworCS51ZW5naW5lX3BhcmFtZXRlcnMJPSBJWFAyMDAwX1VFTkdJTkVfOF9DT05URVhUUyB8CisJCQkJICBJWFAyMDAwX1VFTkdJTkVfUFJOX1VQREFURV9FVkVSWSB8CisJCQkJICBJWFAyMDAwX1VFTkdJTkVfTk5fRlJPTV9QUkVWSU9VUyB8CisJCQkJICBJWFAyMDAwX1VFTkdJTkVfQVNTRVJUX0VNUFRZX0FUXzAgfAorCQkJCSAgSVhQMjAwMF9VRU5HSU5FX0xNX0FERFIxX1BFUl9DT05URVhUIHwKKwkJCQkgIElYUDIwMDBfVUVOR0lORV9MTV9BRERSMF9QRVJfQ09OVEVYVCwKKworCS5pbml0aWFsX3JlZ192YWx1ZXMJPSAoc3RydWN0IGl4cDIwMDBfcmVnX3ZhbHVlIFtdKSB7CisJCXsgLTEsIC0xIH0KKwl9LAorCisJLm51bV9pbnNucwkJPSAxMDksCisJLmluc25zCQkJPSAodTggW10pIHsKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHhjMCwgMHgwNSwKKwkJMHhmNCwgMHg0NCwgMHgwYywgMHgwMCwgMHgwNSwKKwkJMHhmYywgMHgwNCwgMHg0YywgMHgwMCwgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHgwMCwKKwkJMHhiNCwgMHg0MCwgMHhmMCwgMHgzYiwgMHgxZiwKKwkJMHg4YSwgMHhjMCwgMHg1MCwgMHgzZSwgMHgwNSwKKwkJMHhiNCwgMHg0MCwgMHhmMCwgMHgzYiwgMHg4MCwKKwkJMHg5YSwgMHhlMCwgMHgwMCwgMHgzZSwgMHgwNSwKKwkJMHhmMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwKKwkJMHhkOCwgMHgwNSwgMHhjMCwgMHgwMCwgMHgxMSwKKwkJMHhmMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHgwMCwKKwkJMHg5MSwgMHhiMCwgMHgyMCwgMHgwZSwgMHgwMCwKKwkJMHhmYywgMHgwNiwgMHg2MCwgMHgwYiwgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwKKwkJMHhiMCwgMHhjMCwgMHgzMCwgMHgwZiwgMHgwMSwKKwkJMHhhNCwgMHg3MCwgMHgwMCwgMHgwZiwgMHgyMCwKKwkJMHhkOCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkJMHhmYywgMHgxMCwgMHhhYywgMHgyMywgMHgwOCwKKwkJMHhmYywgMHgxMCwgMHhhYywgMHg0MywgMHgxMCwKKwkJMHhmYywgMHgxMCwgMHhhYywgMHg2MywgMHgxOCwKKwkJMHhlMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkJMHhmYywgMHgxMCwgMHhhZSwgMHgyMywgMHg4OCwKKwkJMHgzZCwgMHgwMCwgMHgwNCwgMHgwMywgMHgyMCwKKwkJMHhlMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkJMHg4NCwgMHg4MiwgMHgwMiwgMHgwMSwgMHgzYiwKKwkJMHhkOCwgMHgxYSwgMHgwMCwgMHgwMSwgMHgwMSwKKwkJMHhiNCwgMHgwMCwgMHg4YywgMHg3ZCwgMHg4MCwKKwkJMHg5MSwgMHhiMCwgMHg4MCwgMHgyMiwgMHgwMCwKKwkJMHhmYywgMHgwNiwgMHg2MCwgMHgyMywgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwKKwkJMHg5NCwgMHhmMCwgMHg5MiwgMHgwMSwgMHgyMSwKKwkJMHhhYywgMHg0MCwgMHg2MCwgMHgyNiwgMHgwMCwKKwkJMHhhNCwgMHgzMCwgMHgwYywgMHgwNCwgMHgwNiwKKwkJMHhkOCwgMHgxYSwgMHg0MCwgMHgwMSwgMHgwMCwKKwkJMHg5NCwgMHhlMCwgMHhhMiwgMHgwMSwgMHgyMSwKKwkJMHhhYywgMHgyMCwgMHgwMCwgMHgyOCwgMHgwNiwKKwkJMHg4NCwgMHhmMiwgMHgwMiwgMHgwMSwgMHgyMSwKKwkJMHhkOCwgMHgwYiwgMHg0MCwgMHgwMSwgMHgwMCwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMSwKKwkJMHhmMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMiwKKwkJMHhhMCwgMHgwMCwgMHgwOCwgMHgwNCwgMHgwMCwKKwkJMHg5NSwgMHgwMCwgMHhjNiwgMHgwMSwgMHhmZiwKKwkJMHhhMCwgMHg4MCwgMHgxMCwgMHgzMCwgMHgwMCwKKwkJMHhhMCwgMHg2MCwgMHgxYywgMHgwMCwgMHgwMSwKKwkJMHhmMCwgMHgwZiwgMHhmMCwgMHgzMywgMHhmZiwKKwkJMHhiNCwgMHgwMCwgMHhjMCwgMHgzMSwgMHg4MSwKKwkJMHhiMCwgMHg4MCwgMHhiMCwgMHgzMiwgMHgwMiwKKwkJMHhhMCwgMHgyMCwgMHgyMCwgMHgyYywgMHgwMCwKKwkJMHg5NCwgMHhmMCwgMHhkMiwgMHgwMSwgMHgyMSwKKwkJMHhkOCwgMHgwZiwgMHg0MCwgMHgwMSwgMHgwMCwKKwkJMHgxOSwgMHg0MCwgMHgxMCwgMHgwNCwgMHgyMCwKKwkJMHhhMCwgMHgwMCwgMHgyNiwgMHgwNCwgMHgwMCwKKwkJMHhkOCwgMHgwZCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkJMHgwMCwgMHg0MiwgMHgxMCwgMHg4MCwgMHgwMiwKKwkJMHhiMCwgMHgwMCwgMHg0NiwgMHgwNCwgMHgwMCwKKwkJMHhiMCwgMHgwMCwgMHg1NiwgMHgwOCwgMHgwMCwKKwkJMHhlMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkJMHhmYywgMHgxMCwgMHhhZSwgMHg0MywgMHg5MCwKKwkJMHg4NCwgMHhmMCwgMHgzMiwgMHgwMSwgMHgyMSwKKwkJMHhkOCwgMHgxMSwgMHg0MCwgMHgwMSwgMHgwMCwKKwkJMHhhMCwgMHg2MCwgMHgzYywgMHgwMCwgMHgwMiwKKwkJMHhhMCwgMHgyMCwgMHg0MCwgMHgxMCwgMHgwMCwKKwkJMHhhMCwgMHgyMCwgMHg1MCwgMHgxNCwgMHgwMCwKKwkJMHhkOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwKKwkJMHhhMCwgMHgwMCwgMHgyOCwgMHgwYywgMHgwMCwKKwkJMHhiMCwgMHgwMCwgMHg0OCwgMHgxMCwgMHgwMCwKKwkJMHhiMCwgMHgwMCwgMHg1OCwgMHgxNCwgMHgwMCwKKwkJMHhhYSwgMHhmMCwgMHgwMCwgMHgxNCwgMHgwMSwKKwkJMHhkOCwgMHgxYSwgMHhjMCwgMHgwMSwgMHgwNSwKKwkJMHg4NSwgMHg4MCwgMHg0MiwgMHgwMSwgMHhmZiwKKwkJMHg5NSwgMHgwMCwgMHg2NiwgMHgwMSwgMHhmZiwKKwkJMHhiYSwgMHhjMCwgMHg2MCwgMHgxYiwgMHgwMSwKKwkJMHg5YSwgMHgzMCwgMHg2MCwgMHgxOSwgMHgzMCwKKwkJMHg5YSwgMHhiMCwgMHg3MCwgMHgxYSwgMHgzMCwKKwkJMHg5YiwgMHg1MCwgMHg3OCwgMHgxZSwgMHgwNCwKKwkJMHg4YSwgMHhlMiwgMHgwOCwgMHgxZSwgMHgyMSwKKwkJMHg2YSwgMHg0ZSwgMHgwMCwgMHgxMywgMHgwMCwKKwkJMHhlMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwKKwkJMHg5YiwgMHgwMCwgMHg3YSwgMHg5MiwgMHgwNCwKKwkJMHgzZCwgMHgwMCwgMHgwNCwgMHgxZiwgMHgyMCwKKwkJMHg4NCwgMHhlMiwgMHgwMiwgMHgwMSwgMHgyMSwKKwkJMHhkOCwgMHgxNiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkJMHhhNCwgMHgxOCwgMHgwYywgMHg3ZCwgMHg4MCwKKwkJMHhhMCwgMHg1OCwgMHgxYywgMHgwMCwgMHgwMSwKKwkJMHgwMSwgMHg0MiwgMHgwMCwgMHhhMCwgMHgwMiwKKwkJMHhlMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkJMHhmYywgMHgxMCwgMHhhZSwgMHg2MywgMHg5OCwKKwkJMHhkOCwgMHgxYiwgMHgwMCwgMHhjMiwgMHgxNCwKKwkJMHg4NCwgMHhlMiwgMHgwMiwgMHgwMSwgMHgyMSwKKwkJMHhkOCwgMHgwNSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkJMHg4NCwgMHhhMiwgMHgwMiwgMHgwMSwgMHgyMSwKKwkJMHhkOCwgMHgxOSwgMHg0MCwgMHgwMSwgMHgwMSwKKwkJMHhhMCwgMHg1OCwgMHgwYywgMHgwMCwgMHgwMiwKKwkJMHgxYSwgMHg0MCwgMHgwMCwgMHgwNCwgMHgyNCwKKwkJMHgzMywgMHgwMCwgMHgwMSwgMHgyZiwgMHgyMCwKKwkJMHhkOCwgMHgwNSwgMHhjMCwgMHgwMCwgMHgxOCwKKwkJMHhhMCwgMHg1OCwgMHgwYywgMHgwMCwgMHgwMiwKKwkJMHgxYSwgMHg0MCwgMHgwMCwgMHgwNCwgMHgyMCwKKwkJMHhkOCwgMHgwNSwgMHhjMCwgMHgwMCwgMHgxOCwKKwkJMHhlMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkJMHhlMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkJMHhlMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkJMHhlMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkJMHhlMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwl9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwX3R4LnVjIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwX3R4LnVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOTBkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDBfdHgudWMKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBUWCB1Y29kZSBmb3IgdGhlIEludGVsIElYUDI0MDAgaW4gUE9TLVBIWSBtb2RlLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IExlbm5lcnQgQnV5dGVuaGVrCisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQXNzdW1wdGlvbnMgbWFkZSBpbiB0aGlzIGNvZGU6CisgKiAtIFRoZSBJWFAyNDAwIE1TRiBpcyBjb25maWd1cmVkIGZvciBQT1MtUEhZIG1vZGUsIGluIGEgbW9kZSB3aGVyZQorICogICBvbmx5IG9uZSBUQlVGIHBhcnRpdGlvbiBpcyB1c2VkLiAgVGhpcyBpbmNsdWRlcywgZm9yIGV4YW1wbGUsCisgKiAgIDF4MzIgU1BIWSBhbmQgMXgzMiBNUEhZMzIsIGJ1dCBub3QgNHg4IFNQSFkgb3IgMXgzMiBNUEhZNC4gKFRoaXMKKyAqICAgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdC4pCisgKiAtIFRoZSBUQlVGIHVzZXMgNjQtYnl0ZSBtcGFja2V0cy4KKyAqIC0gVFggZGVzY3JpcHRvcnMgcmVzaWRlIGluIFNSQU0sIGFuZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICoJc3RydWN0IHR4X2Rlc2MKKyAqCXsKKyAqCS8vIHRvIHVlbmdpbmUKKyAqCQl1MzIJYnVmX3BoeXNfYWRkcjsKKyAqCQl1MzIJcGt0X2xlbmd0aDsKKyAqCQl1MzIJY2hhbm5lbDsKKyAqCX07CisgKiAtIFBhY2tldCBkYXRhIHJlc2lkZXMgaW4gRFJBTS4KKyAqIC0gUGFja2V0IGJ1ZmZlciBhZGRyZXNzZXMgYXJlIDgtYnl0ZSBhbGlnbmVkLgorICogLSBTY3JhdGNoIHJpbmcgMiBpcyB0eF9wZW5kaW5nLgorICogLSBTY3JhdGNoIHJpbmcgMyBpcyB0eF9kb25lLCBhbmQgaGFzIHN0YXR1cyBjb25kaXRpb24gJ2Z1bGwnLgorICogLSBUaGlzIGNvZGUgaXMgcnVuIG9uIGFsbCBlaWdodCB0aHJlYWRzIG9mIHRoZSBtaWNyb2VuZ2luZSBpdCBydW5zIG9uLgorICovCisKKyNkZWZpbmUgVFhfU0VRVUVOQ0VfMAkJMHgwMDYwCisjZGVmaW5lIFRCVUZfQ1RSTAkJMHgxODAwCisKKyNkZWZpbmUgUEFSVElUSU9OX1NJWkUJCTEyOAorI2RlZmluZSBQQVJUSVRJT05fVEhSRVNICTk2CisKKworCS5zaWcgdm9sYXRpbGUgc2lnMQorCS5zaWcgdm9sYXRpbGUgc2lnMgorCS5zaWcgdm9sYXRpbGUgc2lnMworCisJLnJlZyBAb2xkX3R4X3NlcV8wCisJLnJlZyBAbXBrdHNfaW5fZmxpZ2h0CisJLnJlZyBAbmV4dF90YnVmX21wYWNrZXQKKworCS5yZWcgQGJ1ZmZlcl9oYW5kbGUKKwkucmVnIEBidWZmZXJfc3RhcnQKKwkucmVnIEBwYWNrZXRfbGVuZ3RoCisJLnJlZyBAY2hhbm5lbAorCS5yZWcgQHBhY2tldF9vZmZzZXQKKworCS5yZWcgemVybworCisJaW1tZWRbemVybywgMF0KKworCS8qCisJICogU2tpcCBjb250ZXh0IDAgaW5pdGlhbGlzYXRpb24/CisJICovCisJLmJlZ2luCisJCWJyIT1jdHhbMCwgbXBhY2tldF90eF9sb29wI10KKwkuZW5kCisKKwkvKgorCSAqIFdhaXQgdW50aWwgYWxsIHBlbmRpbmcgVEJVRiBlbGVtZW50cyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisJICovCisJLmJlZ2luCisJCS5yZWcgcmVhZCAkdHgKKwkJLnNpZyB6enoKKworCWxvb3BfZW1wdHkjOgorCQltc2ZbcmVhZCwgJHR4LCB6ZXJvLCBUWF9TRVFVRU5DRV8wLCAxXSwgY3R4X3N3YXBbenp6XQorCQlhbHVfc2hmWy0tLCAtLSwgYiwgJHR4LCA+PjMxXQorCQliZXFbbG9vcF9lbXB0eSNdCisKKwkJYWx1W0BvbGRfdHhfc2VxXzAsIC0tLCBiLCAkdHhdCisJLmVuZAorCisJaW1tZWRbQG1wa3RzX2luX2ZsaWdodCwgMF0KKwlhbHVbQG5leHRfdGJ1Zl9tcGFja2V0LCBAb2xkX3R4X3NlcV8wLCBhbmQsIChQQVJUSVRJT05fU0laRSAtIDEpXQorCisJaW1tZWRbQGJ1ZmZlcl9oYW5kbGUsIDBdCisKKwkvKgorCSAqIEluaXRpYWxpc2Ugc2lnbmFsIHBpcGVsaW5lLgorCSAqLworCS5iZWdpbgorCQlsb2NhbF9jc3Jfd3JbU0FNRV9NRV9TSUdOQUwsICgmc2lnMSA8PCAzKV0KKwkJLnNldF9zaWcgc2lnMQorCisJCWxvY2FsX2Nzcl93cltTQU1FX01FX1NJR05BTCwgKCZzaWcyIDw8IDMpXQorCQkuc2V0X3NpZyBzaWcyCisKKwkJbG9jYWxfY3NyX3dyW1NBTUVfTUVfU0lHTkFMLCAoJnNpZzMgPDwgMyldCisJCS5zZXRfc2lnIHNpZzMKKwkuZW5kCisKK21wYWNrZXRfdHhfbG9vcCM6CisJLmJlZ2luCisJCS5yZWcgdGJ1Zl9lbGVtZW50X2luZGV4CisJCS5yZWcgYnVmZmVyX2hhbmRsZQorCQkucmVnIHNvcF9lb3AKKwkJLnJlZyBwYWNrZXRfZGF0YQorCQkucmVnIGNoYW5uZWwKKwkJLnJlZyBtcGFja2V0X3NpemUKKworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBubyBwYWNrZXQgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLAorCQkgKiBkZXF1ZXVlIHRoZSBuZXh0IFRYIGRlc2NyaXB0b3IsIGFuZCBmZXRjaCB0aGUgYnVmZmVyCisJCSAqIGFkZHJlc3MsIHBhY2tldCBsZW5ndGggYW5kIGRlc3RpbmF0aW9uIGNoYW5uZWwgbnVtYmVyLgorCQkgKi8KKwkJLmJlZ2luCisJCQkucmVnIHJlYWQgJHN0ZW1wICRzdGVtcDIgJHN0ZW1wMworCQkJLnhmZXJfb3JkZXIgJHN0ZW1wICRzdGVtcDIgJHN0ZW1wMworCQkJLnNpZyB6enoKKworCQkJY3R4X2FyYltzaWcxXQorCisJCQlhbHVbLS0sIC0tLCBiLCBAYnVmZmVyX2hhbmRsZV0KKwkJCWJuZVthbHJlYWR5X2dvdF9wYWNrZXQjXQorCisJCXR4X25vYnVmcyM6CisJCQlzY3JhdGNoW2dldCwgJHN0ZW1wLCB6ZXJvLCA4LCAxXSwgY3R4X3N3YXBbenp6XQorCQkJYWx1W0BidWZmZXJfaGFuZGxlLCAtLSwgYiwgJHN0ZW1wXQorCQkJYmVxW3R4X25vYnVmcyNdCisKKwkJCXNyYW1bcmVhZCwgJHN0ZW1wLCAkc3RlbXAsIDAsIDNdLCBjdHhfc3dhcFt6enpdCisJCQlhbHVbQGJ1ZmZlcl9zdGFydCwgLS0sIGIsICRzdGVtcF0KKwkJCWFsdVtAcGFja2V0X2xlbmd0aCwgLS0sIGIsICRzdGVtcDJdCisJCQliZXFbemVyb19ieXRlX3BhY2tldCNdCisJCQlhbHVbQGNoYW5uZWwsIC0tLCBiLCAkc3RlbXAzXQorCQkJaW1tZWRbQHBhY2tldF9vZmZzZXQsIDBdCisKKwkJYWxyZWFkeV9nb3RfcGFja2V0IzoKKwkJCWxvY2FsX2Nzcl93cltTQU1FX01FX1NJR05BTCwgKDB4ODAgfCAoJnNpZzEgPDwgMykpXQorCQkuZW5kCisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIHRidWYgZWxlbWVudCBpbmRleCwgU09QL0VPUCBmbGFncywgbXBhY2tldAorCQkgKiBvZmZzZXQgYW5kIG1wYWNrZXQgc2l6ZSBhbmQgY2FjaGUgYnVmZmVyX2hhbmRsZSBhbmQKKwkJICogY2hhbm5lbCBudW1iZXIuCisJCSAqLworCQkuYmVnaW4KKwkJCWFsdVt0YnVmX2VsZW1lbnRfaW5kZXgsIC0tLCBiLCBAbmV4dF90YnVmX21wYWNrZXRdCisJCQlhbHVbQG5leHRfdGJ1Zl9tcGFja2V0LCBAbmV4dF90YnVmX21wYWNrZXQsICssIDFdCisJCQlhbHVbQG5leHRfdGJ1Zl9tcGFja2V0LCBAbmV4dF90YnVmX21wYWNrZXQsIGFuZCwKKwkJCQkJCQkoUEFSVElUSU9OX1NJWkUgLSAxKV0KKworCQkJYWx1W2J1ZmZlcl9oYW5kbGUsIC0tLCBiLCBAYnVmZmVyX2hhbmRsZV0KKwkJCWltbWVkW0BidWZmZXJfaGFuZGxlLCAwXQorCisJCQlpbW1lZFtzb3BfZW9wLCAxXQorCisJCQlhbHVbcGFja2V0X2RhdGEsIC0tLCBiLCBAcGFja2V0X29mZnNldF0KKwkJCWJuZVtub19zb3AjXQorCQkJYWx1W3NvcF9lb3AsIHNvcF9lb3AsIG9yLCAyXQorCQlub19zb3AjOgorCQkJYWx1W3BhY2tldF9kYXRhLCBwYWNrZXRfZGF0YSwgKywgQGJ1ZmZlcl9zdGFydF0KKworCQkJYWx1W2NoYW5uZWwsIC0tLCBiLCBAY2hhbm5lbF0KKworCQkJYWx1W21wYWNrZXRfc2l6ZSwgQHBhY2tldF9sZW5ndGgsIC0sIEBwYWNrZXRfb2Zmc2V0XQorCQkJYWx1Wy0tLCA2NCwgLSwgbXBhY2tldF9zaXplXQorCQkJYmhzW2VvcCNdCisJCQlhbHVbQGJ1ZmZlcl9oYW5kbGUsIC0tLCBiLCBidWZmZXJfaGFuZGxlXQorCQkJaW1tZWRbbXBhY2tldF9zaXplLCA2NF0KKwkJCWFsdVtzb3BfZW9wLCBzb3BfZW9wLCBhbmQsIDJdCisJCWVvcCM6CisKKwkJCWFsdVtAcGFja2V0X29mZnNldCwgQHBhY2tldF9vZmZzZXQsICssIG1wYWNrZXRfc2l6ZV0KKwkJLmVuZAorCisJCS8qCisJCSAqIFdhaXQgdW50aWwgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdGhlIFRCVUYuCisJCSAqLworCQkuYmVnaW4KKwkJCS5yZWcgcmVhZCAkdHgKKwkJCS5yZWcgdGVtcAorCQkJLnNpZyB6enoKKworCQkJY3R4X2FyYltzaWcyXQorCisJCQliclt0ZXN0X3NwYWNlI10KKworCQlsb29wX3NwYWNlIzoKKwkJCW1zZltyZWFkLCAkdHgsIHplcm8sIFRYX1NFUVVFTkNFXzAsIDFdLCBjdHhfc3dhcFt6enpdCisKKwkJCWFsdVt0ZW1wLCAkdHgsIC0sIEBvbGRfdHhfc2VxXzBdCisJCQlhbHVbdGVtcCwgdGVtcCwgYW5kLCAweGZmXQorCQkJYWx1W0BtcGt0c19pbl9mbGlnaHQsIEBtcGt0c19pbl9mbGlnaHQsIC0sIHRlbXBdCisKKwkJCWFsdVtAb2xkX3R4X3NlcV8wLCAtLSwgYiwgJHR4XQorCisJCXRlc3Rfc3BhY2UjOgorCQkJYWx1Wy0tLCBQQVJUSVRJT05fVEhSRVNILCAtLCBAbXBrdHNfaW5fZmxpZ2h0XQorCQkJYmxvW2xvb3Bfc3BhY2UjXQorCisJCQlhbHVbQG1wa3RzX2luX2ZsaWdodCwgQG1wa3RzX2luX2ZsaWdodCwgKywgMV0KKworCQkJbG9jYWxfY3NyX3dyW1NBTUVfTUVfU0lHTkFMLCAoMHg4MCB8ICgmc2lnMiA8PCAzKSldCisJCS5lbmQKKworCQkvKgorCQkgKiBDb3B5IHRoZSBwYWNrZXQgZGF0YSB0byB0aGUgVEJVRi4KKwkJICovCisJCS5iZWdpbgorCQkJLnJlZyB0ZW1wCisJCQkuc2lnIGNvcHlfc2lnCisKKwkJCWFsdVt0ZW1wLCBtcGFja2V0X3NpemUsIC0sIDFdCisJCQlhbHVfc2hmW3RlbXAsIDB4MTAsIG9yLCB0ZW1wLCA+PjNdCisJCQlhbHVfc2hmW3RlbXAsIDB4MTAsIG9yLCB0ZW1wLCA8PDIxXQorCQkJYWx1X3NoZlt0ZW1wLCB0ZW1wLCBvciwgdGJ1Zl9lbGVtZW50X2luZGV4LCA8PDExXQorCQkJYWx1X3NoZlstLSwgdGVtcCwgb3IsIDEsIDw8MThdCisKKwkJCWRyYW1bdGJ1Zl93ciwgLS0sIHBhY2tldF9kYXRhLCAwLCBtYXhfOF0sCisJCQkJCWluZGlyZWN0X3JlZiwgc2lnX2RvbmVbY29weV9zaWddCisJCQljdHhfYXJiW2NvcHlfc2lnXQorCQkuZW5kCisKKwkJLyoKKwkJICogTWFyayBUQlVGIGVsZW1lbnQgYXMgcmVhZHktdG8tYmUtdHJhbnNtaXR0ZWQuCisJCSAqLworCQkuYmVnaW4KKwkJCS5yZWcgd3JpdGUgJHRzdyAkdHN3MgorCQkJLnhmZXJfb3JkZXIgJHRzdyAkdHN3MgorCQkJLnJlZyB0ZW1wCisJCQkuc2lnIHp6egorCisJCQlhbHVfc2hmW3RlbXAsIGNoYW5uZWwsIG9yLCBtcGFja2V0X3NpemUsIDw8MjRdCisJCQlhbHVfc2hmWyR0c3csIHRlbXAsIG9yLCBzb3BfZW9wLCA8PDhdCisJCQlpbW1lZFskdHN3MiwgMF0KKworCQkJaW1tZWRbdGVtcCwgVEJVRl9DVFJMXQorCQkJYWx1X3NoZlt0ZW1wLCB0ZW1wLCBvciwgdGJ1Zl9lbGVtZW50X2luZGV4LCA8PDNdCisJCQltc2Zbd3JpdGUsICR0c3csIHRlbXAsIDAsIDJdLCBjdHhfc3dhcFt6enpdCisJCS5lbmQKKworCQkvKgorCQkgKiBSZXN5bmNocm9uaXNlLgorCQkgKi8KKwkJLmJlZ2luCisJCQljdHhfYXJiW3NpZzNdCisJCQlsb2NhbF9jc3Jfd3JbU0FNRV9NRV9TSUdOQUwsICgweDgwIHwgKCZzaWczIDw8IDMpKV0KKwkJLmVuZAorCisJCS8qCisJCSAqIElmIHRoaXMgd2FzIGFuIEVPUCBtcGFja2V0LCByZWN5Y2xlIHRoZSBUWCBidWZmZXIKKwkgCSAqIGFuZCBzaWduYWwgdGhlIGhvc3QuCisJCSAqLworCQkuYmVnaW4KKwkJCS5yZWcgd3JpdGUgJHN0ZW1wCisJCQkuc2lnIHp6egorCisJCQlhbHVbLS0sIHNvcF9lb3AsIGFuZCwgMV0KKwkJCWJlcVttcGFja2V0X3R4X2xvb3AjXQorCisJCXR4X2RvbmVfcmluZ19mdWxsIzoKKwkJCWJyX2lucF9zdGF0ZVtTQ1JfUmluZzNfU3RhdHVzLCB0eF9kb25lX3JpbmdfZnVsbCNdCisKKwkJCWFsdVskc3RlbXAsIC0tLCBiLCBidWZmZXJfaGFuZGxlXQorCQkJc2NyYXRjaFtwdXQsICRzdGVtcCwgemVybywgMTIsIDFdLCBjdHhfc3dhcFt6enpdCisJCQljYXBbZmFzdF93ciwgMCwgWFNDQUxFX0lOVF9BXQorCQkJYnJbbXBhY2tldF90eF9sb29wI10KKwkJLmVuZAorCS5lbmQKKworCit6ZXJvX2J5dGVfcGFja2V0IzoKKwloYWx0CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwX3R4LnVjb2RlIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwX3R4LnVjb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDBfdHgudWNvZGUKQEAgLTAsMCArMSw5OCBAQAorc3RhdGljIHN0cnVjdCBpeHAyMDAwX3VlbmdpbmVfY29kZSBpeHAyNDAwX3R4ID0KK3sKKwkuY3B1X21vZGVsX2JpdG1hc2sJPSAweDAwMDAwM2ZlLAorCS5jcHVfbWluX3JldmlzaW9uCT0gMCwKKwkuY3B1X21heF9yZXZpc2lvbgk9IDI1NSwKKworCS51ZW5naW5lX3BhcmFtZXRlcnMJPSBJWFAyMDAwX1VFTkdJTkVfOF9DT05URVhUUyB8CisJCQkJICBJWFAyMDAwX1VFTkdJTkVfUFJOX1VQREFURV9FVkVSWSB8CisJCQkJICBJWFAyMDAwX1VFTkdJTkVfTk5fRlJPTV9QUkVWSU9VUyB8CisJCQkJICBJWFAyMDAwX1VFTkdJTkVfQVNTRVJUX0VNUFRZX0FUXzAgfAorCQkJCSAgSVhQMjAwMF9VRU5HSU5FX0xNX0FERFIxX1BFUl9DT05URVhUIHwKKwkJCQkgIElYUDIwMDBfVUVOR0lORV9MTV9BRERSMF9QRVJfQ09OVEVYVCwKKworCS5pbml0aWFsX3JlZ192YWx1ZXMJPSAoc3RydWN0IGl4cDIwMDBfcmVnX3ZhbHVlIFtdKSB7CisJCXsgLTEsIC0xIH0KKwl9LAorCisJLm51bV9pbnNucwkJPSA3NywKKwkuaW5zbnMJCQk9ICh1OCBbXSkgeworCQkweGYwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLAorCQkweGQ4LCAweDAzLCAweDAwLCAweDAwLCAweDExLAorCQkweDNjLCAweDQwLCAweDAwLCAweDA0LCAweGUwLAorCQkweDgxLCAweGYyLCAweDAyLCAweDAxLCAweDAwLAorCQkweGQ4LCAweDAwLCAweDgwLCAweDAxLCAweDAwLAorCQkweGIwLCAweDA4LCAweDA2LCAweDAwLCAweDAwLAorCQkweGYwLCAweDAwLCAweDBjLCAweDAwLCAweDgwLAorCQkweGI0LCAweDQ5LCAweDAyLCAweDAzLCAweDdmLAorCQkweGYwLCAweDAwLCAweDAyLCAweDgzLCAweDAwLAorCQkweGZjLCAweDEwLCAweGFjLCAweDIzLCAweDA4LAorCQkweGZjLCAweDEwLCAweGFjLCAweDQzLCAweDEwLAorCQkweGZjLCAweDEwLCAweGFjLCAweDYzLCAweDE4LAorCQkweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCQkweGEwLCAweDMwLCAweDAyLCAweDgwLCAweDAwLAorCQkweGQ4LCAweDA2LCAweDAwLCAweDAxLCAweDAxLAorCQkweDE5LCAweDQwLCAweDAwLCAweDA0LCAweDI4LAorCQkweGIwLCAweDBhLCAweDA2LCAweDAwLCAweDAwLAorCQkweGQ4LCAweDAzLCAweGMwLCAweDAxLCAweDAwLAorCQkweDAwLCAweDQ0LCAweDAwLCAweDgwLCAweDgwLAorCQkweGEwLCAweDA5LCAweDA2LCAweDAwLCAweDAwLAorCQkweGIwLCAweDBiLCAweDA2LCAweDA0LCAweDAwLAorCQkweGQ4LCAweDEzLCAweDAwLCAweDAxLCAweDAwLAorCQkweGIwLCAweDBjLCAweDA2LCAweDA4LCAweDAwLAorCQkweGYwLCAweDAwLCAweDBjLCAweDAwLCAweGEwLAorCQkweGZjLCAweDEwLCAweGFlLCAweDIzLCAweDg4LAorCQkweGEwLCAweDAwLCAweDEyLCAweDQwLCAweDAwLAorCQkweGIwLCAweGM5LCAweDAyLCAweDQzLCAweDAxLAorCQkweGI0LCAweDQ5LCAweDAyLCAweDQzLCAweDdmLAorCQkweGIwLCAweDAwLCAweDIyLCAweDgwLCAweDAwLAorCQkweGYwLCAweDAwLCAweDAyLCAweDgzLCAweDAwLAorCQkweGYwLCAweDAwLCAweDBjLCAweDA0LCAweDAyLAorCQkweGIwLCAweDQwLCAweDZjLCAweDAwLCAweGEwLAorCQkweGQ4LCAweDA4LCAweDgwLCAweDAxLCAweDAxLAorCQkweGFhLCAweDAwLCAweDJjLCAweDA4LCAweDAyLAorCQkweGEwLCAweGMwLCAweDMwLCAweDE4LCAweDkwLAorCQkweGEwLCAweDAwLCAweDQzLCAweDAwLCAweDAwLAorCQkweGJhLCAweGMwLCAweDMyLCAweGMwLCAweGEwLAorCQkweGFhLCAweGIwLCAweDAwLCAweDBmLCAweDQwLAorCQkweGQ4LCAweDBhLCAweDgwLCAweDAxLCAweDA0LAorCQkweGIwLCAweDBhLCAweDAwLCAweDA4LCAweDAwLAorCQkweGYwLCAweDAwLCAweDAwLCAweDBmLCAweDQwLAorCQkweGE0LCAweDAwLCAweDJjLCAweDA4LCAweDAyLAorCQkweGEwLCAweDhhLCAweDAwLCAweDBjLCAweGEwLAorCQkweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorCQkweGQ4LCAweDBjLCAweDgwLCAweDAwLCAweDE4LAorCQkweDNjLCAweDQwLCAweDAwLCAweDA0LCAweGUwLAorCQkweGJhLCAweDgwLCAweDQyLCAweDAxLCAweDgwLAorCQkweGI0LCAweDQwLCAweDQwLCAweDEzLCAweGZmLAorCQkweGFhLCAweDg4LCAweDAwLCAweDEwLCAweDgwLAorCQkweGIwLCAweDA4LCAweDA2LCAweDAwLCAweDAwLAorCQkweGFhLCAweGYwLCAweDBkLCAweDgwLCAweDgwLAorCQkweGQ4LCAweDBiLCAweDQwLCAweDAxLCAweDA1LAorCQkweGEwLCAweDg4LCAweDBjLCAweDA0LCAweDgwLAorCQkweGZjLCAweDEwLCAweGFlLCAweDQzLCAweDkwLAorCQkweGJhLCAweGMwLCAweDUwLCAweDBmLCAweDAxLAorCQkweDlhLCAweDMwLCAweDUwLCAweDE1LCAweDMwLAorCQkweDlhLCAweGIwLCAweDUwLCAweDE2LCAweDMwLAorCQkweDliLCAweDUwLCAweDU4LCAweDE2LCAweDAxLAorCQkweDhhLCAweGUyLCAweDA4LCAweDE2LCAweDIxLAorCQkweDZiLCAweDRlLCAweDAwLCAweDgzLCAweDAzLAorCQkweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLAorCQkweDlhLCAweDgwLCAweDcwLCAweDBlLCAweDA0LAorCQkweDhiLCAweDg4LCAweDA4LCAweDFlLCAweDAyLAorCQkweGYwLCAweDAwLCAweDBjLCAweDAxLCAweDgxLAorCQkweGYwLCAweDAxLCAweDgwLCAweDFmLCAweDAwLAorCQkweDliLCAweGQwLCAweDc4LCAweDFlLCAweDAxLAorCQkweDNkLCAweDQyLCAweDAwLCAweDFjLCAweDIwLAorCQkweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCQkweGZjLCAweDEwLCAweGFlLCAweDYzLCAweDk4LAorCQkweGE0LCAweDMwLCAweDBjLCAweDA0LCAweDAyLAorCQkweGQ4LCAweDAzLCAweDAwLCAweDAxLCAweDAwLAorCQkweGQ4LCAweDExLCAweGMxLCAweDQyLCAweDE0LAorCQkweGEwLCAweDE4LCAweDAwLCAweDA4LCAweDAwLAorCQkweDFhLCAweDQwLCAweDAwLCAweDA0LCAweDJjLAorCQkweDMzLCAweDAwLCAweDAxLCAweDJmLCAweDIwLAorCQkweGQ4LCAweDAzLCAweDAwLCAweDAwLCAweDE4LAorCQkweGUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorCX0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWYwM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtMCwwICsxLDQyMSBAQAorLyoKKyAqIElYUDIwMDAgTVNGIG5ldHdvcmsgZGV2aWNlIGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICogRGVkaWNhdGVkIHRvIE1hcmlqYSBLdWxpa292YS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VlbmdpbmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgIml4cDI0MDBfcngudWNvZGUiCisjaW5jbHVkZSAiaXhwMjQwMF90eC51Y29kZSIKKyNpbmNsdWRlICJpeHBkZXZfcHJpdi5oIgorI2luY2x1ZGUgIml4cGRldi5oIgorCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC4yIgorCitzdGF0aWMgaW50IG5kc19jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKm5kczsKK3N0YXRpYyBpbnQgbmRzX29wZW47CitzdGF0aWMgdm9pZCAoKnNldF9wb3J0X2FkbWluX3N0YXR1cykoaW50IHBvcnQsIGludCB1cCk7CisKK3N0YXRpYyBzdHJ1Y3QgaXhwZGV2X3J4X2Rlc2MgKiBjb25zdCByeF9kZXNjID0KKwkoc3RydWN0IGl4cGRldl9yeF9kZXNjICopKElYUDIwMDBfU1JBTTBfVklSVF9CQVNFICsgUlhfQlVGX0RFU0NfQkFTRSk7CitzdGF0aWMgc3RydWN0IGl4cGRldl90eF9kZXNjICogY29uc3QgdHhfZGVzYyA9CisJKHN0cnVjdCBpeHBkZXZfdHhfZGVzYyAqKShJWFAyMDAwX1NSQU0wX1ZJUlRfQkFTRSArIFRYX0JVRl9ERVNDX0JBU0UpOworc3RhdGljIGludCB0eF9wb2ludGVyOworCisKK3N0YXRpYyBpbnQgaXhwZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXhwZGV2X3ByaXYgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXhwZGV2X3R4X2Rlc2MgKmRlc2M7CisJaW50IGVudHJ5OworCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gUEFHRV9TSVpFKSkgeworCQkvKiBAQEAgQ291bnQgZHJvcHMuICAqLworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKworCWVudHJ5ID0gdHhfcG9pbnRlcjsKKwl0eF9wb2ludGVyID0gKHR4X3BvaW50ZXIgKyAxKSAlIFRYX0JVRl9DT1VOVDsKKworCWRlc2MgPSB0eF9kZXNjICsgZW50cnk7CisJZGVzYy0+cGt0X2xlbmd0aCA9IHNrYi0+bGVuOworCWRlc2MtPmNoYW5uZWwgPSBpcC0+Y2hhbm5lbDsKKworCXNrYl9jb3B5X2FuZF9jc3VtX2Rldihza2IsIHBoeXNfdG9fdmlydChkZXNjLT5idWZfYWRkcikpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCWl4cDIwMDBfcmVnX3dyaXRlKFJJTkdfVFhfUEVORElORywKKwkJVFhfQlVGX0RFU0NfQkFTRSArIChlbnRyeSAqIHNpemVvZihzdHJ1Y3QgaXhwZGV2X3R4X2Rlc2MpKSk7CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaXAtPnR4X3F1ZXVlX2VudHJpZXMrKzsKKwlpZiAoaXAtPnR4X3F1ZXVlX2VudHJpZXMgPT0gVFhfQlVGX0NPVU5UX1BFUl9DSEFOKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpeHBkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCit7CisJd2hpbGUgKCpidWRnZXQgPiAwKSB7CisJCXN0cnVjdCBpeHBkZXZfcnhfZGVzYyAqZGVzYzsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJdm9pZCAqYnVmOworCQl1MzIgX2Rlc2M7CisKKwkJX2Rlc2MgPSBpeHAyMDAwX3JlZ19yZWFkKFJJTkdfUlhfRE9ORSk7CisJCWlmIChfZGVzYyA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJZGVzYyA9IHJ4X2Rlc2MgKworCQkJKChfZGVzYyAtIFJYX0JVRl9ERVNDX0JBU0UpIC8gc2l6ZW9mKHN0cnVjdCBpeHBkZXZfcnhfZGVzYykpOworCQlidWYgPSBwaHlzX3RvX3ZpcnQoZGVzYy0+YnVmX2FkZHIpOworCisJCWlmIChkZXNjLT5wa3RfbGVuZ3RoIDwgNCB8fCBkZXNjLT5wa3RfbGVuZ3RoID4gUEFHRV9TSVpFKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIml4cDIwMDA6IHJ4IGVyciwgbGVuZ3RoICVkXG4iLAorCQkJCQlkZXNjLT5wa3RfbGVuZ3RoKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKGRlc2MtPmNoYW5uZWwgPCAwIHx8IGRlc2MtPmNoYW5uZWwgPj0gbmRzX2NvdW50KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIml4cDIwMDA6IHJ4IGVyciwgY2hhbm5lbCAlZFxuIiwKKwkJCQkJZGVzYy0+Y2hhbm5lbCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIEBAQCBNYWtlIEZDUyBzdHJpcHBpbmcgY29uZmlndXJhYmxlLiAgKi8KKwkJZGVzYy0+cGt0X2xlbmd0aCAtPSA0OworCisJCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhuZHNbZGVzYy0+Y2hhbm5lbF0pKSkKKwkJCWdvdG8gZXJyOworCisJCXNrYiA9IGRldl9hbGxvY19za2IoZGVzYy0+cGt0X2xlbmd0aCArIDIpOworCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgeworCQkJc2tiLT5kZXYgPSBuZHNbZGVzYy0+Y2hhbm5lbF07CisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQkJZXRoX2NvcHlfYW5kX3N1bShza2IsIGJ1ZiwgZGVzYy0+cGt0X2xlbmd0aCwgMCk7CisJCQlza2JfcHV0KHNrYiwgZGVzYy0+cGt0X2xlbmd0aCk7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7CisKKwkJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJfQorCitlcnI6CisJCWl4cDIwMDBfcmVnX3dyaXRlKFJJTkdfUlhfUEVORElORywgX2Rlc2MpOworCQlkZXYtPnF1b3RhLS07CisJCSgqYnVkZ2V0KS0tOworCX0KKworCXJldHVybiAxOworfQorCisvKiBkZXYgYWx3YXlzIHBvaW50cyB0byBuZHNbMF0uICAqLworc3RhdGljIGludCBpeHBkZXZfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKwkvKiBAQEAgSGF2ZSB0byBzdG9wIHBvbGxpbmcgd2hlbiBuZHNbMF0gaXMgYWRtaW5pc3RyYXRpdmVseQorCSAqIGRvd25lZCB3aGlsZSB3ZSBhcmUgcG9sbGluZy4gICovCisJZG8geworCQlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0lSUV9USERfUkFXX1NUQVRVU19BXzAsIDB4MDBmZik7CisKKwkJaWYgKGl4cGRldl9yeChkZXYsIGJ1ZGdldCkpCisJCQlyZXR1cm4gMTsKKwl9IHdoaWxlIChpeHAyMDAwX3JlZ19yZWFkKElYUDIwMDBfSVJRX1RIRF9SQVdfU1RBVFVTX0FfMCkgJiAweDAwZmYpOworCisJbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKwlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9BXzAsIDB4MDBmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXhwZGV2X3R4X2NvbXBsZXRlKHZvaWQpCit7CisJaW50IGNoYW5uZWw7CisJdTMyIHdha2U7CisKKwl3YWtlID0gMDsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgaXhwZGV2X3ByaXYgKmlwOworCQl1MzIgZGVzYzsKKwkJaW50IGVudHJ5OworCisJCWRlc2MgPSBpeHAyMDAwX3JlZ19yZWFkKFJJTkdfVFhfRE9ORSk7CisJCWlmIChkZXNjID09IDApCisJCQlicmVhazsKKworCQkvKiBAQEAgQ2hlY2sgd2hldGhlciBlbnRyaWVzIGNvbWUgYmFjayBpbiBvcmRlci4gICovCisJCWVudHJ5ID0gKGRlc2MgLSBUWF9CVUZfREVTQ19CQVNFKSAvIHNpemVvZihzdHJ1Y3QgaXhwZGV2X3R4X2Rlc2MpOworCQljaGFubmVsID0gdHhfZGVzY1tlbnRyeV0uY2hhbm5lbDsKKworCQlpZiAoY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+PSBuZHNfY291bnQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaXhwMjAwMDogdHhjb21wIGNoYW5uZWwgaW5kZXggIgorCQkJCQkib3V0IG9mIGJvdW5kcyAoJWQsICUuOGksICVkKVxuIiwKKwkJCQkJY2hhbm5lbCwgKHVuc2lnbmVkIGludClkZXNjLCBlbnRyeSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlwID0gbmV0ZGV2X3ByaXYobmRzW2NoYW5uZWxdKTsKKwkJaWYgKGlwLT50eF9xdWV1ZV9lbnRyaWVzID09IFRYX0JVRl9DT1VOVF9QRVJfQ0hBTikKKwkJCXdha2UgfD0gMSA8PCBjaGFubmVsOworCQlpcC0+dHhfcXVldWVfZW50cmllcy0tOworCX0KKworCWZvciAoY2hhbm5lbCA9IDA7IHdha2UgIT0gMDsgY2hhbm5lbCsrKSB7CisJCWlmICh3YWtlICYgKDEgPDwgY2hhbm5lbCkpIHsKKwkJCW5ldGlmX3dha2VfcXVldWUobmRzW2NoYW5uZWxdKTsKKwkJCXdha2UgJj0gfigxIDw8IGNoYW5uZWwpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXhwZGV2X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBpeHAyMDAwX3JlZ19yZWFkKElYUDIwMDBfSVJRX1RIRF9TVEFUVVNfQV8wKTsKKwlpZiAoc3RhdHVzID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qCisJICogQW55IG9mIHRoZSBlaWdodCByZWNlaXZlIHVuaXRzIHNpZ25hbGVkIFJYPworCSAqLworCWlmIChzdGF0dXMgJiAweDAwZmYpIHsKKwkJaXhwMjAwMF9yZWdfd3JiKElYUDIwMDBfSVJRX1RIRF9FTkFCTEVfQ0xFQVJfQV8wLCAweDAwZmYpOworCQlpZiAobGlrZWx5KF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZHNbMF0pKSkgeworCQkJX19uZXRpZl9yeF9zY2hlZHVsZShuZHNbMF0pOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fQ1JJVCAiaXhwMjAwMDogaXJxIHdoaWxlIHBvbGxpbmchIVxuIik7CisJCX0KKwl9CisKKwkvKgorCSAqIEFueSBvZiB0aGUgZWlnaHQgdHJhbnNtaXQgdW5pdHMgc2lnbmFsZWQgVFhkb25lPworCSAqLworCWlmIChzdGF0dXMgJiAweGZmMDApIHsKKwkJaXhwMjAwMF9yZWdfd3JiKElYUDIwMDBfSVJRX1RIRF9SQVdfU1RBVFVTX0FfMCwgMHhmZjAwKTsKKwkJaXhwZGV2X3R4X2NvbXBsZXRlKCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIGl4cGRldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkaXNhYmxlX2lycShJUlFfSVhQMjAwMF9USERBMCk7CisJaXhwZGV2X2ludGVycnVwdChJUlFfSVhQMjAwMF9USERBMCwgZGV2LCBOVUxMKTsKKwllbmFibGVfaXJxKElSUV9JWFAyMDAwX1RIREEwKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGl4cGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGl4cGRldl9wcml2ICppcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCWlmICghbmRzX29wZW4rKykgeworCQllcnIgPSByZXF1ZXN0X2lycShJUlFfSVhQMjAwMF9USERBMCwgaXhwZGV2X2ludGVycnVwdCwKKwkJCQkJU0FfU0hJUlEsICJpeHAyMDAwX2V0aCIsIG5kcyk7CisJCWlmIChlcnIpIHsKKwkJCW5kc19vcGVuLS07CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9JUlFfVEhEX0VOQUJMRV9TRVRfQV8wLCAweGZmZmYpOworCX0KKworCXNldF9wb3J0X2FkbWluX3N0YXR1cyhpcC0+Y2hhbm5lbCwgMSk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl4cGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpeHBkZXZfcHJpdiAqaXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXNldF9wb3J0X2FkbWluX3N0YXR1cyhpcC0+Y2hhbm5lbCwgMCk7CisKKwlpZiAoIS0tbmRzX29wZW4pIHsKKwkJaXhwMjAwMF9yZWdfd3JpdGUoSVhQMjAwMF9JUlFfVEhEX0VOQUJMRV9DTEVBUl9BXzAsIDB4ZmZmZik7CisJCWZyZWVfaXJxKElSUV9JWFAyMDAwX1RIREEwLCBuZHMpOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbmV0X2RldmljZSAqaXhwZGV2X2FsbG9jKGludCBjaGFubmVsLCBpbnQgc2l6ZW9mX3ByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaXhwZGV2X3ByaXYgKmlwOworCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mX3ByaXYpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGl4cGRldl94bWl0OworCWRldi0+cG9sbCA9IGl4cGRldl9wb2xsOworCWRldi0+b3BlbiA9IGl4cGRldl9vcGVuOworCWRldi0+c3RvcCA9IGl4cGRldl9jbG9zZTsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCWRldi0+cG9sbF9jb250cm9sbGVyID0gaXhwZGV2X3BvbGxfY29udHJvbGxlcjsKKyNlbmRpZgorCisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNOworCWRldi0+d2VpZ2h0ID0gNjQ7CisKKwlpcCA9IG5ldGRldl9wcml2KGRldik7CisJaXAtPmNoYW5uZWwgPSBjaGFubmVsOworCWlwLT50eF9xdWV1ZV9lbnRyaWVzID0gMDsKKworCXJldHVybiBkZXY7Cit9CisKK2ludCBpeHBkZXZfaW5pdChpbnQgX19uZHNfY291bnQsIHN0cnVjdCBuZXRfZGV2aWNlICoqX19uZHMsCisJCXZvaWQgKCpfX3NldF9wb3J0X2FkbWluX3N0YXR1cykoaW50IHBvcnQsIGludCB1cCkpCit7CisJaW50IGk7CisJaW50IGVycjsKKworCWlmIChSWF9CVUZfQ09VTlQgPiAxOTIgfHwgVFhfQlVGX0NPVU5UID4gMTkyKSB7CisJCXN0YXRpYyB2b2lkIF9fdG9vX21hbnlfcnhfb3JfdHhfYnVmZmVycyh2b2lkKTsKKwkJX190b29fbWFueV9yeF9vcl90eF9idWZmZXJzKCk7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiSVhQMjAwMCBNU0YgZXRoZXJuZXQgZHJpdmVyICVzXG4iLCBEUlZfTU9EVUxFX1ZFUlNJT04pOworCisJbmRzX2NvdW50ID0gX19uZHNfY291bnQ7CisJbmRzID0gX19uZHM7CisJc2V0X3BvcnRfYWRtaW5fc3RhdHVzID0gX19zZXRfcG9ydF9hZG1pbl9zdGF0dXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfQlVGX0NPVU5UOyBpKyspIHsKKwkJdm9pZCAqYnVmOworCisJCWJ1ZiA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQl3aGlsZSAoLS1pID49IDApCisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChyeF9kZXNjW2ldLmJ1Zl9hZGRyKSk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJcnhfZGVzY1tpXS5idWZfYWRkciA9IHZpcnRfdG9fcGh5cyhidWYpOworCQlyeF9kZXNjW2ldLmJ1Zl9sZW5ndGggPSBQQUdFX1NJWkU7CisJfQorCisJLyogQEBAIE1heWJlIHdlIHNob3VsZG4ndCBiZSBwcmVhbGxvY2F0aW5nIFRYIGJ1ZmZlcnMuICAqLworCWZvciAoaSA9IDA7IGkgPCBUWF9CVUZfQ09VTlQ7IGkrKykgeworCQl2b2lkICpidWY7CisKKwkJYnVmID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmIChidWYgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCXdoaWxlICgtLWkgPj0gMCkKKwkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHR4X2Rlc2NbaV0uYnVmX2FkZHIpKTsKKwkJCWdvdG8gZXJyX2ZyZWVfcng7CisJCX0KKwkJdHhfZGVzY1tpXS5idWZfYWRkciA9IHZpcnRfdG9fcGh5cyhidWYpOworCX0KKworCS8qIDI1NiBlbnRyaWVzLCByaW5nIHN0YXR1cyBzZXQgbWVhbnMgJ2VtcHR5JywgYmFzZSBhZGRyZXNzIDB4MDAwMC4gICovCisJaXhwMjAwMF9yZWdfd3JpdGUoUklOR19SWF9QRU5ESU5HX0JBU0UsIDB4NDQwMDAwMDApOworCWl4cDIwMDBfcmVnX3dyaXRlKFJJTkdfUlhfUEVORElOR19IRUFELCAweDAwMDAwMDAwKTsKKwlpeHAyMDAwX3JlZ193cml0ZShSSU5HX1JYX1BFTkRJTkdfVEFJTCwgMHgwMDAwMDAwMCk7CisKKwkvKiAyNTYgZW50cmllcywgcmluZyBzdGF0dXMgc2V0IG1lYW5zICdmdWxsJywgYmFzZSBhZGRyZXNzIDB4MDQwMC4gICovCisJaXhwMjAwMF9yZWdfd3JpdGUoUklOR19SWF9ET05FX0JBU0UsIDB4NDAwMDA0MDApOworCWl4cDIwMDBfcmVnX3dyaXRlKFJJTkdfUlhfRE9ORV9IRUFELCAweDAwMDAwMDAwKTsKKwlpeHAyMDAwX3JlZ193cml0ZShSSU5HX1JYX0RPTkVfVEFJTCwgMHgwMDAwMDAwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfQlVGX0NPVU5UOyBpKyspIHsKKwkJaXhwMjAwMF9yZWdfd3JpdGUoUklOR19SWF9QRU5ESU5HLAorCQkJUlhfQlVGX0RFU0NfQkFTRSArIChpICogc2l6ZW9mKHN0cnVjdCBpeHBkZXZfcnhfZGVzYykpKTsKKwl9CisKKwlpeHAyMDAwX3VlbmdpbmVfbG9hZCgwLCAmaXhwMjQwMF9yeCk7CisJaXhwMjAwMF91ZW5naW5lX3N0YXJ0X2NvbnRleHRzKDAsIDB4ZmYpOworCisJLyogMjU2IGVudHJpZXMsIHJpbmcgc3RhdHVzIHNldCBtZWFucyAnZW1wdHknLCBiYXNlIGFkZHJlc3MgMHgwODAwLiAgKi8KKwlpeHAyMDAwX3JlZ193cml0ZShSSU5HX1RYX1BFTkRJTkdfQkFTRSwgMHg0NDAwMDgwMCk7CisJaXhwMjAwMF9yZWdfd3JpdGUoUklOR19UWF9QRU5ESU5HX0hFQUQsIDB4MDAwMDAwMDApOworCWl4cDIwMDBfcmVnX3dyaXRlKFJJTkdfVFhfUEVORElOR19UQUlMLCAweDAwMDAwMDAwKTsKKworCS8qIDI1NiBlbnRyaWVzLCByaW5nIHN0YXR1cyBzZXQgbWVhbnMgJ2Z1bGwnLCBiYXNlIGFkZHJlc3MgMHgwYzAwLiAgKi8KKwlpeHAyMDAwX3JlZ193cml0ZShSSU5HX1RYX0RPTkVfQkFTRSwgMHg0MDAwMGMwMCk7CisJaXhwMjAwMF9yZWdfd3JpdGUoUklOR19UWF9ET05FX0hFQUQsIDB4MDAwMDAwMDApOworCWl4cDIwMDBfcmVnX3dyaXRlKFJJTkdfVFhfRE9ORV9UQUlMLCAweDAwMDAwMDAwKTsKKworCWl4cDIwMDBfdWVuZ2luZV9sb2FkKDEsICZpeHAyNDAwX3R4KTsKKwlpeHAyMDAwX3VlbmdpbmVfc3RhcnRfY29udGV4dHMoMSwgMHhmZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmRzX2NvdW50OyBpKyspIHsKKwkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kc1tpXSk7CisJCWlmIChlcnIpIHsKKwkJCXdoaWxlICgtLWkgPj0gMCkKKwkJCQl1bnJlZ2lzdGVyX25ldGRldihuZHNbaV0pOworCQkJZ290byBlcnJfZnJlZV90eDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBuZHNfY291bnQ7IGkrKykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogSVhQMjAwMCBNU0YgZXRoZXJuZXQgKHBvcnQgJWQpLCAiCisJCQkiJS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4OiUuMnguXG4iLCBuZHNbaV0tPm5hbWUsIGksCisJCQluZHNbaV0tPmRldl9hZGRyWzBdLCBuZHNbaV0tPmRldl9hZGRyWzFdLAorCQkJbmRzW2ldLT5kZXZfYWRkclsyXSwgbmRzW2ldLT5kZXZfYWRkclszXSwKKwkJCW5kc1tpXS0+ZGV2X2FkZHJbNF0sIG5kc1tpXS0+ZGV2X2FkZHJbNV0pOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV90eDoKKwlmb3IgKGkgPSAwOyBpIDwgVFhfQlVGX0NPVU5UOyBpKyspCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodHhfZGVzY1tpXS5idWZfYWRkcikpOworCitlcnJfZnJlZV9yeDoKKwlmb3IgKGkgPSAwOyBpIDwgUlhfQlVGX0NPVU5UOyBpKyspCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQocnhfZGVzY1tpXS5idWZfYWRkcikpOworCitlcnJfb3V0OgorCXJldHVybiBlcnI7Cit9IAorCit2b2lkIGl4cGRldl9kZWluaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIEBAQCBGbHVzaCBvdXQgcGVuZGluZyBwYWNrZXRzLiAgKi8KKworCWZvciAoaSA9IDA7IGkgPCBuZHNfY291bnQ7IGkrKykKKwkJdW5yZWdpc3Rlcl9uZXRkZXYobmRzW2ldKTsKKworCWl4cDIwMDBfdWVuZ2luZV9zdG9wX2NvbnRleHRzKDEsIDB4ZmYpOworCWl4cDIwMDBfdWVuZ2luZV9zdG9wX2NvbnRleHRzKDAsIDB4ZmYpOworCWl4cDIwMDBfdWVuZ2luZV9yZXNldCgweDMpOworCisJZm9yIChpID0gMDsgaSA8IFRYX0JVRl9DT1VOVDsgaSsrKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHR4X2Rlc2NbaV0uYnVmX2FkZHIpKTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9CVUZfQ09VTlQ7IGkrKykKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChyeF9kZXNjW2ldLmJ1Zl9hZGRyKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5oIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDY4NmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogSVhQMjAwMCBNU0YgbmV0d29yayBkZXZpY2UgZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0lYUERFVl9ICisjZGVmaW5lIF9fSVhQREVWX0gKKworc3RydWN0IGl4cGRldl9wcml2Cit7CisJaW50CWNoYW5uZWw7CisJaW50CXR4X3F1ZXVlX2VudHJpZXM7Cit9OworCitzdHJ1Y3QgbmV0X2RldmljZSAqaXhwZGV2X2FsbG9jKGludCBjaGFubmVsLCBpbnQgc2l6ZW9mX3ByaXYpOworaW50IGl4cGRldl9pbml0KGludCBudW1fcG9ydHMsIHN0cnVjdCBuZXRfZGV2aWNlICoqbmRzLAorCQl2b2lkICgqc2V0X3BvcnRfYWRtaW5fc3RhdHVzKShpbnQgcG9ydCwgaW50IHVwKSk7Cit2b2lkIGl4cGRldl9kZWluaXQodm9pZCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldl9wcml2LmggYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldl9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhYTA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2X3ByaXYuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogSVhQMjAwMCBNU0YgbmV0d29yayBkZXZpY2UgZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0lYUERFVl9QUklWX0gKKyNkZWZpbmUgX19JWFBERVZfUFJJVl9ICisKKyNkZWZpbmUgUlhfQlVGX0RFU0NfQkFTRQkweDAwMDAxMDAwCisjZGVmaW5lIFJYX0JVRl9DT1VOVAkJKCgzICogUEFHRV9TSVpFKSAvICg0ICogc2l6ZW9mKHN0cnVjdCBpeHBkZXZfcnhfZGVzYykpKQorI2RlZmluZSBUWF9CVUZfREVTQ19CQVNFCTB4MDAwMDIwMDAKKyNkZWZpbmUgVFhfQlVGX0NPVU5UCQkoKDMgKiBQQUdFX1NJWkUpIC8gKDQgKiBzaXplb2Yoc3RydWN0IGl4cGRldl90eF9kZXNjKSkpCisjZGVmaW5lIFRYX0JVRl9DT1VOVF9QRVJfQ0hBTgkoVFhfQlVGX0NPVU5UIC8gNCkKKworI2RlZmluZSBSSU5HX1JYX1BFTkRJTkcJCSgodTMyICopSVhQMjAwMF9TQ1JBVENIX1JJTkdfVklSVF9CQVNFKQorI2RlZmluZSBSSU5HX1JYX0RPTkUJCSgodTMyICopKElYUDIwMDBfU0NSQVRDSF9SSU5HX1ZJUlRfQkFTRSArIDQpKQorI2RlZmluZSBSSU5HX1RYX1BFTkRJTkcJCSgodTMyICopKElYUDIwMDBfU0NSQVRDSF9SSU5HX1ZJUlRfQkFTRSArIDgpKQorI2RlZmluZSBSSU5HX1RYX0RPTkUJCSgodTMyICopKElYUDIwMDBfU0NSQVRDSF9SSU5HX1ZJUlRfQkFTRSArIDEyKSkKKworI2RlZmluZSBTQ1JBVENIX1JFRyh4KQkJKCh1MzIgKikoSVhQMjAwMF9HTE9CQUxfUkVHX1ZJUlRfQkFTRSB8IDB4MDgwMCB8ICh4KSkpCisjZGVmaW5lIFJJTkdfUlhfUEVORElOR19CQVNFCVNDUkFUQ0hfUkVHKDB4MDApCisjZGVmaW5lIFJJTkdfUlhfUEVORElOR19IRUFECVNDUkFUQ0hfUkVHKDB4MDQpCisjZGVmaW5lIFJJTkdfUlhfUEVORElOR19UQUlMCVNDUkFUQ0hfUkVHKDB4MDgpCisjZGVmaW5lIFJJTkdfUlhfRE9ORV9CQVNFCVNDUkFUQ0hfUkVHKDB4MTApCisjZGVmaW5lIFJJTkdfUlhfRE9ORV9IRUFECVNDUkFUQ0hfUkVHKDB4MTQpCisjZGVmaW5lIFJJTkdfUlhfRE9ORV9UQUlMCVNDUkFUQ0hfUkVHKDB4MTgpCisjZGVmaW5lIFJJTkdfVFhfUEVORElOR19CQVNFCVNDUkFUQ0hfUkVHKDB4MjApCisjZGVmaW5lIFJJTkdfVFhfUEVORElOR19IRUFECVNDUkFUQ0hfUkVHKDB4MjQpCisjZGVmaW5lIFJJTkdfVFhfUEVORElOR19UQUlMCVNDUkFUQ0hfUkVHKDB4MjgpCisjZGVmaW5lIFJJTkdfVFhfRE9ORV9CQVNFCVNDUkFUQ0hfUkVHKDB4MzApCisjZGVmaW5lIFJJTkdfVFhfRE9ORV9IRUFECVNDUkFUQ0hfUkVHKDB4MzQpCisjZGVmaW5lIFJJTkdfVFhfRE9ORV9UQUlMCVNDUkFUQ0hfUkVHKDB4MzgpCisKK3N0cnVjdCBpeHBkZXZfcnhfZGVzYworeworCXUzMglidWZfYWRkcjsKKwl1MzIJYnVmX2xlbmd0aDsKKwl1MzIJY2hhbm5lbDsKKwl1MzIJcGt0X2xlbmd0aDsKK307CisKK3N0cnVjdCBpeHBkZXZfdHhfZGVzYworeworCXUzMglidWZfYWRkcjsKKwl1MzIJcGt0X2xlbmd0aDsKKwl1MzIJY2hhbm5lbDsKKwl1MzIJdW51c2VkOworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvcG0zMzg2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2FiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFBNMzM4NnMgb24gdGhlIFJhZGlzeXMgRU5QMjYxMQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICogRGVkaWNhdGVkIHRvIE1hcmlqYSBLdWxpa292YS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgInBtMzM4Ni5oIgorCisvKgorICogUmVhZCBmcm9tIHJlZ2lzdGVyICdyZWcnIG9mIFBNMzM4NiBkZXZpY2UgJ3BtJy4KKyAqLworc3RhdGljIHUxNiBwbTMzODZfcmVnX3JlYWQoaW50IHBtLCBpbnQgcmVnKQoreworCXZvaWQgKl9yZWc7CisJdTE2IHZhbHVlOworCisJX3JlZyA9ICh2b2lkICopRU5QMjYxMV9QTTMzODZfMF9WSVJUX0JBU0U7CisJaWYgKHBtID09IDEpCisJCV9yZWcgPSAodm9pZCAqKUVOUDI2MTFfUE0zMzg2XzFfVklSVF9CQVNFOworCisJdmFsdWUgPSAqKCh2b2xhdGlsZSB1MTYgKikoX3JlZyArIChyZWcgPDwgMSkpKTsKKworLy8JcHJpbnRrKEtFUk5fSU5GTyAicG0zMzg2X3JlZ19yZWFkKCVkLCAlLjN4KSA9ICUuOHhcbiIsIHBtLCByZWcsIHZhbHVlKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIFdyaXRlIHRvIHJlZ2lzdGVyICdyZWcnIG9mIFBNMzM4NiBkZXZpY2UgJ3BtJywgYW5kIHBlcmZvcm0KKyAqIGEgcmVhZGJhY2sgZnJvbSB0aGUgaWRlbnRpZmljYXRpb24gcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBtMzM4Nl9yZWdfd3JpdGUoaW50IHBtLCBpbnQgcmVnLCB1MTYgdmFsdWUpCit7CisJdm9pZCAqX3JlZzsKKwl1MTYgZHVtbXk7CisKKy8vCXByaW50ayhLRVJOX0lORk8gInBtMzM4Nl9yZWdfd3JpdGUoJWQsICUuM3gsICUuOHgpXG4iLCBwbSwgcmVnLCB2YWx1ZSk7CisKKwlfcmVnID0gKHZvaWQgKilFTlAyNjExX1BNMzM4Nl8wX1ZJUlRfQkFTRTsKKwlpZiAocG0gPT0gMSkKKwkJX3JlZyA9ICh2b2lkICopRU5QMjYxMV9QTTMzODZfMV9WSVJUX0JBU0U7CisKKwkqKCh2b2xhdGlsZSB1MTYgKikoX3JlZyArIChyZWcgPDwgMSkpKSA9IHZhbHVlOworCisJZHVtbXkgPSAqKCh2b2xhdGlsZSB1MTYgKilfcmVnKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwLCAlMCIgOiAiK3IiIChkdW1teSkpOworfQorCisvKgorICogUmVhZCBmcm9tIHBvcnQgJ3BvcnQnIHJlZ2lzdGVyICdyZWcnLCB3aGVyZSB0aGUgcmVnaXN0ZXJzCisgKiBmb3IgdGhlIGRpZmZlcmVudCBwb3J0cyBhcmUgJ3NwYWNpbmcnIHJlZ2lzdGVycyBhcGFydC4KKyAqLworc3RhdGljIHUxNiBwbTMzODZfcG9ydF9yZWdfcmVhZChpbnQgcG9ydCwgaW50IF9yZWcsIGludCBzcGFjaW5nKQoreworCWludCByZWc7CisKKwlyZWcgPSBfcmVnOworCWlmIChwb3J0ICYgMSkKKwkJcmVnICs9IHNwYWNpbmc7CisKKwlyZXR1cm4gcG0zMzg2X3JlZ19yZWFkKHBvcnQgPj4gMSwgcmVnKTsKK30KKworLyoKKyAqIFdyaXRlIHRvIHBvcnQgJ3BvcnQnIHJlZ2lzdGVyICdyZWcnLCB3aGVyZSB0aGUgcmVnaXN0ZXJzCisgKiBmb3IgdGhlIGRpZmZlcmVudCBwb3J0cyBhcmUgJ3NwYWNpbmcnIHJlZ2lzdGVycyBhcGFydC4KKyAqLworc3RhdGljIHZvaWQgcG0zMzg2X3BvcnRfcmVnX3dyaXRlKGludCBwb3J0LCBpbnQgX3JlZywgaW50IHNwYWNpbmcsIHUxNiB2YWx1ZSkKK3sKKwlpbnQgcmVnOworCisJcmVnID0gX3JlZzsKKwlpZiAocG9ydCAmIDEpCisJCXJlZyArPSBzcGFjaW5nOworCisJcG0zMzg2X3JlZ193cml0ZShwb3J0ID4+IDEsIHJlZywgdmFsdWUpOworfQorCisKK3ZvaWQgcG0zMzg2X3Jlc2V0KHZvaWQpCit7CisJdTggbWFjWzNdWzZdOworCisJLyogU2F2ZSBwcm9ncmFtbWVkIE1BQyBhZGRyZXNzZXMuICAqLworCXBtMzM4Nl9nZXRfbWFjKDAsIG1hY1swXSk7CisJcG0zMzg2X2dldF9tYWMoMSwgbWFjWzFdKTsKKwlwbTMzODZfZ2V0X21hYygyLCBtYWNbMl0pOworCisJLyogQXNzZXJ0IGFuYWxvZyBhbmQgZGlnaXRhbCByZXNldC4gICovCisJcG0zMzg2X3JlZ193cml0ZSgwLCAweDAwMiwgMHgwMDYwKTsKKwlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjApOworCW1kZWxheSgxKTsKKworCS8qIERlYXNzZXJ0IGFuYWxvZyByZXNldC4gICovCisJcG0zMzg2X3JlZ193cml0ZSgwLCAweDAwMiwgMHgwMDYyKTsKKwlwbTMzODZfcmVnX3dyaXRlKDEsIDB4MDAyLCAweDAwNjIpOworCW1kZWxheSgxMCk7CisKKwkvKiBEZWFzc2VydCBkaWdpdGFsIHJlc2V0LiAgKi8KKwlwbTMzODZfcmVnX3dyaXRlKDAsIDB4MDAyLCAweDAwNjMpOworCXBtMzM4Nl9yZWdfd3JpdGUoMSwgMHgwMDIsIDB4MDA2Myk7CisJbWRlbGF5KDEwKTsKKworCS8qIFJlc3RvcmUgcHJvZ3JhbW1lZCBNQUMgYWRkcmVzc2VzLiAgKi8KKwlwbTMzODZfc2V0X21hYygwLCBtYWNbMF0pOworCXBtMzM4Nl9zZXRfbWFjKDEsIG1hY1sxXSk7CisJcG0zMzg2X3NldF9tYWMoMiwgbWFjWzJdKTsKKworCS8qIERpc2FibGUgY2FycmllciBvbiBhbGwgcG9ydHMuICAqLworCXBtMzM4Nl9zZXRfY2FycmllcigwLCAwKTsKKwlwbTMzODZfc2V0X2NhcnJpZXIoMSwgMCk7CisJcG0zMzg2X3NldF9jYXJyaWVyKDIsIDApOworfQorCitzdGF0aWMgdTE2IHN3YXBoKHUxNiB4KQoreworCXJldHVybiAoKHggPDwgOCkgfCAoeCA+PiA4KSkgJiAweGZmZmY7Cit9CisKK3ZvaWQgcG0zMzg2X2luaXRfcG9ydChpbnQgcG9ydCkKK3sKKwlpbnQgcG0gPSBwb3J0ID4+IDE7CisKKwkvKgorCSAqIFdvcmsgYXJvdW5kIEVOUDI2MTEgYm9vdGxvYWRlciBwcm9ncmFtbWluZyBNQUMgYWRkcmVzcworCSAqIGluIHJldmVyc2UuCisJICovCisJaWYgKHBtMzM4Nl9wb3J0X3JlZ19yZWFkKHBvcnQsIDB4MzBhLCAweDEwMCkgPT0gMHgwMDAwICYmCisJICAgIChwbTMzODZfcG9ydF9yZWdfcmVhZChwb3J0LCAweDMwOSwgMHgxMDApICYgMHhmZjAwKSA9PSAweDUwMDApIHsKKwkJdTE2IHRlbXBbM107CisKKwkJdGVtcFswXSA9IHBtMzM4Nl9wb3J0X3JlZ19yZWFkKHBvcnQsIDB4MzA4LCAweDEwMCk7CisJCXRlbXBbMV0gPSBwbTMzODZfcG9ydF9yZWdfcmVhZChwb3J0LCAweDMwOSwgMHgxMDApOworCQl0ZW1wWzJdID0gcG0zMzg2X3BvcnRfcmVnX3JlYWQocG9ydCwgMHgzMGEsIDB4MTAwKTsKKwkJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzA4LCAweDEwMCwgc3dhcGgodGVtcFsyXSkpOworCQlwbTMzODZfcG9ydF9yZWdfd3JpdGUocG9ydCwgMHgzMDksIDB4MTAwLCBzd2FwaCh0ZW1wWzFdKSk7CisJCXBtMzM4Nl9wb3J0X3JlZ193cml0ZShwb3J0LCAweDMwYSwgMHgxMDAsIHN3YXBoKHRlbXBbMF0pKTsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpc2UgbmFycm93YmFuZGluZyBtb2RlLiAgU2VlIGFwcGxpY2F0aW9uIG5vdGUgMjAxMDQ4NgorCSAqIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgKEBAQCBXZSBhbHNvIG5lZWQgdG8gaXNzdWUgYSByZXNldAorCSAqIHdoZW4gUk9PTCBvciBET09MIGFyZSBkZXRlY3RlZC4pCisJICovCisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4NzA4LCAweDEwLCAweGQwNTUpOworCXVkZWxheSg1MDApOworCXBtMzM4Nl9wb3J0X3JlZ193cml0ZShwb3J0LCAweDcwOCwgMHgxMCwgMHg1MDU1KTsKKworCS8qCisJICogU1BJLTMgaW5ncmVzcyBibG9jay4gIFNldCA2NCBieXRlcyBTUEktMyBidXJzdCBzaXplCisJICogdG93YXJkcyBTUEktMyBicmlkZ2UuCisJICovCisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MTIyLCAweDIwLCAweDAwMDIpOworCisJLyoKKwkgKiBFbmFibGUgaW5ncmVzcyBwcm90b2NvbCBjaGVja2luZywgYW5kIHNvZnQgcmVzZXQgdGhlCisJICogU1BJLTMgaW5ncmVzcyBibG9jay4KKwkgKi8KKwlwbTMzODZfcmVnX3dyaXRlKHBtLCAweDEwMywgMHgwMDAzKTsKKwl3aGlsZSAoIShwbTMzODZfcmVnX3JlYWQocG0sIDB4MTAzKSAmIDB4ODApKQorCQk7CisKKwkvKgorCSAqIFNQSS0zIGVncmVzcyBibG9jay4gIEdhdGhlciAxMjI4OCBieXRlcyBvZiB0aGUgY3VycmVudAorCSAqIHBhY2tldCBpbiB0aGUgVFggZmlmbyBiZWZvcmUgaW5pdGlhdGluZyB0cmFuc21pdCBvbiB0aGUKKwkgKiBTRVJERVMgaW50ZXJmYWNlLiAgKFByZXZlbnRzIFRYIHVuZGVyZmxvd3MuKQorCSAqLworCXBtMzM4Nl9wb3J0X3JlZ193cml0ZShwb3J0LCAweDIyMSwgMHgyMCwgMHgwMDA3KTsKKworCS8qCisJICogRW5mb3JjZSBvZGQgcGFyaXR5IGZyb20gdGhlIFNQSS0zIGJyaWRnZSwgYW5kIHNvZnQgcmVzZXQKKwkgKiB0aGUgU1BJLTMgZWdyZXNzIGJsb2NrLgorCSAqLworCXBtMzM4Nl9yZWdfd3JpdGUocG0sIDB4MjAzLCAweDAwMGQgJiB+KDQgPDwgKHBvcnQgJiAxKSkpOworCXdoaWxlICgocG0zMzg2X3JlZ19yZWFkKHBtLCAweDIwMykgJiAweDAwMGMpICE9IDB4MDAwYykKKwkJOworCisJLyoKKwkgKiBFR01BQyBibG9jay4gIFNldCB0aGlzIGNoYW5uZWxzIHRvIHJlamVjdCBsb25nIHByZWFtYmxlcywKKwkgKiBub3Qgc2VuZCBvciB0cmFuc21pdCBQQVVTRSBmcmFtZXMsIGVuYWJsZSBwcmVhbWJsZSBjaGVja2luZywKKwkgKiBkaXNhYmxlIGZyYW1lIGxlbmd0aCBjaGVja2luZywgZW5hYmxlIEZDUyBhcHBlbmRpbmcsIGVuYWJsZQorCSAqIFRYIGZyYW1lIHBhZGRpbmcuCisJICovCisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzAyLCAweDEwMCwgMHgwMTEzKTsKKworCS8qCisJICogU29mdCByZXNldCB0aGUgRUdNQUMgYmxvY2suCisJICovCisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzAxLCAweDEwMCwgMHg4MDAwKTsKKwlwbTMzODZfcG9ydF9yZWdfd3JpdGUocG9ydCwgMHgzMDEsIDB4MTAwLCAweDAwMDApOworCisJLyoKKwkgKiBBdXRvLXNlbnNlIGF1dG9uZWdvdGlhdGlvbiBzdGF0dXMuCisJICovCisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzA2LCAweDEwMCwgMHgwMTAwKTsKKworCS8qCisJICogQWxsb3cgcmVjZXB0aW9uIG9mIGp1bWJvIGZyYW1lcy4KKwkgKi8KKwlwbTMzODZfcG9ydF9yZWdfd3JpdGUocG9ydCwgMHgzMTAsIDB4MTAwLCA5MDE4KTsKKworCS8qCisJICogQWxsb3cgdHJhbnNtaXNzaW9uIG9mIGp1bWJvIGZyYW1lcy4KKwkgKi8KKwlwbTMzODZfcG9ydF9yZWdfd3JpdGUocG9ydCwgMHgzMzYsIDB4MTAwLCA5MDE4KTsKKworCS8qIEBAQCBTaG91bGQgc2V0IDB4MzM3LzB4NDM3IChSWCBmb3J3YXJkaW5nIHRocmVzaG9sZC4pICAqLworCisJLyoKKwkgKiBTZXQgYXV0b25lZ290aWF0aW9uIHBhcmFtZXRlcnMgdG8gJ25vIFBBVVNFLCBmdWxsIGR1cGxleC4nCisJICovCisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzFjLCAweDEwMCwgMHgwMDIwKTsKKworCS8qCisJICogRW5hYmxlIGFuZCByZXN0YXJ0IGF1dG9uZWdvdGlhdGlvbi4KKwkgKi8KKwlwbTMzODZfcG9ydF9yZWdfd3JpdGUocG9ydCwgMHgzMTgsIDB4MTAwLCAweDAwMDMpOworCXBtMzM4Nl9wb3J0X3JlZ193cml0ZShwb3J0LCAweDMxOCwgMHgxMDAsIDB4MDAwMik7Cit9CisKK3ZvaWQgcG0zMzg2X2dldF9tYWMoaW50IHBvcnQsIHU4ICptYWMpCit7CisJdTE2IHRlbXA7CisKKwl0ZW1wID0gcG0zMzg2X3BvcnRfcmVnX3JlYWQocG9ydCwgMHgzMDgsIDB4MTAwKTsKKwltYWNbMF0gPSB0ZW1wICYgMHhmZjsKKwltYWNbMV0gPSAodGVtcCA+PiA4KSAmIDB4ZmY7CisKKwl0ZW1wID0gcG0zMzg2X3BvcnRfcmVnX3JlYWQocG9ydCwgMHgzMDksIDB4MTAwKTsKKwltYWNbMl0gPSB0ZW1wICYgMHhmZjsKKwltYWNbM10gPSAodGVtcCA+PiA4KSAmIDB4ZmY7CisKKwl0ZW1wID0gcG0zMzg2X3BvcnRfcmVnX3JlYWQocG9ydCwgMHgzMGEsIDB4MTAwKTsKKwltYWNbNF0gPSB0ZW1wICYgMHhmZjsKKwltYWNbNV0gPSAodGVtcCA+PiA4KSAmIDB4ZmY7Cit9CisKK3ZvaWQgcG0zMzg2X3NldF9tYWMoaW50IHBvcnQsIHU4ICptYWMpCit7CisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzA4LCAweDEwMCwgKG1hY1sxXSA8PCA4KSB8IG1hY1swXSk7CisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzA5LCAweDEwMCwgKG1hY1szXSA8PCA4KSB8IG1hY1syXSk7CisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzBhLCAweDEwMCwgKG1hY1s1XSA8PCA4KSB8IG1hY1s0XSk7Cit9CisKK3N0YXRpYyB1MzIgcG0zMzg2X2dldF9zdGF0KGludCBwb3J0LCB1MTYgYmFzZSkKK3sKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IHBtMzM4Nl9wb3J0X3JlZ19yZWFkKHBvcnQsIGJhc2UsIDB4MTAwKTsKKwl2YWx1ZSB8PSBwbTMzODZfcG9ydF9yZWdfcmVhZChwb3J0LCBiYXNlICsgMSwgMHgxMDApIDw8IDE2OworCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIHBtMzM4Nl9nZXRfc3RhdHMoaW50IHBvcnQsIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cykKK3sKKwkvKgorCSAqIFNuYXBzaG90IHN0YXRpc3RpY3MgY291bnRlcnMuCisJICovCisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4NTAwLCAweDEwMCwgMHgwMDAxKTsKKwl3aGlsZSAocG0zMzg2X3BvcnRfcmVnX3JlYWQocG9ydCwgMHg1MDAsIDB4MTAwKSAmIDB4MDAwMSkKKwkJOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisKKwlzdGF0cy0+cnhfcGFja2V0cyA9IHBtMzM4Nl9nZXRfc3RhdChwb3J0LCAweDUxMCk7CisJc3RhdHMtPnR4X3BhY2tldHMgPSBwbTMzODZfZ2V0X3N0YXQocG9ydCwgMHg1OTApOworCXN0YXRzLT5yeF9ieXRlcyA9IHBtMzM4Nl9nZXRfc3RhdChwb3J0LCAweDUxNCk7CisJc3RhdHMtPnR4X2J5dGVzID0gcG0zMzg2X2dldF9zdGF0KHBvcnQsIDB4NTk0KTsKKwkvKiBAQEAgQWRkIG90aGVyIHN0YXRzLiAgKi8KK30KKwordm9pZCBwbTMzODZfc2V0X2NhcnJpZXIoaW50IHBvcnQsIGludCBzdGF0ZSkKK3sKKwlwbTMzODZfcG9ydF9yZWdfd3JpdGUocG9ydCwgMHg3MDMsIDB4MTAsIHN0YXRlID8gMHgxMDAxIDogMHgwMDAwKTsKK30KKworaW50IHBtMzM4Nl9pc19saW5rX3VwKGludCBwb3J0KQoreworCXUxNiB0ZW1wOworCisJdGVtcCA9IHBtMzM4Nl9wb3J0X3JlZ19yZWFkKHBvcnQsIDB4MzFhLCAweDEwMCk7CisJdGVtcCA9IHBtMzM4Nl9wb3J0X3JlZ19yZWFkKHBvcnQsIDB4MzFhLCAweDEwMCk7CisKKwlyZXR1cm4gISEodGVtcCAmIDB4MDAwMik7Cit9CisKK3ZvaWQgcG0zMzg2X2VuYWJsZV9yeChpbnQgcG9ydCkKK3sKKwl1MTYgdGVtcDsKKworCXRlbXAgPSBwbTMzODZfcG9ydF9yZWdfcmVhZChwb3J0LCAweDMwMywgMHgxMDApOworCXRlbXAgfD0gMHgxMDAwOworCXBtMzM4Nl9wb3J0X3JlZ193cml0ZShwb3J0LCAweDMwMywgMHgxMDAsIHRlbXApOworfQorCit2b2lkIHBtMzM4Nl9kaXNhYmxlX3J4KGludCBwb3J0KQoreworCXUxNiB0ZW1wOworCisJdGVtcCA9IHBtMzM4Nl9wb3J0X3JlZ19yZWFkKHBvcnQsIDB4MzAzLCAweDEwMCk7CisJdGVtcCAmPSAweGVmZmY7CisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzAzLCAweDEwMCwgdGVtcCk7Cit9CisKK3ZvaWQgcG0zMzg2X2VuYWJsZV90eChpbnQgcG9ydCkKK3sKKwl1MTYgdGVtcDsKKworCXRlbXAgPSBwbTMzODZfcG9ydF9yZWdfcmVhZChwb3J0LCAweDMwMywgMHgxMDApOworCXRlbXAgfD0gMHg0MDAwOworCXBtMzM4Nl9wb3J0X3JlZ193cml0ZShwb3J0LCAweDMwMywgMHgxMDAsIHRlbXApOworfQorCit2b2lkIHBtMzM4Nl9kaXNhYmxlX3R4KGludCBwb3J0KQoreworCXUxNiB0ZW1wOworCisJdGVtcCA9IHBtMzM4Nl9wb3J0X3JlZ19yZWFkKHBvcnQsIDB4MzAzLCAweDEwMCk7CisJdGVtcCAmPSAweGJmZmY7CisJcG0zMzg2X3BvcnRfcmVnX3dyaXRlKHBvcnQsIDB4MzAzLCAweDEwMCwgdGVtcCk7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvcG0zMzg2LmggYi9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTJiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgUE0zMzg2cyBvbiB0aGUgUmFkaXN5cyBFTlAyNjExCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1BNMzM4Nl9ICisjZGVmaW5lIF9fUE0zMzg2X0gKKwordm9pZCBwbTMzODZfcmVzZXQodm9pZCk7Cit2b2lkIHBtMzM4Nl9pbml0X3BvcnQoaW50IHBvcnQpOwordm9pZCBwbTMzODZfZ2V0X21hYyhpbnQgcG9ydCwgdTggKm1hYyk7Cit2b2lkIHBtMzM4Nl9zZXRfbWFjKGludCBwb3J0LCB1OCAqbWFjKTsKK3ZvaWQgcG0zMzg2X2dldF9zdGF0cyhpbnQgcG9ydCwgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzKTsKK3ZvaWQgcG0zMzg2X3NldF9jYXJyaWVyKGludCBwb3J0LCBpbnQgc3RhdGUpOworaW50IHBtMzM4Nl9pc19saW5rX3VwKGludCBwb3J0KTsKK3ZvaWQgcG0zMzg2X2VuYWJsZV9yeChpbnQgcG9ydCk7Cit2b2lkIHBtMzM4Nl9kaXNhYmxlX3J4KGludCBwb3J0KTsKK3ZvaWQgcG0zMzg2X2VuYWJsZV90eChpbnQgcG9ydCk7Cit2b2lkIHBtMzM4Nl9kaXNhYmxlX3R4KGludCBwb3J0KTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBmODU3YWU5Li5iMGMzYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0xMTUsNiArMTE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggYTg0MmVjYy4uOTM2OWY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC04NSw3ICs4NSw3IEBACiBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBpbnQgX19wcHBvZV94bWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wczsKIHN0YXRpYyBERUZJTkVfUldMT0NLKHBwcG9lX2hhc2hfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzOwpAQCAtMzgzLDggKzM4Myw2IEBACiB7CiAJc3RydWN0IHBwcG9lX2hkciAqcGg7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwotCXN0cnVjdCBzb2NrICpzazsKLQlpbnQgcmV0OwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpKSkKIAkJZ290byBkcm9wOwpAQCAtMzk1LDI0ICszOTMsOCBAQAogCXBoID0gKHN0cnVjdCBwcHBvZV9oZHIgKikgc2tiLT5uaC5yYXc7CiAKIAlwbyA9IGdldF9pdGVtKCh1bnNpZ25lZCBsb25nKSBwaC0+c2lkLCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKLQlpZiAoIXBvKSAKLQkJZ290byBkcm9wOwotCi0Jc2sgPSBza19wcHBveChwbyk7Ci0JYmhfbG9ja19zb2NrKHNrKTsKLQotCS8qIFNvY2tldCBzdGF0ZSBpcyB1bmtub3duLCBtdXN0IHB1dCBza2IgaW50byBiYWNrbG9nLiAqLwotCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spICE9IDApIHsKLQkJc2tfYWRkX2JhY2tsb2coc2ssIHNrYik7Ci0JCXJldCA9IE5FVF9SWF9TVUNDRVNTOwotCX0gZWxzZSB7Ci0JCXJldCA9IHBwcG9lX3Jjdl9jb3JlKHNrLCBza2IpOwotCX0KLQotCWJoX3VubG9ja19zb2NrKHNrKTsKLQlzb2NrX3B1dChzayk7Ci0KLQlyZXR1cm4gcmV0OworCWlmIChwbyAhPSBOVUxMKSAKKwkJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrX3BwcG94KHBvKSwgc2tiKTsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiBvdXQ6CkBAIC0xMDgxLDkgKzEwNjMsNyBAQAogc3RhdGljIGlubGluZSBpbnQgcHBwb2VfcHJvY19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCi0vKiAtPmlvY3RsIGFyZSBzZXQgYXQgcHBwb3hfY3JlYXRlICovCi0KLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcyA9IHsKICAgICAuZmFtaWx5CQk9IEFGX1BQUE9YLAogICAgIC5vd25lcgkJPSBUSElTX01PRFVMRSwKICAgICAucmVsZWFzZQkJPSBwcHBvZV9yZWxlYXNlLApAQCAtMTA5OSw3ICsxMDc5LDggQEAKICAgICAuZ2V0c29ja29wdAkJPSBzb2NrX25vX2dldHNvY2tvcHQsCiAgICAgLnNlbmRtc2cJCT0gcHBwb2Vfc2VuZG1zZywKICAgICAucmVjdm1zZwkJPSBwcHBvZV9yZWN2bXNnLAotICAgIC5tbWFwCQk9IHNvY2tfbm9fbW1hcAorICAgIC5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKKyAgICAuaW9jdGwJCT0gcHBwb3hfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBwcG94X3Byb3RvIHBwcG9lX3Byb3RvID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb3guYyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKaW5kZXggMGMxZTExNC4uOTMxNTA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb3guYworKysgYi9kcml2ZXJzL25ldC9wcHBveC5jCkBAIC02OCw4ICs2OCw3IEBACiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcHBwb3hfcHJvdG8pOwogRVhQT1JUX1NZTUJPTChwcHBveF91bmJpbmRfc29jayk7CiAKLXN0YXRpYyBpbnQgcHBwb3hfaW9jdGwoc3RydWN0IHNvY2tldCogc29jaywgdW5zaWduZWQgaW50IGNtZCwgCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK2ludCBwcHBveF9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CkBAIC0xMDUsNiArMTA0LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK0VYUE9SVF9TWU1CT0wocHBwb3hfaW9jdGwpOwogCiBzdGF0aWMgaW50IHBwcG94X2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpCiB7CkBAIC0xMTksMTEgKzExOSw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSBwcHBveF9wcm90b3NbcHJvdG9jb2xdLT5jcmVhdGUoc29jayk7Ci0JaWYgKCFyYykgewotCQkvKiBXZSBnZXQgdG8gc2V0IHRoZSBpb2N0bCBoYW5kbGVyLiAqLwotCQkvKiBGb3IgZXZlcnl0aGluZyBlbHNlLCBwcHBveCBpcyBqdXN0IGEgc2hlbGwuICovCi0JCXNvY2stPm9wcy0+aW9jdGwgPSBwcHBveF9pb2N0bDsKLQl9CisKIAltb2R1bGVfcHV0KHBwcG94X3Byb3Rvc1twcm90b2NvbF0tPm93bmVyKTsKIG91dDoKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggNjY5ZGQ1Mi4uODljNDY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiVmVyc2lvbiAyLjAuOS4zIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiVmVyc2lvbiAyLjAuOS40IgogCiAvKiBTMmlvIERyaXZlciBuYW1lICYgdmVyc2lvbi4gKi8KIHN0YXRpYyBjaGFyIHMyaW9fZHJpdmVyX25hbWVbXSA9ICJOZXRlcmlvbiI7CkBAIC00MTIsNyArNDEyLDcgQEAKIAkJICAgIGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuIC0gMTsKIAkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmZpZm9fbm8gPSBpOwogCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubmljID0gbmljOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubWF4X3R4ZHMgPSBNQVhfU0tCX0ZSQUdTICsgMTsKKwkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLm1heF90eGRzID0gTUFYX1NLQl9GUkFHUyArIDI7CiAKIAkJZm9yIChqID0gMDsgaiA8IHBhZ2VfbnVtOyBqKyspIHsKIAkJCWludCBrID0gMDsKQEAgLTQ1OSw2ICs0NTksMTAgQEAKIAkJfQogCX0KIAorCW5pYy0+dWZvX2luX2JhbmRfdiA9IGttYWxsb2MoKHNpemVvZih1NjQpICogc2l6ZSksIEdGUF9LRVJORUwpOworCWlmICghbmljLT51Zm9faW5fYmFuZF92KQorCQlyZXR1cm4gLUVOT01FTTsKKwogCS8qIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIFJYRHMgaW4gUmluZ3MgKi8KIAlzaXplID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7CkBAIC03MzEsNiArNzM1LDggQEAKIAkJCQkgICAgbWFjX2NvbnRyb2wtPnN0YXRzX21lbSwKIAkJCQkgICAgbWFjX2NvbnRyb2wtPnN0YXRzX21lbV9waHkpOwogCX0KKwlpZiAobmljLT51Zm9faW5fYmFuZF92KQorCQlrZnJlZShuaWMtPnVmb19pbl9iYW5kX3YpOwogfQogCiAvKioKQEAgLTIwMDMsNiArMjAwOSw0OSBAQAogCiAJcmV0dXJuIFNVQ0NFU1M7CiB9CisvKioKKyAqIHMyaW9fdHhkbF9nZXRza2IgLSBHZXQgdGhlIHNrYiBmcm9tIHR4ZGwsIHVubWFwIGFuZCByZXR1cm4gc2tiCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqczJpb190eGRsX2dldHNrYihmaWZvX2luZm9fdCAqZmlmb19kYXRhLCBUeERfdCAqdHhkbHAsIGludCBnZXRfb2ZmKQoreworCW5pY190ICpuaWMgPSBmaWZvX2RhdGEtPm5pYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCVR4RF90ICp0eGRzOworCXUxNiBqLCBmcmdfY250OworCisJdHhkcyA9IHR4ZGxwOworCWlmICh0eGRzLT5Ib3N0X0NvbnRyb2wgPT0gKHU2NCkobG9uZyluaWMtPnVmb19pbl9iYW5kX3YpIHsKKwkJcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KQorCQkJdHhkcy0+QnVmZmVyX1BvaW50ZXIsIHNpemVvZih1NjQpLAorCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCXR4ZHMrKzsKKwl9CisKKwlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgKCh1bnNpZ25lZCBsb25nKQorCQkJdHhkcy0+SG9zdF9Db250cm9sKTsKKwlpZiAoIXNrYikgeworCQltZW1zZXQodHhkbHAsIDAsIChzaXplb2YoVHhEX3QpICogZmlmb19kYXRhLT5tYXhfdHhkcykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KQorCQkJIHR4ZHMtPkJ1ZmZlcl9Qb2ludGVyLAorCQkJIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbiwKKwkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwlmcmdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlpZiAoZnJnX2NudCkgeworCQl0eGRzKys7CisJCWZvciAoaiA9IDA7IGogPCBmcmdfY250OyBqKyssIHR4ZHMrKykgeworCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdOworCQkJaWYgKCF0eGRzLT5CdWZmZXJfUG9pbnRlcikKKwkJCQlicmVhazsKKwkJCXBjaV91bm1hcF9wYWdlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpIAorCQkJCQl0eGRzLT5CdWZmZXJfUG9pbnRlciwKKwkJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCX0KKwl9CisJdHhkbHAtPkhvc3RfQ29udHJvbCA9IDA7CisJcmV0dXJuKHNrYik7Cit9CiAKIC8qKgogICogIGZyZWVfdHhfYnVmZmVycyAtIEZyZWUgYWxsIHF1ZXVlZCBUeCBidWZmZXJzCkBAIC0yMDIwLDcgKzIwNjksNyBAQAogCWludCBpLCBqOwogCW1hY19pbmZvX3QgKm1hY19jb250cm9sOwogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKLQlpbnQgY250ID0gMCwgZnJnX2NudDsKKwlpbnQgY250ID0gMDsKIAogCW1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7CiAJY29uZmlnID0gJm5pYy0+Y29uZmlnOwpAQCAtMjAyOSwzOCArMjA3OCwxMSBAQAogCQlmb3IgKGogPSAwOyBqIDwgY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4gLSAxOyBqKyspIHsKIAkJCXR4ZHAgPSAoVHhEX3QgKikgbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mb1tqXS4KIAkJCSAgICBsaXN0X3ZpcnRfYWRkcjsKLQkJCXNrYiA9Ci0JCQkgICAgKHN0cnVjdCBza19idWZmICopICgodW5zaWduZWQgbG9uZykgdHhkcC0+Ci0JCQkJCQlIb3N0X0NvbnRyb2wpOwotCQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQkJbWVtc2V0KHR4ZHAsIDAsIHNpemVvZihUeERfdCkgKgotCQkJCSAgICAgICBjb25maWctPm1heF90eGRzKTsKLQkJCQljb250aW51ZTsKKwkJCXNrYiA9IHMyaW9fdHhkbF9nZXRza2IoJm1hY19jb250cm9sLT5maWZvc1tpXSwgdHhkcCwgaik7CisJCQlpZiAoc2tiKSB7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCWNudCsrOwogCQkJfQotCQkJZnJnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJCSB0eGRwLT5CdWZmZXJfUG9pbnRlciwKLQkJCQkJIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbiwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJaWYgKGZyZ19jbnQpIHsKLQkJCQlUeERfdCAqdGVtcDsKLQkJCQl0ZW1wID0gdHhkcDsKLQkJCQl0eGRwKys7Ci0JCQkJZm9yIChqID0gMDsgaiA8IGZyZ19jbnQ7IGorKywgdHhkcCsrKSB7Ci0JCQkJCXNrYl9mcmFnX3QgKmZyYWcgPQotCQkJCQkgICAgJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal07Ci0JCQkJCXBjaV91bm1hcF9wYWdlKG5pYy0+cGRldiwKLQkJCQkJCSAgICAgICAoZG1hX2FkZHJfdCkKLQkJCQkJCSAgICAgICB0eGRwLT4KLQkJCQkJCSAgICAgICBCdWZmZXJfUG9pbnRlciwKLQkJCQkJCSAgICAgICBmcmFnLT5zaXplLAotCQkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJCX0KLQkJCQl0eGRwID0gdGVtcDsKLQkJCX0KLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCW1lbXNldCh0eGRwLCAwLCBzaXplb2YoVHhEX3QpICogY29uZmlnLT5tYXhfdHhkcyk7Ci0JCQljbnQrKzsKIAkJfQogCQlEQkdfUFJJTlQoSU5UUl9EQkcsCiAJCQkgICIlczpmb3JjaWJseSBmcmVlaW5nICVkIHNrYnMgb24gRklGTyVkXG4iLApAQCAtMjY2MSw3ICsyNjgzLDYgQEAKIAl0eF9jdXJyX2dldF9pbmZvX3QgZ2V0X2luZm8sIHB1dF9pbmZvOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJVHhEX3QgKnR4ZGxwOwotCXUxNiBqLCBmcmdfY250OwogCiAJZ2V0X2luZm8gPSBmaWZvX2RhdGEtPnR4X2N1cnJfZ2V0X2luZm87CiAJcHV0X2luZm8gPSBmaWZvX2RhdGEtPnR4X2N1cnJfcHV0X2luZm87CkBAIC0yNjg0LDggKzI3MDUsNyBAQAogCQkJfQogCQl9CiAKLQkJc2tiID0gKHN0cnVjdCBza19idWZmICopICgodW5zaWduZWQgbG9uZykKLQkJCQl0eGRscC0+SG9zdF9Db250cm9sKTsKKwkJc2tiID0gczJpb190eGRsX2dldHNrYihmaWZvX2RhdGEsIHR4ZGxwLCBnZXRfaW5mby5vZmZzZXQpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE51bGwgc2tiICIsCiAJCQlfX0ZVTkNUSU9OX18pOwpAQCAtMjY5MywzNCArMjcxMyw2IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlmcmdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJbmljLT50eF9wa3RfY291bnQrKzsKLQotCQlwY2lfdW5tYXBfc2luZ2xlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJIHR4ZGxwLT5CdWZmZXJfUG9pbnRlciwKLQkJCQkgc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuLAotCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKGZyZ19jbnQpIHsKLQkJCVR4RF90ICp0ZW1wOwotCQkJdGVtcCA9IHR4ZGxwOwotCQkJdHhkbHArKzsKLQkJCWZvciAoaiA9IDA7IGogPCBmcmdfY250OyBqKyssIHR4ZGxwKyspIHsKLQkJCQlza2JfZnJhZ190ICpmcmFnID0KLQkJCQkgICAgJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal07Ci0JCQkJaWYgKCF0eGRscC0+QnVmZmVyX1BvaW50ZXIpCi0JCQkJCWJyZWFrOwotCQkJCXBjaV91bm1hcF9wYWdlKG5pYy0+cGRldiwKLQkJCQkJICAgICAgIChkbWFfYWRkcl90KQotCQkJCQkgICAgICAgdHhkbHAtPgotCQkJCQkgICAgICAgQnVmZmVyX1BvaW50ZXIsCi0JCQkJCSAgICAgICBmcmFnLT5zaXplLAotCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQl9Ci0JCQl0eGRscCA9IHRlbXA7Ci0JCX0KLQkJbWVtc2V0KHR4ZGxwLCAwLAotCQkgICAgICAgKHNpemVvZihUeERfdCkgKiBmaWZvX2RhdGEtPm1heF90eGRzKSk7Ci0KIAkJLyogVXBkYXRpbmcgdGhlIHN0YXRpc3RpY3MgYmxvY2sgKi8KIAkJbmljLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKQEAgLTMzMzEsNyArMzMyMyw3IEBACiAJCQkJCSAgczJpb19tc2l4X2ZpZm9faGFuZGxlLCAwLCBzcC0+ZGVzYzEsCiAJCQkJCSAgc3AtPnMyaW9fZW50cmllc1tpXS5hcmcpOwogCQkJCURCR19QUklOVChFUlJfREJHLCAiJXMgQCAweCVsbHhcbiIsIHNwLT5kZXNjMSwgCi0JCQkJCQkJc3AtPm1zaXhfaW5mb1tpXS5hZGRyKTsKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzcC0+bXNpeF9pbmZvW2ldLmFkZHIpOwogCQkJfSBlbHNlIHsKIAkJCQlzcHJpbnRmKHNwLT5kZXNjMiwgIiVzOk1TSS1YLSVkLVJYIiwKIAkJCQkJZGV2LT5uYW1lLCBpKTsKQEAgLTMzMzksNyArMzMzMSw3IEBACiAJCQkJCSAgczJpb19tc2l4X3JpbmdfaGFuZGxlLCAwLCBzcC0+ZGVzYzIsCiAJCQkJCSAgc3AtPnMyaW9fZW50cmllc1tpXS5hcmcpOwogCQkJCURCR19QUklOVChFUlJfREJHLCAiJXMgQCAweCVsbHhcbiIsIHNwLT5kZXNjMiwgCi0JCQkJCQkJc3AtPm1zaXhfaW5mb1tpXS5hZGRyKTsKKwkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3AtPm1zaXhfaW5mb1tpXS5hZGRyKTsKIAkJCX0KIAkJCWlmIChlcnIpIHsKIAkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNU0ktWC0lZCByZWdpc3RyYXRpb24gXApAQCAtMzUyNyw2ICszNTE5LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJdHhkcC0+Q29udHJvbF8xID0gMDsKKwl0eGRwLT5Db250cm9sXzIgPSAwOwogI2lmZGVmIE5FVElGX0ZfVFNPCiAJbXNzID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKIAlpZiAobXNzKSB7CkBAIC0zNTM0LDE5ICszNTI4LDEzIEBACiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVENQX0xTT19NU1MobXNzKTsKIAl9CiAjZW5kaWYKLQotCWZyZ19jbnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCWZyZ19sZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47Ci0KLQl0eGRwLT5CdWZmZXJfUG9pbnRlciA9IHBjaV9tYXBfc2luZ2xlCi0JICAgIChzcC0+cGRldiwgc2tiLT5kYXRhLCBmcmdfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQl0eGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZykgc2tiOwogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgewogCQl0eGRwLT5Db250cm9sXzIgfD0KIAkJICAgIChUWERfVFhfQ0tPX0lQVjRfRU4gfCBUWERfVFhfQ0tPX1RDUF9FTiB8CiAJCSAgICAgVFhEX1RYX0NLT19VRFBfRU4pOwogCX0KLQorCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfR0FUSEVSX0NPREVfRklSU1Q7CisJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9MSVNUX09XTl9YRU5BOwogCXR4ZHAtPkNvbnRyb2xfMiB8PSBjb25maWctPnR4X2ludHJfdHlwZTsKIAogCWlmIChzcC0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CkBAIC0zNTU0LDEwICszNTQyLDQwIEBACiAJCXR4ZHAtPkNvbnRyb2xfMiB8PSBUWERfVkxBTl9UQUcodmxhbl90YWcpOwogCX0KIAotCXR4ZHAtPkNvbnRyb2xfMSB8PSAoVFhEX0JVRkZFUjBfU0laRShmcmdfbGVuKSB8Ci0JCQkgICAgVFhEX0dBVEhFUl9DT0RFX0ZJUlNUKTsKLQl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0xJU1RfT1dOX1hFTkE7CisJZnJnX2xlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT51Zm9fc2l6ZSkgeworCQlpbnQgdWZvX3NpemU7CiAKKwkJdWZvX3NpemUgPSBza2Jfc2hpbmZvKHNrYiktPnVmb19zaXplOworCQl1Zm9fc2l6ZSAmPSB+NzsKKwkJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9VRk9fRU47CisJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX01TUyh1Zm9fc2l6ZSk7CisJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfQlVGRkVSMF9TSVpFKDgpOworI2lmZGVmIF9fQklHX0VORElBTgorCQlzcC0+dWZvX2luX2JhbmRfdltwdXRfb2ZmXSA9CisJCQkJKHU2NClza2Jfc2hpbmZvKHNrYiktPmlwNl9mcmFnX2lkOworI2Vsc2UKKwkJc3AtPnVmb19pbl9iYW5kX3ZbcHV0X29mZl0gPQorCQkJCSh1NjQpc2tiX3NoaW5mbyhza2IpLT5pcDZfZnJhZ19pZCA8PCAzMjsKKyNlbmRpZgorCQl0eGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZylzcC0+dWZvX2luX2JhbmRfdjsKKwkJdHhkcC0+QnVmZmVyX1BvaW50ZXIgPSBwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwKKwkJCQkJc3AtPnVmb19pbl9iYW5kX3YsCisJCQkJCXNpemVvZih1NjQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJdHhkcCsrOworCQl0eGRwLT5Db250cm9sXzEgPSAwOworCQl0eGRwLT5Db250cm9sXzIgPSAwOworCX0KKworCXR4ZHAtPkJ1ZmZlcl9Qb2ludGVyID0gcGNpX21hcF9zaW5nbGUKKwkgICAgKHNwLT5wZGV2LCBza2ItPmRhdGEsIGZyZ19sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCXR4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSBza2I7CisJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9CVUZGRVIwX1NJWkUoZnJnX2xlbik7CisKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT51Zm9fc2l6ZSkKKwkJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9VRk9fRU47CisKKwlmcmdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAkvKiBGb3IgZnJhZ21lbnRlZCBTS0IuICovCiAJZm9yIChpID0gMDsgaSA8IGZyZ19jbnQ7IGkrKykgewogCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CkBAIC0zNTY5LDkgKzM1ODcsMTQgQEAKIAkJICAgIChzcC0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCiAJCSAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfQlVGRkVSMF9TSVpFKGZyYWctPnNpemUpOworCQlpZiAoc2tiX3NoaW5mbyhza2IpLT51Zm9fc2l6ZSkKKwkJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwogCX0KIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0dBVEhFUl9DT0RFX0xBU1Q7CiAKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT51Zm9fc2l6ZSkKKwkJZnJnX2NudCsrOyAvKiBhcyBUeGQwIHdhcyB1c2VkIGZvciBpbmJhbmQgaGVhZGVyICovCisKIAl0eF9maWZvID0gbWFjX2NvbnRyb2wtPnR4X0ZJRk9fc3RhcnRbcXVldWVdOwogCXZhbDY0ID0gbWFjX2NvbnRyb2wtPmZpZm9zW3F1ZXVlXS5saXN0X2luZm9bcHV0X29mZl0ubGlzdF9waHlfYWRkcjsKIAl3cml0ZXEodmFsNjQsICZ0eF9maWZvLT5UeERMX1BvaW50ZXIpOwpAQCAtMzU4Myw2ICszNjA2LDggQEAKIAlpZiAobXNzKQogCQl2YWw2NCB8PSBUWF9GSUZPX1NQRUNJQUxfRlVOQzsKICNlbmRpZgorCWlmIChza2Jfc2hpbmZvKHNrYiktPnVmb19zaXplKQorCQl2YWw2NCB8PSBUWF9GSUZPX1NQRUNJQUxfRlVOQzsKIAl3cml0ZXEodmFsNjQsICZ0eF9maWZvLT5MaXN0X0NvbnRyb2wpOwogCiAJbW1pb3diKCk7CkBAIC00NzIxLDcgKzQ3NDYsMTAgQEAKIAkJZmFpbCA9IDE7CiAKIAlpZiAocmV0X2RhdGEgIT0gMHgwMTIzNDUpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogZWVwcm9tIHRlc3QgZXJyb3IgYXQgb2Zmc2V0IDB4NEYwLiBEYXRhIHdyaXR0ZW4gJWxseCBEYXRhIHJlYWQgJWxseFxuIiwgZGV2LT5uYW1lLCAodTY0KTB4MTIzNDUsIHJldF9kYXRhKTsgCisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGVlcHJvbSB0ZXN0IGVycm9yIGF0IG9mZnNldCAweDRGMC4gIgorCQkJIkRhdGEgd3JpdHRlbiAlbGx4IERhdGEgcmVhZCAlbGx4XG4iLAorCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKTB4MTIzNDUsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXJldF9kYXRhKTsKIAkJZmFpbCA9IDE7CiAJfQogCkBAIC00NzQwLDcgKzQ3NjgsMTAgQEAKIAkJZmFpbCA9IDE7CiAKIAlpZiAocmV0X2RhdGEgIT0gMHgwMTIzNDUpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogZWVwcm9tIHRlc3QgZXJyb3IgYXQgb2Zmc2V0IDB4N0YwLiBEYXRhIHdyaXR0ZW4gJWxseCBEYXRhIHJlYWQgJWxseFxuIiwgZGV2LT5uYW1lLCAodTY0KTB4MTIzNDUsIHJldF9kYXRhKTsgCisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGVlcHJvbSB0ZXN0IGVycm9yIGF0IG9mZnNldCAweDdGMC4gIgorCQkJIkRhdGEgd3JpdHRlbiAlbGx4IERhdGEgcmVhZCAlbGx4XG4iLAorCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKTB4MTIzNDUsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXJldF9kYXRhKTsKIAkJZmFpbCA9IDE7CiAJfQogCkBAIC01MTkwLDYgKzUyMjEsOCBAQAogCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAogCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAogI2VuZGlmCisJLmdldF91Zm8gPSBldGh0b29sX29wX2dldF91Zm8sCisJLnNldF91Zm8gPSBldGh0b29sX29wX3NldF91Zm8sCiAJLnNlbGZfdGVzdF9jb3VudCA9IHMyaW9fZXRodG9vbF9zZWxmX3Rlc3RfY291bnQsCiAJLnNlbGZfdGVzdCA9IHMyaW9fZXRodG9vbF90ZXN0LAogCS5nZXRfc3RyaW5ncyA9IHMyaW9fZXRodG9vbF9nZXRfc3RyaW5ncywKQEAgLTU5NDEsNyArNTk3NCw4IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQljb25maWctPm1heF90eGRzID0gTUFYX1NLQl9GUkFHUyArIDE7CisJLyogKyAyIGJlY2F1c2Ugb25lIFR4ZCBmb3Igc2tiLT5kYXRhIGFuZCBvbmUgVHhkIGZvciBVRk8gKi8KKwljb25maWctPm1heF90eGRzID0gTUFYX1NLQl9GUkFHUyArIDI7CiAKIAkvKiBSeCBzaWRlIHBhcmFtZXRlcnMuICovCiAJaWYgKHJ4X3Jpbmdfc3pbMF0gPT0gMCkKQEAgLTYwMzUsNiArNjA2OSwxMCBAQAogI2lmZGVmIE5FVElGX0ZfVFNPCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKICNlbmRpZgorCWlmIChzcC0+ZGV2aWNlX3R5cGUgJiBYRlJBTUVfSUlfREVWSUNFKSB7CisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87CisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCX0KIAogCWRldi0+dHhfdGltZW91dCA9ICZzMmlvX3R4X3dhdGNoZG9nOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBXQVRDSF9ET0dfVElNRU9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uaCBiL2RyaXZlcnMvbmV0L3MyaW8uaAppbmRleCA0MTlhYWQ3Li44NTJhNmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby5oCkBAIC0zOTMsNyArMzkzLDkgQEAKICNkZWZpbmUgVFhEX0dBVEhFUl9DT0RFX0xBU1QgICAgQklUKDIzKQogI2RlZmluZSBUWERfVENQX0xTT19FTiAgICAgICAgICBCSVQoMzApCiAjZGVmaW5lIFRYRF9VRFBfQ09GX0VOICAgICAgICAgIEJJVCgzMSkKKyNkZWZpbmUgVFhEX1VGT19FTgkJQklUKDMxKSB8IEJJVCgzMCkKICNkZWZpbmUgVFhEX1RDUF9MU09fTVNTKHZhbCkgICAgdkJJVCh2YWwsMzQsMTQpCisjZGVmaW5lIFRYRF9VRk9fTVNTKHZhbCkJdkJJVCh2YWwsMzQsMTQpCiAjZGVmaW5lIFRYRF9CVUZGRVIwX1NJWkUodmFsKSAgIHZCSVQodmFsLDQ4LDE2KQogCiAJdTY0IENvbnRyb2xfMjsKQEAgLTc4OSw2ICs3OTEsNyBAQAogCiAJc3BpbmxvY2tfdAlyeF9sb2NrOwogCWF0b21pY190CWlzcl9jbnQ7CisJdTY0ICp1Zm9faW5fYmFuZF92OwogfTsKIAogI2RlZmluZSBSRVNFVF9FUlJPUiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCAxZDRkODg2Li4zZDk1ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHNpczkwMC5jOiBBIFNpUyA5MDAvNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCBkcml2ZXIgZm9yIExpbnV4LgogICAgQ29weXJpZ2h0IDE5OTkgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3Jwb3JhdGlvbiAKLSAgIFJldmlzaW9uOgkxLjA4LjA4IEphbi4gMjIgMjAwNQorICAgUmV2aXNpb246CTEuMDguMDkgU2VwLiAxOSAyMDA1CiAgICAKICAgIE1vZGlmaWVkIGZyb20gdGhlIGRyaXZlciB3aGljaCBpcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlci4KICAgIApAQCAtMTcsNiArMTcsNyBAQAogICAgU2lTIDcwMTQgU2luZ2xlIENoaXAgMTAwQkFTRS1UWC8xMEJBU0UtVCBQaHlzaWNhbCBMYXllciBTb2x1dGlvbiwKICAgIHByZWxpbWluYXJ5IFJldi4gMS4wIEphbi4gMTgsIDE5OTgKIAorICAgUmV2IDEuMDguMDkgU2VwLiAxOSAyMDA1IERhbmllbGUgVmVuemFubyBhZGQgV2FrZSBvbiBMQU4gc3VwcG9ydAogICAgUmV2IDEuMDguMDggSmFuLiAyMiAyMDA1IERhbmllbGUgVmVuemFubyB1c2UgbmV0aWZfbXNnIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMKICAgIFJldiAxLjA4LjA3IE5vdi4gIDIgMjAwMyBEYW5pZWxlIFZlbnphbm8gPHdlYnZlbnphQGxpYmVyby5pdD4gYWRkIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQKICAgIFJldiAxLjA4LjA2IFNlcC4gMjQgMjAwMiBNdWZhc2EgWWFuZyBidWcgZml4IGZvciBUeCB0aW1lb3V0ICYgYWRkIFNpUzk2MyBzdXBwb3J0CkBAIC03Niw3ICs3Nyw3IEBACiAjaW5jbHVkZSAic2lzOTAwLmgiCiAKICNkZWZpbmUgU0lTOTAwX01PRFVMRV9OQU1FICJzaXM5MDAiCi0jZGVmaW5lIFNJUzkwMF9EUlZfVkVSU0lPTiAidjEuMDguMDggSmFuLiAyMiAyMDA1IgorI2RlZmluZSBTSVM5MDBfRFJWX1ZFUlNJT04gInYxLjA4LjA5IFNlcC4gMTkgMjAwNSIKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogS0VSTl9JTkZPICJzaXM5MDAuYzogIiBTSVM5MDBfRFJWX1ZFUlNJT04gIlxuIjsKQEAgLTUzOCw2ICs1MzksMTEgQEAKIAkJcHJpbnRrKCIlMi4yeDoiLCAodTgpbmV0X2Rldi0+ZGV2X2FkZHJbaV0pOwogCXByaW50aygiJTIuMnguXG4iLCBuZXRfZGV2LT5kZXZfYWRkcltpXSk7CiAKKwkvKiBEZXRlY3QgV2FrZSBvbiBMYW4gc3VwcG9ydCAqLworCXJldCA9IGlubChDRkdQTUMgJiBQTUVTUCk7CisJaWYgKG5ldGlmX21zZ19wcm9iZShzaXNfcHJpdikgJiYgKHJldCAmIFBNRV9EM0MpID09IDApCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYWtlIG9uIExBTiBvbmx5IGF2YWlsYWJsZSBmcm9tIHN1c3BlbmQgdG8gUkFNLiIsIG5ldF9kZXYtPm5hbWUpOworCiAJcmV0dXJuIDA7CiAKICBlcnJfdW5tYXBfcng6CkBAIC0yMDE1LDYgKzIwMjEsNjcgQEAKIAlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmc2lzX3ByaXYtPm1paV9pbmZvKTsKIH0KIAorLyoqCisgKglzaXM5MDBfc2V0X3dvbCAtIFNldCB1cCBXYWtlIG9uIExhbiByZWdpc3RlcnMKKyAqCUBuZXRfZGV2OiB0aGUgbmV0IGRldmljZSB0byBwcm9iZQorICoJQHdvbDogY29udGFpbmVyIGZvciBpbmZvIHBhc3NlZCB0byB0aGUgZHJpdmVyCisgKgorICoJUHJvY2VzcyBldGh0b29sIGNvbW1hbmQgIndvbCIgdG8gc2V0dXAgd2FrZSBvbiBsYW4gZmVhdHVyZXMuCisgKglTaVM5MDAgc3VwcG9ydHMgc2VuZGluZyBXb0wgZXZlbnRzIGlmIGEgY29ycmVjdCBwYWNrZXQgaXMgcmVjZWl2ZWQsCisgKglidXQgdGhlcmUgaXMgbm8gc2ltcGxlIHdheSB0byBmaWx0ZXIgdGhlbSB0byBvbmx5IGEgc3Vic2V0IChicm9hZGNhc3QsCisgKgltdWx0aWNhc3QsIHVuaWNhc3Qgb3IgYXJwKS4KKyAqLworIAorc3RhdGljIGludCBzaXM5MDBfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBzaXM5MDBfcHJpdmF0ZSAqc2lzX3ByaXYgPSBuZXRfZGV2LT5wcml2OworCWxvbmcgcG1jdHJsX2FkZHIgPSBuZXRfZGV2LT5iYXNlX2FkZHIgKyBwbWN0cmw7CisJdTMyIGNmZ3BtY3NyID0gMCwgcG1jdHJsX2JpdHMgPSAwOworCisJaWYgKHdvbC0+d29sb3B0cyA9PSAwKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaXNfcHJpdi0+cGNpX2RldiwgQ0ZHUE1DU1IsICZjZmdwbWNzcik7CisJCWNmZ3BtY3NyIHw9IH5QTUVfRU47CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc2lzX3ByaXYtPnBjaV9kZXYsIENGR1BNQ1NSLCBjZmdwbWNzcik7CisJCW91dGwocG1jdHJsX2JpdHMsIHBtY3RybF9hZGRyKTsKKwkJaWYgKG5ldGlmX21zZ193b2woc2lzX3ByaXYpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXYWtlIG9uIExBTiBkaXNhYmxlZFxuIiwgbmV0X2Rldi0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9NQUdJQ1NFQ1VSRSB8IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUCisJCQkJfCBXQUtFX0JDQVNUIHwgV0FLRV9BUlApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQorCQlwbWN0cmxfYml0cyB8PSBNQUdJQ1BLVDsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9QSFkpCisJCXBtY3RybF9iaXRzIHw9IExJTktPTjsKKwkKKwlvdXRsKHBtY3RybF9iaXRzLCBwbWN0cmxfYWRkcik7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lzX3ByaXYtPnBjaV9kZXYsIENGR1BNQ1NSLCAmY2ZncG1jc3IpOworCWNmZ3BtY3NyIHw9IFBNRV9FTjsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpc19wcml2LT5wY2lfZGV2LCBDRkdQTUNTUiwgY2ZncG1jc3IpOworCWlmIChuZXRpZl9tc2dfd29sKHNpc19wcml2KSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXYWtlIG9uIExBTiBlbmFibGVkXG4iLCBuZXRfZGV2LT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXM5MDBfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCWxvbmcgcG1jdHJsX2FkZHIgPSBuZXRfZGV2LT5iYXNlX2FkZHIgKyBwbWN0cmw7CisJdTMyIHBtY3RybF9iaXRzOworCisJcG1jdHJsX2JpdHMgPSBpbmwocG1jdHJsX2FkZHIpOworCWlmIChwbWN0cmxfYml0cyAmIE1BR0lDUEtUKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKKwlpZiAocG1jdHJsX2JpdHMgJiBMSU5LT04pCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1BIWTsKKworCXdvbC0+c3VwcG9ydGVkID0gKFdBS0VfUEhZIHwgV0FLRV9NQUdJQyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgc2lzOTAwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyAJPSBzaXM5MDBfZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbAk9IHNpczkwMF9nZXRfbXNnbGV2ZWwsCkBAIC0yMDIzLDYgKzIwOTAsOCBAQAogCS5nZXRfc2V0dGluZ3MJPSBzaXM5MDBfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJPSBzaXM5MDBfc2V0X3NldHRpbmdzLAogCS5ud2F5X3Jlc2V0CT0gc2lzOTAwX253YXlfcmVzZXQsCisJLmdldF93b2wJPSBzaXM5MDBfZ2V0X3dvbCwKKwkuc2V0X3dvbAk9IHNpczkwMF9zZXRfd29sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5oIGIvZHJpdmVycy9uZXQvc2lzOTAwLmgKaW5kZXggZGUzYzA2Ny4uNDIzM2VhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmgKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmgKQEAgLTMzLDYgKzMzLDcgQEAKICAgICAgICAgcnhjZmc9MHgzNCwgICAgICAgICAgICAgLy9SZWNlaXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKICAgICAgICAgZmxjdHJsPTB4MzgsICAgICAgICAgICAgLy9GbG93IENvbnRyb2wgUmVnaXN0ZXIKICAgICAgICAgcnhsZW49MHgzYywgICAgICAgICAgICAgLy9SZWNlaXZlIFBhY2tldCBMZW5ndGggUmVnaXN0ZXIKKyAgICAgICAgY2ZncG1jc3I9MHg0NCwgICAgICAgICAgLy9Db25maWd1cmF0aW9uIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKICAgICAgICAgcmZjcj0weDQ4LCAgICAgICAgICAgICAgLy9SZWNlaXZlIEZpbHRlciBDb250cm9sIFJlZ2lzdGVyCiAgICAgICAgIHJmZHI9MHg0QywgICAgICAgICAgICAgIC8vUmVjZWl2ZSBGaWx0ZXIgRGF0YSBSZWdpc3RlcgogICAgICAgICBwbWN0cmw9MHhCMCwgICAgICAgICAgICAvL1Bvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlcgpAQCAtMTQwLDYgKzE0MSw1MCBAQAogCUVFUkVRID0gMHgwMDAwMDQwMCwgRUVET05FID0gMHgwMDAwMDIwMCwgRUVHTlQgPSAweDAwMDAwMTAwCiB9OwogCisvKiBQQ0kgUmVnaXN0ZXJzICovCitlbnVtIHNpczkwMF9wY2lfcmVnaXN0ZXJzIHsKKwlDRkdQTUMgCSA9IDB4NDAsCisJQ0ZHUE1DU1IgPSAweDQ0Cit9OworCisvKiBQb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcyBiaXRzICovCitlbnVtIHNpczkwMF9jZmdwbWNfcmVnaXN0ZXJfYml0cyB7CisJUE1WRVIJPSAweDAwMDcwMDAwLCAKKwlEU0kJPSAweDAwMTAwMDAwLAorCVBNRVNQCT0gMHhmODAwMDAwMAorfTsKKworZW51bSBzaXM5MDBfcG1lc3BfYml0cyB7CisJUE1FX0QwID0gMHgxLAorCVBNRV9EMSA9IDB4MiwKKwlQTUVfRDIgPSAweDQsCisJUE1FX0QzSCA9IDB4OCwKKwlQTUVfRDNDID0gMHgxMAorfTsKKworLyogUG93ZXIgbWFuYWdlbWVudCBjb250cm9sL3N0YXR1cyBiaXRzICovCitlbnVtIHNpczkwMF9jZmdwbWNzcl9yZWdpc3Rlcl9iaXRzIHsKKwlQTUVTVFMgPSAweDAwMDA0MDAwLAorCVBNRV9FTiA9IDB4MDAwMDAxMDAsIC8vIFBvd2VyIG1hbmFnZW1lbnQgZW5hYmxlCisJUFdSX1NUQSA9IDB4MDAwMDAwMDMgLy8gQ3VycmVudCBwb3dlciBzdGF0ZQorfTsKKworLyogV2FrZS1vbi1MQU4gc3VwcG9ydC4gKi8KK2VudW0gc2lzOTAwX3Bvd2VyX21hbmFnZW1lbnRfY29udHJvbF9yZWdpc3Rlcl9iaXRzIHsKKwlMSU5LTE9TUyAgPSAweDAwMDAwMDAxLAorCUxJTktPTiAgICA9IDB4MDAwMDAwMDIsCisJTUFHSUNQS1QgID0gMHgwMDAwMDQwMCwKKwlBTEdPUklUSE0gPSAweDAwMDAwODAwLAorCUZSTTFFTiAgICA9IDB4MDAxMDAwMDAsCisJRlJNMkVOICAgID0gMHgwMDIwMDAwMCwKKwlGUk0zRU4gICAgPSAweDAwNDAwMDAwLAorCUZSTTFBQ1MgICA9IDB4MDEwMDAwMDAsCisJRlJNMkFDUyAgID0gMHgwMjAwMDAwMCwKKwlGUk0zQUNTICAgPSAweDA0MDAwMDAwLAorCVdBS0VBTEwgICA9IDB4NDAwMDAwMDAsCisJR0FURUNMSyAgID0gMHg4MDAwMDAwMAorfTsKKwogLyogTWFuYWdlbWVudCBEYXRhIEkvTyAobWRpbykgZnJhbWUgKi8KICNkZWZpbmUgTUlJcmVhZCAgICAgICAgIDB4NjAwMAogI2RlZmluZSBNSUl3cml0ZSAgICAgICAgMHg1MDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9NYWtlZmlsZQppbmRleCA3NjUzZDZlLi5hZmQ5MDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vTWFrZWZpbGUKQEAgLTI2LDggKzI2LDcgQEAKIAkJc2tybG10Lm8JXAogCQlza3RpbWVyLm8JXAogCQlza3ZwZC5vCQlcCi0JCXNreG1hYzIubwlcCi0JCXNrcHJvYy5vCisJCXNreG1hYzIubwogCiAjIERCR0RFRiA9ICBcCiAjIC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2RydjJuZC5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2Mm5kLmgKaW5kZXggMmRjNTcyOC4uNzc4ZDllNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2Mm5kLmgKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2Mm5kLmgKQEAgLTYwLDcgKzYwLDYgQEAKIGV4dGVybiBpbnQJCVNrUGNpUmVhZENmZ0RXb3JkKFNLX0FDKiwgaW50LCBTS19VMzIqKTsKIGV4dGVybiBpbnQJCVNrUGNpUmVhZENmZ1dvcmQoU0tfQUMqLCBpbnQsIFNLX1UxNiopOwogZXh0ZXJuIGludAkJU2tQY2lSZWFkQ2ZnQnl0ZShTS19BQyosIGludCwgU0tfVTgqKTsKLWV4dGVybiBpbnQJCVNrUGNpV3JpdGVDZmdEV29yZChTS19BQyosIGludCwgU0tfVTMyKTsKIGV4dGVybiBpbnQJCVNrUGNpV3JpdGVDZmdXb3JkKFNLX0FDKiwgaW50LCBTS19VMTYpOwogZXh0ZXJuIGludAkJU2tQY2lXcml0ZUNmZ0J5dGUoU0tfQUMqLCBpbnQsIFNLX1U4KTsKIGV4dGVybiBpbnQJCVNrRHJ2RXZlbnQoU0tfQUMqLCBTS19JT0MgSW9DLCBTS19VMzIsIFNLX0VWUEFSQSk7CkBAIC0yNjgsOCArMjY3LDYgQEAKIHN0cnVjdCBzX0Rldk5ldCB7CiAJaW50ICAgICAgICAgICAgIFBvcnROcjsKIAlpbnQgICAgICAgICAgICAgTmV0TnI7Ci0JaW50ICAgICAgICAgICAgIE10dTsKLQlpbnQgICAgICAgICAgICAgVXA7CiAJU0tfQUMgICAqcEFDOwogfTsgIAogCkBAIC0yOTgsNiArMjk1LDcgQEAKIAlSWEQJCSpwUnhkUmluZ1RhaWw7CS8qIFRhaWwgb2YgUnggcmluZ3MgKi8KIAlSWEQJCSpwUnhkUmluZ1ByZXY7CS8qIGRlc2NyaXB0b3IgZ2l2ZW4gdG8gQk1VIHByZXZpb3VzbHkgKi8KIAlpbnQJCVJ4ZFJpbmdGcmVlOwkvKiAjIG9mIGZyZWUgZW50cnlzICovCisJaW50CQlSeENzdW07CQkvKiB1c2UgcmVjZWl2ZSBjaGVja3N1bSBoYXJkd2FyZSAqLwogCXNwaW5sb2NrX3QJUnhEZXNSaW5nTG9jazsJLyogc2VyaWFsaXplIGRlc2NyaXB0b3IgYWNjZXNzZXMgKi8KIAlpbnQJCVJ4RmlsbExpbWl0OwkvKiBsaW1pdCBmb3IgYnVmZmVycyBpbiByaW5nICovCiAJU0tfSU9DCQlId0FkZHI7CQkvKiBibXUgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KQEAgLTM5MCwxMiArMzg4LDEwIEBACiAJCiAJU0tfSU9DCQlJb0Jhc2U7CQkvKiByZWdpc3RlciBzZXQgb2YgYWRhcHRlciAqLwogCWludAkJQm9hcmRMZXZlbDsJLyogbGV2ZWwgb2YgYWN0aXZlIGh3IGluaXQgKDAtMikgKi8KLQljaGFyCQlEZXZpY2VTdHJbODBdOwkvKiBhZGFwdGVyIHN0cmluZyBmcm9tIHZwZCAqLworCiAJU0tfVTMyCQlBbGxvY0ZsYWc7CS8qIGZsYWcgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgcGNpX2RldgkqUGNpRGV2OwkvKiBmb3IgYWNjZXNzIHRvIHBjaSBjb25maWcgc3BhY2UgKi8KLQlTS19VMzIJCVBjaURldklkOwkvKiBwY2kgZGV2aWNlIGlkICovCiAJc3RydWN0IFNLX05FVF9ERVZJQ0UJKmRldlsyXTsJLyogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0ICovCi0JY2hhcgkJTmFtZVszMF07CS8qIGRyaXZlciBuYW1lICovCiAKIAlpbnQJCVJ4QnVmU2l6ZTsJLyogbGVuZ3RoIG9mIHJlY2VpdmUgYnVmZmVycyAqLwogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJLyogbGludXggJ25ldHN0YXQgLWknIHN0YXRpc3RpY3MgKi8KQEAgLTQzMCw3ICs0MjYsNiBAQAogCURJTV9JTkZPICAgICAgICBEeW5JcnFNb2RJbmZvOyAgLyogYWxsIGRhdGEgcmVsYXRlZCB0byBESU0gKi8KIAogCS8qIE9ubHkgZm9yIHRlc3RzICovCi0JaW50CQlQb3J0VXA7CiAJaW50CQlQb3J0RG93bjsKIAlpbnQJCUNoaXBzZXRUeXBlOwkvKiAgQ2hpcHNldCBmYW1pbHkgdHlwZSAKIAkJCQkJICogIDAgPT0gR2VuZXNpcyBmYW1pbHkgc3VwcG9ydApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdnBkLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2t2cGQuaAppbmRleCBiZGMxYTVlLi5kYWE5YThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2t2cGQuaAorKysgYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2t2cGQuaApAQCAtMTMwLDE0ICsxMzAsMTIgQEAKICNpZm5kZWYgVlBEX0RPX0lPCiAjZGVmaW5lIFZQRF9PVVQ4KHBBQyxJb0MsQWRkcixWYWwpCSh2b2lkKVNrUGNpV3JpdGVDZmdCeXRlKHBBQyxBZGRyLFZhbCkKICNkZWZpbmUgVlBEX09VVDE2KHBBQyxJb0MsQWRkcixWYWwpCSh2b2lkKVNrUGNpV3JpdGVDZmdXb3JkKHBBQyxBZGRyLFZhbCkKLSNkZWZpbmUgVlBEX09VVDMyKHBBQyxJb0MsQWRkcixWYWwpCSh2b2lkKVNrUGNpV3JpdGVDZmdEV29yZChwQUMsQWRkcixWYWwpCiAjZGVmaW5lIFZQRF9JTjgocEFDLElvQyxBZGRyLHBWYWwpCSh2b2lkKVNrUGNpUmVhZENmZ0J5dGUocEFDLEFkZHIscFZhbCkKICNkZWZpbmUgVlBEX0lOMTYocEFDLElvQyxBZGRyLHBWYWwpCSh2b2lkKVNrUGNpUmVhZENmZ1dvcmQocEFDLEFkZHIscFZhbCkKICNkZWZpbmUgVlBEX0lOMzIocEFDLElvQyxBZGRyLHBWYWwpCSh2b2lkKVNrUGNpUmVhZENmZ0RXb3JkKHBBQyxBZGRyLHBWYWwpCiAjZWxzZQkvKiBWUERfRE9fSU8gKi8KICNkZWZpbmUgVlBEX09VVDgocEFDLElvQyxBZGRyLFZhbCkJU0tfT1VUOChJb0MsUENJX0MoQWRkciksVmFsKQogI2RlZmluZSBWUERfT1VUMTYocEFDLElvQyxBZGRyLFZhbCkJU0tfT1VUMTYoSW9DLFBDSV9DKEFkZHIpLFZhbCkKLSNkZWZpbmUgVlBEX09VVDMyKHBBQyxJb0MsQWRkcixWYWwpCVNLX09VVDMyKElvQyxQQ0lfQyhBZGRyKSxWYWwpCiAjZGVmaW5lIFZQRF9JTjgocEFDLElvQyxBZGRyLHBWYWwpCVNLX0lOOChJb0MsUENJX0MoQWRkcikscFZhbCkKICNkZWZpbmUgVlBEX0lOMTYocEFDLElvQyxBZGRyLHBWYWwpCVNLX0lOMTYoSW9DLFBDSV9DKEFkZHIpLHBWYWwpCiAjZGVmaW5lIFZQRF9JTjMyKHBBQyxJb0MsQWRkcixwVmFsKQlTS19JTjMyKElvQyxQQ0lfQyhBZGRyKSxwVmFsKQpAQCAtMTU1LDEyICsxNTMsNiBAQAogCQllbHNlCQkJCQkJXAogCQkJU0tfT1VUMTYocEFDLFBDSV9DKEFkZHIpLFZhbCk7CQlcCiAJCX0KLSNkZWZpbmUgVlBEX09VVDMyKHBBQyxJb2MsQWRkcixWYWwpIHsJCQlcCi0JCWlmICgocEFDKS0+RGdULkRnVXNlQ2ZnQ3ljbGUpCQkJXAotCQkJU2tQY2lXcml0ZUNmZ0RXb3JkKHBBQyxBZGRyLFZhbCk7CVwKLQkJZWxzZQkJCQkJCVwKLQkJCVNLX09VVDMyKHBBQyxQQ0lfQyhBZGRyKSxWYWwpOyAJCVwKLQkJfQogI2RlZmluZSBWUERfSU44KHBBQyxJb2MsQWRkcixwVmFsKSB7CQkJXAogCQlpZiAoKHBBQyktPkRnVC5EZ1VzZUNmZ0N5Y2xlKSAJCQlcCiAJCQlTa1BjaVJlYWRDZmdCeXRlKHBBQyxBZGRyLHBWYWwpOwlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2V0aHRvb2wuYwppbmRleCBiNzE3NjlhLi40MjY1ZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tldGh0b29sLmMKQEAgLTUzOSw2ICs1MzksNDggQEAKICAgICAgICAgcmV0dXJuIHJldCA/IC1FSU8gOiAwOwogfQogCisvKiBPbmx5IFl1a29uIHN1cHBvcnRzIGNoZWNrc3VtIG9mZmxvYWQuICovCitzdGF0aWMgaW50IHNldFNjYXR0ZXJHYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7CisJU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKKworCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3NnKGRldiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0VHhDc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCURFVl9ORVQgKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOworCVNLX0FDICpwQUMgPSBwTmV0LT5wQUM7CisKKwlpZiAocEFDLT5HSW5pLkdJQ2hpcElkID09IENISVBfSURfR0VORVNJUykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKK30KKworc3RhdGljIHUzMiBnZXRSeENzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlERVZfTkVUICpwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlTS19BQyAqcEFDID0gcE5ldC0+cEFDOworCisJcmV0dXJuIHBBQy0+UnhQb3J0W3BOZXQtPlBvcnROcl0uUnhDc3VtOworfQorCitzdGF0aWMgaW50IHNldFJ4Q3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlERVZfTkVUICpwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlTS19BQyAqcEFDID0gcE5ldC0+cEFDOworCisJaWYgKHBBQy0+R0luaS5HSUNoaXBJZCA9PSBDSElQX0lEX0dFTkVTSVMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXBBQy0+UnhQb3J0W3BOZXQtPlBvcnROcl0uUnhDc3VtID0gZGF0YSAhPSAwOworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgZXRodG9vbF9vcHMgU2tHZUV0aHRvb2xPcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSBnZXRTZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IHNldFNldHRpbmdzLApAQCAtNTUxLDQgKzU5MywxMCBAQAogCS5zZXRfcGF1c2VwYXJhbQkJPSBzZXRQYXVzZVBhcmFtcywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3Blcm1fYWRkcgkJPSBldGh0b29sX29wX2dldF9wZXJtX2FkZHIsCisJLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZwkJCT0gc2V0U2NhdHRlckdhdGhlciwKKwkuZ2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0JCT0gc2V0VHhDc3VtLAorCS5nZXRfcnhfY3N1bQkJPSBnZXRSeENzdW0sCisJLnNldF9yeF9jc3VtCQk9IHNldFJ4Q3N1bSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCmluZGV4IGFlNzM0MzkuLjlhNzZhYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogCiAjaW5jbHVkZQkiaC9za3ZlcnNpb24uaCIKIAorI2luY2x1ZGUJPGxpbnV4L2luLmg+CiAjaW5jbHVkZQk8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZQk8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlCTxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSAJPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlCTxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUJPGxpbnV4L2lwLmg+CiAKQEAgLTIwNiw3ICsyMDYsNiBAQAogc3RhdGljIHN0cnVjdAluZXRfZGV2aWNlX3N0YXRzICpTa0dlU3RhdHMoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldik7CiBzdGF0aWMgaW50CVNrR2VJb2N0bChzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyB2b2lkCUdldENvbmZpZ3VyYXRpb24oU0tfQUMqKTsKLXN0YXRpYyB2b2lkCVByb2R1Y3RTdHIoU0tfQUMqKTsKIHN0YXRpYyBpbnQJWG1pdEZyYW1lKFNLX0FDKiwgVFhfUE9SVCosIHN0cnVjdCBza19idWZmKik7CiBzdGF0aWMgdm9pZAlGcmVlVHhEZXNjcmlwdG9ycyhTS19BQypwQUMsIFRYX1BPUlQqKTsKIHN0YXRpYyB2b2lkCUZpbGxSeFJpbmcoU0tfQUMqLCBSWF9QT1JUKik7CkBAIC0yMzUsMjggKzIzNCw2IEBACiAgKiBFeHRlcm4gRnVuY3Rpb24gUHJvdG90eXBlcwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgY29uc3QgY2hhciAJU0tSb290TmFtZVtdID0gIm5ldC9zazk4bGluIjsKLXN0YXRpYyBzdHJ1Y3QJCXByb2NfZGlyX2VudHJ5ICpwU2tSb290RGlyOwotZXh0ZXJuIHN0cnVjdAlmaWxlX29wZXJhdGlvbnMgc2tfcHJvY19mb3BzOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgU2tHZVByb2NDcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlOwotCi0JaWYgKHBTa1Jvb3REaXIgJiYgCi0JICAgIChwZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KGRldi0+bmFtZSwgU19JUlVHTywgcFNrUm9vdERpcikpKSB7Ci0JCXBlLT5wcm9jX2ZvcHMgPSAmc2tfcHJvY19mb3BzOwotCQlwZS0+ZGF0YSA9IGRldjsKLQkJcGUtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JfQotfQotIAotc3RhdGljIGlubGluZSB2b2lkIFNrR2VQcm9jUmVtb3ZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaWYgKHBTa1Jvb3REaXIpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGRldi0+bmFtZSwgcFNrUm9vdERpcik7Ci19Ci0KIGV4dGVybiB2b2lkIFNrRGltRW5hYmxlTW9kZXJhdGlvbklmTmVlZGVkKFNLX0FDICpwQUMpOwkKIGV4dGVybiB2b2lkIFNrRGltRGlzcGxheU1vZGVyYXRpb25TZXR0aW5ncyhTS19BQyAqcEFDKTsKIGV4dGVybiB2b2lkIFNrRGltU3RhcnRNb2RlcmF0aW9uVGltZXIoU0tfQUMgKnBBQyk7CkBAIC0yNzksNiArMjU2LDI3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqCVNrUGNpV3JpdGVDZmdEV29yZCAtIHdyaXRlIGEgMzIgYml0IHZhbHVlIHRvIHBjaSBjb25maWcgc3BhY2UKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqCVRoaXMgcm91dGluZSB3cml0ZXMgYSAzMiBiaXQgdmFsdWUgdG8gdGhlIHBjaSBjb25maWd1cmF0aW9uCisgKglzcGFjZS4KKyAqCisgKiBSZXR1cm5zOgorICoJMCAtIGluZGljYXRlIGV2ZXJ5dGhpbmcgd29ya2VkIG9rLgorICoJIT0gMCAtIGVycm9yIGluZGljYXRpb24KKyAqLworc3RhdGljIGlubGluZSBpbnQgU2tQY2lXcml0ZUNmZ0RXb3JkKAorU0tfQUMgKnBBQywJLyogQWRhcHRlciBDb250cm9sIHN0cnVjdHVyZSBwb2ludGVyICovCitpbnQgUGNpQWRkciwJCS8qIFBDSSByZWdpc3RlciBhZGRyZXNzICovCitTS19VMzIgVmFsKQkJLyogcG9pbnRlciB0byBzdG9yZSB0aGUgcmVhZCB2YWx1ZSAqLworeworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocEFDLT5QY2lEZXYsIFBjaUFkZHIsIFZhbCk7CisJcmV0dXJuKDApOworfSAvKiBTa1BjaVdyaXRlQ2ZnRFdvcmQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogCVNrR2VJbml0UENJIC0gSW5pdCB0aGUgUENJIHJlc291cmNlcwogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtMzAwLDcgKzI5OCw3IEBACiAJZGV2LT5tZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgcEFDLT5OYW1lKSAhPSAwKSB7CisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgInNrOThsaW4iKSAhPSAwKSB7CiAJCXJldHZhbCA9IDI7CiAJCWdvdG8gb3V0X2Rpc2FibGU7CiAJfQpAQCAtNTc4LDEwICs1NzYsMTAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwogCiAJaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyKSB7Ci0JCSBSZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgU2tHZUlzciwgU0FfU0hJUlEsIHBBQy0+TmFtZSwgZGV2KTsKKwkJIFJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBTa0dlSXNyLCBTQV9TSElSUSwgInNrOThsaW4iLCBkZXYpOwogCX0gZWxzZSBpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDEpIHsKIAkJUmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIFNrR2VJc3JPbmVQb3J0LCBTQV9TSElSUSwKLQkJCXBBQy0+TmFtZSwgZGV2KTsKKwkJCSJzazk4bGluIiwgZGV2KTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzazk4bGluOiBJbGxlZ2FsIG51bWJlciBvZiBwb3J0czogJWRcbiIsCiAJCSAgICAgICBwQUMtPkdJbmkuR0lNYWNzRm91bmQpOwpAQCAtMTI2NSw3ICsxMjYzLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwogCiAJcEFDLT5NYXhQb3J0cysrOwotCXBOZXQtPlVwID0gMTsKIAogCiAJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VOVFJZLApAQCAtMTM5NSw3ICsxMzkyLDYgQEAKIAkJCXNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSk7CiAKIAlwQUMtPk1heFBvcnRzLS07Ci0JcE5ldC0+VXAgPSAwOwogCiAJcmV0dXJuICgwKTsKIH0gLyogU2tHZUNsb3NlICovCkBAIC0yMTc1LDcgKzIxNzEsNiBAQAogCQlwTXNnLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogI2VuZGlmCiAKLQogCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCTEsKCJWIikpOwogCQlGb3JSbG10ID0gU0tfUkxNVF9SWF9QUk9UT0NPTDsKICNpZiAwCkBAIC0yNTUwLDcgKzI1NDUsNyBAQAogc3RhdGljIGludCBTa0dlQ2hhbmdlTXR1KHN0cnVjdCBTS19ORVRfREVWSUNFICpkZXYsIGludCBOZXdNdHUpCiB7CiBERVZfTkVUCQkqcE5ldDsKLURFVl9ORVQJCSpwT3RoZXJOZXQ7CitzdHJ1Y3QgbmV0X2RldmljZSAqcE90aGVyRGV2OwogU0tfQUMJCSpwQUM7CiB1bnNpZ25lZCBsb25nCUZsYWdzOwogaW50CQlpOwpAQCAtMjU4MCwxMSArMjU3NSwxMSBAQAogCX0KICNlbmRpZgogCi0JcE5ldC0+TXR1ID0gTmV3TXR1OwotCXBPdGhlck5ldCA9IG5ldGRldl9wcml2KHBBQy0+ZGV2WzEgLSBwTmV0LT5OZXROcl0pOwotCWlmICgocE90aGVyTmV0LT5NdHU+MTUwMCkgJiYgKE5ld010dTw9MTUwMCkgJiYgKHBPdGhlck5ldC0+VXA9PTEpKSB7Ci0JCXJldHVybigwKTsKLQl9CisJcE90aGVyRGV2ID0gcEFDLT5kZXZbMSAtIHBOZXQtPk5ldE5yXTsKKworCWlmICggbmV0aWZfcnVubmluZyhwT3RoZXJEZXYpICYmIChwT3RoZXJEZXYtPm10dSA+IDE1MDApCisJICAgICAmJiAoTmV3TXR1IDw9IDE1MDApKQorCQlyZXR1cm4gMDsKIAogCXBBQy0+UnhCdWZTaXplID0gTmV3TXR1ICsgMzI7CiAJZGV2LT5tdHUgPSBOZXdNdHU7CkBAIC0yNzQ2LDcgKzI3NDEsOCBAQAogCQlFdlBhcmEuUGFyYTMyWzFdID0gLTE7CiAJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVEFSVCwgRXZQYXJhKTsKIAkJCQotCQlpZiAocE90aGVyTmV0LT5VcCkgeworCQlpZiAobmV0aWZfcnVubmluZyhwT3RoZXJEZXYpKSB7CisJCQlERVZfTkVUICpwT3RoZXJOZXQgPSBuZXRkZXZfcHJpdihwT3RoZXJEZXYpOwogCQkJRXZQYXJhLlBhcmEzMlswXSA9IHBPdGhlck5ldC0+UG9ydE5yOwogCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9STE1ULCBTS19STE1UX1NUQVJULCBFdlBhcmEpOwogCQl9CkBAIC0yODIwLDcgKzI4MTYsNyBAQAogCXBBQy0+c3RhdHMucnhfYnl0ZXMgPSAoU0tfVTMyKSBwUG5taVN0cnVjdC0+UnhPY3RldHNEZWxpdmVyZWRDdHM7CiAJcEFDLT5zdGF0cy50eF9ieXRlcyA9IChTS19VMzIpIHBQbm1pU3RhdC0+U3RhdFR4T2N0ZXRzT2tDdHM7CiAJCi0gICAgICAgIGlmIChwTmV0LT5NdHUgPD0gMTUwMCkgeworICAgICAgICBpZiAoZGV2LT5tdHUgPD0gMTUwMCkgewogICAgICAgICAgICAgICAgIHBBQy0+c3RhdHMucnhfZXJyb3JzID0gKFNLX1UzMikgcFBubWlTdHJ1Y3QtPkluRXJyb3JzQ3RzICYgMHhGRkZGRkZGRjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwQUMtPnN0YXRzLnJ4X2Vycm9ycyA9IChTS19VMzIpICgocFBubWlTdHJ1Y3QtPkluRXJyb3JzQ3RzIC0KQEAgLTM3NzEsMjUgKzM3NjcsMjEgQEAKICAqCiAgKiBSZXR1cm5zOiBOL0EKICAqLwotc3RhdGljIHZvaWQgUHJvZHVjdFN0cigKLVNLX0FDCSpwQUMJCS8qIHBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCitzdGF0aWMgaW5saW5lIGludCBQcm9kdWN0U3RyKAorCVNLX0FDCSpwQUMsCQkvKiBwb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLworCWNoYXIgICAgKkRldmljZVN0ciwJLyogcmVzdWx0IHN0cmluZyAqLworCWludCAgICAgIFN0ckxlbgkJLyogbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKi8KICkKIHsKLWludAlTdHJMZW4gPSA4MDsJCS8qIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBkZWZpbmVkIGluIFNLX0FDICovCiBjaGFyCUtleXdvcmRbXSA9IFZQRF9OQU1FOwkvKiB2cGQgcHJvZHVjdG5hbWUgaWRlbnRpZmllciAqLwogaW50CVJldHVybkNvZGU7CQkvKiByZXR1cm4gY29kZSBmcm9tIHZwZF9yZWFkICovCiB1bnNpZ25lZCBsb25nIEZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7Ci0JUmV0dXJuQ29kZSA9IFZwZFJlYWQocEFDLCBwQUMtPklvQmFzZSwgS2V5d29yZCwgcEFDLT5EZXZpY2VTdHIsCi0JCSZTdHJMZW4pOworCVJldHVybkNvZGUgPSBWcGRSZWFkKHBBQywgcEFDLT5Jb0Jhc2UsIEtleXdvcmQsIERldmljZVN0ciwgJlN0ckxlbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQlpZiAoUmV0dXJuQ29kZSAhPSAwKSB7Ci0JCS8qIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSB2cGQgZGF0YSAqLwotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRVJST1IsCi0JCQkoIkVycm9yIHJlYWRpbmcgVlBEIGRhdGE6ICVkXG4iLCBSZXR1cm5Db2RlKSk7Ci0JCXBBQy0+RGV2aWNlU3RyWzBdID0gJ1wwJzsKLQl9CisKKwlyZXR1cm4gUmV0dXJuQ29kZTsKIH0gLyogUHJvZHVjdFN0ciAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM5OTIsMjggKzM5ODQsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKglTa1BjaVdyaXRlQ2ZnRFdvcmQgLSB3cml0ZSBhIDMyIGJpdCB2YWx1ZSB0byBwY2kgY29uZmlnIHNwYWNlCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgd3JpdGVzIGEgMzIgYml0IHZhbHVlIHRvIHRoZSBwY2kgY29uZmlndXJhdGlvbgotICoJc3BhY2UuCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBpbmRpY2F0ZSBldmVyeXRoaW5nIHdvcmtlZCBvay4KLSAqCSE9IDAgLSBlcnJvciBpbmRpY2F0aW9uCi0gKi8KLWludCBTa1BjaVdyaXRlQ2ZnRFdvcmQoCi1TS19BQyAqcEFDLAkvKiBBZGFwdGVyIENvbnRyb2wgc3RydWN0dXJlIHBvaW50ZXIgKi8KLWludCBQY2lBZGRyLAkJLyogUENJIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLVNLX1UzMiBWYWwpCQkvKiBwb2ludGVyIHRvIHN0b3JlIHRoZSByZWFkIHZhbHVlICovCi17Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwQUMtPlBjaURldiwgUGNpQWRkciwgVmFsKTsKLQlyZXR1cm4oMCk7Ci19IC8qIFNrUGNpV3JpdGVDZmdEV29yZCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKICAqCVNrUGNpV3JpdGVDZmdXb3JkIC0gd3JpdGUgYSAxNiBiaXQgdmFsdWUgdG8gcGNpIGNvbmZpZyBzcGFjZQogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtNDE1MCw2ICs0MTIwLDcgQEAKIAkJCUZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBTS19EUlZfTkVUX1VQOgkgLyogU0tfVTMyIFBvcnRJZHggKi8KKwl7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwQUMtPmRldltQYXJhbS5QYXJhMzJbMF1dOwogCQkvKiBhY3Rpb24gbGlzdCA1ICovCiAJCUZyb21Qb3J0ID0gUGFyYW0uUGFyYTMyWzBdOwogCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRVZFTlQsCkBAIC00MjMzLDIyICs0MjA0LDEyIEBACiAJCQlwcmludGsoIiAgICBpcnEgbW9kZXJhdGlvbjogIGRpc2FibGVkXG4iKTsKIAogCi0jaWZkZWYgU0tfWkVST0NPUFkKLQkJaWYgKHBBQy0+Q2hpcHNldFR5cGUpCi0jaWZkZWYgVVNFX1NLX1RYX0NIRUNLU1VNCi0JCQlwcmludGsoIiAgICBzY2F0dGVyLWdhdGhlcjogIGVuYWJsZWRcbiIpOwotI2Vsc2UKLQkJCXByaW50aygiICAgIHR4LWNoZWNrc3VtOiAgICAgZGlzYWJsZWRcbiIpOwotI2VuZGlmCi0JCWVsc2UKLQkJCXByaW50aygiICAgIHNjYXR0ZXItZ2F0aGVyOiAgZGlzYWJsZWRcbiIpOwotI2Vsc2UKLQkJCXByaW50aygiICAgIHNjYXR0ZXItZ2F0aGVyOiAgZGlzYWJsZWRcbiIpOwotI2VuZGlmCi0KLSNpZm5kZWYgVVNFX1NLX1JYX0NIRUNLU1VNCi0JCQlwcmludGsoIiAgICByeC1jaGVja3N1bTogICAgIGRpc2FibGVkXG4iKTsKLSNlbmRpZgorCQlwcmludGsoIiAgICBzY2F0dGVyLWdhdGhlcjogICVzXG4iLAorCQkgICAgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCQlwcmludGsoIiAgICB0eC1jaGVja3N1bTogICAgICVzXG4iLAorCQkgICAgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJCXByaW50aygiICAgIHJ4LWNoZWNrc3VtOiAgICAgJXNcbiIsCisJCSAgICAgICBwQUMtPlJ4UG9ydFtQYXJhbS5QYXJhMzJbMF1dLlJ4Q3N1bSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogCiAJCX0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfVFJVRTsKQEAgLTQyNjMsOSArNDIyNCw5IEBACiAJCX0KIAogCQkvKiBJbmZvcm0gdGhlIHdvcmxkIHRoYXQgbGluayBwcm90b2NvbCBpcyB1cC4gKi8KLQkJbmV0aWZfY2Fycmllcl9vbihwQUMtPmRldltQYXJhbS5QYXJhMzJbMF1dKTsKLQorCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCWJyZWFrOworCX0KIAljYXNlIFNLX0RSVl9ORVRfRE9XTjoJIC8qIFNLX1UzMiBSZWFzb24gKi8KIAkJLyogYWN0aW9uIGxpc3QgNyAqLwogCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRVZFTlQsCkBAIC00NDc5LDcgKzQ0NDAsNyBAQAogCiAJcEFDLT5EaWFnTW9kZUFjdGl2ZSA9IERJQUdfQUNUSVZFOwogCWlmIChwQUMtPkJvYXJkTGV2ZWwgPiBTS19JTklUX0RBVEEpIHsKLQkJaWYgKHBOZXQtPlVwKSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKHBBQy0+ZGV2WzBdKSkgewogCQkJcEFDLT5XYXNJZlVwWzBdID0gU0tfVFJVRTsKIAkJCXBBQy0+RGlhZ0Zsb3dDdHJsID0gU0tfVFJVRTsgLyogZm9yIFNrR2VDbG9zZSAgICAgICovCiAJCQlEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfRkFMU0U7CkBAIC00NDg5LDcgKzQ0NTAsNyBAQAogCQl9CiAJCWlmIChwTmV0ICE9IG5ldGRldl9wcml2KHBBQy0+ZGV2WzFdKSkgewogCQkJcE5ldCA9IG5ldGRldl9wcml2KHBBQy0+ZGV2WzFdKTsKLQkJCWlmIChwTmV0LT5VcCkgeworCQkJaWYgKG5ldGlmX3J1bm5pbmcocEFDLT5kZXZbMV0pKSB7CiAJCQkJcEFDLT5XYXNJZlVwWzFdID0gU0tfVFJVRTsKIAkJCQlwQUMtPkRpYWdGbG93Q3RybCA9IFNLX1RSVUU7IC8qIGZvciBTa0dlQ2xvc2UgKi8KIAkJCQlEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfRkFMU0U7CkBAIC00ODE1LDYgKzQ3NzYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXYgPSBOVUxMOwogCXN0YXRpYyBpbnQgYm9hcmRzX2ZvdW5kID0gMDsKIAlpbnQgZXJyb3IgPSAtRU5PREVWOworCWNoYXIgRGV2aWNlU3RyWzgwXTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJZ290byBvdXQ7CkBAIC00ODQyLDE0ICs0ODA0LDExIEBACiAJbWVtc2V0KHBOZXQtPnBBQywgMCwgc2l6ZW9mKFNLX0FDKSk7CiAJcEFDID0gcE5ldC0+cEFDOwogCXBBQy0+UGNpRGV2ID0gcGRldjsKLQlwQUMtPlBjaURldklkID0gcGRldi0+ZGV2aWNlOworCiAJcEFDLT5kZXZbMF0gPSBkZXY7CiAJcEFDLT5kZXZbMV0gPSBkZXY7Ci0Jc3ByaW50ZihwQUMtPk5hbWUsICJTeXNLb25uZWN0IFNLLTk4eHgiKTsKIAlwQUMtPkNoZWNrUXVldWUgPSBTS19GQUxTRTsKIAotCXBOZXQtPk10dSA9IDE1MDA7Ci0JcE5ldC0+VXAgPSAwOwogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCWVycm9yID0gU2tHZUluaXRQQ0kocEFDKTsKIAlpZiAoZXJyb3IpIHsKQEAgLTQ4NzIsMjEgKzQ4MzEsMzAgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZTa0dlRXRodG9vbE9wcyk7CiAKLSNpZmRlZiBTS19aRVJPQ09QWQotI2lmZGVmIFVTRV9TS19UWF9DSEVDS1NVTQorCS8qIFVzZSBvbmx5IGlmIHl1a29uIGhhcmR3YXJlICovCiAJaWYgKHBBQy0+Q2hpcHNldFR5cGUpIHsKLQkJLyogVXNlIG9ubHkgaWYgeXVrb24gaGFyZHdhcmUgKi8KLQkJLyogU0sgYW5kIFpFUk9DT1BZIC0gZmx5IGJhYnkuLi4gKi8KLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOworI2lmZGVmIFVTRV9TS19UWF9DSEVDS1NVTQorCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKyNlbmRpZgorI2lmZGVmIFNLX1pFUk9DT1BZCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKyNlbmRpZgorI2lmZGVmIFVTRV9TS19SWF9DSEVDS1NVTQorCQlwQUMtPlJ4UG9ydFswXS5SeENzdW0gPSAxOworI2VuZGlmCiAJfQotI2VuZGlmCi0jZW5kaWYKIAogCXBBQy0+SW5kZXggPSBib2FyZHNfZm91bmQrKzsKIAogCWlmIChTa0dlQm9hcmRJbml0KGRldiwgcEFDKSkKIAkJZ290byBvdXRfZnJlZV9uZXRkZXY7CiAKKwkvKiBSZWFkIEFkYXB0ZXIgbmFtZSBmcm9tIFZQRCAqLworCWlmIChQcm9kdWN0U3RyKHBBQywgRGV2aWNlU3RyLCBzaXplb2YoRGV2aWNlU3RyKSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgInNrOThsaW46IENvdWxkIG5vdCByZWFkIFZQRCBkYXRhLlxuIik7CisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCX0KKwogCS8qIFJlZ2lzdGVyIG5ldCBkZXZpY2UgKi8KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzazk4bGluOiBDb3VsZCBub3QgcmVnaXN0ZXIgZGV2aWNlLlxuIik7CkBAIC00ODk0LDggKzQ4NjIsNyBAQAogCX0KIAogCS8qIFByaW50IGFkYXB0ZXIgc3BlY2lmaWMgc3RyaW5nIGZyb20gdnBkICovCi0JUHJvZHVjdFN0cihwQUMpOwotCXByaW50aygiJXM6ICVzXG4iLCBkZXYtPm5hbWUsIHBBQy0+RGV2aWNlU3RyKTsKKwlwcmludGsoIiVzOiAlc1xuIiwgZGV2LT5uYW1lLCBEZXZpY2VTdHIpOwogCiAJLyogUHJpbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLwogCXByaW50aygiICAgICAgUHJlZlBvcnQ6JWMgIFJsbXRNb2RlOiVzXG4iLApAQCAtNDkxMSw4ICs0ODc4LDYgQEAKIAltZW1jcHkoJmRldi0+ZGV2X2FkZHIsICZwQUMtPkFkZHIuTmV0WzBdLkN1cnJlbnRNYWNBZGRyZXNzLCA2KTsKIAltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCi0JU2tHZVByb2NDcmVhdGUoZGV2KTsKLQogCXBOZXQtPlBvcnROciA9IDA7CiAJcE5ldC0+TmV0TnIgID0gMDsKIApAQCAtNDkzMSw4ICs0ODk2LDYgQEAKIAkJcE5ldC0+UG9ydE5yICA9IDE7CiAJCXBOZXQtPk5ldE5yICAgPSAxOwogCQlwTmV0LT5wQUMgICAgID0gcEFDOwotCQlwTmV0LT5NdHUgICAgID0gMTUwMDsKLQkJcE5ldC0+VXAgICAgICA9IDA7CiAKIAkJZGV2LT5vcGVuICAgICAgICAgICAgICAgPSAmU2tHZU9wZW47CiAJCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gJlNrR2VDbG9zZTsKQEAgLTQ5NDUsMjYgKzQ5MDgsMjggQEAKIAkJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJlNrR2VFdGh0b29sT3BzKTsKIAotI2lmZGVmIFNLX1pFUk9DT1BZCi0jaWZkZWYgVVNFX1NLX1RYX0NIRUNLU1VNCiAJCWlmIChwQUMtPkNoaXBzZXRUeXBlKSB7Ci0JCQkvKiBTRyBhbmQgWkVST0NPUFkgLSBmbHkgYmFieS4uLiAqLwotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOworI2lmZGVmIFVTRV9TS19UWF9DSEVDS1NVTQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisjZW5kaWYKKyNpZmRlZiBTS19aRVJPQ09QWQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworI2VuZGlmCisjaWZkZWYgVVNFX1NLX1JYX0NIRUNLU1VNCisJCQlwQUMtPlJ4UG9ydFsxXS5SeENzdW0gPSAxOworI2VuZGlmCiAJCX0KLSNlbmRpZgotI2VuZGlmCiAKIAkJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNrOThsaW46IENvdWxkIG5vdCByZWdpc3RlciBkZXZpY2UgZm9yIHNlY29uZiBwb3J0LlxuIik7CiAJCQlmcmVlX25ldGRldihkZXYpOwogCQkJcEFDLT5kZXZbMV0gPSBwQUMtPmRldlswXTsKIAkJfSBlbHNlIHsKLQkJCVNrR2VQcm9jQ3JlYXRlKGRldik7CiAJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHIsCiAJCQkJCSZwQUMtPkFkZHIuTmV0WzFdLkN1cnJlbnRNYWNBZGRyZXNzLCA2KTsKIAkJCW1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAJCi0JCQlwcmludGsoIiVzOiAlc1xuIiwgZGV2LT5uYW1lLCBwQUMtPkRldmljZVN0cik7CisJCQlwcmludGsoIiVzOiAlc1xuIiwgZGV2LT5uYW1lLCBEZXZpY2VTdHIpOwogCQkJcHJpbnRrKCIgICAgICBQcmVmUG9ydDpCICBSbG10TW9kZTpEdWFsIENoZWNrIExpbmsgU3RhdGVcbiIpOwogCQl9CiAJfQpAQCAtNTAwMCwxMCArNDk2NSw3IEBACiAJU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJkZXYgPSBwQUMtPmRldlsxXTsKIAotCVNrR2VQcm9jUmVtb3ZlKGRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAob3RoZXJkZXYgIT0gZGV2KQotCQlTa0dlUHJvY1JlbW92ZShvdGhlcmRldik7CiAKIAlTa0dlWWVsbG93TEVEKHBBQywgcEFDLT5Jb0Jhc2UsIDApOwogCkBAIC01MDg4LDkgKzUwNTAsOSBAQAogCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMikKLQkJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIFNrR2VJc3IsIFNBX1NISVJRLCBwQUMtPk5hbWUsIGRldik7CisJCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBTa0dlSXNyLCBTQV9TSElSUSwgInNrOThsaW4iLCBkZXYpOwogCWVsc2UKLQkJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIFNrR2VJc3JPbmVQb3J0LCBTQV9TSElSUSwgcEFDLT5OYW1lLCBkZXYpOworCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgU2tHZUlzck9uZVBvcnQsIFNBX1NISVJRLCAic2s5OGxpbiIsIGRldik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzazk4bGluOiB1bmFibGUgdG8gYWNxdWlyZSBJUlEgJWRcbiIsIGRldi0+aXJxKTsKIAkJcEFDLT5BbGxvY0ZsYWcgJj0gflNLX0FMTE9DX0lSUTsKQEAgLTUxNDgsMjMgKzUxMTAsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2tnZV9pbml0KHZvaWQpCiB7Ci0JaW50IGVycm9yOwotCi0JcFNrUm9vdERpciA9IHByb2NfbWtkaXIoU0tSb290TmFtZSwgTlVMTCk7Ci0JaWYgKHBTa1Jvb3REaXIpIAotCQlwU2tSb290RGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQotCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2tnZV9kcml2ZXIpOwotCWlmIChlcnJvcikKLQkJcmVtb3ZlX3Byb2NfZW50cnkoU0tSb290TmFtZSwgTlVMTCk7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNrZ2VfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNrZ2VfZXhpdCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2tnZV9kcml2ZXIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KFNLUm9vdE5hbWUsIE5VTEwpOwotCiB9CiAKIG1vZHVsZV9pbml0KHNrZ2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrcHJvYy5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za3Byb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlY2UyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrcHJvYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza3Byb2MuYwotICogUHJvamVjdDoJR0VuZXNpcywgUENJIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjExICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzEyLzExIDE2OjAzOjU3ICQKLSAqIFB1cnBvc2U6CUZ1bmt0aW9ucyB0byBkaXNwbGF5IHN0YXRpY3RpYyBkYXRhCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QgR21iSC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCUNyZWF0ZWQgMjItTm92LTIwMDAKLSAqCUF1dGhvcjogTWlya28gTGluZG5lciAobWxpbmRuZXJAc3lza29ubmVjdC5kZSkKLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotCi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLSNpbmNsdWRlICJoL3NrdmVyc2lvbi5oIgotCi1zdGF0aWMgaW50IHNrX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KTsKLXN0YXRpYyBpbnQgc2tfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLQotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBza19wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHNrX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgICAgIHNrX3NlcV9zaG93IC0gc2hvdyBwcm9jIGluZm9ybWF0aW9uIG9mIGEgcGFydGljdWxhciBhZGFwdGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgcHJvYyBlbnRyeSB3aXRoIHN0YXRpc3RpYyBkYXRhIGFib3V0IAotICogIHRoZSBldGhlcm5ldCBkZXZpY2UuIEl0IGludm9rZXMgdGhlIGdlbmVyaWMgc2tfZ2VuX2Jyb3dzZSgpIHRvCi0gKiAgcHJpbnQgb3V0IGFsbCBpdGVtcyBvbmUgcGVyIG9uZS4KLSAqICAKLSAqIFJldHVybnM6IDAKLSAqICAgICAgCi0gKi8KLXN0YXRpYyBpbnQgc2tfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNlcS0+cHJpdmF0ZTsKLQlERVZfTkVUCQkJKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCVNLX0FDCQkJKnBBQyA9IHBOZXQtPnBBQzsKLQlTS19QTk1JX1NUUlVDVF9EQVRBIAkqcFBubWlTdHJ1Y3QgPSAmcEFDLT5Qbm1pU3RydWN0OwotCXVuc2lnbmVkIGxvbmcJCUZsYWdzOwkKLQl1bnNpZ25lZCBpbnQJCVNpemU7Ci0JY2hhcgkJCXNlbnNfbXNnWzUwXTsKLQlpbnQgCQkJdDsKLQlpbnQgCQkJaTsKLQotCS8qIE5ldEluZGV4IGluIEdldFN0cnVjdCBpcyBub3cgcmVxdWlyZWQsIHplcm8gaXMgb25seSBkdW1teSAqLwotCWZvciAodD1wQUMtPkdJbmkuR0lNYWNzRm91bmQ7IHQgPiAwOyB0LS0pIHsKLQkJaWYgKChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMikgJiYgcEFDLT5SbG10TmV0cyA9PSAxKQotCQkJdC0tOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCQlTaXplID0gU0tfUE5NSV9TVFJVQ1RfU0laRTsKLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLQkJaWYgKHBBQy0+Qm9hcmRMZXZlbCA9PSBTS19JTklUX0RBVEEpIHsKLQkJCVNLX01FTUNQWSgmKHBBQy0+UG5taVN0cnVjdCksICYocEFDLT5Qbm1pQmFja3VwKSwgc2l6ZW9mKFNLX1BOTUlfU1RSVUNUX0RBVEEpKTsKLQkJCWlmIChwQUMtPkRpYWdNb2RlQWN0aXZlID09IERJQUdfTk9UQUNUSVZFKSB7Ci0JCQkJcEFDLT5Qbm1pLkRpYWdBdHRhY2hlZCA9IFNLX0RJQUdfSURMRTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCVNrUG5taUdldFN0cnVjdChwQUMsIHBBQy0+SW9CYXNlLCBwUG5taVN0cnVjdCwgJlNpemUsIHQtMSk7Ci0JCX0KLSNlbHNlCi0JCVNrUG5taUdldFN0cnVjdChwQUMsIHBBQy0+SW9CYXNlLCAKLQkJCQlwUG5taVN0cnVjdCwgJlNpemUsIHQtMSk7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQkKLQkJaWYgKHBBQy0+ZGV2W3QtMV0gPT0gZGV2KSB7Ci0JCQlTS19QTk1JX1NUQVQJKnBQbm1pU3RhdCA9ICZwUG5taVN0cnVjdC0+U3RhdFswXTsKLQotCQkJc2VxX3ByaW50ZihzZXEsICJcbkRldGFpbGVkIHN0YXRpc3RpYyBmb3IgZGV2aWNlICVzXG4iLAotCQkJCSAgICAgIHBBQy0+ZGV2W3QtMV0tPm5hbWUpOwotCQkJc2VxX3ByaW50ZihzZXEsICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwotCQotCQkJLyogQm9hcmQgc3RhdGlzdGljcyAqLwotCQkJc2VxX3ByaW50ZihzZXEsICJcbkJvYXJkIHN0YXRpc3RpY3NcblxuIik7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIkFjdGl2ZSBQb3J0ICAgICAgICAgICAgICAgICAgICAlY1xuIiwKLQkJCQkgICAgICAnQScgKyBwQUMtPlJsbXQuTmV0W3QtMV0uUG9ydFtwQUMtPlJsbXQuCi0JCQkJCQkJCSAgICBOZXRbdC0xXS5QcmVmUG9ydF0tPlBvcnROdW1iZXIpOwotCQkJc2VxX3ByaW50ZihzZXEsICJQcmVmZXJyZWQgUG9ydCAgICAgICAgICAgICAgICAgJWNcbiIsCi0JCQkJICAgICAgJ0EnICsgcEFDLT5SbG10Lk5ldFt0LTFdLlBvcnRbcEFDLT5SbG10LgotCQkJCQkJCQkgICAgTmV0W3QtMV0uUHJlZlBvcnRdLT5Qb3J0TnVtYmVyKTsKLQotCQkJc2VxX3ByaW50ZihzZXEsICJCdXMgc3BlZWQgKE1IeikgICAgICAgICAgICAgICAgJWRcbiIsCi0JCQkJICAgICAgcFBubWlTdHJ1Y3QtPkJ1c1NwZWVkKTsKLQotCQkJc2VxX3ByaW50ZihzZXEsICJCdXMgd2lkdGggKEJpdCkgICAgICAgICAgICAgICAgJWRcbiIsCi0JCQkJICAgICAgcFBubWlTdHJ1Y3QtPkJ1c1dpZHRoKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiRHJpdmVyIHZlcnNpb24gICAgICAgICAgICAgICAgICVzXG4iLAotCQkJCSAgICAgIFZFUl9TVFJJTkcpOwotCQkJc2VxX3ByaW50ZihzZXEsICJIYXJkd2FyZSByZXZpc2lvbiAgICAgICAgICAgICAgdiVkLiVkXG4iLAotCQkJCSAgICAgIChwQUMtPkdJbmkuR0lQY2lId1JldiA+PiA0KSAmIDB4MEYsCi0JCQkJICAgICAgcEFDLT5HSW5pLkdJUGNpSHdSZXYgJiAweDBGKTsKLQotCQkJLyogUHJpbnQgc2Vuc29yIGluZm9ybWF0aW9ucyAqLwotCQkJZm9yIChpPTA7IGkgPCBwQUMtPkkyYy5NYXhTZW5zOyBpICsrKSB7Ci0JCQkJLyogQ2hlY2sgdHlwZSAqLwotCQkJCXN3aXRjaCAocEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVHlwZSkgewotCQkJCWNhc2UgMToKLQkJCQkJc3RyY3B5KHNlbnNfbXNnLCBwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5EZXNjKTsKLQkJCQkJc3RyY2F0KHNlbnNfbXNnLCAiIChDKSIpOwotCQkJCQlzZXFfcHJpbnRmKHNlcSwgIiUtMjVzICAgICAgJWQuJTAyZFxuIiwKLQkJCQkJCSAgICAgIHNlbnNfbXNnLAotCQkJCQkJICAgICAgcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVmFsdWUgLyAxMCwKLQkJCQkJCSAgICAgIHBBQy0+STJjLlNlblRhYmxlW2ldLlNlblZhbHVlICUgMTApOwotCi0JCQkJCXN0cmNweShzZW5zX21zZywgcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYyk7Ci0JCQkJCXN0cmNhdChzZW5zX21zZywgIiAoRikiKTsKLQkJCQkJc2VxX3ByaW50ZihzZXEsICIlLTI1cyAgICAgICVkLiUwMmRcbiIsCi0JCQkJCQkgICAgICBzZW5zX21zZywKLQkJCQkJCSAgICAgICgoKChwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5WYWx1ZSkKLQkJCQkJCQkgKjEwKSo5KS81ICsgMzIwMCkvMTAwLAotCQkJCQkJICAgICAgKCgoKHBBQy0+STJjLlNlblRhYmxlW2ldLlNlblZhbHVlKQotCQkJCQkJCSAqMTApKjkpLzUgKyAzMjAwKSAlIDEwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAyOgotCQkJCQlzdHJjcHkoc2Vuc19tc2csIHBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkRlc2MpOwotCQkJCQlzdHJjYXQoc2Vuc19tc2csICIgKFYpIik7Ci0JCQkJCXNlcV9wcmludGYoc2VxLCAiJS0yNXMgICAgICAlZC4lMDNkXG4iLAotCQkJCQkJICAgICAgc2Vuc19tc2csCi0JCQkJCQkgICAgICBwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5WYWx1ZSAvIDEwMDAsCi0JCQkJCQkgICAgICBwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5WYWx1ZSAlIDEwMDApOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDM6Ci0JCQkJCXN0cmNweShzZW5zX21zZywgcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYyk7Ci0JCQkJCXN0cmNhdChzZW5zX21zZywgIiAocnBtKSIpOwotCQkJCQlzZXFfcHJpbnRmKHNlcSwgIiUtMjVzICAgICAgJWRcbiIsCi0JCQkJCQkgICAgICBzZW5zX21zZywKLQkJCQkJCSAgICAgIHBBQy0+STJjLlNlblRhYmxlW2ldLlNlblZhbHVlKTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJCQotCQkJLypSZWNlaXZlIHN0YXRpc3RpY3MgKi8KLQkJCXNlcV9wcmludGYoc2VxLCAiXG5SZWNlaXZlIHN0YXRpc3RpY3NcblxuIik7Ci0KLQkJCXNlcV9wcmludGYoc2VxLCAiUmVjZWl2ZWQgYnl0ZXMgICAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRSeE9jdGV0c09rQ3RzKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiUmVjZWl2ZWQgcGFja2V0cyAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRSeE9rQ3RzKTsKLSNpZiAwCi0JCQlpZiAocEFDLT5HSW5pLkdQWzBdLlBoeVR5cGUgPT0gU0tfUEhZX1hNQUMgJiYgCi0JCQkgICAgcEFDLT5IV1JldmlzaW9uIDwgMTIpIHsKLQkJCQlwUG5taVN0cnVjdC0+SW5FcnJvcnNDdHMgPSBwUG5taVN0cnVjdC0+SW5FcnJvcnNDdHMgLSAKLQkJCQkJcFBubWlTdGF0LT5TdGF0UnhTaG9ydHNDdHM7Ci0JCQkJcFBubWlTdGF0LT5TdGF0UnhTaG9ydHNDdHMgPSAwOwotCQkJfQotI2VuZGlmCi0JCQlpZiAoZGV2LT5tdHUgPiAxNTAwKQotCQkJCXBQbm1pU3RydWN0LT5JbkVycm9yc0N0cyA9IHBQbm1pU3RydWN0LT5JbkVycm9yc0N0cyAtCi0JCQkJCXBQbm1pU3RhdC0+U3RhdFJ4VG9vTG9uZ0N0czsKLQotCQkJc2VxX3ByaW50ZihzZXEsICJSZWNlaXZlIGVycm9ycyAgICAgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RydWN0LT5JbkVycm9yc0N0cyk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIlJlY2VpdmUgZHJvcHBlZCAgICAgICAgICAgICAgICAlTHVcbiIsCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcFBubWlTdHJ1Y3QtPlJ4Tm9CdWZDdHMpOwotCQkJc2VxX3ByaW50ZihzZXEsICJSZWNlaXZlZCBtdWx0aWNhc3QgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFJ4TXVsdGljYXN0T2tDdHMpOwotCQkJc2VxX3ByaW50ZihzZXEsICJSZWNlaXZlIGVycm9yIHR5cGVzXG4iKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiICAgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRSeFJ1bnRDdHMpOwotCQkJc2VxX3ByaW50ZihzZXEsICIgICBidWZmZXIgb3ZlcmZsb3cgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFJ4Rmlmb092ZXJmbG93Q3RzKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiICAgYmFkIGNyYyAgICAgICAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRSeEZjc0N0cyk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIiAgIGZyYW1pbmcgICAgICAgICAgICAgICAgICAgICAlTHVcbiIsCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcFBubWlTdGF0LT5TdGF0UnhGcmFtaW5nQ3RzKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiICAgbWlzc2VkIGZyYW1lcyAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRSeE1pc3NlZEN0cyk7Ci0KLQkJCWlmIChkZXYtPm10dSA+IDE1MDApCi0JCQkJcFBubWlTdGF0LT5TdGF0UnhUb29Mb25nQ3RzID0gMDsKLQotCQkJc2VxX3ByaW50ZihzZXEsICIgICB0b28gbG9uZyAgICAgICAgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFJ4VG9vTG9uZ0N0cyk7CQkJCQkKLQkJCXNlcV9wcmludGYoc2VxLCAiICAgY2FycmllciBleHRlbnNpb24gICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRSeENleHRDdHMpOwkJCQkKLQkJCXNlcV9wcmludGYoc2VxLCAiICAgdG9vIHNob3J0ICAgICAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRSeFNob3J0c0N0cyk7CQkJCQotCQkJc2VxX3ByaW50ZihzZXEsICIgICBzeW1ib2wgICAgICAgICAgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFJ4U3ltYm9sQ3RzKTsJCQkJCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiAgIExMQyBNQUMgc2l6ZSAgICAgICAgICAgICAgICAlTHVcbiIsCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcFBubWlTdGF0LT5TdGF0UnhJUkxlbmd0aEN0cyk7CQkJCQotCQkJc2VxX3ByaW50ZihzZXEsICIgICBjYXJyaWVyIGV2ZW50ICAgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFJ4Q2FycmllckN0cyk7CQkJCQotCQkJc2VxX3ByaW50ZihzZXEsICIgICBqYWJiZXIgICAgICAgICAgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFJ4SmFiYmVyQ3RzKTsJCQkJCi0KLQotCQkJLypUcmFuc21pdCBzdGF0aXN0aWNzICovCi0JCQlzZXFfcHJpbnRmKHNlcSwgIlxuVHJhbnNtaXQgc3RhdGlzdGljc1xuXG4iKTsKLQkJCQkKLQkJCXNlcV9wcmludGYoc2VxLCAiVHJhbnNtaXRlZCBieXRlcyAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRUeE9jdGV0c09rQ3RzKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiVHJhbnNtaXRlZCBwYWNrZXRzICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRUeE9rQ3RzKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiVHJhbnNtaXQgZXJyb3JzICAgICAgICAgICAgICAgICVMdVxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwUG5taVN0YXQtPlN0YXRUeFNpbmdsZUNvbGxpc2lvbkN0cyk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIlRyYW5zbWl0IGRyb3BwZWQgICAgICAgICAgICAgICAlTHVcbiIsCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcFBubWlTdHJ1Y3QtPlR4Tm9CdWZDdHMpOwotCQkJc2VxX3ByaW50ZihzZXEsICJUcmFuc21pdCBjb2xsaXNpb25zICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFR4U2luZ2xlQ29sbGlzaW9uQ3RzKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiVHJhbnNtaXQgZXJyb3IgdHlwZXNcbiIpOwotCQkJc2VxX3ByaW50ZihzZXEsICIgICBleGNlc3NpdmUgY29sbGlzaW9uICAgICAgICAgJWxkXG4iLAotCQkJCSAgICAgIHBBQy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihzZXEsICIgICBjYXJyaWVyICAgICAgICAgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFR4Q2FycmllckN0cyk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIiAgIGZpZm8gdW5kZXJydW4gICAgICAgICAgICAgICAlTHVcbiIsCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcFBubWlTdGF0LT5TdGF0VHhGaWZvVW5kZXJydW5DdHMpOwotCQkJc2VxX3ByaW50ZihzZXEsICIgICBoZWFydGJlYXQgICAgICAgICAgICAgICAgICAgJUx1XG4iLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBQbm1pU3RhdC0+U3RhdFR4Q2FycmllckN0cyk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIiAgIHdpbmRvdyAgICAgICAgICAgICAgICAgICAgICAlbGRcbiIsCi0JCQkJICAgICAgcEFDLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKTsKLQkJCQkKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogICAgICBza19wcm9jX29wZW4gLSByZWdpc3RlciB0aGUgc2hvdyBmdW5jdGlvbiB3aGVuIHByb2MgaXMgb3BlbidlZAotICogIAotICogRGVzY3JpcHRpb246Ci0gKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBzazk4bGluIHByb2MgZmlsZSBpcyBxdWVyaWVkLgotICogIAotICogUmV0dXJuczogdGhlIHJldHVybiB2YWx1ZSBvZiBzaW5nbGVfb3BlbigpCi0gKiAgICAgIAotICovCi1zdGF0aWMgaW50IHNrX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLSAgICByZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2tfc2VxX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEVuZCBvZiBmaWxlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAwMGQ2ODMwLi5iNTM4ZTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTQzLDcgKzQ0LDcgQEAKICNpbmNsdWRlICJza2dlLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJza2dlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjMiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICIgIgogCiAjZGVmaW5lIERFRkFVTFRfVFhfUklOR19TSVpFCTEyOApAQCAtODgsMTUgKzg5LDE0IEBACiAKIHN0YXRpYyBpbnQgc2tnZV91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2tnZV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2tnZV9waHlfcmVzZXQoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSk7CiBzdGF0aWMgdm9pZCBza2dlX3R4X2NsZWFuKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpOwogc3RhdGljIGludCB4bV9waHlfd3JpdGUoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2IHZhbCk7CiBzdGF0aWMgaW50IGdtX3BoeV93cml0ZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKTsKIHN0YXRpYyB2b2lkIGdlbmVzaXNfZ2V0X3N0YXRzKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UsIHU2NCAqZGF0YSk7CiBzdGF0aWMgdm9pZCB5dWtvbl9nZXRfc3RhdHMoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSwgdTY0ICpkYXRhKTsKIHN0YXRpYyB2b2lkIHl1a29uX2luaXQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCk7Ci1zdGF0aWMgdm9pZCB5dWtvbl9yZXNldChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0KTsKIHN0YXRpYyB2b2lkIGdlbmVzaXNfbWFjX2luaXQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCk7Ci1zdGF0aWMgdm9pZCBnZW5lc2lzX3Jlc2V0KHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQpOwogc3RhdGljIHZvaWQgZ2VuZXNpc19saW5rX3VwKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpOwogCiAvKiBBdm9pZCBjb25kaXRpb25hbHMgYnkgdXNpbmcgYXJyYXkgKi8KQEAgLTI3NiwxMCArMjc2LDkgQEAKIAlza2dlLT5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKIAlza2dlLT5hZHZlcnRpc2luZyA9IGVjbWQtPmFkdmVydGlzaW5nOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlza2dlX2Rvd24oZGV2KTsKLQkJc2tnZV91cChkZXYpOwotCX0KKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlza2dlX3BoeV9yZXNldChza2dlKTsKKwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTM5OSw2ICszOTgsNyBAQAogCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcCkKIHsKIAlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyOwogCiAJaWYgKHAtPnJ4X3BlbmRpbmcgPT0gMCB8fCBwLT5yeF9wZW5kaW5nID4gTUFYX1JYX1JJTkdfU0laRSB8fAogCSAgICBwLT50eF9wZW5kaW5nID09IDAgfHwgcC0+dHhfcGVuZGluZyA+IE1BWF9UWF9SSU5HX1NJWkUpCkBAIC00MDksNyArNDA5LDkgQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJc2tnZV9kb3duKGRldik7Ci0JCXNrZ2VfdXAoZGV2KTsKKwkJZXJyID0gc2tnZV91cChkZXYpOworCQlpZiAoZXJyKQorCQkJZGV2X2Nsb3NlKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MzAsMjEgKzQzMiwxMSBAQAogc3RhdGljIGludCBza2dlX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKLQlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7CiAKIAlpZiAoc2tnZS0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSB8fCAhbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7Ci0JCWdlbmVzaXNfcmVzZXQoaHcsIHBvcnQpOwotCQlnZW5lc2lzX21hY19pbml0KGh3LCBwb3J0KTsKLQl9IGVsc2UgewotCQl5dWtvbl9yZXNldChodywgcG9ydCk7Ci0JCXl1a29uX2luaXQoaHcsIHBvcnQpOwotCX0KLQlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwlza2dlX3BoeV9yZXNldChza2dlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTE2LDEwICs1MDgsOCBAQAogCWVsc2UKIAkJc2tnZS0+Zmxvd19jb250cm9sID0gRkxPV19NT0RFX05PTkU7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXNrZ2VfZG93bihkZXYpOwotCQlza2dlX3VwKGRldik7Ci0JfQorCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXNrZ2VfcGh5X3Jlc2V0KHNrZ2UpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDE5LDYgKzIwMDksMjUgQEAKIAkvKiBYWFggcmVzdGFydCBhdXRvbmVnb3RpYXRpb24/ICovCiB9CiAKK3N0YXRpYyB2b2lkIHNrZ2VfcGh5X3Jlc2V0KHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpCit7CisJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CisJaW50IHBvcnQgPSBza2dlLT5wb3J0OworCisJbmV0aWZfc3RvcF9xdWV1ZShza2dlLT5uZXRkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHNrZ2UtPm5ldGRldik7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykgeworCQlnZW5lc2lzX3Jlc2V0KGh3LCBwb3J0KTsKKwkJZ2VuZXNpc19tYWNfaW5pdChodywgcG9ydCk7CisJfSBlbHNlIHsKKwkJeXVrb25fcmVzZXQoaHcsIHBvcnQpOworCQl5dWtvbl9pbml0KGh3LCBwb3J0KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5waHlfbG9jayk7Cit9CisKIC8qIEJhc2ljIE1JSSBzdXBwb3J0ICovCiBzdGF0aWMgaW50IHNrZ2VfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CkBAIC0yMTg3LDYgKzIxOTYsNyBAQAogCWtmcmVlKHNrZ2UtPnJ4X3Jpbmcuc3RhcnQpOwogIGZyZWVfcGNpX21lbToKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGh3LT5wZGV2LCBza2dlLT5tZW1fc2l6ZSwgc2tnZS0+bWVtLCBza2dlLT5kbWEpOworCXNrZ2UtPm1lbSA9IE5VTEw7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjE5Nyw2ICsyMjA3LDkgQEAKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKIAlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7CiAKKwlpZiAoc2tnZS0+bWVtID09IE5VTEwpCisJCXJldHVybiAwOworCiAJaWYgKG5ldGlmX21zZ19pZmRvd24oc2tnZSkpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZGlzYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKIApAQCAtMjI1Myw2ICsyMjY2LDcgQEAKIAlrZnJlZShza2dlLT5yeF9yaW5nLnN0YXJ0KTsKIAlrZnJlZShza2dlLT50eF9yaW5nLnN0YXJ0KTsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGh3LT5wZGV2LCBza2dlLT5tZW1fc2l6ZSwgc2tnZS0+bWVtLCBza2dlLT5kbWEpOworCXNrZ2UtPm1lbSA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MTMsMTggKzI0MjcsMjMgQEAKIAogc3RhdGljIGludCBza2dlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0JaW50IGVyciA9IDA7Ci0JaW50IHJ1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKGRldik7CisJaW50IGVycjsKIAogCWlmIChuZXdfbXR1IDwgRVRIX1pMRU4gfHwgbmV3X210dSA+IEVUSF9KVU1CT19NVFUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZGV2LT5tdHUgPSBuZXdfbXR1OworCQlyZXR1cm4gMDsKKwl9CiAKLQlpZiAocnVubmluZykKLQkJc2tnZV9kb3duKGRldik7CisJc2tnZV9kb3duKGRldik7CisKIAlkZXYtPm10dSA9IG5ld19tdHU7Ci0JaWYgKHJ1bm5pbmcpCi0JCXNrZ2VfdXAoZGV2KTsKKworCWVyciA9IHNrZ2VfdXAoZGV2KTsKKwlpZiAoZXJyKQorCQlkZXZfY2xvc2UoZGV2KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMzk4LDggKzM0MTcsOCBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltpXTsKIAkJaWYgKGRldikgewogCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJCQlza2dlX3VwKGRldik7CisJCQlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIHNrZ2VfdXAoZGV2KSkKKwkJCQlkZXZfY2xvc2UoZGV2KTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuaCBiL2RyaXZlcnMvbmV0L3NrZ2UuaAppbmRleCBlZTEyM2MxLi4yZWZkYWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmgKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5oCkBAIC00NzUsMTggKzQ3NSw2IEBACiAJUV9UMgk9IDB4NDAsCS8qIDMyIGJpdAlUZXN0IFJlZ2lzdGVyIDIJKi8KIAlRX1QzCT0gMHg0NCwJLyogMzIgYml0CVRlc3QgUmVnaXN0ZXIgMwkqLwogCi0vKiBZdWtvbi0yICovCi0JUV9ET05FCT0gMHgyNCwJLyogMTYgYml0CURvbmUgSW5kZXggCQkoWXVrb24tMiBvbmx5KSAqLwotCVFfV00JPSAweDQwLAkvKiAxNiBiaXQJRklGTyBXYXRlcm1hcmsgKi8KLQlRX0FMCT0gMHg0MiwJLyogIDggYml0CUZJRk8gQWxpZ25tZW50ICovCi0JUV9SU1AJPSAweDQ0LAkvKiAxNiBiaXQJRklGTyBSZWFkIFNoYWRvdyBQb2ludGVyICovCi0JUV9SU0wJPSAweDQ2LAkvKiAgOCBiaXQJRklGTyBSZWFkIFNoYWRvdyBMZXZlbCAqLwotCVFfUlAJPSAweDQ4LAkvKiAgOCBiaXQJRklGTyBSZWFkIFBvaW50ZXIgKi8KLQlRX1JMCT0gMHg0YSwJLyogIDggYml0CUZJRk8gUmVhZCBMZXZlbCAqLwotCVFfV1AJPSAweDRjLAkvKiAgOCBiaXQJRklGTyBXcml0ZSBQb2ludGVyICovCi0JUV9XU1AJPSAweDRkLAkvKiAgOCBiaXQJRklGTyBXcml0ZSBTaGFkb3cgUG9pbnRlciAqLwotCVFfV0wJPSAweDRlLAkvKiAgOCBiaXQJRklGTyBXcml0ZSBMZXZlbCAqLwotCVFfV1NMCT0gMHg0ZiwJLyogIDggYml0CUZJRk8gV3JpdGUgU2hhZG93IExldmVsICovCiB9OwogI2RlZmluZSBRX0FERFIocmVnLCBvZmZzKSAoQjhfUV9SRUdTICsgKHJlZykgKyAob2ZmcykpCiAKQEAgLTY3NSwyMiArNjYzLDE2IEBACiAJTEVEX09GRgk9IDE8PDAsCS8qIHN3aXRjaCBMRUQgb2ZmICovCiB9OwogCi0vKiBSZWNlaXZlIEdNQUMgRklGTyAoWVVLT04gYW5kIFl1a29uLTIpICovCisvKiBSZWNlaXZlIEdNQUMgRklGTyAoWVVLT04pICovCiBlbnVtIHsKIAlSWF9HTUZfRUEJPSAweDBjNDAsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBFbmQgQWRkcmVzcyAqLwogCVJYX0dNRl9BRl9USFIJPSAweDBjNDQsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBBbG1vc3QgRnVsbCBUaHJlc2guICovCiAJUlhfR01GX0NUUkxfVAk9IDB4MGM0OCwvKiAzMiBiaXQJUnggR01BQyBGSUZPIENvbnRyb2wvVGVzdCAqLwogCVJYX0dNRl9GTF9NU0sJPSAweDBjNGMsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBGbHVzaCBNYXNrICovCiAJUlhfR01GX0ZMX1RIUgk9IDB4MGM1MCwvKiAzMiBiaXQJUnggR01BQyBGSUZPIEZsdXNoIFRocmVzaG9sZCAqLwotCVJYX0dNRl9UUl9USFIJPSAweDBjNTQsLyogMzIgYml0CVJ4IFRydW5jYXRpb24gVGhyZXNob2xkIChZdWtvbi0yKSAqLwotCi0JUlhfR01GX1ZMQU4JPSAweDBjNWMsLyogMzIgYml0CVJ4IFZMQU4gVHlwZSBSZWdpc3RlciAoWXVrb24tMikgKi8KIAlSWF9HTUZfV1AJPSAweDBjNjAsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBXcml0ZSBQb2ludGVyICovCi0KIAlSWF9HTUZfV0xFVgk9IDB4MGM2OCwvKiAzMiBiaXQJUnggR01BQyBGSUZPIFdyaXRlIExldmVsICovCi0KIAlSWF9HTUZfUlAJPSAweDBjNzAsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBSZWFkIFBvaW50ZXIgKi8KLQogCVJYX0dNRl9STEVWCT0gMHgwYzc4LC8qIDMyIGJpdAlSeCBHTUFDIEZJRk8gUmVhZCBMZXZlbCAqLwogfTsKIApAQCAtODU1LDQ4ICs4MzcsNiBAQAogCUdNQUNfVElfU1RfVFNUCT0gMHgwZTFhLC8qICA4IGJpdAlUaW1lIFN0YW1wIFRpbWVyIFRlc3QgUmVnICovCiB9OwogCi0vKiBTdGF0dXMgQk1VIFJlZ2lzdGVycyAoWXVrb24tMiBvbmx5KSovCi1lbnVtIHsKLQlTVEFUX0NUUkwJPSAweDBlODAsLyogMzIgYml0CVN0YXR1cyBCTVUgQ29udHJvbCBSZWcgKi8KLQlTVEFUX0xBU1RfSURYCT0gMHgwZTg0LC8qIDE2IGJpdAlTdGF0dXMgQk1VIExhc3QgSW5kZXggKi8KLQkvKiAweDBlODUgLSAweDBlODY6CXJlc2VydmVkICovCi0JU1RBVF9MSVNUX0FERFJfTE8JPSAweDBlODgsLyogMzIgYml0CVN0YXR1cyBMaXN0IFN0YXJ0IEFkZHIgKGxvdykgKi8KLQlTVEFUX0xJU1RfQUREUl9ISQk9IDB4MGU4YywvKiAzMiBiaXQJU3RhdHVzIExpc3QgU3RhcnQgQWRkciAoaGlnaCkgKi8KLQlTVEFUX1RYQTFfUklEWAk9IDB4MGU5MCwvKiAxNiBiaXQJU3RhdHVzIFR4QTEgUmVwb3J0IEluZGV4IFJlZyAqLwotCVNUQVRfVFhTMV9SSURYCT0gMHgwZTkyLC8qIDE2IGJpdAlTdGF0dXMgVHhTMSBSZXBvcnQgSW5kZXggUmVnICovCi0JU1RBVF9UWEEyX1JJRFgJPSAweDBlOTQsLyogMTYgYml0CVN0YXR1cyBUeEEyIFJlcG9ydCBJbmRleCBSZWcgKi8KLQlTVEFUX1RYUzJfUklEWAk9IDB4MGU5NiwvKiAxNiBiaXQJU3RhdHVzIFR4UzIgUmVwb3J0IEluZGV4IFJlZyAqLwotCVNUQVRfVFhfSURYX1RICT0gMHgwZTk4LC8qIDE2IGJpdAlTdGF0dXMgVHggSW5kZXggVGhyZXNob2xkIFJlZyAqLwotCVNUQVRfUFVUX0lEWAk9IDB4MGU5YywvKiAxNiBiaXQJU3RhdHVzIFB1dCBJbmRleCBSZWcgKi8KLQotLyogRklGTyBDb250cm9sL1N0YXR1cyBSZWdpc3RlcnMgKFl1a29uLTIgb25seSkqLwotCVNUQVRfRklGT19XUAk9IDB4MGVhMCwvKiAgOCBiaXQJU3RhdHVzIEZJRk8gV3JpdGUgUG9pbnRlciBSZWcgKi8KLQlTVEFUX0ZJRk9fUlAJPSAweDBlYTQsLyogIDggYml0CVN0YXR1cyBGSUZPIFJlYWQgUG9pbnRlciBSZWcgKi8KLQlTVEFUX0ZJRk9fUlNQCT0gMHgwZWE2LC8qICA4IGJpdAlTdGF0dXMgRklGTyBSZWFkIFNoYWRvdyBQdHIgKi8KLQlTVEFUX0ZJRk9fTEVWRUwJPSAweDBlYTgsLyogIDggYml0CVN0YXR1cyBGSUZPIExldmVsIFJlZyAqLwotCVNUQVRfRklGT19TSExWTAk9IDB4MGVhYSwvKiAgOCBiaXQJU3RhdHVzIEZJRk8gU2hhZG93IExldmVsIFJlZyAqLwotCVNUQVRfRklGT19XTQk9IDB4MGVhYywvKiAgOCBiaXQJU3RhdHVzIEZJRk8gV2F0ZXJtYXJrIFJlZyAqLwotCVNUQVRfRklGT19JU1JfV00JPSAweDBlYWQsLyogIDggYml0CVN0YXR1cyBGSUZPIElTUiBXYXRlcm1hcmsgUmVnICovCi0KLS8qIExldmVsIGFuZCBJU1IgVGltZXIgUmVnaXN0ZXJzIChZdWtvbi0yIG9ubHkpKi8KLQlTVEFUX0xFVl9USU1FUl9JTkkJPSAweDBlYjAsLyogMzIgYml0CUxldmVsIFRpbWVyIEluaXQuIFZhbHVlIFJlZyAqLwotCVNUQVRfTEVWX1RJTUVSX0NOVAk9IDB4MGViNCwvKiAzMiBiaXQJTGV2ZWwgVGltZXIgQ291bnRlciBSZWcgKi8KLQlTVEFUX0xFVl9USU1FUl9DVFJMCT0gMHgwZWI4LC8qICA4IGJpdAlMZXZlbCBUaW1lciBDb250cm9sIFJlZyAqLwotCVNUQVRfTEVWX1RJTUVSX1RFU1QJPSAweDBlYjksLyogIDggYml0CUxldmVsIFRpbWVyIFRlc3QgUmVnICovCi0JU1RBVF9UWF9USU1FUl9JTkkJPSAweDBlYzAsLyogMzIgYml0CVR4IFRpbWVyIEluaXQuIFZhbHVlIFJlZyAqLwotCVNUQVRfVFhfVElNRVJfQ05UCT0gMHgwZWM0LC8qIDMyIGJpdAlUeCBUaW1lciBDb3VudGVyIFJlZyAqLwotCVNUQVRfVFhfVElNRVJfQ1RSTAk9IDB4MGVjOCwvKiAgOCBiaXQJVHggVGltZXIgQ29udHJvbCBSZWcgKi8KLQlTVEFUX1RYX1RJTUVSX1RFU1QJPSAweDBlYzksLyogIDggYml0CVR4IFRpbWVyIFRlc3QgUmVnICovCi0JU1RBVF9JU1JfVElNRVJfSU5JCT0gMHgwZWQwLC8qIDMyIGJpdAlJU1IgVGltZXIgSW5pdC4gVmFsdWUgUmVnICovCi0JU1RBVF9JU1JfVElNRVJfQ05UCT0gMHgwZWQ0LC8qIDMyIGJpdAlJU1IgVGltZXIgQ291bnRlciBSZWcgKi8KLQlTVEFUX0lTUl9USU1FUl9DVFJMCT0gMHgwZWQ4LC8qICA4IGJpdAlJU1IgVGltZXIgQ29udHJvbCBSZWcgKi8KLQlTVEFUX0lTUl9USU1FUl9URVNUCT0gMHgwZWQ5LC8qICA4IGJpdAlJU1IgVGltZXIgVGVzdCBSZWcgKi8KLQotCVNUX0xBU1RfSURYX01BU0sJPSAweDAwN2YsLyogTGFzdCBJbmRleCBNYXNrICovCi0JU1RfVFhSUF9JRFhfTUFTSwk9IDB4MGZmZiwvKiBUeCBSZXBvcnQgSW5kZXggTWFzayAqLwotCVNUX1RYVEhfSURYX01BU0sJPSAweDBmZmYsLyogVHggVGhyZXNob2xkIEluZGV4IE1hc2sgKi8KLQlTVF9XTV9JRFhfTUFTSwk9IDB4M2YsLyogRklGTyBXYXRlcm1hcmsgSW5kZXggTWFzayAqLwotfTsKIAogZW51bSB7CiAJTElOS0xFRF9PRkYgCSAgICAgPSAweDAxLApAQCAtOTIzLDggKzg2Myw2IEBACiAJV09MX01BVENIX0NUTAk9IDB4MGYyMiwvKiAgOCBiaXQJV09MIE1hdGNoIENvbnRyb2wgUmVnICovCiAJV09MX01BVENIX1JFUwk9IDB4MGYyMywvKiAgOCBiaXQJV09MIE1hdGNoIFJlc3VsdCBSZWcgKi8KIAlXT0xfTUFDX0FERFIJPSAweDBmMjQsLyogMzIgYml0CVdPTCBNQUMgQWRkcmVzcyAqLwotCVdPTF9QQVRUX1BNRQk9IDB4MGYyYSwvKiAgOCBiaXQJV09MIFBNRSBNYXRjaCBFbmFibGUgKFl1a29uLTIpICovCi0JV09MX1BBVFRfQVNGTQk9IDB4MGYyYiwvKiAgOCBiaXQJV09MIEFTRiBNYXRjaCBFbmFibGUgKFl1a29uLTIpICovCiAJV09MX1BBVFRfUlBUUgk9IDB4MGYyYywvKiAgOCBiaXQJV09MIFBhdHRlcm4gUmVhZCBQb2ludGVyICovCiAKIC8qIFdPTCBQYXR0ZXJuIExlbmd0aCBSZWdpc3RlcnMgKFlVS09OIG9ubHkpICovCkBAIC0xNjQxLDE1ICsxNTc5LDYgQEAKIAlQSFlfTV9GRVNDX1NFTF9DTF9BCT0gMTw8MCwgLyogU2VsZWN0IENsYXNzIEEgZHJpdmVyICgxMDBCLVRYKSAqLwogfTsKIAotLyogZm9yIFl1a29uLTIgR2lnYWJpdCBFdGhlcm5ldCBQSFkgKDg4RTExMTIgb25seSkgKi8KLS8qKioqKiAgUEhZX01BUlZfUEhZX0NUUkwgKHBhZ2UgMikJCTE2IGJpdCByL3cJTUFDIFNwZWNpZmljIEN0cmwgKioqKiovCi1lbnVtIHsKLQlQSFlfTV9NQUNfTURfTVNLCT0gNzw8NywgLyogQml0ICA5Li4gNzogTW9kZSBTZWxlY3QgTWFzayAqLwotCVBIWV9NX01BQ19NRF9BVVRPCT0gMywvKiBBdXRvIENvcHBlci8xMDAwQmFzZS1YICovCi0JUEhZX01fTUFDX01EX0NPUFBFUgk9IDUsLyogQ29wcGVyIG9ubHkgKi8KLQlQSFlfTV9NQUNfTURfMTAwMEJYCT0gNywvKiAxMDAwQmFzZS1YIG9ubHkgKi8KLX07Ci0jZGVmaW5lIFBIWV9NX01BQ19NT0RFX1NFTCh4KQkoKCh4KTw8NykgJiBQSFlfTV9NQUNfTURfTVNLKQogCiAvKioqKiogIFBIWV9NQVJWX1BIWV9DVFJMIChwYWdlIDMpCQkxNiBiaXQgci93CUxFRCBDb250cm9sIFJlZy4gKioqKiovCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQ2OTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0wLDAgKzEsMzI2MiBAQAorLyoKKyAqIE5ldyBkcml2ZXIgZm9yIE1hcnZlbGwgWXVrb24gMiBjaGlwc2V0LgorICogQmFzZWQgb24gZWFybGllciBzazk4bGluLCBhbmQgc2tnZSBkcml2ZXIuCisgKgorICogVGhpcyBkcml2ZXIgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBzdXBwb3J0IGFsbCB0aGUgZmVhdHVyZXMKKyAqIG9mIHRoZSBvcmlnaW5hbCBkcml2ZXIgc3VjaCBhcyBsaW5rIGZhaWwtb3ZlciBhbmQgbGluayBtYW5hZ2VtZW50IGJlY2F1c2UKKyAqIHRob3NlIHNob3VsZCBiZSBkb25lIGF0IGhpZ2hlciBsZXZlbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIFRPVEVTVAorICoJLSBzcGVlZCBzZXR0aW5nCisgKgktIHN1c3BlbmQvcmVzdW1lCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKKyNkZWZpbmUgU0tZMl9WTEFOX1RBR19VU0VEIDEKKyNlbmRpZgorCisjaW5jbHVkZSAic2t5Mi5oIgorCisjZGVmaW5lIERSVl9OQU1FCQkic2t5MiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIwLjExIgorI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKKworLyoKKyAqIFRoZSBZdWtvbiBJSSBjaGlwc2V0IHRha2VzIDY0IGJpdCBjb21tYW5kIGJsb2NrcyAoY2FsbGVkIGxpc3QgZWxlbWVudHMpCisgKiB0aGF0IGFyZSBvcmdhbml6ZWQgaW50byB0aHJlZSAocmVjZWl2ZSwgdHJhbnNtaXQsIHN0YXR1cykgZGlmZmVyZW50IHJpbmdzCisgKiBzaW1pbGFyIHRvIFRpZ29uMy4gQSB0cmFuc21pdCBjYW4gcmVxdWlyZSBzZXZlcmFsIGVsZW1lbnRzOworICogYSByZWNlaXZlIHJlcXVpcmVzIG9uZSAob3IgdHdvIGlmIHVzaW5nIDY0IGJpdCBkbWEpLgorICovCisKKyNkZWZpbmUgaXNfZWNfYTEoaHcpIFwKKwl1bmxpa2VseSgoaHcpLT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUMgJiYgXAorCQkgKGh3KS0+Y2hpcF9yZXYgPT0gQ0hJUF9SRVZfWVVfRUNfQTEpCisKKyNkZWZpbmUgUlhfTEVfU0laRQkgICAgCTUxMgorI2RlZmluZSBSWF9MRV9CWVRFUwkJKFJYX0xFX1NJWkUqc2l6ZW9mKHN0cnVjdCBza3kyX3J4X2xlKSkKKyNkZWZpbmUgUlhfTUFYX1BFTkRJTkcJCShSWF9MRV9TSVpFLzIgLSAyKQorI2RlZmluZSBSWF9ERUZfUEVORElORwkJUlhfTUFYX1BFTkRJTkcKKworI2RlZmluZSBUWF9SSU5HX1NJWkUJCTUxMgorI2RlZmluZSBUWF9ERUZfUEVORElORwkJKFRYX1JJTkdfU0laRSAtIDEpCisjZGVmaW5lIFRYX01JTl9QRU5ESU5HCQk2NAorI2RlZmluZSBNQVhfU0tCX1RYX0xFCQkoNCArIDIqTUFYX1NLQl9GUkFHUykKKworI2RlZmluZSBTVEFUVVNfUklOR19TSVpFCTIwNDgJLyogMiBwb3J0cyAqIChUWCArIDIqUlgpICovCisjZGVmaW5lIFNUQVRVU19MRV9CWVRFUwkJKFNUQVRVU19SSU5HX1NJWkUqc2l6ZW9mKHN0cnVjdCBza3kyX3N0YXR1c19sZSkpCisjZGVmaW5lIEVUSF9KVU1CT19NVFUJCTkwMDAKKyNkZWZpbmUgVFhfV0FUQ0hET0cJCSg1ICogSFopCisjZGVmaW5lIE5BUElfV0VJR0hUCQk2NAorI2RlZmluZSBQSFlfUkVUUklFUwkJMTAwMAorCitzdGF0aWMgY29uc3QgdTMyIGRlZmF1bHRfbXNnID0KKyAgICBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTksKKyAgICB8IE5FVElGX01TR19USU1FUiB8IE5FVElGX01TR19UWF9FUlIgfCBORVRJRl9NU0dfUlhfRVJSCisgICAgfCBORVRJRl9NU0dfSUZVUCB8IE5FVElGX01TR19JRkRPV04gfCBORVRJRl9NU0dfSU5UUjsKKworc3RhdGljIGludCBkZWJ1ZyA9IC0xOwkJLyogZGVmYXVsdHMgYWJvdmUgKi8KK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMD1ub25lLC4uLiwxNj1hbGwpIik7CisKK3N0YXRpYyBpbnQgY29weWJyZWFrIF9fcmVhZF9tb3N0bHkgPSAyNTY7Cittb2R1bGVfcGFyYW0oY29weWJyZWFrLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhjb3B5YnJlYWssICJSZWNlaXZlIGNvcHkgdGhyZXNob2xkIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBza3kyX2lkX3RhYmxlW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgMHg5MDAwKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIDB4OUUwMCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAwKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RMSU5LLCAweDRiMDEpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQwKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0MSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNDIpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQzKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0NCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNDUpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQ2KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0NykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNTApIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzUxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM1MikgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjApIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzYxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2MikgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjMpIH0sCisJeyAwIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBza3kyX2lkX3RhYmxlKTsKKworLyogQXZvaWQgY29uZGl0aW9uYWxzIGJ5IHVzaW5nIGFycmF5ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgdHhxYWRkcltdID0geyBRX1hBMSwgUV9YQTIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCByeHFhZGRyW10gPSB7IFFfUjEsIFFfUjIgfTsKKworLyogVGhpcyBkcml2ZXIgc3VwcG9ydHMgeXVrb24yIGNoaXBzZXQgb25seSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnl1a29uMl9uYW1lW10gPSB7CisJIlhMIiwJCS8qIDB4YjMgKi8KKwkiRUMgVWx0cmEiLCAJLyogMHhiNCAqLworCSJVTktOT1dOIiwJLyogMHhiNSAqLworCSJFQyIsCQkvKiAweGI2ICovCisJIkZFIiwJCS8qIDB4YjcgKi8KK307CisKKy8qIEFjY2VzcyB0byBleHRlcm5hbCBQSFkgKi8KK3N0YXRpYyBpbnQgZ21fcGh5X3dyaXRlKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwlpbnQgaTsKKworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9TTUlfREFUQSwgdmFsKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fU01JX0NUUkwsCisJCSAgICBHTV9TTUlfQ1RfUEhZX0FEKFBIWV9BRERSX01BUlYpIHwgR01fU01JX0NUX1JFR19BRChyZWcpKTsKKworCWZvciAoaSA9IDA7IGkgPCBQSFlfUkVUUklFUzsgaSsrKSB7CisJCWlmICghKGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMKSAmIEdNX1NNSV9DVF9CVVNZKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMSk7CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgd3JpdGUgdGltZW91dFxuIiwgaHctPmRldltwb3J0XS0+bmFtZSk7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgX19nbV9waHlfcmVhZChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsIHUxNiByZWcsIHUxNiAqdmFsKQoreworCWludCBpOworCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMLCBHTV9TTUlfQ1RfUEhZX0FEKFBIWV9BRERSX01BUlYpCisJCSAgICB8IEdNX1NNSV9DVF9SRUdfQUQocmVnKSB8IEdNX1NNSV9DVF9PUF9SRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgeworCQlpZiAoZ21hX3JlYWQxNihodywgcG9ydCwgR01fU01JX0NUUkwpICYgR01fU01JX0NUX1JEX1ZBTCkgeworCQkJKnZhbCA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1NNSV9EQVRBKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgdTE2IGdtX3BoeV9yZWFkKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgdTE2IHJlZykKK3sKKwl1MTYgdjsKKworCWlmIChfX2dtX3BoeV9yZWFkKGh3LCBwb3J0LCByZWcsICZ2KSAhPSAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHBoeSByZWFkIHRpbWVvdXRcbiIsIGh3LT5kZXZbcG9ydF0tPm5hbWUpOworCXJldHVybiB2OworfQorCitzdGF0aWMgaW50IHNreTJfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBza3kyX2h3ICpodywgcGNpX3Bvd2VyX3Qgc3RhdGUpCit7CisJdTE2IHBvd2VyX2NvbnRyb2w7CisJdTMyIHJlZzE7CisJaW50IHZhdXg7CisJaW50IHJldCA9IDA7CisKKwlwcl9kZWJ1Zygic2t5Ml9zZXRfcG93ZXJfc3RhdGUgJWRcbiIsIHN0YXRlKTsKKwlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBody0+cG1fY2FwICsgUENJX1BNX1BNQywgJnBvd2VyX2NvbnRyb2wpOworCXZhdXggPSAoc2t5Ml9yZWFkOChodywgQjBfQ1RTVCkgJiBZMl9WQVVYX0FWQUlMKSAmJgorCQkocG93ZXJfY29udHJvbCAmIFBDSV9QTV9DQVBfUE1FX0QzY29sZCk7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChody0+cGRldiwgaHctPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmcG93ZXJfY29udHJvbCk7CisKKwlwb3dlcl9jb250cm9sIHw9IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVM7CisJcG93ZXJfY29udHJvbCAmPSB+KFBDSV9QTV9DVFJMX1NUQVRFX01BU0spOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUENJX0QwOgorCQkvKiBzd2l0Y2ggcG93ZXIgdG8gVkNDIChXQSBmb3IgVkFVWCBwcm9ibGVtKSAqLworCQlza3kyX3dyaXRlOChodywgQjBfUE9XRVJfQ1RSTCwKKwkJCSAgICBQQ19WQVVYX0VOQSB8IFBDX1ZDQ19FTkEgfCBQQ19WQVVYX09GRiB8IFBDX1ZDQ19PTik7CisKKwkJLyogZGlzYWJsZSBDb3JlIENsb2NrIERpdmlzaW9uLCAqLworCQlza3kyX3dyaXRlMzIoaHcsIEIyX1kyX0NMS19DVFJMLCBZMl9DTEtfRElWX0RJUyk7CisKKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgJiYgaHctPmNoaXBfcmV2ID4gMSkKKwkJCS8qIGVuYWJsZSBiaXRzIGFyZSBpbnZlcnRlZCAqLworCQkJc2t5Ml93cml0ZTgoaHcsIEIyX1kyX0NMS19HQVRFLAorCQkJCSAgICBZMl9QQ0lfQ0xLX0xOSzFfRElTIHwgWTJfQ09SX0NMS19MTksxX0RJUyB8CisJCQkJICAgIFkyX0NMS19HQVRfTE5LMV9ESVMgfCBZMl9QQ0lfQ0xLX0xOSzJfRElTIHwKKwkJCQkgICAgWTJfQ09SX0NMS19MTksyX0RJUyB8IFkyX0NMS19HQVRfTE5LMl9ESVMpOworCQllbHNlCisJCQlza3kyX3dyaXRlOChodywgQjJfWTJfQ0xLX0dBVEUsIDApOworCisJCS8qIFR1cm4gb2ZmIHBoeSBwb3dlciBzYXZpbmcgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQQ0lfREVWX1JFRzEsICZyZWcxKTsKKwkJcmVnMSAmPSB+KFBDSV9ZMl9QSFkxX1BPV0QgfCBQQ0lfWTJfUEhZMl9QT1dEKTsKKworCQkvKiBsb29rcyBsaWtlIHRoaXMgWEwgaXMgYmFjayBhc3N3YXJkcyAuLiAqLworCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKSB7CisJCQlyZWcxIHw9IFBDSV9ZMl9QSFkxX0NPTUE7CisJCQlpZiAoaHctPnBvcnRzID4gMSkKKwkJCQlyZWcxIHw9IFBDSV9ZMl9QSFkyX0NPTUE7CisJCX0KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChody0+cGRldiwgUENJX0RFVl9SRUcxLCByZWcxKTsKKwkJYnJlYWs7CisKKwljYXNlIFBDSV9EM2hvdDoKKwljYXNlIFBDSV9EM2NvbGQ6CisJCS8qIFR1cm4gb24gcGh5IHBvd2VyIHNhdmluZyAqLworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaHctPnBkZXYsIFBDSV9ERVZfUkVHMSwgJnJlZzEpOworCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKQorCQkJcmVnMSAmPSB+KFBDSV9ZMl9QSFkxX1BPV0QgfCBQQ0lfWTJfUEhZMl9QT1dEKTsKKwkJZWxzZQorCQkJcmVnMSB8PSAoUENJX1kyX1BIWTFfUE9XRCB8IFBDSV9ZMl9QSFkyX1BPV0QpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQQ0lfREVWX1JFRzEsIHJlZzEpOworCisJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMICYmIGh3LT5jaGlwX3JldiA+IDEpCisJCQlza3kyX3dyaXRlOChodywgQjJfWTJfQ0xLX0dBVEUsIDApOworCQllbHNlCisJCQkvKiBlbmFibGUgYml0cyBhcmUgaW52ZXJ0ZWQgKi8KKwkJCXNreTJfd3JpdGU4KGh3LCBCMl9ZMl9DTEtfR0FURSwKKwkJCQkgICAgWTJfUENJX0NMS19MTksxX0RJUyB8IFkyX0NPUl9DTEtfTE5LMV9ESVMgfAorCQkJCSAgICBZMl9DTEtfR0FUX0xOSzFfRElTIHwgWTJfUENJX0NMS19MTksyX0RJUyB8CisJCQkJICAgIFkyX0NPUl9DTEtfTE5LMl9ESVMgfCBZMl9DTEtfR0FUX0xOSzJfRElTKTsKKworCQkvKiBzd2l0Y2ggcG93ZXIgdG8gVkFVWCAqLworCQlpZiAodmF1eCAmJiBzdGF0ZSAhPSBQQ0lfRDNjb2xkKQorCQkJc2t5Ml93cml0ZTgoaHcsIEIwX1BPV0VSX0NUUkwsCisJCQkJICAgIChQQ19WQVVYX0VOQSB8IFBDX1ZDQ19FTkEgfAorCQkJCSAgICAgUENfVkFVWF9PTiB8IFBDX1ZDQ19PRkYpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5rbm93biBwb3dlciBzdGF0ZSAlZFxuIiwgc3RhdGUpOworCQlyZXQgPSAtMTsKKwl9CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaHctPnBkZXYsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgcG93ZXJfY29udHJvbCk7CisJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNreTJfcGh5X3Jlc2V0KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKK3sKKwl1MTYgcmVnOworCisJLyogZGlzYWJsZSBhbGwgR01BQyBJUlEncyAqLworCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfTVNLKSwgMCk7CisJLyogZGlzYWJsZSBQSFkgSVJRcyAqLworCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfSU5UX01BU0ssIDApOworCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX01DX0FERFJfSDEsIDApOwkvKiBjbGVhciBNQyBoYXNoICovCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX01DX0FERFJfSDIsIDApOworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9NQ19BRERSX0gzLCAwKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fTUNfQUREUl9INCwgMCk7CisKKwlyZWcgPSBnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9SWF9DVFJMKTsKKwlyZWcgfD0gR01fUlhDUl9VQ0ZfRU5BIHwgR01fUlhDUl9NQ0ZfRU5BOworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9SWF9DVFJMLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBza3kyX3BoeV9pbml0KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoaHctPmRldltwb3J0XSk7CisJdTE2IGN0cmwsIGN0MTAwMCwgYWR2LCBwZywgbGVkY3RybCwgbGVkb3ZlcjsKKworCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmIGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fWEwpIHsKKwkJdTE2IGVjdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9DVFJMKTsKKworCQllY3RybCAmPSB+KFBIWV9NX0VDX01fRFNDX01TSyB8IFBIWV9NX0VDX1NfRFNDX01TSyB8CisJCQkgICBQSFlfTV9FQ19NQUNfU19NU0spOworCQllY3RybCB8PSBQSFlfTV9FQ19NQUNfUyhNQUNfVFhfQ0xLXzI1X01IWik7CisKKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUMpCisJCQllY3RybCB8PSBQSFlfTV9FQ19EU0NfMigyKSB8IFBIWV9NX0VDX0RPV05fU19FTkE7CisJCWVsc2UKKwkJCWVjdHJsIHw9IFBIWV9NX0VDX01fRFNDKDIpIHwgUEhZX01fRUNfU19EU0MoMyk7CisKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQ1RSTCwgZWN0cmwpOworCX0KKworCWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwpOworCWlmIChody0+Y29wcGVyKSB7CisJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0ZFKSB7CisJCQkvKiBlbmFibGUgYXV0b21hdGljIGNyb3Nzb3ZlciAqLworCQkJY3RybCB8PSBQSFlfTV9QQ19NRElfWE1PREUoUEhZX01fUENfRU5BX0FVVE8pID4+IDE7CisJCX0gZWxzZSB7CisJCQkvKiBkaXNhYmxlIGVuZXJneSBkZXRlY3QgKi8KKwkJCWN0cmwgJj0gflBIWV9NX1BDX0VOX0RFVF9NU0s7CisKKwkJCS8qIGVuYWJsZSBhdXRvbWF0aWMgY3Jvc3NvdmVyICovCisJCQljdHJsIHw9IFBIWV9NX1BDX01ESV9YTU9ERShQSFlfTV9QQ19FTkFfQVVUTyk7CisKKwkJCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCisJCQkgICAgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCkgeworCQkJCWN0cmwgJj0gflBIWV9NX1BDX0RTQ19NU0s7CisJCQkJY3RybCB8PSBQSFlfTV9QQ19EU0MoMikgfCBQSFlfTV9QQ19ET1dOX1NfRU5BOworCQkJfQorCQl9CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGN0cmwpOworCX0gZWxzZSB7CisJCS8qIHdvcmthcm91bmQgZm9yIGRldmlhdGlvbiAjNC44OCAoQ1JDIGVycm9ycykgKi8KKwkJLyogZGlzYWJsZSBBdXRvbWF0aWMgQ3Jvc3NvdmVyICovCisKKwkJY3RybCAmPSB+UEhZX01fUENfTURJWF9NU0s7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGN0cmwpOworCisJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMKSB7CisJCQkvKiBGaWJlcjogc2VsZWN0IDEwMDBCQVNFLVggb25seSBtb2RlIE1BQyBTcGVjaWZpYyBDdHJsIFJlZy4gKi8KKwkJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMik7CisJCQljdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMKTsKKwkJCWN0cmwgJj0gflBIWV9NX01BQ19NRF9NU0s7CisJCQljdHJsIHw9IFBIWV9NX01BQ19NT0RFX1NFTChQSFlfTV9NQUNfTURfMTAwMEJYKTsKKwkJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGN0cmwpOworCisJCQkvKiBzZWxlY3QgcGFnZSAxIHRvIGFjY2VzcyBGaWJlciByZWdpc3RlcnMgKi8KKwkJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMSk7CisJCX0KKwl9CisKKwljdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0NUUkwpOworCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkKKwkJY3RybCAmPSB+UEhZX0NUX0FORTsKKwllbHNlCisJCWN0cmwgfD0gUEhZX0NUX0FORTsKKworCWN0cmwgfD0gUEhZX0NUX1JFU0VUOworCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfQ1RSTCwgY3RybCk7CisKKwljdHJsID0gMDsKKwljdDEwMDAgPSAwOworCWFkdiA9IFBIWV9BTl9DU01BOworCisJaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwkJaWYgKGh3LT5jb3BwZXIpIHsKKwkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCisJCQkJY3QxMDAwIHw9IFBIWV9NXzEwMDBDX0FGRDsKKwkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCisJCQkJY3QxMDAwIHw9IFBIWV9NXzEwMDBDX0FIRDsKKwkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKKwkJCQlhZHYgfD0gUEhZX01fQU5fMTAwX0ZEOworCQkJaWYgKHNreTItPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmKQorCQkJCWFkdiB8PSBQSFlfTV9BTl8xMDBfSEQ7CisJCQlpZiAoc2t5Mi0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkKKwkJCQlhZHYgfD0gUEhZX01fQU5fMTBfRkQ7CisJCQlpZiAoc2t5Mi0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikKKwkJCQlhZHYgfD0gUEhZX01fQU5fMTBfSEQ7CisJCX0gZWxzZQkJLyogc3BlY2lhbCBkZWZpbmVzIGZvciBGSUJFUiAoODhFMTAxMVMgb25seSkgKi8KKwkJCWFkdiB8PSBQSFlfTV9BTl8xMDAwWF9BSEQgfCBQSFlfTV9BTl8xMDAwWF9BRkQ7CisKKwkJLyogU2V0IEZsb3ctY29udHJvbCBjYXBhYmlsaXRpZXMgKi8KKwkJaWYgKHNreTItPnR4X3BhdXNlICYmIHNreTItPnJ4X3BhdXNlKQorCQkJYWR2IHw9IFBIWV9BTl9QQVVTRV9DQVA7CS8qIHN5bW1ldHJpYyAqLworCQllbHNlIGlmIChza3kyLT5yeF9wYXVzZSAmJiAhc2t5Mi0+dHhfcGF1c2UpCisJCQlhZHYgfD0gUEhZX0FOX1BBVVNFX0FTWU0gfCBQSFlfQU5fUEFVU0VfQ0FQOworCQllbHNlIGlmICghc2t5Mi0+cnhfcGF1c2UgJiYgc2t5Mi0+dHhfcGF1c2UpCisJCQlhZHYgfD0gUEhZX0FOX1BBVVNFX0FTWU07CS8qIGxvY2FsICovCisKKwkJLyogUmVzdGFydCBBdXRvLW5lZ290aWF0aW9uICovCisJCWN0cmwgfD0gUEhZX0NUX0FORSB8IFBIWV9DVF9SRV9DRkc7CisJfSBlbHNlIHsKKwkJLyogZm9yY2VkIHNwZWVkL2R1cGxleCBzZXR0aW5ncyAqLworCQljdDEwMDAgPSBQSFlfTV8xMDAwQ19NU0U7CisKKwkJaWYgKHNreTItPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCWN0cmwgfD0gUEhZX0NUX0RVUF9NRDsKKworCQlzd2l0Y2ggKHNreTItPnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTAwMDoKKwkJCWN0cmwgfD0gUEhZX0NUX1NQMTAwMDsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDoKKwkJCWN0cmwgfD0gUEhZX0NUX1NQMTAwOworCQkJYnJlYWs7CisJCX0KKworCQljdHJsIHw9IFBIWV9DVF9SRVNFVDsKKwl9CisKKwlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9GRSkKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl8xMDAwVF9DVFJMLCBjdDEwMDApOworCisJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9BVU5FX0FEViwgYWR2KTsKKwlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0NUUkwsIGN0cmwpOworCisJLyogU2V0dXAgUGh5IExFRCdzICovCisJbGVkY3RybCA9IFBIWV9NX0xFRF9QVUxTX0RVUihQVUxTXzE3ME1TKTsKKwlsZWRvdmVyID0gMDsKKworCXN3aXRjaCAoaHctPmNoaXBfaWQpIHsKKwljYXNlIENISVBfSURfWVVLT05fRkU6CisJCS8qIG9uIDg4RTMwODIgdGhlc2UgYml0cyBhcmUgYXQgMTEuLjkgKHNoaWZ0ZWQgbGVmdCkgKi8KKwkJbGVkY3RybCB8PSBQSFlfTV9MRURfQkxJTktfUlQoQkxJTktfODRNUykgPDwgMTsKKworCQljdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0ZFX0xFRF9QQVIpOworCisJCS8qIGRlbGV0ZSBBQ1QgTEVEIGNvbnRyb2wgYml0cyAqLworCQljdHJsICY9IH5QSFlfTV9GRUxQX0xFRDFfTVNLOworCQkvKiBjaGFuZ2UgQUNUIExFRCBjb250cm9sIHRvIGJsaW5rIG1vZGUgKi8KKwkJY3RybCB8PSBQSFlfTV9GRUxQX0xFRDFfQ1RSTChMRURfUEFSX0NUUkxfQUNUX0JMKTsKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9GRV9MRURfUEFSLCBjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIENISVBfSURfWVVLT05fWEw6CisJCXBnID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIpOworCisJCS8qIHNlbGVjdCBwYWdlIDMgdG8gYWNjZXNzIExFRCBjb250cm9sIHJlZ2lzdGVyICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMyk7CisKKwkJLyogc2V0IExFRCBGdW5jdGlvbiBDb250cm9sIHJlZ2lzdGVyICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIChQSFlfTV9MRURDX0xPU19DVFJMKDEpIHwJLyogTElOSy9BQ1QgKi8KKwkJCQkJCQkgICBQSFlfTV9MRURDX0lOSVRfQ1RSTCg3KSB8CS8qIDEwIE1icHMgKi8KKwkJCQkJCQkgICBQSFlfTV9MRURDX1NUQTFfQ1RSTCg3KSB8CS8qIDEwMCBNYnBzICovCisJCQkJCQkJICAgUEhZX01fTEVEQ19TVEEwX0NUUkwoNykpKTsJLyogMTAwMCBNYnBzICovCisKKwkJLyogc2V0IFBvbGFyaXR5IENvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfU1RBVCwKKwkJCSAgICAgKFBIWV9NX1BPTENfTFMxX1BfTUlYKDQpIHwKKwkJCSAgICAgIFBIWV9NX1BPTENfSVMwX1BfTUlYKDQpIHwKKwkJCSAgICAgIFBIWV9NX1BPTENfTE9TX0NUUkwoMikgfAorCQkJICAgICAgUEhZX01fUE9MQ19JTklUX0NUUkwoMikgfAorCQkJICAgICAgUEhZX01fUE9MQ19TVEExX0NUUkwoMikgfAorCQkJICAgICAgUEhZX01fUE9MQ19TVEEwX0NUUkwoMikpKTsKKworCQkvKiByZXN0b3JlIHBhZ2UgcmVnaXN0ZXIgKi8KKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCBwZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogc2V0IFR4IExFRCAoTEVEX1RYKSB0byBibGluayBtb2RlIG9uIFJ4IE9SIFR4IGFjdGl2aXR5ICovCisJCWxlZGN0cmwgfD0gUEhZX01fTEVEX0JMSU5LX1JUKEJMSU5LXzg0TVMpIHwgUEhZX01fTEVEQ19UWF9DVFJMOworCQkvKiB0dXJuIG9mZiB0aGUgUnggTEVEIChMRURfUlgpICovCisJCWxlZG92ZXIgfD0gUEhZX01fTEVEX01PX1JYKE1PX0xFRF9PRkYpOworCX0KKworCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX0NUUkwsIGxlZGN0cmwpOworCisJaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFIHx8IHNreTItPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQkvKiB0dXJuIG9uIDEwMCBNYnBzIExFRCAoTEVEX0xJTksxMDApICovCisJCWxlZG92ZXIgfD0gUEhZX01fTEVEX01PXzEwMChNT19MRURfT04pOworCX0KKworCWlmIChsZWRvdmVyKQorCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9PVkVSLCBsZWRvdmVyKTsKKworCS8qIEVuYWJsZSBwaHkgaW50ZXJydXB0IG9uIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgKG9yIGxpbmsgdXApICovCisJaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfSU5UX01BU0ssIFBIWV9NX0lTX0FOX0NPTVBMKTsKKwllbHNlCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfSU5UX01BU0ssIFBIWV9NX0RFRl9NU0spOworfQorCisvKiBGb3JjZSBhIHJlbmVnb3RpYXRpb24gKi8KK3N0YXRpYyB2b2lkIHNreTJfcGh5X3JlaW5pdChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQoreworCWRvd24oJnNreTItPnBoeV9zZW1hKTsKKwlza3kyX3BoeV9pbml0KHNreTItPmh3LCBza3kyLT5wb3J0KTsKKwl1cCgmc2t5Mi0+cGh5X3NlbWEpOworfQorCitzdGF0aWMgdm9pZCBza3kyX21hY19pbml0KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoaHctPmRldltwb3J0XSk7CisJdTE2IHJlZzsKKwlpbnQgaTsKKwljb25zdCB1OCAqYWRkciA9IGh3LT5kZXZbcG9ydF0tPmRldl9hZGRyOworCisJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgR1BIWV9DVFJMKSwgR1BDX1JTVF9TRVQpOworCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIEdQSFlfQ1RSTCksIEdQQ19SU1RfQ0xSfEdQQ19FTkFfUEFVU0UpOworCisJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0NUUkwpLCBHTUNfUlNUX0NMUik7CisKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPT0gMCAmJiBwb3J0ID09IDEpIHsKKwkJLyogV0EgREVWXzQ3MiAtLSBsb29rcyBsaWtlIGNyb3NzZWQgd2lyZXMgb24gcG9ydCAyICovCisJCS8qIGNsZWFyIEdNQUMgMSBDb250cm9sIHJlc2V0ICovCisJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcoMCwgR01BQ19DVFJMKSwgR01DX1JTVF9DTFIpOworCQlkbyB7CisJCQlza3kyX3dyaXRlOChodywgU0tfUkVHKDEsIEdNQUNfQ1RSTCksIEdNQ19SU1RfU0VUKTsKKwkJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcoMSwgR01BQ19DVFJMKSwgR01DX1JTVF9DTFIpOworCQl9IHdoaWxlIChnbV9waHlfcmVhZChodywgMSwgUEhZX01BUlZfSUQwKSAhPSBQSFlfTUFSVl9JRDBfVkFMIHx8CisJCQkgZ21fcGh5X3JlYWQoaHcsIDEsIFBIWV9NQVJWX0lEMSkgIT0gUEhZX01BUlZfSUQxX1kyIHx8CisJCQkgZ21fcGh5X3JlYWQoaHcsIDEsIFBIWV9NQVJWX0lOVF9NQVNLKSAhPSAwKTsKKwl9CisKKwlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHsKKwkJcmVnID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7CisJCXJlZyB8PSBHTV9HUENSX0FVX0FMTF9ESVM7CisJCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCByZWcpOworCQlnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMKTsKKworCQlzd2l0Y2ggKHNreTItPnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTAwMDoKKwkJCXJlZyB8PSBHTV9HUENSX1NQRUVEXzEwMDA7CisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIFNQRUVEXzEwMDoKKwkJCXJlZyB8PSBHTV9HUENSX1NQRUVEXzEwMDsKKwkJfQorCisJCWlmIChza3kyLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQlyZWcgfD0gR01fR1BDUl9EVVBfRlVMTDsKKwl9IGVsc2UKKwkJcmVnID0gR01fR1BDUl9TUEVFRF8xMDAwIHwgR01fR1BDUl9TUEVFRF8xMDAgfCBHTV9HUENSX0RVUF9GVUxMOworCisJaWYgKCFza3kyLT50eF9wYXVzZSAmJiAhc2t5Mi0+cnhfcGF1c2UpIHsKKwkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09GRik7CisJCXJlZyB8PQorCQkgICAgR01fR1BDUl9GQ19UWF9ESVMgfCBHTV9HUENSX0ZDX1JYX0RJUyB8IEdNX0dQQ1JfQVVfRkNUX0RJUzsKKwl9IGVsc2UgaWYgKHNreTItPnR4X3BhdXNlICYmICFza3kyLT5yeF9wYXVzZSkgeworCQkvKiBkaXNhYmxlIFJ4IGZsb3ctY29udHJvbCAqLworCQlyZWcgfD0gR01fR1BDUl9GQ19SWF9ESVMgfCBHTV9HUENSX0FVX0ZDVF9ESVM7CisJfQorCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwsIHJlZyk7CisKKwlza3kyX3JlYWQxNihodywgU0tfUkVHKHBvcnQsIEdNQUNfSVJRX1NSQykpOworCisJZG93bigmc2t5Mi0+cGh5X3NlbWEpOworCXNreTJfcGh5X2luaXQoaHcsIHBvcnQpOworCXVwKCZza3kyLT5waHlfc2VtYSk7CisKKwkvKiBNSUIgY2xlYXIgKi8KKwlyZWcgPSBnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9QSFlfQUREUik7CisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1BIWV9BRERSLCByZWcgfCBHTV9QQVJfTUlCX0NMUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgR01fTUlCX0NOVF9TSVpFOyBpKyspCisJCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX01JQl9DTlRfQkFTRSArIDggKiBpKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fUEhZX0FERFIsIHJlZyk7CisKKwkvKiB0cmFuc21pdCBjb250cm9sICovCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1RYX0NUUkwsIFRYX0NPTF9USFIoVFhfQ09MX0RFRikpOworCisJLyogcmVjZWl2ZSBjb250cm9sIHJlZzogdW5pY2FzdCArIG11bHRpY2FzdCArIG5vIEZDUyAgKi8KKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fUlhfQ1RSTCwKKwkJICAgIEdNX1JYQ1JfVUNGX0VOQSB8IEdNX1JYQ1JfQ1JDX0RJUyB8IEdNX1JYQ1JfTUNGX0VOQSk7CisKKwkvKiB0cmFuc21pdCBmbG93IGNvbnRyb2wgKi8KKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fVFhfRkxPV19DVFJMLCAweGZmZmYpOworCisJLyogdHJhbnNtaXQgcGFyYW1ldGVyICovCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1RYX1BBUkFNLAorCQkgICAgVFhfSkFNX0xFTl9WQUwoVFhfSkFNX0xFTl9ERUYpIHwKKwkJICAgIFRYX0pBTV9JUEdfVkFMKFRYX0pBTV9JUEdfREVGKSB8CisJCSAgICBUWF9JUEdfSkFNX0RBVEEoVFhfSVBHX0pBTV9ERUYpIHwKKwkJICAgIFRYX0JBQ0tfT0ZGX0xJTShUWF9CT0ZfTElNX0RFRikpOworCisJLyogc2VyaWFsIG1vZGUgcmVnaXN0ZXIgKi8KKwlyZWcgPSBEQVRBX0JMSU5EX1ZBTChEQVRBX0JMSU5EX0RFRikgfAorCQlHTV9TTU9EX1ZMQU5fRU5BIHwgSVBHX0RBVEFfVkFMKElQR19EQVRBX0RFRik7CisKKwlpZiAoaHctPmRldltwb3J0XS0+bXR1ID4gRVRIX0RBVEFfTEVOKQorCQlyZWcgfD0gR01fU01PRF9KVU1CT19FTkE7CisKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fU0VSSUFMX01PREUsIHJlZyk7CisKKwkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIGRhdGEgKi8KKwlnbWFfc2V0X2FkZHIoaHcsIHBvcnQsIEdNX1NSQ19BRERSXzJMLCBhZGRyKTsKKworCS8qIHBoeXNpY2FsIGFkZHJlc3M6IHVzZWQgZm9yIHBhdXNlIGZyYW1lcyAqLworCWdtYV9zZXRfYWRkcihodywgcG9ydCwgR01fU1JDX0FERFJfMUwsIGFkZHIpOworCisJLyogaWdub3JlIGNvdW50ZXIgb3ZlcmZsb3dzICovCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1RYX0lSUV9NU0ssIDApOworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9SWF9JUlFfTVNLLCAwKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fVFJfSVJRX01TSywgMCk7CisKKwkvKiBDb25maWd1cmUgUnggTUFDIEZJRk8gKi8KKwlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX0NMUik7CisJc2t5Ml93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0NUUkxfVCksCisJCSAgICAgR01GX1JYX0NUUkxfREVGKTsKKworCS8qIEZsdXNoIFJ4IE1BQyBGSUZPIG9uIGFueSBmbG93IGNvbnRyb2wgb3IgZXJyb3IgKi8KKwlza3kyX3dyaXRlMTYoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfRkxfTVNLKSwgR01SX0ZTX0FOWV9FUlIpOworCisJLyogU2V0IHRocmVzaG9sZCB0byAweGEgKDY0IGJ5dGVzKQorCSAqICBBU0YgZGlzYWJsZWQgc28gbm8gbmVlZCB0byBkbyBXQSBkZXYgIzQuMzAKKwkgKi8KKwlza3kyX3dyaXRlMTYoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfRkxfVEhSKSwgUlhfR01GX0ZMX1RIUl9ERUYpOworCisJLyogQ29uZmlndXJlIFR4IE1BQyBGSUZPICovCisJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX1JTVF9DTFIpOworCXNreTJfd3JpdGUxNihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfT1BFUl9PTik7CisKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKSB7CisJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0xQX1RIUiksIDc2OC84KTsKKwkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfVVBfVEhSKSwgMTAyNC84KTsKKwkJaWYgKGh3LT5kZXZbcG9ydF0tPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQkJLyogc2V0IFR4IEdNQUMgRklGTyBBbG1vc3QgRW1wdHkgVGhyZXNob2xkICovCisJCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQUVfVEhSKSwgMHgxODApOworCQkJLyogRGlzYWJsZSBTdG9yZSAmIEZvcndhcmQgbW9kZSBmb3IgVFggKi8KKwkJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9TVEZXX0RJUyk7CisJCX0KKwl9CisKK30KKworc3RhdGljIHZvaWQgc2t5Ml9yYW1zZXQoc3RydWN0IHNreTJfaHcgKmh3LCB1MTYgcSwgdTMyIHN0YXJ0LCBzaXplX3QgbGVuKQoreworCXUzMiBlbmQ7CisKKwlzdGFydCAvPSA4OworCWxlbiAvPSA4OworCWVuZCA9IHN0YXJ0ICsgbGVuIC0gMTsKKworCXNreTJfd3JpdGU4KGh3LCBSQl9BRERSKHEsIFJCX0NUUkwpLCBSQl9SU1RfQ0xSKTsKKwlza3kyX3dyaXRlMzIoaHcsIFJCX0FERFIocSwgUkJfU1RBUlQpLCBzdGFydCk7CisJc2t5Ml93cml0ZTMyKGh3LCBSQl9BRERSKHEsIFJCX0VORCksIGVuZCk7CisJc2t5Ml93cml0ZTMyKGh3LCBSQl9BRERSKHEsIFJCX1dQKSwgc3RhcnQpOworCXNreTJfd3JpdGUzMihodywgUkJfQUREUihxLCBSQl9SUCksIHN0YXJ0KTsKKworCWlmIChxID09IFFfUjEgfHwgcSA9PSBRX1IyKSB7CisJCXUzMiByeHVwLCByeGxvOworCisJCXJ4bG8gPSBsZW4vMjsKKwkJcnh1cCA9IHJ4bG8gKyBsZW4vNDsKKworCQkvKiBTZXQgdGhyZXNob2xkcyBvbiByZWNlaXZlIHF1ZXVlJ3MgKi8KKwkJc2t5Ml93cml0ZTMyKGh3LCBSQl9BRERSKHEsIFJCX1JYX1VUUFApLCByeHVwKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBSQl9BRERSKHEsIFJCX1JYX0xUUFApLCByeGxvKTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgc3RvcmUgJiBmb3J3YXJkIG9uIFR4IHF1ZXVlJ3MgYmVjYXVzZQorCQkgKiBUeCBGSUZPIGlzIG9ubHkgMUsgb24gWXVrb24KKwkJICovCisJCXNreTJfd3JpdGU4KGh3LCBSQl9BRERSKHEsIFJCX0NUUkwpLCBSQl9FTkFfU1RGV0QpOworCX0KKworCXNreTJfd3JpdGU4KGh3LCBSQl9BRERSKHEsIFJCX0NUUkwpLCBSQl9FTkFfT1BfTUQpOworCXNreTJfcmVhZDgoaHcsIFJCX0FERFIocSwgUkJfQ1RSTCkpOworfQorCisvKiBTZXR1cCBCdXMgTWVtb3J5IEludGVyZmFjZSAqLworc3RhdGljIHZvaWQgc2t5Ml9xc2V0KHN0cnVjdCBza3kyX2h3ICpodywgdTE2IHEpCit7CisJc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIocSwgUV9DU1IpLCBCTVVfQ0xSX1JFU0VUKTsKKwlza3kyX3dyaXRlMzIoaHcsIFFfQUREUihxLCBRX0NTUiksIEJNVV9PUEVSX0lOSVQpOworCXNreTJfd3JpdGUzMihodywgUV9BRERSKHEsIFFfQ1NSKSwgQk1VX0ZJRk9fT1BfT04pOworCXNreTJfd3JpdGUzMihodywgUV9BRERSKHEsIFFfV00pLCAgQk1VX1dNX0RFRkFVTFQpOworfQorCisvKiBTZXR1cCBwcmVmZXRjaCB1bml0IHJlZ2lzdGVycy4gVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4KKyAqIGhhcmR3YXJlIGFuZCBkcml2ZXIgbGlzdCBlbGVtZW50cworICovCitzdGF0aWMgdm9pZCBza3kyX3ByZWZldGNoX2luaXQoc3RydWN0IHNreTJfaHcgKmh3LCB1MzIgcWFkZHIsCisJCQkJICAgICAgdTY0IGFkZHIsIHUzMiBsYXN0KQoreworCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9DVFJMKSwgUFJFRl9VTklUX1JTVF9TRVQpOworCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9DVFJMKSwgUFJFRl9VTklUX1JTVF9DTFIpOworCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9BRERSX0hJKSwgYWRkciA+PiAzMik7CisJc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUihxYWRkciwgUFJFRl9VTklUX0FERFJfTE8pLCAodTMyKSBhZGRyKTsKKwlza3kyX3dyaXRlMTYoaHcsIFkyX1FBRERSKHFhZGRyLCBQUkVGX1VOSVRfTEFTVF9JRFgpLCBsYXN0KTsKKwlza3kyX3dyaXRlMzIoaHcsIFkyX1FBRERSKHFhZGRyLCBQUkVGX1VOSVRfQ1RSTCksIFBSRUZfVU5JVF9PUF9PTik7CisKKwlza3kyX3JlYWQzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9DVFJMKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNreTJfdHhfbGUgKmdldF90eF9sZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQoreworCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IHNreTItPnR4X2xlICsgc2t5Mi0+dHhfcHJvZDsKKworCXNreTItPnR4X3Byb2QgPSAoc2t5Mi0+dHhfcHJvZCArIDEpICUgVFhfUklOR19TSVpFOworCXJldHVybiBsZTsKK30KKworLyoKKyAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGNvZGUgdGFrZW4gZnJvbSBTeXNLb25uZWN0IHNrOThsaW4gZHJpdmVyCisgKiB0byBkZWFsIHdpdGggY2hpcCBidWcgb24gWXVrb24gRUMgcmV2IDAgaW4gdGhlIHdyYXBhcm91bmQgY2FzZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNreTJfcHV0X2lkeChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHEsCisJCQkJdTE2IGlkeCwgdTE2ICpsYXN0LCB1MTYgc2l6ZSkKK3sKKwlpZiAoaXNfZWNfYTEoaHcpICYmIGlkeCA8ICpsYXN0KSB7CisJCXUxNiBod2dldCA9IHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfR0VUX0lEWCkpOworCisJCWlmIChod2dldCA9PSAwKSB7CisJCQkvKiBTdGFydCBwcmVmZXRjaGluZyBhZ2FpbiAqLworCQkJc2t5Ml93cml0ZTgoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9GSUZPX1dNKSwgMHhlMCk7CisJCQlnb3RvIHNldG5ldzsKKwkJfQorCisJCWlmIChod2dldCA9PSBzaXplIC0gMSkgeworCQkJLyogc2V0IHdhdGVybWFyayB0byBvbmUgbGlzdCBlbGVtZW50ICovCisJCQlza3kyX3dyaXRlOChodywgWTJfUUFERFIocSwgUFJFRl9VTklUX0ZJRk9fV00pLCA4KTsKKworCQkJLyogc2V0IHB1dCBpbmRleCB0byBmaXJzdCBsaXN0IGVsZW1lbnQgKi8KKwkJCXNreTJfd3JpdGUxNihodywgWTJfUUFERFIocSwgUFJFRl9VTklUX1BVVF9JRFgpLCAwKTsKKwkJfSBlbHNlCQkvKiBoYXZlIGhhcmR3YXJlIGdvIHRvIGVuZCBvZiBsaXN0ICovCisJCQlza3kyX3dyaXRlMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9QVVRfSURYKSwKKwkJCQkgICAgIHNpemUgLSAxKTsKKwl9IGVsc2Ugeworc2V0bmV3OgorCQlza3kyX3dyaXRlMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9QVVRfSURYKSwgaWR4KTsKKwl9CisJKmxhc3QgPSBpZHg7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2t5Ml9yeF9sZSAqc2t5Ml9uZXh0X3J4KHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJc3RydWN0IHNreTJfcnhfbGUgKmxlID0gc2t5Mi0+cnhfbGUgKyBza3kyLT5yeF9wdXQ7CisJc2t5Mi0+cnhfcHV0ID0gKHNreTItPnJ4X3B1dCArIDEpICUgUlhfTEVfU0laRTsKKwlyZXR1cm4gbGU7Cit9CisKKy8qIFJldHVybiBoaWdoIHBhcnQgb2YgRE1BIGFkZHJlc3MgKGNvdWxkIGJlIDMyIG9yIDY0IGJpdCkgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGhpZ2gzMihkbWFfYWRkcl90IGEpCit7CisJcmV0dXJuIChhID4+IDE2KSA+PiAxNjsKK30KKworLyogQnVpbGQgZGVzY3JpcHRpb24gdG8gaGFyZHdhcmUgYWJvdXQgYnVmZmVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml9yeF9hZGQoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwgZG1hX2FkZHJfdCBtYXApCit7CisJc3RydWN0IHNreTJfcnhfbGUgKmxlOworCXUzMiBoaSA9IGhpZ2gzMihtYXApOworCXUxNiBsZW4gPSBza3kyLT5yeF9idWZzaXplOworCisJaWYgKHNreTItPnJ4X2FkZHI2NCAhPSBoaSkgeworCQlsZSA9IHNreTJfbmV4dF9yeChza3kyKTsKKwkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMihoaSk7CisJCWxlLT5jdHJsID0gMDsKKwkJbGUtPm9wY29kZSA9IE9QX0FERFI2NCB8IEhXX09XTkVSOworCQlza3kyLT5yeF9hZGRyNjQgPSBoaWdoMzIobWFwICsgbGVuKTsKKwl9CisKKwlsZSA9IHNreTJfbmV4dF9yeChza3kyKTsKKwlsZS0+YWRkciA9IGNwdV90b19sZTMyKCh1MzIpIG1hcCk7CisJbGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlbik7CisJbGUtPmN0cmwgPSAwOworCWxlLT5vcGNvZGUgPSBPUF9QQUNLRVQgfCBIV19PV05FUjsKK30KKworCisvKiBUZWxsIGNoaXAgd2hlcmUgdG8gc3RhcnQgcmVjZWl2ZSBjaGVja3N1bS4KKyAqIEFjdHVhbGx5IGhhcyB0d28gY2hlY2tzdW1zLCBidXQgc2V0IGJvdGggc2FtZSB0byBhdm9pZCBwb3NzaWJsZSBieXRlCisgKiBvcmRlciBwcm9ibGVtcy4KKyAqLworc3RhdGljIHZvaWQgcnhfc2V0X2NoZWNrc3VtKHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJc3RydWN0IHNreTJfcnhfbGUgKmxlOworCisJbGUgPSBza3kyX25leHRfcngoc2t5Mik7CisJbGUtPmFkZHIgPSAoRVRIX0hMRU4gPDwgMTYpIHwgRVRIX0hMRU47CisJbGUtPmN0cmwgPSAwOworCWxlLT5vcGNvZGUgPSBPUF9UQ1BTVEFSVCB8IEhXX09XTkVSOworCisJc2t5Ml93cml0ZTMyKHNreTItPmh3LAorCQkgICAgIFFfQUREUihyeHFhZGRyW3NreTItPnBvcnRdLCBRX0NTUiksCisJCSAgICAgc2t5Mi0+cnhfY3N1bSA/IEJNVV9FTkFfUlhfQ0hLU1VNIDogQk1VX0RJU19SWF9DSEtTVU0pOworCit9CisKKy8qCisgKiBUaGUgUlggU3RvcCBjb21tYW5kIHdpbGwgbm90IHdvcmsgZm9yIFl1a29uLTIgaWYgdGhlIEJNVSBkb2VzIG5vdAorICogcmVhY2ggdGhlIGVuZCBvZiBwYWNrZXQgYW5kIHNpbmNlIHdlIGNhbid0IG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUKKyAqIGluY29taW5nIGRhdGEsIHdlIG11c3QgcmVzZXQgdGhlIEJNVSB3aGlsZSBpdCBpcyBub3QgZG9pbmcgYSBETUEKKyAqIHRyYW5zZmVyLiBTaW5jZSBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBSWCBwYXRoIGlzIHN0aWxsIGFjdGl2ZSwKKyAqIHRoZSBSWCBSQU0gYnVmZmVyIHdpbGwgYmUgc3RvcHBlZCBmaXJzdCwgc28gYW55IHBvc3NpYmxlIGluY29taW5nCisgKiBkYXRhIHdpbGwgbm90IHRyaWdnZXIgYSBETUEuIEFmdGVyIHRoZSBSQU0gYnVmZmVyIGlzIHN0b3BwZWQsIHRoZQorICogQk1VIGlzIHBvbGxlZCB1bnRpbCBhbnkgRE1BIGluIHByb2dyZXNzIGlzIGVuZGVkIGFuZCBvbmx5IHRoZW4gaXQKKyAqIHdpbGwgYmUgcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIHNreTJfcnhfc3RvcChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQoreworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXVuc2lnbmVkIHJ4cSA9IHJ4cWFkZHJbc2t5Mi0+cG9ydF07CisJaW50IGk7CisKKwkvKiBkaXNhYmxlIHRoZSBSQU0gQnVmZmVyIHJlY2VpdmUgcXVldWUgKi8KKwlza3kyX3dyaXRlOChodywgUkJfQUREUihyeHEsIFJCX0NUUkwpLCBSQl9ESVNfT1BfTUQpOworCisJZm9yIChpID0gMDsgaSA8IDB4ZmZmZjsgaSsrKQorCQlpZiAoc2t5Ml9yZWFkOChodywgUkJfQUREUihyeHEsIFFfUlNMKSkKKwkJICAgID09IHNreTJfcmVhZDgoaHcsIFJCX0FERFIocnhxLCBRX1JMKSkpCisJCQlnb3RvIHN0b3BwZWQ7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHJlY2VpdmVyIHN0b3AgZmFpbGVkXG4iLAorCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUpOworc3RvcHBlZDoKKwlza3kyX3dyaXRlMzIoaHcsIFFfQUREUihyeHEsIFFfQ1NSKSwgQk1VX1JTVF9TRVQgfCBCTVVfRklGT19SU1QpOworCisJLyogcmVzZXQgdGhlIFJ4IHByZWZldGNoIHVuaXQgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFkyX1FBRERSKHJ4cSwgUFJFRl9VTklUX0NUUkwpLCBQUkVGX1VOSVRfUlNUX1NFVCk7Cit9CisKKy8qIENsZWFuIG91dCByZWNlaXZlIGJ1ZmZlciBhcmVhLCBhc3N1bWVzIHJlY2VpdmVyIGhhcmR3YXJlIHN0b3BwZWQgKi8KK3N0YXRpYyB2b2lkIHNreTJfcnhfY2xlYW4oc3RydWN0IHNreTJfcG9ydCAqc2t5MikKK3sKKwl1bnNpZ25lZCBpOworCisJbWVtc2V0KHNreTItPnJ4X2xlLCAwLCBSWF9MRV9CWVRFUyk7CisJZm9yIChpID0gMDsgaSA8IHNreTItPnJ4X3BlbmRpbmc7IGkrKykgeworCQlzdHJ1Y3QgcmluZ19pbmZvICpyZSA9IHNreTItPnJ4X3JpbmcgKyBpOworCisJCWlmIChyZS0+c2tiKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHNreTItPmh3LT5wZGV2LAorCQkJCQkgcmUtPm1hcGFkZHIsIHNreTItPnJ4X2J1ZnNpemUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJa2ZyZWVfc2tiKHJlLT5za2IpOworCQkJcmUtPnNrYiA9IE5VTEw7CisJCX0KKwl9Cit9CisKKy8qIEJhc2ljIE1JSSBzdXBwb3J0ICovCitzdGF0aWMgaW50IHNreTJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlmcik7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJaW50IGVyciA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRU5PREVWOwkvKiBQaHkgc3RpbGwgaW4gcmVzZXQgKi8KKworCXN3aXRjaChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCQlkYXRhLT5waHlfaWQgPSBQSFlfQUREUl9NQVJWOworCisJCS8qIGZhbGx0aHJ1ICovCisJY2FzZSBTSU9DR01JSVJFRzogeworCQl1MTYgdmFsID0gMDsKKworCQlkb3duKCZza3kyLT5waHlfc2VtYSk7CisJCWVyciA9IF9fZ21fcGh5X3JlYWQoaHcsIHNreTItPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLCAmdmFsKTsKKwkJdXAoJnNreTItPnBoeV9zZW1hKTsKKworCQlkYXRhLT52YWxfb3V0ID0gdmFsOworCQlicmVhazsKKwl9CisKKwljYXNlIFNJT0NTTUlJUkVHOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCWRvd24oJnNreTItPnBoeV9zZW1hKTsKKwkJZXJyID0gZ21fcGh5X3dyaXRlKGh3LCBza3kyLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKKwkJCQkgICBkYXRhLT52YWxfaW4pOworCQl1cCgmc2t5Mi0+cGh5X3NlbWEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAorc3RhdGljIHZvaWQgc2t5Ml92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJdTE2IHBvcnQgPSBza3kyLT5wb3J0OworCisJc3Bpbl9sb2NrKCZza3kyLT50eF9sb2NrKTsKKworCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBSWF9WTEFOX1NUUklQX09OKTsKKwlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgVFhfVkxBTl9UQUdfT04pOworCXNreTItPnZsZ3JwID0gZ3JwOworCisJc3Bpbl91bmxvY2soJnNreTItPnR4X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBza3kyX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXUxNiBwb3J0ID0gc2t5Mi0+cG9ydDsKKworCXNwaW5fbG9jaygmc2t5Mi0+dHhfbG9jayk7CisKKwlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwgUlhfVkxBTl9TVFJJUF9PRkYpOworCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9WTEFOX1RBR19PRkYpOworCWlmIChza3kyLT52bGdycCkKKwkJc2t5Mi0+dmxncnAtPnZsYW5fZGV2aWNlc1t2aWRdID0gTlVMTDsKKworCXNwaW5fdW5sb2NrKCZza3kyLT50eF9sb2NrKTsKK30KKyNlbmRpZgorCisvKgorICogQWxsb2NhdGUgYW5kIHNldHVwIHJlY2VpdmVyIGJ1ZmZlciBwb29sLgorICogSW4gY2FzZSBvZiA2NCBiaXQgZG1hLCB0aGVyZSBhcmUgMlggYXMgbWFueSBsaXN0IGVsZW1lbnRzCisgKiBhdmFpbGFibGUgYXMgcmluZyBlbnRyaWVzCisgKiBhbmQgbmVlZCB0byByZXNlcnZlIG9uZSBsaXN0IGVsZW1lbnQgc28gd2UgZG9uJ3Qgd3JhcCBhcm91bmQuCisgKgorICogSXQgYXBwZWFycyB0aGUgaGFyZHdhcmUgaGFzIGEgYnVnIGluIHRoZSBGSUZPIGxvZ2ljIHRoYXQKKyAqIGNhdXNlIGl0IHRvIGhhbmcgaWYgdGhlIEZJRk8gZ2V0cyBvdmVycnVuIGFuZCB0aGUgcmVjZWl2ZSBidWZmZXIKKyAqIGlzIG5vdCBhbGlnbmVkLiAgVGhpcyBtZWFucyB3ZSBjYW4ndCB1c2Ugc2tiX3Jlc2VydmUgdG8gYWxpZ24KKyAqIHRoZSBJUCBoZWFkZXIuCisgKi8KK3N0YXRpYyBpbnQgc2t5Ml9yeF9zdGFydChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQoreworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXVuc2lnbmVkIHJ4cSA9IHJ4cWFkZHJbc2t5Mi0+cG9ydF07CisJaW50IGk7CisKKwlza3kyLT5yeF9wdXQgPSBza3kyLT5yeF9uZXh0ID0gMDsKKwlza3kyX3FzZXQoaHcsIHJ4cSk7CisJc2t5Ml9wcmVmZXRjaF9pbml0KGh3LCByeHEsIHNreTItPnJ4X2xlX21hcCwgUlhfTEVfU0laRSAtIDEpOworCisJcnhfc2V0X2NoZWNrc3VtKHNreTIpOworCWZvciAoaSA9IDA7IGkgPCBza3kyLT5yeF9wZW5kaW5nOyBpKyspIHsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmUgPSBza3kyLT5yeF9yaW5nICsgaTsKKworCQlyZS0+c2tiID0gZGV2X2FsbG9jX3NrYihza3kyLT5yeF9idWZzaXplKTsKKwkJaWYgKCFyZS0+c2tiKQorCQkJZ290byBub21lbTsKKworCQlyZS0+bWFwYWRkciA9IHBjaV9tYXBfc2luZ2xlKGh3LT5wZGV2LCByZS0+c2tiLT5kYXRhLAorCQkJCQkgICAgIHNreTItPnJ4X2J1ZnNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXNreTJfcnhfYWRkKHNreTIsIHJlLT5tYXBhZGRyKTsKKwl9CisKKwkvKiBUZWxsIGNoaXAgYWJvdXQgYXZhaWxhYmxlIGJ1ZmZlcnMgKi8KKwlza3kyX3dyaXRlMTYoaHcsIFkyX1FBRERSKHJ4cSwgUFJFRl9VTklUX1BVVF9JRFgpLCBza3kyLT5yeF9wdXQpOworCXNreTItPnJ4X2xhc3RfcHV0ID0gc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHJ4cSwgUFJFRl9VTklUX1BVVF9JRFgpKTsKKwlyZXR1cm4gMDsKK25vbWVtOgorCXNreTJfcnhfY2xlYW4oc2t5Mik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qIEJyaW5nIHVwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLworc3RhdGljIGludCBza3kyX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7CisJdTMyIHJhbXNpemUsIHJ4c3BhY2U7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAobmV0aWZfbXNnX2lmdXAoc2t5MikpCisJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZW5hYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOworCisJLyogbXVzdCBiZSBwb3dlciBvZiAyICovCisJc2t5Mi0+dHhfbGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChody0+cGRldiwKKwkJCQkJICAgVFhfUklOR19TSVpFICoKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBza3kyX3R4X2xlKSwKKwkJCQkJICAgJnNreTItPnR4X2xlX21hcCk7CisJaWYgKCFza3kyLT50eF9sZSkKKwkJZ290byBlcnJfb3V0OworCisJc2t5Mi0+dHhfcmluZyA9IGtjYWxsb2MoVFhfUklOR19TSVpFLCBzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFza3kyLT50eF9yaW5nKQorCQlnb3RvIGVycl9vdXQ7CisJc2t5Mi0+dHhfcHJvZCA9IHNreTItPnR4X2NvbnMgPSAwOworCisJc2t5Mi0+cnhfbGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChody0+cGRldiwgUlhfTEVfQllURVMsCisJCQkJCSAgICZza3kyLT5yeF9sZV9tYXApOworCWlmICghc2t5Mi0+cnhfbGUpCisJCWdvdG8gZXJyX291dDsKKwltZW1zZXQoc2t5Mi0+cnhfbGUsIDAsIFJYX0xFX0JZVEVTKTsKKworCXNreTItPnJ4X3JpbmcgPSBrY2FsbG9jKHNreTItPnJ4X3BlbmRpbmcsIHNpemVvZihzdHJ1Y3QgcmluZ19pbmZvKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXNreTItPnJ4X3JpbmcpCisJCWdvdG8gZXJyX291dDsKKworCXNreTJfbWFjX2luaXQoaHcsIHBvcnQpOworCisJLyogQ29uZmlndXJlIFJBTSBidWZmZXJzICovCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRkUgfHwKKwkgICAgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUMgJiYgaHctPmNoaXBfcmV2ID09IDIpKQorCQlyYW1zaXplID0gNDA5NjsKKwllbHNlIHsKKwkJdTggZTAgPSBza3kyX3JlYWQ4KGh3LCBCMl9FXzApOworCQlyYW1zaXplID0gKGUwID09IDApID8gKDEyOCAqIDEwMjQpIDogKGUwICogNDA5Nik7CisJfQorCisJLyogMi8zIGZvciBSeCAqLworCXJ4c3BhY2UgPSAoMiAqIHJhbXNpemUpIC8gMzsKKwlza3kyX3JhbXNldChodywgcnhxYWRkcltwb3J0XSwgMCwgcnhzcGFjZSk7CisJc2t5Ml9yYW1zZXQoaHcsIHR4cWFkZHJbcG9ydF0sIHJ4c3BhY2UsIHJhbXNpemUgLSByeHNwYWNlKTsKKworCS8qIE1ha2Ugc3VyZSBTeW5jUSBpcyBkaXNhYmxlZCAqLworCXNreTJfd3JpdGU4KGh3LCBSQl9BRERSKHBvcnQgPT0gMCA/IFFfWFMxIDogUV9YUzIsIFJCX0NUUkwpLAorCQkgICAgUkJfUlNUX1NFVCk7CisKKwlza3kyX3FzZXQoaHcsIHR4cWFkZHJbcG9ydF0pOworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpCisJCXNreTJfd3JpdGUxNihodywgUV9BRERSKHR4cWFkZHJbcG9ydF0sIFFfQUwpLCAweDFhMCk7CisKKworCXNreTJfcHJlZmV0Y2hfaW5pdChodywgdHhxYWRkcltwb3J0XSwgc2t5Mi0+dHhfbGVfbWFwLAorCQkJICAgVFhfUklOR19TSVpFIC0gMSk7CisKKwllcnIgPSBza3kyX3J4X3N0YXJ0KHNreTIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gcGh5L21hYyBmb3IgcG9ydCAqLworCWh3LT5pbnRyX21hc2sgfD0gKHBvcnQgPT0gMCkgPyBZMl9JU19QT1JUXzEgOiBZMl9JU19QT1JUXzI7CisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlpZiAoc2t5Mi0+cnhfbGUpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChody0+cGRldiwgUlhfTEVfQllURVMsCisJCQkJICAgIHNreTItPnJ4X2xlLCBza3kyLT5yeF9sZV9tYXApOworCQlza3kyLT5yeF9sZSA9IE5VTEw7CisJfQorCWlmIChza3kyLT50eF9sZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGh3LT5wZGV2LAorCQkJCSAgICBUWF9SSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IHNreTJfdHhfbGUpLAorCQkJCSAgICBza3kyLT50eF9sZSwgc2t5Mi0+dHhfbGVfbWFwKTsKKwkJc2t5Mi0+dHhfbGUgPSBOVUxMOworCX0KKwlrZnJlZShza3kyLT50eF9yaW5nKTsKKwlrZnJlZShza3kyLT5yeF9yaW5nKTsKKworCXNreTItPnR4X3JpbmcgPSBOVUxMOworCXNreTItPnJ4X3JpbmcgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKKy8qIE1vZHVsYXIgc3VidHJhY3Rpb24gaW4gcmluZyAqLworc3RhdGljIGlubGluZSBpbnQgdHhfZGlzdCh1bnNpZ25lZCB0YWlsLCB1bnNpZ25lZCBoZWFkKQoreworCXJldHVybiAoaGVhZCAtIHRhaWwpICUgVFhfUklOR19TSVpFOworfQorCisvKiBOdW1iZXIgb2YgbGlzdCBlbGVtZW50cyBhdmFpbGFibGUgZm9yIG5leHQgdHggKi8KK3N0YXRpYyBpbmxpbmUgaW50IHR4X2F2YWlsKGNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJcmV0dXJuIHNreTItPnR4X3BlbmRpbmcgLSB0eF9kaXN0KHNreTItPnR4X2NvbnMsIHNreTItPnR4X3Byb2QpOworfQorCisvKiBFc3RpbWF0ZSBvZiBudW1iZXIgb2YgdHJhbnNtaXQgbGlzdCBlbGVtZW50cyByZXF1aXJlZCAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eF9sZV9yZXEoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1bnNpZ25lZCBjb3VudDsKKworCWNvdW50ID0gc2l6ZW9mKGRtYV9hZGRyX3QpIC8gc2l6ZW9mKHUzMik7CisJY291bnQgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAqIGNvdW50OworCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUpCisJCSsrY291bnQ7CisKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpCisJCSsrY291bnQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBQdXQgb25lIHBhY2tldCBpbiByaW5nIGZvciB0cmFuc21pdC4KKyAqIEEgc2luZ2xlIHBhY2tldCBjYW4gZ2VuZXJhdGUgbXVsdGlwbGUgbGlzdCBlbGVtZW50cywgYW5kCisgKiB0aGUgbnVtYmVyIG9mIHJpbmcgZWxlbWVudHMgd2lsbCBwcm9iYWJseSBiZSBsZXNzIHRoYW4gdGhlIG51bWJlcgorICogb2YgbGlzdCBlbGVtZW50cyB1c2VkLgorICoKKyAqIE5vIEJIIGRpc2FibGluZyBmb3IgdHhfbG9jayBoZXJlIChsaWtlIHRnMykKKyAqLworc3RhdGljIGludCBza3kyX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKwlzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBOVUxMOworCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlOworCXVuc2lnbmVkIGksIGxlbjsKKwlkbWFfYWRkcl90IG1hcHBpbmc7CisJdTMyIGFkZHI2NDsKKwl1MTYgbXNzOworCXU4IGN0cmw7CisKKwlpZiAoIXNwaW5fdHJ5bG9jaygmc2t5Mi0+dHhfbG9jaykpCisJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOworCisJaWYgKHVubGlrZWx5KHR4X2F2YWlsKHNreTIpIDwgdHhfbGVfcmVxKHNrYikpKSB7CisJCS8qIFRoZXJlIGlzIGEga25vd24gYnV0IGhhcm1sZXNzIHJhY2Ugd2l0aCBsb2NrbGVzcyB0eAorCQkgKiBhbmQgbmV0aWZfc3RvcF9xdWV1ZS4KKwkJICovCisJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQl9CisJCXNwaW5fdW5sb2NrKCZza3kyLT50eF9sb2NrKTsKKworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9xdWV1ZWQoc2t5MikpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1ZXVlZCwgc2xvdCAldSwgbGVuICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBza3kyLT50eF9wcm9kLCBza2ItPmxlbik7CisKKwlsZW4gPSBza2JfaGVhZGxlbihza2IpOworCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShody0+cGRldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCWFkZHI2NCA9IGhpZ2gzMihtYXBwaW5nKTsKKworCXJlID0gc2t5Mi0+dHhfcmluZyArIHNreTItPnR4X3Byb2Q7CisKKwkvKiBTZW5kIGhpZ2ggYml0cyBpZiBjaGFuZ2VkIG9yIGNyb3NzZXMgYm91bmRhcnkgKi8KKwlpZiAoYWRkcjY0ICE9IHNreTItPnR4X2FkZHI2NCB8fCBoaWdoMzIobWFwcGluZyArIGxlbikgIT0gc2t5Mi0+dHhfYWRkcjY0KSB7CisJCWxlID0gZ2V0X3R4X2xlKHNreTIpOworCQlsZS0+dHguYWRkciA9IGNwdV90b19sZTMyKGFkZHI2NCk7CisJCWxlLT5jdHJsID0gMDsKKwkJbGUtPm9wY29kZSA9IE9QX0FERFI2NCB8IEhXX09XTkVSOworCQlza3kyLT50eF9hZGRyNjQgPSBoaWdoMzIobWFwcGluZyArIGxlbik7CisJfQorCisJLyogQ2hlY2sgZm9yIFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCAqLworCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemU7CisJaWYgKG1zcyAhPSAwKSB7CisJCS8qIGp1c3QgZHJvcCB0aGUgcGFja2V0IGlmIG5vbi1saW5lYXIgZXhwYW5zaW9uIGZhaWxzICovCisJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpICYmCisJCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQltc3MgKz0gKChza2ItPmgudGgtPmRvZmYgLSA1KSAqIDQpOwkvKiBUQ1Agb3B0aW9ucyAqLworCQltc3MgKz0gKHNrYi0+bmguaXBoLT5paGwgKiA0KSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwkJbXNzICs9IEVUSF9ITEVOOworCX0KKworCWlmIChtc3MgIT0gc2t5Mi0+dHhfbGFzdF9tc3MpIHsKKwkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7CisJCWxlLT50eC50c28uc2l6ZSA9IGNwdV90b19sZTE2KG1zcyk7CisJCWxlLT50eC50c28ucnN2ZCA9IDA7CisJCWxlLT5vcGNvZGUgPSBPUF9MUkdMRU4gfCBIV19PV05FUjsKKwkJbGUtPmN0cmwgPSAwOworCQlza3kyLT50eF9sYXN0X21zcyA9IG1zczsKKwl9CisKKwljdHJsID0gMDsKKyNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKKwkvKiBBZGQgVkxBTiB0YWcsIGNhbiBwaWdneWJhY2sgb24gTFJHTEVOIG9yIEFERFI2NCAqLworCWlmIChza3kyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJaWYgKCFsZSkgeworCQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7CisJCQlsZS0+dHguYWRkciA9IDA7CisJCQlsZS0+b3Bjb2RlID0gT1BfVkxBTnxIV19PV05FUjsKKwkJCWxlLT5jdHJsID0gMDsKKwkJfSBlbHNlCisJCQlsZS0+b3Bjb2RlIHw9IE9QX1ZMQU47CisJCWxlLT5sZW5ndGggPSBjcHVfdG9fYmUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCWN0cmwgfD0gSU5TX1ZMQU47CisJfQorI2VuZGlmCisKKwkvKiBIYW5kbGUgVENQIGNoZWNrc3VtIG9mZmxvYWQgKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKKwkJdTE2IGhkciA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGE7CisJCXUxNiBvZmZzZXQgPSBoZHIgKyBza2ItPmNzdW07CisKKwkJY3RybCA9IENBTFNVTSB8IFdSX1NVTSB8IElOSVRfU1VNIHwgTE9DS19TVU07CisJCWlmIChza2ItPm5oLmlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApCisJCQljdHJsIHw9IFVEUFRDUDsKKworCQlsZSA9IGdldF90eF9sZShza3kyKTsKKwkJbGUtPnR4LmNzdW0uc3RhcnQgPSBjcHVfdG9fbGUxNihoZHIpOworCQlsZS0+dHguY3N1bS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOworCQlsZS0+bGVuZ3RoID0gMDsJLyogaW5pdGlhbCBjaGVja3N1bSB2YWx1ZSAqLworCQlsZS0+Y3RybCA9IDE7CS8qIG9uZSBwYWNrZXQgKi8KKwkJbGUtPm9wY29kZSA9IE9QX1RDUExJU1cgfCBIV19PV05FUjsKKwl9CisKKwlsZSA9IGdldF90eF9sZShza3kyKTsKKwlsZS0+dHguYWRkciA9IGNwdV90b19sZTMyKCh1MzIpIG1hcHBpbmcpOworCWxlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOworCWxlLT5jdHJsID0gY3RybDsKKwlsZS0+b3Bjb2RlID0gbXNzID8gKE9QX0xBUkdFU0VORCB8IEhXX09XTkVSKSA6IChPUF9QQUNLRVQgfCBIV19PV05FUik7CisKKwkvKiBSZWNvcmQgdGhlIHRyYW5zbWl0IG1hcHBpbmcgaW5mbyAqLworCXJlLT5za2IgPSBza2I7CisJcGNpX3VubWFwX2FkZHJfc2V0KHJlLCBtYXBhZGRyLCBtYXBwaW5nKTsKKworCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKKwkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpmcmU7CisKKwkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZShody0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlhZGRyNjQgPSAobWFwcGluZyA+PiAxNikgPj4gMTY7CisJCWlmIChhZGRyNjQgIT0gc2t5Mi0+dHhfYWRkcjY0KSB7CisJCQlsZSA9IGdldF90eF9sZShza3kyKTsKKwkJCWxlLT50eC5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcjY0KTsKKwkJCWxlLT5jdHJsID0gMDsKKwkJCWxlLT5vcGNvZGUgPSBPUF9BRERSNjQgfCBIV19PV05FUjsKKwkJCXNreTItPnR4X2FkZHI2NCA9IGFkZHI2NDsKKwkJfQorCisJCWxlID0gZ2V0X3R4X2xlKHNreTIpOworCQlsZS0+dHguYWRkciA9IGNwdV90b19sZTMyKCh1MzIpIG1hcHBpbmcpOworCQlsZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7CisJCWxlLT5jdHJsID0gY3RybDsKKwkJbGUtPm9wY29kZSA9IE9QX0JVRkZFUiB8IEhXX09XTkVSOworCisJCWZyZSA9IHNreTItPnR4X3JpbmcKKwkJICAgICsgKChyZSAtIHNreTItPnR4X3JpbmcpICsgaSArIDEpICUgVFhfUklOR19TSVpFOworCQlwY2lfdW5tYXBfYWRkcl9zZXQoZnJlLCBtYXBhZGRyLCBtYXBwaW5nKTsKKwl9CisKKwlyZS0+aWR4ID0gc2t5Mi0+dHhfcHJvZDsKKwlsZS0+Y3RybCB8PSBFT1A7CisKKwlza3kyX3B1dF9pZHgoaHcsIHR4cWFkZHJbc2t5Mi0+cG9ydF0sIHNreTItPnR4X3Byb2QsCisJCSAgICAgJnNreTItPnR4X2xhc3RfcHV0LCBUWF9SSU5HX1NJWkUpOworCisJaWYgKHR4X2F2YWlsKHNreTIpIDw9IE1BWF9TS0JfVFhfTEUpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworb3V0X3VubG9jazoKKwltbWlvd2IoKTsKKwlzcGluX3VubG9jaygmc2t5Mi0+dHhfbG9jayk7CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisvKgorICogRnJlZSByaW5nIGVsZW1lbnRzIGZyb20gc3RhcnRpbmcgYXQgdHhfY29ucyB1bnRpbCAiZG9uZSIKKyAqCisgKiBOQjogdGhlIGhhcmR3YXJlIHdpbGwgdGVsbCB1cyBhYm91dCBwYXJ0aWFsIGNvbXBsZXRpb24gb2YgbXVsdGktcGFydAorICogICAgIGJ1ZmZlcnM7IHRoZXNlIGFyZSBkZWZlcnJlZCB1bnRpbCBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZCBza3kyX3R4X2NvbXBsZXRlKHN0cnVjdCBza3kyX3BvcnQgKnNreTIsIHUxNiBkb25lKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza3kyLT5uZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBza3kyLT5ody0+cGRldjsKKwl1MTYgbnh0LCBwdXQ7CisJdW5zaWduZWQgaTsKKworCUJVR19PTihkb25lID49IFRYX1JJTkdfU0laRSk7CisKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X2RvbmUoc2t5MikpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUsIHVwIHRvICV1XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBkb25lKTsKKworCWZvciAocHV0ID0gc2t5Mi0+dHhfY29uczsgcHV0ICE9IGRvbmU7IHB1dCA9IG54dCkgeworCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpyZSA9IHNreTItPnR4X3JpbmcgKyBwdXQ7CisJCXN0cnVjdCBza19idWZmICpza2IgPSByZS0+c2tiOworCisgIAkJbnh0ID0gcmUtPmlkeDsKKwkJQlVHX09OKG54dCA+PSBUWF9SSU5HX1NJWkUpOworCQlwcmVmZXRjaChza3kyLT50eF9yaW5nICsgbnh0KTsKKworCQkvKiBDaGVjayBmb3IgcGFydGlhbCBzdGF0dXMgKi8KKwkJaWYgKHR4X2Rpc3QocHV0LCBkb25lKSA8IHR4X2Rpc3QocHV0LCBueHQpKQorCQkJYnJlYWs7CisKKwkJc2tiID0gcmUtPnNrYjsKKwkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCisJCQkJIHNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKKwkJCXN0cnVjdCB0eF9yaW5nX2luZm8gKmZyZTsKKwkJCWZyZSA9IHNreTItPnR4X3JpbmcgKyAocHV0ICsgaSArIDEpICUgVFhfUklOR19TSVpFOworCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIoZnJlLCBtYXBhZGRyKSwKKyAgCQkJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUsCisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl9CisKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9CisKKwlzcGluX2xvY2soJnNreTItPnR4X2xvY2spOworCXNreTItPnR4X2NvbnMgPSBwdXQ7CisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJiB0eF9hdmFpbChza3kyKSA+IE1BWF9TS0JfVFhfTEUpCisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwlzcGluX3VubG9jaygmc2t5Mi0+dHhfbG9jayk7Cit9CisKKy8qIENsZWFudXAgYWxsIHVudHJhbnNtaXR0ZWQgYnVmZmVycywgYXNzdW1lIHRyYW5zbWl0dGVyIG5vdCBydW5uaW5nICovCitzdGF0aWMgdm9pZCBza3kyX3R4X2NsZWFuKHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJc2t5Ml90eF9jb21wbGV0ZShza3kyLCBza3kyLT50eF9wcm9kKTsKK30KKworLyogTmV0d29yayBzaHV0ZG93biAqLworc3RhdGljIGludCBza3kyX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKwl1bnNpZ25lZCBwb3J0ID0gc2t5Mi0+cG9ydDsKKwl1MTYgY3RybDsKKworCS8qIE5ldmVyIHJlYWxseSBnb3Qgc3RhcnRlZCEgKi8KKwlpZiAoIXNreTItPnR4X2xlKQorCQlyZXR1cm4gMDsKKworCWlmIChuZXRpZl9tc2dfaWZkb3duKHNreTIpKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGRpc2FibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CisKKwkvKiBTdG9wIG1vcmUgcGFja2V0cyBmcm9tIGJlaW5nIHF1ZXVlZCAqLworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIERpc2FibGUgcG9ydCBJUlEgKi8KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWh3LT5pbnRyX21hc2sgJj0gfigoc2t5Mi0+cG9ydCA9PSAwKSA/IFkyX0lTX0lSUV9QSFkxIDogWTJfSVNfSVJRX1BIWTIpOworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXNreTJfcGh5X3Jlc2V0KGh3LCBwb3J0KTsKKworCS8qIFN0b3AgdHJhbnNtaXR0ZXIgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHFhZGRyW3BvcnRdLCBRX0NTUiksIEJNVV9TVE9QKTsKKwlza3kyX3JlYWQzMihodywgUV9BRERSKHR4cWFkZHJbcG9ydF0sIFFfQ1NSKSk7CisKKwlza3kyX3dyaXRlMzIoaHcsIFJCX0FERFIodHhxYWRkcltwb3J0XSwgUkJfQ1RSTCksCisJCSAgICAgUkJfUlNUX1NFVCB8IFJCX0RJU19PUF9NRCk7CisKKwljdHJsID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7CisJY3RybCAmPSB+KEdNX0dQQ1JfVFhfRU5BIHwgR01fR1BDUl9SWF9FTkEpOworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCBjdHJsKTsKKworCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR1BIWV9DVFJMKSwgR1BDX1JTVF9TRVQpOworCisJLyogV29ya2Fyb3VuZCBzaGFyZWQgR01BQyByZXNldCAqLworCWlmICghKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgJiYgaHctPmNoaXBfcmV2ID09IDAKKwkgICAgICAmJiBwb3J0ID09IDAgJiYgaHctPmRldlsxXSAmJiBuZXRpZl9ydW5uaW5nKGh3LT5kZXZbMV0pKSkKKwkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0NUUkwpLCBHTUNfUlNUX1NFVCk7CisKKwkvKiBEaXNhYmxlIEZvcmNlIFN5bmMgYml0IGFuZCBFbmFibGUgQWxsb2MgYml0ICovCisJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWEFfQ1RSTCksCisJCSAgICBUWEFfRElTX0ZTWU5DIHwgVFhBX0RJU19BTExPQyB8IFRYQV9TVE9QX1JDKTsKKworCS8qIFN0b3AgSW50ZXJ2YWwgVGltZXIgYW5kIExpbWl0IENvdW50ZXIgb2YgVHggQXJiaXRlciAqLworCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYQV9JVElfSU5JKSwgMEwpOworCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYQV9MSU1fSU5JKSwgMEwpOworCisJLyogUmVzZXQgdGhlIFBDSSBGSUZPIG9mIHRoZSBhc3luYyBUeCBxdWV1ZSAqLworCXNreTJfd3JpdGUzMihodywgUV9BRERSKHR4cWFkZHJbcG9ydF0sIFFfQ1NSKSwKKwkJICAgICBCTVVfUlNUX1NFVCB8IEJNVV9GSUZPX1JTVCk7CisKKwkvKiBSZXNldCB0aGUgVHggcHJlZmV0Y2ggdW5pdHMgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFkyX1FBRERSKHR4cWFkZHJbcG9ydF0sIFBSRUZfVU5JVF9DVFJMKSwKKwkJICAgICBQUkVGX1VOSVRfUlNUX1NFVCk7CisKKwlza3kyX3dyaXRlMzIoaHcsIFJCX0FERFIodHhxYWRkcltwb3J0XSwgUkJfQ1RSTCksIFJCX1JTVF9TRVQpOworCisJc2t5Ml9yeF9zdG9wKHNreTIpOworCisJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwgR01GX1JTVF9TRVQpOworCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIEdNRl9SU1RfU0VUKTsKKworCS8qIHR1cm4gb2ZmIExFRCdzICovCisJc2t5Ml93cml0ZTE2KGh3LCBCMF9ZMkxFRCwgTEVEX1NUQVRfT0ZGKTsKKworCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKKworCXNreTJfdHhfY2xlYW4oc2t5Mik7CisJc2t5Ml9yeF9jbGVhbihza3kyKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHctPnBkZXYsIFJYX0xFX0JZVEVTLAorCQkJICAgIHNreTItPnJ4X2xlLCBza3kyLT5yeF9sZV9tYXApOworCWtmcmVlKHNreTItPnJ4X3JpbmcpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChody0+cGRldiwKKwkJCSAgICBUWF9SSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IHNreTJfdHhfbGUpLAorCQkJICAgIHNreTItPnR4X2xlLCBza3kyLT50eF9sZV9tYXApOworCWtmcmVlKHNreTItPnR4X3JpbmcpOworCisJc2t5Mi0+dHhfbGUgPSBOVUxMOworCXNreTItPnJ4X2xlID0gTlVMTDsKKworCXNreTItPnJ4X3JpbmcgPSBOVUxMOworCXNreTItPnR4X3JpbmcgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MTYgc2t5Ml9waHlfc3BlZWQoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3LCB1MTYgYXV4KQoreworCWlmICghaHctPmNvcHBlcikKKwkJcmV0dXJuIFNQRUVEXzEwMDA7CisKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRSkKKwkJcmV0dXJuIChhdXggJiBQSFlfTV9QU19TUEVFRF8xMDApID8gU1BFRURfMTAwIDogU1BFRURfMTA7CisKKwlzd2l0Y2ggKGF1eCAmIFBIWV9NX1BTX1NQRUVEX01TSykgeworCWNhc2UgUEhZX01fUFNfU1BFRURfMTAwMDoKKwkJcmV0dXJuIFNQRUVEXzEwMDA7CisJY2FzZSBQSFlfTV9QU19TUEVFRF8xMDA6CisJCXJldHVybiBTUEVFRF8xMDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFNQRUVEXzEwOworCX0KK30KKworc3RhdGljIHZvaWQgc2t5Ml9saW5rX3VwKHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7CisJdTE2IHJlZzsKKworCS8qIEVuYWJsZSBUcmFuc21pdCBGSUZPIFVuZGVycnVuICovCisJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0lSUV9NU0spLCBHTUFDX0RFRl9NU0spOworCisJcmVnID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7CisJaWYgKHNreTItPmR1cGxleCA9PSBEVVBMRVhfRlVMTCB8fCBza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQorCQlyZWcgfD0gR01fR1BDUl9EVVBfRlVMTDsKKworCS8qIGVuYWJsZSBSeC9UeCAqLworCXJlZyB8PSBHTV9HUENSX1JYX0VOQSB8IEdNX0dQQ1JfVFhfRU5BOworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCByZWcpOworCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOworCisJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgUEhZX01fREVGX01TSyk7CisKKwluZXRpZl9jYXJyaWVyX29uKHNreTItPm5ldGRldik7CisJbmV0aWZfd2FrZV9xdWV1ZShza3kyLT5uZXRkZXYpOworCisJLyogVHVybiBvbiBsaW5rIExFRCAqLworCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgTE5LX0xFRF9SRUcpLAorCQkgICAgTElOS0xFRF9PTiB8IExJTktMRURfQkxJTktfT0ZGIHwgTElOS0xFRF9MSU5LU1lOQ19PRkYpOworCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwpIHsKKwkJdTE2IHBnID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIpOworCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMyk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIFBIWV9NX0xFRENfTE9TX0NUUkwoMSkgfAkvKiBMSU5LL0FDVCAqLworCQkJICAgICBQSFlfTV9MRURDX0lOSVRfQ1RSTChza3kyLT5zcGVlZCA9PQorCQkJCQkJICBTUEVFRF8xMCA/IDcgOiAwKSB8CisJCQkgICAgIFBIWV9NX0xFRENfU1RBMV9DVFJMKHNreTItPnNwZWVkID09CisJCQkJCQkgIFNQRUVEXzEwMCA/IDcgOiAwKSB8CisJCQkgICAgIFBIWV9NX0xFRENfU1RBMF9DVFJMKHNreTItPnNwZWVkID09CisJCQkJCQkgIFNQRUVEXzEwMDAgPyA3IDogMCkpOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIHBnKTsKKwl9CisKKwlpZiAobmV0aWZfbXNnX2xpbmsoc2t5MikpCisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCSAgICAgICAiJXM6IExpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LCBmbG93IGNvbnRyb2wgJXNcbiIsCisJCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUsIHNreTItPnNwZWVkLAorCQkgICAgICAgc2t5Mi0+ZHVwbGV4ID09IERVUExFWF9GVUxMID8gImZ1bGwiIDogImhhbGYiLAorCQkgICAgICAgKHNreTItPnR4X3BhdXNlICYmIHNreTItPnJ4X3BhdXNlKSA/ICJib3RoIiA6CisJCSAgICAgICBza3kyLT50eF9wYXVzZSA/ICJ0eCIgOiBza3kyLT5yeF9wYXVzZSA/ICJyeCIgOiAibm9uZSIpOworfQorCitzdGF0aWMgdm9pZCBza3kyX2xpbmtfZG93bihzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQoreworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OworCXUxNiByZWc7CisKKwlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0lOVF9NQVNLLCAwKTsKKworCXJlZyA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOworCXJlZyAmPSB+KEdNX0dQQ1JfUlhfRU5BIHwgR01fR1BDUl9UWF9FTkEpOworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCByZWcpOworCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOwkvKiBQQ0kgcG9zdCAqLworCisJaWYgKHNreTItPnJ4X3BhdXNlICYmICFza3kyLT50eF9wYXVzZSkgeworCQkvKiByZXN0b3JlIEFzeW1tZXRyaWMgUGF1c2UgYml0ICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfQVVORV9BRFYsCisJCQkgICAgIGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9BVU5FX0FEVikKKwkJCSAgICAgfCBQSFlfTV9BTl9BU1ApOworCX0KKworCW5ldGlmX2NhcnJpZXJfb2ZmKHNreTItPm5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShza3kyLT5uZXRkZXYpOworCisJLyogVHVybiBvbiBsaW5rIExFRCAqLworCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgTE5LX0xFRF9SRUcpLCBMSU5LTEVEX09GRik7CisKKwlpZiAobmV0aWZfbXNnX2xpbmsoc2t5MikpCisJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyBkb3duLlxuIiwgc2t5Mi0+bmV0ZGV2LT5uYW1lKTsKKwlza3kyX3BoeV9pbml0KGh3LCBwb3J0KTsKK30KKworc3RhdGljIGludCBza3kyX2F1dG9uZWdfZG9uZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCB1MTYgYXV4KQoreworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OworCXUxNiBscGE7CisKKwlscGEgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfQVVORV9MUCk7CisKKwlpZiAobHBhICYgUEhZX01fQU5fUkYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHJlbW90ZSBmYXVsdCIsIHNreTItPm5ldGRldi0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9GRSAmJgorCSAgICBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfMTAwMFRfU1RBVCkgJiBQSFlfQl8xMDAwU19NU0YpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IG1hc3Rlci9zbGF2ZSBmYXVsdCIsCisJCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCEoYXV4ICYgUEhZX01fUFNfU1BEVVBfUkVTKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogc3BlZWQvZHVwbGV4IG1pc21hdGNoIiwKKwkJICAgICAgIHNreTItPm5ldGRldi0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlza3kyLT5kdXBsZXggPSAoYXV4ICYgUEhZX01fUFNfRlVMTF9EVVApID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKworCXNreTItPnNwZWVkID0gc2t5Ml9waHlfc3BlZWQoaHcsIGF1eCk7CisKKwkvKiBQYXVzZSBiaXRzIGFyZSBvZmZzZXQgKDkuLjgpICovCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwpCisJCWF1eCA+Pj0gNjsKKworCXNreTItPnJ4X3BhdXNlID0gKGF1eCAmIFBIWV9NX1BTX1JYX1BfRU4pICE9IDA7CisJc2t5Mi0+dHhfcGF1c2UgPSAoYXV4ICYgUEhZX01fUFNfVFhfUF9FTikgIT0gMDsKKworCWlmICgoc2t5Mi0+dHhfcGF1c2UgfHwgc2t5Mi0+cnhfcGF1c2UpCisJICAgICYmICEoc2t5Mi0+c3BlZWQgPCBTUEVFRF8xMDAwICYmIHNreTItPmR1cGxleCA9PSBEVVBMRVhfSEFMRikpCisJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09OKTsKKwllbHNlCisJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVycnVwdCBmcm9tIFBIWSBhcmUgaGFuZGxlZCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0CisgKiBiZWNhdXNlIGFjY2Vzc2luZyBwaHkgcmVnaXN0ZXJzIHJlcXVpcmVzIHNwaW4gd2FpdCB3aGljaCBtaWdodAorICogY2F1c2UgZXhjZXNzIGludGVycnVwdCBsYXRlbmN5LgorICovCitzdGF0aWMgdm9pZCBza3kyX3BoeV90YXNrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gYXJnOworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXUxNiBpc3RhdHVzLCBwaHlzdGF0OworCisJZG93bigmc2t5Mi0+cGh5X3NlbWEpOworCWlzdGF0dXMgPSBnbV9waHlfcmVhZChodywgc2t5Mi0+cG9ydCwgUEhZX01BUlZfSU5UX1NUQVQpOworCXBoeXN0YXQgPSBnbV9waHlfcmVhZChodywgc2t5Mi0+cG9ydCwgUEhZX01BUlZfUEhZX1NUQVQpOworCisJaWYgKG5ldGlmX21zZ19pbnRyKHNreTIpKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXggMHgleFxuIiwKKwkJICAgICAgIHNreTItPm5ldGRldi0+bmFtZSwgaXN0YXR1cywgcGh5c3RhdCk7CisKKwlpZiAoaXN0YXR1cyAmIFBIWV9NX0lTX0FOX0NPTVBMKSB7CisJCWlmIChza3kyX2F1dG9uZWdfZG9uZShza3kyLCBwaHlzdGF0KSA9PSAwKQorCQkJc2t5Ml9saW5rX3VwKHNreTIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaXN0YXR1cyAmIFBIWV9NX0lTX0xTUF9DSEFOR0UpCisJCXNreTItPnNwZWVkID0gc2t5Ml9waHlfc3BlZWQoaHcsIHBoeXN0YXQpOworCisJaWYgKGlzdGF0dXMgJiBQSFlfTV9JU19EVVBfQ0hBTkdFKQorCQlza3kyLT5kdXBsZXggPQorCQkgICAgKHBoeXN0YXQgJiBQSFlfTV9QU19GVUxMX0RVUCkgPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCisJaWYgKGlzdGF0dXMgJiBQSFlfTV9JU19MU1RfQ0hBTkdFKSB7CisJCWlmIChwaHlzdGF0ICYgUEhZX01fUFNfTElOS19VUCkKKwkJCXNreTJfbGlua191cChza3kyKTsKKwkJZWxzZQorCQkJc2t5Ml9saW5rX2Rvd24oc2t5Mik7CisJfQorb3V0OgorCXVwKCZza3kyLT5waHlfc2VtYSk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWh3LT5pbnRyX21hc2sgfD0gKHNreTItPnBvcnQgPT0gMCkgPyBZMl9JU19JUlFfUEhZMSA6IFkyX0lTX0lSUV9QSFkyOworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBza3kyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKwl1bnNpZ25lZCB0eHEgPSB0eHFhZGRyW3NreTItPnBvcnRdOworCisJaWYgKG5ldGlmX21zZ190aW1lcihza3kyKSkKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHR4IHRpbWVvdXRcbiIsIGRldi0+bmFtZSk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHEsIFFfQ1NSKSwgQk1VX1NUT1ApOworCXNreTJfcmVhZDMyKGh3LCBRX0FERFIodHhxLCBRX0NTUikpOworCisJc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUih0eHEsIFBSRUZfVU5JVF9DVFJMKSwgUFJFRl9VTklUX1JTVF9TRVQpOworCisJc2t5Ml90eF9jbGVhbihza3kyKTsKKworCXNreTJfcXNldChodywgdHhxKTsKKwlza3kyX3ByZWZldGNoX2luaXQoaHcsIHR4cSwgc2t5Mi0+dHhfbGVfbWFwLCBUWF9SSU5HX1NJWkUgLSAxKTsKKworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKK30KKworCisjZGVmaW5lIHJvdW5kdXAoeCwgeSkgICAoKCgoeCkrKCh5KS0xKSkvKHkpKSooeSkpCisvKiBXYW50IHJlY2VpdmUgYnVmZmVyIHNpemUgdG8gYmUgbXVsdGlwbGUgb2YgNjQgYml0cywgYW5kIGluY2wgcm9vbSBmb3IgdmxhbiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBza3kyX2J1Zl9zaXplKGludCBtdHUpCit7CisJcmV0dXJuIHJvdW5kdXAobXR1ICsgRVRIX0hMRU4gKyA0LCA4KTsKK30KKworc3RhdGljIGludCBza3kyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJaW50IGVycjsKKwl1MTYgY3RsLCBtb2RlOworCisJaWYgKG5ld19tdHUgPCBFVEhfWkxFTiB8fCBuZXdfbXR1ID4gRVRIX0pVTUJPX01UVSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VICYmIG5ld19tdHUgPiBFVEhfREFUQV9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZGV2LT5tdHUgPSBuZXdfbXR1OworCQlyZXR1cm4gMDsKKwl9CisKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOworCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluZXRpZl9wb2xsX2Rpc2FibGUoaHctPmRldlswXSk7CisKKwljdGwgPSBnbWFfcmVhZDE2KGh3LCBza3kyLT5wb3J0LCBHTV9HUF9DVFJMKTsKKwlnbWFfd3JpdGUxNihodywgc2t5Mi0+cG9ydCwgR01fR1BfQ1RSTCwgY3RsICYgfkdNX0dQQ1JfUlhfRU5BKTsKKwlza3kyX3J4X3N0b3Aoc2t5Mik7CisJc2t5Ml9yeF9jbGVhbihza3kyKTsKKworCWRldi0+bXR1ID0gbmV3X210dTsKKwlza3kyLT5yeF9idWZzaXplID0gc2t5Ml9idWZfc2l6ZShuZXdfbXR1KTsKKwltb2RlID0gREFUQV9CTElORF9WQUwoREFUQV9CTElORF9ERUYpIHwKKwkJR01fU01PRF9WTEFOX0VOQSB8IElQR19EQVRBX1ZBTChJUEdfREFUQV9ERUYpOworCisJaWYgKGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKQorCQltb2RlIHw9IEdNX1NNT0RfSlVNQk9fRU5BOworCisJZ21hX3dyaXRlMTYoaHcsIHNreTItPnBvcnQsIEdNX1NFUklBTF9NT0RFLCBtb2RlKTsKKworCXNreTJfd3JpdGU4KGh3LCBSQl9BRERSKHJ4cWFkZHJbc2t5Mi0+cG9ydF0sIFJCX0NUUkwpLCBSQl9FTkFfT1BfTUQpOworCisJZXJyID0gc2t5Ml9yeF9zdGFydChza3kyKTsKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOworCisJaWYgKGVycikKKwkJZGV2X2Nsb3NlKGRldik7CisJZWxzZSB7CisJCWdtYV93cml0ZTE2KGh3LCBza3kyLT5wb3J0LCBHTV9HUF9DVFJMLCBjdGwpOworCisJCW5ldGlmX3BvbGxfZW5hYmxlKGh3LT5kZXZbMF0pOworCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlY2VpdmUgb25lIHBhY2tldC4KKyAqIEZvciBzbWFsbCBwYWNrZXRzIG9yIGVycm9ycywganVzdCByZXVzZSBleGlzdGluZyBza2IuCisgKiBGb3IgbGFyZ2VyIHBhY2tldHMsIGdldCBuZXcgYnVmZmVyLgorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNreTJfcmVjZWl2ZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLAorCQkJCSAgICB1MTYgbGVuZ3RoLCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCByaW5nX2luZm8gKnJlID0gc2t5Mi0+cnhfcmluZyArIHNreTItPnJ4X25leHQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX3J4X3N0YXR1cyhza3kyKSkpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJ4IHNsb3QgJXUgc3RhdHVzIDB4JXggbGVuICVkXG4iLAorCQkgICAgICAgc2t5Mi0+bmV0ZGV2LT5uYW1lLCBza3kyLT5yeF9uZXh0LCBzdGF0dXMsIGxlbmd0aCk7CisKKwlza3kyLT5yeF9uZXh0ID0gKHNreTItPnJ4X25leHQgKyAxKSAlIHNreTItPnJ4X3BlbmRpbmc7CisJcHJlZmV0Y2goc2t5Mi0+cnhfcmluZyArIHNreTItPnJ4X25leHQpOworCisJaWYgKHN0YXR1cyAmIEdNUl9GU19BTllfRVJSKQorCQlnb3RvIGVycm9yOworCisJaWYgKCEoc3RhdHVzICYgR01SX0ZTX1JYX09LKSkKKwkJZ290byByZXN1Ym1pdDsKKworCWlmICgoc3RhdHVzID4+IDE2KSAhPSBsZW5ndGggfHwgbGVuZ3RoID4gc2t5Mi0+cnhfYnVmc2l6ZSkKKwkJZ290byBvdmVyc2l6ZTsKKworCWlmIChsZW5ndGggPCBjb3B5YnJlYWspIHsKKwkJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIDIsIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYikKKwkJCWdvdG8gcmVzdWJtaXQ7CisKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHNreTItPmh3LT5wZGV2LCByZS0+bWFwYWRkciwKKwkJCQkJICAgIGxlbmd0aCwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJbWVtY3B5KHNrYi0+ZGF0YSwgcmUtPnNrYi0+ZGF0YSwgbGVuZ3RoKTsKKwkJc2tiLT5pcF9zdW1tZWQgPSByZS0+c2tiLT5pcF9zdW1tZWQ7CisJCXNrYi0+Y3N1bSA9IHJlLT5za2ItPmNzdW07CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShza3kyLT5ody0+cGRldiwgcmUtPm1hcGFkZHIsCisJCQkJCSAgICAgICBsZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHNrX2J1ZmYgKm5za2I7CisKKwkJbnNrYiA9IGRldl9hbGxvY19za2Ioc2t5Mi0+cnhfYnVmc2l6ZSk7CisJCWlmICghbnNrYikKKwkJCWdvdG8gcmVzdWJtaXQ7CisKKwkJc2tiID0gcmUtPnNrYjsKKwkJcmUtPnNrYiA9IG5za2I7CisJCXBjaV91bm1hcF9zaW5nbGUoc2t5Mi0+aHctPnBkZXYsIHJlLT5tYXBhZGRyLAorCQkJCSBza3kyLT5yeF9idWZzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlwcmVmZXRjaChza2ItPmRhdGEpOworCisJCXJlLT5tYXBhZGRyID0gcGNpX21hcF9zaW5nbGUoc2t5Mi0+aHctPnBkZXYsIG5za2ItPmRhdGEsCisJCQkJCSAgICAgc2t5Mi0+cnhfYnVmc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9CisKKwlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKK3Jlc3VibWl0OgorCXJlLT5za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2t5Ml9yeF9hZGQoc2t5MiwgcmUtPm1hcGFkZHIpOworCisJLyogVGVsbCByZWNlaXZlciBhYm91dCBuZXcgYnVmZmVycy4gKi8KKwlza3kyX3B1dF9pZHgoc2t5Mi0+aHcsIHJ4cWFkZHJbc2t5Mi0+cG9ydF0sIHNreTItPnJ4X3B1dCwKKwkJICAgICAmc2t5Mi0+cnhfbGFzdF9wdXQsIFJYX0xFX1NJWkUpOworCisJcmV0dXJuIHNrYjsKKworb3ZlcnNpemU6CisJKytza3kyLT5uZXRfc3RhdHMucnhfb3Zlcl9lcnJvcnM7CisJZ290byByZXN1Ym1pdDsKKworZXJyb3I6CisJKytza3kyLT5uZXRfc3RhdHMucnhfZXJyb3JzOworCisJaWYgKG5ldGlmX21zZ19yeF9lcnIoc2t5MikpCisJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogcnggZXJyb3IsIHN0YXR1cyAweCV4IGxlbmd0aCAlZFxuIiwKKwkJICAgICAgIHNreTItPm5ldGRldi0+bmFtZSwgc3RhdHVzLCBsZW5ndGgpOworCisJaWYgKHN0YXR1cyAmIChHTVJfRlNfTE9OR19FUlIgfCBHTVJfRlNfVU5fU0laRSkpCisJCXNreTItPm5ldF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJaWYgKHN0YXR1cyAmIEdNUl9GU19GUkFHTUVOVCkKKwkJc2t5Mi0+bmV0X3N0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCWlmIChzdGF0dXMgJiBHTVJfRlNfQ1JDX0VSUikKKwkJc2t5Mi0+bmV0X3N0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwlpZiAoc3RhdHVzICYgR01SX0ZTX1JYX0ZGX09WKQorCQlza3kyLT5uZXRfc3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKworCWdvdG8gcmVzdWJtaXQ7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgdHJhbnNtaXQgY29tcGxldGUKKyAqLworI2RlZmluZSBUWF9OT19TVEFUVVMJMHhmZmZmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3R4X2NoZWNrKHN0cnVjdCBza3kyX2h3ICpodywgaW50IHBvcnQsIHUxNiBsYXN0KQoreworCWlmIChsYXN0ICE9IFRYX05PX1NUQVRVUykgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltwb3J0XTsKKwkJaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCQkJc2t5Ml90eF9jb21wbGV0ZShza3kyLCBsYXN0KTsKKwkJfQorCX0KK30KKworLyoKKyAqIEJvdGggcG9ydHMgc2hhcmUgdGhlIHNhbWUgc3RhdHVzIGludGVycnVwdCwgdGhlcmVmb3JlIHRoZXJlIGlzIG9ubHkKKyAqIG9uZSBwb2xsIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBpbnQgc2t5Ml9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYwLCBpbnQgKmJ1ZGdldCkKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSAoKHN0cnVjdCBza3kyX3BvcnQgKikgbmV0ZGV2X3ByaXYoZGV2MCkpLT5odzsKKwl1bnNpZ25lZCBpbnQgdG9fZG8gPSBtaW4oZGV2MC0+cXVvdGEsICpidWRnZXQpOworCXVuc2lnbmVkIGludCB3b3JrX2RvbmUgPSAwOworCXUxNiBod2lkeDsKKwl1MTYgdHhfZG9uZVsyXSA9IHsgVFhfTk9fU1RBVFVTLCBUWF9OT19TVEFUVVMgfTsKKworCWh3aWR4ID0gc2t5Ml9yZWFkMTYoaHcsIFNUQVRfUFVUX0lEWCk7CisJQlVHX09OKGh3aWR4ID49IFNUQVRVU19SSU5HX1NJWkUpOworCXJtYigpOworCisJd2hpbGUgKGh3aWR4ICE9IGh3LT5zdF9pZHgpIHsKKwkJc3RydWN0IHNreTJfc3RhdHVzX2xlICpsZSAgPSBody0+c3RfbGUgKyBody0+c3RfaWR4OworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQl1MzIgc3RhdHVzOworCQl1MTYgbGVuZ3RoOworCQl1OCBvcDsKKworCQlsZSA9IGh3LT5zdF9sZSArIGh3LT5zdF9pZHg7CisJCWh3LT5zdF9pZHggPSAoaHctPnN0X2lkeCArIDEpICUgU1RBVFVTX1JJTkdfU0laRTsKKwkJcHJlZmV0Y2goaHctPnN0X2xlICsgaHctPnN0X2lkeCk7CisKKwkJQlVHX09OKGxlLT5saW5rID49IDIpOworCQlkZXYgPSBody0+ZGV2W2xlLT5saW5rXTsKKwkJaWYgKGRldiA9PSBOVUxMIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCisJCQljb250aW51ZTsKKworCQlza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJc3RhdHVzID0gbGUzMl90b19jcHUobGUtPnN0YXR1cyk7CisJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGxlLT5sZW5ndGgpOworCQlvcCA9IGxlLT5vcGNvZGUgJiB+SFdfT1dORVI7CisJCWxlLT5vcGNvZGUgPSAwOworCisJCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBPUF9SWFNUQVQ6CisJCQlza2IgPSBza3kyX3JlY2VpdmUoc2t5MiwgbGVuZ3RoLCBzdGF0dXMpOworCQkJaWYgKCFza2IpCisJCQkJYnJlYWs7CisKKwkJCXNrYi0+ZGV2ID0gZGV2OworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKyNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKKwkJCWlmIChza3kyLT52bGdycCAmJiAoc3RhdHVzICYgR01SX0ZTX1ZMQU4pKSB7CisJCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwKKwkJCQkJCQkgc2t5Mi0+dmxncnAsCisJCQkJCQkJIGJlMTZfdG9fY3B1KHNreTItPnJ4X3RhZykpOworCQkJfSBlbHNlCisjZW5kaWYKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCQlpZiAoKyt3b3JrX2RvbmUgPj0gdG9fZG8pCisJCQkJZ290byBleGl0X2xvb3A7CisJCQlicmVhazsKKworI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAorCQljYXNlIE9QX1JYVkxBTjoKKwkJCXNreTItPnJ4X3RhZyA9IGxlbmd0aDsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfUlhDSEtTVkxBTjoKKwkJCXNreTItPnJ4X3RhZyA9IGxlbmd0aDsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworI2VuZGlmCisJCWNhc2UgT1BfUlhDSEtTOgorCQkJc2tiID0gc2t5Mi0+cnhfcmluZ1tza3kyLT5yeF9uZXh0XS5za2I7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0hXOworCQkJc2tiLT5jc3VtID0gbGUxNl90b19jcHUoc3RhdHVzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfVFhJTkRFWExFOgorCQkJLyogVFggaW5kZXggcmVwb3J0cyBzdGF0dXMgZm9yIGJvdGggcG9ydHMgKi8KKwkJCXR4X2RvbmVbMF0gPSBzdGF0dXMgJiAweGZmZmY7CisJCQl0eF9kb25lWzFdID0gKChzdGF0dXMgPj4gMjQpICYgMHhmZikKKwkJCQl8ICh1MTYpKGxlbmd0aCAmIDB4ZikgPDwgODsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkJICAgICAgICJ1bmtub3duIHN0YXR1cyBvcGNvZGUgMHgleFxuIiwgb3ApOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2V4aXRfbG9vcDoKKwlza3kyX3dyaXRlMzIoaHcsIFNUQVRfQ1RSTCwgU0NfU1RBVF9DTFJfSVJRKTsKKwltbWlvd2IoKTsKKworCXNreTJfdHhfY2hlY2soaHcsIDAsIHR4X2RvbmVbMF0pOworCXNreTJfdHhfY2hlY2soaHcsIDEsIHR4X2RvbmVbMV0pOworCisJaWYgKHNreTJfcmVhZDE2KGh3LCBTVEFUX1BVVF9JRFgpID09IGh3LT5zdF9pZHgpIHsKKwkJLyogbmVlZCB0byByZXN0YXJ0IFRYIHRpbWVyICovCisJCWlmIChpc19lY19hMShodykpIHsKKwkJCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVE9QKTsKKwkJCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CisJCX0KKworCQluZXRpZl9yeF9jb21wbGV0ZShkZXYwKTsKKwkJaHctPmludHJfbWFzayB8PSBZMl9JU19TVEFUX0JNVTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwkJbW1pb3diKCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCSpidWRnZXQgLT0gd29ya19kb25lOworCQlkZXYwLT5xdW90YSAtPSB3b3JrX2RvbmU7CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIHZvaWQgc2t5Ml9od19lcnJvcihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbcG9ydF07CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGh3IGVycm9yIGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyAmIFkyX0lTX1BBUl9SRDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHJhbSBkYXRhIHJlYWQgcGFyaXR5IGVycm9yXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJLyogQ2xlYXIgSVJRICovCisJCXNreTJfd3JpdGUxNihodywgUkFNX0JVRkZFUihwb3J0LCBCM19SSV9DVFJMKSwgUklfQ0xSX1JEX1BFUlIpOworCX0KKworCWlmIChzdGF0dXMgJiBZMl9JU19QQVJfV1IxKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByYW0gZGF0YSB3cml0ZSBwYXJpdHkgZXJyb3JcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCisJCXNreTJfd3JpdGUxNihodywgUkFNX0JVRkZFUihwb3J0LCBCM19SSV9DVFJMKSwgUklfQ0xSX1dSX1BFUlIpOworCX0KKworCWlmIChzdGF0dXMgJiBZMl9JU19QQVJfTUFDMSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogTUFDIHBhcml0eSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX0NMSV9UWF9QRSk7CisJfQorCisJaWYgKHN0YXR1cyAmIFkyX0lTX1BBUl9SWDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFJYIHBhcml0eSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIocnhxYWRkcltwb3J0XSwgUV9DU1IpLCBCTVVfQ0xSX0lSUV9QQVIpOworCX0KKworCWlmIChzdGF0dXMgJiBZMl9JU19UQ1BfVFhBMSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogVENQIHNlZ21lbnRhdGlvbiBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9DU1IpLCBCTVVfQ0xSX0lSUV9UQ1ApOworCX0KK30KKworc3RhdGljIHZvaWQgc2t5Ml9od19pbnRyKHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwl1MzIgc3RhdHVzID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0hXRV9JU1JDKTsKKworCWlmIChzdGF0dXMgJiBZMl9JU19USVNUX09WKQorCQlza3kyX3dyaXRlOChodywgR01BQ19USV9TVF9DVFJMLCBHTVRfU1RfQ0xSX0lSUSk7CisKKwlpZiAoc3RhdHVzICYgKFkyX0lTX01TVF9FUlIgfCBZMl9JU19JUlFfU1RBVCkpIHsKKwkJdTE2IHBjaV9lcnI7CisKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSV9TVEFUVVMsICZwY2lfZXJyKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHBjaSBodyBlcnJvciAoMHgleClcbiIsCisJCSAgICAgICBwY2lfbmFtZShody0+cGRldiksIHBjaV9lcnIpOworCisJCXNreTJfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSV9TVEFUVVMsCisJCQkJICAgICAgcGNpX2VyciB8IFBDSV9TVEFUVVNfRVJST1JfQklUUyk7CisJCXNreTJfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT0ZGKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgWTJfSVNfUENJX0VYUCkgeworCQkvKiBQQ0ktRXhwcmVzcyB1bmNvcnJlY3RhYmxlIEVycm9yIG9jY3VycmVkICovCisJCXUzMiBwZXhfZXJyOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChody0+cGRldiwgUEVYX1VOQ19FUlJfU1RBVCwgJnBleF9lcnIpOworCisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBwY2kgZXhwcmVzcyBlcnJvciAoMHgleClcbiIsCisJCSAgICAgICBwY2lfbmFtZShody0+cGRldiksIHBleF9lcnIpOworCisJCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJc2t5Ml93cml0ZTMyKGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQRVhfVU5DX0VSUl9TVEFULAorCQkJCSAgICAgICAweGZmZmZmZmZmVUwpOworCQlza3kyX3dyaXRlMzIoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOworCisJCWlmIChwZXhfZXJyICYgUEVYX0ZBVEFMX0VSUk9SUykgeworCQkJdTMyIGh3bXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0hXRV9JTVNLKTsKKwkJCWh3bXNrICY9IH5ZMl9JU19QQ0lfRVhQOworCQkJc2t5Ml93cml0ZTMyKGh3LCBCMF9IV0VfSU1TSywgaHdtc2spOworCQl9CisJfQorCisJaWYgKHN0YXR1cyAmIFkyX0hXRV9MMV9NQVNLKQorCQlza3kyX2h3X2Vycm9yKGh3LCAwLCBzdGF0dXMpOworCXN0YXR1cyA+Pj0gODsKKwlpZiAoc3RhdHVzICYgWTJfSFdFX0wxX01BU0spCisJCXNreTJfaHdfZXJyb3IoaHcsIDEsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHNreTJfbWFjX2ludHIoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IHN0YXR1cyA9IHNreTJfcmVhZDgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0lSUV9TUkMpKTsKKworCWlmIChuZXRpZl9tc2dfaW50cihza3kyKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBtYWMgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyAmIEdNX0lTX1JYX0ZGX09SKSB7CisJCSsrc2t5Mi0+bmV0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzOworCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfQ0xJX1JYX0ZPKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgR01fSVNfVFhfRkZfVVIpIHsKKwkJKytza3kyLT5uZXRfc3RhdHMudHhfZmlmb19lcnJvcnM7CisJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIEdNRl9DTElfVFhfRlUpOworCX0KK30KKworc3RhdGljIHZvaWQgc2t5Ml9waHlfaW50cihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbcG9ydF07CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisKKwlody0+aW50cl9tYXNrICY9IH4ocG9ydCA9PSAwID8gWTJfSVNfSVJRX1BIWTEgOiBZMl9JU19JUlFfUEhZMik7CisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwlzY2hlZHVsZV93b3JrKCZza3kyLT5waHlfdGFzayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBza3kyX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjAgPSBody0+ZGV2WzBdOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBza3kyX3JlYWQzMihodywgQjBfWTJfU1BfSVNSQzIpOworCWlmIChzdGF0dXMgPT0gMCB8fCBzdGF0dXMgPT0gfjApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiBZMl9JU19IV19FUlIpCisJCXNreTJfaHdfaW50cihodyk7CisKKwkvKiBEbyBOQVBJIGZvciBSeCBhbmQgVHggc3RhdHVzICovCisJaWYgKHN0YXR1cyAmIFkyX0lTX1NUQVRfQk1VKSB7CisJCWh3LT5pbnRyX21hc2sgJj0gflkyX0lTX1NUQVRfQk1VOworCQlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOworCisJCWlmIChsaWtlbHkoX19uZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldjApKSkgeworCQkJcHJlZmV0Y2goJmh3LT5zdF9sZVtody0+c3RfaWR4XSk7CisJCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldjApOworCQl9CisJfQorCisJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9QSFkxKQorCQlza3kyX3BoeV9pbnRyKGh3LCAwKTsKKworCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfUEhZMikKKwkJc2t5Ml9waHlfaW50cihodywgMSk7CisKKwlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX01BQzEpCisJCXNreTJfbWFjX2ludHIoaHcsIDApOworCisJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9NQUMyKQorCQlza3kyX21hY19pbnRyKGh3LCAxKTsKKworCXNreTJfd3JpdGUzMihodywgQjBfWTJfU1BfSUNSLCAyKTsKKworCXNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBza3kyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNreTJfaW50cihza3kyLT5ody0+cGRldi0+aXJxLCBza3kyLT5odywgTlVMTCk7Cit9CisjZW5kaWYKKworLyogQ2hpcCBpbnRlcm5hbCBmcmVxdWVuY3kgZm9yIGNsb2NrIGNhbGN1bGF0aW9ucyAqLworc3RhdGljIGlubGluZSB1MzIgc2t5Ml9taHooY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3KQoreworCXN3aXRjaCAoaHctPmNoaXBfaWQpIHsKKwljYXNlIENISVBfSURfWVVLT05fRUM6CisJY2FzZSBDSElQX0lEX1lVS09OX0VDX1U6CisJCXJldHVybiAxMjU7CS8qIDEyNSBNaHogKi8KKwljYXNlIENISVBfSURfWVVLT05fRkU6CisJCXJldHVybiAxMDA7CS8qIDEwMCBNaHogKi8KKwlkZWZhdWx0OgkJLyogWVVLT05fWEwgKi8KKwkJcmV0dXJuIDE1NjsJLyogMTU2IE1oeiAqLworCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgc2t5Ml91czJjbGsoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3LCB1MzIgdXMpCit7CisJcmV0dXJuIHNreTJfbWh6KGh3KSAqIHVzOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBza3kyX2NsazJ1cyhjb25zdCBzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHUzMiBjbGspCit7CisJcmV0dXJuIGNsayAvIHNreTJfbWh6KGh3KTsKK30KKworCitzdGF0aWMgaW50IHNreTJfcmVzZXQoc3RydWN0IHNreTJfaHcgKmh3KQoreworCXUzMiBjdHN0OworCXUxNiBzdGF0dXM7CisJdTggdDgsIHBtZF90eXBlOworCWludCBpOworCisJY3RzdCA9IHNreTJfcmVhZDMyKGh3LCBCMF9DVFNUKTsKKworCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19SU1RfQ0xSKTsKKwlody0+Y2hpcF9pZCA9IHNreTJfcmVhZDgoaHcsIEIyX0NISVBfSUQpOworCWlmIChody0+Y2hpcF9pZCA8IENISVBfSURfWVVLT05fWEwgfHwgaHctPmNoaXBfaWQgPiBDSElQX0lEX1lVS09OX0ZFKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bnN1cHBvcnRlZCBjaGlwIHR5cGUgMHgleFxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGh3LT5wZGV2KSwgaHctPmNoaXBfaWQpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogcmluZyBmb3Igc3RhdHVzIHJlc3BvbnNlcyAqLworCWh3LT5zdF9sZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGh3LT5wZGV2LCBTVEFUVVNfTEVfQllURVMsCisJCQkJCSAmaHctPnN0X2RtYSk7CisJaWYgKCFody0+c3RfbGUpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGlzYWJsZSBBU0YgKi8KKwlpZiAoaHctPmNoaXBfaWQgPD0gQ0hJUF9JRF9ZVUtPTl9FQykgeworCQlza3kyX3dyaXRlOChodywgQjI4X1kyX0FTRl9TVEFUX0NNRCwgWTJfQVNGX1JFU0VUKTsKKwkJc2t5Ml93cml0ZTE2KGh3LCBCMF9DVFNULCBZMl9BU0ZfRElTQUJMRSk7CisJfQorCisJLyogZG8gYSBTVyByZXNldCAqLworCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19SU1RfU0VUKTsKKwlza3kyX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfUlNUX0NMUik7CisKKwkvKiBjbGVhciBQQ0kgZXJyb3JzLCBpZiBhbnkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChody0+cGRldiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CisJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfU1RBVFVTLAorCQkJICAgICAgc3RhdHVzIHwgUENJX1NUQVRVU19FUlJPUl9CSVRTKTsKKworCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19NUlNUX0NMUik7CisKKwkvKiBjbGVhciBhbnkgUEVYIGVycm9ycyAqLworCWlmIChpc19wY2lleChodykpIHsKKwkJdTE2IGxzdGF0OworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQRVhfVU5DX0VSUl9TVEFULAorCQkJCSAgICAgICAweGZmZmZmZmZmVUwpOworCQlwY2lfcmVhZF9jb25maWdfd29yZChody0+cGRldiwgUEVYX0xOS19TVEFULCAmbHN0YXQpOworCX0KKworCXBtZF90eXBlID0gc2t5Ml9yZWFkOChodywgQjJfUE1EX1RZUCk7CisJaHctPmNvcHBlciA9ICEocG1kX3R5cGUgPT0gJ0wnIHx8IHBtZF90eXBlID09ICdTJyk7CisKKwlody0+cG9ydHMgPSAxOworCXQ4ID0gc2t5Ml9yZWFkOChodywgQjJfWTJfSFdfUkVTKTsKKwlpZiAoKHQ4ICYgQ0ZHX0RVQUxfTUFDX01TSykgPT0gQ0ZHX0RVQUxfTUFDX01TSykgeworCQlpZiAoIShza3kyX3JlYWQ4KGh3LCBCMl9ZMl9DTEtfR0FURSkgJiBZMl9TVEFUVVNfTE5LMl9JTkFDKSkKKwkJCSsraHctPnBvcnRzOworCX0KKwlody0+Y2hpcF9yZXYgPSAoc2t5Ml9yZWFkOChodywgQjJfTUFDX0NGRykgJiBDRkdfQ0hJUF9SX01TSykgPj4gNDsKKworCXNreTJfc2V0X3Bvd2VyX3N0YXRlKGh3LCBQQ0lfRDApOworCisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CisJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcoaSwgR01BQ19MSU5LX0NUUkwpLCBHTUxDX1JTVF9TRVQpOworCQlza3kyX3dyaXRlOChodywgU0tfUkVHKGksIEdNQUNfTElOS19DVFJMKSwgR01MQ19SU1RfQ0xSKTsKKwl9CisKKwlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7CisKKwkvKiBDbGVhciBJMkMgSVJRIG5vaXNlICovCisJc2t5Ml93cml0ZTMyKGh3LCBCMl9JMkNfSVJRLCAxKTsKKworCS8qIHR1cm4gb2ZmIGhhcmR3YXJlIHRpbWVyICh1bnVzZWQpICovCisJc2t5Ml93cml0ZTgoaHcsIEIyX1RJX0NUUkwsIFRJTV9TVE9QKTsKKwlza3kyX3dyaXRlOChodywgQjJfVElfQ1RSTCwgVElNX0NMUl9JUlEpOworCisJc2t5Ml93cml0ZTgoaHcsIEIwX1kyTEVELCBMRURfU1RBVF9PTik7CisKKwkvKiBUdXJuIG9mZiBkZXNjcmlwdG9yIHBvbGxpbmcgKi8KKwlza3kyX3dyaXRlMzIoaHcsIEIyOF9EUFRfQ1RSTCwgRFBUX1NUT1ApOworCisJLyogVHVybiBvZmYgcmVjZWl2ZSB0aW1lc3RhbXAgKi8KKwlza3kyX3dyaXRlOChodywgR01BQ19USV9TVF9DVFJMLCBHTVRfU1RfU1RPUCk7CisJc2t5Ml93cml0ZTgoaHcsIEdNQUNfVElfU1RfQ1RSTCwgR01UX1NUX0NMUl9JUlEpOworCisJLyogZW5hYmxlIHRoZSBUeCBBcmJpdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykKKwkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhpLCBUWEFfQ1RSTCksIFRYQV9FTkFfQVJCKTsKKworCS8qIEluaXRpYWxpemUgcmFtIGludGVyZmFjZSAqLworCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgeworCQlza3kyX3dyaXRlOChodywgUkFNX0JVRkZFUihpLCBCM19SSV9DVFJMKSwgUklfUlNUX0NMUik7CisKKwkJc2t5Ml93cml0ZTgoaHcsIFJBTV9CVUZGRVIoaSwgQjNfUklfV1RPX1IxKSwgU0tfUklfVE9fNTMpOworCQlza3kyX3dyaXRlOChodywgUkFNX0JVRkZFUihpLCBCM19SSV9XVE9fWEExKSwgU0tfUklfVE9fNTMpOworCQlza3kyX3dyaXRlOChodywgUkFNX0JVRkZFUihpLCBCM19SSV9XVE9fWFMxKSwgU0tfUklfVE9fNTMpOworCQlza3kyX3dyaXRlOChodywgUkFNX0JVRkZFUihpLCBCM19SSV9SVE9fUjEpLCBTS19SSV9UT181Myk7CisJCXNreTJfd3JpdGU4KGh3LCBSQU1fQlVGRkVSKGksIEIzX1JJX1JUT19YQTEpLCBTS19SSV9UT181Myk7CisJCXNreTJfd3JpdGU4KGh3LCBSQU1fQlVGRkVSKGksIEIzX1JJX1JUT19YUzEpLCBTS19SSV9UT181Myk7CisJCXNreTJfd3JpdGU4KGh3LCBSQU1fQlVGRkVSKGksIEIzX1JJX1dUT19SMiksIFNLX1JJX1RPXzUzKTsKKwkJc2t5Ml93cml0ZTgoaHcsIFJBTV9CVUZGRVIoaSwgQjNfUklfV1RPX1hBMiksIFNLX1JJX1RPXzUzKTsKKwkJc2t5Ml93cml0ZTgoaHcsIFJBTV9CVUZGRVIoaSwgQjNfUklfV1RPX1hTMiksIFNLX1JJX1RPXzUzKTsKKwkJc2t5Ml93cml0ZTgoaHcsIFJBTV9CVUZGRVIoaSwgQjNfUklfUlRPX1IyKSwgU0tfUklfVE9fNTMpOworCQlza3kyX3dyaXRlOChodywgUkFNX0JVRkZFUihpLCBCM19SSV9SVE9fWEEyKSwgU0tfUklfVE9fNTMpOworCQlza3kyX3dyaXRlOChodywgUkFNX0JVRkZFUihpLCBCM19SSV9SVE9fWFMyKSwgU0tfUklfVE9fNTMpOworCX0KKworCXNreTJfd3JpdGUzMihodywgQjBfSFdFX0lNU0ssIFkyX0hXRV9BTExfTUFTSyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspCisJCXNreTJfcGh5X3Jlc2V0KGh3LCBpKTsKKworCW1lbXNldChody0+c3RfbGUsIDAsIFNUQVRVU19MRV9CWVRFUyk7CisJaHctPnN0X2lkeCA9IDA7CisKKwlza3kyX3dyaXRlMzIoaHcsIFNUQVRfQ1RSTCwgU0NfU1RBVF9SU1RfU0VUKTsKKwlza3kyX3dyaXRlMzIoaHcsIFNUQVRfQ1RSTCwgU0NfU1RBVF9SU1RfQ0xSKTsKKworCXNreTJfd3JpdGUzMihodywgU1RBVF9MSVNUX0FERFJfTE8sIGh3LT5zdF9kbWEpOworCXNreTJfd3JpdGUzMihodywgU1RBVF9MSVNUX0FERFJfSEksICh1NjQpIGh3LT5zdF9kbWEgPj4gMzIpOworCisJLyogU2V0IHRoZSBsaXN0IGxhc3QgaW5kZXggKi8KKwlza3kyX3dyaXRlMTYoaHcsIFNUQVRfTEFTVF9JRFgsIFNUQVRVU19SSU5HX1NJWkUgLSAxKTsKKworCS8qIFRoZXNlIHN0YXR1cyBzZXR1cCB2YWx1ZXMgYXJlIGNvcGllZCBmcm9tIFN5c0tvbm5lY3QncyBkcml2ZXIgKi8KKwlpZiAoaXNfZWNfYTEoaHcpKSB7CisJCS8qIFdBIGZvciBkZXYuICM0LjMgKi8KKwkJc2t5Ml93cml0ZTE2KGh3LCBTVEFUX1RYX0lEWF9USCwgMHhmZmYpOwkvKiBUeCBUaHJlc2hvbGQgKi8KKworCQkvKiBzZXQgU3RhdHVzLUZJRk8gd2F0ZXJtYXJrICovCisJCXNreTJfd3JpdGU4KGh3LCBTVEFUX0ZJRk9fV00sIDB4MjEpOwkvKiBXQSBmb3IgZGV2LiAjNC4xOCAqLworCisJCS8qIHNldCBTdGF0dXMtRklGTyBJU1Igd2F0ZXJtYXJrICovCisJCXNreTJfd3JpdGU4KGh3LCBTVEFUX0ZJRk9fSVNSX1dNLCAweDA3KTsJLyogV0EgZm9yIGRldi4gIzQuMTggKi8KKwkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX1RYX1RJTUVSX0lOSSwgc2t5Ml91czJjbGsoaHcsIDEwMDAwKSk7CisJfSBlbHNlIHsKKwkJc2t5Ml93cml0ZTE2KGh3LCBTVEFUX1RYX0lEWF9USCwgMTApOworCQlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX1dNLCAxNik7CisKKwkJLyogc2V0IFN0YXR1cy1GSUZPIElTUiB3YXRlcm1hcmsgKi8KKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgJiYgaHctPmNoaXBfcmV2ID09IDApCisJCQlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX0lTUl9XTSwgNCk7CisJCWVsc2UKKwkJCXNreTJfd3JpdGU4KGh3LCBTVEFUX0ZJRk9fSVNSX1dNLCAxNik7CisKKwkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX1RYX1RJTUVSX0lOSSwgc2t5Ml91czJjbGsoaHcsIDEwMDApKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0xFVl9USU1FUl9JTkksIHNreTJfdXMyY2xrKGh3LCAxMDApKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0lTUl9USU1FUl9JTkksIHNreTJfdXMyY2xrKGh3LCAyMCkpOworCX0KKworCS8qIGVuYWJsZSBzdGF0dXMgdW5pdCAqLworCXNreTJfd3JpdGUzMihodywgU1RBVF9DVFJMLCBTQ19TVEFUX09QX09OKTsKKworCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CisJc2t5Ml93cml0ZTgoaHcsIFNUQVRfTEVWX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CisJc2t5Ml93cml0ZTgoaHcsIFNUQVRfSVNSX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2t5Ml9zdXBwb3J0ZWRfbW9kZXMoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3KQoreworCXUzMiBtb2RlczsKKwlpZiAoaHctPmNvcHBlcikgeworCQltb2RlcyA9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYKKwkJICAgIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbAorCQkgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgorCQkgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbAorCQkgICAgfCBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9UUDsKKworCQlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9GRSkKKwkJCW1vZGVzIHw9IFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgorCQkJICAgIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCX0gZWxzZQorCQltb2RlcyA9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9GSUJSRQorCQkgICAgfCBTVVBQT1JURURfQXV0b25lZzsKKwlyZXR1cm4gbW9kZXM7Cit9CisKK3N0YXRpYyBpbnQgc2t5Ml9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCWVjbWQtPnN1cHBvcnRlZCA9IHNreTJfc3VwcG9ydGVkX21vZGVzKGh3KTsKKwllY21kLT5waHlfYWRkcmVzcyA9IFBIWV9BRERSX01BUlY7CisJaWYgKGh3LT5jb3BwZXIpIHsKKwkJZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgorCQkgICAgfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsCisJCSAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCisJCSAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCisJCSAgICB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgorCQkgICAgfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwKKwkJICAgIHwgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFA7CisJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCX0gZWxzZQorCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKworCWVjbWQtPmFkdmVydGlzaW5nID0gc2t5Mi0+YWR2ZXJ0aXNpbmc7CisJZWNtZC0+YXV0b25lZyA9IHNreTItPmF1dG9uZWc7CisJZWNtZC0+c3BlZWQgPSBza3kyLT5zcGVlZDsKKwllY21kLT5kdXBsZXggPSBza3kyLT5kdXBsZXg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2t5Ml9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCWNvbnN0IHN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXUzMiBzdXBwb3J0ZWQgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7CisKKwlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQllY21kLT5hZHZlcnRpc2luZyA9IHN1cHBvcnRlZDsKKwkJc2t5Mi0+ZHVwbGV4ID0gLTE7CisJCXNreTItPnNwZWVkID0gLTE7CisJfSBlbHNlIHsKKwkJdTMyIHNldHRpbmc7CisKKwkJc3dpdGNoIChlY21kLT5zcGVlZCkgeworCQljYXNlIFNQRUVEXzEwMDA6CisJCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCXNldHRpbmcgPSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJCQllbHNlIGlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCisJCQkJc2V0dGluZyA9IFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDoKKwkJCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJc2V0dGluZyA9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCQkJZWxzZSBpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJCXNldHRpbmcgPSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFRURfMTA6CisJCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCXNldHRpbmcgPSBTVVBQT1JURURfMTBiYXNlVF9GdWxsOworCQkJZWxzZSBpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJCXNldHRpbmcgPSBTVVBQT1JURURfMTBiYXNlVF9IYWxmOworCQkJZWxzZQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICgoc2V0dGluZyAmIHN1cHBvcnRlZCkgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXNreTItPnNwZWVkID0gZWNtZC0+c3BlZWQ7CisJCXNreTItPmR1cGxleCA9IGVjbWQtPmR1cGxleDsKKwl9CisKKwlza3kyLT5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKKwlza3kyLT5hZHZlcnRpc2luZyA9IGVjbWQtPmFkdmVydGlzaW5nOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJc2t5Ml9waHlfcmVpbml0KHNreTIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNreTJfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9OQU1FKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOworCXN0cmNweShpbmZvLT5md192ZXJzaW9uLCAiTi9BIik7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShza3kyLT5ody0+cGRldikpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNreTJfc3RhdCB7CisJY2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07CisJdTE2IG9mZnNldDsKK30gc2t5Ml9zdGF0c1tdID0geworCXsgInR4X2J5dGVzIiwJICAgR01fVFhPX09LX0hJIH0sCisJeyAicnhfYnl0ZXMiLAkgICBHTV9SWE9fT0tfSEkgfSwKKwl7ICJ0eF9icm9hZGNhc3QiLCAgR01fVFhGX0JDX09LIH0sCisJeyAicnhfYnJvYWRjYXN0IiwgIEdNX1JYRl9CQ19PSyB9LAorCXsgInR4X211bHRpY2FzdCIsICBHTV9UWEZfTUNfT0sgfSwKKwl7ICJyeF9tdWx0aWNhc3QiLCAgR01fUlhGX01DX09LIH0sCisJeyAidHhfdW5pY2FzdCIsICAgIEdNX1RYRl9VQ19PSyB9LAorCXsgInJ4X3VuaWNhc3QiLCAgICBHTV9SWEZfVUNfT0sgfSwKKwl7ICJ0eF9tYWNfcGF1c2UiLCAgR01fVFhGX01QQVVTRSB9LAorCXsgInJ4X21hY19wYXVzZSIsICBHTV9SWEZfTVBBVVNFIH0sCisJeyAiY29sbGlzaW9ucyIsICAgIEdNX1RYRl9TTkdfQ09MIH0sCisJeyAibGF0ZV9jb2xsaXNpb24iLEdNX1RYRl9MQVRfQ09MIH0sCisJeyAiYWJvcnRlZCIsIAkgICBHTV9UWEZfQUJPX0NPTCB9LAorCXsgIm11bHRpX2NvbGxpc2lvbnMiLCBHTV9UWEZfTVVMX0NPTCB9LAorCXsgImZpZm9fdW5kZXJydW4iLCBHTV9UWEVfRklGT19VUiB9LAorCXsgImZpZm9fb3ZlcmZsb3ciLCBHTV9SWEVfRklGT19PViB9LAorCXsgInJ4X3Rvb2xvbmciLCAgICBHTV9SWEZfTE5HX0VSUiB9LAorCXsgInJ4X2phYmJlciIsICAgICBHTV9SWEZfSkFCX1BLVCB9LAorCXsgInJ4X3J1bnQiLCAJICAgR01fUlhFX0ZSQUcgfSwKKwl7ICJyeF90b29fbG9uZyIsICAgR01fUlhGX0xOR19FUlIgfSwKKwl7ICJyeF9mY3NfZXJyb3IiLCAgIEdNX1JYRl9GQ1NfRVJSIH0sCit9OworCitzdGF0aWMgdTMyIHNreTJfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBza3kyLT5yeF9jc3VtOworfQorCitzdGF0aWMgaW50IHNreTJfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisKKwlza3kyLT5yeF9jc3VtID0gZGF0YTsKKworCXNreTJfd3JpdGUzMihza3kyLT5odywgUV9BRERSKHJ4cWFkZHJbc2t5Mi0+cG9ydF0sIFFfQ1NSKSwKKwkJICAgICBkYXRhID8gQk1VX0VOQV9SWF9DSEtTVU0gOiBCTVVfRElTX1JYX0NIS1NVTSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBza3kyX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBza3kyLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgaW50IHNreTJfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHNreTItPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCisJCXJldHVybiAtRUlOVkFMOworCisJc2t5Ml9waHlfcmVpbml0KHNreTIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNreTJfcGh5X3N0YXRzKHN0cnVjdCBza3kyX3BvcnQgKnNreTIsIHU2NCAqIGRhdGEsIHVuc2lnbmVkIGNvdW50KQoreworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OworCWludCBpOworCisJZGF0YVswXSA9ICh1NjQpIGdtYV9yZWFkMzIoaHcsIHBvcnQsIEdNX1RYT19PS19ISSkgPDwgMzIKKwkgICAgfCAodTY0KSBnbWFfcmVhZDMyKGh3LCBwb3J0LCBHTV9UWE9fT0tfTE8pOworCWRhdGFbMV0gPSAodTY0KSBnbWFfcmVhZDMyKGh3LCBwb3J0LCBHTV9SWE9fT0tfSEkpIDw8IDMyCisJICAgIHwgKHU2NCkgZ21hX3JlYWQzMihodywgcG9ydCwgR01fUlhPX09LX0xPKTsKKworCWZvciAoaSA9IDI7IGkgPCBjb3VudDsgaSsrKQorCQlkYXRhW2ldID0gKHU2NCkgZ21hX3JlYWQzMihodywgcG9ydCwgc2t5Ml9zdGF0c1tpXS5vZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBza3kyX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc2t5Mi0+bXNnX2VuYWJsZSA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IHNreTJfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIEFSUkFZX1NJWkUoc2t5Ml9zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHNreTJfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqIGRhdGEpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisKKwlza3kyX3BoeV9zdGF0cyhza3kyLCBkYXRhLCBBUlJBWV9TSVpFKHNreTJfc3RhdHMpKTsKK30KKworc3RhdGljIHZvaWQgc2t5Ml9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCit7CisJaW50IGk7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShza3kyX3N0YXRzKTsgaSsrKQorCQkJbWVtY3B5KGRhdGEgKyBpICogRVRIX0dTVFJJTkdfTEVOLAorCQkJICAgICAgIHNreTJfc3RhdHNbaV0ubmFtZSwgRVRIX0dTVFJJTkdfTEVOKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBVc2UgaGFyZHdhcmUgTUlCIHZhcmlhYmxlcyBmb3IgY3JpdGljYWwgcGF0aCBzdGF0aXN0aWNzIGFuZAorICogdHJhbnNtaXQgZmVlZGJhY2sgbm90IHJlcG9ydGVkIGF0IGludGVycnVwdC4KKyAqIE90aGVyIGVycm9ycyBhcmUgYWNjb3VudGVkIGZvciBpbiBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpza3kyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXU2NCBkYXRhWzEzXTsKKworCXNreTJfcGh5X3N0YXRzKHNreTIsIGRhdGEsIEFSUkFZX1NJWkUoZGF0YSkpOworCisJc2t5Mi0+bmV0X3N0YXRzLnR4X2J5dGVzID0gZGF0YVswXTsKKwlza3kyLT5uZXRfc3RhdHMucnhfYnl0ZXMgPSBkYXRhWzFdOworCXNreTItPm5ldF9zdGF0cy50eF9wYWNrZXRzID0gZGF0YVsyXSArIGRhdGFbNF0gKyBkYXRhWzZdOworCXNreTItPm5ldF9zdGF0cy5yeF9wYWNrZXRzID0gZGF0YVszXSArIGRhdGFbNV0gKyBkYXRhWzddOworCXNreTItPm5ldF9zdGF0cy5tdWx0aWNhc3QgPSBkYXRhWzVdICsgZGF0YVs3XTsKKwlza3kyLT5uZXRfc3RhdHMuY29sbGlzaW9ucyA9IGRhdGFbMTBdOworCXNreTItPm5ldF9zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9IGRhdGFbMTJdOworCisJcmV0dXJuICZza3kyLT5uZXRfc3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgc2t5Ml9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCW1lbWNweV90b2lvKHNreTItPmh3LT5yZWdzICsgQjJfTUFDXzEgKyBza3kyLT5wb3J0ICogOCwKKwkJICAgIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHlfdG9pbyhza3kyLT5ody0+cmVncyArIEIyX01BQ18yICsgc2t5Mi0+cG9ydCAqIDgsCisJCSAgICBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlza3kyX3BoeV9yZWluaXQoc2t5Mik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2t5Ml9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7CisJc3RydWN0IGRldl9tY19saXN0ICpsaXN0ID0gZGV2LT5tY19saXN0OworCXUxNiByZWc7CisJdTggZmlsdGVyWzhdOworCisJbWVtc2V0KGZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOworCisJcmVnID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fUlhfQ1RSTCk7CisJcmVnIHw9IEdNX1JYQ1JfVUNGX0VOQTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCS8qIHByb21pc2N1b3VzICovCisJCXJlZyAmPSB+KEdNX1JYQ1JfVUNGX0VOQSB8IEdNX1JYQ1JfTUNGX0VOQSk7CisJZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IGRldi0+bWNfY291bnQgPiAxNikJLyogYWxsIG11bHRpY2FzdCAqLworCQltZW1zZXQoZmlsdGVyLCAweGZmLCBzaXplb2YoZmlsdGVyKSk7CisJZWxzZSBpZiAoZGV2LT5tY19jb3VudCA9PSAwKQkvKiBubyBtdWx0aWNhc3QgKi8KKwkJcmVnICY9IH5HTV9SWENSX01DRl9FTkE7CisJZWxzZSB7CisJCWludCBpOworCQlyZWcgfD0gR01fUlhDUl9NQ0ZfRU5BOworCisJCWZvciAoaSA9IDA7IGxpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJCXUzMiBiaXQgPSBldGhlcl9jcmMoRVRIX0FMRU4sIGxpc3QtPmRtaV9hZGRyKSAmIDB4M2Y7CisJCQlmaWx0ZXJbYml0IC8gOF0gfD0gMSA8PCAoYml0ICUgOCk7CisJCX0KKwl9CisKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fTUNfQUREUl9IMSwKKwkJICAgICh1MTYpIGZpbHRlclswXSB8ICgodTE2KSBmaWx0ZXJbMV0gPDwgOCkpOworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9NQ19BRERSX0gyLAorCQkgICAgKHUxNikgZmlsdGVyWzJdIHwgKCh1MTYpIGZpbHRlclszXSA8PCA4KSk7CisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX01DX0FERFJfSDMsCisJCSAgICAodTE2KSBmaWx0ZXJbNF0gfCAoKHUxNikgZmlsdGVyWzVdIDw8IDgpKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fTUNfQUREUl9INCwKKwkJICAgICh1MTYpIGZpbHRlcls2XSB8ICgodTE2KSBmaWx0ZXJbN10gPDwgOCkpOworCisJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1JYX0NUUkwsIHJlZyk7Cit9CisKKy8qIENhbiBoYXZlIG9uZSBnbG9iYWwgYmVjYXVzZSBibGlua2luZyBpcyBjb250cm9sbGVkIGJ5CisgKiBldGh0b29sIGFuZCB0aGF0IGlzIGFsd2F5cyB1bmRlciBSVE5MIG11dGV4CisgKi8KK3N0YXRpYyB2b2lkIHNreTJfbGVkKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgaW50IG9uKQoreworCXUxNiBwZzsKKworCXN3aXRjaCAoaHctPmNoaXBfaWQpIHsKKwljYXNlIENISVBfSURfWVVLT05fWEw6CisJCXBnID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIpOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIDMpOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLAorCQkJICAgICBvbiA/IChQSFlfTV9MRURDX0xPU19DVFJMKDEpIHwKKwkJCQkgICBQSFlfTV9MRURDX0lOSVRfQ1RSTCg3KSB8CisJCQkJICAgUEhZX01fTEVEQ19TVEExX0NUUkwoNykgfAorCQkJCSAgIFBIWV9NX0xFRENfU1RBMF9DVFJMKDcpKQorCQkJICAgICA6IDApOworCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgcGcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX0NUUkwsIDApOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9PVkVSLAorCQkJICAgICBvbiA/IFBIWV9NX0xFRF9NT19EVVAoTU9fTEVEX09OKSB8CisJCQkgICAgIFBIWV9NX0xFRF9NT18xMChNT19MRURfT04pIHwKKwkJCSAgICAgUEhZX01fTEVEX01PXzEwMChNT19MRURfT04pIHwKKwkJCSAgICAgUEhZX01fTEVEX01PXzEwMDAoTU9fTEVEX09OKSB8CisJCQkgICAgIFBIWV9NX0xFRF9NT19SWChNT19MRURfT04pCisJCQkgICAgIDogUEhZX01fTEVEX01PX0RVUChNT19MRURfT0ZGKSB8CisJCQkgICAgIFBIWV9NX0xFRF9NT18xMChNT19MRURfT0ZGKSB8CisJCQkgICAgIFBIWV9NX0xFRF9NT18xMDAoTU9fTEVEX09GRikgfAorCQkJICAgICBQSFlfTV9MRURfTU9fMTAwMChNT19MRURfT0ZGKSB8CisJCQkgICAgIFBIWV9NX0xFRF9NT19SWChNT19MRURfT0ZGKSk7CisKKwl9Cit9CisKKy8qIGJsaW5rIExFRCdzIGZvciBmaW5kaW5nIGJvYXJkICovCitzdGF0aWMgaW50IHNreTJfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKwl1bnNpZ25lZCBwb3J0ID0gc2t5Mi0+cG9ydDsKKwl1MTYgbGVkY3RybCwgbGVkb3ZlciA9IDA7CisJbG9uZyBtczsKKwlpbnQgaW50ZXJydXB0ZWQ7CisJaW50IG9ub2ZmID0gMTsKKworCWlmICghZGF0YSB8fCBkYXRhID4gKHUzMikgKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopKQorCQltcyA9IGppZmZpZXNfdG9fbXNlY3MoTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWVsc2UKKwkJbXMgPSBkYXRhICogMTAwMDsKKworCS8qIHNhdmUgaW5pdGlhbCB2YWx1ZXMgKi8KKwlkb3duKCZza3kyLT5waHlfc2VtYSk7CisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwpIHsKKwkJdTE2IHBnID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIpOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIDMpOworCQlsZWRjdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMKTsKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCBwZyk7CisJfSBlbHNlIHsKKwkJbGVkY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfQ1RSTCk7CisJCWxlZG92ZXIgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfTEVEX09WRVIpOworCX0KKworCWludGVycnVwdGVkID0gMDsKKwl3aGlsZSAoIWludGVycnVwdGVkICYmIG1zID4gMCkgeworCQlza3kyX2xlZChodywgcG9ydCwgb25vZmYpOworCQlvbm9mZiA9ICFvbm9mZjsKKworCQl1cCgmc2t5Mi0+cGh5X3NlbWEpOworCQlpbnRlcnJ1cHRlZCA9IG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDI1MCk7CisJCWRvd24oJnNreTItPnBoeV9zZW1hKTsKKworCQltcyAtPSAyNTA7CisJfQorCisJLyogcmVzdW1lIHJlZ3VsYXJseSBzY2hlZHVsZWQgcHJvZ3JhbW1pbmcgKi8KKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCkgeworCQl1MTYgcGcgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUik7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMyk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGxlZGN0cmwpOworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIHBnKTsKKwl9IGVsc2UgeworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9DVFJMLCBsZWRjdHJsKTsKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfT1ZFUiwgbGVkb3Zlcik7CisJfQorCXVwKCZza3kyLT5waHlfc2VtYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2t5Ml9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVjbWQpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisKKwllY21kLT50eF9wYXVzZSA9IHNreTItPnR4X3BhdXNlOworCWVjbWQtPnJ4X3BhdXNlID0gc2t5Mi0+cnhfcGF1c2U7CisJZWNtZC0+YXV0b25lZyA9IHNreTItPmF1dG9uZWc7Cit9CisKK3N0YXRpYyBpbnQgc2t5Ml9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVjbWQpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisKKwlza3kyLT5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKKwlza3kyLT50eF9wYXVzZSA9IGVjbWQtPnR4X3BhdXNlICE9IDA7CisJc2t5Mi0+cnhfcGF1c2UgPSBlY21kLT5yeF9wYXVzZSAhPSAwOworCisJc2t5Ml9waHlfcmVpbml0KHNreTIpOworCisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHZvaWQgc2t5Ml9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQzsKKwl3b2wtPndvbG9wdHMgPSBza3kyLT53b2wgPyBXQUtFX01BR0lDIDogMDsKK30KKworc3RhdGljIGludCBza3kyX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCisJaWYgKHdvbC0+d29sb3B0cyAhPSBXQUtFX01BR0lDICYmIHdvbC0+d29sb3B0cyAhPSAwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza3kyLT53b2wgPSB3b2wtPndvbG9wdHMgPT0gV0FLRV9NQUdJQzsKKworCWlmIChza3kyLT53b2wpIHsKKwkJbWVtY3B5X3RvaW8oaHctPnJlZ3MgKyBXT0xfTUFDX0FERFIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCQlza3kyX3dyaXRlMTYoaHcsIFdPTF9DVFJMX1NUQVQsCisJCQkgICAgIFdPTF9DVExfRU5BX1BNRV9PTl9NQUdJQ19QS1QgfAorCQkJICAgICBXT0xfQ1RMX0VOQV9NQUdJQ19QS1RfVU5JVCk7CisJfSBlbHNlCisJCXNreTJfd3JpdGUxNihodywgV09MX0NUUkxfU1RBVCwgV09MX0NUTF9ERUZBVUxUKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2t5Ml9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjbWQpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisKKwlpZiAoc2t5Ml9yZWFkOChodywgU1RBVF9UWF9USU1FUl9DVFJMKSA9PSBUSU1fU1RPUCkKKwkJZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MgPSAwOworCWVsc2UgeworCQl1MzIgY2xrcyA9IHNreTJfcmVhZDMyKGh3LCBTVEFUX1RYX1RJTUVSX0lOSSk7CisJCWVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzID0gc2t5Ml9jbGsydXMoaHcsIGNsa3MpOworCX0KKwllY21kLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IHNreTJfcmVhZDE2KGh3LCBTVEFUX1RYX0lEWF9USCk7CisKKwlpZiAoc2t5Ml9yZWFkOChodywgU1RBVF9MRVZfVElNRVJfQ1RSTCkgPT0gVElNX1NUT1ApCisJCWVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzID0gMDsKKwllbHNlIHsKKwkJdTMyIGNsa3MgPSBza3kyX3JlYWQzMihodywgU1RBVF9MRVZfVElNRVJfSU5JKTsKKwkJZWNtZC0+cnhfY29hbGVzY2VfdXNlY3MgPSBza3kyX2NsazJ1cyhodywgY2xrcyk7CisJfQorCWVjbWQtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gc2t5Ml9yZWFkOChodywgU1RBVF9GSUZPX1dNKTsKKworCWlmIChza3kyX3JlYWQ4KGh3LCBTVEFUX0lTUl9USU1FUl9DVFJMKSA9PSBUSU1fU1RPUCkKKwkJZWNtZC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID0gMDsKKwllbHNlIHsKKwkJdTMyIGNsa3MgPSBza3kyX3JlYWQzMihodywgU1RBVF9JU1JfVElNRVJfSU5JKTsKKwkJZWNtZC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID0gc2t5Ml9jbGsydXMoaHcsIGNsa3MpOworCX0KKworCWVjbWQtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSA9IHNreTJfcmVhZDgoaHcsIFNUQVRfRklGT19JU1JfV00pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE5vdGU6IHRoaXMgYWZmZWN0IGJvdGggcG9ydHMgKi8KK3N0YXRpYyBpbnQgc2t5Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjbWQpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJY29uc3QgdTMyIHRtaW4gPSBza3kyX2NsazJ1cyhodywgMSk7CisJY29uc3QgdTMyIHRtYXggPSA1MDAwOworCisJaWYgKGVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzICE9IDAgJiYKKwkgICAgKGVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzIDwgdG1pbiB8fCBlY21kLT50eF9jb2FsZXNjZV91c2VjcyA+IHRtYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlY21kLT5yeF9jb2FsZXNjZV91c2VjcyAhPSAwICYmCisJICAgIChlY21kLT5yeF9jb2FsZXNjZV91c2VjcyA8IHRtaW4gfHwgZWNtZC0+cnhfY29hbGVzY2VfdXNlY3MgPiB0bWF4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZWNtZC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxICE9IDAgJiYKKwkgICAgKGVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA8IHRtaW4gfHwgZWNtZC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID4gdG1heCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVjbWQtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZWNtZC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZWNtZC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MgPT0gMCkKKwkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCwgVElNX1NUT1ApOworCWVsc2UgeworCQlza3kyX3dyaXRlMzIoaHcsIFNUQVRfVFhfVElNRVJfSU5JLAorCQkJICAgICBza3kyX3VzMmNsayhodywgZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MpKTsKKwkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCwgVElNX1NUQVJUKTsKKwl9CisJc2t5Ml93cml0ZTE2KGh3LCBTVEFUX1RYX0lEWF9USCwgZWNtZC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOworCisJaWYgKGVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzID09IDApCisJCXNreTJfd3JpdGU4KGh3LCBTVEFUX0xFVl9USU1FUl9DVFJMLCBUSU1fU1RPUCk7CisJZWxzZSB7CisJCXNreTJfd3JpdGUzMihodywgU1RBVF9MRVZfVElNRVJfSU5JLAorCQkJICAgICBza3kyX3VzMmNsayhodywgZWNtZC0+cnhfY29hbGVzY2VfdXNlY3MpKTsKKwkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfTEVWX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CisJfQorCXNreTJfd3JpdGU4KGh3LCBTVEFUX0ZJRk9fV00sIGVjbWQtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKTsKKworCWlmIChlY21kLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEgPT0gMCkKKwkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfSVNSX1RJTUVSX0NUUkwsIFRJTV9TVE9QKTsKKwllbHNlIHsKKwkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX1RYX1RJTUVSX0lOSSwKKwkJCSAgICAgc2t5Ml91czJjbGsoaHcsIGVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSkpOworCQlza3kyX3dyaXRlOChodywgU1RBVF9JU1JfVElNRVJfQ1RSTCwgVElNX1NUQVJUKTsKKwl9CisJc2t5Ml93cml0ZTgoaHcsIFNUQVRfRklGT19JU1JfV00sIGVjbWQtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNreTJfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisKKwllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBSWF9NQVhfUEVORElORzsKKwllcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CisJZXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKwllcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBUWF9SSU5HX1NJWkUgLSAxOworCisJZXJpbmctPnJ4X3BlbmRpbmcgPSBza3kyLT5yeF9wZW5kaW5nOworCWVyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKKwllcmluZy0+dHhfcGVuZGluZyA9IHNreTItPnR4X3BlbmRpbmc7Cit9CisKK3N0YXRpYyBpbnQgc2t5Ml9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQoreworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCisJaWYgKGVyaW5nLT5yeF9wZW5kaW5nID4gUlhfTUFYX1BFTkRJTkcgfHwKKwkgICAgZXJpbmctPnJ4X3BlbmRpbmcgPCA4IHx8CisJICAgIGVyaW5nLT50eF9wZW5kaW5nIDwgTUFYX1NLQl9UWF9MRSB8fAorCSAgICBlcmluZy0+dHhfcGVuZGluZyA+IFRYX1JJTkdfU0laRSAtIDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJc2t5Ml9kb3duKGRldik7CisKKwlza3kyLT5yeF9wZW5kaW5nID0gZXJpbmctPnJ4X3BlbmRpbmc7CisJc2t5Mi0+dHhfcGVuZGluZyA9IGVyaW5nLT50eF9wZW5kaW5nOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSBza3kyX3VwKGRldik7CisJCWlmIChlcnIpCisJCQlkZXZfY2xvc2UoZGV2KTsKKwkJZWxzZQorCQkJc2t5Ml9zZXRfbXVsdGljYXN0KGRldik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBza3kyX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAweDQwMDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIGNvcHkgb2YgY29udHJvbCByZWdpc3RlciByZWdpb24KKyAqIE5vdGU6IGFjY2VzcyB0byB0aGUgUkFNIGFkZHJlc3MgcmVnaXN0ZXIgc2V0IHdpbGwgY2F1c2UgdGltZW91dHMuCisgKi8KK3N0YXRpYyB2b2lkIHNreTJfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywKKwkJCSAgdm9pZCAqcCkKK3sKKwljb25zdCBzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljb25zdCB2b2lkIF9faW9tZW0gKmlvID0gc2t5Mi0+aHctPnJlZ3M7CisKKwlCVUdfT04ocmVncy0+bGVuIDwgQjNfUklfV1RPX1IxKTsKKwlyZWdzLT52ZXJzaW9uID0gMTsKKwltZW1zZXQocCwgMCwgcmVncy0+bGVuKTsKKworCW1lbWNweV9mcm9taW8ocCwgaW8sIEIzX1JBTV9BRERSKTsKKworCW1lbWNweV9mcm9taW8ocCArIEIzX1JJX1dUT19SMSwKKwkJICAgICAgaW8gKyBCM19SSV9XVE9fUjEsCisJCSAgICAgIHJlZ3MtPmxlbiAtIEIzX1JJX1dUT19SMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgc2t5Ml9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzID0gc2t5Ml9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncyA9IHNreTJfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyA9IHNreTJfZ2V0X2RydmluZm8sCisJLmdldF9tc2dsZXZlbCA9IHNreTJfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgPSBza3kyX3NldF9tc2dsZXZlbCwKKwkubndheV9yZXNldCAgID0gc2t5Ml9ud2F5X3Jlc2V0LAorCS5nZXRfcmVnc19sZW4gPSBza3kyX2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MgPSBza3kyX2dldF9yZWdzLAorCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCisJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisJLmdldF9yeF9jc3VtID0gc2t5Ml9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gPSBza3kyX3NldF9yeF9jc3VtLAorCS5nZXRfc3RyaW5ncyA9IHNreTJfZ2V0X3N0cmluZ3MsCisJLmdldF9jb2FsZXNjZSA9IHNreTJfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UgPSBza3kyX3NldF9jb2FsZXNjZSwKKwkuZ2V0X3JpbmdwYXJhbSA9IHNreTJfZ2V0X3JpbmdwYXJhbSwKKwkuc2V0X3JpbmdwYXJhbSA9IHNreTJfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3BhdXNlcGFyYW0gPSBza3kyX2dldF9wYXVzZXBhcmFtLAorCS5zZXRfcGF1c2VwYXJhbSA9IHNreTJfc2V0X3BhdXNlcGFyYW0sCisjaWZkZWYgQ09ORklHX1BNCisJLmdldF93b2wgPSBza3kyX2dldF93b2wsCisJLnNldF93b2wgPSBza3kyX3NldF93b2wsCisjZW5kaWYKKwkucGh5c19pZCA9IHNreTJfcGh5c19pZCwKKwkuZ2V0X3N0YXRzX2NvdW50ID0gc2t5Ml9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzID0gc2t5Ml9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3Blcm1fYWRkcgk9IGV0aHRvb2xfb3BfZ2V0X3Blcm1fYWRkciwKK307CisKKy8qIEluaXRpYWxpemUgbmV0d29yayBkZXZpY2UgKi8KK3N0YXRpYyBfX2RldmluaXQgc3RydWN0IG5ldF9kZXZpY2UgKnNreTJfaW5pdF9uZXRkZXYoc3RydWN0IHNreTJfaHcgKmh3LAorCQkJCQkJICAgICB1bnNpZ25lZCBwb3J0LCBpbnQgaGlnaG1lbSkKK3sKKwlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnNreTIpKTsKKworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2t5MiBldGhlcmRldiBhbGxvYyBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJU0VUX01PRFVMRV9PV05FUihkZXYpOworCVNFVF9ORVRERVZfREVWKGRldiwgJmh3LT5wZGV2LT5kZXYpOworCWRldi0+aXJxID0gaHctPnBkZXYtPmlycTsKKwlkZXYtPm9wZW4gPSBza3kyX3VwOworCWRldi0+c3RvcCA9IHNreTJfZG93bjsKKwlkZXYtPmRvX2lvY3RsID0gc2t5Ml9pb2N0bDsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNreTJfeG1pdF9mcmFtZTsKKwlkZXYtPmdldF9zdGF0cyA9IHNreTJfZ2V0X3N0YXRzOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2t5Ml9zZXRfbXVsdGljYXN0OworCWRldi0+c2V0X21hY19hZGRyZXNzID0gc2t5Ml9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5jaGFuZ2VfbXR1ID0gc2t5Ml9jaGFuZ2VfbXR1OworCVNFVF9FVEhUT09MX09QUyhkZXYsICZza3kyX2V0aHRvb2xfb3BzKTsKKwlkZXYtPnR4X3RpbWVvdXQgPSBza3kyX3R4X3RpbWVvdXQ7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1dBVENIRE9HOworCWlmIChwb3J0ID09IDApCisJCWRldi0+cG9sbCA9IHNreTJfcG9sbDsKKwlkZXYtPndlaWdodCA9IE5BUElfV0VJR0hUOworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBza3kyX25ldHBvbGw7CisjZW5kaWYKKworCXNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCXNreTItPm5ldGRldiA9IGRldjsKKwlza3kyLT5odyA9IGh3OworCXNreTItPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2cpOworCisJc3Bpbl9sb2NrX2luaXQoJnNreTItPnR4X2xvY2spOworCS8qIEF1dG8gc3BlZWQgYW5kIGZsb3cgY29udHJvbCAqLworCXNreTItPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwlza3kyLT50eF9wYXVzZSA9IDE7CisJc2t5Mi0+cnhfcGF1c2UgPSAxOworCXNreTItPmR1cGxleCA9IC0xOworCXNreTItPnNwZWVkID0gLTE7CisJc2t5Mi0+YWR2ZXJ0aXNpbmcgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7CisKKyAJLyogUmVjZWl2ZSBjaGVja3N1bSBkaXNhYmxlZCBmb3IgWXVrb24gWEwKKwkgKiBiZWNhdXNlIG9mIG9ic2VydmVkIHByb2JsZW1zIHdpdGggaW5jb3JyZWN0CisJICogdmFsdWVzIHdoZW4gbXVsdGlwbGUgcGFja2V0cyBhcmUgcmVjZWl2ZWQgaW4gb25lIGludGVycnVwdAorCSAqLworCXNreTItPnJ4X2NzdW0gPSAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9YTCk7CisKKwlJTklUX1dPUksoJnNreTItPnBoeV90YXNrLCBza3kyX3BoeV90YXNrLCBza3kyKTsKKwlpbml0X01VVEVYKCZza3kyLT5waHlfc2VtYSk7CisJc2t5Mi0+dHhfcGVuZGluZyA9IFRYX0RFRl9QRU5ESU5HOworCXNreTItPnJ4X3BlbmRpbmcgPSBpc19lY19hMShodykgPyA4IDogUlhfREVGX1BFTkRJTkc7CisJc2t5Mi0+cnhfYnVmc2l6ZSA9IHNreTJfYnVmX3NpemUoRVRIX0RBVEFfTEVOKTsKKworCWh3LT5kZXZbcG9ydF0gPSBkZXY7CisKKwlza3kyLT5wb3J0ID0gcG9ydDsKKworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworCWlmIChody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX0VDX1UpCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJaWYgKGhpZ2htZW0pCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKKworI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAorCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOworCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHNreTJfdmxhbl9yeF9yZWdpc3RlcjsKKwlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBza3kyX3ZsYW5fcnhfa2lsbF92aWQ7CisjZW5kaWYKKworCS8qIHJlYWQgdGhlIG1hYyBhZGRyZXNzICovCisJbWVtY3B5X2Zyb21pbyhkZXYtPmRldl9hZGRyLCBody0+cmVncyArIEIyX01BQ18xICsgcG9ydCAqIDgsIEVUSF9BTEVOKTsKKwltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOworCisJLyogZGV2aWNlIGlzIG9mZiB1bnRpbCBsaW5rIGRldGVjdGlvbiAqLworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJcmV0dXJuIGRldjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNreTJfc2hvd19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobmV0aWZfbXNnX3Byb2JlKHNreTIpKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGFkZHIgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsCisJCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAorCQkgICAgICAgZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNreTJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAqZGV2MSA9IE5VTEw7CisJc3RydWN0IHNreTJfaHcgKmh3OworCWludCBlcnIsIHBtX2NhcCwgdXNpbmdfZGFjID0gMDsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qIEZpbmQgcG93ZXItbWFuYWdlbWVudCBjYXBhYmlsaXR5LiAqLworCXBtX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QTSk7CisJaWYgKHBtX2NhcCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIFBvd2VyTWFuYWdlbWVudCBjYXBhYmlsaXR5LCAiCisJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVnaW9uczsKKwl9CisKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpIHsKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJCWlmICghZXJyKQorCQkJdXNpbmdfZGFjID0gMTsKKwl9CisKKwlpZiAoIXVzaW5nX2RhYykgeworCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgbm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iLAorCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJCX0KKwl9CisjaWZkZWYgX19CSUdfRU5ESUFOCisJLyogYnl0ZSBzd2FwIGRlc2NyaXB0b3JzIGluIGhhcmR3YXJlICovCisJeworCQl1MzIgcmVnOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzIsICZyZWcpOworCQlyZWcgfD0gUENJX1JFVl9ERVNDOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9ERVZfUkVHMiwgcmVnKTsKKwl9CisjZW5kaWYKKworCWVyciA9IC1FTk9NRU07CisJaHcgPSBrbWFsbG9jKHNpemVvZigqaHcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh3KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RydWN0XG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOworCX0KKworCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOworCWh3LT5wZGV2ID0gcGRldjsKKworCWh3LT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgMHg0MDAwKTsKKwlpZiAoIWh3LT5yZWdzKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWdvdG8gZXJyX291dF9mcmVlX2h3OworCX0KKwlody0+cG1fY2FwID0gcG1fY2FwOworCisJZXJyID0gc2t5Ml9yZXNldChodyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2lvdW5tYXA7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAidiVzIGFkZHIgMHglbHggaXJxICVkIFl1a29uLSVzICgweCV4KSByZXYgJWRcbiIsCisJICAgICAgIERSVl9WRVJTSU9OLCBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBkZXYtPmlycSwKKwkgICAgICAgeXVrb24yX25hbWVbaHctPmNoaXBfaWQgLSBDSElQX0lEX1lVS09OX1hMXSwKKwkgICAgICAgaHctPmNoaXBfaWQsIGh3LT5jaGlwX3Jldik7CisKKwlkZXYgPSBza3kyX2luaXRfbmV0ZGV2KGh3LCAwLCB1c2luZ19kYWMpOworCWlmICghZGV2KQorCQlnb3RvIGVycl9vdXRfZnJlZV9wY2k7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OworCX0KKworCXNreTJfc2hvd19hZGRyKGRldik7CisKKwlpZiAoaHctPnBvcnRzID4gMSAmJiAoZGV2MSA9IHNreTJfaW5pdF9uZXRkZXYoaHcsIDEsIHVzaW5nX2RhYykpKSB7CisJCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2MSkgPT0gMCkKKwkJCXNreTJfc2hvd19hZGRyKGRldjEpOworCQllbHNlIHsKKwkJCS8qIEZhaWx1cmUgdG8gcmVnaXN0ZXIgc2Vjb25kIHBvcnQgbmVlZCBub3QgYmUgZmF0YWwgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkgICAgICAgInJlZ2lzdGVyIG9mIHNlY29uZCBwb3J0IGZhaWxlZFxuIik7CisJCQlody0+ZGV2WzFdID0gTlVMTDsKKwkJCWZyZWVfbmV0ZGV2KGRldjEpOworCQl9CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBza3kyX2ludHIsIFNBX1NISVJRLCBEUlZfTkFNRSwgaHcpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNhbm5vdCBhc3NpZ24gaXJxICVkXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CisJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyOworCX0KKworCWh3LT5pbnRyX21hc2sgPSBZMl9JU19CQVNFOworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfdW5yZWdpc3RlcjoKKwlpZiAoZGV2MSkgeworCQl1bnJlZ2lzdGVyX25ldGRldihkZXYxKTsKKwkJZnJlZV9uZXRkZXYoZGV2MSk7CisJfQorCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CitlcnJfb3V0X2ZyZWVfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KGRldik7CitlcnJfb3V0X2ZyZWVfcGNpOgorCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19SU1RfU0VUKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGh3LT5wZGV2LCBTVEFUVVNfTEVfQllURVMsIGh3LT5zdF9sZSwgaHctPnN0X2RtYSk7CitlcnJfb3V0X2lvdW5tYXA6CisJaW91bm1hcChody0+cmVncyk7CitlcnJfb3V0X2ZyZWVfaHc6CisJa2ZyZWUoaHcpOworZXJyX291dF9mcmVlX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlcnJfb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBza3kyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjAsICpkZXYxOworCisJaWYgKCFodykKKwkJcmV0dXJuOworCisJZGV2MCA9IGh3LT5kZXZbMF07CisJZGV2MSA9IGh3LT5kZXZbMV07CisJaWYgKGRldjEpCisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldjEpOworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldjApOworCisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwlza3kyX3NldF9wb3dlcl9zdGF0ZShodywgUENJX0QzaG90KTsKKwlza3kyX3dyaXRlMTYoaHcsIEIwX1kyTEVELCBMRURfU1RBVF9PRkYpOworCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19SU1RfU0VUKTsKKwlza3kyX3JlYWQ4KGh3LCBCMF9DVFNUKTsKKworCWZyZWVfaXJxKHBkZXYtPmlycSwgaHcpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX0xFX0JZVEVTLCBody0+c3RfbGUsIGh3LT5zdF9kbWEpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJaWYgKGRldjEpCisJCWZyZWVfbmV0ZGV2KGRldjEpOworCWZyZWVfbmV0ZGV2KGRldjApOworCWlvdW5tYXAoaHctPnJlZ3MpOworCWtmcmVlKGh3KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBza3kyX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOworCisJCWlmIChkZXYpIHsKKwkJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQkJCWNvbnRpbnVlOworCisJCQlza3kyX2Rvd24oZGV2KTsKKwkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwkJfQorCX0KKworCXJldHVybiBza3kyX3NldF9wb3dlcl9zdGF0ZShodywgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworfQorCitzdGF0aWMgaW50IHNreTJfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBza3kyX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOworCXNreTJfc2V0X3Bvd2VyX3N0YXRlKGh3LCBQQ0lfRDApOworCisJc2t5Ml9yZXNldChodyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOworCQlpZiAoZGV2KSB7CisJCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCQkJCWlmIChza3kyX3VwKGRldikpCisJCQkJCWRldl9jbG9zZShkZXYpOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBza3kyX2RyaXZlciA9IHsKKwkubmFtZSA9IERSVl9OQU1FLAorCS5pZF90YWJsZSA9IHNreTJfaWRfdGFibGUsCisJLnByb2JlID0gc2t5Ml9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2t5Ml9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc2t5Ml9zdXNwZW5kLAorCS5yZXN1bWUgPSBza3kyX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgc2t5Ml9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZza3kyX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBza3kyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZza3kyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNreTJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoc2t5Ml9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCBZdWtvbiAyIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIEhlbW1pbmdlciA8c2hlbW1pbmdlckBvc2RsLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTUxODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5oCkBAIC0wLDAgKzEsMTkyMiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgbmV3IE1hcnZlbGwgWXVrb24gMiBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NLWTJfSAorI2RlZmluZSBfU0tZMl9ICisKKy8qIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDSV9ERVZfUkVHMQkweDQwCisjZGVmaW5lIFBDSV9ERVZfUkVHMgkweDQ0CisjZGVmaW5lIFBDSV9ERVZfU1RBVFVTICAweDdjCisjZGVmaW5lIFBDSV9PU19QQ0lfWCAgICAoMTw8MjYpCisKKyNkZWZpbmUgUEVYX0xOS19TVEFUCTB4ZjIKKyNkZWZpbmUgUEVYX1VOQ19FUlJfU1RBVCAweDEwNAorI2RlZmluZSBQRVhfREVWX0NUUkwJMHhlOAorCisvKiBZdWtvbi0yICovCitlbnVtIHBjaV9kZXZfcmVnXzEgeworCVBDSV9ZMl9QSUdfRU5BCSA9IDE8PDMxLCAvKiBFbmFibGUgUGx1Zy1pbi1HbyAoWVVLT04tMikgKi8KKwlQQ0lfWTJfRExMX0RJUwkgPSAxPDwzMCwgLyogRGlzYWJsZSBQQ0kgRExMIChZVUtPTi0yKSAqLworCVBDSV9ZMl9QSFkyX0NPTUEgPSAxPDwyOSwgLyogU2V0IFBIWSAyIHRvIENvbWEgTW9kZSAoWVVLT04tMikgKi8KKwlQQ0lfWTJfUEhZMV9DT01BID0gMTw8MjgsIC8qIFNldCBQSFkgMSB0byBDb21hIE1vZGUgKFlVS09OLTIpICovCisJUENJX1kyX1BIWTJfUE9XRCA9IDE8PDI3LCAvKiBTZXQgUEhZIDIgdG8gUG93ZXIgRG93biAoWVVLT04tMikgKi8KKwlQQ0lfWTJfUEhZMV9QT1dEID0gMTw8MjYsIC8qIFNldCBQSFkgMSB0byBQb3dlciBEb3duIChZVUtPTi0yKSAqLworfTsKKworZW51bSBwY2lfZGV2X3JlZ18yIHsKKwlQQ0lfVlBEX1dSX1RIUgk9IDB4ZmZMPDwyNCwJLyogQml0IDMxLi4yNDoJVlBEIFdyaXRlIFRocmVzaG9sZCAqLworCVBDSV9ERVZfU0VMCT0gMHg3Zkw8PDE3LAkvKiBCaXQgMjMuLjE3OglFRVBST00gRGV2aWNlIFNlbGVjdCAqLworCVBDSV9WUERfUk9NX1NaCT0gN0w8PDE0LAkvKiBCaXQgMTYuLjE0OglWUEQgUk9NIFNpemUJKi8KKworCVBDSV9QQVRDSF9ESVIJPSAweGZMPDw4LAkvKiBCaXQgMTEuLiA4OglFeHQgUGF0Y2hlcyBkaXIgMy4uMCAqLworCVBDSV9FWFRfUEFUQ0hTCT0gMHhmTDw8NCwJLyogQml0CTcuLiA0OglFeHRlbmRlZCBQYXRjaGVzIDMuLjAgKi8KKwlQQ0lfRU5fRFVNTVlfUkQJPSAxPDwzLAkJLyogRW5hYmxlIER1bW15IFJlYWQgKi8KKwlQQ0lfUkVWX0RFU0MJPSAxPDwyLAkJLyogUmV2ZXJzZSBEZXNjLiBCeXRlcyAqLworCisJUENJX1VTRURBVEE2NAk9IDE8PDAsCQkvKiBVc2UgNjRCaXQgRGF0YSBidXMgZXh0ICovCit9OworCisKKyNkZWZpbmUgUENJX1NUQVRVU19FUlJPUl9CSVRTIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSB8IFwKKwkJCSAgICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcCisJCQkgICAgICAgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUIHwgXAorCQkJICAgICAgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8IFwKKwkJCSAgICAgICBQQ0lfU1RBVFVTX1BBUklUWSkKKworZW51bSBwZXhfZGV2X2N0cmwgeworCVBFWF9EQ19NQVhfUlJTX01TSwk9IDc8PDEyLCAvKiBCaXQgMTQuLjEyOglNYXguIFJlYWQgUmVxdWVzdCBTaXplICovCisJUEVYX0RDX0VOX05PX1NOT09QCT0gMTw8MTEsLyogRW5hYmxlIE5vIFNub29wICovCisJUEVYX0RDX0VOX0FVWF9QT1cJPSAxPDwxMCwvKiBFbmFibGUgQVVYIFBvd2VyICovCisJUEVYX0RDX0VOX1BIQU5UT00JPSAxPDw5LAkvKiBFbmFibGUgUGhhbnRvbSBGdW5jdGlvbnMgKi8KKwlQRVhfRENfRU5fRVhUX1RBRwk9IDE8PDgsCS8qIEVuYWJsZSBFeHRlbmRlZCBUYWcgRmllbGQgKi8KKwlQRVhfRENfTUFYX1BMU19NU0sJPSA3PDw1LAkvKiBCaXQgIDcuLiA1OglNYXguIFBheWxvYWQgU2l6ZSBNYXNrICovCisJUEVYX0RDX0VOX1JFTF9PUkQJPSAxPDw0LAkvKiBFbmFibGUgUmVsYXhlZCBPcmRlcmluZyAqLworCVBFWF9EQ19FTl9VTlNfUlFfUlAJPSAxPDwzLAkvKiBFbmFibGUgVW5zdXBwb3J0ZWQgUmVxdWVzdCBSZXBvcnRpbmcgKi8KKwlQRVhfRENfRU5fRkFUX0VSX1JQCT0gMTw8MiwJLyogRW5hYmxlIEZhdGFsIEVycm9yIFJlcG9ydGluZyAqLworCVBFWF9EQ19FTl9ORkFfRVJfUlAJPSAxPDwxLAkvKiBFbmFibGUgTm9uLUZhdGFsIEVycm9yIFJlcG9ydGluZyAqLworCVBFWF9EQ19FTl9DT1JfRVJfUlAJPSAxPDwwLAkvKiBFbmFibGUgQ29ycmVjdGFibGUgRXJyb3IgUmVwb3J0aW5nICovCit9OworI2RlZmluZSAgUEVYX0RDX01BWF9SRF9SUV9TSVpFKHgpICgoKHgpPDwxMikgJiBQRVhfRENfTUFYX1JSU19NU0spCisKKy8qIFBFWF9VTkNfRVJSX1NUQVQJIFBFWCBVbmNvcnJlY3RhYmxlIEVycm9ycyBTdGF0dXMgUmVnaXN0ZXIgKFl1a29uLTIpICovCitlbnVtIHBleF9lcnIgeworCVBFWF9VTlNVUF9SRVEgCT0gMTw8MjAsIC8qIFVuc3VwcG9ydGVkIFJlcXVlc3QgRXJyb3IgKi8KKworCVBFWF9NQUxGT1JfVExQCT0gMTw8MTgsIC8qIE1hbGZvcm1lZCBUTFAgKi8KKworCVBFWF9VTkVYUF9DT01QCT0gMTw8MTYsIC8qIFVuZXhwZWN0ZWQgQ29tcGxldGlvbiAqLworCisJUEVYX0NPTVBfVE8JPSAxPDwxNCwgLyogQ29tcGxldGlvbiBUaW1lb3V0ICovCisJUEVYX0ZMT1dfQ1RSTF9QCT0gMTw8MTMsIC8qIEZsb3cgQ29udHJvbCBQcm90b2NvbCBFcnJvciAqLworCVBFWF9QT0lTX1RMUAk9IDE8PDEyLCAvKiBQb2lzb25lZCBUTFAgKi8KKworCVBFWF9EQVRBX0xJTktfUCA9IDE8PDQsCS8qIERhdGEgTGluayBQcm90b2NvbCBFcnJvciAqLworCVBFWF9GQVRBTF9FUlJPUlM9IChQRVhfTUFMRk9SX1RMUCB8IFBFWF9GTE9XX0NUUkxfUCB8IFBFWF9EQVRBX0xJTktfUCksCit9OworCisKK2VudW0gY3NyX3JlZ3MgeworCUIwX1JBUAkJPSAweDAwMDAsCisJQjBfQ1RTVAkJPSAweDAwMDQsCisJQjBfWTJMRUQJPSAweDAwMDUsCisJQjBfUE9XRVJfQ1RSTAk9IDB4MDAwNywKKwlCMF9JU1JDCQk9IDB4MDAwOCwKKwlCMF9JTVNLCQk9IDB4MDAwYywKKwlCMF9IV0VfSVNSQwk9IDB4MDAxMCwKKwlCMF9IV0VfSU1TSwk9IDB4MDAxNCwKKworCS8qIFNwZWNpYWwgSVNSIHJlZ2lzdGVycyAoWXVrb24tMiBvbmx5KSAqLworCUIwX1kyX1NQX0lTUkMyCT0gMHgwMDFjLAorCUIwX1kyX1NQX0lTUkMzCT0gMHgwMDIwLAorCUIwX1kyX1NQX0VJU1IJPSAweDAwMjQsCisJQjBfWTJfU1BfTElTUgk9IDB4MDAyOCwKKwlCMF9ZMl9TUF9JQ1IJPSAweDAwMmMsCisKKwlCMl9NQUNfMQk9IDB4MDEwMCwKKwlCMl9NQUNfMgk9IDB4MDEwOCwKKwlCMl9NQUNfMwk9IDB4MDExMCwKKwlCMl9DT05OX1RZUAk9IDB4MDExOCwKKwlCMl9QTURfVFlQCT0gMHgwMTE5LAorCUIyX01BQ19DRkcJPSAweDAxMWEsCisJQjJfQ0hJUF9JRAk9IDB4MDExYiwKKwlCMl9FXzAJCT0gMHgwMTFjLAorCisJQjJfWTJfQ0xLX0dBVEUgID0gMHgwMTFkLAorCUIyX1kyX0hXX1JFUwk9IDB4MDExZSwKKwlCMl9FXzMJCT0gMHgwMTFmLAorCUIyX1kyX0NMS19DVFJMCT0gMHgwMTIwLAorCisJQjJfVElfSU5JCT0gMHgwMTMwLAorCUIyX1RJX1ZBTAk9IDB4MDEzNCwKKwlCMl9USV9DVFJMCT0gMHgwMTM4LAorCUIyX1RJX1RFU1QJPSAweDAxMzksCisKKwlCMl9UU1RfQ1RSTDEJPSAweDAxNTgsCisJQjJfVFNUX0NUUkwyCT0gMHgwMTU5LAorCUIyX0dQX0lPCT0gMHgwMTVjLAorCisJQjJfSTJDX0NUUkwJPSAweDAxNjAsCisJQjJfSTJDX0RBVEEJPSAweDAxNjQsCisJQjJfSTJDX0lSUQk9IDB4MDE2OCwKKwlCMl9JMkNfU1cJPSAweDAxNmMsCisKKwlCM19SQU1fQUREUgk9IDB4MDE4MCwKKwlCM19SQU1fREFUQV9MTwk9IDB4MDE4NCwKKwlCM19SQU1fREFUQV9ISQk9IDB4MDE4OCwKKworLyogUkFNIEludGVyZmFjZSBSZWdpc3RlcnMgKi8KKy8qIFl1a29uLTI6IHVzZSBSQU1fQlVGRkVSKCkgdG8gYWNjZXNzIHRoZSBSQU0gYnVmZmVyICovCisvKgorICogVGhlIEhXLVNwZWMuIGNhbGxzIHRoaXMgcmVnaXN0ZXJzIFRpbWVvdXQgVmFsdWUgMC4uMTEuIEJ1dCB0aGlzIG5hbWVzIGFyZQorICogbm90IHVzYWJsZSBpbiBTVy4gUGxlYXNlIG5vdGljZSB0aGVzZSBhcmUgTk9UIHJlYWwgdGltZW91dHMsIHRoZXNlIGFyZQorICogdGhlIG51bWJlciBvZiBxV29yZHMgdHJhbnNmZXJyZWQgY29udGludW91c2x5LgorICovCisjZGVmaW5lIFJBTV9CVUZGRVIocG9ydCwgcmVnKQkocmVnIHwgKHBvcnQgPDw2KSkKKworCUIzX1JJX1dUT19SMQk9IDB4MDE5MCwKKwlCM19SSV9XVE9fWEExCT0gMHgwMTkxLAorCUIzX1JJX1dUT19YUzEJPSAweDAxOTIsCisJQjNfUklfUlRPX1IxCT0gMHgwMTkzLAorCUIzX1JJX1JUT19YQTEJPSAweDAxOTQsCisJQjNfUklfUlRPX1hTMQk9IDB4MDE5NSwKKwlCM19SSV9XVE9fUjIJPSAweDAxOTYsCisJQjNfUklfV1RPX1hBMgk9IDB4MDE5NywKKwlCM19SSV9XVE9fWFMyCT0gMHgwMTk4LAorCUIzX1JJX1JUT19SMgk9IDB4MDE5OSwKKwlCM19SSV9SVE9fWEEyCT0gMHgwMTlhLAorCUIzX1JJX1JUT19YUzIJPSAweDAxOWIsCisJQjNfUklfVE9fVkFMCT0gMHgwMTljLAorCUIzX1JJX0NUUkwJPSAweDAxYTAsCisJQjNfUklfVEVTVAk9IDB4MDFhMiwKKwlCM19NQV9UT0lOSV9SWDEJPSAweDAxYjAsCisJQjNfTUFfVE9JTklfUlgyCT0gMHgwMWIxLAorCUIzX01BX1RPSU5JX1RYMQk9IDB4MDFiMiwKKwlCM19NQV9UT0lOSV9UWDIJPSAweDAxYjMsCisJQjNfTUFfVE9WQUxfUlgxCT0gMHgwMWI0LAorCUIzX01BX1RPVkFMX1JYMgk9IDB4MDFiNSwKKwlCM19NQV9UT1ZBTF9UWDEJPSAweDAxYjYsCisJQjNfTUFfVE9WQUxfVFgyCT0gMHgwMWI3LAorCUIzX01BX1RPX0NUUkwJPSAweDAxYjgsCisJQjNfTUFfVE9fVEVTVAk9IDB4MDFiYSwKKwlCM19NQV9SQ0lOSV9SWDEJPSAweDAxYzAsCisJQjNfTUFfUkNJTklfUlgyCT0gMHgwMWMxLAorCUIzX01BX1JDSU5JX1RYMQk9IDB4MDFjMiwKKwlCM19NQV9SQ0lOSV9UWDIJPSAweDAxYzMsCisJQjNfTUFfUkNWQUxfUlgxCT0gMHgwMWM0LAorCUIzX01BX1JDVkFMX1JYMgk9IDB4MDFjNSwKKwlCM19NQV9SQ1ZBTF9UWDEJPSAweDAxYzYsCisJQjNfTUFfUkNWQUxfVFgyCT0gMHgwMWM3LAorCUIzX01BX1JDX0NUUkwJPSAweDAxYzgsCisJQjNfTUFfUkNfVEVTVAk9IDB4MDFjYSwKKwlCM19QQV9UT0lOSV9SWDEJPSAweDAxZDAsCisJQjNfUEFfVE9JTklfUlgyCT0gMHgwMWQ0LAorCUIzX1BBX1RPSU5JX1RYMQk9IDB4MDFkOCwKKwlCM19QQV9UT0lOSV9UWDIJPSAweDAxZGMsCisJQjNfUEFfVE9WQUxfUlgxCT0gMHgwMWUwLAorCUIzX1BBX1RPVkFMX1JYMgk9IDB4MDFlNCwKKwlCM19QQV9UT1ZBTF9UWDEJPSAweDAxZTgsCisJQjNfUEFfVE9WQUxfVFgyCT0gMHgwMWVjLAorCUIzX1BBX0NUUkwJPSAweDAxZjAsCisJQjNfUEFfVEVTVAk9IDB4MDFmMiwKKworCVkyX0NGR19TUEMJPSAweDFjMDAsCit9OworCisvKglCMF9DVFNUCQkJMTYgYml0CUNvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyICovCitlbnVtIHsKKwlZMl9WTUFJTl9BVkFJTAk9IDE8PDE3LC8qIFZNQUlOIGF2YWlsYWJsZSAoWVVLT04tMiBvbmx5KSAqLworCVkyX1ZBVVhfQVZBSUwJPSAxPDwxNiwvKiBWQVVYIGF2YWlsYWJsZSAoWVVLT04tMiBvbmx5KSAqLworCVkyX0FTRl9FTkFCTEUJPSAxPDwxMywvKiBBU0YgVW5pdCBFbmFibGUgKFlVS09OLTIgb25seSkgKi8KKwlZMl9BU0ZfRElTQUJMRQk9IDE8PDEyLC8qIEFTRiBVbml0IERpc2FibGUgKFlVS09OLTIgb25seSkgKi8KKwlZMl9DTEtfUlVOX0VOQQk9IDE8PDExLC8qIENMS19SVU4gRW5hYmxlICAoWVVLT04tMiBvbmx5KSAqLworCVkyX0NMS19SVU5fRElTCT0gMTw8MTAsLyogQ0xLX1JVTiBEaXNhYmxlIChZVUtPTi0yIG9ubHkpICovCisJWTJfTEVEX1NUQVRfT04JPSAxPDw5LCAvKiBTdGF0dXMgTEVEIE9uICAoWVVLT04tMiBvbmx5KSAqLworCVkyX0xFRF9TVEFUX09GRgk9IDE8PDgsIC8qIFN0YXR1cyBMRUQgT2ZmIChZVUtPTi0yIG9ubHkpICovCisKKwlDU19TVF9TV19JUlEJPSAxPDw3LAkvKiBTZXQgSVJRIFNXIFJlcXVlc3QgKi8KKwlDU19DTF9TV19JUlEJPSAxPDw2LAkvKiBDbGVhciBJUlEgU1cgUmVxdWVzdCAqLworCUNTX1NUT1BfRE9ORQk9IDE8PDUsCS8qIFN0b3AgTWFzdGVyIGlzIGZpbmlzaGVkICovCisJQ1NfU1RPUF9NQVNUCT0gMTw8NCwJLyogQ29tbWFuZCBCaXQgdG8gc3RvcCB0aGUgbWFzdGVyICovCisJQ1NfTVJTVF9DTFIJPSAxPDwzLAkvKiBDbGVhciBNYXN0ZXIgcmVzZXQJKi8KKwlDU19NUlNUX1NFVAk9IDE8PDIsCS8qIFNldCBNYXN0ZXIgcmVzZXQJKi8KKwlDU19SU1RfQ0xSCT0gMTw8MSwJLyogQ2xlYXIgU29mdHdhcmUgcmVzZXQJKi8KKwlDU19SU1RfU0VUCT0gMSwJLyogU2V0ICAgU29mdHdhcmUgcmVzZXQJKi8KK307CisKKy8qCUIwX0xFRAkJCSA4IEJpdAlMRUQgcmVnaXN0ZXIgKi8KK2VudW0geworLyogQml0ICA3Li4gMjoJcmVzZXJ2ZWQgKi8KKwlMRURfU1RBVF9PTgk9IDE8PDEsCS8qIFN0YXR1cyBMRUQgb24JKi8KKwlMRURfU1RBVF9PRkYJPSAxLAkvKiBTdGF0dXMgTEVEIG9mZgkqLworfTsKKworLyoJQjBfUE9XRVJfQ1RSTAkgOCBCaXQJUG93ZXIgQ29udHJvbCByZWcgKFlVS09OIG9ubHkpICovCitlbnVtIHsKKwlQQ19WQVVYX0VOQQk9IDE8PDcsCS8qIFN3aXRjaCBWQVVYIEVuYWJsZSAgKi8KKwlQQ19WQVVYX0RJUwk9IDE8PDYsCS8qIFN3aXRjaCBWQVVYIERpc2FibGUgKi8KKwlQQ19WQ0NfRU5BCT0gMTw8NSwJLyogU3dpdGNoIFZDQyBFbmFibGUgICovCisJUENfVkNDX0RJUwk9IDE8PDQsCS8qIFN3aXRjaCBWQ0MgRGlzYWJsZSAqLworCVBDX1ZBVVhfT04JPSAxPDwzLAkvKiBTd2l0Y2ggVkFVWCBPbiAgKi8KKwlQQ19WQVVYX09GRgk9IDE8PDIsCS8qIFN3aXRjaCBWQVVYIE9mZiAqLworCVBDX1ZDQ19PTgk9IDE8PDEsCS8qIFN3aXRjaCBWQ0MgT24gICovCisJUENfVkNDX09GRgk9IDE8PDAsCS8qIFN3aXRjaCBWQ0MgT2ZmICovCit9OworCisvKglCMl9JUlFNX01TSyAJMzIgYml0CUlSUSBNb2RlcmF0aW9uIE1hc2sgKi8KKworLyoJQjBfWTJfU1BfSVNSQzIJMzIgYml0CVNwZWNpYWwgSW50ZXJydXB0IFNvdXJjZSBSZWcgMiAqLworLyoJQjBfWTJfU1BfSVNSQzMJMzIgYml0CVNwZWNpYWwgSW50ZXJydXB0IFNvdXJjZSBSZWcgMyAqLworLyoJQjBfWTJfU1BfRUlTUgkzMiBiaXQJRW50ZXIgSVNSIFJlZyAqLworLyoJQjBfWTJfU1BfTElTUgkzMiBiaXQJTGVhdmUgSVNSIFJlZyAqLworZW51bSB7CisJWTJfSVNfSFdfRVJSCT0gMTw8MzEsCS8qIEludGVycnVwdCBIVyBFcnJvciAqLworCVkyX0lTX1NUQVRfQk1VCT0gMTw8MzAsCS8qIFN0YXR1cyBCTVUgSW50ZXJydXB0ICovCisJWTJfSVNfQVNGCT0gMTw8MjksCS8qIEFTRiBzdWJzeXN0ZW0gSW50ZXJydXB0ICovCisKKwlZMl9JU19QT0xMX0NISwk9IDE8PDI3LAkvKiBDaGVjayBJUlEgZnJvbSBwb2xsaW5nIHVuaXQgKi8KKwlZMl9JU19UV1NJX1JEWQk9IDE8PDI2LAkvKiBJUlEgb24gZW5kIG9mIFRXU0kgVHggKi8KKwlZMl9JU19JUlFfU1cJPSAxPDwyNSwJLyogU1cgZm9yY2VkIElSUQkqLworCVkyX0lTX1RJTUlOVAk9IDE8PDI0LAkvKiBJUlEgZnJvbSBUaW1lcgkqLworCisJWTJfSVNfSVJRX1BIWTIJPSAxPDwxMiwJLyogSW50ZXJydXB0IGZyb20gUEhZIDIgKi8KKwlZMl9JU19JUlFfTUFDMgk9IDE8PDExLAkvKiBJbnRlcnJ1cHQgZnJvbSBNQUMgMiAqLworCVkyX0lTX0NIS19SWDIJPSAxPDwxMCwJLyogRGVzY3JpcHRvciBlcnJvciBSeCAyICovCisJWTJfSVNfQ0hLX1RYUzIJPSAxPDw5LAkJLyogRGVzY3JpcHRvciBlcnJvciBUWFMgMiAqLworCVkyX0lTX0NIS19UWEEyCT0gMTw8OCwJCS8qIERlc2NyaXB0b3IgZXJyb3IgVFhBIDIgKi8KKworCVkyX0lTX0lSUV9QSFkxCT0gMTw8NCwJCS8qIEludGVycnVwdCBmcm9tIFBIWSAxICovCisJWTJfSVNfSVJRX01BQzEJPSAxPDwzLAkJLyogSW50ZXJydXB0IGZyb20gTUFDIDEgKi8KKwlZMl9JU19DSEtfUlgxCT0gMTw8MiwJCS8qIERlc2NyaXB0b3IgZXJyb3IgUnggMSAqLworCVkyX0lTX0NIS19UWFMxCT0gMTw8MSwJCS8qIERlc2NyaXB0b3IgZXJyb3IgVFhTIDEgKi8KKwlZMl9JU19DSEtfVFhBMQk9IDE8PDAsCQkvKiBEZXNjcmlwdG9yIGVycm9yIFRYQSAxICovCisKKwlZMl9JU19CQVNFCT0gWTJfSVNfSFdfRVJSIHwgWTJfSVNfU1RBVF9CTVUgfAorCQkJICBZMl9JU19QT0xMX0NISyB8IFkyX0lTX1RXU0lfUkRZIHwKKwkJCSAgWTJfSVNfSVJRX1NXIHwgWTJfSVNfVElNSU5ULAorCVkyX0lTX1BPUlRfMQk9IFkyX0lTX0lSUV9QSFkxIHwgWTJfSVNfSVJRX01BQzEgfAorCQkJICBZMl9JU19DSEtfUlgxIHwgWTJfSVNfQ0hLX1RYQTEgfCBZMl9JU19DSEtfVFhTMSwKKwlZMl9JU19QT1JUXzIJPSBZMl9JU19JUlFfUEhZMiB8IFkyX0lTX0lSUV9NQUMyIHwKKwkJCSAgWTJfSVNfQ0hLX1JYMiB8IFkyX0lTX0NIS19UWEEyIHwgWTJfSVNfQ0hLX1RYUzIsCit9OworCisvKglCMl9JUlFNX0hXRV9NU0sJMzIgYml0CUlSUSBNb2RlcmF0aW9uIEhXIEVycm9yIE1hc2sgKi8KK2VudW0geworCUlTX0VSUl9NU0sJPSAweDAwMDAzZmZmLC8qIAkJQWxsIEVycm9yIGJpdHMgKi8KKworCUlTX0lSUV9USVNUX09WCT0gMTw8MTMsIC8qIFRpbWUgU3RhbXAgVGltZXIgT3ZlcmZsb3cgKFlVS09OIG9ubHkpICovCisJSVNfSVJRX1NFTlNPUgk9IDE8PDEyLCAvKiBJUlEgZnJvbSBTZW5zb3IgKFlVS09OIG9ubHkpICovCisJSVNfSVJRX01TVF9FUlIJPSAxPDwxMSwgLyogSVJRIG1hc3RlciBlcnJvciBkZXRlY3RlZCAqLworCUlTX0lSUV9TVEFUCT0gMTw8MTAsIC8qIElSUSBzdGF0dXMgZXhjZXB0aW9uICovCisJSVNfTk9fU1RBVF9NMQk9IDE8PDksCS8qIE5vIFJ4IFN0YXR1cyBmcm9tIE1BQyAxICovCisJSVNfTk9fU1RBVF9NMgk9IDE8PDgsCS8qIE5vIFJ4IFN0YXR1cyBmcm9tIE1BQyAyICovCisJSVNfTk9fVElTVF9NMQk9IDE8PDcsCS8qIE5vIFRpbWUgU3RhbXAgZnJvbSBNQUMgMSAqLworCUlTX05PX1RJU1RfTTIJPSAxPDw2LAkvKiBObyBUaW1lIFN0YW1wIGZyb20gTUFDIDIgKi8KKwlJU19SQU1fUkRfUEFSCT0gMTw8NSwJLyogUkFNIFJlYWQgIFBhcml0eSBFcnJvciAqLworCUlTX1JBTV9XUl9QQVIJPSAxPDw0LAkvKiBSQU0gV3JpdGUgUGFyaXR5IEVycm9yICovCisJSVNfTTFfUEFSX0VSUgk9IDE8PDMsCS8qIE1BQyAxIFBhcml0eSBFcnJvciAqLworCUlTX00yX1BBUl9FUlIJPSAxPDwyLAkvKiBNQUMgMiBQYXJpdHkgRXJyb3IgKi8KKwlJU19SMV9QQVJfRVJSCT0gMTw8MSwJLyogUXVldWUgUjEgUGFyaXR5IEVycm9yICovCisJSVNfUjJfUEFSX0VSUgk9IDE8PDAsCS8qIFF1ZXVlIFIyIFBhcml0eSBFcnJvciAqLworfTsKKworLyogSGFyZHdhcmUgZXJyb3IgaW50ZXJydXB0IG1hc2sgZm9yIFl1a29uIDIgKi8KK2VudW0geworCVkyX0lTX1RJU1RfT1YJPSAxPDwyOSwvKiBUaW1lIFN0YW1wIFRpbWVyIG92ZXJmbG93IGludGVycnVwdCAqLworCVkyX0lTX1NFTlNPUgk9IDE8PDI4LCAvKiBTZW5zb3IgaW50ZXJydXB0ICovCisJWTJfSVNfTVNUX0VSUgk9IDE8PDI3LCAvKiBNYXN0ZXIgZXJyb3IgaW50ZXJydXB0ICovCisJWTJfSVNfSVJRX1NUQVQJPSAxPDwyNiwgLyogU3RhdHVzIGV4Y2VwdGlvbiBpbnRlcnJ1cHQgKi8KKwlZMl9JU19QQ0lfRVhQCT0gMTw8MjUsIC8qIFBDSS1FeHByZXNzIGludGVycnVwdCAqLworCVkyX0lTX1BDSV9ORVhQCT0gMTw8MjQsIC8qIFBDSS1FeHByZXNzIGVycm9yIHNpbWlsYXIgdG8gUENJIGVycm9yICovCisJCQkJCQkvKiBMaW5rIDIgKi8KKwlZMl9JU19QQVJfUkQyCT0gMTw8MTMsIC8qIFJlYWQgUkFNIHBhcml0eSBlcnJvciBpbnRlcnJ1cHQgKi8KKwlZMl9JU19QQVJfV1IyCT0gMTw8MTIsIC8qIFdyaXRlIFJBTSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0ICovCisJWTJfSVNfUEFSX01BQzIJPSAxPDwxMSwgLyogTUFDIGhhcmR3YXJlIGZhdWx0IGludGVycnVwdCAqLworCVkyX0lTX1BBUl9SWDIJPSAxPDwxMCwgLyogUGFyaXR5IEVycm9yIFJ4IFF1ZXVlIDIgKi8KKwlZMl9JU19UQ1BfVFhTMgk9IDE8PDksIC8qIFRDUCBsZW5ndGggbWlzbWF0Y2ggc3luYyBUeCBxdWV1ZSBJUlEgKi8KKwlZMl9JU19UQ1BfVFhBMgk9IDE8PDgsIC8qIFRDUCBsZW5ndGggbWlzbWF0Y2ggYXN5bmMgVHggcXVldWUgSVJRICovCisJCQkJCQkvKiBMaW5rIDEgKi8KKwlZMl9JU19QQVJfUkQxCT0gMTw8NSwgLyogUmVhZCBSQU0gcGFyaXR5IGVycm9yIGludGVycnVwdCAqLworCVkyX0lTX1BBUl9XUjEJPSAxPDw0LCAvKiBXcml0ZSBSQU0gcGFyaXR5IGVycm9yIGludGVycnVwdCAqLworCVkyX0lTX1BBUl9NQUMxCT0gMTw8MywgLyogTUFDIGhhcmR3YXJlIGZhdWx0IGludGVycnVwdCAqLworCVkyX0lTX1BBUl9SWDEJPSAxPDwyLCAvKiBQYXJpdHkgRXJyb3IgUnggUXVldWUgMSAqLworCVkyX0lTX1RDUF9UWFMxCT0gMTw8MSwgLyogVENQIGxlbmd0aCBtaXNtYXRjaCBzeW5jIFR4IHF1ZXVlIElSUSAqLworCVkyX0lTX1RDUF9UWEExCT0gMTw8MCwgLyogVENQIGxlbmd0aCBtaXNtYXRjaCBhc3luYyBUeCBxdWV1ZSBJUlEgKi8KKworCVkyX0hXRV9MMV9NQVNLCT0gWTJfSVNfUEFSX1JEMSB8IFkyX0lTX1BBUl9XUjEgfCBZMl9JU19QQVJfTUFDMSB8CisJCQkgIFkyX0lTX1BBUl9SWDEgfCBZMl9JU19UQ1BfVFhTMXwgWTJfSVNfVENQX1RYQTEsCisJWTJfSFdFX0wyX01BU0sJPSBZMl9JU19QQVJfUkQyIHwgWTJfSVNfUEFSX1dSMiB8IFkyX0lTX1BBUl9NQUMyIHwKKwkJCSAgWTJfSVNfUEFSX1JYMiB8IFkyX0lTX1RDUF9UWFMyfCBZMl9JU19UQ1BfVFhBMiwKKworCVkyX0hXRV9BTExfTUFTSwk9IFkyX0lTX1RJU1RfT1YgfCBZMl9JU19NU1RfRVJSIHwgWTJfSVNfSVJRX1NUQVQgfAorCQkJICBZMl9JU19QQ0lfRVhQIHwKKwkJCSAgWTJfSFdFX0wxX01BU0sgfCBZMl9IV0VfTDJfTUFTSywKK307CisKKy8qCUIyOF9EUFRfQ1RSTAkgOCBiaXQJRGVzY3JpcHRvciBQb2xsIFRpbWVyIEN0cmwgUmVnICovCitlbnVtIHsKKwlEUFRfU1RBUlQJPSAxPDwxLAorCURQVF9TVE9QCT0gMTw8MCwKK307CisKKy8qCUIyX1RTVF9DVFJMMQkgOCBiaXQJVGVzdCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KK2VudW0geworCVRTVF9GUkNfRFBFUlJfTVIgPSAxPDw3LCAvKiBmb3JjZSBEQVRBUEVSUiBvbiBNU1QgUkQgKi8KKwlUU1RfRlJDX0RQRVJSX01XID0gMTw8NiwgLyogZm9yY2UgREFUQVBFUlIgb24gTVNUIFdSICovCisJVFNUX0ZSQ19EUEVSUl9UUiA9IDE8PDUsIC8qIGZvcmNlIERBVEFQRVJSIG9uIFRSRyBSRCAqLworCVRTVF9GUkNfRFBFUlJfVFcgPSAxPDw0LCAvKiBmb3JjZSBEQVRBUEVSUiBvbiBUUkcgV1IgKi8KKwlUU1RfRlJDX0FQRVJSX00JID0gMTw8MywgLyogZm9yY2UgQUREUlBFUlIgb24gTVNUICovCisJVFNUX0ZSQ19BUEVSUl9UCSA9IDE8PDIsIC8qIGZvcmNlIEFERFJQRVJSIG9uIFRSRyAqLworCVRTVF9DRkdfV1JJVEVfT04gPSAxPDwxLCAvKiBFbmFibGUgIENvbmZpZyBSZWcgV1IgKi8KKwlUU1RfQ0ZHX1dSSVRFX09GRj0gMTw8MCwgLyogRGlzYWJsZSBDb25maWcgUmVnIFdSICovCit9OworCisvKglCMl9NQUNfQ0ZHCQkgOCBiaXQJTUFDIENvbmZpZ3VyYXRpb24gLyBDaGlwIFJldmlzaW9uICovCitlbnVtIHsKKwlDRkdfQ0hJUF9SX01TSwkgID0gMHhmPDw0LAkvKiBCaXQgNy4uIDQ6IENoaXAgUmV2aXNpb24gKi8KKwkJCQkJLyogQml0IDMuLiAyOglyZXNlcnZlZCAqLworCUNGR19ESVNfTTJfQ0xLCSAgPSAxPDwxLAkvKiBEaXNhYmxlIENsb2NrIGZvciAybmQgTUFDICovCisJQ0ZHX1NOR19NQUMJICA9IDE8PDAsCS8qIE1BQyBDb25maWc6IDA9MiBNQUNzIC8gMT0xIE1BQyovCit9OworCisvKglCMl9DSElQX0lECQkgOCBiaXQgCUNoaXAgSWRlbnRpZmljYXRpb24gTnVtYmVyICovCitlbnVtIHsKKwlDSElQX0lEX0dFTkVTSVMJICAgPSAweDBhLCAvKiBDaGlwIElEIGZvciBHRU5FU0lTICovCisJQ0hJUF9JRF9ZVUtPTgkgICA9IDB4YjAsIC8qIENoaXAgSUQgZm9yIFlVS09OICovCisJQ0hJUF9JRF9ZVUtPTl9MSVRFID0gMHhiMSwgLyogQ2hpcCBJRCBmb3IgWVVLT04tTGl0ZSAoUmV2LiBBMS1BMykgKi8KKwlDSElQX0lEX1lVS09OX0xQICAgPSAweGIyLCAvKiBDaGlwIElEIGZvciBZVUtPTi1MUCAqLworCUNISVBfSURfWVVLT05fWEwgICA9IDB4YjMsIC8qIENoaXAgSUQgZm9yIFlVS09OLTIgWEwgKi8KKwlDSElQX0lEX1lVS09OX0VDX1UgPSAweGI0LCAvKiBDaGlwIElEIGZvciBZVUtPTi0yIEVDIFVsdHJhICovCisJQ0hJUF9JRF9ZVUtPTl9FQyAgID0gMHhiNiwgLyogQ2hpcCBJRCBmb3IgWVVLT04tMiBFQyAqLworIAlDSElQX0lEX1lVS09OX0ZFICAgPSAweGI3LCAvKiBDaGlwIElEIGZvciBZVUtPTi0yIEZFICovCisKKwlDSElQX1JFVl9ZVV9FQ19BMSAgICA9IDAsICAvKiBDaGlwIFJldi4gZm9yIFl1a29uLUVDIEExL0EwICovCisJQ0hJUF9SRVZfWVVfRUNfQTIgICAgPSAxLCAgLyogQ2hpcCBSZXYuIGZvciBZdWtvbi1FQyBBMiAqLworCUNISVBfUkVWX1lVX0VDX0EzICAgID0gMiwgIC8qIENoaXAgUmV2LiBmb3IgWXVrb24tRUMgQTMgKi8KK307CisKKy8qCUIyX1kyX0NMS19HQVRFCSA4IGJpdAlDbG9jayBHYXRpbmcgKFl1a29uLTIgb25seSkgKi8KK2VudW0geworCVkyX1NUQVRVU19MTksyX0lOQUMJPSAxPDw3LCAvKiBTdGF0dXMgTGluayAyIGluYWN0aXZlICgwID0gYWN0aXZlKSAqLworCVkyX0NMS19HQVRfTE5LMl9ESVMJPSAxPDw2LCAvKiBEaXNhYmxlIGNsb2NrIGdhdGluZyBMaW5rIDIgKi8KKwlZMl9DT1JfQ0xLX0xOSzJfRElTCT0gMTw8NSwgLyogRGlzYWJsZSBDb3JlIGNsb2NrIExpbmsgMiAqLworCVkyX1BDSV9DTEtfTE5LMl9ESVMJPSAxPDw0LCAvKiBEaXNhYmxlIFBDSSBjbG9jayBMaW5rIDIgKi8KKwlZMl9TVEFUVVNfTE5LMV9JTkFDCT0gMTw8MywgLyogU3RhdHVzIExpbmsgMSBpbmFjdGl2ZSAoMCA9IGFjdGl2ZSkgKi8KKwlZMl9DTEtfR0FUX0xOSzFfRElTCT0gMTw8MiwgLyogRGlzYWJsZSBjbG9jayBnYXRpbmcgTGluayAxICovCisJWTJfQ09SX0NMS19MTksxX0RJUwk9IDE8PDEsIC8qIERpc2FibGUgQ29yZSBjbG9jayBMaW5rIDEgKi8KKwlZMl9QQ0lfQ0xLX0xOSzFfRElTCT0gMTw8MCwgLyogRGlzYWJsZSBQQ0kgY2xvY2sgTGluayAxICovCit9OworCisvKglCMl9ZMl9IV19SRVMJOCBiaXQJSFcgUmVzb3VyY2VzIChZdWtvbi0yIG9ubHkpICovCitlbnVtIHsKKwlDRkdfTEVEX01PREVfTVNLCT0gNzw8MiwJLyogQml0ICA0Li4gMjoJTEVEIE1vZGUgTWFzayAqLworCUNGR19MSU5LXzJfQVZBSUwJPSAxPDwxLAkvKiBMaW5rIDIgYXZhaWxhYmxlICovCisJQ0ZHX0xJTktfMV9BVkFJTAk9IDE8PDAsCS8qIExpbmsgMSBhdmFpbGFibGUgKi8KK307CisjZGVmaW5lIENGR19MRURfTU9ERSh4KQkJKCgoeCkgJiBDRkdfTEVEX01PREVfTVNLKSA+PiAyKQorI2RlZmluZSBDRkdfRFVBTF9NQUNfTVNLCShDRkdfTElOS18yX0FWQUlMIHwgQ0ZHX0xJTktfMV9BVkFJTCkKKworCisvKiBCMl9ZMl9DTEtfQ1RSTAkzMiBiaXQJQ2xvY2sgRnJlcXVlbmN5IENvbnRyb2wgUmVnaXN0ZXIgKFl1a29uLTIvRUMpICovCitlbnVtIHsKKwlZMl9DTEtfRElWX1ZBTF9NU0sJPSAweGZmPDwxNiwvKiBCaXQgMjMuLjE2OiBDbG9jayBEaXZpc29yIFZhbHVlICovCisjZGVmaW5lCVkyX0NMS19ESVZfVkFMKHgpCSgoKHgpPDwxNikgJiBZMl9DTEtfRElWX1ZBTF9NU0spCisJWTJfQ0xLX0RJVl9WQUwyX01TSwk9IDc8PDIxLCAgIC8qIEJpdCAyMy4uMjE6IENsb2NrIERpdmlzb3IgVmFsdWUgKi8KKwlZMl9DTEtfU0VMRUNUMl9NU0sJPSAweDFmPDwxNiwvKiBCaXQgMjAuLjE2OiBDbG9jayBTZWxlY3QgKi8KKyNkZWZpbmUgWTJfQ0xLX0RJVl9WQUxfMih4KQkoKCh4KTw8MjEpICYgWTJfQ0xLX0RJVl9WQUwyX01TSykKKyNkZWZpbmUgWTJfQ0xLX1NFTF9WQUxfMih4KQkoKCh4KTw8MTYpICYgWTJfQ0xLX1NFTEVDVDJfTVNLKQorCVkyX0NMS19ESVZfRU5BCQk9IDE8PDEsIC8qIEVuYWJsZSAgQ29yZSBDbG9jayBEaXZpc2lvbiAqLworCVkyX0NMS19ESVZfRElTCQk9IDE8PDAsCS8qIERpc2FibGUgQ29yZSBDbG9jayBEaXZpc2lvbiAqLworfTsKKworLyoJQjJfVElfQ1RSTAkJIDggYml0CVRpbWVyIGNvbnRyb2wgKi8KKy8qCUIyX0lSUU1fQ1RSTAkgOCBiaXQJSVJRIE1vZGVyYXRpb24gVGltZXIgQ29udHJvbCAqLworZW51bSB7CisJVElNX1NUQVJUCT0gMTw8MiwJLyogU3RhcnQgVGltZXIgKi8KKwlUSU1fU1RPUAk9IDE8PDEsCS8qIFN0b3AgIFRpbWVyICovCisJVElNX0NMUl9JUlEJPSAxPDwwLAkvKiBDbGVhciBUaW1lciBJUlEgKCFJUlFNKSAqLworfTsKKworLyoJQjJfVElfVEVTVAkJIDggQml0CVRpbWVyIFRlc3QgKi8KKy8qCUIyX0lSUU1fVEVTVAkgOCBiaXQJSVJRIE1vZGVyYXRpb24gVGltZXIgVGVzdCAqLworLyoJQjI4X0RQVF9UU1QJCSA4IGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgVGVzdCBSZWcgKi8KK2VudW0geworCVRJTV9UX09OCT0gMTw8MiwJLyogVGVzdCBtb2RlIG9uICovCisJVElNX1RfT0ZGCT0gMTw8MSwJLyogVGVzdCBtb2RlIG9mZiAqLworCVRJTV9UX1NURVAJPSAxPDwwLAkvKiBUZXN0IHN0ZXAgKi8KK307CisKKy8qCUIzX1JBTV9BRERSCQkzMiBiaXQJUkFNIEFkZHJlc3MsIHRvIHJlYWQgb3Igd3JpdGUgKi8KKwkJCQkJLyogQml0IDMxLi4xOToJcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUkFNX0FEUl9SQU4JMHgwMDA3ZmZmZkwJLyogQml0IDE4Li4gMDoJUkFNIEFkZHJlc3MgUmFuZ2UgKi8KKy8qIFJBTSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCisKKy8qCUIzX1JJX0NUUkwJCTE2IGJpdAlSQU0gSW50ZXJmYWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KK2VudW0geworCVJJX0NMUl9SRF9QRVJSCT0gMTw8OSwJLyogQ2xlYXIgSVJRIFJBTSBSZWFkIFBhcml0eSBFcnIgKi8KKwlSSV9DTFJfV1JfUEVSUgk9IDE8PDgsCS8qIENsZWFyIElSUSBSQU0gV3JpdGUgUGFyaXR5IEVyciovCisKKwlSSV9SU1RfQ0xSCT0gMTw8MSwJLyogQ2xlYXIgUkFNIEludGVyZmFjZSBSZXNldCAqLworCVJJX1JTVF9TRVQJPSAxPDwwLAkvKiBTZXQgICBSQU0gSW50ZXJmYWNlIFJlc2V0ICovCit9OworCisjZGVmaW5lIFNLX1JJX1RPXzUzCTM2CQkvKiBSQU0gaW50ZXJmYWNlIHRpbWVvdXQgKi8KKworCisvKiBQb3J0IHJlbGF0ZWQgcmVnaXN0ZXJzIEZJRk8sIGFuZCBBcmJpdGVyICovCisjZGVmaW5lIFNLX1JFRyhwb3J0LHJlZykJKCgocG9ydCk8PDcpKyhyZWcpKQorCisvKiBUcmFuc21pdCBBcmJpdGVyIFJlZ2lzdGVycyBNQUMgMSBhbmQgMiwgdXNlIFNLX1JFRygpIHRvIGFjY2VzcyAqLworLyoJVFhBX0lUSV9JTkkJCTMyIGJpdAlUeCBBcmIgSW50ZXJ2YWwgVGltZXIgSW5pdCBWYWwgKi8KKy8qCVRYQV9JVElfVkFMCQkzMiBiaXQJVHggQXJiIEludGVydmFsIFRpbWVyIFZhbHVlICovCisvKglUWEFfTElNX0lOSQkJMzIgYml0CVR4IEFyYiBMaW1pdCBDb3VudGVyIEluaXQgVmFsICovCisvKglUWEFfTElNX1ZBTAkJMzIgYml0CVR4IEFyYiBMaW1pdCBDb3VudGVyIFZhbHVlICovCisKKyNkZWZpbmUgVFhBX01BWF9WQUwJMHgwMGZmZmZmZlVMCS8qIEJpdCAyMy4uIDA6CU1heCBUWEEgVGltZXIvQ250IFZhbCAqLworCisvKglUWEFfQ1RSTAkJIDggYml0CVR4IEFyYml0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworZW51bSB7CisJVFhBX0VOQV9GU1lOQwk9IDE8PDcsCS8qIEVuYWJsZSAgZm9yY2Ugb2Ygc3luYyBUeCBxdWV1ZSAqLworCVRYQV9ESVNfRlNZTkMJPSAxPDw2LAkvKiBEaXNhYmxlIGZvcmNlIG9mIHN5bmMgVHggcXVldWUgKi8KKwlUWEFfRU5BX0FMTE9DCT0gMTw8NSwJLyogRW5hYmxlICBhbGxvYyBvZiBmcmVlIGJhbmR3aWR0aCAqLworCVRYQV9ESVNfQUxMT0MJPSAxPDw0LAkvKiBEaXNhYmxlIGFsbG9jIG9mIGZyZWUgYmFuZHdpZHRoICovCisJVFhBX1NUQVJUX1JDCT0gMTw8MywJLyogU3RhcnQgc3luYyBSYXRlIENvbnRyb2wgKi8KKwlUWEFfU1RPUF9SQwk9IDE8PDIsCS8qIFN0b3AgIHN5bmMgUmF0ZSBDb250cm9sICovCisJVFhBX0VOQV9BUkIJPSAxPDwxLAkvKiBFbmFibGUgIFR4IEFyYml0ZXIgKi8KKwlUWEFfRElTX0FSQgk9IDE8PDAsCS8qIERpc2FibGUgVHggQXJiaXRlciAqLworfTsKKworLyoKKyAqCUJhbmsgNCAtIDUKKyAqLworLyogVHJhbnNtaXQgQXJiaXRlciBSZWdpc3RlcnMgTUFDIDEgYW5kIDIsIHVzZSBTS19SRUcoKSB0byBhY2Nlc3MgKi8KK2VudW0geworCVRYQV9JVElfSU5JCT0gMHgwMjAwLC8qIDMyIGJpdAlUeCBBcmIgSW50ZXJ2YWwgVGltZXIgSW5pdCBWYWwqLworCVRYQV9JVElfVkFMCT0gMHgwMjA0LC8qIDMyIGJpdAlUeCBBcmIgSW50ZXJ2YWwgVGltZXIgVmFsdWUgKi8KKwlUWEFfTElNX0lOSQk9IDB4MDIwOCwvKiAzMiBiaXQJVHggQXJiIExpbWl0IENvdW50ZXIgSW5pdCBWYWwgKi8KKwlUWEFfTElNX1ZBTAk9IDB4MDIwYywvKiAzMiBiaXQJVHggQXJiIExpbWl0IENvdW50ZXIgVmFsdWUgKi8KKwlUWEFfQ1RSTAk9IDB4MDIxMCwvKiAgOCBiaXQJVHggQXJiaXRlciBDb250cm9sIFJlZ2lzdGVyICovCisJVFhBX1RFU1QJPSAweDAyMTEsLyogIDggYml0CVR4IEFyYml0ZXIgVGVzdCBSZWdpc3RlciAqLworCVRYQV9TVEFUCT0gMHgwMjEyLC8qICA4IGJpdAlUeCBBcmJpdGVyIFN0YXR1cyBSZWdpc3RlciAqLworfTsKKworCitlbnVtIHsKKwlCNl9FWFRfUkVHCT0gMHgwMzAwLC8qIEV4dGVybmFsIHJlZ2lzdGVycyAoR0VORVNJUyBvbmx5KSAqLworCUI3X0NGR19TUEMJPSAweDAzODAsLyogY29weSBvZiB0aGUgQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCUI4X1JRMV9SRUdTCT0gMHgwNDAwLC8qIFJlY2VpdmUgUXVldWUgMSAqLworCUI4X1JRMl9SRUdTCT0gMHgwNDgwLC8qIFJlY2VpdmUgUXVldWUgMiAqLworCUI4X1RTMV9SRUdTCT0gMHgwNjAwLC8qIFRyYW5zbWl0IHN5bmMgcXVldWUgMSAqLworCUI4X1RBMV9SRUdTCT0gMHgwNjgwLC8qIFRyYW5zbWl0IGFzeW5jIHF1ZXVlIDEgKi8KKwlCOF9UUzJfUkVHUwk9IDB4MDcwMCwvKiBUcmFuc21pdCBzeW5jIHF1ZXVlIDIgKi8KKwlCOF9UQTJfUkVHUwk9IDB4MDc4MCwvKiBUcmFuc21pdCBzeW5jIHF1ZXVlIDIgKi8KKwlCMTZfUkFNX1JFR1MJPSAweDA4MDAsLyogUkFNIEJ1ZmZlciBSZWdpc3RlcnMgKi8KK307CisKKy8qIFF1ZXVlIFJlZ2lzdGVyIE9mZnNldHMsIHVzZSBRX0FERFIoKSB0byBhY2Nlc3MgKi8KK2VudW0geworCUI4X1FfUkVHUyA9IDB4MDQwMCwgLyogYmFzZSBvZiBRdWV1ZSByZWdpc3RlcnMgKi8KKwlRX0QJPSAweDAwLAkvKiA4KjMyCWJpdAlDdXJyZW50IERlc2NyaXB0b3IgKi8KKwlRX0RBX0wJPSAweDIwLAkvKiAzMiBiaXQJQ3VycmVudCBEZXNjcmlwdG9yIEFkZHJlc3MgTG93IGRXb3JkICovCisJUV9EQV9ICT0gMHgyNCwJLyogMzIgYml0CUN1cnJlbnQgRGVzY3JpcHRvciBBZGRyZXNzIEhpZ2ggZFdvcmQgKi8KKwlRX0FDX0wJPSAweDI4LAkvKiAzMiBiaXQJQ3VycmVudCBBZGRyZXNzIENvdW50ZXIgTG93IGRXb3JkICovCisJUV9BQ19ICT0gMHgyYywJLyogMzIgYml0CUN1cnJlbnQgQWRkcmVzcyBDb3VudGVyIEhpZ2ggZFdvcmQgKi8KKwlRX0JDCT0gMHgzMCwJLyogMzIgYml0CUN1cnJlbnQgQnl0ZSBDb3VudGVyICovCisJUV9DU1IJPSAweDM0LAkvKiAzMiBiaXQJQk1VIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisJUV9GCT0gMHgzOCwJLyogMzIgYml0CUZsYWcgUmVnaXN0ZXIgKi8KKwlRX1QxCT0gMHgzYywJLyogMzIgYml0CVRlc3QgUmVnaXN0ZXIgMSAqLworCVFfVDFfVFIJPSAweDNjLAkvKiAgOCBiaXQJVGVzdCBSZWdpc3RlciAxIFRyYW5zZmVyIFNNICovCisJUV9UMV9XUgk9IDB4M2QsCS8qICA4IGJpdAlUZXN0IFJlZ2lzdGVyIDEgV3JpdGUgRGVzY3JpcHRvciBTTSAqLworCVFfVDFfUkQJPSAweDNlLAkvKiAgOCBiaXQJVGVzdCBSZWdpc3RlciAxIFJlYWQgRGVzY3JpcHRvciBTTSAqLworCVFfVDFfU1YJPSAweDNmLAkvKiAgOCBiaXQJVGVzdCBSZWdpc3RlciAxIFN1cGVydmlzb3IgU00gKi8KKwlRX1QyCT0gMHg0MCwJLyogMzIgYml0CVRlc3QgUmVnaXN0ZXIgMgkqLworCVFfVDMJPSAweDQ0LAkvKiAzMiBiaXQJVGVzdCBSZWdpc3RlciAzCSovCisKKy8qIFl1a29uLTIgKi8KKwlRX0RPTkUJPSAweDI0LAkvKiAxNiBiaXQJRG9uZSBJbmRleCAJCShZdWtvbi0yIG9ubHkpICovCisJUV9XTQk9IDB4NDAsCS8qIDE2IGJpdAlGSUZPIFdhdGVybWFyayAqLworCVFfQUwJPSAweDQyLAkvKiAgOCBiaXQJRklGTyBBbGlnbm1lbnQgKi8KKwlRX1JTUAk9IDB4NDQsCS8qIDE2IGJpdAlGSUZPIFJlYWQgU2hhZG93IFBvaW50ZXIgKi8KKwlRX1JTTAk9IDB4NDYsCS8qICA4IGJpdAlGSUZPIFJlYWQgU2hhZG93IExldmVsICovCisJUV9SUAk9IDB4NDgsCS8qICA4IGJpdAlGSUZPIFJlYWQgUG9pbnRlciAqLworCVFfUkwJPSAweDRhLAkvKiAgOCBiaXQJRklGTyBSZWFkIExldmVsICovCisJUV9XUAk9IDB4NGMsCS8qICA4IGJpdAlGSUZPIFdyaXRlIFBvaW50ZXIgKi8KKwlRX1dTUAk9IDB4NGQsCS8qICA4IGJpdAlGSUZPIFdyaXRlIFNoYWRvdyBQb2ludGVyICovCisJUV9XTAk9IDB4NGUsCS8qICA4IGJpdAlGSUZPIFdyaXRlIExldmVsICovCisJUV9XU0wJPSAweDRmLAkvKiAgOCBiaXQJRklGTyBXcml0ZSBTaGFkb3cgTGV2ZWwgKi8KK307CisjZGVmaW5lIFFfQUREUihyZWcsIG9mZnMpIChCOF9RX1JFR1MgKyAocmVnKSArIChvZmZzKSkKKworCisvKiBRdWV1ZSBQcmVmZXRjaCBVbml0IE9mZnNldHMsIHVzZSBZMl9RQUREUigpIHRvIGFkZHJlc3MgKFl1a29uLTIgb25seSkqLworZW51bSB7CisJWTJfQjhfUFJFRl9SRUdTCQk9IDB4MDQ1MCwKKworCVBSRUZfVU5JVF9DVFJMCQk9IDB4MDAsCS8qIDMyIGJpdAlDb250cm9sIHJlZ2lzdGVyICovCisJUFJFRl9VTklUX0xBU1RfSURYCT0gMHgwNCwJLyogMTYgYml0CUxhc3QgSW5kZXggKi8KKwlQUkVGX1VOSVRfQUREUl9MTwk9IDB4MDgsCS8qIDMyIGJpdAlMaXN0IHN0YXJ0IGFkZHIsIGxvdyBwYXJ0ICovCisJUFJFRl9VTklUX0FERFJfSEkJPSAweDBjLAkvKiAzMiBiaXQJTGlzdCBzdGFydCBhZGRyLCBoaWdoIHBhcnQqLworCVBSRUZfVU5JVF9HRVRfSURYCT0gMHgxMCwJLyogMTYgYml0CUdldCBJbmRleCAqLworCVBSRUZfVU5JVF9QVVRfSURYCT0gMHgxNCwJLyogMTYgYml0CVB1dCBJbmRleCAqLworCVBSRUZfVU5JVF9GSUZPX1dQCT0gMHgyMCwJLyogIDggYml0CUZJRk8gd3JpdGUgcG9pbnRlciAqLworCVBSRUZfVU5JVF9GSUZPX1JQCT0gMHgyNCwJLyogIDggYml0CUZJRk8gcmVhZCBwb2ludGVyICovCisJUFJFRl9VTklUX0ZJRk9fV00JPSAweDI4LAkvKiAgOCBiaXQJRklGTyB3YXRlcm1hcmsgKi8KKwlQUkVGX1VOSVRfRklGT19MRVYJPSAweDJjLAkvKiAgOCBiaXQJRklGTyBsZXZlbCAqLworCisJUFJFRl9VTklUX01BU0tfSURYCT0gMHgwZmZmLAorfTsKKyNkZWZpbmUgWTJfUUFERFIocSxyZWcpCQkoWTJfQjhfUFJFRl9SRUdTICsgKHEpICsgKHJlZykpCisKKy8qIFJBTSBCdWZmZXIgUmVnaXN0ZXIgT2Zmc2V0cyAqLworZW51bSB7CisKKwlSQl9TVEFSVAk9IDB4MDAsLyogMzIgYml0CVJBTSBCdWZmZXIgU3RhcnQgQWRkcmVzcyAqLworCVJCX0VORAk9IDB4MDQsLyogMzIgYml0CVJBTSBCdWZmZXIgRW5kIEFkZHJlc3MgKi8KKwlSQl9XUAk9IDB4MDgsLyogMzIgYml0CVJBTSBCdWZmZXIgV3JpdGUgUG9pbnRlciAqLworCVJCX1JQCT0gMHgwYywvKiAzMiBiaXQJUkFNIEJ1ZmZlciBSZWFkIFBvaW50ZXIgKi8KKwlSQl9SWF9VVFBQCT0gMHgxMCwvKiAzMiBiaXQJUnggVXBwZXIgVGhyZXNob2xkLCBQYXVzZSBQYWNrZXQgKi8KKwlSQl9SWF9MVFBQCT0gMHgxNCwvKiAzMiBiaXQJUnggTG93ZXIgVGhyZXNob2xkLCBQYXVzZSBQYWNrZXQgKi8KKwlSQl9SWF9VVEhQCT0gMHgxOCwvKiAzMiBiaXQJUnggVXBwZXIgVGhyZXNob2xkLCBIaWdoIFByaW8gKi8KKwlSQl9SWF9MVEhQCT0gMHgxYywvKiAzMiBiaXQJUnggTG93ZXIgVGhyZXNob2xkLCBIaWdoIFByaW8gKi8KKwkvKiAweDEwIC0gMHgxZjoJcmVzZXJ2ZWQgYXQgVHggUkFNIEJ1ZmZlciBSZWdpc3RlcnMgKi8KKwlSQl9QQwk9IDB4MjAsLyogMzIgYml0CVJBTSBCdWZmZXIgUGFja2V0IENvdW50ZXIgKi8KKwlSQl9MRVYJPSAweDI0LC8qIDMyIGJpdAlSQU0gQnVmZmVyIExldmVsIFJlZ2lzdGVyICovCisJUkJfQ1RSTAk9IDB4MjgsLyogMzIgYml0CVJBTSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlciAqLworCVJCX1RTVDEJPSAweDI5LC8qICA4IGJpdAlSQU0gQnVmZmVyIFRlc3QgUmVnaXN0ZXIgMSAqLworCVJCX1RTVDIJPSAweDJhLC8qICA4IGJpdAlSQU0gQnVmZmVyIFRlc3QgUmVnaXN0ZXIgMiAqLworfTsKKworLyogUmVjZWl2ZSBhbmQgVHJhbnNtaXQgUXVldWVzICovCitlbnVtIHsKKwlRX1IxCT0gMHgwMDAwLAkvKiBSZWNlaXZlIFF1ZXVlIDEgKi8KKwlRX1IyCT0gMHgwMDgwLAkvKiBSZWNlaXZlIFF1ZXVlIDIgKi8KKwlRX1hTMQk9IDB4MDIwMCwJLyogU3luY2hyb25vdXMgVHJhbnNtaXQgUXVldWUgMSAqLworCVFfWEExCT0gMHgwMjgwLAkvKiBBc3luY2hyb25vdXMgVHJhbnNtaXQgUXVldWUgMSAqLworCVFfWFMyCT0gMHgwMzAwLAkvKiBTeW5jaHJvbm91cyBUcmFuc21pdCBRdWV1ZSAyICovCisJUV9YQTIJPSAweDAzODAsCS8qIEFzeW5jaHJvbm91cyBUcmFuc21pdCBRdWV1ZSAyICovCit9OworCisvKiBEaWZmZXJlbnQgUEhZIFR5cGVzICovCitlbnVtIHsKKwlQSFlfQUREUl9NQVJWCT0gMCwKK307CisKKyNkZWZpbmUgUkJfQUREUihvZmZzLCBxdWV1ZSkgKEIxNl9SQU1fUkVHUyArIChxdWV1ZSkgKyAob2ZmcykpCisKKworZW51bSB7CisJTE5LX1NZTkNfSU5JCT0gMHgwYzMwLC8qIDMyIGJpdAlMaW5rIFN5bmMgQ250IEluaXQgVmFsdWUgKi8KKwlMTktfU1lOQ19WQUwJPSAweDBjMzQsLyogMzIgYml0CUxpbmsgU3luYyBDbnQgQ3VycmVudCBWYWx1ZSAqLworCUxOS19TWU5DX0NUUkwJPSAweDBjMzgsLyogIDggYml0CUxpbmsgU3luYyBDbnQgQ29udHJvbCBSZWdpc3RlciAqLworCUxOS19TWU5DX1RTVAk9IDB4MGMzOSwvKiAgOCBiaXQJTGluayBTeW5jIENudCBUZXN0IFJlZ2lzdGVyICovCisKKwlMTktfTEVEX1JFRwk9IDB4MGMzYywvKiAgOCBiaXQJTGluayBMRUQgUmVnaXN0ZXIgKi8KKworLyogUmVjZWl2ZSBHTUFDIEZJRk8gKFlVS09OIGFuZCBZdWtvbi0yKSAqLworCisJUlhfR01GX0VBCT0gMHgwYzQwLC8qIDMyIGJpdAlSeCBHTUFDIEZJRk8gRW5kIEFkZHJlc3MgKi8KKwlSWF9HTUZfQUZfVEhSCT0gMHgwYzQ0LC8qIDMyIGJpdAlSeCBHTUFDIEZJRk8gQWxtb3N0IEZ1bGwgVGhyZXNoLiAqLworCVJYX0dNRl9DVFJMX1QJPSAweDBjNDgsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBDb250cm9sL1Rlc3QgKi8KKwlSWF9HTUZfRkxfTVNLCT0gMHgwYzRjLC8qIDMyIGJpdAlSeCBHTUFDIEZJRk8gRmx1c2ggTWFzayAqLworCVJYX0dNRl9GTF9USFIJPSAweDBjNTAsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBGbHVzaCBUaHJlc2hvbGQgKi8KKwlSWF9HTUZfVFJfVEhSCT0gMHgwYzU0LC8qIDMyIGJpdAlSeCBUcnVuY2F0aW9uIFRocmVzaG9sZCAoWXVrb24tMikgKi8KKwlSWF9HTUZfVVBfVEhSCT0gMHgwYzU4LC8qICA4IGJpdAlSeCBVcHBlciBQYXVzZSBUaHIgKFl1a29uLUVDX1UpICovCisJUlhfR01GX0xQX1RIUgk9IDB4MGM1YSwvKiAgOCBiaXQJUnggTG93ZXIgUGF1c2UgVGhyIChZdWtvbi1FQ19VKSAqLworCVJYX0dNRl9WTEFOCT0gMHgwYzVjLC8qIDMyIGJpdAlSeCBWTEFOIFR5cGUgUmVnaXN0ZXIgKFl1a29uLTIpICovCisJUlhfR01GX1dQCT0gMHgwYzYwLC8qIDMyIGJpdAlSeCBHTUFDIEZJRk8gV3JpdGUgUG9pbnRlciAqLworCisJUlhfR01GX1dMRVYJPSAweDBjNjgsLyogMzIgYml0CVJ4IEdNQUMgRklGTyBXcml0ZSBMZXZlbCAqLworCisJUlhfR01GX1JQCT0gMHgwYzcwLC8qIDMyIGJpdAlSeCBHTUFDIEZJRk8gUmVhZCBQb2ludGVyICovCisKKwlSWF9HTUZfUkxFVgk9IDB4MGM3OCwvKiAzMiBiaXQJUnggR01BQyBGSUZPIFJlYWQgTGV2ZWwgKi8KK307CisKKworLyoJUV9CQwkJCTMyIGJpdAlDdXJyZW50IEJ5dGUgQ291bnRlciAqLworCisvKiBCTVUgQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXJzICovCisvKglCMF9SMV9DU1IJCTMyIGJpdAlCTVUgQ3RybC9TdGF0IFJ4IFF1ZXVlIDEgKi8KKy8qCUIwX1IyX0NTUgkJMzIgYml0CUJNVSBDdHJsL1N0YXQgUnggUXVldWUgMiAqLworLyoJQjBfWEExX0NTUgkJMzIgYml0CUJNVSBDdHJsL1N0YXQgU3luYyBUeCBRdWV1ZSAxICovCisvKglCMF9YUzFfQ1NSCQkzMiBiaXQJQk1VIEN0cmwvU3RhdCBBc3luYyBUeCBRdWV1ZSAxICovCisvKglCMF9YQTJfQ1NSCQkzMiBiaXQJQk1VIEN0cmwvU3RhdCBTeW5jIFR4IFF1ZXVlIDIgKi8KKy8qCUIwX1hTMl9DU1IJCTMyIGJpdAlCTVUgQ3RybC9TdGF0IEFzeW5jIFR4IFF1ZXVlIDIgKi8KKy8qCVFfQ1NSCQkJMzIgYml0CUJNVSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworCisvKiBSeCBCTVUgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlcnMgKFl1a29uLTIpICovCitlbnVtIHsKKwlCTVVfSURMRQk9IDE8PDMxLCAvKiBCTVUgSWRsZSBTdGF0ZSAqLworCUJNVV9SWF9UQ1BfUEtUCT0gMTw8MzAsIC8qIFJ4IFRDUCBQYWNrZXQgKHdoZW4gUlNTIEhhc2ggZW5hYmxlZCkgKi8KKwlCTVVfUlhfSVBfUEtUCT0gMTw8MjksIC8qIFJ4IElQICBQYWNrZXQgKHdoZW4gUlNTIEhhc2ggZW5hYmxlZCkgKi8KKworCUJNVV9FTkFfUlhfUlNTX0hBU0ggPSAxPDwxNSwgLyogRW5hYmxlICBSeCBSU1MgSGFzaCAqLworCUJNVV9ESVNfUlhfUlNTX0hBU0ggPSAxPDwxNCwgLyogRGlzYWJsZSBSeCBSU1MgSGFzaCAqLworCUJNVV9FTkFfUlhfQ0hLU1VNID0gMTw8MTMsIC8qIEVuYWJsZSAgUnggVENQL0lQIENoZWNrc3VtIENoZWNrICovCisJQk1VX0RJU19SWF9DSEtTVU0gPSAxPDwxMiwgLyogRGlzYWJsZSBSeCBUQ1AvSVAgQ2hlY2tzdW0gQ2hlY2sgKi8KKwlCTVVfQ0xSX0lSUV9QQVIJPSAxPDwxMSwgLyogQ2xlYXIgSVJRIG9uIFBhcml0eSBlcnJvcnMgKFJ4KSAqLworCUJNVV9DTFJfSVJRX1RDUAk9IDE8PDExLCAvKiBDbGVhciBJUlEgb24gVENQIHNlZ21lbnQuIGVycm9yIChUeCkgKi8KKwlCTVVfQ0xSX0lSUV9DSEsJPSAxPDwxMCwgLyogQ2xlYXIgSVJRIENoZWNrICovCisJQk1VX1NUT1AJPSAxPDw5LCAvKiBTdG9wICBSeC9UeCBRdWV1ZSAqLworCUJNVV9TVEFSVAk9IDE8PDgsIC8qIFN0YXJ0IFJ4L1R4IFF1ZXVlICovCisJQk1VX0ZJRk9fT1BfT04JPSAxPDw3LCAvKiBGSUZPIE9wZXJhdGlvbmFsIE9uICovCisJQk1VX0ZJRk9fT1BfT0ZGCT0gMTw8NiwgLyogRklGTyBPcGVyYXRpb25hbCBPZmYgKi8KKwlCTVVfRklGT19FTkEJPSAxPDw1LCAvKiBFbmFibGUgRklGTyAqLworCUJNVV9GSUZPX1JTVAk9IDE8PDQsIC8qIFJlc2V0ICBGSUZPICovCisJQk1VX09QX09OCT0gMTw8MywgLyogQk1VIE9wZXJhdGlvbmFsIE9uICovCisJQk1VX09QX09GRgk9IDE8PDIsIC8qIEJNVSBPcGVyYXRpb25hbCBPZmYgKi8KKwlCTVVfUlNUX0NMUgk9IDE8PDEsIC8qIENsZWFyIEJNVSBSZXNldCAoRW5hYmxlKSAqLworCUJNVV9SU1RfU0VUCT0gMTw8MCwgLyogU2V0ICAgQk1VIFJlc2V0ICovCisKKwlCTVVfQ0xSX1JFU0VUCT0gQk1VX0ZJRk9fUlNUIHwgQk1VX09QX09GRiB8IEJNVV9SU1RfQ0xSLAorCUJNVV9PUEVSX0lOSVQJPSBCTVVfQ0xSX0lSUV9QQVIgfCBCTVVfQ0xSX0lSUV9DSEsgfCBCTVVfU1RBUlQgfAorCQkJICBCTVVfRklGT19FTkEgfCBCTVVfT1BfT04sCisKKwlCTVVfV01fREVGQVVMVCA9IDB4NjAwLAorfTsKKworLyogVHggQk1VIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXJzIChZdWtvbi0yKSAqLworCQkJCQkJCQkvKiBCaXQgMzE6IHNhbWUgYXMgZm9yIFJ4ICovCitlbnVtIHsKKwlCTVVfVFhfSVBJRElOQ1JfT04JPSAxPDwxMywgLyogRW5hYmxlICBJUCBJRCBJbmNyZW1lbnQgKi8KKwlCTVVfVFhfSVBJRElOQ1JfT0ZGCT0gMTw8MTIsIC8qIERpc2FibGUgSVAgSUQgSW5jcmVtZW50ICovCisJQk1VX1RYX0NMUl9JUlFfVENQCT0gMTw8MTEsIC8qIENsZWFyIElSUSBvbiBUQ1Agc2VnbWVudCBsZW5ndGggbWlzbWF0Y2ggKi8KK307CisKKy8qIFF1ZXVlIFByZWZldGNoIFVuaXQgT2Zmc2V0cywgdXNlIFkyX1FBRERSKCkgdG8gYWRkcmVzcyAoWXVrb24tMiBvbmx5KSovCisvKiBQUkVGX1VOSVRfQ1RSTAkzMiBiaXQJUHJlZmV0Y2ggQ29udHJvbCByZWdpc3RlciAqLworZW51bSB7CisJUFJFRl9VTklUX09QX09OCQk9IDE8PDMsCS8qIHByZWZldGNoIHVuaXQgb3BlcmF0aW9uYWwgKi8KKwlQUkVGX1VOSVRfT1BfT0ZGCT0gMTw8MiwJLyogcHJlZmV0Y2ggdW5pdCBub3Qgb3BlcmF0aW9uYWwgKi8KKwlQUkVGX1VOSVRfUlNUX0NMUgk9IDE8PDEsCS8qIENsZWFyIFByZWZldGNoIFVuaXQgUmVzZXQgKi8KKwlQUkVGX1VOSVRfUlNUX1NFVAk9IDE8PDAsCS8qIFNldCAgIFByZWZldGNoIFVuaXQgUmVzZXQgKi8KK307CisKKy8qIFJBTSBCdWZmZXIgUmVnaXN0ZXIgT2Zmc2V0cywgdXNlIFJCX0FERFIoUXVldWUsIE9mZnMpIHRvIGFjY2VzcyAqLworLyoJUkJfU1RBUlQJCTMyIGJpdAlSQU0gQnVmZmVyIFN0YXJ0IEFkZHJlc3MgKi8KKy8qCVJCX0VORAkJCTMyIGJpdAlSQU0gQnVmZmVyIEVuZCBBZGRyZXNzICovCisvKglSQl9XUAkJCTMyIGJpdAlSQU0gQnVmZmVyIFdyaXRlIFBvaW50ZXIgKi8KKy8qCVJCX1JQCQkJMzIgYml0CVJBTSBCdWZmZXIgUmVhZCBQb2ludGVyICovCisvKglSQl9SWF9VVFBQCQkzMiBiaXQJUnggVXBwZXIgVGhyZXNob2xkLCBQYXVzZSBQYWNrICovCisvKglSQl9SWF9MVFBQCQkzMiBiaXQJUnggTG93ZXIgVGhyZXNob2xkLCBQYXVzZSBQYWNrICovCisvKglSQl9SWF9VVEhQCQkzMiBiaXQJUnggVXBwZXIgVGhyZXNob2xkLCBIaWdoIFByaW8gKi8KKy8qCVJCX1JYX0xUSFAJCTMyIGJpdAlSeCBMb3dlciBUaHJlc2hvbGQsIEhpZ2ggUHJpbyAqLworLyoJUkJfUEMJCQkzMiBiaXQJUkFNIEJ1ZmZlciBQYWNrZXQgQ291bnRlciAqLworLyoJUkJfTEVWCQkJMzIgYml0CVJBTSBCdWZmZXIgTGV2ZWwgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBSQl9NU0sJMHgwMDA3ZmZmZgkvKiBCaXQgMTguLiAwOglSQU0gQnVmZmVyIFBvaW50ZXIgQml0cyAqLworLyoJUkJfVFNUMgkJCSA4IGJpdAlSQU0gQnVmZmVyIFRlc3QgUmVnaXN0ZXIgMiAqLworLyoJUkJfVFNUMQkJCSA4IGJpdAlSQU0gQnVmZmVyIFRlc3QgUmVnaXN0ZXIgMSAqLworCisvKglSQl9DVFJMCQkJIDggYml0CVJBTSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlciAqLworZW51bSB7CisJUkJfRU5BX1NURldECT0gMTw8NSwJLyogRW5hYmxlICBTdG9yZSAmIEZvcndhcmQgKi8KKwlSQl9ESVNfU1RGV0QJPSAxPDw0LAkvKiBEaXNhYmxlIFN0b3JlICYgRm9yd2FyZCAqLworCVJCX0VOQV9PUF9NRAk9IDE8PDMsCS8qIEVuYWJsZSAgT3BlcmF0aW9uIE1vZGUgKi8KKwlSQl9ESVNfT1BfTUQJPSAxPDwyLAkvKiBEaXNhYmxlIE9wZXJhdGlvbiBNb2RlICovCisJUkJfUlNUX0NMUgk9IDE8PDEsCS8qIENsZWFyIFJBTSBCdWYgU1RNIFJlc2V0ICovCisJUkJfUlNUX1NFVAk9IDE8PDAsCS8qIFNldCAgIFJBTSBCdWYgU1RNIFJlc2V0ICovCit9OworCisKKy8qIFRyYW5zbWl0IEdNQUMgRklGTyAoWVVLT04gb25seSkgKi8KK2VudW0geworCVRYX0dNRl9FQQk9IDB4MGQ0MCwvKiAzMiBiaXQJVHggR01BQyBGSUZPIEVuZCBBZGRyZXNzICovCisJVFhfR01GX0FFX1RIUgk9IDB4MGQ0NCwvKiAzMiBiaXQJVHggR01BQyBGSUZPIEFsbW9zdCBFbXB0eSBUaHJlc2guKi8KKwlUWF9HTUZfQ1RSTF9UCT0gMHgwZDQ4LC8qIDMyIGJpdAlUeCBHTUFDIEZJRk8gQ29udHJvbC9UZXN0ICovCisKKwlUWF9HTUZfV1AJPSAweDBkNjAsLyogMzIgYml0IAlUeCBHTUFDIEZJRk8gV3JpdGUgUG9pbnRlciAqLworCVRYX0dNRl9XU1AJPSAweDBkNjQsLyogMzIgYml0IAlUeCBHTUFDIEZJRk8gV3JpdGUgU2hhZG93IFB0ci4gKi8KKwlUWF9HTUZfV0xFVgk9IDB4MGQ2OCwvKiAzMiBiaXQgCVR4IEdNQUMgRklGTyBXcml0ZSBMZXZlbCAqLworCisJVFhfR01GX1JQCT0gMHgwZDcwLC8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFJlYWQgUG9pbnRlciAqLworCVRYX0dNRl9SU1RQCT0gMHgwZDc0LC8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFJlc3RhcnQgUG9pbnRlciAqLworCVRYX0dNRl9STEVWCT0gMHgwZDc4LC8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFJlYWQgTGV2ZWwgKi8KK307CisKKy8qIERlc2NyaXB0b3IgUG9sbCBUaW1lciBSZWdpc3RlcnMgKi8KK2VudW0geworCUIyOF9EUFRfSU5JCT0gMHgwZTAwLC8qIDI0IGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgSW5pdCBWYWwgKi8KKwlCMjhfRFBUX1ZBTAk9IDB4MGUwNCwvKiAyNCBiaXQJRGVzY3JpcHRvciBQb2xsIFRpbWVyIEN1cnIgVmFsICovCisJQjI4X0RQVF9DVFJMCT0gMHgwZTA4LC8qICA4IGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgQ3RybCBSZWcgKi8KKworCUIyOF9EUFRfVFNUCT0gMHgwZTBhLC8qICA4IGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgVGVzdCBSZWcgKi8KK307CisKKy8qIFRpbWUgU3RhbXAgVGltZXIgUmVnaXN0ZXJzIChZVUtPTiBvbmx5KSAqLworZW51bSB7CisJR01BQ19USV9TVF9WQUwJPSAweDBlMTQsLyogMzIgYml0CVRpbWUgU3RhbXAgVGltZXIgQ3VyciBWYWwgKi8KKwlHTUFDX1RJX1NUX0NUUkwJPSAweDBlMTgsLyogIDggYml0CVRpbWUgU3RhbXAgVGltZXIgQ3RybCBSZWcgKi8KKwlHTUFDX1RJX1NUX1RTVAk9IDB4MGUxYSwvKiAgOCBiaXQJVGltZSBTdGFtcCBUaW1lciBUZXN0IFJlZyAqLworfTsKKworLyogUG9sbGluZyBVbml0IFJlZ2lzdGVycyAoWXVrb24tMiBvbmx5KSAqLworZW51bSB7CisJUE9MTF9DVFJMCT0gMHgwZTIwLCAvKiAzMiBiaXQJUG9sbGluZyBVbml0IENvbnRyb2wgUmVnICovCisJUE9MTF9MQVNUX0lEWAk9IDB4MGUyNCwvKiAxNiBiaXQJUG9sbGluZyBVbml0IExpc3QgTGFzdCBJbmRleCAqLworCisJUE9MTF9MSVNUX0FERFJfTE89IDB4MGUyOCwvKiAzMiBiaXQJUG9sbC4gTGlzdCBTdGFydCBBZGRyIChsb3cpICovCisJUE9MTF9MSVNUX0FERFJfSEk9IDB4MGUyYywvKiAzMiBiaXQJUG9sbC4gTGlzdCBTdGFydCBBZGRyIChoaWdoKSAqLworfTsKKworLyogQVNGIFN1YnN5c3RlbSBSZWdpc3RlcnMgKFl1a29uLTIgb25seSkgKi8KK2VudW0geworCUIyOF9ZMl9TTUJfQ09ORklHICA9IDB4MGU0MCwvKiAzMiBiaXQJQVNGIFNNQnVzIENvbmZpZyBSZWdpc3RlciAqLworCUIyOF9ZMl9TTUJfQ1NEX1JFRyA9IDB4MGU0NCwvKiAzMiBiaXQJQVNGIFNNQiBDb250cm9sL1N0YXR1cy9EYXRhICovCisJQjI4X1kyX0FTRl9JUlFfVl9CQVNFPTB4MGU2MCwvKiAzMiBiaXQJQVNGIElSUSBWZWN0b3IgQmFzZSAqLworCisJQjI4X1kyX0FTRl9TVEFUX0NNRD0gMHgwZTY4LC8qIDMyIGJpdAlBU0YgU3RhdHVzIGFuZCBDb21tYW5kIFJlZyAqLworCUIyOF9ZMl9BU0ZfSE9TVF9DT009IDB4MGU2YywvKiAzMiBiaXQJQVNGIEhvc3QgQ29tbXVuaWNhdGlvbiBSZWcgKi8KKwlCMjhfWTJfREFUQV9SRUdfMSAgPSAweDBlNzAsLyogMzIgYml0CUFTRi9Ib3N0IERhdGEgUmVnaXN0ZXIgMSAqLworCUIyOF9ZMl9EQVRBX1JFR18yICA9IDB4MGU3NCwvKiAzMiBiaXQJQVNGL0hvc3QgRGF0YSBSZWdpc3RlciAyICovCisJQjI4X1kyX0RBVEFfUkVHXzMgID0gMHgwZTc4LC8qIDMyIGJpdAlBU0YvSG9zdCBEYXRhIFJlZ2lzdGVyIDMgKi8KKwlCMjhfWTJfREFUQV9SRUdfNCAgPSAweDBlN2MsLyogMzIgYml0CUFTRi9Ib3N0IERhdGEgUmVnaXN0ZXIgNCAqLworfTsKKworLyogU3RhdHVzIEJNVSBSZWdpc3RlcnMgKFl1a29uLTIgb25seSkqLworZW51bSB7CisJU1RBVF9DVFJMCT0gMHgwZTgwLC8qIDMyIGJpdAlTdGF0dXMgQk1VIENvbnRyb2wgUmVnICovCisJU1RBVF9MQVNUX0lEWAk9IDB4MGU4NCwvKiAxNiBiaXQJU3RhdHVzIEJNVSBMYXN0IEluZGV4ICovCisKKwlTVEFUX0xJU1RfQUREUl9MTz0gMHgwZTg4LC8qIDMyIGJpdAlTdGF0dXMgTGlzdCBTdGFydCBBZGRyIChsb3cpICovCisJU1RBVF9MSVNUX0FERFJfSEk9IDB4MGU4YywvKiAzMiBiaXQJU3RhdHVzIExpc3QgU3RhcnQgQWRkciAoaGlnaCkgKi8KKwlTVEFUX1RYQTFfUklEWAk9IDB4MGU5MCwvKiAxNiBiaXQJU3RhdHVzIFR4QTEgUmVwb3J0IEluZGV4IFJlZyAqLworCVNUQVRfVFhTMV9SSURYCT0gMHgwZTkyLC8qIDE2IGJpdAlTdGF0dXMgVHhTMSBSZXBvcnQgSW5kZXggUmVnICovCisJU1RBVF9UWEEyX1JJRFgJPSAweDBlOTQsLyogMTYgYml0CVN0YXR1cyBUeEEyIFJlcG9ydCBJbmRleCBSZWcgKi8KKwlTVEFUX1RYUzJfUklEWAk9IDB4MGU5NiwvKiAxNiBiaXQJU3RhdHVzIFR4UzIgUmVwb3J0IEluZGV4IFJlZyAqLworCVNUQVRfVFhfSURYX1RICT0gMHgwZTk4LC8qIDE2IGJpdAlTdGF0dXMgVHggSW5kZXggVGhyZXNob2xkIFJlZyAqLworCVNUQVRfUFVUX0lEWAk9IDB4MGU5YywvKiAxNiBiaXQJU3RhdHVzIFB1dCBJbmRleCBSZWcgKi8KKworLyogRklGTyBDb250cm9sL1N0YXR1cyBSZWdpc3RlcnMgKFl1a29uLTIgb25seSkqLworCVNUQVRfRklGT19XUAk9IDB4MGVhMCwvKiAgOCBiaXQJU3RhdHVzIEZJRk8gV3JpdGUgUG9pbnRlciBSZWcgKi8KKwlTVEFUX0ZJRk9fUlAJPSAweDBlYTQsLyogIDggYml0CVN0YXR1cyBGSUZPIFJlYWQgUG9pbnRlciBSZWcgKi8KKwlTVEFUX0ZJRk9fUlNQCT0gMHgwZWE2LC8qICA4IGJpdAlTdGF0dXMgRklGTyBSZWFkIFNoYWRvdyBQdHIgKi8KKwlTVEFUX0ZJRk9fTEVWRUwJPSAweDBlYTgsLyogIDggYml0CVN0YXR1cyBGSUZPIExldmVsIFJlZyAqLworCVNUQVRfRklGT19TSExWTAk9IDB4MGVhYSwvKiAgOCBiaXQJU3RhdHVzIEZJRk8gU2hhZG93IExldmVsIFJlZyAqLworCVNUQVRfRklGT19XTQk9IDB4MGVhYywvKiAgOCBiaXQJU3RhdHVzIEZJRk8gV2F0ZXJtYXJrIFJlZyAqLworCVNUQVRfRklGT19JU1JfV009IDB4MGVhZCwvKiAgOCBiaXQJU3RhdHVzIEZJRk8gSVNSIFdhdGVybWFyayBSZWcgKi8KKworLyogTGV2ZWwgYW5kIElTUiBUaW1lciBSZWdpc3RlcnMgKFl1a29uLTIgb25seSkqLworCVNUQVRfTEVWX1RJTUVSX0lOST0gMHgwZWIwLC8qIDMyIGJpdAlMZXZlbCBUaW1lciBJbml0LiBWYWx1ZSBSZWcgKi8KKwlTVEFUX0xFVl9USU1FUl9DTlQ9IDB4MGViNCwvKiAzMiBiaXQJTGV2ZWwgVGltZXIgQ291bnRlciBSZWcgKi8KKwlTVEFUX0xFVl9USU1FUl9DVFJMPSAweDBlYjgsLyogIDggYml0CUxldmVsIFRpbWVyIENvbnRyb2wgUmVnICovCisJU1RBVF9MRVZfVElNRVJfVEVTVD0gMHgwZWI5LC8qICA4IGJpdAlMZXZlbCBUaW1lciBUZXN0IFJlZyAqLworCVNUQVRfVFhfVElNRVJfSU5JICA9IDB4MGVjMCwvKiAzMiBiaXQJVHggVGltZXIgSW5pdC4gVmFsdWUgUmVnICovCisJU1RBVF9UWF9USU1FUl9DTlQgID0gMHgwZWM0LC8qIDMyIGJpdAlUeCBUaW1lciBDb3VudGVyIFJlZyAqLworCVNUQVRfVFhfVElNRVJfQ1RSTCA9IDB4MGVjOCwvKiAgOCBiaXQJVHggVGltZXIgQ29udHJvbCBSZWcgKi8KKwlTVEFUX1RYX1RJTUVSX1RFU1QgPSAweDBlYzksLyogIDggYml0CVR4IFRpbWVyIFRlc3QgUmVnICovCisJU1RBVF9JU1JfVElNRVJfSU5JID0gMHgwZWQwLC8qIDMyIGJpdAlJU1IgVGltZXIgSW5pdC4gVmFsdWUgUmVnICovCisJU1RBVF9JU1JfVElNRVJfQ05UID0gMHgwZWQ0LC8qIDMyIGJpdAlJU1IgVGltZXIgQ291bnRlciBSZWcgKi8KKwlTVEFUX0lTUl9USU1FUl9DVFJMPSAweDBlZDgsLyogIDggYml0CUlTUiBUaW1lciBDb250cm9sIFJlZyAqLworCVNUQVRfSVNSX1RJTUVSX1RFU1Q9IDB4MGVkOSwvKiAgOCBiaXQJSVNSIFRpbWVyIFRlc3QgUmVnICovCit9OworCitlbnVtIHsKKwlMSU5LTEVEX09GRiAJICAgICA9IDB4MDEsCisJTElOS0xFRF9PTiAgCSAgICAgPSAweDAyLAorCUxJTktMRURfTElOS1NZTkNfT0ZGID0gMHgwNCwKKwlMSU5LTEVEX0xJTktTWU5DX09OICA9IDB4MDgsCisJTElOS0xFRF9CTElOS19PRkYgICAgPSAweDEwLAorCUxJTktMRURfQkxJTktfT04gICAgID0gMHgyMCwKK307CisKKy8qIEdNQUMgYW5kIEdQSFkgQ29udHJvbCBSZWdpc3RlcnMgKFlVS09OIG9ubHkpICovCitlbnVtIHsKKwlHTUFDX0NUUkwJPSAweDBmMDAsLyogMzIgYml0CUdNQUMgQ29udHJvbCBSZWcgKi8KKwlHUEhZX0NUUkwJPSAweDBmMDQsLyogMzIgYml0CUdQSFkgQ29udHJvbCBSZWcgKi8KKwlHTUFDX0lSUV9TUkMJPSAweDBmMDgsLyogIDggYml0CUdNQUMgSW50ZXJydXB0IFNvdXJjZSBSZWcgKi8KKwlHTUFDX0lSUV9NU0sJPSAweDBmMGMsLyogIDggYml0CUdNQUMgSW50ZXJydXB0IE1hc2sgUmVnICovCisJR01BQ19MSU5LX0NUUkwJPSAweDBmMTAsLyogMTYgYml0CUxpbmsgQ29udHJvbCBSZWcgKi8KKworLyogV2FrZS11cCBGcmFtZSBQYXR0ZXJuIE1hdGNoIENvbnRyb2wgUmVnaXN0ZXJzIChZVUtPTiBvbmx5KSAqLworCisJV09MX1JFR19PRkZTCT0gMHgyMCwvKiBIVy1CdWc6IEFkZHJlc3MgaXMgKyAweDIwIGFnYWluc3Qgc3BlYy4gKi8KKworCVdPTF9DVFJMX1NUQVQJPSAweDBmMjAsLyogMTYgYml0CVdPTCBDb250cm9sL1N0YXR1cyBSZWcgKi8KKwlXT0xfTUFUQ0hfQ1RMCT0gMHgwZjIyLC8qICA4IGJpdAlXT0wgTWF0Y2ggQ29udHJvbCBSZWcgKi8KKwlXT0xfTUFUQ0hfUkVTCT0gMHgwZjIzLC8qICA4IGJpdAlXT0wgTWF0Y2ggUmVzdWx0IFJlZyAqLworCVdPTF9NQUNfQUREUgk9IDB4MGYyNCwvKiAzMiBiaXQJV09MIE1BQyBBZGRyZXNzICovCisJV09MX1BBVFRfUE1FCT0gMHgwZjJhLC8qICA4IGJpdAlXT0wgUE1FIE1hdGNoIEVuYWJsZSAoWXVrb24tMikgKi8KKwlXT0xfUEFUVF9BU0ZNCT0gMHgwZjJiLC8qICA4IGJpdAlXT0wgQVNGIE1hdGNoIEVuYWJsZSAoWXVrb24tMikgKi8KKwlXT0xfUEFUVF9SUFRSCT0gMHgwZjJjLC8qICA4IGJpdAlXT0wgUGF0dGVybiBSZWFkIFBvaW50ZXIgKi8KKworLyogV09MIFBhdHRlcm4gTGVuZ3RoIFJlZ2lzdGVycyAoWVVLT04gb25seSkgKi8KKworCVdPTF9QQVRUX0xFTl9MTwk9IDB4MGYzMCwvKiAzMiBiaXQJV09MIFBhdHRlcm4gTGVuZ3RoIDMuLjAgKi8KKwlXT0xfUEFUVF9MRU5fSEkJPSAweDBmMzQsLyogMjQgYml0CVdPTCBQYXR0ZXJuIExlbmd0aCA2Li40ICovCisKKy8qIFdPTCBQYXR0ZXJuIENvdW50ZXIgUmVnaXN0ZXJzIChZVUtPTiBvbmx5KSAqLworCisKKwlXT0xfUEFUVF9DTlRfMAk9IDB4MGYzOCwvKiAzMiBiaXQJV09MIFBhdHRlcm4gQ291bnRlciAzLi4wICovCisJV09MX1BBVFRfQ05UXzQJPSAweDBmM2MsLyogMjQgYml0CVdPTCBQYXR0ZXJuIENvdW50ZXIgNi4uNCAqLworfTsKKworZW51bSB7CisJV09MX1BBVFRfUkFNXzEJPSAweDEwMDAsLyogIFdPTCBQYXR0ZXJuIFJBTSBMaW5rIDEgKi8KKwlXT0xfUEFUVF9SQU1fMgk9IDB4MTQwMCwvKiAgV09MIFBhdHRlcm4gUkFNIExpbmsgMiAqLworfTsKKworZW51bSB7CisJQkFTRV9HTUFDXzEJPSAweDI4MDAsLyogR01BQyAxIHJlZ2lzdGVycyAqLworCUJBU0VfR01BQ18yCT0gMHgzODAwLC8qIEdNQUMgMiByZWdpc3RlcnMgKi8KK307CisKKy8qCisgKiBNYXJ2ZWwtUEhZIFJlZ2lzdGVycywgaW5kaXJlY3QgYWRkcmVzc2VkIG92ZXIgR01BQworICovCitlbnVtIHsKKwlQSFlfTUFSVl9DVFJMCQk9IDB4MDAsLyogMTYgYml0IHIvdwlQSFkgQ29udHJvbCBSZWdpc3RlciAqLworCVBIWV9NQVJWX1NUQVQJCT0gMHgwMSwvKiAxNiBiaXQgci9vCVBIWSBTdGF0dXMgUmVnaXN0ZXIgKi8KKwlQSFlfTUFSVl9JRDAJCT0gMHgwMiwvKiAxNiBiaXQgci9vCVBIWSBJRDAgUmVnaXN0ZXIgKi8KKwlQSFlfTUFSVl9JRDEJCT0gMHgwMywvKiAxNiBiaXQgci9vCVBIWSBJRDEgUmVnaXN0ZXIgKi8KKwlQSFlfTUFSVl9BVU5FX0FEVgk9IDB4MDQsLyogMTYgYml0IHIvdwlBdXRvLU5lZy4gQWR2ZXJ0aXNlbWVudCAqLworCVBIWV9NQVJWX0FVTkVfTFAJPSAweDA1LC8qIDE2IGJpdCByL28JTGluayBQYXJ0IEFiaWxpdHkgUmVnICovCisJUEhZX01BUlZfQVVORV9FWFAJPSAweDA2LC8qIDE2IGJpdCByL28JQXV0by1OZWcuIEV4cGFuc2lvbiBSZWcgKi8KKwlQSFlfTUFSVl9ORVBHCQk9IDB4MDcsLyogMTYgYml0IHIvdwlOZXh0IFBhZ2UgUmVnaXN0ZXIgKi8KKwlQSFlfTUFSVl9ORVBHX0xQCT0gMHgwOCwvKiAxNiBiaXQgci9vCU5leHQgUGFnZSBMaW5rIFBhcnRuZXIgKi8KKwkvKiBNYXJ2ZWwtc3BlY2lmaWMgcmVnaXN0ZXJzICovCisJUEhZX01BUlZfMTAwMFRfQ1RSTAk9IDB4MDksLyogMTYgYml0IHIvdwkxMDAwQmFzZS1UIENvbnRyb2wgUmVnICovCisJUEhZX01BUlZfMTAwMFRfU1RBVAk9IDB4MGEsLyogMTYgYml0IHIvbwkxMDAwQmFzZS1UIFN0YXR1cyBSZWcgKi8KKwlQSFlfTUFSVl9FWFRfU1RBVAk9IDB4MGYsLyogMTYgYml0IHIvbwlFeHRlbmRlZCBTdGF0dXMgUmVnICovCisJUEhZX01BUlZfUEhZX0NUUkwJPSAweDEwLC8qIDE2IGJpdCByL3cJUEhZIFNwZWNpZmljIEN0cmwgUmVnICovCisJUEhZX01BUlZfUEhZX1NUQVQJPSAweDExLC8qIDE2IGJpdCByL28JUEhZIFNwZWNpZmljIFN0YXQgUmVnICovCisJUEhZX01BUlZfSU5UX01BU0sJPSAweDEyLC8qIDE2IGJpdCByL3cJSW50ZXJydXB0IE1hc2sgUmVnICovCisJUEhZX01BUlZfSU5UX1NUQVQJPSAweDEzLC8qIDE2IGJpdCByL28JSW50ZXJydXB0IFN0YXR1cyBSZWcgKi8KKwlQSFlfTUFSVl9FWFRfQ1RSTAk9IDB4MTQsLyogMTYgYml0IHIvdwlFeHQuIFBIWSBTcGVjaWZpYyBDdHJsICovCisJUEhZX01BUlZfUlhFX0NOVAk9IDB4MTUsLyogMTYgYml0IHIvdwlSZWNlaXZlIEVycm9yIENvdW50ZXIgKi8KKwlQSFlfTUFSVl9FWFRfQURSCT0gMHgxNiwvKiAxNiBiaXQgci93CUV4dC4gQWQuIGZvciBDYWJsZSBEaWFnLiAqLworCVBIWV9NQVJWX1BPUlRfSVJRCT0gMHgxNywvKiAxNiBiaXQgci9vCVBvcnQgMCBJUlEgKDg4RTExMTEgb25seSkgKi8KKwlQSFlfTUFSVl9MRURfQ1RSTAk9IDB4MTgsLyogMTYgYml0IHIvdwlMRUQgQ29udHJvbCBSZWcgKi8KKwlQSFlfTUFSVl9MRURfT1ZFUgk9IDB4MTksLyogMTYgYml0IHIvdwlNYW51YWwgTEVEIE92ZXJyaWRlIFJlZyAqLworCVBIWV9NQVJWX0VYVF9DVFJMXzIJPSAweDFhLC8qIDE2IGJpdCByL3cJRXh0LiBQSFkgU3BlY2lmaWMgQ3RybCAyICovCisJUEhZX01BUlZfRVhUX1BfU1RBVAk9IDB4MWIsLyogMTYgYml0IHIvdwlFeHQuIFBIWSBTcGVjLiBTdGF0IFJlZyAqLworCVBIWV9NQVJWX0NBQkxFX0RJQUcJPSAweDFjLC8qIDE2IGJpdCByL28JQ2FibGUgRGlhZ25vc3RpYyBSZWcgKi8KKwlQSFlfTUFSVl9QQUdFX0FERFIJPSAweDFkLC8qIDE2IGJpdCByL3cJRXh0ZW5kZWQgUGFnZSBBZGRyZXNzIFJlZyAqLworCVBIWV9NQVJWX1BBR0VfREFUQQk9IDB4MWUsLyogMTYgYml0IHIvdwlFeHRlbmRlZCBQYWdlIERhdGEgUmVnICovCisKKy8qIGZvciAxMC8xMDAgRmFzdCBFdGhlcm5ldCBQSFkgKDg4RTMwODIgb25seSkgKi8KKwlQSFlfTUFSVl9GRV9MRURfUEFSCT0gMHgxNiwvKiAxNiBiaXQgci93CUxFRCBQYXJhbGxlbCBTZWxlY3QgUmVnLiAqLworCVBIWV9NQVJWX0ZFX0xFRF9TRVIJPSAweDE3LC8qIDE2IGJpdCByL3cJTEVEIFN0cmVhbSBTZWxlY3QgUy4gTEVEICovCisJUEhZX01BUlZfRkVfVkNUX1RYCT0gMHgxYSwvKiAxNiBiaXQgci93CVZDVCBSZWcuIGZvciBUWFAvTiBQaW5zICovCisJUEhZX01BUlZfRkVfVkNUX1JYCT0gMHgxYiwvKiAxNiBiaXQgci9vCVZDVCBSZWcuIGZvciBSWFAvTiBQaW5zICovCisJUEhZX01BUlZfRkVfU1BFQ18yCT0gMHgxYywvKiAxNiBiaXQgci93CVNwZWNpZmljIENvbnRyb2wgUmVnLiAyICovCit9OworCitlbnVtIHsKKwlQSFlfQ1RfUkVTRVQJPSAxPDwxNSwgLyogQml0IDE1OiAoc2MpCWNsZWFyIGFsbCBQSFkgcmVsYXRlZCByZWdzICovCisJUEhZX0NUX0xPT1AJPSAxPDwxNCwgLyogQml0IDE0OgllbmFibGUgTG9vcGJhY2sgb3ZlciBQSFkgKi8KKwlQSFlfQ1RfU1BTX0xTQgk9IDE8PDEzLCAvKiBCaXQgMTM6CVNwZWVkIHNlbGVjdCwgbG93ZXIgYml0ICovCisJUEhZX0NUX0FORQk9IDE8PDEyLCAvKiBCaXQgMTI6CUF1dG8tTmVnb3RpYXRpb24gRW5hYmxlZCAqLworCVBIWV9DVF9QRE9XTgk9IDE8PDExLCAvKiBCaXQgMTE6CVBvd2VyIERvd24gTW9kZSAqLworCVBIWV9DVF9JU09MCT0gMTw8MTAsIC8qIEJpdCAxMDoJSXNvbGF0ZSBNb2RlICovCisJUEhZX0NUX1JFX0NGRwk9IDE8PDksIC8qIEJpdCAgOToJKHNjKSBSZXN0YXJ0IEF1dG8tTmVnb3RpYXRpb24gKi8KKwlQSFlfQ1RfRFVQX01ECT0gMTw8OCwgLyogQml0ICA4OglEdXBsZXggTW9kZSAqLworCVBIWV9DVF9DT0xfVFNUCT0gMTw8NywgLyogQml0ICA3OglDb2xsaXNpb24gVGVzdCBlbmFibGVkICovCisJUEhZX0NUX1NQU19NU0IJPSAxPDw2LCAvKiBCaXQgIDY6CVNwZWVkIHNlbGVjdCwgdXBwZXIgYml0ICovCit9OworCitlbnVtIHsKKwlQSFlfQ1RfU1AxMDAwCT0gUEhZX0NUX1NQU19NU0IsIC8qIGVuYWJsZSBzcGVlZCBvZiAxMDAwIE1icHMgKi8KKwlQSFlfQ1RfU1AxMDAJPSBQSFlfQ1RfU1BTX0xTQiwgLyogZW5hYmxlIHNwZWVkIG9mICAxMDAgTWJwcyAqLworCVBIWV9DVF9TUDEwCT0gMCwJCSAgLyogZW5hYmxlIHNwZWVkIG9mICAgMTAgTWJwcyAqLworfTsKKworZW51bSB7CisJUEhZX1NUX0VYVF9TVAk9IDE8PDgsIC8qIEJpdCAgODoJRXh0ZW5kZWQgU3RhdHVzIFByZXNlbnQgKi8KKworCVBIWV9TVF9QUkVfU1VQCT0gMTw8NiwgLyogQml0ICA2OglQcmVhbWJsZSBTdXBwcmVzc2lvbiAqLworCVBIWV9TVF9BTl9PVkVSCT0gMTw8NSwgLyogQml0ICA1OglBdXRvLU5lZ290aWF0aW9uIE92ZXIgKi8KKwlQSFlfU1RfUkVNX0ZMVAk9IDE8PDQsIC8qIEJpdCAgNDoJUmVtb3RlIEZhdWx0IENvbmRpdGlvbiBPY2N1cmVkICovCisJUEhZX1NUX0FOX0NBUAk9IDE8PDMsIC8qIEJpdCAgMzoJQXV0by1OZWdvdGlhdGlvbiBDYXBhYmlsaXR5ICovCisJUEhZX1NUX0xTWU5DCT0gMTw8MiwgLyogQml0ICAyOglMaW5rIFN5bmNocm9uaXplZCAqLworCVBIWV9TVF9KQUJfREVUCT0gMTw8MSwgLyogQml0ICAxOglKYWJiZXIgRGV0ZWN0ZWQgKi8KKwlQSFlfU1RfRVhUX1JFRwk9IDE8PDAsIC8qIEJpdCAgMDoJRXh0ZW5kZWQgUmVnaXN0ZXIgYXZhaWxhYmxlICovCit9OworCitlbnVtIHsKKwlQSFlfSTFfT1VJX01TSwk9IDB4M2Y8PDEwLCAvKiBCaXQgMTUuLjEwOglPcmdhbml6YXRpb24gVW5pcXVlIElEICovCisJUEhZX0kxX01PRF9OVU0JPSAweDNmPDw0LCAvKiBCaXQgIDkuLiA0OglNb2RlbCBOdW1iZXIgKi8KKwlQSFlfSTFfUkVWX01TSwk9IDB4ZiwgLyogQml0ICAzLi4gMDoJUmV2aXNpb24gTnVtYmVyICovCit9OworCisvKiBkaWZmZXJlbnQgTWFydmVsbCBQSFkgSWRzICovCitlbnVtIHsKKwlQSFlfTUFSVl9JRDBfVkFMPSAweDAxNDEsIC8qIE1hcnZlbGwgVW5pcXVlIElkZW50aWZpZXIgKi8KKworCVBIWV9CQ09NX0lEMV9BMQk9IDB4NjA0MSwKKwlQSFlfQkNPTV9JRDFfQjIJPSAweDYwNDMsCisJUEhZX0JDT01fSUQxX0MwCT0gMHg2MDQ0LAorCVBIWV9CQ09NX0lEMV9DNQk9IDB4NjA0NywKKworCVBIWV9NQVJWX0lEMV9CMAk9IDB4MEMyMywgLyogWXVrb24gKFBIWSA4OEUxMDExKSAqLworCVBIWV9NQVJWX0lEMV9CMgk9IDB4MEMyNSwgLyogWXVrb24tUGx1cyAoUEhZIDg4RTEwMTEpICovCisJUEhZX01BUlZfSUQxX0MyCT0gMHgwQ0MyLCAvKiBZdWtvbi1FQyAoUEhZIDg4RTExMTEpICovCisJUEhZX01BUlZfSUQxX1kyCT0gMHgwQzkxLCAvKiBZdWtvbi0yIChQSFkgODhFMTExMikgKi8KK307CisKKy8qIEFkdmVydGlzZW1lbnQgcmVnaXN0ZXIgYml0cyAqLworZW51bSB7CisJUEhZX0FOX05YVF9QRwk9IDE8PDE1LCAvKiBCaXQgMTU6CVJlcXVlc3QgTmV4dCBQYWdlICovCisJUEhZX0FOX0FDSwk9IDE8PDE0LCAvKiBCaXQgMTQ6CShybykgQWNrbm93bGVkZ2UgUmVjZWl2ZWQgKi8KKwlQSFlfQU5fUkYJPSAxPDwxMywgLyogQml0IDEzOglSZW1vdGUgRmF1bHQgQml0cyAqLworCisJUEhZX0FOX1BBVVNFX0FTWU0gPSAxPDwxMSwvKiBCaXQgMTE6CVRyeSBmb3IgYXN5bW1ldHJpYyAqLworCVBIWV9BTl9QQVVTRV9DQVAgPSAxPDwxMCwgLyogQml0IDEwOglUcnkgZm9yIHBhdXNlICovCisJUEhZX0FOXzEwMEJBU0U0CT0gMTw8OSwgLyogQml0IDk6CVRyeSBmb3IgMTAwbWJwcyA0ayBwYWNrZXRzICovCisJUEhZX0FOXzEwMEZVTEwJPSAxPDw4LCAvKiBCaXQgODoJVHJ5IGZvciAxMDBtYnBzIGZ1bGwtZHVwbGV4ICovCisJUEhZX0FOXzEwMEhBTEYJPSAxPDw3LCAvKiBCaXQgNzoJVHJ5IGZvciAxMDBtYnBzIGhhbGYtZHVwbGV4ICovCisJUEhZX0FOXzEwRlVMTAk9IDE8PDYsIC8qIEJpdCA2OglUcnkgZm9yIDEwbWJwcyBmdWxsLWR1cGxleCAqLworCVBIWV9BTl8xMEhBTEYJPSAxPDw1LCAvKiBCaXQgNToJVHJ5IGZvciAxMG1icHMgaGFsZi1kdXBsZXggKi8KKwlQSFlfQU5fQ1NNQQk9IDE8PDAsIC8qIEJpdCAwOglPbmx5IHNlbGVjdG9yIHN1cHBvcnRlZCAqLworCVBIWV9BTl9TRUwJPSAweDFmLCAvKiBCaXQgNC4uMDoJU2VsZWN0b3IgRmllbGQsIDAwMDAxPUV0aGVybmV0Ki8KKwlQSFlfQU5fRlVMTAk9IFBIWV9BTl8xMDBGVUxMIHwgUEhZX0FOXzEwRlVMTCB8IFBIWV9BTl9DU01BLAorCVBIWV9BTl9BTEwJPSBQSFlfQU5fMTBIQUxGIHwgUEhZX0FOXzEwRlVMTCB8CisJCSAgCSAgUEhZX0FOXzEwMEhBTEYgfCBQSFlfQU5fMTAwRlVMTCwKK307CisKKy8qKioqKiAgUEhZX0JDT01fMTAwMFRfU1RBVAkxNiBiaXQgci9vCTEwMDBCYXNlLVQgU3RhdHVzIFJlZyAqKioqKi8KKy8qKioqKiAgUEhZX01BUlZfMTAwMFRfU1RBVAkxNiBiaXQgci9vCTEwMDBCYXNlLVQgU3RhdHVzIFJlZyAqKioqKi8KK2VudW0geworCVBIWV9CXzEwMDBTX01TRgk9IDE8PDE1LCAvKiBCaXQgMTU6CU1hc3Rlci9TbGF2ZSBGYXVsdCAqLworCVBIWV9CXzEwMDBTX01TUgk9IDE8PDE0LCAvKiBCaXQgMTQ6CU1hc3Rlci9TbGF2ZSBSZXN1bHQgKi8KKwlQSFlfQl8xMDAwU19MUlMJPSAxPDwxMywgLyogQml0IDEzOglMb2NhbCBSZWNlaXZlciBTdGF0dXMgKi8KKwlQSFlfQl8xMDAwU19SUlMJPSAxPDwxMiwgLyogQml0IDEyOglSZW1vdGUgUmVjZWl2ZXIgU3RhdHVzICovCisJUEhZX0JfMTAwMFNfTFBfRkQJPSAxPDwxMSwgLyogQml0IDExOglMaW5rIFBhcnRuZXIgY2FuIEZEICovCisJUEhZX0JfMTAwMFNfTFBfSEQJPSAxPDwxMCwgLyogQml0IDEwOglMaW5rIFBhcnRuZXIgY2FuIEhEICovCisJCQkJCQkJCQkvKiBCaXQgIDkuLjg6CXJlc2VydmVkICovCisJUEhZX0JfMTAwMFNfSUVDCT0gMHhmZiwgLyogQml0ICA3Li4wOglJZGxlIEVycm9yIENvdW50ICovCit9OworCisvKiogTWFydmVsbC1TcGVjaWZpYyAqLworZW51bSB7CisJUEhZX01fQU5fTlhUX1BHCT0gMTw8MTUsIC8qIFJlcXVlc3QgTmV4dCBQYWdlICovCisJUEhZX01fQU5fQUNLCT0gMTw8MTQsIC8qIChybykJQWNrbm93bGVkZ2UgUmVjZWl2ZWQgKi8KKwlQSFlfTV9BTl9SRgk9IDE8PDEzLCAvKiBSZW1vdGUgRmF1bHQgKi8KKworCVBIWV9NX0FOX0FTUAk9IDE8PDExLCAvKiBBc3ltbWV0cmljIFBhdXNlICovCisJUEhZX01fQU5fUEMJPSAxPDwxMCwgLyogTUFDIFBhdXNlIGltcGxlbWVudGVkICovCisJUEhZX01fQU5fMTAwX1Q0CT0gMTw8OSwgLyogTm90IGNhcC4gMTAwQmFzZS1UNCAoYWx3YXlzIDApICovCisJUEhZX01fQU5fMTAwX0ZECT0gMTw8OCwgLyogQWR2ZXJ0aXNlIDEwMEJhc2UtVFggRnVsbCBEdXBsZXggKi8KKwlQSFlfTV9BTl8xMDBfSEQJPSAxPDw3LCAvKiBBZHZlcnRpc2UgMTAwQmFzZS1UWCBIYWxmIER1cGxleCAqLworCVBIWV9NX0FOXzEwX0ZECT0gMTw8NiwgLyogQWR2ZXJ0aXNlIDEwQmFzZS1UWCBGdWxsIER1cGxleCAqLworCVBIWV9NX0FOXzEwX0hECT0gMTw8NSwgLyogQWR2ZXJ0aXNlIDEwQmFzZS1UWCBIYWxmIER1cGxleCAqLworCVBIWV9NX0FOX1NFTF9NU0sgPTB4MWY8PDQsCS8qIEJpdCAgNC4uIDA6IFNlbGVjdG9yIEZpZWxkIE1hc2sgKi8KK307CisKKy8qIHNwZWNpYWwgZGVmaW5lcyBmb3IgRklCRVIgKDg4RTEwMTFTIG9ubHkpICovCitlbnVtIHsKKwlQSFlfTV9BTl9BU1BfWAk9IDE8PDgsIC8qIEFzeW1tZXRyaWMgUGF1c2UgKi8KKwlQSFlfTV9BTl9QQ19YCT0gMTw8NywgLyogTUFDIFBhdXNlIGltcGxlbWVudGVkICovCisJUEhZX01fQU5fMTAwMFhfQUhECT0gMTw8NiwgLyogQWR2ZXJ0aXNlIDEwMDAwQmFzZS1YIEhhbGYgRHVwbGV4ICovCisJUEhZX01fQU5fMTAwMFhfQUZECT0gMTw8NSwgLyogQWR2ZXJ0aXNlIDEwMDAwQmFzZS1YIEZ1bGwgRHVwbGV4ICovCit9OworCisvKiBQYXVzZSBCaXRzIChQSFlfTV9BTl9BU1BfWCBhbmQgUEhZX01fQU5fUENfWCkgZW5jb2RpbmcgKi8KK2VudW0geworCVBIWV9NX1BfTk9fUEFVU0VfWAk9IDA8PDcsLyogQml0ICA4Li4gNzoJbm8gUGF1c2UgTW9kZSAqLworCVBIWV9NX1BfU1lNX01EX1gJPSAxPDw3LCAvKiBCaXQgIDguLiA3OglzeW1tZXRyaWMgUGF1c2UgTW9kZSAqLworCVBIWV9NX1BfQVNZTV9NRF9YCT0gMjw8NywvKiBCaXQgIDguLiA3Oglhc3ltbWV0cmljIFBhdXNlIE1vZGUgKi8KKwlQSFlfTV9QX0JPVEhfTURfWAk9IDM8PDcsLyogQml0ICA4Li4gNzoJYm90aCBQYXVzZSBNb2RlICovCit9OworCisvKioqKiogIFBIWV9NQVJWXzEwMDBUX0NUUkwJMTYgYml0IHIvdwkxMDAwQmFzZS1UIENvbnRyb2wgUmVnICoqKioqLworZW51bSB7CisJUEhZX01fMTAwMENfVEVTVAk9IDc8PDEzLC8qIEJpdCAxNS4uMTM6CVRlc3QgTW9kZXMgKi8KKwlQSFlfTV8xMDAwQ19NU0UJPSAxPDwxMiwgLyogTWFudWFsIE1hc3Rlci9TbGF2ZSBFbmFibGUgKi8KKwlQSFlfTV8xMDAwQ19NU0MJPSAxPDwxMSwgLyogTS9TIENvbmZpZ3VyYXRpb24gKDE9TWFzdGVyKSAqLworCVBIWV9NXzEwMDBDX01QRAk9IDE8PDEwLCAvKiBNdWx0aS1Qb3J0IERldmljZSAqLworCVBIWV9NXzEwMDBDX0FGRAk9IDE8PDksIC8qIEFkdmVydGlzZSBGdWxsIER1cGxleCAqLworCVBIWV9NXzEwMDBDX0FIRAk9IDE8PDgsIC8qIEFkdmVydGlzZSBIYWxmIER1cGxleCAqLworfTsKKworLyoqKioqICBQSFlfTUFSVl9QSFlfQ1RSTAkxNiBiaXQgci93CVBIWSBTcGVjaWZpYyBDdHJsIFJlZyAqKioqKi8KK2VudW0geworCVBIWV9NX1BDX1RYX0ZGRF9NU0sJPSAzPDwxNCwvKiBCaXQgMTUuLjE0OiBUeCBGSUZPIERlcHRoIE1hc2sgKi8KKwlQSFlfTV9QQ19SWF9GRkRfTVNLCT0gMzw8MTIsLyogQml0IDEzLi4xMjogUnggRklGTyBEZXB0aCBNYXNrICovCisJUEhZX01fUENfQVNTX0NSU19UWAk9IDE8PDExLCAvKiBBc3NlcnQgQ1JTIG9uIFRyYW5zbWl0ICovCisJUEhZX01fUENfRkxfR09PRAk9IDE8PDEwLCAvKiBGb3JjZSBMaW5rIEdvb2QgKi8KKwlQSFlfTV9QQ19FTl9ERVRfTVNLCT0gMzw8OCwvKiBCaXQgIDkuLiA4OiBFbmVyZ3kgRGV0ZWN0IE1hc2sgKi8KKwlQSFlfTV9QQ19FTkFfRVhUX0QJPSAxPDw3LCAvKiBFbmFibGUgRXh0LiBEaXN0YW5jZSAoMTBCVCkgKi8KKwlQSFlfTV9QQ19NRElYX01TSwk9IDM8PDUsLyogQml0ICA2Li4gNTogTURJL01ESVggQ29uZmlnLiBNYXNrICovCisJUEhZX01fUENfRElTXzEyNUNMSwk9IDE8PDQsIC8qIERpc2FibGUgMTI1IENMSyAqLworCVBIWV9NX1BDX01BQ19QT1dfVVAJPSAxPDwzLCAvKiBNQUMgUG93ZXIgdXAgKi8KKwlQSFlfTV9QQ19TUUVfVF9FTkEJPSAxPDwyLCAvKiBTUUUgVGVzdCBFbmFibGVkICovCisJUEhZX01fUENfUE9MX1JfRElTCT0gMTw8MSwgLyogUG9sYXJpdHkgUmV2ZXJzYWwgRGlzYWJsZWQgKi8KKwlQSFlfTV9QQ19ESVNfSkFCQkVSCT0gMTw8MCwgLyogRGlzYWJsZSBKYWJiZXIgKi8KK307CisKK2VudW0geworCVBIWV9NX1BDX0VOX0RFVAkJPSAyPDw4LAkvKiBFbmVyZ3kgRGV0ZWN0IChNb2RlIDEpICovCisJUEhZX01fUENfRU5fREVUX1BMVVMJPSAzPDw4LCAvKiBFbmVyZ3kgRGV0ZWN0IFBsdXMgKE1vZGUgMikgKi8KK307CisKKyNkZWZpbmUgUEhZX01fUENfTURJX1hNT0RFKHgpCSgoKHgpPDw1KSAmIFBIWV9NX1BDX01ESVhfTVNLKQorCitlbnVtIHsKKwlQSFlfTV9QQ19NQU5fTURJCT0gMCwgLyogMDAgPSBNYW51YWwgTURJIGNvbmZpZ3VyYXRpb24gKi8KKwlQSFlfTV9QQ19NQU5fTURJWAk9IDEsIC8qIDAxID0gTWFudWFsIE1ESVggY29uZmlndXJhdGlvbiAqLworCVBIWV9NX1BDX0VOQV9BVVRPCT0gMywgLyogMTEgPSBFbmFibGUgQXV0b21hdGljIENyb3Nzb3ZlciAqLworfTsKKworLyogZm9yIDEwLzEwMCBGYXN0IEV0aGVybmV0IFBIWSAoODhFMzA4MiBvbmx5KSAqLworZW51bSB7CisJUEhZX01fUENfRU5BX0RURV9EVAk9IDE8PDE1LCAvKiBFbmFibGUgRGF0YSBUZXJtaW5hbCBFcXUuIChEVEUpIERldGVjdCAqLworCVBIWV9NX1BDX0VOQV9FTkVfRFQJPSAxPDwxNCwgLyogRW5hYmxlIEVuZXJneSBEZXRlY3QgKHNlbnNlICYgcHVsc2UpICovCisJUEhZX01fUENfRElTX05MUF9DSwk9IDE8PDEzLCAvKiBEaXNhYmxlIE5vcm1hbCBMaW5rIFB1bHMgKE5MUCkgQ2hlY2sgKi8KKwlQSFlfTV9QQ19FTkFfTElQX05QCT0gMTw8MTIsIC8qIEVuYWJsZSBMaW5rIFBhcnRuZXIgTmV4dCBQYWdlIFJlZy4gKi8KKwlQSFlfTV9QQ19ESVNfTkxQX0dOCT0gMTw8MTEsIC8qIERpc2FibGUgTm9ybWFsIExpbmsgUHVscyBHZW5lcmF0aW9uICovCisKKwlQSFlfTV9QQ19ESVNfU0NSQU1CCT0gMTw8OSwgLyogRGlzYWJsZSBTY3JhbWJsZXIgKi8KKwlQSFlfTV9QQ19ESVNfRkVGSQk9IDE8PDgsIC8qIERpc2FibGUgRmFyIEVuZCBGYXVsdCBJbmRpYy4gKEZFRkkpICovCisKKwlQSFlfTV9QQ19TSF9UUF9TRUwJPSAxPDw2LCAvKiBTaGllbGRlZCBUd2lzdGVkIFBhaXIgU2VsZWN0ICovCisJUEhZX01fUENfUlhfRkRfTVNLCT0gMzw8MiwvKiBCaXQgIDMuLiAyOiBSeCBGSUZPIERlcHRoIE1hc2sgKi8KK307CisKKy8qKioqKiAgUEhZX01BUlZfUEhZX1NUQVQJMTYgYml0IHIvbwlQSFkgU3BlY2lmaWMgU3RhdHVzIFJlZyAqKioqKi8KK2VudW0geworCVBIWV9NX1BTX1NQRUVEX01TSwk9IDM8PDE0LCAvKiBCaXQgMTUuLjE0OiBTcGVlZCBNYXNrICovCisJUEhZX01fUFNfU1BFRURfMTAwMAk9IDE8PDE1LCAvKgkJMTAgPSAxMDAwIE1icHMgKi8KKwlQSFlfTV9QU19TUEVFRF8xMDAJPSAxPDwxNCwgLyoJCTAxID0gIDEwMCBNYnBzICovCisJUEhZX01fUFNfU1BFRURfMTAJPSAwLAkgLyoJCTAwID0gICAxMCBNYnBzICovCisJUEhZX01fUFNfRlVMTF9EVVAJPSAxPDwxMywgLyogRnVsbCBEdXBsZXggKi8KKwlQSFlfTV9QU19QQUdFX1JFQwk9IDE8PDEyLCAvKiBQYWdlIFJlY2VpdmVkICovCisJUEhZX01fUFNfU1BEVVBfUkVTCT0gMTw8MTEsIC8qIFNwZWVkICYgRHVwbGV4IFJlc29sdmVkICovCisJUEhZX01fUFNfTElOS19VUAk9IDE8PDEwLCAvKiBMaW5rIFVwICovCisJUEhZX01fUFNfQ0FCTEVfTVNLCT0gNzw8NywgIC8qIEJpdCAgOS4uIDc6IENhYmxlIExlbmd0aCBNYXNrICovCisJUEhZX01fUFNfTURJX1hfU1RBVAk9IDE8PDYsICAvKiBNREkgQ3Jvc3NvdmVyIFN0YXQgKDE9TURJWCkgKi8KKwlQSFlfTV9QU19ET1dOU19TVEFUCT0gMTw8NSwgIC8qIERvd25zaGlmdCBTdGF0dXMgKDE9ZG93bnNoLikgKi8KKwlQSFlfTV9QU19FTkRFVF9TVEFUCT0gMTw8NCwgIC8qIEVuZXJneSBEZXRlY3QgU3RhdHVzICgxPWFjdCkgKi8KKwlQSFlfTV9QU19UWF9QX0VOCT0gMTw8MywgIC8qIFR4IFBhdXNlIEVuYWJsZWQgKi8KKwlQSFlfTV9QU19SWF9QX0VOCT0gMTw8MiwgIC8qIFJ4IFBhdXNlIEVuYWJsZWQgKi8KKwlQSFlfTV9QU19QT0xfUkVWCT0gMTw8MSwgIC8qIFBvbGFyaXR5IFJldmVyc2VkICovCisJUEhZX01fUFNfSkFCQkVSCQk9IDE8PDAsICAvKiBKYWJiZXIgKi8KK307CisKKyNkZWZpbmUgUEhZX01fUFNfUEFVU0VfTVNLCShQSFlfTV9QU19UWF9QX0VOIHwgUEhZX01fUFNfUlhfUF9FTikKKworLyogZm9yIDEwLzEwMCBGYXN0IEV0aGVybmV0IFBIWSAoODhFMzA4MiBvbmx5KSAqLworZW51bSB7CisJUEhZX01fUFNfRFRFX0RFVEVDVAk9IDE8PDE1LCAvKiBEYXRhIFRlcm1pbmFsIEVxdWlwbWVudCAoRFRFKSBEZXRlY3RlZCAqLworCVBIWV9NX1BTX1JFU19TUEVFRAk9IDE8PDE0LCAvKiBSZXNvbHZlZCBTcGVlZCAoMT0xMDAgTWJwcywgMD0xMCBNYnBzICovCit9OworCitlbnVtIHsKKwlQSFlfTV9JU19BTl9FUlJPUgk9IDE8PDE1LCAvKiBBdXRvLU5lZ290aWF0aW9uIEVycm9yICovCisJUEhZX01fSVNfTFNQX0NIQU5HRQk9IDE8PDE0LCAvKiBMaW5rIFNwZWVkIENoYW5nZWQgKi8KKwlQSFlfTV9JU19EVVBfQ0hBTkdFCT0gMTw8MTMsIC8qIER1cGxleCBNb2RlIENoYW5nZWQgKi8KKwlQSFlfTV9JU19BTl9QUgkJPSAxPDwxMiwgLyogUGFnZSBSZWNlaXZlZCAqLworCVBIWV9NX0lTX0FOX0NPTVBMCT0gMTw8MTEsIC8qIEF1dG8tTmVnb3RpYXRpb24gQ29tcGxldGVkICovCisJUEhZX01fSVNfTFNUX0NIQU5HRQk9IDE8PDEwLCAvKiBMaW5rIFN0YXR1cyBDaGFuZ2VkICovCisJUEhZX01fSVNfU1lNQl9FUlJPUgk9IDE8PDksIC8qIFN5bWJvbCBFcnJvciAqLworCVBIWV9NX0lTX0ZBTFNFX0NBUlIJPSAxPDw4LCAvKiBGYWxzZSBDYXJyaWVyICovCisJUEhZX01fSVNfRklGT19FUlJPUgk9IDE8PDcsIC8qIEZJRk8gT3ZlcmZsb3cvVW5kZXJydW4gRXJyb3IgKi8KKwlQSFlfTV9JU19NRElfQ0hBTkdFCT0gMTw8NiwgLyogTURJIENyb3Nzb3ZlciBDaGFuZ2VkICovCisJUEhZX01fSVNfRE9XTlNIX0RFVAk9IDE8PDUsIC8qIERvd25zaGlmdCBEZXRlY3RlZCAqLworCVBIWV9NX0lTX0VORF9DSEFOR0UJPSAxPDw0LCAvKiBFbmVyZ3kgRGV0ZWN0IENoYW5nZWQgKi8KKworCVBIWV9NX0lTX0RURV9DSEFOR0UJPSAxPDwyLCAvKiBEVEUgUG93ZXIgRGV0LiBTdGF0dXMgQ2hhbmdlZCAqLworCVBIWV9NX0lTX1BPTF9DSEFOR0UJPSAxPDwxLCAvKiBQb2xhcml0eSBDaGFuZ2VkICovCisJUEhZX01fSVNfSkFCQkVSCQk9IDE8PDAsIC8qIEphYmJlciAqLworCisJUEhZX01fREVGX01TSwkJPSBQSFlfTV9JU19MU1BfQ0hBTkdFIHwgUEhZX01fSVNfTFNUX0NIQU5HRQorCQkJCSB8IFBIWV9NX0lTX0ZJRk9fRVJST1IsCisJUEhZX01fQU5fTVNLCSAgICAgICA9IFBIWV9NX0lTX0FOX0VSUk9SIHwgUEhZX01fSVNfQU5fQ09NUEwsCit9OworCisKKy8qKioqKiAgUEhZX01BUlZfRVhUX0NUUkwJMTYgYml0IHIvdwlFeHQuIFBIWSBTcGVjaWZpYyBDdHJsICoqKioqLworZW51bSB7CisJUEhZX01fRUNfRU5BX0JDX0VYVCA9IDE8PDE1LCAvKiBFbmFibGUgQmxvY2sgQ2Fyci4gRXh0LiAoODhFMTExMSBvbmx5KSAqLworCVBIWV9NX0VDX0VOQV9MSU5fTEIgPSAxPDwxNCwgLyogRW5hYmxlIExpbmUgTG9vcGJhY2sgKDg4RTExMTEgb25seSkgKi8KKworCVBIWV9NX0VDX0RJU19MSU5LX1AgPSAxPDwxMiwgLyogRGlzYWJsZSBMaW5rIFB1bHNlcyAoODhFMTExMSBvbmx5KSAqLworCVBIWV9NX0VDX01fRFNDX01TSyAgPSAzPDwxMCwgLyogQml0IDExLi4xMDoJTWFzdGVyIERvd25zaGlmdCBDb3VudGVyICovCisJCQkJCS8qICg4OEUxMDExIG9ubHkpICovCisJUEhZX01fRUNfU19EU0NfTVNLICA9IDM8PDgsLyogQml0ICA5Li4gODoJU2xhdmUgIERvd25zaGlmdCBDb3VudGVyICovCisJCQkJICAgICAgIC8qICg4OEUxMDExIG9ubHkpICovCisJUEhZX01fRUNfTV9EU0NfTVNLMiA9IDc8PDksLyogQml0IDExLi4gOToJTWFzdGVyIERvd25zaGlmdCBDb3VudGVyICovCisJCQkJCS8qICg4OEUxMTExIG9ubHkpICovCisJUEhZX01fRUNfRE9XTl9TX0VOQSA9IDE8PDgsIC8qIERvd25zaGlmdCBFbmFibGUgKDg4RTExMTEgb25seSkgKi8KKwkJCQkJLyogISEhIEVycmF0YSBpbiBzcGVjLiAoMSA9IGRpc2FibGUpICovCisJUEhZX01fRUNfUlhfVElNX0NUICA9IDE8PDcsIC8qIFJHTUlJIFJ4IFRpbWluZyBDb250cm9sKi8KKwlQSFlfTV9FQ19NQUNfU19NU0sgID0gNzw8NCwvKiBCaXQgIDYuLiA0OglEZWYuIE1BQyBpbnRlcmZhY2Ugc3BlZWQgKi8KKwlQSFlfTV9FQ19GSUJfQU5fRU5BID0gMTw8MywgLyogRmliZXIgQXV0by1OZWcuIEVuYWJsZSAoODhFMTAxMVMgb25seSkgKi8KKwlQSFlfTV9FQ19EVEVfRF9FTkEgID0gMTw8MiwgLyogRFRFIERldGVjdCBFbmFibGUgKDg4RTExMTEgb25seSkgKi8KKwlQSFlfTV9FQ19UWF9USU1fQ1QgID0gMTw8MSwgLyogUkdNSUkgVHggVGltaW5nIENvbnRyb2wgKi8KKwlQSFlfTV9FQ19UUkFOU19ESVMgID0gMTw8MCwgLyogVHJhbnNtaXR0ZXIgRGlzYWJsZSAoODhFMTExMSBvbmx5KSAqL307CisKKyNkZWZpbmUgUEhZX01fRUNfTV9EU0MoeCkJKCh4KTw8MTAgJiBQSFlfTV9FQ19NX0RTQ19NU0spCisJCQkJCS8qIDAwPTF4OyAwMT0yeDsgMTA9M3g7IDExPTR4ICovCisjZGVmaW5lIFBIWV9NX0VDX1NfRFNDKHgpCSgoeCk8PDggJiBQSFlfTV9FQ19TX0RTQ19NU0spCisJCQkJCS8qIDAwPWRpczsgMDE9MXg7IDEwPTJ4OyAxMT0zeCAqLworI2RlZmluZSBQSFlfTV9FQ19EU0NfMih4KQkoKHgpPDw5ICYgUEhZX01fRUNfTV9EU0NfTVNLMikKKwkJCQkJLyogMDAwPTF4OyAwMDE9Mng7IDAxMD0zeDsgMDExPTR4ICovCisjZGVmaW5lIFBIWV9NX0VDX01BQ19TKHgpCSgoeCk8PDQgJiBQSFlfTV9FQ19NQUNfU19NU0spCisJCQkJCS8qIDAxWD0wOyAxMTA9Mi41OyAxMTE9MjUgKE1IeikgKi8KKworLyogZm9yIFl1a29uLTIgR2lnYWJpdCBFdGhlcm5ldCBQSFkgKDg4RTExMTIgb25seSkgKi8KK2VudW0geworCVBIWV9NX1BDX0RJU19MSU5LX1BhCT0gMTw8MTUsLyogRGlzYWJsZSBMaW5rIFB1bHNlcyAqLworCVBIWV9NX1BDX0RTQ19NU0sJPSA3PDwxMiwvKiBCaXQgMTQuLjEyOglEb3duc2hpZnQgQ291bnRlciAqLworCVBIWV9NX1BDX0RPV05fU19FTkEJPSAxPDwxMSwvKiBEb3duc2hpZnQgRW5hYmxlICovCit9OworLyogISEhIEVycmF0YSBpbiBzcGVjLiAoMSA9IGRpc2FibGUpICovCisKKyNkZWZpbmUgUEhZX01fUENfRFNDKHgpCQkJKCgoeCk8PDEyKSAmIFBIWV9NX1BDX0RTQ19NU0spCisJCQkJCQkJCQkJCS8qIDEwMD01eDsgMTAxPTZ4OyAxMTA9N3g7IDExMT04eCAqLworZW51bSB7CisJTUFDX1RYX0NMS18wX01IWgk9IDIsCisJTUFDX1RYX0NMS18yXzVfTUhaCT0gNiwKKwlNQUNfVFhfQ0xLXzI1X01IWiAJPSA3LAorfTsKKworLyoqKioqICBQSFlfTUFSVl9MRURfQ1RSTAkxNiBiaXQgci93CUxFRCBDb250cm9sIFJlZyAqKioqKi8KK2VudW0geworCVBIWV9NX0xFRENfRElTX0xFRAk9IDE8PDE1LCAvKiBEaXNhYmxlIExFRCAqLworCVBIWV9NX0xFRENfUFVMU19NU0sJPSA3PDwxMiwvKiBCaXQgMTQuLjEyOiBQdWxzZSBTdHJldGNoIE1hc2sgKi8KKwlQSFlfTV9MRURDX0ZfSU5UCT0gMTw8MTEsIC8qIEZvcmNlIEludGVycnVwdCAqLworCVBIWV9NX0xFRENfQkxfUl9NU0sJPSA3PDw4LC8qIEJpdCAxMC4uIDg6IEJsaW5rIFJhdGUgTWFzayAqLworCVBIWV9NX0xFRENfRFBfQ19MU0IJPSAxPDw3LCAvKiBEdXBsZXggQ29udHJvbCAoTFNCLCA4OEUxMTExIG9ubHkpICovCisJUEhZX01fTEVEQ19UWF9DX0xTQgk9IDE8PDYsIC8qIFR4IENvbnRyb2wgKExTQiwgODhFMTExMSBvbmx5KSAqLworCVBIWV9NX0xFRENfTEtfQ19NU0sJPSA3PDwzLC8qIEJpdCAgNS4uIDM6IExpbmsgQ29udHJvbCBNYXNrICovCisJCQkJCS8qICg4OEUxMTExIG9ubHkpICovCit9OworCitlbnVtIHsKKwlQSFlfTV9MRURDX0xJTktfTVNLCT0gMzw8MywvKiBCaXQgIDQuLiAzOiBMaW5rIENvbnRyb2wgTWFzayAqLworCQkJCQkJCQkJLyogKDg4RTEwMTEgb25seSkgKi8KKwlQSFlfTV9MRURDX0RQX0NUUkwJPSAxPDwyLCAvKiBEdXBsZXggQ29udHJvbCAqLworCVBIWV9NX0xFRENfRFBfQ19NU0IJPSAxPDwyLCAvKiBEdXBsZXggQ29udHJvbCAoTVNCLCA4OEUxMTExIG9ubHkpICovCisJUEhZX01fTEVEQ19SWF9DVFJMCT0gMTw8MSwgLyogUnggQWN0aXZpdHkgLyBMaW5rICovCisJUEhZX01fTEVEQ19UWF9DVFJMCT0gMTw8MCwgLyogVHggQWN0aXZpdHkgLyBMaW5rICovCisJUEhZX01fTEVEQ19UWF9DX01TQgk9IDE8PDAsIC8qIFR4IENvbnRyb2wgKE1TQiwgODhFMTExMSBvbmx5KSAqLworfTsKKworI2RlZmluZSBQSFlfTV9MRURfUFVMU19EVVIoeCkJKCgoeCk8PDEyKSAmIFBIWV9NX0xFRENfUFVMU19NU0spCisKKy8qKioqKiAgUEhZX01BUlZfUEhZX1NUQVQgKHBhZ2UgMykxNiBiaXQgci93CVBvbGFyaXR5IENvbnRyb2wgUmVnLiAqKioqKi8KK2VudW0geworCVBIWV9NX1BPTENfTFMxTV9NU0sJPSAweGY8PDEyLCAvKiBCaXQgMTUuLjEyOiBMT1MsU1RBVDEgTWl4ICUgTWFzayAqLworCVBIWV9NX1BPTENfSVMwTV9NU0sJPSAweGY8PDgsICAvKiBCaXQgMTEuLiA4OiBJTklULFNUQVQwIE1peCAlIE1hc2sgKi8KKwlQSFlfTV9QT0xDX0xPU19NU0sJPSAweDM8PDYsICAvKiBCaXQgIDcuLiA2OiBMT1MgUG9sLiBDdHJsLiBNYXNrICovCisJUEhZX01fUE9MQ19JTklUX01TSwk9IDB4Mzw8NCwgIC8qIEJpdCAgNS4uIDQ6IElOSVQgUG9sLiBDdHJsLiBNYXNrICovCisJUEhZX01fUE9MQ19TVEExX01TSwk9IDB4Mzw8MiwgIC8qIEJpdCAgMy4uIDI6IFNUQVQxIFBvbC4gQ3RybC4gTWFzayAqLworCVBIWV9NX1BPTENfU1RBMF9NU0sJPSAweDMsICAgICAvKiBCaXQgIDEuLiAwOiBTVEFUMCBQb2wuIEN0cmwuIE1hc2sgKi8KK307CisKKyNkZWZpbmUgUEhZX01fUE9MQ19MUzFfUF9NSVgoeCkJKCgoeCk8PDEyKSAmIFBIWV9NX1BPTENfTFMxTV9NU0spCisjZGVmaW5lIFBIWV9NX1BPTENfSVMwX1BfTUlYKHgpCSgoKHgpPDw4KSAmIFBIWV9NX1BPTENfSVMwTV9NU0spCisjZGVmaW5lIFBIWV9NX1BPTENfTE9TX0NUUkwoeCkJKCgoeCk8PDYpICYgUEhZX01fUE9MQ19MT1NfTVNLKQorI2RlZmluZSBQSFlfTV9QT0xDX0lOSVRfQ1RSTCh4KQkoKCh4KTw8NCkgJiBQSFlfTV9QT0xDX0lOSVRfTVNLKQorI2RlZmluZSBQSFlfTV9QT0xDX1NUQTFfQ1RSTCh4KQkoKCh4KTw8MikgJiBQSFlfTV9QT0xDX1NUQTFfTVNLKQorI2RlZmluZSBQSFlfTV9QT0xDX1NUQTBfQ1RSTCh4KQkoKCh4KTw8MCkgJiBQSFlfTV9QT0xDX1NUQTBfTVNLKQorCitlbnVtIHsKKwlQVUxTX05PX1NUUgk9IDAsLyogbm8gcHVsc2Ugc3RyZXRjaGluZyAqLworCVBVTFNfMjFNUwk9IDEsLyogMjEgbXMgdG8gNDIgbXMgKi8KKwlQVUxTXzQyTVMJPSAyLC8qIDQyIG1zIHRvIDg0IG1zICovCisJUFVMU184NE1TCT0gMywvKiA4NCBtcyB0byAxNzAgbXMgKi8KKwlQVUxTXzE3ME1TCT0gNCwvKiAxNzAgbXMgdG8gMzQwIG1zICovCisJUFVMU18zNDBNUwk9IDUsLyogMzQwIG1zIHRvIDY3MCBtcyAqLworCVBVTFNfNjcwTVMJPSA2LC8qIDY3MCBtcyB0byAxLjMgcyAqLworCVBVTFNfMTMwME1TCT0gNywvKiAxLjMgcyB0byAyLjcgcyAqLworfTsKKworI2RlZmluZSBQSFlfTV9MRURfQkxJTktfUlQoeCkJKCgoeCk8PDgpICYgUEhZX01fTEVEQ19CTF9SX01TSykKKworZW51bSB7CisJQkxJTktfNDJNUwk9IDAsLyogNDIgbXMgKi8KKwlCTElOS184NE1TCT0gMSwvKiA4NCBtcyAqLworCUJMSU5LXzE3ME1TCT0gMiwvKiAxNzAgbXMgKi8KKwlCTElOS18zNDBNUwk9IDMsLyogMzQwIG1zICovCisJQkxJTktfNjcwTVMJPSA0LC8qIDY3MCBtcyAqLworfTsKKworLyoqKioqICBQSFlfTUFSVl9MRURfT1ZFUgkxNiBiaXQgci93CU1hbnVhbCBMRUQgT3ZlcnJpZGUgUmVnICoqKioqLworI2RlZmluZSBQSFlfTV9MRURfTU9fU0dNSUkoeCkJKCh4KTw8MTQpIC8qIEJpdCAxNS4uMTQ6ICBTR01JSSBBTiBUaW1lciAqLworCQkJCQkJCQkJCS8qIEJpdCAxMy4uMTI6CXJlc2VydmVkICovCisjZGVmaW5lIFBIWV9NX0xFRF9NT19EVVAoeCkJKCh4KTw8MTApIC8qIEJpdCAxMS4uMTA6ICBEdXBsZXggKi8KKyNkZWZpbmUgUEhZX01fTEVEX01PXzEwKHgpCSgoeCk8PDgpIC8qIEJpdCAgOS4uIDg6ICBMaW5rIDEwICovCisjZGVmaW5lIFBIWV9NX0xFRF9NT18xMDAoeCkJKCh4KTw8NikgLyogQml0ICA3Li4gNjogIExpbmsgMTAwICovCisjZGVmaW5lIFBIWV9NX0xFRF9NT18xMDAwKHgpCSgoeCk8PDQpIC8qIEJpdCAgNS4uIDQ6ICBMaW5rIDEwMDAgKi8KKyNkZWZpbmUgUEhZX01fTEVEX01PX1JYKHgpCSgoeCk8PDIpIC8qIEJpdCAgMy4uIDI6ICBSeCAqLworI2RlZmluZSBQSFlfTV9MRURfTU9fVFgoeCkJKCh4KTw8MCkgLyogQml0ICAxLi4gMDogIFR4ICovCisKK2VudW0geworCU1PX0xFRF9OT1JNCT0gMCwKKwlNT19MRURfQkxJTksJPSAxLAorCU1PX0xFRF9PRkYJPSAyLAorCU1PX0xFRF9PTgk9IDMsCit9OworCisvKioqKiogIFBIWV9NQVJWX0VYVF9DVFJMXzIJMTYgYml0IHIvdwlFeHQuIFBIWSBTcGVjaWZpYyBDdHJsIDIgKioqKiovCitlbnVtIHsKKwlQSFlfTV9FQzJfRklfSU1QRUQJPSAxPDw2LCAvKiBGaWJlciBJbnB1dCAgSW1wZWRhbmNlICovCisJUEhZX01fRUMyX0ZPX0lNUEVECT0gMTw8NSwgLyogRmliZXIgT3V0cHV0IEltcGVkYW5jZSAqLworCVBIWV9NX0VDMl9GT19NX0NMSwk9IDE8PDQsIC8qIEZpYmVyIE1vZGUgQ2xvY2sgRW5hYmxlICovCisJUEhZX01fRUMyX0ZPX0JPT1NUCT0gMTw8MywgLyogRmliZXIgT3V0cHV0IEJvb3N0ICovCisJUEhZX01fRUMyX0ZPX0FNX01TSwk9IDcsLyogQml0ICAyLi4gMDoJRmliZXIgT3V0cHV0IEFtcGxpdHVkZSAqLworfTsKKworLyoqKioqICBQSFlfTUFSVl9FWFRfUF9TVEFUIDE2IGJpdCByL3cJRXh0LiBQSFkgU3BlY2lmaWMgU3RhdHVzICoqKioqLworZW51bSB7CisJUEhZX01fRkNfQVVUT19TRUwJPSAxPDwxNSwgLyogRmliZXIvQ29wcGVyIEF1dG8gU2VsLiBEaXMuICovCisJUEhZX01fRkNfQU5fUkVHX0FDQwk9IDE8PDE0LCAvKiBGaWJlci9Db3BwZXIgQU4gUmVnLiBBY2Nlc3MgKi8KKwlQSFlfTV9GQ19SRVNPTFVUSU9OCT0gMTw8MTMsIC8qIEZpYmVyL0NvcHBlciBSZXNvbHV0aW9uICovCisJUEhZX01fU0VSX0lGX0FOX0JQCT0gMTw8MTIsIC8qIFNlci4gSUYgQU4gQnlwYXNzIEVuYWJsZSAqLworCVBIWV9NX1NFUl9JRl9CUF9TVAk9IDE8PDExLCAvKiBTZXIuIElGIEFOIEJ5cGFzcyBTdGF0dXMgKi8KKwlQSFlfTV9JUlFfUE9MQVJJVFkJPSAxPDwxMCwgLyogSVJRIHBvbGFyaXR5ICovCisJUEhZX01fRElTX0FVVF9NRUQJPSAxPDw5LCAvKiBEaXNhYmxlIEF1dC4gTWVkaXVtIFJlZy4gU2VsZWN0aW9uICovCisJLyogKDg4RTExMTEgb25seSkgKi8KKworCVBIWV9NX1VORE9DMQkJPSAxPDw3LCAvKiB1bmRvY3VtZW50ZWQgYml0ICEhICovCisJUEhZX01fRFRFX1BPV19TVEFUCT0gMTw8NCwgLyogRFRFIFBvd2VyIFN0YXR1cyAoODhFMTExMSBvbmx5KSAqLworCVBIWV9NX01PREVfTUFTSwk9IDB4ZiwgLyogQml0ICAzLi4gMDogY29weSBvZiBIV0NGRyBNT0RFWzM6MF0gKi8KK307CisKKy8qIGZvciAxMC8xMDAgRmFzdCBFdGhlcm5ldCBQSFkgKDg4RTMwODIgb25seSkgKi8KKy8qKioqKiAgUEhZX01BUlZfRkVfTEVEX1BBUgkJMTYgYml0IHIvdwlMRUQgUGFyYWxsZWwgU2VsZWN0IFJlZy4gKioqKiovCisJCQkJCQkJCQkvKiBCaXQgMTUuLjEyOiByZXNlcnZlZCAodXNlZCBpbnRlcm5hbGx5KSAqLworZW51bSB7CisJUEhZX01fRkVMUF9MRUQyX01TSyA9IDB4Zjw8OCwJLyogQml0IDExLi4gODogTEVEMiBNYXNrIChMSU5LKSAqLworCVBIWV9NX0ZFTFBfTEVEMV9NU0sgPSAweGY8PDQsCS8qIEJpdCAgNy4uIDQ6IExFRDEgTWFzayAoQUNUKSAqLworCVBIWV9NX0ZFTFBfTEVEMF9NU0sgPSAweGYsIC8qIEJpdCAgMy4uIDA6IExFRDAgTWFzayAoU1BFRUQpICovCit9OworCisjZGVmaW5lIFBIWV9NX0ZFTFBfTEVEMl9DVFJMKHgpCSgoKHgpPDw4KSAmIFBIWV9NX0ZFTFBfTEVEMl9NU0spCisjZGVmaW5lIFBIWV9NX0ZFTFBfTEVEMV9DVFJMKHgpCSgoKHgpPDw0KSAmIFBIWV9NX0ZFTFBfTEVEMV9NU0spCisjZGVmaW5lIFBIWV9NX0ZFTFBfTEVEMF9DVFJMKHgpCSgoKHgpPDwwKSAmIFBIWV9NX0ZFTFBfTEVEMF9NU0spCisKK2VudW0geworCUxFRF9QQVJfQ1RSTF9DT0xYCT0gMHgwMCwKKwlMRURfUEFSX0NUUkxfRVJST1IJPSAweDAxLAorCUxFRF9QQVJfQ1RSTF9EVVBMRVgJPSAweDAyLAorCUxFRF9QQVJfQ1RSTF9EUF9DT0wJPSAweDAzLAorCUxFRF9QQVJfQ1RSTF9TUEVFRAk9IDB4MDQsCisJTEVEX1BBUl9DVFJMX0xJTksJPSAweDA1LAorCUxFRF9QQVJfQ1RSTF9UWAkJPSAweDA2LAorCUxFRF9QQVJfQ1RSTF9SWAkJPSAweDA3LAorCUxFRF9QQVJfQ1RSTF9BQ1QJPSAweDA4LAorCUxFRF9QQVJfQ1RSTF9MTktfUlgJPSAweDA5LAorCUxFRF9QQVJfQ1RSTF9MTktfQUMJPSAweDBhLAorCUxFRF9QQVJfQ1RSTF9BQ1RfQkwJPSAweDBiLAorCUxFRF9QQVJfQ1RSTF9UWF9CTAk9IDB4MGMsCisJTEVEX1BBUl9DVFJMX1JYX0JMCT0gMHgwZCwKKwlMRURfUEFSX0NUUkxfQ09MX0JMCT0gMHgwZSwKKwlMRURfUEFSX0NUUkxfSU5BQ1QJPSAweDBmCit9OworCisvKioqKiosUEhZX01BUlZfRkVfU1BFQ18yCQkxNiBiaXQgci93CVNwZWNpZmljIENvbnRyb2wgUmVnLiAyICoqKioqLworZW51bSB7CisJUEhZX01fRkVTQ19ESVNfV0FJVAk9IDE8PDIsIC8qIERpc2FibGUgVERSIFdhaXRpbmcgUGVyaW9kICovCisJUEhZX01fRkVTQ19FTkFfTUNMSwk9IDE8PDEsIC8qIEVuYWJsZSBNQUMgUnggQ2xvY2sgaW4gc2xlZXAgbW9kZSAqLworCVBIWV9NX0ZFU0NfU0VMX0NMX0EJPSAxPDwwLCAvKiBTZWxlY3QgQ2xhc3MgQSBkcml2ZXIgKDEwMEItVFgpICovCit9OworCisvKiBmb3IgWXVrb24tMiBHaWdhYml0IEV0aGVybmV0IFBIWSAoODhFMTExMiBvbmx5KSAqLworLyoqKioqICBQSFlfTUFSVl9QSFlfQ1RSTCAocGFnZSAyKQkJMTYgYml0IHIvdwlNQUMgU3BlY2lmaWMgQ3RybCAqKioqKi8KK2VudW0geworCVBIWV9NX01BQ19NRF9NU0sJPSA3PDw3LCAvKiBCaXQgIDkuLiA3OiBNb2RlIFNlbGVjdCBNYXNrICovCisJUEhZX01fTUFDX01EX0FVVE8JPSAzLC8qIEF1dG8gQ29wcGVyLzEwMDBCYXNlLVggKi8KKwlQSFlfTV9NQUNfTURfQ09QUEVSCT0gNSwvKiBDb3BwZXIgb25seSAqLworCVBIWV9NX01BQ19NRF8xMDAwQlgJPSA3LC8qIDEwMDBCYXNlLVggb25seSAqLworfTsKKyNkZWZpbmUgUEhZX01fTUFDX01PREVfU0VMKHgpCSgoKHgpPDw3KSAmIFBIWV9NX01BQ19NRF9NU0spCisKKy8qKioqKiAgUEhZX01BUlZfUEhZX0NUUkwgKHBhZ2UgMykJCTE2IGJpdCByL3cJTEVEIENvbnRyb2wgUmVnLiAqKioqKi8KK2VudW0geworCVBIWV9NX0xFRENfTE9TX01TSwk9IDB4Zjw8MTIsLyogQml0IDE1Li4xMjogTE9TIExFRCBDdHJsLiBNYXNrICovCisJUEhZX01fTEVEQ19JTklUX01TSwk9IDB4Zjw8OCwgLyogQml0IDExLi4gODogSU5JVCBMRUQgQ3RybC4gTWFzayAqLworCVBIWV9NX0xFRENfU1RBMV9NU0sJPSAweGY8PDQsLyogQml0ICA3Li4gNDogU1RBVDEgTEVEIEN0cmwuIE1hc2sgKi8KKwlQSFlfTV9MRURDX1NUQTBfTVNLCT0gMHhmLCAvKiBCaXQgIDMuLiAwOiBTVEFUMCBMRUQgQ3RybC4gTWFzayAqLworfTsKKworI2RlZmluZSBQSFlfTV9MRURDX0xPU19DVFJMKHgpCSgoKHgpPDwxMikgJiBQSFlfTV9MRURDX0xPU19NU0spCisjZGVmaW5lIFBIWV9NX0xFRENfSU5JVF9DVFJMKHgpCSgoKHgpPDw4KSAmIFBIWV9NX0xFRENfSU5JVF9NU0spCisjZGVmaW5lIFBIWV9NX0xFRENfU1RBMV9DVFJMKHgpCSgoKHgpPDw0KSAmIFBIWV9NX0xFRENfU1RBMV9NU0spCisjZGVmaW5lIFBIWV9NX0xFRENfU1RBMF9DVFJMKHgpCSgoKHgpPDwwKSAmIFBIWV9NX0xFRENfU1RBMF9NU0spCisKKy8qIEdNQUMgcmVnaXN0ZXJzICAqLworLyogUG9ydCBSZWdpc3RlcnMgKi8KK2VudW0geworCUdNX0dQX1NUQVQJPSAweDAwMDAsCS8qIDE2IGJpdCByL28JR2VuZXJhbCBQdXJwb3NlIFN0YXR1cyAqLworCUdNX0dQX0NUUkwJPSAweDAwMDQsCS8qIDE2IGJpdCByL3cJR2VuZXJhbCBQdXJwb3NlIENvbnRyb2wgKi8KKwlHTV9UWF9DVFJMCT0gMHgwMDA4LAkvKiAxNiBiaXQgci93CVRyYW5zbWl0IENvbnRyb2wgUmVnLiAqLworCUdNX1JYX0NUUkwJPSAweDAwMGMsCS8qIDE2IGJpdCByL3cJUmVjZWl2ZSBDb250cm9sIFJlZy4gKi8KKwlHTV9UWF9GTE9XX0NUUkwJPSAweDAwMTAsCS8qIDE2IGJpdCByL3cJVHJhbnNtaXQgRmxvdy1Db250cm9sICovCisJR01fVFhfUEFSQU0JPSAweDAwMTQsCS8qIDE2IGJpdCByL3cJVHJhbnNtaXQgUGFyYW1ldGVyIFJlZy4gKi8KKwlHTV9TRVJJQUxfTU9ERQk9IDB4MDAxOCwJLyogMTYgYml0IHIvdwlTZXJpYWwgTW9kZSBSZWdpc3RlciAqLworLyogU291cmNlIEFkZHJlc3MgUmVnaXN0ZXJzICovCisJR01fU1JDX0FERFJfMUwJPSAweDAwMWMsCS8qIDE2IGJpdCByL3cJU291cmNlIEFkZHJlc3MgMSAobG93KSAqLworCUdNX1NSQ19BRERSXzFNCT0gMHgwMDIwLAkvKiAxNiBiaXQgci93CVNvdXJjZSBBZGRyZXNzIDEgKG1pZGRsZSkgKi8KKwlHTV9TUkNfQUREUl8xSAk9IDB4MDAyNCwJLyogMTYgYml0IHIvdwlTb3VyY2UgQWRkcmVzcyAxIChoaWdoKSAqLworCUdNX1NSQ19BRERSXzJMCT0gMHgwMDI4LAkvKiAxNiBiaXQgci93CVNvdXJjZSBBZGRyZXNzIDIgKGxvdykgKi8KKwlHTV9TUkNfQUREUl8yTQk9IDB4MDAyYywJLyogMTYgYml0IHIvdwlTb3VyY2UgQWRkcmVzcyAyIChtaWRkbGUpICovCisJR01fU1JDX0FERFJfMkgJPSAweDAwMzAsCS8qIDE2IGJpdCByL3cJU291cmNlIEFkZHJlc3MgMiAoaGlnaCkgKi8KKworLyogTXVsdGljYXN0IEFkZHJlc3MgSGFzaCBSZWdpc3RlcnMgKi8KKwlHTV9NQ19BRERSX0gxCT0gMHgwMDM0LAkvKiAxNiBiaXQgci93CU11bHRpY2FzdCBBZGRyZXNzIEhhc2ggMSAqLworCUdNX01DX0FERFJfSDIJPSAweDAwMzgsCS8qIDE2IGJpdCByL3cJTXVsdGljYXN0IEFkZHJlc3MgSGFzaCAyICovCisJR01fTUNfQUREUl9IMwk9IDB4MDAzYywJLyogMTYgYml0IHIvdwlNdWx0aWNhc3QgQWRkcmVzcyBIYXNoIDMgKi8KKwlHTV9NQ19BRERSX0g0CT0gMHgwMDQwLAkvKiAxNiBiaXQgci93CU11bHRpY2FzdCBBZGRyZXNzIEhhc2ggNCAqLworCisvKiBJbnRlcnJ1cHQgU291cmNlIFJlZ2lzdGVycyAqLworCUdNX1RYX0lSUV9TUkMJPSAweDAwNDQsCS8qIDE2IGJpdCByL28JVHggT3ZlcmZsb3cgSVJRIFNvdXJjZSAqLworCUdNX1JYX0lSUV9TUkMJPSAweDAwNDgsCS8qIDE2IGJpdCByL28JUnggT3ZlcmZsb3cgSVJRIFNvdXJjZSAqLworCUdNX1RSX0lSUV9TUkMJPSAweDAwNGMsCS8qIDE2IGJpdCByL28JVHgvUnggT3Zlci4gSVJRIFNvdXJjZSAqLworCisvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcnMgKi8KKwlHTV9UWF9JUlFfTVNLCT0gMHgwMDUwLAkvKiAxNiBiaXQgci93CVR4IE92ZXJmbG93IElSUSBNYXNrICovCisJR01fUlhfSVJRX01TSwk9IDB4MDA1NCwJLyogMTYgYml0IHIvdwlSeCBPdmVyZmxvdyBJUlEgTWFzayAqLworCUdNX1RSX0lSUV9NU0sJPSAweDAwNTgsCS8qIDE2IGJpdCByL3cJVHgvUnggT3Zlci4gSVJRIE1hc2sgKi8KKworLyogU2VyaWFsIE1hbmFnZW1lbnQgSW50ZXJmYWNlIChTTUkpIFJlZ2lzdGVycyAqLworCUdNX1NNSV9DVFJMCT0gMHgwMDgwLAkvKiAxNiBiaXQgci93CVNNSSBDb250cm9sIFJlZ2lzdGVyICovCisJR01fU01JX0RBVEEJPSAweDAwODQsCS8qIDE2IGJpdCByL3cJU01JIERhdGEgUmVnaXN0ZXIgKi8KKwlHTV9QSFlfQUREUgk9IDB4MDA4OCwJLyogMTYgYml0IHIvdwlHUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KK307CisKKy8qIE1JQiBDb3VudGVycyAqLworI2RlZmluZSBHTV9NSUJfQ05UX0JBU0UJMHgwMTAwCQkvKiBCYXNlIEFkZHJlc3Mgb2YgTUlCIENvdW50ZXJzICovCisjZGVmaW5lIEdNX01JQl9DTlRfU0laRQk0NAkJLyogTnVtYmVyIG9mIE1JQiBDb3VudGVycyAqLworCisvKgorICogTUlCIENvdW50ZXJzIGJhc2UgYWRkcmVzcyBkZWZpbml0aW9ucyAobG93IHdvcmQpIC0KKyAqIHVzZSBvZmZzZXQgNCBmb3IgYWNjZXNzIHRvIGhpZ2ggd29yZAkoMzIgYml0IHIvbykKKyAqLworZW51bSB7CisJR01fUlhGX1VDX09LICA9IEdNX01JQl9DTlRfQkFTRSArIDAsCS8qIFVuaWNhc3QgRnJhbWVzIFJlY2VpdmVkIE9LICovCisJR01fUlhGX0JDX09LCT0gR01fTUlCX0NOVF9CQVNFICsgOCwJLyogQnJvYWRjYXN0IEZyYW1lcyBSZWNlaXZlZCBPSyAqLworCUdNX1JYRl9NUEFVU0UJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNiwJLyogUGF1c2UgTUFDIEN0cmwgRnJhbWVzIFJlY2VpdmVkICovCisJR01fUlhGX01DX09LCT0gR01fTUlCX0NOVF9CQVNFICsgMjQsCS8qIE11bHRpY2FzdCBGcmFtZXMgUmVjZWl2ZWQgT0sgKi8KKwlHTV9SWEZfRkNTX0VSUgk9IEdNX01JQl9DTlRfQkFTRSArIDMyLAkvKiBSeCBGcmFtZSBDaGVjayBTZXEuIEVycm9yICovCisJLyogR01fTUlCX0NOVF9CQVNFICsgNDA6CXJlc2VydmVkICovCisJR01fUlhPX09LX0xPCT0gR01fTUlCX0NOVF9CQVNFICsgNDgsCS8qIE9jdGV0cyBSZWNlaXZlZCBPSyBMb3cgKi8KKwlHTV9SWE9fT0tfSEkJPSBHTV9NSUJfQ05UX0JBU0UgKyA1NiwJLyogT2N0ZXRzIFJlY2VpdmVkIE9LIEhpZ2ggKi8KKwlHTV9SWE9fRVJSX0xPCT0gR01fTUlCX0NOVF9CQVNFICsgNjQsCS8qIE9jdGV0cyBSZWNlaXZlZCBJbnZhbGlkIExvdyAqLworCUdNX1JYT19FUlJfSEkJPSBHTV9NSUJfQ05UX0JBU0UgKyA3MiwJLyogT2N0ZXRzIFJlY2VpdmVkIEludmFsaWQgSGlnaCAqLworCUdNX1JYRl9TSFQJPSBHTV9NSUJfQ05UX0JBU0UgKyA4MCwJLyogRnJhbWVzIDw2NCBCeXRlIFJlY2VpdmVkIE9LICovCisJR01fUlhFX0ZSQUcJPSBHTV9NSUJfQ05UX0JBU0UgKyA4OCwJLyogRnJhbWVzIDw2NCBCeXRlIFJlY2VpdmVkIHdpdGggRkNTIEVyciAqLworCUdNX1JYRl82NEIJPSBHTV9NSUJfQ05UX0JBU0UgKyA5NiwJLyogNjQgQnl0ZSBSeCBGcmFtZSAqLworCUdNX1JYRl8xMjdCCT0gR01fTUlCX0NOVF9CQVNFICsgMTA0LAkvKiA2NS0xMjcgQnl0ZSBSeCBGcmFtZSAqLworCUdNX1JYRl8yNTVCCT0gR01fTUlCX0NOVF9CQVNFICsgMTEyLAkvKiAxMjgtMjU1IEJ5dGUgUnggRnJhbWUgKi8KKwlHTV9SWEZfNTExQgk9IEdNX01JQl9DTlRfQkFTRSArIDEyMCwJLyogMjU2LTUxMSBCeXRlIFJ4IEZyYW1lICovCisJR01fUlhGXzEwMjNCCT0gR01fTUlCX0NOVF9CQVNFICsgMTI4LAkvKiA1MTItMTAyMyBCeXRlIFJ4IEZyYW1lICovCisJR01fUlhGXzE1MThCCT0gR01fTUlCX0NOVF9CQVNFICsgMTM2LAkvKiAxMDI0LTE1MTggQnl0ZSBSeCBGcmFtZSAqLworCUdNX1JYRl9NQVhfU1oJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNDQsCS8qIDE1MTktTWF4U2l6ZSBCeXRlIFJ4IEZyYW1lICovCisJR01fUlhGX0xOR19FUlIJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNTIsCS8qIFJ4IEZyYW1lIHRvbyBMb25nIEVycm9yICovCisJR01fUlhGX0pBQl9QS1QJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNjAsCS8qIFJ4IEphYmJlciBQYWNrZXQgRnJhbWUgKi8KKwkvKiBHTV9NSUJfQ05UX0JBU0UgKyAxNjg6CXJlc2VydmVkICovCisJR01fUlhFX0ZJRk9fT1YJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNzYsCS8qIFJ4IEZJRk8gb3ZlcmZsb3cgRXZlbnQgKi8KKwkvKiBHTV9NSUJfQ05UX0JBU0UgKyAxODQ6CXJlc2VydmVkICovCisJR01fVFhGX1VDX09LCT0gR01fTUlCX0NOVF9CQVNFICsgMTkyLAkvKiBVbmljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCisJR01fVFhGX0JDX09LCT0gR01fTUlCX0NOVF9CQVNFICsgMjAwLAkvKiBCcm9hZGNhc3QgRnJhbWVzIFhtaXR0ZWQgT0sgKi8KKwlHTV9UWEZfTVBBVVNFCT0gR01fTUlCX0NOVF9CQVNFICsgMjA4LAkvKiBQYXVzZSBNQUMgQ3RybCBGcmFtZXMgWG1pdHRlZCAqLworCUdNX1RYRl9NQ19PSwk9IEdNX01JQl9DTlRfQkFTRSArIDIxNiwJLyogTXVsdGljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCisJR01fVFhPX09LX0xPCT0gR01fTUlCX0NOVF9CQVNFICsgMjI0LAkvKiBPY3RldHMgVHJhbnNtaXR0ZWQgT0sgTG93ICovCisJR01fVFhPX09LX0hJCT0gR01fTUlCX0NOVF9CQVNFICsgMjMyLAkvKiBPY3RldHMgVHJhbnNtaXR0ZWQgT0sgSGlnaCAqLworCUdNX1RYRl82NEIJPSBHTV9NSUJfQ05UX0JBU0UgKyAyNDAsCS8qIDY0IEJ5dGUgVHggRnJhbWUgKi8KKwlHTV9UWEZfMTI3Qgk9IEdNX01JQl9DTlRfQkFTRSArIDI0OCwJLyogNjUtMTI3IEJ5dGUgVHggRnJhbWUgKi8KKwlHTV9UWEZfMjU1Qgk9IEdNX01JQl9DTlRfQkFTRSArIDI1NiwJLyogMTI4LTI1NSBCeXRlIFR4IEZyYW1lICovCisJR01fVFhGXzUxMUIJPSBHTV9NSUJfQ05UX0JBU0UgKyAyNjQsCS8qIDI1Ni01MTEgQnl0ZSBUeCBGcmFtZSAqLworCUdNX1RYRl8xMDIzQgk9IEdNX01JQl9DTlRfQkFTRSArIDI3MiwJLyogNTEyLTEwMjMgQnl0ZSBUeCBGcmFtZSAqLworCUdNX1RYRl8xNTE4Qgk9IEdNX01JQl9DTlRfQkFTRSArIDI4MCwJLyogMTAyNC0xNTE4IEJ5dGUgVHggRnJhbWUgKi8KKwlHTV9UWEZfTUFYX1NaCT0gR01fTUlCX0NOVF9CQVNFICsgMjg4LAkvKiAxNTE5LU1heFNpemUgQnl0ZSBUeCBGcmFtZSAqLworCisJR01fVFhGX0NPTAk9IEdNX01JQl9DTlRfQkFTRSArIDMwNCwJLyogVHggQ29sbGlzaW9uICovCisJR01fVFhGX0xBVF9DT0wJPSBHTV9NSUJfQ05UX0JBU0UgKyAzMTIsCS8qIFR4IExhdGUgQ29sbGlzaW9uICovCisJR01fVFhGX0FCT19DT0wJPSBHTV9NSUJfQ05UX0JBU0UgKyAzMjAsCS8qIFR4IGFib3J0ZWQgZHVlIHRvIEV4Y2VzLiBDb2wuICovCisJR01fVFhGX01VTF9DT0wJPSBHTV9NSUJfQ05UX0JBU0UgKyAzMjgsCS8qIFR4IE11bHRpcGxlIENvbGxpc2lvbiAqLworCUdNX1RYRl9TTkdfQ09MCT0gR01fTUlCX0NOVF9CQVNFICsgMzM2LAkvKiBUeCBTaW5nbGUgQ29sbGlzaW9uICovCisJR01fVFhFX0ZJRk9fVVIJPSBHTV9NSUJfQ05UX0JBU0UgKyAzNDQsCS8qIFR4IEZJRk8gVW5kZXJydW4gRXZlbnQgKi8KK307CisKKy8qIEdNQUMgQml0IERlZmluaXRpb25zICovCisvKglHTV9HUF9TVEFUCTE2IGJpdCByL28JR2VuZXJhbCBQdXJwb3NlIFN0YXR1cyBSZWdpc3RlciAqLworZW51bSB7CisJR01fR1BTUl9TUEVFRAkJPSAxPDwxNSwgLyogQml0IDE1OglQb3J0IFNwZWVkICgxID0gMTAwIE1icHMpICovCisJR01fR1BTUl9EVVBMRVgJCT0gMTw8MTQsIC8qIEJpdCAxNDoJRHVwbGV4IE1vZGUgKDEgPSBGdWxsKSAqLworCUdNX0dQU1JfRkNfVFhfRElTCT0gMTw8MTMsIC8qIEJpdCAxMzoJVHggRmxvdy1Db250cm9sIE1vZGUgRGlzYWJsZWQgKi8KKwlHTV9HUFNSX0xJTktfVVAJCT0gMTw8MTIsIC8qIEJpdCAxMjoJTGluayBVcCBTdGF0dXMgKi8KKwlHTV9HUFNSX1BBVVNFCQk9IDE8PDExLCAvKiBCaXQgMTE6CVBhdXNlIFN0YXRlICovCisJR01fR1BTUl9UWF9BQ1RJVkUJPSAxPDwxMCwgLyogQml0IDEwOglUeCBpbiBQcm9ncmVzcyAqLworCUdNX0dQU1JfRVhDX0NPTAkJPSAxPDw5LAkvKiBCaXQgIDk6CUV4Y2Vzc2l2ZSBDb2xsaXNpb25zIE9jY3VyZWQgKi8KKwlHTV9HUFNSX0xBVF9DT0wJCT0gMTw8OCwJLyogQml0ICA4OglMYXRlIENvbGxpc2lvbnMgT2NjdXJlZCAqLworCisJR01fR1BTUl9QSFlfU1RfQ0gJPSAxPDw1LAkvKiBCaXQgIDU6CVBIWSBTdGF0dXMgQ2hhbmdlICovCisJR01fR1BTUl9HSUdfU1BFRUQJPSAxPDw0LAkvKiBCaXQgIDQ6CUdpZ2FiaXQgU3BlZWQgKDEgPSAxMDAwIE1icHMpICovCisJR01fR1BTUl9QQVJUX01PREUJPSAxPDwzLAkvKiBCaXQgIDM6CVBhcnRpdGlvbiBtb2RlICovCisJR01fR1BTUl9GQ19SWF9ESVMJPSAxPDwyLAkvKiBCaXQgIDI6CVJ4IEZsb3ctQ29udHJvbCBNb2RlIERpc2FibGVkICovCisJR01fR1BTUl9QUk9NX0VOCQk9IDE8PDEsCS8qIEJpdCAgMToJUHJvbWlzY3VvdXMgTW9kZSBFbmFibGVkICovCit9OworCisvKglHTV9HUF9DVFJMCTE2IGJpdCByL3cJR2VuZXJhbCBQdXJwb3NlIENvbnRyb2wgUmVnaXN0ZXIgKi8KK2VudW0geworCUdNX0dQQ1JfUFJPTV9FTkEJPSAxPDwxNCwJLyogQml0IDE0OglFbmFibGUgUHJvbWlzY3VvdXMgTW9kZSAqLworCUdNX0dQQ1JfRkNfVFhfRElTCT0gMTw8MTMsIC8qIEJpdCAxMzoJRGlzYWJsZSBUeCBGbG93LUNvbnRyb2wgTW9kZSAqLworCUdNX0dQQ1JfVFhfRU5BCQk9IDE8PDEyLCAvKiBCaXQgMTI6CUVuYWJsZSBUcmFuc21pdCAqLworCUdNX0dQQ1JfUlhfRU5BCQk9IDE8PDExLCAvKiBCaXQgMTE6CUVuYWJsZSBSZWNlaXZlICovCisJR01fR1BDUl9CVVJTVF9FTkEJPSAxPDwxMCwgLyogQml0IDEwOglFbmFibGUgQnVyc3QgTW9kZSAqLworCUdNX0dQQ1JfTE9PUF9FTkEJPSAxPDw5LAkvKiBCaXQgIDk6CUVuYWJsZSBNQUMgTG9vcGJhY2sgTW9kZSAqLworCUdNX0dQQ1JfUEFSVF9FTkEJPSAxPDw4LAkvKiBCaXQgIDg6CUVuYWJsZSBQYXJ0aXRpb24gTW9kZSAqLworCUdNX0dQQ1JfR0lHU19FTkEJPSAxPDw3LAkvKiBCaXQgIDc6CUdpZ2FiaXQgU3BlZWQgKDEwMDAgTWJwcykgKi8KKwlHTV9HUENSX0ZMX1BBU1MJCT0gMTw8NiwJLyogQml0ICA2OglGb3JjZSBMaW5rIFBhc3MgKi8KKwlHTV9HUENSX0RVUF9GVUxMCT0gMTw8NSwJLyogQml0ICA1OglGdWxsIER1cGxleCBNb2RlICovCisJR01fR1BDUl9GQ19SWF9ESVMJPSAxPDw0LAkvKiBCaXQgIDQ6CURpc2FibGUgUnggRmxvdy1Db250cm9sIE1vZGUgKi8KKwlHTV9HUENSX1NQRUVEXzEwMAk9IDE8PDMsICAgLyogQml0ICAzOglQb3J0IFNwZWVkIDEwMCBNYnBzICovCisJR01fR1BDUl9BVV9EVVBfRElTCT0gMTw8MiwJLyogQml0ICAyOglEaXNhYmxlIEF1dG8tVXBkYXRlIER1cGxleCAqLworCUdNX0dQQ1JfQVVfRkNUX0RJUwk9IDE8PDEsCS8qIEJpdCAgMToJRGlzYWJsZSBBdXRvLVVwZGF0ZSBGbG93LUMuICovCisJR01fR1BDUl9BVV9TUERfRElTCT0gMTw8MCwJLyogQml0ICAwOglEaXNhYmxlIEF1dG8tVXBkYXRlIFNwZWVkICovCit9OworCisjZGVmaW5lIEdNX0dQQ1JfU1BFRURfMTAwMAkoR01fR1BDUl9HSUdTX0VOQSB8IEdNX0dQQ1JfU1BFRURfMTAwKQorI2RlZmluZSBHTV9HUENSX0FVX0FMTF9ESVMJKEdNX0dQQ1JfQVVfRFVQX0RJUyB8IEdNX0dQQ1JfQVVfRkNUX0RJU3xHTV9HUENSX0FVX1NQRF9ESVMpCisKKy8qCUdNX1RYX0NUUkwJCQkxNiBiaXQgci93CVRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KK2VudW0geworCUdNX1RYQ1JfRk9SQ0VfSkFNCT0gMTw8MTUsIC8qIEJpdCAxNToJRm9yY2UgSmFtIC8gRmxvdy1Db250cm9sICovCisJR01fVFhDUl9DUkNfRElTCQk9IDE8PDE0LCAvKiBCaXQgMTQ6CURpc2FibGUgaW5zZXJ0aW9uIG9mIENSQyAqLworCUdNX1RYQ1JfUEFEX0RJUwkJPSAxPDwxMywgLyogQml0IDEzOglEaXNhYmxlIHBhZGRpbmcgb2YgcGFja2V0cyAqLworCUdNX1RYQ1JfQ09MX1RIUl9NU0sJPSAxPDwxMCwgLyogQml0IDEyLi4xMDoJQ29sbGlzaW9uIFRocmVzaG9sZCAqLworfTsKKworI2RlZmluZSBUWF9DT0xfVEhSKHgpCQkoKCh4KTw8MTApICYgR01fVFhDUl9DT0xfVEhSX01TSykKKyNkZWZpbmUgVFhfQ09MX0RFRgkJMHgwNAorCisvKglHTV9SWF9DVFJMCQkJMTYgYml0IHIvdwlSZWNlaXZlIENvbnRyb2wgUmVnaXN0ZXIgKi8KK2VudW0geworCUdNX1JYQ1JfVUNGX0VOQQk9IDE8PDE1LCAvKiBCaXQgMTU6CUVuYWJsZSBVbmljYXN0IGZpbHRlcmluZyAqLworCUdNX1JYQ1JfTUNGX0VOQQk9IDE8PDE0LCAvKiBCaXQgMTQ6CUVuYWJsZSBNdWx0aWNhc3QgZmlsdGVyaW5nICovCisJR01fUlhDUl9DUkNfRElTCT0gMTw8MTMsIC8qIEJpdCAxMzoJUmVtb3ZlIDQtYnl0ZSBDUkMgKi8KKwlHTV9SWENSX1BBU1NfRkMJPSAxPDwxMiwgLyogQml0IDEyOglQYXNzIEZDIHBhY2tldHMgdG8gRklGTyAqLworfTsKKworLyoJR01fVFhfUEFSQU0JCTE2IGJpdCByL3cJVHJhbnNtaXQgUGFyYW1ldGVyIFJlZ2lzdGVyICovCitlbnVtIHsKKwlHTV9UWFBBX0pBTUxFTl9NU0sJPSAweDAzPDwxNCwJLyogQml0IDE1Li4xNDoJSmFtIExlbmd0aCAqLworCUdNX1RYUEFfSkFNSVBHX01TSwk9IDB4MWY8PDksCS8qIEJpdCAxMy4uOToJSmFtIElQRyAqLworCUdNX1RYUEFfSkFNREFUX01TSwk9IDB4MWY8PDQsCS8qIEJpdCAgOC4uNDoJSVBHIEphbSB0byBEYXRhICovCisJR01fVFhQQV9CT19MSU1fTVNLCT0gMHgwZiwJCS8qIEJpdCAgMy4uIDA6IEJhY2tvZmYgTGltaXQgTWFzayAqLworCisJVFhfSkFNX0xFTl9ERUYJCT0gMHgwMywKKwlUWF9KQU1fSVBHX0RFRgkJPSAweDBiLAorCVRYX0lQR19KQU1fREVGCQk9IDB4MWMsCisJVFhfQk9GX0xJTV9ERUYJCT0gMHgwNCwKK307CisKKyNkZWZpbmUgVFhfSkFNX0xFTl9WQUwoeCkJKCgoeCk8PDE0KSAmIEdNX1RYUEFfSkFNTEVOX01TSykKKyNkZWZpbmUgVFhfSkFNX0lQR19WQUwoeCkJKCgoeCk8PDkpICAmIEdNX1RYUEFfSkFNSVBHX01TSykKKyNkZWZpbmUgVFhfSVBHX0pBTV9EQVRBKHgpCSgoKHgpPDw0KSAgJiBHTV9UWFBBX0pBTURBVF9NU0spCisjZGVmaW5lIFRYX0JBQ0tfT0ZGX0xJTSh4KQkoKHgpICYgR01fVFhQQV9CT19MSU1fTVNLKQorCisKKy8qCUdNX1NFUklBTF9NT0RFCQkJMTYgYml0IHIvdwlTZXJpYWwgTW9kZSBSZWdpc3RlciAqLworZW51bSB7CisJR01fU01PRF9EQVRBQkxfTVNLCT0gMHgxZjw8MTEsIC8qIEJpdCAxNS4uMTE6CURhdGEgQmxpbmRlciAoci9vKSAqLworCUdNX1NNT0RfTElNSVRfNAkJPSAxPDwxMCwgLyogQml0IDEwOgk0IGNvbnNlY3V0aXZlIFR4IHRyaWFscyAqLworCUdNX1NNT0RfVkxBTl9FTkEJPSAxPDw5LAkvKiBCaXQgIDk6CUVuYWJsZSBWTEFOICAoTWF4LiBGcmFtZSBMZW4pICovCisJR01fU01PRF9KVU1CT19FTkEJPSAxPDw4LAkvKiBCaXQgIDg6CUVuYWJsZSBKdW1ibyAoTWF4LiBGcmFtZSBMZW4pICovCisJIEdNX1NNT0RfSVBHX01TSwk9IDB4MWYJLyogQml0IDQuLjA6CUludGVyLVBhY2tldCBHYXAgKElQRykgKi8KK307CisKKyNkZWZpbmUgREFUQV9CTElORF9WQUwoeCkJKCgoeCk8PDExKSAmIEdNX1NNT0RfREFUQUJMX01TSykKKyNkZWZpbmUgREFUQV9CTElORF9ERUYJCTB4MDQKKworI2RlZmluZSBJUEdfREFUQV9WQUwoeCkJCSh4ICYgR01fU01PRF9JUEdfTVNLKQorI2RlZmluZSBJUEdfREFUQV9ERUYJCTB4MWUKKworLyoJR01fU01JX0NUUkwJCQkxNiBiaXQgci93CVNNSSBDb250cm9sIFJlZ2lzdGVyICovCitlbnVtIHsKKwlHTV9TTUlfQ1RfUEhZX0FfTVNLCT0gMHgxZjw8MTEsLyogQml0IDE1Li4xMToJUEhZIERldmljZSBBZGRyZXNzICovCisJR01fU01JX0NUX1JFR19BX01TSwk9IDB4MWY8PDYsLyogQml0IDEwLi4gNjoJUEhZIFJlZ2lzdGVyIEFkZHJlc3MgKi8KKwlHTV9TTUlfQ1RfT1BfUkQJCT0gMTw8NSwJLyogQml0ICA1OglPcENvZGUgUmVhZCAoMD1Xcml0ZSkqLworCUdNX1NNSV9DVF9SRF9WQUwJPSAxPDw0LAkvKiBCaXQgIDQ6CVJlYWQgVmFsaWQgKFJlYWQgY29tcGxldGVkKSAqLworCUdNX1NNSV9DVF9CVVNZCQk9IDE8PDMsCS8qIEJpdCAgMzoJQnVzeSAoT3BlcmF0aW9uIGluIHByb2dyZXNzKSAqLworfTsKKworI2RlZmluZSBHTV9TTUlfQ1RfUEhZX0FEKHgpCSgoKHgpPDwxMSkgJiBHTV9TTUlfQ1RfUEhZX0FfTVNLKQorI2RlZmluZSBHTV9TTUlfQ1RfUkVHX0FEKHgpCSgoKHgpPDw2KSAmIEdNX1NNSV9DVF9SRUdfQV9NU0spCisKKy8qCUdNX1BIWV9BRERSCQkJCTE2IGJpdCByL3cJR1BIWSBBZGRyZXNzIFJlZ2lzdGVyICovCitlbnVtIHsKKwlHTV9QQVJfTUlCX0NMUgk9IDE8PDUsCS8qIEJpdCAgNToJU2V0IE1JQiBDbGVhciBDb3VudGVyIE1vZGUgKi8KKwlHTV9QQVJfTUlCX1RTVAk9IDE8PDQsCS8qIEJpdCAgNDoJTUlCIExvYWQgQ291bnRlciAoVGVzdCBNb2RlKSAqLworfTsKKworLyogUmVjZWl2ZSBGcmFtZSBTdGF0dXMgRW5jb2RpbmcgKi8KK2VudW0geworCUdNUl9GU19MRU4JPSAweGZmZmY8PDE2LCAvKiBCaXQgMzEuLjE2OglSeCBGcmFtZSBMZW5ndGggKi8KKwlHTVJfRlNfVkxBTgk9IDE8PDEzLCAvKiBWTEFOIFBhY2tldCAqLworCUdNUl9GU19KQUJCRVIJPSAxPDwxMiwgLyogSmFiYmVyIFBhY2tldCAqLworCUdNUl9GU19VTl9TSVpFCT0gMTw8MTEsIC8qIFVuZGVyc2l6ZSBQYWNrZXQgKi8KKwlHTVJfRlNfTUMJPSAxPDwxMCwgLyogTXVsdGljYXN0IFBhY2tldCAqLworCUdNUl9GU19CQwk9IDE8PDksICAvKiBCcm9hZGNhc3QgUGFja2V0ICovCisJR01SX0ZTX1JYX09LCT0gMTw8OCwgIC8qIFJlY2VpdmUgT0sgKEdvb2QgUGFja2V0KSAqLworCUdNUl9GU19HT09EX0ZDCT0gMTw8NywgIC8qIEdvb2QgRmxvdy1Db250cm9sIFBhY2tldCAqLworCUdNUl9GU19CQURfRkMJPSAxPDw2LCAgLyogQmFkICBGbG93LUNvbnRyb2wgUGFja2V0ICovCisJR01SX0ZTX01JSV9FUlIJPSAxPDw1LCAgLyogTUlJIEVycm9yICovCisJR01SX0ZTX0xPTkdfRVJSCT0gMTw8NCwgIC8qIFRvbyBMb25nIFBhY2tldCAqLworCUdNUl9GU19GUkFHTUVOVAk9IDE8PDMsICAvKiBGcmFnbWVudCAqLworCisJR01SX0ZTX0NSQ19FUlIJPSAxPDwxLCAgLyogQ1JDIEVycm9yICovCisJR01SX0ZTX1JYX0ZGX09WCT0gMTw8MCwgIC8qIFJ4IEZJRk8gT3ZlcmZsb3cgKi8KKworCUdNUl9GU19BTllfRVJSCT0gR01SX0ZTX1JYX0ZGX09WIHwgR01SX0ZTX0NSQ19FUlIgfAorCQkJICBHTVJfRlNfRlJBR01FTlQgfCBHTVJfRlNfTE9OR19FUlIgfAorCQkgIAkgIEdNUl9GU19NSUlfRVJSIHwgR01SX0ZTX0JBRF9GQyB8IEdNUl9GU19HT09EX0ZDIHwKKwkJCSAgR01SX0ZTX1VOX1NJWkUgfCBHTVJfRlNfSkFCQkVSLAorfTsKKworLyoJUlhfR01GX0NUUkxfVAkzMiBiaXQJUnggR01BQyBGSUZPIENvbnRyb2wvVGVzdCAqLworZW51bSB7CisJUlhfVFJVTkNfT04JPSAxPDwyNywgIAkvKiBlbmFibGUgIHBhY2tldCB0cnVuY2F0aW9uICovCisJUlhfVFJVTkNfT0ZGCT0gMTw8MjYsIAkvKiBkaXNhYmxlIHBhY2tldCB0cnVuY2F0aW9uICovCisJUlhfVkxBTl9TVFJJUF9PTiA9IDE8PDI1LAkvKiBlbmFibGUgIFZMQU4gc3RyaXBwaW5nICovCisJUlhfVkxBTl9TVFJJUF9PRkYgPSAxPDwyNCwJLyogZGlzYWJsZSBWTEFOIHN0cmlwcGluZyAqLworCisJR01GX1dQX1RTVF9PTgk9IDE8PDE0LAkvKiBXcml0ZSBQb2ludGVyIFRlc3QgT24gKi8KKwlHTUZfV1BfVFNUX09GRgk9IDE8PDEzLAkvKiBXcml0ZSBQb2ludGVyIFRlc3QgT2ZmICovCisJR01GX1dQX1NURVAJPSAxPDwxMiwJLyogV3JpdGUgUG9pbnRlciBTdGVwL0luY3JlbWVudCAqLworCisJR01GX1JQX1RTVF9PTgk9IDE8PDEwLAkvKiBSZWFkIFBvaW50ZXIgVGVzdCBPbiAqLworCUdNRl9SUF9UU1RfT0ZGCT0gMTw8OSwJCS8qIFJlYWQgUG9pbnRlciBUZXN0IE9mZiAqLworCUdNRl9SUF9TVEVQCT0gMTw8OCwJCS8qIFJlYWQgUG9pbnRlciBTdGVwL0luY3JlbWVudCAqLworCUdNRl9SWF9GX0ZMX09OCT0gMTw8NywJCS8qIFJ4IEZJRk8gRmx1c2ggTW9kZSBPbiAqLworCUdNRl9SWF9GX0ZMX09GRgk9IDE8PDYsCQkvKiBSeCBGSUZPIEZsdXNoIE1vZGUgT2ZmICovCisJR01GX0NMSV9SWF9GTwk9IDE8PDUsCQkvKiBDbGVhciBJUlEgUnggRklGTyBPdmVycnVuICovCisJR01GX0NMSV9SWF9DCT0gMTw8NCwJCS8qIENsZWFyIElSUSBSeCBGcmFtZSBDb21wbGV0ZSAqLworCisJR01GX09QRVJfT04JPSAxPDwzLAkJLyogT3BlcmF0aW9uYWwgTW9kZSBPbiAqLworCUdNRl9PUEVSX09GRgk9IDE8PDIsCQkvKiBPcGVyYXRpb25hbCBNb2RlIE9mZiAqLworCUdNRl9SU1RfQ0xSCT0gMTw8MSwJCS8qIENsZWFyIEdNQUMgRklGTyBSZXNldCAqLworCUdNRl9SU1RfU0VUCT0gMTw8MCwJCS8qIFNldCAgIEdNQUMgRklGTyBSZXNldCAqLworCisJUlhfR01GX0ZMX1RIUl9ERUYgPSAweGEsCS8qIGZsdXNoIHRocmVzaG9sZCAoZGVmYXVsdCkgKi8KKworCUdNRl9SWF9DVFJMX0RFRgk9IEdNRl9PUEVSX09OIHwgR01GX1JYX0ZfRkxfT04sCit9OworCisKKy8qCVRYX0dNRl9DVFJMX1QJMzIgYml0CVR4IEdNQUMgRklGTyBDb250cm9sL1Rlc3QgKi8KK2VudW0geworCVRYX1NURldfRElTCT0gMTw8MzEsLyogRGlzYWJsZSBTdG9yZSAmIEZvcndhcmQgKFl1a29uLUVDIFVsdHJhKSAqLworCVRYX1NURldfRU5BCT0gMTw8MzAsLyogRW5hYmxlICBTdG9yZSAmIEZvcndhcmQgKFl1a29uLUVDIFVsdHJhKSAqLworCisJVFhfVkxBTl9UQUdfT04JPSAxPDwyNSwvKiBlbmFibGUgIFZMQU4gdGFnZ2luZyAqLworCVRYX1ZMQU5fVEFHX09GRgk9IDE8PDI0LC8qIGRpc2FibGUgVkxBTiB0YWdnaW5nICovCisKKwlHTUZfV1NQX1RTVF9PTgk9IDE8PDE4LC8qIFdyaXRlIFNoYWRvdyBQb2ludGVyIFRlc3QgT24gKi8KKwlHTUZfV1NQX1RTVF9PRkYJPSAxPDwxNywvKiBXcml0ZSBTaGFkb3cgUG9pbnRlciBUZXN0IE9mZiAqLworCUdNRl9XU1BfU1RFUAk9IDE8PDE2LC8qIFdyaXRlIFNoYWRvdyBQb2ludGVyIFN0ZXAvSW5jcmVtZW50ICovCisKKwlHTUZfQ0xJX1RYX0ZVCT0gMTw8NiwJLyogQ2xlYXIgSVJRIFR4IEZJRk8gVW5kZXJydW4gKi8KKwlHTUZfQ0xJX1RYX0ZDCT0gMTw8NSwJLyogQ2xlYXIgSVJRIFR4IEZyYW1lIENvbXBsZXRlICovCisJR01GX0NMSV9UWF9QRQk9IDE8PDQsCS8qIENsZWFyIElSUSBUeCBQYXJpdHkgRXJyb3IgKi8KK307CisKKy8qCUdNQUNfVElfU1RfQ1RSTAkgOCBiaXQJVGltZSBTdGFtcCBUaW1lciBDdHJsIFJlZyAoWVVLT04gb25seSkgKi8KK2VudW0geworCUdNVF9TVF9TVEFSVAk9IDE8PDIsCS8qIFN0YXJ0IFRpbWUgU3RhbXAgVGltZXIgKi8KKwlHTVRfU1RfU1RPUAk9IDE8PDEsCS8qIFN0b3AgIFRpbWUgU3RhbXAgVGltZXIgKi8KKwlHTVRfU1RfQ0xSX0lSUQk9IDE8PDAsCS8qIENsZWFyIFRpbWUgU3RhbXAgVGltZXIgSVJRICovCit9OworCisvKiBCMjhfWTJfQVNGX1NUQVRfQ01ECQkzMiBiaXQJQVNGIFN0YXR1cyBhbmQgQ29tbWFuZCBSZWcgKi8KK2VudW0geworCVkyX0FTRl9PU19QUkVTCT0gMTw8NCwJLyogQVNGIG9wZXJhdGlvbiBzeXN0ZW0gcHJlc2VudCAqLworCVkyX0FTRl9SRVNFVAk9IDE8PDMsCS8qIEFTRiBzeXN0ZW0gaW4gcmVzZXQgc3RhdGUgKi8KKwlZMl9BU0ZfUlVOTklORwk9IDE8PDIsCS8qIEFTRiBzeXN0ZW0gb3BlcmF0aW9uYWwgKi8KKwlZMl9BU0ZfQ0xSX0hTVEkgPSAxPDwxLAkvKiBDbGVhciBBU0YgSVJRICovCisJWTJfQVNGX0lSUQk9IDE8PDAsCS8qIElzc3VlIGFuIElSUSB0byBBU0Ygc3lzdGVtICovCisKKwlZMl9BU0ZfVUNfU1RBVEUgPSAzPDwyLAkvKiBBU0YgdUMgU3RhdGUgKi8KKwlZMl9BU0ZfQ0xLX0hBTFQJPSAwLAkvKiBBU0Ygc3lzdGVtIGNsb2NrIHN0b3BwZWQgKi8KK307CisKKy8qIEIyOF9ZMl9BU0ZfSE9TVF9DT00JMzIgYml0CUFTRiBIb3N0IENvbW11bmljYXRpb24gUmVnICovCitlbnVtIHsKKwlZMl9BU0ZfQ0xSX0FTRkkgPSAxPDwxLAkvKiBDbGVhciBob3N0IElSUSAqLworCVkyX0FTRl9IT1NUX0lSUSA9IDE8PDAsCS8qIElzc3VlIGFuIElSUSB0byBIT1NUIHN5c3RlbSAqLworfTsKKworLyoJU1RBVF9DVFJMCQkzMiBiaXQJU3RhdHVzIEJNVSBjb250cm9sIHJlZ2lzdGVyIChZdWtvbi0yIG9ubHkpICovCitlbnVtIHsKKwlTQ19TVEFUX0NMUl9JUlEJPSAxPDw0LAkvKiBTdGF0dXMgQnVyc3QgSVJRIGNsZWFyICovCisJU0NfU1RBVF9PUF9PTgk9IDE8PDMsCS8qIE9wZXJhdGlvbmFsIE1vZGUgT24gKi8KKwlTQ19TVEFUX09QX09GRgk9IDE8PDIsCS8qIE9wZXJhdGlvbmFsIE1vZGUgT2ZmICovCisJU0NfU1RBVF9SU1RfQ0xSCT0gMTw8MSwJLyogQ2xlYXIgU3RhdHVzIFVuaXQgUmVzZXQgKEVuYWJsZSkgKi8KKwlTQ19TVEFUX1JTVF9TRVQJPSAxPDwwLAkvKiBTZXQgICBTdGF0dXMgVW5pdCBSZXNldCAqLworfTsKKworLyoJR01BQ19DVFJMCQkzMiBiaXQJR01BQyBDb250cm9sIFJlZyAoWVVLT04gb25seSkgKi8KK2VudW0geworCUdNQ19IX0JVUlNUX09OCT0gMTw8NywJLyogSGFsZiBEdXBsZXggQnVyc3QgTW9kZSBPbiAqLworCUdNQ19IX0JVUlNUX09GRgk9IDE8PDYsCS8qIEhhbGYgRHVwbGV4IEJ1cnN0IE1vZGUgT2ZmICovCisJR01DX0ZfTE9PUEJfT04JPSAxPDw1LAkvKiBGSUZPIExvb3BiYWNrIE9uICovCisJR01DX0ZfTE9PUEJfT0ZGCT0gMTw8NCwJLyogRklGTyBMb29wYmFjayBPZmYgKi8KKwlHTUNfUEFVU0VfT04JPSAxPDwzLAkvKiBQYXVzZSBPbiAqLworCUdNQ19QQVVTRV9PRkYJPSAxPDwyLAkvKiBQYXVzZSBPZmYgKi8KKwlHTUNfUlNUX0NMUgk9IDE8PDEsCS8qIENsZWFyIEdNQUMgUmVzZXQgKi8KKwlHTUNfUlNUX1NFVAk9IDE8PDAsCS8qIFNldCAgIEdNQUMgUmVzZXQgKi8KK307CisKKy8qCUdQSFlfQ1RSTAkJMzIgYml0CUdQSFkgQ29udHJvbCBSZWcgKFlVS09OIG9ubHkpICovCitlbnVtIHsKKwlHUENfU0VMX0JEVAk9IDE8PDI4LCAvKiBTZWxlY3QgQmktRGlyLiBUcmFuc2ZlciBmb3IgTURDL01ESU8gKi8KKwlHUENfSU5UX1BPTF9ISQk9IDE8PDI3LCAvKiBJUlEgUG9sYXJpdHkgaXMgQWN0aXZlIEhJR0ggKi8KKwlHUENfNzVfT0hNCT0gMTw8MjYsIC8qIFVzZSA3NSBPaG0gVGVybWluYXRpb24gaW5zdGVhZCBvZiA1MCAqLworCUdQQ19ESVNfRkMJPSAxPDwyNSwgLyogRGlzYWJsZSBBdXRvbWF0aWMgRmliZXIvQ29wcGVyIERldGVjdGlvbiAqLworCUdQQ19ESVNfU0xFRVAJPSAxPDwyNCwgLyogRGlzYWJsZSBFbmVyZ3kgRGV0ZWN0ICovCisJR1BDX0hXQ0ZHX01fMwk9IDE8PDIzLCAvKiBIV0NGR19NT0RFWzNdICovCisJR1BDX0hXQ0ZHX01fMgk9IDE8PDIyLCAvKiBIV0NGR19NT0RFWzJdICovCisJR1BDX0hXQ0ZHX01fMQk9IDE8PDIxLCAvKiBIV0NGR19NT0RFWzFdICovCisJR1BDX0hXQ0ZHX01fMAk9IDE8PDIwLCAvKiBIV0NGR19NT0RFWzBdICovCisJR1BDX0FORUdfMAk9IDE8PDE5LCAvKiBBTkVHWzBdICovCisJR1BDX0VOQV9YQwk9IDE8PDE4LCAvKiBFbmFibGUgTURJIGNyb3Nzb3ZlciAqLworCUdQQ19ESVNfMTI1CT0gMTw8MTcsIC8qIERpc2FibGUgMTI1IE1IeiBjbG9jayAqLworCUdQQ19BTkVHXzMJPSAxPDwxNiwgLyogQU5FR1szXSAqLworCUdQQ19BTkVHXzIJPSAxPDwxNSwgLyogQU5FR1syXSAqLworCUdQQ19BTkVHXzEJPSAxPDwxNCwgLyogQU5FR1sxXSAqLworCUdQQ19FTkFfUEFVU0UJPSAxPDwxMywgLyogRW5hYmxlIFBhdXNlIChTWU1fT1JfUkVNKSAqLworCUdQQ19QSFlBRERSXzQJPSAxPDwxMiwgLyogQml0IDQgb2YgUGh5IEFkZHIgKi8KKwlHUENfUEhZQUREUl8zCT0gMTw8MTEsIC8qIEJpdCAzIG9mIFBoeSBBZGRyICovCisJR1BDX1BIWUFERFJfMgk9IDE8PDEwLCAvKiBCaXQgMiBvZiBQaHkgQWRkciAqLworCUdQQ19QSFlBRERSXzEJPSAxPDw5LAkgLyogQml0IDEgb2YgUGh5IEFkZHIgKi8KKwlHUENfUEhZQUREUl8wCT0gMTw8OCwJIC8qIEJpdCAwIG9mIFBoeSBBZGRyICovCisJCQkJCQkvKiBCaXRzICA3Li4yOglyZXNlcnZlZCAqLworCUdQQ19SU1RfQ0xSCT0gMTw8MSwJLyogQ2xlYXIgR1BIWSBSZXNldCAqLworCUdQQ19SU1RfU0VUCT0gMTw8MCwJLyogU2V0ICAgR1BIWSBSZXNldCAqLworfTsKKworLyoJR01BQ19JUlFfU1JDCSA4IGJpdAlHTUFDIEludGVycnVwdCBTb3VyY2UgUmVnIChZVUtPTiBvbmx5KSAqLworLyoJR01BQ19JUlFfTVNLCSA4IGJpdAlHTUFDIEludGVycnVwdCBNYXNrICAgUmVnIChZVUtPTiBvbmx5KSAqLworZW51bSB7CisJR01fSVNfVFhfQ09fT1YJPSAxPDw1LAkvKiBUcmFuc21pdCBDb3VudGVyIE92ZXJmbG93IElSUSAqLworCUdNX0lTX1JYX0NPX09WCT0gMTw8NCwJLyogUmVjZWl2ZSBDb3VudGVyIE92ZXJmbG93IElSUSAqLworCUdNX0lTX1RYX0ZGX1VSCT0gMTw8MywJLyogVHJhbnNtaXQgRklGTyBVbmRlcnJ1biAqLworCUdNX0lTX1RYX0NPTVBMCT0gMTw8MiwJLyogRnJhbWUgVHJhbnNtaXNzaW9uIENvbXBsZXRlICovCisJR01fSVNfUlhfRkZfT1IJPSAxPDwxLAkvKiBSZWNlaXZlIEZJRk8gT3ZlcnJ1biAqLworCUdNX0lTX1JYX0NPTVBMCT0gMTw8MCwJLyogRnJhbWUgUmVjZXB0aW9uIENvbXBsZXRlICovCisKKyNkZWZpbmUgR01BQ19ERUZfTVNLICAgICBHTV9JU19UWF9GRl9VUgorCisvKglHTUFDX0xJTktfQ1RSTAkxNiBiaXQJR01BQyBMaW5rIENvbnRyb2wgUmVnIChZVUtPTiBvbmx5KSAqLworCQkJCQkJLyogQml0cyAxNS4uIDI6CXJlc2VydmVkICovCisJR01MQ19SU1RfQ0xSCT0gMTw8MSwJLyogQ2xlYXIgR01BQyBMaW5rIFJlc2V0ICovCisJR01MQ19SU1RfU0VUCT0gMTw8MCwJLyogU2V0ICAgR01BQyBMaW5rIFJlc2V0ICovCisKKworLyoJV09MX0NUUkxfU1RBVAkxNiBiaXQJV09MIENvbnRyb2wvU3RhdHVzIFJlZyAqLworCVdPTF9DVExfTElOS19DSEdfT0NDCQk9IDE8PDE1LAorCVdPTF9DVExfTUFHSUNfUEtUX09DQwkJPSAxPDwxNCwKKwlXT0xfQ1RMX1BBVFRFUk5fT0NDCQk9IDE8PDEzLAorCVdPTF9DVExfQ0xFQVJfUkVTVUxUCQk9IDE8PDEyLAorCVdPTF9DVExfRU5BX1BNRV9PTl9MSU5LX0NIRwk9IDE8PDExLAorCVdPTF9DVExfRElTX1BNRV9PTl9MSU5LX0NIRwk9IDE8PDEwLAorCVdPTF9DVExfRU5BX1BNRV9PTl9NQUdJQ19QS1QJPSAxPDw5LAorCVdPTF9DVExfRElTX1BNRV9PTl9NQUdJQ19QS1QJPSAxPDw4LAorCVdPTF9DVExfRU5BX1BNRV9PTl9QQVRURVJOCT0gMTw8NywKKwlXT0xfQ1RMX0RJU19QTUVfT05fUEFUVEVSTgk9IDE8PDYsCisJV09MX0NUTF9FTkFfTElOS19DSEdfVU5JVAk9IDE8PDUsCisJV09MX0NUTF9ESVNfTElOS19DSEdfVU5JVAk9IDE8PDQsCisJV09MX0NUTF9FTkFfTUFHSUNfUEtUX1VOSVQJPSAxPDwzLAorCVdPTF9DVExfRElTX01BR0lDX1BLVF9VTklUCT0gMTw8MiwKKwlXT0xfQ1RMX0VOQV9QQVRURVJOX1VOSVQJPSAxPDwxLAorCVdPTF9DVExfRElTX1BBVFRFUk5fVU5JVAk9IDE8PDAsCit9OworCisjZGVmaW5lIFdPTF9DVExfREVGQVVMVAkJCQlcCisJKFdPTF9DVExfRElTX1BNRV9PTl9MSU5LX0NIRyB8CVwKKwlXT0xfQ1RMX0RJU19QTUVfT05fUEFUVEVSTiB8CVwKKwlXT0xfQ1RMX0RJU19QTUVfT05fTUFHSUNfUEtUIHwJXAorCVdPTF9DVExfRElTX0xJTktfQ0hHX1VOSVQgfAkJXAorCVdPTF9DVExfRElTX1BBVFRFUk5fVU5JVCB8CQlcCisJV09MX0NUTF9ESVNfTUFHSUNfUEtUX1VOSVQpCisKKy8qCVdPTF9NQVRDSF9DVEwJIDggYml0CVdPTCBNYXRjaCBDb250cm9sIFJlZyAqLworI2RlZmluZSBXT0xfQ1RMX1BBVFRfRU5BKHgpCSgxIDw8ICh4KSkKKworCisvKiBDb250cm9sIGZsYWdzICovCitlbnVtIHsKKwlVRFBUQ1AJPSAxPDwwLAorCUNBTFNVTQk9IDE8PDEsCisJV1JfU1VNCT0gMTw8MiwKKwlJTklUX1NVTT0gMTw8MywKKwlMT0NLX1NVTT0gMTw8NCwKKwlJTlNfVkxBTj0gMTw8NSwKKwlGUkNfU1RBVD0gMTw8NiwKKwlFT1AJPSAxPDw3LAorfTsKKworZW51bSB7CisJSFdfT1dORVIgCT0gMTw8NywKKwlPUF9UQ1BXUklURQk9IDB4MTEsCisJT1BfVENQU1RBUlQJPSAweDEyLAorCU9QX1RDUElOSVQJPSAweDE0LAorCU9QX1RDUExDSwk9IDB4MTgsCisJT1BfVENQQ0hLU1VNCT0gT1BfVENQU1RBUlQsCisJT1BfVENQSVMJPSBPUF9UQ1BJTklUIHwgT1BfVENQU1RBUlQsCisJT1BfVENQTFcJPSBPUF9UQ1BMQ0sgfCBPUF9UQ1BXUklURSwKKwlPUF9UQ1BMU1cJPSBPUF9UQ1BMQ0sgfCBPUF9UQ1BTVEFSVCB8IE9QX1RDUFdSSVRFLAorCU9QX1RDUExJU1cJPSBPUF9UQ1BMQ0sgfCBPUF9UQ1BJTklUIHwgT1BfVENQU1RBUlQgfCBPUF9UQ1BXUklURSwKKworCU9QX0FERFI2NAk9IDB4MjEsCisJT1BfVkxBTgkJPSAweDIyLAorCU9QX0FERFI2NFZMQU4JPSBPUF9BRERSNjQgfCBPUF9WTEFOLAorCU9QX0xSR0xFTgk9IDB4MjQsCisJT1BfTFJHTEVOVkxBTgk9IE9QX0xSR0xFTiB8IE9QX1ZMQU4sCisJT1BfQlVGRkVSCT0gMHg0MCwKKwlPUF9QQUNLRVQJPSAweDQxLAorCU9QX0xBUkdFU0VORAk9IDB4NDMsCisKKy8qIFlVS09OLTIgU1RBVFVTIG9wY29kZXMgZGVmaW5lcyAqLworCU9QX1JYU1RBVAk9IDB4NjAsCisJT1BfUlhUSU1FU1RBTVAJPSAweDYxLAorCU9QX1JYVkxBTgk9IDB4NjIsCisJT1BfUlhDSEtTCT0gMHg2NCwKKwlPUF9SWENIS1NWTEFOCT0gT1BfUlhDSEtTIHwgT1BfUlhWTEFOLAorCU9QX1JYVElNRVZMQU4JPSBPUF9SWFRJTUVTVEFNUCB8IE9QX1JYVkxBTiwKKwlPUF9SU1NfSEFTSAk9IDB4NjUsCisJT1BfVFhJTkRFWExFCT0gMHg2OCwKK307CisKKy8qIFl1a29uIDIgaGFyZHdhcmUgaW50ZXJmYWNlCisgKiBOb3QgdGVzdGVkIG9uIGJpZyBlbmRpYW4KKyAqLworc3RydWN0IHNreTJfdHhfbGUgeworCXVuaW9uIHsKKwkJX19sZTMyCWFkZHI7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYJb2Zmc2V0OworCQkJX19sZTE2CXN0YXJ0OworCQl9IGNzdW0gIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwkJc3RydWN0IHsKKwkJCV9fbGUxNglzaXplOworCQkJX19sZTE2CXJzdmQ7CisJCX0gdHNvICBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJfSB0eDsKKwlfX2xlMTYJbGVuZ3RoOwkvKiBhbHNvIHZsYW4gdGFnIG9yIGNoZWNrc3VtIHN0YXJ0ICovCisJdTgJY3RybDsKKwl1OAlvcGNvZGU7Cit9IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKworc3RydWN0IHNreTJfcnhfbGUgeworCV9fbGUzMglhZGRyOworCV9fbGUxNglsZW5ndGg7CisJdTgJY3RybDsKKwl1OAlvcGNvZGU7Cit9IF9fYXR0cmlidXRlKChwYWNrZWQpKTs7CisKK3N0cnVjdCBza3kyX3N0YXR1c19sZSB7CisJX19sZTMyCXN0YXR1czsJLyogYWxzbyBjaGVja3N1bSAqLworCV9fbGUxNglsZW5ndGg7CS8qIGFsc28gdmxhbiB0YWcgKi8KKwl1OAlsaW5rOworCXU4CW9wY29kZTsKK30gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCitzdHJ1Y3QgdHhfcmluZ19pbmZvIHsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOworCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwYWRkcik7CisJdTE2CQlpZHg7Cit9OworCitzdHJ1Y3QgcmluZ19pbmZvIHsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOworCWRtYV9hZGRyX3QJbWFwYWRkcjsKK307CisKK3N0cnVjdCBza3kyX3BvcnQgeworCXN0cnVjdCBza3kyX2h3CSAgICAgKmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICAgICpuZXRkZXY7CisJdW5zaWduZWQJICAgICBwb3J0OworCXUzMgkJICAgICBtc2dfZW5hYmxlOworCisJc3BpbmxvY2tfdAkgICAgIHR4X2xvY2sgIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJc3RydWN0IHR4X3JpbmdfaW5mbyAgKnR4X3Jpbmc7CisJc3RydWN0IHNreTJfdHhfbGUgICAgKnR4X2xlOworCXUxNgkJICAgICB0eF9jb25zOwkJLyogbmV4dCBsZSB0byBjaGVjayAqLworCXUxNgkJICAgICB0eF9wcm9kOwkJLyogbmV4dCBsZSB0byB1c2UgKi8KKwl1MzIJCSAgICAgdHhfYWRkcjY0OworCXUxNgkJICAgICB0eF9wZW5kaW5nOworCXUxNgkJICAgICB0eF9sYXN0X3B1dDsKKwl1MTYJCSAgICAgdHhfbGFzdF9tc3M7CisKKwlzdHJ1Y3QgcmluZ19pbmZvICAgICAqcnhfcmluZyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCXN0cnVjdCBza3kyX3J4X2xlICAgICpyeF9sZTsKKwl1MzIJCSAgICAgcnhfYWRkcjY0OworCXUxNgkJICAgICByeF9uZXh0OwkJLyogbmV4dCByZSB0byBjaGVjayAqLworCXUxNgkJICAgICByeF9wdXQ7CQkvKiBuZXh0IGxlIGluZGV4IHRvIHVzZSAqLworCXUxNgkJICAgICByeF9wZW5kaW5nOworCXUxNgkJICAgICByeF9sYXN0X3B1dDsKKwl1MTYJCSAgICAgcnhfYnVmc2l6ZTsKKyNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKKwl1MTYJCSAgICAgcnhfdGFnOworCXN0cnVjdCB2bGFuX2dyb3VwICAgICp2bGdycDsKKyNlbmRpZgorCisJZG1hX2FkZHJfdAkgICAgIHJ4X2xlX21hcDsKKwlkbWFfYWRkcl90CSAgICAgdHhfbGVfbWFwOworCXUzMgkJICAgICBhZHZlcnRpc2luZzsJLyogQURWRVJUSVNFRF8gYml0cyAqLworCXUxNgkJICAgICBzcGVlZDsJLyogU1BFRURfMTAwMCwgU1BFRURfMTAwLCAuLi4gKi8KKwl1OAkJICAgICBhdXRvbmVnOwkvKiBBVVRPTkVHX0VOQUJMRSwgQVVUT05FR19ESVNBQkxFICovCisJdTgJCSAgICAgZHVwbGV4OwkvKiBEVVBMRVhfSEFMRiwgRFVQTEVYX0ZVTEwgKi8KKwl1OAkJICAgICByeF9wYXVzZTsKKwl1OAkJICAgICB0eF9wYXVzZTsKKwl1OAkJICAgICByeF9jc3VtOworCXU4CQkgICAgIHdvbDsKKworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCAgIHBoeV90YXNrOworCXN0cnVjdCBzZW1hcGhvcmUgICAgIHBoeV9zZW1hOworfTsKKworc3RydWN0IHNreTJfaHcgeworCXZvaWQgX19pb21lbSAgCSAgICAgKnJlZ3M7CisJc3RydWN0IHBjaV9kZXYJICAgICAqcGRldjsKKwl1MzIJCSAgICAgaW50cl9tYXNrOworCXN0cnVjdCBuZXRfZGV2aWNlICAgICpkZXZbMl07CisKKwlpbnQJCSAgICAgcG1fY2FwOworCXU4CSAgICAgCSAgICAgY2hpcF9pZDsKKwl1OAkJICAgICBjaGlwX3JldjsKKwl1OAkJICAgICBjb3BwZXI7CisJdTgJCSAgICAgcG9ydHM7CisKKwlzdHJ1Y3Qgc2t5Ml9zdGF0dXNfbGUgKnN0X2xlOworCXUzMgkJICAgICBzdF9pZHg7CisJZG1hX2FkZHJfdCAgIAkgICAgIHN0X2RtYTsKK307CisKKy8qIFJlZ2lzdGVyIGFjY2Vzc29yIGZvciBtZW1vcnkgbWFwcGVkIGRldmljZSAqLworc3RhdGljIGlubGluZSB1MzIgc2t5Ml9yZWFkMzIoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGh3LT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgc2t5Ml9yZWFkMTYoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCByZWcpCit7CisJcmV0dXJuIHJlYWR3KGh3LT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1OCBza3kyX3JlYWQ4KGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcmVnKQoreworCXJldHVybiByZWFkYihody0+cmVncyArIHJlZyk7Cit9CisKKy8qIFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIGF3YXksIGJ1cyBiYXNlZCB0d2Vla3Mgc3VjayAqLworc3RhdGljIGlubGluZSBpbnQgaXNfcGNpZXgoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3KQoreworCXUzMiBzdGF0dXM7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQQ0lfREVWX1NUQVRVUywgJnN0YXR1cyk7CisJcmV0dXJuIChzdGF0dXMgJiBQQ0lfT1NfUENJX1gpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3dyaXRlMzIoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgaHctPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml93cml0ZTE2KGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcmVnLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIGh3LT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNreTJfd3JpdGU4KGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcmVnLCB1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgaHctPnJlZ3MgKyByZWcpOworfQorCisvKiBZdWtvbiBQSFkgcmVsYXRlZCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0tfR01BQ19SRUcocG9ydCxyZWcpIFwKKwkoQkFTRV9HTUFDXzEgKyAocG9ydCkgKiAoQkFTRV9HTUFDXzItQkFTRV9HTUFDXzEpICsgKHJlZykpCisjZGVmaW5lIEdNX1BIWV9SRVRSSUVTCTEwMAorCitzdGF0aWMgaW5saW5lIHUxNiBnbWFfcmVhZDE2KGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgdW5zaWduZWQgcmVnKQoreworCXJldHVybiBza3kyX3JlYWQxNihodywgU0tfR01BQ19SRUcocG9ydCxyZWcpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZ21hX3JlYWQzMihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsIHVuc2lnbmVkIHJlZykKK3sKKwl1bnNpZ25lZCBiYXNlID0gU0tfR01BQ19SRUcocG9ydCwgcmVnKTsKKwlyZXR1cm4gKHUzMikgc2t5Ml9yZWFkMTYoaHcsIGJhc2UpCisJCXwgKHUzMikgc2t5Ml9yZWFkMTYoaHcsIGJhc2UrNCkgPDwgMTY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnbWFfd3JpdGUxNihjb25zdCBzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsIGludCByLCB1MTYgdikKK3sKKwlza3kyX3dyaXRlMTYoaHcsIFNLX0dNQUNfUkVHKHBvcnQsciksIHYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ21hX3NldF9hZGRyKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgdW5zaWduZWQgcmVnLAorCQkJCSAgICBjb25zdCB1OCAqYWRkcikKK3sKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgcmVnLCAgKHUxNikgYWRkclswXSB8ICgodTE2KSBhZGRyWzFdIDw8IDgpKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgcmVnKzQsKHUxNikgYWRkclsyXSB8ICgodTE2KSBhZGRyWzNdIDw8IDgpKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgcmVnKzgsKHUxNikgYWRkcls0XSB8ICgodTE2KSBhZGRyWzVdIDw8IDgpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCAyZmM5ODkzLi5lYjg2YjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0zNjUwLDcgKzM2NTEsNyBAQAogCQkJICAgICAgIFRYRF9GTEFHX0NQVV9QT1NUX0RNQSk7CiAKIAkJc2tiLT5uaC5pcGgtPmNoZWNrID0gMDsKLQkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSBudG9ocyhtc3MgKyBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pOworCQlza2ItPm5oLmlwaC0+dG90X2xlbiA9IGh0b25zKG1zcyArIGlwX3RjcF9sZW4gKyB0Y3Bfb3B0X2xlbik7CiAJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykgewogCQkJc2tiLT5oLnRoLT5jaGVjayA9IDA7CiAJCQliYXNlX2ZsYWdzICY9IH5UWERfRkxBR19UQ1BVRFBfQ1NVTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RsYW4uYyBiL2RyaXZlcnMvbmV0L3RsYW4uYwppbmRleCA5NDJmYWUwLi5jMjUwNmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5jCkBAIC0yODY1LDExICsyODY1LDExIEBACiAJICoJCQkJZm9yIHRoaXMgZGV2aWNlLgogCSAqCQlwaHkJCVRoZSBhZGRyZXNzIG9mIHRoZSBQSFkgdG8gYmUgcXVlcmllZC4KIAkgKgkJcmVnCQlUaGUgcmVnaXN0ZXIgd2hvc2UgY29udGVudHMgYXJlIHRvIGJlCi0JICoJCQkJcmV0cmVpdmVkLgorCSAqCQkJCXJldHJpZXZlZC4KIAkgKgkJdmFsCQlBIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0byBzdG9yZSB0aGUKIAkgKgkJCQlyZXRyaWV2ZWQgdmFsdWUuCiAJICoKLQkgKglUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIFRMQU4ncyBNSUkgYnVzIHRvIHJldHJlaXZlIHRoZSBjb250ZW50cworCSAqCVRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgVExBTidzIE1JSSBidXMgdG8gcmV0cmlldmUgdGhlIGNvbnRlbnRzCiAJICoJb2YgYSBnaXZlbiByZWdpc3RlciBvbiBhIFBIWS4gIEl0IHNlbmRzIHRoZSBhcHByb3ByaWF0ZSBpbmZvCiAJICoJYW5kIHRoZW4gcmVhZHMgdGhlIDE2LWJpdCByZWdpc3RlciB2YWx1ZSBmcm9tIHRoZSBNSUkgYnVzIHZpYQogCSAqCXRoZSBUTEFOIFNJTyByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi8uZ2l0aWdub3JlIGIvZHJpdmVycy9uZXQvd2FuLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlM2VhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dhbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3dhbnhsZncuaW5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90LmggYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYjFkZjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfcHJvdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBfTE1DX1BST1RPX0hfCi0jZGVmaW5lIF9MTUNfUFJPVE9fSF8KLQotdm9pZCBsbWNfcHJvdG9faW5pdChsbWNfc29mdGNfdCAqIGNvbnN0KQotdm9pZCBsbWNfcHJvdG9fYXR0YWNoKGxtY19zb2Z0Y190ICpzYyBjb25zdCkKLXZvaWQgbG1jX3Byb3RvX2RldGFjaChsbWNfc29mdGMgKnNjIGNvbnN0KQotdm9pZCBsbWNfcHJvdG9fcmVvcGVuKGxtY19zb2Z0Y190ICpzYyBjb25zdCkKLWludCBsbWNfcHJvdG9faW9jdGwobG1jX3NvZnRjX3QgKnNjIGNvbnN0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKLXZvaWQgbG1jX3Byb3RvX29wZW4obG1jX3NvZnRjX3QgKnNjIGNvbnN0KQotdm9pZCBsbWNfcHJvdG9fY2xvc2UobG1jX3NvZnRjX3QgKnNjIGNvbnN0KQotdW5zaWduZWQgc2hvcnQgbG1jX3Byb3RvX3R5cGUobG1jX3NvZnRjX3QgKnNjIGNvbnN0LCBzdHJ1Y3Qgc2tidWZmICpza2IpCi0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDAwZTU1MTYuLjI0Zjc5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTczLDcgKzE3Myw3IEBACiAJICBwcm9taXNjdW91cyBtb2RlIHZpYSB0aGUgV2lyZWxlc3MgVG9vbCdzIE1vbml0b3IgbW9kZS4gIFdoaWxlIGluIHRoaXMKIAkgIG1vZGUsIG5vIHBhY2tldHMgY2FuIGJlIHNlbnQuCiAKLWNvbmZpZyBJUFdfREVCVUcKK2NvbmZpZyBJUFcyMTAwX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiBJUFcyMTAwIG1vZHVsZS4iCiAJZGVwZW5kcyBvbiBJUFcyMTAwCiAJLS0taGVscC0tLQpAQCAtMTkyLDcgKzE5Miw3IEBACiAKIGNvbmZpZyBJUFcyMjAwCiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAyMjAwQkcgYW5kIDI5MTVBQkcgTmV0d29yayBDb25uZWN0aW9uIgotCWRlcGVuZHMgb24gSUVFRTgwMjExICYmIFBDSQorCWRlcGVuZHMgb24gTkVUX1JBRElPICYmIElFRUU4MDIxMSAmJiBQQ0kKIAlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQogICAgICAgICAgIEEgZHJpdmVyIGZvciB0aGUgSW50ZWwgUFJPL1dpcmVsZXNzIDIyMDBCRyBhbmQgMjkxNUFCRyBOZXR3b3JrCkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICAgICAgICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+LiAgVGhlIG1vZHVsZQogICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGlwdzIyMDAua28uCiAKLWNvbmZpZyBJUFdfREVCVUcKK2NvbmZpZyBJUFcyMjAwX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiBJUFcyMjAwIG1vZHVsZS4iCiAJZGVwZW5kcyBvbiBJUFcyMjAwCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDdhOTJiMWMuLmVlODY2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTQwMzcsNyArNDAzNyw3IEBACiAJCUNtZCBjbWQ7CiAJCVJlc3AgcnNwOwogCi0JCWlmICh0ZXN0X2JpdChGTEFHX0VOQUJMRUQsICZhaS0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoRkxBR19FTkFCTEVELCAmYWktPmZsYWdzKSAmJiAoUklEX1dFUF9URU1QICE9IHJpZCkpCiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiJXM6IE1BQyBzaG91bGQgYmUgZGlzYWJsZWQgKHJpZD0lMDR4KVxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIHJpZCk7CkBAIC01MDkzLDkgKzUwOTMsOSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIGtleSAlZFxuIiwgaW5kZXgpOwogCX0KIAotCWRpc2FibGVfTUFDKGFpLCBsb2NrKTsKKwlpZiAocGVybSkgZGlzYWJsZV9NQUMoYWksIGxvY2spOwogCXdyaXRlV2VwS2V5UmlkKGFpLCAmd2tyLCBwZXJtLCBsb2NrKTsKLQllbmFibGVfTUFDKGFpLCAmcnNwLCBsb2NrKTsKKwlpZiAocGVybSkgZW5hYmxlX01BQyhhaSwgJnJzcCwgbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYxNzAsNiArNjE3MCw4IEBACiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPnByaXY7CiAJQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KKwlpbnQgcGVybSA9ICggZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CisJdTE2IGN1cnJlbnRBdXRoVHlwZSA9IGxvY2FsLT5jb25maWcuYXV0aFR5cGU7CiAKIAkvKiBJcyBXRVAgc3VwcG9ydGVkID8gKi8KIAlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwpAQCAtNjIxMiw3ICs2MjE0LDcgQEAKIAkJCS8qIENvcHkgdGhlIGtleSBpbiB0aGUgZHJpdmVyICovCiAJCQltZW1jcHkoa2V5LmtleSwgZXh0cmEsIGR3cnEtPmxlbmd0aCk7CiAJCQkvKiBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQgKi8KLQkJCXNldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwga2V5LmtleSwga2V5LmxlbiwgMSwgMSk7CisJCQlzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOwogCQl9CiAJCS8qIFdFIHNwZWNpZnkgdGhhdCBpZiBhIHZhbGlkIGtleSBpcyBzZXQsIGVuY3J5cHRpb24KIAkJICogc2hvdWxkIGJlIGVuYWJsZWQgKHVzZXIgbWF5IHR1cm4gaXQgb2ZmIGxhdGVyKQpAQCAtNjIyMCwxMyArNjIyMiwxMiBAQAogCQlpZigoaW5kZXggPT0gY3VycmVudF9pbmRleCkgJiYgKGtleS5sZW4gPiAwKSAmJgogCQkgICAobG9jYWwtPmNvbmZpZy5hdXRoVHlwZSA9PSBBVVRIX09QRU4pKSB7CiAJCQlsb2NhbC0+Y29uZmlnLmF1dGhUeXBlID0gQVVUSF9FTkNSWVBUOwotCQkJc2V0X2JpdCAoRkxBR19DT01NSVQsICZsb2NhbC0+ZmxhZ3MpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRG8gd2Ugd2FudCB0byBqdXN0IHNldCB0aGUgdHJhbnNtaXQga2V5IGluZGV4ID8gKi8KIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CiAJCWlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgKChjYXBfcmlkLnNvZnRDYXAgJiAweDgwKT80OjEpKSkgewotCQkJc2V0X3dlcF9rZXkobG9jYWwsIGluZGV4LCBOVUxMLCAwLCAxLCAxKTsKKwkJCXNldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgTlVMTCwgMCwgcGVybSwgMSk7CiAJCX0gZWxzZQogCQkJLyogRG9uJ3QgY29tcGxhaW4gaWYgb25seSBjaGFuZ2UgdGhlIG1vZGUgKi8KIAkJCWlmKCFkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSB7CkBAIC02MjQxLDcgKzYyNDIsNyBAQAogCWlmKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCiAJCWxvY2FsLT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX0VOQ1JZUFQ7CS8vIE9ubHkgV2VwCiAJLyogQ29tbWl0IHRoZSBjaGFuZ2VzIHRvIGZsYWdzIGlmIG5lZWRlZCAqLwotCWlmKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpCisJaWYgKGxvY2FsLT5jb25maWcuYXV0aFR5cGUgIT0gY3VycmVudEF1dGhUeXBlKQogCQlzZXRfYml0IChGTEFHX0NPTU1JVCwgJmxvY2FsLT5mbGFncyk7CiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDVlNTNjNTIuLmU0NzI5ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtNSw5ICs1LDkgQEAKICAgICAgICAgQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KICAgICAgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBTaW1vbiBLZWxsZXkuCiAKLSAgICBUaGlzIGNvZGUgd2FzIGRldmVsb3BlZCBmcm9tIHZlcnNpb24gMi4xLjEgb2YgdGhlIEF0bWVsIGRyaXZlcnMsIAotICAgIHJlbGVhc2VkIGJ5IEF0bWVsIGNvcnAuIHVuZGVyIHRoZSBHUEwgaW4gRGVjZW1iZXIgMjAwMi4gSXQgYWxzbyAKLSAgICBpbmNsdWRlcyBjb2RlIGZyb20gdGhlIExpbnV4IGFpcm9uZXQgZHJpdmVycyAoQykgQmVuamFtaW4gUmVlZCwgCisgICAgVGhpcyBjb2RlIHdhcyBkZXZlbG9wZWQgZnJvbSB2ZXJzaW9uIDIuMS4xIG9mIHRoZSBBdG1lbCBkcml2ZXJzLAorICAgIHJlbGVhc2VkIGJ5IEF0bWVsIGNvcnAuIHVuZGVyIHRoZSBHUEwgaW4gRGVjZW1iZXIgMjAwMi4gSXQgYWxzbworICAgIGluY2x1ZGVzIGNvZGUgZnJvbSB0aGUgTGludXggYWlyb25ldCBkcml2ZXJzIChDKSBCZW5qYW1pbiBSZWVkLAogICAgIGFuZCB0aGUgTGludXggUENNQ0lBIHBhY2thZ2UsIChDKSBEYXZpZCBIaW5kcyBhbmQgdGhlIExpbnV4IHdpcmVsZXNzCiAgICAgZXh0ZW5zaW9ucywgKEMpIEplYW4gVG91cnJpbGhlcy4KIApAQCAtMzEsNyArMzEsNyBAQAogICAgIGFsb25nIHdpdGggQXRtZWwgd2lyZWxlc3MgbGFuIGRyaXZlcnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAKLSAgICBGb3IgYWxsIHF1ZXJpZXMgYWJvdXQgdGhpcyBjb2RlLCBwbGVhc2UgY29udGFjdCB0aGUgY3VycmVudCBhdXRob3IsIAorICAgIEZvciBhbGwgcXVlcmllcyBhYm91dCB0aGlzIGNvZGUsIHBsZWFzZSBjb250YWN0IHRoZSBjdXJyZW50IGF1dGhvciwKICAgICBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiBhbmQgbm90IEF0bWVsIENvcnBvcmF0aW9uLgogCiAgICAgQ3JlZGl0IGlzIGR1ZSB0byBIUCBVSyBhbmQgQ2FtYnJpZGdlIE9ubGluZSBTeXN0ZW1zIEx0ZCBmb3Igc3VwcGx5aW5nCkBAIC03OSwxMyArNzksMTMgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJBdG1lbCBhdDc2YzUweCB3aXJlbGVzcyBjYXJkcyIpOwogCi0vKiBUaGUgbmFtZSBvZiB0aGUgZmlybXdhcmUgZmlsZSB0byBiZSBsb2FkZWQgCisvKiBUaGUgbmFtZSBvZiB0aGUgZmlybXdhcmUgZmlsZSB0byBiZSBsb2FkZWQKICAgIG92ZXItcmlkZXMgYW55IGF1dG9tYXRpYyBzZWxlY3Rpb24gKi8KIHN0YXRpYyBjaGFyICpmaXJtd2FyZSA9IE5VTEw7CiBtb2R1bGVfcGFyYW0oZmlybXdhcmUsIGNoYXJwLCAwKTsKIAogLyogdGFibGUgb2YgZmlybXdhcmUgZmlsZSBuYW1lcyAqLwotc3RhdGljIHN0cnVjdCB7IAorc3RhdGljIHN0cnVjdCB7CiAJQXRtZWxGV1R5cGUgZndfdHlwZTsKIAljb25zdCBjaGFyICpmd19maWxlOwogCWNvbnN0IGNoYXIgKmZ3X2ZpbGVfZXh0OwpAQCAtMTA0LDE3ICsxMDQsMTcgQEAKICNkZWZpbmUgTUFYX1NTSURfTEVOR1RIIDMyCiAjZGVmaW5lIE1HTVRfSklGRklFUyAoMjU2ICogSFogLyAxMDApCiAKLSNkZWZpbmUgTUFYX0JTU19FTlRSSUVTCTY0CQorI2RlZmluZSBNQVhfQlNTX0VOVFJJRVMJNjQKIAogLyogcmVnaXN0ZXJzICovCi0jZGVmaW5lIEdDUiAgMHgwMCAgICAvLyAgICAgIChTSVIwKSAgR2VuZXJhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgICAgICAKLSNkZWZpbmUgQlNSICAweDAyICAgIC8vICAgICAgKFNJUjEpICBCYW5rIFN3aXRjaGluZyBTZWxlY3QgUmVnaXN0ZXIgCisjZGVmaW5lIEdDUiAgMHgwMCAgICAvLyAgICAgIChTSVIwKSAgR2VuZXJhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisjZGVmaW5lIEJTUiAgMHgwMiAgICAvLyAgICAgIChTSVIxKSAgQmFuayBTd2l0Y2hpbmcgU2VsZWN0IFJlZ2lzdGVyCiAjZGVmaW5lIEFSICAgMHgwNAogI2RlZmluZSBEUiAgIDB4MDgKLSNkZWZpbmUgTVIxICAweDEyICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAKLSNkZWZpbmUgTVIyICAweDE0ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDIgIAotI2RlZmluZSBNUjMgIDB4MTYgICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgMyAgCi0jZGVmaW5lIE1SNCAgMHgxOCAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciA0ICAgCisjZGVmaW5lIE1SMSAgMHgxMiAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciAxCisjZGVmaW5lIE1SMiAgMHgxNCAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciAyCisjZGVmaW5lIE1SMyAgMHgxNiAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciAzCisjZGVmaW5lIE1SNCAgMHgxOCAgICAvLyAgICAgIE1pcnJvciBSZWdpc3RlciA0CiAKICNkZWZpbmUgR1BSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjCiAjZGVmaW5lIEdQUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZQpAQCAtMTIzLDkgKzEyMyw5IEBACiAvLyBDb25zdGFudHMgZm9yIHRoZSBHQ1IgcmVnaXN0ZXIuCiAvLwogI2RlZmluZSBHQ1JfUkVNQVAgICAgIDB4MDQwMCAgICAgICAgICAvLyBSZW1hcCBpbnRlcm5hbCBTUkFNIHRvIDAKLSNkZWZpbmUgR0NSX1NXUkVTICAgICAweDAwODAgICAgICAgICAgLy8gQklVIHJlc2V0IChBUk0gYW5kIFBBSSBhcmUgTk9UIHJlc2V0KSAKKyNkZWZpbmUgR0NSX1NXUkVTICAgICAweDAwODAgICAgICAgICAgLy8gQklVIHJlc2V0IChBUk0gYW5kIFBBSSBhcmUgTk9UIHJlc2V0KQogI2RlZmluZSBHQ1JfQ09SRVMgICAgIDB4MDA2MCAgICAgICAgICAvLyBDb3JlIFJlc2V0IChBUk0gYW5kIFBBSSBhcmUgcmVzZXQpCi0jZGVmaW5lIEdDUl9FTklOVCAgICAgMHgwMDAyICAgICAgICAgIC8vIEVuYWJsZSBJbnRlcnJ1cHRzICAgIAorI2RlZmluZSBHQ1JfRU5JTlQgICAgIDB4MDAwMiAgICAgICAgICAvLyBFbmFibGUgSW50ZXJydXB0cwogI2RlZmluZSBHQ1JfQUNLSU5UICAgIDB4MDAwOCAgICAgICAgICAvLyBBY2tub3dsZWRnZSBJbnRlcnJ1cHRzCiAKICNkZWZpbmUgQlNTX1NSQU0gICAgICAweDAyMDAgICAgICAgICAgLy8gQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBTUkFNCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgdTMyICAgICAgICAgIE5leHQ7CiAgICAgICAgIHUxNiAgICAgICAgICBNc2R1UG9zOwogICAgICAgICB1MTYgICAgICAgICAgTXNkdVNpemU7Ci0JCisKICAgICAgICAgdTggICAgICAgICAgIFN0YXRlOwogICAgICAgICB1OCAgICAgICAgICAgU3RhdHVzOwogICAgICAgICB1OCAgICAgICAgICAgUmF0ZTsKQEAgLTE5OSw3ICsxOTksNiBAQAogICAgICAgICB1OCAgICAgICAgICAgUHJlYW1ibGVUeXBlOwogICAgICAgICB1MTYgICAgICAgICAgRHVyYXRpb247CiAgICAgICAgIHUzMiAgICAgICAgICBSeFRpbWU7Ci0KIH07CiAKICNkZWZpbmUgUlhfREVTQ19GTEFHX1ZBTElEICAgICAgIDB4ODAKQEAgLTIxOCwxNiArMjE3LDE1IEBACiAjZGVmaW5lIFJYX0RFU0NfRFVSQVRJT05fT0ZGU0VUICAgICAgMTQKICNkZWZpbmUgUlhfREVTQ19SWF9USU1FX09GRlNFVCAgICAgICAxNgogCi0KIHN0cnVjdCB0eF9kZXNjIHsKIAl1MzIgICAgICAgTmV4dERlc2NyaXB0b3I7CiAJdTE2ICAgICAgIFR4U3RhcnRPZkZyYW1lOwogCXUxNiAgICAgICBUeExlbmd0aDsKLQkKKwogCXU4ICAgICAgICBUeFN0YXRlOwogCXU4ICAgICAgICBUeFN0YXR1czsKIAl1OCAgICAgICAgUmV0cnlDb3VudDsKLQkKKwogCXU4ICAgICAgICBUeFJhdGU7CiAKIAl1OCAgICAgICAgS2V5SW5kZXg7CkBAIC0yMzgsMTAgKzIzNiw4IEBACiAJdTggICAgICAgIFJlc2VydmVkOwogCXU4ICAgICAgICBQYWNrZXRUeXBlOwogCXUxNiAgICAgICBIb3N0VHhMZW5ndGg7Ci0JCiB9OwogCi0KICNkZWZpbmUgVFhfREVTQ19ORVhUX09GRlNFVCAgICAgICAgICAwCiAjZGVmaW5lIFRYX0RFU0NfUE9TX09GRlNFVCAgICAgICAgICAgNAogI2RlZmluZSBUWF9ERVNDX1NJWkVfT0ZGU0VUICAgICAgICAgIDYKQEAgLTI1NSw4ICsyNTEsNiBAQAogI2RlZmluZSBUWF9ERVNDX1BBQ0tFVF9UWVBFX09GRlNFVCAgIDE3CiAjZGVmaW5lIFRYX0RFU0NfSE9TVF9MRU5HVEhfT0ZGU0VUICAgMTgKIAotCi0KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIEhvc3QtTUFDIGludGVyZmFjZQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMjY2LDcgKzI2MCw2IEBACiAjZGVmaW5lIFRYX0ZJUk1fT1dOICAgICAgICAgICAgIDB4ODAKICNkZWZpbmUgVFhfRE9ORSAgICAgICAgICAgICAgICAgMHg0MAogCi0KICNkZWZpbmUgVFhfRVJST1IgICAgICAgICAgICAgICAgMHgwMQogCiAjZGVmaW5lIFRYX1BBQ0tFVF9UWVBFX0RBVEEgICAgIDB4MDEKQEAgLTI4MCw4ICsyNzMsNyBAQAogI2RlZmluZSBJU1JfQ09NTUFORF9DT01QTEVURSAgICAweDEwICAgICAgICAvLyBjb21tYW5kIGNvbXBsZXRlZAogI2RlZmluZSBJU1JfT1VUX09GX1JBTkdFICAgICAgICAweDIwICAgICAgICAvLyBjb21tYW5kIGNvbXBsZXRlZAogI2RlZmluZSBJU1JfSUJTU19NRVJHRSAgICAgICAgICAweDQwICAgICAgICAvLyAoNC4xLjIuMzApOiBJQlNTIG1lcmdlCi0jZGVmaW5lIElTUl9HRU5FUklDX0lSUSAgICAgICAgIDB4ODAgICAgICAgICAgICAgICAgCi0KKyNkZWZpbmUgSVNSX0dFTkVSSUNfSVJRICAgICAgICAgMHg4MAogCiAjZGVmaW5lIExvY2FsX01pYl9UeXBlICAgICAgICAgIDB4MDEKICNkZWZpbmUgTWFjX0FkZHJlc3NfTWliX1R5cGUgICAgMHgwMgpAQCAtMzE3LDcgKzMwOSw2IEBACiAjZGVmaW5lIExPQ0FMX01JQl9QUkVBTUJMRV9UWVBFICAgICAgICAgICAgICAgOQogI2RlZmluZSBNQUNfQUREUl9NSUJfTUFDX0FERFJfUE9TICAgICAgICAgICAgIDAKIAotCiAjZGVmaW5lICAgICAgICAgQ01EX1NldF9NSUJfVmFycyAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSAgICAgICAgIENNRF9HZXRfTUlCX1ZhcnMgICAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgICAgICAgICBDTURfU2NhbiAgICAgICAgICAgICAgICAgICAgICAweDAzCkBAIC0zMzgsNyArMzI5LDYgQEAKICNkZWZpbmUgICAgICAgICBDTURfU1RBVFVTX0hPU1RfRVJST1IgICAgICAgICAgICAgMHhGRgogI2RlZmluZSAgICAgICAgIENNRF9TVEFUVVNfQlVTWSAgICAgICAgICAgICAgICAgICAweEZFCiAKLQogI2RlZmluZSBDTURfQkxPQ0tfQ09NTUFORF9PRkZTRVQgICAgICAgIDAKICNkZWZpbmUgQ01EX0JMT0NLX1NUQVRVU19PRkZTRVQgICAgICAgICAxCiAjZGVmaW5lIENNRF9CTE9DS19QQVJBTUVURVJTX09GRlNFVCAgICAgNApAQCAtMzQ3LDE1ICszMzcsMTUgQEAKIAogI2RlZmluZSBNR01UX0ZSQU1FX0JPRFlfT0ZGU0VUCQkyNAogI2RlZmluZSBNQVhfQVVUSEVOVElDQVRJT05fUkVUUklFUwkzCi0jZGVmaW5lIE1BWF9BU1NPQ0lBVElPTl9SRVRSSUVTIAkzCisjZGVmaW5lIE1BWF9BU1NPQ0lBVElPTl9SRVRSSUVTCQkzCiAKICNkZWZpbmUgQVVUSEVOVElDQVRJT05fUkVTUE9OU0VfVElNRV9PVVQgIDEwMDAKIAogI2RlZmluZSBNQVhfV0lSRUxFU1NfQk9EWSAgMjMxNiAvKiBtdHUgaXMgMjMxMiwgQ1JDIGlzIDQgKi8KICNkZWZpbmUgTE9PUF9SRVRSWV9MSU1JVCAgIDUwMDAwMAogCi0jZGVmaW5lIEFDVElWRV9NT0RFIAkxCi0jZGVmaW5lIFBTX01PREUgCTIKKyNkZWZpbmUgQUNUSVZFX01PREUJMQorI2RlZmluZSBQU19NT0RFCQkyCiAKICNkZWZpbmUgTUFYX0VOQ1JZUFRJT05fS0VZUyA0CiAjZGVmaW5lIE1BWF9FTkNSWVBUSU9OX0tFWV9TSVpFIDQwCkBAIC0zNzcsNyArMzY3LDcgQEAKICNkZWZpbmUgUkVHX0RPTUFJTl9NS0sxCQkweDQxCS8vQ2hhbm5lbAkxLTE0CUphcGFuKE1LSzEpCiAjZGVmaW5lIFJFR19ET01BSU5fSVNSQUVMCTB4NTAJLy9DaGFubmVsCTMtOQlJU1JBRUwKIAotI2RlZmluZSBCU1NfVFlQRV9BRF9IT0MgCTEKKyNkZWZpbmUgQlNTX1RZUEVfQURfSE9DCQkxCiAjZGVmaW5lIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFIDIKIAogI2RlZmluZSBTQ0FOX1RZUEVfQUNUSVZFCTAKQEAgLTM4OSw3ICszNzksNyBAQAogCiAjZGVmaW5lIERBVEFfRlJBTUVfV1NfSEVBREVSX1NJWkUgICAzMAogCi0vKiBwcm9taXNjdW91cyBtb2RlIGNvbnRyb2wgKi8gCisvKiBwcm9taXNjdW91cyBtb2RlIGNvbnRyb2wgKi8KICNkZWZpbmUgUFJPTV9NT0RFX09GRgkJCTB4MAogI2RlZmluZSBQUk9NX01PREVfVU5LTk9XTgkJMHgxCiAjZGVmaW5lIFBST01fTU9ERV9DUkNfRkFJTEVECQkweDIKQEAgLTM5OCw4ICszODgsNyBAQAogI2RlZmluZSBQUk9NX01PREVfQ1RSTAkJCTB4MTAKICNkZWZpbmUgUFJPTV9NT0RFX0JBRF9QUk9UT0NPTAkJMHgyMAogCi0KLSNkZWZpbmUgSUZBQ0VfSU5UX1NUQVRVU19PRkZTRVQgCTAKKyNkZWZpbmUgSUZBQ0VfSU5UX1NUQVRVU19PRkZTRVQJCTAKICNkZWZpbmUgSUZBQ0VfSU5UX01BU0tfT0ZGU0VUCQkxCiAjZGVmaW5lIElGQUNFX0xPQ0tPVVRfSE9TVF9PRkZTRVQJMgogI2RlZmluZSBJRkFDRV9MT0NLT1VUX01BQ19PRkZTRVQJMwpAQCAtNDA3LDcgKzM5Niw3IEBACiAjZGVmaW5lIElGQUNFX01BQ19TVEFUX09GRlNFVAkJMzAKICNkZWZpbmUgSUZBQ0VfR0VORVJJQ19JTlRfVFlQRV9PRkZTRVQJMzIKIAotI2RlZmluZSBDSVBIRVJfU1VJVEVfTk9ORSAgICAgMCAKKyNkZWZpbmUgQ0lQSEVSX1NVSVRFX05PTkUgICAgIDAKICNkZWZpbmUgQ0lQSEVSX1NVSVRFX1dFUF82NCAgIDEKICNkZWZpbmUgQ0lQSEVSX1NVSVRFX1RLSVAgICAgIDIKICNkZWZpbmUgQ0lQSEVSX1NVSVRFX0FFUyAgICAgIDMKQEAgLTQxOSwxMSArNDA4LDExIEBACiAvLwogLy8KIAotLy8gRnVuY0N0cmwgZmllbGQ6IAorLy8gRnVuY0N0cmwgZmllbGQ6CiAvLwogI2RlZmluZSBGVU5DX0NUUkxfVHhFTkFCTEUJCTB4MTAKICNkZWZpbmUgRlVOQ19DVFJMX1J4RU5BQkxFCQkweDIwCi0jZGVmaW5lIEZVTkNfQ1RSTF9JTklUX0NPTVBMRVRFIAkweDAxCisjZGVmaW5lIEZVTkNfQ1RSTF9JTklUX0NPTVBMRVRFCQkweDAxCiAKIC8qIEEgc3R1YiBmaXJtd2FyZSBpbWFnZSB3aGljaCByZWFkcyB0aGUgTUFDIGFkZHJlc3MgZnJvbSBOVlJBTSBvbiB0aGUgY2FyZC4KICAgIEZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24gYW5kIHNvdXJjZSBzZWUgdGhlIGVuZCBvZiB0aGlzIGZpbGUuICovCkBAIC00ODYsMTAgKzQ3NSwxMCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwkvLyBkZXZpY2Ugc3RhdHMKIAlzcGlubG9ja190IGlycWxvY2ssIHRpbWVybG9jazsJLy8gc3BpbmxvY2tzCiAJZW51bSB7IEJVU19UWVBFX1BDQ0FSRCwgQlVTX1RZUEVfUENJIH0gYnVzX3R5cGU7Ci0JZW51bSB7IAotCQlDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0gsIAorCWVudW0geworCQlDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0gsCiAJCUNBUkRfVFlQRV9TUElfRkxBU0gsCi0JCUNBUkRfVFlQRV9FRVBST00gCisJCUNBUkRfVFlQRV9FRVBST00KIAl9IGNhcmRfdHlwZTsKIAlpbnQgZG9fcnhfY3JjOyAvKiBJZiB3ZSBuZWVkIHRvIENSQyBpbmNvbWluZyBwYWNrZXRzICovCiAJaW50IHByb2JlX2NyYzsgLyogc2V0IGlmIHdlIGRvbid0IHlldCBrbm93ICovCkBAIC00OTcsMTggKzQ4NiwxOCBAQAogCXUxNiByeF9kZXNjX2hlYWQ7CiAJdTE2IHR4X2Rlc2NfZnJlZSwgdHhfZGVzY19oZWFkLCB0eF9kZXNjX3RhaWwsIHR4X2Rlc2NfcHJldmlvdXM7CiAJdTE2IHR4X2ZyZWVfbWVtLCB0eF9idWZmX2hlYWQsIHR4X2J1ZmZfdGFpbDsKLQkKKwogCXUxNiBmcmFnX3NlcSwgZnJhZ19sZW4sIGZyYWdfbm87Ci0JdTggZnJhZ19zb3VyY2VbNl07IAotCQorCXU4IGZyYWdfc291cmNlWzZdOworCiAJdTggd2VwX2lzX29uLCBkZWZhdWx0X2tleSwgZXhjbHVkZV91bmVuY3J5cHRlZCwgZW5jcnlwdGlvbl9sZXZlbDsKIAl1OCBncm91cF9jaXBoZXJfc3VpdGUsIHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZTsKIAl1OCB3ZXBfa2V5c1tNQVhfRU5DUllQVElPTl9LRVlTXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRV07Ci0JaW50IHdlcF9rZXlfbGVuW01BWF9FTkNSWVBUSU9OX0tFWVNdOyAKKwlpbnQgd2VwX2tleV9sZW5bTUFYX0VOQ1JZUFRJT05fS0VZU107CiAJaW50IHVzZV93cGEsIHJhZGlvX29uX2Jyb2tlbjsgLyogZmlybXdhcmUgZGVwZW5kZW50IHN0dWZmLiAqLwogCiAJdTE2IGhvc3RfaW5mb19iYXNlOwotCXN0cnVjdCBob3N0X2luZm9fc3RydWN0IHsgCisJc3RydWN0IGhvc3RfaW5mb19zdHJ1Y3QgewogCQkvKiBOQiB0aGlzIGlzIG1hdGNoZWQgdG8gdGhlIGhhcmR3YXJlLCBkb24ndCBjaGFuZ2UuICovCiAJCXU4IHZvbGF0aWxlIGludF9zdGF0dXM7CiAJCXU4IHZvbGF0aWxlIGludF9tYXNrOwpAQCAtNTI0LDIwICs1MTMsMjAgQEAKIAkJdTE2IHJ4X2J1ZmZfc2l6ZTsKIAkJdTE2IHJ4X2Rlc2NfcG9zOwogCQl1MTYgcnhfZGVzY19jb3VudDsKLQkJCisKIAkJdTE2IGJ1aWxkX3ZlcnNpb247Ci0JCXUxNiBjb21tYW5kX3BvczsgCQotCQkKKwkJdTE2IGNvbW1hbmRfcG9zOworCiAJCXUxNiBtYWpvcl92ZXJzaW9uOwogCQl1MTYgbWlub3JfdmVyc2lvbjsKLQkJCisKIAkJdTE2IGZ1bmNfY3RybDsKIAkJdTE2IG1hY19zdGF0dXM7CiAJCXUxNiBnZW5lcmljX0lSUV90eXBlOwogCQl1OCAgcmVzZXJ2ZWRbMl07CiAJfSBob3N0X2luZm87CiAKLQllbnVtIHsgCisJZW51bSB7CiAJCVNUQVRJT05fU1RBVEVfU0NBTk5JTkcsCiAJCVNUQVRJT05fU1RBVEVfSk9JTk5JTkcsCiAJCVNUQVRJT05fU1RBVEVfQVVUSEVOVElDQVRJTkcsCkBAIC01NDcsNyArNTM2LDcgQEAKIAkJU1RBVElPTl9TVEFURV9ET1dOLAogCQlTVEFUSU9OX1NUQVRFX01HTVRfRVJST1IKIAl9IHN0YXRpb25fc3RhdGU7Ci0JCisKIAlpbnQgb3BlcmF0aW5nX21vZGUsIHBvd2VyX21vZGU7CiAJdGltZV90IGxhc3RfcXVhbDsKIAlpbnQgYmVhY29uc190aGlzX3NlYzsKQEAgLTU2MCwxOCArNTQ5LDE4IEBACiAJaW50IGxvbmdfcmV0cnksIHNob3J0X3JldHJ5OwogCWludCBwcmVhbWJsZTsKIAlpbnQgZGVmYXVsdF9iZWFjb25fcGVyaW9kLCBiZWFjb25fcGVyaW9kLCBsaXN0ZW5faW50ZXJ2YWw7Ci0JaW50IEN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0sIEV4cGVjdGVkQXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtOwkKKwlpbnQgQ3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSwgRXhwZWN0ZWRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW07CiAJaW50IEF1dGhlbnRpY2F0aW9uUmVxdWVzdFJldHJ5Q250LCBBc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCwgUmVBc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudDsKIAllbnVtIHsKIAkJU0lURV9TVVJWRVlfSURMRSwKIAkJU0lURV9TVVJWRVlfSU5fUFJPR1JFU1MsCi0JCVNJVEVfU1VSVkVZX0NPTVBMRVRFRCAKKwkJU0lURV9TVVJWRVlfQ09NUExFVEVECiAJfSBzaXRlX3N1cnZleV9zdGF0ZTsKIAl0aW1lX3QgbGFzdF9zdXJ2ZXk7CiAKIAlpbnQgc3RhdGlvbl93YXNfYXNzb2NpYXRlZCwgc3RhdGlvbl9pc19hc3NvY2lhdGVkOwogCWludCBmYXN0X3NjYW47Ci0JCQkJCisKIAlzdHJ1Y3QgYnNzX2luZm8gewogCQlpbnQgY2hhbm5lbDsKIAkJaW50IFNTSURzaXplOwpAQCAtNTg0LDEzICs1NzMsMTIgQEAKIAkJdTggU1NJRFtNQVhfU1NJRF9MRU5HVEhdOwogCX0gQlNTaW5mb1tNQVhfQlNTX0VOVFJJRVNdOwogCWludCBCU1NfbGlzdF9lbnRyaWVzLCBjdXJyZW50X0JTUzsKLQlpbnQgY29ubmVjdF90b19hbnlfQlNTOyAKKwlpbnQgY29ubmVjdF90b19hbnlfQlNTOwogCWludCBTU0lEX3NpemUsIG5ld19TU0lEX3NpemU7CiAJdTggQ3VycmVudEJTU0lEWzZdLCBCU1NJRFs2XTsKIAl1OCBTU0lEW01BWF9TU0lEX0xFTkdUSF0sIG5ld19TU0lEW01BWF9TU0lEX0xFTkdUSF07CiAJdTY0IGxhc3RfYmVhY29uX3RpbWVzdGFtcDsKIAl1OCByeF9idWZbTUFYX1dJUkVMRVNTX0JPRFldOwotCQogfTsKIAogc3RhdGljIHU4IGF0bWVsX2Jhc2ljX3JhdGVzWzRdID0gezB4ODIsMHg4NCwweDBiLDB4MTZ9OwpAQCAtNTk4LDM5ICs1ODYsNDkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWludCByZWdfZG9tYWluOwogCWludCBtaW4sIG1heDsKLQljaGFyICpuYW1lOyAKKwljaGFyICpuYW1lOwogfSBjaGFubmVsX3RhYmxlW10gPSB7IHsgUkVHX0RPTUFJTl9GQ0MsIDEsIDExLCAiVVNBIiB9LAogCQkgICAgICB7IFJFR19ET01BSU5fRE9DLCAxLCAxMSwgIkNhbmFkYSIgfSwKIAkJICAgICAgeyBSRUdfRE9NQUlOX0VUU0ksIDEsIDEzLCAiRXVyb3BlIiB9LAogCQkgICAgICB7IFJFR19ET01BSU5fU1BBSU4sIDEwLCAxMSwgIlNwYWluIiB9LAotCQkgICAgICB7IFJFR19ET01BSU5fRlJBTkNFLCAxMCwgMTMsICJGcmFuY2UiIH0sIAorCQkgICAgICB7IFJFR19ET01BSU5fRlJBTkNFLCAxMCwgMTMsICJGcmFuY2UiIH0sCiAJCSAgICAgIHsgUkVHX0RPTUFJTl9NS0ssIDE0LCAxNCwgIk1LSyIgfSwKIAkJICAgICAgeyBSRUdfRE9NQUlOX01LSzEsIDEsIDE0LCAiTUtLMSIgfSwKIAkJICAgICAgeyBSRUdfRE9NQUlOX0lTUkFFTCwgMywgOSwgIklzcmFlbCJ9IH07CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX3dwYV9taWIoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYpOwogc3RhdGljIGludCBhdG1lbF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyB2b2lkIGF0bWVsX2NvcHlfdG9fY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgZGVzdCwgdW5zaWduZWQgY2hhciAqc3JjLCB1MTYgbGVuKTsKLXN0YXRpYyB2b2lkIGF0bWVsX2NvcHlfdG9faG9zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpkZXN0LCB1MTYgc3JjLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkIGF0bWVsX2NvcHlfdG9fY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgZGVzdCwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMsIHUxNiBsZW4pOworc3RhdGljIHZvaWQgYXRtZWxfY29weV90b19ob3N0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRlc3QsCisJCQkgICAgICAgdTE2IHNyYywgdTE2IGxlbik7CiBzdGF0aWMgdm9pZCBhdG1lbF9zZXRfZ2NyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtYXNrKTsKIHN0YXRpYyB2b2lkIGF0bWVsX2NsZWFyX2djcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbWFzayk7CiBzdGF0aWMgaW50IGF0bWVsX2xvY2tfbWFjKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkIGF0bWVsX3dtZW0zMihzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IHBvcywgdTMyIGRhdGEpOwogc3RhdGljIHZvaWQgYXRtZWxfY29tbWFuZF9pcnEoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYpOwogc3RhdGljIGludCBhdG1lbF92YWxpZGF0ZV9jaGFubmVsKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBpbnQgY2hhbm5lbCk7Ci1zdGF0aWMgdm9pZCBhdG1lbF9tYW5hZ2VtZW50X2ZyYW1lKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLCAKK3N0YXRpYyB2b2lkIGF0bWVsX21hbmFnZW1lbnRfZnJhbWUoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKIAkJCQkgICB1MTYgZnJhbWVfbGVuLCB1OCByc3NpKTsKIHN0YXRpYyB2b2lkIGF0bWVsX21hbmFnZW1lbnRfdGltZXIodV9sb25nIGEpOwotc3RhdGljIHZvaWQgYXRtZWxfc2VuZF9jb21tYW5kKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBpbnQgY29tbWFuZCwgdm9pZCAqY21kLCBpbnQgY21kX3NpemUpOwotc3RhdGljIGludCBhdG1lbF9zZW5kX2NvbW1hbmRfd2FpdChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgaW50IGNvbW1hbmQsIHZvaWQgKmNtZCwgaW50IGNtZF9zaXplKTsKLXN0YXRpYyB2b2lkIGF0bWVsX3RyYW5zbWl0X21hbmFnZW1lbnRfZnJhbWUoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCitzdGF0aWMgdm9pZCBhdG1lbF9zZW5kX2NvbW1hbmQoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIGludCBjb21tYW5kLAorCQkJICAgICAgIHZvaWQgKmNtZCwgaW50IGNtZF9zaXplKTsKK3N0YXRpYyBpbnQgYXRtZWxfc2VuZF9jb21tYW5kX3dhaXQoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIGludCBjb21tYW5kLAorCQkJCSAgIHZvaWQgKmNtZCwgaW50IGNtZF9zaXplKTsKK3N0YXRpYyB2b2lkIGF0bWVsX3RyYW5zbWl0X21hbmFnZW1lbnRfZnJhbWUoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLAogCQkJCQkgICAgdTggKmJvZHksIGludCBib2R5X2xlbik7CiAKIHN0YXRpYyB1OCBhdG1lbF9nZXRfbWliOChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTggdHlwZSwgdTggaW5kZXgpOwotc3RhdGljIHZvaWQgYXRtZWxfc2V0X21pYjgoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4IHR5cGUsIHU4IGluZGV4LCB1OCBkYXRhKTsKLXN0YXRpYyB2b2lkIGF0bWVsX3NldF9taWIxNihzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTggdHlwZSwgdTggaW5kZXgsIHUxNiBkYXRhKTsKLXN0YXRpYyB2b2lkIGF0bWVsX3NldF9taWIoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4IHR5cGUsIHU4IGluZGV4LCB1OCAqZGF0YSwgaW50IGRhdGFfbGVuKTsKLXN0YXRpYyB2b2lkIGF0bWVsX2dldF9taWIoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4IHR5cGUsIHU4IGluZGV4LCB1OCAqZGF0YSwgaW50IGRhdGFfbGVuKTsKK3N0YXRpYyB2b2lkIGF0bWVsX3NldF9taWI4KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1OCB0eXBlLCB1OCBpbmRleCwKKwkJCSAgIHU4IGRhdGEpOworc3RhdGljIHZvaWQgYXRtZWxfc2V0X21pYjE2KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1OCB0eXBlLCB1OCBpbmRleCwKKwkJCSAgICB1MTYgZGF0YSk7CitzdGF0aWMgdm9pZCBhdG1lbF9zZXRfbWliKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1OCB0eXBlLCB1OCBpbmRleCwKKwkJCSAgdTggKmRhdGEsIGludCBkYXRhX2xlbik7CitzdGF0aWMgdm9pZCBhdG1lbF9nZXRfbWliKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1OCB0eXBlLCB1OCBpbmRleCwKKwkJCSAgdTggKmRhdGEsIGludCBkYXRhX2xlbik7CiBzdGF0aWMgdm9pZCBhdG1lbF9zY2FuKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBpbnQgc3BlY2lmaWNfc3NpZCk7CiBzdGF0aWMgdm9pZCBhdG1lbF9qb2luX2JzcyhzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgaW50IGJzc19pbmRleCk7CiBzdGF0aWMgdm9pZCBhdG1lbF9zbW9vdGhfcXVhbChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdik7CkBAIC02NTAsMTIgKzY0OCwxMiBAQAogCXJldHVybiBwcml2LT5ob3N0X2luZm8uY29tbWFuZF9wb3MgKyBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGF0bWVsX3J4KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1MTYgb2Zmc2V0LCB1MTYgIGRlc2MpCitzdGF0aWMgaW5saW5lIHUxNiBhdG1lbF9yeChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IG9mZnNldCwgdTE2IGRlc2MpCiB7CiAJcmV0dXJuIHByaXYtPmhvc3RfaW5mby5yeF9kZXNjX3BvcyArIChzaXplb2Yoc3RydWN0IHJ4X2Rlc2MpICogZGVzYykgKyBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGF0bWVsX3R4KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1MTYgb2Zmc2V0LCB1MTYgIGRlc2MpCitzdGF0aWMgaW5saW5lIHUxNiBhdG1lbF90eChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IG9mZnNldCwgdTE2IGRlc2MpCiB7CiAJcmV0dXJuIHByaXYtPmhvc3RfaW5mby50eF9kZXNjX3BvcyArIChzaXplb2Yoc3RydWN0IHR4X2Rlc2MpICogZGVzYykgKyBvZmZzZXQ7CiB9CkBAIC02ODIsMjUgKzY4MCwyNSBAQAogCiBzdGF0aWMgaW5saW5lIHU4IGF0bWVsX3JtZW04KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1MTYgcG9zKQogewotCWF0bWVsX3dyaXRlQVIocHJpdi0+ZGV2LCBwb3MpOwkKKwlhdG1lbF93cml0ZUFSKHByaXYtPmRldiwgcG9zKTsKIAlyZXR1cm4gYXRtZWxfcmVhZDgocHJpdi0+ZGV2LCBEUik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG1lbF93bWVtOChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IHBvcywgdTE2IGRhdGEpCiB7Ci0JYXRtZWxfd3JpdGVBUihwcml2LT5kZXYsIHBvcyk7CQorCWF0bWVsX3dyaXRlQVIocHJpdi0+ZGV2LCBwb3MpOwogCWF0bWVsX3dyaXRlOChwcml2LT5kZXYsIERSLCBkYXRhKTsKIH0KIAogc3RhdGljIGlubGluZSB1MTYgYXRtZWxfcm1lbTE2KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1MTYgcG9zKQogewotICAgICAgIAlhdG1lbF93cml0ZUFSKHByaXYtPmRldiwgcG9zKTsJCisJYXRtZWxfd3JpdGVBUihwcml2LT5kZXYsIHBvcyk7CiAJcmV0dXJuIGF0bWVsX3JlYWQxNihwcml2LT5kZXYsIERSKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGF0bWVsX3dtZW0xNihzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IHBvcywgdTE2IGRhdGEpCiB7Ci0gICAgICAgCWF0bWVsX3dyaXRlQVIocHJpdi0+ZGV2LCBwb3MpOwkKKwlhdG1lbF93cml0ZUFSKHByaXYtPmRldiwgcG9zKTsKIAlhdG1lbF93cml0ZTE2KHByaXYtPmRldiwgRFIsIGRhdGEpOwogfQogCkBAIC03MTAsMTEgKzcwOCwxMCBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgCisJZm9yIChpID0gMDsKIAkgICAgIGF0bWVsX3JtZW04KHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfRkxBR1NfT0ZGU0VULCBwcml2LT50eF9kZXNjX2hlYWQpKSA9PSBUWF9ET05FICYmCiAJCSAgICAgaSA8IHByaXYtPmhvc3RfaW5mby50eF9kZXNjX2NvdW50OwogCSAgICAgaSsrKSB7Ci0JCQogCQl1OCBzdGF0dXMgPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF90eChwcml2LCBUWF9ERVNDX1NUQVRVU19PRkZTRVQsIHByaXYtPnR4X2Rlc2NfaGVhZCkpOwogCQl1MTYgbXNkdV9zaXplID0gYXRtZWxfcm1lbTE2KHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfU0laRV9PRkZTRVQsIHByaXYtPnR4X2Rlc2NfaGVhZCkpOwogCQl1OCB0eXBlID0gYXRtZWxfcm1lbTgocHJpdiwgYXRtZWxfdHgocHJpdiwgVFhfREVTQ19QQUNLRVRfVFlQRV9PRkZTRVQsIHByaXYtPnR4X2Rlc2NfaGVhZCkpOwpAQCAtNzI4LDE2ICs3MjUsMTYgQEAKIAkJCXByaXYtPnR4X2J1ZmZfaGVhZCA9IDA7CiAJCWVsc2UKIAkJCXByaXYtPnR4X2J1ZmZfaGVhZCArPSBtc2R1X3NpemU7Ci0JCQkKKwogCQlpZiAocHJpdi0+dHhfZGVzY19oZWFkIDwgKHByaXYtPmhvc3RfaW5mby50eF9kZXNjX2NvdW50IC0gMSkpCi0JCQlwcml2LT50eF9kZXNjX2hlYWQrKyA7CQkJCQkKKwkJCXByaXYtPnR4X2Rlc2NfaGVhZCsrIDsKIAkJZWxzZQogCQkJcHJpdi0+dHhfZGVzY19oZWFkID0gMDsKLQkJCisKIAkJaWYgKHR5cGUgPT0gVFhfUEFDS0VUX1RZUEVfREFUQSkgewogCQkJaWYgKHN0YXR1cyA9PSBUWF9TVEFUVVNfU1VDQ0VTUykKIAkJCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQllbHNlIAorCQkJZWxzZQogCQkJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwogCQl9CkBAIC03NDgsMjEgKzc0NSwyMiBAQAogewogCXUxNiBib3R0b21fZnJlZSA9IHByaXYtPmhvc3RfaW5mby50eF9idWZmX3NpemUgLSBwcml2LT50eF9idWZmX3RhaWw7CiAKLQlpZiAocHJpdi0+dHhfZGVzY19mcmVlID09IDMgfHwgcHJpdi0+dHhfZnJlZV9tZW0gPCBsZW4pIAorCWlmIChwcml2LT50eF9kZXNjX2ZyZWUgPT0gMyB8fCBwcml2LT50eF9mcmVlX21lbSA8IGxlbikKIAkJcmV0dXJuIDA7Ci0JCisKIAlpZiAoYm90dG9tX2ZyZWUgPj0gbGVuKQogCQlyZXR1cm4gcHJpdi0+aG9zdF9pbmZvLnR4X2J1ZmZfcG9zICsgcHJpdi0+dHhfYnVmZl90YWlsOwotCQorCiAJaWYgKHByaXYtPnR4X2ZyZWVfbWVtIC0gYm90dG9tX2ZyZWUgPj0gbGVuKSB7CiAJCXByaXYtPnR4X2J1ZmZfdGFpbCA9IDA7CiAJCXJldHVybiBwcml2LT5ob3N0X2luZm8udHhfYnVmZl9wb3M7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHR4X3VwZGF0ZV9kZXNjcmlwdG9yKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBpbnQgaXNfYmNhc3QsIHUxNiBsZW4sIHUxNiBidWZmLCB1OCB0eXBlKQorc3RhdGljIHZvaWQgdHhfdXBkYXRlX2Rlc2NyaXB0b3Ioc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIGludCBpc19iY2FzdCwKKwkJCQkgdTE2IGxlbiwgdTE2IGJ1ZmYsIHU4IHR5cGUpCiB7CiAJYXRtZWxfd21lbTE2KHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfUE9TX09GRlNFVCwgcHJpdi0+dHhfZGVzY190YWlsKSwgYnVmZik7CiAJYXRtZWxfd21lbTE2KHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfU0laRV9PRkZTRVQsIHByaXYtPnR4X2Rlc2NfdGFpbCksIGxlbik7CkBAIC03NzUsOCArNzczLDggQEAKIAkJaW50IGNpcGhlcl90eXBlLCBjaXBoZXJfbGVuZ3RoOwogCQlpZiAoaXNfYmNhc3QpIHsKIAkJCWNpcGhlcl90eXBlID0gcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlOwotCQkJaWYgKGNpcGhlcl90eXBlID09IENJUEhFUl9TVUlURV9XRVBfNjQgfHwgCi0JCQkgICAgY2lwaGVyX3R5cGUgPT0gQ0lQSEVSX1NVSVRFX1dFUF8xMjggKQorCQkJaWYgKGNpcGhlcl90eXBlID09IENJUEhFUl9TVUlURV9XRVBfNjQgfHwKKwkJCSAgICBjaXBoZXJfdHlwZSA9PSBDSVBIRVJfU1VJVEVfV0VQXzEyOCkKIAkJCQljaXBoZXJfbGVuZ3RoID0gODsKIAkJCWVsc2UgaWYgKGNpcGhlcl90eXBlID09IENJUEhFUl9TVUlURV9US0lQKQogCQkJCWNpcGhlcl9sZW5ndGggPSAxMjsKQEAgLTc5MCw4ICs3ODgsOCBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJY2lwaGVyX3R5cGUgPSBwcml2LT5wYWlyd2lzZV9jaXBoZXJfc3VpdGU7Ci0JCQlpZiAoY2lwaGVyX3R5cGUgPT0gQ0lQSEVSX1NVSVRFX1dFUF82NCB8fCAKLQkJCSAgICBjaXBoZXJfdHlwZSA9PSBDSVBIRVJfU1VJVEVfV0VQXzEyOCApCisJCQlpZiAoY2lwaGVyX3R5cGUgPT0gQ0lQSEVSX1NVSVRFX1dFUF82NCB8fAorCQkJICAgIGNpcGhlcl90eXBlID09IENJUEhFUl9TVUlURV9XRVBfMTI4KQogCQkJCWNpcGhlcl9sZW5ndGggPSA4OwogCQkJZWxzZSBpZiAoY2lwaGVyX3R5cGUgPT0gQ0lQSEVSX1NVSVRFX1RLSVApCiAJCQkJY2lwaGVyX2xlbmd0aCA9IDEyOwpAQCAtODA0LDkgKzgwMiw5IEBACiAJCQkJY2lwaGVyX2xlbmd0aCA9IDA7CiAJCQl9CiAJCX0KLQkJCisKIAkJYXRtZWxfd21lbTgocHJpdiwgYXRtZWxfdHgocHJpdiwgVFhfREVTQ19DSVBIRVJfVFlQRV9PRkZTRVQsIHByaXYtPnR4X2Rlc2NfdGFpbCksCi0JCQkgICAgY2lwaGVyX3R5cGUpOwkKKwkJCSAgICBjaXBoZXJfdHlwZSk7CiAJCWF0bWVsX3dtZW04KHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfQ0lQSEVSX0xFTkdUSF9PRkZTRVQsIHByaXYtPnR4X2Rlc2NfdGFpbCksCiAJCQkgICAgY2lwaGVyX2xlbmd0aCk7CiAJfQpAQCAtODE1LDQ2ICs4MTMsNDYgQEAKIAlpZiAocHJpdi0+dHhfZGVzY19wcmV2aW91cyAhPSBwcml2LT50eF9kZXNjX3RhaWwpCiAJCWF0bWVsX3dtZW0zMihwcml2LCBhdG1lbF90eChwcml2LCBUWF9ERVNDX05FWFRfT0ZGU0VULCBwcml2LT50eF9kZXNjX3ByZXZpb3VzKSwgMCk7CiAJcHJpdi0+dHhfZGVzY19wcmV2aW91cyA9IHByaXYtPnR4X2Rlc2NfdGFpbDsKLQlpZiAocHJpdi0+dHhfZGVzY190YWlsIDwgKHByaXYtPmhvc3RfaW5mby50eF9kZXNjX2NvdW50IC0xICkpCisJaWYgKHByaXYtPnR4X2Rlc2NfdGFpbCA8IChwcml2LT5ob3N0X2luZm8udHhfZGVzY19jb3VudCAtIDEpKQogCQlwcml2LT50eF9kZXNjX3RhaWwrKzsKIAllbHNlCiAJCXByaXYtPnR4X2Rlc2NfdGFpbCA9IDA7CiAJcHJpdi0+dHhfZGVzY19mcmVlLS07CiAJcHJpdi0+dHhfZnJlZV9tZW0gLT0gbGVuOwotCiB9CiAKLXN0YXRpYyBpbnQgc3RhcnRfdHggKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIGhlYWRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiBidWZmLCBmcmFtZV9jdGwsIGxlbiA9IChFVEhfWkxFTiA8IHNrYi0+bGVuKSA/IHNrYi0+bGVuIDogRVRIX1pMRU47CiAJdTggU05BUF9SRkMxMDI0WzZdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OwotIAotCWlmIChwcml2LT5jYXJkICYmIHByaXYtPnByZXNlbnRfY2FsbGJhY2sgJiYgCisKKwlpZiAocHJpdi0+Y2FyZCAmJiBwcml2LT5wcmVzZW50X2NhbGxiYWNrICYmCiAJICAgICEoKnByaXYtPnByZXNlbnRfY2FsbGJhY2spKHByaXYtPmNhcmQpKSB7CiAJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCWlmIChwcml2LT5zdGF0aW9uX3N0YXRlICE9IFNUQVRJT05fU1RBVEVfUkVBRFkpIHsKIAkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQotCQorCiAJLyogZmlyc3QgZW5zdXJlIHRoZSB0aW1lciBmdW5jIGNhbm5vdCBydW4gKi8KLQlzcGluX2xvY2tfYmgoJnByaXYtPnRpbWVybG9jayk7IAorCXNwaW5fbG9ja19iaCgmcHJpdi0+dGltZXJsb2NrKTsKIAkvKiB0aGVuIHN0b3AgdGhlIGhhcmR3YXJlIElTUiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pcnFsb2NrLCBmbGFncyk7IAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pcnFsb2NrLCBmbGFncyk7CiAJLyogbmIgZG9pbmcgdGhlIGFib3ZlIGluIHRoZSBvcHBvc2l0ZSBvcmRlciB3aWxsIGRlYWRsb2NrICovCi0JCisKIAkvKiBUaGUgV2lyZWxlc3MgSGVhZGVyIGlzIDMwIGJ5dGVzLiBJbiB0aGUgRXRoZXJuZXQgcGFja2V0IHdlICJjdXQiIHRoZQotCSAgIDEyIGZpcnN0IGJ5dGVzIChjb250YWluaW5nIERBL1NBKSBhbmQgcHV0IHRoZW0gaW4gdGhlIGFwcHJvcHJpYXRlIGZpZWxkcyBvZgotCSAgIHRoZSBXaXJlbGVzcyBIZWFkZXIuIFRodXMgdGhlIHBhY2tldCBsZW5ndGggaXMgdGhlbiB0aGUgaW5pdGlhbCArIDE4ICgrMzAtMTIpICovCi0JCisJICAgMTIgZmlyc3QgYnl0ZXMgKGNvbnRhaW5pbmcgREEvU0EpIGFuZCBwdXQgdGhlbSBpbiB0aGUgYXBwcm9wcmlhdGUKKwkgICBmaWVsZHMgb2YgdGhlIFdpcmVsZXNzIEhlYWRlci4gVGh1cyB0aGUgcGFja2V0IGxlbmd0aCBpcyB0aGVuIHRoZQorCSAgIGluaXRpYWwgKyAxOCAoKzMwLTEyKSAqLworCiAJaWYgKCEoYnVmZiA9IGZpbmRfdHhfYnVmZihwcml2LCBsZW4gKyAxOCkpKSB7CiAJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aXJxbG9jaywgZmxhZ3MpOwpAQCAtODYyLDcgKzg2MCw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJcmV0dXJuIDE7CiAJfQotCQorCiAJZnJhbWVfY3RsID0gSUVFRTgwMjExX0ZUWVBFX0RBVEE7CiAJaGVhZGVyLmR1cmF0aW9uX2lkID0gMDsKIAloZWFkZXIuc2VxX2N0bCA9IDA7CkBAIC04NzgsNyArODc2LDcgQEAKIAkJbWVtY3B5KCZoZWFkZXIuYWRkcjIsIGRldi0+ZGV2X2FkZHIsIDYpOwogCQltZW1jcHkoJmhlYWRlci5hZGRyMywgc2tiLT5kYXRhLCA2KTsKIAl9Ci0JCisKIAlpZiAocHJpdi0+dXNlX3dwYSkKIAkJbWVtY3B5KCZoZWFkZXIuYWRkcjQsIFNOQVBfUkZDMTAyNCwgNik7CiAKQEAgLTg4OCwyNyArODg2LDI3IEBACiAJLyogQ29weSB0aGUgcGFja2V0IHNhbnMgaXRzIDgwMi4zIGhlYWRlciBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBiZWVuIHJlcGxhY2VkICovCiAJYXRtZWxfY29weV90b19jYXJkKGRldiwgYnVmZiArIERBVEFfRlJBTUVfV1NfSEVBREVSX1NJWkUsIHNrYi0+ZGF0YSArIDEyLCBsZW4gLSAxMik7CiAJcHJpdi0+dHhfYnVmZl90YWlsICs9IGxlbiAtIDEyICsgREFUQV9GUkFNRV9XU19IRUFERVJfU0laRTsKLQkKKwogCS8qIGxvdyBiaXQgb2YgZmlyc3QgYnl0ZSBvZiBkZXN0aW5hdGlvbiB0ZWxscyB1cyBpZiBicm9hZGNhc3QgKi8KIAl0eF91cGRhdGVfZGVzY3JpcHRvcihwcml2LCAqKHNrYi0+ZGF0YSkgJiAweDAxLCBsZW4gKyAxOCwgYnVmZiwgVFhfUEFDS0VUX1RZUEVfREFUQSk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwotCQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aXJxbG9jaywgZmxhZ3MpOwogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50aW1lcmxvY2spOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkKLQlyZXR1cm4gMDsJCisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRtZWxfdHJhbnNtaXRfbWFuYWdlbWVudF9mcmFtZShzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgCitzdGF0aWMgdm9pZCBhdG1lbF90cmFuc21pdF9tYW5hZ2VtZW50X2ZyYW1lKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LAogCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKIAkJCQkJICAgIHU4ICpib2R5LCBpbnQgYm9keV9sZW4pCiB7CiAJdTE2IGJ1ZmY7Ci0JaW50IGxlbiA9ICBNR01UX0ZSQU1FX0JPRFlfT0ZGU0VUICsgYm9keV9sZW47Ci0JCi0JaWYgKCEoYnVmZiA9IGZpbmRfdHhfYnVmZihwcml2LCBsZW4pKSkgCisJaW50IGxlbiA9IE1HTVRfRlJBTUVfQk9EWV9PRkZTRVQgKyBib2R5X2xlbjsKKworCWlmICghKGJ1ZmYgPSBmaW5kX3R4X2J1ZmYocHJpdiwgbGVuKSkpCiAJCXJldHVybjsKIAogCWF0bWVsX2NvcHlfdG9fY2FyZChwcml2LT5kZXYsIGJ1ZmYsICh1OCAqKWhlYWRlciwgTUdNVF9GUkFNRV9CT0RZX09GRlNFVCk7CkBAIC05MTYsMjQgKzkxNCwyNSBAQAogCXByaXYtPnR4X2J1ZmZfdGFpbCArPSBsZW47CiAJdHhfdXBkYXRlX2Rlc2NyaXB0b3IocHJpdiwgaGVhZGVyLT5hZGRyMVswXSAmIDB4MDEsIGxlbiwgYnVmZiwgVFhfUEFDS0VUX1RZUEVfTUdNVCk7CiB9Ci0JCi1zdGF0aWMgdm9pZCBmYXN0X3J4X3BhdGgoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsIAorCitzdGF0aWMgdm9pZCBmYXN0X3J4X3BhdGgoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsCisJCQkgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKIAkJCSB1MTYgbXNkdV9zaXplLCB1MTYgcnhfcGFja2V0X2xvYywgdTMyIGNyYykKIHsKIAkvKiBmYXN0IHBhdGg6IHVuZnJhZ21lbnRlZCBwYWNrZXQgY29weSBkaXJlY3RseSBpbnRvIHNrYnVmICovCi0JdTggbWFjNFs2XTsgCi0Jc3RydWN0IHNrX2J1ZmYgCSpza2I7CisJdTggbWFjNFs2XTsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwogCXVuc2lnbmVkIGNoYXIgKnNrYnA7Ci0JCisKIAkvKiBnZXQgdGhlIGZpbmFsLCBtYWMgNCBoZWFkZXIgZmllbGQsIHRoaXMgdGVsbHMgdXMgZW5jYXBzdWxhdGlvbiAqLwogCWF0bWVsX2NvcHlfdG9faG9zdChwcml2LT5kZXYsIG1hYzQsIHJ4X3BhY2tldF9sb2MgKyAyNCwgNik7CiAJbXNkdV9zaXplIC09IDY7Ci0JCisKIAlpZiAocHJpdi0+ZG9fcnhfY3JjKSB7CiAJCWNyYyA9IGNyYzMyX2xlKGNyYywgbWFjNCwgNik7CiAJCW1zZHVfc2l6ZSAtPSA0OwogCX0KLQkKKwogCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IobXNkdV9zaXplICsgMTQpKSkgewogCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKQEAgLTk0Miw3ICs5NDEsNyBAQAogCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJc2ticCA9IHNrYl9wdXQoc2tiLCBtc2R1X3NpemUgKyAxMik7CiAJYXRtZWxfY29weV90b19ob3N0KHByaXYtPmRldiwgc2ticCArIDEyLCByeF9wYWNrZXRfbG9jICsgMzAsIG1zZHVfc2l6ZSk7Ci0JCisKIAlpZiAocHJpdi0+ZG9fcnhfY3JjKSB7CiAJCXUzMiBuZXRjcmM7CiAJCWNyYyA9IGNyYzMyX2xlKGNyYywgc2ticCArIDEyLCBtc2R1X3NpemUpOwpAQCAtOTUzLDI0ICs5NTIsMjUgQEAKIAkJCXJldHVybjsKIAkJfQogCX0KLQkKKwogCW1lbWNweShza2JwLCBoZWFkZXItPmFkZHIxLCA2KTsgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCWlmIChsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpIAorCWlmIChsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpCiAJCW1lbWNweSgmc2ticFs2XSwgaGVhZGVyLT5hZGRyMywgNik7CiAJZWxzZQogCQltZW1jcHkoJnNrYnBbNl0sIGhlYWRlci0+YWRkcjIsIDYpOyAvKiBzb3VyY2UgYWRkcmVzcyAqLwotCQotCXByaXYtPmRldi0+bGFzdF9yeD1qaWZmaWVzOworCisJcHJpdi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAlza2ItPmRldiA9IHByaXYtPmRldjsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcml2LT5kZXYpOwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsJCisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCW5ldGlmX3J4KHNrYik7CiAJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gMTIgKyBtc2R1X3NpemU7CiAJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwogfQogCiAvKiBUZXN0IHRvIHNlZSBpZiB0aGUgcGFja2V0IGluIGNhcmQgbWVtb3J5IGF0IHBhY2tldF9sb2MgaGFzIGEgdmFsaWQgQ1JDCi0gICBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHRoaXMgaXMgc2xvdzogaXQgaXMgb25seSB1c2VkIHRvIHByb2JsZSB0aGUgZmlyc3QgZmV3IHBhY2tldHMuICovCisgICBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHRoaXMgaXMgc2xvdzogaXQgaXMgb25seSB1c2VkIHRvIHByb2JsZSB0aGUgZmlyc3QgZmV3CisgICBwYWNrZXRzLiAqLwogc3RhdGljIGludCBwcm9iZV9jcmMoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHUxNiBwYWNrZXRfbG9jLCB1MTYgbXNkdV9zaXplKQogewogCWludCBpID0gbXNkdV9zaXplIC0gNDsKQEAgLTk4MCw3ICs5ODAsNyBAQAogCQlyZXR1cm4gMDsKIAogCWF0bWVsX2NvcHlfdG9faG9zdChwcml2LT5kZXYsICh2b2lkICopJm5ldGNyYywgcGFja2V0X2xvYyArIGksIDQpOwotCQorCiAJYXRtZWxfd3JpdGVBUihwcml2LT5kZXYsIHBhY2tldF9sb2MpOwogCXdoaWxlIChpLS0pIHsKIAkJdTggb2N0ZXQgPSBhdG1lbF9yZWFkOChwcml2LT5kZXYsIERSKTsKQEAgLTk5MCwyMCArOTkwLDIyIEBACiAJcmV0dXJuIChjcmMgXiAweGZmZmZmZmZmKSA9PSBuZXRjcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGZyYWdfcnhfcGF0aChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwgCi0JCQkgdTE2IG1zZHVfc2l6ZSwgdTE2IHJ4X3BhY2tldF9sb2MsIHUzMiBjcmMsIHUxNiBzZXFfbm8sIHU4IGZyYWdfbm8sIGludCBtb3JlX2ZyYWdzKQorc3RhdGljIHZvaWQgZnJhZ19yeF9wYXRoKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LAorCQkJIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCisJCQkgdTE2IG1zZHVfc2l6ZSwgdTE2IHJ4X3BhY2tldF9sb2MsIHUzMiBjcmMsIHUxNiBzZXFfbm8sCisJCQkgdTggZnJhZ19ubywgaW50IG1vcmVfZnJhZ3MpCiB7Ci0JdTggbWFjNFs2XTsgCisJdTggbWFjNFs2XTsKIAl1OCBzb3VyY2VbNl07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWlmIChsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpIAorCWlmIChsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpCiAJCW1lbWNweShzb3VyY2UsIGhlYWRlci0+YWRkcjMsIDYpOwogCWVsc2UKLQkJbWVtY3B5KHNvdXJjZSwgaGVhZGVyLT5hZGRyMiwgNik7IAotCQorCQltZW1jcHkoc291cmNlLCBoZWFkZXItPmFkZHIyLCA2KTsKKwogCXJ4X3BhY2tldF9sb2MgKz0gMjQ7IC8qIHNraXAgaGVhZGVyICovCi0JCisKIAlpZiAocHJpdi0+ZG9fcnhfY3JjKQogCQltc2R1X3NpemUgLT0gNDsKIApAQCAtMTAxMiwxNiArMTAxNCwxNiBAQAogCQltc2R1X3NpemUgLT0gNjsKIAkJcnhfcGFja2V0X2xvYyArPSA2OwogCi0JCWlmIChwcml2LT5kb19yeF9jcmMpIAorCQlpZiAocHJpdi0+ZG9fcnhfY3JjKQogCQkJY3JjID0gY3JjMzJfbGUoY3JjLCBtYWM0LCA2KTsKLQkgICAgICAgCisKIAkJcHJpdi0+ZnJhZ19zZXEgPSBzZXFfbm87CiAJCXByaXYtPmZyYWdfbm8gPSAxOwogCQlwcml2LT5mcmFnX2xlbiA9IG1zZHVfc2l6ZTsKLQkJbWVtY3B5KHByaXYtPmZyYWdfc291cmNlLCBzb3VyY2UsIDYpOyAKKwkJbWVtY3B5KHByaXYtPmZyYWdfc291cmNlLCBzb3VyY2UsIDYpOwogCQltZW1jcHkoJnByaXYtPnJ4X2J1Zls2XSwgc291cmNlLCA2KTsKIAkJbWVtY3B5KHByaXYtPnJ4X2J1ZiwgaGVhZGVyLT5hZGRyMSwgNik7Ci0JCQkJCisKIAkJYXRtZWxfY29weV90b19ob3N0KHByaXYtPmRldiwgJnByaXYtPnJ4X2J1ZlsxMl0sIHJ4X3BhY2tldF9sb2MsIG1zZHVfc2l6ZSk7CiAKIAkJaWYgKHByaXYtPmRvX3J4X2NyYykgewpAQCAtMTAzMywxNyArMTAzNSwxNyBAQAogCQkJCW1lbXNldChwcml2LT5mcmFnX3NvdXJjZSwgMHhmZiwgNik7CiAJCQl9CiAJCX0KLQkJCisKIAl9IGVsc2UgaWYgKHByaXYtPmZyYWdfbm8gPT0gZnJhZ19ubyAmJgogCQkgICBwcml2LT5mcmFnX3NlcSA9PSBzZXFfbm8gJiYKIAkJICAgbWVtY21wKHByaXYtPmZyYWdfc291cmNlLCBzb3VyY2UsIDYpID09IDApIHsKLQkJCi0JCWF0bWVsX2NvcHlfdG9faG9zdChwcml2LT5kZXYsICZwcml2LT5yeF9idWZbMTIgKyBwcml2LT5mcmFnX2xlbl0sIAorCisJCWF0bWVsX2NvcHlfdG9faG9zdChwcml2LT5kZXYsICZwcml2LT5yeF9idWZbMTIgKyBwcml2LT5mcmFnX2xlbl0sCiAJCQkJICAgcnhfcGFja2V0X2xvYywgbXNkdV9zaXplKTsKIAkJaWYgKHByaXYtPmRvX3J4X2NyYykgewogCQkJdTMyIG5ldGNyYzsKLQkJCWNyYyA9IGNyYzMyX2xlKGNyYywgCi0JCQkJICAgICAgICZwcml2LT5yeF9idWZbMTIgKyBwcml2LT5mcmFnX2xlbl0sIAorCQkJY3JjID0gY3JjMzJfbGUoY3JjLAorCQkJCSAgICAgICAmcHJpdi0+cnhfYnVmWzEyICsgcHJpdi0+ZnJhZ19sZW5dLAogCQkJCSAgICAgICBtc2R1X3NpemUpOwogCQkJYXRtZWxfY29weV90b19ob3N0KHByaXYtPmRldiwgKHZvaWQgKikmbmV0Y3JjLCByeF9wYWNrZXRfbG9jICsgbXNkdV9zaXplLCA0KTsKIAkJCWlmICgoY3JjIF4gMHhmZmZmZmZmZikgIT0gbmV0Y3JjKSB7CkBAIC0xMDUyLDcgKzEwNTQsNyBAQAogCQkJCW1vcmVfZnJhZ3MgPSAxOyAvKiBkb24ndCBzZW5kIGJyb2tlbiBhc3NlbWJseSAqLwogCQkJfQogCQl9Ci0JCQorCiAJCXByaXYtPmZyYWdfbGVuICs9IG1zZHVfc2l6ZTsKIAkJcHJpdi0+ZnJhZ19ubysrOwogCkBAIC0xMDYyLDYwICsxMDY0LDYwIEBACiAJCQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJfSBlbHNlIHsKIAkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCQkJCW1lbWNweShza2JfcHV0KHNrYiwgcHJpdi0+ZnJhZ19sZW4gKyAxMiksIAorCQkJCW1lbWNweShza2JfcHV0KHNrYiwgcHJpdi0+ZnJhZ19sZW4gKyAxMiksCiAJCQkJICAgICAgIHByaXYtPnJ4X2J1ZiwKIAkJCQkgICAgICAgcHJpdi0+ZnJhZ19sZW4gKyAxMik7CiAJCQkJcHJpdi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCQlza2ItPmRldiA9IHByaXYtPmRldjsKIAkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcml2LT5kZXYpOwotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsJCisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcHJpdi0+ZnJhZ19sZW4gKyAxMjsKIAkJCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQl9CiAJCX0KLQkJCiAJfSBlbHNlCiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLmZyYWdtZW50Kys7CiB9Ci0JCQorCiBzdGF0aWMgdm9pZCByeF9kb25lX2lycShzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciBoZWFkZXI7Ci0JCi0JZm9yIChpID0gMDsgCisKKwlmb3IgKGkgPSAwOwogCSAgICAgYXRtZWxfcm1lbTgocHJpdiwgYXRtZWxfcngocHJpdiwgUlhfREVTQ19GTEFHU19PRkZTRVQsIHByaXYtPnJ4X2Rlc2NfaGVhZCkpID09IFJYX0RFU0NfRkxBR19WQUxJRCAmJgogCQkgICAgIGkgPCBwcml2LT5ob3N0X2luZm8ucnhfZGVzY19jb3VudDsKIAkgICAgIGkrKykgewotCQkJCQorCiAJCXUxNiBtc2R1X3NpemUsIHJ4X3BhY2tldF9sb2MsIGZyYW1lX2N0bCwgc2VxX2NvbnRyb2w7CiAJCXU4IHN0YXR1cyA9IGF0bWVsX3JtZW04KHByaXYsIGF0bWVsX3J4KHByaXYsIFJYX0RFU0NfU1RBVFVTX09GRlNFVCwgcHJpdi0+cnhfZGVzY19oZWFkKSk7CiAJCXUzMiBjcmMgPSAweGZmZmZmZmZmOwotCQkKKwogCQlpZiAoc3RhdHVzICE9IFJYX1NUQVRVU19TVUNDRVNTKSB7CiAJCQlpZiAoc3RhdHVzID09IDB4YzEpIC8qIGRldGVybWluZWQgYnkgZXhwZXJpbWVudCAqLwogCQkJCXByaXYtPndzdGF0cy5kaXNjYXJkLm53aWQrKzsKIAkJCWVsc2UKLQkJCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsgCisJCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlnb3RvIG5leHQ7CiAJCX0KIAogCQltc2R1X3NpemUgPSBhdG1lbF9ybWVtMTYocHJpdiwgYXRtZWxfcngocHJpdiwgUlhfREVTQ19NU0RVX1NJWkVfT0ZGU0VULCBwcml2LT5yeF9kZXNjX2hlYWQpKTsKIAkJcnhfcGFja2V0X2xvYyA9IGF0bWVsX3JtZW0xNihwcml2LCBhdG1lbF9yeChwcml2LCBSWF9ERVNDX01TRFVfUE9TX09GRlNFVCwgcHJpdi0+cnhfZGVzY19oZWFkKSk7Ci0JCQorCiAJCWlmIChtc2R1X3NpemUgPCAzMCkgewotCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7IAorCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlnb3RvIG5leHQ7CiAJCX0KLQkJCisKIAkJLyogR2V0IGhlYWRlciBhcyBmYXIgYXMgZW5kIG9mIHNlcV9jdGwgKi8KIAkJYXRtZWxfY29weV90b19ob3N0KHByaXYtPmRldiwgKGNoYXIgKikmaGVhZGVyLCByeF9wYWNrZXRfbG9jLCAyNCk7CiAJCWZyYW1lX2N0bCA9IGxlMTZfdG9fY3B1KGhlYWRlci5mcmFtZV9jdGwpOwogCQlzZXFfY29udHJvbCA9IGxlMTZfdG9fY3B1KGhlYWRlci5zZXFfY3RsKTsKIAotCQkvKiBwcm9iZSBmb3IgQ1JDIHVzZSBoZXJlIGlmIG5lZWRlZCAgb25jZSBmaXZlIHBhY2tldHMgaGF2ZSBhcnJpdmVkIHdpdGgKLQkJICAgdGhlIHNhbWUgY3JjIHN0YXR1cywgd2UgYXNzdW1lIHdlIGtub3cgd2hhdCdzIGhhcHBlbmluZyBhbmQgc3RvcCBwcm9iaW5nICovCisJCS8qIHByb2JlIGZvciBDUkMgdXNlIGhlcmUgaWYgbmVlZGVkICBvbmNlIGZpdmUgcGFja2V0cyBoYXZlCisJCSAgIGFycml2ZWQgd2l0aCB0aGUgc2FtZSBjcmMgc3RhdHVzLCB3ZSBhc3N1bWUgd2Uga25vdyB3aGF0J3MKKwkJICAgaGFwcGVuaW5nIGFuZCBzdG9wIHByb2JpbmcgKi8KIAkJaWYgKHByaXYtPnByb2JlX2NyYykgewogCQkJaWYgKCFwcml2LT53ZXBfaXNfb24gfHwgIShmcmFtZV9jdGwgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSB7CiAJCQkJcHJpdi0+ZG9fcnhfY3JjID0gcHJvYmVfY3JjKHByaXYsIHJ4X3BhY2tldF9sb2MsIG1zZHVfc2l6ZSk7CkBAIC0xMTMwLDM0ICsxMTMyLDMzIEBACiAJCQkJCXByaXYtPnByb2JlX2NyYyA9IDA7CiAJCQl9CiAJCX0KLQkJICAgIAorCiAJCS8qIGRvbid0IENSQyBoZWFkZXIgd2hlbiBXRVAgaW4gdXNlICovCiAJCWlmIChwcml2LT5kb19yeF9jcmMgJiYgKCFwcml2LT53ZXBfaXNfb24gfHwgIShmcmFtZV9jdGwgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSkgewogCQkJY3JjID0gY3JjMzJfbGUoMHhmZmZmZmZmZiwgKHVuc2lnbmVkIGNoYXIgKikmaGVhZGVyLCAyNCk7CiAJCX0KIAkJbXNkdV9zaXplIC09IDI0OyAvKiBoZWFkZXIgKi8KIAotCQlpZiAoKGZyYW1lX2N0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgeyAKLQkJCQorCQlpZiAoKGZyYW1lX2N0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgewogCQkJaW50IG1vcmVfZnJhZ21lbnRzID0gZnJhbWVfY3RsICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTOwogCQkJdTggcGFja2V0X2ZyYWdtZW50X25vID0gc2VxX2NvbnRyb2wgJiBJRUVFODAyMTFfU0NUTF9GUkFHOwogCQkJdTE2IHBhY2tldF9zZXF1ZW5jZV9ubyA9IChzZXFfY29udHJvbCAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKLQkJCQotCQkJaWYgKCFtb3JlX2ZyYWdtZW50cyAmJiBwYWNrZXRfZnJhZ21lbnRfbm8gPT0gMCApIHsKKworCQkJaWYgKCFtb3JlX2ZyYWdtZW50cyAmJiBwYWNrZXRfZnJhZ21lbnRfbm8gPT0gMCkgewogCQkJCWZhc3RfcnhfcGF0aChwcml2LCAmaGVhZGVyLCBtc2R1X3NpemUsIHJ4X3BhY2tldF9sb2MsIGNyYyk7CiAJCQl9IGVsc2UgewogCQkJCWZyYWdfcnhfcGF0aChwcml2LCAmaGVhZGVyLCBtc2R1X3NpemUsIHJ4X3BhY2tldF9sb2MsIGNyYywKIAkJCQkJICAgICBwYWNrZXRfc2VxdWVuY2Vfbm8sIHBhY2tldF9mcmFnbWVudF9ubywgbW9yZV9mcmFnbWVudHMpOwogCQkJfQogCQl9Ci0JCQorCiAJCWlmICgoZnJhbWVfY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSB7CiAJCQkvKiBjb3B5IHJlc3Qgb2YgcGFja2V0IGludG8gYnVmZmVyICovCiAJCQlhdG1lbF9jb3B5X3RvX2hvc3QocHJpdi0+ZGV2LCAodW5zaWduZWQgY2hhciAqKSZwcml2LT5yeF9idWYsIHJ4X3BhY2tldF9sb2MgKyAyNCwgbXNkdV9zaXplKTsKLQkJCQorCiAJCQkvKiB3ZSB1c2UgdGhlIHNhbWUgYnVmZmVyIGZvciBmcmFnIHJlYXNzZW1ibHkgYW5kIGNvbnRyb2wgcGFja2V0cyAqLwogCQkJbWVtc2V0KHByaXYtPmZyYWdfc291cmNlLCAweGZmLCA2KTsKLQkJCQorCiAJCQlpZiAocHJpdi0+ZG9fcnhfY3JjKSB7CiAJCQkJLyogbGFzdCA0IG9jdGV0cyBpcyBjcmMgKi8KIAkJCQltc2R1X3NpemUgLT0gNDsKQEAgLTExNzAsMTggKzExNzEsMTggQEAKIAogCQkJYXRtZWxfbWFuYWdlbWVudF9mcmFtZShwcml2LCAmaGVhZGVyLCBtc2R1X3NpemUsCiAJCQkJCSAgICAgICBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9yeChwcml2LCBSWF9ERVNDX1JTU0lfT0ZGU0VULCBwcml2LT5yeF9kZXNjX2hlYWQpKSk7Ci0JCX0gCisJCX0KIAotCW5leHQ6CituZXh0OgogCQkvKiByZWxlYXNlIGRlc2NyaXB0b3IgKi8KLQkJYXRtZWxfd21lbTgocHJpdiwgYXRtZWxfcngocHJpdiwgUlhfREVTQ19GTEFHU19PRkZTRVQsIHByaXYtPnJ4X2Rlc2NfaGVhZCksIFJYX0RFU0NfRkxBR19DT05TVU1FRCk7ICAKLQkJCisJCWF0bWVsX3dtZW04KHByaXYsIGF0bWVsX3J4KHByaXYsIFJYX0RFU0NfRkxBR1NfT0ZGU0VULCBwcml2LT5yeF9kZXNjX2hlYWQpLCBSWF9ERVNDX0ZMQUdfQ09OU1VNRUQpOworCiAJCWlmIChwcml2LT5yeF9kZXNjX2hlYWQgPCAocHJpdi0+aG9zdF9pbmZvLnJ4X2Rlc2NfY291bnQgLSAxKSkKLQkJCXByaXYtPnJ4X2Rlc2NfaGVhZCsrOwkJCQkJCisJCQlwcml2LT5yeF9kZXNjX2hlYWQrKzsKIAkJZWxzZQogCQkJcHJpdi0+cnhfZGVzY19oZWFkID0gMDsKIAl9Ci19CQorfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2VydmljZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTExODksNyArMTE5MCw3IEBACiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IGlzcjsKIAlpbnQgaSA9IC0xOwotCXN0YXRpYyB1OCBpcnFfb3JkZXJbXSA9IHsgCisJc3RhdGljIHU4IGlycV9vcmRlcltdID0gewogCQlJU1JfT1VUX09GX1JBTkdFLAogCQlJU1JfUnhDT01QTEVURSwKIAkJSVNSX1R4Q09NUExFVEUsCkBAIC0xMTk5LDIwICsxMjAwLDE5IEBACiAJCUlTUl9JQlNTX01FUkdFLAogCQlJU1JfR0VORVJJQ19JUlEKIAl9OwotCQkKIAotCWlmIChwcml2LT5jYXJkICYmIHByaXYtPnByZXNlbnRfY2FsbGJhY2sgJiYgCisJaWYgKHByaXYtPmNhcmQgJiYgcHJpdi0+cHJlc2VudF9jYWxsYmFjayAmJgogCSAgICAhKCpwcml2LT5wcmVzZW50X2NhbGxiYWNrKShwcml2LT5jYXJkKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJLyogSW4gdGhpcyBzdGF0ZSB1cHBlci1sZXZlbCBjb2RlIGFzc3VtZXMgaXQgY2FuIG1lc3Mgd2l0aAogCSAgIHRoZSBjYXJkIHVuaGFtcGVyZWQgYnkgaW50ZXJydXB0cyB3aGljaCBtYXkgY2hhbmdlIHJlZ2lzdGVyIHN0YXRlLgogCSAgIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUgY2FyZCBzaG91bGRuJ3QgZ2VuZXJhdGUgaW50ZXJydXB0cwotCSAgIHRoZSBpbnR1cnJ1cHQgbGluZSBtYXkgYmUgc2hhcmVkLiBUaGlzIGFsbG93cyBjYXJkIHNldHVwIAorCSAgIHRoZSBpbnR1cnJ1cHQgbGluZSBtYXkgYmUgc2hhcmVkLiBUaGlzIGFsbG93cyBjYXJkIHNldHVwCiAJICAgdG8gZ28gb24gd2l0aG91dCBkaXNhYmxpbmcgaW50ZXJydXB0cyBmb3IgYSBsb25nIHRpbWUuICovCiAJaWYgKHByaXYtPnN0YXRpb25fc3RhdGUgPT0gU1RBVElPTl9TVEFURV9ET1dOKQogCQlyZXR1cm4gSVJRX05PTkU7Ci0gICAgIAkKKwogCWF0bWVsX2NsZWFyX2djcihkZXYsIEdDUl9FTklOVCk7IC8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCiAJd2hpbGUgKDEpIHsKQEAgLTEyMjEsMzYgKzEyMjEsMzYgQEAKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogZmFpbGVkIHRvIGNvbnRhY3QgTUFDLlxuIiwgZGV2LT5uYW1lKTsKIAkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQotCQkKKwogCQlpc3IgPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9JTlRfU1RBVFVTX09GRlNFVCkpOwogCQlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9MT0NLT1VUX01BQ19PRkZTRVQpLCAwKTsKLQkJCisKIAkJaWYgKCFpc3IpIHsKIAkJCWF0bWVsX3NldF9nY3IoZGV2LCBHQ1JfRU5JTlQpOyAvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQkJcmV0dXJuIGkgPT0gLTEgPyBJUlFfTk9ORSA6IElSUV9IQU5ETEVEOwogCQl9Ci0JCQorCiAJCWF0bWVsX3NldF9nY3IoZGV2LCBHQ1JfQUNLSU5UKTsgLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCi0JCQorCiAJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXJxX29yZGVyKS9zaXplb2YodTgpOyBpKyspCiAJCQlpZiAoaXNyICYgaXJxX29yZGVyW2ldKQogCQkJCWJyZWFrOwotCQkKKwogCQlpZiAoIWF0bWVsX2xvY2tfbWFjKHByaXYpKSB7CiAJCQkvKiBmYWlsZWQgdG8gY29udGFjdCBjYXJkICovCiAJCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6IGZhaWxlZCB0byBjb250YWN0IE1BQy5cbiIsIGRldi0+bmFtZSk7CiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCX0KLQkJCisKIAkJaXNyID0gYXRtZWxfcm1lbTgocHJpdiwgYXRtZWxfaGkocHJpdiwgSUZBQ0VfSU5UX1NUQVRVU19PRkZTRVQpKTsKIAkJaXNyIF49IGlycV9vcmRlcltpXTsKIAkJYXRtZWxfd21lbTgocHJpdiwgYXRtZWxfaGkocHJpdiwgSUZBQ0VfSU5UX1NUQVRVU19PRkZTRVQpLCBpc3IpOwogCQlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9MT0NLT1VUX01BQ19PRkZTRVQpLCAwKTsKLQkJCisKIAkJc3dpdGNoIChpcnFfb3JkZXJbaV0pIHsKLQkJCQotCQljYXNlIElTUl9PVVRfT0ZfUkFOR0U6IAotCQkJaWYgKHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfSU5GUkEgJiYgCisKKwkJY2FzZSBJU1JfT1VUX09GX1JBTkdFOgorCQkJaWYgKHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfSU5GUkEgJiYKIAkJCSAgICBwcml2LT5zdGF0aW9uX3N0YXRlID09IFNUQVRJT05fU1RBVEVfUkVBRFkpIHsKIAkJCQlwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgPSAwOwogCQkJCWF0bWVsX3NjYW4ocHJpdiwgMSk7CkBAIC0xMjYxLDI0ICsxMjYxLDI0IEBACiAJCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBJU1JfUnhDT01QTEVURToKLQkJCXJ4X2RvbmVfaXJxKHByaXYpOyAKKwkJCXJ4X2RvbmVfaXJxKHByaXYpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIElTUl9UeENPTVBMRVRFOgotCQkJdHhfZG9uZV9pcnEocHJpdik7IAorCQkJdHhfZG9uZV9pcnEocHJpdik7CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgSVNSX0ZBVEFMX0VSUk9SOgogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiAqKiogRkFUQUwgZXJyb3IgaW50ZXJydXB0ICoqKlxuIiwgZGV2LT5uYW1lKTsKIAkJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfTUdNVF9FUlJPUik7CiAJCQlicmVhazsKLQkJCQotCQljYXNlIElTUl9DT01NQU5EX0NPTVBMRVRFOiAKKworCQljYXNlIElTUl9DT01NQU5EX0NPTVBMRVRFOgogCQkJYXRtZWxfY29tbWFuZF9pcnEocHJpdik7CiAJCQlicmVhazsKIAogCQljYXNlIElTUl9JQlNTX01FUkdFOgotCQkJYXRtZWxfZ2V0X21pYihwcml2LCBNYWNfTWdtdF9NaWJfVHlwZSwgTUFDX01HTVRfTUlCX0NVUl9CU1NJRF9QT1MsIAorCQkJYXRtZWxfZ2V0X21pYihwcml2LCBNYWNfTWdtdF9NaWJfVHlwZSwgTUFDX01HTVRfTUlCX0NVUl9CU1NJRF9QT1MsCiAJCQkJICAgICAgcHJpdi0+Q3VycmVudEJTU0lELCA2KTsKIAkJCS8qIFRoZSBXUEEgc3R1ZmYgY2FyZXMgYWJvdXQgdGhlIGN1cnJlbnQgQVAgYWRkcmVzcyAqLwogCQkJaWYgKHByaXYtPnVzZV93cGEpCkBAIC0xMjg4LDI0ICsxMjg4LDIzIEBACiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogR2VuZXJpY19pcnEgcmVjZWl2ZWQuXG4iLCBkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KLQl9CQorCX0KIH0KIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF0bWVsX2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXRtZWxfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiAmcHJpdi0+c3RhdHM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqYXRtZWxfZ2V0X3dpcmVsZXNzX3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICphdG1lbF9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkvKiB1cGRhdGUgdGhlIGxpbmsgcXVhbGl0eSBoZXJlIGluIGNhc2Ugd2UgYXJlIHNlZWluZyBubyBiZWFjb25zIAorCS8qIHVwZGF0ZSB0aGUgbGluayBxdWFsaXR5IGhlcmUgaW4gY2FzZSB3ZSBhcmUgc2VlaW5nIG5vIGJlYWNvbnMKIAkgICBhdCBhbGwgdG8gZHJpdmUgdGhlIHByb2Nlc3MgKi8KIAlhdG1lbF9zbW9vdGhfcXVhbChwcml2KTsKLQkKKwogCXByaXYtPndzdGF0cy5zdGF0dXMgPSBwcml2LT5zdGF0aW9uX3N0YXRlOwogCiAJaWYgKHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfSU5GUkEpIHsKQEAgLTEzMjgsOCArMTMyNyw4IEBACiAJCQkJCXwgSVdfUVVBTF9OT0lTRV9JTlZBTElEOwogCQlwcml2LT53c3RhdHMubWlzcy5iZWFjb24gPSAwOwogCX0KLQkKLQlyZXR1cm4gKCZwcml2LT53c3RhdHMpOworCisJcmV0dXJuICZwcml2LT53c3RhdHM7CiB9CiAKIHN0YXRpYyBpbnQgYXRtZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKQEAgLTEzNDMsMjEgKzEzNDIsMjEgQEAKIHN0YXRpYyBpbnQgYXRtZWxfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLSAgICAgICAgCisKICAgICAgICAgbWVtY3B5IChkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAlyZXR1cm4gYXRtZWxfb3BlbihkZXYpOwogfQogCiBFWFBPUlRfU1lNQk9MKGF0bWVsX29wZW4pOwogCi1pbnQgYXRtZWxfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBhdG1lbF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpLCBjaGFubmVsOwogCiAJLyogYW55IHNjaGVkdWxlZCB0aW1lciBpcyBubyBsb25nZXIgbmVlZGVkIGFuZCBtaWdodCBzY3JldyB0aGluZ3MgdXAuLiAqLwogCWRlbF90aW1lcl9zeW5jKCZwcml2LT5tYW5hZ2VtZW50X3RpbWVyKTsKLQkKKwogCS8qIEludGVycnVwdHMgd2lsbCBub3QgdG91Y2ggdGhlIGNhcmQgb25jZSBpbiB0aGlzIHN0YXRlLi4uICovCiAJcHJpdi0+c3RhdGlvbl9zdGF0ZSA9IFNUQVRJT05fU1RBVEVfRE9XTjsKIApAQCAtMTM3Nyw3ICsxMzc2LDcgQEAKIAlwcml2LT5zaXRlX3N1cnZleV9zdGF0ZSA9IFNJVEVfU1VSVkVZX0lETEU7CiAJcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkID0gMDsKIAotCWlmICghcmVzZXRfYXRtZWxfY2FyZChkZXYpKSAKKwlpZiAoIXJlc2V0X2F0bWVsX2NhcmQoZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlpZiAocHJpdi0+Y29uZmlnX3JlZ19kb21haW4pIHsKQEAgLTEzOTEsMjYgKzEzOTAsMjYgQEAKIAkJaWYgKGkgPT0gc2l6ZW9mKGNoYW5uZWxfdGFibGUpL3NpemVvZihjaGFubmVsX3RhYmxlWzBdKSkgewogCQkJcHJpdi0+cmVnX2RvbWFpbiA9IFJFR19ET01BSU5fTUtLMTsKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogZmFpbGVkIHRvIGdldCByZWd1bGF0b3J5IGRvbWFpbjogYXNzdW1pbmcgTUtLMS5cbiIsIGRldi0+bmFtZSk7Ci0JCX0gCisJCX0KIAl9Ci0JCisKIAlpZiAoKGNoYW5uZWwgPSBhdG1lbF92YWxpZGF0ZV9jaGFubmVsKHByaXYsIHByaXYtPmNoYW5uZWwpKSkKIAkJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7CiAKLQkvKiB0aGlzIG1vdmVzIHN0YXRpb25fc3RhdGUgb24uLi4uICovIAotCWF0bWVsX3NjYW4ocHJpdiwgMSk7CQorCS8qIHRoaXMgbW92ZXMgc3RhdGlvbl9zdGF0ZSBvbi4uLi4gKi8KKwlhdG1lbF9zY2FuKHByaXYsIDEpOwogCiAJYXRtZWxfc2V0X2djcihwcml2LT5kZXYsIEdDUl9FTklOVCk7IC8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRtZWxfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF0bWVsX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkKKwogCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfRE9XTik7Ci0JCi0JaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCkgCisKKwlpZiAocHJpdi0+YnVzX3R5cGUgPT0gQlVTX1RZUEVfUENDQVJEKQogCQlhdG1lbF93cml0ZTE2KGRldiwgR0NSLCAweDAwNjApOwogCWF0bWVsX3dyaXRlMTYoZGV2LCBHQ1IsIDB4MDA0MCk7CiAJcmV0dXJuIDA7CkBAIC0xNDM4LDQzICsxNDM3LDQ2IEBACiAJaW50IGk7CiAJY2hhciAqcCA9IGJ1ZjsKIAljaGFyICpzLCAqciwgKmM7Ci0JCi0JcCArPSBzcHJpbnRmKHAsICJEcml2ZXIgdmVyc2lvbjpcdFx0JWQuJWRcbiIsIERSSVZFUl9NQUpPUiwgRFJJVkVSX01JTk9SKTsKLQkKKworCXAgKz0gc3ByaW50ZihwLCAiRHJpdmVyIHZlcnNpb246XHRcdCVkLiVkXG4iLAorCQkgICAgIERSSVZFUl9NQUpPUiwgRFJJVkVSX01JTk9SKTsKKwogCWlmIChwcml2LT5zdGF0aW9uX3N0YXRlICE9IFNUQVRJT05fU1RBVEVfRE9XTikgewotCQlwICs9IHNwcmludGYocCwgIkZpcm13YXJlIHZlcnNpb246XHQlZC4lZCBidWlsZCAlZFxuRmlybXdhcmUgbG9jYXRpb246XHQiLCAKKwkJcCArPSBzcHJpbnRmKHAsICJGaXJtd2FyZSB2ZXJzaW9uOlx0JWQuJWQgYnVpbGQgJWRcbiIKKwkJCQkiRmlybXdhcmUgbG9jYXRpb246XHQiLAogCQkJICAgICBwcml2LT5ob3N0X2luZm8ubWFqb3JfdmVyc2lvbiwKIAkJCSAgICAgcHJpdi0+aG9zdF9pbmZvLm1pbm9yX3ZlcnNpb24sCiAJCQkgICAgIHByaXYtPmhvc3RfaW5mby5idWlsZF92ZXJzaW9uKTsKLQkJCi0JCWlmIChwcml2LT5jYXJkX3R5cGUgIT0gQ0FSRF9UWVBFX0VFUFJPTSkgCisKKwkJaWYgKHByaXYtPmNhcmRfdHlwZSAhPSBDQVJEX1RZUEVfRUVQUk9NKQogCQkJcCArPSBzcHJpbnRmKHAsICJvbiBjYXJkXG4iKTsKLQkJZWxzZSBpZiAocHJpdi0+ZmlybXdhcmUpIAotCQkJcCArPSBzcHJpbnRmKHAsICIlcyBsb2FkZWQgYnkgaG9zdFxuIiwgcHJpdi0+ZmlybXdhcmVfaWQpOworCQllbHNlIGlmIChwcml2LT5maXJtd2FyZSkKKwkJCXAgKz0gc3ByaW50ZihwLCAiJXMgbG9hZGVkIGJ5IGhvc3RcbiIsCisJCQkJICAgICBwcml2LT5maXJtd2FyZV9pZCk7CiAJCWVsc2UKLQkJCXAgKz0gc3ByaW50ZihwLCAiJXMgbG9hZGVkIGJ5IGhvdHBsdWdcbiIsIHByaXYtPmZpcm13YXJlX2lkKTsKLQkJCi0JCXN3aXRjaChwcml2LT5jYXJkX3R5cGUpIHsKKwkJCXAgKz0gc3ByaW50ZihwLCAiJXMgbG9hZGVkIGJ5IGhvdHBsdWdcbiIsCisJCQkJICAgICBwcml2LT5maXJtd2FyZV9pZCk7CisKKwkJc3dpdGNoIChwcml2LT5jYXJkX3R5cGUpIHsKIAkJY2FzZSBDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0g6IGMgPSAiUGFyYWxsZWwgZmxhc2giOyBicmVhazsKIAkJY2FzZSBDQVJEX1RZUEVfU1BJX0ZMQVNIOiBjID0gIlNQSSBmbGFzaFxuIjsgYnJlYWs7CiAJCWNhc2UgQ0FSRF9UWVBFX0VFUFJPTTogYyA9ICJFRVBST00iOyBicmVhazsKIAkJZGVmYXVsdDogYyA9ICI8dW5rbm93bj4iOwogCQl9CiAKLQkJCiAJCXIgPSAiPHVua25vd24+IjsKIAkJZm9yIChpID0gMDsgaSA8IHNpemVvZihjaGFubmVsX3RhYmxlKS9zaXplb2YoY2hhbm5lbF90YWJsZVswXSk7IGkrKykKIAkJCWlmIChwcml2LT5yZWdfZG9tYWluID09IGNoYW5uZWxfdGFibGVbaV0ucmVnX2RvbWFpbikKIAkJCQlyID0gY2hhbm5lbF90YWJsZVtpXS5uYW1lOwotCQkKKwogCQlwICs9IHNwcmludGYocCwgIk1BQyBtZW1vcnkgdHlwZTpcdCVzXG4iLCBjKTsKIAkJcCArPSBzcHJpbnRmKHAsICJSZWd1bGF0b3J5IGRvbWFpbjpcdCVzXG4iLCByKTsKLQkJcCArPSBzcHJpbnRmKHAsICJIb3N0IENSQyBjaGVja2luZzpcdCVzXG4iLCAKKwkJcCArPSBzcHJpbnRmKHAsICJIb3N0IENSQyBjaGVja2luZzpcdCVzXG4iLAogCQkJICAgICBwcml2LT5kb19yeF9jcmMgPyAiT24iIDogIk9mZiIpOwogCQlwICs9IHNwcmludGYocCwgIldQQS1jYXBhYmxlIGZpcm13YXJlOlx0JXNcbiIsCiAJCQkgICAgIHByaXYtPnVzZV93cGEgPyAiWWVzIiA6ICJObyIpOwogCX0KLQkKKwogCXN3aXRjaChwcml2LT5zdGF0aW9uX3N0YXRlKSB7CiAJY2FzZSBTVEFUSU9OX1NUQVRFX1NDQU5OSU5HOiBzID0gIlNjYW5uaW5nIjsgYnJlYWs7CiAJY2FzZSBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HOiBzID0gIkpvaW5pbmciOyBicmVhazsKQEAgLTE0ODYsOSArMTQ4OCw5IEBACiAJY2FzZSBTVEFUSU9OX1NUQVRFX0RPV046IHMgPSAiRG93biI7IGJyZWFrOwogCWRlZmF1bHQ6IHMgPSAiPHVua25vd24+IjsKIAl9Ci0gICAgICAKKwogCXAgKz0gc3ByaW50ZihwLCAiQ3VycmVudCBzdGF0ZTpcdFx0JXNcbiIsIHMpOwotCXJldHVybiAgcCAtIGJ1ZjsKKwlyZXR1cm4gcCAtIGJ1ZjsKIH0KIAogc3RhdGljIGludCBhdG1lbF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCkBAIC0xNTA0LDkgKzE1MDYsMTIgQEAKICAgICAgICAgcmV0dXJuIGxlbjsKIH0KIAotc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCB1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IEF0bWVsRldUeXBlIGZ3X3R5cGUsICAKLQkJCQkgICAgc3RydWN0IGRldmljZSAqc3lzX2RldiwgaW50ICgqY2FyZF9wcmVzZW50KSh2b2lkICopLCB2b2lkICpjYXJkKQorc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCh1bnNpZ25lZCBzaG9ydCBpcnEsIHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJCQkgICBjb25zdCBBdG1lbEZXVHlwZSBmd190eXBlLAorCQkJCSAgIHN0cnVjdCBkZXZpY2UgKnN5c19kZXYsCisJCQkJICAgaW50ICgqY2FyZF9wcmVzZW50KSh2b2lkICopLCB2b2lkICpjYXJkKQogeworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXY7CiAJaW50IHJjOwpAQCAtMTUxNCwxMSArMTUxOSwxMSBAQAogCS8qIENyZWF0ZSB0aGUgbmV0d29yayBkZXZpY2Ugb2JqZWN0LiAqLwogICAgICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnByaXYpKTsKICAgICAgICAgaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbDogIENvdWxkbid0IGFsbG9jX2V0aGVyZGV2XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbDogQ291bGRuJ3QgYWxsb2NfZXRoZXJkZXZcbiIpOwogCQlyZXR1cm4gTlVMTDsKICAgICAgICAgfQogCWlmIChkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRtZWw6ICBDb3VsZG4ndCBnZXQgbmFtZSFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImF0bWVsOiBDb3VsZG4ndCBnZXQgbmFtZSFcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKQEAgLTE1NTAsNyArMTU1NSw3IEBACiAJbWVtc2V0KHByaXYtPkJTU0lELCAwLCA2KTsKIAlwcml2LT5DdXJyZW50QlNTSURbMF0gPSAweEZGOyAvKiBJbml0aWFsaXplIHRvIHNvbWV0aGluZyBpbnZhbGlkLi4uLiAqLwogCXByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQgPSAwOwotCQorCiAJcHJpdi0+bGFzdF9zdXJ2ZXkgPSBqaWZmaWVzOwogCXByaXYtPnByZWFtYmxlID0gTE9OR19QUkVBTUJMRTsKIAlwcml2LT5vcGVyYXRpbmdfbW9kZSA9IElXX01PREVfSU5GUkE7CkBAIC0xNTg2LDcgKzE1OTEsNyBAQAogCXNwaW5fbG9ja19pbml0KCZwcml2LT50aW1lcmxvY2spOwogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZnVuY3Rpb24gPSBhdG1lbF9tYW5hZ2VtZW50X3RpbWVyOwogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7Ci0JCisKIAlkZXYtPm9wZW4gPSBhdG1lbF9vcGVuOwogCWRldi0+c3RvcCA9IGF0bWVsX2Nsb3NlOwogCWRldi0+Y2hhbmdlX210dSA9IGF0bWVsX2NoYW5nZV9tdHU7CkBAIC0xNTk3LDQ0ICsxNjAyLDQ2IEBACiAJZGV2LT5kb19pb2N0bCA9IGF0bWVsX2lvY3RsOwogCWRldi0+aXJxID0gaXJxOwogCWRldi0+YmFzZV9hZGRyID0gcG9ydDsKLQkKKwogCVNFVF9ORVRERVZfREVWKGRldiwgc3lzX2Rldik7Ci0JCisKIAlpZiAoKHJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNlcnZpY2VfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWdpc3RlciBpbnRlcnJ1cHQgJWQgZmFpbGVkLCByYyAlZFxuIiwgZGV2LT5uYW1lLCBpcnEsIHJjICk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZ2lzdGVyIGludGVycnVwdCAlZCBmYWlsZWQsIHJjICVkXG4iLCBkZXYtPm5hbWUsIGlycSwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCAzMiwgCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgMzIsCiAJCQkgICAgcHJpdi0+YnVzX3R5cGUgPT0gQlVTX1RZUEVfUENDQVJEID8gICJhdG1lbF9jcyIgOiAiYXRtZWxfcGNpIikpIHsKIAkJZ290byBlcnJfb3V0X2lycTsKIAl9Ci0JCisKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpCiAJCWdvdG8gZXJyX291dF9yZXM7Ci0JCisKIAlpZiAoIXByb2JlX2F0bWVsX2NhcmQoZGV2KSl7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQotCQorCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkKLQljcmVhdGVfcHJvY19yZWFkX2VudHJ5ICgiZHJpdmVyL2F0bWVsIiwgMCwgTlVMTCwgYXRtZWxfcmVhZF9wcm9jLCBwcml2KTsJCi0JCisKKwllbnQgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5ICgiZHJpdmVyL2F0bWVsIiwgMCwgTlVMTCwgYXRtZWxfcmVhZF9wcm9jLCBwcml2KTsKKwlpZiAoIWVudCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRtZWw6IHVuYWJsZSB0byBjcmVhdGUgL3Byb2MgZW50cnkuXG4iKTsKKwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdG1lbCBhdDc2YzUweC4gVmVyc2lvbiAlZC4lZC4gTUFDICUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIERSSVZFUl9NQUpPUiwgRFJJVkVSX01JTk9SLAogCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAogCSAgICAgICBkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdICk7Ci0JCisKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJcmV0dXJuIGRldjsKLQkKLSBlcnJfb3V0X3JlczoKKworZXJyX291dF9yZXM6CiAJcmVsZWFzZV9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCAzMik7Ci0gZXJyX291dF9pcnE6CitlcnJfb3V0X2lycToKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLSBlcnJfb3V0X2ZyZWU6CitlcnJfb3V0X2ZyZWU6CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE2NDQsMTIgKzE2NTEsMTIgQEAKIHZvaWQgc3RvcF9hdG1lbF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkKKwogCS8qIHB1dCBhIGJyaWNrIG9uIGl0Li4uICovCi0JaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCkgCisJaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCkKIAkJYXRtZWxfd3JpdGUxNihkZXYsIEdDUiwgMHgwMDYwKTsKIAlhdG1lbF93cml0ZTE2KGRldiwgR0NSLCAweDAwNDApOwotCQorCiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPm1hbmFnZW1lbnRfdGltZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9hdG1lbCIsIE5VTEwpOwpAQCAtMTY3NSwxMyArMTY4MiwxMyBAQAogCQlpbnQgaW5kZXggPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKIAogCQlwcml2LT5jb25uZWN0X3RvX2FueV9CU1MgPSAwOwotCQkKKwogCQkvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nICovCiAJCWlmIChkd3JxLT5sZW5ndGggPiBNQVhfU1NJRF9MRU5HVEggKyAxKQotCQkJIHJldHVybiAtRTJCSUcgOworCQkJIHJldHVybiAtRTJCSUc7CiAJCWlmIChpbmRleCAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQorCiAJCW1lbWNweShwcml2LT5uZXdfU1NJRCwgZXh0cmEsIGR3cnEtPmxlbmd0aCAtIDEpOwogCQlwcml2LT5uZXdfU1NJRF9zaXplID0gZHdycS0+bGVuZ3RoIC0gMTsKIAl9CkBAIC0xNzA2LDcgKzE3MTMsNyBAQAogCQlleHRyYVtwcml2LT5TU0lEX3NpemVdID0gJ1wwJzsKIAkJZHdycS0+bGVuZ3RoID0gcHJpdi0+U1NJRF9zaXplICsgMTsKIAl9Ci0JCisKIAlkd3JxLT5mbGFncyA9ICFwcml2LT5jb25uZWN0X3RvX2FueV9CU1M7IC8qIGFjdGl2ZSAqLwogCiAJcmV0dXJuIDA7CkBAIC0xNzY4LDcgKzE3NzUsNyBAQAogCQkvKiBXRSBzcGVjaWZ5IHRoYXQgaWYgYSB2YWxpZCBrZXkgaXMgc2V0LCBlbmNyeXB0aW9uCiAJCSAqIHNob3VsZCBiZSBlbmFibGVkICh1c2VyIG1heSB0dXJuIGl0IG9mZiBsYXRlcikKIAkJICogVGhpcyBpcyBhbHNvIGhvdyAiaXdjb25maWcgZXRoWCBrZXkgb24iIHdvcmtzICovCi0JCWlmIChpbmRleCA9PSBjdXJyZW50X2luZGV4ICYmIAorCQlpZiAoaW5kZXggPT0gY3VycmVudF9pbmRleCAmJgogCQkgICAgcHJpdi0+d2VwX2tleV9sZW5baW5kZXhdID4gMCkgewogCQkJcHJpdi0+d2VwX2lzX29uID0gMTsKIAkJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwpAQCAtMTc4MywxOCArMTc5MCwxOCBAQAogCX0gZWxzZSB7CiAJCS8qIERvIHdlIHdhbnQgdG8ganVzdCBzZXQgdGhlIHRyYW5zbWl0IGtleSBpbmRleCA/ICovCiAJCWludCBpbmRleCA9IChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCQlpZiAoIGluZGV4Pj0wICYmIGluZGV4IDwgNCApIHsKKwkJaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCA0KSB7CiAJCQlwcml2LT5kZWZhdWx0X2tleSA9IGluZGV4OwogCQl9IGVsc2UKIAkJCS8qIERvbid0IGNvbXBsYWluIGlmIG9ubHkgY2hhbmdlIHRoZSBtb2RlICovCi0JCQlpZighZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfTU9ERSkgeworCQkJaWYgKCFkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSB7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJfQogCS8qIFJlYWQgdGhlIGZsYWdzICovCi0JaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKKwlpZiAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKIAkJcHJpdi0+d2VwX2lzX29uID0gMDsKLQkJcHJpdi0+ZW5jcnlwdGlvbl9sZXZlbCA9IDA7IAkKKwkJcHJpdi0+ZW5jcnlwdGlvbl9sZXZlbCA9IDA7CiAJCXByaXYtPnBhaXJ3aXNlX2NpcGhlcl9zdWl0ZSA9IENJUEhFUl9TVUlURV9OT05FOwogCX0gZWxzZSB7CiAJCXByaXYtPndlcF9pc19vbiA9IDE7CkBAIC0xODA2LDE1ICsxODEzLDE0IEBACiAJCQlwcml2LT5lbmNyeXB0aW9uX2xldmVsID0gMTsKIAkJfQogCX0KLQlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQorCWlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQogCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMTsKLSAgICAgICAJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgCisJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7Ci0gICAgICAgCisKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogfQogCi0KIHN0YXRpYyBpbnQgYXRtZWxfZ2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkd3JxLApAQCAtMTgyMiw3ICsxODI4LDcgQEAKIHsKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JCisKIAlpZiAoIXByaXYtPndlcF9pc19vbikKIAkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CiAJZWxzZSB7CkBAIC0xODQzLDcgKzE4NDksNyBAQAogCQltZW1zZXQoZXh0cmEsIDAsIDE2KTsKIAkJbWVtY3B5KGV4dHJhLCBwcml2LT53ZXBfa2V5c1tpbmRleF0sIGR3cnEtPmxlbmd0aCk7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NjIsMTcgKzE4NjgsMTcgQEAKIAkJCSAgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJaWYgKHZ3cnEtPmZpeGVkID09IDApIHsKIAkJcHJpdi0+dHhfcmF0ZSA9IDM7CiAJCXByaXYtPmF1dG9fdHhfcmF0ZSA9IDE7CiAJfSBlbHNlIHsKIAkJcHJpdi0+YXV0b190eF9yYXRlID0gMDsKLQkJCisKIAkJLyogV2hpY2ggdHlwZSBvZiB2YWx1ZSA/ICovCi0JCWlmKCh2d3JxLT52YWx1ZSA8IDQpICYmICh2d3JxLT52YWx1ZSA+PSAwKSkgeworCQlpZiAoKHZ3cnEtPnZhbHVlIDwgNCkgJiYgKHZ3cnEtPnZhbHVlID49IDApKSB7CiAJCQkvKiBTZXR0aW5nIGJ5IHJhdGUgaW5kZXggKi8KLQkJcHJpdi0+dHhfcmF0ZSA9IHZ3cnEtPnZhbHVlOworCQkJcHJpdi0+dHhfcmF0ZSA9IHZ3cnEtPnZhbHVlOwogCQl9IGVsc2UgewogCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSB2YWx1ZSAqLwogCQkJc3dpdGNoICh2d3JxLT52YWx1ZSkgewpAQCAtMTg5OSw3ICsxOTA1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwcml2LT5vcGVyYXRpbmdfbW9kZSA9ICp1d3JxOwotCXJldHVybiAtRUlOUFJPR1JFU1M7ICAKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwogfQogCiBzdGF0aWMgaW50IGF0bWVsX2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xOTA4LDcgKzE5MTQsNyBAQAogCQkJICBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAkqdXdycSA9IHByaXYtPm9wZXJhdGluZ19tb2RlOwogCXJldHVybiAwOwogfQpAQCAtMTk2Miw5ICsxOTY4LDkgQEAKIAkJCSAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKLQlpZighdndycS0+ZGlzYWJsZWQgJiYgKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTElNSVQpKSB7Ci0JCWlmKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTUFYKQorCisJaWYgKCF2d3JxLT5kaXNhYmxlZCAmJiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MSU1JVCkpIHsKKwkJaWYgKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTUFYKQogCQkJcHJpdi0+bG9uZ19yZXRyeSA9IHZ3cnEtPnZhbHVlOwogCQllbHNlIGlmICh2d3JxLT5mbGFncyAmIElXX1JFVFJZX01JTikKIAkJCXByaXYtPnNob3J0X3JldHJ5ID0gdndycS0+dmFsdWU7CkBAIC0xOTczLDkgKzE5NzksOSBAQAogCQkJcHJpdi0+bG9uZ19yZXRyeSA9IHZ3cnEtPnZhbHVlOwogCQkJcHJpdi0+c2hvcnRfcmV0cnkgPSB2d3JxLT52YWx1ZTsKIAkJfQotCQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJCisJCXJldHVybiAtRUlOUFJPR1JFU1M7CiAJfQotCSAgIAorCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTE5ODksMTMgKzE5OTUsMTMgQEAKIAl2d3JxLT5kaXNhYmxlZCA9IDA7ICAgICAgLyogQ2FuJ3QgYmUgZGlzYWJsZWQgKi8KIAogCS8qIE5vdGUgOiBieSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBtaW4gcmV0cnkgbnVtYmVyICovCi0JaWYoKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTUFYKSkgeworCWlmICh2d3JxLT5mbGFncyAmIElXX1JFVFJZX01BWCkgewogCQl2d3JxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTUFYOwogCQl2d3JxLT52YWx1ZSA9IHByaXYtPmxvbmdfcmV0cnk7CiAJfSBlbHNlIHsKIAkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKIAkJdndycS0+dmFsdWUgPSBwcml2LT5zaG9ydF9yZXRyeTsKLQkJaWYocHJpdi0+bG9uZ19yZXRyeSAhPSBwcml2LT5zaG9ydF9yZXRyeSkKKwkJaWYgKHByaXYtPmxvbmdfcmV0cnkgIT0gcHJpdi0+c2hvcnRfcmV0cnkpCiAJCQl2d3JxLT5mbGFncyB8PSBJV19SRVRSWV9NSU47CiAJfQogCkBAIC0yMDEwLDEzICsyMDE2LDEzIEBACiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBydGhyID0gdndycS0+dmFsdWU7CiAKLQlpZih2d3JxLT5kaXNhYmxlZCkKKwlpZiAodndycS0+ZGlzYWJsZWQpCiAJCXJ0aHIgPSAyMzQ3OwotCWlmKChydGhyIDwgMCkgfHwgKHJ0aHIgPiAyMzQ3KSkgeworCWlmICgocnRociA8IDApIHx8IChydGhyID4gMjM0NykpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXByaXYtPnJ0c190aHJlc2hvbGQgPSBydGhyOwotCQorCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIApAQCAtMjAyNiw3ICsyMDMyLDcgQEAKIAkJCSBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAl2d3JxLT52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2hvbGQ7CiAJdndycS0+ZGlzYWJsZWQgPSAodndycS0+dmFsdWUgPj0gMjM0Nyk7CiAJdndycS0+Zml4ZWQgPSAxOwpAQCAtMjA0MiwxNCArMjA0OCwxNCBAQAogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZnRociA9IHZ3cnEtPnZhbHVlOwogCi0JaWYodndycS0+ZGlzYWJsZWQpCisJaWYgKHZ3cnEtPmRpc2FibGVkKQogCQlmdGhyID0gMjM0NjsKLQlpZigoZnRociA8IDI1NikgfHwgKGZ0aHIgPiAyMzQ2KSkgeworCWlmICgoZnRociA8IDI1NikgfHwgKGZ0aHIgPiAyMzQ2KSkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZnRociAmPSB+MHgxOwkvKiBHZXQgYW4gZXZlbiB2YWx1ZSAtIGlzIGl0IHJlYWxseSBuZWVkZWQgPz8/ICovCiAJcHJpdi0+ZnJhZ190aHJlc2hvbGQgPSBmdGhyOwotCQorCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIApAQCAtMjA3NywyMSArMjA4MywyMSBAQAogewogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmMgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JCisKIAkvKiBJZiBzZXR0aW5nIGJ5IGZyZXF1ZW5jeSwgY29udmVydCB0byBhIGNoYW5uZWwgKi8KLQlpZigoZndycS0+ZSA9PSAxKSAmJgotCSAgIChmd3JxLT5tID49IChpbnQpIDI0MTIwMDAwMCkgJiYKLQkgICAoZndycS0+bSA8PSAoaW50KSAyNDg3MDAwMDApKSB7CisJaWYgKChmd3JxLT5lID09IDEpICYmCisJICAgIChmd3JxLT5tID49IChpbnQpIDI0MTIwMDAwMCkgJiYKKwkgICAgKGZ3cnEtPm0gPD0gKGludCkgMjQ4NzAwMDAwKSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7CiAJCWludCBjID0gMDsKLQkJd2hpbGUoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQorCQl3aGlsZSAoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQogCQkJYysrOwogCQkvKiBIYWNrIHRvIGZhbGwgdGhyb3VnaC4uLiAqLwogCQlmd3JxLT5lID0gMDsKIAkJZndycS0+bSA9IGMgKyAxOwogCX0KIAkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCi0JaWYoKGZ3cnEtPm0gPiAxMDAwKSB8fCAoZndycS0+ZSA+IDApKQorCWlmICgoZndycS0+bSA+IDEwMDApIHx8IChmd3JxLT5lID4gMCkpCiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJZWxzZSB7CiAJCWludCBjaGFubmVsID0gZndycS0+bTsKQEAgLTIwOTksNyArMjEwNSw3IEBACiAJCQlwcml2LT5jaGFubmVsID0gY2hhbm5lbDsKIAkJfSBlbHNlIHsKIAkJCXJjID0gLUVJTlZBTDsKLQkJfSAKKwkJfQogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0yMTMwLDcgKzIxMzYsNyBAQAogCSAqIFRoaXMgaXMgbm90IGFuIGVycm9yLCB3aGlsZSB0aGUgZGV2aWNlIHBlcmZvcm0gc2Nhbm5pbmcsCiAJICogdHJhZmZpYyBkb2Vzbid0IGZsb3csIHNvIGl0J3MgYSBwZXJmZWN0IERvUy4uLgogCSAqIEplYW4gSUkgKi8KLQkKKwogCWlmIChwcml2LT5zdGF0aW9uX3N0YXRlID09IFNUQVRJT05fU1RBVEVfRE9XTikKIAkJcmV0dXJuIC1FQUdBSU47CiAKQEAgLTIxNDIsMTUgKzIxNDgsMTUgQEAKIAkvKiBJbml0aWF0ZSBhIHNjYW4gY29tbWFuZCAqLwogCWlmIChwcml2LT5zaXRlX3N1cnZleV9zdGF0ZSA9PSBTSVRFX1NVUlZFWV9JTl9QUk9HUkVTUykKIAkJcmV0dXJuIC1FQlVTWTsKLQkJCisKIAlkZWxfdGltZXJfc3luYygmcHJpdi0+bWFuYWdlbWVudF90aW1lcik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmlycWxvY2ssIGZsYWdzKTsKLQkKKwogCXByaXYtPnNpdGVfc3VydmV5X3N0YXRlID0gU0lURV9TVVJWRVlfSU5fUFJPR1JFU1M7CiAJcHJpdi0+ZmFzdF9zY2FuID0gMDsKIAlhdG1lbF9zY2FuKHByaXYsIDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmlycWxvY2ssIGZsYWdzKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0yMTYzLDExICsyMTY5LDExIEBACiAJaW50IGk7CiAJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwogCXN0cnVjdCBpd19ldmVudAlpd2U7Ci0JCisKIAlpZiAocHJpdi0+c2l0ZV9zdXJ2ZXlfc3RhdGUgIT0gU0lURV9TVVJWRVlfQ09NUExFVEVEKQogCQlyZXR1cm4gLUVBR0FJTjsKLQkKLQlmb3IoaT0wOyBpPHByaXYtPkJTU19saXN0X2VudHJpZXM7IGkrKykgeyAKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5CU1NfbGlzdF9lbnRyaWVzOyBpKyspIHsKIAkJaXdlLmNtZCA9IFNJT0NHSVdBUDsKIAkJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPkJTU2luZm9baV0uQlNTSUQsIDYpOwpAQCAtMjE3OSwxNiArMjE4NSwxNiBAQAogCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKIAkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJml3ZSwgcHJpdi0+QlNTaW5mb1tpXS5TU0lEKTsKLQkJCisKIAkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwogCQlpd2UudS5tb2RlID0gcHJpdi0+QlNTaW5mb1tpXS5CU1N0eXBlOwogCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7Ci0JCisKIAkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwogCQlpd2UudS5mcmVxLm0gPSBwcml2LT5CU1NpbmZvW2ldLmNoYW5uZWw7CiAJCWl3ZS51LmZyZXEuZSA9IDA7CiAJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQkJCisKIAkJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CiAJCWlmIChwcml2LT5CU1NpbmZvW2ldLlVzaW5nV0VQKQogCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwpAQCAtMjE5NiwxMyArMjIwMiwxMiBAQAogCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSAwOwogCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmaXdlLCBOVUxMKTsKLQkJCiAJfQogCiAJLyogTGVuZ3RoIG9mIGRhdGEgKi8KIAlkd3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKLQlkd3JxLT5mbGFncyA9IDA7ICAgCi0JCisJZHdycS0+ZmxhZ3MgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMTMsNyArMjIxOCw3IEBACiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwotCWludCBrLGksajsKKwlpbnQgaywgaSwgajsKIAogCWR3cnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwogCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwpAQCAtMjIyNiwxNCArMjIzMSwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAlpZiAocmFuZ2UtPm51bV9jaGFubmVscyAhPSAwKSB7Ci0JCWZvcihrID0gMCwgaSA9IGNoYW5uZWxfdGFibGVbal0ubWluOyBpIDw9IGNoYW5uZWxfdGFibGVbal0ubWF4OyBpKyspIHsKKwkJZm9yIChrID0gMCwgaSA9IGNoYW5uZWxfdGFibGVbal0ubWluOyBpIDw9IGNoYW5uZWxfdGFibGVbal0ubWF4OyBpKyspIHsKIAkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpOyAvKiBMaXN0IGluZGV4ICovCi0JCQlyYW5nZS0+ZnJlcVtrXS5tID0gZnJlcXVlbmN5X2xpc3RbaS0xXSAqIDEwMDAwMDsKKwkJCXJhbmdlLT5mcmVxW2tdLm0gPSBmcmVxdWVuY3lfbGlzdFtpIC0gMV0gKiAxMDAwMDA7CiAJCQlyYW5nZS0+ZnJlcVtrKytdLmUgPSAxOwkvKiBWYWx1ZXMgaW4gdGFibGUgaW4gTUh6IC0+ICogMTBeNSAqIDEwICovCiAJCX0KIAkJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBrOwogCX0KLQkKKwogCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwogCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDEwMDsKIAlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOwpAQCAtMjI2MSwxMSArMjI2NiwxMSBAQAogCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CiAJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CiAJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OwotCQorCiAJcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX09OOwogCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9PTjsKIAlyYW5nZS0+cG1fY2FwYSA9IDA7Ci0JCisKIAlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSBXSVJFTEVTU19FWFQ7CiAJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CiAJcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVCA7CkBAIC0yMjg5LDcgKzIyOTQsNyBAQAogCiAJaWYgKGF3cnEtPnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpCiAJCXJldHVybiAtRUlOVkFMOwotCQorCiAJaWYgKG1lbWNtcChiY2FzdCwgYXdycS0+c2FfZGF0YSwgNikgPT0gMCkgewogCQlkZWxfdGltZXJfc3luYygmcHJpdi0+bWFuYWdlbWVudF90aW1lcik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pcnFsb2NrLCBmbGFncyk7CkBAIC0yMjk3LDggKzIzMDIsOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pcnFsb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KLQkKLQlmb3IoaT0wOyBpPHByaXYtPkJTU19saXN0X2VudHJpZXM7IGkrKykgeworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPkJTU19saXN0X2VudHJpZXM7IGkrKykgewogCQlpZiAobWVtY21wKHByaXYtPkJTU2luZm9baV0uQlNTSUQsIGF3cnEtPnNhX2RhdGEsIDYpID09IDApIHsKIAkJCWlmICghcHJpdi0+d2VwX2lzX29uICYmIHByaXYtPkJTU2luZm9baV0uVXNpbmdXRVApIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMTMsMTAgKzIzMTgsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQkJCisKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLQkKKwogc3RhdGljIGludCBhdG1lbF9jb25maWdfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywJLyogTlVMTCAqLwogCQkJICAgICAgIHZvaWQgKnp3cnEsCQkJLyogTlVMTCAqLwpAQCAtMjMyNSwxOCArMjMzMCwxOCBAQAogCXJldHVybiBhdG1lbF9vcGVuKGRldik7CiB9CiAKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyCQlhdG1lbF9oYW5kbGVyW10gPQorc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgYXRtZWxfaGFuZGxlcltdID0KIHsKIAkoaXdfaGFuZGxlcikgYXRtZWxfY29uZmlnX2NvbW1pdCwJLyogU0lPQ1NJV0NPTU1JVCAqLwotCShpd19oYW5kbGVyKSBhdG1lbF9nZXRfbmFtZSwgICAgCS8qIFNJT0NHSVdOQU1FICovCisJKGl3X2hhbmRsZXIpIGF0bWVsX2dldF9uYW1lLAkJLyogU0lPQ0dJV05BTUUgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXTldJRCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NHSVdOV0lEICovCiAJKGl3X2hhbmRsZXIpIGF0bWVsX3NldF9mcmVxLAkJLyogU0lPQ1NJV0ZSRVEgKi8KIAkoaXdfaGFuZGxlcikgYXRtZWxfZ2V0X2ZyZXEsCQkvKiBTSU9DR0lXRlJFUSAqLwogCShpd19oYW5kbGVyKSBhdG1lbF9zZXRfbW9kZSwJCS8qIFNJT0NTSVdNT0RFICovCiAJKGl3X2hhbmRsZXIpIGF0bWVsX2dldF9tb2RlLAkJLyogU0lPQ0dJV01PREUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAJLyogU0lPQ1NJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgIAkJLyogU0lPQ0dJV1NFTlMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NHSVdTRU5TICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV1JBTkdFICovCiAJKGl3X2hhbmRsZXIpIGF0bWVsX2dldF9yYW5nZSwgICAgICAgICAgIC8qIFNJT0NHSVdSQU5HRSAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NTSVdQUklWICovCkBAIC0yMzUwLDEzICsyMzU1LDEzIEBACiAJKGl3X2hhbmRsZXIpIGF0bWVsX3NldF93YXAsCQkvKiBTSU9DU0lXQVAgKi8KIAkoaXdfaGFuZGxlcikgYXRtZWxfZ2V0X3dhcCwJCS8qIFNJT0NHSVdBUCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgCQkvKiBTSU9DR0lXQVBMSVNUICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ0dJV0FQTElTVCAqLwogCShpd19oYW5kbGVyKSBhdG1lbF9zZXRfc2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCiAJKGl3X2hhbmRsZXIpIGF0bWVsX2dldF9zY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KIAkoaXdfaGFuZGxlcikgYXRtZWxfc2V0X2Vzc2lkLAkJLyogU0lPQ1NJV0VTU0lEICovCiAJKGl3X2hhbmRsZXIpIGF0bWVsX2dldF9lc3NpZCwJCS8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgIAkJLyogU0lPQ1NJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgIAkJLyogU0lPQ0dJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ0dJV05JQ0tOICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KIAkoaXdfaGFuZGxlcikgYXRtZWxfc2V0X3JhdGUsCQkvKiBTSU9DU0lXUkFURSAqLwpAQCAtMjM2NSw4ICsyMzcwLDggQEAKIAkoaXdfaGFuZGxlcikgYXRtZWxfZ2V0X3J0cywJCS8qIFNJT0NHSVdSVFMgKi8KIAkoaXdfaGFuZGxlcikgYXRtZWxfc2V0X2ZyYWcsCQkvKiBTSU9DU0lXRlJBRyAqLwogCShpd19oYW5kbGVyKSBhdG1lbF9nZXRfZnJhZywJCS8qIFNJT0NHSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgCQkvKiBTSU9DU0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgCQkvKiBTSU9DR0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DR0lXVFhQT1cgKi8KIAkoaXdfaGFuZGxlcikgYXRtZWxfc2V0X3JldHJ5LAkJLyogU0lPQ1NJV1JFVFJZICovCiAJKGl3X2hhbmRsZXIpIGF0bWVsX2dldF9yZXRyeSwJCS8qIFNJT0NHSVdSRVRSWSAqLwogCShpd19oYW5kbGVyKSBhdG1lbF9zZXRfZW5jb2RlLAkJLyogU0lPQ1NJV0VOQ09ERSAqLwpAQCAtMjM3NSwzOSArMjM4MCw1MSBAQAogCShpd19oYW5kbGVyKSBhdG1lbF9nZXRfcG93ZXIsCQkvKiBTSU9DR0lXUE9XRVIgKi8KIH07CiAKLQotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJCWF0bWVsX3ByaXZhdGVfaGFuZGxlcltdID0KK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIGF0bWVsX3ByaXZhdGVfaGFuZGxlcltdID0KIHsKIAlOVUxMLAkJCQkvKiBTSU9DSVdGSVJTVFBSSVYgKi8KIH07CiAKIHR5cGVkZWYgc3RydWN0IGF0bWVsX3ByaXZfaW9jdGwgewogCWNoYXIgaWRbMzJdOwotCXVuc2lnbmVkIGNoYXIgX191c2VyICpkYXRhOwkJCi0JdW5zaWduZWQgc2hvcnQgbGVuOwkJCisJdW5zaWduZWQgY2hhciBfX3VzZXIgKmRhdGE7CisJdW5zaWduZWQgc2hvcnQgbGVuOwogfSBhdG1lbF9wcml2X2lvY3RsOwogCi0JCi0jZGVmaW5lIEFUTUVMRldMIFNJT0NJV0ZJUlNUUFJJVgotI2RlZmluZSBBVE1FTElESUZDIEFUTUVMRldMICsgMQotI2RlZmluZSBBVE1FTFJEIEFUTUVMRldMICsgMgotI2RlZmluZSBBVE1FTE1BR0lDIDB4NTE4MDcgCisjZGVmaW5lIEFUTUVMRldMCVNJT0NJV0ZJUlNUUFJJVgorI2RlZmluZSBBVE1FTElESUZDCUFUTUVMRldMICsgMQorI2RlZmluZSBBVE1FTFJECQlBVE1FTEZXTCArIDIKKyNkZWZpbmUgQVRNRUxNQUdJQyAweDUxODA3CiAjZGVmaW5lIFJFR0RPTUFJTlNaIDIwCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIGF0bWVsX3ByaXZhdGVfYXJnc1tdID0gewotLyp7IGNtZCwgICAgICAgICBzZXRfYXJncywgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2FyZ3MsIG5hbWUgfSAqLwotICB7IEFUTUVMRldMLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IHNpemVvZiAoYXRtZWxfcHJpdl9pb2N0bCksIElXX1BSSVZfVFlQRV9OT05FLCAiYXRtZWxmd2wiIH0sCi0gIHsgQVRNRUxJRElGQywgSVdfUFJJVl9UWVBFX05PTkUsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiYXRtZWxpZGlmYyIgfSwKLSAgeyBBVE1FTFJELCBJV19QUklWX1RZUEVfQ0hBUiB8IFJFR0RPTUFJTlNaLCBJV19QUklWX1RZUEVfTk9ORSwgInJlZ2RvbWFpbiIgfSwKKwl7CisJCS5jbWQgPSBBVE1FTEZXTCwKKwkJLnNldF9hcmdzID0gSVdfUFJJVl9UWVBFX0JZVEUKKwkJCQl8IElXX1BSSVZfU0laRV9GSVhFRAorCQkJCXwgc2l6ZW9mIChhdG1lbF9wcml2X2lvY3RsKSwKKwkJLmdldF9hcmdzID0gSVdfUFJJVl9UWVBFX05PTkUsCisJCS5uYW1lID0gImF0bWVsZndsIgorCX0sIHsKKwkJLmNtZCA9IEFUTUVMSURJRkMsCisJCS5zZXRfYXJncyA9IElXX1BSSVZfVFlQRV9OT05FLAorCQkuZ2V0X2FyZ3MgPSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkJLm5hbWUgPSAiYXRtZWxpZGlmYyIKKwl9LCB7CisJCS5jbWQgPSBBVE1FTFJELAorCQkuc2V0X2FyZ3MgPSBJV19QUklWX1RZUEVfQ0hBUiB8IFJFR0RPTUFJTlNaLAorCQkuZ2V0X2FyZ3MgPSBJV19QUklWX1RZUEVfTk9ORSwKKwkJLm5hbWUgPSAicmVnZG9tYWluIgorCX0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmCWF0bWVsX2hhbmRsZXJfZGVmID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgYXRtZWxfaGFuZGxlcl9kZWYgPQogewogCS5udW1fc3RhbmRhcmQJPSBzaXplb2YoYXRtZWxfaGFuZGxlcikvc2l6ZW9mKGl3X2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZQk9IHNpemVvZihhdG1lbF9wcml2YXRlX2hhbmRsZXIpL3NpemVvZihpd19oYW5kbGVyKSwgCi0JLm51bV9wcml2YXRlX2FyZ3MgPSBzaXplb2YoYXRtZWxfcHJpdmF0ZV9hcmdzKS9zaXplb2Yoc3RydWN0IGl3X3ByaXZfYXJncyksIAorCS5udW1fcHJpdmF0ZQk9IHNpemVvZihhdG1lbF9wcml2YXRlX2hhbmRsZXIpL3NpemVvZihpd19oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGVfYXJncyA9IHNpemVvZihhdG1lbF9wcml2YXRlX2FyZ3MpL3NpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSwKIAkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBhdG1lbF9oYW5kbGVyLAotCS5wcml2YXRlCT0gKGl3X2hhbmRsZXIgKikgYXRtZWxfcHJpdmF0ZV9oYW5kbGVyLCAKKwkucHJpdmF0ZQk9IChpd19oYW5kbGVyICopIGF0bWVsX3ByaXZhdGVfaGFuZGxlciwKIAkucHJpdmF0ZV9hcmdzCT0gKHN0cnVjdCBpd19wcml2X2FyZ3MgKikgYXRtZWxfcHJpdmF0ZV9hcmdzLAogCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBhdG1lbF9nZXRfd2lyZWxlc3Nfc3RhdHMKIH07CkBAIC0yNDE5LDEzICsyNDM2LDEzIEBACiAJYXRtZWxfcHJpdl9pb2N0bCBjb207CiAJc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopIHJxOwogCXVuc2lnbmVkIGNoYXIgKm5ld19maXJtd2FyZTsKLQljaGFyIGRvbWFpbltSRUdET01BSU5TWisxXTsKKwljaGFyIGRvbWFpbltSRUdET01BSU5TWiArIDFdOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEFUTUVMSURJRkM6Ci0JCXdycS0+dS5wYXJhbS52YWx1ZSA9IEFUTUVMTUFHSUM7CQkKKwkJd3JxLT51LnBhcmFtLnZhbHVlID0gQVRNRUxNQUdJQzsKIAkJYnJlYWs7Ci0JCisKIAljYXNlIEFUTUVMRldMOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbSwgcnEtPmlmcl9kYXRhLCBzaXplb2YoY29tKSkpIHsKIAkJCXJjID0gLUVGQVVMVDsKQEAgLTI0NDksNyArMjQ2Niw3IEBACiAJCX0KIAogCQlrZnJlZShwcml2LT5maXJtd2FyZSk7Ci0JCQorCiAJCXByaXYtPmZpcm13YXJlID0gbmV3X2Zpcm13YXJlOwogCQlwcml2LT5maXJtd2FyZV9sZW5ndGggPSBjb20ubGVuOwogCQlzdHJuY3B5KHByaXYtPmZpcm13YXJlX2lkLCBjb20uaWQsIDMxKTsKQEAgLTI0NjEsNyArMjQ3OCw3IEBACiAJCQlyYyA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKIAkJCXJjID0gLUVQRVJNOwogCQkJYnJlYWs7CkBAIC0yNDg0LDE1ICsyNTAxLDE1IEBACiAJCQkJcmMgPSAwOwogCQkJfQogCQl9Ci0JCQorCiAJCWlmIChyYyA9PSAwICYmICBwcml2LT5zdGF0aW9uX3N0YXRlICE9IFNUQVRJT05fU1RBVEVfRE9XTikKIAkJCXJjID0gYXRtZWxfb3BlbihkZXYpOwogCQlicmVhazsKLQkJCisKIAlkZWZhdWx0OgogCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KLQkKKwogCXJldHVybiByYzsKIH0KIApAQCAtMjUwMywxNyArMjUyMCwxNyBAQAogCXU4IGVsX2lkOwogCXU4IGNoYWxsX3RleHRfbGVuOwogCXU4IGNoYWxsX3RleHRbMjUzXTsKLX07IAorfTsKIAogc3RhdGljIHZvaWQgYXRtZWxfZW50ZXJfc3RhdGUoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIGludCBuZXdfc3RhdGUpCiB7CiAJaW50IG9sZF9zdGF0ZSA9IHByaXYtPnN0YXRpb25fc3RhdGU7Ci0JCQorCiAJaWYgKG5ld19zdGF0ZSA9PSBvbGRfc3RhdGUpCiAJCXJldHVybjsKLQkKKwogCXByaXYtPnN0YXRpb25fc3RhdGUgPSBuZXdfc3RhdGU7Ci0JCQorCiAJaWYgKG5ld19zdGF0ZSA9PSBTVEFUSU9OX1NUQVRFX1JFQURZKSB7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKHByaXYtPmRldik7CiAJCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKQEAgLTI1NDAsNyArMjU1Nyw3IEBACiAJCXU4IG9wdGlvbnM7CiAJCXU4IFNTSURfc2l6ZTsKIAl9IGNtZDsKLQkKKwogCW1lbXNldChjbWQuQlNTSUQsIDB4ZmYsIDYpOwogCiAJaWYgKHByaXYtPmZhc3Rfc2NhbikgewpAQCAtMjU1NCwxNyArMjU3MSwxNyBAQAogCQljbWQubWluX2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTE2KDEwKTsKIAkJY21kLm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNigxMjApOwogCX0KLQkKKwogCWNtZC5vcHRpb25zID0gMDsKLQkKKwogCWlmICghc3BlY2lmaWNfc3NpZCkKIAkJY21kLm9wdGlvbnMgfD0gU0NBTl9PUFRJT05TX1NJVEVfU1VSVkVZOwotCQotCWNtZC5jaGFubmVsID0gKHByaXYtPmNoYW5uZWwgJiAweDdmKTsgCisKKwljbWQuY2hhbm5lbCA9IChwcml2LT5jaGFubmVsICYgMHg3Zik7CiAJY21kLnNjYW5fdHlwZSA9IFNDQU5fVFlQRV9BQ1RJVkU7Ci0JY21kLkJTU190eXBlID0gY3B1X3RvX2xlMTYocHJpdi0+b3BlcmF0aW5nX21vZGUgPT0gSVdfTU9ERV9BREhPQyA/IAorCWNtZC5CU1NfdHlwZSA9IGNwdV90b19sZTE2KHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfQURIT0MgPwogCQlCU1NfVFlQRV9BRF9IT0MgOiBCU1NfVFlQRV9JTkZSQVNUUlVDVFVSRSk7Ci0JCisKIAlhdG1lbF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EX1NjYW4sICZjbWQsIHNpemVvZihjbWQpKTsKIAogCS8qIFRoaXMgbXVzdCBjb21lIGFmdGVyIGFsbCBoYXJkd2FyZSBhY2Nlc3MgdG8gYXZvaWQgYmVpbmcgbWVzc2VkIHVwCkBAIC0yNTkxLDE2ICsyNjA4LDE1IEBACiAJY21kLkJTU190eXBlID0gdHlwZTsKIAljbWQudGltZW91dCA9IGNwdV90b19sZTE2KDIwMDApOwogCi0gCWF0bWVsX3NlbmRfY29tbWFuZChwcml2LCBDTURfSm9pbiwgJmNtZCwgc2l6ZW9mKGNtZCkpOworCWF0bWVsX3NlbmRfY29tbWFuZChwcml2LCBDTURfSm9pbiwgJmNtZCwgc2l6ZW9mKGNtZCkpOwogfQogCi0KIHN0YXRpYyB2b2lkIHN0YXJ0KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgewogCQl1OCBCU1NJRFs2XTsKIAkJdTggU1NJRFtNQVhfU1NJRF9MRU5HVEhdOwotCQl1OCBCU1NfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCQl1OCBCU1NfdHlwZTsKIAkJdTggY2hhbm5lbDsKIAkJdTggU1NJRF9zaXplOwogCQl1OCByZXNlcnZlZFszXTsKQEAgLTI2MTIsMTMgKzI2MjgsMTQgQEAKIAljbWQuQlNTX3R5cGUgPSB0eXBlOwogCWNtZC5jaGFubmVsID0gKHByaXYtPmNoYW5uZWwgJiAweDdmKTsKIAotCWF0bWVsX3NlbmRfY29tbWFuZChwcml2LCBDTURfU3RhcnQsICZjbWQsIHNpemVvZihjbWQpKTsgCisJYXRtZWxfc2VuZF9jb21tYW5kKHByaXYsIENNRF9TdGFydCwgJmNtZCwgc2l6ZW9mKGNtZCkpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfYmVhY29uX3Byb2JlKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1MTYgY2FwYWJpbGl0eSwgdTggY2hhbm5lbCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9iZWFjb25fcHJvYmUoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHUxNiBjYXBhYmlsaXR5LAorCQkJCXU4IGNoYW5uZWwpCiB7CiAJaW50IHJlam9pbiA9IDA7Ci0JaW50IG5ldyA9IGNhcGFiaWxpdHkgICYgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9TaG9ydFByZWFtYmxlID8gCisJaW50IG5ldyA9IGNhcGFiaWxpdHkgICYgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9TaG9ydFByZWFtYmxlID8KIAkJU0hPUlRfUFJFQU1CTEUgOiBMT05HX1BSRUFNQkxFOwogCiAJaWYgKHByaXYtPnByZWFtYmxlICE9IG5ldykgewpAQCAtMjYyNiw0OCArMjY0Myw0OCBAQAogCQlyZWpvaW4gPSAxOwogCQlhdG1lbF9zZXRfbWliOChwcml2LCBMb2NhbF9NaWJfVHlwZSwgTE9DQUxfTUlCX1BSRUFNQkxFX1RZUEUsIG5ldyk7CiAJfQotCQkKKwogCWlmIChwcml2LT5jaGFubmVsICE9IGNoYW5uZWwpIHsKIAkJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7CiAJCXJlam9pbiA9IDE7CiAJCWF0bWVsX3NldF9taWI4KHByaXYsIFBoeV9NaWJfVHlwZSwgUEhZX01JQl9DSEFOTkVMX1BPUywgY2hhbm5lbCk7CiAJfQotCQorCiAJaWYgKHJlam9pbikgewogCQlwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgPSAwOwogCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HKTsKLQkJCisKIAkJaWYgKHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfSU5GUkEpCiAJCQlqb2luKHByaXYsIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFKTsKLQkJZWxzZSAKKwkJZWxzZQogCQkJam9pbihwcml2LCBCU1NfVFlQRV9BRF9IT0MpOwotCX0gCisJfQogfQogCi0KLXN0YXRpYyB2b2lkIHNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IHN5c3RlbSwgdTggKmNoYWxsZW5nZSwgaW50IGNoYWxsZW5nZV9sZW4pCitzdGF0aWMgdm9pZCBzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Qoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHUxNiBzeXN0ZW0sCisJCQkJCXU4ICpjaGFsbGVuZ2UsIGludCBjaGFsbGVuZ2VfbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIGhlYWRlcjsKIAlzdHJ1Y3QgYXV0aF9ib2R5IGF1dGg7Ci0JCi0JaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0FVVEgpOyAKLQloZWFkZXIuZHVyYXRpb25faWQJPSBjcHVfdG9fbGUxNigweDgwMDApOwkKKworCWhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKKwloZWFkZXIuZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNigweDgwMDApOwogCWhlYWRlci5zZXFfY3RsID0gMDsKIAltZW1jcHkoaGVhZGVyLmFkZHIxLCBwcml2LT5DdXJyZW50QlNTSUQsIDYpOwogCW1lbWNweShoZWFkZXIuYWRkcjIsIHByaXYtPmRldi0+ZGV2X2FkZHIsIDYpOwogCW1lbWNweShoZWFkZXIuYWRkcjMsIHByaXYtPkN1cnJlbnRCU1NJRCwgNik7Ci0JCi0JaWYgKHByaXYtPndlcF9pc19vbiAmJiBwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtICE9IDEpIAorCisJaWYgKHByaXYtPndlcF9pc19vbiAmJiBwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtICE9IDEpCiAJCS8qIG5vIFdFUCBmb3IgYXV0aGVudGljYXRpb24gZnJhbWVzIHdpdGggVHJTZXFObyAxICovCiAgICAgICAgICAgICAgICAgaGVhZGVyLmZyYW1lX2N0bCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKLQkKLQlhdXRoLmFsZyA9IGNwdV90b19sZTE2KHN5c3RlbSk7IAorCisJYXV0aC5hbGcgPSBjcHVfdG9fbGUxNihzeXN0ZW0pOwogCiAJYXV0aC5zdGF0dXMgPSAwOwogCWF1dGgudHJhbnNfc2VxID0gY3B1X3RvX2xlMTYocHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSk7Ci0JcHJpdi0+RXhwZWN0ZWRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSBwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtKzE7IAorCXByaXYtPkV4cGVjdGVkQXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtID0gcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSsxOwogCXByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gKz0gMjsKLQkKKwogCWlmIChjaGFsbGVuZ2VfbGVuICE9IDApCXsKIAkJYXV0aC5lbF9pZCA9IDE2OyAvKiBjaGFsbGVuZ2VfdGV4dCAqLwogCQlhdXRoLmNoYWxsX3RleHRfbGVuID0gY2hhbGxlbmdlX2xlbjsKQEAgLTI2ODUsNyArMjcwMiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGVhZGVyOwogCXN0cnVjdCBhc3NfcmVxX2Zvcm1hdCB7CiAJCXUxNiBjYXBhYmlsaXR5OwotCQl1MTYgbGlzdGVuX2ludGVydmFsOyAKKwkJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKIAkJdTggYXBbNl07IC8qIG5vdGhpbmcgYWZ0ZXIgaGVyZSBkaXJlY3RseSBhY2Nlc3NpYmxlICovCiAJCXU4IHNzaWRfZWxfaWQ7CiAJCXU4IHNzaWRfbGVuOwpAQCAtMjY5NCwxNSArMjcxMSwxNSBAQAogCQl1OCBzdXBfcmF0ZXNfbGVuOwogCQl1OCByYXRlc1s0XTsKIAl9IGJvZHk7Ci0JCQotCWhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IAorCisJaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJKGlzX3JlYXNzb2MgPyBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEgOiBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKSk7CiAJaGVhZGVyLmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoMHg4MDAwKTsKIAloZWFkZXIuc2VxX2N0bCA9IDA7CiAKLQltZW1jcHkoaGVhZGVyLmFkZHIxLCBwcml2LT5DdXJyZW50QlNTSUQsIDYpOyAKKwltZW1jcHkoaGVhZGVyLmFkZHIxLCBwcml2LT5DdXJyZW50QlNTSUQsIDYpOwogCW1lbWNweShoZWFkZXIuYWRkcjIsIHByaXYtPmRldi0+ZGV2X2FkZHIsIDYpOwotCW1lbWNweShoZWFkZXIuYWRkcjMsIHByaXYtPkN1cnJlbnRCU1NJRCwgNik7IAorCW1lbWNweShoZWFkZXIuYWRkcjMsIHByaXYtPkN1cnJlbnRCU1NJRCwgNik7CiAKIAlib2R5LmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihDODAyMTFfTUdNVF9DQVBBQklMSVRZX0VTUyk7CiAJaWYgKHByaXYtPndlcF9pc19vbikKQEAgLTI3MTEsMTggKzI3MjgsMTggQEAKIAkJYm9keS5jYXBhYmlsaXR5IHw9IGNwdV90b19sZTE2KEM4MDIxMV9NR01UX0NBUEFCSUxJVFlfU2hvcnRQcmVhbWJsZSk7CiAKIAlib2R5Lmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KHByaXYtPmxpc3Rlbl9pbnRlcnZhbCAqIHByaXYtPmJlYWNvbl9wZXJpb2QpOwotCQorCiAJLyogY3VycmVudCBBUCBhZGRyZXNzIC0gb25seSBpbiByZWFzc29jIGZyYW1lICovCiAJaWYgKGlzX3JlYXNzb2MpIHsKLQkJbWVtY3B5KGJvZHkuYXAsICBwcml2LT5DdXJyZW50QlNTSUQsIDYpOworCQltZW1jcHkoYm9keS5hcCwgcHJpdi0+Q3VycmVudEJTU0lELCA2KTsKIAkJc3NpZF9lbF9wID0gKHU4ICopJmJvZHkuc3NpZF9lbF9pZDsKIAkJYm9keXNpemUgPSAxOCArIHByaXYtPlNTSURfc2l6ZTsKIAl9IGVsc2UgewogCQlzc2lkX2VsX3AgPSAodTggKikmYm9keS5hcFswXTsKIAkJYm9keXNpemUgPSAxMiArIHByaXYtPlNTSURfc2l6ZTsKIAl9Ci0JCQotCXNzaWRfZWxfcFswXT0gQzgwMjExX01HTVRfRWxlbWVudElEX1NTSUQ7CisKKwlzc2lkX2VsX3BbMF0gPSBDODAyMTFfTUdNVF9FbGVtZW50SURfU1NJRDsKIAlzc2lkX2VsX3BbMV0gPSBwcml2LT5TU0lEX3NpemU7CiAJbWVtY3B5KHNzaWRfZWxfcCArIDIsIHByaXYtPlNTSUQsIHByaXYtPlNTSURfc2l6ZSk7CiAJc3NpZF9lbF9wWzIgKyBwcml2LT5TU0lEX3NpemVdID0gQzgwMjExX01HTVRfRWxlbWVudElEX1N1cHBvcnRlZFJhdGVzOwpAQCAtMjczMiw3ICsyNzQ5LDggQEAKIAlhdG1lbF90cmFuc21pdF9tYW5hZ2VtZW50X2ZyYW1lKHByaXYsICZoZWFkZXIsICh2b2lkICopJmJvZHksIGJvZHlzaXplKTsKIH0KIAotc3RhdGljIGludCBpc19mcmFtZV9mcm9tX2N1cnJlbnRfYnNzKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyKQorc3RhdGljIGludCBpc19mcmFtZV9mcm9tX2N1cnJlbnRfYnNzKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlcikKIHsKIAlpZiAobGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKQogCQlyZXR1cm4gbWVtY21wKGhlYWRlci0+YWRkcjMsIHByaXYtPkN1cnJlbnRCU1NJRCwgNikgPT0gMDsKQEAgLTI3NDUsMjkgKzI3NjMsMjkgQEAKIAlpbnQgaTsKIAlpbnQgbWF4X3Jzc2kgPSAtMTI4OwogCWludCBtYXhfaW5kZXggPSAtMTsKLQkKKwogCWlmIChwcml2LT5CU1NfbGlzdF9lbnRyaWVzID09IDApCiAJCXJldHVybiAtMTsKLQkJCQorCiAJaWYgKHByaXYtPmNvbm5lY3RfdG9fYW55X0JTUykgewotCQkvKiBTZWxlY3QgYSBCU1Mgd2l0aCB0aGUgbWF4LVJTU0kgYnV0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIG9mIHRoZSBzYW1lIFdFUCBtb2RlCi0JCSAgIGFuZCB0aGF0IGl0IGlzIG5vdCBtYXJrZWQgYXMgJ2JhZCcgKGkuZS4gd2UgaGFkIHByZXZpb3VzbHkgZmFpbGVkIHRvIGNvbm5lY3QgdG8KLQkJICAgdGhpcyBCU1Mgd2l0aCB0aGUgc2V0dGluZ3MgdGhhdCB3ZSBjdXJyZW50bHkgdXNlKSAqLworCQkvKiBTZWxlY3QgYSBCU1Mgd2l0aCB0aGUgbWF4LVJTU0kgYnV0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIG9mCisJCSAgIHRoZSBzYW1lIFdFUCBtb2RlIGFuZCB0aGF0IGl0IGlzIG5vdCBtYXJrZWQgYXMgJ2JhZCcgKGkuZS4KKwkJICAgd2UgaGFkIHByZXZpb3VzbHkgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhpcyBCU1Mgd2l0aCB0aGUKKwkJICAgc2V0dGluZ3MgdGhhdCB3ZSBjdXJyZW50bHkgdXNlKSAqLwogCQlwcml2LT5jdXJyZW50X0JTUyA9IDA7Ci0JCWZvcihpPTA7IGk8cHJpdi0+QlNTX2xpc3RfZW50cmllczsgaSsrKSB7IAorCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+QlNTX2xpc3RfZW50cmllczsgaSsrKSB7CiAJCQlpZiAocHJpdi0+b3BlcmF0aW5nX21vZGUgPT0gcHJpdi0+QlNTaW5mb1tpXS5CU1N0eXBlICYmCi0JCQkgICAgKCghcHJpdi0+d2VwX2lzX29uICYmICFwcml2LT5CU1NpbmZvW2ldLlVzaW5nV0VQKSB8fCAKKwkJCSAgICAoKCFwcml2LT53ZXBfaXNfb24gJiYgIXByaXYtPkJTU2luZm9baV0uVXNpbmdXRVApIHx8CiAJCQkgICAgIChwcml2LT53ZXBfaXNfb24gJiYgcHJpdi0+QlNTaW5mb1tpXS5Vc2luZ1dFUCkpICYmCiAJCQkgICAgIShwcml2LT5CU1NpbmZvW2ldLmNoYW5uZWwgJiAweDgwKSkgewogCQkJCW1heF9yc3NpID0gcHJpdi0+QlNTaW5mb1tpXS5SU1NJOwogCQkJCXByaXYtPmN1cnJlbnRfQlNTID0gbWF4X2luZGV4ID0gaTsKIAkJCX0KLQkJCQogCQl9CiAJCXJldHVybiBtYXhfaW5kZXg7CiAJfQotCQkKLQlmb3IoaT0wOyBpPHByaXYtPkJTU19saXN0X2VudHJpZXM7IGkrKykgeworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPkJTU19saXN0X2VudHJpZXM7IGkrKykgewogCQlpZiAocHJpdi0+U1NJRF9zaXplID09IHByaXYtPkJTU2luZm9baV0uU1NJRHNpemUgJiYKIAkJICAgIG1lbWNtcChwcml2LT5TU0lELCBwcml2LT5CU1NpbmZvW2ldLlNTSUQsIHByaXYtPlNTSURfc2l6ZSkgPT0gMCAmJgogCQkgICAgcHJpdi0+b3BlcmF0aW5nX21vZGUgPT0gcHJpdi0+QlNTaW5mb1tpXS5CU1N0eXBlICYmCkBAIC0yNzgxLDE5ICsyNzk5LDE5IEBACiAJcmV0dXJuIG1heF9pbmRleDsKIH0KIAotCi1zdGF0aWMgdm9pZCBzdG9yZV9ic3NfaW5mbyhzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKLQkJCSAgIHUxNiBjYXBhYmlsaXR5LCB1MTYgYmVhY29uX3BlcmlvZCwgdTggY2hhbm5lbCwgdTggcnNzaSwgCi0JCQkgICB1OCBzc2lkX2xlbiwgdTggKnNzaWQsIGludCBpc19iZWFjb24pCitzdGF0aWMgdm9pZCBzdG9yZV9ic3NfaW5mbyhzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsIHUxNiBjYXBhYmlsaXR5LAorCQkJICAgdTE2IGJlYWNvbl9wZXJpb2QsIHU4IGNoYW5uZWwsIHU4IHJzc2ksIHU4IHNzaWRfbGVuLAorCQkJICAgdTggKnNzaWQsIGludCBpc19iZWFjb24pCiB7CiAJdTggKmJzcyA9IGNhcGFiaWxpdHkgJiBDODAyMTFfTUdNVF9DQVBBQklMSVRZX0VTUyA/IGhlYWRlci0+YWRkcjIgOiBoZWFkZXItPmFkZHIzOwogCWludCBpLCBpbmRleDsKLQkJCi0JZm9yIChpbmRleCA9IC0xLCBpID0gMDsgaSA8IHByaXYtPkJTU19saXN0X2VudHJpZXM7IGkrKykgCi0JCWlmIChtZW1jbXAoYnNzLCBwcml2LT5CU1NpbmZvW2ldLkJTU0lELCA2KSA9PSAwKSAKKworCWZvciAoaW5kZXggPSAtMSwgaSA9IDA7IGkgPCBwcml2LT5CU1NfbGlzdF9lbnRyaWVzOyBpKyspCisJCWlmIChtZW1jbXAoYnNzLCBwcml2LT5CU1NpbmZvW2ldLkJTU0lELCA2KSA9PSAwKQogCQkJaW5kZXggPSBpOwogCi0gICAgICAgIC8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMgCisgICAgICAgIC8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMKIAkgICB3ZSB3aWxsIHVwZGF0ZSB0aGUgQlNTIGVudHJ5IHdpdGggdGhlIGluZm8gZnJvbSB0aGlzIEJTUy4KIAkgICBJZiB3ZSBwcm9jZXNzIGEgYmVhY29uIHdlIHdpbGwgb25seSB1cGRhdGUgUlNTSSAqLwogCkBAIC0yODIwLDggKzI4MzgsOCBAQAogCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID0gSVdfTU9ERV9BREhPQzsKIAllbHNlIGlmIChjYXBhYmlsaXR5ICYgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9FU1MpCiAJCXByaXYtPkJTU2luZm9baW5kZXhdLkJTU3R5cGUgPUlXX01PREVfSU5GUkE7Ci0JCi0JcHJpdi0+QlNTaW5mb1tpbmRleF0ucHJlYW1ibGUgPSBjYXBhYmlsaXR5ICAmIEM4MDIxMV9NR01UX0NBUEFCSUxJVFlfU2hvcnRQcmVhbWJsZSA/IAorCisJcHJpdi0+QlNTaW5mb1tpbmRleF0ucHJlYW1ibGUgPSBjYXBhYmlsaXR5ICYgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9TaG9ydFByZWFtYmxlID8KIAkJU0hPUlRfUFJFQU1CTEUgOiBMT05HX1BSRUFNQkxFOwogfQogCkBAIC0yODMxLDggKzI4NDksOCBAQAogCXUxNiBzdGF0dXMgPSBsZTE2X3RvX2NwdShhdXRoLT5zdGF0dXMpOwogCXUxNiB0cmFuc19zZXFfbm8gPSBsZTE2X3RvX2NwdShhdXRoLT50cmFuc19zZXEpOwogCXUxNiBzeXN0ZW0gPSBsZTE2X3RvX2NwdShhdXRoLT5hbGcpOwotCQotCWlmIChzdGF0dXMgPT0gQzgwMjExX01HTVRfU0NfU3VjY2VzcyAmJiAhcHJpdi0+d2VwX2lzX29uKSB7IAorCisJaWYgKHN0YXR1cyA9PSBDODAyMTFfTUdNVF9TQ19TdWNjZXNzICYmICFwcml2LT53ZXBfaXNfb24pIHsKIAkJLyogbm8gV0VQICovCiAJCWlmIChwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkKSB7CiAJCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkcpOwpAQCAtMjg0MiwyMCArMjg2MCwyMCBAQAogCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9BU1NPQ0lBVElORyk7CiAJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMCk7CiAJCQlyZXR1cm47Ci0JCX0gCisJCX0KIAl9Ci0JCQotCWlmIChzdGF0dXMgPT0gQzgwMjExX01HTVRfU0NfU3VjY2VzcyAmJiBwcml2LT53ZXBfaXNfb24pIHsgCisKKwlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX1N1Y2Nlc3MgJiYgcHJpdi0+d2VwX2lzX29uKSB7CiAJCS8qIFdFUCAqLwogCQlpZiAodHJhbnNfc2VxX25vICE9IHByaXYtPkV4cGVjdGVkQXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtKQogCQkJcmV0dXJuOwotCQkJCQorCiAJCWlmICh0cmFuc19zZXFfbm8gPT0gMHgwMDAyICYmCiAJCSAgICBhdXRoLT5lbF9pZCA9PSBDODAyMTFfTUdNVF9FbGVtZW50SURfQ2hhbGxlbmdlVGV4dCkgewogCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIHN5c3RlbSwgYXV0aC0+Y2hhbGxfdGV4dCwgYXV0aC0+Y2hhbGxfdGV4dF9sZW4pOwogCQkJcmV0dXJuOwogCQl9Ci0JCQorCiAJCWlmICh0cmFuc19zZXFfbm8gPT0gMHgwMDA0KSB7CiAJCQlpZihwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkKSB7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HKTsKQEAgLTI4NjUsMTAgKzI4ODMsMTAgQEAKIAkJCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HKTsKIAkJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMCk7CiAJCQkJcmV0dXJuOwotCQkJfSAKKwkJCX0KIAkJfQotCX0JCQkKLQkKKwl9CisKIAlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX0F1dGhBbGdOb3RTdXBwb3J0ZWQpIHsKIAkJLyogRG8gb3BlbnN5c3RlbSBmaXJzdCwgdGhlbiB0cnkgc2hhcmVka2V5ICovCiAJCWlmIChzeXN0ZW0gPT0gIEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNKSB7CkBAIC0yODc2LDE3ICsyODk0LDE2IEBACiAJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgQzgwMjExX01HTVRfQUFOX1NIQVJFREtFWSwgTlVMTCwgMCk7CiAJCX0gZWxzZSBpZiAocHJpdi0+Y29ubmVjdF90b19hbnlfQlNTKSB7CiAJCQlpbnQgYnNzX2luZGV4OwotCQkJCisKIAkJCXByaXYtPkJTU2luZm9bKGludCkocHJpdi0+Y3VycmVudF9CU1MpXS5jaGFubmVsIHw9IDB4ODA7Ci0JCQkKKwogCQkJaWYgKChic3NfaW5kZXggID0gcmV0cmlldmVfYnNzKHByaXYpKSAhPSAtMSkgewogCQkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7CiAJCQkJcmV0dXJuOwogCQkJfQogCQl9CiAJfQotCQotCQorCiAJcHJpdi0+QXV0aGVudGljYXRpb25SZXF1ZXN0UmV0cnlDbnQgPSAwOwogCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsICBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1IpOwogCXByaXYtPnN0YXRpb25faXNfYXNzb2NpYXRlZCA9IDA7CkBAIC0yOTAyLDM4ICsyOTE5LDQ0IEBACiAJCXU4IGxlbmd0aDsKIAkJdTggcmF0ZXNbNF07CiAJfSAqYXNzX3Jlc3AgPSAoc3RydWN0IGFzc19yZXNwX2Zvcm1hdCAqKXByaXYtPnJ4X2J1ZjsKLQkKLSAgICAgICAJdTE2IHN0YXR1cyA9IGxlMTZfdG9fY3B1KGFzc19yZXNwLT5zdGF0dXMpOworCisJdTE2IHN0YXR1cyA9IGxlMTZfdG9fY3B1KGFzc19yZXNwLT5zdGF0dXMpOwogCXUxNiBhc3NfaWQgPSBsZTE2X3RvX2NwdShhc3NfcmVzcC0+YXNzX2lkKTsKLSAgIAl1MTYgcmF0ZXNfbGVuID0gYXNzX3Jlc3AtPmxlbmd0aCA+IDQgPyA0IDogYXNzX3Jlc3AtPmxlbmd0aDsKLQkKKwl1MTYgcmF0ZXNfbGVuID0gYXNzX3Jlc3AtPmxlbmd0aCA+IDQgPyA0IDogYXNzX3Jlc3AtPmxlbmd0aDsKKwogCWlmIChmcmFtZV9sZW4gPCA4ICsgcmF0ZXNfbGVuKQogCQlyZXR1cm47Ci0JCisKIAlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX1N1Y2Nlc3MpIHsKIAkJaWYgKHN1YnR5cGUgPT0gQzgwMjExX1NVQlRZUEVfTUdNVF9BU1NfUkVTUE9OU0UpCiAJCQlwcml2LT5Bc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCA9IDA7CiAJCWVsc2UKIAkJCXByaXYtPlJlQXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQgPSAwOwotCQkKLQkJYXRtZWxfc2V0X21pYjE2KHByaXYsIE1hY19NZ210X01pYl9UeXBlLCBNQUNfTUdNVF9NSUJfU1RBVElPTl9JRF9QT1MsIGFzc19pZCAmIDB4M2ZmZik7Ci0JCWF0bWVsX3NldF9taWIocHJpdiwgUGh5X01pYl9UeXBlLCBQSFlfTUlCX1JBVEVfU0VUX1BPUywgYXNzX3Jlc3AtPnJhdGVzLCByYXRlc19sZW4pOworCisJCWF0bWVsX3NldF9taWIxNihwcml2LCBNYWNfTWdtdF9NaWJfVHlwZSwKKwkJCQlNQUNfTUdNVF9NSUJfU1RBVElPTl9JRF9QT1MsIGFzc19pZCAmIDB4M2ZmZik7CisJCWF0bWVsX3NldF9taWIocHJpdiwgUGh5X01pYl9UeXBlLAorCQkJICAgICAgUEhZX01JQl9SQVRFX1NFVF9QT1MsIGFzc19yZXNwLT5yYXRlcywgcmF0ZXNfbGVuKTsKIAkJaWYgKHByaXYtPnBvd2VyX21vZGUgPT0gMCkgewogCQkJcHJpdi0+bGlzdGVuX2ludGVydmFsID0gMTsKLQkJCWF0bWVsX3NldF9taWI4KHByaXYsIE1hY19NZ210X01pYl9UeXBlLCBNQUNfTUdNVF9NSUJfUFNfTU9ERV9QT1MsICBBQ1RJVkVfTU9ERSk7Ci0JCQlhdG1lbF9zZXRfbWliMTYocHJpdiwgTWFjX01nbXRfTWliX1R5cGUsIE1BQ19NR01UX01JQl9MSVNURU5fSU5URVJWQUxfUE9TLCAxKTsKKwkJCWF0bWVsX3NldF9taWI4KHByaXYsIE1hY19NZ210X01pYl9UeXBlLAorCQkJCSAgICAgICBNQUNfTUdNVF9NSUJfUFNfTU9ERV9QT1MsIEFDVElWRV9NT0RFKTsKKwkJCWF0bWVsX3NldF9taWIxNihwcml2LCBNYWNfTWdtdF9NaWJfVHlwZSwKKwkJCQkJTUFDX01HTVRfTUlCX0xJU1RFTl9JTlRFUlZBTF9QT1MsIDEpOwogCQl9IGVsc2UgewogCQkJcHJpdi0+bGlzdGVuX2ludGVydmFsID0gMjsKLQkJCWF0bWVsX3NldF9taWI4KHByaXYsIE1hY19NZ210X01pYl9UeXBlLCBNQUNfTUdNVF9NSUJfUFNfTU9ERV9QT1MsICBQU19NT0RFKTsKLQkJCWF0bWVsX3NldF9taWIxNihwcml2LCBNYWNfTWdtdF9NaWJfVHlwZSwgTUFDX01HTVRfTUlCX0xJU1RFTl9JTlRFUlZBTF9QT1MsIDIpOworCQkJYXRtZWxfc2V0X21pYjgocHJpdiwgTWFjX01nbXRfTWliX1R5cGUsCisJCQkJICAgICAgIE1BQ19NR01UX01JQl9QU19NT0RFX1BPUywgIFBTX01PREUpOworCQkJYXRtZWxfc2V0X21pYjE2KHByaXYsIE1hY19NZ210X01pYl9UeXBlLAorCQkJCQlNQUNfTUdNVF9NSUJfTElTVEVOX0lOVEVSVkFMX1BPUywgMik7CiAJCX0KLQkJCisKIAkJcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkID0gMTsKIAkJcHJpdi0+c3RhdGlvbl93YXNfYXNzb2NpYXRlZCA9IDE7CiAJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfUkVBRFkpOwogCQlyZXR1cm47CiAJfQotCQorCiAJaWYgKHN1YnR5cGUgPT0gQzgwMjExX1NVQlRZUEVfTUdNVF9BU1NfUkVTUE9OU0UgJiYKIAkgICAgc3RhdHVzICE9IEM4MDIxMV9NR01UX1NDX0Fzc0RlbmllZEJTU1JhdGUgJiYKIAkgICAgc3RhdHVzICE9IEM4MDIxMV9NR01UX1NDX1N1cHBvcnRDYXBhYmlsaXRpZXMgJiYKQEAgLTI5NDMsNyArMjk2Niw3IEBACiAJCXNlbmRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2LCAwKTsKIAkJcmV0dXJuOwogCX0KLQkJCisKIAlpZiAoc3VidHlwZSA9PSBDODAyMTFfU1VCVFlQRV9NR01UX1JFQVNTX1JFU1BPTlNFICYmCiAJICAgIHN0YXR1cyAhPSBDODAyMTFfTUdNVF9TQ19Bc3NEZW5pZWRCU1NSYXRlICYmCiAJICAgIHN0YXR1cyAhPSBDODAyMTFfTUdNVF9TQ19TdXBwb3J0Q2FwYWJpbGl0aWVzICYmCkBAIC0yOTUzLDE3ICsyOTc2LDE2IEBACiAJCXNlbmRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2LCAxKTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsICBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1IpOwogCXByaXYtPnN0YXRpb25faXNfYXNzb2NpYXRlZCA9IDA7Ci0JCi0JaWYocHJpdi0+Y29ubmVjdF90b19hbnlfQlNTKSB7CisKKwlpZiAocHJpdi0+Y29ubmVjdF90b19hbnlfQlNTKSB7CiAJCWludCBic3NfaW5kZXg7CiAJCXByaXYtPkJTU2luZm9bKGludCkocHJpdi0+Y3VycmVudF9CU1MpXS5jaGFubmVsIHw9IDB4ODA7Ci0JCQotCQlpZiAoKGJzc19pbmRleCA9IHJldHJpZXZlX2Jzcyhwcml2KSkgIT0gLTEpIAorCisJCWlmICgoYnNzX2luZGV4ID0gcmV0cmlldmVfYnNzKHByaXYpKSAhPSAtMSkKIAkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7Ci0JCQogCX0KIH0KIApAQCAtMjk3Nyw3ICsyOTk5LDcgQEAKIAkvKiBUaGUgV1BBIHN0dWZmIGNhcmVzIGFib3V0IHRoZSBjdXJyZW50IEFQIGFkZHJlc3MgKi8KIAlpZiAocHJpdi0+dXNlX3dwYSkKIAkJYnVpbGRfd3BhX21pYihwcml2KTsKLQkKKwogCS8qIFdoZW4gc3dpdGNoaW5nIHRvIEFkSG9jIHR1cm4gT0ZGIFBvd2VyIFNhdmUgaWYgbmVlZGVkICovCiAKIAlpZiAoYnNzLT5CU1N0eXBlID09IElXX01PREVfQURIT0MgJiYKQEAgLTI5ODUsMjUgKzMwMDcsMjggQEAKIAkgICAgcHJpdi0+cG93ZXJfbW9kZSkgewogCQlwcml2LT5wb3dlcl9tb2RlID0gMDsKIAkJcHJpdi0+bGlzdGVuX2ludGVydmFsID0gMTsKLQkJYXRtZWxfc2V0X21pYjgocHJpdiwgTWFjX01nbXRfTWliX1R5cGUsIE1BQ19NR01UX01JQl9QU19NT0RFX1BPUywgIEFDVElWRV9NT0RFKTsKLQkJYXRtZWxfc2V0X21pYjE2KHByaXYsIE1hY19NZ210X01pYl9UeXBlLCBNQUNfTUdNVF9NSUJfTElTVEVOX0lOVEVSVkFMX1BPUywgMSk7CisJCWF0bWVsX3NldF9taWI4KHByaXYsIE1hY19NZ210X01pYl9UeXBlLAorCQkJICAgICAgIE1BQ19NR01UX01JQl9QU19NT0RFX1BPUywgIEFDVElWRV9NT0RFKTsKKwkJYXRtZWxfc2V0X21pYjE2KHByaXYsIE1hY19NZ210X01pYl9UeXBlLAorCQkJCU1BQ19NR01UX01JQl9MSVNURU5fSU5URVJWQUxfUE9TLCAxKTsKIAl9Ci0JCQorCiAJcHJpdi0+b3BlcmF0aW5nX21vZGUgPSBic3MtPkJTU3R5cGU7Ci0JcHJpdi0+Y2hhbm5lbCA9IGJzcy0+Y2hhbm5lbCAmIDB4N2Y7IAkKKwlwcml2LT5jaGFubmVsID0gYnNzLT5jaGFubmVsICYgMHg3ZjsKIAlwcml2LT5iZWFjb25fcGVyaW9kID0gYnNzLT5iZWFjb25fcGVyaW9kOwotCQorCiAJaWYgKHByaXYtPnByZWFtYmxlICE9IGJzcy0+cHJlYW1ibGUpIHsKIAkJcHJpdi0+cHJlYW1ibGUgPSBic3MtPnByZWFtYmxlOwotCQlhdG1lbF9zZXRfbWliOChwcml2LCBMb2NhbF9NaWJfVHlwZSwgTE9DQUxfTUlCX1BSRUFNQkxFX1RZUEUsIGJzcy0+cHJlYW1ibGUpOworCQlhdG1lbF9zZXRfbWliOChwcml2LCBMb2NhbF9NaWJfVHlwZSwKKwkJCSAgICAgICBMT0NBTF9NSUJfUFJFQU1CTEVfVFlQRSwgYnNzLT5wcmVhbWJsZSk7CiAJfQotCQorCiAJaWYgKCFwcml2LT53ZXBfaXNfb24gJiYgYnNzLT5Vc2luZ1dFUCkgewogCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1IpOwogCQlwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgPSAwOwogCQlyZXR1cm47CiAJfQotCQkKKwogCWlmIChwcml2LT53ZXBfaXNfb24gJiYgIWJzcy0+VXNpbmdXRVApIHsKIAkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SKTsKIAkJcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkID0gMDsKQEAgLTMwMTEsMzAgKzMwMzYsMjggQEAKIAl9CiAKIAlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HKTsKLQkKKwogCWlmIChwcml2LT5vcGVyYXRpbmdfbW9kZSA9PSBJV19NT0RFX0lORlJBKQogCQlqb2luKHByaXYsIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFKTsKLQllbHNlIAorCWVsc2UKIAkJam9pbihwcml2LCBCU1NfVFlQRV9BRF9IT0MpOwogfQogCi0KIHN0YXRpYyB2b2lkIHJlc3RhcnRfc2VhcmNoKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2KQogewogCWludCBic3NfaW5kZXg7Ci0JCisKIAlpZiAoIXByaXYtPmNvbm5lY3RfdG9fYW55X0JTUykgewogCQlhdG1lbF9zY2FuKHByaXYsIDEpOwogCX0gZWxzZSB7CiAJCXByaXYtPkJTU2luZm9bKGludCkocHJpdi0+Y3VycmVudF9CU1MpXS5jaGFubmVsIHw9IDB4ODA7Ci0JCQotCQlpZiAoKGJzc19pbmRleCA9IHJldHJpZXZlX2Jzcyhwcml2KSkgIT0gLTEpIAorCisJCWlmICgoYnNzX2luZGV4ID0gcmV0cmlldmVfYnNzKHByaXYpKSAhPSAtMSkKIAkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7CiAJCWVsc2UKIAkJCWF0bWVsX3NjYW4ocHJpdiwgMCk7Ci0JCQotCX0gCi19CQorCX0KK30KIAogc3RhdGljIHZvaWQgc21vb3RoX3Jzc2koc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4IHJzc2kpCiB7CkBAIC0zMDUwLDIxICszMDczLDIxIEBACiAJfQogCiAJcnNzaSA9IHJzc2kgKiAxMDAgLyBtYXhfcnNzaTsKLQlpZigocnNzaSArIG9sZCkgJSAyKQotCQlwcml2LT53c3RhdHMucXVhbC5sZXZlbCA9ICAoKHJzc2kgKyBvbGQpLzIpICsgMTsKKwlpZiAoKHJzc2kgKyBvbGQpICUgMikKKwkJcHJpdi0+d3N0YXRzLnF1YWwubGV2ZWwgPSAocnNzaSArIG9sZCkgLyAyICsgMTsKIAllbHNlCi0JCXByaXYtPndzdGF0cy5xdWFsLmxldmVsID0gICgocnNzaSArIG9sZCkvMik7CQkKKwkJcHJpdi0+d3N0YXRzLnF1YWwubGV2ZWwgPSAocnNzaSArIG9sZCkgLyAyOwogCXByaXYtPndzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOwogCXByaXYtPndzdGF0cy5xdWFsLnVwZGF0ZWQgJj0gfklXX1FVQUxfTEVWRUxfSU5WQUxJRDsKIH0KIAogc3RhdGljIHZvaWQgYXRtZWxfc21vb3RoX3F1YWwoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aW1lX2RpZmYgPSAoamlmZmllcyAtIHByaXYtPmxhc3RfcXVhbCkvSFo7CisJdW5zaWduZWQgbG9uZyB0aW1lX2RpZmYgPSAoamlmZmllcyAtIHByaXYtPmxhc3RfcXVhbCkgLyBIWjsKIAl3aGlsZSAodGltZV9kaWZmLS0pIHsKIAkJcHJpdi0+bGFzdF9xdWFsICs9IEhaOwotCQlwcml2LT53c3RhdHMucXVhbC5xdWFsID0gcHJpdi0+d3N0YXRzLnF1YWwucXVhbC8yOwotCQlwcml2LT53c3RhdHMucXVhbC5xdWFsICs9IAorCQlwcml2LT53c3RhdHMucXVhbC5xdWFsID0gcHJpdi0+d3N0YXRzLnF1YWwucXVhbCAvIDI7CisJCXByaXYtPndzdGF0cy5xdWFsLnF1YWwgKz0KIAkJCXByaXYtPmJlYWNvbnNfdGhpc19zZWMgKiBwcml2LT5iZWFjb25fcGVyaW9kICogKHByaXYtPndzdGF0cy5xdWFsLmxldmVsICsgMTAwKSAvIDQwMDA7CiAJCXByaXYtPmJlYWNvbnNfdGhpc19zZWMgPSAwOwogCX0KQEAgLTMwNzMsMTUgKzMwOTYsMTcgQEAKIH0KIAogLyogZGVhbHMgd2l0aCBpbmNvbWluZyBtYW5hZ21lbnQgZnJhbWVzLiAqLwotc3RhdGljIHZvaWQgYXRtZWxfbWFuYWdlbWVudF9mcmFtZShzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwgCi0JCSAgICAgIHUxNiBmcmFtZV9sZW4sIHU4IHJzc2kpCitzdGF0aWMgdm9pZCBhdG1lbF9tYW5hZ2VtZW50X2ZyYW1lKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCisJCQkJICAgdTE2IGZyYW1lX2xlbiwgdTggcnNzaSkKIHsKIAl1MTYgc3VidHlwZTsKLQkKLQlzd2l0Y2ggKHN1YnR5cGUgPSBsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCWNhc2UgQzgwMjExX1NVQlRZUEVfTUdNVF9CRUFDT04gOgorCisJc3VidHlwZSA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOworCXN3aXRjaCAoc3VidHlwZSkgeworCWNhc2UgQzgwMjExX1NVQlRZUEVfTUdNVF9CRUFDT046CiAJY2FzZSBDODAyMTFfU1VCVFlQRV9NR01UX1Byb2JlUmVzcG9uc2U6Ci0JCQorCiAJCS8qIGJlYWNvbiBmcmFtZSBoYXMgbXVsdGlwbGUgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyAtCiAJCSAgIG5ldmVyIGxldCBhbiBlbmdpbmVlciBsb29zZSB3aXRoIGEgZGF0YSBzdHJ1Y3R1cmUgZGVzaWduLiAqLwogCQl7CkBAIC0zMDk5LDcgKzMxMjQsNyBAQAogCQkJCXU4IGRzX2xlbmd0aDsKIAkJCQkvKiBkcyBoZXJlICovCiAJCQl9ICpiZWFjb24gPSAoc3RydWN0IGJlYWNvbl9mb3JtYXQgKilwcml2LT5yeF9idWY7Ci0JCQkKKwogCQkJdTggY2hhbm5lbCwgcmF0ZXNfbGVuZ3RoLCBzc2lkX2xlbmd0aDsKIAkJCXU2NCB0aW1lc3RhbXAgPSBsZTY0X3RvX2NwdShiZWFjb24tPnRpbWVzdGFtcCk7CiAJCQl1MTYgYmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUoYmVhY29uLT5pbnRlcnZhbCk7CkBAIC0zMTA3LDcgKzMxMzIsNyBAQAogCQkJdTggKmJlYWNvbnAgPSBwcml2LT5yeF9idWY7CiAJCQlzc2lkX2xlbmd0aCA9IGJlYWNvbi0+c3NpZF9sZW5ndGg7CiAJCQkvKiB0aGlzIGJsb3dzIGNodW5rcy4gKi8KLQkJCWlmIChmcmFtZV9sZW4gPCAxNCB8fCBmcmFtZV9sZW4gPCBzc2lkX2xlbmd0aCArIDE1KSAKKwkJCWlmIChmcmFtZV9sZW4gPCAxNCB8fCBmcmFtZV9sZW4gPCBzc2lkX2xlbmd0aCArIDE1KQogCQkJCXJldHVybjsKIAkJCXJhdGVzX2xlbmd0aCA9IGJlYWNvbnBbYmVhY29uLT5zc2lkX2xlbmd0aCArIDE1XTsKIAkJCWlmIChmcmFtZV9sZW4gPCBzc2lkX2xlbmd0aCArIHJhdGVzX2xlbmd0aCArIDE4KQpAQCAtMzExNSwxMCArMzE0MCwxMCBAQAogCQkJaWYgKHNzaWRfbGVuZ3RoID4gIE1BWF9TU0lEX0xFTkdUSCkKIAkJCQlyZXR1cm47CiAJCQljaGFubmVsID0gYmVhY29ucFtzc2lkX2xlbmd0aCArIHJhdGVzX2xlbmd0aCArIDE4XTsKLQkJICAgICAgIAorCiAJCQlpZiAocHJpdi0+c3RhdGlvbl9zdGF0ZSA9PSBTVEFUSU9OX1NUQVRFX1JFQURZKSB7CiAJCQkJc21vb3RoX3Jzc2kocHJpdiwgcnNzaSk7Ci0JCQkJaWYgKGlzX2ZyYW1lX2Zyb21fY3VycmVudF9ic3MocHJpdiwgaGVhZGVyKSkgeyAKKwkJCQlpZiAoaXNfZnJhbWVfZnJvbV9jdXJyZW50X2Jzcyhwcml2LCBoZWFkZXIpKSB7CiAJCQkJCXByaXYtPmJlYWNvbnNfdGhpc19zZWMrKzsKIAkJCQkJYXRtZWxfc21vb3RoX3F1YWwocHJpdik7CiAJCQkJCWlmIChwcml2LT5sYXN0X2JlYWNvbl90aW1lc3RhbXApIHsKQEAgLTMxMzIsNDEgKzMxNTcsNDMgQEAKIAkJCQkJaGFuZGxlX2JlYWNvbl9wcm9iZShwcml2LCBjYXBhYmlsaXR5LCBjaGFubmVsKTsKIAkJCQl9CiAJCQl9Ci0JCQkKLQkJCWlmIChwcml2LT5zdGF0aW9uX3N0YXRlID09IFNUQVRJT05fU1RBVEVfU0NBTk5JTkcgKSAKLQkJCQlzdG9yZV9ic3NfaW5mbyhwcml2LCBoZWFkZXIsIGNhcGFiaWxpdHksIGJlYWNvbl9pbnRlcnZhbCwgY2hhbm5lbCwKLQkJCQkJICAgICAgIHJzc2ksIHNzaWRfbGVuZ3RoLCAmYmVhY29uLT5yYXRlc19lbF9pZCwKLQkJCQkJICAgICAgIHN1YnR5cGUgPT0gQzgwMjExX1NVQlRZUEVfTUdNVF9CRUFDT04pIDsKKworCQkJaWYgKHByaXYtPnN0YXRpb25fc3RhdGUgPT0gU1RBVElPTl9TVEFURV9TQ0FOTklORykKKwkJCQlzdG9yZV9ic3NfaW5mbyhwcml2LCBoZWFkZXIsIGNhcGFiaWxpdHksCisJCQkJCSAgICAgICBiZWFjb25faW50ZXJ2YWwsIGNoYW5uZWwsIHJzc2ksCisJCQkJCSAgICAgICBzc2lkX2xlbmd0aCwKKwkJCQkJICAgICAgICZiZWFjb24tPnJhdGVzX2VsX2lkLAorCQkJCQkgICAgICAgc3VidHlwZSA9PSBDODAyMTFfU1VCVFlQRV9NR01UX0JFQUNPTik7CiAJCX0KIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSBDODAyMTFfU1VCVFlQRV9NR01UX0F1dGhlbnRpY2F0aW9uOgogCiAJCWlmIChwcml2LT5zdGF0aW9uX3N0YXRlID09IFNUQVRJT05fU1RBVEVfQVVUSEVOVElDQVRJTkcpCiAJCQlhdXRoZW50aWNhdGUocHJpdiwgZnJhbWVfbGVuKTsKLQkKKwogCQlicmVhazsKLQkJCisKIAljYXNlIEM4MDIxMV9TVUJUWVBFX01HTVRfQVNTX1JFU1BPTlNFOgogCWNhc2UgQzgwMjExX1NVQlRZUEVfTUdNVF9SRUFTU19SRVNQT05TRToKLQkJCi0JCWlmIChwcml2LT5zdGF0aW9uX3N0YXRlID09IFNUQVRJT05fU1RBVEVfQVNTT0NJQVRJTkcgfHwgCisKKwkJaWYgKHByaXYtPnN0YXRpb25fc3RhdGUgPT0gU1RBVElPTl9TVEFURV9BU1NPQ0lBVElORyB8fAogCQkgICAgcHJpdi0+c3RhdGlvbl9zdGF0ZSA9PSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkcpCiAJCQlhc3NvY2lhdGUocHJpdiwgZnJhbWVfbGVuLCBzdWJ0eXBlKTsKLQkJCisKIAkJYnJlYWs7CiAKIAljYXNlIEM4MDIxMV9TVUJUWVBFX01HTVRfRElTQVNTT1NJQVRJT046Ci0JCWlmIChwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgJiYgCi0JCSAgICBwcml2LT5vcGVyYXRpbmdfbW9kZSA9PSBJV19NT0RFX0lORlJBICYmIAorCQlpZiAocHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkICYmCisJCSAgICBwcml2LT5vcGVyYXRpbmdfbW9kZSA9PSBJV19NT0RFX0lORlJBICYmCiAJCSAgICBpc19mcmFtZV9mcm9tX2N1cnJlbnRfYnNzKHByaXYsIGhlYWRlcikpIHsKIAkJCXByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQgPSAwOwogCQkJcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkID0gMDsKLQkJCQorCiAJCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HKTsKIAkJCWpvaW4ocHJpdiwgQlNTX1RZUEVfSU5GUkFTVFJVQ1RVUkUpOwogCQl9Ci0JCQorCiAJCWJyZWFrOwogCiAJY2FzZSBDODAyMTFfU1VCVFlQRV9NR01UX0RlYXV0aGVudGljYXRpb246CkBAIC0zMTc3LDcgKzMyMDQsNyBAQAogCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9KT0lOTklORyk7CiAJCQlqb2luKHByaXYsIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFKTsKIAkJfQotCQkKKwogCQlicmVhazsKIAl9CiB9CkBAIC0zMTg1LDc2ICszMjEyLDczIEBACiAvKiBydW4gd2hlbiB0aW1lciBleHBpcmVzICovCiBzdGF0aWMgdm9pZCBhdG1lbF9tYW5hZ2VtZW50X3RpbWVyKHVfbG9uZyBhKQogewotICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGE7Ci0gIHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgCi0gIC8qIENoZWNrIGlmIHRoZSBjYXJkIGhhcyBiZWVuIHlhbmtlZC4gKi8KLSAgaWYgKHByaXYtPmNhcmQgJiYgcHJpdi0+cHJlc2VudF9jYWxsYmFjayAmJiAKLSAgICAgICEoKnByaXYtPnByZXNlbnRfY2FsbGJhY2spKHByaXYtPmNhcmQpKQotCSAgcmV0dXJuOwotICAKLSAgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmlycWxvY2ssIGZsYWdzKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGE7CisJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgc3dpdGNoIChwcml2LT5zdGF0aW9uX3N0YXRlKSB7Ci0JICAKLSAgY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOgotCSAgaWYgKHByaXYtPkF1dGhlbnRpY2F0aW9uUmVxdWVzdFJldHJ5Q250ID49IE1BWF9BVVRIRU5USUNBVElPTl9SRVRSSUVTKSB7Ci0JCSAgYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SKTsKLQkJICBwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgPSAwOwotCQkgIHByaXYtPkF1dGhlbnRpY2F0aW9uUmVxdWVzdFJldHJ5Q250ID0gMDsKLQkJICByZXN0YXJ0X3NlYXJjaChwcml2KTsKLQkgIH0gZWxzZSB7Ci0JCSAgcHJpdi0+QXV0aGVudGljYXRpb25SZXF1ZXN0UmV0cnlDbnQrKzsKLQkJICBwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtID0gMHgwMDAxOwotCQkgIG1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7Ci0JCSAgc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNLCBOVUxMLCAwKTsKKwkvKiBDaGVjayBpZiB0aGUgY2FyZCBoYXMgYmVlbiB5YW5rZWQuICovCisJaWYgKHByaXYtPmNhcmQgJiYgcHJpdi0+cHJlc2VudF9jYWxsYmFjayAmJgorCQkhKCpwcml2LT5wcmVzZW50X2NhbGxiYWNrKShwcml2LT5jYXJkKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmlycWxvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAocHJpdi0+c3RhdGlvbl9zdGF0ZSkgeworCisJY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOgorCQlpZiAocHJpdi0+QXV0aGVudGljYXRpb25SZXF1ZXN0UmV0cnlDbnQgPj0gTUFYX0FVVEhFTlRJQ0FUSU9OX1JFVFJJRVMpIHsKKwkJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfTUdNVF9FUlJPUik7CisJCQlwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgPSAwOworCQkJcHJpdi0+QXV0aGVudGljYXRpb25SZXF1ZXN0UmV0cnlDbnQgPSAwOworCQkJcmVzdGFydF9zZWFyY2gocHJpdik7CisJCX0gZWxzZSB7CisJCQlwcml2LT5BdXRoZW50aWNhdGlvblJlcXVlc3RSZXRyeUNudCsrOworCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAwMTsKKwkJCW1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7CisJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgQzgwMjExX01HTVRfQUFOX09QRU5TWVNURU0sIE5VTEwsIDApOwogCSAgfQotCSAgCiAJICBicmVhazsKIAotICBjYXNlIFNUQVRJT05fU1RBVEVfQVNTT0NJQVRJTkc6Ci0JICBpZiAocHJpdi0+QXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQgPT0gTUFYX0FTU09DSUFUSU9OX1JFVFJJRVMpIHsKLQkJICBhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1IpOwotCQkgIHByaXYtPnN0YXRpb25faXNfYXNzb2NpYXRlZCA9IDA7Ci0JCSAgcHJpdi0+QXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQgPSAwOwotCQkgIHJlc3RhcnRfc2VhcmNoKHByaXYpOwotCSAgfSBlbHNlIHsKLQkJICBwcml2LT5Bc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCsrOwotCQkgIG1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7Ci0JCSAgc2VuZF9hc3NvY2lhdGlvbl9yZXF1ZXN0KHByaXYsIDApOwotCSAgfQorCWNhc2UgU1RBVElPTl9TVEFURV9BU1NPQ0lBVElORzoKKwkJaWYgKHByaXYtPkFzc29jaWF0aW9uUmVxdWVzdFJldHJ5Q250ID09IE1BWF9BU1NPQ0lBVElPTl9SRVRSSUVTKSB7CisJCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1IpOworCQkJcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkID0gMDsKKwkJCXByaXYtPkFzc29jaWF0aW9uUmVxdWVzdFJldHJ5Q250ID0gMDsKKwkJCXJlc3RhcnRfc2VhcmNoKHByaXYpOworCQl9IGVsc2UgeworCQkJcHJpdi0+QXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQrKzsKKwkJCW1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7CisJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMCk7CisJCX0KKwkgIGJyZWFrOwogCi0JICBicmVhazsKLQkJICAKLSAgY2FzZSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkc6CQotCSAgaWYgKHByaXYtPlJlQXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQgPT0gTUFYX0FTU09DSUFUSU9OX1JFVFJJRVMpIHsKLQkJICBhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1IpOwotCQkgIHByaXYtPnN0YXRpb25faXNfYXNzb2NpYXRlZCA9IDA7Ci0JCSAgcHJpdi0+UmVBc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCA9IDA7Ci0JCSAgcmVzdGFydF9zZWFyY2gocHJpdik7Ci0JICB9IGVsc2UgewotCQkgIHByaXYtPlJlQXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQrKzsKLQkJICBtb2RfdGltZXIoJnByaXYtPm1hbmFnZW1lbnRfdGltZXIsIGppZmZpZXMgKyBNR01UX0pJRkZJRVMpOwotCQkgIHNlbmRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2LCAxKTsKLQkgIH0KKwljYXNlIFNUQVRJT05fU1RBVEVfUkVBU1NPQ0lBVElORzoKKwkJaWYgKHByaXYtPlJlQXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQgPT0gTUFYX0FTU09DSUFUSU9OX1JFVFJJRVMpIHsKKwkJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfTUdNVF9FUlJPUik7CisJCQlwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgPSAwOworCQkJcHJpdi0+UmVBc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCA9IDA7CisJCQlyZXN0YXJ0X3NlYXJjaChwcml2KTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPlJlQXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQrKzsKKwkJCW1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7CisJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMSk7CisJCX0KKwkJYnJlYWs7CiAKLQkgIGJyZWFrOwotICAKLSAgZGVmYXVsdDoKLQkgIGJyZWFrOwotICB9Ci0gIAotICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pcnFsb2NrLCBmbGFncyk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aXJxbG9jaywgZmxhZ3MpOwogfQotICAKKwogc3RhdGljIHZvaWQgYXRtZWxfY29tbWFuZF9pcnEoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYpCiB7CiAJdTggc3RhdHVzID0gYXRtZWxfcm1lbTgocHJpdiwgYXRtZWxfY28ocHJpdiwgQ01EX0JMT0NLX1NUQVRVU19PRkZTRVQpKTsKIAl1OCBjb21tYW5kID0gYXRtZWxfcm1lbTgocHJpdiwgYXRtZWxfY28ocHJpdiwgQ01EX0JMT0NLX0NPTU1BTkRfT0ZGU0VUKSk7CiAJaW50IGZhc3Rfc2NhbjsKLQkKLQlpZiAoc3RhdHVzID09IENNRF9TVEFUVVNfSURMRSB8fCAKKworCWlmIChzdGF0dXMgPT0gQ01EX1NUQVRVU19JRExFIHx8CiAJICAgIHN0YXR1cyA9PSBDTURfU1RBVFVTX0lOX1BST0dSRVNTKQogCQlyZXR1cm47CiAKQEAgLTMyNjYsMjAgKzMyOTAsMjAgQEAKIAkJCWF0bWVsX2dldF9taWIocHJpdiwgTWFjX01nbXRfTWliX1R5cGUsIE1BQ19NR01UX01JQl9DVVJfQlNTSURfUE9TLAogCQkJCSAgICAgICh1OCAqKXByaXYtPkN1cnJlbnRCU1NJRCwgNik7CiAJCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX1JFQURZKTsKLQkJfQkJCQorCQl9CiAJCWJyZWFrOwotCQkKKwogCWNhc2UgQ01EX1NjYW46CiAJCWZhc3Rfc2NhbiA9IHByaXYtPmZhc3Rfc2NhbjsKIAkJcHJpdi0+ZmFzdF9zY2FuID0gMDsKLQkJCisKIAkJaWYgKHN0YXR1cyAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CiAJCQlhdG1lbF9zY2FuKHByaXYsIDEpOwogCQl9IGVsc2UgewogCQkJaW50IGJzc19pbmRleCA9IHJldHJpZXZlX2Jzcyhwcml2KTsKIAkJCWlmIChic3NfaW5kZXggIT0gLTEpIHsKIAkJCQlhdG1lbF9qb2luX2Jzcyhwcml2LCBic3NfaW5kZXgpOwotCQkJfSBlbHNlIGlmIChwcml2LT5vcGVyYXRpbmdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmIAorCQkJfSBlbHNlIGlmIChwcml2LT5vcGVyYXRpbmdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmCiAJCQkJICAgcHJpdi0+U1NJRF9zaXplICE9IDApIHsKIAkJCQlzdGFydChwcml2LCBCU1NfVFlQRV9BRF9IT0MpOwogCQkJfSBlbHNlIHsKQEAgLTMyODksMTYgKzMzMTMsMTYgQEAKIAkJCXByaXYtPnNpdGVfc3VydmV5X3N0YXRlID0gU0lURV9TVVJWRVlfQ09NUExFVEVEOwogCQl9CiAJCWJyZWFrOwotCQkKKwogCWNhc2UgQ01EX1NpdGVTdXJ2ZXk6CiAJCXByaXYtPmZhc3Rfc2NhbiA9IDA7Ci0JCQorCiAJCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19DT01QTEVURSkKIAkJCXJldHVybjsKLQkJCisKIAkJcHJpdi0+c2l0ZV9zdXJ2ZXlfc3RhdGUgPSBTSVRFX1NVUlZFWV9DT01QTEVURUQ7CiAJCWlmIChwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQpIHsKLQkJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfUkVBRFkpOwkJCQkKKwkJCWF0bWVsX2VudGVyX3N0YXRlKHByaXYsIFNUQVRJT05fU1RBVEVfUkVBRFkpOwogCQl9IGVsc2UgewogCQkJYXRtZWxfc2Nhbihwcml2LCAxKTsKIAkJfQpAQCAtMzMxMiwxNiArMzMzNiwxNSBAQAogCQkJfSBlbHNlIHsKIAkJCQlwcml2LT5BdXRoZW50aWNhdGlvblJlcXVlc3RSZXRyeUNudCA9IDA7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9BVVRIRU5USUNBVElORyk7Ci0JCQkJCisKIAkJCQltb2RfdGltZXIoJnByaXYtPm1hbmFnZW1lbnRfdGltZXIsIGppZmZpZXMgKyBNR01UX0pJRkZJRVMpOwogCQkJCXByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSAweDAwMDE7CiAJCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9TSEFSRURLRVksIE5VTEwsIDApOwogCQkJfQogCQkJcmV0dXJuOwogCQl9Ci0JCQorCiAJCWF0bWVsX3NjYW4ocHJpdiwgMSk7Ci0JCQogCX0KIH0KIApAQCAtMzMzMywyMCArMzM1NiwyMCBAQAogCiAJaWYgKHByaXYtPmNhcmRfdHlwZSA9PSBDQVJEX1RZUEVfU1BJX0ZMQVNIKQogCQlhdG1lbF9zZXRfZ2NyKHByaXYtPmRldiwgR0NSX1JFTUFQKTsKLQkKKwogCS8qIHdha2UgdXAgb24tYm9hcmQgcHJvY2Vzc29yICovCiAJYXRtZWxfY2xlYXJfZ2NyKHByaXYtPmRldiwgMHgwMDQwKTsKIAlhdG1lbF93cml0ZTE2KHByaXYtPmRldiwgQlNSLCBCU1NfU1JBTSk7Ci0JCisKIAlpZiAocHJpdi0+Y2FyZF90eXBlID09IENBUkRfVFlQRV9TUElfRkxBU0gpCiAJCW1kZWxheSgxMDApOwogCiAJLyogYW5kIHdhaXQgZm9yIGl0ICovCi0JZm9yIChpID0gIExPT1BfUkVUUllfTElNSVQ7IGk7IGktLSkgeworCWZvciAoaSA9IExPT1BfUkVUUllfTElNSVQ7IGk7IGktLSkgewogCQltcjEgPSBhdG1lbF9yZWFkMTYocHJpdi0+ZGV2LCBNUjEpOwogCQltcjMgPSBhdG1lbF9yZWFkMTYocHJpdi0+ZGV2LCBNUjMpOwotCQkKLQkJaWYgKG1yMyAmIE1BQ19CT09UX0NPTVBMRVRFKSAKKworCQlpZiAobXIzICYgTUFDX0JPT1RfQ09NUExFVEUpCiAJCQlicmVhazsKIAkJaWYgKG1yMSAmIE1BQ19CT09UX0NPTVBMRVRFICYmCiAJCSAgICBwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0NBUkQpCkBAIC0zMzU3LDM1ICszMzgwLDM2IEBACiAJCXByaW50ayhLRVJOX0FMRVJUICIlczogTUFDIGZhaWxlZCB0byBib290LlxuIiwgcHJpdi0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQotCQkKKwogCWlmICgocHJpdi0+aG9zdF9pbmZvX2Jhc2UgPSBhdG1lbF9yZWFkMTYocHJpdi0+ZGV2LCBNUjIpKSA9PSAweGZmZmYpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiBjYXJkIG1pc3NpbmcuXG4iLCBwcml2LT5kZXYtPm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JCi0JLyogbm93IGNoZWNrIGZvciBjb21wbGV0aW9uIG9mIE1BQyBpbml0aWFsaXphdGlvbiB0aHJvdWdoICAKLQkgICB0aGUgRnVuQ3RybCBmaWVsZCBvZiB0aGUgSUZBQ0UsIHBvbGwgTVIxIHRvIGRldGVjdCBjb21wbGV0aW9uIG9mCSAgCi0JICAgTUFDIGluaXRpYWxpemF0aW9uLCBjaGVjayBjb21wbGV0aW9uIHN0YXR1cywgc2V0IGludGVycnVwdCBtYXNrLCAgCi0JICAgZW5hYmxlcyBpbnRlcnJ1cHRzIGFuZCBjYWxscyBUeCBhbmQgUnggaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovICAKLQkKKworCS8qIG5vdyBjaGVjayBmb3IgY29tcGxldGlvbiBvZiBNQUMgaW5pdGlhbGl6YXRpb24gdGhyb3VnaAorCSAgIHRoZSBGdW5DdHJsIGZpZWxkIG9mIHRoZSBJRkFDRSwgcG9sbCBNUjEgdG8gZGV0ZWN0IGNvbXBsZXRpb24gb2YKKwkgICBNQUMgaW5pdGlhbGl6YXRpb24sIGNoZWNrIGNvbXBsZXRpb24gc3RhdHVzLCBzZXQgaW50ZXJydXB0IG1hc2ssCisJICAgZW5hYmxlcyBpbnRlcnJ1cHRzIGFuZCBjYWxscyBUeCBhbmQgUnggaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCisKIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9GVU5DX0NUUkxfT0ZGU0VUKSwgRlVOQ19DVFJMX0lOSVRfQ09NUExFVEUpOwotCQotCWZvciAoaSA9ICBMT09QX1JFVFJZX0xJTUlUOyBpOyBpLS0pIHsKKworCWZvciAoaSA9IExPT1BfUkVUUllfTElNSVQ7IGk7IGktLSkgewogCQltcjEgPSBhdG1lbF9yZWFkMTYocHJpdi0+ZGV2LCBNUjEpOwogCQltcjMgPSBhdG1lbF9yZWFkMTYocHJpdi0+ZGV2LCBNUjMpOwotCQkKLQkJaWYgKG1yMyAmIE1BQ19JTklUX0NPTVBMRVRFKSAKKworCQlpZiAobXIzICYgTUFDX0lOSVRfQ09NUExFVEUpCiAJCQlicmVhazsKIAkJaWYgKG1yMSAmIE1BQ19JTklUX0NPTVBMRVRFICYmCiAJCSAgICBwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0NBUkQpCiAJCQlicmVhazsKIAl9Ci0JCisKIAlpZiAoaSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUICIlczogTUFDIGZhaWxlZCB0byBpbml0aWFsaXNlLlxuIiwgcHJpdi0+ZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiBNQUMgZmFpbGVkIHRvIGluaXRpYWxpc2UuXG4iLAorCQkJCXByaXYtPmRldi0+bmFtZSk7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCS8qIENoZWNrIGZvciBNQUNfSU5JVF9PSyBvbmx5IG9uIHRoZSByZWdpc3RlciB0aGF0IHRoZSBNQUNfSU5JVF9PSyB3YXMgc2V0ICovCiAJaWYgKChtcjMgJiBNQUNfSU5JVF9DT01QTEVURSkgJiYKIAkgICAgIShhdG1lbF9yZWFkMTYocHJpdi0+ZGV2LCBNUjMpICYgTUFDX0lOSVRfT0spKSB7CkBAIC0zMzk4LDkgKzM0MjIsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhdG1lbF9jb3B5X3RvX2hvc3QocHJpdi0+ZGV2LCAodW5zaWduZWQgY2hhciAqKWlmYWNlLCAKKwlhdG1lbF9jb3B5X3RvX2hvc3QocHJpdi0+ZGV2LCAodW5zaWduZWQgY2hhciAqKWlmYWNlLAogCQkJICAgcHJpdi0+aG9zdF9pbmZvX2Jhc2UsIHNpemVvZigqaWZhY2UpKTsKLSAgICAgICAgCisKIAlpZmFjZS0+dHhfYnVmZl9wb3MgPSBsZTE2X3RvX2NwdShpZmFjZS0+dHhfYnVmZl9wb3MpOwogCWlmYWNlLT50eF9idWZmX3NpemUgPSBsZTE2X3RvX2NwdShpZmFjZS0+dHhfYnVmZl9zaXplKTsKIAlpZmFjZS0+dHhfZGVzY19wb3MgPSBsZTE2X3RvX2NwdShpZmFjZS0+dHhfZGVzY19wb3MpOwpAQCAtMzQyNCwxNiArMzQ0OCwxNiBAQAogewogCWludCByYyA9IDA7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCSAKKwogCS8qIHJlc2V0IHBjY2FyZCAqLwotCWlmIChwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0NBUkQpIAorCWlmIChwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0NBUkQpCiAJCWF0bWVsX3dyaXRlMTYoZGV2LCBHQ1IsIDB4MDA2MCk7Ci0JCisKIAlhdG1lbF93cml0ZTE2KGRldiwgR0NSLCAweDAwNDApOwogCW1kZWxheSg1MDApOwotCQorCiAJaWYgKGF0bWVsX3JlYWQxNihkZXYsIE1SMikgPT0gMCkgewotCQkvKiBObyBzdG9yZWQgZmlybXdhcmUgc28gbG9hZCBhIHNtYWxsIHN0dWIgd2hpY2gganVzdCAKKwkJLyogTm8gc3RvcmVkIGZpcm13YXJlIHNvIGxvYWQgYSBzbWFsbCBzdHViIHdoaWNoIGp1c3QKIAkJICAgdGVsbHMgdXMgdGhlIE1BQyBhZGRyZXNzICovCiAJCWludCBpOwogCQlwcml2LT5jYXJkX3R5cGUgPSBDQVJEX1RZUEVfRUVQUk9NOwpAQCAtMzQ0Miw3ICszNDY2LDcgQEAKIAkJYXRtZWxfc2V0X2djcihkZXYsIEdDUl9SRU1BUCk7CiAJCWF0bWVsX2NsZWFyX2djcihwcml2LT5kZXYsIDB4MDA0MCk7CiAJCWF0bWVsX3dyaXRlMTYoZGV2LCBCU1IsIEJTU19TUkFNKTsKLQkJZm9yIChpID0gIExPT1BfUkVUUllfTElNSVQ7IGk7IGktLSkgCisJCWZvciAoaSA9IExPT1BfUkVUUllfTElNSVQ7IGk7IGktLSkKIAkJCWlmIChhdG1lbF9yZWFkMTYoZGV2LCBNUjMpICYgTUFDX0JPT1RfQ09NUExFVEUpCiAJCQkJYnJlYWs7CiAJCWlmIChpID09IDApIHsKQEAgLTM0NTEsNyArMzQ3NSw3IEBACiAJCQlhdG1lbF9jb3B5X3RvX2hvc3QoZGV2LCBkZXYtPmRldl9hZGRyLCBhdG1lbF9yZWFkMTYoZGV2LCBNUjIpLCA2KTsKIAkJCS8qIGdvdCBhZGRyZXNzLCBub3cgc3F1YXNoIGl0IGFnYWluIHVudGlsIHRoZSBuZXR3b3JrCiAJCQkgICBpbnRlcmZhY2UgaXMgb3BlbmVkICovCi0JCQlpZiAocHJpdi0+YnVzX3R5cGUgPT0gQlVTX1RZUEVfUENDQVJEKSAKKwkJCWlmIChwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0NBUkQpCiAJCQkJYXRtZWxfd3JpdGUxNihkZXYsIEdDUiwgMHgwMDYwKTsKIAkJCWF0bWVsX3dyaXRlMTYoZGV2LCBHQ1IsIDB4MDA0MCk7CiAJCQlyYyA9IDE7CkBAIC0zNDU5LDcgKzM0ODMsNyBAQAogCX0gZWxzZSBpZiAoYXRtZWxfcmVhZDE2KGRldiwgTVI0KSA9PSAwKSB7CiAJCS8qIE1hYyBhZGRyZXNzIGVhc3kgaW4gdGhpcyBjYXNlLiAqLwogCQlwcml2LT5jYXJkX3R5cGUgPSBDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0g7Ci0JCWF0bWVsX3dyaXRlMTYoZGV2LCAgQlNSLCAxKTsJCisJCWF0bWVsX3dyaXRlMTYoZGV2LCAgQlNSLCAxKTsKIAkJYXRtZWxfY29weV90b19ob3N0KGRldiwgZGV2LT5kZXZfYWRkciwgMHhjMDAwLCA2KTsKIAkJYXRtZWxfd3JpdGUxNihkZXYsICBCU1IsIDB4MjAwKTsKIAkJcmMgPSAxOwpAQCAtMzQ2OSwxNiArMzQ5MywxNiBAQAogCQlwcml2LT5jYXJkX3R5cGUgPSBDQVJEX1RZUEVfU1BJX0ZMQVNIOwogCQlpZiAoYXRtZWxfd2FrZXVwX2Zpcm13YXJlKHByaXYpKSB7CiAJCQlhdG1lbF9nZXRfbWliKHByaXYsIE1hY19BZGRyZXNzX01pYl9UeXBlLCAwLCBkZXYtPmRldl9hZGRyLCA2KTsKLQkJCQorCiAJCQkvKiBnb3QgYWRkcmVzcywgbm93IHNxdWFzaCBpdCBhZ2FpbiB1bnRpbCB0aGUgbmV0d29yawogCQkJICAgaW50ZXJmYWNlIGlzIG9wZW5lZCAqLwotCQkJaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCkgCisJCQlpZiAocHJpdi0+YnVzX3R5cGUgPT0gQlVTX1RZUEVfUENDQVJEKQogCQkJCWF0bWVsX3dyaXRlMTYoZGV2LCBHQ1IsIDB4MDA2MCk7CiAJCQlhdG1lbF93cml0ZTE2KGRldiwgR0NSLCAweDAwNDApOwogCQkJcmMgPSAxOwogCQl9CiAJfQotCQorCiAJaWYgKHJjKSB7CiAJCWlmIChkZXYtPmRldl9hZGRyWzBdID09IDB4RkYpIHsKIAkJCXU4IGRlZmF1bHRfbWFjW10gPSB7MHgwMCwweDA0LCAweDI1LCAweDAwLCAweDAwLCAweDAwfTsKQEAgLTM0ODYsMjcgKzM1MTAsMjcgQEAKIAkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBkZWZhdWx0X21hYywgNik7CiAJCX0KIAl9Ci0JCisKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGJ1aWxkX3dlcF9taWIoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYpCiAvKiBNb3ZlIHRoZSBlbmN5cHRpb24gaW5mb3JtYXRpb24gb24gdGhlIE1JQiBzdHJ1Y3R1cmUuCiAgICBUaGlzIHJvdXRpbmUgaXMgZm9yIHRoZSBwcmUtV1BBIGZpcm13YXJlOiBsYXRlciBmaXJtd2FyZSBoYXMKICAgIGEgZGlmZmVyZW50IGZvcm1hdCBNSUIgYW5kIGEgZGlmZmVyZW50IHJvdXRpbmUuICovCitzdGF0aWMgdm9pZCBidWlsZF93ZXBfbWliKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2KQogewogCXN0cnVjdCB7IC8qIE5CIHRoaXMgaXMgbWF0Y2hlZCB0byB0aGUgaGFyZHdhcmUsIGRvbid0IGNoYW5nZS4gKi8KLQkJdTggd2VwX2lzX29uOyAgICAgICAgICAgICAgICAgCisJCXU4IHdlcF9pc19vbjsKIAkJdTggZGVmYXVsdF9rZXk7IC8qIDAuLjMgKi8KIAkJdTggcmVzZXJ2ZWQ7CiAJCXU4IGV4Y2x1ZGVfdW5lbmNyeXB0ZWQ7Ci0JCQorCiAJCXUzMiBXRVBJQ1ZfZXJyb3JfY291bnQ7CiAJCXUzMiBXRVBfZXhjbHVkZWRfY291bnQ7Ci0JCQorCiAJCXU4IHdlcF9rZXlzW01BWF9FTkNSWVBUSU9OX0tFWVNdWzEzXTsKLSAJCXU4IGVuY3J5cHRpb25fbGV2ZWw7IC8qIDAsIDEsIDIgKi8KLQkJdTggcmVzZXJ2ZWQyWzNdOyAKKwkJdTggZW5jcnlwdGlvbl9sZXZlbDsgLyogMCwgMSwgMiAqLworCQl1OCByZXNlcnZlZDJbM107CiAJfSBtaWI7CiAJaW50IGk7CiAKQEAgLTM1MTUsNTQgKzM1MzksNTUgQEAKIAkJaWYgKHByaXYtPndlcF9rZXlfbGVuW3ByaXYtPmRlZmF1bHRfa2V5XSA+IDUpCiAJCQltaWIuZW5jcnlwdGlvbl9sZXZlbCA9IDI7CiAJCWVsc2UKLQkJCW1pYi5lbmNyeXB0aW9uX2xldmVsID0gMTsJCisJCQltaWIuZW5jcnlwdGlvbl9sZXZlbCA9IDE7CiAJfSBlbHNlIHsKIAkJbWliLmVuY3J5cHRpb25fbGV2ZWwgPSAwOwogCX0KIAogCW1pYi5kZWZhdWx0X2tleSA9IHByaXYtPmRlZmF1bHRfa2V5OwogCW1pYi5leGNsdWRlX3VuZW5jcnlwdGVkID0gcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZDsKLQkKLQlmb3IoaSA9IDA7IGkgPCBNQVhfRU5DUllQVElPTl9LRVlTOyAgaSsrKQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9FTkNSWVBUSU9OX0tFWVM7IGkrKykKIAkJbWVtY3B5KG1pYi53ZXBfa2V5c1tpXSwgcHJpdi0+d2VwX2tleXNbaV0sIDEzKTsKLQkJCisKIAlhdG1lbF9zZXRfbWliKHByaXYsIE1hY19XZXBfTWliX1R5cGUsIDAsICh1OCAqKSZtaWIsIHNpemVvZihtaWIpKTsKIH0KIAogc3RhdGljIHZvaWQgYnVpbGRfd3BhX21pYihzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdikKIHsKLQkvKiBUaGlzIGlzIGZvciB0aGUgbGF0ZXIgKFdQQSBlbmFibGVkKSBmaXJtd2FyZS4gKi8JICAgCisJLyogVGhpcyBpcyBmb3IgdGhlIGxhdGVyIChXUEEgZW5hYmxlZCkgZmlybXdhcmUuICovCiAKIAlzdHJ1Y3QgeyAvKiBOQiB0aGlzIGlzIG1hdGNoZWQgdG8gdGhlIGhhcmR3YXJlLCBkb24ndCBjaGFuZ2UuICovCiAJCXU4IGNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtNQVhfRU5DUllQVElPTl9LRVlTXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRV07CiAJCXU4IHJlY2VpdmVyX2FkZHJlc3NbNl07Ci0JCXU4IHdlcF9pc19vbjsgICAgICAgICAgICAgICAgIAorCQl1OCB3ZXBfaXNfb247CiAJCXU4IGRlZmF1bHRfa2V5OyAvKiAwLi4zICovCiAJCXU4IGdyb3VwX2tleTsKIAkJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKIAkJdTggZW5jcnlwdGlvbl90eXBlOwogCQl1OCByZXNlcnZlZDsKLQkJCisKIAkJdTMyIFdFUElDVl9lcnJvcl9jb3VudDsKIAkJdTMyIFdFUF9leGNsdWRlZF9jb3VudDsKLQkJCisKIAkJdTgga2V5X1JTQ1s0XVs4XTsKIAl9IG1pYjsKLQkKKwogCWludCBpOwogCiAJbWliLndlcF9pc19vbiA9IHByaXYtPndlcF9pc19vbjsKIAltaWIuZXhjbHVkZV91bmVuY3J5cHRlZCA9IHByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQ7CiAJbWVtY3B5KG1pYi5yZWNlaXZlcl9hZGRyZXNzLCBwcml2LT5DdXJyZW50QlNTSUQsIDYpOwotCQorCiAJLyogemVybyBhbGwgdGhlIGtleXMgYmVmb3JlIGFkZGluZyBpbiB2YWxpZCBvbmVzLiAqLwogCW1lbXNldChtaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlLCAwLCBzaXplb2YobWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZSkpOwotCQorCiAJaWYgKHByaXYtPndlcF9pc19vbikgewotCQkvKiBUaGVyZSdzIGEgY29tbWVudCBpbiB0aGUgQXRtZWwgY29kZSB0byB0aGUgZWZmZWN0IHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlkCi0JCSAgIHdoZW4gc3RpbGwgdXNpbmcgV0VQLCBpdCBtYXkgbmVlZCB0byBiZSBzZXQgdG8gc29tZXRoaW5nIHRvIHVzZSBXUEEgKi8KKwkJLyogVGhlcmUncyBhIGNvbW1lbnQgaW4gdGhlIEF0bWVsIGNvZGUgdG8gdGhlIGVmZmVjdCB0aGF0IHRoaXMKKwkJICAgaXMgb25seSB2YWxpZCB3aGVuIHN0aWxsIHVzaW5nIFdFUCwgaXQgbWF5IG5lZWQgdG8gYmUgc2V0IHRvCisJCSAgIHNvbWV0aGluZyB0byB1c2UgV1BBICovCiAJCW1lbXNldChtaWIua2V5X1JTQywgMCwgc2l6ZW9mKG1pYi5rZXlfUlNDKSk7Ci0JCQorCiAJCW1pYi5kZWZhdWx0X2tleSA9IG1pYi5ncm91cF9rZXkgPSAyNTU7CiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfRU5DUllQVElPTl9LRVlTOyBpKyspIHsKIAkJCWlmIChwcml2LT53ZXBfa2V5X2xlbltpXSA+IDApIHsKQEAgLTM1NzAsMTIgKzM1OTUsMTIgQEAKIAkJCQlpZiAoaSA9PSBwcml2LT5kZWZhdWx0X2tleSkgewogCQkJCQltaWIuZGVmYXVsdF9rZXkgPSBpOwogCQkJCQltaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTFdID0gNzsKLQkJCQkJbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0yXSA9IHByaXYtPnBhaXJ3aXNlX2NpcGhlcl9zdWl0ZTsgCisJCQkJCW1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMl0gPSBwcml2LT5wYWlyd2lzZV9jaXBoZXJfc3VpdGU7CiAJCQkJfSBlbHNlIHsKIAkJCQkJbWliLmdyb3VwX2tleSA9IGk7CiAJCQkJCXByaXYtPmdyb3VwX2NpcGhlcl9zdWl0ZSA9IHByaXYtPnBhaXJ3aXNlX2NpcGhlcl9zdWl0ZTsKIAkJCQkgICAgICAgIG1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMV0gPSAxOwotCQkJCQltaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTJdID0gcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlOwkKKwkJCQkJbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0yXSA9IHByaXYtPmdyb3VwX2NpcGhlcl9zdWl0ZTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTM1ODMsNDcgKzM2MDgsNDcgQEAKIAkJCW1pYi5kZWZhdWx0X2tleSA9IG1pYi5ncm91cF9rZXkgIT0gMjU1ID8gbWliLmdyb3VwX2tleSA6IDA7CiAJCWlmIChtaWIuZ3JvdXBfa2V5ID09IDI1NSkKIAkJCW1pYi5ncm91cF9rZXkgPSBtaWIuZGVmYXVsdF9rZXk7Ci0JCQorCiAJfQotCQorCiAJYXRtZWxfc2V0X21pYihwcml2LCBNYWNfV2VwX01pYl9UeXBlLCAwLCAodTggKikmbWliLCBzaXplb2YobWliKSk7CiB9Ci0JCQkJCQotc3RhdGljIGludCByZXNldF9hdG1lbF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAorCitzdGF0aWMgaW50IHJlc2V0X2F0bWVsX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBkbyBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byB3YWtlIHVwIHRoZSBoYXJkd2FyZSwgaW5jbHVkaW5nCiAJICAgd2FpdGluZyBmb3IgdGhlIGxpZ2h0bmluZyBzdHJpa2UgYW5kIHRocm93aW5nIHRoZSBrbmlmZSBzd2l0Y2guLi4uCiAKLQkgICBzZXQgYWxsIHRoZSBNaWIgdmFsdWVzIHdoaWNoIG1hdHRlciBpbiB0aGUgY2FyZCB0byBtYXRjaCAKKwkgICBzZXQgYWxsIHRoZSBNaWIgdmFsdWVzIHdoaWNoIG1hdHRlciBpbiB0aGUgY2FyZCB0byBtYXRjaAogCSAgIHRoZWlyIHNldHRpbmdzIGluIHRoZSBhdG1lbF9wcml2YXRlIHN0cnVjdHVyZS4gU29tZSBvZiB0aGVzZQogCSAgIGNhbiBiZSBhbHRlcmVkIG9uIHRoZSBmbHksIGJ1dCBtYW55IChXRVAsIGluZnJhc3R1Y3R1cmUgb3IgYWQtaG9jKQogCSAgIGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkgdGVhcmluZyBkb3duIHRoZSB3b3JsZCBhbmQgY29taW5nIGJhY2sgdGhyb3VnaAogCSAgIGhlcmUuCiAKLQkgICBUaGlzIHJvdXRpbmUgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGlzaW5nIHNvbWUgCi0JICAgaGFyZHdhcmUtc3BlY2lmaWMgZmllbGRzIGluIHRoZSBhdG1lbF9wcml2YXRlIHN0cnVjdHVyZSwgCisJICAgVGhpcyByb3V0aW5lIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGluaXRpYWxpc2luZyBzb21lCisJICAgaGFyZHdhcmUtc3BlY2lmaWMgZmllbGRzIGluIHRoZSBhdG1lbF9wcml2YXRlIHN0cnVjdHVyZSwKIAkgICBpbmNsdWRpbmcgYSBjb3B5IG9mIHRoZSBmaXJtd2FyZSdzIGhvc3RpbmZvIHN0dWN0dXJlCiAJICAgd2hpY2ggaXMgdGhlIHJvdXRlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGZpcm1hcmUgZGF0YXN0cnVjdHVyZXMuICovCiAKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTggY29uZmlndXJhdGlvbjsKLQkKKwogCS8qIGRhdGEgdG8gYWRkIHRvIHRoZSBmaXJtd2FyZSBuYW1lcywgaW4gcHJpb3JpdHkgb3JkZXIKIAkgICB0aGlzIGltcGxlbWVuZW50cyBmaXJtd2FyZSB2ZXJzaW9uaW5nICovCi0JCisKIAlzdGF0aWMgY2hhciAqZmlybXdhcmVfbW9kaWZpZXJbXSA9IHsKIAkJIi13cGEiLAogCQkiIiwKIAkJTlVMTAogCX07Ci0JCQorCiAJLyogcmVzZXQgcGNjYXJkICovCi0JaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCkgCisJaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCkKIAkJYXRtZWxfd3JpdGUxNihwcml2LT5kZXYsIEdDUiwgMHgwMDYwKTsKLQkJCisKIAkvKiBzdG9wIGNhcmQgLCBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlhdG1lbF93cml0ZTE2KHByaXYtPmRldiwgR0NSLCAweDAwNDApOwotCQkKKwogCWlmIChwcml2LT5jYXJkX3R5cGUgPT0gQ0FSRF9UWVBFX0VFUFJPTSkgewogCQkvKiBjb3B5IGluIGZpcm13YXJlIGlmIG5lZWRlZCAqLwogCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKQEAgLTM2MzYsMTMgKzM2NjEsMTMgQEAKIAkJCQkJICAgICAgICIlczogY2FyZCB0eXBlIGlzIHVua25vd246IGFzc3VtaW5nIGF0NzZjNTAyIGZpcm13YXJlIGlzIE9LLlxuIiwKIAkJCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICIlczogaWYgbm90LCB1c2UgdGhlIGZpcm13YXJlPSBtb2R1bGUgcGFyYW1ldGVyLlxuIiwgCisJCQkJCSAgICAgICAiJXM6IGlmIG5vdCwgdXNlIHRoZSBmaXJtd2FyZT0gbW9kdWxlIHBhcmFtZXRlci5cbiIsCiAJCQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJCQlzdHJjcHkocHJpdi0+ZmlybXdhcmVfaWQsICJhdG1lbF9hdDc2YzUwMi5iaW4iKTsKIAkJCQl9CiAJCQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBwcml2LT5maXJtd2FyZV9pZCwgcHJpdi0+c3lzX2RldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9BTEVSVCAKLQkJCQkJICAgICAgICIlczogZmlybXdhcmUgJXMgaXMgbWlzc2luZywgY2Fubm90IGNvbnRpbnVlLlxuIiwgCisJCQkJCXByaW50ayhLRVJOX0FMRVJUCisJCQkJCSAgICAgICAiJXM6IGZpcm13YXJlICVzIGlzIG1pc3NpbmcsIGNhbm5vdCBjb250aW51ZS5cbiIsCiAJCQkJCSAgICAgICBkZXYtPm5hbWUsIHByaXYtPmZpcm13YXJlX2lkKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQpAQCAtMzY1NCw3ICszNjc5LDcgQEAKIAkJCQl3aGlsZSAoZndfdGFibGVbZndfaW5kZXhdLmZ3X3R5cGUgIT0gcHJpdi0+ZmlybXdhcmVfdHlwZQogCQkJCQkJJiYgZndfdGFibGVbZndfaW5kZXhdLmZ3X3R5cGUgIT0gQVRNRUxfRldfVFlQRV9OT05FKQogCQkJCQlmd19pbmRleCsrOwotCQkJCQorCiAJCQkJLyogY29uc3RydWN0IHRoZSBhY3R1YWwgZmlybXdhcmUgZmlsZSBuYW1lICovCiAJCQkJaWYgKGZ3X3RhYmxlW2Z3X2luZGV4XS5md190eXBlICE9IEFUTUVMX0ZXX1RZUEVfTk9ORSkgewogCQkJCQlpbnQgaTsKQEAgLTM2NjksMjQgKzM2OTQsMjQgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCQkJcHJpbnRrKEtFUk5fQUxFUlQgCi0JCQkJCSAgICAgICAiJXM6IGZpcm13YXJlICVzIGlzIG1pc3NpbmcsIGNhbm5vdCBzdGFydC5cbiIsIAorCQkJCQlwcmludGsoS0VSTl9BTEVSVAorCQkJCQkgICAgICAgIiVzOiBmaXJtd2FyZSAlcyBpcyBtaXNzaW5nLCBjYW5ub3Qgc3RhcnQuXG4iLAogCQkJCQkgICAgICAgZGV2LT5uYW1lLCBwcml2LT5maXJtd2FyZV9pZCk7CiAJCQkJCXByaXYtPmZpcm13YXJlX2lkWzBdID0gJ1wwJzsKLQkJCQkJcmV0dXJuIDA7CQorCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9Ci0JCQkKKwogCQkJZncgPSBmd19lbnRyeS0+ZGF0YTsKIAkJCWxlbiA9IGZ3X2VudHJ5LT5zaXplOwogCQl9Ci0JCQorCiAJICAgICAgICBpZiAobGVuIDw9IDB4NjAwMCkgewogCQkJYXRtZWxfd3JpdGUxNihwcml2LT5kZXYsIEJTUiwgQlNTX0lSQU0pOwogCQkJYXRtZWxfY29weV90b19jYXJkKHByaXYtPmRldiwgMCwgZncsIGxlbik7CiAJCQlhdG1lbF9zZXRfZ2NyKHByaXYtPmRldiwgR0NSX1JFTUFQKTsKIAkJfSBlbHNlIHsKLQkJCS8qIFJlbWFwICovIAorCQkJLyogUmVtYXAgKi8KIAkJCWF0bWVsX3NldF9nY3IocHJpdi0+ZGV2LCBHQ1JfUkVNQVApOwogCQkJYXRtZWxfd3JpdGUxNihwcml2LT5kZXYsIEJTUiwgQlNTX0lSQU0pOwogCQkJYXRtZWxfY29weV90b19jYXJkKHByaXYtPmRldiwgMCwgZncsIDB4NjAwMCk7CkBAIC0zNzA4LDQ1ICszNzMzLDQ1IEBACiAJICAgdGhlIDNjb20gYnJva2VuLW5lc3MgZmlsdGVyLiAqLwogCXByaXYtPnVzZV93cGEgPSAocHJpdi0+aG9zdF9pbmZvLm1ham9yX3ZlcnNpb24gPT0gNCk7CiAJcHJpdi0+cmFkaW9fb25fYnJva2VuID0gKHByaXYtPmhvc3RfaW5mby5tYWpvcl92ZXJzaW9uID09IDUpOwotCQorCiAgICAgICAgIC8qIHVubWFzayBhbGwgaXJxIHNvdXJjZXMgKi8KIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9JTlRfTUFTS19PRkZTRVQpLCAweGZmKTsKLQkKKwogCS8qIGludCBUeCBzeXN0ZW0gYW5kIGVuYWJsZSBUeCAqLwogCWF0bWVsX3dtZW04KHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfRkxBR1NfT0ZGU0VULCAwKSwgMCk7CiAJYXRtZWxfd21lbTMyKHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfTkVYVF9PRkZTRVQsIDApLCAweDgwMDAwMDAwTCk7CiAJYXRtZWxfd21lbTE2KHByaXYsIGF0bWVsX3R4KHByaXYsIFRYX0RFU0NfUE9TX09GRlNFVCwgMCksIDApOwogCWF0bWVsX3dtZW0xNihwcml2LCBhdG1lbF90eChwcml2LCBUWF9ERVNDX1NJWkVfT0ZGU0VULCAwKSwgMCk7CiAKLQlwcml2LT50eF9kZXNjX2ZyZWUgPSBwcml2LT5ob3N0X2luZm8udHhfZGVzY19jb3VudDsJCQotCXByaXYtPnR4X2Rlc2NfaGVhZCA9IDA7CQkJCQkJCQkJCi0JcHJpdi0+dHhfZGVzY190YWlsID0gMDsJCQkJCQkJCQkKKwlwcml2LT50eF9kZXNjX2ZyZWUgPSBwcml2LT5ob3N0X2luZm8udHhfZGVzY19jb3VudDsKKwlwcml2LT50eF9kZXNjX2hlYWQgPSAwOworCXByaXYtPnR4X2Rlc2NfdGFpbCA9IDA7CiAJcHJpdi0+dHhfZGVzY19wcmV2aW91cyA9IDA7CiAJcHJpdi0+dHhfZnJlZV9tZW0gPSBwcml2LT5ob3N0X2luZm8udHhfYnVmZl9zaXplOwotCXByaXYtPnR4X2J1ZmZfaGVhZCA9IDA7CQotCXByaXYtPnR4X2J1ZmZfdGFpbCA9IDA7CQotCQkKLQljb25maWd1cmF0aW9uID0gYXRtZWxfcm1lbTgocHJpdiwgYXRtZWxfaGkocHJpdiwgSUZBQ0VfRlVOQ19DVFJMX09GRlNFVCkpOyAKLQlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9GVU5DX0NUUkxfT0ZGU0VUKSwgCisJcHJpdi0+dHhfYnVmZl9oZWFkID0gMDsKKwlwcml2LT50eF9idWZmX3RhaWwgPSAwOworCisJY29uZmlndXJhdGlvbiA9IGF0bWVsX3JtZW04KHByaXYsIGF0bWVsX2hpKHByaXYsIElGQUNFX0ZVTkNfQ1RSTF9PRkZTRVQpKTsKKwlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9GVU5DX0NUUkxfT0ZGU0VUKSwKIAkJCQkgICBjb25maWd1cmF0aW9uIHwgRlVOQ19DVFJMX1R4RU5BQkxFKTsKIAogCS8qIGluaXQgUnggc3lzdGVtIGFuZCBlbmFibGUgKi8KIAlwcml2LT5yeF9kZXNjX2hlYWQgPSAwOwotCQotCWNvbmZpZ3VyYXRpb24gPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9GVU5DX0NUUkxfT0ZGU0VUKSk7IAotCWF0bWVsX3dtZW04KHByaXYsIGF0bWVsX2hpKHByaXYsIElGQUNFX0ZVTkNfQ1RSTF9PRkZTRVQpLCAKKworCWNvbmZpZ3VyYXRpb24gPSBhdG1lbF9ybWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9GVU5DX0NUUkxfT0ZGU0VUKSk7CisJYXRtZWxfd21lbTgocHJpdiwgYXRtZWxfaGkocHJpdiwgSUZBQ0VfRlVOQ19DVFJMX09GRlNFVCksCiAJCQkJICAgY29uZmlndXJhdGlvbiB8IEZVTkNfQ1RSTF9SeEVOQUJMRSk7Ci0JCQkKKwogCWlmICghcHJpdi0+cmFkaW9fb25fYnJva2VuKSB7Ci0JCWlmIChhdG1lbF9zZW5kX2NvbW1hbmRfd2FpdChwcml2LCBDTURfRW5hYmxlUmFkaW8sIE5VTEwsIDApID09IAorCQlpZiAoYXRtZWxfc2VuZF9jb21tYW5kX3dhaXQocHJpdiwgQ01EX0VuYWJsZVJhZGlvLCBOVUxMLCAwKSA9PQogCQkgICAgQ01EX1NUQVRVU19SRUpFQ1RFRF9SQURJT19PRkYpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gCisJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgIiVzOiBjYW5ub3QgdHVybiB0aGUgcmFkaW8gb24uIChIZXkgcmFkaW8sIHlvdSdyZSBiZWF1dGlmdWwhKVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAJCX0KIAl9Ci0JCisKIAkvKiBzZXQgdXAgZW5vdWdoIE1JQiB2YWx1ZXMgdG8gcnVuLiAqLwogCWF0bWVsX3NldF9taWI4KHByaXYsIExvY2FsX01pYl9UeXBlLCBMT0NBTF9NSUJfQVVUT19UWF9SQVRFX1BPUywgcHJpdi0+YXV0b190eF9yYXRlKTsKIAlhdG1lbF9zZXRfbWliOChwcml2LCBMb2NhbF9NaWJfVHlwZSwgIExPQ0FMX01JQl9UWF9QUk9NSVNDVU9VU19QT1MsICBQUk9NX01PREVfT0ZGKTsKQEAgLTM3NTUsNyArMzc4MCw3IEBACiAJYXRtZWxfc2V0X21pYjgocHJpdiwgTWFjX01pYl9UeXBlLCBNQUNfTUlCX1NIT1JUX1JFVFJZX1BPUywgcHJpdi0+c2hvcnRfcmV0cnkpOwogCWF0bWVsX3NldF9taWI4KHByaXYsIE1hY19NaWJfVHlwZSwgTUFDX01JQl9MT05HX1JFVFJZX1BPUywgcHJpdi0+bG9uZ19yZXRyeSk7CiAJYXRtZWxfc2V0X21pYjgocHJpdiwgTG9jYWxfTWliX1R5cGUsIExPQ0FMX01JQl9QUkVBTUJMRV9UWVBFLCBwcml2LT5wcmVhbWJsZSk7Ci0JYXRtZWxfc2V0X21pYihwcml2LCBNYWNfQWRkcmVzc19NaWJfVHlwZSwgTUFDX0FERFJfTUlCX01BQ19BRERSX1BPUywgCisJYXRtZWxfc2V0X21pYihwcml2LCBNYWNfQWRkcmVzc19NaWJfVHlwZSwgTUFDX0FERFJfTUlCX01BQ19BRERSX1BPUywKIAkJICAgICAgcHJpdi0+ZGV2LT5kZXZfYWRkciwgNik7CiAJYXRtZWxfc2V0X21pYjgocHJpdiwgTWFjX01nbXRfTWliX1R5cGUsIE1BQ19NR01UX01JQl9QU19NT0RFX1BPUywgQUNUSVZFX01PREUpOwogCWF0bWVsX3NldF9taWIxNihwcml2LCBNYWNfTWdtdF9NaWJfVHlwZSwgTUFDX01HTVRfTUlCX0xJU1RFTl9JTlRFUlZBTF9QT1MsIDEpOwpAQCAtMzc2Niw0MiArMzc5MSw0NCBAQAogCQlidWlsZF93cGFfbWliKHByaXYpOwogCWVsc2UKIAkJYnVpbGRfd2VwX21pYihwcml2KTsKLQkKKwogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBhdG1lbF9zZW5kX2NvbW1hbmQoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIGludCBjb21tYW5kLCB2b2lkICpjbWQsIGludCBjbWRfc2l6ZSkKK3N0YXRpYyB2b2lkIGF0bWVsX3NlbmRfY29tbWFuZChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgaW50IGNvbW1hbmQsCisJCQkgICAgICAgdm9pZCAqY21kLCBpbnQgY21kX3NpemUpCiB7CiAJaWYgKGNtZCkKLQkJYXRtZWxfY29weV90b19jYXJkKHByaXYtPmRldiwgYXRtZWxfY28ocHJpdiwgQ01EX0JMT0NLX1BBUkFNRVRFUlNfT0ZGU0VUKSwgCisJCWF0bWVsX2NvcHlfdG9fY2FyZChwcml2LT5kZXYsIGF0bWVsX2NvKHByaXYsIENNRF9CTE9DS19QQVJBTUVURVJTX09GRlNFVCksCiAJCQkJICAgY21kLCBjbWRfc2l6ZSk7Ci0JCisKIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9jbyhwcml2LCBDTURfQkxPQ0tfQ09NTUFORF9PRkZTRVQpLCBjb21tYW5kKTsKIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9jbyhwcml2LCBDTURfQkxPQ0tfU1RBVFVTX09GRlNFVCksIDApOwogfQotCQotc3RhdGljIGludCBhdG1lbF9zZW5kX2NvbW1hbmRfd2FpdChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgaW50IGNvbW1hbmQsIHZvaWQgKmNtZCwgaW50IGNtZF9zaXplKQorCitzdGF0aWMgaW50IGF0bWVsX3NlbmRfY29tbWFuZF93YWl0KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCBpbnQgY29tbWFuZCwKKwkJCQkgICB2b2lkICpjbWQsIGludCBjbWRfc2l6ZSkKIHsKIAlpbnQgaSwgc3RhdHVzOwotCQorCiAJYXRtZWxfc2VuZF9jb21tYW5kKHByaXYsIGNvbW1hbmQsIGNtZCwgY21kX3NpemUpOwotCQorCiAJZm9yIChpID0gNTAwMDsgaTsgaS0tKSB7CiAJCXN0YXR1cyA9IGF0bWVsX3JtZW04KHByaXYsIGF0bWVsX2NvKHByaXYsIENNRF9CTE9DS19TVEFUVVNfT0ZGU0VUKSk7Ci0JCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19JRExFICYmIAorCQlpZiAoc3RhdHVzICE9IENNRF9TVEFUVVNfSURMRSAmJgogCQkgICAgc3RhdHVzICE9IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpCiAJCQlicmVhazsKIAkJdWRlbGF5KDIwKTsKIAl9Ci0JCisKIAlpZiAoaSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUICIlczogZmFpbGVkIHRvIGNvbnRhY3QgTUFDLlxuIiwgcHJpdi0+ZGV2LT5uYW1lKTsKIAkJc3RhdHVzID0gIENNRF9TVEFUVVNfSE9TVF9FUlJPUjsKLQl9IGVsc2UgeyAKKwl9IGVsc2UgewogCQlpZiAoY29tbWFuZCAhPSBDTURfRW5hYmxlUmFkaW8pCiAJCQlzdGF0dXMgPSBDTURfU1RBVFVTX0NPTVBMRVRFOwogCX0KLQkKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTM4MjcsNyArMzg1NCw4IEBACiAJYXRtZWxfc2VuZF9jb21tYW5kX3dhaXQocHJpdiwgQ01EX1NldF9NSUJfVmFycywgJm0sIE1JQl9IRUFERVJfU0laRSArIDEpOwogfQogCi1zdGF0aWMgdm9pZCBhdG1lbF9zZXRfbWliMTYoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4IHR5cGUsIHU4IGluZGV4LCB1MTYgZGF0YSkKK3N0YXRpYyB2b2lkIGF0bWVsX3NldF9taWIxNihzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTggdHlwZSwgdTggaW5kZXgsCisJCQkgICAgdTE2IGRhdGEpCiB7CiAJc3RydWN0IGdldF9zZXRfbWliIG07CiAJbS50eXBlID0gdHlwZTsKQEAgLTM4MzksNyArMzg2Nyw4IEBACiAJYXRtZWxfc2VuZF9jb21tYW5kX3dhaXQocHJpdiwgQ01EX1NldF9NSUJfVmFycywgJm0sIE1JQl9IRUFERVJfU0laRSArIDIpOwogfQogCi1zdGF0aWMgdm9pZCBhdG1lbF9zZXRfbWliKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1OCB0eXBlLCB1OCBpbmRleCwgdTggKmRhdGEsIGludCBkYXRhX2xlbikKK3N0YXRpYyB2b2lkIGF0bWVsX3NldF9taWIoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4IHR5cGUsIHU4IGluZGV4LAorCQkJICB1OCAqZGF0YSwgaW50IGRhdGFfbGVuKQogewogCXN0cnVjdCBnZXRfc2V0X21pYiBtOwogCW0udHlwZSA9IHR5cGU7CkBAIC0zODQ4LDIzICszODc3LDI0IEBACiAKIAlpZiAoZGF0YV9sZW4gPiBNSUJfTUFYX0RBVEFfQllURVMpCiAJCXByaW50ayhLRVJOX0FMRVJUICIlczogTUlCIGJ1ZmZlciB0b28gc21hbGwuXG4iLCBwcml2LT5kZXYtPm5hbWUpOwotCQorCiAJbWVtY3B5KG0uZGF0YSwgZGF0YSwgZGF0YV9sZW4pOwogCWF0bWVsX3NlbmRfY29tbWFuZF93YWl0KHByaXYsIENNRF9TZXRfTUlCX1ZhcnMsICZtLCBNSUJfSEVBREVSX1NJWkUgKyBkYXRhX2xlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0bWVsX2dldF9taWIoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4IHR5cGUsIHU4IGluZGV4LCB1OCAqZGF0YSwgaW50IGRhdGFfbGVuKQorc3RhdGljIHZvaWQgYXRtZWxfZ2V0X21pYihzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTggdHlwZSwgdTggaW5kZXgsCisJCQkgIHU4ICpkYXRhLCBpbnQgZGF0YV9sZW4pCiB7CiAJc3RydWN0IGdldF9zZXRfbWliIG07CiAJbS50eXBlID0gdHlwZTsKIAltLnNpemUgPSBkYXRhX2xlbjsKIAltLmluZGV4ID0gaW5kZXg7Ci0JCisKIAlpZiAoZGF0YV9sZW4gPiBNSUJfTUFYX0RBVEFfQllURVMpCiAJCXByaW50ayhLRVJOX0FMRVJUICIlczogTUlCIGJ1ZmZlciB0b28gc21hbGwuXG4iLCBwcml2LT5kZXYtPm5hbWUpOwotCQorCiAJYXRtZWxfc2VuZF9jb21tYW5kX3dhaXQocHJpdiwgQ01EX0dldF9NSUJfVmFycywgJm0sIE1JQl9IRUFERVJfU0laRSArIGRhdGFfbGVuKTsKLQlhdG1lbF9jb3B5X3RvX2hvc3QocHJpdi0+ZGV2LCBkYXRhLCAKKwlhdG1lbF9jb3B5X3RvX2hvc3QocHJpdi0+ZGV2LCBkYXRhLAogCQkJICAgYXRtZWxfY28ocHJpdiwgQ01EX0JMT0NLX1BBUkFNRVRFUlNfT0ZGU0VUICsgTUlCX0hFQURFUl9TSVpFKSwgZGF0YV9sZW4pOwogfQogCkBAIC0zODczLDExICszOTAzLDEyIEBACiAJaW50IGk7CiAJb3V0dyhkYXRhLCBkZXYtPmJhc2VfYWRkciArIEFSKTsKIAkvKiBBZGRyZXNzIHJlZ2lzdGVyIGFwcGVhcnMgdG8gbmVlZCBzb21lIGNvbnZpbmNpbmcuLi4uLiAqLwotCWZvciAoaSA9IDA7IGRhdGEgIT0gaW53KGRldi0+YmFzZV9hZGRyICsgQVIpICYmIGk8MTA7IGkrKykKKwlmb3IgKGkgPSAwOyBkYXRhICE9IGludyhkZXYtPmJhc2VfYWRkciArIEFSKSAmJiBpIDwgMTA7IGkrKykKIAkJb3V0dyhkYXRhLCBkZXYtPmJhc2VfYWRkciArIEFSKTsKIH0KIAotc3RhdGljIHZvaWQgYXRtZWxfY29weV90b19jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBkZXN0LCB1bnNpZ25lZCBjaGFyICpzcmMsIHUxNiBsZW4pCitzdGF0aWMgdm9pZCBhdG1lbF9jb3B5X3RvX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGRlc3QsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLCB1MTYgbGVuKQogewogCWludCBpOwogCWF0bWVsX3dyaXRlQVIoZGV2LCBkZXN0KTsKQEAgLTM4OTQsNyArMzkyNSw4IEBACiAJCWF0bWVsX3dyaXRlOChkZXYsIERSLCAqc3JjKTsKIH0KIAotc3RhdGljIHZvaWQgYXRtZWxfY29weV90b19ob3N0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRlc3QsIHUxNiBzcmMsIHUxNiBsZW4pCitzdGF0aWMgdm9pZCBhdG1lbF9jb3B5X3RvX2hvc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqZGVzdCwKKwkJCSAgICAgICB1MTYgc3JjLCB1MTYgbGVuKQogewogCWludCBpOwogCWF0bWVsX3dyaXRlQVIoZGV2LCBzcmMpOwpAQCAtMzkzMCwyMiArMzk2MiwyNCBAQAogCQkJYnJlYWs7CiAJCXVkZWxheSgyMCk7CiAJfQotCQotCWlmICghaSkgcmV0dXJuIDA7IC8qIHRpbWVkIG91dCAqLwotCQorCisJaWYgKCFpKQorCQlyZXR1cm4gMDsgLyogdGltZWQgb3V0ICovCisKIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9MT0NLT1VUX01BQ19PRkZTRVQpLCAxKTsKIAlpZiAoYXRtZWxfcm1lbTgocHJpdiwgYXRtZWxfaGkocHJpdiwgSUZBQ0VfTE9DS09VVF9IT1NUX09GRlNFVCkpKSB7CiAJCWF0bWVsX3dtZW04KHByaXYsIGF0bWVsX2hpKHByaXYsIElGQUNFX0xPQ0tPVVRfTUFDX09GRlNFVCksIDApOwotCQlpZiAoIWotLSkgcmV0dXJuIDA7IC8qIHRpbWVkIG91dCAqLworCQlpZiAoIWotLSkKKwkJCXJldHVybiAwOyAvKiB0aW1lZCBvdXQgKi8KIAkJZ290byByZXRyeTsKIAl9Ci0JCisKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQgYXRtZWxfd21lbTMyKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1MTYgcG9zLCB1MzIgZGF0YSkKIHsKLSAgICAgICAJYXRtZWxfd3JpdGVBUihwcml2LT5kZXYsIHBvcyk7CQorCWF0bWVsX3dyaXRlQVIocHJpdi0+ZGV2LCBwb3MpOwogCWF0bWVsX3dyaXRlMTYocHJpdi0+ZGV2LCBEUiwgZGF0YSk7IC8qIGNhcmQgaXMgbGl0dGxlLWVuZGlhbiAqLwogCWF0bWVsX3dyaXRlMTYocHJpdi0+ZGV2LCBEUiwgZGF0YSA+PiAxNik7CiB9CkBAIC00MDE3LDkgKzQwNTEsOSBAQAogCQkJCSAgc2VyaWFsIG91dHB1dCwgc2luY2UgU08gaXMgbm9ybWFsbHkgaGlnaC4gIEJ1dCBpdAogCQkJCSAgZG9lcyBjYXVzZSA4IGNsb2NrIGN5Y2xlcyBhbmQgdGh1cyA4IGJpdHMgdG8gYmUKIAkJCQkgIGNsb2NrZWQgaW4gdG8gdGhlIGNoaXAuICBTZWUgQXRtZWwncyBTUEkKLQkJCQkgIGNvbnRyb2xsZXIgKGUuZy4gQVQ5MU01NTgwMCkgdGltaW5nIGFuZCA0SyAKKwkJCQkgIGNvbnRyb2xsZXIgKGUuZy4gQVQ5MU01NTgwMCkgdGltaW5nIGFuZCA0SwogCQkJCSAgU1BJIEVFUFJPTSBtYW51YWxzICovCi0JCQkJIAorCiAJLnNldCBOVlJBTV9TQ1JBVENILCAweDAyMDAwMTAwICAvKiBhcmJpdHJhcnkgYXJlYSBmb3Igc2NyYXRjaHBhZCBtZW1vcnkgKi8KIAkuc2V0IE5WUkFNX0lNQUdFLCAweDAyMDAwMjAwCiAJLnNldCBOVlJBTV9MRU5HVEgsIDB4MDIwMApAQCAtNDAzMiwyNCArNDA2NiwyNCBAQAogCS5zZXQgTVI0LCAweEMKIFJFU0VUX1ZFQ1RPUjoKICAgICAgICAgYiBSRVNFVF9IQU5ETEVSCi1VTkRFRl9WRUNUT1I6ICAKK1VOREVGX1ZFQ1RPUjoKICAgICAgICAgYiBIQUxUMQotU1dJX1ZFQ1RPUjogICAgICAgICAgICAKK1NXSV9WRUNUT1I6CiAgICAgICAgIGIgSEFMVDEKLUlBQk9SVF9WRUNUT1I6IAorSUFCT1JUX1ZFQ1RPUjoKICAgICAgICAgYiBIQUxUMQotREFCT1JUX1ZFQ1RPUjogICAgICAgICAKLVJFU0VSVkVEX1ZFQ1RPUjogICAgCitEQUJPUlRfVkVDVE9SOgorUkVTRVJWRURfVkVDVE9SOgogICAgICAgICBiIEhBTFQxCi1JUlFfVkVDVE9SOiAgICAKK0lSUV9WRUNUT1I6CiAgICAgICAgIGIgSEFMVDEKLUZJUV9WRUNUT1I6ICAgIAorRklRX1ZFQ1RPUjoKIAliIEhBTFQxCiBIQUxUMToJYiBIQUxUMQogUkVTRVRfSEFORExFUjoKIAltb3YgICAgIHIwLCAjQ1BTUl9JTklUSUFMCiAJbXNyCUNQU1JfYywgcjAJLyogVGhpcyBpcyBwcm9iYWJseSB1bm5lY2Vzc2FyeSAqLwotCQkJCisKIC8qIEknbSBndWVzc2luZyB0aGlzIGlzIGluaXRpYWxpemluZyBjbG9jayBnZW5lcmF0b3IgZWxlY3Ryb25pY3MgZm9yIFNQSSAqLwogCWxkcglyMCwgPVNQSV9DR0VOX0JBU0UKIAltb3YJcjEsICMwCkBAIC00MDYxLDcgKzQwOTUsNyBAQAogCXN0cglyMSwgW3IwLCAjMjhdCiAJbW92CXIxLCAjMQogCXN0cglyMSwgW3IwLCAjOF0KLQkKKwogCWxkcglyMCwgPU1SQkFTRQogCW1vdglyMSwgIzAKIAlzdHJoCXIxLCBbcjAsICNNUjFdCkBAIC00MDk0LDcgKzQxMjgsNyBAQAogCWxkbWlhCXNwISwge2xyfQogCWJ4CWxyCiAuZW5kZnVuYwotCQorCiAuZnVuYyBHZXRfTUFDX0FkZHIsIEdFVF9NQUNfQUREUgogR0VUX01BQ19BRERSOgogCXN0bWRiCXNwISwge2xyfQpAQCAtNDExMCwxMyArNDE0NCwxMyBAQAogLmZ1bmMgRGVsYXk5LCBERUxBWTkKIERFTEFZOToKIAlhZGRzCXIwLCByMCwgcjAsIExTTCAjMyAgIC8qIHIwID0gcjAgKiA5ICovCi1ERUxBWUxPT1A6CQorREVMQVlMT09QOgogCWJlcQlERUxBWTlfZG9uZQogCXN1YnMJcjAsIHIwLCAjMQogCWIJREVMQVlMT09QCi1ERUxBWTlfZG9uZToJCitERUxBWTlfZG9uZToKIAlieAlscgotLmVuZGZ1bmMJCisuZW5kZnVuYwogCiAuZnVuYyBTUF9Jbml0LCBTUF9JTklUCiBTUF9JTklUOgpAQCAtNDE0NSwyNiArNDE3OSwyNiBAQAogCWxkcglyMCwgW3IwLCAjU1BfUkRSXQogCWJ4CWxyCiAuZW5kZnVuYwotLmZ1bmMgTlZSQU1fSW5pdCwgTlZSQU1fSU5JVAkKKy5mdW5jIE5WUkFNX0luaXQsIE5WUkFNX0lOSVQKIE5WUkFNX0lOSVQ6CiAJbGRyCXIxLCA9U1BfQkFTRQogCWxkcglyMCwgW3IxLCAjU1BfUkRSXQogCW1vdglyMCwgI05WUkFNX0NNRF9SRFNSCiAJc3RyCXIwLCBbcjEsICNTUF9URFJdCi1TUF9sb29wMToJCitTUF9sb29wMToKIAlsZHIJcjAsIFtyMSwgI1NQX1NSXQogCXRzdAlyMCwgI1NQX1REUkUKIAliZXEJU1BfbG9vcDEKIAogCW1vdglyMCwgI1NQSV84Q0xPQ0tTCi0Jc3RyCXIwLCBbcjEsICNTUF9URFJdIAotU1BfbG9vcDI6CQorCXN0cglyMCwgW3IxLCAjU1BfVERSXQorU1BfbG9vcDI6CiAJbGRyCXIwLCBbcjEsICNTUF9TUl0KIAl0c3QJcjAsICNTUF9URFJFCiAJYmVxCVNQX2xvb3AyCiAKIAlsZHIJcjAsIFtyMSwgI1NQX1JEUl0KLVNQX2xvb3AzOgkKK1NQX2xvb3AzOgogCWxkcglyMCwgW3IxLCAjU1BfU1JdCiAJdHN0CXIwLCAjU1BfUkRSRgogCWJlcQlTUF9sb29wMwpAQCAtNDE3Myw3ICs0MjA3LDcgQEAKIAlhbmQJcjAsIHIwLCAjMjU1CiAJYngJbHIKIC5lbmRmdW5jCi0JCisKIC5mdW5jIE5WUkFNX1hmZXIsIE5WUkFNX1hGRVIKIAkvKiByMCA9IGRlc3QgYWRkcmVzcyAqLwogCS8qIHIxID0gbm90IHVzZWQgKi8KQEAgLTQxODUsMTEgKzQyMTksMTEgQEAKIAltb3YJcjQsIHIzCQkvKiBzYXZlIHIzIChsZW5ndGgpICovCiAJbW92CXIwLCByMiwgTFNSICM1IC8qICBTUEkgbWVtb3JpZXMgcHV0IEE4IGluIHRoZSBjb21tYW5kIGZpZWxkICovCiAJYW5kCXIwLCByMCwgIzgKLQlhZGQJcjAsIHIwLCAjTlZSQU1fQ01EX1JFQUQgCisJYWRkCXIwLCByMCwgI05WUkFNX0NNRF9SRUFECiAJbGRyCXIxLCA9TlZSQU1fU0NSQVRDSAogCXN0cmIJcjAsIFtyMSwgIzBdCS8qIHNhdmUgY29tbWFuZCBpbiBOVlJBTV9TQ1JBVENIWzBdICovCiAJc3RyYglyMiwgW3IxLCAjMV0gICAgLyogc2F2ZSBsb3cgYnl0ZSBvZiBzb3VyY2UgYWRkcmVzcyBpbiBOVlJBTV9TQ1JBVENIWzFdICovCi1fbG9jYWwxOgkKK19sb2NhbDE6CiAJYmwJTlZSQU1fSU5JVAogCXRzdAlyMCwgI05WUkFNX1NSX1JEWQogCWJuZQlfbG9jYWwxCkBAIC00MjExLDcgKzQyNDUsNyBAQAogCWNtcAlyMCwgIzAKIAlibHMJX2xvY2FsMgogCWxkcglyNSwgPU5WUkFNX1NDUkFUQ0gKLV9sb2NhbDQ6CQorX2xvY2FsNDoKIAlsZHJiCXI2LCBbcjUsIHIzXQogCXN0cglyNiwgW3I0LCAjU1BfVERSXQogX2xvY2FsMzoKQEAgLTQyMjUsNyArNDI1OSw3IEBACiAJbW92CXIzLCAjU1BJXzhDTE9DS1MKIAlzdHIJcjMsIFtyNCwgI1NQX1REUl0KIAlsZHIJcjAsIFtyNCwgI1NQX1JEUl0KLV9sb2NhbDU6CQorX2xvY2FsNToKIAlsZHIJcjAsIFtyNCwgI1NQX1NSXQogCXRzdAlyMCwgI1NQX1JEUkYKIAliZXEJX2xvY2FsNQpAQCAtNDIzMywxMiArNDI2NywxMiBAQAogCW1vdglyMCwgIzAKIAljbXAJcjIsICMwICAvKiByMiBpcyAjIG9mIGJ5dGVzIHRvIGNvcHkgaW4gKi8KIAlibHMJX2xvY2FsNgotX2xvY2FsNzoJCitfbG9jYWw3OgogCWxkcglyNSwgW3I0LCAjU1BfU1JdCiAJdHN0CXI1LCAjU1BfVERSRQogCWJlcQlfbG9jYWw3CiAJc3RyCXIzLCBbcjQsICNTUF9URFJdICAvKiByMyBoYXMgU1BJXzhDTE9DS1MgKi8KLV9sb2NhbDg6CQorX2xvY2FsODoKIAlsZHIJcjUsIFtyNCwgI1NQX1NSXQogCXRzdAlyNSwgI1NQX1JEUkYKIAliZXEJX2xvY2FsOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL01ha2VmaWxlCmluZGV4IGZjNjIyMzUuLjM1M2NjYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACitob3N0YXAteSA6PSBob3N0YXBfbWFpbi5vCiBvYmotJChDT05GSUdfSE9TVEFQKSArPSBob3N0YXAubwogCiBvYmotJChDT05GSUdfSE9TVEFQX0NTKSArPSBob3N0YXBfY3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYwppbmRleCA3N2QyYTIxLi40NGNkM2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCkBAIC0xNzUsNyArMTc1LDcgQEAKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbiIKIAogLyogRGVidWdnaW5nIHN0dWZmICovCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCiAjZGVmaW5lIENPTkZJR19JUFcyMTAwX1JYX0RFQlVHCS8qIFJlY2VwdGlvbiBkZWJ1Z2dpbmcgKi8KICNlbmRpZgogCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogc3RhdGljIHUzMiBpcHcyMTAwX2RlYnVnX2xldmVsID0gSVBXX0RMX05PTkU7CiAKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKICNkZWZpbmUgSVBXX0RFQlVHKGxldmVsLCBtZXNzYWdlLi4uKSBcCiBkbyB7IFwKIAlpZiAoaXB3MjEwMF9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIHsgXApAQCAtMjE5LDkgKzIxOSw5IEBACiB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgSVBXX0RFQlVHKGxldmVsLCBtZXNzYWdlLi4uKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIxMDBfREVCVUcgKi8KIAotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbW1hbmRfdHlwZXNbXSA9IHsKIAkidW5kZWZpbmVkIiwKIAkidW51c2VkIiwJCS8qIEhPU1RfQVRURU5USU9OICovCkBAIC0yMDgxLDcgKzIwODEsNyBAQAogCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX1NDQU5OSU5HOwogfQogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCiAjZGVmaW5lIElQVzIxMDBfSEFORExFUih2LCBmKSB7IHYsIGYsICMgdiB9CiBzdHJ1Y3QgaXB3MjEwMF9zdGF0dXNfaW5kaWNhdG9yIHsKIAlpbnQgc3RhdHVzOwpAQCAtMjA5NCw3ICsyMDk0LDcgQEAKIAlpbnQgc3RhdHVzOwogCXZvaWQgKCpjYikgKHN0cnVjdCBpcHcyMTAwX3ByaXYgKiBwcml2LCB1MzIgc3RhdHVzKTsKIH07Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lQV19ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMTAwX0RFQlVHICovCiAKIHN0YXRpYyB2b2lkIGlzcl9pbmRpY2F0ZV9zY2FubmluZyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgc3RhdHVzKQogewpAQCAtMjE0OSw3ICsyMTQ5LDcgQEAKIHN0YXRpYyB2b2lkIGlzcl9yeF9jb21wbGV0ZV9jb21tYW5kKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCiAJCQkJICAgIHN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIgKmNtZCkKIHsKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIAlpZiAoY21kLT5ob3N0X2NvbW1hbmRfcmVnIDwgQVJSQVlfU0laRShjb21tYW5kX3R5cGVzKSkgewogCQlJUFdfREVCVUdfSEMoIkNvbW1hbmQgY29tcGxldGVkICclcyAoJWQpJ1xuIiwKIAkJCSAgICAgY29tbWFuZF90eXBlc1tjbWQtPmhvc3RfY29tbWFuZF9yZWddLApAQCAtMjE2Nyw3ICsyMTY3LDcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIHN0YXRpYyBjb25zdCBjaGFyICpmcmFtZV90eXBlc1tdID0gewogCSJDT01NQU5EX1NUQVRVU19WQUwiLAogCSJTVEFUVVNfQ0hBTkdFX1ZBTCIsCkBAIC0yMjkwLDcgKzIyOTAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB3MjEwMF9jb3JydXB0aW9uX2RldGVjdGVkKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpKQogewotI2lmZGVmIENPTkZJR19JUFdfREVCVUdfQzMKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVR19DMwogCXN0cnVjdCBpcHcyMTAwX3N0YXR1cyAqc3RhdHVzID0gJnByaXYtPnN0YXR1c19xdWV1ZS5kcnZbaV07CiAJdTMyIG1hdGNoLCByZWc7CiAJaW50IGo7CkBAIC0yMzEyLDcgKzIzMTIsNyBAQAogCX0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVR19DMworI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHX0MzCiAJLyogSGFsdCB0aGUgZmltcndhcmUgc28gd2UgY2FuIGdldCBhIGdvb2QgaW1hZ2UgKi8KIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBJUFdfUkVHX1JFU0VUX1JFRywKIAkJICAgICAgIElQV19BVVhfSE9TVF9SRVNFVF9SRUdfU1RPUF9NQVNURVIpOwpAQCAtMjcxNiw3ICsyNzE2LDcgQEAKIAlsaXN0X2RlbChlbGVtZW50KTsKIAlERUNfU1RBVCgmcHJpdi0+ZndfcGVuZF9zdGF0KTsKIAotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogCXsKIAkJaW50IGkgPSB0eHEtPm9sZGVzdDsKIAkJSVBXX0RFQlVHX1RYKCJUWCVkIFY9JXAgUD0lMDRYIFQ9JTA0WCBMPSVkXG4iLCBpLApAQCAtMjc4Miw3ICsyNzgyLDcgQEAKIAkJCSAgICAgICAic29tZXRoaW5nIGVsc2U6IGlkcyAlZD0lZC5cbiIsCiAJCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgdHhxLT5vbGRlc3QsIHBhY2tldC0+aW5kZXgpOwogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCiAJCWlmIChwYWNrZXQtPmluZm8uY19zdHJ1Y3QuY21kLT5ob3N0X2NvbW1hbmRfcmVnIDwKIAkJICAgIHNpemVvZihjb21tYW5kX3R5cGVzKSAvIHNpemVvZigqY29tbWFuZF90eXBlcykpCiAJCQlJUFdfREVCVUdfVFgoIkNvbW1hbmQgJyVzICglZCknIHByb2Nlc3NlZDogJWQuXG4iLApAQCAtMjk3NSw3ICsyOTc1LDcgQEAKIAogCQlJUFdfREVCVUdfVFgoImRhdGEgaGVhZGVyIHRiZCBUWCVkIFA9JTA4eCBMPSVkXG4iLAogCQkJICAgICBwYWNrZXQtPmluZGV4LCB0YmQtPmhvc3RfYWRkciwgdGJkLT5idWZfbGVuZ3RoKTsKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIAkJaWYgKHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzID4gMSkKIAkJCUlQV19ERUJVR19GUkFHKCJmcmFnbWVudCBUeDogJWQgZnJhbWVzXG4iLAogCQkJCSAgICAgICBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncyk7CkBAIC0zODI3LDcgKzM4MjcsNyBAQAogCQkgICAgICAgcHJpdi0+cnhfaW50ZXJydXB0cywgcHJpdi0+aW50YV9vdGhlcik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZmlybXdhcmUgcmVzZXRzOiAlZFxuIiwgcHJpdi0+cmVzZXRzKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJmaXJtd2FyZSBoYW5nczogJWRcbiIsIHByaXYtPmhhbmdzKTsKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJwYWNrZXQgbWlzbWF0Y2ggaW1hZ2U6ICVzXG4iLAogCQkgICAgICAgcHJpdi0+c25hcHNob3RbMF0gPyAiWUVTIiA6ICJOTyIpOwogI2VuZGlmCkBAIC0zOTgyLDcgKzM5ODIsNyBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoYnNzaW5mbywgU19JUlVHTywgc2hvd19ic3NpbmZvLCBOVUxMKTsKIAotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgaXB3MjEwMF9kZWJ1Z19sZXZlbCk7CkBAIC00MDExLDcgKzQwMTEsNyBAQAogCiBzdGF0aWMgRFJJVkVSX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2RlYnVnX2xldmVsLAogCQkgICBzdG9yZV9kZWJ1Z19sZXZlbCk7Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lQV19ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMTAwX0RFQlVHICovCiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZmF0YWxfZXJyb3Ioc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtNDkzNyw3ICs0OTM3LDcgQEAKIAl9OwogCWludCBlcnI7CiAKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIAlpZiAoYnNzaWQgIT0gTlVMTCkKIAkJSVBXX0RFQlVHX0hDKCJNQU5EQVRPUllfQlNTSUQ6ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAogCQkJICAgICBic3NpZFswXSwgYnNzaWRbMV0sIGJzc2lkWzJdLCBic3NpZFszXSwgYnNzaWRbNF0sCkBAIC02ODU4LDcgKzY4NTgsNyBAQAogCiAJcmV0ID0gcGNpX21vZHVsZV9pbml0KCZpcHcyMTAwX3BjaV9kcml2ZXIpOwogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCiAJaXB3MjEwMF9kZWJ1Z19sZXZlbCA9IGRlYnVnOwogCWRyaXZlcl9jcmVhdGVfZmlsZSgmaXB3MjEwMF9wY2lfZHJpdmVyLmRyaXZlciwKIAkJCSAgICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7CkBAIC02ODczLDcgKzY4NzMsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGlwdzIxMDBfZXhpdCh2b2lkKQogewogCS8qIEZJWE1FOiBJUEc6IGNoZWNrIHRoYXQgd2UgaGF2ZSBubyBpbnN0YW5jZXMgb2YgdGhlIGRldmljZXMgb3BlbiAqLwotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogCWRyaXZlcl9yZW1vdmVfZmlsZSgmaXB3MjEwMF9wY2lfZHJpdmVyLmRyaXZlciwKIAkJCSAgICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7CiAjZW5kaWYKQEAgLTg1NTgsNyArODU1OCw3IEBACiAKIAkJcXVhbGl0eSA9IG1pbihiZWFjb25fcXVhbCwgbWluKHR4X3F1YWwsIHJzc2lfcXVhbCkpOwogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCiAJCWlmIChiZWFjb25fcXVhbCA9PSBxdWFsaXR5KQogCQkJSVBXX0RFQlVHX1dYKCJRdWFsaXR5IGNsYW1wZWQgYnkgTWlzc2VkIEJlYWNvbnNcbiIpOwogCQllbHNlIGlmICh0eF9xdWFsID09IHF1YWxpdHkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmgKaW5kZXggN2M2NWIxMC4uZjZjNTE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuaApAQCAtNzMsNyArNzMsNyBAQAogICogeW91IHNpbXBseSBuZWVkIHRvIGFkZCB5b3VyIGVudHJ5IHRvIHRoZSBpcHcyMTAwX2RlYnVnX2xldmVscyBhcnJheS4KICAqCiAgKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaXB3MjEwMCB0aGVuIHlvdSBkbyBub3QgaGF2ZQotICogQ09ORklHX0lQV19ERUJVRyBkZWZpbmVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KKyAqIENPTkZJR19JUFcyMTAwX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggNWU3YzdlOS4uY2RmZTUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfTUFTS19SLCB+SVBXX0lOVEFfTUFTS19BTEwpOwogfQogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiBzdGF0aWMgY2hhciAqaXB3X2Vycm9yX2Rlc2ModTMyIHZhbCkKIHsKIAlzd2l0Y2ggKHZhbCkgewpAQCAtMTIzNSw3ICsxMjM1LDcgQEAKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKICNlbmRpZgogCWNoYXIgYnVmZmVyW10gPSAiMDAwMDAwMDAiOwpAQCAtMTc1NCw3ICsxNzU0LDcgQEAKIAkJSVBXX0VSUk9SKCJGaXJtd2FyZSBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAkJaWYgKHByaXYtPmVycm9yKSB7CiAJCQlJUFdfRVJST1IoIlN5c2ZzICdlcnJvcicgbG9nIGFscmVhZHkgZXhpc3RzLlxuIik7Ci0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiAJCQlpZiAoaXB3X2RlYnVnX2xldmVsICYgSVBXX0RMX0ZXX0VSUk9SUykgewogCQkJCXN0cnVjdCBpcHdfZndfZXJyb3IgKmVycm9yID0KIAkJCQkgICAgaXB3X2FsbG9jX2Vycm9yX2xvZyhwcml2KTsKQEAgLTE3NzAsNyArMTc3MCw3IEBACiAJCQllbHNlCiAJCQkJSVBXX0VSUk9SKCJFcnJvciBhbGxvY2F0aW5nIHN5c2ZzICdlcnJvcicgIgogCQkJCQkgICJsb2cuXG4iKTsKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIAkJCWlmIChpcHdfZGVidWdfbGV2ZWwgJiBJUFdfRExfRldfRVJST1JTKQogCQkJCWlwd19kdW1wX2Vycm9yX2xvZyhwcml2LCBwcml2LT5lcnJvcik7CiAjZW5kaWYKQEAgLTM3NzgsNyArMzc3OCw3IEBACiAJezB4MkUsICJDaXBoZXIgc3VpdGUgaXMgcmVqZWN0ZWQgcGVyIHNlY3VyaXR5IHBvbGljeSJ9LAogfTsKIAotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKmlwd19nZXRfc3RhdHVzX2NvZGUodTE2IHN0YXR1cykKIHsKIAlpbnQgaTsKQEAgLTQyNTAsNyArNDI1MCw3IEBACiAJCQkJCWlmIChwcml2LT4KIAkJCQkJICAgIHN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8CiAJCQkJCQkgICAgICBTVEFUVVNfQVVUSCkpIHsKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIAkJCQkJCXN0cnVjdCBub3RpZl9hdXRoZW50aWNhdGUgKmF1dGgKIAkJCQkJCSAgICA9ICZub3RpZi0+dS5hdXRoOwogCQkJCQkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8CkBAIC00OTQ0LDEyICs0OTQ0LDExIEBACiAJc3RydWN0IGlwd19yeF9xdWV1ZSAqcnhxOwogCWludCBpOwogCi0JcnhxID0gKHN0cnVjdCBpcHdfcnhfcXVldWUgKilrbWFsbG9jKHNpemVvZigqcnhxKSwgR0ZQX0tFUk5FTCk7CisJcnhxID0ga3phbGxvYyhzaXplb2YoKnJ4cSksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghcnhxKSkgewogCQlJUFdfRVJST1IoIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQocnhxLCAwLCBzaXplb2YoKnJ4cSkpOwogCXNwaW5fbG9ja19pbml0KCZyeHEtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X2ZyZWUpOwogCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwpAQCAtNTgyOCw3ICs1ODI3LDcgQEAKIAl1cCgmcHJpdi0+c2VtKTsKIH0KIAotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRwogc3RhdGljIHZvaWQgaXB3X2RlYnVnX2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJSVBXX0RFQlVHX0lORk8oIlNjYW4gY29tcGxldGVkLCBubyB2YWxpZCBBUHMgbWF0Y2hlZCAiCkBAIC03NDU2LDggKzc0NTUsNyBAQAogCS8qIEhXIGRlY3J5cHQgd2lsbCBub3QgY2xlYXIgdGhlIFdFUCBiaXQsIE1JQywgUE4sIGV0Yy4gKi8KIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKilyeGItPnNrYi0+ZGF0YTsKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX01PTklUT1IgJiYKLQkgICAgKChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSB8fAotCSAgICAgIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSA/CisJICAgIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSA/CiAJICAgICAhcHJpdi0+aWVlZS0+aG9zdF9tY19kZWNyeXB0IDogIXByaXYtPmllZWUtPmhvc3RfZGVjcnlwdCkpCiAJCWlwd19yZWJ1aWxkX2RlY3J5cHRlZF9za2IocHJpdiwgcnhiLT5za2IpOwogCkBAIC03NjQ4LDggKzc2NDYsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJLyoge2Jyb2FkLG11bHRpfWNhc3QgcGFja2V0cyB0byBvdXIgQlNTSUQgZ28gdGhyb3VnaCAqLwotCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSkgfHwKLQkJICAgIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEpKQorCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSkpCiAJCQlyZXR1cm4gIW1lbWNtcChoZWFkZXItPmFkZHIzLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOwogCiAJCS8qIHBhY2tldHMgdG8gb3VyIGFkYXB0ZXIgZ28gdGhyb3VnaCAqLwpAQCAtNzY2Miw4ICs3NjU5LDcgQEAKIAkJCXJldHVybiAwOwogCiAJCS8qIHticm9hZCxtdWx0aX1jYXN0IHBhY2tldHMgdG8gb3VyIEJTUyBnbyB0aHJvdWdoICovCi0JCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxKSB8fAotCQkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSkpCisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxKSkKIAkJCXJldHVybiAhbWVtY21wKGhlYWRlci0+YWRkcjIsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CiAKIAkJLyogcGFja2V0cyB0byBvdXIgYWRhcHRlciBnbyB0aHJvdWdoICovCkBAIC03ODE1LDcgKzc4MTEsNyBAQAogCiAJd2hpbGUgKGkgIT0gcikgewogCQlyeGIgPSBwcml2LT5yeHEtPnF1ZXVlW2ldOwotI2lmZGVmIENPTkZJR19JUFdfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRwogCQlpZiAodW5saWtlbHkocnhiID09IE5VTEwpKSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJRdWV1ZSBub3QgYWxsb2NhdGVkIVxuIik7CiAJCQlicmVhazsKQEAgLTk2NTcsOCArOTY1Myw3IEBACiAJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7CiAJY2FzZSBJV19NT0RFX0FESE9DOgogCQloZHJfbGVuID0gSUVFRTgwMjExXzNBRERSX0xFTjsKLQkJdW5pY2FzdCA9ICEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKLQkJCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSk7CisJCXVuaWNhc3QgPSAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CiAJCWlkID0gaXB3X2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAkJaWYgKGlkID09IElQV19JTlZBTElEX1NUQVRJT04pIHsKIAkJCWlkID0gaXB3X2FkZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwpAQCAtOTY3Myw4ICs5NjY4LDcgQEAKIAogCWNhc2UgSVdfTU9ERV9JTkZSQToKIAlkZWZhdWx0OgotCQl1bmljYXN0ID0gIShpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIzKSB8fAotCQkJICAgIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpKTsKKwkJdW5pY2FzdCA9ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIzKTsKIAkJaGRyX2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CiAJCWlkID0gMDsKIAkJYnJlYWs7CkBAIC0xMDk1Niw3ICsxMDk1MCw3IEBACiAKIAlwcml2LT5uZXRfZGV2ID0gbmV0X2RldjsKIAlwcml2LT5wY2lfZGV2ID0gcGRldjsKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIAlpcHdfZGVidWdfbGV2ZWwgPSBkZWJ1ZzsKICNlbmRpZgogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaAppbmRleCAxYzk4ZGIwLi5lNjU2MjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCkBAIC0xMzAxLDE0ICsxMzAxLDE0IEBACiAKIC8qIGRlYnVnIG1hY3JvcyAqLwogCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRworI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiAjZGVmaW5lIElQV19ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCiBkbyB7IGlmIChpcHdfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCiAgIHByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKICAgICAgICAgIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIElQV19ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfREVCVUcgKi8KIAogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwpAQCAtMTMzMiw3ICsxMzMyLDcgQEAKICAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaXB3X2RlYnVnX2xldmVscyBhcnJheS4KICAqCiAgKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaXB3IHRoZW4geW91IGRvIG5vdCBoYXZlCi0gKiBDT05GSUdfSVBXX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgorICogQ09ORklHX0lQVzIyMDBfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggM2E0ZjQ5Zi4uZjI4ZWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTEwOTgsNiArMTA5OCwyMyBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfRUVTU0MsCXF1aXJrX2FsZGVyX2lvYXBpYyApOwogI2VuZGlmCiAKK2VudW0gaWRlX2NvbWJpbmVkX3R5cGUgeyBDT01CSU5FRCA9IDAsIElERSA9IDEsIExJQkFUQSA9IDIgfTsKKy8qIERlZmF1bHRzIHRvIGNvbWJpbmVkICovCitzdGF0aWMgZW51bSBpZGVfY29tYmluZWRfdHlwZSBjb21iaW5lZF9tb2RlOworCitzdGF0aWMgaW50IF9faW5pdCBjb21iaW5lZF9zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHJuY21wKHN0ciwgImlkZSIsIDMpKQorCQljb21iaW5lZF9tb2RlID0gSURFOworCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgImxpYmF0YSIsIDYpKQorCQljb21iaW5lZF9tb2RlID0gTElCQVRBOworCWVsc2UgLyogImNvbWJpbmVkIiBvciBhbnl0aGluZyBlbHNlIGRlZmF1bHRzIHRvIG9sZCBiZWhhdmlvciAqLworCQljb21iaW5lZF9tb2RlID0gQ09NQklORUQ7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImNvbWJpbmVkX21vZGU9IiwgY29tYmluZWRfc2V0dXApOworCiAjaWZkZWYgQ09ORklHX1NDU0lfU0FUQV9JTlRFTF9DT01CSU5FRAogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2ludGVsX2lkZV9jb21iaW5lZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTExNjQsNiArMTE4MSwxOSBAQAogCWlmIChwcm9nICYgY29tYikKIAkJcmV0dXJuOwogCisJLyogRG9uJ3QgcmVzZXJ2ZSBhbnkgc28gdGhlIElERSBkcml2ZXIgY2FuIGdldCB0aGVtIChidXQgb25seSBpZgorCSAqIGNvbWJpbmVkX21vZGU9aWRlKS4KKwkgKi8KKwlpZiAoY29tYmluZWRfbW9kZSA9PSBJREUpCisJCXJldHVybjsKKworCS8qIEdyYWIgdGhlbSBib3RoIGZvciBsaWJhdGEgaWYgY29tYmluZWRfbW9kZT1saWJhdGEuICovCisJaWYgKGNvbWJpbmVkX21vZGUgPT0gTElCQVRBKSB7CisJCXJlcXVlc3RfcmVnaW9uKDB4MWYwLCA4LCAibGliYXRhIik7CS8qIHBvcnQgMCAqLworCQlyZXF1ZXN0X3JlZ2lvbigweDE3MCwgOCwgImxpYmF0YSIpOwkvKiBwb3J0IDEgKi8KKwkJcmV0dXJuOworCX0KKwogCS8qIFNBVEEgcG9ydCBpcyBpbiBsZWdhY3kgbW9kZS4gIFJlc2VydmUgcG9ydCBzbyB0aGF0CiAJICogSURFIGRyaXZlciBkb2VzIG5vdCBhdHRlbXB0IHRvIHVzZSBpdC4gIElmIHJlcXVlc3RfcmVnaW9uCiAJICogZmFpbHMsIGl0IHdpbGwgYmUgb2J2aW91cyBhdCBib290IHRpbWUsIHNvIHdlIGRvbid0IGJvdGhlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLy5naXRpZ25vcmUgYi9kcml2ZXJzL3Njc2kvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg1YWYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACis1M2M3MDBfZC5oCis1M2M3eHhfZC5oCis1M2M3eHhfdS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvNTNjNzAwLmMgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKaW5kZXggZTdhZDI2OS4uNGNlNzQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzUzYzcwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS81M2M3MDAuYwpAQCAtODU3LDcgKzg1Nyw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gInNjc2klZCAoJWQ6JWQpOiBVbmV4cGVjdGVkIG1lc3NhZ2UgJXM6ICIsCiAJCSAgICAgICBob3N0LT5ob3N0X25vLCBwdW4sIGx1biwKIAkJICAgICAgIE5DUl83MDBfcGhhc2VbKGRzcHMgJiAweGYwMCkgPj4gOF0pOwotCQlzY3NpX3ByaW50X21zZyhob3N0ZGF0YS0+bXNnaW4pOworCQlzcGlfcHJpbnRfbXNnKGhvc3RkYXRhLT5tc2dpbik7CiAJCXByaW50aygiXG4iKTsKIAkJLyoganVzdCByZWplY3QgaXQgKi8KIAkJaG9zdGRhdGEtPm1zZ291dFswXSA9IEFfUkVKRUNUX01TRzsKQEAgLTg4Nyw3ICs4ODcsNyBAQAogI2lmZGVmIE5DUl83MDBfREVCVUcKIAlwcmludGsoInNjc2klZCAoJWQ6JWQpOiBtZXNzYWdlICVzOiAiLCBob3N0LT5ob3N0X25vLCBwdW4sIGx1biwKIAkgICAgICAgTkNSXzcwMF9waGFzZVsoZHNwcyAmIDB4ZjAwKSA+PiA4XSk7Ci0Jc2NzaV9wcmludF9tc2coaG9zdGRhdGEtPm1zZ2luKTsKKwlzcGlfcHJpbnRfbXNnKGhvc3RkYXRhLT5tc2dpbik7CiAJcHJpbnRrKCJcbiIpOwogI2VuZGlmCiAKQEAgLTkzOSw3ICs5MzksNyBAQAogCQkgICAgICAgaG9zdC0+aG9zdF9ubywgcHVuLCBsdW4sCiAJCSAgICAgICBOQ1JfNzAwX3BoYXNlWyhkc3BzICYgMHhmMDApID4+IDhdKTsKIAotCQlzY3NpX3ByaW50X21zZyhob3N0ZGF0YS0+bXNnaW4pOworCQlzcGlfcHJpbnRfbXNnKGhvc3RkYXRhLT5tc2dpbik7CiAJCXByaW50aygiXG4iKTsKIAkJLyoganVzdCByZWplY3QgaXQgKi8KIAkJaG9zdGRhdGEtPm1zZ291dFswXSA9IEFfUkVKRUNUX01TRzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS81M2M3MDAuaCBiL2RyaXZlcnMvc2NzaS81M2M3MDAuaAppbmRleCAzNjJkNzg0Li5hOGM4M2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvNTNjNzAwLmgKKysrIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5oCkBAIC0yMzgsMjEgKzIzOCwyMyBAQAogI2lmZGVmIENPTkZJR181M0M3MDBfTEVfT05fQkUKICNkZWZpbmUgYkUJKGhvc3RkYXRhLT5mb3JjZV9sZV9vbl9iZSA/IDAgOiAzKQogI2RlZmluZQliU1dBUAkoaG9zdGRhdGEtPmZvcmNlX2xlX29uX2JlKQotLyogVGhpcyBpcyB0ZXJyaWJsZSwgYnV0IHRoZXJlJ3Mgbm8gcmF3IHZlcnNpb24gb2YgaW9yZWFkMzIuICBUaGF0IG1lYW5zCi0gKiB0aGF0IG9uIGEgYmUgYm9hcmQgd2Ugc3dhcCB0d2ljZSAob25jZSBpbiBpb3JlYWQzMiBhbmQgb25jZSBhZ2FpbiB0byAKLSAqIGdldCB0aGUgdmFsdWUgY29ycmVjdCkgKi8KLSNkZWZpbmUgYlNfdG9faW8oeCkJKChob3N0ZGF0YS0+Zm9yY2VfbGVfb25fYmUpID8gKHgpIDogY3B1X3RvX2xlMzIoeCkpCisjZGVmaW5lIGJFQnVzCSghaG9zdGRhdGEtPmZvcmNlX2xlX29uX2JlKQogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAjZGVmaW5lIGJFCTMKICNkZWZpbmUgYlNXQVAJMAotI2RlZmluZSBiU190b19pbyh4KQkoeCkKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogI2RlZmluZSBiRQkwCiAjZGVmaW5lIGJTV0FQCTAKLSNkZWZpbmUgYlNfdG9faW8oeCkJKHgpCiAjZWxzZQogI2Vycm9yICJfX0JJR19FTkRJQU4gb3IgX19MSVRUTEVfRU5ESUFOIG11c3QgYmUgZGVmaW5lZCwgZGlkIHlvdSBpbmNsdWRlIGJ5dGVvcmRlci5oPyIKICNlbmRpZgorI2lmbmRlZiBiRUJ1cworI2lmZGVmIENPTkZJR181M0M3MDBfQkVfQlVTCisjZGVmaW5lIGJFQnVzCTEKKyNlbHNlCisjZGVmaW5lIGJFQnVzCTAKKyNlbmRpZgorI2VuZGlmCiAjZGVmaW5lIGJTX3RvX2NwdSh4KQkoYlNXQVAgPyBsZTMyX3RvX2NwdSh4KSA6ICh4KSkKICNkZWZpbmUgYlNfdG9faG9zdCh4KQkoYlNXQVAgPyBjcHVfdG9fbGUzMih4KSA6ICh4KSkKIApAQCAtNDY2LDE0ICs0NjgsMTUgQEAKIHsKIAljb25zdCBzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhCiAJCT0gKHN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqKWhvc3QtPmhvc3RkYXRhWzBdOwotCV9fdTMyIHZhbHVlID0gaW9yZWFkMzIoaG9zdGRhdGEtPmJhc2UgKyByZWcpOworCV9fdTMyIHZhbHVlID0gYkVCdXMgPyBpb3JlYWQzMmJlKGhvc3RkYXRhLT5iYXNlICsgcmVnKSA6CisJCWlvcmVhZDMyKGhvc3RkYXRhLT5iYXNlICsgcmVnKTsKICNpZiAxCiAJLyogc2FuaXR5IGNoZWNrIHRoZSByZWdpc3RlciAqLwogCWlmKChyZWcgJiAweDMpICE9IDApCiAJCUJVRygpOwogI2VuZGlmCiAKLQlyZXR1cm4gYlNfdG9faW8odmFsdWUpOworCXJldHVybiB2YWx1ZTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC00OTcsNyArNTAwLDggQEAKIAkJQlVHKCk7CiAjZW5kaWYKIAotCWlvd3JpdGUzMihiU190b19pbyh2YWx1ZSksIGhvc3RkYXRhLT5iYXNlICsgcmVnKTsKKwliRUJ1cyA/IGlvd3JpdGUzMmJlKHZhbHVlLCBob3N0ZGF0YS0+YmFzZSArIHJlZyk6IAorCQlpb3dyaXRlMzIodmFsdWUsIGhvc3RkYXRhLT5iYXNlICsgcmVnKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvNTNjN3h4LmMgYi9kcml2ZXJzL3Njc2kvNTNjN3h4LmMKaW5kZXggOWNiNWRkNC4uNzg5NGI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzUzYzd4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS81M2M3eHguYwpAQCAtMjgyLDYgKzI4Miw3IEBACiAjaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc3BpLmg+CiAjaW5jbHVkZSAiNTNjN3h4LmgiCiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpAQCAtMTcyNCw3ICsxNzI1LDcgQEAKIAkJcHJpbnRrICgic2NzaSVkIDogc3RhdHVzICIsIGhvc3QtPmhvc3Rfbm8pOwogCQlzY3NpX3ByaW50X3N0YXR1cyAoc3RhdHVzKTsKIAkJcHJpbnRrICgiXG5zY3NpJWQgOiBtZXNzYWdlICIsIGhvc3QtPmhvc3Rfbm8pOwotCQlzY3NpX3ByaW50X21zZyAoJm1zZyk7CisJCXNwaV9wcmludF9tc2coJm1zZyk7CiAJCXByaW50ayAoIlxuIik7CiAJICAgIH0gZWxzZSBpZiAoaG9zdGRhdGEtPnRlc3RfY29tcGxldGVkID09IDMpIHsKIAkJcHJpbnRrKCJzY3NpJWQgOiB0ZXN0IDIgbm8gY29ubmVjdGlvbiB3aXRoIHRhcmdldCAlZFxuIiwKQEAgLTIzMTMsNyArMjMxNCw3IEBACiAJICAgIHByaW50ayAoInNjc2klZCA6IHJlY2VpdmVkIG1lc3NhZ2UiLCBob3N0LT5ob3N0X25vKTsKIAkgICAgaWYgKGMpIAogCSAgICAJcHJpbnRrICgiIGZyb20gdGFyZ2V0ICVkIGx1biAlZCAiLCBjLT5kZXZpY2UtPmlkLCBjLT5kZXZpY2UtPmx1bik7Ci0JICAgIHNjc2lfcHJpbnRfbXNnICgodW5zaWduZWQgY2hhciAqKSBob3N0ZGF0YS0+bXNnX2J1Zik7CisJICAgIHNwaV9wcmludF9tc2coKHVuc2lnbmVkIGNoYXIgKikgaG9zdGRhdGEtPm1zZ19idWYpOwogCSAgICBwcmludGsoIlxuIik7CiAJfQogCQpAQCAtNTU0MCw3ICs1NTQxLDcgQEAKIAkgICAgaSA+IDAgJiYgIWNoZWNrX2FkZHJlc3MgKCh1bnNpZ25lZCBsb25nKSBwdHIsIDEpOwogCSAgICBwdHIgKz0gbGVuLCBpIC09IGxlbikgewogCSAgICBwcmludGsoIiAgICAgICAgICAgICAgICIpOwotCSAgICBsZW4gPSBzY3NpX3ByaW50X21zZyAocHRyKTsKKwkgICAgbGVuID0gc3BpX3ByaW50X21zZyhwdHIpOwogCSAgICBwcmludGsoIlxuIik7CiAJICAgIGlmICghbGVuKQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggMjBkZDg1YS4uNGM0MjA2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTMzNiw2ICszMzYsNyBAQAogY29uZmlnIFNDU0lfQUhBMTUyWAogCXRyaXN0YXRlICJBZGFwdGVjIEFIQTE1MlgvMjgyNSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVNBICYmIFNDU0kgJiYgITY0QklUCisJc2VsZWN0IFNDU0lfU1BJX0FUVFJTCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIEFIQS0xNTEwLCBBSEEtMTUyMCwgQUhBLTE1MjIsIGFuZCBBSEEtMjgyNQogCSAgU0NTSSBob3N0IGFkYXB0ZXJzLiBJdCBhbHNvIHdvcmtzIGZvciB0aGUgQVZBLTE1MDUsIGJ1dCB0aGUgSVJRIGV0Yy4KQEAgLTYyMyw2ICs2MjQsNyBAQAogY29uZmlnIFNDU0lfRE1YMzE5MUQKIAl0cmlzdGF0ZSAiRE1YMzE5MUQgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAloZWxwCiAJICBUaGlzIGlzIHN1cHBvcnQgZm9yIERvbWV4IERNWDMxOTFEIFNDU0kgSG9zdCBBZGFwdGVycy4KIApAQCAtNjMyLDYgKzYzNCw3IEBACiBjb25maWcgU0NTSV9EVEMzMjgwCiAJdHJpc3RhdGUgIkRUQzMxODAvMzI4MCBTQ1NJIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJU0EgJiYgU0NTSQorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCWhlbHAKIAkgIFRoaXMgaXMgc3VwcG9ydCBmb3IgRFRDIDMxODAvMzI4MCBTQ1NJIEhvc3QgQWRhcHRlcnMuICBQbGVhc2UgcmVhZAogCSAgdGhlIFNDU0ktSE9XVE8sIGF2YWlsYWJsZSBmcm9tCkBAIC03NTIsNiArNzU1LDcgQEAKIGNvbmZpZyBTQ1NJX0dFTkVSSUNfTkNSNTM4MAogCXRyaXN0YXRlICJHZW5lcmljIE5DUjUzODAvNTNjNDAwIFNDU0kgUElPIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJU0EgJiYgU0NTSQorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBvbGQgTkNSIDUzYzgwIHNlcmllcyBvZiBTQ1NJIGNvbnRyb2xsZXJzCiAJICBvbiBib2FyZHMgdXNpbmcgUElPLiBNb3N0IGJvYXJkcyBzdWNoIGFzIHRoZSBUcmFudG9yIFQxMzAgZml0IHRoaXMKQEAgLTc3MSw2ICs3NzUsNyBAQAogY29uZmlnIFNDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8KIAl0cmlzdGF0ZSAiR2VuZXJpYyBOQ1I1MzgwLzUzYzQwMCBTQ1NJIE1NSU8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElTQSAmJiBTQ1NJCisJc2VsZWN0IFNDU0lfU1BJX0FUVFJTCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIG9sZCBOQ1IgNTNjODAgc2VyaWVzIG9mIFNDU0kgY29udHJvbGxlcnMKIAkgIG9uIGJvYXJkcyB1c2luZyBtZW1vcnkgbWFwcGVkIEkvTy4gCkBAIC0xMjU0LDYgKzEyNTksNyBAQAogY29uZmlnIFNDU0lfUEFTMTYKIAl0cmlzdGF0ZSAiUEFTMTYgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVNBICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHN1cHBvcnQgZm9yIGEgU0NTSSBob3N0IGFkYXB0ZXIuICBJdCBpcyBleHBsYWluZWQgaW4gc2VjdGlvbgogCSAgMy4xMCBvZiB0aGUgU0NTSS1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTE0MjMsNiArMTQyOSw3IEBACiBjb25maWcgU0NTSV9UMTI4CiAJdHJpc3RhdGUgIlRyYW50b3IgVDEyOC9UMTI4Ri9UMjI4IFNDU0kgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElTQSAmJiBTQ1NJCisJc2VsZWN0IFNDU0lfU1BJX0FUVFJTCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBzdXBwb3J0IGZvciBhIFNDU0kgaG9zdCBhZGFwdGVyLiBJdCBpcyBleHBsYWluZWQgaW4gc2VjdGlvbgogCSAgMy4xMSBvZiB0aGUgU0NTSS1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTE2ODEsNiArMTY4OCw3IEBACiBjb25maWcgQVRBUklfU0NTSQogCXRyaXN0YXRlICJBdGFyaSBuYXRpdmUgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVRBUkkgJiYgU0NTSSAmJiBCUk9LRU4KKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhbiBBdGFyaSB3aXRoIGJ1aWx0LWluIE5DUjUzODAgU0NTSSBjb250cm9sbGVyIChUVCwKIAkgIEZhbGNvbiwgLi4uKSBzYXkgWSB0byBnZXQgaXQgc3VwcG9ydGVkLiBPZiBjb3Vyc2UgYWxzbywgaWYgeW91IGhhdmUKQEAgLTE3MjIsNiArMTczMCw3IEBACiBjb25maWcgTUFDX1NDU0kKIAlib29sICJNYWNpbnRvc2ggTkNSNTM4MCBTQ1NJIgogCWRlcGVuZHMgb24gTUFDICYmIFNDU0k9eQorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIE5DUiA1MzgwIFNDU0kgY29udHJvbGxlciBpbmNsdWRlZCBvbiBtb3N0IG9mIHRoZSA2ODAzMAogCSAgYmFzZWQgTWFjaW50b3NoZXMuICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2Ugc2F5IFkgYW5kIHJlYWQgdGhlCkBAIC0xNzQzLDYgKzE3NTIsNyBAQAogY29uZmlnIE1WTUUxNDdfU0NTSQogCWJvb2wgIldEMzNDOTMgU0NTSSBkcml2ZXIgZm9yIE1WTUUxNDciCiAJZGVwZW5kcyBvbiBNVk1FMTQ3ICYmIFNDU0k9eQorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBvbi1ib2FyZCBTQ1NJIGNvbnRyb2xsZXIgb24gdGhlIE1vdG9yb2xhIE1WTUUxNDcKIAkgIHNpbmdsZS1ib2FyZCBjb21wdXRlci4KQEAgLTE3NTAsNiArMTc2MCw3IEBACiBjb25maWcgTVZNRTE2eF9TQ1NJCiAJYm9vbCAiTkNSNTNDNzEwIFNDU0kgZHJpdmVyIGZvciBNVk1FMTZ4IgogCWRlcGVuZHMgb24gTVZNRTE2eCAmJiBTQ1NJICYmIEJST0tFTgorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCWhlbHAKIAkgIFRoZSBNb3Rvcm9sYSBNVk1FMTYyLCAxNjYsIDE2NywgMTcyIGFuZCAxNzcgYm9hcmRzIHVzZSB0aGUgTkNSNTNDNzEwCiAJICBTQ1NJIGNvbnRyb2xsZXIgY2hpcC4gIEFsbW9zdCBldmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzCkBAIC0xNzU4LDYgKzE3NjksNyBAQAogY29uZmlnIEJWTUU2MDAwX1NDU0kKIAlib29sICJOQ1I1M0M3MTAgU0NTSSBkcml2ZXIgZm9yIEJWTUU2MDAwIgogCWRlcGVuZHMgb24gQlZNRTYwMDAgJiYgU0NTSSAmJiBCUk9LRU4KKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAloZWxwCiAJICBUaGUgQlZNRTQwMDAgYW5kIEJWTUU2MDAwIGJvYXJkcyBmcm9tIEJWTSBMdGQgdXNlIHRoZSBOQ1I1M0M3MTAKIAkgIFNDU0kgY29udHJvbGxlciBjaGlwLiAgQWxtb3N0IGV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMKQEAgLTE3NzQsNiArMTc4Niw3IEBACiBjb25maWcgU1VOM19TQ1NJCiAJdHJpc3RhdGUgIlN1bjMgTkNSNTM4MCBTQ1NJIgogCWRlcGVuZHMgb24gU1VOMyAmJiBTQ1NJICYmIEJST0tFTgorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBPQklPIChvbmJvYXJkIGlvKSBOQ1I1MzgwCiAJICBTQ1NJIGNvbnRyb2xsZXIgZm91bmQgaW4gdGhlIFN1biAzLzUwIGFuZCAzLzYwLCBhcyB3ZWxsIGFzIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKaW5kZXggY2JhOTY1NS4uOWYwZGRiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCkBAIC04Nyw2ICs4Nyw3IEBACiAgKiAgICAgIHRoZSBoaWdoIGxldmVsIGNvZGUuCiAgKi8KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaD4KIAogI2lmbmRlZiBOREVCVUcKICNkZWZpbmUgTkRFQlVHIDAKQEAgLTIzNzcsNyArMjM3OCw3IEBACiAgKiAzLi5sZW5ndGgrMSAgYXJndW1lbnRzCiAgKgogICogU3RhcnQgdGhlIGV4dGVuZGVkIG1lc3NhZ2UgYnVmZmVyIHdpdGggdGhlIEVYVEVOREVEX01FU1NBR0UKLSAqIGJ5dGUsIHNpbmNlIHNjc2lfcHJpbnRfbXNnKCkgd2FudHMgdGhlIHdob2xlIHRoaW5nLiAgCisgKiBieXRlLCBzaW5jZSBzcGlfcHJpbnRfbXNnKCkgd2FudHMgdGhlIHdob2xlIHRoaW5nLiAgCiAgKi8KIAkJCQkJZXh0ZW5kZWRfbXNnWzBdID0gRVhURU5ERURfTUVTU0FHRTsKIAkJCQkJLyogQWNjZXB0IGZpcnN0IGJ5dGUgYnkgY2xlYXJpbmcgQUNLICovCkBAIC0yNDI0LDcgKzI0MjUsNyBAQAogCQkJCWRlZmF1bHQ6CiAJCQkJCWlmICghdG1wKSB7CiAJCQkJCQlwcmludGsoInNjc2klZDogcmVqZWN0aW5nIG1lc3NhZ2UgIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCQkJCQkJc2NzaV9wcmludF9tc2coZXh0ZW5kZWRfbXNnKTsKKwkJCQkJCXNwaV9wcmludF9tc2coZXh0ZW5kZWRfbXNnKTsKIAkJCQkJCXByaW50aygiXG4iKTsKIAkJCQkJfSBlbHNlIGlmICh0bXAgIT0gRVhURU5ERURfTUVTU0FHRSkKIAkJCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLApAQCAtMjU2MCw3ICsyNTYxLDcgQEAKIAogCWlmICghKG1zZ1swXSAmIDB4ODApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2NzaSVkIDogZXhwZWN0aW5nIElERU5USUZZIG1lc3NhZ2UsIGdvdCAiLCBpbnN0YW5jZS0+aG9zdF9ubyk7Ci0JCXNjc2lfcHJpbnRfbXNnKG1zZyk7CisJCXNwaV9wcmludF9tc2cobXNnKTsKIAkJYWJvcnQgPSAxOwogCX0gZWxzZSB7CiAJCS8qIEFjY2VwdCBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoYTE1MnguYyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKaW5kZXggOWRmMjNiNi4uY2IyZWUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoYTE1MnguYworKysgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCkBAIC0yNTksNiArMjU5LDcgQEAKICNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaD4KICNpbmNsdWRlICJhaGExNTJ4LmgiCiAKIApAQCAtMTg0NSw3ICsxODQ2LDcgQEAKICNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCiAJCWlmIChIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfbXNnaSkgewogCQkJcHJpbnRrKElORk9fTEVBRCAiaW5ib3VuZCBtZXNzYWdlICUwMnggIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgTVNHSSgwKSk7Ci0JCQlzY3NpX3ByaW50X21zZygmTVNHSSgwKSk7CisJCQlzcGlfcHJpbnRfbXNnKCZNU0dJKDApKTsKIAkJCXByaW50aygiXG4iKTsKIAkJfQogI2VuZGlmCkBAIC0xOTMzLDcgKzE5MzQsNyBAQAogCQkJCQkJYnJlYWs7CiAKIAkJCQkJcHJpbnRrKElORk9fTEVBRCwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7Ci0JCQkJCXNjc2lfcHJpbnRfbXNnKCZNU0dJKDApKTsKKwkJCQkJc3BpX3ByaW50X21zZygmTVNHSSgwKSk7CiAJCQkJCXByaW50aygiXG4iKTsKIAogCQkJCQl0aWNrcyA9IChNU0dJKDMpICogNCArIDQ5KSAvIDUwOwpAQCAtMjAzMSw3ICsyMDMyLDcgQEAKIAkJaW50IGk7CiAKIAkJcHJpbnRrKERFQlVHX0xFQUQgIm1lc3NhZ2VzKCAiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJZm9yIChpPTA7IGk8TVNHT0xFTjsgaSs9c2NzaV9wcmludF9tc2coJk1TR08oaSkpLCBwcmludGsoIiAiKSkKKwkJZm9yIChpPTA7IGk8TVNHT0xFTjsgaSs9c3BpX3ByaW50X21zZygmTVNHTyhpKSksIHByaW50aygiICIpKQogCQkJOwogCQlwcmludGsoIilcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGNpLmMgYi9kcml2ZXJzL3Njc2kvYWhjaS5jCmluZGV4IDgzNDY3YTAuLjg4N2VhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoY2kuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJLnBvcnRfc3RvcAkJPSBhaGNpX3BvcnRfc3RvcCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBhaGNpX3BvcnRfaW5mb1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGFoY2lfcG9ydF9pbmZvW10gPSB7CiAJLyogYm9hcmRfYWhjaSAqLwogCXsKIAkJLnNodAkJPSAmYWhjaV9zaHQsCkBAIC02NDMsNyArNjQzLDggQEAKIAkgCSAqIG5vdCBiZWluZyBjYWxsZWQgZnJvbSB0aGUgU0NTSSBFSC4KIAkgCSAqLwogCQlxYy0+c2NzaWRvbmUgPSBzY3NpX2ZpbmlzaF9jb21tYW5kOwotCQlhdGFfcWNfY29tcGxldGUocWMsIEFDX0VSUl9PVEhFUik7CisJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfT1RIRVI7CisJCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKQEAgLTY2NCw3ICs2NjUsOCBAQAogCWNpID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUpOwogCWlmIChsaWtlbHkoKGNpICYgMHgxKSA9PSAwKSkgewogCQlpZiAocWMpIHsKLQkJCWF0YV9xY19jb21wbGV0ZShxYywgMCk7CisJCQlhc3NlcnQocWMtPmVycl9tYXNrID09IDApOworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAkJCXFjID0gTlVMTDsKIAkJfQogCX0KQEAgLTY4MSw4ICs2ODMsMTAgQEAKIAkJLyogY29tbWFuZCBwcm9jZXNzaW5nIGhhcyBzdG9wcGVkIGR1ZSB0byBlcnJvcjsgcmVzdGFydCAqLwogCQlhaGNpX3Jlc3RhcnRfcG9ydChhcCwgc3RhdHVzKTsKIAotCQlpZiAocWMpCi0JCQlhdGFfcWNfY29tcGxldGUocWMsIGVycl9tYXNrKTsKKwkJaWYgKHFjKSB7CisJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJfQogCX0KIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvLmdpdGlnbm9yZSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlZTI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4Ly5naXRpZ25vcmUKQEAgLTAsMCArMSw2IEBACithaWM3OXh4X3JlZy5oCithaWM3OXh4X3JlZ19wcmludC5jCithaWM3OXh4X3NlcS5oCithaWM3eHh4X3JlZy5oCithaWM3eHh4X3JlZ19wcmludC5jCithaWM3eHh4X3NlcS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCA2YWFiOWRhLi4xYzhmODcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKQEAgLTEwNjQsNiArMTA2NCw3IEBACiAJc3RydWN0CVNjc2lfSG9zdCAqaG9zdDsKIAljaGFyCSpuZXdfbmFtZTsKIAl1X2xvbmcJczsKKwlpbnQJcmV0dmFsOwogCiAJdGVtcGxhdGUtPm5hbWUgPSBhaGQtPmRlc2NyaXB0aW9uOwogCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2ModGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgYWhkX3NvZnRjICopKTsKQEAgLTEwOTYsOSArMTA5NywxNSBAQAogCiAJaG9zdC0+dHJhbnNwb3J0dCA9IGFoZF9saW51eF90cmFuc3BvcnRfdGVtcGxhdGU7CiAKLQlzY3NpX2FkZF9ob3N0KGhvc3QsICZhaGQtPmRldl9zb2Z0Yy0+ZGV2KTsgLyogWFhYIGhhbmRsZSBmYWlsdXJlICovCisJcmV0dmFsID0gc2NzaV9hZGRfaG9zdChob3N0LCAmYWhkLT5kZXZfc29mdGMtPmRldik7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhaWM3OXh4OiBzY3NpX2FkZF9ob3N0IGZhaWxlZFxuIik7CisJCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogdWludDY0X3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCmluZGV4IGQ4NjYyMTMuLmZkMzg5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwpAQCAtMTA2MSwxMCArMTA2MSwxMSBAQAogaW50CiBhaGNfbGludXhfcmVnaXN0ZXJfaG9zdChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRlbXBsYXRlKQogewotCWNoYXIJIGJ1Zls4MF07Ci0Jc3RydWN0CSBTY3NpX0hvc3QgKmhvc3Q7CisJY2hhcglidWZbODBdOworCXN0cnVjdAlTY3NpX0hvc3QgKmhvc3Q7CiAJY2hhcgkqbmV3X25hbWU7Ci0JdV9sb25nCSBzOworCXVfbG9uZwlzOworCWludAlyZXR2YWw7CiAKIAl0ZW1wbGF0ZS0+bmFtZSA9IGFoYy0+ZGVzY3JpcHRpb247CiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyh0ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBhaGNfc29mdGMgKikpOwpAQCAtMTA5Nyw5ICsxMDk4LDE2IEBACiAKIAlob3N0LT50cmFuc3BvcnR0ID0gYWhjX2xpbnV4X3RyYW5zcG9ydF90ZW1wbGF0ZTsKIAotCXNjc2lfYWRkX2hvc3QoaG9zdCwgKGFoYy0+ZGV2X3NvZnRjID8gJmFoYy0+ZGV2X3NvZnRjLT5kZXYgOiBOVUxMKSk7IC8qIFhYWCBoYW5kbGUgZmFpbHVyZSAqLworCXJldHZhbCA9IHNjc2lfYWRkX2hvc3QoaG9zdCwKKwkJCShhaGMtPmRldl9zb2Z0YyA/ICZhaGMtPmRldl9zb2Z0Yy0+ZGV2IDogTlVMTCkpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWljN3h4eDogc2NzaV9hZGRfaG9zdCBmYWlsZWRcbiIpOworCQlzY3NpX2hvc3RfcHV0KGhvc3QpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvYXJtL0tjb25maWcKaW5kZXggMTNmMjMwNC4uMDZkNzYwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIGNvbmZpZyBTQ1NJX0FDT1JOU0NTSV8zCiAJdHJpc3RhdGUgIkFjb3JuIFNDU0kgY2FyZCAoYWthMzApIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX0FDT1JOICYmIFNDU0kgJiYgQlJPS0VOCisJc2VsZWN0IFNDU0lfU1BJX0FUVFJTCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBY29ybiBTQ1NJIGNhcmQgKGFrYTMwKS4gSWYgeW91IGhhdmUgYW4KIAkgIEFjb3JuIHN5c3RlbSB3aXRoIG9uZSBvZiB0aGVzZSwgc2F5IFkuIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwppbmRleCBiN2IyMGM2Li4wOWVkMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKQEAgLTE1Miw2ICsxNTIsNyBAQAogI2luY2x1ZGUgIi4uL3Njc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oPgogI2luY2x1ZGUgImFjb3Juc2NzaS5oIgogI2luY2x1ZGUgIm1zZ3F1ZXVlLmgiCiAjaW5jbHVkZSAic2NzaS5oIgpAQCAtMTM3MCw3ICsxMzcxLDcgQEAKIAogCWhvc3QtPnNjc2kubGFzdF9tZXNzYWdlID0gbXNnLT5tc2dbMF07CiAjaWYgKERFQlVHICYgREVCVUdfTUVTU0FHRVMpCi0Jc2NzaV9wcmludF9tc2cobXNnLT5tc2cpOworCXNwaV9wcmludF9tc2cobXNnLT5tc2cpOwogI2VuZGlmCiAJYnJlYWs7CiAKQEAgLTEzOTIsNyArMTM5Myw3IEBACiAJd2hpbGUgKChtc2cgPSBtc2dxdWV1ZV9nZXRtc2coJmhvc3QtPnNjc2kubXNncywgbXNnbnIrKykpICE9IE5VTEwpIHsKIAkgICAgdW5zaWduZWQgaW50IGk7CiAjaWYgKERFQlVHICYgREVCVUdfTUVTU0FHRVMpCi0JICAgIHNjc2lfcHJpbnRfbXNnKG1zZyk7CisJICAgIHNwaV9wcmludF9tc2cobXNnKTsKICNlbmRpZgogCSAgICBpID0gMDsKIAkgICAgaWYgKGFjb3Juc2NzaV93cml0ZV9waW8oaG9zdCwgbXNnLT5tc2csICZpLCBtc2ctPmxlbmd0aCwgMTAwMDAwMCkpCkBAIC0xNDg4LDcgKzE0ODksNyBAQAogI2lmIChERUJVRyAmIERFQlVHX01FU1NBR0VTKQogICAgIHByaW50aygic2NzaSVkLiVjOiBtZXNzYWdlIGluOiAiLAogCSAgICBob3N0LT5ob3N0LT5ob3N0X25vLCBhY29ybnNjc2lfdGFyZ2V0KGhvc3QpKTsKLSAgICBzY3NpX3ByaW50X21zZyhtZXNzYWdlKTsKKyAgICBzcGlfcHJpbnRfbXNnKG1lc3NhZ2UpOwogICAgIHByaW50aygiXG4iKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYyBiL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCmluZGV4IDMzM2Q2OWQuLjBlYTI3ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCkBAIC0zNyw2ICszNyw0OSBAQAogICoKICAqICBIYXJkd2FyZSBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBhdCBodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS8KICAqCisgKiBEb2N1bWVudGF0aW9uCisgKglQdWJsaWNhbGx5IGF2YWlsYWJsZSBmcm9tIEludGVsIHdlYiBzaXRlLiBFcnJhdGEgZG9jdW1lbnRhdGlvbgorICogaXMgYWxzbyBwdWJsaWNhbGx5IGF2YWlsYWJsZS4gQXMgYW4gYWlkZSB0byBhbnlvbmUgaGFja2luZyBvbiB0aGlzCisgKiBkcml2ZXIgdGhlIGxpc3Qgb2YgZXJyYXRhIHRoYXQgYXJlIHJlbGV2YW50IGlzIGJlbG93LmdvaW5nIGJhY2sgdG8KKyAqIFBJSVg0LiBPbGRlciBkZXZpY2UgZG9jdW1lbnRhdGlvbiBpcyBub3cgYSBiaXQgdHJpY2t5IHRvIGZpbmQuCisgKgorICogVGhlIGNoaXBzZXRzIGFsbCBmb2xsb3cgdmVyeSBtdWNoIHRoZSBzYW1lIGRlc2lnbi4gVGhlIG9yZ2luYWwgVHJpdG9uCisgKiBzZXJpZXMgY2hpcHNldHMgZG8gX25vdF8gc3VwcG9ydCBpbmRlcGVuZGFudCBkZXZpY2UgdGltaW5ncywgYnV0IHRoaXMKKyAqIGlzIGZpeGVkIGluIFRyaXRvbiBJSS4gV2l0aCB0aGUgb2RkIG1vYmlsZSBleGNlcHRpb24gdGhlIGNoaXBzIHRoZW4KKyAqIGNoYW5nZSBsaXR0bGUgZXhjZXB0IGluIGdhaW5pbmcgbW9yZSBtb2RlcyB1bnRpbCBTQVRBIGFycml2ZXMuIFRoaXMKKyAqIGRyaXZlciBzdXBwb3J0cyBvbmx5IHRoZSBjaGlwcyB3aXRoIGluZGVwZW5kYW50IHRpbWluZyAodGhhdCBpcyB0aG9zZQorICogd2l0aCBTSVRSRSBhbmQgdGhlIDB4NDQgdGltaW5nIHJlZ2lzdGVyKS4gU2VlIHBhdGFfb2xkcGlpeCBhbmQgcGF0YV9tcGlpeAorICogZm9yIHRoZSBlYXJseSBjaGlwIGRyaXZlcnMuCisgKgorICogRXJyYXRhIG9mIG5vdGU6CisgKgorICogVW5maXhhYmxlCisgKglQSUlYNCAgICBlcnJhdGEgIzkJLSBPbmx5IG9uIHVsdHJhIG9ic2N1cmUgaHcKKyAqCUlDSDMJIGVycmF0YSAjMTMgICAgIC0gTm90IG9ic2VydmVkIHRvIGFmZmVjdCByZWFsIGh3CisgKgkJCQkgIGJ5IEludGVsCisgKgorICogVGhpbmdzIHdlIG11c3QgZGVhbCB3aXRoCisgKglQSUlYNAllcnJhdGEgIzEwCS0gQk0gSURFIGhhbmcgd2l0aCBub24gVURNQQorICoJCQkJICAobXVzdCBzdG9wL3N0YXJ0IGRtYSB0byByZWNvdmVyKQorICoJNDQwTVggICBlcnJhdGEgIzE1CS0gQXMgUElJWDQgZXJyYXRhICMxMAorICoJUElJWDQJZXJyYXRhICMxNQktIE11c3Qgbm90IHJlYWQgY29udHJvbCByZWdpc3RlcnMKKyAqIAkJCQkgIGR1cmluZyBhIFBJTyB0cmFuc2ZlcgorICoJNDQwTVggICBlcnJhdGEgIzEzCS0gQXMgUElJWDQgZXJyYXRhICMxNQorICoJSUNIMgllcnJhdGEgIzIxCS0gRE1BIG1vZGUgMCBkb2Vzbid0IHdvcmsgcmlnaHQKKyAqCUlDSDAvMSAgZXJyYXRhICM1NQktIEFzIElDSDIgZXJyYXRhICMyMQorICoJSUNIMglzcGVjIGMgIzkJLSBFeHRyYSBvcGVyYXRpb25zIG5lZWRlZCB0byBoYW5kbGUKKyAqCQkJCSAgZHJpdmUgaG90c3dhcCBbTk9UIFlFVCBTVVBQT1JURURdCisgKglJQ0gyICAgIHNwZWMgYyAjMjAJLSBJREUgUFJEIG11c3Qgbm90IGNyb3NzIGEgNjRLIGJvdW5kYXJ5CisgKgkJCQkgIGFuZCBtdXN0IGJlIGR3b3JkIGFsaWduZWQKKyAqCUlDSDIgICAgc3BlYyBjICMyNAktIFVETUEgbW9kZSA0LDUgdDg1Lzg2IHNob3VsZCBiZSA2bnMgbm90IDMuMworICoKKyAqIFNob3VsZCBoYXZlIGJlZW4gQklPUyBmaXhlZDoKKyAqCTQ1ME5YOgllcnJhdGEgIzE5CS0gRE1BIGhhbmdzIG9uIG9sZCA0NTBOWAorICoJNDUwTlg6ICBlcnJhdGEgIzIwCS0gRE1BIGhhbmdzIG9uIG9sZCA0NTBOWAorICoJNDUwTlg6ICBlcnJhdGEgIzI1CS0gQ29ycnVwdGlvbiB3aXRoIERNQSBvbiBvbGQgNDUwTlgKKyAqCUlDSDMgICAgZXJyYXRhICMxNSAgICAgIC0gSURFIGRlYWRsb2NrIHVuZGVyIGhpZ2ggbG9hZAorICoJCQkJICAoQklPUyBtdXN0IHNldCBkZXYgMzEgZm4gMCBiaXQgMjMpCisgKglJQ0gzCWVycmF0YSAjMTgJLSBEb24ndCB1c2UgbmF0aXZlIG1vZGUKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03OCw5ICsxMjEsNyBAQAogCWljaDVfc2F0YQkJPSAxLAogCXBpaXg0X3BhdGEJCT0gMiwKIAlpY2g2X3NhdGEJCT0gMywKLQlpY2g2X3NhdGFfcm0JCT0gNCwKLQlpY2g3X3NhdGEJCT0gNSwKLQllc2IyX3NhdGEJCT0gNiwKKwlpY2g2X3NhdGFfYWhjaQkJPSA0LAogCiAJUElJWF9BSENJX0RFVklDRQk9IDYsCiB9OwpAQCAtMTExLDExICsxNTIsMTEgQEAKIAl7IDB4ODA4NiwgMHgyNWEzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g1X3NhdGEgfSwKIAl7IDB4ODA4NiwgMHgyNWIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g1X3NhdGEgfSwKIAl7IDB4ODA4NiwgMHgyNjUxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGEgfSwKLQl7IDB4ODA4NiwgMHgyNjUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfcm0gfSwKLQl7IDB4ODA4NiwgMHgyNjUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfcm0gfSwKLQl7IDB4ODA4NiwgMHgyN2MwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g3X3NhdGEgfSwKLQl7IDB4ODA4NiwgMHgyN2M0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g3X3NhdGEgfSwKLQl7IDB4ODA4NiwgMHgyNjgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBlc2IyX3NhdGEgfSwKKwl7IDB4ODA4NiwgMHgyNjUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAorCXsgMHg4MDg2LCAweDI2NTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZfc2F0YV9haGNpIH0sCisJeyAweDgwODYsIDB4MjdjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNl9zYXRhX2FoY2kgfSwKKwl7IDB4ODA4NiwgMHgyN2M0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAorCXsgMHg4MDg2LCAweDI2ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZfc2F0YV9haGNpIH0sCiAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CkBAIC0yNTgsMzEgKzI5OSw3IEBACiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCiAKLQkvKiBpY2g2X3NhdGFfcm0gKi8KLQl7Ci0JCS5zaHQJCT0gJnBpaXhfc2h0LAotCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19TUlNUIHwKLQkJCQkgIFBJSVhfRkxBR19DT01CSU5FRCB8IFBJSVhfRkxBR19DSEVDS0lOVFIgfAotCQkJCSAgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IFBJSVhfRkxBR19BSENJLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gMHg3ZiwJLyogdWRtYTAtNiAqLwotCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKLQl9LAotCi0JLyogaWNoN19zYXRhICovCi0JewotCQkuc2h0CQk9ICZwaWl4X3NodCwKLQkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfU1JTVCB8Ci0JCQkJICBQSUlYX0ZMQUdfQ09NQklORUQgfCBQSUlYX0ZMQUdfQ0hFQ0tJTlRSIHwKLQkJCQkgIEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBQSUlYX0ZMQUdfQUhDSSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IDB4N2YsCS8qIHVkbWEwLTYgKi8KLQkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCi0JfSwKLQotCS8qIGVzYjJfc2F0YSAqLworCS8qIGljaDZfc2F0YV9haGNpICovCiAJewogCQkuc2h0CQk9ICZwaWl4X3NodCwKIAkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfU1JTVCB8CkBAIC02MDMsNiArNjIwLDQwIEBACiB9CiAKIC8qKgorICoJcGlpeF9jaGVja180NTBueF9lcnJhdGEJLQlDaGVjayBmb3IgcHJvYmxlbSA0NTBOWCBzZXR1cAorICoJCisgKglDaGVjayBmb3IgdGhlIHByZXNlbnQgb2YgNDUwTlggZXJyYXRhICMxOSBhbmQgZXJyYXRhICMyNS4gSWYKKyAqCXRoZXkgYXJlIGZvdW5kIHJldHVybiBhbiBlcnJvciBjb2RlIHNvIHdlIGNhbiB0dXJuIG9mZiBETUEKKyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwaWl4X2NoZWNrXzQ1MG54X2VycmF0YShzdHJ1Y3QgcGNpX2RldiAqYXRhX2RldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJdTE2IGNmZzsKKwl1OCByZXY7CisJaW50IG5vX3BpaXhfZG1hID0gMDsKKwkKKwl3aGlsZSgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTROWCwgcGRldikpICE9IE5VTEwpCisJeworCQkvKiBMb29rIGZvciA0NTBOWCBQWEIuIENoZWNrIGZvciBwcm9ibGVtIGNvbmZpZ3VyYXRpb25zCisJCSAgIEEgUENJIHF1aXJrIGNoZWNrcyBiaXQgNiBhbHJlYWR5ICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NDEsICZjZmcpOworCQkvKiBPbmx5IG9uIHRoZSBvcmlnaW5hbCByZXZpc2lvbjogSURFIERNQSBjYW4gaGFuZyAqLworCQlpZihyZXYgPT0gMHgwMCkKKwkJCW5vX3BpaXhfZG1hID0gMTsKKwkJLyogT24gYWxsIHJldmlzaW9ucyBiZWxvdyA1IFBYQiBidXMgbG9jayBtdXN0IGJlIGRpc2FibGVkIGZvciBJREUgKi8KKwkJZWxzZSBpZihjZmcgJiAoMTw8MTQpICYmIHJldiA8IDUpCisJCQlub19waWl4X2RtYSA9IDI7CisJfQorCWlmKG5vX3BpaXhfZG1hKQorCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJmF0YV9kZXYtPmRldiwgIjQ1ME5YIGVycmF0YSBwcmVzZW50LCBkaXNhYmxpbmcgSURFIERNQS5cbiIpOworCWlmKG5vX3BpaXhfZG1hID09IDIpCisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmYXRhX2Rldi0+ZGV2LCAiQSBCSU9TIHVwZGF0ZSBtYXkgcmVzb2x2ZSB0aGlzLlxuIik7CisJcmV0dXJuIG5vX3BpaXhfZG1hOworfQkJCisKKy8qKgogICoJcGlpeF9pbml0X29uZSAtIFJlZ2lzdGVyIFBJSVggQVRBIFBDSSBkZXZpY2Ugd2l0aCBrZXJuZWwgc2VydmljZXMKICAqCUBwZGV2OiBQQ0kgZGV2aWNlIHRvIHJlZ2lzdGVyCiAgKglAZW50OiBFbnRyeSBpbiBwaWl4X3BjaV90YmwgbWF0Y2hpbmcgd2l0aCBAcGRldgpAQCAtNjc2LDcgKzcyNywxNSBAQAogCQkJICAgImNvbWJpbmVkIG1vZGUgZGV0ZWN0ZWQgKHA9JXUsIHM9JXUpXG4iLAogCQkJICAgcGF0YV9jaGFuLCBzYXRhX2NoYW4pOwogCX0KLQorCWlmIChwaWl4X2NoZWNrXzQ1MG54X2VycmF0YShwZGV2KSkgeworCQkvKiBUaGlzIHdyaXRlcyBpbnRvIHRoZSBtYXN0ZXIgdGFibGUgYnV0IGl0IGRvZXMgbm90CisJCSAgIHJlYWxseSBtYXR0ZXIgZm9yIHRoaXMgZXJyYXRhIGFzIHdlIHdpbGwgYXBwbHkgaXQgdG8KKwkJICAgYWxsIHRoZSBQSUlYIGRldmljZXMgb24gdGhlIGJvYXJkICovCisJCXBvcnRfaW5mb1swXS0+bXdkbWFfbWFzayA9IDA7CisJCXBvcnRfaW5mb1swXS0+dWRtYV9tYXNrID0gMDsKKwkJcG9ydF9pbmZvWzFdLT5td2RtYV9tYXNrID0gMDsKKwkJcG9ydF9pbmZvWzFdLT51ZG1hX21hc2sgPSAwOworCX0KIAlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwppbmRleCAyYWUzMWNlLi41NzI5NWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKQEAgLTc0LDYgKzc0LDcgQEAKICAqICAgICB0aGUgaGlnaCBsZXZlbCBjb2RlLgogICovCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc3BpLmg+CiAKICNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQogI2RlZmluZSBMSVNUKHgseSkgXApAQCAtMjM1NSw3ICsyMzU2LDcgQEAKICAqIDMuLmxlbmd0aCsxCWFyZ3VtZW50cwogICoKICAqIFN0YXJ0IHRoZSBleHRlbmRlZCBtZXNzYWdlIGJ1ZmZlciB3aXRoIHRoZSBFWFRFTkRFRF9NRVNTQUdFCi0gKiBieXRlLCBzaW5jZSBzY3NpX3ByaW50X21zZygpIHdhbnRzIHRoZSB3aG9sZSB0aGluZy4gIAorICogYnl0ZSwgc2luY2Ugc3BpX3ByaW50X21zZygpIHdhbnRzIHRoZSB3aG9sZSB0aGluZy4gIAogICovCiAJCSAgICBleHRlbmRlZF9tc2dbMF0gPSBFWFRFTkRFRF9NRVNTQUdFOwogCQkgICAgLyogQWNjZXB0IGZpcnN0IGJ5dGUgYnkgY2xlYXJpbmcgQUNLICovCkBAIC0yNDA4LDcgKzI0MDksNyBAQAogCQlkZWZhdWx0OgogCQkgICAgaWYgKCF0bXApIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyBtZXNzYWdlICIsIEhPU1ROTyk7Ci0JCQlzY3NpX3ByaW50X21zZyAoZXh0ZW5kZWRfbXNnKTsKKwkJCXNwaV9wcmludF9tc2coZXh0ZW5kZWRfbXNnKTsKIAkJCXByaW50aygiXG4iKTsKIAkJICAgIH0gZWxzZSBpZiAodG1wICE9IEVYVEVOREVEX01FU1NBR0UpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiByZWplY3RpbmcgdW5rbm93biAiCkBAIC0yNTQxLDcgKzI1NDIsNyBAQAogCiAgICAgaWYgKCEobXNnWzBdICYgMHg4MCkpIHsKIAlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiBleHBlY3RpbmcgSURFTlRJRlkgbWVzc2FnZSwgZ290ICIsIEhPU1ROTyk7Ci0Jc2NzaV9wcmludF9tc2cobXNnKTsKKwlzcGlfcHJpbnRfbXNnKG1zZyk7CiAJZG9fYWJvcnQoaW5zdGFuY2UpOwogCXJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IGNjYmJhZTIuLjA5MjAyMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC03NSw3ICs3NSw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkodmVuZG9yX2ZpcnN0cywgaW50LCBOVUxMLCAwNDQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheSh2ZW5kb3JfY291bnRzLCBpbnQsIE5VTEwsIDA0NDQpOwogCi1zdGF0aWMgY2hhciAqdmVuZG9yX2xhYmVsc1tDSF9UWVBFUy00XSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogdmVuZG9yX2xhYmVsc1tDSF9UWVBFUy00XSA9IHsKIAkidjAiLCAidjEiLCAidjIiLCAidjMiCiB9OwogLy8gbW9kdWxlX3BhcmFtX3N0cmluZ19hcnJheSh2ZW5kb3JfbGFiZWxzLCBOVUxMLCAwNDQ0KTsKQEAgLTE0MCw3ICsxNDAsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXVuc2lnbmVkIGNoYXIgIHNlbnNlOwogCXVuc2lnbmVkIGNoYXIgIGFzYzsKIAl1bnNpZ25lZCBjaGFyICBhc2NxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IDA5YmM4MTUuLjMwYTMzNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAJY29uc3QgY2hhciAqIGZtdDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXJyb3JfaW5mbzIgYWRkaXRpb25hbDJbXSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGVycm9yX2luZm8yIGFkZGl0aW9uYWwyW10gPQogewogCXsweDQwLDB4MDAsMHg3ZiwiUmFtIGZhaWx1cmUgKCV4KSJ9LAogCXsweDQwLDB4ODAsMHhmZiwiRGlhZ25vc3RpYyBmYWlsdXJlIG9uIGNvbXBvbmVudCAoJXgpIn0sCkBAIC0xMDc3LDcgKzEwNzcsNyBAQAogfTsKIAogLyogZGVzY3JpcHRpb24gb2YgdGhlIHNlbnNlIGtleSB2YWx1ZXMgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpzbnN0ZXh0W10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNuc3RleHRbXSA9IHsKIAkiTm8gU2Vuc2UiLAkgICAgLyogMDogVGhlcmUgaXMgbm8gc2Vuc2UgaW5mb3JtYXRpb24gKi8KIAkiUmVjb3ZlcmVkIEVycm9yIiwgIC8qIDE6IFRoZSBsYXN0IGNvbW1hbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQogCQkJCSAgYnV0IHVzZWQgZXJyb3IgY29ycmVjdGlvbiAqLwpAQCAtMTI3OCwxMTQgKzEyNzgsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3JlcV9zZW5zZSk7CiAKLSNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKLXN0YXRpYyBjb25zdCBjaGFyICpvbmVfYnl0ZV9tc2dzW10gPSB7Ci0vKiAweDAwICovICJDb21tYW5kIENvbXBsZXRlIiwgTlVMTCwgIlNhdmUgUG9pbnRlcnMiLAotLyogMHgwMyAqLyAiUmVzdG9yZSBQb2ludGVycyIsICJEaXNjb25uZWN0IiwgIkluaXRpYXRvciBFcnJvciIsIAotLyogMHgwNiAqLyAiQWJvcnQiLCAiTWVzc2FnZSBSZWplY3QiLCAiTm9wIiwgIk1lc3NhZ2UgUGFyaXR5IEVycm9yIiwKLS8qIDB4MGEgKi8gIkxpbmtlZCBDb21tYW5kIENvbXBsZXRlIiwgIkxpbmtlZCBDb21tYW5kIENvbXBsZXRlIHcvZmxhZyIsCi0vKiAweDBjICovICJCdXMgZGV2aWNlIHJlc2V0IiwgIkFib3J0IFRhZyIsICJDbGVhciBRdWV1ZSIsIAotLyogMHgwZiAqLyAiSW5pdGlhdGUgUmVjb3ZlcnkiLCAiUmVsZWFzZSBSZWNvdmVyeSIKLX07Ci0jZGVmaW5lIE5PX09ORV9CWVRFX01TR1MgKHNpemVvZihvbmVfYnl0ZV9tc2dzKSAgLyBzaXplb2YgKGNvbnN0IGNoYXIgKikpCi0KLXN0YXRpYyBjb25zdCBjaGFyICp0d29fYnl0ZV9tc2dzW10gPSB7Ci0vKiAweDIwICovICJTaW1wbGUgUXVldWUgVGFnIiwgIkhlYWQgb2YgUXVldWUgVGFnIiwgIk9yZGVyZWQgUXVldWUgVGFnIgotLyogMHgyMyAqLyAiSWdub3JlIFdpZGUgUmVzaWR1ZSIKLX07Ci0jZGVmaW5lIE5PX1RXT19CWVRFX01TR1MgKHNpemVvZih0d29fYnl0ZV9tc2dzKSAgLyBzaXplb2YgKGNvbnN0IGNoYXIgKikpCi0KLXN0YXRpYyBjb25zdCBjaGFyICpleHRlbmRlZF9tc2dzW10gPSB7Ci0vKiAweDAwICovICJNb2RpZnkgRGF0YSBQb2ludGVyIiwgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCIsCi0vKiAweDAyICovICJTQ1NJLUkgRXh0ZW5kZWQgSWRlbnRpZnkiLCAiV2lkZSBEYXRhIFRyYW5zZmVyIFJlcXVlc3QiCi19OwotI2RlZmluZSBOT19FWFRFTkRFRF9NU0dTIChzaXplb2YodHdvX2J5dGVfbXNncykgIC8gc2l6ZW9mIChjb25zdCBjaGFyICopKQotCi0KLWludCBzY3NpX3ByaW50X21zZyAoY29uc3QgdW5zaWduZWQgY2hhciAqbXNnKQotewotCWludCBsZW4gPSAwLCBpOwotCWlmIChtc2dbMF0gPT0gRVhURU5ERURfTUVTU0FHRSkgewotCQlsZW4gPSAzICsgbXNnWzFdOwotCQlpZiAobXNnWzJdIDwgTk9fRVhURU5ERURfTVNHUykKLQkJCXByaW50ayAoIiVzICIsIGV4dGVuZGVkX21zZ3NbbXNnWzJdXSk7IAotCQllbHNlIAotCQkJcHJpbnRrICgiRXh0ZW5kZWQgTWVzc2FnZSwgcmVzZXJ2ZWQgY29kZSAoMHglMDJ4KSAiLAotCQkJCShpbnQpIG1zZ1syXSk7Ci0JCXN3aXRjaCAobXNnWzJdKSB7Ci0JCWNhc2UgRVhURU5ERURfTU9ESUZZX0RBVEFfUE9JTlRFUjoKLQkJCXByaW50aygicG9pbnRlciA9ICVkIiwgKGludCkgKG1zZ1szXSA8PCAyNCkgfAotCQkJCShtc2dbNF0gPDwgMTYpIHwgKG1zZ1s1XSA8PCA4KSB8IG1zZ1s2XSk7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRFTkRFRF9TRFRSOgotCQkJcHJpbnRrKCJwZXJpb2QgPSAlZCBucywgb2Zmc2V0ID0gJWQiLAotCQkJCShpbnQpIG1zZ1szXSAqIDQsIChpbnQpIG1zZ1s0XSk7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRFTkRFRF9XRFRSOgotCQkJcHJpbnRrKCJ3aWR0aCA9IDJeJWQgYnl0ZXMiLCBtc2dbM10pOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWZvciAoaSA9IDI7IGkgPCBsZW47ICsraSkgCi0JCQlwcmludGsoIiUwMnggIiwgbXNnW2ldKTsKLQkJfQotCS8qIElkZW50aWZ5ICovCi0JfSBlbHNlIGlmIChtc2dbMF0gJiAweDgwKSB7Ci0JCXByaW50aygiSWRlbnRpZnkgZGlzY29ubmVjdCAlc2FsbG93ZWQgJXMgJWQgIiwKLQkJCShtc2dbMF0gJiAweDQwKSA/ICIiIDogIm5vdCAiLAotCQkJKG1zZ1swXSAmIDB4MjApID8gInRhcmdldCByb3V0aW5lIiA6ICJsdW4iLAotCQkJbXNnWzBdICYgMHg3KTsKLQkJbGVuID0gMTsKLQkvKiBOb3JtYWwgT25lIGJ5dGUgKi8KLQl9IGVsc2UgaWYgKG1zZ1swXSA8IDB4MWYpIHsKLQkJaWYgKG1zZ1swXSA8IE5PX09ORV9CWVRFX01TR1MpCi0JCQlwcmludGsob25lX2J5dGVfbXNnc1ttc2dbMF1dKTsKLQkJZWxzZQotCQkJcHJpbnRrKCJyZXNlcnZlZCAoJTAyeCkgIiwgbXNnWzBdKTsKLQkJbGVuID0gMTsKLQkvKiBUd28gYnl0ZSAqLwotCX0gZWxzZSBpZiAobXNnWzBdIDw9IDB4MmYpIHsKLQkJaWYgKChtc2dbMF0gLSAweDIwKSA8IE5PX1RXT19CWVRFX01TR1MpCi0JCQlwcmludGsoIiVzICUwMnggIiwgdHdvX2J5dGVfbXNnc1ttc2dbMF0gLSAweDIwXSwgCi0JCQkJbXNnWzFdKTsKLQkJZWxzZSAKLQkJCXByaW50aygicmVzZXJ2ZWQgdHdvIGJ5dGUgKCUwMnggJTAyeCkgIiwgCi0JCQkJbXNnWzBdLCBtc2dbMV0pOwotCQlsZW4gPSAyOwotCX0gZWxzZSAKLQkJcHJpbnRrKCJyZXNlcnZlZCIpOwotCXJldHVybiBsZW47Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfbXNnKTsKLQotI2Vsc2UgIC8qIGlmbmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMgKi8KLQotaW50IHNjc2lfcHJpbnRfbXNnIChjb25zdCB1bnNpZ25lZCBjaGFyICptc2cpCi17Ci0JaW50IGxlbiA9IDAsIGk7Ci0KLQlpZiAobXNnWzBdID09IEVYVEVOREVEX01FU1NBR0UpIHsKLQkJbGVuID0gMyArIG1zZ1sxXTsKLQkJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotCQkJcHJpbnRrKCIlMDJ4ICIsIG1zZ1tpXSk7Ci0JLyogSWRlbnRpZnkgKi8KLQl9IGVsc2UgaWYgKG1zZ1swXSAmIDB4ODApIHsKLQkJcHJpbnRrKCIlMDJ4ICIsIG1zZ1swXSk7Ci0JCWxlbiA9IDE7Ci0JLyogTm9ybWFsIE9uZSBieXRlICovCi0JfSBlbHNlIGlmIChtc2dbMF0gPCAweDFmKSB7Ci0JCXByaW50aygiJTAyeCAiLCBtc2dbMF0pOwotCQlsZW4gPSAxOwotCS8qIFR3byBieXRlICovCi0JfSBlbHNlIGlmIChtc2dbMF0gPD0gMHgyZikgewotCQlwcmludGsoIiUwMnggJTAyeCIsIG1zZ1swXSwgbXNnWzFdKTsKLQkJbGVuID0gMjsKLQl9IGVsc2UgCi0JCXByaW50aygiJTAyeCAiLCBtc2dbMF0pOwotCXJldHVybiBsZW47Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfbXNnKTsKLSNlbmRpZiAvKiAhIENPTkZJR19TQ1NJX0NPTlNUQU5UUyAqLwotCiB2b2lkIHNjc2lfcHJpbnRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJLyogQXNzdW1lIGFwcGVuZGVkIG91dHB1dCAoaS5lLiBub3QgYXQgc3RhcnQgb2YgbGluZSkgKi8KQEAgLTEzOTcsNyArMTI4OSw3IEBACiAKICNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBob3N0Ynl0ZV90YWJsZVtdPXsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGJ5dGVfdGFibGVbXT17CiAiRElEX09LIiwgIkRJRF9OT19DT05ORUNUIiwgIkRJRF9CVVNfQlVTWSIsICJESURfVElNRV9PVVQiLCAiRElEX0JBRF9UQVJHRVQiLCAKICJESURfQUJPUlQiLCAiRElEX1BBUklUWSIsICJESURfRVJST1IiLCAiRElEX1JFU0VUIiwgIkRJRF9CQURfSU5UUiIsCiAiRElEX1BBU1NUSFJPVUdIIiwgIkRJRF9TT0ZUX0VSUk9SIiwgIkRJRF9JTU1fUkVUUlkifTsKQEAgLTE0MjIsMTIgKzEzMTQsMTIgQEAKIAogI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwogCi1zdGF0aWMgY29uc3QgY2hhciAqIGRyaXZlcmJ5dGVfdGFibGVbXT17CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyaXZlcmJ5dGVfdGFibGVbXT17CiAiRFJJVkVSX09LIiwgIkRSSVZFUl9CVVNZIiwgIkRSSVZFUl9TT0ZUIiwgICJEUklWRVJfTUVESUEiLCAiRFJJVkVSX0VSUk9SIiwgCiAiRFJJVkVSX0lOVkFMSUQiLCAiRFJJVkVSX1RJTUVPVVQiLCAiRFJJVkVSX0hBUkQiLCAiRFJJVkVSX1NFTlNFIn07CiAjZGVmaW5lIE5VTV9EUklWRVJCWVRFX1NUUlMgKHNpemVvZihkcml2ZXJieXRlX3RhYmxlKSAvIHNpemVvZihjb25zdCBjaGFyICopKQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGRyaXZlcnN1Z2dlc3RfdGFibGVbXT17IlNVR0dFU1RfT0siLAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkcml2ZXJzdWdnZXN0X3RhYmxlW109eyJTVUdHRVNUX09LIiwKICJTVUdHRVNUX1JFVFJZIiwgIlNVR0dFU1RfQUJPUlQiLCAiU1VHR0VTVF9SRU1BUCIsICJTVUdHRVNUX0RJRSIsCiAiU1VHR0VTVF81IiwgIlNVR0dFU1RfNiIsICJTVUdHRVNUXzciLCAiU1VHR0VTVF9TRU5TRSJ9OwogI2RlZmluZSBOVU1fU1VHR0VTVF9TVFJTIChzaXplb2YoZHJpdmVyc3VnZ2VzdF90YWJsZSkgLyBzaXplb2YoY29uc3QgY2hhciAqKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCBmYTJjYjM1Li5iNjcxNGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC01ODg3LDcgKzU4ODcsMTIgQEAKIAlFTlRFUjsKIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGhvc3RfbG9ja19mbGFncyk7CiAJZGV2X2RiZygmaW9hX2NmZy0+cGRldi0+ZGV2LCAiaW9hX2NmZyBhZHg6IDB4JXBcbiIsIGlvYV9jZmcpOwotCV9pcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIGlwcl9yZXNldF9lbmFibGVfaW9hLCBJUFJfU0hVVERPV05fTk9ORSk7CisJaWYgKGlvYV9jZmctPm5lZWRzX2hhcmRfcmVzZXQpIHsKKwkJaW9hX2NmZy0+bmVlZHNfaGFyZF9yZXNldCA9IDA7CisJCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworCX0gZWxzZQorCQlfaXByX2luaXRpYXRlX2lvYV9yZXNldChpb2FfY2ZnLCBpcHJfcmVzZXRfZW5hYmxlX2lvYSwKKwkJCQkJSVBSX1NIVVRET1dOX05PTkUpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGhvc3RfbG9ja19mbGFncyk7CiAJd2FpdF9ldmVudChpb2FfY2ZnLT5yZXNldF93YWl0X3EsICFpb2FfY2ZnLT5pbl9yZXNldF9yZWxvYWQpOwpAQCAtNjI2NCw2ICs2MjY5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlwcl9yZWdzX3BjaTsKIAl2b2lkIF9faW9tZW0gKmlwcl9yZWdzOwogCXUzMiByYyA9IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwl2b2xhdGlsZSB1MzIgbWFzaywgdXByb2M7CiAKIAlFTlRFUjsKIApAQCAtNjM1Niw2ICs2MzYyLDE1IEBACiAJCWdvdG8gY2xlYW51cF9ub21lbTsKIAl9CiAKKwkvKgorCSAqIElmIEhSUlEgdXBkYXRlZCBpbnRlcnJ1cHQgaXMgbm90IG1hc2tlZCwgb3IgcmVzZXQgYWxlcnQgaXMgc2V0LAorCSAqIHRoZSBjYXJkIGlzIGluIGFuIHVua25vd24gc3RhdGUgYW5kIG5lZWRzIGEgaGFyZCByZXNldAorCSAqLworCW1hc2sgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9tYXNrX3JlZyk7CisJdXByb2MgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX3Vwcm9jX2ludGVycnVwdF9yZWcpOworCWlmICgobWFzayAmIElQUl9QQ0lJX0hSUlFfVVBEQVRFRCkgPT0gMCB8fCAodXByb2MgJiBJUFJfVVBST0NJX1JFU0VUX0FMRVJUKSkKKwkJaW9hX2NmZy0+bmVlZHNfaGFyZF9yZXNldCA9IDE7CisKIAlpcHJfbWFza19hbmRfY2xlYXJfaW50ZXJydXB0cyhpb2FfY2ZnLCB+SVBSX1BDSUlfSU9BX1RSQU5TX1RPX09QRVIpOwogCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpcHJfaXNyLCBTQV9TSElSUSwgSVBSX05BTUUsIGlvYV9jZmcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggNmJlYzY3My4uYjYzOTMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMzYsOCArMzYsOCBAQAogLyoKICAqIExpdGVyYWxzCiAgKi8KLSNkZWZpbmUgSVBSX0RSSVZFUl9WRVJTSU9OICIyLjEuMCIKLSNkZWZpbmUgSVBSX0RSSVZFUl9EQVRFICIoT2N0b2JlciAzMSwgMjAwNSkiCisjZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi4xLjEiCisjZGVmaW5lIElQUl9EUklWRVJfREFURSAiKE5vdmVtYmVyIDE1LCAyMDA1KSIKIAogLyoKICAqIElQUl9NQVhfQ01EX1BFUl9MVU46IFRoaXMgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcKQEAgLTkyMiw2ICs5MjIsNyBAQAogCXU4IGR1bXBfdGFrZW46MTsKIAl1OCBhbGxvd19jbWRzOjE7CiAJdTggYWxsb3dfbWxfYWRkX2RlbDoxOworCXU4IG5lZWRzX2hhcmRfcmVzZXQ6MTsKIAogCWVudW0gaXByX2NhY2hlX3N0YXRlIGNhY2hlX3N0YXRlOwogCXUxNiB0eXBlOyAvKiBDQ0lOIG9mIHRoZSBjYXJkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggM2Q4MDA5Zi4uMTBiY2Y0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtNDksNyArNDksNyBAQAogCSAgICAgICJBbGV4IEFpem1hbiA8aXRuNzgwQHlhaG9vLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiaVNDU0kvVENQIGRhdGEtcGF0aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oIjA6NC40MDkiKTsKK01PRFVMRV9WRVJTSU9OKCIwOjQuNDQ1Iik7CiAvKiAjZGVmaW5lIERFQlVHX1RDUCAqLwogLyogI2RlZmluZSBERUJVR19TQ1NJICovCiAjZGVmaW5lIERFQlVHX0FTU0VSVApAQCAtNTgxLDEwICs1ODEsMTYgQEAKIAkJY3J5cHRvX2RpZ2VzdF9kaWdlc3QoY29ubi0+cnhfdGZtLCAmc2csIDEsICh1OCAqKSZjZGdzdCk7CiAJCXJkZ3N0ID0gKih1aW50MzJfdCopKChjaGFyKiloZHIgKyBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcikgKwogCQkJCSAgICAgY29ubi0+aW4uYWhzbGVuKTsKKwkJaWYgKGNkZ3N0ICE9IHJkZ3N0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgImlzY3NpX3RjcDogaXR0ICV4OiBoZHJkZ3N0IGVycm9yICIKKwkJCSAgICAgICAicmVjdiAweCV4IGNhbGMgMHgleFxuIiwgY29ubi0+aW4uaXR0LCByZGdzdCwKKwkJCSAgICAgICBjZGdzdCk7CisJCQlyZXR1cm4gSVNDU0lfRVJSX0hEUl9ER1NUOworCQl9CiAJfQogCiAJLyogc2F2ZSBvcGNvZGUgZm9yIGxhdGVyICovCi0JY29ubi0+aW4ub3Bjb2RlID0gaGRyLT5vcGNvZGU7CisJY29ubi0+aW4ub3Bjb2RlID0gaGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSzsKIAogCS8qIHZlcmlmeSBpdHQgKGl0dCBlbmNvZGluZzogYWdlK2NpZCtpdHQpICovCiAJaWYgKGhkci0+aXR0ICE9IGNwdV90b19iZTMyKElTQ1NJX1JFU0VSVkVEX1RBRykpIHsKQEAgLTYxMCwxMyArNjE2LDYgQEAKIAkJICBjb25uLT5pbi5haHNsZW4sIGNvbm4tPmluLmRhdGFsZW4pOwogCiAJaWYgKGNvbm4tPmluLml0dCA8IHNlc3Npb24tPmNtZHNfbWF4KSB7Ci0JCWlmIChjb25uLT5oZHJkZ3N0X2VuICYmIGNkZ3N0ICE9IHJkZ3N0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImlzY3NpX3RjcDogaXR0ICV4OiBoZHJkZ3N0IGVycm9yICIKLQkJCSAgICAgICAicmVjdiAweCV4IGNhbGMgMHgleFxuIiwgY29ubi0+aW4uaXR0LCByZGdzdCwKLQkJCSAgICAgICBjZGdzdCk7Ci0JCQlyZXR1cm4gSVNDU0lfRVJSX0hEUl9ER1NUOwotCQl9Ci0KIAkJY3Rhc2sgPSAoc3RydWN0IGlzY3NpX2NtZF90YXNrICopc2Vzc2lvbi0+Y21kc1tjb25uLT5pbi5pdHRdOwogCiAJCWlmICghY3Rhc2stPnNjKSB7CkBAIC02NDIsOSArNjQxLDcgQEAKIAkJc3dpdGNoKGNvbm4tPmluLm9wY29kZSkgewogCQljYXNlIElTQ1NJX09QX1NDU0lfQ01EX1JTUDoKIAkJCUJVR19PTigodm9pZCopY3Rhc2sgIT0gY3Rhc2stPnNjLT5TQ3AucHRyKTsKLQkJCWlmIChjdGFzay0+aGRyLmZsYWdzICYgSVNDU0lfRkxBR19DTURfV1JJVEUpCi0JCQkJcmMgPSBpc2NzaV9jbWRfcnNwKGNvbm4sIGN0YXNrKTsKLQkJCWVsc2UgaWYgKCFjb25uLT5pbi5kYXRhbGVuKQorCQkJaWYgKCFjb25uLT5pbi5kYXRhbGVuKQogCQkJCXJjID0gaXNjc2lfY21kX3JzcChjb25uLCBjdGFzayk7CiAJCQllbHNlCiAJCQkJLyoKQEAgLTY2Niw4ICs2NjMsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSVNDU0lfT1BfUjJUOgogCQkJQlVHX09OKCh2b2lkKiljdGFzayAhPSBjdGFzay0+c2MtPlNDcC5wdHIpOwotCQkJaWYgKGN0YXNrLT5oZHIuZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9XUklURSAmJgotCQkJICAgIGN0YXNrLT5zYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJCWlmIChjdGFzay0+c2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCiAJCQkJcmMgPSBpc2NzaV9yMnRfcnNwKGNvbm4sIGN0YXNrKTsKIAkJCWVsc2UKIAkJCQlyYyA9IElTQ1NJX0VSUl9QUk9UTzsKQEAgLTkwNiwxMSArOTAyLDIwIEBACiAJY3J5cHRvX2RpZ2VzdF91cGRhdGUoY29ubi0+ZGF0YV9yeF90Zm0sICZ0ZW1wLCAxKTsKIH0KIAorc3RhdGljIHZvaWQKK2lzY3NpX3JlY3ZfZGlnZXN0X3VwZGF0ZShzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgY2hhciogYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCB0bXA7CisKKwlzZ19pbml0X29uZSgmdG1wLCBidWYsIGxlbik7CisJY3J5cHRvX2RpZ2VzdF91cGRhdGUoY29ubi0+ZGF0YV9yeF90Zm0sICZ0bXAsIDEpOworfQorCiBzdGF0aWMgaW50IGlzY3NpX3Njc2lfZGF0YV9pbihzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKmN0YXNrID0gY29ubi0+aW4uY3Rhc2s7CiAJc3RydWN0IHNjc2lfY21uZCAqc2MgPSBjdGFzay0+c2M7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHRtcCwgKnNnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGksIG9mZnNldCwgcmMgPSAwOwogCiAJQlVHX09OKCh2b2lkKiljdGFzayAhPSBzYy0+U0NwLnB0cik7CkBAIC05MjQsMTAgKzkyOSw4IEBACiAJCQkJICAgICAgc2MtPnJlcXVlc3RfYnVmZmxlbiwgY3Rhc2stPmRhdGFfb2Zmc2V0KTsKIAkJaWYgKHJjID09IC1FQUdBSU4pCiAJCQlyZXR1cm4gcmM7Ci0JCWlmIChjb25uLT5kYXRhZGdzdF9lbikgewotCQkJc2dfaW5pdF9vbmUoJnRtcCwgc2MtPnJlcXVlc3RfYnVmZmVyLCBpKTsKLQkJCWNyeXB0b19kaWdlc3RfdXBkYXRlKGNvbm4tPmRhdGFfcnhfdGZtLCAmdG1wLCAxKTsKLQkJfQorCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4pIAorCQkJaXNjc2lfcmVjdl9kaWdlc3RfdXBkYXRlKGNvbm4sIHNjLT5yZXF1ZXN0X2J1ZmZlciwgaSk7CiAJCXJjID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTEwMjEsNiArMTAyNCw5IEBACiAJCWNvbm4tPmluLmhkciA9ICZjb25uLT5oZHI7CiAJCWNvbm4tPnNlbnNlbGVuID0gKGNvbm4tPmRhdGFbMF0gPDwgOCkgfCBjb25uLT5kYXRhWzFdOwogCQlyYyA9IGlzY3NpX2NtZF9yc3AoY29ubiwgY29ubi0+aW4uY3Rhc2spOworCQlpZiAoIXJjICYmIGNvbm4tPmRhdGFkZ3N0X2VuKSAKKwkJCWlzY3NpX3JlY3ZfZGlnZXN0X3VwZGF0ZShjb25uLCBjb25uLT5kYXRhLAorCQkJCQkJIGNvbm4tPmluLmRhdGFsZW4pOwogCX0KIAlicmVhazsKIAljYXNlIElTQ1NJX09QX1RFWFRfUlNQOgpAQCAtMTA0NSw2ICsxMDUxLDExIEBACiAJCXJjID0gaXNjc2lfcmVjdl9wZHUoaXNjc2lfaGFuZGxlKGNvbm4pLCBjb25uLT5pbi5oZHIsCiAJCQkJICAgIGNvbm4tPmRhdGEsIGNvbm4tPmluLmRhdGFsZW4pOwogCisJCWlmICghcmMgJiYgY29ubi0+ZGF0YWRnc3RfZW4gJiYgCisJCQljb25uLT5pbi5vcGNvZGUgIT0gSVNDU0lfT1BfTE9HSU5fUlNQKQorCQkJaXNjc2lfcmVjdl9kaWdlc3RfdXBkYXRlKGNvbm4sIGNvbm4tPmRhdGEsCisJCQkgIAkJCWNvbm4tPmluLmRhdGFsZW4pOworCiAJCWlmIChtdGFzayAmJiBjb25uLT5sb2dpbl9tdGFzayAhPSBtdGFzaykgewogCQkJc3Bpbl9sb2NrKCZzZXNzaW9uLT5sb2NrKTsKIAkJCV9fa2ZpZm9fcHV0KHNlc3Npb24tPm1nbXRwb29sLnF1ZXVlLCAodm9pZCopJm10YXNrLApAQCAtMTA1Myw2ICsxMDY0LDggQEAKIAkJfQogCX0KIAlicmVhazsKKwljYXNlIElTQ1NJX09QX0FTWU5DX0VWRU5UOgorCWNhc2UgSVNDU0lfT1BfUkVKRUNUOgogCWRlZmF1bHQ6CiAJCUJVR19PTigxKTsKIAl9CkBAIC0xMTE0LDggKzExMjcsNyBAQAogCQkgKi8KIAkJcmMgPSBpc2NzaV9oZHJfcmVjdihjb25uKTsKIAkJaWYgKCFyYyAmJiBjb25uLT5pbi5kYXRhbGVuKSB7Ci0JCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4gJiYKLQkJCSAgICBjb25uLT5pbi5vcGNvZGUgPT0gSVNDU0lfT1BfU0NTSV9EQVRBX0lOKSB7CisJCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4pIHsKIAkJCQlCVUdfT04oIWNvbm4tPmRhdGFfcnhfdGZtKTsKIAkJCQljcnlwdG9fZGlnZXN0X2luaXQoY29ubi0+ZGF0YV9yeF90Zm0pOwogCQkJfQpAQCAtMTEyNywyNiArMTEzOSwyNCBAQAogCX0KIAogCWlmIChjb25uLT5pbl9wcm9ncmVzcyA9PSBJTl9QUk9HUkVTU19ERElHRVNUX1JFQ1YpIHsKKwkJdWludDMyX3QgcmVjdl9kaWdlc3Q7CiAJCWRlYnVnX3RjcCgiZXh0cmEgZGF0YV9yZWN2IG9mZnNldCAlZCBjb3B5ICVkXG4iLAogCQkJICBjb25uLT5pbi5vZmZzZXQsIGNvbm4tPmluLmNvcHkpOwotCQlpZiAoY29ubi0+aW4ub3Bjb2RlID09IElTQ1NJX09QX1NDU0lfREFUQV9JTikgewotCQkJdWludDMyX3QgcmVjdl9kaWdlc3Q7Ci0JCQlza2JfY29weV9iaXRzKGNvbm4tPmluLnNrYiwgY29ubi0+aW4ub2Zmc2V0LAotCQkJCSAgICAgICZyZWN2X2RpZ2VzdCwgNCk7Ci0JCQljb25uLT5pbi5vZmZzZXQgKz0gNDsKLQkJCWNvbm4tPmluLmNvcHkgLT0gNDsKLQkJCWlmIChyZWN2X2RpZ2VzdCAhPSBjb25uLT5pbi5kYXRhZGdzdCkgewotCQkJCWRlYnVnX3RjcCgiaXNjc2lfdGNwOiBkYXRhIGRpZ2VzdCBlcnJvciEiCi0JCQkJCSAgIjB4JXggIT0gMHgleFxuIiwgcmVjdl9kaWdlc3QsCi0JCQkJCSAgY29ubi0+aW4uZGF0YWRnc3QpOwotCQkJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfREFUQV9ER1NUKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJZGVidWdfdGNwKCJpc2NzaV90Y3A6IGRhdGEgZGlnZXN0IG1hdGNoISIKLQkJCQkJICAiMHgleCA9PSAweCV4XG4iLCByZWN2X2RpZ2VzdCwKLQkJCQkJICBjb25uLT5pbi5kYXRhZGdzdCk7Ci0JCQkJY29ubi0+aW5fcHJvZ3Jlc3MgPSBJTl9QUk9HUkVTU19XQUlUX0hFQURFUjsKLQkJCX0KKwkJc2tiX2NvcHlfYml0cyhjb25uLT5pbi5za2IsIGNvbm4tPmluLm9mZnNldCwKKwkJCQkmcmVjdl9kaWdlc3QsIDQpOworCQljb25uLT5pbi5vZmZzZXQgKz0gNDsKKwkJY29ubi0+aW4uY29weSAtPSA0OworCQlpZiAocmVjdl9kaWdlc3QgIT0gY29ubi0+aW4uZGF0YWRnc3QpIHsKKwkJCWRlYnVnX3RjcCgiaXNjc2lfdGNwOiBkYXRhIGRpZ2VzdCBlcnJvciEiCisJCQkJICAiMHgleCAhPSAweCV4XG4iLCByZWN2X2RpZ2VzdCwKKwkJCQkgIGNvbm4tPmluLmRhdGFkZ3N0KTsKKwkJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfREFUQV9ER1NUKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJZGVidWdfdGNwKCJpc2NzaV90Y3A6IGRhdGEgZGlnZXN0IG1hdGNoISIKKwkJCQkgICIweCV4ID09IDB4JXhcbiIsIHJlY3ZfZGlnZXN0LAorCQkJCSAgY29ubi0+aW4uZGF0YWRnc3QpOworCQkJY29ubi0+aW5fcHJvZ3Jlc3MgPSBJTl9QUk9HUkVTU19XQUlUX0hFQURFUjsKIAkJfQogCX0KIApAQCAtMTE2Nyw4ICsxMTc3LDcgQEAKIAkJfQogCQljb25uLT5pbi5jb3B5IC09IGNvbm4tPmluLnBhZGRpbmc7CiAJCWNvbm4tPmluLm9mZnNldCArPSBjb25uLT5pbi5wYWRkaW5nOwotCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4gJiYKLQkJICAgIGNvbm4tPmluLm9wY29kZSA9PSBJU0NTSV9PUF9TQ1NJX0RBVEFfSU4pIHsKKwkJaWYgKGNvbm4tPmRhdGFkZ3N0X2VuKSB7CiAJCQlpZiAoY29ubi0+aW4ucGFkZGluZykgewogCQkJCWRlYnVnX3RjcCgicGFkZGluZyAtPiAlZFxuIiwgY29ubi0+aW4ucGFkZGluZyk7CiAJCQkJbWVtc2V0KHBhZCwgMCwgY29ubi0+aW4ucGFkZGluZyk7CkBAIC0xMjM3LDggKzEyNDYsOSBAQAogCWNvbm4gPSAoc3RydWN0IGlzY3NpX2Nvbm4qKXNrLT5za191c2VyX2RhdGE7CiAJc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAKLQlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRV9XQUlUIHx8Ci0JICAgIHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKKwlpZiAoKHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0VfV0FJVCB8fAorCSAgICAgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkgJiYKKwkgICAgIWF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykpIHsKIAkJZGVidWdfdGNwKCJpc2NzaV90Y3Bfc3RhdGVfY2hhbmdlOiBUQ1BfQ0xPU0V8VENQX0NMT1NFX1dBSVRcbiIpOwogCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAl9CkBAIC0yMzg5LDYgKzIzOTksMTUgQEAKIH0KIAogc3RhdGljIGludAoraXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQoreworCWlmIChkZXB0aCA+IElTQ1NJX01BWF9DTURfUEVSX0xVTikKKwkJZGVwdGggPSBJU0NTSV9NQVhfQ01EX1BFUl9MVU47CisJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKKwlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Cit9CisKK3N0YXRpYyBpbnQKIGlzY3NpX3Bvb2xfaW5pdChzdHJ1Y3QgaXNjc2lfcXVldWUgKnEsIGludCBtYXgsIHZvaWQgKioqaXRlbXMsIGludCBpdGVtX3NpemUpCiB7CiAJaW50IGk7CkBAIC0yODUzLDggKzI4NzIsMTEgQEAKIAkJICogaW4gaGRyX2V4dHJhY3QoKSBhbmQgd2lsbCBiZSByZS1uZWdvdGlhdGVkIGF0CiAJCSAqIHNldF9wYXJhbSgpIHRpbWUuCiAJCSAqLwotCQlpZiAoZmxhZyA9PSBTVE9QX0NPTk5fUkVDT1ZFUikKKwkJaWYgKGZsYWcgPT0gU1RPUF9DT05OX1JFQ09WRVIpIHsKIAkJCWNvbm4tPmhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpOworCQkJY29ubi0+aGRyZGdzdF9lbiA9IDA7CisJCQljb25uLT5kYXRhZGdzdF9lbiA9IDA7CisJCX0KIAl9CiAJdXAoJmNvbm4tPnhtaXRzZW1hKTsKIH0KQEAgLTMyNDcsMTMgKzMyNjksMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGlzY3NpX3NodCA9IHsKIAkubmFtZQkJCT0gImlTQ1NJIEluaXRpYXRvciBvdmVyIFRDUC9JUCwgdi4iCiAJCQkJICBJU0NTSV9WRVJTSU9OX1NUUiwKLSAgICAgICAgLnF1ZXVlY29tbWFuZCAgICAgICAgICAgPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCisJLnF1ZXVlY29tbWFuZCAgICAgICAgICAgPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IElTQ1NJX1hNSVRfQ01EU19NQVggLSAxLAogCS5zZ190YWJsZXNpemUJCT0gSVNDU0lfU0dfVEFCTEVTSVpFLAotCS5jbWRfcGVyX2x1bgkJPSBJU0NTSV9DTURfUEVSX0xVTiwKLSAgICAgICAgLmVoX2Fib3J0X2hhbmRsZXIgICAgICAgPSBpc2NzaV9laF9hYm9ydCwKLSAgICAgICAgLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IGlzY3NpX2VoX2hvc3RfcmVzZXQsCi0gICAgICAgIC51c2VfY2x1c3RlcmluZyAgICAgICAgID0gRElTQUJMRV9DTFVTVEVSSU5HLAorCS5jbWRfcGVyX2x1bgkJPSBJU0NTSV9ERUZfQ01EX1BFUl9MVU4sCisJLmVoX2Fib3J0X2hhbmRsZXIgICAgICAgPSBpc2NzaV9laF9hYm9ydCwKKwkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gaXNjc2lfZWhfaG9zdF9yZXNldCwKKwkudXNlX2NsdXN0ZXJpbmcgICAgICAgICA9IERJU0FCTEVfQ0xVU1RFUklORywKIAkucHJvY19uYW1lCQk9ICJpc2NzaV90Y3AiLAogCS50aGlzX2lkCQk9IC0xLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuaCBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuaAppbmRleCBkMjNhZTY4Li44NTVmMmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmgKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5oCkBAIC03MSw3ICs3MSw4IEBACiAjZGVmaW5lIElTQ1NJX01HTVRfQ01EU19NQVgJCTMyCS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwogI2RlZmluZSBJU0NTSV9NR01UX0lUVF9PRkZTRVQJCTB4YTAwCiAjZGVmaW5lIElTQ1NJX1NHX1RBQkxFU0laRQkJU0dfQUxMCi0jZGVmaW5lIElTQ1NJX0NNRF9QRVJfTFVOCQkxMjgKKyNkZWZpbmUgSVNDU0lfREVGX0NNRF9QRVJfTFVOCQkzMgorI2RlZmluZSBJU0NTSV9NQVhfQ01EX1BFUl9MVU4JCTEyOAogI2RlZmluZSBJU0NTSV9UQ1BfTUFYX0NNRF9MRU4JCTE2CiAKICNkZWZpbmUgSVRUX01BU0sJCQkoMHhmZmYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IGQwYTBmZGIuLjllYTEwMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC02MDUsNyArNjA1LDcgQEAKIAl0Zi0+Y29tbWFuZCA9IGF0YV9yd19jbWRzW2luZGV4ICsgbGJhNDggKyB3cml0ZV07CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogeGZlcl9tb2RlX3N0cltdID0geworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB4ZmVyX21vZGVfc3RyW10gPSB7CiAJIlVETUEvMTYiLAogCSJVRE1BLzI1IiwKIAkiVURNQS8zMyIsCkBAIC0xMDQ2LDI4ICsxMDQ2LDEwMyBAQAogCXJldHVybiBtb2RlczsKIH0KIAotc3RhdGljIGludCBhdGFfcWNfd2FpdF9lcnIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywKLQkJCSAgIHN0cnVjdCBjb21wbGV0aW9uICp3YWl0KQorc3RydWN0IGF0YV9leGVjX2ludGVybmFsX2FyZyB7CisJdW5zaWduZWQgaW50IGVycl9tYXNrOworCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmOworCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOworfTsKKworaW50IGF0YV9xY19jb21wbGV0ZV9pbnRlcm5hbChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCWludCByYyA9IDA7CisJc3RydWN0IGF0YV9leGVjX2ludGVybmFsX2FyZyAqYXJnID0gcWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IGFyZy0+d2FpdGluZzsKIAotCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQod2FpdCwgMzAgKiBIWikgPCAxKSB7Ci0JCS8qIHRpbWVvdXQgaGFuZGxpbmcgKi8KLQkJdW5zaWduZWQgaW50IGVycl9tYXNrID0gYWNfZXJyX21hc2soYXRhX2Noa19zdGF0dXMocWMtPmFwKSk7CisJaWYgKCEocWMtPmVycl9tYXNrICYgfkFDX0VSUl9ERVYpKQorCQlxYy0+YXAtPm9wcy0+dGZfcmVhZChxYy0+YXAsIGFyZy0+dGYpOworCWFyZy0+ZXJyX21hc2sgPSBxYy0+ZXJyX21hc2s7CisJYXJnLT53YWl0aW5nID0gTlVMTDsKKwljb21wbGV0ZSh3YWl0aW5nKTsKIAotCQlpZiAoIWVycl9tYXNrKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogc2xvdyBjb21wbGV0aW9uIChjbWQgJXgpXG4iLAotCQkJICAgICAgIHFjLT5hcC0+aWQsIHFjLT50Zi5jb21tYW5kKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSV1OiBxYyB0aW1lb3V0IChjbWQgJXgpXG4iLAotCQkJICAgICAgIHFjLT5hcC0+aWQsIHFjLT50Zi5jb21tYW5kKTsKLQkJCXJjID0gLUVJTzsKLQkJfQorCXJldHVybiAwOworfQogCi0JCWF0YV9xY19jb21wbGV0ZShxYywgZXJyX21hc2spOworLyoqCisgKglhdGFfZXhlY19pbnRlcm5hbCAtIGV4ZWN1dGUgbGliYXRhIGludGVybmFsIGNvbW1hbmQKKyAqCUBhcDogUG9ydCB0byB3aGljaCB0aGUgY29tbWFuZCBpcyBzZW50CisgKglAZGV2OiBEZXZpY2UgdG8gd2hpY2ggdGhlIGNvbW1hbmQgaXMgc2VudAorICoJQHRmOiBUYXNrZmlsZSByZWdpc3RlcnMgZm9yIHRoZSBjb21tYW5kIGFuZCB0aGUgcmVzdWx0CisgKglAZG1hX2RpcjogRGF0YSB0cmFuZmVyIGRpcmVjdGlvbiBvZiB0aGUgY29tbWFuZAorICoJQGJ1ZjogRGF0YSBidWZmZXIgb2YgdGhlIGNvbW1hbmQKKyAqCUBidWZsZW46IExlbmd0aCBvZiBkYXRhIGJ1ZmZlcgorICoKKyAqCUV4ZWN1dGVzIGxpYmF0YSBpbnRlcm5hbCBjb21tYW5kIHdpdGggdGltZW91dC4gIEB0ZiBjb250YWlucworICoJY29tbWFuZCBvbiBlbnRyeSBhbmQgcmVzdWx0IG9uIHJldHVybi4gIFRpbWVvdXQgYW5kIGVycm9yCisgKgljb25kaXRpb25zIGFyZSByZXBvcnRlZCB2aWEgcmV0dXJuIHZhbHVlLiAgTm8gcmVjb3ZlcnkgYWN0aW9uCisgKglpcyB0YWtlbiBhZnRlciBhIGNvbW1hbmQgdGltZXMgb3V0LiAgSXQncyBjYWxsZXIncyBkdXR5IHRvCisgKgljbGVhbiB1cCBhZnRlciB0aW1lb3V0LgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lLiAgU2hvdWxkIGJlIGNhbGxlZCB3aXRoIGtlcm5lbCBjb250ZXh0LCBtaWdodCBzbGVlcC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQKK2F0YV9leGVjX2ludGVybmFsKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCisJCSAgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsCisJCSAgaW50IGRtYV9kaXIsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbikKK3sKKwl1OCBjb21tYW5kID0gdGYtPmNvbW1hbmQ7CisJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKwlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXRhX2V4ZWNfaW50ZXJuYWxfYXJnIGFyZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKKworCXFjID0gYXRhX3FjX25ld19pbml0KGFwLCBkZXYpOworCUJVR19PTihxYyA9PSBOVUxMKTsKKworCXFjLT50ZiA9ICp0ZjsKKwlxYy0+ZG1hX2RpciA9IGRtYV9kaXI7CisJaWYgKGRtYV9kaXIgIT0gRE1BX05PTkUpIHsKKwkJYXRhX3NnX2luaXRfb25lKHFjLCBidWYsIGJ1Zmxlbik7CisJCXFjLT5uc2VjdCA9IGJ1ZmxlbiAvIEFUQV9TRUNUX1NJWkU7CiAJfQogCi0JcmV0dXJuIHJjOworCWFyZy53YWl0aW5nID0gJndhaXQ7CisJYXJnLnRmID0gdGY7CisJcWMtPnByaXZhdGVfZGF0YSA9ICZhcmc7CisJcWMtPmNvbXBsZXRlX2ZuID0gYXRhX3FjX2NvbXBsZXRlX2ludGVybmFsOworCisJaWYgKGF0YV9xY19pc3N1ZShxYykpCisJCWdvdG8gaXNzdWVfZmFpbDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndhaXQsIEFUQV9UTU9VVF9JTlRFUk5BTCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCisJCS8qIFdlJ3JlIHJhY2luZyB3aXRoIGlycSBoZXJlLiAgSWYgd2UgbG9zZSwgdGhlCisJCSAqIGZvbGxvd2luZyB0ZXN0IHByZXZlbnRzIHVzIGZyb20gY29tcGxldGluZyB0aGUgcWMKKwkJICogYWdhaW4uICBJZiBjb21wbGV0aW9uIGlycSBvY2N1cnMgYWZ0ZXIgaGVyZSBidXQKKwkJICogYmVmb3JlIHRoZSBjYWxsZXIgY2xlYW5zIHVwLCBpdCB3aWxsIHJlc3VsdCBpbiBhCisJCSAqIHNwdXJpb3VzIGludGVycnVwdC4gIFdlIGNhbiBsaXZlIHdpdGggdGhhdC4KKwkJICovCisJCWlmIChhcmcud2FpdGluZykgeworCQkJcWMtPmVycl9tYXNrID0gQUNfRVJSX09USEVSOworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSV1OiBxYyB0aW1lb3V0IChjbWQgMHgleClcbiIsCisJCQkgICAgICAgYXAtPmlkLCBjb21tYW5kKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBhcmcuZXJyX21hc2s7CisKKyBpc3N1ZV9mYWlsOgorCWF0YV9xY19mcmVlKHFjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gQUNfRVJSX09USEVSOwogfQogCiAvKioKQEAgLTEwOTksOSArMTE3NCw4IEBACiAJdTE2IHRtcDsKIAl1bnNpZ25lZCBsb25nIHhmZXJfbW9kZXM7CiAJdW5zaWduZWQgaW50IHVzaW5nX2VkZDsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7Ci0Jc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CisJdW5zaWduZWQgaW50IGVycl9tYXNrOwogCWludCByYzsKIAogCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikpIHsKQEAgLTExMjIsNDAgKzExOTYsMjYgQEAKIAogCWF0YV9kZXZfc2VsZWN0KGFwLCBkZXZpY2UsIDEsIDEpOyAvKiBzZWxlY3QgZGV2aWNlIDAvMSAqLwogCi0JcWMgPSBhdGFfcWNfbmV3X2luaXQoYXAsIGRldik7Ci0JQlVHX09OKHFjID09IE5VTEwpOwotCi0JYXRhX3NnX2luaXRfb25lKHFjLCBkZXYtPmlkLCBzaXplb2YoZGV2LT5pZCkpOwotCXFjLT5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFOwotCXFjLT50Zi5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKLQlxYy0+bnNlY3QgPSAxOwotCiByZXRyeToKKwlhdGFfdGZfaW5pdChhcCwgJnRmLCBkZXZpY2UpOworCiAJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKLQkJcWMtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKKwkJdGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBOwogCQlEUFJJTlRLKCJkbyBBVEEgaWRlbnRpZnlcbiIpOwogCX0gZWxzZSB7Ci0JCXFjLT50Zi5jb21tYW5kID0gQVRBX0NNRF9JRF9BVEFQSTsKKwkJdGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7CiAJCURQUklOVEsoImRvIEFUQVBJIGlkZW50aWZ5XG4iKTsKIAl9CiAKLQlxYy0+d2FpdGluZyA9ICZ3YWl0OwotCXFjLT5jb21wbGV0ZV9mbiA9IGF0YV9xY19jb21wbGV0ZV9ub29wOworCXRmLnByb3RvY29sID0gQVRBX1BST1RfUElPOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCXJjID0gYXRhX3FjX2lzc3VlKHFjKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKKwllcnJfbWFzayA9IGF0YV9leGVjX2ludGVybmFsKGFwLCBkZXYsICZ0ZiwgRE1BX0ZST01fREVWSUNFLAorCQkJCSAgICAgZGV2LT5pZCwgc2l6ZW9mKGRldi0+aWQpKTsKIAotCWlmIChyYykKLQkJZ290byBlcnJfb3V0OwotCWVsc2UKLQkJYXRhX3FjX3dhaXRfZXJyKHFjLCAmd2FpdCk7CisJaWYgKGVycl9tYXNrKSB7CisJCWlmIChlcnJfbWFzayAmIH5BQ19FUlJfREVWKQorCQkJZ290byBlcnJfb3V0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCWFwLT5vcHMtPnRmX3JlYWQoYXAsICZxYy0+dGYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHFjLT50Zi5jb21tYW5kICYgQVRBX0VSUikgewogCQkvKgogCQkgKiBhcmchICBFREQgd29ya3MgZm9yIGFsbCB0ZXN0IGNhc2VzLCBidXQgc2VlbXMgdG8gcmV0dXJuCiAJCSAqIHRoZSBBVEEgc2lnbmF0dXJlIGZvciBzb21lIEFUQVBJIGRldmljZXMuICBVbnRpbCB0aGUKQEAgLTExNjgsMTMgKzEyMjgsOSBAQAogCQkgKiB0byBoYXZlIHRoaXMgcHJvYmxlbS4KIAkJICovCiAJCWlmICgodXNpbmdfZWRkKSAmJiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkpIHsKLQkJCXU4IGVyciA9IHFjLT50Zi5mZWF0dXJlOworCQkJdTggZXJyID0gdGYuZmVhdHVyZTsKIAkJCWlmIChlcnIgJiBBVEFfQUJPUlRFRCkgewogCQkJCWRldi0+Y2xhc3MgPSBBVEFfREVWX0FUQVBJOwotCQkJCXFjLT5jdXJzZyA9IDA7Ci0JCQkJcWMtPmN1cnNnX29mcyA9IDA7Ci0JCQkJcWMtPmN1cnNlY3QgPSAwOwotCQkJCXFjLT5uc2VjdCA9IDE7CiAJCQkJZ290byByZXRyeTsKIAkJCX0KIAkJfQpAQCAtMTQ0NCwxMSArMTUwMCwyMyBAQAogCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKIAogCS8qIFRPRE86IHBoeSBsYXllciB3aXRoIHBvbGxpbmcsIHRpbWVvdXRzLCBldGMuICovCi0JaWYgKHNhdGFfZGV2X3ByZXNlbnQoYXApKQorCXNzdGF0dXMgPSBzY3JfcmVhZChhcCwgU0NSX1NUQVRVUyk7CisJaWYgKHNhdGFfZGV2X3ByZXNlbnQoYXApKSB7CisJCWNvbnN0IGNoYXIgKnNwZWVkOworCQl1MzIgdG1wOworCisJCXRtcCA9IChzc3RhdHVzID4+IDQpICYgMHhmOworCQlpZiAodG1wICYgKDEgPDwgMCkpCisJCQlzcGVlZCA9ICIxLjUiOworCQllbHNlIGlmICh0bXAgJiAoMSA8PCAxKSkKKwkJCXNwZWVkID0gIjMuMCI7CisJCWVsc2UKKwkJCXNwZWVkID0gIjx1bmtub3duPiI7CisJCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBTQVRBIGxpbmsgdXAgJXMgR2JwcyAoU1N0YXR1cyAlWClcbiIsCisJCSAgICAgICBhcC0+aWQsIHNwZWVkLCBzc3RhdHVzKTsKIAkJYXRhX3BvcnRfcHJvYmUoYXApOwotCWVsc2UgewotCQlzc3RhdHVzID0gc2NyX3JlYWQoYXAsIFNDUl9TVEFUVVMpOwotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogbm8gZGV2aWNlIGZvdW5kIChwaHkgc3RhdCAlMDh4KVxuIiwKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogU0FUQSBsaW5rIGRvd24gKFNTdGF0dXMgJVgpXG4iLAogCQkgICAgICAgYXAtPmlkLCBzc3RhdHVzKTsKIAkJYXRhX3BvcnRfZGlzYWJsZShhcCk7CiAJfQpAQCAtMjA3MSw3ICsyMTM5LDcgQEAKIAkJYXAtPmlkLCBkZXYtPmRldm5vKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBhdGFfZG1hX2JsYWNrbGlzdCBbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXRhX2RtYV9ibGFja2xpc3QgW10gPSB7CiAJIldEQyBBQzExMDAwSCIsCiAJIldEQyBBQzIyMTAwSCIsCiAJIldEQyBBQzMyNTAwSCIsCkBAIC0yMjY2LDM0ICsyMzM0LDIzIEBACiAKIHN0YXRpYyB2b2lkIGF0YV9kZXZfc2V0X3hmZXJtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7Ci0JREVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOwotCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7Ci0JaW50IHJjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKIAogCS8qIHNldCB1cCBzZXQtZmVhdHVyZXMgdGFza2ZpbGUgKi8KIAlEUFJJTlRLKCJzZXQgZmVhdHVyZXMgLSB4ZmVyIG1vZGVcbiIpOwogCi0JcWMgPSBhdGFfcWNfbmV3X2luaXQoYXAsIGRldik7Ci0JQlVHX09OKHFjID09IE5VTEwpOworCWF0YV90Zl9pbml0KGFwLCAmdGYsIGRldi0+ZGV2bm8pOworCXRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKKwl0Zi5mZWF0dXJlID0gU0VURkVBVFVSRVNfWEZFUjsKKwl0Zi5mbGFncyB8PSBBVEFfVEZMQUdfSVNBRERSIHwgQVRBX1RGTEFHX0RFVklDRTsKKwl0Zi5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKKwl0Zi5uc2VjdCA9IGRldi0+eGZlcl9tb2RlOwogCi0JcWMtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKLQlxYy0+dGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7Ci0JcWMtPnRmLmZsYWdzIHw9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFOwotCXFjLT50Zi5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKLQlxYy0+dGYubnNlY3QgPSBkZXYtPnhmZXJfbW9kZTsKLQotCXFjLT53YWl0aW5nID0gJndhaXQ7Ci0JcWMtPmNvbXBsZXRlX2ZuID0gYXRhX3FjX2NvbXBsZXRlX25vb3A7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBhdGFfcWNfaXNzdWUocWMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHJjKQorCWlmIChhdGFfZXhlY19pbnRlcm5hbChhcCwgZGV2LCAmdGYsIERNQV9OT05FLCBOVUxMLCAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBmYWlsZWQgdG8gc2V0IHhmZXJtb2RlLCBkaXNhYmxlZFxuIiwKKwkJICAgICAgIGFwLT5pZCk7CiAJCWF0YV9wb3J0X2Rpc2FibGUoYXApOwotCWVsc2UKLQkJYXRhX3FjX3dhaXRfZXJyKHFjLCAmd2FpdCk7CisJfQogCiAJRFBSSU5USygiRVhJVFxuIik7CiB9CkBAIC0yMzA4LDQxICsyMzY1LDI1IEBACiAKIHN0YXRpYyB2b2lkIGF0YV9kZXZfcmVyZWFkX2lkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7Ci0JREVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOwotCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7CisJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKIAotCXFjID0gYXRhX3FjX25ld19pbml0KGFwLCBkZXYpOwotCUJVR19PTihxYyA9PSBOVUxMKTsKLQotCWF0YV9zZ19pbml0X29uZShxYywgZGV2LT5pZCwgc2l6ZW9mKGRldi0+aWQpKTsKLQlxYy0+ZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRTsKKwlhdGFfdGZfaW5pdChhcCwgJnRmLCBkZXYtPmRldm5vKTsKIAogCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKSB7Ci0JCXFjLT50Zi5jb21tYW5kID0gQVRBX0NNRF9JRF9BVEE7CisJCXRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKIAkJRFBSSU5USygiZG8gQVRBIGlkZW50aWZ5XG4iKTsKIAl9IGVsc2UgewotCQlxYy0+dGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7CisJCXRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQVBJOwogCQlEUFJJTlRLKCJkbyBBVEFQSSBpZGVudGlmeVxuIik7CiAJfQogCi0JcWMtPnRmLmZsYWdzIHw9IEFUQV9URkxBR19ERVZJQ0U7Ci0JcWMtPnRmLnByb3RvY29sID0gQVRBX1BST1RfUElPOwotCXFjLT5uc2VjdCA9IDE7CisJdGYuZmxhZ3MgfD0gQVRBX1RGTEFHX0RFVklDRTsKKwl0Zi5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKIAotCXFjLT53YWl0aW5nID0gJndhaXQ7Ci0JcWMtPmNvbXBsZXRlX2ZuID0gYXRhX3FjX2NvbXBsZXRlX25vb3A7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBhdGFfcWNfaXNzdWUocWMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHJjKQorCWlmIChhdGFfZXhlY19pbnRlcm5hbChhcCwgZGV2LCAmdGYsIERNQV9GUk9NX0RFVklDRSwKKwkJCSAgICAgIGRldi0+aWQsIHNpemVvZihkZXYtPmlkKSkpCiAJCWdvdG8gZXJyX291dDsKIAotCWF0YV9xY193YWl0X2VycihxYywgJndhaXQpOwotCiAJc3dhcF9idWZfbGUxNihkZXYtPmlkLCBBVEFfSURfV09SRFMpOwogCiAJYXRhX2R1bXBfaWQoZGV2KTsKQEAgLTIzNTEsNiArMjM5Miw3IEBACiAKIAlyZXR1cm47CiBlcnJfb3V0OgorCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IGZhaWxlZCB0byByZXJlYWQgSUQsIGRpc2FibGVkXG4iLCBhcC0+aWQpOwogCWF0YV9wb3J0X2Rpc2FibGUoYXApOwogfQogCkBAIC0yMzY0LDEwICsyNDA2LDcgQEAKIAogc3RhdGljIHZvaWQgYXRhX2Rldl9pbml0X3BhcmFtcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQogewotCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKLQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwotCWludCByYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CiAJdTE2IHNlY3RvcnMgPSBkZXYtPmlkWzZdOwogCXUxNiBoZWFkcyAgID0gZGV2LT5pZFszXTsKIApAQCAtMjM3OCwyNiArMjQxNywxOCBAQAogCS8qIHNldCB1cCBpbml0IGRldiBwYXJhbXMgdGFza2ZpbGUgKi8KIAlEUFJJTlRLKCJpbml0IGRldiBwYXJhbXMgXG4iKTsKIAotCXFjID0gYXRhX3FjX25ld19pbml0KGFwLCBkZXYpOwotCUJVR19PTihxYyA9PSBOVUxMKTsKKwlhdGFfdGZfaW5pdChhcCwgJnRmLCBkZXYtPmRldm5vKTsKKwl0Zi5jb21tYW5kID0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVM7CisJdGYuZmxhZ3MgfD0gQVRBX1RGTEFHX0lTQUREUiB8IEFUQV9URkxBR19ERVZJQ0U7CisJdGYucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CisJdGYubnNlY3QgPSBzZWN0b3JzOworCXRmLmRldmljZSB8PSAoaGVhZHMgLSAxKSAmIDB4MGY7IC8qIG1heCBoZWFkID0gbnVtLiBvZiBoZWFkcyAtIDEgKi8KIAotCXFjLT50Zi5jb21tYW5kID0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVM7Ci0JcWMtPnRmLmZsYWdzIHw9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFOwotCXFjLT50Zi5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKLQlxYy0+dGYubnNlY3QgPSBzZWN0b3JzOwotCXFjLT50Zi5kZXZpY2UgfD0gKGhlYWRzIC0gMSkgJiAweDBmOyAvKiBtYXggaGVhZCA9IG51bS4gb2YgaGVhZHMgLSAxICovCi0KLQlxYy0+d2FpdGluZyA9ICZ3YWl0OwotCXFjLT5jb21wbGV0ZV9mbiA9IGF0YV9xY19jb21wbGV0ZV9ub29wOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCXJjID0gYXRhX3FjX2lzc3VlKHFjKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChyYykKKwlpZiAoYXRhX2V4ZWNfaW50ZXJuYWwoYXAsIGRldiwgJnRmLCBETUFfTk9ORSwgTlVMTCwgMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogZmFpbGVkIHRvIGluaXQgcGFyYW1ldGVycywgZGlzYWJsZWRcbiIsCisJCSAgICAgICBhcC0+aWQpOwogCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQllbHNlCi0JCWF0YV9xY193YWl0X2VycihxYywgJndhaXQpOworCX0KIAogCURQUklOVEsoIkVYSVRcbiIpOwogfQpAQCAtMjc2NSw3ICsyNzk2LDcgQEAKICAqCU5vbmUuICAoZ3JhYnMgaG9zdCBsb2NrKQogICovCiAKLXZvaWQgYXRhX3BvbGxfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdW5zaWduZWQgaW50IGVycl9tYXNrKQordm9pZCBhdGFfcG9sbF9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI3NzMsNyArMjgwNCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCWFwLT5mbGFncyAmPSB+QVRBX0ZMQUdfTk9JTlRSOwogCWF0YV9pcnFfb24oYXApOwotCWF0YV9xY19jb21wbGV0ZShxYywgZXJyX21hc2spOworCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI3OTAsMTAgKzI4MjEsMTQgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXRhX3Bpb19wb2xsKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CisJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKIAl1OCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IHBvbGxfc3RhdGUgPSBIU01fU1RfVU5LTk9XTjsKIAl1bnNpZ25lZCBpbnQgcmVnX3N0YXRlID0gSFNNX1NUX1VOS05PV047CiAKKwlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmFjdGl2ZV90YWcpOworCWFzc2VydChxYyAhPSBOVUxMKTsKKwogCXN3aXRjaCAoYXAtPmhzbV90YXNrX3N0YXRlKSB7CiAJY2FzZSBIU01fU1Q6CiAJY2FzZSBIU01fU1RfUE9MTDoKQEAgLTI4MTMsNiArMjg0OCw3IEBACiAJc3RhdHVzID0gYXRhX2Noa19zdGF0dXMoYXApOwogCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBhcC0+cGlvX3Rhc2tfdGltZW91dCkpIHsKKwkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfQVRBX0JVUzsKIAkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9UTU9VVDsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0yODQ3LDI5ICsyODgzLDMxIEBACiAJICogbXNlY3MsIHRoZW4gY2hrLXN0YXR1cyBhZ2Fpbi4gIElmIHN0aWxsIGJ1c3ksIGZhbGwgYmFjayB0bwogCSAqIEhTTV9TVF9QT0xMIHN0YXRlLgogCSAqLwotCWRydl9zdGF0ID0gYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMCk7Ci0JaWYgKGRydl9zdGF0ICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpIHsKKwlkcnZfc3RhdCA9IGF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZLCAxMCk7CisJaWYgKGRydl9zdGF0ICYgQVRBX0JVU1kpIHsKIAkJbXNsZWVwKDIpOwotCQlkcnZfc3RhdCA9IGF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZIHwgQVRBX0RSUSwgMTApOwotCQlpZiAoZHJ2X3N0YXQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkgeworCQlkcnZfc3RhdCA9IGF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZLCAxMCk7CisJCWlmIChkcnZfc3RhdCAmIEFUQV9CVVNZKSB7CiAJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfTEFTVF9QT0xMOwogCQkJYXAtPnBpb190YXNrX3RpbWVvdXQgPSBqaWZmaWVzICsgQVRBX1RNT1VUX1BJTzsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCisJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKKwlhc3NlcnQocWMgIT0gTlVMTCk7CisKIAlkcnZfc3RhdCA9IGF0YV93YWl0X2lkbGUoYXApOwogCWlmICghYXRhX29rKGRydl9zdGF0KSkgeworCQlxYy0+ZXJyX21hc2sgfD0gX19hY19lcnJfbWFzayhkcnZfc3RhdCk7CiAJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CiAJCXJldHVybiAwOwogCX0KIAotCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7Ci0JYXNzZXJ0KHFjICE9IE5VTEwpOwotCiAJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0lETEU7CiAKLQlhdGFfcG9sbF9xY19jb21wbGV0ZShxYywgMCk7CisJYXNzZXJ0KHFjLT5lcnJfbWFzayA9PSAwKTsKKwlhdGFfcG9sbF9xY19jb21wbGV0ZShxYyk7CiAKIAkvKiBhbm90aGVyIGNvbW1hbmQgbWF5IHN0YXJ0IGF0IHRoaXMgcG9pbnQgKi8KIApAQCAtMzE3Nyw2ICszMjE1LDcgQEAKIGVycl9vdXQ6CiAJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IGRldiAldTogQVRBUEkgY2hlY2sgZmFpbGVkXG4iLAogCSAgICAgIGFwLT5pZCwgZGV2LT5kZXZubyk7CisJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOwogCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CiB9CiAKQEAgLTMyMTUsOCArMzI1NCwxNiBAQAogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7CiAJYXNzZXJ0KHFjICE9IE5VTEwpOwogCisJLyogY2hlY2sgZXJyb3IgKi8KKwlpZiAoc3RhdHVzICYgKEFUQV9FUlIgfCBBVEFfREYpKSB7CisJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfREVWOworCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOworCQlyZXR1cm47CisJfQorCisJLyogdHJhbnNmZXIgZGF0YSBpZiBhbnkgKi8KIAlpZiAoaXNfYXRhcGlfdGFza2ZpbGUoJnFjLT50ZikpIHsKLQkJLyogbm8gbW9yZSBkYXRhIHRvIHRyYW5zZmVyIG9yIHVuc3VwcG9ydGVkIEFUQVBJIGNvbW1hbmQgKi8KKwkJLyogRFJRPTAgbWVhbnMgbm8gbW9yZSBkYXRhIHRvIHRyYW5zZmVyICovCiAJCWlmICgoc3RhdHVzICYgQVRBX0RSUSkgPT0gMCkgewogCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7CiAJCQlyZXR1cm47CkBAIC0zMjI2LDYgKzMyNzMsNyBAQAogCX0gZWxzZSB7CiAJCS8qIGhhbmRsZSBCU1k9MCwgRFJRPTAgYXMgZXJyb3IgKi8KIAkJaWYgKChzdGF0dXMgJiBBVEFfRFJRKSA9PSAwKSB7CisJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7CiAJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOwogCQkJcmV0dXJuOwogCQl9CkBAIC0zMjQzLDkgKzMyOTEsMTQgQEAKIAlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmFjdGl2ZV90YWcpOwogCWFzc2VydChxYyAhPSBOVUxMKTsKIAorCS8qIG1ha2Ugc3VyZSBxYy0+ZXJyX21hc2sgaXMgYXZhaWxhYmxlIHRvIAorCSAqIGtub3cgd2hhdCdzIHdyb25nIGFuZCByZWNvdmVyCisJICovCisJYXNzZXJ0KHFjLT5lcnJfbWFzayk7CisKIAlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfSURMRTsKIAotCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjLCBBQ19FUlJfQVRBX0JVUyk7CisJYXRhX3BvbGxfcWNfY29tcGxldGUocWMpOwogfQogCiBzdGF0aWMgdm9pZCBhdGFfcGlvX3Rhc2sodm9pZCAqX2RhdGEpCkBAIC0zMzQ3LDcgKzM0MDAsOCBAQAogCQkgICAgICAgYXAtPmlkLCBxYy0+dGYuY29tbWFuZCwgZHJ2X3N0YXQsIGhvc3Rfc3RhdCk7CiAKIAkJLyogY29tcGxldGUgdGFza2ZpbGUgdHJhbnNhY3Rpb24gKi8KLQkJYXRhX3FjX2NvbXBsZXRlKHFjLCBhY19lcnJfbWFzayhkcnZfc3RhdCkpOworCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2soZHJ2X3N0YXQpOworCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQlicmVhazsKIAl9CiAKQEAgLTM0NDYsMTUgKzM1MDAsMTAgQEAKIAlyZXR1cm4gcWM7CiB9CiAKLWludCBhdGFfcWNfY29tcGxldGVfbm9vcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCB1bnNpZ25lZCBpbnQgZXJyX21hc2spCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fYXRhX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKLQl1bnNpZ25lZCBpbnQgdGFnLCBkb19jbGVhciA9IDA7CisJdW5zaWduZWQgaW50IHRhZzsKIAogCXFjLT5mbGFncyA9IDA7CiAJdGFnID0gcWMtPnRhZzsKQEAgLTM0NjIsMTcgKzM1MTEsOCBAQAogCQlpZiAodGFnID09IGFwLT5hY3RpdmVfdGFnKQogCQkJYXAtPmFjdGl2ZV90YWcgPSBBVEFfVEFHX1BPSVNPTjsKIAkJcWMtPnRhZyA9IEFUQV9UQUdfUE9JU09OOwotCQlkb19jbGVhciA9IDE7Ci0JfQotCi0JaWYgKHFjLT53YWl0aW5nKSB7Ci0JCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nID0gcWMtPndhaXRpbmc7Ci0JCXFjLT53YWl0aW5nID0gTlVMTDsKLQkJY29tcGxldGUod2FpdGluZyk7Ci0JfQotCi0JaWYgKGxpa2VseShkb19jbGVhcikpCiAJCWNsZWFyX2JpdCh0YWcsICZhcC0+cWFjdGl2ZSk7CisJfQogfQogCiAvKioKQEAgLTM0ODgsNyArMzUyOCw2IEBACiB2b2lkIGF0YV9xY19mcmVlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJYXNzZXJ0KHFjICE9IE5VTEwpOwkvKiBhdGFfcWNfZnJvbV90YWcgX21pZ2h0XyByZXR1cm4gTlVMTCAqLwotCWFzc2VydChxYy0+d2FpdGluZyA9PSBOVUxMKTsJLyogbm90aGluZyBzaG91bGQgYmUgd2FpdGluZyAqLwogCiAJX19hdGFfcWNfY29tcGxldGUocWMpOwogfQpAQCAtMzUwNSw3ICszNTQ0LDcgQEAKICAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCiAgKi8KIAotdm9pZCBhdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdW5zaWduZWQgaW50IGVycl9tYXNrKQordm9pZCBhdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlpbnQgcmM7CiAKQEAgLTM1MjIsNyArMzU2MSw3IEBACiAJcWMtPmZsYWdzICY9IH5BVEFfUUNGTEFHX0FDVElWRTsKIAogCS8qIGNhbGwgY29tcGxldGlvbiBjYWxsYmFjayAqLwotCXJjID0gcWMtPmNvbXBsZXRlX2ZuKHFjLCBlcnJfbWFzayk7CisJcmMgPSBxYy0+Y29tcGxldGVfZm4ocWMpOwogCiAJLyogaWYgY2FsbGJhY2sgaW5kaWNhdGVzIG5vdCB0byBjb21wbGV0ZSBjb21tYW5kIChub24temVybyksCiAJICogcmV0dXJuIGltbWVkaWF0ZWx5CkBAIC0zOTYwLDcgKzM5OTksOCBAQAogCQlhcC0+b3BzLT5pcnFfY2xlYXIoYXApOwogCiAJCS8qIGNvbXBsZXRlIHRhc2tmaWxlIHRyYW5zYWN0aW9uICovCi0JCWF0YV9xY19jb21wbGV0ZShxYywgYWNfZXJyX21hc2soc3RhdHVzKSk7CisJCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhzdGF0dXMpOworCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00MDU0LDEzICs0MDk0LDE3IEBACiAKIAkvKiBzbGVlcC13YWl0IGZvciBCU1kgdG8gY2xlYXIgKi8KIAlEUFJJTlRLKCJidXN5IHdhaXRcbiIpOwotCWlmIChhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0NEQl9RVUlDSywgQVRBX1RNT1VUX0NEQikpCi0JCWdvdG8gZXJyX291dF9zdGF0dXM7CisJaWYgKGF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQ0RCX1FVSUNLLCBBVEFfVE1PVVRfQ0RCKSkgeworCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7CisJCWdvdG8gZXJyX291dDsKKwl9CiAKIAkvKiBtYWtlIHN1cmUgRFJRIGlzIHNldCAqLwogCXN0YXR1cyA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKLQlpZiAoKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKSAhPSBBVEFfRFJRKQorCWlmICgoc3RhdHVzICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpICE9IEFUQV9EUlEpIHsKKwkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOwogCQlnb3RvIGVycl9vdXQ7CisJfQogCiAJLyogc2VuZCBTQ1NJIGNkYiAqLwogCURQUklOVEsoInNlbmQgY2RiXG4iKTsKQEAgLTQwOTIsMTAgKzQxMzYsOCBAQAogCiAJcmV0dXJuOwogCi1lcnJfb3V0X3N0YXR1czoKLQlzdGF0dXMgPSBhdGFfY2hrX3N0YXR1cyhhcCk7CiBlcnJfb3V0OgotCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjLCBfX2FjX2Vycl9tYXNrKHN0YXR1cykpOworCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCmluZGV4IDIyODJjMDQuLmUwNDM5YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCkBAIC00MTgsNyArNDE4LDcgQEAKIAlpbnQgaTsKIAogCS8qIEJhc2VkIG9uIHRoZSAzd2FyZSBkcml2ZXIgdHJhbnNsYXRpb24gdGFibGUgKi8KLQlzdGF0aWMgdW5zaWduZWQgY2hhciBzZW5zZV90YWJsZVtdWzRdID0geworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNlbnNlX3RhYmxlW11bNF0gPSB7CiAJCS8qIEJCRHxFQ0N8SUR8TUFSICovCiAJCXsweGQxLCAJCUFCT1JURURfQ09NTUFORCwgMHgwMCwgMHgwMH0sIAkvLyBEZXZpY2UgYnVzeSAgICAgICAgICAgICAgICAgIEFib3J0ZWQgY29tbWFuZAogCQkvKiBCQkR8RUNDfElEICovCkBAIC00NDksNyArNDQ5LDcgQEAKIAkJezB4ODAsIAkJTUVESVVNX0VSUk9SLCAweDExLCAweDA0fSwgCS8vIEJsb2NrIG1hcmtlZCBiYWQJCSAgTWVkaXVtIGVycm9yLCB1bnJlY292ZXJlZCByZWFkIGVycm9yCiAJCXsweEZGLCAweEZGLCAweEZGLCAweEZGfSwgLy8gRU5EIG1hcmsKIAl9OwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXRfdGFibGVbXVs0XSA9IHsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdGF0X3RhYmxlW11bNF0gPSB7CiAJCS8qIE11c3QgYmUgZmlyc3QgYmVjYXVzZSBCVVNZIG1lYW5zIG5vIG90aGVyIGJpdHMgdmFsaWQgKi8KIAkJezB4ODAsIAkJQUJPUlRFRF9DT01NQU5ELCAweDQ3LCAweDAwfSwJLy8gQnVzeSwgZmFrZSBwYXJpdHkgZm9yIG5vdwogCQl7MHgyMCwgCQlIQVJEV0FSRV9FUlJPUiwgIDB4MDAsIDB4MDB9LCAJLy8gRGV2aWNlIGZhdWx0CkBAIC0xMjAzLDEyICsxMjAzLDExIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgYXRhX3Njc2lfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywKLQkJCQl1bnNpZ25lZCBpbnQgZXJyX21hc2spCitzdGF0aWMgaW50IGF0YV9zY3NpX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kID0gcWMtPnNjc2ljbWQ7CiAJdTggKmNkYiA9IGNtZC0+Y21uZDsKLSAJaW50IG5lZWRfc2Vuc2UgPSAoZXJyX21hc2sgIT0gMCk7CisgCWludCBuZWVkX3NlbnNlID0gKHFjLT5lcnJfbWFzayAhPSAwKTsKIAogCS8qIEZvciBBVEEgcGFzcyB0aHJ1IChTQVQpIGNvbW1hbmRzLCBnZW5lcmF0ZSBhIHNlbnNlIGJsb2NrIGlmCiAJICogdXNlciBtYW5kYXRlZCBpdCBvciBpZiB0aGVyZSdzIGFuIGVycm9yLiAgTm90ZSB0aGF0IGlmIHdlCkBAIC0xNTMyLDcgKzE1MzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqaW5xXzgzX3N0ciA9ICJMaW51eCBBVEEtU0NTSSBzaW11bGF0b3IiOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbnFfODNfc3RyID0gIkxpbnV4IEFUQS1TQ1NJIHNpbXVsYXRvciI7CiAKIC8qKgogICoJYXRhX3Njc2lvcF9pbnFfODMgLSBTaW11bGF0ZSBJTlFVSVJZIEVWUEQgcGFnZSA4MywgZGV2aWNlIGlkZW50aXR5CkBAIC0xOTU1LDkgKzE5NTQsOSBAQAogCWRvbmUoY21kKTsKIH0KIAotc3RhdGljIGludCBhdGFwaV9zZW5zZV9jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLHVuc2lnbmVkIGludCBlcnJfbWFzaykKK3N0YXRpYyBpbnQgYXRhcGlfc2Vuc2VfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlpZiAoZXJyX21hc2sgJiYgKChlcnJfbWFzayAmIEFDX0VSUl9ERVYpID09IDApKQorCWlmIChxYy0+ZXJyX21hc2sgJiYgKChxYy0+ZXJyX21hc2sgJiBBQ19FUlJfREVWKSA9PSAwKSkKIAkJLyogRklYTUU6IG5vdCBxdWl0ZSByaWdodDsgd2UgZG9uJ3Qgd2FudCB0aGUKIAkJICogdHJhbnNsYXRpb24gb2YgdGFza2ZpbGUgcmVnaXN0ZXJzIGludG8KIAkJICogYSBzZW5zZSBkZXNjcmlwdG9ycywgc2luY2UgdGhhdCdzIG9ubHkKQEAgLTIwMTUsMTUgKzIwMTQsMTggQEAKIAogCXFjLT5jb21wbGV0ZV9mbiA9IGF0YXBpX3NlbnNlX2NvbXBsZXRlOwogCi0JaWYgKGF0YV9xY19pc3N1ZShxYykpCi0JCWF0YV9xY19jb21wbGV0ZShxYywgQUNfRVJSX09USEVSKTsKKwlpZiAoYXRhX3FjX2lzc3VlKHFjKSkgeworCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOworCQlhdGFfcWNfY29tcGxldGUocWMpOworCX0KIAogCURQUklOVEsoIkVYSVRcbiIpOwogfQogCi1zdGF0aWMgaW50IGF0YXBpX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHVuc2lnbmVkIGludCBlcnJfbWFzaykKK3N0YXRpYyBpbnQgYXRhcGlfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBxYy0+c2NzaWNtZDsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBxYy0+ZXJyX21hc2s7CiAKIAlWUFJJTlRLKCJFTlRFUiwgZXJyX21hc2sgMHglWFxuIiwgZXJyX21hc2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLmggYi9kcml2ZXJzL3Njc2kvbGliYXRhLmgKaW5kZXggOGViYWE2OS4uMjUxZTUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEuaApAQCAtMzksNyArMzksNiBAQAogCiAvKiBsaWJhdGEtY29yZS5jICovCiBleHRlcm4gaW50IGF0YXBpX2VuYWJsZWQ7Ci1leHRlcm4gaW50IGF0YV9xY19jb21wbGV0ZV9ub29wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHVuc2lnbmVkIGludCBlcnJfbWFzayk7CiBleHRlcm4gc3RydWN0IGF0YV9xdWV1ZWRfY21kICphdGFfcWNfbmV3X2luaXQoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJCQkgICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGF0YV9yd2NtZF9wcm90b2NvbChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAppbmRleCAzMDYyYjM5Li4zOGZmYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCkBAIC0yOSw5ICsyOSwxMCBAQAogI2RlZmluZSBMUEZDX0xDX0hCQV9RX0RFUFRICTEwMjQJLyogbWF4IGNtZHMgcGVyIGxvdyBjb3N0IGhiYSAqLwogI2RlZmluZSBMUEZDX0xQMTAxX0hCQV9RX0RFUFRICTEyOAkvKiBtYXggY21kcyBwZXIgbG93IGNvc3QgaGJhICovCiAKLSNkZWZpbmUgTFBGQ19DTURfUEVSX0xVTgkzMAkvKiBtYXggb3V0c3RhbmRpbmcgY21kcyBwZXIgbHVuICovCisjZGVmaW5lIExQRkNfQ01EX1BFUl9MVU4JMwkvKiBtYXggb3V0c3RhbmRpbmcgY21kcyBwZXIgbHVuICovCiAjZGVmaW5lIExQRkNfU0dfU0VHX0NOVAkJNjQJLyogc2cgZWxlbWVudCBjb3VudCBwZXIgc2NzaSBjbW5kICovCiAjZGVmaW5lIExQRkNfSU9DQl9MSVNUX0NOVAkyMjUwCS8qIGxpc3Qgb2YgSU9DQnMgZm9yIGZhc3QtcGF0aCB1c2FnZS4gKi8KKyNkZWZpbmUgTFBGQ19RX1JBTVBfVVBfSU5URVJWQUwgMTIwICAgICAvKiBsdW4gcV9kZXB0aCByYW1wIHVwIGludGVydmFsICovCiAKIC8qIERlZmluZSBtYWNyb3MgZm9yIDY0IGJpdCBzdXBwb3J0ICovCiAjZGVmaW5lIHB1dFBhZGRyTG93KGFkZHIpICAgICgodWludDMyX3QpICgweGZmZmZmZmZmICYgKHU2NCkoYWRkcikpKQpAQCAtNDUsNiArNDYsMTEgQEAKIAogI2RlZmluZSBNQVhfSEJBRVZUCTMyCiAKK2VudW0gbHBmY19wb2xsaW5nX2ZsYWdzIHsKKwlFTkFCTEVfRkNQX1JJTkdfUE9MTElORyA9IDB4MSwKKwlESVNBQkxFX0ZDUF9SSU5HX0lOVCAgICA9IDB4MgorfTsKKwogLyogUHJvdmlkZSBETUEgbWVtb3J5IGRlZmluaXRpb25zIHRoZSBkcml2ZXIgdXNlcyBwZXIgcG9ydCBpbnN0YW5jZS4gKi8KIHN0cnVjdCBscGZjX2RtYWJ1ZiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMTY3LDYgKzE3Myw3IEBACiAJZG1hX2FkZHJfdCBzbGltMnBfbWFwcGluZzsKIAl1aW50MTZfdCBwY2lfY2ZnX3ZhbHVlOwogCisJc3RydWN0IHNlbWFwaG9yZSBoYmFfY2FuX2Jsb2NrOwogCXVpbnQzMl90IGhiYV9zdGF0ZTsKIAogI2RlZmluZSBMUEZDX0lOSVRfU1RBUlQgICAgICAgICAgIDEJLyogSW5pdGlhbCBzdGF0ZSBhZnRlciBib2FyZCByZXNldCAqLwpAQCAtMjg2LDYgKzI5Myw4IEBACiAJdWludDMyX3QgY2ZnX2ZjcF9iaW5kX21ldGhvZDsKIAl1aW50MzJfdCBjZmdfZGlzY292ZXJ5X3RocmVhZHM7CiAJdWludDMyX3QgY2ZnX21heF9sdW5zOworCXVpbnQzMl90IGNmZ19wb2xsOworCXVpbnQzMl90IGNmZ19wb2xsX3RtbzsKIAl1aW50MzJfdCBjZmdfc2dfc2VnX2NudDsKIAl1aW50MzJfdCBjZmdfc2dfZG1hX2J1Zl9zaXplOwogCkBAIC0zMzcsNyArMzQ2LDkgQEAKICNkZWZpbmUgVlBEX1BPUlQgICAgICAgICAgICAweDggICAgICAgICAvKiB2YWxpZCB2cGQgcG9ydCBkYXRhICovCiAjZGVmaW5lIFZQRF9NQVNLICAgICAgICAgICAgMHhmICAgICAgICAgLyogbWFzayBmb3IgYW55IHZwZCBkYXRhICovCiAKKwlzdHJ1Y3QgdGltZXJfbGlzdCBmY3BfcG9sbF90aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBlbHNfdG1vZnVuYzsKKwogCS8qCiAJICogc3RhdCAgY291bnRlcnMKIAkgKi8KQEAgLTM0OCw2ICszNTksNyBAQAogCXN0cnVjdCBscGZjX3N5c2ZzX21ib3ggc3lzZnNfbWJveDsKIAogCS8qIGZhc3RwYXRoIGxpc3QuICovCisJc3BpbmxvY2tfdCBzY3NpX2J1Zl9saXN0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBscGZjX3Njc2lfYnVmX2xpc3Q7CiAJdWludDMyX3QgdG90YWxfc2NzaV9idWZzOwogCXN0cnVjdCBsaXN0X2hlYWQgbHBmY19pb2NiX2xpc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDg5ZTgyMjIuLjU2MjVhOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC0yNzgsNiArMjc4LDcxIEBACiAJCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgc3NpemVfdAorbHBmY19wb2xsX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIiwgcGhiYS0+Y2ZnX3BvbGwpOworfQorCitzdGF0aWMgc3NpemVfdAorbHBmY19wb2xsX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKwl1aW50MzJfdCBjcmVnX3ZhbDsKKwl1aW50MzJfdCBvbGRfdmFsOworCWludCB2YWw9MDsKKworCWlmICghaXNkaWdpdChidWZbMF0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmdmFsKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodmFsICYgMHgzKSAhPSB2YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCisJb2xkX3ZhbCA9IHBoYmEtPmNmZ19wb2xsOworCisJaWYgKHZhbCAmIEVOQUJMRV9GQ1BfUklOR19QT0xMSU5HKSB7CisJCWlmICgodmFsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpICYmCisJCSAgICAhKG9sZF92YWwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkpIHsKKwkJCWNyZWdfdmFsID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKKwkJCWNyZWdfdmFsICY9IH4oSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQkJd3JpdGVsKGNyZWdfdmFsLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKworCQkJbHBmY19wb2xsX3N0YXJ0X3RpbWVyKHBoYmEpOworCQl9CisJfSBlbHNlIGlmICh2YWwgIT0gMHgwKSB7CisJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoISh2YWwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgJiYKKwkgICAgKG9sZF92YWwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkpCisJeworCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJZGVsX3RpbWVyKCZwaGJhLT5mY3BfcG9sbF90aW1lcik7CisJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJY3JlZ192YWwgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCQljcmVnX3ZhbCB8PSAoSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQl3cml0ZWwoY3JlZ192YWwsIHBoYmEtPkhDcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCisJfQorCisJcGhiYS0+Y2ZnX3BvbGwgPSB2YWw7CisKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKworCXJldHVybiBzdHJsZW4oYnVmKTsKK30KIAogI2RlZmluZSBscGZjX3BhcmFtX3Nob3coYXR0cikJXAogc3RhdGljIHNzaXplX3QgXApAQCAtNDE2LDYgKzQ4MSwxNSBAQAogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJvYXJkX29ubGluZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkgbHBmY19ib2FyZF9vbmxpbmVfc2hvdywgbHBmY19ib2FyZF9vbmxpbmVfc3RvcmUpOwogCitzdGF0aWMgaW50IGxwZmNfcG9sbCA9IDA7Cittb2R1bGVfcGFyYW0obHBmY19wb2xsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhscGZjX3BvbGwsICJGQ1AgcmluZyBwb2xsaW5nIG1vZGUgY29udHJvbDoiCisJCSAiIDAgLSBub25lLCIKKwkJICIgMSAtIHBvbGwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQiCisJCSAiIDMgLSBwb2xsIGFuZCBkaXNhYmxlIEZDUCByaW5nIGludGVycnVwdHMiKTsKKworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxwZmNfcG9sbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgbHBmY19wb2xsX3Nob3csIGxwZmNfcG9sbF9zdG9yZSk7CiAKIC8qCiAjIGxwZmNfbG9nX3ZlcmJvc2U6IE9ubHkgdHVybiB0aGlzIGZsYWcgb24gaWYgeW91IGFyZSB3aWxsaW5nIHRvIHJpc2sgYmVpbmcKQEAgLTUyMywxMCArNTk3LDEwIEBACiAjIGlzIDAuIERlZmF1bHQgdmFsdWUgb2YgY3JfY291bnQgaXMgMS4gVGhlIGNyX2NvdW50IGZlYXR1cmUgaXMgZGlzYWJsZWQgaWYKICMgY3JfZGVsYXkgaXMgc2V0IHRvIDAuCiAqLwotTFBGQ19BVFRSKGNyX2RlbGF5LCAwLCAwLCA2MywgIkEgY291bnQgb2YgbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIGFuIgorTFBGQ19BVFRSX1JXKGNyX2RlbGF5LCAwLCAwLCA2MywgIkEgY291bnQgb2YgbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIGFuIgogCQkiaW50ZXJydXB0IHJlc3BvbnNlIGlzIGdlbmVyYXRlZCIpOwogCi1MUEZDX0FUVFIoY3JfY291bnQsIDEsIDEsIDI1NSwgIkEgY291bnQgb2YgSS9PIGNvbXBsZXRpb25zIGFmdGVyIHdoaWNoIGFuIgorTFBGQ19BVFRSX1JXKGNyX2NvdW50LCAxLCAxLCAyNTUsICJBIGNvdW50IG9mIEkvTyBjb21wbGV0aW9ucyBhZnRlciB3aGljaCBhbiIKIAkJImludGVycnVwdCByZXNwb25zZSBpcyBnZW5lcmF0ZWQiKTsKIAogLyoKQEAgLTU1Myw2ICs2MjcsMTMgQEAKIExQRkNfQVRUUl9SKG1heF9sdW5zLCAyNTYsIDEsIDMyNzY4LAogCSAgICAgIk1heGltdW0gbnVtYmVyIG9mIExVTnMgcGVyIHRhcmdldCBkcml2ZXIgd2lsbCBzdXBwb3J0Iik7CiAKKy8qCisjIGxwZmNfcG9sbF90bW86IC5NaWxsaXNlY29uZHMgZHJpdmVyIHdpbGwgd2FpdCBiZXR3ZWVuIHBvbGxpbmcgRkNQIHJpbmcuCisjIFZhbHVlIHJhbmdlIGlzIFsxLDI1NV0sIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisqLworTFBGQ19BVFRSX1JXKHBvbGxfdG1vLCAxMCwgMSwgMjU1LAorCSAgICAgIk1pbGxpc2Vjb25kcyBkcml2ZXIgd2lsbCB3YWl0IGJldHdlZW4gcG9sbGluZyBGQ1AgcmluZyIpOworCiBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqbHBmY19ob3N0X2F0dHJzW10gPSB7CiAJJmNsYXNzX2RldmljZV9hdHRyX2luZm8sCiAJJmNsYXNzX2RldmljZV9hdHRyX3NlcmlhbG51bSwKQEAgLTU3NSwxMSArNjU2LDE1IEBACiAJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfdG9wb2xvZ3ksCiAJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfc2Nhbl9kb3duLAogCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2xpbmtfc3BlZWQsCisJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfY3JfZGVsYXksCisJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfY3JfY291bnQsCiAJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfZmRtaV9vbiwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19tYXhfbHVucywKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbnBvcnRfZXZ0X2NudCwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbWFuYWdlbWVudF92ZXJzaW9uLAogCSZjbGFzc19kZXZpY2VfYXR0cl9ib2FyZF9vbmxpbmUsCisJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfcG9sbCwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19wb2xsX3RtbywKIAlOVUxMLAogfTsKIApAQCAtMTI5Miw2ICsxMzc3LDkgQEAKIAlscGZjX2ZkbWlfb25faW5pdChwaGJhLCBscGZjX2ZkbWlfb24pOwogCWxwZmNfZGlzY292ZXJ5X3RocmVhZHNfaW5pdChwaGJhLCBscGZjX2Rpc2NvdmVyeV90aHJlYWRzKTsKIAlscGZjX21heF9sdW5zX2luaXQocGhiYSwgbHBmY19tYXhfbHVucyk7CisJbHBmY19wb2xsX3Rtb19pbml0KHBoYmEsIGxwZmNfcG9sbF90bW8pOworCisJcGhiYS0+Y2ZnX3BvbGwgPSBscGZjX3BvbGw7CiAKIAkvKgogCSAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWUgcGx1cyAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IGQ1MjdkMDUuLmYxZTcwODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0xNDMsNiArMTQzLDkgQEAKIGludCBscGZjX21lbV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfbWVtX2ZyZWUoc3RydWN0IGxwZmNfaGJhICopOwogCit2b2lkIGxwZmNfcG9sbF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKTsKK3ZvaWQgbHBmY19wb2xsX3N0YXJ0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpOwordm9pZCBscGZjX3NsaV9wb2xsX2ZjcF9yaW5nKHN0cnVjdCBscGZjX2hiYSAqIGhiYSk7CiBzdHJ1Y3QgbHBmY19pb2NicSAqIGxwZmNfc2xpX2dldF9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc2xpX3JlbGVhc2VfaW9jYnEoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NiKTsKIHVpbnQxNl90IGxwZmNfc2xpX25leHRfaW90YWcoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKaW5kZXggMDg0ZTc2Mi4uZWQ2YzgxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKQEAgLTczLDYgKzczLDggQEAKIAlzdHJ1Y3QgbHBmY19oYmEgICAgICAqbmxwX3BoYmE7CiAJc3RydWN0IGxwZmNfd29ya19ldnQgbm9kZXZfdGltZW91dF9ldnQ7CiAJc3RydWN0IGxwZmNfd29ya19ldnQgZWxzX3JldHJ5X2V2dDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfcmFtcF91cF90aW1lOyAgICAgICAgLyogamlmZnkgb2YgbGFzdCByYW1wIHVwICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3FfZnVsbF90aW1lOwkJLyogamlmZnkgb2YgbGFzdCBxdWV1ZSBmdWxsICovCiB9OwogCiAvKiBEZWZpbmVzIGZvciBubHBfZmxhZyAodWludDMyKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggYmNjMjllYy4uMjBmMWEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC03MjAsNiArNzIwLDcgQEAKIAkJLyogRG8gbm90IGNhbGwgRFNNIGZvciBscGZjX2Vsc19hYm9ydCdlZCBFTFMgY21kcyAqLwogCQlpZiAoKGlyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKSAmJgogCQkgICAoKGlyc3AtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfU0xJX0FCT1JURUQpIHx8CisJCSAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX0xJTktfRE9XTikgfHwKIAkJICAgKGlyc3AtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfU0xJX0RPV04pKSkgewogCQkJZGlzYyA9IChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQyk7CiAJCX0KQEAgLTg2OSw2ICs4NzAsNyBAQAogCQkvKiBEbyBub3QgY2FsbCBEU00gZm9yIGxwZmNfZWxzX2Fib3J0J2VkIEVMUyBjbWRzICovCiAJCWlmICgoaXJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpICYmCiAJCSAgICgoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9TTElfQUJPUlRFRCkgfHwKKwkJICAgKGlyc3AtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfTElOS19ET1dOKSB8fAogCQkgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9TTElfRE9XTikpKSB7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTA1NCw2ICsxMDU2LDcgQEAKIAkJLyogRG8gbm90IGNhbGwgRFNNIGZvciBscGZjX2Vsc19hYm9ydCdlZCBFTFMgY21kcyAqLwogCQlpZiAoKGlyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKSAmJgogCQkgICAoKGlyc3AtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfU0xJX0FCT1JURUQpIHx8CisJCSAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX0xJTktfRE9XTikgfHwKIAkJICAgKGlyc3AtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfU0xJX0RPV04pKSkgewogCQkJZGlzYyA9IChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQyk7CiAJCX0KQEAgLTEyMDUsNiArMTIwOCw3IEBACiAJCS8qIERvIG5vdCBjYWxsIERTTSBmb3IgbHBmY19lbHNfYWJvcnQnZWQgRUxTIGNtZHMgKi8KIAkJaWYgKChpcnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgJiYKIAkJICAgKChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9BQk9SVEVEKSB8fAorCQkgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9MSU5LX0RPV04pIHx8CiAJCSAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9ET1dOKSkpIHsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDI1OWVlYjEuLmExZjc1MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC0xMDE3LDEyICsxMDE3LDcgQEAKIAlycG9ydF9pZHMucG9ydF9uYW1lID0gd3duX3RvX3U2NChuZGxwLT5ubHBfcG9ydG5hbWUudS53d24pOwogCXJwb3J0X2lkcy5wb3J0X2lkID0gbmRscC0+bmxwX0RJRDsKIAlycG9ydF9pZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047Ci0JaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZDUF9UQVJHRVQpCi0JCXJwb3J0X2lkcy5yb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7Ci0JaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZDUF9JTklUSUFUT1IpCi0JCXJwb3J0X2lkcy5yb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9JTklUSUFUT1I7CiAKLQlzY3NpX2Jsb2NrX3JlcXVlc3RzKHBoYmEtPmhvc3QpOwogCW5kbHAtPnJwb3J0ID0gcnBvcnQgPSBmY19yZW1vdGVfcG9ydF9hZGQocGhiYS0+aG9zdCwgMCwgJnJwb3J0X2lkcyk7CiAJaWYgKCFycG9ydCkgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBoYmEtPnBjaWRldi0+ZGV2LApAQCAtMTAzOSw3ICsxMDM0LDE2IEBACiAJfQogCXJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJcmRhdGEtPnBub2RlID0gbmRscDsKLQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMocGhiYS0+aG9zdCk7CisKKwlpZiAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkNQX1RBUkdFVCkKKwkJcnBvcnRfaWRzLnJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKKwlpZiAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkNQX0lOSVRJQVRPUikKKwkJcnBvcnRfaWRzLnJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX0lOSVRJQVRPUjsKKworCisJaWYgKHJwb3J0X2lkcy5yb2xlcyAhPSAgRkNfUlBPUlRfUk9MRV9VTktOT1dOKQorCQlmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHJwb3J0LCBycG9ydF9pZHMucm9sZXMpOworCiAKIAlyZXR1cm47CiB9CkBAIC0xMDUzLDkgKzEwNTcsNyBAQAogCiAJbmRscC0+cnBvcnQgPSBOVUxMOwogCXJkYXRhLT5wbm9kZSA9IE5VTEw7Ci0Jc2NzaV9ibG9ja19yZXF1ZXN0cyhwaGJhLT5ob3N0KTsKIAlmY19yZW1vdGVfcG9ydF9kZWxldGUocnBvcnQpOwotCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhwaGJhLT5ob3N0KTsKIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCA4NmM0MTk4Li4xZWE1NjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC0yNjYsOSArMjY2LDExIEBACiAJCXN0cnVjdCB7CiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECiAJCQl1aW50OF90IG5hbWVUeXBlOjQ7CS8qIEZDIFdvcmQgMCwgYml0IDI4OjMxICovCi0JCQl1aW50OF90IElFRUVleHRNc246NDsJLyogRkMgV29yZCAwLCBiaXQgMjQ6MjcsIGJpdCA4OjExIG9mIElFRUUgZXh0ICovCisJCQl1aW50OF90IElFRUVleHRNc246NDsJLyogRkMgV29yZCAwLCBiaXQgMjQ6MjcsIGJpdAorCQkJCQkJICAgODoxMSBvZiBJRUVFIGV4dCAqLwogI2Vsc2UJLyogIF9fTElUVExFX0VORElBTl9CSVRGSUVMRCAqLwotCQkJdWludDhfdCBJRUVFZXh0TXNuOjQ7CS8qIEZDIFdvcmQgMCwgYml0IDI0OjI3LCBiaXQgODoxMSBvZiBJRUVFIGV4dCAqLworCQkJdWludDhfdCBJRUVFZXh0TXNuOjQ7CS8qIEZDIFdvcmQgMCwgYml0IDI0OjI3LCBiaXQKKwkJCQkJCSAgIDg6MTEgb2YgSUVFRSBleHQgKi8KIAkJCXVpbnQ4X3QgbmFtZVR5cGU6NDsJLyogRkMgV29yZCAwLCBiaXQgMjg6MzEgKi8KICNlbmRpZgogCkBAIC0yNzgsNyArMjgwLDggQEAKICNkZWZpbmUgTkFNRV9JUF9UWVBFICAgICAgICAweDQJLyogSVAgYWRkcmVzcyAqLwogI2RlZmluZSBOQU1FX0NDSVRUX1RZUEUgICAgIDB4QwogI2RlZmluZSBOQU1FX0NDSVRUX0dSX1RZUEUgIDB4RQotCQkJdWludDhfdCBJRUVFZXh0THNiOwkvKiBGQyBXb3JkIDAsIGJpdCAxNjoyMywgSUVFRSBleHRlbmRlZCBMc2IgKi8KKwkJCXVpbnQ4X3QgSUVFRWV4dExzYjsJLyogRkMgV29yZCAwLCBiaXQgMTY6MjMsIElFRUUKKwkJCQkJCSAgIGV4dGVuZGVkIExzYiAqLwogCQkJdWludDhfdCBJRUVFWzZdOwkvKiBGQyBJRUVFIGFkZHJlc3MgKi8KIAkJfSBzOwogCQl1aW50OF90IHd3bls4XTsKQEAgLTEwMjQsMjMgKzEwMjcsMzggQEAKIC8qIFN0YXJ0IEZpcmVGbHkgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FTVVMRVggICAgICAgIDB4MTBkZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZJUkVGTFkgICAgICAgMHgxYWU1Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VQRVJGTFkgICAgICAweGY3MDAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9EUkFHT05GTFkgICAgIDB4ZjgwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JGTFkgICAgICAgICAgMHhmMDk1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEZMWSAgICAgICAgICAweGYwOTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MUDEwMSAgICAgICAgIDB4ZjBhMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RGTFkgICAgICAgICAgMHhmMGE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlNNQiAgICAgICAgICAweGYwZDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CTUlEICAgICAgICAgIDB4ZjBkNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pTTUIgICAgICAgICAgMHhmMGUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk1JRCAgICAgICAgICAweGYwZTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVBUVU5FICAgICAgIDB4ZjBmNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FUFRVTkVfU0NTUCAgMHhmMGY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVQVFVORV9EQ1NQICAweGYwZjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVVBFUkZMWSAgICAgIDB4ZjcwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RSQUdPTkZMWSAgICAgMHhmODAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0VOVEFVUiAgICAgICAweGY5MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QRUdBU1VTICAgICAgIDB4Zjk4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RIT1IgICAgICAgICAgMHhmYTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklQRVIgICAgICAgICAweGZiMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MUDEwMDAwUyAgICAgIDB4ZmMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xQMTEwMDBTICAgICAgMHhmYzEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFBFMTEwMDBTICAgICAweGZjMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IRUxJT1MgICAgICAgIDB4ZmQwMAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JNSUQgICAgICAgICAgMHhmMGQ1Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlNNQiAgICAgICAgICAweGYwZDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IRUxJT1NfU0NTUCAgIDB4ZmQxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hFTElPU19EQ1NQICAgMHhmZDEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWkVQSFlSICAgICAgICAweGZlMDAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9aTUlEICAgICAgICAgIDB4ZjBlNQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pTTUIgICAgICAgICAgMHhmMGUxCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFAxMDEJICAgIDB4ZjBhMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xQMTAwMDBTCSAgICAweGZjMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9aRVBIWVJfU0NTUCAgIDB4ZmUxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pFUEhZUl9EQ1NQICAgMHhmZTEyCisKKyNkZWZpbmUgUENJX1NVQlNZU1RFTV9JRF9MUDExMDAwUyAgICAgIDB4ZmMxMQorI2RlZmluZSBQQ0lfU1VCU1lTVEVNX0lEX0xQMTEwMDJTICAgICAgMHhmYzEyCisjZGVmaW5lIFBDSV9TVUJTWVNURU1fSURfTFBFMTEwMDBTICAgICAweGZjMjEKKyNkZWZpbmUgUENJX1NVQlNZU1RFTV9JRF9MUEUxMTAwMlMgICAgIDB4ZmMyMgorI2RlZmluZSBQQ0lfU1VCU1lTVEVNX0lEX0xQRTExMDEwUyAgICAgMHhmYzJBCiAKICNkZWZpbmUgSkVERUNfSURfQUREUkVTUyAgICAgICAgICAgIDB4MDA4MDAwMWMKICNkZWZpbmUgRklSRUZMWV9KRURFQ19JRCAgICAgICAgICAgIDB4MUFDQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCAwNzQ5ODExLi5iN2E2MDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMTI2LDM0ICsxMjYsMjYgQEAKIAkJcmV0dXJuIC1FUkVTVEFSVDsKIAl9CiAKLQkvKiBUaGUgSEJBJ3MgY3VycmVudCBzdGF0ZSBpcyBwcm92aWRlZCBieSB0aGUgUHJvZ1R5cGUgYW5kIHJyIGZpZWxkcy4KLQkgKiBSZWFkIGFuZCBjaGVjayB0aGUgdmFsdWUgb2YgdGhlc2UgZmllbGRzIGJlZm9yZSBjb250aW51aW5nIHRvIGNvbmZpZwotCSAqIHRoaXMgcG9ydC4KKwkvKgorCSAqIFRoZSB2YWx1ZSBvZiByciBtdXN0IGJlIDEgc2luY2UgdGhlIGRyaXZlciBzZXQgdGhlIGN2IGZpZWxkIHRvIDEuCisJICogVGhpcyBzZXR0aW5nIHJlcXVpcmVzIHRoZSBGVyB0byBzZXQgYWxsIHJldmlzaW9uIGZpZWxkcy4KIAkgKi8KLQlpZiAobWItPnVuLnZhclJkUmV2LnJyID09IDAgfHwgbWItPnVuLnZhclJkUmV2LnVuLmIuUHJvZ1R5cGUgIT0gMikgewotCQkvKiBPbGQgZmlybXdhcmUgKi8KKwlpZiAobWItPnVuLnZhclJkUmV2LnJyID09IDApIHsKIAkJdnAtPnJldi5yQml0ID0gMDsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsCi0JCQkJS0VSTl9FUlIsCi0JCQkJTE9HX0lOSVQsCi0JCQkJIiVkOjA0NDAgQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCi0JCQkJIlJFQURfUkVWIGRldGVjdGVkIG91dGRhdGVkIGZpcm13YXJlIgotCQkJCSJEYXRhOiB4JXhcbiIsCi0JCQkJcGhiYS0+YnJkX25vLAotCQkJCW1iLT5tYnhDb21tYW5kLCAwKTsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiJWQ6MDQ0MCBBZGFwdGVyIGZhaWxlZCB0byBpbml0LCBSRUFEX1JFViBoYXMgIgorCQkJCSJtaXNzaW5nIHJldmlzaW9uIGluZm9ybWF0aW9uLlxuIiwKKwkJCQlwaGJhLT5icmRfbm8pOwogCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJcmV0dXJuIC1FUkVTVEFSVDsKLQl9IGVsc2UgewotCQl2cC0+cmV2LnJCaXQgPSAxOwotCQl2cC0+cmV2LnNsaTFGd1JldiA9IG1iLT51bi52YXJSZFJldi5zbGkxRndSZXY7Ci0JCW1lbWNweSh2cC0+cmV2LnNsaTFGd05hbWUsCi0JCQkoY2hhciopbWItPnVuLnZhclJkUmV2LnNsaTFGd05hbWUsIDE2KTsKLQkJdnAtPnJldi5zbGkyRndSZXYgPSBtYi0+dW4udmFyUmRSZXYuc2xpMkZ3UmV2OwotCQltZW1jcHkodnAtPnJldi5zbGkyRndOYW1lLAotCQkJCQkoY2hhciAqKW1iLT51bi52YXJSZFJldi5zbGkyRndOYW1lLCAxNik7CiAJfQogCiAJLyogU2F2ZSBpbmZvcm1hdGlvbiBhcyBWUEQgZGF0YSAqLworCXZwLT5yZXYuckJpdCA9IDE7CisJdnAtPnJldi5zbGkxRndSZXYgPSBtYi0+dW4udmFyUmRSZXYuc2xpMUZ3UmV2OworCW1lbWNweSh2cC0+cmV2LnNsaTFGd05hbWUsIChjaGFyKikgbWItPnVuLnZhclJkUmV2LnNsaTFGd05hbWUsIDE2KTsKKwl2cC0+cmV2LnNsaTJGd1JldiA9IG1iLT51bi52YXJSZFJldi5zbGkyRndSZXY7CisJbWVtY3B5KHZwLT5yZXYuc2xpMkZ3TmFtZSwgKGNoYXIgKikgbWItPnVuLnZhclJkUmV2LnNsaTJGd05hbWUsIDE2KTsKIAl2cC0+cmV2LmJpdVJldiA9IG1iLT51bi52YXJSZFJldi5iaXVSZXY7CiAJdnAtPnJldi5zbVJldiA9IG1iLT51bi52YXJSZFJldi5zbVJldjsKIAl2cC0+cmV2LnNtRndSZXYgPSBtYi0+dW4udmFyUmRSZXYudW4uc21Gd1JldjsKQEAgLTM3OCw2ICszNzAsMTAgQEAKIAlpZiAocHNsaS0+bnVtX3JpbmdzID4gMykKIAkJc3RhdHVzIHw9IEhDX1IzSU5UX0VOQTsKIAorCWlmICgocGhiYS0+Y2ZnX3BvbGwgJiBFTkFCTEVfRkNQX1JJTkdfUE9MTElORykgJiYKKwkgICAgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpKQorCQlzdGF0dXMgJj0gfihIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisKIAl3cml0ZWwoc3RhdHVzLCBwaGJhLT5IQ3JlZ2FkZHIpOwogCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC01NzEsNiArNTY3LDggQEAKIAogCXJjID0gLUVJTzsKIAorCS8qIENsZWFudXAgYW55IG91dHN0YW5kaW5nIEVMUyBjb21tYW5kcyAqLworCWxwZmNfZWxzX2ZsdXNoX2NtZChwaGJhKTsKIAogCXBzbGktPnNsaXN0YXQubGlua19ldmVudCsrOwogCWxwZmNfcmVhZF9sYShwaGJhLCBwbWIsIG1wKTsKQEAgLTc2NSw5NiArNzYzLDEzOSBAQAogbHBmY19nZXRfaGJhX21vZGVsX2Rlc2Moc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdWludDhfdCAqIG1kcCwgdWludDhfdCAqIGRlc2NwKQogewogCWxwZmNfdnBkX3QgKnZwOwotCXVpbnQzMl90IGlkOwotCXVpbnQ4X3QgaGRydHlwZTsKLQljaGFyIHN0clsxNl07CisJdWludDE2X3QgZGV2X2lkID0gcGhiYS0+cGNpZGV2LT5kZXZpY2U7CisJdWludDE2X3QgZGV2X3N1YmlkID0gcGhiYS0+cGNpZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCXVpbnQ4X3QgaGRydHlwZSA9IHBoYmEtPnBjaWRldi0+aGRyX3R5cGU7CisJY2hhciAqbW9kZWxfc3RyID0gIiI7CiAKIAl2cCA9ICZwaGJhLT52cGQ7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBoYmEtPnBjaWRldiwgUENJX1ZFTkRPUl9JRCwgJmlkKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwaGJhLT5wY2lkZXYsIFBDSV9IRUFERVJfVFlQRSwgJmhkcnR5cGUpOwogCi0Jc3dpdGNoICgoaWQgPj4gMTYpICYgMHhmZmZmKSB7CisJc3dpdGNoIChkZXZfaWQpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfRklSRUZMWToKLQkJc3RyY3B5KHN0ciwgIkxQNjAwMCAxIik7CisJCW1vZGVsX3N0ciA9ICJMUDYwMDAgMUdiIFBDSSI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9TVVBFUkZMWToKIAkJaWYgKHZwLT5yZXYuYml1UmV2ID49IDEgJiYgdnAtPnJldi5iaXVSZXYgPD0gMykKLQkJCXN0cmNweShzdHIsICJMUDcwMDAgMSIpOworCQkJbW9kZWxfc3RyID0gIkxQNzAwMCAxR2IgUENJIjsKIAkJZWxzZQotCQkJc3RyY3B5KHN0ciwgIkxQNzAwMEUgMSIpOworCQkJbW9kZWxfc3RyID0gIkxQNzAwMEUgMUdiIFBDSSI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9EUkFHT05GTFk6Ci0JCXN0cmNweShzdHIsICJMUDgwMDAgMSIpOworCQltb2RlbF9zdHIgPSAiTFA4MDAwIDFHYiBQQ0kiOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQ0VOVEFVUjoKIAkJaWYgKEZDX0pFREVDX0lEKHZwLT5yZXYuYml1UmV2KSA9PSBDRU5UQVVSXzJHX0pFREVDX0lEKQotCQkJc3RyY3B5KHN0ciwgIkxQOTAwMiAyIik7CisJCQltb2RlbF9zdHIgPSAiTFA5MDAyIDJHYiBQQ0kiOwogCQllbHNlCi0JCQlzdHJjcHkoc3RyLCAiTFA5MDAwIDEiKTsKKwkJCW1vZGVsX3N0ciA9ICJMUDkwMDAgMUdiIFBDSSI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9SRkxZOgotCQlzdHJjcHkoc3RyLCAiTFA5NTIgMiIpOworCQltb2RlbF9zdHIgPSAiTFA5NTIgMkdiIFBDSSI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9QRUdBU1VTOgotCQlzdHJjcHkoc3RyLCAiTFA5ODAyIDIiKTsKKwkJbW9kZWxfc3RyID0gIkxQOTgwMiAyR2IgUENJLVgiOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfVEhPUjoKIAkJaWYgKGhkcnR5cGUgPT0gMHg4MCkKLQkJCXN0cmNweShzdHIsICJMUDEwMDAwREMgMiIpOworCQkJbW9kZWxfc3RyID0gIkxQMTAwMDBEQyAyR2IgMi1wb3J0IFBDSS1YIjsKIAkJZWxzZQotCQkJc3RyY3B5KHN0ciwgIkxQMTAwMDAgMiIpOworCQkJbW9kZWxfc3RyID0gIkxQMTAwMDAgMkdiIFBDSS1YIjsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJUEVSOgotCQlzdHJjcHkoc3RyLCAiTFBYMTAwMCAxMCIpOworCQltb2RlbF9zdHIgPSAiTFBYMTAwMCAxMEdiIFBDSS1YIjsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BGTFk6Ci0JCXN0cmNweShzdHIsICJMUDk4MiAyIik7CisJCW1vZGVsX3N0ciA9ICJMUDk4MiAyR2IgUENJLVgiOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfVEZMWToKIAkJaWYgKGhkcnR5cGUgPT0gMHg4MCkKLQkJCXN0cmNweShzdHIsICJMUDEwNTBEQyAyIik7CisJCQltb2RlbF9zdHIgPSAiTFAxMDUwREMgMkdiIDItcG9ydCBQQ0ktWCI7CiAJCWVsc2UKLQkJCXN0cmNweShzdHIsICJMUDEwNTAgMiIpOworCQkJbW9kZWxfc3RyID0gIkxQMTA1MCAyR2IgUENJLVgiOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfSEVMSU9TOgogCQlpZiAoaGRydHlwZSA9PSAweDgwKQotCQkJc3RyY3B5KHN0ciwgIkxQMTEwMDIgNCIpOworCQkJbW9kZWxfc3RyID0gIkxQMTEwMDIgNEdiIDItcG9ydCBQQ0ktWDIiOwogCQllbHNlCi0JCQlzdHJjcHkoc3RyLCAiTFAxMTAwMCA0Iik7CisJCQltb2RlbF9zdHIgPSAiTFAxMTAwMCA0R2IgUENJLVgyIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hFTElPU19TQ1NQOgorCQltb2RlbF9zdHIgPSAiTFAxMTAwMC1TUCA0R2IgUENJLVgyIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hFTElPU19EQ1NQOgorCQltb2RlbF9zdHIgPSAiTFAxMTAwMi1TUCA0R2IgMi1wb3J0IFBDSS1YMiI7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9ORVBUVU5FOgorCQlpZiAoaGRydHlwZSA9PSAweDgwKQorCQkJbW9kZWxfc3RyID0gIkxQZTEwMDIgNEdiIDItcG9ydCI7CisJCWVsc2UKKwkJCW1vZGVsX3N0ciA9ICJMUGUxMDAwIDRHYiBQQ0llIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX05FUFRVTkVfU0NTUDoKKwkJbW9kZWxfc3RyID0gIkxQZTEwMDAtU1AgNEdiIFBDSWUiOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfTkVQVFVORV9EQ1NQOgorCQltb2RlbF9zdHIgPSAiTFBlMTAwMi1TUCA0R2IgMi1wb3J0IFBDSWUiOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQk1JRDoKLQkJc3RyY3B5KHN0ciwgIkxQMTE1MCA0Iik7CisJCW1vZGVsX3N0ciA9ICJMUDExNTAgNEdiIFBDSS1YMiI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9CU01COgotCQlzdHJjcHkoc3RyLCAiTFAxMTEgNCIpOworCQltb2RlbF9zdHIgPSAiTFAxMTEgNEdiIFBDSS1YMiI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9aRVBIWVI6CiAJCWlmIChoZHJ0eXBlID09IDB4ODApCi0JCQlzdHJjcHkoc3RyLCAiTFBlMTEwMDIgNCIpOworCQkJbW9kZWxfc3RyID0gIkxQZTExMDAyIDRHYiAyLXBvcnQgUENJZSI7CiAJCWVsc2UKLQkJCXN0cmNweShzdHIsICJMUGUxMTAwMCA0Iik7CisJCQltb2RlbF9zdHIgPSAiTFBlMTEwMDAgNEdiIFBDSWUiOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfWkVQSFlSX1NDU1A6CisJCW1vZGVsX3N0ciA9ICJMUGUxMTAwMC1TUCA0R2IgUENJZSI7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9aRVBIWVJfRENTUDoKKwkJbW9kZWxfc3RyID0gIkxQZTExMDAyLVNQIDRHYiAyLXBvcnQgUENJZSI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9aTUlEOgotCQlzdHJjcHkoc3RyLCAiTFBlMTE1MCA0Iik7CisJCW1vZGVsX3N0ciA9ICJMUGUxMTUwIDRHYiBQQ0llIjsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1pTTUI6Ci0JCXN0cmNweShzdHIsICJMUGUxMTEgNCIpOworCQltb2RlbF9zdHIgPSAiTFBlMTExIDRHYiBQQ0llIjsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0xQMTAxOgotCQlzdHJjcHkoc3RyLCAiTFAxMDEgMiIpOworCQltb2RlbF9zdHIgPSAiTFAxMDEgMkdiIFBDSS1YIjsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0xQMTAwMDBTOgotCQlzdHJjcHkoc3RyLCAiTFAxMDAwMC1TIDIiKTsKKwkJbW9kZWxfc3RyID0gIkxQMTAwMDAtUyAyR2IgUENJIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0xQMTEwMDBTOgorCWNhc2UgUENJX0RFVklDRV9JRF9MUEUxMTAwMFM6CisJCXN3aXRjaCAoZGV2X3N1YmlkKSB7CisJCWNhc2UgUENJX1NVQlNZU1RFTV9JRF9MUDExMDAwUzoKKwkJCW1vZGVsX3N0ciA9ICJMUDExMDAyLVMgNEdiIFBDSS1YMiI7CisJCQlicmVhazsKKwkJY2FzZSBQQ0lfU1VCU1lTVEVNX0lEX0xQMTEwMDJTOgorCQkJbW9kZWxfc3RyID0gIkxQMTEwMDAtUyA0R2IgMi1wb3J0IFBDSS1YMiI7CisJCQlicmVhazsKKwkJY2FzZSBQQ0lfU1VCU1lTVEVNX0lEX0xQRTExMDAwUzoKKwkJCW1vZGVsX3N0ciA9ICJMUGUxMTAwMi1TIDRHYiBQQ0llIjsKKwkJCWJyZWFrOworCQljYXNlIFBDSV9TVUJTWVNURU1fSURfTFBFMTEwMDJTOgorCQkJbW9kZWxfc3RyID0gIkxQZTExMDAyLVMgNEdiIDItcG9ydCBQQ0llIjsKKwkJCWJyZWFrOworCQljYXNlIFBDSV9TVUJTWVNURU1fSURfTFBFMTEwMTBTOgorCQkJbW9kZWxfc3RyID0gIkxQZTExMDEwLVMgNEdiIDEwLXBvcnQgUENJZSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCW1lbXNldChzdHIsIDAsIDE2KTsKIAkJYnJlYWs7CiAJfQogCWlmIChtZHApCi0JCXNzY2FuZihzdHIsICIlcyIsIG1kcCk7CisJCXNzY2FuZihtb2RlbF9zdHIsICIlcyIsIG1kcCk7CiAJaWYgKGRlc2NwKQotCQlzcHJpbnRmKGRlc2NwLCAiRW11bGV4IExpZ2h0UHVsc2UgJXMgR2lnYWJpdCBQQ0kgRmlicmUgIgotCQkJIkNoYW5uZWwgQWRhcHRlciIsIHN0cik7CisJCXNwcmludGYoZGVzY3AsICJFbXVsZXggJXMgRmlicmUgQ2hhbm5lbCBBZGFwdGVyIiwgbW9kZWxfc3RyKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE5Niw2ICsxMjM3LDcgQEAKIAkJfQogCX0KIAorCWRlbF90aW1lcl9zeW5jKCZwaGJhLT5mY3BfcG9sbF90aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJnBoYmEtPmZjX2VzdGFidG1vKTsKIAlkZWxfdGltZXJfc3luYygmcGhiYS0+ZmNfZGlzY3Rtbyk7CiAJZGVsX3RpbWVyX3N5bmMoJnBoYmEtPmZjX2ZkbWl0bW8pOwpAQCAtMTM1MSw3ICsxMzkzLDcgQEAKIAkJZ290byBvdXRfcHV0X2hvc3Q7CiAKIAlob3N0LT51bmlxdWVfaWQgPSBwaGJhLT5icmRfbm87Ci0KKwlpbml0X01VVEVYKCZwaGJhLT5oYmFfY2FuX2Jsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcGhiYS0+Y3Ryc3BidWZsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcGhiYS0+cm5pZHJzcGJ1Zmxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mcmVlYnVmTGlzdCk7CkBAIC0xMzc1LDYgKzE0MTcsMTAgQEAKIAlwc2xpLT5tYm94X3Rtby5mdW5jdGlvbiA9IGxwZmNfbWJveF90aW1lb3V0OwogCXBzbGktPm1ib3hfdG1vLmRhdGEgPSAodW5zaWduZWQgbG9uZylwaGJhOwogCisJaW5pdF90aW1lcigmcGhiYS0+ZmNwX3BvbGxfdGltZXIpOworCXBoYmEtPmZjcF9wb2xsX3RpbWVyLmZ1bmN0aW9uID0gbHBmY19wb2xsX3RpbWVvdXQ7CisJcGhiYS0+ZmNwX3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBoYmE7CisKIAkvKgogCSAqIEdldCBhbGwgdGhlIG1vZHVsZSBwYXJhbXMgZm9yIGNvbmZpZ3VyaW5nIHRoaXMgaG9zdCBhbmQgdGhlbgogCSAqIGVzdGFibGlzaCB0aGUgaG9zdCBwYXJhbWV0ZXJzLgpAQCAtMTQ4OSw2ICsxNTM1LDcgQEAKIAlob3N0LT5tYXhfY21kX2xlbiA9IDE2OwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBzY3NpIGJ1ZmZlcnMgdXNlZCBieSBkcml2ZXIgZm9yIHNjc2kgSU8uICovCisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPnNjc2lfYnVmX2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmxwZmNfc2NzaV9idWZfbGlzdCk7CiAKIAlob3N0LT50cmFuc3BvcnR0ID0gbHBmY190cmFuc3BvcnRfdGVtcGxhdGU7CkBAIC0xNTIwLDYgKzE1NjcsMTIgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2ZyZWVfaXJxOwogCisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKKwkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQlscGZjX3BvbGxfc3RhcnRfdGltZXIocGhiYSk7CisJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCX0KKwogCS8qCiAJICogc2V0IGZpeGVkIGhvc3QgYXR0cmlidXRlcwogCSAqIE11c3QgZG9uZSBhZnRlciBscGZjX3NsaV9oYmFfc2V0dXAoKQpAQCAtMTY3OSwxNCArMTczMiwyOCBAQAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9QRkxZLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9ORVBUVU5FLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9ORVBUVU5FX1NDU1AsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX05FUFRVTkVfRENTUCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfSEVMSU9TLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9IRUxJT1NfU0NTUCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfSEVMSU9TX0RDU1AsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX0JNSUQsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX0JTTUIsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1pFUEhZUiwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfWkVQSFlSX1NDU1AsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1pFUEhZUl9EQ1NQLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9aTUlELAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9aU01CLApAQCAtMTY5Nyw2ICsxNzY0LDEwIEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX0xQMTAwMDBTLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9MUDExMDAwUywKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfTFBFMTEwMDBTLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCA1MDdhNmFmLi5mYmVhZDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTU1LDU1ICs1NSw3NiBAQAogCXJldHVybiAoMSk7CiB9CiAKLQogaW50CiBscGZjX2NoZWNrX3NwYXJtKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCiAJCSBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHN0cnVjdCBzZXJ2X3Bhcm0gKiBzcCwKIAkJIHVpbnQzMl90IGNsYXNzKQogewogCXZvbGF0aWxlIHN0cnVjdCBzZXJ2X3Bhcm0gKmhzcCA9ICZwaGJhLT5mY19zcGFyYW07Ci0JLyogRmlyc3QgY2hlY2sgZm9yIHN1cHBvcnRlZCB2ZXJzaW9uICovCisJdWludDE2X3QgaHNwX3ZhbHVlLCBzc3BfdmFsdWUgPSAwOwogCi0JLyogTmV4dCBjaGVjayBmb3IgY2xhc3MgdmFsaWRpdHkgKi8KKwkvKgorCSAqIFRoZSByZWNlaXZlIGRhdGEgZmllbGQgc2l6ZSBhbmQgYnVmZmVyLXRvLWJ1ZmZlciByZWNlaXZlIGRhdGEgZmllbGQKKwkgKiBzaXplIGVudHJpZXMgYXJlIDE2IGJpdHMgYnV0IGFyZSByZXByZXNlbnRlZCBhcyB0d28gOC1iaXQgZmllbGRzIGluCisJICogdGhlIGRyaXZlciBkYXRhIHN0cnVjdHVyZSB0byBhY2NvdW50IGZvciByc3ZkIGJpdHMgYW5kIG90aGVyIGNvbnRyb2wKKwkgKiBiaXRzLiAgUmVjb25zdHJ1Y3QgYW5kIGNvbXBhcmUgdGhlIGZpZWxkcyBhcyBhIDE2LWJpdCB2YWx1ZXMgYmVmb3JlCisJICogY29ycmVjdGluZyB0aGUgYnl0ZSB2YWx1ZXMuCisJICovCiAJaWYgKHNwLT5jbHMxLmNsYXNzVmFsaWQpIHsKLQotCQlpZiAoc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPiBoc3AtPmNsczEucmN2RGF0YVNpemVNc2IpCi0JCQlzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA9IGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYjsKLQkJaWYgKHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiID4gaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiKQorCQloc3BfdmFsdWUgPSAoaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQloc3AtPmNsczEucmN2RGF0YVNpemVMc2I7CisJCXNzcF92YWx1ZSA9IChzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJc3AtPmNsczEucmN2RGF0YVNpemVMc2I7CisJCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKIAkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiID0gaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOworCQkJc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPSBoc3AtPmNsczEucmN2RGF0YVNpemVNc2I7CisJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMSkgewotCQlyZXR1cm4gKDApOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoc3AtPmNsczIuY2xhc3NWYWxpZCkgewotCi0JCWlmIChzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA+IGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYikKLQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTXNiID0gaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiOwotCQlpZiAoc3AtPmNsczIucmN2RGF0YVNpemVMc2IgPiBoc3AtPmNsczIucmN2RGF0YVNpemVMc2IpCisJCWhzcF92YWx1ZSA9IChoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKKwkJc3NwX3ZhbHVlID0gKHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKKwkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgewogCQkJc3AtPmNsczIucmN2RGF0YVNpemVMc2IgPSBoc3AtPmNsczIucmN2RGF0YVNpemVMc2I7CisJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA9IGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYjsKKwkJfQogCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MyKSB7Ci0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChzcC0+Y2xzMy5jbGFzc1ZhbGlkKSB7Ci0KLQkJaWYgKHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiID4gaHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiKQotCQkJc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPSBoc3AtPmNsczMucmN2RGF0YVNpemVNc2I7Ci0JCWlmIChzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYiA+IGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYikKKwkJaHNwX3ZhbHVlID0gKGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOworCQlzc3BfdmFsdWUgPSAoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCXNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOworCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7CiAJCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYiA9IGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYjsKKwkJCXNwLT5jbHMzLnJjdkRhdGFTaXplTXNiID0gaHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiOworCQl9CiAJfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzMpIHsKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHNwLT5jbW4uYmJSY3ZTaXplTXNiID4gaHNwLT5jbW4uYmJSY3ZTaXplTXNiKQotCQlzcC0+Y21uLmJiUmN2U2l6ZU1zYiA9IGhzcC0+Y21uLmJiUmN2U2l6ZU1zYjsKLQlpZiAoc3AtPmNtbi5iYlJjdlNpemVMc2IgPiBoc3AtPmNtbi5iYlJjdlNpemVMc2IpCisJLyoKKwkgKiBQcmVzZXJ2ZSB0aGUgdXBwZXIgZm91ciBiaXRzIG9mIHRoZSBNU0IgZnJvbSB0aGUgUExPR0kgcmVzcG9uc2UuCisJICogVGhlc2UgYml0cyBjb250YWluIHRoZSBCdWZmZXItdG8tQnVmZmVyIFN0YXRlIENoYW5nZSBOdW1iZXIKKwkgKiBmcm9tIHRoZSB0YXJnZXQgYW5kIG5lZWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBGVy4KKwkgKi8KKwloc3BfdmFsdWUgPSAoaHNwLT5jbW4uYmJSY3ZTaXplTXNiIDw8IDgpIHwgaHNwLT5jbW4uYmJSY3ZTaXplTHNiOworCXNzcF92YWx1ZSA9IChzcC0+Y21uLmJiUmN2U2l6ZU1zYiA8PCA4KSB8IHNwLT5jbW4uYmJSY3ZTaXplTHNiOworCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKIAkJc3AtPmNtbi5iYlJjdlNpemVMc2IgPSBoc3AtPmNtbi5iYlJjdlNpemVMc2I7CisJCXNwLT5jbW4uYmJSY3ZTaXplTXNiID0gKHNwLT5jbW4uYmJSY3ZTaXplTXNiICYgMHhGMCkgfAorCQkJCSAgICAgICAoaHNwLT5jbW4uYmJSY3ZTaXplTXNiICYgMHgwRik7CisJfQogCi0JLyogSWYgY2hlY2sgaXMgZ29vZCwgY29weSB3d3BuIHd3bm4gaW50byBuZGxwICovCiAJbWVtY3B5KCZuZGxwLT5ubHBfbm9kZW5hbWUsICZzcC0+bm9kZU5hbWUsIHNpemVvZiAoc3RydWN0IGxwZmNfbmFtZSkpOwogCW1lbWNweSgmbmRscC0+bmxwX3BvcnRuYW1lLCAmc3AtPnBvcnROYW1lLCBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKTsKLQlyZXR1cm4gKDEpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IGM2MzI3NWUuLjllZTgyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC00MSw2ICs0MSwyMCBAQAogI2RlZmluZSBMUEZDX0FCT1JUX1dBSVQgIDIKIAogCitzdGF0aWMgaW5saW5lIHZvaWQKK2xwZmNfYmxvY2tfcmVxdWVzdHMoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK3sKKwlkb3duKCZwaGJhLT5oYmFfY2FuX2Jsb2NrKTsKKwlzY3NpX2Jsb2NrX3JlcXVlc3RzKHBoYmEtPmhvc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xwZmNfdW5ibG9ja19yZXF1ZXN0cyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQoreworCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhwaGJhLT5ob3N0KTsKKwl1cCgmcGhiYS0+aGJhX2Nhbl9ibG9jayk7Cit9CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGEgc2NzaSBidWZmZXIsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5CiAgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW5pdGlhdGUgYSBTQ1NJIEkvTy4gIFRoZSBub24tRE1BYWJsZSBidWZmZXIgcmVnaW9uCkBAIC0xMzcsMTggKzE1MSwyMiBAQAogfQogCiBzdHJ1Y3QgIGxwZmNfc2NzaV9idWYqCi1scGZjX3NsaV9nZXRfc2NzaV9idWYoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK2xwZmNfZ2V0X3Njc2lfYnVmKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CiAJc3RydWN0ICBscGZjX3Njc2lfYnVmICogbHBmY19jbWQgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKnNjc2lfYnVmX2xpc3QgPSAmcGhiYS0+bHBmY19zY3NpX2J1Zl9saXN0OworCXVuc2lnbmVkIGxvbmcgaWZsYWcgPSAwOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPnNjc2lfYnVmX2xpc3RfbG9jaywgaWZsYWcpOwogCWxpc3RfcmVtb3ZlX2hlYWQoc2NzaV9idWZfbGlzdCwgbHBmY19jbWQsIHN0cnVjdCBscGZjX3Njc2lfYnVmLCBsaXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5zY3NpX2J1Zl9saXN0X2xvY2ssIGlmbGFnKTsKIAlyZXR1cm4gIGxwZmNfY21kOwogfQogCiBzdGF0aWMgdm9pZAogbHBmY19yZWxlYXNlX3Njc2lfYnVmKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX3Njc2lfYnVmICogcHNiKQogeworCXVuc2lnbmVkIGxvbmcgaWZsYWcgPSAwOwogCS8qCiAJICogVGhlcmUgYXJlIG9ubHkgdHdvIHNwZWNpYWwgY2FzZXMgdG8gY29uc2lkZXIuICAoMSkgdGhlIHNjc2kgY29tbWFuZAogCSAqIHJlcXVlc3RlZCBzY2F0dGVyLWdhdGhlciB1c2FnZSBvciAoMikgdGhlIHNjc2kgY29tbWFuZCBhbGxvY2F0ZWQKQEAgLTE2Niw4ICsxODQsMTAgQEAKIAkJIH0KIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+c2NzaV9idWZfbGlzdF9sb2NrLCBpZmxhZyk7CiAJcHNiLT5wQ21kID0gTlVMTDsKIAlsaXN0X2FkZF90YWlsKCZwc2ItPmxpc3QsICZwaGJhLT5scGZjX3Njc2lfYnVmX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPnNjc2lfYnVmX2xpc3RfbG9jaywgaWZsYWcpOwogfQogCiBzdGF0aWMgaW50CkBAIC0zODksNyArNDA5LDkgQEAKIAlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YSA9IGxwZmNfY21kLT5yZGF0YTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqcG5vZGUgPSByZGF0YS0+cG5vZGU7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kID0gbHBmY19jbWQtPnBDbWQ7Ci0JdW5zaWduZWQgbG9uZyBpZmxhZzsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgKnRtcF9zZGV2OworCWludCBkZXB0aCA9IDA7CiAKIAlscGZjX2NtZC0+cmVzdWx0ID0gcElvY2JPdXQtPmlvY2IudW4udWxwV29yZFs0XTsKIAlscGZjX2NtZC0+c3RhdHVzID0gcElvY2JPdXQtPmlvY2IudWxwU3RhdHVzOwpAQCAtNDQxLDExICs0NjMsNjQgQEAKIAkJCQkqbHAsICoobHAgKyAzKSwgY21kLT5yZXRyaWVzLCBjbWQtPnJlc2lkKTsKIAl9CiAKKwlyZXN1bHQgPSBjbWQtPnJlc3VsdDsKKwlzZGV2ID0gY21kLT5kZXZpY2U7CiAJY21kLT5zY3NpX2RvbmUoY21kKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgaWZsYWcpOworCWlmICghcmVzdWx0ICYmCisJICAgKChqaWZmaWVzIC0gcG5vZGUtPmxhc3RfcmFtcF91cF90aW1lKSA+CisJCUxQRkNfUV9SQU1QX1VQX0lOVEVSVkFMICogSFopICYmCisJICAgKChqaWZmaWVzIC0gcG5vZGUtPmxhc3RfcV9mdWxsX3RpbWUpID4KKwkJTFBGQ19RX1JBTVBfVVBfSU5URVJWQUwgKiBIWikgJiYKKwkgICAocGhiYS0+Y2ZnX2x1bl9xdWV1ZV9kZXB0aCA+IHNkZXYtPnF1ZXVlX2RlcHRoKSkgeworCQlzaG9zdF9mb3JfZWFjaF9kZXZpY2UodG1wX3NkZXYsIHNkZXYtPmhvc3QpIHsKKwkJCWlmIChwaGJhLT5jZmdfbHVuX3F1ZXVlX2RlcHRoID4gdG1wX3NkZXYtPnF1ZXVlX2RlcHRoKSB7CisJCQkJaWYgKHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHRtcF9zZGV2LT5vcmRlcmVkX3RhZ3MpCisJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAorCQkJCQkJTVNHX09SREVSRURfVEFHLAorCQkJCQkJdG1wX3NkZXYtPnF1ZXVlX2RlcHRoKzEpOworCQkJCWVsc2UKKwkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgodG1wX3NkZXYsCisJCQkJCQlNU0dfU0lNUExFX1RBRywKKwkJCQkJCXRtcF9zZGV2LT5xdWV1ZV9kZXB0aCsxKTsKKworCQkJCXBub2RlLT5sYXN0X3JhbXBfdXBfdGltZSA9IGppZmZpZXM7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBxdWV1ZSBmdWxsLiAgSWYgdGhlIGx1biBpcyByZXBvcnRpbmcgcXVldWUgZnVsbCwgdGhlbgorCSAqIGJhY2sgb2ZmIHRoZSBsdW4gcXVldWUgZGVwdGggdG8gcHJldmVudCB0YXJnZXQgb3ZlcmxvYWRzLgorCSAqLworCWlmIChyZXN1bHQgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkgeworCQlwbm9kZS0+bGFzdF9xX2Z1bGxfdGltZSA9IGppZmZpZXM7CisKKwkJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHRtcF9zZGV2LCBzZGV2LT5ob3N0KSB7CisJCQlpZiAodG1wX3NkZXYtPmlkICE9IHNkZXYtPmlkKQorCQkJCWNvbnRpbnVlOworCQkJZGVwdGggPSBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwodG1wX3NkZXYsCisJCQkJCXRtcF9zZGV2LT5xdWV1ZV9kZXB0aCAtIDEpOworCQl9CisJCS8qCisgCQkgKiBUaGUgcXVldWUgZGVwdGggY2Fubm90IGJlIGxvd2VyZWQgYW55IG1vcmUuCisJCSAqIE1vZGlmeSB0aGUgcmV0dXJuZWQgZXJyb3IgY29kZSB0byBzdG9yZQorCQkgKiB0aGUgZmluYWwgZGVwdGggdmFsdWUgc2V0IGJ5CisJCSAqIHNjc2lfdHJhY2tfcXVldWVfZnVsbC4KKwkJICovCisJCWlmIChkZXB0aCA9PSAtMSkKKwkJCWRlcHRoID0gc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW47CisKKwkJaWYgKGRlcHRoKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRkNQLAorCQkJCSIlZDowNzExIGRldGVjdGVkIHF1ZXVlIGZ1bGwgLSBsdW4gcXVldWUgZGVwdGggIgorCQkJCSIgYWRqdXN0ZWQgdG8gJWQuXG4iLCBwaGJhLT5icmRfbm8sIGRlcHRoKTsKKwkJfQorCX0KKwogCWxwZmNfcmVsZWFzZV9zY3NpX2J1ZihwaGJhLCBscGZjX2NtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTY5Myw2ICs3NjgsMzcgQEAKIAlyZXR1cm4gbHBmY2luZm9idWY7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbHBmY19wb2xsX3JlYXJtX3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCit7CisJdW5zaWduZWQgbG9uZyAgcG9sbF90bW9fZXhwaXJlcyA9CisJCShqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhwaGJhLT5jZmdfcG9sbF90bW8pKTsKKworCWlmIChwaGJhLT5zbGkucmluZ1tMUEZDX0ZDUF9SSU5HXS50eGNtcGxxX2NudCkKKwkJbW9kX3RpbWVyKCZwaGJhLT5mY3BfcG9sbF90aW1lciwKKwkJCSAgcG9sbF90bW9fZXhwaXJlcyk7Cit9CisKK3ZvaWQgbHBmY19wb2xsX3N0YXJ0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCit7CisJbHBmY19wb2xsX3JlYXJtX3RpbWVyKHBoYmEpOworfQorCit2b2lkIGxwZmNfcG9sbF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilwdHI7CisJdW5zaWduZWQgbG9uZyBpZmxhZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgaWZsYWcpOworCisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRU5BQkxFX0ZDUF9SSU5HX1BPTExJTkcpIHsKKwkJbHBmY19zbGlfcG9sbF9mY3BfcmluZyAocGhiYSk7CisJCWlmIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKQorCQkJbHBmY19wb2xsX3JlYXJtX3RpbWVyKHBoYmEpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBpZmxhZyk7Cit9CisKIHN0YXRpYyBpbnQKIGxwZmNfcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQsIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKQEAgLTcxOSwxMCArODI1LDExIEBACiAJCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0JVU19CVVNZLCAwKTsKIAkJZ290byBvdXRfZmFpbF9jb21tYW5kOwogCX0KLQlscGZjX2NtZCA9IGxwZmNfc2xpX2dldF9zY3NpX2J1ZiAocGhiYSk7CisJbHBmY19jbWQgPSBscGZjX2dldF9zY3NpX2J1ZiAocGhiYSk7CiAJaWYgKGxwZmNfY21kID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIGJ1ZmZlciBhdmFpbGFibGUgLSBsaXN0IGVtcHR5LCAiCi0JCSAgICAgICAidG90YWwgY291bnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgcGhiYS0+dG90YWxfc2NzaV9idWZzKTsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZDUCwKKwkJCQkiJWQ6MDcwNyBkcml2ZXIncyBidWZmZXIgcG9vbCBpcyBlbXB0eSwgIgorCQkJCSJJTyBidXNpZWRcbiIsIHBoYmEtPmJyZF9ubyk7CiAJCWdvdG8gb3V0X2hvc3RfYnVzeTsKIAl9CiAKQEAgLTc0NiwxMSArODUzLDE3IEBACiAJCQkJJmxwZmNfY21kLT5jdXJfaW9jYnEsIFNMSV9JT0NCX1JFVF9JT0NCKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ob3N0X2J1c3lfZnJlZV9idWY7CisKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBFTkFCTEVfRkNQX1JJTkdfUE9MTElORykgeworCQlscGZjX3NsaV9wb2xsX2ZjcF9yaW5nKHBoYmEpOworCQlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkKKwkJCWxwZmNfcG9sbF9yZWFybV90aW1lcihwaGJhKTsKKwl9CisKIAlyZXR1cm4gMDsKIAogIG91dF9ob3N0X2J1c3lfZnJlZV9idWY6CiAJbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKLQljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKICBvdXRfaG9zdF9idXN5OgogCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC03NTksMTEgKzg3MiwxMiBAQAogCXJldHVybiAwOwogfQogCisKIHN0YXRpYyBpbnQKLV9fbHBmY19hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCitscGZjX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKIHsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPQotCQkJKHN0cnVjdCBscGZjX2hiYSAqKWNtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbW5kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXNob3N0LT5ob3N0ZGF0YVswXTsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXTsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYjsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqYWJ0c2lvY2I7CkBAIC03NzIsNiArODg2LDggQEAKIAl1bnNpZ25lZCBpbnQgbG9vcF9jb3VudCA9IDA7CiAJaW50IHJldCA9IFNVQ0NFU1M7CiAKKwlscGZjX2Jsb2NrX3JlcXVlc3RzKHBoYmEpOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAlscGZjX2NtZCA9IChzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqKWNtbmQtPmhvc3Rfc2NyaWJibGU7CiAJQlVHX09OKCFscGZjX2NtZCk7CkBAIC04MjEsOSArOTM3LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKQorCQlscGZjX3NsaV9wb2xsX2ZjcF9yaW5nIChwaGJhKTsKKwogCS8qIFdhaXQgZm9yIGFib3J0IHRvIGNvbXBsZXRlICovCiAJd2hpbGUgKGxwZmNfY21kLT5wQ21kID09IGNtbmQpCiAJeworCQlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkKKwkJCWxwZmNfc2xpX3BvbGxfZmNwX3JpbmcgKHBoYmEpOworCiAJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoTFBGQ19BQk9SVF9XQUlUKkhaKTsKIAkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtODQ0LDI2ICs5NjYsMTkgQEAKIAogIG91dDoKIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRkNQLAotCQkJIiVkOjA3NDkgU0NTSSBsYXllciBpc3N1ZWQgYWJvcnQgZGV2aWNlOiByZXQgJSN4LCAiCi0JCQkiSUQgJWQsIExVTiAlZCwgc251bSAlI2x4XG4iLAorCQkJIiVkOjA3NDkgU0NTSSBMYXllciBJL08gQWJvcnQgUmVxdWVzdCAiCisJCQkiU3RhdHVzIHgleCBJRCAlZCBMVU4gJWQgc251bSAlI2x4XG4iLAogCQkJcGhiYS0+YnJkX25vLCByZXQsIGNtbmQtPmRldmljZS0+aWQsCiAJCQljbW5kLT5kZXZpY2UtPmx1biwgY21uZC0+c2VyaWFsX251bWJlcik7CiAKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbHBmY191bmJsb2NrX3JlcXVlc3RzKHBoYmEpOworCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAotbHBmY19hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCi17Ci0JaW50IHJjOwotCXNwaW5fbG9ja19pcnEoY21uZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCXJjID0gX19scGZjX2Fib3J0X2hhbmRsZXIoY21uZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtbmQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLV9fbHBmY19yZXNldF9sdW5faGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQorbHBmY19yZXNldF9sdW5faGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY21uZC0+ZGV2aWNlLT5ob3N0OwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilzaG9zdC0+aG9zdGRhdGFbMF07CkBAIC04NzEsOSArOTg2LDEyIEBACiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxLCAqaW9jYnFyc3A7CiAJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpwbm9kZSA9IHJkYXRhLT5wbm9kZTsKKwl1aW50MzJfdCBjbWRfcmVzdWx0ID0gMCwgY21kX3N0YXR1cyA9IDA7CiAJaW50IHJldCA9IEZBSUxFRDsKIAlpbnQgY250LCBsb29wY250OwogCisJbHBmY19ibG9ja19yZXF1ZXN0cyhwaGJhKTsKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCS8qCiAJICogSWYgdGFyZ2V0IGlzIG5vdCBpbiBhIE1BUFBFRCBzdGF0ZSwgZGVsYXkgdGhlIHJlc2V0IHVudGlsCiAJICogdGFyZ2V0IGlzIHJlZGlzY292ZXJlZCBvciBub2RldiB0aW1lb3V0IGV4cGlyZXMuCkBAIC04OTEsNyArMTAwOSw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlscGZjX2NtZCA9IGxwZmNfc2xpX2dldF9zY3NpX2J1ZiAocGhiYSk7CisJbHBmY19jbWQgPSBscGZjX2dldF9zY3NpX2J1ZiAocGhiYSk7CiAJaWYgKGxwZmNfY21kID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCkBAIC05MTYsMjYgKzEwMzQsMjggQEAKIAlpZiAocmV0ID09IElPQ0JfU1VDQ0VTUykKIAkJcmV0ID0gU1VDQ0VTUzsKIAotCWxwZmNfY21kLT5yZXN1bHQgPSBpb2NicXJzcC0+aW9jYi51bi51bHBXb3JkWzRdOwotCWxwZmNfY21kLT5zdGF0dXMgPSBpb2NicXJzcC0+aW9jYi51bHBTdGF0dXM7Ci0JaWYgKGxwZmNfY21kLT5zdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkKLQkJaWYgKGxwZmNfY21kLT5yZXN1bHQgJiBJT0VSUl9EUlZSX01BU0spCi0JCQlscGZjX2NtZC0+c3RhdHVzID0gSU9TVEFUX0RSSVZFUl9SRUpFQ1Q7CisKKwljbWRfcmVzdWx0ID0gaW9jYnFyc3AtPmlvY2IudW4udWxwV29yZFs0XTsKKwljbWRfc3RhdHVzID0gaW9jYnFyc3AtPmlvY2IudWxwU3RhdHVzOworCisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NicXJzcCk7CisJbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKIAogCS8qCi0JICogQWxsIG91dHN0YW5kaW5nIHR4Y21wbHEgSS9PcyBzaG91bGQgaGF2ZSBiZWVuIGFib3J0ZWQgYnkgdGhlIHRhcmdldC4KKwkgKiBBbGwgb3V0c3RhbmRpbmcgdHhjbXBscSBJL09zIHNob3VsZCBoYXZlIGJlZW4gYWJvcnRlZCBieSB0aGUgZGV2aWNlLgogCSAqIFVuZm9ydHVuYXRlbHksIHNvbWUgdGFyZ2V0cyBkbyBub3QgYWJpZGUgYnkgdGhpcyBmb3JjaW5nIHRoZSBkcml2ZXIKIAkgKiB0byBkb3VibGUgY2hlY2suCiAJICovCi0JbHBmY19zbGlfYWJvcnRfaW9jYihwaGJhLCAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKLQkJCSAgICBjbW5kLT5kZXZpY2UtPmlkLCBjbW5kLT5kZXZpY2UtPmx1biwgMCwKLQkJCSAgICBMUEZDX0NUWF9MVU4pOwotCisJY250ID0gbHBmY19zbGlfc3VtX2lvY2IocGhiYSwgJnBoYmEtPnNsaS5yaW5nW3BoYmEtPnNsaS5mY3BfcmluZ10sCisJCQkJY21uZC0+ZGV2aWNlLT5pZCwgY21uZC0+ZGV2aWNlLT5sdW4sCisJCQkJTFBGQ19DVFhfTFVOKTsKKwlpZiAoY250KQorCQlscGZjX3NsaV9hYm9ydF9pb2NiKHBoYmEsCisJCQkJICAgICZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddLAorCQkJCSAgICBjbW5kLT5kZXZpY2UtPmlkLCBjbW5kLT5kZXZpY2UtPmx1biwKKwkJCQkgICAgMCwgTFBGQ19DVFhfTFVOKTsKIAlsb29wY250ID0gMDsKLQl3aGlsZSgoY250ID0gbHBmY19zbGlfc3VtX2lvY2IocGhiYSwKLQkJCQkgICAgICAgJnBoYmEtPnNsaS5yaW5nW3BoYmEtPnNsaS5mY3BfcmluZ10sCi0JCQkJICAgICAgIGNtbmQtPmRldmljZS0+aWQsIGNtbmQtPmRldmljZS0+bHVuLAotCQkJCSAgICAgICBMUEZDX0NUWF9MVU4pKSkgeworCXdoaWxlKGNudCkgewogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoTFBGQ19SRVNFVF9XQUlUKkhaKTsKIAkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtOTQzLDYgKzEwNjMsMTEgQEAKIAkJaWYgKCsrbG9vcGNudAogCQkgICAgPiAoMiAqIHBoYmEtPmNmZ19ub2Rldl90bW8pL0xQRkNfUkVTRVRfV0FJVCkKIAkJCWJyZWFrOworCisJCWNudCA9IGxwZmNfc2xpX3N1bV9pb2NiKHBoYmEsCisJCQkJCSZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddLAorCQkJCQljbW5kLT5kZXZpY2UtPmlkLCBjbW5kLT5kZXZpY2UtPmx1biwKKwkJCQkJTFBGQ19DVFhfTFVOKTsKIAl9CiAKIAlpZiAoY250KSB7CkBAIC05NTIsMzUgKzEwNzcsMjEgQEAKIAkJcmV0ID0gRkFJTEVEOwogCX0KIAotCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYnFyc3ApOwotCiBvdXRfZnJlZV9zY3NpX2J1ZjoKIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19GQ1AsCiAJCQkiJWQ6MDcxMyBTQ1NJIGxheWVyIGlzc3VlZCBMVU4gcmVzZXQgKCVkLCAlZCkgIgogCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAotCQkJcGhiYS0+YnJkX25vLCBscGZjX2NtZC0+cENtZC0+ZGV2aWNlLT5pZCwKLQkJCWxwZmNfY21kLT5wQ21kLT5kZXZpY2UtPmx1biwgcmV0LCBscGZjX2NtZC0+c3RhdHVzLAotCQkJbHBmY19jbWQtPnJlc3VsdCk7Ci0JbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKKwkJCXBoYmEtPmJyZF9ubywgY21uZC0+ZGV2aWNlLT5pZCxjbW5kLT5kZXZpY2UtPmx1biwKKwkJCXJldCwgY21kX3N0YXR1cywgY21kX3Jlc3VsdCk7CisKIG91dDoKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbHBmY191bmJsb2NrX3JlcXVlc3RzKHBoYmEpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKLWxwZmNfcmVzZXRfbHVuX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKLXsKLQlpbnQgcmM7Ci0Jc3Bpbl9sb2NrX2lycShjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmMgPSBfX2xwZmNfcmVzZXRfbHVuX2hhbmRsZXIoY21uZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtbmQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBOb3RlOiBtaWRsYXllciBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGhvc3RfbG9jayBoZWxkCi0gKi8KLXN0YXRpYyBpbnQKLV9fbHBmY19yZXNldF9idXNfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQorbHBmY19yZXNldF9idXNfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY21uZC0+ZGV2aWNlLT5ob3N0OwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilzaG9zdC0+aG9zdGRhdGFbMF07CkBAIC05OTEsNyArMTEwMiwxMCBAQAogCXVuc2lnbmVkIGludCBtaWRsYXllcl9pZCA9IDA7CiAJc3RydWN0IGxwZmNfc2NzaV9idWYgKiBscGZjX2NtZDsKIAotCWxwZmNfY21kID0gbHBmY19zbGlfZ2V0X3Njc2lfYnVmIChwaGJhKTsKKwlscGZjX2Jsb2NrX3JlcXVlc3RzKHBoYmEpOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisKKwlscGZjX2NtZCA9IGxwZmNfZ2V0X3Njc2lfYnVmKHBoYmEpOwogCWlmIChscGZjX2NtZCA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApAQCAtMTAyMiwxOCArMTEzNiwzMSBAQAogCQlscGZjX2NtZC0+cENtZC0+ZGV2aWNlLT5ob3N0ZGF0YSA9IG5kbHAtPnJwb3J0LT5kZF9kYXRhOwogCQlyZXQgPSBscGZjX3Njc2lfdGd0X3Jlc2V0KGxwZmNfY21kLCBwaGJhKTsKIAkJaWYgKHJldCAhPSBTVUNDRVNTKSB7Ci0JCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRkNQLAorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRkNQLAogCQkJCSIlZDowNzEzIEJ1cyBSZXNldCBvbiB0YXJnZXQgJWQgZmFpbGVkXG4iLAogCQkJCXBoYmEtPmJyZF9ubywgaSk7CiAJCQllcnJfY291bnQrKzsKIAkJfQogCX0KIAorCWlmIChlcnJfY291bnQgPT0gMCkKKwkJcmV0ID0gU1VDQ0VTUzsKKworCWxwZmNfcmVsZWFzZV9zY3NpX2J1ZihwaGJhLCBscGZjX2NtZCk7CisKKwkvKgorCSAqIEFsbCBvdXRzdGFuZGluZyB0eGNtcGxxIEkvT3Mgc2hvdWxkIGhhdmUgYmVlbiBhYm9ydGVkIGJ5CisJICogdGhlIHRhcmdldHMuICBVbmZvcnR1bmF0ZWx5LCBzb21lIHRhcmdldHMgZG8gbm90IGFiaWRlIGJ5CisJICogdGhpcyBmb3JjaW5nIHRoZSBkcml2ZXIgdG8gZG91YmxlIGNoZWNrLgorCSAqLwogCWNtbmQtPmRldmljZS0+aWQgPSBtaWRsYXllcl9pZDsKKwljbnQgPSBscGZjX3NsaV9zdW1faW9jYihwaGJhLCAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKKwkJCQkwLCAwLCBMUEZDX0NUWF9IT1NUKTsKKwlpZiAoY250KQorCQlscGZjX3NsaV9hYm9ydF9pb2NiKHBoYmEsICZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddLAorCQkJCSAgICAwLCAwLCAwLCBMUEZDX0NUWF9IT1NUKTsKIAlsb29wY250ID0gMDsKLQl3aGlsZSgoY250ID0gbHBmY19zbGlfc3VtX2lvY2IocGhiYSwKLQkJCQkmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKLQkJCQkwLCAwLCBMUEZDX0NUWF9IT1NUKSkpIHsKKwl3aGlsZShjbnQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKExQRkNfUkVTRVRfV0FJVCpIWik7CiAJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTEwNDEsNDUgKzExNjgsMzEgQEAKIAkJaWYgKCsrbG9vcGNudAogCQkgICAgPiAoMiAqIHBoYmEtPmNmZ19ub2Rldl90bW8pL0xQRkNfUkVTRVRfV0FJVCkKIAkJCWJyZWFrOworCisJCWNudCA9IGxwZmNfc2xpX3N1bV9pb2NiKHBoYmEsCisJCQkJCSZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddLAorCQkJCQkwLCAwLCBMUEZDX0NUWF9IT1NUKTsKIAl9CiAKIAlpZiAoY250KSB7Ci0JCS8qIGZsdXNoIGFsbCBvdXRzdGFuZGluZyBjb21tYW5kcyBvbiB0aGUgaG9zdCAqLwotCQlpID0gbHBmY19zbGlfYWJvcnRfaW9jYihwaGJhLAotCQkJCSZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddLCAwLCAwLCAwLAotCQkJCUxQRkNfQ1RYX0hPU1QpOwotCi0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GQ1AsCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0ZDUCwKIAkJICAgIiVkOjA3MTUgQnVzIFJlc2V0IEkvTyBmbHVzaCBmYWlsdXJlOiBjbnQgeCV4IGxlZnQgeCV4XG4iLAogCQkgICBwaGJhLT5icmRfbm8sIGNudCwgaSk7CisJCXJldCA9IEZBSUxFRDsKIAl9CiAKLQlpZiAoY250ID09IDApCi0JCXJldCA9IFNVQ0NFU1M7Ci0JZWxzZQotCQlyZXQgPSBGQUlMRUQ7Ci0KLQlscGZjX3JlbGVhc2Vfc2NzaV9idWYocGhiYSwgbHBmY19jbWQpOwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAogCQkJS0VSTl9FUlIsCiAJCQlMT0dfRkNQLAogCQkJIiVkOjA3MTQgU0NTSSBsYXllciBpc3N1ZWQgQnVzIFJlc2V0IERhdGE6IHgleFxuIiwKIAkJCXBoYmEtPmJyZF9ubywgcmV0KTsKIG91dDoKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbHBmY191bmJsb2NrX3JlcXVlc3RzKHBoYmEpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKLWxwZmNfcmVzZXRfYnVzX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKLXsKLQlpbnQgcmM7Ci0Jc3Bpbl9sb2NrX2lycShjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmMgPSBfX2xwZmNfcmVzZXRfYnVzX2hhbmRsZXIoY21uZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtbmQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKIGxwZmNfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YVswXTsKQEAgLTExMjcsMTAgKzEyNDAsMTAgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5zY3NpX2J1Zl9saXN0X2xvY2ssIGZsYWdzKTsKIAkJcGhiYS0+dG90YWxfc2NzaV9idWZzKys7CiAJCWxpc3RfYWRkX3RhaWwoJnNjc2lfYnVmLT5saXN0LCAmcGhiYS0+bHBmY19zY3NpX2J1Zl9saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+c2NzaV9idWZfbGlzdF9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTE1NCw2ICsxMjY3LDEyIEBACiAJICovCiAJcnBvcnQtPmRldl9sb3NzX3RtbyA9IHBoYmEtPmNmZ19ub2Rldl90bW8gKyA1OwogCisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRU5BQkxFX0ZDUF9SSU5HX1BPTExJTkcpIHsKKwkJbHBmY19zbGlfcG9sbF9mY3BfcmluZyhwaGJhKTsKKwkJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpCisJCQlscGZjX3BvbGxfcmVhcm1fdGltZXIocGhiYSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IGUyYzA4YzUuLjdiNzg1YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtODg2LDYgKzg4NiwxODIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGxwZmNfc2xpX3JzcF9wb2ludGVyc19lcnJvcihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAorCQkJCQlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqIHByaW5nKQoreworCXN0cnVjdCBscGZjX3BncCAqcGdwID0gJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMyLnBvcnRbcHJpbmctPnJpbmdub107CisJLyoKKwkgKiBSaW5nIDxyaW5nbm8+IGhhbmRsZXI6IHBvcnRSc3BQdXQgPHBvcnRSc3BQdXQ+IGlzIGJpZ2dlciB0aGVuCisJICogcnNwIHJpbmcgPHBvcnRSc3BNYXg+CisJICovCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJIiVkOjAzMTIgUmluZyAlZCBoYW5kbGVyOiBwb3J0UnNwUHV0ICVkICIKKwkJCSJpcyBiaWdnZXIgdGhlbiByc3AgcmluZyAlZFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgcHJpbmctPnJpbmdubywKKwkJCWxlMzJfdG9fY3B1KHBncC0+cnNwUHV0SW54KSwKKwkJCXByaW5nLT5udW1SaW9jYik7CisKKwlwaGJhLT5oYmFfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKKworCS8qCisJICogQWxsIGVycm9yIGF0dGVudGlvbiBoYW5kbGVycyBhcmUgcG9zdGVkIHRvCisJICogd29ya2VyIHRocmVhZAorCSAqLworCXBoYmEtPndvcmtfaGEgfD0gSEFfRVJBVFQ7CisJcGhiYS0+d29ya19ocyA9IEhTX0ZGRVIzOworCWlmIChwaGJhLT53b3JrX3dhaXQpCisJCXdha2VfdXAocGhiYS0+d29ya193YWl0KTsKKworCXJldHVybjsKK30KKwordm9pZCBscGZjX3NsaV9wb2xsX2ZjcF9yaW5nKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCit7CisJc3RydWN0IGxwZmNfc2xpICAgICAgKiBwc2xpICAgPSAmcGhiYS0+c2xpOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICogcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0ZDUF9SSU5HXTsKKwlJT0NCX3QgKmlyc3AgPSBOVUxMOworCUlPQ0JfdCAqZW50cnkgPSBOVUxMOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSA9IE5VTEw7CisJc3RydWN0IGxwZmNfaW9jYnEgcnNwaW9jYnE7CisJc3RydWN0IGxwZmNfcGdwICpwZ3A7CisJdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHBvcnRSc3BQdXQsIHBvcnRSc3BNYXg7CisJaW50IHR5cGU7CisJdWludDMyX3QgcnNwX2NtcGwgPSAwOworCXZvaWQgX19pb21lbSAqdG9fc2xpbTsKKwl1aW50MzJfdCBoYV9jb3B5OworCisJcHJpbmctPnN0YXRzLmlvY2JfZXZlbnQrKzsKKworCS8qIFRoZSBkcml2ZXIgYXNzdW1lcyBTTEktMiBtb2RlICovCisJcGdwID0gICZwaGJhLT5zbGltMnAtPm1ieC51cy5zMi5wb3J0W3ByaW5nLT5yaW5nbm9dOworCisJLyoKKwkgKiBUaGUgbmV4dCBhdmFpbGFibGUgcmVzcG9uc2UgZW50cnkgc2hvdWxkIG5ldmVyIGV4Y2VlZCB0aGUgbWF4aW11bQorCSAqIGVudHJpZXMuICBJZiBpdCBkb2VzLCB0cmVhdCBpdCBhcyBhbiBhZGFwdGVyIGhhcmR3YXJlIGVycm9yLgorCSAqLworCXBvcnRSc3BNYXggPSBwcmluZy0+bnVtUmlvY2I7CisJcG9ydFJzcFB1dCA9IGxlMzJfdG9fY3B1KHBncC0+cnNwUHV0SW54KTsKKwlpZiAodW5saWtlbHkocG9ydFJzcFB1dCA+PSBwb3J0UnNwTWF4KSkgeworCQlscGZjX3NsaV9yc3BfcG9pbnRlcnNfZXJyb3IocGhiYSwgcHJpbmcpOworCQlyZXR1cm47CisJfQorCisJcm1iKCk7CisJd2hpbGUgKHByaW5nLT5yc3BpZHggIT0gcG9ydFJzcFB1dCkgeworCisJCWVudHJ5ID0gSU9DQl9FTlRSWShwcmluZy0+cnNwcmluZ2FkZHIsIHByaW5nLT5yc3BpZHgpOworCisJCWlmICgrK3ByaW5nLT5yc3BpZHggPj0gcG9ydFJzcE1heCkKKwkJCXByaW5nLT5yc3BpZHggPSAwOworCisJCWxwZmNfc2xpX3BjaW1lbV9iY29weSgodWludDMyX3QgKikgZW50cnksCisJCQkJICAgICAgKHVpbnQzMl90ICopICZyc3Bpb2NicS5pb2NiLAorCQkJCSAgICAgIHNpemVvZiAoSU9DQl90KSk7CisJCWlyc3AgPSAmcnNwaW9jYnEuaW9jYjsKKwkJdHlwZSA9IGxwZmNfc2xpX2lvY2JfY21kX3R5cGUoaXJzcC0+dWxwQ29tbWFuZCAmIENNRF9JT0NCX01BU0spOworCQlwcmluZy0+c3RhdHMuaW9jYl9yc3ArKzsKKwkJcnNwX2NtcGwrKzsKKworCQlpZiAodW5saWtlbHkoaXJzcC0+dWxwU3RhdHVzKSkgeworCQkJLyogUnNwIHJpbmcgPHJpbmdubz4gZXJyb3I6IElPQ0IgKi8KKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19TTEksCisJCQkJCSIlZDowMzI2IFJzcCBSaW5nICVkIGVycm9yOiBJT0NCIERhdGE6ICIKKwkJCQkJIngleCB4JXggeCV4IHgleCB4JXggeCV4IHgleCB4JXhcbiIsCisJCQkJCXBoYmEtPmJyZF9ubywgcHJpbmctPnJpbmdubywKKwkJCQkJaXJzcC0+dW4udWxwV29yZFswXSwKKwkJCQkJaXJzcC0+dW4udWxwV29yZFsxXSwKKwkJCQkJaXJzcC0+dW4udWxwV29yZFsyXSwKKwkJCQkJaXJzcC0+dW4udWxwV29yZFszXSwKKwkJCQkJaXJzcC0+dW4udWxwV29yZFs0XSwKKwkJCQkJaXJzcC0+dW4udWxwV29yZFs1XSwKKwkJCQkJKigoKHVpbnQzMl90ICopIGlyc3ApICsgNiksCisJCQkJCSooKCh1aW50MzJfdCAqKSBpcnNwKSArIDcpKTsKKwkJfQorCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIExQRkNfQUJPUlRfSU9DQjoKKwkJY2FzZSBMUEZDX1NPTF9JT0NCOgorCQkJLyoKKwkJCSAqIElkbGUgZXhjaGFuZ2UgY2xvc2VkIHZpYSBBQlRTIGZyb20gcG9ydC4gIE5vIGlvY2IKKwkJCSAqIHJlc291cmNlcyBuZWVkIHRvIGJlIHJlY292ZXJlZC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KGlyc3AtPnVscENvbW1hbmQgPT0gQ01EX1hSSV9BQk9SVEVEX0NYKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJT0NCIGNtZCAweCV4IHByb2Nlc3NlZC4iCisJCQkJICAgICAgICIgU2tpcHBpbmcgY29tcGxldGlvblxuIiwgX19GVU5DVElPTl9fLAorCQkJCSAgICAgICBpcnNwLT51bHBDb21tYW5kKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY21kaW9jYnEgPSBscGZjX3NsaV9pb2NicV9sb29rdXAocGhiYSwgcHJpbmcsCisJCQkJCQkJICZyc3Bpb2NicSk7CisJCQlpZiAoKGNtZGlvY2JxKSAmJiAoY21kaW9jYnEtPmlvY2JfY21wbCkpIHsKKwkJCQkoY21kaW9jYnEtPmlvY2JfY21wbCkocGhiYSwgY21kaW9jYnEsCisJCQkJCQkgICAgICAmcnNwaW9jYnEpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoaXJzcC0+dWxwQ29tbWFuZCA9PSBDTURfQURBUFRFUl9NU0cpIHsKKwkJCQljaGFyIGFkYXB0ZXJtc2dbTFBGQ19NQVhfQURQVE1TR107CisJCQkJbWVtc2V0KGFkYXB0ZXJtc2csIDAsIExQRkNfTUFYX0FEUFRNU0cpOworCQkJCW1lbWNweSgmYWRhcHRlcm1zZ1swXSwgKHVpbnQ4X3QgKikgaXJzcCwKKwkJCQkgICAgICAgTUFYX01TR19EQVRBKTsKKwkJCQlkZXZfd2FybigmKChwaGJhLT5wY2lkZXYpLT5kZXYpLCAibHBmYyVkOiAlcyIsCisJCQkJCSBwaGJhLT5icmRfbm8sIGFkYXB0ZXJtc2cpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBVbmtub3duIElPQ0IgY29tbWFuZCAqLworCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKKwkJCQkJCSIlZDowMzIxIFVua25vd24gSU9DQiBjb21tYW5kICIKKwkJCQkJCSJEYXRhOiB4JXgsIHgleCB4JXggeCV4IHgleFxuIiwKKwkJCQkJCXBoYmEtPmJyZF9ubywgdHlwZSwKKwkJCQkJCWlyc3AtPnVscENvbW1hbmQsCisJCQkJCQlpcnNwLT51bHBTdGF0dXMsCisJCQkJCQlpcnNwLT51bHBJb1RhZywKKwkJCQkJCWlyc3AtPnVscENvbnRleHQpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBUaGUgcmVzcG9uc2UgSU9DQiBoYXMgYmVlbiBwcm9jZXNzZWQuICBVcGRhdGUgdGhlIHJpbmcKKwkJICogcG9pbnRlciBpbiBTTElNLiAgSWYgdGhlIHBvcnQgcmVzcG9uc2UgcHV0IHBvaW50ZXIgaGFzIG5vdAorCQkgKiBiZWVuIHVwZGF0ZWQsIHN5bmMgdGhlIHBncC0+cnNwUHV0SW54IGFuZCBmZXRjaCB0aGUgbmV3IHBvcnQKKwkJICogcmVzcG9uc2UgcHV0IHBvaW50ZXIuCisJCSAqLworCQl0b19zbGltID0gcGhiYS0+TUJzbGltYWRkciArCisJCQkoU0xJTU9GRiArIChwcmluZy0+cmluZ25vICogMikgKyAxKSAqIDQ7CisJCXdyaXRlYihwcmluZy0+cnNwaWR4LCB0b19zbGltKTsKKworCQlpZiAocHJpbmctPnJzcGlkeCA9PSBwb3J0UnNwUHV0KQorCQkJcG9ydFJzcFB1dCA9IGxlMzJfdG9fY3B1KHBncC0+cnNwUHV0SW54KTsKKwl9CisKKwloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKKwloYV9jb3B5ID4+PSAoTFBGQ19GQ1BfUklORyAqIDQpOworCisJaWYgKChyc3BfY21wbCA+IDApICYmIChoYV9jb3B5ICYgSEFfUjBSRV9SRVEpKSB7CisJCXByaW5nLT5zdGF0cy5pb2NiX3JzcF9mdWxsKys7CisJCXN0YXR1cyA9ICgoQ0FfUjBBVFQgfCBDQV9SMFJFX1JTUCkgPDwgKExQRkNfRkNQX1JJTkcgKiA0KSk7CisJCXdyaXRlbChzdGF0dXMsIHBoYmEtPkNBcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkNBcmVnYWRkcik7CisJfQorCWlmICgoaGFfY29weSAmIEhBX1IwQ0VfUlNQKSAmJgorCSAgICAocHJpbmctPmZsYWcgJiBMUEZDX0NBTExfUklOR19BVkFJTEFCTEUpKSB7CisJCXByaW5nLT5mbGFnICY9IH5MUEZDX0NBTExfUklOR19BVkFJTEFCTEU7CisJCXByaW5nLT5zdGF0cy5pb2NiX2NtZF9lbXB0eSsrOworCisJCS8qIEZvcmNlIHVwZGF0ZSBvZiB0aGUgbG9jYWwgY29weSBvZiBjbWRHZXRJbnggKi8KKwkJcHJpbmctPmxvY2FsX2dldGlkeCA9IGxlMzJfdG9fY3B1KHBncC0+Y21kR2V0SW54KTsKKwkJbHBmY19zbGlfcmVzdW1lX2lvY2IocGhiYSwgcHJpbmcpOworCisJCWlmICgocHJpbmctPmxwZmNfc2xpX2NtZF9hdmFpbGFibGUpKQorCQkJKHByaW5nLT5scGZjX3NsaV9jbWRfYXZhaWxhYmxlKSAocGhiYSwgcHJpbmcpOworCisJfQorCisJcmV0dXJuOworfQorCiAvKgogICogVGhpcyByb3V0aW5lIHByZXN1bWVzIExQRkNfRkNQX1JJTkcgaGFuZGxpbmcgYW5kIGRvZXNuJ3QgYm90aGVyCiAgKiB0byBjaGVjayBpdCBleHBsaWNpdGx5LgpAQCAtOTE3LDI0ICsxMDkzLDcgQEAKIAlwb3J0UnNwTWF4ID0gcHJpbmctPm51bVJpb2NiOwogCXBvcnRSc3BQdXQgPSBsZTMyX3RvX2NwdShwZ3AtPnJzcFB1dElueCk7CiAJaWYgKHVubGlrZWx5KHBvcnRSc3BQdXQgPj0gcG9ydFJzcE1heCkpIHsKLQkJLyoKLQkJICogUmluZyA8cmluZ25vPiBoYW5kbGVyOiBwb3J0UnNwUHV0IDxwb3J0UnNwUHV0PiBpcyBiaWdnZXIgdGhlbgotCQkgKiByc3AgcmluZyA8cG9ydFJzcE1heD4KLQkJICovCi0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKLQkJCQkiJWQ6MDMxMiBSaW5nICVkIGhhbmRsZXI6IHBvcnRSc3BQdXQgJWQgIgotCQkJCSJpcyBiaWdnZXIgdGhlbiByc3AgcmluZyAlZFxuIiwKLQkJCQlwaGJhLT5icmRfbm8sIHByaW5nLT5yaW5nbm8sIHBvcnRSc3BQdXQsCi0JCQkJcG9ydFJzcE1heCk7Ci0KLQkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7Ci0KLQkJLyogQWxsIGVycm9yIGF0dGVudGlvbiBoYW5kbGVycyBhcmUgcG9zdGVkIHRvIHdvcmtlciB0aHJlYWQgKi8KLQkJcGhiYS0+d29ya19oYSB8PSBIQV9FUkFUVDsKLQkJcGhiYS0+d29ya19ocyA9IEhTX0ZGRVIzOwotCQlpZiAocGhiYS0+d29ya193YWl0KQotCQkJd2FrZV91cChwaGJhLT53b3JrX3dhaXQpOwotCisJCWxwZmNfc2xpX3JzcF9wb2ludGVyc19lcnJvcihwaGJhLCBwcmluZyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBpZmxhZyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTk0Nyw2ICsxMTA2LDEwIEBACiAJCSAqIG5ldHdvcmsgYnl0ZSBvcmRlciBhbmQgcGNpIGJ5dGUgb3JkZXJzIGFyZSBkaWZmZXJlbnQuCiAJCSAqLwogCQllbnRyeSA9IElPQ0JfRU5UUlkocHJpbmctPnJzcHJpbmdhZGRyLCBwcmluZy0+cnNwaWR4KTsKKworCQlpZiAoKytwcmluZy0+cnNwaWR4ID49IHBvcnRSc3BNYXgpCisJCQlwcmluZy0+cnNwaWR4ID0gMDsKKwogCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoKHVpbnQzMl90ICopIGVudHJ5LAogCQkJCSAgICAgICh1aW50MzJfdCAqKSAmcnNwaW9jYnEuaW9jYiwKIAkJCQkgICAgICBzaXplb2YgKElPQ0JfdCkpOwpAQCAtMTAyMCw5ICsxMTgzLDYgQEAKIAkJICogYmVlbiB1cGRhdGVkLCBzeW5jIHRoZSBwZ3AtPnJzcFB1dElueCBhbmQgZmV0Y2ggdGhlIG5ldyBwb3J0CiAJCSAqIHJlc3BvbnNlIHB1dCBwb2ludGVyLgogCQkgKi8KLQkJaWYgKCsrcHJpbmctPnJzcGlkeCA+PSBwb3J0UnNwTWF4KQotCQkJcHJpbmctPnJzcGlkeCA9IDA7Ci0KIAkJdG9fc2xpbSA9IHBoYmEtPk1Cc2xpbWFkZHIgKwogCQkJKFNMSU1PRkYgKyAocHJpbmctPnJpbmdubyAqIDIpICsgMSkgKiA0OwogCQl3cml0ZWwocHJpbmctPnJzcGlkeCwgdG9fc2xpbSk7CkBAIC0yNjE1LDYgKzI3NzUsNyBAQAogCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGRvbmVfcSk7CiAJbG9uZyB0aW1lbGVmdCwgdGltZW91dF9yZXEgPSAwOwogCWludCByZXR2YWwgPSBJT0NCX1NVQ0NFU1M7CisJdWludDMyX3QgY3JlZ192YWw7CiAKIAkvKgogCSAqIElmIHRoZSBjYWxsZXIgaGFzIHByb3ZpZGVkIGEgcmVzcG9uc2UgaW9jYnEgYnVmZmVyLCB0aGVuIGNvbnRleHQyCkBAIC0yNjMwLDYgKzI3OTEsMTMgQEAKIAlwaW9jYi0+Y29udGV4dF91bi53YWl0X3F1ZXVlID0gJmRvbmVfcTsKIAlwaW9jYi0+aW9jYl9mbGFnICY9IH5MUEZDX0lPX1dBS0U7CiAKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CisJCWNyZWdfdmFsIHw9IChIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisJCXdyaXRlbChjcmVnX3ZhbCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwl9CisKIAlyZXR2YWwgPSBscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIHByaW5nLCBwaW9jYiwgMCk7CiAJaWYgKHJldHZhbCA9PSBJT0NCX1NVQ0NFU1MpIHsKIAkJdGltZW91dF9yZXEgPSB0aW1lb3V0ICogSFo7CkBAIC0yNjYzLDYgKzI4MzEsMTMgQEAKIAkJcmV0dmFsID0gSU9DQl9FUlJPUjsKIAl9CiAKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CisJCWNyZWdfdmFsICY9IH4oSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQl3cml0ZWwoY3JlZ192YWwsIHBoYmEtPkhDcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCisJfQorCiAJaWYgKHByc3Bpb2NicSkKIAkJcGlvY2ItPmNvbnRleHQyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCA0ZjA0NjZmLi5mYTY4MWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMTgsNyArMTgsNyBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMS4wIgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjEuMSIKIAogI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FICJscGZjIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCmluZGV4IDU3ODE0M2UuLjRhNmZlYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqCQkJTGludXggTWVnYVJBSUQgZGV2aWNlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCCpIDIwMDIgIExTSSBMb2dpYyBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoYykgMjAwMiAgTFNJIExvZ2ljIENvcnBvcmF0aW9uLgogICoKICAqCSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCSAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNyw3ICsxNyw4IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMgIENocmlzdG9waCBIZWxsd2lnICA8aGNoQGxzdC5kZT4KICAqCSAgLSBuZXctc3R5bGUsIGhvdHBsdWctYXdhcmUgcGNpIHByb2JpbmcgYW5kIHNjc2kgcmVnaXN0cmF0aW9uCiAgKgotICogVmVyc2lvbiA6IHYyLjAwLjMgKEZlYiAxOSwgMjAwMykgLSBBdHVsIE11a2tlciA8QXR1bC5NdWtrZXJAbHNpbC5jb20+CisgKiBWZXJzaW9uIDogdjIuMDAuNCBNb24gTm92IDE0IDE0OjAyOjQzIEVTVCAyMDA1IC0gU2Vva21hbm4gSnUKKyAqIAkJCQkJCTxTZW9rbWFubi5KdUBsc2lsLmNvbT4KICAqCiAgKiBEZXNjcmlwdGlvbjogTGludXggZGV2aWNlIGRyaXZlciBmb3IgTFNJIExvZ2ljIE1lZ2FSQUlEIGNvbnRyb2xsZXIKICAqCkBAIC01MSwxMCArNTIsMTAgQEAKIAogI2luY2x1ZGUgIm1lZ2FyYWlkLmgiCiAKLSNkZWZpbmUgTUVHQVJBSURfTU9EVUxFX1ZFUlNJT04gIjIuMDAuMyIKKyNkZWZpbmUgTUVHQVJBSURfTU9EVUxFX1ZFUlNJT04gIjIuMDAuNCIKIAotTU9EVUxFX0FVVEhPUiAoIkxTSSBMb2dpYyBDb3Jwb3JhdGlvbiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiTFNJIExvZ2ljIE1lZ2FSQUlEIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUiAoInNqdUBsc2lsLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OICgiTFNJIExvZ2ljIE1lZ2FSQUlEIGxlZ2FjeSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihNRUdBUkFJRF9NT0RVTEVfVkVSU0lPTik7CiAKQEAgLTQ1NTMsNyArNDU1NCw3IEBACiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtZWdhcmFpZF90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQkJPSAiTWVnYVJBSUQiLAotCS5wcm9jX25hbWUJCQk9ICJtZWdhcmFpZCIsCisJLnByb2NfbmFtZQkJCT0gIm1lZ2FyYWlkX2xlZ2FjeSIsCiAJLmluZm8JCQkJPSBtZWdhcmFpZF9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCQk9IG1lZ2FyYWlkX3F1ZXVlLAkKIAkuYmlvc19wYXJhbQkJCT0gbWVnYXJhaWRfYmlvc3BhcmFtLApAQCAtNTAzNywyMiArNTAzOCwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWVnYXJhaWRfcGNpX3RibFtdID0gewotCXtQQ0lfVkVORE9SX0lEX0RFTEwsIFBDSV9ERVZJQ0VfSURfRElTQ09WRVJZLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9ERUxMLCBQQ0lfREVWSUNFX0lEX1BFUkM0X0RJLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCT0FSRF82NEJJVH0sCi0Je1BDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX1BFUkM0X1FDX1ZFUkRFLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCT0FSRF82NEJJVH0sCiAJe1BDSV9WRU5ET1JfSURfQU1JLCBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfQU1JLCBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDIsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotCXtQQ0lfVkVORE9SX0lEX0FNSSwgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlEMywKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJezAsfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtZWdhcmFpZF9wY2lfdGJsKTsKQEAgLTUwOTUsNyArNTA4Niw3IEBACiAJICogRmlyc3QgYXJndW1lbnQgKG1ham9yKSB0byByZWdpc3Rlcl9jaHJkZXYgaW1wbGllcyBhIGR5bmFtaWMKIAkgKiBtYWpvciBudW1iZXIgYWxsb2NhdGlvbi4KIAkgKi8KLQltYWpvciA9IHJlZ2lzdGVyX2NocmRldigwLCAibWVnYWRldiIsICZtZWdhZGV2X2ZvcHMpOworCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJtZWdhZGV2X2xlZ2FjeSIsICZtZWdhZGV2X2ZvcHMpOwogCWlmICghbWFqb3IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSJtZWdhcmFpZDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNoYXIgZGV2aWNlXG4iKTsKQEAgLTUxMDksNyArNTEwMCw3IEBACiAJLyoKIAkgKiBVbnJlZ2lzdGVyIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSB0byB0aGUgZHJpdmVyLgogCSAqLwotCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCAibWVnYWRldiIpOworCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCAibWVnYWRldl9sZWdhY3kiKTsKIAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVnYXJhaWRfcGNpX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9LY29uZmlnLm1lZ2FyYWlkIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL0tjb25maWcubWVnYXJhaWQKaW5kZXggNzM2M2UxMi4uMTc0MTllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL0tjb25maWcubWVnYXJhaWQKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL0tjb25maWcubWVnYXJhaWQKQEAgLTY0LDcgKzY0LDYgQEAKIAlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAltb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVnYXJhaWRfbWJveAogCi1pZiBNRUdBUkFJRF9ORVdHRU49bgogY29uZmlnIE1FR0FSQUlEX0xFR0FDWQogCXRyaXN0YXRlICJMU0kgTG9naWMgTGVnYWN5IE1lZ2FSQUlEIERyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCkBAIC03NSw3ICs3NCw2IEBACiAKIAlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAltb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVnYXJhaWQKLWVuZGlmCiAKIGNvbmZpZyBNRUdBUkFJRF9TQVMKIAl0cmlzdGF0ZSAiTFNJIExvZ2ljIE1lZ2FSQUlEIFNBUyBSQUlEIE1vZHVsZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDRiNWQ0MjAuLmQxOGE0YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMTAsMTIgKzEwLDEzIEBACiAgKgkgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJTEUJCTogbWVnYXJhaWRfbWJveC5jCi0gKiBWZXJzaW9uCTogdjIuMjAuNC42IChNYXIgMDcgMjAwNSkKKyAqIFZlcnNpb24JOiB2Mi4yMC40LjcgKE5vdiAxNCAyMDA1KQogICoKICAqIEF1dGhvcnM6CiAgKiAJQXR1bCBNdWtrZXIJCTxBdHVsLk11a2tlckBsc2lsLmNvbT4KICAqIAlTcmVlbml2YXMgQmFnYWxrb3RlCTxTcmVlbml2YXMuQmFnYWxrb3RlQGxzaWwuY29tPgogICogCU1hbm9qIEpvc2UJCTxNYW5vai5Kb3NlQGxzaWwuY29tPgorICogCVNlb2ttYW5uIEp1CQk8U2Vva21hbm4uSnVAbHNpbC5jb20+CiAgKgogICogTGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbGxlcnMKICAqCkBAIC0xMzYsNyArMTM3LDcgQEAKIAogCiAKLU1PRFVMRV9BVVRIT1IoIkxTSSBMb2dpYyBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0FVVEhPUigic2p1QGxzaWwuY29tIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkxTSSBMb2dpYyBNZWdhUkFJRCBNYWlsYm94IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oTUVHQVJBSURfVkVSU0lPTik7CkBAIC0yNzgsNjggKzI3OSwxNCBAQAogCXsKIAkJUENJX1ZFTkRPUl9JRF9BTUksCiAJCVBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlEMywKLQkJUENJX1ZFTkRPUl9JRF9ERUxMLAotCQlQQ0lfU1VCU1lTX0lEX1BFUkMzX1FDLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAogCX0sCiAJewotCQlQQ0lfVkVORE9SX0lEX0FNSSwKKwkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCiAJCVBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlEMywKLQkJUENJX1ZFTkRPUl9JRF9ERUxMLAotCQlQQ0lfU1VCU1lTX0lEX1BFUkMzX0RDLAotCX0sCi0JewotCQlQQ0lfVkVORE9SX0lEX0FNSSwKLQkJUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAotCQlQQ0lfVkVORE9SX0lEX0RFTEwsCi0JCVBDSV9TVUJTWVNfSURfUEVSQzNfU0MsCi0JfSwKLQl7Ci0JCVBDSV9WRU5ET1JfSURfQU1JLAotCQlQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDMsCi0JCVBDSV9WRU5ET1JfSURfQU1JLAotCQlQQ0lfU1VCU1lTX0lEX1BFUkMzX1NDLAotCX0sCi0JewotCQlQQ0lfVkVORE9SX0lEX0FNSSwKLQkJUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAotCQlQQ0lfVkVORE9SX0lEX0FNSSwKLQkJUENJX1NVQlNZU19JRF9QRVJDM19EQywKLQl9LAotCXsKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9ERVZJQ0VfSURfTUVHQVJBSURfU0NTSV8zMjBfMCwKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9TVUJTWVNfSURfTUVHQVJBSURfU0NTSV8zMjBfMCwKLQl9LAotCXsKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9ERVZJQ0VfSURfTUVHQVJBSURfU0NTSV8zMjBfMSwKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9TVUJTWVNfSURfTUVHQVJBSURfU0NTSV8zMjBfMSwKLQl9LAotCXsKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9ERVZJQ0VfSURfTUVHQVJBSURfU0NTSV8zMjBfMiwKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9TVUJTWVNfSURfTUVHQVJBSURfU0NTSV8zMjBfMiwKLQl9LAotCXsKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9ERVZJQ0VfSURfTUVHQVJBSURfSTRfMTMzX1JBSUQsCi0JCVBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLAotCQlQQ0lfU1VCU1lTX0lEX01FR0FSQUlEX0k0XzEzM19SQUlELAotCX0sCi0JewotCQlQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywKLQkJUENJX0RFVklDRV9JRF9NRUdBUkFJRF9TQVRBXzE1MF80LAotCQlQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywKLQkJUENJX1NVQlNZU19JRF9NRUdBUkFJRF9TQVRBXzE1MF80LAotCX0sCi0JewotCQlQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywKLQkJUENJX0RFVklDRV9JRF9NRUdBUkFJRF9TQVRBXzE1MF82LAotCQlQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywKLQkJUENJX1NVQlNZU19JRF9NRUdBUkFJRF9TQVRBXzE1MF82LAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAogCX0sCiAJewogCQlQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywKQEAgLTM0NywxOCArMjk0LDYgQEAKIAkJUENJX0FOWV9JRCwKIAkJUENJX0FOWV9JRCwKIAl9LAotCXsKLQkJUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JCVBDSV9ERVZJQ0VfSURfSU5URUxfUkFJRF9TUkNTMTYsCi0JCVBDSV9WRU5ET1JfSURfSU5URUwsCi0JCVBDSV9TVUJTWVNfSURfSU5URUxfUkFJRF9TUkNTMTYsCi0JfSwKLQl7Ci0JCVBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLAotCQlQQ0lfREVWSUNFX0lEX0lOVEVMX1JBSURfU1JDVTQxTF9MQUtFX1NIRVRFSywKLQkJUENJX1ZFTkRPUl9JRF9JTlRFTCwKLQkJUENJX1NVQlNZU19JRF9JTlRFTF9SQUlEX1NSQ1U0MUxfTEFLRV9TSEVURUssCi0JfSwKIAl7MH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX2lkX3RhYmxlX2cpOwpAQCAtMjk4NSw2ICsyOTIwLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAweEZGRkZGOyBpKyspIHsKIAkJaWYgKG1ib3gtPm51bXN0YXR1cyAhPSAweEZGKSBicmVhazsKKwkJcm1iKCk7CiAJfQogCiAJaWYgKGkgPT0gMHhGRkZGRikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmgKaW5kZXggNjQ0YjkxYi4uODgyZmIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5oCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAibWVnYXJhaWRfaW9jdGwuaCIKIAogCi0jZGVmaW5lIE1FR0FSQUlEX1ZFUlNJT04JIjIuMjAuNC42IgotI2RlZmluZSBNRUdBUkFJRF9FWFRfVkVSU0lPTgkiKFJlbGVhc2UgRGF0ZTogTW9uIE1hciAwNyAxMjoyNzoyMiBFU1QgMjAwNSkiCisjZGVmaW5lIE1FR0FSQUlEX1ZFUlNJT04JIjIuMjAuNC43IgorI2RlZmluZSBNRUdBUkFJRF9FWFRfVkVSU0lPTgkiKFJlbGVhc2UgRGF0ZTogTW9uIE5vdiAxNCAxMjoyNzoyMiBFU1QgMjAwNSkiCiAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYwppbmRleCAyNDM0NzA5Li4zMjM1MDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCkBAIC0xMzEsNyArMTMxLDczOSBAQAogI2RlZmluZSBOQU1FNTNDCQkJIm5jcjUzYyIKICNkZWZpbmUgTkFNRTUzQzhYWAkJIm5jcjUzYzh4eCIKIAotI2luY2x1ZGUgInN5bTUzYzh4eF9jb21tLmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKioKKyoqCURlYnVnZ2luZyB0YWdzCisqKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisjZGVmaW5lIERFQlVHX0FMTE9DICAgICgweDAwMDEpCisjZGVmaW5lIERFQlVHX1BIQVNFICAgICgweDAwMDIpCisjZGVmaW5lIERFQlVHX1FVRVVFICAgICgweDAwMDgpCisjZGVmaW5lIERFQlVHX1JFU1VMVCAgICgweDAwMTApCisjZGVmaW5lIERFQlVHX1BPSU5URVIgICgweDAwMjApCisjZGVmaW5lIERFQlVHX1NDUklQVCAgICgweDAwNDApCisjZGVmaW5lIERFQlVHX1RJTlkgICAgICgweDAwODApCisjZGVmaW5lIERFQlVHX1RJTUlORyAgICgweDAxMDApCisjZGVmaW5lIERFQlVHX05FR08gICAgICgweDAyMDApCisjZGVmaW5lIERFQlVHX1RBR1MgICAgICgweDA0MDApCisjZGVmaW5lIERFQlVHX1NDQVRURVIgICgweDA4MDApCisjZGVmaW5lIERFQlVHX0lDICAgICAgICAoMHgxMDAwKQorCisvKgorKiogICAgRW5hYmxlL0Rpc2FibGUgZGVidWcgbWVzc2FnZXMuCisqKiAgICBDYW4gYmUgY2hhbmdlZCBhdCBydW50aW1lIHRvby4KKyovCisKKyNpZmRlZiBTQ1NJX05DUl9ERUJVR19JTkZPX1NVUFBPUlQKK3N0YXRpYyBpbnQgbmNyX2RlYnVnID0gU0NTSV9OQ1JfREVCVUdfRkxBR1M7CisJI2RlZmluZSBERUJVR19GTEFHUyBuY3JfZGVidWcKKyNlbHNlCisJI2RlZmluZSBERUJVR19GTEFHUwlTQ1NJX05DUl9ERUJVR19GTEFHUworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqbmNyX2xpc3RfcG9wKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW0gPSBoZWFkLT5uZXh0OworCisJCWxpc3RfZGVsKGVsZW0pOworCQlyZXR1cm4gZWxlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqKgorKioJU2ltcGxlIHBvd2VyIG9mIHR3byBidWRkeS1saWtlIGFsbG9jYXRvci4KKyoqCisqKglUaGlzIHNpbXBsZSBjb2RlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBmYXN0LCBidXQgdG8gCisqKglwcm92aWRlIHBvd2VyIG9mIDIgYWxpZ25lZCBtZW1vcnkgYWxsb2NhdGlvbnMuCisqKglTaW5jZSB0aGUgU0NSSVBUUyBwcm9jZXNzb3Igb25seSBzdXBwbGllcyA4IGJpdCAKKyoqCWFyaXRobWV0aWMsIHRoaXMgYWxsb2NhdG9yIGFsbG93cyBzaW1wbGUgYW5kIGZhc3QgCisqKglhZGRyZXNzIGNhbGN1bGF0aW9ucyAgZnJvbSB0aGUgU0NSSVBUUyBjb2RlLgorKioJSW4gYWRkaXRpb24sIGNhY2hlIGxpbmUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgZm9yIAorKioJcG93ZXIgb2YgMiBjYWNoZSBsaW5lIHNpemUuCisqKglFbmhhbmNlZCBpbiBsaW51eC0yLjMuNDQgdG8gcHJvdmlkZSBhIG1lbW9yeSBwb29sIAorKioJcGVyIHBjaWRldiB0byBzdXBwb3J0IGR5bmFtaWMgZG1hIG1hcHBpbmcuIChJIHdvdWxkIAorKioJaGF2ZSBwcmVmZXJyZWQgYSByZWFsIGJ1cyBhc3RyYWN0aW9uLCBidHcpLgorKioKKyoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworI2RlZmluZSBNRU1PX1NISUZUCTQJLyogMTYgYnl0ZXMgbWluaW11bSBtZW1vcnkgY2h1bmsgKi8KKyNpZiBQQUdFX1NJWkUgPj0gODE5MgorI2RlZmluZSBNRU1PX1BBR0VfT1JERVIJMAkvKiAxIFBBR0UgIG1heGltdW0gKi8KKyNlbHNlCisjZGVmaW5lIE1FTU9fUEFHRV9PUkRFUgkxCS8qIDIgUEFHRVMgbWF4aW11bSAqLworI2VuZGlmCisjZGVmaW5lIE1FTU9fRlJFRV9VTlVTRUQJLyogRnJlZSB1bnVzZWQgcGFnZXMgaW1tZWRpYXRlbHkgKi8KKyNkZWZpbmUgTUVNT19XQVJOCTEKKyNkZWZpbmUgTUVNT19HRlBfRkxBR1MJR0ZQX0FUT01JQworI2RlZmluZSBNRU1PX0NMVVNURVJfU0hJRlQJKFBBR0VfU0hJRlQrTUVNT19QQUdFX09SREVSKQorI2RlZmluZSBNRU1PX0NMVVNURVJfU0laRQkoMVVMIDw8IE1FTU9fQ0xVU1RFUl9TSElGVCkKKyNkZWZpbmUgTUVNT19DTFVTVEVSX01BU0sJKE1FTU9fQ0xVU1RFUl9TSVpFLTEpCisKK3R5cGVkZWYgdV9sb25nIG1fYWRkcl90OwkvKiBFbm91Z2ggYml0cyB0byBiaXQtaGFjayBhZGRyZXNzZXMgKi8KK3R5cGVkZWYgc3RydWN0IGRldmljZSAqbV9idXNoX3Q7CS8qIFNvbWV0aGluZyB0aGF0IGFkZHJlc3NlcyBETUFhYmxlICovCisKK3R5cGVkZWYgc3RydWN0IG1fbGluayB7CQkvKiBMaW5rIGJldHdlZW4gZnJlZSBtZW1vcnkgY2h1bmtzICovCisJc3RydWN0IG1fbGluayAqbmV4dDsKK30gbV9saW5rX3M7CisKK3R5cGVkZWYgc3RydWN0IG1fdnRvYiB7CQkvKiBWaXJ0dWFsIHRvIEJ1cyBhZGRyZXNzIHRyYW5zbGF0aW9uICovCisJc3RydWN0IG1fdnRvYiAqbmV4dDsKKwltX2FkZHJfdCB2YWRkcjsKKwltX2FkZHJfdCBiYWRkcjsKK30gbV92dG9iX3M7CisjZGVmaW5lIFZUT0JfSEFTSF9TSElGVAkJNQorI2RlZmluZSBWVE9CX0hBU0hfU0laRQkJKDFVTCA8PCBWVE9CX0hBU0hfU0hJRlQpCisjZGVmaW5lIFZUT0JfSEFTSF9NQVNLCQkoVlRPQl9IQVNIX1NJWkUtMSkKKyNkZWZpbmUgVlRPQl9IQVNIX0NPREUobSkJXAorCSgoKChtX2FkZHJfdCkgKG0pKSA+PiBNRU1PX0NMVVNURVJfU0hJRlQpICYgVlRPQl9IQVNIX01BU0spCisKK3R5cGVkZWYgc3RydWN0IG1fcG9vbCB7CQkvKiBNZW1vcnkgcG9vbCBvZiBhIGdpdmVuIGtpbmQgKi8KKwltX2J1c2hfdCBidXNoOworCW1fYWRkcl90ICgqZ2V0cCkoc3RydWN0IG1fcG9vbCAqKTsKKwl2b2lkICgqZnJlZXApKHN0cnVjdCBtX3Bvb2wgKiwgbV9hZGRyX3QpOworCWludCBudW1wOworCW1fdnRvYl9zICoodnRvYltWVE9CX0hBU0hfU0laRV0pOworCXN0cnVjdCBtX3Bvb2wgKm5leHQ7CisJc3RydWN0IG1fbGluayBoW1BBR0VfU0hJRlQtTUVNT19TSElGVCtNRU1PX1BBR0VfT1JERVIrMV07Cit9IG1fcG9vbF9zOworCitzdGF0aWMgdm9pZCAqX19fbV9hbGxvYyhtX3Bvb2xfcyAqbXAsIGludCBzaXplKQoreworCWludCBpID0gMDsKKwlpbnQgcyA9ICgxIDw8IE1FTU9fU0hJRlQpOworCWludCBqOworCW1fYWRkcl90IGE7CisJbV9saW5rX3MgKmggPSBtcC0+aDsKKworCWlmIChzaXplID4gKFBBR0VfU0laRSA8PCBNRU1PX1BBR0VfT1JERVIpKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlIChzaXplID4gcykgeworCQlzIDw8PSAxOworCQkrK2k7CisJfQorCisJaiA9IGk7CisJd2hpbGUgKCFoW2pdLm5leHQpIHsKKwkJaWYgKHMgPT0gKFBBR0VfU0laRSA8PCBNRU1PX1BBR0VfT1JERVIpKSB7CisJCQloW2pdLm5leHQgPSAobV9saW5rX3MgKiltcC0+Z2V0cChtcCk7CisJCQlpZiAoaFtqXS5uZXh0KQorCQkJCWhbal0ubmV4dC0+bmV4dCA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQkrK2o7CisJCXMgPDw9IDE7CisJfQorCWEgPSAobV9hZGRyX3QpIGhbal0ubmV4dDsKKwlpZiAoYSkgeworCQloW2pdLm5leHQgPSBoW2pdLm5leHQtPm5leHQ7CisJCXdoaWxlIChqID4gaSkgeworCQkJaiAtPSAxOworCQkJcyA+Pj0gMTsKKwkJCWhbal0ubmV4dCA9IChtX2xpbmtfcyAqKSAoYStzKTsKKwkJCWhbal0ubmV4dC0+bmV4dCA9IE5VTEw7CisJCX0KKwl9CisjaWZkZWYgREVCVUcKKwlwcmludGsoIl9fX21fYWxsb2MoJWQpID0gJXBcbiIsIHNpemUsICh2b2lkICopIGEpOworI2VuZGlmCisJcmV0dXJuICh2b2lkICopIGE7Cit9CisKK3N0YXRpYyB2b2lkIF9fX21fZnJlZShtX3Bvb2xfcyAqbXAsIHZvaWQgKnB0ciwgaW50IHNpemUpCit7CisJaW50IGkgPSAwOworCWludCBzID0gKDEgPDwgTUVNT19TSElGVCk7CisJbV9saW5rX3MgKnE7CisJbV9hZGRyX3QgYSwgYjsKKwltX2xpbmtfcyAqaCA9IG1wLT5oOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoIl9fX21fZnJlZSglcCwgJWQpXG4iLCBwdHIsIHNpemUpOworI2VuZGlmCisKKwlpZiAoc2l6ZSA+IChQQUdFX1NJWkUgPDwgTUVNT19QQUdFX09SREVSKSkKKwkJcmV0dXJuOworCisJd2hpbGUgKHNpemUgPiBzKSB7CisJCXMgPDw9IDE7CisJCSsraTsKKwl9CisKKwlhID0gKG1fYWRkcl90KSBwdHI7CisKKwl3aGlsZSAoMSkgeworI2lmZGVmIE1FTU9fRlJFRV9VTlVTRUQKKwkJaWYgKHMgPT0gKFBBR0VfU0laRSA8PCBNRU1PX1BBR0VfT1JERVIpKSB7CisJCQltcC0+ZnJlZXAobXAsIGEpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQliID0gYSBeIHM7CisJCXEgPSAmaFtpXTsKKwkJd2hpbGUgKHEtPm5leHQgJiYgcS0+bmV4dCAhPSAobV9saW5rX3MgKikgYikgeworCQkJcSA9IHEtPm5leHQ7CisJCX0KKwkJaWYgKCFxLT5uZXh0KSB7CisJCQkoKG1fbGlua19zICopIGEpLT5uZXh0ID0gaFtpXS5uZXh0OworCQkJaFtpXS5uZXh0ID0gKG1fbGlua19zICopIGE7CisJCQlicmVhazsKKwkJfQorCQlxLT5uZXh0ID0gcS0+bmV4dC0+bmV4dDsKKwkJYSA9IGEgJiBiOworCQlzIDw8PSAxOworCQkrK2k7CisJfQorfQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5jcjUzYzh4eF9sb2NrKTsKKworc3RhdGljIHZvaWQgKl9fbV9jYWxsb2MyKG1fcG9vbF9zICptcCwgaW50IHNpemUsIGNoYXIgKm5hbWUsIGludCB1ZmxhZ3MpCit7CisJdm9pZCAqcDsKKworCXAgPSBfX19tX2FsbG9jKG1wLCBzaXplKTsKKworCWlmIChERUJVR19GTEFHUyAmIERFQlVHX0FMTE9DKQorCQlwcmludGsgKCJuZXcgJS0xMHNbJTRkXSBAJXAuXG4iLCBuYW1lLCBzaXplLCBwKTsKKworCWlmIChwKQorCQltZW1zZXQocCwgMCwgc2l6ZSk7CisJZWxzZSBpZiAodWZsYWdzICYgTUVNT19XQVJOKQorCQlwcmludGsgKE5BTUU1M0M4WFggIjogZmFpbGVkIHRvIGFsbG9jYXRlICVzWyVkXVxuIiwgbmFtZSwgc2l6ZSk7CisKKwlyZXR1cm4gcDsKK30KKworI2RlZmluZSBfX21fY2FsbG9jKG1wLCBzLCBuKQlfX21fY2FsbG9jMihtcCwgcywgbiwgTUVNT19XQVJOKQorCitzdGF0aWMgdm9pZCBfX21fZnJlZShtX3Bvb2xfcyAqbXAsIHZvaWQgKnB0ciwgaW50IHNpemUsIGNoYXIgKm5hbWUpCit7CisJaWYgKERFQlVHX0ZMQUdTICYgREVCVUdfQUxMT0MpCisJCXByaW50ayAoImZyZWVpbmcgJS0xMHNbJTRkXSBAJXAuXG4iLCBuYW1lLCBzaXplLCBwdHIpOworCisJX19fbV9mcmVlKG1wLCBwdHIsIHNpemUpOworCit9CisKKy8qCisgKiBXaXRoIHBjaSBidXMgaW9tbXUgc3VwcG9ydCwgd2UgdXNlIGEgZGVmYXVsdCBwb29sIG9mIHVubWFwcGVkIG1lbW9yeSAKKyAqIGZvciBtZW1vcnkgd2UgZG9ubm90IG5lZWQgdG8gRE1BIGZyb20vdG8gYW5kIG9uZSBwb29sIHBlciBwY2lkZXYgZm9yIAorICogbWVtb3J5IGFjY2Vzc2VkIGJ5IHRoZSBQQ0kgY2hpcC4gYG1wMCcgaXMgdGhlIGRlZmF1bHQgbm90IERNQWFibGUgcG9vbC4KKyAqLworCitzdGF0aWMgbV9hZGRyX3QgX19fbXAwX2dldHAobV9wb29sX3MgKm1wKQoreworCW1fYWRkcl90IG0gPSBfX2dldF9mcmVlX3BhZ2VzKE1FTU9fR0ZQX0ZMQUdTLCBNRU1PX1BBR0VfT1JERVIpOworCWlmIChtKQorCQkrK21wLT5udW1wOworCXJldHVybiBtOworfQorCitzdGF0aWMgdm9pZCBfX19tcDBfZnJlZXAobV9wb29sX3MgKm1wLCBtX2FkZHJfdCBtKQoreworCWZyZWVfcGFnZXMobSwgTUVNT19QQUdFX09SREVSKTsKKwktLW1wLT5udW1wOworfQorCitzdGF0aWMgbV9wb29sX3MgbXAwID0ge05VTEwsIF9fX21wMF9nZXRwLCBfX19tcDBfZnJlZXB9OworCisvKgorICogRE1BYWJsZSBwb29scy4KKyAqLworCisvKgorICogV2l0aCBwY2kgYnVzIGlvbW11IHN1cHBvcnQsIHdlIG1haW50YWluIG9uZSBwb29sIHBlciBwY2lkZXYgYW5kIGEgCisgKiBoYXNoZWQgcmV2ZXJzZSB0YWJsZSBmb3IgdmlydHVhbCB0byBidXMgcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbnMuCisgKi8KK3N0YXRpYyBtX2FkZHJfdCBfX19kbWFfZ2V0cChtX3Bvb2xfcyAqbXApCit7CisJbV9hZGRyX3QgdnA7CisJbV92dG9iX3MgKnZicDsKKworCXZicCA9IF9fbV9jYWxsb2MoJm1wMCwgc2l6ZW9mKCp2YnApLCAiVlRPQiIpOworCWlmICh2YnApIHsKKwkJZG1hX2FkZHJfdCBkYWRkcjsKKwkJdnAgPSAobV9hZGRyX3QpIGRtYV9hbGxvY19jb2hlcmVudChtcC0+YnVzaCwKKwkJCQkJCVBBR0VfU0laRTw8TUVNT19QQUdFX09SREVSLAorCQkJCQkJJmRhZGRyLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHZwKSB7CisJCQlpbnQgaGMgPSBWVE9CX0hBU0hfQ09ERSh2cCk7CisJCQl2YnAtPnZhZGRyID0gdnA7CisJCQl2YnAtPmJhZGRyID0gZGFkZHI7CisJCQl2YnAtPm5leHQgPSBtcC0+dnRvYltoY107CisJCQltcC0+dnRvYltoY10gPSB2YnA7CisJCQkrK21wLT5udW1wOworCQkJcmV0dXJuIHZwOworCQl9CisJfQorCWlmICh2YnApCisJCV9fbV9mcmVlKCZtcDAsIHZicCwgc2l6ZW9mKCp2YnApLCAiVlRPQiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX19kbWFfZnJlZXAobV9wb29sX3MgKm1wLCBtX2FkZHJfdCBtKQoreworCW1fdnRvYl9zICoqdmJwcCwgKnZicDsKKwlpbnQgaGMgPSBWVE9CX0hBU0hfQ09ERShtKTsKKworCXZicHAgPSAmbXAtPnZ0b2JbaGNdOworCXdoaWxlICgqdmJwcCAmJiAoKnZicHApLT52YWRkciAhPSBtKQorCQl2YnBwID0gJigqdmJwcCktPm5leHQ7CisJaWYgKCp2YnBwKSB7CisJCXZicCA9ICp2YnBwOworCQkqdmJwcCA9ICgqdmJwcCktPm5leHQ7CisJCWRtYV9mcmVlX2NvaGVyZW50KG1wLT5idXNoLCBQQUdFX1NJWkU8PE1FTU9fUEFHRV9PUkRFUiwKKwkJCQkgICh2b2lkICopdmJwLT52YWRkciwgKGRtYV9hZGRyX3QpdmJwLT5iYWRkcik7CisJCV9fbV9mcmVlKCZtcDAsIHZicCwgc2l6ZW9mKCp2YnApLCAiVlRPQiIpOworCQktLW1wLT5udW1wOworCX0KK30KKworc3RhdGljIGlubGluZSBtX3Bvb2xfcyAqX19fZ2V0X2RtYV9wb29sKG1fYnVzaF90IGJ1c2gpCit7CisJbV9wb29sX3MgKm1wOworCWZvciAobXAgPSBtcDAubmV4dDsgbXAgJiYgbXAtPmJ1c2ggIT0gYnVzaDsgbXAgPSBtcC0+bmV4dCk7CisJcmV0dXJuIG1wOworfQorCitzdGF0aWMgbV9wb29sX3MgKl9fX2NyZV9kbWFfcG9vbChtX2J1c2hfdCBidXNoKQoreworCW1fcG9vbF9zICptcDsKKwltcCA9IF9fbV9jYWxsb2MoJm1wMCwgc2l6ZW9mKCptcCksICJNUE9PTCIpOworCWlmIChtcCkgeworCQltZW1zZXQobXAsIDAsIHNpemVvZigqbXApKTsKKwkJbXAtPmJ1c2ggPSBidXNoOworCQltcC0+Z2V0cCA9IF9fX2RtYV9nZXRwOworCQltcC0+ZnJlZXAgPSBfX19kbWFfZnJlZXA7CisJCW1wLT5uZXh0ID0gbXAwLm5leHQ7CisJCW1wMC5uZXh0ID0gbXA7CisJfQorCXJldHVybiBtcDsKK30KKworc3RhdGljIHZvaWQgX19fZGVsX2RtYV9wb29sKG1fcG9vbF9zICpwKQoreworCXN0cnVjdCBtX3Bvb2wgKipwcCA9ICZtcDAubmV4dDsKKworCXdoaWxlICgqcHAgJiYgKnBwICE9IHApCisJCXBwID0gJigqcHApLT5uZXh0OworCWlmICgqcHApIHsKKwkJKnBwID0gKCpwcCktPm5leHQ7CisJCV9fbV9mcmVlKCZtcDAsIHAsIHNpemVvZigqcCksICJNUE9PTCIpOworCX0KK30KKworc3RhdGljIHZvaWQgKl9fbV9jYWxsb2NfZG1hKG1fYnVzaF90IGJ1c2gsIGludCBzaXplLCBjaGFyICpuYW1lKQoreworCXVfbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbV9wb29sICptcDsKKwl2b2lkICptID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuY3I1M2M4eHhfbG9jaywgZmxhZ3MpOworCW1wID0gX19fZ2V0X2RtYV9wb29sKGJ1c2gpOworCWlmICghbXApCisJCW1wID0gX19fY3JlX2RtYV9wb29sKGJ1c2gpOworCWlmIChtcCkKKwkJbSA9IF9fbV9jYWxsb2MobXAsIHNpemUsIG5hbWUpOworCWlmIChtcCAmJiAhbXAtPm51bXApCisJCV9fX2RlbF9kbWFfcG9vbChtcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmNyNTNjOHh4X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBtOworfQorCitzdGF0aWMgdm9pZCBfX21fZnJlZV9kbWEobV9idXNoX3QgYnVzaCwgdm9pZCAqbSwgaW50IHNpemUsIGNoYXIgKm5hbWUpCit7CisJdV9sb25nIGZsYWdzOworCXN0cnVjdCBtX3Bvb2wgKm1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5jcjUzYzh4eF9sb2NrLCBmbGFncyk7CisJbXAgPSBfX19nZXRfZG1hX3Bvb2woYnVzaCk7CisJaWYgKG1wKQorCQlfX21fZnJlZShtcCwgbSwgc2l6ZSwgbmFtZSk7CisJaWYgKG1wICYmICFtcC0+bnVtcCkKKwkJX19fZGVsX2RtYV9wb29sKG1wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuY3I1M2M4eHhfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgbV9hZGRyX3QgX192dG9idXMobV9idXNoX3QgYnVzaCwgdm9pZCAqbSkKK3sKKwl1X2xvbmcgZmxhZ3M7CisJbV9wb29sX3MgKm1wOworCWludCBoYyA9IFZUT0JfSEFTSF9DT0RFKG0pOworCW1fdnRvYl9zICp2cCA9IE5VTEw7CisJbV9hZGRyX3QgYSA9ICgobV9hZGRyX3QpIG0pICYgfk1FTU9fQ0xVU1RFUl9NQVNLOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5jcjUzYzh4eF9sb2NrLCBmbGFncyk7CisJbXAgPSBfX19nZXRfZG1hX3Bvb2woYnVzaCk7CisJaWYgKG1wKSB7CisJCXZwID0gbXAtPnZ0b2JbaGNdOworCQl3aGlsZSAodnAgJiYgKG1fYWRkcl90KSB2cC0+dmFkZHIgIT0gYSkKKwkJCXZwID0gdnAtPm5leHQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5jcjUzYzh4eF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHZwID8gdnAtPmJhZGRyICsgKCgobV9hZGRyX3QpIG0pIC0gYSkgOiAwOworfQorCisjZGVmaW5lIF9tX2NhbGxvY19kbWEobnAsIHMsIG4pCQlfX21fY2FsbG9jX2RtYShucC0+ZGV2LCBzLCBuKQorI2RlZmluZSBfbV9mcmVlX2RtYShucCwgcCwgcywgbikJX19tX2ZyZWVfZG1hKG5wLT5kZXYsIHAsIHMsIG4pCisjZGVmaW5lIG1fY2FsbG9jX2RtYShzLCBuKQkJX21fY2FsbG9jX2RtYShucCwgcywgbikKKyNkZWZpbmUgbV9mcmVlX2RtYShwLCBzLCBuKQkJX21fZnJlZV9kbWEobnAsIHAsIHMsIG4pCisjZGVmaW5lIF92dG9idXMobnAsIHApCQkJX192dG9idXMobnAtPmRldiwgcCkKKyNkZWZpbmUgdnRvYnVzKHApCQkJX3Z0b2J1cyhucCwgcCkKKworLyoKKyAqICBEZWFsIHdpdGggRE1BIG1hcHBpbmcvdW5tYXBwaW5nLgorICovCisKKy8qIFRvIGtlZXAgdHJhY2sgb2YgdGhlIGRtYSBtYXBwaW5nIChzZy9zaW5nbGUpIHRoYXQgaGFzIGJlZW4gc2V0ICovCisjZGVmaW5lIF9fZGF0YV9tYXBwZWQJU0NwLnBoYXNlCisjZGVmaW5lIF9fZGF0YV9tYXBwaW5nCVNDcC5oYXZlX2RhdGFfaW4KKworc3RhdGljIHZvaWQgX191bm1hcF9zY3NpX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJc3dpdGNoKGNtZC0+X19kYXRhX21hcHBlZCkgeworCWNhc2UgMjoKKwkJZG1hX3VubWFwX3NnKGRldiwgY21kLT5idWZmZXIsIGNtZC0+dXNlX3NnLAorCQkJCWNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQlicmVhazsKKwljYXNlIDE6CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBjbWQtPl9fZGF0YV9tYXBwaW5nLAorCQkJCSBjbWQtPnJlcXVlc3RfYnVmZmxlbiwKKwkJCQkgY21kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJCWJyZWFrOworCX0KKwljbWQtPl9fZGF0YV9tYXBwZWQgPSAwOworfQorCitzdGF0aWMgdV9sb25nIF9fbWFwX3Njc2lfc2luZ2xlX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCisJaWYgKGNtZC0+cmVxdWVzdF9idWZmbGVuID09IDApCisJCXJldHVybiAwOworCisJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGRldiwgY21kLT5yZXF1ZXN0X2J1ZmZlciwKKwkJCQkgY21kLT5yZXF1ZXN0X2J1ZmZsZW4sCisJCQkJIGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCWNtZC0+X19kYXRhX21hcHBlZCA9IDE7CisJY21kLT5fX2RhdGFfbWFwcGluZyA9IG1hcHBpbmc7CisKKwlyZXR1cm4gbWFwcGluZzsKK30KKworc3RhdGljIGludCBfX21hcF9zY3NpX3NnX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJaW50IHVzZV9zZzsKKworCWlmIChjbWQtPnVzZV9zZyA9PSAwKQorCQlyZXR1cm4gMDsKKworCXVzZV9zZyA9IGRtYV9tYXBfc2coZGV2LCBjbWQtPmJ1ZmZlciwgY21kLT51c2Vfc2csCisJCQljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKwljbWQtPl9fZGF0YV9tYXBwZWQgPSAyOworCWNtZC0+X19kYXRhX21hcHBpbmcgPSB1c2Vfc2c7CisKKwlyZXR1cm4gdXNlX3NnOworfQorCisjZGVmaW5lIHVubWFwX3Njc2lfZGF0YShucCwgY21kKQlfX3VubWFwX3Njc2lfZGF0YShucC0+ZGV2LCBjbWQpCisjZGVmaW5lIG1hcF9zY3NpX3NpbmdsZV9kYXRhKG5wLCBjbWQpCV9fbWFwX3Njc2lfc2luZ2xlX2RhdGEobnAtPmRldiwgY21kKQorI2RlZmluZSBtYXBfc2NzaV9zZ19kYXRhKG5wLCBjbWQpCV9fbWFwX3Njc2lfc2dfZGF0YShucC0+ZGV2LCBjbWQpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKioKKyoqCURyaXZlciBzZXR1cC4KKyoqCisqKglUaGlzIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGxpbnV4IGNvbmZpZyAKKyoqCW9wdGlvbnMuIEl0IGNhbiBiZSBvdmVycmlkZGVuIGF0IGJvb3QtdXAgYnkgdGhlIGJvb3QgCisqKgljb21tYW5kIGxpbmUuCisqKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHN0cnVjdCBuY3JfZHJpdmVyX3NldHVwCisJZHJpdmVyX3NldHVwCQkJPSBTQ1NJX05DUl9EUklWRVJfU0VUVVA7CisKKyNpZmRlZglTQ1NJX05DUl9CT09UX0NPTU1BTkRfTElORV9TVVBQT1JUCitzdGF0aWMgc3RydWN0IG5jcl9kcml2ZXJfc2V0dXAKKwlkcml2ZXJfc2FmZV9zZXR1cCBfX2luaXRkYXRhCT0gU0NTSV9OQ1JfRFJJVkVSX1NBRkVfU0VUVVA7CisjZW5kaWYKKworI2RlZmluZSBpbml0dmVyYm9zZSAoZHJpdmVyX3NldHVwLnZlcmJvc2UpCisjZGVmaW5lIGJvb3R2ZXJib3NlIChucC0+dmVyYm9zZSkKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoqCisqKglEcml2ZXIgc2V0dXAgZnJvbSB0aGUgYm9vdCBjb21tYW5kIGxpbmUKKyoqCisqKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUJQVJHX1NFUAknICcKKyNlbHNlCisjZGVmaW5lCUFSR19TRVAJJywnCisjZW5kaWYKKworI2RlZmluZSBPUFRfVEFHUwkJMQorI2RlZmluZSBPUFRfTUFTVEVSX1BBUklUWQkyCisjZGVmaW5lIE9QVF9TQ1NJX1BBUklUWQkJMworI2RlZmluZSBPUFRfRElTQ09OTkVDVElPTgk0CisjZGVmaW5lIE9QVF9TUEVDSUFMX0ZFQVRVUkVTCTUKKyNkZWZpbmUgT1BUX1VOVVNFRF8xCQk2CisjZGVmaW5lIE9QVF9GT1JDRV9TWU5DX05FR08JNworI2RlZmluZSBPUFRfUkVWRVJTRV9QUk9CRQk4CisjZGVmaW5lIE9QVF9ERUZBVUxUX1NZTkMJOQorI2RlZmluZSBPUFRfVkVSQk9TRQkJMTAKKyNkZWZpbmUgT1BUX0RFQlVHCQkxMQorI2RlZmluZSBPUFRfQlVSU1RfTUFYCQkxMgorI2RlZmluZSBPUFRfTEVEX1BJTgkJMTMKKyNkZWZpbmUgT1BUX01BWF9XSURFCQkxNAorI2RlZmluZSBPUFRfU0VUVExFX0RFTEFZCTE1CisjZGVmaW5lIE9QVF9ESUZGX1NVUFBPUlQJMTYKKyNkZWZpbmUgT1BUX0lSUU0JCTE3CisjZGVmaW5lIE9QVF9QQ0lfRklYX1VQCQkxOAorI2RlZmluZSBPUFRfQlVTX0NIRUNLCQkxOQorI2RlZmluZSBPUFRfT1BUSU1JWkUJCTIwCisjZGVmaW5lIE9QVF9SRUNPVkVSWQkJMjEKKyNkZWZpbmUgT1BUX1NBRkVfU0VUVVAJCTIyCisjZGVmaW5lIE9QVF9VU0VfTlZSQU0JCTIzCisjZGVmaW5lIE9QVF9FWENMVURFCQkyNAorI2RlZmluZSBPUFRfSE9TVF9JRAkJMjUKKworI2lmZGVmIFNDU0lfTkNSX0lBUkJfU1VQUE9SVAorI2RlZmluZSBPUFRfSUFSQgkJMjYKKyNlbmRpZgorCitzdGF0aWMgY2hhciBzZXR1cF90b2tlbltdIF9faW5pdGRhdGEgPSAKKwkidGFnczoiICAgIm1wYXI6IgorCSJzcGFyOiIgICAiZGlzYzoiCisJInNwZWNmOiIgICJ1bHRyYToiCisJImZzbjoiICAgICJyZXZwcm9iOiIKKwkic3luYzoiICAgInZlcmI6IgorCSJkZWJ1ZzoiICAiYnVyc3Q6IgorCSJsZWQ6IiAgICAid2lkZToiCisJInNldHRsZToiICJkaWZmOiIKKwkiaXJxbToiICAgInBjaWZpeDoiCisJImJ1c2NoazoiICJvcHRpbToiCisJInJlY292ZXJ5OiIKKwkic2FmZToiICAgIm52cmFtOiIKKwkiZXhjbDoiICAgImhvc3RpZDoiCisjaWZkZWYgU0NTSV9OQ1JfSUFSQl9TVVBQT1JUCisJImlhcmI6IgorI2VuZGlmCisJOwkvKiBET05OT1QgUkVNT1ZFIFRISVMgJzsnICovCisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUJQVJHX1NFUAknICcKKyNlbHNlCisjZGVmaW5lCUFSR19TRVAJJywnCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgZ2V0X3NldHVwX3Rva2VuKGNoYXIgKnApCit7CisJY2hhciAqY3VyID0gc2V0dXBfdG9rZW47CisJY2hhciAqcGM7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGN1ciAhPSBOVUxMICYmIChwYyA9IHN0cmNocihjdXIsICc6JykpICE9IE5VTEwpIHsKKwkJKytwYzsKKwkJKytpOworCQlpZiAoIXN0cm5jbXAocCwgY3VyLCBwYyAtIGN1cikpCisJCQlyZXR1cm4gaTsKKwkJY3VyID0gcGM7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IHN5bTUzYzh4eF9fc2V0dXAoY2hhciAqc3RyKQoreworI2lmZGVmIFNDU0lfTkNSX0JPT1RfQ09NTUFORF9MSU5FX1NVUFBPUlQKKwljaGFyICpjdXIgPSBzdHI7CisJY2hhciAqcGMsICpwdjsKKwlpbnQgaSwgdmFsLCBjOworCWludCB4aSA9IDA7CisKKwl3aGlsZSAoY3VyICE9IE5VTEwgJiYgKHBjID0gc3RyY2hyKGN1ciwgJzonKSkgIT0gTlVMTCkgeworCQljaGFyICpwZTsKKworCQl2YWwgPSAwOworCQlwdiA9IHBjOworCQljID0gKisrcHY7CisKKwkJaWYJKGMgPT0gJ24nKQorCQkJdmFsID0gMDsKKwkJZWxzZSBpZgkoYyA9PSAneScpCisJCQl2YWwgPSAxOworCQllbHNlCisJCQl2YWwgPSAoaW50KSBzaW1wbGVfc3RydG91bChwdiwgJnBlLCAwKTsKKworCQlzd2l0Y2ggKGdldF9zZXR1cF90b2tlbihjdXIpKSB7CisJCWNhc2UgT1BUX1RBR1M6CisJCQlkcml2ZXJfc2V0dXAuZGVmYXVsdF90YWdzID0gdmFsOworCQkJaWYgKHBlICYmICpwZSA9PSAnLycpIHsKKwkJCQlpID0gMDsKKwkJCQl3aGlsZSAoKnBlICYmICpwZSAhPSBBUkdfU0VQICYmIAorCQkJCQlpIDwgc2l6ZW9mKGRyaXZlcl9zZXR1cC50YWdfY3RybCktMSkgeworCQkJCQlkcml2ZXJfc2V0dXAudGFnX2N0cmxbaSsrXSA9ICpwZSsrOworCQkJCX0KKwkJCQlkcml2ZXJfc2V0dXAudGFnX2N0cmxbaV0gPSAnXDAnOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT1BUX01BU1RFUl9QQVJJVFk6CisJCQlkcml2ZXJfc2V0dXAubWFzdGVyX3Bhcml0eSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9TQ1NJX1BBUklUWToKKwkJCWRyaXZlcl9zZXR1cC5zY3NpX3Bhcml0eSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9ESVNDT05ORUNUSU9OOgorCQkJZHJpdmVyX3NldHVwLmRpc2Nvbm5lY3Rpb24gPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfU1BFQ0lBTF9GRUFUVVJFUzoKKwkJCWRyaXZlcl9zZXR1cC5zcGVjaWFsX2ZlYXR1cmVzID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0ZPUkNFX1NZTkNfTkVHTzoKKwkJCWRyaXZlcl9zZXR1cC5mb3JjZV9zeW5jX25lZ28gPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfUkVWRVJTRV9QUk9CRToKKwkJCWRyaXZlcl9zZXR1cC5yZXZlcnNlX3Byb2JlID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0RFRkFVTFRfU1lOQzoKKwkJCWRyaXZlcl9zZXR1cC5kZWZhdWx0X3N5bmMgPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfVkVSQk9TRToKKwkJCWRyaXZlcl9zZXR1cC52ZXJib3NlID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0RFQlVHOgorCQkJZHJpdmVyX3NldHVwLmRlYnVnID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0JVUlNUX01BWDoKKwkJCWRyaXZlcl9zZXR1cC5idXJzdF9tYXggPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfTEVEX1BJTjoKKwkJCWRyaXZlcl9zZXR1cC5sZWRfcGluID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX01BWF9XSURFOgorCQkJZHJpdmVyX3NldHVwLm1heF93aWRlID0gdmFsPyAxOjA7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfU0VUVExFX0RFTEFZOgorCQkJZHJpdmVyX3NldHVwLnNldHRsZV9kZWxheSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9ESUZGX1NVUFBPUlQ6CisJCQlkcml2ZXJfc2V0dXAuZGlmZl9zdXBwb3J0ID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0lSUU06CisJCQlkcml2ZXJfc2V0dXAuaXJxbSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9QQ0lfRklYX1VQOgorCQkJZHJpdmVyX3NldHVwLnBjaV9maXhfdXAJPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfQlVTX0NIRUNLOgorCQkJZHJpdmVyX3NldHVwLmJ1c19jaGVjayA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9PUFRJTUlaRToKKwkJCWRyaXZlcl9zZXR1cC5vcHRpbWl6ZSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9SRUNPVkVSWToKKwkJCWRyaXZlcl9zZXR1cC5yZWNvdmVyeSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9VU0VfTlZSQU06CisJCQlkcml2ZXJfc2V0dXAudXNlX252cmFtID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX1NBRkVfU0VUVVA6CisJCQltZW1jcHkoJmRyaXZlcl9zZXR1cCwgJmRyaXZlcl9zYWZlX3NldHVwLAorCQkJCXNpemVvZihkcml2ZXJfc2V0dXApKTsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9FWENMVURFOgorCQkJaWYgKHhpIDwgU0NTSV9OQ1JfTUFYX0VYQ0xVREVTKQorCQkJCWRyaXZlcl9zZXR1cC5leGNsdWRlc1t4aSsrXSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9IT1NUX0lEOgorCQkJZHJpdmVyX3NldHVwLmhvc3RfaWQgPSB2YWw7CisJCQlicmVhazsKKyNpZmRlZiBTQ1NJX05DUl9JQVJCX1NVUFBPUlQKKwkJY2FzZSBPUFRfSUFSQjoKKwkJCWRyaXZlcl9zZXR1cC5pYXJiID0gdmFsOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXByaW50aygic3ltNTNjOHh4X3NldHVwOiB1bmV4cGVjdGVkIGJvb3Qgb3B0aW9uICclLipzJyBpZ25vcmVkXG4iLCAoaW50KShwYy1jdXIrMSksIGN1cik7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoY3VyID0gc3RyY2hyKGN1ciwgQVJHX1NFUCkpICE9IE5VTEwpCisJCQkrK2N1cjsKKwl9CisjZW5kaWYgLyogU0NTSV9OQ1JfQk9PVF9DT01NQU5EX0xJTkVfU1VQUE9SVCAqLworCXJldHVybiAxOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoqCisqKglHZXQgZGV2aWNlIHF1ZXVlIGRlcHRoIGZyb20gYm9vdCBjb21tYW5kIGxpbmUuCisqKgorKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2RlZmluZSBERUZfREVQVEgJKGRyaXZlcl9zZXR1cC5kZWZhdWx0X3RhZ3MpCisjZGVmaW5lIEFMTF9UQVJHRVRTCS0yCisjZGVmaW5lIE5PX1RBUkdFVAktMQorI2RlZmluZSBBTExfTFVOUwktMgorI2RlZmluZSBOT19MVU4JCS0xCisKK3N0YXRpYyBpbnQgZGV2aWNlX3F1ZXVlX2RlcHRoKGludCB1bml0LCBpbnQgdGFyZ2V0LCBpbnQgbHVuKQoreworCWludCBjLCBoLCB0LCB1LCB2OworCWNoYXIgKnAgPSBkcml2ZXJfc2V0dXAudGFnX2N0cmw7CisJY2hhciAqZXA7CisKKwloID0gLTE7CisJdCA9IE5PX1RBUkdFVDsKKwl1ID0gTk9fTFVOOworCXdoaWxlICgoYyA9ICpwKyspICE9IDApIHsKKwkJdiA9IHNpbXBsZV9zdHJ0b3VsKHAsICZlcCwgMCk7CisJCXN3aXRjaChjKSB7CisJCWNhc2UgJy8nOgorCQkJKytoOworCQkJdCA9IEFMTF9UQVJHRVRTOworCQkJdSA9IEFMTF9MVU5TOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJaWYgKHQgIT0gdGFyZ2V0KQorCQkJCXQgPSAodGFyZ2V0ID09IHYpID8gdiA6IE5PX1RBUkdFVDsKKwkJCXUgPSBBTExfTFVOUzsKKwkJCWJyZWFrOworCQljYXNlICd1JzoKKwkJCWlmICh1ICE9IGx1bikKKwkJCQl1ID0gKGx1biA9PSB2KSA/IHYgOiBOT19MVU47CisJCQlicmVhazsKKwkJY2FzZSAncSc6CisJCQlpZiAoaCA9PSB1bml0ICYmCisJCQkJKHQgPT0gQUxMX1RBUkdFVFMgfHwgdCA9PSB0YXJnZXQpICYmCisJCQkJKHUgPT0gQUxMX0xVTlMgICAgfHwgdSA9PSBsdW4pKQorCQkJCXJldHVybiB2OworCQkJYnJlYWs7CisJCWNhc2UgJy0nOgorCQkJdCA9IEFMTF9UQVJHRVRTOworCQkJdSA9IEFMTF9MVU5TOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlwID0gZXA7CisJfQorCXJldHVybiBERUZfREVQVEg7Cit9CiAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yOTcxLDIxICszNzAzLDEwIEBACiAKIHN0YXRpYyB2b2lkIG5jcl9wcmludF9tc2coc3RydWN0IGNjYiAqY3AsIGNoYXIgKmxhYmVsLCB1X2NoYXIgKm1zZykKIHsKLQlpbnQgaTsKIAlQUklOVF9BRERSKGNwLT5jbWQsICIlczogIiwgbGFiZWwpOwogCi0JcHJpbnRrICgiJXgiLCptc2cpOwotCWlmICgqbXNnID09IE1fRVhURU5ERUQpIHsKLQkJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgewotCQkJaWYgKGkgLSAxID4gbXNnWzFdKQotCQkJCWJyZWFrOwotCQkJcHJpbnRrICgiLSV4Iixtc2dbaV0pOwotCQl9Ci0JfSBlbHNlIGlmICgoKm1zZyAmIDB4ZjApID09IDB4MjApIHsKLQkJcHJpbnRrICgiLSV4Iixtc2dbMV0pOwotCX0KLQotCXByaW50aygiLlxuIik7CisJc3BpX3ByaW50X21zZyhtc2cpOworCXByaW50aygiXG4iKTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmggYi9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmgKaW5kZXggMDVjN2I4My4uNmE3YmVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguaApAQCAtMiw2ICsyLDcgQEAKICoqICBEZXZpY2UgZHJpdmVyIGZvciB0aGUgUENJLVNDU0kgTkNSNTM4WFggY29udHJvbGxlciBmYW1pbHkuCiAqKgogKiogIENvcHlyaWdodCAoQykgMTk5NCAgV29sZmdhbmcgU3RhbmdsbWVpZXIKKyoqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSAgR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+CiAqKgogKiogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDE1ICszNywxMjc1IEBACiAqKiAgQW5kIGhhcyBiZWVuIHBvcnRlZCB0byBOZXRCU0QgYnkKICoqICAgICAgICAgIENoYXJsZXMgTS4gSGFubnVtICAgICAgICAgICA8bXljcm9mdEBnbnUuYWkubWl0LmVkdT4KICoqCisqKiAgTlZSQU0gZGV0ZWN0aW9uIGFuZCByZWFkaW5nLgorKiogICAgQ29weXJpZ2h0IChDKSAxOTk3IFJpY2hhcmQgV2FsdGhhbSA8ZG9ybW91c2VAZmFyc3JvYnQuZGVtb24uY28udWs+CisqKgorKiogIEFkZGVkIHN1cHBvcnQgZm9yIE1JUFMgYmlnIGVuZGlhbiBzeXN0ZW1zLgorKiogICAgQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisqKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgorKiogIEFkZGVkIHN1cHBvcnQgZm9yIEhQIFBBUklTQyBiaWcgZW5kaWFuIHN5c3RlbXMuCisqKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KIAogI2lmbmRlZiBOQ1I1M0M4WFhfSAogI2RlZmluZSBOQ1I1M0M4WFhfSAogCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAotI2luY2x1ZGUgInN5bTUzYzh4eF9kZWZzLmgiCisvKgorKioJSWYgeW91IHdhbnQgYSBkcml2ZXIgYXMgc21hbGwgYXMgcG9zc2libGUsIGRvIG5vdCBkZWZpbmUgdGhlIAorKioJZm9sbG93aW5nIG9wdGlvbnMuCisqLworI2RlZmluZSBTQ1NJX05DUl9CT09UX0NPTU1BTkRfTElORV9TVVBQT1JUCisjZGVmaW5lIFNDU0lfTkNSX0RFQlVHX0lORk9fU1VQUE9SVAorCisvKgorKioJVG8gZGlzYWJsZSBpbnRlZ3JpdHkgY2hlY2tpbmcsIGRvIG5vdCBkZWZpbmUgdGhlIAorKioJZm9sbG93aW5nIG9wdGlvbi4KKyovCisjaWZkZWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX0lOVEVHUklUWV9DSEVDSworIwlkZWZpbmUgU0NTSV9OQ1JfRU5BQkxFX0lOVEVHUklUWV9DSEVDSworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiogVGFrZSBpbnRvIGFjY291bnQga2VybmVsIGNvbmZpZ3VyZWQgcGFyYW1ldGVycy4KKyoqIE1vc3Qgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBzdGFydHVwIGJ5IGEgY29tbWFuZCBsaW5lLgorKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKgorICogRm9yIFVsdHJhMiBhbmQgVWx0cmEzIFNDU0kgc3VwcG9ydCBvcHRpb24sIHVzZSBzcGVjaWFsIGZlYXR1cmVzLiAKKyAqCisgKiBWYWx1ZSAoZGVmYXVsdCkgbWVhbnM6CisgKgliaXQgMCA6IGFsbCBmZWF0dXJlcyBlbmFibGVkLCBleGNlcHQ6CisgKgkJYml0IDEgOiBQQ0kgV3JpdGUgQW5kIEludmFsaWRhdGUuCisgKgkJYml0IDIgOiBEYXRhIFBoYXNlIE1pc21hdGNoIGhhbmRsaW5nIGZyb20gU0NSSVBUUy4KKyAqCisgKiBVc2UgYm9vdCBvcHRpb25zIG5jcjUzYzh4eD1zcGVjZjoxIGlmIHlvdSB3YW50IGFsbCBjaGlwIGZlYXR1cmVzIHRvIGJlIAorICogZW5hYmxlZCBieSB0aGUgZHJpdmVyLgorICovCisjZGVmaW5lCVNDU0lfTkNSX1NFVFVQX1NQRUNJQUxfRkVBVFVSRVMJCSgzKQorCisjZGVmaW5lIFNDU0lfTkNSX01BWF9TWU5DCQkJKDgwKQorCisvKgorICogQWxsb3cgdGFncyBmcm9tIDIgdG8gMjU2LCBkZWZhdWx0IDgKKyAqLworI2lmZGVmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9NQVhfVEFHUworI2lmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9NQVhfVEFHUyA8IDIKKyNkZWZpbmUgU0NTSV9OQ1JfTUFYX1RBR1MJKDIpCisjZWxpZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfTUFYX1RBR1MgPiAyNTYKKyNkZWZpbmUgU0NTSV9OQ1JfTUFYX1RBR1MJKDI1NikKKyNlbHNlCisjZGVmaW5lCVNDU0lfTkNSX01BWF9UQUdTCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9NQVhfVEFHUworI2VuZGlmCisjZWxzZQorI2RlZmluZSBTQ1NJX05DUl9NQVhfVEFHUwkoOCkKKyNlbmRpZgorCisvKgorICogQWxsb3cgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBzdXBwb3J0IGlmIGNvbmZpZ3VyZWQgd2l0aCBkZWZhdWx0IG51bWJlciAKKyAqIG9mIHRhZ3Mgc2V0IHRvIG1heCAoc2VlIGFib3ZlKS4KKyAqLworI2lmZGVmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9ERUZBVUxUX1RBR1MKKyNkZWZpbmUJU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9UQUdTCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9ERUZBVUxUX1RBR1MKKyNlbGlmCWRlZmluZWQgQ09ORklHX1NDU0lfTkNSNTNDOFhYX1RBR0dFRF9RVUVVRQorI2RlZmluZQlTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1RBR1MJU0NTSV9OQ1JfTUFYX1RBR1MKKyNlbHNlCisjZGVmaW5lCVNDU0lfTkNSX1NFVFVQX0RFRkFVTFRfVEFHUwkoMCkKKyNlbmRpZgorCisvKgorICogSW1tZWRpYXRlIGFyYml0cmF0aW9uCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TQ1NJX05DUjUzQzhYWF9JQVJCKQorI2RlZmluZSBTQ1NJX05DUl9JQVJCX1NVUFBPUlQKKyNlbmRpZgorCisvKgorICogU3luYyB0cmFuc2ZlciBmcmVxdWVuY3kgYXQgc3RhcnR1cC4KKyAqIEFsbG93IGZyb20gNU1oeiB0byA4ME1oeiBkZWZhdWx0IDIwIE1oei4KKyAqLworI2lmbmRlZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQworI2RlZmluZQlDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQwkoMjApCisjZWxpZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQyA+IFNDU0lfTkNSX01BWF9TWU5DCisjdW5kZWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTkMKKyNkZWZpbmUJQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTkMJU0NTSV9OQ1JfTUFYX1NZTkMKKyNlbmRpZgorCisjaWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTkMgPT0gMAorI2RlZmluZQlTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1NZTkMJKDI1NSkKKyNlbGlmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU5DIDw9IDUKKyNkZWZpbmUJU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9TWU5DCSg1MCkKKyNlbGlmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU5DIDw9IDIwCisjZGVmaW5lCVNDU0lfTkNSX1NFVFVQX0RFRkFVTFRfU1lOQwkoMjUwLyhDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQykpCisjZWxpZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQyA8PSAzMworI2RlZmluZQlTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1NZTkMJKDExKQorI2VsaWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTkMgPD0gNDAKKyNkZWZpbmUJU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9TWU5DCSgxMCkKKyNlbHNlCisjZGVmaW5lCVNDU0lfTkNSX1NFVFVQX0RFRkFVTFRfU1lOQyAJKDkpCisjZW5kaWYKKworLyoKKyAqIERpc2FsbG93IGRpc2Nvbm5lY3Rpb25zIGF0IGJvb3QtdXAKKyAqLworI2lmZGVmIENPTkZJR19TQ1NJX05DUjUzQzhYWF9OT19ESVNDT05ORUNUCisjZGVmaW5lIFNDU0lfTkNSX1NFVFVQX0RJU0NPTk5FQ1RJT04JKDApCisjZWxzZQorI2RlZmluZSBTQ1NJX05DUl9TRVRVUF9ESVNDT05ORUNUSU9OCSgxKQorI2VuZGlmCisKKy8qCisgKiBGb3JjZSBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBmb3IgYWxsIHRhcmdldHMKKyAqLworI2lmZGVmIENPTkZJR19TQ1NJX05DUjUzQzhYWF9GT1JDRV9TWU5DX05FR08KKyNkZWZpbmUgU0NTSV9OQ1JfU0VUVVBfRk9SQ0VfU1lOQ19ORUdPCSgxKQorI2Vsc2UKKyNkZWZpbmUgU0NTSV9OQ1JfU0VUVVBfRk9SQ0VfU1lOQ19ORUdPCSgwKQorI2VuZGlmCisKKy8qCisgKiBEaXNhYmxlIG1hc3RlciBwYXJpdHkgY2hlY2tpbmcgKGZsYXdlZCBoYXJkd2FyZXMgbmVlZCB0aGF0KQorICovCisjaWZkZWYgQ09ORklHX1NDU0lfTkNSNTNDOFhYX0RJU0FCTEVfTVBBUklUWV9DSEVDSworI2RlZmluZSBTQ1NJX05DUl9TRVRVUF9NQVNURVJfUEFSSVRZCSgwKQorI2Vsc2UKKyNkZWZpbmUgU0NTSV9OQ1JfU0VUVVBfTUFTVEVSX1BBUklUWQkoMSkKKyNlbmRpZgorCisvKgorICogRGlzYWJsZSBzY3NpIHBhcml0eSBjaGVja2luZyAoZmxhd2VkIGRldmljZXMgbWF5IG5lZWQgdGhhdCkKKyAqLworI2lmZGVmIENPTkZJR19TQ1NJX05DUjUzQzhYWF9ESVNBQkxFX1BBUklUWV9DSEVDSworI2RlZmluZSBTQ1NJX05DUl9TRVRVUF9TQ1NJX1BBUklUWQkoMCkKKyNlbHNlCisjZGVmaW5lIFNDU0lfTkNSX1NFVFVQX1NDU0lfUEFSSVRZCSgxKQorI2VuZGlmCisKKy8qCisgKiBTZXR0bGUgdGltZSBhZnRlciByZXNldCBhdCBib290LXVwCisgKi8KKyNkZWZpbmUgU0NTSV9OQ1JfU0VUVVBfU0VUVExFX1RJTUUJKDIpCisKKy8qCisqKglCcmlkZ2UgcXVpcmtzIHdvcmstYXJvdW5kIG9wdGlvbiBkZWZhdWx0ZWQgdG8gMS4KKyovCisjaWZuZGVmCVNDU0lfTkNSX1BDSVFfV09SS19BUk9VTkRfT1BUCisjZGVmaW5lCVNDU0lfTkNSX1BDSVFfV09SS19BUk9VTkRfT1BUCTEKKyNlbmRpZgorCisvKgorKioJV29yay1hcm91bmQgY29tbW9uIGJyaWRnZSBtaXNiZWhhdmlvdXIuCisqKgorKioJLSBEbyBub3QgZmx1c2ggcG9zdGVkIHdyaXRlcyBpbiB0aGUgb3Bwb3NpdGUgCisqKgkgIGRpcmVjdGlvbiBvbiByZWFkLgorKioJLSBNYXkgcmVvcmRlciBETUEgd3JpdGVzIHRvIG1lbW9yeS4KKyoqCisqKglUaGlzIG9wdGlvbiBzaG91bGQgbm90IGFmZmVjdCBwZXJmb3JtYW5jZXMgCisqKglzaWduaWZpY2FudGx5LCBzbyBpdCBpcyB0aGUgZGVmYXVsdC4KKyovCisjaWYJU0NTSV9OQ1JfUENJUV9XT1JLX0FST1VORF9PUFQgPT0gMQorI2RlZmluZQlTQ1NJX05DUl9QQ0lRX01BWV9OT1RfRkxVU0hfUFdfVVBTVFJFQU0KKyNkZWZpbmUJU0NTSV9OQ1JfUENJUV9NQVlfUkVPUkRFUl9XUklURVMKKyNkZWZpbmUJU0NTSV9OQ1JfUENJUV9NQVlfTUlTU19DT01QTEVUSU9OUworCisvKgorKioJU2FtZSBhcyBvcHRpb24gMSwgYnV0IGFsc28gZGVhbCB3aXRoIAorKioJbWlzY29uZmlndXJlZCBpbnRlcnJ1cHRzLgorKioKKyoqCS0gRWRnZSB0cmlnZ2VycmVkIGluc3RlYWQgb2YgbGV2ZWwgc2Vuc2l0aXZlLgorKioJLSBObyBpbnRlcnJ1cHQgbGluZSBjb25uZWN0ZWQuCisqKgktIElSUSBudW1iZXIgbWlzY29uZmlndXJlZC4KKyoqCQorKioJSWYgbm8gaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCwgdGhlIGRyaXZlciB3aWxsIAorKioJY2F0Y2ggdGhlIGludGVycnVwdCBjb25kaXRpb25zIDEwIHRpbWVzIHBlciAKKyoqCXNlY29uZC4gTm8gbmVlZCB0byBzYXkgdGhhdCB0aGlzIG9wdGlvbiBpcyAKKyoqCW5vdCByZWNvbW1lbmRlZC4KKyovCisjZWxpZglTQ1NJX05DUl9QQ0lRX1dPUktfQVJPVU5EX09QVCA9PSAyCisjZGVmaW5lCVNDU0lfTkNSX1BDSVFfTUFZX05PVF9GTFVTSF9QV19VUFNUUkVBTQorI2RlZmluZQlTQ1NJX05DUl9QQ0lRX01BWV9SRU9SREVSX1dSSVRFUworI2RlZmluZQlTQ1NJX05DUl9QQ0lRX01BWV9NSVNTX0NPTVBMRVRJT05TCisjZGVmaW5lCVNDU0lfTkNSX1BDSVFfQlJPS0VOX0lOVFIKKworLyoKKyoqCVNvbWUgYnJpZGdlIGRlc2lnbmVycyBkZWNpZGVkIHRvIGZsdXNoIAorKioJZXZlcnl0aGluZyBwcmlvciB0byBkZWxpdmVyIHRoZSBpbnRlcnJ1cHQuCisqKglUaGlzIG9wdGlvbiB0cmllcyB0byBkZWFsIHdpdGggc3VjaCBhIAorKioJYmVoYXZpb3VyLgorKi8KKyNlbGlmCVNDU0lfTkNSX1BDSVFfV09SS19BUk9VTkRfT1BUID09IDMKKyNkZWZpbmUJU0NTSV9OQ1JfUENJUV9TWU5DX09OX0lOVFIKKyNlbmRpZgorCisvKgorKioJT3RoZXIgcGFyYW1ldGVycyBub3QgY29uZmlndXJhYmxlIHdpdGggIm1ha2UgY29uZmlnIgorKioJQXZvaWQgdG8gY2hhbmdlIHRoZXNlIGNvbnN0YW50cywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKyovCisKKyNkZWZpbmUgU0NTSV9OQ1JfQUxXQVlTX1NJTVBMRV9UQUcKKyNkZWZpbmUgU0NTSV9OQ1JfTUFYX1NDQVRURVIJKDEyNykKKyNkZWZpbmUgU0NTSV9OQ1JfTUFYX1RBUkdFVAkoMTYpCisKKy8qCisqKiAgIENvbXB1dGUgc29tZSBkZXNpcmFibGUgdmFsdWUgZm9yIENBTl9RVUVVRSAKKyoqICAgYW5kIENNRF9QRVJfTFVOLgorKiogICBUaGUgZHJpdmVyIHdpbGwgdXNlIGxvd2VyIHZhbHVlcyBpZiB0aGVzZSAKKyoqICAgb25lcyBhcHBlYXIgdG8gYmUgdG9vIGxhcmdlLgorKi8KKyNkZWZpbmUgU0NTSV9OQ1JfQ0FOX1FVRVVFCSg4KlNDU0lfTkNSX01BWF9UQUdTICsgMipTQ1NJX05DUl9NQVhfVEFSR0VUKQorI2RlZmluZSBTQ1NJX05DUl9DTURfUEVSX0xVTgkoU0NTSV9OQ1JfTUFYX1RBR1MpCisKKyNkZWZpbmUgU0NTSV9OQ1JfU0dfVEFCTEVTSVpFCShTQ1NJX05DUl9NQVhfU0NBVFRFUikKKyNkZWZpbmUgU0NTSV9OQ1JfVElNRVJfSU5URVJWQUwJKEhaKQorCisjaWYgMSAvKiBkZWZpbmVkIENPTkZJR19TQ1NJX01VTFRJX0xVTiAqLworI2RlZmluZSBTQ1NJX05DUl9NQVhfTFVOCSgxNikKKyNlbHNlCisjZGVmaW5lIFNDU0lfTkNSX01BWF9MVU4JKDEpCisjZW5kaWYKKworLyoKKyAqICBJTyBmdW5jdGlvbnMgZGVmaW5pdGlvbiBmb3IgYmlnL2xpdHRsZSBlbmRpYW4gQ1BVIHN1cHBvcnQuCisgKiAgRm9yIG5vdywgdGhlIE5DUiBpcyBvbmx5IHN1cHBvcnRlZCBpbiBsaXR0bGUgZW5kaWFuIGFkZHJlc3NpbmcgbW9kZSwgCisgKi8KKworI2lmZGVmCV9fQklHX0VORElBTgorCisjZGVmaW5lCWlud19sMmIJCWludworI2RlZmluZQlpbmxfbDJiCQlpbmwKKyNkZWZpbmUJb3V0d19iMmwJb3V0dworI2RlZmluZQlvdXRsX2IybAlvdXRsCisKKyNkZWZpbmUJcmVhZGJfcmF3CXJlYWRiCisjZGVmaW5lCXdyaXRlYl9yYXcJd3JpdGViCisKKyNpZiBkZWZpbmVkKFNDU0lfTkNSX0JJR19FTkRJQU4pCisjZGVmaW5lCXJlYWR3X2wyYglfX3Jhd19yZWFkdworI2RlZmluZQlyZWFkbF9sMmIJX19yYXdfcmVhZGwKKyNkZWZpbmUJd3JpdGV3X2IybAlfX3Jhd193cml0ZXcKKyNkZWZpbmUJd3JpdGVsX2IybAlfX3Jhd193cml0ZWwKKyNkZWZpbmUJcmVhZHdfcmF3CV9fcmF3X3JlYWR3CisjZGVmaW5lCXJlYWRsX3JhdwlfX3Jhd19yZWFkbAorI2RlZmluZQl3cml0ZXdfcmF3CV9fcmF3X3dyaXRldworI2RlZmluZQl3cml0ZWxfcmF3CV9fcmF3X3dyaXRlbAorI2Vsc2UJLyogT3RoZXIgYmlnLWVuZGlhbiAqLworI2RlZmluZQlyZWFkd19sMmIJcmVhZHcKKyNkZWZpbmUJcmVhZGxfbDJiCXJlYWRsCisjZGVmaW5lCXdyaXRld19iMmwJd3JpdGV3CisjZGVmaW5lCXdyaXRlbF9iMmwJd3JpdGVsCisjZGVmaW5lCXJlYWR3X3JhdwlyZWFkdworI2RlZmluZQlyZWFkbF9yYXcJcmVhZGwKKyNkZWZpbmUJd3JpdGV3X3Jhdwl3cml0ZXcKKyNkZWZpbmUJd3JpdGVsX3Jhdwl3cml0ZWwKKyNlbmRpZgorCisjZWxzZQkvKiBsaXR0bGUgZW5kaWFuICovCisKKyNkZWZpbmUJaW53X3JhdwkJaW53CisjZGVmaW5lCWlubF9yYXcJCWlubAorI2RlZmluZQlvdXR3X3JhdwlvdXR3CisjZGVmaW5lCW91dGxfcmF3CW91dGwKKworI2RlZmluZQlyZWFkYl9yYXcJcmVhZGIKKyNkZWZpbmUJcmVhZHdfcmF3CXJlYWR3CisjZGVmaW5lCXJlYWRsX3JhdwlyZWFkbAorI2RlZmluZQl3cml0ZWJfcmF3CXdyaXRlYgorI2RlZmluZQl3cml0ZXdfcmF3CXdyaXRldworI2RlZmluZQl3cml0ZWxfcmF3CXdyaXRlbAorCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9faHBwYV9fKSAmJiAhZGVmaW5lZChfX21pcHNfXykKKyNpZmRlZglTQ1NJX05DUl9CSUdfRU5ESUFOCisjZXJyb3IJIlRoZSBOQ1IgaW4gQklHIEVORElBTiBhZGRyZXNzaW5nIG1vZGUgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCIKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgTUVNT1JZX0JBUlJJRVIoKQltYigpCisKKworLyoKKyAqICBJZiB0aGUgTkNSIHVzZXMgYmlnIGVuZGlhbiBhZGRyZXNzaW5nIG1vZGUgb3ZlciB0aGUgCisgKiAgUENJLCBhY3R1YWwgaW8gcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciBieXRlIGFuZCB3b3JkIAorICogIGFjY2Vzc2VzIG11c3QgYmUgY2hhbmdlZCBhY2NvcmRpbmcgdG8gbGFuZSByb3V0aW5nLgorICogIEJ0dywgbmNyX29mZmIoKSBhbmQgbmNyX29mZncoKSBtYWNyb3Mgb25seSBhcHBseSB0byAKKyAqICBjb25zdGFudHMgYW5kIHNvIGRvbm5vdCBnZW5lcmF0ZSBibG9hdGVkIGNvZGUuCisgKi8KKworI2lmCWRlZmluZWQoU0NTSV9OQ1JfQklHX0VORElBTikKKworI2RlZmluZSBuY3Jfb2ZmYihvKQkoKChvKSZ+MykrKCh+KChvKSYzKSkmMykpCisjZGVmaW5lIG5jcl9vZmZ3KG8pCSgoKG8pJn4zKSsoKH4oKG8pJjMpKSYyKSkKKworI2Vsc2UKKworI2RlZmluZSBuY3Jfb2ZmYihvKQkobykKKyNkZWZpbmUgbmNyX29mZncobykJKG8pCisKKyNlbmRpZgorCisvKgorICogIElmIHRoZSBDUFUgYW5kIHRoZSBOQ1IgdXNlIHNhbWUgZW5kaWFuLW5lc3MgYWRkcmVzc2luZywKKyAqICBubyBieXRlIHJlb3JkZXJpbmcgaXMgbmVlZGVkIGZvciBzY3JpcHQgcGF0Y2hpbmcuCisgKiAgTWFjcm8gY3B1X3RvX3NjcigpIGlzIHRvIGJlIHVzZWQgZm9yIHNjcmlwdCBwYXRjaGluZy4KKyAqICBNYWNybyBzY3JfdG9fY3B1KCkgaXMgdG8gYmUgdXNlZCBmb3IgZ2V0dGluZyBhIERXT1JEIAorICogIGZyb20gdGhlIHNjcmlwdC4KKyAqLworCisjaWYJZGVmaW5lZChfX0JJR19FTkRJQU4pICYmICFkZWZpbmVkKFNDU0lfTkNSX0JJR19FTkRJQU4pCisKKyNkZWZpbmUgY3B1X3RvX3NjcihkdykJY3B1X3RvX2xlMzIoZHcpCisjZGVmaW5lIHNjcl90b19jcHUoZHcpCWxlMzJfdG9fY3B1KGR3KQorCisjZWxpZglkZWZpbmVkKF9fTElUVExFX0VORElBTikgJiYgZGVmaW5lZChTQ1NJX05DUl9CSUdfRU5ESUFOKQorCisjZGVmaW5lIGNwdV90b19zY3IoZHcpCWNwdV90b19iZTMyKGR3KQorI2RlZmluZSBzY3JfdG9fY3B1KGR3KQliZTMyX3RvX2NwdShkdykKKworI2Vsc2UKKworI2RlZmluZSBjcHVfdG9fc2NyKGR3KQkoZHcpCisjZGVmaW5lIHNjcl90b19jcHUoZHcpCShkdykKKworI2VuZGlmCisKKy8qCisgKiAgQWNjZXNzIHRvIHRoZSBjb250cm9sbGVyIGNoaXAuCisgKgorICogIElmIHRoZSBDUFUgYW5kIHRoZSBOQ1IgdXNlIHNhbWUgZW5kaWFuLW5lc3MgYWRkcmVzc2luZywKKyAqICBubyBieXRlIHJlb3JkZXJpbmcgaXMgbmVlZGVkIGZvciBhY2Nlc3NpbmcgY2hpcCBpbyAKKyAqICByZWdpc3RlcnMuIEZ1bmN0aW9ucyBzdWZmaXhlZCBieSAnX3JhdycgYXJlIGFzc3VtZWQgCisgKiAgdG8gYWNjZXNzIHRoZSBjaGlwIG92ZXIgdGhlIFBDSSB3aXRob3V0IGRvaW5nIGJ5dGUgCisgKiAgcmVvcmRlcmluZy4gRnVuY3Rpb25zIHN1ZmZpeGVkIGJ5ICdfbDJiJyBhcmUgCisgKiAgYXNzdW1lZCB0byBwZXJmb3JtIGxpdHRsZS1lbmRpYW4gdG8gYmlnLWVuZGlhbiBieXRlIAorICogIHJlb3JkZXJpbmcsIHRob3NlIHN1ZmZpeGVkIGJ5ICdfYjJsJyBibGFoLCBibGFoLAorICogIGJsYWgsIC4uLgorICovCisKKy8qCisgKiAgTUVNT1JZIG1hcHBlZCBJTyBpbnB1dCAvIG91dHB1dAorICovCisKKyNkZWZpbmUgSU5CX09GRihvKQkJcmVhZGJfcmF3KChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZmIobykpCisjZGVmaW5lIE9VVEJfT0ZGKG8sIHZhbCkJd3JpdGViX3JhdygodmFsKSwgKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyBuY3Jfb2ZmYihvKSkKKworI2lmCWRlZmluZWQoX19CSUdfRU5ESUFOKSAmJiAhZGVmaW5lZChTQ1NJX05DUl9CSUdfRU5ESUFOKQorCisjZGVmaW5lIElOV19PRkYobykJCXJlYWR3X2wyYigoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pKQorI2RlZmluZSBJTkxfT0ZGKG8pCQlyZWFkbF9sMmIoKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyAobykpCisKKyNkZWZpbmUgT1VUV19PRkYobywgdmFsKQl3cml0ZXdfYjJsKCh2YWwpLCAoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pKQorI2RlZmluZSBPVVRMX09GRihvLCB2YWwpCXdyaXRlbF9iMmwoKHZhbCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgKG8pKQorCisjZWxpZglkZWZpbmVkKF9fTElUVExFX0VORElBTikgJiYgZGVmaW5lZChTQ1NJX05DUl9CSUdfRU5ESUFOKQorCisjZGVmaW5lIElOV19PRkYobykJCXJlYWR3X2IybCgoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pKQorI2RlZmluZSBJTkxfT0ZGKG8pCQlyZWFkbF9iMmwoKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyAobykpCisKKyNkZWZpbmUgT1VUV19PRkYobywgdmFsKQl3cml0ZXdfbDJiKCh2YWwpLCAoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pKQorI2RlZmluZSBPVVRMX09GRihvLCB2YWwpCXdyaXRlbF9sMmIoKHZhbCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgKG8pKQorCisjZWxzZQorCisjaWZkZWYgQ09ORklHX1NDU0lfTkNSNTNDOFhYX05PX1dPUkRfVFJBTlNGRVJTCisvKiBPbmx5IDggb3IgMzIgYml0IHRyYW5zZmVycyBhbGxvd2VkICovCisjZGVmaW5lIElOV19PRkYobykJCShyZWFkYigoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pKSA8PCA4IHwgcmVhZGIoKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyBuY3Jfb2ZmdyhvKSArIDEpKQorI2Vsc2UKKyNkZWZpbmUgSU5XX09GRihvKQkJcmVhZHdfcmF3KChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpCisjZW5kaWYKKyNkZWZpbmUgSU5MX09GRihvKQkJcmVhZGxfcmF3KChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgKG8pKQorCisjaWZkZWYgQ09ORklHX1NDU0lfTkNSNTNDOFhYX05PX1dPUkRfVFJBTlNGRVJTCisvKiBPbmx5IDggb3IgMzIgYml0IHRyYW5zZmVycyBhbGxvd2VkICovCisjZGVmaW5lIE9VVFdfT0ZGKG8sIHZhbCkJZG8geyB3cml0ZWIoKGNoYXIpKCh2YWwpID4+IDgpLCAoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pKTsgd3JpdGViKChjaGFyKSh2YWwpLCAoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pICsgMSk7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBPVVRXX09GRihvLCB2YWwpCXdyaXRld19yYXcoKHZhbCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpCisjZW5kaWYKKyNkZWZpbmUgT1VUTF9PRkYobywgdmFsKQl3cml0ZWxfcmF3KCh2YWwpLCAoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIChvKSkKKworI2VuZGlmCisKKyNkZWZpbmUgSU5CKHIpCQlJTkJfT0ZGIChvZmZzZXRvZihzdHJ1Y3QgbmNyX3JlZyxyKSkKKyNkZWZpbmUgSU5XKHIpCQlJTldfT0ZGIChvZmZzZXRvZihzdHJ1Y3QgbmNyX3JlZyxyKSkKKyNkZWZpbmUgSU5MKHIpCQlJTkxfT0ZGIChvZmZzZXRvZihzdHJ1Y3QgbmNyX3JlZyxyKSkKKworI2RlZmluZSBPVVRCKHIsIHZhbCkJT1VUQl9PRkYgKG9mZnNldG9mKHN0cnVjdCBuY3JfcmVnLHIpLCAodmFsKSkKKyNkZWZpbmUgT1VUVyhyLCB2YWwpCU9VVFdfT0ZGIChvZmZzZXRvZihzdHJ1Y3QgbmNyX3JlZyxyKSwgKHZhbCkpCisjZGVmaW5lIE9VVEwociwgdmFsKQlPVVRMX09GRiAob2Zmc2V0b2Yoc3RydWN0IG5jcl9yZWcsciksICh2YWwpKQorCisvKgorICogIFNldCBiaXQgZmllbGQgT04sIE9GRiAKKyAqLworCisjZGVmaW5lIE9VVE9OQihyLCBtKQlPVVRCKHIsIElOQihyKSB8IChtKSkKKyNkZWZpbmUgT1VUT0ZGQihyLCBtKQlPVVRCKHIsIElOQihyKSAmIH4obSkpCisjZGVmaW5lIE9VVE9OVyhyLCBtKQlPVVRXKHIsIElOVyhyKSB8IChtKSkKKyNkZWZpbmUgT1VUT0ZGVyhyLCBtKQlPVVRXKHIsIElOVyhyKSAmIH4obSkpCisjZGVmaW5lIE9VVE9OTChyLCBtKQlPVVRMKHIsIElOTChyKSB8IChtKSkKKyNkZWZpbmUgT1VUT0ZGTChyLCBtKQlPVVRMKHIsIElOTChyKSAmIH4obSkpCisKKy8qCisgKiAgV2Ugbm9ybWFsbHkgd2FudCB0aGUgY2hpcCB0byBoYXZlIGEgY29uc2lzdGVudCB2aWV3CisgKiAgb2YgZHJpdmVyIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3aGVuIHdlIHJlc3RhcnQgaXQuCisgKiAgVGh1cyB0aGVzZSBtYWNyb3MuCisgKi8KKyNkZWZpbmUgT1VUTF9EU1AodikJCQkJXAorCWRvIHsJCQkJCVwKKwkJTUVNT1JZX0JBUlJJRVIoKTsJCVwKKwkJT1VUTCAobmNfZHNwLCAodikpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgT1VUT05CX1NURCgpCQkJCVwKKwlkbyB7CQkJCQlcCisJCU1FTU9SWV9CQVJSSUVSKCk7CQlcCisJCU9VVE9OQiAobmNfZGNudGwsIChTVER8Tk9DT00pKTsJXAorCX0gd2hpbGUgKDApCisKKworLyoKKyoqICAgTkNSNTNDOFhYIGRldmljZXMgZmVhdHVyZXMgdGFibGUuCisqLworc3RydWN0IG5jcl9jaGlwIHsKKwl1bnNpZ25lZCBzaG9ydAlyZXZpc2lvbl9pZDsKKwl1bnNpZ25lZCBjaGFyCWJ1cnN0X21heDsJLyogbG9nLWJhc2UtMiBvZiBtYXggYnVyc3QgKi8KKwl1bnNpZ25lZCBjaGFyCW9mZnNldF9tYXg7CisJdW5zaWduZWQgY2hhcglucl9kaXZpc29yOworCXVuc2lnbmVkIGludAlmZWF0dXJlczsKKyNkZWZpbmUgRkVfTEVEMAkJKDE8PDApCisjZGVmaW5lIEZFX1dJREUJCSgxPDwxKSAgICAvKiBXaWRlIGRhdGEgdHJhbnNmZXJzICovCisjZGVmaW5lIEZFX1VMVFJBCSgxPDwyKQkgIC8qIFVsdHJhIHNwZWVkIDIwTXRyYW5zL3NlYyAqLworI2RlZmluZSBGRV9EQkxSCQkoMTw8NCkJICAvKiBDbG9jayBkb3VibGVyIHByZXNlbnQgKi8KKyNkZWZpbmUgRkVfUVVBRAkJKDE8PDUpCSAgLyogQ2xvY2sgcXVhZHJ1cGxlciBwcmVzZW50ICovCisjZGVmaW5lIEZFX0VSTAkJKDE8PDYpICAgIC8qIEVuYWJsZSByZWFkIGxpbmUgKi8KKyNkZWZpbmUgRkVfQ0xTRQkJKDE8PDcpICAgIC8qIENhY2hlIGxpbmUgc2l6ZSBlbmFibGUgKi8KKyNkZWZpbmUgRkVfV1JJRQkJKDE8PDgpICAgIC8qIFdyaXRlICYgSW52YWxpZGF0ZSBlbmFibGUgKi8KKyNkZWZpbmUgRkVfRVJNUAkJKDE8PDkpICAgIC8qIEVuYWJsZSByZWFkIG11bHRpcGxlICovCisjZGVmaW5lIEZFX0JPRgkJKDE8PDEwKSAgIC8qIEJ1cnN0IG9wY29kZSBmZXRjaCAqLworI2RlZmluZSBGRV9ERlMJCSgxPDwxMSkgICAvKiBETUEgZmlmbyBzaXplICovCisjZGVmaW5lIEZFX1BGRU4JCSgxPDwxMikgICAvKiBQcmVmZXRjaCBlbmFibGUgKi8KKyNkZWZpbmUgRkVfTERTVFIJKDE8PDEzKSAgIC8qIExvYWQvU3RvcmUgc3VwcG9ydGVkICovCisjZGVmaW5lIEZFX1JBTQkJKDE8PDE0KSAgIC8qIE9uIGNoaXAgUkFNIHByZXNlbnQgKi8KKyNkZWZpbmUgRkVfVkFSQ0xLCSgxPDwxNSkgICAvKiBTQ1NJIGNsb2NrIG1heSB2YXJ5ICovCisjZGVmaW5lIEZFX1JBTThLCSgxPDwxNikgICAvKiBPbiBjaGlwIFJBTSBzaXplZCA4S2IgKi8KKyNkZWZpbmUgRkVfNjRCSVQJKDE8PDE3KSAgIC8qIEhhdmUgYSA2NC1iaXQgUENJIGludGVyZmFjZSAqLworI2RlZmluZSBGRV9JTzI1NgkoMTw8MTgpICAgLyogUmVxdWlyZXMgZnVsbCAyNTYgYnl0ZXMgaW4gUENJIHNwYWNlICovCisjZGVmaW5lIEZFX05PUE0JCSgxPDwxOSkgICAvKiBTY3JpcHRzIGhhbmRsZXMgcGhhc2UgbWlzbWF0Y2ggKi8KKyNkZWZpbmUgRkVfTEVEQwkJKDE8PDIwKSAgIC8qIEhhcmR3YXJlIGNvbnRyb2wgb2YgTEVEICovCisjZGVmaW5lIEZFX0RJRkYJCSgxPDwyMSkgICAvKiBTdXBwb3J0IERpZmZlcmVudGlhbCBTQ1NJICovCisjZGVmaW5lIEZFXzY2TUhaIAkoMTw8MjMpICAgLyogNjZNSHogUENJIFN1cHBvcnQgKi8KKyNkZWZpbmUgRkVfREFDCSAJKDE8PDI0KSAgIC8qIFN1cHBvcnQgREFDIGN5Y2xlcyAoNjQgYml0IGFkZHJlc3NpbmcpICovCisjZGVmaW5lIEZFX0lTVEFUMSAJKDE8PDI1KSAgIC8qIEhhdmUgSVNUQVQxLCBNQk9YMCwgTUJPWDEgcmVnaXN0ZXJzICovCisjZGVmaW5lIEZFX0RBQ19JTl9VU0UJKDE8PDI2KQkgIC8qIFBsYXRmb3JtIGRvZXMgREFDIGN5Y2xlcyAqLworI2RlZmluZSBGRV9FSFAJCSgxPDwyNykgICAvKiA3MjA6IEV2ZW4gaG9zdCBwYXJpdHkgKi8KKyNkZWZpbmUgRkVfTVVYCQkoMTw8MjgpICAgLyogNzIwOiBNdWx0aXBsZXhlZCBidXMgKi8KKyNkZWZpbmUgRkVfRUEJCSgxPDwyOSkgICAvKiA3MjA6IEVuYWJsZSBBY2sgKi8KKworI2RlZmluZSBGRV9DQUNIRV9TRVQJKEZFX0VSTHxGRV9DTFNFfEZFX1dSSUV8RkVfRVJNUCkKKyNkZWZpbmUgRkVfU0NTSV9TRVQJKEZFX1dJREV8RkVfVUxUUkF8RkVfREJMUnxGRV9RVUFEfEZfQ0xLODApCisjZGVmaW5lIEZFX1NQRUNJQUxfU0VUCShGRV9DQUNIRV9TRVR8RkVfQk9GfEZFX0RGU3xGRV9MRFNUUnxGRV9QRkVOfEZFX1JBTSkKK307CisKKworLyoKKyoqCURyaXZlciBzZXR1cCBzdHJ1Y3R1cmUuCisqKgorKioJVGhpcyBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBsaW51eCBjb25maWcgb3B0aW9ucy4KKyoqCUl0IGNhbiBiZSBvdmVycmlkZGVuIGF0IGJvb3QtdXAgYnkgdGhlIGJvb3QgY29tbWFuZCBsaW5lLgorKi8KKyNkZWZpbmUgU0NTSV9OQ1JfTUFYX0VYQ0xVREVTIDgKK3N0cnVjdCBuY3JfZHJpdmVyX3NldHVwIHsKKwl1OAltYXN0ZXJfcGFyaXR5OworCXU4CXNjc2lfcGFyaXR5OworCXU4CWRpc2Nvbm5lY3Rpb247CisJdTgJc3BlY2lhbF9mZWF0dXJlczsKKwl1OAlmb3JjZV9zeW5jX25lZ287CisJdTgJcmV2ZXJzZV9wcm9iZTsKKwl1OAlwY2lfZml4X3VwOworCXU4CXVzZV9udnJhbTsKKwl1OAl2ZXJib3NlOworCXU4CWRlZmF1bHRfdGFnczsKKwl1MTYJZGVmYXVsdF9zeW5jOworCXUxNglkZWJ1ZzsKKwl1OAlidXJzdF9tYXg7CisJdTgJbGVkX3BpbjsKKwl1OAltYXhfd2lkZTsKKwl1OAlzZXR0bGVfZGVsYXk7CisJdTgJZGlmZl9zdXBwb3J0OworCXU4CWlycW07CisJdTgJYnVzX2NoZWNrOworCXU4CW9wdGltaXplOworCXU4CXJlY292ZXJ5OworCXU4CWhvc3RfaWQ7CisJdTE2CWlhcmI7CisJdTMyCWV4Y2x1ZGVzW1NDU0lfTkNSX01BWF9FWENMVURFU107CisJY2hhcgl0YWdfY3RybFsxMDBdOworfTsKKworLyoKKyoqCUluaXRpYWwgc2V0dXAuCisqKglDYW4gYmUgb3ZlcnJpZGVuIGF0IHN0YXJ0dXAgYnkgYSBjb21tYW5kIGxpbmUuCisqLworI2RlZmluZSBTQ1NJX05DUl9EUklWRVJfU0VUVVAJCQlcCit7CQkJCQkJXAorCVNDU0lfTkNSX1NFVFVQX01BU1RFUl9QQVJJVFksCQlcCisJU0NTSV9OQ1JfU0VUVVBfU0NTSV9QQVJJVFksCQlcCisJU0NTSV9OQ1JfU0VUVVBfRElTQ09OTkVDVElPTiwJCVwKKwlTQ1NJX05DUl9TRVRVUF9TUEVDSUFMX0ZFQVRVUkVTLAlcCisJU0NTSV9OQ1JfU0VUVVBfRk9SQ0VfU1lOQ19ORUdPLAkJXAorCTAsCQkJCQlcCisJMCwJCQkJCVwKKwkxLAkJCQkJXAorCTAsCQkJCQlcCisJU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9UQUdTLAkJXAorCVNDU0lfTkNSX1NFVFVQX0RFRkFVTFRfU1lOQywJCVwKKwkweDAwLAkJCQkJXAorCTcsCQkJCQlcCisJMCwJCQkJCVwKKwkxLAkJCQkJXAorCVNDU0lfTkNSX1NFVFVQX1NFVFRMRV9USU1FLAkJXAorCTAsCQkJCQlcCisJMCwJCQkJCVwKKwkxLAkJCQkJXAorCTAsCQkJCQlcCisJMCwJCQkJCVwKKwkyNTUsCQkJCQlcCisJMHgwMAkJCQkJXAorfQorCisvKgorKioJQm9vdCBmYWlsIHNhZmUgc2V0dXAuCisqKglPdmVycmlkZSBpbml0aWFsIHNldHVwIGZyb20gYm9vdCBjb21tYW5kIGxpbmU6CisqKgluY3I1M2M4eHg9c2FmZTp5CisqLworI2RlZmluZSBTQ1NJX05DUl9EUklWRVJfU0FGRV9TRVRVUAkJXAorewkJCQkJCVwKKwkwLAkJCQkJXAorCTEsCQkJCQlcCisJMCwJCQkJCVwKKwkwLAkJCQkJXAorCTAsCQkJCQlcCisJMCwJCQkJCVwKKwkwLAkJCQkJXAorCTEsCQkJCQlcCisJMiwJCQkJCVwKKwkwLAkJCQkJXAorCTI1NSwJCQkJCVwKKwkweDAwLAkJCQkJXAorCTI1NSwJCQkJCVwKKwkwLAkJCQkJXAorCTAsCQkJCQlcCisJMTAsCQkJCQlcCisJMSwJCQkJCVwKKwkxLAkJCQkJXAorCTEsCQkJCQlcCisJMCwJCQkJCVwKKwkwLAkJCQkJXAorCTI1NQkJCQkJXAorfQorCisvKioqKioqKioqKioqKioqKiBPUklHSU5BTCBDT05URU5UIG9mIG5jcnJlZy5oIGZyb20gRnJlZUJTRCAqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglUaGUgbmNyIDUzYzgxMCByZWdpc3RlciBzdHJ1Y3R1cmUuCisqKgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworc3RydWN0IG5jcl9yZWcgeworLyowMCovICB1OAluY19zY250bDA7ICAgIC8qIGZ1bGwgYXJiLiwgZW5hIHBhcml0eSwgcGFyLT5BVE4gICovCisKKy8qMDEqLyAgdTgJbmNfc2NudGwxOyAgICAvKiBubyByZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAjZGVmaW5lICAgSVNDT04gICAweDEwICAvKiBjb25uZWN0ZWQgdG8gc2NzaQkJICAgICovCisgICAgICAgICNkZWZpbmUgICBDUlNUICAgIDB4MDggIC8qIGZvcmNlIHJlc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICNkZWZpbmUgICBJQVJCICAgIDB4MDIgIC8qIGltbWVkaWF0ZSBhcmJpdHJhdGlvbiAgICAgICAgICAgICovCisKKy8qMDIqLyAgdTgJbmNfc2NudGwyOyAgICAvKiBubyBkaXNjb25uZWN0IGV4cGVjdGVkICAgICAgICAgICAqLworCSNkZWZpbmUgICBTRFUgICAgIDB4ODAgIC8qIGNtZDogZGlzY29ubmVjdCB3aWxsIHJhaXNlIGVycm9yICovCisJI2RlZmluZSAgIENITSAgICAgMHg0MCAgLyogc3RhOiBjaGFpbmVkIG1vZGUgICAgICAgICAgICAgICAgKi8KKwkjZGVmaW5lICAgV1NTICAgICAweDA4ICAvKiBzdGE6IHdpZGUgc2NzaSBzZW5kICAgICAgICAgICBbV10qLworCSNkZWZpbmUgICBXU1IgICAgIDB4MDEgIC8qIHN0YTogd2lkZSBzY3NpIHJlY2VpdmVkICAgICAgIFtXXSovCisKKy8qMDMqLyAgdTgJbmNfc2NudGwzOyAgICAvKiBjbmYgc3lzdGVtIGNsb2NrIGRlcGVuZGVudCAgICAgICAqLworCSNkZWZpbmUgICBFV1MgICAgIDB4MDggIC8qIGNtZDogZW5hYmxlIHdpZGUgc2NzaSAgICAgICAgIFtXXSovCisJI2RlZmluZSAgIFVMVFJBICAgMHg4MCAgLyogY21kOiBVTFRSQSBlbmFibGUgICAgICAgICAgICAgICAgKi8KKwkJCQkvKiBiaXRzIDAtMiwgNyByc3ZkIGZvciBDMTAxMCAgICAgICAqLworCisvKjA0Ki8gIHU4CW5jX3NjaWQ7CS8qIGNuZiBob3N0IGFkYXB0ZXIgc2NzaSBhZGRyZXNzICAgICovCisJI2RlZmluZSAgIFJSRSAgICAgMHg0MCAgLyogci93OmUgZW5hYmxlIHJlc3BvbnNlIHRvIHJlc2VsLiAgKi8KKwkjZGVmaW5lICAgU1JFICAgICAweDIwICAvKiByL3c6ZSBlbmFibGUgcmVzcG9uc2UgdG8gc2VsZWN0ICAqLworCisvKjA1Ki8gIHU4CW5jX3N4ZmVyOwkvKiAjIyMgU3luYyBzcGVlZCBhbmQgY291bnQgICAgICAgICAqLworCQkJCS8qIGJpdHMgNi03IHJzdmQgZm9yIEMxMDEwICAgICAgICAgICovCisKKy8qMDYqLyAgdTgJbmNfc2RpZDsJLyogIyMjIERlc3RpbmF0aW9uLUlEICAgICAgICAgICAgICAgKi8KKworLyowNyovICB1OAluY19ncHJlZzsJLyogPz8/IElPLVBpbnMgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyowOCovICB1OAluY19zZmJyOwkvKiAjIyMgRmlyc3QgYnl0ZSBpbiBwaGFzZSAgICAgICAgICAqLworCisvKjA5Ki8gIHU4CW5jX3NvY2w7CisJI2RlZmluZSAgIENSRVEJICAweDgwCS8qIHIvdzogU0NTSS1SRVEgICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENBQ0sJICAweDQwCS8qIHIvdzogU0NTSS1BQ0sgICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENCU1kJICAweDIwCS8qIHIvdzogU0NTSS1CU1kgICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENTRUwJICAweDEwCS8qIHIvdzogU0NTSS1TRUwgICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENBVE4JICAweDA4CS8qIHIvdzogU0NTSS1BVE4gICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENNU0cJICAweDA0CS8qIHIvdzogU0NTSS1NU0cgICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENDX0QJICAweDAyCS8qIHIvdzogU0NTSS1DX0QgICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENJX08JICAweDAxCS8qIHIvdzogU0NTSS1JX08gICAgICAgICAgICAgICAgICAgICovCisKKy8qMGEqLyAgdTgJbmNfc3NpZDsKKworLyowYiovICB1OAluY19zYmNsOworCisvKjBjKi8gIHU4CW5jX2RzdGF0OworICAgICAgICAjZGVmaW5lICAgREZFICAgICAweDgwICAvKiBzdGE6IGRtYSBmaWZvIGVtcHR5ICAgICAgICAgICAgICAqLworICAgICAgICAjZGVmaW5lICAgTURQRSAgICAweDQwICAvKiBpbnQ6IG1hc3RlciBkYXRhIHBhcml0eSBlcnJvciAgICAqLworICAgICAgICAjZGVmaW5lICAgQkYgICAgICAweDIwICAvKiBpbnQ6IHNjcmlwdDogYnVzIGZhdWx0ICAgICAgICAgICAqLworICAgICAgICAjZGVmaW5lICAgQUJSVCAgICAweDEwICAvKiBpbnQ6IHNjcmlwdDogY29tbWFuZCBhYm9ydGVkICAgICAqLworICAgICAgICAjZGVmaW5lICAgU1NJICAgICAweDA4ICAvKiBpbnQ6IHNjcmlwdDogc2luZ2xlIHN0ZXAgICAgICAgICAqLworICAgICAgICAjZGVmaW5lICAgU0lSICAgICAweDA0ICAvKiBpbnQ6IHNjcmlwdDogaW50ZXJydXB0IGluc3RydWN0LiAqLworICAgICAgICAjZGVmaW5lICAgSUlEICAgICAweDAxICAvKiBpbnQ6IHNjcmlwdDogaWxsZWdhbCBpbnN0cnVjdC4gICAqLworCisvKjBkKi8gIHU4CW5jX3NzdGF0MDsKKyAgICAgICAgI2RlZmluZSAgIElMRiAgICAgMHg4MCAgLyogc3RhOiBkYXRhIGluIFNJREwgcmVnaXN0ZXIgbHNiICAgKi8KKyAgICAgICAgI2RlZmluZSAgIE9SRiAgICAgMHg0MCAgLyogc3RhOiBkYXRhIGluIFNPRFIgcmVnaXN0ZXIgbHNiICAgKi8KKyAgICAgICAgI2RlZmluZSAgIE9MRiAgICAgMHgyMCAgLyogc3RhOiBkYXRhIGluIFNPREwgcmVnaXN0ZXIgbHNiICAgKi8KKyAgICAgICAgI2RlZmluZSAgIEFJUCAgICAgMHgxMCAgLyogc3RhOiBhcmJpdHJhdGlvbiBpbiBwcm9ncmVzcyAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIExPQSAgICAgMHgwOCAgLyogc3RhOiBhcmJpdHJhdGlvbiBsb3N0ICAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFdPQSAgICAgMHgwNCAgLyogc3RhOiBhcmJpdHJhdGlvbiB3b24gICAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIElSU1QgICAgMHgwMiAgLyogc3RhOiBzY3NpIHJlc2V0IHNpZ25hbCAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFNEUCAgICAgMHgwMSAgLyogc3RhOiBzY3NpIHBhcml0eSBzaWduYWwgICAgICAgICAgKi8KKworLyowZSovICB1OAluY19zc3RhdDE7CisJI2RlZmluZSAgIEZGMzIxMCAgMHhmMAkvKiBzdGE6IGJ5dGVzIGluIHRoZSBzY3NpIGZpZm8gICAgICAqLworCisvKjBmKi8gIHU4CW5jX3NzdGF0MjsKKyAgICAgICAgI2RlZmluZSAgIElMRjEgICAgMHg4MCAgLyogc3RhOiBkYXRhIGluIFNJREwgcmVnaXN0ZXIgbXNiW1ddKi8KKyAgICAgICAgI2RlZmluZSAgIE9SRjEgICAgMHg0MCAgLyogc3RhOiBkYXRhIGluIFNPRFIgcmVnaXN0ZXIgbXNiW1ddKi8KKyAgICAgICAgI2RlZmluZSAgIE9MRjEgICAgMHgyMCAgLyogc3RhOiBkYXRhIGluIFNPREwgcmVnaXN0ZXIgbXNiW1ddKi8KKyAgICAgICAgI2RlZmluZSAgIERNICAgICAgMHgwNCAgLyogc3RhOiBESUZGU0VOUyBtaXNtYXRjaCAoODk1LzYgb25seSkgKi8KKyAgICAgICAgI2RlZmluZSAgIExEU0MgICAgMHgwMiAgLyogc3RhOiBkaXNjb25uZWN0ICYgcmVjb25uZWN0ICAgICAgKi8KKworLyoxMCovICB1OAluY19kc2E7CS8qIC0tPiBCYXNlIHBhZ2UgICAgICAgICAgICAgICAgICAgICovCisvKjExKi8gIHU4CW5jX2RzYTE7CisvKjEyKi8gIHU4CW5jX2RzYTI7CisvKjEzKi8gIHU4CW5jX2RzYTM7CisKKy8qMTQqLyAgdTgJbmNfaXN0YXQ7CS8qIC0tPiBNYWluIENvbW1hbmQgYW5kIHN0YXR1cyAgICAgICovCisgICAgICAgICNkZWZpbmUgICBDQUJSVCAgIDB4ODAgIC8qIGNtZDogYWJvcnQgY3VycmVudCBvcGVyYXRpb24gICAgICovCisgICAgICAgICNkZWZpbmUgICBTUlNUICAgIDB4NDAgIC8qIG1vZDogcmVzZXQgY2hpcCAgICAgICAgICAgICAgICAgICovCisgICAgICAgICNkZWZpbmUgICBTSUdQICAgIDB4MjAgIC8qIHIvdzogbWVzc2FnZSBmcm9tIGhvc3QgdG8gbmNyICAgICovCisgICAgICAgICNkZWZpbmUgICBTRU0gICAgIDB4MTAgIC8qIHIvdzogbWVzc2FnZSBiZXR3ZWVuIGhvc3QgKyBuY3IgICovCisgICAgICAgICNkZWZpbmUgICBDT04gICAgIDB4MDggIC8qIHN0YTogY29ubmVjdGVkIHRvIHNjc2kgICAgICAgICAgICovCisgICAgICAgICNkZWZpbmUgICBJTlRGICAgIDB4MDQgIC8qIHN0YTogaW50IG9uIHRoZSBmbHkgKHJlc2V0IGJ5IHdyKSovCisgICAgICAgICNkZWZpbmUgICBTSVAgICAgIDB4MDIgIC8qIHN0YTogc2NzaS1pbnRlcnJ1cHQgICAgICAgICAgICAgICovCisgICAgICAgICNkZWZpbmUgICBESVAgICAgIDB4MDEgIC8qIHN0YTogaG9zdC9zY3JpcHQgaW50ZXJydXB0ICAgICAgICovCisKKy8qMTUqLyAgdTgJbmNfaXN0YXQxOwkvKiA4OTYgYW5kIGxhdGVyIGNvcmVzIG9ubHkgKi8KKyAgICAgICAgI2RlZmluZSAgIEZMU0ggICAgMHgwNCAgLyogc3RhOiBjaGlwIGlzIGZsdXNoaW5nICAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFNSVU4gICAgMHgwMiAgLyogc3RhOiBzY3JpcHRzIGFyZSBydW5uaW5nICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFNJUlFEICAgMHgwMSAgLyogci93OiBkaXNhYmxlIElOVCBwaW4gICAgICAgICAgICAgKi8KKworLyoxNiovICB1OAluY19tYm94MDsJLyogODk2IGFuZCBsYXRlciBjb3JlcyBvbmx5ICovCisvKjE3Ki8gIHU4CW5jX21ib3gxOwkvKiA4OTYgYW5kIGxhdGVyIGNvcmVzIG9ubHkgKi8KKworLyoxOCovCXU4CW5jX2N0ZXN0MDsKKwkjZGVmaW5lICAgRUhQICAgICAweDA0CS8qIDcyMCBldmVuIGhvc3QgcGFyaXR5ICAgICAgICAgICAgICovCisvKjE5Ki8gIHU4CW5jX2N0ZXN0MTsKKworLyoxYSovICB1OAluY19jdGVzdDI7CisJI2RlZmluZSAgIENTSUdQICAgMHg0MAorCQkJCS8qIGJpdHMgMC0yLDcgcnN2ZCBmb3IgQzEwMTAgICAgICAgICovCisKKy8qMWIqLyAgdTgJbmNfY3Rlc3QzOworCSNkZWZpbmUgICBGTEYgICAgIDB4MDggIC8qIGNtZDogZmx1c2ggZG1hIGZpZm8gICAgICAgICAgICAgICovCisJI2RlZmluZSAgIENMRgkgIDB4MDQJLyogY21kOiBjbGVhciBkbWEgZmlmbwkJICAgICovCisJI2RlZmluZSAgIEZNICAgICAgMHgwMiAgLyogbW9kOiBmZXRjaCBwaW4gbW9kZSAgICAgICAgICAgICAgKi8KKwkjZGVmaW5lICAgV1JJRSAgICAweDAxICAvKiBtb2Q6IHdyaXRlIGFuZCBpbnZhbGlkYXRlIGVuYWJsZSAqLworCQkJCS8qIGJpdHMgNC03IHJzdmQgZm9yIEMxMDEwICAgICAgICAgICovCisKKy8qMWMqLyAgdTMyICAgIG5jX3RlbXA7CS8qICMjIyBUZW1wb3Jhcnkgc3RhY2sgICAgICAgICAgICAgICovCisKKy8qMjAqLwl1OAluY19kZmlmbzsKKy8qMjEqLyAgdTgJbmNfY3Rlc3Q0OworCSNkZWZpbmUgICBNVVggICAgIDB4ODAgIC8qIDcyMCBob3N0IGJ1cyBtdWx0aXBsZXggbW9kZSAgICAgICovCisJI2RlZmluZSAgIEJESVMgICAgMHg4MCAgLyogbW9kOiBidXJzdCBkaXNhYmxlICAgICAgICAgICAgICAgKi8KKwkjZGVmaW5lICAgTVBFRSAgICAweDA4ICAvKiBtb2Q6IG1hc3RlciBwYXJpdHkgZXJyb3IgZW5hYmxlICAqLworCisvKjIyKi8gIHU4CW5jX2N0ZXN0NTsKKwkjZGVmaW5lICAgREZTICAgICAweDIwICAvKiBtb2Q6IGRtYSBmaWZvIHNpemUgICAgICAgICAgICAgICAqLworCQkJCS8qIGJpdHMgMC0xLCAzLTcgcnN2ZCBmb3IgQzEwMTAgICAgICAgICAgKi8KKy8qMjMqLyAgdTgJbmNfY3Rlc3Q2OworCisvKjI0Ki8gIHUzMiAgICBuY19kYmM7CS8qICMjIyBCeXRlIGNvdW50IGFuZCBjb21tYW5kICAgICAgICovCisvKjI4Ki8gIHUzMiAgICBuY19kbmFkOwkvKiAjIyMgTmV4dCBjb21tYW5kIHJlZ2lzdGVyICAgICAgICAqLworLyoyYyovICB1MzIgICAgbmNfZHNwOwkvKiAtLT4gU2NyaXB0IFBvaW50ZXIgICAgICAgICAgICAgICAqLworLyozMCovICB1MzIgICAgbmNfZHNwczsJLyogLS0+IFNjcmlwdCBwb2ludGVyIHNhdmUvb3Bjb2RlIzIgKi8KKworLyozNCovICB1OAluY19zY3JhdGNoYTsgIC8qIFRlbXBvcmFyeSByZWdpc3RlciBhICAgICAgICAgICAgKi8KKy8qMzUqLyAgdTgJbmNfc2NyYXRjaGExOworLyozNiovICB1OAluY19zY3JhdGNoYTI7CisvKjM3Ki8gIHU4CW5jX3NjcmF0Y2hhMzsKKworLyozOCovICB1OAluY19kbW9kZTsKKwkjZGVmaW5lICAgQkxfMiAgICAweDgwICAvKiBtb2Q6IGJ1cnN0IGxlbmd0aCBzaGlmdCB2YWx1ZSArMiAqLworCSNkZWZpbmUgICBCTF8xICAgIDB4NDAgIC8qIG1vZDogYnVyc3QgbGVuZ3RoIHNoaWZ0IHZhbHVlICsxICovCisJI2RlZmluZSAgIEVSTCAgICAgMHgwOCAgLyogbW9kOiBlbmFibGUgcmVhZCBsaW5lICAgICAgICAgICAgKi8KKwkjZGVmaW5lICAgRVJNUCAgICAweDA0ICAvKiBtb2Q6IGVuYWJsZSByZWFkIG11bHRpcGxlICAgICAgICAqLworCSNkZWZpbmUgICBCT0YgICAgIDB4MDIgIC8qIG1vZDogYnVyc3Qgb3AgY29kZSBmZXRjaCAgICAgICAgICovCisKKy8qMzkqLyAgdTgJbmNfZGllbjsKKy8qM2EqLyAgdTgJbmNfc2JyOworCisvKjNiKi8gIHU4CW5jX2RjbnRsOwkvKiAtLT4gU2NyaXB0IGV4ZWN1dGlvbiBjb250cm9sICAgICAqLworCSNkZWZpbmUgICBDTFNFICAgIDB4ODAgIC8qIG1vZDogY2FjaGUgbGluZSBzaXplIGVuYWJsZSAgICAgICovCisJI2RlZmluZSAgIFBGRiAgICAgMHg0MCAgLyogY21kOiBwcmUtZmV0Y2ggZmx1c2ggICAgICAgICAgICAgKi8KKwkjZGVmaW5lICAgUEZFTiAgICAweDIwICAvKiBtb2Q6IHByZS1mZXRjaCBlbmFibGUgICAgICAgICAgICAqLworCSNkZWZpbmUgICBFQSAgICAgIDB4MjAgIC8qIG1vZDogNzIwIGVuYWJsZS1hY2sgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIFNTTSAgICAgMHgxMCAgLyogbW9kOiBzaW5nbGUgc3RlcCBtb2RlICAgICAgICAgICAgKi8KKwkjZGVmaW5lICAgSVJRTSAgICAweDA4ICAvKiBtb2Q6IGlycSBtb2RlICgxID0gdG90ZW0gcG9sZSAhKSAqLworCSNkZWZpbmUgICBTVEQgICAgIDB4MDQgIC8qIGNtZDogc3RhcnQgZG1hIG1vZGUgICAgICAgICAgICAgICovCisJI2RlZmluZSAgIElSUUQgICAgMHgwMiAgLyogbW9kOiBpcnEgZGlzYWJsZSAgICAgICAgICAgICAgICAgKi8KKyAJI2RlZmluZQkgIE5PQ09NICAgMHgwMQkvKiBjbWQ6IHByb3RlY3Qgc2ZiciB3aGlsZSByZXNlbGVjdCAqLworCQkJCS8qIGJpdHMgMC0xIHJzdmQgZm9yIEMxMDEwICAgICAgICAgICovCisKKy8qM2MqLyAgdTMyCW5jX2FkZGVyOworCisvKjQwKi8gIHUxNgluY19zaWVuOwkvKiAtLT46IGludGVycnVwdCBlbmFibGUgICAgICAgICAgICAqLworLyo0MiovICB1MTYJbmNfc2lzdDsJLyogPC0tOiBpbnRlcnJ1cHQgc3RhdHVzICAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFNCTUMgICAgMHgxMDAwLyogc3RhOiBTQ1NJIEJ1cyBNb2RlIENoYW5nZSAoODk1LzYgb25seSkgKi8KKyAgICAgICAgI2RlZmluZSAgIFNUTyAgICAgMHgwNDAwLyogc3RhOiB0aW1lb3V0IChzZWxlY3QpICAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIEdFTiAgICAgMHgwMjAwLyogc3RhOiB0aW1lb3V0IChnZW5lcmFsKSAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIEhUSCAgICAgMHgwMTAwLyogc3RhOiB0aW1lb3V0IChoYW5kc2hha2UpICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIE1BICAgICAgMHg4MCAgLyogc3RhOiBwaGFzZSBtaXNtYXRjaCAgICAgICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIENNUCAgICAgMHg0MCAgLyogc3RhOiBhcmJpdHJhdGlvbiBjb21wbGV0ZSAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFNFTCAgICAgMHgyMCAgLyogc3RhOiBzZWxlY3RlZCBieSBhbm90aGVyIGRldmljZSAgKi8KKyAgICAgICAgI2RlZmluZSAgIFJTTCAgICAgMHgxMCAgLyogc3RhOiByZXNlbGVjdGVkIGJ5IGFub3RoZXIgZGV2aWNlKi8KKyAgICAgICAgI2RlZmluZSAgIFNHRSAgICAgMHgwOCAgLyogc3RhOiBncm9zcyBlcnJvciAob3Zlci91bmRlcmZsb3cpKi8KKyAgICAgICAgI2RlZmluZSAgIFVEQyAgICAgMHgwNCAgLyogc3RhOiB1bmV4cGVjdGVkIGRpc2Nvbm5lY3QgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFJTVCAgICAgMHgwMiAgLyogc3RhOiBzY3NpIGJ1cyByZXNldCBkZXRlY3RlZCAgICAgKi8KKyAgICAgICAgI2RlZmluZSAgIFBBUiAgICAgMHgwMSAgLyogc3RhOiBzY3NpIHBhcml0eSBlcnJvciAgICAgICAgICAgKi8KKworLyo0NCovICB1OAluY19zbHBhcjsKKy8qNDUqLyAgdTgJbmNfc3dpZGU7CisvKjQ2Ki8gIHU4CW5jX21hY250bDsKKy8qNDcqLyAgdTgJbmNfZ3BjbnRsOworLyo0OCovICB1OAluY19zdGltZTA7ICAgIC8qIGNtZDogdGltZW91dCBmb3Igc2VsZWN0JmhhbmRzaGFrZSovCisvKjQ5Ki8gIHU4CW5jX3N0aW1lMTsgICAgLyogY21kOiB0aW1lb3V0IHVzZXIgZGVmaW5lZCAgICAgICAgKi8KKy8qNGEqLyAgdTE2ICAgbmNfcmVzcGlkOyAgICAvKiBzdGE6IFJlc2VsZWN0LUlEcyAgICAgICAgICAgICAgICAqLworCisvKjRjKi8gIHU4CW5jX3N0ZXN0MDsKKworLyo0ZCovICB1OAluY19zdGVzdDE7CisJI2RlZmluZSAgIFNDTEsgICAgMHg4MAkvKiBVc2UgdGhlIFBDSSBjbG9jayBhcyBTQ1NJIGNsb2NrCSovCisJI2RlZmluZSAgIERCTEVOICAgMHgwOAkvKiBjbG9jayBkb3VibGVyIHJ1bm5pbmcJCSovCisJI2RlZmluZSAgIERCTFNFTCAgMHgwNAkvKiBjbG9jayBkb3VibGVyIHNlbGVjdGVkCQkqLworICAKKworLyo0ZSovICB1OAluY19zdGVzdDI7CisJI2RlZmluZSAgIFJPRiAgICAgMHg0MAkvKiByZXNldCBzY3NpIG9mZnNldCAoYWZ0ZXIgZ3Jvc3MgZXJyb3IhKSAqLworCSNkZWZpbmUgICBESUYgICAgIDB4MjAgIC8qIDcyMCBTQ1NJIGRpZmZlcmVudGlhbCBtb2RlICAgICAgICAgICAgICovCisJI2RlZmluZSAgIEVYVCAgICAgMHgwMiAgLyogZXh0ZW5kZWQgZmlsdGVyaW5nICAgICAgICAgICAgICAgICAgICAgKi8KKworLyo0ZiovICB1OAluY19zdGVzdDM7CisJI2RlZmluZSAgIFRFICAgICAweDgwCS8qIGM6IHRvbGVyQW50IGVuYWJsZSAqLworCSNkZWZpbmUgICBIU0MgICAgMHgyMAkvKiBjOiBIYWx0IFNDU0kgQ2xvY2sgKi8KKwkjZGVmaW5lICAgQ1NGICAgIDB4MDIJLyogYzogY2xlYXIgc2NzaSBmaWZvICovCisKKy8qNTAqLyAgdTE2ICAgbmNfc2lkbDsJLyogTG93bGV2ZWw6IGxhdGNoZWQgZnJvbSBzY3NpIGRhdGEgKi8KKy8qNTIqLyAgdTgJbmNfc3Rlc3Q0OworCSNkZWZpbmUgICBTTU9ERSAgMHhjMAkvKiBTQ1NJIGJ1cyBtb2RlICAgICAgKDg5NS82IG9ubHkpICovCisJI2RlZmluZSAgICBTTU9ERV9IVkQgMHg0MAkvKiBIaWdoIFZvbHRhZ2UgRGlmZmVyZW50aWFsICAgICAgICovCisJI2RlZmluZSAgICBTTU9ERV9TRSAgMHg4MAkvKiBTaW5nbGUgRW5kZWQgICAgICAgICAgICAgICAgICAgICovCisJI2RlZmluZSAgICBTTU9ERV9MVkQgMHhjMAkvKiBMb3cgVm9sdGFnZSBEaWZmZXJlbnRpYWwgICAgICAgICovCisJI2RlZmluZSAgIExDS0ZSUSAweDIwCS8qIEZyZXF1ZW5jeSBMb2NrICg4OTUvNiBvbmx5KSAgICAgKi8KKwkJCQkvKiBiaXRzIDAtNSByc3ZkIGZvciBDMTAxMCAgICAgICAgICAqLworCisvKjUzKi8gIHU4CW5jXzUzXzsKKy8qNTQqLyAgdTE2CW5jX3NvZGw7CS8qIExvd2xldmVsOiBkYXRhIG91dCB0byBzY3NpIGRhdGEgICovCisvKjU2Ki8JdTgJbmNfY2NudGwwOwkvKiBDaGlwIENvbnRyb2wgMCAoODk2KSAgICAgICAgICAgICAqLworCSNkZWZpbmUgICBFTlBNSiAgMHg4MAkvKiBFbmFibGUgUGhhc2UgTWlzbWF0Y2ggSnVtcCAgICAgICAqLworCSNkZWZpbmUgICBQTUpDVEwgMHg0MAkvKiBQaGFzZSBNaXNtYXRjaCBKdW1wIENvbnRyb2wgICAgICAqLworCSNkZWZpbmUgICBFTk5ESiAgMHgyMAkvKiBFbmFibGUgTm9uIERhdGEgUE0gSnVtcCAgICAgICAgICAqLworCSNkZWZpbmUgICBESVNGQyAgMHgxMAkvKiBEaXNhYmxlIEF1dG8gRklGTyBDbGVhciAgICAgICAgICAqLworCSNkZWZpbmUgICBESUxTICAgMHgwMgkvKiBEaXNhYmxlIEludGVybmFsIExvYWQvU3RvcmUgICAgICAqLworCSNkZWZpbmUgICBEUFIgICAgMHgwMQkvKiBEaXNhYmxlIFBpcGUgUmVxICAgICAgICAgICAgICAgICAqLworCisvKjU3Ki8JdTgJbmNfY2NudGwxOwkvKiBDaGlwIENvbnRyb2wgMSAoODk2KSAgICAgICAgICAgICAqLworCSNkZWZpbmUgICBaTU9EICAgMHg4MAkvKiBIaWdoIEltcGVkYW5jZSBNb2RlICAgICAgICAgICAgICAqLworCSNkZWZpbmUJICBESUMJIDB4MTAJLyogRGlzYWJsZSBJbnRlcm5hbCBDeWNsZXMJICAgICovCisJI2RlZmluZSAgIEREQUMgICAweDA4CS8qIERpc2FibGUgRHVhbCBBZGRyZXNzIEN5Y2xlICAgICAgICovCisJI2RlZmluZSAgIFhUSU1PRCAweDA0CS8qIDY0LWJpdCBUYWJsZSBJbmQuIEluZGV4aW5nIE1vZGUgICovCisJI2RlZmluZSAgIEVYVElCTVYgMHgwMgkvKiBFbmFibGUgNjQtYml0IFRhYmxlIEluZC4gQk1PViAgICAqLworCSNkZWZpbmUgICBFWERCTVYgMHgwMQkvKiBFbmFibGUgNjQtYml0IERpcmVjdCBCTU9WICAgICAgICAqLworCisvKjU4Ki8gIHUxNgluY19zYmRsOwkvKiBMb3dsZXZlbDogZGF0YSBmcm9tIHNjc2kgZGF0YSAgICAqLworLyo1YSovICB1MTYJbmNfNWFfOworCisvKjVjKi8gIHU4CW5jX3NjcjA7CS8qIFdvcmtpbmcgcmVnaXN0ZXIgQiAgICAgICAgICAgICAgICovCisvKjVkKi8gIHU4CW5jX3NjcjE7CS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKjVlKi8gIHU4CW5jX3NjcjI7CS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKjVmKi8gIHU4CW5jX3NjcjM7CS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qNjAqLyAgdTgJbmNfc2NyeFs2NF07CS8qIFdvcmtpbmcgcmVnaXN0ZXIgQy1SICAgICAgICAgICAgICovCisvKmEwKi8JdTMyCW5jX21tcnM7CS8qIE1lbW9yeSBNb3ZlIFJlYWQgU2VsZWN0b3IgICAgICAgICovCisvKmE0Ki8JdTMyCW5jX21td3M7CS8qIE1lbW9yeSBNb3ZlIFdyaXRlIFNlbGVjdG9yICAgICAgICovCisvKmE4Ki8JdTMyCW5jX3NmczsJCS8qIFNjcmlwdCBGZXRjaCBTZWxlY3RvciAgICAgICAgICAgICovCisvKmFjKi8JdTMyCW5jX2RyczsJCS8qIERTQSBSZWxhdGl2ZSBTZWxlY3RvciAgICAgICAgICAgICovCisvKmIwKi8JdTMyCW5jX3NibXM7CS8qIFN0YXRpYyBCbG9jayBNb3ZlIFNlbGVjdG9yICAgICAgICovCisvKmI0Ki8JdTMyCW5jX2RibXM7CS8qIER5bmFtaWMgQmxvY2sgTW92ZSBTZWxlY3RvciAgICAgICovCisvKmI4Ki8JdTMyCW5jX2RuYWQ2NDsJLyogRE1BIE5leHQgQWRkcmVzcyA2NCAgICAgICAgICAgICAgKi8KKy8qYmMqLwl1MTYJbmNfc2NudGw0OwkvKiBDMTAxMCBvbmx5ICAgICAgICAgICAgICAgICAgICAgICAqLworCSNkZWZpbmUgICBVM0VOICAgMHg4MAkvKiBFbmFibGUgVWx0cmEgMyAgICAgICAgICAgICAgICAgICAqLworCSNkZWZpbmUgICBBSVBFTgkgMHg0MCAgIC8qIEFsbG93IGNoZWNrIHVwcGVyIGJ5dGUgbGFuZXMgICAgICovCisJI2RlZmluZSAgIFhDTEtIX0RUIDB4MDggLyogRXh0cmEgY2xvY2sgb2YgZGF0YSBob2xkIG9uIERUCisJCQkJCXRyYW5zZmVyIGVkZ2UJICAgICAgICAgICAgKi8KKwkjZGVmaW5lICAgWENMS0hfU1QgMHgwNCAvKiBFeHRyYSBjbG9jayBvZiBkYXRhIGhvbGQgb24gU1QKKwkJCQkJdHJhbnNmZXIgZWRnZQkgICAgICAgICAgICAqLworCisvKmJlKi8gIHU4CW5jX2FpcGNudGwwOwkvKiBFcGF0IENvbnRyb2wgMSBDMTAxMCBvbmx5ICAgICAgICAqLworLypiZiovICB1OAluY19haXBjbnRsMTsJLyogQUlQIENvbnRyb2wgQzEwMTBfNjYgT25seSAgICAgICAgKi8KKworLypjMCovCXUzMgluY19wbWphZDE7CS8qIFBoYXNlIE1pc21hdGNoIEp1bXAgQWRkcmVzcyAxICAgICovCisvKmM0Ki8JdTMyCW5jX3BtamFkMjsJLyogUGhhc2UgTWlzbWF0Y2ggSnVtcCBBZGRyZXNzIDIgICAgKi8KKy8qYzgqLwl1OAluY19yYmM7CQkvKiBSZW1haW5pbmcgQnl0ZSBDb3VudCAgICAgICAgICAgICAqLworLypjOSovCXU4CW5jX3JiYzE7CS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKmNhKi8JdTgJbmNfcmJjMjsJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qY2IqLwl1OAluY19yYmMzOwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKmNjKi8JdTgJbmNfdWE7CQkvKiBVcGRhdGVkIEFkZHJlc3MgICAgICAgICAgICAgICAgICAqLworLypjZCovCXU4CW5jX3VhMTsJCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKmNlKi8JdTgJbmNfdWEyOwkJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qY2YqLwl1OAluY191YTM7CQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLypkMCovCXUzMgluY19lc2E7CQkvKiBFbnRyeSBTdG9yYWdlIEFkZHJlc3MgICAgICAgICAgICAqLworLypkNCovCXU4CW5jX2lhOwkJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyAgICAgICAgICAgICAgKi8KKy8qZDUqLwl1OAluY19pYTE7CisvKmQ2Ki8JdTgJbmNfaWEyOworLypkNyovCXU4CW5jX2lhMzsKKy8qZDgqLwl1MzIJbmNfc2JjOwkJLyogU0NTSSBCeXRlIENvdW50ICgzIGJ5dGVzIG9ubHkpICAgKi8KKy8qZGMqLwl1MzIJbmNfY3NiYzsJLyogQ3VtdWxhdGl2ZSBTQ1NJIEJ5dGUgQ291bnQgICAgICAgKi8KKworCQkJCS8qIEZvbGxvd2luZyBmb3IgQzEwMTAgb25seSAgICAgICAgICovCisvKmUwKi8gIHUxNgluY19jcmNwYWQ7CS8qIENSQyBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICovCisvKmUyKi8gIHU4CW5jX2NyY2NudGwwOwkvKiBDUkMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAqLworCSNkZWZpbmUgICBTTkRDUkMgIDB4MTAJLyogU2VuZCBDUkMgUmVxdWVzdCAgICAgICAgICAgICAgICAgKi8KKy8qZTMqLyAgdTgJbmNfY3JjY250bDE7CS8qIENSQyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICovCisvKmU0Ki8gIHUzMgluY19jcmNkYXRhOwkvKiBDUkMgZGF0YSByZWdpc3RlciAgICAgICAgICAgICAgICAqLyAKKy8qZTgqLyAgdTMyCW5jX2U4XzsJCS8qIHJzdmQgCQkJICAgICovCisvKmVjKi8gIHUzMgluY19lY187CQkvKiByc3ZkIAkJCSAgICAqLworLypmMCovICB1MTYJbmNfZGZiYzsJLyogRE1BIEZJRk8gYnl0ZSBjb3VudCAgICAgICAgICAgICAgKi8gCisKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglVdGlsaXR5IG1hY3JvcyBmb3IgdGhlIHNjcmlwdC4KKyoqCisqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjZGVmaW5lIFJFR0oocCxyKSAob2Zmc2V0b2Yoc3RydWN0IG5jcl9yZWcsIHAgIyMgcikpCisjZGVmaW5lIFJFRyhyKSBSRUdKIChuY18sIHIpCisKK3R5cGVkZWYgdTMyIG5jcmNtZDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioKKyoqCVNDU0kgcGhhc2VzCisqKgorKioJRFQgcGhhc2VzIGlsbGVnYWwgZm9yIG5jciBkcml2ZXIuCisqKgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2RlZmluZQlTQ1JfREFUQV9PVVQJMHgwMDAwMDAwMAorI2RlZmluZQlTQ1JfREFUQV9JTgkweDAxMDAwMDAwCisjZGVmaW5lCVNDUl9DT01NQU5ECTB4MDIwMDAwMDAKKyNkZWZpbmUJU0NSX1NUQVRVUwkweDAzMDAwMDAwCisjZGVmaW5lIFNDUl9EVF9EQVRBX09VVAkweDA0MDAwMDAwCisjZGVmaW5lIFNDUl9EVF9EQVRBX0lOCTB4MDUwMDAwMDAKKyNkZWZpbmUgU0NSX01TR19PVVQJMHgwNjAwMDAwMAorI2RlZmluZSBTQ1JfTVNHX0lOICAgICAgMHgwNzAwMDAwMAorCisjZGVmaW5lIFNDUl9JTEdfT1VUCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0NSX0lMR19JTgkweDA1MDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglEYXRhIHRyYW5zZmVyIHZpYSBTQ1NJLgorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglNT1ZFX0FCUyAoTEVOKQorKioJPDxzdGFydCBhZGRyZXNzPj4KKyoqCisqKglNT1ZFX0lORCAoTEVOKQorKioJPDxkbmFkX29mZnNldD4+CisqKgorKioJTU9WRV9UQkwKKyoqCTw8ZG5hZF9vZmZzZXQ+PgorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNkZWZpbmUgT1BDX01PVkUgICAgICAgICAgMHgwODAwMDAwMAorCisjZGVmaW5lIFNDUl9NT1ZFX0FCUyhsKSAoKDB4MDAwMDAwMDAgfCBPUENfTU9WRSkgfCAobCkpCisjZGVmaW5lIFNDUl9NT1ZFX0lORChsKSAoKDB4MjAwMDAwMDAgfCBPUENfTU9WRSkgfCAobCkpCisjZGVmaW5lIFNDUl9NT1ZFX1RCTCAgICAgKDB4MTAwMDAwMDAgfCBPUENfTU9WRSkKKworI2RlZmluZSBTQ1JfQ0hNT1ZfQUJTKGwpICgoMHgwMDAwMDAwMCkgfCAobCkpCisjZGVmaW5lIFNDUl9DSE1PVl9JTkQobCkgKCgweDIwMDAwMDAwKSB8IChsKSkKKyNkZWZpbmUgU0NSX0NITU9WX1RCTCAgICAgKDB4MTAwMDAwMDApCisKK3N0cnVjdCBzY3JfdGJsbW92ZSB7CisgICAgICAgIHUzMiAgc2l6ZTsKKyAgICAgICAgdTMyICBhZGRyOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioKKyoqCVNlbGVjdGlvbgorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglTRUxfQUJTIHwgU0NSX0lEICgwLi4xNSkgICAgWyB8IFJFTF9KTVBdCisqKgk8PGFsdGVybmF0ZV9hZGRyZXNzPj4KKyoqCisqKglTRUxfVEJMIHwgPDwgZG5hZF9vZmZzZXQ+PiAgWyB8IFJFTF9KTVBdCisqKgk8PGFsdGVybmF0ZV9hZGRyZXNzPj4KKyoqCisqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjZGVmaW5lCVNDUl9TRUxfQUJTCTB4NDAwMDAwMDAKKyNkZWZpbmUJU0NSX1NFTF9BQlNfQVROCTB4NDEwMDAwMDAKKyNkZWZpbmUJU0NSX1NFTF9UQkwJMHg0MjAwMDAwMAorI2RlZmluZQlTQ1JfU0VMX1RCTF9BVE4JMHg0MzAwMDAwMAorCisKKyNpZmRlZiBTQ1NJX05DUl9CSUdfRU5ESUFOCitzdHJ1Y3Qgc2NyX3RibHNlbCB7CisgICAgICAgIHU4CXNlbF9zY250bDM7CisgICAgICAgIHU4CXNlbF9pZDsKKyAgICAgICAgdTgJc2VsX3N4ZmVyOworICAgICAgICB1OAlzZWxfc2NudGw0OwkKK307CisjZWxzZQorc3RydWN0IHNjcl90YmxzZWwgeworICAgICAgICB1OAlzZWxfc2NudGw0OwkKKyAgICAgICAgdTgJc2VsX3N4ZmVyOworICAgICAgICB1OAlzZWxfaWQ7CisgICAgICAgIHU4CXNlbF9zY250bDM7Cit9OworI2VuZGlmCisKKyNkZWZpbmUgU0NSX0pNUF9SRUwgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgU0NSX0lEKGlkKQkoKCh1MzIpKGlkKSkgPDwgMTYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglXYWl0aW5nIGZvciBEaXNjb25uZWN0IG9yIFJlc2VsZWN0CisqKgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioKKyoqCVdBSVRfRElTQworKioJZHVtbXk6IDw8YWx0ZXJuYXRlX2FkZHJlc3M+PgorKioKKyoqCVdBSVRfUkVTRUwKKyoqCTw8YWx0ZXJuYXRlX2FkZHJlc3M+PgorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNkZWZpbmUJU0NSX1dBSVRfRElTQwkweDQ4MDAwMDAwCisjZGVmaW5lIFNDUl9XQUlUX1JFU0VMICAweDUwMDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglCaXQgU2V0IC8gUmVzZXQKKyoqCisqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKgorKioJU0VUIChmbGFncyB7fC4uIH0pCisqKgorKioJQ0xSIChmbGFncyB7fC4uIH0pCisqKgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2RlZmluZSBTQ1JfU0VUKGYpICAgICAoMHg1ODAwMDAwMCB8IChmKSkKKyNkZWZpbmUgU0NSX0NMUihmKSAgICAgKDB4NjAwMDAwMDAgfCAoZikpCisKKyNkZWZpbmUJU0NSX0NBUlJZCTB4MDAwMDA0MDAKKyNkZWZpbmUJU0NSX1RSRwkJMHgwMDAwMDIwMAorI2RlZmluZQlTQ1JfQUNLCQkweDAwMDAwMDQwCisjZGVmaW5lCVNDUl9BVE4JCTB4MDAwMDAwMDgKKworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioKKyoqCU1lbW9yeSB0byBtZW1vcnkgbW92ZQorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglDT1BZIChieXRlY291bnQpCisqKgk8PCBzb3VyY2VfYWRkcmVzcyA+PgorKioJPDwgZGVzdGluYXRpb25fYWRkcmVzcyA+PgorKioKKyoqCVNDUl9DT1BZICAgc2V0cyB0aGUgTk8gRkxVU0ggb3B0aW9uIGJ5IGRlZmF1bHQuCisqKglTQ1JfQ09QWV9GIGRvZXMgbm90IHNldCB0aGlzIG9wdGlvbi4KKyoqCisqKglGb3IgY2hpcHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdGhpcyBvcHRpb24sCisqKgluY3JfY29weV9hbmRfYmluZCgpIHdpbGwgcmVtb3ZlIHRoaXMgYml0LgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2RlZmluZSBTQ1JfTk9fRkxVU0ggMHgwMTAwMDAwMAorCisjZGVmaW5lIFNDUl9DT1BZKG4pICgweGMwMDAwMDAwIHwgU0NSX05PX0ZMVVNIIHwgKG4pKQorI2RlZmluZSBTQ1JfQ09QWV9GKG4pICgweGMwMDAwMDAwIHwgKG4pKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKgorKioJUmVnaXN0ZXIgbW92ZSBhbmQgYmluYXJ5IG9wZXJhdGlvbnMKKyoqCisqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKgorKioJU0ZCUl9SRUcgKHJlZywgb3AsIGRhdGEpICAgICAgICByZWcgID0gU0ZCUiBvcCBkYXRhCisqKgk8PCAwID4+CisqKgorKioJUkVHX1NGQlIgKHJlZywgb3AsIGRhdGEpICAgICAgICBTRkJSID0gcmVnIG9wIGRhdGEKKyoqCTw8IDAgPj4KKyoqCisqKglSRUdfUkVHICAocmVnLCBvcCwgZGF0YSkgICAgICAgIHJlZyAgPSByZWcgb3AgZGF0YQorKioJPDwgMCA+PgorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCU9uIDgxMEEsIDg2MCwgODI1QSwgODc1LCA4OTUgYW5kIDg5NiBjaGlwcyB0aGUgY29udGVudCAKKyoqCW9mIFNGQlIgcmVnaXN0ZXIgY2FuIGJlIHVzZWQgYXMgZGF0YSAoU0NSX1NGQlJfREFUQSkuCisqKglUaGUgODk2IGhhcyBhZGRpdGlvbm5hbCBJTyByZWdpc3RlcnMgc3RhcnRpbmcgYXQgCisqKglvZmZzZXQgMHg4MC4gQml0IDcgb2YgcmVnaXN0ZXIgb2Zmc2V0IGlzIHN0b3JlZCBpbiAKKyoqCWJpdCA3IG9mIHRoZSBTQ1JJUFRTIGluc3RydWN0aW9uIGZpcnN0IERXT1JELgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2RlZmluZSBTQ1JfUkVHX09GUyhvZnMpICgoKChvZnMpICYgMHg3ZikgPDwgMTZ1bCkgKyAoKG9mcykgJiAweDgwKSkgCisKKyNkZWZpbmUgU0NSX1NGQlJfUkVHKHJlZyxvcCxkYXRhKSBcCisgICAgICAgICgweDY4MDAwMDAwIHwgKFNDUl9SRUdfT0ZTKFJFRyhyZWcpKSkgfCAob3ApIHwgKCgoZGF0YSkmMHhmZik8PDh1bCkpCisKKyNkZWZpbmUgU0NSX1JFR19TRkJSKHJlZyxvcCxkYXRhKSBcCisgICAgICAgICgweDcwMDAwMDAwIHwgKFNDUl9SRUdfT0ZTKFJFRyhyZWcpKSkgfCAob3ApIHwgKCgoZGF0YSkmMHhmZik8PDh1bCkpCisKKyNkZWZpbmUgU0NSX1JFR19SRUcocmVnLG9wLGRhdGEpIFwKKyAgICAgICAgKDB4NzgwMDAwMDAgfCAoU0NSX1JFR19PRlMoUkVHKHJlZykpKSB8IChvcCkgfCAoKChkYXRhKSYweGZmKTw8OHVsKSkKKworCisjZGVmaW5lICAgICAgU0NSX0xPQUQgICAweDAwMDAwMDAwCisjZGVmaW5lICAgICAgU0NSX1NITCAgICAweDAxMDAwMDAwCisjZGVmaW5lICAgICAgU0NSX09SICAgICAweDAyMDAwMDAwCisjZGVmaW5lICAgICAgU0NSX1hPUiAgICAweDAzMDAwMDAwCisjZGVmaW5lICAgICAgU0NSX0FORCAgICAweDA0MDAwMDAwCisjZGVmaW5lICAgICAgU0NSX1NIUiAgICAweDA1MDAwMDAwCisjZGVmaW5lICAgICAgU0NSX0FERCAgICAweDA2MDAwMDAwCisjZGVmaW5lICAgICAgU0NSX0FEREMgICAweDA3MDAwMDAwCisKKyNkZWZpbmUgICAgICBTQ1JfU0ZCUl9EQVRBICAgKDB4MDA4MDAwMDA+Pjh1bCkJLyogVXNlIFNGQlIgYXMgZGF0YSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKgorKioJRlJPTV9SRUcgKHJlZykJCSAgU0ZCUiA9IHJlZworKioJPDwgMCA+PgorKioKKyoqCVRPX1JFRwkgKHJlZykJCSAgcmVnICA9IFNGQlIKKyoqCTw8IDAgPj4KKyoqCisqKglMT0FEX1JFRyAocmVnLCBkYXRhKQkgIHJlZyAgPSA8ZGF0YT4KKyoqCTw8IDAgPj4KKyoqCisqKglMT0FEX1NGQlIoZGF0YSkgCSAgU0ZCUiA9IDxkYXRhPgorKioJPDwgMCA+PgorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNkZWZpbmUJU0NSX0ZST01fUkVHKHJlZykgXAorCVNDUl9SRUdfU0ZCUihyZWcsU0NSX09SLDApCisKKyNkZWZpbmUJU0NSX1RPX1JFRyhyZWcpIFwKKwlTQ1JfU0ZCUl9SRUcocmVnLFNDUl9PUiwwKQorCisjZGVmaW5lCVNDUl9MT0FEX1JFRyhyZWcsZGF0YSkgXAorCVNDUl9SRUdfUkVHKHJlZyxTQ1JfTE9BRCxkYXRhKQorCisjZGVmaW5lIFNDUl9MT0FEX1NGQlIoZGF0YSkgXAorICAgICAgICAoU0NSX1JFR19TRkJSIChncHJlZywgU0NSX0xPQUQsIGRhdGEpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKgorKioJTE9BRCAgZnJvbSBtZW1vcnkgICB0byByZWdpc3Rlci4KKyoqCVNUT1JFIGZyb20gcmVnaXN0ZXIgdG8gbWVtb3J5LgorKioKKyoqCU9ubHkgc3VwcG9ydGVkIGJ5IDgxMEEsIDg2MCwgODI1QSwgODc1LCA4OTUgYW5kIDg5Ni4KKyoqCisqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKgorKioJTE9BRF9BQlMgKExFTikKKyoqCTw8c3RhcnQgYWRkcmVzcz4+CisqKgorKioJTE9BRF9SRUwgKExFTikgICAgICAgIChEU0EgcmVsYXRpdmUpCisqKgk8PGRzYV9vZmZzZXQ+PgorKioKKyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNkZWZpbmUgU0NSX1JFR19PRlMyKG9mcykgKCgob2ZzKSAmIDB4ZmYpIDw8IDE2dWwpCisjZGVmaW5lIFNDUl9OT19GTFVTSDIJMHgwMjAwMDAwMAorI2RlZmluZSBTQ1JfRFNBX1JFTDIJMHgxMDAwMDAwMAorCisjZGVmaW5lIFNDUl9MT0FEX1IocmVnLCBob3csIG4pIFwKKyAgICAgICAgKDB4ZTEwMDAwMDAgfCBob3cgfCAoU0NSX1JFR19PRlMyKFJFRyhyZWcpKSkgfCAobikpCisKKyNkZWZpbmUgU0NSX1NUT1JFX1IocmVnLCBob3csIG4pIFwKKyAgICAgICAgKDB4ZTAwMDAwMDAgfCBob3cgfCAoU0NSX1JFR19PRlMyKFJFRyhyZWcpKSkgfCAobikpCisKKyNkZWZpbmUgU0NSX0xPQURfQUJTKHJlZywgbikJU0NSX0xPQURfUihyZWcsIFNDUl9OT19GTFVTSDIsIG4pCisjZGVmaW5lIFNDUl9MT0FEX1JFTChyZWcsIG4pCVNDUl9MT0FEX1IocmVnLCBTQ1JfTk9fRkxVU0gyfFNDUl9EU0FfUkVMMiwgbikKKyNkZWZpbmUgU0NSX0xPQURfQUJTX0YocmVnLCBuKQlTQ1JfTE9BRF9SKHJlZywgMCwgbikKKyNkZWZpbmUgU0NSX0xPQURfUkVMX0YocmVnLCBuKQlTQ1JfTE9BRF9SKHJlZywgU0NSX0RTQV9SRUwyLCBuKQorCisjZGVmaW5lIFNDUl9TVE9SRV9BQlMocmVnLCBuKQlTQ1JfU1RPUkVfUihyZWcsIFNDUl9OT19GTFVTSDIsIG4pCisjZGVmaW5lIFNDUl9TVE9SRV9SRUwocmVnLCBuKQlTQ1JfU1RPUkVfUihyZWcsIFNDUl9OT19GTFVTSDJ8U0NSX0RTQV9SRUwyLG4pCisjZGVmaW5lIFNDUl9TVE9SRV9BQlNfRihyZWcsIG4pCVNDUl9TVE9SRV9SKHJlZywgMCwgbikKKyNkZWZpbmUgU0NSX1NUT1JFX1JFTF9GKHJlZywgbikJU0NSX1NUT1JFX1IocmVnLCBTQ1JfRFNBX1JFTDIsIG4pCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioKKyoqCVdhaXRpbmcgZm9yIERpc2Nvbm5lY3Qgb3IgUmVzZWxlY3QKKyoqCisqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqKgorKioJSlVNUCAgICAgICAgICAgIFsgfCBJRlRSVUUvSUZGQUxTRSAoIC4uLiApIF0KKyoqCTw8YWRkcmVzcz4+CisqKgorKioJSlVNUFIgICAgICAgICAgIFsgfCBJRlRSVUUvSUZGQUxTRSAoIC4uLiApIF0KKyoqCTw8ZGlzdGFuY2U+PgorKioKKyoqCUNBTEwgICAgICAgICAgICBbIHwgSUZUUlVFL0lGRkFMU0UgKCAuLi4gKSBdCisqKgk8PGFkZHJlc3M+PgorKioKKyoqCUNBTExSICAgICAgICAgICBbIHwgSUZUUlVFL0lGRkFMU0UgKCAuLi4gKSBdCisqKgk8PGRpc3RhbmNlPj4KKyoqCisqKglSRVRVUk4gICAgICAgICAgWyB8IElGVFJVRS9JRkZBTFNFICggLi4uICkgXQorKioJPDxkdW1teT4+CisqKgorKioJSU5UICAgICAgICAgICAgIFsgfCBJRlRSVUUvSUZGQUxTRSAoIC4uLiApIF0KKyoqCTw8aWRlbnQ+PgorKioKKyoqCUlOVF9GTFkgICAgICAgICBbIHwgSUZUUlVFL0lGRkFMU0UgKCAuLi4gKSBdCisqKgk8PGlkZW50Pj4KKyoqCisqKglDb25kaXRpb25zOgorKioJICAgICBXSEVOIChwaGFzZSkKKyoqCSAgICAgSUYgICAocGhhc2UpCisqKgkgICAgIENBUlJZU0VUCisqKgkgICAgIERBVEEgKGRhdGEsIG1hc2spCisqKgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2RlZmluZSBTQ1JfTk9fT1AgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBTQ1JfSlVNUCAgICAgICAgMHg4MDA4MDAwMAorI2RlZmluZSBTQ1JfSlVNUDY0ICAgICAgMHg4MDQ4MDAwMAorI2RlZmluZSBTQ1JfSlVNUFIgICAgICAgMHg4MDg4MDAwMAorI2RlZmluZSBTQ1JfQ0FMTCAgICAgICAgMHg4ODA4MDAwMAorI2RlZmluZSBTQ1JfQ0FMTFIgICAgICAgMHg4ODg4MDAwMAorI2RlZmluZSBTQ1JfUkVUVVJOICAgICAgMHg5MDA4MDAwMAorI2RlZmluZSBTQ1JfSU5UICAgICAgICAgMHg5ODA4MDAwMAorI2RlZmluZSBTQ1JfSU5UX0ZMWSAgICAgMHg5ODE4MDAwMAorCisjZGVmaW5lIElGRkFMU0UoYXJnKSAgICgweDAwMDgwMDAwIHwgKGFyZykpCisjZGVmaW5lIElGVFJVRShhcmcpICAgICgweDAwMDAwMDAwIHwgKGFyZykpCisKKyNkZWZpbmUgV0hFTihwaGFzZSkgICAgKDB4MDAwMzAwMDAgfCAocGhhc2UpKQorI2RlZmluZSBJRihwaGFzZSkgICAgICAoMHgwMDAyMDAwMCB8IChwaGFzZSkpCisKKyNkZWZpbmUgREFUQShEKSAgICAgICAgKDB4MDAwNDAwMDAgfCAoKEQpICYgMHhmZikpCisjZGVmaW5lIE1BU0soRCxNKSAgICAgICgweDAwMDQwMDAwIHwgKCgoTSBeIDB4ZmYpICYgMHhmZikgPDwgOHVsKXwoKEQpICYgMHhmZikpCisKKyNkZWZpbmUgQ0FSUllTRVQgICAgICAgKDB4MDAyMDAwMDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqCisqKglTQ1NJICBjb25zdGFudHMuCisqKgorKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyoKKyoqCU1lc3NhZ2VzCisqLworCisjZGVmaW5lCU1fQ09NUExFVEUJQ09NTUFORF9DT01QTEVURQorI2RlZmluZQlNX0VYVEVOREVECUVYVEVOREVEX01FU1NBR0UKKyNkZWZpbmUJTV9TQVZFX0RQCVNBVkVfUE9JTlRFUlMKKyNkZWZpbmUJTV9SRVNUT1JFX0RQCVJFU1RPUkVfUE9JTlRFUlMKKyNkZWZpbmUJTV9ESVNDT05ORUNUCURJU0NPTk5FQ1QKKyNkZWZpbmUJTV9JRF9FUlJPUglJTklUSUFUT1JfRVJST1IKKyNkZWZpbmUJTV9BQk9SVAkJQUJPUlRfVEFTS19TRVQKKyNkZWZpbmUJTV9SRUpFQ1QJTUVTU0FHRV9SRUpFQ1QKKyNkZWZpbmUJTV9OT09QCQlOT1AKKyNkZWZpbmUJTV9QQVJJVFkJTVNHX1BBUklUWV9FUlJPUgorI2RlZmluZQlNX0xDT01QTEVURQlMSU5LRURfQ01EX0NPTVBMRVRFCisjZGVmaW5lCU1fRkNPTVBMRVRFCUxJTktFRF9GTEdfQ01EX0NPTVBMRVRFCisjZGVmaW5lCU1fUkVTRVQJCVRBUkdFVF9SRVNFVAorI2RlZmluZQlNX0FCT1JUX1RBRwlBQk9SVF9UQVNLCisjZGVmaW5lCU1fQ0xFQVJfUVVFVUUJQ0xFQVJfVEFTS19TRVQKKyNkZWZpbmUJTV9JTklUX1JFQwlJTklUSUFURV9SRUNPVkVSWQorI2RlZmluZQlNX1JFTF9SRUMJUkVMRUFTRV9SRUNPVkVSWQorI2RlZmluZQlNX1RFUk1JTkFURQkoMHgxMSkKKyNkZWZpbmUJTV9TSU1QTEVfVEFHCVNJTVBMRV9RVUVVRV9UQUcKKyNkZWZpbmUJTV9IRUFEX1RBRwlIRUFEX09GX1FVRVVFX1RBRworI2RlZmluZQlNX09SREVSRURfVEFHCU9SREVSRURfUVVFVUVfVEFHCisjZGVmaW5lCU1fSUdOX1JFU0lEVUUJSUdOT1JFX1dJREVfUkVTSURVRQorI2RlZmluZQlNX0lERU5USUZZICAgCSgweDgwKQorCisjZGVmaW5lCU1fWF9NT0RJRllfRFAJRVhURU5ERURfTU9ESUZZX0RBVEFfUE9JTlRFUgorI2RlZmluZQlNX1hfU1lOQ19SRVEJRVhURU5ERURfU0RUUgorI2RlZmluZQlNX1hfV0lERV9SRVEJRVhURU5ERURfV0RUUgorI2RlZmluZQlNX1hfUFBSX1JFUQlFWFRFTkRFRF9QUFIKKworLyoKKyoqCVN0YXR1cworKi8KKworI2RlZmluZQlTX0dPT0QJCSgweDAwKQorI2RlZmluZQlTX0NIRUNLX0NPTkQJKDB4MDIpCisjZGVmaW5lCVNfQ09ORF9NRVQJKDB4MDQpCisjZGVmaW5lCVNfQlVTWQkJKDB4MDgpCisjZGVmaW5lCVNfSU5UCQkoMHgxMCkKKyNkZWZpbmUJU19JTlRfQ09ORF9NRVQJKDB4MTQpCisjZGVmaW5lCVNfQ09ORkxJQ1QJKDB4MTgpCisjZGVmaW5lCVNfVEVSTUlOQVRFRAkoMHgyMCkKKyNkZWZpbmUJU19RVUVVRV9GVUxMCSgweDI4KQorI2RlZmluZQlTX0lMTEVHQUwJKDB4ZmYpCisjZGVmaW5lCVNfU0VOU0UJCSgweDgwKQorCisvKgorICogRW5kIG9mIG5jcnJlZyBmcm9tIEZyZWVCU0QKKyAqLwogCiAvKgogCUJ1aWxkIGEgc2NhdHRlci9nYXRoZXIgZW50cnkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCmluZGV4IGY1NTdmMTcuLmU4ZGYwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCkBAIC00NjQsMTQgKzQ2NCwxMiBAQAogCQkJY29udGludWU7CiAJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7CiAJCWlmIChxYyAmJiAoIShxYy0+dGYuY3RsICYgQVRBX05JRU4pKSkgewotCQkJdW5zaWduZWQgaW50IGVycl9tYXNrID0gMDsKLQogCQkJaWYgKChzdGF0dXMgJiAoYVBFUlIgfCBhUFNEIHwgYVVJUlEpKSkKLQkJCQllcnJfbWFzayA9IEFDX0VSUl9PVEhFUjsKKwkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOwogCQkJZWxzZSBpZiAocHAtPnBrdFswXSAhPSBjRE9ORSkKLQkJCQllcnJfbWFzayA9IEFDX0VSUl9PVEhFUjsKKwkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOwogCi0JCQlhdGFfcWNfY29tcGxldGUocWMsIGVycl9tYXNrKTsKKwkJCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJCX0KIAl9CiAJcmV0dXJuIGhhbmRsZWQ7CkBAIC01MDEsNyArNDk5LDggQEAKIAkJCiAJCQkJLyogY29tcGxldGUgdGFza2ZpbGUgdHJhbnNhY3Rpb24gKi8KIAkJCQlwcC0+c3RhdGUgPSBhZG1hX3N0YXRlX2lkbGU7Ci0JCQkJYXRhX3FjX2NvbXBsZXRlKHFjLCBhY19lcnJfbWFzayhzdGF0dXMpKTsKKwkJCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2soc3RhdHVzKTsKKwkJCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQkJCWhhbmRsZWQgPSAxOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9LY29uZmlnIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvS2NvbmZpZwppbmRleCBjMWMxYzY4Li41MjA1YzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L0tjb25maWcKQEAgLTEsNTUgKzEsNzAgQEAKIGNvbmZpZyBTQ1NJX1FMQTJYWFgKLQl0cmlzdGF0ZQotCWRlZmF1bHQgKFNDU0kgJiYgUENJKQotCWRlcGVuZHMgb24gU0NTSSAmJiBQQ0kKKwl0cmlzdGF0ZSAiUUxvZ2ljIFFMQTJYWFggRmlicmUgQ2hhbm5lbCBTdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9GQ19BVFRSUworCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJVGhpcyBxbGEyeHh4IGRyaXZlciBzdXBwb3J0cyBhbGwgUUxvZ2ljIEZpYnJlIENoYW5uZWwKKwlQQ0kgYW5kIFBDSWUgaG9zdCBhZGFwdGVycy4KKworCUJ5IGRlZmF1bHQsIGZpcm13YXJlIGZvciB0aGUgSVNQIHBhcnRzIHdpbGwgYmUgbG9hZGVkCisJdmlhIHRoZSBGaXJtd2FyZSBMb2FkZXIgaW50ZXJmYWNlLgorCisJSVNQICAgICAgICAgICAgIEZpcm13YXJlIEZpbGVuYW1lCisJLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tCisJMjF4eCAgICAgICAgICAgIHFsMjEwMF9mdy5iaW4KKwkyMnh4ICAgICAgICAgICAgcWwyMjAwX2Z3LmJpbgorCTIzMDAsIDIzMTIgICAgICBxbDIzMDBfZncuYmluCisJMjMyMiAgICAgICAgICAgIHFsMjMyMl9mdy5iaW4KKwk2MzEyLCA2MzIyICAgICAgcWw2MzEyX2Z3LmJpbgorCTI0eHggICAgICAgICAgICBxbDI0MDBfZncuYmluCisKKwlVcG9uIHJlcXVlc3QsIHRoZSBkcml2ZXIgY2FjaGVzIHRoZSBmaXJtd2FyZSBpbWFnZSB1bnRpbAorCXRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCisKKwlOT1RFOiBUaGUgb3JpZ2luYWwgbWV0aG9kIG9mIGJ1aWxkaW5nIGZpcm13YXJlLWxvYWRlcgorCW1vZHVsZXMgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyB0aGUgZmlybXdhcmUtaW1hZ2VzIHdpbGwKKwliZSByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCBzb3VyY2VzLgorCitjb25maWcgU0NTSV9RTEEyWFhYX0VNQkVEREVEX0ZJUk1XQVJFCisJYm9vbCAiICBVc2UgZmlybXdhcmUtbG9hZGVyIG1vZHVsZXMgKERFUFJFQ0FURUQpIgorCWRlcGVuZHMgb24gU0NTSV9RTEEyWFhYCiAKIGNvbmZpZyBTQ1NJX1FMQTIxWFgKLQl0cmlzdGF0ZSAiUUxvZ2ljIElTUDIxMDAgaG9zdCBhZGFwdGVyIGZhbWlseSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0NTSV9RTEEyWFhYCi0gICAgICAgIHNlbGVjdCBTQ1NJX0ZDX0FUVFJTCi0Jc2VsZWN0IEZXX0xPQURFUgorCXRyaXN0YXRlICIgIEJ1aWxkIFFMb2dpYyBJU1AyMTAwIGZpcm13YXJlLW1vZHVsZSIKKwlkZXBlbmRzIG9uIFNDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRQogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDIxeHggKElTUDIxMDApIGhvc3QgYWRhcHRlciBmYW1pbHkuCiAKIGNvbmZpZyBTQ1NJX1FMQTIyWFgKLQl0cmlzdGF0ZSAiUUxvZ2ljIElTUDIyMDAgaG9zdCBhZGFwdGVyIGZhbWlseSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0NTSV9RTEEyWFhYCi0gICAgICAgIHNlbGVjdCBTQ1NJX0ZDX0FUVFJTCi0Jc2VsZWN0IEZXX0xPQURFUgorCXRyaXN0YXRlICIgIEJ1aWxkIFFMb2dpYyBJU1AyMjAwIGZpcm13YXJlLW1vZHVsZSIKKwlkZXBlbmRzIG9uIFNDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRQogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDIyeHggKElTUDIyMDApIGhvc3QgYWRhcHRlciBmYW1pbHkuCiAKIGNvbmZpZyBTQ1NJX1FMQTIzMDAKLQl0cmlzdGF0ZSAiUUxvZ2ljIElTUDIzMDAgaG9zdCBhZGFwdGVyIGZhbWlseSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0NTSV9RTEEyWFhYCi0gICAgICAgIHNlbGVjdCBTQ1NJX0ZDX0FUVFJTCi0Jc2VsZWN0IEZXX0xPQURFUgorCXRyaXN0YXRlICIgIEJ1aWxkIFFMb2dpYyBJU1AyMzAwIGZpcm13YXJlLW1vZHVsZSIKKwlkZXBlbmRzIG9uIFNDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRQogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDIzMDAgKElTUDIzMDAgYW5kIElTUDIzMTIpIGhvc3QKIAlhZGFwdGVyIGZhbWlseS4KIAogY29uZmlnIFNDU0lfUUxBMjMyMgotCXRyaXN0YXRlICJRTG9naWMgSVNQMjMyMiBob3N0IGFkYXB0ZXIgZmFtaWx5IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTQ1NJX1FMQTJYWFgKLSAgICAgICAgc2VsZWN0IFNDU0lfRkNfQVRUUlMKLQlzZWxlY3QgRldfTE9BREVSCisJdHJpc3RhdGUgIiAgQnVpbGQgUUxvZ2ljIElTUDIzMjIgZmlybXdhcmUtbW9kdWxlIgorCWRlcGVuZHMgb24gU0NTSV9RTEEyWFhYX0VNQkVEREVEX0ZJUk1XQVJFCiAJLS0taGVscC0tLQogCVRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBRTG9naWMgMjMyMiAoSVNQMjMyMikgaG9zdCBhZGFwdGVyIGZhbWlseS4KIAogY29uZmlnIFNDU0lfUUxBNjMxMgotCXRyaXN0YXRlICJRTG9naWMgSVNQNjN4eCBob3N0IGFkYXB0ZXIgZmFtaWx5IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTQ1NJX1FMQTJYWFgKLSAgICAgICAgc2VsZWN0IFNDU0lfRkNfQVRUUlMKLQlzZWxlY3QgRldfTE9BREVSCisJdHJpc3RhdGUgIiAgQnVpbGQgUUxvZ2ljIElTUDYzeHggZmlybXdhcmUtbW9kdWxlIgorCWRlcGVuZHMgb24gU0NTSV9RTEEyWFhYX0VNQkVEREVEX0ZJUk1XQVJFCiAJLS0taGVscC0tLQogCVRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBRTG9naWMgNjN4eCAoSVNQNjMxMiBhbmQgSVNQNjMyMikgaG9zdAogCWFkYXB0ZXIgZmFtaWx5LgogCiBjb25maWcgU0NTSV9RTEEyNFhYCi0JdHJpc3RhdGUgIlFMb2dpYyBJU1AyNHh4IGhvc3QgYWRhcHRlciBmYW1pbHkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNDU0lfUUxBMlhYWAotCXNlbGVjdCBTQ1NJX0ZDX0FUVFJTCi0Jc2VsZWN0IEZXX0xPQURFUgorCXRyaXN0YXRlICIgIEJ1aWxkIFFMb2dpYyBJU1AyNHh4IGZpcm13YXJlLW1vZHVsZSIKKwlkZXBlbmRzIG9uIFNDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRQogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDI0eHggKElTUDI0MjIgYW5kIElTUDI0MzIpIGhvc3QKIAlhZGFwdGVyIGZhbWlseS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvTWFrZWZpbGUKaW5kZXggYjE2OTY4Ny4uNDBjMGRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvTWFrZWZpbGUKQEAgLTMsMTUgKzMsMTggQEAKIHFsYTJ4eHgteSA6PSBxbGFfb3MubyBxbGFfaW5pdC5vIHFsYV9tYngubyBxbGFfaW9jYi5vIHFsYV9pc3IubyBxbGFfZ3MubyBcCiAJCXFsYV9kYmcubyBxbGFfc3VwLm8gcWxhX3JzY24ubyBxbGFfYXR0ci5vCiAKK29iai0kKENPTkZJR19TQ1NJX1FMQTJYWFgpICs9IHFsYTJ4eHgubworCiBxbGEyMTAwLXkgOj0gcWwyMTAwLm8gcWwyMTAwX2Z3Lm8KIHFsYTIyMDAteSA6PSBxbDIyMDAubyBxbDIyMDBfZncubwogcWxhMjMwMC15IDo9IHFsMjMwMC5vIHFsMjMwMF9mdy5vCiBxbGEyMzIyLXkgOj0gcWwyMzIyLm8gcWwyMzIyX2Z3Lm8KIHFsYTYzMTIteSA6PSBxbDYzMTIubyBxbDYzMTJfZncubworcWxhMjQwMC15IDo9IHFsMjQwMC5vIHFsMjQwMF9mdy5vCiAKIG9iai0kKENPTkZJR19TQ1NJX1FMQTIxWFgpICs9IHFsYTJ4eHgubyBxbGEyMTAwLm8KIG9iai0kKENPTkZJR19TQ1NJX1FMQTIyWFgpICs9IHFsYTJ4eHgubyBxbGEyMjAwLm8KIG9iai0kKENPTkZJR19TQ1NJX1FMQTIzMDApICs9IHFsYTJ4eHgubyBxbGEyMzAwLm8KIG9iai0kKENPTkZJR19TQ1NJX1FMQTIzMjIpICs9IHFsYTJ4eHgubyBxbGEyMzIyLm8KIG9iai0kKENPTkZJR19TQ1NJX1FMQTYzMTIpICs9IHFsYTJ4eHgubyBxbGE2MzEyLm8KLW9iai0kKENPTkZJR19TQ1NJX1FMQTI0WFgpICs9IHFsYTJ4eHgubworb2JqLSQoQ09ORklHX1NDU0lfUUxBMjRYWCkgKz0gcWxhMnh4eC5vIHFsYTI0MDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWwyNDAwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDI0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzcxNjVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWwyNDAwLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCisgKgorICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgInFsYV9kZWYuaCIKKworc3RhdGljIGNoYXIgcWxhX2RyaXZlcl9uYW1lW10gPSAicWxhMjQwMCI7CisKK2V4dGVybiB1aW50MzJfdCBmdzI0MDBfdmVyc2lvbl9zdHJbXTsKK2V4dGVybiB1aW50MzJfdCBmdzI0MDBfYWRkcjAxOworZXh0ZXJuIHVpbnQzMl90IGZ3MjQwMF9jb2RlMDFbXTsKK2V4dGVybiB1aW50MzJfdCBmdzI0MDBfbGVuZ3RoMDE7CitleHRlcm4gdWludDMyX3QgZncyNDAwX2FkZHIwMjsKK2V4dGVybiB1aW50MzJfdCBmdzI0MDBfY29kZTAyW107CitleHRlcm4gdWludDMyX3QgZncyNDAwX2xlbmd0aDAyOworCitzdGF0aWMgc3RydWN0IHFsYV9md19pbmZvIHFsYV9md190YmxbXSA9IHsKKwl7CisJCS5hZGRyZXNzaW5nCT0gRldfSU5GT19BRERSX0VYVEVOREVELAorCQkuZndjb2RlCQk9ICh1bnNpZ25lZCBzaG9ydCAqKSZmdzI0MDBfY29kZTAxWzBdLAorCQkuZndsZW4JCT0gKHVuc2lnbmVkIHNob3J0ICopJmZ3MjQwMF9sZW5ndGgwMSwKKwkJLmxmd3N0YXJ0CT0gKHVuc2lnbmVkIGxvbmcgKikmZncyNDAwX2FkZHIwMSwKKwl9LAorCXsKKwkJLmFkZHJlc3NpbmcJPSBGV19JTkZPX0FERFJfRVhURU5ERUQsCisJCS5md2NvZGUJCT0gKHVuc2lnbmVkIHNob3J0ICopJmZ3MjQwMF9jb2RlMDJbMF0sCisJCS5md2xlbgkJPSAodW5zaWduZWQgc2hvcnQgKikmZncyNDAwX2xlbmd0aDAyLAorCQkubGZ3c3RhcnQJPSAodW5zaWduZWQgbG9uZyAqKSZmdzI0MDBfYWRkcjAyLAorCX0sCisJeyBGV19JTkZPX0FERFJfTk9NT1JFLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBxbGFfYm9hcmRfaW5mbyBxbGFfYm9hcmRfdGJsW10gPSB7CisJeworCQkuZHJ2X25hbWUJPSBxbGFfZHJpdmVyX25hbWUsCisJCS5pc3BfbmFtZQk9ICJJU1AyNDIyIiwKKwkJLmZ3X2luZm8JPSBxbGFfZndfdGJsLAorCQkuZndfZm5hbWUJPSAicWwyNDAwX2Z3LmJpbiIsCisJfSwKKwl7CisJCS5kcnZfbmFtZQk9IHFsYV9kcml2ZXJfbmFtZSwKKwkJLmlzcF9uYW1lCT0gIklTUDI0MzIiLAorCQkuZndfaW5mbwk9IHFsYV9md190YmwsCisJCS5md19mbmFtZQk9ICJxbDI0MDBfZncuYmluIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsYTI0eHhfcGNpX3RibFtdID0geworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1FMT0dJQywKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDIyLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZxbGFfYm9hcmRfdGJsWzBdLAorCX0sCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUUxPR0lDLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MzIsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJnFsYV9ib2FyZF90YmxbMV0sCisJfSwKKwl7MCwgMH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsYTI0eHhfcGNpX3RibCk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitxbGEyNHh4X3Byb2JlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBxbGEyeDAwX3Byb2JlX29uZShwZGV2LAorCSAgICAoc3RydWN0IHFsYV9ib2FyZF9pbmZvICopaWQtPmRyaXZlcl9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0CitxbGEyNHh4X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcWxhMngwMF9yZW1vdmVfb25lKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcWxhMjR4eF9wY2lfZHJpdmVyID0geworCS5uYW1lCQk9ICJxbGEyNDAwIiwKKwkuaWRfdGFibGUJPSBxbGEyNHh4X3BjaV90YmwsCisJLnByb2JlCQk9IHFsYTI0eHhfcHJvYmVfb25lLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocWxhMjR4eF9yZW1vdmVfb25lKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitxbGEyNHh4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZxbGEyNHh4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3FsYTI0eHhfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcWxhMjR4eF9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocWxhMjR4eF9pbml0KTsKK21vZHVsZV9leGl0KHFsYTI0eHhfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlFMb2dpYyBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJRTG9naWMgSVNQMjR4eCBGQy1TQ1NJIEhvc3QgQnVzIEFkYXB0ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihRTEEyWFhYX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWwyNDAwX2Z3LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDI0MDBfZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTc3Nzk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWwyNDAwX2Z3LmMKQEAgLTAsMCArMSwxMjM3NiBAQAorLyoKKyAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqCisgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqCUZpcm13YXJlIFZlcnNpb24gNC4wMC4xNiAoMDg6MDkgT2N0IDI2LCAyMDA1KQorICovCisKKyNpZmRlZiBVTklRVUVfRldfTkFNRQordWludDMyX3QgZncyNDAwX3ZlcnNpb24gPSA0KjEwMjQrMDsKKyNlbHNlCit1aW50MzJfdCByaXNjX2NvZGVfdmVyc2lvbiA9IDQqMTAyNCswOworI2VuZGlmCisKKyNpZmRlZiBVTklRVUVfRldfTkFNRQordWludDMyX3QgZncyNDAwX3ZlcnNpb25fc3RyW10gPSB7NCwgMCwxNn07CisjZWxzZQordWludDMyX3QgZmlybXdhcmVfdmVyc2lvbltdID0gezQsIDAsMTZ9OworI2VuZGlmCisKKyNpZmRlZiBVTklRVUVfRldfTkFNRQorI2RlZmluZSBmdzI0MDBfVkVSU0lPTl9TVFJJTkcgIjQuMDAuMTYiCisjZWxzZQorI2RlZmluZSBGV19WRVJTSU9OX1NUUklORyAiNC4wMC4xNiIKKyNlbmRpZgorCisjaWZkZWYgVU5JUVVFX0ZXX05BTUUKK3VpbnQzMl90IGZ3MjQwMF9hZGRyMDEgPSAweDAwMTAwMDAwIDsKKyNlbHNlCit1aW50MzJfdCByaXNjX2NvZGVfYWRkcjAxID0gMHgwMDEwMDAwMCA7CisjZW5kaWYKKworI2lmZGVmIFVOSVFVRV9GV19OQU1FCit1aW50MzJfdCBmdzI0MDBfY29kZTAxW10gPSB7CisjZWxzZQordWludDMyX3QgcmlzY19jb2RlMDFbXSA9IHsKKyNlbmRpZgorCTB4MDQwMWYxN2MsIDB4MDAxMGUwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMGFiNGEsCisJMHgwMDAwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAwMiwKKwkweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDIwNDM0ZjUwLCAweDU5NTI0OTQ3LAorCTB4NDg1NDIwMzIsIDB4MzAzMDM1MjAsIDB4NTE0YzRmNDcsIDB4NDk0MzIwNDMsCisJMHg0ZjUyNTA0ZiwgMHg1MjQxNTQ0OSwgMHg0ZjRlMjAyMCwgMHgyMDQ5NTM1MCwKKwkweDMyMzQ3ODc4LCAweDIwNDY2OTcyLCAweDZkNzc2MTcyLCAweDY1MjAyMDIwLAorCTB4NTY2NTcyNzMsIDB4Njk2ZjZlMjAsIDB4MzQyZTMwMmUsIDB4MzEzNjIwMjAsCisJMHgyMDIwMjAyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4NDIwMDE4MDAsIDB4MDAxMDAxNGYsIDB4NDIwMDIwMDAsIDB4MDAxMGI4ZmUsCisJMHg1MDBjMDgwMCwgMHg4MDBjMTgwMCwgMHg1MDBjMTAwMCwgMHg4MDBjMTgwMCwKKwkweDU0MDQyMDAwLCAweDgwMTAyMDAwLCAweDgwMDQwODAwLCAweDgwMDgxMDQwLAorCTB4MDQwMjA3ZmMsIDB4NTAwYzA4MDAsIDB4ODAwNDA5YzAsIDB4MDQwMjA3ZjYsCisJMHg0NDAwMjAwMCwgMHg4MDEwMjAwMCwgMHg0MDEwMDAwMCwgMHg0NDA0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0MDgwMDAwLCAweDgwMDAwMDAwLCAweDQ0MGMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDQxMDAwMDAsIDB4ODAwMDAwMDAsIDB4NDQxNDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NDE4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NDFjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0MjAwMDAwLCAweDgwMDAwMDAwLCAweDQ0MjQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDQyODAwMDAsIDB4ODAwMDAwMDAsIDB4NDQyYzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NDMwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NDM0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0MzgwMDAwLCAweDgwMDAwMDAwLCAweDQ0M2MwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDQ0MDAwMDAsIDB4ODAwMDAwMDAsIDB4NDQ0NDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NDQ4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NDRjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0NTAwMDAwLCAweDgwMDAwMDAwLCAweDQ0NTQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDQ1ODAwMDAsIDB4ODAwMDAwMDAsIDB4NDQ1YzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NDYwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NDY0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0NjgwMDAwLCAweDgwMDAwMDAwLCAweDQ0NmMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDQ3MDAwMDAsIDB4ODAwMDAwMDAsIDB4NDQ3NDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NDc4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NDdjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0ODAwMDAwLCAweDgwMDAwMDAwLCAweDQ0ODQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDQ4ODAwMDAsIDB4ODAwMDAwMDAsIDB4NDQ4YzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NDkwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NDk0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0OTgwMDAwLCAweDgwMDAwMDAwLCAweDQ0OWMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDRhMDAwMDAsIDB4ODAwMDAwMDAsIDB4NDRhNDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NGE4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NGFjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0YjAwMDAwLCAweDgwMDAwMDAwLCAweDQ0YjQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDRiODAwMDAsIDB4ODAwMDAwMDAsIDB4NDRiYzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NGMwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NGM0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0YzgwMDAwLCAweDgwMDAwMDAwLCAweDQ0Y2MwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDRkMDAwMDAsIDB4ODAwMDAwMDAsIDB4NDRkODAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NGQ0MDAwMCwgMHg4MDAwMDAwMCwgMHg0NGRjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0ZTAwMDAwLCAweDgwMDAwMDAwLCAweDQ0ZTQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDRlODAwMDAsIDB4ODAwMDAwMDAsIDB4NDRlYzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NGYwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NGY0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ0ZjgwMDAwLCAweDgwMDAwMDAwLCAweDQ0ZmMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDUwMDAwMDAsIDB4ODAwMDAwMDAsIDB4NDUwNDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NTA4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NTBjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1MTAwMDAwLCAweDgwMDAwMDAwLCAweDQ1MTQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDUxODAwMDAsIDB4ODAwMDAwMDAsIDB4NDUxYzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NTIwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NTI0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1MjgwMDAwLCAweDgwMDAwMDAwLCAweDQ1MmMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDUzMDAwMDAsIDB4ODAwMDAwMDAsIDB4NDUzNDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NTM4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NTNjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1NDAwMDAwLCAweDgwMDAwMDAwLCAweDQ1NDQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDU0ODAwMDAsIDB4ODAwMDAwMDAsIDB4NDU0YzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NTUwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NTU0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1NTgwMDAwLCAweDgwMDAwMDAwLCAweDQ1NWMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDU2MDAwMDAsIDB4ODAwMDAwMDAsIDB4NDU2NDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NTY4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NTZjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1NzAwMDAwLCAweDgwMDAwMDAwLCAweDQ1NzQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDU3ODAwMDAsIDB4ODAwMDAwMDAsIDB4NDU3YzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NTgwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NTg0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1ODgwMDAwLCAweDgwMDAwMDAwLCAweDQ1OGMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDU5MDAwMDAsIDB4ODAwMDAwMDAsIDB4NDU5NDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NTk4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NTljMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1YTAwMDAwLCAweDgwMDAwMDAwLCAweDQ1YTQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDVhODAwMDAsIDB4ODAwMDAwMDAsIDB4NDVhYzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NWIwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NWI0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1YjgwMDAwLCAweDgwMDAwMDAwLCAweDQ1YmMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDVjMDAwMDAsIDB4ODAwMDAwMDAsIDB4NDVjNDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NWM4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NWNjMDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1ZDAwMDAwLCAweDgwMDAwMDAwLCAweDQ1ZDQwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDVkODAwMDAsIDB4ODAwMDAwMDAsIDB4NDVkYzAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NWUwMDAwMCwgMHg4MDAwMDAwMCwgMHg0NWU0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1ZTgwMDAwLCAweDgwMDAwMDAwLCAweDQ1ZWMwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDVmMDAwMDAsIDB4ODAwMDAwMDAsIDB4NDVmNDAwMDAsCisJMHg4MDAwMDAwMCwgMHg0NWY4MDAwMCwgMHg4MDAwMDAwMCwgMHg0NWZjMDAwMCwKKwkweDRhMDNjMDIwLCAweDAwMDA0MDAwLCAweDRhMDNjMDExLCAweDQwMDAwMDEwLAorCTB4MDQwMDYwMDAsIDB4NDIwM2UwMDAsIDB4NDAwMDAwMDAsIDB4NTllMDAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAwMDAwMywgMHg0YTAzYzAxNywgMHgwMDAwMDAwMCwKKwkweDQyMDNlMDAwLCAweDMwMDAwMDAxLCAweDA0MDFmMDAwLCAweDAwMDBiZjAwLAorCTB4MDAwMDAwODAsIDB4MDAwMGJmZTAsIDB4MDAwMDAwMjAsIDB4MDAwMGZmMDAsCisJMHgwMDAwMDA4MCwgMHgwMDAwZmZkMCwgMHgwMDAwMDAzMCwgMHgwMDAwNzEwMCwKKwkweDAwMDAwMDEwLCAweDAwMDA3MjAwLCAweDAwMDAwMDA4LCAweDAwMDA3MjA5LAorCTB4MDAwMDAwMDcsIDB4MDAwMDczMDAsIDB4MDAwMDAwMDgsIDB4MDAwMDczMDksCisJMHgwMDAwMDAwNywgMHgwMDAwNzQwMCwgMHgwMDAwMDAwOCwgMHgwMDAwNzQwOSwKKwkweDAwMDAwMDA3LCAweDAwMDA3NjAwLCAweDAwMDAwMGIwLCAweDAwMDA3NzAwLAorCTB4MDAwMDAwNDAsIDB4MDAwMDMwMDAsIDB4MDAwMDAwNzAsIDB4MDAwMDQwMDAsCisJMHgwMDAwMDBjMCwgMHgwMDAwNjAwMCwgMHgwMDAwMDA1MCwgMHgwMDAwNjEwMCwKKwkweDAwMDAwMDEwLCAweDAwMDA2MTMwLCAweDAwMDAwMDEwLCAweDAwMDA2MTUwLAorCTB4MDAwMDAwMTAsIDB4MDAwMDYxNzAsIDB4MDAwMDAwMTAsIDB4MDAwMDYxOTAsCisJMHgwMDAwMDAxMCwgMHgwMDAwNjFiMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAwMCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMTAwLCAweDQyMDJmMDAwLCAweDAwMDAwMDAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMjFmMDAsIDB4NDU3ODA4MDAsIDB4ODAwNDA4MDAsCisJMHg4MDAwMDA0MCwgMHgwNDAyMDdmZCwgMHg0MjAzZjAwMCwgMHgwMDAyMWZmZiwKKwkweDQwMDAwMDAwLCAweDQyMDNlMDAwLCAweDkwMDAwMTAwLCAweDQwMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2ZmQsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsCisJMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwgMHgyNDMyMDAwMiwgMHgwNDAyMDAxNSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDY0LCAweDgwMDQwODQwLCAweDA0MDAwMDA3LAorCTB4NGEwMzAwMDAsIDB4MDAwMDAwMDEsIDB4NDAwMDAwMDAsIDB4NTk4MDAwMDAsCisJMHg4YzAwMDUwMCwgMHgwNDAwMDdmOSwgMHgwNDAwMDAwOCwgMHg0MjAwMDgwMCwKKwkweDAwMDA3YTE3LCAweDUwMDQwMDAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDAzLAorCTB4ODQwMDA1NGUsIDB4NDQwMDA4MDAsIDB4NGEwMzAwMDAsIDB4MDAwMDAwMDAsCisJMHg0YTAzYzAyMCwgMHgwMDAwMDAwNCwgMHg0MjAzZTAwMCwgMHg2MDAwMDAwZiwKKwkweDU5ZTAwMDIzLCAweDhjMDAwNTAwLCAweDA0MDIwMDM5LCAweDQyMDAwMDAwLAorCTB4MDAxMDAwMDEsIDB4NTAwMDA4MDAsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMDQsCisJMHg1ODA0MjAwMywgMHg0MjAwMTAwMCwgMHhmZmZmZmZmZiwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNmY0LCAweDA0MDIwMDRlLCAweDU4MDQyMDAzLCAweDQyMDAxMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDA2ZjQsIDB4MDQwMjAwNDgsCisJMHg1ODA0MjAwMywgMHg0MjAwMTAwMCwgMHgwMGZmZmZmZiwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNmY0LCAweDA0MDIwMDQyLCAweDU4MDQyMDAzLCAweDQyMDAxMDAwLAorCTB4MDBmZmZmZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDA2ZjQsIDB4MDQwMjAwM2MsCisJMHg0MjAwMDAwMCwgMHgwMDEwMDAwMSwgMHg1MDAwYTAwMCwgMHg4MjUwYTQwMCwKKwkweDAwMDAwMDA0LCAweDQyMDBhODAwLCAweDAwMDIwMDAwLCAweDU4NTBiMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4ODI1MGE0MDAsIDB4MDAwMDAwMDUsCisJMHg0YTAzNzBlOCwgMHgwMDAwMDAwMywgMHg0MjAwYTgwMCwgMHgwMDAwYzAwMCwKKwkweDU4NTBiMDAzLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDRhMDM3OGU4LAorCTB4MDAwMDAwMDMsIDB4NDIwMGE4MDAsIDB4MDAwMDgwMDAsIDB4NTg1MGIwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHgwNDAxZjAyYiwgMHg0MjAwMDgwMCwKKwkweDAwMDIwMDAwLCAweDU4MDQyMDAzLCAweDQyMDAxMDAwLCAweGZmZmZmZmZmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2ZjQsIDB4MDQwMjAwMTksIDB4NGEwMzcwZTgsCisJMHgwMDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwYzAwMCwgMHg1ODA0MjAwMywKKwkweDgyMTAyNTAwLCAweDAwZmZmZmZmLCAweDQyMDAxMDAwLCAweDAwZmZmZmZmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2ZjQsIDB4MDQwMjAwMGQsIDB4NGEwMzc4ZTgsCisJMHgwMDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwODAwMCwgMHg1ODA0MjAwMywKKwkweDgyMTAyNTAwLCAweDAwZmZmZmZmLCAweDQyMDAxMDAwLCAweDAwZmZmZmZmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2ZjQsIDB4MDQwMDAwMGIsIDB4NGEwM2MwMjAsCisJMHgwMDAwNDAxMCwgMHg0YTAzYzAxMSwgMHg0MDEwMDAxMSwgMHgwNDAwNjAwMCwKKwkweDQyMDNlMDAwLCAweDQwMDAwMDAwLCAweDQyMDNlMDAwLCAweDMwMDAwMDAxLAorCTB4MDQwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3OTEsIDB4NDIwMDEwMDAsCisJMHgwMDEwYWI0YSwgMHg0MDA4MDAwMCwgMHg4MDE0MDQ4MCwgMHg4MjAwMWQwMCwKKwkweGZmZmZmZjAwLCAweDA0MDIwMDAzLCAweDQwMDAxODAwLCAweDA0MDFmMDAzLAorCTB4NDIwMDE4MDAsIDB4MDAwMDAwZmYsIDB4NDgwYmM4NDAsIDB4NDgwZmM4NDIsCisJMHgwNDAxMTAwMCwgMHg0MDBjMDAwMCwgMHg4MDA4MTQwMCwgMHg0MDE0MDAwMCwKKwkweDgwMDgwNTgwLCAweDA0MDIwN2YwLCAweDQ4MTc1MDBkLCAweDQ1NzgyODAwLAorCTB4NTljNDAwMDAsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODAwMDAxMjAsCisJMHg4MjAwMDU4MCwgMHgwMDAwMjQyMiwgMHgwNDAyMDAwNSwgMHg1OWE4MDAwNSwKKwkweDg0MDAwNTRlLCAweDQ4MDM1MDA1LCAweDA0MDFmMDA4LCAweDU5ZTAwMDAzLAorCTB4ODIwMDA1MDAsIDB4MDAwMzAwMDAsIDB4MDQwMDAwMDQsIDB4NTlhODAwMDUsCisJMHg4NDAwMDU1NCwgMHg0ODAzNTAwNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDA0MCwKKwkweDU5YTgwMDA1LCAweDhjMDAwNTE0LCAweDA0MDIwMDBlLCAweDQyMDAwODAwLAorCTB4MDAwMDEwMDAsIDB4ODIxNDE0ODAsIDB4MDAxN2ZmZmYsIDB4MDQwMjEwMDksCisJMHg4MDA0MDkwMiwgMHg4MjE0MTQ4MCwgMHgwMDEzZmZmZiwgMHgwNDAyMTAwNSwKKwkweDgwMDQwOTAyLCAweDgyMTQxNDgwLCAweDAwMTFmZmZmLCAweDA0MDAxYjhkLAorCTB4NDgwNzUwMGUsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjY4MSwgMHg4MjA0MGMwMCwgMHgwMDEwZDFjMCwgMHg0ODA3NTAwYiwKKwkweDRhMDNjODEwLCAweDAwMTAwMDAwLCAweDRhMDNjODExLCAweDAwMTBhYjRhLAorCTB4NGEwM2M4MjksIDB4MDAwMDAwMDQsIDB4NTllNDAwMDEsIDB4ODIwMDA1NDAsCisJMHgwMDAzMDAxZCwgMHg0ODAzYzgwMSwgMHg0YTAzYzAxNCwgMHgwMDFjMDAxYywKKwkweDQyMDAxMDAwLCAweDAwMDAwMDFjLCAweDAyMDFmODAwLCAweDAwMTAwNmUyLAorCTB4NDIwMmMwMDAsIDB4MDAxMGQxYzAsIDB4NTlhYWIwMGIsIDB4NTlhYWEwMGIsCisJMHg1OWFhYTgwYiwgMHg1OWFhYzgwZSwgMHg0OTY3NTA2OSwgMHg1OWE4MDAwYiwKKwkweDQ4MDM1MDBjLCAweDA0MDFmYmY1LCAweDAyMDFmODAwLCAweDAwMTA3OTAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3YmUsIDB4MDIwMWY4MDAsIDB4MDAxMDA4MDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMWEwNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTM1NCwKKwkweDAyMDFmODAwLCAweDAwMTAwOTY5LCAweDAyMDFmODAwLCAweDAwMTAxMzU0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDBmNGMsIDB4MDIwMWY4MDAsIDB4MDAxMDY2YzEsCisJMHgwNDAxZmIxYSwgMHgwMjAxZjgwMCwgMHgwMDEwMjIwZSwgMHgwMjAxZjgwMCwKKwkweDAwMTA1M2JiLCAweDAyMDFmODAwLCAweDAwMTA0YzkwLCAweDAyMDFmODAwLAorCTB4MDAxMDYxOTQsIDB4MDIwMWY4MDAsIDB4MDAxMDVmMjgsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTNlZCwgMHgwMjAxZjgwMCwgMHgwMDEwMTI2ZiwgMHg0MjAzZTAwMCwKKwkweGYwMDAwMDAxLCAweDQyMDAwMDAwLCAweDAwMDAxMDAwLCAweDUwMDAwMDAwLAorCTB4ODIwMDA0ODAsIDB4MjQyMjAwMDEsIDB4MDQwMDAwMTYsIDB4NTllMDAwMDIsCisJMHg4YzAwMDUxZSwgMHg0MjAwMDAwMCwgMHg3ZmZlMDBmZSwgMHgwNDAyMDAwMywKKwkweDQyMDAwMDAwLCAweDdmZmUwMWZlLCAweDUwMDAwODAwLCAweDQ4MDc1MDU4LAorCTB4ODAwNDA5MjAsIDB4ODIwNDA1ODAsIDB4MDAwMDAxM2EsIDB4MDQwMDAwMDQsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDEzYiwgMHgwNDAyMDAwNiwgMHg1OWE4MDAwNSwKKwkweDg0MDAwNTUyLCAweDQ4MDM1MDA1LCAweDRhMDM3OGU0LCAweDAwMGMwMDAwLAorCTB4NGEwM2MwMTgsIDB4MDAwMDAwMGYsIDB4NDIwM2UwMDAsIDB4MjAwMDA1MTEsCisJMHg0MjAzZTAwMCwgMHg1MDAxMDAwMCwgMHg0YTAzYzAyMCwgMHgwMDAwMDAwMCwKKwkweDA0MDI3MDEzLCAweDU5ZTAwMDIwLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMjAwMGYsIDB4NGEwM2MwMjAsIDB4MDAwMDQwMDAsIDB4NGEwM2MwMTEsCisJMHg0MDAwMDAxMCwgMHgwNDAwNjAwMCwgMHg0MjAzZTAwMCwgMHg0MDAwMDAwMCwKKwkweDU5ZTAwMDE3LCAweDhjMDAwNTA4LCAweDA0MDAwMDAzLCAweDRhMDNjMDE3LAorCTB4MDAwMDAwMDAsIDB4NDIwM2UwMDAsIDB4MzAwMDAwMDEsIDB4NDIwMmQ4MDAsCisJMHgwMDAwMDAwMCwgMHg0MjAzZTAwMCwgMHhiMDYwMDAwMCwgMHg1OWE4MDAwNSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAyLCAweDhjMDAwNTEyLCAweDA0MDIwMDA3LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMGYsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMDMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwgMHg0MDA3ZjgwMCwgMHg1OWE4MDAwNSwKKwkweDhjMDAwNTE0LCAweDAyMDIwMDAwLCAweDAwMDIwMDA0LCAweDU5ZTAwMDAzLAorCTB4ODIwMDA1MDAsIDB4MDAwMzAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsCisJMHgwNDAyMGFmOCwgMHgwMjAxZjAwMCwgMHgwMDAyMDAwNCwgMHg0ZGYwMDAwMCwKKwkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDQxNmMwMDAwLCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMDgsIDB4MDQwMjFhZWYsIDB4MGMwMWY4MDQsIDB4NWMwM2UwMDAsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDAwOCwgMHgwMDEwMDJmNywgMHgwMDEwMDMwYSwKKwkweDAwMTAwM2Q3LCAweDAwMTAwMmY2LCAweDAwMTAwNDUyLCAweDAwMTAwMmY2LAorCTB4MDAxMDAyZjYsIDB4MDAxMDA1OTMsIDB4MDQwMWZhZTIsIDB4NDIwMDA4MDAsCisJMHgwMDEwYjRhNCwgMHg1ODA0MDAxZCwgMHg0ODAzYzg1NywgMHg4YzAwMDUwMCwKKwkweDA0MDAwMDBkLCAweDg0MDAwNTAwLCAweDQ4MDAwODFkLCAweDQyMDJkODAwLAorCTB4MDAwMDAwMDQsIDB4MDQwMWZiZDMsIDB4NDlmM2M4NTcsIDB4NWMwMDA4MDAsCisJMHg1YzAwMDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwM2UwMCwgMHg0YzAwMDAwMCwKKwkweDRjMDQwMDAwLCAweDFjMDFmMDAwLCAweDA0MDFmYmJkLCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMDAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDUxNTEsCisJMHgwNDAyMDAyZSwgMHg1OWM0MDAwNiwgMHg4MjAwMDU0MCwgMHgwMDAwMDBjMCwKKwkweDQ4MDM4ODA2LCAweDA0MDFmMDI5LCAweDAyMDFmODAwLCAweDAwMTA1MGEyLAorCTB4ODM2YzA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwYmMsIDB4NTlhODAwMTcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAyMDBiOCwgMHg0OTdiNTAxMCwKKwkweDRhMDM4ODkzLCAweDAwMDAwMDAxLCAweDQyMDAxMDAwLCAweDAwMDAwMGYwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2QsIDB4MDIwMWY4MDAsIDB4MDAxMDUxNDksCisJMHg1OWM0MTAwNiwgMHgwNDAyMDAwNiwgMHg4MjA4MTU0MCwgMHgwMDAwMDBmMSwKKwkweDgyMDgxNTAwLCAweGJiZmZmZmZmLCAweDA0MDFmMDAzLCAweDgyMDgxNTQwLAorCTB4NDQwMDAwZjEsIDB4NDgwYjg4MDYsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOWUsCisJMHg0YTAzNzhlNCwgMHgwMDAwMjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgzYSwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQyMDAxMDAwLCAweDAwMDA4MDMwLAorCTB4NDk3YjUwMTMsIDB4MDQwMWYwMzUsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMzgsCisJMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDA3LCAweDA0MDIxMDkxLCAweDAyMDFmODAwLCAweDAwMTA2MDllLAorCTB4NTljNDAwYTMsIDB4ODIwMDA1MDAsIDB4ZmZlZmZmZmYsIDB4NDgwMzg4YTMsCisJMHg1OWE4MDA0YiwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MTM5LCAweDA0MDFmMDg1LCAweDU5YTgwMDE1LCAweDg0MDAwNTQ2LAorCTB4NDgwMzUwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDUxNDEsIDB4NTljNDEwMDYsCisJMHgwNDAyMDAwNiwgMHg4MjA4MTU0MCwgMHg0NDAwMDAwMSwgMHg4MjA4MTUwMCwKKwkweGZmZmZmZjBmLCAweDA0MDFmMDAzLCAweDgyMDgxNTQwLCAweDQ0MDAwMGYxLAorCTB4NDgwYjg4MDYsIDB4NDk3YjkwMDUsIDB4NGEwMzg4MDIsIDB4MDAwMGZmZmYsCisJMHg0YTAzNzhlNCwgMHgwMDAwMzAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgwYywKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5YTgxMDEwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsIDB4NDIwMDEwMDAsCisJMHgwMDAwODAxMCwgMHg1OWE4MTgwYSwgMHgwMjAxZjgwMCwgMHgwMDEwM2EzZSwKKwkweDAyMDFmODAwLCAweDAwMTAxODE1LCAweDU5YTgwODA1LCAweDgyMDQwZDAwLAorCTB4ZmZmZmZmZGYsIDB4NDgwNzUwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4M2QsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAwMDAwYSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MTNlLCAweDA0MDAwMDA3LCAweDRhMDM1MDEzLCAweDAwMDAwMDAxLAorCTB4NDk3YjUwMjEsIDB4MDIwMWY4MDAsIDB4MDAxMDNjODAsIDB4MDQwMWYwNGYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDhlYywgMHgwNDAwMDAwNSwgMHg1OWM0MTAwMiwKKwkweDg0MDgxNTBjLCAweDQ4MGI4ODAyLCAweDA0MDFmMDEyLCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMjAwMDYsIDB4NTlhODAwMWQsIDB4ODAwMDA1NDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwOTMwZiwgMHgwNDAxZjAwYSwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MzBmLCAweDU5YTgwMDI2LCAweDhjMDAwNTA2LCAweDA0MDIwMDA1LAorCTB4NTlhODAwMWQsIDB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsIDB4MDAxMDQyNDUsCisJMHg0OTdiNTAyOCwgMHg0OTdiNTAyNywgMHg0OTdiNTAxOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1MTNiLCAweDU5YTgxMDI2LCAweDA0MDIwMDBhLCAweDAyMDFmODAwLAorCTB4MDAxMDE2MmEsIDB4ODAwMDE1ODAsIDB4NTlhODAwMmEsIDB4ODIwMDA1MDAsCisJMHhmZmZmMDAwMCwgMHg4MDA0MGQ0MCwgMHg0ODA3NTAyYSwgMHgwNDAxZjAwNSwKKwkweDU5YTgwMDJhLCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDQ4MDM1MDJhLAorCTB4NTk5YzAwMTcsIDB4OGMwMDA1MGEsIDB4MDQwMDAwMDIsIDB4ODQwODE1NDQsCisJMHg0ODBiNTAyNiwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAwMDAwNCwKKwkweDAyMDFmODAwLCAweDAwMTAxNjJhLCAweDQ4MDc4ODgwLCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDcwYjAsIDB4NDk3YjUwMjgsCisJMHg0OTdiNTAxYiwgMHg0YTAzNTAxYywgMHgwMDAwZmZmZiwgMHg0YTAzNzhlNCwKKwkweDAwMDAwMGMwLCAweDQyMDJkODAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMDAwMDcsIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwYywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAwMywKKwkweDAyMDFmODAwLCAweDAwMTAxZTQ1LCAweDFjMDFmMDAwLCAweDU5YTgwMDFjLAorCTB4ODIwMDA1ODAsIDB4MDAwMGZmZmYsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWU0NSwgMHgwNDAxZjA3NCwgMHg1OWE4MDAyNiwgMHg4YzAwMDUwYSwKKwkweDA0MDIwMDAzLCAweDhjMDAwNTA2LCAweDA0MDAwMDFjLCAweDhjMDAwNTAwLAorCTB4MDQwMDAwMWEsIDB4NGEwMzg4MDIsIDB4MDAwMGZmYmYsIDB4OGMwMDA1MDIsCisJMHgwNDAwMDAxNiwgMHg1OTljMDAxOCwgMHg4YzAwMDUxNiwgMHgwNDAyMDAxMCwKKwkweDU5YTgwMDI3LCAweDgyMDAwNTgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDBjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDFmOWEsIDB4NTlhODAwMjYsIDB4OGMwMDA1MDQsCisJMHgwNDAyMDA1ZCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwMywgMHg0MTdhNTgwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxZmJmLCAweDA0MDFmMDU3LCAweDU5YTgwMDI4LAorCTB4ODAwMDA1NDAsIDB4MDQwMjAwNTQsIDB4NTlhODAwMjYsIDB4OGMwMDA1MDgsCisJMHgwNDAyMDAwNSwgMHg1OWE4MDAxYiwgMHg4MDAwMDU0MCwgMHgwNDAyMDA0ZSwKKwkweDA0MDFmMDAzLCAweDhjMDAwNTE2LCAweDA0MDAwMDRiLCAweDAyMDFmODAwLAorCTB4MDAxMDQ4ZWMsIDB4MDQwMjAwNDgsIDB4NTk5YzAwMTgsIDB4OGMwMDA1MTYsCisJMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNGM1MSwgMHgwNDAyMDA0MiwKKwkweDU5OWMwMDE3LCAweDhjMDAwNTBhLCAweDA0MDAwMDBkLCAweDQyMDBiMDAwLAorCTB4MDAwMDA3ZjAsIDB4NDE3YTg4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsCisJMHgwNDAyMDAwNCwgMHg1OTM0MDIwMCwgMHg4YzAwMDUxYSwgMHgwNDAyMDAzNiwKKwkweDgxNDY4ODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y4LCAweDRhMDM4ODAyLAorCTB4MDAwMGZmZmYsIDB4NDIwMDE4MDAsIDB4MDAxMGI0ZWIsIDB4MDQwMWZiOGMsCisJMHg0MjAwMTgwMCwgMHgwMDEwYjRmOCwgMHgwNDAxZmI4OSwgMHg1OWE4MDAwNSwKKwkweDg0MDAwNTAyLCAweDQ4MDM1MDA1LCAweDRhMDM3OGU0LCAweDAwMDAwMDgwLAorCTB4NDIwMmQ4MDAsIDB4MDAwMDAwMDMsIDB4NGEwMzUwMWMsIDB4MDAwMGZmZmYsCisJMHgwNDAxZmE3ZiwgMHg4MDAwMDU4MCwgMHgwMjAxZjgwMCwgMHgwMDEwMTU5MCwKKwkweDU5OWMwMDE4LCAweDhjMDAwNTE2LCAweDA0MDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDNiMTAsIDB4MDQwMWYwMDksIDB4NDIwMDE4MDAsIDB4MDAwMGZmZmYsCisJMHg0MjAwMjAwMCwgMHgwMDAwMDAwNiwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAzYWFlLCAweDAyMDFmODAwLCAweDAwMTA1MTUxLAorCTB4MDQwMDAwMGIsIDB4NTljNDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCisJMHgwNDAwMDAwNCwgMHg4MjAwMDUwMCwgMHhmZmZmZmYwZiwgMHgwNDAxZjAwMywKKwkweDgyMDAwNTAwLCAweGZiZmZmZmZmLCAweDQ4MDM4ODA2LCAweDAyMDFmODAwLAorCTB4MDAxMDZmMzYsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsCisJMHg0YzEwMDAwMCwgMHg1OWE4MDAzZSwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDIxOTgwLCAweDBjMDFmODA1LCAweDVjMDAyMDAwLCAweDVjMDAxMDAwLAorCTB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDA0NjIsIDB4MDAxMDA0ZWEsCisJMHgwMDEwMDUxNiwgMHgwMDEwMDU3NywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTAxNTkwLCAweDAyMDFmODAwLCAweDAwMTA2MDllLAorCTB4NTljNDA4YTMsIDB4ODIwNDBkMDAsIDB4ZmZmZmZmZjcsIDB4NDgwNzg4YTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTE0MSwgMHgwNDAwMDAwZSwgMHgwMjAxZjgwMCwKKwkweDAwMTA1MTUxLCAweDA0MDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA1MTQ5LAorCTB4MDQwMjA5NjQsIDB4NTljNDAwYTMsIDB4ODQwMDA1MzIsIDB4ODQwMDA1NzAsCisJMHg0ODAzODhhMywgMHg0YTAzODgwOCwgMHgwMDAwMDAwOCwgMHgwNDAxZjAxMCwKKwkweDU5YzQwMGEzLCAweDg0MDAwNTMwLCAweDgyMDAwNTAwLCAweGJmN2ZmZmZmLAorCTB4NDgwMzg4YTMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZjgsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDIwMCwgMHg1OWM0MDBhMywgMHg4MjAwMDU0MCwgMHgwMDAxODAwMCwKKwkweDg0MDAwNTFjLCAweDQ4MDM4OGEzLCAweDQ5N2I4ODA4LCAweDU5YzQwMDA2LAorCTB4ODIwMDA1MDAsIDB4ZmJmZmZmMGUsIDB4NDgwMzg4MDYsIDB4NDk3YjI4MjIsCisJMHg0OTdiMjgyMywgMHg0MjAwMDgwMCwgMHgwMDAwMDFmNCwgMHg0MjAwMTAwMCwKKwkweDAwMTAwNTkxLCAweDAyMDFmODAwLCAweDAwMTA1ZjgzLCAweDU5YzQwODA1LAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE5M2QsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTYzYiwgMHgwNDAyMDAwYSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxODhjLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE4MjEsIDB4MDQwMWYwMjIsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTY0MiwgMHgwNDAyMDAwOCwgMHg0MTc4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxODhjLCAweDQxNzgwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE4MjEsIDB4MDQwMWYwMTgsIDB4MDIwMWY4MDAsIDB4MDAxMDE2NDksCisJMHgwNDAyMDAwYSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTAxODhjLCAweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLAorCTB4MDAxMDE4MjEsIDB4MDQwMWYwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDE2NTAsCisJMHgwNDAyMDkxOCwgMHg1OWE4MDA0OSwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTAxNjU2LCAweDRhMDM1MDNlLCAweDAwMDAwMDAxLAorCTB4MDQwMWYwMjEsIDB4MDIwMWY4MDAsIDB4MDAxMDE5MjcsIDB4NGEwMzUwM2UsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNTE0MSwgMHgwNDAwMDAwYywKKwkweDAyMDFmODAwLCAweDAwMTA1MTUxLCAweDA0MDAwMDA5LCAweDAyMDFmODAwLAorCTB4MDAxMDUxNDksIDB4MDQwMjA5MDMsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTBhMiwgMHgwNDAxZjAwZiwgMHg1OWM0MDBhNCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDA4LAorCTB4MDQwMDAwMDMsIDB4NGEwMzg4MDUsIDB4MDQwMDAwMDAsIDB4NTljNDAwYTMsCisJMHg4MjAwMDU0MCwgMHgwMDAxYzAwMCwgMHg0ODAzODhhMywgMHg4NDAwMDUyMCwKKwkweDQ4MDM4OGEzLCAweDFjMDFmMDAwLCAweDA0MDFmOGEzLCAweDA0MDIwMDA0LAorCTB4NGEwMzUwM2UsIDB4MDAwMDAwMDMsIDB4MDQwMWYwMjcsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTY1MCwgMHgwNDAyMDAxMSwgMHg1OWE4MDA0OSwgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDBlLCAweDAyMDFmODAwLCAweDAwMTAxNjU2LCAweDU5YTgwMDQ4LAorCTB4OGMwMDA1MWUsIDB4MDQwMDAwMWMsIDB4MDIwMWY4MDAsIDB4MDAxMDUxNDksCisJMHgwNDAyMDAwOSwgMHg0YTAzNTAzMywgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKKwkweDAwMTA1MGEyLCAweDA0MDFmMDA0LCAweDAyMDFmODAwLCAweDAwMTAxOGQzLAorCTB4MDQwMjAwMTEsIDB4MDIwMWY4MDAsIDB4MDAxMDE4MTUsIDB4NGEwMzUwM2UsCisJMHgwMDAwMDAwMiwgMHg0OTdiNTA0OSwgMHg1OWM0MDBhMywgMHg4NDAwMDUyMCwKKwkweDQ4MDM4OGEzLCAweDQ5N2IyODIyLCAweDQ5N2IyODIzLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMmQsIDB4NDIwMDEwMDAsIDB4MDAxMDA1OTEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWY4MywgMHgxYzAxZjAwMCwgMHgwNDAxZjg3NywgMHgwNDAyMDAwNCwKKwkweDRhMDM1MDNlLCAweDAwMDAwMDAzLCAweDA0MDFmMDViLCAweDRhMDM4ODA1LAorCTB4MDAwMDAwZjAsIDB4MDIwMWY4MDAsIDB4MDAxMDE4ZDMsIDB4MDQwMjAwNTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTE0OSwgMHgwNDAwMDA0NCwgMHg1OWM0MDBhNCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDA4LAorCTB4MDQwMDAwMjAsIDB4NTljNDAwMDUsIDB4OGMwMDA1MzQsIDB4MDQwMjAwMWQsCisJMHg1OTk0MDAyMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAyMDA0NiwKKwkweDAyMDFmODAwLCAweDAwMTA1MTUxLCAweDA0MDIwMDQzLCAweDRhMDM4ODA1LAorCTB4MDAwMDAwZjAsIDB4MDIwMWY4MDAsIDB4MDAxMDUxOTYsIDB4NGEwMzUwMzIsCisJMHgwMDAwYWFhYSwgMHg0YTAzNTAzMywgMHgwMDAwMDAwMCwgMHg1OWM0MDhhMywKKwkweDgyMDQwZDQwLCAweDAwMDAwMDA4LCAweDQ4MDc4OGEzLCAweDQyMDJkODAwLAorCTB4MDAwMDAwMDEsIDB4NGEwMzUwM2UsIDB4MDAwMDAwMDAsIDB4NGEwMzg4MDUsCisJMHgwMDAwMDAwMSwgMHg0OTdiMjgyMiwgMHg0OTdiMjgyMywgMHgwNDAxZjAxZiwKKwkweDAyMDFmODAwLCAweDAwMTA1MTUxLCAweDA0MDIwMDA3LCAweDU5YTgwMDMyLAorCTB4ODIwMDA1ODAsIDB4MDAwMGFhYWEsIDB4MDQwMjAwMDMsIDB4NGEwMzUwMTAsCisJMHgwMGZmZmZmZiwgMHg0OTdiNTAzMiwgMHg1OWM0MDAwNiwgMHg4MjAwMDU0MCwKKwkweDA0MDAwMDAxLCAweDQ4MDM4ODA2LCAweDU5YTgwODA1LCAweDhjMDQwZDA2LAorCTB4MDQwMjAwMDUsIDB4NTljNDA4YTMsIDB4ODIwNDBkNDAsIDB4MDAwMDAwMDgsCisJMHg0ODA3ODhhMywgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwgMHg0YTAzNTAzZSwKKwkweDAwMDAwMDAwLCAweDRhMDM4ODA1LCAweDAwMDAwMDAxLCAweDQ5N2IyODIyLAorCTB4NDk3YjI4MjMsIDB4MDQwMWYwMTAsIDB4NTljNDAwMDUsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBjMCwgMHgwNDAwMDAwYywgMHg1OWM0MDAwNiwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMGYxLCAweDQ4MDM4ODA2LCAweDA0MDFmN2VmLCAweDAyMDFmODAwLAorCTB4MDAxMDE2NTAsIDB4MDQwMjAwMDQsIDB4NTlhODAwNDksIDB4ODAwMDAxYzAsCisJMHgwNDAyMDdhNCwgMHg0OTdiODg4NSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxNTkwLAorCTB4NGEwMzUwM2UsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE2NTAsCisJMHgwNDAyMDAwYiwgMHg1OWE4MDA1MiwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwNCwKKwkweDgwMDAwMDQwLCAweDQ4MDM1MDUyLCAweDA0MDIwMDA1LCAweDRhMDM1MDUyLAorCTB4MDAwMDAwMGEsIDB4NGEwMzUwNDksIDB4MDAwMDAwMDEsIDB4NDk3Yjg4ODUsCisJMHgwNDAxZjBlZCwgMHg1OTk0MDAyMiwgMHg1OTk0MDgyMywgMHg4MDA0MDU0MCwKKwkweDFjMDFmMDAwLCAweDQ5N2IyODIzLCAweDFjMDFmMDAwLCAweDRjMDgwMDAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwZjAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5M2QsCisJMHg1YzAwMTAwMCwgMHgxYzAxZjAwMCwgMHg0YTAzNTA1YywgMHgwMDAwMDAwNCwKKwkweDRhMDM1MDVkLCAweDAwMDAwMDAwLCAweDRhMDM1MDVlLCAweDAwMDAwMDEwLAorCTB4NGEwMzUwNWYsIDB4MDAwMDAwMDIsIDB4NGEwMzUwMTAsIDB4MDBmZmZmZmYsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTMwZiwgMHg0YTAzNTAyYSwgMHgyMDIwMDAwMCwKKwkweDRhMDM1MDJiLCAweDg4MDAwMjAwLCAweDRhMDM1MDJjLCAweDAwZmYwMDFmLAorCTB4NGEwMzUwMmQsIDB4MDAwMDA3ZDAsIDB4NGEwMzUwMmUsIDB4ODAwMDAwMDAsCisJMHg0YTAzNTAyZiwgMHgwMDAwMDIwMCwgMHg0YTAzNTAzMCwgMHgwMGZmMDAwMCwKKwkweDRhMDM1MDMxLCAweDAwMDEwMDAwLCAweDRhMDM1MDNhLCAweDUxNGM0ZjQ3LAorCTB4NGEwMzUwM2IsIDB4NDk0MzIwMjAsIDB4MWMwMWYwMDAsIDB4NGQ0NDAwMDAsCisJMHg0MTdhODgwMCwgMHg0MTc4MDgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwKKwkweDA0MDIwMDA1LCAweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDIwMDAyLAorCTB4ODAwNDA4MDAsIDB4ODE0Njg4MDAsIDB4ODM0NDA1ODAsIDB4MDAwMDA3ZjAsCisJMHgwNDAyMDdmNiwgMHg1YzAyODgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NywKKwkweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDA0MDFmODA5LAorCTB4NDg1ZmM4NTcsIDB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4NWMwMDAwMDAsCisJMHg0ZDc4MDAwMCwgMHg0MjAwYjgwMCwgMHgwMDAwODAwMiwgMHgwNDAxZjAwNiwKKwkweDQ4NWZjODU3LCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDQyMDBiODAwLAorCTB4MDAwMDgwMDIsIDB4MDQwMDYwMDAsIDB4NGMwMDAwMDAsIDB4NGMwNDAwMDAsCisJMHg1OWJjMDBlYSwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwNywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAxLCAweDA0MDIwMDA1LCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjNmMsIDB4NWMwMDA4MDAsIDB4NDgwN2MwMjUsCisJMHg4MDA0MDkyMCwgMHg0ODA3YzAyNiwgMHg1YzAwMDAwMCwgMHg0ODAzYzAyMywKKwkweDgwMDAwMTIwLCAweDQ4MDNjMDI0LCAweDVjMDAwMDAwLCAweDQ4MDNjODU3LAorCTB4NDgwM2MwMjEsIDB4ODAwMDAxMjAsIDB4NDgwM2MwMjIsIDB4NDFmODAwMDAsCisJMHg0ODAzYzAyNywgMHg4MDAwMDEyMCwgMHg0ODAzYzAyOCwgMHg0MjAwMDAwMCwKKwkweDAwMDAxMDAwLCAweDUwMDAwMDAwLCAweDgyMDAwNDgwLCAweDI0MzIwMDAxLAorCTB4NDgwM2M4NTcsIDB4MDQwMDEwNGYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwNjQsCisJMHg4MDA0MDg0MCwgMHgwNDAwMDAwNywgMHg0YTAzMDAwMCwgMHgwMDAwMDAwMSwKKwkweDQwMDAwMDAwLCAweDU5ODAwMDAwLCAweDhjMDAwNTAwLCAweDA0MDAwN2Y5LAorCTB4MDQwMDAwNDIsIDB4NDIwMDA4MDAsIDB4MDAxMGMxYTMsIDB4NDYwMDA4MDAsCisJMHhmYWNlZmFjZSwgMHg4MDA0MDgwMCwgMHg0MjAwMTAwMCwgMHgwMDAwN2EwMCwKKwkweDU4MDgwMDEzLCAweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDE5LAorCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NTgwODAwMWEsIDB4NDQwMDA4MDAsCisJMHg4MDA0MDgwMCwgMHg1ODA4MDAxYiwgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwKKwkweDU4MDgwMDFjLCAweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDFmLAorCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDdhNDAsCisJMHg0MjAwMTgwMCwgMHgwMDAwMDAwYiwgMHg1MDA4MDAwMCwgMHg0NDAwMDgwMCwKKwkweDgwMDgxMDAwLCAweDgwMDQwODAwLCAweDgwMGMxODQwLCAweDA0MDIwN2ZiLAorCTB4NDIwMDE4MDAsIDB4MDAwMDAwMDMsIDB4NDIwMDEwMDAsIDB4MDAwMDdiMDAsCisJMHg0ODBjMTAwMywgMHg1ODA4MDAwNSwgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwKKwkweDgwMGMxODQwLCAweDA0MDIxN2ZiLCAweDQyMDAxMDAwLCAweDAwMDA3YzAwLAorCTB4NTgwODAwMDIsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NTgwODAwMDMsCisJMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg1ODA4MDAyMCwgMHg0NDAwMDgwMCwKKwkweDgwMDQwODAwLCAweDU4MDgwMDIxLCAweDQ0MDAwODAwLCAweDgwMDQwODAwLAorCTB4NTgwODAwMjIsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NTgwODAwMjMsCisJMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg0YTAzMDAwMCwgMHgwMDAwMDAwMCwKKwkweDQ4NWZjMDIwLCAweDkwNWNiOWMwLCAweDgyNWNiZDQwLCAweDAwMDAwMDEyLAorCTB4NDg1ZmMwMTEsIDB4NDIwM2UwMDAsIDB4NDAwMDAwMDAsIDB4NDIwMmQ4MDAsCisJMHgwMDAwMDAwNSwgMHg1OWUwMDAxNywgMHg4YzAwMDUwOCwgMHgwNDAwMDAwMywKKwkweDRhMDNjMDE3LCAweDAwMDAwMDAyLCAweDQyMDNlMDAwLCAweDMwMDAwMDAxLAorCTB4MDQwMWY4MWEsIDB4MDQwMWY3ZmYsIDB4NGEwM2M4NTAsIDB4MDAxMGMxYmYsCisJMHg0YTAzYzg1MSwgMHgwMDEwZDFiZSwgMHg0YTAzYzg1MywgMHgwMDAwMDgwMCwKKwkweDRhMDNjODU1LCAweDAwMDFlYjVhLCAweDU5ZTQwMDAxLCAweDgyMDAwNTQwLAorCTB4MDAwMDNmMDAsIDB4NDgwM2M4MDEsIDB4NGEwM2IxMDQsIDB4NzAwMDAwMDIsCisJMHg0YTAzYTgwNCwgMHg3MDAwMDAwMiwgMHg0YTAzYjAwNCwgMHg3MDAwMDAwMiwKKwkweDQyMDAwMDAwLCAweDAwMTBiOGVjLCAweDQ5NzgwMDAxLCAweDQ5NzgwMDAyLAorCTB4MWMwMWYwMDAsIDB4MWMwMWYwMDAsIDB4NTlhODAwNmIsIDB4OGMwMDA1MzAsCisJMHgwNDAyMDdmZSwgMHg0YzA4MDAwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwNCwKKwkweDA0MDFmODYyLCAweDVjMDAxMDAwLCAweDQyMDFkMDAwLCAweDAwMDI4YjBhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsIDB4NGMwODAwMDAsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAwOCwgMHgwNDAxZjg1OSwgMHg1YzAwMTAwMCwgMHg0MjAxZDAwMCwKKwkweDAwMDI4YjBhLCAweDAyMDFmODAwLCAweDAwMTA2MDhlLCAweDRjMDgwMDAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMWY4NTAsIDB4NWMwMDEwMDAsCisJMHg0MjAxZDAwMCwgMHgwMDAyOGIwYSwgMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwKKwkweDA0MDFmN2UyLCAweDhjMDAwNTBjLCAweDU5YTgwODZiLCAweDA0MDIwMDAzLAorCTB4ODQwNDBkMzAsIDB4MDQwMWYwMDYsIDB4ODQwNDBkNzAsIDB4NDgwNzUwNmIsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjA0MCwgMHg0ODA3NTA2YiwKKwkweDgzNmMwNTAwLCAweDAwMDAwMDA3LCAweDBjMDFmMDAxLCAweDAwMTAwNmUxLAorCTB4MDAxMDA2YzcsIDB4MDAxMDA2YzcsIDB4MDAxMDA2YWYsIDB4MDAxMDA2ZDQsCisJMHgwMDEwMDZjNywgMHgwMDEwMDZjNywgMHgwMDEwMDZkNCwgMHg1OWE4MDAwNSwKKwkweDhjMDAwNTE0LCAweDA0MDIwMDEzLCAweDU5YzQwODAxLCAweDgyMDQwZDAwLAorCTB4MDAwMTgwMDAsIDB4ODIwNDA1ODAsIDB4MDAwMTAwMDAsIDB4MDQwMDAwMGEsCisJMHg4MjA0MDU4MCwgMHgwMDAwODAwMCwgMHgwNDAwMDAwNCwgMHg0MjAwMTAwMCwKKwkweDQyMDA0MDAwLCAweDA0MDFmMDA2LCAweDQyMDAxMDAwLCAweDIyMDAyMDAwLAorCTB4MDQwMWYwMDMsIDB4NDIwMDEwMDAsIDB4MTIwMDEwMDAsIDB4MDQwMWYwMjUsCisJMHg0MjAwMTAwMCwgMHgwMDAwMTAwNCwgMHgwNDAxZjAyMiwgMHg1OWE4MDAwNSwKKwkweDhjMDAwNTE0LCAweDA0MDIwMDA4LCAweDU5YTgwMDZiLCAweDhjMDAwNTM0LAorCTB4MDQwMjAwMDQsIDB4NDIwMDEwMDAsIDB4NzQwNTcwMDUsIDB4MDQwMWY4MTksCisJMHgxYzAxZjAwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMjAwOCwgMHgwNDAxZjdmYywKKwkweDU5YTgwMDZiLCAweDhjMDAwNTM0LCAweDA0MDIwMDBhLCAweDU5YTgwMDA1LAorCTB4OGMwMDA1MTQsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsIDB4MjQwNTIwMDUsCisJMHgwNDAxZjAwYywgMHg0MjAwMTAwMCwgMHg3NDA1NzAwNSwgMHgwNDAxZjAwOSwKKwkweDFjMDFmMDAwLCAweDFjMDFmMDAwLCAweDgyMDgxNTAwLCAweDAwMDAwMDFjLAorCTB4ODIwODE1NDAsIDB4MDAxYzAwMDAsIDB4NDgwYmMwMTMsIDB4MWMwMWYwMDAsCisJMHg1OWE4MDA2YiwgMHg4YzAwMDUzMCwgMHgwNDAwMDAwMiwgMHg4NDA4MTU3MCwKKwkweDQ4MGI1MDZiLCAweDhjMDAwNTMwLCAweDA0MDIwMDA1LCAweDgyMDgxNTAwLAorCTB4MDAwMDcwMDAsIDB4ODAwODExMTQsIDB4MDQwMWZmZjAsIDB4MWMwMWYwMDAsCisJMHg0MTc4MDAwMCwgMHg1MDA0MTgwMCwgMHg4MDBjMDQwMCwgMHg4MDA0MDgwMCwKKwkweDgwMTAyMDQwLCAweDA0MDIwN2ZjLCAweDgwMDgwNTAwLCAweDgwMDAwNTQwLAorCTB4MWMwMWYwMDAsIDB4NDIwMmYwMDAsIDB4MDAwMDAwMDAsIDB4NDE3ODAwMDAsCisJMHg0MTc4MDgwMCwgMHg0MTc4MTAwMCwgMHg0MTc4MTgwMCwgMHg0MTc4MjAwMCwKKwkweDQxNzgyODAwLCAweDQxNzgzMDAwLCAweDQxNzgzODAwLCAweDQxNzg0MDAwLAorCTB4NDE3ODQ4MDAsIDB4NDE3ODUwMDAsIDB4NDE3ODU4MDAsIDB4NDE3ODYwMDAsCisJMHg0MTc4NjgwMCwgMHg0MTc4NzAwMCwgMHg0MTc4NzgwMCwgMHg0MTc4ODAwMCwKKwkweDQxNzg4ODAwLCAweDQxNzg5MDAwLCAweDQxNzg5ODAwLCAweDQxNzhhMDAwLAorCTB4NDE3OGE4MDAsIDB4NDE3OGIwMDAsIDB4NDE3OGI4MDAsIDB4NDE3OGMwMDAsCisJMHg0MTc4YzgwMCwgMHg0MTc4ZDAwMCwgMHg0MTc4ZDgwMCwgMHg0MTc4ZTAwMCwKKwkweDQxNzhlODAwLCAweDQxNzhmMDAwLCAweDQxNzhmODAwLCAweDQxNzkwMDAwLAorCTB4NDE3OTA4MDAsIDB4NDE3OTEwMDAsIDB4NDE3OTE4MDAsIDB4NDE3OTIwMDAsCisJMHg0MTc5MjgwMCwgMHg0MTc5MzAwMCwgMHg0MTc5MzgwMCwgMHg0MTc5NDAwMCwKKwkweDQxNzk0ODAwLCAweDQxNzk1MDAwLCAweDQxNzk1ODAwLCAweDQxNzk2MDAwLAorCTB4NDE3OTY4MDAsIDB4NDE3OTcwMDAsIDB4NDE3OTc4MDAsIDB4NDE3OTgwMDAsCisJMHg0MTc5ODgwMCwgMHg0MjAxOTAwMCwgMHgwMDEwYjUzNywgMHg0MjAxOTgwMCwKKwkweDAwMTBiNTBlLCAweDQxNzlhMDAwLCAweDQxNzliMDAwLCAweDQxNzlhODAwLAorCTB4NDE3OWI4MDAsIDB4NDE3OWM4MDAsIDB4NDE3OWMwMDAsIDB4NDE3OWQwMDAsCisJMHg0MTc5ZDgwMCwgMHg0MTc5ZTAwMCwgMHg0MTc5ZTgwMCwgMHg0MTc5ZjAwMCwKKwkweDQxNzlmODAwLCAweDQxN2EwMDAwLCAweDQxN2EwODAwLCAweDQxN2ExMDAwLAorCTB4NDE3YTE4MDAsIDB4NDE3YTIwMDAsIDB4NDIwMjI4MDAsIDB4MDAwMDYxMDAsCisJMHg0MTdhMzAwMCwgMHg0MTdhMzgwMCwgMHg0MTdhNDAwMCwgMHg0MTdhNDgwMCwKKwkweDQxN2E1MDAwLCAweDQxN2E1ODAwLCAweDQxN2E2MDAwLCAweDQxN2E2ODAwLAorCTB4NDE3YTcwMDAsIDB4NDE3YTc4MDAsIDB4NDE3YTgwMDAsIDB4NDE3YTg4MDAsCisJMHg0MTdhOTAwMCwgMHg0MTdhOTgwMCwgMHg0MTdhZTgwMCwgMHg0MTdhZjgwMCwKKwkweDQyMDMwMDAwLCAweDAwMDA3YzAwLCAweDQyMDMxMDAwLCAweDAwMTBiODA2LAorCTB4NDIwMzE4MDAsIDB4MDAwMGJmMWQsIDB4NDIwMzIwMDAsIDB4MDAwMGJmMzIsCisJMHg0MjAzMjgwMCwgMHgwMDEwYjdjZSwgMHg0MjAzMzAwMCwgMHgwMDEwYjQ2ZSwKKwkweDQyMDM0MDAwLCAweDAwMTBiNGE0LCAweDQyMDMzODAwLCAweDAwMTBiNGMzLAorCTB4NDIwMzQ4MDAsIDB4MDAxMGI1NDQsIDB4NDIwMzUwMDAsIDB4MDAxMGI0MDAsCisJMHg0MjAzNTgwMCwgMHgwMDEwYWMwMCwgMHg0MjAzMDgwMCwgMHgwMDEwYjUwNSwKKwkweDQxN2I2MDAwLCAweDQyMDM2ODAwLCAweDAwMDA2ZjAwLCAweDQyMDNjODAwLAorCTB4MDAwMDMwMDAsIDB4NDIwMzcwMDAsIDB4MDAwMGZmMDAsIDB4NDIwMzc4MDAsCisJMHgwMDAwYmYwMCwgMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwgMHg0MjAzODgwMCwKKwkweDAwMDA0MDAwLCAweDQyMDM5MDAwLCAweDAwMDA2MDAwLCAweDQyMDM5ODAwLAorCTB4MDAxMGJlZGIsIDB4NDIwM2EwMDAsIDB4MDAwMDc2MDAsIDB4NDIwM2E4MDAsCisJMHgwMDAwNzQwMCwgMHg0MjAzYjAwMCwgMHgwMDAwNzIwMCwgMHg0MjAzYjgwMCwKKwkweDAwMDA3MTAwLCAweDQyMDNjMDAwLCAweDAwMDA3MDAwLCAweDQyMDNkMDAwLAorCTB4MDAwMDAwMDAsIDB4NDIwM2U4MDAsIDB4MDAxMDFiOTUsIDB4NDE3YmQ4MDAsCisJMHgxYzAxZjAwMCwgMHg0MjAwMDgwMCwgMHgwMDEwMDAwMCwgMHg1MDA0MDAwMCwKKwkweDRjMDAwMDAwLCAweDQyMDAwMDAwLCAweDAwMDBhYWFhLCAweDQ0MDAwODAwLAorCTB4NDIwMDE4MDAsIDB4MDAwMDU1NTUsIDB4NDE3ODIwMDAsIDB4ODIxMDI0MDAsCisJMHgwMDAxMDAwMCwgMHg0MDEwMDAwMCwgMHg4MDA0MmMwMCwgMHg0NDBjMjgwMCwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDBhLCAweDgwMTgzMDQwLCAweDA0MDIwN2ZmLAorCTB4NTAxNDAwMDAsIDB4ODAwYzA1ODAsIDB4MDQwMjAwMDQsIDB4NTAwNDAwMDAsCisJMHg4MDBjMDU4MCwgMHgwNDAyMDdmMiwgMHg1YzAwMDAwMCwgMHg0NDAwMDgwMCwKKwkweDgwMTQyODQwLCAweDQ4MTdjODYxLCAweDFjMDFmMDAwLCAweDU5YTgwODFmLAorCTB4ODAwNDA5YzAsIDB4MDQwMjAwMDksIDB4NDk3ODFjMGMsIDB4NGEwMDFhMGMsCisJMHgwMDAwMDIwMCwgMHg0YTAwMTgwNCwgMHgwNzAwMDAwMCwgMHg1OWE4MDAxMCwKKwkweDljMDAwMWMwLCAweDQ4MDAxODA1LCAweDA0MDFmZTAxLCAweDljMDQwOWMwLAorCTB4NDgwNDE4MDYsIDB4MWMwMWYwMDAsIDB4NTlhODA4MGMsIDB4NDAwNmQwMDAsCisJMHg0MjAyYjgwMCwgMHgwMDAwMDAwMSwgMHg1OWE4MTgwZCwgMHg0ODBmYzg1NywKKwkweDgyMDQxNDAwLCAweDAwMDAwMDE0LCAweDgyMDgyNDAwLCAweDAwMDAwMDE0LAorCTB4NDAxMDAwMDAsIDB4ODAwYzA0ODAsIDB4MDQwMDEwMDYsIDB4NDQwODA4MDAsCisJMHg0MDA4MDgwMCwgMHg0MDEwMTAwMCwgMHg4MTVlYjgwMCwgMHgwNDAxZjdmNywKKwkweDQ1NzgwODAwLCAweDQ5NWY1MDIwLCAweDFjMDFmMDAwLCAweDgzNWMwNDgwLAorCTB4MDAwMDAwMjAsIDB4MDQwMDEwMDksIDB4NDk2YmM4NTcsIDB4ODE1ZWI4NDAsCisJMHg0MTZhNTgwMCwgMHg1OTJlZDAwMCwgMHg0OTdhNTgwMCwgMHg0OTdhNTgwMSwKKwkweDgxMmU1OWMwLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODUzLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDE3YTU4MDAsIDB4MDQwMWY3ZjksCisJMHg4MTVlYjg0MCwgMHgwNDAwMTAwOCwgMHg0MTZhNTgwMCwgMHg0OTJmYzg1NywKKwkweDU5MmVkMDAwLCAweDQ5N2E1ODAwLCAweDQ5N2E1ODAxLCAweDgxMmU1OWMwLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NTMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHg0MTdhYjgwMCwgMHg0MTdhNTgwMCwgMHgwNDAxZjdmOCwKKwkweDQ5MmZjODU3LCAweDQ5NmE1ODAwLCAweDQxMmVkMDAwLCAweDgxNWViODAwLAorCTB4NTljODAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsCisJMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywgMHg4MTJlNTljMCwgMHgwNDAwMDAwNywKKwkweDU5MmMwMDAxLCAweDQ5N2E1ODAxLCAweDRjMDAwMDAwLCAweDA0MDFmZmYxLAorCTB4NWMwMjU4MDAsIDB4MDQwMWY3ZjksIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsCisJMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwgMHg0YTAwNzAwMSwgMHgwMDAwMDAwMCwKKwkweDU5ZTAwMDAzLCAweDgyMDAwNTQwLCAweDAwMDA4MDgwLCAweDQ4MDNjMDAzLAorCTB4NGEwM2I4MDUsIDB4OTAwMDAwMDEsIDB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsCisJMHg3MDAwMDAwMCwgMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHgzMDAwMDAwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDIwLCAweDQ5N2JiODA3LCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZmUsIDB4NGEwM2I4MDUsIDB4MzAwMDAwMDAsIDB4NTlkYzAwMDYsCisJMHg0YTAzYjgwNSwgMHg2MDAwMDAwMSwgMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwKKwkweDcwMDAwMDAxLCAweDU5ZGMwMDA2LCAweDRhMDNiODA1LCAweDMwMDAwMDAyLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMjAsIDB4NDk3YmI4MDcsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmZSwgMHg0YTAzYjgwNSwgMHgzMDAwMDAwMCwgMHg1OWRjMDAwNiwKKwkweDRhMDNiODA1LCAweDYwMDAwMDAxLCAweDA0MDFmZmExLCAweDA0MDAwZGE1LAorCTB4NDIwMDEwMDAsIDB4MDAxMGI3ZjYsIDB4NDUyYzEwMDAsIDB4NGEwMjU4MDEsCisJMHgwMDAwMDAwMSwgMHg0YTAyNTgwMiwgMHgwMDAwMDEwMCwgMHg0YTAyNTgwOSwKKwkweDAwMTA3MTQ5LCAweDQ5N2E1ODBhLCAweDQ5N2E1ODBiLCAweDQ5N2E1ODBjLAorCTB4MDQwMWZmOTMsIDB4MDQwMDBkOTcsIDB4NDIwMDEwMDAsIDB4MDAxMGI3ZjcsCisJMHg0NTJjMTAwMCwgMHg0YTAyNTgwMSwgMHgwMDAwMDAwMCwgMHg0YTAyNTgwMiwKKwkweDAwMDAwMTAwLCAweDRhMDI1ODA5LCAweDAwMTAxMWJjLCAweDQ5N2E1ODAzLAorCTB4NDk3YTU4MDcsIDB4NDk3YTU4MDgsIDB4NDk3YTU4MGEsIDB4NTlhODAwMDUsCisJMHg4YzAwMDUwZSwgMHgwNDAwMDAwNiwgMHg0YTAzYjgwNSwgMHhlMDAwMDAwMSwKKwkweDU5ZGMwMDA2LCAweDhjMDAwNTIyLCAweDA0MDAwN2ZjLCAweDFjMDFmMDAwLAorCTB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4NGMzODAwMDAsCisJMHg0MDA4NzAwMCwgMHg0ODBiYzg1NywgMHg0YTAwNzAwMiwgMHgwMDAwMDAwMCwKKwkweDQyMDA3MDAwLCAweDAwMTBiN2Y4LCAweDgyMDgwNDAwLCAweDAwMDAwMDAwLAorCTB4NDU3ODAwMDAsIDB4NTgzODAwMDUsIDB4NDgwODcwMDUsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwNSwgMHg4MjAwMDQwMCwgMHgwMDAwMDAwMCwgMHg0NDA4MDAwMCwKKwkweDA0MDFmMDAzLCAweDQ4MGJjODU3LCAweDQ4MDg3MDA2LCAweDU4MzgwMDAxLAorCTB4ODAwMDA1NDAsIDB4MDQwMDA4MGMsIDB4NWMwMDcwMDAsIDB4NWMwM2UwMDAsCisJMHgxYzAxZjAwMCwgMHg0YzM4MDAwMCwgMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwKKwkweDU4MzgwMDAxLCAweDgwMDAwNTQwLCAweDA0MDAwODAzLCAweDVjMDA3MDAwLAorCTB4MWMwMWYwMDAsIDB4NDIwMDcwMDAsIDB4MDAxMGI3ZjgsIDB4NTgzODAwMDEsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAxMiwgMHg1ODM4MDAwMCwKKwkweDBjMDFmMDAxLCAweDAwMTAwODhlLCAweDAwMTAwODhkLCAweDAwMTAwODhkLAorCTB4MDAxMDA4OGQsIDB4MDAxMDA4OGQsIDB4MDAxMDA4OGQsIDB4MDAxMDA4OGQsCisJMHgwMDEwMDg4ZCwgMHgwNDAxZmQ0YiwgMHg1ODM4MDgwOCwgMHg4MDA0MDljMCwKKwkweDA0MDIwMDI0LCAweDU4MzgwMDA2LCAweDgwMDAwNTQwLCAweDA0MDIwMDAyLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NDgwMDcwMDIsIDB4NDAwMDY4MDAsCisJMHg1ODM0MDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwgMHg0ODAwNzAwNSwKKwkweDQ4MDA3MDA2LCAweDRhMDNiODA1LCAweDIwMDAwMDAwLCAweDU5ZGMwMDA2LAorCTB4NGEwM2I4MDUsIDB4MzAwMDAwMDAsIDB4NTgzNDAwMDcsIDB4NDgwM2I4MDAsCisJMHg1ODM0MDAwOCwgMHg0ODAzYjgwMSwgMHg1ODM0MDAwNCwgMHg0ODAwNzAwMywKKwkweDU4MzQwMDAzLCAweDQ4MDA3MDA0LCAweDQ4MDNiODAzLCAweDU4MzQwMDAxLAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwMDQsIDB4NGEwMDcwMDEsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAyOCwgMHg0YTAwNzAwMSwgMHgwMDAwMDAwMiwgMHgwNDAxZjAzZCwKKwkweDAyMDFmODAwLCAweDAwMTA5M2VhLCAweDAyMDFmODAwLCAweDAwMTBhNjlkLAorCTB4MDQwMDAwMTcsIDB4NGEwM2I4MDUsIDB4MjAwMDAwMDAsIDB4NTlkYzAwMDYsCisJMHg0YTAzYjgwNSwgMHgzMDAwMDAwMCwgMHg0ODA3YjgwMCwgMHg0ODBiYjgwMSwKKwkweDRhMDA3MDAzLCAweDAwMDAwMDEwLCAweDQ4MGM3MDA5LCAweDQyMDAxMDAwLAorCTB4MDAxMDA4NzUsIDB4MDIwMWY4MDAsIDB4MDAxMDVmOWEsIDB4NTgzODAwMDgsCisJMHg4MjAwMDQwMCwgMHgwMDAwMDAwNCwgMHg0ODAwNzAwNCwgMHg0ODAzYjgwMywKKwkweDRhMDA3MDAxLCAweDAwMDAwMDA3LCAweDA0MDFmMDIyLCAweDAyMDFmODAwLAorCTB4MDAxMDk0MDIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsCisJMHgwMDEwMDg3NSwgMHgwMjAxZjgwMCwgMHgwMDEwNWY3NiwgMHgwNDAxZjdiYSwKKwkweDRjMDQwMDAwLCAweDRjMDgwMDAwLCAweDU4MzgwODAzLCAweDQyMDAxMDAwLAorCTB4MDAwMDNmZmYsIDB4ODIwNDA0ODAsIDB4MDAwMDNmZmYsIDB4MDQwMjEwMDMsCisJMHg0MDA0MTAwMCwgMHg4MDAwMDU4MCwgMHg0ODAwNzAwMywgMHg4MDA4MDBjNCwKKwkweDQ4MDNiODAyLCAweDRhMDNiODA1LCAweDMwMDAwMDAyLCAweDU5ZGMwMDA2LAorCTB4NGEwM2I4MDUsIDB4NzAwMDAwMDEsIDB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsCisJMHgxMDAwMDAwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKKwkweDQ4M2JjODU3LCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLCAweDU4MzgwODAzLAorCTB4NDIwMDEwMDAsIDB4MDAwMDNmZmYsIDB4ODIwNDA0ODAsIDB4MDAwMDNmZmYsCisJMHgwNDAyMTAwMywgMHg0MDA0MTAwMCwgMHg4MDAwMDU4MCwgMHg0ODAwNzAwMywKKwkweDgwMDgwMGM0LCAweDQ4MDNiODAyLCAweDRhMDNiODA1LCAweDEwMDAwMDAyLAorCTB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsCisJMHg0YzM4MDAwMCwgMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwgMHg1OWRjMDgwNiwKKwkweDQ4MDdjODU3LCAweDRhMDNiODA1LCAweDIwMDAwMDAwLCAweDhjMDQwZDNlLAorCTB4MDQwMDAwMDcsIDB4OGMwNDBkMDgsIDB4MDQwMjBjY2EsIDB4NTgzODAwMDEsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwNywgMHgwYzAxZjgwNCwgMHg1YzAwNzAwMCwKKwkweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDAwMTAwODdkLCAweDAwMTAwOTFlLAorCTB4MDAxMDA5MmUsIDB4MDAxMDA1ZDgsIDB4MDAxMDA1ZDgsIDB4MDAxMDA1ZDgsCisJMHgwMDEwMDVkOCwgMHgwMDEwMTFlYSwgMHg0ODA3Yzg1NiwgMHg4MjA0MGQwMCwKKwkweDQzMDAwZjgwLCAweDA0MDIwMDA5LCAweDU4MzgwMDAzLCAweDgwMDAwNTQwLAorCTB4MDQwMDAwMWMsIDB4NTlkYzAwMDAsIDB4NDgwM2I4MDAsIDB4NTlkYzAwMDEsCisJMHg0ODAzYjgwMSwgMHgwNDAxZjdhZiwgMHg1ODM4MDgwMiwgMHg0YTAwMDgwMiwKKwkweDAwMDAwMjAwLCAweDA0MDFmMDFlLCAweDQ4MDdjODU2LCAweDgyMDQwZDAwLAorCTB4NDMwMDBmODAsIDB4MDQwMjAwMDksIDB4NTgzODAwMDMsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwYywgMHg1OWRjMDAwMCwgMHg0ODAzYjgwMCwgMHg1OWRjMDAwMSwKKwkweDQ4MDNiODAxLCAweDA0MDFmN2I3LCAweDU4MzgwMDAyLCAweDgyMDAwNDAwLAorCTB4MDAwMDAwMDIsIDB4NDYwMDAwMDAsIDB4MDAwMDAyMDAsIDB4MDQwMWYwMGMsCisJMHg0YzM0MDAwMCwgMHg1ODM4NjgwMiwgMHg1OWRjMDAwMCwgMHg0ODAzYzg1NywKKwkweDQ4MDA2ODA3LCAweDU5ZGMwMDAxLCAweDQ4MDNjODU3LCAweDQ4MDA2ODA4LAorCTB4NGEwMDY4MDIsIDB4MDAwMDAxMDAsIDB4NWMwMDY4MDAsIDB4NGEwMDcwMDEsCisJMHgwMDAwMDAwMCwgMHg0YzMwMDAwMCwgMHg1ODM4NjAwMiwgMHgwNDAxZjgwYywKKwkweDA0MDAwMDA5LCAweDU4MzAwMDA5LCAweDgyMDAwYzgwLCAweDAwMTBhYjRhLAorCTB4MDQwMjFjODQsIDB4ODIwMDBjODAsIDB4MDAwMjAwMDAsIDB4MDQwMDFjODEsCisJMHgwODAxZjgwMCwgMHg1YzAwNjAwMCwgMHgwNDAxZjcyMywgMHg0ODMzYzg1NywKKwkweDgwMzA2MWMwLCAweDA0MDAwMDA5LCAweDU5YTgwMDBjLCAweDgwMzAwNDgwLAorCTB4MDQwMDEwMDcsIDB4NTlhODAwMGQsIDB4ODAzMDA0ODAsIDB4MDQwMjEwMDQsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkYzAwMDAwLCAweDQyMDA3MDAwLAorCTB4MDAxMGI4MDMsIDB4NGEwMDc0MDAsIDB4MDAwMDAwMDAsIDB4NDk3ODcwMDEsCisJMHg0MjAzODAwMCwgMHgwMDAwNzcyMCwgMHg0YTAzODAwNiwgMHg2MDAwMDAwMSwKKwkweDRhMDM4MDA5LCAweGY0ZjYwMDAwLCAweDQyMDM4MDAwLCAweDAwMDA3NzAwLAorCTB4NGEwMzgwMDYsIDB4NjAwMDAwMDEsIDB4NGEwMzgwMDksIDB4ZjRmNjAwMDAsCisJMHg0YTAzYzgyMiwgMHgwMDAwMDAxMCwgMHg0YTAzNzBlOCwgMHgwMDAwMDAwMCwKKwkweDA0MDFmODA5LCAweDRhMDM3MGU5LCAweDAwMDAzYTBmLCAweDRhMDM3MGU4LAorCTB4MDAwMDAwMDAsIDB4NGEwMzcwZTgsIDB4MDAwMDAwMDEsIDB4NWMwMzgwMDAsCisJMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg0MTc4YjgwMCwgMHgwNDAxZjgwYSwKKwkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNWMwMDAwLAorCTB4ODI1Y2JkNDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY4MDMsIDB4NWMwMGI4MDAsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZGMwMDAwMCwgMHg0YzUwMDAwMCwKKwkweDRjNTgwMDAwLCAweDRjNTQwMDAwLCAweDRhMDM3MGU4LCAweDAwMDAwMDAwLAorCTB4ODA1Y2I5YzAsIDB4MDQwMDAwMDksIDB4NGEwMzg4MDcsIDB4MDAwMDAwMDQsCisJMHg1OWI4MDBlYSwgMHg4YzAwMDUxMCwgMHgwNDAwMDAwNCwgMHg1OWI4MDBlMCwKKwkweDA0MDFmODdiLCAweDA0MDFmN2ZiLCAweDQyMDM4MDAwLCAweDAwMDA3NzIwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDBlYzEsIDB4NTljMDAwMDcsIDB4NGEwMzgwMDYsCisJMHgyMDAwMDAwMCwgMHg1OWMwMDAwNywgMHg0YTAzODAwNiwgMHg4MDAwMDAwYSwKKwkweDU5YzAwMDA3LCAweDRhMDM4MDA2LCAweDgwMDAwMDBiLCAweDU5YzAwMDA3LAorCTB4NGEwMzgwMDYsIDB4NDAwMDAwMDEsIDB4ODNjMDA1ODAsIDB4MDAwMDc3MDAsCisJMHgwNDAwMDAwNCwgMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwgMHgwNDAxZjdlZCwKKwkweDQyMDM4MDAwLCAweDAwMDA3NzIwLCAweDQyMDAwODAwLCAweDAwMDAwODAwLAorCTB4NTljMDAwMDcsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMDYsIDB4NGEwMzgwMDYsCisJMHg5MDAwMDAwMSwgMHg4MDA0MDg0MCwgMHgwNDAyMDdmYSwgMHgwNDAxZmMxMSwKKwkweDgzYzAwNTgwLCAweDAwMDA3NzAwLCAweDA0MDAwMDA0LCAweDQyMDM4MDAwLAorCTB4MDAwMDc3MDAsIDB4MDQwMWY3ZjEsIDB4ODA1Y2I5YzAsIDB4MDQwMjAwMWQsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg4M2I4YWMwMCwgMHgwMDAwMDAyMCwKKwkweDAyMDFmODAwLCAweDAwMTBhYjIwLCAweDRhMDM3MGZiLCAweDAwMDAwMDAxLAorCTB4NGEwMzcwMjAsIDB4MDAxMDEwYmQsIDB4NTlhODAwMzksIDB4ODIwMDA1MDAsCisJMHgwMDAwZmZmZiwgMHg0ODAzNzAyMSwgMHg0YTAzNzAzNSwgMHgwMDEwYmRkYiwKKwkweDRhMDM3MDMwLCAweDAwMTBiNDEwLCAweDRhMDM3MDMxLCAweDAwMTBhYzAwLAorCTB4NGEwMzcwMzIsIDB4MDAxMGI1MTksIDB4NGEwMzcwMzYsIDB4MDAxMGI1MjQsCisJMHg1OTg0MDAwMiwgMHg0ODAzNzAzNCwgMHg0YTAzNzAzOCwgMHgwMDEwMTBiNCwKKwkweDRhMDM3MGZiLCAweDAwMDAwMDAxLCAweDQxNzhhMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMjAsIDB4ODNiOGFjMDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIyMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDA0MCwgMHg4M2I4YWMwMCwKKwkweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTBhYjIwLCAweDgwNWNiOWMwLAorCTB4MDQwMjAwMDQsIDB4NGEwMzcwZTQsIDB4YWFhYWFhYWEsIDB4MDQwMWYwMDMsCisJMHg0YTAzNzBlNCwgMHhhMmFhYWE4MiwgMHg0YTAzNzBlNSwgMHhhYWFhYWFhYSwKKwkweDRhMDM3MGU2LCAweGFhYWFhYWFhLCAweDRhMDM3MGZiLCAweDAwMDAwMDAwLAorCTB4NGEwMzcwZTYsIDB4YWFhYWFhYWEsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MjAsCisJMHg0YTAzODAwNiwgMHg5MDAwMDAwMCwgMHg1OWMwMDAwNywgMHg4YzAwMDUxZSwKKwkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDQyMDM4MDAwLCAweDAwMDA3NzAwLAorCTB4NGEwMzgwMDYsIDB4OTAwMDAwMDAsIDB4NTljMDAwMDcsIDB4OGMwMDA1MWUsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1YzAwYTgwMCwgMHg1YzAwYjAwMCwKKwkweDVjMDBhMDAwLCAweDVjMDM4MDAwLCAweDFjMDFmMDAwLCAweDRkMzAwMDAwLAorCTB4NGQzODAwMDAsIDB4NDAwMjYwMDAsIDB4ODIwMDA1MDAsIDB4N2YwMDAwMDAsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAwZiwgMHg4MzMyNjUwMCwKKwkweDAwZmZmZmZmLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LAorCTB4MDQwMjAwMDksIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDksCisJMHgwNDAyMDAwNSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0NywgMHgwMjAxZjgwMCwKKwkweDAwMDIwN2ExLCAweDVjMDI3MDAwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAorCTB4NGQzMDAwMDAsIDB4NGQyYzAwMDAsIDB4NGQzNDAwMDAsIDB4NGQ0MDAwMDAsCisJMHg0Y2ZjMDAwMCwgMHg0ZDM4MDAwMCwgMHg0ZDNjMDAwMCwgMHg0ZDQ0MDAwMCwKKwkweDRkNGMwMDAwLCAweDRkNDgwMDAwLCAweDRjNWMwMDAwLCAweDRjNjAwMDAwLAorCTB4NGM2NDAwMDAsIDB4NGNjODAwMDAsIDB4NGNjYzAwMDAsIDB4NGNmMDAwMDAsCisJMHg0Y2Y0MDAwMCwgMHg0Y2Y4MDAwMCwgMHg0Y2ZjMDAwMCwgMHg0ZDAwMDAwMCwKKwkweDRkMDQwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMDE1LCAweDVjMDIwODAwLAorCTB4NWMwMjAwMDAsIDB4NWMwMWY4MDAsIDB4NWMwMWYwMDAsIDB4NWMwMWU4MDAsCisJMHg1YzAxZTAwMCwgMHg1YzAxOTgwMCwgMHg1YzAxOTAwMCwgMHg1YzAwYzgwMCwKKwkweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDVjMDI5MDAwLCAweDVjMDI5ODAwLAorCTB4NWMwMjg4MDAsIDB4NWMwMjc4MDAsIDB4NWMwMjcwMDAsIDB4NWMwMWY4MDAsCisJMHg1YzAyODAwMCwgMHg1YzAyNjgwMCwgMHg1YzAyNTgwMCwgMHg1YzAyNjAwMCwKKwkweDFjMDFmMDAwLCAweDQ5M2JjODU3LCAweDAyMDFmMDAwLCAweDAwMDIwMDQ0LAorCTB4ODMzMDA1MDAsIDB4MWYwMDAwMDAsIDB4MDQwMDAwMDgsIDB4ODEzMjY1ODAsCisJMHg4MDAwMDEzMCwgMHg4MjAwMGM4MCwgMHgwMDAwMDAxNCwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNWQ4LCAweDBjMDFmMDEzLCAweDgzMzAwNTAwLCAweDAwMDAwMGZmLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMDcsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCisJMHgwYzAxZjAyNSwgMHgxYzAxZjAwMCwgMHg4MjAwMGQwMCwgMHhjMDAwMDAzOCwKKwkweDAyMDIwODAwLCAweDAwMTAwNWQwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwNDgsIDB4MDAwMDAwNTQsIDB4MDAwMDAwNTMsCisJMHgwMDEwMGE5YiwgMHgwMDEwMGFiZiwgMHgwMDEwMGFiYSwgMHgwMDEwMGFkZiwKKwkweDAwMTAwYWE2LCAweDAwMTAwYWIyLCAweDAwMTAwYTliLCAweDAwMTAwYWRhLAorCTB4MDAxMDBiMWEsIDB4MDAxMDBhOWIsIDB4MDAxMDBhOWIsIDB4MDAxMDBhOWIsCisJMHgwMDEwMGE5YiwgMHgwMDEwMGIxZCwgMHgwMDEwMGIyMywgMHgwMDEwMGIzNCwKKwkweDAwMTAwYjQ1LCAweDAwMTAwYTliLCAweDAwMTAwYjRlLCAweDAwMTAwYjVhLAorCTB4MDAxMDBhOWIsIDB4MDAxMDBhOWIsIDB4MDAxMDBhOWIsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDVkOCwgMHgwMDEwMGFhNCwgMHgwMDEwMGJmZiwgMHgwMDEwMGFlYywKKwkweDAwMTAwYjBmLCAweDAwMTAwYWE0LCAweDAwMTAwYWE0LCAweDAwMTAwYWE0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwM2M4NTYsIDB4NTkzMDAwMDQsCisJMHg4YzAwMDUzZSwgMHgwNDAyMDAwNSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA1NSwKKwkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAorCTB4MDQwMDA3ZmEsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4MDQwMWY4YTksCisJMHg0MDAwMjgwMCwgMHg0MTc4MjAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA1NiwKKwkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDQ4MDNjODU2LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNTcsIDB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4NDgwM2M4NTYsCisJMHg1OTMwMDAwNywgMHg4YzAwMDUxYSwgMHgwNDAyMDAxMCwgMHg1OTMyNTgwOCwKKwkweDgxMmU1OWMwLCAweDA0MDAwMDE0LCAweDU5MmMwNDA4LCAweDhjMDAwNTFjLAorCTB4MDQwMjAwMDMsIDB4NGEwMjYwMTEsIDB4ZmZmZmZmZmYsIDB4NTkzMDAwMDQsCisJMHg4YzAwMDUzZSwgMHgwNDAyMDAwOSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0OCwKKwkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDU5MzI1ODA4LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDcsIDB4MDQwMWY3ZjQsIDB4MDIwMWY4MDAsIDB4MDAxMDZmNjAsCisJMHgwNDAwMDdmNiwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg4MzMwMDUwMCwKKwkweDAwZmZmZmZmLCAweDAyMDFmMDAwLCAweDAwMTA2NGQ3LCAweDFjMDFmMDAwLAorCTB4NGMwNDAwMDAsIDB4NTliODA4ZWEsIDB4ODIwNDBkMDAsIDB4MDAwMDAwMDcsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNCwgMHg0MjAwMDAwMCwKKwkweDYwMDAwMDAwLCAweDA0MDFmOGFiLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLAorCTB4MDQwMWY4ZjksIDB4NTkzMjU4MDgsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMTgsCisJMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDI5LCAweDA0MDIwMDEyLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMDAwMGIsIDB4NTkzMDA4MDcsIDB4ODQwNDBkMjYsCisJMHg0ODA2NjAwNywgMHgwMjAxZjgwMCwgMHgwMDAyMDA4NiwgMHg0YTAzOTAwZCwKKwkweDAwMDAwMDQwLCAweDRhMDM3MGU1LCAweDAwMDAwMDA4LCAweDFjMDFmMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZmNjAsIDB4MDQwMDA3ZjQsIDB4NTk4ODAwNTIsCisJMHg4MDAwMDAwMCwgMHg0ODAzMTA1MiwgMHg0YTAzOTAwZCwgMHgwMDAwMDA0MCwKKwkweDQyMDAwMDAwLCAweGMwMDAwMDAwLCAweDA0MDFmMDVhLCAweDQyMDA3ODAwLAorCTB4MDAxMGJkZTIsIDB4NDIwMDIwMDAsIDB4MDAwMDMwMDAsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDEwNSwgMHgwMjAxZjgwMCwgMHgwMDEwNWUwNCwgMHg0YTAzNzBlNCwKKwkweDAyMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NDEzMDA4MDAsIDB4ODAwNDA5YzAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkMCwgMHg0OTMzYzg1NywKKwkweDgxMzI2MWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDA0MDFmODM1LAorCTB4NDAwMDI4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE5OWMsIDB4MDQwMWY4YWUsCisJMHgwNDAwMDAwNywgMHg1OTMyNjgwOSwgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwKKwkweDU5MzAwNDE0LCAweDAyMDIwODAwLCAweDAwMTA5MmNlLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4ODEzMjYxYzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHgwNDAxZjhhMSwgMHgwNDAwMDAwYiwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MDM3LCAweDA0MDAwMDA3LCAweDU5MmMwMjA4LCAweDg0MDAwNTRlLAorCTB4NDgwMjVhMDgsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDhiZTMsCisJMHgxYzAxZjAwMCwgMHg0ODVmYzg1NywgMHg1YzAwMDAwMCwgMHg0ZDc4MDAwMCwKKwkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDQyMDBiODAwLCAweDAwMDA4MDA1LAorCTB4MDIwMWYwMDAsIDB4MDAxMDA1ZGQsIDB4NDkzM2M4NTcsIDB4ODMzMDA0ODAsCisJMHgwMDAwMDAyMCwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzMwMGMwMCwKKwkweDAwMTBiOGNjLCAweDUwMDQwMDAwLCAweDgwMDAwMDAwLCAweDA0MDAxMDAyLAorCTB4NDQwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4MDQwMWY3ZjQsCisJMHg0ODA3Yzg1NiwgMHg1OWI4MDBlYSwgMHg4YzAwMDUxMCwgMHgwNDAwMDdmZCwKKwkweDU5YjgwMGUwLCAweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NDIwMDAwMDAsIDB4MTAwMDAwMDAsIDB4NDEzMDA4MDAsIDB4MDQwMWYwMmQsCisJMHg4MjAwMDUwMCwgMHhmMDAwMDAwMCwgMHg4MjA0MGQwMCwgMHgwZmZmZmZmZiwKKwkweDgwMDQwZDQwLCAweDQ4MDdjODU3LCAweDU5YjgwMGVhLCAweDhjMDAwNTE2LAorCTB4MDQwMjAwMDMsIDB4NDgwNzcwZTEsIDB4MWMwMWYwMDAsIDB4OGMwMDA1MTAsCisJMHgwNDAwMDdmYSwgMHg0YzA0MDAwMCwgMHgwNDAxZjgwOSwgMHg1YzAwMDgwMCwKKwkweDgyMTAwNDgwLCAweDAwMDAwMDA4LCAweDA0MDAxN2Y0LCAweDRjMDQwMDAwLAorCTB4MDQwMWZlYmMsIDB4NWMwMDA4MDAsIDB4MDQwMWY3ZjAsIDB4NTliODAwZTIsCisJMHg1OWI4MjBlMiwgMHg4MDEwMDU4MCwgMHgwNDAyMDdmZCwgMHg4MDEwMjExNCwKKwkweDA0MDFmMDA2LCAweDU5YjgwMGUyLCAweDU5YjgyMGUyLCAweDgwMTAwNTgwLAorCTB4MDQwMjA3ZmQsIDB4MDQwMWYwMDEsIDB4NDAxMDE4MDAsIDB4ODAwYzE5MGEsCisJMHg4MjEwMDUwMCwgMHgwMDAwMDAxZiwgMHg4MjBjMWQwMCwgMHgwMDAwMDAxZiwKKwkweDgwMGMyNDgwLCAweDgyMTAyNTAwLCAweDAwMDAwMDFmLCAweDFjMDFmMDAwLAorCTB4ODIwMDA1MDAsIDB4ZjAwMDAwMDAsIDB4ODIwNDBkMDAsIDB4MGZmZmZmZmYsCisJMHg4MDA0MGQ0MCwgMHg0ODA3Yzg1NywgMHg0MjAwMTAwMCwgMHgwMDEwYjgwNCwKKwkweDUwMDgwMDAwLCAweDgwMDAwNTQwLCAweDA0MDIwMDA1LCAweDRhMDM3MGU1LAorCTB4MDAwMDAwMDMsIDB4NGEwMzcwZTQsIDB4MDAwMDAzMDAsIDB4ODAwMDAwMDAsCisJMHg0NDAwMTAwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMDQwMCwgMHg1OWI4MDBlYSwKKwkweDhjMDAwNTEwLCAweDA0MDAwMDBjLCAweDA0MDFmZmQ1LCAweDgyMTAwNDgwLAorCTB4MDAwMDAwMDgsIDB4MDQwMDEwMDcsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsCisJMHgwNDAxZmU4OCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgwNDAxZjAyMCwKKwkweDU5YjgwMGVhLCAweDhjMDAwNTE2LCAweDA0MDIwMDFkLCAweDRhMDM3MGU0LAorCTB4MDAzMDAwMDAsIDB4NDgwNzcwZTEsIDB4NDIwMDEwMDAsIDB4MDAwMGZmMDAsCisJMHg4MDA4MTA0MCwgMHgwNDAwMDAxMiwgMHg1OWI4MDhlNCwgMHg4YzA0MGQyOCwKKwkweDA0MDIwN2ZjLCAweDQyMDAxMDAwLCAweDAwMTBiODA0LCAweDUwMDgwMDAwLAorCTB4ODAwMDAwNDAsIDB4MDQwMjAwMDUsIDB4NGEwMzcwZTUsIDB4MDAwMDAwMDIsCisJMHg0YTAzNzBlNCwgMHgwMDAwMDIwMCwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwKKwkweDQ0MDAxMDAwLCAweDhjMDQwZDJjLCAweDFjMDFmMDAwLCAweDQxZjgwMDAwLAorCTB4NTAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4ODAwODEwNDAsCisJMHgwNDAyMDdkMywgMHg0MWY4MDAwMCwgMHg1MDAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDRkMzgwMDAwLCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDksIDB4MDQwMjAwMDYsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDcsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg4MDAwMDU4MCwgMHg1YzAyNzAwMCwKKwkweDFjMDFmMDAwLCAweDRjNTAwMDAwLCAweDRhMDM5MDBkLCAweDAwMDAwMDAxLAorCTB4NTljOGEwMjAsIDB4NGEwMzkwMGQsIDB4MDAwMDAwMDIsIDB4NTljODA4MjAsCisJMHg4YzUwYTUyZSwgMHgwNDAwMDAwMiwgMHg5MDA0MDljMCwgMHg4MjA0MGQwMCwKKwkweDAwMDBmZmZmLCAweDAyMDFmODAwLCAweDAwMTA1ZGQ3LCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NDkzM2M4NTcsIDB4ODI1MGE1MDAsIDB4ZmYwMDAwMDAsCisJMHg4MjUwMDU4MCwgMHgwNTAwMDAwMCwgMHgwNDAwMDAwMywgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDVjMDBhMDAwLCAweDFjMDFmMDAwLCAweDA0MDFmZmU2LAorCTB4NDkzM2M4NTcsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsCisJMHgwNDAwMDA0MCwgMHg1OWM4MjAyMSwgMHg0YTAzOTAwZCwgMHgwMDAwMDAwMSwKKwkweDU5YzgyODIxLCAweDgyMTQyZDAwLCAweDAwMDBmZmZmLCAweDU5MzI1ODA4LAorCTB4ODEyZTU5YzAsIDB4MDQwMDAwMzcsIDB4NTkzMjY4MDksIDB4MDIwMWY4MDAsCisJMHgwMDEwNDhkOSwgMHgwMjAyMDgwMCwgMHgwMDEwOTJiNiwgMHg1OTljMDAxOSwKKwkweDhjMDAwNTBjLCAweDA0MDIwMDE4LCAweDAyMDFmODAwLCAweDAwMTA0OGQ5LAorCTB4MDQwMjAwMTUsIDB4NTkzMDA4MTEsIDB4NDgwN2M4NTcsIDB4NTkyYzA0MDgsCisJMHg4YzAwMDUxYywgMHgwNDAyMDAwZSwgMHg4NDAwMDU1YywgMHg0ODAyNWMwOCwKKwkweDU5MmMwYTA0LCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwNDgsIDB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMTgsCisJMHgwNDAyMDAwMywgMHg1OTMwMDgxMSwgMHg0ODA2NTgwMywgMHg0YTAyNjAxMSwKKwkweDdmZmZmZmZmLCAweDQ4MTY2MDEzLCAweDAyMDFmODAwLCAweDAwMTAxMGRkLAorCTB4MDQwMjAwMTQsIDB4MDQwMWY5ZmQsIDB4NDAyODAwMDAsIDB4NDgwMjYwMGQsCisJMHgwNDAwMDAwNSwgMHg0ODMyNjAwYiwgMHg1MDIwMDAwMCwgMHg0ODAyNjAwYSwKKwkweDQ4MjI2MDBjLCAweDU5MzAwNDE0LCAweDhjMDAwNTFjLCAweDA0MDIwMDA0LAorCTB4NTk5YzAwMTksIDB4OGMwMDA1MGMsIDB4MDQwMjA4NmUsIDB4NGEwMzkwMGQsCisJMHgwMDAwMDA0MCwgMHg0YTAzNzBlNSwgMHgwMDAwMDAwOCwgMHgxYzAxZjAwMCwKKwkweDU5ODgwMDUyLCAweDgwMDAwMDAwLCAweDQ4MDMxMDUyLCAweDRhMDM5MDBkLAorCTB4MDAwMDAwNDAsIDB4NDIwMDAwMDAsIDB4YzAwMDAwMDAsIDB4MDQwMWY3MWQsCisJMHg0Y2Y4MDAwMCwgMHg1OGY0MDAwMCwgMHg4MDAxZjU0MCwgMHgwNDAxZjgyMCwKKwkweDQxNzgxODAwLCAweDA0MDFmOGU0LCAweDA0MDIwMDE0LCAweDQ0MTQwODAwLAorCTB4MDQwMWY4MmEsIDB4MDQwMDAwMTEsIDB4NDAwNDM4MDAsIDB4NDIwMDE4MDAsCisJMHgwMDAwMDAwMSwgMHg0MDE0MjAwMCwgMHgwNDAxZjhkYiwgMHgwNDAyMDAwYiwKKwkweDgwMWMzODAwLCAweDUwMWMwMDAwLCAweDQ0MDAwODAwLCAweDA0MDFmODEwLAorCTB4ODAxYzA1ODAsIDB4MDQwMDAwMDQsIDB4NDQxMDM4MDAsIDB4ODAxYzM4NDAsCisJMHg0NDE0MzgwMCwgMHgwNDAxZjgxOSwgMHg1YzAxZjAwMCwgMHgxYzAxZjAwMCwKKwkweDgwZjlmMWMwLCAweDA0MDIwMDAzLCAweDU4ZjQxMjAyLCAweDA0MDFmMDAzLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDcsIDB4MWMwMWYwMDAsIDB4ODBmOWYxYzAsCisJMHgwNDAyMDAwNiwgMHg1OGY0MDQwMSwgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwMiwKKwkweDgwZjQwNDAwLCAweDA0MDFmMDA1LCAweDU4ZjgwNDAxLCAweDgyMDAwNDgwLAorCTB4MDAwMDAwMDIsIDB4ODBmODA0MDAsIDB4NTAwMDI4MDAsIDB4ODAwMDAwMDAsCisJMHg1MDAwMjAwMCwgMHgxYzAxZjAwMCwgMHg4MGY5ZjFjMCwgMHgwNDAyMDAwOCwKKwkweDU4ZjQwNDAxLCAweDgyMDAwNDgwLCAweDAwMDAwMDAyLCAweDAyMDAxODAwLAorCTB4MDAxMDA1ZDgsIDB4NDgwMWVjMDEsIDB4MDQwMWYwMGIsIDB4NThmODA0MDEsCisJMHg4MjAwMDQ4MCwgMHgwMDAwMDAwMiwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwKKwkweDQ4MDFmNDAxLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDAyLAorCTB4MDQwMWY4MDksIDB4NThmNDAyMDIsIDB4ODAwMDAwNDAsIDB4NDgwMWVhMDIsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDRkMmMwMDAwLCAweDQwZmE1ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZjQsIDB4NDk3OWU4MDAsIDB4NDE3OWYwMDAsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg4MGY1ZTljMCwgMHgwNDAwMDAwOSwgMHg4MGY5ZjFjMCwKKwkweDA0MDIwZmY1LCAweDRkMmMwMDAwLCAweDQwZjY1ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZjQsIDB4NDE3OWU4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHg0Y2Y0MDAwMCwgMHg1OTMwMDgwNywgMHg4MjA0MDUwMCwgMHgwMDAwMzEwMCwKKwkweDA0MDIwMDMyLCAweDhjMDQwZDIyLCAweDA0MDAwMDMyLCAweDU5MzAwMDFmLAorCTB4ODAwMWVkNDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwMDA1ODAsCisJMHhmZmZmZmZmZiwgMHgwNDAwMDAyOSwgMHg1OGY0MDIwMSwgMHg4MjAwMDU4MCwKKwkweDAwMDBkY2IzLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU4ZjQwYTAyLAorCTB4ODIwNDA1MDAsIDB4MDAwMGZmZmUsIDB4MDQwMDAwMDMsIDB4MDQwMWZmODksCisJMHg1OGY0MGEwMiwgMHg4MjA0MDQ4MCwgMHgwMDAwMDAwZiwgMHgwNDAyMTA1OSwKKwkweDgwMDQwODAwLCAweDQ4MDVlYTAyLCAweDgyMDQwNTgwLCAweDAwMDAwMDA4LAorCTB4MDQwMDAwNWQsIDB4ODIwNDA0ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDEwMGEsCisJMHg1OGY0MDAwMCwgMHg4MDAxZWQ0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU4ZjQwMjAxLCAweDgyMDAwNTgwLCAweDAwMDBkZGI5LCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4NThmNDA0MDEsIDB4ODIwMDBjMDAsIDB4MDAwMDAwMDIsCisJMHg0ODA1ZWMwMSwgMHg4MGY0MDQwMCwgMHg1OTMwMDgxMiwgMHg0NDA0MDAwMCwKKwkweDgwMDAwMDAwLCAweDQ1NzgwMDAwLCAweDVjMDFlODAwLCAweDFjMDFmMDAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDA0MDAsIDB4NTliODAwZTQsIDB4OGMwMDA1MjQsCisJMHgwNDAyMDAyMywgMHg0YTAzNzBlNCwgMHgwMDAzMDAwMCwgMHg0MDAwMDAwMCwKKwkweDU5YjgwMGU0LCAweDhjMDAwNTI0LCAweDA0MDIwMDFiLCAweDU5MzAwODA3LAorCTB4ODQwNDBkNjIsIDB4NDgwNjYwMDcsIDB4NGEwMzcwZTQsIDB4MDAwMjAwMDAsCisJMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHgwNDAwMDAyNSwKKwkweDQ5MmU2MDFmLCAweDRhMDI1YTAxLCAweDAwMDBkY2IzLCAweDU5MzAwMDA4LAorCTB4ODAwMDFkNDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTgwYzA4MGYsCisJMHg0ODA2NTgwMywgMHg1OTMwMTgxMSwgMHg0MDA0MDAwMCwgMHg4MDBjMDU4MCwKKwkweDA0MDIwMDBkLCAweDQ5N2E1YTAyLCAweDRhMDI1YzAxLCAweDAwMDAwMDA0LAorCTB4MDQwMWYwMTEsIDB4NGEwMzcwZTQsIDB4MDAwMjAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg4MDA4MTA0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDA0MDFmN2Q2LCAweDRhMDI1YTAyLCAweDAwMDAwMDAxLCAweDRhMDI1YzAxLAorCTB4MDAwMDAwMDYsIDB4NDk3YTU4MDQsIDB4NDAwYzAwMDAsIDB4ODAwNDA0ODAsCisJMHg0ODAyNTgwNSwgMHg0MTJkZTgwMCwgMHg1YzAyNTgwMCwgMHgwNDAxZjdhOSwKKwkweDVjMDI1ODAwLCAweDRhMDI2MDFmLCAweGZmZmZmZmZmLCAweDA0MDFmN2MzLAorCTB4NGQyYzAwMDAsIDB4NThmNjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZjQsCisJMHg0MGY2NTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmNCwgMHg1YzAyNTgwMCwKKwkweDA0MDFmN2Y1LCAweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLAorCTB4MDQwMDA3ZjgsIDB4NGEwMjVhMDEsIDB4MDAwMGRkYjksIDB4NGEwMjVjMDEsCisJMHgwMDAwMDAwMiwgMHg0OTJkZTgwMCwgMHg0MTJkZTgwMCwgMHg1YzAyNTgwMCwKKwkweDA0MDFmN2E1LCAweDA0MDFmZjMzLCAweDgyZjQwNDAwLCAweDAwMDAwMDA0LAorCTB4ODAwYzA0MDAsIDB4NDAwMDA4MDAsIDB4NTAwNDAwMDAsIDB4ODAxMDA1ODAsCisJMHgwNDAwMDAxNiwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwMiwgMHg4MDA4MTA0MCwKKwkweDA0MDIwN2ZhLCAweDgwZjlmMWMwLCAweDA0MDAwMDExLCAweDU4ZjQxMjAyLAorCTB4ODIwODE0ODAsIDB4MDAwMDAwMDcsIDB4ODJmODA0MDAsIDB4MDAwMDAwMDIsCisJMHg4MDBjMDQwMCwgMHg0MDAwMDgwMCwgMHg1MDA0MDAwMCwgMHg4MDEwMDU4MCwKKwkweDA0MDAwMDA2LCAweDgyMDQwYzAwLCAweDAwMDAwMDAyLCAweDgwMDgxMDQwLAorCTB4MDQwMjA3ZmEsIDB4MDQwMWYwMDIsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHg0Y2Y0MDAwMCwgMHg0Y2Y4MDAwMCwKKwkweDQwMDFlODAwLCAweDU5MmMwYTA2LCAweDgwMDQwOWMwLCAweDA0MDIwMDFkLAorCTB4ODJmNDA1ODAsIDB4ZmZmZmZmZmYsIDB4MDQwMDAwMTcsIDB4NThmNDAyMDEsCisJMHg4MjAwMDU4MCwgMHgwMDAwZGNiMywgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU4ZjQwMDAwLCAweDgwMDFmNTQwLCAweDA0MDAwMDA2LCAweDU4ZjgwMjAxLAorCTB4ODIwMDA1ODAsIDB4MDAwMGRkYjksIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCisJMHg0MTc4MzgwMCwgMHgwNDAxZjgzOSwgMHgwNDAyMDAwNiwgMHgwNDAxZmYzMiwKKwkweDQ5N2E2MDFmLCAweDVjMDFmMDAwLCAweDVjMDFlODAwLCAweDFjMDFmMDAwLAorCTB4MDQwMWZmMmQsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMTEsIDB4MDQwMWY3ZjksCisJMHg4MmY0MDU4MCwgMHhmZmZmZmZmZiwgMHgwNDAyMGYyNywgMHgwNDAxZjdmNSwKKwkweDRjZjQwMDAwLCAweDRjZjgwMDAwLCAweDQwMDFlODAwLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMjAwMWYsIDB4ODJmNDA1ODAsIDB4ZmZmZmZmZmYsCisJMHgwNDAwMDAxOSwgMHg1OGY0MDIwMSwgMHg4MjAwMDU4MCwgMHgwMDAwZGNiMywKKwkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU4ZjQwMDAwLCAweDgwMDFmNTQwLAorCTB4MDQwMDAwMDYsIDB4NThmODAyMDEsIDB4ODIwMDA1ODAsIDB4MDAwMGRkYjksCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0MTc4MzgwMCwgMHgwNDAxZjgxMywKKwkweDA0MDIwMDA4LCAweDA0MDFmZjBjLCAweDQyMDAwODAwLCAweDAwMDAwMDAxLAorCTB4NDk3YTYwMWYsIDB4NWMwMWYwMDAsIDB4NWMwMWU4MDAsIDB4MWMwMWYwMDAsCisJMHgwNDAxZmYwNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxMSwgMHgwNDAxZjdmOSwKKwkweDRjMDQwMDAwLCAweDgyZjQwNTgwLCAweGZmZmZmZmZmLCAweDA0MDIwZWZlLAorCTB4NWMwMDA4MDAsIDB4MDQwMWY3ZjMsIDB4NDgwM2M4NTYsIDB4NDAxYzIwMDAsCisJMHg0MTc4MTgwMCwgMHgwNDAxZmY4YywgMHgwNDAyMDAyYywgMHg1OGY0MjAwMywKKwkweDQyMDAxODAwLCAweDAwMDAwMDAxLCAweDA0MDFmZjg3LCAweDA0MDIwMDI3LAorCTB4MDQwMWZlYjgsIDB4NDAwODI4MDAsIDB4ODJmNDA0MDAsIDB4MDAwMDAwMDQsCisJMHg0MDAwMzAwMCwgMHg1MDE4MjAwMCwgMHg0MDEwMDAwMCwgMHg4MDFjMDU4MCwKKwkweDA0MDAwMDA1LCAweDQyMDAxODAwLCAweDAwMDAwMDAxLCAweDA0MDFmZjdhLAorCTB4MDQwMjAwMWEsIDB4ODIxODM0MDAsIDB4MDAwMDAwMDIsIDB4ODAxNDI4NDAsCisJMHgwNDAyMDdmNSwgMHg4MGY5ZjFjMCwgMHgwNDAwMDAxMywgMHg1OGY0MmEwMiwKKwkweDgyMTQyYzgwLCAweDAwMDAwMDA3LCAweDgyZjgwNDAwLCAweDAwMDAwMDAzLAorCTB4NDAwMDMwMDAsIDB4NTAxODIwMDAsIDB4NDAxMDAwMDAsIDB4ODAxYzA1ODAsCisJMHgwNDAwMDAwNSwgMHg0MjAwMTgwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZmY2NiwKKwkweDA0MDIwMDA2LCAweDgyMTgzNDAwLCAweDAwMDAwMDAyLCAweDgwMTQyODQwLAorCTB4MDQwMjA3ZjUsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjdmZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1ODM4MDIwNywKKwkweDhjMDAwNTAyLCAweDA0MDAwN2ZjLCAweDUwMjAwMDAwLCAweDgwMzg3YzAwLAorCTB4NTgzYzI4MDAsIDB4NTgzYzIwMDEsIDB4NTgzODA0MDQsIDB4ODAwMDE1NDAsCisJMHgwNDAyMDAwMiwgMHg1ODM4MTQwNywgMHg1OGM4MzQwMSwgMHg1ODM4MGMwOCwKKwkweDU5MzAzODA3LCAweDQ5N2E2MDEyLCAweDQ5N2E2MDEzLCAweDAyMDFmMDAwLAorCTB4MDAwMjAwYmUsIDB4NTkyYzA0MDgsIDB4OGMwMDA1MDIsIDB4MDQwMDA3ZWEsCisJMHg1OTJjMDQwOSwgMHg4MDAwMDU0MCwgMHgwNDAwMDdlNywgMHg4MjAwMGM4MCwKKwkweDAwMDAwMDAyLCAweDA0MDAxMDExLCAweDU4MzgwMDAxLCAweDgwMDA3NTQwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTgzODAyMDQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwgMHgwMDEwMTBiZCwgMHg1MDAwNDAwMCwKKwkweDQwMDQwMDAwLCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDgyMDQwYzgwLAorCTB4MDAwMDAwMDUsIDB4MDQwMjE3ZjEsIDB4ODAyMDQ0MDAsIDB4NTAyMDAwMDAsCisJMHg4MDM4N2MwMCwgMHg1ODNjMjgwMCwgMHg1ODNjMjAwMSwgMHg1ODNjMTAwMiwKKwkweDU5MmMwYTA3LCAweDU5MmM0YzA4LCAweDU5MmMzMDBkLCAweDU5MzAzODA3LAorCTB4NDk3YTYwMTIsIDB4NDk3YTYwMTMsIDB4NDgxNjYwMGUsIDB4NDgxMjYwMGYsCisJMHg0ODBhNjAxMCwgMHg0ODFhNjAxMSwgMHg4MDA0MDg0MCwgMHg0ODA2NjAwZCwKKwkweDAyMDAwMDAwLCAweDAwMDIwMGM2LCAweDgwMjA0MDAwLCAweDUwMjAxODAwLAorCTB4ODAwYzE5YzAsIDB4MDQwMjAwMGMsIDB4NTgzODAwMDEsIDB4ODAwMDc1NDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODM4MDIwNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwNDAwLCAweDAwMTAxMGJkLCAweDUwMDA0MDAwLAorCTB4NTAyMDE4MDAsIDB4NDgzYTYwMGIsIDB4NDgwZTYwMGEsIDB4NDgyMjYwMGMsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDBjNiwgMHg0ODAzYzg1NiwgMHg1OTJjMDIwOCwKKwkweDhjMDAwNTFlLCAweDA0MDIwMDE3LCAweDUwMjAwMDAwLCAweDgwMzA2YzAwLAorCTB4NDAyNDAwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDBlNDYsIDB4MDAxMDBlNDYsCisJMHgwMDEwMGU0ZiwgMHgwMDEwMGU0NiwgMHgwMDEwMGU0NiwgMHgwMDEwMGU0NiwKKwkweDAwMTAwZTQ2LCAweDAwMTAwZTQ2LCAweDAwMTAwZTRmLCAweDAwMTAwZTQ2LAorCTB4MDAxMDBlNGYsIDB4MDAxMDBlNDYsIDB4MDAxMDBlNDYsIDB4MDAxMDBlNGYsCisJMHgwMDEwMGU0NiwgMHgwMDEwMGU0NiwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDg0MDAwNTFlLCAweDQ4MDI1YTA4LCAweDUwMjAwMDAwLCAweDgwMzA2YzAwLAorCTB4NTgzNDM4MDEsIDB4NDgxZTYwMGYsIDB4MDQwMWYwMDcsIDB4NTgzNDE4MDIsCisJMHg1ODM0MjgwMCwgMHg1ODM0MzgwMSwgMHg0ODBlNjAxMCwgMHg0ODE2NjAwZSwKKwkweDQ4MWU2MDBmLCAweDA0MDFmMjQ2LCAweDQ5MzNjODU3LCAweDU5MzFmODA4LAorCTB4NTkzMDBhMDYsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4ODAwNDA5MDYsCisJMHgwNDAyMDAwMiwgMHg4MDA0MDgwMCwgMHg0ODA1ZmMwNiwgMHg0YTAyNjIwNiwKKwkweDAwMDAwMDAyLCAweDU5MmMwNDA5LCAweDgyMDAwNTAwLCAweDAwMDAwMDA4LAorCTB4MDQwMDAwMGIsIDB4MDQwMWY4MzQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwNCwgMHgwNDAyMDAwNSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0OCwKKwkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDFjMDFmMDAwLCAweDRjZmMwMDAwLAorCTB4NThmYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDA0OCwgMHgwNDAyMDAwYywgMHg1OGZjMDAwYiwgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDA5LCAweDU4ZmMwNDA3LCAweDgwMDAwMWMwLCAweDA0MDAwMDA2LAorCTB4NThmYzA4MGIsIDB4OGMwNDBkMTYsIDB4MDQwMDAwMTcsIDB4NThmYzAwMDcsCisJMHgwNDAxZjAwYSwgMHg1OGZjMDQwOCwgMHg4YzAwMDUxMiwgMHgwNDAyMDAxNCwKKwkweDU4ZmMwYzA5LCAweDhjMDQwZDE2LCAweDA0MDIwMDAzLCAweDVjMDFmODAwLAorCTB4MWMwMWYwMDAsIDB4NThmYzAwMGEsIDB4NTkzMDA4MTEsIDB4ODAwNDA1ODAsCisJMHgwNDAyMDAwOSwgMHg1OTMwMDAwNywgMHg4NDAwMDUwMCwgMHg0ODAyNjAwNywKKwkweDQyMDI3MDAwLCAweDAwMDAwMDQ4LCAweDVjMDFmODAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3YTEsIDB4NWMwMWY4MDAsIDB4MWMwMWYwMDAsIDB4NThmZGY4MDksCisJMHgwNDAxZjdlYywgMHg0OTMzYzg1NywgMHg1OWI4MDhlYSwgMHg4MjA0MGQwMCwKKwkweDAwMDAwMDA3LCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDFlLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMWIsIDB4NTkzMDA0MDYsCisJMHg0YzAwMDAwMCwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMCwgMHg0MjAwMzAwMCwKKwkweDAwMDAwMDQxLCAweDQyMDAwMDAwLCAweDUwMDAwMDAwLCAweDQxMzAwODAwLAorCTB4NGMxODAwMDAsIDB4MDQwMWZjZTcsIDB4NWMwMDMwMDAsIDB4MDQwMDAwMGIsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAxZSwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwKKwkweDgwMTgzMDQwLCAweDA0MDIwN2Y0LCAweDQyMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDEzMDA4MDAsIDB4MDQwMWZjZGIsIDB4NWMwMDAwMDAsIDB4NDgwMjY0MDYsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDAwNywgMHg4NDAwMDUwMCwgMHg0ODAyNjAwNywKKwkweDA0MDFmN2ZjLCAweDU5YzAwMDA3LCAweDRhMDM4MDA2LCAweDMwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NTljMDAwMDcsIDB4OGMwMDA1MGEsIDB4MDQwMjA3ZmUsCisJMHgxYzAxZjAwMCwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywKKwkweDRkYzAwMDAwLCAweDRhMDM3MGU4LCAweDAwMDAwMDAwLCAweDQyMDM4MDAwLAorCTB4MDAwMDc3MjAsIDB4MDQwMWZmZjAsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MDAsCisJMHgwNDAxZmZlZCwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAyMDAxMywKKwkweDRhMDM4ODkxLCAweDAwMDBmZmZmLCAweDQ5N2I4ODgwLCAweDQ5N2I4ODkyLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAxOTAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg4MDA4MTA0MCwgMHgwNDAyMDdmZCwgMHg0MjAwMDAwMCwgMHgwMDEwYjhhNiwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDA0MDFmODBlLCAweDVjMDM4MDAwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDUyNTgsIDB4MDQwMWY4MmQsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjhhNywgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwNDAxZjgwNSwKKwkweDQ4MTc4ODkyLCAweDQ4MGI4ODgwLCAweDVjMDM4MDAwLCAweDFjMDFmMDAwLAorCTB4NDk2ZmM4NTcsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMGIsCisJMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwgMHg0MjAwMTAwMCwgMHgwMDAwODA0OCwKKwkweDQyMDAxODAwLCAweDAwMDBmZmZmLCAweDAyMDFmODAwLCAweDAwMTAzYTNlLAorCTB4NWMwMDE4MDAsIDB4NWMwMDEwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwM2MsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTM0NSwgMHg1OWE4MDA2YywgMHg4MDAwMDU0MCwKKwkweDA0MDAwMDA2LCAweDU5YTgxMDZkLCAweDgwMDgxMWMwLCAweDA0MDAwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDFhYWYsIDB4NGEwMzg4OTEsIDB4MDAwMGZmZmYsCisJMHg0YTAzOTAwZCwgMHgwMDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDEwMDk4ZSwKKwkweDRhMDM3MGU4LCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDVjMDAwMDAwLAorCTB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NTljNDEwODAsIDB4NDk3Yjg4ODAsCisJMHg1OWM0Mjg5MiwgMHg0OTdiODg5MiwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwKKwkweDA0MDIwMDAyLCAweDFjMDFmMDAwLCAweDQyMDAyMDAwLCAweDAwMDAwMjYwLAorCTB4NTljNDE4YTQsIDB4ODIwYzFkMDAsIDB4MDAwMDAwMGYsIDB4ODIwYzA1ODAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDAxMCwgMHg1OWM0MTgwNSwgMHg4MjBjMWQwMCwKKwkweDAwMDAwMDAxLCAweDA0MDIwMDBlLCAweDU5YzQxOGE0LCAweDgyMGMxZDAwLAorCTB4MDAwMDAwMGYsIDB4ODIwYzA0ODAsIDB4MDAwMDAwMDcsIDB4MDQwMDEwMDQsCisJMHg4MjBjMDQ4MCwgMHgwMDAwMDAwYywgMHgwNDAwMTAwMywgMHg4MDEwMjA0MCwKKwkweDA0MDIwN2VjLCAweDQ5N2I4ODkxLCAweDFjMDFmMDAwLCAweDRjMTAwMDAwLAorCTB4NDIwMDIwMDAsIDB4MDAwMDAwMTksIDB4NDYwMDAwMDAsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTkzNywgMHg1MDAwMTgwMCwgMHg4MjBjMWQwMCwKKwkweDAwMDAwMDAxLCAweDA0MDAwMDA1LCAweDgwMTAyMDQwLCAweDA0MDIwN2Y3LAorCTB4NWMwMDIwMDAsIDB4MDQwMWY3ZjAsIDB4NWMwMDIwMDAsIDB4MDQwMWY3ZWMsCisJMHg0ODAzYzg1NiwgMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKKwkweDU5MmMwYTA0LCAweDQ4MDdjODU3LCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLAorCTB4ODIwNDA1MDAsIDB4MDAwMDAwMGYsIDB4MGMwMWYwMDEsIDB4MDAxMDBmNjcsCisJMHgwMDEwMGY2NywgMHgwMDEwMGY2NywgMHgwMDEwMGY3ZiwgMHgwMDEwMGY2NywKKwkweDAwMTAwZjY3LCAweDAwMTAwZjY3LCAweDAwMTAwZjY3LCAweDAwMTAwZjY3LAorCTB4MDAxMDBmN2YsIDB4MDAxMDBmNjcsIDB4MDAxMDBmNjksIDB4MDAxMDBmNjcsCisJMHgwMDEwMGY2NywgMHgwMDEwMGY2NywgMHgwMDEwMGY2NywgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDgyMDQwNTgwLCAweDAwMDAwMDNiLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkyYzAyMGEsIDB4OGMwMDA1MDAsIDB4MDQwMDAwNWYsCisJMHg1OTJjMWEwNywgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwKKwkweDAwMTAxMGJkLCAweDUwMDAxMDAwLCAweDUwMDgwMDAwLCAweDU5MzAyMDEzLAorCTB4NDgwMjYwMGEsIDB4NDkyZTYwMGIsIDB4NDgwYTYwMGMsIDB4NDgwZTYwMGQsCisJMHg0ODEyNjAxMiwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg4MjA0MDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwNDAwLCAweDAwMTAxMGJkLCAweDUwMDAxMDAwLAorCTB4NTAwODAwMDAsIDB4NTkyYzFhMDcsIDB4NDgwMjYwMGEsIDB4NDkyZTYwMGIsCisJMHg0ODBhNjAwYywgMHg0ODBlNjAwZCwgMHg0OTdhNjAxMiwgMHgwNDAxZjdmMiwKKwkweDhjMDQwZDAwLCAweDA0MDIwMDQxLCAweDgyMDQwZDAwLCAweDAwMDAwMDgwLAorCTB4MDQwMDAwM2UsIDB4MDIwMWYwMDAsIDB4MDAwMjAwY2YsIDB4NTkzMDAwMTMsCisJMHg1OTMwMTAxMiwgMHg4MDA4MDU4MCwgMHgwNDAyMDAwYywgMHg0MjAwNzgwMCwKKwkweDgwMDAwMDA1LCAweDU5MmMxMjA4LCAweDgyMDgwNTAwLCAweGZmZmY3ZmZmLAorCTB4NDgwMjVhMDgsIDB4OGMwODE1MWUsIDB4MDQwMjAwMmQsIDB4ODIzYzdkNDAsCisJMHgwMDAwMDAyMCwgMHgwNDAxZjAyYSwgMHg0ODBiYzg1NywgMHg0MjAwMDAwMCwKKwkweDAwMTBiODUxLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5MzAwNDE0LAorCTB4NDgwM2M4NTcsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMDcsIDB4NTk5YzE4MTksCisJMHg4YzBjMWQxMiwgMHgwNDAyMDAwNCwgMHg4MjBjMWQ0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmMDFkLCAweDU5MzAyMDEzLCAweDA0MDFmOTJiLCAweDA0MDIwMDFhLAorCTB4NDIwMDc4MDAsIDB4ODAwMDAwMDUsIDB4NTkzMDUwMGQsIDB4NTkyYzAyMDgsCisJMHg0ODAzYzg1NywgMHg4YzAwMDUxZSwgMHgwNDAyMDAwNSwgMHg4MjNjN2Q0MCwKKwkweDAwMDAwMDIwLCAweDU5MzA0MDBjLCAweDA0MDFmMDA0LCAweDg0MDAwNTFlLAorCTB4NDgwMjVhMDgsIDB4MDQwMWY4ZGEsIDB4NTAyMDE4MDAsIDB4NDgwZTYwMGEsCisJMHg0ODMyNjAwYiwgMHg0ODIyNjAwYywgMHg0ODJhNjAwZCwgMHg0ODBmYzg1NywKKwkweDQ4MzNjODU3LCAweDQ4MjNjODU3LCAweDQ4MmJjODU3LCAweDgwMDAwNTgwLAorCTB4NDgzZTYwMDQsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwgMHg1OTkwMDAwNCwgMHg4MTMwMDU4MCwKKwkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMjU4MDgsIDB4NGQzYzAwMDAsCisJMHg0ZDQwMDAwMCwgMHg1OTMwMDAwNCwgMHg0ODAzYzg1NywgMHg0YzAwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA2ZGMzLCAweDAyMDFmODAwLCAweDAwMTA2YjhhLAorCTB4NWMwMDAwMDAsIDB4OGMwMDA1MTYsIDB4MDQwMDAwMTAsIDB4NTkyYzAwMGYsCisJMHg0ODAzYzg1NywgMHg0ODAyNTgwNywgMHg0MTc4MDgwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTA0ZTcwLCAweDRhMDI1YzA2LAorCTB4MDAwMGZmZmYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzkxMSwgMHgwNDAxZjAxNSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwKKwkweDU5MmMwMjA4LCAweDg0MDAwNTRlLCAweDQ4MDI1YTA4LCAweDU5MzAwNDA2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDYsIDB4MDQwMjAwMDksIDB4ODExODAwY2EsCisJMHg4MWM4MGMwMCwgMHg1ODA0MDkzOSwgMHg1OTJjMDAwZCwgMHg4MDA0MDQ4MCwKKwkweDU5MmMwODBmLCAweDgwMDQwNDgwLCAweDQ4MDI1ODBiLCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDhiZTMsIDB4NWMwMjgwMDAsIDB4NWMwMjc4MDAsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwKKwkweDU5OTAwMDA0LCAweDgxMzAwNTgwLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHg1OTMyNTgwOCwgMHg1OTJjMDIwOCwgMHg4NDAwMDU0MCwgMHg0ODAyNWEwOCwKKwkweDA0MDFmN2JmLCAweDQ5MWJjODU3LCAweDQ5ZDNjODU3LCAweDRkZDAwMDAwLAorCTB4NDE3ODA4MDAsIDB4ODAwN2EwY2EsIDB4ODNkM2E0MDAsIDB4MDAwMDc2MDAsCisJMHg0YTAzYTAwNSwgMHg4MDAwMDAwMiwgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwKKwkweDUwMDAwMDAwLCAweDgyMDAwNDgwLCAweDI0MjIwMDAxLCAweDA0MDIwMDI5LAorCTB4NTlkMDEwMDYsIDB4ODIwODA1MDAsIDB4MDAwMDYwMDAsIDB4ODIwMDA1ODAsCisJMHgwMDAwNjAwMCwgMHgwNDAwMDAyZiwgMHg4MjA4MDUwMCwgMHg0MDAwODAwMCwKKwkweDA0MDAwN2Y4LCAweDgwMDQwOWMwLCAweDA0MDIwMDJhLCAweDgxMWEzMWMwLAorCTB4MDQwMDAwMjgsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDIsIDB4NTAwMDEwMDAsCisJMHg0NjAwMDAwMCwgMHgwMDAwMDUxMiwgMHg0MjAwMTgwMCwgMHgwMDAwMDAwYSwKKwkweDU5ZTAwMDAwLCAweDhjMDAwNTFhLCAweDA0MDIwN2ZjLCAweDgwMGMxODQwLAorCTB4MDQwMjA3ZmMsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDIsIDB4NDYwMDAwMDAsCisJMHgwMDAwMDUxNCwgMHg0MjAwMTgwMCwgMHgwMDAwMDAwYSwgMHg1OWUwMDAwMCwKKwkweDhjMDAwNTNhLCAweDA0MDIwN2ZjLCAweDgwMGMxODQwLCAweDA0MDIwN2ZjLAorCTB4NDIwMDAwMDAsIDB4MDAwMDEwMDIsIDB4NDQwODAwMDAsIDB4MDQwMWYwMGQsCisJMHg1OWQwMTAwNiwgMHg4MjA4MDUwMCwgMHgwMDAwNjAwMCwgMHg4MjAwMDU4MCwKKwkweDAwMDA2MDAwLCAweDA0MDAwMDA3LCAweDhjMDgxNTFlLCAweDA0MDAwN2Y5LAorCTB4NTlkMDEwMDYsIDB4ODIwODA1MDAsIDB4MDAwMDYwMDAsIDB4MDQwMjA3ZjUsCisJMHg4M2QzYTQwMCwgMHgwMDAwMDAyMCwgMHg4MDA0MDgwMCwgMHg4MjA0MDQ4MCwKKwkweDAwMDAwMDA1LCAweDA0MDAxN2JmLCAweDVjMDNhMDAwLCAweDFjMDFmMDAwLAorCTB4NDkxYmM4NTcsIDB4NDlkM2M4NTcsIDB4NGRkMDAwMDAsIDB4NDE3ODA4MDAsCisJMHg4MDA3YTBjYSwgMHg4M2QzYTQwMCwgMHgwMDAwNzYwMCwgMHg0YTAzYTAwNSwKKwkweDgwMDAwMDAxLCAweDU5ZDAwMDA2LCAweDgzZDNhNDAwLCAweDAwMDAwMDIwLAorCTB4ODAwNDA4MDAsIDB4ODIwNDA0ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDE3ZjgsCisJMHg1YzAzYTAwMCwgMHgxYzAxZjAwMCwgMHg1OWQwMDAwNiwgMHg4YzAwMDUzZSwKKwkweDA0MDAwMDFlLCAweDU5OTAyODA0LCAweDQ4MTdjODU3LCAweDgwMTQyOWMwLAorCTB4MDQwMDAwMTMsIDB4NTk5MDAwMGEsIDB4NTk5MDA4MGIsIDB4NTk5MDEwMGMsCisJMHg1OTkwMTgwZCwgMHg0ODAwMjgwYSwgMHg0ODA0MjgwYiwgMHg0ODA4MjgwYywKKwkweDQ4MGMyODBkLCAweDU5ZDAwMDAwLCAweDU5ZDAwODAxLCAweDU5ZDAxMDAyLAorCTB4NTlkMDE4MDMsIDB4NTlkMDIwMDQsIDB4NDgwMDI4MGUsIDB4NDgwNDI4MGYsCisJMHg0ODA4MjgxMCwgMHg0ODBjMjgxMSwgMHg0ODEwMjgxMiwgMHg1OTkwMDAwNiwKKwkweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDQ4MDMyMDA2LCAweDRhMDNhMDA1LAorCTB4MzAwMDAwMDAsIDB4NTlkMDAwMDYsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg4MDIwNDAwMCwgMHg1MDIwMDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwMywKKwkweDgwMjg1MDQwLCAweDFjMDFmMDAwLCAweDU4MzAwMDAxLCAweDgwMDAwNTQwLAorCTB4MDQwMDAwMGUsIDB4NDgwMjYwMGIsIDB4NDAwMDYwMDAsIDB4NTgzMDAyMDQsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwgMHgwMDEwMTBiZCwKKwkweDUwMDA0MDAwLCAweDgwMjA0MWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4ODAyODUwNDAsIDB4MWMwMWYwMDAsIDB4NDAwMDUwMDAsIDB4MWMwMWYwMDAsCisJMHgwMDAwMDAwNSwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwZSwKKwkweDAwMDAwMDExLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDBiLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAxMDEwYjgsCisJMHgwMDEwMTBiNywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMTAxMGI4LCAweDAwMTAxMGI3LCAweDAwMTAxMGI0LAorCTB4MDAxMDEwYjgsIDB4MDAxMDEwYjcsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMTBiOCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAxMDEwYjgsIDB4MDAxMDEwYjgsIDB4MDAxMDEwYjgsCisJMHgwMDAwMDAwMCwgMHgwMDEwMTBiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDQ4MTNjODU3LCAweDQ5MmZjODU3LCAweDQ5MzNjODU3LAorCTB4NDgxMjYwMTIsIDB4NTkyYzUyMDcsIDB4ODAyODUxYzAsIDB4MDQwMDAwNGEsCisJMHg0MTJjNjAwMCwgMHgwNDAxZjg0YiwgMHgwNDAwMDAwOSwgMHg4MjI0MDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDIwMDAzLCAweDU4MzAwMDBkLCAweDgwMTAyNDgwLAorCTB4NTAyMDAwMDAsIDB4ODAwMDQ1NDAsIDB4MDQwMDAwM2YsIDB4NTAyMDAwMDAsCisJMHg4MDAwMDU0MCwgMHgwNDAwMDAwYiwgMHg4MDMwMTQwMCwgMHg1ODA4MDAwMiwKKwkweDgwMTAyNDgwLCAweDA0MDAxMDFlLCAweDgwMTAyMWMwLCAweDA0MDAwMDA5LAorCTB4ODAyODUwNDAsIDB4MDQwMDAwMzQsIDB4ODAyMDQwMDAsIDB4MDQwMWY3ZjQsCisJMHg1ODMwMDAwMSwgMHg4MDAwNjU0MCwgMHgwNDAwMDAyZiwgMHgwNDAxZjdlNiwKKwkweDgwMjg1MDQwLCAweDA0MDAwMDJjLCAweDgwMjA0MDAwLCAweDUwMjAwMDAwLAorCTB4ODAwMDA1NDAsIDB4MDQwMjAwMGEsIDB4NTgzMDAwMDEsIDB4ODAwMDY1NDAsCisJMHgwNDAwMDAyNSwgMHg1ODMwMDIwNCwgMHg4MjAwNGQwMCwgMHgwMDAwMDAwZiwKKwkweDgyMjQ0NDAwLCAweDAwMTAxMGJkLCAweDUwMjA0MDAwLCAweDU5MmMwMjA4LAorCTB4ODQwMDA1MWUsIDB4NDgwMjVhMDgsIDB4MDQwMWYwMTMsIDB4ODAxMDIwODAsCisJMHg4MDEwMjAwMCwgMHg0ODEyNjAxMCwgMHg0ODEzYzg1NywgMHg1ODA4MDgwMiwKKwkweDQwMTAwMDAwLCAweDgwMDQyNDgwLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAorCTB4NTgwODAwMDAsIDB4NTgwODE4MDEsIDB4ODAxMDI0MDAsIDB4NDgxMjYwMGUsCisJMHg0ODBlNjAwZiwgMHg0ODEzYzg1NywgMHg1OTJjMDIwOCwgMHg4NDAwMDU1ZSwKKwkweDQ4MDI1YTA4LCAweDQ4MzNjODU3LCAweDQ4MjNjODU3LCAweDQ4MmJjODU3LAorCTB4NDgzMjYwMGIsIDB4NDgyMjYwMGMsIDB4NDgyYTYwMGQsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjAwMywgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKKwkweDU4MzAwMjA0LCAweDgyMDA0ZDAwLCAweDAwMDAwMDBmLCAweDgyMjQ0NDAwLAorCTB4MDAxMDEwYmQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAyOSwgMHgwNDAyMDAxYiwgMHg1MDIwNDAwMCwgMHg1OTJjMDQwOSwKKwkweDgwMDAwNTQwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMDIsIDB4MDQwMDEwMTEsIDB4NTgzMDAwMDEsIDB4ODAwMDY1NDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODMwMDIwNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwNDAwLCAweDAwMTAxMGJkLCAweDUwMDA0MDAwLAorCTB4NDAwNDAwMDAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDYsIDB4ODIwNDBjODAsCisJMHgwMDAwMDAwNSwgMHgwNDAyMTdmMSwgMHg4MDIwNDQwMCwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDU5ZTAwMDA0LCAweDhjMDAwNTBlLCAweDAyMDIwMDAwLAorCTB4MDAxMDA5MDMsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NTllNGI4MDAsCisJMHg0ODVmYzg1NywgMHg4MjVjMDUwMCwgMHgwMDAwMDAxZiwgMHgwNDAwMDAwNCwKKwkweDU5ZTQwODYyLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDgyNWMwNTAwLAorCTB4MDAwMDAwZTAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4OGM1Y2JkMGUsCisJMHgwNDAyMDgwNywgMHg4YzVjYmQwYywgMHgwNDAyMDgwOSwgMHg4YzVjYmQwYSwKKwkweDA0MDIwODc4LCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NGEwM2M4MDAsIDB4MDAwMDAwODAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsCisJMHg0MjAwNzgwMCwgMHgwMDEwYjhlYywgMHg1ODNjMDAwMSwgMHg1ODNjMDgwMiwKKwkweDgwMDQwNTQwLCAweDA0MDAwMDNmLCAweDQyMDAwODAwLCAweDAwMTBiN2Y3LAorCTB4NTAwNjU4MDAsIDB4NTkyYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsCisJMHgwNDAwMDAwZSwgMHg1OWU0MDg1MCwgMHg1OWU0MTg1MywgMHg0MDBjMDAwMCwKKwkweDgwMDQwNDAwLCAweDU5ZTQwODUyLCAweDQ4MDdjODU3LCAweDgwMDQxNDgwLAorCTB4MDQwMjEwMDgsIDB4NDAwMDEwMDAsIDB4NDgwYmM4NTcsIDB4NGEwMDc4MDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjAwNiwgMHg0ODAzYzg1NywgMHgwNDAxZjAyOSwKKwkweDU5ZTQxMDUwLCAweDQ4MGJjODU3LCAweDQ5Nzg3ODAwLCAweDQ4MGJjODU3LAorCTB4NDgwZmM4NTcsIDB4NTkyYzAwMDMsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDYsCisJMHg4MDA4MDU4MCwgMHgwNDAyMDAwNCwgMHg1OTJjMDAwMywgMHg0ODAzYzg1NywKKwkweDQ4MGJjODU3LCAweDQ4MGE1ODAzLCAweDU5MmMwMDA3LCAweDgwMDAwMWMwLAorCTB4MDQwMDAwMDcsIDB4NTkyYzEwMDcsIDB4NDgwYmM4NTcsIDB4NTgzYzAwMDMsCisJMHg0ODAzYzg1NywgMHg4MDA4MDQ4MCwgMHgwNDAwMTAwMywgMHg1ODNjMTAwMSwKKwkweDQ4MGJjODU3LCAweDU4M2MwODAyLCAweDQ4MGJjODU3LCAweDQ4MDdjODU3LAorCTB4NGEwMjU4MDEsIDB4MDAwMDAwMDAsIDB4NGEwMjU4MDksIDB4MDAxMDExYmMsCisJMHg0ODBhNTgwNywgMHg0ODA2NTgwOCwgMHg1OWU0MDA1MywgMHg0ODAyNTgwNCwKKwkweDQxMmMxMDAwLCAweDQ5MmZjODU3LCAweDAyMDFmODAwLCAweDAwMTAwODU4LAorCTB4NWMwMjU4MDAsIDB4NGEwM2M4MDAsIDB4MDAwMDAwNDAsIDB4MWMwMWYwMDAsCisJMHg0MjAwNzgwMCwgMHgwMDEwYjdmNywgMHg1MDNjNzgwMCwgMHg0YTAwNzgwMiwKKwkweDAwMDAwMTAwLCAweDQyMDA3ODAwLCAweDAwMTBiOGVjLCAweDU4M2MwMDAwLAorCTB4NDgwM2M4NTcsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDQsCisJMHg4MDAwMDAwMCwgMHg0ODAwNzgwMCwgMHgwNDAxZjAxOSwgMHg0OTc4NzgwMCwKKwkweDU4M2MxODA2LCAweDU4M2MwMDA1LCAweDgwMGMxODAwLCAweDQ4MGM3ODA2LAorCTB4ODAwYzA1ODAsIDB4MDQwMjAwMDIsIDB4NDk3ODc4MDYsIDB4NTgzYzA4MDcsCisJMHg4MDA0MDljMCwgMHgwNDAwMDAwZSwgMHg1ODNjMDAwOCwgMHg4MDAwMDAwMCwKKwkweDQ4MDA3ODA4LCAweDgwMDQwNTgwLCAweDA0MDIwMDA5LCAweDQ5Nzg3ODA4LAorCTB4NTgzYzIwMDYsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsCisJMHgwMDAwODAyOCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EzZSwgMHgxYzAxZjAwMCwKKwkweDRhMDNjODAwLCAweDAwMDAwMDIwLCAweDAyMDFmODAwLCAweDAwMTBhYTQwLAorCTB4NTllNDAwMDAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NGEwMDcwMDEsCisJMHgwMDAwMDAwMCwgMHg4MjA0MGQwMCwgMHg0MzAwMGY4MCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNWQ4LCAweDU4MzgwMDA5LCAweDQ4MDNjMDBmLCAweDAyMDFmODAwLAorCTB4MDAxMDk0MDIsIDB4NTgzYTU4MDgsIDB4NTkyYzAwMDAsIDB4NDgwMDcwMDgsCisJMHg4MDAwMDFjMCwgMHgwNDAyMDAwMiwgMHg0OTc4NzAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTAwN2Y0LCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLCAweDAwMTAwODdkLAorCTB4NDgwM2M4NTYsIDB4NGMzYzAwMDAsIDB4NGQyYzAwMDAsIDB4NGQzMDAwMDAsCisJMHg1ODMwMDAwYSwgMHg4MDAyNWQ0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU5MmU2MDA4LCAweDRjMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA5NDFhLAorCTB4NWMwMDYwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTgzMDAwMDIsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDEwMCwgMHgwNDAyMDAxMCwgMHg1OTMwNzgwYiwKKwkweDU4M2MwMDAxLCAweDgwMDAwNTQwLCAweDA0MDAwMDBlLCAweDQ4MDI2MDBiLAorCTB4NDAwMDc4MDAsIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDIsIDB4NDgwMDYwMDMsCisJMHg1ODNjMDAwMCwgMHg0ODAwNjAwNCwgMHg0MDMwMTAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODU4LCAweDA0MDFmMDBjLCAweDRhMDI1YTA2LCAweDAwMDAwMDAyLAorCTB4NGMzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMDYwMDAsCisJMHg0MDMyNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmNCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzdkLCAweDVjMDI2MDAwLCAweDVjMDI1ODAwLCAweDVjMDA3ODAwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQyYzAwMDAsIDB4NGQzMDAwMDAsCisJMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwgMHg1ODM4MDgwMSwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDIwMDExLCAweDU4Mzg2MDAyLCAweDU4MzAwMDBhLAorCTB4ODEyYzA1ODAsIDB4MDQwMjAwMGQsIDB4NTllMDAwMDQsIDB4OGMwMDA1MGUsCisJMHgwNDAwMDdmZSwgMHg1OWRjMDAwNiwgMHg0ODAzYzg1NywgMHg0YTAzYjgwNSwKKwkweDIwMDAwMDAwLCAweDhjMDAwNTNlLCAweDA0MDAwN2Y4LCAweDRhMDA3MDAxLAorCTB4MDAwMDAwMDAsIDB4MDQwMWYwMTksIDB4NTgzODYwMDYsIDB4NDAzMDUwMDAsCisJMHg4MDMwNjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODMwMDAwYSwKKwkweDgxMmMwNTgwLCAweDA0MDAwMDA0LCAweDQwMzA1MDAwLCAweDU4MzA2MDAwLAorCTB4MDQwMWY3ZjgsIDB4NDAyODAwMDAsIDB4ODAzMDA1ODAsIDB4NTgzMDAwMDAsCisJMHgwNDAwMDAwNiwgMHg0ODAwNTAwMCwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwNywKKwkweDQ4Mjg3MDA1LCAweDA0MDFmMDA1LCAweDgwMDAwMWMwLCAweDA0MDIwMDAyLAorCTB4NDgwMDcwMDUsIDB4NDgwMDcwMDYsIDB4NDAzMjU4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdmNCwgMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwgMHg1ODM4MDAwMSwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDAyMDAwODAwLCAweDAwMTAwODdkLAorCTB4NWMwMjYwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAzYywgMHg0ODA3OTAwMCwgMHg1OWM4MDAwMCwKKwkweDgwMDQwNTAwLCAweDA0MDIwN2ZlLCAweDQ5N2I5MDA1LCAweDRhMDM5MDM1LAorCTB4MDA4ODAyMDAsIDB4NTlhODAwMGUsIDB4ODAwMDAwZTAsIDB4NDgwMzkwMGUsCisJMHg0YTAzOTAxMSwgMHgwMDAwMDAyNCwgMHg0YTAzOTAwZiwgMHgwMDEwZDFjMCwKKwkweDRhMDM5MDEwLCAweDAwMTBkMWMwLCAweDRhMDM5MDE1LCAweDAwMDAwMDdmLAorCTB4NGEwMzkwMGQsIDB4MDAwMDAwNDAsIDB4NGEwMzkwMDAsIDB4MDAwMDE2MDAsCisJMHgxYzAxZjAwMCwgMHg1OWM4MDAwNywgMHg4YzAwMDUwOCwgMHgwNDAyMDhiNywKKwkweDU5YzgwODAwLCAweDhjMDQwZDE2LCAweDA0MDIwMDA0LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDYsIDB4MGMwMWYwMDUsIDB4NDgwN2M4NTcsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwZSwgMHgwYzAxZjAwMSwgMHgwMDEwMTJhOCwgMHgwMDEwMTJhNiwKKwkweDAwMTA1OTk5LCAweDAwMTAxMmE2LCAweDAwMTAxMmFhLCAweDAwMTAxMmE2LAorCTB4MDAxMDEyYWEsIDB4MDAxMDEyYWEsIDB4MDAxMDEyYTYsIDB4MDAxMDEyYTYsCisJMHgwMDEwMTJhNiwgMHgwMDEwMTJhNiwgMHgwMDEwMTJhYSwgMHgwMDEwMTJhNiwKKwkweDAwMTAxMmFhLCAweDAwMTAxMmE2LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4NDgwM2M4NTcsIDB4MWMwMWYwMDAsIDB4NTljODA4MGMsIDB4NDgwN2M4NTcsCisJMHg4MjA0MDUwMCwgMHgwMDAwNjAwMCwgMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTAzLCAweDA0MDFmMDA2LCAweDgyMDQwNTAwLCAweDAwN2YwMDAwLAorCTB4MDQwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMGE5ZDUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmViMywgMHgwNDAxZjAyYiwgMHg4MjA0MDUwMCwgMHgwMDAwMDAxNCwKKwkweDA0MDAwMDE0LCAweDAyMDFmODAwLCAweDAwMTBhYTMyLCAweDgzNmMwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMDAwMGQsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCisJMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDExZCwgMHgwNDAxZjAwNywKKwkweDRhMDM1MDMzLCAweDAwMDAwMDAxLCAweDQyMDJkODAwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsIDB4MDQwMWY4MTcsIDB4MDQwMWYwMTUsCisJMHg4MjA0MDUwMCwgMHgwMDAwMWMwMCwgMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTExLCAweDA0MDFmODEwLCAweDA0MDFmMDBlLCAweDgyMDQwNTAwLAorCTB4MDAwMDAxNDAsIDB4MDQwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFhMjQsCisJMHgwNDAxZjgwOSwgMHgwNDAxZjAwNywgMHg4MjA0MDUwMCwgMHgwMDAwODAwMCwKKwkweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTBhOWZjLCAweDA0MDFmODAyLAorCTB4MWMwMWYwMDAsIDB4NGMwYzAwMDAsIDB4NGMxMDAwMDAsIDB4NGMxNDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGVjOSwgMHg1YzAwMjgwMCwgMHg1YzAwMjAwMCwKKwkweDVjMDAxODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5YTgwODA0LAorCTB4NTlhODAwMmIsIDB4ODIwMDA1MDAsIDB4ZmZmZmYwMDAsIDB4ODAwNDA1NDAsCisJMHg0ODAzNTAyYiwgMHg1OWE4MDAyZiwgMHg4MjAwMDUwMCwgMHhmZmZmZjAwMCwKKwkweDgwMDQwNTQwLCAweDQ4MDM1MDJmLCAweDQ4MDc4ODgyLCAweDgyMDQxYzAwLAorCTB4MDAwMDAwMGYsIDB4ODAwYzE5MDgsIDB4ODIwYzFjMDAsIDB4MDAwMDAwMDQsCisJMHg0MDBjMjAwMCwgMHg5MDEwMjljMCwgMHg4MjA0MDQ4MCwgMHgwMDAwMDFlNCwKKwkweDA0MDIxMDA1LCAweDQyMDAxMDAwLCAweDAwMDAwMDA4LCAweDgwMTAyMGM2LAorCTB4MDQwMWYwMzEsIDB4ODIwNDA0ODAsIDB4MDAwMDAyMzAsIDB4MDQwMjEwMDksCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwNywgMHg4MDEwMDBjMiwgMHg4MDAwMDBjMiwKKwkweDgwMTAwNDAwLCAweDgwMTAwNDAwLCAweDgwMTAyNDAwLCAweDA0MDFmMDI2LAorCTB4ODIwNDA0ODAsIDB4MDAwMDAyOTgsIDB4MDQwMjEwMDgsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAwNiwgMHg4MDEwMDBjMiwgMHg4MDAwMDBjMiwgMHg4MDEwMDQwMCwKKwkweDgwMTAyNDAwLCAweDA0MDFmMDFjLCAweDgyMDQwNDgwLCAweDAwMDAwMzI4LAorCTB4MDQwMjEwMDcsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDUsIDB4ODAxMDAwYzIsCisJMHg4MDAwMDBjMiwgMHg4MDEwMjQwMCwgMHgwNDAxZjAxMywgMHg4MjA0MDQ4MCwKKwkweDAwMDAwNDA0LCAweDA0MDIxMDA1LCAweDQyMDAxMDAwLCAweDAwMDAwMDA0LAorCTB4ODAxMDIwYzQsIDB4MDQwMWYwMGMsIDB4ODIwNDA0ODAsIDB4MDAwMDA1NmMsCisJMHgwNDAyMTAwNiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwMywgMHg4MDEwMDBjMiwKKwkweDgwMTAyNDAwLCAweDA0MDFmMDA0LCAweDQyMDAxMDAwLCAweDAwMDAwMDAyLAorCTB4ODAxMDIwYzIsIDB4ODIxMDA0ODAsIDB4MDAwMDAxMTAsIDB4ODAwMDAwODAsCisJMHg4MDAwMjAwMCwgMHg4MDA4MDBkMCwgMHg4MDE0MDU0MCwgMHg4MDEwMDU0MCwKKwkweDQ4MDM5MDM1LCAweDFjMDFmMDAwLCAweDU5YzgwODE1LCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDAsIDB4ODIwNDBkMDAsIDB4MDAwMDAwN2MsIDB4NDgwNzkwMDAsCisJMHg1OWM4MDAwMCwgMHg4MDA0MDUwMCwgMHgwNDAyMDdmZSwgMHg4YzA0MGQwNCwKKwkweDA0MDAwMDAzLCAweDU5YzgwMDM1LCAweDQ4MDM5MDM1LCAweDU5YzgwMDAwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NiwgMHg0OTdiODhhOSwgMHg0YTAzODgwNywgMHgwMDAwMDAwMSwKKwkweDQ5N2I4ODA3LCAweDU5YzQwMDA1LCAweDQ4MDM4ODA1LCAweDAyMDFmODAwLAorCTB4MDAxMDE4MTUsIDB4NDIwMWQwMDAsIDB4MDAwMDAxZjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjA4ZSwgMHg0OTdiODgwZSwgMHg0MjAwYjAwMCwgMHgwMDAwMDFmNCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDQyMDAwODAwLCAweDAwMDAwMDE0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTQsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwgMHg4YzA0MGQwMCwgMHgwNDAwMDAwNSwKKwkweDgwNThiMDQwLCAweDA0MDIwN2YzLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMzIsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBiNCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwKKwkweDQyMDAwODAwLCAweDAwMDAwMGI0LCAweDAyMDFmODAwLCAweDAwMTAxOTNmLAorCTB4OGMwNDBkMDAsIDB4MDQwMDAwMDUsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OWM0MDAwNSwgMHg0ODAzODgwNSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDg5LCAweDgwMDAwOGQwLCAweDQ4MDc1MDU0LAorCTB4NDgwNzUwNTUsIDB4NDgwNzUwNTYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBmNCwKKwkweDAyMDFmODAwLCAweDAwMTAxOTNmLCAweDgyMDQwNTAwLCAweGZmZmZmZmQxLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZjQsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwKKwkweDAyMDFmODAwLCAweDAwMTAxOTNmLCAweDgyMDQwNTQwLCAweDAwMDAwMDAxLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwKKwkweDgyMDQwNTQwLCAweDAwMDAwMDAxLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsIDB4NDIwMWQwMDAsIDB4MDAwMWQ0YzAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwgMHgwNDAxZmEyYiwgMHg0YTAzODhhNywKKwkweDAwMDBmN2Y3LCAweDRhMDM4OGEzLCAweDgwMDA0MDNjLCAweDRhMDM4OGFlLAorCTB4MDAwMDYxYTgsIDB4NGEwMzg4MDEsIDB4MDAwMzIwNjMsIDB4NGEwMzg4MTAsCisJMHgwMDQxMDEwOCwgMHg0YTAzODgxMSwgMHgwMDUyMDYwOCwgMHg0YTAzODgxMiwKKwkweDAwNDUwMzIwLCAweDRhMDM4ODEzLCAweDAwNDQwNDA1LCAweDRhMDM4ODFjLAorCTB4MDA0MTMyZTEsIDB4NGEwMzg4NTAsIDB4ODAwMDAxMDgsIDB4NGEwMzg4NjAsCisJMHgwMDAwMDAwOCwgMHg0YTAzODg3MCwgMHgwMDAwMDAwOCwgMHg0YTAzODg1MSwKKwkweDgwMDAwNTA4LCAweDRhMDM4ODYxLCAweDAwODAwMDAwLCAweDRhMDM4ODcxLAorCTB4MDA4MDAwMDAsIDB4NGEwMzg4NTIsIDB4ODAwMDA3MDgsIDB4NGEwMzg4NjIsCisJMHgwMDgwMDAwMCwgMHg0YTAzODg3MiwgMHgwMDgwMDAwMCwgMHg0YTAzODg1MywKKwkweDgwMDAwNjA4LCAweDQ5N2I4ODYzLCAweDRhMDM4ODczLCAweDAwODAwMDAwLAorCTB4NGEwMzg4ODIsIDB4MDAwMDA4NDAsIDB4NGEwMzg4YTUsIDB4MDAwMDAwMWUsCisJMHg0YTAzODhhNiwgMHgwMDAwMDAxZSwgMHg0YTAzODhiMCwgMHgwMDAwNzUzMCwKKwkweDRhMDM4ODAyLCAweDAwMDBmZmZmLCAweDRhMDM4ODA2LCAweGMwZTAwODAwLAorCTB4MWMwMWYwMDAsIDB4NDk3YjUwMjIsIDB4NGEwMzUwMjEsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwKKwkweDgyMDQwNTAwLCAweGZmZmZmZmFmLCAweDgyMDAwNTQwLCAweDAwMDAwMDAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBmNCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwKKwkweDRjMDQwMDAwLCAweDQwMDQwMDAwLCAweDg0MDAwNTQ4LCAweDQyMDAwODAwLAorCTB4MDAwMDAwZjQsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwgMHg4MjA0MDUwMCwKKwkweGZmZmZmZmMxLCAweDgyMDAwNTQwLCAweDAwMDAwMDM4LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsIDB4NWMwMDAwMDAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBmNCwgMHgwMjAxZjAwMCwgMHgwMDEwMTk0NCwKKwkweDU5YzQwODA1LCAweDQ4MDdjODU3LCAweDU5YzQwMDA2LCAweDgwMDQwZDAwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwNDA1MDAsIDB4MDBlMDA4MDAsCisJMHgwNDAyMDAwNCwgMHg4YzA0MGQzZSwgMHgwNDAyMDhjNCwgMHgwNDAxZjAwNywKKwkweDgyMDQwNTAwLCAweDAwODAwODAwLCAweDAyMDIwODAwLCAweDAwMTAwNWQwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsCisJMHg1OWM0YjgwNSwgMHg0ODVmYzg1NywgMHg1OWM0MDAwNiwgMHg4YzAwMDUwMCwKKwkweDA0MDAwMDAzLCAweDhjNWNiZDAwLCAweDA0MDIwMDc5LCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMDAwMTQsIDB4NTljNDAwMDUsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBjMCwgMHgwNDAwMDAzNiwgMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwKKwkweDA0MDIwMDMzLCAweDRhMDM4ODA1LCAweDA0MDAwMDAwLCAweDU5YzQwMGEzLAorCTB4ODIwMDA1MDAsIDB4YmYyMDNmZmYsIDB4NDgwMzg4YTMsIDB4NDk3YjUwNDksCisJMHg0YTAzODgwNSwgMHgwMDAwMDBjMCwgMHgwMjAxZjgwMCwgMHgwMDEwNTA2NSwKKwkweDA0MDFmMDYzLCAweDhjNWNiZDM0LCAweDA0MDIwMDI1LCAweDU5YzQwMDA1LAorCTB4OGMwMDA1MGMsIDB4MDQwMjAwMTIsIDB4OGMwMDA1MGUsIDB4MDQwMjAwMTMsCisJMHg4YzAwMDUwYSwgMHgwNDAyMDAxNCwgMHg4YzAwMDUwOCwgMHgwNDAwMDAwYiwKKwkweDU5YTgwMDE3LCAweDgyMDAwNTgwLCAweDAwMDAwMDA5LCAweDA0MDIwMDA3LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4NDQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTMxOCwgMHgwNDAxZjA0YiwgMHg0YTAzNTAzMywKKwkweDAwMDAwMDAwLCAweDA0MDFmMDBiLCAweDRhMDM1MDMzLCAweDAwMDAwMDAyLAorCTB4MDQwMWYwMDgsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NDYsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwNTJjMiwgMHgwNDAxZjAzZSwKKwkweDAyMDFmODAwLCAweDAwMTA1Mzc4LCAweDA0MDFmMDNiLCAweDhjNWNiZDM0LAorCTB4MDQwMDAwMzcsIDB4NTljNDAwMDUsIDB4OGMwMDA1M2EsIDB4MDQwMjAwMDUsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgxOCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDRhMDM4ODA1LCAweDAyMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLAorCTB4MDQwMjAwMTAsIDB4NGEwMzg4MDUsIDB4MDQwMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNTE0OSwgMHgwNDAyMDAwOCwgMHg0YTAzNTAzMywgMHgwMDAwMDAwMSwKKwkweDQyMDJkODAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA1MGEyLAorCTB4MDQwMWYwNWIsIDB4NDE3ODAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDUxMTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTlmZSwgMHg0MDAwYzAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxOTYzLCAweDgzNmMxNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDBkLAorCTB4OGM1Y2JkMDAsIDB4MDQwMjAwMTIsIDB4NTlhODEwMDUsIDB4OGMwODE1MDYsCisJMHgwNDAyMDAwNSwgMHg1OWM0MTBhMywgMHg4MjA4MTU0MCwgMHgwMDAwMDAwOCwKKwkweDQ4MGI4OGEzLCAweDU5YzQxMDA2LCAweDg0MDgxNTQwLCAweDQ4MGI4ODA2LAorCTB4NGEwMzg4MDUsIDB4MDQwMDAwMDAsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsCisJMHg0OTdiNTAxNCwgMHgwMjAxZjgwMCwgMHgwMDEwM2IzOCwgMHg4YzVjYmQzYywKKwkweDA0MDIwODU4LCAweDhjNWNiZDAwLCAweDA0MDAwMDM2LCAweDQyMDAwMDAwLAorCTB4MDAxMGI4Y2EsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NGEwMzg4MDUsCisJMHgwMDAwMDAwMSwgMHg0MjAwYjAwMCwgMHgwMDAwMDNlOCwgMHg0MjAxZDAwMCwKKwkweDAwMDAwMDY0LCAweDRjNTgwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2MDhlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE4ZDMsIDB4NWMwMGIwMDAsIDB4MDQwMDAwMDQsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmNiwgMHgwNDAxZjAwNCwgMHg0YTAzODgwNSwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDFmLCAweDU5YzQwMDA2LCAweDg0MDAwNTAwLAorCTB4NDgwMzg4MDYsIDB4MDIwMWY4MDAsIDB4MDAxMDZlZGUsIDB4NDk3Yjg4ODAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTljMCwgMHg1OWM0MDAwZCwgMHg4YzAwMDUwMCwKKwkweDAyMDIwODAwLCAweDAwMTBhOWNlLCAweDU5YzQwMGEzLCAweDgyMDAwNTAwLAorCTB4ZmNmOGZmZmYsIDB4NDgwMzg4YTMsIDB4NGEwMzUwNGMsIDB4MDAwMDAwMDIsCisJMHg0MjAyZDgwMCwgMHgwMDAwMDAwNCwgMHg0YTAzODgwNSwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTAwNmQ0LCAweDA0MDFmYjNiLCAweDQ5N2I1MDUyLAorCTB4NGEwMzUwNDksIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDA0NTIsCisJMHg4MjVjYmQwMCwgMHhiYmZmZmZmZSwgMHg0ODVmODgwNSwgMHg1YzAwYzAwMCwKKwkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDU5YzQxMDA0LCAweDQ4MGJjODU3LAorCTB4OGMwODE1MDAsIDB4MDQwMDAwMDYsIDB4NDgwM2M4NTYsIDB4NDk3YjI4MDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmZhNCwgMHgwNDAxZjAwYSwgMHg4MjA4MDUwMCwKKwkweDAwMDAwMWYwLCAweDA0MDAwMDA3LCAweDQ4MDNjODU2LCAweDQxN2EzMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDYwNjIsIDB4MDIwMWY4MDAsIDB4MDAxMDZmYzYsCisJMHg0YTAzODgwNSwgMHg4MDAwMDAwMCwgMHgxYzAxZjAwMCwgMHg1OWM0MDhhMywKKwkweDQ4MDdjODU3LCAweDg0MDQwZDQwLCAweDQ4MDc4OGEzLCAweDFjMDFmMDAwLAorCTB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsIDB4NGQxNDAwMDAsCisJMHg0YTAzODgwNSwgMHg0MDAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjhjNiwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDAyMDFmODAwLCAweDAwMTA2YzU1LAorCTB4NTljNDEwMDQsIDB4OGMwODE1MDAsIDB4MDQwMDAwNTQsIDB4NTk4ZTYwMGQsCisJMHg0OTdiMjgwNywgMHg4MTMyNjFjMCwgMHgwNDAwMDAzMiwgMHg1OTMwMDQwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDMyLCAweDA0MDIwMDJlLCAweDU5MzAwMDFjLAorCTB4NDgwMzg4MzMsIDB4NGEwMzg4MDcsIDB4MDAwMTgwMDAsIDB4NDIwMWQwMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwgMHg0OTdiODgwNywKKwkweDQyMDFkMDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTA2MDhlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZlMjEsIDB4NDIwMWQwMDAsIDB4MDAwMDc1MzAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwgMHg1OWM0MDhhNCwgMHg4MjA0MGQwMCwKKwkweDAwMDAwMDBmLCAweDgyMDQwZDgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDA1LAorCTB4NDIwMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDksCisJMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHg1OTMwMDAwOCwgMHg4MDAwMDU0MCwKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDQwMDI1ODAwLCAweDRhMDI1YTA0LAorCTB4MDAwMDAxMDMsIDB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsIDB4NThlYzAwMDksCisJMHgwODAxZjgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHgwNDAxZjA0NywKKwkweDU5OGMwMDBmLCAweDgyMDAxYzgwLCAweDAwMDAwMGM4LCAweDA0MDIxMDBmLAorCTB4ODAwMDAwMDAsIDB4NDgwMzE4MGYsIDB4NTljNDAwYTQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwNCwKKwkweDQyMDAwMDAwLCAweDAwMjAwMDAwLCAweDA0MDFmYmY3LCAweDAyMDFmODAwLAorCTB4MDAxMDYwNGQsIDB4MDQwMWYwMzUsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmUyMSwgMHg4MTMyNjFjMCwgMHgwNDAwMDAzMCwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDQyMDI3MDAwLCAweDAwMDAwMDI3LCAweDAyMDFmODAwLAorCTB4MDAwMjA3YTEsIDB4MDQwMWYwMjksIDB4OGMwODE1MDgsIDB4MDQwMDAwMjcsCisJMHg0MTdhMzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNzBkOCwgMHg0MjAzMjAwMCwKKwkweDAwMDBiZjMyLCAweDAyMDFmODAwLCAweDAwMTA2MDYyLCAweDU5OTI2MDA0LAorCTB4ODEzMjYxYzAsIDB4MDQwMDAwMTIsIDB4NDIwMDE4MDAsIDB4MDAwMDAwYzgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNzBhNCwgMHgwNDAyMDAwZCwgMHg1OWM0MDBhNCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDQwMWZiY2UsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjA1MiwgMHgwNDAxZjAwYywgMHg0OTMzYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTA2ZGMzLCAweDgxMzI2MWMwLCAweDA0MDAwMDA3LAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNGYsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwKKwkweDVjMDNhMDAwLCAweDVjMDMyMDAwLCAweDAyMDFmMDAwLCAweDAwMTA2YzRiLAorCTB4NDgwM2M4NTcsIDB4NTlhODA4MjEsIDB4NDgwMzUwMjEsIDB4ODAwNDE1ODAsCisJMHgwNDAwMDA0NSwgMHg4MDA0MDljMCwgMHgwNDAwMDAyMywgMHg0OTdiNTA0YywKKwkweDQyMDAwMDAwLCAweDAwMTBiODBkLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhZjksIDB4NDIwMDEwMDAsIDB4MDAwMDgwMTEsCisJMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwgMHgwMDAxODAwMCwgMHg4MjAwMWQ4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDA5LCAweDgyMDAxZDgwLCAweDAwMDA4MDAwLAorCTB4MDQwMDAwMDksIDB4ODIwMDFkODAsIDB4MDAwMTAwMDAsIDB4MDQwMDAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMTgwMCwgMHgwMDAwMDAwMCwKKwkweDA0MDFmMDA2LCAweDQyMDAxODAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAzLAorCTB4NDIwMDE4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsCisJMHgwNDAxZjAyMSwgMHg1OWE4MDg0YywgMHg4MDA0MDljMCwgMHgwNDAyMDAwNywKKwkweDU5YzQwMDBkLCAweDhjMDAwNTIwLCAweDA0MDAwMDA0LCAweDQyMDAxODAwLAorCTB4MDAwMDAwMDMsIDB4MDQwMWYwMDIsIDB4NDAwNDE4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWFkZCwgMHg0MjAwMTAwMCwgMHgwMDAwODAxMiwgMHgwMjAxZjgwMCwKKwkweDAwMTAzYTNlLCAweDAyMDFmODAwLCAweDAwMTAwNmQ0LCAweDAyMDFmODAwLAorCTB4MDAxMGFiMzMsIDB4MDQwMjAwMGMsIDB4MDQwMWY4NTMsIDB4NGQ0MDAwMDAsCisJMHg0ZDNjMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOCwgMHg0MjAyNzgwMCwKKwkweDAwMDAwNDA4LCAweDAyMDFmODAwLCAweDAwMTAxZmU1LCAweDVjMDI3ODAwLAorCTB4NWMwMjgwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4ODIwMDA0MDAsCisJMHgwMDEwMjEwZSwgMHg1MDAwMDgwMCwgMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNTgwMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMTAsIDB4NDk3Yjg4YWMsIDB4NDk3Yjg4YWQsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmZSwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywKKwkweDQ4MDc1MDEwLCAweDgwMDQxMTA4LCAweDQyMDBiMDAwLCAweDAwMDAwMDEwLAorCTB4NDk3Yjg4YWMsIDB4ODAwMDA1ODAsIDB4ODAwODExYzAsIDB4MDQwMjAwMDYsCisJMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwgMHgwMDEwYWIzOCwKKwkweDUwMDAwMDAwLCAweDQ4MDM4OGFkLCAweDgwMDgxMDQwLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZjUsIDB4MWMwMWYwMDAsIDB4NTlhODAwMDUsIDB4MDQwMDAwMDMsCisJMHg4NDAwMDU0NiwgMHgwNDAxZjAwMiwgMHg4NDAwMDUwNiwgMHg0ODAzNTAwNSwKKwkweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDQ4MDNjODU3LCAweDRjMDgwMDAwLAorCTB4NGMwNDAwMDAsIDB4NGMwMDAwMDAsIDB4NTljNDA4OTIsIDB4NDgwN2M4NTcsCisJMHg4MDA0MTU4MCwgMHgwNDAwMDAxMCwgMHg4MDA0MTQ4MCwgMHgwNDAyMTAwNywKKwkweDgwMDgxMDgwLCAweDgwMDgxMDAwLCAweDQwMDhiMDAwLCAweDQyMDAwMDAwLAorCTB4MDAwMDAyMDEsIDB4MDQwMWYwMDQsIDB4NDAwOGIwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDIxMCwgMHg0ODAzODg4NiwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmZSwKKwkweDQ5N2I4ODg2LCAweDVjMDAwMDAwLCAweDVjMDAwODAwLCAweDVjMDAxMDAwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsCisJMHgwNDAwMDAwNSwgMHg0MjAyODAwMCwgMHgwMDAwMDAyZSwgMHgwMjAxZjAwMCwKKwkweDAwMTBhNDQ5LCAweDFjMDFmMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDAyLAorCTB4NTlhODAwMDUsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMGIsIDB4NTljODA4MzUsCisJMHg4MjA0MGQwMCwgMHgwMDAwMWYwMCwgMHg4MDA0MDkxMCwgMHg4MDA0MDgwMCwKKwkweDU5YTgwMDZjLCAweDgwMDAwNTQwLCAweDA0MDAwMDAzLCAweDQyMDAwODAwLAorCTB4MDAwMDAyNWEsIDB4NDgwN2M4NTcsIDB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsCisJMHg1OWE4MDA1MywgMHg0ODAzYzg1NywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMCwKKwkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDRjMDAwMDAwLCAweDU5YTgwMDUzLAorCTB4NDgwM2M4NTcsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsIDB4NWMwMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg1OWE4MDA1MywgMHg0ODAzYzg1NywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAorCTB4NGMwMDAwMDAsIDB4NTlhODAwNTMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsCisJMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwKKwkweDRjMDgwMDAwLCAweDRjMzgwMDAwLCAweDU5YTgwMDQwLCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMDcsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWY4MDYsCisJMHg1YzAwNzAwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg1YzAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDAwMTAxNjZjLCAweDAwMTAxNjdmLCAweDAwMTAxNjkzLAorCTB4MDAxMDE2OTUsIDB4MDAxMDE2YmMsIDB4MDAxMDE2YmUsIDB4MDAxMDE2YzAsCisJMHg0ODAzYzg1NiwgMHg0YTAzNTA0MiwgMHgwMDAwMDAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAyLCAweDA0MDFmYTFiLCAweDQyMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4MDQwMWY5YWQsIDB4MDQwMWZhYjIsIDB4NDgwM2M4NTYsIDB4NGEwMzUwNDAsCisJMHgwMDAwMDAwNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxZSwgMHg0MjAwMTAwMCwKKwkweDAwMTAxNmMxLCAweDAyMDFmMDAwLCAweDAwMTA2MDZlLCAweDQ5N2I1MDQ1LAorCTB4NGEwMzUwNTAsIDB4MDAwMDAwMzYsIDB4NGEwMzUwNGYsIDB4MDAwMDAwMmEsCisJMHg0ODAzYzg1NiwgMHg0YTAzNTA0MiwgMHgwMDAwMDAwMSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAyLCAweDA0MDFmOTk4LCAweDQ4MDNjODU2LCAweDRhMDM1MDQwLAorCTB4MDAwMDAwMDYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMWUsIDB4NDIwMDEwMDAsCisJMHgwMDEwMTZjMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjA2ZSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDRhMDM1MDUwLCAweDAwMDAwMDM2LCAweDQ4MDNjODU2LAorCTB4NGEwMzUwNDIsIDB4MDAwMDAwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsCisJMHgwNDAxZmFhMywgMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDkwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLCAweDAwMDAwMDEwLAorCTB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmMDA1LCAweDQxNzgwMDAwLCAweDA0MDFmMDAzLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMWY5NzAsIDB4NDk3YjUwNDYsIDB4NDgwM2M4NTYsCisJMHg0YTAzNTA0MCwgMHgwMDAwMDAwNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxZSwKKwkweDQyMDAxMDAwLCAweDAwMTAxNmMxLCAweDAyMDFmMDAwLCAweDAwMTA2MDZlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwKKwkweDRjMzgwMDAwLCAweDU5YTgwMDQyLCAweDgyMDAwYzgwLCAweDAwMDAwMDA3LAorCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWY4MDYsIDB4NWMwMDcwMDAsCisJMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKKwkweDAwMTAxNmQ3LCAweDAwMTAxNmY2LCAweDAwMTAxNzRhLCAweDAwMTAxNzYxLAorCTB4MDAxMDE3NzgsIDB4MDAxMDE3ODEsIDB4MDAxMDE3ODMsIDB4MDQwMWY5ZmMsCisJMHgwNDAyMDAxYiwgMHg1OWE4MTA0OCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKKwkweDA0MDFmYTYzLCAweDgyMDQwZDAwLCAweDAwMDAwMDkwLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwOTAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMTAsCisJMHgwNDAwMDAwOCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwNywKKwkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDg0MDgxNTQwLCAweDA0MDFmMDA0LAorCTB4ODQwODE1NDIsIDB4MDQwMWYwMDIsIDB4ODQwODE1NDQsIDB4NDgwYjUwNDgsCisJMHg0YTAzNTA0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMywgMHgwNDAxZjhjYiwKKwkweDA0MDFmZjgyLCAweDFjMDFmMDAwLCAweDA0MDFmODhmLCAweDA0MDAwMDUyLAorCTB4MDQwMWY5ZGIsIDB4MDQwMjAwMmEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsCisJMHgwNDAxZmE0MywgMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDQ0LCAweDgyMDQwNTgwLCAweDAwMDAwMDEwLAorCTB4MDQwMDAwMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwOTAsIDB4MDQwMDAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwKKwkweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDM2LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWZhMmQsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDkwLCAweDA0MDAwMDA2LCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4NTlhODAwNDgsIDB4ODQwMDA1NDIsIDB4MDQwMWYwMDMsCisJMHg1OWE4MDA0OCwgMHg4NDAwMDU0MCwgMHg0ODAzNTA0OCwgMHg1OWE4MDA0NSwKKwkweDgwMDAwMDAwLCAweDQ4MDM1MDQ1LCAweDgyMDAwNTgwLCAweDAwMDAwMDA1LAorCTB4MDQwMDAwMDMsIDB4MDQwMWY4NjEsIDB4MDQwMWYwMWUsIDB4NDk3YjUwNDUsCisJMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwgMHgwMDAxODAwMCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLCAweDAwMDA4MDAwLAorCTB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMTAwMDAsIDB4MDQwMDAwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmMDA1LCAweDQxNzgwMDAwLCAweDA0MDFmMDAzLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMWY5NGIsIDB4NGEwMzUwNDIsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjAwNCwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwMywgMHgwNDAxZjAwMiwKKwkweDA0MDFmZjQyLCAweDFjMDFmMDAwLCAweDA0MDFmODNiLCAweDA0MDAwMDE1LAorCTB4NTlhODAwNGYsIDB4ODAwMDAwNDAsIDB4NDgwMzUwNGYsIDB4MDQwMWY5ODQsCisJMHgwNDAyMDAwNSwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwMywgMHg0OTdiNTA0MSwKKwkweDA0MDFmMDBjLCAweDU5YTgwMDRmLCAweDgwMDAwNTQwLCAweDA0MDIwMDAzLAorCTB4MDQwMWY4OWUsIDB4MDQwMWYwMDIsIDB4MDQwMWY4NGIsIDB4MDQwMWY4MmYsCisJMHg0OTdiNTA0NSwgMHg0YTAzNTA0MiwgMHgwMDAwMDAwMSwgMHgwNDAxZmYyYiwKKwkweDFjMDFmMDAwLCAweDA0MDFmODI0LCAweDA0MDAwMDE1LCAweDA0MDFmOTcwLAorCTB4MDQwMjAwMGYsIDB4NTlhODAwNDYsIDB4ODAwMDAwMDAsIDB4NDgwMzUwNDYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAyMDAwYywgMHg0YTAzNTA1MiwKKwkweDAwMDAwMDBhLCAweDQ5N2I1MDQ5LCAweDU5YTgwMDQ4LCAweDg0MDAwNTVlLAorCTB4NDgwMzUwNDgsIDB4NDgwM2M4NTcsIDB4MDQwMWYwMDUsIDB4MDQwMWY4MTcsCisJMHg0YTAzNTA0MiwgMHgwMDAwMDAwNCwgMHgwNDAxZmYzZCwgMHgxYzAxZjAwMCwKKwkweDA0MDFmODBkLCAweDA0MDAwMDA3LCAweDA0MDFmOTU5LCAweDA0MDIwMDAzLAorCTB4MDQwMWZmMWIsIDB4MDQwMWYwMDMsIDB4MDQwMWY4MGMsIDB4MDQwMWZmMzQsCisJMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDU5YTgwMDUwLCAweDgwMDAwMDQwLCAweDQ4MDM1MDUwLAorCTB4MDQwMDA4OGQsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjliMiwgMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDkwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMTAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsCisJMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAyLCAweDA0MDFmMDA1LCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAorCTB4MDQwMWYwMDIsIDB4NDE3ODAwMDAsIDB4MDQwMWY4ZWEsIDB4NWMwMDA4MDAsCisJMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwKKwkweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDA5LAorCTB4ODIwNDA1ODAsIDB4MDAwMDgwMDAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsCisJMHgwMDAxMDAwMCwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDA1LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsIDB4NDE3ODAwMDAsIDB4MDQwMWY4NjYsCisJMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwgMHg1OWE4MDA0NSwKKwkweDgwMDAwMDAwLCAweDQ4MDM1MDQ1LCAweDgyMDAwNTgwLCAweDAwMDAwMDA1LAorCTB4MDQwMjAwMTgsIDB4NDk3YjUwNDUsIDB4NTljNDA4MDEsIDB4ODIwNDBkMDAsCisJMHgwMDAxODAwMCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwOSwKKwkweDgyMDQwNTgwLCAweDAwMDA4MDAwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLAorCTB4MDAwMTAwMDAsIDB4MDQwMDAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAwNSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDQxNzgwMDAwLCAweDA0MDFmODQ2LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWY5NjEsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwgMHgwMDAwMDA5MCwgMHgwNDAwMDAwOSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDEwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAwNSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDQxNzgwMDAwLCAweDA0MDFmODk5LAorCTB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NGMyMDAwMDAsIDB4NTlhODAwNDgsCisJMHg4MjAwMDUwMCwgMHgwMDAwN2ZmZiwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU5YTg0MDQ3LCAweDgwMjA0MTAyLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAorCTB4NDgyMzUwNDcsIDB4ODAyMDQ1MDAsIDB4MDQwMDA3ZmEsIDB4OGMwMDA1MDQsCisJMHgwNDAyMDAwNywgMHg4YzAwMDUwMiwgMHgwNDAyMDAwOCwgMHg4YzAwMDUwMCwKKwkweDA0MDIwMDA4LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMWYwMDUsIDB4NDE3ODAwMDAsIDB4MDQwMWYwMDMsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjgwZiwgMHg1YzAwNDAwMCwKKwkweDFjMDFmMDAwLCAweDA0MDExMDAwLCAweDRhMDNjODQwLCAweDAwMTBiNDQwLAorCTB4NGEwM2M4NDIsIDB4MDAwMDAwMDksIDB4NDAwMDAwMDAsIDB4MDQwMTE3ZmYsCisJMHg0YTAzNTA0NywgMHgwMDAwMDAwNCwgMHg0YTAzNTAzZSwgMHgwMDAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDU5YTgwODU4LCAweDgyMDQwZDgwLCAweDAxMzkxMDc3LAorCTB4MDQwMjAwMDgsIDB4NTllMDA4MTMsIDB4OGMwNDBkMDAsIDB4MDQwMDAwMDUsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwMiwgMHg0MTc4MDAwMCwKKwkweDRjMDAwMDAwLCAweDA0MDFmOWIxLCAweDVjMDAwMDAwLCAweDgwMDAwMWMwLAorCTB4MDQwMDAwNDAsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMWQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwgMHgwNDAxZjkwOSwgMHg4MjA0MDU0MCwKKwkweDAwMDAwMDA0LCAweDQyMDAwODAwLCAweDAwMDAwMGEwLCAweDA0MDFmOTA5LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDQwMWY5MDEsIDB4ODIwNDA1NDAsCisJMHgwMDAwMDAyMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwgMHgwNDAxZjkwMSwKKwkweDU5YzQwMDAxLCAweDgyMDAwNTAwLCAweGZmZmU3ZmZmLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDAsIDB4NDgwMzg4MDEsIDB4NTlhODAwNTQsIDB4ODAwMDAxMTAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBlMCwgMHgwNDAxZjhmNiwgMHgwNDAxZjAzYywKKwkweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsIDB4MDQwMWY4ZTksIDB4ODIwNDA1MDAsCisJMHhmZmZmZmZmYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwgMHgwNDAxZjhlOSwKKwkweDQyMDAwODAwLCAweDAwMDAwMGMwLCAweDA0MDFmOGUxLCAweDgyMDQwNTAwLAorCTB4ZmZmZmZmZGYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDQwMWY4ZTEsCisJMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwgMHhmZmZlN2ZmZiwgMHg4MjAwMDU0MCwKKwkweDAwMDEwMDAwLCAweDQ4MDM4ODAxLCAweDU5YTgwMDU2LCAweDgwMDAwMTEwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwZTAsIDB4MDQwMWY4ZDYsIDB4MDQwMWYwMWMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwgMHgwNDAxZjhjZCwgMHg4MjA0MDU0MCwKKwkweDAwMDAwMDA0LCAweDQyMDAwODAwLCAweDAwMDAwMGEwLCAweDA0MDFmOGNkLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDQwMWY4YzUsIDB4ODIwNDA1MDAsCisJMHhmZmZmZmZkZiwgMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwgMHgwNDAxZjhjNSwKKwkweDU5YzQwMDAxLCAweDgyMDAwNTAwLCAweGZmZmU3ZmZmLCAweDgyMDAwNTQwLAorCTB4MDAwMDgwMDAsIDB4NDgwMzg4MDEsIDB4NTlhODAwNTUsIDB4ODAwMDAxMTAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBlMCwgMHgwNDAxZjhiYSwgMHgwNDAxZjE2MywKKwkweDQ4MDNjODU3LCAweDU5YTgwODU4LCAweDgyMDQwZDgwLCAweDAxMzkxMDc3LAorCTB4MDQwMjAwMDgsIDB4NTllMDA4MTMsIDB4OGMwNDBkMDAsIDB4MDQwMDAwMDUsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwMiwgMHg0MTc4MDAwMCwKKwkweDRjMDAwMDAwLCAweDA0MDFmOTRkLCAweDVjMDAwMDAwLCAweDgwMDAwMWMwLAorCTB4MDQwMDAwMjYsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMTAsCisJMHg1OWE4MDA2YywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNCwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDAwLCAweDA0MDFmYTBhLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAorCTB4MDQwMWY4OTcsIDB4ODIwNDA1NDAsIDB4MDAwMDAwOTAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjg5NywgMHgwNDAxZjAyNCwgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDAyLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU5YTgwMDZjLAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMTAwMDAsCisJMHgwNDAxZjlmNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjg4NCwKKwkweDgyMDQwNTAwLCAweGZmZmZmZjZmLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAorCTB4MDQwMWY4ODQsIDB4MDQwMWYwMTEsIDB4NTlhODAwNmMsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwODAwMCwgMHgwNDAxZjllOCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmODc1LCAweDgyMDQwNTAwLAorCTB4ZmZmZmZmNmYsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMTAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjg3MywgMHgwNDAxZjEyNCwgMHg0YzU4MDAwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDE0LCAweDgwNThiMDQwLCAweDA0MDAwMDQzLAorCTB4NTljNDAwMGQsIDB4OGMwMDA1MjAsIDB4MDQwMjA3ZmMsIDB4MDQwMWY4NWMsCisJMHg1OWM0MDAwZCwgMHg4YzAwMDUyMCwgMHgwNDAyMDdmOCwgMHg1OWM0MDgwOCwKKwkweDg0MDQwZDUwLCAweDQ4MDc4ODA4LCAweDQyMDBiMDAwLCAweDAwMDAwMGM4LAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmYsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTQsCisJMHg4MDU4YjA0MCwgMHgwNDAwMDAzMSwgMHg1OWM0MDAwZCwgMHg4YzAwMDUyMCwKKwkweDA0MDIwMDJlLCAweDQyMDAwODAwLCAweDAwMDAxMDAwLCAweDUwMDQwODAwLAorCTB4ODIwNDBjODAsIDB4MjQyMjAwMDEsIDB4MDQwMjAwMDMsIDB4OGMwMDA1MDQsCisJMHgwNDAwMDdmNCwgMHgwNDAxZjg0MiwgMHg1OWM0MDAwZCwgMHg4YzAwMDUyMCwKKwkweDA0MDIwMDIyLCAweDQyMDAwODAwLCAweDAwMDAxMDAwLCAweDUwMDQwODAwLAorCTB4ODIwNDBjODAsIDB4MjQyMjAwMDEsIDB4MDQwMjAwMDMsIDB4OGMwMDA1MDQsCisJMHgwNDAwMDdlOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwYSwgMHg4MDU4YjA0MCwKKwkweDA0MDAwMDAzLCAweDA0MDFmODMyLCAweDA0MDFmN2ZkLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwNjQsIDB4NTljNDAwMGQsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMGYsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwKKwkweDUwMDAwMDAwLCAweDgyMDAwNDgwLCAweDI0MjIwMDAxLCAweDA0MDIwMDA0LAorCTB4NTljNDA4MDgsIDB4ODQwNDBkMTAsIDB4NDgwNzg4MDgsIDB4ODAwMDA1ODAsCisJMHg0ODAzYzg1NywgMHgwNDAxZjAwYywgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwKKwkweDUwMDAwMDAwLCAweDgyMDAwNDgwLCAweDI0MjIwMDAxLCAweDA0MDIwMDA0LAorCTB4NTljNDA4MDgsIDB4ODQwNDBkMTAsIDB4NDgwNzg4MDgsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGEwLCAweDA0MDFmODE2LCAweDgyMDQwNTAwLCAweGZmZmZmZmZlLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsIDB4MDQwMWY4MTYsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjgwZSwgMHg4MjA0MDUwMCwgMHhmZmZmZmZmZSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmMDBlLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg0ODBiODgwNSwgMHgxYzAxZjAwMCwgMHg0ODA3ODgwZSwKKwkweDU5YzQwODBmLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDFjMDFmMDAwLAorCTB4OTAwMDAxYzAsIDB4ODAwNDBkNDAsIDB4ODQwNDBkNDAsIDB4NDgwNzg4MGUsCisJMHgxYzAxZjAwMCwgMHg4MjAwMGQ4MCwgMHgwMDIwMDAwMCwgMHgwNDAwMDAwOSwKKwkweDgyMDAwZDgwLCAweDAyMDAwMDAwLCAweDA0MDAwMDA2LCAweDgyMDAwZDgwLAorCTB4MDEwMDAwMDAsIDB4MDQwMDAwMDYsIDB4NTljNDA4YTMsIDB4MDQwMWYwMDYsCisJMHg1OWM0MDhhMywgMHg4NDA0MGQzMCwgMHgwNDAxZjAwMywgMHg1OWM0MDhhMywKKwkweDg0MDQwZDMyLCAweDgwMDQwNTQwLCAweDQ4MDM4OGEzLCAweDQ4MDc4OGEzLAorCTB4MWMwMWYwMDAsIDB4NTljNDAwYTMsIDB4ODQwMDA1NTYsIDB4NDgwMzg4YTMsCisJMHg4NDAwMDUxNiwgMHg0ODAzODhhMywgMHgxYzAxZjAwMCwgMHg0ODVmYzg1NywKKwkweDQ4NjNjODU3LCAweDRjNjQwMDAwLCAweDRkM2MwMDAwLCAweDRkNDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZlZGUsIDB4NDg2MzUwMGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIzMywgMHgwNDAyMDA2YywgMHg4MjYwMGQwMCwgMHgwMDAwZmYwMCwKKwkweDgwMDQwOWMwLCAweDA0MDAwMDBjLCAweDQyMDBjODAwLCAweDAwMDAwMDAxLAorCTB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODAwNDExMTAsCisJMHg4MDA4MTU4MCwgMHgwNDAwMDAyMSwgMHg4MjA0MTU4MCwgMHgwMDAwZmYwMCwKKwkweDA0MDAwMDBhLCAweDU5YzQxMGEzLCAweDgyMDgxNTAwLCAweDAwMDA4MDAwLAorCTB4MDQwMDAwMDksIDB4NTljNDEwYTcsIDB4ODIwODE1MDAsIDB4MDAwMGZmMDAsCisJMHg4MjA4MTU4MCwgMHgwMDAwZmYwMCwgMHg0MjAwYzgwMCwgMHgwMDAwMDAwMCwKKwkweDA0MDAwMDEyLCAweDU5YTgwMDA1LCAweDhjMDAwNTAyLCAweDA0MDIwMDA4LAorCTB4OGMwMDA1MDAsIDB4MDQwMjAwMGQsIDB4NTk5YzEwMTcsIDB4OGMwODE1MWEsCisJMHgwNDAwMDAzZSwgMHg4NDAwMDU0MiwgMHg0ODAzNTAwNSwgMHg0MjAwYzgwMCwKKwkweDAwMDAwMDAyLCAweDQyMDI4MDAwLCAweDAwMDAwMDA0LCAweDQyMDI3ODAwLAorCTB4MDAwMDAwMDgsIDB4MDQwMWYwMDgsIDB4NTlhODA4MDUsIDB4ODQwNDBkNDAsCisJMHg0ODA3NTAwNSwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwgMHg0MjAyNzgwMCwKKwkweDAwMDAwNDAwLCAweDU5YTgwMDA2LCAweDhjMDAwNTAyLCAweDA0MDIwMDA2LAorCTB4NTlhODA4MDUsIDB4OGMwNDBkMGEsIDB4MDQwMjAwMzMsIDB4ODQwNDBkNGEsCisJMHg0ODA3NTAwNSwgMHg0MjAwMDAwMCwgMHgwMDEwYjgxMiwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTQ3LCAweDU5YTgxODBhLCAweDQyMDAxMDAwLCAweDAwMDA4MDEzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsCisJMHgwNDAwMDAxNSwgMHg0ZDQwMDAwMCwgMHg4MjYwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDQwNjQzMDAwLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMGUsIDB4MDIwMWY4MDAsIDB4MDAxMGE0NDYsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwgMHgwMDAwMDEwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MThiLCAweDVjMDI4MDAwLCAweDU5OWMwODE3LCAweDhjMDQwZDBhLAorCTB4MDQwMjAwMTEsIDB4NDkzZmM4NTcsIDB4NDk0M2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWZlNSwgMHgwNDAxZjAwYywgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwKKwkweDA0MDAwMDA5LCAweDQyMDI4MDAwLCAweDAwMDAwMDBmLCAweDQyMDI4ODAwLAorCTB4MDAwMGZmZmYsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTQ0OSwgMHg0OTdiODg4MCwgMHg1YzAyODAwMCwgMHg1YzAyNzgwMCwKKwkweDVjMDBjODAwLCAweDFjMDFmMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMGEwLAorCTB4MDQwMWZmNWYsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDBhMCwgMHgwNDAxZjc1ZiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKKwkweDA0MDFmZjU3LCAweDgyMDQwNTQwLCAweDAwMDAwMDAyLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDAsIDB4MDQwMWY3NTcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsCisJMHgwNDAxZmY0ZiwgMHg4MjA0MDUwMCwgMHhmZmZmZmZmZCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGEwLCAweDA0MDFmNzRmLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAorCTB4MDQwMWZmNDcsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmZmQsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjc0NywgMHg1OWM0MDhhOCwgMHgwNDAxZmYzOCwKKwkweDA0MDFmZjM3LCAweDU5YzQwMGE4LCAweDgwMDQwZDgwLCAweDA0MDIwN2ZiLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGEwMzg4MDcsIDB4MDAwMDAwMDEsCisJMHg0OTdiODgwNywgMHg1OWM0MDAwNSwgMHg0ODAzODgwNSwgMHg0OTdiNTA2YywKKwkweDQ5N2I1MDZkLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDAxLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwMDMsIDB4MDQwMWY4MjQsIDB4MDQwMWY4MmYsCisJMHg0MDQwMDAwMCwgMHg0ODAzYzg1NywgMHg4MjQwODU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDIwMDFkLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwMTQsIDB4MDQwMWY4MTgsIDB4MDQwMWY4MjMsCisJMHg0MDQwMDAwMCwgMHg0ODAzYzg1NywgMHg4MjQwODU4MCwgMHgwMDAwMDgwMCwKKwkweDA0MDIwMDExLCAweDQyMDA1ODAwLCAweDAwMDAwMDAxLCAweDQyMDA2MDAwLAorCTB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMTQsIDB4MDQwMWY4MGIsCisJMHgwNDAxZjgxNiwgMHg0MDQwMDAwMCwgMHg0ODAzYzg1NywgMHg4MjQwODU4MCwKKwkweDAwMDBmZmZmLCAweDA0MDIwMDA0LCAweDRhMDM1MDZjLCAweDAwMDAwMDAxLAorCTB4NDgwM2M4NTYsIDB4MWMwMWYwMDAsIDB4NDE3ODUwMDAsIDB4MDQwMWY4MTIsCisJMHgwNDAxZjgzOCwgMHg0MDM0NzAwMCwgMHg0MDM0MDgwMCwgMHgwNDAxZjAzZCwKKwkweDQyMDA1MDAwLCAweDAwMDAwMDAxLCAweDA0MDFmODBiLCAweDA0MDFmODMxLAorCTB4NDAzNDA4MDAsIDB4MDQwMWYwMzcsIDB4NDIwMDUwMDAsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjgwNSwgMHgwNDAxZjgxZCwgMHgwNDAxZjgzNSwgMHg0MDA0ODAwMCwKKwkweDFjMDFmMDAwLCAweDA0MDFmODA4LCAweDA0MDFmODE0LCAweDQwMjgwODAwLAorCTB4MDQwMWY4MjYsIDB4NDAyYzA4MDAsIDB4MDQwMWY4MjcsIDB4NDAzMDA4MDAsCisJMHgwNDAxZjAyNSwgMHg0MjAwMDgwMCwgMHgwMDAwZmZmZiwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmODI5LCAweDQyMDAxMDAwLCAweDAwMDAwMDEwLAorCTB4MDQwMWY4MjYsIDB4NDIwMDA4MDAsIDB4MDAwMGZmZmYsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAxMCwgMHgwNDAxZjAyMSwgMHg0MTc4MDgwMCwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDAyLCAweDA0MDFmMDFkLCAweDA0MDFmOTJlLCAweDRhMDNkMDAwLAorCTB4MDAwNTAwMDQsIDB4MDQwMWY5MmIsIDB4NGEwM2QwMDAsIDB4MDAwNTAwMDUsCisJMHgwNDAxZjkyOCwgMHg0YTAzZDAwMCwgMHgwMDA1MDAwNCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAxLCAweDQyMDAxMDAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDBmLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjAwYSwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjAwNywKKwkweDQyMDAxMDAwLCAweDAwMDAwMDEwLCAweDA0MDFmMDA0LCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMTAsIDB4MDQwMWYwMWIsIDB4MDQwMWY5MTIsIDB4ODIwODJjMDAsCisJMHgwMDEwYWIzOCwgMHg1MDE0MjgwMCwgMHg4MjA4MTUwMCwgMHhmZmZmZmZmZiwKKwkweDA0MDAwMDEzLCAweDA0MDFmOTBiLCAweDgwMDgxMDQwLCAweDgwMTQyOTAyLAorCTB4NDAwNDAwMDAsIDB4ODAxNDA1MDAsIDB4MDQwMDAwMDcsIDB4NGEwM2QwMDAsCisJMHgwMDA3MDAwNiwgMHgwNDAxZjkwMywgMHg0YTAzZDAwMCwgMHgwMDA3MDAwNywKKwkweDA0MDFmMDA2LCAweDRhMDNkMDAwLCAweDAwMDcwMDA0LCAweDA0MDFmOGZkLAorCTB4NGEwM2QwMDAsIDB4MDAwNzAwMDUsIDB4MDQwMWY3ZWMsIDB4MWMwMWYwMDAsCisJMHg0MTc4MDgwMCwgMHg4MjA4MmMwMCwgMHgwMDEwYWIzOCwgMHg1MDE0MjgwMCwKKwkweDgyMDgxNTAwLCAweGZmZmZmZmZmLCAweDA0MDAwMDEwLCAweDA0MDFmOGYxLAorCTB4NGEwM2QwMDAsIDB4MDAwNTAwMDEsIDB4MDQwMWY4ZWUsIDB4NTllODE4MDAsCisJMHg4MDA4MTA0MCwgMHg4MDE0MjkwMiwgMHg4YzBjMWQwNiwgMHgwNDAwMDAwNCwKKwkweDQwMTQwMDAwLCAweDgwMDQwZDQwLCAweDA0MDFmOGU2LCAweDRhMDNkMDAwLAorCTB4MDAwNzAwMDAsIDB4MDQwMWY3ZWYsIDB4MWMwMWYwMDAsIDB4NDgwYmM4NTcsCisJMHg0ODBiNTA2ZCwgMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwgMHhmZmZmZWZmZiwKKwkweDQ4MDM4ODAxLCAweDQxNzgxODAwLCAweDA0MDFmOGM0LCAweDQxNzg1ODAwLAorCTB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMDQsCisJMHgwNDAxZmY3YSwgMHg0MjAwNjgwMCwgMHgwMDAwMDAzYywgMHgwNDAxZmY3ZCwKKwkweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLCAweDQyMDA2ODAwLAorCTB4MDAwMDAwMDQsIDB4MDQwMWZmNzEsIDB4NDE3ODY4MDAsIDB4MDQwMWZmNzUsCisJMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MTc4NjgwMCwKKwkweDA0MDFmZjZhLCAweDQyMDA2ODAwLCAweDAwMDAwMDAyLCAweDA0MDFmZjZkLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZmNjQsIDB4NDIwMDY4MDAsCisJMHgwMDAwMDBmNSwgMHgwNDAxZmY2NywgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwKKwkweDAwMDAwMDFlLCAweDQyMDA2ODAwLCAweDAwMDAwMDA0LCAweDA0MDFmZjViLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwMjAsIDB4MDQwMWZmNWUsIDB4NTlhODEwNmQsCisJMHgwNDAxZjg2NSwgMHg0MjAwMTgwMCwgMHgwMDAyMDBmNSwgMHgwNDAxZjg5NywKKwkweDU5YTgxMDZkLCAweDA0MDFmODc5LCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLAorCTB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMDQsIDB4MDQwMWZmNGIsCisJMHg0MTc4NjgwMCwgMHgwNDAxZmY0ZiwgMHg1OWM0MDAwMSwgMHg4MjAwMDU0MCwKKwkweDAwMDAxMDAwLCAweDQ4MDM4ODAxLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLAorCTB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMTUsIDB4MDQwMWZmM2YsCisJMHgwNDAxZmY0YSwgMHg0MDQwMDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMiwKKwkweDRjMDAwMDAwLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwMTUsIDB4MDQwMWZmMzQsIDB4NWMwMDAwMDAsCisJMHg0MDAwNjgwMCwgMHgwNDAxZmYzNywgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwKKwkweDAwMDAwMDFlLCAweDQyMDA2ODAwLCAweDAwMDAwMDE1LCAweDA0MDFmZjJiLAorCTB4MDQwMWZmMzYsIDB4NDA0MDAwMDAsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmQsCisJMHg0YzAwMDAwMCwgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwKKwkweDQyMDA2ODAwLCAweDAwMDAwMDE1LCAweDA0MDFmZjIwLCAweDVjMDAwMDAwLAorCTB4NDAwMDY4MDAsIDB4MDQwMWZmMjMsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsCisJMHgwMDAwMDAxZSwgMHg0MjAwNjgwMCwgMHgwMDAwMDAxNCwgMHgwNDAxZmYxNywKKwkweDA0MDFmZjIyLCAweDQwNDAwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDQwLAorCTB4NGMwMDAwMDAsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsCisJMHg0MjAwNjgwMCwgMHgwMDAwMDAxNCwgMHgwNDAxZmYwYywgMHg1YzAwMDAwMCwKKwkweDQwMDA2ODAwLCAweDA0MDFmZjBmLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLAorCTB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMTQsIDB4MDQwMWZmMDMsCisJMHgwNDAxZmYwZSwgMHg0MDQwMDAwMCwgMHg4MjAwMDUwMCwgMHgwMDAwZmZiZiwKKwkweDRjMDAwMDAwLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwMTQsIDB4MDQwMWZlZjgsIDB4NWMwMDAwMDAsCisJMHg0MDAwNjgwMCwgMHgwNDAxZmVmYiwgMHg0YTAzODg4NiwgMHgwMDAwMjAyMCwKKwkweDA0MDFmMDRjLCAweDQ4MGJjODU3LCAweDgyMDgwNTgwLCAweDAwMDEwMDAwLAorCTB4MDQwMjAwMDcsIDB4ODIwNDBkNDAsIDB4MDAwMTAwMDAsIDB4NDIwMDE4MDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjgyZCwgMHgwNDAxZjAwZiwgMHg4MjA4MDU4MCwKKwkweDAwMDA4MDAwLCAweDA0MDAwMDA3LCAweDgyMDQwZDQwLCAweDAwMDAwMDAwLAorCTB4NDIwMDE4MDAsIDB4MDA5MDAwMDEsIDB4MDQwMWY4MjQsIDB4MDQwMWYwMDYsCisJMHg4MjA0MGQ0MCwgMHgwMDAwODAwMCwgMHg0MjAwMTgwMCwgMHgwMDEwMDAwMSwKKwkweDA0MDFmODFlLCAweDFjMDFmMDAwLCAweDQ4MGJjODU3LCAweDgyMDgwNTgwLAorCTB4MDAwMTAwMDAsIDB4MDQwMjAwMDgsIDB4NDIwMDE4MDAsIDB4MDAwMDAwYTEsCisJMHgwNDAxZjgxNiwgMHg0MjAwMTgwMCwgMHgwMDAwMDBjMSwgMHgwNDAxZjgxMywKKwkweDA0MDFmMDExLCAweDgyMDgwNTgwLCAweDAwMDA4MDAwLCAweDA0MDAwMDA4LAorCTB4NDIwMDE4MDAsIDB4MDAwNDAwYTEsIDB4MDQwMWY4MGMsIDB4NDIwMDE4MDAsCisJMHgwMDIwMDBjMSwgMHgwNDAxZjgwOSwgMHgwNDAxZjAwNywgMHg0MjAwMTgwMCwKKwkweDAwMDQwMGExLCAweDA0MDFmODA1LCAweDQyMDAxODAwLCAweDAwMDAwMGMxLAorCTB4MDQwMWY4MDIsIDB4MWMwMWYwMDAsIDB4NDgwZmM4NTcsIDB4NDE3ODU4MDAsCisJMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MTc4NjgwMCwgMHgwNDAxZmViNywKKwkweDQwMGM2ODAwLCAweDgwMzQ2OTYwLCAweDA0MDFmZWJhLCAweDQyMDA2ODAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWZlYjEsIDB4NDAwYzY4MDAsIDB4MDQwMWZlYjUsCisJMHg0MjAwNjgwMCwgMHgwMDAwMDAwMywgMHgwNDAxZmVhYywgMHgwNDAxZmViNywKKwkweDQwNDAwMDAwLCAweDhjMDAwNTA0LCAweDA0MDIwN2ZjLCAweDFjMDFmMDAwLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsCisJMHgxYzAxZjAwMCwgMHgwMDAyMDEwMywgMHgwMDEwMWJkNSwgMHgwMDEwMWJkYiwKKwkweDAwMTAxYmUxLCAweDAwMTAxYmU5LCAweDAwMTAxYmVmLCAweDAwMTAxYmY3LAorCTB4MDAxMDFiZmYsIDB4MDAxMDFjMDksIDB4MDAxMDFjMGYsIDB4MDAxMDFjMTcsCisJMHgwMDEwMWMxZiwgMHgwMDEwMWMyOSwgMHgwMDEwMWMzMSwgMHgwMDEwMWMzYiwKKwkweDAwMTAxYzQ1LCAweDAwMDIwMGY4LCAweDAwMTAxYzUxLCAweDAwMTAxYzU5LAorCTB4MDAxMDFjNjEsIDB4MDAxMDFjNmIsIDB4MDAxMDFjNzMsIDB4MDAxMDFjN2QsCisJMHgwMDEwMWM4NywgMHgwMDEwMWM5MywgMHgwMDEwMWM5YiwgMHgwMDEwMWNhNSwKKwkweDAwMTAxY2FmLCAweDAwMTAxY2JiLCAweDAwMTAxY2M1LCAweDAwMTAxY2QxLAorCTB4MDAxMDFjZGQsIDB4MDAwMjAwZmQsIDB4MDAxMDFjZWIsIDB4MDAxMDFjZjMsCisJMHgwMDEwMWNmYiwgMHgwMDEwMWQwNSwgMHgwMDEwMWQwZCwgMHgwMDEwMWQxNywKKwkweDAwMTAxZDIxLCAweDAwMTAxZDJkLCAweDAwMTAxZDM1LCAweDAwMTAxZDNmLAorCTB4MDAxMDFkNDksIDB4MDAxMDFkNTUsIDB4MDAxMDFkNWYsIDB4MDAxMDFkNmIsCisJMHgwMDEwMWQ3NywgMHgwMDEwMWQ4NSwgMHgwMDEwMWQ4ZCwgMHgwMDEwMWQ5NywKKwkweDAwMTAxZGExLCAweDAwMTAxZGFkLCAweDAwMTAxZGI3LCAweDAwMTAxZGMzLAorCTB4MDAxMDFkY2YsIDB4MDAxMDFkZGQsIDB4MDAxMDFkZTcsIDB4MDAxMDFkZjMsCisJMHgwMDEwMWRmZiwgMHgwMDEwMWUwZCwgMHgwMDEwMWUxOSwgMHgwMDEwMWUyNywKKwkweDAwMTAxZTM1LCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMTU1LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxMTU1LCAweDAyMDFmODAwLAorCTB4MDAxMDE0MTgsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmODAwLAorCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWYwMDAsCisJMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMTU1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmODAwLAorCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMjg5LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWYwMDAsCisJMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMDIwNzI5LCAweDAyMDFmODAwLAorCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzI5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxMTU1LCAweDAyMDFmODAwLAorCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCisJMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzI5LCAweDAyMDFmODAwLAorCTB4MDAxMDEyODksIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMjg5LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCisJMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAorCTB4MDAwMjAwMTUsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAorCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMTAxMTU1LCAweDAyMDFmODAwLAorCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWY4MDAsCisJMHgwMDEwMTE1NSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMDE1LCAweDAyMDFmODAwLAorCTB4MDAxMDEyODksIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAorCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWY4MDAsCisJMHgwMDEwMTE1NSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAorCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWY4MDAsCisJMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjA3MjksIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzI5LCAweDAyMDFmODAwLCAweDAwMDIwMDE1LCAweDAyMDFmODAwLAorCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzI5LCAweDAyMDFmODAwLCAweDAwMDIwMDE1LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMTU1LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCisJMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMTU1LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMTU1LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCisJMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMjg5LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmMDAwLAorCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmODAwLAorCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMDIwNzI5LCAweDAyMDFmODAwLAorCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWYwMDAsCisJMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMTU1LCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAorCTB4MDAwMjA3MjksIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMTAxLCAweDRjNWMwMDAwLCAweDRjNjAwMDAwLCAweDQxNzhiODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4ZWMsIDB4MDQwMjAwZmQsIDB4NTlhOGMwMjYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAwMDAwMywgMHg4YzYwYzUwNiwKKwkweDA0MDAwMDBlLCAweDhjNjBjNTAwLCAweDA0MDIwMDA0LCAweDhjNjBjNTBlLAorCTB4MDQwMDA4ZjYsIDB4MDQwMWYwZjIsIDB4MDQwMWZhYjQsIDB4MDQwMjAwZjAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAyMDAwNCwgMHg0YTAzNTAxYywKKwkweDAwMDBmZmZmLCAweDA0MDFmMGVhLCAweDhjNjBjNTA0LCAweDA0MDAwMDA0LAorCTB4NGEwMzUwMWMsIDB4MDAwMGZmZmYsIDB4MDQwMWYwZTUsIDB4NTlhOGMwMTAsCisJMHg4MjYwYzUwMCwgMHgwMDAwMDBmZiwgMHg1OWE4MTAxMywgMHg4YzA4MTUwMCwKKwkweDA0MDAwMDVkLCAweDhjMDgxNTAyLCAweDA0MDIwMDViLCAweDU5YThiODFjLAorCTB4ODI1YzBkODAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwMDMsIDB4NDIwMGI4MDAsCisJMHgwMDAwMDAwMSwgMHg4MDVjMTEwNCwgMHg4MjA4NjQwMCwgMHgwMDEwYmUyMSwKKwkweDUwMzAwODAwLCAweDgyNWMwNTAwLCAweDAwMDAwMDAzLCAweDBjMDFmMDAxLAorCTB4MDAxMDFlODEsIDB4MDAxMDFlN2MsIDB4MDAxMDFlODAsIDB4MDAxMDFlN2UsCisJMHg4MDA0MDkxMCwgMHgwNDAxZjAwNCwgMHg4MDA0MDkzMCwgMHgwNDAxZjAwMiwKKwkweDgwMDQwOTIwLCAweDgyMDQwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwZDgwLAorCTB4MDAwMDAwZmYsIDB4MDQwMDAwMGYsIDB4NGMwMDAwMDAsIDB4ODIwMDA0MDAsCisJMHgwMDEwMjEwZSwgMHg1MDAwMDgwMCwgMHg4MDA0MDkxMCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDgwLCAweDVjMDAwMDAwLCAweDA0MDAwMDMwLCAweDgwNjAwZDgwLAorCTB4MDQwMDAwMmUsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMmMsIDB4MDQwMWYwMGIsCisJMHg1OWE4MTAwNSwgMHg4MjA4MTUwMCwgMHgwMDAwMDAwMywgMHgwNDAyMDAyYiwKKwkweDU5YTgxMDEzLCAweDg0MDgxNTQyLCAweDQ4MGI1MDEzLCAweDRhMDM1MDFjLAorCTB4MDAwMGZmZmYsIDB4MDQwMWYwMjgsIDB4NGMwMDAwMDAsIDB4NTlhODAwMDUsCisJMHg4YzAwMDUxNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHgwMjAyMDgwMCwKKwkweDAwMTA0YzZkLCAweDVjMDAwMDAwLCAweDA0MDIwMDFjLCAweDQxN2E4ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVjOWEsIDB4MDQwMjAwMTYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDVlNSwgMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNGM2MiwKKwkweDA0MDFmOGIxLCAweDA0MDAwMDBmLCAweDA0MDFmMDBjLCAweDU5OWMwMDE5LAorCTB4OGMwMDA1MGUsIDB4MDQwMjAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDQ1YTYsCisJMHgwNDAyMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNGM2MiwgMHgwNDAxZjllMSwKKwkweDA0MDFmOGJlLCAweDA0MDAwMDAzLCAweDgwNWNiODAwLCAweDA0MDFmN2IyLAorCTB4NDg1ZjUwMWMsIDB4MDQwMWYwODYsIDB4NGEwMzUwMWMsIDB4MDAwMGZmZmYsCisJMHgwNDAxZjA4MywgMHg0MjAwMzAwMCwgMHgwMDAwMDA3ZSwgMHg1OWE4MDAxYywKKwkweDgyMDAxNTgwLCAweDAwMDBmZmZmLCAweDA0MDIwMDA1LCAweDgwMDAwZDgwLAorCTB4NDAxOGIwMDAsIDB4NDgwM2M4NTYsIDB4MDQwMWYwMDksIDB4ODAxOGI0ODAsCisJMHgwNDAwMTAwNCwgMHg0MDAwMDgwMCwgMHg0ODAzYzg1NiwgMHgwNDAxZjAwNCwKKwkweDRhMDM1MDFjLCAweDAwMDBmZmZmLCAweDA0MDFmMDcxLCAweDRjMDQwMDAwLAorCTB4NGM1ODAwMDAsIDB4ODIwNDA0MDAsIDB4MDAxMDIxMGUsIDB4NTAwMDAwMDAsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MDYwNDU4MCwgMHgwNDAwMDA1YywKKwkweDAyMDFmODAwLCAweDAwMTA1YzliLCAweDA0MDIwMDYxLCAweDU5YTgwMDA1LAorCTB4OGMwMDA1MTQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDIwMjA4MDAsCisJMHgwMDEwNGM2ZCwgMHg1YzAwYjAwMCwgMHg1YzAwMDgwMCwgMHgwNDAyMDdkNywKKwkweDRjMDQwMDAwLCAweDRjNTgwMDAwLCAweDg0NWNiZDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjAyNDUsIDB4MDQwMDAwMDgsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGUsCisJMHgwNDAyMDA0NywgMHgwMjAxZjgwMCwgMHgwMDEwNDVhYiwgMHgwNDAyMDA0YywKKwkweDA0MDFmMDAyLCAweDg0NWNiZDQwLCAweDAyMDFmODAwLCAweDAwMTA0YzYyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsIDB4MDQwMjAwMDcsIDB4NTlhODAwMDUsCisJMHg4YzAwMDUwMiwgMHgwNDAwMDAzMywgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwKKwkweDA0MDIwMDMwLCAweDU5YTgxMDEzLCAweDhjMDgxNTAyLCAweDA0MDAwMDI1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDRhMDksIDB4MDQwMDAwMzEsIDB4OGM1Y2JkMDAsCisJMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDVmZiwgMHgwNDAxZjAyYywKKwkweDA0MDFmOWNkLCAweDA0MDAwMDJhLCAweDQyMDI2MDAwLCAweDAwMTBiZGU5LAorCTB4NDkzNjYwMDksIDB4NDk3YTYwMDgsIDB4NDE3YTc4MDAsIDB4MDQwMWY5MjUsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDAyMDFmODAwLCAweDAwMTAzYjI1LCAweDA0MDAwMDFkLCAweDQxNzgyODAwLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDgsIDB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsCisJMHg1OTM2OGMwMywgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNDQ2LCAweDVjMDI4ODAwLCAweDVjMDI4MDAwLCAweDA0MDFmMDEwLAorCTB4NDkzN2M4NTcsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGUsIDB4MDQwMjAwMGMsCisJMHgwNDAxZjk2YywgMHgwNDAxZjg0OSwgMHgwNDAwMDAxMSwgMHgwNDAxZjAwOCwKKwkweDU5YTgwMDEzLCAweDhjMDAwNTAwLCAweDA0MDAwMDAzLCAweDA0MDFmOWE2LAorCTB4MDQwMDAwMDMsIDB4MDQwMWY4MjgsIDB4MDQwMDAwMDksIDB4NWMwMGIwMDAsCisJMHg1YzAwMDgwMCwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDc5OCwKKwkweDRhMDM1MDFjLCAweDAwMDBmZmZmLCAweDA0MDFmMDA1LCAweDQ5MzdjODU3LAorCTB4NWMwMGIwMDAsIDB4NWMwMDA4MDAsIDB4NDgwNzUwMWMsIDB4NWMwMGMwMDAsCisJMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxYywKKwkweDAwMDAwMDAxLCAweDQyMDI4ODAwLCAweDAwMDAwN2ZlLCAweDQyMDAzMDAwLAorCTB4MDBmZmZmZmUsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1YTYsIDB4MDQwMjAwMGMsCisJMHgwNDAxZjk0OCwgMHgwNDAxZjgyNSwgMHgwNDAwMDAwOSwgMHg1OWE4MDAyNiwKKwkweDg0MDAwNTRlLCAweDQ4MDM1MDI2LCAweDAyMDFmODAwLCAweDAwMTA5MzBmLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjdmZSwgMHg0OTM3Yzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwKKwkweDA0MDAwMDE1LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAorCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NjcsIDB4NTlhODAwMWIsCisJMHg4MDAwMDAwMCwgMHg0ODAzNTAxYiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAwNCwKKwkweDU5OWMwMDE5LCAweDhjMDAwNTBlLCAweDA0MDAwMDAzLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA3OTQyLCAweDA0MDAwMDFjLCAweDQ5MzY2MDA5LCAweDU5MzQwNDAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMDAwMDUsIDB4NGQzYzAwMDAsCisJMHg0MTdhNzgwMCwgMHgwNDAxZjhiNywgMHg1YzAyNzgwMCwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAxLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0NTY3LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCisJMHg1OWE4MDAxYiwgMHg4MDAwMDAwMCwgMHg0ODAzNTAxYiwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NDIwMjg4MDAsCisJMHgwMDAwMDdmYywgMHg0MjAwMzAwMCwgMHgwMGZmZmZmYywgMHgwMjAxZjgwMCwKKwkweDAwMTA0NWE2LCAweDA0MDIwMDA1LCAweDA0MDFmODA1LCAweDA0MDAwMDAzLAorCTB4NGEwMzUwMjcsIDB4MDAwMGZmZmYsIDB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwgMHgwNDAwMDAxNCwgMHg0OTM2NjAwOSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NjcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHg1OWE4MDAyOCwgMHg4MDAwMDAwMCwgMHg0ODAzNTAyOCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDgwYmM4NTcsCisJMHg0OTJmYzg1NywgMHg0YzVjMDAwMCwgMHg0MDA4YjgwMCwgMHg0MjAyODgwMCwKKwkweDAwMDAwN2ZkLCAweDQyMDAzMDAwLCAweDAwZmZmZmZkLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1YTYsIDB4MDQwMjAwMWEsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCisJMHgwNDAwMDAxNywgMHg0OTM2NjAwOSwgMHg1OTM0MDAwYSwgMHg4NDAwMDU0NCwKKwkweDQ4MDI2ODBhLCAweDgxMmU1OWMwLCAweDA0MDAwMDA1LCAweDU5MmMwNDA0LAorCTB4OGMwMDA1MWUsIDB4MDQwMDAwMDIsIDB4NDhlZTYwMjEsIDB4NDkyZTYwMDgsCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0ODVlNjAxYywgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDIyLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjdmZCwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywKKwkweDQ5NDNjODU3LCAweDQ5M2ZjODU3LCAweDRkMzQwMDAwLCAweDRkNDQwMDAwLAorCTB4NGM1ODAwMDAsIDB4NGQyYzAwMDAsIDB4NGM1YzAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjlmMSwKKwkweDAyMDFmODAwLCAweDAwMTA2YWFjLCAweDAyMDFmODAwLCAweDAwMTA2NzM3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDg0OGEsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsCisJMHgwMDEwNmM0YiwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg0MTdhODgwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDFmLCAweDhkM2U3ZDE0LAorCTB4MDQwMDAwMDUsIDB4NTkzNDAyMTIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsCisJMHgwNDAwMDAxOSwgMHg4ZDNlN2QwNiwgMHgwNDAwMDAwNCwgMHg1OTM0MDIwMCwKKwkweDhjMDAwNTBlLCAweDA0MDIwMDE0LCAweDhkM2U3ZDE4LCAweDA0MDAwMDBmLAorCTB4NTkzNGI4MGYsIDB4ODA1Y2I5YzAsIDB4MDQwMDAwMDksIDB4NDk0MjVhMDYsCisJMHg1OTJjYjgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJjZSwgMHg4MDVjYjljMCwKKwkweDA0MDIwN2ZiLCAweDQ5N2E2ODBmLCAweDQ5N2E2ODEwLCAweDRhMDI2YzAwLAorCTB4MDAwMDA3MDcsIDB4MDQwMWYwMDQsIDB4NDkzN2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDJiNCwgMHg4MTQ2ODgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdkZCwKKwkweDhkM2U3ZDAyLCAweDA0MDAwMDExLCAweDQ5N2I1MDFkLCAweDQyMDI4ODAwLAorCTB4MDAwMDA3ZjAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI0NSwgMHgwNDAyMDAwNiwgMHg0OTM3Yzg1NywgMHg0YTAyNmMwMCwKKwkweDAwMDAwNzA3LCAweDAyMDFmODAwLCAweDAwMTA0MmI0LCAweDgxNDY4ODAwLAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZjYsIDB4NWMwMGI4MDAsIDB4NWMwMjU4MDAsCisJMHg1YzAwYjAwMCwgMHg1YzAyODgwMCwgMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwKKwkweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ5MzNjODU3LAorCTB4NDkzZmM4NTcsIDB4NGQzNDAwMDAsIDB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsCisJMHg0ZDJjMDAwMCwgMHg0YzVjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwKKwkweDRkZjAwMDAwLCAweDU5MzI2ODA5LCAweDgxMzY2OWMwLCAweDA0MDAwMDIwLAorCTB4NTkzNjhjMDMsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4MDIwMWY4MDAsCisJMHgwMDEwNmE1MCwgMHgwMjAxZjgwMCwgMHgwMDEwNmFiNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2N2ZkLCAweDAyMDFmODAwLCAweDAwMTBhMmZmLCAweDQ5MzdjODU3LAorCTB4OGQzZTdkMTgsIDB4MDQwMDAwMTAsIDB4NTkzNGI4MGYsIDB4ODA1Y2I5YzAsCisJMHgwNDAwMDAwYSwgMHg0MDVlNTgwMCwgMHg0OTQyNWEwNiwgMHg1OTJjYjgwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwMmNlLCAweDgwNWNiOWMwLCAweDA0MDIwN2ZhLAorCTB4NDk3YTY4MGYsIDB4NDk3YTY4MTAsIDB4NGEwMjZjMDAsIDB4MDAwMDA3MDcsCisJMHgwNDAxZjAwMywgMHgwMjAxZjgwMCwgMHgwMDEwNDJiNCwgMHg1YzAzZTAwMCwKKwkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDVjMDBiODAwLCAweDVjMDI1ODAwLAorCTB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsIDB4NWMwMjY4MDAsIDB4MWMwMWYwMDAsCisJMHg0OTMzYzg1NywgMHg1OWE4MDAyNiwgMHg4YzAwMDUwOCwgMHgwNDAyMDAxMiwKKwkweDU5MzA1MDA5LCAweDQ4MmJjODU3LCAweDgzNmMwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMjAwMGQsIDB4MDQwMWY4MTMsIDB4MDQwMjAwMGIsIDB4NTgyODA0MDMsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDdmYywgMHgwNDAwMDAwOCwgMHg1OWE4MDAxYiwKKwkweDgwMDAwMDQwLCAweDQ4MDNjODU3LCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAorCTB4NDgwMzUwMWIsIDB4MWMwMWYwMDAsIDB4NTlhODAwMjgsIDB4ODAwMDAwNDAsCisJMHg0ODAzYzg1NywgMHgwNDAwMTdmYywgMHg0ODAzNTAyOCwgMHgxYzAxZjAwMCwKKwkweDU5MzAwMDA4LCAweDgwMDAwMWMwLCAweDA0MDIwMDA5LCAweDU5MzAwNDAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMDQsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDQ5MzdjODU3LCAweDU5MzQwMjAwLCAweDg0MDAwNTAyLCAweDQ4MDI2YTAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDkzZmM4NTcsIDB4NDk0N2M4NTcsCisJMHg0ZDNjMDAwMCwgMHg0ZDQwMDAwMCwgMHg0ZDM0MDAwMCwgMHg0ZDQ0MDAwMCwKKwkweDRjNTgwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDRkZjAwMDAwLAorCTB4ODEzZTc5YzAsIDB4MDQwMjAwMDQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwNCwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg0MTdhODgwMCwKKwkweDQxNDQwMDAwLCAweDgxYWMwNDAwLCAweDUwMDAwMDAwLCAweDgwMDI2ZDQwLAorCTB4MDQwMDAwMTksIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDhmNiwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA2YTUwLCAweDAyMDFmODAwLCAweDAwMTA2YWI0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDY3ZmQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsCisJMHgwNDAyMDAwNSwgMHg0OTM3Yzg1NywgMHg0YTAyNmMwMCwgMHgwMDAwMDQwNCwKKwkweDA0MDFmMDAzLCAweDAyMDFmODAwLCAweDAwMTA0YTE0LCAweDAyMDFmODAwLAorCTB4MDAxMGEyZmYsIDB4ODE0Njg4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZTEsCisJMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHg1YzAwYjAwMCwKKwkweDVjMDI4ODAwLCAweDVjMDI2ODAwLCAweDVjMDI4MDAwLCAweDVjMDI3ODAwLAorCTB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NDk0N2M4NTcsIDB4NGM1YzAwMDAsCisJMHg0YzYwMDAwMCwgMHg0YzY0MDAwMCwgMHg1OWE4MDAxMywgMHg4YzAwMDUwMCwKKwkweDA0MDAwMDFmLCAweDU5OWMwMDE3LCAweDhjMDAwNTBhLCAweDA0MDIwMDFjLAorCTB4NTkzNGJhMDIsIDB4ODI1Y2JkMDAsIDB4MDAwMDAwZmYsIDB4NDg1ZmM4NTcsCisJMHg0MTc4YzAwMCwgMHg0MTc4YzgwMCwgMHg4MjYwMDQwMCwgMHgwMDEwYmUyMSwKKwkweDUwMDAyMDAwLCAweDgwNjBjMWMwLCAweDA0MDAwMDA4LCAweDgyMTAwNTAwLAorCTB4MDAwMDAwZmYsIDB4ODIwMDJkODAsIDB4MDAwMDAwZmYsIDB4MDQwMDAwMGMsCisJMHg4MDVjMDU4MCwgMHgwNDAwMDAwZCwgMHg4MDEwMjExMCwgMHg4MDY0YzgwMCwKKwkweDgyNjQwNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwN2Y1LCAweDgwNjBjMDAwLAorCTB4ODI2MDA1ODAsIDB4MDAwMDAwMjAsIDB4MDQwMjA3ZWIsIDB4NDgxM2M4NTcsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwYzgwMCwgMHg1YzAwYzAwMCwKKwkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDI2LCAweDQ4MDNjODU3LAorCTB4OGMwMDA1MTIsIDB4MWMwMWYwMDAsIDB4MDAwMDdlZWYsIDB4MDAwMDdkZTgsCisJMHgwMDAwN2NlNCwgMHgwMDAwODBlMiwgMHgwMDAwN2JlMSwgMHgwMDAwODBlMCwKKwkweDAwMDA4MGRjLCAweDAwMDA4MGRhLCAweDAwMDA3YWQ5LCAweDAwMDA4MGQ2LAorCTB4MDAwMDgwZDUsIDB4MDAwMDgwZDQsIDB4MDAwMDgwZDMsIDB4MDAwMDgwZDIsCisJMHgwMDAwODBkMSwgMHgwMDAwNzljZSwgMHgwMDAwNzhjZCwgMHgwMDAwODBjYywKKwkweDAwMDA4MGNiLCAweDAwMDA4MGNhLCAweDAwMDA4MGM5LCAweDAwMDA4MGM3LAorCTB4MDAwMDgwYzYsIDB4MDAwMDc3YzUsIDB4MDAwMDc2YzMsIDB4MDAwMDgwYmMsCisJMHgwMDAwODBiYSwgMHgwMDAwNzViOSwgMHgwMDAwODBiNiwgMHgwMDAwNzRiNSwKKwkweDAwMDA3M2I0LCAweDAwMDA3MmIzLCAweDAwMDA4MGIyLCAweDAwMDA4MGIxLAorCTB4MDAwMDgwYWUsIDB4MDAwMDcxYWQsIDB4MDAwMDgwYWMsIDB4MDAwMDcwYWIsCisJMHgwMDAwNmZhYSwgMHgwMDAwNmVhOSwgMHgwMDAwODBhNywgMHgwMDAwNmRhNiwKKwkweDAwMDA2Y2E1LCAweDAwMDA2YmEzLCAweDAwMDA2YTlmLCAweDAwMDA2OTllLAorCTB4MDAwMDY4OWQsIDB4MDAwMDgwOWIsIDB4MDAwMDgwOTgsIDB4MDAwMDY3OTcsCisJMHgwMDAwNjY5MCwgMHgwMDAwNjU4ZiwgMHgwMDAwNjQ4OCwgMHgwMDAwNjM4NCwKKwkweDAwMDA2MjgyLCAweDAwMDA4MDgxLCAweDAwMDA4MDgwLCAweDAwMDA2MTdjLAorCTB4MDAwMDYwN2EsIDB4MDAwMDgwNzksIDB4MDAwMDVmNzYsIDB4MDAwMDgwNzUsCisJMHgwMDAwODA3NCwgMHgwMDAwODA3MywgMHgwMDAwODA3MiwgMHgwMDAwODA3MSwKKwkweDAwMDA4MDZlLCAweDAwMDA1ZTZkLCAweDAwMDA4MDZjLCAweDAwMDA1ZDZiLAorCTB4MDAwMDVjNmEsIDB4MDAwMDViNjksIDB4MDAwMDgwNjcsIDB4MDAwMDVhNjYsCisJMHgwMDAwNTk2NSwgMHgwMDAwNTg2MywgMHgwMDAwNTc1YywgMHgwMDAwNTY1YSwKKwkweDAwMDA1NTU5LCAweDAwMDA4MDU2LCAweDAwMDA4MDU1LCAweDAwMDA1NDU0LAorCTB4MDAwMDUzNTMsIDB4MDAwMDUyNTIsIDB4MDAwMDUxNTEsIDB4MDAwMDUwNGUsCisJMHgwMDAwNGY0ZCwgMHgwMDAwODA0YywgMHgwMDAwODA0YiwgMHgwMDAwNGU0YSwKKwkweDAwMDA0ZDQ5LCAweDAwMDA4MDQ3LCAweDAwMDA0YzQ2LCAweDAwMDA4MDQ1LAorCTB4MDAwMDgwNDMsIDB4MDAwMDgwM2MsIDB4MDAwMDgwM2EsIDB4MDAwMDgwMzksCisJMHgwMDAwODAzNiwgMHgwMDAwNGIzNSwgMHgwMDAwODAzNCwgMHgwMDAwNGEzMywKKwkweDAwMDA0OTMyLCAweDAwMDA0ODMxLCAweDAwMDA4MDJlLCAweDAwMDA0NzJkLAorCTB4MDAwMDQ2MmMsIDB4MDAwMDQ1MmIsIDB4MDAwMDQ0MmEsIDB4MDAwMDQzMjksCisJMHgwMDAwNDIyNywgMHgwMDAwODAyNiwgMHgwMDAwODAyNSwgMHgwMDAwNDEyMywKKwkweDAwMDA0MDFmLCAweDAwMDAzZjFlLCAweDAwMDAzZTFkLCAweDAwMDAzZDFiLAorCTB4MDAwMDNjMTgsIDB4MDAwMDgwMTcsIDB4MDAwMDgwMTAsIDB4MDAwMDNiMGYsCisJMHgwMDAwM2EwOCwgMHgwMDAwODAwNCwgMHgwMDAwMzkwMiwgMHgwMDAwODAwMSwKKwkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDAzODAwLCAweDAwMDAzNzAwLAorCTB4MDAwMDM2MDAsIDB4MDAwMDgwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMzQwMCwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDMzMDAsIDB4MDAwMDMyMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDAzMTAwLCAweDAwMDAzMDAwLCAweDAwMDA4MDAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDJmMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDJlMDAsCisJMHgwMDAwMmQwMCwgMHgwMDAwMmMwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDAyYjAwLCAweDAwMDA4MDAwLCAweDAwMDAyYTAwLAorCTB4MDAwMDI5MDAsIDB4MDAwMDI4MDAsIDB4MDAwMDgwMDAsIDB4MDAwMDI3MDAsCisJMHgwMDAwMjYwMCwgMHgwMDAwMjUwMCwgMHgwMDAwMjQwMCwgMHgwMDAwMjMwMCwKKwkweDAwMDAyMjAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDAyMTAwLAorCTB4MDAwMDIwMDAsIDB4MDAwMDFmMDAsIDB4MDAwMDFlMDAsIDB4MDAwMDFkMDAsCisJMHgwMDAwMWMwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMWIwMCwKKwkweDAwMDAxYTAwLCAweDAwMDA4MDAwLCAweDAwMDAxOTAwLCAweDAwMDA4MDAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwMTgwMCwgMHgwMDAwODAwMCwgMHgwMDAwMTcwMCwKKwkweDAwMDAxNjAwLCAweDAwMDAxNTAwLCAweDAwMDA4MDAwLCAweDAwMDAxNDAwLAorCTB4MDAwMDEzMDAsIDB4MDAwMDEyMDAsIDB4MDAwMDExMDAsIDB4MDAwMDEwMDAsCisJMHgwMDAwMGYwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMGUwMCwKKwkweDAwMDAwZDAwLCAweDAwMDAwYzAwLCAweDAwMDAwYjAwLCAweDAwMDAwYTAwLAorCTB4MDAwMDA5MDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDA4MDAsCisJMHgwMDAwMDcwMCwgMHgwMDAwODAwMCwgMHgwMDAwMDYwMCwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDAwNTAwLCAweDAwMDAwNDAwLAorCTB4MDAwMDAzMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMDEwMCwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDQ5MmY0MDE2LCAweDFjMDFmMDAwLAorCTB4ODNhMGFjMDAsIDB4MDAwMDAwMDYsIDB4ODNhMDA1ODAsIDB4MDAxMGI0YTQsCisJMHgwNDAwMDAwYywgMHg0OTJmYzg1NywgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDgzMmNhNDAwLCAweDAwMDAwMDA2LCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMGQsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4MDQwMWYwMGYsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwgMHg4M2UwYTQwMCwgMHgwMDAwMDAyMCwKKwkweDUwNTAwMDAwLCAweDgwNTBhMDAwLCAweDUwNTAwODAwLCAweDkwMDQwOWMwLAorCTB4ODAwNDA1NDAsIDB4NDQwMGE4MDAsIDB4ODA1MGEwMDAsIDB4ODA1NGE4MDAsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmNywgMHgxYzAxZjAwMCwgMHg1OWEwMDIwNiwKKwkweDQ4MDNjODU3LCAweDgyMDAwYzgwLCAweDAwMDAwMDdmLCAweDA0MDIxMGM5LAorCTB4NTlhODA4MjEsIDB4MGMwMWYwMDEsIDB4MDAxMDIyYzAsIDB4MDAxMDIzMDAsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjM0YiwgMHgwMDEwMjM2ZCwgMHgwMDEwMjMwMCwKKwkweDAwMTAyMmMwLCAweDAwMTAyMzhmLCAweDAwMTAyM2EwLCAweDAwMTAyMzAwLAorCTB4MDAxMDIzMDAsIDB4MDAxMDIzYWQsIDB4MDAxMDIzYzUsIDB4MDAxMDIzZGQsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjNlNywgMHgwMDEwMjNmNCwgMHgwMDEwMjMwMCwKKwkweDAwMTAyNDFkLCAweDAwMTAyMzAwLCAweDAwMTAyNDdhLCAweDAwMTAyMzAwLAorCTB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwKKwkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyNDkxLCAweDAwMTAyMzAwLAorCTB4MDAxMDI0ZTMsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjRlOCwgMHgwMDEwMjU2MCwgMHgwMDEwMjMwMCwKKwkweDAwMTAyNTY3LCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLAorCTB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDI1NjksIDB4MDAxMDI1ZWEsCisJMHgwMDEwMjcyNywgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwKKwkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyNzM2LCAweDAwMTAyMzAwLAorCTB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjc1MywgMHgwMDEwMjdhNiwKKwkweDAwMTAyODAyLCAweDAwMTAyODE2LCAweDAwMTAyODM1LCAweDAwMTAyYTcwLAorCTB4MDAxMDJkZmYsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwKKwkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLAorCTB4MDAxMDIzMDAsIDB4MDAxMDJmYjQsIDB4MDAxMDMwMjgsIDB4MDAxMDIzMDAsCisJMHgwMDEwMjMwMCwgMHgwMDEwMzA5NCwgMHgwMDEwMjMwMCwgMHgwMDEwMzEyNiwKKwkweDAwMTAzMWQ4LCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAzMjBmLAorCTB4MDAxMDMyNmIsIDB4MDAxMDIzMDAsIDB4MDAxMDMyYmQsIDB4MDAxMDM0MTksCisJMHgwMDEwMjMwMCwgMHgwMDEwMzQyZCwgMHgwMDEwMzRiOCwgMHgwMDEwMjMwMCwKKwkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAzNTIyLAorCTB4MDAxMDM1MjYsIDB4MDAxMDM1NDUsIDB4MDAxMDIzMDAsIDB4MDAxMDM1ZTcsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMzYxNSwgMHgwMDEwMjMwMCwKKwkweDAwMTAzNjQzLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAzNmFhLAorCTB4MDAxMDM3YjcsIDB4MDAxMDM4MTQsIDB4MDAxMDIzMDAsIDB4MDAxMDM4N2EsCisJMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMzhkMywgMHgwMDEwMzkzNiwKKwkweDAwMTAyMzAwLCAweDQ4ZWZjODU3LCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLAorCTB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDQwMDAwNDUsCisJMHg0OGVmYzg1NywgMHg0YTAzNDIwNiwgMHgwMDAwNDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAzYTE1LCAweDgzYTAwNTgwLCAweDAwMTBiNGE0LCAweDA0MDAwMDBkLAorCTB4NThlZTU4MGEsIDB4NGQyYzAwMDAsIDB4MDQwMWY4NTYsIDB4NDFhMjU4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdmNCwgMHg0MGVlNTgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwN2Y0LCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLAorCTB4MDQwMjYwMDcsIDB4NTlhMDAwMWQsIDB4ODQwMDA1NDIsIDB4NDgwMzQwMWQsCisJMHg0YTAxZDgwOSwgMHgwMDEwMjJkNCwgMHgxYzAxZjAwMCwgMHg1OWEwMDIwNiwKKwkweDgyMDAwZDgwLCAweDAwMDA0MDAwLCAweDA0MDAwMDA2LCAweDkwMDAwMWMwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMTEsIDB4NDgwM2MwMTEsIDB4MDQwMWYwMDUsCisJMHg5MDAwMDFjMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAxMCwgMHg0ODAzYzAxMSwKKwkweDA0MDFmODQ1LCAweDU5ZTAwMDE3LCAweDhjMDAwNTA4LCAweDA0MDIwMDBjLAorCTB4NDIwM2UwMDAsIDB4MzAwMDAwMDEsIDB4NDIwM2UwMDAsIDB4NDAwMDAwMDAsCisJMHg0MGVlNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmNCwgMHg1OWEwMDAxZCwKKwkweDg0MDAwNTA0LCAweDQ4MDM0MDFkLCAweDFjMDFmMDAwLCAweDRhMDNjMDE3LAorCTB4MDAwMDAwMDAsIDB4NTlhMDAyMDYsIDB4ODIwMDBkODAsIDB4MDAwMDQwMDAsCisJMHgwNDAwMDdmMCwgMHg0YTAzYzAxNywgMHgwMDAwMDAwMSwgMHgwNDAxZjdlZCwKKwkweDQ4MDNjODU2LCAweDRhMDM0MjA2LCAweDAwMDA0MDAxLCAweDA0MDFmN2MwLAorCTB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsIDB4MDAwMDQwMDIsIDB4MDQwMWY3YmMsCisJMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwgMHgwMDAwNDAwMywgMHgwNDAxZjdiOCwKKwkweDQ4MDNjODU2LCAweDRhMDM0MjA2LCAweDAwMDA0MDA1LCAweDA0MDFmN2I0LAorCTB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsIDB4MDAwMDQwMDYsIDB4MDQwMWY3YjAsCisJMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwgMHgwMDAwNDAwYiwgMHgwNDAxZjdhYywKKwkweDQ4MDNjODU2LCAweDRhMDM0MjA2LCAweDAwMDA0MDBjLCAweDA0MDFmN2E4LAorCTB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsIDB4MDAwMDQwMGMsIDB4MDQwMWY3YTQsCisJMHg0OGVmYzg1NywgMHg1OGVjYTgwYSwgMHg4MDU0YTljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDgzYTBhNDAwLCAweDAwMDAwMDA2LCAweDgyNTRhYzAwLAorCTB4MDAwMDAwMDYsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGQsIDB4MDIwMWYwMDAsCisJMHgwMDEwYWIxNywgMHg1OWEwMDIwNiwgMHg0ODAzYzg1NywgMHg1OWEwMDQwNiwKKwkweDQ4MDNjODU3LCAweDU5YTAwMjA3LCAweDQ4MDNjODU3LCAweDU5YTAwNDA3LAorCTB4NDgwM2M4NTcsIDB4NTlhMDAyMDgsIDB4NDgwM2M4NTcsIDB4NTlhMDA0MDgsCisJMHg0ODAzYzg1NywgMHg1OWEwMDIwOSwgMHg0ODAzYzg1NywgMHg4M2UwYWMwMCwKKwkweDAwMDAwMDIwLCAweDgzYTBhNDAwLCAweDAwMDAwMDA2LCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMTAsIDB4NTA1MDAwMDAsIDB4NDQwMGE4MDAsIDB4ODA1NGE4MDAsCisJMHg5MDAwMDFjMCwgMHg0NDAwYTgwMCwgMHg4MDU0YTgwMCwgMHg4MDUwYTAwMCwKKwkweDgwNThiMDQwLCAweDA0MDIwN2Y4LCAweDFjMDFmMDAwLCAweDU5YTAwNDA2LAorCTB4ODAwMDAwYzIsIDB4NTlhMDBhMDcsIDB4OTAwNDA5YzAsIDB4ODAwNDA1NDAsCisJMHg4NDAwMDU0MCwgMHg1OWEwMGMwNywgMHg4YzA0MGQwMCwgMHgwNDAwMDAxOCwKKwkweDU5YTgwODA1LCAweDhjMDQwZDBlLCAweDA0MDIwN2JhLCAweDQyMDAwODAwLAorCTB4MDAwMDAwNjQsIDB4ODAwNDA4NDAsIDB4MDQwMDAwMDcsIDB4NGEwMzAwMDAsCisJMHgwMDAwMDAwMSwgMHg0MDAwMDAwMCwgMHg1OTgwMTAwMCwgMHg4YzA4MTUwMCwKKwkweDA0MDAwN2Y5LCAweDA0MDAwMDA1LCAweDQ4MDMwMDA0LCAweDRhMDMwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDQwMWY3NWIsIDB4NGEwMzAwMDAsIDB4MDAwMDAwMDAsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwgMHgwNDAwMDdhMiwgMHg0ODAzODgwZSwKKwkweDA0MDFmNzU0LCAweDU5YTAwNDA2LCAweDgwMDAwMGMyLCAweDU5YTAwYzA3LAorCTB4OGMwNDBkMDAsIDB4MDQwMDAwMWEsIDB4NTlhODA4MDUsIDB4OGMwNDBkMGUsCisJMHgwNDAyMDc5YywgMHg0MjAwMDgwMCwgMHgwMDAwMDA2NCwgMHg4MDA0MDg0MCwKKwkweDA0MDAwMDA3LCAweDRhMDMwMDAwLCAweDAwMDAwMDAxLCAweDQwMDAwMDAwLAorCTB4NTk4MDEwMDAsIDB4OGMwODE1MDAsIDB4MDQwMDA3ZjksIDB4MDQwMDAwMDcsCisJMHg0ODAzMDAwNCwgMHg1OTgwMDgwNSwgMHg0ODA3NDQwNiwgMHg0YTAzMDAwMCwKKwkweDAwMDAwMDAwLCAweDA0MDFmNzNiLCAweDRhMDMwMDAwLCAweDAwMDAwMDAwLAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsIDB4MDQwMDA3ODIsIDB4NDgwMzg4MGUsCisJMHg1OWM0MDgwZiwgMHg0ODA3NDQwNiwgMHgwNDAxZjczMiwgMHg1OWEwMWMwNiwKKwkweDU5YTAwMjA3LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDU4MGMwODAzLAorCTB4ODAwMDA1ODAsIDB4NTAwYzEwMDAsIDB4ODAwODA0MDAsIDB4ODAwYzE4MDAsCisJMHg4MDA0MDg0MCwgMHgwNDAyMDdmYywgMHg0ODAzNDQwNiwgMHg5MDAwMDFjMCwKKwkweDQ4MDM0MjA3LCAweDgwMDAwMWMwLCAweDA0MDAwNzIyLCAweDA0MDFmNzY5LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsIDB4NGEwMzQyMDcsIDB4MDAwMDAwMDAsCisJMHg0YTAzNDQwNywgMHgwMDAwMDAxMCwgMHg1OWE4MDAwZCwgMHg0ODAzNDIwOCwKKwkweDkwMDAwMWMwLCAweDQ4MDM0NDA4LCAweDRhMDM0MjA5LCAweDAwMDAwMDAyLAorCTB4MDQwMWY3MTQsIDB4NTlhMDA0MDcsIDB4NTlhMDEyMDcsIDB4OTAwODExYzAsCisJMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwgMHg1OWEwMWEwOSwgMHg5MDBjMTljMCwKKwkweDgwMGMxZDQwLCAweDU5YTAwYTA4LCAweDU5YTAwNDA4LCAweDkwMDQwOWMwLAorCTB4ODAwNDBkNDAsIDB4NTlhMDAyMGEsIDB4ODIwMDI0ODAsIDB4MDAwMDAwMTAsCisJMHgwNDAwMTc1NCwgMHg1OWEwMjQwNiwgMHg5MDAwMDFjMCwgMHg4MDEwMDU0MCwKKwkweDU5YTgyODBkLCAweDgwMTQyNDgwLCAweDA0MDAxNzRlLCAweDAyMDFmMDAwLAorCTB4MDAxMDNhMjUsIDB4NTlhMDA0MDcsIDB4NTlhMDEyMDcsIDB4OTAwODExYzAsCisJMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwgMHg1OWEwMWEwOSwgMHg5MDBjMTljMCwKKwkweDgwMGMxZDQwLCAweDU5YTAwYTA4LCAweDU5YTAwNDA4LCAweDkwMDQwOWMwLAorCTB4ODAwNDBkNDAsIDB4NTlhMDAyMGEsIDB4ODIwMDI0ODAsIDB4MDAwMDAwMTAsCisJMHgwNDAwMTczYywgMHg1OWEwMjQwNiwgMHg5MDAwMDFjMCwgMHg4MDEwMDU0MCwKKwkweDU5YTgyODBkLCAweDgwMTQyNDgwLCAweDA0MDAxNzM2LCAweDAyMDFmMDAwLAorCTB4MDAxMDNhMjgsIDB4NTlhMDBhMGEsIDB4NTlhMDA0MDYsIDB4OTAwNDA5YzAsCisJMHg4MDA0MGQ0MCwgMHg1OWEwMTQwNywgMHg1OWEwMDIwNywgMHg5MDA4MTFjMCwKKwkweDgwMDgxNTQwLCAweDQ0MDgwODAwLCAweDA0MDFmNmRhLCAweDU5YTAwYTBhLAorCTB4NTlhMDA0MDYsIDB4OTAwNDA5YzAsIDB4ODAwNDBkNDAsIDB4NTAwNDAwMDAsCisJMHg4MjAwMGQwMCwgMHgwMDAwZmZmZiwgMHg0ODA3NDIwNywgMHg4MjAwMGQwMCwKKwkweGZmZmYwMDAwLCAweDkwMDQwOWMwLCAweDQ4MDc0NDA3LCAweDA0MDFmNmNkLAorCTB4NTlhMDA0MDYsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMjAsIDB4NTlhMDEyMDcsCisJMHg1OWEwMWMwNywgMHg1OWEwMjIwOCwgMHg0ODBiNTA1NCwgMHg0ODBmNTA1NSwKKwkweDQ4MTM1MDU2LCAweDU5YzQwODAxLCAweDgyMDQwZDAwLCAweDAwMDE4MDAwLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsCisJMHgwMDAwODAwMCwgMHgwNDAwMDAwOCwgMHg4MjA0MDU4MCwgMHgwMDAxMDAwMCwKKwkweDA0MDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQwMDgwMDAwLAorCTB4MDQwMWYwMDQsIDB4NDAwYzAwMDAsIDB4MDQwMWYwMDIsIDB4NDAxMDAwMDAsCisJMHg4MDAwMDExMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBlMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxOTQ0LCAweDA0MDFmMDA3LCAweDU5YTgxMDU0LCAweDU5YTgxODU1LAorCTB4NTlhODIwNTYsIDB4NDgwYjQyMDcsIDB4NDgwZjQ0MDcsIDB4NDgxMzQyMDgsCisJMHgwNDAxZjZhNCwgMHg0ZDJjMDAwMCwgMHg0ZDM0MDAwMCwgMHg0ZDMwMDAwMCwKKwkweDRkNDQwMDAwLCAweDU5YTI4YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LAorCTB4MDQwMDAwMDYsIDB4NWMwMjg4MDAsIDB4NWMwMjYwMDAsIDB4NWMwMjY4MDAsCisJMHg1YzAyNTgwMCwgMHgwNDAxZjZlNywgMHg1OWEwNDQwNywgMHg1OWEwMDIwNywKKwkweDkwMDAwMWMwLCAweDgwMjA0NTQwLCAweDA0MDFmODFlLCAweDA0MDAwMDA5LAorCTB4NGEwMzQyMDgsIDB4MDAwMDAwMDEsIDB4NGEwMzQ0MDYsIDB4MDAwMGZmZmYsCisJMHg0YTAzNDIwNywgMHgwMDAwZmZmZiwgMHg0OTdiNDQwNywgMHgwNDAxZjAwYiwKKwkweDA0MDFmODIyLCAweDA0MDAwMDBlLCAweDRhMDM0MjA4LCAweDAwMDAwMDAyLAorCTB4NTkzMDA0MDIsIDB4NDgwMzQ0MDYsIDB4NTkzMDAyMDIsIDB4NDgwMzQyMDcsCisJMHg1OTMwMDIwNiwgMHg0ODAzNDQwNywgMHg1YzAyODgwMCwgMHg1YzAyNjAwMCwKKwkweDVjMDI2ODAwLCAweDVjMDI1ODAwLCAweDA0MDFmNjdhLCAweDVjMDI4ODAwLAorCTB4NWMwMjYwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4MDQwMWY2YzEsCisJMHg0OTM3Yzg1NiwgMHg0ODIzYzg1NiwgMHg0ZDJjMDAwMCwgMHg1OTM0MDAwZiwKKwkweDgwMDI1ZDQwLCAweDA0MDAwMDA3LCAweDU5MmMwMDA1LCAweDgwMjAwNTgwLAorCTB4NTkyYzAwMDAsIDB4MDQwMjA3ZmIsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ODIzYzg1NywgMHg0ZDJjMDAwMCwKKwkweDRkMzAwMDAwLCAweDQyMDI2MDAwLCAweDAwMTBkMWMwLCAweDU5MzAwNDA2LAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDQsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAwNiwgMHgwNDAyMDAwNywgMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwKKwkweDA0MDAwMDA0LCAweDU5MmMwMDA1LCAweDgwMjAwNTgwLCAweDA0MDAwMDBhLAorCTB4ODMzMjY0MDAsIDB4MDAwMDAwMjQsIDB4NDE1ODAwMDAsIDB4ODEzMDA0ODAsCisJMHgwNDAwMTdlZiwgMHg4MDAwMDU4MCwgMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwKKwkweDFjMDFmMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4ODNhMDA1ODAsIDB4MDAxMGI0YTQsCisJMHgwNDAyMDY4NCwgMHg1OWE4MDAwNSwgMHg4YzAwMDUwZSwgMHgwNDAyMDAwMywKKwkweDRhMDMwMDAwLCAweDAwMDAwMDAwLCAweDRhMDM0MjA2LCAweDAwMDA0MDAwLAorCTB4NGEwM2MwMTEsIDB4NDAwMDAwMTAsIDB4MDQwMWZlYTcsIDB4NTllMDAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAwMDAwMywgMHg0YTAzYzAxNywgMHgwMDAwMDAwMCwKKwkweDQyMDNlMDAwLCAweDMwMDAwMDAxLCAweDQyMDNlMDAwLCAweDQwMDAwMDAwLAorCTB4MDQwMWYwMDAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDQsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjY3NywgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDIwMDEwLCAweDU5YTgwMDEwLCAweDQ5N2I0NDA2LCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMDAwMGYsIDB4ODIwMDBkMDAsIDB4MDBmZmZmMDAsCisJMHgwNDAyMDAwYywgMHg4MjAwMGMwMCwgMHgwMDEwMjEwZSwgMHg1MDA0MDgwMCwKKwkweDgwMDQwOTEwLCAweDgyMDQxNTgwLCAweDAwMDAwMDgwLCAweDA0MDIwMDA0LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsIDB4MDQwMWY2NjIsIDB4NDgwNzQ0MDYsCisJMHg4MjAwMGQwMCwgMHgwMDAwZmZmZiwgMHg0ODA3NDIwNywgMHg4MDAwMDEyMCwKKwkweDQ4MDM0NDA3LCAweDU5YTgwMDI2LCAweDgyMDAxNTAwLCAweDAwMDAwMTAwLAorCTB4NDgwYjQ0MDksIDB4OGMwMDA1MDIsIDB4MDQwMDAwMWYsIDB4OGMwMDA1MDYsCisJMHgwNDAwMDAwOSwgMHg4MjAwMGQwMCwgMHgwMDAwMDAwYSwgMHg4MjA0MGQ4MCwKKwkweDAwMDAwMDBhLCAweDA0MDIwMDA0LCAweDRhMDM0MjA5LCAweDAwMDAwMDAxLAorCTB4MDQwMWYwMjIsIDB4OGMwMDA1MGEsIDB4MDQwMDAwMDksIDB4ODIwMDBkMDAsCisJMHgwMDAwMDAyMiwgMHg4MjA0MGQ4MCwgMHgwMDAwMDAyMiwgMHgwNDAyMDAwNCwKKwkweDRhMDM0MjA5LCAweDAwMDAwMDAzLCAweDA0MDFmMDE4LCAweDhjMDAwNTA4LAorCTB4MDQwMDAwMDksIDB4ODIwMDBkMDAsIDB4MDAwMDAwMTIsIDB4ODIwNDBkODAsCisJMHgwMDAwMDAxMiwgMHgwNDAyMDAwNCwgMHg0YTAzNDIwOSwgMHgwMDAwMDAwMiwKKwkweDA0MDFmMDBlLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDIwMDA0LAorCTB4NGEwMzQyMDksIDB4MDAwMDAwMDQsIDB4MDQwMWY1ZTYsIDB4OGMwMDA1MDYsCisJMHgwNDAwMDAwNCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNSwgMHgwNDAxZjYyZCwKKwkweDRhMDM0MjA5LCAweDAwMDAwMDAwLCAweDA0MDFmNWRlLCAweDU5YTgwMDM3LAorCTB4NDgwMzQ0MDcsIDB4NTlhODAwMzgsIDB4NDgwMzQyMDksIDB4MDQwMWY1ZDksCisJMHg0MjAwNzgwMCwgMHgwMDEwYjhlYywgMHg1OWEwMDQwNiwgMHg0ODAzYzg1NywKKwkweDgyMDAwYzgwLCAweDAwMDAwMDA2LCAweDA0MDIxNjIyLCAweDBjMDFmMDAxLAorCTB4MDAxMDI0ZjYsIDB4MDAxMDI0ZjcsIDB4MDAxMDI1MDUsIDB4MDAxMDI1MTgsCisJMHgwMDEwMjUzOSwgMHgwMDEwMjRmNiwgMHgwNDAxZjYxYSwgMHg4MzZjMDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwNjEzLCAweDU5YTAwYTA3LCAweDU5YTAwNDA3LAorCTB4OTAwMDAxYzAsIDB4ODAwNDBkNDAsIDB4NDgwN2M4NTcsIDB4NTlhMDBhMDgsCisJMHg1OWEwMDQwOCwgMHg5MDAwMDFjMCwgMHg4MDA0MGQ0MCwgMHg0ODA3Yzg1NywKKwkweDA0MDFmMDU2LCAweDgzNmMwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwNjA1LAorCTB4NTlhMDA0MDcsIDB4NTlhMDEyMDcsIDB4OTAwMDAxYzAsIDB4ODAwODE1NDAsCisJMHg1OWEwMDQwOCwgMHg1OWEwMWEwOCwgMHg5MDAwMDFjMCwgMHg4MDBjMWQ0MCwKKwkweDQyMDAwMDAwLCAweDAwMTBjMWJmLCAweDQ4MGZjODU3LCAweDQ4MGJjODU3LAorCTB4NDIwMDA4MDAsIDB4MDAwMDEwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDNhMjgsCisJMHg1OWEwMGEwNywgMHg1OWEwMDQwNywgMHg5MDAwMDFjMCwgMHg4MDA0MWQ0MCwKKwkweDgyMGMwYzgwLCAweDAwMTBhYjRhLCAweDA0MDIxNWYyLCAweDgyMGMwYzgwLAorCTB4MDAxMDAwMDAsIDB4MDQwMDE1ZWYsIDB4NDgwZmM4NTcsIDB4ODIzYzdjMDAsCisJMHgwMDAwMDAwOSwgMHg1MDNjMDgwMCwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNiwKKwkweDgyM2MwNTgwLCAweDAwMDAwMDBkLCAweDA0MDAwNWU2LCAweDgwM2M3ODAwLAorCTB4MDQwMWY3ZjksIDB4NTllNDEwMDEsIDB4ODIwODBkMDAsIDB4ZmZmZWZmY2YsCisJMHg0ODA3YzgwMSwgMHg0NDBjNzgwMCwgMHg0NjAwMTgwMCwgMHgwMjAxZjgwMCwKKwkweDgwMGMxODAwLCAweDQ2MDAxODAwLCAweDAwMTAwNWNiLCAweDQ4MGJjODAxLAorCTB4MDQwMWYwMjIsIDB4NTlhMDFhMDcsIDB4NTlhMDA0MDcsIDB4OTAwMDAxYzAsCisJMHg4MDBjMWQ0MCwgMHg0ODBjNzgwMSwgMHg1OWEwMjIwOCwgMHg1OWEwMDQwOCwKKwkweDkwMDAwMWMwLCAweDgwMTAyNTQwLCAweDQ4MTA3ODAyLCAweDU5YTAwMjA5LAorCTB4ODAwMDAwNDAsIDB4MDQwMDE1Y2IsIDB4NDgwMDc4MDYsIDB4ODAwMDAwMDAsCisJMHg0ODAwNzgwNSwgMHg0MjAwMDgwMCwgMHgwMDAwNDAwMCwgMHg0MDAwMTAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA2NjgxLCAweDgwMDAwNTQwLCAweDA0MDAwMDAzLAorCTB4NDk3ODc4MDEsIDB4MDQwMWY1YmYsIDB4NDAwNDAwMDAsIDB4ODAwYzFjMDAsCisJMHgwNDAwMTViYywgMHg0ODBjNzgwMywgMHg0ODEwNzgwNCwgMHg0OTc4NzgwOCwKKwkweDU5YTAwNDA5LCAweDQ4MDA3ODA3LCAweDU5ZTQwMDAxLCAweDQ4MDNjODU3LAorCTB4ODIwMDA1NDAsIDB4MDAwNDAwMDAsIDB4NDgwM2M4MDEsIDB4MDQwMWY1NjEsCisJMHg1OWE4MDAwNiwgMHg0ODAzNDQwNiwgMHg1OWE4MDAwNywgMHg0ODAzNDIwNywKKwkweDU5YTgwMDA4LCAweDQ4MDM0NDA3LCAweDA0MDFmNTVhLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NDgwM2M4NTYsIDB4NGEwM2MwMTMsIDB4MDM4MDAzMDAsCisJMHg0YTAzYzAxNCwgMHgwMzgwMDM4MCwgMHg1OWEwMGMwNiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMGEwLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLCAweDAwMDAwMGEyLAorCTB4MDQwMjAwMmIsIDB4NTlhMDE0MGEsIDB4ODIwODA0ODAsIDB4MDAwMDAxMDAsCisJMHgwNDAyMTAyNywgMHg1OWEwMDIwYiwgMHg4YzAwMDUwMCwgMHgwNDAyMDAyZSwKKwkweDU5YTAwYTBhLCAweDgwMDQwOWMwLCAweDA0MDAwMDIxLCAweDgyMDQwNDgwLAorCTB4MDAwMDAwNDEsIDB4MDQwMjEwMWUsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMDMsCisJMHg4MjA0MGQwMCwgMHgwMDAwMDBmYywgMHg4MDA0MDkwNCwgMHg1OWEwMDQwNywKKwkweDU5YTAxMjA3LCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwNDA5LAorCTB4NTlhMDFhMDksIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwM2EwMCwgMHgwNDAyMDAwNiwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKKwkweDRhMDNjMDE0LCAweDAzODAwMDAwLCAweDA0MDFmNTc2LCAweDgzMmU1YzAwLAorCTB4MDAwMDAwMDQsIDB4NDEyYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMjUsCisJMHg0YTAxZDgwOSwgMHgwMDEwMjVhMiwgMHgxYzAxZjAwMCwgMHg0YTAzYzAxNCwKKwkweDAzODAwMDAwLCAweDA0MDFmNTZmLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLAorCTB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsCisJMHgwNDAwMDU1YywgMHg1OWEwMGMwNiwgMHg1OWEwMTQwYSwgMHg1OWEwMDIwYiwKKwkweDhjMDAwNTAwLCAweDA0MDIwMDMxLCAweDgzMmU1YzAwLCAweDAwMDAwMDA0LAorCTB4NDE3ODM4MDAsIDB4NTlhMDRhMGEsIDB4NDAxYzAwMDAsIDB4ODEyYzA0MDAsCisJMHg1MDAwNDAwMCwgMHg4MjIwMWQwMCwgMHgwMDAwMDBmZiwgMHg0YzA0MDAwMCwKKwkweDA0MDFmOGFjLCAweDVjMDAwODAwLCAweDA0MDAwMDJkLCAweDgwMjQ0ODQwLAorCTB4MDQwMDAwMjgsIDB4ODAwODEwMDAsIDB4ODIyMDFkMDAsIDB4MDAwMGZmMDAsCisJMHg4MDBjMTkxMCwgMHg0YzA0MDAwMCwgMHgwNDAxZjhhMiwgMHg1YzAwMDgwMCwKKwkweDA0MDAwMDIzLCAweDgwMjQ0ODQwLCAweDA0MDAwMDFlLCAweDgwMDgxMDAwLAorCTB4ODIyMDFkMDAsIDB4MDBmZjAwMDAsIDB4ODAwYzE5MjAsIDB4NGMwNDAwMDAsCisJMHgwNDAxZjg5OCwgMHg1YzAwMDgwMCwgMHgwNDAwMDAxOSwgMHg4MDI0NDg0MCwKKwkweDA0MDAwMDE0LCAweDgwMDgxMDAwLCAweDgyMjAxZDAwLCAweGZmMDAwMDAwLAorCTB4ODAwYzE5MzAsIDB4NGMwNDAwMDAsIDB4MDQwMWY4OGUsIDB4NWMwMDA4MDAsCisJMHgwNDAwMDAwZiwgMHg4MDI0NDg0MCwgMHgwNDAwMDAwYSwgMHg4MDA4MTAwMCwKKwkweDgwMWMzODAwLCAweDA0MDFmN2Q1LCAweDU5YTAwMjBhLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwZmYsIDB4NDAwMDE4MDAsIDB4MDQwMWY4ODIsIDB4MDQwMDAwMDQsCisJMHg0YTAzYzAxNCwgMHgwMzgwMDAwMCwgMHgwNDAxZjRkYSwgMHg0YTAzYzAxNCwKKwkweDAzODAwMDAwLCAweDA0MDFmNTIzLCAweDQ4MDNjODU2LCAweDRhMDNjMDEzLAorCTB4MDM4MDAzMDAsIDB4NGEwM2MwMTQsIDB4MDM4MDAzODAsIDB4NTlhMDBjMDYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDBhMCwgMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMGEyLCAweDA0MDIwMDZjLCAweDU5YTAxNDBhLCAweDgyMDgwNDgwLAorCTB4MDAwMDAxMDAsIDB4MDQwMjEwNjgsIDB4NTlhMDAyMGIsIDB4OGMwMDA1MDAsCisJMHgwNDAyMDA1YywgMHg1OWEwMWEwYSwgMHg4MDBjMTljMCwgMHgwNDAwMDA2MiwKKwkweDgyMGMwNDgwLCAweDAwMDAwMDQxLCAweDA0MDIxMDVmLCAweDAyMDFmODAwLAorCTB4MDAxMDNhMDAsIDB4MDQwMjAwMDYsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsCisJMHg0YTAzYzAxNCwgMHgwMzgwMDAwMCwgMHgwNDAxZjUwMiwgMHg4MzJlNWMwMCwKKwkweDAwMDAwMDA0LCAweDQxNzgzODAwLCAweDU5YTA0YTBhLCAweDQwMWMwMDAwLAorCTB4ODEyYzA0MDAsIDB4NDAwMDQwMDAsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsCisJMHgwNDAxZjg3NCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgwNDAwMDA0NywKKwkweDQ0MTQ0MDAwLCAweDgwMjQ0ODQwLCAweDA0MDAwMDJiLCAweDgwMDgxMDAwLAorCTB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4MDQwMWY4NmEsIDB4NWMwMDEwMDAsCisJMHg1YzAwMDgwMCwgMHgwNDAwMDAzZCwgMHg1MDIwMDAwMCwgMHg4MDE0MjhkMCwKKwkweDgwMTQwNTQwLCAweDQ0MDA0MDAwLCAweDgwMjQ0ODQwLCAweDA0MDAwMDFlLAorCTB4ODAwODEwMDAsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4MDQwMWY4NWQsCisJMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgwNDAwMDAzMCwgMHg1MDIwMDAwMCwKKwkweDgwMTQyOGUwLCAweDgwMTQwNTQwLCAweDQ0MDA0MDAwLCAweDgwMjQ0ODQwLAorCTB4MDQwMDAwMTEsIDB4ODAwODEwMDAsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsCisJMHgwNDAxZjg1MCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgwNDAwMDAyMywKKwkweDUwMjAwMDAwLCAweDgwMTQyOGYwLCAweDgwMTQwNTQwLCAweDQ0MDA0MDAwLAorCTB4ODAyNDQ4NDAsIDB4MDQwMDAwMDQsIDB4ODAwODEwMDAsIDB4ODAxYzM4MDAsCisJMHgwNDAxZjdjYiwgMHg1OWEwMGEwYSwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywKKwkweDgyMDQwZDAwLCAweDAwMDAwMGZjLCAweDgwMDQwOTA0LCAweDU5YTAwNDA3LAorCTB4NTlhMDEyMDcsIDB4OTAwODExYzAsIDB4ODAwODE1NDAsIDB4NTlhMDA0MDksCisJMHg1OWEwMWEwOSwgMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg0YTAzYzAxNCwKKwkweDAzODAwMDAwLCAweDQxMmMwMDAwLCAweDAyMDFmMDAwLCAweDAwMTAzYTI4LAorCTB4MDQwMWY4MzAsIDB4MDQwMDAwMDUsIDB4NDgxNzQ0MDYsIDB4NGEwM2MwMTQsCisJMHgwMzgwMDAwMCwgMHgwNDAxZjQ2MywgMHg0YTAzYzAxNCwgMHgwMzgwMDAwMCwKKwkweDA0MDFmNGFjLCAweDRhMDNjMDE0LCAweDAzODAwMDAwLCAweDA0MDFmNGFkLAorCTB4MDQwMWY4MzYsIDB4MDQwMDAwMTAsIDB4MDQwMWY4NjIsIDB4MDQwMjAwMGYsCisJMHg0MDA4MDgwMCwgMHgwNDAxZjg1ZiwgMHgwNDAyMDAwYywgMHg0MDBjMDgwMCwKKwkweDA0MDFmODVjLCAweDA0MDIwMDA5LCAweDA0MDFmODRiLCAweDQyMDAwMDAwLAorCTB4MDAwMzBkNDAsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHgwNDAxZjg0MywgMHg4MDAwMDU4MCwKKwkweDA0MDFmN2ZkLCAweDA0MDFmODIxLCAweDA0MDAwMDBhLCAweDgyMDQwZDQwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWY4NGIsIDB4MDQwMjAwMDcsIDB4MDQwMWY4N2UsCisJMHgwNDAxZjg5OCwgMHgwNDAxZjgzOCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDA0MDFmODM0LCAweDgwMDAwNTgwLCAweDA0MDFmN2ZkLAorCTB4NDAwNDE4MDAsIDB4MDQwMWY4MTEsIDB4MDQwMDAwMGMsIDB4MDQwMWY4M2QsCisJMHgwNDAyMDAwYiwgMHg0MDA4MDgwMCwgMHgwNDAxZjgzYSwgMHgwNDAyMDAwOCwKKwkweDQwMGMwODAwLCAweDA0MDFmZmU4LCAweDA0MDAwMDA0LCAweDA0MDFmODI2LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4MDQwMWY4MjIsCisJMHg4MDAwMDU4MCwgMHgwNDAxZjdmZCwgMHg0YzA0MDAwMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDY0LCAweDRhMDNjMDEzLCAweDAzODAwMzAwLCAweDgwMDQwODQwLAorCTB4MDQwMDAwMTYsIDB4NTllMDAwMTMsIDB4ODIwMDA1MDAsIDB4MDAwMDAzMDAsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDMwMCwgMHgwNDAyMDdmNywgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLCAweDRhMDNjMDEzLAorCTB4MDEwMDAwMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsCisJMHgwNDAyMDdmZiwgMHg0YTAzYzAxMywgMHgwMjAwMDAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDgwMDAwNTgwLCAweDVjMDAwODAwLAorCTB4MWMwMWYwMDAsIDB4NGEwM2MwMTMsIDB4MDEwMDAwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwgMHg0YTAzYzAxMywKKwkweDAyMDAwMjAwLCAweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDgwMDAwMDQwLAorCTB4MDQwMjA3ZmYsIDB4NGEwM2MwMTMsIDB4MDEwMDAxMDAsIDB4MWMwMWYwMDAsCisJMHg0MjAwMjAwMCwgMHgwMDAwMDAwOCwgMHg4MjA0MDUwMCwgMHgwMDAwMDA4MCwKKwkweDgwMDAwMGMyLCAweDgyMDAwNTQwLCAweDAxMDAwMDAwLCAweDQ4MDNjMDEzLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsCisJMHg0YTAzYzAxMywgMHgwMjAwMDIwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwKKwkweDgwMDAwMDQwLCAweDA0MDIwN2ZmLCAweDRhMDNjMDEzLCAweDAyMDAwMDAwLAorCTB4ODAwNDA4YzIsIDB4ODAxMDIwNDAsIDB4MDQwMjA3ZWMsIDB4NGEwM2MwMTMsCisJMHgwMTAwMDEwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwKKwkweDA0MDIwN2ZmLCAweDRhMDNjMDEzLCAweDAyMDAwMjAwLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsIDB4NTllMDAwMTMsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDEwMCwgMHg0YTAzYzAxMywgMHgwMjAwMDAwMCwKKwkweDRjMDQwMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDY0LCAweDU5ZTAwMDEzLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAxMDAsIDB4ODAwNDA4NDAsIDB4MDQwMDAwMDMsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDdmYSwgMHg4MDAwMDU0MCwgMHg1YzAwMDgwMCwKKwkweDFjMDFmMDAwLCAweDRhMDNjMDEzLCAweDAxMDAwMTAwLCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMDgsIDB4ODAwMDBkODAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsCisJMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwgMHg0YTAzYzAxMywgMHgwMjAwMDIwMCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLAorCTB4NTllMDAwMTMsIDB4ODIwMDA1MDAsIDB4MDAwMDAxMDAsIDB4ODAwMDAxMTAsCisJMHg4MDA0MDhjMiwgMHg4MDA0MGQ0MCwgMHg0YTAzYzAxMywgMHgwMjAwMDAwMCwKKwkweDgwMDgxMDQwLCAweDA0MDIwN2VkLCAweDQwMDQyODAwLCAweDFjMDFmMDAwLAorCTB4NGEwM2MwMTMsIDB4MDEwMDAxMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsCisJMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwgMHg0YTAzYzAxMywgMHgwMjAwMDIwMCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLAorCTB4NGEwM2MwMTMsIDB4MDIwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NTlhMDA0MDcsCisJMHg1OWE4MDgzNywgMHg0ODAzNTAzNywgMHg0ODA3NDQwNywgMHg1OWEwMGEwOSwKKwkweDgyMDQwNDgwLCAweDAwMDAwMDE0LCAweDA0MDIxMDAzLCAweDQyMDAwODAwLAorCTB4MDAwMDA3ZDAsIDB4NTlhODAwMzgsIDB4NDgwNzUwMzgsIDB4NDgwMzQyMDksCisJMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDAwMDBlLCAweDU5YTgwMDA2LCAweDU5YTAwYzA2LCAweDgwMDQxNTgwLAorCTB4ODIwODE1MDAsIDB4MDAwMDAwNDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIyYzAsCisJMHg4MDA4MDU4MCwgMHg0ODAzNTAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwMDY5OSwKKwkweDAyMDFmMDAwLCAweDAwMTAyMmMwLCAweDU5YTAwNDA2LCAweDU5YTgwODA2LAorCTB4NDgwMzUwMDYsIDB4ODAwNDBkODAsIDB4OGMwNDBkMGMsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDY5OSwgMHg1OWEwMDIwNywgMHg0ODAzNTAwNywgMHg1OWEwMDQwNywKKwkweDQ4MDM1MDA4LCAweDAyMDFmMDAwLCAweDAwMTAyMmMwLCAweDgwMDQwOWMwLAorCTB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjMwYywgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDE2LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg1OWEwMGMwNiwKKwkweDgyMDQwNTAwLCAweGZmZmZmZjAwLCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLAorCTB4ODIwNDE1ODAsIDB4MDAwMDAwZmYsIDB4MDQwMjAwMDcsIDB4NTlhODAwMTAsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMTU0MCwgMHgwMDAwZmYwMCwKKwkweDA0MDFmMDExLCAweDgyMDQwNDAwLCAweDAwMTAyMTBlLCAweDUwMDAwMDAwLAorCTB4ODAwMDAxMTAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwODAsIDB4MDIwMDAwMDAsCisJMHgwMDEwMjMxMCwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDgwMDQxNTgwLCAweDAyMDAwMDAwLCAweDAwMTAyMzEwLCAweDg0MDQwOWMwLAorCTB4ODAwNDE1NDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDQwMjAwMDUsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKKwkweDQ4ZWU2MDIxLCAweDQ4MGE2MjFjLCAweDRhMDI2NDFjLCAweDAwMDBiYzA5LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMDAsCisJMHgwNDAyMDAwNywgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDQ5N2E1YTA0LAorCTB4NDk3YTU4MDUsIDB4NGEwMjVjMDQsIDB4MDAwMDgwMDAsIDB4NGEwMWQ4MDksCisJMHgwMDEwMjdmOSwgMHg0OTJlNjAwOCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzMiwKKwkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDE2LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDgzNmMwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg1OWEwMGMwNiwgMHg4MjA0MDUwMCwKKwkweGZmZmZmZjAwLCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDgyMDQxNTgwLAorCTB4MDAwMDAwZmYsIDB4MDQwMjAwMDcsIDB4NTlhODAwMTAsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBmZiwgMHg4MjAwMTU0MCwgMHgwMDAwZmYwMCwgMHgwNDAxZjAxMSwKKwkweDgyMDQwNDAwLCAweDAwMTAyMTBlLCAweDUwMDAwMDAwLCAweDgwMDAwMTEwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwODAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsCisJMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MDA0MTU4MCwKKwkweDAyMDAwMDAwLCAweDAwMTAyMzEwLCAweDg0MDQwOWMwLCAweDgwMDQxNTQwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg0OGVlNjAyMSwKKwkweDQ4MGE2MjFjLCAweDRhMDI2NDFjLCAweDAwMDBiYzA1LCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMDAsIDB4MDQwMjAwMDcsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDQ5N2E1YTA0LCAweDQ5N2E1ODA1LAorCTB4NGEwMjVjMDQsIDB4MDAwMDgwMDAsIDB4NGEwMWQ4MDksIDB4MDAxMDI3ZjksCisJMHg0OTJlNjAwOCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzMiwgMHgwMjAxZjAwMCwKKwkweDAwMDIwN2ExLCAweDU5MmMwMDA1LCAweDgyMDAwNTgwLCAweDAxMDAwMDAwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDIyYzAsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg0OTdiNDQwNiwgMHg0OTdiNDIwNywKKwkweDAyMDFmODAwLCAweDAwMTAzYjI1LCAweDA0MDAwMDA4LCAweDU5YTgwMDY2LAorCTB4NTlhODA4NmEsIDB4ODAwNDA0ODAsIDB4NTlhODA4NjcsIDB4NDgwNzQ0MDYsCisJMHg4MDA0MTQ4MCwgMHg0ODBiNDIwNywgMHg0OTY3NDQwNywgMHg1OWE4MDAwZSwKKwkweDQ4MDM0MjA5LCAweDQ5NWY0NDA5LCAweDU5YTgwMDIwLCAweDQ4MDM0MjBiLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKKwkweDU5YTAwNDA2LCAweDhjMDAwNTAwLCAweDA0MDIwMDBmLCAweDU5YTgwMDY5LAorCTB4ODE2NDA0ODAsIDB4MDQwMDEwMDgsIDB4NTlhODAwMGIsIDB4ODE1MDA1ODAsCisJMHgwNDAwMDAwOSwgMHg1OWE4MDA2YSwgMHg1OWE4MTA2NiwgMHg4MDA4MDU4MCwKKwkweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDE4LCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMGMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTVmZSwgMHgwMjAxZjgwMCwgMHgwMDEwM2M4MCwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMmMwLCAweDQ4MDNjODU2LCAweDgwMDQwOWMwLCAweDAyMDIwMDAwLAorCTB4MDAxMDIzMTQsIDB4NTlhMDA0MDYsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMDgsCisJMHg0ODAzYzg1NiwgMHg1OWEwMDIwYiwgMHg4MjAwMDQ4MCwgMHgwMDAwMDgwMCwKKwkweDA0MDAxMDE1LCAweDAyMDFmMDAwLCAweDAwMTAyMzEwLCAweDQ4MDNjODU2LAorCTB4NTlhMDAyMGIsIDB4NTk5YzBhMDEsIDB4ODAwNDA0ODAsIDB4MDQwMjEwMDMsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjMxMCwgMHg1OWE4MDAwZSwgMHg4MTY0MDU4MCwKKwkweDA0MDAwMDA5LCAweDRhMDM0NDA2LCAweDAwMDAwMDE4LCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMGMsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjMwYywgMHg1OWE4MDAyNiwgMHg4YzAwMDUwYSwgMHgwNDAwMDdmYSwKKwkweDU5YTAwNDA2LCAweDhjMDAwNTFlLCAweDA0MDAwMDM2LCAweDAyMDFmODAwLAorCTB4MDAwMjA3NWEsIDB4MDQwMDA3ZjQsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMDAsCisJMHgwNDAwMDdmMSwgMHg0OTdhNWEwNCwgMHg1OWEwMDQwNiwgMHg0ODAyNjIwYSwKKwkweDU5YTAwMjA5LCAweDQ4MDI2NDBhLCAweDU5YTAwNDA5LCAweDQ4MDI2MjBiLAorCTB4NTlhMDAyMGQsIDB4NDgwMjYyMGMsIDB4NTlhMDA0MGQsIDB4NDgwMjY0MGMsCisJMHg1OWEwMDIwZSwgMHg0ODAyNjIwZCwgMHg1OWEwMDQwZSwgMHg0ODAyNjQwZCwKKwkweDU5YTAwMjEwLCAweDQ4MDI2MjBlLCAweDU5YTAwNDEwLCAweDQ4MDI2NDBlLAorCTB4NTlhMDAyMGIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmMsIDB4ODAwMDAxMDQsCisJMHg0ODAyNjQwYiwgMHgwNDAxZjlkOSwgMHgwNDAwMDdkNywgMHg0OGVlNjAyMSwKKwkweDU4ZWU1ODBkLCAweDU5MzAwMjBlLCAweDU5MzAxYzBlLCAweDkwMGMxOWMwLAorCTB4ODAwYzFkNDAsIDB4NTkzMDAyMGMsIDB4NTkzMDE0MGMsIDB4OTAwODExYzAsCisJMHg4MDA4MTU0MCwgMHg1OTJjMGEwNSwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTAzYTI1LCAweDRhMDFkODA5LCAweDAwMTAyOWU1LAorCTB4NGEwMzQwMDAsIDB4MDAwMDAwMDEsIDB4NDkzMzQwMDEsIDB4MWMwMWYwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHgwMjAxZjgwMCwgMHgwMDEwMGFlMCwKKwkweDA0MDFmODZkLCAweDQ5N2I1MDU3LCAweDQyMDFkMDAwLCAweDAwMDAyNzEwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDYwYzYsIDB4NTljNDA4ODAsIDB4NGMwNDAwMDAsCisJMHg1OWM0MDhhMywgMHg0YzA0MDAwMCwgMHg0OTdiNDAwMiwgMHgwNDAxZjg3NiwKKwkweDA0MDFmODkzLCAweDRhMDNhMDA1LCAweDEwMDAwMDAwLCAweDA0MDFmOGI0LAorCTB4MDQwMWY5MDEsIDB4MDQwMDAwNDgsIDB4NTljODAwMDEsIDB4ODAwMDAxYzAsCisJMHgwNDAwMDdmYywgMHg1OWM4MDAxOCwgMHg4MjAwMDUwMCwgMHhmMDAwMDAwMCwKKwkweDU5YzAwODA4LCAweDgyMDQwZDAwLCAweDBmZmZmZmZmLCAweDgwMDQwNTQwLAorCTB4NDgwMzgwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDBlYzEsIDB4NTljMDAwMDYsCisJMHg0YTAzODAwNiwgMHgxMDAwMDAwMCwgMHg1OWMwMDAwOSwgMHg4MjAwMGQwMCwKKwkweDAwZTAwMDAwLCAweDA0MDIwMDI0LCAweDRhMDM5MDBkLCAweDAwMDAwMDAwLAorCTB4NTljODAwMjAsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsIDB4ODIwMDA1ODAsCisJMHgzMjAwMDAwMCwgMHgwNDAyMDAxYywgMHg0YTAzOTAwZCwgMHgwMDAwMDAwMSwKKwkweDU5YzgwMDIwLCAweDgyMDAwNTAwLCAweGZmMDAwMDAwLCAweDgyMDAwNTgwLAorCTB4ZTEwMDAwMDAsIDB4MDQwMjAwMTQsIDB4NGEwMzkwMGQsIDB4MDAwMDAwMDAsCisJMHg1OWM4MDAyMCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg0YTAzOTAwZCwKKwkweDAwMDAwMDAwLCAweDU5YzgwODIxLCAweDgyMDQwZDAwLCAweDAwZmZmZmZmLAorCTB4ODAwNDA1ODAsIDB4MDQwMjAwMDgsIDB4NTlhODAwMTAsIDB4ODAwNDA1ODAsCisJMHgwNDAyMDAwNSwgMHg1OWM0MDAwNSwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmMCwKKwkweDA0MDAwMDA2LCAweDQ4MDNjODU2LCAweDA0MDFmOGQ3LCAweDRhMDM1MDU3LAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsIDB4MDQwMWY4ZTEsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU5YzAwODA3LCAweDgyMDQwZDAwLCAweDAwMDAwMDBjLCAweDA0MDAwN2ZhLAorCTB4MDQwMWYwMDMsIDB4NGEwMzUwNTcsIDB4MDAwMDAwMDEsIDB4MDQwMWY4ZGEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmYzNiwgMHgwNDAxZjgxOCwgMHg0MjAxZDAwMCwKKwkweDAwMDE4NmEwLCAweDAyMDFmODAwLCAweDAwMTA2MGM2LCAweDVjMDAwODAwLAorCTB4NDgwNzg4YTMsIDB4NWMwMDA4MDAsIDB4NDgwNzg4ODAsIDB4NTlhODAwNTcsCisJMHg4MDAwMDFjMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjJjMCwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzE4LCAweDU5OWMwMjAxLCAweDQ4MDM1MDU5LCAweDQxNzgwODAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDNiMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDY2YTAsCisJMHg0ODBiNTA1YSwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwKKwkweDU5YjgwMGVhLCAweDgyMDAwNTAwLCAweDAwMDAwMDA3LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjAwMDMsIDB4NGEwMzcwZTgsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwgMHg0YTAzODAwNiwKKwkweDMwMDAwMDAwLCAweDU5YzAwMDA3LCAweDhjMDAwNTBhLCAweDA0MDIwN2ZlLAorCTB4NTljMDAwMDYsIDB4NTlhMDAyMDksIDB4NTlhMDBjMDksIDB4OTAwNDA5YzAsCisJMHg4MDA0MGQ0MCwgMHg0ODA3ODAwMSwgMHg1OWEwMDIwZSwgMHg1OWEwMGMwZSwKKwkweDkwMDQwOWMwLCAweDgwMDQwZDQwLCAweDQ4MDc4MDAwLCAweDU5YTAwMjBiLAorCTB4ODIwMDA1MDAsIDB4MDAwMGZmZmMsIDB4NDgwMzgwMDIsIDB4NDgwMzgwMDMsCisJMHg0ODAzODAwNSwgMHg0OTdiOTAwOSwgMHg1OWUwMDAwMywgMHg4MjAwMDU0MCwKKwkweDAwMDA4MDYwLCAweDQ4MDNjMDAzLCAweDFjMDFmMDAwLCAweDQxNzgwODAwLAorCTB4ODAwN2EwY2EsIDB4ODNkM2E0MDAsIDB4MDAwMDc2MDAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDEwMTM0NSwgMHg0YTAzYTAwYSwKKwkweDAwMDAwMDAxLCAweDRhMDNhMDA1LCAweDIwMDAwMDAwLCAweDU5ZDAwMDA2LAorCTB4NGEwM2EwMDUsIDB4MzAwMDAwMDAsIDB4NTlkMDAwMDYsIDB4OGMwMDA1MGEsCisJMHgwNDAyMDdmZSwgMHg1OWQwMDAwNSwgMHg1OWEwMDIxMCwgMHg1OWEwMGMxMCwKKwkweDkwMDQwOWMwLCAweDgwMDQwZDQwLCAweDQ4MDdhMDAxLCAweDU5YTAwMjBkLAorCTB4NTlhMDBjMGQsIDB4OTAwNDA5YzAsIDB4ODAwNDBkNDAsIDB4NDgwN2EwMDAsCisJMHg1OWEwMDIwYiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmYywgMHg0ODAzYTAwMywKKwkweDQ4MDNhMDAyLCAweDQ4MDNhMDA4LCAweDFjMDFmMDAwLCAweDU5YTAwMDAyLAorCTB4NDgwM2M4NTcsIDB4ODAwMDAxYzAsIDB4MDQwMjAwNGEsIDB4NTlhODAwNWEsCisJMHg0ODAzODg4MCwgMHg1OWM0MDBhMywgMHg4MjAwMDU0MCwgMHgwMDAwMjAwOCwKKwkweDg0MDAwNTNhLCAweDQ4MDM4OGEzLCAweDU5YzQwMDA4LCAweDg0MDAwNTRlLAorCTB4ODIwMDA1MDAsIDB4ZmZmZmZmZTEsIDB4NDgwMzg4MDgsIDB4NTljODAwNDAsCisJMHg4NDAwMDUzNCwgMHg0ODAzOTA0MCwgMHgwNDAxZjkwMiwgMHgwNDAyMDAxMywKKwkweDU5YTgwMDEwLCAweDgwMDAwMGQwLCAweDgyMDAwNTQwLCAweDAwMDAwMDExLAorCTB4NDgwMzkxMjAsIDB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsCisJMHg4MjAwMDU0MCwgMHgzMjAwMDAwMCwgMHg0ODAzOTEyMSwgMHg0YTAzOTEyMywKKwkweGUxMjkwMDA4LCAweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4NDgwMzkxMjIsIDB4MDQwMWYwMTYsIDB4NTlhODAwMTAsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBmZiwgMHg5MDAwMDljMCwgMHg4NDAwMDFjMCwgMHg4MDA0MDU0MCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAwLCAweDQ4MDM5MTIwLCAweDU5YTgwMDEwLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1NDAsIDB4MDEwMDAwMDAsCisJMHg0ODAzOTEyMSwgMHg0YTAzOTEyMywgMHgwODIxMDAwOCwgMHg1OWE4MDAxMCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDQ4MDM5MTIyLCAweDQ5N2I5MTI0LAorCTB4NTlhODBjNWIsIDB4ODAwNDA4MDAsIDB4NDgwNzU0NWIsIDB4OTAwNDA5YzAsCisJMHg4MjA0MDU0MCwgMHgwMDAwYWFhYSwgMHg0ODAzOTEyNSwgMHg0OTdiOTEyNiwKKwkweDQ5N2I5MTI3LCAweDA0MDFmOGNmLCAweDA0MDIwMDA0LCAweDRhMDM5MTAwLAorCTB4MDAwMGU5ODAsIDB4MDQwMWYwMDMsIDB4NGEwMzkxMDAsIDB4MDAwMGU5YTAsCisJMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAyNTAwZCwKKwkweDQyMDNlMDAwLCAweDgwMDAwMDAwLCAweDQwZTgxMDAwLCAweDQxNzgwODAwLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4MDIwMWY4MDAsIDB4MDAxMDY2YTAsCisJMHg1OTk0MDAyNCwgMHg4MDA4MDQwMCwgMHg0ODAzMjgyNCwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDRkOTAwMDAwLCAweDRkZDAwMDAwLCAweDRkYTQwMDAwLAorCTB4NGQxNDAwMDAsIDB4NDE3YTMwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDcwZDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmRjMywgMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwKKwkweDVjMDNhMDAwLCAweDVjMDMyMDAwLCAweDFjMDFmMDAwLCAweDU5YzgwMDA3LAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwMDMsIDB4NGEwMzkwMGQsIDB4MDAwMDAwMzAsCisJMHgxYzAxZjAwMCwgMHg0YTAzODgwNSwgMHgwMDAyMDAwMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDNjLCAweDAyMDFmODAwLCAweDAwMTAxMzQ1LCAweDRhMDM4ODkxLAorCTB4MDAwMGZmZmYsIDB4NTljODAwMzUsIDB4NDgwMzkwMzUsIDB4NGEwMzkwMGQsCisJMHgwMDAwMDA0MCwgMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwZWMxLCAweDQyMDM4MDAwLCAweDAwMDA3NzIwLCAweDAyMDFmODAwLAorCTB4MDAxMDBlYzEsIDB4NGEwM2EwMDUsIDB4MjAwMDAwMDAsIDB4NGEwM2EwMDUsCisJMHgzMDAwMDAwMCwgMHg1OWQwMDgwNiwgMHg4YzA0MGQwYSwgMHgwNDAyMDdmZSwKKwkweDFjMDFmMDAwLCAweDRkMzAwMDAwLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLAorCTB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsCisJMHg1YzAyNjAwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg0ZDMwMDAwMCwKKwkweDU5YTI2MDAxLCAweDU5YTAwMDAwLCAweDQwMDBiMDAwLCAweDgwMDAwMDAwLAorCTB4NDgwMzQwMDAsIDB4NTkyYzAwMDEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMWUsCisJMHg0MDAyNTgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYiwgMHg1OGVjMTAwNywKKwkweDU4ZWMxODA4LCAweDU5MmMwYTA1LCAweDRkMmMwMDAwLCAweDU4ZWMwMDBkLAorCTB4NDAwMjU4MDAsIDB4NTkyYzAyMDQsIDB4NWMwMjU4MDAsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDEwMywgMHgwNDAwMDAwOCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTAzYTI1LCAweDRhMDFkODA5LCAweDAwMTAyOWU1LAorCTB4MDQwMWYwMDcsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsCisJMHgwMDEwM2EyOCwgMHg0YTAxZDgwOSwgMHgwMDEwMjllNSwgMHg1YzAyNjAwMCwKKwkweDFjMDFmMDAwLCAweDU4ZWMwMDBkLCAweDQwMDI1ODAwLCAweDU5MmMwMjA0LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAxMDMsIDB4MDQwMjAwMDYsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc3ZCwgMHg1YzAyNjAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwKKwkweDU4ZWMwMDBkLCAweDQwMDI1ODAwLCAweDU5MmMwNDA0LCAweDg0MDAwNTVlLAorCTB4NDgwMjVjMDQsIDB4NDIwMjg4MDAsIDB4MDAwMDA3ZmQsIDB4NDIwMDMwMDAsCisJMHgwMGZmZmZmZCwgMHgwMjAxZjgwMCwgMHgwMDEwNDVhNiwgMHgwNDAwMDAwMywKKwkweDgwMDAwNTgwLCAweDA0MDFmMDA0LCAweDU5YTI2MDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDkzN2QsIDB4NWMwMjYwMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMGMsCisJMHg0ZDMwMDAwMCwgMHg0YTAxZDgwOSwgMHgwMDEwMmEzOCwgMHgwNDAxZjdkYywKKwkweDU5MmMwMDA1LCAweDgyMDAwNTgwLCAweDAxMDAwMDAwLCAweDAyMDAwMDAwLAorCTB4MDAxMDIzMTgsIDB4NGQzMDAwMDAsIDB4NTlhMjYwMDEsIDB4NTkzMDAyMGIsCisJMHg1OTMwMWMwYSwgMHg5MDAwMDFjMCwgMHg4MDBjMWQ0MCwgMHg1OTMwMDQwZCwKKwkweDU5MzAxMjBkLCAweDkwMDAwMWMwLCAweDgwMDgxNTQwLCAweDU5MmMwYTA1LAorCTB4ODMyYzA0MDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMjgsCisJMHg0YTAxZDgwOSwgMHgwMDEwMjllNSwgMHg0YTAzNDAwMCwgMHgwMDAwMDAwMSwKKwkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjMzAwMDAwLAorCTB4NTkzMDA0MGIsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDQwMDEwMDQsCisJMHg0YTAyNWEwNSwgMHgwMDAwMDAwZSwgMHgwNDAxZjAwMywgMHg0ODAyNWEwNSwKKwkweDA0MDFmMDBjLCAweDgwMDQwOWMwLCAweDA0MDAwMDBhLCAweDRjMDQwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDNhMDAsIDB4NWMwMDA4MDAsIDB4MDQwMDAwMDMsCisJMHg0MDA0MDAwMCwgMHgwNDAxZjdmMCwgMHg4MDAwMDU4MCwgMHgwNDAxZjAwMywKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDA2MDAwLCAweDFjMDFmMDAwLAorCTB4NTlhMDAyMDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDQsIDB4MWMwMWYwMDAsCisJMHg0ODA3Yzg1NywgMHg4MDA0MDljMCwgMHgwNDAwMDAwYywgMHgwMjAxZjgwMCwKKwkweDAwMTAxNjUwLCAweDA0MDIwMDA5LCAweDQyMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE4OGMsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTgyMSwgMHg1OWEwMDQwNiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDA3LCAweDBjMDFmMDAxLCAweDAwMTAyYThjLCAweDAwMTAyYWExLAorCTB4MDAxMDJhYjcsIDB4MDAxMDJhOGEsIDB4MDAxMDJhOGEsIDB4MDAxMDJhOGEsCisJMHgwMDEwMmE4YSwgMHgwMDEwMmE4YSwgMHgwMjAxZjAwMCwgMHgwMDEwMjMxMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMGMwLCAweDAyMDFmODAwLCAweDAwMTAxOTNmLAorCTB4ODIwNDA1NDAsIDB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxOTNmLCAweDgyMDQwNTQwLCAweDAwMDAwMDA4LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsCisJMHgwNDAxZjAwYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxOTNmLCAweDgyMDQwNTQwLCAweDAwMDAwMDAxLCAweDQyMDAwODAwLAorCTB4MDAwMDAwYzAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsIDB4NTljODAwNDAsCisJMHg0YzAwMDAwMCwgMHg1OWE4MDAxMCwgMHg0YzAwMDAwMCwgMHg1OWM0MDBhMywKKwkweDRjMDAwMDAwLCAweDU5YzQwMDA4LCAweDRjMDAwMDAwLCAweDA0MDFmOTExLAorCTB4MDQwMDAwMjEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTlhODA4MjEsCisJMHg4MDA0MDljMCwgMHgwMjAyMDAwMCwgMHgwMDEwMjMxNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1MTNiLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDE2LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCisJMHgwMjAyMDAwMCwgMHgwMDEwMjMxNCwgMHg1OWM0MDhhNCwgMHg4MjA0MGQwMCwKKwkweDAwMDAwMDBmLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDAyMDIwMDAwLAorCTB4MDAxMDIzMTQsIDB4NTljODAwNDAsIDB4NGMwMDAwMDAsIDB4NTlhODAwMTAsCisJMHg0YzAwMDAwMCwgMHg1OWM0MDBhMywgMHg0YzAwMDAwMCwgMHg1OWM0MDAwOCwKKwkweDRjMDAwMDAwLCAweDU5YzQwMDgwLCAweDRjMDAwMDAwLCAweDU5YTAwMjBmLAorCTB4NTlhMGJjMGYsIDB4OTA1Y2I5YzAsIDB4ODA1Y2JkNDAsIDB4NDE3ODQ4MDAsCisJMHg0MTc4NTAwMCwgMHg0MTc4NTgwMCwgMHg0MTc4OTAwMCwgMHg0MTc4OTgwMCwKKwkweDA0MDFmZTIxLCAweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDAyMDFmODAwLAorCTB4MDAxMDBhZTAsIDB4NDE3OGMwMDAsIDB4NDk3YjQwMDIsIDB4MDQwMWY5NWMsCisJMHgwNDAxZjlhYSwgMHg1OWEwMDIwYywgMHg1OWEwMGMwYywgMHg4MDA0MGQ0MCwKKwkweDA0MDAwMDAyLCAweDA0MDFmOWZiLCAweDA0MDFmOWZhLCAweDA0MDFmZTY4LAorCTB4ODA2MGMxYzAsIDB4MDQwMjAwMTQsIDB4MDQwMWZhOTgsIDB4MDQwMWZlYjIsCisJMHgwNDAyMDAwZSwgMHgwMjAxZjgwMCwgMHgwMDEwMThkMywgMHgwNDAyMDAwOCwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDE3LCAweDAyMDFmODAwLCAweDAwMTAyMzBjLAorCTB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4MDQwMWYwMDAsIDB4NDIwMDU4MDAsCisJMHgwMDAwYWFhYSwgMHgwNDAxZjA1OCwgMHg1OWM4MDAwMSwgMHg4MDAwMDFjMCwKKwkweDA0MDAwN2VlLCAweDU5YzgwODAxLCAweDgwMDQwOWMwLCAweDA0MDAwMDA2LAorCTB4MDQwMWZhNzAsIDB4NDAyNDAwMDAsIDB4ODAyODA1NDAsIDB4ODAyYzA1NDAsCisJMHgwNDAyMDA0ZCwgMHg1OWEwMDAwMiwgMHg4MjAwMDU4MCwgMHhmZWVkYmVlZiwKKwkweDA0MDAwMDA0LCAweDQyMDA4ODAwLCAweDEwMDAwMDAwLCAweDA0MDFmMDAzLAorCTB4NDIwMDg4MDAsIDB4MTAwMDAwMDQsIDB4MDQwMWZhMTksIDB4NGEwMzQwMDIsCisJMHhmZWVkYmVlZiwgMHgwNDAxZmE3MSwgMHgwNDAxZmE5NywgMHgwNDAxZmVhOCwKKwkweDU5YzQwMDA1LCAweDhjMDAwNTM0LCAweDA0MDAwMDA0LCAweDQyMDA1ODAwLAorCTB4MDAwMGJiYmIsIDB4MDQwMWYwMzgsIDB4MDQwMWZlODMsIDB4MDQwMjAwMDcsCisJMHg0MjAwNTgwMCwgMHgwMDAwY2NjYywgMHg0ODVmNDIwZiwgMHg5MDVjYjljMCwKKwkweDQ4NWY0NDBmLCAweDA0MDFmMDMwLCAweDU5YTAwNDBjLCAweDgwMDAwMWMwLAorCTB4MDQwMDAwMGUsIDB4NTlhMjYwMDAsIDB4NTkzMDAwMGQsIDB4ODAwMDAxYzAsCisJMHgwNDAyMDdiZSwgMHg1OWEyNjAwMSwgMHg1OTMwMDgwZCwgMHg4MDA0MDljMCwKKwkweDA0MDIwN2JhLCAweDgwNDg5MWMwLCAweDA0MDIwN2I4LCAweDgwNGM5OWMwLAorCTB4MDQwMjA3YjYsIDB4MDQwMWY4N2EsIDB4ODA1Y2I4NDAsIDB4MDQwMDAwMDUsCisJMHg0MDI0MDAwMCwgMHg4MDI4MDU0MCwgMHg4MDJjMDU0MCwgMHgwNDAyMDAxYSwKKwkweDQyMDAwMDAwLCAweDAwMDMwZDQwLCAweDgwMDAwMDQwLCAweDA0MDIwMDEyLAorCTB4NTljMDAwMDcsIDB4ODIwMDA1MDAsIDB4MDAwNTAxYzAsIDB4MDQwMjAwMGIsCisJMHgwMjAxZjgwMCwgMHgwMDEwMThkMywgMHgwNDAyMDAwOCwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDE3LCAweDAyMDFmODAwLCAweDAwMTAyMzBjLCAweDQyMDNlMDAwLAorCTB4NTAwMDAwMDAsIDB4MDQwMWYwMDAsIDB4NDIwMDU4MDAsIDB4MDAwMGRkZGQsCisJMHgwNDAxZjAwNSwgMHg1OWMwMDgwNywgMHg4MjA0MGQwMCwgMHgwMDAwMDAwYywKKwkweDA0MDAwN2VhLCAweDA0MDFmZTVjLCAweDU5YTAwNDBjLCAweDgwMDAwMWMwLAorCTB4MDQwMDAwMDIsIDB4MDQwMWY4NTYsIDB4MDQwMWZlNmIsIDB4NDAyNDAwMDAsCisJMHg4MDI4MDU0MCwgMHg4MDJjMDU0MCwgMHgwNDAyMDAwMywgMHg4MDVjYjljMCwKKwkweDA0MDIwNzgxLCAweDAyMDFmODAwLCAweDAwMTA2ZjM2LCAweDA0MDFmZGEzLAorCTB4NDIwMWQwMDAsIDB4MDAwMTg2YTAsIDB4MDIwMWY4MDAsIDB4MDAxMDYwYzYsCisJMHg1YzAwMDgwMCwgMHg0ODA3ODg4MCwgMHg1YzAwMDgwMCwgMHg0ODA3ODgwOCwKKwkweDVjMDAwODAwLCAweDQ4MDc4OGEzLCAweDVjMDAwODAwLCAweDQ4MDc1MDEwLAorCTB4NWMwMDA4MDAsIDB4NDgwNzkwNDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA5NjksCisJMHg1OWEwMDQwNiwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDAwMDJjLCAweDQyMDAwODAwLCAweDAwMDAwMGMwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmZmMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOTNmLAorCTB4ODIwNDA1MDAsIDB4ZmZmZmZmZjcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxOTNmLCAweDgyMDQwNTAwLCAweGZmZmZmZmZiLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsCisJMHg0YTAzODhhNywgMHgwMDAwZjdmNywgMHg0MjAwNjAwMCwgMHhiZWZmZmZmZiwKKwkweDQyMDA2ODAwLCAweDgwMDE4MDAwLCAweDAyMDFmODAwLCAweDAwMTA0MjdkLAorCTB4NDIwMDYwMDAsIDB4ZmZmZWZmZmYsIDB4NDE3ODY4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDI3ZCwgMHg0MDJjMDAwMCwgMHg4MDI4MDU0MCwgMHg4MDI0MDU0MCwKKwkweDAyMDAwMDAwLCAweDAwMTAyMmMwLCAweDQ4Mjc0NDA2LCAweDQ4MmI0MjA3LAorCTB4NDgyZjQ0MDcsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMWMsIDB4NTlhMjYwMDAsCisJMHg4MTMyNjFjMCwgMHgwNDAwMDAwZSwgMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwKKwkweDA0MDAwMDBiLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZmQsIDB4NTlhMjYwMDEsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHgxYzAxZjAwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMGVmLCAweDAyMDFmODAwLCAweDAwMTAxNWViLAorCTB4NTljNDAwYTMsIDB4ODQwMDA1NWEsIDB4ODQwMDA1M2EsIDB4NDgwMzg4YTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTYzYiwgMHgwNDAyMDAwYSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxODhjLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE4MjEsIDB4MDQwMWYwMTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTY0MiwgMHgwNDAyMDAwOCwgMHg0MTc4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxODhjLCAweDQxNzgwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE4MjEsIDB4MDQwMWYwMDksIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTg4YywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwKKwkweDAyMDFmODAwLCAweDAwMTAxODIxLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMDQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwKKwkweDQyMDFkMDAwLCAweDAwMDAwMDE0LCAweDAyMDFmODAwLCAweDAwMTA2MDhlLAorCTB4NTljNDAwMDgsIDB4ODQwMDA1NGUsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmZTEsCisJMHg0ODAzODgwOCwgMHg0YTAzODhhNywgMHgwMDAwZjdmNywgMHg0MjAwMTAwMCwKKwkweDA0MDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxOTNkLCAweDQyMDA2MDAwLAorCTB4YmUyMGJmZmYsIDB4NDIwMDY4MDAsIDB4ODAwMTgwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDI3ZCwgMHg0MjAwNjAwMCwgMHhmZmZlZmZmZiwgMHg0MTc4NjgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDQyMDBiMDAwLCAweDAwMDAxMzg4LAorCTB4NDIwMWQwMDAsIDB4MDAwMDAwMTQsIDB4NGM1ODAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjA4ZSwgMHgwMjAxZjgwMCwgMHgwMDEwMThkMywgMHg1YzAwYjAwMCwKKwkweDA0MDAwMDA0LCAweDgwNThiMDQwLCAweDA0MDIwN2Y2LCAweDA0MDFmMDI1LAorCTB4NTljNDAwMDUsIDB4OGMwMDA1MzQsIDB4MDQwMjAwMDcsIDB4NTljNDAwYTQsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwKKwkweDA0MDIwMDFjLCAweDQyMDA2MDAwLCAweDAwMDIwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQyODIsIDB4NDIwMWQwMDAsIDB4MDAwMDAwNjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjA4ZSwgMHg0MjAwNjAwMCwgMHhmZWZmZmZmZiwgMHg0MjAwNjgwMCwKKwkweDAyMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDQyMDA2MDAwLAorCTB4ZmRmZmZmZmYsIDB4NDE3ODY4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsCisJMHg0YTAzODgwNSwgMHgwNDAwMDAwMSwgMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDAzLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGVjMSwKKwkweDU5YzAwMDA2LCAweDU5YTAwNDBjLCAweDgwMDAwMWMwLCAweDA0MDAwMDNmLAorCTB4NTlhMDNjMGMsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksIDB4OTAwYzE5YzAsCisJMHg4MDBjMWQ0MCwgMHg1OWEwMDIwZSwgMHg1OWEwMjQwZSwgMHg5MDEwMjFjMCwKKwkweDgwMTAyNTQwLCAweDU5YTAwMjBiLCAweDgyMDAwNTAwLCAweDAwMDBmZmZjLAorCTB4NTlhMDE0MGIsIDB4OTAwODExYzAsIDB4ODAwODE1NDAsIDB4NDgwYjgwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDQ5MzM0MDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDRhMDI1YTA0LAorCTB4MDAwMDAwMTgsIDB4NGEwMjU4MDUsIDB4MDBhYmNkZWYsIDB4NDkyZTYwMDgsCisJMHg0OTJlNjAwYiwgMHg0ODFlNjAwZCwgMHg0YTAyNjAwYywgMHgwMDAwMDAwNCwKKwkweDgzMmMwNDAwLCAweDAwMDAwMDExLCAweDQ4MDI2MDBhLCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMGMsIDB4ODIxYzBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDQsCisJMHg4MDFjMzg0MCwgMHgwNDAxZjk2MywgMHgwNDAxZjAwNCwgMHg0MTc4MzgwMCwKKwkweDA0MDFmOTYwLCAweDA0MDFmMDExLCAweDgyMWMwYzgwLCAweDAwMDAwMDA1LAorCTB4MDQwMDEwMDUsIDB4NDAwNDM4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwM2MsCisJMHgwNDAxZjAwNiwgMHg4MDAwMTU4MCwgMHg4MjA4MTQwMCwgMHgwMDAwMDAwYywKKwkweDgwMWMzODQwLCAweDA0MDIwN2ZkLCAweDgzMmMwNDAwLCAweDAwMDAwMDA1LAorCTB4MDQwMWY5NTAsIDB4MDQwMjA3ZjEsIDB4NDk3YjkwMDksIDB4NTllMDAwMDMsCisJMHg4MjAwMDU0MCwgMHgwMDAwODA2MCwgMHg0ODAzYzAwMywgMHg0YTAzODAwOSwKKwkweDAwZTAwMDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDQxNzgwODAwLAorCTB4ODAwN2EwY2EsIDB4ODNkM2E0MDAsIDB4MDAwMDc2MDAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDEwMTM0NSwgMHg0YTAzYTAwYSwKKwkweDAwMDAwMDAxLCAweDRhMDNhMDA1LCAweDIwMDAwMDAwLCAweDU5ZDAwMDA2LAorCTB4NGEwM2EwMDUsIDB4MzAwMDAwMDAsIDB4NTlkMDAwMDYsIDB4OGMwMDA1MGEsCisJMHgwNDAyMDdmZSwgMHg1OWQwMDAwNSwgMHg1OWEwMDIwYywgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDNmLCAweDU5YTAzYTBjLCAweDU5YTAwMjEwLCAweDU5YTAxYzEwLAorCTB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NTlhMDAyMGQsIDB4NTlhMDI0MGQsCisJMHg5MDEwMjFjMCwgMHg4MDEwMjU0MCwgMHg1OWEwMTIwYiwgMHg4MjA4MTUwMCwKKwkweDAwMDBmZmZjLCAweDU5YTAwNDBiLCAweDkwMDAwMWMwLCAweDgwMDgxNTQwLAorCTB4NDgwYmEwMDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDVkOCwgMHg0OTMzNDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwKKwkweDRhMDI1YTA0LCAweDAwMDAwMDE4LCAweDRhMDI1ODA1LCAweDAwYWJjZGVmLAorCTB4NDkyZTYwMDgsIDB4NDkyZTYwMGIsIDB4NDgxZTYwMGQsIDB4NGEwMjYwMGMsCisJMHgwMDAwMDAwNCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAxMSwgMHg0ODAyNjAwYSwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDBjLCAweDgyMWMwZDgwLCAweDAwMDAwMDAxLAorCTB4MDQwMDAwMDQsIDB4ODAxYzM4NDAsIDB4MDQwMWY5MDYsIDB4MDQwMWYwMDQsCisJMHg0MTc4MzgwMCwgMHgwNDAxZjkwMywgMHgwNDAxZjAxMSwgMHg4MjFjMGM4MCwKKwkweDAwMDAwMDA1LCAweDA0MDAxMDA1LCAweDQwMDQzODAwLCAweDQyMDAxMDAwLAorCTB4MDAwMDAwM2MsIDB4MDQwMWYwMDYsIDB4ODAwMDE1ODAsIDB4ODIwODE0MDAsCisJMHgwMDAwMDAwYywgMHg4MDFjMzg0MCwgMHgwNDAyMDdmZCwgMHg4MzJjMDQwMCwKKwkweDAwMDAwMDA1LCAweDA0MDFmOGYzLCAweDA0MDIwN2YxLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NTlhMDAyMGMsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMjQsCisJMHg4MjRjMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDA0MCwgMHg1OWEyNjAwMSwKKwkweDU5MzAzODBkLCAweDgwMWMzOWMwLCAweDA0MDAwMDNjLCAweDgwMWMzODQwLAorCTB4NDgxZTYwMGQsIDB4NTkzMjU4MGIsIDB4NTkzMDA4MGEsIDB4NTAwNDIwMDAsCisJMHg1ODA0MTgwMSwgMHg1ODA0MTAwMiwgMHg4MjA4MTUwMCwgMHhmZmZmZmZmYywKKwkweDU5MzAwMDBjLCAweDgwMDAwMDAwLCAweDgyMDAwZDgwLCAweDAwMDAwMDA1LAorCTB4MDQwMjAwMDksIDB4NDk3YTYwMGMsIDB4NTkyZTU4MDEsIDB4ODEyZTU5YzAsCisJMHgwNDAwMDAxYSwgMHg0OTJlNjAwYiwgMHg4MzJjMGMwMCwgMHgwMDAwMDAwNSwKKwkweDA0MDFmMDA1LCAweDQ4MDI2MDBjLCAweDU5MzAwODBhLCAweDgyMDQwYzAwLAorCTB4MDAwMDAwMDMsIDB4NDgwNjYwMGEsIDB4MDQwMWYwMTAsIDB4NTlhMDEyMGIsCisJMHg4MjA4MTUwMCwgMHgwMDAwZmZmYywgMHg1OWEwMDQwYiwgMHg5MDAwMDFjMCwKKwkweDgwMDgxNTQwLCAweDQ4MGJhMDAzLCAweDU5YTAwMjBkLCAweDU5YTAyNDBkLAorCTB4OTAxMDIxYzAsIDB4ODAxMDI1NDAsIDB4NTlhMDAyMTAsIDB4NTlhMDFjMTAsCisJMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg0MjAxZDAwMCwgMHgwMDAwM2E5OCwKKwkweDAyMDFmODAwLCAweDAwMTA2MGM2LCAweDQ4MGJhMDAyLCAweDU5YTgwMDU5LAorCTB4NDgwM2EwMDgsIDB4NDgxM2EwMDAsIDB4NDgwZmEwMDEsIDB4NGEwM2EwMDUsCisJMHgxMDAwMDAwMCwgMHgwMjAwNTgwMCwgMHgwMDEwMDVkOCwgMHg4MDRjOTgwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ4NDdjODU3LAorCTB4NTlhMDA0MGMsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMjQsIDB4ODI0ODA1ODAsCisJMHgwMDAwMDAwMiwgMHgwNDAwMDA0MiwgMHg1OWEyNjAwMCwgMHg1OTMwMzgwZCwKKwkweDgwMWMzOWMwLCAweDA0MDAwMDNlLCAweDgwMWMzODQwLCAweDQ4MWU2MDBkLAorCTB4NTkzMjU4MGIsIDB4NTkzMDA4MGEsIDB4NTAwNDIwMDAsIDB4NTgwNDE4MDEsCisJMHg1ODA0MTAwMiwgMHg4MjA4MTUwMCwgMHhmZmZmZmZmYywgMHg1OTMwMDAwYywKKwkweDgwMDAwMDAwLCAweDgyMDAwZDgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDA5LAorCTB4NDk3YTYwMGMsIDB4NTkyZTU4MDEsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMWQsCisJMHg0OTJlNjAwYiwgMHg4MzJjMGMwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjAwNSwKKwkweDQ4MDI2MDBjLCAweDU5MzAwODBhLCAweDgyMDQwYzAwLCAweDAwMDAwMDAzLAorCTB4NDgwNjYwMGEsIDB4MDQwMWYwMTMsIDB4ODI0NDA1ODAsIDB4MTAwMDAwMDAsCisJMHgwNDAyMDAxZiwgMHg1OWEwMDIwZSwgMHg1OWEwMjQwZSwgMHg5MDEwMjFjMCwKKwkweDgwMTAyNTQwLCAweDU5YTAwMjA5LCAweDU5YTAxYzA5LCAweDkwMGMxOWMwLAorCTB4ODAwYzFkNDAsIDB4NTlhMDAyMGIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmMsCisJMHg1OWEwMTQwYiwgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg0ODBiODAwMywKKwkweDQ4MTM4MDAwLCAweDQ4MGY4MDAxLCAweDQ4MGI4MDAyLCAweDU5YzgwMDE4LAorCTB4ODIwMDA1MDAsIDB4ZjAwMDAwMDAsIDB4NTljMDIwMDgsIDB4ODIxMDI1MDAsCisJMHgwZmZmZmZmZiwgMHg4MDEwMDU0MCwgMHg0ODAzODAwOCwgMHg0ODQ3ODAwNiwKKwkweDgwNDg5MDAwLCAweDgyNjBjNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NTljMDAwMDksIDB4NDgwM2M4NTcsIDB4ODIwMDBkMDAsIDB4MDBlMDAwMDAsCisJMHgwNDAwMDAwZCwgMHg0ODVmNDIwZiwgMHg5MDVjYjljMCwgMHg0ODVmNDQwZiwKKwkweDhjMDAwNTJlLCAweDA0MDAwMDAyLCAweDgwMjg1MDAwLCAweDhjMDAwNTJjLAorCTB4MDQwMDAwMDIsIDB4ODAyNDQ4MDAsIDB4OGMwMDA1MmEsIDB4MDQwMDAwMDIsCisJMHg4MDJjNTgwMCwgMHgxYzAxZjAwMCwgMHg1OWEwMDIwYywgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDI0LCAweDU5ZDAwODA2LCAweDQ4MDdjODU3LCAweDhjMDQwZDNlLAorCTB4MDQwMDAwMjAsIDB4NGEwM2EwMDUsIDB4MjAwMDAwMDAsIDB4NGEwM2EwMDUsCisJMHgzMDAwMDAwMCwgMHg1OWQwMDgwNiwgMHg4YzA0MGQwYSwgMHgwNDAyMDdmZSwKKwkweDgyNGMwNDgwLCAweDAwMDAwMDAzLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAorCTB4NDA0YzAwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDJkYTEsIDB4MDAxMDJkYTMsCisJMHgwMDEwMmRhOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg4MDAwMDA0MCwKKwkweDQwMDA5ODAwLCAweDA0MDFmZjQzLCAweDA0MDAwMDBhLCAweDA0MDFmZjQxLAorCTB4MDQwMWYwMDgsIDB4ODAwMDAwNDAsIDB4NDAwMDk4MDAsIDB4NTlkMDA4MDYsCisJMHg0ODA3Yzg1NywgMHg4YzA0MGQzZSwgMHgwNDAyMDdlMywgMHgwNDAxZmYzOSwKKwkweDFjMDFmMDAwLCAweDU5YTAwNDBjLCAweDgwMDAwMWMwLCAweDA0MDAwMDI0LAorCTB4NTljMDA4MDcsIDB4NDgwN2M4NTcsIDB4OGMwNDBkM2UsIDB4MDQwMDAwMjAsCisJMHg1OWMwMDgwNywgMHg0YTAzODAwNiwgMHgyMDAwMDAwMCwgMHg4MjQ4MDQ4MCwKKwkweDAwMDAwMDAzLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDQwNDgwMDAwLAorCTB4MGMwMWYwMDEsIDB4MDAxMDJkYzQsIDB4MDAxMDJkYzYsIDB4MDAxMDJkY2UsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg4MDAwMDA0MCwgMHg0MDAwOTAwMCwKKwkweDQyMDA4ODAwLCAweDEwMDAwMDA0LCAweDA0MDFmZjY1LCAweDA0MDAwMDBjLAorCTB4MDQwMWZmNjMsIDB4MDQwMWYwMGEsIDB4ODAwMDAwNDAsIDB4NDAwMDkwMDAsCisJMHg1OWMwMDgwNywgMHg0ODA3Yzg1NywgMHg4YzA0MGQzZSwgMHgwNDAyMDdlNSwKKwkweDQyMDA4ODAwLCAweDEwMDAwMDA0LCAweDA0MDFmZjU5LCAweDFjMDFmMDAwLAorCTB4NDkyZmM4NTcsIDB4NDAwMGE4MDAsIDB4NGEwM2I4MDUsIDB4MjAwMDAwMDAsCisJMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHgzMDAwMDAwMCwgMHg0ODEzYjgwMCwKKwkweDQ4MGZiODAxLCAweDQ4MGJiODAyLCAweDQ4NTdiODAzLCAweDRhMDNiODA1LAorCTB4MzAwMDAwMDIsIDB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsIDB4NzAwMDAwMDEsCisJMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHgxMDAwMDAwMCwgMHg1OWRjMDAwNiwKKwkweDhjMDAwNTNlLCAweDA0MDAwN2ZlLCAweDRhMDNiODA1LCAweDIwMDAwMDAwLAorCTB4NTlkYzAwMDYsIDB4NTlkYzIwMDAsIDB4NTlkYzE4MDEsIDB4ODAxYzM5YzAsCisJMHgwNDAwMDAwYSwgMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwKKwkweDVjMDAwODAwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDRhMDI1YTA0LAorCTB4MDAwMDAwMGEsIDB4NDkyYzA4MDEsIDB4MWMwMWYwMDAsIDB4NDIwMDYwMDAsCisJMHgwMDEwMmZiMiwgMHgwMjAxZjgwMCwgMHgwMDEwMTM0NSwgMHg0YTAzOTAyYywKKwkweDAwMjAwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMWY0LCAweDU5YzgwMDJjLAorCTB4OGMwMDA1MmMsIDB4MDQwMDAwMDcsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsCisJMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywgMHg0MTc4MTAwMCwgMHgwNDAxZjE5NiwKKwkweDUwMzAxMDAwLCAweDQxNzg0ODAwLCAweDRhMDM5MDJkLCAweDAwMDA4MDAwLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAxZjQsIDB4NTljODAwMmMsIDB4OGMwMDA1MzQsCisJMHgwNDAwMDAwNywgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0MjAwMDAwMCwKKwkweDAwMDA0MDAzLCAweDQxNzgxMDAwLCAweDA0MDFmMTg3LCAweDA0MDFmOGY4LAorCTB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAzYjEsCisJMHgwNDAyMDdmYiwgMHgwNDAxZjk4OCwgMHg0MTc4NDgwMCwgMHgwNDAxZjkyMCwKKwkweDgwMjQ0ODAwLCAweDQwMjQwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwM2IxLAorCTB4MDQwMjA3ZmIsIDB4ODAzMDYwMDAsIDB4ODIzMDA1ODAsIDB4MDAxMDJmYjQsCisJMHgwNDAyMDdlMCwgMHg1OWE4MDg2MywgMHg4MDA0MDljMCwgMHgwNDAwMDAwNywKKwkweDQyMDAwMDAwLCAweDAwMDA0MDA0LCAweDQyMDAxMDAwLCAweDAwMDAwMDAyLAorCTB4NTlhODE4NjIsIDB4MDQwMWYxNmMsIDB4NDIwMDYwMDAsIDB4MDAxMDJmYjIsCisJMHg0YTAzNTA2NCwgMHgwMDAwMDAwNCwgMHg1MDMwMTAwMCwgMHg0MTc4NDgwMCwKKwkweDRhMDM5MDJkLCAweDAwMDA0MDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMWY0LAorCTB4NTljODAwMmMsIDB4OGMwMDA1MzIsIDB4MDQwMDAwMDcsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmYywgMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywgMHg0MTc4MTAwMCwKKwkweDA0MDFmMTU5LCAweDA0MDFmOGNhLCAweDgwMjQ0ODAwLCAweDQwMjQwMDAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAxNTQsIDB4MDQwMjA3ZmIsIDB4MDQwMWY5NWEsCisJMHg0MTc4NDgwMCwgMHgwNDAxZjhmMiwgMHg4MDI0NDgwMCwgMHg0MDI0MDAwMCwKKwkweDgyMDAwNTgwLCAweDAwMDAwMTU0LCAweDA0MDIwN2ZiLCAweDgwMzA2MDAwLAorCTB4ODIzMDA1ODAsIDB4MDAxMDJmYjQsIDB4MDQwMjA3ZTAsIDB4NTlhODA4NjMsCisJMHg4MDA0MDljMCwgMHgwNDAwMDAwNywgMHg0MjAwMDAwMCwgMHgwMDAwNDAwNCwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDA0LCAweDU5YTgxODYyLCAweDA0MDFmMTNlLAorCTB4NDIwMDYwMDAsIDB4MDAxMDJmYjIsIDB4NDk3YjUwNjQsIDB4NTAzMDEwMDAsCisJMHg0MTc4NDgwMCwgMHg0YTAzOTAyZCwgMHgwMDAwMTAwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMWY0LCAweDU5YzgwMDJjLCAweDhjMDAwNTJlLCAweDA0MDAwMDA3LAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsIDB4NDIwMDAwMDAsIDB4MDAwMDQwMDMsCisJMHg0MTc4MTAwMCwgMHgwNDAxZjEyYywgMHgwNDAxZjg5ZCwgMHg4MDI0NDgwMCwKKwkweDQwMjQwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDg4LCAweDA0MDIwN2ZiLAorCTB4MDQwMWY5MmQsIDB4NDE3ODQ4MDAsIDB4MDQwMWY4YzUsIDB4ODAyNDQ4MDAsCisJMHg0MDI0MDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDA4OCwgMHgwNDAyMDdmYiwKKwkweDgwMzA2MDAwLCAweDgyMzAwNTgwLCAweDAwMTAyZmI0LCAweDA0MDIwN2UwLAorCTB4NTlhODA4NjMsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDcsIDB4NDIwMDAwMDAsCisJMHgwMDAwNDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwMSwgMHg1OWE4MTg2MiwKKwkweDA0MDFmMTExLCAweDQyMDA2MDAwLCAweDAwMTAyZmIyLCAweDUwMzAxMDAwLAorCTB4NDE3ODQ4MDAsIDB4NGEwMzkwMmQsIDB4MDAwMDA4MDAsIDB4MDQwMWY4N2MsCisJMHg4MDI0NDgwMCwgMHg0MDI0MDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxOCwKKwkweDA0MDIwN2ZiLCAweDA0MDFmOTBjLCAweDQxNzg0ODAwLCAweDA0MDFmOGE0LAorCTB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTgsCisJMHgwNDAyMDdmYiwgMHg4MDMwNjAwMCwgMHg4MjMwMDU4MCwgMHgwMDEwMmZiNCwKKwkweDA0MDIwN2ViLCAweDU5YTgwODYzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA3LAorCTB4NDIwMDAwMDAsIDB4MDAwMDQwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsCisJMHg1OWE4MTg2MiwgMHgwNDAxZjBmMCwgMHg0MjAwNjAwMCwgMHgwMDEwMmZiMiwKKwkweDUwMzAxMDAwLCAweDQxNzg0ODAwLCAweDRhMDM5MDJkLCAweDAwMDAwNDAwLAorCTB4MDQwMWY4NWIsIDB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDA4OCwgMHgwNDAyMDdmYiwgMHgwNDAxZjhlYiwgMHg0MTc4NDgwMCwKKwkweDA0MDFmODgzLCAweDgwMjQ0ODAwLCAweDQwMjQwMDAwLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwODgsIDB4MDQwMjA3ZmIsIDB4ODAzMDYwMDAsIDB4ODIzMDA1ODAsCisJMHgwMDEwMmZiNCwgMHgwNDAyMDdlYiwgMHg1OWE4MDg2MywgMHg4MDA0MDljMCwKKwkweDA0MDAwMDA3LCAweDQyMDAwMDAwLCAweDAwMDA0MDA0LCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMDgsIDB4NTlhODE4NjIsIDB4MDQwMWYwY2YsIDB4NDIwMDYwMDAsCisJMHgwMDEwMmZiMiwgMHg1MDMwMTAwMCwgMHg0MTc4NDgwMCwgMHg0YTAzOTAyZCwKKwkweDAwMDAyMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMWY0LCAweDU5YzgwMDJjLAorCTB4OGMwMDA1MzAsIDB4MDQwMDAwMDcsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsCisJMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywgMHg0MTc4MTAwMCwgMHgwNDAxZjBiZSwKKwkweDU5YzgwMDJjLCAweDgyMDAwNTAwLCAweGZmZTBmZmZmLCAweDgyMDgwZDAwLAorCTB4MDAxZjAwMDAsIDB4ODAwNDA1NDAsIDB4NDgwMzkwMmMsIDB4MDQwMWY4MjgsCisJMHg4MDI0NDgwMCwgMHg0MDI0MDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDExMCwKKwkweDA0MDIwN2ZiLCAweDA0MDFmOGI4LCAweDQxNzg0ODAwLCAweDA0MDFmODUwLAorCTB4NTljODAwMzQsIDB4ODIwODBkMDAsIDB4MDAxZjAwMDAsIDB4ODIwMDA1MDAsCisJMHgwMDFmMDAwMCwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwNiwgMHg1OWE4MDA2MywKKwkweDgwMDAwMDAwLCAweDQ4MDM1MDYzLCAweDQwMjQwMDAwLCAweDQ4MDM1MDYyLAorCTB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMTAsCisJMHgwNDAyMDdlZiwgMHg4MDMwNjAwMCwgMHg4MjMwMDU4MCwgMHgwMDEwMmZiNCwKKwkweDA0MDIwN2NkLCAweDU5YTgwODYzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA2LAorCTB4NDIwMDAwMDAsIDB4MDAwMDQwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMjAsCisJMHg1OWE4MTg2MiwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg1OWM4MDAyYywKKwkweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDgyMDgwZDAwLCAweDAwMDBmZmZmLAorCTB4ODAwNDA1NDAsIDB4NDgwMzkwMmMsIDB4NDAwODAwMDAsIDB4NDgwMzkwMjgsCisJMHg0ODAzOTAyOSwgMHg1OWE4MDA2NCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDAwMDA0LCAweDQwMDgwMDAwLCAweDQ4MDM5MDJhLCAweDQ4MDM5MDJiLAorCTB4NTljODA4MmQsIDB4ODIwNDBkMDAsIDB4ZmZmZmZjMDAsIDB4NDAyNDAwMDAsCisJMHg4MDA0MGQ0MCwgMHg0ODA3OTAyZCwgMHg0MjAwYjAwMCwgMHgwMDAwMDFmNCwKKwkweDU5YzgwMDJjLCAweDgyMDAwNTAwLCAweDE4MDAwMDAwLCAweDA0MDAwMDA3LAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmIsIDB4NDIwMDAwMDAsIDB4MDAwMDQwMDMsCisJMHg0MTc4MTAwMCwgMHgwNDAxZjA2YywgMHg0YTAzOTAyZSwgMHgwMDAwMDAwMSwKKwkweDQyMDBiMDAwLCAweDAwMDAwMWY0LCAweDU5YzgwMDJlLCAweDhjMDAwNTAwLAorCTB4MDQwMDAwMDYsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsIDB4NDIwMDAwMDAsCisJMHgwMDAwNDAwMywgMHgwNDAxZjA2MCwgMHgxYzAxZjAwMCwgMHg0MTc4MzgwMCwKKwkweDU5YzgwODJkLCAweDgyMDQwZDAwLCAweGZmZmZmYzAwLCAweDQwMjQwMDAwLAorCTB4ODAwNDBkNDAsIDB4NDgwNzkwMmQsIDB4NDIwMGIwMDAsIDB4MDAwMDAxZjQsCisJMHg1OWM4MDAyYywgMHg4MjAwMDUwMCwgMHgxODAwMDAwMCwgMHgwNDAwMDAwNywKKwkweDgwNThiMDQwLCAweDA0MDIwN2ZiLCAweDQyMDAwMDAwLCAweDAwMDA0MDAzLAorCTB4NDE3ODEwMDAsIDB4MDQwMWYwNGMsIDB4NTljODAwMzAsIDB4NTljODA4MzAsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwgMHg0MDA0MTgwMCwgMHg1OWM4MDAzMSwKKwkweDU5YzgwODMxLCAweDgwMDQwNTgwLCAweDA0MDIwN2ZkLCAweDQwMDQyMDAwLAorCTB4NTljODAwMzIsIDB4NTljODA4MzIsIDB4ODAwNDA1ODAsIDB4MDQwMjA3ZmQsCisJMHg0MDA0MjgwMCwgMHg1OWM4MDAzMywgMHg1OWM4MDgzMywgMHg4MDA0MDU4MCwKKwkweDA0MDIwN2ZkLCAweDQwMDQzMDAwLCAweDQwMGMwMDAwLCAweDgwMDgwNTgwLAorCTB4MDQwMDAwMDIsIDB4ODAxYzM4MDAsIDB4NDAxMDAwMDAsIDB4ODAwODA1ODAsCisJMHgwNDAwMDAwMiwgMHg4MDFjMzgwMCwgMHg1OWE4MDA2NCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA0LCAweDA0MDAwMDA5LCAweDQwMTQwMDAwLCAweDgwMDgwNTgwLAorCTB4MDQwMDAwMDIsIDB4ODAxYzM4MDAsIDB4NDAxODAwMDAsIDB4ODAwODA1ODAsCisJMHgwNDAwMDAwMiwgMHg4MDFjMzgwMCwgMHg1OWE4MDA2NCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA0LCAweDA0MDAwMDBkLCAweDU5YzgwMDM0LCAweDU5YzgwODM0LAorCTB4ODAwNDA1ODAsIDB4MDQwMjA3ZmQsIDB4ODIwNDA1MDAsIDB4MDAwMGZmZmYsCisJMHg4MjA4MGQwMCwgMHgwMDAwZmZmZiwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwZSwKKwkweDgwMWMzODAwLCAweDA0MDFmMDBjLCAweDU5YzgwMDM0LCAweDU5YzgwODM0LAorCTB4ODAwNDA1ODAsIDB4MDQwMjA3ZmQsIDB4ODIwNDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjA4MGQwMCwgMHgwMDAwMDBmZiwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwMiwKKwkweDgwMWMzODAwLCAweDgwMWMzOWMwLCAweDA0MDAwMDA2LCAweDU5YTgwMDYzLAorCTB4ODAxYzA0MDAsIDB4NDgwMzUwNjMsIDB4NDAyNDAwMDAsIDB4NDgwMzUwNjIsCisJMHgxYzAxZjAwMCwgMHg0ODAzNDIwNiwgMHg0ODA3NDQwNiwgMHg0ODBiNDIwNywKKwkweDQ4MGY0NDA3LCAweDQ4MTM0MjA4LCAweDQ4MTc0NDA4LCAweDAyMDFmMDAwLAorCTB4MDAxMDIyYzMsIDB4NDIwMDAwMDAsIDB4MDA2MDAwMDAsIDB4ODAwMDAwNDAsCisJMHgwNDAyMDdmZiwgMHgxYzAxZjAwMCwgMHg1YTVhNWE1YSwgMHhhNWE1YTVhNSwKKwkweDU5YTAwYzBhLCAweDgwMDQwOWMwLCAweDAyMDAwMDAwLCAweDAwMTAyMzEwLAorCTB4ODIwNDA0ODAsIDB4MDAwMDAwMjEsIDB4MDIwMjEwMDAsIDB4MDAxMDIzMTAsCisJMHg4MjA0MDQ4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMTAwMywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDEwLCAweDU5YTAwMjA4LCAweDU5YTAxNDA3LCAweDkwMDgxMWMwLAorCTB4ODAwODE1NDAsIDB4NTlhMDAyMDcsIDB4NTlhMDFjMDYsIDB4OTAwYzE5YzAsCisJMHg4MDBjMWQ0MCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHgwNDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTAzYTI1LCAweDRhMDFkODA5LCAweDAwMTAyZmQ1LAorCTB4MWMwMWYwMDAsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjMwYywgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwMiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLCAweDAwMTAyMzA0LAorCTB4NTlhMDBjMGEsIDB4ODIwNDA0ODAsIDB4MDAwMDAwMTEsIDB4MDQwMDEwMDMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAxMCwgMHg1OWEwMDQwYiwgMHg1OWEwMTIwYiwKKwkweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwMjA5LCAweDU5YTAxYzA4LAorCTB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NThlYzAwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDEwM2EyOCwgMHg0YTAxZDgwOSwgMHgwMDEwMmZmMCwgMHgxYzAxZjAwMCwKKwkweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NTlhMDBjMGEsCisJMHg4MjA0MDQ4MCwgMHgwMDAwMDAxMSwgMHgwMjAwMTAwMCwgMHgwMDEwMjJjMCwKKwkweDgyMDQwYzgwLCAweDAwMDAwMDEwLCAweDU5YTAwMjA4LCAweDU5YTAxNDA3LAorCTB4OTAwODExYzAsIDB4ODAwODE1NDAsIDB4NTlhMDAyMDcsIDB4NTlhMDFjMDYsCisJMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg4MjA4MTQwMCwgMHgwMDAwMDA0MCwKKwkweDU4ZWMwMDAzLCAweDAyMDFmODAwLCAweDAwMTAzYTI1LCAweDRhMDFkODA5LAorCTB4MDAxMDMwMGUsIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsCisJMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwKKwkweDAwMTAyMzA0LCAweDU5YTAwNDBhLCAweDgyMDAwYzgwLCAweDAwMDAwMDEwLAorCTB4NTlhMDA0MGIsIDB4NTlhMDEyMGIsIDB4OTAwODExYzAsIDB4ODAwODE1NDAsCisJMHg1OWEwMDIwOSwgMHg1OWEwMWMwOCwgMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwKKwkweDgyMDgxNDAwLCAweDAwMDAwMDQwLCAweDU4ZWMwMDAzLCAweDAyMDFmODAwLAorCTB4MDAxMDNhMjgsIDB4NGEwMWQ4MDksIDB4MDAxMDIyYjksIDB4MWMwMWYwMDAsCisJMHg0OGVmYzg1NywgMHg1OWEwMDIwNywgMHg1OWEwMTQwNywgMHg5MDAwMDFjMCwKKwkweDgwMDgxNTQwLCAweDU5YTAwMjA5LCAweDU5YTAxYzA5LCAweDkwMDAwMWMwLAorCTB4ODAwYzFkNDAsIDB4NTlhMDA0MDYsIDB4NDgwMzQwMDAsIDB4NDgwYjQwMDEsCisJMHg0ODBmNDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMjUsCisJMHg0YTAxZDgwOSwgMHgwMDEwMzA0MywgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwKKwkweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NDhlZmM4NTcsCisJMHg0OWEzYzg1NywgMHg0OTJmYzg1NywgMHg1OTJjMGEwNCwgMHg4MDA0MDkxMCwKKwkweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDE5LCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMGMsIDB4NDgwNWQ4MGMsIDB4MDQwMWYwMGEsIDB4NDAzMWQ4MDAsCisJMHg1OGVmNDAwYiwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwKKwkweDAyMDAwMDAwLCAweDAwMTAyMzA0LCAweDQ4ZWZjODU3LCAweDQ5YTNjODU3LAorCTB4NDhlZmM4NTcsIDB4NDlhM2M4NTcsIDB4NThlYzAwMGMsIDB4ODAwMDAwNDAsCisJMHgwNDAwMDAxMiwgMHg0ODAxZDgwYywgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwKKwkweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMGMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTAsIDB4NThlYzEwMDcsCisJMHg1OGVjMTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EyNSwgMHg0YTAxZDgwOSwKKwkweDAwMTAzMDU3LCAweDFjMDFmMDAwLCAweDU4ZWU1ODBkLCAweDQ4ZWZjODU3LAorCTB4NDlhM2M4NTcsIDB4NDkyZmM4NTcsIDB4NDkyZjMwMDYsIDB4NTkyYzA0MDQsCisJMHg4NDAwMDU1ZSwgMHg0ODAyNWMwNCwgMHg0YTAxZDgwOSwgMHgwMDEwMzA4MSwKKwkweDFjMDFmMDAwLCAweDU4ZWU1ODBkLCAweDQ4ZWZjODU3LCAweDQ5YTNjODU3LAorCTB4NDkyZmM4NTcsIDB4NTkyYzA0MDQsIDB4ODQwMDA1MWUsIDB4NDgwMjVjMDQsCisJMHg1OWEwMDAwMCwgMHg1OWEwMTAwMSwgMHg1OWEwMTgwMiwgMHg4MDA4MTQwMCwKKwkweDgyMGMxYzQwLCAweDAwMDAwMDAwLCAweDgzMmMwNDAwLCAweDAwMDAwMDA0LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMTAsIDB4MDIwMWYwMDAsIDB4MDAxMDNhMjgsCisJMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjMwYywgMHg1OWEwMzIwYiwgMHg4MjE4MzUwMCwgMHgwMDAwMDBmZiwKKwkweDU5YTI4YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDAyMDIwMDAwLAorCTB4MDAxMDIzMTAsIDB4ODM0NDA1ODAsIDB4MDAwMDA3ZmQsIDB4MDQwMDAwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDA5LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDAyMDFmODAwLAorCTB4MDAxMDNhMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg4MDE4MzFjMCwgMHgwNDAwMDAwYSwKKwkweDQxMmMwODAwLCAweDAyMDFmODAwLCAweDAwMTAzYTAwLCAweDA0MDIwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCisJMHg0MDA2NTgwMCwgMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwgMHg0OTdhNWEwNCwKKwkweDAyMDFmODAwLCAweDAwMTA5MTAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDMsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NGEwMWQ4MDksCisJMHgwMDEwMzBkMiwgMHgxYzAxZjAwMCwgMHg1OTJjMDAwNSwgMHg4MjAwMDU4MCwKKwkweDAxMDAwMDAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA0LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTkyYzA0MDYsIDB4ODIwMDJkMDAsCisJMHgwMDAwZmYwMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MDAwMDkwNCwKKwkweDgwMDQwODAwLCAweDgyMDQwNDgwLCAweDAwMDAwMDA2LCAweDA0MDAxMDAzLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4ODMyY2E0MDAsIDB4MDAwMDAwMDYsCisJMHg0MDUwYTgwMCwgMHg0MDA0YjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIyOCwKKwkweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLAorCTB4NTlhMDA0MDksIDB4NTlhMDFhMDksIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsCisJMHg4MzJjMDQwMCwgMHgwMDAwMDAwNiwgMHg0YzE0MDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAzYTI4LCAweDVjMDAyODAwLCAweDgwMTQyOWMwLCAweDA0MDAwMDAzLAorCTB4NGEwMWQ4MDksIDB4MDAxMDMwZmYsIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsCisJMHg1OGVmNDAwYiwgMHg1OGVlNTgwZCwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMjAwLCAweDAyMDAwMDAwLCAweDAwMTAyMzA0LCAweDgxMmU1OWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkyYzAwMDYsIDB4ODIwMDA1MDAsCisJMHhmZjAwMDAwMCwgMHg4MDAwMDkwNCwgMHg4MDA0MDljMCwgMHgwMjAwMDAwMCwKKwkweDAwMTAyMzA0LCAweDgyMDQwNDgwLCAweDAwMDAwMDBlLCAweDA0MDAxMDAzLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMGQsIDB4NTkyZTU4MDEsIDB4ODEyZTU5YzAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg4MzJjYTQwMCwgMHgwMDAwMDAwNSwKKwkweDQwNTBhODAwLCAweDQwMDRiMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjI4LAorCTB4NThlYzEwMDcsIDB4NThlYzE4MDgsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsCisJMHgwMjAxZjAwMCwgMHgwMDEwM2EyOCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwKKwkweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMGMsIDB4NTlhMDBjMDYsIDB4ODIwNDA1MDAsIDB4MDAwMGZmMDAsCisJMHg4NDAwMDFjMCwgMHg4MjAwMTQ4MCwgMHgwMDAwMDAwNywgMHgwMjAyMTAwMCwKKwkweDAwMTAyMzEwLCAweDBjMDFmMDAxLCAweDAwMTAzMTNkLCAweDAwMTAzMTQ0LAorCTB4MDAxMDMxNGIsIDB4MDAxMDMxNGIsIDB4MDAxMDMxNGIsIDB4MDAxMDMxNGQsCisJMHgwMDEwMzE1MiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwZCwgMHg0MjAwMzgwMCwKKwkweDAwMTAzMTY2LCAweDRhMDM0MDAwLCAweDAwMTBiNGViLCAweDA0MDFmMDEzLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMGQsIDB4NDIwMDM4MDAsIDB4MDAxMDMxNjYsCisJMHg0YTAzNDAwMCwgMHgwMDEwYjRmOCwgMHgwNDAxZjAwYywgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzEwLCAweDQyMDAwODAwLCAweDAwMDAwMDA4LCAweDQyMDAzODAwLAorCTB4MDAxMDMxNzksIDB4MDQwMWYwMDUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCisJMHg0MjAwMzgwMCwgMHgwMDEwMzFjMywgMHg1OWEwMDIwNywgMHg1OWEwMTQwNywKKwkweDkwMDAwMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwMjA5LCAweDU5YTAxYzA5LAorCTB4OTAwMDAxYzAsIDB4ODAwYzFkNDAsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsCisJMHg0YzFjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EyNSwgMHg1YzAwMzgwMCwKKwkweDQ4MWRkODA5LCAweDFjMDFmMDAwLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLAorCTB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg0YTAzNTAxZiwgMHgwMDAwMDAwMSwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDBkLCAweDU5YTBhODAwLCAweDgzMmNhNDAwLAorCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjJjMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVlNTgwZCwKKwkweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLAorCTB4MDAxMDIzMDQsIDB4ODMyY2E0MDAsIDB4MDAwMDAwMDUsIDB4NTA1MDAwMDAsCisJMHg4MjAwMTUwMCwgMHgwMDBjMDAxNiwgMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwKKwkweDgyNTAwYzAwLCAweDAwMDAwMDAzLCAweDUwMDQwMDAwLCAweDgyMDAxNTAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4NTA1MDAwMDAsCisJMHg4MjAwMTUwMCwgMHgwMDAwMDAyOCwgMHgwNDAwMDAxZCwgMHg4MjA4MTU4MCwKKwkweDAwMDAwMDI4LCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDgwNTAwODAwLAorCTB4NTAwNDAwMDAsIDB4ODIwMDE1MDAsIDB4MDAwMDAwMTMsIDB4ODIwODE1ODAsCisJMHgwMDAwMDAxMywgMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHg4MDA0MDgwMCwKKwkweDUwMDQwMDAwLCAweDgyMDAxNTAwLCAweDAwMDEwMDAwLCAweDgyMDgxNTgwLAorCTB4MDAwMTAwMDAsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDAxMiwgMHg1OTljMDAxOSwgMHg4YzAwMDUwZSwKKwkweDA0MDIwMDBmLCAweDAyMDFmMDAwLCAweDAwMTAyMzEwLCAweDgwNTAwODAwLAorCTB4NTAwNDAwMDAsIDB4ODIwMDE1MDAsIDB4MDAwMDAwMTMsIDB4MDIwMjAwMDAsCisJMHgwMDEwMjMxMCwgMHg4MDA0MDgwMCwgMHg1MDA0MDAwMCwgMHg4MjAwMTUwMCwKKwkweDAwMDEwMDAwLCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDgsIDB4NDIwMGE4MDAsIDB4MDAxMGI0ZTMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIxNywgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg0MDMxZDgwMCwKKwkweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwNCwgMHg0MjAwYTgwMCwgMHgwMDEwYjhmYSwgMHg4MzJjYTQwMCwKKwkweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5YTgwMDA1LAorCTB4ODQwMDA1NTAsIDB4NDgwMzUwMDUsIDB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsCisJMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5YTAwYzA2LAorCTB4ODIwNDA1MDAsIDB4MDAwMGZmMDAsIDB4ODQwMDAxYzAsIDB4ODIwMDE0ODAsCisJMHgwMDAwMDAwNiwgMHgwMjAyMTAwMCwgMHgwMDEwMjMxMCwgMHgwYzAxZjAwMSwKKwkweDAwMTAzMWVlLCAweDAwMTAzMWYzLCAweDAwMTAzMWY4LCAweDAwMTAzMWY4LAorCTB4MDAxMDMxZjgsIDB4MDAxMDMxZmEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGQsCisJMHg0MjAwYTAwMCwgMHgwMDEwYjRlYiwgMHgwNDAxZjAwYywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDBkLCAweDQyMDBhMDAwLCAweDAwMTBiNGY4LCAweDA0MDFmMDA3LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDgsCisJMHg0MjAwYTAwMCwgMHgwMDEwYjRlMywgMHg0MDA0YjAwMCwgMHg4MzJjYWMwMCwKKwkweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5YTAwMjA3LAorCTB4NTlhMDE0MDcsIDB4OTAwMDAxYzAsIDB4ODAwODE1NDAsIDB4NTlhMDAyMDksCisJMHg1OWEwMWMwOSwgMHg5MDAwMDFjMCwgMHg4MDBjMWQ0MCwgMHg4MzJjMDQwMCwKKwkweDAwMDAwMDA1LCAweDAyMDFmMDAwLCAweDAwMTAzYTI4LCAweDgzNmMwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg1OWEwMDQwNiwgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDFhLCAweDU5YTgwMDA1LCAweDhjMDAwNTE0LCAweDA0MDAwMDA1LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4NDAwMDA4MDAsIDB4MDQwMWYwMDMsCisJMHg1OWEwMDIwNywgMHg1OWE4MDg1MywgMHg0ODAzNTA1MywgMHgwMjAxZjgwMCwKKwkweDAwMTAxNjNiLCAweDA0MDAwMDIyLCAweDAyMDFmODAwLCAweDAwMTAxNjQyLAorCTB4MDQwMDAwMWYsIDB4MDIwMWY4MDAsIDB4MDAxMDE2NDksIDB4MDQwMDAwMWMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTY1MCwgMHgwNDAwMDAxOSwgMHg0ODA3NTA1MywKKwkweDAyMDFmMDAwLCAweDAwMTAyMzEwLCAweDU5YzQwODAxLCAweDgyMDQwZDAwLAorCTB4MDAwMTgwMDAsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwMDQsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMCwgMHgwNDAxZjAwZCwgMHg4MjA0MDU4MCwKKwkweDAwMDA4MDAwLCAweDA0MDIwMDA0LCAweDRhMDM0NDA2LCAweDAwMDAwMDAxLAorCTB4MDQwMWYwMDcsIDB4ODIwNDA1ODAsIDB4MDAwMTAwMDAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDVkOCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywgMHg1OWEwMDQwNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDFmLCAweDU5YzQwMDA2LAorCTB4ODQwMDA1MDAsIDB4NDgwMzg4MDYsIDB4MDIwMWY4MDAsIDB4MDAxMDZlZGUsCisJMHg0OTdiODg4MCwgMHgwMjAxZjgwMCwgMHgwMDEwYTljMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhOWNlLCAweDQyMDAwMDAwLCAweDAwMTBiOGNhLCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNTE4YywgMHg0YTAzODgwOCwgMHgwMDAwMDAwMCwgMHg0MjAyZDgwMCwKKwkweDAwMDAwMDA0LCAweDQyMDAxMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDE5M2QsIDB4NGEwMzUwNDksIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDZkNCwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg4MDA0MDljMCwKKwkweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMGMsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDUsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKKwkweDU5YTI4YzA2LCAweDU5YTAzMjBiLCAweDgyMTgzNTAwLCAweDAwMDAwMGZmLAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsCisJMHg4MzQ0MDU4MCwgMHgwMDAwMDdmZCwgMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0OWU3LCAweDA0MDAwMDA1LCAweDQyMDAwODAwLCAweDAwMDAwMDA5LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMDAsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzBjLCAweDQ5N2E1YTA0LCAweDRhMDI1YzA0LCAweDAwMDA4MDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkxMTUsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg0YTAxZDgwOSwKKwkweDAwMTAzMjllLCAweDFjMDFmMDAwLCAweDU5MmMwMDA1LCAweDgyMDAwZDAwLAorCTB4MDAwMGZmZmYsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwMDA1ODAsCisJMHgwMTAwMDAwMCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDgwMDQwOTA0LCAweDgzMmNhNDAwLAorCTB4MDAwMDAwMDUsIDB4NDA1MGE4MDAsIDB4NDAwNGIwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIyOCwgMHg1OWEwMDIwNywgMHg1OWEwMTQwNywgMHg5MDAwMDFjMCwKKwkweDgwMDgxNTQwLCAweDU5YTAwMjA5LCAweDU5YTAxYzA5LCAweDkwMDAwMWMwLAorCTB4ODAwYzFkNDAsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsCisJMHgwMDEwM2EyOCwgMHg0OTZmYzg1NywgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDFhLCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDIwMjA4MDAsCisJMHgwMDEwNDE0MiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAyMCwgMHg1OWEwMDQwNywKKwkweDU5YTAxMjA3LCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwNDA5LAorCTB4NTlhMDFhMDksIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NDE5YzAwMDAsCisJMHg0OWEzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwM2EyNSwgMHg0YTAxZDgwOSwKKwkweDAwMTAzMmRhLCAweDFjMDFmMDAwLCAweDQ4MzNjODU3LCAweDQwMzFkODAwLAorCTB4NThlZjQwMGIsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg1OTljMDIwMCwgMHg4MDAwMDFjMCwKKwkweDAyMDAwMDAwLCAweDAwMTAyMzEwLCAweDU5YTgwMDA1LCAweDhjMDAwNTEyLAorCTB4MDQwMDAwMDQsIDB4NTk5YzAwMTksIDB4ODQwMDA1MGMsIDB4NDgwMzM4MTksCisJMHgwMjAxZjgwMCwgMHgwMDEwOTdkNywgMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwKKwkweDA0MDAwMDA0LCAweDU5OWMwMDE3LCAweDg0MDAwNTA4LCAweDQ4MDMzODE3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsIDB4MDQwMjAwMDQsIDB4OGMwMDA1MGEsCisJMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHg0ODAzYzg1NywgMHg4YzAwMDUwNCwKKwkweDA0MDIwMDA0LCAweDU5YzQwOGEzLCAweDg0MDQwZDdhLCAweDQ4MDc4OGEzLAorCTB4OGMwMDA1MDIsIDB4MDQwMjAwMDQsIDB4NTljNDA4YTMsIDB4ODQwNDBkMDgsCisJMHg0ODA3ODhhMywgMHg1OTljMGMwMiwgMHg4YzAwMDUwMCwgMHgwNDAyMDAwNCwKKwkweDhjMDAwNTE2LCAweDA0MDAwMDEyLCAweDA0MDFmMDAxLCAweDgyMDQxNDgwLAorCTB4MDAwMDAwN2YsIDB4MDIwMjEwMDAsIDB4MDAxMDIzMTAsIDB4ODIwNDE0MDAsCisJMHgwMDEwMjEwZSwgMHg1MDA4MTAwMCwgMHg4MjA4MTUwMCwgMHgwMDAwMDBmZiwKKwkweDhjMDAwNTAwLCAweDA0MDIwMDA2LCAweDQ4MGI1MDEwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsIDB4NTk5YzAwMTksCisJMHg4YzAwMDUwZSwgMHgwNDAyMDAwYiwgMHg1OWE4MDgwNiwgMHg4YzA0MGQxNCwKKwkweDA0MDAwMDA4LCAweDQyMDAwODAwLCAweDAwMTBiNGUzLCAweDUwMDQwODAwLAorCTB4ODIwNDBkMDAsIDB4MDAwMDAwMjgsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAzMCwgMHgwNDAwMDAwMywgMHg4MDAwMDEwOCwKKwkweDA0MDFmMDAzLCAweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDQ4MDM5MDQwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsIDB4ODIwMDA0MDAsIDB4MDAxMDM0MTUsCisJMHg1MDAwMTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM3OCwgMHg1OTljMDIwMSwKKwkweDgyMDAwYzgwLCAweDAwMDAwMTAwLCAweDAyMDAxMDAwLCAweDAwMTAyMzEwLAorCTB4ODIwMDBjODAsIDB4MDAwMDA4NDEsIDB4MDIwMjEwMDAsIDB4MDAxMDIzMTAsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwNywgMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwKKwkweDU5OWMwNDAxLCAweDgwMDAwNTQwLCAweDAyMDAwMDAwLCAweDAwMTAyMzEwLAorCTB4NTk5YzA0MDksIDB4NTk5YzBjMDcsIDB4ODAwNDBjODAsIDB4MDIwMjEwMDAsCisJMHgwMDEwMjMxMCwgMHg4MDAwMDA0MCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMxMCwKKwkweDU5OWMwMjA5LCAweDU5OWMwYTA3LCAweDgwMDQwYzgwLCAweDAyMDIxMDAwLAorCTB4MDAxMDIzMTAsIDB4ODAwMDAwNDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTNjZCwgMHgwMjAxZjgwMCwgMHgwMDEwNGNiNiwKKwkweDU5OWMwMjAxLCAweDQ4MDM1MDA0LCAweDAyMDFmODAwLCAweDAwMTAxMmVlLAorCTB4NTk5YzAyMGEsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMDMsIDB4NDgwMzUwNGQsCisJMHgwNDAxZjAwMywgMHg0YTAzNTA0ZCwgMHgwMDAwMDBjOCwgMHgwMjAxZjgwMCwKKwkweDAwMTAzYjI1LCAweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA2MGRmLAorCTB4NDE3YTUwMDAsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwOTgsCisJMHg1OTljMDAwMywgMHg1OTljMDgwNCwgMHg5YzAwMDFjMCwgMHg5YzA0MDljMCwKKwkweDQ4MDM1MDAyLCAweDQ4MDc1MDAzLCAweDU5OWMxMDE3LCAweDhjMDgxNTFjLAorCTB4MDQwMDAwMDYsIDB4NTk5YzAwMDUsIDB4NTk5YzA4MDYsIDB4OWMwMDAxYzAsCisJMHg5YzA0MDljMCwgMHgwNDAxZjAwMywgMHg4MjAwMDUwMCwgMHhmMGZmZmZmZiwKKwkweDQ4MDM1MDAwLCAweDQ4MDc1MDAxLCAweDQyMDAxMDAwLCAweDAwMTBiNGViLAorCTB4NDgwMDEwMDAsIDB4NDgwNDEwMDEsIDB4NDIwMDEwMDAsIDB4MDAxMGI0ZjgsCisJMHg0ODAwMTAwMCwgMHg0ODA0MTAwMSwgMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwKKwkweDA0MDIwMDE1LCAweDU5OWMxMDE5LCAweDgyMDgxNTAwLCAweDAwMDBlMDAwLAorCTB4ODIwODA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwMGMsIDB4NGEwMzUwNTMsCisJMHgwMDAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxODhjLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDE4MjEsIDB4MDQwMWYwMmIsIDB4ODIwODA1ODAsIDB4MDAwMDIwMDAsCisJMHgwNDAyMDAwYSwgMHg0YTAzNTA1MywgMHgwMDAwMDAwMSwgMHg0MTc4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxODhjLCAweDQxNzgwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE4MjEsIDB4MDQwMWYwMWYsIDB4ODIwODA1ODAsIDB4MDAwMDQwMDAsCisJMHgwNDAyMDAwNiwgMHg0YTAzNTA1MywgMHgwMDAwMDAwMiwgMHg0YTAzNTA0OSwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDE3LCAweDgyMDgwNTgwLCAweDAwMDA2MDAwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4NTlhODA4NTgsIDB4ODIwNDBkODAsCisJMHgwMTM5MTA3NywgMHgwNDAyMDAwNSwgMHg1OWUwMDgxMywgMHg4YzA0MGQwMCwKKwkweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDRhMDM1MDUzLCAweDAwMDAwMDAzLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE4OGMsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwMTgyMSwKKwkweDU5OWMwMDE5LCAweDhjMDAwNTIwLCAweDA0MDAwMDBkLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwNDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTk0NCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAxMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGMwLCAweDAyMDFmODAwLCAweDAwMTAxOTQ0LCAweDRhMDM1MDMyLAorCTB4MDAwMGFhYWEsIDB4NTk5YzEwMTgsIDB4ODIwODE1MDAsIDB4MDAwMDAwMzAsCisJMHg1OWE4MDA2YywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwYywgMHg4MjA4MDU4MCwKKwkweDAwMDAwMDAwLCAweDAyMDAwMDAwLCAweDAwMTAyMzEwLCAweDU5OWMxMDE4LAorCTB4ODIwODE1MDAsIDB4ZmZmZmZmY2YsIDB4ODIwODE1NDAsIDB4MDAwMDAwMTAsCisJMHg0ODBiMzgxOCwgMHgwNDAxZjAxMCwgMHg4MjA4MGQ4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDAwMDA3LCAweDgyMDgwZDgwLCAweDAwMDAwMDEwLCAweDA0MDAwMDBhLAorCTB4ODIwODBkODAsIDB4MDAwMDAwMjAsIDB4MDQwMjAwMDIsIDB4NDgwNzUwMzIsCisJMHgwMjAxZjgwMCwgMHgwMDEwM2FiYSwgMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNWZlLCAweDAyMDFmODAwLCAweDAwMTAxNjJhLCAweDU5YTgwMDJhLAorCTB4ODAwNDA1NDAsIDB4NDgwMzUwMmEsIDB4NDlmM2M4NTcsIDB4NDIwMDEwMDAsCisJMHgwMDEwNTA2NSwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwgMHg0MjAwMTAwMCwKKwkweDAwMTA1MDU4LCAweDAyMDFmODAwLCAweDAwMTA2MDg0LCAweDRhMDM4ODA1LAorCTB4ZmZmZmZmZmYsIDB4NGEwM2MwMTQsIDB4MDA0MDAwNDAsIDB4NGEwM2MwMTMsCisJMHgwMDQwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDhjNywgMHg1OWEwMDAxZCwKKwkweDg0MDAwNTQwLCAweDQ4MDM0MDFkLCAweDQ5ZjNjODU3LCAweDAyMDFmMDAwLAorCTB4MDAxMDIyYzAsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMTgsCisJMHgwMDAwMDAyMCwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAwNSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA3LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMjAsIDB4NTlhMDA0MDcsIDB4NTlhMDEyMDcsCisJMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwgMHg1OWEwMWEwOSwKKwkweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDQxOWMwMDAwLCAweDAyMDFmMDAwLAorCTB4MDAxMDNhMjgsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHgwMjAxZjgwMCwKKwkweDAwMTA1MTNiLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDE2LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTlhODAwMTMsIDB4OGMwMDA1MDAsCisJMHgwNDAwMDAxMSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDIwLCAweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLAorCTB4ODAwODE1NDAsIDB4NTlhMDA0MDksIDB4NTlhMDFhMDksIDB4OTAwYzE5YzAsCisJMHg4MDBjMWQ0MCwgMHg0MjAwMDAwMCwgMHgwMDEwYmUyMSwgMHgwMjAxZjAwMCwKKwkweDAwMTAzYTI4LCAweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMjAsIDB4NDIwMGE4MDAsIDB4MDAxMGJlMjEsIDB4NDIwMGEwMDAsCisJMHhmZmZmZmZmZiwgMHg0NDUwYTgwMCwgMHg4MDU0YTgwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2ZkLCAweDRkNDQwMDAwLCAweDRkMzQwMDAwLCAweDQyMDI4ODAwLAorCTB4ZmZmZmZmZmYsIDB4NDIwMDIwMDAsIDB4ZmZmZmZmZmYsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwMSwgMHg0MjAwMzgwMCwgMHgwMDAwMDAwMSwgMHg0MjAwMTgwMCwKKwkweDAwMTBiZTIxLCAweDU5YTgxMDEwLCAweDgyMDgxNTAwLCAweDAwMDAwMGZmLAorCTB4NDAxODAwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDM0NmUsIDB4MDAxMDM0NzEsCisJMHgwMDEwMzQ3NSwgMHgwMDEwMzQ3OSwgMHg4MjEwMjUwMCwgMHhmZmZmZmYwMCwKKwkweDA0MDFmMDE0LCAweDgyMTAyNTAwLCAweGZmZmYwMGZmLCAweDg0MDgxMWMwLAorCTB4MDQwMWYwMTAsIDB4ODIxMDI1MDAsIDB4ZmYwMGZmZmYsIDB4OTAwODExYzAsCisJMHgwNDAxZjAwYywgMHg4MjEwMjUwMCwgMHgwMGZmZmZmZiwgMHg5YzA4MDFjMCwKKwkweDgwMTAyNTQwLCAweDQ0MTAxODAwLCAweDQyMDAzMDAwLCAweGZmZmZmZmZmLAorCTB4NDIwMDIwMDAsIDB4ZmZmZmZmZmYsIDB4ODAwYzE4MDAsIDB4MDQwMWYwMDMsCisJMHg0MDA4MDAwMCwgMHg4MDEwMjU0MCwgMHg4MTQ2ODgwMCwgMHg4MzQ0MmM4MCwKKwkweDAwMDAwMDdmLCAweDA0MDIxMDE0LCAweDRjMDgwMDAwLCAweDRjMGMwMDAwLAorCTB4NGMxODAwMDAsIDB4NGMxYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsCisJMHg1YzAwMzgwMCwgMHg1YzAwMzAwMCwgMHg1YzAwMTgwMCwgMHg1YzAwMTAwMCwKKwkweDA0MDIwN2YyLCAweDAyMDFmODAwLCAweDAwMTA0OWYzLCAweDA0MDIwN2VmLAorCTB4ODAxODMwMDAsIDB4ODAxYzM4MDAsIDB4NTkzNDEyMDIsIDB4NDAxODAwMDAsCisJMHgwYzAxZjdjZSwgMHg4MjEwMDU4MCwgMHhmZmZmZmZmZiwgMHgwNDAwMDAwMiwKKwkweDQ0MTAxODAwLCAweDQyMDAxODAwLCAweDAwMTBiZTIxLCAweDUwMGMwMDAwLAorCTB4ODIwMDA1MDAsIDB4ZmZmZmZmMDAsIDB4ODAxYzA1NDAsIDB4NDQwMDE4MDAsCisJMHg1YzAyNjgwMCwgMHg1YzAyODgwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAyMCwKKwkweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLAorCTB4NTlhMDA0MDksIDB4NTlhMDFhMDksIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYmUyMSwgMHgwMjAxZjAwMCwgMHgwMDEwM2EyOCwKKwkweDU5YTI4YzA2LCAweDU5YTAwMjBiLCAweDhjMDAwNTAwLCAweDA0MDAwMDBlLAorCTB4NTlhMDEyMDgsIDB4NTlhMDA0MDgsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg5MDAwMDFjMCwgMHg4MDA4MTU0MCwgMHg0MTc4NDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0OTE5LCAweDA0MDAwMDA4LCAweDQ4MDM0NDA2LCAweDAyMDFmMDAwLAorCTB4MDAxMDIzMTAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDIwMjAwMDAsCisJMHgwMDEwMjMxMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NTlhMDAyMGIsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMDUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDlmMywgMHgwMjAyMDAwMCwgMHgwMDEwM2FjNCwgMHg1OWEwMDIwYiwKKwkweDhjMDAwNTAyLCAweDA0MDAwMDE5LCAweDgzNDQwNDgwLCAweDAwMDAwN2YwLAorCTB4MDQwMjEwMTYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZmMsIDB4MDQwMjAwMTMsCisJMHg0OTdhNWEwNCwgMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MGU2LCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAzLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NGEwMWQ4MDksIDB4MDAxMDM0ZjEsCisJMHgxYzAxZjAwMCwgMHg1OWEyOGMwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwKKwkweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDQyMDBiMDAwLCAweDAwMDAwMDBhLAorCTB4NDEzNGEwMDAsIDB4ODMyZTVjMDAsIDB4MDAwMDAwMDIsIDB4NDEyY2E4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNiwKKwkweDQwNTRhMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMGFiMjgsIDB4NTkyYzA4MDIsIDB4ODIwNDA1MDAsIDB4MDBmZjAwZmYsCisJMHg5MDAwMDFjMCwgMHg4MjA0MTUwMCwgMHhmZjAwZmYwMCwgMHg4MDA4MDU0MCwKKwkweDQ4MDI1ODAyLCAweDU5MmMwODAxLCAweDgyMDQwNTAwLCAweDAwZmYwMGZmLAorCTB4OTAwMDAxYzAsIDB4ODIwNDE1MDAsIDB4ZmYwMGZmMDAsIDB4ODAwODA1NDAsCisJMHg0ODAyNTgwMSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwYSwgMHg1OWEwMDQwNywKKwkweDU5YTAxMjA3LCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwNDA5LAorCTB4NTlhMDFhMDksIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NDEyYzAwMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwM2EyOCwgMHg0OTZmYzg1NywgMHg0OTZmNDQwNiwKKwkweDAyMDFmMDAwLCAweDAwMTAyMmMwLCAweDU5YTI4YzA2LCAweDAyMDFmODAwLAorCTB4MDAwMjAyNDUsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDgzMzQwYzAwLCAweDAwMDAwMDA2LAorCTB4NTlhMDAyMGIsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMDMsIDB4ODMzNDBjMDAsCisJMHgwMDAwMDAwOCwgMHg1ODA0MDAwMSwgMHg0ODAzNDQwOSwgMHg5MDAwMDFjMCwKKwkweDQ4MDM0MjA5LCAweDUwMDQwMDAwLCAweDQ4MDM0NDA3LCAweDkwMDAwMWMwLAorCTB4NDgwMzQyMDcsIDB4NTkzNDAyMDAsIDB4NDgwMzQ0MDYsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjJjMCwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5YTAyMjBiLAorCTB4OGMxMDI1MDAsIDB4MDQwMjAwMmUsIDB4OGMxMDI1MDYsIDB4MDQwMjAwMDYsCisJMHg1OWEwMzIwOCwgMHg4MjE4MDQ4MCwgMHgwMDAwMDAwMywgMHgwMjAyMTAwMCwKKwkweDAwMTAyMzEwLCAweDU5YTI4YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LAorCTB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsCisJMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwOSwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzBjLCAweDAyMDFmODAwLCAweDAwMTAzYTAwLCAweDA0MDIwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCisJMHg1OWEwMjIwYiwgMHg4YzEwMjUwNiwgMHgwNDAwMDAwNCwgMHg1OTM0MzAwMiwKKwkweDgyMTgzNTAwLCAweDAwZmZmZmZmLCAweDQ5N2E1YTA0LCAweDRhMDI1YzA0LAorCTB4MDAwMDgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDkwYTgsIDB4MDQwMjAwMDUsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKKwkweDRhMDFkODA5LCAweDAwMTAzNWQxLCAweDFjMDFmMDAwLCAweDU5YTI4YzA2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDA5LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDAyMDFmODAwLAorCTB4MDAxMDNhMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg0OTdhNWEwNCwgMHg0YTAyNWMwNCwKKwkweDAwMDA4MDAwLCAweDAyMDFmODAwLCAweDAwMTAzYTAwLCAweDA0MDIwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCisJMHg1OTJlNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTBiZCwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NGEwMWQ4MDksIDB4MDAxMDM1YTMsIDB4MWMwMWYwMDAsIDB4NTkyYzI4MDUsCisJMHg4MjE0MGQ4MCwgMHgwMTAwMDAwMCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDA0LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDgsIDB4NTlhMDAyMDcsIDB4NTlhMDE0MDcsIDB4OTAwMDAxYzAsCisJMHg4MDA4MTU0MCwgMHg1OWEwMDIwOSwgMHg1OWEwMWMwOSwgMHg5MDAwMDFjMCwKKwkweDgwMGMxZDQwLCAweDgzMmMwNDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMDNhMjgsIDB4OGMxNDJkMDAsIDB4MDQwMDAwMDMsIDB4NGEwMWQ4MDksCisJMHgwMDEwMzViZSwgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwKKwkweDU4ZWU1ODBlLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLAorCTB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDVkOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOCwgMHg4MzJjMDQwMCwKKwkweDAwMDAwMDA1LCAweDU4ZWMxMDA3LCAweDU4ZWMxODA4LCAweDAyMDFmMDAwLAorCTB4MDAxMDNhMjgsIDB4NTkyYzAwMDUsIDB4ODIwMDA1ODAsIDB4MDEwMDAwMDAsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzBjLCAweDU5YTAwMjA3LCAweDU5YTAxNDA3LCAweDkwMDAwMWMwLAorCTB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksIDB4OTAwMDAxYzAsCisJMHg4MDBjMWQ0MCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwgMHg4MzJjMDQwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmMDAwLCAweDAwMTAzYTI4LCAweDU5YTAwYTBhLAorCTB4ODAwNDA5YzAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsIDB4ODIwNDA0ODAsCisJMHgwMDAwMDBlNywgMHgwNDAwMTAwMywgMHg0MjAwMDgwMCwgMHgwMDAwMDBlNiwKKwkweDU5YTAwMjA3LCAweDU5YTAxNDA3LCAweDkwMDAwMWMwLCAweDgwMDgxNTQwLAorCTB4NTlhMDAyMDksIDB4NTlhMDFjMDksIDB4OTAwMDAxYzAsIDB4ODAwYzFkNDAsCisJMHg4Mzg4MDQwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EyOCwKKwkweDRhMDFkODA5LCAweDAwMTAzNWZmLCAweDFjMDFmMDAwLCAweDQwMzFkODAwLAorCTB4NThlZjQwMGIsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg1OGVmNDAwYiwgMHg1OWEwMDIwYiwKKwkweDhjMDAwNTAwLCAweDA0MDAwMDA4LCAweDgzODgwNDAwLCAweDAwMDAwMDAwLAorCTB4NDgwM2M4NDAsIDB4NGEwM2M4NDIsIDB4MDAwMDAwMDYsIDB4MDQwMTEwMDAsCisJMHg0OTdiODg4NSwgMHg0YTAzNDIwNywgMHgwMDAwMDBlNiwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMmMwLCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4MDQwMWZiZTUsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzBjLCAweDQ5N2E1YTA0LCAweDRhMDI1YzA0LCAweDAwMDA4MDAwLAorCTB4NTlhMDA0MDYsIDB4ODAwMDAxYzAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsCisJMHg4MjAwMTU4MCwgMHgwMDAwMDBmZiwgMHgwNDAwMDAwNSwgMHg4MjAwMTQ4MCwKKwkweDAwMDAwMDA0LCAweDAyMDIxMDAwLCAweDAwMTAyMzEwLCAweDQwMDAxMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDFmYmYsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg0YTAxZDgwOSwKKwkweDAwMTAzNjNhLCAweDFjMDFmMDAwLCAweDU5MmMwMDA1LCAweDgyMDAwNTgwLAorCTB4MDEwMDAwMDAsIDB4MDIwMjAwMDAsIDB4MDAxMDIyYzAsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwNCwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg1OWEwMTQwNiwKKwkweDhjMDgxNTA4LCAweDA0MDIwMDA3LCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCisJMHg1OWEwMWMwNywgMHg4MjBjMDQ4MCwgMHgwMDAwMTAwMCwgMHgwMjAyMTAwMCwKKwkweDAwMTAyMzEwLCAweDQ5N2IyODA0LCAweDQ5N2IyODA1LCAweDQ5N2IyODFjLAorCTB4NDk3YjI4MWQsIDB4NDk3YjI4MWYsIDB4NDk3YjI4MjAsIDB4NDk3YjI4MjIsCisJMHg0OTdiMjgyMywgMHg4MDAwMDU4MCwgMHgwMjAxZjgwMCwgMHgwMDEwMTVmZSwKKwkweDU5YTgwODA1LCAweDhjMDgxNTAwLCAweDA0MDAwMDA0LCAweDgyMDQwZDQwLAorCTB4MDAwMDAwMTEsIDB4MDQwMWYwMDQsIDB4OGMwODE1MDYsIDB4MDQwMDAwMDIsCisJMHg4NDA0MGQ0MiwgMHg4NDA0MGQwYSwgMHg0ODA3NTAwNSwgMHg0MjAyZDgwMCwKKwkweDAwMDAwMDAxLCAweDgyMDgxNTAwLCAweDAwMDAwMGUwLCAweDgwMDgwMTBhLAorCTB4MGMwMjAwMzYsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMjAwMDksCisJMHg0YTAzNTAzMywgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNTBhMiwKKwkweDA0MDFmMDFmLCAweDRhMDM1MDMzLCAweDAwMDAwMDAwLCAweDA0MDFmN2ZiLAorCTB4NDk3YjUwMzIsIDB4MDIwMWY4MDAsIDB4MDAxMDQxNDIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmM1NSwgMHgwMjAxZjgwMCwgMHgwMDEwNmVkZSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YzRiLCAweDU5YTAwYTA3LCAweDQ4MDc4OGE3LCAweDU5YzQwMGEzLAorCTB4ODIwMDA1MDAsIDB4ZmVmZmZmZmYsIDB4ODIwMDA1NDAsIDB4ODAwMTgwMDAsCisJMHg0MDAwMDgwMCwgMHg4NDA0MGQyMCwgMHg0ODAzODhhMywgMHg0ODA3ODhhMywKKwkweDQ5N2I1MDRlLCAweDQyMDAwODAwLCAweDAwMDAwMDJkLCAweDQyMDAxMDAwLAorCTB4MDAxMDQxYmMsIDB4MDIwMWY4MDAsIDB4MDAxMDVmNjksIDB4NTlhMDA0MDcsCisJMHg4MDAwMDBjMiwgMHg4MDAwMDhjNCwgMHg4MDA1ZDQwMCwgMHg0MjAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDAwMDAzLAorCTB4NTlhMDAyMDcsIDB4ODAwMDAxMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDNhZmMsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHgwMDEwMzY2ZCwgMHgwMDEwMzY3MCwKKwkweDAwMTAzNjc4LCAweDAwMTAyMzEwLCAweDAwMTAzNjc1LCAweDAwMTAyMzEwLAorCTB4MDAxMDIzMTAsIDB4MDAxMDIzMTAsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzBjLCAweDU5YTAzYzA2LCAweDU5YTAwNDA3LCAweDU5YTA0YTA3LAorCTB4OTAyNDQ5YzAsIDB4ODAyNDRkNDAsIDB4NTlhMDA0MDksIDB4NTlhMDUyMDksCisJMHg5MDI4NTFjMCwgMHg4MDI4NTU0MCwgMHgwNDAxZmI0NiwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NDE3YTg4MDAsIDB4NDE3ODMwMDAsIDB4NDk3YjQwMDEsIDB4NDk3YjQwMDQsCisJMHg4MzJjNDQwMCwgMHgwMDAwMDAwNSwgMHg0ODIzNDAwMiwgMHg4YzFjM2QwNCwKKwkweDA0MDIwMDc4LCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDJhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDhlMywgMHgwNDAyMDAyNCwgMHg4YzFjM2QwMCwgMHgwNDAwMDAwOCwKKwkweDU5MzQwMDA5LCAweDQ0MDA0MDAwLCAweDU5MzQwMDA4LCAweDgwMjA0MDAwLAorCTB4NDQwMDQwMDAsIDB4ODAyMDQwMDAsIDB4MDQwMWYwMDcsIDB4NTkzNDAwMDcsCisJMHg0NDAwNDAwMCwgMHg1OTM0MDAwNiwgMHg4MDIwNDAwMCwgMHg0NDAwNDAwMCwKKwkweDgwMjA0MDAwLCAweDgzNDQwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDAwMDBkLAorCTB4ODM0NDA1ODAsIDB4MDAwMDA3ZmMsIDB4MDQwMDAwMGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDlmMywgMHgwNDAwMDAwMywgMHg4NTQ2OGQ1ZSwgMHgwNDAxZjAwNSwKKwkweDAyMDFmODAwLCAweDAwMTA0ODM4LCAweDA0MDIwMDAyLCAweDg1NDY4ZDVlLAorCTB4NDU0NDQwMDAsIDB4ODU0NjhkMWUsIDB4ODAyMDQwMDAsIDB4ODIxODM0MDAsCisJMHgwMDAwMDAwMywgMHg4MTQ2ODgwMCwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDdmMCwKKwkweDA0MDAxMDBlLCAweDhjMWMzZDA2LCAweDA0MDAwMDEwLCAweDgzNDQwNTgwLAorCTB4MDAwMDA3ZjAsIDB4MDQwMjAwMDQsIDB4NDIwMjg4MDAsIDB4MDAwMDA3ZmUsCisJMHgwNDAxZjAwNiwgMHg4MzQ0MDU4MCwgMHgwMDAwMDdmZiwgMHgwNDAyMDAwNywKKwkweDQyMDI4ODAwLCAweDAwMDAwN2ZjLCAweDgyMTgwNTgwLCAweDAwMDAwMDBmLAorCTB4MDQwMDAwMGIsIDB4MDQwMWY3YzAsIDB4ODAxODMxYzAsIDB4MDQwMjAwMDYsCisJMHg1OWEwMDgwMSwgMHg4MDA0MDhjNCwgMHg0ODA3NDQwNiwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMmMwLCAweDRhMDM0MDA0LCAweDAwMDAwMDAxLCAweDQ5NDc0MDAwLAorCTB4NTlhMDAwMDEsIDB4ODAxODA0MDAsIDB4NDgwMzQwMDEsIDB4NDgxZjQwMDMsCisJMHg0YTAxZDgwMSwgMHgwMDAwMDAwMCwgMHg0ODE5ZDgwNCwgMHg1OWEwMDAwMiwKKwkweDQ4MDFkODAzLCAweDQ4MjVkODA3LCAweDQ4MjlkODA4LCAweDQwMDBhODAwLAorCTB4NDAwMGEwMDAsIDB4NDAxOGIwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsCisJMHg0MGVjMTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDg1OCwgMHg0YTAxZDgwOSwKKwkweDAwMTAzNzJhLCAweDFjMDFmMDAwLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLAorCTB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsCisJMHgwMDEwMjMwNCwgMHg1OWEwMDAwNCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwOCwKKwkweDU5YTI4ODAwLCAweDU5YTA0MDAyLCAweDU5YTAzODAzLCAweDQxNzgzMDAwLAorCTB4NThlYzQ4MDcsIDB4NThlYzUwMDgsIDB4MDQwMWY3OGYsIDB4NTlhMDA4MDEsCisJMHg4MDA0MDhjNCwgMHg0ODA3NDQwNiwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwKKwkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDJmLCAweDAyMDFmODAwLAorCTB4MDAxMDQ5ZTcsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4ZTMsCisJMHgwNDAyMDAyOSwgMHg4MzQ0MDU4MCwgMHgwMDAwMDdmZSwgMHgwNDAwMDAxMSwKKwkweDgzNDQwNTgwLCAweDAwMDAwN2ZjLCAweDA0MDAwMDBlLCAweDAyMDFmODAwLAorCTB4MDAxMDQ5ZjMsIDB4MDQwMDAwMDUsIDB4NTkzNDA0MDMsIDB4ODQwMDA1NWUsCisJMHg0ODAyNmMwMywgMHgwNDAxZjAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDgzOCwKKwkweDA0MDIwMDA0LCAweDU5MzQwNDAzLCAweDg0MDAwNTVlLCAweDQ4MDI2YzAzLAorCTB4NDEzNGEwMDAsIDB4NDAyMGE4MDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDYsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg1OTM0MDAwNywgMHg0NDAwYTgwMCwKKwkweDU5MzQwMDA2LCAweDQ4MDBhODAxLCAweDU5MzQwMDA5LCAweDQ4MDBhODAyLAorCTB4NTkzNDAwMDgsIDB4NDgwMGE4MDMsIDB4NTkzNDA0MDMsIDB4ODQwMDA1MWUsCisJMHg0ODAyNmMwMywgMHg4MjIwNDQwMCwgMHgwMDAwMDAwYSwgMHg4MjE4MzQwMCwKKwkweDAwMDAwMDBhLCAweDgxNDY4ODAwLCAweDgzNDQwNDgwLCAweDAwMDAwN2YwLAorCTB4MDQwMDEwMGUsIDB4OGMxYzNkMDYsIDB4MDQwMDAwMTAsIDB4ODM0NDA1ODAsCisJMHgwMDAwMDdmMCwgMHgwNDAyMDAwNCwgMHg0MjAyODgwMCwgMHgwMDAwMDdmZSwKKwkweDA0MDFmMDA2LCAweDgzNDQwNTgwLCAweDAwMDAwN2ZmLCAweDA0MDIwMDA3LAorCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZmMsIDB4ODIxODA1ODAsIDB4MDAwMDAwMGEsCisJMHgwNDAwMDAwYiwgMHgwNDAxZjdiYiwgMHg4MDE4MzFjMCwgMHgwNDAyMDAwNiwKKwkweDU5YTAwODAxLCAweDgwMDQwOGM0LCAweDQ4MDc0NDA2LCAweDAyMDFmMDAwLAorCTB4MDAxMDIyYzAsIDB4NGEwMzQwMDQsIDB4MDAwMDAwMDEsIDB4NDk0NzQwMDAsCisJMHg1OWEwMDAwMSwgMHg4MDE4MDQwMCwgMHg0ODAzNDAwMSwgMHg0ODFmNDAwMywKKwkweDRhMDFkODAxLCAweDAwMDAwMDAwLCAweDQ4MTlkODA0LCAweDU5YTAwMDAyLAorCTB4NDgwMWQ4MDMsIDB4NDgyNWQ4MDcsIDB4NDgyOWQ4MDgsIDB4NDBlYzEwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDg1OCwgMHg0YTAxZDgwOSwgMHgwMDEwMzdhMSwKKwkweDFjMDFmMDAwLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsCisJMHg1OWEwMDAwNCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwOCwgMHg1OWEyODgwMCwKKwkweDU5YTA0MDAyLCAweDU5YTAzODAzLCAweDQxNzgzMDAwLCAweDU4ZWM0ODA3LAorCTB4NThlYzUwMDgsIDB4MDQwMWY3OGYsIDB4NTlhMDA4MDEsIDB4ODAwNDA4YzQsCisJMHg0ODA3NDQwNiwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg0MjAwMjgwMCwKKwkweDAwMDAwMDdlLCAweDU5YTAwYzA2LCAweDU5YTAxMjA3LCAweDU5YTAxYzA3LAorCTB4NTlhMDIyMDksIDB4ODIwNDA1MDAsIDB4MDAwMGZmMDAsIDB4ODQwMDAxYzAsCisJMHg4MjAwMzQ4MCwgMHgwMDAwMDAyMCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwKKwkweDgwMTQwNDgwLCAweDAyMDAxMDAwLCAweDAwMTAyMzEwLCAweDgyMDQwNTAwLAorCTB4MDAwMDAwZmYsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMjAsIDB4MDIwMDEwMDAsCisJMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwKKwkweDgyMDgwNTAwLCAweDAwMDBmZjAwLCAweDg0MDAwMWMwLCAweDgyMDAzNDgwLAorCTB4MDAwMDAwMjAsIDB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsIDB4ODAxNDA0ODAsCisJMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwgMHg4MjA4MDUwMCwgMHgwMDAwMDBmZiwKKwkweDgyMDAzNDgwLCAweDAwMDAwMDIwLCAweDAyMDAxMDAwLCAweDAwMTAyMzEwLAorCTB4ODAxNDA0ODAsIDB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsIDB4ODIwYzA1MDAsCisJMHgwMDAwZmYwMCwgMHg4NDAwMDFjMCwgMHg4MjAwMzQ4MCwgMHgwMDAwMDAyMCwKKwkweDAyMDAxMDAwLCAweDAwMTAyMzEwLCAweDgwMTQwNDgwLCAweDAyMDAxMDAwLAorCTB4MDAxMDIzMTAsIDB4ODIwYzA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDM0ODAsCisJMHgwMDAwMDAyMCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwKKwkweDAyMDAxMDAwLCAweDAwMTAyMzEwLCAweDgyMTAwNTAwLCAweDAwMDBmZjAwLAorCTB4ODQwMDAxYzAsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMjAsIDB4MDIwMDEwMDAsCisJMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwKKwkweDgyMTAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAzNDgwLCAweDAwMDAwMDIwLAorCTB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsIDB4ODAxNDA0ODAsIDB4MDIwMDEwMDAsCisJMHgwMDEwMjMxMCwgMHg5MDA0MDFjMCwgMHg4MDA4MGQ0MCwgMHg5MDBjMDFjMCwKKwkweDgwMTAxZDQwLCAweDgzYTgzNDAwLCAweDAwMDAwMDNhLCAweDQ0MDQzMDAwLAorCTB4ODAxODMwMDAsIDB4NDQwYzMwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsCisJMHgwNDAxZjllYywgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDQyMDAwODAwLCAweDAwMDAwMDBjLAorCTB4MDQwMWY4NTMsIDB4NGEwMWQ4MDksIDB4MDAxMDM4MjAsIDB4MWMwMWYwMDAsCisJMHg0MDMxZDgwMCwgMHg1OGVlNTgwZCwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwMiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLCAweDAwMTAyMzA0LAorCTB4ODMyY2E0MDAsIDB4MDAwMDAwMDQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGMsCisJMHg0MGM4YTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg1OGM4MDIwMCwKKwkweDgwMDAwNTQwLCAweDA0MDAwMDM0LCAweDU4YzgwNDAwLCAweDgyMDAwNTAwLAorCTB4ZmZmZmZmZmIsIDB4MDQwMjAwMzAsIDB4NThjODA0MDEsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAyZCwgMHg4MjAwMDQ4MCwgMHgwMDAwZmYwMSwgMHgwNDAyMTAyYSwKKwkweDU4YzgwMjAyLCAweDgyMDAwNDgwLCAweDAwMDAwMDVjLCAweDA0MDAxMDI2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDYzYTMsIDB4NThjODBjMDgsIDB4NThjODAyMDQsCisJMHg4MDA0MDQ4MCwgMHgwNDAwMTAyMCwgMHg1OGM4MDIwNCwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDA1LCAweDA0MDIxMDFjLCAweDU4YzgwMjA1LCAweDU4YzgwYzA4LAorCTB4ODAwNDA5MDIsIDB4ODAwNDA0ODAsIDB4MDQwMDEwMTcsIDB4NThjODBjMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjJmMSwgMHgwNDAwMDAxYiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MWI5LCAweDA0MDIwMDEyLCAweDQ5Nzk5NDBiLCAweDU5YzQwOGEzLAorCTB4ODIwNDBkNDAsIDB4MDAwMDAwMDIsIDB4NDgwNzg4YTMsIDB4NGEwMzg4MzAsCisJMHgwMDAwMDAwMSwgMHg0YTAzODgzMiwgMHgwMWZmZmZmZiwgMHg1OGM4MDIwMiwKKwkweDQ4MDMwODA0LCAweDAyMDFmODAwLCAweDAwMTA2MTliLCAweDAyMDFmMDAwLAorCTB4MDAxMDIyYzAsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMTAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjNmNSwgMHgwMjAxZjgwMCwgMHgwMDEwNjQwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MmU0LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDRjMDAwMDAwLAorCTB4NTlhMDEyMDcsIDB4NTlhMDA0MDcsIDB4OTAwODExYzAsIDB4ODAwODE1NDAsCisJMHg1OWEwMWEwOSwgMHg1OWEwMDQwOSwgMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwKKwkweDVjMDAwMDAwLCAweDA0MDFmMWFjLCAweDU5ODQwMDAwLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwNTQsIDB4NTk4NDAwMDIsIDB4OGMwMDA1MDQsCisJMHgwNDAwMDA1MSwgMHg4NDAwMDU0NiwgMHg0ODAzMDgwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MmU0LCAweDU5YzQwOGEzLCAweDgyMDQwZDAwLCAweGZmZmZmZmZkLAorCTB4NDgwNzg4YTMsIDB4NGM1YzAwMDAsIDB4NDIwMGI4MDAsIDB4MDAxMGFjMDAsCisJMHg1MDVlNjgwMCwgMHg4MTM2NjljMCwgMHgwNDAwMDAwOCwgMHg1OTM2NjAwZSwKKwkweDgxMzI2MWMwLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA2MmQ1LAorCTB4MDIwMDA4MDAsIDB4MDAxMDY0YWQsIDB4ODA1Y2I4MDAsIDB4ODI1YzA1ODAsCisJMHgwMDEwYjNmMCwgMHgwNDAyMDdmMywgMHg1OTg2NjAwMywgMHg4MTMyNjFjMCwKKwkweDA0MDAwMDBiLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDA5LAorCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMGI4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjJjMSwgMHg0MDVlNjAwMCwgMHgwNDAxZjdmNSwgMHg0OTdiMDgwMywKKwkweDQyMDBiODAwLCAweDAwMTBiNTFiLCAweDUwNWU2MDAwLCAweDgxMzI2MWMwLAorCTB4MDQwMDAwMTEsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDksCisJMHgwNDAyMDAwZCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDIwMDA5LCAweDU5MzI2ODA5LCAweDgxMzY2OWMwLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDBlOTksIDB4MDIwMWY4MDAsCisJMHgwMDEwNjJjMSwgMHg0NTc4YjgwMCwgMHg4MDVjYjgwMCwgMHg4MjVjMDU4MCwKKwkweDAwMTBiNTIzLCAweDA0MDIwN2U5LCAweDQyMDAwODAwLCAweDAwMTBiNTE5LAorCTB4NDk3ODA4MDEsIDB4NDk3ODA4MDAsIDB4NTlhODAwNjksIDB4ODIwMDA0MDAsCisJMHgwMDAwMDAwNywgMHg0ODAzNTA2OSwgMHgwMjAxZjgwMCwgMHgwMDEwNjNmNSwKKwkweDAyMDFmODAwLCAweDAwMTA2NDAyLCAweDVjMDBiODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDYxYjQsIDB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5YTAwNDA3LCAweDU5YTAyMjA3LAorCTB4OTAxMDIxYzAsIDB4ODAxMDI1NDAsIDB4NTlhMDA0MDksIDB4NTlhMDJhMDksCisJMHg5MDE0MjljMCwgMHg4MDE0MmQ0MCwgMHgwNDAxZjkxZSwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NDE3YTg4MDAsIDB4NDE3ODE4MDAsIDB4NDk3YjQwMDEsIDB4NDk3YjQwMDMsCisJMHg4MzJjMzQwMCwgMHgwMDAwMDAwNCwgMHg0ODFiNDAwMiwgMHg0MTQ0MDAwMCwKKwkweDgxYWMwNDAwLCAweDUwMDI2ODAwLCAweDgxMzY2OWMwLCAweDA0MDAwMDBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsIDB4MDQwMjAwMDgsIDB4NTkzNDAwMDIsCisJMHg0ODAwMzAwMCwgMHg0OTQ0MzAwMSwgMHg4MjE4MzQwMCwgMHgwMDAwMDAwMiwKKwkweDgyMGMxYzAwLCAweDAwMDAwMDAyLCAweDgxNDY4ODAwLCAweDgzNDQwNDgwLAorCTB4MDAwMDA4MDAsIDB4MDQwMDAwMDUsIDB4ODIwYzA0ODAsIDB4MDAwMDAwMTAsCisJMHgwNDAyMTAwYiwgMHgwNDAxZjdlYSwgMHg4MDBjMTljMCwgMHgwNDAyMDAwNiwKKwkweDU5YTAwODAxLCAweDgwMDQwOTAyLCAweDQ4MDc0NDA2LCAweDAyMDFmMDAwLAorCTB4MDAxMDIyYzAsIDB4NGEwMzQwMDMsIDB4MDAwMDAwMDEsIDB4NDk0NzQwMDAsCisJMHg1OWEwMDAwMSwgMHg4MDBjMDQwMCwgMHg0ODAzNDAwMSwgMHg0MGVjMTAwMCwKKwkweDRhMDAxMDAxLCAweDAwMDAwMDAwLCAweDQ4MGMxMDA0LCAweDU5YTAwMDAyLAorCTB4NDgwMDEwMDMsIDB4NDgxMDEwMDcsIDB4NDgxNDEwMDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDg1OCwgMHg0YTAxZDgwOSwgMHgwMDEwMzkyMCwgMHgxYzAxZjAwMCwKKwkweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NTlhMDAwMDMsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDAwOCwgMHg1OWEyODgwMCwgMHg1OWEwMzAwMiwKKwkweDQxNzgxODAwLCAweDQwZWMxMDAwLCAweDU4MDgyMDA3LCAweDU4MDgyODA4LAorCTB4MDQwMWY3YmYsIDB4NTlhMDA4MDEsIDB4ODAwNDA5MDIsIDB4NDgwNzQ0MDYsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NTlhODAwMjYsIDB4OGMwMDA1MGEsIDB4MDQwMjAwMDcsIDB4OGMwMDA1MDYsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAxNiwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzBjLCAweDA0MDFmOGJiLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTlhMDBjMDYsCisJMHg4MDA0MDkwMiwgMHg1OWEwMDQwNywgMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwKKwkweDgwMDgxNTQwLCAweDU5YTAwNDA5LCAweDU5YTAxYTA5LCAweDkwMGMxOWMwLAorCTB4ODAwYzFkNDAsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWY4Y2UsCisJMHg0YTAxZDgwOSwgMHgwMDEwMzk1YiwgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwKKwkweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NTkyYzAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwNWM5YSwgMHgwMjAwMDgwMCwgMHgwMDEwNDVhNiwKKwkweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDQ5NDc0MDAxLCAweDQ4MWE2ODAyLAorCTB4NTkyYzAwMGEsIDB4ODIwMDFkODAsIDB4NzAwMDAwMDAsIDB4MDQwMjAwMDcsCisJMHgwNDAxZjg5MCwgMHgwNDAyMDAxMSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDgyMDAxZDgwLCAweDcyMDAwMDAwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4MDQwMWY4ODYsIDB4MDQwMjA4ODUsCisJMHgwNDAyMDg4NCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU4ZWU1ODBkLCAweDRhMDI1YzA0LAorCTB4MDAwMDgwMDAsIDB4NDk3YTVhMDQsIDB4NTkyYzMyMDgsIDB4ODAxODMxMDIsCisJMHg1OTJjMTgwMSwgMHg0YTAwMTgwNSwgMHgwMTAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MGQxLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAzLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NGEwMWQ4MDksIDB4MDAxMDM5OTUsCisJMHgxYzAxZjAwMCwgMHg1OTJjNDAwMCwgMHg1OTJjMDAwNSwgMHg4MjAwMDU4MCwKKwkweDAxMDAwMDAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA0LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4ODMyYzNjMDAsIDB4MDAwMDAwMDUsCisJMHg0MDFjYTAwMCwgMHg0MDFjYTgwMCwgMHg1ODIwMjgwYSwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAyLCAweDgyMTQzNTgwLCAweDcwMDAwMDAwLCAweDA0MDAwMDAzLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMGYsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMjgsCisJMHg0MDFjMDAwMCwgMHg1ODIwMTAwNiwgMHg1ODIwMTgwNywgMHg1ODIwMjIwNSwKKwkweDgwMTAyMTAyLCAweDgyMTQzNTgwLCAweDcwMDAwMDAwLCAweDA0MDIwMDA4LAorCTB4ODIxMDM0ODAsIDB4MDAwMDAwMDIsIDB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjA2ZSwgMHg4MjE0MzU4MCwKKwkweDcyMDAwMDAwLCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDgyMTAzNDgwLAorCTB4MDAwMDAwMmEsIDB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwZiwgMHgwNDAxZjg2MywgMHg0YTAxZDgwOSwgMHgwMDEwMzljOSwKKwkweDFjMDFmMDAwLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWU1ODBlLAorCTB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsCisJMHgwMDEwMjMwNCwgMHg1OTJlNTgwMCwgMHg4MzJjMGMwMCwgMHgwMDAwMDAwNSwKKwkweDQwMDRhMDAwLCAweDQwMDRhODAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDBmLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFiMjgsIDB4NDBlYzEwMDAsIDB4NGEwMDEwMDEsCisJMHgwMDAwMDAwMCwgMHg0YTAwMTAwNCwgMHgwMDAwMDAwZiwgMHg0ODA0MTAwMywKKwkweDAyMDFmODAwLCAweDAwMTAwODU4LCAweDRhMDFkODA5LCAweDAwMTAzOWU1LAorCTB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsIDB4NThlZTU4MGUsCisJMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwKKwkweDAwMTAyMzA0LCAweDgzMmMwYzAwLCAweDAwMDAwMDA1LCAweDQwMDRhMDAwLAorCTB4NDAwNGE4MDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIyOCwgMHg0MGVjMTAwMCwgMHg0YTAwMTAwMSwgMHgwMDAwMDAwMCwKKwkweDRhMDAxMDA0LCAweDAwMDAwMDBjLCAweDQ4MDQxMDAzLCAweDAyMDFmODAwLAorCTB4MDAxMDA4NTgsIDB4NGEwMWQ4MDksIDB4MDAxMDIyYjksIDB4MWMwMWYwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAxMCwgMHg0OTdhNTgwMCwKKwkweDU4ZWMwMDBkLCAweDgwMDAwNTQwLCAweDA0MDIwMDA0LCAweDQ5MmRkODBkLAorCTB4NDkyZGQ4MGUsIDB4MDQwMWYwMDcsIDB4NThlYzAwMGUsIDB4NDgwMjU4MDAsCisJMHg4MjAwMDQwMCwgMHgwMDAwMDAwMSwgMHg0NTJjMDAwMCwgMHg0OTJkZDgwZSwKKwkweDgzMmMwNDAwLCAweDAwMDAwMDA0LCAweDQ5MmZjODU3LCAweDQ4MDNjODU3LAorCTB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NDhlZmM4NTcsIDB4NThlYzQwMGQsCisJMHg0ODIzYzg1NywgMHg4MDIwNDFjMCwgMHgwNDAwMDAwNywgMHg0MDIyNTgwMCwKKwkweDU5MmM0MDAxLCAweDQ5N2E1ODAxLCAweDAyMDFmODAwLCAweDAwMTAwN2Y0LAorCTB4MDQwMWY3ZjgsIDB4NDk3OWQ4MGQsIDB4NDk3OWQ4MGUsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMywKKwkweDQyMDAzMDAwLCAweDAwMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ4MDdjODU3LAorCTB4NDgwYmM4NTcsIDB4NDgwZmM4NTcsIDB4NDgxYmM4NTcsIDB4NDhlZmM4NTcsCisJMHg0ODE5ZDgwMSwgMHg4MDA0MDljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDQ4MDVkODA0LCAweDQ4MDFkODAzLCAweDQ4MDlkODA3LCAweDQ4MGRkODA4LAorCTB4NDBlYzEwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4NTgsIDB4NGEwMWQ4MDksCisJMHgwMDEwMjJiOSwgMHgxYzAxZjAwMCwgMHg4MDAwMmQ4MCwgMHg0ODBiYzg1NywKKwkweDQ4MGZjODU3LCAweDQ4MTNjODU3LCAweDQ4MTdjODU3LCAweDRkMmMwMDAwLAorCTB4NGRhMDAwMDAsIDB4NDIwMzQwMDAsIDB4MDAxMGI0YTQsIDB4NTlhMDAwMTcsCisJMHg4MDAwMDFjMCwgMHgwNDAyMDAxMywgMHgwNDAwNjAxMiwgMHg0ODBiYzAyMCwKKwkweDQ4MGZjMDIxLCAweDQ4MTNjMDIyLCAweDQ4MTdjMDIzLCAweDkwMDgxMWMwLAorCTB4ODIwODE1NDAsIDB4MDAwMDAwMTIsIDB4NDgwYmMwMTEsIDB4NTllMDAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAyMDAwNCwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKKwkweDA0MDFmMDUzLCAweDRhMDNjMDE3LCAweDAwMDAwMDAyLCAweDA0MDFmN2ZiLAorCTB4NGMwNDAwMDAsIDB4NGMxYzAwMDAsIDB4ODAwMDA4MDAsIDB4NDgwNzQwMTcsCisJMHg1OWEwMzgxYSwgMHg0ODFmYzg1NywgMHg4MDFjMzljMCwgMHgwNDAyMDAyNywKKwkweDgyMDAwNDgwLCAweDAwMDAwMDBhLCAweDA0MDIxMDEwLCAweDU5YTAwMDE4LAorCTB4ODAwMDAwMDAsIDB4NDgwMzQwMTgsIDB4NTlhMDAyMTksIDB4ODIwMDA0MDAsCisJMHgwMDAwMDAwMiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAxMywgMHg0ODAzNDIxOSwKKwkweDA0MDAxMDAzLCAweDQ5N2I0MjE5LCAweDQxNzgwMDAwLCAweDU5YTAzODE2LAorCTB4ODAxYzNjMDAsIDB4MDQwMWYwMzAsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdlNCwgMHgwNDAwMDAwNywgMHg0OTJmNDAxYSwgMHg0OTJmNDAxYiwKKwkweDQxMmMzODAwLCAweDQ5N2I0MjFjLCAweDQ5N2E1ODEzLCAweDA0MDFmMDI2LAorCTB4NTk4ODAwNTEsIDB4ODAwMDAwMDAsIDB4NDgwMzEwNTEsIDB4NTlhMDAwMTcsCisJMHg4MDAwMDA0MCwgMHg0ODAzNDAxNywgMHg1OWEwMDIxOSwgMHg1OWEwMzgxNiwKKwkweDgwMWMzYzAwLCAweDA0MDFmMDFjLCAweDU5YTAwMjFjLCAweDgyMDAwNDAwLAorCTB4MDAwMDAwMDIsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTIsIDB4MDQwMjEwMDQsCisJMHg0ODAzNDIxYywgMHg4MDFjM2MwMCwgMHgwNDAxZjAxMywgMHgwMjAxZjgwMCwKKwkweDAwMTAwN2U0LCAweDA0MDIwMDBiLCAweDU5ODgwMDUxLCAweDgwMDAwMDAwLAorCTB4NDgwMzEwNTEsIDB4NTlhMDAwMTcsIDB4ODAwMDAwNDAsIDB4NDgwMzQwMTcsCisJMHg0ODAzYzg1NiwgMHg1OWEwMDIxYywgMHg4MDFjM2MwMCwgMHgwNDAxZjAwNiwKKwkweDQ5MmY0MDFhLCAweDQ5MmMzODEzLCAweDQxMmMzODAwLCAweDQ5N2I0MjFjLAorCTB4NDk3YTU4MTMsIDB4NDgwODNjMDAsIDB4NDgwYzNhMDAsIDB4NDgxMDNjMDEsCisJMHg0ODE0M2EwMSwgMHg1YzAwMzgwMCwgMHg1YzAwMDgwMCwgMHg1YzAzNDAwMCwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ4MGZjODU3LCAweDQ4MTNjODU3LAorCTB4NDgxYmM4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MTMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHg4MDE4MDBkMCwgMHg0MDAwMjgwMCwgMHg0MjAwMTAwMCwKKwkweDAwMDA4MDE0LCAweDA0MDFmNzg2LCAweDRjMDAwMDAwLCAweDU5OWMwMDE3LAorCTB4OGMwMDA1MTIsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsCisJMHg1OTljMDAxOCwgMHg4YzAwMDUwZSwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKKwkweDU5YTgwODIxLCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5OWMwMDE3LCAweDhjMDAwNTBhLAorCTB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDgsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjMwYywgMHg1OTM0MDQwNSwgMHg4YzAwMDUwOCwgMHgwNDAyMDAwNCwKKwkweDhjMDAwNTBhLCAweDAyMDIwMDAwLCAweDAwMTAzNGRiLCAweDQ5N2E1YTA0LAorCTB4NDk3YTU4MDUsIDB4NGEwMjVjMDQsIDB4MDAwMDgwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTE3NiwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywKKwkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDRhMDFkODA5LCAweDAwMTAzYWVkLAorCTB4MWMwMWYwMDAsIDB4NTkyYzAwMDUsIDB4ODIwMDA1ODAsIDB4MDEwMDAwMDAsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMzBjLCAweDU5YTI4YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LAorCTB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4MDIwMWYwMDAsIDB4MDAxMDM0ZGIsCisJMHg4MjAwMTU4MCwgMHgwMDAwZmZmZiwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwKKwkweDAwMTA1YzlhLCAweDAyMDAwODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDBjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVmYWUsIDB4MDQwMWYwMDksIDB4NDIwMjg4MDAsCisJMHgwMDAwMDdlZiwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwgMHgwMjAwMDgwMCwKKwkweDAwMTA1ZmFlLCAweDgxNDY4ODQwLCAweDA0MDIxN2ZiLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NGMwYzAwMDAsIDB4NGQzNDAwMDAsIDB4NGQ0NDAwMDAsCisJMHg0MjAyODgwMCwgMHgwMDAwMDdmZSwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwKKwkweDA0MDIwMDA5LCAweDU5MzQxODBhLCAweDgyMGMxZDAwLCAweDAwMDAwMDAxLAorCTB4ODIwYzFkODAsIDB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsIDB4MDAwMDgwMWIsCisJMHgwNDAxZmYxZSwgMHg1YzAyODgwMCwgMHg1YzAyNjgwMCwgMHg1YzAwMTgwMCwKKwkweDFjMDFmMDAwLCAweDU5OWMwMDE3LCAweDhjMDAwNTA4LCAweDFjMDFmMDAwLAorCTB4NDhlZmM4NTcsIDB4MDQwMTEwMDAsIDB4NDhlZmM4NDAsIDB4NGEwM2M4NDIsCisJMHgwMDAwMDAxMSwgMHg0MDAwMDAwMCwgMHgwNDAxMTdmZiwgMHg0YTAxZDgwZiwKKwkweGJlZWZiZWVmLCAweDFjMDFmMDAwLCAweDQ5N2I0MDAwLCAweDQ5N2I0MDAxLAorCTB4NDk3YjQwMDIsIDB4NDk3YjQwMDMsIDB4NDk3YjQwMDQsIDB4MWMwMWYwMDAsCisJMHg1OWM0MDBhNCwgMHg0YzU4MDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNDgwLCAweDAwMDAwMDA3LAorCTB4MDQwMDEwMGEsIDB4ODIwMDZjODAsIDB4MDAwMDAwMDYsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjgwNywgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwKKwkweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDA0MDFmOTA2LCAweDA0MDFmN2ZiLAorCTB4MDAxMDNiNTEsIDB4MDAxMDNiNTcsIDB4MDAxMDNiN2MsIDB4MDAxMDNiOWUsCisJMHgwMDEwM2M1OSwgMHg1OWM0MDgwNiwgMHg4YzA0MGQwMCwgMHgwNDAyMDAwMywKKwkweDg0MDQwZDQwLCAweDQ4MDc4ODA2LCAweDFjMDFmMDAwLCAweDU5YzQwMDA1LAorCTB4OGMwMDA1MzQsIDB4MDIwMjAwMDAsIDB4MDAxMDQyOWUsIDB4NGEwMzg4MDUsCisJMHhmZmZmZmZmZiwgMHg0MjAwNjAwMCwgMHgwMDAyMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MjgyLCAweDU5YTgwMDE1LCAweDgyMDAwNTAwLCAweGZmZmZmZmZhLAorCTB4ODQwMDA1NDIsIDB4NDgwMzUwMTUsIDB4NDk3YjUwMjYsIDB4NDIwMDA4MDAsCisJMHgwMDEwYmUyMSwgMHg0NTc4MDgwMCwgMHg0OTdiNTAxMywgMHg0MjAwNjAwMCwKKwkweGZmZWZmZmZmLCAweDQyMDA2ODAwLCAweDQwMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQyN2QsIDB4NTljNDAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmMGYsCisJMHg0ODAzODgwNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxMCwgMHg0MjAwMTAwMCwKKwkweDAwMTA0MWYzLCAweDAyMDFmODAwLCAweDAwMTA1ZjgzLCAweDA0MDFmMDAxLAorCTB4NDIwMDYwMDAsIDB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDA4MDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHg0MjAwYjAwMCwgMHgwMDAwMDBjOCwKKwkweDU5YzQwMGE0LCAweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMGEsIDB4MDQwMDAwMGYsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjksCisJMHg0OTdiNTAxNCwgMHg0MjAwNjAwMCwgMHhiZjdmZmZmZiwgMHg0MjAwNjgwMCwKKwkweDAwMDE4MDAwLCAweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDQyMDA2MDAwLAorCTB4ZmZmZWZmZmYsIDB4NDE3ODY4MDAsIDB4MDIwMWYwMDAsIDB4MDAxMDQyN2QsCisJMHg0OTdiNTAxNCwgMHg0YTAzNTAxMiwgMHgwMDAwMDAwMCwgMHg4MDAwMDU4MCwKKwkweDAyMDFmMDAwLCAweDAwMTA0Mjg5LCAweDRhMDM4ODA1LCAweGZmZmZmZmZmLAorCTB4NTlhODAwMTIsIDB4ODIwMDBjODAsIDB4MDAwMDAwMDQsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwM2JhOSwgMHgwMDEwM2JkNiwKKwkweDAwMTAzYzRmLCAweDQ4MDNjODU2LCAweDU5YzQwMGEzLCAweDg0MDAwNTFlLAorCTB4NDgwMzg4YTMsIDB4NGEwMzUwMTIsIDB4MDAwMDAwMDEsIDB4NTljNDAwMDgsCisJMHg4NDAwMDU0ZSwgMHg0ODAzODgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI2MywKKwkweDQyMDA3ODAwLCAweDAwMTBiNTRjLCAweDRhMDA3ODA2LCAweDExMDEwMDAwLAorCTB4NDIwMGEwMDAsIDB4MDAxMGI0MDIsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTMsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKKwkweDQ5N2I4ODAyLCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDQ5N2I1MDRhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQxNmUsIDB4NGEwMzUwNGEsIDB4MDAwMDAwMDEsCisJMHg0OTdiNTAxNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDI5MCwgMHg0MjAwNjAwMCwKKwkweGZmZmZmZmZmLCAweDQyMDA2ODAwLCAweDAwMDgwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQyN2QsIDB4NDIwMDYwMDAsIDB4ZmZmN2ZmZmYsIDB4NDE3ODY4MDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwNDI3ZCwgMHg1OWE4MDAxNiwgMHg0OTdiNTAxNiwKKwkweDgwMDAyNTQwLCAweDA0MDAwMDY2LCAweDU5YzQwMDA0LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjAwNzEsIDB4NTlhODA4MTUsIDB4OGMwNDBkMDIsCisJMHgwNDAwMDA0YiwgMHg4MjEwMDU4MCwgMHgwMDAwMDAwYywgMHgwNDAyMDA0ZiwKKwkweDgyMTAwNDAwLCAweDAwMDAwMDE4LCAweDgwMDBiMTA0LCAweDQxY2MxMDAwLAorCTB4NDIwMDE4MDAsIDB4MDAxMGI1NGMsIDB4NTAwODA4MDAsIDB4NTAwYzAwMDAsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDAxYSwgMHg4MDA4MTAwMCwgMHg4MDBjMTgwMCwKKwkweDgwNThiMDQwLCAweDA0MDIwN2Y5LCAweDAyMDFmODAwLCAweDAwMTA0MjkwLAorCTB4NDIwMDYwMDAsIDB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDA1MDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHg0YTAzNTAxMiwgMHgwMDAwMDAwMiwKKwkweDRhMDM1MDE0LCAweDAwMDAwMDAyLCAweDQyMDAwODAwLCAweDAwMDAwN2QwLAorCTB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNmUsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDI2MywgMHgwNDAxZjA0OCwgMHg1OWNjMDgwNiwKKwkweDgyMDQwZDgwLCAweDExMDEwMDAwLCAweDA0MDIwMDI4LCAweDU5Y2MwODAwLAorCTB4ODIwNDA1MDAsIDB4MDBmZmZmZmYsIDB4MDQwMDAwMWEsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDBlZiwgMHgwNDAyMDAxNywgMHg1OWNjMDgwMSwgMHg4MjA0MDUwMCwKKwkweDAwZmZmZmZmLCAweDgyMDAwNTgwLCAweDAwMDAwMGVmLCAweDA0MDIwMDExLAorCTB4ODNjY2E0MDAsIDB4MDAwMDAwMDcsIDB4NDIwMGE4MDAsIDB4MDAxMGI0MDIsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg1MDUwMDgwMCwgMHg1MDU0MDAwMCwKKwkweDgwMDQwNDgwLCAweDA0MDAxMDA3LCAweDA0MDIwMDEwLCAweDgwNTBhMDAwLAorCTB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjgsIDB4MDQwMWYwMGIsCisJMHg1OWE4MDAxNSwgMHg4NDAwMDUwMiwgMHg0ODAzNTAxNSwgMHg0MWNjYTAwMCwKKwkweDQyMDBhODAwLCAweDAwMTBiNTRjLCAweDQyMDBiMDAwLCAweDAwMDAwMDA5LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQyOTAsCisJMHg0MjAwNjAwMCwgMHhmZmZmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDA4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDQyMDA2MDAwLCAweGZmZjdmZmZmLAorCTB4NDE3ODY4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NDIwMDYwMDAsCisJMHhmZmZmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDAwNDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MjdkLCAweDU5YzQwMDA0LCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLAorCTB4MDQwMjAwMDYsIDB4NDk3YjUwMTYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsCisJMHgwMjAxZjAwMCwgMHgwMDEwNDE2ZSwgMHgxYzAxZjAwMCwgMHgxYzAxZjAwMCwKKwkweDU5YTgwMDE0LCAweDgyMDA2ZDgwLCAweDAwMDAwMDBmLCAweDA0MDAwMDA1LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMWIsIDB4MDIwMjA4MDAsIDB4MDAxMDQxMzksCisJMHgxYzAxZjAwMCwgMHg1OWE4MDAxNSwgMHg4NDAwMDUwNiwgMHg0ODAzNTAxNSwKKwkweDQ5N2I1MDRhLCAweDU5YTgwMDE0LCAweDgyMDAwYzgwLCAweDAwMDAwMDFlLAorCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsIDB4MDAxMDNjOTcsCisJMHgwMDEwM2NhYywgMHgwMDEwM2NkNSwgMHgwMDEwM2NmMCwgMHgwMDEwM2QxNCwKKwkweDAwMTAzZDQ1LCAweDAwMTAzZDY4LCAweDAwMTAzZDliLCAweDAwMTAzZGJlLAorCTB4MDAxMDNkZTQsIDB4MDAxMDNlMjEsIDB4MDAxMDNlNDgsIDB4MDAxMDNlNWYsCisJMHgwMDEwM2U3MSwgMHgwMDEwM2U4YSwgMHgwMDEwM2VhMCwgMHgwMDEwM2VhNSwKKwkweDAwMTAzZWNkLCAweDAwMTAzZWYwLCAweDAwMTAzZjE2LCAweDAwMTAzZjM5LAorCTB4MDAxMDNmNmMsIDB4MDAxMDNmYWUsIDB4MDAxMDNmZDgsIDB4MDAxMDNmZjAsCisJMHgwMDEwNDAzMCwgMHgwMDEwNDA0OSwgMHgwMDEwNDA1YywgMHgwMDEwNDA1ZCwKKwkweDQ4MDNjODU2LCAweDQyMDJkODAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMDAwMDcsIDB4NDIwMDYwMDAsIDB4ZmZmZmZmZDcsCisJMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHgwNDAxZjAwYiwKKwkweDU5YzQwMDA2LCAweDgyMDAwNTAwLCAweGZmZmZmZjBmLCAweDQ4MDM4ODA2LAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwZjAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5M2QsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTA5OCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDQyMDA2MDAwLCAweGJmN2ZmZmZmLCAweDQyMDA2ODAwLCAweDAwNDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMDEsCisJMHg0MjAwMTAwMCwgMHgwMDEwNDFmMywgMHgwMjAxZjgwMCwgMHgwMDEwNWZhNCwKKwkweDAyMDFmODAwLCAweDAwMTA0MWY4LCAweDQyMDAwODAwLCAweDAwMDAwN2QwLAorCTB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWYwMDAsIDB4MDAxMDYwNmUsCisJMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwgMHgwNDAyMDAyNSwKKwkweDQ4MDNjODU3LCAweDQyMDA2MDAwLCAweGZmYmZmZmZmLCAweDQxNzg2ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NTljNDAwMDQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwMywgMHgwNDAyMDAxYiwgMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwKKwkweDExMDIwMDAwLCAweDA0MDIwMDE2LCAweDU5Y2MxMDA3LCAweDhjMDgxNTNlLAorCTB4MDQwMDAwMGIsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgzZiwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDU5YTgwMDE1LCAweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LCAweDQyMDAxMDAwLAorCTB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsIDB4MDAxMDVmOTAsIDB4NGEwMzUwMTQsCisJMHgwMDAwMDAxMCwgMHgwNDAxZjlkNCwgMHgwNDAxZjAwMiwgMHg0OTdiNTAxNiwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRhMDM1MDE0LCAweDAwMDAwMDAzLAorCTB4NDIwMDYwMDAsIDB4YmYzZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDAxMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHg0MjAwMTAwMCwgMHgwMDEwNDFmMywKKwkweDAyMDFmODAwLCAweDAwMTA1ZmE0LCAweDAyMDFmODAwLCAweDAwMTA0MWY4LAorCTB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsIDB4MDAxMDVmOTAsCisJMHg0MjAwNzgwMCwgMHgwMDEwYjU1MiwgMHg0NjAwNzgwMCwgMHgxMTAyMDAwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDAyMDFmMDAwLCAweDAwMTA0MTZlLAorCTB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMjEsIDB4NDgwM2M4NTcsCisJMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwKKwkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDE2LAorCTB4NTljYzEwMDYsIDB4ODIwODE1ODAsIDB4MTEwMjAwMDAsIDB4MDQwMjAwMTIsCisJMHg1OWNjMTAwNywgMHg4YzA4MTUzZSwgMHgwNDAwMDAwYiwgMHg1OWE4MDAxNSwKKwkweDhjMDAwNTA0LCAweDA0MDIwMDA4LCAweDQyMDAwMDAwLCAweDAwMTBiODNmLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDQsCisJMHg0ODAzNTAxNSwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwNCwgMHgwNDAxZjgwNSwKKwkweDA0MDFmMDAzLCAweDAyMDFmODAwLCAweDAwMTA0MTM5LCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMDUsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwgMHgwMDEwYjU1MiwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDQyMDA3ODAwLAorCTB4MDAxMGI1NTIsIDB4NDYwMDc4MDAsIDB4MTEwMzAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDEzZSwgMHgwNDAyMDAxNCwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwMCwKKwkweDA0MDIwMDExLCAweDU5YTgwODEwLCAweDgyMDQwNTgwLCAweDAwZmZmZmZmLAorCTB4MDQwMDAwMGQsIDB4ODIwNDBkMDAsIDB4MDAwMDAwZmYsIDB4ODIwNDA0MDAsCisJMHgwMDEwMjEwZSwgMHg1MDAwMDgwMCwgMHg4MDA0MDkxMCwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDA0LCAweDA0MDFmYjliLCAweDA0MDAwMDBiLCAweDAyMDFmODAwLAorCTB4MDAxMDQyMGQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDQsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNywgMHg0MjAwYTgwMCwgMHgwMDEwYjU1MywgMHgwMjAxZjgwMCwKKwkweDAwMTBhYjE3LCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDAyMDFmMDAwLAorCTB4MDAxMDQxNmUsIDB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMjAsCisJMHg0ODAzYzg1NywgMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZjkwLCAweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LAorCTB4MDQwMjAwMTYsIDB4NTljYzEwMDYsIDB4ODIwODE1ODAsIDB4MTEwMzAwMDAsCisJMHgwNDAyMDAxMiwgMHg1OWNjMTAwNywgMHg4YzA4MTUzZSwgMHgwNDAwMDAwYiwKKwkweDU5YTgwMDE1LCAweDhjMDAwNTA0LCAweDA0MDIwMDA4LCAweDQyMDAwMDAwLAorCTB4MDAxMGI4M2YsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NTlhODAwMTUsCisJMHg4NDAwMDU0NCwgMHg0ODAzNTAxNSwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwNiwKKwkweDA0MDFmODA0LCAweDA0MDFmMDAyLCAweDA0MDFmYmQzLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMDcsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwgMHgwMDEwYjU1MiwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDQyMDA3ODAwLAorCTB4MDAxMGI1NTIsIDB4NDYwMDc4MDAsIDB4MTEwNDAwMDAsIDB4MDQwMWZiYzcsCisJMHgwNDAyMDAyMCwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwMCwgMHgwNDAyMDAxZCwKKwkweDU5OWMwMDE3LCAweDhjMDAwNTAwLCAweDA0MDAwMDFhLCAweDU5OWMxNDAyLAorCTB4ODIwODA0ODAsIDB4MDAwMDAwN2YsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCisJMHg0YzA4MDAwMCwgMHg4MjA4MTQwMCwgMHgwMDEwMjEwZSwgMHg1MDA4MTAwMCwKKwkweDgyMDgxNTAwLCAweDAwMDAwMGZmLCAweDQ4MGI1MDEwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsIDB4NWMwMDA4MDAsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwNCwgMHgwNDAxZmIzZSwgMHgwNDAwMDAwNSwKKwkweDA0MDFmZDJiLCAweDA0MDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTAxNWZlLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWYzZDQsIDB4NTlhODAwMTYsCisJMHg4MDAwMDU0MCwgMHgwNDAwMDAyMCwgMHg0ODAzYzg1NywgMHg0MjAwMTAwMCwKKwkweDAwMTA0MTQ4LCAweDAyMDFmODAwLCAweDAwMTA1ZjkwLCAweDU5YTgwMDE2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjAwMTYsIDB4NTljYzEwMDYsCisJMHg4MjA4MTU4MCwgMHgxMTA0MDAwMCwgMHgwNDAyMDAxMiwgMHg1OWNjMTAwNywKKwkweDhjMDgxNTNlLCAweDA0MDAwMDBiLCAweDU5YTgwMDE1LCAweDhjMDAwNTA0LAorCTB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsIDB4MDAxMGI4M2YsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHg1OWE4MDAxNSwgMHg4NDAwMDU0NCwgMHg0ODAzNTAxNSwKKwkweDRhMDM1MDE0LCAweDAwMDAwMDA4LCAweDA0MDFmODA0LCAweDA0MDFmMDAyLAorCTB4MDQwMWZiN2QsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsCisJMHgwMDAwMDAwOSwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwKKwkweDAwMTBiNTUyLCAweDQyMDBiMDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMGFiMTcsIDB4NDIwMDc4MDAsIDB4MDAxMGI1NTIsIDB4NDYwMDc4MDAsCisJMHgxMTA1MDEwMCwgMHgwNDAxZmI3MSwgMHgwNDAyMDAwYSwgMHg1OWE4MDAxNSwKKwkweDhjMDAwNTAwLCAweDA0MDIwMDA3LCAweDA0MDFmYThjLCAweDA0MDIwMDA1LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE1ZmUsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZmI5NCwgMHgwNDAxZmI2MywKKwkweDA0MDIwZWE0LCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDk4NzQsIDB4NWMwMjc4MDAsIDB4MWMwMWYwMDAsCisJMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAzYSwgMHg0ODAzYzg1NywKKwkweDQyMDAxMDAwLCAweDAwMTA0MTQ4LCAweDAyMDFmODAwLCAweDAwMTA1ZjkwLAorCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjAwMzAsCisJMHg1OWNjMTAwNiwgMHg4MjA4MDUwMCwgMHgxMTA1MDAwMCwgMHg4MjAwMDU4MCwKKwkweDExMDUwMDAwLCAweDA0MDIwMDJhLCAweDhjMDgxNTEwLCAweDA0MDAwMDE0LAorCTB4NTljYzEwMDcsIDB4OGMwODE1M2UsIDB4MDQwMDAwMGIsIDB4NTlhODAwMTUsCisJMHg4YzAwMDUwNCwgMHgwNDAyMDAwOCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgzZiwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5YTgwMDE1LCAweDg0MDAwNTQ0LAorCTB4NDgwMzUwMTUsIDB4NGEwMzUwMTMsIDB4MDAwMDAwMDEsIDB4NGEwMzUwMTQsCisJMHgwMDAwMDAwYSwgMHgwNDAxZjgxOCwgMHgwNDAxZjAxNiwgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDEzLCAweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLAorCTB4NTlhODAwMTUsIDB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjgzZiwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OWE4MDAxNSwKKwkweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LCAweDQ5N2I1MDEzLCAweDRhMDM1MDE0LAorCTB4MDAwMDAwMGUsIDB4MDQwMWY4NmQsIDB4MDQwMWYwMDIsIDB4MDQwMWZiMWEsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwYiwKKwkweDQyMDAxMDAwLCAweDAwMTBiNTUzLCAweDQwMDhhODAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMjAsIDB4NDYwMGE4MDAsIDB4ZmZmZmZmZmYsIDB4ODA1NGE4MDAsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0MjAwNzgwMCwgMHgwMDEwYjU1MiwKKwkweDQ2MDA3ODAwLCAweDExMDYwMDAwLCAweDQyMDAxMDAwLCAweDAwMTBiNTUzLAorCTB4MDQwMWZiMGEsIDB4MDQwMDAwMDUsIDB4NTAwODAwMDAsIDB4NDYwMDEwMDAsCisJMHgwMGZmZmZmZiwgMHgwNDAxZjAwYywgMHg1MDA4MDgwMCwgMHg4MjA0MGQwMCwKKwkweDAwMDBmZmZmLCAweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAxMDAsIDB4ODAwMDAwZTAsIDB4ODAwNDBkNDAsCisJMHg0NDA0MTAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAyMSwgMHgwNDAxZjMyNywKKwkweDU5YTgwMDE2LCAweDgwMDAwNTQwLCAweDA0MDAwMDE0LCAweDQ4MDNjODU3LAorCTB4NTlhODAwMTYsIDB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA4NCwKKwkweDA0MDIwMDA5LCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLCAweDExMDYwMDAwLAorCTB4MDQwMjAwMDUsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMGMsIDB4MDQwMWY4MDQsCisJMHgwNDAxZjAwMiwgMHgwNDAxZmFkYywgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDRhMDM1MDE0LCAweDAwMDAwMDBkLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LAorCTB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMjEsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MjAwNzgwMCwgMHgwMDEwYjU1MiwKKwkweDQ2MDA3ODAwLCAweDExMDcwMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDIxLAorCTB4MDQwMWYyZmUsIDB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMTYsCisJMHg0ODAzYzg1NywgMHg1OWE4MDAxNiwgMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwKKwkweDAyMDFmODAwLCAweDAwMTA1ZjkwLCAweDgyMDAwNTgwLCAweDAwMDAwMDg0LAorCTB4MDQwMjAwMGMsIDB4NTljYzEwMDYsIDB4ODIwODE1ODAsIDB4MTEwNzAwMDAsCisJMHgwNDAyMDAwOCwgMHg0YTAzNTAxMywgMHgwMDAwMDAwMSwgMHgwNDAxZmE5MSwKKwkweDRhMDM1MDE0LCAweDAwMDAwMDBlLCAweDA0MDFmODA0LCAweDA0MDFmMDAyLAorCTB4MDQwMWZhYjEsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4ODIwNDBkNDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZmJmYywgMHg0YTAzNTAxNCwgMHgwMDAwMDAwZiwKKwkweDQ5N2I1MDE2LCAweDQyMDA2MDAwLCAweGZmZmZmZmZmLCAweDQyMDA2ODAwLAorCTB4MDAzMDAwMDAsIDB4MDQwMWZiZTgsIDB4NDIwMDYwMDAsIDB4ZmZkZmZmZmYsCisJMHg0MTc4NjgwMCwgMHgwNDAxZmJlNCwgMHg0MjAwMDgwMCwgMHgwMDAwMDdkMCwKKwkweDQyMDAxMDAwLCAweDAwMTA0MTQ4LCAweDAyMDFmMDAwLCAweDAwMTA1ZjY5LAorCTB4NDgwM2M4NTYsIDB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMjAyOTYsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAxMSwKKwkweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQyMDBhODAwLCAweDAwMTBiNTUyLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsCisJMHg0MjAwYTgwMCwgMHgwMDEwYjU1MiwgMHg0NjAwYTgwMCwgMHgxMTAyMDAwMCwKKwkweDA0MDFmYThhLCAweDA0MDIwMDE1LCAweDU5YTgwMDEwLCAweDgyMDAwZDAwLAorCTB4ZmZmZjAwMDAsIDB4MDQwMDAwMTEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHgwNDAwMDAwZSwgMHg4MjAwMGMwMCwgMHgwMDEwMjEwZSwgMHg1MDA0MDgwMCwKKwkweDgwMDQwOTEwLCAweDgyMDQwNTgwLCAweDAwMDAwMDdlLCAweDA0MDAwMDA3LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwODAsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAwNCwgMHgwNDAxZmEwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwKKwkweDA0MDFmMmEyLCAweDU5YTgwMDE2LCAweDgwMDAwNTQwLCAweDA0MDAwMDIwLAorCTB4NDgwM2M4NTcsIDB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwKKwkweDA0MDIwMDE2LCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLCAweDExMDMwMDAwLAorCTB4MDQwMjAwMTIsIDB4NTljYzEwMDcsIDB4OGMwODE1M2UsIDB4MDQwMDAwMGIsCisJMHg1OWE4MDAxNSwgMHg4YzAwMDUwNCwgMHgwNDAyMDAwOCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODNmLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5YTgwMDE1LAorCTB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMTIsCisJMHgwNDAxZjgwNCwgMHgwNDAxZjAwMiwgMHgwNDAxZmE0YiwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRhMDM1MDE0LCAweDAwMDAwMDEzLCAweDgzY2NhNDAwLAorCTB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MjAwYTgwMCwKKwkweDAwMTBiNTUyLCAweDQ2MDBhODAwLCAweDExMDMwMDAwLCAweDA0MDFmYTNmLAorCTB4MDQwMjAwMTMsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMTAsCisJMHg1OWE4MDgxMCwgMHg4MjA0MDU4MCwgMHgwMGZmZmZmZiwgMHgwNDAwMDAwYywKKwkweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgyMDQwNDAwLCAweDAwMTAyMTBlLAorCTB4NTAwMDA4MDAsIDB4ODAwNDA5MTAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsCisJMHgwNDAxZjljMCwgMHgwNDAwMDAwMiwgMHgwNDAxZmFmYiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA1LCAweDA0MDFmMjU5LCAweDU5YTgwMDE2LCAweDgwMDAwNTQwLAorCTB4MDQwMDAwMjAsIDB4NDgwM2M4NTcsIDB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDE0LCAweDA0MDIwMDE2LCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLAorCTB4MTEwNDAwMDAsIDB4MDQwMjAwMTIsIDB4NTljYzEwMDcsIDB4OGMwODE1M2UsCisJMHgwNDAwMDAwYiwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwNCwgMHgwNDAyMDAwOCwKKwkweDQyMDAwMDAwLCAweDAwMTBiODNmLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NTlhODAwMTUsIDB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsIDB4NGEwMzUwMTQsCisJMHgwMDAwMDAxNCwgMHgwNDAxZjgwNCwgMHgwNDAxZjAwMiwgMHgwNDAxZmEwMiwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRhMDM1MDE0LCAweDAwMDAwMDE1LAorCTB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKKwkweDQyMDBhODAwLCAweDAwMTBiNTUyLCAweDQ2MDBhODAwLCAweDExMDQwMDAwLAorCTB4MDQwMWY5ZjYsIDB4MDQwMjAwMjAsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDAsCisJMHgwNDAyMDAxZCwgMHg1OTljMDAxNywgMHg4YzAwMDUwMCwgMHgwNDAwMDAxYSwKKwkweDU5OWMxNDAyLCAweDgyMDgwNDgwLCAweDAwMDAwMDdmLCAweDAyMDIxODAwLAorCTB4MDAxMDA1ZDgsIDB4NGMwODAwMDAsIDB4ODIwODE0MDAsIDB4MDAxMDIxMGUsCisJMHg1MDA4MTAwMCwgMHg4MjA4MTUwMCwgMHgwMDAwMDBmZiwgMHg0ODBiNTAxMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA2Yzc4LAorCTB4NWMwMDA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWY5NmQsCisJMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwM2FiZiwgMHgwMjAyMDgwMCwKKwkweDAwMTAxNWZlLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDA0MDFmMjAzLAorCTB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwM2YsIDB4NDgwM2M4NTcsCisJMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwKKwkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDM1LAorCTB4NTljYzEwMDYsIDB4ODIwODA1MDAsIDB4MTEwNTAwMDAsIDB4ODIwMDA1ODAsCisJMHgxMTA1MDAwMCwgMHgwNDAyMDAyZiwgMHg4YzA4MTUxMCwgMHgwNDAwMDAxMCwKKwkweDA0MDFmYjA5LCAweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLAorCTB4NTlhODAwMTUsIDB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjgzZiwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OWE4MDAxNSwKKwkweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LCAweDA0MDFmMDEzLCAweDU5Y2MxMDA3LAorCTB4OGMwODE1M2UsIDB4MDQwMDAwMGIsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDQsCisJMHgwNDAyMDAwOCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgzZiwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTQ3LCAweDU5YTgwMDE1LCAweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZhZWIsIDB4NDk3YjUwMTMsCisJMHgwNDAxZjAwMywgMHg0YTAzNTAxMywgMHgwMDAwMDAwMSwgMHg1OWNjMTAwNywKKwkweDhjMDgxNTNjLCAweDA0MDAwMDAzLCAweDRhMDM1MDI2LCAweDAwMDAwMDA4LAorCTB4NGEwMzUwMTQsIDB4MDAwMDAwMTYsIDB4MDQwMWY4MDQsIDB4MDQwMWYwMDIsCisJMHgwNDAxZjk4ZCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDA2LCAweDQyMDBhODAwLCAweDAwMTBiNTUyLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NGEwMzUwMTQsCisJMHgwMDAwMDAxNywgMHg1OWE4MDAxMywgMHg4YzAwMDUwMCwgMHgwNDAwMDAwNiwKKwkweDQyMDAxMDAwLCAweDAwMTBiNTUyLCAweDQ2MDAxMDAwLCAweDExMDUwMTAwLAorCTB4MDQwMWYwMDMsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMWIsIDB4MDQwMWY5N2IsCisJMHgwNDAyMDAwYSwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwMCwgMHgwNDAyMDAwNywKKwkweDA0MDFmODk2LCAweDA0MDIwMDA1LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE1ZmUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsCisJMHgwNDAxZjk5ZSwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTA5ODc0LCAweDVjMDI3ODAwLCAweDFjMDFmMDAwLAorCTB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMTUsIDB4NDgwM2M4NTcsCisJMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwKKwkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDg0LCAweDA0MDIwMDBiLAorCTB4NTljYzEwMDYsIDB4ODIwODE1ODAsIDB4MTEwNjAwMDAsIDB4MDQwMjAwMDcsCisJMHg4MDAwMDU4MCwgMHgwNDAxZmFhMCwgMHg0YTAzNTAxNCwgMHgwMDAwMDAxOCwKKwkweDA0MDFmODA0LCAweDA0MDFmMDAyLCAweDA0MDFmOTRiLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMTksIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwgMHgwMDEwYjU1MiwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDIxLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDQyMDAzODAwLAorCTB4MDAxMGI1NTMsIDB4MDQwMWY5NDEsIDB4MDQwMjAwMTgsIDB4NDAxYzI4MDAsCisJMHg1MDE0MTAwMCwgMHg4MDA4MDEzMCwgMHg4MDAwMDAwMCwgMHg0MDAwMTgwMCwKKwkweDgyMDgxNTAwLCAweDAwZmZmZmZmLCAweDgwMDAwMGYwLCAweDgwMDgwNTQwLAorCTB4NDQwMDI4MDAsIDB4NTlhODA4MTAsIDB4ODIwNDBkMDAsIDB4MDAwMDAwZmYsCisJMHg0MDBjMTAwMCwgMHg4MDA4MTEwNCwgMHg4MjA4MjQwMCwgMHgwMDEwYjU1MywKKwkweDUwMTAxMDAwLCAweDgyMGMwNTAwLCAweDAwMDAwMDAzLCAweDBjMDFmODA2LAorCTB4ODAwODE1NDAsIDB4NDQwODIwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMjEsCisJMHgwNDAxZjE1NiwgMHgwMDEwNDAxZCwgMHgwMDEwNDAyMiwgMHgwMDEwNDAyNywKKwkweDAwMTA0MDJjLCAweDgwMDQwOGYwLCAweDQwMDQwMDAwLCAweDgyMDgxNTAwLAorCTB4MDBmZmZmZmYsIDB4MWMwMWYwMDAsIDB4ODAwNDA4ZTAsIDB4NDAwNDAwMDAsCisJMHg4MjA4MTUwMCwgMHhmZjAwZmZmZiwgMHgxYzAxZjAwMCwgMHg4MDA0MDhkMCwKKwkweDQwMDQwMDAwLCAweDgyMDgxNTAwLCAweGZmZmYwMGZmLCAweDFjMDFmMDAwLAorCTB4NDAwNDAwMDAsIDB4ODIwODE1MDAsIDB4ZmZmZmZmMDAsIDB4MWMwMWYwMDAsCisJMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxNiwgMHg0ODAzYzg1NywKKwkweDQyMDAxMDAwLCAweDAwMTA0MTQ4LCAweDAyMDFmODAwLCAweDAwMTA1ZjkwLAorCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwODQsIDB4MDQwMjAwMGMsCisJMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwgMHgxMTA3MDAwMCwgMHgwNDAyMDAwOCwKKwkweDRhMDM1MDEzLCAweDAwMDAwMDAxLCAweDA0MDFmOGQyLCAweDRhMDM1MDE0LAorCTB4MDAwMDAwMWEsIDB4MDQwMWY4MDQsIDB4MDQwMWYwMDIsIDB4MDQwMWY4ZjIsCisJMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZmEzZSwKKwkweDRhMDM1MDE0LCAweDAwMDAwMDFiLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LAorCTB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsIDB4NTlhODIwMTYsIDB4NDAxMDAwMDAsCisJMHg4MDAwYjEwNCwgMHg0MDU4MDgwMCwgMHg1NDUwYTgwMCwgMHg4MDUwYTAwMCwKKwkweDgwNTRhODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZjLCAweDA0MDFmMTEzLAorCTB4MWMwMWYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwNCwgMHg0MjAwNDAwMCwgMHgwMDEwYjU1MywgMHg1OTljMjgxNywKKwkweDhjMTQyZDE0LCAweDA0MDIwMDFmLCAweDQyMDAxMDAwLCAweDAwMDAwMDAzLAorCTB4NDAyMDAwMDAsIDB4ODAwODA0MDAsIDB4NTAwMDA4MDAsIDB4ODIwNDI1ODAsCisJMHhmZmZmZmZmZiwgMHgwNDAyMDAwNSwgMHg4MDA4MTA0MCwgMHg4MDE4MzA0MCwKKwkweDA0MDIwN2Y4LCAweDA0MDFmMDVlLCAweDgwMDgxMWMwLCAweDA0MDIwMDA2LAorCTB4ODIwNDI1ODAsIDB4M2ZmZmZmZmYsIDB4MDQwMDAwNTgsIDB4ODIwNDBkNDAsCisJMHhjMDAwMDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg0MjAwMTgwMCwKKwkweDAwMDAwMDAxLCAweDQwMDQyMDAwLCAweDgwMTAyMTAyLCAweDA0MDIxMDIxLAorCTB4ODAwYzE4YzIsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsIDB4MDQwMWYwNGIsCisJMHg0MTc4MTAwMCwgMHg0MDIwMDAwMCwgMHg4MDA4MDQwMCwgMHg1MDAwMDgwMCwKKwkweDgyMDQyNTgwLCAweGZmZmZmZmZmLCAweDA0MDIwMDA1LCAweDgwMDgxMDAwLAorCTB4ODAxODMwNDAsIDB4MDQwMjA3ZjgsIDB4MDQwMWYwNDAsIDB4ODAwODExYzAsCisJMHgwNDAyMDAwMywgMHg4MjA0MGQ0MCwgMHhjMDAwMDAwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAxLCAweDQyMDAxODAwLCAweDgwMDAwMDAwLCAweDQwMDQyMDAwLAorCTB4ODAxMDIwYzIsIDB4MDQwMjEwMDcsIDB4ODAwYzE5MDIsIDB4ODA1OGIwMDAsCisJMHg4MjU4MDQ4MCwgMHgwMDAwMDAyMSwgMHgwNDAwMTdmYSwgMHgwNDAxZjAyZiwKKwkweDQwMjAwMDAwLCAweDgwMDgyNDAwLCAweDUwMTAwMDAwLCAweDgwMGMwNTQwLAorCTB4NDQwMDIwMDAsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDAsIDB4NDgwMzUwMTUsCisJMHg0MDU4MDAwMCwgMHg0MjAwMjgwMCwgMHgwMDAwMDAyMCwgMHg4MDE0MmM4MCwKKwkweDQwMDgwMDAwLCAweDQyMDAzODAwLCAweDAwMDAwMDAzLCAweDgwMWMwNDgwLAorCTB4ODAwMDAwY2EsIDB4ODAxNDJkNDAsIDB4ODIxNDRjMDAsIDB4MDAxMDIxMGUsCisJMHg1MDI0MjgwMCwgMHg4MjE0MmQwMCwgMHgwMDAwMDBmZiwgMHg0ODE3NTAxMCwKKwkweDRjMDQwMDAwLCAweDQwMTQwODAwLCAweDAyMDFmODAwLCAweDAwMTAxNWViLAorCTB4NWMwMDA4MDAsIDB4NDAwMDE4MDAsIDB4NTAwYzAwMDAsIDB4ODAxMDA1NDAsCisJMHg0NDAwMTgwMCwgMHg1OWE4MDAxNSwgMHg4NDAwMDU0MCwgMHg0ODAzNTAxNSwKKwkweDQyMDBhODAwLCAweDAwMTBiNTUzLCAweDQwMjBhMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDQ4MDdjODU3LCAweDQ4MGJjODU3LCAweDQwMDhiMDAwLCAweDgzY2NhNDAwLAorCTB4MDAwMDAwMDcsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTMsIDB4NDA1NDEwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MDA0MTgwMCwgMHg0MTc4MjAwMCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAzLCAweDgyMGMxYzgwLCAweDAwMDAwMDIwLAorCTB4MDQwMDEwMDQsIDB4ODAxMDIwMDAsIDB4ODAwMDAwNDAsIDB4MDQwMWY3ZmIsCisJMHg0MDA0MTgwMCwgMHg4MDEwMjFjMCwgMHgwNDAwMDAwNSwgMHg4MjBjMWM4MCwKKwkweDAwMDAwMDIwLCAweDgwMTAyMDQwLCAweDA0MDIwN2ZkLCAweDQyMDAyMDAwLAorCTB4MDAwMDAwMDEsIDB4ODAwYzE5YzAsIDB4MDQwMDAwMDQsIDB4ODAxMDIwYzIsCisJMHg4MDBjMTg0MCwgMHgwNDAyMDdmZSwgMHg4MDA4M2MwMCwgMHg4M2NjMmMwMCwKKwkweDAwMDAwMDA3LCAweDgwMTQyYzAwLCAweDUwMTQwMDAwLCAweDgwMTAyZDAwLAorCTB4MDQwMjAwMTIsIDB4ODAxMDA1NDAsIDB4NDQwMDM4MDAsIDB4ODIwNDI0MDAsCisJMHgwMDEwMjEwZSwgMHg1MDEwMjgwMCwgMHg4MjE0MmQwMCwgMHgwMDAwMDBmZiwKKwkweDQ4MTc1MDEwLCAweDRjMDQwMDAwLCAweDQwMTQwODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE1ZWIsIDB4NWMwMDA4MDAsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDAsCisJMHg0ODAzNTAxNSwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwKKwkweDQyMDAxMDAwLCAweDAwMDA4MDE3LCAweDU5YTgxODRlLCAweDAyMDFmODAwLAorCTB4MDAxMGFhNGYsIDB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsIDB4MWMwMWYwMDAsCisJMHg0ODA3Yzg1NiwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDA3LCAweDQyMDBhODAwLCAweDAwMTBiZTIxLCAweDAyMDFmMDAwLAorCTB4MDAxMGFiMjgsIDB4NDgwN2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDZlZGUsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBmNywgMHgwNDAxZjhkZSwgMHg0OTdiMjgwNCwKKwkweDQ5N2IyODA1LCAweDQ5N2IyODFjLCAweDQ5N2IyODFkLCAweDQyMDJkODAwLAorCTB4MDAwMDAwMDEsIDB4NDIwMDYwMDAsIDB4YmY3ZmZmZmYsIDB4NDIwMDY4MDAsCisJMHgwMDAxODAwMCwgMHgwNDAxZjk1MCwgMHg0MjAwNjAwMCwgMHhmZmZlZmZmZiwKKwkweDQxNzg2ODAwLCAweDA0MDFmOTRjLCAweDQ5N2I1MDRlLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMmQsIDB4NDIwMDEwMDAsIDB4MDAxMDQxYmMsIDB4MDIwMWYwMDAsCisJMHgwMDEwNWY2OSwgMHg0ODA3Yzg1NiwgMHgwNDAxZmZlMywgMHg0OTdiNTAxNCwKKwkweDQ5N2I1MDE2LCAweDFjMDFmMDAwLCAweDQ4MDdjODU2LCAweDU5YTgwMDA1LAorCTB4OGMwMDA1MDYsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsIDB4NDIwMDYwMDAsCisJMHhmZmZmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDAwMDAyOCwgMHgwNDAxZjEzNiwKKwkweDQ4MDdjODU2LCAweDA0MDFmZmMyLCAweDAyMDFmODAwLCAweDAwMTA2YzU1LAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZlMjEsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDBhLAorCTB4NDIwMDYwMDAsIDB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDAyMDAwMDAsCisJMHgwNDAxZjkyMSwgMHg0MjAwNjAwMCwgMHhmZmRmZmZmZiwgMHg0MTc4NjgwMCwKKwkweDA0MDFmOTFkLCAweDQ5N2I1MDE0LCAweDQyMDAwODAwLCAweDAwMDAwMGY3LAorCTB4MDQwMWY4OWMsIDB4NTljNDAwYTMsIDB4ODIwMDA1MDAsIDB4YmYyMGJmZmYsCisJMHg4MjAwMDU0MCwgMHgwMDAxYzAwMCwgMHg0ODAzODhhMywgMHg4NDAwMDUyMCwKKwkweDQ4MDM4OGEzLCAweDFjMDFmMDAwLCAweDQ5N2I1MDE2LCAweDU5YjQwMGY1LAorCTB4OGMwMDA1MDAsIDB4MDQwMjAwMDQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg0ODAzNjhmNSwgMHg4MDA0MDBjNCwgMHg4MjAwMDQwMCwgMHgwMDAwMjAwMCwKKwkweDQ4MDM5MTBhLCAweDU5YjQwMGY2LCAweDgyMDAwNTAwLCAweDAwMDAwMDE4LAorCTB4MDQwMjA3ZmQsIDB4NGEwMzY4ZjAsIDB4MDAxMGI1NGIsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjU1MiwgMHg0ODAzNjhmMSwgMHg4MjA0MDQwMCwgMHgwMDAwZGMwMCwKKwkweDQ4MDM2OGYzLCAweDU5YzQwMGE0LCAweDgyMDAwNTAwLCAweDAwMDAwMDBmLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDgsIDB4MDQwMjAwMTcsIDB4NGM1YzAwMDAsCisJMHg0YzYwMDAwMCwgMHg1OWM0YjgwNSwgMHg4YzVjYmQzYSwgMHgwNDAyMDAwNSwKKwkweDQyMDAwMDAwLCAweDAwMTBiODE4LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NGEwMzg4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5ZmUsCisJMHg0MDAwYzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk2MywgMHg0MjAyZDgwMCwKKwkweDAwMDAwMDAxLCAweDQ5N2I1MDE0LCAweDVjMDBjMDAwLCAweDVjMDBiODAwLAorCTB4MWMwMWYwMDAsIDB4NTljODAxMGIsIDB4OGMwMDA1MDIsIDB4MDQwMDA3ZTIsCisJMHg1OWM0MDhhNCwgMHg4MjA0MGQwMCwgMHgwMDAwMDAwZiwgMHg4MjA0MGQ4MCwKKwkweDAwMDAwMDBiLCAweDA0MDIwMDA1LCAweDU5YTgwODE0LCAweDgyMDQwZDQwLAorCTB4MDAwMDIwMDAsIDB4MDQwMWYwMDQsIDB4NTlhODA4MTIsIDB4ODIwNDBkNDAsCisJMHgwMDAwMTAwMCwgMHg0ODA3NTA0ZSwgMHg1OWE4MDg0YSwgMHg4MDA0MDljMCwKKwkweDA0MDIwMDA3LCAweDQyMDAwODAwLCAweDAwMDAwN2QwLCAweDQyMDAxMDAwLAorCTB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNmUsIDB4MWMwMWYwMDAsCisJMHg0ODA3Yzg1NiwgMHgwNDAxZmY0ZSwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2ZTIxLCAweDVjMDNlMDAwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4NTljNDAwYTQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwYSwKKwkweDQyMDA2MDAwLCAweGZmZmZmZmZmLCAweDQyMDA2ODAwLCAweDAwMjAwMDAwLAorCTB4MDQwMWY4YWQsIDB4NDIwMDYwMDAsIDB4ZmZkZmZmZmYsIDB4NDE3ODY4MDAsCisJMHgwNDAxZjhhOSwgMHgwMjAxZjgwMCwgMHgwMDEwNTE0MSwgMHgwNDAwMDAxNCwKKwkweDAyMDFmODAwLCAweDAwMTA1MTUxLCAweDA0MDIwMDExLCAweDRhMDM1MDMyLAorCTB4MDAwMGFhYWEsIDB4NGMwNDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE2MmEsCisJMHg1OWE4MDAyYSwgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwgMHg4MDA0MDU0MCwKKwkweDQ4MDM1MDJhLCAweDVjMDAwODAwLCAweDRhMDM1MDMzLCAweDAwMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsIDB4MDQwMWYwMDgsIDB4NGEwMzUwNGMsCisJMHgwMDAwMDAwNSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNTkwLCAweDA0MDFmZjJjLCAweDFjMDFmMDAwLCAweDA0MDFmODA1LAorCTB4NDIwMDYwMDAsIDB4YmY3ZjdmZmYsIDB4NDE3ODY4MDAsIDB4MDQwMWYwODYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwgMHgwNDAyMDAwNSwgMHg1OWM0MDAwNiwKKwkweDgyMDAwNTQwLCAweDAwMDAwMGYwLCAweDQ4MDM4ODA2LCAweDFjMDFmMDAwLAorCTB4ODAwNDA4ZDAsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDYsIDB4MDQwMDAwMDYsCisJMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MDA0MDU0MCwKKwkweDA0MDFmMDAzLCAweDgyMDQwNTQwLCAweDAwMDAwMGY3LCAweDQ4MDM4OGE3LAorCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsIDB4NDIwMDAwMDAsIDB4MDAxMGI4M2IsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwMzAwMCwgMHgwMDAwMDAwNSwKKwkweDRkM2MwMDAwLCAweDRjMTgwMDAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDBkLAorCTB4NDIwMjc4MDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMzgsIDB4NDgwN2M4NTYsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjg2YiwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDQyMDAzMDAwLCAweDAwMDAwMDAwLCAweDRkM2MwMDAwLCAweDRjMTgwMDAwLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMGYsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjAyYSwgMHg0ODA3Yzg1NiwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2YSwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQyMDAzMDAwLCAweDAwMDAwMDAzLAorCTB4NGQzYzAwMDAsIDB4NGMxODAwMDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMGUsCisJMHg0MjAyNzgwMCwgMHgwMDAwMDIwMiwgMHgwNDAxZjAxYywgMHg0ODA3Yzg1NiwKKwkweDQyMDAwMDAwLCAweDAwMTBiODY5LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDQsIDB4NGQzYzAwMDAsIDB4NGMxODAwMDAsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAxMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDIwMiwKKwkweDA0MDFmMDBlLCAweDQ4MDdjODU2LCAweDQyMDAwMDAwLCAweDAwMTBiODNlLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDEsCisJMHg0ZDNjMDAwMCwgMHg0YzE4MDAwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwYywKKwkweDQyMDI3ODAwLCAweDAwMDAwMjAyLCAweDQyMDAxODAwLCAweDAwMDBmZmZmLAorCTB4NDIwMDIwMDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDNhYWUsCisJMHg1YzAwMzAwMCwgMHg0ZDQwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTk1ZCwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDJhLCAweDAyMDFmODAwLCAweDAwMTAxZmU1LAorCTB4NWMwMjgwMDAsIDB4NWMwMjc4MDAsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsCisJMHgwNDAxMTAwMCwgMHg0YTAzYzg0MCwgMHgwMDEwYjU0YiwgMHg0YTAzYzg0MiwKKwkweDAwMDAwMDQwLCAweDQwMDAwMDAwLCAweDA0MDExN2ZmLCAweDQyMDA3ODAwLAorCTB4MDAxMGI1NGIsIDB4NDYwMDc4MDAsIDB4MDAwMDAwMTEsIDB4ODAzYzc4MDAsCisJMHg0YTAwNzgwMCwgMHgyMjAwMDBlZiwgMHg0YTAwNzgwMSwgMHgwMDAwMDBlZiwKKwkweDRhMDA3ODAyLCAweDAxMzgwMDAwLCAweDRhMDA3ODAzLCAweDAwMDAwMDAwLAorCTB4NGEwMDc4MDQsIDB4ZmZmZmZmZmYsIDB4NGEwMDc4MDUsIDB4MDAwMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg1OWM0MDBhMywgMHg4MDMwMDUwMCwgMHg4MDM0MDU0MCwKKwkweDQ4MDM4OGEzLCAweDFjMDFmMDAwLCAweDQ4MzNjODU3LCAweDU5YzQwMGEzLAorCTB4ODAzMDA1NDAsIDB4NDgwMzg4YTMsIDB4ODAzMDA1ODAsIDB4NDgwMzg4YTMsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHgwNDAwMDAwNCwgMHg0YTAzNTA0YiwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDQ5N2I1MDRiLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NTljODAwMDIsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMGEsCisJMHg4MDAwMDA0MCwgMHgwNDAwMDAwOCwgMHg0YTAzOTAwNSwgMHgwMDAwMDE0MCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDA2LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLAorCTB4MDQwMWY3ZjQsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsCisJMHg1OWM0YjgwNSwgMHg0ODVmYzg1NiwgMHg4YzVjYmQzYSwgMHgwNDAyMDAwNSwKKwkweDQyMDAwMDAwLCAweDAwMTBiODE4LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NGEwMzg4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5ZmUsCisJMHg0MDAwYzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk2MywgMHg0YTAzODgwNSwKKwkweDA0MDAwMDAwLCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAorCTB4NDk3YTZhMDAsIDB4NDkzN2M4NTcsIDB4NGEwMjZjMDAsIDB4MDAwMDA3MDcsCisJMHg0OTdhNjgwMSwgMHg0OTdhNjgwOCwgMHg0OTdhNjgwOSwgMHg0OTdhNjgwNiwKKwkweDQ5N2E2ODA3LCAweDQ5N2E2YzBiLCAweDQ5N2E2ODBjLCAweDAyMDFmODAwLAorCTB4MDAxMDNiMjUsIDB4MDQwMjAwMDYsIDB4NTkzNDA4MGYsIDB4NTkzNDAwMTAsCisJMHg4MDA0MDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0YTAyNmEwNCwKKwkweDAwMDAwMTAwLCAweDQ5N2E2YTAzLCAweDU5MzQwNDAyLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwZmYsIDB4NDgwMjZjMDIsIDB4NDk3YTZjMDQsIDB4NDk3YTZhMDUsCisJMHg0OTdhNmMwNSwgMHg0OTdhNjgxMSwgMHg0ZDJjMDAwMCwgMHg1OTM0MDAwZCwKKwkweDQ5NDY2YzAzLCAweDgwMDI1ZDQwLCAweDA0MDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZmQsIDB4NDk3YTY4MGQsIDB4NWMwMjU4MDAsIDB4NTk5YzA0MDEsCisJMHg0ODAyNmEwYiwgMHg1OTljMDIwOCwgMHg0ODAyNmMxMiwgMHg0OTdhNjgwYSwKKwkweDAyMDFmMDAwLCAweDAwMTA0YzYyLCAweDQyMDAwMDAwLCAweDAwMDAwMDA1LAorCTB4ODAwMDBkODAsIDB4MDQwMWYwMmQsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMDksCisJMHgwNDAyMDAxNywgMHg1OWE4MDAyNiwgMHg4YzAwMDUwYSwgMHgwNDAyMDAxMCwKKwkweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDQ4MDNjODU3LAorCTB4MDQwMDAwMGIsIDB4NTkzNDBhMDAsIDB4OGMwNDBkMWUsIDB4MDIwMDAwMDAsCisJMHgwMDAyMDFjNCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAyOSwgMHg0MjAwMDgwMCwKKwkweDAwMDAxMDAwLCAweDQ5MmZjODU3LCAweDA0MDFmMDE4LCAweDQ5MmZjODU3LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMjgsIDB4MDQwMWYwMTIsIDB4NTlhODA4MDUsCisJMHg4YzA0MGQwMiwgMHgwNDAyMDAwMywgMHg4YzA0MGQwMCwgMHgwNDAwMDAwNCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDA0LCAweDA0MDFmMDBhLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMjksIDB4NTkzNDBhMDAsIDB4OGMwNDBkMWUsIDB4MDQwMDAwMDUsCisJMHg0OTJmYzg1NywgMHg0MjAwMDgwMCwgMHgwMDAwMTAwMCwgMHgwNDAxZjAwMywKKwkweDQ5MmZjODU3LCAweDgwMDAwZDgwLCAweDQ4MDNjODU3LCAweDgwMDI4NTQwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NTlhODAwMDUsIDB4OGMwMDA1MDAsCisJMHgwNDAyMDdlYywgMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAyMDdlNCwKKwkweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDAwN2UxLCAweDAyMDFmMDAwLAorCTB4MDAwMjAxYzQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3ZWIsIDB4MDQwMDA3YmYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDFjOCwgMHg1OTJjMDIwNiwgMHg0OTJmYzg1NywKKwkweDgyMDAwZDgwLCAweDAwMDAwN2ZmLCAweDA0MDIwMDA2LCAweDRhMDI1YzBhLAorCTB4MDAwMDAwMzAsIDB4NDIwMjY4MDAsIDB4MDAxMGI1MjQsIDB4MDQwMWYwMjEsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDdmMCwgMHgwNDAyMTA0NiwgMHg4MWFjMDQwMCwKKwkweDUwMDAwMDAwLCAweDgwMDI2ZDQwLCAweDA0MDAwMDM4LCAweDAyMDFmODAwLAorCTB4MDAxMDQ4ZTMsIDB4MDQwMjAwMzgsIDB4NTkyYzA0MGEsIDB4OGMwMDA1MGEsCisJMHgwNDAyMDAxNCwgMHg1OTJlNjAwOSwgMHg4MzMwMDQ4MCwgMHgwMDEwZDFjMCwKKwkweDA0MDAxMDNiLCAweDQxNTgwMDAwLCAweDgxMzAwNDgwLCAweDA0MDIxMDM4LAorCTB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMjAwMzcsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg0OTdhNTgwMCwgMHg1OTMwMDAwOCwKKwkweDgwMDAwNTQwLCAweDA0MDIwMDE4LCAweDQ5MmU2MDA4LCAweDA0MDFmMDEwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDQwMDAwMTksIDB4NTkyYzAyMDYsCisJMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwOSwKKwkweDQ5N2E2MDE1LCAweDQ5MzI1ODA5LCAweDgyMDAwZDgwLCAweDAwMDAwN2ZmLAorCTB4MDQwMjAwMDMsIDB4NGEwMjYwMTUsIDB4MDAwMDgwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0MywgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg4MDAwMDU4MCwKKwkweDA0MDFmMDIwLCAweDQwMDAwODAwLCAweDU4MDQwMDAwLCAweDgwMDAwZDQwLAorCTB4MDQwMjA3ZmQsIDB4NDkyYzA4MDAsIDB4MDQwMWYwMWEsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAyYywgMHgwNDAxZjAxNiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAyOCwKKwkweDA0MDFmMDEzLCAweDU5YTgwODA1LCAweDgyMDQwNTAwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwMDQsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWYwMGMsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAyOSwgMHgwNDAxZjAwOSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDA4LCAweDA0MDFmMDA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDA3LAorCTB4MDQwMjA3ZmIsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDUsIDB4ODAwMDA1NDAsCisJMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywgMHg1OTJlOGMwNiwgMHg4MzQ0MGQ4MCwKKwkweDAwMDAwN2ZjLCAweDA0MDAwMDA0LCAweDgzNDQwNDgwLCAweDAwMDAwN2YwLAorCTB4MDQwMjEwMTQsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMTEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDlmMywgMHgwNDAyMDAxMSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzVhLCAweDA0MDAwMDFjLCAweDQ5MzY2MDA5LCAweDQ5MmU2MDA4LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMGEsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg4MDAwMDU4MCwgMHgwNDAxZjAxMSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDI4LCAweDA0MDFmMDBkLCAweDAyMDFmODAwLAorCTB4MDAxMDRhMDksIDB4MDQwMDA3ZmIsIDB4NTlhODA4MDUsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwNCwKKwkweDA0MDFmMDAzLCAweDQyMDAwMDAwLCAweDAwMDAwMDI5LCAweDgwMDAwNTQwLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMmMsIDB4MDQwMWY3ZmMsCisJMHg0OTJmYzg1NywgMHg1OTJlOGMwNiwgMHg0OTQ3Yzg1NywgMHg4MzQ0MGM4MCwKKwkweDAwMDAwODAwLCAweDQyMDAwMDAwLCAweDAwMDAwMDBhLCAweDA0MDIxMTc2LAorCTB4NTkyYzQyMDcsIDB4NDgyM2M4NTcsIDB4ODIyMDA1MDAsIDB4MDAwMDAwMGYsCisJMHgwYzAxZjAwMSwgMHgwMDEwNDNkNSwgMHgwMDEwNDQ1ZCwgMHgwMDEwNDRhOSwKKwkweDAwMTA0NGI0LCAweDAwMTA0NGJmLCAweDAwMTA0M2QxLCAweDAwMTA0M2QxLAorCTB4MDAxMDQzZDEsIDB4MDAxMDQ0Y2YsIDB4MDAxMDQ1MTMsIDB4MDAxMDQ1MzAsCisJMHgwMDEwNDNkMSwgMHgwMDEwNDNkMSwgMHgwMDEwNDNkMSwgMHgwMDEwNDNkMSwKKwkweDAwMTA0M2QxLCAweDQ4MDNjODU3LCAweDQyMDAwMDAwLCAweDAwMDAwMDBjLAorCTB4MDQwMWYxNWQsIDB4NTkyYzEwMDgsIDB4ODIwODE1MDAsIDB4MDBmZmZmZmYsCisJMHg1OWE4MDAxMCwgMHg4MDA4NGQ4MCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAxMCwKKwkweDA0MDAwMTU1LCAweDAyMDFmODAwLCAweDAwMTA0OTE5LCAweDA0MDAwMDM2LAorCTB4NDgwM2M4NTcsIDB4ODIwMDRkODAsIDB4MDAwMDAwMWQsIDB4MDQwMjAwMWEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTc1NSwgMHg1OTM0MDQwNSwgMHg0YzAwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDVjMDAwMDAwLCAweDA0MDAwMDA0LAorCTB4OGMyMDQ1MGEsIDB4MDQwMDAwMjgsIDB4ODAwMDA1ODAsIDB4NDQwMDI4MDAsCisJMHg1OTM0MDAwOCwgMHg0ODAwMjgwMiwgMHg1OTM0MDAwOSwgMHg0ODAwMjgwMSwKKwkweDU5MzQwMDA2LCAweDQ4MDAyODA0LCAweDU5MzQwMDA3LCAweDQ4MDAyODAzLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDk1NWYsCisJMHgwNDAxZjE2NiwgMHg0ODAzYzg1NywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYSwKKwkweDA0MDIwMDAzLCAweDQwMTAxMDAwLCAweDA0MDFmMTM2LCAweDQ4MDNjODU3LAorCTB4ODIwMDRkODAsIDB4MDAwMDAwMWIsIDB4MDQwMjAwMDMsIDB4NDAxODEwMDAsCisJMHgwNDAxZjEzMCwgMHg0ODAzYzg1NywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYywKKwkweDA0MDAwMTMxLCAweDgyMDA0ZDgwLCAweDAwMDAwMDE5LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMGEsIDB4MDQwMDAxMjAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsCisJMHgwNDAyMDEzNywgMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwgMHgwNDAwMDAxYiwKKwkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDAwMDE4LCAweDU5MzQwMjEyLAorCTB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsCisJMHgwNDAyMDAwYywgMHg0MjAwMTAwMCwgMHgwMDAwMDAwOCwgMHg1OWE4MDAyNiwKKwkweDhjMDAwNTA2LCAweDA0MDIwMDA5LCAweDU5MzQwMDAyLCAweDgyMDAwNTAwLAorCTB4MDBmZjAwMDAsIDB4ODIwMDA1ODAsIDB4MDBmZjAwMDAsIDB4MDQwMDAwMDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGM2ZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAxYywKKwkweDQwMTgxMDAwLCAweDA0MDIwMTA3LCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4MDQwMDAxMTEsIDB4NDkzNjYwMDksIDB4NDkyZTYwMDgsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg4YzIwNDUwYSwgMHgwNDAwMDAwNCwgMHg1OTJjMDQwNCwKKwkweDg0MDAwNTVjLCAweDQ4MDI1YzA0LCAweDRjMjAwMDAwLCAweDRkM2MwMDAwLAorCTB4NDIwMjc4MDAsIDB4MDAwMDEwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCisJMHg1YzAyNzgwMCwgMHg1YzAwNDAwMCwgMHg4YzIwNDUxMiwgMHgwNDAwMDAwYiwKKwkweDU5OWMwMDE4LCAweDhjMDAwNTE4LCAweDA0MDAwMDA4LCAweDU5MmMwMDA5LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAzODAsIDB4NTkzNDA4MGEsIDB4ODAwNDBkNDAsCisJMHg4NDA0MGQ1NCwgMHg0ODA2NjgwYSwgMHg0MTdhNzgwMCwgMHgwNDAxZjkxNCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDA0MDFmOTFiLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjEwYSwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwgMHgwNDAyMDBlYywKKwkweDAyMDFmODAwLCAweDAwMTA0OWVkLCAweDA0MDAwMDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDQ5ZTcsIDB4MDQwMjAwZWMsIDB4NDE3YTc4MDAsIDB4NDE3YTYwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMjBhMSwgMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwKKwkweDA0MDAwMDFiLCAweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDAwMDE4LAorCTB4NTkzNDAyMTIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAxMCwgMHgwNDAyMDAwYywgMHg0MjAwMTAwMCwgMHgwMDAwMDAwOCwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTA2LCAweDA0MDIwMDA5LCAweDU5MzQwMDAyLAorCTB4ODIwMDA1MDAsIDB4MDBmZjAwMDAsIDB4ODIwMDA1ODAsIDB4MDBmZjAwMDAsCisJMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNGM2ZCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDFjLCAweDQwMTgxMDAwLCAweDA0MDIwMGIyLCAweDAyMDFmODAwLAorCTB4MDAwMjA3NWEsIDB4MDQwMDAwYmMsIDB4NTkzNDA4MGEsIDB4OGMyMDQ1MTIsCisJMHgwNDAwMDAwYywgMHg1OTljMDAxOCwgMHg4YzAwMDUxOCwgMHgwNDAwMDAwOSwKKwkweDU5MmMwMDA5LCAweDgyMDAwNTAwLCAweDAwMDAwMzgwLCAweDgyMDQxNTAwLAorCTB4ZmZmZmZjN2YsIDB4ODAwODBkNDAsIDB4ODQwNDBkNTQsIDB4MDQwMWYwMDIsCisJMHg4NDA0MGQxNCwgMHg0ODA2NjgwYSwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQxN2E3ODAwLCAweDA0MDFmOGM4LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWY4Y2YsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg4MDAwMDU4MCwKKwkweDA0MDFmMGJlLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMGEwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZmMsIDB4MDQwMjAwYTMsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTUxNywgMHgwNDAwMDA5NCwgMHg4MDAwMDU4MCwgMHgwNDAxZjBiMywKKwkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDk1LCAweDAyMDFmODAwLAorCTB4MDAxMDQ5ZmMsIDB4MDQwMjAwOTgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwZTYsCisJMHgwNDAwMDA4OSwgMHg4MDAwMDU4MCwgMHgwNDAxZjBhOCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMjQ1LCAweDA0MDIwMDhhLCAweDgzNDQ0ZDgwLCAweDAwMDAwN2ZlLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsIDB4MDQwMjAwNmIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDllNywgMHgwNDAyMDA4OCwgMHgwMjAxZjgwMCwgMHgwMDEwOTUyZiwKKwkweDA0MDAwMDc5LCAweDgwMDAwNTgwLCAweDA0MDFmMDk4LCAweDgyMjAwNTAwLAorCTB4MDAwMDAwNzAsIDB4MDQwMjAwMDUsIDB4OGMyMDQ1MGUsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwYywgMHgwNDAyMDA1YywgMHg4YzIwNDUwYSwgMHgwNDAwMDAwZCwKKwkweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAxMDAwLCAweDhjMjA0NTBlLAorCTB4MDQwMjAwMDIsIDB4ODUzZTdkNTYsIDB4ODIyMDA1MDAsIDB4MDAwMDAwYTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDlkMywgMHg1YzAyNzgwMCwgMHgwNDAxZjA3ZiwKKwkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDY1LCAweDhjMjA0NTA4LAorCTB4MDQwMDAwMTAsIDB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsIDB4MDAwMDEwMDAsCisJMHg4YzIwNDUwZSwgMHgwNDAyMDAwMiwgMHg4NTNlN2Q1NiwgMHg4MjIwMDUwMCwKKwkweDAwMDAwMDkwLCAweDAyMDFmODAwLCAweDAwMTA0OWJiLCAweDVjMDI3ODAwLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsIDB4MDQwMjAwM2IsIDB4MDQwMWYwNmIsCisJMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywKKwkweDA0MDIwMDBmLCAweDAyMDFmODAwLCAweDAwMTA0OWYzLCAweDA0MDAwMDA3LAorCTB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMWYsIDB4NWMwMDAwMDAsCisJMHgwNDAwMDA0ZCwgMHgwNDAxZjA1ZCwgMHgwMjAxZjgwMCwgMHgwMDEwOTRjNSwKKwkweDA0MDAwMDA3LCAweDgwMDAwNTgwLCAweDA0MDFmMDVjLCAweDAyMDFmODAwLAorCTB4MDAxMDRhMWYsIDB4MDQwMDAwNTEsIDB4MDQwMWYwNTQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNGExZiwgMHgwNDAwMDAzNCwgMHgwNDAxZjA1MCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMjQ1LCAweDA0MDIwMDM2LCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMjAwNDAsIDB4OGMyMDQ1MDgsIDB4MDQwMDAwMDYsIDB4NDE3YTc4MDAsCisJMHg0MTdhNjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjBhMSwgMHgwNDAxZjA0MywKKwkweDAyMDFmODAwLCAweDAwMTA0OWVkLCAweDA0MDAwMDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDQ5ZTcsIDB4MDQwMjAwMmMsIDB4NDE3YTc4MDAsIDB4NDE3YTYwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMjBhMSwgMHg0ODBiYzg1NiwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MzMyLCAweDA0MDAwMDE4LCAweDgwMDAwNTgwLCAweDA0MDFmMDM3LAorCTB4MDQwMWY3ZTMsIDB4NDgwYmM4NTcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTksCisJMHg0MDAwMTAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAwYSwKKwkweDQ4MGJjODU3LCAweDQwMDAwODAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4MDQwMWYwMDUsIDB4NDgwYmM4NTcsIDB4NDAwMDA4MDAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwMSwgMHg0ODBiYzg1NywgMHg0MjAyODAwMCwgMHgwMDAwMDAzMSwKKwkweDA0MDFmMDIwLCAweDQ4MGJjODU3LCAweDQyMDAwODAwLCAweDAwMDAwMDAzLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZjcsIDB4NDgwYmM4NTcsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwYSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmN2YxLCAweDQ4MGJjODU3LCAweDQyMDAwODAwLCAweDAwMDAwMDA5LAorCTB4NDAwMDEwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWY3ZWEsCisJMHg0ODBiYzg1NywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmN2U0LCAweDQ4MGJjODU3LCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWY3ZTAsIDB4ODAwMjg1ODAsIDB4NDE3OGIwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywKKwkweDU5MzI2ODA5LCAweDU5MzQxMjAwLCAweDgxM2U3OWMwLCAweDA0MDAwMDAzLAorCTB4ODQwODE1NDAsIDB4MDQwMWYwMDIsIDB4ODQwODE1MDAsIDB4NDgwYTZhMDAsCisJMHgxYzAxZjAwMCwgMHg1OTMyNjgwOSwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwKKwkweDQ4MDNjODU3LCAweDQ5MzdjODU3LCAweDgyMDQwNTgwLCAweDAwMDAwMDA2LAorCTB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAwMDA2MDYsIDB4MDQwMWYwMjEsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwNDA0LCAweDA0MDFmMDFiLCAweDgyMDQwNTgwLCAweDAwMDAwMDA3LAorCTB4NDIwMDAwMDAsIDB4MDAwMDA3MDcsIDB4MDQwMDAwMTYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwMywgMHg0MjAwMDAwMCwgMHgwMDAwMDcwMywgMHgwNDAwMDAxMSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDA1LCAweDQyMDAwMDAwLCAweDAwMDAwNDA1LAorCTB4MDQwMDAwMGMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDksIDB4NDIwMDAwMDAsCisJMHgwMDAwMDQwOSwgMHgwNDAwMDAwNywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYiwKKwkweDQyMDAwMDAwLCAweDAwMDAwNzBiLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4NDgwM2M4NTcsIDB4NDgwMjZjMDAsIDB4ODIwNDBkODAsIDB4MDAwMDAwMDYsCisJMHgwNDAyMDAwNSwgMHg1OTM0MTQwNCwgMHg4MDA4MTFjMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDFjMDFmMDAwLCAweDVjMDAwMDAwLCAweDRjMDAwMDAwLAorCTB4NDgwM2M4NTcsIDB4NDk0N2M4NTcsIDB4NDgxYmM4NTcsIDB4ODM0NDA0ODAsCisJMHgwMDAwMDgwMCwgMHgwNDAyMTAzNCwgMHg4MzQ0MTQwMCwgMHgwMDEwYWMwMCwKKwkweDUwMDgwMDAwLCAweDgwMDI2ZDQwLCAweDA0MDIwMDExLCAweDRjMTgwMDAwLAorCTB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZDMsIDB4NDEyZTY4MDAsCisJMHg1YzAyNTgwMCwgMHg1YzAwMzAwMCwgMHgwNDAwMDAyNywgMHg0NTM0MTAwMCwKKwkweDQ5N2E2ODBkLCAweDQ5N2E2ODEwLCAweDQ5N2E2ODBmLCAweDQ5N2E2ODBlLAorCTB4NGMxODAwMDAsIDB4MDQwMWZjZjMsIDB4NWMwMDMwMDAsIDB4NTkzNDBhMTIsCisJMHg0YzA0MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHg1YzAwMDgwMCwKKwkweDA0MDAwMDA5LCAweDgyMTgwNTAwLCAweDAwZmZmZjAwLCAweDA0MDAwMDA4LAorCTB4NTlhODEwMTAsIDB4ODIwODE1MDAsIDB4MDBmZmZmMDAsIDB4ODAwODA1ODAsCisJMHgwNDAwMDAwMywgMHg4MDAwMDU4MCwgMHgwNDAxZjAwNCwgMHg4MjE4MDUwMCwKKwkweDAwMDAwMGZmLCAweDgwMDAwMGQwLCAweDgwMDQwZDgwLCAweDA0MDAwMDAzLAorCTB4NDgwM2M4NTcsIDB4NDgwMjZhMTIsIDB4NTkzNDAwMDIsIDB4ODAxODA1ODAsCisJMHgwNDAwMDAwMywgMHg0ODFiYzg1NywgMHg0ODFhNjgwMiwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MDQwMWY3ZmMsIDB4NDk0N2M4NTcsIDB4ODM0NDA0ODAsIDB4MDAwMDA4MDAsCisJMHgwNDAyMTAxMSwgMHg4MzQ0MTQwMCwgMHgwMDEwYWMwMCwgMHg1MDA4MDAwMCwKKwkweDgwMDI2ZDQwLCAweDA0MDAwMDBiLCAweDA0MDFmYmY5LCAweDA0MDIwMDBhLAorCTB4NTlhODAwMDUsIDB4OGMwMDA1MDIsIDB4MDQwMDAwMDQsIDB4NTkzNDAyMDAsCisJMHg4YzAwMDUwZSwgMHgwNDAwMDAwNCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDgwMDAwNTgwLCAweDA0MDFmN2ZlLCAweDVjMDAwMDAwLAorCTB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NDk0N2M4NTcsIDB4NGQyYzAwMDAsCisJMHg0ZDMwMDAwMCwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMTAyNCwKKwkweDgzNDQxNDAwLCAweDAwMTBhYzAwLCAweDUwMDgwMDAwLCAweDgwMDI2ZDQwLAorCTB4MDQwMDAwMWIsIDB4NDU3ODEwMDAsIDB4NTkzNDAwMGQsIDB4ODAwMjVkNDAsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDdmZCwgMHg1OTM2NjAxMSwgMHg4MTMyNjFjMCwKKwkweDA0MDAwMDBlLCAweDRjNjQwMDAwLCAweDU5MzBjODAwLCAweDU5MzI1ODA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDIwMjA4MDAsIDB4MDAxMDA3ZmQsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHg4MjY2NjU0MCwgMHgwMDAwMDAwMCwKKwkweDA0MDIwN2Y2LCAweDVjMDBjODAwLCAweDAyMDFmODAwLCAweDAwMTA0YzYyLAorCTB4NDEzNjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZjUsIDB4ODAwMDA1ODAsCisJMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDA0MDFmN2ZiLCAweDQ5MzdjODU3LCAweDRjNTgwMDAwLAorCTB4NTljYzAwMDEsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NDgwMjY4MDIsCisJMHg0OTdhNmMwMSwgMHg0OTdhNmEwMSwgMHg1OTM0MDIwMCwgMHg4NDAwMDUwMiwKKwkweDQ4MDI2YTAwLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDIwMDE3LAorCTB4NTkzNDA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMDAwMDUsCisJMHg1OWE4MDAyNiwgMHg4YzAwMDUwYSwgMHgwNDAyMDAxMCwgMHgwNDAxZjAwOCwKKwkweDU5Y2MwNDA4LCAweDhjMDAwNTE4LCAweDA0MDAwMDBjLCAweDU5Y2MwMDA5LAorCTB4NDgwMzUwMzUsIDB4NTljYzAwMGEsIDB4NDgwMzUwMzYsIDB4NTljYzAyMDcsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDAwMywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKKwkweDQ4MDM4ODkzLCAweDQ4MDM1MDFlLCAweDU5Y2MwYTA5LCAweDgyMDQwZDAwLAorCTB4MDAwMDAwMTAsIDB4NTljYzA0MDgsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMjAsCisJMHgwNDAwMDAwMiwgMHg4NDA0MGQ0MCwgMHg1OTM0MDAwYSwgMHg4MjAwMDUwMCwKKwkweGZmZmZmZmVlLCAweDgwMDQwNTQwLCAweDQ4MDI2ODBhLCAweDgzY2NhNDAwLAorCTB4MDAwMDAwMGIsIDB4ODMzNGFjMDAsIDB4MDAwMDAwMDYsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDBkLCAweDgzMzRhYzAwLCAweDAwMDAwMDA4LCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NTljYzBhMTgsCisJMHg4MjA0MDQ4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMTAwYywgMHg4MjA0MDQ4MCwKKwkweDAwMDAwNDAwLCAweDA0MDAxMDA0LCAweDQyMDAwODAwLCAweDAwMDAwNDAwLAorCTB4MDQwMWYwMDYsIDB4ODIwNDA0ODAsIDB4MDAwMDAyMDAsIDB4MDQwMDEwMDMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDIwMCwgMHg0ODA2NmEwNCwgMHg1OTM0MDQwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDAzLCAweDU5Y2MwYTA4LAorCTB4NDgwNjZhMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4NTljYzEyMDcsCisJMHg4MDA4MTFjMCwgMHgwNDAwMDAwNSwgMHg4MjA4MDQ4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDIxMDAyLCAweDQwMDgwODAwLCAweDQ4MDY2YzA0LCAweDVjMDBiMDAwLAorCTB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NTlhODAwMjYsIDB4OGMwMDA1MDgsCisJMHgwNDAwMDAwNCwgMHg4NDAwMDU1NiwgMHg0ODAzYzg1NywgMHg0ODAzNTAyNiwKKwkweDU5Y2MwMjA3LCAweDQ4MDNjODU3LCAweDQ4MDI2YTA1LCAweDU5Y2MwMjBhLAorCTB4NDgwM2M4NTcsIDB4NDgwMjZjMDUsIDB4NTkzNDEyMDAsIDB4NTk5YzA4MTgsCisJMHg1OTM0MTgwYSwgMHg0ODA3Yzg1NywgMHg0ODBiYzg1NywgMHg0ODBmYzg1NywKKwkweDU5Y2MyMDA2LCAweDgyMTAyNTAwLCAweGZmMDAwMDAwLCAweDgyMTAyNTgwLAorCTB4MDIwMDAwMDAsIDB4MDQwMDAwMDcsIDB4OGMwMDA1MGUsIDB4MDQwMDAwMDksCisJMHg4YzBjMWQxNCwgMHgwNDAwMDAwMywgMHg4YzBjMWQwZSwgMHgwNDAwMDAwNSwKKwkweDhjMDQwZDE4LCAweDA0MDAwMDAzLCAweDg0MDgxNTRhLCAweDA0MDFmMDAyLAorCTB4ODQwODE1MGEsIDB4OGMwMDA1MTAsIDB4MDQwMDAwMDksIDB4OGMwYzFkMTQsCisJMHgwNDAwMDAwMywgMHg4YzBjMWQxMCwgMHgwNDAwMDAwNSwgMHg4YzA0MGQxOCwKKwkweDA0MDAwMDAzLCAweDg0MDgxNTRlLCAweDA0MDFmMDAyLCAweDg0MDgxNTBlLAorCTB4OGMwMDA1MTIsIDB4MDQwMDAwMDksIDB4OGMwYzFkMTQsIDB4MDQwMDAwMDMsCisJMHg4YzBjMWQxMiwgMHgwNDAwMDAwNSwgMHg4YzA0MGQxOCwgMHgwNDAwMDAwMywKKwkweDg0MDgxNTVjLCAweDA0MDFmMDAyLCAweDg0MDgxNTFjLCAweDQ4MGE2YTAwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGM1YzAwMDAsIDB4NGQyYzAwMDAsCisJMHg0YzU4MDAwMCwgMHg1OTM0MDAwZCwgMHg4MDAyNWQ0MCwgMHgwNDAwMDAyOSwKKwkweDU5MmMwMDAzLCAweDgyMDAwNDgwLCAweDAwMDAwMDA4LCAweDA0MDAxMDBiLAorCTB4NDEyY2I4MDAsIDB4NTkyYzAwMDEsIDB4ODAwMjVkNDAsIDB4MDQwMjA3ZjksCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAzNywgMHg0OTJmYzg1NywKKwkweDQ5MmNiODAxLCAweDA0MDFmMDIwLCAweDgzMmMwYzAwLCAweDAwMDAwMDA0LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDgsIDB4NTAwNDAwMDAsIDB4ODIwMDA1ODAsCisJMHhmZmZmZmZmZiwgMHgwNDAyMDAwNiwgMHg4MDA0MTAwMCwgMHg1MDA4MDAwMCwKKwkweDgyMDAwNTgwLCAweGZmZmZmZmZmLCAweDA0MDAwMDA3LCAweDgyMDQwYzAwLAorCTB4MDAwMDAwMDIsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDVkOCwgMHg0NTQ4MDgwMCwgMHg0NTRjMTAwMCwgMHg1OTJjMTgwMywKKwkweDgwMGMxODAwLCAweDQ4MGU1ODAzLCAweDQ4MGZjODU3LCAweDA0MDFmMDE0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZTQsIDB4MDQwMDAwMTcsIDB4NDkyZmM4NTcsCisJMHg0OTJlNjgwZCwgMHg0OTdhNTgwMiwgMHg0YTAyNTgwMywgMHgwMDAwMDAwMSwKKwkweDQ5NGE1ODA0LCAweDQ5NGU1ODA1LCAweDgzMmMwYzAwLCAweDAwMDAwMDA2LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMGUsIDB4NDYwMDA4MDAsIDB4ZmZmZmZmZmYsCisJMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDVjMDBiMDAwLCAweDVjMDI1ODAwLCAweDVjMDBiODAwLAorCTB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsIDB4MDQwMWY3ZmIsIDB4NDgwM2M4NTYsCisJMHg0ZDNjMDAwMCwgMHg0ZDJjMDAwMCwgMHg1OTM0MDAwZCwgMHg4MDAyNWQ0MCwKKwkweDA0MDAwMDFmLCAweDU5MmMwMDAyLCAweDgwMDAwNTQwLCAweDA0MDIwMDFmLAorCTB4NDEyZTc4MDAsIDB4MDQwMWY4Y2UsIDB4MDQwMjAwMWMsIDB4NDYwMDA4MDAsCisJMHhmZmZmZmZmZiwgMHg0NjAwMTAwMCwgMHhmZmZmZmZmZiwgMHg0ODEzYzg1NywKKwkweDQ4MGZjODU3LCAweDU4MGMwMDAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDAyLAorCTB4MDQwMjEwMTQsIDB4NDgwZmM4NTcsIDB4NDAwYzAwMDAsIDB4ODEyYzA1ODAsCisJMHgwNDAyMDAwNCwgMHg1ODBjMDAwMSwgMHg0ODAyNjgwZCwgMHgwNDAxZjAwMywKKwkweDU4MGMwMDAxLCAweDQ4MDAyMDAxLCAweDQwMGU1ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZjQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjU4MDAsCisJMHg1YzAyNzgwMCwgMHgxYzAxZjAwMCwgMHg4MDAwMDU4MCwgMHgwNDAxZjdmYywKKwkweDgwMDAwMDQwLCAweDQ4MDAxODAzLCAweDQ4MDNjODU3LCAweDA0MDFmN2Y2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAwODYsIDB4NTkzMDAwMDcsIDB4ODQwMDA1NGUsCisJMHg0ODAyNjAwNywgMHg1OTJjMWEwNCwgMHg4MjBjMWQwMCwgMHgwMDAwMDBmZiwKKwkweDgyMGMwNTgwLCAweDAwMDAwMDQ4LCAweDA0MDAwMDEzLCAweDAyMDFmMDAwLAorCTB4MDAwMjAyOGUsIDB4OGMwMDA1MDAsIDB4MDIwMjA4MDAsIDB4MDAwMjAwZTUsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwgMHg1OTJjMWEwNCwgMHg4MjBjMWQwMCwKKwkweDAwMDAwMGZmLCAweDgyMGMwNTgwLCAweDAwMDAwMDE4LCAweDAyMDAwMDAwLAorCTB4MDAwMjAyOGUsIDB4ODIwYzA1ODAsIDB4MDAwMDAwNDgsIDB4MDIwMjAwMDAsCisJMHgwMDAyMDI4ZSwgMHg0MjAwMDgwMCwgMHg4MDAwMDgwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2NzIxLCAweDAyMDFmMDAwLCAweDAwMDIwMjk3LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDgsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAyOSwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDJhLCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMjgsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NDk0M2M4NTcsCisJMHg0ZDQ0MDAwMCwgMHg0ZDM0MDAwMCwgMHg0ZDJjMDAwMCwgMHg0YzU4MDAwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwN2YwLCAweDQxN2E4ODAwLCAweDAyMDFmODAwLAorCTB4MDAwMjAyNDUsIDB4MDQwMjAwMGQsIDB4OGQzZTdkMTQsIDB4MDQwMDAwMDUsCisJMHg1OTM0MDIxMiwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHgwNDAwMDAwNywKKwkweDhkM2U3ZDA2LCAweDA0MDAwMDA0LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAorCTB4MDQwMjAwMDIsIDB4MDQwMWY4MTMsIDB4ODE0Njg4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdlZiwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMTAwOCwKKwkweDhkM2U3ZDAyLCAweDA0MDAwMDA2LCAweDQyMDI4ODAwLCAweDAwMDAwN2YwLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMWY3ZTUsIDB4NWMwMGIwMDAsCisJMHg1YzAyNTgwMCwgMHg1YzAyNjgwMCwgMHg1YzAyODgwMCwgMHgxYzAxZjAwMCwKKwkweDRkMmMwMDAwLCAweDQxNzgzMDAwLCAweDU5MzY1ODBmLCAweDgxMmU1OWMwLAorCTB4MDQwMDAwMjksIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAxMiwgMHgwNDAwMDAyMCwgMHg4ZDNlN2QwMCwKKwkweDA0MDAwMDAzLCAweDA0MDFmODNjLCAweDA0MDIwMDFjLCAweDU5MmMyMDAwLAorCTB4NDk3YTU4MDAsIDB4ODAxODMxYzAsIDB4MDQwMjAwMDksIDB4NTkzNDAwMTAsCisJMHg4MTJjMDU4MCwgMHgwNDAyMDAwNCwgMHg0OTdhNjgwZiwgMHg0OTdhNjgxMCwKKwkweDA0MDFmMDA4LCAweDQ4MTI2ODBmLCAweDA0MDFmMDA2LCAweDQ4MTAzMDAwLAorCTB4NTkzNDAwMTAsIDB4ODEyYzA1ODAsIDB4MDQwMjAwMDIsIDB4NDgxYTY4MTAsCisJMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg0OTQyNWEwNiwgMHg0OTdhNWMwOSwKKwkweDAyMDFmODAwLCAweDAwMTA5MWM2LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAorCTB4NDAxMjU4MDAsIDB4MDQwMWY3ZGEsIDB4NDEyYzMwMDAsIDB4NTkyZTU4MDAsCisJMHgwNDAxZjdkNywgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDQxNzgxODAwLCAweDU5MzQwMDBmLCAweDgwMDI1ZDQwLCAweDA0MDAwMDEwLAorCTB4NTkyYzAwMDUsIDB4ODAyMDA1ODAsIDB4NTkyYzAwMDAsIDB4MDQwMDAwMDMsCisJMHg0MTJjMTgwMCwgMHgwNDAxZjdmOSwgMHg0OTdhNTgwMCwgMHg4MDBjMTljMCwKKwkweDA0MDAwMDA4LCAweDQ4MDAxODAwLCAweDgwMDAwNTQwLCAweDA0MDIwMDA0LAorCTB4NDgwZTY4MTAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg0ODAyNjgwZiwgMHg4MDAwMDU0MCwgMHgwNDAyMDdmZCwgMHg0OTdhNjgxMCwKKwkweDA0MDFmN2Y5LCAweDU5MmMwMDA4LCAweDgxNDgwNTgwLCAweDA0MDIwMDAzLAorCTB4NTkyYzAwMDksIDB4ODE0YzA1ODAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg0YzU4MDAwMCwgMHg0MTNjMTgwMCwgMHg0MDBjMjAwMCwgMHg1OTNjMDAwMiwKKwkweDgwMDAwNTQwLCAweDA0MDIwMDE4LCAweDQyMDBiMDAwLCAweDAwMDAwMDA4LAorCTB4ODIwYzBjMDAsIDB4MDAwMDAwMDQsIDB4NTAwNDAwMDAsIDB4ODE0ODA1ODAsCisJMHgwNDAyMDAwNSwgMHg4MDA0MTAwMCwgMHg1MDA4MDAwMCwgMHg4MTRjMDU4MCwKKwkweDA0MDAwMDBkLCAweDgyMDQwYzAwLCAweDAwMDAwMDAyLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZjYsIDB4NDAwYzIwMDAsIDB4NTgwYzAwMDEsIDB4ODAwMDFkNDAsCisJMHgwNDAyMDdlZSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwYjAwMCwKKwkweDFjMDFmMDAwLCAweDgwMDAwNTgwLCAweDA0MDFmN2ZkLCAweDQ5MzdjODU3LAorCTB4NGM1ODAwMDAsIDB4NGQyYzAwMDAsIDB4NTkzNDAwMGQsIDB4ODAwMjVkNDAsCisJMHgwNDAyMDAxNiwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAxMCwKKwkweDQ5MmU2ODBkLCAweDRhMDI1ODAyLCAweDAwMDAwMDAxLCAweDQ5N2E1ODAzLAorCTB4ODMyYzBjMDAsIDB4MDAwMDAwMDQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsCisJMHg0NjAwMDgwMCwgMHhmZmZmZmZmZiwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2ZjLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI1ODAwLAorCTB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NTkyZTU4MDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHg1YzAyNTgwMCwgMHgwNDAxZjdlYSwKKwkweDRkMmMwMDAwLCAweDU5MzY1ODBkLCAweDgxMmU1OWMwLCAweDA0MDAwMDA3LAorCTB4NDkzN2M4NTcsIDB4NDk3YTY4MGQsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDU5MzQwNDA1LCAweDQ5MzdjODU3LCAweDQ4MDNjODU3LCAweDhjMDAwNTA4LAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCisJMHgwNDAwMDAxMSwgMHg1OWE4MDgxNSwgMHg4YzA0MGQwNCwgMHgwNDAyMDAwZSwKKwkweDU5YTgwODI2LCAweDhjMDQwZDA2LCAweDA0MDAwMDBiLCAweDgzYWMwNDAwLAorCTB4MDAwMDA3ZmUsIDB4NTAwMDAwMDAsIDB4ODAwMjZkNDAsIDB4MDQwMDAwMDYsCisJMHgwNDAxZjlhNywgMHgwNDAyMDAwNCwgMHg1OTM0MDIwMCwgMHg4NDAwMDU1YSwKKwkweDQ4MDI2YTAwLCAweDU5OWMwMDE3LCAweDhjMDAwNTA4LCAweDA0MDAwMDE1LAorCTB4NDIwMGIwMDAsIDB4MDAwMDA3ZjAsIDB4NDE3YTg4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI0NSwgMHgwNDAyMDAwYywgMHgwNDAxZjk5OSwgMHgwNDAyMDAwYSwKKwkweDU5YTgwMDEwLCAweDU5MzQwODAyLCAweDgwMDQwNTgwLCAweDgyMDAwNTAwLAorCTB4MDBmZmZmMDAsIDB4MDQwMjAwMDQsIDB4NTkzNDAyMDAsIDB4ODQwMDA1NWEsCisJMHg0ODAyNmEwMCwgMHg4MTQ2ODgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmMCwKKwkweDA0MDFmODg0LCAweDA0MDAwMDAzLCAweDU5YTgwODM2LCAweDA0MDFmMDA2LAorCTB4NTk5YzAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDcsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDdkMCwgMHg0MjAwMTAwMCwgMHgwMDEwNDg3NiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MDZlLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzQwMDAwLAorCTB4NGQ0NDAwMDAsIDB4NGQzYzAwMDAsIDB4NGM1ODAwMDAsIDB4NDIwMDEwMDAsCisJMHgwMDEwNDg3NiwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwgMHg1OWE4MDgyNiwKKwkweDhjMDQwZDA2LCAweDA0MDAwMDE1LCAweDA0MDFmODZhLCAweDA0MDAwMDEzLAorCTB4ODNhZTZjMDAsIDB4MDAwMDA3ZmUsIDB4NTEzNjY4MDAsIDB4NTkzNDAyMDAsCisJMHg4NDAwMDUxYSwgMHg0ODAyNmEwMCwgMHg1OTljMDAxNywgMHg4YzAwMDUwOCwKKwkweDA0MDAwMDA3LCAweDQyMDAwODAwLCAweDAwMDAwN2QwLCAweDQyMDAxMDAwLAorCTB4MDAxMDQ4NzYsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNmUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWU0NSwgMHgwNDAxZjAyNywgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwKKwkweDgwMDI4ZDgwLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDFlLAorCTB4NTkzNDAyMDAsIDB4OGMwMDA1MWEsIDB4MDQwMDAwMWIsIDB4NTkzNjhjMDMsCisJMHg0MTdhNzgwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHg0MTc4MzAwMCwKKwkweDAyMDFmODAwLCAweDAwMTBhNDQ2LCAweDU5MzQwMjAwLCAweDg0MDAwNTU4LAorCTB4ODQwMDA1MWEsIDB4NDgwMjZhMDAsIDB4NDkzN2M4NTcsIDB4NGEwMjZjMDAsCisJMHgwMDAwMDcwNywgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YWI0LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA2N2ZkLAorCTB4ODAwMDBkODAsIDB4MDIwMWY4MDAsIDB4MDAxMGEyZmYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmM0YiwgMHg4MTQ2ODgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdkZSwKKwkweDVjMDBiMDAwLCAweDVjMDI3ODAwLCAweDVjMDI4ODAwLCAweDVjMDI2ODAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTkzMDM4MDksIDB4NTgxYzAyMDAsCisJMHg4NDAwMDUxYSwgMHg0ODAwM2EwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDQyMDI2ODAwLCAweDAwMTBiNTI0LCAweDQ5N2E2ODBlLCAweDQyMDI4ODAwLAorCTB4MDAwMDA3ZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDQyYjQsIDB4NDkzN2M4NTcsCisJMHg0YTAyNmMwMCwgMHgwMDAwMDYwNiwgMHg0YTAyNjgwMiwgMHgwMGZmZmZmZiwKKwkweDRhMDI2YTA0LCAweDAwMDAwMjAwLCAweDRhMDI2YzA0LCAweDAwMDAwMDAyLAorCTB4MWMwMWYwMDAsIDB4NTkzMDAwMDksIDB4NTAwMDAwMDAsIDB4NDkzM2M4NTcsCisJMHg0ODAzYzg1NywgMHg4YzAwMDUwZSwgMHgxYzAxZjAwMCwgMHg1OTMwMDAwOSwKKwkweDUwMDAwMDAwLCAweDhjMDAwNTBhLCAweDFjMDFmMDAwLCAweDQ5MzNjODU2LAorCTB4MDQwMWY5MGYsIDB4MDQwMDAwMDYsIDB4NTkzNDA0MDAsIDB4ODIwMDBkMDAsCisJMHgwMDAwMDBmZiwgMHg4MjA0MTU4MCwgMHgwMDAwMDAwNSwgMHgxYzAxZjAwMCwKKwkweDRkMzQwMDAwLCAweDgzYWMwNDAwLCAweDAwMDAwN2ZlLCAweDUwMDAwMDAwLAorCTB4ODAwMjZkNDAsIDB4MDQwMDAwMDMsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MWEsCisJMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywgMHg0OTNmYzg1NywKKwkweDU5MzQwNDAzLCAweDgxYWMwNDAwLCAweDUwMDAwMDAwLCAweDgxMzQwNTgwLAorCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzNDEyMDAsIDB4ODEzZTc5YzAsCisJMHgwNDAwMDAwMywgMHg4NDA4MTU1ZSwgMHgwNDAxZjAwMiwgMHg4NDA4MTUxZSwKKwkweDQ4MGE2YTAwLCAweDFjMDFmMDAwLCAweDQ5MzdjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDIxMGEsIDB4MDQwMDAwMDYsIDB4NTlhODA4MzUsIDB4NDIwMDEwMDAsCisJMHgwMDEwNDkxMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA2ZSwgMHgxYzAxZjAwMCwKKwkweDQ5MzdjODU3LCAweDQyMDAxMDAwLCAweDAwMTA0OTEwLCAweDAyMDFmODAwLAorCTB4MDAxMDVmOTAsIDB4NTlhODEwMjYsIDB4ODQwODE1MTIsIDB4NDgwYjUwMjYsCisJMHgxYzAxZjAwMCwgMHg0YzM4MDAwMCwgMHg0YzM0MDAwMCwgMHg0YzI0MDAwMCwKKwkweDRjNjAwMDAwLCAweDQwMDhjMDAwLCAweDgzNDQwNDgwLCAweDAwMDAwODAwLAorCTB4MDQwMjEwNDUsIDB4ODAwMDJkODAsIDB4NDE0NDIwMDAsIDB4ODM0NDc0MDAsCisJMHgwMDEwYWMwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg4MzQ0NGM4MCwKKwkweDAwMDAwN2YwLCAweDA0MDAxMDAzLCAweDQyMDBiMDAwLCAweDAwMDAwMDEwLAorCTB4NTAzODAwMDAsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMWUsIDB4NDE0NDAwMDAsCisJMHg4MDEwMDU4MCwgMHgwNDAyMDA0MywgMHg0MDEwMjgwMCwgMHg4MjEwNGM4MCwKKwkweDAwMDAwN2YwLCAweDA0MDAxMDE1LCAweDgyMTA0ZDgwLCAweDAwMDAwN2ZjLAorCTB4MDQwMjAwMDUsIDB4ODI2MDRkODAsIDB4MDBmZmZmZmMsIDB4MDQwMjAwMmEsCisJMHgwNDAxZjAwZSwgMHg4MjEwNGQ4MCwgMHgwMDAwMDdmZCwgMHgwNDAyMDAwNSwKKwkweDgyNjA0ZDgwLCAweDAwZmZmZmZkLCAweDA0MDIwMDIzLCAweDA0MDFmMDA3LAorCTB4ODIxMDRkODAsIDB4MDAwMDA3ZmYsIDB4MDQwMjAwMWYsIDB4ODI2MDRkODAsCisJMHgwMGZmZmZmZiwgMHgwNDAyMDAxYywgMHg4NDE0MmQ1ZSwgMHgwNDAxZjAyOSwKKwkweDQwMDA2ODAwLCAweDU4MzQzMDAyLCAweDgyMTgzNTAwLCAweDAwZmZmZmZmLAorCTB4NDAxODAwMDAsIDB4ODA2MDA1ODAsIDB4MDQwMjAwMTksIDB4NDAxMDAwMDAsCisJMHg4MTQ0MDU4MCwgMHgwNDAyMDAwYSwgMHg0MDM2NjgwMCwgMHg4YzIwNDUwOCwKKwkweDA0MDAwMDUzLCAweDA0MDFmZjhhLCAweDA0MDIwMDUxLCAweDQ5NDdjODU3LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMWQsIDB4MDQwMWYwNGUsIDB4NDk0N2M4NTcsCisJMHg0ODBiYzg1NywgMHg0ODIzYzg1NywgMHg0MjAwMDAwMCwgMHgwMDAwMDAxYSwKKwkweDA0MDFmMDQ4LCAweDQ5NDdjODU3LCAweDQ4NjNjODU3LCAweDQ4MTNjODU3LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMTksIDB4MDQwMWYwNDIsIDB4NDAxMDAwMDAsCisJMHg4MTQ0MDU4MCwgMHgwNDAyMDAwNywgMHg1ODM0MzAwMiwgMHg0OTQ3Yzg1NywKKwkweDQ4MWJjODU3LCAweDQyMDAwMDAwLCAweDAwMDAwMDFiLCAweDA0MDFmMDM5LAorCTB4ODAxMDIwMDAsIDB4ODAzODcwMDAsIDB4ODM0NDRjODAsIDB4MDAwMDA3ZjAsCisJMHgwNDAwMTAwOSwgMHg4MjEwNGQ4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMDAwYywKKwkweDQyMDAyMDAwLCAweDAwMDAwN2YwLCAweDQyMDA3MDAwLCAweDAwMTBiM2YwLAorCTB4MDQwMWYwMDcsIDB4ODIxMDRkODAsIDB4MDAwMDA3ZjAsIDB4MDQwMjAwMDQsCisJMHg0MTc4MjAwMCwgMHg0MjAwNzAwMCwgMHgwMDEwYWMwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2E0LCAweDgwMTQyOWMwLCAweDA0MDIwMDA3LCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NDk0N2M4NTcsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsCisJMHgwNDAxZjAxYywgMHg0ZDJjMDAwMCwgMHg0YzE4MDAwMCwgMHg0MDYwMzAwMCwKKwkweDA0MDFmYzEyLCAweDQ5NDdjODU3LCAweDQ5MzdjODU3LCAweDVjMDAzMDAwLAorCTB4NWMwMjU4MDAsIDB4MDQwMjA3ZjQsIDB4NDk3YTZhMTIsIDB4NTlhODAwMjYsCisJMHg4YzAwMDUwYSwgMHgwNDAyMDAwZCwgMHg4MjYwMDUwMCwgMHgwMGZmZmYwMCwKKwkweDA0MDAwMDA2LCAweDU5YTg0ODEwLCAweDgyMjQ0ZDAwLCAweDAwZmZmZjAwLAorCTB4ODAyNDA1ODAsIDB4MDQwMjAwMDUsIDB4ODI2MDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MDAwMDBkMCwgMHg0ODAyNmExMiwgMHg0ODYyNjgwMiwgMHg4MDAwMDU4MCwKKwkweDgwMDAwNTQwLCAweDVjMDBjMDAwLCAweDVjMDA0ODAwLCAweDVjMDA2ODAwLAorCTB4NWMwMDcwMDAsIDB4MWMwMWYwMDAsIDB4NTkzNDAwMGYsIDB4NTkzNDE0MGIsCisJMHg4MDA4MTA0MCwgMHgwNDAwMTAwMiwgMHg0ODBhNmMwYiwgMHg4MDAwMDU0MCwKKwkweDAyMDIwODAwLCAweDAwMDIwMjUzLCAweDFjMDFmMDAwLCAweDQ4MDNjODU3LAorCTB4NDk0N2M4NTcsIDB4NGMzMDAwMDAsIDB4ODIwMDY1MDAsIDB4MDAwMDAwMzAsCisJMHgwNDAwMDAwNiwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTQyYSwKKwkweDVjMDAwMDAwLCAweDA0MDIwMDBiLCAweDhjMDAwNTBlLCAweDA0MDAwMDA2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMDYsIDB4NDkzN2M4NTcsCisJMHgwNDAxZmMyZiwgMHg4MDAwMDU4MCwgMHg1YzAwNjAwMCwgMHgxYzAxZjAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmN2ZjLCAweDQ4MDNjODU3LAorCTB4NGM1ODAwMDAsIDB4NGQ0NDAwMDAsIDB4NDAwMDEwMDAsIDB4ODAwMDBkODAsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg0YzA0MDAwMCwgMHg0MDA2ODgwMCwKKwkweDRjMDgwMDAwLCAweDQwMDgwMDAwLCAweDA0MDFmZmRkLCAweDVjMDAxMDAwLAorCTB4NWMwMDA4MDAsIDB4ODAwNDA4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjcsCisJMHg1YzAyODgwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwKKwkweDU5MzQwNDAwLCAweDgyMDBiZDgwLCAweDAwMDAwNjA2LCAweDVjMDBiODAwLAorCTB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NTkzNDA0MDAsIDB4ODIwMGJkODAsCisJMHgwMDAwMDQwNCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwKKwkweDU5MzQwNDAwLCAweDgyMDBiZDgwLCAweDAwMDAwNDA0LCAweDA0MDAwMDAzLAorCTB4ODIwMGJkODAsIDB4MDAwMDA2MDYsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsCisJMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwgMHg1OTM0MDQwMCwgMHg4MjAwYmQwMCwKKwkweDAwMDBmZjAwLCAweDgyNWNjNTgwLCAweDAwMDAwNDAwLCAweDA0MDAwMDAzLAorCTB4ODI1Y2M1ODAsIDB4MDAwMDA2MDAsIDB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsCisJMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg1OTM0MDQwMCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMGZmLCAweDgyMDBiZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDAzLAorCTB4ODIwMGJkODAsIDB4MDAwMDAwMDUsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsCisJMHg0YzVjMDAwMCwgMHg1OTM0MDQwMCwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwKKwkweDg0MDBiOWMwLCAweDgwNWMwNTgwLCAweDQ5MzdjODU3LCAweDQ4MDNjODU3LAorCTB4NDgwMjZjMDAsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsCisJMHg0YzA4MDAwMCwgMHg1OTJjMDIwNywgMHg4YzAwMDUwYywgMHgwNDAwMDAwZiwKKwkweDU5MmU4YzA2LCAweDgyMDAwNTAwLCAweDAwMDAwMDgwLCAweDg0MDAwNTQ4LAorCTB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsIDB4MDAwMDEwMDAsIDB4MDQwMWZmOTAsCisJMHg1YzAyNzgwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwMTAwMCwKKwkweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDgwMDAwNTgwLCAweDA0MDFmN2ZjLAorCTB4NTkyYzA0MGIsIDB4ODIwMDA1MDAsIDB4MDAwMGUwMDAsIDB4ODIwMDA1ODAsCisJMHgwMDAwNjAwMCwgMHgwNDAwMDAxOSwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDAwMDE2LCAweDgzNmMwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMGZmLAorCTB4NTlhODAwMjYsIDB4ODIwMDBkMDAsIDB4MDAwMDAwMzgsIDB4MDQwMjAwMDUsCisJMHg1OWE4MDgzMiwgMHg4MDA0MDljMCwgMHgwNDAwMDAwYywgMHgwNDAxZjBmNywKKwkweDgyMDAwZDAwLCAweDAwMDAwMDAzLCAweDgyMDQwZDgwLCAweDAwMDAwMDAzLAorCTB4MDQwMjAwZjIsIDB4ODIwMDBkMDAsIDB4MDAwMDAwMjgsIDB4MDQwMjAwMDMsCisJMHg4YzAwMDUwYywgMHgwNDAwMDBlZCwgMHg1OTJjMTAwYSwgMHg4MjA4MDUwMCwKKwkweGZmMDAwMDAwLCAweDA0MDIwMGNlLCAweDU5YTgwMDEwLCAweDgwMDgwNTgwLAorCTB4MDQwMDAwYzgsIDB4NTkyYzBjMGIsIDB4ODIwNDBkMDAsIDB4MDAwMGUwMDAsCisJMHg4MjA0MDQ4MCwgMHgwMDAwODAwMCwgMHgwNDAyMTBjOCwgMHg1OTJlOGMwNiwKKwkweDgzNDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDAxMDA3LCAweDgzNDQwNTgwLAorCTB4MDAwMGZmZmYsIDB4MDQwMjAwYWYsIDB4ODAwNDA5YzAsIDB4MDQwMjAwZjcsCisJMHgwNDAxZjBhYywgMHg4MDA0MDljMCwgMHgwNDAyMDBmNCwgMHg0MTc4NDAwMCwKKwkweDA0MDFmZWFkLCAweDA0MDIwMGRiLCAweDQyMDI3MDAwLCAweDAwMDAwMDUzLAorCTB4NTkyYzI0MDksIDB4ODIxMDA1MDAsIDB4ZmZmZmZmMDAsIDB4MDQwMjAwYWEsCisJMHg0ODEzYzg1NywgMHg1OTJjMDAwYywgMHg4MDAwMDFjMCwgMHgwNDAwMDA4MywKKwkweDgyMTAwNTgwLCAweDAwMDAwMDA0LCAweDA0MDAwMGEwLCAweDgyMTAwNTgwLAorCTB4MDAwMDAwNTEsIDB4MDQwMDAwOWQsIDB4ODIxMDA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAxNiwgMHg4MjEwMDU4MCwgMHgwMDAwMDAyMCwgMHgwNDAwMDA0YiwKKwkweDgyMTAwNTgwLCAweDAwMDAwMDI0LCAweDA0MDAwMDQyLCAweDgyMTAwNTgwLAorCTB4MDAwMDAwMjEsIDB4MDQwMDAwNDIsIDB4ODIxMDA1ODAsIDB4MDAwMDAwNTAsCisJMHgwNDAwMDAzNywgMHg4MjEwMDU4MCwgMHgwMDAwMDA1MiwgMHgwNDAwMDAzMSwKKwkweDgyMTAwNTgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDZiLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMWIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMDIsCisJMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwgMHgwNDAwMDAxNiwgMHgwNDAxZmY0YywKKwkweDA0MDAwMDE0LCAweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMjAwMGMsIDB4NTlhODAwMjYsCisJMHg4YzAwMDUwNiwgMHgwNDAyMDA2ZiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwOCwKKwkweDU5MzQwMDAyLCAweDgyMDAwNTAwLCAweDAwZmYwMDAwLCAweDgyMDAwNTgwLAorCTB4MDBmZjAwMDAsIDB4MDQwMDAwMDMsIDB4MDQwMWY5YmYsIDB4MDQwMjAwNjUsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDA3ZSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDEwLCAweDQ5MzY2MDA5LCAweDQyMDAwODAwLCAweDAwMDAwMDAzLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMDMsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwNDAxZjA0NCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDAwLCAweDA0MDFmMDAzLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMDQsIDB4MDQwMWZmMzcsIDB4MDQwMjAwNzEsIDB4MDQwMWYwMzYsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDAzMywgMHgwNDAxZjAwNiwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDA1LCAweDA0MDFmMDAzLCAweDQyMDI3MDAwLCAweDAwMDAwMDAzLAorCTB4MDQwMWZmMjMsIDB4MDQwMjAwNjYsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsCisJMHgwNDAwMDAxNiwgMHgwNDAxZmYxMiwgMHgwNDAwMDAxNCwgMHg1OTM0MDIxMiwKKwkweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDQyMDAxMDAwLCAweDAwMDAwMDEwLAorCTB4MDQwMjAwMGMsIDB4NTlhODAwMjYsIDB4OGMwMDA1MDYsIDB4MDQwMjAwMzUsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwOCwgMHg1OTM0MDAwMiwgMHg4MjAwMDUwMCwKKwkweDAwZmYwMDAwLCAweDgyMDAwNTgwLCAweDAwZmYwMDAwLCAweDA0MDAwMDAzLAorCTB4MDQwMWY5ODUsIDB4MDQwMjAwMmIsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCisJMHgwNDAwMDA0NCwgMHg0YTAyNjQwNiwgMHgwMDAwMDAxMCwgMHg0OTM2NjAwOSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDgzMzgwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHgwNDAxZjAwYSwgMHg4MjEwMjU4MCwgMHgwMDAwMDAxMSwKKwkweDA0MDIwMDJkLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDA0MDAwMDMxLAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMTAsIDB4NDkzNjYwMDksIDB4NDkyZTYwMDgsCisJMHg0OTMyNTgwOCwgMHg4MTM2NjljMCwgMHgwNDAwMDAwNywgMHg1OTJjMGMwYiwKKwkweDhjMDQwZDE4LCAweDA0MDAwMDA0LCAweDU5MzQwMjAwLCAweDg0MDAwNTE0LAorCTB4NDgwMjZhMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODAwMDA1ODAsCisJMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDBhLCAweDA0MDFmMDE1LCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMTAsIDB4MDQwMWYwMTIsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTYsCisJMHgwNDAxZjAwZiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxNywgMHgwNDAxZjAwYywKKwkweDQyMDAxMDAwLCAweDAwMDAwMDE4LCAweDA0MDFmMDA5LCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMWIsIDB4MDQwMWYwMDYsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMWUsCisJMHgwNDAxZjAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAyMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDE5LCAweDQyMDI4MDAwLCAweDAwMDAwMDMxLCAweDA0MDFmN2UyLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDQwMWYwMDMsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwYSwgMHg0MTc4MTAwMCwgMHgwNDAxZjdmNywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA5LCAweDU5MzQxNDAwLCAweDA0MDFmN2YzLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMDgsIDB4MDQwMWYwMDUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsCisJMHg0MTZjMTAwMCwgMHgwNDAxZjdlYywgMHg0MTc4MDgwMCwgMHg0MTc4MTAwMCwKKwkweDA0MDFmN2NkLCAweDQyMDI4MDAwLCAweDAwMDAwMDAwLCAweDA0MDFmN2ZiLAorCTB4ODIwMDRkODAsIDB4MDAwMDAwMWQsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYSwgMHgwNDAyMDAwNCwgMHg0MDEwMTAwMCwKKwkweDQwMDAwODAwLCAweDA0MDFmN2RjLCAweDgyMDA0ZDgwLCAweDAwMDAwMDFiLAorCTB4MDQwMjAwMDMsIDB4NDAxODEwMDAsIDB4MDQwMWY3ZmEsIDB4ODIwMDRkODAsCisJMHgwMDAwMDAxYywgMHgwNDAwMDdmNywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxOSwKKwkweDA0MDAwN2I4LCAweDA0MDFmN2Q2LCAweDU5MmU2MDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDk0MWEsIDB4MDQwMDA3YjYsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAxMSwgMHgwNDAyMDdkNiwgMHg4MzQ0MDU4MCwgMHgwMDAwZmZmZiwKKwkweDA0MDIwMDA1LCAweDU5MzI2ODA5LCAweDgxMzY2OWMwLCAweDA0MDAwMDBlLAorCTB4MDQwMWY3Y2YsIDB4NTkyYzEwMGEsIDB4ODIwODE1MDAsIDB4MDBmZmZmZmYsCisJMHg0MTc4NDAwMCwgMHgwNDAxZmRhOCwgMHgwNDAyMDdkNiwgMHg1OTMwMDAwOSwKKwkweDgwMDAwMWMwLCAweDA0MDAwMDAzLCAweDgxMzQwNTgwLCAweDA0MDIwN2M0LAorCTB4NDkzNjYwMDksIDB4NTkyYzBjMGIsIDB4ODIwNDE1MDAsIDB4MDAwMGUwMDAsCisJMHg4MjA4MDU4MCwgMHgwMDAwNjAwMCwgMHgwNDAwMDAwOSwgMHg1OTMwMGEwMywKKwkweDgyMDQwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwN2I5LCAweDQ5MmU2MDA4LAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNTQsIDB4MDQwMWY3N2YsIDB4MDIwMWY4MDAsCisJMHgwMDEwYThkNCwgMHgwNDAwMDdiYywgMHgwNDAxZjdiMSwgMHg0OTJmYzg1NywKKwkweDU5YTgwMDIxLCAweDgwMDAwMWMwLCAweDA0MDIwMDczLCAweDU5MmU2MDA4LAorCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDk0MWEsIDB4MDQwMDAwNDEsCisJMHg1OTMwMTQwNiwgMHg4MjA4MDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAyMDA1YiwKKwkweDU5MzAxMjAzLCAweDgyMDgwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwMDU3LAorCTB4NTkyZThjMDYsIDB4ODM0NDA0ODAsIDB4MDAwMDA4MDAsIDB4MDQwMjEwMzIsCisJMHg0MTc4NDAwMCwgMHg1OTJjMTAwOSwgMHg4MjA4MTUwMCwgMHgwMGZmZmZmZiwKKwkweDA0MDFmZDc1LCAweDA0MDIwMDVmLCAweDU5MzAwMDA5LCAweDgwMDAwMWMwLAorCTB4MDQwMDAwMDMsIDB4ODEzNDA1ODAsIDB4MDQwMjAwNDgsIDB4NGQzMDAwMDAsCisJMHg1OTJlNjAxMywgMHg0OTMzYzg1NywgMHg4MzMwMDU4MCwgMHhmZmZmZmZmZiwKKwkweDA0MDAwMDBkLCAweDAyMDFmODAwLCAweDAwMTA5NDFhLCAweDVjMDI2MDAwLAorCTB4MDQwMDAwMjksIDB4NTkxYzE0MDYsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDYsCisJMHgwNDAwMDA0NiwgMHg4MjA4MDU4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMDA0MywKKwkweDA0MDFmMDAyLCAweDVjMDI2MDAwLCAweDU5YTgwMDEwLCAweDU5MmMxMDBhLAorCTB4ODIwODE1MDAsIDB4MDBmZmZmZmYsIDB4ODAwODE1ODAsIDB4MDQwMjAwMTcsCisJMHg1OTJjMTAwOSwgMHg4MjA4MTUwMCwgMHgwMGZmZmZmZiwgMHg4MDA4MTU4MCwKKwkweDA0MDAwMDBmLCAweDQ5MzY2MDA5LCAweDQ5MmU2MDA4LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwOTIsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODAwMDA1ODAsCisJMHgxYzAxZjAwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwYSwgMHgwNDAxZjAwYywKKwkweDQyMDAxMDAwLCAweDAwMDAwMDEwLCAweDA0MDFmMDA5LCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMTQsIDB4MDQwMWYwMDYsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTgsCisJMHgwNDAxZjAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAzYywgMHg0OTJmYzg1NywKKwkweDQ4MGJjODU3LCAweDQyMDAwODAwLCAweDAwMDAwMDE5LCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMzEsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZTksCisJMHg0OTJmYzg1NywgMHg0ODAzYzg1NywgMHg0ODBiYzg1NywgMHg0MDAwMDgwMCwKKwkweDA0MDFmN2Y3LCAweDQ5MmZjODU3LCAweDQyMDAwODAwLCAweDAwMDAwMDBhLAorCTB4NDE3ODEwMDAsIDB4MDQwMWY3ZjIsIDB4NDkzM2M4NTcsIDB4NTkzMDA0MDYsCisJMHg0ODAzYzg1NywgMHg1OTMwMDIwMywgMHg0ODAzYzg1NywgMHg1OTMwMDAwOSwKKwkweDQ4MDNjODU3LCAweDQyMDI4MDAwLCAweDAwMDAwMDA4LCAweDQxNzgwODAwLAorCTB4NDE3ODEwMDAsIDB4MDQwMWY3ZTgsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMWUsCisJMHgwNDAxZjdmMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdlZCwKKwkweDgyMDA0ZDgwLCAweDAwMDAwMDFkLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4ODIwMDRkODAsIDB4MDAwMDAwMWEsIDB4MDQwMjAwMDMsIDB4NDAxMDEwMDAsCisJMHgwNDAxZjdkYywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYiwgMHgwNDAyMDAwMywKKwkweDQwMTgxMDAwLCAweDA0MDFmN2Q3LCAweDgyMDA0ZDgwLCAweDAwMDAwMDFjLAorCTB4MDQwMDA3ZDQsIDB4ODIwMDRkODAsIDB4MDAwMDAwMTksIDB4MDQwMDA3ZDEsCisJMHgwNDAxZjdkNSwgMHg1OTMwMjAwOSwgMHg4MDEwMjFjMCwgMHgwNDAwMDAzNSwKKwkweDU4MTAxNDAwLCAweDgyMDgxZDAwLCAweDAwMDAwMGZmLCAweDU5MzAwYzAzLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDAwMjIsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwYSwgMHgwNDAwMDAxNywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYywKKwkweDA0MDAwMDEwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDE5LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMTIsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwYiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNSwKKwkweDA0MDAwMDA0LCAweDgyMDQwNTgwLCAweDAwMDAwMDMzLCAweDA0MDIwMDE5LAorCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMDAwMGQsIDB4MDQwMWYwMTUsCisJMHg4MjBjMDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDAwOSwgMHgwNDAxZjAxMSwKKwkweDgyMGMwNTgwLCAweDAwMDAwMDBiLCAweDA0MDAwMDA1LCAweDA0MDFmMDBkLAorCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMGEsIDB4ODIwODFkMDAsCisJMHhmZmZmZmYwMCwgMHg4NDBjMDFjMCwgMHg4MDBjMDU0MCwgMHg0ODEzYzg1NywKKwkweDQ4MGJjODU3LCAweDQ4MDdjODU3LCAweDQ4MDNjODU3LCAweDQ4MDAyNDAwLAorCTB4MWMwMWYwMDAsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MGEsIDB4MDQwMDAwMDMsCisJMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg1OWE4MDAyNiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDI4LCAweDA0MDAwMDA4LCAweDQyMDI4ODAwLCAweDAwMDAwN2ZkLAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMDMsIDB4NTkzNDAwMGEsCisJMHg4YzAwMDUwNCwgMHgxYzAxZjAwMCwgMHg0ZDMwMDAwMCwgMHg1OTM0MDAwZSwKKwkweDgwMDI2NTQwLCAweDA0MDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA2MmQ1LAorCTB4MDIwMDA4MDAsIDB4MDAxMDY0YWQsIDB4NDk3YTY4MGUsIDB4NWMwMjYwMDAsCisJMHgxYzAxZjAwMCwgMHg0ZDQ0MDAwMCwgMHg0ZDM0MDAwMCwgMHg4MDAwMDU4MCwKKwkweDQwMDAxODAwLCAweDQwMDI4ODAwLCAweDgyMDgwNTgwLCAweDAwMDAwMDA4LAorCTB4MDQwMjAwMDMsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI0NSwgMHgwNDAyMDAwYSwgMHgwNDAxZmQ2ZCwgMHgwNDAyMDAwOCwKKwkweDgwMGMxOWMwLCAweDA0MDAwMDA0LCAweDU5MzQwNDA1LCAweDhjMDAwNTA4LAorCTB4MDQwMDAwMDMsIDB4ODAwODEwNDAsIDB4MDQwMDAwMDksIDB4ODE0Njg4MDAsCisJMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwgMHgwNDAwMTdmMSwgMHg4MDAwMDU4MCwKKwkweDVjMDI2ODAwLCAweDVjMDI4ODAwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjY4MDAsIDB4NWMwMjg4MDAsIDB4MWMwMWYwMDAsCisJMHg0YTAzMzAyMCwgMHgwMDAwMDAwMCwgMHg0OTdiMzAyNiwgMHg0OTdiMzAyNywKKwkweDQ5N2IzMDI4LCAweDQ5N2IzMDI5LCAweDQ5N2IzMDJiLCAweDQ5N2IzMDIxLAorCTB4NGEwM2IxMDQsIDB4NjAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg1OTljMDAxOCwgMHg0OTdiMzAyNCwgMHg0OTdiMzAyNSwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwZDgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDA2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDYsIDB4MDQwMDAwMGQsIDB4NDk3YjMwMjIsCisJMHgxYzAxZjAwMCwgMHg0YTAzMzAyMiwgMHgwMDAwMDAwNSwgMHg1OTljMDIxNiwKKwkweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDA0MDIwMDAzLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4NDgwMzMwMjMsIDB4MWMwMWYwMDAsIDB4NGEwMzMwMjIsCisJMHgwMDAwMDAwNiwgMHgwNDAxZjdmNiwgMHgwNDAxZmZlNSwgMHg0YTAzYzgyNiwKKwkweDAwMDAwMDA0LCAweDU5OWMwMjA5LCAweDgwMDAwNTQwLCAweDA0MDAwMDFmLAorCTB4NTk5YzAyMDcsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDcsIDB4ODAwMDAwY2MsCisJMHg1OTljMDgwZCwgMHg4MDA0MDQwMCwgMHg0ODAzYjEwMCwgMHg0OTdiYjEwMiwKKwkweDU5ZDgwMTAxLCAweDU5OWMwMDBkLCAweDQ4MDNiMTAwLCAweDU5OWMwMDBlLAorCTB4NDgwM2IxMDEsIDB4NTk5YzAyMDcsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDIsCisJMHg0OTdiYjEwMiwgMHg1OTljMGEwOSwgMHg4MjA0MDU0MCwgMHgwMDQwMDAwMCwKKwkweDU5OTgwODIyLCAweDQ4MDNiMTAzLCAweDRhMDNiMTA5LCAweDAwMDAwMDA0LAorCTB4NGEwM2IxMDQsIDB4MTAwMDAwMDEsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMDQsCisJMHg0YTAzMzAyMCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0YTAzMzAyMCwKKwkweDAwMDAwMDAyLCAweDA0MDFmN2ZkLCAweDU5OTgwMDIyLCAweDQ4MDNjODU2LAorCTB4ODAwMDA1NDAsIDB4MDIwMDAwMDAsIDB4MDAwMjAyZGUsIDB4MDQwMWYwMTcsCisJMHg0MjAzNDAwMCwgMHgwMDEwYjRhNCwgMHg1OWExZDgxZSwgMHg4MGVkZDljMCwKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU4ZWMwMDA5LCAweDQ4ZWZjODU3LAorCTB4NDlhM2M4NTcsIDB4NDkyZmM4NTcsIDB4NDgwM2M4NTcsIDB4ODAwMDAxYzAsCisJMHgwODAyMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTMxZDgyMSwKKwkweDU4ZWY0MDBiLCAweDU4ZWMwMDA5LCAweDgwMDAwMWMwLCAweDA4MDIwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDk3YTU4MDAsIDB4NTk5ODAwMjYsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDA4YywgMHg1OWQ4MDEwNSwgMHg4MjAwMGQwMCwKKwkweDAwMDE4NzgwLCAweDA0MDIwMWRhLCAweDgwMDAwMTA2LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDMsIDB4MGMwMWYwMDEsIDB4MDAxMDRkMGEsIDB4MDAxMDRkODksCisJMHgwMDEwNGQyMiwgMHgwMDEwNGQ1MCwgMHg1OTJjMDAwMSwgMHg0OTJmYzg1NywKKwkweDQ5MmZiMTA3LCAweDgwMDAwZDQwLCAweDA0MDIwMDA3LCAweDU5OTQwMDE5LAorCTB4ODAwMDA1NDAsIDB4MDQwMjIwMDMsIDB4NTk5ODAwMjMsIDB4NDgwMzI4MTksCisJMHgxYzAxZjAwMCwgMHg0OTdhNTgwMSwgMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwKKwkweDQ5NmE1ODAwLCAweDgxNWViODAwLCAweDQxMmVkMDAwLCAweDgwMDAwZDQwLAorCTB4MDQwMjA3ZjksIDB4NTljODAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsCisJMHg0ODAzOTAwMCwgMHgwNDAxZjdlZSwgMHg0OTJmYzg1NywgMHg0OTJmYjEwNywKKwkweDU5MmMwMDAxLCAweDgwMDAwZDQwLCAweDA0MDIwMDEyLCAweDU5ZGE1OTA4LAorCTB4ODM1YzA0ODAsIDB4MDAwMDAwMjAsIDB4MDQwMDEwMWMsIDB4MDQwMmIwMWEsCisJMHg0OTJmYjAwNywgMHgwNDAwZTdmYSwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKKwkweDAwMDE4NzgwLCAweDA0MDIwMWFhLCAweDU5OTQwMDE5LCAweDgwMDAwNTQwLAorCTB4MDQwMjIwMDMsIDB4NTk5ODAwMjMsIDB4NDgwMzI4MTksIDB4MWMwMWYwMDAsCisJMHg0OTdhNTgwMSwgMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwgMHg0OTZhNTgwMCwKKwkweDgxNWViODAwLCAweDQxMmVkMDAwLCAweDgwMDAwZDQwLCAweDA0MDIwN2Y5LAorCTB4NTljODAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsCisJMHgwNDAxZjdlMywgMHgwNDAwZjAwOSwgMHg0OTZhNTgwMCwgMHg0MTJlZDAwMCwKKwkweDgxNWViODAwLCAweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLAorCTB4NDgwMzkwMDAsIDB4MDQwMWY3ZTAsIDB4NDkyZmE4MDcsIDB4MDQwMWY3ZGUsCisJMHg0OTJmYzg1NywgMHg1OWQ4MTEwOCwgMHg0NTY4MTAwMCwgMHg0MDBhZDAwMCwKKwkweDgxNWViODAwLCAweDA0MDBlN2ZjLCAweDU5YzgwMDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsIDB4MDQwMmQwMGMsIDB4NTkyYzAwMDEsCisJMHg0OTJmYzg1NywgMHg0OTJmYjEwNywgMHg4MDAwMGQ0MCwgMHgwNDAyMDAxZCwKKwkweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDIyMDAzLCAweDU5OTgwMDIzLAorCTB4NDgwMzI4MTksIDB4MWMwMWYwMDAsIDB4NTlkODAxMDUsIDB4ODIwMDA1MDAsCisJMHgwMDAxODc4MCwgMHgwNDAyMDE3MiwgMHg0MjAwMDAwMCwgMHgwMDEwYjg1NSwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5OTgwMDI2LCAweDU5OTgwODI4LAorCTB4ODAwMDAwMDAsIDB4NDgwMzMwMjYsIDB4NDkyZmM4NTcsIDB4ODAwNDA5YzAsCisJMHg0OTJmMzAyOCwgMHgwNDAwMDAwMywgMHg0OTJjMDgwMCwgMHgwNDAxZjAwMiwKKwkweDQ5MmYzMDI5LCAweDU5MmMwMDAxLCAweDgwMDAwZDQwLCAweDA0MDAwN2U1LAorCTB4NDk3YTU4MDEsIDB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsIDB4NDk2YTU4MDAsCisJMHg4MTVlYjgwMCwgMHg0MTJlZDAwMCwgMHg4MDAwMGQ0MCwgMHgwNDAyMDdmOSwKKwkweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLAorCTB4MDQwMWY3ZDgsIDB4NTk5ODAwMjYsIDB4NTk5ODA4MjgsIDB4ODAwMDAwMDAsCisJMHg0ODAzMzAyNiwgMHg0OTJmYzg1NywgMHg4MDA0MDljMCwgMHg0OTJmMzAyOCwKKwkweDA0MDAwMDAzLCAweDQ5MmMwODAwLCAweDA0MDFmMDAyLCAweDQ5MmYzMDI5LAorCTB4NTkyYzAwMDEsIDB4ODAwMDBkNDAsIDB4MDQwMjAwMjcsIDB4MDQwMmQwMGUsCisJMHg1OTk4MDAyOSwgMHg4MDAyNWQ0MCwgMHgwNDAwMDAwZiwgMHg1OTk4MDAyNiwKKwkweDgwMDAwMDQwLCAweDQ4MDMzMDI2LCAweDA0MDIwMDAyLCAweDQ4MDMzMDI4LAorCTB4NTkyYzAwMDAsIDB4NDgwMzMwMjksIDB4NDkyZmM4NTcsIDB4NDkyZmIxMDcsCisJMHgwNDAwZDdmNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg1NSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTQ3LCAweDA0MDJlMDBhLCAweDU5ZGE1OTA4LCAweDQ5NmE1ODAwLAorCTB4NDEyZWQwMDAsIDB4ODE1ZWI4MDAsIDB4MDQwMGU3ZmMsIDB4NTljODAwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHg1OWQ4MDEwNSwKKwkweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDA0MDIwMTI1LCAweDU5OTQwMDE5LAorCTB4ODAwMDA1NDAsIDB4MDQwMjIwMDMsIDB4NTk5ODAwMjMsIDB4NDgwMzI4MTksCisJMHgxYzAxZjAwMCwgMHg0OTdhNTgwMSwgMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwKKwkweDQ5NmE1ODAwLCAweDgxNWViODAwLCAweDQxMmVkMDAwLCAweDgwMDAwZDQwLAorCTB4MDQwMjA3ZjksIDB4NTljODAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsCisJMHg0ODAzOTAwMCwgMHgwNDAxZjdjZSwgMHg1OTJjMDIwNCwgMHg0ODAzYzg1NiwKKwkweDA0MDAwMDA4LCAweDQyMDM0MDAwLCAweDAwMTBiNGE0LCAweDU5YTFkODFlLAorCTB4ODBlZGQ5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4MDQwMWYwMDMsCisJMHg1OTMxZDgyMSwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwOSwgMHg4MDAwMDFjMCwKKwkweDA4MDIwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ5N2E1ODAxLAorCTB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsCisJMHg4MTVlYjgwMCwgMHg4MDAwMGQ0MCwgMHgwNDAyMDdmOSwgMHg1OWM4MDAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDFjMDFmMDAwLAorCTB4NDk3YTU4MDEsIDB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsIDB4NDk2YTU4MDAsCisJMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwgMHg4MDAwMGQ0MCwgMHgwNDAyMDdmOSwKKwkweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLAorCTB4MDIwMGUwMDAsIDB4MDAwMjAyZmIsIDB4MDIwMWYwMDAsIDB4MDAwMjAzMDIsCisJMHg1OTk4MDAyYiwgMHg4NDAwMDU0MCwgMHg0ODAzMzAyYiwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMzVlLCAweDQyMDAwMDAwLCAweDAwMTBiODU1LCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4NDkyZmM4NTcsIDB4NTk5ODAwMjYsIDB4NTk5ODA4MjgsCisJMHg4MDAwMDAwMCwgMHg0ODAzMzAyNiwgMHg4MDA0MDljMCwgMHg0OTJmMzAyOCwKKwkweDA0MDAwMDAzLCAweDQ5MmMwODAwLCAweDA0MDFmMDAyLCAweDQ5MmYzMDI5LAorCTB4NTkyYzAwMDEsIDB4ODAwMDBkNDAsIDB4MDQwMjAwMDIsIDB4MWMwMWYwMDAsCisJMHg0OTdhNTgwMSwgMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwgMHg0OTZhNTgwMCwKKwkweDQxMmVkMDAwLCAweDgxNWViODAwLCAweDgwMDAwZDQwLCAweDA0MDIwN2Y5LAorCTB4NTljODAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsCisJMHgxYzAxZjAwMCwgMHg1OTk4MDAyNiwgMHg1OTk4MDgyOCwgMHg4MDAwMDAwMCwKKwkweDQ4MDMzMDI2LCAweDQ5MmZjODU3LCAweDgwMDQwOWMwLCAweDQ5MmYzMDI4LAorCTB4MDQwMDAwMDMsIDB4NDkyYzA4MDAsIDB4MDQwMWYwMDIsIDB4NDkyZjMwMjksCisJMHg1OTJjMDAwMSwgMHg4MDAwMGQ0MCwgMHgwNDAyMDAzOSwgMHgwNDAyZDAwZSwKKwkweDU5OTgwMDI5LCAweDgwMDI1ZDQwLCAweDA0MDAwMDBmLCAweDU5OTgwMDI2LAorCTB4ODAwMDAwNDAsIDB4NDgwMzMwMjYsIDB4MDQwMjAwMDIsIDB4NDgwMzMwMjgsCisJMHg1OTJjMDAwMCwgMHg0ODAzMzAyOSwgMHg0OTJmYzg1NywgMHg0OTJmYjEwNywKKwkweDA0MDBkN2Y0LCAweDQyMDAwMDAwLCAweDAwMTBiODU1LCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4MDQwMmUwMWQsIDB4NTlkYTU5MDgsIDB4NDk2YTU4MDAsCisJMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwgMHgwNDAwZTdmYywgMHg1OWM4MDAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDA0MDA2MDE4LAorCTB4NTlkODAxMGEsIDB4NTlkODA5MGEsIDB4ODAwNDBkODAsIDB4MDQwMjA3ZmQsCisJMHg5MDAwMDFjMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAxMywgMHg0ODAzYzAxMSwKKwkweDU5OTgwMDJiLCAweDg0MDAwNTAwLCAweDQ4MDMzMDJiLCAweDU5ZTAwMDE3LAorCTB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsIDB4MDAwMDAwMDMsCisJMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKKwkweDAwMDE4NzgwLCAweDA0MDIwMDdlLCAweDFjMDFmMDAwLCAweDU5OTgwMDJiLAorCTB4ODQwMDA1NDAsIDB4NDgwMzMwMmIsIDB4MDQwMWY3ZjgsIDB4NDk3YTU4MDEsCisJMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwgMHg0OTZhNTgwMCwgMHg0MTJlZDAwMCwKKwkweDgxNWViODAwLCAweDgwMDAwZDQwLCAweDA0MDIwN2Y5LCAweDU5YzgwMDAwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsIDB4MDQwMWY3YmMsCisJMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHg0OTJmYzg1NywKKwkweDQ5NDNjODU3LCAweDQ4MDdjODU3LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAorCTB4NDk0MjVhMDYsIDB4NDgwNjVhMDgsIDB4NGEwMjVjMDYsIDB4MDAwMGZmZmYsCisJMHg4MTMyNjFjMCwgMHgwNDAwMDAwMywgMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwKKwkweDgzMmMwNDAwLCAweDAwMDAwMDA5LCAweDA0MDExMDAwLCAweDQ4MDNjODQwLAorCTB4NGEwM2M4NDIsIDB4MDAwMDAwMGIsIDB4MDQwMTEwMDAsIDB4MWMwMWYwMDAsCisJMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg1OTljYjgxNywKKwkweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDAyMDIzLCAweDA0MDAwMDBlLAorCTB4NTk5ODAwMjIsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMWUsCisJMHg1OWE4MDA2OSwgMHg4MTY0MDU4MCwgMHgwNDAyMDAxYiwgMHg4YzVjYmQwOCwKKwkweDA0MDAwMDA1LCAweDU5YTgwMDZhLCAweDU5YTgwODY2LCAweDgwMDQwNTgwLAorCTB4MDQwMjAwMTUsIDB4OGM1Y2JkMDgsIDB4MDQwMjAwMzAsIDB4NTlkODA5MGIsCisJMHg1OWQ4MDEwYSwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwZCwgMHgwNDAwNjAwZSwKKwkweDRhMDNjMDExLCAweDgwNDAwMDEyLCAweDRhMDNjMDIwLCAweDAwMDA4MDQwLAorCTB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsCisJMHgwMDAwMDAwMiwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg0YTAzMjgxOSwKKwkweGZmZmYwMDAwLCAweDA0MDI2ODM1LCAweDA0MDA2MDAzLCAweDhjNWNiZDA4LAorCTB4MDQwMjA4NjAsIDB4NTk5ODAwMjksIDB4ODAwMjVkNDAsIDB4MDQwMDAwMTAsCisJMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwgMHgwMDAxODc4MCwgMHgwNDAyMDAyMCwKKwkweDA0MDJkMDBkLCAweDU5OTgwMDI2LCAweDQ5MmZjODU3LCAweDgwMDAwMDQwLAorCTB4NDgwMzMwMjYsIDB4NTkyYzAwMDAsIDB4NDkyZmIxMDcsIDB4NDgwMzMwMjksCisJMHgwNDAyMDAwMywgMHg0ODAzYzg1NiwgMHg0ODAzMzAyOCwgMHg1YzAzZTAwMCwKKwkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODU1LCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4MDQwMWY3ZmEsIDB4NTllMDAwMGYsIDB4NTllMDA4MGYsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwgMHg1OWUwMDAxMCwgMHg1OWUwMTAxMCwKKwkweDgwMDgxNTgwLCAweDA0MDIwN2ZkLCAweDQwMDY1MDAwLCAweDgwMDQxNTgwLAorCTB4MDQwMDA3YzcsIDB4MDQwMDY3ZGMsIDB4MDQwMWY3Y2EsIDB4NDgwM2M4NTcsCisJMHg0ODVmYzg1NywgMHg4YzAwMDUwZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkMCwKKwkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDQyMDBiODAwLCAweDAwMDA4MDA0LAorCTB4MDIwMWYwMDAsIDB4MDAxMDA1ZGQsIDB4NTk5ODAwMmIsIDB4OGMwMDA1MDAsCisJMHgwNDAwMDAxMywgMHg4NDAwMDUwMCwgMHg0ODAzMzAyYiwgMHg1OWQ4MDEwYSwKKwkweDU5ZDgwOTBhLCAweDgwMDQwNTgwLCAweDA0MDIwN2ZkLCAweDgwMDQwOGUwLAorCTB4ODIwNDBkNDAsIDB4MDAwMDAwMTMsIDB4NDgwN2MwMTEsIDB4NTllMDAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAwMDAwMywgMHg0YTAzYzAxNywgMHgwMDAwMDAwMywKKwkweDQyMDNlMDAwLCAweDMwMDAwMDAxLCAweDFjMDFmMDAwLCAweDA0MDJlMDE0LAorCTB4NTlkYTU5MDgsIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsIDB4ODE1ZWI4MDAsCisJMHgwNDAwZTdmYywgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwKKwkweDQ4MDM5MDAwLCAweDU5ZDgwOTBiLCAweDU5OTgwMDI0LCAweDQ4MDczMDI0LAorCTB4ODAwNDA0ODAsIDB4MDQwMjAwMDQsIDB4NTk5NDAwMTksIDB4ODAwMDA1NDAsCisJMHgwNDAyMjAwMywgMHg1OTk4MDgyMywgMHg0ODA3MjgxOSwgMHg1OWQ4MDEwNSwKKwkweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDA0MDIwN2M5LCAweDFjMDFmMDAwLAorCTB4NTk5ODEwMjUsIDB4NTllMDAwMTAsIDB4NTllMDA4MTAsIDB4ODAwNDFkODAsCisJMHgwNDAyMDdmZCwgMHg4MDA4MDU4MCwgMHgwNDAwMDAxMywgMHg0ODA3MzAyNSwKKwkweDU5ZTAwMDBmLCAweDU5ZTAxMDBmLCAweDgwMDgxZDgwLCAweDA0MDIwN2ZkLAorCTB4ODEyODA1ODAsIDB4MDQwMDAwMDgsIDB4NDAwYTUwMDAsIDB4NDAwODAwMDAsCisJMHg4MDA0MDU4MCwgMHgwNDAwMDAwMywgMHg1OTk4MDgyMywgMHg0ODA3MjgxOSwKKwkweDFjMDFmMDAwLCAweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDIyN2Y4LAorCTB4MDQwMWY3ZmMsIDB4NTllMDAwMGYsIDB4NTllMDEwMGYsIDB4ODAwODFkODAsCisJMHgwNDAyMDdmZCwgMHg4MTI4MDU4MCwgMHgwNDAwMDdmNiwgMHg0MDBhNTAwMCwKKwkweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDAyN2VkLCAweDA0MDFmN2YxLAorCTB4NTlhODAwMTcsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGEsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjgwOSwgMHg0YTAzODgwNSwgMHgwMDAwMDBmMCwKKwkweDU5YzQwMGEzLCAweDgyMDAwNTAwLCAweDAyODcwMDAwLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4MWMwMWYwMDAsIDB4MDAxMDRmYzUsIDB4MDAxMDRmNTEsCisJMHgwMDEwNGY2YywgMHgwMDEwNGY5NSwgMHgwMDEwNGZiOCwgMHgwMDEwNGZmMiwKKwkweDAwMTA1MDA0LCAweDAwMTA0ZjZjLCAweDAwMTA0ZmQ2LCAweDAwMTA0ZjUwLAorCTB4MWMwMWYwMDAsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDQsIDB4MDQwMWY4ZjksCisJMHgwMjAxZjgwMCwgMHgwMDEwNTNhYiwgMHg1OWM0MDgwNSwgMHg4YzA0MGQwZSwKKwkweDA0MDIwMDEzLCAweDhjMDQwZDBhLCAweDA0MDIwMDBiLCAweDhjMDQwZDBjLAorCTB4MDQwMjAwMDYsIDB4OGMwNDBkMDgsIDB4MDQwMDAwMGQsIDB4NGEwMzUwMTcsCisJMHgwMDAwMDAwMywgMHgwNDAxZjAwYSwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMCwKKwkweDA0MDFmMDA3LCAweDQyMDAwMDAwLCAweDAwMTBiODQ0LCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDIsIDB4MWMwMWYwMDAsCisJMHg0YTAzODgwOCwgMHgwMDAwMDAwMiwgMHgwNDAxZjhkZSwgMHg1OWM0MDgwNSwKKwkweDhjMDQwZDA4LCAweDA0MDIwMDIxLCAweDhjMDQwZDBjLCAweDA0MDIwMDFjLAorCTB4OGMwNDBkMGUsIDB4MDQwMjAwMTcsIDB4ODIwNDA1MDAsIDB4MDAwMDAwZjAsCisJMHgwNDAyMDAxYywgMHgwMjAxZjgwMCwgMHgwMDEwNTNhYiwgMHg0YTAzODgwOCwKKwkweDAwMDAwMDgwLCAweDU5YzQwMDAyLCAweDg0MDAwNTBjLCAweDQ4MDM4ODAyLAorCTB4MDQwMWY5ZDksIDB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTg3NCwgMHg1YzAyNzgwMCwgMHg0YTAzODgwOCwKKwkweDAwMDAwMDgwLCAweDRhMDM1MDE3LCAweDAwMDAwMDA5LCAweDA0MDFmMDA5LAorCTB4NGEwMzUwMTcsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDYsIDB4NGEwMzUwMTcsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjAwMywgMHg0YTAzNTAxNywgMHgwMDAwMDAwMywKKwkweDFjMDFmMDAwLCAweDA0MDFmOGI3LCAweDRhMDM4ODA4LCAweDAwMDAwMDgwLAorCTB4NTljNDA4MDUsIDB4OGMwNDBkMGEsIDB4MDQwMjAwMWIsIDB4OGMwNDBkMGMsCisJMHgwNDAyMDAxNiwgMHg4YzA0MGQwZSwgMHgwNDAyMDAxMSwgMHg4MjA0MDUwMCwKKwkweDAwMDAwMGYwLCAweDA0MDIwMDE2LCAweDU5YzQwMDAyLCAweDg0MDAwNTBjLAorCTB4NDgwMzg4MDIsIDB4MDQwMWY5YjQsIDB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwOTg3NCwgMHg1YzAyNzgwMCwKKwkweDRhMDM1MDE3LCAweDAwMDAwMDA5LCAweDA0MDFmMDA5LCAweDRhMDM1MDE3LAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDYsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDAsCisJMHgwNDAxZjAwMywgMHg0YTAzNTAxNywgMHgwMDAwMDAwMiwgMHgxYzAxZjAwMCwKKwkweDRhMDM4ODA4LCAweDAwMDAwMDA4LCAweDU5YzQwODA1LCAweDhjMDQwZDBjLAorCTB4MDQwMjAwMDYsIDB4OGMwNDBkMGUsIDB4MDQwMDAwMDYsIDB4NGEwMzUwMTcsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjAwMywgMHg0YTAzNTAxNywgMHgwMDAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDA0MDFmOGQzLCAweDU5YzQwODA1LCAweDhjMDQwZDBjLAorCTB4MDQwMjAwMGQsIDB4NGMwNDAwMDAsIDB4MDQwMWY4ODIsIDB4NWMwMDA4MDAsCisJMHg4YzA0MGQwYSwgMHgwNDAyMDAwNiwgMHg4YzA0MGQwZSwgMHgwNDAwMDAwNiwKKwkweDRhMDM1MDE3LCAweDAwMDAwMDAxLCAweDA0MDFmMDAzLCAweDRhMDM1MDE3LAorCTB4MDAwMDAwMDIsIDB4MWMwMWYwMDAsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDgsCisJMHg0MjAwMTAwMCwgMHgwMDEwNTA1OCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA4NCwKKwkweDU5YzQwODA1LCAweDhjMDQwZDBhLCAweDA0MDIwMDBkLCAweDhjMDQwZDA4LAorCTB4MDQwMjAwMGIsIDB4OGMwNDBkMGMsIDB4MDQwMjAwMDYsIDB4OGMwNDBkMGUsCisJMHgwNDAwMDAwZCwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMSwgMHgwNDAxZjAwYSwKKwkweDRhMDM1MDE3LCAweDAwMDAwMDAwLCAweDA0MDFmMDA3LCAweDQyMDAwMDAwLAorCTB4MDAxMGI4NDQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NGEwMzUwMTcsCisJMHgwMDAwMDAwNCwgMHgxYzAxZjAwMCwgMHgwNDAxZjhhNiwgMHgwNDAxZjg1OSwKKwkweDU5YzQwODA1LCAweDhjMDQwZDBhLCAweDA0MDIwMDBiLCAweDhjMDQwZDBjLAorCTB4MDQwMjAwMDYsIDB4OGMwNDBkMGUsIDB4MDQwMDAwMDksIDB4NGEwMzUwMTcsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjAwNiwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMCwKKwkweDA0MDFmMDAzLCAweDRhMDM1MDE3LCAweDAwMDAwMDAyLCAweDFjMDFmMDAwLAorCTB4NGEwMzg4MDgsIDB4MDAwMDAwMDQsIDB4MDQwMWY4NDYsIDB4NTljNDA4MDUsCisJMHg4YzA0MGQwYSwgMHgwNDAyMDAxMCwgMHg4YzA0MGQwOCwgMHgwNDAyMDAwYiwKKwkweDhjMDQwZDBjLCAweDA0MDIwMDA2LCAweDhjMDQwZDBlLCAweDA0MDAwMDBjLAorCTB4NGEwMzUwMTcsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDksIDB4NGEwMzUwMTcsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjAwNiwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMywKKwkweDA0MDFmMDAzLCAweDRhMDM1MDE3LCAweDAwMDAwMDAyLCAweDFjMDFmMDAwLAorCTB4MDQwMWY5MWYsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NTlhODA4MDUsCisJMHg4YzA0MGQwYywgMHgwNDAwMDAxNSwgMHg4NDA0MGQwYywgMHg0ODA3NTAwNSwKKwkweDRhMDM4ODA1LCAweDAwMDAwMDEwLCAweDAyMDFmODAwLCAweDAwMTAxOTM3LAorCTB4NTljNDAwMDUsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDgsIDB4NGEwMzg4MDgsCisJMHgwMDAwMDAwOCwgMHg0YTAzNTAzMywgMHgwMDAwMDAwMSwgMHg0MjAyZDgwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDFhLCAweDU5YzQwMDA2LCAweDg0MDAwNTQ4LAorCTB4NDgwMzg4MDYsIDB4MDQwMWYwMTYsIDB4NTlhODAwMTcsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwNDAwMDAwYywgMHg1OWE4MDAxNywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA1LCAweDA0MDIwMDBjLCAweDQyMDAwMDAwLCAweDAwMTBiODQ0LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDgsCisJMHgwNDAxZjAwNywgMHg0MjAwMDAwMCwgMHgwMDEwYjg0NCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTQ3LCAweDRhMDM1MDE3LCAweDAwMDAwMDA0LCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDA2NCwgMHg0MjAwMTAwMCwgMHgwMDEwNTA1OCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MDc5LCAweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NGMwNDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsCisJMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmUyMSwgMHg1YzAzZTAwMCwKKwkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDA0MDFmZmJhLCAweDVjMDAwODAwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZTIxLCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2YzRiLAorCTB4NTljNDAwMDYsIDB4ODQwMDA1MDAsIDB4NDgwMzg4MDYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmVkZSwgMHg0OTdiODg4MCwgMHgwMjAxZjgwMCwgMHgwMDEwYTljMCwKKwkweDAyMDFmODAwLCAweDAwMTBhOWNlLCAweDAyMDFmODAwLCAweDAwMTAxODE1LAorCTB4NGEwMzUwNGMsIDB4MDAwMDAwMDQsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDQsCisJMHg0YTAzODgwNSwgMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwgMHgwMDEwNTA1OCwKKwkweDAyMDFmODAwLCAweDAwMTA2MDg0LCAweDAyMDFmODAwLCAweDAwMTAwNmQ0LAorCTB4MDQwMWY4YzEsIDB4MDQwMDAwMDYsIDB4NDIwMDYwMDAsIDB4ZmVmZmZmZmYsCisJMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNDUyLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDE1OTAsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsCisJMHg1OWM0MDAwOCwgMHg4YzAwMDUwOCwgMHgwNDAyMDAwNywgMHg0YTAzODgwOCwKKwkweDAwMDAwMDEwLCAweDQyMDFkMDAwLCAweDAwMDAxMzg4LCAweDAyMDFmODAwLAorCTB4MDAxMDYwOGUsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NTlhODA4MzMsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwYiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAxLCAweDA0MDAwMDBiLCAweDgyMDQwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMDAwMGIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMGIsCisJMHgwNDAxZjA1NywgMHg0YTAzNTAxNywgMHgwMDAwMDAwMCwgMHgwNDAxZjAwOSwKKwkweDRhMDM1MDE3LCAweDAwMDAwMDA0LCAweDA0MDFmMDA2LCAweDRhMDM1MDE3LAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDMsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDcsCisJMHg0OTdiODg4MCwgMHg0YTAzODg5MywgMHgwMDAwMDAwMSwgMHg0MTc4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxNjA2LCAweDAyMDFmODAwLCAweDAwMTA2ZWRlLAorCTB4ODM2YzBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMDgsIDB4NTljNDAwMDYsCisJMHg4MjAwMDUwMCwgMHhmZmZmZmYwZiwgMHg4MjAwMDU0MCwgMHgwNDAwMDAwMSwKKwkweDQ4MDM4ODA2LCAweDA0MDFmMDA3LCAweDU5YzQwMDA2LCAweDgyMDAwNTAwLAorCTB4ZmZmZmZmMGYsIDB4ODIwMDA1NDAsIDB4MDQwMDAwMDAsIDB4NDgwMzg4MDYsCisJMHgwNDAxZjg3NSwgMHgwNDAyMDAwNSwgMHg1OWM0MDgwNiwgMHg4MjA0MGQwMCwKKwkweGZiZmZmZjBmLCAweDQ4MDc4ODA2LCAweDQyMDBiMDAwLCAweDAwMDAwMDA1LAorCTB4NTljNDAwMDUsIDB4OGMwMDA1MzQsIDB4MDQwMjAwMzMsIDB4NDIwMDYwMDAsCisJMHhmYzE4ZmZmZiwgMHg0MjAwNjgwMCwgMHgwMTAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MjdkLCAweDAyMDFmODAwLCAweDAwMTAxOTM3LCAweDU5YzQwOGE0LAorCTB4ODIwNDBkMDAsIDB4MDAwMDAwMGYsIDB4ODIwNDBkODAsIDB4MDAwMDAwMGMsCisJMHgwNDAwMDAwYSwgMHg0MjAwNjAwMCwgMHhmZWZmZmZmZiwgMHg0MjAwNjgwMCwKKwkweDAyMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZTgsIDB4MDQwMWY4YTEsIDB4MDQwMWY4NTMsIDB4MDQwMDAwMDYsCisJMHg0MjAwNjAwMCwgMHhmZWZmZmZmZiwgMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MjdkLCAweDgzNmMwZDgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDA2LAorCTB4NTlhODA4NGQsIDB4NDIwMDEwMDAsIDB4MDAxMDUwNjUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjA2ZSwgMHg0YTAzNTAzMywgMHgwMDAwMDAwNCwgMHgwNDAxZmUzMSwKKwkweDA0MDFmODQxLCAweDA0MDIwMDA4LCAweDU5YzQwOGE0LCAweDgyMDQwZDAwLAorCTB4MDAwMDAwMGYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDVkOCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2MDllLCAweDRhMDM1MDEwLAorCTB4MDBmZmZmZmYsIDB4NDk3YjUwMzIsIDB4NTlhODAwMmEsIDB4ODIwMDA1MDAsCisJMHhmZmZmMDAwMCwgMHg0ODAzNTAyYSwgMHg0OTdiODg4MCwgMHg0OTdiODg5MywKKwkweDQxNzgwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNjA2LCAweDU5YzQwMDAxLAorCTB4ODIwMDA1MDAsIDB4ZmZmZmZjZmYsIDB4NDgwMzg4MDEsIDB4NDIwMDYwMDAsCisJMHhmYzE4ZmZmZiwgMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwKKwkweDRhMDM4ODA4LCAweDAwMDAwMDAwLCAweDVjMDAwMDAwLCAweDgwMDAwMWMwLAorCTB4MDIwMjA4MDAsIDB4MDAxMDQxMWQsIDB4NGEwMzg4MDUsIDB4MDQwMDAwZjAsCisJMHg1OWM0MDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmZmZjZiwgMHg4MjAwMDU0MCwKKwkweDQ0MDAwMGMxLCAweDQ4MDM4ODA2LCAweDFjMDFmMDAwLCAweDRjNWMwMDAwLAorCTB4NTlhOGI4MzIsIDB4ODI1Y2JkODAsIDB4MDAwMGFhYWEsIDB4NWMwMGI4MDAsCisJMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg1OTljYjgxOCwgMHg4MjVjYmQwMCwKKwkweDAwMDAwMDMwLCAweDgyNWNiZDgwLCAweDAwMDAwMDAwLCAweDVjMDBiODAwLAorCTB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NTk5Y2I4MTgsIDB4ODI1Y2JkMDAsCisJMHgwMDAwMDAzMCwgMHg4MjVjYmQ4MCwgMHgwMDAwMDAxMCwgMHg1YzAwYjgwMCwKKwkweDFjMDFmMDAwLCAweDRjNWMwMDAwLCAweDU5OWNiODE4LCAweDgyNWNiZDAwLAorCTB4MDAwMDAwMzAsIDB4ODI1Y2JkODAsIDB4MDAwMDAwMjAsIDB4NWMwMGI4MDAsCisJMHgxYzAxZjAwMCwgMHg1OWE4MDAwNSwgMHg0ODAzYzg1NywgMHg4MjAwMGQwMCwKKwkweDAwMDAwMDEzLCAweDA0MDAwMDI1LCAweDU5OWMxMDE3LCAweDRkM2MwMDAwLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMTEsIDB4MDQwMDAwMDcsIDB4NDIwMjc4MDAsCisJMHgwMDAwMDQwMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAyMDAwYSwKKwkweDA0MDFmMDEyLCAweDQyMDI3ODAwLCAweDAwMDAwNDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDNiMjUsIDB4MDQwMDAwMGQsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDMsCisJMHgwNDAxZjAwMywgMHg0MjAwMzAwMCwgMHgwMDAwMDAwNCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDBlLCAweDAyMDFmODAwLCAweDAwMTBhNDQ5LCAweDU5OWMxMDE3LAorCTB4OGMwODE1MGEsIDB4MDQwMjAwMDcsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwMWZlNSwgMHg4MDAwMDU4MCwgMHgwNDAxZjgwZCwKKwkweDVjMDI3ODAwLCAweDA0MDFmMDBhLCAweDAyMDFmODAwLCAweDAwMTAzYjI1LAorCTB4MDQwMDAwMDcsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMGYsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwYTQ0OSwgMHgxYzAxZjAwMCwKKwkweDU5YTgwMDA1LCAweDA0MDAwMDA0LCAweDgyMDAwNTQwLCAweDAwMDAwMDEwLAorCTB4MDQwMWYwMDMsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmZWYsIDB4NDgwMzUwMDUsCisJMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YzU4MDAwMCwKKwkweDQyMDAwMDAwLCAweDAwMTBiOGNiLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NDIwMDA4MDAsIDB4MDAxMGMwZjEsIDB4NTljNDAwMDMsIDB4NDQwMDA4MDAsCisJMHg1OWM0MDAwNCwgMHg0ODAwMDgwMSwgMHg1OWM0MDAwYiwgMHg0ODAwMDgwMiwKKwkweDU5YzQwMDhlLCAweDQ4MDAwODAzLCAweDU5YzQwMDhmLCAweDQ4MDAwODA0LAorCTB4NTljNDAwOTAsIDB4NDgwMDA4MDUsIDB4NTljNDAwOTEsIDB4NDgwMDA4MDYsCisJMHg1OWM0MDA5MiwgMHg0ODAwMDgwNywgMHg1OWM0MDA5MywgMHg0ODAwMDgwOCwKKwkweDU5YzQwMDk5LCAweDQ4MDAwODA5LCAweDU5YzQwMDllLCAweDQ4MDAwODBhLAorCTB4NTljNDAwYWEsIDB4NDgwMDA4MGIsIDB4NTljNDAwYWYsIDB4NDgwMDA4MGMsCisJMHg1OWM0MDBiMiwgMHg0ODAwMDgwZCwgMHg1OWM0MDBiMSwgMHg0ODAwMDgwZSwKKwkweDgyMDQwYzAwLCAweDAwMDAwMDBmLCAweDQxYzQxODAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMzAsIDB4NTgwYzAwNTAsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsCisJMHg4MDBjMTgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYiwgMHg0MWM0MTgwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDIwLCAweDU4MGMwMDEwLCAweDQ0MDAwODAwLAorCTB4ODAwNDA4MDAsIDB4ODAwYzE4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmIsCisJMHg0OTdiODgzMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDA0MCwgMHg1OWM0MDAzMSwKKwkweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZjLAorCTB4NDk3Yjg4YWMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4NTljNDAwYWQsCisJMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywKKwkweDU5YzQxMDAxLCAweDRjMDgwMDAwLCAweDg0MDgxNTBjLCAweDQ4MGI4ODAxLAorCTB4NGEwMzcwZTQsIDB4MDAwMDAzMDAsIDB4NGEwMzcwZTUsIDB4YjAwMDAwMDAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDgwMCwgMHg4MDA0MDg0MCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDU5YjgwMGU1LCAweDhjMDAwNTM4LCAweDA0MDIwN2ZiLAorCTB4NGEwMzcwZTQsIDB4MDAwMDAyMDAsIDB4NDIwMDYwMDAsIDB4ZmZmZmZmZmYsCisJMHg0MjAwNjgwMCwgMHg4MDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwKKwkweDRhMDM4ODA3LCAweDAwMDAwMDAxLCAweDQ5N2I4ODA3LCAweDRhMDM4ODA4LAorCTB4MDAwMDAwMTAsIDB4NDIwMDYwMDAsIDB4ZmNmOGZmZmYsIDB4NDIwMDY4MDAsCisJMHgwMTAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHg1YzAwMTAwMCwKKwkweDQ4MGI4ODAxLCAweDQyMDAwODAwLCAweDAwMTBjMGYxLCAweDUwMDQwMDAwLAorCTB4NDgwMzg4MDMsIDB4NTgwNDAwMDEsIDB4NDgwMzg4MDQsIDB4NTgwNDAwMDIsCisJMHg0ODAzODgwYiwgMHg1ODA0MDAwMywgMHg0ODAzODg4ZSwgMHg1ODA0MDAwNCwKKwkweDQ4MDM4ODhmLCAweDU4MDQwMDA1LCAweDQ4MDM4ODkwLCAweDU4MDQwMDA2LAorCTB4NDgwMzg4OTEsIDB4NTgwNDAwMDcsIDB4NDgwMzg4OTIsIDB4NTgwNDAwMDgsCisJMHg0ODAzODg5MywgMHg1ODA0MDAwOSwgMHg0ODAzODg5OSwgMHg1ODA0MDAwYSwKKwkweDQ4MDM4ODllLCAweDU4MDQwMDBiLCAweDQ4MDM4OGFhLCAweDU4MDQwMDBjLAorCTB4NDgwMzg4YWYsIDB4NTgwNDAwMGQsIDB4NDgwMzg4YjIsIDB4NTgwNDAwMGUsCisJMHg0ODAzODhiMSwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwZiwgMHg0MWM0MTgwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDMwLCAweDUwMDQwMDAwLCAweDQ4MDAxODUwLAorCTB4ODAwNDA4MDAsIDB4ODAwYzE4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmIsCisJMHg0MWM0MTgwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg1MDA0MDAwMCwKKwkweDQ4MDAxODEwLCAweDgwMDQwODAwLCAweDgwMGMxODAwLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZmIsIDB4NDk3Yjg4MzAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwNDAsCisJMHg1MDA0MDAwMCwgMHg0ODAzODgzMSwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2ZjLCAweDQ5N2I4OGFjLCAweDQyMDBiMDAwLCAweDAwMDAwMDEwLAorCTB4NTAwNDAwMDAsIDB4NDgwMzg4YWQsIDB4ODAwNDA4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmYywgMHg0OTdiODg4MCwgMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNjA2LCAweDU5YzQwOGE0LCAweDgyMDQwZDAwLCAweDAwMDAwMDBmLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCisJMHg0YTAzODgwNSwgMHgwNDAwMDAwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRjNTgwMDAwLCAweDRjZTgwMDAwLCAweDQyMDAwMDAwLAorCTB4MDAxMGI4NDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NTljNDEwMDgsCisJMHg0YzA4MDAwMCwgMHg4MjA4MDUwMCwgMHhmZmZmZmY3ZiwgMHg0ODAzODgwOCwKKwkweDU5YzQwMDA0LCAweDgyMDAwNTAwLCAweDAwMDAzZTAyLCAweDA0MDAwMDA1LAorCTB4NDIwMWQwMDAsIDB4MDAwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsCisJMHg1OWM0MDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmZmYwZiwgMHg0ODAzODgwNiwKKwkweDRhMDM4ODA1LCAweDAwMDAwMDEwLCAweDRhMDM4ODA4LCAweDAwMDAwMDA0LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwNjUsIDB4NTljNDAwMDUsIDB4OGMwMDA1MDgsCisJMHgwNDAyMDAxMiwgMHg0MjAxZDAwMCwgMHgwMDAwMDNlOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MDhlLCAweDgwNThiMDQwLCAweDA0MDIwN2Y4LCAweDAyMDFmODAwLAorCTB4MDAxMDZlZGUsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDgsIDB4NGEwMzUwMzMsCisJMHgwMDAwMDAwMSwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDMwLCAweDAyMDFmODAwLCAweDAwMTAwYWUwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4YTgsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGVmNCwgMHg0OTdiODg4MCwgMHg1OWE4MDAyYSwKKwkweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDRjMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE2MDYsIDB4NWMwMDAwMDAsIDB4NDgwMzg4ODAsIDB4NGEwMzg4MDgsCisJMHgwMDAwMDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDA2NSwgMHg0YTAzODgwNSwKKwkweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTAxOTM3LCAweDQyMDAwODAwLAorCTB4MDAwMDAwZjAsIDB4NTljNDAwMDUsIDB4ODAwNDBkMDAsIDB4MDQwMDAwMDgsCisJMHg0MjAxZDAwMCwgMHgwMDAwMDNlOCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwKKwkweDgwNThiMDQwLCAweDA0MDIwN2YyLCAweDA0MDFmN2QxLCAweDU5YzQwMDA2LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwZjAsIDB4NDgwMzg4MDYsIDB4NTlhODAwMWUsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwgMHg4MDAwMDAwMCwgMHg0ODAzODg5MywKKwkweDgwMDAwNTgwLCAweDVjMDAxMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE5NWQsIDB4NWMwM2UwMDAsIDB4NDgwYjg4MDgsIDB4NWMwMWQwMDAsCisJMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YzU4MDAwMCwKKwkweDRjZTgwMDAwLCAweDU5YzQxMDA4LCAweDgyMDgwNTAwLCAweGZmZmZmZjdmLAorCTB4NDgwMzg4MDgsIDB4NGMwODAwMDAsIDB4NTljNDAwMDQsIDB4ODIwMDA1MDAsCisJMHgwMDAwM2UwMiwgMHgwNDAwMDAwNSwgMHg0MjAxZDAwMCwgMHgwMDAwMDAxNCwKKwkweDAyMDFmODAwLCAweDAwMTA2MDhlLCAweDAyMDFmODAwLCAweDAwMTAwYWUwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4YTksIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGVmNCwgMHg0YTAzODgwOCwgMHgwMDAwMDAwMiwKKwkweDgwMDAwNTgwLCAweDQ4MDM4ODgwLCAweDQ4MDM4ODkzLCAweDAyMDFmODAwLAorCTB4MDAxMDE2MDYsIDB4NDIwMGIwMDAsIDB4MDAwMDAzODQsIDB4NGEwMzg4MDUsCisJMHgwMDAwMDBmMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzNywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGYwLCAweDU5YzQwMDA1LCAweDgwMDQwZDAwLCAweDA0MDAwMDE1LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwZDAsIDB4MDQwMjAwMTIsIDB4NDIwMWQwMDAsCisJMHgwMDAwMDA2NywgMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2VmLCAweDAyMDFmODAwLCAweDAwMTA2ZWRlLCAweDRhMDM4ODA4LAorCTB4MDAwMDAwMDgsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsIDB4NDIwMmQ4MDAsCisJMHgwMDAwMDAwMSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAxMCwKKwkweDQ5N2I4ODgwLCAweDU5YTgwMDFlLCAweDgwMDAwNTQwLCAweDA0MDIwMDAyLAorCTB4ODAwMDAwMDAsIDB4NDgwMzg4OTMsIDB4NTlhODAwMmEsIDB4ODIwMDA1MDAsCisJMHgwMDAwZmZmZiwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTYwNiwKKwkweDVjMDAwMDAwLCAweDQ4MDM4ODgwLCAweDgwMDAwNTgwLCAweDVjMDAxMDAwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NWQsIDB4NWMwM2UwMDAsCisJMHg0ODBiODgwOCwgMHg1YzAxZDAwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDU5YzQwMDA0LCAweDgyMDAwNTAwLCAweDAwMDAzZTAyLAorCTB4MDQwMDAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDZlZGUsIDB4NGEwMzg4MDgsCisJMHgwMDAwMDAwOCwgMHg0YTAzNTAzMywgMHgwMDAwMDAwMSwgMHg0MjAyZDgwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDUyLCAweDAyMDFmODAwLCAweDAwMTAwYWUwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4YWEsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGVmNCwgMHg1OWM0MDAwNiwgMHg4NDAwMDUwOCwKKwkweDQ4MDM4ODA2LCAweDRhMDM4ODA1LCAweDAwMDAwMDEwLCAweDU5YTgwODA1LAorCTB4ODQwNDBkNGMsIDB4NDgwNzUwMDUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwNjQsCisJMHg0MjAwMTAwMCwgMHgwMDEwNTA1OCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA2ZSwKKwkweDRhMDM4ODA4LCAweDAwMDAwMDAwLCAweDQ5N2I4ODgwLCAweDRhMDM4ODA1LAorCTB4MDAwMDAwZjAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5MzcsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDBmMCwgMHg1OWM0MDAwNSwgMHg4MDA0MGQwMCwgMHgwNDAwMDAwZSwKKwkweDgyMDAwNTAwLCAweDAwMDAwMGUwLCAweDA0MDIwMDBiLCAweDQyMDFkMDAwLAorCTB4MDAwMDAzZTgsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWY0OCwgMHg1OTk0MDAwNCwgMHg4MDAwMDU0MCwgMHgwNDAyMDdlYywKKwkweDA0MDFmMDIzLCAweDRjMDgwMDAwLCAweDQyMDAxMDAwLCAweDAwMTA1MDY1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDVmOTAsIDB4NDIwMDEwMDAsIDB4MDAxMDUwNTgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjA4NCwgMHg1YzAwMTAwMCwgMHg0OTdiODg4MCwKKwkweDU5YTgwMDFlLCAweDgwMDAwNTQwLCAweDA0MDIwMDAyLCAweDgwMDAwMDAwLAorCTB4NDgwMzg4OTMsIDB4NTlhODAwMmEsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsCisJMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTYwNiwgMHg1YzAwMDAwMCwKKwkweDQ4MDM4ODgwLCAweDU5YTgwODA1LCAweDg0MDQwZDBjLCAweDQ4MDc1MDA1LAorCTB4NTljNDAwMDYsIDB4ODQwMDA1NDgsIDB4NDgwMzg4MDYsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTk1ZCwgMHg0YTAzODgwOCwgMHgwMDAwMDA4MCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRkNDAwMDAwLCAweDRkM2MwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDZlZGUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMzMsIDB4MDQwMjAwMjUsCisJMHg1OTljMTAxNywgMHg1OWE4MDgwNSwgMHg4YzA0MGQwMCwgMHgwNDAyMDAwYywKKwkweDhjMDgxNTFhLCAweDA0MDAwMDFmLCAweDg0MDQwZDQyLCAweDQ4MDc1MDA1LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMDQsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMGMsCisJMHg4YzA4MTUwOCwgMHgwNDAyMDAwOCwgMHgwNDAxZjAxMiwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDA0LCAweDQyMDI3ODAwLCAweDAwMDAwMDA0LCAweDhjMDgxNTA4LAorCTB4MDQwMDAwMGMsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMGUsCisJMHg0MjAyODgwMCwgMHgwMDAwZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwYTQ0NiwKKwkweDVjMDI4MDAwLCAweDU5OWMwODE3LCAweDhjMDQwZDBhLCAweDA0MDIwMDA1LAorCTB4NDk0M2M4NTcsIDB4NDkzZmM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDFmZTUsCisJMHg0OTdiODg4MCwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZmNmYiwKKwkweDVjMDI3ODAwLCAweDVjMDI4MDAwLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDBhZTAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4YWIsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwMGVmNCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxNjA2LCAweDRhMDM4ODgwLAorCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDE5NWQsIDB4NDIwMmUwMDAsCisJMHgwMDAwMDAwMCwgMHg0YTAzMzAxNSwgMHgwMDAwMDAwMSwgMHg0OTdiMzAxZCwKKwkweDQ5N2IzMDA2LCAweDRhMDNiMDA0LCAweDYwMDAwMDAxLCAweDU5ZDgwMDA1LAorCTB4NGEwM2IwMDQsIDB4OTAwMDAwMDEsIDB4NGEwM2E4MDQsIDB4NjAwMDAwMDEsCisJMHg1OWQ0MDAwNSwgMHg0YTAzYTgwNCwgMHg5MDAwMDAwMSwgMHgwMjAxZjAwMCwKKwkweDAwMTA1OTgzLCAweDRhMDNjODI1LCAweDAwMDAwMDA0LCAweDRhMDNjODI3LAorCTB4MDAwMDAwMDQsIDB4NTk5YzA0MDksIDB4ODAwMDBkNDAsIDB4MDQwMDAwMjAsCisJMHg1OTljMDQwNywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNywgMHg4MDAwMDBjYywKKwkweDU5OWMxMDBiLCAweDgwMDgwNDAwLCAweDQ4MDNiMDAwLCAweDQ5N2JiMDAyLAorCTB4NTlkODAwMDEsIDB4NTk5YzAwMGIsIDB4NDgwM2IwMDAsIDB4NTk5YzAwMGMsCisJMHg0ODAzYjAwMSwgMHg1OTljMDQwNywgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwKKwkweDQ5N2JiMDAyLCAweDU5OWMwYzA5LCAweDgyMDQwNTQwLCAweDAwNDAwMDAwLAorCTB4NDgwM2IwMDMsIDB4NGEwM2IwMDksIDB4MDAwMDAwMDQsIDB4NGEwM2IwMDQsCisJMHgxMDAwMDAwMSwgMHg1OWUwMDgwMywgMHg4MjA0MGQwMCwgMHhmZmZmZmVmZiwKKwkweDgyMDQwZDQwLCAweDAwMDA4MDAwLCAweDQ4MDdjMDAzLCAweDU5OWMwNDBhLAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMjAsIDB4NTk5YzA0MDgsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwNywgMHg4MDAwMDBjYywgMHg1OTljMTAwZiwgMHg4MDA4MDQwMCwKKwkweDQ4MDNhODAwLCAweDQ5N2JhODAyLCAweDU5ZDQwMDAxLCAweDU5OWMwMDBmLAorCTB4NDgwM2E4MDAsIDB4NTk5YzAwMTAsIDB4NDgwM2E4MDEsIDB4NTk5YzA0MDgsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwgMHg0OTdiYTgwMiwgMHg1OTljMGMwYSwKKwkweDgyMDQwNTQwLCAweDAwNDAwMDAwLCAweDQ4MDNhODAzLCAweDRhMDNhODA5LAorCTB4MDAwMDAwMDQsIDB4NGEwM2E4MDQsIDB4MTAwMDAwMDEsIDB4NTllMDA4MDMsCisJMHg4MjA0MGQwMCwgMHhmZmZmZmJmZiwgMHg4MjA0MGQ0MCwgMHgwMDAwODAwMCwKKwkweDQ4MDdjMDAzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA3LCAweDQyMDJlMDAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMGI4MDAsIDB4MDAwMjA1NTEsIDB4MDIwMGYwMDAsCisJMHgwMDAyMDU2NiwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDFjMDFmMDAwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLAorCTB4NTk5ODEwMDUsIDB4ODAwODExYzAsIDB4MDQwMDAwMWUsIDB4NTgwODAwMDUsCisJMHg4MjAwMGQwMCwgMHg0MzAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNTg0NiwKKwkweDhjMDAwNTA4LCAweDA0MDAwMDE1LCAweDU4MGE1ODA4LCAweDU5MmMwMjA0LAorCTB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDA0YiwgMHgwNDAyMTAwYiwgMHgwYzAxZjgwZiwKKwkweDVjMDNlMDAwLCAweDgzNzAwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwN2U2LAorCTB4MDIwMGY4MDAsIDB4MDAwMjA1NjYsIDB4MDIwMGIwMDAsIDB4MDAwMjA1NTEsCisJMHgxYzAxZjAwMCwgMHgwNDAxZjg1MCwgMHg1YzAzZTAwMCwgMHgwNDAxZjdmOSwKKwkweDA0MDFmOGRlLCAweDA0MDFmN2ZkLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0YTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NTE5LCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NGExLAorCTB4MDAxMDU0YTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4NDkyZmM4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NWUsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwMDAwMCwgMHgwMDAwMDQwMCwKKwkweDA0MDFmMDE5LCAweDQ5MmZjODU3LCAweDQyMDAwMDAwLCAweDAwMTBiODVkLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsCisJMHgwNDAxZjAxMSwgMHg0OTJmYzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjg1YywKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQyMDAwMDAwLCAweDAwMDAyMDAwLAorCTB4MDQwMWYwMDksIDB4NDkyZmM4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NWYsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwMDAwMCwgMHgwMDAwMDgwMCwKKwkweDA0MDFmMDAxLCAweDQ4MDNjODU3LCAweDQyMDJlMDAwLCAweDAwMDAwMDAxLAorCTB4NTkyYzBjMDQsIDB4ODIwNDBkMDAsIDB4ZmZmZjgwZmYsIDB4ODAwNDA1NDAsCisJMHg0ODAyNWMwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg1OTJjMDIwNCwKKwkweDQ5MmZjODU3LCAweDgwMDAwMTEwLCAweDA0MDAwN2RiLCAweDgwMDAwMDQwLAorCTB4MDQwMDAwMjUsIDB4NDgwMzMwMDIsIDB4NDkyZjMwMDMsIDB4NDkyZjMwMDQsCisJMHg0YTAzMzAwOCwgMHgwMDEwNTRlNSwgMHg0MjAyZTAwMCwgMHgwMDAwMDAwMywKKwkweDFjMDFmMDAwLCAweDU5MmMwMjA0LCAweDQ5MmZjODU3LCAweDgwMDAwMTEwLAorCTB4MDQwMDA3Y2QsIDB4ODAwMDAwNDAsIDB4MDQwMDAwMzMsIDB4NDgwMzMwMDIsCisJMHg0OTJmMzAwMywgMHg0OTJmMzAwNCwgMHg0YTAzMzAwOCwgMHgwMDEwNTUwMSwKKwkweDQyMDJlMDAwLCAweDAwMDAwMDAzLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMGFiMzMsIDB4MDIwMjAwMDAsIDB4MDAwMjA0ZDksIDB4NDIwMjgwMDAsCisJMHgwMDAwMDAyOCwgMHg0MTc4MDgwMCwgMHg0MTdhNjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTcwLCAweDAyMDFmODAwLCAweDAwMTA5MWM2LCAweDAyMDFmMDAwLAorCTB4MDAwMjAyZGEsIDB4NTkyYzBhMGEsIDB4OGMwNDBkMDIsIDB4MDQwMjAwMTYsCisJMHg1OWE4MDAyMSwgMHg0OTJmYzg1NywgMHg4MDAwMDU0MCwgMHgwNDAyMDAwZiwKKwkweDU5MmMwMjA3LCAweDgwMDAwNTQwLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMDQzMjYsIDB4MDQwMjAwMDQsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHg1OTJjMGEwNiwgMHg0ODA2NWMwNiwgMHg0ODAyNWEwNiwKKwkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQyMDAwMDAwLCAweDAwMDAwMDI4LAorCTB4MDQwMWY3ZjksIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDksIDB4MDIwMWYwMDAsCisJMHgwMDEwNjY1YiwgMHg1OTJjMDIwOCwgMHg0OTJmYzg1NywgMHg4MjAwMGM4MCwKKwkweDAwMDAxOTlhLCAweDA0MDIxN2E0LCAweDU5MmMwNDA4LCAweDgwMDAwNTQwLAorCTB4MDQwMjA3YTEsIDB4NTlhODA4MjEsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMDksCisJMHg1OTJjMDIwNywgMHg4MDAwMDU0MCwgMHgwNDAwMDc5YiwgMHg0OTdhNWEwNiwKKwkweDAyMDFmODAwLCAweDAwMTA0Mzg1LCAweDA0MDIwMDA0LCAweDFjMDFmMDAwLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMjgsIDB4NDgwMjVhMDYsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDJkYSwgMHg1OTk4MDgwNCwgMHg1OTk4MDAwMiwgMHg0ODA2NTgwMCwKKwkweDQ5MmMwODAxLCAweDQ5MmYzMDA0LCAweDgwMDAwMDQwLCAweDQ4MDMzMDAyLAorCTB4MDQwMDAwMDIsIDB4MWMwMWYwMDAsIDB4NTk5YTU4MDMsIDB4NTk5ODAwMDgsCisJMHg0MjAyZTAwMCwgMHgwMDAwMDAwMSwgMHgwODAxZjAwMCwgMHg1OTJlOGEwNiwKKwkweDU5MmMwNDA2LCAweDQ4MDNjODU2LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAorCTB4NDIwMGI4MDAsIDB4MDAwMDAwMDEsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsCisJMHgwNDAwMDAxNSwgMHg0MTdhODgwMCwgMHg0MjAwYjgwMCwgMHgwMDAwMDdmMCwKKwkweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDBmLCAweDgwMDAwNTQwLAorCTB4MDIwMjAwMDAsIDB4MDAwMjAyZGEsIDB4NTkyZThhMDYsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI0NSwgMHgwMjAyMDAwMCwgMHgwMDAyMDJkYSwgMHg1OTJlOTAwOCwKKwkweDU5MmU5ODA5LCAweDAyMDFmODAwLCAweDAwMTA0NzEzLCAweDAyMDFmMDAwLAorCTB4MDAwMjAyZGEsIDB4NTlhODA4MDUsIDB4ODQwNDBkMDAsIDB4NDgwNzUwMDUsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwgMHgwMjAwMDgwMCwgMHgwMDEwNDgyYywKKwkweDgxNDY4ODAwLCAweDgwNWNiODQwLCAweDA0MDIwN2ZhLCAweDAyMDFmMDAwLAorCTB4MDAwMjAyZGEsIDB4NTkyYzBhMDgsIDB4NDgwN2M4NTcsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwZSwgMHgwNDAwMDA0NSwgMHg4MjA0MDU4MCwgMHgwMDAwMDA0NiwKKwkweDA0MDAwMDQ2LCAweDgyMDQwNTgwLCAweDAwMDAwMDQ1LCAweDA0MDAwMDIwLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMjksIDB4MDQwMDAwMTAsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAyYSwgMHgwNDAwMDAwOSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwZiwKKwkweDA0MDAwMWZjLCAweDgyMDQwNTgwLCAweDAwMDAwMDJlLCAweDA0MDAwMWY5LAorCTB4NDgwN2M4NTYsIDB4MDQwMWYxZjIsIDB4NTlhODA4MDUsIDB4ODQwNDBkMDQsCisJMHg0ODA3NTAwNSwgMHgwNDAxZjFmMywgMHg1OTJlOGEwNiwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMjQ1LCAweDA0MDIwMWVmLCAweDU5MzQwMjAwLCAweDg0MDAwNTE4LAorCTB4NDgwMjZhMDAsIDB4NTkyZTYwMDksIDB4NDkzM2M4NTcsIDB4ODMzMDA1ODAsCisJMHhmZmZmZmZmZiwgMHgwNDAyMDAyYSwgMHgwNDAxZjFlNiwgMHg1OTJjMTQwNywKKwkweDQ4MGJjODU3LCAweDAyMDFmODAwLCAweDAwMTA5NDEwLCAweDQxMWU2MDAwLAorCTB4MDQwMjAwMDMsIDB4NDgwM2M4NTYsIDB4MDQwMWYxZDksIDB4NTkyZTM4MDksCisJMHg1OTFjMTQxNCwgMHg4NDA4MTUxNiwgMHg4NDA4MTU1NCwgMHg0ODBhM2MxNCwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDNhLCAweDU5MmMwNDBiLCAweDgwMDAwNTQwLAorCTB4MDQwMDAwMDcsIDB4NGEwMjY0MDMsIDB4MDAwMDAwM2IsIDB4NTkyYzAyMGMsCisJMHg0ODAyNjQxYSwgMHg1OTJjMDQwYywgMHg0ODAyNjIxYSwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDQyMDAwODAwLCAweDgwMDAwMDQwLCAweDAyMDFmODAwLAorCTB4MDAwMjA3MjEsIDB4MDQwMWYxYzcsIDB4NTlhODAwNjgsIDB4ODQwMDA1MTAsCisJMHg0ODAzNTA2OCwgMHgwNDAxZjFjMywgMHg1OTJjMTIwNywgMHg4YzA4MTUwMCwKKwkweDA0MDIwMWMwLCAweDU5MmU4YTA2LCAweDU5MmU2MDA5LCAweDAyMDFmODAwLAorCTB4MDAxMDk0MWEsIDB4MDQwMjAwMDMsIDB4NDgwM2M4NTYsIDB4MDQwMWYxYjQsCisJMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAwMywKKwkweDQ4MDNjODU2LCAweDA0MDFmMWFlLCAweDU5MzAwYTAzLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDcsIDB4MDQwMDAwMDMsIDB4NDgwM2M4NTYsIDB4MDQwMWYxYTgsCisJMHg1OTMwMGMwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAwMDAyMSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDE2LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDYsIDB4MDQwMDAwMjAsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDgsCisJMHgwNDAwMDAxNSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYSwgMHgwNDAwMDAwYSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDBjLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMmUsIDB4MDQwMjAwMTgsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDksCisJMHgwNDAxZjAxMywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjAxMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDQwMWYwMDgsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAxLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NzEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjcyYiwgMHgwNDAxZjE3YiwgMHg0MDAwMDgwMCwgMHg1ODA0MDAwMCwKKwkweDgwMDAwNTQwLCAweDA0MDIwN2ZkLCAweDQ5MmMwODAwLCAweDFjMDFmMDAwLAorCTB4NDkyZmM4NTcsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDYsCisJMHgwNDAyMDA5NCwgMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAyMDAwNSwKKwkweDU5MzQwMjAwLCAweDhjMDAwNTFhLCAweDAyMDAwMDAwLCAweDAwMDIwNTMzLAorCTB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsIDB4MDQwMDAwOGEsIDB4NTkzMDAyMDMsCisJMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywKKwkweDAyMDIwMDAwLCAweDAwMDIwNTMzLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA1MzMsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDIsCisJMHg0YTAyNjIwNiwgMHgwMDAwMDAxNCwgMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhMWQxLCAweDVjMDI1ODAwLCAweDU5MzAwYzA2LCAweDQ4MDdjODU3LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMjAwNjMsIDB4NDkyZmM4NTcsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwKKwkweDU5MmMyNDBhLCAweDQ5MmZjODU3LCAweDQ4MTNjODU3LCAweDhjMTAyNTFjLAorCTB4MDQwMjAwMTYsIDB4OGMxMDI1MWEsIDB4MDQwMDAwMDMsIDB4OGMxMDI1MGEsCisJMHgwNDAwMDA2OSwgMHg1OTM0MGEwMCwgMHg4YzA0MGQwZSwgMHgwNDAwMDAwMywKKwkweDhjMTAyNTFlLCAweDA0MDAwMDY0LCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4MDQwMDAwNmIsIDB4NTkyYzI0MGEsIDB4NDkzNjYwMDksIDB4NDkzMjU4MDksCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwNiwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywKKwkweDAyMDFmMDAwLCAweDAwMDIwNTJmLCAweDU5MmMwYTBjLCAweDU5MzQwMDBmLAorCTB4NDE3ODQwMDAsIDB4ODAwMDE1NDAsIDB4MDQwMDAwNmQsIDB4NTgwODAyMDQsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxMiwKKwkweDA0MDIwMDA0LCAweDU4MDgwMjBjLCAweDgwMDQwNTgwLCAweDA0MDAwMDA0LAorCTB4NTgwODAwMDAsIDB4NDAwODQwMDAsIDB4MDQwMWY3ZjMsIDB4NTgwODAwMDAsCisJMHg0OTc4MTAwMCwgMHg4MDIwNDFjMCwgMHgwNDAwMDAwNiwgMHg0ODAwNDAwMCwKKwkweDgwMDAwNTQwLCAweDA0MDIwMDA3LCAweDQ4MjI2ODEwLCAweDA0MDFmMDA1LAorCTB4NDgwMjY4MGYsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDIsIDB4NDk3YTY4MTAsCisJMHg0ZDJjMDAwMCwgMHg0MDBhNTgwMCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMiwKKwkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDVjMDI1ODAwLCAweDA0MDFmN2JjLAorCTB4NTkyYzA0MGEsIDB4OGMwMDA1MWMsIDB4MDQwMDAwMTYsIDB4NTkyYzAyMDYsCisJMHg4MjAwMDU4MCwgMHgwMDAwZmZmZiwgMHgwNDAyMDAxMiwgMHg1OTJlNjAwOSwKKwkweDgzMzAwNTgwLCAweGZmZmZmZmZmLCAweDA0MDAwN2IxLCAweDgzMzAwNDgwLAorCTB4MDAxMGQxYzAsIDB4MDQwMDEwMTAsIDB4NTlhODAwMGIsIDB4ODEzMDA0ODAsCisJMHgwNDAyMTAwZCwgMHg1OTMwMDAwOCwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwNSwKKwkweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA3LCAweDA0MDAwNzk3LAorCTB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMjksIDB4MDIwMWYwMDAsCisJMHgwMDAyMDJkYSwgMHg0OTJmYzg1NywgMHg0YTAyNWEwNiwgMHgwMDAwMDAwOCwKKwkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQ5MmZjODU3LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwNDUsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NDkyZmM4NTcsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAyYSwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwKKwkweDQ5MmZjODU3LCAweDRhMDI1YTA2LCAweDAwMDAwMDI4LCAweDAyMDFmMDAwLAorCTB4MDAwMjAyZGEsIDB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0OTJmYzg1NywgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDBlLCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDU5MzQwMDEwLAorCTB4NDkyZTY4MTAsIDB4NDkyZmM4NTcsIDB4ODAwMDBkNDAsIDB4MDQwMDAwMDMsCisJMHg0OTJjMDgwMCwgMHgxYzAxZjAwMCwgMHg1OTM0MDQwYiwgMHg0OTJlNjgwZiwKKwkweDQ5MmZjODU3LCAweDQ4MDNjODU3LCAweDgwMDAwNTQwLCAweDA0MDIwMDAzLAorCTB4NGEwMjZhMDMsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NTlhODAwMGUsCisJMHg4MTY0MDQ4MCwgMHgwNDAyMTc2ZSwgMHg0MjAyNjAwMCwgMHgwMDEwZDFjMCwKKwkweDU5MzAwMDA5LCAweDgxMzQwNTgwLCAweDA0MDIwMDA0LCAweDU5MzAwMjAyLAorCTB4ODAwNDA1ODAsIDB4MDQwMDA3NTksIDB4ODMzMjY0MDAsIDB4MDAwMDAwMjQsCisJMHg0MTU4MDAwMCwgMHg4MTMwMDQ4MCwgMHgwNDAwMTdmNiwgMHgwNDAxZjc2MCwKKwkweDQ5MmZjODU3LCAweDU5MmMwNDA3LCAweDgyMDAwYzgwLCAweDAwMDAxOTlhLAorCTB4MDQwMjE1ZjEsIDB4NTkyYzAyMDQsIDB4ODAwMDAxMTIsIDB4MDQwMjA1ZGUsCisJMHg1OTJlOGEwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwgMHgwNDAyMDA1OSwKKwkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDIwMDU5LCAweDU5MmU3ODBhLAorCTB4NDkzZmM4NTcsIDB4OGQzZTdkM2UsIDB4MDQwMjAwMDcsIDB4NTlhODAwMjEsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDA0ZiwgMHgwMjAxZjgwMCwgMHgwMDEwNDgzOCwKKwkweDA0MDAwNWRkLCAweDgzM2MxZDAwLCAweDAwMDAwMDFmLCAweDA0MDAwNWRhLAorCTB4NTkyYzAyMDcsIDB4ODIwMDBjODAsIDB4MDAwMDEwMDAsIDB4MDQwMjE1ZDYsCisJMHg4MDAwMDBjMiwgMHg4MDAwMDhjNCwgMHg4MDA1ZDQwMCwgMHg1OTJlOTAwOCwKKwkweDU5MmU5ODA5LCAweDU5MzQwODBkLCAweDgwMDQwOWMwLCAweDA0MDIwMDJlLAorCTB4ODMzYzFkMDAsIDB4MDAwMDAwMWYsIDB4ODE3ODAwNDAsIDB4ODAwMDAwMDAsCisJMHg4MDBjMTkwMiwgMHgwNDAyMTdmZSwgMHgwNDAyMDVjNywgMHgwYzAxZjAwMSwKKwkweDAwMTA1NmU5LCAweDAwMTA1NmVjLCAweDAwMTA1NmY5LCAweDAwMTA1NmZjLAorCTB4MDAxMDU2ZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDkwM2UsIDB4MDQwMWYwMWEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDgwYiwgMHgwNDAwMDAyNywgMHg4MGU5ZDFjMCwKKwkweDAyMDIwODAwLCAweDAwMTA1ZmFlLCAweDQyMDI4MDAwLCAweDAwMDAwMDA1LAorCTB4NDE3YTkwMDAsIDB4NDE3YTk4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDkwNGUsCisJMHgwNDAxZjAwZCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0ZCwgMHgwNDAxZjAwNiwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDRlLCAweDA0MDFmMDAzLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNTIsIDB4MDIwMWY4MDAsIDB4MDAxMDQ2YzksIDB4MDIwMjA4MDAsCisJMHgwMDEwOTA3ZSwgMHgwNDAwMDAxMCwgMHg4ZDNlN2QzZSwgMHgwNDAyMDAxNywKKwkweDFjMDFmMDAwLCAweDU4MDQwMDAyLCAweDgwMDAwNTQwLCAweDA0MDIwMDA3LAorCTB4NGQzYzAwMDAsIDB4NDAwNjc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3ZWIsCisJMHg1YzAyNzgwMCwgMHgwNDAyMDdjYiwgMHg0YTAyNWEwNiwgMHgwMDAwMDAzMCwKKwkweDA0MDFmMDBkLCAweDRhMDI1YTA2LCAweDAwMDAwMDJjLCAweDA0MDFmMDBhLAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMjgsIDB4MDQwMWYwMDcsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAyOSwgMHgwNDAxZjAwNCwgMHg0OTdhNWMwOSwgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDAwLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDAyMDFmMDAwLAorCTB4MDAwMjAyZGEsIDB4NDkyZmM4NTcsIDB4NTkyYzAyMDQsIDB4ODAwMDAxMTAsCisJMHg4MDAwMDA0MCwgMHgwNDAwMDAwMiwgMHgwNDAxZjU2ZiwgMHg1OTJjMDIwNywKKwkweDgyMDAwNTAwLCAweDAwMDAwM2ZmLCAweDQ4MDI1YTA3LCAweDhjMDAwNTA2LAorCTB4MDQwMDAwMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwNzAsIDB4MDQwMjAwMDQsCisJMHg1OWE4MDgyMSwgMHg4MDA0MDljMCwgMHgwNDAyMDAxOCwgMHg0YTAyNWEwNiwKKwkweDAwMDBkZWFkLCAweDU5MmMwNDA4LCAweDgyMDAwNTAwLCAweDAwMDBmMGZmLAorCTB4NDgwMjVjMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYjQsIDB4MDQwMjAwMDIsCisJMHgxYzAxZjAwMCwgMHg0OTQyNWEwNiwgMHg4MDU4YjFjMCwgMHgwNDAwMDAwOSwKKwkweDAyMDFmODAwLCAweDAwMTA5NTVmLCAweDA0MDFmODBmLCAweDQ0MDQyODAwLAorCTB4ODI1ODA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDIsIDB4NDgwODI4MDEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0MjAyODAwMCwgMHgwMDAwMDAzMSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAxLCAweDQyMDBiMDAwLCAweDAwMDAwMDAxLAorCTB4MDQwMWY3ZWQsIDB4NTkyYzA0MDgsIDB4ODAwMDAxMTgsIDB4ODMyYzJjMDAsCisJMHgwMDAwMDAwOSwgMHg4MDE0MmMwMCwgMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywKKwkweDRhMDI1YTA4LCAweDAwMDAwMDA2LCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLAorCTB4NDkyZmM4NTcsIDB4NGEwMjVhMDgsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDJkYSwgMHg0OTJmYzg1NywgMHg1OTJjMDQwYSwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDIwLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4MDQwMDAwMjEsIDB4NTkyYzAyMDQsIDB4NDkyZTYwMDgsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA0NSwgMHgwNDAwMDAwZSwKKwkweDU5MmMwMDBiLCAweDAyMDFmODAwLCAweDAwMTA1YzlhLCAweDAyMDAwODAwLAorCTB4MDAwMjAyNDUsIDB4MDQwMjAwMTgsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDEsCisJMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwN2ExLCAweDU5MzAwMDE1LCAweDg0MDAwNTVlLCAweDQ4MDI2MDE1LAorCTB4NDIwMjY4MDAsIDB4MDAxMGI1MjQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDAsCisJMHgwNDAxZjdmNCwgMHg0YTAyNWEwNiwgMHgwMDAwMDEwMSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMmRhLCAweDRhMDI1YTA2LCAweDAwMDAwMDJjLCAweDAyMDFmMDAwLAorCTB4MDAwMjAyZGEsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMjgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDJkYSwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg0OTJmYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTA2MmUxLCAweDA0MDAwMDBiLCAweDU5MmMwMjA0LAorCTB4ODAwMDAxMTAsIDB4ODAwMDAwNDAsIDB4MDQwMjA0ZmIsIDB4NTkyYzBjMDYsCisJMHg4MDA0MDljMCwgMHgwNDAwMDAwOSwgMHg0MjAwMDAwMCwgMHgwMDAwMDEwMiwKKwkweDA0MDFmMDAzLCAweDQyMDAwMDAwLCAweDAwMDAwMTA0LCAweDQ4MDI1YTA2LAorCTB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NTkyYzBjMDcsIDB4ODAwNDA5YzAsCisJMHgwNDAwMDAyNCwgMHg4MjA0MDQ4MCwgMHgwMDAwMDAwNSwgMHgwNDAyMTAyMSwKKwkweDRjMDQwMDAwLCAweDgwMDQwODAwLCAweDAyMDFmODAwLCAweDAwMTA2MzA2LAorCTB4NWMwMDEwMDAsIDB4MDQwMjAwMTgsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDgsCisJMHg0MDAwYTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjMyZiwgMHgwNDAyMDAxMiwKKwkweDU5MmMxMjA3LCAweDgyY2MwNTgwLCAweDAwMTBiNTBlLCAweDA0MDIwMDA5LAorCTB4NThjODBjMGIsIDB4ODQwNDBkMDAsIDB4ODQwNDBkMDIsIDB4OGMwODE1MDAsCisJMHgwNDAwMDAwMiwgMHg4NDA0MGQ1ZSwgMHg0ODA1OTQwYiwgMHgwNDAxZjAwMSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAwLCAweDQ4MDI1YTA2LCAweDAyMDFmMDAwLAorCTB4MDAwMjAyZGEsIDB4NDIwMDAwMDAsIDB4MDAwMDAxMDMsIDB4MDQwMWY3ZmIsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDEwMiwgMHgwNDAxZjdmOCwgMHg0OTJmYzg1NywKKwkweDU5MmU3YzA2LCAweDgzM2MwNTAwLCAweGZmZmZmZmZlLCAweDA0MDIwMDQzLAorCTB4NTkyYzQwMDcsIDB4NDIwMjYwMDAsIDB4MDAxMGQxYzAsIDB4NDE1ODE4MDAsCisJMHg0MDBjMDAwMCwgMHg4MTMwMDQ4MCwgMHgwNDAyMTAyMywgMHg1OTMwMDIwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDA3LCAweDU5MzAwMDA4LAorCTB4ODAwMDBkNDAsIDB4MDQwMDAwMDQsIDB4NTgwNDAwMDUsIDB4ODAyMDA1ODAsCisJMHgwNDAwMDAwNCwgMHg4MzMyNjQwMCwgMHgwMDAwMDAyNCwgMHgwNDAxZjdmMSwKKwkweDU4MDQwMjA0LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwZDgwLAorCTB4MDAwMDAwNTMsIDB4MDQwMDAwMDcsIDB4ODIwMDBkODAsIDB4MDAwMDAwNDgsCisJMHgwNDAwMDAwNCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxOCwgMHgwNDAyMDAyMywKKwkweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTA4YmUzLCAweDVjMDI1ODAwLAorCTB4MDQwMDAwMWUsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDJkYSwgMHg1OTJlOGEwNiwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDdmMCwKKwkweDA0MDIxMDE2LCAweDgzNDQwNDAwLCAweDAwMTBhYzAwLCAweDUwMDAwMDAwLAorCTB4ODAwMjZkNDAsIDB4MDQwMDAwMTEsIDB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDdjYiwgMHgwNDAwMDAwYywgMHg0MjAyODAwMCwgMHgwMDAwMDAwNSwKKwkweDU5MmMwYTA4LCAweDAyMDFmODAwLCAweDAwMTA0ZTcwLCAweDAyMDFmODAwLAorCTB4MDAxMDkxY2MsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsCisJMHgwNDAxZjdlNSwgMHg1YzAyNTgwMCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAzMSwKKwkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQ5MmZjODU3LCAweDRkMmMwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZTQsIDB4MDQwMDAwMTYsIDB4NDkyZmM4NTcsCisJMHg0MTJmNDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAwZSwKKwkweDQ5MmZjODU3LCAweDQxMmRkODAwLCAweDAyMDFmODAwLCAweDAwMTAzYjI4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDNiMzIsIDB4NDlhMWQ4MGIsIDB4NWMwMjU4MDAsCisJMHg0OTJkZDgwYSwgMHgwMjAxZjgwMCwgMHgwMDEwMjIxNCwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMjMzLCAweDQxYTI1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2Y0LAorCTB4NWMwMjU4MDAsIDB4NGEwMjVhMDYsIDB4MDAwMDQwMDUsIDB4NGEwMjVjMDYsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0ODA3Yzg1NywKKwkweDQ4NWZjODU3LCAweDQyMDBiODAwLCAweDAwMDAwMDAxLCAweDVjMDAwODAwLAorCTB4NGM1YzAwMDAsIDB4MDQwMWYwMDUsIDB4NDgwN2M4NTcsIDB4NDg1ZmM4NTcsCisJMHg1YzAwMDgwMCwgMHg0ZDc4MDAwMCwgMHg0ODAzYzg1NywgMHg0OTJmYzg1NywKKwkweDhjMDAwNTBlLCAweDAyMDIwODAwLCAweDAwMTAwNWQwLCAweDQyMDNlMDAwLAorCTB4NTAwMDAwMDAsIDB4NDIwMGI4MDAsIDB4MDAwMDgwMDMsIDB4MDIwMWYwMDAsCisJMHgwMDEwMDVkZCwgMHg1OTJjMDIwNCwgMHg4MDAwMDExMCwgMHg4MDAwMDA0MCwKKwkweDA0MDIwNDQxLCAweDAyMDFmODAwLCAweDAwMTA0YTM0LCAweDA0MDIwMDAyLAorCTB4MWMwMWYwMDAsIDB4NDk0MjVhMDYsIDB4NDgwNjU4MGQsIDB4NDgwYTU4MGUsCisJMHg0OTQzYzg1NywgMHg0ODA3Yzg1NywgMHg0ODBiYzg1NywgMHgwMjAxZjAwMCwKKwkweDAwMDIwMmRhLCAweDU5MmMwMjA0LCAweDgwMDAwMTEwLCAweDgwMDAwMDQwLAorCTB4MDQwMjA0MzEsIDB4MDIwMWY4MDAsIDB4MDAxMDRiOGIsIDB4MDQwMjAwMDIsCisJMHgxYzAxZjAwMCwgMHg0OTQyNWEwNiwgMHg0ODA2NTgxMSwgMHg0ODBhNTgxMiwKKwkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDU5MmMwMjA0LCAweDgwMDAwMTEwLAorCTB4MDQwMDA0MjUsIDB4ODAwMDAwNDAsIDB4MDQwMjAwMGMsIDB4NDIwMmUwMDAsCisJMHgwMDAwMDAwMSwgMHg1OTJjMDIwYSwgMHg4YzAwMDUwNCwgMHgwMjAwMDAwMCwKKwkweDAwMDIwNGQwLCAweDU5MmMwMjA3LCAweDgyMDAwYzgwLCAweDAwMDAxMDAxLAorCTB4MDQwMjE0MjksIDB4MDQwMWYwMDksIDB4NDIwMmUwMDAsIDB4MDAwMDAwMDMsCisJMHg0ODAzMzAwMiwgMHg0OTJmMzAwMywgMHg0OTJmMzAwNCwgMHg0YTAzMzAwOCwKKwkweDAwMDIwNGQwLCAweDFjMDFmMDAwLCAweDQyMDJlMDAwLCAweDAwMDAwMDAyLAorCTB4NDIwMDAwMDAsIDB4MDAxMGJlZGEsIDB4NTAwMDcwMDAsIDB4NDkyYzcwMGIsCisJMHg0OTc4NzAwZSwgMHg0OTc4NzAwYywgMHg1OTJjMDAxMSwgMHg1OTJjMDgxMiwKKwkweDQ4MDA3MDA3LCAweDQ4MDQ3MDA4LCAweDU5MmMxMDEzLCAweDgyMDgwNTAwLAorCTB4ZmZmZjAwMDAsIDB4MDQwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg0OTc4NzAwZCwgMHg4MjA4MDQ4MCwgMHgwMDAwMDE4MCwgMHg0ODAzYzg1NywKKwkweDA0MDAxMDA3LCAweDQ4MDA3MDBmLCAweDRhMDA3MDA1LCAweDAwMDAwMTgwLAorCTB4NGEwMDcwMDQsIDB4MDAwMDAwNjAsIDB4MDQwMWYwMDUsIDB4NDk3ODcwMGYsCisJMHg0ODA4NzAwNSwgMHg4MDA4MTEwNCwgMHg0ODA4NzAwNCwgMHg1ODM4MDAwYSwKKwkweDQ4MDA3MDAzLCAweDQwMzgxMDAwLCAweDAyMDFmMDAwLCAweDAwMTAwODU4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZDMsIDB4MDQwMDAwMDMsIDB4NTk5ODAwMDcsCisJMHgwODAxZjAwMCwgMHgxYzAxZjAwMCwgMHg0MDMwNzAwMCwgMHg1ODM4MDAwYiwKKwkweDgwMDI1ZDQwLCAweDA0MDAwMDFiLCAweDU4MzgwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAxMDAsIDB4MDQwMDAwMWQsIDB4NGMzODAwMDAsIDB4NTkyYzAyMDQsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxMiwKKwkweDA0MDAwMDBiLCAweDU5MmMwMjA4LCAweDg0MDAwNTRlLCAweDQ4MDI1YTA4LAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDIsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJjMSwgMHgwNDAxZjAwNSwgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDEwLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDVjMDA3MDAwLAorCTB4NDIwMmUwMDAsIDB4MDAwMDAwMDEsIDB4NGEwMDcwMDIsIDB4MDAwMDAxMDAsCisJMHg0OTc4NzAxMCwgMHgxYzAxZjAwMCwgMHg1ODM4MDAwNCwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDg3LCAweDU4MzgwMDEwLCAweDhjMDAwNTAwLAorCTB4MDQwMjAwMTksIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDMsIDB4ODMyY2FjMDAsCisJMHgwMDAwMDAxMSwgMHg1ODM4MDAwYSwgMHg1ODM4MTAwZCwgMHg4MDA4YTQwMCwKKwkweDRjMzgwMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDVjMDA3MDAwLAorCTB4NTgzODAwMGQsIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDMsIDB4NDgwMDcwMGQsCisJMHg0YTAwNzAxMCwgMHgwMDAwMDAwMSwgMHg1ODM4MDAwNCwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDAzLCAweDQ4MDA3MDA0LCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwNmMsIDB4NTgzODAwMGUsIDB4ODAwMDFkNDAsIDB4MDQwMjAwMjAsCisJMHg0YzM4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHg1YzAwNzAwMCwKKwkweDA0MDAwMDEwLCAweDRhMDI1YTA0LCAweDAwMDAwMTBhLCAweDQyMDAxODAwLAorCTB4MDAwMDAwMDUsIDB4NDgwYzcwMGUsIDB4NTgzODAwMGMsIDB4ODAwMDA1NDAsCisJMHgwNDAyMDAwMiwgMHg1ODM4MDAwYiwgMHg0MDAwMDgwMCwgMHg0OTJjMDgwMSwKKwkweDQ5MmM3MDBjLCAweDQyMDAwODAwLCAweDAwMDAwMDBmLCAweDA0MDFmMDExLAorCTB4NDIwMmUwMDAsIDB4MDAwMDAwMDgsIDB4NGEwMzMwMDcsIDB4MDAxMDU5MTUsCisJMHgxYzAxZjAwMCwgMHg0MjAyZTAwMCwgMHgwMDAwMDAwMiwgMHg0MjAwMDAwMCwKKwkweDAwMTBiZWRhLCAweDUwMDA3MDAwLCAweDA0MDFmN2U3LCAweDU4M2E1ODBjLAorCTB4NDAwYzAwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTQsIDB4ODAwNDBjODAsCisJMHg1ODM4MTAwNCwgMHg1ODM4MDAwZiwgMHg0MTc4MzAwMCwgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDA1LCAweDg0MTgzNTQwLCAweDgyMDgxNDgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwM2MsIDB4NDAwODAwMDAsIDB4ODAwNDA0ODAsIDB4MDQwMDEwMDIsCisJMHg0MDA4MDgwMCwgMHg0MDA0YjAwMCwgMHg0MTJjMDAwMCwgMHg4MDBjMDQwMCwKKwkweDQwMDBhODAwLCAweDU4MzgwMDBhLCAweDU4MzgxMDBkLCAweDgwMDhhNDAwLAorCTB4NGMwODAwMDAsIDB4NGMwNDAwMDAsIDB4NGMwYzAwMDAsIDB4NGMzODAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg1YzAwNzAwMCwgMHg1YzAwMTgwMCwKKwkweDVjMDAwODAwLCAweDQwMDQwMDAwLCAweDU4MzgxMDA0LCAweDgwMDgwNDgwLAorCTB4NDgwMDcwMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDIsCisJMHg4NDE4MzUwMCwgMHg1YzAwMDAwMCwgMHg4MDA0MTQwMCwgMHg4MjA4MDQ4MCwKKwkweDAwMDAwMDYwLCAweDA0MDIwMDAzLCAweDg0MTgzNTQyLCAweDQxNzgxMDAwLAorCTB4NDAwYzAwMDAsIDB4ODAwNDFjMDAsIDB4ODIwYzA0ODAsIDB4MDAwMDAwMTQsCisJMHgwNDAyMDAwMywgMHg4NDE4MzU0NCwgMHg0MDAwMTgwMCwgMHg0MDA4MDgwMCwKKwkweDQ4MDQ3MDBkLCAweDQ4MGM3MDBlLCAweDQwMTgwMDAwLCAweDBjMDFmMDAxLAorCTB4MDAxMDU5NjAsIDB4MDAxMDU5NjQsIDB4MDAxMDU5NjIsIDB4MDAxMDU5NjAsCisJMHgwMDEwNThmYywgMHgwMDEwNTk2NCwgMHgwMDEwNTk2MiwgMHgwMDEwNTk2MCwKKwkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDU4MzgxMDBmLCAweDA0MDFmNzM5LAorCTB4NTgzODA4MGQsIDB4ODIwNDA0MDAsIDB4MDAwMDAwMDIsIDB4NTgzODEwMGEsCisJMHg4MDA4MDQwMCwgMHg1MDAwMTAwMCwgMHg4MDA4MTFjMCwgMHgwNDAyMDAwZiwKKwkweDQyMDJlMDAwLCAweDAwMDAwMDAxLCAweDU4M2E1ODBiLCAweDQ5Nzg3MDBiLAorCTB4NDk3ODcwMTAsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAxMiwgMHgwMjAwMDAwMCwgMHgwMDAyMDUwNywKKwkweDAyMDFmMDAwLCAweDAwMDIwNGQwLCAweDU4MzgwMDBhLCAweDgwMDQwYzAwLAorCTB4ODIzODFjMDAsIDB4MDAwMDAwMDcsIDB4NTQwNDE4MDAsIDB4ODAwNDA4MDAsCisJMHg4MDBjMTgwMCwgMHg1NDA0MTgwMCwgMHgwNDAxZjcxYSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwN2QzLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDRhMDI1ODBhLAorCTB4MDAxMGJlNzksIDB4NDIwMDA4MDAsIDB4MDAxMGJlZGEsIDB4NDUyYzA4MDAsCisJMHg0OTdhNTgwYiwgMHg0OTdhNTgwYywgMHg0OTdhNTgwZCwgMHg0OTdhNTgwZSwKKwkweDQ5N2E1ODBmLCAweDRhMDI1ODA5LCAweDAwMTA1OGI2LCAweDQ5N2E1ODEwLAorCTB4NGEwMjU4MDIsIDB4MDAwMDAxMDAsIDB4NGEwMjU4MDEsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg1OWM4MDAwNywgMHg4YzAwMDUwMiwgMHgwNDAwMDA3MCwKKwkweDgzNWMyYzgwLCAweDAwMDAwMDA1LCAweDAyMDAxMDAwLCAweDAwMTA1ZjIzLAorCTB4NTljODI4MTcsIDB4NDk3YjkwMDUsIDB4ODIxNDA1MDAsIDB4MDBlMDAwMDAsCisJMHgwNDAyMDA0ZiwgMHg4MjE0MDUwMCwgMHgwMDAwMDNmZiwgMHg4MjAwMWMwMCwKKwkweDAwMDAwMDA2LCAweDQxY2MyMDAwLCAweDQyMDAzMDAwLCAweDAwMDA2MDgwLAorCTB4ODIwYzA0ODAsIDB4MDAwMDAwNDAsIDB4MDQwMDEwMDYsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDA0MCwgMHg4MjBjMWM4MCwgMHgwMDAwMDA0MCwgMHgwNDAxZjAwMywKKwkweDQwMGMxMDAwLCAweDQxNzgxODAwLCAweDU0MTgyMDAwLCAweDgwMTAyMDAwLAorCTB4ODAxODMwMDAsIDB4ODAwODEwNDAsIDB4MDQwMjA3ZmMsIDB4ODAwYzE5YzAsCisJMHgwNDAwMDAwNSwgMHg1OWM4MDAwNSwgMHg4MDAwMDAwMCwgMHg0ODAzOTAwNSwKKwkweDA0MDFmN2VhLCAweDgyMTQwNTAwLCAweDAxZjYwMDAwLCAweDA0MDIwMDI5LAorCTB4ODIxNDA1MDAsIDB4MDAwMGYwMDAsIDB4MDQwMDAwMGIsIDB4ODIwMDBjODAsCisJMHgwMDAwMjAwMCwgMHgwNDAyMTAwZiwgMHg4MjE0MDUwMCwgMHgwZTAwMDAwMCwKKwkweDgwMDAwMTMyLCAweDBjMDFmODQwLCAweDRhMDM5MDA1LCAweDAwMDAwMTQwLAorCTB4MWMwMWYwMDAsIDB4NTljYzA0MDAsIDB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsCisJMHg4MjAwMDU4MCwgMHgwMDAwODEwMCwgMHgwNDAwMDdmNCwgMHgwNDAxZjAxYywKKwkweDQ4MTdjODU3LCAweDgyMTQwNTAwLCAweDAwMDAwM2ZmLCAweDA0MDIwMDA3LAorCTB4NTljYzA0MDAsIDB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4ODIwMDA1ODAsCisJMHgwMDAwODEwMCwgMHgwNDAyMDAxMiwgMHg0MjAwMDAwMCwgMHgwMDEwYjhiZCwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDAyMDFmODAwLCAweDAwMTA1ZGZhLAorCTB4NDgwM2M4NTYsIDB4NGEwMzkwMDUsIDB4MDAwMDAxNDAsIDB4MDQwMWYwMjAsCisJMHg0ODE3Yzg1NywgMHg4MjE0MDUwMCwgMHgwMGY2MDAwMCwgMHgwNDAyMDAwNCwKKwkweDAyMDFmODAwLCAweDAwMTA1ZTM1LCAweDA0MDIwN2QyLCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMDAwMTAsIDB4NTljNDAwYTQsIDB4NDgwM2M4NTcsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwYSwKKwkweDA0MDIwMDA5LCAweDQ5N2I1MDE2LCAweDU5YzQwMGEzLCAweDgyMDAwNTQwLAorCTB4MDAwODAwMDAsIDB4NDgwMzg4YTMsIDB4ODIwMDA1MDAsIDB4ZmZmN2ZmZmYsCisJMHg0ODAzODhhMywgMHg0ODE3Yzg1NiwgMHgwMjAxZjgwMCwgMHgwMDEwYTk3OCwKKwkweDRhMDM5MDA1LCAweDAwMDAwMTQwLCAweDA0MDFmODQyLCAweDQ4MDNjODU2LAorCTB4MWMwMWYwMDAsIDB4MDAxMDVhMWQsIDB4MDAxMDVjZjQsIDB4MDAxMDVhMTUsCisJMHgwMDEwNWExNSwgMHgwMDEwNWExNSwgMHgwMDEwNWExNSwgMHgwMDEwNWExNSwKKwkweDAwMTA1YTE1LCAweDQ4MDNjODU3LCAweDQyMDAwMDAwLCAweDAwMTBiODVhLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NGEwMzkwMDUsIDB4MDAwMDAxNDAsCisJMHgxYzAxZjAwMCwgMHg0ODE3Yzg1NywgMHg1OWNjMDQwMCwgMHg0ODAzYzg1NywKKwkweDgyMDAwZDAwLCAweDAwMDBmZjAwLCAweDgyMDQxNTAwLCAweDAwMDBmMDAwLAorCTB4ODQwNDA5YzAsIDB4ODIxNDA1MDAsIDB4MDAwMDAzZmYsIDB4ODAwMDE4YzQsCisJMHg4YzE0MmQxNCwgMHgwNDAwMDAwNSwgMHg1OWNjMDAwMiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDAzLCAweDgwMGMxYzgwLCAweDQ4MGY1MDE2LCAweDgyMDgwNTgwLAorCTB4MDAwMDIwMDAsIDB4MDQwMjAwMTEsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDEsCisJMHgwNDAyMDAwYywgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwKKwkweDgyMDAwNTgwLCAweDExMDAwMDAwLCAweDA0MDIwMDExLCAweDAyMDFmODAwLAorCTB4MDAxMDNiMzgsIDB4MDIwMWY4MDAsIDB4MDAxMDVmNDgsIDB4MDQwMWYwMGMsCisJMHgwNDAxZjgxZiwgMHgwNDAxZjAwYSwgMHg4MjA4MDU4MCwgMHgwMDAwMzAwMCwKKwkweDA0MDIwMDAzLCAweDA0MDFmYTA2LCAweDA0MDFmMDA1LCAweDgyMDgwNTgwLAorCTB4MDAwMDgwMDAsIDB4MDQwMjAwMDIsIDB4MDQwMWZhZmMsIDB4MWMwMWYwMDAsCisJMHg0ODE3Yzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjg1OSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTQ3LCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwMDBiLAorCTB4NGMwODAwMDAsIDB4NGMwYzAwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDgwNDgsCisJMHg0MDE0MTgwMCwgMHg4MDE0MjEyMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EzZSwKKwkweDVjMDAxODAwLCAweDVjMDAxMDAwLCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LAorCTB4NTljYzAwMDIsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsIDB4ODIwMDE1ODAsCisJMHgwMTAwMDAwMCwgMHgwNDAwMDAwNCwgMHg4MjAwMTU4MCwgMHgyMzAwMDAwMCwKKwkweDA0MDIwMTkyLCAweDgyMDQwNTgwLCAweDAwMDAwMDIzLCAweDA0MDIwMDNmLAorCTB4MDQwMWZiNmEsIDB4MDQwMDAxOGQsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAxMCwgMHgwNDAwMDAxMywgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMSwKKwkweDA0MDAwMDEwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAxLCAweDA0MDAwMDBkLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMGEsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwOCwgMHgwNDAwMDAwNywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYSwKKwkweDA0MDAwMDA0LCAweDQ5MzNjODU3LCAweDQ4MDdjODU3LCAweDA0MDFmMTc3LAorCTB4NTkzMDAwMDQsIDB4ODIwMDA1MDAsIDB4ODAwMTAwMDAsIDB4MDQwMDAwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmY2MCwgMHgwNDAyMDE3MCwgMHg1OWNjMGEwNCwKKwkweDQ4MDY2MjAyLCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLAorCTB4ODIwMDBkODAsIDB4MDIwMDAwMDAsIDB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAxNSwgMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg4MjAwMGQ4MCwKKwkweDAyMTQwMDAwLCAweDA0MDAwN2ZhLCAweDgyMDAwZDgwLCAweDAyMTAwMDAwLAorCTB4MDQwMDA3ZjcsIDB4ODIwMDBkODAsIDB4MDIxMDAwMDAsIDB4MDQwMDA3ZjQsCisJMHg4MjAwMGQ4MCwgMHgwMTAwMDAwMCwgMHgwNDAyMDE1OCwgMHg1OWNjMDAwNiwKKwkweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDA0MDIwMTU0LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMTYsIDB4MDQwMWY3ZWMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMjIsCisJMHgwNDAyMDE0ZSwgMHg1OWE4MDgwNiwgMHg4YzA0MGQxNCwgMHgwNDAwMDAxMSwKKwkweDA0MDFmOTY3LCAweDA0MDIwMDBmLCAweDA0MDFmOTdkLCAweDA0MDAwMDBkLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNGMsIDB4NTljYzAwMDEsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwNWVlYywgMHgwNDAwMDEyYSwKKwkweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDQxN2E2ODAwLCAweDA0MDFmMTI2LAorCTB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwMDBkODAsCisJMHgwMzAwMDAwMCwgMHgwNDAyMDAyMSwgMHg1OWE4MDAyNiwgMHg4YzAwMDUwOCwKKwkweDA0MDAwMDE3LCAweDg0MDAwNTRjLCAweDQ4MDM1MDI2LCAweDU5Y2MwODAwLAorCTB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4NDgwNzUwMTAsIDB4NDk3Yjg4MzAsCisJMHg4NDA0MGQ3MCwgMHg0ODA3ODgzMiwgMHg1OWM0MDgwMiwgMHg4NDA0MGQ0YywKKwkweDQ4MDc4ODAyLCAweDU5Y2MwMDA3LCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLAorCTB4NDgwMzg4OTMsIDB4NDgwMzUwMWUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsCisJMHg1OWE4MTAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM3OCwgMHg1OWNjMDAwNiwKKwkweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDA0MDIwMTE4LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMTcsIDB4MDQwMWYwZDksIDB4ODIwMDBkODAsIDB4MDQwMDAwMDAsCisJMHgwNDAyMDAxMSwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwKKwkweDA0MDIwMTBlLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDAwMDA0LAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMWQsIDB4MDQwMWYwY2MsIDB4NTlhODAwMjYsCisJMHg4NDAwMDU0OCwgMHg0ODAzNTAyNiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzMCwKKwkweDA0MDFmMGM2LCAweDgyMDAwZDgwLCAweDA1MDAwMDAwLCAweDA0MDIwMDA4LAorCTB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwZmIsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDAxOCwgMHgwNDAxZjBiYywgMHg4MjAwMGQ4MCwKKwkweDIwMTAwMDAwLCAweDA0MDIwMDA0LCAweDQyMDI3MDAwLCAweDAwMDAwMDE5LAorCTB4MDQwMWYwYjYsIDB4ODIwMDBkODAsIDB4MjExMDAwMDAsIDB4MDQwMjAwMDQsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDAxYSwgMHgwNDAxZjBiMCwgMHg4MjAwMGQ4MCwKKwkweDUyMDAwMDAwLCAweDA0MDIwMDA4LCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLAorCTB4MDAwMGZmZmYsIDB4MDQwMjAwZTUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMWIsCisJMHgwNDAxZjBhNiwgMHg4MjAwMGQ4MCwgMHg1MDAwMDAwMCwgMHgwNDAyMDAwOCwKKwkweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDA0MDIwMGRiLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMWMsIDB4MDQwMWYwOWMsIDB4ODIwMDBkODAsCisJMHgxMzAwMDAwMCwgMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzNCwKKwkweDA0MDFmMDk2LCAweDgyMDAwZDgwLCAweDEyMDAwMDAwLCAweDA0MDIwMDA4LAorCTB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwY2IsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDAyNCwgMHgwNDAxZjA4YywgMHg4MjAwMGQwMCwKKwkweGZmMDAwMDAwLCAweDgyMDQwZDgwLCAweDI0MDAwMDAwLCAweDA0MDIwMDA0LAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMmQsIDB4MDQwMWYwODQsIDB4ODIwMDBkMDAsCisJMHhmZjAwMDAwMCwgMHg4MjA0MGQ4MCwgMHg1MzAwMDAwMCwgMHgwNDAyMDAwNCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDJhLCAweDA0MDFmMDdjLCAweDgyMDAwZDgwLAorCTB4MGYwMDAwMDAsIDB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMjAsCisJMHgwNDAxZjA3NiwgMHg4MjAwMGQ4MCwgMHg2MTA0MDAwMCwgMHgwNDAyMDAzNiwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDA2LCAweDgwMDgwODAwLCAweDUwMDgwMDAwLAorCTB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMDQsCisJMHg0YzU4MDAwMCwgMHg4MDAwYjEwNCwgMHg4MDU4YjFjMCwgMHgwNDAwMDAyNiwKKwkweDRjMTAwMDAwLCAweDUwMDQxODAwLCAweDgyMGMxNTAwLCAweDAzMDAwMDAwLAorCTB4ODAwODExMzAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MTcsIDB4ODIwODI1ODAsCisJMHgwMDAwMDAwMCwgMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgxNCwKKwkweDA0MDFmMDBjLCAweDgyMDgyNTgwLCAweDAwMDAwMDAxLCAweDA0MDIwMDA0LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4MTUsIDB4MDQwMWYwMDYsIDB4ODIwODI1ODAsCisJMHgwMDAwMDAwMiwgMHgwNDAyMDAwMywgMHg0MjAwMDAwMCwgMHgwMDEwYjgxNiwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQyMDAxMDAwLCAweDAwMDA4MDE1LAorCTB4ODIwYzI1MDAsIDB4MDAwMGZmZmYsIDB4ODAwYzE5MjAsIDB4MDIwMWY4MDAsCisJMHgwMDEwM2EzZSwgMHg1YzAwMjAwMCwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2RhLCAweDVjMDBiMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDIzLAorCTB4MDQwMWYwM2UsIDB4ODIwMDBkODAsIDB4NjAwMDAwMDAsIDB4MDQwMjAwMDQsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDAzZiwgMHgwNDAxZjAzOCwgMHg4MjAwMGQ4MCwKKwkweDU0MDAwMDAwLCAweDA0MDIwMDA2LCAweDA0MDFmYjEyLCAweDA0MDIwMDZmLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNDYsIDB4MDQwMWYwMzAsIDB4ODIwMDBkODAsCisJMHg1NTAwMDAwMCwgMHgwNDAyMDAwOSwgMHgwNDAxZmIzMiwgMHgwNDAyMDAwNCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDQxLCAweDA0MDFmMDI4LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNDIsIDB4MDQwMWYwMjUsIDB4ODIwMDBkODAsIDB4NzgwMDAwMDAsCisJMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0NSwgMHgwNDAxZjAxZiwKKwkweDgyMDAwZDgwLCAweDEwMDAwMDAwLCAweDA0MDIwMDA0LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNGUsIDB4MDQwMWYwMTksIDB4ODIwMDBkODAsIDB4NjMwMDAwMDAsCisJMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0YSwgMHgwNDAxZjAxMywKKwkweDgyMDAwZDAwLCAweGZmMDAwMDAwLCAweDgyMDQwZDgwLCAweDU2MDAwMDAwLAorCTB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGYsIDB4MDQwMWYwMGIsCisJMHg4MjAwMGQwMCwgMHhmZjAwMDAwMCwgMHg4MjA0MGQ4MCwgMHg1NzAwMDAwMCwKKwkweDA0MDIwMDA0LCAweDQyMDI3MDAwLCAweDAwMDAwMDUwLCAweDA0MDFmMDAzLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMWQsIDB4NTljYzM4MDAsIDB4ODIxYzNkMDAsCisJMHgwMGZmZmZmZiwgMHg4MjFjMDU4MCwgMHgwMGZmZmZmZSwgMHg1OWNjMDAwMSwKKwkweDA0MDIwMDA1LCAweDQwMDAzMDAwLCAweDQyMDI4ODAwLCAweDAwMDAwN2ZlLAorCTB4MDQwMWYwMDMsIDB4MDQwMWY4ZDEsIDB4MDQwMjAwMzAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDVhNiwgMHgwNDAyMDAyZCwgMHg4MzM4MDU4MCwgMHgwMDAwMDA0NiwKKwkweDA0MDIwMDA0LCAweDU5YTgwMDEwLCAweDgwMTgwNTgwLCAweDA0MDAwMDI3LAorCTB4NTkzNDAyMDAsIDB4OGMwMDA1MTQsIDB4MDQwMDAwMGYsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAzMCwgMHgwNDAwMDAwYywgMHg4MzM4MDU4MCwgMHgwMDAwMDAzZiwKKwkweDA0MDAwMDA5LCAweDgzMzgwNTgwLCAweDAwMDAwMDM0LCAweDA0MDAwMDA2LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMjQsIDB4MDQwMDAwMDMsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0YywgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAxOCwKKwkweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDA0LCAweDU5Y2MwYzA0LAorCTB4NDgwNjYyMDIsIDB4ODMzODA1ODAsIDB4MDAwMDAwNGMsIDB4MDQwMjAwMDksCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAxMSwgMHg4MTM2NjljMCwgMHgwNDAyMDAwNSwKKwkweDU5Y2MwMDAxLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDQ4MDI2MDFlLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4NTk4ODAwNTIsIDB4NDgwM2M4NTcsCisJMHg4MDAwMDAwMCwgMHg0ODAzMTA1MiwgMHgxYzAxZjAwMCwgMHg0MjAwMTAwMCwKKwkweDAwMDA4MDQ5LCAweDU5Y2MxODA2LCAweDgwMGMxOTMwLCAweDAyMDFmODAwLAorCTB4MDAxMDNhM2UsIDB4MDIwMWY4MDAsIDB4MDAxMDc5NDIsIDB4MDQwMDA3ZjMsCisJMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwgMHg1OWNjMGMwNCwKKwkweDQ4MDY2MjAyLCAweDRhMDI2NDAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDFhLAorCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDI5MDAsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg1OWE4MDAyNiwKKwkweDQ4MDNjODU3LCAweDhjMDAwNTA4LCAweDA0MDAwMDEwLCAweDU5Y2MwMDA2LAorCTB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsIDB4ODIwMDBkODAsIDB4MDMwMDAwMDAsCisJMHgwNDAwMDAwYywgMHg4MjAwMGQ4MCwgMHgyMDAwMDAwMCwgMHgwNDAwMDAwOSwKKwkweDgyMDAwZDgwLCAweDA1MDAwMDAwLCAweDA0MDAwMDA2LCAweDgyMDAwZDgwLAorCTB4MjEwMDAwMDAsIDB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHg1OWNjMjAwNiwKKwkweDgyMTAyNTAwLCAweGZmMDAwMDAwLCAweDljMTAyMWMwLCAweDA0MDFmODA3LAorCTB4ODIwYzFjMDAsIDB4MDAxMGI0ZTMsIDB4NTAwYzE4MDAsIDB4ODAwYzA1MDAsCisJMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwgMHg0MDEwMDgwMCwgMHg0MTc4MTgwMCwKKwkweDgyMDQwNDgwLCAweDAwMDAwMDIwLCAweDA0MDAxMDA0LCAweDgwMGMxODAwLAorCTB4NDAwMDA4MDAsIDB4MDQwMWY3ZmIsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMGYsCisJMHg4MjAwMDQwMCwgMHgwMDEwYWIzOCwgMHg1MDAwMDAwMCwgMHg4YzA0MGQwOCwKKwkweDA0MDAwMDAyLCAweDkwMDAwMWMwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4MDQwMWZhYzMsIDB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsCisJMHgwNDAyMDAwNywgMHg1OWNjMDAwMiwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwKKwkweDgyMDAwZDgwLCAweDA4MDAwMDAwLCAweDA0MDAwODAyLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NTljYzA0MDAsIDB4ODIwMDBkMDAsIDB4MDAwMGZmMDAsCisJMHg4NDA0MDljMCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAzMywgMHgwNDAyMDAxZiwKKwkweDA0MDFmOTc2LCAweDA0MDAwMDM4LCAweDU5Y2MwYTA0LCAweDQ4MDY2MjAyLAorCTB4NTljYzAwMDYsIDB4NDgwM2M4NTcsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsCisJMHg4MjAwMGQ4MCwgMHgwMjAwMDAwMCwgMHgwNDAyMDAwOSwgMHg1OWNjMDAwNiwKKwkweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDA0MDIwMDJiLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMTUsIDB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4ODIwMDBkODAsCisJMHgwMTAwMDAwMCwgMHgwNDAyMDAyNCwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwKKwkweDAwMDBmZmZmLCAweDA0MDIwMDIwLCAweDQyMDI3MDAwLCAweDAwMDAwMDE2LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMzIsCisJMHgwNDAyMDAxOSwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwKKwkweDgyMDAwZDgwLCAweDE0MDAwMDAwLCAweDA0MDIwMDEzLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMzgsIDB4NTljYzAwMDEsIDB4MDQwMWY4MTAsIDB4MDQwMjAwMGUsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDVhNiwgMHgwNDAyMDAwYiwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzVhLCAweDA0MDAwMDA4LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDQsIDB4NTljYzBjMDQsIDB4NDgwNjYyMDIsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDdhMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NywgMHg0YzU4MDAwMCwKKwkweDRjMTAwMDAwLCAweDRjMzgwMDAwLCAweDRjMzQwMDAwLCAweDgyMDAzNTAwLAorCTB4MDBmZmZmZmYsIDB4ODIxODE1MDAsIDB4MDBmZjAwMDAsIDB4ODIwODE1ODAsCisJMHgwMGZmMDAwMCwgMHgwNDAyMDAxNiwgMHg4MjE4MTQ4MCwgMHgwMGZmZmZmYywKKwkweDA0MDAxMDEzLCAweDgyMTgxNTgwLCAweDAwZmZmZmZkLCAweDA0MDIwMDA0LAorCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZmQsIDB4MDQwMWYwNDAsIDB4ODIxODE1ODAsCisJMHgwMGZmZmZmZSwgMHgwNDAyMDAwNCwgMHg0MjAyODgwMCwgMHgwMDAwMDdmZSwKKwkweDA0MDFmMDNhLCAweDgyMTgxNTgwLCAweDAwZmZmZmZjLCAweDA0MDIwMDA0LAorCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZmMsIDB4MDQwMWYwMzQsIDB4NDE3ODEwMDAsCisJMHg0MjAwMjAwMCwgMHgwMDAwMDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwKKwkweDQxYWM3MDAwLCAweDUwMzgwMDAwLCAweDgwMDA2ZDQwLCAweDA0MDIwMDA1LAorCTB4ODAwODExYzAsIDB4MDQwMjAwMWUsIDB4ODQxMDE1NWUsIDB4MDQwMWYwMWMsCisJMHg1ODM0MDIxMiwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHgwNDAwMDAxMSwKKwkweDU5YTg0MDEwLCAweDgyMjA0NTAwLCAweDAwZmZmZjAwLCAweDgyMTgwNTAwLAorCTB4MDBmZmZmMDAsIDB4MDQwMDAwMDIsIDB4ODAyMDA1ODAsIDB4NTgzNDAwMDIsCisJMHgwNDAyMDAwZiwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjE4NDUwMCwKKwkweDAwMDAwMGZmLCAweDgwMjA0NTgwLCAweDA0MDIwMDA5LCAweDA0MDFmMDA2LAorCTB4NTgzNDAwMDIsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4ODAxODQ1ODAsCisJMHgwNDAyMDAwMywgMHg0MDEyODgwMCwgMHgwNDAxZjAwYywgMHg4MDEwMjAwMCwKKwkweDgwMzg3MDAwLCAweDgwNThiMDQwLCAweDA0MDIwN2RiLCAweDgwMDgxMWMwLAorCTB4MDQwMjAwMDUsIDB4NDgxYmM4NTcsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwMywgMHg4NDBhOGQxZSwgMHg4MDAwMDU4MCwgMHg1YzAwNjgwMCwKKwkweDVjMDA3MDAwLCAweDVjMDAyMDAwLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLAorCTB4NTlhODAwMjYsIDB4OGMwMDA1MGUsIDB4MDQwMDAwMDMsIDB4OGMwMDA1MDIsCisJMHgwNDAwMDAwNiwgMHg1OWNjMGMwMCwgMHg4MDA0MDkxMCwgMHg4MjA0MDUwMCwKKwkweDAwMDAwMDBmLCAweDBjMDFmMDAyLCAweDFjMDFmMDAwLCAweDAwMTA1ZDBmLAorCTB4MDAxMDVkMGYsIDB4MDAxMDVkMGYsIDB4MDAxMDVkZTUsIDB4MDAxMDVkMGYsCisJMHgwMDEwNWQxMSwgMHgwMDEwNWQyOSwgMHgwMDEwNWQyYywgMHgwMDEwNWQwZiwKKwkweDAwMTA1ZDBmLCAweDAwMTA1ZDBmLCAweDAwMTA1ZDBmLCAweDAwMTA1ZDBmLAorCTB4MDAxMDVkMGYsIDB4MDAxMDVkMGYsIDB4MDAxMDVkMGYsIDB4NDgwM2M4NTYsCisJMHgxYzAxZjAwMCwgMHgwNDAxZjhjNSwgMHgwNDAwMDAxNCwgMHg4MjE0MDUwMCwKKwkweDAwMDAwM2ZmLCAweDgwMDAwMGM0LCAweDgyMDAwNDgwLCAweDAwMDAwMDA4LAorCTB4MDQwMDEwMGUsIDB4NTljYzAwMDEsIDB4NTkzMjY4MDksIDB4NTkzNDA4MDIsCisJMHg4MDA0MDU4MCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHgwNDAyMDAwNywKKwkweDU5Y2MwYTA0LCAweDQ4MDY2MjAyLCAweDQyMDI3MDAwLCAweDAwMDAwMDQ2LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4NTljYzAwMDQsIDB4NDgwM2M4NTcsCisJMHgxYzAxZjAwMCwgMHg1OWNjMDAwNCwgMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwKKwkweDA0MDFmOGFhLCAweDA0MDAwMDE2LCAweDgyMTQwNTAwLCAweDAwMDAwM2ZmLAorCTB4ODAwMDAwYzQsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMGMsIDB4MDQwMDEwMTAsCisJMHg1OWNjMDAwMSwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg1OTMyNjgwOSwKKwkweDU5MzQwODAyLCAweDgyMDQwZDAwLCAweDAwZmZmZmZmLCAweDgwMDQwNTgwLAorCTB4MDQwMjAwMDcsIDB4NTljYzBhMDQsIDB4NDgwNjYyMDIsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0NSwgMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg1OWNjMDAwNCwKKwkweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDQ4MTdjODU3LCAweDA0MDFmOWM4LAorCTB4MDQwMjAwMTEsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAwMGUsCisJMHg1OWNjMDAwMiwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDIwMDA4LCAweDgyMDQwNTAwLCAweDAwMDAwMDBmLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMDYsIDB4MDQwMjEwMDMsIDB4NDgwM2M4NTcsCisJMHgwYzAxZjAwMiwgMHgxYzAxZjAwMCwgMHgwMDEwNWQ2MCwgMHgwMDEwNWQ2NCwKKwkweDAwMTA1ZDYwLCAweDAwMTA1ZDYwLCAweDAwMTA1ZGIyLCAweDAwMTA1ZGMzLAorCTB4NDgwM2M4NTcsIDB4NTljYzAwMDQsIDB4NDgwM2M4NTcsIDB4MWMwMWYwMDAsCisJMHg1OWNjMDAwNCwgMHg0ODAzYzg1NywgMHg1OWE4MDAxNiwgMHg4MDAwMDFjMCwKKwkweDA0MDIwN2Y4LCAweDU5Y2MwODAyLCAweDhjMDQwZDJlLCAweDA0MDIwMDFkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDc5NDIsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHg1OWNjMDAwMSwgMHg0ODAzYzg1NywgMHgwNDAxZmYyOCwgMHgwNDAyMDAwZCwKKwkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDBhLCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDUsIDB4NDkzNjYwMDksIDB4NTljYzBjMDQsIDB4NDgwNjYyMDIsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDA4OCwgMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwKKwkweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDQxN2E2ODAwLCAweDU5Y2MwMDAxLAorCTB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NDgwMjYwMWUsIDB4MDQwMWY3ZjAsCisJMHg1OWNjMDAwMSwgMHg0ODAzYzg1NywgMHgwNDAxZmYxMCwgMHgwNDAyMDdkNSwKKwkweDAyMDFmODAwLCAweDAwMTA0NWE2LCAweDA0MDIwN2QyLCAweDU5Y2MwMDA1LAorCTB4OGMwMDA1MDAsIDB4MDQwMjAwMDQsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsCisJMHgwNDAyMDdjYywgMHgwMjAxZjgwMCwgMHgwMDEwNDlmMywgMHgwNDAyMDAwZiwKKwkweDA0MDFmODNlLCAweDA0MDAwN2M3LCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4MDQwMDA3YzQsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDIsCisJMHg1OWNjMGMwNCwgMHg0ODA2NjIwMiwgMHg0MjAyNzAwMCwgMHgwMDAwMDA4OCwKKwkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4MDQwMDA3YjgsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDQsCisJMHg1OWNjMGMwNCwgMHg0ODA2NjIwMiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDU5Y2MwMDA0LCAweDQ4MDNjODU3LAorCTB4NTljYzA4MDIsIDB4OGMwNDBkMmUsIDB4MDQwMDAwMGIsIDB4MDQwMWY4MWYsCisJMHgwNDAwMDAwOSwgMHgwNDAxZjk2MCwgMHgwNDAyMDAwNywgMHg1OWNjMGEwNCwKKwkweDQ4MDY2MjAyLCAweDQyMDI3MDAwLCAweDAwMDAwMDg5LCAweDAyMDFmMDAwLAorCTB4MDAwMjA3YTEsIDB4NDkzM2M4NTcsIDB4MWMwMWYwMDAsIDB4NTljYzAwMDQsCisJMHg0ODAzYzg1NywgMHg1OWNjMDgwMiwgMHg4YzA0MGQyZSwgMHgwNDAwMDAwYiwKKwkweDA0MDFmODBlLCAweDA0MDAwMDA5LCAweDA0MDFmOTRmLCAweDA0MDIwMDA3LAorCTB4NTljYzBhMDQsIDB4NDgwNjYyMDIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwOGEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg0OTMzYzg1NywgMHgxYzAxZjAwMCwKKwkweDU5Y2MwYTA0LCAweDA0MDFmMDAyLCAweDU5Y2MwYzA0LCAweDU5YTgwMDBlLAorCTB4NTlhODEwNjcsIDB4ODAwODA0MDAsIDB4ODAwNDA0ODAsIDB4MDQwMjEwMDgsCisJMHg0MDA0MDAwMCwgMHg4MDAwMDBjNCwgMHg4MDA0MDhjYSwgMHg4MDA0MGMwMCwKKwkweDgyMDY2NDAwLCAweDAwMTBkMWMwLCAweDFjMDFmMDAwLCAweDgwMDAwNTgwLAorCTB4MDQwMWY3ZmUsIDB4NTljYzA4MDIsIDB4OGMwNDBkMmUsIDB4MDQwMjAwMTAsCisJMHgwNDAxZmZlYywgMHgwNDAwMDAwZSwgMHg1OWNjMDAwMSwgMHg4MjAwMDUwMCwKKwkweDAwZmZmZmZmLCAweDU5MzI2ODA5LCAweDU5MzQwODAyLCAweDgyMDQwZDAwLAorCTB4MDBmZmZmZmYsIDB4ODAwNDA1ODAsIDB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA1MSwgMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg1OWNjMDAwNCwKKwkweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDQyMDAzMDAwLAorCTB4MDAwMDAxMDUsIDB4MDQwMWYwMDEsIDB4NDgwM2M4NTYsIDB4NGMzYzAwMDAsCisJMHg0MWNjNzgwMCwgMHgwNDAxZjgwMywgMHg1YzAwNzgwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRjNTgwMDAwLCAweDU4M2MwNDAwLCAweDgyMDAwNTAwLAorCTB4MDAwMGYwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMGMwMDAsIDB4MDQwMDAwMjQsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAyMSwgMHg0YzE4MDAwMCwKKwkweDU4M2MwMDAxLCAweDA0MDFmZTg5LCAweDA0MDIwMDFmLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1YTYsIDB4MDQwMjAwMWMsIDB4NDkzNjYwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdlNCwgMHgwNDAwMDAxOCwgMHg0OTJlNjAxNywgMHg0OTdhNTgwMCwKKwkweDQ5N2E1YTA0LCAweDQ4MTI1YzA0LCAweDgzMmNhYzAwLCAweDAwMDAwMDA1LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDcsIDB4NDAzY2EwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIxNywgMHg1YzAwMzAwMCwgMHg0ODFhNjQxYSwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDNlLCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDY3MmIsIDB4NWMwMGIwMDAsCisJMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHg1YzAwMzAwMCwKKwkweDA0MDFmN2ZiLCAweDQ4MDNjODU2LCAweDU5Y2MwNDAwLCAweDgyMDAwZDAwLAorCTB4MDAwMGZmMDAsIDB4ODIwNDA1MDAsIDB4MDAwMGYwMDAsIDB4ODQwNDA5YzAsCisJMHg4MjAwMDU4MCwgMHgwMDAwMjAwMCwgMHgwNDAyMDA0OSwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDIyLCAweDA0MDIwMDNhLCAweDU5YzQwMGE0LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMGYsIDB4ODIwMDBjODAsIDB4MDAwMDAwMDcsIDB4MDQwMDEwMDQsCisJMHg4MjAwMDQ4MCwgMHgwMDAwMDAwYywgMHgwNDAwMTAzZiwgMHg1OWNjMDAwNiwKKwkweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDgyMDAwZDgwLCAweDA0MDAwMDAwLAorCTB4MDQwMDAwMzksIDB4ODIwMDBkODAsIDB4NjAwMDAwMDAsIDB4MDQwMDAwMzYsCisJMHg4MjAwMGQ4MCwgMHg1NDAwMDAwMCwgMHgwNDAwMDAzMywgMHg4MjAwMGQ4MCwKKwkweDAzMDAwMDAwLCAweDA0MDIwMDE1LCAweDU5YTgwODI2LCAweDhjMDQwZDAyLAorCTB4MDQwMjAwMmQsIDB4OGMwNDBkMDgsIDB4MDQwMjAwMmIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDhlYywgMHgwNDAwMDAyYiwgMHg1OWE4MDAxZCwgMHg4MDAwMDBkMCwKKwkweDU5YTgwODEwLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgwMDQwNTQwLAorCTB4NTljYzA4MDAsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4ODAwNDA1ODAsCisJMHgwNDAyMDAxYiwgMHgwNDAxZjAxYywgMHg1OWM0MDgwMiwgMHg4YzA0MGQwYywKKwkweDA0MDIwMDE3LCAweDgyMDAwZDgwLCAweDUyMDAwMDAwLCAweDA0MDAwN2VjLAorCTB4ODIwMDBkODAsIDB4MDUwMDAwMDAsIDB4MDQwMDA3ZTksIDB4ODIwMDBkODAsCisJMHg1MDAwMDAwMCwgMHgwNDAwMDdlNiwgMHgwNDAxZjAwZCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDIzLCAweDA0MDIwMDBhLCAweDA0MDFmZjU4LCAweDA0MDAwMDA4LAorCTB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMDYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDA1MSwgMHgwNDAwMDAwMywgMHg4MDAwMDU4MCwKKwkweDA0MDFmMDAzLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwMDBkODAsCisJMHgwMzAwMDAwMCwgMHgwNDAwMDAwNCwgMHg4MjAwMGQ4MCwgMHg1MjAwMDAwMCwKKwkweDA0MDIwN2YzLCAweDU5YTgwMDI2LCAweDgyMDAwNTAwLCAweDAwMDAwMDA5LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDA3ZWYsIDB4MDQwMWY3ZWMsCisJMHg0ODAzYzg1NiwgMHg0YzVjMDAwMCwgMHg0YzU4MDAwMCwgMHg1OWE4MDAxNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDRjLCAweDA0MDIwMDFmLCAweDU5Y2NiODA3LAorCTB4OWM1Y2I5YzAsIDB4ODI1Y2JkMDAsIDB4MDAwMDAwMDcsIDB4OGM1Y2JkMDAsCisJMHgwNDAwMDAwYSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg4M2E4MWMwMCwKKwkweDAwMDAwMDAyLCAweDgzY2MxNDAwLCAweDAwMDAwMDBkLCAweDAyMDFmODAwLAorCTB4MDAxMDg1NWEsIDB4MDQwMjAwMTAsIDB4OGM1Y2JkMDIsIDB4MDQwMDAwMGEsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg4M2E4MWMwMCwgMHgwMDAwMDAwMCwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTA4NTVhLAorCTB4MDQwMjAwMDUsIDB4OGM1Y2JkMDQsIDB4MDQwMDAwMDMsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHg1YzAwYjAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRjNWMwMDAwLCAweDRjNTgwMDAwLCAweDU5YTgwMDE2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwNGMsIDB4MDQwMjAwMWYsIDB4NTljY2I4MDcsCisJMHg5YzVjYjljMCwgMHg4MjVjYmQwMCwgMHgwMDAwMDAwNywgMHg4YzVjYmQwMCwKKwkweDA0MDAwMDBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzYTgxYzAwLAorCTB4MDAwMDAwMDIsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwODU1YSwgMHgwNDAyMDAxMCwgMHg4YzVjYmQwMiwgMHgwNDAwMDAwYSwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzYTgxYzAwLCAweDAwMDAwMDAwLAorCTB4ODNjYzE0MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsCisJMHgwNDAyMDAwNSwgMHg4YzVjYmQwNCwgMHgwNDAwMDAwMywgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDVjMDBiMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTcsIDB4NGM1ODAwMDAsIDB4NDAwMDMwMDAsIDB4NDIwMDIwMDAsCisJMHgwMDAwMDdmMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwgMHg4M2FjNzQwMCwKKwkweDAwMDAwN2YwLCAweDUwMzgwMDAwLCAweDgwMDI2ZDQwLCAweDA0MDAwMDA2LAorCTB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4ODAxODA1ODAsCisJMHgwNDAwMDAxMCwgMHg4MDEwMjAwMCwgMHg4MDM4NzAwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2Y1LCAweDgyMTAwNDgwLCAweDAwMDAwODAwLCAweDQyMDAyMDAwLAorCTB4MDAwMDAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDA3ZjAsIDB4NDFhYzcwMDAsCisJMHgwNDAyMTdlZCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwKKwkweDQwMTI4ODAwLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDI2LAorCTB4OGMwMDA1MGUsIDB4MDQwMDAwMDQsIDB4OGMwMDA1MDIsIDB4MDQwMDAwMDMsCisJMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmN2ZkLCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMDAwMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMDMsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg1OWM4MDAwMCwKKwkweDg0MDAwNTU4LCAweDg0MDAwNTEyLCAweDQ4MDM5MDAwLCAweDFjMDFmMDAwLAorCTB4NGEwMzI4MWEsIDB4MDAwMDAzZTgsIDB4NGEwMzI4MDIsIDB4MDAxMGQxYzAsCisJMHg0YTAzMjgwMCwgMHgwMDAwMDAwMCwgMHg0YTAzMjgwOCwgMHgwMDEwNzA0OSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDA1LCAweDgzOTQ3YzAwLCAweDAwMDAwMDA5LAorCTB4NDk3ODc4MDEsIDB4NGEwMDc4MDIsIDB4MDAxMDZmZmYsIDB4ODIzYzdjMDAsCisJMHgwMDAwMDAwMywgMHg4MDAwMDA0MCwgMHgwNDAyMDdmYSwgMHg0YTAzMjgxOSwKKwkweGZmZmYwMDAwLCAweDQyMDFkMDAwLCAweDAwMDAwMDY0LCAweDA0MDFmOTZlLAorCTB4NDIwMWQwMDAsIDB4MDAwMTg2YTAsIDB4MDQwMWYxODQsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMywgMHgwMDAwMDAwNiwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwYywKKwkweDRkMzAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzQwMDAwLCAweDRkNDAwMDAwLAorCTB4NGNmYzAwMDAsIDB4NGQzODAwMDAsIDB4NGQzYzAwMDAsIDB4NGQ0NDAwMDAsCisJMHg0ZDRjMDAwMCwgMHg0ZDQ4MDAwMCwgMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwKKwkweDRjNjQwMDAwLCAweDRjYzgwMDAwLCAweDRjY2MwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjA1N2IsIDB4NWMwMTk4MDAsIDB4NWMwMTkwMDAsIDB4NWMwMGM4MDAsCisJMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHg1YzAyOTAwMCwgMHg1YzAyOTgwMCwKKwkweDVjMDI4ODAwLCAweDVjMDI3ODAwLCAweDVjMDI3MDAwLCAweDVjMDFmODAwLAorCTB4NWMwMjgwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsCisJMHgxYzAxZjAwMCwgMHg1OTk0MDAwNCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwYSwKKwkweDU5OTQwMDI1LCAweDgwMDQwNDAwLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAorCTB4NDgwMzI4MDQsIDB4NDgwYjI4MDUsIDB4NGEwMzI4MDMsIDB4MDAwMDAwMGEsCisJMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg1OTk0MDAxZiwgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDBhLCAweDU5OTQwMDI1LCAweDgwMDQwNDAwLCAweDAyMDAxODAwLAorCTB4MDAxMDA1ZDgsIDB4NDgwMzI4MWYsIDB4NDgwYjI4MjAsIDB4NGEwMzI4MWUsCisJMHgwMDAwMDAwMSwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg1OTk0MDAyMiwKKwkweDgwMDAwNTQwLCAweDA0MDIwMDBhLCAweDU5OTQwMDI1LCAweDgwMDQwNDAwLAorCTB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwMzI4MjIsIDB4NDgwYjI4MjMsCisJMHg0YTAzMjgyMSwgMHgwMDAwMDAwYSwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDRjMDAwMDAwLCAweDU5OTQwMDA1LCAweDQ4MDNjODU3LCAweDQ4MGJjODU3LAorCTB4ODAwODA1ODAsIDB4MDQwMjAwMDMsIDB4NDk3YjI4MDQsIDB4NDk3YjI4MDUsCisJMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg1OTk0MDAyMCwKKwkweDQ4MDNjODU3LCAweDQ4MGJjODU3LCAweDgwMDgwNTgwLCAweDA0MDIwMDAzLAorCTB4NDk3YjI4MWYsIDB4NDk3YjI4MjAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg0YzAwMDAwMCwgMHg1OTk0MDAyMywgMHg0ODAzYzg1NywgMHg0ODBiYzg1NywKKwkweDgwMDgwNTgwLCAweDA0MDIwMDAzLCAweDQ5N2IyODIyLCAweDQ5N2IyODIzLAorCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NDhlYmM4NTcsCisJMHg1OTM0MDIwMywgMHg4MGU4MDQ4MCwgMHgwNDAwMTAwMiwgMHg0OGVhNmEwMywKKwkweDFjMDFmMDAwLCAweDVjMDNlMDAwLCAweDFjMDFmMDAwLCAweDRkNDQwMDAwLAorCTB4NDIwMDc4MDAsIDB4MDAwMDAwMTAsIDB4NTk5Njg4MDEsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI0NSwgMHgwNDAyMDAxMiwgMHg1OTM0MWEwMywgMHg4MDBjMTg0MCwKKwkweDA0MDAxMDBmLCAweDU5OTQwMDI3LCAweDgwMGMwNDgwLCAweDA0MDAwMDAzLAorCTB4NDgwMjZhMDMsIDB4MDQwMjEwMGEsIDB4NTkzNDAwMGYsIDB4NDk3YTZhMDMsCisJMHg4MDAwMDU0MCwgMHgwNDAwMDAwNiwgMHg0YzNjMDAwMCwgMHg1OTM0MTQwYiwKKwkweDAyMDFmODAwLCAweDAwMDIwMjUzLCAweDVjMDA3ODAwLCAweDgxNDY4ODAwLAorCTB4ODM0NDA0ODAsIDB4MDAwMDA4MDAsIDB4MDQwMjEwMDcsIDB4ODAzYzc4NDAsCisJMHgwNDAyMDdlNywgMHg0OTQ3MjgwMSwgMHg1YzAyODgwMCwgMHg1YzAzZTAwMCwKKwkweDFjMDFmMDAwLCAweDRhMDMyODAwLCAweDAwMDAwMDAyLCAweDQ5N2IyODAxLAorCTB4MDQwMWY3ZmEsIDB4NDIwMDc4MDAsIDB4MDAwMDAwMTAsIDB4NTk5NjYwMDIsCisJMHg1OTMwMDIwNSwgMHg4MDAwMGQ0MCwgMHgwNDAwMDAwNiwgMHg1OTk0MDAyNywKKwkweDgwMDQwNDgwLCAweDQ4MDI2MjA1LCAweDA0MDAxMDJkLCAweDA0MDAwMDJjLAorCTB4NTkzMDAyMDYsIDB4ODAwMDBkNDAsIDB4MDQwMDAwMTQsIDB4NTliODAwZTQsCisJMHg4YzAwMDUyNCwgMHgwNDAyMDAxMSwgMHg0YTAzNzBlNCwgMHgwMDAzMDAwMCwKKwkweDQwMDAwMDAwLCAweDU5YjgwMGU0LCAweDhjMDAwNTI0LCAweDA0MDAwMDA0LAorCTB4NGEwMzcwZTQsIDB4MDAwMjAwMDAsIDB4MDQwMWYwMDgsIDB4NTk5NDAwMjcsCisJMHg4MDA0MDQ4MCwgMHg0ODAyNjIwNiwgMHg0YTAzNzBlNCwgMHgwMDAyMDAwMCwKKwkweDA0MDAxMDFjLCAweDA0MDAwMDFiLCAweDgzMzI2NDAwLCAweDAwMDAwMDI0LAorCTB4NDkzMzI4MDIsIDB4NDE1NDAwMDAsIDB4ODEzMDA0ODAsIDB4MDQwMjEwMDUsCisJMHg4MDNjNzg0MCwgMHgwNDAyMDdkYiwgMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwKKwkweDU5OTQwMDI2LCAweDQ4MDMyODI3LCAweDRhMDMyODAyLCAweDAwMTBkMWMwLAorCTB4NDk3YjI4MjYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMGYsIDB4NGEwMzI4MDAsCisJMHgwMDAwMDAwMSwgMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHg0YzNjMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA5MWRiLCAweDVjMDA3ODAwLCAweDA0MDFmN2QxLAorCTB4NGMzYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDhkNWQsIDB4NWMwMDc4MDAsCisJMHgwNDAxZjdlMiwgMHg0YTAzMjgwMCwgMHgwMDAwMDAwMCwgMHg1YzAzZTAwMCwKKwkweDFjMDFmMDAwLCAweDU5YTgwODZiLCAweDhjMDQwZDMwLCAweDA0MDIwMDI5LAorCTB4OGMwNDBkMzIsIDB4MDQwMDAwMGYsIDB4NTlhODAwNjksIDB4ODE2NDA0ODAsCisJMHgwNDAwMTAxOSwgMHg1OWE4MDAwYiwgMHg4MTUwMDU4MCwgMHgwNDAwMDAwNSwKKwkweDU5YTgwMDZhLCAweDU5YTgxMDY2LCAweDgwMDgwNTgwLCAweDA0MDIwMDEyLAorCTB4OTAwNDExYzAsIDB4ODIwODE1MDAsIDB4MDAwMDcwMDAsIDB4MDQwMWYwMTIsCisJMHg4MjA0MDUwMCwgMHgwMDAwMDAxZiwgMHgwNDAwMDAxNiwgMHg4MDA0MDg0MCwKKwkweDgyMDQwNTAwLCAweDAwMDAwMDFmLCAweDA0MDAwMDAzLCAweDQ4MDc1MDZiLAorCTB4MDQwMWYwMTAsIDB4OTAwNDAxYzAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMWYsCisJMHg4MDA0MGQ0MCwgMHg5MDA0MDFjMCwgMHg4MDA0MDU4MCwgMHg4MjAwMTUwMCwKKwkweDAwMDA3MDAwLCAweDgyMDQwNTAwLCAweGZmZmY4ZmZmLCAweDgwMDgwNTQwLAorCTB4NDgwMzUwNmIsIDB4ODAwODExMTQsIDB4MDIwMWY4MDAsIDB4MDAxMDA2ZTIsCisJMHgxYzAxZjAwMCwgMHg0YTAzMjgwNywgMHgwMDAwMDdkMCwgMHg0YTAzMjgwNiwKKwkweDAwMDAwMDBhLCAweDFjMDFmMDAwLCAweDQyMDAwODAwLCAweDAwMDAwN2QwLAorCTB4ODMxODA0ODAsIDB4MDAwMDAwMDUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCisJMHg4Mzk0N2MwMCwgMHgwMDAwMDAwOSwgMHg4MzE4MDQwMCwgMHgwMDEwNWY0MywKKwkweDUwMDAwMDAwLCAweDgwM2M3YzAwLCAweDQ4MDQ3ODAxLCAweDRhMDA3ODAwLAorCTB4MDAwMDAwMGEsIDB4MWMwMWYwMDAsIDB4ODMxODA0ODAsIDB4MDAwMDAwMDUsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4Mzk0N2MwMCwgMHgwMDAwMDAwOSwKKwkweDgzMTgwNDAwLCAweDAwMTA1ZjQzLCAweDUwMDAwMDAwLCAweDgwM2M3YzAwLAorCTB4NDk3ODc4MDEsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsIDB4NDgwYmM4NTcsCisJMHg1OTk0MDAyNSwgMHg4MDA0MDQwMCwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwKKwkweDQ4MDMyODA0LCAweDQ4MGIyODA1LCAweDRhMDMyODAzLCAweDAwMDAwMDBhLAorCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsIDB4NDgwYmM4NTcsIDB4NTk5NDAwMjUsCisJMHg4MDA0MDQwMCwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzMjgxYywKKwkweDQ4MGIyODFkLCAweDRhMDMyODFiLCAweDAwMDAwMDBhLCAweDFjMDFmMDAwLAorCTB4NGMwMDAwMDAsIDB4NTk5NDAwMWQsIDB4NDgwM2M4NTcsIDB4NDgwYmM4NTcsCisJMHg4MDA4MDU4MCwgMHgwNDAyMDAwMywgMHg0ODAzMjgxYywgMHg0ODAzMjgxZCwKKwkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDgwZTlkMWMwLCAweDA0MDAwMDBlLAorCTB4MDQwMWY4MzYsIDB4MDQwMjUwMDAsIDB4NDIwM2UwMDAsIDB4ODAwMDAwMDAsCisJMHg0MGU4MTAwMCwgMHg0MTc4MDgwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwKKwkweDAyMDFmODAwLCAweDAwMTA2NmEwLCAweDU5OTQwMDI0LCAweDgwMDgwNDAwLAorCTB4NDgwMzI4MjQsIDB4MWMwMWYwMDAsIDB4NDIwMDEwMDAsIDB4MDAxMDUwNjUsCisJMHgwNDAxZmVmMCwgMHg0MjAwMTAwMCwgMHgwMDEwNTA1OCwgMHgwNDAxZmZlMSwKKwkweDQyMDAxMDAwLCAweDAwMTA0MTQ4LCAweDA0MDFmZWVhLCAweDQyMDAxMDAwLAorCTB4MDAxMDQxYmMsIDB4MDQwMWZlZTcsIDB4NDIwMDEwMDAsIDB4MDAxMDQxZjMsCisJMHgwNDAxZjZmOCwgMHg0MjAzZTAwMCwgMHg3MDAwMDAwMCwgMHg0MjAzZTAwMCwKKwkweGIwMzAwMDAwLCAweDQxZmMwMDAwLCAweDQwZWJmODAwLCAweDgwZTgwNDgwLAorCTB4MDQwMDEwMTEsIDB4MDQwMDAwMDQsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAyMTAwZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwZiwgMHgwNDAwNDAwNCwKKwkweDgwMDAwMDQwLCAweDA0MDIwN2ZlLCAweDA0MDFmMDA3LCAweDQyMDNlMDAwLAorCTB4NzAwMDAwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4N2UsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHgxYzAxZjAwMCwgMHg0MjAzZTAwMCwgMHg4MDAwMDAwMCwKKwkweDQyMDNlMDAwLCAweGIwNDAwMDAwLCAweDQxZmMwMDAwLCAweDQwZWJmODAwLAorCTB4ODBlODA0ODAsIDB4MDQwMDEwMTEsIDB4MDQwMDAwMDQsIDB4ODIwMDA0ODAsCisJMHgwMDAwMDAwMywgMHgwNDAyMTAwZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwZiwKKwkweDA0MDA1MDA0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZlLCAweDA0MDFmMDA3LAorCTB4NDIwM2UwMDAsIDB4ODAwMDAwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4N2YsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgxYzAxZjAwMCwgMHg1OWE4MDAwZSwKKwkweDgyMDAwNDgwLCAweDAwMDAwMTAwLCAweDU5OWMwYTAyLCAweDgwMDQwOWMwLAorCTB4MDQwMjAwMDIsIDB4ODAwNDA4MDAsIDB4ODAwNDE0ODAsIDB4MDQwMDEwMDIsCisJMHg0MDAwMDgwMCwgMHg0ODA3NTA2NywgMHg1OWE4MTAwZSwgMHg0MDA0MDAwMCwKKwkweDgwMGFjYzgwLCAweDQ5Njc1MDBlLCAweDQ5Njc1MDY5LCAweDU5YWFhODBiLAorCTB4NDE2NDA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjY4MSwgMHg4MjA2YTQwMCwgMHgwMDEwZDFjMCwgMHg0OTUzNTA2NSwKKwkweDQxNTJiMDAwLCAweDQyMDA2MDAwLCAweDAwMTBiZTY1LCAweDRhMDA2MDA0LAorCTB4MDAwMDAxMmMsIDB4NGEwMDYwMDUsIDB4ZGExMGRhMTAsIDB4NGEwMDYwMDgsCisJMHgwMDAwMDAxMSwgMHg0YTAwNjAwOSwgMHgwMDEwYmU2NSwgMHg0YTAwNjAwYSwKKwkweDAwMTAxMGI4LCAweDU5OWMwMDE0LCAweDQ4MDA2MDExLCAweDU5OWMwMDE1LAorCTB4NDgwMDYwMTIsIDB4NDIwMDYwMDAsIDB4MDAxMGJlNDEsIDB4NGEwMDYyMDMsCisJMHgwMDAwMDAwOCwgMHg0YTAwNjQwNiwgMHgwMDAwMDAwNiwgMHg0YTAwNjAwMiwKKwkweGZmZmYwMDAwLCAweDRhMDA2MDA4LCAweDAwMTBiZTY1LCAweDRhMDA2MDE0LAorCTB4MDAxMGJlNjUsIDB4NTk5YzAwMTQsIDB4NDgwMDYwMTUsIDB4NTk5YzAwMTUsCisJMHg0ODAwNjAxNiwgMHg1OTljMDQxMywgMHg0ODAwNjAxNywgMHg0OTUwNjAxOCwKKwkweDQ5NTQ2MDE5LCAweDU5YTgwMDY3LCAweDQ4MDA2MDFhLCAweDRhMDA2MDFiLAorCTB4MDAxMGI0NjUsIDB4NGEwMDYwMWMsIDB4MDAxMGI0NjYsIDB4NGEwMDYwMWQsCisJMHgwMDEwYjQ2YSwgMHg0MjAwMDAwMCwgMHhiMDAwMDAwMCwgMHg0MjAwMDgwMCwKKwkweDAwMTBiZTQxLCAweDAyMDFmODAwLCAweDAwMTAwYjY4LCAweDFjMDFmMDAwLAorCTB4ODIwMDBkMDAsIDB4MDAwMDAwYzAsIDB4MDQwMDAwMDQsIDB4ODIwNDBkODAsCisJMHgwMDAwMDBjMCwgMHgwNDAyMDA1NSwgMHg4MjAwMGQwMCwgMHgwMDAwMjAyMCwKKwkweDU5MzAwNDE0LCAweDg0MDAwNTEyLCAweDgyMDQwZDgwLCAweDAwMDAyMDIwLAorCTB4MDQwMDAwMGIsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMGYsIDB4NDgwMjY0MTQsCisJMHg4MTNlNzljMCwgMHgwMjAyMDAwMCwgMHgwMDAyMDZkMCwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDQzLCAweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDU5MzI2ODA5LAorCTB4NTkzNDBhMDAsIDB4OGMwNDBkMGEsIDB4MDQwMDA3ZjMsIDB4ODQwMDA1NTIsCisJMHgwNDAxZjdmMSwgMHg4NDAwMDUxNCwgMHg1OTJjMDgwZCwgMHg0ODA2NjAxNSwKKwkweDA0MDFmN2VmLCAweDU5MzI2ODA5LCAweDU5MzQwYTAwLCAweDhjMDQwZDBhLAorCTB4MDIwMDAwMDAsIDB4MDAwMjA2ZTMsIDB4NTkzMDBjMTQsIDB4ODQwNDBkNTIsCisJMHg0ODA2NjQxNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDZlMywgMHgwMjAxZjgwMCwKKwkweDAwMDIwMDg2LCAweDgxM2U3OWMwLCAweDAyMDIwMDAwLCAweDAwMDIwNmQwLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA2ZjEsIDB4OGMwMDA1MWUsIDB4MDIwMDAwMDAsCisJMHgwMDAyMDZmZCwgMHg4MjAwMGQwMCwgMHgwMDAwMjAyMCwgMHg4MjA0MGQ4MCwKKwkweDAwMDAyMDIwLCAweDA0MDAwMDE0LCAweDgyMDAwNTAwLCAweDAwMDAwMGMwLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwODAsIDB4MDQwMDAwMDgsIDB4ODEzZTc5YzAsCisJMHgwMjAyMDAwMCwgMHgwMDAyMDZkMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0MSwKKwkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDgxM2U3OWMwLCAweDAyMDIwMDAwLAorCTB4MDAwMjA2ZDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDMsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDdhMSwgMHg1OTMyNjgwOSwgMHg1OTM0MGEwMCwgMHg4YzA0MGQwYSwKKwkweDA0MDAwN2VhLCAweDU5MzAwYzE0LCAweDg0MDQwZDUyLCAweDQ4MDY2NDE0LAorCTB4MDQwMWY3ZTYsIDB4NDkyZmM4NTcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDZmOCwgMHg0OTJmYzg1NywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA0LCAweDAyMDFmMDAwLCAweDAwMDIwNmY4LCAweDQ4MDdjODU2LAorCTB4NTlhODAwNjgsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDMsIDB4ODAwODA1NDAsCisJMHgwNDAxZjAwMiwgMHg4MDA4MDUwMCwgMHg0ODAzNTA2OCwgMHgxYzAxZjAwMCwKKwkweDRhMDMwODAwLCAweDAwMDAwMDAwLCAweDRhMDMwODAyLCAweDAwMDAwMDAxLAorCTB4NDk3YjA4MDMsIDB4NDk3YjA4MDQsIDB4MWMwMWYwMDAsIDB4NTk4NDAwMDIsCisJMHg4YzAwMDUwMCwgMHgwNDAwMDAwNCwgMHg4NDAwMDUwMCwgMHg0YTAzMDgwMCwKKwkweDAwMDAwMDAxLCAweDg0MDAwNTQ0LCAweDg0MDAwNTA2LCAweDQ4MDMwODAyLAorCTB4ODIwMDBkMDAsIDB4MGZmZmZmZmYsIDB4NDIwMDAwMDAsIDB4OTAwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGI5NCwgMHg1OWE4MDA2OSwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDA3LCAweDQ4MDM1MDY5LCAweDgwMDAwNTgwLCAweDQyMDAwODAwLAorCTB4MDAxMGI1MTksIDB4NDgwMDA4MDAsIDB4NDgwMDA4MDEsIDB4MWMwMWYwMDAsCisJMHg1OWE4MDA2OSwgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwNywgMHg0ODAzNTA2OSwKKwkweDFjMDFmMDAwLCAweDgzNjQwNDgwLCAweDAwMDAwMDA4LCAweDA0MDAxMDFiLAorCTB4NThjODBhMDMsIDB4ODAwMDA1ODAsIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDgsCisJMHg4MDA0MDg0MCwgMHgwNDAyMDdmZCwgMHg4MTVjMDQ4MCwgMHgwNDAwMTAxMywKKwkweDQyMDBiMDAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDksCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwgMHg0YTAyNjAwNywgMHgwMDAwMDEwMSwKKwkweDA0MDFmODA5LCAweDA0MDFmODgwLCAweDgwNThiMDQwLCAweDA0MDIwN2YzLAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjdmZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHg0OTJlNjAwOCwKKwkweDU4YzgwYTAzLCAweDRhMDI1YTA0LCAweDAwMDAwMDJjLCAweDQ5N2E1ODAwLAorCTB4NDk3YTU4MDEsIDB4NDk3YTVjMDQsIDB4NDk3YTVjMDYsIDB4NDk3YTU4MDUsCisJMHg0YTAyNWEwOCwgMHgwMDAwMDAwNSwgMHg0YTAyNWEwNywgMHgwMDAwMDAwMiwKKwkweDU4YzgwMjAxLCAweDQ4MDI1YzA0LCAweDU4YzgwMjAyLCAweDQ4MDI1YzA3LAorCTB4NThjODAyMDQsIDB4NDgwMjVjMDgsIDB4NGEwMjU4MGQsIDB4MDAwMGZmZmYsCisJMHg4MDA0MDg0MCwgMHgwNDAwMDAwYywgMHg0MTJjMjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwN2U0LCAweDRhMDI1YTA0LCAweDAwMDAwMDBhLCAweDQ5N2E1YzA0LAorCTB4NDgxMjU4MDAsIDB4NDkyYzIwMDEsIDB4NDEyYzIwMDAsIDB4ODAwNDA4NDAsCisJMHgwNDAyMDdmNywgMHgxYzAxZjAwMCwgMHg0ZDdjMDAwMCwgMHg0MjAyZjgwMCwKKwkweDAwMDAwMDEwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLAorCTB4NTk4NDc4MDMsIDB4ODAzYzc5YzAsIDB4MDQwMDAwMWUsIDB4NGM1YzAwMDAsCisJMHg1ODNjYjgwOCwgMHg1ODVjMzQwOCwgMHg4MDE4MzFjMCwgMHgwNDAwMDAwYiwKKwkweDA0MDFmODRhLCAweDA0MDAwMDE2LCAweDQyMDAxMDAwLCAweDAwMTBiNTE5LAorCTB4MDQwMWY4N2YsIDB4MDQwMDAwMTIsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZDMsCisJMHgwNDAwMDAwZiwgMHg0OTJjYjgwNSwgMHg1ODVjMDAwNSwgMHg4MDAwMDU0MCwKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDA0MDFmODMwLCAweDU4NWM1NDA4LAorCTB4MDQwMWY4MGIsIDB4NWMwMGI4MDAsIDB4NWMwM2UwMDAsIDB4ODE3ZWY4NDAsCisJMHgwNDAyMDdlMSwgMHg1YzAyZjgwMCwgMHgxYzAxZjAwMCwgMHg1YzAwYjgwMCwKKwkweDVjMDNlMDAwLCAweDVjMDJmODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NDA1YzYwMDAsIDB4ODAyODUxYzAsIDB4MDQwMDAwMTgsIDB4NTg1YzAyMDQsCisJMHg4MjAwMGQwMCwgMHgwMDAwMDAwZiwgMHg4MjA0MGMwMCwgMHgwMDEwMTBiZCwKKwkweDUwMDQ0MDAwLCAweDRjZjAwMDAwLCAweDRkMDAwMDAwLCAweDRkMDQwMDAwLAorCTB4NDAyMWUwMDAsIDB4NDAzMjA4MDAsIDB4NTk4NjAwMDQsIDB4NGMyODAwMDAsCisJMHgwNDAxZjkzNCwgMHg1YzAwNTAwMCwgMHg0MGYwNDAwMCwgMHg0MTA0NjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxMDliLCAweDA0MDIwN2Y2LCAweDVjMDIwODAwLAorCTB4NWMwMjAwMDAsIDB4NWMwMWUwMDAsIDB4NThjODAyMDQsIDB4NDgwMGJjMDgsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDA4NiwgMHg0YTAyNjAwNywgMHgwMDAwMDEwMSwKKwkweDQ5N2E2MDA5LCAweDA0MDFmMDU1LCAweDQ4MDNjODU2LCAweDU5ODQwMDAzLAorCTB4ODAwMjY1NDAsIDB4MDQwMDAwMDMsIDB4NTkzMDAwMDAsIDB4NDgwMzA4MDMsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg1OTg0MDAwMywgMHg0ODAyNjAwMCwKKwkweDQ5MzMwODAzLCAweDFjMDFmMDAwLCAweDU4Y2MwODA1LCAweDQwMTgwMDAwLAorCTB4ODAwNDA0ODAsIDB4MDQwMDEwMGQsIDB4ODJjYzA1ODAsIDB4MDAxMGI1MGUsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OGM4MDIwNSwgMHg4MDA0MDQ4MCwKKwkweDA0MDAxMDFkLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4ODAwMDM1ODAsIDB4MDQwMWY3ZmUsIDB4ODJjYzA1ODAsIDB4MDAxMGI1MGUsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OGM4MDQwMCwgMHg4YzAwMDUwNCwKKwkweDA0MDAwN2Y4LCAweDU4YzgwNDBiLCAweDhjMDAwNTFlLCAweDA0MDAwN2Y1LAorCTB4OGMwMDA1MDAsIDB4MDQwMjA3ZjMsIDB4ODQwMDA1NDAsIDB4NDgwMTk0MGIsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgzOSwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDQyMDAxMDAwLCAweDAwMDA4MDI2LCAweDAyMDFmODAwLCAweDAwMTAzYTNlLAorCTB4MDQwMWY3ZTgsIDB4NThjODA0MGIsIDB4OGMwMDA1MWUsIDB4MDQwMDA3ZTIsCisJMHg4YzAwMDUwMiwgMHgwNDAyMDdlMCwgMHg4NDAwMDU0MiwgMHg0ODAxOTQwYiwKKwkweDQyMDAwMDAwLCAweDAwMTBiODM4LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NDIwMDEwMDAsIDB4MDAwMDgwMjUsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwM2EzZSwgMHgwNDAxZjdkMywgMHg0ODAzYzg1NiwKKwkweDU4MDgwMDAwLCAweDQyMDAxODAwLCAweDAwMDAwMDA3LCAweDU4MDgwODAxLAorCTB4ODAwNDA0ODAsIDB4MDQwMjAwMDQsIDB4NDAwYzAwMDAsIDB4ODAwMDA1NDAsCisJMHgwNDAxZjAwNSwgMHgwNDAwMTAwMywgMHg4MDBjMDQ4MCwgMHgwNDAxZjAwMiwKKwkweDgwMDAwMDgwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5MzAwMDA4LAorCTB4ODAwMDBkNDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTgwNDAwMDUsCisJMHg4MDAwMDU0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTMwMDAwNywKKwkweDgyMDAwNTAwLCAweDAwMDAwMTAxLCAweDgyMDAwNTgwLCAweDAwMDAwMTAxLAorCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDIwMDEwMDAsIDB4MDAxMGI1MTksCisJMHg1ODA4MDgwMSwgMHg4MjA0MDQwMCwgMHgwMDEwYjUxYiwgMHg0OTdhNjQxNCwKKwkweDRhMDI2MDE1LCAweDAwMDBmZmZmLCAweDQ1MzAwMDAwLCAweDgwMDQwODAwLAorCTB4ODIwNDA0ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDEwMDIsIDB4ODAwMDBkODAsCisJMHg0ODA0MTAwMSwgMHg4MjA0MDQwMCwgMHgwMDEwYjUxYiwgMHg0NTc4MDAwMCwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwODA4LCAweDgwMDQwOWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NGQyYzAwMDAsIDB4NTgwNjU4MDUsCisJMHg4MTJlNTljMCwgMHgwMjAyMDgwMCwgMHgwMDEwMDdmNCwgMHg0OTc4MDgwNSwKKwkweDQwMDY1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2ZkLCAweDVjMDI1ODAwLAorCTB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsIDB4NWMwMjYwMDAsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOSwKKwkweDA0MDIwMDA2LCAweDU5MzAwMDA3LCAweDhjMDAwNTEwLCAweDA0MDAwMDAzLAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg1OTg0MDgwMiwgMHg4YzA0MGQwNCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDU5ODQwODAyLCAweDg0MDQwZDA0LCAweDg0MDQwZDQwLAorCTB4NGEwMzA4MDAsIDB4MDAwMDAwMDAsIDB4NDgwNzA4MDIsIDB4ODIwNDBkMDAsCisJMHgwZmZmZmZmZiwgMHg0MjAwMDAwMCwgMHg5MDAwMDAwMCwgMHgwMjAxZjAwMCwKKwkweDAwMTAwYjk0LCAweDQ4MDdjODU3LCAweDQ4MDU5ODBhLCAweDQ5Nzk5ODAxLAorCTB4NDk3OTk4MDMsIDB4NDk3OTk4MDYsIDB4NDk3OTk4MDcsIDB4NDk3OTk4MDgsCisJMHg0OTc5OTgwNSwgMHg0OTc5OTgwOSwgMHgwNDAxZjhjOSwgMHgwNDAwMDAwYSwKKwkweDA0MDFmOGViLCAweDA0MDAwMDA4LCAweDQ4MzU5ODAwLCAweDQ4MzU5ODAyLAorCTB4NDgzNTk4MDYsIDB4NGEwMTk4MDQsIDB4MDAwMDAwMDEsIDB4NGEwMTk4MDcsCisJMHgwMDAwMDAwNSwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg1OGNjMTAwNywKKwkweDQwMDQwMDAwLCAweDgwMDgwNDgwLCAweDA0MDIxMDIwLCAweDRjMDQwMDAwLAorCTB4NGMwODAwMDAsIDB4MDQwMWY4ZGEsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsCisJMHgwNDAwMDAxYywgMHg1OGNjMDAwNiwgMHg4MDAwNjU0MCwgMHgwNDAyMDAwYiwKKwkweDQ4MzU5ODAwLCAweDQ4MzU5ODAyLCAweDQ4MzU5ODA2LCAweDQ5Nzk5ODAxLAorCTB4NDk3OTk4MDMsIDB4NDk3ODY4MDEsIDB4NDk3ODY4MDAsIDB4NDk3OTk4MDQsCisJMHg0OTc5OTgwNywgMHgwNDAxZjAwNSwgMHg0ODMwNjgwMSwgMHg0ODM0NjAwMCwKKwkweDQ4MzU5ODA2LCAweDQ5Nzg2ODAwLCAweDU4Y2MwMDA0LCAweDU4Y2MxMDA3LAorCTB4ODAwMDAwMDAsIDB4ODIwODE0MDAsIDB4MDAwMDAwMDUsIDB4NDgwMTk4MDQsCisJMHg0ODA5OTgwNywgMHgwNDAxZjdkZiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ4MGJjODU3LAorCTB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsIDB4NDAwODMwMDAsCisJMHg1OGNjMDgwMSwgMHg4MjA0MDQ4MCwgMHgwMDAwMDAwNSwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNWQ4LCAweDgyMDQwNDAwLCAweDAwMTA2NDE4LCAweDUwMDAwMDAwLAorCTB4NThjY2E4MDAsIDB4ODA1NGFjMDAsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDUsCisJMHg0MDA0MDAwMCwgMHg4MDBjMDQ4MCwgMHg4MDA4MjQ4MCwgMHgwNDAyMTAwMiwKKwkweDQwMDgwMDAwLCAweDgwMDBiMGMyLCAweDgwNThiNDAwLCAweDU0NTBhODAwLAorCTB4ODA1MGEwMDAsIDB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsCisJMHg0MDAwMTAwMCwgMHg1OGNjMjgwNSwgMHg1OGNjMDgwNywgMHg1OGNjMjAwMSwKKwkweDgwMTQyYzAwLCAweDgwMDQwYzgwLCAweDgwMTAyNDAwLCAweDQ4MTU5ODA1LAorCTB4NDgwNTk4MDcsIDB4NDgxMTk4MDEsIDB4ODIxMDA1ODAsIDB4MDAwMDAwMDUsCisJMHgwNDAwMDAwYywgMHg0ODExOTgwMSwgMHg0MDA4MDAwMCwgMHg4MDE4MTQ4MCwKKwkweDQwMDgzMDAwLCAweDA0MDAwMDAzLCAweDA0MDIxN2Q2LCAweDgwMDAwNTgwLAorCTB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4MWMwMWYwMDAsCisJMHg1OGNjMDgwMCwgMHg4MDA0MDljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU4MDQwODAwLCAweDQ4MDU5ODAwLCAweDQxNzgyMDAwLCAweDA0MDFmN2VlLAorCTB4MDQwMWY4MTMsIDB4NTBmMDAwMDAsIDB4ODEwNDA0MDAsIDB4NDAwMDE4MDAsCisJMHg1ODVjMDIwNCwgMHg0ODAzYzg1NywgMHg4MjAwMDU4MCwgMHgwMDAwMDAyYywKKwkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU4MDQwMjAyLCAweDgwMDAwMGUwLAorCTB4ODEwMDA1NDAsIDB4NDgwMDE4MDIsIDB4NTgwNDAwMDAsIDB4NDgwMDE4MDAsCisJMHg1ODA0MDAwMSwgMHg0ODAwMTgwMSwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwKKwkweDU4Y2MwMDA1LCAweDgwMDAwMDQwLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAorCTB4NDgwMTk4MDUsIDB4NThjYzEwMDMsIDB4ODIwODA0ODAsIDB4MDAwMDAwMDUsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjA4MDQwMCwgMHgwMDEwNjQxOCwKKwkweDUwMDAwMDAwLCAweDU4Y2MwODAyLCAweDgwMDQwYzAwLCAweDgwMDgxMDAwLAorCTB4ODIwODA0ODAsIDB4MDAwMDAwMDUsIDB4MDQwMjAwMGYsIDB4NThjYzIwMDIsCisJMHg1ODEwMDAwMCwgMHg4MDAwNmQ0MCwgMHgwNDAwMDAwOSwgMHg0YzM0MDAwMCwKKwkweDA0MDFmODU4LCAweDVjMDA2ODAwLCAweDQ5Nzg2ODAxLCAweDQ4MzU5ODAyLAorCTB4NThjYzAwMDQsIDB4ODAwMDAwNDAsIDB4NDgwMTk4MDQsIDB4NDk3OTk4MDMsCisJMHgwNDAxZjAwMiwgMHg0ODA5OTgwMywgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwKKwkweDQxNzgxODAwLCAweDU4YzgwMjAxLCAweDgwMDAwNTQwLCAweDA0MDAwMDAyLAorCTB4ODAwYzE4MDAsIDB4NThjODBjMDEsIDB4ODAwNDBjODAsIDB4MDQwMDEwMGEsCisJMHgwNDAwMDAwOSwgMHg4MDBjMTgwMCwgMHg1OGM4MDIwMiwgMHg4MDA0MTQ4MCwKKwkweDA0MDAxMDA1LCAweDA0MDAwMDA0LCAweDgwMGMxODAwLCAweDQwMDgwODAwLAorCTB4MDQwMWY3ZmIsIDB4NDgwZDkyMDQsIDB4NDAwYzAwMDAsIDB4NDIwMDIwMDAsCisJMHgwMDAwMDAwMSwgMHg4MDAwMDA0MCwgMHgwNDAwMDAwNywgMHgwNDAwMTAwNiwKKwkweDgwMTAyMDAwLCAweDgyMDAwNDgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDAyLAorCTB4MDQwMjE3ZmMsIDB4NDgxMTkyMDMsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsCisJMHg0ZDJjMDAwMCwgMHg1OGNjMDAwYSwgMHg4MDAwMDU0MCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDgyMDAyNDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZDMsIDB4MDQwMDAwMTIsIDB4NDkyZDk4MDksIDB4NDk3YTU4MDAsCisJMHg0OTdhNTgwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHgwNDAwMDAwYywKKwkweDU4Y2MwMDA5LCAweDQ4MDI1ODAwLCAweDQ5N2E1ODAxLCAweDQ5MmQ5ODA5LAorCTB4ODIxMDI0ODAsIDB4MDAwMDAwMDUsIDB4MDQwMjE3ZjcsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg1OGNjMDAwOSwKKwkweDgwMDI1ZDQwLCAweDA0MDAwN2ZjLCAweDU5MmMyMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZjQsIDB4NDAxMDAwMDAsIDB4MDQwMWY3ZmEsIDB4NThjYzAwMDksCisJMHg0OGNmYzg1NywgMHg4MDAwNmQ0MCwgMHgwNDAwMDAwNSwgMHg1MDM0MDAwMCwKKwkweDQ4MDE5ODA5LCAweDQ5Nzg2ODAwLCAweDQ5Nzg2ODAxLCAweDFjMDFmMDAwLAorCTB4NDgxM2M4NTcsIDB4NThjYzAwMDksIDB4NDgwMDIwMDAsIDB4NDgxMTk4MDksCisJMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwgMHg0ZDJjMDAwMCwgMHg1OGNjMDAwOSwKKwkweDgwMDI1ZDQwLCAweDA0MDAwMDA3LCAweDU5MmMwMDAwLCAweDRjMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZjQsIDB4NWMwMDAwMDAsIDB4MDQwMWY3ZjksCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwgMHg0ZDJjMDAwMCwKKwkweDU4Y2MwMDAyLCAweDgwMDI1ZDQwLCAweDA0MDAwMDA3LCAweDU5MmMwMDAwLAorCTB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZjQsIDB4NWMwMDAwMDAsCisJMHgwNDAxZjdmOSwgMHg0OTc5OTgwMCwgMHg0OTc5OTgwMiwgMHg0OTc5OTgwMSwKKwkweDQ5Nzk5ODAzLCAweDQ5Nzk5ODA2LCAweDQ5Nzk5ODA3LCAweDQ5Nzk5ODA4LAorCTB4NDk3OTk4MDksIDB4NDk3OTk4MGEsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHgwMDAwMDAwMywgMHgwMDAwMDAwNiwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwYywKKwkweDAwMDAwMDBmLCAweDAwMDAwMDEyLCAweDQ4MDNjODU2LCAweDA0MDFmODU3LAorCTB4NGEwMGMyMDQsIDB4MDAwMDAwM2MsIDB4NTkzMDEwMDksIDB4ODIwODA1ODAsCisJMHgwMDEwYjUyNCwgMHgwNDAwMDAxMywgMHg1ODA4MDgwMiwgMHg4MjA0MGQwMCwKKwkweDAwZmZmZmZmLCAweDU4MDgwNDAzLCAweDQ4MDRjMDA1LCAweDQ4MDBjNDA2LAorCTB4NGEwMGMyMDcsIDB4MDAwMDAwMDMsIDB4NTkzMDA4MTEsIDB4NTg1YzA0MDQsCisJMHg0OTc4YzIwNiwgMHg0ODA0YzQwNywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwZCwKKwkweDU4NjAwMjA2LCAweDg0MDAwNTQwLCAweDQ4MDBjMjA2LCAweDA0MDFmMDA5LAorCTB4NTg1YzA4MGEsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4NDgwNGMwMDUsCisJMHg0YTAwYzQwNiwgMHgwMDAwMDdmZiwgMHg0OTc4YzIwNywgMHgwNDAxZjdlZiwKKwkweDgyNjAzYzAwLCAweDAwMDAwMDA4LCAweDU4NjA1NDA0LCAweDQwMjgyMDAwLAorCTB4NDA1YzYwMDAsIDB4NTg1YzBhMDQsIDB4ODIwNDBkMDAsIDB4MDAwMDAwMGYsCisJMHg4MjA0MGMwMCwgMHgwMDEwMTBiZCwgMHg1MDA0NDAwMCwgMHg4MDAwNGQ4MCwKKwkweDUwMjAwMDAwLCAweDgwMzA3NDAwLCAweDU4MzgwNDAyLCAweDhjMjQ0ZDAwLAorCTB4MDQwMjAwMDMsIDB4NDgwMDNhMDAsIDB4MDQwMWYwMDMsIDB4NDgwMDNjMDAsCisJMHg4MDFjMzgwMCwgMHg4MDI0NDgwMCwgMHg4MDEwMjA0MCwgMHgwNDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTAxMDliLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4MDQwMWY3ZjAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzNDAwMDAsCisJMHg1OTMwMDAwOSwgMHg4MDAyNmQ0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU5MzQwNDAxLCAweDgwMDAwNTQwLCAweDA0MDAwMDBlLCAweDU5ODQwMDAwLAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMGIsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAyMDAwOCwgMHg1OTM0MWMwMywgMHg0MjAwMjAwMCwgMHgwMDAwMDAwNCwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTAzYWFlLAorCTB4NWMwMjY4MDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4ODAwMDE1ODAsCisJMHg1OGM4MGMwMSwgMHg1OTMwMDAxMSwgMHg4MDA0MGM4MCwgMHg0ODA2NjAxMSwKKwkweDU4YzgwMjAxLCAweDgwMDAwNTQwLCAweDA0MDAwMDA1LCAweDgwMDgxMDAwLAorCTB4ODAwNDBjODAsIDB4MDQwMDEwMDcsIDB4MDQwMDAwMDYsIDB4NThjODAyMDIsCisJMHg4MDA4MTAwMCwgMHg4MDA0MGM4MCwgMHgwNDAwMTAwMiwgMHgwNDAyMDdmZCwKKwkweDQ4MDhiYzA4LCAweDQ4MDhjNDA0LCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NGEwMzcwZTUsIDB4MDAwMjAwMDAsIDB4NTliODAwZTUsIDB4OGMwMDA1MjQsCisJMHgwNDAyMDdmYywgMHg0YTAzNzBlNSwgMHgwMDAzMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDU5YjgwMGU1LCAweDhjMDAwNTI0LCAweDA0MDIwN2Y1LAorCTB4NTkzNDAwMGUsIDB4ODAwMDZkNDAsIDB4MDQwMDAwMTAsIDB4ODEzMDA1ODAsCisJMHgwNDAyMDAwNCwgMHg1ODM0MDAwMCwgMHg0ODAyNjgwZSwgMHgwNDAxZjAwYSwKKwkweDQwMzQ3ODAwLCAweDU4MzQwMDAwLCAweDgwMDA2ZDQwLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4ODEzMDA1ODAsIDB4MDQwMjA3ZmEsIDB4NTgzNDAwMDAsCisJMHg0ODAwNzgwMCwgMHg0OTdhNjAwMCwgMHg0YTAzNzBlNSwgMHgwMDAyMDAwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLCAweDRkMmMwMDAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAzZmYsIDB4NGEwMzcwZTUsIDB4MDAwMjAwMDAsCisJMHg1OWI4MDBlNSwgMHg4YzAwMDUyNCwgMHgwNDAwMDAwNSwgMHg4MDA0MDg0MCwKKwkweDA0MDIwN2ZhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRhMDM3MGU1LAorCTB4MDAwMzAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NTliODAwZTUsCisJMHg4YzAwMDUyNCwgMHgwNDAyMDdmMSwgMHg1OTM0MDAwZSwgMHg4MDAyNjU0MCwKKwkweDA0MDAwMDBlLCAweDQ5MzNjODU3LCAweDU5MzAwMDAwLCAweDQ4MDI2ODBlLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsIDB4NDk3YTYyMDYsIDB4NDk3YTYwMDksCisJMHg0YTAyNjAwNywgMHgwMDAwMDEwMSwgMHg1OTMyNTgwOCwgMHg0OTdhNWMwOCwKKwkweDA0MDFmZDgxLCAweDA0MDFmN2YxLCAweDRhMDM3MGU1LCAweDAwMDIwMDAwLAorCTB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNWM5YSwgMHgwNDAyMDAxMSwKKwkweDAyMDFmODAwLCAweDAwMTA0NWE2LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4NWMwMDAwMDAsIDB4NDgwMjY4MDIsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCisJMHgwNDAwMDAwOSwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMDIwN2ExLAorCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NywKKwkweDBjMDFmMDAxLCAweDAwMTA2NTAzLCAweDAwMTA2NTAzLCAweDAwMTA2NTAzLAorCTB4MDAxMDY1MDUsIDB4MDAxMDY1NjUsIDB4MDAxMDY1MDMsIDB4MDAxMDY1MDMsCisJMHgwMDEwNjViNywgMHgwMDEwNjViOCwgMHgwMDEwNjUwMywgMHgwMDEwNjUwMywKKwkweDAwMTA2NTAzLCAweDAwMTA2NTAzLCAweDAwMTA2NTAzLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NDkzYmM4NTcsIDB4ODMzODA0ODAsIDB4MDAwMDAwNTAsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0OSwKKwkweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA2NTE4LAorCTB4MDAxMDY1M2EsIDB4MDAxMDY1MTYsIDB4MDAxMDY1MTYsIDB4MDAxMDY1MTYsCisJMHgwMDEwNjUxNiwgMHgwMDEwNjU0OSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDU5MmMwMjA2LCAweDQ4MDI1YzA2LAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsIDB4NGM1YzAwMDAsIDB4NTkyY2JjMGEsCisJMHg1OTJjMDAwMCwgMHg0ODAyNjAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNGNkZSwKKwkweDU5MzAwMDA4LCAweDgwMDAwNTQwLCAweDA0MDAwMDA4LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDcsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDMsIDB4NWMwMGI4MDAsCisJMHg1YzAyNTgwMCwgMHgwNDAxZjA4YSwgMHg4YzVjYmQwOCwgMHgwNDAyMDAwNiwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQ5N2E2MjA2LCAweDQ5N2E2MDA4LAorCTB4MDQwMWYwMDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsIDB4NWMwMGI4MDAsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmI4YSwKKwkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAorCTB4MDQwMDAwMDYsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjhmOCwgMHg1YzAyODAwMCwgMHg1YzAyNTgwMCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzdkLCAweDAyMDFmODAwLCAweDAwMTA2YjhhLCAweDRkM2MwMDAwLAorCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAxNCwgMHgwMjAxZjgwMCwgMHgwMDEwYTk0MiwKKwkweDQyMDAwMDAwLCAweDAwMTBiODY0LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCisJMHgwNDAwMDAwNiwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwKKwkweDA0MDFmOGRjLCAweDVjMDI4MDAwLCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NDkzYmM4NTcsIDB4NDk3YTYyMDYsIDB4ODMzODA0ODAsCisJMHgwMDAwMDA1NCwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MDQ4MCwKKwkweDAwMDAwMDQ3LCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLAorCTB4MDAxMDY1YjYsIDB4MDAxMDY1N2YsIDB4MDAxMDY1N2QsIDB4MDAxMDY1N2QsCisJMHgwMDEwNjU3ZCwgMHgwMDEwNjU3ZCwgMHgwMDEwNjU3ZCwgMHgwMDEwNjU3ZCwKKwkweDAwMTA2NTdkLCAweDAwMTA2NTdkLCAweDAwMTA2NTdkLCAweDAwMTA2NTdkLAorCTB4MDAxMDY1ODMsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMDAwMTEsCisJMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwgMHgwNDAyMDAzNCwgMHg1OTg0MDgwMiwKKwkweDhjMDQwZDA0LCAweDA0MDAwMDI1LCAweDU5MzAwMDA5LCAweDgwMDI2ZDQwLAorCTB4MDQwMDAwMWYsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsIDB4NDk3YTYyMDYsCisJMHg1OTMwYjgwOCwgMHg1ODVjMDAwNSwgMHg4MDAwYzU0MCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDA0MDFmZThkLCAweDQwNjI1ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDRjZGUsIDB4NDk3OGI4MDUsIDB4MDQwMWZlZjUsIDB4NDk3YTYwMDksCisJMHg1ODVjMzQwOCwgMHgwNDAxZmNiZCwgMHgwNDAwMDAwZSwgMHg0MjAwMTAwMCwKKwkweDAwMTBiNTE5LCAweDA0MDFmY2YyLCAweDA0MDAwMDBhLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZTQsIDB4MDQwMDAwMDcsIDB4NDkyY2I4MDUsIDB4NTg1YzU0MDgsCisJMHgwNDAxZmM4MywgMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwKKwkweDA0MDFmY2E5LCAweDA0MDFmN2ZjLCAweDhjMDQwZDA2LCAweDA0MDIwN2ZjLAorCTB4NTkzMDAwMDksIDB4ODAwMjZkNDAsIDB4MDQwMDAwMDYsIDB4NTkzNDAwMGUsCisJMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0OTdhNjAwOSwKKwkweDA0MDFmZDBkLCAweDA0MDFmN2YyLCAweDA0MDFmMDZmLCAweDQ4MDNjODU2LAorCTB4NDgwM2M4NTYsIDB4ODMzODA1ODAsIDB4MDAwMDAwNDMsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDVkOCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywgMHg0OTNhNjQwMywKKwkweDU5MzI1ODA4LCAweDU5MmMwMDBmLCAweDQ4MDI2MDExLCAweDQ5N2E2MDEzLAorCTB4NTkyYzA0MDYsIDB4ODAwMDAwYzIsIDB4ODAwMDEwYzQsIDB4ODAwODE0MDAsCisJMHg0ODBhNjIwNiwgMHgwMjAxZjgwMCwgMHgwMDEwMGY0ZSwgMHg0MjAwMDgwMCwKKwkweDgwMDAwMDYwLCAweDA0MDFmMTU0LCAweDQyMDAwMDAwLCAweDAwMTBiODc1LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NywKKwkweDgyMDAwZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA2LCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDQsIDB4MDQwMDAwNDUsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwKKwkweDA0MDIwMDA3LCAweDAyMDFmODAwLCAweDAwMTA2YjZjLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4MDIwMWYwMDAsIDB4MDAxMDZjNGIsIDB4MDQwMWY5YzMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHg1OTMyNTgwOCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDA2LCAweDA0MDFmODRiLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4NDgwM2M4NTYsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMywKKwkweDA0MDAwMDA2LCAweDgyMDAwZDgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDIzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwKKwkweDA0MDIwMDA2LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4MDQwMWYwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDhjZDYsCisJMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmU2MiwgMHgwNDAyMDAwYSwKKwkweDA0MDFmOTlhLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDVjMDNlMDAwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwKKwkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDBlOTksIDB4NDkzM2M4NTcsIDB4NGM1YzAwMDAsIDB4NGQzNDAwMDAsCisJMHg0OTdhNjIwNiwgMHg1OTMwYjgwOCwgMHg1OTMwMDAwOSwgMHg4MDAyNmQ0MCwKKwkweDA0MDIwZTVmLCAweDQyMDAxMDAwLCAweDAwMTBiNTE5LCAweDA0MDFmYzYwLAorCTB4MDQwMDAwMDksIDB4NThjODAyMDQsIDB4NDgwMGJjMDgsIDB4NDE3ODUwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjIyNywgMHg1YzAyNjgwMCwgMHg1YzAwYjgwMCwKKwkweDFjMDFmMDAwLCAweDQ5NzhiYzA4LCAweDA0MDFmYzE3LCAweDA0MDFmN2ZiLAorCTB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMGYsCisJMHg1OTJjMDAwMCwgMHg4MDAwMGQ0MCwgMHgwNDAwMDAwOSwgMHg0OTdhNTgwMCwKKwkweDQ5NDI1YTA2LCAweDRjMDQwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAorCTB4NWMwMDA4MDAsIDB4NDAwNjU4MDAsIDB4MDQwMWY3ZjYsIDB4NDk0MjVhMDYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDBlLCAweDA0MDAwMDA0LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMjAwMDQsIDB4MDQwMWZmZTUsCisJMHg0OTdhNjAwOCwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg1OTJlNjAwOSwKKwkweDgzMzAwNDgwLCAweDAwMTBkMWMwLCAweDA0MDAxMDE2LCAweDQxNTgwMDAwLAorCTB4ODEzMDA0ODAsIDB4MDQwMjEwMTMsIDB4NDAwNDAwMDAsIDB4NTkzMDBjMDYsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDAxMiwgMHg1OTMwMGEwMywgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDA3LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU5MzAwMDA4LAorCTB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc3ZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjAwOSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDA4LCAweDA0MDFmMDA2LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDcsIDB4MDQwMjA3ZmIsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDUsCisJMHg1OTJjMGEwNiwgMHg0ODA2NWMwNiwgMHg0ODAyNWEwNiwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMmRhLCAweDRjMGMwMDAwLCAweDRjMTAwMDAwLCAweDRjMTQwMDAwLAorCTB4NGMxODAwMDAsIDB4ODAwMDFkODAsIDB4ODAwMDI1ODAsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAyMCwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwMSwgMHgwNDAwMDAwMywKKwkweDQwMDgwMDAwLCAweDgwMGMxYzAwLCAweDQwMGMyODAwLCAweDgwMGMxOTAyLAorCTB4ODAxMDIxMDIsIDB4ODIxNDA1MDAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDMsCisJMHg4MjEwMjU0MCwgMHg4MDAwMDAwMCwgMHg4MDA0MDkwMiwgMHg4MDE4MzA0MCwKKwkweDA0MDIwN2YxLCAweDQwMTAwODAwLCAweDQwMGMwMDAwLCAweDVjMDAzMDAwLAorCTB4NWMwMDI4MDAsIDB4NWMwMDIwMDAsIDB4NWMwMDE4MDAsIDB4MWMwMWYwMDAsCisJMHg0YzU4MDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg4MDAwMDU0MCwKKwkweDA0MDAwMDE4LCAweDgwMDQxYzgwLCAweDA0MDIxMDE2LCAweDgwMDgxMGMyLAorCTB4ODAwNDA5ODIsIDB4MDQwMDEwMDYsIDB4ODAwNDFjODAsIDB4MDQwMjEwMDUsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmYSwgMHgwNDAxZjAwNiwgMHg4MDA0MWM4MCwKKwkweDQwMGMwODAwLCAweDgwMDgxMDAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y0LAorCTB4NGMwMDAwMDAsIDB4NDFmMDAwMDAsIDB4ODIwMDA1MDAsIDB4ZjdmZmZmZmYsCisJMHg0MDAzZTAwMCwgMHg1YzAwMDAwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKKwkweDRjMDAwMDAwLCAweDQxZjAwMDAwLCAweDgyMDAwNTQwLCAweDA4MDAwMDAwLAorCTB4MDQwMWY3ZjgsIDB4NGEwMzc4ZTgsIDB4MDAwMDAwMDAsIDB4NGEwM2M4MjEsCisJMHgwMDAwMDAxMCwgMHg0YTAzYzgyMywgMHgwMDAwMDAwNCwgMHgwNDAxZjgyYywKKwkweDRhMDM3OGU5LCAweDAwMDAzYTBkLCAweDRhMDM3OGU4LCAweDAwMDAwMDAxLAorCTB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsIDB4NTAwMDAwMDAsIDB4ODIwMDA0ODAsCisJMHgyNDIyMDAwMSwgMHgwNDAwMDAwNCwgMHg1OWUwMDAwMiwgMHg4NDAwMDU0OCwKKwkweDQ4MDNjMDAyLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDQyMDNhMDAwLAorCTB4MDAwMDc2MDAsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsIDB4NTAwMDAwMDAsCisJMHg4MjAwMDQ4MCwgMHgyNDMyMDAwMSwgMHgwNDAyMTAwMywgMHg0YTAzYTAwNSwKKwkweGQwMDAwMDAxLCAweDU5ZDAwMDA2LCAweDRhMDNhMDA1LCAweDkwMDAwMDAxLAorCTB4ODNkM2E0MDAsIDB4MDAwMDAwMjAsIDB4ODAwNDA4NDAsIDB4MDQwMjA3ZmEsCisJMHg1OWUwMDAwMywgMHg4MjAwMDUwMCwgMHhmZmZmZmZlMCwgMHg4MjAwMDU0MCwKKwkweDAwMDA4MDAwLCAweDQ4MDNjMDAzLCAweDU5YzQwMDA2LCAweDgyMDAwNTAwLAorCTB4ZmZmY2ZmZmYsIDB4NDgwMzg4MDYsIDB4MWMwMWYwMDAsIDB4NGQ5MDAwMDAsCisJMHg0ZDE4MDAwMCwgMHg0YTAzNzhlNywgMHhhYWFhYWFhYSwgMHg0YTAzNzhlNiwKKwkweGFhYWFhYWFhLCAweDRhMDM3OGU1LCAweGFhYWFhYWFhLCAweDRhMDM3OGU0LAorCTB4YWFhYWFhYWEsIDB4NDIwMDA4MDAsIDB4MDAwMGJmMDAsIDB4NGEwMDA4MWEsCisJMHgwMDEwYjdkNCwgMHg0YTAwMDgxYiwgMHgwMDEwMTBiZCwgMHg0YTAwMDgxYywKKwkweDAwMTAxMGNkLCAweDRhMDMxODAwLCAweDAwMDAwMDAwLCAweDRhMDMxODAxLAorCTB4MDAxMGI1NDQsIDB4NGEwMzE4MDIsIDB4MDAxMGI1NGIsIDB4NDIwMDA4MDAsCisJMHgwMDEwYjdkNywgMHg0MTdhMzAwMCwgMHg4MTFiMjBjOCwgMHg4MzkzMjQwMCwKKwkweDAwMDBiZjMyLCAweDQ4MDcyMDAwLCAweDRhMDMyMDAxLCAweDAwMDAwMDAwLAorCTB4ODMxODA0MDAsIDB4MDAxMDcwZWEsIDB4NTAwMDAwMDAsIDB4NDgwMzIwMDIsCisJMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywgMHg4MTFhMzAwMCwgMHg4MzE4MDQ4MCwKKwkweDAwMDAwMDA1LCAweDA0MDAxN2YxLCAweDVjMDIzMDAwLCAweDVjMDMyMDAwLAorCTB4MWMwMWYwMDAsIDB4NDgwNjYwMDQsIDB4NDk3YTYwMDAsIDB4NDk3YTYwMDEsCisJMHg1OWJjMDBlYSwgMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwgMHg4MzMwMDQwMCwKKwkweGEwMDAwMDAwLCAweDQ4MDM3OGUxLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4NDgwNjYwMDQsIDB4NDk3YTYwMDAsCisJMHg1OWJjMDBlYSwgMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwgMHg4MzMwMDQwMCwKKwkweDYwMDAwMDAwLCAweDQ4MDM3OGUxLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsIDB4NGQzMDAwMDAsIDB4NGQzNDAwMDAsCisJMHg0ZDJjMDAwMCwgMHg0ZDE4MDAwMCwgMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwKKwkweDRkOTAwMDAwLCAweDRkZDAwMDAwLCAweDRkYTQwMDAwLCAweDRkMTQwMDAwLAorCTB4NDIwMDMwMDAsIDB4MDAwMGJmMmUsIDB4NTgxYTYwMDEsIDB4ODEzMjYxYzAsCisJMHgwNDAwMDAyYywgMHg0MTMwMjgwMCwgMHg0MTc4YzAwMCwgMHg1OTMwMDAwMCwKKwkweDRjMDAwMDAwLCAweDU5MzI2ODA5LCAweDU5MzBiODAxLCAweDU5MzAwNDA2LAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDYsIDB4MDQwMjAwMDMsIDB4OGQzZTdkMTgsCisJMHgwNDAwMDAxMCwgMHg4ZDNlN2QwNiwgMHgwNDAwMDAwNywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDIwMDA0LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAorCTB4MDQwMjAwMDgsIDB4MDQwMWY5MmYsIDB4NGMwYzAwMDAsIDB4NGMxNDAwMDAsCisJMHgwNDAxZmI1ZiwgMHg1YzAwMjgwMCwgMHg1YzAwMTgwMCwgMHgwNDAxZjAwNSwKKwkweDQxMzAxODAwLCAweDgwNjBjMWMwLCAweDA0MDIwMDAyLCAweDQwMGNjMDAwLAorCTB4ODA1Y2I5YzAsIDB4MDQwMDAwMDMsIDB4NDA1ZTYwMDAsIDB4MDQwMWY3ZTMsCisJMHg1YzAyNjAwMCwgMHg4MTMyNjFjMCwgMHgwNDAwMDAwNiwgMHg4MDYwYzFjMCwKKwkweDA0MDAwMDAyLCAweDQwNjAyODAwLCAweDQxNzhjMDAwLCAweDA0MDFmN2Q4LAorCTB4NDE3YTMwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDcwZDgsIDB4NTk5MjYwMDQsCisJMHg4MTMyNjFjMCwgMHgwNDAwMDAyMywgMHg1OTMyNjgwOSwgMHg0MTMwYzAwMCwKKwkweDU5MzAwMDAxLCAweDgwMDBiZDQwLCAweDA0MDAwMDE2LCAweDQwMDI2MDAwLAorCTB4NDA2MDI4MDAsIDB4NTkzMGI4MDEsIDB4NTkzMDA0MDYsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAwNiwgMHgwNDAwMDAwZSwgMHg4ZDNlN2QwNiwgMHgwNDAwMDAwNywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwMDA0LCAweDU5MzQwMjAwLAorCTB4OGMwMDA1MGUsIDB4MDQwMjAwMDYsIDB4MDQwMWY4ZGMsIDB4NGMxNDAwMDAsCisJMHgwNDAxZmIyZiwgMHg1YzAwMjgwMCwgMHgwNDAxZjAwMiwgMHg0MTMwMjgwMCwKKwkweDQwNWU2MDAwLCAweDgxMzI2MWMwLCAweDA0MDIwN2ViLCAweDgwNjBjMWMwLAorCTB4MDQwMDAwMDQsIDB4NDA2MjYwMDAsIDB4NDE3OGMwMDAsIDB4MDQwMWY3ZTcsCisJMHg4MTFhMzAwMCwgMHg4MzE4MDQ4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMTdkNiwKKwkweDVjMDIyODAwLCAweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLAorCTB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsIDB4NWMwMjMwMDAsIDB4NWMwMjU4MDAsCisJMHg1YzAyNjgwMCwgMHg1YzAyNjAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwKKwkweDAwMTA2YzRiLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsIDB4NGQzNDAwMDAsIDB4NGQxODAwMDAsCisJMHg0ZDkwMDAwMCwgMHg0MjAwMzAwMCwgMHgwMDAwYmYyZSwgMHg1OTMyNjgwOSwKKwkweDU4MTgyMDAxLCAweDQwMTAyODAwLCAweDgwMTAyMWMwLCAweDA0MDAwMDE2LAorCTB4NDEzMDAwMDAsIDB4ODAxMDA1ODAsIDB4MDQwMDAwMTEsIDB4NTgxMDAwMDksCisJMHg4MTM0MDU4MCwgMHgwNDAyMDAwYiwgMHg0MDEwMTgwMCwgMHg1ODEwMjAwMSwKKwkweDQxMzAwMDAwLCAweDgwMTAyMWMwLCAweDA0MDAwMDBiLCAweDgwMTAwZDgwLAorCTB4MDQwMDAwMDcsIDB4NDAxMDE4MDAsIDB4NTgxMDIwMDEsIDB4MDQwMWY3ZmEsCisJMHg0MDEwMjgwMCwgMHg1ODEwMjAwMCwgMHgwNDAxZjdlYywgMHgwNDAxZjhiZCwKKwkweDA0MDFmMDFhLCAweDQyMDMyMDAwLCAweDAwMDBiZjMyLCAweDQxN2EzMDAwLAorCTB4NTk5MDIwMDQsIDB4NDAxMDI4MDAsIDB4ODAxMDIxYzAsIDB4MDQwMDAwMGIsCisJMHg1ODEwMDAwOSwgMHg4MTM0MDU4MCwgMHgwNDAyMDAwOCwgMHg0MTMwMDAwMCwKKwkweDgwMTAwNTgwLCAweDA0MDAwMDBjLCAweDQwMTAyODAwLCAweDU4MTAyMDAxLAorCTB4ODAxMDIxYzAsIDB4MDQwMjA3ZmEsIDB4ODExYTMwMDAsIDB4ODMxODA0ODAsCisJMHgwMDAwMDAwNSwgMHgwNDAyMTAwZCwgMHg4MzkzMjQwMCwgMHgwMDAwMDAxMCwKKwkweDA0MDFmN2VjLCAweDA0MDFmODgxLCAweDVjMDMyMDAwLCAweDVjMDIzMDAwLAorCTB4NWMwMjY4MDAsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsCisJMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHgwNDAxZmI2ZiwgMHgwNDAwMDdmNywKKwkweDVjMDMyMDAwLCAweDVjMDIzMDAwLCAweDVjMDI2ODAwLCAweDVjMDNlMDAwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwKKwkweDRkMzAwMDAwLCAweDRkMzQwMDAwLCAweDRkMTgwMDAwLCAweDRkMmMwMDAwLAorCTB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsCisJMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwgMHg0MjAwMzAwMCwgMHgwMDAwYmYyZSwKKwkweDU4MWE2MDAxLCAweDgxMzI2MWMwLCAweDA0MDAwMDIzLCAweDQxMzAyODAwLAorCTB4NTkzMGI4MDAsIDB4NTkzMjY4MDksIDB4NTkzNDA0MDMsIDB4ODE0NDA1ODAsCisJMHgwNDAwMDAwNiwgMHg4MDVjYjljMCwgMHgwNDAwMDAxYiwgMHg0MTMwMjgwMCwKKwkweDQwNWU2MDAwLCAweDA0MDFmN2Y3LCAweDU5MzBiODAxLCAweDhkM2U3ZDAwLAorCTB4MDQwMDAwMDMsIDB4MDQwMWZiNjcsIDB4MDQwMjAwMGUsIDB4NTkzMDA0MDYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAyMDAwMywgMHg4ZDNlN2QxOCwKKwkweDA0MDAwMDA4LCAweDA0MDFmODY3LCAweDRjMGMwMDAwLCAweDRjMTQwMDAwLAorCTB4MDQwMWZhOTcsIDB4NWMwMDI4MDAsIDB4NWMwMDE4MDAsIDB4MDQwMWYwMDIsCisJMHg0MTMwMTgwMCwgMHg0MDVlNjAwMCwgMHg4MTMyNjFjMCwgMHgwNDAyMDdlYiwKKwkweDA0MDFmMDJkLCAweDQxN2EzMDAwLCAweDAyMDFmODAwLCAweDAwMTA3MGQ4LAorCTB4NTk5MjYwMDQsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMDUsIDB4NTkzMjY4MDksCisJMHg1OTM0MDQwMywgMHg4MTQ0MDU4MCwgMHgwNDAwMDAwNiwgMHg4MTFhMzAwMCwKKwkweDgzMTgwNDgwLCAweDAwMDAwMDA1LCAweDA0MDAxN2Y0LCAweDA0MDFmMDFlLAorCTB4NDEzMGMwMDAsIDB4NTkzMDAwMDEsIDB4ODAwMGJkNDAsIDB4MDQwMDAwMTIsCisJMHg0MDAyNjAwMCwgMHg0MDYwMjgwMCwgMHg1OTMwYjgwMSwgMHg4ZDNlN2QwMCwKKwkweDA0MDAwMDAzLCAweDA0MDFmYjNiLCAweDA0MDIwMDBhLCAweDU5MzAwNDA2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDYsIDB4MDQwMDAwMDYsIDB4MDQwMWY4MWIsCisJMHg0YzE0MDAwMCwgMHgwNDAxZmE2ZSwgMHg1YzAwMjgwMCwgMHgwNDAxZjAwMiwKKwkweDQxMzAyODAwLCAweDQwNWU2MDAwLCAweDgxMzI2MWMwLCAweDA0MDIwN2VmLAorCTB4ODA2MGMxYzAsIDB4MDQwMDAwMDQsIDB4NDA2MjYwMDAsIDB4NDE3OGMwMDAsCisJMHgwNDAxZjdlYiwgMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwKKwkweDVjMDMyMDAwLCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDVjMDI1ODAwLAorCTB4NWMwMjMwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjYwMDAsIDB4NWMwM2UwMDAsCisJMHgwNDAwMGJlMywgMHgxYzAxZjAwMCwgMHgwNDAxZmJjOCwgMHg1OTkwMDAwNCwKKwkweDgxMzAwNTgwLCAweDA0MDIwMDE4LCAweDRjMTQwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDZkYzMsIDB4MDQwMWZiYjgsIDB4NWMwMDI4MDAsIDB4NTkzMDAwMDEsCisJMHg4MDAwMDFjMCwgMHgwNDAyMDAwMywgMHg0OTdhNjgwYywgMHgxYzAxZjAwMCwKKwkweDQyMDAzMDAwLCAweDAwMDBiZjJlLCAweDQ5N2E2MDAxLCAweDU4MTgwODAxLAorCTB4ODAwNDA5YzAsIDB4MDQwMjAwMDQsIDB4NDgwMDMwMDAsIDB4NDgwMDMwMDEsCisJMHgxYzAxZjAwMCwgMHg1ODE4MDgwMCwgMHg0ODAwMDgwMCwgMHg0ODAwMzAwMCwKKwkweDFjMDFmMDAwLCAweDU5MzAwMDAxLCAweDQ4MDAyODAxLCAweDgwMDAwMWMwLAorCTB4MDQwMjAwMDIsIDB4NDgxNjY4MGMsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsCisJMHgwNDAxZmJhNiwgMHg0MjAwMzAwMCwgMHgwMDAwYmYyZSwgMHg1ODE4MDAwMSwKKwkweDgxMzAwNTgwLCAweDA0MDIwMDFjLCAweDU5MzAwODAxLCAweDgwMDQwOWMwLAorCTB4MDQwMDAwMGUsIDB4NTkzMDAwMDAsIDB4ODAwMDAxYzAsIDB4MDQwMjAwMDUsCisJMHg0ODA0MzAwMSwgMHg0ODA0MzAwMCwgMHg0OTdhNjAwMSwgMHgxYzAxZjAwMCwKKwkweDU5MzAwMDAwLCAweDQ4MDAwODAwLCAweDQ4MDQzMDAxLCAweDQ5N2E2MDAwLAorCTB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDAsIDB4ODAwNDA5YzAsCisJMHgwNDAyMDAwNSwgMHg0OTc4MzAwMSwgMHg0OTc4MzAwMCwgMHg0OTdhNjgwYywKKwkweDFjMDFmMDAwLCAweDQ4MDQzMDAxLCAweDQ5N2E2MDAwLCAweDQ5N2E2ODBjLAorCTB4MWMwMWYwMDAsIDB4NTgxODAwMDAsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMGMsCisJMHg1OTMwMDAwMSwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwNSwgMHg0ODE0MzAwMCwKKwkweDQ5NzgyODAwLCAweDQ5N2E2ODBjLCAweDFjMDFmMDAwLCAweDQ4MDAzMDAwLAorCTB4NDgwMDI4MDAsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMDAsCisJMHg4MDAwMDFjMCwgMHgwNDAyMDAwOCwgMHg1OTMwMDAwMSwgMHg0ODAwMTgwMSwKKwkweDgwMDAwMWMwLCAweDA0MDIwMDAyLCAweDQ4MGU2ODBjLCAweDQ5N2E2MDAxLAorCTB4MWMwMWYwMDAsIDB4NTkzMDA4MDEsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMDYsCisJMHg1OTMwMDgwMCwgMHg0ODA0MjgwMCwgMHg0OTdhNjAwMCwgMHg0OTdhNjgwYywKKwkweDFjMDFmMDAwLCAweDU5MzAwMDAwLCAweDQ4MDAwODAwLCAweDQ4MDQyODAwLAorCTB4NDk3YTYwMDAsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsIDB4MDQwMWZiODIsCisJMHg0ZGYwMDAwMCwgMHgwNDAxZjgzOSwgMHgwNDAyMDhjNCwgMHgwNDAyMDk0NSwKKwkweDA0MDIwYTg5LCAweDA0MDIwMDA1LCAweDVjMDNlMDAwLCAweDA0MDAwYjcwLAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NWMwM2UwMDAsIDB4MDQwMDBiNmMsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwKKwkweDRkMzQwMDAwLCAweDRkMzAwMDAwLCAweDQxNzgzMDAwLCAweDU5OGU2MDA5LAorCTB4ODEzMjYxYzAsIDB4MDQwMDAwMjEsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwNiwgMHgwNDAyMDAwNCwgMHg4ZDNlN2QxOCwgMHgwNDAyMDAwYSwKKwkweDA0MDFmMDE3LCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDA2LAorCTB4OGQzZTdkMTYsIDB4MDQwMDAwMDQsIDB4NTkzMDA0MjAsIDB4OGMwMDA1MDAsCisJMHgwNDAyMDAwZiwgMHgwNDAxZmE0ZSwgMHg1OTMwMDAwMCwgMHg0YzAwMDAwMCwKKwkweDhkM2U3ZDA2LCAweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA5MmQ3LAorCTB4MDQwMDAwMDUsIDB4MDQwMWY4NjcsIDB4NGMxODAwMDAsIDB4MDQwMWY5YmMsCisJMHg1YzAwMzAwMCwgMHg1YzAyNjAwMCwgMHgwNDAxZjdlMiwgMHg0MTMwMzAwMCwKKwkweDU5MzI2MDAwLCAweDA0MDFmN2RmLCAweDVjMDI2MDAwLCAweDVjMDI2ODAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGM1YzAwMDAsCisJMHg4MTMyNjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0MTMwMDAwMCwKKwkweDU5OGNiODA5LCAweDQxNzgzMDAwLCAweDgwNWNiOWMwLCAweDA0MDAwMDEzLAorCTB4ODA1YzBkODAsIDB4MDQwMDAwMDQsIDB4NDA1YzMwMDAsIDB4NTgxOGI4MDAsCisJMHgwNDAxZjdmYSwgMHgwNDAxZjg0YiwgMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwKKwkweDAyMDAwODAwLCAweDAwMTA3MGI5LCAweDU5MzAwNDAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwNDIsIDB4MDQwMjAwMDIsIDB4NDk3YTYwMDcsIDB4ODAwMDA1ODAsCisJMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDA0MDFmYjI3LCAweDRkZjAwMDAwLAorCTB4NGQyYzAwMDAsIDB4NGQzNDAwMDAsIDB4NGQzMDAwMDAsIDB4NDE3ODMwMDAsCisJMHg1OThlNjAwOSwgMHg4MTMyNjFjMCwgMHgwNDAwMDAyYywgMHg1OTMwMGMwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDA0MDIwMDA0LCAweDhkM2U3ZDE4LAorCTB4MDQwMjAwMGEsIDB4MDQwMWYwMjIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsCisJMHgwNDAyMDAwNiwgMHg4ZDNlN2QxOCwgMHgwNDAwMDAwNCwgMHg1OTMwMDQyMCwKKwkweDhjMDAwNTAwLCAweDA0MDIwMDFhLCAweDU5MzI2ODA5LCAweDU5MzQwNDAzLAorCTB4ODE0NDA1ODAsIDB4MDQwMjAwMTYsIDB4OGQzZTdkMDAsIDB4MDQwMDAwMDYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAxMSwgMHgwNDAxZmEzNSwKKwkweDA0MDIwMDBmLCAweDA0MDFmOWY2LCAweDU5MzAwMDAwLCAweDRjMDAwMDAwLAorCTB4OGQzZTdkMDYsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDkyZDcsCisJMHgwNDAwMDAwNSwgMHgwNDAxZjgwZiwgMHg0YzE4MDAwMCwgMHgwNDAxZjk2NCwKKwkweDVjMDAzMDAwLCAweDVjMDI2MDAwLCAweDA0MDFmN2Q3LCAweDQxMzAzMDAwLAorCTB4NTkzMjYwMDAsIDB4MDQwMWY3ZDQsIDB4NWMwMjYwMDAsIDB4NWMwMjY4MDAsCisJMHg1YzAyNTgwMCwgMHg1YzAzZTAwMCwgMHgwNDAwMGFlNSwgMHgxYzAxZjAwMCwKKwkweDU5MzAwODAwLCAweDQ5N2E2MDAwLCAweDA0MDFmYWM4LCAweDgwMTgzMWMwLAorCTB4MDQwMjAwMDksIDB4NTk4YzAwMDgsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsCisJMHg0ODAzMTgwOCwgMHg0ODAzMTgwOSwgMHgwNDAxZjAwOCwgMHg0ODA3MTgwOSwKKwkweDA0MDFmMDA2LCAweDQ4MDQzMDAwLCAweDU5OGMwMDA4LCAweDgxMzAwNTgwLAorCTB4MDQwMjAwMDIsIDB4NDgxYjE4MDgsIDB4MDQwMWYyY2EsIDB4NGQyYzAwMDAsCisJMHg0ZDMwMDAwMCwgMHg0ZDM0MDAwMCwgMHg0MTc4MzAwMCwgMHg1OThlNjAwYiwKKwkweDgxMzI2MWMwLCAweDA0MDAwMDEzLCAweDhkM2U3ZDA2LCAweDA0MDAwMDA1LAorCTB4NTkzMjY4MDksIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsIDB4MDQwMjAwMGEsCisJMHgwNDAxZjliZiwgMHg1OTMwMDAwMCwgMHg0YzAwMDAwMCwgMHgwNDAxZjg1MywKKwkweDRjMTgwMDAwLCAweDA0MDFmOTMyLCAweDVjMDAzMDAwLCAweDVjMDI2MDAwLAorCTB4MDQwMWY3ZjAsIDB4NDEzMDMwMDAsIDB4NTkzMjYwMDAsIDB4MDQwMWY3ZWQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDc3MywgMHg1YzAyNjgwMCwgMHg1YzAyNjAwMCwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNWMwMDAwLAorCTB4ODEzMjYxYzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDEzMDAwMDAsCisJMHg1OThjYjgwYiwgMHg0MTc4MzAwMCwgMHg4MDVjYjljMCwgMHgwNDAwMDAwZiwKKwkweDgwNWMwZDgwLCAweDA0MDAwMDA0LCAweDQwNWMzMDAwLCAweDU4MThiODAwLAorCTB4MDQwMWY3ZmEsIDB4MDQwMWY4MzUsIDB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNzBiOSwgMHg0OTdhNjAwNywgMHg4MDAwMDU4MCwKKwkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4MDQwMWZhOWYsIDB4NGRmMDAwMDAsCisJMHg0ZDM0MDAwMCwgMHg0ZDMwMDAwMCwgMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMjQ1LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDQxNzgzMDAwLAorCTB4NTk4ZTYwMGIsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMTQsIDB4NTkzMDAwMDksCisJMHg4MTM0MDU4MCwgMHgwNDAyMDAwZSwgMHg4ZDNlN2QwMCwgMHgwNDAwMDAwMywKKwkweDA0MDFmOWJjLCAweDA0MDIwMDBhLCAweDA0MDFmOTdkLCAweDU5MzAwMDAwLAorCTB4NGMwMDAwMDAsIDB4MDQwMWY4MTEsIDB4NGMxODAwMDAsIDB4MDQwMWY4ZjAsCisJMHg1YzAwMzAwMCwgMHg1YzAyNjAwMCwgMHgwNDAxZjdlZiwgMHg0MTMwMzAwMCwKKwkweDU5MzI2MDAwLCAweDA0MDFmN2VjLCAweDAyMDFmODAwLCAweDAwMTA0NzljLAorCTB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsIDB4NWMwMjY4MDAsIDB4NWMwM2UwMDAsCisJMHgwNDAwMGE2ZiwgMHgxYzAxZjAwMCwgMHg1OTMwMDgwMCwgMHg0OTdhNjAwMCwKKwkweDA0MDFmYTUyLCAweDgwMTgzMWMwLCAweDA0MDIwMDA5LCAweDU5OGMwMDBhLAorCTB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsIDB4NDgwMzE4MGEsIDB4NDgwMzE4MGIsCisJMHgwNDAxZjAwOCwgMHg0ODA3MTgwYiwgMHgwNDAxZjAwNiwgMHg0ODA0MzAwMCwKKwkweDU5OGMwMDBhLCAweDgxMzAwNTgwLCAweDA0MDIwMDAyLCAweDQ4MWIxODBhLAorCTB4MDQwMWYyNTQsIDB4MDQwMWZhNjQsIDB4NGRmMDAwMDAsIDB4NGQzMDAwMDAsCisJMHg1OThlNjAwNSwgMHg4MTMyNjFjMCwgMHgwNDAwMDAyMCwgMHg1OTMwMDAwMCwKKwkweDRjMDAwMDAwLCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDExLAorCTB4MDQwMjAwMDcsIDB4ODMzYzA1MDAsIDB4MDAwMDE4MDAsIDB4MDQwMDAwMTUsCisJMHg4ZDNlN2QxNiwgMHgwNDAyMDAxMywgMHgwNDAxZjAwOSwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDA0LCAweDA0MDIwMDA2LCAweDhkM2U3ZDE2LCAweDA0MDAwMDA0LAorCTB4NTkzMDA0MjAsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTE0ZSwgMHgwMjAwMDgwMCwgMHgwMDEwODAxYywgMHgwMjAxZjgwMCwKKwkweDAwMTA5MzI2LCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDA0MDFmYTMxLAorCTB4NWMwMjYwMDAsIDB4MDQwMWY3ZTAsIDB4NDk3YjE4MDUsIDB4NDk3YjE4MDQsCisJMHg1YzAyNjAwMCwgMHg1YzAzZTAwMCwgMHgwNDAwMGEzMSwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDRjNWMwMDAwLCAweDRjNjAwMDAwLCAweDgxMzI2MWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDEzMDAwMDAsIDB4NTk4Y2I4MDUsCisJMHg0MDVjYzAwMCwgMHg4MDVjYjljMCwgMHgwNDAwMDAyNSwgMHg4MDVjMGQ4MCwKKwkweDA0MDAwMDA0LCAweDQwNWNjMDAwLCAweDU4NjBiODAwLCAweDA0MDFmN2ZhLAorCTB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDIwMDA4MDAsIDB4MDAxMDcwYjksCisJMHgwNDAxZmEwMiwgMHg1OThjMDAwNSwgMHg4MDVjMDU4MCwgMHgwNDAyMDAwOSwKKwkweDU4NWMwMDAwLCAweDQ4MDMxODA1LCAweDQ5NzhiODAwLCAweDU5OGMwMDA0LAorCTB4ODA1YzA1ODAsIDB4MDQwMjAwMGQsIDB4NDk3YjE4MDQsIDB4MDQwMWYwMGIsCisJMHg1OThjMDAwNCwgMHg4MDVjMDU4MCwgMHgwNDAyMDAwNSwgMHg0ODYzMTgwNCwKKwkweDQ5NzhiODAwLCAweDQ5NzhjMDAwLCAweDA0MDFmMDA0LCAweDU4NWMwMDAwLAorCTB4NDgwMGMwMDAsIDB4NDk3OGI4MDAsIDB4MDQwMWY5ZmUsIDB4ODAwMDA1ODAsCisJMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4MDQwMWZhMDQsIDB4NGRmMDAwMDAsIDB4NGQyYzAwMDAsCisJMHg0ZDM0MDAwMCwgMHg0ZDMwMDAwMCwgMHg0YzVjMDAwMCwgMHg0MTc4YjgwMCwKKwkweDhkM2U3ZDE4LCAweDA0MDAwMDBkLCAweDhkM2U3ZDE2LCAweDA0MDIwMDBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTU5NywgMHgwNDAyMDAwNSwgMHg1OTJjMDIwNywgMHg0OTJmYzg1NywKKwkweDgyMDBiZDAwLCAweDAwMDAwMDBmLCAweDQxNzgzMDAwLCAweDU5OGU2MDA1LAorCTB4ODEzMjYxYzAsIDB4MDQwMDAwMjksIDB4NTkzMjY4MDksIDB4ODEzNjY5YzAsCisJMHgwNDAwMDAyMywgMHg1OTM0MDQwMywgMHg4MTQ0MDU4MCwgMHgwNDAyMDAyMCwKKwkweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDExLCAweDA0MDAwMDFhLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMDQsIDB4NTkzMDA0MjAsCisJMHg4YzAwMDUwMCwgMHgwNDAyMDAxNiwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywKKwkweDA0MDAwMDA4LCAweDAyMDFmODAwLCAweDAwMTA5NTk3LCAweDA0MDIwMDA1LAorCTB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDMsIDB4MDQwMDAwMGMsCisJMHgwNDAxZjhjMywgMHg1OTMwMDAwMCwgMHg0YzAwMDAwMCwgMHgwNDAxZjgxMiwKKwkweDRjMTgwMDAwLCAweDA0MDFmODM2LCAweDVjMDAzMDAwLCAweDVjMDI2MDAwLAorCTB4MDQwMWY3ZGMsIDB4ODA1Y2I5YzAsIDB4MDQwMjA3ZWMsIDB4NDEzMDMwMDAsCisJMHg1OTMyNjAwMCwgMHgwNDAxZjdkNywgMHg1YzAwYjgwMCwgMHg1YzAyNjAwMCwKKwkweDVjMDI2ODAwLCAweDVjMDI1ODAwLCAweDVjMDNlMDAwLCAweDA0MDAwOWI0LAorCTB4MWMwMWYwMDAsIDB4NTkzMDA4MDAsIDB4NDk3YTYwMDAsIDB4MDQwMWY5OTcsCisJMHg4MDE4MzFjMCwgMHgwNDAyMDAwOSwgMHg1OThjMDAwNCwgMHg4MTMwMDU4MCwKKwkweDA0MDIwMDA0LCAweDQ4MDMxODA0LCAweDQ4MDMxODA1LCAweDA0MDFmMDA4LAorCTB4NDgwNzE4MDUsIDB4MDQwMWYwMDYsIDB4NDgwNDMwMDAsIDB4NTk4YzAwMDQsCisJMHg4MTMwMDU4MCwgMHgwNDAyMDAwMiwgMHg0ODFiMTgwNCwgMHgwNDAxZjE5OSwKKwkweDQ5NDNjODU3LCAweDA0MDFmOWE4LCAweDRkZjAwMDAwLCAweDA0MDFmZTM0LAorCTB4MDQwMWZlY2IsIDB4NWMwM2UwMDAsIDB4MDQwMDA5OTksIDB4MWMwMWYwMDAsCisJMHg0OTQ3Yzg1NywgMHgwNDAxZjlhMCwgMHg0ZGYwMDAwMCwgMHg0ZDNjMDAwMCwKKwkweDg1M2U3ZDAwLCAweDA0MDFmZTc1LCAweDA0MDFmZWZjLCAweDVjMDI3ODAwLAorCTB4NWMwM2UwMDAsIDB4MDQwMDA5OGUsIDB4MWMwMWYwMDAsIDB4NWMwMDAwMDAsCisJMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHg0ZDM0MDAwMCwgMHg0ZDJjMDAwMCwKKwkweDU5MzI2ODA5LCAweDU5MzI1ODA4LCAweDU5MzAwNDA2LCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMTIsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4NDkzM2M4NTcsCisJMHg0OTQzYzg1NywgMHg0OTNmYzg1NywgMHg0ODAzYzg1NywgMHgwYzAxZjgwNCwKKwkweDVjMDI1ODAwLCAweDVjMDI2ODAwLCAweDFjMDFmMDAwLCAweDAwMTA2YWU1LAorCTB4MDAxMDZhZTcsIDB4MDAxMDZhZjEsIDB4MDAxMDZiMGIsIDB4MDAxMDZhZTcsCisJMHgwMDEwNmFmYiwgMHgwMDEwNmIyMywgMHgwMDEwNmFlNSwgMHgwMDEwNmFlNSwKKwkweDAwMTA2YjM2LCAweDAwMTA2YjJkLCAweDAwMTA2YWU1LCAweDAwMTA2YWU1LAorCTB4MDAxMDZhZTUsIDB4MDAxMDZhZTUsIDB4MDAxMDZhZTUsIDB4MDAxMDZiM2MsCisJMHgwMDEwNmIzYywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MTM0LCAweDAyMDAwODAwLCAweDAwMTAyMDc0LCAweDAyMDFmODAwLAorCTB4MDAxMDkzMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzkxMSwgMHg4MTJlNTljMCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU5MzAwMjFkLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDAyMDAwODAwLAorCTB4MDAxMDkxMmEsIDB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTAzNywgMHgwMjAwMDAwMCwgMHgwMDEwNzkxMSwgMHg1OTJjMTIwNCwKKwkweDgyMDgxNTAwLCAweDAwMDAwMGZmLCAweDgyMDgwNTgwLCAweDAwMDAwMDU1LAorCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDJkYSwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OTMwMDAwNCwKKwkweDg0MDAwNTVjLCAweDQ4MDI2MDA0LCAweDU5MzAwMDA3LCAweDhjMDAwNTAwLAorCTB4MDIwMjA4MDAsIDB4MDAxMDBlOTksIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCisJMHgwNDAwMDAwZCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg0OTQyNWEwNiwKKwkweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMTA5MWM2LCAweDAyMDFmODAwLAorCTB4MDAxMGE2OTMsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTEyYSwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OTMwMDAwNywKKwkweDhjMDAwNTAwLCAweDAyMDIwODAwLCAweDAwMTAwZTk5LCAweDAyMDFmODAwLAorCTB4MDAxMDkwMzcsIDB4MDIwMjA4MDAsIDB4MDAxMGEzZWYsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzkxMSwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAwNSwKKwkweDQ5NDI1YTA2LCAweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAorCTB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCisJMHgwMjAyMDgwMCwgMHgwMDEwNjY0ZiwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwKKwkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDA0LCAweDQ5NDI1YTA2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NTkzMjU4MTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdmZCwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OThjMDAwZCwKKwkweDgxMzAwNTgwLCAweDA0MDAwMDAzLCAweDQ5N2E2MDA3LCAweDFjMDFmMDAwLAorCTB4NTljNDAwMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGMsIDB4MDQwMDAwMDUsCisJMHg0YTAzODgwNCwgMHgwMDAwMDAwYywgMHg0OTdiMjgwNywgMHgwNDAxZjAwYSwKKwkweDA0MDFmYWNkLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDQwLAorCTB4MDQwMDAwMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDIsIDB4MDQwMjAwMDIsCisJMHg0OTdhNjAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNzBiOSwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDU5MzAwODA0LCAweDhjMDQwZDNlLCAweDA0MDIwMDA0LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDUsIDB4NDkzM2M4NTcsCisJMHg4NDA0MGQzZSwgMHg0ODA2NjAwNCwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDU5MzAwODA0LCAweDhjMDQwZDIwLCAweDA0MDIwMDA0LCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQzODAwMDAsCisJMHg1OTMwMDgwNCwgMHg4NDA0MGQyMCwgMHg0ODA2NjAwNCwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDQ5LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwMDMsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMTMsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDdhMSwgMHg4MDAwMDU4MCwgMHg1YzAyNzAwMCwgMHgxYzAxZjAwMCwKKwkweDU5MzAwMDE3LCAweDgxNDgwNTgwLCAweDA0MDIwMDAzLCAweDU5MzAwMDE4LAorCTB4ODE0YzA1ODAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NGQzMDAwMDAsCisJMHgwNDAxZjhjOSwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA2MiwKKwkweDU5OTAwMDAxLCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLCAweDBjMDFmMDAxLAorCTB4MDAxMDZiYmEsIDB4MDAxMDZiOWEsIDB4MDAxMDZiOTgsIDB4MDAxMDZiOTgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTkyNjAwNCwgMHgwNDAxZjg4ZSwKKwkweDgxMzI2MWMwLCAweDA0MDAwMDFkLCAweDU5MzAwMDA0LCAweDhjMDAwNTE2LAorCTB4MDQwMDAwMDQsIDB4NTkzMjU4MDgsIDB4NDk3YTU4MDgsIDB4NDk3YTU4MDksCisJMHgwNDAxZjg4ZSwgMHg1OTMwMDAwMSwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwZSwKKwkweDQ5N2E2MDAxLCAweDQyMDAzMDAwLCAweDAwMDBiZjJlLCAweDU4MTgwODAxLAorCTB4ODAwNDA5YzAsIDB4MDQwMjAwMDQsIDB4NDgwMDMwMDEsIDB4NDgwMDMwMDAsCisJMHgwNDAxZjAwYSwgMHg1ODE4MDgwMCwgMHg0ODAwMDgwMCwgMHg0ODAwMzAwMCwKKwkweDA0MDFmMDA2LCAweDU5MzAwODA5LCAweDgwMDQwOWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NDk3ODA4MGMsIDB4NWMwM2UwMDAsIDB4MDQwMDA4OTAsCisJMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ZDMwMDAwMCwKKwkweDQ5N2IyODA3LCAweDA0MDFmODk0LCAweDRkZjAwMDAwLCAweDU5OGMwMDAwLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsCisJMHgwMDEwNmJlZiwgMHgwMDEwNmJkMiwgMHgwMDEwNmJkYiwgMHgwMDEwNmJkZiwKKwkweDAwMTA2YmVhLCAweDAwMTA2YmVmLCAweDAwMTA2YmQwLCAweDAwMTA2YmQwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTk4YzAwMGQsIDB4ODAwMjY1NDAsCisJMHgwNDAwMDAwNCwgMHgwNDAxZjgxZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKKwkweDAyMDFmODAwLCAweDAwMTA3MGI5LCAweDA0MDFmMDE1LCAweDA0MDFmODI3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDcwYjksIDB4MDQwMWYwMTEsIDB4NTk4YzAwMGQsCisJMHg4MDAyNjU0MCwgMHgwNDAwMDAwZSwgMHgwNDAxZjgzOCwgMHgwNDAwMDAwNCwKKwkweDA0MDFmODBmLCAweDA0MDAwMDAyLCAweDA0MDFmODFjLCAweDAyMDFmODAwLAorCTB4MDAxMDcwYjksIDB4MDQwMWYwMDYsIDB4MDQwMWY4MzAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwNzBiOSwgMHg1YzAzZTAwMCwKKwkweDA0MDAwODViLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDU5OGMwMDA5LAorCTB4ODEzMDA1ODAsIDB4MDQwMjAwMGMsIDB4MDQwMWY4NGUsIDB4MDQwMWY4M2IsCisJMHg1OTMwMDAwMCwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwNCwgMHg0ODAzMTgwOSwKKwkweDQ5N2E2MDAwLCAweDA0MDFmMDAzLCAweDQ5N2IxODA5LCAweDQ5N2IxODA4LAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMDA0MDYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAxMiwgMHg1OThjMDAwYiwKKwkweDgxMzAwNTgwLCAweDA0MDIwMDBmLCAweDA0MDFmODNhLCAweDU5MzI1ODA4LAorCTB4NDk3YTU4MDgsIDB4NDk3YTU4MDksIDB4MDQwMWY4MjQsIDB4NTkzMDAwMDAsCisJMHg4MDAwMDFjMCwgMHgwNDAwMDAwNCwgMHg0ODAzMTgwYiwgMHg0OTdhNjAwMCwKKwkweDA0MDFmMDAzLCAweDQ5N2IxODBhLCAweDQ5N2IxODBiLCAweDgwMDAwNTgwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NTk4YzAwMDUsIDB4ODEzMDA1ODAsCisJMHgwNDAyMDAwYywgMHgwNDAxZjgyNywgMHgwNDAxZjgxNCwgMHg1OTMwMDAwMCwKKwkweDgwMDAwMWMwLCAweDA0MDAwMDA0LCAweDQ4MDMxODA1LCAweDQ5N2E2MDAwLAorCTB4MDQwMWYwMDMsIDB4NDk3YjE4MDUsIDB4NDk3YjE4MDQsIDB4ODAwMDA1ODAsCisJMHgxYzAxZjAwMCwgMHg0YTAzMjAwMSwgMHgwMDAwMDAwMCwgMHg0OTdiMjAwNCwKKwkweDQ5N2IyMDA1LCAweDU5OTAwMDA2LCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLAorCTB4NDgwMzIwMDYsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NTkzMDAwMDQsCisJMHg4MjAwMDUwMCwgMHg3ZmZlZmZmZiwgMHg0ODAyNjAwNCwgMHg1OWJjMDBlNCwKKwkweDhjMDAwNTE0LCAweDA0MDAwMDA5LCAweDQyMDAwODAwLCAweDAwMDBiZjAwLAorCTB4NTgwNDAwMTIsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsIDB4NDk3ODA4MTIsCisJMHg0YTAzNzhlNCwgMHgwMDAwMDgwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDU5OGMwMDBjLCAweDgwMDAwNTQwLCAweDA0MDAwMDAzLAorCTB4ODAwMDAwNDAsIDB4NDgwMzE4MGMsIDB4MWMwMWYwMDAsIDB4NTliYzAwZWEsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwNywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDIwMDA0LCAweDQ4MDNjODU2LCAweDRhMDM3OGU4LCAweDAwMDAwMDAxLAorCTB4MWMwMWYwMDAsIDB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAyMDAxMSwgMHg0ODAzYzg1NiwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmODBlLCAweDQyMDAwODAwLAorCTB4MDAwMDEwMDAsIDB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg4MDA0MDg0MCwKKwkweDA0MDIwN2Y5LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDFjMDFmMDAwLAorCTB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OWJjMDBlYSwKKwkweDhjMDAwNTE2LCAweDA0MDIwN2ZlLCAweDQ4MDc3OGUxLCAweDFjMDFmMDAwLAorCTB4NTliYzAwZWEsIDB4OGMwMDA1MTYsIDB4MDQwMjA3ZmUsIDB4NDgwNzc4ZTEsCisJMHg1OWJjMDBlYSwgMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwgMHg0ODBiNzhlMSwKKwkweDFjMDFmMDAwLCAweDgyMDAwZDAwLCAweDgwMDAwMDE4LCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDAxMDZjOTcsCisJMHgwMDEwNmQzYiwgMHgwMDEwNmQ1NSwgMHgwMDEwNmM5NywgMHgwMDEwNmM5OSwKKwkweDAwMTA2Y2JhLCAweDAwMTA2Y2Q5LCAweDAwMTA2ZDBkLCAweDAwMTA2Yzk3LAorCTB4MDAxMDZkMzksIDB4MDAxMDZjOTcsIDB4MDAxMDZjOTcsIDB4MDAxMDZjOTcsCisJMHgwMDEwNmM5NywgMHgwMDEwNmM5NywgMHgwMDEwNmM5NywgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDRkMzAwMDAwLCAweDRkOTAwMDAwLCAweDRkZDAwMDAwLAorCTB4NGRhNDAwMDAsIDB4NGQxNDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDcwZDgsCisJMHg1OWJjMDBlYSwgMHg4YzAwMDUxMCwgMHgwNDAwMDdmZSwgMHg1OWJlNjBlMCwKKwkweDU5MzAwMDA0LCAweDhjMDAwNTIwLCAweDA0MDAwMDExLCAweDgyMDAwNTAwLAorCTB4ZmZmZWZlZmYsIDB4NDgwMjYwMDQsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsCisJMHgwNDAxZmZhOSwgMHgwMjAxZjgwMCwgMHgwMDEwMGZkMCwgMHg1YzAyMjgwMCwKKwkweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLCAweDVjMDI2MDAwLAorCTB4NGEwMzc4ZTQsIDB4MDAwMDAwMDgsIDB4MDQwMWY3OTUsIDB4ODQwMDA1MTAsCisJMHg0ODAyNjAwNCwgMHgwNDAxZjdmNiwgMHg0ZDMwMDAwMCwgMHg0ZDkwMDAwMCwKKwkweDRkZDAwMDAwLCAweDRkYTQwMDAwLCAweDRkMTQwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDcwZDgsIDB4NTliYzAwZWEsIDB4OGMwMDA1MTAsIDB4MDQwMDA3ZmUsCisJMHg1OWJlNjBlMCwgMHg1OTMwMDAwNCwgMHg4YzAwMDUyMCwgMHgwNDAwMDAwZiwKKwkweDgyMDAwNTAwLCAweGZmZmVmZWZmLCAweDQ4MDI2MDA0LCAweDA0MDFmZjhhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDEwMGUsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsCisJMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwgMHg1YzAyNjAwMCwgMHg0YTAzNzhlNCwKKwkweDAwMDAwMDA4LCAweDA0MDFmNzc2LCAweDg0MDAwNTEwLCAweDQ4MDI2MDA0LAorCTB4MDQwMWY3ZjYsIDB4NGQzMDAwMDAsIDB4NGQyYzAwMDAsIDB4NGQzNDAwMDAsCisJMHg0ZGE0MDAwMCwgMHg0Y2QwMDAwMCwgMHg1OWJjMDBlYSwgMHg4YzAwMDUxMCwKKwkweDA0MDAwN2ZlLCAweDU5YmU2MGUwLCAweDgxMzI2MWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMWQsCisJMHg4MjAwMDUwMCwgMHhmZmZlZmVmZiwgMHg0ODAyNjAwNCwgMHg1OTMyNjgwOSwKKwkweDQyMDM0ODAwLCAweDAwMTBiNTQ0LCAweDA0MDExMDAwLCAweDRhMDNjODQwLAorCTB4MDAxMGI1NGIsIDB4NGEwM2M4NDIsIDB4MDAwMDAwMTIsIDB4MDQwMTEwMDAsCisJMHg0YTAzYzg0MCwgMHgwMDEwYjU1ZCwgMHg0YTAzYzg0MiwgMHgwMDAwMDBmZiwKKwkweDA0MDExMDAwLCAweDRhMDNjODQwLCAweDAwMTBiNjVjLCAweDRhMDNjODQyLAorCTB4MDAwMDAwZmYsIDB4MDQwMWZiZjIsIDB4NWMwMWEwMDAsIDB4NWMwMzQ4MDAsCisJMHg1YzAyNjgwMCwgMHg1YzAyNTgwMCwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwKKwkweDg0MDAwNTEwLCAweDQ4MDI2MDA0LCAweDVjMDFhMDAwLCAweDVjMDM0ODAwLAorCTB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsCisJMHgxYzAxZjAwMCwgMHg0ZDMwMDAwMCwgMHg0ZDJjMDAwMCwgMHg0ZDM0MDAwMCwKKwkweDRjZDAwMDAwLCAweDRkOTAwMDAwLCAweDRkZDAwMDAwLCAweDRkYTQwMDAwLAorCTB4NGQxNDAwMDAsIDB4MDQwMWZiYzMsIDB4NTliYzAwZWEsIDB4OGMwMDA1MTAsCisJMHgwNDAwMDdmZSwgMHg1OWJlNjBlMCwgMHg4MTMyNjFjMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDU5MzAwMDA0LCAweDhjMDAwNTIwLCAweDA0MDAwMDBmLAorCTB4ODIwMDA1MDAsIDB4ZmZmZWZlZmYsIDB4NDgwMjYwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzgzYSwgMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwKKwkweDVjMDMyMDAwLCAweDVjMDFhMDAwLCAweDVjMDI2ODAwLCAweDVjMDI1ODAwLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4ODQwMDA1MTAsIDB4NDgwMjYwMDQsCisJMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwKKwkweDVjMDFhMDAwLCAweDVjMDI2ODAwLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NGQzMDAwMDAsCisJMHg0ZDM4MDAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjhjNCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYTQ3LCAweDA0MDFmZjE0LCAweDU5OGU2MDBkLCAweDU5YzQwMDA0LAorCTB4OGMwMDA1MDYsIDB4MDQwMDAwMDQsIDB4MDQwMWY4ZGIsIDB4NGEwMzg4MDQsCisJMHgwMDAwMDAwOCwgMHg4MTMyNjFjMCwgMHgwNDAwMDAwNiwgMHgwNDAxZmI4NywKKwkweDQyMDI3MDAwLCAweDAwMDAwMDE0LCAweDAyMDFmODAwLCAweDAwMDIwN2ExLAorCTB4NGEwMzc4ZTQsIDB4MDAwMDAwMDIsIDB4NWMwMjcwMDAsIDB4NWMwMjYwMDAsCisJMHgwNDAxZjZmNywgMHg0ZDE4MDAwMCwgMHg0ZDMwMDAwMCwgMHg0ZDM4MDAwMCwKKwkweDRkOTAwMDAwLCAweDRkZDAwMDAwLCAweDRkYTQwMDAwLCAweDRkMTQwMDAwLAorCTB4MDQwMWZlZjksIDB4NDE3YTMwMDAsIDB4NTljNDA4MDQsIDB4ODMxODA0MDAsCisJMHgwMDEwNzA5ZiwgMHg1MDAwMDAwMCwgMHg4MDA0MDUwMCwgMHgwNDAwMDAxYiwKKwkweDQyMDAwMDAwLCAweDAwMTBiOGM1LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4MDQwMWZiNzAsIDB4NTk5MjYwMDQsIDB4MDQwMWY4NTksIDB4ODMxODA0MDAsCisJMHgwMDEwNzA5ZiwgMHg1MDAwMDAwMCwgMHg0ODAzODgwNCwgMHg4MTMyNjFjMCwKKwkweDA0MDAwMDBhLCAweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDIwMDAzLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGEsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwKKwkweDAwZjgwMDAwLCAweDA0MDAwMDA1LCAweDgxMWEzMDAwLCAweDgzMTgwNDgwLAorCTB4MDAwMDAwMDUsIDB4MDQwMDE3ZGQsIDB4NGEwMzc4ZTQsIDB4MDAwMDAwMDgsCisJMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwKKwkweDVjMDI3MDAwLCAweDVjMDI2MDAwLCAweDVjMDIzMDAwLCAweDA0MDFmNmMwLAorCTB4NGQyYzAwMDAsIDB4NGQzNDAwMDAsIDB4NTkzMjY4MDksIDB4NTk4YzA4MDAsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAwNCwgMHg4MzhjMTQwMCwKKwkweDAwMDAwMDA1LCAweDA0MDFmMDBjLCAweDgyMDQwNTgwLCAweDAwMDAwMDAxLAorCTB4MDQwMjAwMDQsIDB4ODM4YzE0MDAsIDB4MDAwMDAwMDksIDB4MDQwMWYwMDYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAyMiwgMHg4MzhjMTQwMCwKKwkweDAwMDAwMDBiLCAweDQxMzA2ODAwLCAweDU4MzQwMDAwLCAweDgwMDA3ZDQwLAorCTB4MDQwMDAwMWMsIDB4NTgzYzAwMDksIDB4ODEzNDA1ODAsIDB4MDQwMjAwMDYsCisJMHg0MDNjNjgwMCwgMHg1ODNjMDAwMCwgMHg4MDAwN2Q0MCwgMHgwNDAyMDdmYSwKKwkweDA0MDFmMDE0LCAweDQ5MzNjODU3LCAweDQ4M2ZjODU3LCAweDU4M2MwMDAwLAorCTB4NDgwMDY4MDAsIDB4NDkzMDc4MDAsIDB4NDQzYzEwMDAsIDB4ODAwMDA1ODAsCisJMHg0ODAzMTgwZCwgMHg0ODAzMTgwZiwgMHg1OThjMDAwMCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDAzLCAweDRhMDMxODAwLCAweDAwMDAwMDAwLAorCTB4ODAwMDA1ODAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmYiwgMHg0OTFiYzg1NywKKwkweDU5YzgwODQwLCAweDgyMDQwNTQwLCAweDAwMDAwMDEwLCAweDQ4MDM5MDQwLAorCTB4NTljNDEwMDgsIDB4ODIwODA1MDAsIDB4ZmZmZmZmN2YsIDB4NDgwMzg4MDgsCisJMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwgMHgwNDAxZmFiYiwgMHgwNDAyMDAwNywKKwkweDA0MDFmYWJmLCAweDA0MDAwMDIyLCAweDQ4MDM4ODA0LCAweDAyMDFmODAwLAorCTB4MDAxMDEwN2EsIDB4MDQwMWYwNDIsIDB4NGEwMzg4MDMsIDB4MDAwMDAwMDgsCisJMHg1OWM0MDAwMywgMHg4MjAwMDUwMCwgMHgwMDAwMDAwMywgMHgwNDAwMDdmZCwKKwkweDhjMDAwNTAyLCAweDA0MDIwMDA3LCAweDA0MDFmYWIxLCAweDA0MDAwMDE0LAorCTB4NDgwMzg4MDQsIDB4MDIwMWY4MDAsIDB4MDAxMDEwN2EsIDB4MDQwMWYwMzQsCisJMHg1OWM4MDA0MCwgMHg4NDAwMDU2YSwgMHg0ODAzOTA0MCwgMHg1OWM4MDA0MCwKKwkweDhjMDAwNTJhLCAweDA0MDIwN2ZlLCAweDU5YzQwMDA1LCAweDgyMDAwNTAwLAorCTB4YzAwMDAwMDAsIDB4MDQwMDAwMDYsIDB4NTljNDAwYTMsIDB4ODQwMDA1NDAsCisJMHg0ODAzODhhMywgMHg0YTAzODgwNSwgMHhjMDAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMDFkLCAweDRhMDNhMDA1LCAweDMwMDAwMDAwLCAweDU5ZDAwMDA2LAorCTB4NGEwM2EwMDUsIDB4MzAwMDAwMDAsIDB4NTk5MDAwMDYsIDB4ODIwMDA1MDAsCisJMHhmZmZmMDAwMCwgMHg0ODAzMjAwNiwgMHg1OWQwMDAwNSwgMHg4YzAwMDUwNCwKKwkweDA0MDIwN2ZlLCAweDQyMDAwODAwLCAweDAwMDA3NjAwLCAweDgzMTgwNTQwLAorCTB4NjAwMDAwMDAsIDB4NDgwMDA4YTEsIDB4ODExODAwZGMsIDB4NTljODA4NDAsCisJMHg4MDA0MDU0MCwgMHg0ODAzOTA0MCwgMHg4MjAwMDU0MCwgMHgwMDAwMzAwMCwKKwkweDQ4MDM5MDQwLCAweDU5YzgwMDQwLCAweDgyMDAwNTAwLCAweDAwMDAzMDAwLAorCTB4MDQwMjA3ZmQsIDB4MDIwMWY4MDAsIDB4MDAxMDEwNjgsIDB4ODMxODA0MDAsCisJMHgwMDEwNzA5ZiwgMHg1MDAwMDAwMCwgMHg0ODAzODgwNCwgMHg4MDAwMDU4MCwKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2MDYyLCAweDVjMDNlMDAwLAorCTB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4NDgwYjg4MDgsIDB4NDgwNzkwNDAsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg1OWM4MDg0MCwgMHg4MjA0MDU0MCwKKwkweDAwMDAwMDEwLCAweDQ4MDM5MDQwLCAweDU5YzQxMDA4LCAweDgyMDgwNTAwLAorCTB4ZmZmZmZmN2YsIDB4NDgwMzg4MDgsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsCisJMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwMywgMHgwNDAyMDAxMCwKKwkweDU5YzQwMDA0LCAweDgyMDAwNTAwLCAweDAwMDAwMDBjLCAweDA0MDAwMDA1LAorCTB4NGEwMzg4MDQsIDB4MDAwMDAwMGMsIDB4OGMwMDA1MDQsIDB4MDQwMWYwMjUsCisJMHg1OWM4MDA0MCwgMHg4NDAwMDU2ZSwgMHg0ODAzOTA0MCwgMHg1OWM4MDA0MCwKKwkweDhjMDAwNTJlLCAweDA0MDIwN2ZlLCAweDA0MDFmMDFlLCAweDRhMDM4ODAzLAorCTB4MDAwMDAwMDgsIDB4NTljNDAwMDMsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDdmZCwgMHg4YzAwMDUwMiwgMHgwNDAyMDAwNiwgMHg1OWM0MDAwNCwKKwkweDRhMDM4ODA0LCAweDAwMDAwMDBjLCAweDhjMDAwNTA0LCAweDA0MDFmMDExLAorCTB4NTljODAwNDAsIDB4ODQwMDA1NmEsIDB4NDgwMzkwNDAsIDB4NTljODAwNDAsCisJMHg4YzAwMDUyYSwgMHgwNDAyMDdmZSwgMHg1OWM0MDAwNSwgMHg4MjAwMDUwMCwKKwkweGMwMDAwMDAwLCAweDA0MDAwMDA3LCAweDU5YzQwMGEzLCAweDg0MDAwNTQwLAorCTB4NDgwMzg4YTMsIDB4NGEwMzg4MDUsIDB4YzAwMDAwMDAsIDB4ODAwMDA1ODAsCisJMHg0OTdiMjgwNywgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg0ODBiODgwOCwKKwkweDQ4MDc5MDQwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRkOTAwMDAwLAorCTB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsIDB4NGQxNDAwMDAsIDB4MDQwMWZkZWUsCisJMHg0ZGYwMDAwMCwgMHgwNDAxZmE2ZiwgMHg1OTkwMDAwNCwgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDExLCAweDgxMzAwNTgwLCAweDA0MDIwMDBmLCAweDU5MzAwMDA0LAorCTB4ODQwMDA1MjAsIDB4NDgwMjYwMDQsIDB4MDQwMWZmNTEsIDB4MDQwMjAwMDksCisJMHg1YzAzZTAwMCwgMHgwNDAwMGRkNiwgMHg4MDAwMDU4MCwgMHg1YzAyMjgwMCwKKwkweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLCAweDFjMDFmMDAwLAorCTB4MDQwMWZkMGUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDksIDB4NTkzMDAwMDQsCisJMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwgMHg4YzAwMDUwYywgMHgwMjAyMDgwMCwKKwkweDAwMDIwN2ExLCAweDVjMDNlMDAwLCAweDA0MDAwZGM1LCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsCisJMHg1YzAzMjAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHgwNDAxZmRjNiwKKwkweDRkZjAwMDAwLCAweDU5OGMwMDBkLCAweDgwMDI2NTQwLCAweDA0MDAwMDEyLAorCTB4NTkzMDAwMDQsIDB4ODQwMDA1MjAsIDB4NDgwMjYwMDQsIDB4MDQwMWZmOGEsCisJMHgwNDAwMDAxNywgMHgwNDAxZmQyNiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxMywKKwkweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDAyMDIwODAwLCAweDAwMDIwN2ExLAorCTB4NWMwM2UwMDAsIDB4MDQwMDBkYWEsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg4MzZjMTU4MCwgMHgwMDAwMDAwMSwgMHgwNDAwMDdmOSwKKwkweDgzNmMxNTgwLCAweDAwMDAwMDA0LCAweDA0MDAwN2Y2LCAweDQyMDAxMDAwLAorCTB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsIDB4MDAxMDVmOTAsIDB4NWMwM2UwMDAsCisJMHgwNDAwMGQ5YiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg0ZDMwMDAwMCwKKwkweDRkMTgwMDAwLCAweDRkM2MwMDAwLCAweDA0MDFmZDlmLCAweDRkZjAwMDAwLAorCTB4NGEwMzc4ZTQsIDB4MDAwMDAwMGYsIDB4MDQwMWY5ZmYsIDB4NDE3YTMwMDAsCisJMHg1OTkyNjAwNCwgMHg4MTMyNjFjMCwgMHgwNDAwMDAxMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0OGQ5LCAweDA0MDAwMDBhLCAweDU5MzAwYzA2LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwNiwgMHgwNDAyMDAwMywgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMiwKKwkweDAyMDFmODAwLCAweDAwMTA4YmUzLCAweDgxMWEzMDAwLCAweDgzMTgwNDgwLAorCTB4MDAwMDAwMDUsIDB4MDQwMDE3ZWIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwNDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTM0NSwgMHg0YTAzNzhlNCwgMHgwMDAwMDAwYSwKKwkweDVjMDNlMDAwLCAweDA0MDAwZDcyLCAweDVjMDI3ODAwLCAweDVjMDIzMDAwLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsCisJMHgwNDAxZmQ3NSwgMHg0ZGYwMDAwMCwgMHg1OWM4MDg0MCwgMHg4MjA0MDU0MCwKKwkweDAwMDAwMDEwLCAweDQ4MDM5MDQwLCAweDU5YzQxMDA4LCAweDgyMDgwNTAwLAorCTB4ZmZmZmZmN2YsIDB4NDgwMzg4MDgsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwMywgMHgwNDAxZjljMiwgMHg1OThlNjAwZCwKKwkweDgxMzI2MWMwLCAweDA0MDIwZjlkLCAweDA0MDAwOWM3LCAweDQ5N2IyODA3LAorCTB4MDQwMWY4MGEsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4NDgwYjg4MDgsCisJMHg4NDA0MGQ3NCwgMHg0ODA3OTA0MCwgMHg1YzAzZTAwMCwgMHgwNDAwMGQ1MCwKKwkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDRkMzgwMDAwLCAweDRkMTgwMDAwLAorCTB4NGQzMDAwMDAsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsCisJMHg0ZDE0MDAwMCwgMHg1OWM0MTAwNCwgMHg0ODBiYzg1NywgMHg4MjA4MDUwMCwKKwkweDAwMDAzZmYwLCAweDA0MDAwMDI1LCAweDQxN2EzMDAwLCAweDRjMDgwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDYwNjIsIDB4NWMwMDEwMDAsIDB4ODIwODA1MDAsCisJMHgwMDAwMDIxMCwgMHgwNDAyMDAwNCwgMHg4MTFhMzAwMCwgMHg4MDA4MTEwMiwKKwkweDA0MDFmN2Y3LCAweDA0MDFmOWMzLCAweDU5OTI2MDA0LCAweDQ5MzNjODU3LAorCTB4ODEzMjYxYzAsIDB4MDQwMjAwMDUsIDB4NTljNDAwYTMsIDB4OGMwMDA1MWEsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZmVhNSwgMHgwNDAwMDAwOSwKKwkweDA0MDFmYzZhLCAweDQyMDI3MDAwLCAweDAwMDAwMDQ5LCAweDU5MzAwMDA0LAorCTB4OGMwMDA1MGMsIDB4MDIwMjA4MDAsIDB4MDAwMjA3YTEsIDB4MDQwMWYwMDcsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDA0YSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywKKwkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLAorCTB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsIDB4NWMwMjYwMDAsIDB4NWMwMjMwMDAsCisJMHg1YzAyNzAwMCwgMHgxYzAxZjAwMCwgMHg0ZDMwMDAwMCwgMHg0ZDE4MDAwMCwKKwkweDRkOTAwMDAwLCAweDA0MDFmZDFjLCAweDQyMDAxMDAwLCAweDAwMDAwMDAwLAorCTB4NTk4YzAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDA5NzEsCisJMHg0MTdhMzAwMCwgMHg4MTFiMjBjOCwgMHg4MzkzMjQwMCwgMHgwMDAwYmYzMiwKKwkweDU5OTAwMDAxLCAweDgyMDAwNTgwLCAweDAwMDAwMDAxLCAweDA0MDIwMDBkLAorCTB4NDIwMDA4MDAsIDB4MDAwMDA3ZDAsIDB4NTk5MjYwMDQsIDB4NTkzMDAwMTEsCisJMHg4MjAwMDUwMCwgMHhmZmYwMDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwMywKKwkweDQyMDAwODAwLCAweDAwMDAxYjU4LCAweDAyMDFmODAwLCAweDAwMTA2MDU0LAorCTB4ODExYTMwMDAsIDB4ODMxODA0ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDE3ZWEsCisJMHg1OWM4MTA0MCwgMHg4NDA4MTUzNCwgMHg0ODBiOTA0MCwgMHgwNDAxZmNmMCwKKwkweDVjMDMyMDAwLCAweDVjMDIzMDAwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsCisJMHg0ZDE0MDAwMCwgMHg0ZDM4MDAwMCwgMHgwNDAxZmNlZiwgMHg0ZGYwMDAwMCwKKwkweDU5MzAwMDA0LCAweDhjMDAwNTNlLCAweDA0MDIwMDA3LCAweDhjMDAwNTIwLAorCTB4MDQwMDAwMjUsIDB4MDIwMWY4MDAsIDB4MDAxMDZiNmMsIDB4MDQwMDAwMjIsCisJMHgwNDAxZjAyYSwgMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwgMHgwNDAwMDAxMSwKKwkweDAyMDFmODAwLCAweDAwMTA4Y2Q2LCAweDA0MDIwMDI0LCAweDA0MDFmOTE4LAorCTB4MDQwMDAwMjIsIDB4NDgwMzg4MDQsIDB4MDQwMWY5NWUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTA3YSwgMHgwNDAxZmMwZCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0OSwKKwkweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDIwMDBkLCAweDA0MDFmMDBlLAorCTB4NTljNDAwMDQsIDB4OGMwMDA1MDQsIDB4MDQwMDAwMTQsIDB4NGEwMzg4MDQsCisJMHgwMDAwMDAwNCwgMHgwNDAxZmMzNiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxMywKKwkweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDAwMDAzLCAweDAyMDFmODAwLAorCTB4MDAwMjA3YTEsIDB4NWMwM2UwMDAsIDB4MDQwMDBjYjksIDB4NWMwMjcwMDAsCisJMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwKKwkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDVjMDNlMDAwLCAweDA0MDAwY2IwLAorCTB4NWMwMjcwMDAsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsCisJMHg1YzAzMjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKKwkweDQ5N2IyODA3LCAweDA0MDFmY2IwLCAweDU5YzQwMGFmLCAweDgwMDAwMWMwLAorCTB4MDQwMjAwMDQsIDB4MDQwMWZjYTIsIDB4MDIwMWYwMDAsIDB4MDAxMDE0ZmIsCisJMHg1OThjMDAwZiwgMHg4MjAwMTQ4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMTAwNywKKwkweDgwMDAwMDAwLCAweDQ4MDMxODBmLCAweDgwMDAwNTgwLCAweDAyMDFmODAwLAorCTB4MDAxMDYwNGQsIDB4MDQwMDAwMGUsIDB4MDQwMWZlZDgsIDB4MDQwMjAwMGMsCisJMHgwNDAxZmRkNCwgMHgwNDAwMDAwYSwgMHgwMjAxZjgwMCwgMHgwMDEwYTljNywKKwkweDA0MDFmOTE2LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDE0LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsIDB4MDQwMWZjODgsCisJMHgwMjAxZjAwMCwgMHgwMDEwMTRmYiwgMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwKKwkweDRkYTQwMDAwLCAweDRkMTQwMDAwLCAweDRkMzAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDYwNjIsIDB4MDQwMWZjODgsIDB4NTljNDAwYWYsIDB4ODAwMDAxYzAsCisJMHgwNDAwMDAyNywgMHgwNDAxZjkwNywgMHg1OTkyNjAwNCwgMHg0OTMzYzg1NywKKwkweDU5MzAwMDA0LCAweDhjMDAwNTE2LCAweDA0MDAwMDBiLCAweDA0MDFmZThiLAorCTB4MDQwMjAwMWYsIDB4MDIwMWY4MDAsIDB4MDAxMDZiOGEsIDB4MDQwMWZjNzAsCisJMHg0MjAwMDgwMCwgMHg4MDAwMDgwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNjcyMSwKKwkweDA0MDFmMDE3LCAweDQyMDAxODAwLCAweDAwMDA3NTMwLCAweDA0MDFmOGMxLAorCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNTIsIDB4MDQwMWYwMTAsCisJMHgwNDAxZmU3YSwgMHgwNDAyMDAwZSwgMHgwMjAxZjgwMCwgMHgwMDEwYTljNywKKwkweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDIwMDAzLCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDMsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGEsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHgwNDAxZmM1NCwKKwkweDVjMDI2MDAwLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLCAweDVjMDNhMDAwLAorCTB4NWMwMzIwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDE0ZmIsIDB4NGQ5MDAwMDAsCisJMHg0ZGQwMDAwMCwgMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwgMHg0ZDMwMDAwMCwKKwkweDRkMmMwMDAwLCAweDA0MDFmYzUwLCAweDA0MDFmOGQyLCAweDU5OTI2MDA0LAorCTB4NDkzM2M4NTcsIDB4MDQwMWY4ODAsIDB4MDQwMDAwMTYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjA2MiwgMHg4MTMyNjFjMCwgMHgwNDAwMDAzNCwgMHg1OTMyNTgwOCwKKwkweDgxMmU1OWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMjAwMWQsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NTAsCisJMHg0ODAyNWEwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNTI1OCwgMHgwNDAyMDAyNywKKwkweDU5MmMwMjA4LCAweDg0MDAwNTEwLCAweDQ4MDI1YTA4LCAweDA0MDFmMDIzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDYwNTIsIDB4MDQwMWYwMjAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTljNywgMHgwNDAxZmQ5ZSwgMHg1OTJjMDIwOCwgMHg4NDAwMDU1MCwKKwkweDQ4MDI1YTA4LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDRhLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsCisJMHg1YzAyNzAwMCwgMHgwNDAxZjAxMSwgMHg1OTkwMDAwNiwgMHg4MjAwMDUwMCwKKwkweGZmZmYwMDAwLCAweDA0MDIwN2VlLCAweDU5YzQwOGFmLCAweDgyMDQwNDgwLAorCTB4MDAwMDAzZTgsIDB4MDQwMjE3ZWEsIDB4NTk5MDAwMDYsIDB4ODIwMDA0MDAsCisJMHgwMDAxMDAwMCwgMHg0ODAzMjAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjA1MiwKKwkweDAyMDFmODAwLCAweDAwMTA0MTFkLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLAorCTB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsCisJMHgwNDAxZjQwMywgMHg0ZDMwMDAwMCwgMHg0ZDJjMDAwMCwgMHgwNDAxZmMwYSwKKwkweDU5OGU2MDBkLCAweDQ5MzNjODU3LCAweDU5YzQxMDA0LCAweDhjMDgxNTAwLAorCTB4MDQwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMjAwMDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTI1OCwgMHgwNDAyMDAyZiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MDRkLCAweDA0MDFmMDJjLCAweDU5OGMwMDBmLCAweDgwMDAwNTQwLAorCTB4MDQwMjAwMTEsIDB4NTljNDA4YWYsIDB4ODIwNDA0ODAsIDB4MDAwMDAzZTgsCisJMHgwNDAyMTAwZCwgMHg1OThjMDgwZiwgMHg4MDA0MDgwMCwgMHg0ODA3MTgwZiwKKwkweDAyMDFmODAwLCAweDAwMTA2MDRkLCAweDQyMDAwMDAwLCAweDAwMTBiODUyLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsIDB4MDAxMDQxMWQsCisJMHgwNDAxZjAxOSwgMHgwNDAxZmRiNCwgMHg4MTMyNjFjMCwgMHgwNDAyMDAwMywKKwkweDA0MDFmODQ5LCAweDA0MDFmMDE0LCAweDAyMDFmODAwLCAweDAwMTBhOWM3LAorCTB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMDcsCisJMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwgMHgwNDAwMDAwNCwgMHg1OTJjMDIwOCwKKwkweDg0MDAwNTUwLCAweDQ4MDI1YTA4LCAweDA0MDFmODU0LCAweDRkMzgwMDAwLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsCisJMHg1YzAyNzAwMCwgMHg1YzAyNTgwMCwgMHg1YzAyNjAwMCwgMHgwMjAxZjAwMCwKKwkweDAwMTA2YzRiLCAweDU5YzQwODA0LCAweDgzMTgwNDAwLCAweDAwMTA3MDk1LAorCTB4NTAwMDAwMDAsIDB4ODAwNDA1MDAsIDB4MWMwMWYwMDAsIDB4NTljNDA4MDQsCisJMHg4MzE4MDQwMCwgMHgwMDEwNzA5YSwgMHg1MDAwMDAwMCwgMHg4MDA0MDUwMCwKKwkweDFjMDFmMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwNDIwLCAweDAwMDAwODQwLAorCTB4MDAwMDEwODAsIDB4MDAwMDIxMDAsIDB4MDAwMDQwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAxMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDA0MDAwMCwgMHgwMDA4MDAwMCwKKwkweDAwMTAwMDAwLCAweDAwMjAwMDAwLCAweDAwNDAwMDAwLCAweDAwODAwMDAwLAorCTB4NTk5MDA4MDYsIDB4ODAwNDAxMjAsIDB4ODAwYzA0ODAsIDB4MDQwMjEwMDQsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwNSwgMHg4MjA0MGMwMCwKKwkweDAwMDEwMDAwLCAweDQ4MDcyMDA2LCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLAorCTB4NDgwYmM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsCisJMHg0ODBiMTgwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDAyMDFmODAwLCAweDAwMTA2YzU1LAorCTB4NGRmMDAwMDAsIDB4NDk3YjE4MGQsIDB4NDk3YjE4MDMsIDB4NDk3YjE4MGUsCisJMHg0OTdiMTgwZiwgMHg0OTdiMTgxMCwgMHg1OThjMDAwMCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDA5LCAweDgzNmMwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMjAwMDQsIDB4NGEwMzE4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWYwMDMsCisJMHg0YTAzMTgwMCwgMHgwMDAwMDAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwKKwkweDAwMTA2YzRiLCAweDFjMDFmMDAwLCAweDU5MzAwMDA0LCAweDhjMDAwNTBjLAorCTB4MDQwMjAwMDMsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg4MzE4MDQ4MCwgMHgwMDAwMDAwNSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwKKwkweDQ5MWJjODU3LCAweDgxMWIyMGM4LCAweDgzOTMyNDAwLCAweDAwMDBiZjMyLAorCTB4ODExYmEwY2EsIDB4ODNkM2E0MDAsIDB4MDAwMDc2MDAsIDB4ODMxODA0MDAsCisJMHgwMDEwNzBlYSwgMHg1MDAzNDgwMCwgMHg4MTFhMjhjMiwgMHg4MzE2MmMwMCwKKwkweDAwMDA2MTAwLCAweDFjMDFmMDAwLCAweDAwMTBiNzViLCAweDAwMTBiNzcyLAorCTB4MDAxMGI3ODksIDB4MDAxMGI3YTAsIDB4MDAxMGI3YjcsIDB4NDkzM2M4NTcsCisJMHg1OTMwMDQwNiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAxMiwgMHgwNDAyMTAxNiwKKwkweDQ4MDNjODU3LCAweDA0MDExMDAwLCAweDBjMDFmMDAxLCAweDAwMTA3MTA5LAorCTB4MDAxMDcxOTgsIDB4MDAxMDc0ZDEsIDB4MDAxMDc1NTYsIDB4MDAxMDcxOTgsCisJMHgwMDEwNzRkMSwgMHgwMDEwNzU1NiwgMHgwMDEwNzEwOSwgMHgwMDEwNzE5OCwKKwkweDAwMTA3MTA5LCAweDAwMTA3MTA5LCAweDAwMTA3MTA5LCAweDAwMTA3MTA5LAorCTB4MDAxMDcxMDksIDB4MDAxMDcxMDksIDB4MDAxMDcxMDksIDB4MDAxMDcxMGYsCisJMHgwMDEwNzEwZiwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YmJmLCAweDAyMDFmMDAwLCAweDAwMTA2YzRiLCAweDQyMDAxMDAwLAorCTB4MDAxMGI3ZjYsIDB4NTAwODEwMDAsIDB4NDkzMDEwMGMsIDB4NTgwODAwMDIsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDEwMCwgMHgwNDAyMDAzMiwgMHg1OTMyNTgwOCwKKwkweDgxMmU1OWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU5MzI2ODA5LAorCTB4ODEzNjY5YzAsIDB4MDQwMDAwMTksIDB4NTkyYzA0MGIsIDB4ODIwMDA1MDAsCisJMHgwMDAwZTAwMCwgMHgwNDAwMDAwMywgMHgwNDAxZmJhOCwgMHgwNDAxZjAwMiwKKwkweDA0MDFmYjk4LCAweDQyMDAxMDAwLCAweDAwMTBiN2Y2LCAweDUwMDgxMDAwLAorCTB4NDkzMDEwMGIsIDB4NDkyYzEwMGEsIDB4ODJkMDA0MDAsIDB4MDAwMDAwMDYsCisJMHg0ODAwMTAwMywgMHg1OTJjMDAwZCwgMHg4MDAwMDEwNCwgMHg0ODAwMTAwNCwKKwkweDU5MmMwMDBlLCAweDQ4MDAxMDA3LCAweDU5MmMwMDBmLCAweDQ4MDAxMDA4LAorCTB4MDIwMWYwMDAsIDB4MDAxMDA4NTgsIDB4NDIwMjY4MDAsIDB4MDAxMGJlMGQsCisJMHg1OTJjMDgwYSwgMHg0ODA2NjgwMiwgMHg4MjA0MDUwMCwgMHgwMGZmZmYwMCwKKwkweDA0MDAwMDA3LCAweDQ5N2E2YTEyLCAweDU5YTgxMDEwLCAweDgyMDgxNTAwLAorCTB4MDBmZmZmMDAsIDB4ODAwODA1ODAsIDB4MDQwMjA3ZGMsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDBmZiwgMHg4MDA0MDhkMCwgMHg0ODA2NmExMiwgMHgwNDAxZjdkNywKKwkweDFjMDFmMDAwLCAweDRkMmMwMDAwLCAweDRkMzAwMDAwLCAweDRjNTgwMDAwLAorCTB4NGM1NDAwMDAsIDB4NGM1MDAwMDAsIDB4NTgzMjU4MGEsIDB4ODEyZTU5YzAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODMwMDAwMiwgMHg0YTAwNjAwMiwKKwkweDAwMDAwMTAwLCAweDgyMDAwNTgwLCAweDAwMDAwMTAwLCAweDA0MDIwMDFjLAorCTB4NTgzMDAwMGIsIDB4NTgzMjYwMGMsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMTAsCisJMHgwNDAxZjgyOCwgMHgwNDAyMDAxMCwgMHg1OTJjMDgwZCwgMHg4MDA0MDkwNCwKKwkweDQwMDRiMDAwLCAweDQyMDBhMDAwLCAweDAwMTBiNTRiLCAweDQwNTBhODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFiMjgsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNzhiYywgMHgwNDAxZjAwMywgMHgwNDAxZjgxOSwKKwkweDA0MDAwZmEzLCAweDVjMDBhMDAwLCAweDVjMDBhODAwLCAweDVjMDBiMDAwLAorCTB4NWMwMjYwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NTgzMDAwMGIsCisJMHg1ODMyNjAwYywgMHg4MTMwMDU4MCwgMHgwNDAyMDdmNSwgMHgwNDAxZjgwZCwKKwkweDA0MDIwN2Y1LCAweDAyMDFmODAwLCAweDAwMTA2OGQzLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHgwNDAxZjdlYSwKKwkweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDRkZjAwMDAwLCAweDU5OGMwMDBkLAorCTB4ODEzMDA1ODAsIDB4MDQwMjAwMDksIDB4NTk4YzAwMDUsIDB4ODEzMDA1ODAsCisJMHgwNDAyMDAwNiwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwKKwkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDVjMDNlMDAwLCAweDAyMDAwODAwLAorCTB4MDAxMDZjNGIsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg1OTMwMDQwMywgMHg4MjAwMGM4MCwgMHgwMDAwMDA1NiwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNWQ4LCAweDQ4MDNjODU3LCAweDBjMDFmMDAxLCAweDAwMTA3MzAyLAorCTB4MDAxMDczMWQsIDB4MDAxMDczMmUsIDB4MDAxMDc0MzEsIDB4MDAxMDczZjEsCisJMHgwMDEwNzNmNSwgMHgwMDEwNzQwNiwgMHgwMDEwNzQxYSwgMHgwMDEwNzQwZiwKKwkweDAwMTA3NDFhLCAweDAwMTA3NDU1LCAweDAwMTA3NDFhLCAweDAwMTA3NDk3LAorCTB4MDAxMDc0MWEsIDB4MDAxMDc0YTUsIDB4MDAxMDc0MWEsIDB4MDAxMDc0MGYsCisJMHgwMDEwNzQxYSwgMHgwMDEwNzRhOSwgMHgwMDEwNzFmNSwgMHgwMDEwNzFmNSwKKwkweDAwMTA3MWY1LCAweDAwMTA3MWY1LCAweDAwMTA3MWY1LCAweDAwMTA3MWY1LAorCTB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsCisJMHgwMDEwNzFmNSwgMHgwMDEwNzU3NCwgMHgwMDEwNzU5MywgMHgwMDEwNzU5ZCwKKwkweDAwMTA3MWY1LCAweDAwMTA3NWIzLCAweDAwMTA3NDA2LCAweDAwMTA3MWY1LAorCTB4MDAxMDc0MDYsIDB4MDAxMDc0MWEsIDB4MDAxMDcxZjUsIDB4MDAxMDczMmUsCisJMHgwMDEwNzQzMSwgMHgwMDEwNzFmNSwgMHgwMDEwNzYwMywgMHgwMDEwNzQxYSwKKwkweDAwMTA3MWY1LCAweDAwMTA3NjEzLCAweDAwMTA3NDFhLCAweDAwMTA3MWY1LAorCTB4MDAxMDc0MGYsIDB4MDAxMDcyZjMsIDB4MDAxMDcxZjcsIDB4MDAxMDcxZjUsCisJMHgwMDEwNzYyYSwgMHgwMDEwNzY1ZCwgMHgwMDEwNzZkNywgMHgwMDEwNzFmNSwKKwkweDAwMTA3NmU3LCAweDAwMTA3NDA0LCAweDAwMTA3NmRhLCAweDAwMTA3MWY1LAorCTB4MDAxMDc1YmYsIDB4MDAxMDc3MDAsIDB4MDAxMDcxZjUsIDB4MDAxMDc3MzUsCisJMHgwMDEwNzc4OCwgMHgwMDEwNzFmNSwgMHgwMDEwNzIwYywgMHgwMDEwNzI2NSwKKwkweDAwMTA3MjcyLCAweDAwMTA3MWY1LCAweDAwMTA3NDA2LCAweDAwMTA3MWY1LAorCTB4MDAxMDcyYjksIDB4MDAxMDcyYzQsIDB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsCisJMHgwMDEwNzIyMCwgMHgwMDEwNzI0NSwgMHgwMDEwNzdjNywgMHgwMDEwNzgwOCwKKwkweDAwMTA3ODJlLCAweDAwMTA3MWY1LCAweDAwMTA3MWY1LCAweDAwMTA3MWY1LAorCTB4MDAxMDc3ZmMsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDQwMWZhYzUsCisJMHg1OTMyNTgwOCwgMHg1OTJjMDAwOSwgMHg0ODAxYTAwNiwgMHg1OTJjMDAwYSwKKwkweDQ4MDFhMDA3LCAweDU5MmMwMDBiLCAweDQ4MDFhMDA4LCAweDU5MmMwMDBjLAorCTB4NDgwMWEwMDksIDB4NTkyYzAwMGQsIDB4NDgwMWEwMGEsIDB4NDk3OWEwMGIsCisJMHg1OTJjMDgwOSwgMHg4MjA0MGQwMCwgMHgwMDAwMGZmZiwgMHg4MDA0MDkwNCwKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDAyMDFmMDAwLCAweDAwMTA3OGJjLAorCTB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsIDB4MDQwMWZhYWUsIDB4NGQyYzAwMDAsCisJMHg0YTAxYTAwNiwgMHgwNTAwMDAwMCwgMHg1OTMyNTgwOCwgMHg1OTJjMDAwOSwKKwkweDQ4MDFhMDA3LCAweDU5MmMwMDBhLCAweDQ4MDFhMDA4LCAweDU5MmMwMDBiLAorCTB4NDgwMWEwMDksIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4NDIwMDEwMDAsCisJMHgwMDAwZGMwMCwgMHg1YzAyNTgwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzhiYywKKwkweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRkMmMwMDAwLAorCTB4MDQwMWZhOTgsIDB4NTkzMjU4MDgsIDB4NTkzMDA0MGIsIDB4ODAwMDAwYzIsCisJMHg0MjAwYTgwMCwgMHgwMDEwYjU0YiwgMHg1OTJjYjIwNSwgMHg4MzJjYTQwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDQwNTgwMDAwLAorCTB4ODA1NGFjMDAsIDB4NTkyYzAwMDEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDMsCisJMHg0MDAyNTgwMCwgMHgwNDAxZjdmNSwgMHg0MjAwYTAwMCwgMHgwMDEwYjU0YiwKKwkweDQwNTBhODAwLCAweDU5MzBiNDBiLCAweDAyMDFmODAwLCAweDAwMTBhYjI4LAorCTB4NTkzMDBjMGIsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4NWMwMjU4MDAsCisJMHg1YzAwYTgwMCwgMHg1YzAwYjAwMCwgMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwKKwkweDAwMTA3OGJjLCAweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLAorCTB4NGQyYzAwMDAsIDB4NDIwMzQ4MDAsIDB4MDAxMGI1NDQsIDB4MDQwMWZhN2YsCisJMHg1OTMyNTgwOCwgMHg0YTAyNTgwNSwgMHgwMjAwMDAwMCwgMHg1OTJjMDgwMiwKKwkweDgyZDBhYzAwLCAweDAwMDAwMDA2LCAweDU5MmNiMDExLCAweDgzMmNhNDAwLAorCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NDA1ODAwMDAsCisJMHg4MDU0YWMwMCwgMHg1OTJlNTgwMSwgMHg0MTc4MDAwMCwgMHg4MTJlNWQ0MCwKKwkweDA0MDIwN2Y2LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDVjMDI1ODAwLAorCTB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsIDB4NWMwMGEwMDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzhiYywgMHgwNDAxZmE1NywgMHg0YTAxYTAwNiwgMHg3ODAwMDAwMCwKKwkweDU5MzAwMDFjLCAweDg0MDAwMWMwLCAweDQ4MDFhNDA3LCAweDQ5NzlhMjA3LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwNzhiYywgMHg0YzU4MDAwMCwgMHg0YzU0MDAwMCwKKwkweDRjNTAwMDAwLCAweDA0MDFmYTU1LCAweDRhMDFhMDA2LCAweDAyMDAwMDAwLAorCTB4NTlhODAwMDIsIDB4NDgwMWEwMDgsIDB4NTlhODAwMDMsIDB4NDgwMWEwMDksCisJMHg1OWE4MDAwMCwgMHg0ODAxYTAwYSwgMHg1OWE4MDAwMSwgMHg0ODAxYTAwYiwKKwkweDU5MzAwMDFjLCAweDgyMDAwZDgwLCAweDAwMDBlMDAwLCAweDA0MDAwMDE2LAorCTB4ODIwMDBkODAsIDB4MDAwMGRmMDAsIDB4MDQwMDAwMDYsIDB4NGEwMWE0MDcsCisJMHgwMDAwMDAxMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwgMHgwNDAxZjAyNywKKwkweDRhMDNjODQwLCAweDAwMTBiNGViLCAweDRhMDNjODQyLCAweDAwMDAwMDBkLAorCTB4NDIwMDE4MDAsIDB4MDAxMGI0ZWIsIDB4MDIwMWY4MDAsIDB4MDAxMDA3YWYsCisJMHg0MjAwMDAwMCwgMHgwMDAwZGYwMCwgMHg0MjAwYTAwMCwgMHgwMDEwYjRlYiwKKwkweDA0MDFmMDBkLCAweDRhMDNjODQwLCAweDAwMTBiNGY4LCAweDRhMDNjODQyLAorCTB4MDAwMDAwMGQsIDB4NDIwMDE4MDAsIDB4MDAxMGI0ZjgsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdhZiwgMHg0MjAwMDAwMCwgMHgwMDAwZTAwMCwgMHg0MjAwYTAwMCwKKwkweDAwMTBiNGY4LCAweDgyMDAwNTQwLCAweDAwMDAwMDEwLCAweDQ4MDFhNDA3LAorCTB4NGEwMWEyMDcsIDB4MDAwMDAwMzQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGQsCisJMHg4MmQwYWMwMCwgMHgwMDAwMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKKwkweDQyMDAwODAwLCAweDAwMDAwMDEzLCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLAorCTB4NWMwMGEwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzhiYywgMHgwNDAxZmEwMywgMHg0YTAxYTAwNiwgMHg2MzAwMDAyOCwKKwkweDU5MzAwMDFjLCAweDQ4MDFhMDA3LCAweDQyMDAwODAwLCAweDAwMDAwMDAyLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDc4YmMsCisJMHgwNDAxZmEwNiwgMHg0MTc4MDAwMCwgMHg0MTc4MDgwMCwgMHg0MjAwMjAwMCwKKwkweDAwMDgwMDAwLCAweDBjMDFmODFiLCAweDgwMDAwMDAwLCAweDgwMDQwODAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMGMsIDB4NTk4NDE4MDIsIDB4OGMwYzFkMDAsCisJMHgwNDAyMDAwOCwgMHg0MjAwMjAwMCwgMHgwMDA1MDAwMCwgMHgwYzAxZjgxMSwKKwkweDgwMDAwMDAwLCAweDgwMDQwODAwLCAweDgyMDgxNDAwLCAweDAwMDAwMDA0LAorCTB4ODIwODA1NDAsIDB4MDIwMDAwMDAsIDB4NDgwMWEwMDYsIDB4ODAwNDA4ZTAsCisJMHg1OTMwMDAxYywgMHg4MDA0MDU0MCwgMHg0ODAxYTAwNywgMHg4MDA4MDkwNCwKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDAyMDFmMDAwLCAweDAwMTA3OGJjLAorCTB4MDAxMDcyZTksIDB4MDAxMDcyZWIsIDB4MDAxMDcyZWQsIDB4MDAxMDcyZWYsCisJMHgwMDEwNzJmMSwgMHg0ODExYTAwOCwgMHgxYzAxZjAwMCwgMHg0ODExYTAwOSwKKwkweDFjMDFmMDAwLCAweDQ4MTFhMDBhLCAweDFjMDFmMDAwLCAweDQ4MTFhMDBiLAorCTB4MWMwMWYwMDAsIDB4NDgxMWEwMGMsIDB4MWMwMWYwMDAsIDB4NGEwMjYwMDksCisJMHgwMDEwYmUwZCwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDgwMDAwMGQwLCAweDQyMDI2ODAwLCAweDAwMTBiZTBkLCAweDQ4MDI2YTEyLAorCTB4MDQwMWZhM2IsIDB4NDE3ODA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDVjMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwNzhiYywgMHgwNDAxZjliYSwgMHg0YTAxYTAwNiwKKwkweDUyMDAwMDAwLCAweDQ5NzlhMDA3LCAweDU5OWMwMDE3LCAweDhjMDAwNTAwLAorCTB4MDQwMDAwMDUsIDB4NTk5YzA0MDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE1ZGEsCisJMHg0ODA1YTAwNywgMHg1OWE4MDAwMiwgMHg0ODAxYTAwOCwgMHg1OWE4MDAwMywKKwkweDQ4MDFhMDA5LCAweDU5YTgwMDAwLCAweDQ4MDFhMDBhLCAweDU5YTgwMDAxLAorCTB4NDgwMWEwMGIsIDB4NTlhODAwMTAsIDB4NDgwMWEwMGMsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNywgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwKKwkweDAwMTA3OGJjLCAweDRhMDI2MjAyLCAweDAwMDBmZmZmLCAweDA0MDFmOTlkLAorCTB4NGEwMWEwMDYsIDB4MDUwMDAwMDAsIDB4NTlhODAwMTAsIDB4NDgwMWEwMDcsCisJMHg1OWE4MDAwMiwgMHg1OWE4MDgwMywgMHg0ODAxYTAwOCwgMHg0ODA1YTAwOSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDc4YmMsIDB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsCisJMHgwNDAxZjk4YywgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0OGY2LCAweDVjMDI3ODAwLCAweDRhMDFhMDA2LCAweDAzMDAwMDAwLAorCTB4NTkzNDA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMjAwNmUsCisJMHg0YTAxYTAwNiwgMHgwNDAwMDAwMCwgMHg4MWE0MDgwMCwgMHg0YTAwMDgwMCwKKwkweDIyZmZmZmZlLCAweDU5MzQwMDBhLCAweDg0MDAwNTAwLCAweDQ4MDI2ODBhLAorCTB4NTljNDEwMDIsIDB4ODQwODE1MGMsIDB4NDgwYjg4MDIsIDB4NTlhODAwMjYsCisJMHg4YzAwMDUwOCwgMHgwNDAwMDAxMCwgMHg1OWE4MDAyYSwgMHg0ODAxYTAwNywKKwkweDU5YTgwMDJiLCAweDgyMDAwNTAwLCAweGZmZmYyMDAwLCAweDU5OWMwODE4LAorCTB4OGMwNDBkMTYsIDB4MDQwMDAwMDIsIDB4ODQwMDA1NmEsIDB4NDgwMWEwMDgsCisJMHg0YTAxYTAwOSwgMHgwMDAwMjcxMCwgMHg1OWE4MDAyZCwgMHg0ODAxYTAwYSwKKwkweDA0MDFmMDM5LCAweDU5YTgwMDJhLCAweDQ4MDFhMDA3LCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMjAwMDksIDB4NDk3Yjg4ODAsIDB4ODIwMDA1MDAsCisJMHgwMDAwZmZmZiwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTYwNiwKKwkweDVjMDAwMDAwLCAweDQ4MDM4ODgwLCAweDU5YTgwMDJiLCAweDAyMDFmODAwLAorCTB4MDAxMDUxM2IsIDB4MDQwMjAwMDQsIDB4ODIwMDA1MDAsIDB4MzdmZmZmZmYsCisJMHgwNDAxZjAwMywgMHg4MjAwMDUwMCwgMHgzZmZmZmZmZiwgMHg1OTljMDgxOCwKKwkweDhjMDQwZDE2LCAweDA0MDAwMDAyLCAweDg0MDAwNTZhLCAweDU5YTgwODA1LAorCTB4OGMwNDBkMTAsIDB4MDQwMDAwMTksIDB4NTkzMDBjMDMsIDB4ODIwNDE1ODAsCisJMHgwMDAwMDA1MSwgMHgwNDAwMDAxNSwgMHg4MjA0MTU4MCwgMHgwMDAwMDAzMSwKKwkweDA0MDAwMDEyLCAweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDQsIDB4NDIwMGEwMDAsIDB4MDAxMGI4ZmEsCisJMHg4MmQwYWMwMCwgMHgwMDAwMDAxZiwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYjE3LCAweDVjMDAwMDAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAorCTB4NWMwMGIwMDAsIDB4ODQwMDA1N2EsIDB4NDgwMWEwMDgsIDB4NDk3OWEwMDksCisJMHg0OTc5YTAwYSwgMHg1OWE4MDAwMiwgMHg1OWE4MDgwMywgMHg0ODAxYTAwYiwKKwkweDQ4MDVhMDBjLCAweDU5YTgwMDAwLCAweDU5YTgwODAxLCAweDQ4MDFhMDBkLAorCTB4NDgwNWEwMGUsIDB4NDk3OWEwMGYsIDB4NDk3OWEwMTAsIDB4NDk3OWEwMTEsCisJMHg0OTc5YTAxMiwgMHg0OTc5YTAxMywgMHg0OTc5YTAxNCwgMHg0OTc5YTAxNSwKKwkweDQ5NzlhMDE2LCAweDU5YTgwMDJlLCAweDg0MDAwNTc2LCAweDQ4MDFhMDE3LAorCTB4NTlhODAwMmYsIDB4NDgwMWEwMTgsIDB4NDk3OWEwMTksIDB4NDk3OWEwMWEsCisJMHgwNDAxZjA0MywgMHg1OWE4MDAyNiwgMHg4YzAwMDUwOCwgMHgwNDAwMDAwZCwKKwkweDU5YTgwMDJhLCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDU5YzQwODgwLAorCTB4ODAwNDBkODAsIDB4MDQwMDAwMDcsIDB4NDk3Yjg4ODAsIDB4NGMwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTYwNiwgMHg1YzAwMDAwMCwgMHg0ODAzODg4MCwKKwkweDU5YTgwMDJhLCAweDQ4MDFhMDA3LCAweDRjNjQwMDAwLCAweDRkMmMwMDAwLAorCTB4NTlhOGM4MmIsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMGQsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywgMHgwNDAyMDAwYSwgMHg1OTJjMDIwNywKKwkweDhjMDAwNTBlLCAweDA0MDAwMDA3LCAweDgyNjRjZDAwLCAweDAwMDBmZmZmLAorCTB4NTkyYzAwMDksIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODA2NGNkNDAsCisJMHg0ODY1YTAwOCwgMHg1YzAyNTgwMCwgMHg1YzAwYzgwMCwgMHg1OWE4MDAyYywKKwkweDQ4MDFhMDA5LCAweDU5YTgwMDJkLCAweDQ4MDFhMDBhLCAweDU5YTgwMDAyLAorCTB4NTlhODA4MDMsIDB4NDgwMWEwMGIsIDB4NDgwNWEwMGMsIDB4NTlhODAwMDAsCisJMHg1OWE4MDgwMSwgMHg0ODAxYTAwZCwgMHg0ODA1YTAwZSwgMHg0OTc5YTAwZiwKKwkweDQ5NzlhMDEwLCAweDQ5NzlhMDExLCAweDQ5NzlhMDEyLCAweDQ5NzlhMDEzLAorCTB4NDk3OWEwMTQsIDB4NDk3OWEwMTUsIDB4NDk3OWEwMTYsIDB4NTlhODAwMmUsCisJMHg0ODAxYTAxNywgMHg1OWE4MDAyZiwgMHg0ODAxYTAxOCwgMHg1OWE4MDAzMCwKKwkweDQ4MDFhMDE5LCAweDU5YTgwMDMxLCAweDQ4MDFhMDFhLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMWQsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzhiYywgMHgwNDAxZjhjYiwgMHg0YTAxYTAwNiwgMHg1MDAwMDAwMCwKKwkweDA0MDFmN2I1LCAweDA0MDFmOGM3LCAweDRhMDFhNDA2LCAweDIxMDAwMDEwLAorCTB4NGEwMWEyMDYsIDB4MDAwMDAwMTQsIDB4NDk3OWEwMDcsIDB4NDk3OWEwMDgsCisJMHg0OTc5YTAwOSwgMHg0OTc5YTAwYSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDAyMDFmMDAwLCAweDAwMTA3OGJjLAorCTB4MDQwMWY4YmYsIDB4MDQwMWYwMDIsIDB4MDQwMWY4YzQsIDB4NGEwMWEwMDYsCisJMHgwMjAwMDAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwKKwkweDAwMDBkYzAwLCAweDAyMDFmMDAwLCAweDAwMTA3OGJjLCAweDA0MDFmOGJiLAorCTB4NGEwMWEwMDYsIDB4MDIwMDAwMDAsIDB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAzMSwgMHgwNDAyMDc5NCwgMHg4MWE0MDgwMCwgMHg0YTAwMDgwMSwKKwkweDAwZmZmZmZlLCAweDA0MDFmNzJiLCAweDA0MDFmOGIwLCAweDRhMDFhMDA2LAorCTB4MDEwMDAwMDAsIDB4NTkzMDA0MWEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDMsCisJMHg0ODAxYTQwNywgMHgwNDAxZjAwMywgMHg0YTAxYTQwNywgMHgwMDAwMDAwMywKKwkweDU5MzAwMjFhLCAweDgwMDAwNTQwLCAweDA0MDAwMDAzLCAweDQ4MDFhMjA3LAorCTB4MDQwMWYwMDMsIDB4NGEwMWEyMDcsIDB4MDAwMDJhMDAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMiwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwKKwkweDAwMTA3OGJjLCAweDRhMDI2MjAyLCAweDAwMDBmZmZmLCAweDA0MDFmODg5LAorCTB4NGEwMWE0MDYsIDB4MDAwMDIwMTAsIDB4NGEwMWEyMDYsIDB4MDAwMDAwMTQsCisJMHg0YTAxYTQwNywgMHgwMDAwMDgwMCwgMHg0YTAxYTIwNywgMHgwMDAwMjAwMCwKKwkweDgwMDAwNTgwLCAweDU5OWMwODE3LCAweDhjMDQwZDBhLCAweDA0MDIwMDAzLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMjAsIDB4OGMwNDBkMDgsIDB4MDQwMDAwMDMsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAxMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMiwKKwkweDU5MzQwODBhLCAweDhjMDQwZDE0LCAweDA0MDAwMDA1LCAweDgyMDQwZDAwLAorCTB4MDAwMDAzODAsIDB4ODAwNDA1NDAsIDB4MDQwMWYwMDYsIDB4NTk5YzA4MTgsCisJMHg4YzA0MGQxOCwgMHgwNDAwMDAwMywgMHg4MjAwMDU0MCwgMHgwMDAwMDM4MCwKKwkweDA0MDFmMDNjLCAweDA0MDFmODc1LCAweDRhMDFhNDA2LCAweDAwMDAwMjEwLAorCTB4NGEwMWEyMDYsIDB4MDAwMDAwMTQsIDB4NGEwMWE0MDcsIDB4MDAwMDA4MDAsCisJMHg1OTM0MDAwYSwgMHg4YzAwMDUxNiwgMHgwNDAwMDAxNCwgMHg1OTM0MGMwNSwKKwkweDgyMDQwNTAwLCAweDAwMDAwMDMwLCAweDA0MDAwMDEzLCAweDU5MzQwYTA1LAorCTB4ODIwNDA1MDAsIDB4MDAwMGMwMDAsIDB4MDQwMjAwMDksIDB4OGMwNDBkMWEsCisJMHgwNDAwMDAwNCwgMHg0YTAxYTIwNywgMHgwMDAwMjEwMCwgMHgwNDAxZjAwYywKKwkweDRhMDFhMjA3LCAweDAwMDAwMTAwLCAweDA0MDFmMDA5LCAweDRhMDFhMjA3LAorCTB4MDAwMDA0MDAsIDB4MDQwMWYwMDYsIDB4NGEwMWEyMDcsIDB4MDAwMDA3MDAsCisJMHgwNDAxZjAwMywgMHg0YTAxYTIwNywgMHgwMDAwMDgwMCwgMHg4MDAwMDU4MCwKKwkweDU5OWMwODE3LCAweDhjMDQwZDBhLCAweDA0MDIwMDAzLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMjAsIDB4OGMwNDBkMDgsIDB4MDQwMDAwMDMsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAxMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMiwgMHg1OTM0MGEwMCwKKwkweDhjMDQwZDBlLCAweDA0MDAwMDBiLCAweDg0MDAwNTUwLCAweDU5OWMxMDE3LAorCTB4OGMwODE1MGEsIDB4MDQwMjAwMDQsIDB4OGMwNDBkMGEsIDB4MDQwMDAwMDIsCisJMHg4NDAwMDU0ZSwgMHg4YzA0MGQxYywgMHgwNDAwMDAwMiwgMHg4NDAwMDU1MiwKKwkweDQ4MDFhMjBhLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDQyMDAxMDAwLAorCTB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDc4YmMsIDB4MDQwMWY4MzMsCisJMHg0YTAxYTAwNiwgMHgwMjEwMDAxNCwgMHg0YTAxYTAwNywgMHgwMTAwMDAwMCwKKwkweDQ5NzlhMDA4LCAweDQ5NzlhMDA5LCAweDQ5NzlhMDBhLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDUsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzhiYywgMHgwNDAxZjgyNSwgMHg0YTAxYTAwNiwgMHgwMjAwMDAwMCwKKwkweDA0MDFmNjVkLCAweDQ5MzNjODU3LCAweDA0MDFmODIwLCAweDRhMDFhMDA2LAorCTB4MDEwMDAwMDAsIDB4NGEwMWE0MDcsIDB4MDAwMDAwMGIsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMiwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwKKwkweDAwMTA3OGJjLCAweDQyMDA1MDAwLCAweDMyMDAwMDAwLCAweDQyMDA2MDAwLAorCTB4MDgyOTAwMDAsIDB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsIDB4MDQwMWYzZGYsCisJMHg0MjAwNTAwMCwgMHgyMjAwMDAwMCwgMHg0MjAwNjAwMCwgMHgwMTI5MDAwMCwKKwkweDQxNzg2ODAwLCAweDQxNzg3ODAwLCAweDA0MDFmM2Q4LCAweDQyMDA1MDAwLAorCTB4MzMwMDAwMDAsIDB4NDIwMDYwMDAsIDB4MDg5ODAwMDAsIDB4NDE3ODY4MDAsCisJMHg0MTc4NzgwMCwgMHgwNDAxZjNkMSwgMHg0MjAwNTAwMCwgMHgyMzAwMDAwMCwKKwkweDQyMDA2MDAwLCAweDAxOTgwMDAwLCAweDQxNzg2ODAwLCAweDQxNzg3ODAwLAorCTB4MDQwMWYzY2EsIDB4NTkzMDA0MDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwODUsCisJMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMGM4MCwgMHgwMDAwMDA5MywKKwkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwNDgwLCAweDAwMDAwMDg1LAorCTB4MGMwMWYwMDEsIDB4MDAxMDc0ZWIsIDB4MDAxMDc0ZWQsIDB4MDAxMDc0ZmIsCisJMHgwMDEwNzRlYiwgMHgwMDEwNzRlYiwgMHgwMDEwNzRlYiwgMHgwMDEwNzRlYiwKKwkweDAwMTA3NGViLCAweDAwMTA3NGViLCAweDAwMTA3NGViLCAweDAwMTA3NGViLAorCTB4MDAxMDc0ZWIsIDB4MDAxMDc0ZWIsIDB4MDAxMDc1MDYsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywgMHgwNDAxZjg1MCwgMHg1OTMwMDQwMiwKKwkweDQ4MDFhNDA3LCAweDU5MzAwMDFjLCAweDQ4MDFhMjA3LCAweDQ5NzlhNDA4LAorCTB4NGEwMWEyMDgsIDB4MDAwMGZmZmYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjNjMiwgMHg0OTMzYzg1NywKKwkweDA0MDFmODRlLCAweDRhMDFhNDA2LCAweDAwMDAwMDAzLCAweDRhMDFhMjA2LAorCTB4MDAwMDAzMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsCisJMHgwMDAwZGMwMCwgMHgwNDAxZjNiNywgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKKwkweDQ5MzNjODU3LCAweDQ5MmZjODU3LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkzNDBhMTIsIDB4ODIwNDBkMDAsIDB4MDAwMGZmMDAsCisJMHg1OTJjMDAwYSwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg5MDAwMDFjMCwKKwkweDgwMDQwNTQwLCAweDgyMDAwNTQwLCAweDAwMDAwMDExLCAweDQ0MDM0ODAwLAorCTB4ODFhNWEwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDksIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMywgMHg1OTJjMDAwOSwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwKKwkweDgyMDAxZDgwLCAweDg0MDAwMDAwLCAweDA0MDAwMDA5LCAweDgyMDAxZDgwLAorCTB4ODUwMDAwMDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwgMHg4MzJjMWMwMCwKKwkweDAwMDAwMDA5LCAweDUwMGMwMDAwLCAweDQ0MDFhMDAwLCAweDgwMGMxODAwLAorCTB4ODBkMWEwMDAsIDB4ODAwODEwNDAsIDB4MDQwMjA3ZmIsIDB4NDIwMDEwMDAsCisJMHgwMDAwZGMwMCwgMHg1YzAyNTgwMCwgMHgwNDAxZjM4NiwgMHg0MjAwNTAwMCwKKwkweDgxMDAwMDAwLCAweDQyMDA2MDAwLCAweDAwMDkwMDAwLCAweDQxNzg2ODAwLAorCTB4NDE3ODc4MDAsIDB4MDQwMWYzNWQsIDB4NDIwMDUwMDAsIDB4ODQwMDAwMDAsCisJMHg0MjAwNjAwMCwgMHgwMDk5MDAwMCwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA1LCAweDA0MDAwMDAyLCAweDg0MzA2NTJlLCAweDQxNzg2ODAwLAorCTB4NDE3ODc4MDAsIDB4MDQwMWYzNTEsIDB4NDIwMDUwMDAsIDB4ODUwMDAwMDAsCisJMHg0MjAwNjAwMCwgMHgwMDk5MDAwMCwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA1LCAweDA0MDAwMDAyLCAweDg0MzA2NTJlLCAweDQxNzg2ODAwLAorCTB4NDE3ODc4MDAsIDB4MDQwMWYzNDUsIDB4NTkzMDA0MDMsIDB4ODIwMDBjODAsCisJMHgwMDAwMDA1MywgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDRiLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDU5MzI2ODA5LAorCTB4NTkzNjhjMDMsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsIDB4MDAxMDc1ZGEsCisJMHgwMDEwNzVlMiwgMHgwMDEwNzVlYSwgMHgwMDEwNzVmMiwgMHgwMDEwNzU2YiwKKwkweDAwMTA3NTZiLCAweDAwMTA3NTZiLCAweDAwMTA3NWQyLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NDIwMDUwMDAsIDB4MDYwMDAwMDAsIDB4NDIwMDYwMDAsCisJMHgwODI5MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwgMHgwNDAxZjMyNywKKwkweDQ5MzNjODU3LCAweDA0MDFmZjQ3LCAweDRhMDFhMDA2LCAweDEyMDAwMDAwLAorCTB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMDMsCisJMHg1OTM0MDAwMiwgMHgwNDAxZjAwMiwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwKKwkweDAwZmZmZmZmLCAweDQ4MDFhMDA3LCAweDU5MzAwNDE5LCAweDQ4MDFhNDA4LAorCTB4NTkzMDAyMTksIDB4NDgwMWEyMDgsIDB4NDk3OWEwMDksIDB4NDk3OWEwMGEsCisJMHg0OTc5YTAwYiwgMHg0OTc5YTAwYywgMHg0OTc5YTAwZCwgMHg0OTc5YTAwZSwKKwkweDQ5NzlhMDBmLCAweDQ5NzlhMDEwLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDQwMWYzMmEsIDB4MDQwMWZmMjksCisJMHg0YTAxYTAwNiwgMHgwZjAwMDAwMCwgMHg1OTMwMDAxYywgMHg0ODAxYTAwNywKKwkweDQyMDAwODAwLCAweDAwMDAwMDAyLCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLAorCTB4MDQwMWYzMjAsIDB4MDQwMWZmMmQsIDB4NGEwMWEwMDYsIDB4MDIwMDAwMDAsCisJMHg1OWM0MDA4NSwgMHg0ODAzMTAwNCwgMHg1OTg4MDAwMCwgMHg0ODAxYTAwNywKKwkweDU5ODgwMDAxLCAweDQ4MDFhMDA4LCAweDU5ODgwMDAyLCAweDQ4MDFhMDA5LAorCTB4NTk4ODAwMDMsIDB4NDgwMWEwMGEsIDB4NTk4ODAwMDQsIDB4NDgwMWEwMGIsCisJMHg1OTg4MDAwNSwgMHg0ODAxYTAwYywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMzBhLCAweDRhMDI2MjAyLAorCTB4MDAwMGZmZmYsIDB4MDQwMWZmMDcsIDB4NGEwMWEwMDYsIDB4NjIwMDAwMDAsCisJMHg1OTMwMDAxYywgMHg0ODAxYTAwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMmZlLCAweDA0MDFmZWZkLAorCTB4NTkzMDA4MDgsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsCisJMHg4MjA0YTQwMCwgMHgwMDAwMDAwYSwgMHg1OTMwYjAxYywgMHg4MmQwYWMwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5MzAwODFjLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHgwNDAxZjJlYiwgMHgwNDAxZmY5YiwgMHg1OTMwMDAxNywKKwkweDQ4MDFhMDA2LCAweDU5MzAwMDE4LCAweDQ4MDFhMDA3LCAweDRhMDFhMDA4LAorCTB4MDAwMDEwMDAsIDB4MDQwMWYwMjAsIDB4MDQwMWZmOTMsIDB4NTkzMDAwMTcsCisJMHg0ODAxYTAwNiwgMHg1OTMwMDAxOCwgMHg0ODAxYTAwNywgMHg0YTAxYTAwOCwKKwkweDAwMDA0MDAwLCAweDA0MDFmMDE4LCAweDA0MDFmZjhiLCAweDU5MzAwMDE3LAorCTB4NDgwMWEwMDYsIDB4NTkzMDAwMTgsIDB4NDgwMWEwMDcsIDB4NGEwMWEwMDgsCisJMHgwMDAwMjAwMCwgMHgwNDAxZjAxMCwgMHgwNDAxZmY4MywgMHg1OTMwMDAxNywKKwkweDQ4MDFhMDA2LCAweDU5MzAwMDE4LCAweDQ4MDFhMDA3LCAweDRhMDFhMDA4LAorCTB4MDAwMDA0MDAsIDB4MDQwMWYwMDgsIDB4MDQwMWZmN2IsIDB4NTkzMDAwMTcsCisJMHg0ODAxYTAwNiwgMHg1OTMwMDAxOCwgMHg0ODAxYTAwNywgMHg0YTAxYTAwOCwKKwkweDAwMDAwMjAwLCAweDQ5NzlhMDA5LCAweDQ5NzlhMDBhLCAweDQ5NzlhMDBiLAorCTB4NDk3OWEwMGMsIDB4NDk3OWEwMGQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDgsCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjJiYSwgMHgwNDAxZmVjNywKKwkweDRhMDFhMDA2LCAweDAyMDAwMDE0LCAweDQ5NzlhNDA3LCAweDQ5NzlhMjA3LAorCTB4NTlhODAwM2EsIDB4NDgwMWEwMDgsIDB4NTlhODAwM2IsIDB4NDgwMWEwMDksCisJMHg0YTAxYTAwYSwgMHgwMDA0Nzg3OCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMmFhLCAweDA0MDFmZWI3LAorCTB4NGEwMWEwMDYsIDB4MDIxNDAwMTgsIDB4NGEwMWE0MDcsIDB4MDAwMDA4MDAsCisJMHg1OTMwMDAxYywgMHg4MjAwMGQwMCwgMHhmZjAwMDAwMCwgMHg5MDA0MDljMCwKKwkweDQ4MDVhMjA3LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDQ4MDFhMDBhLAorCTB4NDk3OWE0MDgsIDB4NDk3OWEyMDgsIDB4NDk3OWE0MDksIDB4NDk3OWEyMDksCisJMHg0OTc5YTAwYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwgMHg0MjAwMTAwMCwKKwkweDAwMDBkYzAwLCAweDA0MDFmMjkzLCAweDQ4MDNjODU2LCAweDRkMzgwMDAwLAorCTB4NGQxYzAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMzUsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTNiYSwgMHgwNDAyMDAxZSwgMHgwNDAxZmU4YSwgMHg0YTAxYTAwNiwKKwkweDEzMDAwMDAwLCAweDU5MzIzODFlLCAweDU5MWMwMDE5LCAweDQ4MDFhMDA1LAorCTB4NTkxYzA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDcsCisJMHg1OTMwMDgwOSwgMHg1ODA0MDAwMiwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKKwkweDQ4MDFhMDA3LCAweDA0MDFmMDAzLCAweDU5YTgwMDEwLCAweDQ4MDFhMDA3LAorCTB4NTkzMDA0MTksIDB4NDgwMWE0MDgsIDB4NTkzMDAyMTksIDB4NDgwMWEyMDgsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwKKwkweDVjMDIzODAwLCAweDVjMDI3MDAwLCAweDA0MDFmMjZlLCAweDAyMDFmODAwLAorCTB4MDAxMDZjNTUsIDB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzdkLCAweDVjMDIzODAwLCAweDVjMDI3MDAwLCAweDAyMDFmMDAwLAorCTB4MDAxMDZjNGIsIDB4NDgwM2M4NTYsIDB4NGQyYzAwMDAsIDB4NGQxYzAwMDAsCisJMHg1OTMyMzgxZSwgMHg4MTFlMzljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDU5MWMwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwMDBkLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMzYsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAzNywgMHg0YTAyNjQxYSwgMHgwMDAwMDAwMywgMHg0YTAyNjIxYSwKKwkweDAwMDAxNzAwLCAweDVjMDIzODAwLCAweDVjMDI1ODAwLCAweDA0MDFmMDY0LAorCTB4MDQwMWY4NGIsIDB4NDIwMDEwMDAsIDB4NDAwMDAwMDAsIDB4NTkxYzAyMDMsCisJMHg1OTFjMDgwNCwgMHg4YzA0MGQzZSwgMHgwNDAyMDAyMywgMHg4MjAwMGM4MCwKKwkweDAwMDAwMDBlLCAweDBjMDAxMDAzLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4MDAxMDc2OTEsIDB4MDAxMDc2OWQsIDB4MDAxMDc2OTMsIDB4MDAxMDc2OWQsCisJMHgwMDEwNzY5OSwgMHgwMDEwNzY5MSwgMHgwMDEwNzY5MSwgMHgwMDEwNzY5ZCwKKwkweDAwMTA3NjlkLCAweDAwMTA3NjkxLCAweDAwMTA3NjkxLCAweDAwMTA3NjkxLAorCTB4MDAxMDc2OTEsIDB4MDAxMDc2OTEsIDB4MDAxMDc2OWQsIDB4MDAxMDc2OTEsCisJMHgwMDEwNzY5ZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTFjMDQxNCwKKwkweDQ4MDNjODU3LCAweDhjMDAwNTE4LCAweDA0MDAwMDAzLCAweDhjMDAwNTEyLAorCTB4MDQwMDAwMDMsIDB4ODAwMDE1ODAsIDB4MDQwMWYwMDMsIDB4NDIwMDEwMDAsCisJMHgyMDAwMDAwMCwgMHg1OTFjMDAxNSwgMHg0ODAxYTAwYSwgMHgwNDAxZjAxOCwKKwkweDA0MDFmODFmLCAweDU5MWU1ODA4LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkyYzEwMGYsIDB4NTkxYzAwMTEsIDB4ODAwODA0ODAsCisJMHg0ODAxYTAwYSwgMHg1OTFjMDIwMywgMHg1OTFjMDgwNCwgMHg4YzA0MGQzZSwKKwkweDA0MDIwMDA3LCAweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDA3LAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsCisJMHg0MDAwMDAwMCwgMHgwNDAxZjAwMiwgMHg4MDAwMTU4MCwgMHg0ODA5YTAwYiwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA2LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLAorCTB4NWMwMjM4MDAsIDB4NWMwMjU4MDAsIDB4MDQwMWYxZmUsIDB4NDgwM2M4NTYsCisJMHgwNDAxZmUwYSwgMHg0YTAxYTAwNiwgMHgwMjAwMDAwMCwgMHg1OTMwMGMxOSwKKwkweDQ4MDVhNDA3LCAweDU5MzAwYTE5LCAweDQ4MDVhMjA3LCAweDU5YTgxMDEwLAorCTB4NTkzMDA4MDksIDB4NTgwNDE4MDIsIDB4ODIwYzFkMDAsIDB4MDBmZmZmZmYsCisJMHg1OTMwMDgxZSwgMHg1ODA0MDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDIwMDA0LCAweDQ4MDlhMDA4LCAweDQ4MGRhMDA5LCAweDA0MDFmMDAzLAorCTB4NDgwZGEwMDgsIDB4NDgwOWEwMDksIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHgwNDAxZmRmMiwgMHgwNDAxZjAwMywgMHg0ODAzYzg1NiwgMHgwNDAxZmRlOCwKKwkweDRhMDFhMDA2LCAweDAxMDAwMDAwLCAweDU5MzAwNDFhLCAweDQ4MDFhNDA3LAorCTB4NTkzMDAyMWEsIDB4NDgwMWEyMDcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjFkNiwgMHg0ODAzYzg1NiwKKwkweDRkMWMwMDAwLCAweDA0MDFmZGNjLCAweDRhMDFhMDA2LCAweDE0MDAwMDAwLAorCTB4NTkzMjM4MWUsIDB4NTkxYzAwMTksIDB4NDgwMWEwMDUsIDB4NTkzMDA0MTksCisJMHg0ODAxYTQwNywgMHg1OTMwMDIxOSwgMHg0ODAxYTIwNywgMHg1OTMwMDAxNSwKKwkweDQ4MDFhMDA4LCAweDU5MzAwMjE2LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAorCTB4ODQwMDAxYzAsIDB4NDgwMWE0MDksIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHg1YzAyMzgwMCwgMHgwNDAxZjFiZCwKKwkweDQ4MDNjODU2LCAweDA0MDFmODBiLCAweDU5MzAwNDFhLCAweDkwMDAwMWMwLAorCTB4NDgwMWEwMDUsIDB4MDQwMWY5ZWMsIDB4NDE3ODA4MDAsIDB4NDIwMDEwMDAsCisJMHgwMDAwNWMwMCwgMHgwNDAxZjliMywgMHgwMjAxZjAwMCwgMHgwMDEwNjA0ZCwKKwkweDQ4MDNjODU2LCAweDU5MzAwODE3LCAweDgyMDQxYzAwLCAweDAwMDAwMDA1LAorCTB4NDYwMzQ4MDAsIDB4MDAwMDAwMjEsIDB4NTgwNDA0MDQsIDB4ODIwMDA1MDAsCisJMHgwMDAwZjAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMzAwMCwgMHgwNDAwMDAwMywKKwkweDQ2MDM0ODAwLCAweDAwMDAwMDQxLCAweDgxYTVhMDAwLCAweDU4MGMwMDAxLAorCTB4ODIwMDBkMDAsIDB4MDBmZmZmZmYsIDB4ODIwNDBkNDAsIDB4YzIwMDAwMDAsCisJMHg0ODA1YTAwMCwgMHg1ODBjMDgwMCwgMHg4MjA0MTUwMCwgMHgwMGZmZmZmZiwKKwkweDgyMDAwNTAwLCAweGZmMDAwMDAwLCAweDgwMDgwNTQwLCAweDQ4MDFhMDAxLAorCTB4NTgwYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDBjMDAwMDAsIDB4ODIwMDA1MDAsCisJMHgwMGZkMDMwMCwgMHg0ODAxYTAwMiwgMHg1ODBjMDAwMywgMHg0ODAxYTAwMywKKwkweDU4MGMwNDA0LCAweDQ4MDFhNDA0LCAweDU4MGMwMjA0LCAweDQ4MDFhMjA0LAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAyOCwgMHgwNDAyMDAwOSwgMHg1OWE4MDAyNiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDI4LCAweDA0MDAwMDAzLCAweDQ5N2E2YTEyLCAweDA0MDFmMDAzLAorCTB4NGEwMjZhMTIsIDB4MDAwMGZmMDAsIDB4NDIwMDUwMDAsIDB4MjIwMDAwMDAsCisJMHg0MjAwNjAwMCwgMHgwMTM4MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwKKwkweDA0MDFmOTUyLCAweDU5MzAxMDA4LCAweDRhMDFhMDA2LCAweDU0MDAwMDAwLAorCTB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NTgwODBjMGEsCisJMHg4MDA0MDhmMCwgMHg4MDA0MDU0MCwgMHg0ODAxYTAwNywgMHg1ODA4MDAwYSwKKwkweDgyMDAwNTAwLCAweGZmMDAwMDAwLCAweDQ4MDFhMDA4LCAweDU5YTgwMDAyLAorCTB4NDgwMWEwMDksIDB4NTlhODAwMDMsIDB4NDgwMWEwMGEsIDB4NTlhODAwMDAsCisJMHg0ODAxYTAwYiwgMHg1OWE4MDAwMSwgMHg0ODAxYTAwYywgMHg1ODA4MDAwYywKKwkweDljMDAwMWMwLCAweDQ4MDFhMDBkLCAweDU4MDgwMDBkLCAweDljMDAwMWMwLAorCTB4NDgwMWEwMGUsIDB4NTgwODAwMGUsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMGYsCisJMHg1ODA4MDAwZiwgMHg5YzAwMDFjMCwgMHg0ODAxYTAxMCwgMHg1ODA4MDAxMCwKKwkweDljMDAwMWMwLCAweDQ4MDFhMDExLCAweDU4MDgwMDExLCAweDljMDAwMWMwLAorCTB4NDgwMWEwMTIsIDB4NTgwODAwMTIsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMTMsCisJMHg1ODA4MDAxMywgMHg5YzAwMDFjMCwgMHg0ODAxYTAxNCwgMHg1ODA4MDAxMCwKKwkweDljMDAwMWMwLCAweDQ4MDFhMDE1LCAweDU4MDgwMDExLCAweDljMDAwMWMwLAorCTB4NDgwMWEwMTYsIDB4NTgwODAwMTIsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMTcsCisJMHg1ODA4MDAxMywgMHg5YzAwMDFjMCwgMHg0ODAxYTAxOCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDEzLCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMTM1LAorCTB4NDgwM2M4NTYsIDB4NDIwMDUwMDAsIDB4MjIwMDAwMDAsIDB4NDIwMDYwMDAsCisJMHgwMTI5MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwgMHgwNDAxZjkwYiwKKwkweDU5MzAxMDA4LCAweDRhMDFhMDA2LCAweDU1MDAwMDAwLCAweDU4MDgwMDBiLAorCTB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NTgwODBjMGEsIDB4ODAwNDA4ZjAsCisJMHg4MDA0MDU0MCwgMHg0ODAxYTAwNywgMHg1ODA4MDgwYSwgMHg4MjA0MGQwMCwKKwkweGZmMDAwMDAwLCAweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4ODAwNDA1NDAsIDB4NDgwMWEwMDgsIDB4NTgwODAwMGMsIDB4OWMwMDAxYzAsCisJMHg0ODAxYTAwOSwgMHg1ODA4MDAwZCwgMHg5YzAwMDFjMCwgMHg0ODAxYTAwYSwKKwkweDU4MDgwMDBlLCAweDljMDAwMWMwLCAweDQ4MDFhMDBiLCAweDU4MDgwMDBmLAorCTB4OWMwMDAxYzAsIDB4NDgwMWEwMGMsIDB4NTlhODAwMDIsIDB4NDgwMWEwMGQsCisJMHg1OWE4MDAwMywgMHg0ODAxYTAwZSwgMHg1OWE4MDAwMCwgMHg0ODAxYTAwZiwKKwkweDU5YTgwMDAxLCAweDQ4MDFhMDEwLCAweDU4MDgwMDEwLCAweDQ4MDFhMDExLAorCTB4NTgwODAwMTEsIDB4NDgwMWEwMTIsIDB4NTgwODAwMTIsIDB4NDgwMWEwMTMsCisJMHg1ODA4MDAxMywgMHg0ODAxYTAxNCwgMHg0OTc5YTAxNSwgMHg0OTc5YTAxNiwKKwkweDQ5NzlhMDE3LCAweDQ5NzlhMDE4LCAweDQyMDAwODAwLCAweDAwMDAwMDEzLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDQwMWYwZjYsIDB4MDQwMWZkMDMsCisJMHg1OTMwMDAxYywgMHg4MDAwMDFjMCwgMHgwNDAwMDAwOCwgMHg0YTAxYTAwNiwKKwkweDAxMDAwMDAwLCAweDRhMDFhNDA3LCAweDAwMDAwMDAzLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMWYwMjgsIDB4NGEwMWEwMDYsIDB4MDIwMDAwMDAsCisJMHg0MTc4MDgwMCwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAwMywKKwkweDg0MDQwZDQyLCAweDA0MDFmMDBkLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLAorCTB4MDQwMjAwMDMsIDB4ODQwNDBkNGEsIDB4MDQwMWYwMDIsIDB4ODQwNDBkNDgsCisJMHg1OWE4MDAyNiwgMHg4YzAwMDUwNiwgMHgwNDAyMDAwMywgMHg4YzAwMDUwYSwKKwkweDA0MDAwMDAyLCAweDg0MDQwZDQ2LCAweDQ4MDVhMjA3LCAweDU5YzQwMDg1LAorCTB4NDgwMzEwMDQsIDB4NGM1ODAwMDAsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwNiwgMHg4Mzg4YTQwMCwgMHgwMDAwMDAwMCwKKwkweDgyZDBhYzAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LAorCTB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMGIwMDAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwOCwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjBjMSwKKwkweDA0MDFmY2MwLCAweDRhMDFhMDA2LCAweDU2MDAwMDAwLCAweDU5MzQwMDA2LAorCTB4NDgwMWEwMDcsIDB4NTkzNDAwMDcsIDB4NDgwMWEwMDgsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMywgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjBiNSwKKwkweDQ4MDNjODU2LCAweDA0MDFmY2MxLCAweDU5MzAwODFjLCAweDgwMDQwOWMwLAorCTB4MDQwMDAwMGUsIDB4ODIwNDA1ODAsIDB4MDAwMGZmZmYsIDB4MDQwMDAwMDQsCisJMHg4MjA0MDQ4MCwgMHgwMDAwMDAwNywgMHgwNDAyMTAwOCwgMHg0YTAxYTAwNiwKKwkweDAxMDAwMDAwLCAweDRhMDFhNDA3LCAweDAwMDAwMDAzLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMWYwMTIsIDB4NGEwMWEwMDYsIDB4MDIwMDAwMWMsCisJMHg0YTAxYTAwNywgMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwgMHgwMDEwYjRmMCwKKwkweDUwMDgwMDAwLCAweDljMDAwMWMwLCAweDQ4MDFhMDA5LCAweDU5YTgwMDEwLAorCTB4NDgwMWEwMGEsIDB4NTlhODAwMDIsIDB4NTlhODA4MDMsIDB4NDgwMWEwMGIsCisJMHg0ODA1YTAwYywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHg0MjAwMTAwMCwKKwkweDAwMDBkYzAwLCAweDA0MDFmMDhmLCAweDRkMmMwMDAwLCAweDA0MDFmYzhkLAorCTB4NTkzMjU4MDgsIDB4NTkyYzAwMDgsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsCisJMHg0ODAxYTAwMSwgMHg0YTAxYTAwNiwgMHg1MTAwMDAwMCwgMHg1YzAyNTgwMCwKKwkweDAyMDFmMDAwLCAweDAwMTA3MzQ0LCAweDQ4MDNjODU2LCAweDU5YTgwODEwLAorCTB4ODIwNDBkMDAsIDB4MDAwMDAwZmYsIDB4NTkzMjU4MDgsIDB4NTkzMjY4MDksCisJMHg1OWE4MzAyNiwgMHg4YzE4MzUwYSwgMHgwNDAyMDAwOCwgMHg4YzAwMDUwZSwKKwkweDA0MDIwMDA2LCAweDgwMDAxZDgwLCAweDU5YTgyMDEwLCAweDgyMTAyNTAwLAorCTB4MDAwMDAwZmYsIDB4MDQwMWYwMDEsIDB4NTkzMDA0MDYsIDB4NDgwM2M4NTcsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwOSwgMHgwNDAwMDAwNiwgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDBhLCAweDA0MDAwMDJlLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4NTkzMDAwMTUsIDB4OGMwMDA1MWUsIDB4MDQwMjAwMjAsIDB4NDIwMDUwMDAsCisJMHgwNDAwMDAwMCwgMHg0MjAwNjAwMCwgMHgwNTAwMDAwMCwgMHg1OTJjMDQwYSwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDMwLCAweDgwMDAwMGUwLCAweDgwMzA2NTQwLAorCTB4NTkzNDAwMGEsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDIsIDB4ODQzMDY1NDYsCisJMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwgMHgwNDAxZjgzMSwgMHg1OTMwMGMxNCwKKwkweDgwMDQwMDAwLCAweDQ4MDI2NDE0LCAweDQwMDQwMDAwLCAweDgwMDAwMGQwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMjAsIDB4NDgwMWE0MDMsIDB4ODMxODBkNDAsCisJMHgwMDAwMDAzOCwgMHg0MjAwMTAwMCwgMHgwMDAwYzkyMCwgMHgwNDAxZjg2MCwKKwkweDAyMDFmMDAwLCAweDAwMTA2MDUyLCAweDU5YTgwMDI2LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMjgsIDB4MDQwMDAwMDMsIDB4NDk3YTZhMTIsIDB4MDQwMWY3ZGMsCisJMHg0YTAyNmExMiwgMHgwMDAwZmYwMCwgMHgwNDAxZjdkOSwgMHg0MjAwNTAwMCwKKwkweDAyMDAwMDAwLCAweDQyMDA2MDAwLCAweDIwMjkwMDAwLCAweDQxNzg2ODAwLAorCTB4NDE3ODc4MDAsIDB4MDQwMWY4MTIsIDB4ODMxODBkNDAsIDB4MDAwMDAwMzgsCisJMHg0MjAwMTAwMCwgMHgwMDAwYzlhMCwgMHgwNDAxZjg0OSwgMHg0MjAwMDgwMCwKKwkweDAwMDAwN2QwLCAweDU5MzAwMDExLCAweDgyMDAwNTAwLCAweGZmZjAwMDAwLAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDFiNTgsCisJMHg0MTc4MTAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNjA1NCwgMHg0MjAxYTAwMCwKKwkweDAwMDAwMDAwLCAweDA0MDFmMDAzLCAweDQyMDFhMDAwLCAweDAwMDAwMDExLAorCTB4NTkzNDBhMTIsIDB4ODIwNDBkMDAsIDB4MDAwMGZmMDAsIDB4NTlhODAwMTAsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg5MDAwMDFjMCwgMHg4MDA0MDU0MCwKKwkweDgwZDAwNTQwLCAweDQ0MDM0ODAwLCAweDgxYTVhMDAwLCAweDU5MzQwMDAyLAorCTB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4ODAyODA1NDAsIDB4NDgwMWEwMDAsCisJMHg1OWE4MDAxMCwgMHg0ODAxYTAwMSwgMHg0ODMxYTAwMiwgMHg4MjM0MDU0MCwKKwkweDAwMDAwMDAwLCAweDQ4MDFhMDAzLCAweDU5MzAwNDAyLCAweDQ4MDFhNDA0LAorCTB4NTkzMDBhMDIsIDB4NDgwNWEyMDQsIDB4OGMzMDY1MmUsIDB4MDQwMDAwMDMsCisJMHg0ODA1YTQwNCwgMHg0ODAxYTIwNCwgMHg0ODNkYTAwNSwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRjMDQwMDAwLCAweDA0MDFmODIyLCAweDVjMDAwODAwLAorCTB4NDAwNDAwMDAsIDB4ODAwODE1NDAsIDB4ODAwMDAwYzQsIDB4ODIwMDA1NDAsCisJMHgwMDAwMjAwMCwgMHg0ODAzOTEwYSwgMHg1OWI0MDBmNiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDE4LCAweDA0MDIwN2ZkLCAweDRhMDM2OGYwLCAweDAwMTBiNTQ0LAorCTB4NGEwMzY4ZjEsIDB4MDAxMGI1NGIsIDB4NDgwYjY4ZjMsIDB4NGEwMzc4ZTQsCisJMHgwMDAwODAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNjA0ZCwgMHg0ODA3Yzg1NywKKwkweDQ4MGEyODAwLCAweDRjMDQwMDAwLCAweDA0MDFmODBhLCAweDVjMDAwODAwLAorCTB4NTliNDAwZjYsIDB4OGMwMDA1MGEsIDB4MDQwMjA3ZmUsIDB4NDlhNzY4ZjIsCisJMHg0ODA3NjhmNCwgMHg0YTAzNzhlNCwgMHgwMDAwODAwMCwgMHgxYzAxZjAwMCwKKwkweDRhMDM3OGU0LCAweDAwMDBjMDAwLCAweDU5YmMwMGU0LCAweDhjMDAwNTIwLAorCTB4MDQwMDAwMGMsIDB4NGEwMzc4ZTQsIDB4MDAwMDgwMDAsIDB4NDIwMDcwMDAsCisJMHgwMDAwMDNlOCwgMHg1OWJjMDBlNCwgMHg4YzAwMDUyMCwgMHgwNDAwMDdmNSwKKwkweDgwMzg3MDQwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDA0MDFmN2ZhLAorCTB4MWMwMWYwMDAsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwMDA1ODAsCisJMHgwMTA1MDAwMCwgMHgwNDAyMDAwZCwgMHg1OTljMDgxOCwgMHg4YzA0MGQxMCwKKwkweDA0MDAwMDBhLCAweDU5YTgwODA3LCAweDhjMDQwZDBhLCAweDA0MDAwMDA3LAorCTB4NDIwMDEwMDAsIDB4MDAwMDgwNGYsIDB4NDE3ODE4MDAsIDB4NDE3ODIwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwM2EzZSwgMHgxYzAxZjAwMCwgMHg0MTc4MTAwMCwKKwkweDQyMDI2MDAwLCAweDAwMTBkMWMwLCAweDU5YTgxODBlLCAweDQ4MGE2NDAyLAorCTB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsIDB4ODAwODEwMDAsIDB4ODAwYzE4NDAsCisJMHgwNDAwMDAwNCwgMHg4MzMyNjQwMCwgMHgwMDAwMDAyNCwgMHgwNDAxZjdmOCwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwMmMsIDB4NTkzMDA0MDYsIDB4NDgwM2M4NTcsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAxMSwgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDAxLCAweDA0MDAwMDBlLCAweDgyMDAwZDgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwMDYsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDYsIDB4MDQwMjAwMTEsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTVkZiwgMHg1OTMwMDAxYywgMHg4MDAwMDFjMCwKKwkweDAyMDIwODAwLCAweDAwMTA5ODRlLCAweDA0MDFmMDBhLCAweDU5MzAwODFlLAorCTB4NDgwN2M4NTcsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDYsIDB4NTgwNDAwMWMsCisJMHg0ODAzYzg1NywgMHg4MTMwMDU4MCwgMHgwNDAyMDAwMiwgMHg0OTc4MDgxYywKKwkweDQ5N2E2MDA4LCAweDRhMDI2MDA0LCAweDAwMDA0MDAwLCAweDU5YTgwMDM3LAorCTB4ODIwMDBjODAsIDB4MDAwMDAwNTEsIDB4MDQwMDEwMDIsIDB4ODAwMDAxMDIsCisJMHg0ODAyNjIwNiwgMHg0OTdhNjIwNSwgMHg0OTdhNjAwOSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDA3LCAweDFjMDFmMDAwLCAweDgxNjZjOWMwLCAweDA0MDAwMDFjLAorCTB4NDE2MjYwMDAsIDB4NDE1ODAwMDAsIDB4NTkzMDBhMDMsIDB4ODIwNDBkODAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDAwOCwgMHg4MzMyNjQwMCwgMHgwMDAwMDAyNCwKKwkweDgxMzAwYzgwLCAweDA0MDAxN2Y5LCAweDQyMDI2MDAwLCAweDAwMTBkMWMwLAorCTB4MDQwMWY3ZjYsIDB4NDkzM2M4NTcsIDB4ODE2NmM4NDAsIDB4ODMzMDBjMDAsCisJMHgwMDAwMDAyNCwgMHg4MDA0MDQ4MCwgMHgwNDAyMTAwNiwgMHg0MDA2YzAwMCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA4LCAweDgxMzI2MWMwLCAweDFjMDFmMDAwLAorCTB4NDIwMmMwMDAsIDB4MDAxMGQxYzAsIDB4MDQwMWY3ZmEsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjg1NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0OTMzYzg1NiwKKwkweDQxN2E2MDAwLCAweDA0MDFmN2Y1LCAweDQ5MzNjODU3LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTMsIDB4MDQwMjAwMGIsIDB4NTkzMDAwMDQsIDB4OGMwMDA1M2UsCisJMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YmJmLCAweDAyMDFmODAwLCAweDAwMTA2YzRiLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NTk4ODAwNTIsIDB4ODAwMDAwMDAsIDB4NDgwMzEwNTIsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OTMwMDIwMywgMHg4MjAwMzQ4MCwKKwkweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDRkMmMwMDAwLAorCTB4MGMwMWY4MDMsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDc5OTEsCisJMHgwMDEwN2VmZCwgMHgwMDEwODA0YSwgMHgwMDEwNzk5MSwgMHgwMDEwODBiMCwKKwkweDAwMTA3YWY1LCAweDAwMTA3OTkxLCAweDAwMTA3OTkxLCAweDAwMTA3ZTkzLAorCTB4MDAxMDc5OTEsIDB4MDAxMDc5OTEsIDB4MDAxMDc5OTEsIDB4MDAxMDc5OTEsCisJMHgwMDEwNzk5MSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywKKwkweDU5MzAwMjAzLCAweDgyMDAzNDgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLAorCTB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsIDB4MDAxMDc5YTgsIDB4MDAxMDhhM2QsCisJMHgwMDEwNzlhOCwgMHgwMDEwNzlhOCwgMHgwMDEwNzlhOCwgMHgwMDEwNzlhOCwKKwkweDAwMTA3OWE4LCAweDAwMTA3OWE4LCAweDAwMTA4OWU1LCAweDAwMTA4YTU4LAorCTB4MDAxMDhhYzYsIDB4MDAxMDhhNTgsIDB4MDAxMDhhYzYsIDB4MDAxMDc5YTgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDQ5MzNjODU3LCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDU5MzAwMjAzLAorCTB4ODIwMDM0ODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCisJMHgwYzAxZjgwMywgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHgwMDEwNzljNSwKKwkweDAwMTA3OWM1LCAweDAwMTA3OWM1LCAweDAwMTA3OWUxLCAweDAwMTA3YTJkLAorCTB4MDAxMDc5YzUsIDB4MDAxMDc5YzUsIDB4MDAxMDc5YzUsIDB4MDAxMDc5YzcsCisJMHgwMDEwNzljNSwgMHgwMDEwNzljNSwgMHgwMDEwNzljNSwgMHgwMDEwNzljNSwKKwkweDAwMTA3OWM1LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ5MzNjODU3LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwNDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCisJMHg0YTAyNjAwNywgMHgwMDA4MjAwMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywKKwkweDQ5M2E2NDAzLCAweDRhMDI1YzA4LCAweDAwMDAwMDAxLCAweDU5MmMwMDBkLAorCTB4NDgwMjYwMTEsIDB4NDk3YTYwMTMsIDB4NTkyYzAyMDgsIDB4ODAwMDAwYzIsCisJMHg4MDAwMTBjNCwgMHg4MDA4MTQwMCwgMHg0ODBhNjIwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTAwZjRlLCAweDQyMDAwODAwLCAweDgwMDAwMDYwLCAweDAyMDFmMDAwLAorCTB4MDAxMDY3MjEsIDB4NDkzM2M4NTcsIDB4ODMzODA0ODAsIDB4MDAwMDAwNTAsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0OSwKKwkweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA3OWY0LAorCTB4MDAxMDc5ZmYsIDB4MDAxMDc5ZjIsIDB4MDAxMDc5ZjIsIDB4MDAxMDc5ZjIsCisJMHgwMDEwNzlmMiwgMHgwMDEwN2EwYSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA0LCAweDRhMDI1YzA4LCAweDAwMDAwMDAyLAorCTB4NTkyYzAyMDcsIDB4NDgwMjVjMDksIDB4NTkyYzAyMDksIDB4NDgwMjVhMDcsCisJMHg1OTJjMDAwYywgMHg0ODAyNTgwZCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YjhhLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDA1LAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwgMHgwMDEwNmI4YSwKKwkweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLAorCTB4NWMwMjc4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMTQsIDB4NDE3ODI4MDAsCisJMHg0MjAwMjAwMCwgMHgwMDAwMDAwMiwgMHg0ZDQwMDAwMCwgMHg0ZDQ0MDAwMCwKKwkweDU5MzY4YzAzLCAweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLAorCTB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwKKwkweDAwMTA5MDM3LCAweDAyMDAwMDAwLCAweDAwMDIwNzdkLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDc3ZCwgMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwgMHgwMDAwMDA0OCwKKwkweDA0MDAwMDA1LCAweDgzMzgwNTgwLCAweDAwMDAwMDUzLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkyYzAyMDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDcsCisJMHgwNDAwMDAwOSwgMHg1OTMwMDAxMSwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNiwKKwkweDU5MmMwODBjLCAweDgwMDQwNDgwLCAweDQ4MDI1ODBjLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMTUsIDB4NTkyYzAyMDYsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDMsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKKwkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ5MzNjODU3LCAweDRkMmMwMDAwLAorCTB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdlNCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0OTdhNWEwNiwKKwkweDU5YzgwMDE3LCAweDgyMDAwNTAwLCAweDAwMDBmMDAwLCAweDQ4MDI1YzA3LAorCTB4NTlhODA4MTYsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMTgsIDB4NDgwNjVhMDcsCisJMHg0MTJjNzgwMCwgMHg0ZDJjMDAwMCwgMHg0MWNjYTAwMCwgMHg0MjAwMjgwMCwKKwkweDAwMDAwMDAxLCAweDQyMDAxMDAwLCAweDAwMDAwMDJjLCAweDgyMDQwNDgwLAorCTB4MDAwMDAwMmQsIDB4MDQwMjEwMDYsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwOGI5NiwgMHgwNDAxZjAyZSwgMHg0MDA0MzAwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDJjLCAweDgzMmNhYzAwLCAweDAwMDAwMDA5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDhiOTYsIDB4ODIxODM0ODAsIDB4MDAwMDAwMmMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAxYSwgMHg4MDE0MjgwMCwKKwkweDRhMDI1ODA0LCAweDAwMDAwMTEwLCAweDQ5MmM3ODAxLCAweDgyMTgwYzgwLAorCTB4MDAwMDAwM2QsIDB4MDQwMjEwMDcsIDB4NDAxODA4MDAsIDB4ODMyY2FjMDAsCisJMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwOGI5NiwgMHgwNDAxZjAxNSwKKwkweDgyMDgxNDAwLCAweDAwMDAwMDNjLCAweDgyMTgzNDgwLCAweDAwMDAwMDNjLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwM2MsIDB4NDEyYzc4MDAsIDB4ODMyY2FjMDAsCisJMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwOGI5NiwgMHgwNDAxZjdlNSwKKwkweDVjMDI1ODAwLCAweDU5MmMwMjA2LCAweDg0MDAwNTVlLCAweDQ4MDI1YTA2LAorCTB4NTkyYzA0MDcsIDB4ODAwODA1NDAsIDB4NDgwMjVjMDcsIDB4MDQwMWYwMDIsCisJMHg1YzAyNTgwMCwgMHg4MTM2NjljMCwgMHgwNDAwMDAwMywgMHg1OTM0MzQwMywKKwkweDA0MDFmMDAzLCAweDQyMDAzMDAwLCAweDAwMDBmZmZmLCAweDQ5MzI1ODA4LAorCTB4NDgxYTVjMDYsIDB4ODIxMDA1ODAsIDB4MDAwMDAwNTQsIDB4MDQwMjAwMDIsCisJMHg0OTFlNTgxMywgMHg4NDE0MDFjMCwgMHg4MDEwMDU0MCwgMHg0ODAyNTgwNCwKKwkweDU5MmMwMDAxLCAweDQ5N2E1ODAxLCAweDRjMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsIDB4ODEyZTU5YzAsIDB4MDQwMjA3ZjksCisJMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNWMwMDAwLCAweDRkMmMwMDAwLAorCTB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsIDB4NDEyY2I4MDAsCisJMHg1OTJjMDQwYiwgMHg4YzAwMDUxNiwgMHgwNDAwMDAwMywgMHg0MWNjYTAwMCwKKwkweDA0MDFmMDAzLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQwMDhiMDAwLAorCTB4NDE3ODEwMDAsIDB4ODI1ODA0ODAsIDB4MDAwMDAwMTIsIDB4MDQwMDEwMDQsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAxMiwgMHg0MDAwMTAwMCwgMHg0YzA4MDAwMCwKKwkweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDA0MDAwMDIzLAorCTB4NWMwMDE4MDAsIDB4NDkyYzE4MDEsIDB4NDg1YTU4MDAsIDB4ODMyY2FjMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwYWIyOCwgMHg1ODVjMDQwYiwKKwkweDhjMDAwNTAwLCAweDA0MDAwMDBlLCAweDgzMmMxNDAwLCAweDAwMDAwMDAyLAorCTB4OGMwMDA1MTYsIDB4MDQwMDAwMDMsIDB4ODIwODE0MDAsIDB4MDAwMDAwMDYsCisJMHg0NjAwMTAwMCwgMHgwMDAwMDAwMSwgMHg4MDA4MTAwMCwgMHg0NjAwMTAwMCwKKwkweDAwMDAwOTAwLCAweDg0MDAwNTAwLCAweDQ4MDBiYzBiLCAweDVjMDAxMDAwLAorCTB4ODAwODExYzAsIDB4MDQwMjA3ZGEsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwKKwkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDVjMDI1ODAwLCAweDVjMDAxMDAwLAorCTB4MDQwMWY3ZjgsIDB4NDkzM2M4NTcsIDB4ODMzODBkODAsIDB4MDAwMDAwMTUsCisJMHgwNDAyMDAwMywgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg4MzM4MGQ4MCwKKwkweDAwMDAwMDE2LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NGM1MDAwMDAsCisJMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHg1OTMyNTgwOCwgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDA2LCAweDU5Y2MxODA2LCAweDgyMGMwNTgwLCAweDAxMDAwMDAwLAorCTB4MDQwMjAwMDQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMGYsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwOCwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwKKwkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDhjMGMxZDAwLCAweDA0MDAwMDBiLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDgsIDB4NTkyZTU4MDEsIDB4ODEyZTU5YzAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwKKwkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDA0MDFmODE2LCAweDVjMDBiMDAwLAorCTB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHg0OTMzYzg1NywgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwKKwkweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDU5MzBhODA4LCAweDgyNTRhYzAwLAorCTB4MDAwMDAwMDUsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIxNywgMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDAyMDAwMDAwLAorCTB4MDAwMjA3N2QsIDB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsCisJMHgwNDAyMDAwYiwgMHg0MTc4MDgwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA5NDNiLCAweDVjMDI4MDAwLAorCTB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NTkzMWQ4MjEsCisJMHg1OGVmNDAwYiwgMHg1OGVlNTgwZCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywKKwkweDU4ZWMwMDA5LCAweDA4MDFmODAwLCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NDkzM2M4NTcsIDB4NTljYzE4MDYsIDB4ODIwYzA1ODAsCisJMHgwMjAwMDAwMCwgMHgwNDAyMDAxNCwgMHg0YTAyNjgwMiwgMHgwMGZmZmZmZCwKKwkweDU5MzQwMDBhLCAweDg0MDAwNTA0LCAweDQ4MDI2ODBhLCAweDU5MzAwODA4LAorCTB4ODAwNDA5YzAsIDB4MDIwMDAwMDAsIDB4MDAwMjA3N2QsIDB4NGEwMDBhMDQsCisJMHgwMDAwMDEwMywgMHg0ODBjMDgwNSwgMHg1OTMxZDgyMSwgMHg1OGVmNDAwYiwKKwkweDU4ZWU1ODBkLCAweDU4ZWMwMDA5LCAweDA4MDFmODAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NmMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHg0YzBjMDAwMCwgMHgwNDAxZjgwNCwgMHg1YzAwMTgwMCwKKwkweDA0MDIwN2ViLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRkMmMwMDAwLAorCTB4NTkzMjU4MDgsIDB4ODEyZTU5YzAsIDB4MDQwMjAwMDksIDB4NDk3YTYyMDYsCisJMHg0OTdhNjIwNSwgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAyMiwKKwkweDA0MDFmYjc3LCAweDVjMDI3MDAwLCAweDgwMDAwNTgwLCAweDVjMDI1ODAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NGM1MDAwMDAsCisJMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHg1OTMyNTgwOCwgMHg1OTJlNTgwMSwKKwkweDgzMmNhYzAwLCAweDAwMDAwMDA1LCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LAorCTB4NTljODA4MTcsIDB4ODIwNDBkMDAsIDB4MDAwMDAzZmYsIDB4ODIwNDE0ODAsCisJMHgwMDAwMDAwZiwgMHgwNDAwMTAxYiwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwZiwKKwkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5MmU1ODAxLCAweDgzMmNhYzAwLAorCTB4MDAwMDAwMDUsIDB4ODIwODBjODAsIDB4MDAwMDAwMGYsIDB4MDQwMDEwMGQsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwZiwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKKwkweDU5MmU1ODAxLCAweDgzMmNhYzAwLCAweDAwMDAwMDA1LCAweDgyMDQxNDgwLAorCTB4MDAwMDAwMGYsIDB4MDQwMDEwMDcsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMGYsCisJMHg0MDA4YjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHgwNDAxZjAwNCwKKwkweDQwMDRiMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5MzFkODIxLAorCTB4NThlZjQwMGIsIDB4NThlZTU4MGQsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHg1OTJlNTgwMSwgMHg1OGVjMDAwOSwgMHgwODAxZjgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzdkLCAweDVjMDBiMDAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsCisJMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHg1OWNjMDAwNiwKKwkweDgyMDAwZDgwLCAweDAxMDAwMDAwLCAweDA0MDAwMDJjLCAweDU5Y2MwMDA3LAorCTB4OTAwMGIxYzAsIDB4ODI1OGI1MDAsIDB4MDAwMDAwZmYsIDB4ODA1OGIxMDQsCisJMHg4MjU4YjQwMCwgMHgwMDAwMDAwMiwgMHg4MjU4MGM4MCwgMHgwMDAwMDAwNywKKwkweDA0MDAxMDAzLCAweDQyMDBiMDAwLCAweDAwMDAwMDA2LCAweDgzY2NhNDAwLAorCTB4MDAwMDAwMDYsIDB4NTkzMDEwMDgsIDB4ODAwODExYzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDVkOCwgMHg4MjA4YWMwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhYjE3LCAweDgyMDAwZDAwLCAweGZmMDAwMDAwLCAweDgwMDQwOWMwLAorCTB4MDQwMDAwMTksIDB4ODIwMGI1MDAsIDB4MDAwMDAwZmYsIDB4ODA1OGIxMDQsCisJMHg4MjU4MGM4MCwgMHgwMDAwMDAwZSwgMHgwNDAwMTAwMywgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDBkLCAweDU4MDgxMDAxLCAweDgwMDgxMWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4ODIwOGFjMDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIxNywgMHgwNDAxZjAwOCwgMHg1OTMwMTAwOCwgMHg4MDA4MTFjMCwKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDQ4MDAxMDA1LCAweDU5Y2MwMDA3LAorCTB4NDgwMDEwMDYsIDB4MDQwMWZmM2IsIDB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDU5Y2MwMDA2LCAweDgyMDAwNTgwLAorCTB4MDIwMDAwMDAsIDB4MDQwMDAwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsCisJMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDQ4MDY1YTA2LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAorCTB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDkzM2M4NTcsCisJMHg0ZDJjMDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDU5Y2MwODA2LCAweDgyMDQwNTgwLAorCTB4MDEwMDAwMDAsIDB4MDQwMDAwMDQsIDB4ODIwNGI1MDAsIDB4MDAwMGZmZmYsCisJMHg4MDU4YjEwNCwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwgMHg1OTMwMDAwOCwKKwkweDgyMDBhYzAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LAorCTB4MDQwMWZmMGMsIDB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0ODAzYzg1NywKKwkweDQ4MDdjODU3LCAweDQ4MGJjODU3LCAweDQ4MGZjODU3LCAweDQ4MTNjODU3LAorCTB4NDgxYmM4NTcsIDB4NDkyZmM4NTcsIDB4NGQyYzAwMDAsIDB4NGMwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHg1YzAwMDAwMCwgMHgwNDAwMDAwZiwKKwkweDQ4MDI1ODAzLCAweDVjMDAwMDAwLCAweDQ4MDI1ODBhLCAweDRjMDAwMDAwLAorCTB4NDgxYTU4MDEsIDB4NDgxMjU4MDksIDB4NDgwNjU4MDQsIDB4NDgwYTU4MDcsCisJMHg0ODBlNTgwOCwgMHg0MTJjMTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDg1OCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NGQxYzAwMDAsIDB4NTljYzAwMDEsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHg1OTM0MTAwMiwgMHg4MjA4MTUwMCwgMHgwMGZmZmZmZiwKKwkweDgwMDgwNTgwLCAweDA0MDIwMDFmLCAweDQ5N2E2MjA1LCAweDRkMzgwMDAwLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMzUsIDB4MDIwMWY4MDAsIDB4MDAxMDkzYmEsCisJMHg1YzAyNzAwMCwgMHgwNDAyMDAxMiwgMHg1OTFjMDAxYywgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDBmLCAweDQ5N2EzODFjLCAweDU5MWMwNDE0LCAweDhjMDAwNTAyLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODQwMDA1MDIsIDB4NDgwMjNjMTQsCisJMHg1OTFjMTQwNiwgMHg4MjA4MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNiwKKwkweDgyMDgwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwMDA1LCAweDA0MDFmYzllLAorCTB4MDQwMWYwMDQsIDB4MDQwMWY4MDUsIDB4MDQwMWYwMDIsIDB4MDQwMWY4YzAsCisJMHg1YzAyMzgwMCwgMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwgMHg1OTFlNTgwOCwKKwkweDQ5MzNjODU3LCAweDQ5MWZjODU3LCAweDQ5M2JjODU3LCAweDQ5MmZjODU3LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMTUsIDB4MDQwMDAwYjMsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAxNiwgMHgwNDAyMDBhZSwgMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwKKwkweDU5Y2MwMjA3LCAweDQ4MDNjODU3LCAweDgyMDAwZDAwLCAweDAwMDBmZjAwLAorCTB4ODIwNDA1ODAsIDB4MDAwMDE3MDAsIDB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDMwMCwgMHgwNDAyMDA1YiwgMHg1OTFjMDIwMywgMHg0ODAzYzg1NywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDBkLCAweDA0MDAwMDNmLCAweDgxMmU1OWMwLAorCTB4MDQwMDAwOWEsIDB4NTkxYzAyMDIsIDB4NDgwM2M4NTcsIDB4ODIwMDA1ODAsCisJMHgwMDAwZmZmZiwgMHgwNDAyMDA3ZSwgMHg1OTJjMDIwYSwgMHg0ODAzYzg1NywKKwkweDgyMDAwNTAwLCAweDAwMDAwMDAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMjAwMDcsIDB4NTkyYzA4MGYsIDB4NTkxYzAwMTEsIDB4NDgwM2M4NTcsCisJMHg0ODA3Yzg1NywgMHg4MDA0MDU4MCwgMHgwNDAyMDA3MSwgMHg1OTFjMDQxNCwKKwkweDQ4MDNjODU3LCAweDhjMDAwNTAwLCAweDA0MDIwMDZkLCAweDQxNzgwODAwLAorCTB4NTkxYzEyMDYsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjZhMCwgMHg1OTJjMDQwNiwgMHg0ODAzYzg1NywgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDBjLCAweDgwMDgwYzgwLCAweDA0MDAxMDA0LCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4ODAwMDEwNDAsIDB4NDgwYTVjMDYsIDB4ODAwODExYzAsCisJMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwOGQ4OCwgMHgwNDAxZjA2YiwKKwkweDAyMDFmODAwLCAweDAwMTA5MTJhLCAweDU5MWMwODE3LCAweDU5MWMwMDE4LAorCTB4NDgwNjU4MDgsIDB4NDgwMjU4MDksIDB4NTkzMDAwMDcsIDB4OGMwMDA1MDAsCisJMHgwMjAyMDgwMCwgMHgwMDEwMGU5OSwgMHg0OTdhMzgwOCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMWJhLCAweDA0MDIwMDRhLCAweDQxMWU2MDAwLCAweDA0MDFmYzNlLAorCTB4MDQwMWYwNWEsIDB4MDQwMWZjNmQsIDB4MDQwMDAwMTMsIDB4NDkzNjYwMDksCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwMywgMHg0OTJlNjAwOCwgMHg1OTFjMDgxNywKKwkweDU5MWMxMDE4LCAweDQ4MDY2MDE3LCAweDQ4MGE2MDE4LCAweDRkMzgwMDAwLAorCTB4NTkxZTc0MDMsIDB4NGQzMDAwMDAsIDB4NDExZTYwMDAsIDB4MDQwMWZjMmUsCisJMHg1YzAyNjAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwKKwkweDA0MDFmMDQ2LCAweDU5YTgwMDM5LCAweDQ4MDIzYTA1LCAweDA0MDFmMDQzLAorCTB4NTljYzA0MDcsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMGIsIDB4MDQwMjAwMjUsCisJMHg1OTM0MGEwMCwgMHg4NDA0MGQwZSwgMHg0ODA2NmEwMCwgMHg1OTJjMGEwNCwKKwkweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgyMDQwZDgwLCAweDAwMDAwMDE0LAorCTB4MDQwMDAwMDMsIDB4NGEwMjYyMWQsIDB4MDAwMDAwMDMsIDB4NTkzMDAwMDcsCisJMHg4YzAwMDUwMCwgMHgwMjAyMDgwMCwgMHgwMDEwMGU5OSwgMHg0ZDQwMDAwMCwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDAzLCAweDU5MmMwYTA4LCAweDAyMDFmODAwLAorCTB4MDAxMDRlNzAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMjgwMDAsCisJMHg0OTdhNjAwOCwgMHg0YTAyNjQwMywgMHgwMDAwMDA4NSwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAyLCAweDQyMDAwODAwLAorCTB4ODAwMDQwNGIsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjEsIDB4MDQwMWYwMWIsCisJMHg1OWNjMDIwNywgMHg4MjAwMDU4MCwgMHgwMDAwMmEwMCwgMHgwNDAyMDAwNCwKKwkweDU5YTgwMDM5LCAweDQ4MDIzYTA1LCAweDA0MDFmMDE0LCAweDgxMmU1OWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHg1OTFjMDAwNywgMHg4YzAwMDUwMCwgMHgwMjAyMDgwMCwgMHgwMDEwMGU5OSwKKwkweDU5MWMwNDAyLCAweDQ4MDI1YzA2LCAweDRhMDI1YTA2LCAweDAwMDAwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyYzEsIDB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDliMiwgMHg1YzAyNjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzdkLCAweDA0MDFmMDAyLCAweDVjMDI2MDAwLCAweDVjMDI1ODAwLAorCTB4MWMwMWYwMDAsIDB4MDQwMWY4MTksIDB4MDQwMWY3ZmQsIDB4NDkzM2M4NTcsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwgMHgwNDAyMDAwNCwgMHg1OWE4MDAzOSwKKwkweDQ4MDIzYTA1LCAweDA0MDFmMDBkLCAweDgzMzgwNTgwLCAweDAwMDAwMDE2LAorCTB4MDQwMjAwMGQsIDB4NGQzMDAwMDAsIDB4NDExZTYwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTVkZiwgMHgwMjAxZjgwMCwgMHgwMDAyMDZmZCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzdkLCAweDVjMDI2MDAwLCAweDQ5N2EzODFjLCAweDAyMDFmODAwLAorCTB4MDAwMjA3N2QsIDB4MWMwMWYwMDAsIDB4NTkxYzA0MTQsIDB4ODQwMDA1NDAsCisJMHg0ODAyM2MxNCwgMHg1OWNjMTAwYiwgMHg0OTMzYzg1NywgMHg0OTFmYzg1NywKKwkweDQ5MmZjODU3LCAweDQ4MDNjODU3LCAweDQ4MGJjODU3LCAweDhjMDgxNTNjLAorCTB4MDQwMDAwMDYsIDB4NTlhODAwMzksIDB4NDgwMjNhMDUsIDB4NDk3YTM4MWMsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA4YmQ3LCAweDVjMDI2MDAwLCAweDU5MWMwNDA2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDAwMjA3N2QsCisJMHg1OTFjMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA1MCwgMHgwNDAyMDAwZCwKKwkweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjEsCisJMHg1YzAyNjAwMCwgMHg0OTdhMzgxYywgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKKwkweDU5MWMwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDBkLCAweDA0MDAwMDE0LAorCTB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkxYzAyMDMsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAxMSwgMHg1OTJjMDIwYSwKKwkweDhjMDAwNTAyLCAweDA0MDAwMDBlLCAweDRhMDIzODEyLCAweDBmZmZmZmZmLAorCTB4NTkyYzAyMDgsIDB4ODQwMDA1MWUsIDB4NDgwMjVhMDgsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMSwgMHg0ODAyM2ExNCwgMHgwNDAxZjAyMSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDA3LCAweDQ4MDIzYTE0LCAweDA0MDFmMDFkLCAweDU5MmMwMjBhLAorCTB4NDgwM2M4NTcsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMGIsIDB4OGMwMDA1MDIsCisJMHgwNDAwMDdmNywgMHg1OTFjMDQxNCwgMHg4YzAwMDUxYywgMHgwNDAyMDdlYiwKKwkweDU5MWMwMDExLCAweDQ4MDNjODU3LCAweDgwMDAwMWMwLCAweDA0MDAwN2YwLAorCTB4MDQwMWY3ZTYsIDB4OGMwODE1M2EsIDB4MDQwMjA3ZWQsIDB4NTljYzAwMGEsCisJMHg1OTJjMTgwZiwgMHg0ODAzYzg1NywgMHg0ODBmYzg1NywgMHg4MDBjMDU4MCwKKwkweDA0MDAwN2U3LCAweDU5Y2MwMDBhLCAweDQ4MDNjODU3LCAweDQ4MDIzODE2LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDUsIDB4NDgwMjNhMTQsIDB4MDIwMWYwMDAsCisJMHgwMDEwOTI1OSwgMHg0OTMzYzg1NywgMHg0ZDFjMDAwMCwgMHg1OWNjMDAwMSwKKwkweDU5MzQxMDAyLCAweDgwMDgwNTgwLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4MDQwMjAwNDEsIDB4NTkzMDE0MTksIDB4MDIwMWY4MDAsIDB4MDAxMDk0MTAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTFjMTQwNiwgMHg4MjA4MDU4MCwKKwkweDAwMDAwMDA3LCAweDA0MDAwMDM4LCAweDgyMDgwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMDAwMzUsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMzIsCisJMHg1OTFjMDIwMiwgMHg4MjAwMGQ4MCwgMHgwMDAwZmZmZiwgMHgwNDAwMDAwNCwKKwkweDU5MzAxYTE5LCAweDgwMGMwNTgwLCAweDA0MDIwMDJiLCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTUsIDB4MDQwMDAwMjYsIDB4NGQzMDAwMDAsIDB4NGQyYzAwMDAsCisJMHg0MTFlNjAwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU5MmMwMjA0LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMDAwMDMsCisJMHg0YTAyNjIxZCwgMHgwMDAwMDAwMywgMHg0MjAyODAwMCwgMHgwMDAwMDAwMywKKwkweDU5MmMwYTA4LCAweDAyMDFmODAwLCAweDAwMTA0ZTcwLCAweDAyMDFmODAwLAorCTB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsIDB4NDk3YTYwMDgsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDA4NSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwOSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAyLCAweDQyMDAwODAwLCAweDgwMDA0MDRiLCAweDAyMDFmODAwLAorCTB4MDAwMjA3MjEsIDB4NWMwMjYwMDAsIDB4MDQwMWYwMDMsIDB4NTlhODAwMzksCisJMHg0ODAyM2EwNSwgMHg0OTdhMzgxYywgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwKKwkweDVjMDIzODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNTgwMDAwLAorCTB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4ODMzODM1ODAsIDB4MDAwMDAwMTUsCisJMHgwNDAwMDAxMCwgMHg1OTM0MjIwMCwgMHg4NDEwMjUwMiwgMHg0ODEyNmEwMCwKKwkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDY2LCAweDAyMDFmODAwLAorCTB4MDAxMDk1OTcsIDB4MDQwMjAwMDUsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTU3ZCwgMHgwNDAxZmEwYSwgMHgwNDAxZjA3OSwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDA4LCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsCisJMHgwNDAyMDAxNSwgMHg4M2NjMTQwMCwgMHgwMDAwMDAwYSwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAyLCAweDgzMzQxYzAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDg1NWEsIDB4MDQwMjAwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsCisJMHg1OTM0MjIwMCwgMHg1OWNjMTAwNywgMHg4MDA4MTFjMCwgMHgwNDAwMDAwMywKKwkweDQ4MGE2ODAxLCAweDg0MTAyNTQyLCAweDg0MTAyNTFhLCAweDQ4MTI2YTAwLAorCTB4MDQwMWYwNWYsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5MzQwMjAwLCAweDg0MDAwNTU4LAorCTB4NDgwMjZhMDAsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0OTM2NjAwOSwgMHg0OTdhNjAwOCwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDAxLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDAxMSwgMHg0MTc4MjgwMCwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDAxLCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMGE0M2UsIDB4NWMwMjgwMDAsCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywKKwkweDRhMDI2NDIwLCAweDAwMDAwMDAxLCAweDA0MDFmMDA5LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwgMHgwMDEwNjcyYiwgMHg1YzAyNjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDIyLCAweDAyMDFmODAwLAorCTB4MDAxMDk1OTcsIDB4MDQwMjAwMjIsIDB4MDQwMWY5YWUsIDB4MDQwMWYwMWQsCisJMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywKKwkweDQyMDAwMDAwLCAweDAwMTBiODY0LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NTkzNDAyMDAsIDB4ODQwMDA1NTgsIDB4NDgwMjZhMDAsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwMywgMHg0MTc4MjgwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAwNSwKKwkweDRkNDAwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsCisJMHg1YzAyODAwMCwgMHg1YzAyNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwKKwkweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDA0MDFmMDAyLCAweDA0MDFmY2E5LAorCTB4NWMwMjU4MDAsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0MTM4MDAwMCwgMHg4MzM4MzQ4MCwgMHgwMDAwMDA1NiwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA3ZWY3LCAweDAwMTA3ZWYyLAorCTB4MDAxMDdlZjcsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjcsCisJMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKKwkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLAorCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsCisJMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKKwkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLAorCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsCisJMHgwMDEwN2VmMCwgMHgwMDEwN2VmNywgMHgwMDEwN2VmMCwgMHgwMDEwN2VmNywKKwkweDAwMTA3ZWY3LCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLAorCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjAsCisJMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKKwkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLAorCTB4MDAxMDdlZjcsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsCisJMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKKwkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWY3LAorCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjcsCisJMHgwMDEwN2VmMCwgMHgwMDEwN2VmNywgMHgwMDEwN2VmNywgMHgwMDEwN2VmMCwKKwkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWY3LAorCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjcsCisJMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmNywKKwkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWY3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCisJMHg0OTNhNjQwMywgMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0OTMzYzg1NywKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDQ5M2E2NDAzLCAweDAyMDFmMDAwLAorCTB4MDAxMDY3MmIsIDB4NDkzM2M4NTcsIDB4NTkzMDA0MDMsIDB4ODIwMDM0ODAsCisJMHgwMDAwMDA1NiwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MzU4MCwKKwkweDAwMDAwMDEzLCAweDA0MDAwMDkzLCAweDgzMzgzNTgwLCAweDAwMDAwMDI3LAorCTB4MDQwMjAwNGIsIDB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTEzNCwgMHgwNDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwOTE0ZSwKKwkweDA0MDAwMDQxLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDIyLAorCTB4MDQwMjAwMzgsIDB4MDQwMWZjNjEsIDB4MDQwMDAwM2EsIDB4MDQwMWYwM2EsCisJMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywKKwkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDA0MDFmOGZlLCAweDRkNDQwMDAwLAorCTB4NTkzNjhjMDMsIDB4ODM0NDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMjAwMDgsCisJMHg1OWE4MTAyNiwgMHg4NDA4MTU0MCwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwKKwkweDA0MDIwMDAyLCAweDg0MDgxNTRhLCAweDQ4MGI1MDI2LCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMjksIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDAwMDBjLCAweDU5MzI2ODA5LCAweDU5MzQwMDA4LCAweDgwMDAwMWMwLAorCTB4MDQwMjAwMDgsIDB4NTkzNjhjMDMsIDB4NDkzM2M4NTcsIDB4NDkzN2M4NTcsCisJMHg0OTQ3Yzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNDVmYiwgMHgwNDAxZjAwYywKKwkweDQyMDAwMDAwLCAweDAwMTBiODY0LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMTUsIDB4NDE3ODI4MDAsIDB4NDIwMDIwMDAsCisJMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwOTg1ZSwgMHg1YzAyODgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA5MzI2LCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4MWMwMWYwMDAsIDB4MDQwMWY4Y2IsIDB4MDQwMWY3ZmEsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAxNCwgMHgwNDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwNmY2MCwKKwkweDAyMDIwMDAwLCAweDAwMTA3OTc0LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDIsIDB4MDQwMDAwZWQsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTAyMDNjLCAweDVjMDI3ODAwLCAweDQyMDAzMDAwLAorCTB4MDAwMDAwMTYsIDB4NDE3ODI4MDAsIDB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsCisJMHg1OTM2OGMwMywgMHg0MjAwMjAwMCwgMHgwMDAwMDAwOSwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMTA5ODVlLCAweDVjMDI4ODAwLAorCTB4NWMwMjgwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwOTEzNCwgMHgwNDAyMDAwYywKKwkweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDA0MDFmODllLCAweDU5MzQwYzAzLAorCTB4ODIwNDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMjA3Y2EsIDB4NTlhODA4MjYsCisJMHg4NDA0MGQ0MCwgMHg0ODA3NTAyNiwgMHgwNDAxZjdjNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MTRlLCAweDA0MDIwMDAzLCAweDA0MDFmODkyLCAweDA0MDFmN2MxLAorCTB4NTkzMDA0MDMsIDB4ODIwMDBkODAsIDB4MDAwMDAwMzIsIDB4MDQwMjAwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwMjMwYywgMHgwNDAxZjdiYSwgMHg1OTMwMDQwMywKKwkweDgyMDAwZDgwLCAweDAwMDAwMDIyLCAweDA0MDAwODg2LCAweDA0MDFmN2I1LAorCTB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsIDB4MDAxMDgwMTYsIDB4MDAxMDgwMTYsCisJMHgwMDEwODAxNiwgMHgwMDEwODAxNiwgMHgwMDEwODAxNiwgMHgwMDEwODAxNiwKKwkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLAorCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsCisJMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwKKwkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLAorCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsCisJMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwKKwkweDAwMTA3ZmY5LCAweDAwMTA4MDE2LCAweDAwMTA3ZmYwLCAweDAwMTA4MDE2LAorCTB4MDAxMDgwMTYsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsCisJMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwODAxNiwgMHgwMDEwODAxNiwKKwkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLAorCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsCisJMHgwMDEwODAwNywgMHgwMDEwODAxNiwgMHgwMDEwN2ZmMCwgMHgwMDEwODAwMCwKKwkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA4MDAwLAorCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDgwMTYsCisJMHgwMDEwODAwMywgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMiwgMHgwMDEwODAxNiwKKwkweDAwMTA3ZmYwLCAweDAwMTA4MDE2LCAweDAwMTA4MDE2LCAweDAwMTA3ZmYwLAorCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDgwMTYsCisJMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwODAxNiwKKwkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA4MDE2LAorCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDgwMTYsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKKwkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDUsIDB4NTlhODAwMzksCisJMHg0ODAyNjIwNSwgMHg1OWE4MDAzNywgMHg0ODAyNjIwNiwgMHgxYzAxZjAwMCwKKwkweDU5MzAwODFlLCAweDQ5NzgwYTA1LCAweDA0MDFmMDE0LCAweDAyMDFmODAwLAorCTB4MDAxMDkzMjYsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjMwYywgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHgwNDAwMDAwNSwKKwkweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsCisJMHgwMjAxZjAwMCwgMHgwMDEwNmM0YiwgMHg0OTMzYzg1NywgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAyLCAweDU5YTgwMDM3LCAweDQ4MDI2MjA2LCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMmEsCisJMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywgMHgwNDAyMDAwYSwKKwkweDRkNDAwMDAwLCAweDQyMDI4MDAwLCAweDAwMDAwMDMxLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDk0M2IsIDB4NWMwMjgwMDAsCisJMHgwNDAxZjAxYywgMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwKKwkweDA0MDAwMDA0LCAweDgyMDQwNTgwLCAweDAwMDAwMDExLCAweDA0MDIwMDBhLAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMzEsIDB4NGEwMjU4MGQsIDB4MDAwMDAwMDQsCisJMHg0YTAyNTgwZSwgMHgwMDAwMDBmZiwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKKwkweDA0MDFmMDBjLCAweDU5MmMwNDA0LCAweDhjMDAwNTFlLCAweDA0MDAwMDA5LAorCTB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NGEwMjU4MDUsIDB4MDEwMDAwMDAsCisJMHg1OTMxZDgyMSwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwOSwgMHgwODAxZjgwMCwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzQwNDAwLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMGMsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg1OTMwMzQwMywgMHg4MjE4MGQ4MCwKKwkweDAwMDAwMDRkLCAweDAyMDAwMDAwLCAweDAwMTA5MzhiLCAweDgyMTgwZDgwLAorCTB4MDAwMDAwMzMsIDB4MDIwMDAwMDAsIDB4MDAxMDkzNDksIDB4ODIxODBkODAsCisJMHgwMDAwMDAyOCwgMHgwMjAwMDAwMCwgMHgwMDEwOTE4ZiwgMHg4MjE4MGQ4MCwKKwkweDAwMDAwMDI5LCAweDAyMDAwMDAwLCAweDAwMTA5MWEzLCAweDgyMTgwZDgwLAorCTB4MDAwMDAwMWYsIDB4MDIwMDAwMDAsIDB4MDAxMDdiMjgsIDB4ODIxODBkODAsCisJMHgwMDAwMDA1NSwgMHgwMjAwMDAwMCwgMHgwMDEwN2IwMSwgMHg4MjE4MGQ4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwNTkxLCAweDgyMTgwZDgwLCAweDAwMDAwMDIyLAorCTB4MDIwMDAwMDAsIDB4MDAxMDdiNTUsIDB4ODIxODBkODAsIDB4MDAwMDAwMzUsCisJMHgwMjAwMDAwMCwgMHgwMDEwN2M1MCwgMHg4MjE4MGQ4MCwgMHgwMDAwMDAzOSwKKwkweDA0MDAwNTM5LCAweDgyMTgwZDgwLCAweDAwMDAwMDNkLCAweDAyMDAwMDAwLAorCTB4MDAxMDdiODUsIDB4ODIxODBkODAsIDB4MDAwMDAwNDQsIDB4MDIwMDAwMDAsCisJMHgwMDEwN2JjMiwgMHg4MjE4MGQ4MCwgMHgwMDAwMDA0OSwgMHgwMjAwMDAwMCwKKwkweDAwMTA3YzE3LCAweDgyMTgwZDgwLCAweDAwMDAwMDQxLCAweDAyMDAwMDAwLAorCTB4MDAxMDdjMDMsIDB4ODIxODBkODAsIDB4MDAwMDAwNDMsIDB4MDIwMDAwMDAsCisJMHgwMDEwOTRkYywgMHg4MjE4MGQ4MCwgMHgwMDAwMDA1MSwgMHgwMjAwMDAwMCwKKwkweDAwMTA5NTQyLCAweDgyMTgwZDgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDAzLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4ODMzODBkODAsIDB4MDAwMDAwMTUsCisJMHgwNDAwMDAwNiwgMHg4MzM4MGQ4MCwgMHgwMDAwMDAxNiwgMHgwMjAyMDAwMCwKKwkweDAwMTA3OTc0LCAweDA0MDFmMjBmLCAweDRkMmMwMDAwLCAweDRkM2MwMDAwLAorCTB4MGMwMWY4MDQsIDB4NWMwMjc4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHgwMDEwODBiOCwgMHgwMDEwODBiYywgMHgwMDEwODBiOCwgMHgwMDEwODEzMSwKKwkweDAwMTA4MGI4LCAweDAwMTA4MjI2LCAweDAwMTA4MmJmLCAweDAwMTA4MGI4LAorCTB4MDAxMDgwYjgsIDB4MDAxMDgyODgsIDB4MDAxMDgwYjgsIDB4MDAxMDgyOWEsCisJMHg0OTMzYzg1NywgMHg0OTdhNjAwNywgMHg1OTMwMDgwOCwgMHg1ODA0MDAwMCwKKwkweDRhMDAwYTA0LCAweDAwMDAwMTAzLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4NDkzM2M4NTcsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg0OTMzYzg1NywgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA3NCwKKwkweDA0MDIwMDVjLCAweDAyMDFmODAwLCAweDAwMTBhMmM4LCAweDA0MDIwMDE2LAorCTB4MDQwMWY4NWMsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMGMsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywgMHgwNDAyMDAwOSwgMHg0MTc4MDgwMCwKKwkweDRkNDAwMDAwLCAweDQyMDI4MDAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDk0M2IsIDB4NWMwMjgwMDAsIDB4MDQwMWYwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjA3NCwgMHgwMjAxZjgwMCwgMHgwMDEwNDhjMSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzdkLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDA3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsIDB4MDQwMjAwMDQsIDB4MDQwMWZmM2QsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAyMDNjLCAweDQyMDAwMDAwLCAweDAwMTBiODY0LCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4NTkzNDAyMDAsIDB4ODQwMDA1NTgsIDB4NDgwMjZhMDAsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwYTk0MiwKKwkweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NDkzNjYwMDksIDB4NDk3YTYwMDgsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKKwkweDAwMTAzYjI1LCAweDA0MDAwMDExLCAweDRhMDI2NDA2LCAweDAwMDAwMDA0LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4NGEwMjY0MjAsIDB4MDAwMDAwMDEsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAwMSwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDI5LCAweDQxNzgyODAwLCAweDAyMDFmODAwLCAweDAwMTBhNDNlLAorCTB4NWMwMjgwMDAsIDB4MDQwMWYwMDksIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTA2NzJiLCAweDVjMDI2MDAwLCAweDA0MDFmZjA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCisJMHgwNDAxZmYwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjBjNywKKwkweDQ5MzNjODU3LCAweDU5MzQwMjAwLCAweDhjMDAwNTAwLCAweDA0MDAwMDBkLAorCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NjcsCisJMHg1YzAyNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDAwNSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTlhODA4MTYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDA3NCwgMHgwNDAwMDAwZSwgMHg0ODA3Yzg1NywgMHg4MjA0MDU4MCwKKwkweDAwMDAwMTAwLCAweDA0MDIwMGEwLCAweDU5Y2MwNDA4LCAweDQ4MDNjODU3LAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwOWMsIDB4NTkzNDE0MDMsIDB4ODIwODA1ODAsCisJMHgwMDAwMDdmZSwgMHgwNDAwMDAwNiwgMHgwNDAxZjA5NywgMHg1OTM0MTQwMywKKwkweDgyMDgwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDAzLCAweDA0MDFmYTljLAorCTB4MDQwMWYwNGMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ2MmEsIDB4NTkzNDE0MDMsCisJMHg4MjA4MDU4MCwgMHgwMDAwMDdmYywgMHgwNDAyMDAxZiwgMHg0YTAyNjgwMiwKKwkweDAwZmZmZmZjLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDEyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsIDB4MDQwMjAwMGYsIDB4MDQwMWY4YTksCisJMHg0MTc4MDgwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA5NDNiLCAweDVjMDI4MDAwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDc3ZCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0NTcxLCAweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsIDB4MDQwMDAwMTEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwKKwkweDA0MDIwMDA5LCAweDU5MzQwMDAyLCAweDgyMDAwNTAwLCAweDAwZmYwMDAwLAorCTB4ODIwMDA1ODAsIDB4MDBmZjAwMDAsIDB4MDQwMDAwMDYsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNGM2ZCwgMHgwNDAyMDA1YSwKKwkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDViLCAweDAyMDFmODAwLAorCTB4MDAxMDk1OTcsIDB4MDQwMjAwMDUsIDB4NTkyYzA0MDQsIDB4OGMwMDA1MWMsCisJMHgwNDAyMDdjOSwgMHgwNDAxZjg3NywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwKKwkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMDMsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsCisJMHg1OWNjMDQwOCwgMHg4YzAwMDUxOCwgMHgwNDAwMDAxMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MmU1LCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDAwMDA0LAorCTB4NTljYzA0MDgsIDB4OGMwMDA1MTYsIDB4MDQwMjA3YjMsIDB4NTlhODAwMjYsCisJMHg4NDAwMDU0YSwgMHg0ODAzNTAyNiwgMHg1OWE4MDAxMCwgMHg4NDAwMDU3MCwKKwkweDQ4MDM4ODMyLCAweDA0MDFmN2FjLCAweDQyMDAxMDAwLCAweDAwMDAwMGVmLAorCTB4NDgwYjUwMTAsIDB4NDk3Yjg4MzAsIDB4ODQwODE1NzAsIDB4NDgwYjg4MzIsCisJMHg1OWM0MDgwMiwgMHg4NDA0MGQ0YywgMHg0ODA3ODgwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MzBmLCAweDU5YTgwMDI2LCAweDg0MDAwNTQ4LCAweDQ4MDM1MDI2LAorCTB4MDIwMWY4MDAsIDB4MDAxMGEzZGEsIDB4MDQwMjA3OWIsIDB4NTlhODAwMjYsCisJMHg4NDAwMDU0YywgMHg0ODAzNTAyNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NjcsIDB4NDIwMDAwMDAsIDB4MDAwMDAwZTgsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWM5YSwgMHgwMjAwMDgwMCwgMHgwMDEwNDVhNiwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNWQ4LCAweDQ5MzY2MDA5LCAweDU5MzQwMjAwLCAweDg0MDAwNTFhLAorCTB4NDgwMjZhMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLAorCTB4MDAxMDY3MmIsIDB4MDQwMWZlNDMsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwYSwgMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAwMDdhYiwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDkzM2M4NTcsIDB4ODAwMDM1NDAsCisJMHgwNDAwMDAwNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0NTcxLCAweDgwMTgzMWMwLCAweDA0MDIwMDBlLCAweDU5MzAyMDA4LAorCTB4ODAxMDIxYzAsIDB4MDQwMDAwMDQsIDB4NTgxMDA0MDQsIDB4OGMwMDA1MWUsCisJMHgwNDAyMDAwOCwgMHg1OTM0MWMwMywgMHg0MjAwMjAwMCwgMHgwMDAwMDAwNCwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDEyLCAweDAyMDFmODAwLCAweDAwMTAzYWFlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCisJMHg0YzVjMDAwMCwgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1NzU1LCAweDVjMDI1ODAwLCAweDU5Y2MwMDA4LCAweDQ4MDAyODA1LAorCTB4NTljYzAwMDksIDB4NDgwMDI4MDYsIDB4NDk3ODI4MDcsIDB4NDk3ODI4MDgsCisJMHg0OTc4MjgwOSwgMHg0OTc4MjgwYSwgMHg1OWNjMDAxMywgMHg4YzAwMDUzZSwKKwkweDA0MDAwMDA5LCAweDU5Y2MwNDE0LCAweDkwMDAwMWMwLCAweDU5Y2NiYzE1LAorCTB4ODA1YzA1NDAsIDB4NDgwMDI4MDcsIDB4NTljYzA0MTYsIDB4OTAwMDAxYzAsCisJMHg0ODAwMjgwOCwgMHg1OWNjMDAxNywgMHg4YzAwMDUzZSwgMHgwNDAwMDAwOSwKKwkweDU5Y2MwNDE4LCAweDkwMDAwMWMwLCAweDU5Y2NiYzE5LCAweDgwNWMwNTQwLAorCTB4NDgwMDI4MDksIDB4NTljYzA0MWEsIDB4OTAwMDAxYzAsIDB4NDgwMDI4MGEsCisJMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OWE4MDAxNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDQ4LCAweDU5YTgwMDA1LAorCTB4OGMwMDA1MTQsIDB4MDQwMDAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHgwNDAyMDAwOSwgMHg1OTM0MDAwMiwKKwkweDgyMDAwNTAwLCAweDAwZmYwMDAwLCAweDgyMDAwNTgwLCAweDAwZmYwMDAwLAorCTB4MDQwMDAwMGEsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwNGM2ZCwgMHgwNDAwMDAwNSwgMHg1OWE4MDAwNSwgMHg4NDAwMDU1NiwKKwkweDQ4MDM1MDA1LCAweDA0MDFmMDMxLCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMjAwMGIsIDB4NTkzMDAwMDgsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDgsCisJMHg1OTM0MWMwMywgMHg0MjAwMjAwMCwgMHgwMDAwMDAwNiwgMHg0MjAwMzAwMCwKKwkweDAwMDAwMDEzLCAweDAyMDFmODAwLCAweDAwMTAzYWFlLCAweDAyMDFmODAwLAorCTB4MDAxMDQ2OGQsIDB4MDQwMWZlY2YsIDB4MDQwMWZhMWQsIDB4MDQwMjAwMWYsCisJMHg1OTM0MDQwNCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxYywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDAyMDFmODAwLAorCTB4MDAxMDkwMzcsIDB4MDQwMDAwMTEsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsCisJMHgwNDAyMDAwYSwgMHg0MTc4MDgwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA5NDNiLCAweDVjMDI4MDAwLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHg0YTAyNTgwNSwgMHgwMjAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwKKwkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDAyMDFmODAwLCAweDAwMTA0YzE5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMDcsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTU5NywgMHgwNDAyMDAwNCwgMHgwNDAxZmRhMiwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzdkLCAweDA0MDFmZDlmLCAweDgwMDAwNTgwLCAweDU5YTgwMDA1LAorCTB4OGMwMDA1MTYsIDB4MDQwMDAwMDUsIDB4ODQwMDA1MTYsIDB4NDgwMzUwMDUsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZmY2MCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LAorCTB4MDQwMjAwMGIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWY3NGQsIDB4NDkzM2M4NTcsIDB4NDAwMDMwMDAsCisJMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAwYSwKKwkweDgyMTgzNTgwLCAweDAwMDAwMDBiLCAweDA0MDIwMDA1LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDc3ZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjczYiwKKwkweDQ4MDNjODU3LCAweDRkMmMwMDAwLCAweDRkM2MwMDAwLCAweDBjMDFmODA0LAorCTB4NWMwMjc4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDgwYjgsCisJMHgwMDEwODJjZSwgMHgwMDEwODBiOCwgMHgwMDEwODMyMywgMHgwMDEwODBiOCwKKwkweDAwMTA4MzkxLCAweDAwMTA4MmJmLCAweDAwMTA4MGI4LCAweDAwMTA4MGI4LAorCTB4MDAxMDgzYjEsIDB4MDAxMDgwYjgsIDB4MDAxMDgzYzEsIDB4NDkzM2M4NTcsCisJMHg0ZDFjMDAwMCwgMHg1OTMwMTQwMywgMHg4MjA4MDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDAwMDA4LCAweDgyMDgxNTgwLCAweDAwMDAwMDFlLCAweDA0MDIwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsIDB4NWMwMjM4MDAsIDB4MWMwMWYwMDAsCisJMHgwNDAxZmY1YSwgMHgwNDAxZjdmZCwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA5MDM3LCAweDA0MDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA5NTk3LAorCTB4MDQwMjAwMDgsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTU3ZCwgMHgwNDAxZmQ0MywgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKKwkweDA0MDFmOGY1LCAweDA0MDIwMDMwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NjcsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDU5MzQwMjAwLCAweDg0MDAwNTU4LCAweDQ4MDI2YTAwLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwMDIsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTk0MiwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDAxMSwKKwkweDRkNDAwMDAwLCAweDQxNzgyODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDA1LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMGE0M2UsCisJMHg1YzAyODAwMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDA0LCAweDRhMDI2NDIwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNjcyYiwKKwkweDA0MDFmN2Y3LCAweDU5Y2MwNDA3LCAweDgyMDAwNTgwLCAweDAwMDAwMDA5LAorCTB4MDQwMjAwMGEsIDB4NTkzNDA0MTIsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHgwNDAwMDAwYywgMHg4MDAwMDA0MCwgMHg0ODAyNmMxMiwgMHg0YTAyNjIwNiwKKwkweDAwMDAwMDBhLCAweDA0MDFmN2VhLCAweDU5Y2MwMjA3LCAweDgyMDAwNTAwLAorCTB4MDAwMGZmMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDE5MDAsIDB4MDQwMDA3YzIsCisJMHgwNDAxZmNmYywgMHg4MDAwMDU4MCwgMHgwNDAxZjZjNCwgMHg0OTMzYzg1NywKKwkweDU5YTgwMDMyLCAweDgwMDAwNTQwLCAweDA0MDAwMDE1LCAweDU5MzQwNDAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMjAwMTEsIDB4NTlhODAwMTAsCisJMHg4MDAwMDAwMCwgMHg0ODAzNTAxMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0NTY3LCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NzEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MDM3LCAweDA0MDAwMDExLCAweDAyMDFmODAwLCAweDAwMTA5NTk3LAorCTB4MDQwMjAwMGUsIDB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTU3ZCwgMHg1YzAwYjAwMCwgMHgwNDAxZmNkNSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4MDQwMWZjY2UsIDB4NTljYzM0MDcsCisJMHg4MjE4MzUwMCwgMHgwMDAwMDBmZiwgMHg4MjE4MDU4MCwgMHgwMDAwMDAwNSwKKwkweDA0MDAwMDFjLCAweDgyMTgwNTgwLCAweDAwMDAwMDBiLCAweDA0MDAwMDE2LAorCTB4NTljYzAyMDcsIDB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4MDQwMjAwMDQsCisJMHg4MjE4MDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAwMDAxMiwgMHg4MjAwMDU4MCwKKwkweDAwMDAxOTAwLCAweDA0MDIwMDBjLCAweDgyMTgwNTgwLCAweDAwMDAwMDA5LAorCTB4MDQwMDAwMGMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzdkLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDA0MDFmNjc3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4NTkzMjU4MDgsIDB4MDQwMDAwMDgsCisJMHg1OTJjMDIwNCwgMHg4MjAwMDU4MCwgMHgwMDAwMDEzOSwgMHgwNDAwMDdmNiwKKwkweDU5MmMwNDA0LCAweDhjMDAwNTFlLCAweDA0MDIwN2YzLCAweDU5MzQwNDAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMjAwMDcsIDB4NTlhODAwMjYsCisJMHg4NDAwMDU0MCwgMHg0ODAzNTAyNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDIyOSwKKwkweDA0MDFmN2U5LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NDIsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDA0MDFmN2RkLCAweDQ5MzNjODU3LCAweDA0MDFmODRkLCAweDA0MDIwMDBiLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMywKKwkweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDQyMDAwODAwLCAweDAwMDAwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsCisJMHgwNDAyMDAwYSwgMHg0YzU4MDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKKwkweDAyMDFmODAwLCAweDAwMTA5NTdkLCAweDVjMDBiMDAwLCAweDA0MDFmYzcxLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4MDQwMWZjNmUsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjYzNiwgMHg0OTMzYzg1NywgMHgwNDAxZjgyZCwgMHgwNDAyMDAwYiwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA5LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDUsCisJMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmNjI2LCAweDQ5MzNjODU3LCAweDA0MDFmODFkLCAweDA0MDIwMDBiLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwKKwkweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAorCTB4MDQwMWY2MTYsIDB4NDkzM2M4NTcsIDB4NTljYzA0MDcsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAyMDAwOSwgMHg1OWNjMDIwNywgMHg4MjAwMDUwMCwKKwkweDAwMDBmZjAwLCAweDgyMDAwZDgwLCAweDAwMDAyYTAwLCAweDA0MDAwMDAzLAorCTB4ODIwMDBkODAsIDB4MDAwMDFlMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDRkNDAwMDAwLCAweDRjNTgwMDAwLCAweDU5YTgwMDI2LCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDMsIDB4NDgwMzUwMjYsIDB4MDQwMWY4NWMsIDB4MDQwMDAwMzgsCisJMHg0ZDM0MDAwMCwgMHg0ZDQ0MDAwMCwgMHg1OWE4MDAyNiwgMHg4NDAwMDU1MiwKKwkweDQ4MDM1MDI2LCAweDAyMDFmODAwLCAweDAwMTAzYjI1LCAweDA0MDAwMDBjLAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMmEsIDB4NDIwMjg4MDAsIDB4MDAwMGZmZmYsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwYTQ0NiwKKwkweDU5YTgwODA1LCAweDg0MDQwZDQ0LCAweDQ4MDc1MDA1LCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMmEsIDB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsIDB4MDAwMDAyMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwMWZlNSwgMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODY0LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDAyMDFmODAwLAorCTB4MDAxMDFlNDUsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4NDIwMjg4MDAsCisJMHgwMDAwMDdmMCwgMHg0ZDJjMDAwMCwgMHg4MzQ0MDU4MCwgMHgwMDAwMDdmZSwKKwkweDA0MDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA0NWZiLCAweDgxNDY4ODAwLAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZjksIDB4NWMwMjU4MDAsIDB4NTljYzA0MDgsCisJMHg4YzAwMDUxZSwgMHgwNDAwMDAwNCwgMHg1OWE4MDAyNiwgMHg4NDAwMDUxMiwKKwkweDQ4MDM1MDI2LCAweDVjMDI4ODAwLCAweDVjMDI2ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQ2MmEsIDB4NGEwMjY4MDIsIDB4MDBmZmZmZmUsIDB4NTlhODA4MjYsCisJMHg4NDA0MGQ1MCwgMHg1OWNjMDAxMywgMHg4YzAwMDUzZSwgMHgwNDAwMDAwMywKKwkweDhjMDAwNTM2LCAweDA0MDAwMDA0LCAweDU5Y2MwMDE3LCAweDhjMDAwNTM2LAorCTB4MDQwMjAwMDIsIDB4ODQwNDBkMTAsIDB4NDgwNzUwMjYsIDB4NTljYzA4MDAsCisJMHg4MjA0MGQwMCwgMHgwMGZmZmZmZiwgMHg0ODA3NTAxMCwgMHg4MDA0MDExMCwKKwkweDQ4MDM1MDFkLCAweDQ4MDM4ODgxLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLAorCTB4MDQwMDAwMDcsIDB4NTljYzAwMDksIDB4NDgwMzUwMzUsIDB4NTljYzAwMGEsCisJMHg0ODAzNTAzNiwgMHgwMjAxZjgwMCwgMHgwMDEwOTJlNSwgMHg1YzAwYjAwMCwKKwkweDVjMDI4MDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNTgwMDAwLAorCTB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmMDAsIDB4MDQwMDAwMjIsCisJMHg1OWNjMTAwMCwgMHg4MjA4MTUwMCwgMHgwMGZmZmYwMCwgMHg4MDA4MDU4MCwKKwkweDA0MDAwMDA0LCAweDQyMDAwMDAwLCAweDAwMTBiODNiLCAweDA0MDFmMDE2LAorCTB4ODNjYzE0MDAsIDB4MDAwMDAwMGIsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCisJMHg4MzM0MWMwMCwgMHgwMDAwMDAwNiwgMHgwNDAxZjkwMCwgMHgwNDAwMDAwNCwKKwkweDQyMDAwMDAwLCAweDAwMTBiODNjLCAweDA0MDFmMDBiLCAweDgzY2MxNDAwLAorCTB4MDAwMDAwMGQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODMzNDFjMDAsCisJMHgwMDAwMDAwOCwgMHgwNDAxZjhmNSwgMHgwNDAwMDAwNywgMHg0MjAwMDAwMCwKKwkweDAwMTBiODNkLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg1OWNjMDIwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwgMHgwNDAyMDAxNiwKKwkweDU5Y2MwNDA3LCAweDgyMDAwNTgwLCAweDAwMDAwODAwLCAweDA0MDIwMDEyLAorCTB4NTljYzAyMDcsIDB4OGMwMDA1MWEsIDB4MDQwMDAwMGQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMGYwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDEwMCwgMHgwNDAyMDAwOCwKKwkweDU5Y2MwMjBhLCAweDhjMDAwNTA4LCAweDA0MDIwMDAzLCAweDhjMDAwNTBhLAorCTB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0OTQzYzg1NywKKwkweDQ5M2ZjODU3LCAweDRjNWMwMDAwLCAweDRkMzAwMDAwLCAweDRkMzQwMDAwLAorCTB4NGQyYzAwMDAsIDB4NGQzODAwMDAsIDB4NDEzMGI4MDAsIDB4NDIwMjYwMDAsCisJMHgwMDEwZDFjMCwgMHg1OWE4MDAwZSwgMHg4MTY0MDQ4MCwgMHgwNDAyMTBiZCwKKwkweDhkM2U3ZDEyLCAweDA0MDAwMDA0LCAweDQwNWMwMDAwLCAweDgxMzAwNTgwLAorCTB4MDQwMDAwYjMsIDB4NTkzMDA0MDYsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTIsCisJMHgwNDAyMTAxNSwgMHg1OTMyNjgwOSwgMHgwYzAxZjAwMSwgMHgwMDEwODU0ZiwKKwkweDAwMTA4NGJjLCAweDAwMTA4NGQzLCAweDAwMTA4NGRlLCAweDAwMTA4NGI3LAorCTB4MDAxMDg0Y2UsIDB4MDAxMDg1MDcsIDB4MDAxMDg1NGYsIDB4MDAxMDg0YjUsCisJMHgwMDEwODUxYiwgMHgwMDEwODUyYSwgMHgwMDEwODRiNSwgMHgwMDEwODRiNSwKKwkweDAwMTA4NGI1LCAweDAwMTA4NGI1LCAweDAwMTA4NTRmLCAweDAwMTA4NTQwLAorCTB4MDAxMDg1MzgsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4OGQzZTdkMTgsCisJMHgwNDAwMDAwNCwgMHg1OTMwMDQyMCwgMHg4YzAwMDUwMCwgMHgwNDAyMDA5NCwKKwkweDU5MzAwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDQzLCAweDA0MDAwMDkwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkxMzQsIDB4MDIwMDA4MDAsIDB4MDAxMDIwNzQsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTE0ZSwgMHgwMjAwMDgwMCwgMHgwMDEwODAxYywKKwkweDhkM2U3ZDA2LCAweDA0MDAwMDg0LCAweDAyMDFmODAwLCAweDAwMTA5MmQ3LAorCTB4MDQwMDAwODMsIDB4MDQwMWYwODAsIDB4OGQzZTdkMTYsIDB4MDQwMDAwMDQsCisJMHg1OTMwMDQyMCwgMHg4YzAwMDUwMCwgMHgwNDAyMDA3ZCwgMHg1OTMyNTgwOCwKKwkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDc3LCAweDQ5NDI1YTA2LAorCTB4NDk3YTVjMDksIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTEyYSwgMHgwNDAxZjA3MCwgMHg4MTM2NjljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDhkM2U3ZDA2LCAweDA0MDAwMDA0LCAweDU5MzQwMjAwLAorCTB4OGMwMDA1MGUsIDB4MDQwMjAwNmEsIDB4NTkzMDAwMDQsIDB4ODQwMDA1NWMsCisJMHg0ODAyNjAwNCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwKKwkweDAyMDAwODAwLCAweDAwMTAwZTk5LCAweDU5MzI1ODA4LCAweDAyMDFmODAwLAorCTB4MDAxMDkwMzcsIDB4MDQwMDAwNWMsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwgMHg1OTJjMDQwOCwgMHg4YzAwMDUxMiwKKwkweDA0MDAwMDA2LCAweDRkMmMwMDAwLCAweDU5MmU1ODA5LCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZmQsIDB4NWMwMjU4MDAsIDB4NDk0MjVhMDYsIDB4NDk3YTVjMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwOTU5YywgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKKwkweDAyMDFmODAwLCAweDAwMTA5MTJhLCAweDA0MDFmMDQ3LCAweDhjMDAwNTE4LAorCTB4MDQwMDAwNDcsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsCisJMHgwMjAwMDgwMCwgMHgwMDEwMGU5OSwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MDM3LCAweDA0MDAwMDNjLCAweDQ5NDI1YTA2LCAweDQ5N2E1YzA5LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE2OTMsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwNDAxZjAzMywgMHgwMjAxZjgwMCwKKwkweDAwMTA2MmQ1LCAweDA0MDAwMDMyLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDQsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDBlOTksCisJMHgwNDAxZjAyYiwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0NywgMHgwMjAxZjgwMCwKKwkweDAwMDIwN2ExLCAweDA0MDFmMDI2LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDQsIDB4MDIwMDA4MDAsIDB4MDAxMDBlOTksIDB4NTkzMjU4MDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAxYiwgMHg0OTQyNWEwNiwKKwkweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDA0MDFmMDE2LAorCTB4ODMzYzA1MDAsIDB4MDAwMDE4MDAsIDB4MDQwMDAwMTUsIDB4OGQzZTdkMTYsCisJMHgwNDAyMDAxMywgMHg1OTMyNTgxNywgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwKKwkweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LCAweDAyMDAwODAwLAorCTB4MDAxMDBlOTksIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCisJMHgwNDAwMDAwNSwgMHg0OTQyNWEwNiwgMHg0OTdhNWMwOSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMmRhLCAweDAyMDFmODAwLCAweDAwMTA3OTExLCAweDgzMzI2NDAwLAorCTB4MDAwMDAwMjQsIDB4NDE1ODAwMDAsIDB4ODEzMDA0ODAsIDB4MDQwMDE3NDIsCisJMHg1YzAyNzAwMCwgMHg1YzAyNTgwMCwgMHg1YzAyNjgwMCwgMHg1YzAyNjAwMCwKKwkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDVjMDAwMDAwLCAweDRjMDAwMDAwLAorCTB4NDgwM2M4NTcsIDB4NDgwYmM4NTcsIDB4NDgwZmM4NTcsIDB4NDg1YmM4NTcsCisJMHg1MDA4MDgwMCwgMHg1MDBjMDAwMCwgMHg4MDA0MjU4MCwgMHgwNDAyMDAwNywKKwkweDgwMDgxMDAwLCAweDgwMGMxODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y5LAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NDgwN2M4NTcsCisJMHg0ODBiYzg1NywgMHg0ODBmYzg1NywgMHg4MDA0MDQ4MCwgMHgwNDAwMTAwNiwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDgyMDQwZDQwLCAweDAwMDAwMDAxLAorCTB4MWMwMWYwMDAsIDB4NDE3ODAwMDAsIDB4MDQwMWY3ZmMsIDB4ODMzODA0ODAsCisJMHgwMDAwMDA1MywgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MDQ4MCwKKwkweDAwMDAwMDRiLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLAorCTB4MDAxMDg1OGEsIDB4MDAxMDg1OGEsIDB4MDAxMDg1OGEsIDB4MDAxMDg1OGEsCisJMHgwMDEwODU4OCwgMHgwMDEwODU4OCwgMHgwMDEwODU4OCwgMHgwMDEwODU4YSwKKwkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ5M2JjODU3LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMGQsIDB4NDkzYTY0MDMsIDB4NDIwMDA4MDAsIDB4ODAwMDAwMDAsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxMywKKwkweDA0MDIwMDA4LCAweDU5MzAwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDUwLAorCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCisJMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwgMHgwMDAwMDAyNywgMHgwNDAyMDAzMCwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDRkM2MwMDAwLAorCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAorCTB4NDkyZmM4NTcsIDB4MDQwMDAwMGQsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHg1OTMwMGMwMiwgMHg0ODA2NWMwNiwgMHg0YTAyNWEwNiwgMHgwMDAwMDAyOSwKKwkweDQ5N2E1YzA5LCAweDU5MmMwYzA4LCAweDg0MDQwZDUwLCAweDQ4MDY1YzA4LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAxNSwgMHg0MTc4MjgwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAwMywKKwkweDRkNDAwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsCisJMHg1YzAyODAwMCwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDE0LCAweDA0MDIwMDBjLCAweDU5MzAwNDAzLCAweDgyMDAwYzgwLAorCTB4MDAwMDAwNTMsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwMDA0ODAsCisJMHgwMDAwMDA0MCwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NywKKwkweDBjMDFmMDBlLCAweDgzMzgwNTgwLCAweDAwMDAwMDUzLCAweDA0MDAwMDBhLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwNDgsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCisJMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA1MCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNWQ4LCAweDFjMDFmMDAwLCAweDAwMTA4NWZmLCAweDAwMTA4NWZkLAorCTB4MDAxMDg1ZmQsIDB4MDAxMDg1ZmQsIDB4MDAxMDg1ZmQsIDB4MDAxMDg1ZmQsCisJMHgwMDEwODVmZCwgMHgwMDEwODVmZCwgMHgwMDEwODVmZCwgMHgwMDEwODVmZCwKKwkweDAwMTA4NWZkLCAweDAwMTA4NjE2LCAweDAwMTA4NjE2LCAweDAwMTA4NjE2LAorCTB4MDAxMDg2MTYsIDB4MDAxMDg1ZmQsIDB4MDAxMDg2MTYsIDB4MDAxMDg1ZmQsCisJMHgwMDEwODYxNiwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAorCTB4MDIwMDAwMDAsIDB4MDAwMjA3N2QsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwKKwkweDRhMDI1YTA2LCAweDAwMDAwMDA2LCAweDQ5N2E1YzA5LCAweDAyMDFmODAwLAorCTB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDkxMmEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA2YmJmLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsIDB4MDIwMjA4MDAsCisJMHgwMDEwOTg0ZSwgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwgMHgwNDAyMDAyOSwKKwkweDU5MzI1ODA4LCAweDU5MmMwYzA4LCAweDU5Y2MyYTA4LCAweDgyMTQxZDAwLAorCTB4MDAwMDBjMDAsIDB4MDQwMDAwMDIsIDB4NTljYzE4MDksIDB4ODQwNDBkNTgsCisJMHg0ODA2NWMwOCwgMHg4MjE0MzUwMCwgMHgwMDAwMGZmZiwgMHgwNDAyMDAyNywKKwkweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDgwLCAweDAyMDFmODAwLAorCTB4MDAwMjA4MmIsIDB4MDQwMjAwMDYsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsCisJMHg1OTMwMDgxMSwgMHg4MDA0MDljMCwgMHgwNDAyMDk0YiwgMHg0YTAyNWEwNCwKKwkweDAwMDAwMTAzLCAweDQ4MDY1ODA3LCAweDQ4MGU1ODBhLCAweDQ4MTY1YzA5LAorCTB4NTkzMDBjMDIsIDB4NDgwNjVjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyYzEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDliMiwgMHg1OWNjMDIwOCwgMHg4YzAwMDUxOCwKKwkweDAyMDIwMDAwLCAweDAwMTA5MWQxLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZmNjAsIDB4MDQwMDA3ZDYsIDB4NGQzYzAwMDAsCisJMHg0MjAyNzgwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwOGJlMywKKwkweDVjMDI3ODAwLCAweDA0MDFmN2NmLCAweDQ4MTdjODU3LCAweDQ4MGZjODU3LAorCTB4ODIxODA1MDAsIDB4MDAwMDAwZmYsIDB4MDQwMDAwMGUsIDB4NTkyYzAyMDQsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA0OCwKKwkweDA0MDIwMDA4LCAweDU5MmMwNDA3LCAweDgwMDAwMWMwLCAweDA0MDAwMDA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDk3M2YsIDB4MDIwMWYwMDAsIDB4MDAxMDk3ODcsCisJMHg4MjE4MGQwMCwgMHgwMDAwMGMwMCwgMHgwNDAwMDAwNCwgMHg1OTM0MDIwMCwKKwkweDhjMDAwNTBlLCAweDA0MDIwMDMyLCAweDRhMDI1YTA2LCAweDAwMDAwMDAwLAorCTB4NDE3ODIwMDAsIDB4OGMxODM1MTAsIDB4MDQwMDAwMDcsIDB4NTljYzAwMGMsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHgwNDAwMDAwMiwgMHg0ODAzYzg1NywKKwkweDU5Y2MyMDBiLCAweDQ4MTI1ODBjLCAweDQxNzgwMDAwLCAweDhjMTgzNTEyLAorCTB4MDQwMDAwMDIsIDB4NTljYzAwMGEsIDB4NDgwMjU4MGIsIDB4ODAxMDBjMDAsCisJMHgwNDAwMDdiOCwgMHg4MjA0MTQ4MCwgMHgwMDAwMDAxZCwgMHgwNDAwMTAwNiwKKwkweDU5MmMwNDA0LCAweDhjMDAwNTFlLCAweDA0MDAwMDBlLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMWMsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwYywgMHg4MzJjYWMwMCwgMHgwMDAwMDAwZCwgMHgwMjAxZjgwMCwKKwkweDAwMTA4YjlmLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLCAweDA0MDFmN2E1LAorCTB4NTkzMDAwMTEsIDB4NTkzMDE0MDIsIDB4NDgwYTVjMDYsIDB4NDgwMjU4MDcsCisJMHg0ODBlNTgwYSwgMHg0ODE2NWMwOSwgMHgwMjAxZjgwMCwgMHgwMDEwOGI0OCwKKwkweDAyMDFmODAwLCAweDAwMTA4Yjg0LCAweDA0MDFmN2E2LCAweDU5MmMwMjBhLAorCTB4OGMwMDA1MDIsIDB4MDQwMDA3Y2QsIDB4NTkyYzAyMDgsIDB4OGMwMDA1MGUsCisJMHgwNDAyMDdjYSwgMHg1OTMwMDAxMSwgMHg4MDBjMGQ4MCwgMHgwNDAwMDdjNywKKwkweDQ4MDNjODU3LCAweDQ4MGZjODU3LCAweDhjMTgzNTE0LCAweDAyMDAwMDAwLAorCTB4MDAxMDkyMGYsIDB4ODAwMDA1NDAsIDB4MDQwMDA3YzAsIDB4NDgwN2M4NTYsCisJMHgwMjAxZjAwMCwgMHgwMDEwOTIwZiwgMHg1OTJjMDIwYSwgMHg4YzAwMDUwMiwKKwkweDA0MDAwNzgyLCAweDU5MzAwMDExLCAweDgwMDAwMWMwLCAweDA0MDAwNzdmLAorCTB4NTkyYzAyMDgsIDB4OGMwMDA1MGUsIDB4MDQwMjA3N2MsIDB4MDIwMWYwMDAsCisJMHgwMDEwOTIwZiwgMHg1OWNjMjAwNiwgMHg1OWNjMjgwNywgMHgwNDAxZjAzNSwKKwkweDA0MDFmMDM0LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwMDFjLAorCTB4ODAwMDAxYzAsIDB4MDIwMjA4MDAsIDB4MDAxMDk4NGUsIDB4NTkzMjU4MDgsCisJMHg1OTJjMGMwOCwgMHg0MTc4MjgwMCwgMHg0MTc4MTgwMCwgMHg4NDA0MGQ1OCwKKwkweDQ4MDY1YzA4LCAweDQxNzgzMDAwLCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAorCTB4MDQwMjAwMTgsIDB4MDIwMWY4MDAsIDB4MDAwMjA4MmIsIDB4MDQwMjAwMDcsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg1OTMwMDgxMSwgMHg0ODA3Yzg1NywKKwkweDgwMDQwOWMwLCAweDA0MDIwOGFjLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAorCTB4NDgwNjU4MDcsIDB4NDgwZTU4MGEsIDB4NDgxNjVjMDksIDB4NDkzM2M4NTcsCisJMHg1OTMwMGMwMiwgMHg0ODA2NWMwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDJjMSwKKwkweDAyMDFmODAwLCAweDAwMTA0OWIyLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4NTkyYzAyMGEsIDB4OGMwMDA1MDIsIDB4MDQwMDA3ZWEsIDB4NTkzMDAwMTEsCisJMHg0ODAzYzg1NywgMHg4MDAwMDFjMCwgMHgwNDAwMDdlNiwgMHg1OTJjMDIwOCwKKwkweDhjMDAwNTBlLCAweDA0MDIwN2UzLCAweDAyMDFmMDAwLCAweDAwMTA5MjBmLAorCTB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsIDB4NGMxMDAwMDAsIDB4NGMxNDAwMDAsCisJMHgwMjAyMDgwMCwgMHgwMDEwOTg0ZSwgMHg1YzAwMjgwMCwgMHg1YzAwMjAwMCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDRhMDI2NDAzLCAweDAwMDAwMDQzLAorCTB4NTkzMjU4MDgsIDB4NTkyYzAyMGEsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMTgsCisJMHg0MDEwMDAwMCwgMHg1OTJjMDgwZiwgMHg4MDA0MGM4MCwgMHg0MDE0MDAwMCwKKwkweDgwMDQwNDgwLCAweDA0MDAxMDE0LCAweDQ4MTI2MDEzLCAweDQ4MTY2MDExLAorCTB4NTkzMDAwMDQsIDB4OGMwMDA1M2UsIDB4MDQwMjAwMDgsIDB4NDk3YTYyMDUsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGY5MywgMHgwNDAyMDAwOSwgMHg1OTMwMDgwNCwKKwkweDAyMDFmMDAwLCAweDAwMTA2NzIxLCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAorCTB4MDQwMDA3ZjcsIDB4MDIwMWYwMDAsIDB4MDAxMDc5NzQsIDB4NDkzM2M4NTcsCisJMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg0MDA0MjgwMCwgMHgwNDAxZjdlYiwKKwkweDgzMzgwNDgwLCAweDAwMDAwMDU4LCAweDA0MDIxMDA1LCAweDgzMzgwNDgwLAorCTB4MDAwMDAwNDAsIDB4MDQwMDEwMDIsIDB4MGMwMWYwMDIsIDB4MWMwMWYwMDAsCisJMHgwMDEwODc0MCwgMHgwMDEwODc0MCwgMHgwMDEwODc0MCwgMHgwMDEwODc0MCwKKwkweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzQwLAorCTB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsIDB4MDAxMDg3NDIsIDB4MDAxMDg3NDAsCisJMHgwMDEwODc0MCwgMHgwMDEwODc0MCwgMHgwMDEwODc0MCwgMHgwMDEwODc0ZiwKKwkweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzQwLAorCTB4MDAxMDg3N2QsIDB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZGMzLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDU5YTgwMDM5LAorCTB4NDgwMjYyMDUsIDB4NTkzMDAwMTEsIDB4NTkzMDA4MTUsIDB4ODAwNDBjODAsCisJMHg0ODA2NjAxNSwgMHgwMjAxZjAwMCwgMHgwMDEwNmI4YSwgMHg0OTMzYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTA2YjhhLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwKKwkweDAwMTA5MDM3LCAweDA0MDAwMDEwLCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LAorCTB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NTkzMDA0MDIsIDB4NDgwMjVjMDYsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAyOSwgMHg0OTdhNWMwOSwgMHg1OTJjMGMwOCwKKwkweDg0MDQwZDUwLCAweDQ4MDY1YzA4LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAorCTB4NWMwMjU4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMTQsIDB4NDE3ODI4MDAsCisJMHg0ZDQwMDAwMCwgMHg0ZDQ0MDAwMCwgMHg1OTM2OGMwMywgMHg0MjAwMjAwMCwKKwkweDAwMDAwMDAyLCAweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLAorCTB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDc3ZCwgMHg0OTMzYzg1NywgMHg1OTMwMDgwOCwgMHg0OTc4MGMwOSwKKwkweDQ5NzgwODBhLCAweDU4MDQxNDA4LCAweDg0MDgxNTU4LCAweDQ4MDgwYzA4LAorCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsIDB4OGMwNDBkM2UsIDB4MDQwMjAwMjMsCisJMHg0OTdhNWEwNiwgMHg1OTMwMDAxZiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxNywKKwkweDQ5N2E1YTA2LCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLCAweDRjMGMwMDAwLAorCTB4NGMxMDAwMDAsIDB4NGMxNDAwMDAsIDB4NThmNDEwMDMsIDB4NDAwNDAwMDAsCisJMHg4MDA4MTQ4MCwgMHg1OTMwMDAxZiwgMHg0ODA5ZTgwMywgMHgwMjAxZjgwMCwKKwkweDAwMTAwZDU2LCAweDVjMDAyODAwLCAweDVjMDAyMDAwLCAweDVjMDAxODAwLAorCTB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4NTkyYzAyMDYsIDB4ODAwMDA1NDAsCisJMHgwNDAyMDAwOSwgMHgwNDAxZjAwNSwgMHg1OTJjMDQwOCwgMHg4YzAwMDUxYywKKwkweDA0MDAwMDAyLCAweDU5MmMwODAzLCAweDQ4MDdjODU3LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMTUsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMWYsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwOSwgMHg0YTAyNWEwNiwgMHgwMDAwMDAxMSwgMHg1OTMwMDAxZiwKKwkweDRjMDQwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwZDU2LCAweDVjMDAwODAwLAorCTB4MDQwMWY3ZjUsIDB4NDgwN2M4NTYsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDcsCisJMHgxYzAxZjAwMCwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA1OCwgMHgwNDAyMTAwNywKKwkweDgzMzgwNDgwLCAweDAwMDAwMDQwLCAweDA0MDAxMDA0LCAweDRkMmMwMDAwLAorCTB4MGMwMWY4MDMsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDg3ZGIsCisJMHgwMDEwODdkYiwgMHgwMDEwODdkYiwgMHgwMDEwODdkYiwgMHgwMDEwODdkYiwKKwkweDAwMTA4N2RkLCAweDAwMTA4N2RiLCAweDAwMTA4N2RiLCAweDAwMTA4ODYwLAorCTB4MDAxMDg3ZGIsIDB4MDAxMDg3ZGIsIDB4MDAxMDg3ZGIsIDB4MDAxMDg3ZGIsCisJMHgwMDEwODdkYiwgMHgwMDEwODdkYiwgMHgwMDEwODdkYiwgMHgwMDEwODdkYiwKKwkweDAwMTA4N2RiLCAweDAwMTA4N2RiLCAweDAwMTA4OTEwLCAweDAwMTA4OTM5LAorCTB4MDAxMDg5MTgsIDB4MDAxMDg3ZGIsIDB4MDAxMDg5NDUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDVkOCwgMHg1OTMwMDAxYywgMHg4MDAwMDFjMCwgMHgwMjAyMDgwMCwKKwkweDAwMTA5ODRlLCAweDU5MzAwMDA3LCAweDhjMDAwNTBlLCAweDA0MDAwMDdjLAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwNmUsIDB4OGMwMDA1MWMsIDB4MDQwMDAwMDksCisJMHg4NDAwMDUwMCwgMHg0ODAyNjAwNywgMHg1OTMyNTgwOCwgMHg1OTJjM2MwOCwKKwkweDg0MWMzZDU4LCAweDQ4MWU1YzA4LCAweDAyMDFmMDAwLCAweDAwMDIwN2RkLAorCTB4NTkzMjU4MDgsIDB4NTkyYzNjMDgsIDB4ODQxYzNkNTgsIDB4NTkzMDAwMDcsCisJMHg4YzAwMDUxYywgMHgwNDAyMDdmMywgMHg0ODFlNWMwOCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDA1LCAweDQwMDAwMDAwLCAweDgwMDAwMDQwLCAweDA0MDIwN2ZlLAorCTB4NTkzMDAwMDcsIDB4OGMwMDA1MWMsIDB4MDQwMjA3ZWEsIDB4NTljYzBhMDgsCisJMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDQ4LCAweDA0MDIwMDBjLCAweDQ5N2E1ODBiLCAweDgyMDQwNTAwLAorCTB4MDAwMDAwZmYsIDB4MDQwMDAwMDgsIDB4NTkyYzA0MDcsIDB4ODAwMDAxYzAsCisJMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwOTczZiwgMHgwMjAxZjAwMCwKKwkweDAwMTAwZTU2LCAweDQ4MDY1YzA5LCAweDQxNzgyMDAwLCAweDgyMDQwNTAwLAorCTB4MDAwMDBjMDAsIDB4MDQwMDAwMDIsIDB4NTljYzIwMDksIDB4ODIwNDM1MDAsCisJMHgwMDAwMGZmZiwgMHgwNDAyMDAyNywgMHg0ODFlNWMwOCwgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDAwLCAweDgwMTgzMWMwLCAweDAyMDAwMDAwLCAweDAwMTAwZTU2LAorCTB4NDE3ODIwMDAsIDB4OGMxODM1MTAsIDB4MDQwMDAwMDIsIDB4NTljYzIwMGIsCisJMHg0ODEyNTgwYywgMHg0MTc4MDAwMCwgMHg4YzE4MzUxMiwgMHgwNDAwMDAwMiwKKwkweDU5Y2MwMDBhLCAweDQ4MDI1ODBiLCAweDgwMTAwYzAwLCAweDAyMDAxODAwLAorCTB4MDAxMDA1ZDgsIDB4MDIwMDAwMDAsIDB4MDAxMDBlNTYsIDB4ODIwNDE0ODAsCisJMHgwMDAwMDAxZCwgMHgwNDAyMTAwYywgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKKwkweDgzY2NhNDAwLCAweDAwMDAwMDBjLCAweDgzMmNhYzAwLCAweDAwMDAwMDBkLAorCTB4MDQwMWZiNjcsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwMGU1NiwgMHgwNDAxZmIwYiwgMHgwMjAxZjAwMCwgMHgwMDEwMGU1NiwKKwkweDQxMmM3ODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NDkyYzc4MDksIDB4ODQxYzNkNTIsIDB4NDgxYzdjMDgsCisJMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg0ODEyNTgwYSwgMHg0ODA2NWMwOSwKKwkweDU4M2MwNDA0LCAweDU4M2MxMDA1LCAweDU4M2MyMjA4LCAweDQ4MDI1YzA0LAorCTB4NDgwYTU4MDUsIDB4NDgxMjVhMDgsIDB4MDQwMWY3YzgsIDB4OGMwMDA1MjQsCisJMHgwNDAwMDc5NCwgMHg1OTMyNTgwOCwgMHg0YzAwMDAwMCwgMHg1OTJjMDQwOCwKKwkweDhjMDAwNTFjLCAweDVjMDAwMDAwLCAweDA0MDIwMDAzLCAweDRhMDI2MDExLAorCTB4ZmZmZmZmZmYsIDB4ODQwMDA1MjQsIDB4MDQwMWY3OGEsIDB4MWMwMWYwMDAsCisJMHg1OWE4MDAzOSwgMHg0ODAyNjIwNSwgMHg1OTMyNTgwOCwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAyLCAweDU5MmMyNDA4LCAweDU5MzAwODA3LCAweDQ5MzNjODU3LAorCTB4NDgwN2M4NTcsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDA0OCwgMHgwNDAyMDAwNCwgMHg4YzEwMjUwMCwKKwkweDAyMDIwMDAwLCAweDAwMTA5Nzg3LCAweDRhMDI1YTA2LCAweDAwMDAwMDAwLAorCTB4OGMwNDBkMWUsIDB4MDQwMDAwMjcsIDB4NDE3ODA4MDAsIDB4NDk3YTVjMDksCisJMHg1OTJjMWMwOSwgMHg1OTMwMDAxMSwgMHg1OTM0MTIwMCwgMHg0OTdhNjIwNSwKKwkweDhjMDgxNTBlLCAweDA0MDIwMDZlLCAweDQ4MDdjODU3LCAweDQ4MDY1ODBhLAorCTB4ODAwMDBkNDAsIDB4MDQwMjBmMDQsIDB4NTkzMDA0MDIsIDB4NDgwMjVjMDYsCisJMHg0ODA2NTgwNywgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg0YzA0MDAwMCwKKwkweDRjMGMwMDAwLCAweDRjMTAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA5NTljLAorCTB4NWMwMDIwMDAsIDB4NWMwMDE4MDAsIDB4NWMwMDA4MDAsIDB4OGMxMDI1MTIsCisJMHgwNDAyMDAxYSwgMHg0YzBjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJjMSwKKwkweDAyMDFmODAwLCAweDAwMTA0OWIyLCAweDVjMDAxODAwLCAweDhjMGMxZDE4LAorCTB4MDIwMDAwMDAsIDB4MDAwMjA3N2QsIDB4MDIwMWYwMDAsIDB4MDAxMDkxZDEsCisJMHg0ODEzYzg1NywgMHg4YzEwMjUxOCwgMHgwNDAwMDA0YiwgMHg0MTc4MDgwMCwKKwkweDU5MmMxYzA5LCAweDgyMGMwNTgwLCAweDAwMDAxMDAwLCAweDA0MDAwN2Q2LAorCTB4OGMxMDI1MTIsIDB4MDQwMDA3ZDQsIDB4NTkyYzc4MDksIDB4NTgzYzA4MGEsCisJMHg1ODNjMWMwOSwgMHgwNDAxZjdkMCwgMHg0ODA3Yzg1NywgMHg1OTJjNzgwOSwKKwkweDU5MzAwNDAyLCAweDU5MmMxNDA0LCAweDhjMDgxNTFlLCAweDA0MDIwMDBkLAorCTB4NTkyYzEyMDYsIDB4NDgwMDdjMDYsIDB4NDgwNDc4MDcsIDB4NDgwODdhMDYsCisJMHg4NDEwMjUxMiwgMHg0ODEwN2MwOCwgMHg0YzBjMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwN2ZkLCAweDQwM2U1ODAwLCAweDA0MDFmYWNhLCAweDA0MDFmN2Q5LAorCTB4NDgwMjVjMDYsIDB4NDgwNjU4MDcsIDB4NTgzYzA4MGMsIDB4NTgzYzAwMGIsCisJMHg4MDA0MGMwMCwgMHg4MjA0MTQ4MCwgMHgwMDAwMDAxZCwgMHgwNDAwMTAwNiwKKwkweDU4M2MxMDAxLCAweDQ4MGE1ODAxLCAweDQ5Nzg3ODAxLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMWMsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMTQsIDB4NGMwYzAwMDAsCisJMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg4MjNjYTQwMCwgMHgwMDAwMDAwOCwKKwkweDgzMmNhYzAwLCAweDAwMDAwMDA4LCAweDRjMTAwMDAwLCAweDRjM2MwMDAwLAorCTB4MDQwMWZhY2IsIDB4NWMwMDc4MDAsIDB4NWMwMDIwMDAsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHg4NDEwMjUxMiwgMHg0ODEyNWMwOCwgMHg0MDNlNTgwMCwKKwkweDAyMDFmODAwLCAweDAwMTAwN2ZkLCAweDQyMDM0MDAwLCAweDAwMTBiNGE0LAorCTB4NTlhMWQ4MWUsIDB4ODBlZGQ5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHg0OGVmYzg1NywgMHg1OGVjMDAwOSwgMHg0ODAzYzg1NywgMHgwODAxZjgwMCwKKwkweDA0MDFmN2FjLCAweDQ5MzNjODU3LCAweDFjMDFmMDAwLCAweDU5MzAxNDE0LAorCTB4NDgwYmM4NTcsIDB4OGMwODE1MWMsIDB4MDQwMjAwMGUsIDB4ODAwMDA1NDAsCisJMHg0ODAzYzg1NywgMHgwNDAwMDc4ZCwgMHg4MDA0MmM4MCwgMHgwNDAyMTc4YiwKKwkweDhjMDgxNTE0LCAweDA0MDIwMDA1LCAweDU5MmMwODBmLCAweDQ4MDdjODU3LAorCTB4ODAwNDA0ODAsIDB4NDgwMjYwMTYsIDB4ODQwODE1NWMsIDB4NDgwYTY0MTQsCisJMHg1OTMwMTAwNywgMHg4NDA4MTUxZSwgMHg0ODBhNjAwNywgMHg0YTAyNWMwOSwKKwkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA5NTljLCAweDQ5N2E1YzA5LAorCTB4OGMxMDI1MTIsIDB4MDQwMDAwMDYsIDB4NGQyYzAwMDAsIDB4NDAzZTU4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHg1YzAyNTgwMCwgMHg4MjEwMjUwMCwKKwkweGZmZmZlZGZmLCAweDQ4MTI1YzA4LCAweDAyMDFmMDAwLCAweDAwMTA5MjBmLAorCTB4NTkzMjU4MDgsIDB4NTkyYzA0MDgsIDB4OGMwMDA1MTgsIDB4MDQwMDAwMDQsCisJMHg0MTJkZjgwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMGU2ZiwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDU5MzI1ODA4LCAweDQ5N2E1YzA5LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDAsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NTkzMDA4MTEsCisJMHg0ODA3Yzg1NywgMHg4MDA0MDljMCwgMHgwNDAyMDAwYSwgMHg0ODA2NTgwNywKKwkweDU5MzAwYzAyLCAweDQ4MDY1YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMmMxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ5YjIsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCisJMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwNDAyMDAwNSwgMHg1OTMwMDgxMSwKKwkweDA0MDFmZTU1LCAweDQ4MDY1ODA3LCAweDA0MDFmN2YyLCAweDU5MmMwMjA4LAorCTB4OGMwMDA1MGUsIDB4MDQwMjA3ZmEsIDB4NDkzM2M4NTcsIDB4MDIwMWYwMDAsCisJMHgwMDEwOTIwZiwgMHg0OTMzYzg1NywgMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU5MmMwMjBhLCAweDhjMDAwNTAyLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NGEwMjYyMDYsIDB4MDAwMDAwMDIsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDAxYywgMHg4MDAwMDFjMCwgMHgwMjAyMDgwMCwKKwkweDAwMTA5ODRlLCAweDU5MzAwMDA3LCAweDQ5MzNjODU3LCAweDQ4MDNjODU3LAorCTB4OGMwMDA1MGUsIDB4MDQwMDAwMzcsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMjksCisJMHg4YzAwMDUxYywgMHgwNDAwMDAwYSwgMHg4NDAwMDUwMCwgMHg0ODAyNjAwNywKKwkweDU5MzI1ODA4LCAweDU5MmMzYzA4LCAweDQ4MWZjODU3LCAweDg0MWMzZDU4LAorCTB4NDgxZTVjMDgsIDB4MDIwMWYwMDAsIDB4MDAwMjA3ZGQsIDB4NTkzMjU4MDgsCisJMHg1OTJjM2MwOCwgMHg4NDFjM2Q1OCwgMHg1OTMwMDAwNywgMHg4YzAwMDUxYywKKwkweDA0MDIwN2YyLCAweDQ4MWU1YzA4LCAweDQyMDAwMDAwLCAweDAwMDAwMDA1LAorCTB4NDAwMDAwMDAsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmUsIDB4NTkzMDAwMDcsCisJMHg4YzAwMDUxYywgMHgwNDAyMDdlOSwgMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMGZmLCAweDgyMDAwNTgwLCAweDAwMDAwMDQ4LCAweDA0MDIwMDAzLAorCTB4NDk3YTU4MGIsIDB4MDQwMWYwMDIsIDB4NDk3YTVjMDksIDB4NDgxZTVjMDgsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMGU1NiwKKwkweDhjMDAwNTI0LCAweDA0MDAwN2Q5LCAweDU5MzI1ODA4LCAweDRjMDAwMDAwLAorCTB4NTkyYzA0MDgsIDB4OGMwMDA1MWMsIDB4NWMwMDAwMDAsIDB4MDQwMjAwMDMsCisJMHg0YTAyNjAxMSwgMHhmZmZmZmZmZiwgMHg4NDAwMDUyNCwgMHgwNDAxZjdjZiwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDQxNzgwODAwLCAweDgzMzgwNDgwLAorCTB4MDAwMDAwNTgsIDB4MDQwMjEwMGIsIDB4ODMzODA0ODAsIDB4MDAwMDAwNDAsCisJMHgwNDAwMTAwOCwgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwKKwkweDBjMDIwODA2LCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4NDkzYmM4NTcsIDB4MWMwMWYwMDAsIDB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsCisJMHgwMDEwODlhZSwgMHgwMDEwODlhZSwgMHgwMDEwODlhZSwgMHgwMDEwODliMCwKKwkweDAwMTA4OWFlLCAweDAwMTA4OWFlLCAweDAwMTA4OWFlLCAweDAwMTA4OWFlLAorCTB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsCisJMHgwMDEwODlhZSwgMHgwMDEwODlhZSwgMHgwMDEwODlhZSwgMHgwMDEwODlhZSwKKwkweDAwMTA4OWFlLCAweDAwMTA4OWFlLCAweDAwMTA4OWI1LCAweDAwMTA4OWFlLAorCTB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg1OWNjMGEwOCwgMHg0OTdhNTgwNywgMHg0ODA3Yzg1NywgMHg4MjA0MGQwMCwKKwkweDAwMDAwZmZmLCAweDU5MzAwNDAyLCAweDQ4MDI1YzA2LCAweDRhMDI1YTA0LAorCTB4MDAwMDAxMDMsIDB4NDgwNjVjMDksIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsCisJMHg4MDA0MDljMCwgMHgwMjAwMDAwMCwgMHgwMDAyMDJjMSwgMHg1OWNjMDAwOSwKKwkweDQ4MDI1ODBhLCAweDgyMDQyNTAwLCAweDAwMDAwMTAwLCAweDA0MDAwMDAyLAorCTB4NTljYzIwMGIsIDB4NDgxMjU4MGMsIDB4ODIwNDA1MDAsIDB4MDAwMDAyMDAsCisJMHgwNDAwMDAwMiwgMHg1OWNjMDAwYSwgMHg0ODAyNTgwYiwgMHg4MDEwMGMwMCwKKwkweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDAyMDAwMDAwLCAweDAwMDIwMmRhLAorCTB4ODIwNDE0ODAsIDB4MDAwMDAwMWQsIDB4MDQwMDEwMDYsIDB4NTkyYzA0MDQsCisJMHg4YzAwMDUxZSwgMHgwNDAwMDAwZSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxYywKKwkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDgzY2NhNDAwLCAweDAwMDAwMDBjLAorCTB4ODMyY2FjMDAsIDB4MDAwMDAwMGQsIDB4MDQwMWY5YzEsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHgwNDAxZjk2NSwKKwkweDA0MDFmMWEwLCAweDgzMzgwNDgwLCAweDAwMDAwMDkzLCAweDAyMDIxODAwLAorCTB4MDAxMDA1ZDgsIDB4ODMzODA0ODAsIDB4MDAwMDAwODUsIDB4MDIwMDE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwODlmZCwgMHgwMDEwODlmYiwKKwkweDAwMTA4OWZiLCAweDAwMTA4YTA0LCAweDAwMTA4OWZiLCAweDAwMTA4OWZiLAorCTB4MDAxMDg5ZmIsIDB4MDAxMDg5ZmIsIDB4MDAxMDg5ZmIsIDB4MDAxMDg5ZmIsCisJMHgwMDEwODlmYiwgMHgwMDEwODlmYiwgMHgwMDEwODlmYiwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDQ5M2E2NDAzLAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA3MjEsCisJMHg0OTMzYzg1NywgMHg1OWNjMTIwNCwgMHg0ODBhNjAxYywgMHg1OWNjMTQwNCwKKwkweDAyMDFmODAwLCAweDAwMTA5NDEwLCAweDA0MDAwMDFiLCAweDU5MWMwMjAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMTcsIDB4NTkxYzAwMDksCisJMHg4MTM0MDU4MCwgMHgwNDAyMDAxNCwgMHg0ZDMwMDAwMCwgMHg0ZDFjMDAwMCwKKwkweDQxMWU2MDAwLCAweDA0MDFmOWMyLCAweDVjMDIzODAwLCAweDVjMDI2MDAwLAorCTB4MDQwMDAwMGIsIDB4NTljYzAwMDUsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMDMsCisJMHgwNDAxZjk4YywgMHgwNDAxZjAwMywgMHg0YTAyM2EwMywgMHgwMDAwMDAwMiwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDg2LCAweDA0MDFmMDA1LCAweDA0MDFmOWE2LAorCTB4MDQwMDA3ZjUsIDB4NGEwMjY0MDMsIDB4MDAwMDAwODcsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzIxLCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDAwMDBkLAorCTB4NTljYzE0MDQsIDB4MDIwMWY4MDAsIDB4MDAxMDk0MTAsIDB4MDQwMDAwMDksCisJMHg1OTFjMDQxNCwgMHg4YzAwMDUxYSwgMHgwNDAwMDAwNiwgMHg0ZDMwMDAwMCwKKwkweDQxMWU2MDAwLCAweDAyMDFmODAwLCAweDAwMTA5MjFlLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTMsIDB4MDQwMjAwMGEsCisJMHg1OTMwMDQwMywgMHg4MjAwMGQ4MCwgMHgwMDAwMDA4NiwgMHgwNDAwMDAxMiwKKwkweDgyMDAwZDgwLCAweDAwMDAwMDg3LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4MDQwMWYwMGQsIDB4ODMzODA1ODAsIDB4MDAwMDAwMjcsIDB4MDQwMDAwMDUsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxNCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKKwkweDQ5M2JjODU3LCAweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDAyMDFmMDAwLAorCTB4MDAxMDc5MTEsIDB4NDkzM2M4NTcsIDB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxMywgMHgwNDAyMDAwNSwgMHg1OTMwMDQwMywKKwkweDgyMDAwNDgwLCAweDAwMDAwMDg1LCAweDBjMDFmMDRkLCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMjcsIDB4MDQwMjAwNDEsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmJiZiwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAyMDNjLCAweDVjMDI3ODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDE1LAorCTB4NDE3ODI4MDAsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDMsIDB4NDIwMjgwMDAsCisJMHgwMDAwMDAyOSwgMHg0ZDQwMDAwMCwgMHg0ZDQ0MDAwMCwgMHg1OTM2OGMwMywKKwkweDAyMDFmODAwLCAweDAwMTA5ODVlLCAweDVjMDI4ODAwLCAweDVjMDI4MDAwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAwYywgMHg0ZDJjMDAwMCwKKwkweDU5MzI1ODA4LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDU5MzAwNDAyLAorCTB4NDgwMjVjMDYsIDB4NDk3YTVjMDksIDB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDJkYSwgMHg1YzAyNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTEyYSwKKwkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDgzMzgwNTgwLCAweDAwMDAwMDg5LAorCTB4MDQwMDAwMDUsIDB4ODMzODA1ODAsIDB4MDAwMDAwOGEsIDB4MDIwMjAwMDAsCisJMHgwMDEwNzk3NCwgMHgwMjAxZjgwMCwgMHgwMDEwNmY2MCwgMHgwMjAyMDAwMCwKKwkweDAwMTA3OTc0LCAweDU5MzAwYTAzLCAweDgyMDQwNTgwLCAweDAwMDAwMDBhLAorCTB4MDQwMDAwMmEsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsIDB4MDQwMDAwMjcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNCwKKwkweDA0MDIwN2VhLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2YmJmLAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMDYsIDB4MDQwMWY3ZDIsIDB4MDAxMDhhYmEsCisJMHgwMDEwOGFiOCwgMHgwMDEwOGFiOCwgMHgwMDEwOGFiOCwgMHgwMDEwOGFiOCwKKwkweDAwMTA4YWI4LCAweDAwMTA4YWMwLCAweDAwMTA4YWI4LCAweDAwMTA4YWI4LAorCTB4MDAxMDhhYjgsIDB4MDAxMDhhYjgsIDB4MDAxMDhhYjgsIDB4MDAxMDhhYjgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywgMHg1OWE4MDAzNywKKwkweDQ4MDI2MjA2LCAweDRhMDI2MjAzLCAweDAwMDAwMDBhLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NTlhODAwMzcsIDB4NDgwMjYyMDYsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwYywgMHgxYzAxZjAwMCwgMHg4MzM4MDU4MCwgMHgwMDAwMDA4OSwKKwkweDA0MDAwMDA4LCAweDgzMzgwNTgwLCAweDAwMDAwMDhhLCAweDA0MDAwMDMyLAorCTB4NDkzM2M4NTcsIDB4NDkzYmM4NTcsIDB4MDIwMWYwMDAsIDB4MDAxMDc5NzQsCisJMHg0OTMzYzg1NywgMHg1OTMyNTgwOCwgMHg1OTMwMGExZCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDIwMDA0LCAweDAyMDFmODAwLCAweDAwMTA0OWIyLAorCTB4MDQwMWYwMGMsIDB4NTkzMDAyMWQsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsCisJMHgwNDAyMDAwOCwgMHg1OTMwMGMxNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAzOSwKKwkweDA0MDAwMDJjLCAweDgyMDQwNTgwLCAweDAwMDAwMDM1LCAweDA0MDAwMDI5LAorCTB4NGMzNDAwMDAsIDB4NDEzMDY4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCisJMHgwNDAwMDAxMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDFlLCAweDU5Y2MwYzA3LCAweDQ4MDY2NDE5LCAweDU5Y2MwYTA3LAorCTB4NDgwNjYyMTksIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyMSwKKwkweDQwMzY2MDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDVjMDA2ODAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTkzMDAyMWQsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwNDAyMDA0MCwgMHg1OTMwMGMxNiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDM1LCAweDA0MDAwMDA3LCAweDgyMDQwNTgwLCAweDAwMDAwMDFlLAorCTB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMzksIDB4MDQwMjAwMzYsCisJMHg0OTMzYzg1NywgMHg0YzUwMDAwMCwgMHg0ZDFjMDAwMCwgMHg0MTMwYTAwMCwKKwkweDQwMDY3MDAwLCAweDAyMDFmODAwLCAweDAwMTA5M2JhLCAweDA0MDIwMDI5LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDQwMDAwMjYsIDB4NDkxZmM4NTcsCisJMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwgMHgwMDAwMDAzNSwgMHgwNDAwMDAwNCwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDM5LCAweDA0MDIwMDAyLCAweDQ5MzIzODFjLAorCTB4NDkzYTY0MDMsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg1ODUwMDgwOSwgMHg0ODA3Yzg1NywgMHg0ODA2NjAwOSwKKwkweDU4NTAwYzE1LCAweDQ4MDdjODU3LCAweDQ4MDY2NDE1LCAweDU4NTAwYTE1LAorCTB4NDgwN2M4NTcsIDB4NDgwNjYyMTUsIDB4NTg1MDBhMTYsIDB4NDgwN2M4NTcsCisJMHg0ODA2NjIxNiwgMHg1ODUwMGMxOSwgMHg0ODA3Yzg1NywgMHg0ODA2NjQxOSwKKwkweDU4NTAwYTE5LCAweDQ4MDdjODU3LCAweDQ4MDY2MjE5LCAweDQ5MWU2MDFlLAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjEsCisJMHg0MDUyNjAwMCwgMHg1YzAyMzgwMCwgMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzdkLCAweDU5MzAwMjFkLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLAorCTB4MDIwMDA4MDAsIDB4MDAxMDQ5YjIsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCisJMHg0ODAzYzg1NiwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0MTJjNzgwMCwKKwkweDRjM2MwMDAwLCAweDQyMDAyODAwLCAweDAwMDAwMDAxLCAweDgyMDQwNDgwLAorCTB4MDAwMDAxMDEsIDB4MDQwMDEwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAxMDAsCisJMHg0MDA0MzAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxYywgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDBjLCAweDgzMmNhYzAwLCAweDAwMDAwMDBkLCAweDA0MDFmODQ0LAorCTB4ODIxODM0ODAsIDB4MDAwMDAwMWMsIDB4NTkyZTU4MDEsIDB4ODEyZTU5YzAsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDdmZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwKKwkweDA0MDAwMDE3LCAweDgwMTQyODAwLCAweDRhMDI1YTA0LCAweDAwMDAwMTEwLAorCTB4NDk3YTVjMDQsIDB4NDkyYzc4MDEsIDB4ODIxODBjODAsIDB4MDAwMDAwM2QsCisJMHgwNDAyMTAwNiwgMHg0MDE4MDgwMCwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwKKwkweDA0MDFmODJmLCAweDA0MDFmMDBhLCAweDgyMTgzNDgwLCAweDAwMDAwMDNjLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwM2MsIDB4NDEyYzc4MDAsIDB4ODMyY2FjMDAsCisJMHgwMDAwMDAwNSwgMHgwNDAxZjgyNiwgMHgwNDAxZjdlOCwgMHg1YzAwNzgwMCwKKwkweDg0MTQyOWMwLCAweDgyMTQyZDQwLCAweDAwMDAwMDAzLCAweDQ4MTQ3YTA0LAorCTB4NDAzZTU4MDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4MWMwMWYwMDAsCisJMHg0OTJmYzg1NywgMHg4MTJlNTljMCwgMHgwNDAwMDAwZiwgMHg0ZDJjMDAwMCwKKwkweDRjM2MwMDAwLCAweDU5MmM3ODAxLCAweDgwM2M3OWMwLCAweDA0MDAwMDA2LAorCTB4NDk3YTU4MDEsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NDAzZTU4MDAsCisJMHgwNDAxZjdmOSwgMHg1YzAwNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNTgwMDAwLAorCTB4ODIwNDBjMDAsIDB4MDAwMDAwMDMsIDB4ODAwNGIxMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWIxNywgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDRjNTgwMDAwLCAweDgyMDQwYzAwLCAweDAwMDAwMDAzLCAweDgwMDRiMTA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsCisJMHg1OTFjMGMwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDFhLCAweDRkMzAwMDAwLAorCTB4NGQyYzAwMDAsIDB4NDExZTYwMDAsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTAzNywgMHgwNDAwMDAwZiwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDEzLCAweDU5MmMwYTA4LCAweDg0MDQwZDU0LCAweDAyMDFmODAwLAorCTB4MDAxMDRlNzAsIDB4NWMwMjgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDEwOTEyYSwKKwkweDAyMDFmODAwLCAweDAwMTA3OTExLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4NTljYzAwMDUsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMGIsCisJMHg1OTFjMDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwNywKKwkweDU5MWMwYzAzLCAweDgyMDQwNTgwLCAweDAwMDAwMDg1LCAweDA0MDAwMDAzLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwOGIsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMiwgMHg1OTMwMDQwNiwKKwkweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAorCTB4MGMwMWY4MGEsIDB4NWMwMjc4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg1OTMwMDQwNiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAxMiwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA4YzAxLCAweDAwMTA4YmZlLAorCTB4MDAxMDhiZmUsIDB4MDAxMDhjMjksIDB4MDAxMDhiZmMsIDB4MDAxMDhiZmUsCisJMHgwMDEwOGMxYSwgMHgwMDEwOGJmZSwgMHgwMDEwOGJmYywgMHgwMDEwNjVmNCwKKwkweDAwMTA4YmZlLCAweDAwMTA4YmZlLCAweDAwMTA4YmZlLCAweDAwMTA4YmZjLAorCTB4MDAxMDhiZmMsIDB4MDAxMDhiZmMsIDB4MDAxMDhjZjksIDB4MDAxMDhiZmUsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NiwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDhkM2U3ZDAyLCAweDA0MDIwMDE2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMGYsIDB4NTkzMjU4MDgsCisJMHg0MTc4MDgwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNSwKKwkweDAyMDFmODAwLCAweDAwMTA0ZTcwLCAweDVjMDI4MDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDk1OWMsIDB4MDIwMWY4MDAsIDB4MDAxMDkxY2MsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDQ4ZDksIDB4MDQwMjAwMGMsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCisJMHgwMDAwMDAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTFkMSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDA2LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDVjMDI4MDAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsCisJMHg0ZGYwMDAwMCwgMHgwNDAxZjhiOCwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwKKwkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA4YzQzLAorCTB4MDAxMDhjYjAsIDB4MDAxMDhjNWEsIDB4MDAxMDhjYzMsIDB4MDAxMDhjYWIsCisJMHgwMDEwOGM0MSwgMHgwMDEwOGM0MywgMHgwMDEwOGM0MywgMHgwMDEwOGM0NywKKwkweDAwMTA4YzQzLCAweDAwMTA4YzQzLCAweDAwMTA4YzQzLCAweDAwMTA4YzQzLAorCTB4MDAxMDhjNWEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHgwNDAxZjdiOCwgMHg1YzAzZTAwMCwKKwkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjA3YjQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwZCwgMHgwNDAwMDdiMCwgMHg4ZDNlN2QwMiwgMHgwNDAyMDdhZSwKKwkweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDAyMDFmODAwLCAweDAwMTA0OWIyLAorCTB4NWMwMjY4MDAsIDB4MDQwMWY3YTgsIDB4NTkzMDAwMDQsIDB4ODQwMDA1NWMsCisJMHg0ODAyNjAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHg1OTMwMDQwNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwMDQzLCAweDhkM2U3ZDAyLAorCTB4MDQwMjAwNDEsIDB4NDk3YTYyMWQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwZCwgMHgwNDAwMDAwMywgMHg0YTAyNjIxZCwgMHgwMDAwMDAwMywKKwkweDA0MDFmYmNiLCAweDA0MDAwMDI0LCAweDRkMmMwMDAwLCAweDRkNDAwMDAwLAorCTB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkxY2MsIDB4NTkyYzA0MDgsCisJMHg4YzAwMDUxMiwgMHgwNDAwMDAwOSwgMHg0ZDJjMDAwMCwgMHg4NDAwMDUxMiwKKwkweDQ4MDI1YzA4LCAweDU5MmMwODA5LCAweDQwMDY1ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZmQsIDB4NWMwMjU4MDAsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCisJMHgwMDAwMDAwNSwgMHg1OTJjMGEwOCwgMHg4YzA0MGQwZSwgMHgwNDAwMDAwNCwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDRlNzAsIDB4NWMwMjgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHg0OTdhNjAwOCwgMHg1YzAyODAwMCwKKwkweDVjMDI1ODAwLCAweDhkM2U3ZDAwLCAweDA0MDAwMDA5LCAweDRkMzQwMDAwLAorCTB4NTkzMjY4MDksIDB4MDIwMWY4MDAsIDB4MDAxMDQ5YjIsIDB4NWMwMjY4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHgwNDAxZjAwYiwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDg1LCAweDRhMDI2MjAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsIDB4ODAwMDQwNGIsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDcyMSwgMHg1YzAzZTAwMCwgMHgwMjAyMDgwMCwgMHgwMDEwNmM1NSwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDZjNGIsIDB4MDIwMWY4MDAsIDB4MDAxMDBlOTksIDB4MDQwMWY3YWIsCisJMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZThlLCAweDA0MDIwMDFiLCAweDAyMDFmODAwLCAweDAwMTA2OGQzLAorCTB4MDQwMjAwMDYsIDB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwNDAsCisJMHgwNDAwMDc4YiwgMHgwNDAxZjc5ZCwgMHgwMjAxZjgwMCwgMHgwMDEwNmI2YywKKwkweDA0MDAwMDEwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDA0MDFmODEzLAorCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZlNjIsIDB4MDQwMjAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwNjdhZSwgMHgwNDAyMDdmNCwgMHg1OTMwMGMwMywKKwkweDgyMDQwNTgwLCAweDAwMDAwMDQwLCAweDA0MDAwNzc5LCAweDA0MDFmNzhiLAorCTB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjc1ZSwgMHg0MTdhMzAwMCwgMHg0MjAzMjAwMCwKKwkweDAwMDBiZjMyLCAweDU5OTAwMDA0LCAweDgxMzAwNTgwLCAweDA0MDAwMDA5LAorCTB4ODM5MzI0MDAsIDB4MDAwMDAwMTAsIDB4ODExYTMwMDAsIDB4ODMxODA0ODAsCisJMHgwMDAwMDAwNSwgMHgwNDAwMTdmOCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDU5MzAwMDA0LCAweDhjMDAwNTNlLCAweDA0MDAwMDEwLAorCTB4OGMwMDA1MGMsIDB4MDQwMjAwMGUsIDB4OGMwMDA1MTYsIDB4MDQwMjAwMDYsCisJMHg4MjAwMGQwMCwgMHgwMDAwMDAxZiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNSwKKwkweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMDAwMDAzLCAweDA0MDFmMDA1LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsIDB4NTkzMDAyMDMsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwKKwkweDRkZjAwMDAwLCAweDU5MzAwMjAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDBlLAorCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsIDB4MDAxMDhkMTMsCisJMHgwMDEwOGQzMCwgMHgwMDEwOGQxNywgMHgwMDEwOGQxMSwgMHgwMDEwOGQxMSwKKwkweDAwMTA4ZDExLCAweDAwMTA4ZDExLCAweDAwMTA4ZDExLCAweDAwMTA4ZDExLAorCTB4MDAxMDhkMTEsIDB4MDAxMDhkMTEsIDB4MDAxMDhkMTEsIDB4MDAxMDhkMTEsCisJMHgwMDEwOGQxMSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1YzAzZTAwMCwKKwkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDA0MDFmNmU4LCAweDVjMDNlMDAwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA1MiwgMHgwMjAwMDgwMCwKKwkweDAwMTAxMjMxLCAweDA0MDFmYjE2LCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGMxOSwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwKKwkweDVjMDI1ODAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMWEsIDB4NTkzMDAwMDQsCisJMHg4YzAwMDUyMCwgMHgwNDAwMDAwNCwgMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwKKwkweDA0MDFmMDFhLCAweDQyMDAxMDAwLCAweDAwMTBiN2Y2LCAweDUwMDgxMDAwLAorCTB4NTgwODAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMDAsIDB4MDQwMDAwMGEsCisJMHg1ODA4MDAwYywgMHg4MTMwMDU4MCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKKwkweDAyMDFmODAwLCAweDAwMTA2OGQzLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4MDQwMWY3Y2YsIDB4MDIwMWY4MDAsIDB4MDAxMDZlOGUsIDB4MDQwMjAwMGMsCisJMHg1OTMwMDAwNCwgMHg4YzAwMDUyMCwgMHgwNDAwMDAwNCwgMHg4NDAwMDUyMCwKKwkweDQ4MDI2MDA0LCAweDA0MDFmN2M2LCAweDAyMDFmODAwLCAweDAwMTA2OGQzLAorCTB4MDQwMDA3YzMsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMDAyMDMsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwKKwkweDBjMDFmN2E3LCAweDU5MzAwNDA2LCAweDQ5MzNjODU3LCAweDQ4MDNjODU3LAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMTIsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCisJMHgwYzAxZjAwMSwgMHgwMDEwOGQ3YywgMHgwMDEwOGU0MSwgMHgwMDEwOGY3OSwKKwkweDAwMTA4ZDg4LCAweDAwMTA3OTExLCAweDAwMTA4ZDdjLCAweDAwMTBhMWMwLAorCTB4MDAwMjA3N2QsIDB4MDAxMDhlNDEsIDB4MDAxMDY1Y2UsIDB4MDAxMDhmZGEsCisJMHgwMDEwOGQ3NywgMHgwMDEwOGQ3NywgMHgwMDEwOGQ3NywgMHgwMDEwOGQ3NywKKwkweDAwMTA4ZDc3LCAweDAwMTA5NmViLCAweDAwMTA5NmViLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4MDQwMWZiZDUsIDB4MDIwMDAwMDAsIDB4MDAxMDgwMWMsCisJMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YmJmLCAweDAyMDFmODAwLCAweDAwMTA2YzRiLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4NGEwMjYyMDYsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjg3MiwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDRkMmMwMDAwLCAweDRkNDAwMDAwLCAweDQxN2E1ODAwLCAweDA0MDFmYWE4LAorCTB4MDQwMDAwMDcsIDB4NTkzMjU4MDgsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NGMsCisJMHg0ODAyNWEwOCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YzU1LCAweDA0MDFmZjRjLCAweDQ4MDNjODU3LCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWY4MDYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHg1YzAyODAwMCwgMHg1YzAyNTgwMCwKKwkweDFjMDFmMDAwLCAweDAwMTA4ZTQwLCAweDAwMTA4ZGI1LCAweDAwMTA4ZGMzLAorCTB4MDAxMDhkZTUsIDB4MDAxMDhlMTEsIDB4MDAxMDhkYjMsIDB4MDAxMDhkN2MsCisJMHgwMDEwOGQ3YywgMHgwMDEwOGQ3YywgMHgwMDEwOGRiMywgMHgwMDEwOGRiMywKKwkweDAwMTA4ZGIzLCAweDAwMTA4ZGIzLCAweDAwMTA4ZGMzLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmU4ZSwgMHgwNDAyMDAzOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OGQzLCAweDA0MDAwMDNiLCAweDAyMDFmODAwLCAweDAwMTA2YjZjLAorCTB4MDQwMDAwMzIsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDk3YTYyMWQsCisJMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTJjMDIwNCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LAorCTB4MDQwMDAwMDMsIDB4NGEwMjYyMWQsIDB4MDAwMDAwMDMsIDB4NTkyYzBhMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGU3MCwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5YywKKwkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDQ5N2E2MDA4LCAweDRhMDI2NDAzLAorCTB4MDAwMDAwODUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMiwgMHg0YTAyNjAwNCwgMHg4MDAwNDA0YiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YzRiLCAweDQyMDAwODAwLCAweDgwMDA0MDRiLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3MjEsIDB4MDQwMWZlZjEsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmU2MiwgMHgwNDAyMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNjdhZSwKKwkweDA0MDIwN2QyLCAweDU5MzAwYzAzLCAweDgyMDQwNTgwLCAweDAwMDAwMDQwLAorCTB4MDQwMDAwMDgsIDB4MDQwMWY3ZDIsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjdhZSwKKwkweDAyMDFmODAwLCAweDAwMTA2YzRiLCAweDgxMmU1OWMwLCAweDA0MDAwMDEzLAorCTB4NTkyYzBhMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDRlNzAsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTU5YywgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHg1OTMwMDIwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDBkLCAweDA0MDAwMDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDZjNGIsIDB4NGQzNDAwMDAsIDB4NTkzMjY4MDksIDB4MDIwMWY4MDAsCisJMHgwMDEwNDliMiwgMHg1YzAyNjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwKKwkweDA0MDFmMDMwLCAweDgxMmU1OWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDk0MGEsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMGU5OSwgMHgwNDAxZjdhYSwgMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwKKwkweDU5MmMwMjA4LCAweDg0MDAwNTBjLCAweDQ4MDI1YTA4LCAweDU5MmMwNDA2LAorCTB4ODAwMDAwYzIsIDB4ODAwMDA4YzQsIDB4ODAwNDBjMDAsIDB4NDgwNjYyMDYsCisJMHg0MjAwMDAwMCwgMHgxMDAwMDAwMCwgMHg0MTMwMDgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwYjk0LCAweDA0MDAwMDBkLCAweDU5MmMwMjA4LCAweDhjMDAwNTFjLAorCTB4MDQwMjAwMDYsIDB4ODQwMDA1NWMsIDB4NDgwMjVhMDgsIDB4NGEwMjYyMDYsCisJMHgwMDAwMDAwMiwgMHgwNDAxZjAwZiwgMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxMmU1LCAweDVjMDI2MDAwLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDQsIDB4MDQwMjAwMDcsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0OCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwKKwkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODZlLCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NywgMHgwYzAxZjAwMSwKKwkweDAwMTA4ZTVhLCAweDAwMTA4ZDg1LCAweDAwMTA4ZTVjLCAweDAwMTA4ZTVhLAorCTB4MDAxMDhlNWMsIDB4MDAxMDhlNWMsIDB4MDAxMDhkN2QsIDB4MDAxMDhlNWEsCisJMHgwMDEwOGQ3OSwgMHgwMDEwOGU1YSwgMHgwMDEwOGU1YSwgMHgwMDEwOGU1YSwKKwkweDAwMTA4ZTVhLCAweDAwMTA4ZTVhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4NGQzNDAwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMjY4MDksIDB4NTkzNDA0MDAsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwYywKKwkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDU5MzAzNDAzLCAweDgyMTgwZDgwLAorCTB4MDAwMDAwMDQsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwNiwgMHg4MjE4MGQ4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAwMywKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDQ4MDNjODU3LCAweDBjMDFmODA0LAorCTB4NWMwMjU4MDAsIDB4NWMwMjY4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDhlODMsCisJMHgwMDEwOGYyMiwgMHgwMDEwOGU4NSwgMHgwMDEwOGViYSwgMHgwMDEwOGU4NSwKKwkweDAwMTA4ZjNmLCAweDAwMTA4ZTg1LCAweDAwMTA4ZThmLCAweDAwMTA4ZTgzLAorCTB4MDAxMDhmM2YsIDB4MDAxMDhlODMsIDB4MDAxMDhlOWUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDVkOCwgMHg1OTMwMDQwMywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAxNiwKKwkweDA0MDAwMDJlLCAweDgyMDAwZDgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDJiLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMjgsIDB4MDQwMWZhYmYsCisJMHgwNDAwMDA3OSwgMHg1OTMwMDQwMywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAyMiwKKwkweDA0MDAwMGFlLCAweDgyMDAwZDgwLCAweDAwMDAwMDM5LCAweDA0MDAwMGIzLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMzUsIDB4MDQwMDAwYjAsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAxZSwgMHgwNDAwMDAxYiwgMHgwNDAxZjk5OSwgMHgwNDAwMDAwNywKKwkweDAyMDFmODAwLCAweDAwMTA5NTk3LCAweDA0MDIwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDRhMTQsIDB4MDQwMWYwMTEsIDB4NTkzMDA0MDMsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAwMSwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDllNywKKwkweDA0MDAwMDBhLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwODAxYywKKwkweDAyMDFmMDAwLCAweDAwMTA3OTExLCAweDA0MDFmOTdkLCAweDA0MDAwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsIDB4MDQwMDAwYTksIDB4NTkzMDBjMDMsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAxNiwgMHgwNDAwMDA1NiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDIwMDM0LCAweDU5YTgwMDI2LCAweDhjMDAwNTAyLAorCTB4MDQwMjAwMTMsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMjAwMTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwgMHgwNDAyMDAwNiwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA1MTEzLCAweDA0MDFmMDk0LAorCTB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTBhMiwgMHgwNDAxZjA4ZCwgMHg1OTM0MDQwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwN2ZjLCAweDA0MDAwMDA4LCAweDU5YTgwMDI2LAorCTB4OGMwMDA1MGEsIDB4MDQwMjAwODQsIDB4NTkzNDAyMTIsIDB4ODIwMDA1MDAsCisJMHgwMDAwZmYwMCwgMHgwNDAwMDA4MiwgMHg1OTM0MDQxMiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMGZmLCAweDA0MDAwMDEwLCAweDgwMDAwMDQwLCAweDQ4MDI2YzEyLAorCTB4NDk3YTYwMDgsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDcsIDB4NGEwMjYyMDYsCisJMHgwMDAwMDM5OCwgMHg0OTdhNjIwNSwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwKKwkweDA0MDAwMDA1LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAorCTB4MDQwMWYwMjAsIDB4NTkzMDA0MDMsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDIsCisJMHgwNDAyMDAwZCwgMHg1OTM0MDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDdmZSwKKwkweDA0MDIwMDA5LCAweDU5YTgwMDI2LCAweDg0MDAwNTQwLCAweDQ4MDM1MDI2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDQyMzcsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsCisJMHgwNDAxZjAwYywgMHgwMjAxZjgwMCwgMHgwMDEwODAxYywgMHg0ZDNjMDAwMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLCAweDVjMDI3ODAwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHgwNDAxZjkxNSwgMHgwNDAyMDc5MywKKwkweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwMzAwMCwKKwkweDAwMDAwMDE4LCAweDQxNzgyODAwLCAweDQyMDAyMDAwLCAweDAwMDAwMDAwLAorCTB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsIDB4NTkzNjhjMDMsIDB4NDIwMjgwMDAsCisJMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwgMHgwMDEwOTg1ZSwgMHg1YzAyODgwMCwKKwkweDVjMDI4MDAwLCAweDAyMDFmMDAwLCAweDAwMTA3OTExLCAweDAyMDFmODAwLAorCTB4MDAxMDRhMTQsIDB4MDQwMWY3YzgsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NmQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwN2I3NiwKKwkweDA0MDIwN2MxLCAweDFjMDFmMDAwLCAweDRkMzgwMDAwLCAweDU5MzI3NDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkzYmEsIDB4NWMwMjcwMDAsIDB4MDIwMjAwMDAsCisJMHgwMDAyMDc3ZCwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNCwKKwkweDRhMDI2MjA2LCAweDAwMDAwMDAyLCAweDFjMDFmMDAwLCAweDU5MzAwNDAzLAorCTB4NDgwMjY0MTYsIDB4NGEwMjYyMWQsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDA4NSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwOSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAyLCAweDQyMDAwODAwLCAweDgwMDAwMDRiLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3MjEsIDB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4MDIwMWY4MDAsCisJMHgwMDEwODAxYywgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAyMDNjLCAweDVjMDI3ODAwLCAweDQyMDAwMDAwLCAweDAwMTBiODY0LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDk3YTYwMDgsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwNywgMHg0YTAyNjIwNiwgMHgwMDAwMDM5OCwgMHg0OTdhNjIwNSwKKwkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODcwLCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4NGQzNDAwMDAsIDB4NTkzMjY4MDksIDB4NTkzMDAyMDMsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwKKwkweDQ4MDNjODU3LCAweDBjMDFmODAzLCAweDVjMDI2ODAwLCAweDFjMDFmMDAwLAorCTB4MDAxMDhmOTYsIDB4MDAxMDhkODUsIDB4MDAxMDhmOTYsIDB4MDAxMDhmOTYsCisJMHgwMDEwOGY5NiwgMHgwMDEwOGY5NiwgMHgwMDEwOGY5NiwgMHgwMDEwOGY5NiwKKwkweDAwMTA4Zjk2LCAweDAwMTA4ZDg1LCAweDAwMTA4Zjk4LCAweDAwMTA4ZDg1LAorCTB4MDAxMDhmYTAsIDB4MDAxMDhmOTYsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg0YTAyNjQwMywgMHgwMDAwMDA4YiwgMHg0YTAyNjIwMywgMHgwMDAwMDAwYiwKKwkweDQyMDAwODAwLCAweDgwMDA0MDRiLCAweDAyMDFmMDAwLCAweDAwMDIwNzIxLAorCTB4NTkzMDBhMWQsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAxMSwKKwkweDAyMDFmODAwLCAweDAwMTBhOTQyLCAweDQyMDAwMDAwLCAweDAwMTBiODY0LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDEzMDY4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc1YSwgMHgwNDAwMDAwOCwgMHg0OTM2NjAwOSwgMHg0ZDMwMDAwMCwKKwkweDQwMzY2MDAwLCAweDAyMDFmODAwLCAweDAwMTA3OTExLCAweDVjMDI2MDAwLAorCTB4MDQwMWYwMDIsIDB4NDAzNjYwMDAsIDB4NDk3YTYwMDgsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKKwkweDAwMTAzYjI1LCAweDA0MDAwMDExLCAweDRhMDI2NDA2LCAweDAwMDAwMDA0LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4NGEwMjY0MjAsIDB4MDAwMDAwMDEsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAwNCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDI5LCAweDQxNzgyODAwLCAweDAyMDFmODAwLCAweDAwMTBhNDNlLAorCTB4NWMwMjgwMDAsIDB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKKwkweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDQyMDAwMDAwLCAweDAwMTBiODc2LAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NywKKwkweDBjMDFmMDAxLCAweDAwMTA5MDBiLCAweDAwMTA4ZmYzLCAweDAwMTA4ZmY3LAorCTB4MDAxMDkwMGMsIDB4MDAxMDhmZjUsIDB4MDAxMDhmZjMsIDB4MDAxMDhmZjMsCisJMHgwMDEwOGZmMywgMHgwMDEwOGZmMywgMHgwMDEwOGZmMywgMHgwMDEwOGZmMywKKwkweDAwMTA4ZmYzLCAweDAwMTA4ZmYzLCAweDAwMTA4ZmYzLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDBlOTksIDB4NGQyYzAwMDAsCisJMHg1OTMyNTgwOCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMmRhLCAweDVjMDI1ODAwLCAweDQ5N2E2MDA4LCAweDRhMDI2MjFkLAorCTB4MDAwMDAwMGEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwODUsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwKKwkweDgwMDA0MDRiLCAweDAyMDFmMDAwLCAweDAwMDIwNzIxLCAweDFjMDFmMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsIDB4MDQwMWZjYzcsCisJMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmU2MiwgMHgwNDAyMDAwYywKKwkweDAyMDFmODAwLCAweDAwMTA2N2FlLCAweDA0MDIwMDA1LCAweDVjMDNlMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjNGIsIDB4MDQwMWY3ZGQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmI2YywgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1YzAzZTAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA2YzRiLCAweDU5MzAwMjAzLCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDMsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjdiYSwKKwkweDQ4MDNjODU2LCAweDU5YTgwMDBlLCAweDU5YTgwODY3LCAweDgwMDQwNDAwLAorCTB4ODAwODA0ODAsIDB4MDQwMjEwMDQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDRjMDgwMDAwLCAweDU5MzAxMDA4LCAweDgyMDgxNTAwLCAweGZmZjAwMDAwLAorCTB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAwYSwgMHgwNDAxZjgyZiwKKwkweDRkMzgwMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDRiLCAweDAyMDFmODAwLAorCTB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA3OTQyLCAweDA0MDAwMDFiLCAweDA0MDFmODFmLAorCTB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGQzYzAwMDAsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmFiNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2N2ZkLCAweDVjMDI3ODAwLCAweDAyMDFmODAwLCAweDAwMTBhMmZmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjNGIsIDB4NWMwMjYwMDAsIDB4OGQzZTdkM2UsCisJMHgwNDAyMDAwYiwgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0YywKKwkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc3ZCwgMHgwNDAxZjdmYSwgMHg1OTJjMDQwNywgMHg0OTRhNjAxNywKKwkweDQ5NGU2MDE4LCAweDQ5MzY2MDA5LCAweDQ5MmU2MDA4LCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDMsIDB4ODAwMDAwYzIsIDB4ODAwMDA4YzQsIDB4ODAwNDA0MDAsCisJMHg0ODAyNjIwNiwgMHgxYzAxZjAwMCwgMHg0OTNiYzg1NywgMHg0ZDMwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDA0MDAwMDBkLCAweDA0MDFmZmVmLAorCTB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDUsIDB4MDQwMWY4MGQsCisJMHg1YzAyODAwMCwgMHg4ZDNlN2QzZSwgMHgwNDAyMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMDIwN2ExLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsIDB4MDQwMWY3ZmEsCisJMHg0ODAzYzg1NiwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg0ZDNjMDAwMCwKKwkweDRkNDQwMDAwLCAweDU5MzY4YzAzLCAweDQyMDI3ODAwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDY5YjYsIDB4MDIwMWY4MDAsIDB4MDAxMDY5MmUsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjdmZCwgMHgwMjAxZjgwMCwgMHgwMDEwYTJmZiwKKwkweDVjMDI4ODAwLCAweDVjMDI3ODAwLCAweDAyMDFmMDAwLCAweDAwMTA2YzRiLAorCTB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCisJMHgwNDAwMDAwZiwgMHg0ODFhNjAxYywgMHg0OGVlNjAyMSwgMHg0OTM2NjAwOSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LCAweDRkMzgwMDAwLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMWYsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsCisJMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjA3NWEsIDB4MDQwMDAwMGUsIDB4NDhlZTYwMjEsIDB4NDkzNjYwMDksCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0ZDM4MDAwMCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDU1LCAweDAyMDFmODAwLCAweDAwMDIwN2ExLAorCTB4NWMwMjcwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzVhLCAweDA0MDAwMDBmLCAweDQ4MWE2MDFjLCAweDQ4ZWU2MDIxLAorCTB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NDkyZTYwMDgsCisJMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzZCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwN2ExLCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwgMHgwNDAwMDAxNCwgMHg0OTM2NjAwOSwKKwkweDQ5MmZjODU3LCAweDQ5MzNjODU3LCAweDU5MmMwNDA0LCAweDhjMDAwNTFlLAorCTB4MDQwMDAwMDMsIDB4NDhlZmM4NTcsIDB4NDhlZTYwMjEsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDVjMDI3MDAwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwKKwkweDA0MDAwMDBmLCAweDQ4ZWU2MDIxLCAweDQ4MWE2MDFjLCAweDQ5MzY2MDA5LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NDkyZTYwMDgsIDB4NGQzODAwMDAsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDA0NCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKKwkweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc1YSwgMHgwNDAwMDAwZiwgMHg0ODFhNjAxYywgMHg0OGVlNjAyMSwKKwkweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LAorCTB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDksIDB4MDIwMWY4MDAsCisJMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDU5MzAwMDA5LCAweDgwMDAxNTQwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTgwODA0MGIsIDB4NDgwM2M4NTYsCisJMHg4MDAwMDA0MCwgMHgwNDAwMTAwMiwgMHg0ODAwMTQwYiwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDAyLAorCTB4MDQwMDAwMTUsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMTIsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAwZiwgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDA4LCAweDA0MDAwMDBjLCAweDgyMDAwZDgwLCAweDAwMDAwMDBhLAorCTB4MDQwMDAwMDksIDB4NTk5YzA4MTksIDB4OGMwNDBkMGUsIDB4MDQwMDAwMDQsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwMywgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjMDAwMDAwLAorCTB4NGQyYzAwMDAsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsCisJMHgwNDAwMDAxZCwgMHg1OTMwMDAwOCwgMHg4MDAyNWQ0MCwgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDE5LCAweDAyMDFmODAwLCAweDAwMTA5NTk3LCAweDA0MDAwMDE0LAorCTB4NTkzMDA0MDYsIDB4ODIwMDQ1ODAsIDB4MDAwMDAwMTAsIDB4MDQwMDAwMTAsCisJMHg4MjAwNDU4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMDAwZCwgMHg4MjAwNDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDBjLCAweDgyMDA0NTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMDAwMDksIDB4ODIwMDQ1ODAsIDB4MDAwMDAwMGEsIDB4MDQwMDAwMDYsCisJMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwgMHgwNDAwMDAwMywgMHg4MDAwMDU4MCwKKwkweDA0MDFmMDAzLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI1ODAwLAorCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwgMHgwNDAwMDAxMywgMHg0OTM2NjAwOSwKKwkweDQ4ZWU2MDIxLCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LAorCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCisJMHg1YzAyNzgwMCwgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAyOCwKKwkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwgMHgwNDAyMDAwZCwgMHg1OWE4MDAxNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDc0LCAweDA0MDIwMDA5LCAweDAyMDFmODAwLAorCTB4MDAxMDQ2MmEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAyOSwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHgwMjAxZjgwMCwKKwkweDAwMTA4MDFjLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ4MDNjODU2LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMTYsIDB4MDQwMjAwMDcsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwMjAxZjAwMCwKKwkweDAwMTA3YjM4LCAweDgzMzgwNTgwLCAweDAwMDAwMDE1LCAweDA0MDIwMDEzLAorCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjAwMGYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDY4ZCwgMHgwMjAxZjgwMCwgMHgwMDEwODQ2ZiwKKwkweDA0MDIwMDBhLCAweDU5MzQwNDA0LCAweDgwMDAwNTQwLCAweDA0MDAwMDA3LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCisJMHgwMjAxZjAwMCwgMHgwMDEwN2IzOCwgMHgwMjAxZjgwMCwgMHgwMDEwODAxYywKKwkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ4MDNjODU2LCAweDU5MmMwMjA2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMDIsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NiwgMHg1OTJjMDIwOCwgMHg4NDAwMDU0YSwgMHg0ODAyNWEwOCwKKwkweDFjMDFmMDAwLCAweDQ5N2E2MjA1LCAweDQ5N2E2MDA4LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwNTAsIDB4NDIwMDA4MDAsCisJMHg4MDAwMDA0MywgMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg0OTMzYzg1NywKKwkweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAorCTB4MDQwMDAwMDYsIDB4NTkzMDA0MDYsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTIsCisJMHgwNDAyMTAwNCwgMHgwYzAxZjgwNiwgMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA4ZDdjLCAweDA0MDFmN2ZjLCAweDAwMTA4ZDdjLAorCTB4MDAxMDkxZmQsIDB4MDAxMDkyMDEsIDB4MDAxMDkyMDQsIDB4MDAxMGE0OWIsCisJMHgwMDEwYTRiOCwgMHgwMDEwYTRiYywgMHgwMDEwOGQ3YywgMHgwMDEwOGQ3YywKKwkweDAwMTA4ZDdjLCAweDAwMTA4ZDdjLCAweDAwMTA4ZDdjLCAweDAwMTA4ZDdjLAorCTB4MDAxMDhkN2MsIDB4MDAxMDhkN2MsIDB4MDAxMDhkN2MsIDB4MDAxMDhkN2MsCisJMHgwMDEwOGQ3YywgMHg0ODAzYzg1NiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDFjMDFmMDAwLAorCTB4NTkzMDAwMWMsIDB4NDgwM2M4NTcsIDB4NTkzMDA0MTQsIDB4NDkzM2M4NTcsCisJMHg0ODAzYzg1NywgMHg4YzAwMDUwMiwgMHgwNDAwMDAwNSwgMHg4NDAwMDUwMiwKKwkweDg0MDAwNTQwLCAweDQ4MDI2NDE0LCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLAorCTB4ZDAwMDAwMDAsIDB4NDEzMDA4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDBiOTQsCisJMHgwNDAxZjgwYSwgMHgwNDAyMDAwOCwgMHg1OWE4MDAzNywgMHg4MjAwMDQwMCwKKwkweDAwMDAwMDBhLCAweDQ4MDI2MjA1LCAweDU5MzAwNDE0LCAweDg0MDAwNTQyLAorCTB4NDgwMjY0MTQsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQzNDAwMDAsCisJMHg1OTMyNjgwOSwgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDU5MzAwMDFjLCAweDgwMDAwNTQwLCAweDA0MDIwMDJmLAorCTB4NTlhODAwMjEsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMmEsIDB4NGQxYzAwMDAsCisJMHg0MTMyMzgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAyMywKKwkweDQ5MzIzODFjLCAweDU5MWMwNDE0LCAweDg0MDAwNTQyLCAweDQ4MDIzYzE0LAorCTB4NDkzNjYwMDksIDB4NTkxYzA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAwNiwgMHg1OTFjMDIwMiwgMHg0ODAyNjQxOSwgMHg1OTFjMDQwMiwKKwkweDQ4MDI2MjE5LCAweDA0MDFmMDA1LCAweDU5MWMwMjAyLCAweDQ4MDI2MjE5LAorCTB4NTkxYzA0MDIsIDB4NDgwMjY0MTksIDB4NDkxZTYwMWUsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAzNSwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDQyMDAwODAwLCAweDgwMDAwMDQwLCAweDAyMDFmODAwLAorCTB4MDAwMjA3MjEsIDB4NDExZTYwMDAsIDB4NWMwMjM4MDAsIDB4ODAwMDA1ODAsCisJMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwgMHg0MTFlNjAwMCwgMHg1YzAyMzgwMCwKKwkweDU5YTgwMDM5LCAweDQ4MDI2MjA1LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MDQwMWY3ZjgsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NDkzMjM4MWMsCisJMHg0YTAyNjIwMiwgMHgwMDAwZmZmZiwgMHg1OTFlNTgwOCwgMHg1OTFjMDAwNywKKwkweDhjMDAwNTFlLCAweDA0MDAwMDA1LCAweDg0MDAwNTFlLCAweDQ4MDIzODA3LAorCTB4NDk3YTVjMDksIDB4MDQwMWYwMTQsIDB4NTkyYzA0MDgsIDB4OGMwMDA1MTgsCisJMHgwNDAwMDAxMSwgMHg4NDAwMDUxOCwgMHg0ODAyNWMwOCwgMHg0YTAyNWMwOSwKKwkweDAwMDAwMDAxLCAweDA0MDFmYjJmLCAweDQ5N2E1YzA5LCAweDU5MmMwNDA4LAorCTB4OGMwMDA1MTIsIDB4MDQwMDAwMDgsIDB4NGQyYzAwMDAsIDB4ODQwMDA1MTIsCisJMHg0ODAyNWMwOCwgMHg1OTJlNTgwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwKKwkweDVjMDI1ODAwLCAweDU5YTgwMDM5LCAweDQ4MDI2MjA1LCAweDU5MWMwMjE0LAorCTB4NDgwMjYyMTYsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDgsCisJMHg0YTAyM2EwMywgMHgwMDAwMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNSwKKwkweDA0MDAwMDA4LCAweDQ5N2E2MDE1LCAweDA0MDFmMDFlLCAweDU5MWMwMDA3LAorCTB4ODQwMDA1NDAsIDB4NDgwMjM4MDcsIDB4NGEwMjNhMDMsIDB4MDAwMDAwMDQsCisJMHg1OTFjMDQxNCwgMHg0ODAzYzg1NywgMHg4NDAwMDUxYywgMHg4NDAwMDU1NCwKKwkweDQ4MDIzYzE0LCAweDU5MmMwMDBmLCAweDQwMDAxMDAwLCAweDU5MWMwODE2LAorCTB4ODAwNDA0ODAsIDB4MDQwMjE3ZjAsIDB4NTkxYzAwMTYsIDB4ODIwMDA1MDAsCisJMHhmZmZmZmZmYywgMHg0ODAyNjAxNSwgMHg0ODAyMzgxNiwgMHg1OTFjMGExNCwKKwkweDQ4MDdjODU3LCAweDgyMDQwZDgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDA1LAorCTB4NDgwYmM4NTcsIDB4NDgwM2M4NTcsIDB4NGEwMjM4MTIsIDB4ZmZmZmZmZmYsCisJMHg1OTFjMDQwMiwgMHg0ODAyNjQxOSwgMHg1OTFjMDIwMiwgMHg0ODAyNjIxOSwKKwkweDU5MWU2ODA5LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMzksIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyMSwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwNDE0LAorCTB4OGMwMDA1MTQsIDB4MDQwMDAwMTUsIDB4OGMwMDA1MWMsIDB4MDQwMjAwMTIsCisJMHg1OTMwMDAxNiwgMHg4MDEwMDQ4MCwgMHgwNDAwMTAwNiwgMHgwNDAwMDAwNSwKKwkweDU5MzAwNDE0LCAweDg0MDAwNTE0LCAweDg0MDAwNTVjLCAweDA0MDFmMDA5LAorCTB4NDgxMjYwMTYsIDB4NDgxMjYwMTIsIDB4NDAxMDAwMDAsIDB4NTkyYzE4MGYsCisJMHg4MDBjMDQ4MCwgMHg0ODAyNjAxMSwgMHg1OTMwMDQxNCwgMHg4NDAwMDUxNCwKKwkweDQ4MDI2NDE0LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDhjMDAwNTFjLAorCTB4MDQwMjAwMDYsIDB4NTkzMDAwMTIsIDB4NDgwMjYwMTYsIDB4NTkzMDA0MTQsCisJMHg4NDAwMDU1YywgMHg0ODAyNjQxNCwgMHgxYzAxZjAwMCwgMHg1OTMwMGMwMywKKwkweDQ5MzNjODU3LCAweDQ4MDdjODU3LCAweDgyMDQwNDgwLCAweDAwMDAwMDM0LAorCTB4MDQwMDEwMDYsIDB4ODIwNDA0ODAsIDB4MDAwMDAwM2MsIDB4MDQwMjEwMDMsCisJMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmN2ZkLCAweDQxNzgwODAwLCAweDU5YTgxMDM1LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMzIsIDB4MDIwMWY4MDAsIDB4MDAxMDY2YTAsIDB4ODAwODExYzAsCisJMHgwNDAyMDAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAxNCwgMHg0ODBiNTAzNywKKwkweDU5YTgxMDM2LCAweDQ4MGI1MDJkLCAweDQxNzgwODAwLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwNjQsIDB4MDIwMWY4MDAsIDB4MDAxMDY2YTAsIDB4ODAwODExYzAsCisJMHgwNDAyMDAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAxNCwgMHg0ODBiNTAzOCwKKwkweDgyMDgxNDAwLCAweDAwMDAwMDBhLCAweDQ4MGI1MDM5LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsIDB4NDIwMDAwMDAsCisJMHgzMDAwMDAwMCwgMHg0MDA4MDgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGI2OCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDU5YTgxMDEwLCAweDAyMDFmODAwLAorCTB4MDAxMDZjNzgsIDB4MDIwMWYwMDAsIDB4MDAxMDQ5MDYsIDB4NGEwMzUwMzcsCisJMHgwMDAwMDAyOCwgMHg0YTAzNTAzOCwgMHgwMDAwMDAxNCwgMHg0YTAzNTAyZCwKKwkweDAwMDAwN2QwLCAweDQyMDAxMDAwLCAweDAwMDAwMDFlLCAweDQ4MGI1MDM5LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsCisJMHg0MjAwMDAwMCwgMHgzMDAwMDAwMCwgMHg0MDA4MDgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwYjY4LCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDU5YTgxMDEwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDZjNzgsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsCisJMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAzZSwgMHgwNDAyMDAwNSwKKwkweDU5MzI1ODE3LCAweDgxMmU1OWMwLCAweDAyMDIwODAwLCAweDAwMTAwN2Y0LAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NGQzMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAxMSwgMHg0OTM2NjAwOSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4NGQzODAwMDAsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDAzMywgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKKwkweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NGM1ODAwMDAsCisJMHg0ZDNjMDAwMCwgMHg1OTMyNTgwOCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwKKwkweDA0MDIwMDIyLCAweDU5YThiMDE2LCAweDgyNTgwYzgwLCAweDAwMDAwMDE5LAorCTB4MDQwMDEwMDMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTgsIDB4ODA1OGIxMDQsCisJMHgwNDAxZmEwNywgMHg4MDAwMDU4MCwgMHgwNDAxZmExNywgMHg4MzJjYWMwMCwKKwkweDAwMDAwMDA5LCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLAorCTB4MDAxMGFiMTcsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4NTkyYzEwMGEsCisJMHg4YzA4MTUxOCwgMHgwNDAyMDAwNiwgMHg1OWE4MDAxMCwgMHg1OTJjMTAwZCwKKwkweDgwMDgwNTgwLCAweDA0MDIwMDA2LCAweDQxN2E3ODAwLCAweDU5MzAxMDA5LAorCTB4NTgwODE0MDMsIDB4MDIwMWY4MDAsIDB4MDAxMDIwYTEsIDB4MDIwMWY4MDAsCisJMHgwMDEwN2IzOCwgMHgwNDAxZjAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKKwkweDA0MDFmYTA5LCAweDAyMDFmODAwLCAweDAwMTA4MDFjLCAweDAyMDFmODAwLAorCTB4MDAwMjA3N2QsIDB4NWMwMjc4MDAsIDB4NWMwMGIwMDAsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NiwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAxLCAweDQ5MmU2MDA4LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNGQsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDRkMmMwMDAwLCAweDgzMzgwNTgwLCAweDAwMDAwMDE1LCAweDA0MDIwMDI3LAorCTB4NTlhODA4MTYsIDB4NTkzMjU4MDgsIDB4NTkzMDA0MGIsIDB4ODAwMDAwYzQsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDAyMSwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKKwkweDRjNTgwMDAwLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQwNTBhODAwLAorCTB4NTkzMGI0MGIsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMjgsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNiwgMHg1OTJjYjIwNSwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5MmU1ODAxLCAweDgxMmU1OWMwLAorCTB4MDQwMjA3ZjksIDB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsIDB4NThlZTU4MGQsCisJMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OGVjMDAwOSwgMHgwODAxZjgwMCwKKwkweDU5MzAwNDAyLCAweDVjMDBiMDAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDM1LCAweDA0MDAwMDA1LCAweDU5MzAxNDE5LCAweDA0MDFmODUxLAorCTB4MDQwMDAwMjcsIDB4MDQwMWYwMDYsIDB4NGQzMDAwMDAsIDB4NTkzMjYwMWUsCisJMHgwNDAxZjg1NiwgMHg1YzAyNjAwMCwgMHgwNDAwMDAyMCwgMHg1OTFjMGMwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDYsIDB4MDQwMjAwMWMsIDB4NTkxYzBjMDIsIDB4NTkzMDA0MTksCisJMHg4MDA0MDU4MCwgMHgwNDAwMDAwOSwgMHg1OTMwMDIxOSwgMHg4MDA0MDU4MCwKKwkweDA0MDIwMDE1LCAweDU5MWMwYTAyLCAweDU5MzAwNDE5LCAweDgwMDQwNTgwLAorCTB4MDQwMjAwMTEsIDB4MDQwMWYwMDksIDB4NTkzMDBhMTksIDB4ODIwNDA1ODAsCisJMHgwMDAwZmZmZiwgMHgwNDAwMDAwNSwgMHg1OTFjMDIwMiwgMHg1OTMwMGExOSwKKwkweDgwMDQwNTgwLCAweDA0MDIwMDA4LCAweDU5MWMwMDA5LCAweDU5MzAwODA5LAorCTB4ODAwNDA1ODAsIDB4MWMwMWYwMDAsIDB4NDE3YTM4MDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg1OWI4MDBlNCwKKwkweDhjMDAwNTM4LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDQyMDAwODAwLAorCTB4MDAwMDAxMmMsIDB4NGEwMzcwZTQsIDB4MjAwMDAwMDAsIDB4NTliODAwZTQsCisJMHg4MDA0MDg0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg4YzAwMDUzYywKKwkweDA0MDIwN2Y5LCAweDRhMDM3MGU0LCAweDMwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NTliODAwZTQsIDB4OGMwMDA1M2MsCisJMHgwNDAyMDdmMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNzBlNCwKKwkweDIwMDAwMDAwLCAweDQwMDAwMDAwLCAweDU5YjgwMGU0LCAweDhjMDAwNTM4LAorCTB4MDQwMjA3ZmIsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDcsIDB4OGMwNDBkMWUsCisJMHg1OTJjMGMwOCwgMHgwNDAyMDAwMiwgMHg4YzA0MGQxOCwgMHgxYzAxZjAwMCwKKwkweDA0MDFmYzFjLCAweDA0MDAwMDA4LCAweDQyMDAwODAwLCAweDAwMDAwMDI0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDY2ODEsIDB4ODIwNjNjMDAsIDB4MDAxMGQxYzAsCisJMHg0OTFmYzg1NywgMHgxYzAxZjAwMCwgMHg4MzMwMDQ4MCwgMHgwMDEwZDFjMCwKKwkweDA0MDAxMDBhLCAweDU5YTgwMDBiLCAweDgxMzAwNDgwLCAweDA0MDIxMDA3LAorCTB4NTkzMDE0MDIsIDB4MDQwMWZmZWYsIDB4MDQwMDAwMDcsIDB4NDExYzAwMDAsCisJMHg4MTMwMDU4MCwgMHgwNDAwMDAwMywgMHg4MTc4MDUwMCwgMHgwNDAxZjAwMiwKKwkweDgxMzAwNTQwLCAweDFjMDFmMDAwLCAweDQ5NDdjODU3LCAweDRkMzAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMGEsIDB4NDIwMjYwMDAsCisJMHgwMDEwYmRlOSwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTAyMDNjLCAweDgwMDAwNTgwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZmMsIDB4NDkzM2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDRkMmMwMDAwLCAweDRkMzQwMDAwLCAweDRkNDQwMDAwLCAweDRjNTgwMDAwLAorCTB4NTkzMjU4MDgsIDB4NTkzMjY4MDksIDB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNTc1NSwgMHg1OTJlOGMwNiwgMHg1OTJjNDIwNywgMHg4MjIwMDUwMCwKKwkweDAwMDAwMDBmLCAweDBjMDFmODA2LCAweDVjMDBiMDAwLCAweDVjMDI4ODAwLAorCTB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDk0NjYsCisJMHgwMDEwOTQ4OCwgMHgwMDEwOTQ4ZiwgMHgwMDEwOTQ5MywgMHgwMDEwOTQ5YywKKwkweDAwMTA5NDYzLCAweDAwMTA5NDYzLCAweDAwMTA5NDYzLCAweDAwMTA5NGEwLAorCTB4MDAxMDk0YWMsIDB4MDAxMDk0YWMsIDB4MDAxMDk0NjMsIDB4MDAxMDk0NjMsCisJMHgwMDEwOTQ2MywgMHgwMDEwOTQ2MywgMHgwMDEwOTQ2MywgMHg0ODAzYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDgxNDI4MWMwLCAweDA0MDIwMDEyLAorCTB4NDE3ODU4MDAsIDB4NTkyYzA0MDQsIDB4OGMwMDA1MWMsIDB4MDQwMjAwMDIsCisJMHg1OTM0NWMwNSwgMHg0NDJjMjgwMCwgMHg1OTM0MDAwOCwgMHg0ODAwMjgwMiwKKwkweDU5MzQwMDA5LCAweDQ4MDAyODAxLCAweDU5MzQwMDA2LCAweDQ4MDAyODA0LAorCTB4NTkzNDAwMDcsIDB4NDgwMDI4MDMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGIsCisJMHgwNDAxZjAzNywgMHg1OTJjMDIwNywgMHg4YzAwMDUxZSwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAyLCAweDA0MDIwMDMyLCAweDgyMDRiNTQwLCAweDAwMDAwMDAwLAorCTB4MDQwMDAwMmYsIDB4NDQwNDI4MDAsIDB4NTkzMjY4MDksIDB4NTkzNDA0MDAsCisJMHg0ODAwMjgwMSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAyOCwKKwkweDgxNDI4MWMwLCAweDA0MDIwMDMwLCAweDU5MzQ1YzA1LCAweDQ0MmMyODAwLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMjEsIDB4ODM0MGI1NDAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDAxZSwgMHgwNDAxZjAyNywgMHg4MTQyODFjMCwKKwkweDA0MDIwMDI1LCAweDU5MzQwMjAwLCAweDQ0MDAyODAwLCAweDU5MzQwMDAxLAorCTB4NDgwMDI4MDEsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMTQsCisJMHg4MzQwYjU0MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAxYiwgMHgwNDAxZjAxMCwKKwkweDgzNDBiNTQwLCAweDAwMDAwMDAwLCAweDA0MDAwMDBkLCAweDAyMDFmODAwLAorCTB4MDAxMDRhMWYsIDB4MDQwMDAwMTQsIDB4OGMyMDQ1MGUsIDB4MDQwMDAwMDIsCisJMHg0OTdhNjAwOSwgMHg0MTc4YjAwMCwgMHg0OTdhNWEwNiwgMHgwNDAxZjAwNCwKKwkweDgzNDBiNTQwLCAweDAwMDAwMDAwLCAweDA0MDIwMDBiLCAweDU5MmMwNDA0LAorCTB4ODQwMDA1MWMsIDB4NDgwMjVjMDQsIDB4NTkyYzAyMDcsIDB4ODQwMDA1MWUsCisJMHg0ODAyNWEwNywgMHgwNDAxZjhhYSwgMHg0OTdhNjAwOCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMmRhLCAweDU5MmMwMjA3LCAweDhjMDAwNTFlLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMjA3ZjIsIDB4ODIwNGI1NDAsIDB4MDAwMDAwMDAsCisJMHgwNDAwMDdlZiwgMHg0NDA0MjgwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmN2ViLCAweDQ5MzdjODU3LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjA3NWEsIDB4MDQwMDAwMTEsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwYiwKKwkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzdjODU3LCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTUsIDB4MDQwMjAwMjUsIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwNCwgMHgwNDAyMDAyMSwgMHg1OWE4MDAxMCwgMHg1OTJjMTAwOSwKKwkweDgwMDgwNTgwLCAweDA0MDIwMDEwLCAweDRkNDQwMDAwLCAweDU5MmU4YzA2LAorCTB4NTkyYzAyMDcsIDB4NDgwM2M4NTYsIDB4ODIwMDA1MDAsIDB4MDAwMDAwODAsCisJMHg4NDAwMDU0OCwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMTAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0OWJiLCAweDVjMDI3ODAwLCAweDVjMDI4ODAwLAorCTB4MDQwMWYwMDQsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMWYsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAxNywgMHg0ZDQwMDAwMCwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDAwLCAweDQxNzgwODAwLCAweDA0MDFmZjM4LAorCTB4NWMwMjgwMDAsIDB4MDQwMWYwMGUsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMWYsCisJMHgwNDAyMDdmNCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAwYSwKKwkweDRjNTgwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmODZlLAorCTB4NWMwMGIwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc3ZCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywKKwkweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDA0MDAwMDEyLAorCTB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NGQzYzAwMDAsCisJMHg0ZDM4MDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywKKwkweDQ5MmU2MDA4LCAweDQyMDI3MDAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsIDB4NWMwMjc4MDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywKKwkweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA3OTQyLCAweDA0MDAwMDBkLAorCTB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NDkyZTYwMDgsCisJMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA1MSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwN2ExLCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGM1ODAwMDAsCisJMHg1OTMyNTgwOCwgMHg4MzM4MzU4MCwgMHgwMDAwMDAxNSwgMHgwNDAyMDAxMSwKKwkweDU5MmMwMDA4LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDA0MDIwMDBhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDU3NTUsIDB4NTljYzAwMDAsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHg0NDAwMjgwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmODBiLCAweDAyMDFmODAwLCAweDAwMTA3YjM4LCAweDA0MDFmMDA2LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWY4MjMsIDB4MDIwMWY4MDAsCisJMHgwMDEwODAxYywgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywKKwkweDRjNTgwMDAwLCAweDRjMDAwMDAwLCAweDgwNThiMWMwLCAweDA0MDAwMDBiLAorCTB4ODI1ODA1MDAsIDB4ZmZmZmZmZjAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCisJMHg4MDU4YjBkMCwgMHg1OTJjMDQwOCwgMHg4MjAwMDUwMCwgMHhmZmZmZjBmZiwKKwkweDgwNTgwNTQwLCAweDQ4MDI1YzA4LCAweDVjMDAwMDAwLCAweDVjMDBiMDAwLAorCTB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsIDB4NGMwMDAwMDAsIDB4NGMwNDAwMDAsCisJMHg4MDAwMDBkOCwgMHg1OTJjMGMwOCwgMHg4MjA0MGQwMCwgMHhmZmZmMGZmZiwKKwkweDgwMDQwNTQwLCAweDQ4MDI1YzA4LCAweDVjMDAwODAwLCAweDVjMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHg1OTJjMDIwNywgMHg4NDAwMDU1ZSwgMHg0ODAyNWEwNywgMHg0YzUwMDAwMCwKKwkweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDA0MDFmZmQ5LCAweDAyMDFmODAwLAorCTB4MDAxMDU3NTUsIDB4NDYwMDI4MDAsIDB4MDAwMDAwMTgsIDB4ODAxNDI4MDAsCisJMHg4MDU4YjA0MCwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNywgMHg0MDE0YTgwMCwKKwkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDVjMDBiMDAwLCAweDVjMDBhODAwLAorCTB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NTkzMjU4MDgsCisJMHg1OTJjMDIwNCwgMHg4MjAwMDU4MCwgMHgwMDAwMDE1MiwgMHgxYzAxZjAwMCwKKwkweDU5MzAwMDFmLCAweDgwMDAwNTQwLCAweDAyMDIwODAwLCAweDAwMTAwZDU2LAorCTB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4NTkzMDAyMDMsCisJMHg0OTMzYzg1NywgMHg0OTJmYzg1NywgMHg0OTNiYzg1NywgMHg0ODAzYzg1NywKKwkweDgyMDAzNDgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAorCTB4MGMwMWY4MDMsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDk1YmQsCisJMHgwMDEwOTVjOCwgMHgwMDEwOTYwMywgMHgwMDEwOTViZCwgMHgwMDEwOTViZCwKKwkweDAwMTA5NWJkLCAweDAwMTA5NWJkLCAweDAwMTA5NWJkLCAweDAwMTA5NWJmLAorCTB4MDAxMDk1YmQsIDB4MDAxMDk1YmQsIDB4MDAxMDk1YmQsIDB4MDAxMDk1YmQsCisJMHgwMDEwOTViZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MzQ4MCwKKwkweDAwMDAwMDU2LCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDQ5M2E2NDAzLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxMywgMHgwNDAyMDAwZiwgMHg1OTJjMDAwYywKKwkweDgwMDAwMWMwLCAweDA0MDAwMDA2LCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLAorCTB4NTlhODAwMzcsIDB4NDgwMjYyMDYsIDB4MWMwMWYwMDAsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzdkLCAweDgzMzgwNTgwLCAweDAwMDAwMDI3LCAweDA0MDAwMDFhLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMDAwMTIsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAxNSwgMHgwNDAwMDAwNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNiwKKwkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDc5NzQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMiwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZjAxNCwKKwkweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDRhMDI1ODBlLCAweDAwMDAwMDExLAorCTB4MDQwMWYwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4NGEwMjU4MGUsCisJMHgwMDAwMDAxMCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAzMSwgMHg0YTAyNTgwZCwKKwkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmODAwLAorCTB4MDAxMDRjMTksIDB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsIDB4NTkzNDE0MDAsCisJMHg4MjA4MWQwMCwgMHgwMDAwMDBmZiwgMHg1OTMwMGMwMywgMHg0ODBiYzg1NywKKwkweDQ4MDdjODU3LCAweDgyMDQwNTgwLCAweDAwMDAwMDUzLCAweDA0MDAwMDJlLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMTYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwNDAwMDAxNywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDAwMDFjLCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDFkLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMzMsIDB4MDQwMDAwMWEsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDAxYiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNCwKKwkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDA0MDFmOGExLCAweDA0MDFmMDE2LAorCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDA4NGMsIDB4MDQwMWYwMTIsCisJMHg4MjBjMDU4MCwgMHgwMDAwMDAwYiwgMHgwNDAyMDAwZiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDA0MDFmMDBhLAorCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDA4NjQsIDB4MDQwMWYwMDYsCisJMHg4MjBjMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAwMDg4OSwgMHgwNDAxZjAwMiwKKwkweDA0MDFmODkzLCAweDRhMDI2NDAzLCAweDAwMDAwMDUyLCAweDU5YTgxMDE2LAorCTB4NTkyYzA0MGIsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMDMsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAwOCwgMHg1OTJjMDQwYiwgMHg4YzAwMDUxNiwgMHgwNDAwMDAwMywKKwkweDgyMDgxNDAwLCAweDAwMDAwMDE4LCAweDU5MmMwMDBjLCAweDQ5N2E1ODBkLAorCTB4NDk3YTU4MGUsIDB4ODAwODBjODAsIDB4MDQwMDAwMDksIDB4MDQwMDEwMDUsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwNywgMHg0MDAwMTAwMCwgMHgwNDAxZjAwNiwKKwkweDRhMDI1YTA2LCAweDAwMDAwMDE1LCAweDA0MDFmMDAzLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDAsIDB4NDgwYTU4MGMsIDB4ODIwODE0MDAsIDB4MDAwMDAwMDMsCisJMHg4MDA4MTEwNCwgMHgwMjAxZjgwMCwgMHgwMDEwN2FiNSwgMHgwNDAwMDAxMCwKKwkweDU5MmMxMDAxLCAweDQ4MGE2MDBiLCAweDU4MDgwODAwLCAweDgyMDgwNDAwLAorCTB4MDAwMDAwMDIsIDB4NTkyYzEwMTEsIDB4NTkyYzE4MTIsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwMCwgMHg0MjAwMjAwMCwgMHgwMDEwMTIwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA3YzMyLCAweDA0MDAwMDAyLCAweDFjMDFmMDAwLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMmMsIDB4NDk3YTU4MGMsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwKKwkweDA0MDIwMDBhLCAweDU5YTgwMDA1LCAweDhjMDAwNTE0LCAweDA0MDIwMDBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ2MmEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjAwMCwgMHgwMDEwNDU3MSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywKKwkweDAyMDFmMDAwLCAweDAwMTA0NTcxLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMjAwMDksIDB4NTkzNDAwMDIsCisJMHg4MjAwMDUwMCwgMHgwMGZmMDAwMCwgMHg4MjAwMDU4MCwgMHgwMGZmMDAwMCwKKwkweDA0MDAwN2VjLCAweDQyMDAxMDAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDRjNmQsIDB4MDQwMDA3ZTcsIDB4NTkyYzA0MGIsIDB4ODQwMDA1NDAsCisJMHg0ODAyNWMwYiwgMHgwNDAxZjdlOSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwKKwkweDA0MDIwMDBmLCAweDU5YTgwMDA1LCAweDhjMDAwNTE0LCAweDA0MDIwMDEwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ2OGQsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywgMHg1YzAyNzgwMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmMDAwLCAweDAwMTA0NTcxLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsIDB4MDAxMDQ1NzEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNTEzYiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHgwNDAyMDAwOSwKKwkweDU5MzQwMDAyLCAweDgyMDAwNTAwLCAweDAwZmYwMDAwLCAweDgyMDAwNTgwLAorCTB4MDBmZjAwMDAsIDB4MDQwMDA3ZTcsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGM2ZCwgMHgwNDAwMDdlMiwgMHg1OTJjMDQwYiwKKwkweDg0MDAwNTQwLCAweDQ4MDI1YzBiLCAweDA0MDFmN2U5LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsIDB4MDAxMDQ1NzEsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAxNSwgMHgwNDAyMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYTJjOCwKKwkweDAyMDAwODAwLCAweDAwMTA0OGMxLCAweDFjMDFmMDAwLCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTUsIDB4MDQwMjAwMWQsIDB4NGM1ODAwMDAsIDB4ODNjYzE0MDAsCisJMHgwMDAwMDAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg4MzM0MWMwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA4NTVhLCAweDA0MDIwMDEyLAorCTB4ODNjYzE0MDAsIDB4MDAwMDAwMGEsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCisJMHg4MzM0MWMwMCwgMHgwMDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwKKwkweDA0MDIwMDA5LCAweDU5MzQyMjAwLCAweDU5Y2MxMDA3LCAweDgwMDgxMWMwLAorCTB4MDQwMDAwMDMsIDB4NDgwYTY4MDEsIDB4ODQxMDI1NDIsIDB4ODQxMDI1MWEsCisJMHg0ODEyNmEwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODdiLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDAyMDFmODAwLAorCTB4MDAxMDZjNTUsIDB4NTkzMDAyMDMsIDB4NDkzM2M4NTcsIDB4NDgwM2M4NTcsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwKKwkweDBjMDFmODAzLCAweDAyMDFmMDAwLCAweDAwMTA2YzRiLCAweDAwMTA5NzBiLAorCTB4MDAxMDk3MWEsIDB4MDAxMDk3MGMsIDB4MDAxMDk3MDksIDB4MDAxMDk3MDksCisJMHgwMDEwOTcwOSwgMHgwMDEwOTcwOSwgMHgwMDEwOTcwOSwgMHgwMDEwOTcwOSwKKwkweDAwMTA5NzA5LCAweDAwMTA5NzA5LCAweDAwMTA5NzA5LCAweDAwMTA5NzA5LAorCTB4MDAxMDk3MDksIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MWMwMWYwMDAsCisJMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA1MiwgMHgwMjAwMDAwMCwKKwkweDAwMTA4ZDg1LCAweDAyMDFmODAwLCAweDAwMTA0YzE5LCAweDU5MzI1ODA4LAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCisJMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OTMwMTgwNCwgMHg4NDBjMDUyMCwKKwkweDQ4MDI2MDA0LCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDA0MDIwMDEwLAorCTB4OGMwYzFkMjAsIDB4MDQwMjAwMTAsIDB4NDIwMDEwMDAsIDB4MDAxMGI3ZjYsCisJMHg1MDA4MTAwMCwgMHg1ODA4MDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDEwMCwKKwkweDA0MDAwMDBlLCAweDU4MDgwMDBjLCAweDgxMzAwNTgwLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4NDk3ODEwMGMsIDB4MDQwMWYwMDMsIDB4OGMwYzFkMjAsCisJMHgwNDAyMDdkYywgMHgwMjAxZjgwMCwgMHgwMDEwNjhkMywgMHgwNDAwMDdkOSwKKwkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDAyMDFmODAwLCAweDAwMTA2ZThlLAorCTB4MDQwMDA3ZjksIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjdiZCwgMHg0OTMzYzg1NywKKwkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDU5MmMwYzA3LAorCTB4NDgwNjU4MGEsIDB4NTljYzA4MDksIDB4NDgwNjU4MDcsIDB4NTljYzBhMDgsCisJMHg0ODA2NTgwYiwgMHg1OWM4MDgxNywgMHg4MjA0MDUwMCwgMHgwMDAwMDNmZiwKKwkweDgwMDAxMGM0LCAweDhjMDQwZDE0LCAweDA0MDAwMDA1LCAweDU5Y2MwMDAyLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsIDB4ODAwODE0ODAsIDB4ODIwODA0ODAsCisJMHgwMDAwMDBmMSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODBhNjIxYSwKKwkweDQxMmMwODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NDkyYzA4MDksIDB4NTgwNDA0MDgsIDB4ODQwMDA1NTIsCisJMHg4NDAwMDU0MCwgMHg0ODAwMGMwOCwgMHg4MjA4MTQwMCwgMHgwMDAwMDAwMywKKwkweDgwMDgxMTA0LCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDgzMmNhYzAwLAorCTB4MDAwMDAwMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTAsIDB4ODIwODA0ODAsCisJMHgwMDAwMDAxMCwgMHgwNDAyMTAwMywgMHg0MDA4MDgwMCwgMHg4MDAwMDU4MCwKKwkweDQwMDRiMDAwLCAweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjI4LAorCTB4NWMwMDAwMDAsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMGQsIDB4NDEyYzEwMDAsCisJMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDQ5MmMxMDAxLCAweDgzMmNhYzAwLCAweDAwMDAwMDA0LAorCTB4NWMwMDAwMDAsIDB4NDAwMDEwMDAsIDB4MDQwMWY3ZTksIDB4NWMwMGIwMDAsCisJMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDRkMmMwMDAwLCAweDRjMzgwMDAwLCAweDU5MzI1ODA4LCAweDU5MzAwMjFhLAorCTB4NDgwMjVhMDgsIDB4NTkzMDEwMTEsIDB4ODAwODExYzAsIDB4MDQwMjAwMDgsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg1OTJjMDAwYiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwYzAwLCAweDA0MDAwMDBiLCAweDA0MDFmMDBiLCAweDhjMDgxNTNlLAorCTB4MDQwMDAwMDYsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDcsIDB4ODAwODEwODAsCisJMHg4MDA4MTAwMCwgMHgwNDAxZjAwMywgMHg0YTAyNWEwNiwgMHgwMDAwMDAxNSwKKwkweDQ4MGE1ODA3LCAweDQyMDAwMDAwLCAweDAwMTBiZWQ5LCAweDUwMDA3MDAwLAorCTB4NTgzODAwMGIsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDgsIDB4NDkzMDcwMGMsCisJMHg0OTMwNzAwYiwgMHg1ODM4MDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDIwODA5LCAweDA0MDFmMDA1LCAweDgyMDAxNDAwLCAweDAwMDAwMDAwLAorCTB4NDUzMDEwMDAsIDB4NDkzMDcwMGIsIDB4NWMwMDcwMDAsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OTJjMDAwOSwgMHg0MDAwMTAwMCwKKwkweDQ4MDA3MDBhLCAweDgyMDgwNDAwLCAweDAwMDAwMDA0LCAweDQ4MDA3MDAzLAorCTB4NTkyYzAwMGQsIDB4NTkyYzEwMGUsIDB4NDgwMDcwMDcsIDB4NDgwODcwMDgsCisJMHg1OTJjMDAwYSwgMHg1OTJjMTIwOCwgMHg4MDA4MGM4MCwgMHgwNDAwMTAwMiwKKwkweDQwMDAxMDAwLCAweDgyMDgxNDAwLCAweDAwMDAwMDAzLCAweDgwMDgxMTA0LAorCTB4ODIwODA0ODAsIDB4MDAwMDAwMTAsIDB4MDQwMjEwMDMsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHg0ODAwNzAwZCwKKwkweDQ4MDg3MDA0LCAweDgwMDgxMGM0LCAweDQ4MDg3MDA1LCAweDQwMzgxMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4NTgsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKKwkweDQyMDAwODAwLCAweDAwMTBiZWQ5LCAweDQ1MmMwODAwLCAweDQ5N2E1ODBiLAorCTB4NDk3YTU4MGMsIDB4NDk3YTU4MGQsIDB4NGEwMjU4MDksIDB4MDAxMDk3ZWEsCisJMHg0YTAyNTgwMiwgMHgwMDAwMDEwMCwgMHg0YTAyNTgwMSwgMHgwMDAwMDAwMCwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ4MzNjODU3LCAweDRkMzAwMDAwLAorCTB4NGQyYzAwMDAsIDB4NGM1YzAwMDAsIDB4NDAzMGI4MDAsIDB4NTg1YzAwMGEsCisJMHg4MDAyNWQ0MCwgMHgwNDAyMDAwNCwgMHg1ODVjMDAwYywgMHg0YzAwMDAwMCwKKwkweDA0MDFmMDQ0LCAweDU4NWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMTAwLAorCTB4MDQwMjAwMjIsIDB4NTkyYzA4MDEsIDB4NGMwNDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdmNCwgMHg1YzAwMDgwMCwgMHg4MDA0MDljMCwgMHgwNDAwMDAxYywKKwkweDQ4MDRiODBhLCAweDU4NWMxMDBkLCAweDgwMDgxMWMwLCAweDA0MDIwMDA1LAorCTB4NDAwNjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4MDQwMWYwMTQsCisJMHg4MjA4MDQ4MCwgMHgwMDAwMDAxMCwgMHgwNDAyMTAwMywgMHg4MDAwMDU4MCwKKwkweDA0MDFmMDAzLCAweDQyMDAxMDAwLCAweDAwMDAwMDEwLCAweDQ4MDBiODBkLAorCTB4NDgwOGI4MDQsIDB4ODAwODEwYzQsIDB4NDgwOGI4MDUsIDB4ODIwNDA0MDAsCisJMHgwMDAwMDAwNCwgMHg0ODAwYjgwMywgMHg0MDVjMTAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODU4LCAweDA0MDFmMDI1LCAweDA0MDFmODI4LCAweDU4NWMwMDBjLAorCTB4ODAwMjY1NDAsIDB4NTkzMDAwMDAsIDB4ODAwMDBkNDAsIDB4MDQwMjAwMDIsCisJMHg0ODAwYjgwYiwgMHg0ODAwYjgwYywgMHg0OTdhNjAwMCwgMHg0YzAwMDAwMCwKKwkweDQ5NzhiODBhLCAweDU5MzI1ODA4LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAorCTB4NTkzMDA0MDIsIDB4NDgwMjVjMDYsIDB4NTkyYzEwMGIsIDB4NGMwODAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJjMSwgMHgwMjAxZjgwMCwgMHgwMDEwOTEyYSwKKwkweDVjMDAxMDAwLCAweDhjMDgxNTE4LCAweDA0MDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDkxZDEsIDB4MDQwMWYwMDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsCisJMHg0MDVjNzAwMCwgMHg1YzAwMDAwMCwgMHg4MDAyNjU0MCwgMHgwNDAwMDAwMywKKwkweDU5MzI1ODA4LCAweDA0MDFmZjc4LCAweDVjMDBiODAwLCAweDVjMDI1ODAwLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgzYmM4NTcsIDB4NTgzODAwMGEsCisJMHg0MDAyNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHg1ODM4MDAwYywKKwkweDgwMDI2NTQwLCAweDU5MzAwMDA4LCAweDgwMDI1ZDQwLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDIsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NGQxYzAwMDAsCisJMHg0OTdhNjAxYywgMHg0MTMyMzgwMCwgMHg0MDAyNjAwMCwgMHg0ZDNjMDAwMCwKKwkweDQyMDI3ODAwLCAweDAwMDAwMDA1LCAweDA0MDFmODNjLCAweDVjMDI3ODAwLAorCTB4NDExZTYwMDAsIDB4NTkzMDA0MTQsIDB4ODQwMDA1MDIsIDB4NDgwMjY0MTQsCisJMHg1YzAyMzgwMCwgMHgxYzAxZjAwMCwgMHg0ODFiYzg1NywgMHg0OTMzYzg1NywKKwkweDRjNWMwMDAwLCAweDRjNjAwMDAwLCAweDQwMTBiODAwLCAweDQwMTRjMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5NDIsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsCisJMHgwNDAwMDAwOCwgMHg0MDYwMjgwMCwgMHg0MDVjMzAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNDQ2LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLAorCTB4ODAwMDA1ODAsIDB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHg0MjAyNjAwMCwgMHgwMDEwZDFjMCwKKwkweDU5YTgwMDBlLCAweDgxNjQwNTgwLCAweDA0MDAwMDE2LCAweDU5MzAwYzA2LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwNCwgMHgwNDAwMDAwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwKKwkweDAyMDAwODAwLCAweDAwMTA4Y2Y5LCAweDA0MDFmMDA1LCAweDQ4MDdjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDkyZDcsIDB4MDQwMjA4MDgsIDB4ODMzMjY0MDAsCisJMHgwMDAwMDAyNCwgMHg0MTU4MDAwMCwgMHg4MTMwMDQ4MCwgMHgwNDAwMTdlOSwKKwkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwNDAzLAorCTB4NDgwM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsCisJMHg1OTMwMDQwNiwgMHg0ODAzYzg1NywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwKKwkweDA0MDAwMDE4LCAweDgyMDAwZDgwLCAweDAwMDAwMDAxLCAweDA0MDAwMDA5LAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMDYsIDB4NDkzM2M4NTYsCisJMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHgwNDAxZjAzYywKKwkweDU5MzAwMjAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDAxLCAweDA0MDAwMDE4LAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMjYsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAwNSwgMHgwNDAwMDAyMywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDU5MzAwMjAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDA5LCAweDA0MDAwMDBjLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMGIsIDB4MDQwMDAwMDksIDB4ODIwMDBkODAsCisJMHgwMDAwMDAwYSwgMHgwNDAwMDAxNywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwYywKKwkweDA0MDAwMDE0LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDU5OGMwMDBkLAorCTB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZlOGUsCisJMHgwNDAyMDAwYywgMHg1OTMwMDAwNCwgMHg0ODAzYzg1NywgMHg4YzAwMDUyMCwKKwkweDA0MDAwMDA0LCAweDg0MDAwNTIwLCAweDQ4MDI2MDA0LCAweDA0MDFmMDA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDY4ZDMsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCisJMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHg1OTMwMDQwNiwKKwkweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDA5LCAweDAyMDFmODAwLAorCTB4MDAxMDRjMTksIDB4MDIwMWY4MDAsIDB4MDAxMDkxNGUsIDB4MDIwMDA4MDAsCisJMHgwMDEwODAxYywgMHg4ZDNlN2QwMCwgMHgwNDAwMDAwMywgMHgwMjAxZjAwMCwKKwkweDAwMTA3OTExLCAweDRhMDI2MjFkLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwODUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0YiwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzIxLCAweDQ5MzNjODU3LCAweDU5MzY4YzAzLCAweDRjMTgwMDAwLAorCTB4NTkzMDAyMDMsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjgwMywgMHg1YzAwMzAwMCwgMHgxYzAxZjAwMCwKKwkweDAwMTA5OTBhLCAweDAwMTA5ZGNmLCAweDAwMTA5ZWRiLCAweDAwMTA5OTBhLAorCTB4MDAxMDk5MGEsIDB4MDAxMDk5MGEsIDB4MDAxMDk5MGEsIDB4MDAxMDk5MGEsCisJMHgwMDEwOTkyZCwgMHgwMDEwOTkwYSwgMHgwMDEwOTkwYSwgMHgwMDEwOTkwYSwKKwkweDAwMTA5OTBhLCAweDAwMTA5OTBhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4NDkzM2M4NTcsIDB4NDIwMjg4MDAsIDB4MDAwMGZmZmYsIDB4ODEzNjY5YzAsCisJMHgwNDAwMDAwMiwgMHg1OTM2OGMwMywgMHg0YzE4MDAwMCwgMHg1OTMwMDIwMywKKwkweDgyMDAzNDgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAorCTB4MGMwMWY4MDMsIDB4NWMwMDMwMDAsIDB4MWMwMWYwMDAsIDB4MDAxMDk5MjksCisJMHgwMDEwYTE4MCwgMHgwMDEwOTkyOSwgMHgwMDEwOTkyOSwgMHgwMDEwOTkyOSwKKwkweDAwMTA5OTI5LCAweDAwMTA5OTI5LCAweDAwMTBhOTUyLCAweDAwMTBhMGVkLAorCTB4MDAxMGE1MmMsIDB4MDAxMGE1NjIsIDB4MDAxMGE1MmMsIDB4MDAxMGE1NjIsCisJMHgwMDEwOTkyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDgzMzgzNDgwLCAweDAwMDAwMDUxLCAweDAyMDIxODAwLAorCTB4MDAxMDA1ZDgsIDB4NDEzODAwMDAsIDB4NDkzYmM4NTcsIDB4NGQxYzAwMDAsCisJMHg0ZDQwMDAwMCwgMHgwYzAxZjgwNCwgMHg1YzAyODAwMCwgMHg1YzAyMzgwMCwKKwkweDFjMDFmMDAwLCAweDAwMTA5OThhLCAweDAwMTA5YjY5LCAweDAwMTA5OThhLAorCTB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDliNzQsIDB4MDAxMDk5OGEsCisJMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwKKwkweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAorCTB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsCisJMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwKKwkweDAwMTA5OWFjLCAweDAwMTA5OWY1LCAweDAwMTA5YTBjLCAweDAwMTA5YTYyLAorCTB4MDAxMDlhYzYsIDB4MDAxMDliMDQsIDB4MDAxMDliMzQsIDB4MDAxMDk5OGEsCisJMHgwMDEwOTk4YSwgMHgwMDEwOWI3YywgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwKKwkweDAwMTA5YjhhLCAweDAwMTA5YjkzLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAorCTB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDljMTUsCisJMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOWE5YSwgMHgwMDEwOTk4YSwKKwkweDAwMTA5OThhLCAweDAwMTA5YmVjLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAorCTB4MDAxMDk5OGEsIDB4MDAxMDljMjMsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsCisJMHgwMDEwOTk4YSwgMHgwMDEwOWM2YywgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwKKwkweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAorCTB4MDAxMDljYjksIDB4MDAxMDk5OGEsIDB4MDAxMDljZTUsIDB4MDAxMDljZjAsCisJMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YywgMHgwMDEwOWNmYiwKKwkweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OTliLAorCTB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDlkMDIsCisJMHgwMDEwOWQwYSwgMHgwMDEwOWQyOCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTBhNTkyLCAweDA0MDIwM2E0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAzYTEsIDB4NTljYzA0MDcsCisJMHg0ODAyNjAxYywgMHg0YTAyNjQwMywgMHgwMDAwMDA0NSwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDQ5MzNjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE1OTIsIDB4MDQwMjAzOTUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjEwYSwgMHgwNDAyMDM5MiwgMHgwNDAxZmJjZSwgMHgwNDAyMDFhMCwKKwkweDU5Y2MwMDA3LCAweDQ4MDI2MDFjLCAweDRhMDI2NDAzLCAweDAwMDAwMDRhLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsCisJMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDAwOSwKKwkweDAyMDFmODAwLCAweDAwMTA0OGVjLCAweDA0MDIwMDA2LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDksIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDgsIDB4MDQwMjAwMDgsCisJMHg0YTAyNjQwMywgMHgwMDAwMDAwOSwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwOSwKKwkweDRhMDI2MjFhLCAweDAwMDAwMDAwLCAweDA0MDFmMWIyLCAweDAyMDFmODAwLAorCTB4MDAxMDQ4YzEsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMDksIDB4MDQwMDAwMjEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDllZCwgMHgwNDAwMDAxZSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhMjUyLCAweDA0MDIwMDI1LCAweDQyMDI4MDAwLCAweDAwMDAwMDI5LAorCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCisJMHg1YzAyNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDYyYSwgMHg4MzZjMDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDIwMDA0LCAweDU5YTgwMDFiLCAweDgwMDAwMDAwLAorCTB4NDgwMzUwMWIsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDgsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDE5MSwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQxNzgyODAwLCAweDA0MDFmMTgwLAorCTB4MDIwMWY4MDAsIDB4MDAxMGEzZGEsIDB4MDQwMjA3ZTEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwOSwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwZSwgMHg0YTAyNjIxYSwKKwkweDAwMDAxOTAwLCAweDA0MDFmMTgzLCAweDRhMDI2NDAzLCAweDAwMDAwMDA5LAorCTB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsIDB4NGEwMjYyMWEsIDB4MDAwMDBmMDAsCisJMHgwNDAxZjE3YywgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwKKwkweDA0MDIwMzNiLCAweDAyMDFmODAwLCAweDAwMTA0OGVjLCAweDA0MDIwMzM4LAorCTB4NDkzYTY0MDMsIDB4MDIwMWY4MDAsIDB4MDAxMGEyMmQsIDB4MDQwMjAwMDYsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAwNSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwNiwKKwkweDA0MDFmN2Q5LCAweDRhMDI2NDAzLCAweDAwMDAwMDA3LCAweDRhMDI2NDFhLAorCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsIDB4MDQwMWYxNjUsCisJMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNDhlYywgMHgwNDAyMDMyNCwKKwkweDAyMDFmODAwLCAweDAwMTBhNTkyLCAweDAyMDAwODAwLCAweDAwMTAyMTBhLAorCTB4MDQwMjAzMWYsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMDksIDB4MDQwMjAwMDUsCisJMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywKKwkweDAyMDFmODAwLCAweDAwMTA0OWZjLCAweDA0MDIwMDJiLCAweDU5Y2MwMjA2LAorCTB4ODIwMDM1MDAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMmUsIDB4ODIwMDM0ODAsCisJMHgwMDAwMDAxNCwgMHgwNDAwMTAyYiwgMHg1OTM0MzAwYSwgMHg4NDE4MzUxNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDAyLCAweDg0MTgzNTU2LAorCTB4NDgxYTY4MGEsIDB4NTljYzA0MDYsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsCisJMHgwNDAyMDAyMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTI5ZiwgMHgwNDAyMDAyOCwKKwkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDIwMDBjLCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDIwYTEsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDYsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTkzYSwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NSwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDAyMDFmODAwLCAweDAwMTA0NjhkLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMGEsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMjAsCisJMHgwNDAxZjc5NSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwYiwgMHg0YTAyNjQxYSwKKwkweDAwMDAwMDA5LCAweDRhMDI2MjFhLCAweDAwMDAxZTAwLCAweDA0MDFmMTIxLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4NjAsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHg0YTAyNjQwMywgMHgwMDAwMDAwYiwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwNywKKwkweDRhMDI2MjFhLCAweDAwMDAwMDAwLCAweDA0MDFmMTE2LCAweDRhMDI2NDAzLAorCTB4MDAwMDAwMGIsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsIDB4NGEwMjYyMWEsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjEwZiwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA0OGVjLCAweDA0MDIwMmNlLCAweDAyMDFmODAwLCAweDAwMTBhNTkyLAorCTB4MDQwMjAyY2IsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAyYzgsCisJMHg1OWNjMDIwNiwgMHg4MjAwMzUwMCwgMHgwMDAwMDAwMywgMHgwNDAyMDAxZCwKKwkweDgyMDAzNDgwLCAweDAwMDAwMDE0LCAweDA0MDAxMDFhLCAweDU5Y2MwNDA2LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMTYsIDB4NTkzNDA0MDAsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDcwNywgMHgwNDAwMDAxOSwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTAyMGExLCAweDQyMDAzMDAwLCAweDAwMDAwMDBhLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2EsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjIsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0YTAyNjQwMywgMHgwMDAwMDAwYywKKwkweDQxNzgyODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDIxLCAweDA0MDFmNzUyLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMGQsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDcsCisJMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwgMHgwNDAxZjBkZSwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDBkLCAweDRhMDI2NDFhLCAweDAwMDAwMDA5LCAweDRhMDI2MjFhLAorCTB4MDAwMDFlMDAsIDB4MDQwMWYwZDcsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDhlYywgMHgwNDAyMDI5NiwgMHgwMjAxZjgwMCwgMHgwMDEwYTU5MiwKKwkweDA0MDIwMjkzLCAweDAyMDFmODAwLCAweDAwMTAyMTBhLCAweDA0MDIwMjkwLAorCTB4MDQwMWZhY2MsIDB4MDQwMjAwMWEsIDB4NDkzYTY0MDMsIDB4NGM1YzAwMDAsCisJMHgwNDAxZmFkMiwgMHgwNDAyMDAwZSwgMHg0YTAyNjQwMywgMHgwMDAwMDAyZSwKKwkweDQwNWMyODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDI0LCAweDAyMDFmODAwLAorCTB4MDAxMDNiMjUsIDB4MDQwMDAwMGMsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsCisJMHg0MDVjMjgwMCwgMHg1YzAwYjgwMCwgMHgwNDAxZjBhZCwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDBkLCAweDRhMDI2NDFhLCAweDAwMDAwMDA3LCAweDRhMDI2MjFhLAorCTB4MDAwMDAwMDAsIDB4NWMwMGI4MDAsIDB4MDQwMWYwYjIsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwZCwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwOSwgMHg0YTAyNjIxYSwKKwkweDAwMDAxZTAwLCAweDA0MDFmMGFiLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDQ4ZWMsIDB4MDQwMjA2ZWYsIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwOSwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwgMHgwNDAwMDZlOSwKKwkweDAyMDFmODAwLCAweDAwMTA0OWZjLCAweDA0MDIwMDJkLCAweDAyMDFmODAwLAorCTB4MDAxMGEyYTcsIDB4MDQwMjAwMDcsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMGUsCisJMHg0MTc4MjgwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDA1MiwgMHgwNDAxZjcwMiwKKwkweDQ5MzNjODU3LCAweDQyMDAzMDAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAorCTB4MDAxMGE5NDIsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwKKwkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5MzQwMjAwLCAweDg0MDAwNTU4LAorCTB4NDgwMjZhMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDA3NiwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDA3LCAweDA0MDFmMDYyLCAweDQ5MzNjODU3LAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMGYsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsCisJMHg0YTAyNjIxYSwgMHgwMDAwMWUwMCwgMHgwNDAxZjA3MiwgMHg1OTM0MDQwMCwKKwkweDgyMDAwNTgwLCAweDAwMDAwNzAzLCAweDA0MDAwN2Y1LCAweDA0MDFmMDQwLAorCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4ZWMsIDB4MDQwMjAyMmMsCisJMHg1OWE4MDAyNiwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwOSwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA4LCAweDA0MDAwMjI2LCAweDAyMDFmODAwLCAweDAwMTA0OWYzLAorCTB4MDQwMjAwMmYsIDB4MDIwMWY4MDAsIDB4MDAxMGEyYzgsIDB4MDIwMDA4MDAsCisJMHgwMDEwYTI1MiwgMHgwNDAyMDAwNywgMHg0YTAyNjQwMywgMHgwMDAwMDAxMCwKKwkweDQxNzgyODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDUwLCAweDA0MDFmNmMyLAorCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCisJMHg1YzAyNzgwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwKKwkweDAwMTBhOTQyLCAweDQyMDAwMDAwLCAweDAwMTBiODY0LCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4NTkzNDAyMDAsIDB4ODQwMDA1NTgsIDB4NDgwMjZhMDAsCisJMHgwNDAxZjdjNSwgMHg0YTAyNjQwMywgMHgwMDAwMDAxMSwgMHg0YTAyNjQxYSwKKwkweDAwMDAwMDAzLCAweDRhMDI2MjFhLCAweDAwMDAxZTAwLCAweDA0MDFmMDNkLAorCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDIwMDA4MDAsCisJMHgwMDEwYTU5MiwgMHgwNDAyMDFmYSwgMHgwNDAxZmEzNiwgMHgwNDAyMDAwOCwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDEyLCAweDA0MDFmMDMyLCAweDU5MzQwNDAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDA3MDMsIDB4MDQwMDA3ZWIsIDB4NGQzYzAwMDAsCisJMHg0MTdhNzgwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwKKwkweDAwMTAyMDNjLCAweDVjMDI3ODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDE3LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5NDIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwKKwkweDA0MDAwMDE1LCAweDQyMDAzMDAwLCAweDAwMDAwMDA2LCAweDQxNzgyODAwLAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4NDkzM2M4NTcsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwMSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTBhOTc0LCAweDAyMDFmMDAwLCAweDAwMTBhNDNlLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwNDYsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NzQsIDB4MDIwMWYwMDAsCisJMHgwMDEwYTQzZSwgMHg0OTMzYzg1NywgMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsCisJMHg0OTMzYzg1NywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0NTcxLCAweDRhMDI2NDAzLCAweDAwMDAwMDA1LCAweDA0MDFmN2Y1LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE1OTIsIDB4MDQwMjAxYjUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjEwYSwgMHgwNDAyMDFiMiwgMHgwNDAxZjllZSwgMHgwNDAyMDdjMCwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDIwLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsCisJMHgwNDAyMDFhNywgMHg0YTAyNjQwMywgMHgwMDAwMDAyMywgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDAyMDFmODAwLAorCTB4MDAxMGE1OTIsIDB4MDIwMDA4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAxOWMsCisJMHgwNDAxZjlkOCwgMHgwNDAyMDdhYSwgMHg0MDMwMDgwMCwgMHg1OWE4MTAxMCwKKwkweDU5Y2MwMDA3LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDgwMDgwNTgwLAorCTB4MDQwMDAwMTksIDB4NTljYzE0MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMmMsCisJMHgwNDAwMDAyZCwgMHg1OWNjMGMwOCwgMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZGQ3LCAweDQxMzIzODAwLCAweDVjMDI2MDAwLCAweDA0MDAwMDI2LAorCTB4NTkxYzAyMDIsIDB4ODIwMDA1ODAsIDB4MDAwMGZmZmYsIDB4MDQwMDAwMDUsCisJMHg1OWNjMTIwOCwgMHg1OTFjMDIwMiwgMHg4MDA4MDU4MCwgMHgwNDAyMDAxZSwKKwkweDU5MWMwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwMDFhLAorCTB4MDQwMWYwMmMsIDB4NTljYzEyMDgsIDB4ODIwODA1ODAsIDB4MDAwMGZmZmYsCisJMHgwNDAwMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwOTQxMCwgMHgwNDAwMDAxMiwKKwkweDU5Y2MxNDA4LCAweDU5MWMwMjAyLCAweDgwMDgwNTgwLCAweDA0MDIwMDBlLAorCTB4NTkxYzAwMDksIDB4ODEzNDA1ODAsIDB4MDQwMDAwMTYsIDB4MDQwMWYwMGEsCisJMHg1OWNjMTQwOCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTQwNSwKKwkweDA0MDIwMDEwLCAweDU5Y2MxMjA4LCAweDgyMDgwNTgwLCAweDAwMDBmZmZmLAorCTB4MDQwMDAwMTksIDB4NGEwMjY0MDMsIDB4MDAwMDAwMjYsIDB4NGEwMjYyMWEsCisJMHgwMDAwMTcwMCwgMHg1OWNjMTIwNCwgMHg4MjA4MTU4MCwgMHgwMDAwZmZmZiwKKwkweDA0MDIwNzk4LCAweDRhMDI2NDAzLCAweDAwMDAwMDI1LCAweDA0MDFmNzk1LAorCTB4NTkxYzA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMjA3ZjIsCisJMHg1OTFjMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAyNCwgMHgwNDAyMDAwNiwKKwkweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLAorCTB4NWMwMjYwMDAsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMjUsIDB4MDQwMWY3ODUsCisJMHg0OTMzYzg1NywgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTA0NTY3LCAweDVjMDI3ODAwLCAweDRjNTgwMDAwLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODNhODFjMDAsIDB4MDAwMDAwMDIsCisJMHg4M2NjMTQwMCwgMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwKKwkweDVjMDBiMDAwLCAweDA0MDAwMDA0LCAweDRhMDI2NDAzLCAweDAwMDAwMDMxLAorCTB4MDQwMWY3NzAsIDB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNTEzYiwgMHgwNDAyMDAwZiwgMHgwMjAxZjgwMCwgMHgwMDEwNTE0OSwKKwkweDA0MDIwMDA4LCAweDRhMDM1MDMzLCAweDAwMDAwMDAxLCAweDQyMDJkODAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsIDB4MDQwMWYwMDUsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNTExMywKKwkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTAyMTBhLCAweDA0MDIwMTFjLAorCTB4MDQwMWY5NTgsIDB4MDQwMjA3MmEsIDB4NDkzYTY0MDMsIDB4MDQwMWY5OTYsCisJMHgwNDAyMDAwNCwgMHg0YTAyNjQwMywgMHgwMDAwMDAyYiwgMHgwNDAxZjc1MSwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDJjLCAweDA0MDFmNzRlLCAweDQ5MzNjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAxMGQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDllNywgMHgwNDAyMDc0MCwgMHgwMjAxZjgwMCwgMHgwMDEwNDhkOSwKKwkweDA0MDAwMDNjLCAweDU5Y2MwNDA4LCAweDQ4MDI2NDE5LCAweDU5Y2MwMjA4LAorCTB4NDgwMjYyMTksIDB4NTljYzA4MDcsIDB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHg4MDA0MDU4MCwgMHgwNDAwMDAxMiwgMHg1OWE4MDAxMCwKKwkweDgwMDQwNTgwLCAweDA0MDIwMDIxLCAweDU5Y2MxNDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDk0MTAsIDB4MDQwMDAwMjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE0Y2EsCisJMHgwNDAwMDAyMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTkyMSwgMHgwNDAwMDAxZCwKKwkweDQ5MWU2MDFlLCAweDRhMDI2NDAzLCAweDAwMDAwMDM2LCAweDA0MDFmMGU2LAorCTB4NTljYzEyMDgsIDB4ODIwODA1ODAsIDB4MDAwMGZmZmYsIDB4MDQwMDAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwOTQxMCwgMHgwNDAwMDAxMiwgMHg1OTFjMDIwMiwKKwkweDU5Y2MwYzA4LCAweDgwMDQwNTgwLCAweDA0MDIwMDBlLCAweDA0MDFmN2ViLAorCTB4NTljYzE0MDgsIDB4NDEzMjc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE0MDUsCisJMHgwNDAwMDAwOCwgMHgwNDAxZjdlNSwgMHg0ODAzYzg1NiwgMHg0YTAyNjQxYSwKKwkweDAwMDAwMDA5LCAweDRhMDI2MjFhLCAweDAwMDAxNTAwLCAweDA0MDFmMDA2LAorCTB4NDgwM2M4NTYsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsIDB4NGEwMjYyMWEsCisJMHgwMDAwMTcwMCwgMHg0YTAyNjQwMywgMHgwMDAwMDAzNywgMHgwNDAxZjBjNiwKKwkweDQ4MDNjODU2LCAweDRhMDI2NDAzLCAweDAwMDAwMDEyLCAweDA0MDFmMGMyLAorCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAwYzQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAyMDZmNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0OGQ5LCAweDA0MDAwMDNlLCAweDU5Y2MwNDA3LCAweDQ4MDI2NDE5LAorCTB4NTljYzEyMDcsIDB4NDgwYTYyMTksIDB4ODIwODA1ODAsIDB4MDAwMGZmZmYsCisJMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwOTQxMCwgMHgwNDAwMDAyYywKKwkweDA0MDFmMDA2LCAweDU5Y2MxNDA3LCAweDQxMzI3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMGE0MDUsIDB4MDQwMDAwMjYsIDB4NTljYzBjMDcsIDB4NTkxYzAyMDIsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDAyMiwgMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA4YmQ3LCAweDVjMDI2MDAwLCAweDU5Y2MwYzA5LAorCTB4ODIwNDBkMDAsIDB4MDAwMGZmMDAsIDB4ODQwNDA5YzAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTkyMSwgMHgwNDAwMDAxNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMSwKKwkweDA0MDAwMDBhLCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDA0LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMjAwMDcsIDB4NTkxYzAwMDgsCisJMHg4MDAwMDU0MCwgMHgwNDAwMDAwNCwgMHg1OWNjMjgwOCwgMHgwMjAxZjAwMCwKKwkweDAwMTBhNGRlLCAweDQ4MDNjODU2LCAweDRhMDI2NDFhLCAweDAwMDAwMDA5LAorCTB4NGEwMjYyMWEsIDB4MDAwMDJhMDAsIDB4MDQwMWYwMDYsIDB4NDgwM2M4NTYsCisJMHg0YTAyNjQxYSwgMHgwMDAwMDAwMywgMHg0YTAyNjIxYSwgMHgwMDAwMDMwMCwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDNiLCAweDA0MDFmMDdiLCAweDQ4MDNjODU2LAorCTB4NGEwMjY0MWEsIDB4MDAwMDAwMGIsIDB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsCisJMHgwNDAxZjdmOCwgMHg0YzA4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDhlYywKKwkweDA0MDAwMDI2LCAweDAyMDFmODAwLCAweDAwMTA0OGMxLCAweDAyMDFmODAwLAorCTB4MDAxMGE2MDEsIDB4MDQwMjAwMWUsIDB4NTlhODAwMjYsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMywgMHg0ODAzNTAyNiwgMHg1OWE4MDAxZCwgMHg4MDAwMDBkMCwKKwkweDU5YTgwODEwLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgwMDQxNTQwLAorCTB4NDgwYjUwMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmM3OCwgMHg0OTdiNTAyOCwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwKKwkweDA0MDAwMDAzLCAweDRhMDMyODA0LCAweDAwMDAwN2QwLCAweDhjMDAwNTBhLAorCTB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWU0NSwgMHg1YzAwMTAwMCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNjIzLCAweDA0MDFmN2ZjLCAweDVjMDAxMDAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3N2QsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAwNGMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTYyOCwgMHg0YTAyNjQwMywgMHgwMDAwMDA0NywKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAwNDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTYyOCwgMHg0YTAyNjQwMywgMHgwMDAwMDA0NywgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDAyMDFmODAwLAorCTB4MDAxMDIxMGEsIDB4MDQwMjAwMzYsIDB4MDIwMWY4MDAsIDB4MDAxMGE2MjgsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHgwNDAxZjgzNCwgMHgwNDAwMDAzMCwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDRlLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4NGEwMjY0MDMsIDB4MDAwMDAwNGYsCisJMHg0OTdhNjAxYywgMHg1OWNjMGEwNiwgMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwKKwkweDgwMDQwOWMwLCAweDA0MDAwNjVmLCAweDgyMDQwNTgwLCAweDAwMDAwMDAxLAorCTB4MDQwMjAwMDUsIDB4NTljYzA4MDgsIDB4NTlhODAwMDUsIDB4ODAwNDA1ODAsCisJMHgwNDAwMDY1OCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwYSwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsCisJMHgwNDAwMDY0YywgMHg0YTAyNjAxYywgMHgwMDAwMDAwMSwgMHgwNDAxZjY0OSwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDUwLCAweDU5Y2MwMjA3LCAweDQ4MDI2MDFjLAorCTB4MDQwMWY2NDQsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsCisJMHg4MDAwMDA0MCwgMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg0ODAzYzg1NywKKwkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDRkMmMwMDAwLCAweDRjNTAwMDAwLAorCTB4NGM1ODAwMDAsIDB4NGM1NDAwMDAsIDB4NTlhODAwMTYsIDB4ODIwMDBjODAsCisJMHgwMDAwMDgyOSwgMHgwNDAyMTAyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywKKwkweDA0MDAwMDI2LCAweDQ5MmU2MDA4LCAweDU5YTgwMDE2LCAweDgwMDAwMTA0LAorCTB4NDgwMjU4MDIsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwYiwgMHgwNDAwMTAxMywgMHg0YTAyNTgxMSwgMHgwMDAwMDAwYiwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDBiLCAweDgzMmMwNDAwLCAweDAwMDAwMDA1LAorCTB4NDAwMGE4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NDEyYzcwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHgwNDAwMDAxMCwgMHg0OTJjNzAwMSwKKwkweDQwMDQwMDAwLCAweDgwMDQwOWMwLCAweDA0MDAwMDA5LCAweDA0MDFmN2VjLAorCTB4NDgwMjU4MTEsIDB4NDAwMGIwMDAsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsCisJMHg0MDAwYTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDA2LCAweDQ5N2I1MDE2LCAweDU5MzI1ODA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4ODAwMDA1ODAsIDB4NWMwMGE4MDAsCisJMHg1YzAwYjAwMCwgMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDU5MzQzNDAwLCAweDQ5MzNjODU3LAorCTB4NDkzN2M4NTcsIDB4NDgxYmM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsCisJMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0YzVjMDAwMCwKKwkweDRkM2MwMDAwLCAweDA0MDFmODQwLCAweDA0MDIwMDJjLCAweDU5Y2MwMjA3LAorCTB4ODIwMDBkMDAsIDB4MDAwMGZmMDAsIDB4OTAwNDExYzAsIDB4NTljYzAwMGEsCisJMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg4MDA4MTU0MCwgMHg0ODBhNjAxYywKKwkweDhjMDQwZDE4LCAweDA0MDAwMDBlLCAweDQyMDAzMDAwLCAweDAwMDAwMDA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5MzIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwYjgwMCwgMHgwMDAwMDAwMiwKKwkweDQyMDI3ODAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDExLCAweDQxNzhiODAwLAorCTB4OGMwNDBkMWEsIDB4MDQwMDAwMTEsIDB4NTljYzAwMGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWM5YSwgMHgwNDAyMDAwZCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwOSwKKwkweDAyMDFmODAwLCAweDAwMTBhOTNhLCAweDQyMDAwMDAwLCAweDAwMTBiODYzLAorCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjBhMSwgMHgwNDAxZjAwNCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmMDAyLCAweDgwMDAwNTgwLCAweDVjMDI3ODAwLCAweDVjMDBiODAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTljYzAyMDYsIDB4ODIwMDA0ODAsCisJMHgwMDAwMDAxMCwgMHgwNDAyMTAwNiwgMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDgwMDAwNTgwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsCisJMHg1OWNjMDQwNywgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwODAwLCAweDA0MDIwMDA5LCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLAorCTB4MDBmZjAwMDAsIDB4ODIwMDBkODAsIDB4MDAxNDAwMDAsIDB4MDQwMDAwMDMsCisJMHg4MjAwMGQ4MCwgMHgwMDEwMDAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDU5MzAwNDAzLCAweDgyMDAzNDgwLCAweDAwMDAwMDUxLCAweDAyMDIxODAwLAorCTB4MDAxMDA1ZDgsIDB4ODMzODM1ODAsIDB4MDAwMDAwMTMsIDB4MDQwMjAwMDMsCisJMHg0ODAzYzg1NywgMHgwYzAxZjAxMiwgMHg4MzM4MzU4MCwgMHgwMDAwMDAyNywKKwkweDA0MDAwMDA1LCAweDgzMzgzNTgwLCAweDAwMDAwMDE0LCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4YzEsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YmJmLCAweDAyMDFmMDAwLCAweDAwMTA3OTExLCAweDAwMTA5ZTNjLAorCTB4MDAxMDllNDUsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCisJMHgwMDEwOWU0NSwgMHgwMDEwOWU1MCwgMHgwMDEwOWVjZCwgMHgwMDEwOWU5NSwKKwkweDAwMTA5ZWNkLCAweDAwMTA5ZWFkLCAweDAwMTA5ZWNkLCAweDAwMTA5ZWJlLAorCTB4MDAxMDllY2QsIDB4MDAxMDllYzYsIDB4MDAxMDllY2QsIDB4MDAxMDllYzYsCisJMHgwMDEwOWVjZCwgMHgwMDEwOWVjZCwgMHgwMDEwOWUzYywgMHgwMDEwOWUzYywKKwkweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLAorCTB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCisJMHgwMDEwOWUzYywgMHgwMDEwOWU0NSwgMHgwMDEwOWUzYywgMHgwMDEwOWVjZCwKKwkweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLCAweDAwMTA5ZWNkLCAweDAwMTA5ZTNjLAorCTB4MDAxMDllY2EsIDB4MDAxMDllY2QsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCisJMHgwMDEwOWUzYywgMHgwMDEwOWUzYywgMHgwMDEwOWVjZCwgMHgwMDEwOWVjZCwKKwkweDAwMTA5ZTNjLCAweDAwMTA5ZWMzLCAweDAwMTA5ZWNkLCAweDAwMTA5ZTNjLAorCTB4MDAxMDllNGEsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCisJMHgwMDEwOWUzYywgMHgwMDEwOWVjOSwgMHgwMDEwOWVjZCwgMHgwMDEwOWUzYywKKwkweDAwMTA5ZTNjLCAweDAwMTA5ZWNkLCAweDAwMTA5ZWNkLCAweDAwMTA5ZTNjLAorCTB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCisJMHgwMDEwOWUzYywgMHgwMDEwOWUzYywgMHgwMDEwOWUzYywgMHgwMDEwOWUzYywKKwkweDAwMTA5ZTNlLCAweDAwMTA5ZTNjLCAweDAwMTA5ZTNlLCAweDAwMTA5ZTNjLAorCTB4MDAxMDllM2MsIDB4MDAxMDllM2UsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCisJMHgwMDEwOWUzYywgMHgwMDEwOWUzZSwgMHgwMDEwOWUzZSwgMHgwMDEwOWUzZSwKKwkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDc3ZCwgMHg1OWE4MDAzNywgMHg0ODAyNjIwNiwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAyLCAweDFjMDFmMDAwLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ1NjcsIDB4NWMwMjc4MDAsIDB4MDQwMWYwN2UsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTA4LCAweDA0MDAwMDEyLCAweDU5MzI2ODA5LAorCTB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODNhODFjMDAsCisJMHgwMDAwMDAwMiwgMHg4MzM0MTQwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA4NTVhLCAweDgwMDAwNTQwLCAweDVjMDBiMDAwLCAweDA0MDIwMDZhLAorCTB4NTkzNDAyMDAsIDB4ODQwMDA1MWEsIDB4NDgwMjZhMDAsIDB4MDQwMWYwMWIsCisJMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDA2MywgMHg0ZDNjMDAwMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0NTY3LCAweDVjMDI3ODAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCisJMHg1OTM0MDIxMiwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHgwNDAwMDA1NiwKKwkweDU5OWMwMDE5LCAweDhjMDAwNTBlLCAweDA0MDIwMDUzLCAweDQxNmMwMDAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDQsIDB4NTlhODAwMWIsCisJMHg4MDAwMDAwMCwgMHg0ODAzNTAxYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywKKwkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjcyYiwgMHg0Y2U4MDAwMCwgMHg0MjAxZDAwMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA1ZmFlLCAweDVjMDFkMDAwLAorCTB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsIDB4MDQwMDAwMzYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjQ1ZSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKKwkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDAyMDFmODAwLCAweDAwMTBhOTZhLAorCTB4MDQwMjAwMmQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDU3MSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLAorCTB4MDAxMDY3MmIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsIDB4MDQwMWY4MjAsCisJMHg1OTMwMzAwOSwgMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDAxYSwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTA4LCAweDA0MDAwMDE3LCAweDAyMDFmODAwLAorCTB4MDAxMDQ5ZTcsIDB4MDQwMDAwMTQsIDB4NTlhODAwMWIsIDB4ODAwMDAwMDAsCisJMHg0ODAzNTAxYiwgMHgwNDAxZjdjNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKKwkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDA0MDFmNzkyLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDQsIDB4MDQwMWYwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4YzEsCisJMHgwNDAxZjAwNSwgMHgwNDAxZjAwNCwgMHgwNDAxZjAwMywgMHgwMjAxZjgwMCwKKwkweDAwMTA0NTcxLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ5MzNjODU3LAorCTB4NDgwN2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4NGQzYzAwMDAsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywgMHg1YzAyNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NTkzNDA0MDAsIDB4ODAwMDAxMTAsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMGMsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MzU4MCwgMHgwMDAwMDAxNSwKKwkweDA0MDIwMDAyLCAweDBjMDFmMDA2LCAweDgzMzgzNTgwLCAweDAwMDAwMDE2LAorCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMGQsIDB4MDAxMDgwYjgsCisJMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwKKwkweDAwMTA4MGI4LCAweDAwMTA5ZjMwLCAweDAwMTA5ZjAzLCAweDAwMTA4MGI4LAorCTB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsCisJMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwKKwkweDAwMTA4MGI4LCAweDAwMTA5ZjMwLCAweDAwMTA5ZjM3LCAweDAwMTA4MGI4LAorCTB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4NDkzM2M4NTcsCisJMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDAxYiwgMHg4MTM2NjljMCwKKwkweDA0MDAwMDE5LCAweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLAorCTB4MDQwMDAwMTUsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGUsIDB4MDQwMjAwMTIsCisJMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywKKwkweDVjMDI3ODAwLCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NzEsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwKKwkweDAwMTA2NzJiLCAweDU5Y2MwMDAxLCAweDAyMDFmODAwLCAweDAwMTA1YzlhLAorCTB4MDQwMjAwMGIsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDIwMjAwMDAsCisJMHgwMDAyMDc3ZCwgMHg1OTM0NTAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwNDJiNCwKKwkweDQ4MmE2ODAyLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NTkzMDM0MDMsIDB4ODIxODM1ODAsIDB4MDAwMDAwMWUsCisJMHgwMjAwMDAwMCwgMHgwMDAyMDc3ZCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTA4M2RmLCAweDAyMDIwMDAwLCAweDAwMDIwNzdkLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0OTNiYzg1NywgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDUxLCAweDA0MDIwMDBiLCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDc5NzQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMiwgMHgwNDAwMDA2ZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDI3LCAweDA0MDAwMDE0LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwNDgsIDB4MDQwMDAwMDYsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTQsCisJMHgwNDAwMDAwZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZjYwLCAweDAyMDIwMDAwLCAweDAwMTA3OTc0LCAweDU5MzAwMjAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDIwMDAwMDAsIDB4MDAwMjA4NmUsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTMwMDQwMywgMHg4MjAwMGM4MCwKKwkweDAwMDAwMDQ0LCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwNDgwLAorCTB4MDAwMDAwNDAsIDB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsIDB4NDAwMjcwMDAsCisJMHg0ODAzYzg1NywgMHgwYzAxZjAwMSwgMHgwMDEwOWY3NiwgMHgwMDEwOWY3OCwKKwkweDAwMTA5Zjc4LCAweDAwMTA5ZjkzLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4NTkzMjU4MDgsIDB4ODEyZTU5YzAsCisJMHgwNDAwMDAxNiwgMHg4MzJjMDUwMCwgMHgwMGZmMDAwMCwgMHgwNDAwMDAxMywKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDU5MzI2ODA5LCAweDU5MzQwMjAwLAorCTB4OGMwMDA1MGUsIDB4MDQwMjAwMGQsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTNlZiwgMHg0OTdhNjAwOCwgMHg1OTMwMDIwNiwKKwkweDgwMDAwNTQwLCAweDA0MDIwMDAzLCAweDU5YTgwMDM4LCAweDQ4MDI2MjA2LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmJiZiwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwMjAwMDAwMCwKKwkweDAwMTA3OTExLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTAwN2Y0LAorCTB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg1OTMyNTgwOCwgMHg1OTJjMDQwYSwgMHg4YzAwMDUwMiwgMHgwNDAwMDAwNywKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQyMDI3MDAwLCAweDAwMDAwMDQzLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsCisJMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTU5NywgMHgwMjAwMDAwMCwKKwkweDAwMDIwODZjLCAweDFjMDFmMDAwLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwNDEsIDB4NDIwMjc4MDAsIDB4ODAwMDIwNDIsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg4MzM4MDU4MCwgMHgwMDAwMDA1MSwKKwkweDA0MDAwMDA2LCAweDgzMzgwNTgwLCAweDAwMDAwMDQxLCAweDAyMDIwODAwLAorCTB4MDAxMDA1ZDgsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA2ZmQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTVkZiwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKKwkweDgzMzgwNDgwLCAweDAwMDAwMDUwLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAorCTB4ODMzODA0ODAsIDB4MDAwMDAwNDksIDB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsCisJMHgwYzAxZjAwMSwgMHgwMDEwOWZkYSwgMHgwMDEwOWZmYiwgMHgwMDEwOWZkOCwKKwkweDAwMTA5ZmQ4LCAweDAwMTA5ZmQ4LCAweDAwMTA5ZmQ4LCAweDAwMTA5ZmZiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMjU4MDgsIDB4NTkyYzA0MGEsCisJMHg4YzAwMDUxZSwgMHgwNDAwMDAwZCwgMHg4MjAwMGQwMCwgMHgwMDAwMDBjMCwKKwkweDgyMDQwZDgwLCAweDAwMDAwMDgwLCAweDA0MDAwMDBkLCAweDU5MzAwODA0LAorCTB4OGMwNDBkMTgsIDB4MDQwMjAwMGEsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDg4ZCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywKKwkweDQ5N2E2MjA2LCAweDAyMDFmMDAwLCAweDAwMDIwNmZkLCAweDU5MzI1ODA4LAorCTB4NTkyYzBjMGEsIDB4OGMwNDBkMWEsIDB4MDQwMjAwMDUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDZmZCwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNTk3LCAweDA0MDAwN2ZhLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDZiOGEsIDB4NTkzMjU4MDgsIDB4NTkzMjY4MDksIDB4NTkzNDAyMDAsCisJMHg4YzAwMDUwZSwgMHgwNDAwMDAwZSwgMHg1OTJjMDQwYSwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMGMwLCAweDgyMDAwNTgwLCAweDAwMDAwMDgwLCAweDA0MDAwMDA1LAorCTB4NTkyYzAwMGYsIDB4NTkzMDE4MTUsIDB4ODAwYzFjODAsIDB4NDgwZTYwMTUsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwgMHgwNDAxZjAwZCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDA0LCAweDA0MDFmYmRlLCAweDU5MzAwMjA2LCAweDgwMDAwNTQwLAorCTB4MDQwMjAwMDQsIDB4NTlhODAwMzgsIDB4ODAwMDAwYzIsIDB4NDgwMjYyMDYsCisJMHg0OTdhNjAwOCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHgxYzAxZjAwMCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQ5N2E2MjA2LCAweDAyMDFmMDAwLAorCTB4MDAwMjA2ZmQsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4NDk3YTYyMDYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDZmOCwgMHg1OTMwMDQxNCwgMHg4YzAwMDUxYywKKwkweDAyMDIwMDAwLCAweDAwMDIwODdlLCAweDU5MzI1ODA4LCAweDU5MmMyMDBmLAorCTB4NDAwODAwMDAsIDB4ODAxMDI0ODAsIDB4NTkzMDAwMTUsIDB4ODAxMDI0MDAsCisJMHg0ODEyNjAxNSwgMHgwMjAxZjAwMCwgMHgwMDAyMDg3ZSwgMHg4YzA0MGQwZSwKKwkweDA0MDIwMDBhLCAweDRhMDI2MjAzLCAweDAwMDAwMDA2LCAweDA0MDFmODIzLAorCTB4NTkzMDAwMWYsIDB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsIDB4MDAxMDBkN2MsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDZmOCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwKKwkweDFjMDFmMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDBkN2MsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDIwMDAwMDAsCisJMHgwMDAyMDg4NSwgMHgwNDAxZjdkOCwgMHg1OTMwMDQxNCwgMHg4YzAwMDUxYywKKwkweDA0MDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTAwYjYzLCAweDAyMDAwMDAwLAorCTB4MDAwMjA4NzcsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMTEsIDB4ODAwMDA1NDAsCisJMHgwNDAyMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwMGI2MywgMHgwMjAwMDAwMCwKKwkweDAwMDIwODc3LCAweDFjMDFmMDAwLCAweDQ5MmZjODU3LCAweDQ4MGJjODU3LAorCTB4OGMwODE1M2UsIDB4MDQwMDAwMDYsIDB4ODAwODEwODAsIDB4ODAwODEwMDAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwOSwgMHgwNDAxZjAwMywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDE1LCAweDQ4MGE1ODBiLCAweDFjMDFmMDAwLCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTMsIDB4MDQwMDAwMDUsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTQsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTMwMDQxNCwgMHg4YzAwMDUxNiwKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkzMDAwMDgsIDB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDVkOCwgMHgxYzAxZjAwMCwgMHg1OTMwMDQxNCwgMHg4YzAwMDUxNiwKKwkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDFjMDFmMDAwLCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDQsIDB4NDkzYTY0MDMsIDB4NDIwMDA4MDAsIDB4ODAwMDIwMDEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywKKwkweDQ5M2E2NDAzLCAweDAyMDFmODAwLCAweDAwMDIwMGM5LCAweDU5MzI1ODA4LAorCTB4NTkyYzA0MGEsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMTIsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBjMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDA4MCwgMHgwNDAwMDAxMSwKKwkweDU5MzAwNDE0LCAweDhjMDAwNTEyLCAweDA0MDIwMDBhLCAweDhjMDAwNTEwLAorCTB4MDQwMjAwMDgsIDB4NTkyYzA0MGMsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDUsCisJMHg4MjA4MGQ0MCwgMHg4MDAwMzA2NSwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyMSwKKwkweDgyMDgwZDQwLCAweDgwMDAyMDY1LCAweDAyMDFmMDAwLCAweDAwMTA2NzIxLAorCTB4ODIwODBkNDAsIDB4ODAwMDIwNDIsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MjEsCisJMHg0OTMzYzg1NywgMHg0OTNiYzg1NywgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0NCwKKwkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgzMzgwNDgwLCAweDAwMDAwMDQxLAorCTB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsIDB4MDAxMGEwYjYsCisJMHgwMDEwYTBjNiwgMHgwMDEwYTBkYiwgMHg1OTMyNTgwOCwgMHg1OTJjMDQwYSwKKwkweDhjMDAwNTFlLCAweDA0MDAwMDFkLCAweDgyMDAxZDAwLCAweDAwMDAwMGMwLAorCTB4ODIwYzFkODAsIDB4MDAwMDAwYzAsIDB4MDQwMDAwMTgsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwMSwgMHg0OTNhNjQwMywgMHg0MjAwMDgwMCwgMHg4MDAwMjA0MiwKKwkweDAyMDFmMDAwLCAweDAwMDIwNzIxLCAweDU5MzI1ODA4LCAweDU5MmMwNDBhLAorCTB4OGMwMDA1MWUsIDB4MDQwMDAwMGQsIDB4ODIwMDFkMDAsIDB4MDAwMDAwYzAsCisJMHg4MjBjMWQ4MCwgMHgwMDAwMDBjMCwgMHgwNDAwMDAwOCwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDQ5M2E2NDAzLCAweDQyMDAwODAwLCAweDgwMDAyMDAxLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3MjEsIDB4NDk3YTYwMDgsIDB4NDk3YTYyMDYsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwgMHgwNDAxZjMxNSwgMHg1OTMyNTgwOCwKKwkweDU5MmMwNDBhLCAweDhjMDAwNTFlLCAweDA0MDAwN2Y4LCAweDgyMDAxZDAwLAorCTB4MDAwMDAwYzAsIDB4ODIwYzFkODAsIDB4MDAwMDAwYzAsIDB4MDQwMDA3ZjMsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMywgMHg0OTNhNjQwMywgMHgwMjAxZjgwMCwKKwkweDAwMDIwMGM5LCAweDgyMDgwZDQwLCAweDgwMDAyMDY1LCAweDAyMDFmMDAwLAorCTB4MDAxMDY3MjEsIDB4NDkzM2M4NTcsIDB4NDkzYmM4NTcsIDB4ODMzODA1ODAsCisJMHgwMDAwMDA4NSwgMHgwNDAwMDAwNiwgMHg4MzM4MDU4MCwgMHgwMDAwMDA4OCwKKwkweDA0MDAwMDBhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDksIDB4NDkzYTY0MDMsIDB4NDIwMDA4MDAsIDB4ODAwMDAwNGIsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg0ZDFjMDAwMCwgMHg4MTM2NjljMCwKKwkweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTBhNTkyLCAweDA0MDIwMDQ0LAorCTB4NTljYzE0MDQsIDB4MDQwMWY4NDYsIDB4MDQwMDAwMTgsIDB4NTkxYzA0MDYsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAxZiwgMHg4MjAwMjU4MCwgMHgwMDAwMDAwNiwKKwkweDA0MDAwMDA3LCAweDgyMDAyNTgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDJlLAorCTB4ODIwMDI1ODAsIDB4MDAwMDAwMTEsIDB4MDQwMjAwMGMsIDB4NDk3YTNhMDUsCisJMHg0MjAwMjAwMCwgMHgwMDAwMDA1NCwgMHgwMjAxZjgwMCwgMHgwMDEwN2E0YSwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQ5M2E2NDAzLCAweDAyMDFmODAwLAorCTB4MDAxMGE5NzQsIDB4MDQwMWYwMmMsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsCisJMHgwNDAwMDAwNCwgMHg0MjAyMzgwMCwgMHhmZmZmZmZmZiwgMHgwNDAxZjdmMSwKKwkweDgxMzY2OWMwLCAweDA0MDIwMDA5LCAweDU5Y2MwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDVjOWEsIDB4MDQwMjAwMWUsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1YTYsCisJMHgwNDAyMDAxYiwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwMywgMHgwMDAwMDA4NywKKwkweDU5Y2MxMjA0LCAweDgyMDgxNTgwLCAweDAwMDBmZmZmLCAweDA0MDIwMDAzLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwODYsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyMSwKKwkweDA0MDFmMDBkLCAweDU5MWMwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA3LAorCTB4MDQwMjA3ZGUsIDB4NGQzMDAwMDAsIDB4NDExZTYwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzkxMSwgMHg1YzAyNjAwMCwgMHgwNDAxZjdkOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA3OTExLCAweDVjMDIzODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NDgwYmM4NTcsIDB4NDIwMDI4MDAsIDB4MDAxMGQxYzAsIDB4NDEzMDAwMDAsCisJMHg4MDE0MDU4MCwgMHgwNDAwMDAxNywgMHg1ODE0MDIwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDEzLCAweDU4MTQwMjAyLCAweDgwMDgwNTgwLAorCTB4MDQwMjAwMTAsIDB4NTgxNDFjMDYsIDB4ODIwYzA1ODAsIDB4MDAwMDAwMDUsCisJMHgwNDAwMDAwYywgMHg4MjBjMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAwMDAxZCwKKwkweDU5MzAyMDA5LCAweDU4MTQwMDA5LCAweDgwMDAwMWMwLCAweDA0MDAwMDBiLAorCTB4ODAxMDIxYzAsIDB4MDQwMDAwMDMsIDB4ODAxMDA1ODAsIDB4MDQwMDAwMTAsCisJMHg4MjE0MmMwMCwgMHgwMDAwMDAyNCwgMHg0MTU0MDAwMCwgMHg4MDE0MDQ4MCwKKwkweDA0MDIxMDBlLCAweDA0MDFmN2UyLCAweDU4MTQwMDFlLCAweDgwMTAyMWMwLAorCTB4MDQwMDAwMDUsIDB4NTgxMDIwMDIsIDB4ODIxMDI1MDAsIDB4MDBmZmZmZmYsCisJMHgwNDAxZjdmMiwgMHg1ODEwMjAxZSwgMHgwNDAxZjdmMCwgMHg0MDE2MzgwMCwKKwkweDgxMzAwNTQwLCAweDA0MDFmMDAyLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLAorCTB4NTgxNDE4MDcsIDB4OGMwYzFkMTAsIDB4MDQwMjA3ZWEsIDB4MDQwMWY3ZTEsCisJMHg0OTMzYzg1NywgMHg0OTNiYzg1NywgMHg4MzM4MDU4MCwgMHgwMDAwMDAxMywKKwkweDA0MDIwMDBlLCAweDU5MzAwNDAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDg1LAorCTB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwMDBjODAsIDB4MDAwMDAwOTMsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMDQ4MCwgMHgwMDAwMDA4NSwKKwkweDQ4MDNjODU3LCAweDBjMDFmMDE4LCAweDgzMzgwNTgwLCAweDAwMDAwMDI3LAorCTB4MDQwMDAwMDUsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTQsIDB4MDIwMjAwMDAsCisJMHgwMDEwNzk3NCwgMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHg1OTMyNTgwOCwKKwkweDgxMmU1OWMwLCAweDAyMDAwMDAwLCAweDAwMTA3OTExLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMzEsIDB4NGEwMjU4MTEsIDB4MDAwMDAwMDQsIDB4NGEwMjU4MTIsCisJMHgwMDAwMDBmZiwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwMjAxZjAwMCwKKwkweDAwMTA3OTExLCAweDAwMTBhMWI3LCAweDAwMTBhMWJlLCAweDAwMTBhMWJlLAorCTB4MDAxMGExYjcsIDB4MDAxMGExYjcsIDB4MDAxMGExYjcsIDB4MDAxMGExYjcsCisJMHgwMDEwYTFiNywgMHgwMDEwYTFiNywgMHgwMDEwYTFiNywgMHgwMDEwYTFiNywKKwkweDAwMTBhMWI3LCAweDAwMTBhMWI3LCAweDAwMTBhMWI5LCAweDAyMDFmODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkzMjU4MDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwKKwkweDQ5MzNjODU3LCAweDQyMDAwMDAwLCAweDAwMTBiODczLCAweDAyMDFmODAwLAorCTB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsIDB4MDAxMGE1ZGYsIDB4NDk3YTYyMDUsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAwYiwgMHgwNDAxZjgwNywgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDA2LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQ5N2E2MjA2LAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDk0M2M4NTcsIDB4NTkzMDA0MDYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAyMDAwMiwgMHgxYzAxZjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDhjZTUsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwYTIwNSwgMHgwMDEwYTIwOSwKKwkweDAwMTBhMWYwLCAweDAwMTBhMjE3LCAweDAwMTBhMjJhLCAweDAwMTBhMWYwLAorCTB4MDAxMGExZjAsIDB4MDAxMGExZjAsIDB4MDAxMGExZjAsIDB4MDAxMGExZjAsCisJMHgwMDEwYTFmMCwgMHgwMDEwYTFmMCwgMHgwMDEwYTFmMCwgMHgwMDEwYTFmMCwKKwkweDRkNDAwMDAwLCAweDU5MzAwMDFmLCAweDgwMDAwNTQwLCAweDA0MDAwMDA1LAorCTB4NDE0MDA4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDBkN2MsIDB4NDAwNjgwMDAsCisJMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywKKwkweDA0MDIwOWYzLCAweDRjNWMwMDAwLCAweDU5MzBiODA5LCAweDAyMDFmODAwLAorCTB4MDAxMDc5MTEsIDB4NDg1ZTYwMDksIDB4NWMwMGI4MDAsIDB4NWMwMjU4MDAsCisJMHg1YzAyODAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDAwMCwgMHgwMDEwNmM0YiwKKwkweDFjMDFmMDAwLCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDA0MDIwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDZlOGUsIDB4MDQwMjAwMTYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjhkMywgMHgwNDAwMDdkZiwgMHgwMjAxZjgwMCwgMHgwMDEwNmI2YywKKwkweDA0MDAwMDEwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDAyMDFmODAwLAorCTB4MDAxMDhjZDYsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZlNjIsCisJMHgwNDAyMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNjdhZSwgMHgwNDAwMDdkMSwKKwkweDAyMDFmODAwLCAweDAwMTA2YjZjLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDVkOCwgMHgwYzAxZjdiOSwgMHgwMjAxZjgwMCwgMHgwMDEwMGU5OSwKKwkweDA0MDFmN2M0LCAweDQ5MzNjODU3LCAweDRkNDQwMDAwLCAweDRkMzQwMDAwLAorCTB4NTljYzAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDVjOWEsIDB4MDIwMDA4MDAsCisJMHgwMDAyMDI0NSwgMHgwNDAyMDAxYSwgMHg1OTMwMDAwOSwgMHg0YzAwMDAwMCwKKwkweDQ5MzY2MDA5LCAweDQyMDAzMDAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLAorCTB4MDAxMGE5NDIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjEsIDB4MDIwMWY4MDAsCisJMHgwMDEwYWE0NywgMHg0ZDNjMDAwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDI5LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLAorCTB4NWMwMjgwMDAsIDB4NWMwMjc4MDAsIDB4NWMwMDAwMDAsIDB4NDgwMjYwMDksCisJMHg1OWNjMDAwNywgMHg0ODAyNjgwMiwgMHg4MDAwMDU4MCwgMHg1YzAyNjgwMCwKKwkweDVjMDI4ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjMDQwMDAwLAorCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNzQsIDB4MDQwMjAwNDAsCisJMHg1OWNjMGEwOCwgMHg4MjA0MDQ4MCwgMHgwMDAwMDEwMCwgMHgwNDAwMTAzMywKKwkweDU5Y2MwYzA4LCAweDgyMDQwNTAwLCAweDAwMDA4MDAwLCAweDA0MDAwMDM1LAorCTB4NTlhODAwMzIsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDksIDB4NTkzMDEwMDksCisJMHg1ODA4MDIxMiwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHgwNDAwMDAwNCwKKwkweDgyMDQwNTAwLCAweDAwMDAwODAwLCAweDA0MDAwMDJhLCAweDU5Y2MwYzA5LAorCTB4ODAwNDA4NDAsIDB4MDQwMDEwMjQsIDB4NTlhODA4MjYsIDB4OGMwNDBkMDYsCisJMHgwNDAwMDAwNCwgMHg1OWNjMGMwZiwgMHg4YzA0MGQxZSwgMHgwNDAyMDAxMiwKKwkweDU5Y2MwYTE3LCAweDgwMDQwOWMwLCAweDA0MDIwMDEyLCAweDU5Y2MwYTE4LAorCTB4ODIwNDA0ODAsIDB4MDAwMDAxMDAsIDB4MDQwMDEwMTQsIDB4NTljYzBjMTgsCisJMHg4MDA0MDljMCwgMHgwNDAyMDAwZSwgMHg1OWNjMGMxOSwgMHg4MDA0MDg0MCwKKwkweDA0MDAxMDExLCAweDU5Y2MwYzFhLCAweDgwMDQwODQwLCAweDA0MDAxMDExLAorCTB4MDQwMWYwMTgsIDB4NGEwMjYyMWEsIDB4MDAwMDAxMDAsIDB4MDQwMWYwMTIsCisJMHg0YTAyNjIxYSwgMHgwMDAwMDMwMCwgMHgwNDAxZjAwZiwgMHg0YTAyNjIxYSwKKwkweDAwMDAwNTAwLCAweDA0MDFmMDBjLCAweDRhMDI2MjFhLCAweDAwMDAwNzAwLAorCTB4MDQwMWYwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDA5MDAsIDB4MDQwMWYwMDYsCisJMHg0YTAyNjIxYSwgMHgwMDAwMGYwMCwgMHgwNDAxZjAwMywgMHg0YTAyNjIxYSwKKwkweDAwMDAyZDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLAorCTB4ODAwMDA1ODAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NTljYzA0MDcsCisJMHg0ODAzYzg1NywgMHg4MjAwMDU4MCwgMHgwMDAwMDgwMCwgMHgwNDAwMDAwMywKKwkweDRhMDI2MjFhLCAweDAwMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4NGMwYzAwMDAsIDB4NGM1ODAwMDAsCisJMHg1OWNjMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwNWM5YSwgMHgwMjAwMDgwMCwKKwkweDAwMDIwMjQ1LCAweDA0MDIwMDEyLCAweDgzY2MxNDAwLCAweDAwMDAwMDA4LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODMzNDFjMDAsIDB4MDAwMDAwMDYsCisJMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwgMHgwNDAyMDAwOSwgMHg4M2NjMTQwMCwKKwkweDAwMDAwMDBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzMzQxYzAwLAorCTB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsIDB4NWMwMGIwMDAsCisJMHg1YzAwMTgwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDRjMDAwMDAwLCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLAorCTB4NGMwYzAwMDAsIDB4NGM1ODAwMDAsIDB4NTljYzAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWM5YSwgMHgwMjAwMDgwMCwgMHgwMDAyMDI0NSwgMHgwNDAyMDAxNCwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsCisJMHgwNDAyMDAwYywgMHg4M2NjMTQwMCwgMHgwMDAwMDAwZCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAyLCAweDgzMzQxYzAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDg1NWEsIDB4MDQwMDAwMTQsIDB4NDkzM2M4NTYsIDB4NDkzM2M4NTYsCisJMHg0OTMzYzg1NywgMHg1OTM0MDAwOSwgMHg0ODAzYzg1NywgMHg1OTM0MDAwZSwKKwkweDQ4MDNjODU3LCAweDU5MzQwMDA4LCAweDQ4MDNjODU3LCAweDU5MzQwMDBkLAorCTB4NDgwM2M4NTcsIDB4NTkzNDAwMDcsIDB4NDgwM2M4NTcsIDB4NTkzNDAwMGMsCisJMHg0ODAzYzg1NywgMHg1OTM0MDAwNiwgMHg0ODAzYzg1NywgMHg1OTM0MDAwYiwKKwkweDQ4MDNjODU3LCAweDVjMDBiMDAwLCAweDVjMDAxODAwLCAweDVjMDAxMDAwLAorCTB4NWMwMDA4MDAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0OTQ3Yzg1NywgMHg0OTQzYzg1NywgMHg0YzYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YzU1LCAweDRkZjAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzAwMDAwLAorCTB4NGQzNDAwMDAsIDB4NDEzMGMwMDAsIDB4NDIwMjYwMDAsIDB4MDAxMGQxYzAsCisJMHg1OWE4MDAwZSwgMHg4MDYwYzFjMCwgMHgwNDAwMDAwNSwgMHg4MjYwMTU4MCwKKwkweDAwMTBiZGU5LCAweDA0MDAwMDAyLCAweDgwMDAwMDQwLCAweDgxNjQwNDgwLAorCTB4MDQwMjEwYmUsIDB4NDA2MDAwMDAsIDB4ODEzMDA1ODAsIDB4MDQwMDAwYjYsCisJMHgwNDAxZjk3YSwgMHgwNDAyMDBiNCwgMHg1OTMyNjgwOSwgMHg1OTMwMDQwNiwKKwkweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAorCTB4MGMwMWYwMDEsIDB4MDAxMGEzY2QsIDB4MDAxMGEzMzgsIDB4MDAxMGEzNTEsCisJMHgwMDEwYTM1YywgMHgwMDEwYTMzNSwgMHgwMDEwYTM0YywgMHgwMDEwYTM4NywKKwkweDAwMTBhM2NkLCAweDAwMTBhMzMzLCAweDAwMTBhMzlhLCAweDAwMTBhM2FlLAorCTB4MDAxMGEzMzMsIDB4MDAxMGEzMzMsIDB4MDAxMGEzMzMsIDB4MDAxMGEzMzMsCisJMHgwMDEwYTNjZCwgMHgwMDEwYTNjNCwgMHgwMDEwYTNiYywgMHgwMjAxZjgwMCwKKwkweDAwMTAwNWQ4LCAweDU5MzAwNDIwLCAweDhjMDAwNTAwLCAweDA0MDIwMDk2LAorCTB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDMsIDB4MDQwMDAwOTIsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTEzNCwgMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTA5MTRlLCAweDA0MDIwMDhhLCAweDAyMDFmODAwLCAweDAwMTA4MDFjLAorCTB4MDQwMWYwODcsIDB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTE0ZSwgMHgwMjAwMDgwMCwgMHgwMDEwODAxYywgMHgwNDAxZjA4MCwKKwkweDhkM2U3ZDE4LCAweDA0MDAwMDA0LCAweDU5MzAwNDIwLCAweDhjMDAwNTAwLAorCTB4MDQwMjAwN2QsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCisJMHgwNDAwMDA3NywgMHg0OTQyNWEwNiwgMHg0OTdhNWMwOSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMmRhLCAweDAyMDFmODAwLCAweDAwMTA5MTJhLCAweDA0MDFmMDcwLAorCTB4OGQzZTdkMDAsIDB4MDQwMDAwMDcsIDB4NTkzMDAwMTcsIDB4ODE0ODA1ODAsCisJMHgwNDAyMDA2ZCwgMHg1OTMwMDAxOCwgMHg4MTRjMDU4MCwgMHgwNDAyMDA2YSwKKwkweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LCAweDAyMDAwODAwLAorCTB4MDAxMDBlOTksIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCisJMHgwNDAwMDA1ZiwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OTMwMDAwNCwKKwkweDg0MDAwNTVjLCAweDQ4MDI2MDA0LCAweDU5MmMwNDA4LCAweDhjMDAwNTEyLAorCTB4MDQwMDAwMDcsIDB4NGQyYzAwMDAsIDB4NTkyYzAwMDksIDB4NDAwMjU4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHg1YzAyNTgwMCwgMHg0OTQyNWEwNiwKKwkweDQ5N2E1YzA5LCAweDA0MDFmYjE2LCAweDAyMDFmODAwLCAweDAwMTA5NTljLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkxYzYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTEyYSwgMHgwNDAxZjA0NSwgMHg4ZDNlN2QxOCwKKwkweDA0MDAwMDQ1LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LAorCTB4MDIwMDA4MDAsIDB4MDAxMDBlOTksIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTAzNywgMHgwNDAwMDAzYSwgMHg0OTQyNWEwNiwgMHg0OTdhNWMwOSwKKwkweDA0MDFmYWZmLCAweDAyMDFmODAwLCAweDAwMTA5NTljLCAweDAyMDFmODAwLAorCTB4MDAwMjAyZGEsIDB4MDQwMWYwMzIsIDB4MDIwMWY4MDAsIDB4MDAxMDYyZDUsCisJMHgwNDAwMDAzMSwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDAwMDJkLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMjAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDZiOGEsIDB4NTkzMjU4MDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAyMSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMmRhLCAweDA0MDFmMDFlLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDQsIDB4MDIwMDA4MDAsIDB4MDAxMDBlOTksIDB4NTkzMjU4MDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAxNSwgMHg0OTQyNWEwNiwKKwkweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDA0MDFmMDEwLAorCTB4ODMzYzA1MDAsIDB4MDAwMDE4MDAsIDB4MDQwMDAwMGYsIDB4OGQzZTdkMTYsCisJMHgwNDAyMDAwZCwgMHg1OTMyNTgxNywgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwKKwkweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDA0LAorCTB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzkxMSwgMHg4MzMyNjQwMCwgMHgwMDAwMDAyNCwgMHg0MTU4MDAwMCwKKwkweDgxMzAwNDgwLCAweDA0MDAxNzNiLCAweDVjMDI2ODAwLCAweDVjMDI2MDAwLAorCTB4NWMwMjU4MDAsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsCisJMHg1YzAwYzAwMCwgMHgxYzAxZjAwMCwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwKKwkweDQ4MDNjODU3LCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ1NjcsIDB4NWMwMjc4MDAsIDB4NGM1ODAwMDAsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg4M2E4MWMwMCwgMHgwMDAwMDAwMiwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA4NTVhLAorCTB4NWMwMGIwMDAsIDB4ODAwMDA1NDAsIDB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsCisJMHg0OTQzYzg1NywgMHg1OWE4MDAwYywgMHg4MTJjMDQ4MCwgMHgwNDAwMTAxMSwKKwkweDU5YTgwMDBkLCAweDgxMmMwNDgwLCAweDA0MDIxMDBlLCAweDU5MmMwMDAwLAorCTB4ODAwMDVkNDAsIDB4MDQwMDAwMDgsIDB4NDk3YTU4MDAsIDB4NDk0MjVhMDYsCisJMHg0YzJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHg1YzAyNTgwMCwKKwkweDA0MDFmN2Y3LCAweDQ5NDI1YTA2LCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLAorCTB4MWMwMWYwMDAsIDB4NDkzZmM4NTcsIDB4NDkzM2M4NTcsIDB4NDgwYmM4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDAyZSwgMHg0MTUwMjgwMCwKKwkweDgxM2U3OWMwLCAweDA0MDIwMDA2LCAweDU5YTgwMDY2LCAweDgwMDAwMDAwLAorCTB4NTlhODA4NmEsIDB4ODAwNDA1ODAsIDB4MDQwMDAwMjYsIDB4NDEzMDAwMDAsCisJMHg4MDE0MDU4MCwgMHgwNDAwMDAxYSwgMHg1ODE0MDIwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDE2LCAweDU4MTQwMjAyLCAweDgwMDgwNTgwLAorCTB4MDQwMjAwMTMsIDB4NTgxNDFjMDYsIDB4ODIwYzA1ODAsIDB4MDAwMDAwMDUsCisJMHgwNDAwMDAwZiwgMHg4MjBjMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAwMDAxNywKKwkweDU5MzAwMDA5LCAweDU4MTQyMDA5LCAweDgwMTAyMWMwLCAweDA0MDIwMDA2LAorCTB4NTgxNDIwMWUsIDB4NTkzMDE4MDksIDB4NTgwYzAwMDIsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHg4MDEwMDU4MCwgMHgwNDAwMDAwNywgMHg4MjE0MmMwMCwKKwkweDAwMDAwMDI0LCAweDQxNTQwMDAwLCAweDgwMTQwNDgwLCAweDA0MDIxMDA1LAorCTB4MDQwMWY3ZGYsIDB4NDAxNjM4MDAsIDB4ODEzMDA1NDAsIDB4MDQwMWYwMDIsCisJMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg1ODE0MTgwNywgMHg4YzBjMWQxMCwKKwkweDA0MDIwN2YzLCAweDA0MDFmN2U3LCAweDQyMDAyMDAwLCAweDAwMDBmZmZmLAorCTB4NTkzMDEwMDksIDB4ODAwODExYzAsIDB4MDQwMDAwMDIsIDB4NTgwODI0MDMsCisJMHg0MTMwMTAwMCwgMHgwNDAxZjAwNywgMHg0MTc4MTAwMCwgMHg0MTQ0MjAwMCwKKwkweDA0MDFmMDA0LCAweDQxNzgxMDAwLCAweDQyMDAyMDAwLCAweDAwMDBmZmZmLAorCTB4NWMwMDAwMDAsIDB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NDgwYmM4NTcsCisJMHg0ODEzYzg1NywgMHg0OTJmYzg1NywgMHg0OTQzYzg1NywgMHg0ZDJjMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4NGEwMjVhMDQsIDB4MDAwMDAxMGQsIDB4ODAwODExYzAsIDB4MDQwMDAwMTcsCisJMHg4MzQwMDU4MCwgMHgwMDAwMDAyOSwgMHgwNDAyMDAxMCwgMHg4MjE4MDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDAwMDBhLCAweDgyMTgwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwMDcsIDB4ODIxODA1ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDAwMDQsCisJMHg4MjE4MDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAyMDAwNCwgMHg0YTAyNTgwOSwKKwkweGZmZmZmZmZmLCAweDA0MDFmMDAyLCAweDQ4MGE1ODA5LCAweDU4MDgwMjAyLAorCTB4NDgwMjVjMTMsIDB4MDQwMWYwMDUsIDB4NGEwMjU4MDksIDB4ZmZmZmZmZmYsCisJMHg0YTAyNWMxMywgMHgwMDAwZmZmZiwgMHg0OTQyNWEwOCwgMHg0ODEyNWEwNiwKKwkweDgyMTAwNTgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDBlLCAweDRkNDQwMDAwLAorCTB4NGQzNDAwMDAsIDB4NDAxMjg4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTM0MDAwMiwgMHg4MjAwMDUwMCwKKwkweDAwZmZmZmZmLCAweDQ4MDI1ODEyLCAweDVjMDI2ODAwLCAweDVjMDI4ODAwLAorCTB4NDk3YTU4MDAsIDB4NDk3YTVjMDQsIDB4ODM0MDA1ODAsIDB4MDAwMDAwNDYsCisJMHgwNDAyMDAwMiwgMHg0ODE2NWEwNywgMHg0ODFhNWMwOCwgMHgwNDAxZmJlZCwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDU5MzAwODA5LCAweDgwMDQwOWMwLAorCTB4MDQwMDAwMDQsIDB4NTgwNDA0MDMsIDB4ODE0NDA1ODAsIDB4MWMwMWYwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHg0OTMzYzg1NywKKwkweDRjMDQwMDAwLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDFlLAorCTB4MDQwMjAwMTYsIDB4ODAwMDAwZDAsIDB4NTkzMDBhMTYsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDBmZiwgMHg4MDA0MDU0MCwgMHg0ODAzYzg1NywgMHg0ODAyNjQxNiwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDg1LCAweDRhMDI2MjAzLCAweDAwMDAwMDA5LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDUsIDB4NGEwMjYyMWQsIDB4MDAwMDAwMDQsCisJMHg1OWE4MDAzOCwgMHg0ODAyNjIwNiwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0YiwKKwkweDAyMDFmODAwLCAweDAwMDIwNzIxLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg1OTMwMDQxNCwgMHg0OTMzYzg1NywgMHg0ODAzYzg1NywgMHg4YzAwMDUxOCwKKwkweDA0MDAwMDA5LCAweDhjMDAwNTEyLCAweDAyMDIwMDAwLCAweDAwMTA5MjFlLAorCTB4MDQwMWY5MWIsIDB4MDIwMWY4MDAsIDB4MDAwMjA2ZmQsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc3ZCwgMHgxYzAxZjAwMCwgMHg1OTFjMDQwNiwgMHg0ODAzYzg1NywKKwkweDgyMDAwYzgwLCAweDAwMDAwMDA5LCAweDA0MDIxMDBiLCAweDBjMDFmMDAxLAorCTB4MDAxMGE0ZDksIDB4MDAxMGE0ZDksIDB4MDAxMGE0ZDksIDB4MDAxMGE0ZGIsCisJMHgwMDEwYTRkOSwgMHgwMDEwYTRkYiwgMHgwMDEwYTRkYiwgMHgwMDEwYTRkOSwKKwkweDAwMTBhNGRiLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NTkxYzA0MDYsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAxZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAwMDAwZSwKKwkweDQ4MDNjODU3LCAweDRhMDI2NDAzLCAweDAwMDAwMDNiLCAweDRhMDI2NDFhLAorCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDJhMDAsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwNzIxLCAweDQ4MDNjODU2LCAweDRjMDQwMDAwLCAweDRjMTQwMDAwLAorCTB4NGQzMDAwMDAsIDB4NDExZTYwMDAsIDB4MDQwMWY4ZTksIDB4NDk3YTYyMDUsCisJMHg1OTMwMDQxNCwgMHg0ODAzYzg1NywgMHg4MjAwMDUwMCwgMHhmZmZmYWRmZiwKKwkweDQ4MDI2NDE0LCAweDQ5N2E2NDA1LCAweDVjMDI2MDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA3ZTQsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NWMwMDI4MDAsCisJMHg1YzAwMDgwMCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwZCwgMHg0OTdhNTgwMCwKKwkweDQ5N2E1YzA0LCAweDRhMDI1YTA4LCAweDAwMDAwMDQ1LCAweDQ5MWU1ODA5LAorCTB4NTkzMDA0MDIsIDB4NDgwMjVjMDcsIDB4NTkzMDA0MTksIDB4NDgwMjVjMGIsCisJMHg1OTFjMDQxNCwgMHg4NDAwMDU1NiwgMHg0ODAyM2MxNCwgMHg1OTFjMTgwOSwKKwkweDU4MGMwNDAzLCAweDQ4MDI1YTA2LCAweDQ4MTY1ODBhLCAweDQ4MDY1YTBiLAorCTB4MDQwMWY5OWQsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwNDUsCisJMHg1OTFjMDIwMiwgMHg0YzAwMDAwMCwgMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwKKwkweDA0MDFmY2IxLCAweDVjMDI2MDAwLCAweDVjMDAwMDAwLCAweDQ4MDIzYTAyLAorCTB4NWMwMjgwMDAsIDB4NGEwMjNjMDYsIDB4MDAwMDAwMDYsIDB4NGEwMjNhMDMsCisJMHgwMDAwMDAwNywgMHg0OTdhM2EwNiwgMHg0OTdhM2EwNSwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDgzMzgwNTgwLCAweDAwMDAwMDEzLCAweDA0MDIwMDBiLAorCTB4NTkzMDA0MDMsIDB4NDgwM2M4NTcsIDB4ODIwMDBkODAsIDB4MDAwMDAwODUsCisJMHgwNDAwMDAyYiwgMHg4MjAwMGQ4MCwgMHgwMDAwMDA4YiwgMHgwNDAwMDAyOCwKKwkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDgzMzgwNTgwLCAweDAwMDAwMDI3LAorCTB4MDQwMjAwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4NGQyYzAwMDAsCisJMHg0ZDQwMDAwMCwgMHg1OTMyNTgwOCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwKKwkweDA0MDFmZWFiLCAweDVjMDI4MDAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMDA3ZjMsIDB4ODMzODA1ODAsCisJMHgwMDAwMDA4OSwgMHgwNDAwMDAwNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDA4YSwKKwkweDAyMDIwMDAwLCAweDAwMTA3OTc0LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDc5NzQsIDB4NTkzMDBhMDMsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwYSwgMHgwNDAwMDAwOSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYywKKwkweDA0MDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMGEsIDB4MWMwMWYwMDAsIDB4ODMzODA0ODAsIDB4MDAwMDAwOTMsCisJMHgwNDAyMTAwYywgMHg4MzM4MDQ4MCwgMHgwMDAwMDA4NSwgMHgwNDAwMTAwOSwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDg5LCAweDA0MDAwMDBhLCAweDgzMzgwNTgwLAorCTB4MDAwMDAwOGEsIDB4MDQwMDAwMjIsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCisJMHg0OTNiYzg1NywgMHg0OTMzYzg1NywgMHgwMjAxZjAwMCwgMHgwMDEwNzk3NCwKKwkweDQ5MzNjODU3LCAweDRjMzQwMDAwLCAweDQxMzA2ODAwLCAweDAyMDFmODAwLAorCTB4MDAwMjA3NWEsIDB4MDQwMDAwMTEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCisJMHg0YTAyNjQwMywgMHgwMDAwMDAxZSwgMHg1OWNjMGMwNywgMHg0ODA2NjQxOSwKKwkweDU5Y2MwYTA3LCAweDQ4MDY2MjE5LCAweDU4MzQwODA5LCAweDQ4MDY2MDA5LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDQsIDB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDcyMSwgMHg0MDM2NjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwNzdkLCAweDVjMDA2ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDkzM2M4NTcsIDB4NTkzMDA4MDksCisJMHg1ODA0MDIwMCwgMHg4YzAwMDUxYSwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0OGRmLCAweDA0MDAwMDFlLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLAorCTB4NTkzMDA0MTQsIDB4ODQwMDA1NTgsIDB4NDgwMjY0MTQsIDB4OGMwMDA1MTIsCisJMHgwNDAwMDAwNCwgMHg1OWE4MDAzOSwgMHg0ODAyNjIwNSwgMHgwNDAxZjAwNywKKwkweDU5YTgwODM5LCAweDU5YTgwMDM3LCAweDgwMDQwNDAwLCAweDgyMDAwNDAwLAorCTB4MDAwMDAwMGEsIDB4NDgwMjYyMDUsIDB4NTkzMDAwMDksIDB4ODIwMDBjMDAsCisJMHgwMDAwMDAxMSwgMHg1MDA0MDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNCwKKwkweDgyMDAwYzAwLCAweDAwMDAwMDAwLCAweDA0MDFmN2ZiLCAweDQ1MzAwODAwLAorCTB4NDk3YTYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg4MjEwMDUwMCwgMHhmZmZmZmVlZiwgMHgwNDAyMDAyMCwgMHg0ZDJjMDAwMCwKKwkweDQ5MzdjODU3LCAweDU5MzQwODExLCAweDgzMzQxNDAwLCAweDAwMDAwMDExLAorCTB4ODAwNDA5YzAsIDB4MDQwMDAwMGUsIDB4NDAwNDAwMDAsIDB4ODEzMDA1ODAsCisJMHgwNDAwMDAwNSwgMHg1ODA0MDgwMCwgMHg4MjA0MTQwMCwgMHgwMDAwMDAwMCwKKwkweDA0MDFmN2Y4LCAweDU5MzAwODAwLCAweDQ5N2E2MDAwLCAweDQ0MDQxMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA2ZmQsIDB4MDQwMWYwMDIsIDB4NDkzM2M4NTcsCisJMHg1OTJjMDAwMCwgMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKKwkweDVjMDI1ODAwLCAweDQ5MmU2MDA4LCAweDAyMDFmODAwLCAweDAwMDIwNmZkLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAwNiwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0YzM0MDAwMCwKKwkweDU5MzAwMDA5LCAweDgwMDAwMWMwLCAweDA0MDAwMDEwLCAweDgyMDA2YzAwLAorCTB4MDAwMDAwMTEsIDB4NTAzNDAwMDAsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDksCisJMHg4MTMwMDU4MCwgMHgwNDAwMDAwNSwgMHg1MDM0MDAwMCwgMHg4MjAwNmMwMCwKKwkweDAwMDAwMDAwLCAweDA0MDFmN2Y4LCAweDU5MzAwMDAwLCAweDQ0MDA2ODAwLAorCTB4NWMwMDY4MDAsIDB4MWMwMWYwMDAsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwNSwgMHgwNDAwMDdmYiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMSwKKwkweDA0MDAwN2Y4LCAweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwN2Y1LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDA3ZjIsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwKKwkweDRjNTgwMDAwLCAweDU5YTgxMDFkLCAweDU5Y2MxODA3LCAweDgyMGMxZDAwLAorCTB4MDBmZmZmZmYsIDB4ODAwYzAxMTAsIDB4ODAwODM1ODAsIDB4MDQwMjAwMTQsCisJMHg4M2NjMTQwMCwgMHgwMDAwMDAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKKwkweDU5MzAwMDA5LCAweDgyMDAxYzAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLAorCTB4MDAxMDg1NWEsIDB4MDQwMjAwMGEsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMGEsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg1OTMwMDAwOSwgMHg4MjAwMWMwMCwKKwkweDAwMDAwMDA4LCAweDAyMDFmODAwLCAweDAwMTA4NTVhLCAweDVjMDBiMDAwLAorCTB4NWMwMDE4MDAsIDB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDIxYiwgMHgwMjAxZjAwMCwgMHgwMDEwMWU0NSwKKwkweDQ5M2JjODU3LCAweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCisJMHg0YzU4MDAwMCwgMHg0YzU0MDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNiwKKwkweDQ1NzhhODAwLCAweDgwNTRhODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZkLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwNDYsIDB4MDQwMjAwMDQsIDB4NGEwMjVhMDQsCisJMHgwMDAwMDE0NCwgMHgwNDAxZjAwOCwgMHg0YTAyNWEwNCwgMHgwMDAwMDE0NiwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDQxLCAweDA0MDAwMDAzLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDEsIDB4NTljYzAwMDcsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsCisJMHg4MDAwMDExMCwgMHg1OWNjMTAwOCwgMHg4MjA4MTUwMCwgMHhmZjAwMDAwMCwKKwkweDgwMDgxNTQwLCAweDQ4MGE1ODBhLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ2LAorCTB4MDQwMjAwMDYsIDB4NTljYzAwMDcsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsCisJMHg0ODAyNTgwYiwgMHgwNDAxZjAwNSwgMHg1OWNjMDAwOCwgMHg4MjAwMDUwMCwKKwkweDAwZmZmZmZmLCAweDQ4MDI1ODBiLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ2LAorCTB4MDQwMjAwMDQsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMDksIDB4MDQwMWYwMDMsCisJMHg4M2NjMTQwMCwgMHgwMDAwMDAwZCwgMHg1MDA4MDAwMCwgMHg5YzAwMDFjMCwKKwkweDQ4MDI1ODBjLCAweDgwMDgxMDAwLCAweDUwMDgwMDAwLCAweDljMDAwMWMwLAorCTB4NDgwMjU4MGQsIDB4ODMzODA1ODAsIDB4MDAwMDAwNDYsIDB4MDQwMjAwMDgsCisJMHg1OWNjMDAwYiwgMHg5YzAwMDFjMCwgMHg0ODAyNTgwZSwgMHg1OWNjMDAwYywKKwkweDljMDAwMWMwLCAweDQ4MDI1ODBmLCAweDA0MDFmMDA3LCAweDU5Y2MwMDBmLAorCTB4OWMwMDAxYzAsIDB4NDgwMjU4MGUsIDB4NTljYzAwMTAsIDB4OWMwMDAxYzAsCisJMHg0ODAyNTgwZiwgMHg4MzM4MDU4MCwgMHgwMDAwMDA0NiwgMHgwNDAyMDAwNCwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDExLCAweDA0MDFmMDAzLCAweDgzY2MxNDAwLAorCTB4MDAwMDAwMTUsIDB4NDEyYzMwMDAsIDB4ODIxODM0MDAsIDB4MDAwMDAwMTAsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwNCwgMHg1MDA4MDAwMCwgMHg5YzAwMDFjMCwKKwkweDQ0MDAzMDAwLCAweDgwMDgxMDAwLCAweDgwMTgzMDAwLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZmEsIDB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDJkYSwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDQ5MmZjODU3LCAweDU5MzAwODA5LCAweDU4MDQwMjAwLCAweDhjMDAwNTFlLAorCTB4MDQwMDAwMDQsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NTgsIDB4NDgwMjVhMDgsCisJMHgxYzAxZjAwMCwgMHg1OWUwMTgwZiwgMHg1OTljMDQxMywgMHg4MDBjMTAwMCwKKwkweDgwMDgwNTgwLCAweDA0MDIwMDAyLCAweDQxNzgxMDAwLCAweDU5ZTAwMDEwLAorCTB4NTllMDA4MTAsIDB4ODAwNDBkODAsIDB4MDQwMjA3ZmQsIDB4ODAwODA1ODAsCisJMHgwNDAwMDAwYiwgMHg0YzA4MDAwMCwgMHg1OTljMDgxNCwgMHg1OTljMTAxNSwKKwkweDgwMGMwMGNjLCAweDgwMDQwYzAwLCAweDgyMDgxNDQwLCAweDAwMDAwMDAwLAorCTB4NWMwMDE4MDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NDgwM2M4NTcsCisJMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywgMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwKKwkweDU4MzgwODA3LCAweDgwMDQwOWMwLCAweDA0MDIwMDA1LCAweDQ5MmM3MDA4LAorCTB4NDkyYzcwMDcsIDB4MDIwMWYwMDAsIDB4MDAxMDA4NzUsIDB4NDkyYzA4MDAsCisJMHg0OTJjNzAwNywgMHgxYzAxZjAwMCwgMHg1OTMwMDIwMywgMHg0OTMzYzg1NywKKwkweDQ5MzdjODU3LCAweDQ5M2JjODU3LCAweDQ4MDNjODU3LCAweDgyMDAzNDgwLAorCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsCisJMHgwMDEwYTZkYSwgMHgwMDEwYTgyYywgMHgwMDEwYTZkYSwgMHgwMDEwYTZkYSwKKwkweDAwMTBhNmRhLCAweDAwMTBhNmRhLCAweDAwMTBhNmRhLCAweDAwMTBhNzkxLAorCTB4MDAxMGE2ZGMsIDB4MDAxMGE2ZGEsIDB4MDAxMGE2ZGEsIDB4MDAxMGE2ZGEsCisJMHgwMDEwYTZkYSwgMHgwMDEwYTZkYSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDRjLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4ZWMsIDB4MDQwMjAwMjAsIDB4NTlhODA4MjYsCisJMHg4MjA0MDUwMCwgMHgwMDAwMDAwOSwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwKKwkweDA0MDAwMDFhLCAweDhjMDQwZDEyLCAweDA0MDAwMDNkLCAweDU5Y2MwODA2LAorCTB4ODIwNDBkMDAsIDB4ZmYwMDAwMDAsIDB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsCisJMHgwNDAwMDAxZiwgMHg4MjA0MDU4MCwgMHg1MDAwMDAwMCwgMHgwNDAwMDAwNSwKKwkweDgyMDQwNTgwLCAweDUyMDAwMDAwLCAweDAyMDIwMDAwLCAweDAwMDIwNzdkLAorCTB4ODEzNjY5YzAsIDB4MDQwMDAwMDYsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDAxLCAweDA0MDFmMDE0LCAweDU5Y2MwODA2LCAweDgyMDQwZDAwLAorCTB4ZmYwMDAwMDAsIDB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsIDB4MDQwMDAwMDgsCisJMHg4MjA0MDU4MCwgMHg1MDAwMDAwMCwgMHgwNDAwMDAwNSwgMHg4MjA0MDU4MCwKKwkweDUyMDAwMDAwLCAweDAyMDIwMDAwLCAweDAwMDIwNzdkLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwMDksIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDksIDB4NGEwMjYyMWEsCisJMHgwMDAwMDAwMCwgMHg4MTM2NjljMCwgMHgwNDAyMDAwYiwgMHg1OWNjMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTA1YzlhLCAweDAyMDIwMDAwLCAweDAwMDIwNzdkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ1YTYsIDB4MDIwMjAwMDAsIDB4MDAwMjA3N2QsCisJMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDAyMDFmODAwLAorCTB4MDAxMDNiMjUsIDB4MDQwMDAwMjMsIDB4NTljYzA4MDYsIDB4NDgwN2M4NTcsCisJMHg4MjA0MGQwMCwgMHhmZjAwMDAwMCwgMHg4MjA0MDU4MCwgMHgwMzAwMDAwMCwKKwkweDA0MDAwMDMzLCAweDgyMDQwNTgwLCAweDIwMDAwMDAwLCAweDA0MDAwMDQxLAorCTB4ODIwNDA1ODAsIDB4MjEwMDAwMDAsIDB4MDQwMDAwNTIsIDB4ODIwNDA1ODAsCisJMHgyNDAwMDAwMCwgMHgwNDAwMDA0ZiwgMHg4MjA0MDU4MCwgMHg1MDAwMDAwMCwKKwkweDA0MDAwMDRjLCAweDgyMDQwNTgwLCAweDUyMDAwMDAwLCAweDA0MDAwMDQ5LAorCTB4ODIwNDA1ODAsIDB4MDUwMDAwMDAsIDB4MDQwMjAwMGQsIDB4NTljYzA4MDYsCisJMHg4MjA0MGQwMCwgMHhmZjAwMDAwMCwgMHg5YzA0MzFjMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDQ2LCAweDQyMDAyODAwLCAweDAwMDAwMDAxLCAweDA0MDFmY2YzLAorCTB4MDQwMWY5M2MsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDIwMDIwMDAsCisJMHgwMDAwMDA1MSwgMHgwMjAxZjgwMCwgMHgwMDEwN2E0YSwgMHg1OWNjMDAwMCwKKwkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDgyMDAwNTgwLCAweDAwZmZmZmZmLAorCTB4MDQwMDAwMDUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4NDkzYTY0MDMsCisJMHgxYzAxZjAwMCwgMHg1OTMyNTgxNywgMHg4MTJlNTljMCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwN2ZkLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDgxMzY2OWMwLAorCTB4MDQwMDA3ZGYsIDB4NTkzNDA0MDAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDdkOSwgMHgwNDAxZmM2ZiwKKwkweDA0MDIwN2Q3LCAweDRhMDI2NDAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDFhLAorCTB4MDAwMDAwMGUsIDB4NGEwMjYyMWEsIDB4MDAwMDE5MDAsIDB4MDQwMWY3YTIsCisJMHg4MTM2NjljMCwgMHgwNDAwMDAwYywgMHg1OTM0MGMwMCwgMHg4MjA0MDUwMCwKKwkweDAwMDAwMGZmLCAweDgyMDAwNTgwLCAweDAwMDAwMDA5LCAweDA0MDAwNzk0LAorCTB4ODIwNDA1MDAsIDB4MDAwMGZmMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDA3MDAsCisJMHgwNDAyMDdjMywgMHg0YTAyNjQwMywgMHgwMDAwMDAwOSwgMHg0YTAyNjQxYSwKKwkweDAwMDAwMDA5LCAweDRhMDI2MjFhLCAweDAwMDAxZTAwLCAweDA0MDFmNzhlLAorCTB4ODEzNjY5YzAsIDB4MDQwMDA3ZjgsIDB4NTkzNDBjMDAsIDB4ODIwNDA1MDAsCisJMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDcwMCwgMHgwNDAwMDdmMiwKKwkweDA0MDFmN2IzLCAweDRkMmMwMDAwLCAweDRjNTgwMDAwLCAweDRjNTAwMDAwLAorCTB4NGM1NDAwMDAsIDB4NDEzODUwMDAsIDB4ODMzODA1ODAsIDB4MDAwMDAwNTQsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTMyNTgwOCwgMHg1OTJjMGMwYiwKKwkweDgyMDQwZDAwLCAweDAwMDBlMDAwLCAweDgyMDQwNTgwLCAweDAwMDAyMDAwLAorCTB4MDQwMjAwNzYsIDB4NTkzMDA4MTcsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMTQsCisJMHg1ODA0MTQwNCwgMHg0MWNjYTgwMCwgMHg4MjA0YTQwMCwgMHgwMDAwMDAwNSwKKwkweDgyMDgwNDgwLCAweDAwMDAwMDEwLCAweDA0MDIxMDA0LCAweDQwMDhiMDAwLAorCTB4MDQwMWZiNmIsIDB4MDQwMWYwMGEsIDB4NDAwMDEwMDAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwZiwgMHgwNDAxZmI2NiwgMHg1ODA0MDgwMSwgMHg4MDA0MDljMCwKKwkweDA0MDIwN2YyLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDgxMzY2OWMwLAorCTB4MDQwMDAwNWUsIDB4NTkzNDRjMDAsIDB4NTkyYzBjMDksIDB4NDgwN2M4NTcsCisJMHg0ODI3Yzg1NywgMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDJhLCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LAorCTB4MDQwMDAwMzIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMjAsIDB4MDQwMDAwMzYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDA1MiwgMHgwNDAwMDA0MiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDUwLCAweDA0MDAwMDQyLCAweDgyMDQwNTgwLCAweDAwMDAwMDIxLAorCTB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMjQsIDB4MDQwMjAwNDMsCisJMHg4MjI0MDUwMCwgMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywKKwkweDA0MDAwMDA4LCAweDQyMDAwODAwLCAweDAwMDAwMDA5LCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NzEsIDB4NDIwMDUwMDAsIDB4MDAwMDAwMGMsIDB4MDQwMWYwMzcsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAzMSwgMHg0YTAyNTgwZCwgMHgwMDAwMDAwOSwKKwkweDU5MzQwNDAwLCAweDQ4MDI1ODBlLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4MDQwMWYwM2QsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDJiNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDYyYSwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDQyMDA1MDAwLAorCTB4MDAwMDAwMDgsIDB4MDQwMWYwMjEsIDB4NTljYzAwMDcsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWVlYywgMHgwNDAyMDAxZCwgMHgwMjAxZjgwMCwgMHgwMDEwNDJiNCwKKwkweDA0MDFmMDFhLCAweDgyMjQwNTAwLCAweDAwMDBmZjAwLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDcsIDB4MDQwMDA3ZGYsIDB4ODIyNDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAwMDdkYSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0NjhkLCAweDQyMDA1MDAwLCAweDAwMDAwMDBhLCAweDA0MDFmMDBiLAorCTB4NDIwMDUwMDAsIDB4MDAwMDAwMGUsIDB4MDQwMWYwMDMsIDB4NDIwMDUwMDAsCisJMHgwMDAwMDAxMCwgMHg4MjI0MDUwMCwgMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA3LCAweDA0MDAwN2NiLCAweDQ4MmE2NDAzLCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDEsIDB4NTkyYzAwMGQsIDB4NDgwMjYwMTEsIDB4NDk3YTYwMTMsCisJMHg1OWE4MDAzOCwgMHg0ODAyNjIwNiwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2NzJiLCAweDU5MzI1ODE3LCAweDgxMmU1OWMwLCAweDA0MDAwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4NDk3YTYwMTcsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHg1YzAwYjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDgzMzgwNTgwLCAweDAwMDAwMDEzLAorCTB4MDQwMjAwMjksIDB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwNTQsCisJMHgwNDAwMDAxZSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAxOCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDBlLCAweDA0MDAwMDE1LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDgsIDB4MDQwMDAwMGQsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsCisJMHgwNDAwMDAwYSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYSwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNWQ4LCAweDQyMDAwODAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLAorCTB4MDAxMDQ1NzEsIDB4MDQwMWYwMDksIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwNDAxZjAwNCwgMHg1OTM0MDIwMCwKKwkweDg0MDAwNTFhLCAweDQ4MDI2YTAwLCAweDRhMDI1YTA2LCAweDAwMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsCisJMHgwNDAxZjAyMiwgMHg4MzM4MDU4MCwgMHgwMDAwMDAyNywgMHgwNDAwMDAwZSwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDE0LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMzEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDBmZiwKKwkweDA0MDFmMDA5LCAweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMzEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAxMCwgMHg0OTQyNWEwNiwgMHg0ODA2NTgwZCwgMHg0ODBhNTgwZSwKKwkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmODAwLCAweDAwMTA0YzE5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwgMHg1ODM4MDgwNywgMHg4MDA0MDljMCwKKwkweDA0MDIwMDA1LCAweDQ5MmM3MDA4LCAweDQ5MmM3MDA3LCAweDAyMDFmMDAwLAorCTB4MDAxMDA4NzUsIDB4NDkyYzA4MDAsIDB4NDkyYzcwMDcsIDB4MWMwMWYwMDAsCisJMHg0ZDJjMDAwMCwgMHg0YzU4MDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKKwkweDQ5MzNjODU3LCAweDQ5MzdjODU3LCAweDU5Y2MwODA2LCAweDQ4MDdjODU3LAorCTB4ODIwNDBkMDAsIDB4ZmYwMDAwMDAsIDB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsCisJMHgwNDAwMDAwZCwgMHg4MjA0MDU4MCwgMHgwNTAwMDAwMCwgMHgwNDAwMDAwYSwKKwkweDgyMDQwNTgwLCAweDIxMDAwMDAwLCAweDA0MDAwMDMwLCAweDgyMDQwNTgwLAorCTB4MjQwMDAwMDAsIDB4MDQwMDAwMmQsIDB4ODIwNDA1ODAsIDB4MjAwMDAwMDAsCisJMHgwNDAyMDAyZiwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAyYywKKwkweDQ5MmZjODU3LCAweDQ5MmU2MDE3LCAweDU5YThiMDE2LCAweDgyNThiNDAwLAorCTB4MDAwMDAwMWIsIDB4ODI1OGI1MDAsIDB4ZmZmZmZmZmMsIDB4ODA1OGIxMDQsCisJMHg0ODVhNWMwNCwgMHg0MTJjNzgwMCwgMHg0MWNjYTAwMCwgMHg4MjU4MDQ4MCwKKwkweDAwMDAwMDEwLCAweDA0MDIxMDA1LCAweDgzMmNhYzAwLCAweDAwMDAwMDA1LAorCTB4MDQwMWZhNjMsIDB4MDQwMWYwMTUsIDB4NDA1ODA4MDAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwZiwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZmE1YywKKwkweDgyMDRiNDgwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LAorCTB4MDQwMDAwMDQsIDB4NDkyYzc4MDEsIDB4NDEyYzc4MDAsIDB4MDQwMWY3ZWMsCisJMHg1OTMyNTgxNywgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHg0OTdhNjAxNywKKwkweDgwMDAwNTgwLCAweDA0MDFmMDA2LCAweDU5MzQwMjAwLCAweDg0MDAwNTU0LAorCTB4NDgwMjZhMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHg1YzAwYjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDQ5MmZjODU3LCAweDRkMmMwMDAwLCAweDU5MzAwYTAzLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMDAwMzYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YzU1LCAweDRkZjAwMDAwLCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLAorCTB4MDQwMjAwMTYsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMDQsCisJMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwgMHgwNDAxZjAxNiwgMHg0MjAwMTAwMCwKKwkweDAwMTBiN2Y2LCAweDUwMDgxMDAwLCAweDU4MDgwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAxMDAsIDB4MDQwMDAwMDYsIDB4NTgwODAwMGMsIDB4ODEzMDA1ODAsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZjAwYSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZThlLCAweDA0MDIwMDIwLCAweDU5MzAwMDA0LCAweDhjMDAwNTIwLAorCTB4MDQwMDAwMDQsIDB4ODQwMDA1MjAsIDB4NDgwMjYwMDQsIDB4MDQwMWYwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjhkMywgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwKKwkweDAwMTA2YzRiLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDAyMDAwODAwLAorCTB4MDAxMDA1ZDgsIDB4NTkzMjU4MDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDUsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDEwNGMxOSwKKwkweDU5MzI1ODE3LCAweDgxMmU1OWMwLCAweDAyMDIwODAwLCAweDAwMTAwN2ZkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4ODAwMDA1ODAsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwKKwkweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDExLCAweDA0MDAwN2I4LAorCTB4MDQwMWY3ZjcsIDB4NGMwNDAwMDAsIDB4NTkzNDAyMDAsIDB4NDgwM2M4NTcsCisJMHg4YzAwMDUxYywgMHgwNDAwMDAwOSwgMHg1OWNjMDgwNSwgMHg1OTFjMDAxOSwKKwkweDQ4MDNjODU3LCAweDgwMDQwNTgwLCAweDA0MDAwMDA0LCAweDgwMDAwNTgwLAorCTB4NDgwM2M4NTYsIDB4MDQwMWYwMDMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg0YzBjMDAwMCwKKwkweDRjMTAwMDAwLCAweDQyMDAxODAwLCAweDAwMDBmZmZmLCAweDQyMDAyMDAwLAorCTB4MDAwMDAwMDQsIDB4MDQwMWYwMTAsIDB4NGMwMDAwMDAsIDB4NGMwYzAwMDAsCisJMHg0YzEwMDAwMCwgMHg1OTMwMjAwOSwgMHg1ODEwMWMwMywgMHg0MjAwMjAwMCwKKwkweDAwMDAwMDA0LCAweDA0MDFmMDA4LCAweDRjMDAwMDAwLCAweDRjMGMwMDAwLAorCTB4NGMxMDAwMDAsIDB4NTkzMDIwMDksIDB4NTgxMDFjMDMsIDB4NDIwMDIwMDAsCisJMHgwMDAwMDAwNywgMHg0ODBmYzg1NywgMHg0ODEzYzg1NywgMHg0ODFiYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTAzYWFlLCAweDVjMDAyMDAwLCAweDVjMDAxODAwLAorCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4ODMzODA1ODAsIDB4MDAwMDAwOTIsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDQ5M2E2NDAzLCAweDAyMDFmMDAwLAorCTB4MDAwMjA3MjEsIDB4NGQ0MDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsCisJMHgwNDAwMDAwOCwgMHg1OWE4MDAwNSwgMHg4NDAwMDU0NCwgMHg0ODAzNTAwNSwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDJhLCAweDAyMDFmODAwLCAweDAwMTBhNDQ5LAorCTB4NWMwMjgwMDAsIDB4MWMwMWYwMDAsIDB4NTlhODAwMjYsIDB4OGMwMDA1MDgsCisJMHgwNDAwMDAwNSwgMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDAwMiwKKwkweDFjMDFmMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NTkzMDA0MjAsIDB4ODQwMDA1NDAsIDB4NDgwMjY0MjAsIDB4MWMwMWYwMDAsCisJMHg0ODE3Yzg1NywgMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwgMHg4YzE0MmQyYSwKKwkweDA0MDAwMDA0LCAweDU5ODgwMGI4LCAweDgwMDAwMDAwLCAweDQ4MDMxMGI4LAorCTB4OGMxNDJkMmUsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYjksIDB4ODAwMDAwMDAsCisJMHg0ODAzMTBiOSwgMHg4YzE0MmQyYywgMHgwNDAwMDAxMywgMHg0MDE0MDAwMCwKKwkweDgyMDAwNTAwLCAweDAwMDcwMDAwLCAweDgyMDAwZDgwLCAweDAwMDMwMDAwLAorCTB4MDQwMDAwMGQsIDB4ODIwMDBkODAsIDB4MDAwNDAwMDAsIDB4MDQwMDAwMGEsCisJMHg4MjAwMGQ4MCwgMHgwMDA1MDAwMCwgMHgwNDAwMDAwNywgMHg1OTg4MDAwNSwKKwkweDgwMDAwMDAwLCAweDQ4MDMxMDA1LCAweDU5ODgwMGJhLCAweDgwMDAwMDAwLAorCTB4NDgwMzEwYmEsIDB4NWMwMDA4MDAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg0ODE3Yzg1NywgMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwgMHg4YzE0MmQyYSwKKwkweDA0MDAwMDA0LCAweDU5ODgwMGJiLCAweDgwMDAwMDAwLCAweDQ4MDMxMGJiLAorCTB4OGMxNDJkMmUsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYmMsIDB4ODAwMDAwMDAsCisJMHg0ODAzMTBiYywgMHg4YzE0MmQyYywgMHgwNDAwMDAxMywgMHg0MDE0MDAwMCwKKwkweDgyMDAwNTAwLCAweDAwMDcwMDAwLCAweDgyMDAwZDgwLCAweDAwMDMwMDAwLAorCTB4MDQwMDAwMGQsIDB4ODIwMDBkODAsIDB4MDAwNDAwMDAsIDB4MDQwMDAwMGEsCisJMHg4MjAwMGQ4MCwgMHgwMDA1MDAwMCwgMHgwNDAwMDAwNywgMHg1OTg4MDAwNSwKKwkweDgwMDAwMDAwLCAweDQ4MDMxMDA1LCAweDU5ODgwMGJkLCAweDgwMDAwMDAwLAorCTB4NDgwMzEwYmQsIDB4NWMwMDA4MDAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg0YzAwMDAwMCwgMHg1OTg4MDAwMSwgMHg4MDAwMDAwMCwgMHg0ODAzYzg1NywKKwkweDQ4MDMxMDAxLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDRjMDAwMDAwLAorCTB4NTk4ODAwMDAsIDB4ODAwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NDgwMzEwMDAsCisJMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg1OTg4MDAwMiwKKwkweDgwMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ4MDMxMDAyLCAweDVjMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsIDB4NGMwMDAwMDAsIDB4OGMwNDBkMmMsCisJMHgwNDAwMDAwNCwgMHg1OTg4MDBhNiwgMHg4MDAwMDAwMCwgMHg0ODAzMTBhNiwKKwkweDhjMDQwZDJhLCAweDA0MDAwMDA0LCAweDU5ODgwMGE3LCAweDgwMDAwMDAwLAorCTB4NDgwMzEwYTcsIDB4OGMwNDBkMjgsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYTgsCisJMHg4MDAwMDAwMCwgMHg0ODAzMTBhOCwgMHg4YzA0MGQyNiwgMHgwNDAwMDAwNCwKKwkweDU5ODgwMGE5LCAweDgwMDAwMDAwLCAweDQ4MDMxMGE5LCAweDhjMDQwZDI0LAorCTB4MDQwMDAwMDQsIDB4NTk4ODAwYWEsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYWEsCisJMHg4YzA0MGQyMiwgMHgwNDAwMDAwNCwgMHg1OTg4MDBhYiwgMHg4MDAwMDAwMCwKKwkweDQ4MDMxMGFiLCAweDhjMDQwZDIwLCAweDA0MDAwMDA0LCAweDU5ODgwMGFjLAorCTB4ODAwMDAwMDAsIDB4NDgwMzEwYWMsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg0ODA3Yzg1NywgMHg0YzAwMDAwMCwgMHg1OTg4MDBhZCwgMHg4MDAwMDAwMCwKKwkweDQ4MDMxMGFkLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LAorCTB4NGMwMDAwMDAsIDB4OGMwNDBkMWMsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYWUsCisJMHg4MDAwMDAwMCwgMHg0ODAzMTBhZSwgMHg4YzA0MGQxYSwgMHgwNDAwMDAwNCwKKwkweDU5ODgwMGFmLCAweDgwMDAwMDAwLCAweDQ4MDMxMGFmLCAweDVjMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsIDB4NGMwMDAwMDAsIDB4OGMwNDBkMTgsCisJMHgwNDAwMDAwNCwgMHg1OTg4MDBiMCwgMHg4MDAwMDAwMCwgMHg0ODAzMTBiMCwKKwkweDhjMDQwZDE2LCAweDA0MDAwMDA0LCAweDU5ODgwMGIxLCAweDgwMDAwMDAwLAorCTB4NDgwMzEwYjEsIDB4OGMwNDBkMTQsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYjIsCisJMHg4MDAwMDAwMCwgMHg0ODAzMTBiMiwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDdjODU3LCAweDRjMDAwMDAwLCAweDhjMDQwZDEwLCAweDA0MDAwMDA0LAorCTB4NTk4ODAwYjMsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYjMsIDB4OGMwNDBkMGMsCisJMHgwNDAwMDAwNCwgMHg1OTg4MDBiNCwgMHg4MDAwMDAwMCwgMHg0ODAzMTBiNCwKKwkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDRjMDAwMDAwLAorCTB4OGMwNDBkMDgsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYjUsIDB4ODAwMDAwMDAsCisJMHg0ODAzMTBiNSwgMHg4YzA0MGQwNCwgMHgwNDAwMDAwNCwgMHg1OTg4MDBiNiwKKwkweDgwMDAwMDAwLCAweDQ4MDMxMGI2LCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAorCTB4NDgwN2M4NTYsIDB4NGMwMDAwMDAsIDB4NTk4ODAwN2YsIDB4ODAwMDAwMDAsCisJMHg0ODAzMTA3ZiwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NywKKwkweDRjMDQwMDAwLCAweDUwMDAwODAwLCAweDgwMDQwODAwLCAweDQ4MDdjODU3LAorCTB4NDQwNDAwMDAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NDgwZmM4NTcsCisJMHg0YzAwMDAwMCwgMHg4MjBjMDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAwNCwKKwkweDQyMDAwMDAwLCAweDAwMTBiODE5LCAweDA0MDFmMDE0LCAweDgyMGMwNTgwLAorCTB4MDAwMDEwMDEsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MWEsCisJMHgwNDAxZjAwZSwgMHg4MjBjMDU4MCwgMHgwMDAwMTAwMiwgMHgwNDAyMDAwNCwKKwkweDQyMDAwMDAwLCAweDAwMTBiODFiLCAweDA0MDFmMDA4LCAweDgyMGMwYzgwLAorCTB4MDAwMDIwMWMsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwYzA1MDAsCisJMHgwMDAwMDAxZiwgMHgwYzAxZjgwNCwgMHgwNDAxZmZkZCwgMHg1YzAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDAwMTBhYTg5LCAweDAwMTBhYThjLCAweDAwMTBhYThmLAorCTB4MDAxMGFhOTIsIDB4MDAxMGFhOTUsIDB4MDAxMGFhOTgsIDB4MDAxMGFhOWIsCisJMHgwMDEwYWE5ZSwgMHgwMDEwYWFhMSwgMHgwMDEwYWFhNCwgMHgwMDEwYWFhNywKKwkweDAwMTBhYWFhLCAweDAwMTBhYWFkLCAweDAwMTBhYWIwLCAweDAwMTBhYWIzLAorCTB4MDAxMGFhYjYsIDB4MDAxMGFhYjksIDB4MDAxMGFhYmMsIDB4MDAxMGFhYmYsCisJMHgwMDEwYWFjMiwgMHgwMDEwYWFjNSwgMHgwMDEwYWFjOCwgMHgwMDEwYWFjYiwKKwkweDAwMTBhYWNlLCAweDAwMTBhYWQxLCAweDAwMTBhYWQ0LCAweDAwMTBhYWQ3LAorCTB4MDAxMGFhZGEsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MWMsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgxZCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODFlLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODFmLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MjAsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgyMSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODIyLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODIzLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MjQsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgyNSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODI2LCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODI3LAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MjgsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgyOSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODJhLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODJiLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MmMsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgyZCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODJlLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODJmLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MzAsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgzMSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODMyLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODMzLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MzQsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjgzNSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiODM2LCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODM3LAorCTB4MWMwMWYwMDAsIDB4NDgwZmM4NTcsIDB4NGMwMDAwMDAsIDB4ODIwYzA1ODAsCisJMHgwMDAwMDAwMSwgMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgwZSwKKwkweDA0MDFmMDEyLCAweDgyMGMwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDA0LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4MGYsIDB4MDQwMWYwMGMsIDB4ODIwYzA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgxMCwKKwkweDA0MDFmMDA2LCAweDgyMGMwNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDA0LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4MTEsIDB4MDQwMWZmNTEsIDB4NWMwMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg1OWE4MDAyNiwgMHg0ODAzYzg1NywKKwkweDhjMDAwNTAyLCAweDA0MDAwMDEwLCAweDhjMDAwNTA2LCAweDA0MDAwMDA0LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI4NDEsIDB4MDQwMWYwMTIsIDB4OGMwMDA1MGEsCisJMHgwNDAwMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg0MCwgMHgwNDAxZjAwZCwKKwkweDhjMDAwNTA4LCAweDA0MDAwMDA0LCAweDQyMDAwMDAwLCAweDAwMTBiODQzLAorCTB4MDQwMWYwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMDAwMDYsCisJMHg4YzAwMDUwNiwgMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg0MiwKKwkweDA0MDFmZjMzLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDgwNThiMWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTQ1MGE4MDAsIDB4ODA1MGEwMDAsCisJMHg4MDU0YTgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHgxYzAxZjAwMCwKKwkweDgwNThiMWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDQ0NTBhODAwLAorCTB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmQsIDB4MWMwMWYwMDAsCisJMHg4MDU4YjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1MDUwMDAwMCwKKwkweDljMDAwMWMwLCAweDQ0MDBhODAwLCAweDgwNTBhMDAwLCAweDgwNTRhODAwLAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmEsIDB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsCisJMHg1OWE4MDAwOCwgMHg4YzAwMDUxYywgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKKwkweDAwMDAwMDAxLCAweDAwMDAwMDAyLCAweDAwMDAwMDA0LCAweDAwMDAwMDA4LAorCTB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwODAsCisJMHgwMDAwMDEwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDQwMCwgMHgwMDAwMDgwMCwKKwkweDAwMDAxMDAwLCAweDAwMDAyMDAwLCAweDAwMDA0MDAwLCAweDAwMDA4MDAwLAorCTB4MDAwMTAwMDAsIDB4YTVmMmIzYWMKK307CisKKyNpZmRlZiBVTklRVUVfRldfTkFNRQordWludDMyX3QgZncyNDAwX2xlbmd0aDAxID0gMHgwMDAwYWI0YSA7CisjZWxzZQordWludDMyX3QgcmlzY19jb2RlX2xlbmd0aDAxID0gMHgwMDAwYWI0YSA7CisjZW5kaWYKKworCisjaWZkZWYgVU5JUVVFX0ZXX05BTUUKK3VpbnQzMl90IGZ3MjQwMF9hZGRyMDIgPSAweDAwMTBlMDAwICA7CisjZWxzZQordWludDMyX3QgcmlzY19jb2RlX2FkZHIwMiA9IDB4MDAxMGUwMDAgOworI2VuZGlmCisKKyNpZmRlZiBVTklRVUVfRldfTkFNRQordWludDMyX3QgZncyNDAwX2NvZGUwMltdID0geworI2Vsc2UKK3VpbnQzMl90IHJpc2NfY29kZTAyW10gPSB7CisjZW5kaWYKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMTBlMDAwLCAweDAwMDAxNGZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMDA4YzAsCisJMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHgwMjAyMDAwMCwgMHgwMDEwMDJlMywKKwkweDQyMDAwMDAwLCAweDAwMTBiNGJiLCAweDUwMDAwMDAwLCAweDgwMDAwMWMwLAorCTB4MDQwMjA5NTYsIDB4MDQwMWY5MjMsIDB4MDQwMWZiZTMsIDB4MDQwMWZiNWMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDcxOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDU3YiwKKwkweDA0MDFmN2YwLCAweDU5YjgwMGVhLCAweDgyMDAwZDAwLCAweGYwMDAwMDM4LAorCTB4MDIwMjAwMDAsIDB4MDAxMDBhN2EsIDB4OGMwMDA1MTAsIDB4MDIwMDAwMDAsCisJMHgwMDEwMGE3OSwgMHg1OWJhNjBlMCwgMHg4MTMwMDE4MiwgMHgwNDAyMTA0ZSwKKwkweDA0MDAyMDMwLCAweDg1MzI2NTNlLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjAwMjgsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwNCwgMHgwNDAyMDAyNCwgMHg1OTMyNTgwOCwgMHg1OTMwMDQwMiwKKwkweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDkwMDAwMWMwLCAweDQ4MDI1ODA2LAorCTB4NDk3YTU4MDcsIDB4NDk3YTVjMDksIDB4NTkzMDAwMWYsIDB4ODAwMDA1NDAsCisJMHgwMjAyMDgwMCwgMHgwMDEwMGQ1NiwgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwKKwkweDA0MDIwMDEwLCAweDA0MDFmYTg4LCAweDU5MzI2ODA5LCAweDAyMDFmODAwLAorCTB4MDAwMjA3N2QsIDB4NTkzNDAwMGYsIDB4NTkzNDE0MGIsIDB4ODAwODEwNDAsCisJMHgwNDAwMTAwMiwgMHg0ODBhNmMwYiwgMHg4MDAwMDU0MCwgMHgwNDAyMGExMCwKKwkweDU5YjgwMGVhLCAweDhjMDAwNTEwLCAweDA0MDIwN2Q3LCAweDFjMDFmMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZmNjAsIDB4MDQwMDA3ZWYsIDB4MDIwMWYwMDAsCisJMHgwMDEwMGE2NSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA1NSwgMHgwNDAxZjAyNywKKwkweDgzMzI2NTAwLCAweDNmZmZmZmZmLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjAwMTUsIDB4NTkzMjU4MDgsIDB4NTkzMjY4MDksCisJMHg1OTMwMTQwMiwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg5MDA4MTFjMCwKKwkweDQ4MGE1ODA2LCAweDQ5N2E1YzA5LCAweDQ5N2E1ODA3LCAweDA0MDFmYTYyLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsIDB4NTkzNDAwMGYsIDB4NTkzNDE0MGIsCisJMHg4MDA4MTA0MCwgMHgwNDAwMTAwMiwgMHg0ODBhNmMwYiwgMHg4MDAwMDU0MCwKKwkweDA0MDIwOWViLCAweDA0MDFmN2RiLCAweDQyMDI3MDAwLCAweDAwMDAwMDU0LAorCTB4MDQwMWYwMGEsIDB4ODMzMDA1MDAsIDB4NjAwMDAwMDAsIDB4MDIwMDAwMDAsCisJMHgwMDEwMGE2OCwgMHg4MTMyNjU4MCwgMHg4MDAwMDEzYSwgMHg4MjAwMDQwMCwKKwkweDAwMTAwYTgwLCAweDUwMDI3MDAwLCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDIsIDB4MDIwMDAwMDAsIDB4MDAxMDBhNjUsIDB4NTkzMDAwMDQsCisJMHg4YzAwMDUzZSwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKKwkweDA0MDFmN2M0LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLCAweDA0MDAwN2ZiLAorCTB4MDIwMWYwMDAsIDB4MDAxMDBhNjUsIDB4NTkzMjU4MDgsIDB4NDEyYzcwMDAsCisJMHg1ODM4MGEwNCwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMGMwMCwKKwkweDAwMTAxMGJkLCAweDUwMDQ0MDAwLCAweDBjMDFmMDAxLCAweDAwMTAwZGQ5LAorCTB4MDAxMDBkZDksIDB4MDAwMjAwOWYsIDB4MDAxMDBkZDksIDB4MDAxMDBkZDksCisJMHgwMDEwMGRkOSwgMHgwMDEwMGRkOSwgMHgwMDEwMGRkOSwgMHgwMDAyMDBhZiwKKwkweDAwMTAwZGVkLCAweDAwMTAwZGQ5LCAweDAwMTAwZGQ5LCAweDAwMTAwZGRiLAorCTB4MDAxMDBkZDksIDB4MDAxMDBkZDksIDB4MDAxMDBkZDksIDB4NTgzODA0MGEsCisJMHg4YzAwMDUwMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1MDIwMDAwMCwKKwkweDgwMzg3YzAwLCAweDU4M2MxMDAyLCAweDU4M2MyODAwLCAweDU4M2MyMDAxLAorCTB4NTgzODBhMDcsIDB4NTgzODMwMGYsIDB4NTkzMDM4MDcsIDB4NTgzODRjMDgsCisJMHg1ODM4MDAwZCwgMHg0ODAyNjAxMiwgMHgwNDAxZjAxMCwgMHg1ODM4MDIwYSwKKwkweDhjMDAwNTAyLCAweDAyMDAwMDAwLCAweDAwMTAwZGQ5LCAweDUwMjAwMDAwLAorCTB4ODAzODdjMDAsIDB4NTgzYzI4MDAsIDB4NTgzYzIwMDEsIDB4NTgzYzEwMDIsCisJMHg1OTJjMGEwNywgMHg1OTJjNGMwOCwgMHg1OTJjMzAwZiwgMHg1OTMwMzgwNywKKwkweDQ5N2E2MDEyLCAweDQ5N2E2MDEzLCAweDQ4MTY2MDBlLCAweDQ4MTI2MDBmLAorCTB4NDgwYTYwMTAsIDB4NDgxYTYwMTEsIDB4ODAwNDA4NDAsIDB4NDgwNjYwMGQsCisJMHgwMjAyMDAwMCwgMHgwMDEwMGUxYSwgMHg4NDFjM2Q0MCwgMHg0ODFlNjAwNywKKwkweDFjMDFmMDAwLCAweDQxNzg3ODAwLCAweDU5MzI1ODA4LCAweDU5MmMwYzBhLAorCTB4OGMwNDBkMDIsIDB4MDIwMDAwMDAsIDB4MDAxMDBmOGMsIDB4NTkyYzAwMGQsCisJMHg1OTJjMTAwZiwgMHg1OTJjMGEwNCwgMHg0ODBhNjAxMSwgMHg0ODAyNjAxMiwKKwkweDQ4MDI2MDEzLCAweDQxMmMzMDAwLCAweDgyMDQwNTAwLCAweDAwMDAwMDBmLAorCTB4ODIwMDA0MDAsIDB4MDAxMDEwYmQsIDB4NTAwMDM4MDAsIDB4NTAxYzAwMDAsCisJMHg0MDFjMTAwMCwgMHg1OTJjMWEwNywgMHg0ODAyNjAwYSwgMHg0ODFhNjAwYiwKKwkweDQ4MGE2MDBjLCAweDQ4MGU2MDBkLCAweDg0M2M3ZDRhLCAweDQwM2MxMDAwLAorCTB4MWMwMWYwMDAsIDB4NDE3ODc4MDAsIDB4NDk3YTYwMTIsIDB4NTkyYzBhMDQsCisJMHg0MTJjMzAwMCwgMHg1OTJjMWEwNywgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwKKwkweDgyMDAwNDAwLCAweDAwMTAxMGJkLCAweDUwMDA0MDAwLCAweDUwMjAwMDAwLAorCTB4NDAyMDEwMDAsIDB4NDgwMjYwMGEsIDB4NDgxYTYwMGIsIDB4NDgwYTYwMGMsCisJMHg0ODBlNjAwZCwgMHg4MDAwMDU4MCwgMHg0ODNlNjAwNCwgMHgxYzAxZjAwMCwKKwkweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzI5LAorCTB4MDQwMWYwMDUsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDQwMWZmMTYsCisJMHgwNDAxZjAwMSwgMHg1YzAzZTAwMCwgMHg1YzAwMDAwMCwgMHgxODAxZjAwMCwKKwkweDQyMDNlMDAwLCAweGIwMTAwMDAwLCAweDQxZmMwMDAwLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMTEsIDB4MGMwMWYwMDEsIDB4MDAwMjAxMmEsIDB4MDAwMjA2OTcsCisJMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwKKwkweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLAorCTB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsCisJMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDEwMTE1YSwgMHgwMDAyMDEyYywKKwkweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLAorCTB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsCisJMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwKKwkweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA2OTcsIDB4MDIwMWYwMDAsIDB4MDAxMDExNWEsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjRjMSwgMHg1MDAwMDAwMCwgMHg4YzAwMDUwNCwKKwkweDA0MDAwMDE0LCAweDQyMDAwMDAwLCAweDAwMTBiNGMxLCAweDUwMDAwMDAwLAorCTB4OGMwMDA1MDIsIDB4MDQwMjAwMDIsIDB4MWMwMWYwMDAsIDB4NGRmMDAwMDAsCisJMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg0MjAzNDAwMCwgMHgwMDEwYjRhNCwKKwkweDU5YTAwMDFkLCAweDU5YTFkODFlLCAweDg0MDAwNTAyLCAweDQ4MDM0MDFkLAorCTB4NThlYzAwMDksIDB4MDgwMWY4MDAsIDB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsCisJMHgwNDAyNzAwMiwgMHgwNDAyNjAwMiwgMHgxYzAxZjAwMCwgMHg0ZGYwMDAwMCwKKwkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LAorCTB4MDQwMDAwMTAsIDB4NDEyZGQ4MDAsIDB4NDhlZmM4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwM2IyOCwgMHg0MjAzNDAwMCwgMHgwMDEwYjRhNCwgMHg0OWExZDgwYiwKKwkweDQ4ZWY0MDFlLCAweDU5YTAwMDFkLCAweDg0MDAwNTQ0LCAweDQ4MDM0MDFkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDIyMTQsIDB4MDIwMWY4MDAsIDB4MDAxMDIyMzMsCisJMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHg0ZGEwMDAwMCwgMHg0ZGYwMDAwMCwKKwkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDA0MDA2MDUxLCAweDQwMDAxMDAwLAorCTB4NDIwMzQwMDAsIDB4MDAxMGI0YTQsIDB4NTlhMDE4MTgsIDB4ODAwYzE5YzAsCisJMHgwNDAyMDAwOCwgMHg1OWEwMzgxYiwgMHg4MDFjMzljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNWQ4LCAweDU5YTAwNDFjLCAweDgwMWMzYzAwLCAweDA0MDFmMDBjLAorCTB4NTlhMDA0MTksIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDIsIDB4NDgwMzQ0MTksCisJMHg4MjAwMGM4MCwgMHgwMDAwMDAxMywgMHgwNDAwMTAwMywgMHg0OTdiNDQxOSwKKwkweDQxNzgwMDAwLCAweDU5YTAzODE2LCAweDgwMWMzYzAwLCAweDgwMDgxMDQwLAorCTB4NDgwYjQwMTcsIDB4NTgxYzAyMDAsIDB4NDgwM2MwMjEsIDB4NTgxYzA0MDEsCisJMHg0ODAzYzAyMiwgMHg1ODFjMDIwMSwgMHg0ODAzYzAyMywgMHg1ODFjMDQwMCwKKwkweDQ4MDNjMDIwLCAweDkwMDAwMWMwLCAweDgyMDAwNTQwLCAweDAwMDAwMDEyLAorCTB4NDgwM2MwMTEsIDB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsCisJMHg0YTAzYzAxNywgMHgwMDAwMDAwMiwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKKwkweDgwMGMxOWMwLCAweDA0MDAwMDA3LCAweDgwMGMxODQwLCAweDQ4MGY0MDE4LAorCTB4MDQwMjAwMWYsIDB4NDk3YjQ0MTksIDB4NDk3YjQyMTksIDB4MDQwMWYwMWMsCisJMHg4MDA4MTFjMCwgMHgwNDAyMDAwYiwgMHg0ZDJjMDAwMCwgMHg1OWEyNTgxYiwKKwkweDAyMDFmODAwLCAweDAwMTAwN2Y0LCAweDVjMDI1ODAwLCAweDQ5N2I0MDFiLAorCTB4NDk3YjQwMWEsIDB4NDk3YjQ0MWMsIDB4NDk3YjQyMWMsIDB4MDQwMWYwMTAsCisJMHg1OWEwMDQxYywgMHg4MjAwMDQwMCwgMHgwMDAwMDAwMiwgMHg4MjAwMGM4MCwKKwkweDAwMDAwMDEyLCAweDQ4MDM0NDFjLCAweDA0MDAxMDA5LCAweDRkMmMwMDAwLAorCTB4NTlhMjU4MWIsIDB4NTkyYzM4MTMsIDB4NDgxZjQwMWIsIDB4NDk3YjQ0MWMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDdmNCwgMHg1YzAyNTgwMCwgMHg1YzAzZTAwMCwKKwkweDVjMDM0MDAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDA1LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDMsIDB4MDIwMjAwMDAsIDB4MDAxMDQzMTUsIDB4NTkzNDA0MDAsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDYwNiwgMHgwMjAyMDAwMCwgMHgwMDEwNDJlNiwKKwkweDU5MzQwMDBkLCAweDgwMDI3ZDQwLCAweDAyMDIwMDAwLCAweDAwMTA0MzIxLAorCTB4MDQwMWY4MDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NTkzNDAwMGYsCisJMHg1OTM0MTIwMywgMHg4MDA4MDU0MCwgMHgwNDAyMDA2ZiwgMHg1OTM0MDIwYiwKKwkweDU5MzQxNDBiLCAweDgwMDgwNDgwLCAweDA0MDIxMDZiLCAweDAyMDFmODAwLAorCTB4MDAwMjA3NWEsIDB4MDQwMDAwNjQsIDB4ODAwODEwMDAsIDB4NTkyYzA0MDYsCisJMHg0ODBhNmMwYiwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAzLCAweDRhMDI2NDAzLCAweDAwMDAwMDQwLCAweDgwMDAwMGMyLAorCTB4ODAwMDE4YzQsIDB4ODAwYzA0MDAsIDB4NDgwMjYyMDYsIDB4NTkyYzA4MDgsCisJMHg1OTJjMTgwOSwgMHg1OTJjMDIwYSwgMHg0ODA2NjAxNywgMHg0ODBlNjAxOCwKKwkweDhjMDAwNTAyLCAweDA0MDAwMDMwLCAweDRhMDI2MjAzLCAweDAwMDAwMDA0LAorCTB4NTkyYzAyMDcsIDB4ODAwMDAwNDAsIDB4MDQwMjAwMjAsIDB4NTlhODAwMDUsCisJMHg4YzAwMDUxNCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA1NSwgMHgwNDAyMDAwMywKKwkweDQyMDAwMDAwLCAweDAwMDAwMDMzLCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLAorCTB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAxOCwgMHgwNDAyMDAxMSwgMHg1OTJjMTgwZiwgMHg1OTMwMDAwNywKKwkweDgyMDAwNTQwLCAweDAwMDAwMDkxLCAweDQ4MGU2MDExLCAweDQ4MDI2MDA3LAorCTB4NDIwMDAwMDAsIDB4ODAwMDAwMDQsIDB4NDgwMjYwMDQsIDB4NTliYzAwZWEsCisJMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwgMHg4MzMwMDQwMCwgMHgyMDAwMDAwMCwKKwkweDQ4MDM3OGUxLCAweDFjMDFmMDAwLCAweDA0MDFmZTc4LCAweDU5MzAwMDA3LAorCTB4ODQwMDA1NGUsIDB4NDgwMjYwMDcsIDB4NTkyYzFhMDQsIDB4ODIwYzFkMDAsCisJMHgwMDAwMDBmZiwgMHg4MjBjMDU4MCwgMHgwMDAwMDA0OCwgMHgwNDAwMDAxNywKKwkweDA0MDFmN2VjLCAweDhjMDAwNTAwLCAweDA0MDIwZWNiLCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDIsIDB4NTlhODA4MDUsIDB4ODIwNDA1MDAsIDB4MDAwMDA2MDAsCisJMHgwNDAyMDAxMiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAzMCwgMHg4MDAwMDA0MCwKKwkweDA0MDIwN2ZmLCAweDU5MmMxYTA0LCAweDgyMGMxZDAwLCAweDAwMDAwMGZmLAorCTB4ODIwYzA1ODAsIDB4MDAwMDAwMTgsIDB4MDQwMDA3ZGEsIDB4ODIwYzA1ODAsCisJMHgwMDAwMDA0OCwgMHgwNDAyMDdkNywgMHg0MjAwMDgwMCwgMHg4MDAwMDgwNCwKKwkweDAyMDFmMDAwLCAweDAwMTA2NzIxLCAweDhjMDQwZDEyLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMTAsIDB4MDQwMjA3ZWUsIDB4NDIwMDAwMDAsIDB4MDAwMDAwNTEsCisJMHgwNDAxZjdlYiwgMHg4MDA4MTFjMCwgMHgwNDAyMDAwMywgMHg0YTAyNmEwMywKKwkweDAwMDAwMDAxLCAweDU5MzQwMDEwLCAweDQ5MmU2ODEwLCAweDgwMDAwZDQwLAorCTB4MDQwMjAwMDMsIDB4NDkyZTY4MGYsIDB4MWMwMWYwMDAsIDB4NDkyYzA4MDAsCisJMHgxYzAxZjAwMCwgMHg4MzQ0MGM4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMTAwOSwKKwkweDgzNDQwNDAwLCAweDAwMTBhYzAwLCAweDUwMDAwMDAwLCAweDgwMDAwNTQwLAorCTB4MDQwMDAwMDQsIDB4NDAwMjY4MDAsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg1OTM0MDIwMywKKwkweDgwMDAwNTQwLCAweDA0MDIwMDRiLCAweDRkMzAwMDAwLCAweDRkMmMwMDAwLAorCTB4NTkzNDAwMGYsIDB4ODAwMjVkNDAsIDB4MDQwMDAwNDQsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDc1YSwgMHgwNDAwMDAzZiwgMHg1OTJjMDAwMCwgMHg0ODAyNjgwZiwKKwkweDgwMDAwNTQwLCAweDA0MDIwMDAyLCAweDQ4MDI2ODEwLCAweDU5MmMyYTA0LAorCTB4ODAwODEwMDAsIDB4NDgwYTZjMGIsIDB4NDkzNjYwMDksIDB4NDkyZTYwMDgsCisJMHg4MjE0MmQwMCwgMHgwMDAwMDBmZiwgMHg4MjE0MDU4MCwgMHgwMDAwMDAxMiwKKwkweDA0MDAwMDM1LCAweDRhMDI2NDA2LCAweDAwMDAwMDAzLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwNDAsIDB4NTkyYzA0MDYsIDB4ODAwMDAwYzIsIDB4ODAwMDE4YzQsCisJMHg4MDBjMDQwMCwgMHg0ODAyNjIwNiwgMHg1OTJjMDgwOCwgMHg1OTJjMTgwOSwKKwkweDU5MmMwMjBhLCAweDQ4MDY2MDE3LCAweDQ4MGU2MDE4LCAweDhjMDAwNTAyLAorCTB4MDIwMDAwMDAsIDB4MDAxMDQ3NGQsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsCisJMHg1OTJjMDIwNywgMHg4MDAwMDA0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNDc0MCwKKwkweDgyMTQwNTgwLCAweDAwMDAwMDE4LCAweDAyMDIwMDAwLCAweDAwMTA0NzQwLAorCTB4NTkyYzE4MGYsIDB4NTkzMDAwMDcsIDB4ODIwMDA1NDAsIDB4MDAwMDAwOTEsCisJMHg0ODBlNjAxMSwgMHg0ODAyNjAwNywgMHg0MjAwMDAwMCwgMHg4MDAwMDAwNCwKKwkweDQ4MDI2MDA0LCAweDU5YmMwMGVhLCAweDhjMDAwNTE2LCAweDA0MDIwN2ZlLAorCTB4ODMzMDA0MDAsIDB4MjAwMDAwMDAsIDB4NDgwMzc4ZTEsIDB4NTkzNDAyMGIsCisJMHg1OTM0MTQwYiwgMHg4MDA4MDQ4MCwgMHgwNDAwMTdiZSwgMHgwNDAxZjAwMywKKwkweDRhMDI2YTAzLCAweDAwMDAwMDAxLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4NDk3YTU4MDAsIDB4NDkzMjU4MDksIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwNiwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHgwNDAxZjgwMiwKKwkweDA0MDFmN2VmLCAweDU5YTgwMDIxLCAweDgwMDAwMWMwLCAweDAyMDIwMDAwLAorCTB4MDAxMDQ3NmYsIDB4NTlhODAwMDUsIDB4OGMwMDA1MDQsIDB4MDIwMjAwMDAsCisJMHgwMDEwNDc2YiwgMHg1OTM0MDIwMCwgMHg4YzAwMDUxOCwgMHgwMjAyMDAwMCwKKwkweDAwMTA0NzY3LCAweDU5MmMwYTBjLCAweDQ4MDY2MjAyLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDAsIDB4OGMwMDA1MDgsIDB4MDIwMjAwMDAsIDB4MDAxMDQ3NjMsCisJMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwNDAxZmJkZiwgMHg1YzAyNzgwMCwKKwkweDFjMDFmMDAwLCAweDU5MmMwNDA0LCAweDhjMDAwNTFlLCAweDAyMDIwMDAwLAorCTB4MDAxMDRjZTQsIDB4NTk5ODAwMjIsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMTcsCisJMHg1OTJjMGEwNiwgMHg1OTJjMDQwOSwgMHg4MDA0MDU0MCwgMHgwNDAyMDAxMywKKwkweDAyMDFmMDAwLCAweDAwMTA0Y2ZhLCAweDU5MmMwNDA0LCAweDhjMDAwNTFlLAorCTB4MDIwMjAwMDAsIDB4MDAxMDRjZjMsIDB4NTk5ODAwMjIsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwYSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAyMDAwNywKKwkweDAyMDFmMDAwLCAweDAwMTA0Y2ZhLCAweDU5MmMwNDA0LCAweDhjMDAwNTFlLAorCTB4MDIwMjAwMDAsIDB4MDAxMDRkY2EsIDB4NTk5ODAwMjYsIDB4NDk3YTU4MDAsCisJMHg4MDAwMDU0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNGUxZCwgMHg1OWQ4MDEwNSwKKwkweDgyMDAwZDAwLCAweDAwMDE4NzgwLCAweDAyMDIwMDAwLCAweDAwMTA0ZWRiLAorCTB4ODAwMDAxMDYsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsIDB4MGMwMWYwMDEsCisJMHgwMDAyMDJmMCwgMHgwMDEwNGUxZCwgMHgwMDAyMDJmNiwgMHgwMDAyMDM0MSwKKwkweDU5MmMwMDAxLCAweDQ5MmZiMTA3LCAweDgwMDAwZDQwLCAweDAyMDIwMDAwLAorCTB4MDAxMDRkZGIsIDB4MWMwMWYwMDAsIDB4NTkyYzAwMDEsIDB4NDkyZmIxMDcsCisJMHg4MDAwMGQ0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNGRlOCwgMHg1OWRhNTkwOCwKKwkweDgzNWMwNDgwLCAweDAwMDAwMDIwLCAweDA0MDAxMDJjLCAweDA0MDJiMDM0LAorCTB4NDkyZmIwMDcsIDB4MDQwMGU3ZmEsIDB4NTlkODAxMDUsIDB4ODIwMDA1MDAsCisJMHgwMDAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNGVkYiwgMHgwNDAwNjAxZiwKKwkweDU5ZDgwMTBhLCAweDU5ZDgwOTBhLCAweDgwMDQwNTgwLCAweDA0MDIwN2ZkLAorCTB4ODAwNDA4ZTAsIDB4NTk5YzEwMTcsIDB4OGMwODE1MDgsIDB4MDQwMjAwMjgsCisJMHg4MjA0MGQ0MCwgMHgwMDAwMDAxMywgMHg1OTk4MDAyYiwgMHg0ODA3YzAxMSwKKwkweDg0MDAwNTAwLCAweDQ4MDMzMDJiLCAweDU5ZTAwMDE3LCAweDhjMDAwNTA4LAorCTB4MDQwMjAwMDQsIDB4NDIwM2UwMDAsIDB4MzAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg0YTAzYzAxNywgMHgwMDAwMDAwMywgMHg4MjA0MDUwMCwgMHgwMDAwMDBmZiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDFkLCAweDA0MDIwN2Y3LCAweDRhMDNjMDE3LAorCTB4MDAwMDAwMGQsIDB4MDQwMWY3ZjQsIDB4NTk5ODA4MmIsIDB4ODQwNDBkNDAsCisJMHg0ODA3MzAyYiwgMHgxYzAxZjAwMCwgMHg0OTZhNTgwMCwgMHg0MTJlZDAwMCwKKwkweDgxNWViODAwLCAweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLAorCTB4NDgwMzkwMDAsIDB4MDQwMGU3Y2EsIDB4MDQwMWY3ZDAsIDB4MDQwMmY3ZjcsCisJMHg0OTJmYTgwNywgMHgwNDAwZTdjNiwgMHgwNDAxZjdjYywgMHg1OWUwMDAwZiwKKwkweDU5ZTAxMDBmLCAweDgwMDgxNTgwLCAweDA0MDIwN2ZkLCAweDgxMjgxNTgwLAorCTB4MDQwMDA3ZDQsIDB4NDAwMjUwMDAsIDB4ODIwNDBkNDAsIDB4MDAwMDAwMWQsCisJMHgwNDAxZjdkMiwgMHg1OWQ4MDkwOCwgMHg0NTY4MDgwMCwgMHg0MDA2ZDAwMCwKKwkweDgxNWViODAwLCAweDA0MDBlN2ZjLCAweDU5YzgwMDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsIDB4MDIwMDYwMDAsIDB4MDAxMDRkZjgsCisJMHg1OWQ4MDEwYSwgMHg1OWQ4MDkwYSwgMHg4MDA0MGQ4MCwgMHgwNDAyMDdmZCwKKwkweDkwMDAwMWMwLCAweDgyMDAwNTQwLCAweDAwMDAwMDEzLCAweDQ4MDNjMDExLAorCTB4NTk5ODAwMmIsIDB4ODQwMDA1MDAsIDB4NDgwMzMwMmIsIDB4NTllMDAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAwMDAwMywgMHg0YTAzYzAxNywgMHgwMDAwMDAwMywKKwkweDQyMDNlMDAwLCAweDMwMDAwMDAxLCAweDU5ZDgwMTA1LCAweDgyMDAwNTAwLAorCTB4MDAwMTg3ODAsIDB4MDIwMjAwMDAsIDB4MDAxMDRlZGIsIDB4MDIwMmQwMDAsCisJMHgwMDEwNGRmZCwgMHg1OTJjMDAwMSwgMHg0OTJmYjEwNywgMHg4MDAwMGQ0MCwKKwkweDAyMDIwMDAwLCAweDAwMTA0ZTEwLCAweDFjMDFmMDAwLCAweDU5OTgwMDIwLAorCTB4MGMwMWYwMDEsIDB4MDAwMjAzNzAsIDB4MDAwMjAzNzEsIDB4MDAxMDRlODgsCisJMHgxYzAxZjAwMCwgMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKKwkweDA0MDI2ODFlLCAweDA0MDA2MDA0LCAweDU5OWMwMDE3LCAweDhjMDAwNTA4LAorCTB4MDQwMjA4NjUsIDB4NTk5ODAwMjksIDB4ODAwMjVkNDAsIDB4MDQwMDAwMGEsCisJMHgwNDAyZDAwYiwgMHg1OTk4MDAyNiwgMHg4MDAwMDA0MCwgMHg0ODAzMzAyNiwKKwkweDU5MmMwMDAwLCAweDQ5MmZiMTA3LCAweDQ4MDMzMDI5LCAweDA0MDIwMDAyLAorCTB4NDgwMzMwMjgsIDB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsIDB4NTlkODAxMDUsCisJMHg4MjAwMDUwMCwgMHgwMDAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNGVkYiwKKwkweDQyMDAwMDAwLCAweDAwMTBiODU1LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAorCTB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsIDB4NTk5ODAwMmIsIDB4OGMwMDA1MDAsCisJMHgwNDAyMDAzYiwgMHgwNDAwZTAwNywgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKKwkweDAwMDE4NzgwLCAweDAyMDIwMDAwLCAweDAwMTA0ZWRiLCAweDFjMDFmMDAwLAorCTB4NTlkYTU5MDgsIDB4ODM1YzBjODAsIDB4MDAwMDAwMjAsIDB4MDQwMDEwMDMsCisJMHgwNDAwYjAyOSwgMHgwNDAwZjAyYiwgMHg0OTZhNTgwMCwgMHg0MTJlZDAwMCwKKwkweDgxNWViODAwLCAweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLAorCTB4NDgwMzkwMDAsIDB4MDQwMGU3ZjMsIDB4NTlkODAxMGEsIDB4NTlkODA5MGEsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwgMHg4MDA0MDhlMCwgMHg1OTljMTAxNywKKwkweDhjMDgxNTA4LCAweDA0MDIwMDIyLCAweDgyMDQwZDQwLCAweDAwMDAwMDEzLAorCTB4NDgwN2MwMTEsIDB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMGEsCisJMHg0YTAzYzAxNywgMHgwMDAwMDAwMywgMHg4MjA0MDUwMCwgMHgwMDAwMDBmZiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDFkLCAweDA0MDIwMDAzLCAweDRhMDNjMDE3LAorCTB4MDAwMDAwMGQsIDB4NDIwM2UwMDAsIDB4MzAwMDAwMDEsIDB4NTlkODAxMDUsCisJMHg4MjAwMDUwMCwgMHgwMDAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNGVkYiwKKwkweDFjMDFmMDAwLCAweDQ5MmZiMDA3LCAweDA0MDBlN2QyLCAweDA0MDFmN2RmLAorCTB4NDkyZmE4MDcsIDB4MDQwMGU3Y2YsIDB4MDQwMWY3ZGMsIDB4ODQwMDA1MDAsCisJMHg0ODAzMzAyYiwgMHgwNDAwZTdjYiwgMHgwNDAxZjdkOCwgMHg1OWUwMDAwZiwKKwkweDU5ZTAxMDBmLCAweDgwMDgxNTgwLCAweDA0MDIwN2ZkLCAweDgxMjgxNTgwLAorCTB4MDQwMDA3ZGEsIDB4NDAwMjUwMDAsIDB4ODIwNDBkNDAsIDB4MDAwMDAwMWQsCisJMHgwNDAxZjdkOCwgMHg1OWUwMDAwZiwgMHg1OWUwMTAwZiwgMHg4MDA4MGQ4MCwKKwkweDA0MDIwN2ZkLCAweDgxMjgwNTgwLCAweDA0MDIwMDAyLCAweDFjMDFmMDAwLAorCTB4NDAwYTUwMDAsIDB4OTAwODExYzAsIDB4ODIwODE1NDAsIDB4MDAwMDAwMWMsCisJMHg0ODBiYzAxMSwgMHg1OWUwMDAxNywgMHg4YzAwMDUwOCwgMHgwNDAwMDAwMywKKwkweDRhMDNjMDE3LCAweDAwMDAwMDBjLCAweDQyMDNlMDAwLCAweDMwMDAwMDAxLAorCTB4MWMwMWYwMDAsIDB4NDE3MDAwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDU0MjAsCisJMHgwMDAyMDNmYywgMHgwMDEwNTQyMCwgMHgwMDEwNTQyMSwgMHgwMDEwNTQxZSwKKwkweDAwMTA1NDFlLCAweDAwMTA1NDFlLCAweDAwMTA1NDFlLCAweDAwMTA1OGIwLAorCTB4MDQwMTAwMzcsIDB4NTk5ODAwMDYsIDB4ODAwMDA1NDAsIDB4MDQwMjAwM2MsCisJMHgwNDAyYzAxYywgMHg0MjAyZjgwMCwgMHgwMDAwMDAxMCwgMHg0ZGYwMDAwMCwKKwkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDQ5ZGIzMDA1LCAweDU5ZGE1ODA4LAorCTB4NTkyYzAyMDQsIDB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBmZiwgMHg4MjAwMGM4MCwgMHgwMDAwMDA3OSwgMHgwNDAyMTAzNiwKKwkweDBjMDFmODM5LCAweDVjMDNlMDAwLCAweDgxN2VmODQwLCAweDA0MDAwMDA5LAorCTB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMDYsIDB4ODM3MDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwNDAyMDAxMCwgMHgwNDAxMDAxYiwgMHgwNDAwYzdlOCwKKwkweDA0MDBmOTRhLCAweDA0MDBiMTM0LCAweDU5ZDQwMDA1LCAweDgyMDAwNTAwLAorCTB4NDMwMTg3ODAsIDB4MDIwMjAwMDAsIDB4MDAxMDU4M2YsIDB4NTlkODAwMDUsCisJMHg4MjAwMDUwMCwgMHg0MzAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNTg0NiwKKwkweDFjMDFmMDAwLCAweDgzNzAwNTgwLCAweDAwMDAwMDAzLCAweDAyMDAwODAwLAorCTB4MDAxMDU0MjEsIDB4ODM3MDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjA3ZWQsCisJMHgwNDAxMDAwNSwgMHgwNDAwYzdkMiwgMHgwNDAxZjdlYSwgMHg0MjAyZjgwMCwKKwkweDAwMDAwMDEwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLAorCTB4NDlkNzMwMDUsIDB4NTlkNjU4MDgsIDB4MDQwMWY3Y2UsIDB4NGRmMDAwMDAsCisJMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg0MDAyNTgwMCwgMHg1OTJjMDIwNCwKKwkweDQ5N2IzMDA1LCAweDQ5N2IzMDA2LCAweDQyMDJmODAwLCAweDAwMDAwMDEwLAorCTB4MDQwMWY3YzcsIDB4MDIwMWY4MDAsIDB4MDAxMDU0OTEsIDB4NWMwM2UwMDAsCisJMHgwNDAxZjdkNCwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NTI3LCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0YTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTU1MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMDIwNGVmLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU2YjQsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDAyMDRjMiwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NGM5LCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1N2QzLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU4MWUsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTRiYiwgMHgwMDEwNTQ5MSwgMHgwMDEwNTc5NywgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU3NjUsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTc2NSwgMHgwMDEwNTg3MiwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU3MjUsCisJMHgwMDEwNTg1NSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTg2NSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKKwkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAorCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCisJMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHg1OTJjMDIwNCwgMHg4MDAwMDExMCwKKwkweDAyMDAwMDAwLCAweDAwMTA1NDk5LCAweDgwMDAwMDQwLCAweDA0MDAwMDA5LAorCTB4NDgwMzMwMDIsIDB4NDkyZjMwMDMsIDB4NDkyZjMwMDQsIDB4NGEwMzMwMDgsCisJMHgwMDAyMDRkMCwgMHg0MjAyZTAwMCwgMHgwMDAwMDAwMywgMHgxYzAxZjAwMCwKKwkweDU5MmMwNDA2LCAweDgyMDAwYzgwLCAweDAwMDAxOTlhLCAweDAyMDIxMDAwLAorCTB4MDAxMDU0YTksIDB4NTlhODAwMjEsIDB4ODAwMDA1NDAsIDB4MDIwMjAwMDAsCisJMHgwMDEwNTRkNywgMHg1OTJlOGEwNiwgMHg4MzQ0MGM4MCwgMHgwMDAwMDdmMCwKKwkweDAyMDIxMDAwLCAweDAwMTA1NGE5LCAweDgzNDQwNDAwLCAweDAwMTBhYzAwLAorCTB4NTAwMDAwMDAsIDB4ODAwMjZkNDAsIDB4MDIwMDAwMDAsIDB4MDAxMDU0ZGIsCisJMHg1OTM0MDAwMiwgMHg1OTJjMDgxMCwgMHg4MDA0MDU4MCwgMHg4MjAwMDUwMCwKKwkweDAwZmZmZmZmLCAweDAyMDIwMDAwLCAweDAwMTA1NGE5LCAweDA0MDFmY2NmLAorCTB4MDIwMjAwMDAsIDB4MDAxMDU0ZGUsIDB4MWMwMWYwMDAsIDB4NTkyYzAyMDQsCisJMHg4MDAwMDExMCwgMHgwMjAwMDAwMCwgMHgwMDEwNTQ5OSwgMHg4MDAwMDA0MCwKKwkweDA0MDIwMDBiLCAweDU5MmMwNDBhLCAweDhjMDAwNTA0LCAweDA0MDAwMDEwLAorCTB4NTkyYzAyMDcsIDB4ODIwMDBjODAsIDB4MDAwMDEwMDEsIDB4MDIwMjEwMDAsCisJMHgwMDEwNTRhOSwgMHgwMjAxZjAwMCwgMHgwMDEwNTg4YSwgMHg0ODAzMzAwMiwKKwkweDQ5MmYzMDAzLCAweDQ5MmYzMDA0LCAweDRhMDMzMDA4LCAweDAwMDIwNTA3LAorCTB4NDIwMmUwMDAsIDB4MDAwMDAwMDMsIDB4MWMwMWYwMDAsIDB4NTkyYzA0MDYsCisJMHg4MjAwMGM4MCwgMHgwMDAwMTk5YSwgMHgwMjAyMTAwMCwgMHgwMDEwNTRhOSwKKwkweDU5MmU4YTA2LCAweDQxN2E3ODAwLCAweDA0MDFmZDM3LCAweDAyMDIwMDAwLAorCTB4MDAxMDU2NTgsIDB4NTkzNDAwMDIsIDB4NTkyYzA4MDgsIDB4ODAwNDA1ODAsCisJMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHgwMjAyMDAwMCwgMHgwMDEwNTRhOSwKKwkweDQ5N2E1ODA4LCAweDU5MmU2MDA5LCAweDgzMzAwNTgwLCAweGZmZmZmZmZmLAorCTB4MDIwMDAwMDAsIDB4MDAxMDU2MTgsIDB4ODMzMDA0ODAsIDB4MDAxMGQxYzAsCisJMHgwMjAwMTAwMCwgMHgwMDEwNTY3NSwgMHg1OWE4MDAwYiwgMHg4MTMwMDQ4MCwKKwkweDAyMDIxMDAwLCAweDAwMTA1Njc1LCAweDU5MmMyNDBhLCAweDQ5MzY2MDA5LAorCTB4OGMxMDI1MWMsIDB4MDIwMjAwMDAsIDB4MDAxMDU2MDYsIDB4NTlhODAwNjgsCisJMHg4YzAwMDUxMCwgMHgwMjAyMDAwMCwgMHgwMDEwNTY4ZSwgMHg1OWE4MDgyMSwKKwkweDgwMDQwOWMwLCAweDAyMDIwMDAwLCAweDAwMTA1NWVjLCAweDU5YTgwODA1LAorCTB4OGMwNDBkMDQsIDB4MDIwMjAwMDAsIDB4MDAxMDU2N2YsIDB4NTkzNDAyMDAsCisJMHg4YzAwMDUxOCwgMHgwMjAyMDAwMCwgMHgwMDEwNTY3MCwgMHg1OTMwMGMwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDAyMDIwMDAwLCAweDAwMTA1NjEwLAorCTB4NTkzMDA0MTQsIDB4OGMwMDA1MTYsIDB4MDIwMjAwMDAsIDB4MDAxMDU2N2EsCisJMHg4YzEwMjUwOCwgMHgwMjAyMDAwMCwgMHgwMDEwYTViOCwgMHg1OTMwMDgwOCwKKwkweDRhMDI1YTA2LCAweDAwMDAwMDAwLCAweDgwMDQwOWMwLCAweDAyMDIwMDAwLAorCTB4MDAxMDU1ZTcsIDB4NTkyYzBhMGMsIDB4NDgwNjYyMDIsIDB4NDkyZTYwMDgsCisJMHgwNDAxZjE0ZCwgMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKKwkweDA0MDJiMDBiLCAweDgzNWMwNDgwLCAweDAwMDAwMDIwLCAweDA0MDAxMDBkLAorCTB4ODE1ZWI4NDAsIDB4NDE2YTU4MDAsIDB4NTkyZWQwMDAsIDB4NDkyZmIwMDcsCisJMHg0OTdhNTgwMCwgMHg0OTdhNTgwMSwgMHgwNDAwYjdmNywgMHg1OWQ4MDAwNSwKKwkweDgyMDAwNTAwLCAweDQzMDE4NzgwLCAweDAyMDIwMDAwLCAweDAwMTA1ODQ2LAorCTB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsIDB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsCisJMHg1MDAwMDAwMCwgMHgwNDAyZjAwYiwgMHg4MzVjMDQ4MCwgMHgwMDAwMDAyMCwKKwkweDA0MDAxMDBkLCAweDgxNWViODQwLCAweDQxNmE1ODAwLCAweDU5MmVkMDAwLAorCTB4NDkyZmE4MDcsIDB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4MDQwMGY3ZjcsCisJMHg1OWQ0MDAwNSwgMHg4MjAwMDUwMCwgMHg0MzAxODc4MCwgMHgwMjAyMDAwMCwKKwkweDAwMTA1ODNmLCAweDVjMDNlMDAwLCAweDFjMDFmMDAwLCAweDRkZjAwMDAwLAorCTB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4NTk5NDAwMjQsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDExMiwgMHg0YzAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwKKwkweDUwMDAwMDAwLCAweDgyMDAwNDgwLCAweDI0MzIwMDAxLCAweDA0MDIwMDE1LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwNjQsIDB4ODAwNDA4NDAsIDB4MDQwMDAwMDcsCisJMHg0YTAzMDAwMCwgMHgwMDAwMDAwMSwgMHg0MDAwMDAwMCwgMHg1OTgwMDAwMCwKKwkweDhjMDAwNTAwLCAweDA0MDAwN2Y5LCAweDA0MDAwMDA4LCAweDQyMDAwODAwLAorCTB4MDAwMDdhMDEsIDB4NTAwNDAwMDAsIDB4OGMwMDA1MTAsIDB4MDQwMDAwMDMsCisJMHg4NDAwMDUxMCwgMHg0NDAwMDgwMCwgMHg0YTAzMDAwMCwgMHgwMDAwMDAwMCwKKwkweDU5ZTAwMDAyLCAweDhjMDAwNTFlLCAweDA0MDIwMDFiLCAweDQyMDAwMDAwLAorCTB4MDAwMDEwMDAsIDB4NTAwMDAwMDAsIDB4ODIwMDA0ODAsIDB4MjQzMjAwMDIsCisJMHgwNDAyMDAxNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDA2NCwgMHg4MDA0MDg0MCwKKwkweDA0MDAwMDA3LCAweDRhMDMwMDAwLCAweDAwMDAwMDAxLCAweDQwMDAwMDAwLAorCTB4NTk4MDAwMDAsIDB4OGMwMDA1MDAsIDB4MDQwMDA3ZjksIDB4MDQwMDAwMDgsCisJMHg0MjAwMDgwMCwgMHgwMDAwN2ExNywgMHg1MDA0MDAwMCwgMHg4YzAwMDUwZSwKKwkweDA0MDIwMDAzLCAweDg0MDAwNTRlLCAweDQ0MDAwODAwLCAweDRhMDMwMDAwLAorCTB4MDAwMDAwMDAsIDB4NWMwMDAwMDAsIDB4NTk5NDc4MWEsIDB4NDgwMzI4MjUsCisJMHg4MDNjMDQ4MCwgMHgwNDAwMTAwNCwgMHgwNDAwMDAwMywgMHg0ODAzMjgxYSwKKwkweDA0MDFmMDIyLCAweDQxNzg3ODAwLCAweDgwM2M3ODAwLCAweDgyMDAwNDAwLAorCTB4MDAwMDAzZTgsIDB4MDQwMDI3ZmQsIDB4NDgwMzI4MWEsIDB4NTlhODAwMjQsCisJMHg4MDNjMTQwMCwgMHg0ODBiNTAyNCwgMHg4MDNjMDA0MCwgMHgwNDAwMDAwMiwKKwkweDQ4M2ZjODU3LCAweDU5ZTQwODUyLCAweDU5YTgwMDI1LCAweDgwMDQwNTgwLAorCTB4MDQwMDAwMDQsIDB4NDgwYmM4NTcsIDB4NTllNDAwNTIsIDB4NDgwMzUwMjUsCisJMHg1OTk0MDAyNiwgMHg4MDNjMDQwMCwgMHg0ODAzMjgyNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MDIxLCAweDU5OTQwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLAorCTB4MDQwMjAwMDYsIDB4NTk5NDAwMjYsIDB4NDgwMzI4MjcsIDB4NDk3YjI4MjYsCisJMHg0YTAzMjgwMCwgMHgwMDAwMDAwMSwgMHg0YzBjMDAwMCwgMHg1OTk0MDAwNywKKwkweDgwMDAwZDQwLCAweDA0MDAwMDFkLCAweDU5OTQxMDA2LCAweDU5OTQwMDI1LAorCTB4ODAwODFjODAsIDB4MDQwMDEwMDQsIDB4MDQwMDAwMDMsIDB4NDgwZjI4MDYsCisJMHgwNDAxZjAxNiwgMHg4MDA0MDg0MCwgMHg0ODA3MjgwNywgMHg4MjA0MDU4MCwKKwkweDAwMDAwM2U4LCAweDA0MDIwMDA3LCAweDRjMDQwMDAwLCAweDRjMGMwMDAwLAorCTB4NTk5NDAwMDgsIDB4MDgwMWY4MDAsIDB4NWMwMDE4MDAsIDB4NWMwMDA4MDAsCisJMHg4MDA0MDljMCwgMHgwNDAyMDAwNCwgMHg1OTk0MDAwOCwgMHgwODAxZjgwMCwKKwkweDA0MDFmMDA2LCAweDQwMGMwMDAwLCAweDgyMGMxYzAwLCAweDAwMDAwMDBhLAorCTB4MDQwMDI3ZWQsIDB4NDgwZjI4MDYsIDB4NWMwMDE4MDAsIDB4NGQxODAwMDAsCisJMHg1OWM0MDAwOCwgMHg4YzAwMDUzNCwgMHgwNDAyMDAyNSwgMHg0MTdhMzAwMCwKKwkweDgzOTQ3YzAwLCAweDAwMDAwMDA5LCAweDU4M2MwMDAxLCAweDgwMDAwZDQwLAorCTB4MDQwMjAwMDgsIDB4ODIzYzdjMDAsIDB4MDAwMDAwMDMsIDB4ODExYTMwMDAsCisJMHg4MzE4MDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAyMDdmOCwgMHgwNDAxZjAxOCwKKwkweDU4M2MxMDAwLCAweDU5OTQwMDI1LCAweDgwMDgwNDgwLCAweDA0MDAxMDA1LAorCTB4MDQwMDAwMDQsIDB4NDgwMDc4MDAsIDB4ODAwMDAwNDAsIDB4MDQwMjEwMTAsCisJMHg4MDA0MDg0MCwgMHg0ODA0NzgwMSwgMHgwNDAwMDAwOCwgMHg4MjAwMDQwMCwKKwkweDAwMDAwMDBhLCAweDQ4MDA3ODAwLCAweDA0MDAyN2ZhLCAweDgyMDQwNTAwLAorCTB4MDAwMDAwN2YsIDB4MDQwMWY3ZTgsIDB4NTgzYzAwMDIsIDB4NGMzYzAwMDAsCisJMHgwODAxZjgwMCwgMHg1YzAwNzgwMCwgMHgwNDAxZjdlMywgMHg1YzAyMzAwMCwKKwkweDU5OTQwMDE5LCAweDgwMDAxNTQwLCAweDA0MDAwMDA4LCAweDA0MDAyMDA3LAorCTB4NTk5NDAwMjUsIDB4ODAwODA0ODAsIDB4NDk3YjI4MTksIDB4MDQwMDEwMDMsCisJMHgwNDAwMDAwMiwgMHg0ODAzMjgxOSwgMHg1OTk0MDAwNCwgMHg4MDAwMGQ0MCwKKwkweDA0MDAwMDJhLCAweDRjMDQwMDAwLCAweDU5OTQwMDFjLCAweDgwMDAwZDQwLAorCTB4MDQwMDAwMTMsIDB4NTk5NDEwMWIsIDB4NTk5NDAwMjUsIDB4ODAwODA0ODAsCisJMHgwNDAwMTAwNSwgMHgwNDAwMDAwNCwgMHg0ODAzMjgxYiwgMHg4MDAwMDA0MCwKKwkweDA0MDIxMDBiLCAweDgwMDQwODQwLCAweDQ4MDcyODFjLCAweDA0MDIwMDA0LAorCTB4NTk5NDAwMWQsIDB4MDgwMWY4MDAsIDB4MDQwMWYwMDUsIDB4ODIwMDA0MDAsCisJMHgwMDAwMDAwYSwgMHg0ODAzMjgxYiwgMHgwNDAwMjdmNywgMHg1YzAwMDgwMCwKKwkweDU5OTQxMDAzLCAweDU5OTQwMDI1LCAweDgwMDgwNDgwLCAweDA0MDAxMDA1LAorCTB4MDQwMDAwMDQsIDB4NDgwMzI4MDMsIDB4ODAwMDAwNDAsIDB4MDQwMjEwMGIsCisJMHg4MDA0MDg0MCwgMHg0ODA3MjgwNCwgMHgwNDAyMDAwNCwgMHg1OTk0MDAwNSwKKwkweDA4MDFmODAwLCAweDA0MDFmMDA1LCAweDgyMDAwNDAwLCAweDAwMDAwMDBhLAorCTB4NDgwMzI4MDMsIDB4MDQwMDI3ZjcsIDB4NTk5NDAwMWYsIDB4ODAwMDBkNDAsCisJMHgwNDAwMDAxMywgMHg1OTk0MTAxZSwgMHg1OTk0MDAyNSwgMHg4MDA4MDQ4MCwKKwkweDA0MDAxMDA1LCAweDA0MDAwMDA0LCAweDQ4MDMyODFlLCAweDgwMDAwMDQwLAorCTB4MDQwMjEwMGIsIDB4ODAwNDA4NDAsIDB4NDgwNzI4MWYsIDB4MDQwMjAwMDQsCisJMHg1OTk0MDAyMCwgMHgwODAxZjgwMCwgMHgwNDAxZjAwNSwgMHg4MjAwMDQwMCwKKwkweDAwMDAwMDAxLCAweDQ4MDMyODFlLCAweDA0MDAyN2Y3LCAweDU5OTQwMDIyLAorCTB4ODAwMDBkNDAsIDB4MDQwMDAwMTMsIDB4NTk5NDEwMjEsIDB4NTk5NDAwMjUsCisJMHg4MDA4MDQ4MCwgMHgwNDAwMTAwNSwgMHgwNDAwMDAwNCwgMHg0ODAzMjgyMSwKKwkweDgwMDAwMDQwLCAweDA0MDIxMDBiLCAweDgwMDQwODQwLCAweDQ4MDcyODIyLAorCTB4MDQwMjAwMDQsIDB4NTk5NDAwMjMsIDB4MDgwMWY4MDAsIDB4MDQwMWYwMDUsCisJMHg4MjAwMDQwMCwgMHgwMDAwMDAwYSwgMHg0ODAzMjgyMSwgMHgwNDAwMjdmNywKKwkweDU5OTQwODI0LCAweDU5OTQwMDI1LCAweDgwMDQwNDgwLCAweDAyMDAxODAwLAorCTB4MDAxMDA1ZDgsIDB4NDgwMzI4MjQsIDB4NTk5NDAwMDAsIDB4MGMwMWYwMDEsCisJMHgwMDEwNWZiNSwgMHgwMDEwNWZiNywgMHgwMDEwNWZkZCwgMHg1OTk0MDAyNCwKKwkweDgwMDAwMDAwLCAweDQ4MDMyODI0LCAweDQyMDNlMDAwLCAweDcwMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4NTkyYzA0MDYsIDB4ODAwMDAwYzIsIDB4ODAwMDA4YzQsCisJMHg4MDA0MGMwMCwgMHg1OTJjMDQwYSwgMHg0ODA2NjIwNiwgMHg4MjAwMGQwMCwKKwkweDAwMDAwMDAzLCAweDAyMDAwMDAwLCAweDAwMTA2MTVlLCAweDhjMDAwNTAwLAorCTB4MDQwMjAwMjksIDB4OGMwMDA1MWUsIDB4MDIwMDAwMDAsIDB4MDAxMDYxMzksCisJMHg4MjAwMGQwMCwgMHgwMDAwMDBjMCwgMHgwMjAyMDAwMCwgMHgwMDEwNjEyZiwKKwkweDgyMDAwZDAwLCAweDAwMDAyMDIwLCAweDAyMDIwMDAwLCAweDAwMTA2MTJjLAorCTB4ODEzZTc5YzAsIDB4MDIwMjAwMDAsIDB4MDAxMDYxMmMsIDB4NTkyYzBjMGMsCisJMHg4MDA0MDljMCwgMHgwMjAyMDAwMCwgMHgwMDEwNjEyYywgMHg1OTMwMGEwMywKKwkweDgyMDQwZDgwLCAweDAwMDAwMDA3LCAweDAyMDIwMDAwLCAweDAwMTA2MTJjLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsIDB4NGEwMjY0MDMsIDB4MDAwMDAwNDMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDBjOSwgMHg4MjA4MGQ0MCwgMHg4MDAwMzQ2NSwKKwkweDQ4MDY2MDA0LCAweDQ5N2E2MDAwLCAweDU5YmMwMGVhLCAweDhjMDAwNTE2LAorCTB4MDQwMjA3ZmUsIDB4ODMzMDA0MDAsIDB4YTAwMDAwMDAsIDB4NDgwMzc4ZTEsCisJMHgxYzAxZjAwMCwgMHg4YzAwMDUwMiwgMHgwMjAyMDAwMCwgMHgwMDEwNjE4MSwKKwkweDhjMDAwNTFlLCAweDA0MDAwMDBlLCAweDgyMDAwZDAwLCAweDAwMDAwMGMwLAorCTB4MDQwMDAwMDUsIDB4ODIwNDBkODAsIDB4MDAwMDAwYzAsIDB4MDIwMjAwMDAsCisJMHgwMDEwNjE4NiwgMHg4MjAwMGQwMCwgMHgwMDAwMjAyMCwgMHg4MjA0MGQ4MCwKKwkweDAwMDAyMDIwLCAweDAyMDAwMDAwLCAweDAwMTA2MTRkLCAweDU5MmMwMjA3LAorCTB4ODAwMDAwNDAsIDB4MDIwMjAwMDAsIDB4MDAxMDYxNTcsIDB4NTkyYzE4MGQsCisJMHg4MDBjMTljMCwgMHgwMjAyMDAwMCwgMHgwMDEwNjE1NywgMHg1OTJjMTgwZiwKKwkweDU5MzAwMDA3LCAweDgyMDAwNTQwLCAweDAwMDAwMDExLCAweDQ4MGU2MDExLAorCTB4NDgwMjYwMDcsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDA0MiwgMHg0MjAwMDgwMCwgMHg4MDAwMjAwMSwgMHgwNDAxZjAyYSwKKwkweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ4MDdjODU3LAorCTB4MDQwMWYwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4NTkzMjU4MDgsCisJMHg4MzJjMDUwMCwgMHgwMGZmMDAwMCwgMHgwNDAwMDAwZCwgMHg1OTJjMDAwMCwKKwkweDQ4MDY1YTA2LCAweDQ4MDI2MDA4LCAweDU5MmMwNDBhLCAweDhjMDAwNTEwLAorCTB4MDQwMjAwMDgsIDB4MDIwMWY4MDAsIDB4MDAwMjAyY2UsIDB4NDE3YTc4MDAsCisJMHg1OTMwMDAwOCwgMHg4MDAyNWQ0MCwgMHgwNDAyMDc4ZiwgMHgxYzAxZjAwMCwKKwkweDQ1NmE1ODAwLCAweDQxMmVkMDAwLCAweDgxNWViODAwLCAweDU5YzgwMDAwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsIDB4MDQwMWY3ZjQsCisJMHg1OTg0MDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwgMHgxYzAxZjAwMCwKKwkweDU5ODQwMDAzLCAweDgwMDAwNTQwLCAweDAyMDIwMDAwLCAweDAwMTA2MWZlLAorCTB4MWMwMWYwMDAsIDB4NDgwNjYwMDQsIDB4NTliYzAwZWEsIDB4OGMwMDA1MTYsCisJMHgwNDAyMDdmZSwgMHg4MzMwMDQwMCwgMHg0MDAwMDAwMCwgMHg0ODAzNzhlMSwKKwkweDFjMDFmMDAwLCAweDU5YmMwMGVhLCAweDgyMDAxNTAwLCAweGIwMDAwMDE4LAorCTB4MDIwMjAwMDAsIDB4MDAxMDZjODEsIDB4OGMwMDA1MTAsIDB4MDQwMDAwMmEsCisJMHg1OWJjMTBlMCwgMHg4MjA4MDUwMCwgMHhmZmZmZjAwMCwgMHgwNDAyMDAwYSwKKwkweDgwMDgwMTA4LCAweDgyMGEzNTAwLCAweDAwMDAwMDBmLCAweDQ4MDNjODU3LAorCTB4MTIwMWYwMDAsIDB4MDAxMDZjODcsIDB4ODQwMDA1MTAsIDB4NDgwMjYwMDQsCisJMHgwNDAxZjAxNiwgMHg4NDBhNjUzZSwgMHg1OTMwMDAwNCwgMHg4YzAwMDUyMCwKKwkweDA0MDAwN2ZhLCAweDgyMDAwNTAwLCAweGZmZmVmZWZmLCAweDQ4MDI2MDA0LAorCTB4OGMwODE1M2UsIDB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMTMsCisJMHgwNDAxZjg1OSwgMHgwNDAxZjAwOSwgMHg1OTMwMDAwNCwgMHg4YzAwMDUxNCwKKwkweDA0MDAwMDAzLCAweDA0MDFmZmIwLCAweDA0MDFmMDJmLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNDksIDB4MDQwMWY4NTAsIDB4NTliYzAwZWEsIDB4ODIwMDE1MDAsCisJMHhiMDAwMDAxOCwgMHgwMjAyMDAwMCwgMHgwMDEwNmM4MSwgMHg4YzAwMDUxMCwKKwkweDA0MDIwN2Q4LCAweDFjMDFmMDAwLCAweDgzNjQwNDgwLCAweDAwMDAwMDEwLAorCTB4MDQwMDEwMWEsIDB4NDE2MjYwMDAsIDB4NDE1ODAwMDAsIDB4NTkzMDBhMDMsCisJMHg4MjA0MGQ4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwOCwgMHg4MzMyNjQwMCwKKwkweDAwMDAwMDI0LCAweDgxMzAwYzgwLCAweDA0MDAxN2Y5LCAweDQyMDI2MDAwLAorCTB4MDAxMGQxYzAsIDB4MDQwMWY3ZjYsIDB4ODE2NmM4NDAsIDB4ODMzMDBjMDAsCisJMHgwMDAwMDAyNCwgMHg4MDA0MDQ4MCwgMHgwNDAyMTAwNSwgMHg0MDA2YzAwMCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA4LCAweDFjMDFmMDAwLCAweDgzN2FjNTQwLAorCTB4MDAxMGQxYzAsIDB4MDQwMWY3ZmIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NTQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0OTY3Yzg1NywgMHg4MDAyNjU4MCwKKwkweDFjMDFmMDAwLCAweDgzMzAwNDgwLCAweDAwMTBkMWMwLCAweDAyMDAxODAwLAorCTB4MDAxMDA1ZDgsIDB4NDE1ODAwMDAsIDB4ODEzMDA0ODAsIDB4MDQwMjEwMGMsCisJMHgwNDAxMTAwMCwgMHg0NTdhNjAwMCwgMHg0YTAyNjIwMiwgMHgwMDAwZmZmZiwKKwkweDgzMzAwNDAwLCAweDAwMDAwMDAzLCAweDQ4MDNjODQwLCAweDRhMDNjODQyLAorCTB4MDAwMDAwMjEsIDB4ODE2NmM4MDAsIDB4MWMwMWYwMDAsIDB4NDE1NDAwMDAsCisJMHg4MTMwMDQ4MCwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxMTAwMCwKKwkweDQ1N2E2MDAwLCAweDRhMDI2MjAyLCAweDAwMDBmZmZmLCAweDgzMzAwNDAwLAorCTB4MDAwMDAwMDMsIDB4NDgwM2M4NDAsIDB4NGEwM2M4NDIsIDB4MDAwMDAwMjEsCisJMHg1OWE4MDA2NiwgMHg0OTMzNTA2NSwgMHg4MDAwMDAwMCwgMHg0ODAzNTA2NiwKKwkweDFjMDFmMDAwLCAweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDU5MzAwNDA2LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMWYsIDB4MGMwMWY4MDMsIDB4NWMwMjY4MDAsCisJMHgxYzAxZjAwMCwgMHgwMDEwNzk2NiwgMHgwMDEwNzk3OSwgMHgwMDEwNzk5MywKKwkweDAwMDIwN2M5LCAweDAwMTA5OGYxLCAweDAwMTA5OTBjLCAweDAwMDIwODNlLAorCTB4MDAxMDc5NjYsIDB4MDAxMDc5NzksIDB4MDAxMDY0ZWUsIDB4MDAxMDc5YWMsCisJMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwKKwkweDAwMTA3OTY2LCAweDAwMTA5NWExLCAweDAwMTBhNmMyLCAweDAwMTA3OTY2LAorCTB4MDAxMDc5NjYsIDB4MDAxMDc5NjYsIDB4MDAxMDc5NjYsIDB4MDAxMDc5NjYsCisJMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwKKwkweDAwMTA3OTY2LCAweDAwMTA3OTY2LCAweDAwMTA3OTY2LCAweDAwMTA3OTY2LAorCTB4MDAxMDc5NjYsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwNzlhYSwKKwkweDAwMTA4NTkyLCAweDAwMDIwN2RkLCAweDAwMTA4NzIwLCAweDAwMTA4N2I5LAorCTB4MDAxMDc5YWEsIDB4MDAxMDc5YWEsIDB4MDAxMDc5YWEsIDB4MDAxMDg1NzcsCisJMHgwMDEwNzlhYSwgMHgwMDEwNzlhYSwgMHgwMDEwNzlhYSwgMHgwMDEwNzlhYSwKKwkweDAwMTA4OTg1LCAweDgzMzgwNDgwLCAweDAwMDAwMDU4LCAweDA0MDIxMDA3LAorCTB4ODMzODA0ODAsIDB4MDAwMDAwNDAsIDB4MDQwMDEwMDQsIDB4NGQyYzAwMDAsCisJMHgwYzAxZjgwMywgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHgwMDEwODYxYiwKKwkweDAwMTA4NjFiLCAweDAwMTA4NjFiLCAweDAwMTA4NjFiLCAweDAwMTA4NjFiLAorCTB4MDAxMDg2MWQsIDB4MDAxMDg2YmQsIDB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsCisJMHgwMDEwODYxYiwgMHgwMDEwODYxYiwgMHgwMDEwODYxYiwgMHgwMDEwODYxYiwKKwkweDAwMTA4NjFiLCAweDAwMTA4NjFiLCAweDAwMTA4NjFiLCAweDAwMTA4NjFiLAorCTB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsIDB4MDAxMDg2YzEsIDB4MDAwMjA3ZmYsCisJMHgwMDEwODYxYiwgMHgwMDEwODZjMCwgMHgwMDEwODZjMiwgMHg1OTMyNTgwOCwKKwkweDU5MzAwODExLCAweDU5MzAxNDAyLCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAorCTB4MDQwMjAwMWMsIDB4MDQwMWY4MjYsIDB4MDQwMDAwMDUsIDB4NGEwMjVhMDQsCisJMHgwMDAwMDEwMywgMHg0OTdhNWMwOSwgMHgwNDAxZjAwOSwgMHg0YTAyNWEwNCwKKwkweDAwMDAwMTAzLCAweDRhMDI1YTA2LCAweDAwMDAwMDAwLCAweDQ5N2E1YzA5LAorCTB4ODAwNDA5YzAsIDB4MDIwMjA4MDAsIDB4MDAxMDg3ODUsIDB4NDgwNjU4MDcsCisJMHg0ODBhNWMwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDJjMSwgMHg1OTM0MDAwZiwKKwkweDU5MzQxNDBiLCAweDgwMDgxMDQwLCAweDA0MDAxMDAyLCAweDQ4MGE2YzBiLAorCTB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsIDB4MDAwMjAyNTMsIDB4MDQwMWY3NWUsCisJMHg1OTJjMDIwYSwgMHg4YzAwMDUwMiwgMHgwNDAwMDdlOSwgMHg4MDA0MDljMCwKKwkweDA0MDAwN2U3LCAweDU5MmMwMjA4LCAweDhjMDAwNTBlLCAweDA0MDIwN2U0LAorCTB4NDkzM2M4NTcsIDB4MDIwMWYwMDAsIDB4MDAxMDkyMGYsIDB4NTkyYzAyMGEsCisJMHg4YzAwMDUwMCwgMHgwNDAwMDAxMCwgMHg1OTMwMDAxNSwgMHg1OTJjMzgwZiwKKwkweDgwMWMzYzgwLCAweDA0MDAwMDBjLCAweDRhMDI1YTA2LCAweDAwMDAwMDE1LAorCTB4OGMxYzNkM2UsIDB4MDQwMDAwMDUsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDcsCisJMHg4MDFjMzg4MCwgMHg4MDFjMzgwMCwgMHg0ODFmYzg1NywgMHg4MjFjMGQ0MCwKKwkweDAwMDAwMDAwLCAweDFjMDFmMDAwLCAweDU5MzAwMjAzLCAweDgyMDAzNDgwLAorCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsCisJMHgwMDEwOTkyYiwgMHgwMDAyMDg1MiwgMHgwMDEwOWZiYSwgMHgwMDEwOWZjOCwKKwkweDAwMDIwODZlLCAweDAwMTA5OTJiLCAweDAwMTBhMGE4LCAweDAwMDIwODhkLAorCTB4MDAxMDk5MmIsIDB4MDAxMDk5MmIsIDB4MDAxMDk5MmIsIDB4MDAxMDk5MmIsCisJMHgwMDEwOTkyYiwgMHgwMDEwOTkyYiwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxMywKKwkweDAyMDIwMDAwLCAweDAwMTA5ZjQyLCAweDU5MzAwNDAzLCAweDgyMDI3NDgwLAorCTB4MDAwMDAwNDQsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwMDA0ODAsCisJMHgwMDAwMDA0MCwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwKKwkweDAwMTA5ZjllLCAweDAwMDIwODY0LCAweDAwMTA5ZmEwLCAweDAwMTA5ZmIyLAorCTB4NTkzMjU4MDgsIDB4ODMyYzA1MDAsIDB4MDBmZjAwMDAsIDB4MDQwMDAwMDUsCisJMHg1OTJjMGMwYSwgMHg4YzA0MGQxYSwgMHgwMjAyMDAwMCwgMHgwMDEwOWZhZCwKKwkweDA0MDFmZTkxLCAweDA0MDFmNzEwLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ4LAorCTB4MDQwMDAwMDcsIDB4ODMzODA1ODAsIDB4MDAwMDAwNTMsIDB4MDIwMDAwMDAsCisJMHgwMDEwYTA0YSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTMwMDAxZiwKKwkweDU5MzAxMDExLCAweDU5MzAwODA5LCAweDU4MDQwYTAwLCAweDhjMDQwZDBlLAorCTB4MDIwMjAwMDAsIDB4MDAxMGEwMjYsIDB4ODAwODExYzAsIDB4MDIwMjAwMDAsCisJMHgwMDEwYTAzMywgMHg1OTMwMDAxZiwgMHg4MDAwMDU0MCwgMHgwMjAyMDAwMCwKKwkweDAwMTBhMDQxLCAweDU5MzI1ODA4LCAweDU5MmMwNDBhLCAweDhjMDAwNTFlLAorCTB4MDIwMDAwMDAsIDB4MDAxMGEwMWMsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDEsCisJMHgwNDAxZjAwMSwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA1NCwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNWQ4LCAweDgzMzgwNDgwLCAweDAwMDAwMDQwLCAweDAyMDAxMDAwLAorCTB4MDAxMGEwNjcsIDB4MGMwMWYwMDEsIDB4MDAxMGEwNzMsIDB4MDAwMjA4YWEsCisJMHgwMDEwYTA3ZiwgMHgwMDEwYTA4NiwgMHgwMDEwYTA3MywgMHgwMDEwYTA3MywKKwkweDAwMTBhMDczLCAweDAwMTBhMDczLCAweDAwMTBhMDc1LCAweDAwMTBhMDdhLAorCTB4MDAxMGEwN2EsIDB4MDAxMGEwNzMsIDB4MDAxMGEwNzMsIDB4MDAxMGEwNzMsCisJMHgwMDEwYTA3MywgMHgwMDEwYTA3YSwgMHgwMDEwYTA3MywgMHgwMDEwYTA3YSwKKwkweDAwMTBhMDczLCAweDAwMTBhMDc1LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4NDkzYTY0MDMsIDB4NDIwMDA4MDAsIDB4ODAwMDIwNDIsIDB4MDQwMWY2NzIsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxNGFhNjJiMSwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA1LAorCTB4ZmZmZmZmZmIsIDB4MDI4MDAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMGMwMDAsCisJMHgwMDAwMDcxZCwgMHgwNzNmY2E1YSwgMHgwNzA1YTVhNSwgMHgwMTkyODAwOSwKKwkweDA3MGZmMGUxLCAweDAzODAwMDA2LCAweDA0OTU4MDEwLCAweDA1MzA4MDAwLAorCTB4MDUwMDgwMDAsIDB4MDYwMDkwMmYsIDB4MDRhMDA0ZGMsIDB4MDIwMmYwNTEsCisJMHgwNDJlNDAyMCwgMHgwMThmMDIxYiwgMHgwMzNlNTAwMCwgMHgwMzAyMDAwMCwKKwkweDA3OGQwMDE4LCAweDA0OTMwNDFhLCAweDAwOTIwNDFjLCAweDAzOGEwMzA1LAorCTB4MDc4YjAzMDMsIDB4MDQ4ZTgwMTAsIDB4MDY3OGFhZTUsIDB4MDYwMDAwMDEsCisJMHgwNzgxODE3NCwgMHgwNDAwMTBlNiwgMHgwNDQ4ZTBlNiwgMHgwNDgxODAxMCwKKwkweDAwMmZiMDA4LCAweDA0NDhlMGU2LCAweDA0ODE4MDEwLCAweDA2MGZmMGU2LAorCTB4MDA1ODA0MDEsIDB4MDU0ODgwZmYsIDB4MDQ4MTgwMTAsIDB4MDIyYTUwMDEsCisJMHgwMzA0MzBkNCwgMHgwNjc4MDA0MywgMHgwMzBlMDAwMCwgMHgwMzA0NTBmZiwKKwkweDA2NzgwMDQzLCAweDAzMDE5MDAwLCAweDA1ODE4NWM2LCAweDAyN2MwMDQ1LAorCTB4MDMwMjAwMDAsIDB4MDY4MTAwMzcsIDB4MDI3YzAwNDUsIDB4MDMwNDAwMDAsCisJMHgwNjgxMDBjNywgMHgwMjdjMDA0NSwgMHgwMzA4MDAwMCwgMHgwNzgxMDYxZSwKKwkweDA0OTA4MDM3LCAweDAyOTEwNWM0LCAweDAxMDQxMGE2LCAweDAzNzlmZjQxLAorCTB4MDM3ZmZmZmYsIDB4MDcyZDYwMDAsIDB4MDc2MDEyNDEsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwNTYwMDQwMCwgMHgwNTBmODBmZiwgMHgwNTZjMDRmZiwKKwkweDA2ODEwNWRjLCAweDA3M2ZhMDA5LCAweDA2MDAwMDAxLCAweDAyNzlmZjAyLAorCTB4MDcwMGZmZmYsIDB4MDcwZmYwZDEsIDB4MDE3OWZlZmYsIDB4MDcwMGZmZmYsCisJMHgwNDVjMDQwMiwgMHgwNDgxODVkYywgMHgwNjBmZjBkMCwgMHgwMTc5ZmVmZiwKKwkweDA3MDBmZmZmLCAweDA1N2RmZWZmLCAweDA3MDBmZmZmLCAweDA3ODEwNWJlLAorCTB4MDU2MDBlNDEsIDB4MDUwZjgwZmYsIDB4MDMyZmEwNjksIDB4MDc0ODAwMDAsCisJMHgwNjgxMDVkMCwgMHgwNjc4MDA0MywgMHgwNzAwMDBmMCwgMHgwNzgxMDA1ZiwKKwkweDAzN2MwMGZmLCAweDA2MDAwMDEwLCAweDA3ODEwMDVmLCAweDAzODAwNWNjLAorCTB4MDM3OWZmMDAsIDB4MDcwZmZmZmYsIDB4MDY3ODAwNDMsIDB4MDdmMDAwMDAsCisJMHgwNzVhMDAwMCwgMHgwMjBlZjAwMSwgMHgwMjg2MDVjZSwgMHgwNTQ4NDAwMCwKKwkweDAyYTE4MTllLCAweDA2MmQ2MDAxLCAweDAwMmZiMDAxLCAweDA3MGZmMDY5LAorCTB4MDE4NjgwNzIsIDB4MDYwZmYwNzksIDB4MDU1YzA0NDEsIDB4MDY4MTAwMTAsCisJMHgwMTJmYjAwMCwgMHgwNjA1NjBmYiwgMHgwMzgwMDA3OCwgMHgwNjBmZjA3OSwKKwkweDAyODY4MTk4LCAweDA3MGZmMDY5LCAweDA1NWMwNDQxLCAweDA2ODEwMDEwLAorCTB4MDYwNTYwZmIsIDB4MDQwMGQwZDAsIDB4MDYyZDYwMDIsIDB4MDY0ODMwMGQsCisJMHgwNjgxMDA4NiwgMHgwNzBmZjBkMSwgMHgwNjJkNjAwMSwgMHgwNDVjMDQwYiwKKwkweDA2ODEwMDg5LCAweDA1NDg4MDAwLCAweDA0ODE4MDg2LCAweDA3MmU1MDBjLAorCTB4MDAyMDgwMDEsIDB4MDVhMDA0ZTEsIDB4MDI4MDAwMTAsIDB4MDYyZDYwMDEsCisJMHgwN2YwMDAwMCwgMHgwN2YwMDAwMCwgMHgwNzBmZjBkMSwgMHgwMTc5ZmVmZiwKKwkweDA3MDAwMGZmLCAweDA1NWMwNDBjLCAweDA1ODE4MGJiLCAweDAwMDdiMDAxLAorCTB4MDMwNzkwNDEsIDB4MDMwN2EwMDAsIDB4MDY2MDBhNzksIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgwYSwgMHgwNjAwMDAxMCwgMHgwNzJkNTAwMywgMHgwNzhkMDA5NiwKKwkweDAzMDdjMDAzLCAweDAwMDdkMDA0LCAweDAxMDdlMDA1LCAweDAzMDdmMDA2LAorCTB4MDIwODAwMDcsIDB4MDAwODEwMDgsIDB4MDEwODIwMDksIDB4MDMwODMwMGEsCisJMHgwMDA4NDAwYiwgMHgwMzA4NTAwYywgMHgwNjhkMDBhMSwgMHgwNjc4MDA3YSwKKwkweDA3ZjAwMDAwLCAweDAxMDg4MGZmLCAweDAzMzg2MDAwLCAweDAzMDEwMDAwLAorCTB4MDcyZTYzMDAsIDB4MDIwZWYwN2YsIDB4MDI4NjAwMTAsIDB4MDcwZmYwN2QsCisJMHgwNDUwMDQ3YywgMHgwNTBmODBmZiwgMHgwMDJmYTgxOSwgMHgwNjhkMDBhZSwKKwkweDAyMDgwMDAxLCAweDAwMDgxMDAyLCAweDA0NDg4MDdhLCAweDA2ODEwMGI1LAorCTB4MDM3OWZmMDMsIDB4MDcwMDAwZmYsIDB4MDEwODIwMDMsIDB4MDY4ZDAwYjYsCisJMHgwMjM4NjAwNCwgMHgwMzAxMDAwMCwgMHgwNzJlNmMwMCwgMHgwMjgwMDAxMCwKKwkweDA2NzgwMDQzLCAweDA3MDAwMGYwLCAweDA3ODEwNWQ3LCAweDA1MDAyMGZmLAorCTB4MDI3YzAwMDIsIDB4MDYwMDAwMTAsIDB4MDc4MTAwYzMsIDB4MDM4MDA1ZDcsCisJMHgwNzAwYzBkMSwgMHgwMzc5ZmYwYywgMHgwNzAwMDBmZiwgMHgwMzgwMDA4ZSwKKwkweDAyMDRhMDUxLCAweDA2NzgwMDQzLCAweDA3MDAwMGYwLCAweDAzN2MwMGZmLAorCTB4MDYwMDAwMTAsIDB4MDc4MTgxNmEsIDB4MDcyZDYwMDAsIDB4MDE5NDg1YzAsCisJMHgwNTBmYjA1NiwgMHgwNDQ4ODBlNiwgMHgwNDgxODAxMCwgMHgwNjBmZjBkMCwKKwkweDAxNzlmZWZmLCAweDA3MDBmZmZmLCAweDA1N2RmZWZmLCAweDA3MDBmZmZmLAorCTB4MDc4MTA1YmUsIDB4MDVhMDAyMTIsIDB4MDM0OWMwZTQsIDB4MDc4MTgxMWQsCisJMHgwNzBmZjA5MywgMHgwNTAwMTBmZiwgMHgwNzBmZjA5MywgMHgwNDVjMDQwMSwKKwkweDA1ODE4MGRiLCAweDAyMDQ2MDkyLCAweDA0MDAyMDQ2LCAweDA0NjAwMjAyLAorCTB4MDA1NDA0MDEsIDB4MDQ4MjgwZTYsIDB4MDQ1MDA0MjUsIDB4MDcwMDYwZmYsCisJMHgwNzMwZmZmZiwgMHgwNzAwMDAwZiwgMHgwNzQyMDAwZiwgMHgwNTgxMDE5MCwKKwkweDA3YTAwNWE2LCAweDA2NDhhMDAyLCAweDA0ODE4MGU5LCAweDAwMDQ3MDg5LAorCTB4MDcwZmYwNDcsIDB4MDQ1YzA0NDMsIDB4MDc3ODAwZmYsIDB4MDdmMDAwMDAsCisJMHgwNzgxODE4ZSwgMHgwNzc4MDA0NywgMHgwNTAwZTAwMCwgMHgwNDgxODVhZCwKKwkweDA3MGZmMDA2LCAweDAxODYwMTE3LCAweDAxNzlmZTQ3LCAweDA3MDAwMDBmLAorCTB4MDEwNDgwZmYsIDB4MDU2YzcwNDgsIDB4MDY4MTgxMDIsIDB4MDA3YTBkNGEsCisJMHgwNDAwMzgwMSwgMHgwMjIwZjAwMSwgMHgwMTgwMDEwZiwgMHgwNzYwOGU0OCwKKwkweDAzNGE2MGZmLCAweDA3MDBmMGZmLCAweDA3NGI4OGZmLCAweDAzNzAwMGZmLAorCTB4MDcwMDA2MDAsIDB4MDU1MDA0NDgsIDB4MDc0ZDAwZmYsIDB4MDQ1YTA0NGEsCisJMHgwMzA0YTBmZiwgMHgwNzBmZjAwZiwgMHgwMTU0MDQwNiwgMHgwNTgyMDExNywKKwkweDA0OTUwMTIwLCAweDA1YTAwMWJkLCAweDAyODY4MTIzLCAweDAxMzRiZmZmLAorCTB4MDcwZmZmZmYsIDB4MDEwNDEwMmUsIDB4MDUwZmQwNDEsIDB4MDA4MDAxMjYsCisJMHgwNTk1MDExZCwgMHgwNWEwMDFiZCwgMHgwMTg2MDExZCwgMHgwMjAyZjAwZSwKKwkweDA1MmU0MDMwLCAweDA0MGZkMDJmLCAweDA3MGZjMGZmLCAweDA1YTAwMjE4LAorCTB4MDI4MDAwMTAsIDB4MDQwMGUwMmYsIDB4MDQyZTQwMjAsIDB4MDIwMmYwNTEsCisJMHgwMDA0MTAwZSwgMHgwMDA0YjAwZSwgMHgwNTBmZDA0MSwgMHgwMjRhNmM0NiwKKwkweDA0NTAwNDIzLCAweDA1MDA3MGZmLCAweDAzNjIwMDI0LCAweDA1MDA4MGZmLAorCTB4MDQwMDQwNDYsIDB4MDcwMDUwMGYsIDB4MDMyMDYwMDAsIDB4MDU2MDEwNDgsCisJMHgwNzAwYTBmZiwgMHgwNzAwOTAwYSwgMHgwNzBmZjAwNSwgMHgwNDUwMDQ0NiwKKwkweDAwNTQwNDI1LCAweDA0ODIwMTU3LCAweDA1NjAxNjIyLCAweDA1MGY4MGZmLAorCTB4MDYzZmEwMzIsIDB4MDYwMDAwMDIsIDB4MDMyMDMwMDAsIDB4MDEyMDQwMDAsCisJMHgwMzIwNTAwMCwgMHgwMTIwYjAwMCwgMHgwMzIwYzAwMCwgMHgwNzYwMTQ0MSwKKwkweDA1MGY4MGZmLCAweDA0M2ZhODUyLCAweDA2MDAwMDAxLCAweDA3MGZmMDU2LAorCTB4MDU2YzAyZmYsIDB4MDUwZmIwZmYsIDB4MDcwNTYwZmYsIDB4MDMwNzkwNDEsCisJMHgwNTYwMGU0MSwgMHgwNTBmODBmZiwgMHgwNzNmYTAxMSwgMHgwNjAwMDAzZCwKKwkweDA2NzgwMDQzLCAweDA3ZjAwMDAwLCAweDA2NWEwMDdhLCAweDAxMDg4MGZmLAorCTB4MDRhMDAxYjYsIDB4MDU4ZDAxNTAsIDB4MDIwOGEwNGEsIDB4MDEwOGIwNGIsCisJMHgwMjM4NjAwMSwgMHgwMzAxMDAwMCwgMHgwNzJlNjMwMCwgMHgwMjgwMDBhOCwKKwkweDA1MDBkMDBhLCAweDA1NTAwNDA1LCAweDAxNGE2OGZmLCAweDA3MDA5MGZmLAorCTB4MDE1NDA0MGEsIDB4MDcwMGMwZmYsIDB4MDYwMGEwMjMsIDB4MDUwMGIwMjQsCisJMHgwMjIwNjAwMSwgMHgwNTYwMTYyMiwgMHgwNTBmODBmZiwgMHgwNjNmYTA0YSwKKwkweDA2MDAwMDAyLCAweDA1NjAxMDIyLCAweDA1MGY4MGZmLCAweDA0M2ZhODE5LAorCTB4MDYwMDAwMDEsIDB4MDYwMGEwMGQsIDB4MDE4MDAxM2MsIDB4MDY3ODAwNDMsCisJMHgwNzAwMDBmMCwgMHgwNTAwMTBmZiwgMHgwMjdjMDAwMSwgMHgwNzAwMDAzMCwKKwkweDA3ODEwNWI0LCAweDAyN2MwMDAxLCAweDA2MDAwMDIwLCAweDA3ODEwNWI0LAorCTB4MDM4MDA1Y2MsIDB4MDU0ODgwZmYsIDB4MDY4MTAwMTAsIDB4MDcwZmYwNTYsCisJMHgwNTBmYjBmZiwgMHgwNDQ4ODBlNSwgMHgwNTgxMDE3ZCwgMHgwNDQ4ODBlNiwKKwkweDA0ODE4MDEwLCAweDAwODAwMTgzLCAweDA1NmMwMmZmLCAweDA1MGZiMGZmLAorCTB4MDcwNTYwZmYsIDB4MDcyZTUzMDAsIDB4MDQ0ODgwZTYsIDB4MDQ4MTgwMTAsCisJMHgwNzJkNTAwMywgMHgwNjc4MDA0MywgMHgwN2YwMDAwMCwgMHgwMTA4ODBmZiwKKwkweDA1OGQwMTg3LCAweDAzMzg2MDA1LCAweDAzMDEwMDAwLCAweDAzM2U2MDAwLAorCTB4MDcwMDAwMGMsIDB4MDUyZTUyMDAsIDB4MDI4MDAwMTAsIDB4MDEyMDkxOGUsCisJMHgwMTgwMDRlNCwgMHgwMTIwOTE5MCwgMHgwMTgwMDRlNCwgMHgwMDIwOTE5MiwKKwkweDAxODAwNGU0LCAweDAzMjA5MDAwLCAweDAxODAwNGU0LCAweDAxMjA5MTk2LAorCTB4MDE4MDA0ZTQsIDB4MDAyMDkxOTgsIDB4MDE4MDA0ZTQsIDB4MDI0OTMwNzUsCisJMHgwNjgxMDUxMCwgMHgwMTIwOTE5YSwgMHgwMTgwMDRlNCwgMHgwNjYwMWUwMSwKKwkweDA1MGY4MGZmLCAweDA2M2ZhMDI5LCAweDA2MDAwMDA4LCAweDAyMDE1MDEwLAorCTB4MDIwMTYwNTEsIDB4MDAwMTcwNTEsIDB4MDAwMTEwNTEsIDB4MDU2MDFhNDEsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgzYSwgMHgwNjAwMDAwOCwgMHgwNTYwMGU0MSwKKwkweDA1MGY4MGZmLCAweDAxNDY0MDAwLCAweDAzMmZhMDBhLCAweDA3MDA2MDExLAorCTB4MDUwMDcwMTIsIDB4MDQwMDgwMTMsIDB4MDcwMDkwMTQsIDB4MDYwMGEwMTUsCisJMHgwNDAwYjAxNiwgMHgwNzAwYzAxNywgMHgwN2MwMDAwMCwgMHgwNzJkNTAwMywKKwkweDA2NjAxNDc5LCAweDA1MGY4MGZmLCAweDA0OGQwMWI5LCAweDA2M2ZhMDUxLAorCTB4MDYwMDAwM2UsIDB4MDdjMDAwMDAsIDB4MDYwMDUwNTEsIDB4MDQwMGUwMmMsCisJMHgwNjYwMDYwZSwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwMzc5ZmYwMCwKKwkweDA3MDAwMGZmLCAweDA3NmMwMDAwLCAweDA1ODEwMWRkLCAweDA2NjA0ODBlLAorCTB4MDUwMGUwZmYsIDB4MDM0MDAwZmYsIDB4MDE1NDA0MjcsIDB4MDU4MjAyMGEsCisJMHgwMzQwMDAwNSwgMHgwNzBmZjAwNSwgMHgwNTVjMDQyOCwgMHgwNDgxMDIwZSwKKwkweDAxNjgwZTA1LCAweDA1NmMwNDA1LCAweDA2ODE4MWJmLCAweDA0MGY4MDI5LAorCTB4MDUzZmE4MDksIDB4MDcwMDAwMjQsIDB4MDY2MDA2NDksIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwMzc5ZmYwMCwgMHgwNzAwMDBmZiwgMHgwNzZjMDAwMCwKKwkweDA2ODE4MWJmLCAweDA0MDBlMDQ5LCAweDAzNDAwMDJkLCAweDA1MGY4MDJiLAorCTB4MDUzZmE4MGEsIDB4MDYwMDAwMTYsIDB4MDY2MDQ4MGUsIDB4MDMwMmMwZmYsCisJMHgwMzQwMDBmZiwgMHgwMTU0MDQyNywgMHgwNTgyMDIwYywgMHgwNzJkNjAwMCwKKwkweDA0NjAwNDBlLCAweDA1MGY4MGZmLCAweDAxMDRlMGQxLCAweDAzNzlmZjRlLAorCTB4MDcwMGZmZmYsIDB4MDYyZDYwMDIsIDB4MDMyZmEwMDksIDB4MDAwNGQwZDAsCisJMHgwNzRiMDA0ZCwgMHgwNzc4MDAwMCwgMHgwN2ZmZmYwMCwgMHgwNTVhMDQ0ZCwKKwkweDA3MDAwMGZmLCAweDAwMjAxMDA4LCAweDA0MDAyMDUxLCAweDA2MDAzMDUxLAorCTB4MDUzMDQwMDAsIDB4MDcwMDAwNjAsIDB4MDMyMDUwMDksIDB4MDcwMDYwMjIsCisJMHgwNDYwMDQwZSwgMHgwNTBmODBmZiwgMHgwMzJmYTAzYSwgMHgwNjYwM2MwZSwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDBhLCAweDA3MDAwMDI3LCAweDA1MDAxMGQxLAorCTB4MDQ2MDMyMGUsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MGEsIDB4MDYwZmYwMGUsCisJMHgwNTVjMDQyZSwgMHgwNDgxMDIxMCwgMHgwN2MwMDAwMCwgMHgwNDAwZTAyNiwKKwkweDAwODAwMWNiLCAweDAyMDJjMDI2LCAweDAwODAwMWU2LCAweDA1MDBlMDJlLAorCTB4MDA4MDAxZTYsIDB4MDQwMGUwNTEsIDB4MDE4MDAyMDksIDB4MDM0OWMwZTQsCisJMHgwNDgxMDIxNSwgMHgwN2MwMDAwMCwgMHgwMTNlNDAwMCwgMHgwNzBjMDAwMCwKKwkweDA3YzAwMDAwLCAweDAxM2U0MDAwLCAweDAzMDgwMDAwLCAweDA3YzAwMDAwLAorCTB4MDA5NzAyZjQsIDB4MDIyYTUwMDIsIDB4MDc5MDgyMWQsIDB4MDA5MTAyOTEsCisJMHgwMzA0MDBhNiwgMHgwNjc4YWFlNSwgMHgwNjAwMDAwMSwgMHgwMGExODYwZSwKKwkweDA2NjAwYzQwLCAweDA1MGY4MGZmLCAweDAzMmZhMDIxLCAweDA3NGIwMDAwLAorCTB4MDc2YzA2MDAsIDB4MDc4MTgyOTMsIDB4MDU2MDA0MDMsIDB4MDUwZjgwZmYsCisJMHgwNzNmYTAwOSwgMHgwNjAwMDAwMiwgMHgwMjc5ZmYwNCwgMHgwNzAwZmZmZiwKKwkweDAxMDQ0MGQ3LCAweDAxNzlmZTQ0LCAweDA3MDBmZmZmLCAweDA0NWMwNDA0LAorCTB4MDc4MTgyOTUsIDB4MDM0OWYwNDQsIDB4MDY4MTgyOWUsIDB4MDI0OTUwMDEsCisJMHgwNjgxODI5NywgMHgwNjBmZjA3OSwgMHgwNDVjMDQ0MCwgMHgwNzgxODIzYywKKwkweDA2NDRmMDdhLCAweDAwMmZiMDA4LCAweDA2MGZmMDc5LCAweDA0NWMwNDQwLAorCTB4MDc4MTgyNDEsIDB4MDY0NGYwN2EsIDB4MDAyZmIwMDgsIDB4MDY0OGYwMDEsCisJMHgwNzgxODI4OCwgMHgwNDYwMGU0MCwgMHgwNTBmODBmZiwgMHgwNjQ4MDAwMSwKKwkweDA0ODEwMjU3LCAweDA0NDhlMDAxLCAweDA0ODEwMjczLCAweDAyNDYwMDAxLAorCTB4MDY0NGYwMDEsIDB4MDEyZmE4MGEsIDB4MDQwMDgwNDAsIDB4MDVhMDA0ZWUsCisJMHgwMjg2ODI4YywgMHgwNWEwMDRkOCwgMHgwNjJkYTAwMSwgMHgwMTNlNDAwMCwKKwkweDA2MDAwMDgwLCAweDA2OTMwMDEzLCAweDAyOTIwMDEzLCAweDAyODAwMDEwLAorCTB4MDY0NGYwMDEsIDB4MDEyZmE4MGEsIDB4MDIwZWYwMDIsIDB4MDA4NjAyNzUsCisJMHgwNDYwMDg0MCwgMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNjAwMDAwMiwKKwkweDA1NzgwMTA1LCAweDAwODAwNDQwLCAweDAxN2MwMTA1LCAweDA1MDAwNDAwLAorCTB4MDY4MTgyNzUsIDB4MDY2MDFlMDIsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCisJMHgwNjAwMDAwMiwgMHgwNDYwMmE0MCwgMHgwNTBmODBmZiwgMHgwNzBmZjAwNSwKKwkweDA1M2ZhODA5LCAweDA2MDAwMDAyLCAweDA1NWMwNDA1LCAweDA2ODE4Mjc1LAorCTB4MDQwMDgwNDAsIDB4MDA0NWUwMDgsIDB4MDVhMDA0ZDgsIDB4MDA4MDAyNTEsCisJMHgwNjQ0ZjAwMSwgMHgwMTJmYTgwYSwgMHgwNTAwMjBkOCwgMHgwNDYwMDQ0MCwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDBhLCAweDA2MDAwMDAxLCAweDA2NDgwMDAxLAorCTB4MDc4MTgyODEsIDB4MDUzMDgwMDAsIDB4MDMwNDAwMDAsIDB4MDYwMDkwNDAsCisJMHgwNGEwMDRkYywgMHgwMDgwMDI1MSwgMHgwNmEwMDYwZSwgMHgwNTRiMDgwMCwKKwkweDA1NmEwNzAwLCAweDA2NjAwYzQwLCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLAorCTB4MDA4MDAyNTEsIDB4MDEzZTQwMDAsIDB4MDYwMDAwODAsIDB4MDEyMDkyODgsCisJMHgwMTgwMDRlNCwgMHgwNjAwOTAwOCwgMHgwNTMwODAwMCwgMHgwNTAwNDAwMCwKKwkweDA0YTAwNGRjLCAweDAwODAwMjUxLCAweDAyMjA5MDAyLCAweDAwODAwMmU1LAorCTB4MDMyMDkwMDAsIDB4MDA4MDAyZTUsIDB4MDIyMDkwMDQsIDB4MDA4MDAyZTUsCisJMHgwNGEwMDJmZCwgMHgwNjJkYTAwMSwgMHgwNTMwODAwMCwgMHgwNTAwMjAwMCwKKwkweDA2MDA5MDQwLCAweDA0YTAwNGRjLCAweDAyODAwMDEzLCAweDAxM2U0MDAwLAorCTB4MDYwMDAwODAsIDB4MDI0OTUwMDEsIDB4MDc4MTgyZGIsIDB4MDQ2MDA4NDAsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNjAwMDAwMSwgMHgwNzIxZjAwMCwKKwkweDAzNDlmMDAzLCAweDA1ODEwMmFhLCAweDAyNDVmMDFmLCAweDA2MDAwMDAyLAorCTB4MDE4NjAyZGIsIDB4MDc2MDE0MDAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksCisJMHgwNjQ4MDAwMSwgMHgwNTgxMDJkYiwgMHgwNjYwMjQ0MCwgMHgwNTBmODBmZiwKKwkweDAxMmZhODA5LCAweDAyMGVmMDAxLCAweDAzODY4MmRiLCAweDAxOWIwMmRiLAorCTB4MDUwMDIwZDgsIDB4MDYyZGEwMDEsIDB4MDYzMDMwMDIsIDB4MDUwMDA0MzAsCisJMHgwNDYwMDQ0MCwgMHgwNTBmODBmZiwgMHgwNzNmYTAxMiwgMHgwNjAwMDAwMSwKKwkweDAyOGY4MmJmLCAweDA1MDA0MGQ4LCAweDA2MmRhMDAxLCAweDA3NjAxZTAwLAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMDksIDB4MDYwMDAwMDEsIDB4MDYwZmYwMDQsCisJMHgwMDU0MDQwMiwgMHgwNDgyMDJkOSwgMHgwNjAwNTA1MSwgMHgwNjAwNjA1MSwKKwkweDA2NjAyMjQwLCAweDA1MGY4MGZmLCAweDA2M2ZhMDFhLCAweDA2MDAwMDAyLAorCTB4MDY2MDBhNDAsIDB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDcwMDAwMDMsCisJMHgwNjBmZjA0MCwgMHgwNDVhMDQxZiwgMHgwMTBlYjBmZiwgMHgwNjkzMDAxMywKKwkweDAyOTIwMDEzLCAweDAyODAwMDEwLCAweDA0MDA0MDAyLCAweDAxODAwMmM5LAorCTB4MDRhMDAyZmQsIDB4MDYyZGEwMDEsIDB4MDUzMDgwMDAsIDB4MDcwMDUwMDAsCisJMHgwNjAwOTA0MCwgMHgwNGEwMDRkYywgMHgwNTAwODBkOCwgMHgwNWEwMDRlMSwKKwkweDA2MmRhMDAxLCAweDAyODAwMDEzLCAweDA1MGZkMDA5LCAweDA1MGZkMDQxLAorCTB4MDEzZTQwMDAsIDB4MDYwMDAwODAsIDB4MDUzMDgwMDAsIDB4MDMwMTMwMDAsCisJMHgwNGEwMDRkYywgMHgwMTA0NDBkNywgMHgwMzQ5ZjA0NCwgMHgwNDgxMDJmMiwKKwkweDA2MmRhMDAxLCAweDAwOGYwMmYyLCAweDAzZTAwMDAwLCAweDA2MmRhMDAxLAorCTB4MDI4MDAwMTMsIDB4MDI0OWMwZTUsIDB4MDY4MTAwMTMsIDB4MDYyZGEwMDEsCisJMHgwN2YwMDAwMCwgMHgwN2YwMDAwMCwgMHgwMzNlNTAwMCwgMHgwNzBjMDAwMCwKKwkweDAxOGYwMmY2LCAweDAzODAwMDExLCAweDA1MDAyMGQ4LCAweDA0NjAwNDQwLAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDYwMDAwMDEsIDB4MDdjMDAwMDAsCisJMHgwMDJmYjAwMSwgMHgwMzgwMDMwNiwgMHgwMTJmYjAwMCwgMHgwMzA3NTA4NywKKwkweDA2OGQwMzA3LCAweDAzMzg2MDAwLCAweDAzMDIwMDAwLCAweDA0NDgyMDc1LAorCTB4MDY4MTAzNTIsIDB4MDY0OGEwZTYsIDB4MDc4MTAzNDcsIDB4MDY0MjAwN2YsCisJMHgwNjgxMDM0NSwgMHgwMzQwMDA3ZSwgMHgwNjBmZjAzOCwgMHgwMTU0MDQ3ZSwKKwkweDAyZDAwMzM0LCAweDA1NjAwMjdkLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LAorCTB4MDMwZWYwMDAsIDB4MDI4NjA1MDQsIDB4MDEwN2QwMDAsIDB4MDU2MDA4MDAsCisJMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwMzY4MWUwMCwgMHgwNDUwMDQyMCwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDA5LCAweDA3MDAwMDNmLCAweDAzODAwMzExLAorCTB4MDcwZmYwN2QsIDB4MDQ1MDA0N2MsIDB4MDUwZjgwZmYsIDB4MDAyZmE4MTksCisJMHgwNzhkMDMyNywgMHgwMjA4MDAwMSwgMHgwMDA4MTAwMiwgMHgwNDQ4ODA3YSwKKwkweDA3ODEwMzJlLCAweDAzNzlmZjAzLCAweDA3MDAwMGZmLCAweDAxMDgyMDAzLAorCTB4MDY4ZDAzMmYsIDB4MDIzODYwMDQsIDB4MDMwMTAwMDAsIDB4MDcyZTZjMDAsCisJMHgwMjgwMDM1MiwgMHgwMzgwMDMzYSwgMHgwMzgwMDMzYywgMHgwMjgwMDMzZSwKKwkweDAyODAwMzQwLCAweDAzODAwMzQyLCAweDAzODAwMzQ0LCAweDA3MjdjMDA1LAorCTB4MDI4MDAzMjMsIDB4MDYyN2MwMDgsIDB4MDI4MDAzMjMsIDB4MDYyN2MwMGIsCisJMHgwMjgwMDMyMywgMHgwNjI3YzAwZSwgMHgwMjgwMDMyMywgMHgwNzI3YzAxMSwKKwkweDAyODAwMzIzLCAweDAzODAwMzE0LCAweDA1MmU2ODAwLCAweDAyODAwMzUyLAorCTB4MDQ0ODgwZTYsIDB4MDc4MTA1MzMsIDB4MDUyZTYyMDAsIDB4MDcwZmYwODgsCisJMHgwMTc5ZmVmZiwgMHgwNzBmZmZmZiwgMHgwNDgxODUwMSwgMHgwNjBmZjA4MywKKwkweDAwODY4MzZkLCAweDAzM2U2MDAwLCAweDA3MDAwMDAzLCAweDA2OGQwMzUyLAorCTB4MDcyODYwMDAsIDB4MDdmMDAwMDAsIDB4MDc4ZDAzNTUsIDB4MDM4YzAzMDYsCisJMHgwNjQ4YzBlNiwgMHgwNTgxODM3MiwgMHgwNDQ4ZTBlNiwgMHgwNzgxMDM2YSwKKwkweDAwNDkyMGU2LCAweDA3ODEwMzY1LCAweDA3YTAwNTZmLCAweDA1MDAxMDg4LAorCTB4MDA3MDAxMDEsIDB4MDMxMDAwMDAsIDB4MDAwODgwMDEsIDB4MDMzZTYwMDAsCisJMHgwNzAwMDA4OCwgMHgwMzgwMDU2MCwgMHgwMjM4NjAwMSwgMHgwNzAzMDAwMCwKKwkweDAzM2U2MDAwLCAweDA2MDAwMDA4LCAweDAyODAwM2YxLCAweDAyNzk5MDc1LAorCTB4MDUwMDA0MGYsIDB4MDY4MTAwMTAsIDB4MDY2MDE0NzksIDB4MDUwMDgwZmYsCisJMHgwNjMwOTA1MiwgMHgwNjAwMDAzZSwgMHgwMjgwMDM3NiwgMHgwNjYwMjI3OSwKKwkweDA1MDA4MGZmLCAweDA1MzA5ODEyLCAweDA3MDAwMDQxLCAweDA2NDgwMDdhLAorCTB4MDc4MTAzN2UsIDB4MDQ0ODgwNzUsIDB4MDU4MTgzN2UsIDB4MDQwZjgwMDgsCisJMHgwNzBmYTAwOSwgMHgwMDQ5MTA3YSwgMHgwMWExODNmMywgMHgwMDc5ODA3NSwKKwkweDA2MDAwNTA3LCAweDA1ODE4NTIxLCAweDA0NDhiMDc1LCAweDA2ODEwMzg1LAorCTB4MDI0OTMwNzUsIDB4MDY4MTA1MGUsIDB4MDI0OWMwZTYsIDB4MDQ4MTgzZTAsCisJMHgwNjQ4YzBlNiwgMHgwNTgxODM5YSwgMHgwNjhkMDM4OSwgMHgwMjM4NjAwMSwKKwkweDA3MDMwMDAwLCAweDAwNDkxMDdhLCAweDA3ODEwMzkwLCAweDAyMGVmMDgzLAorCTB4MDM4NjAzOWEsIDB4MDY0ODMwNzUsIDB4MDY4MTAzZWYsIDB4MDY3ODAwN2EsCisJMHgwNzAwMDAzNSwgMHgwM2ExODRjZiwgMHgwNTMwODAwMCwgMHgwNzA2MDAwMCwKKwkweDA2MDA5MDc5LCAweDA0YTAwNGRjLCAweDAyODAwM2VmLCAweDA0NDg4MDdhLAorCTB4MDY4MTAzOWUsIDB4MDY0ODMwNzUsIDB4MDU4MTA0ZjksIDB4MDQ0OGQwN2EsCisJMHgwNjgxMDNhMiwgMHgwNjQ4MzA3NSwgMHgwNTgxMDRmOSwgMHgwNjhkMDNhMiwKKwkweDAyMzg2MDAxLCAweDA3MDMwMDAwLCAweDA0NDRlMDdhLCAweDA2NDgzMDdhLAorCTB4MDQ4MTgzYzcsIDB4MDQ0ODcwN2EsIDB4MDY4MTAzZWEsIDB4MDY0OGYwN2EsCisJMHgwNzgxMDNiMiwgMHgwNWEwMDRjZiwgMHgwNDAwODA3OSwgMHgwNWEwMDRlZSwKKwkweDAwODY4M2MyLCAweDA1YTAwNGQ4LCAweDAyODAwM2VmLCAweDA1NjAxMDdiLAorCTB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDM0OWMwMDAsIDB4MDU4MTgzYzAsCisJMHgwNDYwMGU3OSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwgMHgwNjAwMDAzZCwKKwkweDA2NjAwYTc5LCAweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA2MDAwMDEwLAorCTB4MDI4MDAzZWYsIDB4MDA0NmUwN2EsIDB4MDI4MDAzZWEsIDB4MDYwMDkwMDgsCisJMHgwNTMwODAwMCwgMHgwNTAwNDAwMCwgMHgwNGEwMDRkYywgMHgwMjgwMDNlZiwKKwkweDA1NjAxNjdiLCAweDA1MGY4MGZmLCAweDAzMmZhMDExLCAweDA3MGZmMDAwLAorCTB4MDQ1MDA0MDEsIDB4MDMwNDYwZmYsIDB4MDYwZmYwMjUsIDB4MDA1NDA0NDYsCisJMHgwNzgyMDNkMSwgMHgwMzA0NjBmZiwgMHgwNDA5MjA0NiwgMHgwNWEwMDIxOCwKKwkweDA2NjAwNjc5LCAweDA1MGY4MGZmLCAweDAwMjAxMDA3LCAweDAxMmZhODBhLAorCTB4MDA0NjA0N2EsIDB4MDM0NjMwZmYsIDB4MDUwMDIwZmYsIDB4MDYwMDMwNTEsCisJMHgwNDYwMGU3OSwgMHgwNTBmODBmZiwgMHgwNzNmYTAxMiwgMHgwNjAwMDAwMSwKKwkweDAyODAwM2VmLCAweDAzM2U2YTAwLCAweDAyMDIwMDBlLCAweDAyMDc5MDUxLAorCTB4MDcwMDAwODgsIDB4MDc4ZDAzZTQsIDB4MDc0NGMwMDAsIDB4MDEwODgwMDAsCisJMHgwMzM4NjAwNiwgMHgwMzAxMDAwMCwgMHgwMjgwMDAxMCwgMHgwNWEwMDRjZiwKKwkweDA1MzA4MDAwLCAweDAzMDIwMDAwLCAweDA2MDA5MDc5LCAweDA0YTAwNGRjLAorCTB4MDMzZTZhMDAsIDB4MDMwMjAwMGEsIDB4MDIwNzkwNTEsIDB4MDI4MDAwMTAsCisJMHgwNDYwM2U3OSwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwNzBmZjAwMCwKKwkweDAxODYwNDBjLCAweDA1N2RmZWZmLCAweDA3ZmZmZmZmLCAweDA1ODEwNDBjLAorCTB4MDUwZjgwMDAsIDB4MDEyZmE4MTEsIDB4MDA3OWZlMDIsIDB4MDcwMDAwZmYsCisJMHgwNzdkNjZmZiwgMHgwNjAwMDBkYywgMHgwNzgxODQwYywgMHgwNjBmZjAwMSwKKwkweDAyODY4NDBkLCAweDA2NGIwMDAyLCAweDA2NDIwMDAyLCAweDA2MGZmMDAyLAorCTB4MDU1MDA0MDAsIDB4MDUwZjgwZmYsIDB4MDUwMDQwODQsIDB4MDczZmEwMGEsCisJMHgwNjAwMDAwMiwgMHgwN2MwMDAwMCwgMHgwNDYwMDIwMSwgMHgwNTBmODBmZiwKKwkweDA3M2ZhMDA5LCAweDA2MDAwMDAxLCAweDAwNzlmZTAyLCAweDA3MDAwMGZmLAorCTB4MDc3ZDcyZmYsIDB4MDcwMDAwZGQsIDB4MDc4MTg0MGMsIDB4MDY0YjAwMDIsCisJMHgwNjQyMDAwMiwgMHgwNjAwMDAwMSwgMHgwMTgwMDQwNiwgMHgwNjA1MDA0YywKKwkweDAxODAwNDFlLCAweDA0OTMwNDFhLCAweDA0YTAwNGQ1LCAweDA1NGJjNDUwLAorCTB4MDU4MTA0MjEsIDB4MDFkMDA0MjIsIDB4MDE4MDA0MjEsIDB4MDA4MDA0MzIsCisJMHgwMDgwMDQzNCwgMHgwMDgwMDQzMiwgMHgwMDgwMDRhNywgMHgwMTgwMDQzZiwKKwkweDAwODAwNDM0LCAweDAxODAwNDcxLCAweDAwODAwNDMyLCAweDAwODAwNDMyLAorCTB4MDA4MDA0YWIsIDB4MDA4MDA0MzIsIDB4MDE4MDA0YWYsIDB4MDA4MDA0YzQsCisJMHgwMTgwMDQ4OCwgMHgwMDgwMDQzMiwgMHgwMDgwMDQzMiwgMHgwMDIwOTQzMiwKKwkweDAxODAwNGU0LCAweDAzNzlmZjUwLCAweDA3MGZmZmZmLCAweDA2MGZmMDc5LAorCTB4MDU1YzA0NTAsIDB4MDQ4MTA0YTQsIDB4MDAyZmIwMDgsIDB4MDYwZmYwNzksCisJMHgwNTVjMDQ1MCwgMHgwNTgxMDRhMywgMHgwNGEwMDRjNywgMHgwMTgwMDQ5YywKKwkweDAxNzlmZTUwLCAweDA3MGZmZmZmLCAweDA3MDA1MGZmLCAweDA2MGZmMDc5LAorCTB4MDU1YzA0MDUsIDB4MDQ4MTA0NDksIDB4MDAyZmIwMDgsIDB4MDYwZmYwNzksCisJMHgwNTVjMDQwNSwgMHgwNzgxODRhMCwgMHgwNzBmZjA4NywgMHgwMTc5ODBmZiwKKwkweDA2MDAwNTA3LCAweDA2ODE4NDUxLCAweDAyMjAzMDQwLCAweDA1MDAyMDg3LAorCTB4MDA0OWQwMDIsIDB4MDQ4MTA0NmIsIDB4MDQ5MzA0NTgsIDB4MDEyNTcwMDAsCisJMHgwNzNjM2ZmZiwgMHgwNzAwMDAwZiwgMHgwNTJlNDAwMywgMHgwNzJlNTAzMCwKKwkweDAzMDRjMDUwLCAweDAyNDAwMDU3LCAweDA2NzQwMDU3LCAweDA2MDAwMDAyLAorCTB4MDY4MjAwMTYsIDB4MDQwMDIwODMsIDB4MDcwMDMwODQsIDB4MDQwMDQwODUsCisJMHgwNjYwMjI3OSwgMHgwNTBmODBmZiwgMHgwNjNmYTAxYSwgMHgwNjAwMDAwMSwKKwkweDA1YTAwNGNmLCAweDA3YTAwNTc4LCAweDAzM2U2YTAwLCAweDAzMDIwMDBhLAorCTB4MDYyZTUwMjAsIDB4MDAzZTQwMDIsIDB4MDcwMDBhMDAsIDB4MDI4MDAzZjEsCisJMHgwNzQyMDAwMywgMHgwNzgxODQ0ZSwgMHgwMDc5ODAwMiwgMHgwNjAwMDUwNywKKwkweDA2ODE4NDUxLCAweDAxODAwNDVjLCAweDA1OTMwNDc4LCAweDAxMjU3MDAwLAorCTB4MDczYzNmZmYsIDB4MDcwMDAwMGYsIDB4MDUyZTQwMDMsIDB4MDcyZTUwMzAsCisJMHgwMzA0YzA1MCwgMHgwNjc4MDBlNiwgMHgwNzAwMDA0MSwgMHgwNTgxMDQ3ZCwKKwkweDA3YTAwNTgxLCAweDA0ODE4MDE2LCAweDAwMmZiMDA4LCAweDA2NzgwMGU2LAorCTB4MDcwMDAwNDEsIDB4MDQ4MTA0ODMsIDB4MDdhMDA1ODEsIDB4MDQ4MTgwMTYsCisJMHgwNjJlNTAyMCwgMHgwMDNlNDAwMiwgMHgwNzAwMGEwMCwgMHgwM2UwMDAwMCwKKwkweDAyODAwMDEwLCAweDAzNzlmZjUwLCAweDA3MGZmZmZmLCAweDA2MGZmMDc5LAorCTB4MDU1YzA0NTAsIDB4MDc4MTg0OGUsIDB4MDI0NTUwN2EsIDB4MDAyZmIwMDgsCisJMHgwNjBmZjA3OSwgMHgwNTVjMDQ1MCwgMHgwNzgxODQ5MywgMHgwMjQ1NTA3YSwKKwkweDAwMmZiMDA4LCAweDA1NjAwZTUwLCAweDA1MGY4MGZmLCAweDAxMmZhODA5LAorCTB4MDI0NTUwMDEsIDB4MDU2MDBlNTAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MGEsCisJMHgwMDgwMDQ5ZCwgMHgwMDJmYjAwOCwgMHgwMDNlNDAwMiwgMHgwNzAwMGEwMCwKKwkweDAyODAwMDE2LCAweDA3OTM4NGEzLCAweDA2MmU1MDIwLCAweDA0MmU0MDAyLAorCTB4MDAyZmIwMDgsIDB4MDEzZTQwMDAsIDB4MDUwMDBlMDAsIDB4MDI4MDAwMTYsCisJMHgwMTc5ZmU1MCwgMHgwNzBmZmZmZiwgMHgwMTAyMTBmZiwgMHgwMjgwMDAxNiwKKwkweDAxNzlmZTUwLCAweDA3MGZmZmZmLCAweDA1MDM0MGZmLCAweDAwODAwNDlkLAorCTB4MDE3OWZlNTAsIDB4MDcwZmZmZmYsIDB4MDEwMmUwZmYsIDB4MDc2MDI4MmUsCisJMHgwNTBmODBmZiwgMHgwNTIyMjAwMCwgMHgwNzIyMzAwMCwgMHgwNTIyNDAwMCwKKwkweDA3MjI1MDAwLCAweDA3MjI2MDAwLCAweDA1MjI3MDAwLCAweDA1MjI4MDAwLAorCTB4MDcyMjkwMDAsIDB4MDcyMmEwMDAsIDB4MDUyMmIwMDAsIDB4MDYzZmEwNTEsCisJMHgwNzAwMDAxMSwgMHgwMjAyYzAyNiwgMHgwNTIyZDAwMCwgMHgwNTJlNDAwYywKKwkweDAyODAwMDE2LCAweDAzMDQzMGQ0LCAweDA2MmU1MDA4LCAweDAwODAwMTc2LAorCTB4MDU2MDBlNTAsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDM0NjAwMDAsCisJMHgwMTgwMDRkMiwgMHgwMjQ2MDA3YSwgMHgwMDQ1MjA3YSwgMHgwMDgwMDRkMCwKKwkweDAyNDYwMDdhLCAweDA2MDAwMDdhLCAweDA0NjAwZTc5LCAweDA1MGY4MGZmLAorCTB4MDMyZmEwMGEsIDB4MDdjMDAwMDAsIDB4MDI5Mjg0ZDUsIDB4MDcwNTAwZTEsCisJMHgwN2MwMDAwMCwgMHgwMjQ1ZjAwOCwgMHgwNDg0MDRkOSwgMHgwMjBlMDAwOCwKKwkweDA3YzAwMDAwLCAweDA3MGZmMDA5LCAweDA2NWEwMDA4LCAweDA1ODQwNGRlLAorCTB4MDIwZTAwMDgsIDB4MDdjMDAwMDAsIDB4MDU4NDA0ZTEsIDB4MDIwZTAwMDgsCisJMHgwN2MwMDAwMCwgMHgwNTMwODAwMCwgMHgwNTAwZDAwMCwgMHgwNGEwMDRkYywKKwkweDA0YTAwNGU5LCAweDAyODAwMDEwLCAweDA1MmU0MzAwLCAweDA3MmU1MDBjLAorCTB4MDczYzNmZmYsIDB4MDcwMDAwMGYsIDB4MDdjMDAwMDAsIDB4MDY2MDIyMDgsCisJMHgwNTBmODBmZiwgMHgwMzJmYTAxMSwgMHgwNzZhMDAwMCwgMHgwNjgxODRmNywKKwkweDA2NmEwMDAxLCAweDA0ODEwNGY3LCAweDA0MDAyMDUxLCAweDA3YzAwMDAwLAorCTB4MDAyMDIwMDEsIDB4MDdjMDAwMDAsIDB4MDY0ODMwN2EsIDB4MDBhMTg2MDgsCisJMHgwNWEwMDRjYywgMHgwNTMwODAwMCwgMHgwNTAwMTAwMCwgMHgwNjAwOTA3OSwKKwkweDA0YTAwNGRjLCAweDAzODAwNTYwLCAweDAyNDljMGU2LCAweDA1ODEwNGY5LAorCTB4MDI4MDAzNmQsIDB4MDY0ODMwN2EsIDB4MDc4MTgxOTYsIDB4MDVhMDA0Y2YsCisJMHgwNTMwODAwMCwgMHgwMzAxMzAwMCwgMHgwMzIwOTAwNiwgMHgwNGEwMDRkYywKKwkweDAzM2U2MDAwLCAweDA3MDMwMDAwLCAweDAyODAwMzQ1LCAweDAyNDkwMDc1LAorCTB4MDc4MTA1MWUsIDB4MDQwMDIwODksIDB4MDQ3ODAxMDIsIDB4MDdmMDAwMDAsCisJMHgwNTAwMTA4OCwgMHgwN2EwMDU2ZiwgMHgwNDc0MDEwMSwgMHgwMzEwMDAwMCwKKwkweDA2MGZmMDAyLCAweDA0NWMwNDAxLCAweDA0ODE4NTFmLCAweDAwMDg4MDAxLAorCTB4MDMzZTYwMDAsIDB4MDcwMDAwYzAsIDB4MDM4MDA1NWMsIDB4MDdmMDAwMDAsCisJMHgwMjIwOTUxZiwgMHgwMTgwMDRlNCwgMHgwNjQ4MzA3YSwgMHgwNzgxMDUyNywKKwkweDA2NzgwMDc1LCAweDA2MDAwMDA3LCAweDA1ODE4NTJlLCAweDA2YTAwNjA4LAorCTB4MDY0ODYwNzUsIDB4MDY4MTgxOTQsIDB4MDI0OTAwNzUsIDB4MDc4MTgxOWEsCisJMHgwNDQ4NzA3NSwgMHgwNTgxODUzNiwgMHgwMjgwMDUzZCwgMHgwNTMwODAwMCwKKwkweDAzMDEwMDAwLCAweDA2MDA5MDc5LCAweDA0YTAwNGRjLCAweDAyODAwMDEwLAorCTB4MDQ0OGUwZTYsIDB4MDQ4MTgzNTIsIDB4MDA4MDAxOTIsIDB4MDUzMDgwMDAsCisJMHgwNTAwZTAwMCwgMHgwNjAwOTA3OSwgMHgwNGEwMDRkYywgMHgwNDAwODA4OSwKKwkweDA1YTAwNGUxLCAweDAzODAwNTVjLCAweDA1YTAwNGNjLCAweDA1MzA4MDAwLAorCTB4MDcwMGYwMDAsIDB4MDYwMDkwNzksIDB4MDcwMDAwODgsIDB4MDZhMDA1NDUsCisJMHgwNGEwMDRkYywgMHgwMjgwMDAxMCwgMHgwMzM4NjAwMCwgMHgwNzAzMDAwMCwKKwkweDA3ZjAwMDAwLCAweDA3OGQwNTQ4LCAweDAzM2U2YTAwLCAweDAyMDIwMDBlLAorCTB4MDIwNzkwNTEsIDB4MDQ0OGIwNzUsIDB4MDc4MTA1NTMsIDB4MDI0OTMwNzUsCisJMHgwNzgxMDU1MywgMHgwNTMwMTAwNSwgMHgwMzAxMDAwMCwgMHgwMzgwMDU1NSwKKwkweDA1MzAxMDA2LCAweDAzMDEwMDAwLCAweDA1MDAyMDg3LCAweDA2NDg1MDAyLAorCTB4MDU4MTg1NTUsIDB4MDc0NGMwMDAsIDB4MDEwODgwMDAsIDB4MDIwODYwMDEsCisJMHgwN2MwMDAwMCwgMHgwNTAwMTA4OCwgMHgwN2EwMDU2ZiwgMHgwNjQ0YzAwMSwKKwkweDAwMDg4MDAxLCAweDAzM2U2YTAwLCAweDAyMDIwMDBlLCAweDAwNDkyMGU2LAorCTB4MDU4MTg1NjUsIDB4MDIwNzkwNTEsIDB4MDc4ZDA1NjUsIDB4MDYwZmYwODksCisJMHgwMzQ5OTBmZiwgMHgwNzgxMDU2YywgMHgwMzM4NjAwNSwgMHgwMzAxMDAwMCwKKwkweDAyODAwMDEwLCAweDAzMzg2MDA2LCAweDAzMDEwMDAwLCAweDAyODAwMDEwLAorCTB4MDc4ZDA1NmYsIDB4MDMzODYwMDAsIDB4MDcwMzAwMDAsIDB4MDdmMDAwMDAsCisJMHgwNjhkMDU3MywgMHgwNzBmZjA4NywgMHgwNzQ4NTBmZiwgMHgwNTgxODU3NCwKKwkweDA3YzAwMDAwLCAweDA3OGQwNTc4LCAweDAyMzg2MDAxLCAweDA3MDMwMDAwLAorCTB4MDdmMDAwMDAsIDB4MDY4ZDA1N2MsIDB4MDcwZmYwODcsIDB4MDc0ODUwZmYsCisJMHgwNTgxODU3ZCwgMHgwN2MwMDAwMCwgMHgwNTAwMjA4NywgMHgwMDQ5ZDAwMiwKKwkweDA1ODE4NTkwLCAweDAwMmZiMDA4LCAweDA2NzgwMGU2LCAweDA3MDAwMDQxLAorCTB4MDAyZmIwMDgsIDB4MDU4MTg1OTAsIDB4MDdhMDA1YTYsIDB4MDQ0OGUwMDIsCisJMHgwNzgxMDU5MywgMHgwNjQ4YTAwMiwgMHgwNDgxODU5ZCwgMHgwNjQ4NjAwMiwKKwkweDA2ODEwNTk3LCAweDAyNDAwMDU3LCAweDA1NmEwMmZmLCAweDA3YzAwMDAwLAorCTB4MDdhMDA1YTYsIDB4MDY3ODgxMDIsIDB4MDYwMDAwMDQsIDB4MDU4MTg1OTAsCisJMHgwNDAwMjA4OSwgMHgwNzBmZjBkNCwgMHgwNDVjMDQwMiwgMHgwNzc4MDBmZiwKKwkweDA3ZjAwMDAwLCAweDA1ODE4NTkwLCAweDAwMjAyMDEwLCAweDAzOGMwNTkwLAorCTB4MDdmMDAwMDAsIDB4MDY0MjAwMDIsIDB4MDQ4MTg1OWUsIDB4MDdhMDA1NzgsCisJMHgwMzNlNmEwMCwgMHgwMzAyMDAwYSwgMHgwN2MwMDAwMCwgMHgwN2YwMDAwMCwKKwkweDA2MGZmMGEyLCAweDA1MDAyMGZmLCAweDA2MGZmMGEyLCAweDA0NWMwNDAyLAorCTB4MDQ4MTg1YTcsIDB4MDdjMDAwMDAsIDB4MDVhMDAyMTgsIDB4MDM0OTUwNDcsCisJMHgwNzgxMDViMiwgMHgwMzIwOTAxZCwgMHgwMjgwMDYwNCwgMHgwMjIwOTAxZiwKKwkweDAyODAwNjA0LCAweDAxNDk4MGU0LCAweDA0ODE4MDEwLCAweDAxM2U0MDAwLAorCTB4MDcwMDMwMDAsIDB4MDU2MDBlMzUsIDB4MDUwZjgwZmYsIDB4MDdhMDA2ZmMsCisJMHgwMTIwODAwMywgMHgwNWEwMDRlMSwgMHgwMzgwMDVjYywgMHgwMzIwOTAwOSwKKwkweDAyODAwNjA0LCAweDAzMjA5MDExLCAweDAyODAwNjA0LCAweDAyMjA5MDA3LAorCTB4MDI4MDA2MDQsIDB4MDMyMDkwMDMsIDB4MDI4MDA2MDQsIDB4MDA0OTgwNDMsCisJMHgwNTgxODViZSwgMHgwMDQ5NzA0MywgMHgwNDgxODVjMiwgMHgwMjIwOTAwMSwKKwkweDAyODAwNjA0LCAweDAyMjA5MDBkLCAweDAyODAwNjA0LCAweDAzMjA5MDBmLAorCTB4MDI4MDA2MDQsIDB4MDM0OTMwMDAsIDB4MDY4MTA1ZDUsIDB4MDI3YzAwNDUsCisJMHgwNzBhMDAwMCwgMHgwNzgxMDVkZSwgMHgwMjIwOTAwYiwgMHgwMjgwMDYwNCwKKwkweDAyMjA5MDEzLCAweDA1MzA4MDAwLCAweDAxMDEyMDAwLCAweDA0YTAwNGRjLAorCTB4MDA4MDAxODMsIDB4MDMyMDkwMDUsIDB4MDI4MDA2MDQsIDB4MDcyZTUwMGMsCisJMHgwMDIwODAwMiwgMHgwNWEwMDRlMSwgMHgwMjgwMDAxMCwgMHgwMjIwOTAxNSwKKwkweDAyODAwNjA0LCAweDA3MmQ2MDAwLCAweDA1MzA4MDAwLCAweDA1MDA3MDAwLAorCTB4MDdmMDAwMDAsIDB4MDcwMDkwZDEsIDB4MDM3OWZmMDksIDB4MDcwMGZmZmYsCisJMHgwNGEwMDRkYywgMHgwMzIwOTAxNywgMHgwMjgwMDYwNCwgMHgwMzNlNTAwMCwKKwkweDA2MDAwMDgwLCAweDAyMjA5MDE5LCAweDAyODAwNjA0LCAweDA3MmQ2MDAwLAorCTB4MDMzZTUwMDAsIDB4MDYwMDAwODAsIDB4MDdmMDAwMDAsIDB4MDYwZmYwZDAsCisJMHgwMTc5ZmVmZiwgMHgwNzAwZmZmZiwgMHgwNTdkZmVmZiwgMHgwNzAwZmZmZiwKKwkweDA0ODE4MDEwLCAweDAyNDAwMDU4LCAweDAwNjQyMDU4LCAweDA2ODIwMDEwLAorCTB4MDMzZTUwMDAsIDB4MDYwMDAwODAsIDB4MDQwNTgwNTEsIDB4MDMyMDkwMWIsCisJMHgwMjgwMDYwNCwgMHgwNTMwODAwMCwgMHgwMTAxMjAwMCwgMHgwNGEwMDRkYywKKwkweDAwODAwMTc2LCAweDA1YTAwMjE4LCAweDA1MzA4MDAwLCAweDA1MDA4MDAwLAorCTB4MDYwMDkwNzksIDB4MDRhMDA0ZGMsIDB4MDdjMDAwMDAsIDB4MDM0OTAwZTQsCisJMHgwNTgxODYxOCwgMHgwMTNlNDAwMCwgMHgwNzAwMDBjMCwgMHgwN2YwMDAwMCwKKwkweDAzNDkwMGU0LCAweDA0ODE4NjE2LCAweDA3YzAwMDAwLCAweDAxM2U0MDAwLAorCTB4MDYwMDAwODAsIDB4MDdmMDAwMDAsIDB4MDdmMDAwMDAsIDB4MDdmMDAwMDAsCisJMHgwMzQ5MDBlNCwgMHgwNjgxMDYxMCwgMHgwMzgwMDYxOCwgMHgwNzJkNjAwMCwKKwkweDAwNDk4MDQzLCAweDA2ODEwNjMyLCAweDA2MGZmMGQwLCAweDAxNzlmZWZmLAorCTB4MDcwMGZmZmYsIDB4MDU3ZGZlZmYsIDB4MDcwMGZmZmYsIDB4MDU4MTg1ZTIsCisJMHgwNTBmODAzMCwgMHgwMzJmYTAwOSwgMHgwMzc5ZmYwMCwgMHgwNzAwZmZmZiwKKwkweDA3MGZmMGQxLCAweDAxNzlmZWZmLCAweDA3MDBmZmZmLCAweDA1NWMwNDAwLAorCTB4MDc4MTA1ZTIsIDB4MDQwMDQwNTEsIDB4MDI4MDA2N2EsIDB4MDZhMDA2ZGMsCisJMHgwNjJkNjAwMSwgMHgwMjBlZjAwNCwgMHgwMzg2MDVlNCwgMHgwNjYwMDAwNCwKKwkweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDA3NGIwMDAwLCAweDA1MDAyMDAwLAorCTB4MDc2OWZmMDAsIDB4MDE2NDA4MDAsIDB4MDc4MjA1ZTQsIDB4MDE2NDBlMDAsCisJMHgwNTgyODVlNCwgMHgwNzBmZjAzNiwgMHgwNDVjMDQwNCwgMHgwNTgxODY0ZCwKKwkweDA3MmQ2MDAwLCAweDA1MGY4MDMwLCAweDAzMmZhMDA5LCAweDAzNzlmZjAwLAorCTB4MDcwMGZmZmYsIDB4MDcwZmYwZDEsIDB4MDE3OWZlZmYsIDB4MDcwMGZmZmYsCisJMHgwNTVjMDQwMCwgMHgwNzgxMDVlMiwgMHgwNDQ4MjAzNCwgMHgwNzgxMDVmZiwKKwkweDA2NDgzMDM0LCAweDA1ODE4NWZmLCAweDA3MGZmMGQ0LCAweDA3NzgwMGZmLAorCTB4MDcwMDAwZjAsIDB4MDM3YzAwZmYsIDB4MDYwMDAwMTAsIDB4MDY4MTA2N2EsCisJMHgwNmEwMDZkNiwgMHgwMjQ5MDBlNSwgMHgwNjgxMDY1ZCwgMHgwMzNlNTAwMCwKKwkweDA2MDAwMDgwLCAweDAyODAwMDEwLCAweDA0NjAxYzA0LCAweDA1MGY4MGZmLAorCTB4MDUzZmE4MDksIDB4MDYwMDAwMjAsIDB4MDMwZWYwNDEsIDB4MDM4NjA1ZWUsCisJMHgwNjJkNjAwMiwgMHgwNTYwMmE0MSwgMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwKKwkweDA2MGZmMGQwLCAweDA3NGIwMGZmLCAweDA0NWMwNDAxLCAweDA1ODE4Njc4LAorCTB4MDYyZDYwMDEsIDB4MDc2MDI4NDEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCisJMHgwNjAwMDAwMSwgMHgwNzBmZjBkMSwgMHgwNTRiODBmZiwgMHgwNzRiMDAwMywKKwkweDA1NWMwNDAzLCAweDA1ODE4Njc4LCAweDAzM2U1MDAwLCAweDA2MDAwMDgwLAorCTB4MDA4MDA3MGUsIDB4MDc2MDAwNDEsIDB4MDI4MDA2NWUsIDB4MDZhMDA2ZDYsCisJMHgwMjQ5MDBlNSwgMHgwNjgxMDY4MCwgMHgwMzNlNTAwMCwgMHgwNjAwMDA4MCwKKwkweDAyODAwMDEwLCAweDA2YTAwNmMyLCAweDAzMGVmMDQxLCAweDAyODYwNWYyLAorCTB4MDQwNTgwNTEsIDB4MDcyZDYwMDAsIDB4MDU2MDEwNDEsIDB4MDUwZjgwZmYsCisJMHgwMTJmYTgwOSwgMHgwNjAwYTBkMCwgMHgwNTAwYjBkMSwgMHgwNjJkNjAwMSwKKwkweDA3ZjAwMDAwLCAweDA3ZjAwMDAwLCAweDA2MDBjMGQwLCAweDA1MDBkMGQxLAorCTB4MDYyZDYwMDIsIDB4MDI3OWZmMGQsIDB4MDdmZjAwMDAsIDB4MDQ0ZDgwMGQsCisJMHgwNjBmZjBkMCwgMHgwNzRiMDBmZiwgMHgwNjVhMDAwZCwgMHgwNjYwMTIwMSwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDIyLCAweDA3MDAwMDA1LCAweDAwNzlmZTBkLAorCTB4MDcwMDAwZmYsIDB4MDUwMDIwZmYsIDB4MDU2MDJhNDEsIDB4MDUwZjgwZmYsCisJMHgwNzNmYTAwYSwgMHgwNjAwMDAwMSwgMHgwMjBlZjAwNCwgMHgwMjg2MDZiZiwKKwkweDA0NjAxYzA0LCAweDA1MGY4MGZmLCAweDA1M2ZhODA5LCAweDA2MDAwMDAxLAorCTB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsIDB4MDYwMDAwMjAsIDB4MDc2MDI4NDEsCisJMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwgMHgwNjAwMDAwMSwgMHgwMjc5ZmYwMiwKKwkweDA3MDAwMGZmLCAweDA2NzgwMDBkLCAweDA3MDBmZjAwLCAweDA2NWEwMDAyLAorCTB4MDc2MDI4NDEsIDB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDYwMDAwMDEsCisJMHgwNzYwMDA0MSwgMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwgMHgwNjAwMDAwMSwKKwkweDA3NjAxMjQxLCAweDA1MGY4MGZmLCAweDA3M2ZhMDBhLCAweDA2MDAwMDAyLAorCTB4MDMzZTUwMDAsIDB4MDYwMDAwODAsIDB4MDA4MDA3MGUsIDB4MDQwZjgwMzIsCisJMHgwNzNmYTAxMSwgMHgwNjAwMDAwMSwgMHgwNjBmZjAwMiwgMHgwNTVjMDQwMywKKwkweDA1ODE4NmNhLCAweDAwMDQxMDUxLCAweDA3YzAwMDAwLCAweDA0NjAwNDAyLAorCTB4MDQ1MDA0MzIsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDYwMDAwMjAsCisJMHgwMDQwMDQwMiwgMHgwMTY4MGVmZiwgMHgwNzAwMzBmZiwgMHgwNDBmODAzMiwKKwkweDA1M2ZhODBhLCAweDA2MDAwMDAxLCAweDA3YzAwMDAwLCAweDAyNDkwMGU1LAorCTB4MDY4MTA2ZDksIDB4MDdjMDAwMDAsIDB4MDMzZTUwMDAsIDB4MDcwMDAwYzAsCisJMHgwN2MwMDAwMCwgMHgwNTAwNDAzNiwgMHgwNjAwMDBkMCwgMHgwMTc5ZmUwMCwKKwkweDA3MDBmZmZmLCAweDA1N2RmZWZmLCAweDA3MDBmZmZmLCAweDA2ODEwNmZiLAorCTB4MDcwMDAwZDEsIDB4MDM3OWZmMDAsIDB4MDcwMGZmZmYsIDB4MDYwMDUwNTEsCisJMHgwNjBmZjAzMSwgMHgwNTUwMDQwNSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwKKwkweDA2MDAwMDAyLCAweDAyMGVmMDA0LCAweDAzODYwNmY1LCAweDA0NjAwNDA0LAorCTB4MDUwZjgwZmYsIDB4MDEyZmE4MDksIDB4MDA3OWZlMDEsIDB4MDcwMGZmZmYsCisJMHgwNTVjMDQwMCwgMHgwNjgxMDZmYiwgMHgwMTQwMDQwNSwgMHgwNzAwNTBmZiwKKwkweDA1N2RlMGZmLCAweDA2MDAwMDA3LCAweDA1ODE4NmU3LCAweDA0MDA0MDUxLAorCTB4MDdjMDAwMDAsIDB4MDcyZDYwMDAsIDB4MDdmMDAwMDAsIDB4MDdmMDAwMDAsCisJMHgwMDAxMTBkMCwgMHgwMTAxMjBkMSwgMHgwNjJkNjAwMSwgMHgwN2YwMDAwMCwKKwkweDA3ZjAwMDAwLCAweDAyMDEzMGQwLCAweDAxMDE0MGQxLCAweDA2MmQ2MDAyLAorCTB4MDEwMTcwZDQsIDB4MDdmMDAwMDAsIDB4MDIwMTUwZDAsIDB4MDMwMTYwZDEsCisJMHgwNTNmYTgzYSwgMHgwNjAwMDAwOCwgMHgwN2MwMDAwMCwgMHgwNzYwMGM0MSwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDA5LCAweDA2MDAwMDAxLCAweDA0NzgwMTAyLAorCTB4MDdmZmZmMDAsIDB4MDQ2YTA3MDIsIDB4MDUwZjgwZmYsIDB4MDczZmEwMGEsCisJMHgwNjAwMDAwMSwgMHgwNTYwMGU0MSwgMHgwNTBmODBmZiwgMHgwMzJmYTA2OSwKKwkweDAzODAwMDUzLCAweGJhNmI0ZTM0LCAweDAyODAwMDA0LCAweDAwMDAwMDAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDA1MTgsIDB4MDQwZjgwMWYsIDB4MDEyZmE4YzksCisJMHgwNDBmODAxZiwgMHgwNzNmYTA4MSwgMHgwNjAwMDAxMCwgMHgwMzIwMDAwNSwKKwkweDA3NDIwMDAwLCAweDA1MGZiMDAwLCAweDA0MGY4MDFmLCAweDA3M2ZhMDExLAorCTB4MDYwMDAwMzgsIDB4MDQwZjgwMWYsIDB4MDUzZmE4NTksIDB4MDcwMDAwM2EsCisJMHgwNTBmZTAwMCwgMHgwNTgxODAwYSwgMHgwNjg0MDAzZCwgMHgwNDk1ODAxOSwKKwkweDAzMGUwMDExLCAweDA3MmU0MjAwLCAweDAzODAwMDE0LCAweDAyOTEwMDFmLAorCTB4MDUwMDEwYzAsIDB4MDQ0ODIwMDEsIDB4MDU4MTgwZTgsIDB4MDY0ODMwMDEsCisJMHgwNzgxODE0YiwgMHgwMjkyMDAyOSwgMHgwNjhiMDAyOSwgMHgwMThhMDE1MCwKKwkweDA1MDAxMGMwLCAweDA2NzgwMDAxLCAweDA1MDAwN2MwLCAweDA2ODE4MjIzLAorCTB4MDY3ODAwMDEsIDB4MDUwMGY4MDAsIDB4MDc4MTgyNjMsIDB4MDM5MTAwMzAsCisJMHgwNDBmZTAyOSwgMHgwMzg2MDAzMCwgMHgwNzZjMDAxZCwgMHgwNDgxMDI5NCwKKwkweDA3NmMwYTFkLCAweDA0ODEwMmI5LCAweDAyOTIwMDNkLCAweDA0MGZlMDJmLAorCTB4MDI4NjAwM2QsIDB4MDYwMDAwMTMsIDB4MDUwZmIwMDAsIDB4MDY2YzAwNzMsCisJMHgwNjgxMDNjMiwgMHgwMjk3MDAzZCwgMHgwMTQ5MjBlNCwgMHgwNDgxODAzZCwKKwkweDAzNDAwMDAwLCAweDA3NmMwYTAwLCAweDA0ODE4MDM0LCAweDA3OTYwMDNmLAorCTB4MDNiOTAwYjgsIDB4MDU5MDgwMTQsIDB4MDEwMTcwZTEsIDB4MDc3ODAwMTcsCisJMHgwM2UwMDAwMCwgMHgwNjgxMDA5MiwgMHgwNTAwMTBmZiwgMHgwMTc5ZmUxNywKKwkweDAzMWZmZmZmLCAweDA3MDAwMGZmLCAweDA1NjAwODAwLCAweDA1MGY4MGZmLAorCTB4MDczZmEwMDksIDB4MDYwMDAwMDEsIDB4MDY3ODAwMDIsIDB4MDI4MDAwNDAsCisJMHgwMzdjMDBmZiwgMHgwMzgwMDAwMCwgMHgwNjgxMDA1ZSwgMHgwMjQ5ZjAwMiwKKwkweDA2ODEwMGFiLCAweDA0NDhlMDAyLCAweDA2ODEwMDVlLCAweDA3NjAwYzAwLAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMDksIDB4MDYwMDAwMDEsIDB4MDY3ODAwMDIsCisJMHgwN2ZmZmYwMCwgMHgwMzdjMDBmZiwgMHgwNTAwMDIwMCwgMHgwNDgxODBhYiwKKwkweDA2NGJkNDAxLCAweDAzZDAwMDYwLCAweDAzODAwMGE5LCAweDAyODAwMDY4LAorCTB4MDM4MDAwNzIsIDB4MDI4MDAwN2MsIDB4MDI4MDAwODYsIDB4MDM4MDAwOTAsCisJMHgwMzgwMDBhOSwgMHgwMzgwMDBhOSwgMHgwNTBmZTAyNywgMHgwMTg2ODA2YywKKwkweDAxMDI4MDAwLCAweDAzODAwMDZmLCAweDA3NjAwMDI3LCAweDA1MGY4MGZmLAorCTB4MDMyZmEwMGEsIDB4MDEwMjcwMDAsIDB4MDI0MDAwMjksIDB4MDI4MDAwYWIsCisJMHgwNDBmZTAyNSwgMHgwMDg2ODA3NiwgMHgwMzAyNjAwMCwgMHgwMjgwMDA3OSwKKwkweDA2NjAwMDI1LCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLCAweDAzMDI1MDAwLAorCTB4MDI0MDAwMjksIDB4MDI4MDAwYWIsIDB4MDUwZmUwMjEsIDB4MDA4NjgwODAsCisJMHgwMTAyMjAwMCwgMHgwMjgwMDA4MywgMHgwNzYwMDAyMSwgMHgwNTBmODBmZiwKKwkweDAzMmZhMDBhLCAweDAxMDIxMDAwLCAweDAyNDAwMDI5LCAweDAyODAwMGFiLAorCTB4MDQwZmUwMjMsIDB4MDA4NjgwOGEsIDB4MDEwMjQwMDAsIDB4MDM4MDAwOGQsCisJMHgwNjYwMDAyMywgMHgwNTBmODBmZiwgMHgwMzJmYTAwYSwgMHgwMzAyMzAwMCwKKwkweDAyNDAwMDI5LCAweDAyODAwMGFiLCAweDA2YTAwMGM4LCAweDAyODAwMGFiLAorCTB4MDE2NDA4MTcsIDB4MDU4MjgwYTksIDB4MDcwZmYwMTcsIDB4MDNkMDAwOTYsCisJMHgwMjgwMDA5ZSwgMHgwMzgwMDBhMCwgMHgwMzgwMDBhMywgMHgwMzgwMDBhNiwKKwkweDAzODAwMGE5LCAweDAzODAwMGE5LCAweDAzODAwMGE5LCAweDAzODAwMGE5LAorCTB4MDNlMDAwMDAsIDB4MDM4MDAwMTQsIDB4MDU5MDgwYTAsIDB4MDMwMTYwZTEsCisJMHgwMjgwMDBhYiwgMHgwNTkwODBhMywgMHgwMzAxNTBlMSwgMHgwMjgwMDBhYiwKKwkweDA1OTA4MGE2LCAweDAxMDE0MGUxLCAweDAyODAwMGFiLCAweDA2MGZjMDEzLAorCTB4MDZhMDA1MTAsIDB4MDM4MDAwMTQsIDB4MDcyZTQ4MDAsIDB4MDcwMDAwMTIsCisJMHgwMzgwMDBiYiwgMHgwNzQ3ZjAwMCwgMHgwNTYwMDgwMCwgMHgwNTBmODBmZiwKKwkweDAxMmZhODA5LCAweDAyNDlmMDAxLCAweDA3ODEwMGJiLCAweDAxMDEyMDAwLAorCTB4MDUyZTRjMDAsIDB4MDdjMDAwMDAsIDB4MDcwMDAwZWIsIDB4MDM0OWYwMDAsCisJMHgwNTgxODBhZiwgMHgwNTYwMDgwMCwgMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwKKwkweDA0NDhlMDAxLCAweDA2ODEwMGMxLCAweDA3YzAwMDAwLCAweDAwNzljMTAxLAorCTB4MDdmZmZmZmYsIDB4MDI3YTRiMDEsIDB4MDM4MDAwMDAsIDB4MDU2MDA4MDAsCisJMHgwNTBmODBmZiwgMHgwMTJmYTgwYSwgMHgwNzYwMGMwMCwgMHgwNTBmODBmZiwKKwkweDAxMmZhODIxLCAweDA2NzgwMDAxLCAweDA3ZmZmZjAwLCAweDAzN2MwMGZmLAorCTB4MDUwMDA3MDAsIDB4MDc4MTAwZGQsIDB4MDY2MDE4MDQsIDB4MDcwMDMwZmYsCisJMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwgMHgwNTAwMjAwMCwgMHgwNTBmODAwMywKKwkweDA3M2ZhMDBhLCAweDA2MDAwMDAxLCAweDA0MGZlMDAxLCAweDAzODYwMGRlLAorCTB4MDQ2MDAyMDEsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMGEsIDB4MDdjMDAwMDAsCisJMHgwNTBmZTAyZSwgMHgwMDg2ODBlMywgMHgwMTAyZTAwMCwgMHgwMzAyZjAwMCwKKwkweDAzODAwMGU3LCAweDA3NjAwMDJlLCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLAorCTB4MDEwMmUwMDAsIDB4MDdjMDAwMDAsIDB4MDIyYzAwMDQsIDB4MDU2YzA0MWQsCisJMHgwNzgxMDBmYywgMHgwNTZjMDIxZCwgMHgwNDgxMDExMywgMHgwNTZjMDgxZCwKKwkweDA0ODEwMTI1LCAweDA3NmMwNjFkLCAweDA1ODEwMTNmLCAweDA1MjFkMDAwLAorCTB4MDIwMmMwMTMsIDB4MDIwMmEwMTMsIDB4MDIwMjAwMTMsIDB4MDQ2MDAyMWEsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwgMHgwNzAwMDAwOSwgMHgwM2I2MDBhYywKKwkweDA0ODQ4MDFmLCAweDAyODAwMDNkLCAweDA0MGZlMDJhLCAweDAyODYwMGYyLAorCTB4MDYwMDAwMTMsIDB4MDQwMDEwMTMsIDB4MDU2MDEwMmIsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAxMiwgMHgwNjQyMDAyOSwgMHgwNjYwMDAyYSwgMHgwNTBmODBmZiwKKwkweDA1M2ZhODA5LCAweDA2MDAwMDAxLCAweDA1MGZlMDAzLCAweDAwODYwMTEwLAorCTB4MDEwMjgwMDMsIDB4MDY2MDAwMmEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsCisJMHgwNzAwMDAwOSwgMHgwMDgwMDE0MCwgMHgwMDAyODAxMywgMHgwMDAyNzAxMywKKwkweDAwODAwMTQwLCAweDA0MGZlMDJhLCAweDAyODYwMGYxLCAweDA2NDIwMDI5LAorCTB4MDY2MDAwMmEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDYwMDAwMDEsCisJMHgwNTBmZTAwMywgMHgwMTg2MDEyMiwgMHgwMzAyNjAwMywgMHgwNjYwMDAyYSwKKwkweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LCAweDAwODAwMTQwLAorCTB4MDIwMjYwMTMsIDB4MDIwMjUwMTMsIDB4MDA4MDAxNDAsIDB4MDQwZmUwMmEsCisJMHgwMjg2MDBmMSwgMHgwNjQyMDAyOSwgMHgwNjYwMDAyYSwgMHgwNTBmODBmZiwKKwkweDA1M2ZhODA5LCAweDA2MDAwMDAxLCAweDA1MGZlMDAzLCAweDAwODYwMTM0LAorCTB4MDEwMjIwMDMsIDB4MDY2MDAwMmEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsCisJMHgwNzAwMDAwOSwgMHgwMTgwMDEzNiwgMHgwMDAyMjAxMywgMHgwMDAyMTAxMywKKwkweDA2NDdmMDIwLCAweDAwN2EwMTIwLCAweDA0MDAwMTAxLCAweDA0YTAwMjg1LAorCTB4MDQwMDgwMmEsIDB4MDVhMDA0ZjUsIDB4MDA5NDgwZjEsIDB4MDUyMWQwMDUsCisJMHgwMjgwMDBmMiwgMHgwMzgwMDBmYSwgMHgwNjQ3ZjAyMCwgMHgwNjQ4NjAyMCwKKwkweDA2ODE4MTQ1LCAweDA0YTAwMjg1LCAweDAyODAwMGYxLCAweDAwN2EwMTIwLAorCTB4MDQwMDAxMDEsIDB4MDRhMDAyODUsIDB4MDQwMDgwMmEsIDB4MDVhMDA0ZjUsCisJMHgwMjgwMDBmMSwgMHgwNDBmZDAyYSwgMHgwNTJlNDAwMywgMHgwMDIwODAxMCwKKwkweDA1YTAwNGY1LCAweDAzODAwMGZhLCAweDAwMDE4MDk4LCAweDA3NDgwMDE4LAorCTB4MDY4MTgxNjEsIDB4MDU0ODEwMTgsIDB4MDc4MTgxNWYsIDB4MDU0ODIwMTgsCisJMHgwNjgxODE1ZCwgMHgwNzQ4MzAxOCwgMHgwNjgxODE1YiwgMHgwMDJmYjAwNCwKKwkweDAwODAwMTYyLCAweDAxMmZiMDAzLCAweDAwODAwMTYyLCAweDAwMmZiMDAyLAorCTB4MDA4MDAxNjIsIDB4MDAyZmIwMDEsIDB4MDA4MDAxNjIsIDB4MDEyZmIwMDAsCisJMHgwMTc5ZmU3OCwgMHgwNzAwMDBmZiwgMHgwMzAxOTBmZiwgMHgwMDAxNzA4NiwKKwkweDA1OGIwMTY2LCAweDAzMzg1MDAwLCAweDAzMDIwMDAwLCAweDA3NzgwMDE3LAorCTB4MDA0MzA0MDcsIDB4MDc4MTgxZWUsIDB4MDQ2YzA0MTksIDB4MDQ4MTAxYTIsCisJMHgwNDZjMDIxOSwgMHgwNTgxMDE3MiwgMHgwNzIxOTAwMCwgMHgwMDgwMDE4NiwKKwkweDA3MjE5MDAwLCAweDA3NDgzMDE3LCAweDA0ODEwMThjLCAweDA1NDgyMDE3LAorCTB4MDU4MTAxOTMsIDB4MDQ0OGIwNzUsIDB4MDY4MTgxODYsIDB4MDY2MDE0NzYsCisJMHgwNTBmODBmZiwgMHgwNzNmYTAyMiwgMHgwNjAwMDAzZSwgMHgwNjAwMDA4MCwKKwkweDA1MDAxMDgxLCAweDA1MDAyMDgyLCAweDA2MDAzMDgzLCAweDA1MDA0MDg0LAorCTB4MDQ2MDFjNzYsIDB4MDUwZjgwZmYsIDB4MDIyZmEwMmEsIDB4MDcyMTkwMDAsCisJMHgwNzc4MDA3OCwgMHgwN2ZmZmYwMCwgMHgwNDVhMDQxOSwgMHgwMTA3ODBmZiwKKwkweDA0ODQ4MDFmLCAweDAyODAwMDNkLCAweDA0MGZlMDdmLCAweDAwODYwMTliLAorCTB4MDVhMDAxYmIsIDB4MDA5MjAxODYsIDB4MDQwZmUwN2YsIDB4MDdhNjgxYmIsCisJMHgwMDgwMDE4NiwgMHgwNTYwMTA3YiwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwKKwkweDA3NDRmMDAwLCAweDA1NjAxMDdiLCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLAorCTB4MDA4MDAxNzksIDB4MDUyZTQwMGMsIDB4MDQwMDgwZmIsIDB4MDQ2YWExMDgsCisJMHgwNjAwOTA3NiwgMHgwNDAwMjA3NSwgMHgwNWEwMDRmYywgMHgwMDgwMDE4NiwKKwkweDA2MjE5MDAxLCAweDA1NDgyMDE3LCAweDA1ODEwMWFmLCAweDA1OGIwMWE1LAorCTB4MDYwZmYwODYsIDB4MDM0OWYwZmYsIDB4MDc4MTgxNjUsIDB4MDc0ODMwMTcsCisJMHgwNTgxMDFhYywgMHgwNTBmZDBmZiwgMHgwNDBmZTA3ZiwgMHgwN2E2ODFiYiwKKwkweDAwODAwMTg2LCAweDA1MDA0MDg0LCAweDA1YTAwMjA1LCAweDAwOTIwMTg2LAorCTB4MDcwZmYwN2QsIDB4MDQ1MDA0N2MsIDB4MDU2MDA0ZmYsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwNzBmZjAwMCwgMHgwMDU0MDQ3OSwgMHgwMzA3OTBmZiwKKwkweDAxODAwMTkzLCAweDA2MGZmMDc5LCAweDAwNTQwNDdhLCAweDA1ODIwMWU3LAorCTB4MDU4MTAxZTcsIDB4MDcwZmYwN2QsIDB4MDQ1MDA0N2MsIDB4MDUwZjgwZmYsCisJMHgwMDJmYTgxOSwgMHgwNThiMDFjMywgMHgwMjA4MDAwMSwgMHgwMDA4MTAwMiwKKwkweDAxMDgyMDAzLCAweDA0OGIwMWM3LCAweDAzMzg1MDAwLCAweDAzMDEwMDAwLAorCTB4MDI0MDAwMTksIDB4MDcwZmYwMDMsIDB4MDQ1MDA0NzksIDB4MDMwNzkwZmYsCisJMHgwMzQwMDA3ZSwgMHgwNjQyMDA3ZiwgMHgwNTgxMDFlNywgMHgwNzBmZjA3ZSwKKwkweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDA1MGZlMDAwLCAweDAyODY4MWU2LAorCTB4MDcwZmYwN2QsIDB4MDU2MDAyZmYsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksCisJMHgwMTA3ZDAwMCwgMHgwMTg2MDFlOCwgMHgwNTYwMDg3ZCwgMHgwNTBmODBmZiwKKwkweDAzMmZhMDA5LCAweDA1NjlmZTAwLCAweDA1NTAwNDFiLCAweDA1MGY4MGZmLAorCTB4MDMyZmEwMDksIDB4MDEwN2UwMDAsIDB4MDcwZmYwN2UsIDB4MDE4MDAxZDIsCisJMHgwMzA3YzAwMCwgMHgwN2MwMDAwMCwgMHgwNTJlNDAwYywgMHgwNDAwODBmYiwKKwkweDA0NmFhMTA4LCAweDA2MDA5MDc2LCAweDA0MDAyMDc1LCAweDAxODAwNGZjLAorCTB4MDQwZmQwNzYsIDB4MDUwZmQwMTcsIDB4MDYwZmYwODYsIDB4MDc3ODAwZmYsCisJMHgwNzAwMDA2MCwgMHgwMzdjMDBmZiwgMHgwNzAwMDA2MCwgMHgwNzgxODFmMCwKKwkweDA3NzgwMDc4LCAweDA3ZmZmZjAwLCAweDA0NWEwNDE5LCAweDAxMDc4MGZmLAorCTB4MDY2MDE0NzYsIDB4MDUwZjgwZmYsIDB4MDczZmEwMjIsIDB4MDYwMDAwM2UsCisJMHgwNTJlNDAwYywgMHgwNDAwODBmYiwgMHgwNjZhODEwOCwgMHgwNjAwOTA3NiwKKwkweDA0MDAyMDc1LCAweDA1YTAwNGZjLCAweDAyODAwMDI5LCAweDAyNDAwMDdmLAorCTB4MDc0MjAwN2UsIDB4MDUwZjgwN2UsIDB4MDMyZmEwMDksIDB4MDUwZmUwMDAsCisJMHgwMjg2ODIxZiwgMHgwNzBmZjA3ZCwgMHgwNTVjMDQ3YiwgMHgwNTgxMDIxNCwKKwkweDA3NjAwMDdkLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDA1MGZlMDAwLAorCTB4MDM4NjgyMTQsIDB4MDcwZmYwN2IsIDB4MDEwN2QwZmYsIDB4MDU2MDA4N2QsCisJMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwMzY4MWUwMCwgMHgwNDUwMDQxYywKKwkweDAxMDdlMGZmLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDA1MGZlMDAwLAorCTB4MDE4NjAyMjEsIDB4MDMwN2MwMDAsIDB4MDdjMDAwMDAsIDB4MDQwZmQwNzYsCisJMHgwMjgwMDUxMCwgMHgwMTAxODBjMCwgMHgwNTQ4ZTAxOCwgMHgwNzgxODIzYywKKwkweDA3NDhmMDE4LCAweDA2ODE4MjM4LCAweDAzNDkwMDE4LCAweDA2ODE4MjM0LAorCTB4MDE0OTEwMTgsIDB4MDc4MTgyMzAsIDB4MDczYzAwMDAsIDB4MDYwMDAwNDAsCisJMHgwMjIwMDAwNCwgMHgwMTgwMDIzZiwgMHgwNzNjMDAwMCwgMHgwNjAwMDAyMCwKKwkweDAzMjAwMDAzLCAweDAxODAwMjNmLCAweDA3M2MwMDAwLCAweDA2MDAwMDEwLAorCTB4MDIyMDAwMDIsIDB4MDE4MDAyM2YsIDB4MDczYzAwMDAsIDB4MDYwMDAwMDgsCisJMHgwMjIwMDAwMSwgMHgwMTgwMDIzZiwgMHgwNzNjMDAwMCwgMHgwNjAwMDAwNCwKKwkweDA2MDAwMDEzLCAweDA1MGZiMDAwLCAweDA0MGZlMDc2LCAweDAwODYwMjU4LAorCTB4MDQ2YzAyNzMsIDB4MDQ4MTAyNjgsIDB4MDY2YzAwNzMsIDB4MDQ4MTAyNDksCisJMHgwNDBmZDA3NiwgMHgwNmEwMDUxMCwgMHgwMzgwMDAxNCwgMHgwNDBmZDA3NiwKKwkweDAwODAwMjRjLCAweDAwNDUyMDc1LCAweDAwMDc3MDEzLCAweDA2NDdmMDc1LAorCTB4MDY0ODYwNzUsIDB4MDY4MTgyNTIsIDB4MDVhMDAyOGIsIDB4MDA4MDAyNTgsCisJMHgwMDdhMDE3NSwgMHgwNDAwMDEwMSwgMHgwNWEwMDI4YiwgMHgwNDAwODA3NiwKKwkweDAyNDVmMDA4LCAweDA1YTAwNGY1LCAweDA3MjczMDAwLCAweDA1NjAwMjcyLAorCTB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsIDB4MDcwMDAwMDksIDB4MDM3OWZmNzgsCisJMHgwNzAwMDBmZiwgMHgwMjA3NjAxMywgMHgwMjA3NTAxMywgMHgwNDg0ODAxZiwKKwkweDAyODAwMDNkLCAweDA3MGZjMGZmLCAweDA1MmU0MDBjLCAweDAwMjA4MDIwLAorCTB4MDVhMDA0ZjUsIDB4MDA4MDAyNjEsIDB4MDQ2MDAyNzYsIDB4MDUwMDEwZmYsCisJMHgwNDBmODAwMSwgMHgwMzJmYTAwOSwgMHgwNDBmODAwMSwgMHgwNTNmYTgwYSwKKwkweDA3MDAwMDA5LCAweDA3MGZmMDAwLCAweDAyODY4MjdhLCAweDA2NjAxMjc2LAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMDksIDB4MDcwMDAwMGMsIDB4MDc2MDE4MTgsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwgMHgwNzAwMDAwOSwgMHgwMTgwMDI3YiwKKwkweDA3YTAwMGRlLCAweDA0NDhiMDc1LCAweDA1ODEwMjRiLCAweDA2MDAwMDEzLAorCTB4MDQwMDEwMTMsIDB4MDU2MDEwN2IsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMTIsCisJMHgwMDQ2YjA3NSwgMHgwM2I2MDBhYywgMHgwMDgwMDI0YywgMHgwNjAwMDAyMCwKKwkweDA0MDAxMDE2LCAweDA0NjAwODJhLCAweDA1MGY4MGZmLCAweDAzMmZhMDEyLAorCTB4MDdjMDAwMDAsIDB4MDYwMDAwNzUsIDB4MDQwMDEwYTIsIDB4MDQ0YjA4MDEsCisJMHgwNjBmZjAxNiwgMHgwNjVhMDAwMSwgMHgwNDYwMDg3NiwgMHgwNTBmODBmZiwKKwkweDAzMmZhMDEyLCAweDA3YzAwMDAwLCAweDA1MGZlMDIyLCAweDAxODYwMjlhLAorCTB4MDQyMWQwMDQsIDB4MDMwMmEwMjIsIDB4MDRhMDAyYzEsIDB4MDE4MDAyYjEsCisJMHgwNDBmZTAyNiwgMHgwMDg2MDJiMywgMHgwNDIxZDAwMSwgMHgwMjAyYTAyNiwKKwkweDA0YTAwMmMxLCAweDAyMDJjMDEzLCAweDAwNjgzZTIwLCAweDA3MDA2MGZmLAorCTB4MDU2YzAyMDYsIDB4MDQ4MTAyZjQsIDB4MDU2YzA0MDYsIDB4MDc4MTAzMGEsCisJMHgwNzZjMDYwNiwgMHgwNjgxMDM3OSwgMHgwNTZjMTYwNiwgMHgwNzgxODJiMSwKKwkweDA0NDg4MDIwLCAweDA3ODEwMzg3LCAweDA0MGZkMDJhLCAweDA1MjFkMDAwLAorCTB4MDIwMmEwMTMsIDB4MDIwMjAwMTMsIDB4MDA4MDAyYjMsIDB4MDRhMDA0ZWMsCisJMHgwMDgwMDJiZiwgMHgwNTBmZTAyOCwgMHgwMDg2MDJiZiwgMHgwMzAyYTAyOCwKKwkweDA0MjFkMDAyLCAweDA0YTAwMmMxLCAweDAwODAwMmM4LCAweDA1MGZlMDIyLAorCTB4MDA4NjAyYmYsIDB4MDQyMWQwMDQsIDB4MDMwMmEwMjIsIDB4MDRhMDAyYzEsCisJMHgwNGEwMDRlYywgMHgwNTg0ODAzMCwgMHgwMjgwMDAzZCwgMHgwNDYwMDgyYSwKKwkweDA1MGY4MGZmLCAweDAyMmZhMDMxLCAweDAzMDIwMDAwLCAweDAwMDJiMDA0LAorCTB4MDEwMTgwMDUsIDB4MDdjMDAwMDAsIDB4MDQwMDcwMmEsIDB4MDZhMDAzYmEsCisJMHgwMDdhMDEwMSwgMHgwNzA2MDAwMCwgMHgwNzMwMzAwMCwgMHgwNzAwODI5MCwKKwkweDA3NjAwMDE4LCAweDA1MGY4MGZmLCAweDA1M2ZhODA5LCAweDA3MDAwMDAzLAorCTB4MDQ0OGUwMDcsIDB4MDY4MTgyZDYsIDB4MDYwMDYwMTMsIDB4MDE4MDAyZGQsCisJMHgwMjQwMDAxMCwgMHgwNDgxMDJkNiwgMHgwNjAwNjAxMCwgMHgwNDYwMzIyYSwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDBhLCAweDA3MDAwMDAzLCAweDA1MGY4MDFlLAorCTB4MDMyZmEwM2EsIDB4MDYzYWEwMjAsIDB4MDYwMDAwMDIsIDB4MDEzZTQwMDAsCisJMHgwNzAwMDAzMCwgMHgwMDk4MDJlMywgMHgwNzBmZjBmNiwgMHgwMzY4MzBmZiwKKwkweDA3ODE4MmU0LCAweDA3MGYwMDFlLCAweDA1NjAxMDJiLCAweDA1MGYxMGZmLAorCTB4MDYzZjNjMDgsIDB4MDYwMDAwMGQsIDB4MDEzZTQwMDAsIDB4MDYwMDAwMjAsCisJMHgwNDBmODAxYSwgMHgwMzIwMDAwYSwgMHgwMjIwMTdkMCwgMHgwMzJmYTAxMiwKKwkweDAyMDJjMDEzLCAweDAwODAwMmJmLCAweDA0MDA3MDEzLCAweDA2YTAwM2JhLAorCTB4MDA3YTAxMDEsIDB4MDcwNTAwMDAsIDB4MDczMDMwMDAsIDB4MDcwMDg4OTAsCisJMHgwNzRkMDAwNSwgMHgwNjAwNjAxMywgMHgwNTBmODAxZSwgMHgwMzJmYTAzYSwKKwkweDA1NjAxYTJiLCAweDA1MGY4MGZmLCAweDAyMmZhMDE5LCAweDA0MDAxMDAyLAorCTB4MDQwMDIwMTMsIDB4MDQwZjgwMWYsIDB4MDIyZmEwMWEsIDB4MDczYWEwMGMsCisJMHgwNjAwMDAwMiwgMHgwNzMwMGMwMywgMHgwNjAwMDAwZCwgMHgwMjgwMDNhNywKKwkweDA0MDA3MDEzLCAweDA2YTAwM2JhLCAweDAwN2EwMTAxLCAweDAzMDcwMDAwLAorCTB4MDY2MDI4MmEsIDB4MDUwZjgwZmYsIDB4MDczZmEwMDksIDB4MDYwMDAwMDQsCisJMHgwMjQ5OTAwOCwgMHgwNzgxMDMxNywgMHgwNzMwMzAwMCwgMHgwNzAwODg5MCwKKwkweDAyODAwMzE5LCAweDA3MzAzMDAwLCAweDA0MDA4OTgwLCAweDA1MDA3MDAzLAorCTB4MDc0ZDAwMDUsIDB4MDYwMDYwMTMsIDB4MDUwZjgwMWUsIDB4MDMyZmEwM2EsCisJMHgwNzYwMTQyYiwgMHgwNTBmODBmZiwgMHgwMzJmYTAyMSwgMHgwNjRiMDAwMiwKKwkweDAyNDk5MDA4LCAweDA2ODEwMzI1LCAweDA2NDRjMDAyLCAweDA1NGIwNDAwLAorCTB4MDUwMDQwZmYsIDB4MDY2OTgxMDQsIDB4MDU4MTgzM2EsIDB4MDYwMDAwMTMsCisJMHgwNDAwMTAxMywgMHgwNDc4MDEwMiwgMHgwNjAwMDAxMCwgMHgwNjAwMzAxMywKKwkweDA0MDA0MDEzLCAweDA2MDA1MDEzLCAweDA2MDA2MDEzLCAweDA0MDA3MDEzLAorCTB4MDA2NDQwMTUsIDB4MDc4MjAzMzYsIDB4MDQ0NDgwMDIsIDB4MDIyMDUwMDgsCisJMHgwNDBmODAxZiwgMHgwMzJmYTA0MiwgMHgwNDAwODAxNSwgMHgwMzgwMDM3MSwKKwkweDA0NmM4MDA0LCAweDA1ODE4MzQ4LCAweDAxMjA4MDE4LCAweDA2NzgwMDAyLAorCTB4MDcwMDAwMDMsIDB4MDU4MTgzNGIsIDB4MDYwMDMwMDEsIDB4MDYwMDAwMTMsCisJMHgwNDAwMTAxMywgMHgwNDAwNDAxMywgMHgwNjAwNTAxMywgMHgwNDBmODAxZiwKKwkweDAyMmZhMDMyLCAweDAzODAwMzcxLCAweDA0MGZkMDJhLCAweDA2YTAwNTEwLAorCTB4MDM4MDAwMTQsIDB4MDQ0ODgwMDIsIDB4MDc4MTAzNTAsIDB4MDcwZmYwMDMsCisJMHgwNDUwMDQwOCwgMHgwNTAwODBmZiwgMHgwNjQ4OTAwMiwgMHgwNjgxMDM1NywKKwkweDAzNzlmZjAwLCAweDA3MDAwMGZmLCAweDA3MGZmMDAwLCAweDA0NTAwNDA4LAorCTB4MDUwMDgwZmYsIDB4MDcwMDUwMDMsIDB4MDUwMDQwMDAsIDB4MDYwMDMwMDEsCisJMHgwNjAwMDAxMywgMHgwNDAwMTAxMywgMHgwNDBmODAxZiwgMHgwMjJmYTAzMiwKKwkweDA1NjAxYzJiLCAweDA1MGY4MGZmLCAweDAyMmZhMDMxLCAweDA2NjAwYzFmLAorCTB4MDUwZjgwZmYsIDB4MDIyZmEwMzIsIDB4MDI2ODA2MDgsIDB4MDc4MTAzNzEsCisJMHgwMTY0MDhmZiwgMHgwNTdkZmVmZiwgMHgwN2ZmZmZmZiwgMHgwMzQwMDBmZiwKKwkweDA0NWEwNDA3LCAweDA3MDAwMGZmLCAweDA3NjAwNjFlLCAweDA1MGY4MGZmLAorCTB4MDMyZmEwMGEsIDB4MDY2MDA5MDgsIDB4MDY2OWY5MDgsIDB4MDI3YTAwMDgsCisJMHgwNjAwMDAyMCwgMHgwNzBhYTBmZiwgMHgwMTRhMjBmZiwgMHgwMzdhMDBmZiwKKwkweDA2MDAwMGRjLCAweDA3MDAwMGZmLCAweDAyODAwM2E3LCAweDA0MDA3MDEzLAorCTB4MDZhMDAzYmEsIDB4MDA3YTAxMDEsIDB4MDcwMzAwMDAsIDB4MDczMDMwMDAsCisJMHgwNzAwODE5MCwgMHgwNjAwNjAxMywgMHgwNTBmODAxZSwgMHgwMzJmYTAzYSwKKwkweDA3M2FhMDAwLCAweDA2MDAwMDAyLCAweDA3MzAwYzAwLCAweDA3MDAwMDA1LAorCTB4MDI4MDAzYTcsIDB4MDQwMDcwMTMsIDB4MDZhMDAzYmEsIDB4MDA3YTAxMDEsCisJMHgwNzgxMDAwMCwgMHgwNzMwMzAwMCwgMHgwNzAwMDA5MCwgMHgwNjAwNjAxMywKKwkweDA2NjAwYzJhLCAweDA1MGY4MGZmLCAweDA1M2ZhODA5LCAweDA3MDAwMDAzLAorCTB4MDQ3ODAxMDcsIDB4MDdmZmZmMDAsIDB4MDA3YzAxMDcsIDB4MDcwMDA1MDAsCisJMHgwNTgxODM5YSwgMHgwNzMwMzAwMCwgMHgwNTAwMDg5MCwgMHgwNzRkMDAwNSwKKwkweDA2NjAyODJhLCAweDA1MGY4MGZmLCAweDA1M2ZhODA5LCAweDA3MDAwMDAzLAorCTB4MDA0OWQwMDcsIDB4MDY4MTAzYTEsIDB4MDIyMDYwMDEsIDB4MDUwZjgwMWUsCisJMHgwMzJmYTAzYSwgMHgwNzNhYTAwMCwgMHgwNjAwMDAwMiwgMHgwNzMwMGMwMCwKKwkweDA3MDAwMDA1LCAweDAxM2U0MDAwLCAweDA3MDAwMDMwLCAweDAzOTgwM2E5LAorCTB4MDcwZmYwZjYsIDB4MDM2ODMwZmYsIDB4MDU4MTgzYWEsIDB4MDcwZjAwMWUsCisJMHgwNDBmMTAxZiwgMHgwNzBmMzAwMCwgMHgwMTNlNDAwMCwgMHgwNjAwMDAyMCwKKwkweDA0MGY4MDFhLCAweDAzMjAwMDBhLCAweDAyMjAxN2QwLCAweDAzMmZhMDEyLAorCTB4MDA4MDAyYmYsIDB4MDMyMDAwMDAsIDB4MDYwMDYwNzYsIDB4MDI4MDAzYmMsCisJMHgwMzIwMDAxMSwgMHgwNjAwNjAyYSwgMHgwNWEwMDQ0MSwgMHgwNTYwMDQwNiwKKwkweDA1MGY4MGZmLCAweDA1M2ZhODA5LCAweDA2MDAwMDAyLCAweDA3YzAwMDAwLAorCTB4MDIwNzYwMmYsIDB4MDQ2MDA4NzYsIDB4MDUwZjgwZmYsIDB4MDIyZmEwMzEsCisJMHgwMzA3NTAwMCwgMHgwMDA3YjAwNCwgMHgwMTAxODAwNSwgMHgwNjYwMDA3NiwKKwkweDA1MDAyMGZmLCAweDA1MGY4MGZmLCAweDAxMmZhODA5LCAweDAyMDJmMDAxLAorCTB4MDA4NjgzZDAsIDB4MDAwMmUwMTMsIDB4MDQwZjgwMDIsIDB4MDUzZmE4MGEsCisJMHgwNzAwMDAwOSwgMHgwNjI3MzAwMSwgMHgwNDQ4YjA3NSwgMHgwNDgxODNkYSwKKwkweDA0NjAyMDc2LCAweDA1MGY4MGZmLCAweDA1M2ZhODExLCAweDA3MDAwMDNjLAorCTB4MDE3OWZlNzgsIDB4MDcwMDAwZmYsIDB4MDMwMTkwZmYsIDB4MDE4NjgzZTIsCisJMHgwN2EwMDNmNiwgMHgwMDA3ODAxOSwgMHgwMzkyMDNmNSwgMHgwMTgwMDQzYSwKKwkweDA0MGZkMDc2LCAweDA0MGZkMDE5LCAweDA0NjAwMjc2LCAweDA1MDAyMGZmLAorCTB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDQwZjgwMDIsIDB4MDUzZmE4MGEsCisJMHgwNzAwMDAwOSwgMHgwNTBmZTAwMCwgMHgwMDg2ODNmMiwgMHgwNzYwMTgxOCwKKwkweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LCAweDAzODAwM2YzLAorCTB4MDdhMDAwZGUsIDB4MDcyNzMwMDAsIDB4MDIwNzYwMTMsIDB4MDI4MDAwM2QsCisJMHgwNzhiMDNmNiwgMHgwMzM4NTAwMCwgMHgwNzAzMDAwMCwgMHgwNTYwMDgxOCwKKwkweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDA1NGIwNDAwLCAweDAzMDhhMGZmLAorCTB4MDE3OWZlMDAsIDB4MDcwMDAwZmYsIDB4MDEwODgwZmYsIDB4MDQ0OGIwNzUsCisJMHgwNDgxMDQxMCwgMHgwNzYwMTQ3YiwgMHgwNTBmODBmZiwgMHgwMDJmYTgxOSwKKwkweDA2NGIwMDAxLCAweDAyMDgwMDAyLCAweDAxMDgxMDAzLCAweDAwMDgyMDAxLAorCTB4MDIwODMwMDEsIDB4MDIwNzkwMDEsIDB4MDIwN2EwMDEsIDB4MDAwODQwMTMsCisJMHgwMjA3ZjAxMywgMHgwMDgwMDQzMiwgMHgwNjQ4NTA3NSwgMHgwNTgxMDQyOCwKKwkweDAyNDY1MDc1LCAweDA2NjAxNDc2LCAweDA1MGY4MGZmLCAweDA3M2ZhMDIxLAorCTB4MDYwMDAwM2UsIDB4MDcwZmYwN2QsIDB4MDQ1MDA0N2MsIDB4MDUwZjgwZmYsCisJMHgwMDJmYTgxOSwgMHgwNThiMDQxYiwgMHgwMjA4MDAwMSwgMHgwMDA4MTAwMiwKKwkweDAxMDgyMDAzLCAweDAzMDc5MDAzLCAweDAyMDgzMDdhLCAweDAzNDAwMDdlLAorCTB4MDY0MjAwN2YsIDB4MDU4MTA0MmQsIDB4MDcwZmYwN2UsIDB4MDVhMDAxZDIsCisJMHgwMzkyODQyZCwgMHgwMTgwMDQzOSwgMHgwNThiMDQyOCwgMHgwNjYwMTQ3NiwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDQxLCAweDA2MDAwMDNlLCAweDA2NjAyNDc2LAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMDksIDB4MDYwMDAwMDcsIDB4MDAwODQwMGUsCisJMHgwNDhiMDQzMiwgMHgwMzM4NTAwMCwgMHgwMzAxMDAwMCwgMHgwNjIxOTAwMSwKKwkweDA0MGZlMDdmLCAweDAxODYwNDM5LCAweDAxODAwMWJiLCAweDA3YzAwMDAwLAorCTB4MDA2ODNlNzUsIDB4MDU4MTA0M2YsIDB4MDQ0OGQwNzUsIDB4MDU4MTA0NjUsCisJMHgwMTgwMDQ5MywgMHgwNWEwMDRmMCwgMHgwMzgwMDNmNSwgMHgwMjk3ODQ0YywKKwkweDA3NjAyNDE4LCAweDA1MGY4MGZmLCAweDAxMmZhODA5LCAweDA2NzgwMDAxLAorCTB4MDcwMDAwZmYsIDB4MDc1YTAwMDAsIDB4MDcwZmYwMTQsIDB4MDU2OWZlZmYsCisJMHgwNTRiMDhmZiwgMHgwNzVhMDAwMCwgMHgwNTYwMDQxOCwgMHgwNTBmODBmZiwKKwkweDAxMmZhODA5LCAweDA0MGZlMDA3LCAweDAzODY4NDUzLCAweDAxMjA0MDAwLAorCTB4MDA4MDA0NjEsIDB4MDA3MDAxMDEsIDB4MDMwMTAwMDAsIDB4MDY3ODAwMDEsCisJMHgwN2ZmMDAwMCwgMHgwNzZjMDBmZiwgMHgwNjgxODQ1YiwgMHgwMDcwMDEwMSwKKwkweDAzMDEwMDAwLCAweDA1NjAwNDE4LCAweDA1MGY4MGZmLCAweDAxMmZhODBhLAorCTB4MDY3ODAwMDEsIDB4MDdmZjAwMDAsIDB4MDUwMDQwZmYsIDB4MDI3OWZmMDEsCisJMHgwNzAwZmZmZiwgMHgwNTAwMjAxNCwgMHgwN2MwMDAwMCwgMHgwNDAwNzA3NiwKKwkweDA0NDhiMDc1LCAweDA0ODEwNDdmLCAweDAzMjAwMDExLCAweDA2MDA2MDc2LAorCTB4MDZhMDAzYmMsIDB4MDA3YTAxMDEsIDB4MDcwNjAwMDAsIDB4MDczMDMwMDAsCisJMHgwNzAwODI5MCwgMHgwNzYwMDAxOCwgMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwKKwkweDA3MDAwMDAzLCAweDA0NDhlMDA3LCAweDA3ODE4NDc3LCAweDA2MDA2MDEzLAorCTB4MDE4MDA0OGUsIDB4MDI0MDAwMTAsIDB4MDU4MTA0NzcsIDB4MDYwMDYwMTAsCisJMHgwNDYwMzI3NiwgMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwgMHgwNzAwMDAwMywKKwkweDAxODAwNDhlLCAweDA0NjAyYTc2LCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LAorCTB4MDYwZmYwN2EsIDB4MDU1MDA0MDAsIDB4MDcwMDAwZmYsIDB4MDQ2MDJhNzYsCisJMHgwNTBmODBmZiwgMHgwMzJmYTAwYSwgMHgwN2EwMDNiNywgMHgwMDdhMDEwMSwKKwkweDAzMDEwMDAwLCAweDA2MzAzMDA4LCAweDA1MDA4MDAwLCAweDA2MDA2MDBlLAorCTB4MDUwZjgwNzQsIDB4MDMyZmEwM2EsIDB4MDUzMDc5YTAsIDB4MDcwMDAwMGMsCisJMHgwMDgwMDRkMywgMHgwMDY4M2U3NSwgMHgwNzZjMGFmZiwgMHgwNTgxMDRiMiwKKwkweDA0MDA3MDEzLCAweDAzMjAwMDExLCAweDA2MDA2MDc2LCAweDA2YTAwM2JjLAorCTB4MDA3YTAxMDEsIDB4MDMwNzAwMDAsIDB4MDY2MDI4NzYsIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgwOSwgMHgwNjAwMDAwMSwgMHgwMzQ5OTAwMywgMHgwNDgxMDRhNywKKwkweDA3MzAzMDAwLCAweDA3MDA4ODkwLCAweDA1MzA3OWEwLCAweDA3MDAwMDBjLAorCTB4MDA4MDA0YWIsIDB4MDczMDMwMDAsIDB4MDQwMDg5ODAsIDB4MDQzMDc5MjAsCisJMHgwNzAwMDAwYywgMHgwNzRkMDAwNSwgMHgwNjAwNjAxMywgMHgwNTBmODA3NCwKKwkweDAzMmZhMDNhLCAweDA0MzA3OTIwLCAweDA3MDAwMDBjLCAweDAwODAwNGQzLAorCTB4MDQ2MDJhNzYsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDYwZmYwN2EsCisJMHgwNTUwMDQwMCwgMHgwNzAwMDBmZiwgMHgwNDYwMmE3NiwgMHgwNTBmODBmZiwKKwkweDAzMmZhMDBhLCAweDA0MDA3MDc2LCAweDA3YTAwM2I3LCAweDAwN2EwMTAxLAorCTB4MDMwMTAwMDAsIDB4MDYzMDMwMDgsIDB4MDcwMDg4MDAsIDB4MDc0ZDAwMDUsCisJMHgwNjYwMGE3NiwgMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwgMHgwNzAwMDAwMywKKwkweDA1NGIwNDA2LCAweDA0NWEwNDA0LCAweDA1MDA0MGZmLCAweDA2MDA2MDBlLAorCTB4MDUwZjgwNzQsIDB4MDMyZmEwM2EsIDB4MDY0OGMwNzUsIDB4MDU4MTA0ZDEsCisJMHgwNjMwN2QyMCwgMHgwNzAwMDAwYywgMHgwMDgwMDRkMywgMHgwNDMwNzkyMCwKKwkweDA3MDAwMDBjLCAweDAxM2U0MDAwLCAweDA3MDAwMDMwLCAweDAwOTgwNGQ1LAorCTB4MDcwZmYwZjYsIDB4MDc0ODUwZmYsIDB4MDY4MTg0ZDYsIDB4MDUwZjIwNzQsCisJMHgwNjBhMDAwNywgMHgwNDAwNzBmYiwgMHgwNDZhNzAwNywgMHgwNTBmNDBmZiwKKwkweDAxM2U0MDAwLCAweDA2MDAwMDIwLCAweDA2NzgwMDdhLCAweDA3ZmZmMDAwLAorCTB4MDY4MTg0ZTYsIDB4MDMyMDAwMGEsIDB4MDIyMDE3ZDAsIDB4MDA4MDA0ZTksCisJMHgwMzIwMDAwYSwgMHgwNjMwMWI1OCwgMHgwNjAwMDAwMSwgMHgwNTBmODA3MiwKKwkweDAzMmZhMDEyLCAweDAzODAwM2Y1LCAweDAxMjA4MDYwLCAweDA2MDA5MDJhLAorCTB4MDQwMDIwMjAsIDB4MDE4MDA0ZmMsIDB4MDQwMDgwZmIsIDB4MDY2YWUxMDgsCisJMHgwNjAwOTA3NiwgMHgwNDAwMjA3NSwgMHgwMTgwMDRmYywgMHgwMzIwMTEwMCwKKwkweDA3ODQ4NGZhLCAweDA2NDIwMDAxLCAweDA3ODE4NGY2LCAweDAyODAwNTEzLAorCTB4MDIwZTAwMDgsIDB4MDdjMDAwMDAsIDB4MDUwZmQwMDksIDB4MDQwZmQwMDgsCisJMHgwMzIwMTEwMCwgMHgwNTg0ODUwMywgMHgwNjQyMDAwMSwgMHgwNzgxODRmZiwKKwkweDAyODAwNTEzLCAweDAwN2EwMTAyLCAweDA0MDAwMTAxLCAweDA1NjAwODA5LAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDYwMDAwMDEsIDB4MDIwZTAwMDgsCisJMHgwNjg0MDUwZCwgMHgwMzBlMDAwOSwgMHgwN2MwMDAwMCwgMHgwMTAxMTAwOSwKKwkweDA1MmU0MzAwLCAweDA3YzAwMDAwLCAweDA1MmU0MDBmLCAweDAxMjA4MDkwLAorCTB4MDE4MDA0ZjUsIDB4MDcwZmMwZmYsIDB4MDQwZjgwMTMsIDB4MDMyZmEwMDksCisJMHgwMjgwMDUxNiwgMHgxNTQxNmVhOSwgMHhmZmVmMGIwMQorfTsKKworI2lmZGVmIFVOSVFVRV9GV19OQU1FCit1aW50MzJfdCBmdzI0MDBfbGVuZ3RoMDIgPSAweDAwMDAxNGZmIDsKKyNlbHNlCit1aW50MzJfdCByaXNjX2NvZGVfbGVuZ3RoMDIgPSAweDAwMDAxNGZmIDsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCA0OGU0NjBlLi4yZWZjYTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogcWxhMngwMF9pc3BfbmFtZV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKIAlzY3NpX3FsYV9ob3N0X3QgKmhhID0gdG9fcWxhX2hvc3QoY2xhc3NfdG9fc2hvc3QoY2RldikpOwotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBoYS0+YnJkX2luZm8tPmlzcF9uYW1lKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJJU1AlMDRYXG4iLCBoYS0+cGRldi0+ZGV2aWNlKTsKIH0KIAogc3RhdGljIHNzaXplX3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCA3YjNlZmQ1Li43OWQ4YTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC0yOSw2ICszMCw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkUpCiAjaWYgZGVmaW5lZChDT05GSUdfU0NTSV9RTEEyMVhYKSB8fCBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTIxWFhfTU9EVUxFKQogI2RlZmluZSBJU19RTEEyMTAwKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIxMDApCiAjZWxzZQpAQCAtNzksOSArODEsMjMgQEAKICNkZWZpbmUgSVNfUUxBMjUyMihoYSkJMAogI2VuZGlmCiAKKyNlbHNlCS8qICFkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkUpICovCisKKyNkZWZpbmUgSVNfUUxBMjEwMChoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwKQorI2RlZmluZSBJU19RTEEyMjAwKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIyMDApCisjZGVmaW5lIElTX1FMQTIzMDAoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMwMCkKKyNkZWZpbmUgSVNfUUxBMjMxMihoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzEyKQorI2RlZmluZSBJU19RTEEyMzIyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIzMjIpCisjZGVmaW5lIElTX1FMQTYzMTIoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNjMxMikKKyNkZWZpbmUgSVNfUUxBNjMyMihoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzIyKQorI2RlZmluZSBJU19RTEEyNDIyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MjIpCisjZGVmaW5lIElTX1FMQTI0MzIoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjQzMikKKyNkZWZpbmUgSVNfUUxBMjUxMihoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNTEyKQorI2RlZmluZSBJU19RTEEyNTIyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI1MjIpCisjZW5kaWYKKwogI2RlZmluZSBJU19RTEEyM1hYKGhhKQkoSVNfUUxBMjMwMChoYSkgfHwgSVNfUUxBMjMxMihoYSkgfHwgSVNfUUxBMjMyMihoYSkgfHwgXAogICAgIAkJCSBJU19RTEE2MzEyKGhhKSB8fCBJU19RTEE2MzIyKGhhKSkKLQogI2RlZmluZSBJU19RTEEyNFhYKGhhKQkoSVNfUUxBMjQyMihoYSkgfHwgSVNfUUxBMjQzMihoYSkpCiAjZGVmaW5lIElTX1FMQTI1WFgoaGEpCShJU19RTEEyNTEyKGhhKSB8fCBJU19RTEEyNTIyKGhhKSkKIApAQCAtMjEyNCw2ICsyMTQwLDEyIEBACiAJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0OwogfTsKIAorc3RydWN0IGZ3X2Jsb2IgeworCWNoYXIgKm5hbWU7CisJdWludDMyX3Qgc2Vnc1s0XTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworfTsKKwogLyogUmV0dXJuIGRhdGEgZnJvbSBNQkNfR0VUX0lEX0xJU1QgY2FsbC4gKi8KIHN0cnVjdCBnaWRfbGlzdF9pbmZvIHsKIAl1aW50OF90CWFsX3BhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IGZlZGNiMGQuLmJlYzgxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTMzLDggKzMzLDggQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfdXBkYXRlX2Z3X29wdGlvbnMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiBleHRlcm4gdm9pZCBxbGEyNHh4X3VwZGF0ZV9md19vcHRpb25zKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiBpbnQgcWxhMngwMF9sb2FkX3Jpc2Moc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgdWludDMyX3QgKik7CitleHRlcm4gaW50IHFsYTI0eHhfbG9hZF9yaXNjKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MzJfdCAqKTsKIGV4dGVybiBpbnQgcWxhMjR4eF9sb2FkX3Jpc2NfZmxhc2goc2NzaV9xbGFfaG9zdF90ICosIHVpbnQzMl90ICopOwotZXh0ZXJuIGludCBxbGEyNHh4X2xvYWRfcmlzY19ob3RwbHVnKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MzJfdCAqKTsKIAogZXh0ZXJuIGZjX3BvcnRfdCAqcWxhMngwMF9hbGxvY19mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICosIGdmcF90KTsKIApAQCAtNzYsNiArNzYsOCBAQAogCiBleHRlcm4gaW50IHFsYTJ4MDBfZG93bl90aW1lb3V0KHN0cnVjdCBzZW1hcGhvcmUgKiwgdW5zaWduZWQgbG9uZyk7CiAKK2V4dGVybiBzdHJ1Y3QgZndfYmxvYiAqcWxhMngwMF9yZXF1ZXN0X2Zpcm13YXJlKHNjc2lfcWxhX2hvc3RfdCAqKTsKKwogLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9pb2NiLmMgc291cmNlIGZpbGUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IGM0NmQyNDYuLjdkOTczYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtOCw3ICs4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgogCiAjaW5jbHVkZSAicWxhX2RldnRibC5oIgpAQCAtMzQ4NCwxNyArMzQ4MywxNiBAQAogCXJldHVybiAocnZhbCk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkUpCisKIGludAogcWxhMngwMF9sb2FkX3Jpc2Moc2NzaV9xbGFfaG9zdF90ICpoYSwgdWludDMyX3QgKnNyaXNjX2FkZHIpCiB7Ci0JaW50CQlydmFsOwotCXVpbnQxNl90CWNudDsKLQl1aW50MTZfdAkqcmlzY19jb2RlOwotCXVuc2lnbmVkIGxvbmcJcmlzY19hZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcJcmlzY19jb2RlX3NpemU7Ci0JaW50CQludW07Ci0JaW50CQlpOwotCXVpbnQxNl90CSpyZXFfcmluZzsKKwlpbnQJcnZhbCwgbnVtLCBpOworCXVpbnQzMl90IGNudDsKKwl1aW50MTZfdCAqcmlzY19jb2RlOworCXVpbnQzMl90IHJpc2NfYWRkciwgcmlzY19zaXplOworCXVpbnQxNl90ICpyZXFfcmluZzsKIAlzdHJ1Y3QgcWxhX2Z3X2luZm8gKmZ3X2l0ZXI7CiAKIAlydmFsID0gUUxBX1NVQ0NFU1M7CkBAIC0zNTA0LDM3ICszNTAyLDI5IEBACiAJKnNyaXNjX2FkZHIgPSAqaGEtPmJyZF9pbmZvLT5md19pbmZvLT5md3N0YXJ0OwogCXdoaWxlIChmd19pdGVyLT5hZGRyZXNzaW5nICE9IEZXX0lORk9fQUREUl9OT01PUkUpIHsKIAkJcmlzY19jb2RlID0gZndfaXRlci0+Zndjb2RlOwotCQlyaXNjX2NvZGVfc2l6ZSA9ICpmd19pdGVyLT5md2xlbjsKLQotCQlpZiAoZndfaXRlci0+YWRkcmVzc2luZyA9PSBGV19JTkZPX0FERFJfTk9STUFMKSB7Ci0JCQlyaXNjX2FkZHJlc3MgPSAqZndfaXRlci0+ZndzdGFydDsKLQkJfSBlbHNlIHsKLQkJCS8qIEV4dGVuZGVkIGFkZHJlc3MgKi8KLQkJCXJpc2NfYWRkcmVzcyA9ICpmd19pdGVyLT5sZndzdGFydDsKLQkJfQorCQlyaXNjX3NpemUgPSAqZndfaXRlci0+ZndsZW47CisJCWlmIChmd19pdGVyLT5hZGRyZXNzaW5nID09IEZXX0lORk9fQUREUl9OT1JNQUwpCisJCQlyaXNjX2FkZHIgPSAqZndfaXRlci0+ZndzdGFydDsKKwkJZWxzZQorCQkJcmlzY19hZGRyID0gKmZ3X2l0ZXItPmxmd3N0YXJ0OwogCiAJCW51bSA9IDA7CiAJCXJ2YWwgPSAwOwotCQl3aGlsZSAocmlzY19jb2RlX3NpemUgPiAwICYmICFydmFsKSB7CisJCXdoaWxlIChyaXNjX3NpemUgPiAwICYmICFydmFsKSB7CiAJCQljbnQgPSAodWludDE2X3QpKGhhLT5md190cmFuc2Zlcl9zaXplID4+IDEpOwotCQkJaWYgKGNudCA+IHJpc2NfY29kZV9zaXplKQotCQkJCWNudCA9IHJpc2NfY29kZV9zaXplOworCQkJaWYgKGNudCA+IHJpc2Nfc2l6ZSkKKwkJCQljbnQgPSByaXNjX3NpemU7CiAKIAkJCURFQlVHNyhwcmludGsoInNjc2koJWxkKTogTG9hZGluZyByaXNjIHNlZ21lbnRAICIKIAkJCSAgICAiYWRkciAlcCwgbnVtYmVyIG9mIGJ5dGVzIDB4JXgsIG9mZnNldCAweCVseC5cbiIsCi0JCQkgICAgaGEtPmhvc3Rfbm8sIHJpc2NfY29kZSwgY250LCByaXNjX2FkZHJlc3MpKTsKKwkJCSAgICBoYS0+aG9zdF9ubywgcmlzY19jb2RlLCBjbnQsIHJpc2NfYWRkcikpOwogCiAJCQlyZXFfcmluZyA9ICh1aW50MTZfdCAqKWhhLT5yZXF1ZXN0X3Jpbmc7CiAJCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCiAJCQkJcmVxX3JpbmdbaV0gPSBjcHVfdG9fbGUxNihyaXNjX2NvZGVbaV0pOwogCi0JCQlpZiAoZndfaXRlci0+YWRkcmVzc2luZyA9PSBGV19JTkZPX0FERFJfTk9STUFMKSB7Ci0JCQkJcnZhbCA9IHFsYTJ4MDBfbG9hZF9yYW0oaGEsIGhhLT5yZXF1ZXN0X2RtYSwKLQkJCQkgICAgcmlzY19hZGRyZXNzLCBjbnQpOwotCQkJfSBlbHNlIHsKLQkJCQlydmFsID0gcWxhMngwMF9sb2FkX3JhbV9leHQoaGEsCi0JCQkJICAgIGhhLT5yZXF1ZXN0X2RtYSwgcmlzY19hZGRyZXNzLCBjbnQpOwotCQkJfQorCQkJcnZhbCA9IHFsYTJ4MDBfbG9hZF9yYW0oaGEsIGhhLT5yZXF1ZXN0X2RtYSwgcmlzY19hZGRyLAorCQkJICAgIGNudCk7CiAJCQlpZiAocnZhbCkgewogCQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBbRVJST1JdIEZhaWxlZCB0byAiCiAJCQkJICAgICJsb2FkIHNlZ21lbnQgJWQgb2YgZmlybXdhcmVcbiIsCkBAIC0zNTQ4LDE2ICszNTM4LDc2IEBACiAJCQl9CiAKIAkJCXJpc2NfY29kZSArPSBjbnQ7Ci0JCQlyaXNjX2FkZHJlc3MgKz0gY250OwotCQkJcmlzY19jb2RlX3NpemUgLT0gY250OworCQkJcmlzY19hZGRyICs9IGNudDsKKwkJCXJpc2Nfc2l6ZSAtPSBjbnQ7CiAJCQludW0rKzsKIAkJfQogCiAJCS8qIE5leHQgZmlybXdhcmUgc2VxdWVuY2UgKi8KIAkJZndfaXRlcisrOwogCX0KKwlyZXR1cm4gcnZhbDsKK30KIAotCXJldHVybiAocnZhbCk7CitpbnQKK3FsYTI0eHhfbG9hZF9yaXNjKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQzMl90ICpzcmlzY19hZGRyKQoreworCWludAlydmFsLCBudW0sIGk7CisJdWludDMyX3QgY250OworCXVpbnQzMl90ICpyaXNjX2NvZGU7CisJdWludDMyX3QgcmlzY19hZGRyLCByaXNjX3NpemU7CisJdWludDMyX3QgKnJlcV9yaW5nOworCXN0cnVjdCBxbGFfZndfaW5mbyAqZndfaXRlcjsKKworCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKKworCS8qIExvYWQgZmlybXdhcmUgc2VxdWVuY2VzICovCisJZndfaXRlciA9IGhhLT5icmRfaW5mby0+ZndfaW5mbzsKKwkqc3Jpc2NfYWRkciA9ICooKHVpbnQzMl90ICopZndfaXRlci0+bGZ3c3RhcnQpOworCXdoaWxlIChmd19pdGVyLT5hZGRyZXNzaW5nICE9IEZXX0lORk9fQUREUl9OT01PUkUpIHsKKwkJcmlzY19jb2RlID0gKHVpbnQzMl90ICopZndfaXRlci0+Zndjb2RlOworCQlyaXNjX3NpemUgPSAqKCh1aW50MzJfdCAqKWZ3X2l0ZXItPmZ3bGVuKTsKKwkJcmlzY19hZGRyID0gKigodWludDMyX3QgKilmd19pdGVyLT5sZndzdGFydCk7CisKKwkJbnVtID0gMDsKKwkJcnZhbCA9IDA7CisJCXdoaWxlIChyaXNjX3NpemUgPiAwICYmICFydmFsKSB7CisJCQljbnQgPSAodWludDMyX3QpKGhhLT5md190cmFuc2Zlcl9zaXplID4+IDIpOworCQkJaWYgKGNudCA+IHJpc2Nfc2l6ZSkKKwkJCQljbnQgPSByaXNjX3NpemU7CisKKwkJCURFQlVHNyhwcmludGsoInNjc2koJWxkKTogTG9hZGluZyByaXNjIHNlZ21lbnRAICIKKwkJCSAgICAiYWRkciAlcCwgbnVtYmVyIG9mIGJ5dGVzIDB4JXgsIG9mZnNldCAweCVseC5cbiIsCisJCQkgICAgaGEtPmhvc3Rfbm8sIHJpc2NfY29kZSwgY250LCByaXNjX2FkZHIpKTsKKworCQkJcmVxX3JpbmcgPSAodWludDMyX3QgKiloYS0+cmVxdWVzdF9yaW5nOworCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQkJCXJlcV9yaW5nW2ldID0gY3B1X3RvX2xlMzIocmlzY19jb2RlW2ldKTsKKworCQkJcnZhbCA9IHFsYTJ4MDBfbG9hZF9yYW0oaGEsIGhhLT5yZXF1ZXN0X2RtYSwgcmlzY19hZGRyLAorCQkJICAgIGNudCk7CisJCQlpZiAocnZhbCkgeworCQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBbRVJST1JdIEZhaWxlZCB0byAiCisJCQkJICAgICJsb2FkIHNlZ21lbnQgJWQgb2YgZmlybXdhcmVcbiIsCisJCQkJICAgIGhhLT5ob3N0X25vLCBudW0pKTsKKwkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJICAgICJbRVJST1JdIEZhaWxlZCB0byBsb2FkIHNlZ21lbnQgJWQgb2YgIgorCQkJCSAgICAiZmlybXdhcmVcbiIsIG51bSk7CisKKwkJCQlxbGEyeDAwX2R1bXBfcmVncyhoYSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXJpc2NfY29kZSArPSBjbnQ7CisJCQlyaXNjX2FkZHIgKz0gY250OworCQkJcmlzY19zaXplIC09IGNudDsKKwkJCW51bSsrOworCQl9CisKKwkJLyogTmV4dCBmaXJtd2FyZSBzZXF1ZW5jZSAqLworCQlmd19pdGVyKys7CisJfQorCXJldHVybiBydmFsOwogfQogCiBpbnQKQEAgLTM2NDIsOCArMzY5MiwxMDggQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAorI2Vsc2UJLyogIWRlZmluZWQoQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRSkgKi8KKwogaW50Ci1xbGEyNHh4X2xvYWRfcmlzY19ob3RwbHVnKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQzMl90ICpzcmlzY19hZGRyKQorcWxhMngwMF9sb2FkX3Jpc2Moc2NzaV9xbGFfaG9zdF90ICpoYSwgdWludDMyX3QgKnNyaXNjX2FkZHIpCit7CisJaW50CXJ2YWw7CisJaW50CWksIGZyYWdtZW50OworCXVpbnQxNl90ICp3Y29kZSwgKmZ3Y29kZTsKKwl1aW50MzJfdCByaXNjX2FkZHIsIHJpc2Nfc2l6ZSwgZndjbGVuLCB3bGVuLCAqc2VnOworCXN0cnVjdCBmd19ibG9iICpibG9iOworCisJLyogTG9hZCBmaXJtd2FyZSBibG9iLiAqLworCWJsb2IgPSBxbGEyeDAwX3JlcXVlc3RfZmlybXdhcmUoaGEpOworCWlmICghYmxvYikgeworCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwgIkZpcm13YXJlIGltYWdlIHVuYXZhaWxhYmxlLlxuIik7CisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCX0KKworCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKKworCXdjb2RlID0gKHVpbnQxNl90ICopaGEtPnJlcXVlc3RfcmluZzsKKwkqc3Jpc2NfYWRkciA9IDA7CisJZndjb2RlID0gKHVpbnQxNl90ICopYmxvYi0+ZnctPmRhdGE7CisJZndjbGVuID0gMDsKKworCS8qIFZhbGlkYXRlIGZpcm13YXJlIGltYWdlIGJ5IGNoZWNraW5nIHZlcnNpb24uICovCisJaWYgKGJsb2ItPmZ3LT5zaXplIDwgOCAqIHNpemVvZih1aW50MTZfdCkpIHsKKwkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlICglWmQpIVxuIiwKKwkJICAgIGJsb2ItPmZ3LT5zaXplKTsKKwkJZ290byBmYWlsX2Z3X2ludGVncml0eTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJd2NvZGVbaV0gPSBiZTE2X3RvX2NwdShmd2NvZGVbaSArIDRdKTsKKwlpZiAoKHdjb2RlWzBdID09IDB4ZmZmZiAmJiB3Y29kZVsxXSA9PSAweGZmZmYgJiYgd2NvZGVbMl0gPT0gMHhmZmZmICYmCisJICAgIHdjb2RlWzNdID09IDB4ZmZmZikgfHwgKHdjb2RlWzBdID09IDAgJiYgd2NvZGVbMV0gPT0gMCAmJgorCQl3Y29kZVsyXSA9PSAwICYmIHdjb2RlWzNdID09IDApKSB7CisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJVbmFibGUgdG8gdmVyaWZ5IGludGVncml0eSBvZiBmaXJtd2FyZSBpbWFnZSFcbiIpOworCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiRmlybXdhcmUgZGF0YTogJTA0eCAlMDR4ICUwNHggJTA0eCFcbiIsIHdjb2RlWzBdLAorCQkgICAgd2NvZGVbMV0sIHdjb2RlWzJdLCB3Y29kZVszXSk7CisJCWdvdG8gZmFpbF9md19pbnRlZ3JpdHk7CisJfQorCisJc2VnID0gYmxvYi0+c2VnczsKKwl3aGlsZSAoKnNlZyAmJiBydmFsID09IFFMQV9TVUNDRVNTKSB7CisJCXJpc2NfYWRkciA9ICpzZWc7CisJCSpzcmlzY19hZGRyID0gKnNyaXNjX2FkZHIgPT0gMCA/ICpzZWcgOiAqc3Jpc2NfYWRkcjsKKwkJcmlzY19zaXplID0gYmUxNl90b19jcHUoZndjb2RlWzNdKTsKKworCQkvKiBWYWxpZGF0ZSBmaXJtd2FyZSBpbWFnZSBzaXplLiAqLworCQlmd2NsZW4gKz0gcmlzY19zaXplICogc2l6ZW9mKHVpbnQxNl90KTsKKwkJaWYgKGJsb2ItPmZ3LT5zaXplIDwgZndjbGVuKSB7CisJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlICIKKwkJCSAgICAiKCVaZCkhXG4iLCBibG9iLT5mdy0+c2l6ZSk7CisJCQlnb3RvIGZhaWxfZndfaW50ZWdyaXR5OworCQl9CisKKwkJZnJhZ21lbnQgPSAwOworCQl3aGlsZSAocmlzY19zaXplID4gMCAmJiBydmFsID09IFFMQV9TVUNDRVNTKSB7CisJCQl3bGVuID0gKHVpbnQxNl90KShoYS0+ZndfdHJhbnNmZXJfc2l6ZSA+PiAxKTsKKwkJCWlmICh3bGVuID4gcmlzY19zaXplKQorCQkJCXdsZW4gPSByaXNjX3NpemU7CisKKwkJCURFQlVHNyhwcmludGsoInNjc2koJWxkKTogTG9hZGluZyByaXNjIHNlZ21lbnRAIHJpc2MgIgorCQkJICAgICJhZGRyICV4LCBudW1iZXIgb2Ygd29yZHMgMHgleC5cbiIsIGhhLT5ob3N0X25vLAorCQkJICAgIHJpc2NfYWRkciwgd2xlbikpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgd2xlbjsgaSsrKQorCQkJCXdjb2RlW2ldID0gc3dhYjE2KGZ3Y29kZVtpXSk7CisKKwkJCXJ2YWwgPSBxbGEyeDAwX2xvYWRfcmFtKGhhLCBoYS0+cmVxdWVzdF9kbWEsIHJpc2NfYWRkciwKKwkJCSAgICB3bGVuKTsKKwkJCWlmIChydmFsKSB7CisJCQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6W0VSUk9SXSBGYWlsZWQgdG8gbG9hZCAiCisJCQkJICAgICJzZWdtZW50ICVkIG9mIGZpcm13YXJlXG4iLCBoYS0+aG9zdF9ubywKKwkJCQkgICAgZnJhZ21lbnQpKTsKKwkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJICAgICJbRVJST1JdIEZhaWxlZCB0byBsb2FkIHNlZ21lbnQgJWQgb2YgIgorCQkJCSAgICAiZmlybXdhcmVcbiIsIGZyYWdtZW50KTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZndjb2RlICs9IHdsZW47CisJCQlyaXNjX2FkZHIgKz0gd2xlbjsKKwkJCXJpc2Nfc2l6ZSAtPSB3bGVuOworCQkJZnJhZ21lbnQrKzsKKwkJfQorCisJCS8qIE5leHQgc2VnbWVudC4gKi8KKwkJc2VnKys7CisJfQorCXJldHVybiBydmFsOworCitmYWlsX2Z3X2ludGVncml0eToKKwlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKK30KKworaW50CitxbGEyNHh4X2xvYWRfcmlzYyhzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MzJfdCAqc3Jpc2NfYWRkcikKIHsKIAlpbnQJcnZhbDsKIAlpbnQJc2VnbWVudHMsIGZyYWdtZW50OwpAQCAtMzY1MSwxNCArMzgwMSwxMyBAQAogCXVpbnQzMl90IHJpc2NfYWRkcjsKIAl1aW50MzJfdCByaXNjX3NpemU7CiAJdWludDMyX3QgaTsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCXN0cnVjdCBmd19ibG9iICpibG9iOwogCXVpbnQzMl90ICpmd2NvZGUsIGZ3Y2xlbjsKIAotCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgaGEtPmJyZF9pbmZvLT5md19mbmFtZSwKLQkgICAgJmhhLT5wZGV2LT5kZXYpKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkgICAgIkZpcm13YXJlIGltYWdlIGZpbGUgbm90IGF2YWlsYWJsZTogJyVzJ1xuIiwKLQkJICAgIGhhLT5icmRfaW5mby0+ZndfZm5hbWUpOworCS8qIExvYWQgZmlybXdhcmUgYmxvYi4gKi8KKwlibG9iID0gcWxhMngwMF9yZXF1ZXN0X2Zpcm13YXJlKGhhKTsKKwlpZiAoIWJsb2IpIHsKKwkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsICJGaXJtd2FyZSBpbWFnZSB1bmF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9CiAKQEAgLTM2NjcsMTQgKzM4MTYsMTQgQEAKIAlzZWdtZW50cyA9IEZBX1JJU0NfQ09ERV9TRUdNRU5UUzsKIAlkY29kZSA9ICh1aW50MzJfdCAqKWhhLT5yZXF1ZXN0X3Jpbmc7CiAJKnNyaXNjX2FkZHIgPSAwOwotCWZ3Y29kZSA9ICh1aW50MzJfdCAqKWZ3X2VudHJ5LT5kYXRhOworCWZ3Y29kZSA9ICh1aW50MzJfdCAqKWJsb2ItPmZ3LT5kYXRhOwogCWZ3Y2xlbiA9IDA7CiAKIAkvKiBWYWxpZGF0ZSBmaXJtd2FyZSBpbWFnZSBieSBjaGVja2luZyB2ZXJzaW9uLiAqLwotCWlmIChmd19lbnRyeS0+c2l6ZSA8IDggKiBzaXplb2YodWludDMyX3QpKSB7CisJaWYgKGJsb2ItPmZ3LT5zaXplIDwgOCAqIHNpemVvZih1aW50MzJfdCkpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZsYXNoIGZpcm13YXJlIGltYWdlICIKLQkJICAgICIoJVpkKSFcbiIsIGZ3X2VudHJ5LT5zaXplKTsKKwkJICAgICJVbmFibGUgdG8gdmVyaWZ5IGludGVncml0eSBvZiBmaXJtd2FyZSBpbWFnZSAoJVpkKSFcbiIsCisJCSAgICBibG9iLT5mdy0+c2l6ZSk7CiAJCWdvdG8gZmFpbF9md19pbnRlZ3JpdHk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCkBAIC0zNjg0LDcgKzM4MzMsNyBAQAogCSAgICAoZGNvZGVbMF0gPT0gMCAmJiBkY29kZVsxXSA9PSAwICYmIGRjb2RlWzJdID09IDAgJiYKIAkJZGNvZGVbM10gPT0gMCkpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZsYXNoIGZpcm13YXJlIGltYWdlIVxuIik7CisJCSAgICAiVW5hYmxlIHRvIHZlcmlmeSBpbnRlZ3JpdHkgb2YgZmlybXdhcmUgaW1hZ2UhXG4iKTsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkgICAgIkZpcm13YXJlIGRhdGE6ICUwOHggJTA4eCAlMDh4ICUwOHghXG4iLCBkY29kZVswXSwKIAkJICAgIGRjb2RlWzFdLCBkY29kZVsyXSwgZGNvZGVbM10pOwpAQCAtMzY5OCwxMCArMzg0NywxMSBAQAogCiAJCS8qIFZhbGlkYXRlIGZpcm13YXJlIGltYWdlIHNpemUuICovCiAJCWZ3Y2xlbiArPSByaXNjX3NpemUgKiBzaXplb2YodWludDMyX3QpOwotCQlpZiAoZndfZW50cnktPnNpemUgPCBmd2NsZW4pIHsKKwkJaWYgKGJsb2ItPmZ3LT5zaXplIDwgZndjbGVuKSB7CiAJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZsYXNoIGZpcm13YXJlICIKLQkJCSAgICAiaW1hZ2UgKCVaZCkhXG4iLCBmd19lbnRyeS0+c2l6ZSk7CisJCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlICIKKwkJCSAgICAiKCVaZCkhXG4iLCBibG9iLT5mdy0+c2l6ZSk7CisKIAkJCWdvdG8gZmFpbF9md19pbnRlZ3JpdHk7CiAJCX0KIApAQCAtMzczOSwxMyArMzg4OSw5IEBACiAJCS8qIE5leHQgc2VnbWVudC4gKi8KIAkJc2VnbWVudHMtLTsKIAl9Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKIAlyZXR1cm4gcnZhbDsKIAogZmFpbF9md19pbnRlZ3JpdHk6Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKIAlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKLQogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGM1OGM5ZDkuLjI0MzA0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC01NCwxMCArNTQsMTIgQEAKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGxvZ2lucmV0cnljb3VudCwKIAkJIlNwZWNpZnkgYW4gYWx0ZXJuYXRlIHZhbHVlIGZvciB0aGUgTlZSQU0gbG9naW4gcmV0cnkgY291bnQuIik7CiAKLWludCBxbDJ4Zndsb2FkYmluPTE7Ci1tb2R1bGVfcGFyYW0ocWwyeGZ3bG9hZGJpbiwgaW50LCBTX0lSVUdPfFNfSVJVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhxbDJ4Zndsb2FkYmluLAotCQkiTG9hZCBJU1AyeHh4IGZpcm13YXJlIGltYWdlIHZpYSBob3RwbHVnLiIpOworI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRSkKK2ludCBxbDJ4Zndsb2FkZmxhc2g7Cittb2R1bGVfcGFyYW0ocWwyeGZ3bG9hZGZsYXNoLCBpbnQsIFNfSVJVR098U19JUlVTUik7CitNT0RVTEVfUEFSTV9ERVNDKHFsMnhmd2xvYWRmbGFzaCwKKwkJIkxvYWQgSVNQMjR4eCBmaXJtd2FyZSBpbWFnZSBmcm9tIEZMQVNIIChvbmJvYXJkIG1lbW9yeSkuIik7CisjZW5kaWYKIAogc3RhdGljIHZvaWQgcWxhMngwMF9mcmVlX2RldmljZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKQEAgLTEyNjEsMTIgKzEyNjMsMTYgQEAKIAljaGFyIHBjaV9pbmZvWzIwXTsKIAljaGFyIGZ3X3N0clszMF07CiAJZmNfcG9ydF90ICpmY3BvcnQ7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0OwogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQogCQlnb3RvIHByb2JlX291dDsKIAotCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoYnJkX2luZm8tPnNodCA/IGJyZF9pbmZvLT5zaHQ6Ci0JICAgICZxbGEyeDAwX2RyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKHNjc2lfcWxhX2hvc3RfdCkpOworCXNodCA9ICZxbGEyeDAwX2RyaXZlcl90ZW1wbGF0ZTsKKwlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MjIgfHwKKwkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MzIpCisJCXNodCA9ICZxbGEyNHh4X2RyaXZlcl90ZW1wbGF0ZTsKKwlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKHNodCwgc2l6ZW9mKHNjc2lfcWxhX2hvc3RfdCkpOwogCWlmIChob3N0ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgInFsYTJ4eHg6IENvdWxkbid0IGFsbG9jYXRlIGhvc3QgZnJvbSBzY3NpIGxheWVyIVxuIik7CkBAIC0xMjkxLDggKzEyOTcsOCBAQAogCQlnb3RvIHByb2JlX2ZhaWxlZDsKIAogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgIkZvdW5kIGFuICVzLCBpcnEgJWQsIGlvYmFzZSAweCVwXG4iLCBoYS0+YnJkX2luZm8tPmlzcF9uYW1lLAotCSAgICBwZGV2LT5pcnEsIGhhLT5pb2Jhc2UpOworCSAgICAiRm91bmQgYW4gSVNQJTA0WCwgaXJxICVkLCBpb2Jhc2UgMHglcFxuIiwgcGRldi0+ZGV2aWNlLCBwZGV2LT5pcnEsCisJICAgIGhhLT5pb2Jhc2UpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmhhLT5oYXJkd2FyZV9sb2NrKTsKIApAQCAtMTM2OCw5ICsxMzc0LDExIEBACiAJCWhhLT5pc3Bfb3BzLnJlc2V0X2FkYXB0ZXIgPSBxbGEyNHh4X3Jlc2V0X2FkYXB0ZXI7CiAJCWhhLT5pc3Bfb3BzLm52cmFtX2NvbmZpZyA9IHFsYTI0eHhfbnZyYW1fY29uZmlnOwogCQloYS0+aXNwX29wcy51cGRhdGVfZndfb3B0aW9ucyA9IHFsYTI0eHhfdXBkYXRlX2Z3X29wdGlvbnM7Ci0JCWhhLT5pc3Bfb3BzLmxvYWRfcmlzYyA9IHFsYTI0eHhfbG9hZF9yaXNjX2ZsYXNoOwotCQlpZiAocWwyeGZ3bG9hZGJpbikKLQkJCWhhLT5pc3Bfb3BzLmxvYWRfcmlzYyA9IHFsYTI0eHhfbG9hZF9yaXNjX2hvdHBsdWc7CisJCWhhLT5pc3Bfb3BzLmxvYWRfcmlzYyA9IHFsYTI0eHhfbG9hZF9yaXNjOworI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRSkKKwkJaWYgKHFsMnhmd2xvYWRmbGFzaCkKKwkJCWhhLT5pc3Bfb3BzLmxvYWRfcmlzYyA9IHFsYTI0eHhfbG9hZF9yaXNjX2ZsYXNoOworI2VuZGlmCiAJCWhhLT5pc3Bfb3BzLnBjaV9pbmZvX3N0ciA9IHFsYTI0eHhfcGNpX2luZm9fc3RyOwogCQloYS0+aXNwX29wcy5md192ZXJzaW9uX3N0ciA9IHFsYTI0eHhfZndfdmVyc2lvbl9zdHI7CiAJCWhhLT5pc3Bfb3BzLmludHJfaGFuZGxlciA9IHFsYTI0eHhfaW50cl9oYW5kbGVyOwpAQCAtMTUzMSwxMSArMTUzOSwxMiBAQAogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlxuIgogCSAgICAiIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXI6ICVzXG4iCiAJICAgICIgIFFMb2dpYyAlcyAtICVzXG4iCi0JICAgICIgICVzOiAlcyBAICVzIGhkbWElYywgaG9zdCM9JWxkLCBmdz0lc1xuIiwgcWxhMngwMF92ZXJzaW9uX3N0ciwKLQkgICAgaGEtPm1vZGVsX251bWJlciwgaGEtPm1vZGVsX2Rlc2MgPyBoYS0+bW9kZWxfZGVzYzogIiIsCi0JICAgIGhhLT5icmRfaW5mby0+aXNwX25hbWUsIGhhLT5pc3Bfb3BzLnBjaV9pbmZvX3N0cihoYSwgcGNpX2luZm8pLAotCSAgICBwY2lfbmFtZShwZGV2KSwgaGEtPmZsYWdzLmVuYWJsZV82NGJpdF9hZGRyZXNzaW5nID8gJysnOiAnLScsCi0JICAgIGhhLT5ob3N0X25vLCBoYS0+aXNwX29wcy5md192ZXJzaW9uX3N0cihoYSwgZndfc3RyKSk7CisJICAgICIgIElTUCUwNFg6ICVzIEAgJXMgaGRtYSVjLCBob3N0Iz0lbGQsIGZ3PSVzXG4iLAorCSAgICBxbGEyeDAwX3ZlcnNpb25fc3RyLCBoYS0+bW9kZWxfbnVtYmVyLAorCSAgICBoYS0+bW9kZWxfZGVzYyA/IGhhLT5tb2RlbF9kZXNjOiAiIiwgcGRldi0+ZGV2aWNlLAorCSAgICBoYS0+aXNwX29wcy5wY2lfaW5mb19zdHIoaGEsIHBjaV9pbmZvKSwgcGNpX25hbWUocGRldiksCisJICAgIGhhLT5mbGFncy5lbmFibGVfNjRiaXRfYWRkcmVzc2luZyA/ICcrJzogJy0nLCBoYS0+aG9zdF9ubywKKwkgICAgaGEtPmlzcF9vcHMuZndfdmVyc2lvbl9zdHIoaGEsIGZ3X3N0cikpOwogCiAJLyogR28gd2l0aCBmY19ycG9ydCByZWdpc3RyYXRpb24uICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZoYS0+ZmNwb3J0cywgbGlzdCkKQEAgLTI0ODMsNDUgKzI0OTIsMTE1IEBACiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcWxhX2JvYXJkX2luZm8gcWxhX2JvYXJkX3RibFtdID0gewotCXsKLQkJLmRydl9uYW1lCT0gInFsYTI0MDAiLAotCQkuaXNwX25hbWUJPSAiSVNQMjQyMiIsCi0JCS5md19mbmFtZQk9ICJxbDI0MDBfZncuYmluIiwKLQkJLnNodAkJPSAmcWxhMjR4eF9kcml2ZXJfdGVtcGxhdGUsCi0JfSwKLQl7Ci0JCS5kcnZfbmFtZQk9ICJxbGEyNDAwIiwKLQkJLmlzcF9uYW1lCT0gIklTUDI0MzIiLAotCQkuZndfZm5hbWUJPSAicWwyNDAwX2Z3LmJpbiIsCi0JCS5zaHQJCT0gJnFsYTI0eHhfZHJpdmVyX3RlbXBsYXRlLAotCX0sCisjaWYgZGVmaW5lZChDT05GSUdfU0NTSV9RTEEyWFhYX0VNQkVEREVEX0ZJUk1XQVJFKQorCisjZGVmaW5lIHFsYTJ4MDBfcmVsZWFzZV9maXJtd2FyZSgpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcWxhMngwMF9wY2lfbW9kdWxlX2luaXQoKQkoMCkKKyNkZWZpbmUgcWxhMngwMF9wY2lfbW9kdWxlX2V4aXQoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbHNlCS8qICFkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkUpICovCisKKy8qIEZpcm13YXJlIGludGVyZmFjZSByb3V0aW5lcy4gKi8KKworI2RlZmluZSBGV19CTE9CUwk2CisjZGVmaW5lIEZXX0lTUDIxWFgJMAorI2RlZmluZSBGV19JU1AyMlhYCTEKKyNkZWZpbmUgRldfSVNQMjMwMAkyCisjZGVmaW5lIEZXX0lTUDIzMjIJMworI2RlZmluZSBGV19JU1A2M1hYCTQKKyNkZWZpbmUgRldfSVNQMjRYWAk1CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKHFsYV9md19sb2NrKTsKKworc3RhdGljIHN0cnVjdCBmd19ibG9iIHFsYV9md19ibG9ic1tGV19CTE9CU10gPSB7CisJeyAubmFtZSA9ICJxbDIxMDBfZncuYmluIiwgLnNlZ3MgPSB7IDB4MTAwMCwgMCB9LCB9LAorCXsgLm5hbWUgPSAicWwyMjAwX2Z3LmJpbiIsIC5zZWdzID0geyAweDEwMDAsIDAgfSwgfSwKKwl7IC5uYW1lID0gInFsMjMwMF9mdy5iaW4iLCAuc2VncyA9IHsgMHg4MDAsIDAgfSwgfSwKKwl7IC5uYW1lID0gInFsMjMyMl9mdy5iaW4iLCAuc2VncyA9IHsgMHg4MDAsIDB4MWMwMDAsIDB4MWUwMDAsIDAgfSwgfSwKKwl7IC5uYW1lID0gInFsNjMxMl9mdy5iaW4iLCAuc2VncyA9IHsgMHg4MDAsIDAgfSwgfSwKKwl7IC5uYW1lID0gInFsMjQwMF9mdy5iaW4iLCB9LAorfTsKKworc3RydWN0IGZ3X2Jsb2IgKgorcWxhMngwMF9yZXF1ZXN0X2Zpcm13YXJlKHNjc2lfcWxhX2hvc3RfdCAqaGEpCit7CisJc3RydWN0IGZ3X2Jsb2IgKmJsb2I7CisKKwlibG9iID0gTlVMTDsKKwlpZiAoSVNfUUxBMjEwMChoYSkpIHsKKwkJYmxvYiA9ICZxbGFfZndfYmxvYnNbRldfSVNQMjFYWF07CisJfSBlbHNlIGlmIChJU19RTEEyMjAwKGhhKSkgeworCQlibG9iID0gJnFsYV9md19ibG9ic1tGV19JU1AyMlhYXTsKKwl9IGVsc2UgaWYgKElTX1FMQTIzMDAoaGEpIHx8IElTX1FMQTIzMTIoaGEpKSB7CisJCWJsb2IgPSAmcWxhX2Z3X2Jsb2JzW0ZXX0lTUDIzMDBdOworCX0gZWxzZSBpZiAoSVNfUUxBMjMyMihoYSkpIHsKKwkJYmxvYiA9ICZxbGFfZndfYmxvYnNbRldfSVNQMjMyMl07CisJfSBlbHNlIGlmIChJU19RTEE2MzEyKGhhKSB8fCBJU19RTEE2MzIyKGhhKSkgeworCQlibG9iID0gJnFsYV9md19ibG9ic1tGV19JU1A2M1hYXTsKKwl9IGVsc2UgaWYgKElTX1FMQTI0WFgoaGEpKSB7CisJCWJsb2IgPSAmcWxhX2Z3X2Jsb2JzW0ZXX0lTUDI0WFhdOworCX0KKworCWRvd24oJnFsYV9md19sb2NrKTsKKwlpZiAoYmxvYi0+ZncpCisJCWdvdG8gb3V0OworCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmJsb2ItPmZ3LCBibG9iLT5uYW1lLCAmaGEtPnBkZXYtPmRldikpIHsKKwkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBpbWFnZSAiCisJCSAgICAiKCVzKS5cbiIsIGhhLT5ob3N0X25vLCBibG9iLT5uYW1lKSk7CisJCWJsb2ItPmZ3ID0gTlVMTDsKKwkJYmxvYiA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXVwKCZxbGFfZndfbG9jayk7CisJcmV0dXJuIGJsb2I7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyeDAwX3JlbGVhc2VfZmlybXdhcmUodm9pZCkKK3sKKwlpbnQgaWR4OworCisJZG93bigmcWxhX2Z3X2xvY2spOworCWZvciAoaWR4ID0gMDsgaWR4IDwgRldfQkxPQlM7IGlkeCsrKQorCQlpZiAocWxhX2Z3X2Jsb2JzW2lkeF0uZncpCisJCQlyZWxlYXNlX2Zpcm13YXJlKHFsYV9md19ibG9ic1tpZHhdLmZ3KTsKKwl1cCgmcWxhX2Z3X2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IHFsYV9ib2FyZF9pbmZvIHFsYV9ib2FyZF90YmwgPSB7CisJLmRydl9uYW1lICAgICAgID0gInFsYTJ4eHgiLAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsYTJ4eHhfcGNpX3RibFtdID0gewotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1FMT0dJQywKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDIyLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZxbGFfYm9hcmRfdGJsWzBdLAotCX0sCi0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUUxPR0lDLAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MzIsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJnFsYV9ib2FyZF90YmxbMV0sCi0JfSwKLQl7MCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjEwMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIzMDAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJeyBQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMxMiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzIyLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDYzMTIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJeyBQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNjMyMiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDIyLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MzIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJeyAwIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsYTJ4eHhfcGNpX3RibCk7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBxbGEyeHh4X3Byb2JlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXJldHVybiBxbGEyeDAwX3Byb2JlX29uZShwZGV2LAotCSAgICAoc3RydWN0IHFsYV9ib2FyZF9pbmZvICopaWQtPmRyaXZlcl9kYXRhKTsKKwlyZXR1cm4gcWxhMngwMF9wcm9iZV9vbmUocGRldiwgJnFsYV9ib2FyZF90YmwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQKQEAgLTI1MzIsMTEgKzI2MTEsMjggQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHFsYTJ4eHhfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAicWxhMnh4eCIsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5pZF90YWJsZQk9IHFsYTJ4eHhfcGNpX3RibCwKIAkucHJvYmUJCT0gcWxhMnh4eF9wcm9iZV9vbmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChxbGEyeHh4X3JlbW92ZV9vbmUpLAogfTsKIAorc3RhdGljIGlubGluZSBpbnQKK3FsYTJ4MDBfcGNpX21vZHVsZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcWxhMnh4eF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitxbGEyeDAwX3BjaV9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcWxhMnh4eF9wY2lfZHJpdmVyKTsKK30KKworI2VuZGlmCisKIC8qKgogICogcWxhMngwMF9tb2R1bGVfaW5pdCAtIE1vZHVsZSBpbml0aWFsaXphdGlvbi4KICAqKi8KQEAgLTI1NTYsNiArMjY1Miw5IEBACiAKIAkvKiBEZXJpdmUgdmVyc2lvbiBzdHJpbmcuICovCiAJc3RyY3B5KHFsYTJ4MDBfdmVyc2lvbl9zdHIsIFFMQTJYWFhfVkVSU0lPTik7CisjaWYgZGVmaW5lZChDT05GSUdfU0NTSV9RTEEyWFhYX0VNQkVEREVEX0ZJUk1XQVJFKQorCXN0cmNhdChxbGEyeDAwX3ZlcnNpb25fc3RyLCAiLWZ3Iik7CisjZW5kaWYKICNpZiBERUJVR19RTEEyMTAwCiAJc3RyY2F0KHFsYTJ4MDBfdmVyc2lvbl9zdHIsICItZGVidWciKTsKICNlbmRpZgpAQCAtMjU2NSw3ICsyNjY0LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwcmludGsoS0VSTl9JTkZPICJRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyXG4iKTsKLQlyZXQgPSBwY2lfbW9kdWxlX2luaXQoJnFsYTJ4eHhfcGNpX2RyaXZlcik7CisJcmV0ID0gcWxhMngwMF9wY2lfbW9kdWxlX2luaXQoKTsKIAlpZiAocmV0KSB7CiAJCWttZW1fY2FjaGVfZGVzdHJveShzcmJfY2FjaGVwKTsKIAkJZmNfcmVsZWFzZV90cmFuc3BvcnQocWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGUpOwpAQCAtMjU3OSw3ICsyNjc4LDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogcWxhMngwMF9tb2R1bGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcWxhMnh4eF9wY2lfZHJpdmVyKTsKKwlxbGEyeDAwX3BjaV9tb2R1bGVfZXhpdCgpOworCXFsYTJ4MDBfcmVsZWFzZV9maXJtd2FyZSgpOwogCWttZW1fY2FjaGVfZGVzdHJveShzcmJfY2FjaGVwKTsKIAlmY19yZWxlYXNlX3RyYW5zcG9ydChxbGEyeHh4X3RyYW5zcG9ydF90ZW1wbGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jIGIvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYwppbmRleCA1YjFjMTIwLi41ZWM1ZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCQkJICAgICAgIHJhaWRfcmVtb3ZlLAogCQkJICAgICAgIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWVudW0gcmFpZF9zdGF0ZQl2YWx1ZTsKIAljaGFyCQkqbmFtZTsKIH0gcmFpZF9zdGF0ZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCmluZGV4IDkzMjFjZGYuLmIyYmYxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAJLmhvc3Rfc3RvcAkJPSBtdl9ob3N0X3N0b3AsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gbXZfcG9ydF9pbmZvW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbXZfcG9ydF9pbmZvW10gPSB7CiAJeyAgLyogY2hpcF81MDR4ICovCiAJCS5zaHQJCT0gJm12X3NodCwKIAkJLmhvc3RfZmxhZ3MJPSBNVl9DT01NT05fRkxBR1MsCkBAIC0xMjQzLDggKzEyNDMsMTAgQEAKIAkJCQlWUFJJTlRLKCJwb3J0ICV1IElSUSBmb3VuZCBmb3IgcWMsICIKIAkJCQkJImF0YV9zdGF0dXMgMHgleFxuIiwgcG9ydCxhdGFfc3RhdHVzKTsKIAkJCQkvKiBtYXJrIHFjIHN0YXR1cyBhcHByb3ByaWF0ZWx5ICovCi0JCQkJaWYgKCEocWMtPnRmLmN0bCAmIEFUQV9OSUVOKSkKLQkJCQkJYXRhX3FjX2NvbXBsZXRlKHFjLCBlcnJfbWFzayk7CisJCQkJaWYgKCEocWMtPnRmLmN0bCAmIEFUQV9OSUVOKSkgeworCQkJCQlxYy0+ZXJyX21hc2sgfD0gZXJyX21hc2s7CisJCQkJCWF0YV9xY19jb21wbGV0ZShxYyk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMTg2NSw3ICsxODY3LDggQEAKIAkgCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAJCXFjLT5zY3NpZG9uZSA9IHNjc2lfZmluaXNoX2NvbW1hbmQ7Ci0JCWF0YV9xY19jb21wbGV0ZShxYywgQUNfRVJSX09USEVSKTsKKwkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9PVEhFUjsKKwkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCmluZGV4IDI2OTE2MjUuLmRhN2ZhMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCS5ob3N0X3N0b3AJCT0gYXRhX3BjaV9ob3N0X3N0b3AsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gcGRjX3BvcnRfaW5mb1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHBkY19wb3J0X2luZm9bXSA9IHsKIAkvKiBib2FyZF8yMDM3eCAqLwogCXsKIAkJLnNodAkJPSAmcGRjX2F0YV9zaHQsCkBAIC00MDEsNyArNDAxLDggQEAKIAljYXNlIEFUQV9QUk9UX05PREFUQToKIAkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogY29tbWFuZCB0aW1lb3V0XG4iLCBhcC0+aWQpOwogCQlkcnZfc3RhdCA9IGF0YV93YWl0X2lkbGUoYXApOwotCQlhdGFfcWNfY29tcGxldGUocWMsIF9fYWNfZXJyX21hc2soZHJ2X3N0YXQpKTsKKwkJcWMtPmVycl9tYXNrIHw9IF9fYWNfZXJyX21hc2soZHJ2X3N0YXQpOworCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00MTAsNyArNDExLDggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogdW5rbm93biB0aW1lb3V0LCBjbWQgMHgleCBzdGF0IDB4JXhcbiIsCiAJCSAgICAgICBhcC0+aWQsIHFjLT50Zi5jb21tYW5kLCBkcnZfc3RhdCk7CiAKLQkJYXRhX3FjX2NvbXBsZXRlKHFjLCBhY19lcnJfbWFzayhkcnZfc3RhdCkpOworCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2soZHJ2X3N0YXQpOworCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQlicmVhazsKIAl9CiAKQEAgLTQyMiwyMSArNDI0LDIxIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwZGNfaG9zdF9pbnRyKCBzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDAsIGVycl9tYXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDA7CiAJdTMyIHRtcDsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSAodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuY21kX2FkZHIgKyBQRENfR0xPQkFMX0NUTDsKIAogCXRtcCA9IHJlYWRsKG1taW8pOwogCWlmICh0bXAgJiBQRENfRVJSX01BU0spIHsKLQkJZXJyX21hc2sgPSBBQ19FUlJfREVWOworCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0RFVjsKIAkJcGRjX3Jlc2V0X3BvcnQoYXApOwogCX0KIAogCXN3aXRjaCAocWMtPnRmLnByb3RvY29sKSB7CiAJY2FzZSBBVEFfUFJPVF9ETUE6CiAJY2FzZSBBVEFfUFJPVF9OT0RBVEE6Ci0JCWVycl9tYXNrIHw9IGFjX2Vycl9tYXNrKGF0YV93YWl0X2lkbGUoYXApKTsKLQkJYXRhX3FjX2NvbXBsZXRlKHFjLCBlcnJfbWFzayk7CisJCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhhdGFfd2FpdF9pZGxlKGFwKSk7CisJCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJCWhhbmRsZWQgPSAxOwogCQlicmVhazsKIApAQCAtNzAzLDcgKzcwNSw3IEBACiAJCXByb2JlX2VudC0+cG9ydFszXS5zY3JfYWRkciA9IGJhc2UgKyAweDcwMDsKIAkJYnJlYWs7CiAJY2FzZSBib2FyZF8yMDM3eDoKLSAgICAgICAJCXByb2JlX2VudC0+bl9wb3J0cyA9IDI7CisJCXByb2JlX2VudC0+bl9wb3J0cyA9IDI7CiAJCWJyZWFrOwogCWNhc2UgYm9hcmRfMjA2MTk6CiAJCXByb2JlX2VudC0+bl9wb3J0cyA9IDQ7CkBAIC03MTMsNyArNzE1LDcgQEAKIAogCQlwcm9iZV9lbnQtPnBvcnRbMl0uc2NyX2FkZHIgPSBiYXNlICsgMHg2MDA7CiAJCXByb2JlX2VudC0+cG9ydFszXS5zY3JfYWRkciA9IGJhc2UgKyAweDcwMDsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKaW5kZXggYTg5ODdmNS4uZGUwNWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkuYm1kbWFfc3RhdHVzCQk9IHFzX2JtZG1hX3N0YXR1cywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBxc19wb3J0X2luZm9bXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBxc19wb3J0X2luZm9bXSA9IHsKIAkvKiBib2FyZF8yMDY4X2lkeCAqLwogCXsKIAkJLnNodAkJPSAmcXNfYXRhX3NodCwKQEAgLTQwOSw4ICs0MDksOCBAQAogCQkJCQljYXNlIDM6IC8qIGRldmljZSBlcnJvciAqLwogCQkJCQkJcHAtPnN0YXRlID0gcXNfc3RhdGVfaWRsZTsKIAkJCQkJCXFzX2VudGVyX3JlZ19tb2RlKHFjLT5hcCk7Ci0JCQkJCQlhdGFfcWNfY29tcGxldGUocWMsCi0JCQkJCQkJYWNfZXJyX21hc2soc0RTVCkpOworCQkJCQkJcWMtPmVycl9tYXNrIHw9IGFjX2Vycl9tYXNrKHNEU1QpOworCQkJCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgogCQkJCQkJYnJlYWs7CkBAIC00NDcsNyArNDQ3LDggQEAKIAogCQkJCS8qIGNvbXBsZXRlIHRhc2tmaWxlIHRyYW5zYWN0aW9uICovCiAJCQkJcHAtPnN0YXRlID0gcXNfc3RhdGVfaWRsZTsKLQkJCQlhdGFfcWNfY29tcGxldGUocWMsIGFjX2Vycl9tYXNrKHN0YXR1cykpOworCQkJCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhzdGF0dXMpOworCQkJCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJCQkJaGFuZGxlZCA9IDE7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKaW5kZXggMzYwOTE4Ni4uZDIwNTM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCS5ob3N0X3N0b3AJCT0gYXRhX3BjaV9ob3N0X3N0b3AsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lsX3BvcnRfaW5mb1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpbF9wb3J0X2luZm9bXSA9IHsKIAkvKiBzaWxfMzExMiAqLwogCXsKIAkJLnNodAkJPSAmc2lsX3NodCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCmluZGV4IGUwZDZmMTkuLmEwYWQzZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwpAQCAtNjU0LDcgKzY1NCw4IEBACiAJICovCiAJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogY29tbWFuZCB0aW1lb3V0XG4iLCBhcC0+aWQpOwogCXFjLT5zY3NpZG9uZSA9IHNjc2lfZmluaXNoX2NvbW1hbmQ7Ci0JYXRhX3FjX2NvbXBsZXRlKHFjLCBBQ19FUlJfT1RIRVIpOworCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfT1RIRVI7CisJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAogCXNpbDI0X3Jlc2V0X2NvbnRyb2xsZXIoYXApOwogfQpAQCAtNzExLDggKzcxMiwxMCBAQAogCQlzaWwyNF9yZXNldF9jb250cm9sbGVyKGFwKTsKIAl9CiAKLQlpZiAocWMpCi0JCWF0YV9xY19jb21wbGV0ZShxYywgZXJyX21hc2spOworCWlmIChxYykgeworCQlxYy0+ZXJyX21hc2sgfD0gZXJyX21hc2s7CisJCWF0YV9xY19jb21wbGV0ZShxYyk7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2lsMjRfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC03MzQsOCArNzM3LDEwIEBACiAJCSAqLwogCQlzaWwyNF91cGRhdGVfdGYoYXApOwogCi0JCWlmIChxYykKLQkJCWF0YV9xY19jb21wbGV0ZShxYywgYWNfZXJyX21hc2socHAtPnRmLmNvbW1hbmQpKTsKKwkJaWYgKHFjKSB7CisJCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2socHAtPnRmLmNvbW1hbmQpOworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJfQogCX0gZWxzZQogCQlzaWwyNF9lcnJvcl9pbnRyKGFwLCBzbG90X3N0YXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwppbmRleCBhYzdiMGQ4Li45NGIyNTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJLmhvc3Rfc3RvcAkJPSBwZGMyMDYyMV9ob3N0X3N0b3AsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gcGRjX3BvcnRfaW5mb1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHBkY19wb3J0X2luZm9bXSA9IHsKIAkvKiBib2FyZF8yMDYyMSAqLwogCXsKIAkJLnNodAkJPSAmcGRjX3NhdGFfc2h0LApAQCAtNzE5LDcgKzcxOSw4IEBACiAJCQlWUFJJTlRLKCJhdGEldTogcmVhZCBoZG1hLCAweCV4IDB4JXhcbiIsIGFwLT5pZCwKIAkJCQlyZWFkbChtbWlvICsgMHgxMDQpLCByZWFkbChtbWlvICsgUERDX0hETUFfQ1RMU1RBVCkpOwogCQkJLyogZ2V0IGRyaXZlIHN0YXR1czsgY2xlYXIgaW50cjsgY29tcGxldGUgdHhuICovCi0JCQlhdGFfcWNfY29tcGxldGUocWMsIGFjX2Vycl9tYXNrKGF0YV93YWl0X2lkbGUoYXApKSk7CisJCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2soYXRhX3dhaXRfaWRsZShhcCkpOworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAkJCXBkYzIwNjIxX3BvcF9oZG1hKHFjKTsKIAkJfQogCkBAIC03NTcsNyArNzU4LDggQEAKIAkJCVZQUklOVEsoImF0YSV1OiB3cml0ZSBhdGEsIDB4JXggMHgleFxuIiwgYXAtPmlkLAogCQkJCXJlYWRsKG1taW8gKyAweDEwNCksIHJlYWRsKG1taW8gKyBQRENfSERNQV9DVExTVEFUKSk7CiAJCQkvKiBnZXQgZHJpdmUgc3RhdHVzOyBjbGVhciBpbnRyOyBjb21wbGV0ZSB0eG4gKi8KLQkJCWF0YV9xY19jb21wbGV0ZShxYywgYWNfZXJyX21hc2soYXRhX3dhaXRfaWRsZShhcCkpKTsKKwkJCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhhdGFfd2FpdF9pZGxlKGFwKSk7CisJCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQkJcGRjMjA2MjFfcG9wX2hkbWEocWMpOwogCQl9CiAJCWhhbmRsZWQgPSAxOwpAQCAtNzY3LDcgKzc2OSw4IEBACiAKIAkJc3RhdHVzID0gYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMDAwKTsKIAkJRFBSSU5USygiQlVTX05PREFUQSAoZHJ2X3N0YXQgMHglWClcbiIsIHN0YXR1cyk7Ci0JCWF0YV9xY19jb21wbGV0ZShxYywgYWNfZXJyX21hc2soc3RhdHVzKSk7CisJCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhzdGF0dXMpOworCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQloYW5kbGVkID0gMTsKIAogCX0gZWxzZSB7CkBAIC04ODIsNyArODg1LDggQEAKIAljYXNlIEFUQV9QUk9UX0RNQToKIAljYXNlIEFUQV9QUk9UX05PREFUQToKIAkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogY29tbWFuZCB0aW1lb3V0XG4iLCBhcC0+aWQpOwotCQlhdGFfcWNfY29tcGxldGUocWMsIF9fYWNfZXJyX21hc2soYXRhX3dhaXRfaWRsZShhcCkpKTsKKwkJcWMtPmVycl9tYXNrIHw9IF9fYWNfZXJyX21hc2soYXRhX3dhaXRfaWRsZShhcCkpOworCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04OTEsNyArODk1LDggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogdW5rbm93biB0aW1lb3V0LCBjbWQgMHgleCBzdGF0IDB4JXhcbiIsCiAJCSAgICAgICBhcC0+aWQsIHFjLT50Zi5jb21tYW5kLCBkcnZfc3RhdCk7CiAKLQkJYXRhX3FjX2NvbXBsZXRlKHFjLCBhY19lcnJfbWFzayhkcnZfc3RhdCkpOworCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2soZHJ2X3N0YXQpOworCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwppbmRleCBlNjk0NzdkLi5mMDFlYzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCkBAIC0zNTQsOCArMzU0LDkgQEAKICAqICAgICBAbW9kZWwsIGlmIGZvdW5kLCByZXR1cm4gdGhlIG1hdGNoaW5nIGZsYWdzIHZhbHVlLCBlbHNlIHJldHVybgogICogICAgIHRoZSBob3N0IG9yIGdsb2JhbCBkZWZhdWx0IHNldHRpbmdzLgogICoqLwotaW50IHNjc2lfZ2V0X2RldmljZV9mbGFncyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGNoYXIgKnZlbmRvciwKLQkJCSAgdW5zaWduZWQgY2hhciAqbW9kZWwpCitpbnQgc2NzaV9nZXRfZGV2aWNlX2ZsYWdzKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqdmVuZG9yLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICptb2RlbCkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZfaW5mb19saXN0ICpkZXZpbmZvOwogCXVuc2lnbmVkIGludCBiZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCBjMGFlOWU5Li5hMjMzM2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTEzMjAsMjMgKzEzMjAsNiBAQAogfQogCiAvKioKLSAqIHNjc2lfZWhfbG9ja19kb25lIC0gZG9uZSBmdW5jdGlvbiBmb3IgZWggZG9vciBsb2NrIHJlcXVlc3QKLSAqIEBzY21kOglTQ1NJIGNvbW1hbmQgYmxvY2sgZm9yIHRoZSBkb29yIGxvY2sgcmVxdWVzdAotICoKLSAqIE5vdGVzOgotICogCVdlIGNvbXBsZXRlZCB0aGUgYXN5bmNocm9ub3VzIGRvb3IgbG9jayByZXF1ZXN0LCBhbmQgaXQgaGFzIGVpdGhlcgotICogCWxvY2tlZCB0aGUgZG9vciBvciBmYWlsZWQuICBXZSBtdXN0IGZyZWUgdGhlIGNvbW1hbmQgc3RydWN0dXJlcwotICogCWFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QuCi0gKiovCi1zdGF0aWMgdm9pZCBzY3NpX2VoX2xvY2tfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQotewotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKnNyZXEgPSBzY21kLT5zY19yZXF1ZXN0OwotCi0Jc2NzaV9yZWxlYXNlX3JlcXVlc3Qoc3JlcSk7Ci19Ci0KLQotLyoqCiAgKiBzY3NpX2VoX2xvY2tfZG9vciAtIFByZXZlbnQgbWVkaXVtIHJlbW92YWwgZm9yIHRoZSBzcGVjaWZpZWQgZGV2aWNlCiAgKiBAc2RldjoJU0NTSSBkZXZpY2UgdG8gcHJldmVudCBtZWRpdW0gcmVtb3ZhbAogICoKQEAgLTEzNTgsMjkgKzEzNDEsMTcgQEAKICAqKi8KIHN0YXRpYyB2b2lkIHNjc2lfZWhfbG9ja19kb29yKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpzcmVxID0gc2NzaV9hbGxvY2F0ZV9yZXF1ZXN0KHNkZXYsIEdGUF9LRVJORUwpOworCXVuc2lnbmVkIGNoYXIgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKIAotCWlmICh1bmxpa2VseSghc3JlcSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVxdWVzdCBhbGxvY2F0ZSBmYWlsZWQsIgotCQkgICAgICAgInByZXZlbnQgbWVkaWEgcmVtb3ZhbCBjbWQgbm90IHNlbnRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybjsKLQl9CisJY21uZFswXSA9IEFMTE9XX01FRElVTV9SRU1PVkFMOworCWNtbmRbMV0gPSAwOworCWNtbmRbMl0gPSAwOworCWNtbmRbM10gPSAwOworCWNtbmRbNF0gPSBTQ1NJX1JFTU9WQUxfUFJFVkVOVDsKKwljbW5kWzVdID0gMDsKIAotCXNyZXEtPnNyX2NtbmRbMF0gPSBBTExPV19NRURJVU1fUkVNT1ZBTDsKLQlzcmVxLT5zcl9jbW5kWzFdID0gMDsKLQlzcmVxLT5zcl9jbW5kWzJdID0gMDsKLQlzcmVxLT5zcl9jbW5kWzNdID0gMDsKLQlzcmVxLT5zcl9jbW5kWzRdID0gU0NTSV9SRU1PVkFMX1BSRVZFTlQ7Ci0Jc3JlcS0+c3JfY21uZFs1XSA9IDA7Ci0Jc3JlcS0+c3JfZGF0YV9kaXJlY3Rpb24gPSBETUFfTk9ORTsKLQlzcmVxLT5zcl9idWZmbGVuID0gMDsKLQlzcmVxLT5zcl9idWZmZXIgPSBOVUxMOwotCXNyZXEtPnNyX2FsbG93ZWQgPSA1OwotCXNyZXEtPnNyX2RvbmUgPSBzY3NpX2VoX2xvY2tfZG9uZTsKLQlzcmVxLT5zcl90aW1lb3V0X3Blcl9jb21tYW5kID0gMTAgKiBIWjsKLQlzcmVxLT5zcl9jbWRfbGVuID0gQ09NTUFORF9TSVpFKHNyZXEtPnNyX2NtbmRbMF0pOwotCi0Jc2NzaV9pbnNlcnRfc3BlY2lhbF9yZXEoc3JlcSwgMSk7CisJc2NzaV9leGVjdXRlX2FzeW5jKHNkZXYsIGNtbmQsIERNQV9OT05FLCBOVUxMLCAwLCAwLCAxMCAqIEhaLAorCQkJICAgNSwgTlVMTCwgTlVMTCwgR0ZQX0tFUk5FTCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCBkYzI0OWNiLi5hN2YzZjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNjMsMzkgKzYzLDYgQEAKIH07IAkKICN1bmRlZiBTUAogCi0KLS8qCi0gKiBGdW5jdGlvbjogICAgc2NzaV9pbnNlcnRfc3BlY2lhbF9yZXEoKQotICoKLSAqIFB1cnBvc2U6ICAgICBJbnNlcnQgcHJlLWZvcm1lZCByZXF1ZXN0IGludG8gcmVxdWVzdCBxdWV1ZS4KLSAqCi0gKiBBcmd1bWVudHM6ICAgc3JlcQktIHJlcXVlc3QgdGhhdCBpcyByZWFkeSB0byBiZSBxdWV1ZWQuCi0gKiAgICAgICAgICAgICAgYXRfaGVhZAktIGJvb2xlYW4uICBUcnVlIGlmIHdlIHNob3VsZCBpbnNlcnQgYXQgaGVhZAotICogICAgICAgICAgICAgICAgICAgICAgICBvZiBxdWV1ZSwgZmFsc2UgaWYgd2Ugc2hvdWxkIGluc2VydCBhdCB0YWlsLgotICoKLSAqIExvY2sgc3RhdHVzOiBBc3N1bWVkIHRoYXQgbG9jayBpcyBub3QgaGVsZCB1cG9uIGVudHJ5LgotICoKLSAqIFJldHVybnM6ICAgICBOb3RoaW5nCi0gKgotICogTm90ZXM6ICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gY2hhcmFjdGVyIGRldmljZSBhbmQgZnJvbQotICogICAgICAgICAgICAgIGlvY3RsIHR5cGVzIG9mIGZ1bmN0aW9ucyB3aGVyZSB0aGUgY2FsbGVyIGtub3dzIGV4YWN0bHkKLSAqICAgICAgICAgICAgICB3aGF0IFNDU0kgY29tbWFuZCBuZWVkcyB0byBiZSBpc3N1ZWQuICAgVGhlIGlkZWEgaXMgdGhhdAotICogICAgICAgICAgICAgIHdlIG1lcmVseSBpbmplY3QgdGhlIGNvbW1hbmQgaW50byB0aGUgcXVldWUgKGF0IHRoZSBoZWFkCi0gKiAgICAgICAgICAgICAgZm9yIG5vdyksIGFuZCB0aGVuIGNhbGwgdGhlIHF1ZXVlIHJlcXVlc3QgZnVuY3Rpb24gdG8gYWN0dWFsbHkKLSAqICAgICAgICAgICAgICBwcm9jZXNzIGl0LgotICovCi1pbnQgc2NzaV9pbnNlcnRfc3BlY2lhbF9yZXEoc3RydWN0IHNjc2lfcmVxdWVzdCAqc3JlcSwgaW50IGF0X2hlYWQpCi17Ci0JLyoKLQkgKiBCZWNhdXNlIHVzZXJzIG9mIHRoaXMgZnVuY3Rpb24gYXJlIGFwdCB0byByZXVzZSByZXF1ZXN0cyB3aXRoIG5vCi0JICogbW9kaWZpY2F0aW9uLCB3ZSBoYXZlIHRvIHNhbml0aXNlIHRoZSByZXF1ZXN0IGZsYWdzIGhlcmUKLQkgKi8KLQlzcmVxLT5zcl9yZXF1ZXN0LT5mbGFncyAmPSB+UkVRX0RPTlRQUkVQOwotCWJsa19pbnNlcnRfcmVxdWVzdChzcmVxLT5zcl9kZXZpY2UtPnJlcXVlc3RfcXVldWUsIHNyZXEtPnNyX3JlcXVlc3QsCi0JCSAgICAgICAJICAgYXRfaGVhZCwgc3JlcSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHNjc2lfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIAogLyoKQEAgLTI0OSw4ICsyMTYsMTMgQEAKIAogCS8qCiAJICogaGVhZCBpbmplY3Rpb24gKnJlcXVpcmVkKiBoZXJlIG90aGVyd2lzZSBxdWllc2NlIHdvbid0IHdvcmsKKwkgKgorCSAqIEJlY2F1c2UgdXNlcnMgb2YgdGhpcyBmdW5jdGlvbiBhcmUgYXB0IHRvIHJldXNlIHJlcXVlc3RzIHdpdGggbm8KKwkgKiBtb2RpZmljYXRpb24sIHdlIGhhdmUgdG8gc2FuaXRpc2UgdGhlIHJlcXVlc3QgZmxhZ3MgaGVyZQogCSAqLwotCXNjc2lfaW5zZXJ0X3NwZWNpYWxfcmVxKHNyZXEsIDEpOworCXNyZXEtPnNyX3JlcXVlc3QtPmZsYWdzICY9IH5SRVFfRE9OVFBSRVA7CisJYmxrX2luc2VydF9yZXF1ZXN0KHNyZXEtPnNyX2RldmljZS0+cmVxdWVzdF9xdWV1ZSwgc3JlcS0+c3JfcmVxdWVzdCwKKwkJICAgICAgIAkgICAxLCBzcmVxKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9kb19yZXEpOwogCkBAIC0yODcsNiArMjU5LDcgQEAKIAltZW1jcHkocmVxLT5jbWQsIGNtZCwgcmVxLT5jbWRfbGVuKTsKIAlyZXEtPnNlbnNlID0gc2Vuc2U7CiAJcmVxLT5zZW5zZV9sZW4gPSAwOworCXJlcS0+cmV0cmllcyA9IHJldHJpZXM7CiAJcmVxLT50aW1lb3V0ID0gdGltZW91dDsKIAlyZXEtPmZsYWdzIHw9IGZsYWdzIHwgUkVRX0JMT0NLX1BDIHwgUkVRX1NQRUNJQUwgfCBSRVFfUVVJRVQ7CiAKQEAgLTMyNyw2ICszMDAsMjAwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfZXhlY3V0ZV9yZXEpOwogCitzdHJ1Y3Qgc2NzaV9pb19jb250ZXh0IHsKKwl2b2lkICpkYXRhOworCXZvaWQgKCpkb25lKSh2b2lkICpkYXRhLCBjaGFyICpzZW5zZSwgaW50IHJlc3VsdCwgaW50IHJlc2lkKTsKKwljaGFyIHNlbnNlW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07Cit9OworCitzdGF0aWMga21lbV9jYWNoZV90ICpzY3NpX2lvX2NvbnRleHRfY2FjaGU7CisKK3N0YXRpYyB2b2lkIHNjc2lfZW5kX2FzeW5jKHN0cnVjdCByZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHNjc2lfaW9fY29udGV4dCAqc2lvYyA9IHJlcS0+ZW5kX2lvX2RhdGE7CisKKwlpZiAoc2lvYy0+ZG9uZSkKKwkJc2lvYy0+ZG9uZShzaW9jLT5kYXRhLCBzaW9jLT5zZW5zZSwgcmVxLT5lcnJvcnMsIHJlcS0+ZGF0YV9sZW4pOworCisJa21lbV9jYWNoZV9mcmVlKHNjc2lfaW9fY29udGV4dF9jYWNoZSwgc2lvYyk7CisJX19ibGtfcHV0X3JlcXVlc3QocmVxLT5xLCByZXEpOworfQorCitzdGF0aWMgaW50IHNjc2lfbWVyZ2VfYmlvKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CisKKwliaW8tPmJpX2ZsYWdzICY9IH4oMSA8PCBCSU9fU0VHX1ZBTElEKTsKKwlpZiAocnFfZGF0YV9kaXIocnEpID09IFdSSVRFKQorCQliaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SVyk7CisJYmxrX3F1ZXVlX2JvdW5jZShxLCAmYmlvKTsKKworCWlmICghcnEtPmJpbykKKwkJYmxrX3JxX2Jpb19wcmVwKHEsIHJxLCBiaW8pOworCWVsc2UgaWYgKCFxLT5iYWNrX21lcmdlX2ZuKHEsIHJxLCBiaW8pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIHsKKwkJcnEtPmJpb3RhaWwtPmJpX25leHQgPSBiaW87CisJCXJxLT5iaW90YWlsID0gYmlvOworCQlycS0+aGFyZF9ucl9zZWN0b3JzICs9IGJpb19zZWN0b3JzKGJpbyk7CisJCXJxLT5ucl9zZWN0b3JzID0gcnEtPmhhcmRfbnJfc2VjdG9yczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY3NpX2JpX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKK3sKKwlpZiAoYmlvLT5iaV9zaXplKQorCQlyZXR1cm4gMTsKKworCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzY3NpX3JlcV9tYXBfc2cgLSBtYXAgYSBzY2F0dGVybGlzdCBpbnRvIGEgcmVxdWVzdAorICogQHJxOgkJcmVxdWVzdCB0byBmaWxsCisgKiBAc2c6CQlzY2F0dGVybGlzdAorICogQG5zZWdzOgludW1iZXIgb2YgZWxlbWVudHMKKyAqIEBidWZmbGVuOglsZW4gb2YgYnVmZmVyCisgKiBAZ2ZwOgltZW1vcnkgYWxsb2NhdGlvbiBmbGFncworICoKKyAqIHNjc2lfcmVxX21hcF9zZyBtYXBzIGEgc2NhdHRlcmxpc3QgaW50byBhIHJlcXVlc3Qgc28gdGhhdCB0aGUKKyAqIHJlcXVlc3QgY2FuIGJlIHNlbnQgdG8gdGhlIGJsb2NrIGxheWVyLiBXZSBkbyBub3QgdHJ1c3QgdGhlIHNjYXR0ZXJsaXN0CisgKiBzZW50IHRvIHVzZSwgYXMgc29tZSBVTERzIHVzZSB0aGF0IHN0cnVjdCB0byBvbmx5IG9yZ2FuaXplIHRoZSBwYWdlcy4KKyAqLworc3RhdGljIGludCBzY3NpX3JlcV9tYXBfc2coc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCSAgIGludCBuc2VncywgdW5zaWduZWQgYnVmZmxlbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CisJaW50IG5yX3BhZ2VzID0gKGJ1ZmZsZW4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGludCBkYXRhX2xlbiA9IDAsIGxlbiwgYnl0ZXMsIG9mZjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOworCWludCBpLCBlcnIsIG5yX3ZlY3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5zZWdzOyBpKyspIHsKKwkJcGFnZSA9IHNnbFtpXS5wYWdlOworCQlvZmYgPSBzZ2xbaV0ub2Zmc2V0OworCQlsZW4gPSBzZ2xbaV0ubGVuZ3RoOworCQlkYXRhX2xlbiArPSBsZW47CisKKwkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCWJ5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7CisKKwkJCWlmICghYmlvKSB7CisJCQkJbnJfdmVjcyA9IG1pbl90KGludCwgQklPX01BWF9QQUdFUywgbnJfcGFnZXMpOworCQkJCW5yX3BhZ2VzIC09IG5yX3ZlY3M7CisKKwkJCQliaW8gPSBiaW9fYWxsb2MoZ2ZwLCBucl92ZWNzKTsKKwkJCQlpZiAoIWJpbykgeworCQkJCQllcnIgPSAtRU5PTUVNOworCQkJCQlnb3RvIGZyZWVfYmlvczsKKwkJCQl9CisJCQkJYmlvLT5iaV9lbmRfaW8gPSBzY3NpX2JpX2VuZGlvOworCQkJfQorCisJCQlpZiAoYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFnZSwgYnl0ZXMsIG9mZikgIT0KKwkJCSAgICBieXRlcykgeworCQkJCWJpb19wdXQoYmlvKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZnJlZV9iaW9zOworCQkJfQorCisJCQlpZiAoYmlvLT5iaV92Y250ID49IG5yX3ZlY3MpIHsKKwkJCQllcnIgPSBzY3NpX21lcmdlX2JpbyhycSwgYmlvKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCWJpb19lbmRpbyhiaW8sIGJpby0+Ymlfc2l6ZSwgMCk7CisJCQkJCWdvdG8gZnJlZV9iaW9zOworCQkJCX0KKwkJCQliaW8gPSBOVUxMOworCQkJfQorCisJCQlwYWdlKys7CisJCQlsZW4gLT0gYnl0ZXM7CisJCQlvZmYgPSAwOworCQl9CisJfQorCisJcnEtPmJ1ZmZlciA9IHJxLT5kYXRhID0gTlVMTDsKKwlycS0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKKwlyZXR1cm4gMDsKKworZnJlZV9iaW9zOgorCXdoaWxlICgoYmlvID0gcnEtPmJpbykgIT0gTlVMTCkgeworCQlycS0+YmlvID0gYmlvLT5iaV9uZXh0OworCQkvKgorCQkgKiBjYWxsIGVuZGlvIGluc3RlYWQgb2YgYmlvX3B1dCBpbmNhc2UgaXQgd2FzIGJvdW5jZWQKKwkJICovCisJCWJpb19lbmRpbyhiaW8sIGJpby0+Ymlfc2l6ZSwgMCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBzY3NpX2V4ZWN1dGVfYXN5bmMgLSBpbnNlcnQgcmVxdWVzdAorICogQHNkZXY6CXNjc2kgZGV2aWNlCisgKiBAY21kOglzY3NpIGNvbW1hbmQKKyAqIEBkYXRhX2RpcmVjdGlvbjogZGF0YSBkaXJlY3Rpb24KKyAqIEBidWZmZXI6CWRhdGEgYnVmZmVyICh0aGlzIGNhbiBiZSBhIGtlcm5lbCBidWZmZXIgb3Igc2NhdHRlcmxpc3QpCisgKiBAYnVmZmxlbjoJbGVuIG9mIGJ1ZmZlcgorICogQHVzZV9zZzoJaWYgYnVmZmVyIGlzIGEgc2NhdHRlcmxpc3QgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisgKiBAdGltZW91dDoJcmVxdWVzdCB0aW1lb3V0IGluIHNlY29uZHMKKyAqIEByZXRyaWVzOgludW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgcmVxdWVzdAorICogQGZsYWdzOglvciBpbnRvIHJlcXVlc3QgZmxhZ3MKKyAqKi8KK2ludCBzY3NpX2V4ZWN1dGVfYXN5bmMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjbWQsCisJCSAgICAgICBpbnQgZGF0YV9kaXJlY3Rpb24sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbiwKKwkJICAgICAgIGludCB1c2Vfc2csIGludCB0aW1lb3V0LCBpbnQgcmV0cmllcywgdm9pZCAqcHJpdmRhdGEsCisJCSAgICAgICB2b2lkICgqZG9uZSkodm9pZCAqLCBjaGFyICosIGludCwgaW50KSwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJc3RydWN0IHNjc2lfaW9fY29udGV4dCAqc2lvYzsKKwlpbnQgZXJyID0gMDsKKwlpbnQgd3JpdGUgPSAoZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSk7CisKKwlzaW9jID0ga21lbV9jYWNoZV9hbGxvYyhzY3NpX2lvX2NvbnRleHRfY2FjaGUsIGdmcCk7CisJaWYgKCFzaW9jKQorCQlyZXR1cm4gRFJJVkVSX0VSUk9SIDw8IDI0OworCW1lbXNldChzaW9jLCAwLCBzaXplb2YoKnNpb2MpKTsKKworCXJlcSA9IGJsa19nZXRfcmVxdWVzdChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCB3cml0ZSwgZ2ZwKTsKKwlpZiAoIXJlcSkKKwkJZ290byBmcmVlX3NlbnNlOworCXJlcS0+ZmxhZ3MgfD0gUkVRX0JMT0NLX1BDIHwgUkVRX1FVSUVUOworCisJaWYgKHVzZV9zZykKKwkJZXJyID0gc2NzaV9yZXFfbWFwX3NnKHJlcSwgYnVmZmVyLCB1c2Vfc2csIGJ1ZmZsZW4sIGdmcCk7CisJZWxzZSBpZiAoYnVmZmxlbikKKwkJZXJyID0gYmxrX3JxX21hcF9rZXJuKHJlcS0+cSwgcmVxLCBidWZmZXIsIGJ1ZmZsZW4sIGdmcCk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfcmVxOworCisJcmVxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKGNtZFswXSk7CisJbWVtY3B5KHJlcS0+Y21kLCBjbWQsIHJlcS0+Y21kX2xlbik7CisJcmVxLT5zZW5zZSA9IHNpb2MtPnNlbnNlOworCXJlcS0+c2Vuc2VfbGVuID0gMDsKKwlyZXEtPnRpbWVvdXQgPSB0aW1lb3V0OworCXJlcS0+cmV0cmllcyA9IHJldHJpZXM7CisJcmVxLT5lbmRfaW9fZGF0YSA9IHNpb2M7CisKKwlzaW9jLT5kYXRhID0gcHJpdmRhdGE7CisJc2lvYy0+ZG9uZSA9IGRvbmU7CisKKwlibGtfZXhlY3V0ZV9ycV9ub3dhaXQocmVxLT5xLCBOVUxMLCByZXEsIDEsIHNjc2lfZW5kX2FzeW5jKTsKKwlyZXR1cm4gMDsKKworZnJlZV9yZXE6CisJYmxrX3B1dF9yZXF1ZXN0KHJlcSk7CitmcmVlX3NlbnNlOgorCWtmcmVlKHNpb2MpOworCXJldHVybiBEUklWRVJfRVJST1IgPDwgMjQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2V4ZWN1dGVfYXN5bmMpOworCiAvKgogICogRnVuY3Rpb246ICAgIHNjc2lfaW5pdF9jbWRfZXJyaCgpCiAgKgpAQCAtODg0LDcgKzEwNTEsOCBAQAogCQkJKiBzeXN0ZW0gd2hlcmUgUkVBRCBDQVBBQ0lUWSBmYWlsZWQsIHdlIG1heSBoYXZlIHJlYWQKIAkJCSogcGFzdCB0aGUgZW5kIG9mIHRoZSBkaXNrLgogCQkgCSovCi0JCQlpZiAoY21kLT5kZXZpY2UtPnVzZV8xMF9mb3JfcncgJiYKKwkJCWlmICgoY21kLT5kZXZpY2UtPnVzZV8xMF9mb3JfcncgJiYKKwkJCSAgICBzc2hkci5hc2MgPT0gMHgyMCAmJiBzc2hkci5hc2NxID09IDB4MDApICYmCiAJCQkgICAgKGNtZC0+Y21uZFswXSA9PSBSRUFEXzEwIHx8CiAJCQkgICAgIGNtZC0+Y21uZFswXSA9PSBXUklURV8xMCkpIHsKIAkJCQljbWQtPmRldmljZS0+dXNlXzEwX2Zvcl9ydyA9IDA7CkBAIC0xMDgyLDEwICsxMjUwLDE2IEBACiBzdGF0aWMgdm9pZCBzY3NpX2dlbmVyaWNfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJQlVHX09OKCFibGtfcGNfcmVxdWVzdChjbWQtPnJlcXVlc3QpKTsKLQlzY3NpX2lvX2NvbXBsZXRpb24oY21kLCBjbWQtPnJlc3VsdCA9PSAwID8gY21kLT5idWZmbGVuIDogMCwgMCk7CisJLyoKKwkgKiBUaGlzIHdpbGwgY29tcGxldGUgdGhlIHdob2xlIGNvbW1hbmQgd2l0aCB1cHRvZGF0ZT0xIHNvCisJICogYXMgZmFyIGFzIHRoZSBibG9jayBsYXllciBpcyBjb25jZXJuZWQgdGhlIGNvbW1hbmQgY29tcGxldGVkCisJICogc3VjY2Vzc2Z1bGx5LiBTaW5jZSB0aGlzIGlzIGEgUkVRX0JMT0NLX1BDIGNvbW1hbmQgdGhlCisJICogY2FsbGVyIHNob3VsZCBjaGVjayB0aGUgcmVxdWVzdCdzIGVycm9ycyB2YWx1ZQorCSAqLworCXNjc2lfaW9fY29tcGxldGlvbihjbWQsIGNtZC0+YnVmZmxlbiwgMCk7CiB9CiAKLXZvaWQgc2NzaV9zZXR1cF9ibGtfcGNfY21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCByZXRyaWVzKQordm9pZCBzY3NpX3NldHVwX2Jsa19wY19jbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gY21kLT5yZXF1ZXN0OwogCkBAIC0xMTAwLDcgKzEyNzQsNyBAQAogCQljbWQtPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwogCQogCWNtZC0+dHJhbnNmZXJzaXplID0gcmVxLT5kYXRhX2xlbjsKLQljbWQtPmFsbG93ZWQgPSByZXRyaWVzOworCWNtZC0+YWxsb3dlZCA9IHJlcS0+cmV0cmllczsKIAljbWQtPnRpbWVvdXRfcGVyX2NvbW1hbmQgPSByZXEtPnRpbWVvdXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzY3NpX3NldHVwX2Jsa19wY19jbW5kKTsKQEAgLTEyNDAsNyArMTQxNCw3IEBACiAJCQkJZ290byBraWxsOwogCQkJfQogCQl9IGVsc2UgewotCQkJc2NzaV9zZXR1cF9ibGtfcGNfY21uZChjbWQsIDMpOworCQkJc2NzaV9zZXR1cF9ibGtfcGNfY21uZChjbWQpOwogCQkJY21kLT5kb25lID0gc2NzaV9nZW5lcmljX2RvbmU7CiAJCX0KIAl9CkBAIC0xNjAzLDYgKzE3NzcsMTQgQEAKIHsKIAlpbnQgaTsKIAorCXNjc2lfaW9fY29udGV4dF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJzY3NpX2lvX2NvbnRleHQiLAorCQkJCQlzaXplb2Yoc3RydWN0IHNjc2lfaW9fY29udGV4dCksCisJCQkJCTAsIDAsIE5VTEwsIE5VTEwpOworCWlmICghc2NzaV9pb19jb250ZXh0X2NhY2hlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU0NTSTogY2FuJ3QgaW5pdCBzY3NpIGlvIGNvbnRleHQgY2FjaGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgU0dfTUVNUE9PTF9OUjsgaSsrKSB7CiAJCXN0cnVjdCBzY3NpX2hvc3Rfc2dfcG9vbCAqc2dwID0gc2NzaV9zZ19wb29scyArIGk7CiAJCWludCBzaXplID0gc2dwLT5zaXplICogc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCk7CkBAIC0xNjMwLDYgKzE4MTIsOCBAQAogewogCWludCBpOwogCisJa21lbV9jYWNoZV9kZXN0cm95KHNjc2lfaW9fY29udGV4dF9jYWNoZSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgU0dfTUVNUE9PTF9OUjsgaSsrKSB7CiAJCXN0cnVjdCBzY3NpX2hvc3Rfc2dfcG9vbCAqc2dwID0gc2NzaV9zZ19wb29scyArIGk7CiAJCW1lbXBvb2xfZGVzdHJveShzZ3AtPnBvb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCmluZGV4IGQ2MzJkOWUuLmYwNGU3ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAorKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKQEAgLTQwLDcgKzQwLDYgQEAKIGV4dGVybiBpbnQgc2NzaV9kaXNwYXRjaF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIGV4dGVybiBpbnQgc2NzaV9zZXR1cF9jb21tYW5kX2ZyZWVsaXN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKIGV4dGVybiB2b2lkIHNjc2lfZGVzdHJveV9jb21tYW5kX2ZyZWVsaXN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKLWV4dGVybiBpbnQgc2NzaV9pbnNlcnRfc3BlY2lhbF9yZXEoc3RydWN0IHNjc2lfcmVxdWVzdCAqc3JlcSwgaW50KTsKIGV4dGVybiB2b2lkIHNjc2lfaW5pdF9jbWRfZnJvbV9yZXEoc3RydWN0IHNjc2lfY21uZCAqY21kLAogCQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpzcmVxKTsKIGV4dGVybiB2b2lkIF9fc2NzaV9yZWxlYXNlX3JlcXVlc3Qoc3RydWN0IHNjc2lfcmVxdWVzdCAqc3JlcSk7CkBAIC01Nyw3ICs1Niw4IEBACiAKIC8qIHNjc2lfZGV2aW5mby5jICovCiBleHRlcm4gaW50IHNjc2lfZ2V0X2RldmljZV9mbGFncyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJIHVuc2lnbmVkIGNoYXIgKnZlbmRvciwgdW5zaWduZWQgY2hhciAqbW9kZWwpOworCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZW5kb3IsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1vZGVsKTsKIGV4dGVybiBpbnQgX19pbml0IHNjc2lfaW5pdF9kZXZpbmZvKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2NzaV9leGl0X2RldmluZm8odm9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCA0ZTY3MDlmLi4wNWViYjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lIFNDU0lfU0NBTl9UQVJHRVRfUFJFU0VOVAkxCiAjZGVmaW5lIFNDU0lfU0NBTl9MVU5fUFJFU0VOVAkJMgogCi1zdGF0aWMgY2hhciAqc2NzaV9udWxsX2RldmljZV9zdHJzID0gIm51bGxudWxsbnVsbG51bGwiOworc3RhdGljIGNvbnN0IGNoYXIgKnNjc2lfbnVsbF9kZXZpY2Vfc3RycyA9ICJudWxsbnVsbG51bGxudWxsIjsKIAogI2RlZmluZSBNQVhfU0NTSV9MVU5TCTUxMgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCA0NjM0OTI5Li4xNTg0MmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJzY3NpX3ByaXYuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKIAotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAllbnVtIHNjc2lfZGV2aWNlX3N0YXRlCXZhbHVlOwogCWNoYXIJCQkqbmFtZTsKIH0gc2Rldl9zdGF0ZXNbXSA9IHsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlyZXR1cm4gbmFtZTsKIH0KIAotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAllbnVtIHNjc2lfaG9zdF9zdGF0ZQl2YWx1ZTsKIAljaGFyCQkJKm5hbWU7CiB9IHNob3N0X3N0YXRlc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCAyYTFhOTlhLi42ODViOTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAKIAogLyogQ29udmVydCBmY190Z3RpZF9iaW5kaW5nX3R5cGUgdmFsdWVzIHRvIGFzY2lpIHN0cmluZyBuYW1lICovCi1zdGF0aWMgc3RydWN0IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWVudW0gZmNfdGd0aWRfYmluZGluZ190eXBlCXZhbHVlOwogCWNoYXIJCQkJKm5hbWU7CiAJaW50CQkJCW1hdGNobGVuOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAKIAogLyogQ29udmVydCBGQ19DT1MgYml0IHZhbHVlcyB0byBhc2NpaSBzdHJpbmcgbmFtZSAqLwotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAl1MzIgCQkJdmFsdWU7CiAJY2hhcgkJCSpuYW1lOwogfSBmY19jb3NfbmFtZXNbXSA9IHsKQEAgLTE2NCw3ICsxNjQsNyBAQAogCiAKIC8qIENvbnZlcnQgRkNfUE9SVFNQRUVEIGJpdCB2YWx1ZXMgdG8gYXNjaWkgc3RyaW5nIG5hbWUgKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTMyIAkJCXZhbHVlOwogCWNoYXIJCQkqbmFtZTsKIH0gZmNfcG9ydF9zcGVlZF9uYW1lc1tdID0gewpAQCAtMTkwLDcgKzE5MCw3IEBACiAKIAogLyogQ29udmVydCBGQ19SUE9SVF9ST0xFIGJpdCB2YWx1ZXMgdG8gYXNjaWkgc3RyaW5nIG5hbWUgKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTMyIAkJCXZhbHVlOwogCWNoYXIJCQkqbmFtZTsKIH0gZmNfcmVtb3RlX3BvcnRfcm9sZV9uYW1lc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCmluZGV4IDM4YTUzYjUuLjQ2ZGE2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzc4LDkgKzM3OSw3IEBACiAKIC8qIFRyYW5zbGF0ZSB0aGUgcGVyaW9kIGludG8gbnMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHNwZWMKICAqIGZvciBTRFRSL1BQUiBtZXNzYWdlcyAqLwotc3RhdGljIHNzaXplX3QKLXNob3dfc3BpX3RyYW5zcG9ydF9wZXJpb2RfaGVscGVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZiwKLQkJCQkgaW50IHBlcmlvZCkKK3N0YXRpYyBpbnQgcGVyaW9kX3RvX3N0cihjaGFyICpidWYsIGludCBwZXJpb2QpCiB7CiAJaW50IGxlbiwgcGljb3NlYzsKIApAQCAtMzk4LDYgKzM5NywxNCBAQAogCQlsZW4gPSBzcHJpbnRfZnJhYyhidWYsIHBpY29zZWMsIDEwMDApOwogCX0KIAorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3NwaV90cmFuc3BvcnRfcGVyaW9kX2hlbHBlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYsCisJCQkJIGludCBwZXJpb2QpCit7CisJaW50IGxlbiA9IHBlcmlvZF90b19zdHIoYnVmLCBwZXJpb2QpOwogCWJ1ZltsZW4rK10gPSAnXG4nOwogCWJ1ZltsZW5dID0gJ1wwJzsKIAlyZXR1cm4gbGVuOwpAQCAtMTA0MSwxMiArMTA0OCwxMzMgQEAKIAkJCSB0cC0+aG9sZF9tY3MgPyAiIEhNQ1MiIDogIiIsCiAJCQkgdG1wLCB0cC0+b2Zmc2V0KTsKIAl9IGVsc2UgewotCQlkZXZfaW5mbygmc3RhcmdldC0+ZGV2LCAiJXNhc3luY2hyb25vdXMuXG4iLAorCQlkZXZfaW5mbygmc3RhcmdldC0+ZGV2LCAiJXNhc3luY2hyb25vdXNcbiIsCiAJCQkJdHAtPndpZHRoID8gIndpZGUgIiA6ICIiKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKHNwaV9kaXNwbGF5X3hmZXJfYWdyZWVtZW50KTsKIAorI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvbmVfYnl0ZV9tc2dzW10gPSB7CisvKiAweDAwICovICJDb21tYW5kIENvbXBsZXRlIiwgTlVMTCwgIlNhdmUgUG9pbnRlcnMiLAorLyogMHgwMyAqLyAiUmVzdG9yZSBQb2ludGVycyIsICJEaXNjb25uZWN0IiwgIkluaXRpYXRvciBFcnJvciIsIAorLyogMHgwNiAqLyAiQWJvcnQiLCAiTWVzc2FnZSBSZWplY3QiLCAiTm9wIiwgIk1lc3NhZ2UgUGFyaXR5IEVycm9yIiwKKy8qIDB4MGEgKi8gIkxpbmtlZCBDb21tYW5kIENvbXBsZXRlIiwgIkxpbmtlZCBDb21tYW5kIENvbXBsZXRlIHcvZmxhZyIsCisvKiAweDBjICovICJCdXMgZGV2aWNlIHJlc2V0IiwgIkFib3J0IFRhZyIsICJDbGVhciBRdWV1ZSIsIAorLyogMHgwZiAqLyAiSW5pdGlhdGUgUmVjb3ZlcnkiLCAiUmVsZWFzZSBSZWNvdmVyeSIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHdvX2J5dGVfbXNnc1tdID0geworLyogMHgyMCAqLyAiU2ltcGxlIFF1ZXVlIFRhZyIsICJIZWFkIG9mIFF1ZXVlIFRhZyIsICJPcmRlcmVkIFF1ZXVlIFRhZyIsCisvKiAweDIzICovICJJZ25vcmUgV2lkZSBSZXNpZHVlIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBleHRlbmRlZF9tc2dzW10gPSB7CisvKiAweDAwICovICJNb2RpZnkgRGF0YSBQb2ludGVyIiwgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCIsCisvKiAweDAyICovICJTQ1NJLUkgRXh0ZW5kZWQgSWRlbnRpZnkiLCAiV2lkZSBEYXRhIFRyYW5zZmVyIFJlcXVlc3QiLAorLyogMHgwNCAqLyAiUGFyYWxsZWwgUHJvdG9jb2wgUmVxdWVzdCIKK307CisKK3ZvaWQgcHJpbnRfbmVnbyhjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXIsIGludCBvZmYsIGludCB3aWR0aCkKK3sKKwlpZiAocGVyKSB7CisJCWNoYXIgYnVmWzIwXTsKKwkJcGVyaW9kX3RvX3N0cihidWYsIG1zZ1twZXJdKTsKKwkJcHJpbnRrKCJwZXJpb2QgPSAlcyBucyAiLCBidWYpOworCX0KKworCWlmIChvZmYpCisJCXByaW50aygib2Zmc2V0ID0gJWQgIiwgbXNnW29mZl0pOworCWlmICh3aWR0aCkKKwkJcHJpbnRrKCJ3aWR0aCA9ICVkICIsIDggPDwgbXNnW3dpZHRoXSk7Cit9CisKK2ludCBzcGlfcHJpbnRfbXNnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZykKK3sKKwlpbnQgbGVuID0gMCwgaTsKKwlpZiAobXNnWzBdID09IEVYVEVOREVEX01FU1NBR0UpIHsKKwkJbGVuID0gMyArIG1zZ1sxXTsKKwkJaWYgKG1zZ1syXSA8IEFSUkFZX1NJWkUoZXh0ZW5kZWRfbXNncykpCisJCQlwcmludGsgKCIlcyAiLCBleHRlbmRlZF9tc2dzW21zZ1syXV0pOyAKKwkJZWxzZSAKKwkJCXByaW50ayAoIkV4dGVuZGVkIE1lc3NhZ2UsIHJlc2VydmVkIGNvZGUgKDB4JTAyeCkgIiwKKwkJCQkoaW50KSBtc2dbMl0pOworCQlzd2l0Y2ggKG1zZ1syXSkgeworCQljYXNlIEVYVEVOREVEX01PRElGWV9EQVRBX1BPSU5URVI6CisJCQlwcmludGsoInBvaW50ZXIgPSAlZCIsIChpbnQpIChtc2dbM10gPDwgMjQpIHwKKwkJCQkobXNnWzRdIDw8IDE2KSB8IChtc2dbNV0gPDwgOCkgfCBtc2dbNl0pOworCQkJYnJlYWs7CisJCWNhc2UgRVhURU5ERURfU0RUUjoKKwkJCXByaW50X25lZ28obXNnLCAzLCA0LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVEVOREVEX1dEVFI6CisJCQlwcmludF9uZWdvKG1zZywgMCwgMCwgMyk7CisJCQlicmVhazsKKwkJY2FzZSBFWFRFTkRFRF9QUFI6CisJCQlwcmludF9uZWdvKG1zZywgMywgNSwgNik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJZm9yIChpID0gMjsgaSA8IGxlbjsgKytpKSAKKwkJCXByaW50aygiJTAyeCAiLCBtc2dbaV0pOworCQl9CisJLyogSWRlbnRpZnkgKi8KKwl9IGVsc2UgaWYgKG1zZ1swXSAmIDB4ODApIHsKKwkJcHJpbnRrKCJJZGVudGlmeSBkaXNjb25uZWN0ICVzYWxsb3dlZCAlcyAlZCAiLAorCQkJKG1zZ1swXSAmIDB4NDApID8gIiIgOiAibm90ICIsCisJCQkobXNnWzBdICYgMHgyMCkgPyAidGFyZ2V0IHJvdXRpbmUiIDogImx1biIsCisJCQltc2dbMF0gJiAweDcpOworCQlsZW4gPSAxOworCS8qIE5vcm1hbCBPbmUgYnl0ZSAqLworCX0gZWxzZSBpZiAobXNnWzBdIDwgMHgxZikgeworCQlpZiAobXNnWzBdIDwgQVJSQVlfU0laRShvbmVfYnl0ZV9tc2dzKSkKKwkJCXByaW50ayhvbmVfYnl0ZV9tc2dzW21zZ1swXV0pOworCQllbHNlCisJCQlwcmludGsoInJlc2VydmVkICglMDJ4KSAiLCBtc2dbMF0pOworCQlsZW4gPSAxOworCS8qIFR3byBieXRlICovCisJfSBlbHNlIGlmIChtc2dbMF0gPD0gMHgyZikgeworCQlpZiAoKG1zZ1swXSAtIDB4MjApIDwgQVJSQVlfU0laRSh0d29fYnl0ZV9tc2dzKSkKKwkJCXByaW50aygiJXMgJTAyeCAiLCB0d29fYnl0ZV9tc2dzW21zZ1swXSAtIDB4MjBdLCAKKwkJCQltc2dbMV0pOworCQllbHNlIAorCQkJcHJpbnRrKCJyZXNlcnZlZCB0d28gYnl0ZSAoJTAyeCAlMDJ4KSAiLCAKKwkJCQltc2dbMF0sIG1zZ1sxXSk7CisJCWxlbiA9IDI7CisJfSBlbHNlIAorCQlwcmludGsoInJlc2VydmVkIik7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woc3BpX3ByaW50X21zZyk7CisKKyNlbHNlICAvKiBpZm5kZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTICovCisKK2ludCBzcGlfcHJpbnRfbXNnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZykKK3sKKwlpbnQgbGVuID0gMCwgaTsKKworCWlmIChtc2dbMF0gPT0gRVhURU5ERURfTUVTU0FHRSkgeworCQlsZW4gPSAzICsgbXNnWzFdOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJCQlwcmludGsoIiUwMnggIiwgbXNnW2ldKTsKKwkvKiBJZGVudGlmeSAqLworCX0gZWxzZSBpZiAobXNnWzBdICYgMHg4MCkgeworCQlwcmludGsoIiUwMnggIiwgbXNnWzBdKTsKKwkJbGVuID0gMTsKKwkvKiBOb3JtYWwgT25lIGJ5dGUgKi8KKwl9IGVsc2UgaWYgKG1zZ1swXSA8IDB4MWYpIHsKKwkJcHJpbnRrKCIlMDJ4ICIsIG1zZ1swXSk7CisJCWxlbiA9IDE7CisJLyogVHdvIGJ5dGUgKi8KKwl9IGVsc2UgaWYgKG1zZ1swXSA8PSAweDJmKSB7CisJCXByaW50aygiJTAyeCAlMDJ4IiwgbXNnWzBdLCBtc2dbMV0pOworCQlsZW4gPSAyOworCX0gZWxzZSAKKwkJcHJpbnRrKCIlMDJ4ICIsIG1zZ1swXSk7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woc3BpX3ByaW50X21zZyk7CisjZW5kaWYgLyogISBDT05GSUdfU0NTSV9DT05TVEFOVFMgKi8KKwogI2RlZmluZSBTRVRVUF9BVFRSSUJVVEUoZmllbGQpCQkJCQkJXAogCWktPnByaXZhdGVfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfIyNmaWVsZDsJCVwKIAlpZiAoIWktPmYtPnNldF8jI2ZpZWxkKSB7CQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IDAzZmNiYWIuLjNkM2FkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgKiBTR19JTyBmcm9tIGJsb2NrIGxheWVyIGFscmVhZHkgc2V0dXAsIGp1c3QgY29weSBjZGIgYmFzaWNhbGx5CiAJICovCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewotCQlzY3NpX3NldHVwX2Jsa19wY19jbW5kKFNDcG50LCBTRF9QQVNTVEhST1VHSF9SRVRSSUVTKTsKKwkJc2NzaV9zZXR1cF9ibGtfcGNfY21uZChTQ3BudCk7CiAJCWlmIChycS0+dGltZW91dCkKIAkJCXRpbWVvdXQgPSBycS0+dGltZW91dDsKIApAQCAtMTQ5NSw5ICsxNDk1LDcgQEAKIAkgKi8KIAlpZiAoc2RrcC0+bWVkaWFfcHJlc2VudCkgewogCQlzZF9yZWFkX2NhcGFjaXR5KHNka3AsIGRpc2stPmRpc2tfbmFtZSwgYnVmZmVyKTsKLQkJaWYgKHNkcC0+cmVtb3ZhYmxlKQotCQkJc2RfcmVhZF93cml0ZV9wcm90ZWN0X2ZsYWcoc2RrcCwgZGlzay0+ZGlza19uYW1lLAotCQkJCQkJICAgYnVmZmVyKTsKKwkJc2RfcmVhZF93cml0ZV9wcm90ZWN0X2ZsYWcoc2RrcCwgZGlzay0+ZGlza19uYW1lLCBidWZmZXIpOwogCQlzZF9yZWFkX2NhY2hlX3R5cGUoc2RrcCwgZGlzay0+ZGlza19uYW1lLCBidWZmZXIpOwogCX0KIAkJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IGI1NWMyYTguLjIyMWU5NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xMDQsOCArMTA0LDYgQEAKIHN0YXRpYyBpbnQgc2dfYWRkKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqKTsKIHN0YXRpYyB2b2lkIHNnX3JlbW92ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7CiAKLXN0YXRpYyBTY3NpX1JlcXVlc3QgKmR1bW15X2NtZHA7CS8qIG9ubHkgdXNlZCBmb3Igc2l6ZW9mICovCi0KIHN0YXRpYyBERUZJTkVfUldMT0NLKHNnX2Rldl9hcnJfbG9jayk7CS8qIEFsc28gdXNlZCB0byBsb2NrCiAJCQkJCQkJICAgZmlsZSBkZXNjcmlwdG9yIGxpc3QgZm9yIGRldmljZSAqLwogCkBAIC0xMTksNyArMTE3LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBzZ2xpc3RfbGVuOyAvKiBzaXplIG9mIG1hbGxvYydkIHNjYXR0ZXItZ2F0aGVyIGxpc3QgKysgKi8KIAl1bnNpZ25lZCBidWZmbGVuOwkvKiBTaXplIG9mIChhZ2dyZWdhdGUpIGRhdGEgYnVmZmVyICovCiAJdW5zaWduZWQgYl9tYWxsb2NfbGVuOwkvKiBhY3R1YWwgbGVuIG1hbGxvYydlZCBpbiBidWZmZXIgKi8KLQl2b2lkICpidWZmZXI7CQkvKiBEYXRhIGJ1ZmZlciBvciBzY2F0dGVyIGxpc3QgKGtfdXNlX3NnPjApICovCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpidWZmZXI7Lyogc2NhdHRlciBsaXN0ICovCiAJY2hhciBkaW9faW5fdXNlOwkvKiAwLT5pbmRpcmVjdCBJTyAob3IgbW1hcCksIDEtPmRpbyAqLwogCXVuc2lnbmVkIGNoYXIgY21kX29wY29kZTsgLyogZmlyc3QgYnl0ZSBvZiBjb21tYW5kICovCiB9IFNnX3NjYXR0ZXJfaG9sZDsKQEAgLTEyOCwxMiArMTI2LDExIEBACiBzdHJ1Y3Qgc2dfZmQ7CiAKIHR5cGVkZWYgc3RydWN0IHNnX3JlcXVlc3QgewkvKiBTR19NQVhfUVVFVUUgcmVxdWVzdHMgb3V0c3RhbmRpbmcgcGVyIGZpbGUgKi8KLQlTY3NpX1JlcXVlc3QgKm15X2NtZHA7CS8qICE9IDAgIHdoZW4gcmVxdWVzdCB3aXRoIGxvd2VyIGxldmVscyAqLwogCXN0cnVjdCBzZ19yZXF1ZXN0ICpuZXh0cnA7CS8qIE5VTEwgLT4gdGFpbCByZXF1ZXN0IChzbGlzdCkgKi8KIAlzdHJ1Y3Qgc2dfZmQgKnBhcmVudGZwOwkvKiBOVUxMIC0+IG5vdCBpbiB1c2UgKi8KIAlTZ19zY2F0dGVyX2hvbGQgZGF0YTsJLyogaG9sZCBidWZmZXIsIHBlcmhhcHMgc2NhdHRlciBsaXN0ICovCiAJc2dfaW9faGRyX3QgaGVhZGVyOwkvKiBzY3NpIGNvbW1hbmQraW5mbywgc2VlIDxzY3NpL3NnLmg+ICovCi0JdW5zaWduZWQgY2hhciBzZW5zZV9iW3NpemVvZiAoZHVtbXlfY21kcC0+c3Jfc2Vuc2VfYnVmZmVyKV07CisJdW5zaWduZWQgY2hhciBzZW5zZV9iW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CiAJY2hhciByZXNfdXNlZDsJCS8qIDEgLT4gdXNpbmcgcmVzZXJ2ZSBidWZmZXIsIDAgLT4gbm90IC4uLiAqLwogCWNoYXIgb3JwaGFuOwkJLyogMSAtPiBkcm9wIG9uIHNpZ2h0LCAwIC0+IG5vcm1hbCAqLwogCWNoYXIgc2dfaW9fb3duZWQ7CS8qIDEgLT4gcGFja2V0IGJlbG9uZ3MgdG8gU0dfSU8gKi8KQEAgLTE3NCw3ICsxNzEsOCBAQAogfSBTZ19kZXZpY2U7CiAKIHN0YXRpYyBpbnQgc2dfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBtb2RlKTsKLXN0YXRpYyB2b2lkIHNnX2NtZF9kb25lKFNjc2lfQ21uZCAqIFNDcG50KTsJLyogdGFza2xldCBvciBzb2Z0IGlycSBjYWxsYmFjayAqLworLyogdGFza2xldCBvciBzb2Z0IGlycSBjYWxsYmFjayAqLworc3RhdGljIHZvaWQgc2dfY21kX2RvbmUodm9pZCAqZGF0YSwgY2hhciAqc2Vuc2UsIGludCByZXN1bHQsIGludCByZXNpZCk7CiBzdGF0aWMgaW50IHNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICogc3JwKTsKIHN0YXRpYyB2b2lkIHNnX2ZpbmlzaF9yZW1fcmVxKFNnX3JlcXVlc3QgKiBzcnApOwogc3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7CkBAIC0xOTUsOCArMTkzLDggQEAKIHN0YXRpYyB2b2lkIHNnX2J1aWxkX3Jlc2VydmUoU2dfZmQgKiBzZnAsIGludCByZXFfc2l6ZSk7CiBzdGF0aWMgdm9pZCBzZ19saW5rX3Jlc2VydmUoU2dfZmQgKiBzZnAsIFNnX3JlcXVlc3QgKiBzcnAsIGludCBzaXplKTsKIHN0YXRpYyB2b2lkIHNnX3VubGlua19yZXNlcnZlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwKTsKLXN0YXRpYyBjaGFyICpzZ19wYWdlX21hbGxvYyhpbnQgcnFTeiwgaW50IGxvd0RtYSwgaW50ICpyZXRTenApOwotc3RhdGljIHZvaWQgc2dfcGFnZV9mcmVlKGNoYXIgKmJ1ZmYsIGludCBzaXplKTsKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqc2dfcGFnZV9tYWxsb2MoaW50IHJxU3osIGludCBsb3dEbWEsIGludCAqcmV0U3pwKTsKK3N0YXRpYyB2b2lkIHNnX3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHNpemUpOwogc3RhdGljIFNnX2ZkICpzZ19hZGRfc2ZwKFNnX2RldmljZSAqIHNkcCwgaW50IGRldik7CiBzdGF0aWMgaW50IHNnX3JlbW92ZV9zZnAoU2dfZGV2aWNlICogc2RwLCBTZ19mZCAqIHNmcCk7CiBzdGF0aWMgdm9pZCBfX3NnX3JlbW92ZV9zZnAoU2dfZGV2aWNlICogc2RwLCBTZ19mZCAqIHNmcCk7CkBAIC0yMDcsNyArMjA1LDYgQEAKIHN0YXRpYyBpbnQgc2dfYWxsb3dfYWNjZXNzKHVuc2lnbmVkIGNoYXIgb3Bjb2RlLCBjaGFyIGRldl90eXBlKTsKIHN0YXRpYyBpbnQgc2dfYnVpbGRfZGlyZWN0KFNnX3JlcXVlc3QgKiBzcnAsIFNnX2ZkICogc2ZwLCBpbnQgZHhmZXJfbGVuKTsKIHN0YXRpYyBTZ19kZXZpY2UgKnNnX2dldF9kZXYoaW50IGRldik7Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNnX3NjYXRnMnZpcnQoY29uc3Qgc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2xwKTsKICNpZmRlZiBDT05GSUdfU0NTSV9QUk9DX0ZTCiBzdGF0aWMgaW50IHNnX2xhc3RfZGV2KHZvaWQpOwogI2VuZGlmCkBAIC0yMjYsNiArMjIzLDcgQEAKIHsKIAlpbnQgZGV2ID0gaW1pbm9yKGlub2RlKTsKIAlpbnQgZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOwogCVNnX2RldmljZSAqc2RwOwogCVNnX2ZkICpzZnA7CiAJaW50IHJlczsKQEAgLTI4Nyw3ICsyODUsOSBAQAogCX0KIAlpZiAoIXNkcC0+aGVhZGZwKSB7CS8qIG5vIGV4aXN0aW5nIG9wZW5zIG9uIHRoaXMgZGV2aWNlICovCiAJCXNkcC0+c2dkZWJ1ZyA9IDA7Ci0JCXNkcC0+c2dfdGFibGVzaXplID0gc2RwLT5kZXZpY2UtPmhvc3QtPnNnX3RhYmxlc2l6ZTsKKwkJcSA9IHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOworCQlzZHAtPnNnX3RhYmxlc2l6ZSA9IG1pbihxLT5tYXhfaHdfc2VnbWVudHMsCisJCQkJCXEtPm1heF9waHlzX3NlZ21lbnRzKTsKIAl9CiAJaWYgKChzZnAgPSBzZ19hZGRfc2ZwKHNkcCwgZGV2KSkpCiAJCWZpbHAtPnByaXZhdGVfZGF0YSA9IHNmcDsKQEAgLTM0MCw2ICszNDAsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19yZWFkOiAlcywgY291bnQ9JWRcbiIsCiAJCQkJICAgc2RwLT5kaXNrLT5kaXNrX25hbWUsIChpbnQpIGNvdW50KSk7CisKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoc2ZwLT5mb3JjZV9wYWNraWQgJiYgKGNvdW50ID49IFNaX1NHX0hFQURFUikpIHsKQEAgLTQ5MSw3ICs0OTIsNyBAQAogCWlmICgoaHAtPm14X3NiX2xlbiA+IDApICYmIGhwLT5zYnApIHsKIAkJaWYgKChDSEVDS19DT05ESVRJT04gJiBocC0+bWFza2VkX3N0YXR1cykgfHwKIAkJICAgIChEUklWRVJfU0VOU0UgJiBocC0+ZHJpdmVyX3N0YXR1cykpIHsKLQkJCWludCBzYl9sZW4gPSBzaXplb2YgKGR1bW15X2NtZHAtPnNyX3NlbnNlX2J1ZmZlcik7CisJCQlpbnQgc2JfbGVuID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwogCQkJc2JfbGVuID0gKGhwLT5teF9zYl9sZW4gPiBzYl9sZW4pID8gc2JfbGVuIDogaHAtPm14X3NiX2xlbjsKIAkJCWxlbiA9IDggKyAoaW50KSBzcnAtPnNlbnNlX2JbN107CS8qIEFkZGl0aW9uYWwgc2Vuc2UgbGVuZ3RoIGZpZWxkICovCiAJCQlsZW4gPSAobGVuID4gc2JfbGVuKSA/IHNiX2xlbiA6IGxlbjsKQEAgLTUyNSw3ICs1MjYsNyBAQAogCVNnX3JlcXVlc3QgKnNycDsKIAlzdHJ1Y3Qgc2dfaGVhZGVyIG9sZF9oZHI7CiAJc2dfaW9faGRyX3QgKmhwOwotCXVuc2lnbmVkIGNoYXIgY21uZFtzaXplb2YgKGR1bW15X2NtZHAtPnNyX2NtbmQpXTsKKwl1bnNpZ25lZCBjaGFyIGNtbmRbTUFYX0NPTU1BTkRfU0laRV07CiAKIAlpZiAoKCEoc2ZwID0gKFNnX2ZkICopIGZpbHAtPnByaXZhdGVfZGF0YSkpIHx8ICghKHNkcCA9IHNmcC0+cGFyZW50ZHApKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTYyNCw3ICs2MjUsNyBAQAogCWludCBrOwogCVNnX3JlcXVlc3QgKnNycDsKIAlzZ19pb19oZHJfdCAqaHA7Ci0JdW5zaWduZWQgY2hhciBjbW5kW3NpemVvZiAoZHVtbXlfY21kcC0+c3JfY21uZCldOworCXVuc2lnbmVkIGNoYXIgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKIAlpbnQgdGltZW91dDsKIAl1bnNpZ25lZCBsb25nIHVsX3RpbWVvdXQ7CiAKQEAgLTY5MiwxMSArNjkzLDkgQEAKIHNnX2NvbW1vbl93cml0ZShTZ19mZCAqIHNmcCwgU2dfcmVxdWVzdCAqIHNycCwKIAkJdW5zaWduZWQgY2hhciAqY21uZCwgaW50IHRpbWVvdXQsIGludCBibG9ja2luZykKIHsKLQlpbnQgazsKLQlTY3NpX1JlcXVlc3QgKlNScG50OworCWludCBrLCBkYXRhX2RpcjsKIAlTZ19kZXZpY2UgKnNkcCA9IHNmcC0+cGFyZW50ZHA7CiAJc2dfaW9faGRyX3QgKmhwID0gJnNycC0+aGVhZGVyOwotCXJlcXVlc3RfcXVldWVfdCAqcTsKIAogCXNycC0+ZGF0YS5jbWRfb3Bjb2RlID0gY21uZFswXTsJLyogaG9sZCBvcGNvZGUgb2YgY29tbWFuZCAqLwogCWhwLT5zdGF0dXMgPSAwOwpAQCAtNzIzLDUxICs3MjIsMzYgQEAKIAkJc2dfZmluaXNoX3JlbV9yZXEoc3JwKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCVNScG50ID0gc2NzaV9hbGxvY2F0ZV9yZXF1ZXN0KHNkcC0+ZGV2aWNlLCBHRlBfQVRPTUlDKTsKLQlpZiAoU1JwbnQgPT0gTlVMTCkgewotCQlTQ1NJX0xPR19USU1FT1VUKDEsIHByaW50aygic2dfd3JpdGU6IG5vIG1lbVxuIikpOwotCQlzZ19maW5pc2hfcmVtX3JlcShzcnApOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQlzcnAtPm15X2NtZHAgPSBTUnBudDsKLQlxID0gU1JwbnQtPnNyX2RldmljZS0+cmVxdWVzdF9xdWV1ZTsKLQlTUnBudC0+c3JfcmVxdWVzdC0+cnFfZGlzayA9IHNkcC0+ZGlzazsKLQlTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzBdID0gMDsKLQlTUnBudC0+c3JfY21kX2xlbiA9IGhwLT5jbWRfbGVuOwotCVNScG50LT5zcl91c2Vfc2cgPSBzcnAtPmRhdGEua191c2Vfc2c7Ci0JU1JwbnQtPnNyX3NnbGlzdF9sZW4gPSBzcnAtPmRhdGEuc2dsaXN0X2xlbjsKLQlTUnBudC0+c3JfYnVmZmxlbiA9IHNycC0+ZGF0YS5idWZmbGVuOwotCVNScG50LT5zcl91bmRlcmZsb3cgPSAwOwotCVNScG50LT5zcl9idWZmZXIgPSBzcnAtPmRhdGEuYnVmZmVyOwogCXN3aXRjaCAoaHAtPmR4ZmVyX2RpcmVjdGlvbikgewogCWNhc2UgU0dfRFhGRVJfVE9fRlJPTV9ERVY6CiAJY2FzZSBTR19EWEZFUl9GUk9NX0RFVjoKLQkJU1JwbnQtPnNyX2RhdGFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOworCQlkYXRhX2RpciA9IERNQV9GUk9NX0RFVklDRTsKIAkJYnJlYWs7CiAJY2FzZSBTR19EWEZFUl9UT19ERVY6Ci0JCVNScG50LT5zcl9kYXRhX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CisJCWRhdGFfZGlyID0gRE1BX1RPX0RFVklDRTsKIAkJYnJlYWs7CiAJY2FzZSBTR19EWEZFUl9VTktOT1dOOgotCQlTUnBudC0+c3JfZGF0YV9kaXJlY3Rpb24gPSBETUFfQklESVJFQ1RJT05BTDsKKwkJZGF0YV9kaXIgPSBETUFfQklESVJFQ1RJT05BTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJU1JwbnQtPnNyX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CisJCWRhdGFfZGlyID0gRE1BX05PTkU7CiAJCWJyZWFrOwogCX0KLQlTUnBudC0+dXBwZXJfcHJpdmF0ZV9kYXRhID0gc3JwOwotCXNycC0+ZGF0YS5rX3VzZV9zZyA9IDA7Ci0Jc3JwLT5kYXRhLnNnbGlzdF9sZW4gPSAwOwotCXNycC0+ZGF0YS5idWZmbGVuID0gMDsKLQlzcnAtPmRhdGEuYnVmZmVyID0gTlVMTDsKIAlocC0+ZHVyYXRpb24gPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwogLyogTm93IHNlbmQgZXZlcnl0aGluZyBvZiB0byBtaWQtbGV2ZWwuIFRoZSBuZXh0IHRpbWUgd2UgaGVhciBhYm91dCB0aGlzCiAgICBwYWNrZXQgaXMgd2hlbiBzZ19jbWRfZG9uZSgpIGlzIGNhbGxlZCAoaS5lLiBhIGNhbGxiYWNrKS4gKi8KLQlzY3NpX2RvX3JlcShTUnBudCwgKHZvaWQgKikgY21uZCwKLQkJICAgICh2b2lkICopIFNScG50LT5zcl9idWZmZXIsIGhwLT5keGZlcl9sZW4sCi0JCSAgICBzZ19jbWRfZG9uZSwgdGltZW91dCwgU0dfREVGQVVMVF9SRVRSSUVTKTsKLQkvKiBkeGZlcl9sZW4gb3ZlcndyaXRlcyBTUnBudC0+c3JfYnVmZmxlbiwgaGVuY2UgbmVlZCBmb3IgYl9tYWxsb2NfbGVuICovCi0JcmV0dXJuIDA7CisJaWYgKHNjc2lfZXhlY3V0ZV9hc3luYyhzZHAtPmRldmljZSwgY21uZCwgZGF0YV9kaXIsIHNycC0+ZGF0YS5idWZmZXIsCisJCQkJaHAtPmR4ZmVyX2xlbiwgc3JwLT5kYXRhLmtfdXNlX3NnLCB0aW1lb3V0LAorCQkJCVNHX0RFRkFVTFRfUkVUUklFUywgc3JwLCBzZ19jbWRfZG9uZSwKKwkJCQlHRlBfQVRPTUlDKSkgeworCQlTQ1NJX0xPR19USU1FT1VUKDEsIHByaW50aygic2dfd3JpdGU6IHNjc2lfZXhlY3V0ZV9hc3luYyBmYWlsZWRcbiIpKTsKKwkJLyoKKwkJICogbW9zdCBsaWtlbHkgb3V0IG9mIG1lbSwgYnV0IGNvdWxkIGFsc28gYmUgYSBiYWQgbWFwCisJCSAqLworCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTExNTYsNDUgKzExNDAsMjIgQEAKIAlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogMDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKLXNnX3NjYXRnMnZpcnQoY29uc3Qgc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2xwKQotewotCXJldHVybiAoc2NscCAmJiBzY2xwLT5wYWdlKSA/Ci0JICAgICh1bnNpZ25lZCBjaGFyICopIHBhZ2VfYWRkcmVzcyhzY2xwLT5wYWdlKSArIHNjbHAtPm9mZnNldCA6IE5VTEw7Ci19Ci0KIC8qIFdoZW4gc3RhcnRGaW5pc2g9PTEgaW5jcmVtZW50cyBwYWdlIGNvdW50cyBmb3IgcGFnZXMgb3RoZXIgdGhhbiB0aGUgCi0gICBmaXJzdCBvZiBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyBvYnRhaW5lZCBmcm9tIF9fZ2V0X2ZyZWVfcGFnZXMoKS4KKyAgIGZpcnN0IG9mIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzIG9idGFpbmVkIGZyb20gYWxsb2NfcGFnZXMoKS4KICAgIFdoZW4gc3RhcnRGaW5pc2g9PTAgZGVjcmVtZW50cyAuLi4gKi8KIHN0YXRpYyB2b2lkCiBzZ19yYl9jb3JyZWN0NG1tYXAoU2dfc2NhdHRlcl9ob2xkICogcnN2X3NjaHAsIGludCBzdGFydEZpbmlzaCkKIHsKLQl2b2lkICpwYWdlX3B0cjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gcnN2X3NjaHAtPmJ1ZmZlcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgaywgbTsKIAogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19yYl9jb3JyZWN0NG1tYXA6IHN0YXJ0RmluaXNoPSVkLCBzY2F0Zz0lZFxuIiwgCiAJCQkJICAgc3RhcnRGaW5pc2gsIHJzdl9zY2hwLT5rX3VzZV9zZykpOwogCS8qIE4uQi4gY29ycmVjdGlvbiBfbm90XyBhcHBsaWVkIHRvIGJhc2UgcGFnZSBvZiBlYWNoIGFsbG9jYXRpb24gKi8KLQlpZiAocnN2X3NjaHAtPmtfdXNlX3NnKSB7CS8qIHJlc2VydmUgYnVmZmVyIGlzIGEgc2NhdHRlciBnYXRoZXIgbGlzdCAqLwotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjbHAgPSByc3Zfc2NocC0+YnVmZmVyOwotCi0JCWZvciAoayA9IDA7IGsgPCByc3Zfc2NocC0+a191c2Vfc2c7ICsraywgKytzY2xwKSB7Ci0JCQlmb3IgKG0gPSBQQUdFX1NJWkU7IG0gPCBzY2xwLT5sZW5ndGg7IG0gKz0gUEFHRV9TSVpFKSB7Ci0JCQkJcGFnZV9wdHIgPSBzZ19zY2F0ZzJ2aXJ0KHNjbHApICsgbTsKLQkJCQlwYWdlID0gdmlydF90b19wYWdlKHBhZ2VfcHRyKTsKLQkJCQlpZiAoc3RhcnRGaW5pc2gpCi0JCQkJCWdldF9wYWdlKHBhZ2UpOwotCQkJCWVsc2UgewotCQkJCQlpZiAocGFnZV9jb3VudChwYWdlKSA+IDApCi0JCQkJCQlfX3B1dF9wYWdlKHBhZ2UpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7CQkvKiByZXNlcnZlIGJ1ZmZlciBpcyBqdXN0IGEgc2luZ2xlIGFsbG9jYXRpb24gKi8KLQkJZm9yIChtID0gUEFHRV9TSVpFOyBtIDwgcnN2X3NjaHAtPmJ1ZmZsZW47IG0gKz0gUEFHRV9TSVpFKSB7Ci0JCQlwYWdlX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopIHJzdl9zY2hwLT5idWZmZXIgKyBtOwotCQkJcGFnZSA9IHZpcnRfdG9fcGFnZShwYWdlX3B0cik7CisJZm9yIChrID0gMDsgayA8IHJzdl9zY2hwLT5rX3VzZV9zZzsgKytrLCArK3NnKSB7CisJCWZvciAobSA9IFBBR0VfU0laRTsgbSA8IHNnLT5sZW5ndGg7IG0gKz0gUEFHRV9TSVpFKSB7CisJCQlwYWdlID0gc2ctPnBhZ2U7CiAJCQlpZiAoc3RhcnRGaW5pc2gpCiAJCQkJZ2V0X3BhZ2UocGFnZSk7CiAJCQllbHNlIHsKQEAgLTEyMTAsOSArMTE3MSwxMCBAQAogewogCVNnX2ZkICpzZnA7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOT1BBR0VfU0lHQlVTOwotCXZvaWQgKnBhZ2VfcHRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGVuLCBzYTsKIAlTZ19zY2F0dGVyX2hvbGQgKnJzdl9zY2hwOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGs7CiAKIAlpZiAoKE5VTEwgPT0gdm1hKSB8fCAoIShzZnAgPSAoU2dfZmQgKikgdm1hLT52bV9wcml2YXRlX2RhdGEpKSkKIAkJcmV0dXJuIHBhZ2U7CkBAIC0xMjIyLDMwICsxMTg0LDIxIEBACiAJCXJldHVybiBwYWdlOwogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ192bWFfbm9wYWdlOiBvZmZzZXQ9JWx1LCBzY2F0Zz0lZFxuIiwKIAkJCQkgICBvZmZzZXQsIHJzdl9zY2hwLT5rX3VzZV9zZykpOwotCWlmIChyc3Zfc2NocC0+a191c2Vfc2cpIHsJLyogcmVzZXJ2ZSBidWZmZXIgaXMgYSBzY2F0dGVyIGdhdGhlciBsaXN0ICovCi0JCWludCBrOwotCQl1bnNpZ25lZCBsb25nIHNhID0gdm1hLT52bV9zdGFydDsKLQkJdW5zaWduZWQgbG9uZyBsZW47Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NscCA9IHJzdl9zY2hwLT5idWZmZXI7Ci0KLQkJZm9yIChrID0gMDsgKGsgPCByc3Zfc2NocC0+a191c2Vfc2cpICYmIChzYSA8IHZtYS0+dm1fZW5kKTsKLQkJICAgICArK2ssICsrc2NscCkgewotCQkJbGVuID0gdm1hLT52bV9lbmQgLSBzYTsKLQkJCWxlbiA9IChsZW4gPCBzY2xwLT5sZW5ndGgpID8gbGVuIDogc2NscC0+bGVuZ3RoOwotCQkJaWYgKG9mZnNldCA8IGxlbikgewotCQkJCXBhZ2VfcHRyID0gc2dfc2NhdGcydmlydChzY2xwKSArIG9mZnNldDsKLQkJCQlwYWdlID0gdmlydF90b19wYWdlKHBhZ2VfcHRyKTsKLQkJCQlnZXRfcGFnZShwYWdlKTsJLyogaW5jcmVtZW50IHBhZ2UgY291bnQgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJCXNhICs9IGxlbjsKLQkJCW9mZnNldCAtPSBsZW47CisJc2cgPSByc3Zfc2NocC0+YnVmZmVyOworCXNhID0gdm1hLT52bV9zdGFydDsKKwlmb3IgKGsgPSAwOyAoayA8IHJzdl9zY2hwLT5rX3VzZV9zZykgJiYgKHNhIDwgdm1hLT52bV9lbmQpOworCSAgICAgKytrLCArK3NnKSB7CisJCWxlbiA9IHZtYS0+dm1fZW5kIC0gc2E7CisJCWxlbiA9IChsZW4gPCBzZy0+bGVuZ3RoKSA/IGxlbiA6IHNnLT5sZW5ndGg7CisJCWlmIChvZmZzZXQgPCBsZW4pIHsKKwkJCXBhZ2UgPSBzZy0+cGFnZTsKKwkJCWdldF9wYWdlKHBhZ2UpOwkvKiBpbmNyZW1lbnQgcGFnZSBjb3VudCAqLworCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgewkJLyogcmVzZXJ2ZSBidWZmZXIgaXMganVzdCBhIHNpbmdsZSBhbGxvY2F0aW9uICovCi0JCXBhZ2VfcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgcnN2X3NjaHAtPmJ1ZmZlciArIG9mZnNldDsKLQkJcGFnZSA9IHZpcnRfdG9fcGFnZShwYWdlX3B0cik7Ci0JCWdldF9wYWdlKHBhZ2UpOwkvKiBpbmNyZW1lbnQgcGFnZSBjb3VudCAqLworCQlzYSArPSBsZW47CisJCW9mZnNldCAtPSBsZW47CiAJfQorCiAJaWYgKHR5cGUpCiAJCSp0eXBlID0gVk1fRkFVTFRfTUlOT1I7CiAJcmV0dXJuIHBhZ2U7CkBAIC0xMjU5LDggKzEyMTIsMTAgQEAKIHNnX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCVNnX2ZkICpzZnA7Ci0JdW5zaWduZWQgbG9uZyByZXFfc3o7CisJdW5zaWduZWQgbG9uZyByZXFfc3osIGxlbiwgc2E7CiAJU2dfc2NhdHRlcl9ob2xkICpyc3Zfc2NocDsKKwlpbnQgazsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCiAJaWYgKCghZmlscCkgfHwgKCF2bWEpIHx8ICghKHNmcCA9IChTZ19mZCAqKSBmaWxwLT5wcml2YXRlX2RhdGEpKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTEyNzMsMjQgKzEyMjgsMTUgQEAKIAlpZiAocmVxX3N6ID4gcnN2X3NjaHAtPmJ1ZmZsZW4pCiAJCXJldHVybiAtRU5PTUVNOwkvKiBjYW5ub3QgbWFwIG1vcmUgdGhhbiByZXNlcnZlZCBidWZmZXIgKi8KIAotCWlmIChyc3Zfc2NocC0+a191c2Vfc2cpIHsgLyogcmVzZXJ2ZSBidWZmZXIgaXMgYSBzY2F0dGVyIGdhdGhlciBsaXN0ICovCi0JCWludCBrOwotCQl1bnNpZ25lZCBsb25nIHNhID0gdm1hLT52bV9zdGFydDsKLQkJdW5zaWduZWQgbG9uZyBsZW47Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NscCA9IHJzdl9zY2hwLT5idWZmZXI7Ci0KLQkJZm9yIChrID0gMDsgKGsgPCByc3Zfc2NocC0+a191c2Vfc2cpICYmIChzYSA8IHZtYS0+dm1fZW5kKTsKLQkJICAgICArK2ssICsrc2NscCkgewotCQkJaWYgKDAgIT0gc2NscC0+b2Zmc2V0KQotCQkJCXJldHVybiAtRUZBVUxUOwkvKiBub24gcGFnZSBhbGlnbmVkIG1lbW9yeSA/PyAqLwotCQkJbGVuID0gdm1hLT52bV9lbmQgLSBzYTsKLQkJCWxlbiA9IChsZW4gPCBzY2xwLT5sZW5ndGgpID8gbGVuIDogc2NscC0+bGVuZ3RoOwotCQkJc2EgKz0gbGVuOwotCQl9Ci0JfSBlbHNlIHsJLyogcmVzZXJ2ZSBidWZmZXIgaXMganVzdCBhIHNpbmdsZSBhbGxvY2F0aW9uICovCi0JCWlmICgodW5zaWduZWQgbG9uZykgcnN2X3NjaHAtPmJ1ZmZlciAmIChQQUdFX1NJWkUgLSAxKSkKLQkJCXJldHVybiAtRUZBVUxUOwkvKiBub24gcGFnZSBhbGlnbmVkIG1lbW9yeSA/PyAqLworCXNhID0gdm1hLT52bV9zdGFydDsKKwlzZyA9IHJzdl9zY2hwLT5idWZmZXI7CisJZm9yIChrID0gMDsgKGsgPCByc3Zfc2NocC0+a191c2Vfc2cpICYmIChzYSA8IHZtYS0+dm1fZW5kKTsKKwkgICAgICsraywgKytzZykgeworCQlsZW4gPSB2bWEtPnZtX2VuZCAtIHNhOworCQlsZW4gPSAobGVuIDwgc2ctPmxlbmd0aCkgPyBsZW4gOiBzZy0+bGVuZ3RoOworCQlzYSArPSBsZW47CiAJfQorCiAJaWYgKDAgPT0gc2ZwLT5tbWFwX2NhbGxlZCkgewogCQlzZ19yYl9jb3JyZWN0NG1tYXAocnN2X3NjaHAsIDEpOwkvKiBkbyBvbmx5IG9uY2UgcGVyIGZkIGxpZmV0aW1lICovCiAJCXNmcC0+bW1hcF9jYWxsZWQgPSAxOwpAQCAtMTMwNCwyMSArMTI1MCwxNiBAQAogLyogVGhpcyBmdW5jdGlvbiBpcyBhICJib3R0b20gaGFsZiIgaGFuZGxlciB0aGF0IGlzIGNhbGxlZCBieSB0aGUKICAqIG1pZCBsZXZlbCB3aGVuIGEgY29tbWFuZCBpcyBjb21wbGV0ZWQgKG9yIGhhcyBmYWlsZWQpLiAqLwogc3RhdGljIHZvaWQKLXNnX2NtZF9kb25lKFNjc2lfQ21uZCAqIFNDcG50KQorc2dfY21kX2RvbmUodm9pZCAqZGF0YSwgY2hhciAqc2Vuc2UsIGludCByZXN1bHQsIGludCByZXNpZCkKIHsKLQlTY3NpX1JlcXVlc3QgKlNScG50ID0gTlVMTDsKKwlTZ19yZXF1ZXN0ICpzcnAgPSBkYXRhOwogCVNnX2RldmljZSAqc2RwID0gTlVMTDsKIAlTZ19mZCAqc2ZwOwotCVNnX3JlcXVlc3QgKnNycCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdW5zaWduZWQgaW50IG1zOwogCi0JaWYgKFNDcG50ICYmIChTUnBudCA9IFNDcG50LT5zY19yZXF1ZXN0KSkKLQkJc3JwID0gKFNnX3JlcXVlc3QgKikgU1JwbnQtPnVwcGVyX3ByaXZhdGVfZGF0YTsKIAlpZiAoTlVMTCA9PSBzcnApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzZ19jbWRfZG9uZTogTlVMTCByZXF1ZXN0XG4iKTsKLQkJaWYgKFNScG50KQotCQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCQlyZXR1cm47CiAJfQogCXNmcCA9IHNycC0+cGFyZW50ZnA7CkBAIC0xMzI2LDQ5ICsxMjY3LDM0IEBACiAJCXNkcCA9IHNmcC0+cGFyZW50ZHA7CiAJaWYgKChOVUxMID09IHNkcCkgfHwgc2RwLT5kZXRhY2hlZCkgewogCQlwcmludGsoS0VSTl9JTkZPICJzZ19jbWRfZG9uZTogZGV2aWNlIGRldGFjaGVkXG4iKTsKLQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCQlyZXR1cm47CiAJfQogCi0JLyogRmlyc3QgdHJhbnNmZXIgb3duZXJzaGlwIG9mIGRhdGEgYnVmZmVycyB0byBzZ19kZXZpY2Ugb2JqZWN0LiAqLwotCXNycC0+ZGF0YS5rX3VzZV9zZyA9IFNScG50LT5zcl91c2Vfc2c7Ci0Jc3JwLT5kYXRhLnNnbGlzdF9sZW4gPSBTUnBudC0+c3Jfc2dsaXN0X2xlbjsKLQlzcnAtPmRhdGEuYnVmZmxlbiA9IFNScG50LT5zcl9idWZmbGVuOwotCXNycC0+ZGF0YS5idWZmZXIgPSBTUnBudC0+c3JfYnVmZmVyOwotCS8qIG5vdyBjbGVhciBvdXQgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KLQlTUnBudC0+c3JfdXNlX3NnID0gMDsKLQlTUnBudC0+c3Jfc2dsaXN0X2xlbiA9IDA7Ci0JU1JwbnQtPnNyX2J1ZmZsZW4gPSAwOwotCVNScG50LT5zcl9idWZmZXIgPSBOVUxMOwotCVNScG50LT5zcl91bmRlcmZsb3cgPSAwOwotCVNScG50LT5zcl9yZXF1ZXN0LT5ycV9kaXNrID0gTlVMTDsgLyogInNnIiBfZGlzb3duc18gcmVxdWVzdCBibGsgKi8KLQotCXNycC0+bXlfY21kcCA9IE5VTEw7CiAKIAlTQ1NJX0xPR19USU1FT1VUKDQsIHByaW50aygic2dfY21kX2RvbmU6ICVzLCBwYWNrX2lkPSVkLCByZXM9MHgleFxuIiwKLQkJc2RwLT5kaXNrLT5kaXNrX25hbWUsIHNycC0+aGVhZGVyLnBhY2tfaWQsIChpbnQpIFNScG50LT5zcl9yZXN1bHQpKTsKLQlzcnAtPmhlYWRlci5yZXNpZCA9IFNDcG50LT5yZXNpZDsKKwkJc2RwLT5kaXNrLT5kaXNrX25hbWUsIHNycC0+aGVhZGVyLnBhY2tfaWQsIHJlc3VsdCkpOworCXNycC0+aGVhZGVyLnJlc2lkID0gcmVzaWQ7CiAJbXMgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwogCXNycC0+aGVhZGVyLmR1cmF0aW9uID0gKG1zID4gc3JwLT5oZWFkZXIuZHVyYXRpb24pID8KIAkJCQkobXMgLSBzcnAtPmhlYWRlci5kdXJhdGlvbikgOiAwOwotCWlmICgwICE9IFNScG50LT5zcl9yZXN1bHQpIHsKKwlpZiAoMCAhPSByZXN1bHQpIHsKIAkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOwogCi0JCW1lbWNweShzcnAtPnNlbnNlX2IsIFNScG50LT5zcl9zZW5zZV9idWZmZXIsCi0JCSAgICAgICBzaXplb2YgKHNycC0+c2Vuc2VfYikpOwotCQlzcnAtPmhlYWRlci5zdGF0dXMgPSAweGZmICYgU1JwbnQtPnNyX3Jlc3VsdDsKLQkJc3JwLT5oZWFkZXIubWFza2VkX3N0YXR1cyA9IHN0YXR1c19ieXRlKFNScG50LT5zcl9yZXN1bHQpOwotCQlzcnAtPmhlYWRlci5tc2dfc3RhdHVzID0gbXNnX2J5dGUoU1JwbnQtPnNyX3Jlc3VsdCk7Ci0JCXNycC0+aGVhZGVyLmhvc3Rfc3RhdHVzID0gaG9zdF9ieXRlKFNScG50LT5zcl9yZXN1bHQpOwotCQlzcnAtPmhlYWRlci5kcml2ZXJfc3RhdHVzID0gZHJpdmVyX2J5dGUoU1JwbnQtPnNyX3Jlc3VsdCk7CisJCW1lbWNweShzcnAtPnNlbnNlX2IsIHNlbnNlLCBzaXplb2YgKHNycC0+c2Vuc2VfYikpOworCQlzcnAtPmhlYWRlci5zdGF0dXMgPSAweGZmICYgcmVzdWx0OworCQlzcnAtPmhlYWRlci5tYXNrZWRfc3RhdHVzID0gc3RhdHVzX2J5dGUocmVzdWx0KTsKKwkJc3JwLT5oZWFkZXIubXNnX3N0YXR1cyA9IG1zZ19ieXRlKHJlc3VsdCk7CisJCXNycC0+aGVhZGVyLmhvc3Rfc3RhdHVzID0gaG9zdF9ieXRlKHJlc3VsdCk7CisJCXNycC0+aGVhZGVyLmRyaXZlcl9zdGF0dXMgPSBkcml2ZXJfYnl0ZShyZXN1bHQpOwogCQlpZiAoKHNkcC0+c2dkZWJ1ZyA+IDApICYmCiAJCSAgICAoKENIRUNLX0NPTkRJVElPTiA9PSBzcnAtPmhlYWRlci5tYXNrZWRfc3RhdHVzKSB8fAogCQkgICAgIChDT01NQU5EX1RFUk1JTkFURUQgPT0gc3JwLT5oZWFkZXIubWFza2VkX3N0YXR1cykpKQotCQkJc2NzaV9wcmludF9yZXFfc2Vuc2UoInNnX2NtZF9kb25lIiwgU1JwbnQpOworCQkJX19zY3NpX3ByaW50X3NlbnNlKCJzZ19jbWRfZG9uZSIsIHNlbnNlLAorCQkJCQkgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCiAJCS8qIEZvbGxvd2luZyBpZiBzdGF0ZW1lbnQgaXMgYSBwYXRjaCBzdXBwbGllZCBieSBFcmljIFlvdW5nZGFsZSAqLwotCQlpZiAoZHJpdmVyX2J5dGUoU1JwbnQtPnNyX3Jlc3VsdCkgIT0gMAotCQkgICAgJiYgc2NzaV9jb21tYW5kX25vcm1hbGl6ZV9zZW5zZShTQ3BudCwgJnNzaGRyKQorCQlpZiAoZHJpdmVyX2J5dGUocmVzdWx0KSAhPSAwCisJCSAgICAmJiBzY3NpX25vcm1hbGl6ZV9zZW5zZShzZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCAmc3NoZHIpCiAJCSAgICAmJiAhc2NzaV9zZW5zZV9pc19kZWZlcnJlZCgmc3NoZHIpCiAJCSAgICAmJiBzc2hkci5zZW5zZV9rZXkgPT0gVU5JVF9BVFRFTlRJT04KIAkJICAgICYmIHNkcC0+ZGV2aWNlLT5yZW1vdmFibGUpIHsKQEAgLTEzNzksOCArMTMwNSw2IEBACiAJfQogCS8qIFJlbHkgb24gd3JpdGUgcGhhc2UgdG8gY2xlYW4gb3V0IHNycCBzdGF0dXMgdmFsdWVzLCBzbyBubyAiZWxzZSIgKi8KIAotCXNjc2lfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKLQlTUnBudCA9IE5VTEw7CiAJaWYgKHNmcC0+Y2xvc2VkKSB7CS8qIHdob29wcyB0aGlzIGZkIGFscmVhZHkgcmVsZWFzZWQsIGNsZWFudXAgKi8KIAkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsoInNnX2NtZF9kb25lOiBhbHJlYWR5IGNsb3NlZCwgZnJlZWluZyAuLi5cbiIpKTsKIAkJc2dfZmluaXNoX3JlbV9yZXEoc3JwKTsKQEAgLTE0MzEsNiArMTM1NSw3IEBACiAKIHN0YXRpYyBpbnQgc2dfYWxsb2Moc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRwKQogeworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gc2NzaWRwLT5yZXF1ZXN0X3F1ZXVlOwogCVNnX2RldmljZSAqc2RwOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXZvaWQgKm9sZF9zZ19kZXZfYXJyID0gTlVMTDsKQEAgLTE0NzMsNyArMTM5OCw3IEBACiAJc2RwLT5kaXNrID0gZGlzazsKIAlzZHAtPmRldmljZSA9IHNjc2lkcDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPm9fZXhjbF93YWl0KTsKLQlzZHAtPnNnX3RhYmxlc2l6ZSA9IHNjc2lkcC0+aG9zdCA/IHNjc2lkcC0+aG9zdC0+c2dfdGFibGVzaXplIDogMDsKKwlzZHAtPnNnX3RhYmxlc2l6ZSA9IG1pbihxLT5tYXhfaHdfc2VnbWVudHMsIHEtPm1heF9waHlzX3NlZ21lbnRzKTsKIAogCXNnX25yX2RldisrOwogCXNnX2Rldl9hcnJba10gPSBzZHA7CkBAIC0xNzUzLDM2ICsxNjc4LDM1IEBACiBzdGF0aWMgaW50CiBzZ19idWlsZF9zZ2F0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIGNvbnN0IFNnX2ZkICogc2ZwLCBpbnQgdGFibGVzaXplKQogewotCWludCByZXRfc3o7Ci0JaW50IGVsZW1fc3ogPSBzaXplb2YgKHN0cnVjdCBzY2F0dGVybGlzdCk7Ci0JaW50IHNnX2J1ZmZsZW4gPSB0YWJsZXNpemUgKiBlbGVtX3N6OwotCWludCBteF9zY19lbGVtcyA9IHRhYmxlc2l6ZTsKKwlpbnQgc2dfYnVmZmxlbiA9IHRhYmxlc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpOworCXVuc2lnbmVkIGludCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOOwogCi0Jc2NocC0+YnVmZmVyID0gc2dfcGFnZV9tYWxsb2Moc2dfYnVmZmxlbiwgc2ZwLT5sb3dfZG1hLCAmcmV0X3N6KTsKKwkvKgorCSAqIFRPRE86IHRlc3Qgd2l0aG91dCBsb3dfZG1hLCB3ZSBzaG91bGQgbm90IG5lZWQgaXQgc2luY2UKKwkgKiB0aGUgYmxvY2sgbGF5ZXIgd2lsbCBib3VuY2UgdGhlIGJ1ZmZlciBmb3IgdXMKKwkgKgorCSAqIFhYWChoY2gpOiB3ZSBzaG91bGRuJ3QgbmVlZCBHRlBfRE1BIGZvciB0aGUgYWN0dWFsIFMvRyBsaXN0LgorCSAqLworCWlmIChzZnAtPmxvd19kbWEpCisJCSBnZnBfZmxhZ3MgfD0gR0ZQX0RNQTsKKwlzY2hwLT5idWZmZXIgPSBremFsbG9jKHNnX2J1ZmZsZW4sIGdmcF9mbGFncyk7CiAJaWYgKCFzY2hwLT5idWZmZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCWVsc2UgaWYgKHJldF9zeiAhPSBzZ19idWZmbGVuKSB7Ci0JCXNnX2J1ZmZsZW4gPSByZXRfc3o7Ci0JCW14X3NjX2VsZW1zID0gc2dfYnVmZmxlbiAvIGVsZW1fc3o7Ci0JfQogCXNjaHAtPnNnbGlzdF9sZW4gPSBzZ19idWZmbGVuOwotCW1lbXNldChzY2hwLT5idWZmZXIsIDAsIHNnX2J1ZmZsZW4pOwotCXJldHVybiBteF9zY19lbGVtczsJLyogbnVtYmVyIG9mIHNjYXRfZ2F0aCBlbGVtZW50cyBhbGxvY2F0ZWQgKi8KKwlyZXR1cm4gdGFibGVzaXplOwkvKiBudW1iZXIgb2Ygc2NhdF9nYXRoIGVsZW1lbnRzIGFsbG9jYXRlZCAqLwogfQogCiAjaWZkZWYgU0dfQUxMT1dfRElPX0NPREUKIC8qIHZ2dnZ2dnZ2ICBmb2xsb3dpbmcgY29kZSBib3Jyb3dlZCBmcm9tIHN0IGRyaXZlcidzIGRpcmVjdCBJTyB2dnZ2dnZ2dnYgKi8KLQkvKiBob3BlZnVsbHkgdGhpcyBnZW5lcmljIGNvZGUgd2lsbCBtb3ZlZCB0byBhIGxpYnJhcnkgKi8KKwkvKiBUT0RPOiBob3BlZnVsbHkgd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyBibG9jayBsYXllciBjb2RlICovCiAKIC8qIFBpbiBkb3duIHVzZXIgcGFnZXMgYW5kIHB1dCB0aGVtIGludG8gYSBzY2F0dGVyIGdhdGhlciBsaXN0LiBSZXR1cm5zIDw9IDAgaWYKICAgIC0gbWFwcGluZyBvZiBhbGwgcGFnZXMgbm90IHN1Y2Nlc3NmdWwKLSAgIC0gYW55IHBhZ2UgaXMgYWJvdmUgbWF4X3BmbgogICAgKGkuZS4sIGVpdGhlciBjb21wbGV0ZWx5IHN1Y2Nlc3NmdWwgb3IgZmFpbHMpCiAqLwogc3RhdGljIGludCAKIHN0X21hcF91c2VyX3BhZ2VzKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2VzLCAKLQkgICAgICAgICAgdW5zaWduZWQgbG9uZyB1YWRkciwgc2l6ZV90IGNvdW50LCBpbnQgcncsCi0JICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKKwkgICAgICAgICAgdW5zaWduZWQgbG9uZyB1YWRkciwgc2l6ZV90IGNvdW50LCBpbnQgcncpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSAodWFkZHIgKyBjb3VudCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IHVhZGRyID4+IFBBR0VfU0hJRlQ7CkBAIC0xODI4LDIxICsxNzUyLDE3IEBACiAgICAgICAgICAgICAgICAgICogcHJvYmFibHkgd3JvbmcgZnVuY3Rpb24gZm9yIHJ3PT1XUklURQogICAgICAgICAgICAgICAgICAqLwogCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlc1tpXSk7Ci0JCWlmIChwYWdlX3RvX3BmbihwYWdlc1tpXSkgPiBtYXhfcGZuKQotCQkJZ290byBvdXRfdW5sb2NrOwogCQkvKiA/PyBJcyBsb2NraW5nIG5lZWRlZD8gSSBkb24ndCB0aGluayBzbyAqLwogCQkvKiBpZiAoVGVzdFNldFBhZ2VMb2NrZWQocGFnZXNbaV0pKQogCQkgICBnb3RvIG91dF91bmxvY2s7ICovCiAgICAgICAgIH0KIAotCS8qIFBvcHVsYXRlIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0ICovCi0Jc2dsWzBdLnBhZ2UgPSBwYWdlc1swXTsgCisJc2dsWzBdLnBhZ2UgPSBwYWdlc1swXTsKIAlzZ2xbMF0ub2Zmc2V0ID0gdWFkZHIgJiB+UEFHRV9NQVNLOwogCWlmIChucl9wYWdlcyA+IDEpIHsKIAkJc2dsWzBdLmxlbmd0aCA9IFBBR0VfU0laRSAtIHNnbFswXS5vZmZzZXQ7CiAJCWNvdW50IC09IHNnbFswXS5sZW5ndGg7CiAJCWZvciAoaT0xOyBpIDwgbnJfcGFnZXMgOyBpKyspIHsKLQkJCXNnbFtpXS5vZmZzZXQgPSAwOwogCQkJc2dsW2ldLnBhZ2UgPSBwYWdlc1tpXTsgCiAJCQlzZ2xbaV0ubGVuZ3RoID0gY291bnQgPCBQQUdFX1NJWkUgPyBjb3VudCA6IFBBR0VfU0laRTsKIAkJCWNvdW50IC09IFBBR0VfU0laRTsKQEAgLTE4NTUsMTAgKzE3NzUsNiBAQAogCWtmcmVlKHBhZ2VzKTsKIAlyZXR1cm4gbnJfcGFnZXM7CiAKLSBvdXRfdW5sb2NrOgotCS8qIGZvciAoaj0wOyBqIDwgaTsgaisrKQotCSAgIHVubG9ja19wYWdlKHBhZ2VzW2pdKTsgKi8KLQlyZXMgPSAwOwogIG91dF91bm1hcDoKIAlpZiAocmVzID4gMCkgewogCQlmb3IgKGo9MDsgaiA8IHJlczsgaisrKQpAQCAtMTkwNCwyMCArMTgyMCwyMCBAQAogCXNnX2lvX2hkcl90ICpocCA9ICZzcnAtPmhlYWRlcjsKIAlTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSAmc3JwLT5kYXRhOwogCWludCBzZ190YWJsZXNpemUgPSBzZnAtPnBhcmVudGRwLT5zZ190YWJsZXNpemU7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7CiAJaW50IG14X3NjX2VsZW1zLCByZXM7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2ZwLT5wYXJlbnRkcC0+ZGV2aWNlOwogCiAJaWYgKCgodW5zaWduZWQgbG9uZylocC0+ZHhmZXJwICYKIAkJCXF1ZXVlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpICE9IDApCiAJCXJldHVybiAxOworCiAJbXhfc2NfZWxlbXMgPSBzZ19idWlsZF9zZ2F0KHNjaHAsIHNmcCwgc2dfdGFibGVzaXplKTsKICAgICAgICAgaWYgKG14X3NjX2VsZW1zIDw9IDApIHsKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotCXNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzY2hwLT5idWZmZXI7Ci0JcmVzID0gc3RfbWFwX3VzZXJfcGFnZXMoc2dsLCBteF9zY19lbGVtcywgKHVuc2lnbmVkIGxvbmcpaHAtPmR4ZmVycCwgZHhmZXJfbGVuLCAKLQkJCQkoU0dfRFhGRVJfVE9fREVWID09IGhwLT5keGZlcl9kaXJlY3Rpb24pID8gMSA6IDAsIFVMT05HX01BWCk7CisJcmVzID0gc3RfbWFwX3VzZXJfcGFnZXMoc2NocC0+YnVmZmVyLCBteF9zY19lbGVtcywKKwkJCQkodW5zaWduZWQgbG9uZylocC0+ZHhmZXJwLCBkeGZlcl9sZW4sIAorCQkJCShTR19EWEZFUl9UT19ERVYgPT0gaHAtPmR4ZmVyX2RpcmVjdGlvbikgPyAxIDogMCk7CiAJaWYgKHJlcyA8PSAwKQogCQlyZXR1cm4gMTsKIAlzY2hwLT5rX3VzZV9zZyA9IHJlczsKQEAgLTE5MzIsOSArMTg0OCwxMSBAQAogc3RhdGljIGludAogc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpCiB7Ci0JaW50IHJldF9zejsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCByZXRfc3ogPSAwLCBrLCByZW1fc3osIG51bSwgbXhfc2NfZWxlbXM7CisJaW50IHNnX3RhYmxlc2l6ZSA9IHNmcC0+cGFyZW50ZHAtPnNnX3RhYmxlc2l6ZTsKIAlpbnQgYmxrX3NpemUgPSBidWZmX3NpemU7Ci0JdW5zaWduZWQgY2hhciAqcCA9IE5VTEw7CisJc3RydWN0IHBhZ2UgKnAgPSBOVUxMOwogCiAJaWYgKChibGtfc2l6ZSA8IDApIHx8ICghc2ZwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xOTQ0LDU5ICsxODYyLDM1IEBACiAJYmxrX3NpemUgPSAoYmxrX3NpemUgKyBTR19TRUNUT1JfTVNLKSAmICh+U0dfU0VDVE9SX01TSyk7CiAJU0NTSV9MT0dfVElNRU9VVCg0LCBwcmludGsoInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXG4iLAogCQkJCSAgIGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTsKLQlpZiAoYmxrX3NpemUgPD0gU0dfU0NBVFRFUl9TWikgewotCQlwID0gc2dfcGFnZV9tYWxsb2MoYmxrX3NpemUsIHNmcC0+bG93X2RtYSwgJnJldF9zeik7CisKKwkvKiBOLkIuIHJldF9zeiBjYXJyaWVkIGludG8gdGhpcyBibG9jayAuLi4gKi8KKwlteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpOworCWlmIChteF9zY19lbGVtcyA8IDApCisJCXJldHVybiBteF9zY19lbGVtczsJLyogbW9zdCBsaWtlbHkgLUVOT01FTSAqLworCisJZm9yIChrID0gMCwgc2cgPSBzY2hwLT5idWZmZXIsIHJlbV9zeiA9IGJsa19zaXplOworCSAgICAgKHJlbV9zeiA+IDApICYmIChrIDwgbXhfc2NfZWxlbXMpOworCSAgICAgKytrLCByZW1fc3ogLT0gcmV0X3N6LCArK3NnKSB7CisJCQorCQludW0gPSAocmVtX3N6ID4gU0dfU0NBVFRFUl9TWikgPyBTR19TQ0FUVEVSX1NaIDogcmVtX3N6OworCQlwID0gc2dfcGFnZV9tYWxsb2MobnVtLCBzZnAtPmxvd19kbWEsICZyZXRfc3opOwogCQlpZiAoIXApCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJaWYgKGJsa19zaXplID09IHJldF9zeikgewkvKiBnb3QgaXQgb24gdGhlIGZpcnN0IGF0dGVtcHQgKi8KLQkJCXNjaHAtPmtfdXNlX3NnID0gMDsKLQkJCXNjaHAtPmJ1ZmZlciA9IHA7Ci0JCQlzY2hwLT5idWZmbGVuID0gYmxrX3NpemU7Ci0JCQlzY2hwLT5iX21hbGxvY19sZW4gPSBibGtfc2l6ZTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJcCA9IHNnX3BhZ2VfbWFsbG9jKFNHX1NDQVRURVJfU1osIHNmcC0+bG93X2RtYSwgJnJldF9zeik7Ci0JCWlmICghcCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLS8qIFdhbnQgc29tZSBsb2NhbCBkZWNsYXJhdGlvbnMsIHNvIHN0YXJ0IG5ldyBibG9jayAuLi4gKi8KLQl7CQkJLyogbGV0cyB0cnkgYW5kIGJ1aWxkIGEgc2NhdHRlciBnYXRoZXIgbGlzdCAqLwotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjbHA7Ci0JCWludCBrLCByZW1fc3osIG51bTsKLQkJaW50IG14X3NjX2VsZW1zOwotCQlpbnQgc2dfdGFibGVzaXplID0gc2ZwLT5wYXJlbnRkcC0+c2dfdGFibGVzaXplOwotCQlpbnQgZmlyc3QgPSAxOwogCi0JCS8qIE4uQi4gcmV0X3N6IGNhcnJpZWQgaW50byB0aGlzIGJsb2NrIC4uLiAqLwotCQlteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpOwotCQlpZiAobXhfc2NfZWxlbXMgPCAwKQotCQkJcmV0dXJuIG14X3NjX2VsZW1zOwkvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovCisJCXNnLT5wYWdlID0gcDsKKwkJc2ctPmxlbmd0aCA9IHJldF9zejsKIAotCQlmb3IgKGsgPSAwLCBzY2xwID0gc2NocC0+YnVmZmVyLCByZW1fc3ogPSBibGtfc2l6ZTsKLQkJICAgICAocmVtX3N6ID4gMCkgJiYgKGsgPCBteF9zY19lbGVtcyk7Ci0JCSAgICAgKytrLCByZW1fc3ogLT0gcmV0X3N6LCArK3NjbHApIHsKLQkJCWlmIChmaXJzdCkKLQkJCQlmaXJzdCA9IDA7Ci0JCQllbHNlIHsKLQkJCQludW0gPQotCQkJCSAgICAocmVtX3N6ID4KLQkJCQkgICAgIFNHX1NDQVRURVJfU1opID8gU0dfU0NBVFRFUl9TWiA6IHJlbV9zejsKLQkJCQlwID0gc2dfcGFnZV9tYWxsb2MobnVtLCBzZnAtPmxvd19kbWEsICZyZXRfc3opOwotCQkJCWlmICghcCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzZ19zZXRfYnVmKHNjbHAsIHAsIHJldF9zeik7CisJCVNDU0lfTE9HX1RJTUVPVVQoNSwgcHJpbnRrKCJzZ19idWlsZF9idWlsZDogaz0lZCwgYT0weCVwLCBsZW49JWRcbiIsCisJCQkJICBrLCBwLCByZXRfc3opKTsKKwl9CQkvKiBlbmQgb2YgZm9yIGxvb3AgKi8KIAotCQkJU0NTSV9MT0dfVElNRU9VVCg1LCBwcmludGsoInNnX2J1aWxkX2J1aWxkOiBrPSVkLCBhPTB4JXAsIGxlbj0lZFxuIiwKLQkJCQkJICBrLCBzZ19zY2F0ZzJ2aXJ0KHNjbHApLCByZXRfc3opKTsKLQkJfQkJLyogZW5kIG9mIGZvciBsb29wICovCi0JCXNjaHAtPmtfdXNlX3NnID0gazsKLQkJU0NTSV9MT0dfVElNRU9VVCg1LCBwcmludGsoInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXG4iLCBrLCByZW1fc3opKTsKLQkJc2NocC0+YnVmZmxlbiA9IGJsa19zaXplOwotCQlpZiAocmVtX3N6ID4gMCkJLyogbXVzdCBoYXZlIGZhaWxlZCAqLwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCXNjaHAtPmtfdXNlX3NnID0gazsKKwlTQ1NJX0xPR19USU1FT1VUKDUsIHByaW50aygic2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcbiIsIGssIHJlbV9zeikpOworCisJc2NocC0+YnVmZmxlbiA9IGJsa19zaXplOworCWlmIChyZW1fc3ogPiAwKQkvKiBtdXN0IGhhdmUgZmFpbGVkICovCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMDUsNiArMTg5OSw3IEBACiB7CiAJc2dfaW9faGRyX3QgKmhwID0gJnNycC0+aGVhZGVyOwogCVNnX3NjYXR0ZXJfaG9sZCAqc2NocCA9ICZzcnAtPmRhdGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNjaHAtPmJ1ZmZlcjsKIAlpbnQgbnVtX3hmZXIgPSAwOwogCWludCBqLCBrLCBvbnVtLCB1c2dsZW4sIGtzZ2xlbiwgcmVzOwogCWludCBpb3ZlY19jb3VudCA9IChpbnQpIGhwLT5pb3ZlY19jb3VudDsKQEAgLTIwMzMsNjMgKzE5MjgsNDUgQEAKIAl9IGVsc2UKIAkJb251bSA9IDE7CiAKLQlpZiAoMCA9PSBzY2hwLT5rX3VzZV9zZykgewkvKiBrZXJuZWwgaGFzIHNpbmdsZSBidWZmZXIgKi8KLQkJZm9yIChqID0gMCwgcCA9IHNjaHAtPmJ1ZmZlcjsgaiA8IG9udW07ICsraikgewotCQkJcmVzID0gc2dfdV9pb3ZlYyhocCwgaW92ZWNfY291bnQsIGosIDEsICZ1c2dsZW4sICZ1cCk7Ci0JCQlpZiAocmVzKQotCQkJCXJldHVybiByZXM7Ci0JCQl1c2dsZW4gPSAobnVtX3hmZXIgPiB1c2dsZW4pID8gdXNnbGVuIDogbnVtX3hmZXI7Ci0JCQlpZiAoX19jb3B5X2Zyb21fdXNlcihwLCB1cCwgdXNnbGVuKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXAgKz0gdXNnbGVuOwotCQkJbnVtX3hmZXIgLT0gdXNnbGVuOwotCQkJaWYgKG51bV94ZmVyIDw9IDApCisJa3NnbGVuID0gc2ctPmxlbmd0aDsKKwlwID0gcGFnZV9hZGRyZXNzKHNnLT5wYWdlKTsKKwlmb3IgKGogPSAwLCBrID0gMDsgaiA8IG9udW07ICsraikgeworCQlyZXMgPSBzZ191X2lvdmVjKGhwLCBpb3ZlY19jb3VudCwgaiwgMSwgJnVzZ2xlbiwgJnVwKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisKKwkJZm9yICg7IHA7ICsrc2csIGtzZ2xlbiA9IHNnLT5sZW5ndGgsCisJCSAgICAgcCA9IHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSkpIHsKKwkJCWlmICh1c2dsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCWlmIChrc2dsZW4gPiB1c2dsZW4pIHsKKwkJCQlpZiAodXNnbGVuID49IG51bV94ZmVyKSB7CisJCQkJCWlmIChfX2NvcHlfZnJvbV91c2VyKHAsIHVwLCBudW1feGZlcikpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWlmIChfX2NvcHlfZnJvbV91c2VyKHAsIHVwLCB1c2dsZW4pKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlwICs9IHVzZ2xlbjsKKwkJCQlrc2dsZW4gLT0gdXNnbGVuOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoa3NnbGVuID49IG51bV94ZmVyKSB7CisJCQkJCWlmIChfX2NvcHlfZnJvbV91c2VyKHAsIHVwLCBudW1feGZlcikpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWlmIChfX2NvcHlfZnJvbV91c2VyKHAsIHVwLCBrc2dsZW4pKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl1cCArPSBrc2dsZW47CisJCQkJdXNnbGVuIC09IGtzZ2xlbjsKKwkJCX0KKwkJCSsrazsKKwkJCWlmIChrID49IHNjaHAtPmtfdXNlX3NnKQogCQkJCXJldHVybiAwOwogCQl9Ci0JfSBlbHNlIHsJCS8qIGtlcm5lbCB1c2luZyBzY2F0dGVyIGdhdGhlciBsaXN0ICovCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NscCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgc2NocC0+YnVmZmVyOwotCi0JCWtzZ2xlbiA9IChpbnQpIHNjbHAtPmxlbmd0aDsKLQkJcCA9IHNnX3NjYXRnMnZpcnQoc2NscCk7Ci0JCWZvciAoaiA9IDAsIGsgPSAwOyBqIDwgb251bTsgKytqKSB7Ci0JCQlyZXMgPSBzZ191X2lvdmVjKGhwLCBpb3ZlY19jb3VudCwgaiwgMSwgJnVzZ2xlbiwgJnVwKTsKLQkJCWlmIChyZXMpCi0JCQkJcmV0dXJuIHJlczsKLQotCQkJZm9yICg7IHA7ICsrc2NscCwga3NnbGVuID0gKGludCkgc2NscC0+bGVuZ3RoLAotCQkJCSAgcCA9IHNnX3NjYXRnMnZpcnQoc2NscCkpIHsKLQkJCQlpZiAodXNnbGVuIDw9IDApCi0JCQkJCWJyZWFrOwotCQkJCWlmIChrc2dsZW4gPiB1c2dsZW4pIHsKLQkJCQkJaWYgKHVzZ2xlbiA+PSBudW1feGZlcikgewotCQkJCQkJaWYgKF9fY29weV9mcm9tX3VzZXIKLQkJCQkJCSAgICAocCwgdXAsIG51bV94ZmVyKSkKLQkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJCXJldHVybiAwOwotCQkJCQl9Ci0JCQkJCWlmIChfX2NvcHlfZnJvbV91c2VyKHAsIHVwLCB1c2dsZW4pKQotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCXAgKz0gdXNnbGVuOwotCQkJCQlrc2dsZW4gLT0gdXNnbGVuOwotCQkJCQlicmVhazsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoa3NnbGVuID49IG51bV94ZmVyKSB7Ci0JCQkJCQlpZiAoX19jb3B5X2Zyb21fdXNlcgotCQkJCQkJICAgIChwLCB1cCwgbnVtX3hmZXIpKQotCQkJCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCX0KLQkJCQkJaWYgKF9fY29weV9mcm9tX3VzZXIocCwgdXAsIGtzZ2xlbikpCi0JCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJdXAgKz0ga3NnbGVuOwotCQkJCQl1c2dsZW4gLT0ga3NnbGVuOwotCQkJCX0KLQkJCQkrK2s7Ci0JCQkJaWYgKGsgPj0gc2NocC0+a191c2Vfc2cpCi0JCQkJCXJldHVybiAwOwotCQkJfQotCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMjcsMjkgKzIwMDQsMjUgQEAKIHsKIAlTQ1NJX0xPR19USU1FT1VUKDQsIHByaW50aygic2dfcmVtb3ZlX3NjYXQ6IGtfdXNlX3NnPSVkXG4iLCBzY2hwLT5rX3VzZV9zZykpOwogCWlmIChzY2hwLT5idWZmZXIgJiYgKHNjaHAtPnNnbGlzdF9sZW4gPiAwKSkgewotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjbHAgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHNjaHAtPmJ1ZmZlcjsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNjaHAtPmJ1ZmZlcjsKIAogCQlpZiAoc2NocC0+ZGlvX2luX3VzZSkgewogI2lmZGVmIFNHX0FMTE9XX0RJT19DT0RFCi0JCQlzdF91bm1hcF91c2VyX3BhZ2VzKHNjbHAsIHNjaHAtPmtfdXNlX3NnLCBUUlVFKTsKKwkJCXN0X3VubWFwX3VzZXJfcGFnZXMoc2csIHNjaHAtPmtfdXNlX3NnLCBUUlVFKTsKICNlbmRpZgogCQl9IGVsc2UgewogCQkJaW50IGs7CiAKLQkJCWZvciAoayA9IDA7IChrIDwgc2NocC0+a191c2Vfc2cpICYmIHNnX3NjYXRnMnZpcnQoc2NscCk7Ci0JCQkgICAgICsraywgKytzY2xwKSB7CisJCQlmb3IgKGsgPSAwOyAoayA8IHNjaHAtPmtfdXNlX3NnKSAmJiBzZy0+cGFnZTsKKwkJCSAgICAgKytrLCArK3NnKSB7CiAJCQkJU0NTSV9MT0dfVElNRU9VVCg1LCBwcmludGsoCiAJCQkJICAgICJzZ19yZW1vdmVfc2NhdDogaz0lZCwgYT0weCVwLCBsZW49JWRcbiIsCi0JCQkJICAgIGssIHNnX3NjYXRnMnZpcnQoc2NscCksIHNjbHAtPmxlbmd0aCkpOwotCQkJCXNnX3BhZ2VfZnJlZShzZ19zY2F0ZzJ2aXJ0KHNjbHApLCBzY2xwLT5sZW5ndGgpOwotCQkJCXNjbHAtPnBhZ2UgPSBOVUxMOwotCQkJCXNjbHAtPm9mZnNldCA9IDA7Ci0JCQkJc2NscC0+bGVuZ3RoID0gMDsKKwkJCQkgICAgaywgc2ctPnBhZ2UsIHNnLT5sZW5ndGgpKTsKKwkJCQlzZ19wYWdlX2ZyZWUoc2ctPnBhZ2UsIHNnLT5sZW5ndGgpOwogCQkJfQogCQl9Ci0JCXNnX3BhZ2VfZnJlZShzY2hwLT5idWZmZXIsIHNjaHAtPnNnbGlzdF9sZW4pOwotCX0gZWxzZSBpZiAoc2NocC0+YnVmZmVyKQotCQlzZ19wYWdlX2ZyZWUoc2NocC0+YnVmZmVyLCBzY2hwLT5iX21hbGxvY19sZW4pOworCQlrZnJlZShzY2hwLT5idWZmZXIpOworCX0KIAltZW1zZXQoc2NocCwgMCwgc2l6ZW9mICgqc2NocCkpOwogfQogCkBAIC0yMTU4LDYgKzIwMzEsNyBAQAogewogCXNnX2lvX2hkcl90ICpocCA9ICZzcnAtPmhlYWRlcjsKIAlTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSAmc3JwLT5kYXRhOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzY2hwLT5idWZmZXI7CiAJaW50IG51bV94ZmVyID0gMDsKIAlpbnQgaiwgaywgb251bSwgdXNnbGVuLCBrc2dsZW4sIHJlczsKIAlpbnQgaW92ZWNfY291bnQgPSAoaW50KSBocC0+aW92ZWNfY291bnQ7CkBAIC0yMTg2LDYzICsyMDYwLDQ1IEBACiAJfSBlbHNlCiAJCW9udW0gPSAxOwogCi0JaWYgKDAgPT0gc2NocC0+a191c2Vfc2cpIHsJLyoga2VybmVsIGhhcyBzaW5nbGUgYnVmZmVyICovCi0JCWZvciAoaiA9IDAsIHAgPSBzY2hwLT5idWZmZXI7IGogPCBvbnVtOyArK2opIHsKLQkJCXJlcyA9IHNnX3VfaW92ZWMoaHAsIGlvdmVjX2NvdW50LCBqLCAwLCAmdXNnbGVuLCAmdXApOwotCQkJaWYgKHJlcykKLQkJCQlyZXR1cm4gcmVzOwotCQkJdXNnbGVuID0gKG51bV94ZmVyID4gdXNnbGVuKSA/IHVzZ2xlbiA6IG51bV94ZmVyOwotCQkJaWYgKF9fY29weV90b191c2VyKHVwLCBwLCB1c2dsZW4pKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcCArPSB1c2dsZW47Ci0JCQludW1feGZlciAtPSB1c2dsZW47Ci0JCQlpZiAobnVtX3hmZXIgPD0gMCkKKwlwID0gcGFnZV9hZGRyZXNzKHNnLT5wYWdlKTsKKwlrc2dsZW4gPSBzZy0+bGVuZ3RoOworCWZvciAoaiA9IDAsIGsgPSAwOyBqIDwgb251bTsgKytqKSB7CisJCXJlcyA9IHNnX3VfaW92ZWMoaHAsIGlvdmVjX2NvdW50LCBqLCAwLCAmdXNnbGVuLCAmdXApOworCQlpZiAocmVzKQorCQkJcmV0dXJuIHJlczsKKworCQlmb3IgKDsgcDsgKytzZywga3NnbGVuID0gc2ctPmxlbmd0aCwKKwkJICAgICBwID0gcGFnZV9hZGRyZXNzKHNnLT5wYWdlKSkgeworCQkJaWYgKHVzZ2xlbiA8PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKGtzZ2xlbiA+IHVzZ2xlbikgeworCQkJCWlmICh1c2dsZW4gPj0gbnVtX3hmZXIpIHsKKwkJCQkJaWYgKF9fY29weV90b191c2VyKHVwLCBwLCBudW1feGZlcikpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWlmIChfX2NvcHlfdG9fdXNlcih1cCwgcCwgdXNnbGVuKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJcCArPSB1c2dsZW47CisJCQkJa3NnbGVuIC09IHVzZ2xlbjsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGtzZ2xlbiA+PSBudW1feGZlcikgeworCQkJCQlpZiAoX19jb3B5X3RvX3VzZXIodXAsIHAsIG51bV94ZmVyKSkKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJaWYgKF9fY29weV90b191c2VyKHVwLCBwLCBrc2dsZW4pKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl1cCArPSBrc2dsZW47CisJCQkJdXNnbGVuIC09IGtzZ2xlbjsKKwkJCX0KKwkJCSsrazsKKwkJCWlmIChrID49IHNjaHAtPmtfdXNlX3NnKQogCQkJCXJldHVybiAwOwogCQl9Ci0JfSBlbHNlIHsJCS8qIGtlcm5lbCB1c2luZyBzY2F0dGVyIGdhdGhlciBsaXN0ICovCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NscCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgc2NocC0+YnVmZmVyOwotCi0JCWtzZ2xlbiA9IChpbnQpIHNjbHAtPmxlbmd0aDsKLQkJcCA9IHNnX3NjYXRnMnZpcnQoc2NscCk7Ci0JCWZvciAoaiA9IDAsIGsgPSAwOyBqIDwgb251bTsgKytqKSB7Ci0JCQlyZXMgPSBzZ191X2lvdmVjKGhwLCBpb3ZlY19jb3VudCwgaiwgMCwgJnVzZ2xlbiwgJnVwKTsKLQkJCWlmIChyZXMpCi0JCQkJcmV0dXJuIHJlczsKLQotCQkJZm9yICg7IHA7ICsrc2NscCwga3NnbGVuID0gKGludCkgc2NscC0+bGVuZ3RoLAotCQkJCSAgcCA9IHNnX3NjYXRnMnZpcnQoc2NscCkpIHsKLQkJCQlpZiAodXNnbGVuIDw9IDApCi0JCQkJCWJyZWFrOwotCQkJCWlmIChrc2dsZW4gPiB1c2dsZW4pIHsKLQkJCQkJaWYgKHVzZ2xlbiA+PSBudW1feGZlcikgewotCQkJCQkJaWYgKF9fY29weV90b191c2VyCi0JCQkJCQkgICAgKHVwLCBwLCBudW1feGZlcikpCi0JCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCQlyZXR1cm4gMDsKLQkJCQkJfQotCQkJCQlpZiAoX19jb3B5X3RvX3VzZXIodXAsIHAsIHVzZ2xlbikpCi0JCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJcCArPSB1c2dsZW47Ci0JCQkJCWtzZ2xlbiAtPSB1c2dsZW47Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChrc2dsZW4gPj0gbnVtX3hmZXIpIHsKLQkJCQkJCWlmIChfX2NvcHlfdG9fdXNlcgotCQkJCQkJICAgICh1cCwgcCwgbnVtX3hmZXIpKQotCQkJCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCX0KLQkJCQkJaWYgKF9fY29weV90b191c2VyKHVwLCBwLCBrc2dsZW4pKQotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCXVwICs9IGtzZ2xlbjsKLQkJCQkJdXNnbGVuIC09IGtzZ2xlbjsKLQkJCQl9Ci0JCQkJKytrOwotCQkJCWlmIChrID49IHNjaHAtPmtfdXNlX3NnKQotCQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0yMjUwLDM3ICsyMTA2LDMyIEBACiBzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcikKIHsKIAlTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSAmc3JwLT5kYXRhOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzY2hwLT5idWZmZXI7CisJaW50IGssIG51bTsKIAogCVNDU0lfTE9HX1RJTUVPVVQoNCwgcHJpbnRrKCJzZ19yZWFkX294ZmVyOiBudW1fcmVhZF94ZmVyPSVkXG4iLAogCQkJCSAgIG51bV9yZWFkX3hmZXIpKTsKIAlpZiAoKCFvdXRwKSB8fCAobnVtX3JlYWRfeGZlciA8PSAwKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKHNjaHAtPmtfdXNlX3NnID4gMCkgewotCQlpbnQgaywgbnVtOwotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjbHAgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHNjaHAtPmJ1ZmZlcjsKIAotCQlmb3IgKGsgPSAwOyAoayA8IHNjaHAtPmtfdXNlX3NnKSAmJiBzZ19zY2F0ZzJ2aXJ0KHNjbHApOwotCQkgICAgICsraywgKytzY2xwKSB7Ci0JCQludW0gPSAoaW50KSBzY2xwLT5sZW5ndGg7Ci0JCQlpZiAobnVtID4gbnVtX3JlYWRfeGZlcikgewotCQkJCWlmIChfX2NvcHlfdG9fdXNlcgotCQkJCSAgICAob3V0cCwgc2dfc2NhdGcydmlydChzY2xwKSwgbnVtX3JlYWRfeGZlcikpCi0JCQkJCXJldHVybiAtRUZBVUxUOworCWZvciAoayA9IDA7IChrIDwgc2NocC0+a191c2Vfc2cpICYmIHNnLT5wYWdlOyArK2ssICsrc2cpIHsKKwkJbnVtID0gc2ctPmxlbmd0aDsKKwkJaWYgKG51bSA+IG51bV9yZWFkX3hmZXIpIHsKKwkJCWlmIChfX2NvcHlfdG9fdXNlcihvdXRwLCBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpLAorCQkJCQkgICBudW1fcmVhZF94ZmVyKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKF9fY29weV90b191c2VyKG91dHAsIHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSksCisJCQkJCSAgIG51bSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQludW1fcmVhZF94ZmVyIC09IG51bTsKKwkJCWlmIChudW1fcmVhZF94ZmVyIDw9IDApCiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChfX2NvcHlfdG9fdXNlcgotCQkJCSAgICAob3V0cCwgc2dfc2NhdGcydmlydChzY2xwKSwgbnVtKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJbnVtX3JlYWRfeGZlciAtPSBudW07Ci0JCQkJaWYgKG51bV9yZWFkX3hmZXIgPD0gMCkKLQkJCQkJYnJlYWs7Ci0JCQkJb3V0cCArPSBudW07Ci0JCQl9CisJCQlvdXRwICs9IG51bTsKIAkJfQotCX0gZWxzZSB7Ci0JCWlmIChfX2NvcHlfdG9fdXNlcihvdXRwLCBzY2hwLT5idWZmZXIsIG51bV9yZWFkX3hmZXIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMDYsNDQgKzIxNTcsMzEgQEAKIHsKIAlTZ19zY2F0dGVyX2hvbGQgKnJlcV9zY2hwID0gJnNycC0+ZGF0YTsKIAlTZ19zY2F0dGVyX2hvbGQgKnJzdl9zY2hwID0gJnNmcC0+cmVzZXJ2ZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gcnN2X3NjaHAtPmJ1ZmZlcjsKKwlpbnQgaywgbnVtLCByZW07CiAKIAlzcnAtPnJlc191c2VkID0gMTsKIAlTQ1NJX0xPR19USU1FT1VUKDQsIHByaW50aygic2dfbGlua19yZXNlcnZlOiBzaXplPSVkXG4iLCBzaXplKSk7Ci0Jc2l6ZSA9IChzaXplICsgMSkgJiAofjEpOwkvKiByb3VuZCB0byBldmVuIGZvciBhaGExNTQyICovCi0JaWYgKHJzdl9zY2hwLT5rX3VzZV9zZyA+IDApIHsKLQkJaW50IGssIG51bTsKLQkJaW50IHJlbSA9IHNpemU7Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NscCA9Ci0JCSAgICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHJzdl9zY2hwLT5idWZmZXI7CisJcmVtID0gc2l6ZSA9IChzaXplICsgMSkgJiAofjEpOwkvKiByb3VuZCB0byBldmVuIGZvciBhaGExNTQyICovCiAKLQkJZm9yIChrID0gMDsgayA8IHJzdl9zY2hwLT5rX3VzZV9zZzsgKytrLCArK3NjbHApIHsKLQkJCW51bSA9IChpbnQpIHNjbHAtPmxlbmd0aDsKLQkJCWlmIChyZW0gPD0gbnVtKSB7Ci0JCQkJaWYgKDAgPT0gaykgewotCQkJCQlyZXFfc2NocC0+a191c2Vfc2cgPSAwOwotCQkJCQlyZXFfc2NocC0+YnVmZmVyID0gc2dfc2NhdGcydmlydChzY2xwKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzZnAtPnNhdmVfc2NhdF9sZW4gPSBudW07Ci0JCQkJCXNjbHAtPmxlbmd0aCA9ICh1bnNpZ25lZCkgcmVtOwotCQkJCQlyZXFfc2NocC0+a191c2Vfc2cgPSBrICsgMTsKLQkJCQkJcmVxX3NjaHAtPnNnbGlzdF9sZW4gPQotCQkJCQkgICAgcnN2X3NjaHAtPnNnbGlzdF9sZW47Ci0JCQkJCXJlcV9zY2hwLT5idWZmZXIgPSByc3Zfc2NocC0+YnVmZmVyOwotCQkJCX0KLQkJCQlyZXFfc2NocC0+YnVmZmxlbiA9IHNpemU7Ci0JCQkJcmVxX3NjaHAtPmJfbWFsbG9jX2xlbiA9IHJzdl9zY2hwLT5iX21hbGxvY19sZW47Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UKLQkJCQlyZW0gLT0gbnVtOwotCQl9Ci0JCWlmIChrID49IHJzdl9zY2hwLT5rX3VzZV9zZykKLQkJCVNDU0lfTE9HX1RJTUVPVVQoMSwgcHJpbnRrKCJzZ19saW5rX3Jlc2VydmU6IEJBRCBzaXplXG4iKSk7Ci0JfSBlbHNlIHsKLQkJcmVxX3NjaHAtPmtfdXNlX3NnID0gMDsKLQkJcmVxX3NjaHAtPmJ1ZmZsZW4gPSBzaXplOwotCQlyZXFfc2NocC0+YnVmZmVyID0gcnN2X3NjaHAtPmJ1ZmZlcjsKLQkJcmVxX3NjaHAtPmJfbWFsbG9jX2xlbiA9IHJzdl9zY2hwLT5iX21hbGxvY19sZW47CisJZm9yIChrID0gMDsgayA8IHJzdl9zY2hwLT5rX3VzZV9zZzsgKytrLCArK3NnKSB7CisJCW51bSA9IHNnLT5sZW5ndGg7CisJCWlmIChyZW0gPD0gbnVtKSB7CisJCQlzZnAtPnNhdmVfc2NhdF9sZW4gPSBudW07CisJCQlzZy0+bGVuZ3RoID0gcmVtOworCQkJcmVxX3NjaHAtPmtfdXNlX3NnID0gayArIDE7CisJCQlyZXFfc2NocC0+c2dsaXN0X2xlbiA9IHJzdl9zY2hwLT5zZ2xpc3RfbGVuOworCQkJcmVxX3NjaHAtPmJ1ZmZlciA9IHJzdl9zY2hwLT5idWZmZXI7CisKKwkJCXJlcV9zY2hwLT5idWZmbGVuID0gc2l6ZTsKKwkJCXJlcV9zY2hwLT5iX21hbGxvY19sZW4gPSByc3Zfc2NocC0+Yl9tYWxsb2NfbGVuOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJcmVtIC09IG51bTsKIAl9CisKKwlpZiAoayA+PSByc3Zfc2NocC0+a191c2Vfc2cpCisJCVNDU0lfTE9HX1RJTUVPVVQoMSwgcHJpbnRrKCJzZ19saW5rX3Jlc2VydmU6IEJBRCBzaXplXG4iKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMzU1LDExICsyMTkzLDEwIEBACiAJU0NTSV9MT0dfVElNRU9VVCg0LCBwcmludGsoInNnX3VubGlua19yZXNlcnZlOiByZXEtPmtfdXNlX3NnPSVkXG4iLAogCQkJCSAgIChpbnQpIHJlcV9zY2hwLT5rX3VzZV9zZykpOwogCWlmICgocnN2X3NjaHAtPmtfdXNlX3NnID4gMCkgJiYgKHJlcV9zY2hwLT5rX3VzZV9zZyA+IDApKSB7Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NscCA9Ci0JCSAgICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIHJzdl9zY2hwLT5idWZmZXI7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSByc3Zfc2NocC0+YnVmZmVyOwogCiAJCWlmIChzZnAtPnNhdmVfc2NhdF9sZW4gPiAwKQotCQkJKHNjbHAgKyAocmVxX3NjaHAtPmtfdXNlX3NnIC0gMSkpLT5sZW5ndGggPQorCQkJKHNnICsgKHJlcV9zY2hwLT5rX3VzZV9zZyAtIDEpKS0+bGVuZ3RoID0KIAkJCSAgICAodW5zaWduZWQpIHNmcC0+c2F2ZV9zY2F0X2xlbjsKIAkJZWxzZQogCQkJU0NTSV9MT0dfVElNRU9VVCgxLCBwcmludGsgKCJzZ191bmxpbmtfcmVzZXJ2ZTogQkFEIHNhdmVfc2NhdF9sZW5cbiIpKTsKQEAgLTI0NDUsNyArMjI4Miw2IEBACiAJaWYgKHJlc3ApIHsKIAkJcmVzcC0+bmV4dHJwID0gTlVMTDsKIAkJcmVzcC0+aGVhZGVyLmR1cmF0aW9uID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQkJcmVzcC0+bXlfY21kcCA9IE5VTEw7CiAJfQogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKIAlyZXR1cm4gcmVzcDsKQEAgLTI0NjMsOCArMjI5OSw2IEBACiAJaWYgKCghc2ZwKSB8fCAoIXNycCkgfHwgKCFzZnAtPmhlYWRycCkpCiAJCXJldHVybiByZXM7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZzZnAtPnJxX2xpc3RfbG9jaywgaWZsYWdzKTsKLQlpZiAoc3JwLT5teV9jbWRwKQotCQlzcnAtPm15X2NtZHAtPnVwcGVyX3ByaXZhdGVfZGF0YSA9IE5VTEw7CiAJcHJldl9ycCA9IHNmcC0+aGVhZHJwOwogCWlmIChzcnAgPT0gcHJldl9ycCkgewogCQlzZnAtPmhlYWRycCA9IHByZXZfcnAtPm5leHRycDsKQEAgLTI1MDcsMTAgKzIzNDEsMTAgQEAKIAlTZ19mZCAqc2ZwOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0Jc2ZwID0gKFNnX2ZkICopIHNnX3BhZ2VfbWFsbG9jKHNpemVvZiAoU2dfZmQpLCAwLCBOVUxMKTsKKwlzZnAgPSBremFsbG9jKHNpemVvZigqc2ZwKSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFzZnApCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChzZnAsIDAsIHNpemVvZiAoU2dfZmQpKTsKKwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNmcC0+cmVhZF93YWl0KTsKIAlyd2xvY2tfaW5pdCgmc2ZwLT5ycV9saXN0X2xvY2spOwogCkBAIC0yNTY3LDcgKzI0MDEsNyBAQAogCX0KIAlzZnAtPnBhcmVudGRwID0gTlVMTDsKIAlTQ1NJX0xPR19USU1FT1VUKDYsIHByaW50aygiX19zZ19yZW1vdmVfc2ZwOiAgICBzZnA9MHglcFxuIiwgc2ZwKSk7Ci0Jc2dfcGFnZV9mcmVlKChjaGFyICopIHNmcCwgc2l6ZW9mIChTZ19mZCkpOworCWtmcmVlKHNmcCk7CiB9CiAKIC8qIFJldHVybnMgMCBpbiBub3JtYWwgY2FzZSwgMSB3aGVuIGRldGFjaGVkIGFuZCBzZHAgb2JqZWN0IHJlbW92ZWQgKi8KQEAgLTI2MzIsMTAgKzI0NjYsMTAgQEAKIH0KIAogLyogSWYgcmV0U3pwPT1OVUxMIHdhbnQgZXhhY3Qgc2l6ZSBvciBmYWlsICovCi1zdGF0aWMgY2hhciAqCitzdGF0aWMgc3RydWN0IHBhZ2UgKgogc2dfcGFnZV9tYWxsb2MoaW50IHJxU3osIGludCBsb3dEbWEsIGludCAqcmV0U3pwKQogewotCWNoYXIgKnJlc3AgPSBOVUxMOworCXN0cnVjdCBwYWdlICpyZXNwID0gTlVMTDsKIAlnZnBfdCBwYWdlX21hc2s7CiAJaW50IG9yZGVyLCBhX3NpemU7CiAJaW50IHJlc1N6ID0gcnFTejsKQEAgLTI2NTAsMTEgKzI0ODQsMTEgQEAKIAogCWZvciAob3JkZXIgPSAwLCBhX3NpemUgPSBQQUdFX1NJWkU7IGFfc2l6ZSA8IHJxU3o7CiAJICAgICBvcmRlcisrLCBhX3NpemUgPDw9IDEpIDsKLQlyZXNwID0gKGNoYXIgKikgX19nZXRfZnJlZV9wYWdlcyhwYWdlX21hc2ssIG9yZGVyKTsKKwlyZXNwID0gYWxsb2NfcGFnZXMocGFnZV9tYXNrLCBvcmRlcik7CiAJd2hpbGUgKCghcmVzcCkgJiYgb3JkZXIgJiYgcmV0U3pwKSB7CiAJCS0tb3JkZXI7CiAJCWFfc2l6ZSA+Pj0gMTsJLyogZGl2aWRlIGJ5IDIsIHVudGlsIFBBR0VfU0laRSAqLwotCQlyZXNwID0gKGNoYXIgKikgX19nZXRfZnJlZV9wYWdlcyhwYWdlX21hc2ssIG9yZGVyKTsJLyogdHJ5IGhhbGYgKi8KKwkJcmVzcCA9ICBhbGxvY19wYWdlcyhwYWdlX21hc2ssIG9yZGVyKTsJLyogdHJ5IGhhbGYgKi8KIAkJcmVzU3ogPSBhX3NpemU7CiAJfQogCWlmIChyZXNwKSB7CkBAIC0yNjY3LDE1ICsyNTAxLDE1IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zZ19wYWdlX2ZyZWUoY2hhciAqYnVmZiwgaW50IHNpemUpCitzZ19wYWdlX2ZyZWUoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBzaXplKQogewogCWludCBvcmRlciwgYV9zaXplOwogCi0JaWYgKCFidWZmKQorCWlmICghcGFnZSkKIAkJcmV0dXJuOwogCWZvciAob3JkZXIgPSAwLCBhX3NpemUgPSBQQUdFX1NJWkU7IGFfc2l6ZSA8IHNpemU7CiAJICAgICBvcmRlcisrLCBhX3NpemUgPDw9IDEpIDsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBidWZmLCBvcmRlcik7CisJX19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKIH0KIAogI2lmbmRlZiBNQUlOVEVOQU5DRV9JTl9DTUQKQEAgLTMwNjcsMTMgKzI5MDEsMTEgQEAKIAkJCQkJY3AgPSAiICAgICAiOwogCQkJfQogCQkJc2VxX3ByaW50ZihzLCBjcCk7Ci0JCQlibGVuID0gc3JwLT5teV9jbWRwID8gCi0JCQkJc3JwLT5teV9jbWRwLT5zcl9idWZmbGVuIDogc3JwLT5kYXRhLmJ1ZmZsZW47Ci0JCQl1c2cgPSBzcnAtPm15X2NtZHAgPyAKLQkJCQlzcnAtPm15X2NtZHAtPnNyX3VzZV9zZyA6IHNycC0+ZGF0YS5rX3VzZV9zZzsKKwkJCWJsZW4gPSBzcnAtPmRhdGEuYnVmZmxlbjsKKwkJCXVzZyA9IHNycC0+ZGF0YS5rX3VzZV9zZzsKIAkJCXNlcV9wcmludGYocywgc3JwLT5kb25lID8gCiAJCQkJICAgKCgxID09IHNycC0+ZG9uZSkgPyAgInJjdjoiIDogImZpbjoiKQotCQkJCSAgIDogKHNycC0+bXlfY21kcCA/ICJhY3Q6IiA6ICJwcmlvcjoiKSk7CisJCQkJICAgOiAiYWN0OiIpOwogCQkJc2VxX3ByaW50ZihzLCAiIGlkPSVkIGJsZW49JWQiLAogCQkJCSAgIHNycC0+aGVhZGVyLnBhY2tfaWQsIGJsZW4pOwogCQkJaWYgKHNycC0+ZG9uZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggZmI0MDEyYi4uYTRkOWJlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCSAqIHRoZXNlIGFyZSBhbHJlYWR5IHNldHVwLCBqdXN0IGNvcHkgY2RiIGJhc2ljYWxseQogCSAqLwogCWlmIChTQ3BudC0+cmVxdWVzdC0+ZmxhZ3MgJiBSRVFfQkxPQ0tfUEMpIHsKLQkJc2NzaV9zZXR1cF9ibGtfcGNfY21uZChTQ3BudCwgTUFYX1JFVFJJRVMpOworCQlzY3NpX3NldHVwX2Jsa19wY19jbW5kKFNDcG50KTsKIAogCQlpZiAoU0NwbnQtPnRpbWVvdXRfcGVyX2NvbW1hbmQpCiAJCQl0aW1lb3V0ID0gU0NwbnQtPnRpbWVvdXRfcGVyX2NvbW1hbmQ7CkBAIC03MTYsNyArNzE2LDcgQEAKIAl1bnNpZ25lZCBpbnQgdGhlX3Jlc3VsdDsKIAlpbnQgcmV0cmllcywgcmMsIG47CiAKLQlzdGF0aWMgY2hhciAqbG9hZG1lY2hbXSA9CisJc3RhdGljIGNvbnN0IGNoYXIgKmxvYWRtZWNoW10gPQogCXsKIAkJImNhZGR5IiwKIAkJInRyYXkiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jIGIvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCmluZGV4IDc4Mjc0ZGMuLjlkZGU4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKQEAgLTY4LDggKzY4LDggQEAKICNpZm5kZWYgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SCiAJY2QtPnZlbmRvciA9IFZFTkRPUl9TQ1NJMzsKICNlbHNlCi0JY2hhciAqdmVuZG9yID0gY2QtPmRldmljZS0+dmVuZG9yOwotCWNoYXIgKm1vZGVsID0gY2QtPmRldmljZS0+bW9kZWw7CisJY29uc3QgY2hhciAqdmVuZG9yID0gY2QtPmRldmljZS0+dmVuZG9yOworCWNvbnN0IGNoYXIgKm1vZGVsID0gY2QtPmRldmljZS0+bW9kZWw7CiAJCiAJLyogZGVmYXVsdCAqLwogCWNkLT52ZW5kb3IgPSBWRU5ET1JfU0NTSTM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGRkNTkyZjYuLmM0YWFkZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0xNyw3ICsxNyw3IEBACiAgICBMYXN0IG1vZGlmaWVkOiAxOC1KQU4tMTk5OCBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4gRGV2ZnMgc3VwcG9ydAogICovCiAKLXN0YXRpYyBjaGFyICp2ZXJzdHIgPSAiMjAwNTA4MzAiOworc3RhdGljIGNvbnN0IGNoYXIgKnZlcnN0ciA9ICIyMDA1MDgzMCI7CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX3JlcXVlc3QuaD4KICNpbmNsdWRlIDxzY3NpL3NnLmg+CiAKIApAQCAtMTM0LDcgKzEzMyw3IEBACiAjZW5kaWYKIC8qIEJpdCByZXZlcnNlZCBvcmRlciB0byBnZXQgc2FtZSBuYW1lcyBmb3Igc2FtZSBtaW5vcnMgd2l0aCBhbGwKICAgIG1vZGUgY291bnRzICovCi1zdGF0aWMgY2hhciAqc3RfZm9ybWF0c1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKnN0X2Zvcm1hdHNbXSA9IHsKIAkiIiwgICJyIiwgImsiLCAicyIsICJsIiwgInQiLCAibyIsICJ1IiwKIAkibSIsICJ2IiwgInAiLCAieCIsICJhIiwgInkiLCAicSIsICJ6In07IAogCkBAIC0xODgsOCArMTg3LDYgQEAKIHN0YXRpYyB2b2lkIG1vdmVfYnVmZmVyX2RhdGEoc3RydWN0IHN0X2J1ZmZlciAqLCBpbnQpOwogc3RhdGljIHZvaWQgYnVmX3RvX3NnKHN0cnVjdCBzdF9idWZmZXIgKiwgdW5zaWduZWQgaW50KTsKIAotc3RhdGljIGludCBzdF9tYXBfdXNlcl9wYWdlcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgY29uc3QgdW5zaWduZWQgaW50LCAKLQkJCSAgICAgdW5zaWduZWQgbG9uZywgc2l6ZV90LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIGludCBzZ2xfbWFwX3VzZXJfcGFnZXMoc3RydWN0IHNjYXR0ZXJsaXN0ICosIGNvbnN0IHVuc2lnbmVkIGludCwgCiAJCQkgICAgICB1bnNpZ25lZCBsb25nLCBzaXplX3QsIGludCk7CiBzdGF0aWMgaW50IHNnbF91bm1hcF91c2VyX3BhZ2VzKHN0cnVjdCBzY2F0dGVybGlzdCAqLCBjb25zdCB1bnNpZ25lZCBpbnQsIGludCk7CkBAIC0zMTMsMTIgKzMxMCwxMyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHN0X2FuYWx5emVfc2Vuc2Uoc3RydWN0IHNjc2lfcmVxdWVzdCAqU1JwbnQsIHN0cnVjdCBzdF9jbWRzdGF0dXMgKnMpCitzdGF0aWMgdm9pZCBzdF9hbmFseXplX3NlbnNlKHN0cnVjdCBzdF9yZXF1ZXN0ICpTUnBudCwgc3RydWN0IHN0X2NtZHN0YXR1cyAqcykKIHsKIAljb25zdCB1OCAqdWNwOwotCWNvbnN0IHU4ICpzZW5zZSA9IFNScG50LT5zcl9zZW5zZV9idWZmZXI7CisJY29uc3QgdTggKnNlbnNlID0gU1JwbnQtPnNlbnNlOwogCi0Jcy0+aGF2ZV9zZW5zZSA9IHNjc2lfcmVxdWVzdF9ub3JtYWxpemVfc2Vuc2UoU1JwbnQsICZzLT5zZW5zZV9oZHIpOworCXMtPmhhdmVfc2Vuc2UgPSBzY3NpX25vcm1hbGl6ZV9zZW5zZShTUnBudC0+c2Vuc2UsCisJCQkJU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCAmcy0+c2Vuc2VfaGRyKTsKIAlzLT5mbGFncyA9IDA7CiAKIAlpZiAocy0+aGF2ZV9zZW5zZSkgewpAQCAtMzQ1LDkgKzM0Myw5IEBACiAKIAogLyogQ29udmVydCB0aGUgcmVzdWx0IHRvIHN1Y2Nlc3MgY29kZSAqLwotc3RhdGljIGludCBzdF9jaGtfcmVzdWx0KHN0cnVjdCBzY3NpX3RhcGUgKlNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqIFNScG50KQorc3RhdGljIGludCBzdF9jaGtfcmVzdWx0KHN0cnVjdCBzY3NpX3RhcGUgKlNUcCwgc3RydWN0IHN0X3JlcXVlc3QgKiBTUnBudCkKIHsKLQlpbnQgcmVzdWx0ID0gU1JwbnQtPnNyX3Jlc3VsdDsKKwlpbnQgcmVzdWx0ID0gU1JwbnQtPnJlc3VsdDsKIAl1OCBzY29kZTsKIAlERUIoY29uc3QgY2hhciAqc3RwOykKIAljaGFyICpuYW1lID0gdGFwZV9uYW1lKFNUcCk7CkBAIC0zNjYsMTMgKzM2NCwxMiBAQAogCiAgICAgICAgIERFQigKICAgICAgICAgaWYgKGRlYnVnZ2luZykgewotICAgICAgICAgICAgICAgIHByaW50ayhTVF9ERUJfTVNHICIlczogRXJyb3I6ICV4LCBjbWQ6ICV4ICV4ICV4ICV4ICV4ICV4IExlbjogJWRcbiIsCisgICAgICAgICAgICAgICAgcHJpbnRrKFNUX0RFQl9NU0cgIiVzOiBFcnJvcjogJXgsIGNtZDogJXggJXggJXggJXggJXggJXhcbiIsCiAJCSAgICAgICBuYW1lLCByZXN1bHQsCi0JCSAgICAgICBTUnBudC0+c3JfY21uZFswXSwgU1JwbnQtPnNyX2NtbmRbMV0sIFNScG50LT5zcl9jbW5kWzJdLAotCQkgICAgICAgU1JwbnQtPnNyX2NtbmRbM10sIFNScG50LT5zcl9jbW5kWzRdLCBTUnBudC0+c3JfY21uZFs1XSwKLQkJICAgICAgIFNScG50LT5zcl9idWZmbGVuKTsKKwkJICAgICAgIFNScG50LT5jbWRbMF0sIFNScG50LT5jbWRbMV0sIFNScG50LT5jbWRbMl0sCisJCSAgICAgICBTUnBudC0+Y21kWzNdLCBTUnBudC0+Y21kWzRdLCBTUnBudC0+Y21kWzVdKTsKIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKQotCQkJc2NzaV9wcmludF9yZXFfc2Vuc2UoInN0IiwgU1JwbnQpOworCQkJIF9fc2NzaV9wcmludF9zZW5zZSgic3QiLCBTUnBudC0+c2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJfSApIC8qIGVuZCBERUIgKi8KIAlpZiAoIWRlYnVnZ2luZykgeyAvKiBBYm5vcm1hbCBjb25kaXRpb25zIGZvciB0YXBlICovCiAJCWlmICghY21kc3RhdHAtPmhhdmVfc2Vuc2UpCkBAIC0zODYsMjAgKzM4MywyMSBAQAogCQkJIC8qIHNjb2RlICE9IFVOSVRfQVRURU5USU9OICYmICovCiAJCQkgc2NvZGUgIT0gQkxBTktfQ0hFQ0sgJiYKIAkJCSBzY29kZSAhPSBWT0xVTUVfT1ZFUkZMT1cgJiYKLQkJCSBTUnBudC0+c3JfY21uZFswXSAhPSBNT0RFX1NFTlNFICYmCi0JCQkgU1JwbnQtPnNyX2NtbmRbMF0gIT0gVEVTVF9VTklUX1JFQURZKSB7CisJCQkgU1JwbnQtPmNtZFswXSAhPSBNT0RFX1NFTlNFICYmCisJCQkgU1JwbnQtPmNtZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3Igd2l0aCBzZW5zZSBkYXRhOiAiLCBuYW1lKTsKLQkJCQlzY3NpX3ByaW50X3JlcV9zZW5zZSgic3QiLCBTUnBudCk7CisJCQkJX19zY3NpX3ByaW50X3NlbnNlKCJzdCIsIFNScG50LT5zZW5zZSwKKwkJCQkJCSAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJCX0KIAl9CiAKIAlpZiAoY21kc3RhdHAtPmZpeGVkX2Zvcm1hdCAmJgogCSAgICBTVHAtPmNsbl9tb2RlID49IEVYVEVOREVEX1NFTlNFX1NUQVJUKSB7ICAvKiBPbmx5IGZpeGVkIGZvcm1hdCBzZW5zZSAqLwogCQlpZiAoU1RwLT5jbG5fc2Vuc2VfdmFsdWUpCi0JCQlTVHAtPmNsZWFuaW5nX3JlcSB8PSAoKFNScG50LT5zcl9zZW5zZV9idWZmZXJbU1RwLT5jbG5fbW9kZV0gJgorCQkJU1RwLT5jbGVhbmluZ19yZXEgfD0gKChTUnBudC0+c2Vuc2VbU1RwLT5jbG5fbW9kZV0gJgogCQkJCQkgICAgICAgU1RwLT5jbG5fc2Vuc2VfbWFzaykgPT0gU1RwLT5jbG5fc2Vuc2VfdmFsdWUpOwogCQllbHNlCi0JCQlTVHAtPmNsZWFuaW5nX3JlcSB8PSAoKFNScG50LT5zcl9zZW5zZV9idWZmZXJbU1RwLT5jbG5fbW9kZV0gJgorCQkJU1RwLT5jbGVhbmluZ19yZXEgfD0gKChTUnBudC0+c2Vuc2VbU1RwLT5jbG5fbW9kZV0gJgogCQkJCQkgICAgICAgU1RwLT5jbG5fc2Vuc2VfbWFzaykgIT0gMCk7CiAJfQogCWlmIChjbWRzdGF0cC0+aGF2ZV9zZW5zZSAmJgpAQCAtNDExLDggKzQwOSw4IEBACiAJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlICYmCiAJICAgIHNjb2RlID09IFJFQ09WRVJFRF9FUlJPUgogI2lmIFNUX1JFQ09WRVJFRF9XUklURV9GQVRBTAotCSAgICAmJiBTUnBudC0+c3JfY21uZFswXSAhPSBXUklURV82Ci0JICAgICYmIFNScG50LT5zcl9jbW5kWzBdICE9IFdSSVRFX0ZJTEVNQVJLUworCSAgICAmJiBTUnBudC0+Y21kWzBdICE9IFdSSVRFXzYKKwkgICAgJiYgU1JwbnQtPmNtZFswXSAhPSBXUklURV9GSUxFTUFSS1MKICNlbmRpZgogCSAgICApIHsKIAkJU1RwLT5yZWNvdmVyX2NvdW50Kys7CkBAIC00MjAsOSArNDE4LDkgQEAKIAogICAgICAgICAgICAgICAgIERFQigKIAkJaWYgKGRlYnVnZ2luZykgewotCQkJaWYgKFNScG50LT5zcl9jbW5kWzBdID09IFJFQURfNikKKwkJCWlmIChTUnBudC0+Y21kWzBdID09IFJFQURfNikKIAkJCQlzdHAgPSAicmVhZCI7Ci0JCQllbHNlIGlmIChTUnBudC0+c3JfY21uZFswXSA9PSBXUklURV82KQorCQkJZWxzZSBpZiAoU1JwbnQtPmNtZFswXSA9PSBXUklURV82KQogCQkJCXN0cCA9ICJ3cml0ZSI7CiAJCQllbHNlCiAJCQkJc3RwID0gImlvY3RsIjsKQEAgLTQzOCwyOCArNDM2LDM3IEBACiAKIAogLyogV2FrZXVwIGZyb20gaW50ZXJydXB0ICovCi1zdGF0aWMgdm9pZCBzdF9zbGVlcF9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCkKK3N0YXRpYyB2b2lkIHN0X3NsZWVwX2RvbmUodm9pZCAqZGF0YSwgY2hhciAqc2Vuc2UsIGludCByZXN1bHQsIGludCByZXNpZCkKIHsKLQlzdHJ1Y3Qgc2NzaV90YXBlICpTVHAgPSBjb250YWluZXJfb2YoU0NwbnQtPnJlcXVlc3QtPnJxX2Rpc2stPnByaXZhdGVfZGF0YSwKLQkJCQkJICAgICBzdHJ1Y3Qgc2NzaV90YXBlLCBkcml2ZXIpOworCXN0cnVjdCBzdF9yZXF1ZXN0ICpTUnBudCA9IGRhdGE7CisJc3RydWN0IHNjc2lfdGFwZSAqU1RwID0gU1JwbnQtPnN0cDsKIAotCShTVHAtPmJ1ZmZlciktPmNtZHN0YXQubWlkbGV2ZWxfcmVzdWx0ID0gU0NwbnQtPnJlc3VsdDsKLQlTQ3BudC0+cmVxdWVzdC0+cnFfc3RhdHVzID0gUlFfU0NTSV9ET05FOworCW1lbWNweShTUnBudC0+c2Vuc2UsIHNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCShTVHAtPmJ1ZmZlciktPmNtZHN0YXQubWlkbGV2ZWxfcmVzdWx0ID0gU1JwbnQtPnJlc3VsdCA9IHJlc3VsdDsKIAlERUIoIFNUcC0+d3JpdGVfcGVuZGluZyA9IDA7ICkKIAotCWlmIChTQ3BudC0+cmVxdWVzdC0+d2FpdGluZykKLQkJY29tcGxldGUoU0NwbnQtPnJlcXVlc3QtPndhaXRpbmcpOworCWlmIChTUnBudC0+d2FpdGluZykKKwkJY29tcGxldGUoU1JwbnQtPndhaXRpbmcpOworfQorCitzdGF0aWMgc3RydWN0IHN0X3JlcXVlc3QgKnN0X2FsbG9jYXRlX3JlcXVlc3Qodm9pZCkKK3sKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0X3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIHZvaWQgc3RfcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCBzdF9yZXF1ZXN0ICpzdHJlcSkKK3sKKwlrZnJlZShzdHJlcSk7CiB9CiAKIC8qIERvIHRoZSBzY3NpIGNvbW1hbmQuIFdhaXRzIHVudGlsIGNvbW1hbmQgcGVyZm9ybWVkIGlmIGRvX3dhaXQgaXMgdHJ1ZS4KICAgIE90aGVyd2lzZSB3cml0ZV9iZWhpbmRfY2hlY2soKSBpcyB1c2VkIHRvIGNoZWNrIHRoYXQgdGhlIGNvbW1hbmQKICAgIGhhcyBmaW5pc2hlZC4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoKLXN0X2RvX3Njc2koc3RydWN0IHNjc2lfcmVxdWVzdCAqIFNScG50LCBzdHJ1Y3Qgc2NzaV90YXBlICogU1RwLCB1bnNpZ25lZCBjaGFyICpjbWQsCitzdGF0aWMgc3RydWN0IHN0X3JlcXVlc3QgKgorc3RfZG9fc2NzaShzdHJ1Y3Qgc3RfcmVxdWVzdCAqIFNScG50LCBzdHJ1Y3Qgc2NzaV90YXBlICogU1RwLCB1bnNpZ25lZCBjaGFyICpjbWQsCiAJICAgaW50IGJ5dGVzLCBpbnQgZGlyZWN0aW9uLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsIGludCBkb193YWl0KQogewogCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOwotCXVuc2lnbmVkIGNoYXIgKmJwOwogCiAJLyogaWYgYXN5bmMsIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGNvbW1hbmQgb3V0c3RhbmRpbmcgKi8KIAlpZiAoIWRvX3dhaXQgJiYgKChTVHAtPmJ1ZmZlciktPmxhc3RfU1JwbnQpKSB7CkBAIC00NzMsNyArNDgwLDcgQEAKIAl9CiAKIAlpZiAoU1JwbnQgPT0gTlVMTCkgewotCQlTUnBudCA9IHNjc2lfYWxsb2NhdGVfcmVxdWVzdChTVHAtPmRldmljZSwgR0ZQX0FUT01JQyk7CisJCVNScG50ID0gc3RfYWxsb2NhdGVfcmVxdWVzdCgpOwogCQlpZiAoU1JwbnQgPT0gTlVMTCkgewogCQkJREVCQyggcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgZ2V0IFNDU0kgcmVxdWVzdC5cbiIsCiAJCQkJICAgICB0YXBlX25hbWUoU1RwKSk7ICk7CkBAIC00ODMsNiArNDkwLDcgQEAKIAkJCQkoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdCA9ICgtRUJVU1kpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKwkJU1JwbnQtPnN0cCA9IFNUcDsKIAl9CiAKIAkvKiBJZiBhc3luYyBJTywgc2V0IGxhc3RfU1JwbnQuIFRoaXMgcHRyIHRlbGxzIHdyaXRlX2JlaGluZF9jaGVjawpAQCAtNDkyLDMyICs1MDAsMjggQEAKIAogCXdhaXRpbmcgPSAmU1RwLT53YWl0OwogCWluaXRfY29tcGxldGlvbih3YWl0aW5nKTsKLQlTUnBudC0+c3JfdXNlX3NnID0gU1RwLT5idWZmZXItPmRvX2RpbyB8fCAoYnl0ZXMgPiAoU1RwLT5idWZmZXIpLT5mcnBbMF0ubGVuZ3RoKTsKLQlpZiAoU1JwbnQtPnNyX3VzZV9zZykgewotCQlpZiAoIVNUcC0+YnVmZmVyLT5kb19kaW8pCi0JCQlidWZfdG9fc2coU1RwLT5idWZmZXIsIGJ5dGVzKTsKLQkJU1JwbnQtPnNyX3VzZV9zZyA9IChTVHAtPmJ1ZmZlciktPnNnX3NlZ3M7Ci0JCWJwID0gKGNoYXIgKikgJigoU1RwLT5idWZmZXIpLT5zZ1swXSk7Ci0JfSBlbHNlCi0JCWJwID0gKFNUcC0+YnVmZmVyKS0+Yl9kYXRhOwotCVNScG50LT5zcl9kYXRhX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKLQlTUnBudC0+c3JfY21kX2xlbiA9IDA7Ci0JU1JwbnQtPnNyX3JlcXVlc3QtPndhaXRpbmcgPSB3YWl0aW5nOwotCVNScG50LT5zcl9yZXF1ZXN0LT5ycV9zdGF0dXMgPSBSUV9TQ1NJX0JVU1k7Ci0JU1JwbnQtPnNyX3JlcXVlc3QtPnJxX2Rpc2sgPSBTVHAtPmRpc2s7Ci0JU1JwbnQtPnNyX3JlcXVlc3QtPmVuZF9pbyA9IGJsa19lbmRfc3luY19ycTsKKwlTUnBudC0+d2FpdGluZyA9IHdhaXRpbmc7CisKKwlpZiAoIVNUcC0+YnVmZmVyLT5kb19kaW8pCisJCWJ1Zl90b19zZyhTVHAtPmJ1ZmZlciwgYnl0ZXMpOworCisJbWVtY3B5KFNScG50LT5jbWQsIGNtZCwgc2l6ZW9mKFNScG50LT5jbWQpKTsKIAlTVHAtPmJ1ZmZlci0+Y21kc3RhdC5oYXZlX3NlbnNlID0gMDsKKwlTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQgPSAwOwogCi0Jc2NzaV9kb19yZXEoU1JwbnQsICh2b2lkICopIGNtZCwgYnAsIGJ5dGVzLAotCQkgICAgc3Rfc2xlZXBfZG9uZSwgdGltZW91dCwgcmV0cmllcyk7Ci0KLQlpZiAoZG9fd2FpdCkgeworCWlmIChzY3NpX2V4ZWN1dGVfYXN5bmMoU1RwLT5kZXZpY2UsIGNtZCwgZGlyZWN0aW9uLAorCQkJJigoU1RwLT5idWZmZXIpLT5zZ1swXSksIGJ5dGVzLCAoU1RwLT5idWZmZXIpLT5zZ19zZWdzLAorCQkJICAgICAgIHRpbWVvdXQsIHJldHJpZXMsIFNScG50LCBzdF9zbGVlcF9kb25lLCBHRlBfS0VSTkVMKSkgeworCQkvKiBjb3VsZCBub3QgYWxsb2NhdGUgdGhlIGJ1ZmZlciBvciByZXF1ZXN0IHdhcyB0b28gbGFyZ2UgKi8KKwkJKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgPSAoLUVCVVNZKTsKKwkJKFNUcC0+YnVmZmVyKS0+bGFzdF9TUnBudCA9IE5VTEw7CisJfQorCWVsc2UgaWYgKGRvX3dhaXQpIHsKIAkJd2FpdF9mb3JfY29tcGxldGlvbih3YWl0aW5nKTsKLQkJU1JwbnQtPnNyX3JlcXVlc3QtPndhaXRpbmcgPSBOVUxMOwotCQlpZiAoU1JwbnQtPnNyX3JlcXVlc3QtPnJxX3N0YXR1cyAhPSBSUV9TQ1NJX0RPTkUpCi0JCQlTUnBudC0+c3JfcmVzdWx0IHw9IChEUklWRVJfRVJST1IgPDwgMjQpOworCQlTUnBudC0+d2FpdGluZyA9IE5VTEw7CiAJCShTVHAtPmJ1ZmZlciktPnN5c2NhbGxfcmVzdWx0ID0gc3RfY2hrX3Jlc3VsdChTVHAsIFNScG50KTsKIAl9CisKIAlyZXR1cm4gU1JwbnQ7CiB9CiAKQEAgLTUzMiw3ICs1MzYsNyBAQAogCXN0cnVjdCBzdF9idWZmZXIgKlNUYnVmZmVyOwogCXN0cnVjdCBzdF9wYXJ0c3RhdCAqU1RwczsKIAlzdHJ1Y3Qgc3RfY21kc3RhdHVzICpjbWRzdGF0cDsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudDsKKwlzdHJ1Y3Qgc3RfcmVxdWVzdCAqU1JwbnQ7CiAKIAlTVGJ1ZmZlciA9IFNUcC0+YnVmZmVyOwogCWlmICghU1RidWZmZXItPndyaXRpbmcpCkBAIC01NDgsMTIgKzU1MiwxMCBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJihTVHAtPndhaXQpKTsKIAlTUnBudCA9IFNUYnVmZmVyLT5sYXN0X1NScG50OwogCVNUYnVmZmVyLT5sYXN0X1NScG50ID0gTlVMTDsKLQlTUnBudC0+c3JfcmVxdWVzdC0+d2FpdGluZyA9IE5VTEw7Ci0JaWYgKFNScG50LT5zcl9yZXF1ZXN0LT5ycV9zdGF0dXMgIT0gUlFfU0NTSV9ET05FKQotCQlTUnBudC0+c3JfcmVzdWx0IHw9IChEUklWRVJfRVJST1IgPDwgMjQpOworCVNScG50LT53YWl0aW5nID0gTlVMTDsKIAogCShTVHAtPmJ1ZmZlciktPnN5c2NhbGxfcmVzdWx0ID0gc3RfY2hrX3Jlc3VsdChTVHAsIFNScG50KTsKLQlzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJc3RfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKIAogCVNUYnVmZmVyLT5idWZmZXJfYnl0ZXMgLT0gU1RidWZmZXItPndyaXRpbmc7CiAJU1RwcyA9ICYoU1RwLT5wc1tTVHAtPnBhcnRpdGlvbl0pOwpAQCAtNTkzLDcgKzU5NSw3IEBACiAgICBpdCBtZXNzZXMgdXAgdGhlIGJsb2NrIG51bWJlcikuICovCiBzdGF0aWMgaW50IGNyb3NzX2VvZihzdHJ1Y3Qgc2NzaV90YXBlICogU1RwLCBpbnQgZm9yd2FyZCkKIHsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudDsKKwlzdHJ1Y3Qgc3RfcmVxdWVzdCAqU1JwbnQ7CiAJdW5zaWduZWQgY2hhciBjbWRbTUFYX0NPTU1BTkRfU0laRV07CiAKIAljbWRbMF0gPSBTUEFDRTsKQEAgLTYxMyw3ICs2MTUsNyBAQAogCWlmICghU1JwbnQpCiAJCXJldHVybiAoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdDsKIAotCXNjc2lfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKKwlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCVNScG50ID0gTlVMTDsKIAogCWlmICgoU1RwLT5idWZmZXIpLT5jbWRzdGF0Lm1pZGxldmVsX3Jlc3VsdCAhPSAwKQpAQCAtNjMwLDcgKzYzMiw3IEBACiAJaW50IG9mZnNldCwgdHJhbnNmZXIsIGJsa3M7CiAJaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBjaGFyIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudDsKKwlzdHJ1Y3Qgc3RfcmVxdWVzdCAqU1JwbnQ7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICpTVHBzOwogCiAJcmVzdWx0ID0gd3JpdGVfYmVoaW5kX2NoZWNrKFNUcCk7CkBAIC02ODgsNyArNjkwLDcgQEAKIAkJCVNUcC0+ZGlydHkgPSAwOwogCQkJKFNUcC0+YnVmZmVyKS0+YnVmZmVyX2J5dGVzID0gMDsKIAkJfQotCQlzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJCXN0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAJCVNScG50ID0gTlVMTDsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTc4NSw3ICs3ODcsNyBAQAogfQogCiAKLS8qIExvY2sgb3IgdW5sb2NrIHRoZSBkcml2ZSBkb29yLiBEb24ndCB1c2Ugd2hlbiBzY3NpX3JlcXVlc3QgYWxsb2NhdGVkLiAqLworLyogTG9jayBvciB1bmxvY2sgdGhlIGRyaXZlIGRvb3IuIERvbid0IHVzZSB3aGVuIHN0X3JlcXVlc3QgYWxsb2NhdGVkLiAqLwogc3RhdGljIGludCBkb19kb29yX2xvY2soc3RydWN0IHNjc2lfdGFwZSAqIFNUcCwgaW50IGRvX2xvY2spCiB7CiAJaW50IHJldHZhbCwgY21kOwpAQCAtODQ0LDcgKzg0Niw3IEBACiAJaW50IGF0dGVudGlvbnMsIHdhaXRzLCBtYXhfd2FpdCwgc2NvZGU7CiAJaW50IHJldHZhbCA9IENIS1JFU19SRUFEWSwgbmV3X3Nlc3Npb24gPSAwOwogCXVuc2lnbmVkIGNoYXIgY21kW01BWF9DT01NQU5EX1NJWkVdOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKlNScG50ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RfcmVxdWVzdCAqU1JwbnQgPSBOVUxMOwogCXN0cnVjdCBzdF9jbWRzdGF0dXMgKmNtZHN0YXRwID0gJlNUcC0+YnVmZmVyLT5jbWRzdGF0OwogCiAJbWF4X3dhaXQgPSBkb193YWl0ID8gU1RfQkxPQ0tfU0VDT05EUyA6IDA7CkBAIC05MDMsNyArOTA1LDcgQEAKIAl9CiAKIAlpZiAoU1JwbnQgIT0gTlVMTCkKLQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTkxOCw3ICs5MjAsNyBAQAogCWludCBpLCByZXR2YWwsIG5ld19zZXNzaW9uID0gMCwgZG9fd2FpdDsKIAl1bnNpZ25lZCBjaGFyIGNtZFtNQVhfQ09NTUFORF9TSVpFXSwgc2F2ZWRfY2xlYW5pbmc7CiAJdW5zaWduZWQgc2hvcnQgc3RfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKlNScG50ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RfcmVxdWVzdCAqU1JwbnQgPSBOVUxMOwogCXN0cnVjdCBzdF9tb2RlZGVmICpTVG07CiAJc3RydWN0IHN0X3BhcnRzdGF0ICpTVHBzOwogCWNoYXIgKm5hbWUgPSB0YXBlX25hbWUoU1RwKTsKQEAgLTk5Myw3ICs5OTUsNyBAQAogCQkJZ290byBlcnJfb3V0OwogCQl9CiAKLQkJaWYgKCFTUnBudC0+c3JfcmVzdWx0ICYmICFTVHAtPmJ1ZmZlci0+Y21kc3RhdC5oYXZlX3NlbnNlKSB7CisJCWlmICghU1JwbnQtPnJlc3VsdCAmJiAhU1RwLT5idWZmZXItPmNtZHN0YXQuaGF2ZV9zZW5zZSkgewogCQkJU1RwLT5tYXhfYmxvY2sgPSAoKFNUcC0+YnVmZmVyKS0+Yl9kYXRhWzFdIDw8IDE2KSB8CiAJCQkgICAgKChTVHAtPmJ1ZmZlciktPmJfZGF0YVsyXSA8PCA4KSB8IChTVHAtPmJ1ZmZlciktPmJfZGF0YVszXTsKIAkJCVNUcC0+bWluX2Jsb2NrID0gKChTVHAtPmJ1ZmZlciktPmJfZGF0YVs0XSA8PCA4KSB8CkBAIC0xMDQ1LDcgKzEwNDcsNyBAQAogCQl9CiAJCVNUcC0+ZHJ2X3dyaXRlX3Byb3QgPSAoKFNUcC0+YnVmZmVyKS0+Yl9kYXRhWzJdICYgMHg4MCkgIT0gMDsKIAl9Ci0Jc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCXN0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAJU1JwbnQgPSBOVUxMOwogICAgICAgICBTVHAtPmluaXRlZCA9IDE7CiAKQEAgLTExOTYsNyArMTE5OCw3IEBACiB7CiAJaW50IHJlc3VsdCA9IDAsIHJlc3VsdDI7CiAJdW5zaWduZWQgY2hhciBjbWRbTUFYX0NPTU1BTkRfU0laRV07Ci0Jc3RydWN0IHNjc2lfcmVxdWVzdCAqU1JwbnQ7CisJc3RydWN0IHN0X3JlcXVlc3QgKlNScG50OwogCXN0cnVjdCBzY3NpX3RhcGUgKlNUcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gJihTVHAtPm1vZGVzW1NUcC0+Y3VycmVudF9tb2RlXSk7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICpTVHBzID0gJihTVHAtPnBzW1NUcC0+cGFydGl0aW9uXSk7CkBAIC0xMjQ5LDcgKzEyNTEsNyBAQAogCQkgICAgICBjbWRzdGF0cC0+c2Vuc2VfaGRyLnNlbnNlX2tleSA9PSBSRUNPVkVSRURfRVJST1IpICYmCiAJCSAgICAgKCFjbWRzdGF0cC0+cmVtYWluZGVyX3ZhbGlkIHx8IGNtZHN0YXRwLT51cmVtYWluZGVyNjQgPT0gMCkpKSB7CiAJCQkvKiBXcml0ZSBzdWNjZXNzZnVsIGF0IEVPTSAqLwotCQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQkJc3RfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKIAkJCVNScG50ID0gTlVMTDsKIAkJCWlmIChTVHBzLT5kcnZfZmlsZSA+PSAwKQogCQkJCVNUcHMtPmRydl9maWxlKys7CkBAIC0xMjU5LDcgKzEyNjEsNyBAQAogCQkJU1Rwcy0+ZW9mID0gU1RfRk07CiAJCX0KIAkJZWxzZSB7IC8qIFdyaXRlIGVycm9yICovCi0JCQlzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJCQlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCQkJU1JwbnQgPSBOVUxMOwogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igb24gd3JpdGUgZmlsZW1hcmsuXG4iLCBuYW1lKTsKIAkJCWlmIChyZXN1bHQgPT0gMCkKQEAgLTE0MDAsMTEgKzE0MDIsMTEgQEAKIAkJaSA9IFNUcC0+dHJ5X2RpbyAmJiB0cnlfcmRpbzsKIAllbHNlCiAJCWkgPSBTVHAtPnRyeV9kaW8gJiYgdHJ5X3dkaW87CisKIAlpZiAoaSAmJiAoKHVuc2lnbmVkIGxvbmcpYnVmICYgcXVldWVfZG1hX2FsaWdubWVudCgKIAkJCQkJU1RwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWUpKSA9PSAwKSB7Ci0JCWkgPSBzdF9tYXBfdXNlcl9wYWdlcygmKFNUYnAtPnNnWzBdKSwgU1RicC0+dXNlX3NnLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKWJ1ZiwgY291bnQsIChpc19yZWFkID8gUkVBRCA6IFdSSVRFKSwKLQkJCQkgICAgICBTVHAtPm1heF9wZm4pOworCQlpID0gc2dsX21hcF91c2VyX3BhZ2VzKCYoU1RicC0+c2dbMF0pLCBTVGJwLT51c2Vfc2csCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCwgKGlzX3JlYWQgPyBSRUFEIDogV1JJVEUpKTsKIAkJaWYgKGkgPiAwKSB7CiAJCQlTVGJwLT5kb19kaW8gPSBpOwogCQkJU1RicC0+YnVmZmVyX2J5dGVzID0gMDsgICAvKiBjYW4gYmUgdXNlZCBhcyB0cmFuc2ZlciBjb3VudGVyICovCkBAIC0xNDQ5LDE0ICsxNDUxLDE1IEBACiAKIAogLyogQ2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBhZnRlciBlYWNoIHNldHVwX2J1ZmZlcigpICovCi1zdGF0aWMgdm9pZCByZWxlYXNlX2J1ZmZlcmluZyhzdHJ1Y3Qgc2NzaV90YXBlICpTVHApCitzdGF0aWMgdm9pZCByZWxlYXNlX2J1ZmZlcmluZyhzdHJ1Y3Qgc2NzaV90YXBlICpTVHAsIGludCBpc19yZWFkKQogewogCXN0cnVjdCBzdF9idWZmZXIgKlNUYnA7CiAKIAlTVGJwID0gU1RwLT5idWZmZXI7CiAJaWYgKFNUYnAtPmRvX2RpbykgewotCQlzZ2xfdW5tYXBfdXNlcl9wYWdlcygmKFNUYnAtPnNnWzBdKSwgU1RicC0+ZG9fZGlvLCAwKTsKKwkJc2dsX3VubWFwX3VzZXJfcGFnZXMoJihTVGJwLT5zZ1swXSksIFNUYnAtPmRvX2RpbywgaXNfcmVhZCk7CiAJCVNUYnAtPmRvX2RpbyA9IDA7CisJCVNUYnAtPnNnX3NlZ3MgPSAwOwogCX0KIH0KIApAQCAtMTQ3Miw3ICsxNDc1LDcgQEAKIAlpbnQgYXN5bmNfd3JpdGU7CiAJdW5zaWduZWQgY2hhciBjbWRbTUFYX0NPTU1BTkRfU0laRV07CiAJY29uc3QgY2hhciBfX3VzZXIgKmJfcG9pbnQ7Ci0Jc3RydWN0IHNjc2lfcmVxdWVzdCAqU1JwbnQgPSBOVUxMOworCXN0cnVjdCBzdF9yZXF1ZXN0ICpTUnBudCA9IE5VTEw7CiAJc3RydWN0IHNjc2lfdGFwZSAqU1RwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzdF9tb2RlZGVmICpTVG07CiAJc3RydWN0IHN0X3BhcnRzdGF0ICpTVHBzOwpAQCAtMTYyNCw3ICsxNjI3LDcgQEAKIAkJCXJldHZhbCA9IFNUYnAtPnN5c2NhbGxfcmVzdWx0OwogCQkJZ290byBvdXQ7CiAJCX0KLQkJaWYgKGFzeW5jX3dyaXRlKSB7CisJCWlmIChhc3luY193cml0ZSAmJiAhU1RicC0+c3lzY2FsbF9yZXN1bHQpIHsKIAkJCVNUYnAtPndyaXRpbmcgPSB0cmFuc2ZlcjsKIAkJCVNUcC0+ZGlydHkgPSAhKFNUYnAtPndyaXRpbmcgPT0KIAkJCQkgICAgICAgU1RicC0+YnVmZmVyX2J5dGVzKTsKQEAgLTE2OTgsNyArMTcwMSw3IEBACiAJCQl9IGVsc2UgewogCQkJCWNvdW50ICs9IGRvX2NvdW50OwogCQkJCVNUcHMtPmRydl9ibG9jayA9ICgtMSk7CQkvKiBUb28gY2F1dGlvdXM/ICovCi0JCQkJcmV0dmFsID0gKC1FSU8pOworCQkJCXJldHZhbCA9IFNUYnAtPnN5c2NhbGxfcmVzdWx0OwogCQkJfQogCiAJCX0KQEAgLTE3MjgsOCArMTczMSw4IEBACiAKICBvdXQ6CiAJaWYgKFNScG50ICE9IE5VTEwpCi0JCXNjc2lfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKLQlyZWxlYXNlX2J1ZmZlcmluZyhTVHApOworCQlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCXJlbGVhc2VfYnVmZmVyaW5nKFNUcCwgMCk7CiAJdXAoJlNUcC0+bG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTc0MiwxMSArMTc0NSwxMSBAQAogICAgRG9lcyByZWxlYXNlIHVzZXIgYnVmZmVyIG1hcHBpbmcgaWYgaXQgaXMgc2V0LgogKi8KIHN0YXRpYyBsb25nIHJlYWRfdGFwZShzdHJ1Y3Qgc2NzaV90YXBlICpTVHAsIGxvbmcgY291bnQsCi0JCSAgICAgIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50KQorCQkgICAgICBzdHJ1Y3Qgc3RfcmVxdWVzdCAqKiBhU1JwbnQpCiB7CiAJaW50IHRyYW5zZmVyLCBibGtzLCBieXRlczsKIAl1bnNpZ25lZCBjaGFyIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudDsKKwlzdHJ1Y3Qgc3RfcmVxdWVzdCAqU1JwbnQ7CiAJc3RydWN0IHN0X21vZGVkZWYgKlNUbTsKIAlzdHJ1Y3Qgc3RfcGFydHN0YXQgKlNUcHM7CiAJc3RydWN0IHN0X2J1ZmZlciAqU1RicDsKQEAgLTE3ODcsNyArMTc5MCw3IEBACiAJU1JwbnQgPSAqYVNScG50OwogCVNScG50ID0gc3RfZG9fc2NzaShTUnBudCwgU1RwLCBjbWQsIGJ5dGVzLCBETUFfRlJPTV9ERVZJQ0UsCiAJCQkgICBTVHAtPmRldmljZS0+dGltZW91dCwgTUFYX1JFVFJJRVMsIDEpOwotCXJlbGVhc2VfYnVmZmVyaW5nKFNUcCk7CisJcmVsZWFzZV9idWZmZXJpbmcoU1RwLCAxKTsKIAkqYVNScG50ID0gU1JwbnQ7CiAJaWYgKCFTUnBudCkKIAkJcmV0dXJuIFNUYnAtPnN5c2NhbGxfcmVzdWx0OwpAQCAtMTgwMiwxMCArMTgwNSwxMCBAQAogCQlyZXR2YWwgPSAxOwogCQlERUJDKHByaW50ayhTVF9ERUJfTVNHICIlczogU2Vuc2U6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzBdLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0sIFNScG50LT5zcl9zZW5zZV9idWZmZXJbM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlcls0XSwgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlcls1XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzZdLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzddKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JwbnQtPnNlbnNlWzBdLCBTUnBudC0+c2Vuc2VbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JwbnQtPnNlbnNlWzJdLCBTUnBudC0+c2Vuc2VbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JwbnQtPnNlbnNlWzRdLCBTUnBudC0+c2Vuc2VbNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JwbnQtPnNlbnNlWzZdLCBTUnBudC0+c2Vuc2VbN10pKTsKIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKSB7CiAKIAkJCWlmIChjbWRzdGF0cC0+c2Vuc2VfaGRyLnNlbnNlX2tleSA9PSBCTEFOS19DSEVDSykKQEAgLTE4MzUsNyArMTgzOCw3IEBACiAJCQkJCQl9CiAJCQkJCQlTVGJwLT5idWZmZXJfYnl0ZXMgPSBieXRlcyAtIHRyYW5zZmVyOwogCQkJCQl9IGVsc2UgewotCQkJCQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQkJCQkJc3RfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKIAkJCQkJCVNScG50ID0gKmFTUnBudCA9IE5VTEw7CiAJCQkJCQlpZiAodHJhbnNmZXIgPT0gYmxrcykgewkvKiBXZSBkaWQgbm90IGdldCBhbnl0aGluZywgZXJyb3IgKi8KIAkJCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbmNvcnJlY3QgYmxvY2sgc2l6ZS5cbiIsIG5hbWUpOwpAQCAtMTkyOSw3ICsxOTMyLDcgQEAKIAlzc2l6ZV90IHJldHZhbCA9IDA7CiAJc3NpemVfdCBpLCB0cmFuc2ZlcjsKIAlpbnQgc3BlY2lhbCwgZG9fZGlvID0gMDsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudCA9IE5VTEw7CisJc3RydWN0IHN0X3JlcXVlc3QgKlNScG50ID0gTlVMTDsKIAlzdHJ1Y3Qgc2NzaV90YXBlICpTVHAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHN0X21vZGVkZWYgKlNUbTsKIAlzdHJ1Y3Qgc3RfcGFydHN0YXQgKlNUcHM7CkBAIC0yMDU0LDExICsyMDU3LDExIEBACiAKICBvdXQ6CiAJaWYgKFNScG50ICE9IE5VTEwpIHsKLQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCQlTUnBudCA9IE5VTEw7CiAJfQogCWlmIChkb19kaW8pIHsKLQkJcmVsZWFzZV9idWZmZXJpbmcoU1RwKTsKKwkJcmVsZWFzZV9idWZmZXJpbmcoU1RwLCAxKTsKIAkJU1RicC0+YnVmZmVyX2J5dGVzID0gMDsKIAl9CiAJdXAoJlNUcC0+bG9jayk7CkBAIC0yMjg0LDcgKzIyODcsNyBAQAogc3RhdGljIGludCByZWFkX21vZGVfcGFnZShzdHJ1Y3Qgc2NzaV90YXBlICpTVHAsIGludCBwYWdlLCBpbnQgb21pdF9ibG9ja19kZXNjcykKIHsKIAl1bnNpZ25lZCBjaGFyIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudCA9IE5VTEw7CisJc3RydWN0IHN0X3JlcXVlc3QgKlNScG50ID0gTlVMTDsKIAogCW1lbXNldChjbWQsIDAsIE1BWF9DT01NQU5EX1NJWkUpOwogCWNtZFswXSA9IE1PREVfU0VOU0U7CkBAIC0yMjk4LDcgKzIzMDEsNyBAQAogCWlmIChTUnBudCA9PSBOVUxMKQogCQlyZXR1cm4gKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQ7CiAKLQlzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJc3RfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKIAogCXJldHVybiAoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdDsKIH0KQEAgLTIzMTAsNyArMjMxMyw3IEBACiB7CiAJaW50IHBnbzsKIAl1bnNpZ25lZCBjaGFyIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudCA9IE5VTEw7CisJc3RydWN0IHN0X3JlcXVlc3QgKlNScG50ID0gTlVMTDsKIAogCW1lbXNldChjbWQsIDAsIE1BWF9DT01NQU5EX1NJWkUpOwogCWNtZFswXSA9IE1PREVfU0VMRUNUOwpAQCAtMjMyOSw3ICsyMzMyLDcgQEAKIAlpZiAoU1JwbnQgPT0gTlVMTCkKIAkJcmV0dXJuIChTVHAtPmJ1ZmZlciktPnN5c2NhbGxfcmVzdWx0OwogCi0Jc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCXN0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAKIAlyZXR1cm4gKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQ7CiB9CkBAIC0yNDEyLDcgKzI0MTUsNyBAQAogCURFQiggY2hhciAqbmFtZSA9IHRhcGVfbmFtZShTVHApOyApCiAJdW5zaWduZWQgY2hhciBjbWRbTUFYX0NPTU1BTkRfU0laRV07CiAJc3RydWN0IHN0X3BhcnRzdGF0ICpTVHBzOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKlNScG50OworCXN0cnVjdCBzdF9yZXF1ZXN0ICpTUnBudDsKIAogCWlmIChTVHAtPnJlYWR5ICE9IFNUX1JFQURZICYmICFsb2FkX2NvZGUpIHsKIAkJaWYgKFNUcC0+cmVhZHkgPT0gU1RfTk9fVEFQRSkKQEAgLTI0NTUsNyArMjQ1OCw3IEBACiAJCXJldHVybiAoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdDsKIAogCXJldHZhbCA9IChTVHAtPmJ1ZmZlciktPnN5c2NhbGxfcmVzdWx0OwotCXNjc2lfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKKwlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCiAJaWYgKCFyZXR2YWwpIHsJLyogU0NTSSBjb21tYW5kIHN1Y2Nlc3NmdWwgKi8KIApAQCAtMjUwMyw3ICsyNTA2LDcgQEAKIAlpbnQgaW9jdGxfcmVzdWx0OwogCWludCBjaGdfZW9mID0gMTsKIAl1bnNpZ25lZCBjaGFyIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudDsKKwlzdHJ1Y3Qgc3RfcmVxdWVzdCAqU1JwbnQ7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICpTVHBzOwogCWludCBmaWxlbm8sIGJsa25vLCBhdF9zbSwgdW5kb25lOwogCWludCBkYXRhbGVuID0gMCwgZGlyZWN0aW9uID0gRE1BX05PTkU7CkBAIC0yNzU3LDcgKzI3NjAsNyBAQAogCWlvY3RsX3Jlc3VsdCA9IChTVHAtPmJ1ZmZlciktPnN5c2NhbGxfcmVzdWx0OwogCiAJaWYgKCFpb2N0bF9yZXN1bHQpIHsJLyogU0NTSSBjb21tYW5kIHN1Y2Nlc3NmdWwgKi8KLQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCQlTUnBudCA9IE5VTEw7CiAJCVNUcHMtPmRydl9ibG9jayA9IGJsa25vOwogCQlTVHBzLT5kcnZfZmlsZSA9IGZpbGVubzsKQEAgLTI4NzIsNyArMjg3NSw3IEBACiAJCQkJLyogVHJ5IHRoZSBvdGhlciBwb3NzaWJsZSBzdGF0ZSBvZiBQYWdlIEZvcm1hdCBpZiBub3QKIAkJCQkgICBhbHJlYWR5IHRyaWVkICovCiAJCQkJU1RwLT51c2VfcGYgPSAhU1RwLT51c2VfcGYgfCBQRl9URVNURUQ7Ci0JCQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQkJCXN0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAJCQkJU1JwbnQgPSBOVUxMOwogCQkJCXJldHVybiBzdF9pbnRfaW9jdGwoU1RwLCBjbWRfaW4sIGFyZyk7CiAJCQl9CkBAIC0yODgyLDcgKzI4ODUsNyBAQAogCQlpZiAoY21kc3RhdHAtPnNlbnNlX2hkci5zZW5zZV9rZXkgPT0gQkxBTktfQ0hFQ0spCiAJCQlTVHBzLT5lb2YgPSBTVF9FT0Q7CiAKLQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQlzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCQlTUnBudCA9IE5VTEw7CiAJfQogCkBAIC0yODk4LDcgKzI5MDEsNyBAQAogewogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgY2hhciBzY21kW01BWF9DT01NQU5EX1NJWkVdOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKlNScG50OworCXN0cnVjdCBzdF9yZXF1ZXN0ICpTUnBudDsKIAlERUIoIGNoYXIgKm5hbWUgPSB0YXBlX25hbWUoU1RwKTsgKQogCiAJaWYgKFNUcC0+cmVhZHkgIT0gU1RfUkVBRFkpCkBAIC0yOTQ0LDcgKzI5NDcsNyBAQAogICAgICAgICAgICAgICAgIERFQkMocHJpbnRrKFNUX0RFQl9NU0cgIiVzOiBHb3QgdGFwZSBwb3MuIGJsayAlZCBwYXJ0ICVkLlxuIiwgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmxvY2ssICpwYXJ0aXRpb24pKTsKIAl9Ci0Jc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCXN0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAJU1JwbnQgPSBOVUxMOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI5NjEsNyArMjk2NCw3IEBACiAJdW5zaWduZWQgaW50IGJsazsKIAlpbnQgdGltZW91dDsKIAl1bnNpZ25lZCBjaGFyIHNjbWRbTUFYX0NPTU1BTkRfU0laRV07Ci0Jc3RydWN0IHNjc2lfcmVxdWVzdCAqU1JwbnQ7CisJc3RydWN0IHN0X3JlcXVlc3QgKlNScG50OwogCURFQiggY2hhciAqbmFtZSA9IHRhcGVfbmFtZShTVHApOyApCiAKIAlpZiAoU1RwLT5yZWFkeSAhPSBTVF9SRUFEWSkKQEAgLTMwNDcsNyArMzA1MCw3IEBACiAJCXJlc3VsdCA9IDA7CiAJfQogCi0Jc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCXN0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAJU1JwbnQgPSBOVUxMOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTM1NzcsNyArMzU4MCw3IEBACiBzdGF0aWMgc3RydWN0IHN0X2J1ZmZlciAqCiAgbmV3X3RhcGVfYnVmZmVyKGludCBmcm9tX2luaXRpYWxpemF0aW9uLCBpbnQgbmVlZF9kbWEsIGludCBtYXhfc2cpCiB7Ci0JaW50IGksIGdvdCA9IDAsIHNlZ3MgPSAwOworCWludCBpLCBnb3QgPSAwOwogCWdmcF90IHByaW9yaXR5OwogCXN0cnVjdCBzdF9idWZmZXIgKnRiOwogCkBAIC0zNTk0LDEwICszNTk3LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW1lbXNldCh0YiwgMCwgaSk7Ci0JdGItPmZycF9zZWdzID0gdGItPm9yaWdfZnJwX3NlZ3MgPSBzZWdzOworCXRiLT5mcnBfc2VncyA9IHRiLT5vcmlnX2ZycF9zZWdzID0gMDsKIAl0Yi0+dXNlX3NnID0gbWF4X3NnOwotCWlmIChzZWdzID4gMCkKLQkJdGItPmJfZGF0YSA9IHBhZ2VfYWRkcmVzcyh0Yi0+c2dbMF0ucGFnZSk7CiAJdGItPmZycCA9IChzdHJ1Y3Qgc3RfYnVmX2ZyYWdtZW50ICopKCYodGItPnNnWzBdKSArIG1heF9zZyk7CiAKIAl0Yi0+aW5fdXNlID0gMTsKQEAgLTM2MjgsNyArMzYyOSw3IEBACiAJcHJpb3JpdHkgPSBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOOwogCWlmIChuZWVkX2RtYSkKIAkJcHJpb3JpdHkgfD0gR0ZQX0RNQTsKLQlmb3IgKGJfc2l6ZSA9IFBBR0VfU0laRSwgb3JkZXI9MDsKKwlmb3IgKGJfc2l6ZSA9IFBBR0VfU0laRSwgb3JkZXI9MDsgb3JkZXIgPD0gNiAmJgogCSAgICAgYl9zaXplIDwgbmV3X3NpemUgLSBTVGJ1ZmZlci0+YnVmZmVyX3NpemU7CiAJICAgICBvcmRlcisrLCBiX3NpemUgKj0gMikKIAkJOyAgLyogZW1wdHkgKi8KQEAgLTM2NzAsNiArMzY3MSw3IEBACiAJfQogCVNUYnVmZmVyLT5mcnBfc2VncyA9IFNUYnVmZmVyLT5vcmlnX2ZycF9zZWdzOwogCVNUYnVmZmVyLT5mcnBfc2dfY3VycmVudCA9IDA7CisJU1RidWZmZXItPnNnX3NlZ3MgPSAwOwogfQogCiAKQEAgLTM4ODIsNyArMzg4NCw2IEBACiAJc3RydWN0IHN0X2J1ZmZlciAqYnVmZmVyOwogCWludCBpLCBqLCBtb2RlLCBkZXZfbnVtLCBlcnJvcjsKIAljaGFyICpzdHA7Ci0JdTY0IGJvdW5jZV9saW1pdDsKIAogCWlmIChTRHAtPnR5cGUgIT0gVFlQRV9UQVBFKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM4OTIsNyArMzg5Myw4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWkgPSBTRHAtPmhvc3QtPnNnX3RhYmxlc2l6ZTsKKwlpID0gbWluKFNEcC0+cmVxdWVzdF9xdWV1ZS0+bWF4X2h3X3NlZ21lbnRzLAorCQlTRHAtPnJlcXVlc3RfcXVldWUtPm1heF9waHlzX3NlZ21lbnRzKTsKIAlpZiAoc3RfbWF4X3NnX3NlZ3MgPCBpKQogCQlpID0gc3RfbWF4X3NnX3NlZ3M7CiAJYnVmZmVyID0gbmV3X3RhcGVfYnVmZmVyKDEsIChTRHAtPmhvc3QpLT51bmNoZWNrZWRfaXNhX2RtYSwgaSk7CkBAIC0zOTk0LDExICszOTk2LDYgQEAKIAl0cG50LT5sb25nX3RpbWVvdXQgPSBTVF9MT05HX1RJTUVPVVQ7CiAJdHBudC0+dHJ5X2RpbyA9IHRyeV9kaXJlY3RfaW8gJiYgIVNEcC0+aG9zdC0+dW5jaGVja2VkX2lzYV9kbWE7CiAKLQlib3VuY2VfbGltaXQgPSBzY3NpX2NhbGN1bGF0ZV9ib3VuY2VfbGltaXQoU0RwLT5ob3N0KSA+PiBQQUdFX1NISUZUOwotCWlmIChib3VuY2VfbGltaXQgPiBVTE9OR19NQVgpCi0JCWJvdW5jZV9saW1pdCA9IFVMT05HX01BWDsKLQl0cG50LT5tYXhfcGZuID0gYm91bmNlX2xpbWl0OwotCiAJZm9yIChpID0gMDsgaSA8IFNUX05CUl9NT0RFUzsgaSsrKSB7CiAJCVNUbSA9ICYodHBudC0+bW9kZXNbaV0pOwogCQlTVG0tPmRlZmluZWQgPSAwOwpAQCAtNDA3Nyw5ICs0MDc0LDkgQEAKIAogCXNkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgU0RwLAogCQkgICAgIkF0dGFjaGVkIHNjc2kgdGFwZSAlcyIsIHRhcGVfbmFtZSh0cG50KSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyeSBkaXJlY3QgaS9vOiAlcyAoYWxpZ25tZW50ICVkIEIpLCBtYXggcGFnZSByZWFjaGFibGUgYnkgSEJBICVsdVxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJ5IGRpcmVjdCBpL286ICVzIChhbGlnbm1lbnQgJWQgQilcbiIsCiAJICAgICAgIHRhcGVfbmFtZSh0cG50KSwgdHBudC0+dHJ5X2RpbyA/ICJ5ZXMiIDogIm5vIiwKLQkgICAgICAgcXVldWVfZG1hX2FsaWdubWVudChTRHAtPnJlcXVlc3RfcXVldWUpICsgMSwgdHBudC0+bWF4X3Bmbik7CisJICAgICAgIHF1ZXVlX2RtYV9hbGlnbm1lbnQoU0RwLT5yZXF1ZXN0X3F1ZXVlKSArIDEpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTQxODUsNyArNDE4MiwxMSBAQAogCiBzdGF0aWMgdm9pZCBzdF9pbnRyKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewotCXNjc2lfaW9fY29tcGxldGlvbihTQ3BudCwgKFNDcG50LT5yZXN1bHQgPyAwOiBTQ3BudC0+YnVmZmxlbiksIDEpOworCS8qCisJICogVGhlIGNhbGxlciBzaG91bGQgYmUgY2hlY2tpbmcgdGhlIHJlcXVlc3QncyBlcnJvcnMKKwkgKiB2YWx1ZS4KKwkgKi8KKwlzY3NpX2lvX2NvbXBsZXRpb24oU0NwbnQsIFNDcG50LT5idWZmbGVuLCAwKTsKIH0KIAogLyoKQEAgLTQxOTcsNyArNDE5OCw3IEBACiAJaWYgKCEoU0NwbnQtPnJlcXVlc3QtPmZsYWdzICYgUkVRX0JMT0NLX1BDKSkKIAkJcmV0dXJuIDA7CiAKLQlzY3NpX3NldHVwX2Jsa19wY19jbW5kKFNDcG50LCAwKTsKKwlzY3NpX3NldHVwX2Jsa19wY19jbW5kKFNDcG50KTsKIAlTQ3BudC0+ZG9uZSA9IHN0X2ludHI7CiAJcmV0dXJuIDE7CiB9CkBAIC00MzkwLDM0ICs0MzkxLDYgQEAKIAlyZXR1cm47CiB9CiAKLQotLyogUGluIGRvd24gdXNlciBwYWdlcyBhbmQgcHV0IHRoZW0gaW50byBhIHNjYXR0ZXIgZ2F0aGVyIGxpc3QuIFJldHVybnMgPD0gMCBpZgotICAgLSBtYXBwaW5nIG9mIGFsbCBwYWdlcyBub3Qgc3VjY2Vzc2Z1bAotICAgLSBhbnkgcGFnZSBpcyBhYm92ZSBtYXhfcGZuCi0gICAoaS5lLiwgZWl0aGVyIGNvbXBsZXRlbHkgc3VjY2Vzc2Z1bCBvciBmYWlscykKLSovCi1zdGF0aWMgaW50IHN0X21hcF91c2VyX3BhZ2VzKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2VzLCAKLQkJCSAgICAgdW5zaWduZWQgbG9uZyB1YWRkciwgc2l6ZV90IGNvdW50LCBpbnQgcncsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKLXsKLQlpbnQgaSwgbnJfcGFnZXM7Ci0KLQlucl9wYWdlcyA9IHNnbF9tYXBfdXNlcl9wYWdlcyhzZ2wsIG1heF9wYWdlcywgdWFkZHIsIGNvdW50LCBydyk7Ci0JaWYgKG5yX3BhZ2VzIDw9IDApCi0JCXJldHVybiBucl9wYWdlczsKLQotCWZvciAoaT0wOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQlpZiAocGFnZV90b19wZm4oc2dsW2ldLnBhZ2UpID4gbWF4X3BmbikKLQkJCWdvdG8gb3V0X3VubWFwOwotCX0KLQlyZXR1cm4gbnJfcGFnZXM7Ci0KLSBvdXRfdW5tYXA6Ci0Jc2dsX3VubWFwX3VzZXJfcGFnZXMoc2dsLCBucl9wYWdlcywgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbWF5IGJlIHVzZWZ1bCBmb3IgYSBsYXJnZXIgYXVkaWVuY2UuICovCiBzdGF0aWMgaW50IHNnbF9tYXBfdXNlcl9wYWdlcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgY29uc3QgdW5zaWduZWQgaW50IG1heF9wYWdlcywgCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIHVhZGRyLCBzaXplX3QgY291bnQsIGludCBydykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5oIGIvZHJpdmVycy9zY3NpL3N0LmgKaW5kZXggNzkwYWNhYy4uNDExMjA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmgKKysrIGIvZHJpdmVycy9zY3NpL3N0LmgKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAKIC8qIERlc2NyaXB0b3IgZm9yIGFuYWx5emVkIHNlbnNlIGRhdGEgKi8KIHN0cnVjdCBzdF9jbWRzdGF0dXMgewpAQCAtMTcsNiArMTgsMTcgQEAKIAl1OCBkZWZlcnJlZDsKIH07CiAKK3N0cnVjdCBzY3NpX3RhcGU7CisKKy8qIHNjc2kgdGFwZSBjb21tYW5kICovCitzdHJ1Y3Qgc3RfcmVxdWVzdCB7CisJdW5zaWduZWQgY2hhciBjbWRbTUFYX0NPTU1BTkRfU0laRV07CisJdW5zaWduZWQgY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOworCWludCByZXN1bHQ7CisJc3RydWN0IHNjc2lfdGFwZSAqc3RwOworCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOworfTsKKwogLyogVGhlIHRhcGUgYnVmZmVyIGRlc2NyaXB0b3IuICovCiBzdHJ1Y3Qgc3RfYnVmZmVyIHsKIAl1bnNpZ25lZCBjaGFyIGluX3VzZTsKQEAgLTI4LDcgKzQwLDcgQEAKIAlpbnQgcmVhZF9wb2ludGVyOwogCWludCB3cml0aW5nOwogCWludCBzeXNjYWxsX3Jlc3VsdDsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpsYXN0X1NScG50OworCXN0cnVjdCBzdF9yZXF1ZXN0ICpsYXN0X1NScG50OwogCXN0cnVjdCBzdF9jbWRzdGF0dXMgY21kc3RhdDsKIAl1bnNpZ25lZCBjaGFyICpiX2RhdGE7CiAJdW5zaWduZWQgc2hvcnQgdXNlX3NnOwkvKiB6ZXJvIG9yIG1heCBudW1iZXIgb2Ygcy9nIHNlZ21lbnRzIGZvciB0aGlzIGFkYXB0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYwppbmRleCBjMDQxYmZkLi4yNWNjZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCkBAIC03MCw2ICs3MCw3IEBACiAgKgogICovCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc3BpLmg+CiAKIC8qCiAgKiBGdXJ0aGVyIGRldmVsb3BtZW50IC8gdGVzdGluZyB0aGF0IHNob3VsZCBiZSBkb25lIDogCkBAIC0yMzc4LDcgKzIzNzksNyBAQAogICogMy4ubGVuZ3RoKzEJYXJndW1lbnRzCiAgKgogICogU3RhcnQgdGhlIGV4dGVuZGVkIG1lc3NhZ2UgYnVmZmVyIHdpdGggdGhlIEVYVEVOREVEX01FU1NBR0UKLSAqIGJ5dGUsIHNpbmNlIHNjc2lfcHJpbnRfbXNnKCkgd2FudHMgdGhlIHdob2xlIHRoaW5nLiAgCisgKiBieXRlLCBzaW5jZSBzcGlfcHJpbnRfbXNnKCkgd2FudHMgdGhlIHdob2xlIHRoaW5nLiAgCiAgKi8KIAkJICAgIGV4dGVuZGVkX21zZ1swXSA9IEVYVEVOREVEX01FU1NBR0U7CiAJCSAgICAvKiBBY2NlcHQgZmlyc3QgYnl0ZSBieSBjbGVhcmluZyBBQ0sgKi8KQEAgLTI0MzEsNyArMjQzMiw3IEBACiAJCWRlZmF1bHQ6CiAJCSAgICBpZiAoIXRtcCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIG1lc3NhZ2UgIiwgSE9TVE5PKTsKLQkJCXNjc2lfcHJpbnRfbXNnIChleHRlbmRlZF9tc2cpOworCQkJc3BpX3ByaW50X21zZyhleHRlbmRlZF9tc2cpOwogCQkJcHJpbnRrKCJcbiIpOwogCQkgICAgfSBlbHNlIGlmICh0bXAgIT0gRVhURU5ERURfTUVTU0FHRSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyB1bmtub3duICIKQEAgLTI1NjYsNyArMjU2Nyw3IEBACiAKICAgICBpZiAoIShtc2dbMF0gJiAweDgwKSkgewogCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IGV4cGVjdGluZyBJREVOVElGWSBtZXNzYWdlLCBnb3QgIiwgSE9TVE5PKTsKLQlzY3NpX3ByaW50X21zZyhtc2cpOworCXNwaV9wcmludF9tc2cobXNnKTsKIAlkb19hYm9ydChpbnN0YW5jZSk7CiAJcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZGVmcy5oIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9kZWZzLmgKaW5kZXggMmQ5NDM3ZC4uMzY1OWRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9kZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9kZWZzLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpZm5kZWYgU1lNX0RFRlNfSAogI2RlZmluZSBTWU1fREVGU19ICiAKLSNkZWZpbmUgU1lNX1ZFUlNJT04gIjIuMi4xIgorI2RlZmluZSBTWU1fVkVSU0lPTiAiMi4yLjIiCiAjZGVmaW5lIFNZTV9EUklWRVJfTkFNRQkic3ltLSIgU1lNX1ZFUlNJT04KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncuYwppbmRleCBmZDM2Y2Y5Li45OTE2YTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3LmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdy5jCkBAIC0zNywxMSArMzcsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPGRldi9zeW0vc3ltX2dsdWUuaD4KLSNlbHNlCiAjaW5jbHVkZSAic3ltX2dsdWUuaCIKLSNlbmRpZgogCiAvKgogICogIE1hY3JvcyB1c2VkIGZvciBhbGwgZmlybXdhcmVzLgpAQCAtNjAsMTkgKzU2LDEyIEBACiAjZGVmaW5lCVNZTV9GV0FfU0NSCQlzeW1fZncxYV9zY3IKICNkZWZpbmUJU1lNX0ZXQl9TQ1IJCXN5bV9mdzFiX3NjcgogI2RlZmluZQlTWU1fRldaX1NDUgkJc3ltX2Z3MXpfc2NyCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxkZXYvc3ltL3N5bV9mdzEuaD4KLSNlbHNlCiAjaW5jbHVkZSAic3ltX2Z3MS5oIgotI2VuZGlmCiBzdGF0aWMgc3RydWN0IHN5bV9md2Ffb2ZzIHN5bV9mdzFhX29mcyA9IHsKIAlTWU1fR0VOX0ZXX0Eoc3RydWN0IFNZTV9GV0FfU0NSKQogfTsKIHN0YXRpYyBzdHJ1Y3Qgc3ltX2Z3Yl9vZnMgc3ltX2Z3MWJfb2ZzID0gewogCVNZTV9HRU5fRldfQihzdHJ1Y3QgU1lNX0ZXQl9TQ1IpCi0jaWZkZWYgU1lNX09QVF9IQU5ETEVfRElSX1VOS05PV04KLQlTWU1fR0VOX0Ioc3RydWN0IFNZTV9GV0JfU0NSLCBkYXRhX2lvKQotI2VuZGlmCiB9Owogc3RhdGljIHN0cnVjdCBzeW1fZnd6X29mcyBzeW1fZncxel9vZnMgPSB7CiAJU1lNX0dFTl9GV19aKHN0cnVjdCBTWU1fRldaX1NDUikKQEAgLTg4LDE5ICs3NywxMiBAQAogI2RlZmluZQlTWU1fRldBX1NDUgkJc3ltX2Z3MmFfc2NyCiAjZGVmaW5lCVNZTV9GV0JfU0NSCQlzeW1fZncyYl9zY3IKICNkZWZpbmUJU1lNX0ZXWl9TQ1IJCXN5bV9mdzJ6X3NjcgotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8ZGV2L3N5bS9zeW1fZncyLmg+Ci0jZWxzZQogI2luY2x1ZGUgInN5bV9mdzIuaCIKLSNlbmRpZgogc3RhdGljIHN0cnVjdCBzeW1fZndhX29mcyBzeW1fZncyYV9vZnMgPSB7CiAJU1lNX0dFTl9GV19BKHN0cnVjdCBTWU1fRldBX1NDUikKIH07CiBzdGF0aWMgc3RydWN0IHN5bV9md2Jfb2ZzIHN5bV9mdzJiX29mcyA9IHsKIAlTWU1fR0VOX0ZXX0Ioc3RydWN0IFNZTV9GV0JfU0NSKQotI2lmZGVmIFNZTV9PUFRfSEFORExFX0RJUl9VTktOT1dOCi0JU1lNX0dFTl9CKHN0cnVjdCBTWU1fRldCX1NDUiwgZGF0YV9pbykKLSNlbmRpZgogCVNZTV9HRU5fQihzdHJ1Y3QgU1lNX0ZXQl9TQ1IsIHN0YXJ0NjQpCiAJU1lNX0dFTl9CKHN0cnVjdCBTWU1fRldCX1NDUiwgcG1faGFuZGxlKQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncuaAppbmRleCA0M2Y2ODEwLi42NmVjMzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdy5oCkBAIC05Miw5ICs5Miw2IEBACiB9Owogc3RydWN0IHN5bV9md2Jfb2ZzIHsKIAlTWU1fR0VOX0ZXX0IodV9zaG9ydCkKLSNpZmRlZiBTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTgotCVNZTV9HRU5fQih1X3Nob3J0LCBkYXRhX2lvKQotI2VuZGlmCiAJU1lNX0dFTl9CKHVfc2hvcnQsIHN0YXJ0NjQpCiAJU1lNX0dFTl9CKHVfc2hvcnQsIHBtX2hhbmRsZSkKIH07CkBAIC0xMTEsOSArMTA4LDYgQEAKIH07CiBzdHJ1Y3Qgc3ltX2Z3Yl9iYSB7CiAJU1lNX0dFTl9GV19CKHUzMikKLSNpZmRlZiBTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTgotCVNZTV9HRU5fQih1MzIsIGRhdGFfaW8pCi0jZW5kaWYKIAlTWU1fR0VOX0IodTMyLCBzdGFydDY0KTsKIAlTWU1fR0VOX0IodTMyLCBwbV9oYW5kbGUpOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncxLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3MS5oCmluZGV4IGNkZDkyZDguLjdiMzlmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncxLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzEuaApAQCAtMTk3LDEyICsxOTcsNiBAQAogCXUzMiBiYWRfc3RhdHVzCQlbICA3XTsKIAl1MzIgd3NyX21hX2hlbHBlcglbICA0XTsKIAotI2lmZGVmIFNZTV9PUFRfSEFORExFX0RJUl9VTktOT1dOCi0JLyogVW5rbm93biBkaXJlY3Rpb24gaGFuZGxpbmcgKi8KLQl1MzIgZGF0YV9pbwkJWyAgMl07Ci0JdTMyIGRhdGFfaW9fY29tCQlbICA4XTsKLQl1MzIgZGF0YV9pb19vdXQJCVsgIDddOwotI2VuZGlmCiAJLyogRGF0YSBhcmVhICovCiAJdTMyIHplcm8JCVsgIDFdOwogCXUzMiBzY3JhdGNoCQlbICAxXTsKQEAgLTE3NDcsNDggKzE3NDEsNiBAQAogCVNDUl9KVU1QLAogCQlQQUREUl9BIChkaXNwYXRjaCksCiAKLSNpZmRlZiBTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTgotfS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwgREFUQV9JTyA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyx7Ci0JLyoKLQkgKiAgV2UganVtcCBoZXJlIGlmIHRoZSBkYXRhIGRpcmVjdGlvbiB3YXMgdW5rbm93biBhdCB0aGUgCi0JICogIHRpbWUgd2UgaGFkIHRvIHF1ZXVlIHRoZSBjb21tYW5kIHRvIHRoZSBzY3JpcHRzIHByb2Nlc3Nvci4KLQkgKiAgUG9pbnRlcnMgaGFkIGJlZW4gc2V0IGFzIGZvbGxvdyBpbiB0aGlzIHNpdHVhdGlvbjoKLQkgKiAgICBzYXZlcCAgIC0tPiAgIERBVEFfSU8KLQkgKiAgICBsYXN0cCAgIC0tPiAgIHN0YXJ0IHBvaW50ZXIgd2hlbiBEQVRBX0lOCi0JICogICAgd2xhc3RwICAtLT4gICBzdGFydCBwb2ludGVyIHdoZW4gREFUQV9PVVQKLQkgKiAgVGhpcyBzY3JpcHQgc2V0cyBzYXZlcCBhbmQgbGFzdHAgYWNjb3JkaW5nIHRvIHRoZSAKLQkgKiAgZGlyZWN0aW9uIGNob3NlbiBieSB0aGUgdGFyZ2V0LgotCSAqLwotCVNDUl9KVU1QIF4gSUZUUlVFIChXSEVOIChTQ1JfREFUQV9PVVQpKSwKLQkJUEFERFJfQiAoZGF0YV9pb19vdXQpLAotfS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwgREFUQV9JT19DT00gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyx7Ci0JLyoKLQkgKiAgRGlyZWN0aW9uIGlzIERBVEEgSU4uCi0JICovCi0JU0NSX0NPUFkgICg0KSwKLQkJSEFERFJfMSAoY2NiX2hlYWQubGFzdHApLAotCQlIQUREUl8xIChjY2JfaGVhZC5zYXZlcCksCi0JLyoKLQkgKiAgSnVtcCB0byB0aGUgU0NSSVBUUyBhY2NvcmRpbmcgdG8gYWN0dWFsIGRpcmVjdGlvbi4KLQkgKi8KLQlTQ1JfQ09QWSAgKDQpLAotCQlIQUREUl8xIChjY2JfaGVhZC5zYXZlcCksCi0JCVJBRERSXzEgKHRlbXApLAotCVNDUl9SRVRVUk4sCi0JCTAsCi19LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPCBEQVRBX0lPX09VVCA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLHsKLQkvKgotCSAqICBEaXJlY3Rpb24gaXMgREFUQSBPVVQuCi0JICovCi0JU0NSX1JFR19SRUcgKEhGX1JFRywgU0NSX0FORCwgKH5IRl9EQVRBX0lOKSksCi0JCTAsCi0JU0NSX0NPUFkgICg0KSwKLQkJSEFERFJfMSAoY2NiX2hlYWQud2xhc3RwKSwKLQkJSEFERFJfMSAoY2NiX2hlYWQubGFzdHApLAotCVNDUl9KVU1QLAotCQlQQUREUl9CKGRhdGFfaW9fY29tKSwKLSNlbmRpZiAvKiBTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTiAqLwotCiB9LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPCBaRVJPID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLHsKIAlTQ1JfREFUQV9aRVJPLAogfS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwgU0NSQVRDSCA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyx7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3Mi5oIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzIuaAppbmRleCA3ZWE3MTUxLi44NTFmMjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3Mi5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncyLmgKQEAgLTE5MSwxMyArMTkxLDYgQEAKIAl1MzIgcG1fd3NyX2hhbmRsZQlbIDM4XTsKIAl1MzIgd3NyX21hX2hlbHBlcglbICA0XTsKIAotI2lmZGVmIFNZTV9PUFRfSEFORExFX0RJUl9VTktOT1dOCi0JLyogVW5rbm93biBkaXJlY3Rpb24gaGFuZGxpbmcgKi8KLQl1MzIgZGF0YV9pbwkJWyAgMl07Ci0JdTMyIGRhdGFfaW9faW4JCVsgIDJdOwotCXUzMiBkYXRhX2lvX2NvbQkJWyAgNl07Ci0JdTMyIGRhdGFfaW9fb3V0CQlbICA4XTsKLSNlbmRpZgogCS8qIERhdGEgYXJlYSAqLwogCXUzMiB6ZXJvCQlbICAxXTsKIAl1MzIgc2NyYXRjaAkJWyAgMV07CkBAIC0xODM4LDUxICsxODMxLDYgQEAKIAlTQ1JfSlVNUCwKIAkJUEFERFJfQSAoZGlzcGF0Y2gpLAogCi0jaWZkZWYgU1lNX09QVF9IQU5ETEVfRElSX1VOS05PV04KLX0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08IERBVEFfSU8gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8sewotCS8qCi0JICogIFdlIGp1bXAgaGVyZSBpZiB0aGUgZGF0YSBkaXJlY3Rpb24gd2FzIHVua25vd24gYXQgdGhlIAotCSAqICB0aW1lIHdlIGhhZCB0byBxdWV1ZSB0aGUgY29tbWFuZCB0byB0aGUgc2NyaXB0cyBwcm9jZXNzb3IuCi0JICogIFBvaW50ZXJzIGhhZCBiZWVuIHNldCBhcyBmb2xsb3cgaW4gdGhpcyBzaXR1YXRpb246Ci0JICogICAgc2F2ZXAgICAtLT4gICBEQVRBX0lPCi0JICogICAgbGFzdHAgICAtLT4gICBzdGFydCBwb2ludGVyIHdoZW4gREFUQV9JTgotCSAqICAgIHdsYXN0cCAgLS0+ICAgc3RhcnQgcG9pbnRlciB3aGVuIERBVEFfT1VUCi0JICogIFRoaXMgc2NyaXB0IHNldHMgc2F2ZXAgYW5kIGxhc3RwIGFjY29yZGluZyB0byB0aGUgCi0JICogIGRpcmVjdGlvbiBjaG9zZW4gYnkgdGhlIHRhcmdldC4KLQkgKi8KLQlTQ1JfSlVNUCBeIElGVFJVRSAoV0hFTiAoU0NSX0RBVEFfT1VUKSksCi0JCVBBRERSX0IgKGRhdGFfaW9fb3V0KSwKLX0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08IERBVEFfSU9fSU4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8sewotCS8qCi0JICogIERpcmVjdGlvbiBpcyBEQVRBIElOLgotCSAqLwotCVNDUl9MT0FEX1JFTCAgKHNjcmF0Y2hhLCA0KSwKLQkJb2Zmc2V0b2YgKHN0cnVjdCBzeW1fY2NiLCBwaHlzLmhlYWQubGFzdHApLAotfS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwgREFUQV9JT19DT00gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyx7Ci0JU0NSX1NUT1JFX1JFTCAoc2NyYXRjaGEsIDQpLAotCQlvZmZzZXRvZiAoc3RydWN0IHN5bV9jY2IsIHBoeXMuaGVhZC5zYXZlcCksCi0KLQkvKgotCSAqICBKdW1wIHRvIHRoZSBTQ1JJUFRTIGFjY29yZGluZyB0byBhY3R1YWwgZGlyZWN0aW9uLgotCSAqLwotCVNDUl9MT0FEX1JFTCAgKHRlbXAsIDQpLAotCQlvZmZzZXRvZiAoc3RydWN0IHN5bV9jY2IsIHBoeXMuaGVhZC5zYXZlcCksCi0JU0NSX1JFVFVSTiwKLQkJMCwKLX0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08IERBVEFfSU9fT1VUID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8sewotCS8qCi0JICogIERpcmVjdGlvbiBpcyBEQVRBIE9VVC4KLQkgKi8KLQlTQ1JfUkVHX1JFRyAoSEZfUkVHLCBTQ1JfQU5ELCAofkhGX0RBVEFfSU4pKSwKLQkJMCwKLQlTQ1JfTE9BRF9SRUwgIChzY3JhdGNoYSwgNCksCi0JCW9mZnNldG9mIChzdHJ1Y3Qgc3ltX2NjYiwgcGh5cy5oZWFkLndsYXN0cCksCi0JU0NSX1NUT1JFX1JFTCAoc2NyYXRjaGEsIDQpLAotCQlvZmZzZXRvZiAoc3RydWN0IHN5bV9jY2IsIHBoeXMuaGVhZC5sYXN0cCksCi0JU0NSX0pVTVAsCi0JCVBBRERSX0IoZGF0YV9pb19jb20pLAotI2VuZGlmIC8qIFNZTV9PUFRfSEFORExFX0RJUl9VTktOT1dOICovCi0KIH0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08IFpFUk8gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8sewogCVNDUl9EQVRBX1pFUk8sCiB9LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPCBTQ1JBVENIID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKaW5kZXggN2ZjMGI5Ny4uMWZmZmQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKQEAgLTUxNCw5ICs1MTQsMTAgQEAKICAqLwogaW50IHN5bV9zZXR1cF9kYXRhX2FuZF9zdGFydChzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHN5bV9jY2IgKmNwKQogewotCWludCBkaXI7CiAJc3RydWN0IHN5bV90Y2IgKnRwID0gJm5wLT50YXJnZXRbY3AtPnRhcmdldF07CiAJc3RydWN0IHN5bV9sY2IgKmxwID0gc3ltX2xwKHRwLCBjcC0+bHVuKTsKKwl1MzIgbGFzdHAsIGdvYWxwOworCWludCBkaXI7CiAKIAkvKgogCSAqICBCdWlsZCB0aGUgQ0RCLgpAQCAtNTM0LDE1ICs1MzUsNDcgQEAKIAkJCXN5bV9zZXRfY2FtX3N0YXR1cyhjbWQsIERJRF9FUlJPUik7CiAJCQlnb3RvIG91dF9hYm9ydDsKIAkJfQorCisJCS8qCisJCSAqICBObyBzZWdtZW50cyBtZWFucyBubyBkYXRhLgorCQkgKi8KKwkJaWYgKCFjcC0+c2VnbWVudHMpCisJCQlkaXIgPSBETUFfTk9ORTsKIAl9IGVsc2UgewogCQljcC0+ZGF0YV9sZW4gPSAwOwogCQljcC0+c2VnbWVudHMgPSAwOwogCX0KIAogCS8qCi0JICogIFNldCBkYXRhIHBvaW50ZXJzLgorCSAqICBTZXQgdGhlIGRhdGEgcG9pbnRlci4KIAkgKi8KLQlzeW1fc2V0dXBfZGF0YV9wb2ludGVycyhucCwgY3AsIGRpcik7CisJc3dpdGNoIChkaXIpIHsKKwljYXNlIERNQV9CSURJUkVDVElPTkFMOgorCQlwcmludGsoIiVzOiBnb3QgRE1BX0JJRElSRUNUSU9OQUwgY29tbWFuZCIsIHN5bV9uYW1lKG5wKSk7CisJCXN5bV9zZXRfY2FtX3N0YXR1cyhjbWQsIERJRF9FUlJPUik7CisJCWdvdG8gb3V0X2Fib3J0OworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJZ29hbHAgPSBTQ1JJUFRBX0JBKG5wLCBkYXRhX291dDIpICsgODsKKwkJbGFzdHAgPSBnb2FscCAtIDggLSAoY3AtPnNlZ21lbnRzICogKDIqNCkpOworCQlicmVhazsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJY3AtPmhvc3RfZmxhZ3MgfD0gSEZfREFUQV9JTjsKKwkJZ29hbHAgPSBTQ1JJUFRBX0JBKG5wLCBkYXRhX2luMikgKyA4OworCQlsYXN0cCA9IGdvYWxwIC0gOCAtIChjcC0+c2VnbWVudHMgKiAoMio0KSk7CisJCWJyZWFrOworCWNhc2UgRE1BX05PTkU6CisJZGVmYXVsdDoKKwkJbGFzdHAgPSBnb2FscCA9IFNDUklQVEJfQkEobnAsIG5vX2RhdGEpOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqICBTZXQgYWxsIHBvaW50ZXJzIHZhbHVlcyBuZWVkZWQgYnkgU0NSSVBUUy4KKwkgKi8KKwljcC0+cGh5cy5oZWFkLmxhc3RwID0gY3B1X3RvX3NjcihsYXN0cCk7CisJY3AtPnBoeXMuaGVhZC5zYXZlcCA9IGNwdV90b19zY3IobGFzdHApOworCWNwLT5zdGFydHAJICAgID0gY3AtPnBoeXMuaGVhZC5zYXZlcDsKKwljcC0+Z29hbHAJICAgID0gY3B1X3RvX3Njcihnb2FscCk7CiAKIAkvKgogCSAqICBXaGVuIGAjaWZlZCAxJywgdGhlIGNvZGUgYmVsb3cgbWFrZXMgdGhlIGRyaXZlciAKQEAgLTU2MywxMCArNTk2LDcgQEAKIAkvKgogCSAqCWFjdGl2YXRlIHRoaXMgam9iLgogCSAqLwotCWlmIChscCkKLQkJc3ltX3N0YXJ0X25leHRfY2NicyhucCwgbHAsIDIpOwotCWVsc2UKLQkJc3ltX3B1dF9zdGFydF9xdWV1ZShucCwgY3ApOworCXN5bV9zdGFydF9uZXh0X2NjYnMobnAsIGxwLCAyKTsKIAlyZXR1cm4gMDsKIAogb3V0X2Fib3J0OgpAQCAtOTgxLDE1ICsxMDExLDE0IEBACiAKIHN0YXRpYyBpbnQgc3ltNTNjOHh4X3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3Qgc3ltX2hjYiAqbnA7Ci0Jc3RydWN0IHN5bV90Y2IgKnRwOworCXN0cnVjdCBzeW1faGNiICpucCA9IHN5bV9nZXRfaGNiKHNkZXYtPmhvc3QpOworCXN0cnVjdCBzeW1fdGNiICp0cCA9ICZucC0+dGFyZ2V0W3NkZXYtPmlkXTsKKwlzdHJ1Y3Qgc3ltX2xjYiAqbHA7CiAKIAlpZiAoc2Rldi0+aWQgPj0gU1lNX0NPTkZfTUFYX1RBUkdFVCB8fCBzZGV2LT5sdW4gPj0gU1lNX0NPTkZfTUFYX0xVTikKIAkJcmV0dXJuIC1FTlhJTzsKIAotCW5wID0gc3ltX2dldF9oY2Ioc2Rldi0+aG9zdCk7Ci0JdHAgPSAmbnAtPnRhcmdldFtzZGV2LT5pZF07Ci0KKwl0cC0+c3RhcmdldCA9IHNkZXYtPnNkZXZfdGFyZ2V0OwogCS8qCiAJICogRmFpbCB0aGUgZGV2aWNlIGluaXQgaWYgdGhlIGRldmljZSBpcyBmbGFnZ2VkIE5PU0NBTiBhdCBCT09UIGluCiAJICogdGhlIE5WUkFNLiAgVGhpcyBtYXkgc3BlZWQgdXAgYm9vdCBhbmQgbWFpbnRhaW4gY29oZXJlbmN5IHdpdGgKQEAgLTk5OSwzNSArMTAyOCw0MSBAQAogCSAqIGx1biBkZXZpY2VzIGJlaGF2ZSBiYWRseSB3aGVuIGFza2VkIGZvciBhIG5vbiB6ZXJvIExVTi4KIAkgKi8KIAotCWlmICgodHAtPnVzcmZsYWdzICYgU1lNX1NDQU5fQk9PVF9ESVNBQkxFRCkgfHwKLQkgICAgKCh0cC0+dXNyZmxhZ3MgJiBTWU1fU0NBTl9MVU5TX0RJU0FCTEVEKSAmJiBzZGV2LT5sdW4gIT0gMCkpIHsKKwlpZiAodHAtPnVzcmZsYWdzICYgU1lNX1NDQU5fQk9PVF9ESVNBQkxFRCkgewogCQl0cC0+dXNyZmxhZ3MgJj0gflNZTV9TQ0FOX0JPT1RfRElTQUJMRUQ7CisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgdHAtPnN0YXJnZXQsCisJCQkJIlNjYW4gYXQgYm9vdCBkaXNhYmxlZCBpbiBOVlJBTVxuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JdHAtPnN0YXJnZXQgPSBzZGV2LT5zZGV2X3RhcmdldDsKKwlpZiAodHAtPnVzcmZsYWdzICYgU1lNX1NDQU5fTFVOU19ESVNBQkxFRCkgeworCQlpZiAoc2Rldi0+bHVuICE9IDApCisJCQlyZXR1cm4gLUVOWElPOworCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHRwLT5zdGFyZ2V0LAorCQkJCSJNdWx0aXBsZSBMVU5zIGRpc2FibGVkIGluIE5WUkFNXG4iKTsKKwl9CisKKwlscCA9IHN5bV9hbGxvY19sY2IobnAsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOworCWlmICghbHApCisJCXJldHVybiAtRU5PTUVNOworCisJc3BpX21pbl9wZXJpb2QodHAtPnN0YXJnZXQpID0gdHAtPnVzcl9wZXJpb2Q7CisJc3BpX21heF93aWR0aCh0cC0+c3RhcmdldCkgPSB0cC0+dXNyX3dpZHRoOworCiAJcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBMaW51eCBlbnRyeSBwb2ludCBmb3IgZGV2aWNlIHF1ZXVlIHNpemluZy4KICAqLwotc3RhdGljIGludCBzeW01M2M4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBzeW01M2M4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3Qgc3ltX2hjYiAqbnAgPSBzeW1fZ2V0X2hjYihkZXZpY2UtPmhvc3QpOwotCXN0cnVjdCBzeW1fdGNiICp0cCA9ICZucC0+dGFyZ2V0W2RldmljZS0+aWRdOwotCXN0cnVjdCBzeW1fbGNiICpscDsKKwlzdHJ1Y3Qgc3ltX2hjYiAqbnAgPSBzeW1fZ2V0X2hjYihzZGV2LT5ob3N0KTsKKwlzdHJ1Y3Qgc3ltX3RjYiAqdHAgPSAmbnAtPnRhcmdldFtzZGV2LT5pZF07CisJc3RydWN0IHN5bV9sY2IgKmxwID0gc3ltX2xwKHRwLCBzZGV2LT5sdW4pOwogCWludCByZXF0YWdzLCBkZXB0aF90b191c2U7CiAKIAkvKgotCSAqICBBbGxvY2F0ZSB0aGUgTENCIGlmIG5vdCB5ZXQuCi0JICogIElmIGl0IGZhaWwsIHdlIG1heSB3ZWxsIGJlIGluIHRoZSBzaCp0LiA6KQotCSAqLwotCWxwID0gc3ltX2FsbG9jX2xjYihucCwgZGV2aWNlLT5pZCwgZGV2aWNlLT5sdW4pOwotCWlmICghbHApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyoKIAkgKiAgR2V0IHVzZXIgZmxhZ3MuCiAJICovCiAJbHAtPmN1cnJfZmxhZ3MgPSBscC0+dXNlcl9mbGFnczsKQEAgLTEwMzgsMTAgKzEwNzMsMTAgQEAKIAkgKiAgVXNlIGF0IGxlYXN0IDIuCiAJICogIERvbm5vdCB1c2UgbW9yZSB0aGFuIG91ciBtYXhpbXVtLgogCSAqLwotCXJlcXRhZ3MgPSBkZXZpY2VfcXVldWVfZGVwdGgobnAsIGRldmljZS0+aWQsIGRldmljZS0+bHVuKTsKKwlyZXF0YWdzID0gZGV2aWNlX3F1ZXVlX2RlcHRoKG5wLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKIAlpZiAocmVxdGFncyA+IHRwLT51c3J0YWdzKQogCQlyZXF0YWdzID0gdHAtPnVzcnRhZ3M7Ci0JaWYgKCFkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQogCQlyZXF0YWdzID0gMDsKICNpZiAxIC8qIEF2b2lkIHRvIGxvY2FsbHkgcXVldWUgY29tbWFuZHMgZm9yIG5vIGdvb2QgcmVhc29ucyAqLwogCWlmIChyZXF0YWdzID4gU1lNX0NPTkZfTUFYX1RBRykKQEAgLTEwNTAsMTkgKzEwODUsMzAgQEAKICNlbHNlCiAJZGVwdGhfdG9fdXNlID0gKHJlcXRhZ3MgPyBTWU1fQ09ORl9NQVhfVEFHIDogMik7CiAjZW5kaWYKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXZpY2UsCi0JCQkJKGRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCA/CisJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwKKwkJCQkoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA/CiAJCQkJIE1TR19TSU1QTEVfVEFHIDogMCksCiAJCQkJZGVwdGhfdG9fdXNlKTsKIAlscC0+cy5zY2Rldl9kZXB0aCA9IGRlcHRoX3RvX3VzZTsKLQlzeW1fdHVuZV9kZXZfcXVldWluZyh0cCwgZGV2aWNlLT5sdW4sIHJlcXRhZ3MpOworCXN5bV90dW5lX2Rldl9xdWV1aW5nKHRwLCBzZGV2LT5sdW4sIHJlcXRhZ3MpOwogCi0JaWYgKCFzcGlfaW5pdGlhbF9kdihkZXZpY2UtPnNkZXZfdGFyZ2V0KSkKLQkJc3BpX2R2X2RldmljZShkZXZpY2UpOworCWlmICghc3BpX2luaXRpYWxfZHYoc2Rldi0+c2Rldl90YXJnZXQpKQorCQlzcGlfZHZfZGV2aWNlKHNkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHN5bTUzYzh4eF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc3ltX2hjYiAqbnAgPSBzeW1fZ2V0X2hjYihzZGV2LT5ob3N0KTsKKwlzdHJ1Y3Qgc3ltX2xjYiAqbHAgPSBzeW1fbHAoJm5wLT50YXJnZXRbc2Rldi0+aWRdLCBzZGV2LT5sdW4pOworCisJaWYgKGxwLT5pdGxxX3RibCkKKwkJc3ltX21mcmVlX2RtYShscC0+aXRscV90YmwsIFNZTV9DT05GX01BWF9UQVNLICogNCwgIklUTFFfVEJMIik7CisJa2ZyZWUobHAtPmNiX3RhZ3MpOworCXN5bV9tZnJlZV9kbWEobHAsIHNpemVvZigqbHApLCAiTENCIik7Cit9CisKIC8qCiAgKiAgTGludXggZW50cnkgcG9pbnQgZm9yIGluZm8oKSBmdW5jdGlvbgogICovCkBAIC0xNDk3LDcgKzE1NDMsNyBAQAogewogI2lmIFNZTV9DT05GX0RNQV9BRERSRVNTSU5HX01PREUgPiAwCiAjaWYgICBTWU1fQ09ORl9ETUFfQUREUkVTU0lOR19NT0RFID09IDEKLSNkZWZpbmUJRE1BX0RBQ19NQVNLCTB4MDAwMDAwZmZmZmZmZmZmZlVMTCAvKiA0MC1iaXQgKi8KKyNkZWZpbmUJRE1BX0RBQ19NQVNLCURNQV80MEJJVF9NQVNLCiAjZWxpZiBTWU1fQ09ORl9ETUFfQUREUkVTU0lOR19NT0RFID09IDIKICNkZWZpbmUJRE1BX0RBQ19NQVNLCURNQV82NEJJVF9NQVNLCiAjZW5kaWYKQEAgLTE5MjYsNiArMTk3Miw3IEBACiAJLnF1ZXVlY29tbWFuZAkJPSBzeW01M2M4eHhfcXVldWVfY29tbWFuZCwKIAkuc2xhdmVfYWxsb2MJCT0gc3ltNTNjOHh4X3NsYXZlX2FsbG9jLAogCS5zbGF2ZV9jb25maWd1cmUJPSBzeW01M2M4eHhfc2xhdmVfY29uZmlndXJlLAorCS5zbGF2ZV9kZXN0cm95CQk9IHN5bTUzYzh4eF9zbGF2ZV9kZXN0cm95LAogCS5laF9hYm9ydF9oYW5kbGVyCT0gc3ltNTNjOHh4X2VoX2Fib3J0X2hhbmRsZXIsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gc3ltNTNjOHh4X2VoX2RldmljZV9yZXNldF9oYW5kbGVyLAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IHN5bTUzYzh4eF9laF9idXNfcmVzZXRfaGFuZGxlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmgKaW5kZXggZDNkNTJmMS4uY2M5MmQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmgKQEAgLTY4LDcgKzY4LDYgQEAKICAqLwogI2RlZmluZQlTWU1fQ09ORl9USU1FUl9JTlRFUlZBTAkJKChIWisxKS8yKQogCi0jZGVmaW5lIFNZTV9PUFRfSEFORExFX0RJUl9VTktOT1dOCiAjZGVmaW5lIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwogI2RlZmluZSBTWU1fT1BUX0xJTUlUX0NPTU1BTkRfUkVPUkRFUklORwogCkBAIC0yNjgsNiArMjY3LDUgQEAKIHZvaWQgc3ltX3hwdF9hc3luY19zZW50X2JkcihzdHJ1Y3Qgc3ltX2hjYiAqbnAsIGludCB0YXJnZXQpOwogaW50ICBzeW1fc2V0dXBfZGF0YV9hbmRfc3RhcnQgKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHNjc2lfY21uZCAqY3Npbywgc3RydWN0IHN5bV9jY2IgKmNwKTsKIHZvaWQgc3ltX2xvZ19idXNfZXJyb3Ioc3RydWN0IHN5bV9oY2IgKm5wKTsKLXZvaWQgc3ltX3NuaWZmX2lucXVpcnkoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCByZXNpZCk7CiAKICNlbmRpZiAvKiBTWU1fR0xVRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCmluZGV4IDE1NjRjYTIuLjgyNjBmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCkBAIC00MCw2ICs0MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CQkvKiBmb3IgdGltZW91dHMgaW4gdW5pdHMgb2YgSFogKi8KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKICNpbmNsdWRlICJzeW1fZ2x1ZS5oIgogI2luY2x1ZGUgInN5bV9udnJhbS5oIgpAQCAtNzAsMzIgKzcxLDEyIEBACiAJcHJpbnRmICgiLlxuIik7CiB9CiAKLS8qCi0gKiAgUHJpbnQgb3V0IHRoZSBjb250ZW50IG9mIGEgU0NTSSBtZXNzYWdlLgotICovCi1zdGF0aWMgaW50IHN5bV9zaG93X21zZyAodV9jaGFyICogbXNnKQotewotCXVfY2hhciBpOwotCXByaW50ZiAoIiV4IiwqbXNnKTsKLQlpZiAoKm1zZz09TV9FWFRFTkRFRCkgewotCQlmb3IgKGk9MTtpPDg7aSsrKSB7Ci0JCQlpZiAoaS0xPm1zZ1sxXSkgYnJlYWs7Ci0JCQlwcmludGYgKCItJXgiLG1zZ1tpXSk7Ci0JCX0KLQkJcmV0dXJuIChpKzEpOwotCX0gZWxzZSBpZiAoKCptc2cgJiAweGYwKSA9PSAweDIwKSB7Ci0JCXByaW50ZiAoIi0leCIsbXNnWzFdKTsKLQkJcmV0dXJuICgyKTsKLQl9Ci0JcmV0dXJuICgxKTsKLX0KLQogc3RhdGljIHZvaWQgc3ltX3ByaW50X21zZyhzdHJ1Y3Qgc3ltX2NjYiAqY3AsIGNoYXIgKmxhYmVsLCB1X2NoYXIgKm1zZykKIHsKIAlzeW1fcHJpbnRfYWRkcihjcC0+Y21kLCAiJXM6ICIsIGxhYmVsKTsKIAotCXN5bV9zaG93X21zZyhtc2cpOwotCXByaW50ZigiLlxuIik7CisJc3BpX3ByaW50X21zZyhtc2cpOworCXByaW50ZigiXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgc3ltX3ByaW50X25lZ29fbXNnKHN0cnVjdCBzeW1faGNiICpucCwgaW50IHRhcmdldCwgY2hhciAqbGFiZWwsIHVfY2hhciAqbXNnKQpAQCAtMTAzLDggKzg0LDggQEAKIAlzdHJ1Y3Qgc3ltX3RjYiAqdHAgPSAmbnAtPnRhcmdldFt0YXJnZXRdOwogCWRldl9pbmZvKCZ0cC0+c3RhcmdldC0+ZGV2LCAiJXM6ICIsIGxhYmVsKTsKIAotCXN5bV9zaG93X21zZyhtc2cpOwotCXByaW50ZigiLlxuIik7CisJc3BpX3ByaW50X21zZyhtc2cpOworCXByaW50ZigiXG4iKTsKIH0KIAogLyoKQEAgLTYzNSwyOSArNjE2LDYgQEAKIAl9CiB9CiAKLQotLyoKLSAqIFByaW50IG91dCB0aGUgbGlzdCBvZiB0YXJnZXRzIHRoYXQgaGF2ZSBzb21lIGZsYWcgZGlzYWJsZWQgYnkgdXNlci4KLSAqLwotc3RhdGljIHZvaWQgc3ltX3ByaW50X3RhcmdldHNfZmxhZyhzdHJ1Y3Qgc3ltX2hjYiAqbnAsIGludCBtYXNrLCBjaGFyICptc2cpCi17Ci0JaW50IGNudDsKLQlpbnQgaTsKLQotCWZvciAoY250ID0gMCwgaSA9IDAgOyBpIDwgU1lNX0NPTkZfTUFYX1RBUkdFVCA7IGkrKykgewotCQlpZiAoaSA9PSBucC0+bXlhZGRyKQotCQkJY29udGludWU7Ci0JCWlmIChucC0+dGFyZ2V0W2ldLnVzcmZsYWdzICYgbWFzaykgewotCQkJaWYgKCFjbnQrKykKLQkJCQlwcmludGYoIiVzOiAlcyBkaXNhYmxlZCBmb3IgdGFyZ2V0cyIsCi0JCQkJCXN5bV9uYW1lKG5wKSwgbXNnKTsKLQkJCXByaW50ZigiICVkIiwgaSk7Ci0JCX0KLQl9Ci0JaWYgKGNudCkKLQkJcHJpbnRmKCIuXG4iKTsKLX0KLQogLyoKICAqICBTYXZlIGluaXRpYWwgc2V0dGluZ3Mgb2Ygc29tZSBJTyByZWdpc3RlcnMuCiAgKiAgQXNzdW1lZCB0byBoYXZlIGJlZW4gc2V0IGJ5IEJJT1MuCkBAIC05NjIsNyArOTIwLDcgQEAKIAkJdHAtPnVzcmZsYWdzIHw9IChTWU1fRElTQ19FTkFCTEVEIHwgU1lNX1RBR1NfRU5BQkxFRCk7CiAJCXRwLT51c3J0YWdzID0gU1lNX1NFVFVQX01BWF9UQUc7CiAKLQkJc3ltX252cmFtX3NldHVwX3RhcmdldChucCwgaSwgbnZyYW0pOworCQlzeW1fbnZyYW1fc2V0dXBfdGFyZ2V0KHRwLCBpLCBudnJhbSk7CiAKIAkJaWYgKCF0cC0+dXNydGFncykKIAkJCXRwLT51c3JmbGFncyAmPSB+U1lNX1RBR1NfRU5BQkxFRDsKQEAgLTEwMDUsMTMgKzk2Myw2IEBACiAJCQlzeW1fbmFtZShucCksIG5wLT5ydl9zY250bDMsIG5wLT5ydl9kbW9kZSwgbnAtPnJ2X2RjbnRsLAogCQkJbnAtPnJ2X2N0ZXN0MywgbnAtPnJ2X2N0ZXN0NCwgbnAtPnJ2X2N0ZXN0NSk7CiAJfQotCS8qCi0JICogIExldCB1c2VyIGJlIGF3YXJlIG9mIHRhcmdldHMgdGhhdCBoYXZlIHNvbWUgZGlzYWJsZSBmbGFncyBzZXQuCi0JICovCi0Jc3ltX3ByaW50X3RhcmdldHNfZmxhZyhucCwgU1lNX1NDQU5fQk9PVF9ESVNBQkxFRCwgIlNDQU4gQVQgQk9PVCIpOwotCWlmIChzeW1fdmVyYm9zZSkKLQkJc3ltX3ByaW50X3RhcmdldHNfZmxhZyhucCwgU1lNX1NDQU5fTFVOU19ESVNBQkxFRCwKLQkJCQkgICAgICAgIlNDQU4gRk9SIExVTlMiKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUyMyw3ICsxNDc0LDcgQEAKIC8qCiAgKiAgSW5zZXJ0IGEgam9iIGludG8gdGhlIHN0YXJ0IHF1ZXVlLgogICovCi12b2lkIHN5bV9wdXRfc3RhcnRfcXVldWUoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX2NjYiAqY3ApCitzdGF0aWMgdm9pZCBzeW1fcHV0X3N0YXJ0X3F1ZXVlKHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9jY2IgKmNwKQogewogCXVfc2hvcnQJcWlkeDsKIApAQCAtMzY1NCw3ICszNjA1LDcgQEAKIAkgKiAgSWYgcmVzdWx0IGlzIGRwX3NnID0gU1lNX0NPTkZfTUFYX1NHLCB0aGVuIHdlIGFyZSBhdCB0aGUgCiAJICogIGVuZCBvZiB0aGUgZGF0YS4KIAkgKi8KLQl0bXAgPSBzY3JfdG9fY3B1KHN5bV9nb2FscChjcCkpOworCXRtcCA9IHNjcl90b19jcHUoY3AtPmdvYWxwKTsKIAlkcF9zZyA9IFNZTV9DT05GX01BWF9TRzsKIAlpZiAoZHBfc2NyICE9IHRtcCkKIAkJZHBfc2cgLT0gKHRtcCAtIDggLSAoaW50KWRwX3NjcikgLyAoMio0KTsKQEAgLTM3NjEsNyArMzcxMiw3IEBACiAJICogIEFuZCBvdXIgYWxjaGVteTopIGFsbG93cyB0byBlYXNpbHkgY2FsY3VsYXRlIHRoZSBkYXRhIAogCSAqICBzY3JpcHQgYWRkcmVzcyB3ZSB3YW50IHRvIHJldHVybiBmb3IgdGhlIG5leHQgZGF0YSBwaGFzZS4KIAkgKi8KLQlkcF9yZXQgPSBjcHVfdG9fc2NyKHN5bV9nb2FscChjcCkpOworCWRwX3JldCA9IGNwdV90b19zY3IoY3AtPmdvYWxwKTsKIAlkcF9yZXQgPSBkcF9yZXQgLSA4IC0gKFNZTV9DT05GX01BWF9TRyAtIGRwX3NnKSAqICgyKjQpOwogCiAJLyoKQEAgLTM4NTcsNyArMzgwOCw3IEBACiAJICogIElmIGFsbCBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLAogCSAqICB0aGVyZSBpcyBubyByZXNpZHVhbC4KIAkgKi8KLQlpZiAoY3AtPnBoeXMuaGVhZC5sYXN0cCA9PSBzeW1fZ29hbHAoY3ApKQorCWlmIChjcC0+cGh5cy5oZWFkLmxhc3RwID09IGNwLT5nb2FscCkKIAkJcmV0dXJuIHJlc2lkOwogCiAJLyoKQEAgLTQ2NjQsMzAgKzQ2MTUsNyBAQAogCQlnb3RvIG91dDsKIAljcCA9IHN5bV9xdWVfZW50cnkocXAsIHN0cnVjdCBzeW1fY2NiLCBsaW5rX2NjYnEpOwogCi0jaWZuZGVmIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwotCS8qCi0JICogIElmIHRoZSBMQ0IgaXMgbm90IHlldCBhdmFpbGFibGUgYW5kIHRoZSBMVU4KLQkgKiAgaGFzIGJlZW4gcHJvYmVkIG9rLCB0cnkgdG8gYWxsb2NhdGUgdGhlIExDQi4KLQkgKi8KLQlpZiAoIWxwICYmIHN5bV9pc19iaXQodHAtPmx1bl9tYXAsIGxuKSkgewotCQlscCA9IHN5bV9hbGxvY19sY2IobnAsIHRuLCBsbik7Ci0JCWlmICghbHApCi0JCQlnb3RvIG91dF9mcmVlOwotCX0KLSNlbmRpZgotCi0JLyoKLQkgKiAgSWYgdGhlIExDQiBpcyBub3QgYXZhaWxhYmxlIGhlcmUsIHRoZW4gdGhlIAotCSAqICBsb2dpY2FsIHVuaXQgaXMgbm90IHlldCBkaXNjb3ZlcmVkLiBGb3IgdGhvc2UgCi0JICogIG9uZXMgb25seSBhY2NlcHQgMSBTQ1NJIElPIHBlciBsb2dpY2FsIHVuaXQsIAotCSAqICBzaW5jZSB3ZSBjYW5ub3QgYWxsb3cgZGlzY29ubmVjdGlvbnMuCi0JICovCi0JaWYgKCFscCkgewotCQlpZiAoIXN5bV9pc19iaXQodHAtPmJ1c3kwX21hcCwgbG4pKQotCQkJc3ltX3NldF9iaXQodHAtPmJ1c3kwX21hcCwgbG4pOwotCQllbHNlCi0JCQlnb3RvIG91dF9mcmVlOwotCX0gZWxzZSB7CisJewogCQkvKgogCQkgKiAgSWYgd2UgaGF2ZSBiZWVuIGFza2VkIGZvciBhIHRhZ2dlZCBjb21tYW5kLgogCQkgKi8KQEAgLTQ4NDAsMTIgKzQ3NjgsNiBAQAogCQkJbHAtPmhlYWQucmVzZWxfc2EgPQogCQkJCWNwdV90b19zY3IoU0NSSVBUQl9CQShucCwgcmVzZWxfYmFkX2x1bikpOwogCX0KLQkvKgotCSAqICBPdGhlcndpc2UsIHdlIG9ubHkgYWNjZXB0IDEgSU8gcGVyIExVTi4KLQkgKiAgQ2xlYXIgdGhlIGJpdCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoaXMgSU8uCi0JICovCi0JZWxzZQotCQlzeW1fY2xyX2JpdCh0cC0+YnVzeTBfbWFwLCBjcC0+bHVuKTsKIAogCS8qCiAJICogIFdlIGRvbm5vdCBxdWV1ZSBtb3JlIHRoYW4gMSBjY2IgcGVyIHRhcmdldCAKQEAgLTQ5OTcsMjAgKzQ5MTksNyBAQAogc3RydWN0IHN5bV9sY2IgKnN5bV9hbGxvY19sY2IgKHN0cnVjdCBzeW1faGNiICpucCwgdV9jaGFyIHRuLCB1X2NoYXIgbG4pCiB7CiAJc3RydWN0IHN5bV90Y2IgKnRwID0gJm5wLT50YXJnZXRbdG5dOwotCXN0cnVjdCBzeW1fbGNiICpscCA9IHN5bV9scCh0cCwgbG4pOwotCi0JLyoKLQkgKiAgQWxyZWFkeSBkb25lLCBqdXN0IHJldHVybi4KLQkgKi8KLQlpZiAobHApCi0JCXJldHVybiBscDsKLQotCS8qCi0JICogIERvbm5vdCBhbGxvdyBMVU4gY29udHJvbCBibG9jayAKLQkgKiAgYWxsb2NhdGlvbiBmb3Igbm90IHByb2JlZCBMVU5zLgotCSAqLwotCWlmICghc3ltX2lzX2JpdCh0cC0+bHVuX21hcCwgbG4pKQotCQlyZXR1cm4gTlVMTDsKKwlzdHJ1Y3Qgc3ltX2xjYiAqbHAgPSBOVUxMOwogCiAJLyoKIAkgKiAgSW5pdGlhbGl6ZSB0aGUgdGFyZ2V0IGNvbnRyb2wgYmxvY2sgaWYgbm90IHlldC4KQEAgLTUwODIsMTMgKzQ5OTEsNyBAQAogCWxwLT5zdGFydGVkX21heCAgID0gU1lNX0NPTkZfTUFYX1RBU0s7CiAJbHAtPnN0YXJ0ZWRfbGltaXQgPSBTWU1fQ09ORl9NQVhfVEFTSzsKICNlbmRpZgotCS8qCi0JICogIElmIHdlIGFyZSBidXN5LCBjb3VudCB0aGUgSU8uCi0JICovCi0JaWYgKHN5bV9pc19iaXQodHAtPmJ1c3kwX21hcCwgbG4pKSB7Ci0JCWxwLT5idXN5X2l0bCA9IDE7Ci0JCXN5bV9jbHJfYml0KHRwLT5idXN5MF9tYXAsIGxuKTsKLQl9CisKIGZhaWw6CiAJcmV0dXJuIGxwOwogfQpAQCAtNTEwMywxMiArNTAwNiw2IEBACiAJaW50IGk7CiAKIAkvKgotCSAqICBJZiBMQ0Igbm90IGF2YWlsYWJsZSwgdHJ5IHRvIGFsbG9jYXRlIGl0LgotCSAqLwotCWlmICghbHAgJiYgIShscCA9IHN5bV9hbGxvY19sY2IobnAsIHRuLCBsbikpKQotCQlnb3RvIGZhaWw7Ci0KLQkvKgogCSAqICBBbGxvY2F0ZSB0aGUgdGFzayB0YWJsZSBhbmQgYW5kIHRoZSB0YWcgYWxsb2NhdGlvbiAKIAkgKiAgY2lyY3VsYXIgYnVmZmVyLiBXZSB3YW50IGJvdGggb3Igbm9uZS4KIAkgKi8KQEAgLTU0ODEsOCArNTM3OCw3IEBACiAJLyoKIAkgKiAgRG9ubm90IHN0YXJ0IG1vcmUgdGhhbiAxIGNvbW1hbmQgYWZ0ZXIgYW4gZXJyb3IuCiAJICovCi0JaWYgKGxwKQotCQlzeW1fc3RhcnRfbmV4dF9jY2JzKG5wLCBscCwgMSk7CisJc3ltX3N0YXJ0X25leHRfY2NicyhucCwgbHAsIDEpOwogI2VuZGlmCiB9CiAKQEAgLTU1MjEsMTcgKzU0MTcsMTEgQEAKIAlscCA9IHN5bV9scCh0cCwgY3AtPmx1bik7CiAKIAkvKgotCSAqICBBc3N1bWUgZGV2aWNlIGRpc2NvdmVyZWQgb24gZmlyc3Qgc3VjY2Vzcy4KLQkgKi8KLQlpZiAoIWxwKQotCQlzeW1fc2V0X2JpdCh0cC0+bHVuX21hcCwgY3AtPmx1bik7Ci0KLQkvKgogCSAqICBJZiBhbGwgZGF0YSBoYXZlIGJlZW4gdHJhbnNmZXJyZWQsIGdpdmVuIHRoYW4gbm8KIAkgKiAgZXh0ZW5kZWQgZXJyb3IgZGlkIG9jY3VyLCB0aGVyZSBpcyBubyByZXNpZHVhbC4KIAkgKi8KIAlyZXNpZCA9IDA7Ci0JaWYgKGNwLT5waHlzLmhlYWQubGFzdHAgIT0gc3ltX2dvYWxwKGNwKSkKKwlpZiAoY3AtPnBoeXMuaGVhZC5sYXN0cCAhPSBjcC0+Z29hbHApCiAJCXJlc2lkID0gc3ltX2NvbXB1dGVfcmVzaWR1YWwobnAsIGNwKTsKIAogCS8qCkBAIC01NTUxLDE1ICs1NDQxLDYgQEAKIAkgKi8KIAlzeW1fc2V0X2NhbV9yZXN1bHRfb2soY3AsIGNtZCwgcmVzaWQpOwogCi0jaWZkZWYJU1lNX09QVF9TTklGRl9JTlFVSVJZCi0JLyoKLQkgKiAgT24gc3RhbmRhcmQgSU5RVUlSWSByZXNwb25zZSAoRVZQRCBhbmQgQ21EdCAKLQkgKiAgbm90IHNldCksIHNuaWZmIG91dCBkZXZpY2UgY2FwYWJpbGl0aWVzLgotCSAqLwotCWlmIChjcC0+Y2RiX2J1ZlswXSA9PSBJTlFVSVJZICYmICEoY3AtPmNkYl9idWZbMV0gJiAweDMpKQotCQlzeW1fc25pZmZfaW5xdWlyeShucCwgY21kLCByZXNpZCk7Ci0jZW5kaWYKLQogI2lmZGVmIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwogCS8qCiAJICogIElmIG1heCBudW1iZXIgb2Ygc3RhcnRlZCBjY2JzIGhhZCBiZWVuIHJlZHVjZWQsCkBAIC01NTg3LDcgKzU0NjgsNyBAQAogCS8qCiAJICogIFJlcXVldWUgYSBjb3VwbGUgb2YgYXdhaXRpbmcgc2NzaSBjb21tYW5kcy4KIAkgKi8KLQlpZiAobHAgJiYgIXN5bV9xdWVfZW1wdHkoJmxwLT53YWl0aW5nX2NjYnEpKQorCWlmICghc3ltX3F1ZV9lbXB0eSgmbHAtPndhaXRpbmdfY2NicSkpCiAJCXN5bV9zdGFydF9uZXh0X2NjYnMobnAsIGxwLCAyKTsKICNlbmRpZgogCS8qCkBAIC01ODMwLDggKzU3MTEsNyBAQAogCVNZTV9RVUVIRUFEICpxcDsKIAlzdHJ1Y3Qgc3ltX2NjYiAqY3A7CiAJc3RydWN0IHN5bV90Y2IgKnRwOwotCXN0cnVjdCBzeW1fbGNiICpscDsKLQlpbnQgdGFyZ2V0LCBsdW47CisJaW50IHRhcmdldDsKIAogCWlmIChucC0+c2NyaXB0ejApCiAJCXN5bV9tZnJlZV9kbWEobnAtPnNjcmlwdHowLCBucC0+c2NyaXB0el9zeiwgIlNDUklQVFowIik7CkBAIC01ODU3LDE2ICs1NzM3LDYgQEAKIAogCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDwgU1lNX0NPTkZfTUFYX1RBUkdFVCA7IHRhcmdldCsrKSB7CiAJCXRwID0gJm5wLT50YXJnZXRbdGFyZ2V0XTsKLQkJZm9yIChsdW4gPSAwIDsgbHVuIDwgU1lNX0NPTkZfTUFYX0xVTiA7IGx1bisrKSB7Ci0JCQlscCA9IHN5bV9scCh0cCwgbHVuKTsKLQkJCWlmICghbHApCi0JCQkJY29udGludWU7Ci0JCQlpZiAobHAtPml0bHFfdGJsKQotCQkJCXN5bV9tZnJlZV9kbWEobHAtPml0bHFfdGJsLCBTWU1fQ09ORl9NQVhfVEFTSyo0LAotCQkJCSAgICAgICAiSVRMUV9UQkwiKTsKLQkJCWtmcmVlKGxwLT5jYl90YWdzKTsKLQkJCXN5bV9tZnJlZV9kbWEobHAsIHNpemVvZigqbHApLCAiTENCIik7Ci0JCX0KICNpZiBTWU1fQ09ORl9NQVhfTFVOID4gMQogCQlrZnJlZSh0cC0+bHVubXApOwogI2VuZGlmIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaAppbmRleCAzYTI2NGE0Li4yNDU2MDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaAorKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuaApAQCAtNDgsMTIgKzQ4LDYgQEAKICAqICBUaGV5IG1heSBiZSBkZWZpbmVkIGluIHBsYXRmb3JtIHNwZWNpZmljIGhlYWRlcnMsIGlmIHRoZXkgCiAgKiAgYXJlIHVzZWZ1bC4KICAqCi0gKiAgICBTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTgotICogICAgICAgIFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgU0NSSVBUUyB1c2VkIGJ5IHRoZSBkcml2ZXIgCi0gKiAgICAgICAgYXJlIGFibGUgdG8gaGFuZGxlIFNDU0kgdHJhbnNmZXJzIHdpdGggZGlyZWN0aW9uIG5vdCAKLSAqICAgICAgICBzdXBwbGllZCBieSB1c2VyLgotICogICAgICAgIChzZXQgZm9yIExpbnV4LTIuMC5YKQotICoKICAqICAgIFNZTV9PUFRfSEFORExFX0RFVklDRV9RVUVVRUlORwogICogICAgICAgIFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgZHJpdmVyIHdpbGwgdXNlIGEgcXVldWUgcGVyIAogICogICAgICAgIGRldmljZSBhbmQgaGFuZGxlIFFVRVVFIEZVTEwgc3RhdHVzIHJlcXVldWluZyBpbnRlcm5hbGx5LgpAQCAtNjQsNyArNTgsNiBAQAogICogICAgICAgIChzZXQgZm9yIExpbnV4KQogICovCiAjaWYgMAotI2RlZmluZSBTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTgogI2RlZmluZSBTWU1fT1BUX0hBTkRMRV9ERVZJQ0VfUVVFVUVJTkcKICNkZWZpbmUgU1lNX09QVF9MSU1JVF9DT01NQU5EX1JFT1JERVJJTkcKICNlbmRpZgpAQCAtNDE2LDE5ICs0MDksNiBAQAogCXN0cnVjdCBzeW1fbGNiICoqbHVubXA7CQkvKiBPdGhlciBMQ0JzIFsxLi5NQVhfTFVOXQkqLwogI2VuZGlmCiAKLQkvKgotCSAqICBCaXRtYXAgdGhhdCB0ZWxscyBhYm91dCBMVU5zIHRoYXQgc3VjY2VlZGVkIGF0IGxlYXN0IAotCSAqICAxIElPIGFuZCB0aGVyZWZvcmUgYXNzdW1lZCB0byBiZSBhIHJlYWwgZGV2aWNlLgotCSAqICBBdm9pZCB1c2VsZXNzIGFsbG9jYXRpb24gb2YgdGhlIExDQiBzdHJ1Y3R1cmUuCi0JICovCi0JdTMyCWx1bl9tYXBbKFNZTV9DT05GX01BWF9MVU4rMzEpLzMyXTsKLQotCS8qCi0JICogIEJpdG1hcCB0aGF0IHRlbGxzIGFib3V0IExVTnMgdGhhdCBoYXZlbid0IHlldCBhbiBMQ0IgCi0JICogIGFsbG9jYXRlZCAobm90IGRpc2NvdmVyZWQgb3IgTENCIGFsbG9jYXRpb24gZmFpbGVkKS4KLQkgKi8KLQl1MzIJYnVzeTBfbWFwWyhTWU1fQ09ORl9NQVhfTFVOKzMxKS8zMl07Ci0KICNpZmRlZglTWU1fSEFWRV9TVENCCiAJLyoKIAkgKiAgTy9TIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLgpAQCAtNDU0LDggKzQzNCwxMCBAQAogCSAqICBPdGhlciB1c2VyIHNldHRhYmxlIGxpbWl0cyBhbmQgb3B0aW9ucy4KIAkgKiAgVGhlc2UgbGltaXRzIGFyZSByZWFkIGZyb20gdGhlIE5WUkFNIGlmIHByZXNlbnQuCiAJICovCi0JdV9jaGFyCXVzcmZsYWdzOwotCXVfc2hvcnQJdXNydGFnczsKKwl1bnNpZ25lZCBjaGFyCXVzcmZsYWdzOworCXVuc2lnbmVkIGNoYXIJdXNyX3BlcmlvZDsKKwl1bnNpZ25lZCBjaGFyCXVzcl93aWR0aDsKKwl1bnNpZ25lZCBzaG9ydAl1c3J0YWdzOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIH07CiAKQEAgLTY3Miw5ICs2NTQsNiBAQAogCSAqLwogCXUzMglzYXZlcDsJCS8qIEp1bXAgYWRkcmVzcyB0byBzYXZlZCBkYXRhIHBvaW50ZXIJKi8KIAl1MzIJbGFzdHA7CQkvKiBTQ1JJUFRTIGFkZHJlc3MgYXQgZW5kIG9mIGRhdGEJKi8KLSNpZmRlZglTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTgotCXUzMgl3bGFzdHA7Ci0jZW5kaWYKIAogCS8qCiAJICogIFN0YXR1cyBmaWVsZHMuCkBAIC04MDQsOSArNzgzLDYgQEAKIAlTWU1fUVVFSEVBRCBsaW5rX2NjYnE7CS8qIExpbmsgdG8gZnJlZS9idXN5IENDQiBxdWV1ZQkqLwogCXUzMglzdGFydHA7CQkvKiBJbml0aWFsIGRhdGEgcG9pbnRlcgkJKi8KIAl1MzIJZ29hbHA7CQkvKiBFeHBlY3RlZCBsYXN0IGRhdGEgcG9pbnRlcgkqLwotI2lmZGVmCVNZTV9PUFRfSEFORExFX0RJUl9VTktOT1dOCi0JdTMyCXdnb2FscDsKLSNlbmRpZgogCWludAlleHRfc2c7CQkvKiBFeHRyZW1lIGRhdGEgcG9pbnRlciwgdXNlZAkqLwogCWludAlleHRfb2ZzOwkvKiAgdG8gY2FsY3VsYXRlIHRoZSByZXNpZHVhbC4JKi8KICNpZmRlZiBTWU1fT1BUX0hBTkRMRV9ERVZJQ0VfUVVFVUVJTkcKQEAgLTgyMSwxMiArNzk3LDYgQEAKIAogI2RlZmluZSBDQ0JfQkEoY3AsbGJsKQljcHVfdG9fc2NyKGNwLT5jY2JfYmEgKyBvZmZzZXRvZihzdHJ1Y3Qgc3ltX2NjYiwgbGJsKSkKIAotI2lmZGVmCVNZTV9PUFRfSEFORExFX0RJUl9VTktOT1dOCi0jZGVmaW5lCXN5bV9nb2FscChjcCkgKChjcC0+aG9zdF9mbGFncyAmIEhGX0RBVEFfSU4pID8gY3AtPmdvYWxwIDogY3AtPndnb2FscCkKLSNlbHNlCi0jZGVmaW5lCXN5bV9nb2FscChjcCkgKGNwLT5nb2FscCkKLSNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCBkZXZpY2UgKm1fcG9vbF9pZGVudF90OwogCiAvKgpAQCAtMTA3Nyw3ICsxMDQ3LDYgQEAKIHZvaWQgc3ltX3ByaW50X3hlcnIoc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgeF9zdGF0dXMpOwogaW50IHN5bV9yZXNldF9zY3NpX2J1cyhzdHJ1Y3Qgc3ltX2hjYiAqbnAsIGludCBlbmFiX2ludCk7CiBzdHJ1Y3Qgc3ltX2NoaXAgKnN5bV9sb29rdXBfY2hpcF90YWJsZSh1X3Nob3J0IGRldmljZV9pZCwgdV9jaGFyIHJldmlzaW9uKTsKLXZvaWQgc3ltX3B1dF9zdGFydF9xdWV1ZShzdHJ1Y3Qgc3ltX2hjYiAqbnAsIHN0cnVjdCBzeW1fY2NiICpjcCk7CiAjaWZkZWYgU1lNX09QVF9IQU5ETEVfREVWSUNFX1FVRVVFSU5HCiB2b2lkIHN5bV9zdGFydF9uZXh0X2NjYnMoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX2xjYiAqbHAsIGludCBtYXhuKTsKICNlbmRpZgpAQCAtMTEzNiw3MSArMTEwNSw2IEBACiAjZW5kaWYKIAogLyoKLSAqICBTZXQgdXAgZGF0YSBwb2ludGVycyB1c2VkIGJ5IFNDUklQVFMuCi0gKiAgQ2FsbGVkIGZyb20gTy9TIHNwZWNpZmljIGNvZGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeW1fc2V0dXBfZGF0YV9wb2ludGVycyhzdHJ1Y3Qgc3ltX2hjYiAqbnAsCi0JCXN0cnVjdCBzeW1fY2NiICpjcCwgaW50IGRpcikKLXsKLQl1MzIgbGFzdHAsIGdvYWxwOwotCi0JLyoKLQkgKiAgTm8gc2VnbWVudHMgbWVhbnMgbm8gZGF0YS4KLQkgKi8KLQlpZiAoIWNwLT5zZWdtZW50cykKLQkJZGlyID0gRE1BX05PTkU7Ci0KLQkvKgotCSAqICBTZXQgdGhlIGRhdGEgcG9pbnRlci4KLQkgKi8KLQlzd2l0Y2goZGlyKSB7Ci0jaWZkZWYJU1lNX09QVF9IQU5ETEVfRElSX1VOS05PV04KLQljYXNlIERNQV9CSURJUkVDVElPTkFMOgotI2VuZGlmCi0JY2FzZSBETUFfVE9fREVWSUNFOgotCQlnb2FscCA9IFNDUklQVEFfQkEobnAsIGRhdGFfb3V0MikgKyA4OwotCQlsYXN0cCA9IGdvYWxwIC0gOCAtIChjcC0+c2VnbWVudHMgKiAoMio0KSk7Ci0jaWZkZWYJU1lNX09QVF9IQU5ETEVfRElSX1VOS05PV04KLQkJY3AtPndnb2FscCA9IGNwdV90b19zY3IoZ29hbHApOwotCQlpZiAoZGlyICE9IERNQV9CSURJUkVDVElPTkFMKQotCQkJYnJlYWs7Ci0JCWNwLT5waHlzLmhlYWQud2xhc3RwID0gY3B1X3RvX3NjcihsYXN0cCk7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotI2Vsc2UKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIERNQV9GUk9NX0RFVklDRToKLQkJY3AtPmhvc3RfZmxhZ3MgfD0gSEZfREFUQV9JTjsKLQkJZ29hbHAgPSBTQ1JJUFRBX0JBKG5wLCBkYXRhX2luMikgKyA4OwotCQlsYXN0cCA9IGdvYWxwIC0gOCAtIChjcC0+c2VnbWVudHMgKiAoMio0KSk7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX05PTkU6Ci0JZGVmYXVsdDoKLSNpZmRlZglTWU1fT1BUX0hBTkRMRV9ESVJfVU5LTk9XTgotCQljcC0+aG9zdF9mbGFncyB8PSBIRl9EQVRBX0lOOwotI2VuZGlmCi0JCWxhc3RwID0gZ29hbHAgPSBTQ1JJUFRCX0JBKG5wLCBub19kYXRhKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiAgU2V0IGFsbCBwb2ludGVycyB2YWx1ZXMgbmVlZGVkIGJ5IFNDUklQVFMuCi0JICovCi0JY3AtPnBoeXMuaGVhZC5sYXN0cCA9IGNwdV90b19zY3IobGFzdHApOwotCWNwLT5waHlzLmhlYWQuc2F2ZXAgPSBjcHVfdG9fc2NyKGxhc3RwKTsKLQljcC0+c3RhcnRwCSAgICA9IGNwLT5waHlzLmhlYWQuc2F2ZXA7Ci0JY3AtPmdvYWxwCSAgICA9IGNwdV90b19zY3IoZ29hbHApOwotCi0jaWZkZWYJU1lNX09QVF9IQU5ETEVfRElSX1VOS05PV04KLQkvKgotCSAqICBJZiBkaXJlY3Rpb24gaXMgdW5rbm93biwgc3RhcnQgYXQgZGF0YV9pby4KLQkgKi8KLQlpZiAoZGlyID09IERNQV9CSURJUkVDVElPTkFMKQotCQljcC0+cGh5cy5oZWFkLnNhdmVwID0gY3B1X3RvX3NjcihTQ1JJUFRCX0JBKG5wLCBkYXRhX2lvKSk7Ci0jZW5kaWYKLX0KLQotLyoKICAqICBNRU1PUlkgQUxMT0NBVE9SLgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fbWFsbG9jLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX21hbGxvYy5jCmluZGV4IGEzNGQ0MDMuLjkyYmY5YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fbWFsbG9jLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9tYWxsb2MuYwpAQCAtMzcsMTEgKzM3LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxkZXYvc3ltL3N5bV9nbHVlLmg+Ci0jZWxzZQogI2luY2x1ZGUgInN5bV9nbHVlLmgiCi0jZW5kaWYKIAogLyoKICAqICBTaW1wbGUgcG93ZXIgb2YgdHdvIGJ1ZGR5LWxpa2UgZ2VuZXJpYyBhbGxvY2F0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX252cmFtLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX252cmFtLmMKaW5kZXggOTk0Yjc1Ni4uMTVkNjkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9udnJhbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fbnZyYW0uYwpAQCAtOTIsMjkgKzkyLDMyIEBACiAgKiAgR2V0IHRhcmdldCBzZXQtdXAgZnJvbSBTeW1iaW9zIGZvcm1hdCBOVlJBTS4KICAqLwogc3RhdGljIHZvaWQKLXN5bV9TeW1iaW9zX3NldHVwX3RhcmdldChzdHJ1Y3Qgc3ltX2hjYiAqbnAsIGludCB0YXJnZXQsIFN5bWJpb3NfbnZyYW0gKm52cmFtKQorc3ltX1N5bWJpb3Nfc2V0dXBfdGFyZ2V0KHN0cnVjdCBzeW1fdGNiICp0cCwgaW50IHRhcmdldCwgU3ltYmlvc19udnJhbSAqbnZyYW0pCiB7Ci0Jc3RydWN0IHN5bV90Y2IgKnRwID0gJm5wLT50YXJnZXRbdGFyZ2V0XTsKIAlTeW1iaW9zX3RhcmdldCAqdG4gPSAmbnZyYW0tPnRhcmdldFt0YXJnZXRdOwogCi0JdHAtPnVzcnRhZ3MgPQotCQkodG4tPmZsYWdzICYgU1lNQklPU19RVUVVRV9UQUdTX0VOQUJMRUQpPyBTWU1fU0VUVVBfTUFYX1RBRyA6IDA7Ci0KKwlpZiAoISh0bi0+ZmxhZ3MgJiBTWU1CSU9TX1FVRVVFX1RBR1NfRU5BQkxFRCkpCisJCXRwLT51c3J0YWdzID0gMDsKIAlpZiAoISh0bi0+ZmxhZ3MgJiBTWU1CSU9TX0RJU0NPTk5FQ1RfRU5BQkxFKSkKIAkJdHAtPnVzcmZsYWdzICY9IH5TWU1fRElTQ19FTkFCTEVEOwogCWlmICghKHRuLT5mbGFncyAmIFNZTUJJT1NfU0NBTl9BVF9CT09UX1RJTUUpKQogCQl0cC0+dXNyZmxhZ3MgfD0gU1lNX1NDQU5fQk9PVF9ESVNBQkxFRDsKIAlpZiAoISh0bi0+ZmxhZ3MgJiBTWU1CSU9TX1NDQU5fTFVOUykpCiAJCXRwLT51c3JmbGFncyB8PSBTWU1fU0NBTl9MVU5TX0RJU0FCTEVEOworCXRwLT51c3JfcGVyaW9kID0gKHRuLT5zeW5jX3BlcmlvZCArIDMpIC8gNDsKKwl0cC0+dXNyX3dpZHRoID0gKHRuLT5idXNfd2lkdGggPT0gMHg4KSA/IDAgOiAxOwogfQogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBUZWtyYW1fc3luY1sxNl0gPSB7CisJMjUsIDMxLCAzNywgNDMsIDUwLCA2MiwgNzUsIDEyNSwgMTIsIDE1LCAxOCwgMjEsIDYsIDcsIDksIDEwCit9OworCiAvKgogICogIEdldCB0YXJnZXQgc2V0LXVwIGZyb20gVGVrcmFtIGZvcm1hdCBOVlJBTS4KICAqLwogc3RhdGljIHZvaWQKLXN5bV9UZWtyYW1fc2V0dXBfdGFyZ2V0KHN0cnVjdCBzeW1faGNiICpucCwgaW50IHRhcmdldCwgVGVrcmFtX252cmFtICpudnJhbSkKK3N5bV9UZWtyYW1fc2V0dXBfdGFyZ2V0KHN0cnVjdCBzeW1fdGNiICp0cCwgaW50IHRhcmdldCwgVGVrcmFtX252cmFtICpudnJhbSkKIHsKLQlzdHJ1Y3Qgc3ltX3RjYiAqdHAgPSAmbnAtPnRhcmdldFt0YXJnZXRdOwogCXN0cnVjdCBUZWtyYW1fdGFyZ2V0ICp0biA9ICZudnJhbS0+dGFyZ2V0W3RhcmdldF07CiAKIAlpZiAodG4tPmZsYWdzICYgVEVLUkFNX1RBR0dFRF9DT01NQU5EUykgewpAQCAtMTI0LDIyICsxMjcsMjIgQEAKIAlpZiAodG4tPmZsYWdzICYgVEVLUkFNX0RJU0NPTk5FQ1RfRU5BQkxFKQogCQl0cC0+dXNyZmxhZ3MgfD0gU1lNX0RJU0NfRU5BQkxFRDsKICAKLQkvKiBJZiBhbnkgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgcGFyaXR5LCB3ZSB3aWxsIG5vdCB1c2UgdGhpcyBvcHRpb24gKi8KLQlpZiAoISh0bi0+ZmxhZ3MgJiBURUtSQU1fUEFSSVRZX0NIRUNLKSkKLQkJbnAtPnJ2X3NjbnRsMCAgJj0gfjB4MGE7IC8qIFNDU0kgcGFyaXR5IGNoZWNraW5nIGRpc2FibGVkICovCisJaWYgKHRuLT5mbGFncyAmIFRFS1JBTV9TWU5DX05FR08pCisJCXRwLT51c3JfcGVyaW9kID0gVGVrcmFtX3N5bmNbdG4tPnN5bmNfaW5kZXggJiAweGZdOworCXRwLT51c3Jfd2lkdGggPSAodG4tPmZsYWdzICYgVEVLUkFNX1dJREVfTkVHTykgPyAxIDogMDsKIH0KIAogLyoKICAqICBHZXQgdGFyZ2V0IHNldHVwIGZyb20gTlZSQU0uCiAgKi8KLXZvaWQgc3ltX252cmFtX3NldHVwX3RhcmdldChzdHJ1Y3Qgc3ltX2hjYiAqbnAsIGludCB0YXJnZXQsIHN0cnVjdCBzeW1fbnZyYW0gKm52cCkKK3ZvaWQgc3ltX252cmFtX3NldHVwX3RhcmdldChzdHJ1Y3Qgc3ltX3RjYiAqdHAsIGludCB0YXJnZXQsIHN0cnVjdCBzeW1fbnZyYW0gKm52cCkKIHsKIAlzd2l0Y2ggKG52cC0+dHlwZSkgewogCWNhc2UgU1lNX1NZTUJJT1NfTlZSQU06Ci0JCXN5bV9TeW1iaW9zX3NldHVwX3RhcmdldChucCwgdGFyZ2V0LCAmbnZwLT5kYXRhLlN5bWJpb3MpOworCQlzeW1fU3ltYmlvc19zZXR1cF90YXJnZXQodHAsIHRhcmdldCwgJm52cC0+ZGF0YS5TeW1iaW9zKTsKIAkJYnJlYWs7CiAJY2FzZSBTWU1fVEVLUkFNX05WUkFNOgotCQlzeW1fVGVrcmFtX3NldHVwX3RhcmdldChucCwgdGFyZ2V0LCAmbnZwLT5kYXRhLlRla3JhbSk7CisJCXN5bV9UZWtyYW1fc2V0dXBfdGFyZ2V0KHRwLCB0YXJnZXQsICZudnAtPmRhdGEuVGVrcmFtKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX252cmFtLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX252cmFtLmgKaW5kZXggMTUzOGJlZC4uYmRmYmJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9udnJhbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fbnZyYW0uaApAQCAtMTk0LDEyICsxOTQsMTIgQEAKIAogI2lmIFNZTV9DT05GX05WUkFNX1NVUFBPUlQKIHZvaWQgc3ltX252cmFtX3NldHVwX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9udnJhbSAqbnZyYW0pOwotdm9pZCBzeW1fbnZyYW1fc2V0dXBfdGFyZ2V0IChzdHJ1Y3Qgc3ltX2hjYiAqbnAsIGludCB0YXJnZXQsIHN0cnVjdCBzeW1fbnZyYW0gKm52cCk7Cit2b2lkIHN5bV9udnJhbV9zZXR1cF90YXJnZXQgKHN0cnVjdCBzeW1fdGNiICp0cCwgaW50IHRhcmdldCwgc3RydWN0IHN5bV9udnJhbSAqbnZwKTsKIGludCBzeW1fcmVhZF9udnJhbSAoc3RydWN0IHN5bV9kZXZpY2UgKm5wLCBzdHJ1Y3Qgc3ltX252cmFtICpudnApOwogY2hhciAqc3ltX252cmFtX3R5cGUoc3RydWN0IHN5bV9udnJhbSAqbnZwKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc3ltX252cmFtX3NldHVwX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBzeW1faGNiICpucCwgc3RydWN0IHN5bV9udnJhbSAqbnZyYW0pIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHN5bV9udnJhbV9zZXR1cF90YXJnZXQoc3RydWN0IHN5bV9oY2IgKm5wLCBzdHJ1Y3Qgc3ltX252cmFtICpudnJhbSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc3ltX252cmFtX3NldHVwX3RhcmdldChzdHJ1Y3Qgc3ltX3RjYiAqdHAsIHN0cnVjdCBzeW1fbnZyYW0gKm52cmFtKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHN5bV9yZWFkX252cmFtKHN0cnVjdCBzeW1fZGV2aWNlICpucCwgc3RydWN0IHN5bV9udnJhbSAqbnZwKQogewogCW52cC0+dHlwZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4X2NvbW0uaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfY29tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGFlMmIxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfY29tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqICBIaWdoIFBlcmZvcm1hbmNlIGRldmljZSBkcml2ZXIgZm9yIHRoZSBTeW1iaW9zIDUzQzg5NiBjb250cm9sbGVyLgotKioKLSoqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSAgR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+Ci0qKgotKiogIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgYWxsIHRoZSBTeW1iaW9zIDUzQzhYWCBjb250cm9sbGVyIGZhbWlseSwgCi0qKiAgZXhjZXB0IDUzQzgxMCByZXZpc2lvbnMgPCAxNiwgNTNDODI1IHJldmlzaW9ucyA8IDE2IGFuZCBhbGwgCi0qKiAgcmV2aXNpb25zIG9mIDUzQzgxNSBjb250cm9sbGVycy4KLSoqCi0qKiAgVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIExpbnV4IHBvcnQgb2YgdGhlIEZyZWVCU0QgbmNyIGRyaXZlci4KLSoqIAotKiogIENvcHlyaWdodCAoQykgMTk5NCAgV29sZmdhbmcgU3RhbmdsbWVpZXIKLSoqICAKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqICAKLSoqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKiogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0qKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSoqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKioKLSoqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSoqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKiogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSoqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKioKLSoqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0qKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqICBUaGUgTGludXggcG9ydCBvZiB0aGUgRnJlZUJTRCBuY3IgZHJpdmVyIGhhcyBiZWVuIGFjaGlldmVkIGluIAotKiogIG5vdmVtYmVyIDE5OTUgYnk6Ci0qKgotKiogICAgICAgICAgR2VyYXJkIFJvdWRpZXIgICAgICAgICAgICAgIDxncm91ZGllckBmcmVlLmZyPgotKioKLSoqICBCZWluZyBnaXZlbiB0aGF0IHRoaXMgZHJpdmVyIG9yaWdpbmF0ZXMgZnJvbSB0aGUgRnJlZUJTRCB2ZXJzaW9uLCBhbmQKLSoqICBpbiBvcmRlciB0byBrZWVwIHN5bmVyZ3kgb24gYm90aCwgYW55IHN1Z2dlc3RlZCBlbmhhbmNlbWVudHMgYW5kIGNvcnJlY3Rpb25zCi0qKiAgcmVjZWl2ZWQgb24gTGludXggYXJlIGF1dG9tYXRpY2FsbHkgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGZvciB0aGUgRnJlZUJTRCAKLSoqICB2ZXJzaW9uLgotKioKLSoqICBUaGUgb3JpZ2luYWwgZHJpdmVyIGhhcyBiZWVuIHdyaXR0ZW4gZm9yIDM4NmJzZCBhbmQgRnJlZUJTRCBieQotKiogICAgICAgICAgV29sZmdhbmcgU3RhbmdsbWVpZXIgICAgICAgIDx3b2xmQGNvbG9nbmUuZGU+Ci0qKiAgICAgICAgICBTdGVmYW4gRXNzZXIgICAgICAgICAgICAgICAgPHNlQG1pLlVuaS1Lb2Vsbi5kZT4KLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogIE1ham9yIGNvbnRyaWJ1dGlvbnM6Ci0qKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKiAgTlZSQU0gZGV0ZWN0aW9uIGFuZCByZWFkaW5nLgotKiogICAgQ29weXJpZ2h0IChDKSAxOTk3IFJpY2hhcmQgV2FsdGhhbSA8ZG9ybW91c2VAZmFyc3JvYnQuZGVtb24uY28udWs+Ci0qKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKgotKioJRGVidWdnaW5nIHRhZ3MKLSoqCi0qKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi0KLSNkZWZpbmUgREVCVUdfQUxMT0MgICAgKDB4MDAwMSkKLSNkZWZpbmUgREVCVUdfUEhBU0UgICAgKDB4MDAwMikKLSNkZWZpbmUgREVCVUdfUVVFVUUgICAgKDB4MDAwOCkKLSNkZWZpbmUgREVCVUdfUkVTVUxUICAgKDB4MDAxMCkKLSNkZWZpbmUgREVCVUdfUE9JTlRFUiAgKDB4MDAyMCkKLSNkZWZpbmUgREVCVUdfU0NSSVBUICAgKDB4MDA0MCkKLSNkZWZpbmUgREVCVUdfVElOWSAgICAgKDB4MDA4MCkKLSNkZWZpbmUgREVCVUdfVElNSU5HICAgKDB4MDEwMCkKLSNkZWZpbmUgREVCVUdfTkVHTyAgICAgKDB4MDIwMCkKLSNkZWZpbmUgREVCVUdfVEFHUyAgICAgKDB4MDQwMCkKLSNkZWZpbmUgREVCVUdfU0NBVFRFUiAgKDB4MDgwMCkKLSNkZWZpbmUgREVCVUdfSUMgICAgICAgICgweDEwMDApCi0KLS8qCi0qKiAgICBFbmFibGUvRGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy4KLSoqICAgIENhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdG9vLgotKi8KLQotI2lmZGVmIFNDU0lfTkNSX0RFQlVHX0lORk9fU1VQUE9SVAotc3RhdGljIGludCBuY3JfZGVidWcgPSBTQ1NJX05DUl9ERUJVR19GTEFHUzsKLQkjZGVmaW5lIERFQlVHX0ZMQUdTIG5jcl9kZWJ1ZwotI2Vsc2UKLQkjZGVmaW5lIERFQlVHX0ZMQUdTCVNDU0lfTkNSX0RFQlVHX0ZMQUdTCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICpuY3JfbGlzdF9wb3Aoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKLQkJc3RydWN0IGxpc3RfaGVhZCAqZWxlbSA9IGhlYWQtPm5leHQ7Ci0KLQkJbGlzdF9kZWwoZWxlbSk7Ci0JCXJldHVybiBlbGVtOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0jaWZkZWYgX19zcGFyY19fCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKioKLSoqCVNpbXBsZSBwb3dlciBvZiB0d28gYnVkZHktbGlrZSBhbGxvY2F0b3IuCi0qKgotKioJVGhpcyBzaW1wbGUgY29kZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZmFzdCwgYnV0IHRvIAotKioJcHJvdmlkZSBwb3dlciBvZiAyIGFsaWduZWQgbWVtb3J5IGFsbG9jYXRpb25zLgotKioJU2luY2UgdGhlIFNDUklQVFMgcHJvY2Vzc29yIG9ubHkgc3VwcGxpZXMgOCBiaXQgCi0qKglhcml0aG1ldGljLCB0aGlzIGFsbG9jYXRvciBhbGxvd3Mgc2ltcGxlIGFuZCBmYXN0IAotKioJYWRkcmVzcyBjYWxjdWxhdGlvbnMgIGZyb20gdGhlIFNDUklQVFMgY29kZS4KLSoqCUluIGFkZGl0aW9uLCBjYWNoZSBsaW5lIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGZvciAKLSoqCXBvd2VyIG9mIDIgY2FjaGUgbGluZSBzaXplLgotKioJRW5oYW5jZWQgaW4gbGludXgtMi4zLjQ0IHRvIHByb3ZpZGUgYSBtZW1vcnkgcG9vbCAKLSoqCXBlciBwY2lkZXYgdG8gc3VwcG9ydCBkeW5hbWljIGRtYSBtYXBwaW5nLiAoSSB3b3VsZCAKLSoqCWhhdmUgcHJlZmVycmVkIGEgcmVhbCBidXMgYXN0cmFjdGlvbiwgYnR3KS4KLSoqCi0qKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi0KLSNkZWZpbmUgTUVNT19TSElGVAk0CS8qIDE2IGJ5dGVzIG1pbmltdW0gbWVtb3J5IGNodW5rICovCi0jaWYgUEFHRV9TSVpFID49IDgxOTIKLSNkZWZpbmUgTUVNT19QQUdFX09SREVSCTAJLyogMSBQQUdFICBtYXhpbXVtICovCi0jZWxzZQotI2RlZmluZSBNRU1PX1BBR0VfT1JERVIJMQkvKiAyIFBBR0VTIG1heGltdW0gKi8KLSNlbmRpZgotI2RlZmluZSBNRU1PX0ZSRUVfVU5VU0VECS8qIEZyZWUgdW51c2VkIHBhZ2VzIGltbWVkaWF0ZWx5ICovCi0jZGVmaW5lIE1FTU9fV0FSTgkxCi0jZGVmaW5lIE1FTU9fR0ZQX0ZMQUdTCUdGUF9BVE9NSUMKLSNkZWZpbmUgTUVNT19DTFVTVEVSX1NISUZUCShQQUdFX1NISUZUK01FTU9fUEFHRV9PUkRFUikKLSNkZWZpbmUgTUVNT19DTFVTVEVSX1NJWkUJKDFVTCA8PCBNRU1PX0NMVVNURVJfU0hJRlQpCi0jZGVmaW5lIE1FTU9fQ0xVU1RFUl9NQVNLCShNRU1PX0NMVVNURVJfU0laRS0xKQotCi10eXBlZGVmIHVfbG9uZyBtX2FkZHJfdDsJLyogRW5vdWdoIGJpdHMgdG8gYml0LWhhY2sgYWRkcmVzc2VzICovCi10eXBlZGVmIHN0cnVjdCBkZXZpY2UgKm1fYnVzaF90OwkvKiBTb21ldGhpbmcgdGhhdCBhZGRyZXNzZXMgRE1BYWJsZSAqLwotCi10eXBlZGVmIHN0cnVjdCBtX2xpbmsgewkJLyogTGluayBiZXR3ZWVuIGZyZWUgbWVtb3J5IGNodW5rcyAqLwotCXN0cnVjdCBtX2xpbmsgKm5leHQ7Ci19IG1fbGlua19zOwotCi10eXBlZGVmIHN0cnVjdCBtX3Z0b2IgewkJLyogVmlydHVhbCB0byBCdXMgYWRkcmVzcyB0cmFuc2xhdGlvbiAqLwotCXN0cnVjdCBtX3Z0b2IgKm5leHQ7Ci0JbV9hZGRyX3QgdmFkZHI7Ci0JbV9hZGRyX3QgYmFkZHI7Ci19IG1fdnRvYl9zOwotI2RlZmluZSBWVE9CX0hBU0hfU0hJRlQJCTUKLSNkZWZpbmUgVlRPQl9IQVNIX1NJWkUJCSgxVUwgPDwgVlRPQl9IQVNIX1NISUZUKQotI2RlZmluZSBWVE9CX0hBU0hfTUFTSwkJKFZUT0JfSEFTSF9TSVpFLTEpCi0jZGVmaW5lIFZUT0JfSEFTSF9DT0RFKG0pCVwKLQkoKCgobV9hZGRyX3QpIChtKSkgPj4gTUVNT19DTFVTVEVSX1NISUZUKSAmIFZUT0JfSEFTSF9NQVNLKQotCi10eXBlZGVmIHN0cnVjdCBtX3Bvb2wgewkJLyogTWVtb3J5IHBvb2wgb2YgYSBnaXZlbiBraW5kICovCi0JbV9idXNoX3QgYnVzaDsKLQltX2FkZHJfdCAoKmdldHApKHN0cnVjdCBtX3Bvb2wgKik7Ci0Jdm9pZCAoKmZyZWVwKShzdHJ1Y3QgbV9wb29sICosIG1fYWRkcl90KTsKLQlpbnQgbnVtcDsKLQltX3Z0b2JfcyAqKHZ0b2JbVlRPQl9IQVNIX1NJWkVdKTsKLQlzdHJ1Y3QgbV9wb29sICpuZXh0OwotCXN0cnVjdCBtX2xpbmsgaFtQQUdFX1NISUZULU1FTU9fU0hJRlQrTUVNT19QQUdFX09SREVSKzFdOwotfSBtX3Bvb2xfczsKLQotc3RhdGljIHZvaWQgKl9fX21fYWxsb2MobV9wb29sX3MgKm1wLCBpbnQgc2l6ZSkKLXsKLQlpbnQgaSA9IDA7Ci0JaW50IHMgPSAoMSA8PCBNRU1PX1NISUZUKTsKLQlpbnQgajsKLQltX2FkZHJfdCBhOwotCW1fbGlua19zICpoID0gbXAtPmg7Ci0KLQlpZiAoc2l6ZSA+IChQQUdFX1NJWkUgPDwgTUVNT19QQUdFX09SREVSKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQl3aGlsZSAoc2l6ZSA+IHMpIHsKLQkJcyA8PD0gMTsKLQkJKytpOwotCX0KLQotCWogPSBpOwotCXdoaWxlICghaFtqXS5uZXh0KSB7Ci0JCWlmIChzID09IChQQUdFX1NJWkUgPDwgTUVNT19QQUdFX09SREVSKSkgewotCQkJaFtqXS5uZXh0ID0gKG1fbGlua19zICopbXAtPmdldHAobXApOwotCQkJaWYgKGhbal0ubmV4dCkKLQkJCQloW2pdLm5leHQtPm5leHQgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJKytqOwotCQlzIDw8PSAxOwotCX0KLQlhID0gKG1fYWRkcl90KSBoW2pdLm5leHQ7Ci0JaWYgKGEpIHsKLQkJaFtqXS5uZXh0ID0gaFtqXS5uZXh0LT5uZXh0OwotCQl3aGlsZSAoaiA+IGkpIHsKLQkJCWogLT0gMTsKLQkJCXMgPj49IDE7Ci0JCQloW2pdLm5leHQgPSAobV9saW5rX3MgKikgKGErcyk7Ci0JCQloW2pdLm5leHQtPm5leHQgPSBOVUxMOwotCQl9Ci0JfQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJfX19tX2FsbG9jKCVkKSA9ICVwXG4iLCBzaXplLCAodm9pZCAqKSBhKTsKLSNlbmRpZgotCXJldHVybiAodm9pZCAqKSBhOwotfQotCi1zdGF0aWMgdm9pZCBfX19tX2ZyZWUobV9wb29sX3MgKm1wLCB2b2lkICpwdHIsIGludCBzaXplKQotewotCWludCBpID0gMDsKLQlpbnQgcyA9ICgxIDw8IE1FTU9fU0hJRlQpOwotCW1fbGlua19zICpxOwotCW1fYWRkcl90IGEsIGI7Ci0JbV9saW5rX3MgKmggPSBtcC0+aDsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJfX19tX2ZyZWUoJXAsICVkKVxuIiwgcHRyLCBzaXplKTsKLSNlbmRpZgotCi0JaWYgKHNpemUgPiAoUEFHRV9TSVpFIDw8IE1FTU9fUEFHRV9PUkRFUikpCi0JCXJldHVybjsKLQotCXdoaWxlIChzaXplID4gcykgewotCQlzIDw8PSAxOwotCQkrK2k7Ci0JfQotCi0JYSA9IChtX2FkZHJfdCkgcHRyOwotCi0Jd2hpbGUgKDEpIHsKLSNpZmRlZiBNRU1PX0ZSRUVfVU5VU0VECi0JCWlmIChzID09IChQQUdFX1NJWkUgPDwgTUVNT19QQUdFX09SREVSKSkgewotCQkJbXAtPmZyZWVwKG1wLCBhKTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJYiA9IGEgXiBzOwotCQlxID0gJmhbaV07Ci0JCXdoaWxlIChxLT5uZXh0ICYmIHEtPm5leHQgIT0gKG1fbGlua19zICopIGIpIHsKLQkJCXEgPSBxLT5uZXh0OwotCQl9Ci0JCWlmICghcS0+bmV4dCkgewotCQkJKChtX2xpbmtfcyAqKSBhKS0+bmV4dCA9IGhbaV0ubmV4dDsKLQkJCWhbaV0ubmV4dCA9IChtX2xpbmtfcyAqKSBhOwotCQkJYnJlYWs7Ci0JCX0KLQkJcS0+bmV4dCA9IHEtPm5leHQtPm5leHQ7Ci0JCWEgPSBhICYgYjsKLQkJcyA8PD0gMTsKLQkJKytpOwotCX0KLX0KLQotc3RhdGljIERFRklORV9TUElOTE9DSyhuY3I1M2M4eHhfbG9jayk7Ci0KLXN0YXRpYyB2b2lkICpfX21fY2FsbG9jMihtX3Bvb2xfcyAqbXAsIGludCBzaXplLCBjaGFyICpuYW1lLCBpbnQgdWZsYWdzKQotewotCXZvaWQgKnA7Ci0KLQlwID0gX19fbV9hbGxvYyhtcCwgc2l6ZSk7Ci0KLQlpZiAoREVCVUdfRkxBR1MgJiBERUJVR19BTExPQykKLQkJcHJpbnRrICgibmV3ICUtMTBzWyU0ZF0gQCVwLlxuIiwgbmFtZSwgc2l6ZSwgcCk7Ci0KLQlpZiAocCkKLQkJbWVtc2V0KHAsIDAsIHNpemUpOwotCWVsc2UgaWYgKHVmbGFncyAmIE1FTU9fV0FSTikKLQkJcHJpbnRrIChOQU1FNTNDOFhYICI6IGZhaWxlZCB0byBhbGxvY2F0ZSAlc1slZF1cbiIsIG5hbWUsIHNpemUpOwotCi0JcmV0dXJuIHA7Ci19Ci0KLSNkZWZpbmUgX19tX2NhbGxvYyhtcCwgcywgbikJX19tX2NhbGxvYzIobXAsIHMsIG4sIE1FTU9fV0FSTikKLQotc3RhdGljIHZvaWQgX19tX2ZyZWUobV9wb29sX3MgKm1wLCB2b2lkICpwdHIsIGludCBzaXplLCBjaGFyICpuYW1lKQotewotCWlmIChERUJVR19GTEFHUyAmIERFQlVHX0FMTE9DKQotCQlwcmludGsgKCJmcmVlaW5nICUtMTBzWyU0ZF0gQCVwLlxuIiwgbmFtZSwgc2l6ZSwgcHRyKTsKLQotCV9fX21fZnJlZShtcCwgcHRyLCBzaXplKTsKLQotfQotCi0vKgotICogV2l0aCBwY2kgYnVzIGlvbW11IHN1cHBvcnQsIHdlIHVzZSBhIGRlZmF1bHQgcG9vbCBvZiB1bm1hcHBlZCBtZW1vcnkgCi0gKiBmb3IgbWVtb3J5IHdlIGRvbm5vdCBuZWVkIHRvIERNQSBmcm9tL3RvIGFuZCBvbmUgcG9vbCBwZXIgcGNpZGV2IGZvciAKLSAqIG1lbW9yeSBhY2Nlc3NlZCBieSB0aGUgUENJIGNoaXAuIGBtcDAnIGlzIHRoZSBkZWZhdWx0IG5vdCBETUFhYmxlIHBvb2wuCi0gKi8KLQotc3RhdGljIG1fYWRkcl90IF9fX21wMF9nZXRwKG1fcG9vbF9zICptcCkKLXsKLQltX2FkZHJfdCBtID0gX19nZXRfZnJlZV9wYWdlcyhNRU1PX0dGUF9GTEFHUywgTUVNT19QQUdFX09SREVSKTsKLQlpZiAobSkKLQkJKyttcC0+bnVtcDsKLQlyZXR1cm4gbTsKLX0KLQotc3RhdGljIHZvaWQgX19fbXAwX2ZyZWVwKG1fcG9vbF9zICptcCwgbV9hZGRyX3QgbSkKLXsKLQlmcmVlX3BhZ2VzKG0sIE1FTU9fUEFHRV9PUkRFUik7Ci0JLS1tcC0+bnVtcDsKLX0KLQotc3RhdGljIG1fcG9vbF9zIG1wMCA9IHtOVUxMLCBfX19tcDBfZ2V0cCwgX19fbXAwX2ZyZWVwfTsKLQotLyoKLSAqIERNQWFibGUgcG9vbHMuCi0gKi8KLQotLyoKLSAqIFdpdGggcGNpIGJ1cyBpb21tdSBzdXBwb3J0LCB3ZSBtYWludGFpbiBvbmUgcG9vbCBwZXIgcGNpZGV2IGFuZCBhIAotICogaGFzaGVkIHJldmVyc2UgdGFibGUgZm9yIHZpcnR1YWwgdG8gYnVzIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb25zLgotICovCi1zdGF0aWMgbV9hZGRyX3QgX19fZG1hX2dldHAobV9wb29sX3MgKm1wKQotewotCW1fYWRkcl90IHZwOwotCW1fdnRvYl9zICp2YnA7Ci0KLQl2YnAgPSBfX21fY2FsbG9jKCZtcDAsIHNpemVvZigqdmJwKSwgIlZUT0IiKTsKLQlpZiAodmJwKSB7Ci0JCWRtYV9hZGRyX3QgZGFkZHI7Ci0JCXZwID0gKG1fYWRkcl90KSBkbWFfYWxsb2NfY29oZXJlbnQobXAtPmJ1c2gsCi0JCQkJCQlQQUdFX1NJWkU8PE1FTU9fUEFHRV9PUkRFUiwKLQkJCQkJCSZkYWRkciwgR0ZQX0FUT01JQyk7Ci0JCWlmICh2cCkgewotCQkJaW50IGhjID0gVlRPQl9IQVNIX0NPREUodnApOwotCQkJdmJwLT52YWRkciA9IHZwOwotCQkJdmJwLT5iYWRkciA9IGRhZGRyOwotCQkJdmJwLT5uZXh0ID0gbXAtPnZ0b2JbaGNdOwotCQkJbXAtPnZ0b2JbaGNdID0gdmJwOwotCQkJKyttcC0+bnVtcDsKLQkJCXJldHVybiB2cDsKLQkJfQotCX0KLQlpZiAodmJwKQotCQlfX21fZnJlZSgmbXAwLCB2YnAsIHNpemVvZigqdmJwKSwgIlZUT0IiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19fZG1hX2ZyZWVwKG1fcG9vbF9zICptcCwgbV9hZGRyX3QgbSkKLXsKLQltX3Z0b2JfcyAqKnZicHAsICp2YnA7Ci0JaW50IGhjID0gVlRPQl9IQVNIX0NPREUobSk7Ci0KLQl2YnBwID0gJm1wLT52dG9iW2hjXTsKLQl3aGlsZSAoKnZicHAgJiYgKCp2YnBwKS0+dmFkZHIgIT0gbSkKLQkJdmJwcCA9ICYoKnZicHApLT5uZXh0OwotCWlmICgqdmJwcCkgewotCQl2YnAgPSAqdmJwcDsKLQkJKnZicHAgPSAoKnZicHApLT5uZXh0OwotCQlkbWFfZnJlZV9jb2hlcmVudChtcC0+YnVzaCwgUEFHRV9TSVpFPDxNRU1PX1BBR0VfT1JERVIsCi0JCQkJICAodm9pZCAqKXZicC0+dmFkZHIsIChkbWFfYWRkcl90KXZicC0+YmFkZHIpOwotCQlfX21fZnJlZSgmbXAwLCB2YnAsIHNpemVvZigqdmJwKSwgIlZUT0IiKTsKLQkJLS1tcC0+bnVtcDsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbV9wb29sX3MgKl9fX2dldF9kbWFfcG9vbChtX2J1c2hfdCBidXNoKQotewotCW1fcG9vbF9zICptcDsKLQlmb3IgKG1wID0gbXAwLm5leHQ7IG1wICYmIG1wLT5idXNoICE9IGJ1c2g7IG1wID0gbXAtPm5leHQpOwotCXJldHVybiBtcDsKLX0KLQotc3RhdGljIG1fcG9vbF9zICpfX19jcmVfZG1hX3Bvb2wobV9idXNoX3QgYnVzaCkKLXsKLQltX3Bvb2xfcyAqbXA7Ci0JbXAgPSBfX21fY2FsbG9jKCZtcDAsIHNpemVvZigqbXApLCAiTVBPT0wiKTsKLQlpZiAobXApIHsKLQkJbWVtc2V0KG1wLCAwLCBzaXplb2YoKm1wKSk7Ci0JCW1wLT5idXNoID0gYnVzaDsKLQkJbXAtPmdldHAgPSBfX19kbWFfZ2V0cDsKLQkJbXAtPmZyZWVwID0gX19fZG1hX2ZyZWVwOwotCQltcC0+bmV4dCA9IG1wMC5uZXh0OwotCQltcDAubmV4dCA9IG1wOwotCX0KLQlyZXR1cm4gbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fX2RlbF9kbWFfcG9vbChtX3Bvb2xfcyAqcCkKLXsKLQlzdHJ1Y3QgbV9wb29sICoqcHAgPSAmbXAwLm5leHQ7Ci0KLQl3aGlsZSAoKnBwICYmICpwcCAhPSBwKQotCQlwcCA9ICYoKnBwKS0+bmV4dDsKLQlpZiAoKnBwKSB7Ci0JCSpwcCA9ICgqcHApLT5uZXh0OwotCQlfX21fZnJlZSgmbXAwLCBwLCBzaXplb2YoKnApLCAiTVBPT0wiKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkICpfX21fY2FsbG9jX2RtYShtX2J1c2hfdCBidXNoLCBpbnQgc2l6ZSwgY2hhciAqbmFtZSkKLXsKLQl1X2xvbmcgZmxhZ3M7Ci0Jc3RydWN0IG1fcG9vbCAqbXA7Ci0Jdm9pZCAqbSA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbmNyNTNjOHh4X2xvY2ssIGZsYWdzKTsKLQltcCA9IF9fX2dldF9kbWFfcG9vbChidXNoKTsKLQlpZiAoIW1wKQotCQltcCA9IF9fX2NyZV9kbWFfcG9vbChidXNoKTsKLQlpZiAobXApCi0JCW0gPSBfX21fY2FsbG9jKG1wLCBzaXplLCBuYW1lKTsKLQlpZiAobXAgJiYgIW1wLT5udW1wKQotCQlfX19kZWxfZG1hX3Bvb2wobXApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5jcjUzYzh4eF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gbTsKLX0KLQotc3RhdGljIHZvaWQgX19tX2ZyZWVfZG1hKG1fYnVzaF90IGJ1c2gsIHZvaWQgKm0sIGludCBzaXplLCBjaGFyICpuYW1lKQotewotCXVfbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbV9wb29sICptcDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZuY3I1M2M4eHhfbG9jaywgZmxhZ3MpOwotCW1wID0gX19fZ2V0X2RtYV9wb29sKGJ1c2gpOwotCWlmIChtcCkKLQkJX19tX2ZyZWUobXAsIG0sIHNpemUsIG5hbWUpOwotCWlmIChtcCAmJiAhbXAtPm51bXApCi0JCV9fX2RlbF9kbWFfcG9vbChtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmNyNTNjOHh4X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIG1fYWRkcl90IF9fdnRvYnVzKG1fYnVzaF90IGJ1c2gsIHZvaWQgKm0pCi17Ci0JdV9sb25nIGZsYWdzOwotCW1fcG9vbF9zICptcDsKLQlpbnQgaGMgPSBWVE9CX0hBU0hfQ09ERShtKTsKLQltX3Z0b2JfcyAqdnAgPSBOVUxMOwotCW1fYWRkcl90IGEgPSAoKG1fYWRkcl90KSBtKSAmIH5NRU1PX0NMVVNURVJfTUFTSzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZuY3I1M2M4eHhfbG9jaywgZmxhZ3MpOwotCW1wID0gX19fZ2V0X2RtYV9wb29sKGJ1c2gpOwotCWlmIChtcCkgewotCQl2cCA9IG1wLT52dG9iW2hjXTsKLQkJd2hpbGUgKHZwICYmIChtX2FkZHJfdCkgdnAtPnZhZGRyICE9IGEpCi0JCQl2cCA9IHZwLT5uZXh0OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuY3I1M2M4eHhfbG9jaywgZmxhZ3MpOwotCXJldHVybiB2cCA/IHZwLT5iYWRkciArICgoKG1fYWRkcl90KSBtKSAtIGEpIDogMDsKLX0KLQotI2RlZmluZSBfbV9jYWxsb2NfZG1hKG5wLCBzLCBuKQkJX19tX2NhbGxvY19kbWEobnAtPmRldiwgcywgbikKLSNkZWZpbmUgX21fZnJlZV9kbWEobnAsIHAsIHMsIG4pCV9fbV9mcmVlX2RtYShucC0+ZGV2LCBwLCBzLCBuKQotI2RlZmluZSBtX2NhbGxvY19kbWEocywgbikJCV9tX2NhbGxvY19kbWEobnAsIHMsIG4pCi0jZGVmaW5lIG1fZnJlZV9kbWEocCwgcywgbikJCV9tX2ZyZWVfZG1hKG5wLCBwLCBzLCBuKQotI2RlZmluZSBfdnRvYnVzKG5wLCBwKQkJCV9fdnRvYnVzKG5wLT5kZXYsIHApCi0jZGVmaW5lIHZ0b2J1cyhwKQkJCV92dG9idXMobnAsIHApCi0KLS8qCi0gKiAgRGVhbCB3aXRoIERNQSBtYXBwaW5nL3VubWFwcGluZy4KLSAqLwotCi0vKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBkbWEgbWFwcGluZyAoc2cvc2luZ2xlKSB0aGF0IGhhcyBiZWVuIHNldCAqLwotI2RlZmluZSBfX2RhdGFfbWFwcGVkCVNDcC5waGFzZQotI2RlZmluZSBfX2RhdGFfbWFwcGluZwlTQ3AuaGF2ZV9kYXRhX2luCi0KLXN0YXRpYyB2b2lkIF9fdW5tYXBfc2NzaV9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCXN3aXRjaChjbWQtPl9fZGF0YV9tYXBwZWQpIHsKLQljYXNlIDI6Ci0JCWRtYV91bm1hcF9zZyhkZXYsIGNtZC0+YnVmZmVyLCBjbWQtPnVzZV9zZywKLQkJCQljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgY21kLT5fX2RhdGFfbWFwcGluZywKLQkJCQkgY21kLT5yZXF1ZXN0X2J1ZmZsZW4sCi0JCQkJIGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQlicmVhazsKLQl9Ci0JY21kLT5fX2RhdGFfbWFwcGVkID0gMDsKLX0KLQotc3RhdGljIHVfbG9uZyBfX21hcF9zY3NpX3NpbmdsZV9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCWRtYV9hZGRyX3QgbWFwcGluZzsKLQotCWlmIChjbWQtPnJlcXVlc3RfYnVmZmxlbiA9PSAwKQotCQlyZXR1cm4gMDsKLQotCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNtZC0+cmVxdWVzdF9idWZmZXIsCi0JCQkJIGNtZC0+cmVxdWVzdF9idWZmbGVuLAotCQkJCSBjbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQljbWQtPl9fZGF0YV9tYXBwZWQgPSAxOwotCWNtZC0+X19kYXRhX21hcHBpbmcgPSBtYXBwaW5nOwotCi0JcmV0dXJuIG1hcHBpbmc7Ci19Ci0KLXN0YXRpYyBpbnQgX19tYXBfc2NzaV9zZ19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCWludCB1c2Vfc2c7Ci0KLQlpZiAoY21kLT51c2Vfc2cgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQl1c2Vfc2cgPSBkbWFfbWFwX3NnKGRldiwgY21kLT5idWZmZXIsIGNtZC0+dXNlX3NnLAotCQkJY21kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JY21kLT5fX2RhdGFfbWFwcGVkID0gMjsKLQljbWQtPl9fZGF0YV9tYXBwaW5nID0gdXNlX3NnOwotCi0JcmV0dXJuIHVzZV9zZzsKLX0KLQotI2RlZmluZSB1bm1hcF9zY3NpX2RhdGEobnAsIGNtZCkJX191bm1hcF9zY3NpX2RhdGEobnAtPmRldiwgY21kKQotI2RlZmluZSBtYXBfc2NzaV9zaW5nbGVfZGF0YShucCwgY21kKQlfX21hcF9zY3NpX3NpbmdsZV9kYXRhKG5wLT5kZXYsIGNtZCkKLSNkZWZpbmUgbWFwX3Njc2lfc2dfZGF0YShucCwgY21kKQlfX21hcF9zY3NpX3NnX2RhdGEobnAtPmRldiwgY21kKQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoqCi0qKglEcml2ZXIgc2V0dXAuCi0qKgotKioJVGhpcyBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgZnJvbSBsaW51eCBjb25maWcgCi0qKglvcHRpb25zLiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBib290LXVwIGJ5IHRoZSBib290IAotKioJY29tbWFuZCBsaW5lLgotKioKLSoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXN0YXRpYyBzdHJ1Y3QgbmNyX2RyaXZlcl9zZXR1cAotCWRyaXZlcl9zZXR1cAkJCT0gU0NTSV9OQ1JfRFJJVkVSX1NFVFVQOwotCi0jaWZkZWYJU0NTSV9OQ1JfQk9PVF9DT01NQU5EX0xJTkVfU1VQUE9SVAotc3RhdGljIHN0cnVjdCBuY3JfZHJpdmVyX3NldHVwCi0JZHJpdmVyX3NhZmVfc2V0dXAgX19pbml0ZGF0YQk9IFNDU0lfTkNSX0RSSVZFUl9TQUZFX1NFVFVQOwotI2VuZGlmCi0KLSNkZWZpbmUgaW5pdHZlcmJvc2UgKGRyaXZlcl9zZXR1cC52ZXJib3NlKQotI2RlZmluZSBib290dmVyYm9zZSAobnAtPnZlcmJvc2UpCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKgotKioJRHJpdmVyIHNldHVwIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lCi0qKgotKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotCi0jaWZkZWYgTU9EVUxFCi0jZGVmaW5lCUFSR19TRVAJJyAnCi0jZWxzZQotI2RlZmluZQlBUkdfU0VQCScsJwotI2VuZGlmCi0KLSNkZWZpbmUgT1BUX1RBR1MJCTEKLSNkZWZpbmUgT1BUX01BU1RFUl9QQVJJVFkJMgotI2RlZmluZSBPUFRfU0NTSV9QQVJJVFkJCTMKLSNkZWZpbmUgT1BUX0RJU0NPTk5FQ1RJT04JNAotI2RlZmluZSBPUFRfU1BFQ0lBTF9GRUFUVVJFUwk1Ci0jZGVmaW5lIE9QVF9VTlVTRURfMQkJNgotI2RlZmluZSBPUFRfRk9SQ0VfU1lOQ19ORUdPCTcKLSNkZWZpbmUgT1BUX1JFVkVSU0VfUFJPQkUJOAotI2RlZmluZSBPUFRfREVGQVVMVF9TWU5DCTkKLSNkZWZpbmUgT1BUX1ZFUkJPU0UJCTEwCi0jZGVmaW5lIE9QVF9ERUJVRwkJMTEKLSNkZWZpbmUgT1BUX0JVUlNUX01BWAkJMTIKLSNkZWZpbmUgT1BUX0xFRF9QSU4JCTEzCi0jZGVmaW5lIE9QVF9NQVhfV0lERQkJMTQKLSNkZWZpbmUgT1BUX1NFVFRMRV9ERUxBWQkxNQotI2RlZmluZSBPUFRfRElGRl9TVVBQT1JUCTE2Ci0jZGVmaW5lIE9QVF9JUlFNCQkxNwotI2RlZmluZSBPUFRfUENJX0ZJWF9VUAkJMTgKLSNkZWZpbmUgT1BUX0JVU19DSEVDSwkJMTkKLSNkZWZpbmUgT1BUX09QVElNSVpFCQkyMAotI2RlZmluZSBPUFRfUkVDT1ZFUlkJCTIxCi0jZGVmaW5lIE9QVF9TQUZFX1NFVFVQCQkyMgotI2RlZmluZSBPUFRfVVNFX05WUkFNCQkyMwotI2RlZmluZSBPUFRfRVhDTFVERQkJMjQKLSNkZWZpbmUgT1BUX0hPU1RfSUQJCTI1Ci0KLSNpZmRlZiBTQ1NJX05DUl9JQVJCX1NVUFBPUlQKLSNkZWZpbmUgT1BUX0lBUkIJCTI2Ci0jZW5kaWYKLQotc3RhdGljIGNoYXIgc2V0dXBfdG9rZW5bXSBfX2luaXRkYXRhID0gCi0JInRhZ3M6IiAgICJtcGFyOiIKLQkic3BhcjoiICAgImRpc2M6IgotCSJzcGVjZjoiICAidWx0cmE6IgotCSJmc246IiAgICAicmV2cHJvYjoiCi0JInN5bmM6IiAgICJ2ZXJiOiIKLQkiZGVidWc6IiAgImJ1cnN0OiIKLQkibGVkOiIgICAgIndpZGU6IgotCSJzZXR0bGU6IiAiZGlmZjoiCi0JImlycW06IiAgICJwY2lmaXg6IgotCSJidXNjaGs6IiAib3B0aW06IgotCSJyZWNvdmVyeToiCi0JInNhZmU6IiAgICJudnJhbToiCi0JImV4Y2w6IiAgICJob3N0aWQ6IgotI2lmZGVmIFNDU0lfTkNSX0lBUkJfU1VQUE9SVAotCSJpYXJiOiIKLSNlbmRpZgotCTsJLyogRE9OTk9UIFJFTU9WRSBUSElTICc7JyAqLwotCi0jaWZkZWYgTU9EVUxFCi0jZGVmaW5lCUFSR19TRVAJJyAnCi0jZWxzZQotI2RlZmluZQlBUkdfU0VQCScsJwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19pbml0IGdldF9zZXR1cF90b2tlbihjaGFyICpwKQotewotCWNoYXIgKmN1ciA9IHNldHVwX3Rva2VuOwotCWNoYXIgKnBjOwotCWludCBpID0gMDsKLQotCXdoaWxlIChjdXIgIT0gTlVMTCAmJiAocGMgPSBzdHJjaHIoY3VyLCAnOicpKSAhPSBOVUxMKSB7Ci0JCSsrcGM7Ci0JCSsraTsKLQkJaWYgKCFzdHJuY21wKHAsIGN1ciwgcGMgLSBjdXIpKQotCQkJcmV0dXJuIGk7Ci0JCWN1ciA9IHBjOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBzeW01M2M4eHhfX3NldHVwKGNoYXIgKnN0cikKLXsKLSNpZmRlZiBTQ1NJX05DUl9CT09UX0NPTU1BTkRfTElORV9TVVBQT1JUCi0JY2hhciAqY3VyID0gc3RyOwotCWNoYXIgKnBjLCAqcHY7Ci0JaW50IGksIHZhbCwgYzsKLQlpbnQgeGkgPSAwOwotCi0Jd2hpbGUgKGN1ciAhPSBOVUxMICYmIChwYyA9IHN0cmNocihjdXIsICc6JykpICE9IE5VTEwpIHsKLQkJY2hhciAqcGU7Ci0KLQkJdmFsID0gMDsKLQkJcHYgPSBwYzsKLQkJYyA9ICorK3B2OwotCi0JCWlmCShjID09ICduJykKLQkJCXZhbCA9IDA7Ci0JCWVsc2UgaWYJKGMgPT0gJ3knKQotCQkJdmFsID0gMTsKLQkJZWxzZQotCQkJdmFsID0gKGludCkgc2ltcGxlX3N0cnRvdWwocHYsICZwZSwgMCk7Ci0KLQkJc3dpdGNoIChnZXRfc2V0dXBfdG9rZW4oY3VyKSkgewotCQljYXNlIE9QVF9UQUdTOgotCQkJZHJpdmVyX3NldHVwLmRlZmF1bHRfdGFncyA9IHZhbDsKLQkJCWlmIChwZSAmJiAqcGUgPT0gJy8nKSB7Ci0JCQkJaSA9IDA7Ci0JCQkJd2hpbGUgKCpwZSAmJiAqcGUgIT0gQVJHX1NFUCAmJiAKLQkJCQkJaSA8IHNpemVvZihkcml2ZXJfc2V0dXAudGFnX2N0cmwpLTEpIHsKLQkJCQkJZHJpdmVyX3NldHVwLnRhZ19jdHJsW2krK10gPSAqcGUrKzsKLQkJCQl9Ci0JCQkJZHJpdmVyX3NldHVwLnRhZ19jdHJsW2ldID0gJ1wwJzsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIE9QVF9NQVNURVJfUEFSSVRZOgotCQkJZHJpdmVyX3NldHVwLm1hc3Rlcl9wYXJpdHkgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfU0NTSV9QQVJJVFk6Ci0JCQlkcml2ZXJfc2V0dXAuc2NzaV9wYXJpdHkgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfRElTQ09OTkVDVElPTjoKLQkJCWRyaXZlcl9zZXR1cC5kaXNjb25uZWN0aW9uID0gdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BUX1NQRUNJQUxfRkVBVFVSRVM6Ci0JCQlkcml2ZXJfc2V0dXAuc3BlY2lhbF9mZWF0dXJlcyA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIE9QVF9GT1JDRV9TWU5DX05FR086Ci0JCQlkcml2ZXJfc2V0dXAuZm9yY2Vfc3luY19uZWdvID0gdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BUX1JFVkVSU0VfUFJPQkU6Ci0JCQlkcml2ZXJfc2V0dXAucmV2ZXJzZV9wcm9iZSA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIE9QVF9ERUZBVUxUX1NZTkM6Ci0JCQlkcml2ZXJfc2V0dXAuZGVmYXVsdF9zeW5jID0gdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BUX1ZFUkJPU0U6Ci0JCQlkcml2ZXJfc2V0dXAudmVyYm9zZSA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIE9QVF9ERUJVRzoKLQkJCWRyaXZlcl9zZXR1cC5kZWJ1ZyA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIE9QVF9CVVJTVF9NQVg6Ci0JCQlkcml2ZXJfc2V0dXAuYnVyc3RfbWF4ID0gdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BUX0xFRF9QSU46Ci0JCQlkcml2ZXJfc2V0dXAubGVkX3BpbiA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIE9QVF9NQVhfV0lERToKLQkJCWRyaXZlcl9zZXR1cC5tYXhfd2lkZSA9IHZhbD8gMTowOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BUX1NFVFRMRV9ERUxBWToKLQkJCWRyaXZlcl9zZXR1cC5zZXR0bGVfZGVsYXkgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfRElGRl9TVVBQT1JUOgotCQkJZHJpdmVyX3NldHVwLmRpZmZfc3VwcG9ydCA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIE9QVF9JUlFNOgotCQkJZHJpdmVyX3NldHVwLmlycW0gPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfUENJX0ZJWF9VUDoKLQkJCWRyaXZlcl9zZXR1cC5wY2lfZml4X3VwCT0gdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BUX0JVU19DSEVDSzoKLQkJCWRyaXZlcl9zZXR1cC5idXNfY2hlY2sgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfT1BUSU1JWkU6Ci0JCQlkcml2ZXJfc2V0dXAub3B0aW1pemUgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfUkVDT1ZFUlk6Ci0JCQlkcml2ZXJfc2V0dXAucmVjb3ZlcnkgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfVVNFX05WUkFNOgotCQkJZHJpdmVyX3NldHVwLnVzZV9udnJhbSA9IHZhbDsKLQkJCWJyZWFrOwotCQljYXNlIE9QVF9TQUZFX1NFVFVQOgotCQkJbWVtY3B5KCZkcml2ZXJfc2V0dXAsICZkcml2ZXJfc2FmZV9zZXR1cCwKLQkJCQlzaXplb2YoZHJpdmVyX3NldHVwKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfRVhDTFVERToKLQkJCWlmICh4aSA8IFNDU0lfTkNSX01BWF9FWENMVURFUykKLQkJCQlkcml2ZXJfc2V0dXAuZXhjbHVkZXNbeGkrK10gPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRfSE9TVF9JRDoKLQkJCWRyaXZlcl9zZXR1cC5ob3N0X2lkID0gdmFsOwotCQkJYnJlYWs7Ci0jaWZkZWYgU0NTSV9OQ1JfSUFSQl9TVVBQT1JUCi0JCWNhc2UgT1BUX0lBUkI6Ci0JCQlkcml2ZXJfc2V0dXAuaWFyYiA9IHZhbDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoInN5bTUzYzh4eF9zZXR1cDogdW5leHBlY3RlZCBib290IG9wdGlvbiAnJS4qcycgaWdub3JlZFxuIiwgKGludCkocGMtY3VyKzEpLCBjdXIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKGN1ciA9IHN0cmNocihjdXIsIEFSR19TRVApKSAhPSBOVUxMKQotCQkJKytjdXI7Ci0JfQotI2VuZGlmIC8qIFNDU0lfTkNSX0JPT1RfQ09NTUFORF9MSU5FX1NVUFBPUlQgKi8KLQlyZXR1cm4gMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKgotKioJR2V0IGRldmljZSBxdWV1ZSBkZXB0aCBmcm9tIGJvb3QgY29tbWFuZCBsaW5lLgotKioKLSoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLSNkZWZpbmUgREVGX0RFUFRICShkcml2ZXJfc2V0dXAuZGVmYXVsdF90YWdzKQotI2RlZmluZSBBTExfVEFSR0VUUwktMgotI2RlZmluZSBOT19UQVJHRVQJLTEKLSNkZWZpbmUgQUxMX0xVTlMJLTIKLSNkZWZpbmUgTk9fTFVOCQktMQotCi1zdGF0aWMgaW50IGRldmljZV9xdWV1ZV9kZXB0aChpbnQgdW5pdCwgaW50IHRhcmdldCwgaW50IGx1bikKLXsKLQlpbnQgYywgaCwgdCwgdSwgdjsKLQljaGFyICpwID0gZHJpdmVyX3NldHVwLnRhZ19jdHJsOwotCWNoYXIgKmVwOwotCi0JaCA9IC0xOwotCXQgPSBOT19UQVJHRVQ7Ci0JdSA9IE5PX0xVTjsKLQl3aGlsZSAoKGMgPSAqcCsrKSAhPSAwKSB7Ci0JCXYgPSBzaW1wbGVfc3RydG91bChwLCAmZXAsIDApOwotCQlzd2l0Y2goYykgewotCQljYXNlICcvJzoKLQkJCSsraDsKLQkJCXQgPSBBTExfVEFSR0VUUzsKLQkJCXUgPSBBTExfTFVOUzsKLQkJCWJyZWFrOwotCQljYXNlICd0JzoKLQkJCWlmICh0ICE9IHRhcmdldCkKLQkJCQl0ID0gKHRhcmdldCA9PSB2KSA/IHYgOiBOT19UQVJHRVQ7Ci0JCQl1ID0gQUxMX0xVTlM7Ci0JCQlicmVhazsKLQkJY2FzZSAndSc6Ci0JCQlpZiAodSAhPSBsdW4pCi0JCQkJdSA9IChsdW4gPT0gdikgPyB2IDogTk9fTFVOOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ3EnOgotCQkJaWYgKGggPT0gdW5pdCAmJgotCQkJCSh0ID09IEFMTF9UQVJHRVRTIHx8IHQgPT0gdGFyZ2V0KSAmJgotCQkJCSh1ID09IEFMTF9MVU5TICAgIHx8IHUgPT0gbHVuKSkKLQkJCQlyZXR1cm4gdjsKLQkJCWJyZWFrOwotCQljYXNlICctJzoKLQkJCXQgPSBBTExfVEFSR0VUUzsKLQkJCXUgPSBBTExfTFVOUzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJcCA9IGVwOwotCX0KLQlyZXR1cm4gREVGX0RFUFRIOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF9kZWZzLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4X2RlZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM5Y2QwZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4X2RlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogIEhpZ2ggUGVyZm9ybWFuY2UgZGV2aWNlIGRyaXZlciBmb3IgdGhlIFN5bWJpb3MgNTNDODk2IGNvbnRyb2xsZXIuCi0qKgotKiogIENvcHlyaWdodCAoQykgMTk5OC0yMDAxICBHZXJhcmQgUm91ZGllciA8Z3JvdWRpZXJAZnJlZS5mcj4KLSoqCi0qKiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBhbGwgdGhlIFN5bWJpb3MgNTNDOFhYIGNvbnRyb2xsZXIgZmFtaWx5LCAKLSoqICBleGNlcHQgNTNDODEwIHJldmlzaW9ucyA8IDE2LCA1M0M4MjUgcmV2aXNpb25zIDwgMTYgYW5kIGFsbCAKLSoqICByZXZpc2lvbnMgb2YgNTNDODE1IGNvbnRyb2xsZXJzLgotKioKLSoqICBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgTGludXggcG9ydCBvZiB0aGUgRnJlZUJTRCBuY3IgZHJpdmVyLgotKiogCi0qKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBXb2xmZ2FuZyBTdGFuZ2xtZWllcgotKiogIAotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiogIAotKiogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0qKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSoqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotKiogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qKgotKiogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKiogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKiogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qKgotKiogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSoqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogIFRoZSBMaW51eCBwb3J0IG9mIHRoZSBGcmVlQlNEIG5jciBkcml2ZXIgaGFzIGJlZW4gYWNoaWV2ZWQgaW4gCi0qKiAgbm92ZW1iZXIgMTk5NSBieToKLSoqCi0qKiAgICAgICAgICBHZXJhcmQgUm91ZGllciAgICAgICAgICAgICAgPGdyb3VkaWVyQGZyZWUuZnI+Ci0qKgotKiogIEJlaW5nIGdpdmVuIHRoYXQgdGhpcyBkcml2ZXIgb3JpZ2luYXRlcyBmcm9tIHRoZSBGcmVlQlNEIHZlcnNpb24sIGFuZAotKiogIGluIG9yZGVyIHRvIGtlZXAgc3luZXJneSBvbiBib3RoLCBhbnkgc3VnZ2VzdGVkIGVuaGFuY2VtZW50cyBhbmQgY29ycmVjdGlvbnMKLSoqICByZWNlaXZlZCBvbiBMaW51eCBhcmUgYXV0b21hdGljYWxseSBhIHBvdGVudGlhbCBjYW5kaWRhdGUgZm9yIHRoZSBGcmVlQlNEIAotKiogIHZlcnNpb24uCi0qKgotKiogIFRoZSBvcmlnaW5hbCBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiBmb3IgMzg2YnNkIGFuZCBGcmVlQlNEIGJ5Ci0qKiAgICAgICAgICBXb2xmZ2FuZyBTdGFuZ2xtZWllciAgICAgICAgPHdvbGZAY29sb2duZS5kZT4KLSoqICAgICAgICAgIFN0ZWZhbiBFc3NlciAgICAgICAgICAgICAgICA8c2VAbWkuVW5pLUtvZWxuLmRlPgotKioKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKiAgTWFqb3IgY29udHJpYnV0aW9uczoKLSoqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqICBOVlJBTSBkZXRlY3Rpb24gYW5kIHJlYWRpbmcuCi0qKiAgICBDb3B5cmlnaHQgKEMpIDE5OTcgUmljaGFyZCBXYWx0aGFtIDxkb3Jtb3VzZUBmYXJzcm9idC5kZW1vbi5jby51az4KLSoqCi0qKiAgQWRkZWQgc3VwcG9ydCBmb3IgTUlQUyBiaWcgZW5kaWFuIHN5c3RlbXMuCi0qKiAgICBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSoqICAgIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoqCi0qKiAgQWRkZWQgc3VwcG9ydCBmb3IgSFAgUEFSSVNDIGJpZyBlbmRpYW4gc3lzdGVtcy4KLSoqICAgIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotCi0jaWZuZGVmIFNZTTUzQzhYWF9ERUZTX0gKLSNkZWZpbmUgU1lNNTNDOFhYX0RFRlNfSAotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLS8qCi0qKglJZiB5b3Ugd2FudCBhIGRyaXZlciBhcyBzbWFsbCBhcyBwb3NzaWJsZSwgZG9ubm90IGRlZmluZSB0aGUgCi0qKglmb2xsb3dpbmcgb3B0aW9ucy4KLSovCi0jZGVmaW5lIFNDU0lfTkNSX0JPT1RfQ09NTUFORF9MSU5FX1NVUFBPUlQKLSNkZWZpbmUgU0NTSV9OQ1JfREVCVUdfSU5GT19TVVBQT1JUCi0KLS8qCi0qKglUbyBkaXNhYmxlIGludGVncml0eSBjaGVja2luZywgZG8gbm90IGRlZmluZSB0aGUgCi0qKglmb2xsb3dpbmcgb3B0aW9uLgotKi8KLSNpZmRlZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfSU5URUdSSVRZX0NIRUNLCi0jCWRlZmluZSBTQ1NJX05DUl9FTkFCTEVfSU5URUdSSVRZX0NIRUNLCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKiBUYWtlIGludG8gYWNjb3VudCBrZXJuZWwgY29uZmlndXJlZCBwYXJhbWV0ZXJzLgotKiogTW9zdCBvZiB0aGVzZSBvcHRpb25zIGNhbiBiZSBvdmVycmlkZGVuIGF0IHN0YXJ0dXAgYnkgYSBjb21tYW5kIGxpbmUuCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLS8qCi0gKiBGb3IgVWx0cmEyIGFuZCBVbHRyYTMgU0NTSSBzdXBwb3J0IG9wdGlvbiwgdXNlIHNwZWNpYWwgZmVhdHVyZXMuIAotICoKLSAqIFZhbHVlIChkZWZhdWx0KSBtZWFuczoKLSAqCWJpdCAwIDogYWxsIGZlYXR1cmVzIGVuYWJsZWQsIGV4Y2VwdDoKLSAqCQliaXQgMSA6IFBDSSBXcml0ZSBBbmQgSW52YWxpZGF0ZS4KLSAqCQliaXQgMiA6IERhdGEgUGhhc2UgTWlzbWF0Y2ggaGFuZGxpbmcgZnJvbSBTQ1JJUFRTLgotICoKLSAqIFVzZSBib290IG9wdGlvbnMgbmNyNTNjOHh4PXNwZWNmOjEgaWYgeW91IHdhbnQgYWxsIGNoaXAgZmVhdHVyZXMgdG8gYmUgCi0gKiBlbmFibGVkIGJ5IHRoZSBkcml2ZXIuCi0gKi8KLSNkZWZpbmUJU0NTSV9OQ1JfU0VUVVBfU1BFQ0lBTF9GRUFUVVJFUwkJKDMpCi0KLSNkZWZpbmUgU0NTSV9OQ1JfTUFYX1NZTkMJCQkoODApCi0KLS8qCi0gKiBBbGxvdyB0YWdzIGZyb20gMiB0byAyNTYsIGRlZmF1bHQgOAotICovCi0jaWZkZWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTCi0jaWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTIDwgMgotI2RlZmluZSBTQ1NJX05DUl9NQVhfVEFHUwkoMikKLSNlbGlmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9NQVhfVEFHUyA+IDI1NgotI2RlZmluZSBTQ1NJX05DUl9NQVhfVEFHUwkoMjU2KQotI2Vsc2UKLSNkZWZpbmUJU0NTSV9OQ1JfTUFYX1RBR1MJQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTCi0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIFNDU0lfTkNSX01BWF9UQUdTCSg4KQotI2VuZGlmCi0KLS8qCi0gKiBBbGxvdyB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIHN1cHBvcnQgaWYgY29uZmlndXJlZCB3aXRoIGRlZmF1bHQgbnVtYmVyIAotICogb2YgdGFncyBzZXQgdG8gbWF4IChzZWUgYWJvdmUpLgotICovCi0jaWZkZWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX0RFRkFVTFRfVEFHUwotI2RlZmluZQlTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1RBR1MJQ09ORklHX1NDU0lfTkNSNTNDOFhYX0RFRkFVTFRfVEFHUwotI2VsaWYJZGVmaW5lZCBDT05GSUdfU0NTSV9OQ1I1M0M4WFhfVEFHR0VEX1FVRVVFCi0jZGVmaW5lCVNDU0lfTkNSX1NFVFVQX0RFRkFVTFRfVEFHUwlTQ1NJX05DUl9NQVhfVEFHUwotI2Vsc2UKLSNkZWZpbmUJU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9UQUdTCSgwKQotI2VuZGlmCi0KLS8qCi0gKiBJbW1lZGlhdGUgYXJiaXRyYXRpb24KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfTkNSNTNDOFhYX0lBUkIpCi0jZGVmaW5lIFNDU0lfTkNSX0lBUkJfU1VQUE9SVAotI2VuZGlmCi0KLS8qCi0gKiBTeW5jIHRyYW5zZmVyIGZyZXF1ZW5jeSBhdCBzdGFydHVwLgotICogQWxsb3cgZnJvbSA1TWh6IHRvIDgwTWh6IGRlZmF1bHQgMjAgTWh6LgotICovCi0jaWZuZGVmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU5DCi0jZGVmaW5lCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU5DCSgyMCkKLSNlbGlmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU5DID4gU0NTSV9OQ1JfTUFYX1NZTkMKLSN1bmRlZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQwotI2RlZmluZQlDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQwlTQ1NJX05DUl9NQVhfU1lOQwotI2VuZGlmCi0KLSNpZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQyA9PSAwCi0jZGVmaW5lCVNDU0lfTkNSX1NFVFVQX0RFRkFVTFRfU1lOQwkoMjU1KQotI2VsaWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTkMgPD0gNQotI2RlZmluZQlTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1NZTkMJKDUwKQotI2VsaWYJQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTkMgPD0gMjAKLSNkZWZpbmUJU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9TWU5DCSgyNTAvKENPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU5DKSkKLSNlbGlmCUNPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU5DIDw9IDMzCi0jZGVmaW5lCVNDU0lfTkNSX1NFVFVQX0RFRkFVTFRfU1lOQwkoMTEpCi0jZWxpZglDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQyA8PSA0MAotI2RlZmluZQlTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1NZTkMJKDEwKQotI2Vsc2UKLSNkZWZpbmUJU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9TWU5DIAkoOSkKLSNlbmRpZgotCi0vKgotICogRGlzYWxsb3cgZGlzY29ubmVjdGlvbnMgYXQgYm9vdC11cAotICovCi0jaWZkZWYgQ09ORklHX1NDU0lfTkNSNTNDOFhYX05PX0RJU0NPTk5FQ1QKLSNkZWZpbmUgU0NTSV9OQ1JfU0VUVVBfRElTQ09OTkVDVElPTgkoMCkKLSNlbHNlCi0jZGVmaW5lIFNDU0lfTkNSX1NFVFVQX0RJU0NPTk5FQ1RJT04JKDEpCi0jZW5kaWYKLQotLyoKLSAqIEZvcmNlIHN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGZvciBhbGwgdGFyZ2V0cwotICovCi0jaWZkZWYgQ09ORklHX1NDU0lfTkNSNTNDOFhYX0ZPUkNFX1NZTkNfTkVHTwotI2RlZmluZSBTQ1NJX05DUl9TRVRVUF9GT1JDRV9TWU5DX05FR08JKDEpCi0jZWxzZQotI2RlZmluZSBTQ1NJX05DUl9TRVRVUF9GT1JDRV9TWU5DX05FR08JKDApCi0jZW5kaWYKLQotLyoKLSAqIERpc2FibGUgbWFzdGVyIHBhcml0eSBjaGVja2luZyAoZmxhd2VkIGhhcmR3YXJlcyBuZWVkIHRoYXQpCi0gKi8KLSNpZmRlZiBDT05GSUdfU0NTSV9OQ1I1M0M4WFhfRElTQUJMRV9NUEFSSVRZX0NIRUNLCi0jZGVmaW5lIFNDU0lfTkNSX1NFVFVQX01BU1RFUl9QQVJJVFkJKDApCi0jZWxzZQotI2RlZmluZSBTQ1NJX05DUl9TRVRVUF9NQVNURVJfUEFSSVRZCSgxKQotI2VuZGlmCi0KLS8qCi0gKiBEaXNhYmxlIHNjc2kgcGFyaXR5IGNoZWNraW5nIChmbGF3ZWQgZGV2aWNlcyBtYXkgbmVlZCB0aGF0KQotICovCi0jaWZkZWYgQ09ORklHX1NDU0lfTkNSNTNDOFhYX0RJU0FCTEVfUEFSSVRZX0NIRUNLCi0jZGVmaW5lIFNDU0lfTkNSX1NFVFVQX1NDU0lfUEFSSVRZCSgwKQotI2Vsc2UKLSNkZWZpbmUgU0NTSV9OQ1JfU0VUVVBfU0NTSV9QQVJJVFkJKDEpCi0jZW5kaWYKLQotLyoKLSAqIFNldHRsZSB0aW1lIGFmdGVyIHJlc2V0IGF0IGJvb3QtdXAKLSAqLwotI2RlZmluZSBTQ1NJX05DUl9TRVRVUF9TRVRUTEVfVElNRQkoMikKLQotLyoKLSoqCUJyaWRnZSBxdWlya3Mgd29yay1hcm91bmQgb3B0aW9uIGRlZmF1bHRlZCB0byAxLgotKi8KLSNpZm5kZWYJU0NTSV9OQ1JfUENJUV9XT1JLX0FST1VORF9PUFQKLSNkZWZpbmUJU0NTSV9OQ1JfUENJUV9XT1JLX0FST1VORF9PUFQJMQotI2VuZGlmCi0KLS8qCi0qKglXb3JrLWFyb3VuZCBjb21tb24gYnJpZGdlIG1pc2JlaGF2aW91ci4KLSoqCi0qKgktIERvIG5vdCBmbHVzaCBwb3N0ZWQgd3JpdGVzIGluIHRoZSBvcHBvc2l0ZSAKLSoqCSAgZGlyZWN0aW9uIG9uIHJlYWQuCi0qKgktIE1heSByZW9yZGVyIERNQSB3cml0ZXMgdG8gbWVtb3J5LgotKioKLSoqCVRoaXMgb3B0aW9uIHNob3VsZCBub3QgYWZmZWN0IHBlcmZvcm1hbmNlcyAKLSoqCXNpZ25pZmljYW50bHksIHNvIGl0IGlzIHRoZSBkZWZhdWx0LgotKi8KLSNpZglTQ1NJX05DUl9QQ0lRX1dPUktfQVJPVU5EX09QVCA9PSAxCi0jZGVmaW5lCVNDU0lfTkNSX1BDSVFfTUFZX05PVF9GTFVTSF9QV19VUFNUUkVBTQotI2RlZmluZQlTQ1NJX05DUl9QQ0lRX01BWV9SRU9SREVSX1dSSVRFUwotI2RlZmluZQlTQ1NJX05DUl9QQ0lRX01BWV9NSVNTX0NPTVBMRVRJT05TCi0KLS8qCi0qKglTYW1lIGFzIG9wdGlvbiAxLCBidXQgYWxzbyBkZWFsIHdpdGggCi0qKgltaXNjb25maWd1cmVkIGludGVycnVwdHMuCi0qKgotKioJLSBFZGdlIHRyaWdnZXJyZWQgaW5zdGVhZCBvZiBsZXZlbCBzZW5zaXRpdmUuCi0qKgktIE5vIGludGVycnVwdCBsaW5lIGNvbm5lY3RlZC4KLSoqCS0gSVJRIG51bWJlciBtaXNjb25maWd1cmVkLgotKioJCi0qKglJZiBubyBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkLCB0aGUgZHJpdmVyIHdpbGwgCi0qKgljYXRjaCB0aGUgaW50ZXJydXB0IGNvbmRpdGlvbnMgMTAgdGltZXMgcGVyIAotKioJc2Vjb25kLiBObyBuZWVkIHRvIHNheSB0aGF0IHRoaXMgb3B0aW9uIGlzIAotKioJbm90IHJlY29tbWVuZGVkLgotKi8KLSNlbGlmCVNDU0lfTkNSX1BDSVFfV09SS19BUk9VTkRfT1BUID09IDIKLSNkZWZpbmUJU0NTSV9OQ1JfUENJUV9NQVlfTk9UX0ZMVVNIX1BXX1VQU1RSRUFNCi0jZGVmaW5lCVNDU0lfTkNSX1BDSVFfTUFZX1JFT1JERVJfV1JJVEVTCi0jZGVmaW5lCVNDU0lfTkNSX1BDSVFfTUFZX01JU1NfQ09NUExFVElPTlMKLSNkZWZpbmUJU0NTSV9OQ1JfUENJUV9CUk9LRU5fSU5UUgotCi0vKgotKioJU29tZSBicmlkZ2UgZGVzaWduZXJzIGRlY2lkZWQgdG8gZmx1c2ggCi0qKglldmVyeXRoaW5nIHByaW9yIHRvIGRlbGl2ZXIgdGhlIGludGVycnVwdC4KLSoqCVRoaXMgb3B0aW9uIHRyaWVzIHRvIGRlYWwgd2l0aCBzdWNoIGEgCi0qKgliZWhhdmlvdXIuCi0qLwotI2VsaWYJU0NTSV9OQ1JfUENJUV9XT1JLX0FST1VORF9PUFQgPT0gMwotI2RlZmluZQlTQ1NJX05DUl9QQ0lRX1NZTkNfT05fSU5UUgotI2VuZGlmCi0KLS8qCi0qKglPdGhlciBwYXJhbWV0ZXJzIG5vdCBjb25maWd1cmFibGUgd2l0aCAibWFrZSBjb25maWciCi0qKglBdm9pZCB0byBjaGFuZ2UgdGhlc2UgY29uc3RhbnRzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgotKi8KLQotI2RlZmluZSBTQ1NJX05DUl9BTFdBWVNfU0lNUExFX1RBRwotI2RlZmluZSBTQ1NJX05DUl9NQVhfU0NBVFRFUgkoMTI3KQotI2RlZmluZSBTQ1NJX05DUl9NQVhfVEFSR0VUCSgxNikKLQotLyoKLSoqICAgQ29tcHV0ZSBzb21lIGRlc2lyYWJsZSB2YWx1ZSBmb3IgQ0FOX1FVRVVFIAotKiogICBhbmQgQ01EX1BFUl9MVU4uCi0qKiAgIFRoZSBkcml2ZXIgd2lsbCB1c2UgbG93ZXIgdmFsdWVzIGlmIHRoZXNlIAotKiogICBvbmVzIGFwcGVhciB0byBiZSB0b28gbGFyZ2UuCi0qLwotI2RlZmluZSBTQ1NJX05DUl9DQU5fUVVFVUUJKDgqU0NTSV9OQ1JfTUFYX1RBR1MgKyAyKlNDU0lfTkNSX01BWF9UQVJHRVQpCi0jZGVmaW5lIFNDU0lfTkNSX0NNRF9QRVJfTFVOCShTQ1NJX05DUl9NQVhfVEFHUykKLQotI2RlZmluZSBTQ1NJX05DUl9TR19UQUJMRVNJWkUJKFNDU0lfTkNSX01BWF9TQ0FUVEVSKQotI2RlZmluZSBTQ1NJX05DUl9USU1FUl9JTlRFUlZBTAkoSFopCi0KLSNpZiAxIC8qIGRlZmluZWQgQ09ORklHX1NDU0lfTVVMVElfTFVOICovCi0jZGVmaW5lIFNDU0lfTkNSX01BWF9MVU4JKDE2KQotI2Vsc2UKLSNkZWZpbmUgU0NTSV9OQ1JfTUFYX0xVTgkoMSkKLSNlbmRpZgotCi0vKgotICogIElPIGZ1bmN0aW9ucyBkZWZpbml0aW9uIGZvciBiaWcvbGl0dGxlIGVuZGlhbiBDUFUgc3VwcG9ydC4KLSAqICBGb3Igbm93LCB0aGUgTkNSIGlzIG9ubHkgc3VwcG9ydGVkIGluIGxpdHRsZSBlbmRpYW4gYWRkcmVzc2luZyBtb2RlLCAKLSAqLwotCi0jaWZkZWYJX19CSUdfRU5ESUFOCi0KLSNkZWZpbmUJaW53X2wyYgkJaW53Ci0jZGVmaW5lCWlubF9sMmIJCWlubAotI2RlZmluZQlvdXR3X2IybAlvdXR3Ci0jZGVmaW5lCW91dGxfYjJsCW91dGwKLQotI2RlZmluZQlyZWFkYl9yYXcJcmVhZGIKLSNkZWZpbmUJd3JpdGViX3Jhdwl3cml0ZWIKLQotI2lmIGRlZmluZWQoU0NTSV9OQ1JfQklHX0VORElBTikKLSNkZWZpbmUJcmVhZHdfbDJiCV9fcmF3X3JlYWR3Ci0jZGVmaW5lCXJlYWRsX2wyYglfX3Jhd19yZWFkbAotI2RlZmluZQl3cml0ZXdfYjJsCV9fcmF3X3dyaXRldwotI2RlZmluZQl3cml0ZWxfYjJsCV9fcmF3X3dyaXRlbAotI2RlZmluZQlyZWFkd19yYXcJX19yYXdfcmVhZHcKLSNkZWZpbmUJcmVhZGxfcmF3CV9fcmF3X3JlYWRsCi0jZGVmaW5lCXdyaXRld19yYXcJX19yYXdfd3JpdGV3Ci0jZGVmaW5lCXdyaXRlbF9yYXcJX19yYXdfd3JpdGVsCi0jZWxzZQkvKiBPdGhlciBiaWctZW5kaWFuICovCi0jZGVmaW5lCXJlYWR3X2wyYglyZWFkdwotI2RlZmluZQlyZWFkbF9sMmIJcmVhZGwKLSNkZWZpbmUJd3JpdGV3X2IybAl3cml0ZXcKLSNkZWZpbmUJd3JpdGVsX2IybAl3cml0ZWwKLSNkZWZpbmUJcmVhZHdfcmF3CXJlYWR3Ci0jZGVmaW5lCXJlYWRsX3JhdwlyZWFkbAotI2RlZmluZQl3cml0ZXdfcmF3CXdyaXRldwotI2RlZmluZQl3cml0ZWxfcmF3CXdyaXRlbAotI2VuZGlmCi0KLSNlbHNlCS8qIGxpdHRsZSBlbmRpYW4gKi8KLQotI2RlZmluZQlpbndfcmF3CQlpbncKLSNkZWZpbmUJaW5sX3JhdwkJaW5sCi0jZGVmaW5lCW91dHdfcmF3CW91dHcKLSNkZWZpbmUJb3V0bF9yYXcJb3V0bAotCi0jZGVmaW5lCXJlYWRiX3JhdwlyZWFkYgotI2RlZmluZQlyZWFkd19yYXcJcmVhZHcKLSNkZWZpbmUJcmVhZGxfcmF3CXJlYWRsCi0jZGVmaW5lCXdyaXRlYl9yYXcJd3JpdGViCi0jZGVmaW5lCXdyaXRld19yYXcJd3JpdGV3Ci0jZGVmaW5lCXdyaXRlbF9yYXcJd3JpdGVsCi0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19ocHBhX18pICYmICFkZWZpbmVkKF9fbWlwc19fKQotI2lmZGVmCVNDU0lfTkNSX0JJR19FTkRJQU4KLSNlcnJvcgkiVGhlIE5DUiBpbiBCSUcgRU5ESUFOIGFkZHJlc3NpbmcgbW9kZSBpcyBub3QgKHlldCkgc3VwcG9ydGVkIgotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBNRU1PUllfQkFSUklFUigpCW1iKCkKLQotCi0vKgotICogIElmIHRoZSBOQ1IgdXNlcyBiaWcgZW5kaWFuIGFkZHJlc3NpbmcgbW9kZSBvdmVyIHRoZSAKLSAqICBQQ0ksIGFjdHVhbCBpbyByZWdpc3RlciBhZGRyZXNzZXMgZm9yIGJ5dGUgYW5kIHdvcmQgCi0gKiAgYWNjZXNzZXMgbXVzdCBiZSBjaGFuZ2VkIGFjY29yZGluZyB0byBsYW5lIHJvdXRpbmcuCi0gKiAgQnR3LCBuY3Jfb2ZmYigpIGFuZCBuY3Jfb2ZmdygpIG1hY3JvcyBvbmx5IGFwcGx5IHRvIAotICogIGNvbnN0YW50cyBhbmQgc28gZG9ubm90IGdlbmVyYXRlIGJsb2F0ZWQgY29kZS4KLSAqLwotCi0jaWYJZGVmaW5lZChTQ1NJX05DUl9CSUdfRU5ESUFOKQotCi0jZGVmaW5lIG5jcl9vZmZiKG8pCSgoKG8pJn4zKSsoKH4oKG8pJjMpKSYzKSkKLSNkZWZpbmUgbmNyX29mZncobykJKCgobykmfjMpKygofigobykmMykpJjIpKQotCi0jZWxzZQotCi0jZGVmaW5lIG5jcl9vZmZiKG8pCShvKQotI2RlZmluZSBuY3Jfb2ZmdyhvKQkobykKLQotI2VuZGlmCi0KLS8qCi0gKiAgSWYgdGhlIENQVSBhbmQgdGhlIE5DUiB1c2Ugc2FtZSBlbmRpYW4tbmVzcyBhZGRyZXNzaW5nLAotICogIG5vIGJ5dGUgcmVvcmRlcmluZyBpcyBuZWVkZWQgZm9yIHNjcmlwdCBwYXRjaGluZy4KLSAqICBNYWNybyBjcHVfdG9fc2NyKCkgaXMgdG8gYmUgdXNlZCBmb3Igc2NyaXB0IHBhdGNoaW5nLgotICogIE1hY3JvIHNjcl90b19jcHUoKSBpcyB0byBiZSB1c2VkIGZvciBnZXR0aW5nIGEgRFdPUkQgCi0gKiAgZnJvbSB0aGUgc2NyaXB0LgotICovCi0KLSNpZglkZWZpbmVkKF9fQklHX0VORElBTikgJiYgIWRlZmluZWQoU0NTSV9OQ1JfQklHX0VORElBTikKLQotI2RlZmluZSBjcHVfdG9fc2NyKGR3KQljcHVfdG9fbGUzMihkdykKLSNkZWZpbmUgc2NyX3RvX2NwdShkdykJbGUzMl90b19jcHUoZHcpCi0KLSNlbGlmCWRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiBkZWZpbmVkKFNDU0lfTkNSX0JJR19FTkRJQU4pCi0KLSNkZWZpbmUgY3B1X3RvX3NjcihkdykJY3B1X3RvX2JlMzIoZHcpCi0jZGVmaW5lIHNjcl90b19jcHUoZHcpCWJlMzJfdG9fY3B1KGR3KQotCi0jZWxzZQotCi0jZGVmaW5lIGNwdV90b19zY3IoZHcpCShkdykKLSNkZWZpbmUgc2NyX3RvX2NwdShkdykJKGR3KQotCi0jZW5kaWYKLQotLyoKLSAqICBBY2Nlc3MgdG8gdGhlIGNvbnRyb2xsZXIgY2hpcC4KLSAqCi0gKiAgSWYgdGhlIENQVSBhbmQgdGhlIE5DUiB1c2Ugc2FtZSBlbmRpYW4tbmVzcyBhZGRyZXNzaW5nLAotICogIG5vIGJ5dGUgcmVvcmRlcmluZyBpcyBuZWVkZWQgZm9yIGFjY2Vzc2luZyBjaGlwIGlvIAotICogIHJlZ2lzdGVycy4gRnVuY3Rpb25zIHN1ZmZpeGVkIGJ5ICdfcmF3JyBhcmUgYXNzdW1lZCAKLSAqICB0byBhY2Nlc3MgdGhlIGNoaXAgb3ZlciB0aGUgUENJIHdpdGhvdXQgZG9pbmcgYnl0ZSAKLSAqICByZW9yZGVyaW5nLiBGdW5jdGlvbnMgc3VmZml4ZWQgYnkgJ19sMmInIGFyZSAKLSAqICBhc3N1bWVkIHRvIHBlcmZvcm0gbGl0dGxlLWVuZGlhbiB0byBiaWctZW5kaWFuIGJ5dGUgCi0gKiAgcmVvcmRlcmluZywgdGhvc2Ugc3VmZml4ZWQgYnkgJ19iMmwnIGJsYWgsIGJsYWgsCi0gKiAgYmxhaCwgLi4uCi0gKi8KLQotLyoKLSAqICBNRU1PUlkgbWFwcGVkIElPIGlucHV0IC8gb3V0cHV0Ci0gKi8KLQotI2RlZmluZSBJTkJfT0ZGKG8pCQlyZWFkYl9yYXcoKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyBuY3Jfb2ZmYihvKSkKLSNkZWZpbmUgT1VUQl9PRkYobywgdmFsKQl3cml0ZWJfcmF3KCh2YWwpLCAoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZiKG8pKQotCi0jaWYJZGVmaW5lZChfX0JJR19FTkRJQU4pICYmICFkZWZpbmVkKFNDU0lfTkNSX0JJR19FTkRJQU4pCi0KLSNkZWZpbmUgSU5XX09GRihvKQkJcmVhZHdfbDJiKChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpCi0jZGVmaW5lIElOTF9PRkYobykJCXJlYWRsX2wyYigoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIChvKSkKLQotI2RlZmluZSBPVVRXX09GRihvLCB2YWwpCXdyaXRld19iMmwoKHZhbCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpCi0jZGVmaW5lIE9VVExfT0ZGKG8sIHZhbCkJd3JpdGVsX2IybCgodmFsKSwgKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyAobykpCi0KLSNlbGlmCWRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiBkZWZpbmVkKFNDU0lfTkNSX0JJR19FTkRJQU4pCi0KLSNkZWZpbmUgSU5XX09GRihvKQkJcmVhZHdfYjJsKChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpCi0jZGVmaW5lIElOTF9PRkYobykJCXJlYWRsX2IybCgoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIChvKSkKLQotI2RlZmluZSBPVVRXX09GRihvLCB2YWwpCXdyaXRld19sMmIoKHZhbCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpCi0jZGVmaW5lIE9VVExfT0ZGKG8sIHZhbCkJd3JpdGVsX2wyYigodmFsKSwgKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyAobykpCi0KLSNlbHNlCi0KLSNpZmRlZiBDT05GSUdfU0NTSV9OQ1I1M0M4WFhfTk9fV09SRF9UUkFOU0ZFUlMKLS8qIE9ubHkgOCBvciAzMiBiaXQgdHJhbnNmZXJzIGFsbG93ZWQgKi8KLSNkZWZpbmUgSU5XX09GRihvKQkJKHJlYWRiKChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpIDw8IDggfCByZWFkYigoY2hhciBfX2lvbWVtICopbnAtPnJlZyArIG5jcl9vZmZ3KG8pICsgMSkpCi0jZWxzZQotI2RlZmluZSBJTldfT0ZGKG8pCQlyZWFkd19yYXcoKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyBuY3Jfb2ZmdyhvKSkKLSNlbmRpZgotI2RlZmluZSBJTkxfT0ZGKG8pCQlyZWFkbF9yYXcoKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyAobykpCi0KLSNpZmRlZiBDT05GSUdfU0NTSV9OQ1I1M0M4WFhfTk9fV09SRF9UUkFOU0ZFUlMKLS8qIE9ubHkgOCBvciAzMiBiaXQgdHJhbnNmZXJzIGFsbG93ZWQgKi8KLSNkZWZpbmUgT1VUV19PRkYobywgdmFsKQlkbyB7IHdyaXRlYigoY2hhcikoKHZhbCkgPj4gOCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykpOyB3cml0ZWIoKGNoYXIpKHZhbCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgbmNyX29mZncobykgKyAxKTsgfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIE9VVFdfT0ZGKG8sIHZhbCkJd3JpdGV3X3JhdygodmFsKSwgKGNoYXIgX19pb21lbSAqKW5wLT5yZWcgKyBuY3Jfb2ZmdyhvKSkKLSNlbmRpZgotI2RlZmluZSBPVVRMX09GRihvLCB2YWwpCXdyaXRlbF9yYXcoKHZhbCksIChjaGFyIF9faW9tZW0gKilucC0+cmVnICsgKG8pKQotCi0jZW5kaWYKLQotI2RlZmluZSBJTkIocikJCUlOQl9PRkYgKG9mZnNldG9mKHN0cnVjdCBuY3JfcmVnLHIpKQotI2RlZmluZSBJTlcocikJCUlOV19PRkYgKG9mZnNldG9mKHN0cnVjdCBuY3JfcmVnLHIpKQotI2RlZmluZSBJTkwocikJCUlOTF9PRkYgKG9mZnNldG9mKHN0cnVjdCBuY3JfcmVnLHIpKQotCi0jZGVmaW5lIE9VVEIociwgdmFsKQlPVVRCX09GRiAob2Zmc2V0b2Yoc3RydWN0IG5jcl9yZWcsciksICh2YWwpKQotI2RlZmluZSBPVVRXKHIsIHZhbCkJT1VUV19PRkYgKG9mZnNldG9mKHN0cnVjdCBuY3JfcmVnLHIpLCAodmFsKSkKLSNkZWZpbmUgT1VUTChyLCB2YWwpCU9VVExfT0ZGIChvZmZzZXRvZihzdHJ1Y3QgbmNyX3JlZyxyKSwgKHZhbCkpCi0KLS8qCi0gKiAgU2V0IGJpdCBmaWVsZCBPTiwgT0ZGIAotICovCi0KLSNkZWZpbmUgT1VUT05CKHIsIG0pCU9VVEIociwgSU5CKHIpIHwgKG0pKQotI2RlZmluZSBPVVRPRkZCKHIsIG0pCU9VVEIociwgSU5CKHIpICYgfihtKSkKLSNkZWZpbmUgT1VUT05XKHIsIG0pCU9VVFcociwgSU5XKHIpIHwgKG0pKQotI2RlZmluZSBPVVRPRkZXKHIsIG0pCU9VVFcociwgSU5XKHIpICYgfihtKSkKLSNkZWZpbmUgT1VUT05MKHIsIG0pCU9VVEwociwgSU5MKHIpIHwgKG0pKQotI2RlZmluZSBPVVRPRkZMKHIsIG0pCU9VVEwociwgSU5MKHIpICYgfihtKSkKLQotLyoKLSAqICBXZSBub3JtYWxseSB3YW50IHRoZSBjaGlwIHRvIGhhdmUgYSBjb25zaXN0ZW50IHZpZXcKLSAqICBvZiBkcml2ZXIgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHdoZW4gd2UgcmVzdGFydCBpdC4KLSAqICBUaHVzIHRoZXNlIG1hY3Jvcy4KLSAqLwotI2RlZmluZSBPVVRMX0RTUCh2KQkJCQlcCi0JZG8gewkJCQkJXAotCQlNRU1PUllfQkFSUklFUigpOwkJXAotCQlPVVRMIChuY19kc3AsICh2KSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBPVVRPTkJfU1REKCkJCQkJXAotCWRvIHsJCQkJCVwKLQkJTUVNT1JZX0JBUlJJRVIoKTsJCVwKLQkJT1VUT05CIChuY19kY250bCwgKFNURHxOT0NPTSkpOwlcCi0JfSB3aGlsZSAoMCkKLQotCi0vKgotKiogICBOQ1I1M0M4WFggZGV2aWNlcyBmZWF0dXJlcyB0YWJsZS4KLSovCi1zdHJ1Y3QgbmNyX2NoaXAgewotCXVuc2lnbmVkIHNob3J0CXJldmlzaW9uX2lkOwotCXVuc2lnbmVkIGNoYXIJYnVyc3RfbWF4OwkvKiBsb2ctYmFzZS0yIG9mIG1heCBidXJzdCAqLwotCXVuc2lnbmVkIGNoYXIJb2Zmc2V0X21heDsKLQl1bnNpZ25lZCBjaGFyCW5yX2Rpdmlzb3I7Ci0JdW5zaWduZWQgaW50CWZlYXR1cmVzOwotI2RlZmluZSBGRV9MRUQwCQkoMTw8MCkKLSNkZWZpbmUgRkVfV0lERQkJKDE8PDEpICAgIC8qIFdpZGUgZGF0YSB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgRkVfVUxUUkEJKDE8PDIpCSAgLyogVWx0cmEgc3BlZWQgMjBNdHJhbnMvc2VjICovCi0jZGVmaW5lIEZFX0RCTFIJCSgxPDw0KQkgIC8qIENsb2NrIGRvdWJsZXIgcHJlc2VudCAqLwotI2RlZmluZSBGRV9RVUFECQkoMTw8NSkJICAvKiBDbG9jayBxdWFkcnVwbGVyIHByZXNlbnQgKi8KLSNkZWZpbmUgRkVfRVJMCQkoMTw8NikgICAgLyogRW5hYmxlIHJlYWQgbGluZSAqLwotI2RlZmluZSBGRV9DTFNFCQkoMTw8NykgICAgLyogQ2FjaGUgbGluZSBzaXplIGVuYWJsZSAqLwotI2RlZmluZSBGRV9XUklFCQkoMTw8OCkgICAgLyogV3JpdGUgJiBJbnZhbGlkYXRlIGVuYWJsZSAqLwotI2RlZmluZSBGRV9FUk1QCQkoMTw8OSkgICAgLyogRW5hYmxlIHJlYWQgbXVsdGlwbGUgKi8KLSNkZWZpbmUgRkVfQk9GCQkoMTw8MTApICAgLyogQnVyc3Qgb3Bjb2RlIGZldGNoICovCi0jZGVmaW5lIEZFX0RGUwkJKDE8PDExKSAgIC8qIERNQSBmaWZvIHNpemUgKi8KLSNkZWZpbmUgRkVfUEZFTgkJKDE8PDEyKSAgIC8qIFByZWZldGNoIGVuYWJsZSAqLwotI2RlZmluZSBGRV9MRFNUUgkoMTw8MTMpICAgLyogTG9hZC9TdG9yZSBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgRkVfUkFNCQkoMTw8MTQpICAgLyogT24gY2hpcCBSQU0gcHJlc2VudCAqLwotI2RlZmluZSBGRV9WQVJDTEsJKDE8PDE1KSAgIC8qIFNDU0kgY2xvY2sgbWF5IHZhcnkgKi8KLSNkZWZpbmUgRkVfUkFNOEsJKDE8PDE2KSAgIC8qIE9uIGNoaXAgUkFNIHNpemVkIDhLYiAqLwotI2RlZmluZSBGRV82NEJJVAkoMTw8MTcpICAgLyogSGF2ZSBhIDY0LWJpdCBQQ0kgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZFX0lPMjU2CSgxPDwxOCkgICAvKiBSZXF1aXJlcyBmdWxsIDI1NiBieXRlcyBpbiBQQ0kgc3BhY2UgKi8KLSNkZWZpbmUgRkVfTk9QTQkJKDE8PDE5KSAgIC8qIFNjcmlwdHMgaGFuZGxlcyBwaGFzZSBtaXNtYXRjaCAqLwotI2RlZmluZSBGRV9MRURDCQkoMTw8MjApICAgLyogSGFyZHdhcmUgY29udHJvbCBvZiBMRUQgKi8KLSNkZWZpbmUgRkVfRElGRgkJKDE8PDIxKSAgIC8qIFN1cHBvcnQgRGlmZmVyZW50aWFsIFNDU0kgKi8KLSNkZWZpbmUgRkVfNjZNSFogCSgxPDwyMykgICAvKiA2Nk1IeiBQQ0kgU3VwcG9ydCAqLwotI2RlZmluZSBGRV9EQUMJIAkoMTw8MjQpICAgLyogU3VwcG9ydCBEQUMgY3ljbGVzICg2NCBiaXQgYWRkcmVzc2luZykgKi8KLSNkZWZpbmUgRkVfSVNUQVQxIAkoMTw8MjUpICAgLyogSGF2ZSBJU1RBVDEsIE1CT1gwLCBNQk9YMSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgRkVfREFDX0lOX1VTRQkoMTw8MjYpCSAgLyogUGxhdGZvcm0gZG9lcyBEQUMgY3ljbGVzICovCi0jZGVmaW5lIEZFX0VIUAkJKDE8PDI3KSAgIC8qIDcyMDogRXZlbiBob3N0IHBhcml0eSAqLwotI2RlZmluZSBGRV9NVVgJCSgxPDwyOCkgICAvKiA3MjA6IE11bHRpcGxleGVkIGJ1cyAqLwotI2RlZmluZSBGRV9FQQkJKDE8PDI5KSAgIC8qIDcyMDogRW5hYmxlIEFjayAqLwotCi0jZGVmaW5lIEZFX0NBQ0hFX1NFVAkoRkVfRVJMfEZFX0NMU0V8RkVfV1JJRXxGRV9FUk1QKQotI2RlZmluZSBGRV9TQ1NJX1NFVAkoRkVfV0lERXxGRV9VTFRSQXxGRV9EQkxSfEZFX1FVQUR8Rl9DTEs4MCkKLSNkZWZpbmUgRkVfU1BFQ0lBTF9TRVQJKEZFX0NBQ0hFX1NFVHxGRV9CT0Z8RkVfREZTfEZFX0xEU1RSfEZFX1BGRU58RkVfUkFNKQotfTsKLQotCi0vKgotKioJRHJpdmVyIHNldHVwIHN0cnVjdHVyZS4KLSoqCi0qKglUaGlzIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBmcm9tIGxpbnV4IGNvbmZpZyBvcHRpb25zLgotKioJSXQgY2FuIGJlIG92ZXJyaWRkZW4gYXQgYm9vdC11cCBieSB0aGUgYm9vdCBjb21tYW5kIGxpbmUuCi0qLwotI2RlZmluZSBTQ1NJX05DUl9NQVhfRVhDTFVERVMgOAotc3RydWN0IG5jcl9kcml2ZXJfc2V0dXAgewotCXU4CW1hc3Rlcl9wYXJpdHk7Ci0JdTgJc2NzaV9wYXJpdHk7Ci0JdTgJZGlzY29ubmVjdGlvbjsKLQl1OAlzcGVjaWFsX2ZlYXR1cmVzOwotCXU4CWZvcmNlX3N5bmNfbmVnbzsKLQl1OAlyZXZlcnNlX3Byb2JlOwotCXU4CXBjaV9maXhfdXA7Ci0JdTgJdXNlX252cmFtOwotCXU4CXZlcmJvc2U7Ci0JdTgJZGVmYXVsdF90YWdzOwotCXUxNglkZWZhdWx0X3N5bmM7Ci0JdTE2CWRlYnVnOwotCXU4CWJ1cnN0X21heDsKLQl1OAlsZWRfcGluOwotCXU4CW1heF93aWRlOwotCXU4CXNldHRsZV9kZWxheTsKLQl1OAlkaWZmX3N1cHBvcnQ7Ci0JdTgJaXJxbTsKLQl1OAlidXNfY2hlY2s7Ci0JdTgJb3B0aW1pemU7Ci0JdTgJcmVjb3Zlcnk7Ci0JdTgJaG9zdF9pZDsKLQl1MTYJaWFyYjsKLQl1MzIJZXhjbHVkZXNbU0NTSV9OQ1JfTUFYX0VYQ0xVREVTXTsKLQljaGFyCXRhZ19jdHJsWzEwMF07Ci19OwotCi0vKgotKioJSW5pdGlhbCBzZXR1cC4KLSoqCUNhbiBiZSBvdmVycmlkZW4gYXQgc3RhcnR1cCBieSBhIGNvbW1hbmQgbGluZS4KLSovCi0jZGVmaW5lIFNDU0lfTkNSX0RSSVZFUl9TRVRVUAkJCVwKLXsJCQkJCQlcCi0JU0NTSV9OQ1JfU0VUVVBfTUFTVEVSX1BBUklUWSwJCVwKLQlTQ1NJX05DUl9TRVRVUF9TQ1NJX1BBUklUWSwJCVwKLQlTQ1NJX05DUl9TRVRVUF9ESVNDT05ORUNUSU9OLAkJXAotCVNDU0lfTkNSX1NFVFVQX1NQRUNJQUxfRkVBVFVSRVMsCVwKLQlTQ1NJX05DUl9TRVRVUF9GT1JDRV9TWU5DX05FR08sCQlcCi0JMCwJCQkJCVwKLQkwLAkJCQkJXAotCTEsCQkJCQlcCi0JMCwJCQkJCVwKLQlTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1RBR1MsCQlcCi0JU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9TWU5DLAkJXAotCTB4MDAsCQkJCQlcCi0JNywJCQkJCVwKLQkwLAkJCQkJXAotCTEsCQkJCQlcCi0JU0NTSV9OQ1JfU0VUVVBfU0VUVExFX1RJTUUsCQlcCi0JMCwJCQkJCVwKLQkwLAkJCQkJXAotCTEsCQkJCQlcCi0JMCwJCQkJCVwKLQkwLAkJCQkJXAotCTI1NSwJCQkJCVwKLQkweDAwCQkJCQlcCi19Ci0KLS8qCi0qKglCb290IGZhaWwgc2FmZSBzZXR1cC4KLSoqCU92ZXJyaWRlIGluaXRpYWwgc2V0dXAgZnJvbSBib290IGNvbW1hbmQgbGluZToKLSoqCW5jcjUzYzh4eD1zYWZlOnkKLSovCi0jZGVmaW5lIFNDU0lfTkNSX0RSSVZFUl9TQUZFX1NFVFVQCQlcCi17CQkJCQkJXAotCTAsCQkJCQlcCi0JMSwJCQkJCVwKLQkwLAkJCQkJXAotCTAsCQkJCQlcCi0JMCwJCQkJCVwKLQkwLAkJCQkJXAotCTAsCQkJCQlcCi0JMSwJCQkJCVwKLQkyLAkJCQkJXAotCTAsCQkJCQlcCi0JMjU1LAkJCQkJXAotCTB4MDAsCQkJCQlcCi0JMjU1LAkJCQkJXAotCTAsCQkJCQlcCi0JMCwJCQkJCVwKLQkxMCwJCQkJCVwKLQkxLAkJCQkJXAotCTEsCQkJCQlcCi0JMSwJCQkJCVwKLQkwLAkJCQkJXAotCTAsCQkJCQlcCi0JMjU1CQkJCQlcCi19Ci0KLS8qKioqKioqKioqKioqKioqIE9SSUdJTkFMIENPTlRFTlQgb2YgbmNycmVnLmggZnJvbSBGcmVlQlNEICoqKioqKioqKioqKioqKioqKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCVRoZSBuY3IgNTNjODEwIHJlZ2lzdGVyIHN0cnVjdHVyZS4KLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi1zdHJ1Y3QgbmNyX3JlZyB7Ci0vKjAwKi8gIHU4CW5jX3NjbnRsMDsgICAgLyogZnVsbCBhcmIuLCBlbmEgcGFyaXR5LCBwYXItPkFUTiAgKi8KLQotLyowMSovICB1OAluY19zY250bDE7ICAgIC8qIG5vIHJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICNkZWZpbmUgICBJU0NPTiAgIDB4MTAgIC8qIGNvbm5lY3RlZCB0byBzY3NpCQkgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIENSU1QgICAgMHgwOCAgLyogZm9yY2UgcmVzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIElBUkIgICAgMHgwMiAgLyogaW1tZWRpYXRlIGFyYml0cmF0aW9uICAgICAgICAgICAgKi8KLQotLyowMiovICB1OAluY19zY250bDI7ICAgIC8qIG5vIGRpc2Nvbm5lY3QgZXhwZWN0ZWQgICAgICAgICAgICovCi0JI2RlZmluZSAgIFNEVSAgICAgMHg4MCAgLyogY21kOiBkaXNjb25uZWN0IHdpbGwgcmFpc2UgZXJyb3IgKi8KLQkjZGVmaW5lICAgQ0hNICAgICAweDQwICAvKiBzdGE6IGNoYWluZWQgbW9kZSAgICAgICAgICAgICAgICAqLwotCSNkZWZpbmUgICBXU1MgICAgIDB4MDggIC8qIHN0YTogd2lkZSBzY3NpIHNlbmQgICAgICAgICAgIFtXXSovCi0JI2RlZmluZSAgIFdTUiAgICAgMHgwMSAgLyogc3RhOiB3aWRlIHNjc2kgcmVjZWl2ZWQgICAgICAgW1ddKi8KLQotLyowMyovICB1OAluY19zY250bDM7ICAgIC8qIGNuZiBzeXN0ZW0gY2xvY2sgZGVwZW5kZW50ICAgICAgICovCi0JI2RlZmluZSAgIEVXUyAgICAgMHgwOCAgLyogY21kOiBlbmFibGUgd2lkZSBzY3NpICAgICAgICAgW1ddKi8KLQkjZGVmaW5lICAgVUxUUkEgICAweDgwICAvKiBjbWQ6IFVMVFJBIGVuYWJsZSAgICAgICAgICAgICAgICAqLwotCQkJCS8qIGJpdHMgMC0yLCA3IHJzdmQgZm9yIEMxMDEwICAgICAgICovCi0KLS8qMDQqLyAgdTgJbmNfc2NpZDsJLyogY25mIGhvc3QgYWRhcHRlciBzY3NpIGFkZHJlc3MgICAgKi8KLQkjZGVmaW5lICAgUlJFICAgICAweDQwICAvKiByL3c6ZSBlbmFibGUgcmVzcG9uc2UgdG8gcmVzZWwuICAqLwotCSNkZWZpbmUgICBTUkUgICAgIDB4MjAgIC8qIHIvdzplIGVuYWJsZSByZXNwb25zZSB0byBzZWxlY3QgICovCi0KLS8qMDUqLyAgdTgJbmNfc3hmZXI7CS8qICMjIyBTeW5jIHNwZWVkIGFuZCBjb3VudCAgICAgICAgICovCi0JCQkJLyogYml0cyA2LTcgcnN2ZCBmb3IgQzEwMTAgICAgICAgICAgKi8KLQotLyowNiovICB1OAluY19zZGlkOwkvKiAjIyMgRGVzdGluYXRpb24tSUQgICAgICAgICAgICAgICAqLwotCi0vKjA3Ki8gIHU4CW5jX2dwcmVnOwkvKiA/Pz8gSU8tUGlucyAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKjA4Ki8gIHU4CW5jX3NmYnI7CS8qICMjIyBGaXJzdCBieXRlIGluIHBoYXNlICAgICAgICAgICovCi0KLS8qMDkqLyAgdTgJbmNfc29jbDsKLQkjZGVmaW5lICAgQ1JFUQkgIDB4ODAJLyogci93OiBTQ1NJLVJFUSAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ0FDSwkgIDB4NDAJLyogci93OiBTQ1NJLUFDSyAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ0JTWQkgIDB4MjAJLyogci93OiBTQ1NJLUJTWSAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ1NFTAkgIDB4MTAJLyogci93OiBTQ1NJLVNFTCAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ0FUTgkgIDB4MDgJLyogci93OiBTQ1NJLUFUTiAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ01TRwkgIDB4MDQJLyogci93OiBTQ1NJLU1TRyAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ0NfRAkgIDB4MDIJLyogci93OiBTQ1NJLUNfRCAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ0lfTwkgIDB4MDEJLyogci93OiBTQ1NJLUlfTyAgICAgICAgICAgICAgICAgICAgKi8KLQotLyowYSovICB1OAluY19zc2lkOwotCi0vKjBiKi8gIHU4CW5jX3NiY2w7Ci0KLS8qMGMqLyAgdTgJbmNfZHN0YXQ7Ci0gICAgICAgICNkZWZpbmUgICBERkUgICAgIDB4ODAgIC8qIHN0YTogZG1hIGZpZm8gZW1wdHkgICAgICAgICAgICAgICovCi0gICAgICAgICNkZWZpbmUgICBNRFBFICAgIDB4NDAgIC8qIGludDogbWFzdGVyIGRhdGEgcGFyaXR5IGVycm9yICAgICovCi0gICAgICAgICNkZWZpbmUgICBCRiAgICAgIDB4MjAgIC8qIGludDogc2NyaXB0OiBidXMgZmF1bHQgICAgICAgICAgICovCi0gICAgICAgICNkZWZpbmUgICBBQlJUICAgIDB4MTAgIC8qIGludDogc2NyaXB0OiBjb21tYW5kIGFib3J0ZWQgICAgICovCi0gICAgICAgICNkZWZpbmUgICBTU0kgICAgIDB4MDggIC8qIGludDogc2NyaXB0OiBzaW5nbGUgc3RlcCAgICAgICAgICovCi0gICAgICAgICNkZWZpbmUgICBTSVIgICAgIDB4MDQgIC8qIGludDogc2NyaXB0OiBpbnRlcnJ1cHQgaW5zdHJ1Y3QuICovCi0gICAgICAgICNkZWZpbmUgICBJSUQgICAgIDB4MDEgIC8qIGludDogc2NyaXB0OiBpbGxlZ2FsIGluc3RydWN0LiAgICovCi0KLS8qMGQqLyAgdTgJbmNfc3N0YXQwOwotICAgICAgICAjZGVmaW5lICAgSUxGICAgICAweDgwICAvKiBzdGE6IGRhdGEgaW4gU0lETCByZWdpc3RlciBsc2IgICAqLwotICAgICAgICAjZGVmaW5lICAgT1JGICAgICAweDQwICAvKiBzdGE6IGRhdGEgaW4gU09EUiByZWdpc3RlciBsc2IgICAqLwotICAgICAgICAjZGVmaW5lICAgT0xGICAgICAweDIwICAvKiBzdGE6IGRhdGEgaW4gU09ETCByZWdpc3RlciBsc2IgICAqLwotICAgICAgICAjZGVmaW5lICAgQUlQICAgICAweDEwICAvKiBzdGE6IGFyYml0cmF0aW9uIGluIHByb2dyZXNzICAgICAqLwotICAgICAgICAjZGVmaW5lICAgTE9BICAgICAweDA4ICAvKiBzdGE6IGFyYml0cmF0aW9uIGxvc3QgICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgV09BICAgICAweDA0ICAvKiBzdGE6IGFyYml0cmF0aW9uIHdvbiAgICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgSVJTVCAgICAweDAyICAvKiBzdGE6IHNjc2kgcmVzZXQgc2lnbmFsICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgU0RQICAgICAweDAxICAvKiBzdGE6IHNjc2kgcGFyaXR5IHNpZ25hbCAgICAgICAgICAqLwotCi0vKjBlKi8gIHU4CW5jX3NzdGF0MTsKLQkjZGVmaW5lICAgRkYzMjEwICAweGYwCS8qIHN0YTogYnl0ZXMgaW4gdGhlIHNjc2kgZmlmbyAgICAgICovCi0KLS8qMGYqLyAgdTgJbmNfc3N0YXQyOwotICAgICAgICAjZGVmaW5lICAgSUxGMSAgICAweDgwICAvKiBzdGE6IGRhdGEgaW4gU0lETCByZWdpc3RlciBtc2JbV10qLwotICAgICAgICAjZGVmaW5lICAgT1JGMSAgICAweDQwICAvKiBzdGE6IGRhdGEgaW4gU09EUiByZWdpc3RlciBtc2JbV10qLwotICAgICAgICAjZGVmaW5lICAgT0xGMSAgICAweDIwICAvKiBzdGE6IGRhdGEgaW4gU09ETCByZWdpc3RlciBtc2JbV10qLwotICAgICAgICAjZGVmaW5lICAgRE0gICAgICAweDA0ICAvKiBzdGE6IERJRkZTRU5TIG1pc21hdGNoICg4OTUvNiBvbmx5KSAqLwotICAgICAgICAjZGVmaW5lICAgTERTQyAgICAweDAyICAvKiBzdGE6IGRpc2Nvbm5lY3QgJiByZWNvbm5lY3QgICAgICAqLwotCi0vKjEwKi8gIHU4CW5jX2RzYTsJLyogLS0+IEJhc2UgcGFnZSAgICAgICAgICAgICAgICAgICAgKi8KLS8qMTEqLyAgdTgJbmNfZHNhMTsKLS8qMTIqLyAgdTgJbmNfZHNhMjsKLS8qMTMqLyAgdTgJbmNfZHNhMzsKLQotLyoxNCovICB1OAluY19pc3RhdDsJLyogLS0+IE1haW4gQ29tbWFuZCBhbmQgc3RhdHVzICAgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIENBQlJUICAgMHg4MCAgLyogY21kOiBhYm9ydCBjdXJyZW50IG9wZXJhdGlvbiAgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIFNSU1QgICAgMHg0MCAgLyogbW9kOiByZXNldCBjaGlwICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIFNJR1AgICAgMHgyMCAgLyogci93OiBtZXNzYWdlIGZyb20gaG9zdCB0byBuY3IgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIFNFTSAgICAgMHgxMCAgLyogci93OiBtZXNzYWdlIGJldHdlZW4gaG9zdCArIG5jciAgKi8KLSAgICAgICAgI2RlZmluZSAgIENPTiAgICAgMHgwOCAgLyogc3RhOiBjb25uZWN0ZWQgdG8gc2NzaSAgICAgICAgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIElOVEYgICAgMHgwNCAgLyogc3RhOiBpbnQgb24gdGhlIGZseSAocmVzZXQgYnkgd3IpKi8KLSAgICAgICAgI2RlZmluZSAgIFNJUCAgICAgMHgwMiAgLyogc3RhOiBzY3NpLWludGVycnVwdCAgICAgICAgICAgICAgKi8KLSAgICAgICAgI2RlZmluZSAgIERJUCAgICAgMHgwMSAgLyogc3RhOiBob3N0L3NjcmlwdCBpbnRlcnJ1cHQgICAgICAgKi8KLQotLyoxNSovICB1OAluY19pc3RhdDE7CS8qIDg5NiBhbmQgbGF0ZXIgY29yZXMgb25seSAqLwotICAgICAgICAjZGVmaW5lICAgRkxTSCAgICAweDA0ICAvKiBzdGE6IGNoaXAgaXMgZmx1c2hpbmcgICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgU1JVTiAgICAweDAyICAvKiBzdGE6IHNjcmlwdHMgYXJlIHJ1bm5pbmcgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgU0lSUUQgICAweDAxICAvKiByL3c6IGRpc2FibGUgSU5UIHBpbiAgICAgICAgICAgICAqLwotCi0vKjE2Ki8gIHU4CW5jX21ib3gwOwkvKiA4OTYgYW5kIGxhdGVyIGNvcmVzIG9ubHkgKi8KLS8qMTcqLyAgdTgJbmNfbWJveDE7CS8qIDg5NiBhbmQgbGF0ZXIgY29yZXMgb25seSAqLwotCi0vKjE4Ki8JdTgJbmNfY3Rlc3QwOwotCSNkZWZpbmUgICBFSFAgICAgIDB4MDQJLyogNzIwIGV2ZW4gaG9zdCBwYXJpdHkgICAgICAgICAgICAgKi8KLS8qMTkqLyAgdTgJbmNfY3Rlc3QxOwotCi0vKjFhKi8gIHU4CW5jX2N0ZXN0MjsKLQkjZGVmaW5lICAgQ1NJR1AgICAweDQwCi0JCQkJLyogYml0cyAwLTIsNyByc3ZkIGZvciBDMTAxMCAgICAgICAgKi8KLQotLyoxYiovICB1OAluY19jdGVzdDM7Ci0JI2RlZmluZSAgIEZMRiAgICAgMHgwOCAgLyogY21kOiBmbHVzaCBkbWEgZmlmbyAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgQ0xGCSAgMHgwNAkvKiBjbWQ6IGNsZWFyIGRtYSBmaWZvCQkgICAgKi8KLQkjZGVmaW5lICAgRk0gICAgICAweDAyICAvKiBtb2Q6IGZldGNoIHBpbiBtb2RlICAgICAgICAgICAgICAqLwotCSNkZWZpbmUgICBXUklFICAgIDB4MDEgIC8qIG1vZDogd3JpdGUgYW5kIGludmFsaWRhdGUgZW5hYmxlICovCi0JCQkJLyogYml0cyA0LTcgcnN2ZCBmb3IgQzEwMTAgICAgICAgICAgKi8KLQotLyoxYyovICB1MzIgICAgbmNfdGVtcDsJLyogIyMjIFRlbXBvcmFyeSBzdGFjayAgICAgICAgICAgICAgKi8KLQotLyoyMCovCXU4CW5jX2RmaWZvOwotLyoyMSovICB1OAluY19jdGVzdDQ7Ci0JI2RlZmluZSAgIE1VWCAgICAgMHg4MCAgLyogNzIwIGhvc3QgYnVzIG11bHRpcGxleCBtb2RlICAgICAgKi8KLQkjZGVmaW5lICAgQkRJUyAgICAweDgwICAvKiBtb2Q6IGJ1cnN0IGRpc2FibGUgICAgICAgICAgICAgICAqLwotCSNkZWZpbmUgICBNUEVFICAgIDB4MDggIC8qIG1vZDogbWFzdGVyIHBhcml0eSBlcnJvciBlbmFibGUgICovCi0KLS8qMjIqLyAgdTgJbmNfY3Rlc3Q1OwotCSNkZWZpbmUgICBERlMgICAgIDB4MjAgIC8qIG1vZDogZG1hIGZpZm8gc2l6ZSAgICAgICAgICAgICAgICovCi0JCQkJLyogYml0cyAwLTEsIDMtNyByc3ZkIGZvciBDMTAxMCAgICAgICAgICAqLwotLyoyMyovICB1OAluY19jdGVzdDY7Ci0KLS8qMjQqLyAgdTMyICAgIG5jX2RiYzsJLyogIyMjIEJ5dGUgY291bnQgYW5kIGNvbW1hbmQgICAgICAgKi8KLS8qMjgqLyAgdTMyICAgIG5jX2RuYWQ7CS8qICMjIyBOZXh0IGNvbW1hbmQgcmVnaXN0ZXIgICAgICAgICovCi0vKjJjKi8gIHUzMiAgICBuY19kc3A7CS8qIC0tPiBTY3JpcHQgUG9pbnRlciAgICAgICAgICAgICAgICovCi0vKjMwKi8gIHUzMiAgICBuY19kc3BzOwkvKiAtLT4gU2NyaXB0IHBvaW50ZXIgc2F2ZS9vcGNvZGUjMiAqLwotCi0vKjM0Ki8gIHU4CW5jX3NjcmF0Y2hhOyAgLyogVGVtcG9yYXJ5IHJlZ2lzdGVyIGEgICAgICAgICAgICAqLwotLyozNSovICB1OAluY19zY3JhdGNoYTE7Ci0vKjM2Ki8gIHU4CW5jX3NjcmF0Y2hhMjsKLS8qMzcqLyAgdTgJbmNfc2NyYXRjaGEzOwotCi0vKjM4Ki8gIHU4CW5jX2Rtb2RlOwotCSNkZWZpbmUgICBCTF8yICAgIDB4ODAgIC8qIG1vZDogYnVyc3QgbGVuZ3RoIHNoaWZ0IHZhbHVlICsyICovCi0JI2RlZmluZSAgIEJMXzEgICAgMHg0MCAgLyogbW9kOiBidXJzdCBsZW5ndGggc2hpZnQgdmFsdWUgKzEgKi8KLQkjZGVmaW5lICAgRVJMICAgICAweDA4ICAvKiBtb2Q6IGVuYWJsZSByZWFkIGxpbmUgICAgICAgICAgICAqLwotCSNkZWZpbmUgICBFUk1QICAgIDB4MDQgIC8qIG1vZDogZW5hYmxlIHJlYWQgbXVsdGlwbGUgICAgICAgICovCi0JI2RlZmluZSAgIEJPRiAgICAgMHgwMiAgLyogbW9kOiBidXJzdCBvcCBjb2RlIGZldGNoICAgICAgICAgKi8KLQotLyozOSovICB1OAluY19kaWVuOwotLyozYSovICB1OAluY19zYnI7Ci0KLS8qM2IqLyAgdTgJbmNfZGNudGw7CS8qIC0tPiBTY3JpcHQgZXhlY3V0aW9uIGNvbnRyb2wgICAgICovCi0JI2RlZmluZSAgIENMU0UgICAgMHg4MCAgLyogbW9kOiBjYWNoZSBsaW5lIHNpemUgZW5hYmxlICAgICAgKi8KLQkjZGVmaW5lICAgUEZGICAgICAweDQwICAvKiBjbWQ6IHByZS1mZXRjaCBmbHVzaCAgICAgICAgICAgICAqLwotCSNkZWZpbmUgICBQRkVOICAgIDB4MjAgIC8qIG1vZDogcHJlLWZldGNoIGVuYWJsZSAgICAgICAgICAgICovCi0JI2RlZmluZSAgIEVBICAgICAgMHgyMCAgLyogbW9kOiA3MjAgZW5hYmxlLWFjayAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgU1NNICAgICAweDEwICAvKiBtb2Q6IHNpbmdsZSBzdGVwIG1vZGUgICAgICAgICAgICAqLwotCSNkZWZpbmUgICBJUlFNICAgIDB4MDggIC8qIG1vZDogaXJxIG1vZGUgKDEgPSB0b3RlbSBwb2xlICEpICovCi0JI2RlZmluZSAgIFNURCAgICAgMHgwNCAgLyogY21kOiBzdGFydCBkbWEgbW9kZSAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgSVJRRCAgICAweDAyICAvKiBtb2Q6IGlycSBkaXNhYmxlICAgICAgICAgICAgICAgICAqLwotIAkjZGVmaW5lCSAgTk9DT00gICAweDAxCS8qIGNtZDogcHJvdGVjdCBzZmJyIHdoaWxlIHJlc2VsZWN0ICovCi0JCQkJLyogYml0cyAwLTEgcnN2ZCBmb3IgQzEwMTAgICAgICAgICAgKi8KLQotLyozYyovICB1MzIJbmNfYWRkZXI7Ci0KLS8qNDAqLyAgdTE2CW5jX3NpZW47CS8qIC0tPjogaW50ZXJydXB0IGVuYWJsZSAgICAgICAgICAgICovCi0vKjQyKi8gIHUxNgluY19zaXN0OwkvKiA8LS06IGludGVycnVwdCBzdGF0dXMgICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgU0JNQyAgICAweDEwMDAvKiBzdGE6IFNDU0kgQnVzIE1vZGUgQ2hhbmdlICg4OTUvNiBvbmx5KSAqLwotICAgICAgICAjZGVmaW5lICAgU1RPICAgICAweDA0MDAvKiBzdGE6IHRpbWVvdXQgKHNlbGVjdCkgICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgR0VOICAgICAweDAyMDAvKiBzdGE6IHRpbWVvdXQgKGdlbmVyYWwpICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgSFRIICAgICAweDAxMDAvKiBzdGE6IHRpbWVvdXQgKGhhbmRzaGFrZSkgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgTUEgICAgICAweDgwICAvKiBzdGE6IHBoYXNlIG1pc21hdGNoICAgICAgICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgQ01QICAgICAweDQwICAvKiBzdGE6IGFyYml0cmF0aW9uIGNvbXBsZXRlICAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgU0VMICAgICAweDIwICAvKiBzdGE6IHNlbGVjdGVkIGJ5IGFub3RoZXIgZGV2aWNlICAqLwotICAgICAgICAjZGVmaW5lICAgUlNMICAgICAweDEwICAvKiBzdGE6IHJlc2VsZWN0ZWQgYnkgYW5vdGhlciBkZXZpY2UqLwotICAgICAgICAjZGVmaW5lICAgU0dFICAgICAweDA4ICAvKiBzdGE6IGdyb3NzIGVycm9yIChvdmVyL3VuZGVyZmxvdykqLwotICAgICAgICAjZGVmaW5lICAgVURDICAgICAweDA0ICAvKiBzdGE6IHVuZXhwZWN0ZWQgZGlzY29ubmVjdCAgICAgICAqLwotICAgICAgICAjZGVmaW5lICAgUlNUICAgICAweDAyICAvKiBzdGE6IHNjc2kgYnVzIHJlc2V0IGRldGVjdGVkICAgICAqLwotICAgICAgICAjZGVmaW5lICAgUEFSICAgICAweDAxICAvKiBzdGE6IHNjc2kgcGFyaXR5IGVycm9yICAgICAgICAgICAqLwotCi0vKjQ0Ki8gIHU4CW5jX3NscGFyOwotLyo0NSovICB1OAluY19zd2lkZTsKLS8qNDYqLyAgdTgJbmNfbWFjbnRsOwotLyo0NyovICB1OAluY19ncGNudGw7Ci0vKjQ4Ki8gIHU4CW5jX3N0aW1lMDsgICAgLyogY21kOiB0aW1lb3V0IGZvciBzZWxlY3QmaGFuZHNoYWtlKi8KLS8qNDkqLyAgdTgJbmNfc3RpbWUxOyAgICAvKiBjbWQ6IHRpbWVvdXQgdXNlciBkZWZpbmVkICAgICAgICAqLwotLyo0YSovICB1MTYgICBuY19yZXNwaWQ7ICAgIC8qIHN0YTogUmVzZWxlY3QtSURzICAgICAgICAgICAgICAgICovCi0KLS8qNGMqLyAgdTgJbmNfc3Rlc3QwOwotCi0vKjRkKi8gIHU4CW5jX3N0ZXN0MTsKLQkjZGVmaW5lICAgU0NMSyAgICAweDgwCS8qIFVzZSB0aGUgUENJIGNsb2NrIGFzIFNDU0kgY2xvY2sJKi8KLQkjZGVmaW5lICAgREJMRU4gICAweDA4CS8qIGNsb2NrIGRvdWJsZXIgcnVubmluZwkJKi8KLQkjZGVmaW5lICAgREJMU0VMICAweDA0CS8qIGNsb2NrIGRvdWJsZXIgc2VsZWN0ZWQJCSovCi0gIAotCi0vKjRlKi8gIHU4CW5jX3N0ZXN0MjsKLQkjZGVmaW5lICAgUk9GICAgICAweDQwCS8qIHJlc2V0IHNjc2kgb2Zmc2V0IChhZnRlciBncm9zcyBlcnJvciEpICovCi0JI2RlZmluZSAgIERJRiAgICAgMHgyMCAgLyogNzIwIFNDU0kgZGlmZmVyZW50aWFsIG1vZGUgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgRVhUICAgICAweDAyICAvKiBleHRlbmRlZCBmaWx0ZXJpbmcgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKjRmKi8gIHU4CW5jX3N0ZXN0MzsKLQkjZGVmaW5lICAgVEUgICAgIDB4ODAJLyogYzogdG9sZXJBbnQgZW5hYmxlICovCi0JI2RlZmluZSAgIEhTQyAgICAweDIwCS8qIGM6IEhhbHQgU0NTSSBDbG9jayAqLwotCSNkZWZpbmUgICBDU0YgICAgMHgwMgkvKiBjOiBjbGVhciBzY3NpIGZpZm8gKi8KLQotLyo1MCovICB1MTYgICBuY19zaWRsOwkvKiBMb3dsZXZlbDogbGF0Y2hlZCBmcm9tIHNjc2kgZGF0YSAqLwotLyo1MiovICB1OAluY19zdGVzdDQ7Ci0JI2RlZmluZSAgIFNNT0RFICAweGMwCS8qIFNDU0kgYnVzIG1vZGUgICAgICAoODk1LzYgb25seSkgKi8KLQkjZGVmaW5lICAgIFNNT0RFX0hWRCAweDQwCS8qIEhpZ2ggVm9sdGFnZSBEaWZmZXJlbnRpYWwgICAgICAgKi8KLQkjZGVmaW5lICAgIFNNT0RFX1NFICAweDgwCS8qIFNpbmdsZSBFbmRlZCAgICAgICAgICAgICAgICAgICAgKi8KLQkjZGVmaW5lICAgIFNNT0RFX0xWRCAweGMwCS8qIExvdyBWb2x0YWdlIERpZmZlcmVudGlhbCAgICAgICAgKi8KLQkjZGVmaW5lICAgTENLRlJRIDB4MjAJLyogRnJlcXVlbmN5IExvY2sgKDg5NS82IG9ubHkpICAgICAqLwotCQkJCS8qIGJpdHMgMC01IHJzdmQgZm9yIEMxMDEwICAgICAgICAgICovCi0KLS8qNTMqLyAgdTgJbmNfNTNfOwotLyo1NCovICB1MTYJbmNfc29kbDsJLyogTG93bGV2ZWw6IGRhdGEgb3V0IHRvIHNjc2kgZGF0YSAgKi8KLS8qNTYqLwl1OAluY19jY250bDA7CS8qIENoaXAgQ29udHJvbCAwICg4OTYpICAgICAgICAgICAgICovCi0JI2RlZmluZSAgIEVOUE1KICAweDgwCS8qIEVuYWJsZSBQaGFzZSBNaXNtYXRjaCBKdW1wICAgICAgICovCi0JI2RlZmluZSAgIFBNSkNUTCAweDQwCS8qIFBoYXNlIE1pc21hdGNoIEp1bXAgQ29udHJvbCAgICAgICovCi0JI2RlZmluZSAgIEVOTkRKICAweDIwCS8qIEVuYWJsZSBOb24gRGF0YSBQTSBKdW1wICAgICAgICAgICovCi0JI2RlZmluZSAgIERJU0ZDICAweDEwCS8qIERpc2FibGUgQXV0byBGSUZPIENsZWFyICAgICAgICAgICovCi0JI2RlZmluZSAgIERJTFMgICAweDAyCS8qIERpc2FibGUgSW50ZXJuYWwgTG9hZC9TdG9yZSAgICAgICovCi0JI2RlZmluZSAgIERQUiAgICAweDAxCS8qIERpc2FibGUgUGlwZSBSZXEgICAgICAgICAgICAgICAgICovCi0KLS8qNTcqLwl1OAluY19jY250bDE7CS8qIENoaXAgQ29udHJvbCAxICg4OTYpICAgICAgICAgICAgICovCi0JI2RlZmluZSAgIFpNT0QgICAweDgwCS8qIEhpZ2ggSW1wZWRhbmNlIE1vZGUgICAgICAgICAgICAgICovCi0JI2RlZmluZQkgIERJQwkgMHgxMAkvKiBEaXNhYmxlIEludGVybmFsIEN5Y2xlcwkgICAgKi8KLQkjZGVmaW5lICAgRERBQyAgIDB4MDgJLyogRGlzYWJsZSBEdWFsIEFkZHJlc3MgQ3ljbGUgICAgICAgKi8KLQkjZGVmaW5lICAgWFRJTU9EIDB4MDQJLyogNjQtYml0IFRhYmxlIEluZC4gSW5kZXhpbmcgTW9kZSAgKi8KLQkjZGVmaW5lICAgRVhUSUJNViAweDAyCS8qIEVuYWJsZSA2NC1iaXQgVGFibGUgSW5kLiBCTU9WICAgICovCi0JI2RlZmluZSAgIEVYREJNViAweDAxCS8qIEVuYWJsZSA2NC1iaXQgRGlyZWN0IEJNT1YgICAgICAgICovCi0KLS8qNTgqLyAgdTE2CW5jX3NiZGw7CS8qIExvd2xldmVsOiBkYXRhIGZyb20gc2NzaSBkYXRhICAgICovCi0vKjVhKi8gIHUxNgluY181YV87Ci0KLS8qNWMqLyAgdTgJbmNfc2NyMDsJLyogV29ya2luZyByZWdpc3RlciBCICAgICAgICAgICAgICAgKi8KLS8qNWQqLyAgdTgJbmNfc2NyMTsJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qNWUqLyAgdTgJbmNfc2NyMjsJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qNWYqLyAgdTgJbmNfc2NyMzsJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyo2MCovICB1OAluY19zY3J4WzY0XTsJLyogV29ya2luZyByZWdpc3RlciBDLVIgICAgICAgICAgICAgKi8KLS8qYTAqLwl1MzIJbmNfbW1yczsJLyogTWVtb3J5IE1vdmUgUmVhZCBTZWxlY3RvciAgICAgICAgKi8KLS8qYTQqLwl1MzIJbmNfbW13czsJLyogTWVtb3J5IE1vdmUgV3JpdGUgU2VsZWN0b3IgICAgICAgKi8KLS8qYTgqLwl1MzIJbmNfc2ZzOwkJLyogU2NyaXB0IEZldGNoIFNlbGVjdG9yICAgICAgICAgICAgKi8KLS8qYWMqLwl1MzIJbmNfZHJzOwkJLyogRFNBIFJlbGF0aXZlIFNlbGVjdG9yICAgICAgICAgICAgKi8KLS8qYjAqLwl1MzIJbmNfc2JtczsJLyogU3RhdGljIEJsb2NrIE1vdmUgU2VsZWN0b3IgICAgICAgKi8KLS8qYjQqLwl1MzIJbmNfZGJtczsJLyogRHluYW1pYyBCbG9jayBNb3ZlIFNlbGVjdG9yICAgICAgKi8KLS8qYjgqLwl1MzIJbmNfZG5hZDY0OwkvKiBETUEgTmV4dCBBZGRyZXNzIDY0ICAgICAgICAgICAgICAqLwotLypiYyovCXUxNgluY19zY250bDQ7CS8qIEMxMDEwIG9ubHkgICAgICAgICAgICAgICAgICAgICAgICovCi0JI2RlZmluZSAgIFUzRU4gICAweDgwCS8qIEVuYWJsZSBVbHRyYSAzICAgICAgICAgICAgICAgICAgICovCi0JI2RlZmluZSAgIEFJUEVOCSAweDQwICAgLyogQWxsb3cgY2hlY2sgdXBwZXIgYnl0ZSBsYW5lcyAgICAgKi8KLQkjZGVmaW5lICAgWENMS0hfRFQgMHgwOCAvKiBFeHRyYSBjbG9jayBvZiBkYXRhIGhvbGQgb24gRFQKLQkJCQkJdHJhbnNmZXIgZWRnZQkgICAgICAgICAgICAqLwotCSNkZWZpbmUgICBYQ0xLSF9TVCAweDA0IC8qIEV4dHJhIGNsb2NrIG9mIGRhdGEgaG9sZCBvbiBTVAotCQkJCQl0cmFuc2ZlciBlZGdlCSAgICAgICAgICAgICovCi0KLS8qYmUqLyAgdTgJbmNfYWlwY250bDA7CS8qIEVwYXQgQ29udHJvbCAxIEMxMDEwIG9ubHkgICAgICAgICovCi0vKmJmKi8gIHU4CW5jX2FpcGNudGwxOwkvKiBBSVAgQ29udHJvbCBDMTAxMF82NiBPbmx5ICAgICAgICAqLwotCi0vKmMwKi8JdTMyCW5jX3BtamFkMTsJLyogUGhhc2UgTWlzbWF0Y2ggSnVtcCBBZGRyZXNzIDEgICAgKi8KLS8qYzQqLwl1MzIJbmNfcG1qYWQyOwkvKiBQaGFzZSBNaXNtYXRjaCBKdW1wIEFkZHJlc3MgMiAgICAqLwotLypjOCovCXU4CW5jX3JiYzsJCS8qIFJlbWFpbmluZyBCeXRlIENvdW50ICAgICAgICAgICAgICovCi0vKmM5Ki8JdTgJbmNfcmJjMTsJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qY2EqLwl1OAluY19yYmMyOwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLypjYiovCXU4CW5jX3JiYzM7CS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qY2MqLwl1OAluY191YTsJCS8qIFVwZGF0ZWQgQWRkcmVzcyAgICAgICAgICAgICAgICAgICovCi0vKmNkKi8JdTgJbmNfdWExOwkJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qY2UqLwl1OAluY191YTI7CQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLypjZiovCXU4CW5jX3VhMzsJCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKmQwKi8JdTMyCW5jX2VzYTsJCS8qIEVudHJ5IFN0b3JhZ2UgQWRkcmVzcyAgICAgICAgICAgICovCi0vKmQ0Ki8JdTgJbmNfaWE7CQkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzICAgICAgICAgICAgICAqLwotLypkNSovCXU4CW5jX2lhMTsKLS8qZDYqLwl1OAluY19pYTI7Ci0vKmQ3Ki8JdTgJbmNfaWEzOwotLypkOCovCXUzMgluY19zYmM7CQkvKiBTQ1NJIEJ5dGUgQ291bnQgKDMgYnl0ZXMgb25seSkgICAqLwotLypkYyovCXUzMgluY19jc2JjOwkvKiBDdW11bGF0aXZlIFNDU0kgQnl0ZSBDb3VudCAgICAgICAqLwotCi0JCQkJLyogRm9sbG93aW5nIGZvciBDMTAxMCBvbmx5ICAgICAgICAgKi8KLS8qZTAqLyAgdTE2CW5jX2NyY3BhZDsJLyogQ1JDIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qZTIqLyAgdTgJbmNfY3JjY250bDA7CS8qIENSQyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICovCi0JI2RlZmluZSAgIFNORENSQyAgMHgxMAkvKiBTZW5kIENSQyBSZXF1ZXN0ICAgICAgICAgICAgICAgICAqLwotLyplMyovICB1OAluY19jcmNjbnRsMTsJLyogQ1JDIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgKi8KLS8qZTQqLyAgdTMyCW5jX2NyY2RhdGE7CS8qIENSQyBkYXRhIHJlZ2lzdGVyICAgICAgICAgICAgICAgICovIAotLyplOCovICB1MzIJbmNfZThfOwkJLyogcnN2ZCAJCQkgICAgKi8KLS8qZWMqLyAgdTMyCW5jX2VjXzsJCS8qIHJzdmQgCQkJICAgICovCi0vKmYwKi8gIHUxNgluY19kZmJjOwkvKiBETUEgRklGTyBieXRlIGNvdW50ICAgICAgICAgICAgICAqLyAKLQotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCVV0aWxpdHkgbWFjcm9zIGZvciB0aGUgc2NyaXB0LgotKioKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNkZWZpbmUgUkVHSihwLHIpIChvZmZzZXRvZihzdHJ1Y3QgbmNyX3JlZywgcCAjIyByKSkKLSNkZWZpbmUgUkVHKHIpIFJFR0ogKG5jXywgcikKLQotdHlwZWRlZiB1MzIgbmNyY21kOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKioJU0NTSSBwaGFzZXMKLSoqCi0qKglEVCBwaGFzZXMgaWxsZWdhbCBmb3IgbmNyIGRyaXZlci4KLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jZGVmaW5lCVNDUl9EQVRBX09VVAkweDAwMDAwMDAwCi0jZGVmaW5lCVNDUl9EQVRBX0lOCTB4MDEwMDAwMDAKLSNkZWZpbmUJU0NSX0NPTU1BTkQJMHgwMjAwMDAwMAotI2RlZmluZQlTQ1JfU1RBVFVTCTB4MDMwMDAwMDAKLSNkZWZpbmUgU0NSX0RUX0RBVEFfT1VUCTB4MDQwMDAwMDAKLSNkZWZpbmUgU0NSX0RUX0RBVEFfSU4JMHgwNTAwMDAwMAotI2RlZmluZSBTQ1JfTVNHX09VVAkweDA2MDAwMDAwCi0jZGVmaW5lIFNDUl9NU0dfSU4gICAgICAweDA3MDAwMDAwCi0KLSNkZWZpbmUgU0NSX0lMR19PVVQJMHgwNDAwMDAwMAotI2RlZmluZSBTQ1JfSUxHX0lOCTB4MDUwMDAwMDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCURhdGEgdHJhbnNmZXIgdmlhIFNDU0kuCi0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCU1PVkVfQUJTIChMRU4pCi0qKgk8PHN0YXJ0IGFkZHJlc3M+PgotKioKLSoqCU1PVkVfSU5EIChMRU4pCi0qKgk8PGRuYWRfb2Zmc2V0Pj4KLSoqCi0qKglNT1ZFX1RCTAotKioJPDxkbmFkX29mZnNldD4+Ci0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2RlZmluZSBPUENfTU9WRSAgICAgICAgICAweDA4MDAwMDAwCi0KLSNkZWZpbmUgU0NSX01PVkVfQUJTKGwpICgoMHgwMDAwMDAwMCB8IE9QQ19NT1ZFKSB8IChsKSkKLSNkZWZpbmUgU0NSX01PVkVfSU5EKGwpICgoMHgyMDAwMDAwMCB8IE9QQ19NT1ZFKSB8IChsKSkKLSNkZWZpbmUgU0NSX01PVkVfVEJMICAgICAoMHgxMDAwMDAwMCB8IE9QQ19NT1ZFKQotCi0jZGVmaW5lIFNDUl9DSE1PVl9BQlMobCkgKCgweDAwMDAwMDAwKSB8IChsKSkKLSNkZWZpbmUgU0NSX0NITU9WX0lORChsKSAoKDB4MjAwMDAwMDApIHwgKGwpKQotI2RlZmluZSBTQ1JfQ0hNT1ZfVEJMICAgICAoMHgxMDAwMDAwMCkKLQotc3RydWN0IHNjcl90Ymxtb3ZlIHsKLSAgICAgICAgdTMyICBzaXplOwotICAgICAgICB1MzIgIGFkZHI7Ci19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKioJU2VsZWN0aW9uCi0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCVNFTF9BQlMgfCBTQ1JfSUQgKDAuLjE1KSAgICBbIHwgUkVMX0pNUF0KLSoqCTw8YWx0ZXJuYXRlX2FkZHJlc3M+PgotKioKLSoqCVNFTF9UQkwgfCA8PCBkbmFkX29mZnNldD4+ICBbIHwgUkVMX0pNUF0KLSoqCTw8YWx0ZXJuYXRlX2FkZHJlc3M+PgotKioKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNkZWZpbmUJU0NSX1NFTF9BQlMJMHg0MDAwMDAwMAotI2RlZmluZQlTQ1JfU0VMX0FCU19BVE4JMHg0MTAwMDAwMAotI2RlZmluZQlTQ1JfU0VMX1RCTAkweDQyMDAwMDAwCi0jZGVmaW5lCVNDUl9TRUxfVEJMX0FUTgkweDQzMDAwMDAwCi0KLQotI2lmZGVmIFNDU0lfTkNSX0JJR19FTkRJQU4KLXN0cnVjdCBzY3JfdGJsc2VsIHsKLSAgICAgICAgdTgJc2VsX3NjbnRsMzsKLSAgICAgICAgdTgJc2VsX2lkOwotICAgICAgICB1OAlzZWxfc3hmZXI7Ci0gICAgICAgIHU4CXNlbF9zY250bDQ7CQotfTsKLSNlbHNlCi1zdHJ1Y3Qgc2NyX3RibHNlbCB7Ci0gICAgICAgIHU4CXNlbF9zY250bDQ7CQotICAgICAgICB1OAlzZWxfc3hmZXI7Ci0gICAgICAgIHU4CXNlbF9pZDsKLSAgICAgICAgdTgJc2VsX3NjbnRsMzsKLX07Ci0jZW5kaWYKLQotI2RlZmluZSBTQ1JfSk1QX1JFTCAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBTQ1JfSUQoaWQpCSgoKHUzMikoaWQpKSA8PCAxNikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCVdhaXRpbmcgZm9yIERpc2Nvbm5lY3Qgb3IgUmVzZWxlY3QKLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKioJV0FJVF9ESVNDCi0qKglkdW1teTogPDxhbHRlcm5hdGVfYWRkcmVzcz4+Ci0qKgotKioJV0FJVF9SRVNFTAotKioJPDxhbHRlcm5hdGVfYWRkcmVzcz4+Ci0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2RlZmluZQlTQ1JfV0FJVF9ESVNDCTB4NDgwMDAwMDAKLSNkZWZpbmUgU0NSX1dBSVRfUkVTRUwgIDB4NTAwMDAwMDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCUJpdCBTZXQgLyBSZXNldAotKioKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKglTRVQgKGZsYWdzIHt8Li4gfSkKLSoqCi0qKglDTFIgKGZsYWdzIHt8Li4gfSkKLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jZGVmaW5lIFNDUl9TRVQoZikgICAgICgweDU4MDAwMDAwIHwgKGYpKQotI2RlZmluZSBTQ1JfQ0xSKGYpICAgICAoMHg2MDAwMDAwMCB8IChmKSkKLQotI2RlZmluZQlTQ1JfQ0FSUlkJMHgwMDAwMDQwMAotI2RlZmluZQlTQ1JfVFJHCQkweDAwMDAwMjAwCi0jZGVmaW5lCVNDUl9BQ0sJCTB4MDAwMDAwNDAKLSNkZWZpbmUJU0NSX0FUTgkJMHgwMDAwMDAwOAotCi0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKioJTWVtb3J5IHRvIG1lbW9yeSBtb3ZlCi0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCUNPUFkgKGJ5dGVjb3VudCkKLSoqCTw8IHNvdXJjZV9hZGRyZXNzID4+Ci0qKgk8PCBkZXN0aW5hdGlvbl9hZGRyZXNzID4+Ci0qKgotKioJU0NSX0NPUFkgICBzZXRzIHRoZSBOTyBGTFVTSCBvcHRpb24gYnkgZGVmYXVsdC4KLSoqCVNDUl9DT1BZX0YgZG9lcyBub3Qgc2V0IHRoaXMgb3B0aW9uLgotKioKLSoqCUZvciBjaGlwcyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aGlzIG9wdGlvbiwKLSoqCW5jcl9jb3B5X2FuZF9iaW5kKCkgd2lsbCByZW1vdmUgdGhpcyBiaXQuCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jZGVmaW5lIFNDUl9OT19GTFVTSCAweDAxMDAwMDAwCi0KLSNkZWZpbmUgU0NSX0NPUFkobikgKDB4YzAwMDAwMDAgfCBTQ1JfTk9fRkxVU0ggfCAobikpCi0jZGVmaW5lIFNDUl9DT1BZX0YobikgKDB4YzAwMDAwMDAgfCAobikpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKglSZWdpc3RlciBtb3ZlIGFuZCBiaW5hcnkgb3BlcmF0aW9ucwotKioKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKglTRkJSX1JFRyAocmVnLCBvcCwgZGF0YSkgICAgICAgIHJlZyAgPSBTRkJSIG9wIGRhdGEKLSoqCTw8IDAgPj4KLSoqCi0qKglSRUdfU0ZCUiAocmVnLCBvcCwgZGF0YSkgICAgICAgIFNGQlIgPSByZWcgb3AgZGF0YQotKioJPDwgMCA+PgotKioKLSoqCVJFR19SRUcgIChyZWcsIG9wLCBkYXRhKSAgICAgICAgcmVnICA9IHJlZyBvcCBkYXRhCi0qKgk8PCAwID4+Ci0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioJT24gODEwQSwgODYwLCA4MjVBLCA4NzUsIDg5NSBhbmQgODk2IGNoaXBzIHRoZSBjb250ZW50IAotKioJb2YgU0ZCUiByZWdpc3RlciBjYW4gYmUgdXNlZCBhcyBkYXRhIChTQ1JfU0ZCUl9EQVRBKS4KLSoqCVRoZSA4OTYgaGFzIGFkZGl0aW9ubmFsIElPIHJlZ2lzdGVycyBzdGFydGluZyBhdCAKLSoqCW9mZnNldCAweDgwLiBCaXQgNyBvZiByZWdpc3RlciBvZmZzZXQgaXMgc3RvcmVkIGluIAotKioJYml0IDcgb2YgdGhlIFNDUklQVFMgaW5zdHJ1Y3Rpb24gZmlyc3QgRFdPUkQuCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jZGVmaW5lIFNDUl9SRUdfT0ZTKG9mcykgKCgoKG9mcykgJiAweDdmKSA8PCAxNnVsKSArICgob2ZzKSAmIDB4ODApKSAKLQotI2RlZmluZSBTQ1JfU0ZCUl9SRUcocmVnLG9wLGRhdGEpIFwKLSAgICAgICAgKDB4NjgwMDAwMDAgfCAoU0NSX1JFR19PRlMoUkVHKHJlZykpKSB8IChvcCkgfCAoKChkYXRhKSYweGZmKTw8OHVsKSkKLQotI2RlZmluZSBTQ1JfUkVHX1NGQlIocmVnLG9wLGRhdGEpIFwKLSAgICAgICAgKDB4NzAwMDAwMDAgfCAoU0NSX1JFR19PRlMoUkVHKHJlZykpKSB8IChvcCkgfCAoKChkYXRhKSYweGZmKTw8OHVsKSkKLQotI2RlZmluZSBTQ1JfUkVHX1JFRyhyZWcsb3AsZGF0YSkgXAotICAgICAgICAoMHg3ODAwMDAwMCB8IChTQ1JfUkVHX09GUyhSRUcocmVnKSkpIHwgKG9wKSB8ICgoKGRhdGEpJjB4ZmYpPDw4dWwpKQotCi0KLSNkZWZpbmUgICAgICBTQ1JfTE9BRCAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgICAgICBTQ1JfU0hMICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgICAgICBTQ1JfT1IgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgICAgICBTQ1JfWE9SICAgIDB4MDMwMDAwMDAKLSNkZWZpbmUgICAgICBTQ1JfQU5EICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgICAgICBTQ1JfU0hSICAgIDB4MDUwMDAwMDAKLSNkZWZpbmUgICAgICBTQ1JfQUREICAgIDB4MDYwMDAwMDAKLSNkZWZpbmUgICAgICBTQ1JfQUREQyAgIDB4MDcwMDAwMDAKLQotI2RlZmluZSAgICAgIFNDUl9TRkJSX0RBVEEgICAoMHgwMDgwMDAwMD4+OHVsKQkvKiBVc2UgU0ZCUiBhcyBkYXRhICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKglGUk9NX1JFRyAocmVnKQkJICBTRkJSID0gcmVnCi0qKgk8PCAwID4+Ci0qKgotKioJVE9fUkVHCSAocmVnKQkJICByZWcgID0gU0ZCUgotKioJPDwgMCA+PgotKioKLSoqCUxPQURfUkVHIChyZWcsIGRhdGEpCSAgcmVnICA9IDxkYXRhPgotKioJPDwgMCA+PgotKioKLSoqCUxPQURfU0ZCUihkYXRhKSAJICBTRkJSID0gPGRhdGE+Ci0qKgk8PCAwID4+Ci0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2RlZmluZQlTQ1JfRlJPTV9SRUcocmVnKSBcCi0JU0NSX1JFR19TRkJSKHJlZyxTQ1JfT1IsMCkKLQotI2RlZmluZQlTQ1JfVE9fUkVHKHJlZykgXAotCVNDUl9TRkJSX1JFRyhyZWcsU0NSX09SLDApCi0KLSNkZWZpbmUJU0NSX0xPQURfUkVHKHJlZyxkYXRhKSBcCi0JU0NSX1JFR19SRUcocmVnLFNDUl9MT0FELGRhdGEpCi0KLSNkZWZpbmUgU0NSX0xPQURfU0ZCUihkYXRhKSBcCi0gICAgICAgIChTQ1JfUkVHX1NGQlIgKGdwcmVnLCBTQ1JfTE9BRCwgZGF0YSkpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKglMT0FEICBmcm9tIG1lbW9yeSAgIHRvIHJlZ2lzdGVyLgotKioJU1RPUkUgZnJvbSByZWdpc3RlciB0byBtZW1vcnkuCi0qKgotKioJT25seSBzdXBwb3J0ZWQgYnkgODEwQSwgODYwLCA4MjVBLCA4NzUsIDg5NSBhbmQgODk2LgotKioKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKglMT0FEX0FCUyAoTEVOKQotKioJPDxzdGFydCBhZGRyZXNzPj4KLSoqCi0qKglMT0FEX1JFTCAoTEVOKSAgICAgICAgKERTQSByZWxhdGl2ZSkKLSoqCTw8ZHNhX29mZnNldD4+Ci0qKgotKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2RlZmluZSBTQ1JfUkVHX09GUzIob2ZzKSAoKChvZnMpICYgMHhmZikgPDwgMTZ1bCkKLSNkZWZpbmUgU0NSX05PX0ZMVVNIMgkweDAyMDAwMDAwCi0jZGVmaW5lIFNDUl9EU0FfUkVMMgkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU0NSX0xPQURfUihyZWcsIGhvdywgbikgXAotICAgICAgICAoMHhlMTAwMDAwMCB8IGhvdyB8IChTQ1JfUkVHX09GUzIoUkVHKHJlZykpKSB8IChuKSkKLQotI2RlZmluZSBTQ1JfU1RPUkVfUihyZWcsIGhvdywgbikgXAotICAgICAgICAoMHhlMDAwMDAwMCB8IGhvdyB8IChTQ1JfUkVHX09GUzIoUkVHKHJlZykpKSB8IChuKSkKLQotI2RlZmluZSBTQ1JfTE9BRF9BQlMocmVnLCBuKQlTQ1JfTE9BRF9SKHJlZywgU0NSX05PX0ZMVVNIMiwgbikKLSNkZWZpbmUgU0NSX0xPQURfUkVMKHJlZywgbikJU0NSX0xPQURfUihyZWcsIFNDUl9OT19GTFVTSDJ8U0NSX0RTQV9SRUwyLCBuKQotI2RlZmluZSBTQ1JfTE9BRF9BQlNfRihyZWcsIG4pCVNDUl9MT0FEX1IocmVnLCAwLCBuKQotI2RlZmluZSBTQ1JfTE9BRF9SRUxfRihyZWcsIG4pCVNDUl9MT0FEX1IocmVnLCBTQ1JfRFNBX1JFTDIsIG4pCi0KLSNkZWZpbmUgU0NSX1NUT1JFX0FCUyhyZWcsIG4pCVNDUl9TVE9SRV9SKHJlZywgU0NSX05PX0ZMVVNIMiwgbikKLSNkZWZpbmUgU0NSX1NUT1JFX1JFTChyZWcsIG4pCVNDUl9TVE9SRV9SKHJlZywgU0NSX05PX0ZMVVNIMnxTQ1JfRFNBX1JFTDIsbikKLSNkZWZpbmUgU0NSX1NUT1JFX0FCU19GKHJlZywgbikJU0NSX1NUT1JFX1IocmVnLCAwLCBuKQotI2RlZmluZSBTQ1JfU1RPUkVfUkVMX0YocmVnLCBuKQlTQ1JfU1RPUkVfUihyZWcsIFNDUl9EU0FfUkVMMiwgbikKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKioJV2FpdGluZyBmb3IgRGlzY29ubmVjdCBvciBSZXNlbGVjdAotKioKLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKglKVU1QICAgICAgICAgICAgWyB8IElGVFJVRS9JRkZBTFNFICggLi4uICkgXQotKioJPDxhZGRyZXNzPj4KLSoqCi0qKglKVU1QUiAgICAgICAgICAgWyB8IElGVFJVRS9JRkZBTFNFICggLi4uICkgXQotKioJPDxkaXN0YW5jZT4+Ci0qKgotKioJQ0FMTCAgICAgICAgICAgIFsgfCBJRlRSVUUvSUZGQUxTRSAoIC4uLiApIF0KLSoqCTw8YWRkcmVzcz4+Ci0qKgotKioJQ0FMTFIgICAgICAgICAgIFsgfCBJRlRSVUUvSUZGQUxTRSAoIC4uLiApIF0KLSoqCTw8ZGlzdGFuY2U+PgotKioKLSoqCVJFVFVSTiAgICAgICAgICBbIHwgSUZUUlVFL0lGRkFMU0UgKCAuLi4gKSBdCi0qKgk8PGR1bW15Pj4KLSoqCi0qKglJTlQgICAgICAgICAgICAgWyB8IElGVFJVRS9JRkZBTFNFICggLi4uICkgXQotKioJPDxpZGVudD4+Ci0qKgotKioJSU5UX0ZMWSAgICAgICAgIFsgfCBJRlRSVUUvSUZGQUxTRSAoIC4uLiApIF0KLSoqCTw8aWRlbnQ+PgotKioKLSoqCUNvbmRpdGlvbnM6Ci0qKgkgICAgIFdIRU4gKHBoYXNlKQotKioJICAgICBJRiAgIChwaGFzZSkKLSoqCSAgICAgQ0FSUllTRVQKLSoqCSAgICAgREFUQSAoZGF0YSwgbWFzaykKLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jZGVmaW5lIFNDUl9OT19PUCAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFNDUl9KVU1QICAgICAgICAweDgwMDgwMDAwCi0jZGVmaW5lIFNDUl9KVU1QNjQgICAgICAweDgwNDgwMDAwCi0jZGVmaW5lIFNDUl9KVU1QUiAgICAgICAweDgwODgwMDAwCi0jZGVmaW5lIFNDUl9DQUxMICAgICAgICAweDg4MDgwMDAwCi0jZGVmaW5lIFNDUl9DQUxMUiAgICAgICAweDg4ODgwMDAwCi0jZGVmaW5lIFNDUl9SRVRVUk4gICAgICAweDkwMDgwMDAwCi0jZGVmaW5lIFNDUl9JTlQgICAgICAgICAweDk4MDgwMDAwCi0jZGVmaW5lIFNDUl9JTlRfRkxZICAgICAweDk4MTgwMDAwCi0KLSNkZWZpbmUgSUZGQUxTRShhcmcpICAgKDB4MDAwODAwMDAgfCAoYXJnKSkKLSNkZWZpbmUgSUZUUlVFKGFyZykgICAgKDB4MDAwMDAwMDAgfCAoYXJnKSkKLQotI2RlZmluZSBXSEVOKHBoYXNlKSAgICAoMHgwMDAzMDAwMCB8IChwaGFzZSkpCi0jZGVmaW5lIElGKHBoYXNlKSAgICAgICgweDAwMDIwMDAwIHwgKHBoYXNlKSkKLQotI2RlZmluZSBEQVRBKEQpICAgICAgICAoMHgwMDA0MDAwMCB8ICgoRCkgJiAweGZmKSkKLSNkZWZpbmUgTUFTSyhELE0pICAgICAgKDB4MDAwNDAwMDAgfCAoKChNIF4gMHhmZikgJiAweGZmKSA8PCA4dWwpfCgoRCkgJiAweGZmKSkKLQotI2RlZmluZSBDQVJSWVNFVCAgICAgICAoMHgwMDIwMDAwMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqCVNDU0kgIGNvbnN0YW50cy4KLSoqCi0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0vKgotKioJTWVzc2FnZXMKLSovCi0KLSNkZWZpbmUJTV9DT01QTEVURQlDT01NQU5EX0NPTVBMRVRFCi0jZGVmaW5lCU1fRVhURU5ERUQJRVhURU5ERURfTUVTU0FHRQotI2RlZmluZQlNX1NBVkVfRFAJU0FWRV9QT0lOVEVSUwotI2RlZmluZQlNX1JFU1RPUkVfRFAJUkVTVE9SRV9QT0lOVEVSUwotI2RlZmluZQlNX0RJU0NPTk5FQ1QJRElTQ09OTkVDVAotI2RlZmluZQlNX0lEX0VSUk9SCUlOSVRJQVRPUl9FUlJPUgotI2RlZmluZQlNX0FCT1JUCQlBQk9SVF9UQVNLX1NFVAotI2RlZmluZQlNX1JFSkVDVAlNRVNTQUdFX1JFSkVDVAotI2RlZmluZQlNX05PT1AJCU5PUAotI2RlZmluZQlNX1BBUklUWQlNU0dfUEFSSVRZX0VSUk9SCi0jZGVmaW5lCU1fTENPTVBMRVRFCUxJTktFRF9DTURfQ09NUExFVEUKLSNkZWZpbmUJTV9GQ09NUExFVEUJTElOS0VEX0ZMR19DTURfQ09NUExFVEUKLSNkZWZpbmUJTV9SRVNFVAkJVEFSR0VUX1JFU0VUCi0jZGVmaW5lCU1fQUJPUlRfVEFHCUFCT1JUX1RBU0sKLSNkZWZpbmUJTV9DTEVBUl9RVUVVRQlDTEVBUl9UQVNLX1NFVAotI2RlZmluZQlNX0lOSVRfUkVDCUlOSVRJQVRFX1JFQ09WRVJZCi0jZGVmaW5lCU1fUkVMX1JFQwlSRUxFQVNFX1JFQ09WRVJZCi0jZGVmaW5lCU1fVEVSTUlOQVRFCSgweDExKQotI2RlZmluZQlNX1NJTVBMRV9UQUcJU0lNUExFX1FVRVVFX1RBRwotI2RlZmluZQlNX0hFQURfVEFHCUhFQURfT0ZfUVVFVUVfVEFHCi0jZGVmaW5lCU1fT1JERVJFRF9UQUcJT1JERVJFRF9RVUVVRV9UQUcKLSNkZWZpbmUJTV9JR05fUkVTSURVRQlJR05PUkVfV0lERV9SRVNJRFVFCi0jZGVmaW5lCU1fSURFTlRJRlkgICAJKDB4ODApCi0KLSNkZWZpbmUJTV9YX01PRElGWV9EUAlFWFRFTkRFRF9NT0RJRllfREFUQV9QT0lOVEVSCi0jZGVmaW5lCU1fWF9TWU5DX1JFUQlFWFRFTkRFRF9TRFRSCi0jZGVmaW5lCU1fWF9XSURFX1JFUQlFWFRFTkRFRF9XRFRSCi0jZGVmaW5lCU1fWF9QUFJfUkVRCUVYVEVOREVEX1BQUgotCi0vKgotKioJU3RhdHVzCi0qLwotCi0jZGVmaW5lCVNfR09PRAkJKDB4MDApCi0jZGVmaW5lCVNfQ0hFQ0tfQ09ORAkoMHgwMikKLSNkZWZpbmUJU19DT05EX01FVAkoMHgwNCkKLSNkZWZpbmUJU19CVVNZCQkoMHgwOCkKLSNkZWZpbmUJU19JTlQJCSgweDEwKQotI2RlZmluZQlTX0lOVF9DT05EX01FVAkoMHgxNCkKLSNkZWZpbmUJU19DT05GTElDVAkoMHgxOCkKLSNkZWZpbmUJU19URVJNSU5BVEVECSgweDIwKQotI2RlZmluZQlTX1FVRVVFX0ZVTEwJKDB4MjgpCi0jZGVmaW5lCVNfSUxMRUdBTAkoMHhmZikKLSNkZWZpbmUJU19TRU5TRQkJKDB4ODApCi0KLS8qCi0gKiBFbmQgb2YgbmNycmVnIGZyb20gRnJlZUJTRAotICovCi0KLSNlbmRpZiAvKiBkZWZpbmVkIFNZTTUzQzhYWF9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggYTUwYzJiYy4uMzYzOWMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTIyLDYgKzIyLDcgQEAKIG9iai0kKENPTkZJR19VU0JfUFJJTlRFUikJKz0gY2xhc3MvCiAKIG9iai0kKENPTkZJR19VU0JfU1RPUkFHRSkJKz0gc3RvcmFnZS8KK29iai0kKENPTkZJR19VU0IpCQkrPSBzdG9yYWdlLwogCiBvYmotJChDT05GSUdfVVNCX0FJUFRFSykJKz0gaW5wdXQvCiBvYmotJChDT05GSUdfVVNCX0FUSV9SRU1PVEUpCSs9IGlucHV0LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL0tjb25maWcgYi9kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZwppbmRleCBmNDI5ODYyLi41NTBkZGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZwpAQCAtNDQsNiArNDQsMTkgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS4KIAorY29uZmlnIFVTQl9VRUFHTEVBVE0KKwl0cmlzdGF0ZSAiQURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbSIKKwlkZXBlbmRzIG9uIFVTQl9BVE0KKwlzZWxlY3QgRldfTE9BREVSCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQURJIDkzMAorCSAgb3IgZWFnbGUgY2hpcHNldC4gSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0bworCSAgaW5zdGFsbCBmaXJtd2FyZXMgYW5kIENNViAoQ29tbWFuZCBNYW5hZ2VtZW50IFZhcmlhYmxlcyk7IHNlZQorCSAgPGh0dHBzOi8vZ25hLm9yZy9wcm9qZWN0cy91ZWFnbGVhdG0vPiBmb3IgZGV0YWlscy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWVhZ2xlLWF0bS4KKwogY29uZmlnIFVTQl9YVVNCQVRNCiAJdHJpc3RhdGUgIk90aGVyIFVTQiBEU0wgbW9kZW0gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9BVE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZQppbmRleCA4NTA5OTcxLi40YzRhNzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvYXRtL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogCiBvYmotJChDT05GSUdfVVNCX0NYQUNSVSkJKz0gY3hhY3J1Lm8KIG9iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gc3BlZWR0Y2gubworb2JqLSQoQ09ORklHX1VTQl9VRUFHTEVBVE0pCSs9IHVlYWdsZS1hdG0ubwogb2JqLSQoQ09ORklHX1VTQl9BVE0pCQkrPSB1c2JhdG0ubwogb2JqLSQoQ09ORklHX1VTQl9YVVNCQVRNKQkrPSB4dXNiYXRtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IDlkNTlkYzYuLmFmMGE0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYworKysgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTg1Myw3ICs4NTMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3hhY3J1X3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9IGN4YWNydV9kcml2ZXJfbmFtZSwKIAkucHJvYmUJCT0gY3hhY3J1X3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHVzYmF0bV91c2JfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKaW5kZXggZDBjYmJiNy4uYjI4MzM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKQEAgLTY1OSw3ICs2NTksNiBAQAogc3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzcGVlZHRjaF91c2JfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSBzcGVlZHRjaF9kcml2ZXJfbmFtZSwKIAkucHJvYmUJCT0gc3BlZWR0Y2hfdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gdXNiYXRtX3VzYl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyYTY3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKQEAgLTAsMCArMSwxODIwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNAorICoJRGFtaWVuIEJlcmdhbWluaSA8ZGFtaWVuLmJlcmdhbWluaUBmcmVlLmZyPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWF0dGhpZXUgQ2FzdGV0IDxjYXN0ZXQubWF0dGhpZXVAZnJlZS5mcj4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIEdQTCBsaWNlbnNlIDoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqCisgKiBISVNUT1JZIDogc29tZSBwYXJ0IG9mIHRoZSBjb2RlIHdhcyBiYXNlIG9uIHVlYWdsZSAxLjMgQlNEIGRyaXZlciwKKyAqIERhbWllbiBCZXJnYW1pbmkgYWdyZWUgdG8gcHV0IGhpcyBjb2RlIHVuZGVyIGEgRFVBTCBHUEwvQlNEIGxpY2Vuc2UuCisgKgorICogVGhlIHJlc3Qgb2YgdGhlIGNvZGUgd2FzIHdhcyByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgInVzYmF0bS5oIgorCisjZGVmaW5lIEVBR0xFVVNCVkVSU0lPTiAidWVhZ2xlIDEuMSIKKworCisvKgorICogRGVidWcgbWFjcm9zCisgKi8KKyNkZWZpbmUgdWVhX2RiZyh1c2JfZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCVwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnID49IDEpIFwKKwkJCWRldl9kYmcoJih1c2JfZGV2KS0+ZGV2LCBcCisJCQkJIlt1ZWFnbGUtYXRtIGRiZ10gJXM6ICIgZm9ybWF0LCBcCisJCQkJCV9fRlVOQ1RJT05fXywgIyNhcmdzKTsgXAorICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgdWVhX3ZkYmcodXNiX2RldiwgZm9ybWF0LCBhcmdzLi4uKQlcCisJZG8geyBcCisJCWlmIChkZWJ1ZyA+PSAyKSBcCisJCQlkZXZfZGJnKCYodXNiX2RldiktPmRldiwgXAorCQkJCSJbdWVhZ2xlLWF0bSB2ZGJnXSAgIiBmb3JtYXQsICMjYXJncyk7IFwKKyAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHVlYV9lbnRlcnModXNiX2RldikgXAorCXVlYV92ZGJnKHVzYl9kZXYsICJlbnRlcmluZyAlc1xuIiwgX19GVU5DVElPTl9fKQorCisjZGVmaW5lIHVlYV9sZWF2ZXModXNiX2RldikgXAorCXVlYV92ZGJnKHVzYl9kZXYsICJsZWF2aW5nICAlc1xuIiwgX19GVU5DVElPTl9fKQorCisjZGVmaW5lIHVlYV9lcnIodXNiX2RldiwgZm9ybWF0LGFyZ3MuLi4pIFwKKwlkZXZfZXJyKCYodXNiX2RldiktPmRldiAsIltVRUFHTEUtQVRNXSAiIGZvcm1hdCAsICMjYXJncykKKworI2RlZmluZSB1ZWFfd2Fybih1c2JfZGV2LCBmb3JtYXQsYXJncy4uLikgXAorCWRldl93YXJuKCYodXNiX2RldiktPmRldiAsIltVZWFnbGUtYXRtXSAiIGZvcm1hdCwgIyNhcmdzKQorCisjZGVmaW5lIHVlYV9pbmZvKHVzYl9kZXYsIGZvcm1hdCxhcmdzLi4uKSBcCisJZGV2X2luZm8oJih1c2JfZGV2KS0+ZGV2ICwiW3VlYWdsZS1hdG1dICIgZm9ybWF0LCAjI2FyZ3MpCisKK3N0cnVjdCB1ZWFfY212cyB7CisJdTMyIGFkZHJlc3M7CisJdTE2IG9mZnNldDsKKwl1MzIgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdWVhX3NvZnRjIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bTsKKworCWludCBtb2RlbV9pbmRleDsKKwl1bnNpZ25lZCBpbnQgZHJpdmVyX2luZm87CisKKwlpbnQgYm9vdGluZzsKKwlpbnQgcmVzZXQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBzeW5jX3E7CisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWQ7CisJdTMyIGRhdGE7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY212X2Fja193YWl0OworCWludCBjbXZfYWNrOworCisJc3RydWN0IHdvcmtfc3RydWN0IHRhc2s7CisJdTE2IHBhZ2VubzsKKwl1MTYgb3ZsOworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpkc3BfZmlybTsKKwlzdHJ1Y3QgdXJiICp1cmJfaW50OworCisJdTggY212X2Z1bmN0aW9uOworCXUxNiBjbXZfaWR4OworCXUzMiBjbXZfYWRkcmVzczsKKwl1MTYgY212X29mZnNldDsKKworCS8qIGtlZXAgaW4gc3luYyB3aXRoIGVhZ2xlY3RsICovCisJc3RydWN0IHVlYV9zdGF0cyB7CisJCXN0cnVjdCB7CisJCQl1MzIgc3RhdGU7CisJCQl1MzIgZmxhZ3M7CisJCQl1MzIgbWZsYWdzOworCQkJdTMyIHZpZGNwZTsKKwkJCXUzMiB2aWRjbzsKKwkJCXUzMiBkc3JhdGU7CisJCQl1MzIgdXNyYXRlOworCQkJdTMyIGRzdW5jOworCQkJdTMyIHVzdW5jOworCQkJdTMyIGRzY29ycjsKKwkJCXUzMiB1c2NvcnI7CisJCQl1MzIgdHhmbG93OworCQkJdTMyIHJ4ZmxvdzsKKwkJCXUzMiB1c2F0dGVudWF0aW9uOworCQkJdTMyIGRzYXR0ZW51YXRpb247CisJCQl1MzIgZHNtYXJnaW47CisJCQl1MzIgdXNtYXJnaW47CisJCQl1MzIgZmlybWlkOworCQl9IHBoeTsKKwl9IHN0YXRzOworfTsKKworLyoKKyAqIEVsc2EgSURzCisgKi8KKyNkZWZpbmUgRUxTQV9WSUQJCTB4MDVDQworI2RlZmluZSBFTFNBX1BJRF9QU1RGSVJNCTB4MzM1MAorI2RlZmluZSBFTFNBX1BJRF9QUkVGSVJNCTB4MzM1MQorCisvKgorICogU2FnZW0gVVNCIElEcworICovCisjZGVmaW5lIEVBR0xFX1ZJRAkJMHgxMTEwCisjZGVmaW5lIEVBR0xFX0lfUElEX1BSRUZJUk0JMHg5MDEwCS8qIEVhZ2xlIEkgKi8KKyNkZWZpbmUgRUFHTEVfSV9QSURfUFNURklSTQkweDkwMEYJLyogRWFnbGUgSSAqLworCisjZGVmaW5lIEVBR0xFX0lJQ19QSURfUFJFRklSTQkweDkwMjQJLyogRWFnbGUgSUlDICovCisjZGVmaW5lIEVBR0xFX0lJQ19QSURfUFNURklSTQkweDkwMjMJLyogRWFnbGUgSUlDICovCisKKyNkZWZpbmUgRUFHTEVfSUlfUElEX1BSRUZJUk0JMHg5MDIyCS8qIEVhZ2xlIElJICovCisjZGVmaW5lIEVBR0xFX0lJX1BJRF9QU1RGSVJNCTB4OTAyMQkvKiBFYWdsZSBJSSAqLworCisvKgorICogIEVhZ2xlIElJSSBQaWQKKyAqLworI2RlZmluZSBFQUdMRV9JSUlfUElEX1BSRUZJUk0JMHg5MDMyCS8qIEVhZ2xlIElJSSAqLworI2RlZmluZSBFQUdMRV9JSUlfUElEX1BTVEZJUk0JMHg5MDMxCS8qIEVhZ2xlIElJSSAqLworCisvKgorICogVVNSIFVTQiBJRHMKKyAqLworI2RlZmluZSBVU1JfVklECQkJMHgwQkFGCisjZGVmaW5lIE1JTExFUl9BX1BJRF9QUkVGSVJNCTB4MDBGMgorI2RlZmluZSBNSUxMRVJfQV9QSURfUFNURklSTQkweDAwRjEKKyNkZWZpbmUgTUlMTEVSX0JfUElEX1BSRUZJUk0JMHgwMEZBCisjZGVmaW5lIE1JTExFUl9CX1BJRF9QU1RGSVJNCTB4MDBGOQorI2RlZmluZSBIRUlORUtFTl9BX1BJRF9QUkVGSVJNCTB4MDBGNgorI2RlZmluZSBIRUlORUtFTl9BX1BJRF9QU1RGSVJNCTB4MDBGNQorI2RlZmluZSBIRUlORUtFTl9CX1BJRF9QUkVGSVJNCTB4MDBGOAorI2RlZmluZSBIRUlORUtFTl9CX1BJRF9QU1RGSVJNCTB4MDBGNworCisjZGVmaW5lIFBSRUZJUk0gMAorI2RlZmluZSBQU1RGSVJNICgxPDw3KQorZW51bSB7CisJQURJOTMwID0gMCwKKwlFQUdMRV9JLAorCUVBR0xFX0lJLAorCUVBR0xFX0lJSQorfTsKKworLyogbWFjcm9zIGZvciBib3RoIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFuZCBzdHJ1Y3QgdWVhX3NvZnRjICovCisjZGVmaW5lIFVFQV9JU19QUkVGSVJNKHgpIFwKKwkoISgoeCktPmRyaXZlcl9pbmZvICYgUFNURklSTSkpCisjZGVmaW5lIFVFQV9DSElQX1ZFUlNJT04oeCkgXAorCSgoeCktPmRyaXZlcl9pbmZvICYgMHhmKQorCisjZGVmaW5lIElTX0lTRE4oc2MpIFwKKwkobGUxNl90b19jcHUoc2MtPnVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDB4ODApCisKKyNkZWZpbmUgSU5TX1RPX1VTQkRFVihpbnMpIGlucy0+dXNiX2RldgorCisjZGVmaW5lIEdFVF9TVEFUVVMoZGF0YSkgXAorCSgoZGF0YSA+PiA4KSAmIDB4ZikKKyNkZWZpbmUgSVNfT1BFUkFUSU9OQUwoc2MpIFwKKwkoR0VUX1NUQVRVUyhzYy0+c3RhdHMucGh5LnN0YXRlKSA9PSAyKQorCisvKgorICogU2V0IG9mIG1hY3JvcyB0byBoYW5kbGUgdW5hbGlnbmVkIGRhdGEgaW4gdGhlIGZpcm13YXJlIGJsb2IuCisgKiBUaGUgRldfR0VUX0JZVEUoKSBtYWNybyBpcyBwcm92aWRlZCBvbmx5IGZvciBjb25zaXN0ZW5jeS4KKyAqLworCisjZGVmaW5lIEZXX0dFVF9CWVRFKHApCSooKF9fdTggKikgKHApKQorI2RlZmluZSBGV19HRVRfV09SRChwKQlsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKHApKSkKKyNkZWZpbmUgRldfR0VUX0xPTkcocCkJbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopIChwKSkpCisKKyNkZWZpbmUgRldfRElSICJ1ZWFnbGUtYXRtLyIKKyNkZWZpbmUgTkJfTU9ERU0gNAorCisjZGVmaW5lIEJVTEtfVElNRU9VVCAzMDAKKyNkZWZpbmUgQ1RSTF9USU1FT1VUIDEwMDAKKworI2RlZmluZSBBQ0tfVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDE1MDApCisKKyNkZWZpbmUgVUVBX0lOVFJfSUZBQ0VfTk8gCTAKKyNkZWZpbmUgVUVBX1VTX0lGQUNFX05PCQkxCisjZGVmaW5lIFVFQV9EU19JRkFDRV9OTwkJMgorCisjZGVmaW5lIEZBU1RFU1RfSVNPX0lOVEYJOAorCisjZGVmaW5lIFVFQV9CVUxLX0RBVEFfUElQRQkweDAyCisjZGVmaW5lIFVFQV9JRE1BX1BJUEUJCTB4MDQKKyNkZWZpbmUgVUVBX0lOVFJfUElQRQkJMHgwNAorI2RlZmluZSBVRUFfSVNPX0RBVEFfUElQRQkweDA4CisKKyNkZWZpbmUgVUVBX1NFVF9CTE9DSyAgICAJMHgwMDAxCisjZGVmaW5lIFVFQV9TRVRfTU9ERSAgICAgCTB4MDAwMworI2RlZmluZSBVRUFfU0VUXzIxODNfREFUQQkweDAwMDQKKyNkZWZpbmUgVUVBX1NFVF9USU1FT1VUCQkweDAwMTEKKworI2RlZmluZSBVRUFfTE9PUEJBQ0tfT0ZGCTB4MDAwMgorI2RlZmluZSBVRUFfTE9PUEJBQ0tfT04JCTB4MDAwMworI2RlZmluZSBVRUFfQk9PVF9JRE1BCQkweDAwMDYKKyNkZWZpbmUgVUVBX1NUQVJUX1JFU0VUCQkweDAwMDcKKyNkZWZpbmUgVUVBX0VORF9SRVNFVAkJMHgwMDA4CisKKyNkZWZpbmUgVUVBX1NXQVBfTUFJTEJPWAkoMHgzZmNkIHwgMHg0MDAwKQorI2RlZmluZSBVRUFfTVBUWF9TVEFSVAkJKDB4M2ZjZSB8IDB4NDAwMCkKKyNkZWZpbmUgVUVBX01QVFhfTUFJTEJPWAkoMHgzZmQ2IHwgMHg0MDAwKQorI2RlZmluZSBVRUFfTVBSWF9NQUlMQk9YCSgweDNmZGYgfCAweDQwMDApCisKKy8qIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgYmxvY2sgd2l0aGluIGEgRFNQIHBhZ2UgKi8KK3N0cnVjdCBibG9ja19pbmZvIHsKKwlfX2xlMTYgd0hkcjsKKyNkZWZpbmUgVUVBX0JJSERSIDB4YWJjZAorCV9fbGUxNiB3QWRkcmVzczsKKwlfX2xlMTYgd1NpemU7CisJX19sZTE2IHdPdmxPZmZzZXQ7CisJX19sZTE2IHdPdmw7CQkvKiBvdmVybGF5ICovCisJX19sZTE2IHdMYXN0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIEJMT0NLX0lORk9fU0laRSAxMgorCisvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgQ01WIChDb25maWd1cmF0aW9uIGFuZCBNYW5hZ2VtZW50IFZhcmlhYmxlKSAqLworc3RydWN0IGNtdiB7CisJX19sZTE2IHdQcmVhbWJsZTsKKyNkZWZpbmUgUFJFQU1CTEUgMHg1MzVjCisJX191OCBiRGlyZWN0aW9uOworI2RlZmluZSBNT0RFTVRPSE9TVCAweDAxCisjZGVmaW5lIEhPU1RUT01PREVNIDB4MTAKKwlfX3U4IGJGdW5jdGlvbjsKKyNkZWZpbmUgRlVOQ1RJT05fVFlQRShmKSAgICAoKGYpID4+IDQpCisjZGVmaW5lIE1FTUFDQ0VTUwkweDEKKyNkZWZpbmUgQURTTERJUkVDVElWRQkweDcKKworI2RlZmluZSBGVU5DVElPTl9TVUJUWVBFKGYpICgoZikgJiAweDBmKQorLyogZm9yIE1FTUFDQ0VTUyAqLworI2RlZmluZSBSRVFVRVNUUkVBRAkweDAKKyNkZWZpbmUgUkVRVUVTVFdSSVRFCTB4MQorI2RlZmluZSBSRVBMWVJFQUQJMHgyCisjZGVmaW5lIFJFUExZV1JJVEUJMHgzCisvKiBmb3IgQURTTERJUkVDVElWRSAqLworI2RlZmluZSBLRVJORUxSRUFEWQkweDAKKyNkZWZpbmUgTU9ERU1SRUFEWQkweDEKKworI2RlZmluZSBNQUtFRlVOQ1RJT04odCwgcykgKCgodCkgJiAweGYpIDw8IDQgfCAoKHMpICYgMHhmKSkKKwlfX2xlMTYgd0luZGV4OworCV9fbGUzMiBkd1N5bWJvbGljQWRkcmVzczsKKyNkZWZpbmUgTUFLRVNBKGEsIGIsIGMsIGQpCQkJCQkJXAorCSgoKGMpICYgMHhmZikgPDwgMjQgfAkJCQkJCVwKKwkgKChkKSAmIDB4ZmYpIDw8IDE2IHwJCQkJCQlcCisJICgoYSkgJiAweGZmKSA8PCA4ICB8CQkJCQkJXAorCSAoKGIpICYgMHhmZikpCisKKyNkZWZpbmUgU0FfQ05UTCBNQUtFU0EoJ0MnLCAnTicsICdUJywgJ0wnKQorI2RlZmluZSBTQV9ESUFHIE1BS0VTQSgnRCcsICdJJywgJ0EnLCAnRycpCisjZGVmaW5lIFNBX0lORk8gTUFLRVNBKCdJJywgJ04nLCAnRicsICdPJykKKyNkZWZpbmUgU0FfT1BUTiBNQUtFU0EoJ08nLCAnUCcsICdUJywgJ04nKQorI2RlZmluZSBTQV9SQVRFIE1BS0VTQSgnUicsICdBJywgJ1QnLCAnRScpCisjZGVmaW5lIFNBX1NUQVQgTUFLRVNBKCdTJywgJ1QnLCAnQScsICdUJykKKwlfX2xlMTYgd09mZnNldEFkZHJlc3M7CisJX19sZTMyIGR3RGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBDTVZfU0laRSAxNgorCisvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHN3YXAgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBzd2FwX2luZm8geworCV9fdTggYlN3YXBQYWdlTm87CisJX191OCBiT3ZsOwkJLyogb3ZlcmxheSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgaW50ZXJydXB0IGRhdGEgKi8KK3N0cnVjdCBpbnRyX3BrdCB7CisJX191OCBiVHlwZTsKKwlfX3U4IGJOb3RpZmljYXRpb247CisJX19sZTE2IHdWYWx1ZTsKKwlfX2xlMTYgd0luZGV4OworCV9fbGUxNiB3TGVuZ3RoOworCV9fbGUxNiB3SW50ZXJydXB0OworI2RlZmluZSBJTlRfTE9BRFNXQVBQQUdFIDB4MDAwMQorI2RlZmluZSBJTlRfSU5DT01JTkdDTVYgIDB4MDAwMgorCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBzd2FwX2luZm8gc3dhcGluZm87CisJCQlfX2xlMTYgd0RhdGFTaXplOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzMTsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGNtdiBjbXY7CisJCQlfX2xlMTYgd0RhdGFTaXplOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzMjsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1OworI2RlZmluZSBiU3dhcFBhZ2VObwl1LnMxLnN3YXBpbmZvLmJTd2FwUGFnZU5vCisjZGVmaW5lIGJPdmwJCXUuczEuc3dhcGluZm8uYk92bAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIElOVFJfUEtUX1NJWkUgMjgKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVlYV9kcml2ZXI7CitzdGF0aWMgREVDTEFSRV9NVVRFWCh1ZWFfc2VtYXBob3JlKTsKK3N0YXRpYyBjb25zdCBjaGFyICpjaGlwX25hbWVbXSA9IHsiQURJOTMwIiwgIkVhZ2xlIEkiLCAiRWFnbGUgSUkiLCAiRWFnbGUgSUlJIn07CisKK3N0YXRpYyBpbnQgbW9kZW1faW5kZXg7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOworc3RhdGljIGludCBzeW5jX3dhaXRbTkJfTU9ERU1dOworc3RhdGljIGNoYXIgKmNtdl9maWxlW05CX01PREVNXTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJtb2R1bGUgZGVidWcgbGV2ZWwgKDA9b2ZmLDE9b24sMj12ZXJib3NlKSIpOworbW9kdWxlX3BhcmFtX2FycmF5KHN5bmNfd2FpdCwgYm9vbCwgTlVMTCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN5bmNfd2FpdCwgIndhaXQgdGhlIHN5bmNocm9uaXNhdGlvbiBiZWZvcmUgc3RhcnRpbmcgQVRNIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoY212X2ZpbGUsIGNoYXJwLCBOVUxMLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY212X2ZpbGUsCisJCSJmaWxlIG5hbWUgd2l0aCBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IHZhcmlhYmxlcyIpOworCisjZGVmaW5lIFVQREFURV9BVE1fU1RBVCh0eXBlLCB2YWwpIFwKKwlkbyB7IFwKKwkJaWYgKHNjLT51c2JhdG0tPmF0bV9kZXYpIFwKKwkJCXNjLT51c2JhdG0tPmF0bV9kZXYtPnR5cGUgPSB2YWw7IFwKKwl9IHdoaWxlICgwKQorCisvKiBGaXJtd2FyZSBsb2FkaW5nICovCisjZGVmaW5lIExPQURfSU5URVJOQUwgICAgIDB4QTAKKyNkZWZpbmUgRjgwNTFfVVNCQ1MgICAgICAgMHg3ZjkyCisKKy8qKgorICogdWVhX3NlbmRfbW9kZW1fY21kIC0gU2VuZCBhIGNvbW1hbmQgZm9yIHByZS1maXJtd2FyZSBkZXZpY2VzLgorICovCitzdGF0aWMgaW50IHVlYV9zZW5kX21vZGVtX2NtZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiLAorCQl1MTYgYWRkciwgdTE2IHNpemUsIHU4ICogYnVmZikKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwl1OCAqeGZlcl9idWZmOworCisJeGZlcl9idWZmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoeGZlcl9idWZmKSB7CisJCW1lbWNweSh4ZmVyX2J1ZmYsIGJ1ZmYsIHNpemUpOworCQlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiLAorCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZSh1c2IsIDApLAorCQkJCSAgICAgIExPQURfSU5URVJOQUwsCisJCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCSAgICAgIFVTQl9SRUNJUF9ERVZJQ0UsIGFkZHIsIDAsIHhmZXJfYnVmZiwKKwkJCQkgICAgICBzaXplLCBDVFJMX1RJTUVPVVQpOworCQlrZnJlZSh4ZmVyX2J1ZmYpOworCX0KKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIChyZXQgPT0gc2l6ZSkgPyAwIDogLUVJTzsKK30KKworc3RhdGljIHZvaWQgdWVhX3VwbG9hZF9wcmVfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiID0gY29udGV4dDsKKwl1OCAqcGZ3LCB2YWx1ZTsKKwl1MzIgY3JjID0gMDsKKwlpbnQgcmV0LCBzaXplOworCisJdWVhX2VudGVycyh1c2IpOworCWlmICghZndfZW50cnkpIHsKKwkJdWVhX2Vycih1c2IsICJmaXJtd2FyZSBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcGZ3ID0gZndfZW50cnktPmRhdGE7CisJc2l6ZSA9IGZ3X2VudHJ5LT5zaXplOworCWlmIChzaXplIDwgNCkKKwkJZ290byBlcnJfZndfY29ycnVwdGVkOworCisJY3JjID0gRldfR0VUX0xPTkcocGZ3KTsKKwlwZncgKz0gNDsKKwlzaXplIC09IDQ7CisJaWYgKGNyYzMyX2JlKDAsIHBmdywgc2l6ZSkgIT0gY3JjKQorCQlnb3RvIGVycl9md19jb3JydXB0ZWQ7CisKKwkvKgorCSAqIFN0YXJ0IHRvIHVwbG9hZCBmb3Jtd2FyZSA6IHNlbmQgcmVzZXQKKwkgKi8KKwl2YWx1ZSA9IDE7CisJcmV0ID0gdWVhX3NlbmRfbW9kZW1fY21kKHVzYiwgRjgwNTFfVVNCQ1MsIHNpemVvZih2YWx1ZSksICZ2YWx1ZSk7CisKKwlpZiAocmV0IDwgMCkgeworCQl1ZWFfZXJyKHVzYiwgIm1vZGVtIHJlc2V0IGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwl3aGlsZSAoc2l6ZSA+IDMpIHsKKwkJdTggbGVuID0gRldfR0VUX0JZVEUocGZ3KTsKKwkJdTE2IGFkZCA9IEZXX0dFVF9XT1JEKHBmdyArIDEpOworCisJCXNpemUgLT0gbGVuICsgMzsKKwkJaWYgKHNpemUgPCAwKQorCQkJZ290byBlcnJfZndfY29ycnVwdGVkOworCisJCXJldCA9IHVlYV9zZW5kX21vZGVtX2NtZCh1c2IsIGFkZCwgbGVuLCBwZncgKyAzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXVlYV9lcnIodXNiLCAidXBsb2FkaW5nIGZpcm13YXJlIGRhdGEgZmFpbGVkICIKKwkJCQkJIndpdGggZXJyb3IgJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlwZncgKz0gbGVuICsgMzsKKwl9CisKKwlpZiAoc2l6ZSAhPSAwKQorCQlnb3RvIGVycl9md19jb3JydXB0ZWQ7CisKKwkvKgorCSAqIFRlbGwgdGhlIG1vZGVtIHdlIGZpbmlzaCA6IGRlLWFzc2VydCByZXNldAorCSAqLworCXZhbHVlID0gMDsKKwlyZXQgPSB1ZWFfc2VuZF9tb2RlbV9jbWQodXNiLCBGODA1MV9VU0JDUywgMSwgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJdWVhX2Vycih1c2IsICJtb2RlbSBkZS1hc3NlcnQgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldCk7CisJZWxzZQorCQl1ZWFfaW5mbyh1c2IsICJmaXJtd2FyZSB1cGxvYWRlZFxuIik7CisKKwl1ZWFfbGVhdmVzKHVzYik7CisJcmV0dXJuOworCitlcnJfZndfY29ycnVwdGVkOgorCXVlYV9lcnIodXNiLCAiZmlybXdhcmUgaXMgY29ycnVwdGVkXG4iKTsKK2VycjoKKwl1ZWFfbGVhdmVzKHVzYik7Cit9CisKKy8qKgorICogdWVhX2xvYWRfZmlybXdhcmUgLSBMb2FkIHVzYiBmaXJtd2FyZSBmb3IgcHJlLWZpcm13YXJlIGRldmljZXMuCisgKi8KK3N0YXRpYyBpbnQgdWVhX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdW5zaWduZWQgaW50IHZlcikKK3sKKwlpbnQgcmV0OworCWNoYXIgKmZ3X25hbWUgPSBGV19ESVIgImVhZ2xlLmZ3IjsKKworCXVlYV9lbnRlcnModXNiKTsKKwl1ZWFfaW5mbyh1c2IsICJwcmUtZmlybXdhcmUgZGV2aWNlLCB1cGxvYWRpbmcgZmlybXdhcmVcbiIpOworCisJc3dpdGNoICh2ZXIpIHsKKwljYXNlIEFESTkzMDoKKwkJZndfbmFtZSA9IEZXX0RJUiAiYWRpOTMwLmZ3IjsKKwkJYnJlYWs7CisJY2FzZSBFQUdMRV9JOgorCQlmd19uYW1lID0gRldfRElSICJlYWdsZUkuZnciOworCQlicmVhazsKKwljYXNlIEVBR0xFX0lJOgorCQlmd19uYW1lID0gRldfRElSICJlYWdsZUlJLmZ3IjsKKwkJYnJlYWs7CisJY2FzZSBFQUdMRV9JSUk6CisJCWZ3X25hbWUgPSBGV19ESVIgImVhZ2xlSUlJLmZ3IjsKKwkJYnJlYWs7CisJfQorCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsIGZ3X25hbWUsICZ1c2ItPmRldiwgdXNiLCB1ZWFfdXBsb2FkX3ByZV9maXJtd2FyZSk7CisJaWYgKHJldCkKKwkJdWVhX2Vycih1c2IsICJmaXJtd2FyZSAlcyBpcyBub3QgYXZhaWxhYmxlXG4iLCBmd19uYW1lKTsKKwllbHNlCisJCXVlYV9pbmZvKHVzYiwgImxvYWRpbmcgZmlybXdhcmUgJXNcbiIsIGZ3X25hbWUpOworCisJdWVhX2xlYXZlcyh1c2IpOworCXJldHVybiByZXQ7Cit9CisKKy8qIG1vZGVtIG1hbmFnZW1lbnQgOiBkc3AgZmlybXdhcmUsIHNlbmQvcmVhZCBDTVYsIG1vbml0b3Jpbmcgc3RhdGlzdGljCisgKi8KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBEU1AgY29kZSBwcm92aWRlZCBpcyBzYWZlIHRvIHVzZS4KKyAqLworc3RhdGljIGludCBjaGVja19kc3AodTggKmRzcCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1OCBwYWdlY291bnQsIGJsb2NrY291bnQ7CisJdTE2IGJsb2Nrc2l6ZTsKKwl1MzIgcGFnZW9mZnNldDsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgcCwgcHA7CisKKwlwYWdlY291bnQgPSBGV19HRVRfQllURShkc3ApOworCXAgPSAxOworCisJLyogZW5vdWdoIHNwYWNlIGZvciBwYWdlIG9mZnNldHM/ICovCisJaWYgKHAgKyA0ICogcGFnZWNvdW50ID4gbGVuKQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWdlY291bnQ7IGkrKykgeworCisJCXBhZ2VvZmZzZXQgPSBGV19HRVRfTE9ORyhkc3AgKyBwKTsKKwkJcCArPSA0OworCisJCWlmIChwYWdlb2Zmc2V0ID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBlbm91Z2ggc3BhY2UgZm9yIGJsb2NrY291bnQ/ICovCisJCWlmIChwYWdlb2Zmc2V0ID49IGxlbikKKwkJCXJldHVybiAxOworCisJCXBwID0gcGFnZW9mZnNldDsKKwkJYmxvY2tjb3VudCA9IEZXX0dFVF9CWVRFKGRzcCArIHBwKTsKKwkJcHAgKz0gMTsKKworCQlmb3IgKGogPSAwOyBqIDwgYmxvY2tjb3VudDsgaisrKSB7CisKKwkJCS8qIGVub3VnaCBzcGFjZSBmb3IgYmxvY2sgaGVhZGVyPyAqLworCQkJaWYgKHBwICsgNCA+IGxlbikKKwkJCQlyZXR1cm4gMTsKKworCQkJcHAgKz0gMjsJLyogc2tpcCBibG9ja2FkZHIgKi8KKwkJCWJsb2Nrc2l6ZSA9IEZXX0dFVF9XT1JEKGRzcCArIHBwKTsKKwkJCXBwICs9IDI7CisKKwkJCS8qIGVub3VnaCBzcGFjZSBmb3IgYmxvY2sgZGF0YT8gKi8KKwkJCWlmIChwcCArIGJsb2Nrc2l6ZSA+IGxlbikKKwkJCQlyZXR1cm4gMTsKKworCQkJcHAgKz0gYmxvY2tzaXplOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZW5kIGRhdGEgdG8gdGhlIGlkbWEgcGlwZQorICogKi8KK3N0YXRpYyBpbnQgdWVhX2lkbWFfd3JpdGUoc3RydWN0IHVlYV9zb2Z0YyAqc2MsIHZvaWQgKmRhdGEsIHUzMiBzaXplKQoreworCWludCByZXQgPSAtRU5PTUVNOworCXU4ICp4ZmVyX2J1ZmY7CisJaW50IGJ5dGVzX3JlYWQ7CisKKwl4ZmVyX2J1ZmYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICgheGZlcl9idWZmKSB7CisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJjYW4ndCBhbGxvY2F0ZSB4ZmVyX2J1ZmZcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbWNweSh4ZmVyX2J1ZmYsIGRhdGEsIHNpemUpOworCisJcmV0ID0gdXNiX2J1bGtfbXNnKHNjLT51c2JfZGV2LAorCQkJIHVzYl9zbmRidWxrcGlwZShzYy0+dXNiX2RldiwgVUVBX0lETUFfUElQRSksCisJCQkgeGZlcl9idWZmLCBzaXplLCAmYnl0ZXNfcmVhZCwgQlVMS19USU1FT1VUKTsKKworCWtmcmVlKHhmZXJfYnVmZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHNpemUgIT0gYnl0ZXNfcmVhZCkgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAic2l6ZSAhPSBieXRlc19yZWFkICVkICVkXG4iLCBzaXplLAorCQkgICAgICAgYnl0ZXNfcmVhZCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlcXVlc3RfZHNwKHN0cnVjdCB1ZWFfc29mdGMgKnNjKQoreworCWludCByZXQ7CisJY2hhciAqZHNwX25hbWU7CisKKwlpZiAoVUVBX0NISVBfVkVSU0lPTihzYykgPT0gQURJOTMwKSB7CisJCWlmIChJU19JU0ROKHNjKSkKKwkJCWRzcF9uYW1lID0gRldfRElSICJEU1A5aS5iaW4iOworCQllbHNlCisJCQlkc3BfbmFtZSA9IEZXX0RJUiAiRFNQOXAuYmluIjsKKwl9IGVsc2UgeworCQlpZiAoSVNfSVNETihzYykpCisJCQlkc3BfbmFtZSA9IEZXX0RJUiAiRFNQZWkuYmluIjsKKwkJZWxzZQorCQkJZHNwX25hbWUgPSBGV19ESVIgIkRTUGVwLmJpbiI7CisJfQorCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmc2MtPmRzcF9maXJtLAorCQkJCWRzcF9uYW1lLCAmc2MtPnVzYl9kZXYtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwKKwkJICAgICAgICJyZXF1ZXN0aW5nIGZpcm13YXJlICVzIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLAorCQkgICAgICAgZHNwX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGNoZWNrX2RzcChzYy0+ZHNwX2Zpcm0tPmRhdGEsIHNjLT5kc3BfZmlybS0+c2l6ZSkpIHsKKwkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgImZpcm13YXJlICVzIGlzIGNvcnJ1cHRlZFxuIiwKKwkJICAgICAgIGRzcF9uYW1lKTsKKwkJcmVsZWFzZV9maXJtd2FyZShzYy0+ZHNwX2Zpcm0pOworCQlzYy0+ZHNwX2Zpcm0gPSBOVUxMOworCQlyZXR1cm4gLUVJTFNFUTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSB1ZWFfbG9hZF9wYWdlKCkgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgcHJvY2VzcyBjb250ZXh0CisgKi8KK3N0YXRpYyB2b2lkIHVlYV9sb2FkX3BhZ2Uodm9pZCAqeHNjKQoreworCXN0cnVjdCB1ZWFfc29mdGMgKnNjID0geHNjOworCXUxNiBwYWdlbm8gPSBzYy0+cGFnZW5vOworCXUxNiBvdmwgPSBzYy0+b3ZsOworCXN0cnVjdCBibG9ja19pbmZvIGJpOworCisJdTggKnA7CisJdTggcGFnZWNvdW50LCBibG9ja2NvdW50OworCXUxNiBibG9ja2FkZHIsIGJsb2Nrc2l6ZTsKKwl1MzIgcGFnZW9mZnNldDsKKwlpbnQgaTsKKworCS8qIHJlbG9hZCBmaXJtd2FyZSB3aGVuIHJlYm9vdCBzdGFydCBhbmQgaXQncyBsb2FkZWQgYWxyZWFkeSAqLworCWlmIChvdmwgPT0gMCAmJiBwYWdlbm8gPT0gMCAmJiBzYy0+ZHNwX2Zpcm0pIHsKKwkJcmVsZWFzZV9maXJtd2FyZShzYy0+ZHNwX2Zpcm0pOworCQlzYy0+ZHNwX2Zpcm0gPSBOVUxMOworCX0KKworCWlmIChzYy0+ZHNwX2Zpcm0gPT0gTlVMTCAmJiByZXF1ZXN0X2RzcChzYykgPCAwKQorCQlyZXR1cm47CisKKwlwID0gc2MtPmRzcF9maXJtLT5kYXRhOworCXBhZ2Vjb3VudCA9IEZXX0dFVF9CWVRFKHApOworCXAgKz0gMTsKKworCWlmIChwYWdlbm8gPj0gcGFnZWNvdW50KQorCQlnb3RvIGJhZDE7CisKKwlwICs9IDQgKiBwYWdlbm87CisJcGFnZW9mZnNldCA9IEZXX0dFVF9MT05HKHApOworCisJaWYgKHBhZ2VvZmZzZXQgPT0gMCkKKwkJZ290byBiYWQxOworCisJcCA9IHNjLT5kc3BfZmlybS0+ZGF0YSArIHBhZ2VvZmZzZXQ7CisJYmxvY2tjb3VudCA9IEZXX0dFVF9CWVRFKHApOworCXAgKz0gMTsKKworCXVlYV9kYmcoSU5TX1RPX1VTQkRFVihzYyksCisJICAgICAgICJzZW5kaW5nICV1IGJsb2NrcyBmb3IgRFNQIHBhZ2UgJXVcbiIsIGJsb2NrY291bnQsIHBhZ2Vubyk7CisKKwliaS53SGRyID0gY3B1X3RvX2xlMTYoVUVBX0JJSERSKTsKKwliaS53T3ZsID0gY3B1X3RvX2xlMTYob3ZsKTsKKwliaS53T3ZsT2Zmc2V0ID0gY3B1X3RvX2xlMTYob3ZsIHwgMHg4MDAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBibG9ja2NvdW50OyBpKyspIHsKKwkJYmxvY2thZGRyID0gRldfR0VUX1dPUkQocCk7CisJCXAgKz0gMjsKKworCQlibG9ja3NpemUgPSBGV19HRVRfV09SRChwKTsKKwkJcCArPSAyOworCisJCWJpLndTaXplID0gY3B1X3RvX2xlMTYoYmxvY2tzaXplKTsKKwkJYmkud0FkZHJlc3MgPSBjcHVfdG9fbGUxNihibG9ja2FkZHIpOworCQliaS53TGFzdCA9IGNwdV90b19sZTE2KChpID09IGJsb2NrY291bnQgLSAxKSA/IDEgOiAwKTsKKworCQkvKiBzZW5kIGJsb2NrIGluZm8gdGhyb3VnaCB0aGUgSURNQSBwaXBlICovCisJCWlmICh1ZWFfaWRtYV93cml0ZShzYywgJmJpLCBCTE9DS19JTkZPX1NJWkUpKQorCQkJZ290byBiYWQyOworCisJCS8qIHNlbmQgYmxvY2sgZGF0YSB0aHJvdWdoIHRoZSBJRE1BIHBpcGUgKi8KKwkJaWYgKHVlYV9pZG1hX3dyaXRlKHNjLCBwLCBibG9ja3NpemUpKQorCQkJZ290byBiYWQyOworCisJCXAgKz0gYmxvY2tzaXplOworCX0KKworCXJldHVybjsKKworYmFkMjoKKwl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAic2VuZGluZyBEU1AgYmxvY2sgJXUgZmFpbGVkXG4iLCBpKTsKKwlyZXR1cm47CitiYWQxOgorCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJpbnZhbGlkIERTUCBwYWdlICV1IHJlcXVlc3RlZFxuIixwYWdlbm8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV91cF9jbXZfYWNrKHN0cnVjdCB1ZWFfc29mdGMgKnNjKQoreworCXNjLT5jbXZfYWNrID0gMTsKKwl3YWtlX3VwKCZzYy0+Y212X2Fja193YWl0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2FpdF9jbXZfYWNrKHN0cnVjdCB1ZWFfc29mdGMgKnNjKQoreworCWludCByZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoc2MtPmNtdl9hY2tfd2FpdCwKKwkJCQkJCSAgIHNjLT5jbXZfYWNrLCBBQ0tfVElNRU9VVCk7CisJc2MtPmNtdl9hY2sgPSAwOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gKHJldCA9PSAwKSA/IC1FVElNRURPVVQgOiAwOworCit9CisKKyNkZWZpbmUgVUNEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EIDB4MDAKKworc3RhdGljIGludCB1ZWFfcmVxdWVzdChzdHJ1Y3QgdWVhX3NvZnRjICpzYywKKwkJdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKQoreworCXU4ICp4ZmVyX2J1ZmY7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwl4ZmVyX2J1ZmYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICgheGZlcl9idWZmKSB7CisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJjYW4ndCBhbGxvY2F0ZSB4ZmVyX2J1ZmZcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwltZW1jcHkoeGZlcl9idWZmLCBkYXRhLCBzaXplKTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhzYy0+dXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHNjLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgIFVDRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORCwKKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIHZhbHVlLCBpbmRleCwgeGZlcl9idWZmLCBzaXplLCBDVFJMX1RJTUVPVVQpOworCisJa2ZyZWUoeGZlcl9idWZmKTsKKwlpZiAocmV0IDwgMCkgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAidXNiX2NvbnRyb2xfbXNnIGVycm9yICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChyZXQgIT0gc2l6ZSkgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLAorCQkgICAgICAgInVzYl9jb250cm9sX21zZyBzZW5kIG9ubHkgJWQgYnl0ZXMgKGluc3RlYWQgb2YgJWQpXG4iLAorCQkgICAgICAgcmV0LCBzaXplKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWVhX2NtdihzdHJ1Y3QgdWVhX3NvZnRjICpzYywKKwkJdTggZnVuY3Rpb24sIHUzMiBhZGRyZXNzLCB1MTYgb2Zmc2V0LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgY212IGNtdjsKKwlpbnQgcmV0OworCisJLyogd2Ugc2VuZCBhIHJlcXVlc3QsIGJ1dCB3ZSBleHBlY3QgYSByZXBseSAqLworCXNjLT5jbXZfZnVuY3Rpb24gPSBmdW5jdGlvbiB8IDB4MjsKKwlzYy0+Y212X2lkeCsrOworCXNjLT5jbXZfYWRkcmVzcyA9IGFkZHJlc3M7CisJc2MtPmNtdl9vZmZzZXQgPSBvZmZzZXQ7CisKKwljbXYud1ByZWFtYmxlID0gY3B1X3RvX2xlMTYoUFJFQU1CTEUpOworCWNtdi5iRGlyZWN0aW9uID0gSE9TVFRPTU9ERU07CisJY212LmJGdW5jdGlvbiA9IGZ1bmN0aW9uOworCWNtdi53SW5kZXggPSBjcHVfdG9fbGUxNihzYy0+Y212X2lkeCk7CisJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihhZGRyZXNzKSwgJmNtdi5kd1N5bWJvbGljQWRkcmVzcyk7CisJY212LndPZmZzZXRBZGRyZXNzID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKKwlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTMyKGRhdGEgPj4gMTYgfCBkYXRhIDw8IDE2KSwgJmNtdi5kd0RhdGEpOworCisJcmV0ID0gdWVhX3JlcXVlc3Qoc2MsIFVFQV9TRVRfQkxPQ0ssIFVFQV9NUFRYX1NUQVJULCBDTVZfU0laRSwgJmNtdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHdhaXRfY212X2FjayhzYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVlYV9yZWFkX2NtdihzdHJ1Y3QgdWVhX3NvZnRjICpzYywKKwkJdTMyIGFkZHJlc3MsIHUxNiBvZmZzZXQsIHUzMiAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gdWVhX2NtdihzYywgTUFLRUZVTkNUSU9OKE1FTUFDQ0VTUywgUkVRVUVTVFJFQUQpLAorCQkJICBhZGRyZXNzLCBvZmZzZXQsIDApOworCWlmIChyZXQgPCAwKQorCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLAorCQkJInJlYWRpbmcgY212IGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCByZXQpOworCWVsc2UKKwkgCSpkYXRhID0gc2MtPmRhdGE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB1ZWFfd3JpdGVfY212KHN0cnVjdCB1ZWFfc29mdGMgKnNjLAorCQl1MzIgYWRkcmVzcywgdTE2IG9mZnNldCwgdTMyIGRhdGEpCit7CisJaW50IHJldCA9IHVlYV9jbXYoc2MsIE1BS0VGVU5DVElPTihNRU1BQ0NFU1MsIFJFUVVFU1RXUklURSksCisJCQkgIGFkZHJlc3MsIG9mZnNldCwgZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksCisJCQkid3JpdGluZyBjbXYgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTW9uaXRvciB0aGUgbW9kZW0gYW5kIHVwZGF0ZSB0aGUgc3RhdAorICogcmV0dXJuIDAgaWYgZXZlcnl0aGluZyBpcyBvaworICogcmV0dXJuIDwgMCBpZiBhbiBlcnJvciBvY2N1cnMgKC1FQUdBSU4gcmVib290IG5lZWRlZCkKKyAqLworc3RhdGljIGludCB1ZWFfc3RhdChzdHJ1Y3QgdWVhX3NvZnRjICpzYykKK3sKKwl1MzIgZGF0YTsKKwlpbnQgcmV0OworCisJdWVhX2VudGVycyhJTlNfVE9fVVNCREVWKHNjKSk7CisJZGF0YSA9IHNjLT5zdGF0cy5waHkuc3RhdGU7CisKKwlyZXQgPSB1ZWFfcmVhZF9jbXYoc2MsIFNBX1NUQVQsIDAsICZzYy0+c3RhdHMucGh5LnN0YXRlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoR0VUX1NUQVRVUyhzYy0+c3RhdHMucGh5LnN0YXRlKSkgeworCWNhc2UgMDoJCS8qIG5vdCB5ZXQgc3luY2hyb25pemVkICovCisJCXVlYV9kYmcoSU5TX1RPX1VTQkRFVihzYyksCisJCSAgICAgICAibW9kZW0gbm90IHlldCBzeW5jaHJvbml6ZWRcbiIpOworCQlyZXR1cm4gMDsKKworCWNhc2UgMToJCS8qIGluaXRpYWxpemF0aW9uICovCisJCXVlYV9kYmcoSU5TX1RPX1VTQkRFVihzYyksICJtb2RlbSBpbml0aWFsaXppbmdcbiIpOworCQlyZXR1cm4gMDsKKworCWNhc2UgMjoJCS8qIG9wZXJhdGlvbmFsICovCisJCXVlYV92ZGJnKElOU19UT19VU0JERVYoc2MpLCAibW9kZW0gb3BlcmF0aW9uYWxcbiIpOworCQlicmVhazsKKworCWNhc2UgMzoJCS8qIGZhaWwgLi4uICovCisJCXVlYV9pbmZvKElOU19UT19VU0JERVYoc2MpLCAibW9kZW0gc3luY2hyb25pemF0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUFHQUlOOworCisJY2FzZSA0IC4uLiA2OgkvKiB0ZXN0IHN0YXRlICovCisJCXVlYV93YXJuKElOU19UT19VU0JERVYoc2MpLAorCQkJCSJtb2RlbSBpbiB0ZXN0IG1vZGUgLSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisKKwljYXNlIDc6CQkvKiBmYXN0LXJldGFpbiAuLi4gKi8KKwkJdWVhX2luZm8oSU5TX1RPX1VTQkRFVihzYyksICJtb2RlbSBpbiBmYXN0LXJldGFpbiBtb2RlXG4iKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgIm1vZGVtIGludmFsaWQgU1cgbW9kZSAlZFxuIiwKKwkJCUdFVF9TVEFUVVMoc2MtPnN0YXRzLnBoeS5zdGF0ZSkpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlpZiAoR0VUX1NUQVRVUyhkYXRhKSAhPSAyKSB7CisJCXVlYV9yZXF1ZXN0KHNjLCBVRUFfU0VUX01PREUsIFVFQV9MT09QQkFDS19PRkYsIDAsIE5VTEwpOworCQl1ZWFfaW5mbyhJTlNfVE9fVVNCREVWKHNjKSwgIm1vZGVtIG9wZXJhdGlvbmFsXG4iKTsKKworCQkvKiByZWxlYXNlIHRoZSBkc3AgZmlybXdhcmUgYXMgaXQgaXMgbm90IG5lZWRlZCB1bnRpbAorCQkgKiB0aGUgbmV4dCBmYWlsdXJlCisJCSAqLworCQlpZiAoc2MtPmRzcF9maXJtKSB7CisJCQlyZWxlYXNlX2Zpcm13YXJlKHNjLT5kc3BfZmlybSk7CisJCQlzYy0+ZHNwX2Zpcm0gPSBOVUxMOworCQl9CisKKwkJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9JTkZPLCAxMCwgJnNjLT5zdGF0cy5waHkuZmlybWlkKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQl1ZWFfaW5mbyhJTlNfVE9fVVNCREVWKHNjKSwgIkFUVS1SIGZpcm13YXJlIHZlcnNpb24gOiAleFxuIiwKKwkJCQlzYy0+c3RhdHMucGh5LmZpcm1pZCk7CisJfQorCisJLyogYWx3YXlzIHVwZGF0ZSBpdCBhcyBhdG0gbGF5ZXIgY291bGQgbm90IGJlIGluaXQgd2hlbiB3ZSBzd2l0Y2ggdG8KKwkgKiBvcGVyYXRpb25hbCBzdGF0ZQorCSAqLworCVVQREFURV9BVE1fU1RBVChzaWduYWwsIEFUTV9QSFlfU0lHX0ZPVU5EKTsKKworCS8qIHdha2UgdXAgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIHN5bmNocm9uaXphdGlvbiAqLworCXdha2VfdXAoJnNjLT5zeW5jX3EpOworCisJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9ESUFHLCAyLCAmc2MtPnN0YXRzLnBoeS5mbGFncyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJc2MtPnN0YXRzLnBoeS5tZmxhZ3MgfD0gc2MtPnN0YXRzLnBoeS5mbGFnczsKKworCS8qIGluIGNhc2Ugb2YgYSBmbGFncyAoIGZvciBleGFtcGxlIGRlbGluZWF0aW9uIExPU1MgKCYgMHgxMCkpLAorCSAqIHdlIGNoZWNrIHRoZSBzdGF0dXMgYWdhaW4gaW4gb3JkZXIgdG8gZGV0ZWN0IHRoZSBmYWlsdXJlIGVhcmxpZXIKKwkgKi8KKwlpZiAoc2MtPnN0YXRzLnBoeS5mbGFncykgeworCQl1ZWFfZGJnKElOU19UT19VU0JERVYoc2MpLCAiU3RhdCBmbGFnID0gJWRcbiIsCisJCSAgICAgICBzYy0+c3RhdHMucGh5LmZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9SQVRFLCAwLCAmZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBpbiBidWxrIG1vZGUgdGhlIG1vZGVtIGhhdmUgcHJvYmxlbSB3aXRoIGhpZ2ggcmF0ZQorCSAqIGNoYW5naW5nIGludGVybmFsIHRpbWluZyBjb3VsZCBpbXByb3ZlIHRoaW5ncywgYnV0IHRoZQorCSAqIHZhbHVlIGlzIG1pc3RlcmlvdXMuCisJICogQURJOTMwIGRvbid0IHN1cHBvcnQgaXQgKC1FUElQRSBlcnJvcikuCisJICovCisJaWYgKFVFQV9DSElQX1ZFUlNJT04oc2MpICE9IEFESTkzMAorCQkgICAgJiYgc2MtPnN0YXRzLnBoeS5kc3JhdGUgIT0gKGRhdGEgPj4gMTYpICogMzIpIHsKKwkJLyogT3JpZ2luYWwgdGltbWluZyBmcm9tIEFESSh1c2VkIGluIHdpbmRvd3MgZHJpdmVyKQorCQkgKiAweDIwZmZmZj4+MTYgKiAzMiA9IDMyICogMzIgPSAxTWJpdHMKKwkJICovCisJCXUxNiB0aW1lb3V0ID0gKGRhdGEgPD0gMHgyMGZmZmYpID8gMCA6IDE7CisJCXJldCA9IHVlYV9yZXF1ZXN0KHNjLCBVRUFfU0VUX1RJTUVPVVQsIHRpbWVvdXQsIDAsIE5VTEwpOworCQl1ZWFfaW5mbyhJTlNfVE9fVVNCREVWKHNjKSwKKwkJCQkic2V0dGluZyBuZXcgdGltZW91dCAlZCVzXG4iLCB0aW1lb3V0LAorCQkJCXJldCA8IDA/IiBmYWlsZWQiOiIiKTsKKwl9CisJc2MtPnN0YXRzLnBoeS5kc3JhdGUgPSAoZGF0YSA+PiAxNikgKiAzMjsKKwlzYy0+c3RhdHMucGh5LnVzcmF0ZSA9IChkYXRhICYgMHhmZmZmKSAqIDMyOworCVVQREFURV9BVE1fU1RBVChsaW5rX3JhdGUsIHNjLT5zdGF0cy5waHkuZHNyYXRlICogMTAwMCAvIDQyNCk7CisKKwlyZXQgPSB1ZWFfcmVhZF9jbXYoc2MsIFNBX0RJQUcsIDIzLCAmZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJc2MtPnN0YXRzLnBoeS5kc2F0dGVudWF0aW9uID0gKGRhdGEgJiAweGZmKSAvIDI7CisKKwlyZXQgPSB1ZWFfcmVhZF9jbXYoc2MsIFNBX0RJQUcsIDQ3LCAmZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJc2MtPnN0YXRzLnBoeS51c2F0dGVudWF0aW9uID0gKGRhdGEgJiAweGZmKSAvIDI7CisKKwlyZXQgPSB1ZWFfcmVhZF9jbXYoc2MsIFNBX0RJQUcsIDI1LCAmc2MtPnN0YXRzLnBoeS5kc21hcmdpbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB1ZWFfcmVhZF9jbXYoc2MsIFNBX0RJQUcsIDQ5LCAmc2MtPnN0YXRzLnBoeS51c21hcmdpbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB1ZWFfcmVhZF9jbXYoc2MsIFNBX0RJQUcsIDUxLCAmc2MtPnN0YXRzLnBoeS5yeGZsb3cpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9ESUFHLCA1MiwgJnNjLT5zdGF0cy5waHkudHhmbG93KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHVlYV9yZWFkX2NtdihzYywgU0FfRElBRywgNTQsICZzYy0+c3RhdHMucGh5LmRzdW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIG9ubHkgZm9yIGF0dS1jICovCisJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9ESUFHLCA1OCwgJnNjLT5zdGF0cy5waHkudXN1bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9ESUFHLCA1MywgJnNjLT5zdGF0cy5waHkuZHNjb3JyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIG9ubHkgZm9yIGF0dS1jICovCisJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9ESUFHLCA1NywgJnNjLT5zdGF0cy5waHkudXNjb3JyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHVlYV9yZWFkX2NtdihzYywgU0FfSU5GTywgOCwgJnNjLT5zdGF0cy5waHkudmlkY28pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdWVhX3JlYWRfY212KHNjLCBTQV9JTkZPLCAxMywgJnNjLT5zdGF0cy5waHkudmlkY3BlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlcXVlc3RfY212cyhzdHJ1Y3QgdWVhX3NvZnRjICpzYywKKwkJIHN0cnVjdCB1ZWFfY212cyAqKmNtdnMsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KQoreworCWludCByZXQsIHNpemU7CisJdTggKmRhdGE7CisJY2hhciAqZmlsZTsKKwlzdGF0aWMgY2hhciBjbXZfbmFtZVsyNTZdID0gRldfRElSOworCisJaWYgKGNtdl9maWxlW3NjLT5tb2RlbV9pbmRleF0gPT0gTlVMTCkgeworCQlpZiAoVUVBX0NISVBfVkVSU0lPTihzYykgPT0gQURJOTMwKQorCQkJZmlsZSA9IChJU19JU0ROKHNjKSkgPyAiQ01WOWkuYmluIiA6ICJDTVY5cC5iaW4iOworCQllbHNlCisJCQlmaWxlID0gKElTX0lTRE4oc2MpKSA/ICJDTVZlaS5iaW4iIDogIkNNVmVwLmJpbiI7CisJfSBlbHNlCisJCWZpbGUgPSBjbXZfZmlsZVtzYy0+bW9kZW1faW5kZXhdOworCisJc3RyY3B5KGNtdl9uYW1lLCBGV19ESVIpOworCXN0cmxjYXQoY212X25hbWUsIGZpbGUsIHNpemVvZihjbXZfbmFtZSkpOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZShmdywgY212X25hbWUsICZzYy0+dXNiX2Rldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLAorCQkgICAgICAgInJlcXVlc3RpbmcgZmlybXdhcmUgJXMgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsCisJCSAgICAgICBjbXZfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYXRhID0gKHU4ICopICgqZncpLT5kYXRhOworCXNpemUgPSAqZGF0YSAqIHNpemVvZihzdHJ1Y3QgdWVhX2NtdnMpICsgMTsKKwlpZiAoc2l6ZSAhPSAoKmZ3KS0+c2l6ZSkgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiZmlybXdhcmUgJXMgaXMgY29ycnVwdGVkXG4iLAorCQkgICAgICAgY212X25hbWUpOworCQlyZWxlYXNlX2Zpcm13YXJlKCpmdyk7CisJCXJldHVybiAtRUlMU0VROworCX0KKworCSpjbXZzID0gKHN0cnVjdCB1ZWFfY212cyAqKShkYXRhICsgMSk7CisJcmV0dXJuICpkYXRhOworfQorCisvKiBTdGFydCBib290IHBvc3QgZmlybXdhcmUgbW9kZW06CisgKiAtIHNlbmQgcmVzZXQgY29tbWFuZHMgdGhyb3VnaCB1c2IgY29udHJvbCBwaXBlCisgKiAtIHN0YXJ0IHdvcmtxdWV1ZSBmb3IgRFNQIGxvYWRpbmcKKyAqIC0gc2VuZCBDTVYgb3B0aW9ucyB0byBtb2RlbQorICovCisKK3N0YXRpYyBpbnQgdWVhX3N0YXJ0X3Jlc2V0KHN0cnVjdCB1ZWFfc29mdGMgKnNjKQoreworCXUxNiB6ZXJvID0gMDsJLyogOy0pICovCisJaW50IGksIGxlbiwgcmV0OworCXN0cnVjdCB1ZWFfY212cyAqY212czsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmNtdnNfZnc7CisKKwl1ZWFfZW50ZXJzKElOU19UT19VU0JERVYoc2MpKTsKKwl1ZWFfaW5mbyhJTlNfVE9fVVNCREVWKHNjKSwgIihyZSlib290aW5nIHN0YXJ0ZWRcbiIpOworCisJc2MtPmJvb3RpbmcgPSAxOworCVVQREFURV9BVE1fU1RBVChzaWduYWwsIEFUTV9QSFlfU0lHX0xPU1QpOworCisJLyogcmVzZXQgc3RhdGlzdGljcyAqLworCW1lbXNldCgmc2MtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHVlYV9zdGF0cykpOworCisJLyogdGVsbCB0aGUgbW9kZW0gdGhhdCB3ZSB3YW50IHRvIGJvb3QgaW4gSURNQSBtb2RlICovCisJdWVhX3JlcXVlc3Qoc2MsIFVFQV9TRVRfTU9ERSwgVUVBX0xPT1BCQUNLX09OLCAwLCBOVUxMKTsKKwl1ZWFfcmVxdWVzdChzYywgVUVBX1NFVF9NT0RFLCBVRUFfQk9PVF9JRE1BLCAwLCBOVUxMKTsKKworIAkvKiBlbnRlciByZXNldCBtb2RlICovCisJdWVhX3JlcXVlc3Qoc2MsIFVFQV9TRVRfTU9ERSwgVUVBX1NUQVJUX1JFU0VULCAwLCBOVUxMKTsKKworCS8qIG9yaWdpbmFsIGRyaXZlciB1c2UgMjAwbXMsIGJ1dCB3aW5kb3dzIGRyaXZlciB1c2UgMTAwbXMgKi8KKwltc2xlZXAoMTAwKTsKKworCS8qIGxlYXZlIHJlc2V0IG1vZGUgKi8KKwl1ZWFfcmVxdWVzdChzYywgVUVBX1NFVF9NT0RFLCBVRUFfRU5EX1JFU0VULCAwLCBOVUxMKTsKKworIAkvKiBjbGVhciB0eCBhbmQgcnggbWFpbGJveGVzICovCisJdWVhX3JlcXVlc3Qoc2MsIFVFQV9TRVRfMjE4M19EQVRBLCBVRUFfTVBUWF9NQUlMQk9YLCAyLCAmemVybyk7CisJdWVhX3JlcXVlc3Qoc2MsIFVFQV9TRVRfMjE4M19EQVRBLCBVRUFfTVBSWF9NQUlMQk9YLCAyLCAmemVybyk7CisJdWVhX3JlcXVlc3Qoc2MsIFVFQV9TRVRfMjE4M19EQVRBLCBVRUFfU1dBUF9NQUlMQk9YLCAyLCAmemVybyk7CisKKwltc2xlZXAoMTAwMCk7CisJc2MtPmNtdl9mdW5jdGlvbiA9IE1BS0VGVU5DVElPTihBRFNMRElSRUNUSVZFLCBNT0RFTVJFQURZKTsKKwlzYy0+Ym9vdGluZyA9IDA7CisKKwkvKiBzdGFydCBsb2FkaW5nIERTUCAqLworCXNjLT5wYWdlbm8gPSAwOworCXNjLT5vdmwgPSAwOworCXNjaGVkdWxlX3dvcmsoJnNjLT50YXNrKTsKKworCS8qIHdhaXQgZm9yIG1vZGVtIHJlYWR5IENNViAqLworCXJldCA9IHdhaXRfY212X2FjayhzYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBFbnRlciBpbiBSLUlETEUgKGNtdikgdW50aWwgaW5zdHJ1Y3RlZCBvdGhlcndpc2UgKi8KKwlyZXQgPSB1ZWFfd3JpdGVfY212KHNjLCBTQV9DTlRMLCAwLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGdldCBvcHRpb25zICovCisgCXJldCA9IGxlbiA9IHJlcXVlc3RfY212cyhzYywgJmNtdnMsICZjbXZzX2Z3KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNlbmQgb3B0aW9ucyAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZXQgPSB1ZWFfd3JpdGVfY212KHNjLCBGV19HRVRfTE9ORygmY212c1tpXS5hZGRyZXNzKSwKKwkJCQkJRldfR0VUX1dPUkQoJmNtdnNbaV0ub2Zmc2V0KSwKKwkJCQkJRldfR0VUX0xPTkcoJmNtdnNbaV0uZGF0YSkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKwkvKiBFbnRlciBpbiBSLUFDVC1SRVEgKi8KKwlyZXQgPSB1ZWFfd3JpdGVfY212KHNjLCBTQV9DTlRMLCAwLCAyKTsKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGNtdnNfZncpOworCXNjLT5yZXNldCA9IDA7CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluIGNhc2Ugb2YgYW4gZXJyb3Igd2FpdCAxcyBiZWZvcmUgcmVib290aW5nIHRoZSBtb2RlbQorICogaWYgdGhlIG1vZGVtIGRvbid0IHJlcXVlc3QgcmVib290ICgtRUFHQUlOKS4KKyAqIE1vbml0b3IgdGhlIG1vZGVtIGV2ZXJ5IDFzLgorICovCisKK3N0YXRpYyBpbnQgdWVhX2t0aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWVhX3NvZnRjICpzYyA9IGRhdGE7CisJaW50IHJldCA9IC1FQUdBSU47CisKKwl1ZWFfZW50ZXJzKElOU19UT19VU0JERVYoc2MpKTsKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpZiAocmV0IDwgMCB8fCBzYy0+cmVzZXQpCisJCQlyZXQgPSB1ZWFfc3RhcnRfcmVzZXQoc2MpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHVlYV9zdGF0KHNjKTsKKwkJaWYgKHJldCAhPSAtRUFHQUlOKQorCQkJbXNsZWVwKDEwMDApOworCX0KKwl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBMb2FkIHNlY29uZCB1c2IgZmlybXdhcmUgZm9yIEFESTkzMCBjaGlwICovCitzdGF0aWMgaW50IGxvYWRfWElMSU5YX2Zpcm13YXJlKHN0cnVjdCB1ZWFfc29mdGMgKnNjKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJaW50IHJldCwgc2l6ZSwgdSwgbG47CisJdTggKnBmdywgdmFsdWU7CisJY2hhciAqZndfbmFtZSA9IEZXX0RJUiAiOTMwLWZwZ2EuYmluIjsKKworCXVlYV9lbnRlcnMoSU5TX1RPX1VTQkRFVihzYykpOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3X25hbWUsICZzYy0+dXNiX2Rldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJmaXJtd2FyZSAlcyBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgZndfbmFtZSk7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlwZncgPSBmd19lbnRyeS0+ZGF0YTsKKwlzaXplID0gZndfZW50cnktPnNpemU7CisJaWYgKHNpemUgIT0gMHg1NzdCKSB7CisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJmaXJtd2FyZSAlcyBpcyBjb3JydXB0ZWRcbiIsCisJCSAgICAgICBmd19uYW1lKTsKKwkJcmV0ID0gLUVJTFNFUTsKKwkJZ290byBlcnIxOworCX0KKwlmb3IgKHUgPSAwOyB1IDwgc2l6ZTsgdSArPSBsbikgeworCQlsbiA9IG1pbihzaXplIC0gdSwgNjQpOworCQlyZXQgPSB1ZWFfcmVxdWVzdChzYywgMHhlLCAwLCBsbiwgcGZ3ICsgdSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLAorCQkJICAgICAgICJlbHNhIGRvd25sb2FkIGRhdGEgZmFpbGVkICglZClcbiIsIHJldCk7CisJCQlnb3RvIGVycjE7CisJCX0KKwl9CisKKwkvKiBmaW5pc2ggdG8gc2VuZCB0aGUgZnBnYQorCSAqLworCXJldCA9IHVlYV9yZXF1ZXN0KHNjLCAweGUsIDEsIDAsIE5VTEwpOworCWlmIChyZXQgPCAwKSB7CisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksCisJCQkJImVsc2EgZG93bmxvYWQgZGF0YSBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBlcnIxOworCX0KKworCS8qCisJICogVGVsbCB0aGUgbW9kZW0gd2UgZmluaXNoIDogZGUtYXNzZXJ0IHJlc2V0CisJICovCisJdmFsdWUgPSAwOworCXJldCA9IHVlYV9zZW5kX21vZGVtX2NtZChzYy0+dXNiX2RldiwgMHhlLCAxLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQl1ZWFfZXJyKHNjLT51c2JfZGV2LCAiZWxzYSBkZS1hc3NlcnQgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldCk7CisKKworZXJyMToKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKK2VycjA6CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdWVhX2Rpc3BhdGNoX2NtdihzdHJ1Y3QgdWVhX3NvZnRjICpzYywgc3RydWN0IGNtdiogY212KQoreworCXVlYV9lbnRlcnMoSU5TX1RPX1VTQkRFVihzYykpOworCWlmIChsZTE2X3RvX2NwdShjbXYtPndQcmVhbWJsZSkgIT0gUFJFQU1CTEUpCisJCWdvdG8gYmFkMTsKKworCWlmIChjbXYtPmJEaXJlY3Rpb24gIT0gTU9ERU1UT0hPU1QpCisJCWdvdG8gYmFkMTsKKworCS8qIEZJWE1FIDogQURJOTMwIHJlcGx5IHdyb25nIHByZWFtYnVsZSAoZnVuYyA9IDIsIHN1YiA9IDIpIHRvCisJICogdGhlIGZpcnN0IE1FTUFDRVNTIGNtdi4gSWdub3JlIGl0Li4uCisJICovCisJaWYgKGNtdi0+YkZ1bmN0aW9uICE9IHNjLT5jbXZfZnVuY3Rpb24pIHsKKwkJaWYgKFVFQV9DSElQX1ZFUlNJT04oc2MpID09IEFESTkzMAorCQkJCSYmIGNtdi0+YkZ1bmN0aW9uID09ICBNQUtFRlVOQ1RJT04oMiwgMikpIHsKKwkJCWNtdi0+d0luZGV4ID0gY3B1X3RvX2xlMTYoc2MtPmNtdl9pZHgpOworCQkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihzYy0+Y212X2FkZHJlc3MpLCAmY212LT5kd1N5bWJvbGljQWRkcmVzcyk7CisJCQljbXYtPndPZmZzZXRBZGRyZXNzID0gY3B1X3RvX2xlMTYoc2MtPmNtdl9vZmZzZXQpOworCQl9CisJCWVsc2UKKwkJCWdvdG8gYmFkMjsKKwl9CisKKwlpZiAoY212LT5iRnVuY3Rpb24gPT0gTUFLRUZVTkNUSU9OKEFEU0xESVJFQ1RJVkUsIE1PREVNUkVBRFkpKSB7CisJCXdha2VfdXBfY212X2FjayhzYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpbiBjYXNlIG9mIE1FTUFDQ0VTUyAqLworCWlmIChsZTE2X3RvX2NwdShjbXYtPndJbmRleCkgIT0gc2MtPmNtdl9pZHggfHwKKwkgICAgbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgmY212LT5kd1N5bWJvbGljQWRkcmVzcykpICE9CisJICAgIHNjLT5jbXZfYWRkcmVzcworCSAgICB8fCBsZTE2X3RvX2NwdShjbXYtPndPZmZzZXRBZGRyZXNzKSAhPSBzYy0+Y212X29mZnNldCkKKwkJZ290byBiYWQyOworCisJc2MtPmRhdGEgPSBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKCZjbXYtPmR3RGF0YSkpOworCXNjLT5kYXRhID0gc2MtPmRhdGEgPDwgMTYgfCBzYy0+ZGF0YSA+PiAxNjsKKworCXdha2VfdXBfY212X2FjayhzYyk7CisJcmV0dXJuOworCitiYWQyOgorCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJ1bmV4cGVjdGVkIGNtdiByZWNlaXZlZCwiCisJCQkiRnVuY3Rpb24gOiAlZCwgU3ViZnVuY3Rpb24gOiAlZFxuIiwKKwkJCUZVTkNUSU9OX1RZUEUoY212LT5iRnVuY3Rpb24pLAorCQkJRlVOQ1RJT05fU1VCVFlQRShjbXYtPmJGdW5jdGlvbikpOworCXJldHVybjsKKworYmFkMToKKwl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiaW52YWxpZCBjbXYgcmVjZWl2ZWQsICIKKwkJCSJ3UHJlYW1ibGUgJWQsIGJEaXJlY3Rpb24gJWRcbiIsCisJCQlsZTE2X3RvX2NwdShjbXYtPndQcmVhbWJsZSksIGNtdi0+YkRpcmVjdGlvbik7Cit9CisKKy8qCisgKiBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZCB1ZWFfaW50cihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1ZWFfc29mdGMgKnNjID0gKHN0cnVjdCB1ZWFfc29mdGMgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGludHJfcGt0ICppbnRyOworCXVlYV9lbnRlcnMoSU5TX1RPX1VTQkRFVihzYykpOworCisJaWYgKHVyYi0+c3RhdHVzIDwgMCkgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAidWVhX2ludHIoKSBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJICAgICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWludHIgPSAoc3RydWN0IGludHJfcGt0ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJLyogZGV2aWNlLXRvLWhvc3QgaW50ZXJydXB0ICovCisJaWYgKGludHItPmJUeXBlICE9IDB4MDggfHwgc2MtPmJvb3RpbmcpIHsKKwkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgIndyb25nIGludHJcbiIpOworCQkvLyByZWJvb3RpbmcgPworCQkvLyBzYy0+cmVzZXQgPSAxOworCQlnb3RvIHJlc3VibWl0OworCX0KKworCXN3aXRjaCAobGUxNl90b19jcHUoaW50ci0+d0ludGVycnVwdCkpIHsKKwljYXNlIElOVF9MT0FEU1dBUFBBR0U6CisJCXNjLT5wYWdlbm8gPSBpbnRyLT5iU3dhcFBhZ2VObzsKKwkJc2MtPm92bCA9IGludHItPmJPdmwgPj4gNCB8IGludHItPmJPdmwgPDwgNDsKKwkJc2NoZWR1bGVfd29yaygmc2MtPnRhc2spOworCQlicmVhazsKKworCWNhc2UgSU5UX0lOQ09NSU5HQ01WOgorCQl1ZWFfZGlzcGF0Y2hfY212KHNjLCAmaW50ci0+dS5zMi5jbXYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJ1bmtub3duIGludHIgJXVcbiIsCisJCSAgICAgICBsZTE2X3RvX2NwdShpbnRyLT53SW50ZXJydXB0KSk7CisJfQorCityZXN1Ym1pdDoKKwl1c2Jfc3VibWl0X3VyYihzYy0+dXJiX2ludCwgR0ZQX0FUT01JQyk7Cit9CisKKy8qCisgKiBTdGFydCB0aGUgbW9kZW0gOiBpbml0IHRoZSBkYXRhIGFuZCBzdGFydCBrZXJuZWwgdGhyZWFkCisgKi8KK3N0YXRpYyBpbnQgdWVhX2Jvb3Qoc3RydWN0IHVlYV9zb2Z0YyAqc2MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaW50cl9wa3QgKmludHI7CisKKwl1ZWFfZW50ZXJzKElOU19UT19VU0JERVYoc2MpKTsKKworCUlOSVRfV09SSygmc2MtPnRhc2ssIHVlYV9sb2FkX3BhZ2UsIHNjKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzYy0+c3luY19xKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzYy0+Y212X2Fja193YWl0KTsKKworCWlmIChVRUFfQ0hJUF9WRVJTSU9OKHNjKSA9PSBBREk5MzApCisJCWxvYWRfWElMSU5YX2Zpcm13YXJlKHNjKTsKKworCWludHIgPSBrbWFsbG9jKElOVFJfUEtUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghaW50cikgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLAorCQkgICAgICAgImNhbm5vdCBhbGxvY2F0ZSBpbnRlcnJ1cHQgcGFja2FnZVxuIik7CisJCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzYy0+dXJiX2ludCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYy0+dXJiX2ludCkgeworCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiY2Fubm90IGFsbG9jYXRlIGludGVycnVwdCBVUkJcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKHNjLT51cmJfaW50LCBzYy0+dXNiX2RldiwKKwkJCSB1c2JfcmN2aW50cGlwZShzYy0+dXNiX2RldiwgVUVBX0lOVFJfUElQRSksCisJCQkgaW50ciwgSU5UUl9QS1RfU0laRSwgdWVhX2ludHIsIHNjLAorCQkJIHNjLT51c2JfZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXS0+YWx0c2V0dGluZ1swXS4KKwkJCSBlbmRwb2ludFswXS5kZXNjLmJJbnRlcnZhbCk7CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihzYy0+dXJiX2ludCwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwKKwkJICAgICAgICJ1cmIgc3VibWl0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCByZXQpOworCQlnb3RvIGVycjE7CisJfQorCisJc2MtPmt0aHJlYWQgPSBrdGhyZWFkX3J1bih1ZWFfa3RocmVhZCwgc2MsICJ1ZWFnbGUtYXRtIik7CisJaWYgKHNjLT5rdGhyZWFkID09IEVSUl9QVFIoLUVOT01FTSkpIHsKKwkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgImZhaWxlZCB0byBjcmVhdGUgdGhyZWFkXG4iKTsKKwkJZ290byBlcnIyOworCX0KKworCXVlYV9sZWF2ZXMoSU5TX1RPX1VTQkRFVihzYykpOworCXJldHVybiAwOworCitlcnIyOgorCXVzYl9raWxsX3VyYihzYy0+dXJiX2ludCk7CitlcnIxOgorCWtmcmVlKGludHIpOworZXJyOgorCXVzYl9mcmVlX3VyYihzYy0+dXJiX2ludCk7CisJdWVhX2xlYXZlcyhJTlNfVE9fVVNCREVWKHNjKSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBTdG9wIHRoZSBtb2RlbSA6IGtpbGwga2VybmVsIHRocmVhZCBhbmQgZnJlZSBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIHVlYV9zdG9wKHN0cnVjdCB1ZWFfc29mdGMgKnNjKQoreworCWludCByZXQ7CisJdWVhX2VudGVycyhJTlNfVE9fVVNCREVWKHNjKSk7CisJcmV0ID0ga3RocmVhZF9zdG9wKHNjLT5rdGhyZWFkKTsKKwl1ZWFfaW5mbyhJTlNfVE9fVVNCREVWKHNjKSwgImt0aHJlYWQgZmluaXNoIHdpdGggc3RhdHVzICVkXG4iLCByZXQpOworCisJLyogc3RvcCBhbnkgcGVuZGluZyBib290IHByb2Nlc3MgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJdWVhX3JlcXVlc3Qoc2MsIFVFQV9TRVRfTU9ERSwgVUVBX0xPT1BCQUNLX09OLCAwLCBOVUxMKTsKKworCXVzYl9raWxsX3VyYihzYy0+dXJiX2ludCk7CisJa2ZyZWUoc2MtPnVyYl9pbnQtPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX2ZyZWVfdXJiKHNjLT51cmJfaW50KTsKKworCWlmIChzYy0+ZHNwX2Zpcm0pCisJCXJlbGVhc2VfZmlybXdhcmUoc2MtPmRzcF9maXJtKTsKKwl1ZWFfbGVhdmVzKElOU19UT19VU0JERVYoc2MpKTsKK30KKworLyogc3lmcyBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgdWVhX3NvZnRjICpkZXZfdG9fdWVhKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bTsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJaWYgKCFpbnRmKQorCQlyZXR1cm4gTlVMTDsKKworCXVzYmF0bSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaWYgKCF1c2JhdG0pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHVzYmF0bS0+ZHJpdmVyX2RhdGE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKwlzdHJ1Y3QgdWVhX3NvZnRjICpzYzsKKworCWRvd24oJnVlYV9zZW1hcGhvcmUpOworCXNjID0gZGV2X3RvX3VlYShkZXYpOworCWlmICghc2MpCisJCWdvdG8gb3V0OworCXJldCA9IHNucHJpbnRmKGJ1ZiwgMTAsICIlMDh4XG4iLCBzYy0+c3RhdHMucGh5LnN0YXRlKTsKK291dDoKKwl1cCgmdWVhX3NlbWFwaG9yZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgcmVib290KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQgPSAtRU5PREVWOworCXN0cnVjdCB1ZWFfc29mdGMgKnNjOworCisJZG93bigmdWVhX3NlbWFwaG9yZSk7CisJc2MgPSBkZXZfdG9fdWVhKGRldik7CisJaWYgKCFzYykKKwkJZ290byBvdXQ7CisJc2MtPnJlc2V0ID0gMTsKKwlyZXQgPSBjb3VudDsKK291dDoKKwl1cCgmdWVhX3NlbWFwaG9yZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHN0YXRfc3RhdHVzLCBTX0lXVUdPIHwgU19JUlVHTywgcmVhZF9zdGF0dXMsIHJlYm9vdCk7CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfaHVtYW5fc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKwlzdHJ1Y3QgdWVhX3NvZnRjICpzYzsKKworCWRvd24oJnVlYV9zZW1hcGhvcmUpOworCXNjID0gZGV2X3RvX3VlYShkZXYpOworCWlmICghc2MpCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChHRVRfU1RBVFVTKHNjLT5zdGF0cy5waHkuc3RhdGUpKSB7CisJY2FzZSAwOgorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIk1vZGVtIGlzIGJvb3RpbmdcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldCA9IHNwcmludGYoYnVmLCAiTW9kZW0gaXMgaW5pdGlhbGl6aW5nXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIk1vZGVtIGlzIG9wZXJhdGlvbmFsXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gc3ByaW50ZihidWYsICJNb2RlbSBzeW5jaHJvbml6YXRpb24gZmFpbGVkXG4iKTsKKwkJYnJlYWs7CisJfQorb3V0OgorCXVwKCZ1ZWFfc2VtYXBob3JlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3RhdF9odW1hbl9zdGF0dXMsIFNfSVdVR08gfCBTX0lSVUdPLCByZWFkX2h1bWFuX3N0YXR1cywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZGVsaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCWludCByZXQgPSAtRU5PREVWOworCXN0cnVjdCB1ZWFfc29mdGMgKnNjOworCisJZG93bigmdWVhX3NlbWFwaG9yZSk7CisJc2MgPSBkZXZfdG9fdWVhKGRldik7CisJaWYgKCFzYykKKwkJZ290byBvdXQ7CisKKwlpZiAoc2MtPnN0YXRzLnBoeS5mbGFncyAmIDB4MEMwMCkKKwkJcmV0ID0gc3ByaW50ZihidWYsICJFUlJPUlxuIik7CisJZWxzZSBpZiAoc2MtPnN0YXRzLnBoeS5mbGFncyAmIDB4MDAzMCkKKwkJcmV0ID0gc3ByaW50ZihidWYsICJMT1NTXG4iKTsKKwllbHNlCisJCXJldCA9IHNwcmludGYoYnVmLCAiR09PRFxuIik7CitvdXQ6CisJdXAoJnVlYV9zZW1hcGhvcmUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0X2RlbGluLCBTX0lXVUdPIHwgU19JUlVHTywgcmVhZF9kZWxpbiwgTlVMTCk7CisKKyNkZWZpbmUgVUVBX0FUVFIobmFtZSwgcmVzZXQpIAkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCByZWFkXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAoreyAJCQkJCQkJCVwKKwlpbnQgcmV0ID0gLUVOT0RFVjsgCQkJCQlcCisJc3RydWN0IHVlYV9zb2Z0YyAqc2M7IAkJCQkJXAorIAkJCQkJCQkJXAorCWRvd24oJnVlYV9zZW1hcGhvcmUpOyAJCQkJCVwKKwlzYyA9IGRldl90b191ZWEoZGV2KTsJCQkJCVwKKwlpZiAoIXNjKSAJCQkJCQlcCisJCWdvdG8gb3V0OyAJCQkJCVwKKwlyZXQgPSBzbnByaW50ZihidWYsIDEwLCAiJTA4eFxuIiwgc2MtPnN0YXRzLnBoeS5uYW1lKTsJXAorCWlmIChyZXNldCkJCQkJCQlcCisJCXNjLT5zdGF0cy5waHkubmFtZSA9IDA7CQkJCVwKK291dDogCQkJCQkJCQlcCisJdXAoJnVlYV9zZW1hcGhvcmUpOyAJCQkJCVwKKwlyZXR1cm4gcmV0OyAJCQkJCQlcCit9IAkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIoc3RhdF8jI25hbWUsIFNfSVJVR08sIHJlYWRfIyNuYW1lLCBOVUxMKQorCitVRUFfQVRUUihtZmxhZ3MsIDEpOworVUVBX0FUVFIodmlkY3BlLCAwKTsKK1VFQV9BVFRSKHVzcmF0ZSwgMCk7CitVRUFfQVRUUihkc3JhdGUsIDApOworVUVBX0FUVFIodXNhdHRlbnVhdGlvbiwgMCk7CitVRUFfQVRUUihkc2F0dGVudWF0aW9uLCAwKTsKK1VFQV9BVFRSKHVzbWFyZ2luLCAwKTsKK1VFQV9BVFRSKGRzbWFyZ2luLCAwKTsKK1VFQV9BVFRSKHR4ZmxvdywgMCk7CitVRUFfQVRUUihyeGZsb3csIDApOworVUVBX0FUVFIodXNjb3JyLCAwKTsKK1VFQV9BVFRSKGRzY29yciwgMCk7CitVRUFfQVRUUih1c3VuYywgMCk7CitVRUFfQVRUUihkc3VuYywgMCk7CisKKy8qIFJldHJpZXZlIHRoZSBkZXZpY2UgRW5kIFN5c3RlbSBJZGVudGlmaWVyIChNQUMpICovCisKKyNkZWZpbmUgaHRvaSh4KSAoaXNkaWdpdCh4KSA/IHgtJzAnIDogdG91cHBlcih4KS0nQScrMTApCitzdGF0aWMgaW50IHVlYV9nZXRlc2koc3RydWN0IHVlYV9zb2Z0YyAqc2MsIHVfY2hhciAqIGVzaSkKK3sKKwl1bnNpZ25lZCBjaGFyIG1hY19zdHJbMiAqIEVUSF9BTEVOICsgMV07CisJaW50IGk7CisJaWYgKHVzYl9zdHJpbmcKKwkgICAgKHNjLT51c2JfZGV2LCBzYy0+dXNiX2Rldi0+ZGVzY3JpcHRvci5pU2VyaWFsTnVtYmVyLCBtYWNfc3RyLAorCSAgICAgc2l6ZW9mKG1hY19zdHIpKSAhPSAyICogRVRIX0FMRU4pCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCWVzaVtpXSA9IGh0b2kobWFjX3N0clsyICogaV0pICogMTYgKyBodG9pKG1hY19zdHJbMiAqIGkgKyAxXSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQVRNIHN0dWZmICovCitzdGF0aWMgaW50IHVlYV9hdG1fb3BlbihzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bSwgc3RydWN0IGF0bV9kZXYgKmF0bV9kZXYpCit7CisJc3RydWN0IHVlYV9zb2Z0YyAqc2MgPSB1c2JhdG0tPmRyaXZlcl9kYXRhOworCisJcmV0dXJuIHVlYV9nZXRlc2koc2MsIGF0bV9kZXYtPmVzaSk7Cit9CisKK3N0YXRpYyBpbnQgdWVhX2hlYXZ5KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdWVhX3NvZnRjICpzYyA9IHVzYmF0bS0+ZHJpdmVyX2RhdGE7CisKKwl3YWl0X2V2ZW50KHNjLT5zeW5jX3EsIElTX09QRVJBVElPTkFMKHNjKSk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGNsYWltX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJCSAgIHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLCBpbnQgaWZudW0pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCBpZm51bSk7CisKKwlpZiAoIWludGYpIHsKKwkJdWVhX2Vycih1c2JfZGV2LCAiaW50ZXJmYWNlICVkIG5vdCBmb3VuZFxuIiwgaWZudW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdWVhX2RyaXZlciwgaW50ZiwgdXNiYXRtKTsKKwlpZiAocmV0ICE9IDApCisJCXVlYV9lcnIodXNiX2RldiwgImNhbid0IGNsYWltIGludGVyZmFjZSAlZCwgZXJyb3IgJWRcbiIsIGlmbnVtLAorCQkgICAgICAgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfZnNfZW50cmllcyhzdHJ1Y3QgdWVhX3NvZnRjICpzYywgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJLyogc3lzZnMgaW50ZXJmYWNlICovCisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3N0YXR1cyk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X21mbGFncyk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2h1bWFuX3N0YXR1cyk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RlbGluKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdmlkY3BlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXNyYXRlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZHNyYXRlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXNhdHRlbnVhdGlvbik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RzYXR0ZW51YXRpb24pOworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF91c21hcmdpbik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RzbWFyZ2luKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdHhmbG93KTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfcnhmbG93KTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXNjb3JyKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZHNjb3JyKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXN1bmMpOworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9kc3VuYyk7Cit9CisKK3N0YXRpYyBpbnQgdWVhX2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG0sIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsIGludCAqaGVhdnkpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVlYV9zb2Z0YyAqc2M7CisJaW50IHJldCwgaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwl1ZWFfZW50ZXJzKHVzYik7CisKKwkvKiBpbnRlcmZhY2UgMCBpcyBmb3IgZmlybXdhcmUvbW9uaXRvcmluZyAqLworCWlmIChpZm51bSAhPSBVRUFfSU5UUl9JRkFDRV9OTykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkqaGVhdnkgPSBzeW5jX3dhaXRbbW9kZW1faW5kZXhdOworCisJLyogaW50ZXJmYWNlIDEgaXMgZm9yIG91dGJvdW5kIHRyYWZmaWMgKi8KKwlyZXQgPSBjbGFpbV9pbnRlcmZhY2UodXNiLCB1c2JhdG0sIFVFQV9VU19JRkFDRV9OTyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBBREk5MzAgaGFzIG9ubHkgMiBpbnRlcmZhY2VzIGFuZCBpbmJvdW5kIHRyYWZmaWMKKwkgKiBpcyBvbiBpbnRlcmZhY2UgMQorCSAqLworCWlmIChVRUFfQ0hJUF9WRVJTSU9OKGlkKSAhPSBBREk5MzApIHsKKwkJLyogaW50ZXJmYWNlIDIgaXMgZm9yIGluYm91bmQgdHJhZmZpYyAqLworCQlyZXQgPSBjbGFpbV9pbnRlcmZhY2UodXNiLCB1c2JhdG0sIFVFQV9EU19JRkFDRV9OTyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZWFfc29mdGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjKSB7CisJCXVlYV9lcnIoSU5TX1RPX1VTQkRFVihzYyksICJ1ZWFfaW5pdDogbm90IGVub3VnaCBtZW1vcnkgIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNjLT51c2JfZGV2ID0gdXNiOworCXVzYmF0bS0+ZHJpdmVyX2RhdGEgPSBzYzsKKwlzYy0+dXNiYXRtID0gdXNiYXRtOworCXNjLT5tb2RlbV9pbmRleCA9IChtb2RlbV9pbmRleCA8IE5CX01PREVNKSA/IG1vZGVtX2luZGV4KysgOiAwOworCXNjLT5kcml2ZXJfaW5mbyA9IGlkLT5kcml2ZXJfaW5mbzsKKworCXJldCA9IHVlYV9ib290KHNjKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShzYyk7CisJCXJldHVybiByZXQ7CisJfQorCisJY3JlYXRlX2ZzX2VudHJpZXMoc2MsIGludGYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2ZzX2VudHJpZXMoc3RydWN0IHVlYV9zb2Z0YyAqc2MsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCS8qIHN5c2ZzIGludGVyZmFjZSAqLworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9zdGF0dXMpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9tZmxhZ3MpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9odW1hbl9zdGF0dXMpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9kZWxpbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3ZpZGNwZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3VzcmF0ZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RzcmF0ZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3VzYXR0ZW51YXRpb24pOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9kc2F0dGVudWF0aW9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXNtYXJnaW4pOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9kc21hcmdpbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3R4Zmxvdyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3J4Zmxvdyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3VzY29ycik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RzY29ycik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3VzdW5jKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZHN1bmMpOworfQorCitzdGF0aWMgdm9pZCB1ZWFfdW5iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdWVhX3NvZnRjICpzYyA9IHVzYmF0bS0+ZHJpdmVyX2RhdGE7CisKKwlkZXN0cm95X2ZzX2VudHJpZXMoc2MsIGludGYpOworCXVlYV9zdG9wKHNjKTsKKwlrZnJlZShzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiYXRtX2RyaXZlciB1ZWFfdXNiYXRtX2RyaXZlciA9IHsKKwkuZHJpdmVyX25hbWUgPSAidWVhZ2xlLWF0bSIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmJpbmQgPSB1ZWFfYmluZCwKKwkuYXRtX3N0YXJ0ID0gdWVhX2F0bV9vcGVuLAorCS51bmJpbmQgPSB1ZWFfdW5iaW5kLAorCS5oZWF2eV9pbml0ID0gdWVhX2hlYXZ5LAorCS5pbiA9IFVFQV9CVUxLX0RBVEFfUElQRSwKKwkub3V0ID0gVUVBX0JVTEtfREFUQV9QSVBFLAorfTsKKworc3RhdGljIGludCB1ZWFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCXVlYV9lbnRlcnModXNiKTsKKwl1ZWFfaW5mbyh1c2IsICJBRFNMIGRldmljZSBmb3VuZGVkIHZpZCAoJSNYKSBwaWQgKCUjWCkgOiAlc1xuIiwKKwkgICAgICAgbGUxNl90b19jcHUodXNiLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkgICAgICAgbGUxNl90b19jcHUodXNiLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJICAgICAgIGNoaXBfbmFtZVtVRUFfQ0hJUF9WRVJTSU9OKGlkKV0pOworCisJdXNiX3Jlc2V0X2RldmljZSh1c2IpOworCisJaWYgKFVFQV9JU19QUkVGSVJNKGlkKSkKKwkJcmV0dXJuIHVlYV9sb2FkX2Zpcm13YXJlKHVzYiwgVUVBX0NISVBfVkVSU0lPTihpZCkpOworCisJcmV0dXJuIHVzYmF0bV91c2JfcHJvYmUoaW50ZiwgaWQsICZ1ZWFfdXNiYXRtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHVlYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludCBpZm51bSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwl1ZWFfZW50ZXJzKHVzYik7CisKKwkvKiBBREk5MzAgaGFzIDIgaW50ZXJmYWNlcyBhbmQgZWFnbGUgMyBpbnRlcmZhY2VzLgorCSAqIFByZS1maXJtd2FyZSBkZXZpY2UgaGFzIG9uZSBpbnRlcmZhY2UKKwkgKi8KKwlpZiAodXNiLT5jb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgIT0gMSAmJiBpZm51bSA9PSAwKSB7CisJCWRvd24oJnVlYV9zZW1hcGhvcmUpOworCQl1c2JhdG1fdXNiX2Rpc2Nvbm5lY3QoaW50Zik7CisJCXVwKCZ1ZWFfc2VtYXBob3JlKTsKKwkJdWVhX2luZm8odXNiLCAiQURTTCBkZXZpY2UgcmVtb3ZlZFxuIik7CisJfQorCisJdWVhX2xlYXZlcyh1c2IpOworfQorCisvKgorICogTGlzdCBvZiBzdXBwb3J0ZWQgVklEL1BJRAorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdWVhX2lkc1tdID0geworCXtVU0JfREVWSUNFKEVMU0FfVklELAlFTFNBX1BJRF9QUkVGSVJNKSwJLmRyaXZlcl9pbmZvID0gQURJOTMwIHwgUFJFRklSTX0sCisJe1VTQl9ERVZJQ0UoRUxTQV9WSUQsCUVMU0FfUElEX1BTVEZJUk0pLAkuZHJpdmVyX2luZm8gPSBBREk5MzAgfCBQU1RGSVJNfSwKKwl7VVNCX0RFVklDRShFQUdMRV9WSUQsCUVBR0xFX0lfUElEX1BSRUZJUk0pLAkuZHJpdmVyX2luZm8gPSBFQUdMRV9JIHwgUFJFRklSTX0sCisJe1VTQl9ERVZJQ0UoRUFHTEVfVklELAlFQUdMRV9JX1BJRF9QU1RGSVJNKSwJLmRyaXZlcl9pbmZvID0gRUFHTEVfSSB8IFBTVEZJUk19LAorCXtVU0JfREVWSUNFKEVBR0xFX1ZJRCwJRUFHTEVfSUlfUElEX1BSRUZJUk0pLAkuZHJpdmVyX2luZm8gPSBFQUdMRV9JSSB8IFBSRUZJUk19LAorCXtVU0JfREVWSUNFKEVBR0xFX1ZJRCwJRUFHTEVfSUlfUElEX1BTVEZJUk0pLAkuZHJpdmVyX2luZm8gPSBFQUdMRV9JSSB8IFBTVEZJUk19LAorCXtVU0JfREVWSUNFKEVBR0xFX1ZJRCwJRUFHTEVfSUlDX1BJRF9QUkVGSVJNKSwJLmRyaXZlcl9pbmZvID0gRUFHTEVfSUkgfCBQUkVGSVJNfSwKKwl7VVNCX0RFVklDRShFQUdMRV9WSUQsCUVBR0xFX0lJQ19QSURfUFNURklSTSksCS5kcml2ZXJfaW5mbyA9IEVBR0xFX0lJIHwgUFNURklSTX0sCisJe1VTQl9ERVZJQ0UoRUFHTEVfVklELAlFQUdMRV9JSUlfUElEX1BSRUZJUk0pLAkuZHJpdmVyX2luZm8gPSBFQUdMRV9JSUkgfCBQUkVGSVJNfSwKKwl7VVNCX0RFVklDRShFQUdMRV9WSUQsCUVBR0xFX0lJSV9QSURfUFNURklSTSksCS5kcml2ZXJfaW5mbyA9IEVBR0xFX0lJSSB8IFBTVEZJUk19LAorCXtVU0JfREVWSUNFKFVTUl9WSUQsCU1JTExFUl9BX1BJRF9QUkVGSVJNKSwJLmRyaXZlcl9pbmZvID0gRUFHTEVfSSB8IFBSRUZJUk19LAorCXtVU0JfREVWSUNFKFVTUl9WSUQsCU1JTExFUl9BX1BJRF9QU1RGSVJNKSwJLmRyaXZlcl9pbmZvID0gRUFHTEVfSSB8IFBTVEZJUk19LAorCXtVU0JfREVWSUNFKFVTUl9WSUQsCU1JTExFUl9CX1BJRF9QUkVGSVJNKSwJLmRyaXZlcl9pbmZvID0gRUFHTEVfSSB8IFBSRUZJUk19LAorCXtVU0JfREVWSUNFKFVTUl9WSUQsCU1JTExFUl9CX1BJRF9QU1RGSVJNKSwJLmRyaXZlcl9pbmZvID0gRUFHTEVfSSB8IFBTVEZJUk19LAorCXtVU0JfREVWSUNFKFVTUl9WSUQsCUhFSU5FS0VOX0FfUElEX1BSRUZJUk0pLC5kcml2ZXJfaW5mbyA9IEVBR0xFX0kgfCBQUkVGSVJNfSwKKwl7VVNCX0RFVklDRShVU1JfVklELAlIRUlORUtFTl9BX1BJRF9QU1RGSVJNKSwuZHJpdmVyX2luZm8gPSBFQUdMRV9JIHwgUFNURklSTX0sCisJe1VTQl9ERVZJQ0UoVVNSX1ZJRCwJSEVJTkVLRU5fQl9QSURfUFJFRklSTSksLmRyaXZlcl9pbmZvID0gRUFHTEVfSSB8IFBSRUZJUk19LAorCXtVU0JfREVWSUNFKFVTUl9WSUQsCUhFSU5FS0VOX0JfUElEX1BTVEZJUk0pLC5kcml2ZXJfaW5mbyA9IEVBR0xFX0kgfCBQU1RGSVJNfSwKKwl7fQorfTsKKworLyoKKyAqIFVTQiBkcml2ZXIgZGVzY3JpcHRvcgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdWVhX2RyaXZlciA9IHsKKwkubmFtZSA9ICJ1ZWFnbGUtYXRtIiwKKwkuaWRfdGFibGUgPSB1ZWFfaWRzLAorCS5wcm9iZSA9IHVlYV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHVlYV9kaXNjb25uZWN0LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVlYV9pZHMpOworCisvKioKKyAqIHVlYV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgbW9kdWxlLgorICogICAgICBSZWdpc3RlciB0byBVU0Igc3Vic3lzdGVtCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHVlYV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiW3VlYWdsZS1hdG1dIGRyaXZlciAiIEVBR0xFVVNCVkVSU0lPTiAiIGxvYWRlZFxuIik7CisKKwl1c2JfcmVnaXN0ZXIoJnVlYV9kcml2ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KHVlYV9pbml0KTsKKworLyoqCisgKiB1ZWFfZXhpdCAgLSAgRGVzdHJveSBtb2R1bGUKKyAqICAgIERlcmVnaXN0ZXIgd2l0aCBVU0Igc3Vic3lzdGVtCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZWFfZXhpdCh2b2lkKQoreworCS8qCisJICogVGhpcyBjYWxscyBhdXRvbWF0aWNhbGx5IHRoZSB1ZWFfZGlzY29ubmVjdCBtZXRob2QgaWYgbmVjZXNzYXJ5OgorCSAqLworCXVzYl9kZXJlZ2lzdGVyKCZ1ZWFfZHJpdmVyKTsKKworCXByaW50ayhLRVJOX0lORk8gIlt1ZWFnbGUtYXRtXSBkcml2ZXIgdW5sb2FkZWRcbiIpOworfQorCittb2R1bGVfZXhpdCh1ZWFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRhbWllbiBCZXJnYW1pbmkvTWF0dGhpZXUgQ2FzdGV0L1N0YW5pc2xhdyBXLiBHcnVzemthIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFESSA5MzAvRWFnbGUgVVNCIEFEU0wgTW9kZW0gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKaW5kZXggMmU2NTkzZS4uOWJhYTYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYwpAQCAtNjQ2LDE0ICs2NDYsMTQgQEAKIAlrZnJlZShpbnN0YW5jZSk7CiB9CiAKLXZvaWQgdXNiYXRtX2dldF9pbnN0YW5jZShzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKQorc3RhdGljIHZvaWQgdXNiYXRtX2dldF9pbnN0YW5jZShzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKQogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlrcmVmX2dldCgmaW5zdGFuY2UtPnJlZmNvdW50KTsKIH0KIAotdm9pZCB1c2JhdG1fcHV0X2luc3RhbmNlKHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpCitzdGF0aWMgdm9pZCB1c2JhdG1fcHV0X2luc3RhbmNlKHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpCiB7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKaW5kZXggN2ZlN2ZiNC4uNWM3NmUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCkBAIC0xNDAsNyArMTQwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0geHVzYmF0bV9kcml2ZXJfbmFtZSwKIAkucHJvYmUJCT0geHVzYmF0bV91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2JhdG1fdXNiX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5jIGIvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uYwppbmRleCA1MDg1ODI3Li4zYWQ5ZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmMKQEAgLTI3MzIsNyArMjczMiw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9hdWRpb19pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2F1ZGlvX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiYXVkaW8iLAogCS5wcm9iZSA9CXVzYl9hdWRpb19wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9hdWRpb19kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IDFiNDc1MTQuLjI0ODI3OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDE5OTkgSm9oYW5uZXMgRXJkZmVsdAk8am9oYW5uZXNAZXJkZmVsdC5jb20+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAc3VzZS5jej4KICAqIENvcHlyaWdodCAoYykgMjAwNCBPbGl2ZXIgTmV1a3VtCTxvbGl2ZXJAbmV1a3VtLm5hbWU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgS3ViaWNlawk8ZGF2ZUBhd2suY3o+CiAgKgogICogVVNCIEFic3RyYWN0IENvbnRyb2wgTW9kZWwgZHJpdmVyIGZvciBVU0IgbW9kZW1zIGFuZCBJU0ROIGFkYXB0ZXJzCiAgKgpAQCAtMjksNiArMzAsNyBAQAogICoJCWNvbmZpZyB3ZSB3YW50LCBzeXNhZG1pbiBjaGFuZ2VzIGJDb25maWd1cmF0aW9uVmFsdWUgaW4gc3lzZnMuCiAgKgl2MC4yMyAtIHVzZSBzb2Z0aXJxIGZvciByeCBwcm9jZXNzaW5nLCBhcyBuZWVkZWQgYnkgdHR5IGxheWVyCiAgKgl2MC4yNCAtIGNoYW5nZSBwcm9iZSBtZXRob2QgdG8gZXZhbHVhdGUgQ0RDIHVuaW9uIGRlc2NyaXB0b3IKKyAqCXYwLjI1IC0gZG93bnN0cmVhbSB0YXNrcyBwYXJhbGVsaXplZCB0byBtYXhpbWl6ZSB0aHJvdWdocHV0CiAgKi8KIAogLyoKQEAgLTYzLDE0ICs2NSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYl9jZGMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgImNkYy1hY20uaCIKIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMjMiCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFybWluIEZ1ZXJzdCwgUGF2ZWwgTWFjaGVrLCBKb2hhbm5lcyBFcmRmZWx0LCBWb2p0ZWNoIFBhdmxpayIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjI1IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJBcm1pbiBGdWVyc3QsIFBhdmVsIE1hY2hlaywgSm9oYW5uZXMgRXJkZmVsdCwgVm9qdGVjaCBQYXZsaWssIERhdmlkIEt1YmljZWsiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQWJzdHJhY3QgQ29udHJvbCBNb2RlbCBkcml2ZXIgZm9yIFVTQiBtb2RlbXMgYW5kIElTRE4gYWRhcHRlcnMiCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhY21fZHJpdmVyOwpAQCAtMjg0LDcgKzI4Nyw5IEBACiAvKiBkYXRhIGludGVyZmFjZSByZXR1cm5zIGluY29taW5nIGJ5dGVzLCBvciB3ZSBnb3QgdW50aHJvdHRsZWQgKi8KIHN0YXRpYyB2b2lkIGFjbV9yZWFkX2J1bGsoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgYWNtICphY20gPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGFjbV9yYiAqYnVmOworCXN0cnVjdCBhY21fcnUgKnJjdiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYWNtICphY20gPSByY3YtPmluc3RhbmNlOwogCWRiZygiRW50ZXJpbmcgYWNtX3JlYWRfYnVsayB3aXRoIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCiAJaWYgKCFBQ01fUkVBRFkoYWNtKSkKQEAgLTI5Myw0OSArMjk4LDEwOSBAQAogCWlmICh1cmItPnN0YXR1cykKIAkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICJidWxrIHJ4IHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCi0JLyogY2FsbGluZyB0dHlfZmxpcF9idWZmZXJfcHVzaCgpIGluX2lycSgpIGlzbid0IGFsbG93ZWQgKi8KLQl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPmJoKTsKKwlidWYgPSByY3YtPmJ1ZmZlcjsKKwlidWYtPnNpemUgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlzcGluX2xvY2soJmFjbS0+cmVhZF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyY3YtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfdXJicyk7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmYWNtLT5maWxsZWRfcmVhZF9idWZzKTsKKwlzcGluX3VubG9jaygmYWNtLT5yZWFkX2xvY2spOworCisJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjbV9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgX2FjbSkKIHsKIAlzdHJ1Y3QgYWNtICphY20gPSAodm9pZCAqKV9hY207Ci0Jc3RydWN0IHVyYiAqdXJiID0gYWNtLT5yZWFkdXJiOworCXN0cnVjdCBhY21fcmIgKmJ1ZjsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gYWNtLT50dHk7Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBhY21fcnUgKnJjdjsKKwkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGkgPSAwOwogCWRiZygiRW50ZXJpbmcgYWNtX3J4X3Rhc2tsZXQiKTsKIAotCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwICYmICFhY20tPnRocm90dGxlKSAgewotCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoICYmICFhY20tPnRocm90dGxlOyBpKyspIHsKLQkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLAotCQkJICogd2UgZHJvcCB0aGVtLiAqLwotCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7Ci0JCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCX0KLQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7Ci0JCX0KLQkJZGJnKCJIYW5kZWQgJWQgYnl0ZXMgdG8gdHR5IGxheWVyIiwgaSsxKTsKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwlpZiAoIUFDTV9SRUFEWShhY20pIHx8IGFjbS0+dGhyb3R0bGUpCisJCXJldHVybjsKKworbmV4dF9idWZmZXI6CisJc3Bpbl9sb2NrKCZhY20tPnJlYWRfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJmFjbS0+ZmlsbGVkX3JlYWRfYnVmcykpIHsKKwkJc3Bpbl91bmxvY2soJmFjbS0+cmVhZF9sb2NrKTsKKwkJZ290byB1cmJzOwogCX0KKwlidWYgPSBsaXN0X2VudHJ5KGFjbS0+ZmlsbGVkX3JlYWRfYnVmcy5uZXh0LAorCQkJIHN0cnVjdCBhY21fcmIsIGxpc3QpOworCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZhY20tPnJlYWRfbG9jayk7CisKKwlkYmcoImFjbV9yeF90YXNrbGV0OiBwcm9jZXNpbmcgYnVmIDB4JXAsIHNpemUgPSAlZFxuIiwgYnVmLCBidWYtPnNpemUpOworCisJZm9yIChpID0gMDsgaSA8IGJ1Zi0+c2l6ZSAmJiAhYWNtLT50aHJvdHRsZTsgaSsrKSB7CisJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLAorCQkgICB3ZSBkcm9wIHRoZW0uICovCisJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKyAJCX0KKwkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBidWYtPmJhc2VbaV0sIDApOworIAl9CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAogCXNwaW5fbG9jaygmYWNtLT50aHJvdHRsZV9sb2NrKTsKIAlpZiAoYWNtLT50aHJvdHRsZSkgewogCQlkYmcoIlRocm90dGVsaW5nIG5vdGljZWQiKTsKLQkJbWVtbW92ZShkYXRhLCBkYXRhICsgaSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gaSk7Ci0JCXVyYi0+YWN0dWFsX2xlbmd0aCAtPSBpOwotCQlhY20tPnJlc3VibWl0X3RvX3VudGhyb3R0bGUgPSAxOworCQltZW1tb3ZlKGJ1Zi0+YmFzZSwgYnVmLT5iYXNlICsgaSwgYnVmLT5zaXplIC0gaSk7CisJCWJ1Zi0+c2l6ZSAtPSBpOwogCQlzcGluX3VubG9jaygmYWNtLT50aHJvdHRsZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZhY20tPnJlYWRfbG9jayk7CisJCWxpc3RfYWRkKCZidWYtPmxpc3QsICZhY20tPmZpbGxlZF9yZWFkX2J1ZnMpOworCQlzcGluX3VubG9jaygmYWNtLT5yZWFkX2xvY2spOwogCQlyZXR1cm47CiAJfQogCXNwaW5fdW5sb2NrKCZhY20tPnRocm90dGxlX2xvY2spOwogCi0JdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQl1cmItPmRldiA9IGFjbS0+ZGV2OworCXNwaW5fbG9jaygmYWNtLT5yZWFkX2xvY2spOworCWxpc3RfYWRkKCZidWYtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfYnVmcyk7CisJc3Bpbl91bmxvY2soJmFjbS0+cmVhZF9sb2NrKTsKKwlnb3RvIG5leHRfYnVmZmVyOwogCi0JaSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKGkpCi0JCWRldl9kYmcoJmFjbS0+ZGF0YS0+ZGV2LCAiYnVsayByeCByZXN1Ym1pdCAlZFxuIiwgaSk7Cit1cmJzOgorCXdoaWxlICghbGlzdF9lbXB0eSgmYWNtLT5zcGFyZV9yZWFkX2J1ZnMpKSB7CisJCXNwaW5fbG9jaygmYWNtLT5yZWFkX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmYWNtLT5zcGFyZV9yZWFkX3VyYnMpKSB7CisJCQlzcGluX3VubG9jaygmYWNtLT5yZWFkX2xvY2spOworCQkJcmV0dXJuOworCQl9CisJCXJjdiA9IGxpc3RfZW50cnkoYWNtLT5zcGFyZV9yZWFkX3VyYnMubmV4dCwKKwkJCQkgc3RydWN0IGFjbV9ydSwgbGlzdCk7CisJCWxpc3RfZGVsKCZyY3YtPmxpc3QpOworCQlzcGluX3VubG9jaygmYWNtLT5yZWFkX2xvY2spOworCisJCWJ1ZiA9IGxpc3RfZW50cnkoYWNtLT5zcGFyZV9yZWFkX2J1ZnMubmV4dCwKKwkJCQkgc3RydWN0IGFjbV9yYiwgbGlzdCk7CisJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCisJCXJjdi0+YnVmZmVyID0gYnVmOworCisJCXVzYl9maWxsX2J1bGtfdXJiKHJjdi0+dXJiLCBhY20tPmRldiwKKwkJCQkgIGFjbS0+cnhfZW5kcG9pbnQsCisJCQkJICBidWYtPmJhc2UsCisJCQkJICBhY20tPnJlYWRzaXplLAorCQkJCSAgYWNtX3JlYWRfYnVsaywgcmN2KTsKKwkJcmN2LT51cmItPnRyYW5zZmVyX2RtYSA9IGJ1Zi0+ZG1hOworCQlyY3YtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkJZGJnKCJhY21fcnhfdGFza2xldDogc2VuZGluZyB1cmIgMHglcCwgcmN2IDB4JXAsIGJ1ZiAweCVwXG4iLCByY3YtPnVyYiwgcmN2LCBidWYpOworCisJCS8qIFRoaXMgc2hvdWxkbid0IGtpbGwgdGhlIGRyaXZlciBhcyB1bnN1Y2Nlc3NmdWwgVVJCcyBhcmUgcmV0dXJuZWQgdG8gdGhlCisJCSAgIGZyZWUtdXJicy1wb29sIGFuZCByZXN1Ym1pdGVkIEFTQVAgKi8KKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHJjdi0+dXJiLCBHRlBfQVRPTUlDKSA8IDApIHsKKwkJCWxpc3RfYWRkKCZidWYtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfYnVmcyk7CisJCQlzcGluX2xvY2soJmFjbS0+cmVhZF9sb2NrKTsKKwkJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfdXJicyk7CisJCQlzcGluX3VubG9jaygmYWNtLT5yZWFkX2xvY2spOworCQkJcmV0dXJuOworCQl9CisJfQogfQogCiAvKiBkYXRhIGludGVyZmFjZSB3cm90ZSB0aG9zZSBvdXRnb2luZyBieXRlcyAqLwpAQCAtMzY5LDYgKzQzNCw3IEBACiB7CiAJc3RydWN0IGFjbSAqYWNtOwogCWludCBydiA9IC1FSU5WQUw7CisJaW50IGk7CiAJZGJnKCJFbnRlcmluZyBhY21fdHR5X29wZW4uXG4iKTsKIAkKIAlkb3duKCZvcGVuX3NlbSk7CkBAIC0zODIsNyArNDQ4LDkgQEAKIAl0dHktPmRyaXZlcl9kYXRhID0gYWNtOwogCWFjbS0+dHR5ID0gdHR5OwogCi0KKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwKKwkgICBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgZGF0YSBjYW4gZ2V0IGxvc3QuICovCisJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKIAlpZiAoYWNtLT51c2VkKyspIHsKIAkJZ290byBkb25lOwpAQCAtMzk0LDE4ICs0NjIsMjAgQEAKIAkJZ290byBiYWlsX291dDsKIAl9CiAKLQlhY20tPnJlYWR1cmItPmRldiA9IGFjbS0+ZGV2OwotCWlmICh1c2Jfc3VibWl0X3VyYihhY20tPnJlYWR1cmIsIEdGUF9LRVJORUwpKSB7Ci0JCWRiZygidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQiKTsKLQkJZ290byBiYWlsX291dF9hbmRfdW5saW5rOwotCX0KLQogCWlmICgwID4gYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gQUNNX0NUUkxfRFRSIHwgQUNNX0NUUkxfUlRTKSkKIAkJZ290byBmdWxsX2JhaWxvdXQ7CiAKLQkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwgCi0JICAgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIGRhdGEgY2FuIGdldCBsb3N0LiAqLwotCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCUlOSVRfTElTVF9IRUFEKCZhY20tPnNwYXJlX3JlYWRfdXJicyk7CisJSU5JVF9MSVNUX0hFQUQoJmFjbS0+c3BhcmVfcmVhZF9idWZzKTsKKwlJTklUX0xJU1RfSEVBRCgmYWNtLT5maWxsZWRfcmVhZF9idWZzKTsKKwlmb3IgKGkgPSAwOyBpIDwgQUNNX05SVTsgaSsrKSB7CisJCWxpc3RfYWRkKCYoYWNtLT5ydVtpXS5saXN0KSwgJmFjbS0+c3BhcmVfcmVhZF91cmJzKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFDTV9OUkI7IGkrKykgeworCQlsaXN0X2FkZCgmKGFjbS0+cmJbaV0ubGlzdCksICZhY20tPnNwYXJlX3JlYWRfYnVmcyk7CisJfQorCisJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiAKIGRvbmU6CiBlcnJfb3V0OgpAQCAtNDEzLDggKzQ4Myw2IEBACiAJcmV0dXJuIHJ2OwogCiBmdWxsX2JhaWxvdXQ6Ci0JdXNiX2tpbGxfdXJiKGFjbS0+cmVhZHVyYik7Ci1iYWlsX291dF9hbmRfdW5saW5rOgogCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOwogYmFpbF9vdXQ6CiAJYWNtLT51c2VkLS07CkBAIC00MjQsMTggKzQ5MiwyMiBAQAogCiBzdGF0aWMgdm9pZCBhY21fdHR5X3VucmVnaXN0ZXIoc3RydWN0IGFjbSAqYWNtKQogeworCWludCBpOworCiAJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGFjbV90dHlfZHJpdmVyLCBhY20tPm1pbm9yKTsKIAl1c2JfcHV0X2ludGYoYWNtLT5jb250cm9sKTsKIAlhY21fdGFibGVbYWNtLT5taW5vcl0gPSBOVUxMOwogCXVzYl9mcmVlX3VyYihhY20tPmN0cmx1cmIpOwotCXVzYl9mcmVlX3VyYihhY20tPnJlYWR1cmIpOwogCXVzYl9mcmVlX3VyYihhY20tPndyaXRldXJiKTsKKwlmb3IgKGkgPSAwOyBpIDwgQUNNX05SVTsgaSsrKQorCQl1c2JfZnJlZV91cmIoYWNtLT5ydVtpXS51cmIpOwogCWtmcmVlKGFjbSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjbV90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgaTsKIAogCWlmICghYWNtIHx8ICFhY20tPnVzZWQpCiAJCXJldHVybjsKQEAgLTQ0Niw3ICs1MTgsOCBAQAogCQkJYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gMCk7CiAJCQl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKIAkJCXVzYl9raWxsX3VyYihhY20tPndyaXRldXJiKTsKLQkJCXVzYl9raWxsX3VyYihhY20tPnJlYWR1cmIpOworCQkJZm9yIChpID0gMDsgaSA8IEFDTV9OUlU7IGkrKykKKwkJCQl1c2Jfa2lsbF91cmIoYWNtLT5ydVtpXS51cmIpOwogCQl9IGVsc2UKIAkJCWFjbV90dHlfdW5yZWdpc3RlcihhY20pOwogCX0KQEAgLTUyOCwxMCArNjAxLDcgQEAKIAlzcGluX2xvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7CiAJYWNtLT50aHJvdHRsZSA9IDA7CiAJc3Bpbl91bmxvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7Ci0JaWYgKGFjbS0+cmVzdWJtaXRfdG9fdW50aHJvdHRsZSkgewotCQlhY20tPnJlc3VibWl0X3RvX3VudGhyb3R0bGUgPSAwOwotCQlhY21fcmVhZF9idWxrKGFjbS0+cmVhZHVyYiwgTlVMTCk7Ci0JfQorCXRhc2tsZXRfc2NoZWR1bGUoJmFjbS0+dXJiX3Rhc2spOwogfQogCiBzdGF0aWMgdm9pZCBhY21fdHR5X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpCkBAIC01ODgsNyArNjU4LDcgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCi1zdGF0aWMgX191MzIgYWNtX3R0eV9zcGVlZFtdID0geworc3RhdGljIGNvbnN0IF9fdTMyIGFjbV90dHlfc3BlZWRbXSA9IHsKIAkwLCA1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsCiAJMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLAogCTU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA1MDAwMDAsIDU3NjAwMCwKQEAgLTU5Niw3ICs2NjYsNyBAQAogCTI1MDAwMDAsIDMwMDAwMDAsIDM1MDAwMDAsIDQwMDAwMDAKIH07CiAKLXN0YXRpYyBfX3U4IGFjbV90dHlfc2l6ZVtdID0geworc3RhdGljIGNvbnN0IF9fdTggYWNtX3R0eV9zaXplW10gPSB7CiAJNSwgNiwgNywgOAogfTsKIApAQCAtNjk0LDYgKzc2NCw3IEBACiAJaW50IGNhbGxfaW50ZXJmYWNlX251bSA9IC0xOwogCWludCBkYXRhX2ludGVyZmFjZV9udW07CiAJdW5zaWduZWQgbG9uZyBxdWlya3M7CisJaW50IGk7CiAKIAkvKiBoYW5kbGUgcXVpcmtzIGRlYWRseSB0byBub3JtYWwgcHJvYmluZyovCiAJcXVpcmtzID0gKHVuc2lnbmVkIGxvbmcpaWQtPmRyaXZlcl9pbmZvOwpAQCAtODMzLDcgKzkwNCw3IEBACiAJfQogCiAJY3RybHNpemUgPSBsZTE2X3RvX2NwdShlcGN0cmwtPndNYXhQYWNrZXRTaXplKTsKLQlyZWFkc2l6ZSA9IGxlMTZfdG9fY3B1KGVwcmVhZC0+d01heFBhY2tldFNpemUpOworCXJlYWRzaXplID0gbGUxNl90b19jcHUoZXByZWFkLT53TWF4UGFja2V0U2l6ZSkqMjsKIAlhY20tPndyaXRlc2l6ZSA9IGxlMTZfdG9fY3B1KGVwd3JpdGUtPndNYXhQYWNrZXRTaXplKTsKIAlhY20tPmNvbnRyb2wgPSBjb250cm9sX2ludGVyZmFjZTsKIAlhY20tPmRhdGEgPSBkYXRhX2ludGVyZmFjZTsKQEAgLTg0MiwxMiArOTEzLDE0IEBACiAJYWNtLT5jdHJsX2NhcHMgPSBhY19tYW5hZ2VtZW50X2Z1bmN0aW9uOwogCWFjbS0+Y3RybHNpemUgPSBjdHJsc2l6ZTsKIAlhY20tPnJlYWRzaXplID0gcmVhZHNpemU7Ci0JYWNtLT5iaC5mdW5jID0gYWNtX3J4X3Rhc2tsZXQ7Ci0JYWNtLT5iaC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjbTsKKwlhY20tPnVyYl90YXNrLmZ1bmMgPSBhY21fcnhfdGFza2xldDsKKwlhY20tPnVyYl90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNtOwogCUlOSVRfV09SSygmYWNtLT53b3JrLCBhY21fc29mdGludCwgYWNtKTsKIAlzcGluX2xvY2tfaW5pdCgmYWNtLT50aHJvdHRsZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWNtLT53cml0ZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWNtLT5yZWFkX2xvY2spOwogCWFjbS0+d3JpdGVfcmVhZHkgPSAxOworCWFjbS0+cnhfZW5kcG9pbnQgPSB1c2JfcmN2YnVsa3BpcGUodXNiX2RldiwgZXByZWFkLT5iRW5kcG9pbnRBZGRyZXNzKTsKIAogCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2ModXNiX2RldiwgY3RybHNpemUsIEdGUF9LRVJORUwsICZhY20tPmN0cmxfZG1hKTsKIAlpZiAoIWJ1ZikgewpAQCAtODU2LDEzICs5MjksNiBAQAogCX0KIAlhY20tPmN0cmxfYnVmZmVyID0gYnVmOwogCi0JYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1c2JfZGV2LCByZWFkc2l6ZSwgR0ZQX0tFUk5FTCwgJmFjbS0+cmVhZF9kbWEpOwotCWlmICghYnVmKSB7Ci0JCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKHJlYWQgYnVmZmVyIGFsbG9jKVxuIik7Ci0JCWdvdG8gYWxsb2NfZmFpbDM7Ci0JfQotCWFjbS0+cmVhZF9idWZmZXIgPSBidWY7Ci0KIAlpZiAoYWNtX3dyaXRlX2J1ZmZlcnNfYWxsb2MoYWNtKSA8IDApIHsKIAkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAod3JpdGUgYnVmZmVyIGFsbG9jKVxuIik7CiAJCWdvdG8gYWxsb2NfZmFpbDQ7CkBAIC04NzMsMTAgKzkzOSwyNSBAQAogCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsdXJiIGttYWxsb2MpXG4iKTsKIAkJZ290byBhbGxvY19mYWlsNTsKIAl9Ci0JYWNtLT5yZWFkdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFjbS0+cmVhZHVyYikgewotCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChyZWFkdXJiIGttYWxsb2MpXG4iKTsKLQkJZ290byBhbGxvY19mYWlsNjsKKwlmb3IgKGkgPSAwOyBpIDwgQUNNX05SVTsgaSsrKSB7CisJCXN0cnVjdCBhY21fcnUgKnJjdiA9ICYoYWNtLT5ydVtpXSk7CisKKwkJaWYgKCEocmN2LT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkgeworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAocmVhZCB1cmJzIHVzYl9hbGxvY191cmIpXG4iKTsKKwkJCWdvdG8gYWxsb2NfZmFpbDc7CisJCX0KKworCQlyY3YtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXJjdi0+aW5zdGFuY2UgPSBhY207CisJfQorCWZvciAoaSA9IDA7IGkgPCBBQ01fTlJCOyBpKyspIHsKKwkJc3RydWN0IGFjbV9yYiAqYnVmID0gJihhY20tPnJiW2ldKTsKKworCQkvLyBVc2luZyB1c2JfYnVmZmVyX2FsbG9jIGluc3RlYWQgb2Yga21hbGxvYyBhcyBPbGl2ZXIgc3VnZ2VzdGVkCisJCWlmICghKGJ1Zi0+YmFzZSA9IHVzYl9idWZmZXJfYWxsb2MoYWNtLT5kZXYsIHJlYWRzaXplLCBHRlBfS0VSTkVMLCAmYnVmLT5kbWEpKSkgeworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAocmVhZCBidWZzIHVzYl9idWZmZXJfYWxsb2MpXG4iKTsKKwkJCWdvdG8gYWxsb2NfZmFpbDc7CisJCX0KIAl9CiAJYWNtLT53cml0ZXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhY20tPndyaXRldXJiKSB7CkBAIC04ODksMTUgKzk3MCw5IEBACiAJYWNtLT5jdHJsdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAlhY20tPmN0cmx1cmItPnRyYW5zZmVyX2RtYSA9IGFjbS0+Y3RybF9kbWE7CiAKLQl1c2JfZmlsbF9idWxrX3VyYihhY20tPnJlYWR1cmIsIHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBlcHJlYWQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJICBhY20tPnJlYWRfYnVmZmVyLCByZWFkc2l6ZSwgYWNtX3JlYWRfYnVsaywgYWNtKTsKLQlhY20tPnJlYWR1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19GU0JSIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0JYWNtLT5yZWFkdXJiLT50cmFuc2Zlcl9kbWEgPSBhY20tPnJlYWRfZG1hOwotCiAJdXNiX2ZpbGxfYnVsa191cmIoYWNtLT53cml0ZXVyYiwgdXNiX2RldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsIGVwd3JpdGUtPmJFbmRwb2ludEFkZHJlc3MpLAogCQkJICBOVUxMLCBhY20tPndyaXRlc2l6ZSwgYWNtX3dyaXRlX2J1bGssIGFjbSk7CiAJYWNtLT53cml0ZXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX0ZTQlIgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQkvKiBhY20tPndyaXRldXJiLT50cmFuc2Zlcl9kbWEgPSAwOyAqLwogCiAJZGV2X2luZm8oJmludGYtPmRldiwgInR0eUFDTSVkOiBVU0IgQUNNIGRldmljZVxuIiwgbWlub3IpOwogCkBAIC05MTcsMTQgKzk5MiwxNCBAQAogCXJldHVybiAwOwogCiBhbGxvY19mYWlsNzoKLQl1c2JfZnJlZV91cmIoYWNtLT5yZWFkdXJiKTsKLWFsbG9jX2ZhaWw2OgorCWZvciAoaSA9IDA7IGkgPCBBQ01fTlJCOyBpKyspCisJCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPnJlYWRzaXplLCBhY20tPnJiW2ldLmJhc2UsIGFjbS0+cmJbaV0uZG1hKTsKKwlmb3IgKGkgPSAwOyBpIDwgQUNNX05SVTsgaSsrKQorCQl1c2JfZnJlZV91cmIoYWNtLT5ydVtpXS51cmIpOwogCXVzYl9mcmVlX3VyYihhY20tPmN0cmx1cmIpOwogYWxsb2NfZmFpbDU6CiAJYWNtX3dyaXRlX2J1ZmZlcnNfZnJlZShhY20pOwogYWxsb2NfZmFpbDQ6Ci0JdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIHJlYWRzaXplLCBhY20tPnJlYWRfYnVmZmVyLCBhY20tPnJlYWRfZG1hKTsKLWFsbG9jX2ZhaWwzOgogCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBjdHJsc2l6ZSwgYWNtLT5jdHJsX2J1ZmZlciwgYWNtLT5jdHJsX2RtYSk7CiBhbGxvY19mYWlsMjoKIAlrZnJlZShhY20pOwpAQCAtOTM2LDYgKzEwMTEsNyBAQAogewogCXN0cnVjdCBhY20gKmFjbSA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgaTsKIAogCWlmICghYWNtIHx8ICFhY20tPmRldikgewogCQlkYmcoImRpc2Nvbm5lY3Qgb24gbm9uZXhpc3RpbmcgaW50ZXJmYWNlIik7CkBAIC05NDYsMTUgKzEwMjIsMjQgQEAKIAlhY20tPmRldiA9IE5VTEw7CiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CiAKKwl0YXNrbGV0X2Rpc2FibGUoJmFjbS0+dXJiX3Rhc2spOworCiAJdXNiX2tpbGxfdXJiKGFjbS0+Y3RybHVyYik7Ci0JdXNiX2tpbGxfdXJiKGFjbS0+cmVhZHVyYik7CiAJdXNiX2tpbGxfdXJiKGFjbS0+d3JpdGV1cmIpOworCWZvciAoaSA9IDA7IGkgPCBBQ01fTlJVOyBpKyspCisJCXVzYl9raWxsX3VyYihhY20tPnJ1W2ldLnVyYik7CisKKwlJTklUX0xJU1RfSEVBRCgmYWNtLT5maWxsZWRfcmVhZF9idWZzKTsKKwlJTklUX0xJU1RfSEVBRCgmYWNtLT5zcGFyZV9yZWFkX2J1ZnMpOworCisJdGFza2xldF9lbmFibGUoJmFjbS0+dXJiX3Rhc2spOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsgLyogd2FpdCBmb3IgYWNtX3NvZnRpbnQgKi8KIAogCWFjbV93cml0ZV9idWZmZXJzX2ZyZWUoYWNtKTsKLQl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT5yZWFkc2l6ZSwgYWNtLT5yZWFkX2J1ZmZlciwgYWNtLT5yZWFkX2RtYSk7CiAJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIGFjbS0+Y3RybHNpemUsIGFjbS0+Y3RybF9idWZmZXIsIGFjbS0+Y3RybF9kbWEpOworCWZvciAoaSA9IDA7IGkgPCBBQ01fTlJCOyBpKyspCisJCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPnJlYWRzaXplLCBhY20tPnJiW2ldLmJhc2UsIGFjbS0+cmJbaV0uZG1hKTsKIAogCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmFjbV9kcml2ZXIsIGFjbS0+ZGF0YSk7CiAKQEAgLTEwMDMsNyArMTA4OCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGFjbV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWNtX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiY2RjX2FjbSIsCiAJLnByb2JlID0JYWNtX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JYWNtX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmggYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKaW5kZXggOTYzYTVkZi4uZmQyYWFjY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKQEAgLTU5LDYgKzU5LDkgQEAKICAqIHdoZW4gcHJvY2Vzc2luZyBvbmxjciwgc28gd2Ugb25seSBuZWVkIDIgYnVmZmVycy4KICAqLwogI2RlZmluZSBBQ01fTldCICAyCisjZGVmaW5lIEFDTV9OUlUgIDE2CisjZGVmaW5lIEFDTV9OUkIgIDE2CisKIHN0cnVjdCBhY21fd2IgewogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAlkbWFfYWRkcl90IGRtYWg7CkBAIC02NiwyMiArNjksNDMgQEAKIAlpbnQgdXNlOwogfTsKIAorc3RydWN0IGFjbV9yYiB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludAkJCXNpemU7CisJdW5zaWduZWQgY2hhcgkJKmJhc2U7CisJZG1hX2FkZHJfdAkJZG1hOworfTsKKworc3RydWN0IGFjbV9ydSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBhY21fcmIJCSpidWZmZXI7CisJc3RydWN0IHVyYgkJKnVyYjsKKwlzdHJ1Y3QgYWNtCQkqaW5zdGFuY2U7Cit9OworCiBzdHJ1Y3QgYWNtIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwkJCQkvKiB0aGUgY29ycmVzcG9uZGluZyB1c2IgZGV2aWNlICovCiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmNvbnRyb2w7CQkJLyogY29udHJvbCBpbnRlcmZhY2UgKi8KIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqZGF0YTsJCQkvKiBkYXRhIGludGVyZmFjZSAqLwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CQkJCS8qIHRoZSBjb3JyZXNwb25kaW5nIHR0eSAqLwotCXN0cnVjdCB1cmIgKmN0cmx1cmIsICpyZWFkdXJiLCAqd3JpdGV1cmI7CS8qIHVyYnMgKi8KLQl1OCAqY3RybF9idWZmZXIsICpyZWFkX2J1ZmZlcjsJCQkvKiBidWZmZXJzIG9mIHVyYnMgKi8KLQlkbWFfYWRkcl90IGN0cmxfZG1hLCByZWFkX2RtYTsJCQkvKiBkbWEgaGFuZGxlcyBvZiBidWZmZXJzICovCisJc3RydWN0IHVyYiAqY3RybHVyYiwgKndyaXRldXJiOwkJCS8qIHVyYnMgKi8KKwl1OCAqY3RybF9idWZmZXI7CQkJCS8qIGJ1ZmZlcnMgb2YgdXJicyAqLworCWRtYV9hZGRyX3QgY3RybF9kbWE7CQkJCS8qIGRtYSBoYW5kbGVzIG9mIGJ1ZmZlcnMgKi8KIAlzdHJ1Y3QgYWNtX3diIHdiW0FDTV9OV0JdOworCXN0cnVjdCBhY21fcnUgcnVbQUNNX05SVV07CisJc3RydWN0IGFjbV9yYiByYltBQ01fTlJCXTsKKwlpbnQgcnhfZW5kcG9pbnQ7CisJc3BpbmxvY2tfdCByZWFkX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9yZWFkX3VyYnM7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9yZWFkX2J1ZnM7CisJc3RydWN0IGxpc3RfaGVhZCBmaWxsZWRfcmVhZF9idWZzOwogCWludCB3cml0ZV9jdXJyZW50OwkJCQkvKiBjdXJyZW50IHdyaXRlIGJ1ZmZlciAqLwogCWludCB3cml0ZV91c2VkOwkJCQkJLyogbnVtYmVyIG9mIG5vbi1lbXB0eSB3cml0ZSBidWZmZXJzICovCiAJaW50IHdyaXRlX3JlYWR5OwkJCQkvKiB3cml0ZSB1cmIgaXMgbm90IHJ1bm5pbmcgKi8KIAlzcGlubG9ja190IHdyaXRlX2xvY2s7CiAJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgbGluZTsJCS8qIGJpdHMsIHN0b3AsIHBhcml0eSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJCS8qIHdvcmsgcXVldWUgZW50cnkgZm9yIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAgKi8KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgYmg7CQkJLyogcnggcHJvY2Vzc2luZyAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB1cmJfdGFzazsgICAgICAgICAgICAgICAgIC8qIHJ4IHByb2Nlc3NpbmcgKi8KIAlzcGlubG9ja190IHRocm90dGxlX2xvY2s7CQkJLyogc3luY2hyb25pemUgdGhyb3R0ZWxpbmcgYW5kIHJlYWQgY2FsbGJhY2sgKi8KIAl1bnNpZ25lZCBpbnQgY3RybGluOwkJCQkvKiBpbnB1dCBjb250cm9sIGxpbmVzIChEQ0QsIERTUiwgUkksIGJyZWFrLCBvdmVycnVucykgKi8KIAl1bnNpZ25lZCBpbnQgY3RybG91dDsJCQkJLyogb3V0cHV0IGNvbnRyb2wgbGluZXMgKERUUiwgUlRTKSAqLwpAQCAtOTEsNyArMTE1LDYgQEAKIAl1bnNpZ25lZCBpbnQgbWlub3I7CQkJCS8qIGFjbSBtaW5vciBudW1iZXIgKi8KIAl1bnNpZ25lZCBjaGFyIHRocm90dGxlOwkJCQkvKiB0aHJvdHRsZWQgYnkgdHR5IGxheWVyICovCiAJdW5zaWduZWQgY2hhciBjbG9jYWw7CQkJCS8qIHRlcm1pb3MgQ0xPQ0FMICovCi0JdW5zaWduZWQgY2hhciByZXN1Ym1pdF90b191bnRocm90dGxlOwkJLyogdGhyb3R0ZWxpbmcgaGFzIGRpc2FibGVkIHRoZSByZWFkIHVyYiAqLwogCXVuc2lnbmVkIGludCBjdHJsX2NhcHM7CQkJCS8qIGNvbnRyb2wgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGNsYXNzIHNwZWNpZmljIGhlYWRlciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmMKaW5kZXggNWY4YWYzNS4uZjEzZjAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2ItbWlkaS5jCkBAIC0yMDI3LDcgKzIwMjcsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9taWRpX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkibWlkaSIsCiAJLnByb2JlID0JdXNiX21pZGlfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2JfbWlkaV9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKaW5kZXggMzU3ZTc1My4uZGJhNGNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMTk5OSBNaWNoYWVsIEdlZQk8bWljaGFlbEBsaW51eHNwZWNpZmljLmNvbT4KICAqIENvcHlyaWdodCAoYykgMTk5OSBQYXZlbCBNYWNoZWsJPHBhdmVsQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDAgUmFuZHkgRHVubGFwCTxyZGR1bmxhcEBvc2RsLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMCBSYW5keSBEdW5sYXAJPHJkdW5sYXBAeGVub3RpbWUubmV0PgogICogQ29weXJpZ2h0IChjKSAyMDAwIFZvanRlY2ggUGF2bGlrCTx2b2p0ZWNoQHN1c2UuY3o+CiAgIyBDb3B5cmlnaHQgKGMpIDIwMDEgUGV0ZSBaYWl0Y2V2CTx6YWl0Y2V2QHJlZGhhdC5jb20+CiAgIyBDb3B5cmlnaHQgKGMpIDIwMDEgRGF2aWQgUGFzY2hhbAk8cGFzY2hhbEByY3Npcy5jb20+CkBAIC0xOTksNyArMTk5LDcgQEAKICNkZWZpbmUgVVNCTFBfUVVJUktfQklESVIJMHgxCS8qIHJlcG9ydHMgYmlkaXIgYnV0IHJlcXVpcmVzIHVuaWRpcmVjdGlvbmFsIG1vZGUgKG5vIElOcy9yZWFkcykgKi8KICNkZWZpbmUgVVNCTFBfUVVJUktfVVNCX0lOSVQJMHgyCS8qIG5lZWRzIHZlbmRvciBVU0IgaW5pdCBzdHJpbmcgKi8KIAotc3RhdGljIHN0cnVjdCBxdWlya19wcmludGVyX3N0cnVjdCBxdWlya19wcmludGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBxdWlya19wcmludGVyX3N0cnVjdCBxdWlya19wcmludGVyc1tdID0gewogCXsgMHgwM2YwLCAweDAwMDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODk1QyAqLwogCXsgMHgwM2YwLCAweDAxMDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODgwQyAqLwogCXsgMHgwM2YwLCAweDAyMDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODE1QyAqLwpAQCAtMzAxLDcgKzMwMSw3IEBACiAgKiBHZXQgYW5kIHByaW50IHByaW50ZXIgZXJyb3JzLgogICovCiAKLXN0YXRpYyBjaGFyICp1c2JscF9tZXNzYWdlc1tdID0geyAib2siLCAib3V0IG9mIHBhcGVyIiwgIm9mZi1saW5lIiwgIm9uIGZpcmUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqdXNibHBfbWVzc2FnZXNbXSA9IHsgIm9rIiwgIm91dCBvZiBwYXBlciIsICJvZmYtbGluZSIsICJvbiBmaXJlIiB9OwogCiBzdGF0aWMgaW50IHVzYmxwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgdXNibHAgKnVzYmxwLCBpbnQgZXJyKQogewpAQCAtNDM4LDcgKzQzOCw3IEBACiAgCQkJICAgICAgIHwgKCF1c2JscC0+d2NvbXBsZXRlID8gMCA6IFBPTExPVVQgfCBQT0xMV1JOT1JNKTsKIH0KIAotc3RhdGljIGludCB1c2JscF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyB1c2JscF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHVzYmxwICp1c2JscCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgbGVuZ3RoLCBlcnIsIGk7CkBAIC04MzgsNyArODM4LDggQEAKIAkucmVhZCA9CQl1c2JscF9yZWFkLAogCS53cml0ZSA9CXVzYmxwX3dyaXRlLAogCS5wb2xsID0JCXVzYmxwX3BvbGwsCi0JLmlvY3RsID0JdXNibHBfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0JdXNibHBfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9CQl1c2JscF9pb2N0bCwKIAkub3BlbiA9CQl1c2JscF9vcGVuLAogCS5yZWxlYXNlID0JdXNibHBfcmVsZWFzZSwKIH07CkBAIC04NDksNiArODUwLDIwIEBACiAJLm1pbm9yX2Jhc2UgPQlVU0JMUF9NSU5PUl9CQVNFLAogfTsKIAorc3RhdGljIHNzaXplX3QgdXNibHBfc2hvd19pZWVlMTI4NF9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJaWYgKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nWzBdID09IDAgJiYKKwkgICAgdXNibHAtPmRldmljZV9pZF9zdHJpbmdbMV0gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlcyIsIHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nKzIpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaWVlZTEyODRfaWQsIFNfSVJVR08sIHVzYmxwX3Nob3dfaWVlZTEyODRfaWQsIE5VTEwpOworCiBzdGF0aWMgaW50IHVzYmxwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewpAQCAtOTMzLDIwICs5NDgsMTIgQEAKIAogCS8qIFJldHJpZXZlIGFuZCBzdG9yZSB0aGUgZGV2aWNlIElEIHN0cmluZy4gKi8KIAl1c2JscF9jYWNoZV9kZXZpY2VfaWRfc3RyaW5nKHVzYmxwKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2llZWUxMjg0X2lkKTsKIAogI2lmZGVmIERFQlVHCiAJdXNibHBfY2hlY2tfc3RhdHVzKHVzYmxwLCAwKTsKICNlbmRpZgogCi0JaW5mbygidXNibHAlZDogVVNCICVzZGlyZWN0aW9uYWwgcHJpbnRlciBkZXYgJWQgIgotCQkiaWYgJWQgYWx0ICVkIHByb3RvICVkIHZpZCAweCU0LjRYIHBpZCAweCU0LjRYIiwKLQkJdXNibHAtPm1pbm9yLCB1c2JscC0+YmlkaXIgPyAiQmkiIDogIlVuaSIsIGRldi0+ZGV2bnVtLAotCQl1c2JscC0+aWZudW0sCi0JCXVzYmxwLT5wcm90b2NvbFt1c2JscC0+Y3VycmVudF9wcm90b2NvbF0uYWx0X3NldHRpbmcsCi0JCXVzYmxwLT5jdXJyZW50X3Byb3RvY29sLAotCQlsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKLQogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHVzYmxwKTsKIAogCXVzYmxwLT5wcmVzZW50ID0gMTsKQEAgLTk1NywxMSArOTY0LDIwIEBACiAJCWdvdG8gYWJvcnRfaW50ZmRhdGE7CiAJfQogCXVzYmxwLT5taW5vciA9IGludGYtPm1pbm9yOworCWluZm8oInVzYmxwJWQ6IFVTQiAlc2RpcmVjdGlvbmFsIHByaW50ZXIgZGV2ICVkICIKKwkJImlmICVkIGFsdCAlZCBwcm90byAlZCB2aWQgMHglNC40WCBwaWQgMHglNC40WCIsCisJCXVzYmxwLT5taW5vciwgdXNibHAtPmJpZGlyID8gIkJpIiA6ICJVbmkiLCBkZXYtPmRldm51bSwKKwkJdXNibHAtPmlmbnVtLAorCQl1c2JscC0+cHJvdG9jb2xbdXNibHAtPmN1cnJlbnRfcHJvdG9jb2xdLmFsdF9zZXR0aW5nLAorCQl1c2JscC0+Y3VycmVudF9wcm90b2NvbCwKKwkJbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCWxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAKIAlyZXR1cm4gMDsKIAogYWJvcnRfaW50ZmRhdGE6CiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pZWVlMTI4NF9pZCk7CiBhYm9ydDoKIAlpZiAodXNibHApIHsKIAkJaWYgKHVzYmxwLT53cml0ZWJ1ZikKQEAgLTExNTYsNiArMTE3Miw4IEBACiAJCUJVRyAoKTsKIAl9CiAKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2llZWUxMjg0X2lkKTsKKwogCWRvd24gKCZ1c2JscF9zZW0pOwogCWRvd24gKCZ1c2JscC0+c2VtKTsKIAl1c2JscC0+cHJlc2VudCA9IDA7CkBAIC0xMTg2LDcgKzEyMDQsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JscF9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNibHBfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJ1c2JscCIsCiAJLnByb2JlID0JdXNibHBfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2JscF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKaW5kZXggODZkNWMzOC4uMjgzMjlkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgVVNCIENvcmUgZmlsZXMgYW5kIGZpbGVzeXN0ZW0KICMKIAotdXNiY29yZS1vYmpzCTo9IHVzYi5vIGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBcCit1c2Jjb3JlLW9ianMJOj0gdXNiLm8gaHViLm8gaGNkLm8gdXJiLm8gbWVzc2FnZS5vIGRyaXZlci5vIFwKIAkJCWNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGRldmlvLm8gbm90aWZ5Lm8KIAogaWZlcSAoJChDT05GSUdfUENJKSx5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9idWZmZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKaW5kZXggNDE5Yzk5NC4uYWQ3NDJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9idWZmZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2J1ZmZlci5jCkBAIC01NSw2ICs1NSw5IEBACiAJY2hhcgkJbmFtZSBbMTZdOwogCWludCAJCWksIHNpemU7CiAKKwlpZiAoIWhjZC0+c2VsZi5jb250cm9sbGVyLT5kbWFfbWFzaykKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgSENEX0JVRkZFUl9QT09MUzsgaSsrKSB7IAogCQlpZiAoIShzaXplID0gcG9vbF9tYXggW2ldKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCA4M2U4MTVkLi4yNjg0ZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtNjcsNDUgKzY3LDQ1IEBACiAvKiBEZWZpbmUgQUxMT1dfU0VSSUFMX05VTUJFUiBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHNlcmlhbCBudW1iZXIgb2YgZGV2aWNlcyAqLwogI2RlZmluZSBBTExPV19TRVJJQUxfTlVNQkVSCiAKLXN0YXRpYyBjaGFyICpmb3JtYXRfdG9wbyA9CitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3RvcG8gPQogLyogVDogIEJ1cz1kZCBMZXY9ZGQgUHJudD1kZCBQb3J0PWRkIENudD1kZCBEZXYjPWRkZCBTcGQ9ZGRkIE14Q2g9ZGQgKi8KICJcblQ6ICBCdXM9JTIuMmQgTGV2PSUyLjJkIFBybnQ9JTIuMmQgUG9ydD0lMi4yZCBDbnQ9JTIuMmQgRGV2Iz0lM2QgU3BkPSUzcyBNeENoPSUyZFxuIjsKIAotc3RhdGljIGNoYXIgKmZvcm1hdF9zdHJpbmdfbWFudWZhY3R1cmVyID0KK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyaW5nX21hbnVmYWN0dXJlciA9CiAvKiBTOiAgTWFudWZhY3R1cmVyPXh4eHggKi8KICAgIlM6ICBNYW51ZmFjdHVyZXI9JS4xMDBzXG4iOwogCi1zdGF0aWMgY2hhciAqZm9ybWF0X3N0cmluZ19wcm9kdWN0ID0KK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyaW5nX3Byb2R1Y3QgPQogLyogUzogIFByb2R1Y3Q9eHh4eCAqLwogICAiUzogIFByb2R1Y3Q9JS4xMDBzXG4iOwogCiAjaWZkZWYgQUxMT1dfU0VSSUFMX05VTUJFUgotc3RhdGljIGNoYXIgKmZvcm1hdF9zdHJpbmdfc2VyaWFsbnVtYmVyID0KK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyaW5nX3NlcmlhbG51bWJlciA9CiAvKiBTOiAgU2VyaWFsTnVtYmVyPXh4eHggKi8KICAgIlM6ICBTZXJpYWxOdW1iZXI9JS4xMDBzXG4iOwogI2VuZGlmCiAKLXN0YXRpYyBjaGFyICpmb3JtYXRfYmFuZHdpZHRoID0KK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfYmFuZHdpZHRoID0KIC8qIEI6ICBBbGxvYz1kZGQvZGRkIHVzICh4eCUpLCAjSW50PWRkZCwgI0lzbz1kZGQgKi8KICAgIkI6ICBBbGxvYz0lM2QvJTNkIHVzICglMmQlJSksICNJbnQ9JTNkLCAjSXNvPSUzZFxuIjsKICAgCi1zdGF0aWMgY2hhciAqZm9ybWF0X2RldmljZTEgPQorc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9kZXZpY2UxID0KIC8qIEQ6ICBWZXI9eHgueHggQ2xzPXh4KHNzc3NzKSBTdWI9eHggUHJvdD14eCBNeFBTPWRkICNDZmdzPWRkICovCiAgICJEOiAgVmVyPSUyeC4lMDJ4IENscz0lMDJ4KCUtNXMpIFN1Yj0lMDJ4IFByb3Q9JTAyeCBNeFBTPSUyZCAjQ2Zncz0lM2RcbiI7CiAKLXN0YXRpYyBjaGFyICpmb3JtYXRfZGV2aWNlMiA9CitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X2RldmljZTIgPQogLyogUDogIFZlbmRvcj14eHh4IFByb2RJRD14eHh4IFJldj14eC54eCAqLwogICAiUDogIFZlbmRvcj0lMDR4IFByb2RJRD0lMDR4IFJldj0lMnguJTAyeFxuIjsKIAotc3RhdGljIGNoYXIgKmZvcm1hdF9jb25maWcgPQorc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9jb25maWcgPQogLyogQzogICNJZnM9ZGQgQ2ZnIz1kZCBBdHI9eHggTVB3cj1kZGRtQSAqLwogICAiQzolYyAjSWZzPSUyZCBDZmcjPSUyZCBBdHI9JTAyeCBNeFB3cj0lM2RtQVxuIjsKICAgCi1zdGF0aWMgY2hhciAqZm9ybWF0X2lmYWNlID0KK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfaWZhY2UgPQogLyogSTogIElmIz1kZCBBbHQ9ZGQgI0VQcz1kZCBDbHM9eHgoc3Nzc3MpIFN1Yj14eCBQcm90PXh4IERyaXZlcj14eHh4Ki8KICAgIkk6ICBJZiM9JTJkIEFsdD0lMmQgI0VQcz0lMmQgQ2xzPSUwMngoJS01cykgU3ViPSUwMnggUHJvdD0lMDJ4IERyaXZlcj0lc1xuIjsKIAotc3RhdGljIGNoYXIgKmZvcm1hdF9lbmRwdCA9CitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X2VuZHB0ID0KIC8qIEU6ICBBZD14eChzKSBBdHI9eHgoc3NzcykgTXhQUz1kZGRkIEl2bD1EP3MgKi8KICAgIkU6ICBBZD0lMDJ4KCVjKSBBdHI9JTAyeCglLTRzKSBNeFBTPSU0ZCBJdmw9JWQlY3NcbiI7CiAKQEAgLTU0NSwxMCArNTQ1LDEwIEBACiAJCXN0cnVjdCB1c2JfZGV2aWNlICpjaGlsZGRldiA9IHVzYmRldi0+Y2hpbGRyZW5bY2hpeF07CiAKIAkJaWYgKGNoaWxkZGV2KSB7Ci0JCQlkb3duKCZjaGlsZGRldi0+c2VyaWFsaXplKTsKKwkJCXVzYl9sb2NrX2RldmljZShjaGlsZGRldik7CiAJCQlyZXQgPSB1c2JfZGV2aWNlX2R1bXAoYnVmZmVyLCBuYnl0ZXMsIHNraXBfYnl0ZXMsIGZpbGVfb2Zmc2V0LCBjaGlsZGRldiwKIAkJCQkJYnVzLCBsZXZlbCArIDEsIGNoaXgsICsrY250KTsKLQkJCXVwKCZjaGlsZGRldi0+c2VyaWFsaXplKTsKKwkJCXVzYl91bmxvY2tfZGV2aWNlKGNoaWxkZGV2KTsKIAkJCWlmIChyZXQgPT0gLUVGQVVMVCkKIAkJCQlyZXR1cm4gdG90YWxfd3JpdHRlbjsKIAkJCXRvdGFsX3dyaXR0ZW4gKz0gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IGIxZDZlOWEuLjJiNjg5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTQwMiw3ICs0MDIsNiBAQAogfQogCiBzdHJ1Y3QgdXNiX2RyaXZlciB1c2Jmc19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInVzYmZzIiwKIAkucHJvYmUgPQlkcml2ZXJfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlkcml2ZXJfZGlzY29ubmVjdCwKQEAgLTEzNTAsOSArMTM0OSw3IEBACiAJLyogbGV0IGtlcm5lbCBkcml2ZXJzIHRyeSB0byAocmUpYmluZCB0byB0aGUgaW50ZXJmYWNlICovCiAJY2FzZSBVU0JERVZGU19DT05ORUNUOgogCQl1c2JfdW5sb2NrX2RldmljZShwcy0+ZGV2KTsKLQkJdXNiX2xvY2tfYWxsX2RldmljZXMoKTsKIAkJYnVzX3Jlc2Nhbl9kZXZpY2VzKGludGYtPmRldi5idXMpOwotCQl1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKCk7CiAJCXVzYl9sb2NrX2RldmljZShwcy0+ZGV2KTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjQ2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICogZHJpdmVycy91c2IvZHJpdmVyLmMgLSBtb3N0IG9mIHRoZSBkcml2ZXIgbW9kZWwgc3R1ZmYgZm9yIHVzYgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoKKyAqIGJhc2VkIG9uIGRyaXZlcnMvdXNiL3VzYi5jIHdoaWNoIGhhZCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodHM6CisgKgkoQykgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIDE5OTkKKyAqCShDKSBDb3B5cmlnaHQgSm9oYW5uZXMgRXJkZmVsdCAxOTk5LTIwMDEKKyAqCShDKSBDb3B5cmlnaHQgQW5kcmVhcyBHYWwgMTk5OQorICoJKEMpIENvcHlyaWdodCBHcmVnb3J5IFAuIFNtaXRoIDE5OTkKKyAqCShDKSBDb3B5cmlnaHQgRGV0aSBGbGllZ2wgMTk5OSAobmV3IFVTQiBhcmNoaXRlY3R1cmUpCisgKgkoQykgQ29weXJpZ2h0IFJhbmR5IER1bmxhcCAyMDAwCisgKgkoQykgQ29weXJpZ2h0IERhdmlkIEJyb3duZWxsIDIwMDAtMjAwNAorICoJKEMpIENvcHlyaWdodCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIDIwMDAKKyAqCQkodXNiX2RldmljZV9pZCBtYXRjaGluZyBjaGFuZ2VzIGJ5IEFkYW0gSi4gUmljaHRlcikKKyAqCShDKSBDb3B5cmlnaHQgR3JlZyBLcm9haC1IYXJ0bWFuIDIwMDItMjAwMworICoKKyAqIE5PVEUhIFRoaXMgaXMgbm90IGFjdHVhbGx5IGEgZHJpdmVyIGF0IGFsbCwgcmF0aGVyIHRoaXMgaXMKKyAqIGp1c3QgYSBjb2xsZWN0aW9uIG9mIGhlbHBlciByb3V0aW5lcyB0aGF0IGltcGxlbWVudCB0aGUKKyAqIGdlbmVyaWMgVVNCIHRoaW5ncyB0aGF0IHRoZSByZWFsIGRyaXZlcnMgY2FuIHVzZS4uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJoY2QuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKworc3RhdGljIGludCB1c2JfbWF0Y2hfb25lX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKworc3RydWN0IHVzYl9keW5pZCB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkOworfTsKKworCitzdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorc3RhdGljIGludCBnZW5lcmljX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisKKwkvKiBpZiB0aGlzIGlzIG9ubHkgYW4gdW5iaW5kLCBub3QgYSBwaHlzaWNhbCBkaXNjb25uZWN0LCB0aGVuCisJICogdW5jb25maWd1cmUgdGhlIGRldmljZSAqLworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKKwkJdXNiX3NldF9jb25maWd1cmF0aW9uKHVkZXYsIDApOworCisJLyogaW4gY2FzZSB0aGUgY2FsbCBmYWlsZWQgb3IgdGhlIGRldmljZSB3YXMgc3VzcGVuZGVkICovCisJaWYgKHVkZXYtPnN0YXRlID49IFVTQl9TVEFURV9DT05GSUdVUkVEKQorCQl1c2JfZGlzYWJsZV9kZXZpY2UodWRldiwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkZXZpY2VfZHJpdmVyIHVzYl9nZW5lcmljX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9CSJ1c2IiLAorCS5idXMgPSAmdXNiX2J1c190eXBlLAorCS5wcm9iZSA9IGdlbmVyaWNfcHJvYmUsCisJLnJlbW92ZSA9IGdlbmVyaWNfcmVtb3ZlLAorfTsKKworLyogRnVuIGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzdHJ1Y3QgZGV2aWNlIGlzIGEKKyAqIHVzYiBkZXZpY2Ugb3IgYSB1c2IgaW50ZXJmYWNlLiAqLworaW50IHVzYl9nZW5lcmljX2RyaXZlcl9kYXRhOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKworLyoKKyAqIEFkZHMgYSBuZXcgZHluYW1pYyBVU0JkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIsCisgKiBhbmQgY2F1c2UgdGhlIGRyaXZlciB0byBwcm9iZSBmb3IgYWxsIGRldmljZXMgYWdhaW4uCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX25ld19pZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2ID0gdG9fdXNiX2RyaXZlcihkcml2ZXIpOworCXN0cnVjdCB1c2JfZHluaWQgKmR5bmlkOworCXUzMiBpZFZlbmRvciA9IDA7CisJdTMyIGlkUHJvZHVjdCA9IDA7CisJaW50IGZpZWxkcyA9IDA7CisKKwlmaWVsZHMgPSBzc2NhbmYoYnVmLCAiJXggJXgiLCAmaWRWZW5kb3IsICZpZFByb2R1Y3QpOworCWlmIChmaWVsZHMgPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWR5bmlkID0ga3phbGxvYyhzaXplb2YoKmR5bmlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkeW5pZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmZHluaWQtPm5vZGUpOworCWR5bmlkLT5pZC5pZFZlbmRvciA9IGlkVmVuZG9yOworCWR5bmlkLT5pZC5pZFByb2R1Y3QgPSBpZFByb2R1Y3Q7CisJZHluaWQtPmlkLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7CisKKwlzcGluX2xvY2soJnVzYl9kcnYtPmR5bmlkcy5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ1c2JfZHJ2LT5keW5pZHMubGlzdCwgJmR5bmlkLT5ub2RlKTsKKwlzcGluX3VubG9jaygmdXNiX2Rydi0+ZHluaWRzLmxvY2spOworCisJaWYgKGdldF9kcml2ZXIoZHJpdmVyKSkgeworCQlkcml2ZXJfYXR0YWNoKGRyaXZlcik7CisJCXB1dF9kcml2ZXIoZHJpdmVyKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgRFJJVkVSX0FUVFIobmV3X2lkLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9uZXdfaWQpOworCitzdGF0aWMgaW50IHVzYl9jcmVhdGVfbmV3aWRfZmlsZShzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydikKK3sKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKHVzYl9kcnYtPm5vX2R5bmFtaWNfaWQpCisJCWdvdG8gZXhpdDsKKworCWlmICh1c2JfZHJ2LT5wcm9iZSAhPSBOVUxMKQorCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZ1c2JfZHJ2LT5kcml2ZXIua29iaiwKKwkJCQkJICAmZHJpdmVyX2F0dHJfbmV3X2lkLmF0dHIpOworZXhpdDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9yZW1vdmVfbmV3aWRfZmlsZShzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydikKK3sKKwlpZiAodXNiX2Rydi0+bm9fZHluYW1pY19pZCkKKwkJcmV0dXJuOworCisJaWYgKHVzYl9kcnYtPnByb2JlICE9IE5VTEwpCisJCXN5c2ZzX3JlbW92ZV9maWxlKCZ1c2JfZHJ2LT5kcml2ZXIua29iaiwKKwkJCQkgICZkcml2ZXJfYXR0cl9uZXdfaWQuYXR0cik7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9mcmVlX2R5bmlkcyhzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydikKK3sKKwlzdHJ1Y3QgdXNiX2R5bmlkICpkeW5pZCwgKm47CisKKwlzcGluX2xvY2soJnVzYl9kcnYtPmR5bmlkcy5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHluaWQsIG4sICZ1c2JfZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgeworCQlsaXN0X2RlbCgmZHluaWQtPm5vZGUpOworCQlrZnJlZShkeW5pZCk7CisJfQorCXNwaW5fdW5sb2NrKCZ1c2JfZHJ2LT5keW5pZHMubG9jayk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdXNiX2NyZWF0ZV9uZXdpZF9maWxlKHN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JfcmVtb3ZlX25ld2lkX2ZpbGUoc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnYpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZnJlZV9keW5pZHMoc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnYpCit7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfbWF0Y2hfZHluYW1pY19pZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJCQlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCB1c2JfZHluaWQgKmR5bmlkOworCisJc3Bpbl9sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR5bmlkLCAmZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgeworCQlpZiAodXNiX21hdGNoX29uZV9pZChpbnRmLCAmZHluaWQtPmlkKSkgeworCQkJc3Bpbl91bmxvY2soJmRydi0+ZHluaWRzLmxvY2spOworCQkJcmV0dXJuICZkeW5pZC0+aWQ7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmRydi0+ZHluaWRzLmxvY2spOworCXJldHVybiBOVUxMOworfQorCisKKy8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggdXNiX2J1c190eXBlLnN1YnN5cyB3cml0ZWxvY2sgKi8KK3N0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKiBpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfZHJpdmVyICogZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCWludCBlcnJvciA9IC1FTk9ERVY7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFkcml2ZXItPnByb2JlKQorCQlyZXR1cm4gZXJyb3I7CisJLyogRklYTUUgd2UnZCBtdWNoIHByZWZlciB0byBqdXN0IHJlc3VtZSBpdCAuLi4gKi8KKwlpZiAoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKS0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisKKwlpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCBkcml2ZXItPmlkX3RhYmxlKTsKKwlpZiAoIWlkKQorCQlpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlcik7CisJaWYgKGlkKSB7CisJCWRldl9kYmcoZGV2LCAiJXMgLSBnb3QgaWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJLyogSW50ZXJmYWNlICJwb3dlciBzdGF0ZSIgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBoYXJkd2FyZQorCQkgKiBzdGF0ZSB3aGF0c29ldmVyLiAgV2UgdXNlIGl0IHRvIHJlY29yZCB3aGVuIGl0J3MgYm91bmQgdG8KKwkJICogYSBkcml2ZXIgdGhhdCBtYXkgc3RhcnQgSS8wOiAgaXQncyBub3QgZnJvemVuL3F1aWVzY2VkLgorCQkgKi8KKwkJbWFya19hY3RpdmUoaW50Zik7CisJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQklORElORzsKKwkJZXJyb3IgPSBkcml2ZXItPnByb2JlKGludGYsIGlkKTsKKwkJaWYgKGVycm9yKSB7CisJCQltYXJrX3F1aWVzY2VkKGludGYpOworCQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOworCQl9IGVsc2UKKwkJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisvKiBjYWxsZWQgZnJvbSBkcml2ZXIgY29yZSB3aXRoIHVzYl9idXNfdHlwZS5zdWJzeXMgd3JpdGVsb2NrICovCitzdGF0aWMgaW50IHVzYl91bmJpbmRfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKworCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CSU5ESU5HOworCisJLyogcmVsZWFzZSBhbGwgdXJicyBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KKwl1c2JfZGlzYWJsZV9pbnRlcmZhY2UoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgaW50Zik7CisKKwlpZiAoZHJpdmVyICYmIGRyaXZlci0+ZGlzY29ubmVjdCkKKwkJZHJpdmVyLT5kaXNjb25uZWN0KGludGYpOworCisJLyogcmVzZXQgb3RoZXIgaW50ZXJmYWNlIHN0YXRlICovCisJdXNiX3NldF9pbnRlcmZhY2UoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJCWludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJMCk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CisJbWFya19xdWllc2NlZChpbnRmKTsKKworCXJldHVybiAwOworfQorCisvKiByZXR1cm5zIDAgaWYgbm8gbWF0Y2gsIDEgaWYgbWF0Y2ggKi8KK3N0YXRpYyBpbnQgdXNiX21hdGNoX29uZV9pZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisKKwkvKiBwcm9jX2Nvbm5lY3RpbmZvIGluIGRldmlvLmMgbWF5IGNhbGwgdXMgd2l0aCBpZCA9PSBOVUxMLiAqLworCWlmIChpZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWludGYgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKworCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IpICYmCisJICAgIGlkLT5pZFZlbmRvciAhPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKQorCQlyZXR1cm4gMDsKKworCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKSAmJgorCSAgICBpZC0+aWRQcm9kdWN0ICE9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKQorCQlyZXR1cm4gMDsKKworCS8qIE5vIG5lZWQgdG8gdGVzdCBpZC0+YmNkRGV2aWNlX2xvICE9IDAsIHNpbmNlIDAgaXMgbmV2ZXIKKwkgICBncmVhdGVyIHRoYW4gYW55IHVuc2lnbmVkIG51bWJlci4gKi8KKwlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0xPKSAmJgorCSAgICAoaWQtPmJjZERldmljZV9sbyA+IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJKSAmJgorCSAgICAoaWQtPmJjZERldmljZV9oaSA8IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTKSAmJgorCSAgICAoaWQtPmJEZXZpY2VDbGFzcyAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTKSAmJgorCSAgICAoaWQtPmJEZXZpY2VTdWJDbGFzcyE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MpKQorCQlyZXR1cm4gMDsKKworCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUFJPVE9DT0wpICYmCisJICAgIChpZC0+YkRldmljZVByb3RvY29sICE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQlyZXR1cm4gMDsKKworCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MpICYmCisJICAgIChpZC0+YkludGVyZmFjZUNsYXNzICE9IGludGYtPmRlc2MuYkludGVyZmFjZUNsYXNzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTKSAmJgorCSAgICAoaWQtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBpbnRmLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcykpCisJCXJldHVybiAwOworCisJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9QUk9UT0NPTCkgJiYKKwkgICAgKGlkLT5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gaW50Zi0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorLyoqCisgKiB1c2JfbWF0Y2hfaWQgLSBmaW5kIGZpcnN0IHVzYl9kZXZpY2VfaWQgbWF0Y2hpbmcgZGV2aWNlIG9yIGludGVyZmFjZQorICogQGludGVyZmFjZTogdGhlIGludGVyZmFjZSBvZiBpbnRlcmVzdAorICogQGlkOiBhcnJheSBvZiB1c2JfZGV2aWNlX2lkIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgemVybyBlbnRyeQorICoKKyAqIHVzYl9tYXRjaF9pZCBzZWFyY2hlcyBhbiBhcnJheSBvZiB1c2JfZGV2aWNlX2lkJ3MgYW5kIHJldHVybnMKKyAqIHRoZSBmaXJzdCBvbmUgbWF0Y2hpbmcgdGhlIGRldmljZSBvciBpbnRlcmZhY2UsIG9yIG51bGwuCisgKiBUaGlzIGlzIHVzZWQgd2hlbiBiaW5kaW5nIChvciByZWJpbmRpbmcpIGEgZHJpdmVyIHRvIGFuIGludGVyZmFjZS4KKyAqIE1vc3QgVVNCIGRldmljZSBkcml2ZXJzIHdpbGwgdXNlIHRoaXMgaW5kaXJlY3RseSwgdGhyb3VnaCB0aGUgdXNiIGNvcmUsCisgKiBidXQgc29tZSBsYXllcmVkIGRyaXZlciBmcmFtZXdvcmtzIHVzZSBpdCBkaXJlY3RseS4KKyAqIFRoZXNlIGRldmljZSB0YWJsZXMgYXJlIGV4cG9ydGVkIHdpdGggTU9EVUxFX0RFVklDRV9UQUJMRSwgdGhyb3VnaAorICogbW9kdXRpbHMsIHRvIHN1cHBvcnQgdGhlIGRyaXZlciBsb2FkaW5nIGZ1bmN0aW9uYWxpdHkgb2YgVVNCIGhvdHBsdWdnaW5nLgorICoKKyAqIFdoYXQgTWF0Y2hlczoKKyAqCisgKiBUaGUgIm1hdGNoX2ZsYWdzIiBlbGVtZW50IGluIGEgdXNiX2RldmljZV9pZCBjb250cm9scyB3aGljaAorICogbWVtYmVycyBhcmUgdXNlZC4gIElmIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQsIHRoZQorICogdmFsdWUgaW4gdGhlIGRldmljZV9pZCBtdXN0IG1hdGNoIGl0cyBjb3JyZXNwb25kaW5nIG1lbWJlcgorICogaW4gdGhlIGRldmljZSBvciBpbnRlcmZhY2UgZGVzY3JpcHRvciwgb3IgZWxzZSB0aGUgZGV2aWNlX2lkCisgKiBkb2VzIG5vdCBtYXRjaC4KKyAqCisgKiAiZHJpdmVyX2luZm8iIGlzIG5vcm1hbGx5IHVzZWQgb25seSBieSBkZXZpY2UgZHJpdmVycywKKyAqIGJ1dCB5b3UgY2FuIGNyZWF0ZSBhIHdpbGRjYXJkICJtYXRjaGVzIGFueXRoaW5nIiB1c2JfZGV2aWNlX2lkCisgKiBhcyBhIGRyaXZlcidzICJtb2R1bGVzLnVzYm1hcCIgZW50cnkgaWYgeW91IHByb3ZpZGUgYW4gaWQgd2l0aAorICogb25seSBhIG5vbnplcm8gImRyaXZlcl9pbmZvIiBmaWVsZC4gIElmIHlvdSBkbyB0aGlzLCB0aGUgVVNCIGRldmljZQorICogZHJpdmVyJ3MgcHJvYmUoKSByb3V0aW5lIHNob3VsZCB1c2UgYWRkaXRpb25hbCBpbnRlbGxpZ2VuY2UgdG8KKyAqIGRlY2lkZSB3aGV0aGVyIHRvIGJpbmQgdG8gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UuCisgKgorICogV2hhdCBNYWtlcyBHb29kIHVzYl9kZXZpY2VfaWQgVGFibGVzOgorICoKKyAqIFRoZSBtYXRjaCBhbGdvcml0aG0gaXMgdmVyeSBzaW1wbGUsIHNvIHRoYXQgaW50ZWxsaWdlbmNlIGluCisgKiBkcml2ZXIgc2VsZWN0aW9uIG11c3QgY29tZSBmcm9tIHNtYXJ0IGRyaXZlciBpZCByZWNvcmRzLgorICogVW5sZXNzIHlvdSBoYXZlIGdvb2QgcmVhc29ucyB0byB1c2UgYW5vdGhlciBzZWxlY3Rpb24gcG9saWN5LAorICogcHJvdmlkZSBtYXRjaCBlbGVtZW50cyBvbmx5IGluIHJlbGF0ZWQgZ3JvdXBzLCBhbmQgb3JkZXIgbWF0Y2gKKyAqIHNwZWNpZmllcnMgZnJvbSBzcGVjaWZpYyB0byBnZW5lcmFsLiAgVXNlIHRoZSBtYWNyb3MgcHJvdmlkZWQKKyAqIGZvciB0aGF0IHB1cnBvc2UgaWYgeW91IGNhbi4KKyAqCisgKiBUaGUgbW9zdCBzcGVjaWZpYyBtYXRjaCBzcGVjaWZpZXJzIHVzZSBkZXZpY2UgZGVzY3JpcHRvcgorICogZGF0YS4gIFRoZXNlIGFyZSBjb21tb25seSB1c2VkIHdpdGggcHJvZHVjdC1zcGVjaWZpYyBtYXRjaGVzOworICogdGhlIFVTQl9ERVZJQ0UgbWFjcm8gbGV0cyB5b3UgcHJvdmlkZSB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzLAorICogYW5kIHlvdSBjYW4gYWxzbyBtYXRjaCBhZ2FpbnN0IHJhbmdlcyBvZiBwcm9kdWN0IHJldmlzaW9ucy4KKyAqIFRoZXNlIGFyZSB3aWRlbHkgdXNlZCBmb3IgZGV2aWNlcyB3aXRoIGFwcGxpY2F0aW9uIG9yIHZlbmRvcgorICogc3BlY2lmaWMgYkRldmljZUNsYXNzIHZhbHVlcy4KKyAqCisgKiBNYXRjaGVzIGJhc2VkIG9uIGRldmljZSBjbGFzcy9zdWJjbGFzcy9wcm90b2NvbCBzcGVjaWZpY2F0aW9ucworICogYXJlIHNsaWdodGx5IG1vcmUgZ2VuZXJhbDsgdXNlIHRoZSBVU0JfREVWSUNFX0lORk8gbWFjcm8sIG9yCisgKiBpdHMgc2libGluZ3MuICBUaGVzZSBhcmUgdXNlZCB3aXRoIHNpbmdsZS1mdW5jdGlvbiBkZXZpY2VzCisgKiB3aGVyZSBiRGV2aWNlQ2xhc3MgZG9lc24ndCBzcGVjaWZ5IHRoYXQgZWFjaCBpbnRlcmZhY2UgaGFzCisgKiBpdHMgb3duIGNsYXNzLgorICoKKyAqIE1hdGNoZXMgYmFzZWQgb24gaW50ZXJmYWNlIGNsYXNzL3N1YmNsYXNzL3Byb3RvY29sIGFyZSB0aGUKKyAqIG1vc3QgZ2VuZXJhbDsgdGhleSBsZXQgZHJpdmVycyBiaW5kIHRvIGFueSBpbnRlcmZhY2Ugb24gYQorICogbXVsdGlwbGUtZnVuY3Rpb24gZGV2aWNlLiAgVXNlIHRoZSBVU0JfSU5URVJGQUNFX0lORk8KKyAqIG1hY3JvLCBvciBpdHMgc2libGluZ3MsIHRvIG1hdGNoIGNsYXNzLXBlci1pbnRlcmZhY2Ugc3R5bGUKKyAqIGRldmljZXMgKGFzIHJlY29yZGVkIGluIGJEZXZpY2VDbGFzcykuCisgKgorICogV2l0aGluIHRob3NlIGdyb3VwcywgcmVtZW1iZXIgdGhhdCBub3QgYWxsIGNvbWJpbmF0aW9ucyBhcmUKKyAqIG1lYW5pbmdmdWwuICBGb3IgZXhhbXBsZSwgZG9uJ3QgZ2l2ZSBhIHByb2R1Y3QgdmVyc2lvbiByYW5nZQorICogd2l0aG91dCB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzOyBvciBzcGVjaWZ5IGEgcHJvdG9jb2wgd2l0aG91dAorICogaXRzIGFzc29jaWF0ZWQgY2xhc3MgYW5kIHN1YmNsYXNzLgorICovCitjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX21hdGNoX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJLyogcHJvY19jb25uZWN0aW5mbyBpbiBkZXZpby5jIG1heSBjYWxsIHVzIHdpdGggaWQgPT0gTlVMTC4gKi8KKwlpZiAoaWQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBJdCBpcyBpbXBvcnRhbnQgdG8gY2hlY2sgdGhhdCBpZC0+ZHJpdmVyX2luZm8gaXMgbm9uemVybywKKwkgICBzaW5jZSBhbiBlbnRyeSB0aGF0IGlzIGFsbCB6ZXJvZXMgZXhjZXB0IGZvciBhIG5vbnplcm8KKwkgICBpZC0+ZHJpdmVyX2luZm8gaXMgdGhlIHdheSB0byBjcmVhdGUgYW4gZW50cnkgdGhhdAorCSAgIGluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIgd2FudCB0byBleGFtaW5lIGV2ZXJ5CisJICAgZGV2aWNlIGFuZCBpbnRlcmZhY2UuICovCisJZm9yICg7IGlkLT5pZFZlbmRvciB8fCBpZC0+YkRldmljZUNsYXNzIHx8IGlkLT5iSW50ZXJmYWNlQ2xhc3MgfHwKKwkgICAgICAgaWQtPmRyaXZlcl9pbmZvOyBpZCsrKSB7CisJCWlmICh1c2JfbWF0Y2hfb25lX2lkKGludGVyZmFjZSwgaWQpKQorCQkJcmV0dXJuIGlkOworCX0KKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX21hdGNoX2lkKTsKKworaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2OworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKKworCS8qIGNoZWNrIGZvciBnZW5lcmljIGRyaXZlciwgd2hpY2ggd2UgZG9uJ3QgbWF0Y2ggYW55IGRldmljZSB3aXRoICovCisJaWYgKGRydiA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQorCQlyZXR1cm4gMDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJdXNiX2RydiA9IHRvX3VzYl9kcml2ZXIoZHJ2KTsKKworCWlkID0gdXNiX21hdGNoX2lkKGludGYsIHVzYl9kcnYtPmlkX3RhYmxlKTsKKwlpZiAoaWQpCisJCXJldHVybiAxOworCisJaWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2KTsKKwlpZiAoaWQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIHVzYl9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIFVTQiBkcml2ZXIKKyAqIEBuZXdfZHJpdmVyOiBVU0Igb3BlcmF0aW9ucyBmb3IgdGhlIGRyaXZlcgorICogQG93bmVyOiBtb2R1bGUgb3duZXIgb2YgdGhpcyBkcml2ZXIuCisgKgorICogUmVnaXN0ZXJzIGEgVVNCIGRyaXZlciB3aXRoIHRoZSBVU0IgY29yZS4gIFRoZSBsaXN0IG9mIHVuYXR0YWNoZWQKKyAqIGludGVyZmFjZXMgd2lsbCBiZSByZXNjYW5uZWQgd2hlbmV2ZXIgYSBuZXcgZHJpdmVyIGlzIGFkZGVkLCBhbGxvd2luZworICogdGhlIG5ldyBkcml2ZXIgdG8gYXR0YWNoIHRvIGFueSByZWNvZ25pemVkIGRldmljZXMuCisgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIGFuZCAwIG9uIHN1Y2Nlc3MuCisgKgorICogTk9URTogaWYgeW91IHdhbnQgeW91ciBkcml2ZXIgdG8gdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLCB5b3UgbXVzdCBjYWxsCisgKiB1c2JfcmVnaXN0ZXJfZGV2KCkgdG8gZW5hYmxlIHRoYXQgZnVuY3Rpb25hbGl0eS4gIFRoaXMgZnVuY3Rpb24gbm8gbG9uZ2VyCisgKiB0YWtlcyBjYXJlIG9mIHRoYXQuCisgKi8KK2ludCB1c2JfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZHJpdmVyICpuZXdfZHJpdmVyLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwluZXdfZHJpdmVyLT5kcml2ZXIubmFtZSA9IChjaGFyICopbmV3X2RyaXZlci0+bmFtZTsKKwluZXdfZHJpdmVyLT5kcml2ZXIuYnVzID0gJnVzYl9idXNfdHlwZTsKKwluZXdfZHJpdmVyLT5kcml2ZXIucHJvYmUgPSB1c2JfcHJvYmVfaW50ZXJmYWNlOworCW5ld19kcml2ZXItPmRyaXZlci5yZW1vdmUgPSB1c2JfdW5iaW5kX2ludGVyZmFjZTsKKwluZXdfZHJpdmVyLT5kcml2ZXIub3duZXIgPSBvd25lcjsKKwlzcGluX2xvY2tfaW5pdCgmbmV3X2RyaXZlci0+ZHluaWRzLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZuZXdfZHJpdmVyLT5keW5pZHMubGlzdCk7CisKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm5ld19kcml2ZXItPmRyaXZlcik7CisKKwlpZiAoIXJldHZhbCkgeworCQlwcl9pbmZvKCIlczogcmVnaXN0ZXJlZCBuZXcgZHJpdmVyICVzXG4iLAorCQkJdXNiY29yZV9uYW1lLCBuZXdfZHJpdmVyLT5uYW1lKTsKKwkJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwkJdXNiX2NyZWF0ZV9uZXdpZF9maWxlKG5ld19kcml2ZXIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwKKwkJCXVzYmNvcmVfbmFtZSwgcmV0dmFsLCBuZXdfZHJpdmVyLT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3JlZ2lzdGVyX2RyaXZlcik7CisKKy8qKgorICogdXNiX2RlcmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgVVNCIGRyaXZlcgorICogQGRyaXZlcjogVVNCIG9wZXJhdGlvbnMgb2YgdGhlIGRyaXZlciB0byB1bnJlZ2lzdGVyCisgKiBDb250ZXh0OiBtdXN0IGJlIGFibGUgdG8gc2xlZXAKKyAqCisgKiBVbmxpbmtzIHRoZSBzcGVjaWZpZWQgZHJpdmVyIGZyb20gdGhlIGludGVybmFsIFVTQiBkcml2ZXIgbGlzdC4KKyAqCisgKiBOT1RFOiBJZiB5b3UgY2FsbGVkIHVzYl9yZWdpc3Rlcl9kZXYoKSwgeW91IHN0aWxsIG5lZWQgdG8gY2FsbAorICogdXNiX2RlcmVnaXN0ZXJfZGV2KCkgdG8gY2xlYW4gdXAgeW91ciBkcml2ZXIncyBhbGxvY2F0ZWQgbWlub3IgbnVtYmVycywKKyAqIHRoaXMgKiBjYWxsIHdpbGwgbm8gbG9uZ2VyIGRvIGl0IGZvciB5b3UuCisgKi8KK3ZvaWQgdXNiX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcikKK3sKKwlwcl9pbmZvKCIlczogZGVyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIHVzYmNvcmVfbmFtZSwgZHJpdmVyLT5uYW1lKTsKKworCXVzYl9yZW1vdmVfbmV3aWRfZmlsZShkcml2ZXIpOworCXVzYl9mcmVlX2R5bmlkcyhkcml2ZXIpOworCWRyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXItPmRyaXZlcik7CisKKwl1c2Jmc191cGRhdGVfc3BlY2lhbCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2RlcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggZGEyNGMzMS4uMDAxOGJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC04NTcsOSArODU3LDcgQEAKIAkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FTVNHU0laRTsKIAl9CiAKLQl1c2JfbG9ja19kZXZpY2UgKHVzYl9kZXYpOwogCXJldHZhbCA9IHVzYl9uZXdfZGV2aWNlICh1c2JfZGV2KTsKLQl1c2JfdW5sb2NrX2RldmljZSAodXNiX2Rldik7CiAJaWYgKHJldHZhbCkgewogCQl1c2JfZGV2LT5idXMtPnJvb3RfaHViID0gTlVMTDsKIAkJZGV2X2VyciAocGFyZW50X2RldiwgImNhbid0IHJlZ2lzdGVyIHJvb3QgaHViIGZvciAlcywgJWRcbiIsCkBAIC0xODI3LDggKzE4MjUsNiBAQAogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvY2F0ZV9yb290X2h1YjsKIAl9Ci0JcmhkZXYtPnNwZWVkID0gKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9VU0IyKSA/IFVTQl9TUEVFRF9ISUdIIDoKLQkJCVVTQl9TUEVFRF9GVUxMOwogCiAJLyogQWx0aG91Z2ggaW4gcHJpbmNpcGxlIGhjZC0+ZHJpdmVyLT5zdGFydCgpIG1pZ2h0IG5lZWQgdG8gdXNlIHJoZGV2LAogCSAqIG5vbmUgb2YgdGhlIGN1cnJlbnQgZHJpdmVycyBkby4KQEAgLTE4NDYsNiArMTg0Miw5IEBACiAJCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJzdXBwb3J0cyBVU0IgcmVtb3RlIHdha2V1cFxuIik7CiAJaGNkLT5yZW1vdGVfd2FrZXVwID0gaGNkLT5jYW5fd2FrZXVwOwogCisJcmhkZXYtPnNwZWVkID0gKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9VU0IyKSA/IFVTQl9TUEVFRF9ISUdIIDoKKwkJCVVTQl9TUEVFRF9GVUxMOworCXJoZGV2LT5idXNfbUEgPSBtaW4oNTAwdSwgaGNkLT5wb3dlcl9idWRnZXQpOwogCWlmICgocmV0dmFsID0gcmVnaXN0ZXJfcm9vdF9odWIocmhkZXYsIGhjZCkpICE9IDApCiAJCWdvdG8gZXJyX3JlZ2lzdGVyX3Jvb3RfaHViOwogCkBAIC0xODkxLDcgKzE4OTAsMTAgQEAKIAlzcGluX2xvY2tfaXJxICgmaGNkX3Jvb3RfaHViX2xvY2spOwogCWhjZC0+cmhfcmVnaXN0ZXJlZCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxICgmaGNkX3Jvb3RfaHViX2xvY2spOworCisJZG93bigmdXNiX2J1c19saXN0X2xvY2spOwogCXVzYl9kaXNjb25uZWN0KCZoY2QtPnNlbGYucm9vdF9odWIpOworCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAKIAloY2QtPnBvbGxfcmggPSAwOwogCWRlbF90aW1lcl9zeW5jKCZoY2QtPnJoX3RpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmggYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCmluZGV4IGM4YTFiMzUuLjU5MWI1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaApAQCAtMzgwLDYgKzM4MCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBleHRlcm4gdm9pZCB1c2JfaGNkX3N1c3BlbmRfcm9vdF9odWIgKHN0cnVjdCB1c2JfaGNkICpoY2QpOwogZXh0ZXJuIHZvaWQgdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIgKHN0cnVjdCB1c2JfaGNkICpoY2QpOworZXh0ZXJuIHZvaWQgdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIgKHN0cnVjdCB1c2JfZGV2aWNlICpyaGRldik7CiBleHRlcm4gaW50IGhjZF9idXNfc3VzcGVuZCAoc3RydWN0IHVzYl9idXMgKmJ1cyk7CiBleHRlcm4gaW50IGhjZF9idXNfcmVzdW1lIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBmNzhiZDEyLi42NTBkNWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJodWIuaCIKIAogLyogUHJvdGVjdCBzdHJ1Y3QgdXNiX2RldmljZS0+c3RhdGUgYW5kIC0+Y2hpbGRyZW4gbWVtYmVycwotICogTm90ZTogQm90aCBhcmUgYWxzbyBwcm90ZWN0ZWQgYnkgLT5zZXJpYWxpemUsIGV4Y2VwdCB0aGF0IC0+c3RhdGUgY2FuCisgKiBOb3RlOiBCb3RoIGFyZSBhbHNvIHByb3RlY3RlZCBieSAtPmRldi5zZW0sIGV4Y2VwdCB0aGF0IC0+c3RhdGUgY2FuCiAgKiBjaGFuZ2UgdG8gVVNCX1NUQVRFX05PVEFUVEFDSEVEIGV2ZW4gd2hlbiB0aGUgc2VtYXBob3JlIGlzbid0IGhlbGQuICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRldmljZV9zdGF0ZV9sb2NrKTsKIApAQCAtNTE1LDYgKzUxNSwzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKKworLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIGh1YiBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGh1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IGRpc2FibGVfcG9ydHMpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJaW50IHBvcnQxOworCisJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGhkZXYtPm1heGNoaWxkOyArK3BvcnQxKSB7CisJCWlmIChoZGV2LT5jaGlsZHJlbltwb3J0MSAtIDFdKSB7CisJCQl1c2JfZGlzY29ubmVjdCgmaGRldi0+Y2hpbGRyZW5bcG9ydDEgLSAxXSk7CisJCQlpZiAoZGlzYWJsZV9wb3J0cykKKwkJCQlodWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDApOworCQl9CisJfQorCWh1Yl9xdWllc2NlKGh1Yik7Cit9CisKKy8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSBodWIgZGV2aWNlICovCitzdGF0aWMgdm9pZCBodWJfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCWh1Yl9hY3RpdmF0ZShodWIpOworCWh1Yl9wb3dlcl9vbihodWIpOworfQorCisKIHN0YXRpYyBpbnQgaHViX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX2h1YiAqaHViLAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQpCiB7CkBAIC02NzcsMjYgKzcwMiw0MCBAQAogCSAqIGFuZCBiYXR0ZXJ5LXBvd2VyZWQgcm9vdCBodWJzIChtYXkgcHJvdmlkZSBqdXN0IDggbUEpLgogCSAqLwogCXJldCA9IHVzYl9nZXRfc3RhdHVzKGhkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsICZodWJzdGF0dXMpOwotCWlmIChyZXQgPCAwKSB7CisJaWYgKHJldCA8IDIpIHsKIAkJbWVzc2FnZSA9ICJjYW4ndCBnZXQgaHViIHN0YXR1cyI7CiAJCWdvdG8gZmFpbDsKIAl9CiAJbGUxNl90b19jcHVzKCZodWJzdGF0dXMpOwogCWlmIChoZGV2ID09IGhkZXYtPmJ1cy0+cm9vdF9odWIpIHsKLQkJc3RydWN0IHVzYl9oY2QgKmhjZCA9Ci0JCQkJY29udGFpbmVyX29mKGhkZXYtPmJ1cywgc3RydWN0IHVzYl9oY2QsIHNlbGYpOwotCi0JCWh1Yi0+cG93ZXJfYnVkZ2V0ID0gbWluKDUwMHUsIGhjZC0+cG93ZXJfYnVkZ2V0KSAvIDI7CisJCWlmIChoZGV2LT5idXNfbUEgPT0gMCB8fCBoZGV2LT5idXNfbUEgPj0gNTAwKQorCQkJaHViLT5tQV9wZXJfcG9ydCA9IDUwMDsKKwkJZWxzZSB7CisJCQlodWItPm1BX3Blcl9wb3J0ID0gaGRldi0+YnVzX21BOworCQkJaHViLT5saW1pdGVkX3Bvd2VyID0gMTsKKwkJfQogCX0gZWxzZSBpZiAoKGh1YnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKSkgPT0gMCkgewogCQlkZXZfZGJnKGh1Yl9kZXYsICJodWIgY29udHJvbGxlciBjdXJyZW50IHJlcXVpcmVtZW50OiAlZG1BXG4iLAogCQkJaHViLT5kZXNjcmlwdG9yLT5iSHViQ29udHJDdXJyZW50KTsKLQkJaHViLT5wb3dlcl9idWRnZXQgPSAoNTAxIC0gaHViLT5kZXNjcmlwdG9yLT5iSHViQ29udHJDdXJyZW50KQotCQkJCQkvIDI7Ci0JfQotCWlmIChodWItPnBvd2VyX2J1ZGdldCkKLQkJZGV2X2RiZyhodWJfZGV2LCAiJWRtQSBidXMgcG93ZXIgYnVkZ2V0IGZvciBjaGlsZHJlblxuIiwKLQkJCWh1Yi0+cG93ZXJfYnVkZ2V0ICogMik7CisJCWh1Yi0+bGltaXRlZF9wb3dlciA9IDE7CisJCWlmIChoZGV2LT5tYXhjaGlsZCA+IDApIHsKKwkJCWludCByZW1haW5pbmcgPSBoZGV2LT5idXNfbUEgLQorCQkJCQlodWItPmRlc2NyaXB0b3ItPmJIdWJDb250ckN1cnJlbnQ7CiAKKwkJCWlmIChyZW1haW5pbmcgPCBoZGV2LT5tYXhjaGlsZCAqIDEwMCkKKwkJCQlkZXZfd2FybihodWJfZGV2LAorCQkJCQkiaW5zdWZmaWNpZW50IHBvd2VyIGF2YWlsYWJsZSAiCisJCQkJCSJ0byB1c2UgYWxsIGRvd25zdHJlYW0gcG9ydHNcbiIpOworCQkJaHViLT5tQV9wZXJfcG9ydCA9IDEwMDsJCS8qIDcuMi4xLjEgKi8KKwkJfQorCX0gZWxzZSB7CS8qIFNlbGYtcG93ZXJlZCBleHRlcm5hbCBodWIgKi8KKwkJLyogRklYTUU6IFdoYXQgYWJvdXQgYmF0dGVyeS1wb3dlcmVkIGV4dGVybmFsIGh1YnMgdGhhdAorCQkgKiBwcm92aWRlIGxlc3MgY3VycmVudCBwZXIgcG9ydD8gKi8KKwkJaHViLT5tQV9wZXJfcG9ydCA9IDUwMDsKKwl9CisJaWYgKGh1Yi0+bUFfcGVyX3BvcnQgPCA1MDApCisJCWRldl9kYmcoaHViX2RldiwgIiV1bUEgYnVzIHBvd2VyIGJ1ZGdldCBmb3IgZWFjaCBjaGlsZFxuIiwKKwkJCQlodWItPm1BX3Blcl9wb3J0KTsKIAogCXJldCA9IGh1Yl9odWJfc3RhdHVzKGh1YiwgJmh1YnN0YXR1cywgJmh1YmNoYW5nZSk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTc1MCwyOSArNzg5LDEwIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBoaWdoc3BlZWRfaHViczsKIAotLyogQ2FsbGVkIGFmdGVyIHRoZSBodWIgZHJpdmVyIGlzIHVuYm91bmQgZnJvbSBhIGh1YiB3aXRoIGNoaWxkcmVuICovCi1zdGF0aWMgdm9pZCBodWJfcmVtb3ZlX2NoaWxkcmVuX3dvcmsodm9pZCAqX19odWIpCi17Ci0Jc3RydWN0IHVzYl9odWIJCSpodWIgPSBfX2h1YjsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqaGRldiA9IGh1Yi0+aGRldjsKLQlpbnQJCQlpOwotCi0Ja2ZyZWUoaHViKTsKLQotCXVzYl9sb2NrX2RldmljZShoZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgaGRldi0+bWF4Y2hpbGQ7ICsraSkgewotCQlpZiAoaGRldi0+Y2hpbGRyZW5baV0pCi0JCQl1c2JfZGlzY29ubmVjdCgmaGRldi0+Y2hpbGRyZW5baV0pOwotCX0KLQl1c2JfdW5sb2NrX2RldmljZShoZGV2KTsKLQl1c2JfcHV0X2RldihoZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgaHViX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2OwotCWludCBuLCBwb3J0MTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwogCWhkZXYgPSBodWItPmhkZXY7CkBAIC03ODAsNyArODAwLDkgQEAKIAlpZiAoaGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCWhpZ2hzcGVlZF9odWJzLS07CiAKLQlodWJfcXVpZXNjZShodWIpOworCS8qIERpc2Nvbm5lY3QgYWxsIGNoaWxkcmVuIGFuZCBxdWllc2NlIHRoZSBodWIgKi8KKwlodWJfcHJlX3Jlc2V0KGh1YiwgMSk7CisKIAl1c2JfZnJlZV91cmIoaHViLT51cmIpOwogCWh1Yi0+dXJiID0gTlVMTDsKIApAQCAtODAwLDI3ICs4MjIsNyBAQAogCQlodWItPmJ1ZmZlciA9IE5VTEw7CiAJfQogCi0JLyogSWYgdGhlcmUgYXJlIGFueSBjaGlsZHJlbiB0aGVuIHRoaXMgaXMgYW4gdW5iaW5kIG9ubHksIG5vdCBhCi0JICogcGh5c2ljYWwgZGlzY29ubmVjdGlvbi4gIFRoZSBhY3RpdmUgcG9ydHMgbXVzdCBiZSBkaXNhYmxlZAotCSAqIGFuZCBsYXRlciBvbiB3ZSBtdXN0IGNhbGwgdXNiX2Rpc2Nvbm5lY3QoKS4gIFdlIGNhbid0IGNhbGwKLQkgKiBpdCBub3cgYmVjYXVzZSB3ZSBtYXkgbm90IGhvbGQgdGhlIGh1YidzIGRldmljZSBsb2NrLgotCSAqLwotCW4gPSAwOwotCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSBoZGV2LT5tYXhjaGlsZDsgKytwb3J0MSkgewotCQlpZiAoaGRldi0+Y2hpbGRyZW5bcG9ydDEgLSAxXSkgewotCQkJKytuOwotCQkJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAxKTsKLQkJfQotCX0KLQotCWlmIChuID09IDApCi0JCWtmcmVlKGh1Yik7Ci0JZWxzZSB7Ci0JCS8qIFJldXNlIHRoZSBodWItPmxlZHMgd29ya19zdHJ1Y3QgZm9yIG91ciBvd24gcHVycG9zZXMgKi8KLQkJSU5JVF9XT1JLKCZodWItPmxlZHMsIGh1Yl9yZW1vdmVfY2hpbGRyZW5fd29yaywgaHViKTsKLQkJc2NoZWR1bGVfd29yaygmaHViLT5sZWRzKTsKLQkJdXNiX2dldF9kZXYoaGRldik7Ci0JfQorCWtmcmVlKGh1Yik7CiB9CiAKIHN0YXRpYyBpbnQgaHViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC05MTcsMjYgKzkxOSw2IEBACiAJfQogfQogCi0vKiBjYWxsZXIgaGFzIGxvY2tlZCB0aGUgaHViIGRldmljZSAqLwotc3RhdGljIHZvaWQgaHViX3ByZV9yZXNldChzdHJ1Y3QgdXNiX2h1YiAqaHViKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNoaWxkOyArK2kpIHsKLQkJaWYgKGhkZXYtPmNoaWxkcmVuW2ldKQotCQkJdXNiX2Rpc2Nvbm5lY3QoJmhkZXYtPmNoaWxkcmVuW2ldKTsKLQl9Ci0JaHViX3F1aWVzY2UoaHViKTsKLX0KLQotLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIGh1YiBkZXZpY2UgKi8KLXN0YXRpYyB2b2lkIGh1Yl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaHViICpodWIpCi17Ci0JaHViX2FjdGl2YXRlKGh1Yik7Ci0JaHViX3Bvd2VyX29uKGh1Yik7Ci19Ci0KIAogLyogZ3JhYiBkZXZpY2UvcG9ydCBsb2NrLCByZXR1cm5pbmcgaW5kZXggb2YgdGhhdCBwb3J0ICh6ZXJvIGJhc2VkKS4KICAqIHByb3RlY3RzIHRoZSB1cHN0cmVhbSBsaW5rIHVzZWQgYnkgdGhpcyBkZXZpY2UgZnJvbSBjb25jdXJyZW50CkBAIC05NjQsMjQgKzk0NiwyMSBAQAogCXQgPSBsb2NrdHJlZShoZGV2KTsKIAlpZiAodCA8IDApCiAJCXJldHVybiB0OwotCWZvciAodCA9IDA7IHQgPCBoZGV2LT5tYXhjaGlsZDsgdCsrKSB7Ci0JCWlmIChoZGV2LT5jaGlsZHJlblt0XSA9PSB1ZGV2KSB7Ci0JCQkvKiBldmVyeXRoaW5nIGlzIGZhaWwtZmFzdCBvbmNlIGRpc2Nvbm5lY3QKLQkJCSAqIHByb2Nlc3Npbmcgc3RhcnRzCi0JCQkgKi8KLQkJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCi0JCQkJYnJlYWs7CiAKLQkJCS8qIHdoZW4gZXZlcnlvbmUgZ3JhYnMgbG9ja3MgdG9wLT5ib3R0b20sCi0JCQkgKiBub24tb3ZlcmxhcHBpbmcgd29yayBtYXkgYmUgY29uY3VycmVudAotCQkJICovCi0JCQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOwotCQkJdXAoJmhkZXYtPnNlcmlhbGl6ZSk7Ci0JCQlyZXR1cm4gdCArIDE7Ci0JCX0KKwkvKiBldmVyeXRoaW5nIGlzIGZhaWwtZmFzdCBvbmNlIGRpc2Nvbm5lY3QKKwkgKiBwcm9jZXNzaW5nIHN0YXJ0cworCSAqLworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKKwkJdXNiX3VubG9ja19kZXZpY2UoaGRldik7CisJCXJldHVybiAtRU5PREVWOwogCX0KKworCS8qIHdoZW4gZXZlcnlvbmUgZ3JhYnMgbG9ja3MgdG9wLT5ib3R0b20sCisJICogbm9uLW92ZXJsYXBwaW5nIHdvcmsgbWF5IGJlIGNvbmN1cnJlbnQKKwkgKi8KKwl1c2JfbG9ja19kZXZpY2UodWRldik7CiAJdXNiX3VubG9ja19kZXZpY2UoaGRldik7Ci0JcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHVkZXYtPnBvcnRudW07CiB9CiAKIHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCkBAIC0xMDM5LDYgKzEwMTgsMzkgQEAKIEVYUE9SVF9TWU1CT0wodXNiX3NldF9kZXZpY2Vfc3RhdGUpOwogCiAKKyNpZmRlZiBDT05GSUdfUE0KKworLyoqCisgKiB1c2Jfcm9vdF9odWJfbG9zdF9wb3dlciAtIGNhbGxlZCBieSBIQ0QgaWYgdGhlIHJvb3QgaHViIGxvc3QgVmJ1cyBwb3dlcgorICogQHJoZGV2OiBzdHJ1Y3QgdXNiX2RldmljZSBmb3IgdGhlIHJvb3QgaHViCisgKgorICogVGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBpdHMgcm9vdCBodWIKKyAqIGlzIHJlc3VtZWQgYW5kIFZidXMgcG93ZXIgaGFzIGJlZW4gaW50ZXJydXB0ZWQgb3IgdGhlIGNvbnRyb2xsZXIKKyAqIGhhcyBiZWVuIHJlc2V0LiAgVGhlIHJvdXRpbmUgbWFya3MgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgcm9vdCBodWIKKyAqIGFzIE5PVEFUVEFDSEVEIGFuZCBtYXJrcyBsb2dpY2FsIGNvbm5lY3QtY2hhbmdlIGV2ZW50cyBvbiB0aGVpciBwb3J0cy4KKyAqLwordm9pZCB1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YjsKKwlpbnQgcG9ydDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl93YXJuKCZyaGRldi0+ZGV2LCAicm9vdCBodWIgbG9zdCBwb3dlciBvciB3YXMgcmVzZXRcbiIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOworCWh1YiA9IGhkZXZfdG9faHViKHJoZGV2KTsKKwlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gcmhkZXYtPm1heGNoaWxkOyArK3BvcnQxKSB7CisJCWlmIChyaGRldi0+Y2hpbGRyZW5bcG9ydDEgLSAxXSkgeworCQkJcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRCgKKwkJCQkJcmhkZXYtPmNoaWxkcmVuW3BvcnQxIC0gMV0pOworCQkJc2V0X2JpdChwb3J0MSwgaHViLT5jaGFuZ2VfYml0cyk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKTsKKworI2VuZGlmCisKIHN0YXRpYyB2b2lkIGNob29zZV9hZGRyZXNzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludAkJZGV2bnVtOwpAQCAtMTA5OSwxNiArMTExMSwxMCBAQAogCSAqIHRoaXMgcXVpZXNjZXMgZXZlcnl0aW5nIGV4Y2VwdCBwZW5kaW5nIHVyYnMuCiAJICovCiAJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKLQotCS8qIGxvY2sgdGhlIGJ1cyBsaXN0IG9uIGJlaGFsZiBvZiBIQ0RzIHVucmVnaXN0ZXJpbmcgdGhlaXIgcm9vdCBodWJzICovCi0JaWYgKCF1ZGV2LT5wYXJlbnQpIHsKLQkJZG93bigmdXNiX2J1c19saXN0X2xvY2spOwotCQl1c2JfbG9ja19kZXZpY2UodWRldik7Ci0JfSBlbHNlCi0JCWRvd24oJnVkZXYtPnNlcmlhbGl6ZSk7Ci0KIAlkZXZfaW5mbyAoJnVkZXYtPmRldiwgIlVTQiBkaXNjb25uZWN0LCBhZGRyZXNzICVkXG4iLCB1ZGV2LT5kZXZudW0pOwogCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCiAJLyogRnJlZSB1cCBhbGwgdGhlIGNoaWxkcmVuIGJlZm9yZSB3ZSByZW1vdmUgdGhpcyBkZXZpY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWENISUxEUkVOOyBpKyspIHsKIAkJaWYgKHVkZXYtPmNoaWxkcmVuW2ldKQpAQCAtMTEzNiw1NCArMTE0MiwxMTIgQEAKIAkqcGRldiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CiAKLQlpZiAoIXVkZXYtPnBhcmVudCkgewotCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKLQkJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKLQl9IGVsc2UKLQkJdXAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRldi0+ZGV2KTsKIH0KIAorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwbHVyYWwoaW50IG4pCit7CisJcmV0dXJuIChuID09IDEgPyAiIiA6ICJzIik7Cit9CisKIHN0YXRpYyBpbnQgY2hvb3NlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0JaW50IGMsIGk7CisJaW50IGk7CisJdTE2IGRldnN0YXR1czsKKwlpbnQgYnVzX3Bvd2VyZWQ7CisJaW50IG51bV9jb25maWdzOworCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmMsICpiZXN0OwogCi0JLyogTk9URTogdGhpcyBzaG91bGQgaW50ZXJhY3Qgd2l0aCBodWIgcG93ZXIgYnVkZ2V0aW5nICovCisJLyogSWYgdGhpcyBmYWlscywgYXNzdW1lIHRoZSBkZXZpY2UgaXMgYnVzLXBvd2VyZWQgKi8KKwlkZXZzdGF0dXMgPSAwOworCXVzYl9nZXRfc3RhdHVzKHVkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsICZkZXZzdGF0dXMpOworCWxlMTZfdG9fY3B1cygmZGV2c3RhdHVzKTsKKwlidXNfcG93ZXJlZCA9ICgoZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQpKSA9PSAwKTsKKwlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJkZXZpY2UgaXMgJXMtcG93ZXJlZFxuIiwKKwkJCWJ1c19wb3dlcmVkID8gImJ1cyIgOiAic2VsZiIpOwogCi0JYyA9IHVkZXYtPmNvbmZpZ1swXS5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7Ci0JaWYgKHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpIHsKLQkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKLQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmRlc2M7CisJYmVzdCA9IE5VTEw7CisJYyA9IHVkZXYtPmNvbmZpZzsKKwludW1fY29uZmlncyA9IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOworCWZvciAoaSA9IDA7IGkgPCBudW1fY29uZmlnczsgKGkrKywgYysrKSkgeworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCSpkZXNjID0KKwkJCQkmYy0+aW50Zl9jYWNoZVswXS0+YWx0c2V0dGluZy0+ZGVzYzsKIAotCQkJLyogaGV1cmlzdGljOiAgTGludXggaXMgbW9yZSBsaWtlbHkgdG8gaGF2ZSBjbGFzcwotCQkJICogZHJpdmVycywgc28gYXZvaWQgdmVuZG9yLXNwZWNpZmljIGludGVyZmFjZXMuCi0JCQkgKi8KLQkJCWRlc2MgPSAmdWRldi0+Y29uZmlnW2ldLmludGZfY2FjaGVbMF0KLQkJCQkJLT5hbHRzZXR0aW5nLT5kZXNjOwotCQkJaWYgKGRlc2MtPmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMpCi0JCQkJY29udGludWU7Ci0JCQkvKiBDT01NLzIvYWxsIGlzIENEQyBBQ00sIGV4Y2VwdCAweGZmIGlzIE1TRlQgUk5ESVMuCi0JCQkgKiBNU0ZUIG5lZWRzIHRoaXMgdG8gYmUgdGhlIGZpcnN0IGNvbmZpZzsgbmV2ZXIgdXNlCi0JCQkgKiBpdCBhcyB0aGUgZGVmYXVsdCB1bmxlc3MgTGludXggaGFzIGhvc3Qtc2lkZSBSTkRJUy4KLQkJCSAqIEEgc2Vjb25kIGNvbmZpZyB3b3VsZCBpZGVhbGx5IGJlIENEQy1FdGhlcm5ldCwgYnV0Ci0JCQkgKiBtYXkgaW5zdGVhZCBiZSB0aGUgInZlbmRvciBzcGVjaWZpYyIgQ0RDIHN1YnNldAotCQkJICogbG9uZyB1c2VkIGJ5IEFSTSBMaW51eCBmb3Igc2ExMTAwIG9yIHB4YTI1NS4KLQkJCSAqLwotCQkJaWYgKGRlc2MtPmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQ09NTQotCQkJCQkmJiBkZXNjLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMgotCQkJCQkmJiBkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhmZikgewotCQkJCWMgPSB1ZGV2LT5jb25maWdbMV0uZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYyA9IHVkZXYtPmNvbmZpZ1tpXS5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisJCS8qCisJCSAqIEhQJ3MgVVNCIGJ1cy1wb3dlcmVkIGtleWJvYXJkIGhhcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uCisJCSAqIGFuZCBpdCBjbGFpbXMgdG8gYmUgc2VsZi1wb3dlcmVkOyBvdGhlciBkZXZpY2VzIG1heSBoYXZlCisJCSAqIHNpbWlsYXIgZXJyb3JzIGluIHRoZWlyIGRlc2NyaXB0b3JzLiAgSWYgdGhlIG5leHQgdGVzdAorCQkgKiB3ZXJlIGFsbG93ZWQgdG8gZXhlY3V0ZSwgc3VjaCBjb25maWd1cmF0aW9ucyB3b3VsZCBhbHdheXMKKwkJICogYmUgcmVqZWN0ZWQgYW5kIHRoZSBkZXZpY2VzIHdvdWxkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCQkgKi8KKyNpZiAwCisJCS8qIFJ1bGUgb3V0IHNlbGYtcG93ZXJlZCBjb25maWdzIGZvciBhIGJ1cy1wb3dlcmVkIGRldmljZSAqLworCQlpZiAoYnVzX3Bvd2VyZWQgJiYgKGMtPmRlc2MuYm1BdHRyaWJ1dGVzICYKKwkJCQkJVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSKSkKKwkJCWNvbnRpbnVlOworI2VuZGlmCisKKwkJLyoKKwkJICogVGhlIG5leHQgdGVzdCBtYXkgbm90IGJlIGFzIGVmZmVjdGl2ZSBhcyBpdCBzaG91bGQgYmUuCisJCSAqIFNvbWUgaHVicyBoYXZlIGVycm9ycyBpbiB0aGVpciBkZXNjcmlwdG9yLCBjbGFpbWluZworCQkgKiB0byBiZSBzZWxmLXBvd2VyZWQgd2hlbiB0aGV5IGFyZSByZWFsbHkgYnVzLXBvd2VyZWQuCisJCSAqIFdlIHdpbGwgb3ZlcmVzdGltYXRlIHRoZSBhbW91bnQgb2YgY3VycmVudCBzdWNoIGh1YnMKKwkJICogbWFrZSBhdmFpbGFibGUgZm9yIGVhY2ggcG9ydC4KKwkJICoKKwkJICogVGhpcyBpcyBhIGZhaXJseSBiZW5pZ24gc29ydCBvZiBmYWlsdXJlLiAgSXQgd29uJ3QKKwkJICogY2F1c2UgdXMgdG8gcmVqZWN0IGNvbmZpZ3VyYXRpb25zIHRoYXQgd2Ugc2hvdWxkIGhhdmUKKwkJICogYWNjZXB0ZWQuCisJCSAqLworCisJCS8qIFJ1bGUgb3V0IGNvbmZpZ3MgdGhhdCBkcmF3IHRvbyBtdWNoIGJ1cyBjdXJyZW50ICovCisJCWlmIChjLT5kZXNjLmJNYXhQb3dlciAqIDIgPiB1ZGV2LT5idXNfbUEpCisJCQljb250aW51ZTsKKworCQkvKiBJZiB0aGUgZmlyc3QgY29uZmlnJ3MgZmlyc3QgaW50ZXJmYWNlIGlzIENPTU0vMi8weGZmCisJCSAqIChNU0ZUIFJORElTKSwgcnVsZSBpdCBvdXQgdW5sZXNzIExpbnV4IGhhcyBob3N0LXNpZGUKKwkJICogUk5ESVMgc3VwcG9ydC4gKi8KKwkJaWYgKGkgPT0gMCAmJiBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0NPTU0KKwkJCQkmJiBkZXNjLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMgorCQkJCSYmIGRlc2MtPmJJbnRlcmZhY2VQcm90b2NvbCA9PSAweGZmKSB7CisjaWZuZGVmIENPTkZJR19VU0JfTkVUX1JORElTCisJCQljb250aW51ZTsKKyNlbHNlCisJCQliZXN0ID0gYzsKKyNlbmRpZgorCQl9CisKKwkJLyogRnJvbSB0aGUgcmVtYWluaW5nIGNvbmZpZ3MsIGNob29zZSB0aGUgZmlyc3Qgb25lIHdob3NlCisJCSAqIGZpcnN0IGludGVyZmFjZSBpcyBmb3IgYSBub24tdmVuZG9yLXNwZWNpZmljIGNsYXNzLgorCQkgKiBSZWFzb246IExpbnV4IGlzIG1vcmUgbGlrZWx5IHRvIGhhdmUgYSBjbGFzcyBkcml2ZXIKKwkJICogdGhhbiBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuICovCisJCWVsc2UgaWYgKHVkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzICE9CisJCQkJCQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMgJiYKKwkJCQlkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgIT0KKwkJCQkJCVVTQl9DTEFTU19WRU5ET1JfU1BFQykgeworCQkJYmVzdCA9IGM7CiAJCQlicmVhazsKIAkJfQotCQlkZXZfaW5mbygmdWRldi0+ZGV2LAotCQkJImNvbmZpZ3VyYXRpb24gIyVkIGNob3NlbiBmcm9tICVkIGNob2ljZXNcbiIsCi0JCQljLCB1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyk7CisKKwkJLyogSWYgYWxsIHRoZSByZW1haW5pbmcgY29uZmlncyBhcmUgdmVuZG9yLXNwZWNpZmljLAorCQkgKiBjaG9vc2UgdGhlIGZpcnN0IG9uZS4gKi8KKwkJZWxzZSBpZiAoIWJlc3QpCisJCQliZXN0ID0gYzsKIAl9Ci0JcmV0dXJuIGM7CisKKwlpZiAoYmVzdCkgeworCQlpID0gYmVzdC0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlOworCQlkZXZfaW5mbygmdWRldi0+ZGV2LAorCQkJImNvbmZpZ3VyYXRpb24gIyVkIGNob3NlbiBmcm9tICVkIGNob2ljZSVzXG4iLAorCQkJaSwgbnVtX2NvbmZpZ3MsIHBsdXJhbChudW1fY29uZmlncykpOworCX0gZWxzZSB7CisJCWkgPSAtMTsKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwKKwkJCSJubyBjb25maWd1cmF0aW9uIGNob3NlbiBmcm9tICVkIGNob2ljZSVzXG4iLAorCQkJbnVtX2NvbmZpZ3MsIHBsdXJhbChudW1fY29uZmlncykpOworCX0KKwlyZXR1cm4gaTsKIH0KIAogI2lmZGVmIERFQlVHCkBAIC0xMjEwLDggKzEyNzQsOCBAQAogICoKICAqIFRoaXMgaXMgY2FsbGVkIHdpdGggZGV2aWNlcyB3aGljaCBoYXZlIGJlZW4gZW51bWVyYXRlZCwgYnV0IG5vdCB5ZXQKICAqIGNvbmZpZ3VyZWQuICBUaGUgZGV2aWNlIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlLCBidXQgbm90IGRlc2NyaXB0b3JzCi0gKiBmb3IgYW55IGRldmljZSBjb25maWd1cmF0aW9uLiAgVGhlIGNhbGxlciBtdXN0IGhhdmUgbG9ja2VkIHVkZXYgYW5kCi0gKiBlaXRoZXIgdGhlIHBhcmVudCBodWIgKGlmIHVkZXYgaXMgYSBub3JtYWwgZGV2aWNlKSBvciBlbHNlIHRoZQorICogZm9yIGFueSBkZXZpY2UgY29uZmlndXJhdGlvbi4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGxvY2tlZCBlaXRoZXIKKyAqIHRoZSBwYXJlbnQgaHViIChpZiB1ZGV2IGlzIGEgbm9ybWFsIGRldmljZSkgb3IgZWxzZSB0aGUKICAqIHVzYl9idXNfbGlzdF9sb2NrIChpZiB1ZGV2IGlzIGEgcm9vdCBodWIpLiAgVGhlIHBhcmVudCdzIHBvaW50ZXIgdG8KICAqIHVkZXYgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQsIGJ1dCB1ZGV2IGlzIG5vdCB5ZXQgdmlzaWJsZSB0aHJvdWdoCiAgKiBzeXNmcyBvciBvdGhlciBmaWxlc3lzdGVtIGNvZGUuCkBAIC0xMjIxLDggKzEyODUsNyBAQAogICoKICAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KICAqCi0gKiBPbmx5IHRoZSBodWIgZHJpdmVyIHNob3VsZCBldmVyIGNhbGwgdGhpczsgcm9vdCBodWIgcmVnaXN0cmF0aW9uCi0gKiB1c2VzIGl0IGluZGlyZWN0bHkuCisgKiBPbmx5IHRoZSBodWIgZHJpdmVyIG9yIHJvb3QtaHViIHJlZ2lzdHJhciBzaG91bGQgZXZlciBjYWxsIHRoaXMuCiAgKi8KIGludCB1c2JfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKQEAgLTEyNjksMTUgKzEzMzIsOSBAQAogCQkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5jb25maWdbMF0uZGVzYy53VG90YWxMZW5ndGgpLAogCQkJCQlVU0JfRFRfT1RHLCAodm9pZCAqKikgJmRlc2MpID09IDApIHsKIAkJCWlmIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfT1RHX0hOUCkgewotCQkJCXVuc2lnbmVkCQlwb3J0MTsKKwkJCQl1bnNpZ25lZAkJcG9ydDEgPSB1ZGV2LT5wb3J0bnVtOwogCQkJCXN0cnVjdCB1c2JfZGV2aWNlCSpyb290ID0gdWRldi0+cGFyZW50OwogCQkJCQotCQkJCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSByb290LT5tYXhjaGlsZDsKLQkJCQkJCXBvcnQxKyspIHsKLQkJCQkJaWYgKHJvb3QtPmNoaWxkcmVuW3BvcnQxLTFdID09IHVkZXYpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0KIAkJCQlkZXZfaW5mbygmdWRldi0+ZGV2LAogCQkJCQkiRHVhbC1Sb2xlIE9URyBkZXZpY2Ugb24gJXNITlAgcG9ydFxuIiwKIAkJCQkJKHBvcnQxID09IGJ1cy0+b3RnX3BvcnQpCkBAIC0xMzMxLDI3ICsxMzg4LDI3IEBACiAJfQogCXVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzICh1ZGV2KTsKIAorCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKKwogCS8qIGNob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiB0aGF0IHJlZ2lzdGVycyB0aGUgaW50ZXJmYWNlcwogCSAqIHdpdGggdGhlIGRyaXZlciBjb3JlLCBhbmQgbGV0cyB1c2IgZGV2aWNlIGRyaXZlcnMgYmluZCB0byB0aGVtLgogCSAqLwogCWMgPSBjaG9vc2VfY29uZmlndXJhdGlvbih1ZGV2KTsKLQlpZiAoYyA8IDApCi0JCWRldl93YXJuKCZ1ZGV2LT5kZXYsCi0JCQkJImNhbid0IGNob29zZSBhbiBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiIpOwotCWVsc2UgeworCWlmIChjID49IDApIHsKIAkJZXJyID0gdXNiX3NldF9jb25maWd1cmF0aW9uKHVkZXYsIGMpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJjYW4ndCBzZXQgY29uZmlnICMlZCwgZXJyb3IgJWRcbiIsCiAJCQkJCWMsIGVycik7Ci0JCQl1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyh1ZGV2KTsKLQkJCWRldmljZV9kZWwoJnVkZXYtPmRldik7Ci0JCQlnb3RvIGZhaWw7CisJCQkvKiBUaGlzIG5lZWQgbm90IGJlIGZhdGFsLiAgVGhlIHVzZXIgY2FuIHRyeSB0bworCQkJICogc2V0IG90aGVyIGNvbmZpZ3VyYXRpb25zLiAqLwogCQl9CiAJfQogCiAJLyogVVNCIGRldmljZSBzdGF0ZSA9PSBjb25maWd1cmVkIC4uLiB1c2FibGUgKi8KIAl1c2Jfbm90aWZ5X2FkZF9kZXZpY2UodWRldik7CiAKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwogCXJldHVybiAwOwogCiBmYWlsOgpAQCAtMTY1NCwxNSArMTcxMSw5IEBACiBpbnQgdXNiX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCWludAlwb3J0MSwgc3RhdHVzOwotCi0JcG9ydDEgPSBsb2NrdHJlZSh1ZGV2KTsKLQlpZiAocG9ydDEgPCAwKQotCQlyZXR1cm4gcG9ydDE7Ci0KLQlzdGF0dXMgPSBfX3VzYl9zdXNwZW5kX2RldmljZSh1ZGV2LCBwb3J0MSk7Ci0JdXNiX3VubG9ja19kZXZpY2UodWRldik7Ci0JcmV0dXJuIHN0YXR1czsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwgdWRldi0+cG9ydG51bSk7CiAjZWxzZQogCS8qIE5PVEU6ICB1ZGV2LT5zdGF0ZSB1bmNoYW5nZWQsIGl0J3Mgbm90IGx5aW5nIC4uLiAqLwogCXVkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfU1VTUEVORDsKQEAgLTE2OTQsMTMgKzE3NDUsMTQgQEAKIAl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCB1ZGV2LT5hY3Rjb25maWcKIAkJCT8gVVNCX1NUQVRFX0NPTkZJR1VSRUQKIAkJCTogVVNCX1NUQVRFX0FERFJFU1MpOworCXVkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAKICAJLyogMTAuNS40LjUgc2F5cyBiZSBzdXJlIGRldmljZXMgaW4gdGhlIHRyZWUgYXJlIHN0aWxsIHRoZXJlLgogIAkgKiBGb3Igbm93IGxldCdzIGFzc3VtZSB0aGUgZGV2aWNlIGRpZG4ndCBnbyBjcmF6eSBvbiByZXN1bWUsCiAJICogYW5kIGRldmljZSBkcml2ZXJzIHdpbGwga25vdyBhYm91dCBhbnkgcmVzdW1lIHF1aXJrcy4KIAkgKi8KIAlzdGF0dXMgPSB1c2JfZ2V0X3N0YXR1cyh1ZGV2LCBVU0JfUkVDSVBfREVWSUNFLCAwLCAmZGV2c3RhdHVzKTsKLQlpZiAoc3RhdHVzIDwgMCkKKwlpZiAoc3RhdHVzIDwgMikKIAkJZGV2X2RiZygmdWRldi0+ZGV2LAogCQkJImdvbmUgYWZ0ZXIgdXNiIHJlc3VtZT8gc3RhdHVzICVkXG4iLAogCQkJc3RhdHVzKTsKQEAgLTE3MDksNyArMTc2MSw3IEBACiAJCWludAkJKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKik7CiAKIAkJbGUxNl90b19jcHVzKCZkZXZzdGF0dXMpOwotCQlpZiAoZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKQorCQlpZiAoKGRldnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkpCiAJCQkJJiYgdWRldi0+cGFyZW50KSB7CiAJCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2codWRldiwKIAkJCQkJdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLApAQCAtMTcyOSw4ICsxNzgxLDE0IEBACiAJCSAqIG1heSBoYXZlIGEgY2hpbGQgcmVzdW1lIGV2ZW50IHRvIGRlYWwgd2l0aCBzb29uCiAJCSAqLwogCQlyZXN1bWUgPSB1ZGV2LT5kZXYuYnVzLT5yZXN1bWU7Ci0JCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykKLQkJCSh2b2lkKSByZXN1bWUoJnVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldLT5kZXYpOworCQlmb3IgKGkgPSAwOyBpIDwgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQkJCSZ1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXS0+ZGV2OworCisJCQlkb3duKCZkZXYtPnNlbSk7CisJCQkodm9pZCkgcmVzdW1lKGRldik7CisJCQl1cCgmZGV2LT5zZW0pOworCQl9CiAJCXN0YXR1cyA9IDA7CiAKIAl9IGVsc2UgaWYgKHVkZXYtPmRldm51bSA8PSAwKSB7CkBAIC0xODEzLDExICsxODcxLDEwIEBACiAgKi8KIGludCB1c2JfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKLQlpbnQJcG9ydDEsIHN0YXR1czsKKwlpbnQJc3RhdHVzOwogCi0JcG9ydDEgPSBsb2NrdHJlZSh1ZGV2KTsKLQlpZiAocG9ydDEgPCAwKQotCQlyZXR1cm4gcG9ydDE7CisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKICNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKIAkvKiBzZWxlY3RpdmUgcmVzdW1lIG9mIG9uZSBkb3duc3RyZWFtIGh1Yi10by1kZXZpY2UgcG9ydCAqLwpAQCAtMTgyNiw3ICsxODgzLDcgQEAKIAkJCS8vIE5PVEUgc3dzdXNwIG1heSBib3JrIHVzLCBkZXZpY2Ugc3RhdGUgYmVpbmcgd3JvbmcuLi4KIAkJCS8vIE5PVEUgdGhpcyBmYWlscyBpZiBwYXJlbnQgaXMgYWxzbyBzdXNwZW5kZWQuLi4KIAkJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc3VtZShoZGV2X3RvX2h1Yih1ZGV2LT5wYXJlbnQpLAotCQkJCQlwb3J0MSwgdWRldik7CisJCQkJCXVkZXYtPnBvcnRudW0sIHVkZXYpOwogCQl9IGVsc2UKIAkJCXN0YXR1cyA9IDA7CiAJfSBlbHNlCkBAIC0xODM2LDEzICsxODkzLDExIEBACiAJCWRldl9kYmcoJnVkZXYtPmRldiwgImNhbid0IHJlc3VtZSwgc3RhdHVzICVkXG4iLAogCQkJc3RhdHVzKTsKIAotCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwotCiAJLyogcmViaW5kIGRyaXZlcnMgdGhhdCBoYWQgbm8gc3VzcGVuZCgpICovCiAJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCXVzYl9sb2NrX2FsbF9kZXZpY2VzKCk7CisJCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCQlidXNfcmVzY2FuX2RldmljZXMoJnVzYl9idXNfdHlwZSk7Ci0JCXVzYl91bmxvY2tfYWxsX2RldmljZXMoKTsKKwkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTg1NiwxNCArMTkxMSwxNCBAQAogCS8qIGRvbid0IHJlcGVhdCBSRVNVTUUgc2VxdWVuY2UgaWYgdGhpcyBkZXZpY2UKIAkgKiB3YXMgYWxyZWFkeSB3b2tlbiB1cCBieSBzb21lIG90aGVyIHRhc2sKIAkgKi8KLQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOworCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKIAlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgewogCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUUgKHdha2V1cClcbiIpOwogCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLwogCQltc2xlZXAoMTApOwogCQlzdGF0dXMgPSBmaW5pc2hfZGV2aWNlX3Jlc3VtZSh1ZGV2KTsKIAl9Ci0JdXAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAjZW5kaWYKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTk2NCw3ICsyMDE5LDcgQEAKIAogCQlpZiAoIXVkZXYgfHwgc3RhdHVzIDwgMCkKIAkJCWNvbnRpbnVlOwotCQlkb3duICgmdWRldi0+c2VyaWFsaXplKTsKKwkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwogCQlpZiAocG9ydHN0YXQgJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpCiAJCQlzdGF0dXMgPSBodWJfcG9ydF9yZXN1bWUoaHViLCBwb3J0MSwgdWRldik7CiAJCWVsc2UgewpAQCAtMTk3NSw3ICsyMDMwLDcgQEAKIAkJCQlodWJfcG9ydF9sb2dpY2FsX2Rpc2Nvbm5lY3QoaHViLCBwb3J0MSk7CiAJCQl9CiAJCX0KLQkJdXAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCX0KIAl9CiAjZW5kaWYKQEAgLTIzNTksMzkgKzI0MTQsMzYgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlpbnQgcmVtYWluaW5nOwotCXVuc2lnbmVkIGk7CisJaW50IHBvcnQxOwogCi0JcmVtYWluaW5nID0gaHViLT5wb3dlcl9idWRnZXQ7Ci0JaWYgKCFyZW1haW5pbmcpCQkvKiBzZWxmLXBvd2VyZWQgKi8KKwlpZiAoIWh1Yi0+bGltaXRlZF9wb3dlcikKIAkJcmV0dXJuIDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGRldi0+bWF4Y2hpbGQ7IGkrKykgewotCQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGhkZXYtPmNoaWxkcmVuW2ldOwotCQlpbnQJCQlkZWx0YSwgY2VpbGluZzsKKwlyZW1haW5pbmcgPSBoZGV2LT5idXNfbUEgLSBodWItPmRlc2NyaXB0b3ItPmJIdWJDb250ckN1cnJlbnQ7CisJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGhkZXYtPm1heGNoaWxkOyArK3BvcnQxKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaGRldi0+Y2hpbGRyZW5bcG9ydDEgLSAxXTsKKwkJaW50CQkJZGVsdGE7CiAKIAkJaWYgKCF1ZGV2KQogCQkJY29udGludWU7CiAKLQkJLyogMTAwbUEgcGVyLXBvcnQgY2VpbGluZywgb3IgOG1BIGZvciBPVEcgcG9ydHMgKi8KLQkJaWYgKGkgIT0gKHVkZXYtPmJ1cy0+b3RnX3BvcnQgLSAxKSB8fCBoZGV2LT5wYXJlbnQpCi0JCQljZWlsaW5nID0gNTA7Ci0JCWVsc2UKLQkJCWNlaWxpbmcgPSA0OwotCisJCS8qIFVuY29uZmlndXJlZCBkZXZpY2VzIG1heSBub3QgdXNlIG1vcmUgdGhhbiAxMDBtQSwKKwkJICogb3IgOG1BIGZvciBPVEcgcG9ydHMgKi8KIAkJaWYgKHVkZXYtPmFjdGNvbmZpZykKLQkJCWRlbHRhID0gdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJNYXhQb3dlcjsKKwkJCWRlbHRhID0gdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJNYXhQb3dlciAqIDI7CisJCWVsc2UgaWYgKHBvcnQxICE9IHVkZXYtPmJ1cy0+b3RnX3BvcnQgfHwgaGRldi0+cGFyZW50KQorCQkJZGVsdGEgPSAxMDA7CiAJCWVsc2UKLQkJCWRlbHRhID0gY2VpbGluZzsKLQkJLy8gZGV2X2RiZygmdWRldi0+ZGV2LCAiYnVkZ2V0ZWQgJWRtQVxuIiwgMiAqIGRlbHRhKTsKLQkJaWYgKGRlbHRhID4gY2VpbGluZykKLQkJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICIlZG1BIG92ZXIgJWRtQSBidWRnZXQhXG4iLAotCQkJCTIgKiAoZGVsdGEgLSBjZWlsaW5nKSwgMiAqIGNlaWxpbmcpOworCQkJZGVsdGEgPSA4OworCQlpZiAoZGVsdGEgPiBodWItPm1BX3Blcl9wb3J0KQorCQkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIiVkbUEgaXMgb3ZlciAldW1BIGJ1ZGdldCAiCisJCQkJCSJmb3IgcG9ydCAlZCFcbiIsCisJCQkJCWRlbHRhLCBodWItPm1BX3Blcl9wb3J0LCBwb3J0MSk7CiAJCXJlbWFpbmluZyAtPSBkZWx0YTsKIAl9CiAJaWYgKHJlbWFpbmluZyA8IDApIHsKLQkJZGV2X3dhcm4oaHViLT5pbnRmZGV2LAotCQkJIiVkbUEgb3ZlciBwb3dlciBidWRnZXQhXG4iLAotCQkJLTIgKiByZW1haW5pbmcpOworCQlkZXZfd2FybihodWItPmludGZkZXYsICIlZG1BIG92ZXIgcG93ZXIgYnVkZ2V0IVxuIiwKKwkJCS0gcmVtYWluaW5nKTsKIAkJcmVtYWluaW5nID0gMDsKIAl9CiAJcmV0dXJuIHJlbWFpbmluZzsKQEAgLTI0ODYsNyArMjUzOCw4IEBACiAKIAkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX1BPV0VSRUQpOwogCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotIAorIAkJdWRldi0+YnVzX21BID0gaHViLT5tQV9wZXJfcG9ydDsKKwogCQkvKiBzZXQgdGhlIGFkZHJlc3MgKi8KIAkJY2hvb3NlX2FkZHJlc3ModWRldik7CiAJCWlmICh1ZGV2LT5kZXZudW0gPD0gMCkgewpAQCAtMjUwNiwxNiArMjU1OSwxNiBAQAogCQkgKiBvbiB0aGUgcGFyZW50LgogCQkgKi8KIAkJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IFVTQl9DTEFTU19IVUIKLQkJCQkmJiBodWItPnBvd2VyX2J1ZGdldCkgeworCQkJCSYmIHVkZXYtPmJ1c19tQSA8PSAxMDApIHsKIAkJCXUxNglkZXZzdGF0OwogCiAJCQlzdGF0dXMgPSB1c2JfZ2V0X3N0YXR1cyh1ZGV2LCBVU0JfUkVDSVBfREVWSUNFLCAwLAogCQkJCQkmZGV2c3RhdCk7Ci0JCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJaWYgKHN0YXR1cyA8IDIpIHsKIAkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJnZXQgc3RhdHVzICVkID9cbiIsIHN0YXR1cyk7CiAJCQkJZ290byBsb29wX2Rpc2FibGU7CiAJCQl9Ci0JCQljcHVfdG9fbGUxNnMoJmRldnN0YXQpOworCQkJbGUxNl90b19jcHVzKCZkZXZzdGF0KTsKIAkJCWlmICgoZGV2c3RhdCAmICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKSkgPT0gMCkgewogCQkJCWRldl9lcnIoJnVkZXYtPmRldiwKIAkJCQkJImNhbid0IGNvbm5lY3QgYnVzLXBvd2VyZWQgaHViICIKQEAgLTI1NDAsNyArMjU5Myw2IEBACiAJCSAqIHVkZXYgYmVjb21lcyBnbG9iYWxseSBhY2Nlc3NpYmxlLCBhbHRob3VnaCBwcmVzdW1hYmx5CiAJCSAqIG5vIG9uZSB3aWxsIGxvb2sgYXQgaXQgdW50aWwgaGRldiBpcyB1bmxvY2tlZC4KIAkJICovCi0JCWRvd24gKCZ1ZGV2LT5zZXJpYWxpemUpOwogCQlzdGF0dXMgPSAwOwogCiAJCS8qIFdlIG11c3RuJ3QgYWRkIG5ldyBkZXZpY2VzIGlmIHRoZSBwYXJlbnQgaHViIGhhcwpAQCAtMjU2NCwxNSArMjYxNiwxMiBAQAogCQkJfQogCQl9CiAKLQkJdXAgKCZ1ZGV2LT5zZXJpYWxpemUpOwogCQlpZiAoc3RhdHVzKQogCQkJZ290byBsb29wX2Rpc2FibGU7CiAKIAkJc3RhdHVzID0gaHViX3Bvd2VyX3JlbWFpbmluZyhodWIpOwogCQlpZiAoc3RhdHVzKQotCQkJZGV2X2RiZyhodWJfZGV2LAotCQkJCSIlZG1BIHBvd2VyIGJ1ZGdldCBsZWZ0XG4iLAotCQkJCTIgKiBzdGF0dXMpOworCQkJZGV2X2RiZyhodWJfZGV2LCAiJWRtQSBwb3dlciBidWRnZXQgbGVmdFxuIiwgc3RhdHVzKTsKIAogCQlyZXR1cm47CiAKQEAgLTI2NDgsNiArMjY5Nyw4IEBACiAJCWlmIChpKSB7CiAJCQlkcG1fcnVudGltZV9yZXN1bWUoJmhkZXYtPmRldik7CiAJCQlkcG1fcnVudGltZV9yZXN1bWUoJmludGYtPmRldik7CisJCQl1c2JfcHV0X2ludGYoaW50Zik7CisJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIExvY2sgdGhlIGRldmljZSwgdGhlbiBjaGVjayB0byBzZWUgaWYgd2Ugd2VyZQpAQCAtMjY2MSw3ICsyNzEyLDcgQEAKIAogCQkvKiBJZiB0aGUgaHViIGhhcyBkaWVkLCBjbGVhbiB1cCBhZnRlciBpdCAqLwogCQlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7Ci0JCQlodWJfcHJlX3Jlc2V0KGh1Yik7CisJCQlodWJfcHJlX3Jlc2V0KGh1YiwgMCk7CiAJCQlnb3RvIGxvb3A7CiAJCX0KIApAQCAtMjc4NCw2ICsyODM1LDExIEBACiAJCQlpZiAoaHViY2hhbmdlICYgSFVCX0NIQU5HRV9MT0NBTF9QT1dFUikgewogCQkJCWRldl9kYmcgKGh1Yl9kZXYsICJwb3dlciBjaGFuZ2VcbiIpOwogCQkJCWNsZWFyX2h1Yl9mZWF0dXJlKGhkZXYsIENfSFVCX0xPQ0FMX1BPV0VSKTsKKwkJCQlpZiAoaHVic3RhdHVzICYgSFVCX1NUQVRVU19MT0NBTF9QT1dFUikKKwkJCQkJLyogRklYTUU6IElzIHRoaXMgYWx3YXlzIHRydWU/ICovCisJCQkJCWh1Yi0+bGltaXRlZF9wb3dlciA9IDA7CisJCQkJZWxzZQorCQkJCQlodWItPmxpbWl0ZWRfcG93ZXIgPSAxOwogCQkJfQogCQkJaWYgKGh1YmNoYW5nZSAmIEhVQl9DSEFOR0VfT1ZFUkNVUlJFTlQpIHsKIAkJCQlkZXZfZGJnIChodWJfZGV2LCAib3ZlcmN1cnJlbnQgY2hhbmdlXG4iKTsKQEAgLTI4MzIsNyArMjg4OCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGh1Yl9pZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBodWJfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJodWIiLAogCS5wcm9iZSA9CWh1Yl9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CWh1Yl9kaXNjb25uZWN0LApAQCAtMjk0NCw3ICsyOTk5LDggQEAKIAlzdHJ1Y3QgdXNiX2h1YgkJCSpwYXJlbnRfaHViOwogCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IJZGVzY3JpcHRvciA9IHVkZXYtPmRlc2NyaXB0b3I7CiAJc3RydWN0IHVzYl9odWIJCQkqaHViID0gTlVMTDsKLQlpbnQgCQkJCWksIHJldCA9IDAsIHBvcnQxID0gLTE7CisJaW50IAkJCQlpLCByZXQgPSAwOworCWludAkJCQlwb3J0MSA9IHVkZXYtPnBvcnRudW07CiAKIAlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEIHx8CiAJCQl1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKSB7CkBAIC0yOTU4LDE4ICszMDE0LDYgQEAKIAkJZGV2X2RiZygmdWRldi0+ZGV2LCAiJXMgZm9yIHJvb3QgaHViIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSVNESVI7CiAJfQotCi0JZm9yIChpID0gMDsgaSA8IHBhcmVudF9oZGV2LT5tYXhjaGlsZDsgaSsrKQotCQlpZiAocGFyZW50X2hkZXYtPmNoaWxkcmVuW2ldID09IHVkZXYpIHsKLQkJCXBvcnQxID0gaSArIDE7Ci0JCQlicmVhazsKLQkJfQotCi0JaWYgKHBvcnQxIDwgMCkgewotCQkvKiBJZiB0aGlzIGV2ZXIgaGFwcGVucywgaXQncyB2ZXJ5IGJhZCAqLwotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJDYW4ndCBsb2NhdGUgZGV2aWNlJ3MgcG9ydCFcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9CiAJcGFyZW50X2h1YiA9IGhkZXZfdG9faHViKHBhcmVudF9oZGV2KTsKIAogCS8qIElmIHdlJ3JlIHJlc2V0dGluZyBhbiBhY3RpdmUgaHViLCB0YWtlIHNvbWUgc3BlY2lhbCBhY3Rpb25zICovCkBAIC0yOTc3LDcgKzMwMjEsNyBAQAogCQkJdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0tPmRldi5kcml2ZXIgPT0KIAkJCQkmaHViX2RyaXZlci5kcml2ZXIgJiYKIAkJCShodWIgPSBoZGV2X3RvX2h1Yih1ZGV2KSkgIT0gTlVMTCkgewotCQlodWJfcHJlX3Jlc2V0KGh1Yik7CisJCWh1Yl9wcmVfcmVzZXQoaHViLCAwKTsKIAl9CiAKIAlzZXRfYml0KHBvcnQxLCBwYXJlbnRfaHViLT5idXN5X2JpdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmgKaW5kZXggYmYyM2Y4OS4uMjlkNWY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCkBAIC0yMjAsOCArMjIwLDkgQEAKIAlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICpkZXNjcmlwdG9yOwkvKiBjbGFzcyBkZXNjcmlwdG9yICovCiAJc3RydWN0IHVzYl90dAkJdHQ7CQkvKiBUcmFuc2FjdGlvbiBUcmFuc2xhdG9yICovCiAKLQl1OAkJCXBvd2VyX2J1ZGdldDsJLyogaW4gMm1BIHVuaXRzOyBvciB6ZXJvICovCisJdW5zaWduZWQJCW1BX3Blcl9wb3J0OwkvKiBjdXJyZW50IGZvciBlYWNoIGNoaWxkICovCiAKKwl1bnNpZ25lZAkJbGltaXRlZF9wb3dlcjoxOwogCXVuc2lnbmVkCQlxdWllc2Npbmc6MTsKIAl1bnNpZ25lZAkJYWN0aXZhdGluZzoxOwogCXVuc2lnbmVkCQlyZXN1bWVfcm9vdF9odWI6MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggZmU3NGY5OS4uMzE5ZGUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTEzODcsNiArMTM4NywxMiBAQAogCWlmIChkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTKQogCQl1c2JfZGlzYWJsZV9kZXZpY2UgKGRldiwgMSk7CS8vIFNraXAgZXAwCiAKKwlpID0gZGV2LT5idXNfbUEgLSBjcC0+ZGVzYy5iTWF4UG93ZXIgKiAyOworCWlmIChpIDwgMCkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAibmV3IGNvbmZpZyAjJWQgZXhjZWVkcyBwb3dlciAiCisJCQkJImxpbWl0IGJ5ICVkbUFcbiIsCisJCQkJY29uZmlndXJhdGlvbiwgLWkpOworCiAJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKIAkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIDAsIGNvbmZpZ3VyYXRpb24sIDAsCiAJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IGU4MGVmOTQuLjU2YTM1MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ3LDE2NSArNDYsNyBAQAogY29uc3QgY2hhciAqdXNiY29yZV9uYW1lID0gInVzYmNvcmUiOwogCiBzdGF0aWMgaW50IG5vdXNiOwkvKiBEaXNhYmxlIFVTQiB3aGVuIGJ1aWx0IGludG8ga2VybmVsIGltYWdlICovCi0JCQkvKiBOb3QgaG9ub3JlZCBvbiBtb2R1bGFyIGJ1aWxkICovCiAKLXN0YXRpYyBERUNMQVJFX1JXU0VNKHVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Ci0KLQotc3RhdGljIGludCBnZW5lcmljX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IGdlbmVyaWNfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7Ci0KLQkvKiBpZiB0aGlzIGlzIG9ubHkgYW4gdW5iaW5kLCBub3QgYSBwaHlzaWNhbCBkaXNjb25uZWN0LCB0aGVuCi0JICogdW5jb25maWd1cmUgdGhlIGRldmljZSAqLwotCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKLQkJdXNiX3NldF9jb25maWd1cmF0aW9uKHVkZXYsIDApOwotCi0JLyogaW4gY2FzZSB0aGUgY2FsbCBmYWlsZWQgb3IgdGhlIGRldmljZSB3YXMgc3VzcGVuZGVkICovCi0JaWYgKHVkZXYtPnN0YXRlID49IFVTQl9TVEFURV9DT05GSUdVUkVEKQotCQl1c2JfZGlzYWJsZV9kZXZpY2UodWRldiwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1c2JfZ2VuZXJpY19kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPQkidXNiIiwKLQkuYnVzID0gJnVzYl9idXNfdHlwZSwKLQkucHJvYmUgPSBnZW5lcmljX3Byb2JlLAotCS5yZW1vdmUgPSBnZW5lcmljX3JlbW92ZSwKLX07Ci0KLXN0YXRpYyBpbnQgdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGE7Ci0KLS8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggdXNiX2J1c190eXBlLnN1YnN5cyB3cml0ZWxvY2sgKi8KLXN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKiBpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JfZHJpdmVyICogZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOwotCWludCBlcnJvciA9IC1FTk9ERVY7Ci0KLQlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFkcml2ZXItPnByb2JlKQotCQlyZXR1cm4gZXJyb3I7Ci0JLyogRklYTUUgd2UnZCBtdWNoIHByZWZlciB0byBqdXN0IHJlc3VtZSBpdCAuLi4gKi8KLQlpZiAoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKS0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKLQkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7Ci0KLQlpZCA9IHVzYl9tYXRjaF9pZCAoaW50ZiwgZHJpdmVyLT5pZF90YWJsZSk7Ci0JaWYgKGlkKSB7Ci0JCWRldl9kYmcgKGRldiwgIiVzIC0gZ290IGlkXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCS8qIEludGVyZmFjZSAicG93ZXIgc3RhdGUiIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaGFyZHdhcmUKLQkJICogc3RhdGUgd2hhdHNvZXZlci4gIFdlIHVzZSBpdCB0byByZWNvcmQgd2hlbiBpdCdzIGJvdW5kIHRvCi0JCSAqIGEgZHJpdmVyIHRoYXQgbWF5IHN0YXJ0IEkvMDogIGl0J3Mgbm90IGZyb3plbi9xdWllc2NlZC4KLQkJICovCi0JCW1hcmtfYWN0aXZlKGludGYpOwotCQlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JJTkRJTkc7Ci0JCWVycm9yID0gZHJpdmVyLT5wcm9iZSAoaW50ZiwgaWQpOwotCQlpZiAoZXJyb3IpIHsKLQkJCW1hcmtfcXVpZXNjZWQoaW50Zik7Ci0JCQlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7Ci0JCX0gZWxzZQotCQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CT1VORDsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggdXNiX2J1c190eXBlLnN1YnN5cyB3cml0ZWxvY2sgKi8KLXN0YXRpYyBpbnQgdXNiX3VuYmluZF9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOwotCi0JaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJJTkRJTkc7Ci0KLQkvKiByZWxlYXNlIGFsbCB1cmJzIGZvciB0aGlzIGludGVyZmFjZSAqLwotCXVzYl9kaXNhYmxlX2ludGVyZmFjZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmKTsKLQotCWlmIChkcml2ZXIgJiYgZHJpdmVyLT5kaXNjb25uZWN0KQotCQlkcml2ZXItPmRpc2Nvbm5lY3QoaW50Zik7Ci0KLQkvKiByZXNldCBvdGhlciBpbnRlcmZhY2Ugc3RhdGUgKi8KLQl1c2Jfc2V0X2ludGVyZmFjZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAotCQkJaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCi0JCQkwKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CT1VORDsKLQltYXJrX3F1aWVzY2VkKGludGYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogdXNiX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBVU0IgZHJpdmVyCi0gKiBAbmV3X2RyaXZlcjogVVNCIG9wZXJhdGlvbnMgZm9yIHRoZSBkcml2ZXIKLSAqCi0gKiBSZWdpc3RlcnMgYSBVU0IgZHJpdmVyIHdpdGggdGhlIFVTQiBjb3JlLiAgVGhlIGxpc3Qgb2YgdW5hdHRhY2hlZAotICogaW50ZXJmYWNlcyB3aWxsIGJlIHJlc2Nhbm5lZCB3aGVuZXZlciBhIG5ldyBkcml2ZXIgaXMgYWRkZWQsIGFsbG93aW5nCi0gKiB0aGUgbmV3IGRyaXZlciB0byBhdHRhY2ggdG8gYW55IHJlY29nbml6ZWQgZGV2aWNlcy4KLSAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgYW5kIDAgb24gc3VjY2Vzcy4KLSAqIAotICogTk9URTogaWYgeW91IHdhbnQgeW91ciBkcml2ZXIgdG8gdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLCB5b3UgbXVzdCBjYWxsCi0gKiB1c2JfcmVnaXN0ZXJfZGV2KCkgdG8gZW5hYmxlIHRoYXQgZnVuY3Rpb25hbGl0eS4gIFRoaXMgZnVuY3Rpb24gbm8gbG9uZ2VyCi0gKiB0YWtlcyBjYXJlIG9mIHRoYXQuCi0gKi8KLWludCB1c2JfcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKm5ld19kcml2ZXIpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAobm91c2IpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbmV3X2RyaXZlci0+ZHJpdmVyLm5hbWUgPSAoY2hhciAqKW5ld19kcml2ZXItPm5hbWU7Ci0JbmV3X2RyaXZlci0+ZHJpdmVyLmJ1cyA9ICZ1c2JfYnVzX3R5cGU7Ci0JbmV3X2RyaXZlci0+ZHJpdmVyLnByb2JlID0gdXNiX3Byb2JlX2ludGVyZmFjZTsKLQluZXdfZHJpdmVyLT5kcml2ZXIucmVtb3ZlID0gdXNiX3VuYmluZF9pbnRlcmZhY2U7Ci0JbmV3X2RyaXZlci0+ZHJpdmVyLm93bmVyID0gbmV3X2RyaXZlci0+b3duZXI7Ci0KLQl1c2JfbG9ja19hbGxfZGV2aWNlcygpOwotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbmV3X2RyaXZlci0+ZHJpdmVyKTsKLQl1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKCk7Ci0KLQlpZiAoIXJldHZhbCkgewotCQlwcl9pbmZvKCIlczogcmVnaXN0ZXJlZCBuZXcgZHJpdmVyICVzXG4iLAotCQkJdXNiY29yZV9uYW1lLCBuZXdfZHJpdmVyLT5uYW1lKTsKLQkJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsCi0JCQl1c2Jjb3JlX25hbWUsIHJldHZhbCwgbmV3X2RyaXZlci0+bmFtZSk7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqCi0gKiB1c2JfZGVyZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBVU0IgZHJpdmVyCi0gKiBAZHJpdmVyOiBVU0Igb3BlcmF0aW9ucyBvZiB0aGUgZHJpdmVyIHRvIHVucmVnaXN0ZXIKLSAqIENvbnRleHQ6IG11c3QgYmUgYWJsZSB0byBzbGVlcAotICoKLSAqIFVubGlua3MgdGhlIHNwZWNpZmllZCBkcml2ZXIgZnJvbSB0aGUgaW50ZXJuYWwgVVNCIGRyaXZlciBsaXN0LgotICogCi0gKiBOT1RFOiBJZiB5b3UgY2FsbGVkIHVzYl9yZWdpc3Rlcl9kZXYoKSwgeW91IHN0aWxsIG5lZWQgdG8gY2FsbAotICogdXNiX2RlcmVnaXN0ZXJfZGV2KCkgdG8gY2xlYW4gdXAgeW91ciBkcml2ZXIncyBhbGxvY2F0ZWQgbWlub3IgbnVtYmVycywKLSAqIHRoaXMgKiBjYWxsIHdpbGwgbm8gbG9uZ2VyIGRvIGl0IGZvciB5b3UuCi0gKi8KLXZvaWQgdXNiX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcikKLXsKLQlwcl9pbmZvKCIlczogZGVyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIHVzYmNvcmVfbmFtZSwgZHJpdmVyLT5uYW1lKTsKLQotCXVzYl9sb2NrX2FsbF9kZXZpY2VzKCk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIgKCZkcml2ZXItPmRyaXZlcik7Ci0JdXNiX3VubG9ja19hbGxfZGV2aWNlcygpOwotCi0JdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKLX0KIAogLyoqCiAgKiB1c2JfaWZudW1fdG9faWYgLSBnZXQgdGhlIGludGVyZmFjZSBvYmplY3Qgd2l0aCBhIGdpdmVuIGludGVyZmFjZSBudW1iZXIKQEAgLTM1MSwxNTIgKzE5MiwyMyBAQAogCWlmYWNlLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CiAJbWFya19xdWllc2NlZChpZmFjZSk7CiB9Ci0KLS8qKgotICogdXNiX21hdGNoX2lkIC0gZmluZCBmaXJzdCB1c2JfZGV2aWNlX2lkIG1hdGNoaW5nIGRldmljZSBvciBpbnRlcmZhY2UKLSAqIEBpbnRlcmZhY2U6IHRoZSBpbnRlcmZhY2Ugb2YgaW50ZXJlc3QKLSAqIEBpZDogYXJyYXkgb2YgdXNiX2RldmljZV9pZCBzdHJ1Y3R1cmVzLCB0ZXJtaW5hdGVkIGJ5IHplcm8gZW50cnkKLSAqCi0gKiB1c2JfbWF0Y2hfaWQgc2VhcmNoZXMgYW4gYXJyYXkgb2YgdXNiX2RldmljZV9pZCdzIGFuZCByZXR1cm5zCi0gKiB0aGUgZmlyc3Qgb25lIG1hdGNoaW5nIHRoZSBkZXZpY2Ugb3IgaW50ZXJmYWNlLCBvciBudWxsLgotICogVGhpcyBpcyB1c2VkIHdoZW4gYmluZGluZyAob3IgcmViaW5kaW5nKSBhIGRyaXZlciB0byBhbiBpbnRlcmZhY2UuCi0gKiBNb3N0IFVTQiBkZXZpY2UgZHJpdmVycyB3aWxsIHVzZSB0aGlzIGluZGlyZWN0bHksIHRocm91Z2ggdGhlIHVzYiBjb3JlLAotICogYnV0IHNvbWUgbGF5ZXJlZCBkcml2ZXIgZnJhbWV3b3JrcyB1c2UgaXQgZGlyZWN0bHkuCi0gKiBUaGVzZSBkZXZpY2UgdGFibGVzIGFyZSBleHBvcnRlZCB3aXRoIE1PRFVMRV9ERVZJQ0VfVEFCTEUsIHRocm91Z2gKLSAqIG1vZHV0aWxzIGFuZCAibW9kdWxlcy51c2JtYXAiLCB0byBzdXBwb3J0IHRoZSBkcml2ZXIgbG9hZGluZwotICogZnVuY3Rpb25hbGl0eSBvZiBVU0IgaG90cGx1Z2dpbmcuCi0gKgotICogV2hhdCBNYXRjaGVzOgotICoKLSAqIFRoZSAibWF0Y2hfZmxhZ3MiIGVsZW1lbnQgaW4gYSB1c2JfZGV2aWNlX2lkIGNvbnRyb2xzIHdoaWNoCi0gKiBtZW1iZXJzIGFyZSB1c2VkLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgdGhlCi0gKiB2YWx1ZSBpbiB0aGUgZGV2aWNlX2lkIG11c3QgbWF0Y2ggaXRzIGNvcnJlc3BvbmRpbmcgbWVtYmVyCi0gKiBpbiB0aGUgZGV2aWNlIG9yIGludGVyZmFjZSBkZXNjcmlwdG9yLCBvciBlbHNlIHRoZSBkZXZpY2VfaWQKLSAqIGRvZXMgbm90IG1hdGNoLgotICoKLSAqICJkcml2ZXJfaW5mbyIgaXMgbm9ybWFsbHkgdXNlZCBvbmx5IGJ5IGRldmljZSBkcml2ZXJzLAotICogYnV0IHlvdSBjYW4gY3JlYXRlIGEgd2lsZGNhcmQgIm1hdGNoZXMgYW55dGhpbmciIHVzYl9kZXZpY2VfaWQKLSAqIGFzIGEgZHJpdmVyJ3MgIm1vZHVsZXMudXNibWFwIiBlbnRyeSBpZiB5b3UgcHJvdmlkZSBhbiBpZCB3aXRoCi0gKiBvbmx5IGEgbm9uemVybyAiZHJpdmVyX2luZm8iIGZpZWxkLiAgSWYgeW91IGRvIHRoaXMsIHRoZSBVU0IgZGV2aWNlCi0gKiBkcml2ZXIncyBwcm9iZSgpIHJvdXRpbmUgc2hvdWxkIHVzZSBhZGRpdGlvbmFsIGludGVsbGlnZW5jZSB0bwotICogZGVjaWRlIHdoZXRoZXIgdG8gYmluZCB0byB0aGUgc3BlY2lmaWVkIGludGVyZmFjZS4KLSAqIAotICogV2hhdCBNYWtlcyBHb29kIHVzYl9kZXZpY2VfaWQgVGFibGVzOgotICoKLSAqIFRoZSBtYXRjaCBhbGdvcml0aG0gaXMgdmVyeSBzaW1wbGUsIHNvIHRoYXQgaW50ZWxsaWdlbmNlIGluCi0gKiBkcml2ZXIgc2VsZWN0aW9uIG11c3QgY29tZSBmcm9tIHNtYXJ0IGRyaXZlciBpZCByZWNvcmRzLgotICogVW5sZXNzIHlvdSBoYXZlIGdvb2QgcmVhc29ucyB0byB1c2UgYW5vdGhlciBzZWxlY3Rpb24gcG9saWN5LAotICogcHJvdmlkZSBtYXRjaCBlbGVtZW50cyBvbmx5IGluIHJlbGF0ZWQgZ3JvdXBzLCBhbmQgb3JkZXIgbWF0Y2gKLSAqIHNwZWNpZmllcnMgZnJvbSBzcGVjaWZpYyB0byBnZW5lcmFsLiAgVXNlIHRoZSBtYWNyb3MgcHJvdmlkZWQKLSAqIGZvciB0aGF0IHB1cnBvc2UgaWYgeW91IGNhbi4KLSAqCi0gKiBUaGUgbW9zdCBzcGVjaWZpYyBtYXRjaCBzcGVjaWZpZXJzIHVzZSBkZXZpY2UgZGVzY3JpcHRvcgotICogZGF0YS4gIFRoZXNlIGFyZSBjb21tb25seSB1c2VkIHdpdGggcHJvZHVjdC1zcGVjaWZpYyBtYXRjaGVzOwotICogdGhlIFVTQl9ERVZJQ0UgbWFjcm8gbGV0cyB5b3UgcHJvdmlkZSB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzLAotICogYW5kIHlvdSBjYW4gYWxzbyBtYXRjaCBhZ2FpbnN0IHJhbmdlcyBvZiBwcm9kdWN0IHJldmlzaW9ucy4KLSAqIFRoZXNlIGFyZSB3aWRlbHkgdXNlZCBmb3IgZGV2aWNlcyB3aXRoIGFwcGxpY2F0aW9uIG9yIHZlbmRvcgotICogc3BlY2lmaWMgYkRldmljZUNsYXNzIHZhbHVlcy4KLSAqCi0gKiBNYXRjaGVzIGJhc2VkIG9uIGRldmljZSBjbGFzcy9zdWJjbGFzcy9wcm90b2NvbCBzcGVjaWZpY2F0aW9ucwotICogYXJlIHNsaWdodGx5IG1vcmUgZ2VuZXJhbDsgdXNlIHRoZSBVU0JfREVWSUNFX0lORk8gbWFjcm8sIG9yCi0gKiBpdHMgc2libGluZ3MuICBUaGVzZSBhcmUgdXNlZCB3aXRoIHNpbmdsZS1mdW5jdGlvbiBkZXZpY2VzCi0gKiB3aGVyZSBiRGV2aWNlQ2xhc3MgZG9lc24ndCBzcGVjaWZ5IHRoYXQgZWFjaCBpbnRlcmZhY2UgaGFzCi0gKiBpdHMgb3duIGNsYXNzLiAKLSAqCi0gKiBNYXRjaGVzIGJhc2VkIG9uIGludGVyZmFjZSBjbGFzcy9zdWJjbGFzcy9wcm90b2NvbCBhcmUgdGhlCi0gKiBtb3N0IGdlbmVyYWw7IHRoZXkgbGV0IGRyaXZlcnMgYmluZCB0byBhbnkgaW50ZXJmYWNlIG9uIGEKLSAqIG11bHRpcGxlLWZ1bmN0aW9uIGRldmljZS4gIFVzZSB0aGUgVVNCX0lOVEVSRkFDRV9JTkZPCi0gKiBtYWNybywgb3IgaXRzIHNpYmxpbmdzLCB0byBtYXRjaCBjbGFzcy1wZXItaW50ZXJmYWNlIHN0eWxlIAotICogZGV2aWNlcyAoYXMgcmVjb3JkZWQgaW4gYkRldmljZUNsYXNzKS4KLSAqICAKLSAqIFdpdGhpbiB0aG9zZSBncm91cHMsIHJlbWVtYmVyIHRoYXQgbm90IGFsbCBjb21iaW5hdGlvbnMgYXJlCi0gKiBtZWFuaW5nZnVsLiAgRm9yIGV4YW1wbGUsIGRvbid0IGdpdmUgYSBwcm9kdWN0IHZlcnNpb24gcmFuZ2UKLSAqIHdpdGhvdXQgdmVuZG9yIGFuZCBwcm9kdWN0IElEczsgb3Igc3BlY2lmeSBhIHByb3RvY29sIHdpdGhvdXQKLSAqIGl0cyBhc3NvY2lhdGVkIGNsYXNzIGFuZCBzdWJjbGFzcy4KLSAqLyAgIAotY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKgotdXNiX21hdGNoX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmOwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7Ci0KLQkvKiBwcm9jX2Nvbm5lY3RpbmZvIGluIGRldmlvLmMgbWF5IGNhbGwgdXMgd2l0aCBpZCA9PSBOVUxMLiAqLwotCWlmIChpZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWludGYgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOwotCWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKLQotCS8qIEl0IGlzIGltcG9ydGFudCB0byBjaGVjayB0aGF0IGlkLT5kcml2ZXJfaW5mbyBpcyBub256ZXJvLAotCSAgIHNpbmNlIGFuIGVudHJ5IHRoYXQgaXMgYWxsIHplcm9lcyBleGNlcHQgZm9yIGEgbm9uemVybwotCSAgIGlkLT5kcml2ZXJfaW5mbyBpcyB0aGUgd2F5IHRvIGNyZWF0ZSBhbiBlbnRyeSB0aGF0Ci0JICAgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciB3YW50IHRvIGV4YW1pbmUgZXZlcnkKLQkgICBkZXZpY2UgYW5kIGludGVyZmFjZS4gKi8KLQlmb3IgKDsgaWQtPmlkVmVuZG9yIHx8IGlkLT5iRGV2aWNlQ2xhc3MgfHwgaWQtPmJJbnRlcmZhY2VDbGFzcyB8fAotCSAgICAgICBpZC0+ZHJpdmVyX2luZm87IGlkKyspIHsKLQotCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SKSAmJgotCQkgICAgaWQtPmlkVmVuZG9yICE9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCkgJiYKLQkJICAgIGlkLT5pZFByb2R1Y3QgIT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpCi0JCQljb250aW51ZTsKLQotCQkvKiBObyBuZWVkIHRvIHRlc3QgaWQtPmJjZERldmljZV9sbyAhPSAwLCBzaW5jZSAwIGlzIG5ldmVyCi0JCSAgIGdyZWF0ZXIgdGhhbiBhbnkgdW5zaWduZWQgbnVtYmVyLiAqLwotCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0xPKSAmJgotCQkgICAgKGlkLT5iY2REZXZpY2VfbG8gPiBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJKSAmJgotCQkgICAgKGlkLT5iY2REZXZpY2VfaGkgPCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTKSAmJgotCQkgICAgKGlkLT5iRGV2aWNlQ2xhc3MgIT0gZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTKSAmJgotCQkgICAgKGlkLT5iRGV2aWNlU3ViQ2xhc3MhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUFJPVE9DT0wpICYmCi0JCSAgICAoaWQtPmJEZXZpY2VQcm90b2NvbCAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MpICYmCi0JCSAgICAoaWQtPmJJbnRlcmZhY2VDbGFzcyAhPSBpbnRmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTKSAmJgotCQkgICAgKGlkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gaW50Zi0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9QUk9UT0NPTCkgJiYKLQkJICAgIChpZC0+YkludGVyZmFjZVByb3RvY29sICE9IGludGYtPmRlc2MuYkludGVyZmFjZVByb3RvY29sKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJldHVybiBpZDsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQorc3RydWN0IGZpbmRfaW50ZXJmYWNlX2FyZyB7CisJaW50IG1pbm9yOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Cit9OwogCiBzdGF0aWMgaW50IF9fZmluZF9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqIGRldiwgdm9pZCAqIGRhdGEpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKiogcmV0ID0gKHN0cnVjdCB1c2JfaW50ZXJmYWNlICoqKWRhdGE7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKiBpbnRmID0gKnJldDsKLQlpbnQgKm1pbm9yID0gKGludCAqKWRhdGE7CisJc3RydWN0IGZpbmRfaW50ZXJmYWNlX2FyZyAqYXJnID0gZGF0YTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAogCS8qIGNhbid0IGxvb2sgYXQgdXNiIGRldmljZXMsIG9ubHkgaW50ZXJmYWNlcyAqLwogCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQogCQlyZXR1cm4gMDsKIAogCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0JaWYgKGludGYtPm1pbm9yICE9IC0xICYmIGludGYtPm1pbm9yID09ICptaW5vcikgewotCQkqcmV0ID0gaW50ZjsKKwlpZiAoaW50Zi0+bWlub3IgIT0gLTEgJiYgaW50Zi0+bWlub3IgPT0gYXJnLT5taW5vcikgeworCQlhcmctPmludGVyZmFjZSA9IGludGY7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTUxMywzNSArMjI1LDE0IEBACiAgKi8KIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfZmluZF9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kcml2ZXIgKmRydiwgaW50IG1pbm9yKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopKGxvbmcpbWlub3I7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgZmluZF9pbnRlcmZhY2VfYXJnIGFyZ2I7CiAKLQlyZXQgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCZkcnYtPmRyaXZlciwgTlVMTCwgJmludGYsIF9fZmluZF9pbnRlcmZhY2UpOwotCi0JcmV0dXJuIHJldCA/IGludGYgOiBOVUxMOworCWFyZ2IubWlub3IgPSBtaW5vcjsKKwlhcmdiLmludGVyZmFjZSA9IE5VTEw7CisJZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmZHJ2LT5kcml2ZXIsIE5VTEwsICZhcmdiLCBfX2ZpbmRfaW50ZXJmYWNlKTsKKwlyZXR1cm4gYXJnYi5pbnRlcmZhY2U7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQotewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwotCXN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2OwotCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKLQotCS8qIGNoZWNrIGZvciBnZW5lcmljIGRyaXZlciwgd2hpY2ggd2UgZG9uJ3QgbWF0Y2ggYW55IGRldmljZSB3aXRoICovCi0JaWYgKGRydiA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQotCQlyZXR1cm4gMDsKLQotCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0JdXNiX2RydiA9IHRvX3VzYl9kcml2ZXIoZHJ2KTsKLQkKLQlpZCA9IHVzYl9tYXRjaF9pZCAoaW50ZiwgdXNiX2Rydi0+aWRfdGFibGUpOwotCWlmIChpZCkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiAjaWZkZWYJQ09ORklHX0hPVFBMVUcKIAogLyoKQEAgLTc1MCwxMiArNDQxLDExIEBACiAJCS8qIGh1YiBkcml2ZXIgc2V0cyB1cCBUVCByZWNvcmRzICovCiAJfQogCisJZGV2LT5wb3J0bnVtID0gcG9ydDE7CiAJZGV2LT5idXMgPSBidXM7CiAJZGV2LT5wYXJlbnQgPSBwYXJlbnQ7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZmlsZWxpc3QpOwogCi0JaW5pdF9NVVRFWCgmZGV2LT5zZXJpYWxpemUpOwotCiAJcmV0dXJuIGRldjsKIH0KIApAQCAtODI4LDc2ICs1MTgsMjEgQEAKIAogLyoJCQlVU0IgZGV2aWNlIGxvY2tpbmcKICAqCi0gKiBBbHRob3VnaCBsb2NraW5nIFVTQiBkZXZpY2VzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQsIGl0IGlzCi0gKiBjb21wbGljYXRlZCBieSB0aGUgd2F5IHRoZSBkcml2ZXItbW9kZWwgY29yZSB3b3Jrcy4gIFdoZW4gYSBuZXcgVVNCCi0gKiBkcml2ZXIgaXMgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsIHRoZSBjb3JlIHdpbGwgYXV0b21hdGljYWxseQotICogcHJvYmUgb3IgZGlzY29ubmVjdCBhbGwgbWF0Y2hpbmcgaW50ZXJmYWNlcyBvbiBhbGwgVVNCIGRldmljZXMgd2hpbGUKLSAqIGhvbGRpbmcgdGhlIFVTQiBzdWJzeXN0ZW0gd3JpdGVsb2NrLiAgVGhlcmUncyBubyBnb29kIHdheSBmb3IgdXMgdG8KLSAqIHRlbGwgd2hpY2ggZGV2aWNlcyB3aWxsIGJlIHVzZWQgb3IgdG8gbG9jayB0aGVtIGJlZm9yZWhhbmQ7IG91ciBvbmx5Ci0gKiBvcHRpb24gaXMgdG8gZWZmZWN0aXZlbHkgbG9jayBhbGwgdGhlIFVTQiBkZXZpY2VzLgotICoKLSAqIFdlIGRvIHRoYXQgYnkgdXNpbmcgYSBwcml2YXRlIHJ3LXNlbWFwaG9yZSwgdXNiX2FsbF9kZXZpY2VzX3J3c2VtLgotICogV2hlbiBsb2NraW5nIGFuIGluZGl2aWR1YWwgZGV2aWNlIHlvdSBtdXN0IGZpcnN0IGFjcXVpcmUgdGhlIHJ3c2VtJ3MKLSAqIHJlYWRsb2NrLiAgV2hlbiBhIGRyaXZlciBpcyByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCB0aGUgd3JpdGVsb2NrCi0gKiBtdXN0IGJlIGhlbGQuICBUaGVzZSBhY3Rpb25zIGFyZSBlbmNhcHN1bGF0ZWQgaW4gdGhlIHN1YnJvdXRpbmVzCi0gKiBiZWxvdywgc28gYWxsIGEgZHJpdmVyIG5lZWRzIHRvIGRvIGlzIGNhbGwgdXNiX2xvY2tfZGV2aWNlKCkgYW5kCi0gKiB1c2JfdW5sb2NrX2RldmljZSgpLgorICogVVNCIGRldmljZXMgYW5kIGludGVyZmFjZXMgYXJlIGxvY2tlZCB1c2luZyB0aGUgc2VtYXBob3JlIGluIHRoZWlyCisgKiBlbWJlZGRlZCBzdHJ1Y3QgZGV2aWNlLiAgVGhlIGh1YiBkcml2ZXIgZ3VhcmFudGVlcyB0aGF0IHdoZW5ldmVyIGEKKyAqIGRldmljZSBpcyBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkLCBkcml2ZXJzIGFyZSBjYWxsZWQgd2l0aCB0aGUKKyAqIFVTQiBkZXZpY2UgbG9ja2VkIGFzIHdlbGwgYXMgdGhlaXIgcGFydGljdWxhciBpbnRlcmZhY2UuCiAgKgogICogQ29tcGxpY2F0aW9ucyBhcmlzZSB3aGVuIHNldmVyYWwgZGV2aWNlcyBhcmUgdG8gYmUgbG9ja2VkIGF0IHRoZSBzYW1lCiAgKiB0aW1lLiAgT25seSBodWItYXdhcmUgZHJpdmVycyB0aGF0IGFyZSBwYXJ0IG9mIHVzYmNvcmUgZXZlciBoYXZlIHRvCi0gKiBkbyB0aGlzOyBub2JvZHkgZWxzZSBuZWVkcyB0byB3b3JyeSBhYm91dCBpdC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQKLSAqIHVzYl9sb2NrX2RldmljZSgpIG11c3Qgbm90IGJlIGNhbGxlZCB0byBsb2NrIGEgc2Vjb25kIGRldmljZSBzaW5jZSBpdAotICogd291bGQgYWNxdWlyZSB0aGUgcndzZW0ncyByZWFkbG9jayByZWVudHJhbnRseSwgbGVhZGluZyB0byBkZWFkbG9jayBpZgotICogYW5vdGhlciB0aHJlYWQgd2FzIHdhaXRpbmcgZm9yIHRoZSB3cml0ZWxvY2suICBUaGUgc29sdXRpb24gaXMgc2ltcGxlOgotICoKLSAqCVdoZW4gbG9ja2luZyBtb3JlIHRoYW4gb25lIGRldmljZSwgY2FsbCB1c2JfbG9ja19kZXZpY2UoKQotICoJdG8gbG9jayB0aGUgZmlyc3Qgb25lLiAgTG9jayB0aGUgb3RoZXJzIGJ5IGNhbGxpbmcKLSAqCWRvd24oJnVkZXYtPnNlcmlhbGl6ZSkgZGlyZWN0bHkuCi0gKgotICoJV2hlbiB1bmxvY2tpbmcgbXVsdGlwbGUgZGV2aWNlcywgdXNlIHVwKCZ1ZGV2LT5zZXJpYWxpemUpCi0gKgl0byB1bmxvY2sgYWxsIGJ1dCB0aGUgbGFzdCBvbmUuICBVbmxvY2sgdGhlIGxhc3Qgb25lIGJ5Ci0gKgljYWxsaW5nIHVzYl91bmxvY2tfZGV2aWNlKCkuCisgKiBkbyB0aGlzOyBub2JvZHkgZWxzZSBuZWVkcyB0byB3b3JyeSBhYm91dCBpdC4gIFRoZSBydWxlIGZvciBsb2NraW5nCisgKiBpcyBzaW1wbGU6CiAgKgogICoJV2hlbiBsb2NraW5nIGJvdGggYSBkZXZpY2UgYW5kIGl0cyBwYXJlbnQsIGFsd2F5cyBsb2NrIHRoZQogICoJdGhlIHBhcmVudCBmaXJzdC4KICAqLwogCiAvKioKLSAqIHVzYl9sb2NrX2RldmljZSAtIGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEgdXNiIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB1ZGV2OiBkZXZpY2UgdGhhdCdzIGJlaW5nIGxvY2tlZAotICoKLSAqIFVzZSB0aGlzIHJvdXRpbmUgd2hlbiB5b3UgZG9uJ3QgaG9sZCBhbnkgb3RoZXIgZGV2aWNlIGxvY2tzOwotICogdG8gYWNxdWlyZSBuZXN0ZWQgaW5uZXIgbG9ja3MgY2FsbCBkb3duKCZ1ZGV2LT5zZXJpYWxpemUpIGRpcmVjdGx5LgotICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHByb3BlciBpbnRlcmFjdGlvbiB3aXRoIHVzYl9sb2NrX2FsbF9kZXZpY2VzKCkuCi0gKi8KLXZvaWQgdXNiX2xvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCWRvd25fcmVhZCgmdXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKLQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOwotfQotCi0vKioKLSAqIHVzYl90cnlsb2NrX2RldmljZSAtIGF0dGVtcHQgdG8gYWNxdWlyZSB0aGUgbG9jayBmb3IgYSB1c2IgZGV2aWNlIHN0cnVjdHVyZQotICogQHVkZXY6IGRldmljZSB0aGF0J3MgYmVpbmcgbG9ja2VkCi0gKgotICogRG9uJ3QgdXNlIHRoaXMgcm91dGluZSBpZiB5b3UgYWxyZWFkeSBob2xkIGEgZGV2aWNlIGxvY2s7Ci0gKiB1c2UgZG93bl90cnlsb2NrKCZ1ZGV2LT5zZXJpYWxpemUpIGluc3RlYWQuCi0gKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcHJvcGVyIGludGVyYWN0aW9uIHdpdGggdXNiX2xvY2tfYWxsX2RldmljZXMoKS4KLSAqCi0gKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uLgotICovCi1pbnQgdXNiX3RyeWxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnVzYl9hbGxfZGV2aWNlc19yd3NlbSkpCi0JCXJldHVybiAwOwotCWlmIChkb3duX3RyeWxvY2soJnVkZXYtPnNlcmlhbGl6ZSkpIHsKLQkJdXBfcmVhZCgmdXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi0vKioKICAqIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQgLSBjYXV0aW91c2x5IGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEKICAqCXVzYiBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdWRldjogZGV2aWNlIHRoYXQncyBiZWluZyBsb2NrZWQKQEAgLTkzNSw3ICs1NzAsNyBAQAogCQl9CiAJfQogCi0Jd2hpbGUgKCF1c2JfdHJ5bG9ja19kZXZpY2UodWRldikpIHsKKwl3aGlsZSAodXNiX3RyeWxvY2tfZGV2aWNlKHVkZXYpICE9IDApIHsKIAogCQkvKiBJZiB3ZSBjYW4ndCBhY3F1aXJlIHRoZSBsb2NrIGFmdGVyIHdhaXRpbmcgb25lIHNlY29uZCwKIAkJICogd2UncmUgcHJvYmFibHkgZGVhZGxvY2tlZCAqLwpAQCAtOTUzLDM5ICs1ODgsNiBAQAogCXJldHVybiAxOwogfQogCi0vKioKLSAqIHVzYl91bmxvY2tfZGV2aWNlIC0gcmVsZWFzZSB0aGUgbG9jayBmb3IgYSB1c2IgZGV2aWNlIHN0cnVjdHVyZQotICogQHVkZXY6IGRldmljZSB0aGF0J3MgYmVpbmcgdW5sb2NrZWQKLSAqCi0gKiBVc2UgdGhpcyByb3V0aW5lIHdoZW4gcmVsZWFzaW5nIHRoZSBvbmx5IGRldmljZSBsb2NrIHlvdSBob2xkOwotICogdG8gcmVsZWFzZSBpbm5lciBuZXN0ZWQgbG9ja3MgY2FsbCB1cCgmdWRldi0+c2VyaWFsaXplKSBkaXJlY3RseS4KLSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBwcm9wZXIgaW50ZXJhY3Rpb24gd2l0aCB1c2JfbG9ja19hbGxfZGV2aWNlcygpLgotICovCi12b2lkIHVzYl91bmxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCXVwKCZ1ZGV2LT5zZXJpYWxpemUpOwotCXVwX3JlYWQoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Ci19Ci0KLS8qKgotICogdXNiX2xvY2tfYWxsX2RldmljZXMgLSBhY3F1aXJlIHRoZSBsb2NrIGZvciBhbGwgdXNiIGRldmljZSBzdHJ1Y3R1cmVzCi0gKgotICogVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiByZWdpc3RlcmluZyBhIG5ldyBkcml2ZXIgb3IgcHJvYmluZyBhIGJ1cywKLSAqIHNpbmNlIHRoZSBkcml2ZXItbW9kZWwgY29yZSBtYXkgdHJ5IHRvIHVzZSBhbnkgdXNiX2RldmljZS4KLSAqLwotdm9pZCB1c2JfbG9ja19hbGxfZGV2aWNlcyh2b2lkKQotewotCWRvd25fd3JpdGUoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Ci19Ci0KLS8qKgotICogdXNiX3VubG9ja19hbGxfZGV2aWNlcyAtIHJlbGVhc2UgdGhlIGxvY2sgZm9yIGFsbCB1c2IgZGV2aWNlIHN0cnVjdHVyZXMKLSAqLwotdm9pZCB1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKHZvaWQpCi17Ci0JdXBfd3JpdGUoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Ci19Ci0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlICptYXRjaF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdTE2IHZlbmRvcl9pZCwgdTE2IHByb2R1Y3RfaWQpCkBAIC0xMDA4LDEwICs2MTAsMTAgQEAKIAkvKiBsb29rIHRocm91Z2ggYWxsIG9mIHRoZSBjaGlsZHJlbiBvZiB0aGlzIGRldmljZSAqLwogCWZvciAoY2hpbGQgPSAwOyBjaGlsZCA8IGRldi0+bWF4Y2hpbGQ7ICsrY2hpbGQpIHsKIAkJaWYgKGRldi0+Y2hpbGRyZW5bY2hpbGRdKSB7Ci0JCQlkb3duKCZkZXYtPmNoaWxkcmVuW2NoaWxkXS0+c2VyaWFsaXplKTsKKwkJCXVzYl9sb2NrX2RldmljZShkZXYtPmNoaWxkcmVuW2NoaWxkXSk7CiAJCQlyZXRfZGV2ID0gbWF0Y2hfZGV2aWNlKGRldi0+Y2hpbGRyZW5bY2hpbGRdLAogCQkJCQkgICAgICAgdmVuZG9yX2lkLCBwcm9kdWN0X2lkKTsKLQkJCXVwKCZkZXYtPmNoaWxkcmVuW2NoaWxkXS0+c2VyaWFsaXplKTsKKwkJCXVzYl91bmxvY2tfZGV2aWNlKGRldi0+Y2hpbGRyZW5bY2hpbGRdKTsKIAkJCWlmIChyZXRfZGV2KQogCQkJCWdvdG8gZXhpdDsKIAkJfQpAQCAtMTQ5NiwxOCArMTA5OCw4IEBACiAJLnJlc3VtZSA9CXVzYl9nZW5lcmljX3Jlc3VtZSwKIH07CiAKLSNpZm5kZWYgTU9EVUxFCi0KLXN0YXRpYyBpbnQgX19pbml0IHVzYl9zZXR1cF9kaXNhYmxlKGNoYXIgKnN0cikKLXsKLQlub3VzYiA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KIC8qIGZvcm1hdCB0byBkaXNhYmxlIFVTQiBvbiBrZXJuZWwgY29tbWFuZCBsaW5lIGlzOiBub3VzYiAqLwotX19zZXR1cCgibm91c2IiLCB1c2Jfc2V0dXBfZGlzYWJsZSk7Ci0KLSNlbmRpZgorX19tb2R1bGVfcGFyYW1fY2FsbCgiIiwgbm91c2IsIHBhcmFtX3NldF9ib29sLCBwYXJhbV9nZXRfYm9vbCwgJm5vdXNiLCAwNDQ0KTsKIAogLyoKICAqIGZvciBleHRlcm5hbCByZWFkIGFjY2VzcyB0byA8bm91c2I+CkBAIC0xNTk4LDggKzExOTAsNiBAQAogICogZHJpdmVyIG1vZHVsZXMgdG8gdXNlLgogICovCiAKLUVYUE9SVF9TWU1CT0wodXNiX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wodXNiX2RlcmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTCh1c2JfZGlzYWJsZWQpOwogCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZ2V0X2ludGYpOwpAQCAtMTYxMCwxNCArMTIwMCwxMCBAQAogRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X2Rldik7CiBFWFBPUlRfU1lNQk9MKHVzYl9odWJfdHRfY2xlYXJfYnVmZmVyKTsKIAotRVhQT1JUX1NZTUJPTCh1c2JfbG9ja19kZXZpY2UpOwotRVhQT1JUX1NZTUJPTCh1c2JfdHJ5bG9ja19kZXZpY2UpOwogRVhQT1JUX1NZTUJPTCh1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KTsKLUVYUE9SVF9TWU1CT0wodXNiX3VubG9ja19kZXZpY2UpOwogCiBFWFBPUlRfU1lNQk9MKHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKTsKIEVYUE9SVF9TWU1CT0wodXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSk7Ci1FWFBPUlRfU1lNQk9MKHVzYl9tYXRjaF9pZCk7CiBFWFBPUlRfU1lNQk9MKHVzYl9maW5kX2ludGVyZmFjZSk7CiBFWFBPUlRfU1lNQk9MKHVzYl9pZm51bV90b19pZik7CiBFWFBPUlRfU1lNQk9MKHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oIGIvZHJpdmVycy91c2IvY29yZS91c2IuaAppbmRleCAxYzRhNjg0Li40NjQ3ZTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKQEAgLTE2LDkgKzE2LDYgQEAKIGV4dGVybiBjaGFyICp1c2JfY2FjaGVfc3RyaW5nKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgaW5kZXgpOwogZXh0ZXJuIGludCB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGNvbmZpZ3VyYXRpb24pOwogCi1leHRlcm4gdm9pZCB1c2JfbG9ja19hbGxfZGV2aWNlcyh2b2lkKTsKLWV4dGVybiB2b2lkIHVzYl91bmxvY2tfYWxsX2RldmljZXModm9pZCk7Ci0KIGV4dGVybiB2b2lkIHVzYl9raWNrX2todWJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgdXNiX3N1c3BlbmRfcm9vdF9odWIoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYpOwogZXh0ZXJuIHZvaWQgdXNiX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKQEAgLTMzLDYgKzMwLDkgQEAKIGV4dGVybiBpbnQgdXNiX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCB1c2JfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKIAorZXh0ZXJuIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVzYl9nZW5lcmljX2RyaXZlcjsKK2V4dGVybiBpbnQgdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGE7CitleHRlcm4gaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKIAogLyogSW50ZXJmYWNlcyBhbmQgdGhlaXIgInBvd2VyIHN0YXRlIiBhcmUgb3duZWQgYnkgdXNiY29yZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggYzY1NWQ0Ni4uOTczNGNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJLyogb3IgbGlrZSBzYTExMDA6IHR3byBmaXhlZCBmdW5jdGlvbiBlbmRwb2ludHMgKi8KIAkiZXAxb3V0LWJ1bGsiLCAiZXAyaW4tYnVsayIsCiB9OwotI2RlZmluZSBEVU1NWV9FTkRQT0lOVFMJKHNpemVvZihlcF9uYW1lKS9zaXplb2YoY2hhciAqKSkKKyNkZWZpbmUgRFVNTVlfRU5EUE9JTlRTCUFSUkFZX1NJWkUoZXBfbmFtZSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtODk2LDcgKzg5Niw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3Byb2JlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkdW1teQkqZHVtID0gdGhlX2NvbnRyb2xsZXI7CiAJaW50CQlyYzsKQEAgLTkwOSw3ICs5MDksNyBAQAogCWR1bS0+Z2FkZ2V0LmlzX290ZyA9IChkdW1teV90b19oY2QoZHVtKS0+c2VsZi5vdGdfcG9ydCAhPSAwKTsKIAogCXN0cmNweSAoZHVtLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOwotCWR1bS0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CisJZHVtLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJZHVtLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBkdW1teV9nYWRnZXRfcmVsZWFzZTsKIAlyYyA9IGRldmljZV9yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7CiAJaWYgKHJjIDwgMCkKQEAgLTkxOSw0NyArOTE5LDQ3IEBACiAJdXNiX2J1c19nZXQgKCZkdW1teV90b19oY2QgKGR1bSktPnNlbGYpOwogI2VuZGlmCiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAoZGV2LCBkdW0pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhIChwZGV2LCBkdW0pOwogCWRldmljZV9jcmVhdGVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfdWRjX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV91ZGNfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBkdW1teQkqZHVtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7CisJc3RydWN0IGR1bW15CSpkdW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAocGRldik7CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAocGRldiwgTlVMTCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlICgmZHVtLT5nYWRnZXQuZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOwogCWRldmljZV91bnJlZ2lzdGVyICgmZHVtLT5nYWRnZXQuZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfc3VzcGVuZCAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGR1bW15X3VkY19zdXNwZW5kIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGR1bW15CSpkdW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkdW1teQkqZHVtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfZGJnICgmZGV2LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnICgmcGRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJc3Bpbl9sb2NrX2lycSAoJmR1bS0+bG9jayk7CiAJZHVtLT51ZGNfc3VzcGVuZGVkID0gMTsKIAlzZXRfbGlua19zdGF0ZSAoZHVtKTsKIAlzcGluX3VubG9ja19pcnEgKCZkdW0tPmxvY2spOwogCi0JZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzIChkdW1teV90b19oY2QgKGR1bSkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X3VkY19yZXN1bWUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3Jlc3VtZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGR1bW15CSpkdW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9kYmcgKCZkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcgKCZwZGV2LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAlkdW0tPnVkY19zdXNwZW5kZWQgPSAwOwogCXNldF9saW5rX3N0YXRlIChkdW0pOwogCXNwaW5fdW5sb2NrX2lycSAoJmR1bS0+bG9jayk7CiAKLQlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzIChkdW1teV90b19oY2QgKGR1bSkpOwogCXJldHVybiAwOwogfQpAQCAtMTU3Niw3ICsxNTc2LDcgQEAKIAlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmR1bS0+bG9jaywgZmxhZ3MpOwotCWlmIChoY2QtPnN0YXRlICE9IEhDX1NUQVRFX1JVTk5JTkcpCisJaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpCiAJCWdvdG8gZG9uZTsKIAogCWlmIChkdW0tPnJlc3VtaW5nICYmIHRpbWVfYWZ0ZXJfZXEgKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKQEAgLTE2MjMsNyArMTYyMyw3IEBACiAJaW50CQlyZXR2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLQlpZiAoaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9SVU5OSU5HKQorCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKQogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAogCWR1bSA9IGhjZF90b19kdW1teSAoaGNkKTsKQEAgLTE3NTYsOSArMTc1NiwxMiBAQAogewogCXN0cnVjdCBkdW1teSAqZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOwogCisJZGV2X2RiZyAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAlkdW0tPnJoX3N0YXRlID0gRFVNTVlfUkhfU1VTUEVOREVEOwogCXNldF9saW5rX3N0YXRlIChkdW0pOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CiAJc3Bpbl91bmxvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NjYsMTQgKzE3NjksMjMgQEAKIHN0YXRpYyBpbnQgZHVtbXlfYnVzX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlzdHJ1Y3QgZHVtbXkgKmR1bSA9IGhjZF90b19kdW1teSAoaGNkKTsKKwlpbnQgcmMgPSAwOworCisJZGV2X2RiZyAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKLQlkdW0tPnJoX3N0YXRlID0gRFVNTVlfUkhfUlVOTklORzsKLQlzZXRfbGlua19zdGF0ZSAoZHVtKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmR1bS0+dXJicF9saXN0KSkKLQkJbW9kX3RpbWVyICgmZHVtLT50aW1lciwgamlmZmllcyk7CisJaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpIHsKKwkJZGV2X3dhcm4gKCZoY2QtPnNlbGYucm9vdF9odWItPmRldiwgIkhDIGlzbid0IHJ1bm5pbmchXG4iKTsKKwkJcmMgPSAtRU5PREVWOworCX0gZWxzZSB7CisJCWR1bS0+cmhfc3RhdGUgPSBEVU1NWV9SSF9SVU5OSU5HOworCQlzZXRfbGlua19zdGF0ZSAoZHVtKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZkdW0tPnVyYnBfbGlzdCkpCisJCQltb2RfdGltZXIgKCZkdW0tPnRpbWVyLCBqaWZmaWVzKTsKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJfQogCXNwaW5fdW5sb2NrX2lycSAoJmR1bS0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTg5OSwxNCArMTkxMSwxNCBAQAogCS5idXNfcmVzdW1lID0JCWR1bW15X2J1c19yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IGR1bW15X2hjZF9wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV9oY2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAlpbnQJCQlyZXR2YWw7CiAKLQlkZXZfaW5mbygmZGV2LT5kZXYsICIlcywgZHJpdmVyICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgZHJpdmVyX2Rlc2MpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcywgZHJpdmVyICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgZHJpdmVyX2Rlc2MpOwogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QgKCZkdW1teV9oY2QsICZkZXYtPmRldiwgZGV2LT5kZXYuYnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZHVtbXlfaGNkLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKIAlpZiAoIWhjZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdGhlX2NvbnRyb2xsZXIgPSBoY2RfdG9fZHVtbXkgKGhjZCk7CkBAIC0xOTE5LDM2ICsxOTMxLDQzIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBkdW1teV9oY2RfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X2hjZF9yZW1vdmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAKLQloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAocGRldik7CiAJdXNiX3JlbW92ZV9oY2QgKGhjZCk7CiAJdXNiX3B1dF9oY2QgKGhjZCk7CiAJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X2hjZF9zdXNwZW5kIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgZHVtbXlfaGNkX3N1c3BlbmQgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisJaW50CQkJcmMgPSAwOwogCi0JZGV2X2RiZyAoJmRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7CisJZGV2X2RiZyAoJnBkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKLQlyZXR1cm4gMDsKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAocGRldik7CisJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCWlmIChkdW0tPnJoX3N0YXRlID09IERVTU1ZX1JIX1JVTk5JTkcpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlJvb3QgaHViIGlzbid0IHN1c3BlbmRlZCFcbiIpOworCQlyYyA9IC1FQlVTWTsKKwl9IGVsc2UKKwkJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKKwlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfaGNkX3Jlc3VtZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV9oY2RfcmVzdW1lIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCi0JZGV2X2RiZyAoJmRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7Ci0JaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJZGV2X2RiZyAoJnBkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKHBkZXYpOworCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwogCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMgKGhjZCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggZWEwOWFhYS4uMGNlYTk3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMjI0LDYgKzIyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0yMzgsNyArMjM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CkBAIC0yNTAsNyArMjUwLDcgQEAKIAogI2RlZmluZSBEUklWRVJfREVTQwkJIkZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IgogI2RlZmluZSBEUklWRVJfTkFNRQkJImdfZmlsZV9zdG9yYWdlIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIjIwIE9jdG9iZXIgMjAwNCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIyOCBOb3ZlbWJlciAyMDA1IgogCiBzdGF0aWMgY29uc3QgY2hhciBsb25nbmFtZVtdID0gRFJJVkVSX0RFU0M7CiBzdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWVbXSA9IERSSVZFUl9OQU1FOwpAQCAtMzM1LDggKzMzNSw4IEBACiAjZGVmaW5lIE1BWF9MVU5TCTgKIAogCS8qIEFyZ2doISAgVGhlcmUgc2hvdWxkIGJlIGEgbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkIG1hY3JvISAqLwotc3RhdGljIGNoYXIJCSpmaWxlW01BWF9MVU5TXSA9IHtOVUxMLCB9Owotc3RhdGljIGludAkJcm9bTUFYX0xVTlNdID0gezAsIH07CitzdGF0aWMgY2hhcgkJKmZpbGVbTUFYX0xVTlNdOworc3RhdGljIGludAkJcm9bTUFYX0xVTlNdOwogCiBzdGF0aWMgc3RydWN0IHsKIAlpbnQJCW51bV9maWxlbmFtZXM7CkBAIC01ODcsNyArNTg3LDcgQEAKIHN0cnVjdCBmc2dfYnVmZmhkIHsKIAl2b2lkCQkJCSpidWY7CiAJZG1hX2FkZHJfdAkJCWRtYTsKLQl2b2xhdGlsZSBlbnVtIGZzZ19idWZmZXJfc3RhdGUJc3RhdGU7CisJZW51bSBmc2dfYnVmZmVyX3N0YXRlCQlzdGF0ZTsKIAlzdHJ1Y3QgZnNnX2J1ZmZoZAkJKm5leHQ7CiAKIAkvKiBUaGUgTmV0Q2hpcCAyMjgwIGlzIGZhc3RlciwgYW5kIGhhbmRsZXMgc29tZSBwcm90b2NvbCBmYXVsdHMKQEAgLTU5Niw5ICs1OTYsOSBAQAogCXVuc2lnbmVkIGludAkJCWJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aDsKIAogCXN0cnVjdCB1c2JfcmVxdWVzdAkJKmlucmVxOwotCXZvbGF0aWxlIGludAkJCWlucmVxX2J1c3k7CisJaW50CQkJCWlucmVxX2J1c3k7CiAJc3RydWN0IHVzYl9yZXF1ZXN0CQkqb3V0cmVxOwotCXZvbGF0aWxlIGludAkJCW91dHJlcV9idXN5OworCWludAkJCQlvdXRyZXFfYnVzeTsKIH07CiAKIGVudW0gZnNnX3N0YXRlIHsKQEAgLTYzMSwxMyArNjMxLDE2IEBACiAJLyogZmlsZXNlbSBwcm90ZWN0czogYmFja2luZyBmaWxlcyBpbiB1c2UgKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCWZpbGVzZW07CiAKKwkvKiByZWZlcmVuY2UgY291bnRpbmc6IHdhaXQgdW50aWwgYWxsIExVTnMgYXJlIHJlbGVhc2VkICovCisJc3RydWN0IGtyZWYJCXJlZjsKKwogCXN0cnVjdCB1c2JfZXAJCSplcDA7CQkvLyBIYW5keSBjb3B5IG9mIGdhZGdldC0+ZXAwCiAJc3RydWN0IHVzYl9yZXF1ZXN0CSplcDByZXE7CS8vIEZvciBjb250cm9sIHJlc3BvbnNlcwotCXZvbGF0aWxlIHVuc2lnbmVkIGludAllcDBfcmVxX3RhZzsKKwl1bnNpZ25lZCBpbnQJCWVwMF9yZXFfdGFnOwogCWNvbnN0IGNoYXIJCSplcDByZXFfbmFtZTsKIAogCXN0cnVjdCB1c2JfcmVxdWVzdAkqaW50cmVxOwkvLyBGb3IgaW50ZXJydXB0IHJlc3BvbnNlcwotCXZvbGF0aWxlIGludAkJaW50cmVxX2J1c3k7CisJaW50CQkJaW50cmVxX2J1c3k7CiAJc3RydWN0IGZzZ19idWZmaGQJKmludHJfYnVmZmhkOwogCiAgCXVuc2lnbmVkIGludAkJYnVsa19vdXRfbWF4cGFja2V0OwpAQCAtNjY3LDcgKzY3MCw2IEBACiAJc3RydWN0IGZzZ19idWZmaGQJKm5leHRfYnVmZmhkX3RvX2RyYWluOwogCXN0cnVjdCBmc2dfYnVmZmhkCWJ1ZmZoZHNbTlVNX0JVRkZFUlNdOwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJdGhyZWFkX3dxaDsKIAlpbnQJCQl0aHJlYWRfd2FrZXVwX25lZWRlZDsKIAlzdHJ1Y3QgY29tcGxldGlvbgl0aHJlYWRfbm90aWZpZXI7CiAJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWRfdGFzazsKQEAgLTY5NCw3ICs2OTYsNiBAQAogCXVuc2lnbmVkIGludAkJbmx1bnM7CiAJc3RydWN0IGx1bgkJKmx1bnM7CiAJc3RydWN0IGx1bgkJKmN1cmx1bjsKLQlzdHJ1Y3QgY29tcGxldGlvbglsdW5fcmVsZWFzZWQ7CiB9OwogCiB0eXBlZGVmIHZvaWQgKCpmc2dfcm91dGluZV90KShzdHJ1Y3QgZnNnX2RldiAqKTsKQEAgLTEwNzMsMTEgKzEwNzQsMTMgQEAKIAogLyogVGhlc2Ugcm91dGluZXMgbWF5IGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQgb3IgaW5faXJxICovCiAKKy8qIENhbGxlciBtdXN0IGhvbGQgZnNnLT5sb2NrICovCiBzdGF0aWMgdm9pZCB3YWtldXBfdGhyZWFkKHN0cnVjdCBmc2dfZGV2ICpmc2cpCiB7CiAJLyogVGVsbCB0aGUgbWFpbiB0aHJlYWQgdGhhdCBzb21ldGhpbmcgaGFzIGhhcHBlbmVkICovCiAJZnNnLT50aHJlYWRfd2FrZXVwX25lZWRlZCA9IDE7Ci0Jd2FrZV91cF9hbGwoJmZzZy0+dGhyZWFkX3dxaCk7CisJaWYgKGZzZy0+dGhyZWFkX3Rhc2spCisJCXdha2VfdXBfcHJvY2Vzcyhmc2ctPnRocmVhZF90YXNrKTsKIH0KIAogCkBAIC0xMTY0LDExICsxMTY3LDEyIEBACiAJCXVzYl9lcF9maWZvX2ZsdXNoKGVwKTsKIAogCS8qIEhvbGQgdGhlIGxvY2sgd2hpbGUgd2UgdXBkYXRlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgc3RhdGVzICovCisJc21wX3dtYigpOwogCXNwaW5fbG9jaygmZnNnLT5sb2NrKTsKIAliaC0+aW5yZXFfYnVzeSA9IDA7CiAJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOwotCXNwaW5fdW5sb2NrKCZmc2ctPmxvY2spOwogCXdha2V1cF90aHJlYWQoZnNnKTsKKwlzcGluX3VubG9jaygmZnNnLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYnVsa19vdXRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQpAQCAtMTE4NSwxMSArMTE4OSwxMiBAQAogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CiAKIAkvKiBIb2xkIHRoZSBsb2NrIHdoaWxlIHdlIHVwZGF0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIHN0YXRlcyAqLworCXNtcF93bWIoKTsKIAlzcGluX2xvY2soJmZzZy0+bG9jayk7CiAJYmgtPm91dHJlcV9idXN5ID0gMDsKIAliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKLQlzcGluX3VubG9jaygmZnNnLT5sb2NrKTsKIAl3YWtldXBfdGhyZWFkKGZzZyk7CisJc3Bpbl91bmxvY2soJmZzZy0+bG9jayk7CiB9CiAKIApAQCAtMTIwNiwxMSArMTIxMSwxMiBAQAogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CiAKIAkvKiBIb2xkIHRoZSBsb2NrIHdoaWxlIHdlIHVwZGF0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIHN0YXRlcyAqLworCXNtcF93bWIoKTsKIAlzcGluX2xvY2soJmZzZy0+bG9jayk7CiAJZnNnLT5pbnRyZXFfYnVzeSA9IDA7CiAJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOwotCXNwaW5fdW5sb2NrKCZmc2ctPmxvY2spOwogCXdha2V1cF90aHJlYWQoZnNnKTsKKwlzcGluX3VubG9jaygmZnNnLT5sb2NrKTsKIH0KIAogI2Vsc2UKQEAgLTEyNjEsOCArMTI2Nyw4IEBACiAJZnNnLT5jYmJ1Zl9jbW5kX3NpemUgPSByZXEtPmFjdHVhbDsKIAltZW1jcHkoZnNnLT5jYmJ1Zl9jbW5kLCByZXEtPmJ1ZiwgZnNnLT5jYmJ1Zl9jbW5kX3NpemUpOwogCi0Jc3Bpbl91bmxvY2soJmZzZy0+bG9jayk7CiAJd2FrZXVwX3RocmVhZChmc2cpOworCXNwaW5fdW5sb2NrKCZmc2ctPmxvY2spOwogfQogCiAjZWxzZQpAQCAtMTUxNCw4ICsxNTIwLDggQEAKIAogLyogVXNlIHRoaXMgZm9yIGJ1bGsgb3IgaW50ZXJydXB0IHRyYW5zZmVycywgbm90IGVwMCAqLwogc3RhdGljIHZvaWQgc3RhcnRfdHJhbnNmZXIoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXAsCi0JCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxLCB2b2xhdGlsZSBpbnQgKnBidXN5LAotCQl2b2xhdGlsZSBlbnVtIGZzZ19idWZmZXJfc3RhdGUgKnN0YXRlKQorCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgaW50ICpwYnVzeSwKKwkJZW51bSBmc2dfYnVmZmVyX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQJcmM7CiAKQEAgLTE1MjMsOCArMTUyOSwxMSBAQAogCQlkdW1wX21zZyhmc2csICJidWxrLWluIiwgcmVxLT5idWYsIHJlcS0+bGVuZ3RoKTsKIAllbHNlIGlmIChlcCA9PSBmc2ctPmludHJfaW4pCiAJCWR1bXBfbXNnKGZzZywgImludHItaW4iLCByZXEtPmJ1ZiwgcmVxLT5sZW5ndGgpOworCisJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKIAkqcGJ1c3kgPSAxOwogCSpzdGF0ZSA9IEJVRl9TVEFURV9CVVNZOworCXNwaW5fdW5sb2NrX2lycSgmZnNnLT5sb2NrKTsKIAlyYyA9IHVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfS0VSTkVMKTsKIAlpZiAocmMgIT0gMCkgewogCQkqcGJ1c3kgPSAwOwpAQCAtMTU0NCwxNCArMTU1MywyMyBAQAogCiBzdGF0aWMgaW50IHNsZWVwX3RocmVhZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQogewotCWludAlyYzsKKwlpbnQJcmMgPSAwOwogCiAJLyogV2FpdCB1bnRpbCBhIHNpZ25hbCBhcnJpdmVzIG9yIHdlIGFyZSB3b2tlbiB1cCAqLwotCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZzZy0+dGhyZWFkX3dxaCwKLQkJCWZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQpOworCWZvciAoOzspIHsKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJjID0gLUVJTlRSOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQpCisJCQlicmVhazsKKwkJc2NoZWR1bGUoKTsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCWZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQgPSAwOwotCXRyeV90b19mcmVlemUoKTsKLQlyZXR1cm4gKHJjID8gLUVJTlRSIDogMCk7CisJcmV0dXJuIHJjOwogfQogCiAKQEAgLTE3ODgsNiArMTgwNiw3IEBACiAJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZICYmICFnZXRfc29tZV9tb3JlKQogCQkJYnJlYWs7CQkJLy8gV2Ugc3RvcHBlZCBlYXJseQogCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9GVUxMKSB7CisJCQlzbXBfcm1iKCk7CiAJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluID0gYmgtPm5leHQ7CiAJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CiAKQEAgLTIzNTYsNiArMjM3NSw3IEBACiAKIAkJLyogVGhyb3cgYXdheSB0aGUgZGF0YSBpbiBhIGZpbGxlZCBidWZmZXIgKi8KIAkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRlVMTCkgeworCQkJc21wX3JtYigpOwogCQkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOwogCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9IGJoLT5uZXh0OwogCkBAIC0zMDIxLDYgKzMwNDEsNyBAQAogCQkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQogCQkJCXJldHVybiByYzsKIAkJCX0KKwkJc21wX3JtYigpOwogCQlyYyA9IHJlY2VpdmVkX2Nidyhmc2csIGJoKTsKIAkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOwogCkBAIC0zNjQyLDExICszNjYzLDE5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyB2b2lkIGZzZ19yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGZzZ19kZXYJKmZzZyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBmc2dfZGV2LCByZWYpOworCisJa2ZyZWUoZnNnLT5sdW5zKTsKKwlrZnJlZShmc2cpOworfQorCiBzdGF0aWMgdm9pZCBsdW5fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzZ19kZXYJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWNvbXBsZXRlKCZmc2ctPmx1bl9yZWxlYXNlZCk7CisJa3JlZl9wdXQoJmZzZy0+cmVmLCBmc2dfcmVsZWFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZzZ191bmJpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKQEAgLTM2NjAsMTQgKzM2ODksMTIgQEAKIAljbGVhcl9iaXQoUkVHSVNURVJFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKIAogCS8qIFVucmVnaXN0ZXIgdGhlIHN5c2ZzIGF0dHJpYnV0ZSBmaWxlcyBhbmQgdGhlIExVTnMgKi8KLQlpbml0X2NvbXBsZXRpb24oJmZzZy0+bHVuX3JlbGVhc2VkKTsKIAlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CiAJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CiAJCWlmIChjdXJsdW4tPnJlZ2lzdGVyZWQpIHsKIAkJCWRldmljZV9yZW1vdmVfZmlsZSgmY3VybHVuLT5kZXYsICZkZXZfYXR0cl9ybyk7CiAJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmN1cmx1bi0+ZGV2LCAmZGV2X2F0dHJfZmlsZSk7CiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmY3VybHVuLT5kZXYpOwotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT5sdW5fcmVsZWFzZWQpOwogCQkJY3VybHVuLT5yZWdpc3RlcmVkID0gMDsKIAkJfQogCX0KQEAgLTM4NDYsNiArMzg3Myw3IEBACiAJCQljdXJsdW4tPmRldi5yZWxlYXNlID0gbHVuX3JlbGVhc2U7CiAJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmN1cmx1bi0+ZGV2LCAmZGV2X2F0dHJfcm8pOwogCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwgJmRldl9hdHRyX2ZpbGUpOworCQkJa3JlZl9nZXQoJmZzZy0+cmVmKTsKIAkJfQogCiAJCWlmIChmaWxlW2ldICYmICpmaWxlW2ldKSB7CkBAIC00MDYxLDcgKzQwODksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmZnNnLT5sb2NrKTsKIAlpbml0X3J3c2VtKCZmc2ctPmZpbGVzZW0pOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZzZy0+dGhyZWFkX3dxaCk7CisJa3JlZl9pbml0KCZmc2ctPnJlZik7CiAJaW5pdF9jb21wbGV0aW9uKCZmc2ctPnRocmVhZF9ub3RpZmllcik7CiAKIAl0aGVfZnNnID0gZnNnOwpAQCAtNDA2OSwxMyArNDA5Nyw2IEBACiB9CiAKIAotc3RhdGljIHZvaWQgZnNnX2ZyZWUoc3RydWN0IGZzZ19kZXYgKmZzZykKLXsKLQlrZnJlZShmc2ctPmx1bnMpOwotCWtmcmVlKGZzZyk7Ci19Ci0KLQogc3RhdGljIGludCBfX2luaXQgZnNnX2luaXQodm9pZCkKIHsKIAlpbnQJCXJjOwpAQCAtNDA4NSw3ICs0MTA2LDcgQEAKIAkJcmV0dXJuIHJjOwogCWZzZyA9IHRoZV9mc2c7CiAJaWYgKChyYyA9IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKCZmc2dfZHJpdmVyKSkgIT0gMCkKLQkJZnNnX2ZyZWUoZnNnKTsKKwkJa3JlZl9wdXQoJmZzZy0+cmVmLCBmc2dfcmVsZWFzZSk7CiAJcmV0dXJuIHJjOwogfQogbW9kdWxlX2luaXQoZnNnX2luaXQpOwpAQCAtNDEwMyw2ICs0MTI0LDYgQEAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmc2ctPnRocmVhZF9ub3RpZmllcik7CiAKIAljbG9zZV9hbGxfYmFja2luZ19maWxlcyhmc2cpOwotCWZzZ19mcmVlKGZzZyk7CisJa3JlZl9wdXQoJmZzZy0+cmVmLCBmc2dfcmVsZWFzZSk7CiB9CiBtb2R1bGVfZXhpdChmc2dfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggYjM1YWM2ZC4uNjVlMDg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtODkwLDEwICs4OTAsMTIgQEAKIAkvKiB3YWl0IGZvciB3cml0ZSBidWZmZXIgdG8gZHJhaW4sIG9yICovCiAJLyogYXQgbW9zdCBHU19DTE9TRV9USU1FT1VUIHNlY29uZHMgKi8KIAlpZiAoZ3NfYnVmX2RhdGFfYXZhaWwocG9ydC0+cG9ydF93cml0ZV9idWYpID4gMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKIAkJd2FpdF9jb25kX2ludGVycnVwdGlibGVfdGltZW91dChwb3J0LT5wb3J0X3dyaXRlX3dhaXQsCiAJCXBvcnQtPnBvcnRfZGV2ID09IE5VTEwKIAkJfHwgZ3NfYnVmX2RhdGFfYXZhaWwocG9ydC0+cG9ydF93cml0ZV9idWYpID09IDAsCiAJCSZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzLCBHU19DTE9TRV9USU1FT1VUICogSFopOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CiAJfQogCiAJLyogZnJlZSBkaXNjb25uZWN0ZWQgcG9ydCBvbiBmaW5hbCBjbG9zZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggNTgzMjFkMy4uZTMwMjBmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQpAQCAtMiw2ICsyLDEwIEBACiAjIE1ha2VmaWxlIGZvciBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIAoraWZlcSAoJChDT05GSUdfVVNCX0RFQlVHKSx5KQorCUVYVFJBX0NGTEFHUwkJKz0gLURERUJVRworZW5kaWYKKwogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaS1xdWlya3MubwogCiBvYmotJChDT05GSUdfVVNCX0VIQ0lfSENEKQkrPSBlaGNpLWhjZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggMjlmNTJhNC4uOWRkM2QxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMTcsMTMgKzE3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCi0JI2RlZmluZSBERUJVRwotI2Vsc2UKLQkjdW5kZWYgREVCVUcKLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgpAQCAtNjI0LDcgKzYxNyw3IEBACiAJfQogCiAJLyogcmVtb3RlIHdha2V1cCBbNC4zLjFdICovCi0JaWYgKChzdGF0dXMgJiBTVFNfUENEKSAmJiBoY2QtPnJlbW90ZV93YWtldXApIHsKKwlpZiAoc3RhdHVzICYgU1RTX1BDRCkgewogCQl1bnNpZ25lZAlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOwogCiAJCS8qIHJlc3VtZSByb290IGh1Yj8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwppbmRleCA4MmNhZjMzLi42OWIwYjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCkBAIC01OSw3ICs1OSw3IEBACiAKIAkJaWYgKCh0MSAmIFBPUlRfUEUpICYmICEodDEgJiBQT1JUX09XTkVSKSkKIAkJCXQyIHw9IFBPUlRfU1VTUEVORDsKLQkJaWYgKGhjZC0+cmVtb3RlX3dha2V1cCkKKwkJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldikpCiAJCQl0MiB8PSBQT1JUX1dLT0NfRXxQT1JUX1dLRElTQ19FfFBPUlRfV0tDT05OX0U7CiAJCWVsc2UKIAkJCXQyICY9IH4oUE9SVF9XS09DX0V8UE9SVF9XS0RJU0NfRXxQT1JUX1dLQ09OTl9FKTsKQEAgLTUxNyw3ICs1MTcsNyBAQAogCQkJaWYgKCh0ZW1wICYgUE9SVF9QRSkgPT0gMAogCQkJCQl8fCAodGVtcCAmIFBPUlRfUkVTRVQpICE9IDApCiAJCQkJZ290byBlcnJvcjsKLQkJCWlmIChoY2QtPnJlbW90ZV93YWtldXApCisJCQlpZiAoZGV2aWNlX21heV93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2KSkKIAkJCQl0ZW1wIHw9IFBPUlRfV0FLRV9CSVRTOwogCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9TVVNQRU5ELAogCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKaW5kZXggMTNmNzNhOC4uMDhjYTBmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwpAQCAtMjEwLDcgKzIxMCwxNiBAQAogCS8qIFNlcmlhbCBCdXMgUmVsZWFzZSBOdW1iZXIgaXMgYXQgUENJIDB4NjAgb2Zmc2V0ICovCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg2MCwgJmVoY2ktPnNicm4pOwogCi0JLyogUkVWSVNJVDogIHBlci1wb3J0IHdha2UgY2FwYWJpbGl0eSAoUENJIDB4NjIpIGN1cnJlbnRseSB1bnVzZWQgKi8KKwkvKiBXb3JrYXJvdW5kIGN1cnJlbnQgUENJIGluaXQgZ2xpdGNoOiAgd2FrZXVwIGJpdHMgYXJlbid0CisJICogYmVpbmcgc2V0IGZyb20gUENJIFBNIGNhcGFiaWxpdHkuCisJICovCisJaWYgKCFkZXZpY2VfY2FuX3dha2V1cCgmcGRldi0+ZGV2KSkgeworCQl1MTYJcG9ydF93YWtlOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NjIsICZwb3J0X3dha2UpOworCQlpZiAocG9ydF93YWtlICYgMHgwMDAxKQorCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCX0KIAogCXJldHZhbCA9IGVoY2lfcGNpX3JlaW5pdChlaGNpLCBwZGV2KTsKIGRvbmU6CkBAIC0yNjksNyArMjc4LDYgQEAKIHsKIAlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKIAl1bnNpZ25lZAkJcG9ydDsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqcm9vdCA9IGhjZC0+c2VsZi5yb290X2h1YjsKIAlzdHJ1Y3QgcGNpX2RldgkJKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAlpbnQJCQlyZXR2YWwgPSAtRUlOVkFMOwogCkBAIC0zMDMsMTMgKzMxMSw3IEBACiAKIHJlc3RhcnQ6CiAJZWhjaV9kYmcoZWhjaSwgImxvc3QgcG93ZXIsIHJlc3RhcnRpbmdcbiIpOwotCWZvciAocG9ydCA9IEhDU19OX1BPUlRTKGVoY2ktPmhjc19wYXJhbXMpOyBwb3J0ID4gMDsgKSB7Ci0JCXBvcnQtLTsKLQkJaWYgKCFyb290LT5jaGlsZHJlbiBbcG9ydF0pCi0JCQljb250aW51ZTsKLQkJdXNiX3NldF9kZXZpY2Vfc3RhdGUocm9vdC0+Y2hpbGRyZW5bcG9ydF0sCi0JCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7Ci0JfQorCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CiAKIAkvKiBFbHNlIHJlc2V0LCB0byBjb3BlIHdpdGggcG93ZXIgbG9zcyBvciBmbHVzaC10by1zdG9yYWdlCiAJICogc3R5bGUgInJlc3VtZSIgaGF2aW5nIGxldCBCSU9TIGtpY2sgaW4gZHVyaW5nIHJlYm9vdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCmluZGV4IGJmMDNlYzAuLjliMTNiZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwpAQCAtNTE0LDE4ICs1MTQsMTggQEAKIAkJcXRkLT51cmIgPSB1cmI7CiAJCXF0ZF9wcmV2LT5od19uZXh0ID0gUVREX05FWFQgKHF0ZC0+cXRkX2RtYSk7CiAJCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKworCQkvKiBmb3IgemVybyBsZW5ndGggREFUQSBzdGFnZXMsIFNUQVRVUyBpcyBhbHdheXMgSU4gKi8KKwkJaWYgKGxlbiA9PSAwKQorCQkJdG9rZW4gfD0gKDEgLyogImluIiAqLyA8PCA4KTsKIAl9IAogCiAJLyoKIAkgKiBkYXRhIHRyYW5zZmVyIHN0YWdlOiAgYnVmZmVyIHNldHVwCiAJICovCi0JaWYgKGxpa2VseSAobGVuID4gMCkpCi0JCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfZG1hOwotCWVsc2UKLQkJYnVmID0gMDsKKwlidWYgPSB1cmItPnRyYW5zZmVyX2RtYTsKIAotCS8qIGZvciB6ZXJvIGxlbmd0aCBEQVRBIHN0YWdlcywgU1RBVFVTIGlzIGFsd2F5cyBJTiAqLwotCWlmICghYnVmIHx8IGlzX2lucHV0KQorCWlmIChpc19pbnB1dCkKIAkJdG9rZW4gfD0gKDEgLyogImluIiAqLyA8PCA4KTsKIAkvKiBlbHNlIGl0J3MgYWxyZWFkeSBpbml0dGVkIHRvICJvdXQiIHBpZCAoMCA8PCA4KSAqLwogCkBAIC01NzIsNyArNTcyLDcgQEAKIAkgKiBjb250cm9sIHJlcXVlc3RzIG1heSBuZWVkIGEgdGVybWluYXRpbmcgZGF0YSAic3RhdHVzIiBhY2s7CiAJICogYnVsayBvbmVzIG1heSBuZWVkIGEgdGVybWluYXRpbmcgc2hvcnQgcGFja2V0ICh6ZXJvIGxlbmd0aCkuCiAJICovCi0JaWYgKGxpa2VseSAoYnVmICE9IDApKSB7CisJaWYgKGxpa2VseSAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICE9IDApKSB7CiAJCWludAlvbmVfbW9yZSA9IDA7CiAKIAkJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IDgyZjY0OTguLjU4NGI4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTU1LDE5ICs1NSwxMyBAQAogLyogZW5xdWV1aW5nL2ZpbmlzaGluZyBsb2cgb2YgdXJicyAqLwogLy8jZGVmaW5lIFVSQl9UUkFDRQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYl9pc3AxMTZ4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC03NywxNCArNzEsMTAgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0jaWZuZGVmIERFQlVHCi0jCWRlZmluZQlTVFVCX0RFQlVHX0ZJTEUKLSNlbmRpZgotCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKICNpbmNsdWRlICJpc3AxMTZ4LmgiCiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjA1IEF1ZyAyMDA1IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMDMgTm92IDIwMDUiCiAjZGVmaW5lIERSSVZFUl9ERVNDCSJJU1AxMTZ4IFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwpAQCAtMTY0LDEzICsxNTQsMTEgQEAKIAlzdHJ1Y3QgcHRkICpwdGQ7CiAJaW50IGJ1ZmxlbiA9IGlzcDExNngtPmF0bF9sYXN0X2RpciA9PSBQVERfRElSX0lOCiAJICAgID8gaXNwMTE2eC0+YXRsX2J1ZnNocnQgOiBpc3AxMTZ4LT5hdGxfYnVmbGVuOwotCWludCBwdGRfY291bnQgPSAwOwogCiAJaXNwMTE2eF93cml0ZV9yZWcxNihpc3AxMTZ4LCBIQ3VQSU5ULCBIQ3VQSU5UX0FJSUVPVCk7CiAJaXNwMTE2eF93cml0ZV9yZWcxNihpc3AxMTZ4LCBIQ1hGRVJDVFIsIGJ1Zmxlbik7CiAJaXNwMTE2eF93cml0ZV9hZGRyKGlzcDExNngsIEhDQVRMUE9SVCB8IElTUDExNnhfV1JJVEVfT0ZGU0VUKTsKIAlmb3IgKGVwID0gaXNwMTE2eC0+YXRsX2FjdGl2ZTsgZXA7IGVwID0gZXAtPmFjdGl2ZSkgewotCQkrK3B0ZF9jb3VudDsKIAkJcHRkID0gJmVwLT5wdGQ7CiAJCWR1bXBfcHRkKHB0ZCk7CiAJCWR1bXBfcHRkX291dF9kYXRhKHB0ZCwgZXAtPmRhdGEpOwpAQCAtMzA1LDkgKzI5Myw4IEBACiAJCXVkZXYgPSB1cmItPmRldjsKIAkJcHRkID0gJmVwLT5wdGQ7CiAJCWNjID0gUFREX0dFVF9DQyhwdGQpOwotCi0JCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKIAkJc2hvcnRfbm90X29rID0gMTsKKwkJc3Bpbl9sb2NrKCZ1cmItPmxvY2spOwogCiAJCS8qIERhdGEgdW5kZXJydW4gaXMgc3BlY2lhbC4gRm9yIGFsbG93ZWQgdW5kZXJydW4KIAkJICAgd2UgY2xlYXIgdGhlIGVycm9yIGFuZCBjb250aW51ZSBhcyBub3JtYWwuIEZvcgpAQCAtNDIwLDcgKzQwNyw3IEBACiAJCQllcC0+bmV4dHBpZCA9IDA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCUJVR19PTigxKTsKKwkJCUJVRygpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOwogCX0KQEAgLTYyOCw4ICs2MTUsMTIgQEAKIAkJdTMyIGludHN0YXQgPSBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgSENJTlRTVEFUKTsKIAkJaXNwMTE2eF93cml0ZV9yZWczMihpc3AxMTZ4LCBIQ0lOVFNUQVQsIGludHN0YXQpOwogCQlpZiAoaW50c3RhdCAmIEhDSU5UX1VFKSB7Ci0JCQlFUlIoIlVucmVjb3ZlcmFibGUgZXJyb3JcbiIpOwotCQkJLyogV2hhdCBzaG91bGQgd2UgZG8gaGVyZT8gUmVzZXQ/ICAqLworCQkJRVJSKCJVbnJlY292ZXJhYmxlIGVycm9yLCBIQyBpcyBkZWFkIVxuIik7CisJCQkvKiBJUlEncyBhcmUgb2ZmLCB3ZSBkbyBubyBETUEsCisJCQkgICBwZXJmZWN0bHkgcmVhZHkgdG8gZGllIC4uLiAqLworCQkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCQlpZiAoaW50c3RhdCAmIEhDSU5UX1JIU0MpCiAJCQkvKiBXaGVuIHJvb3QgaHViIG9yIGFueSBvZiBpdHMgcG9ydHMgaXMgZ29pbmcKQEAgLTY0MCw3ICs2MzEsNiBAQAogCQlpZiAoaW50c3RhdCAmIEhDSU5UX1JEKSB7CiAJCQlEQkcoIi0tLS0gcmVtb3RlIHdha2V1cFxuIik7CiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwotCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJCX0KIAkJaXJxc3RhdCAmPSB+SEN1UElOVF9PUFI7CiAJCXJldCA9IElSUV9IQU5ETEVEOwpAQCAtNjUxLDYgKzY0MSw3IEBACiAJfQogCiAJaXNwMTE2eF93cml0ZV9yZWcxNihpc3AxMTZ4LCBIQ3VQSU5URU5CLCBpc3AxMTZ4LT5pcnFlbmIpOworICAgICAgZG9uZToKIAlzcGluX3VubG9jaygmaXNwMTE2eC0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTcyNCw2ICs3MTUsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDExNngtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJa2ZyZWUoZXApOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtODg4LDcgKzg4MCw3IEBACiAJCQkJICAgICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgaXNwMTE2eF9lcCAqZXAgPSBoZXAtPmhjcHJpdjs7CisJc3RydWN0IGlzcDExNnhfZXAgKmVwID0gaGVwLT5oY3ByaXY7CiAKIAlpZiAoIWVwKQogCQlyZXR1cm47CkBAIC05MTYsOCArOTA4LDYgQEAKIAlyZXR1cm4gKGludClmbW51bTsKIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyoKICAgQWRhcHRlZCBmcm9tIG9oY2ktaHViLmMuIEN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IGF1dG9zdXNwZW5kLgogKi8KQEAgLTk2OCwxMSArOTU4LDEwIEBACiAJZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CiAJZGVzYy0+Yk5iclBvcnRzID0gKHU4KSAocmVnICYgMHgzKTsKIAkvKiBQb3dlciBzd2l0Y2hpbmcsIGRldmljZSB0eXBlLCBvdmVyY3VycmVudC4gKi8KLQlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0KLQkgICAgKF9fZm9yY2UgX191MTYpIGNwdV90b19sZTE2KCh1MTYpICgocmVnID4+IDgpICYgMHgxZikpOworCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBjcHVfdG9fbGUxNigodTE2KSAoKHJlZyA+PiA4KSAmIDB4MWYpKTsKIAlkZXNjLT5iUHdyT24yUHdyR29vZCA9ICh1OCkgKChyZWcgPj4gMjQpICYgMHhmZik7CiAJLyogdHdvIGJpdG1hcHM6ICBwb3J0cyByZW1vdmFibGUsIGFuZCBsZWdhY3kgUG9ydFB3ckN0cmxNYXNrICovCi0JZGVzYy0+Yml0bWFwWzBdID0gZGVzYy0+Yk5iclBvcnRzID09IDEgPyAxIDw8IDEgOiAzIDw8IDE7CisJZGVzYy0+Yml0bWFwWzBdID0gMDsKIAlkZXNjLT5iaXRtYXBbMV0gPSB+MDsKIH0KIApAQCAtMTE1OSwxMzUgKzExNDgsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZglDT05GSUdfUE0KLQotc3RhdGljIGludCBpc3AxMTZ4X2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCi17Ci0Jc3RydWN0IGlzcDExNnggKmlzcDExNnggPSBoY2RfdG9faXNwMTE2eChoY2QpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHZhbDsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMTZ4LT5sb2NrLCBmbGFncyk7Ci0KLQl2YWwgPSBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgSENDT05UUk9MKTsKLQlzd2l0Y2ggKHZhbCAmIEhDQ09OVFJPTF9IQ0ZTKSB7Ci0JY2FzZSBIQ0NPTlRST0xfVVNCX09QRVI6Ci0JCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9RVUlFU0NJTkc7Ci0JCXZhbCAmPSAofkhDQ09OVFJPTF9IQ0ZTICYgfkhDQ09OVFJPTF9SV0UpOwotCQl2YWwgfD0gSENDT05UUk9MX1VTQl9TVVNQRU5EOwotCQlpZiAoaGNkLT5yZW1vdGVfd2FrZXVwKQotCQkJdmFsIHw9IEhDQ09OVFJPTF9SV0U7Ci0JCS8qIFdhaXQgZm9yIHVzYiB0cmFuc2ZlcnMgdG8gZmluaXNoICovCi0JCW1kZWxheSgyKTsKLQkJaXNwMTE2eF93cml0ZV9yZWczMihpc3AxMTZ4LCBIQ0NPTlRST0wsIHZhbCk7Ci0JCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7Ci0JCS8qIFdhaXQgZm9yIGRldmljZXMgdG8gc3VzcGVuZCAqLwotCQltZGVsYXkoNSk7Ci0JY2FzZSBIQ0NPTlRST0xfVVNCX1NVU1BFTkQ6Ci0JCWJyZWFrOwotCWNhc2UgSENDT05UUk9MX1VTQl9SRVNVTUU6Ci0JCWlzcDExNnhfd3JpdGVfcmVnMzIoaXNwMTE2eCwgSENDT05UUk9MLAotCQkJCSAgICAodmFsICYgfkhDQ09OVFJPTF9IQ0ZTKSB8Ci0JCQkJICAgIEhDQ09OVFJPTF9VU0JfUkVTRVQpOwotCWNhc2UgSENDT05UUk9MX1VTQl9SRVNFVDoKLQkJcmV0ID0gLUVCVVNZOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDExNngtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGlzcDExNnhfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQotewotCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4ID0gaGNkX3RvX2lzcDExNngoaGNkKTsKLQl1MzIgdmFsOwotCWludCByZXQgPSAtRUlOUFJPR1JFU1M7Ci0KLQltc2xlZXAoNSk7Ci0Jc3Bpbl9sb2NrX2lycSgmaXNwMTE2eC0+bG9jayk7Ci0KLQl2YWwgPSBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgSENDT05UUk9MKTsKLQlzd2l0Y2ggKHZhbCAmIEhDQ09OVFJPTF9IQ0ZTKSB7Ci0JY2FzZSBIQ0NPTlRST0xfVVNCX1NVU1BFTkQ6Ci0JCXZhbCAmPSB+SENDT05UUk9MX0hDRlM7Ci0JCXZhbCB8PSBIQ0NPTlRST0xfVVNCX1JFU1VNRTsKLQkJaXNwMTE2eF93cml0ZV9yZWczMihpc3AxMTZ4LCBIQ0NPTlRST0wsIHZhbCk7Ci0JY2FzZSBIQ0NPTlRST0xfVVNCX1JFU1VNRToKLQkJYnJlYWs7Ci0JY2FzZSBIQ0NPTlRST0xfVVNCX09QRVI6Ci0JCS8qIFdpdGhvdXQgc2V0dGluZyBwb3dlcl9zdGF0ZSBoZXJlIHRoZQotCQkgICBTVVNQRU5ERUQgc3RhdGUgd29uJ3QgYmUgcmVtb3ZlZCBmcm9tCi0JCSAgIHN5c2ZzL3VzYk4vcG93ZXIuc3RhdGUgYXMgYSByZXNwb25zZSB0byByZW1vdGUKLQkJICAgd2FrZXVwLiBNYXliZSBpbiB0aGUgZnV0dXJlLiAqLwotCQloY2QtPnNlbGYucm9vdF9odWItPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FQlVTWTsKLQl9Ci0KLQlpZiAocmV0ICE9IC1FSU5QUk9HUkVTUykgewotCQlzcGluX3VubG9ja19pcnEoJmlzcDExNngtPmxvY2spOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXZhbCA9IGlzcDExNngtPnJoZGVzY2EgJiBSSF9BX05EUDsKLQl3aGlsZSAodmFsLS0pIHsKLQkJdTMyIHN0YXQgPQotCQkgICAgaXNwMTE2eF9yZWFkX3JlZzMyKGlzcDExNngsIHZhbCA/IEhDUkhQT1JUMiA6IEhDUkhQT1JUMSk7Ci0JCS8qIGZvcmNlIGdsb2JhbCwgbm90IHNlbGVjdGl2ZSwgcmVzdW1lICovCi0JCWlmICghKHN0YXQgJiBSSF9QU19QU1MpKQotCQkJY29udGludWU7Ci0JCURCRygiJXM6IFJlc3VtaW5nIHBvcnQgJWRcbiIsIF9fZnVuY19fLCB2YWwpOwotCQlpc3AxMTZ4X3dyaXRlX3JlZzMyKGlzcDExNngsIFJIX1BTX1BPQ0ksIHZhbAotCQkJCSAgICA/IEhDUkhQT1JUMiA6IEhDUkhQT1JUMSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmaXNwMTE2eC0+bG9jayk7Ci0KLQloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7Ci0JbWRlbGF5KDIwKTsKLQotCS8qIEdvIG9wZXJhdGlvbmFsICovCi0Jc3Bpbl9sb2NrX2lycSgmaXNwMTE2eC0+bG9jayk7Ci0JdmFsID0gaXNwMTE2eF9yZWFkX3JlZzMyKGlzcDExNngsIEhDQ09OVFJPTCk7Ci0JaXNwMTE2eF93cml0ZV9yZWczMihpc3AxMTZ4LCBIQ0NPTlRST0wsCi0JCQkgICAgKHZhbCAmIH5IQ0NPTlRST0xfSENGUykgfCBIQ0NPTlRST0xfVVNCX09QRVIpOwotCXNwaW5fdW5sb2NrX2lycSgmaXNwMTE2eC0+bG9jayk7Ci0JLyogc2VlIGFuYWxvZ291cyBjb21tZW50IGFib3ZlICovCi0JaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwotCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotI2Vsc2UKLQotI2RlZmluZQlpc3AxMTZ4X2J1c19zdXNwZW5kCU5VTEwKLSNkZWZpbmUJaXNwMTE2eF9idXNfcmVzdW1lCU5VTEwKLQotI2VuZGlmCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZkZWYgU1RVQl9ERUJVR19GSUxFCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlKHN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4KQotewotfQotCi0jZWxzZQotCi0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAKIHN0YXRpYyB2b2lkIGR1bXBfaXJxKHN0cnVjdCBzZXFfZmlsZSAqcywgY2hhciAqbGFiZWwsIHUxNiBtYXNrKQogewpAQCAtMTMxMSwxMyArMTE3NCw5IEBACiAJCSAgIG1hc2sgJiBIQ0lOVF9TRiA/ICIgc29mIiA6ICIiLCBtYXNrICYgSENJTlRfU08gPyAiIHNvIiA6ICIiKTsKIH0KIAotc3RhdGljIGludCBwcm9jX2lzcDExNnhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3N0YXRpYyBpbnQgaXNwMTE2eF9zaG93X2RiZyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eCA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IGlzcDExNnhfZXAgKmVwOwotCXN0cnVjdCB1cmIgKnVyYjsKLQl1bnNpZ25lZCBpOwotCWNoYXIgKnN0cjsKIAogCXNlcV9wcmludGYocywgIiVzXG4lcyB2ZXJzaW9uICVzXG4iLAogCQkgICBpc3AxMTZ4X3RvX2hjZChpc3AxMTZ4KS0+cHJvZHVjdF9kZXNjLCBoY2RfbmFtZSwKQEAgLTEzMzMsMTA1ICsxMTkyLDUwIEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmaXNwMTE2eC0+bG9jayk7Ci0KIAlkdW1wX2lycShzLCAiaGNfaXJxX2VuYWJsZSIsIGlzcDExNnhfcmVhZF9yZWcxNihpc3AxMTZ4LCBIQ3VQSU5URU5CKSk7CiAJZHVtcF9pcnEocywgImhjX2lycV9zdGF0dXMiLCBpc3AxMTZ4X3JlYWRfcmVnMTYoaXNwMTE2eCwgSEN1UElOVCkpOwogCWR1bXBfaW50KHMsICJoY19pbnRfZW5hYmxlIiwgaXNwMTE2eF9yZWFkX3JlZzMyKGlzcDExNngsIEhDSU5URU5CKSk7CiAJZHVtcF9pbnQocywgImhjX2ludF9zdGF0dXMiLCBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgSENJTlRTVEFUKSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVwLCAmaXNwMTE2eC0+YXN5bmMsIHNjaGVkdWxlKSB7Ci0KLQkJc3dpdGNoIChlcC0+bmV4dHBpZCkgewotCQljYXNlIFVTQl9QSURfSU46Ci0JCQlzdHIgPSAiaW4iOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX1BJRF9PVVQ6Ci0JCQlzdHIgPSAib3V0IjsKLQkJCWJyZWFrOwotCQljYXNlIFVTQl9QSURfU0VUVVA6Ci0JCQlzdHIgPSAic2V0dXAiOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX1BJRF9BQ0s6Ci0JCQlzdHIgPSAic3RhdHVzIjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJc3RyID0gIj8iOwotCQkJYnJlYWs7Ci0JCX07Ci0JCXNlcV9wcmludGYocywgIiVwLCBlcCVkJXMsIG1heHBhY2tldCAlZDpcbiIsIGVwLAotCQkJICAgZXAtPmVwbnVtLCBzdHIsIGVwLT5tYXhwYWNrZXQpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVyYiwgJmVwLT5oZXAtPnVyYl9saXN0LCB1cmJfbGlzdCkgewotCQkJc2VxX3ByaW50ZihzLCAiICB1cmIlcCwgJWQvJWRcbiIsIHVyYiwKLQkJCQkgICB1cmItPmFjdHVhbF9sZW5ndGgsCi0JCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQkJfQotCX0KLQlpZiAoIWxpc3RfZW1wdHkoJmlzcDExNngtPmFzeW5jKSkKLQkJc2VxX3ByaW50ZihzLCAiXG4iKTsKLQotCXNlcV9wcmludGYocywgInBlcmlvZGljIHNpemU9ICVkXG4iLCBQRVJJT0RJQ19TSVpFKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQRVJJT0RJQ19TSVpFOyBpKyspIHsKLQkJZXAgPSBpc3AxMTZ4LT5wZXJpb2RpY1tpXTsKLQkJaWYgKCFlcCkKLQkJCWNvbnRpbnVlOwotCQlzZXFfcHJpbnRmKHMsICIlMmQgWyUzZF06XG4iLCBpLCBpc3AxMTZ4LT5sb2FkW2ldKTsKLQotCQkvKiBEVU1COiBwcmludHMgc2hhcmVkIGVudHJpZXMgbXVsdGlwbGUgdGltZXMgKi8KLQkJZG8gewotCQkJc2VxX3ByaW50ZihzLCAiICAgJWQvJXAgKCVzZGV2JWQgZXAlZCVzIG1heCAlZClcbiIsCi0JCQkJICAgZXAtPnBlcmlvZCwgZXAsCi0JCQkJICAgKGVwLT51ZGV2LT5zcGVlZCA9PQotCQkJCSAgICBVU0JfU1BFRURfRlVMTCkgPyAiIiA6ICJscyAiLAotCQkJCSAgIGVwLT51ZGV2LT5kZXZudW0sIGVwLT5lcG51bSwKLQkJCQkgICAoZXAtPmVwbnVtID09Ci0JCQkJICAgIDApID8gIiIgOiAoKGVwLT5uZXh0cGlkID09Ci0JCQkJCQlVU0JfUElEX0lOKSA/ICJpbiIgOiAib3V0IiksCi0JCQkJICAgZXAtPm1heHBhY2tldCk7Ci0JCQllcCA9IGVwLT5uZXh0OwotCQl9IHdoaWxlIChlcCk7Ci0JfQorCWlzcDExNnhfc2hvd19yZWdzX3NlcShpc3AxMTZ4LCBzKTsKIAlzcGluX3VubG9ja19pcnEoJmlzcDExNngtPmxvY2spOwogCXNlcV9wcmludGYocywgIlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX2lzcDExNnhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgaXNwMTE2eF9vcGVuX3NlcShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY19pc3AxMTZ4X3Nob3csIFBERShpbm9kZSktPmRhdGEpOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpc3AxMTZ4X3Nob3dfZGJnLCBpbm9kZS0+dS5nZW5lcmljX2lwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vcHMgPSB7Ci0JLm9wZW4gPSBwcm9jX2lzcDExNnhfb3BlbiwKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlzcDExNnhfZGVidWdfZm9wcyA9IHsKKwkub3BlbiA9IGlzcDExNnhfb3Blbl9zZXEsCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi0vKiBleHBlY3QganVzdCBvbmUgaXNwMTE2eCBwZXIgc3lzdGVtICovCi1zdGF0aWMgY29uc3QgY2hhciBwcm9jX2ZpbGVuYW1lW10gPSAiZHJpdmVyL2lzcDExNngiOwotCi1zdGF0aWMgdm9pZCBjcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eCkKK3N0YXRpYyBpbnQgY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IGlzcDExNnggKmlzcDExNngpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7Ci0KLQlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeShwcm9jX2ZpbGVuYW1lLCAwLCBOVUxMKTsKLQlpZiAocGRlID09IE5VTEwpCi0JCXJldHVybjsKLQotCXBkZS0+cHJvY19mb3BzID0gJnByb2Nfb3BzOwotCXBkZS0+ZGF0YSA9IGlzcDExNng7Ci0JaXNwMTE2eC0+cGRlID0gcGRlOworCWlzcDExNngtPmRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoaGNkX25hbWUsCisJCQkJCSAgICAgIFNfSVJVR08sIE5VTEwsIGlzcDExNngsCisJCQkJCSAgICAgICZpc3AxMTZ4X2RlYnVnX2ZvcHMpOworCWlmICghaXNwMTE2eC0+ZGVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGUoc3RydWN0IGlzcDExNnggKmlzcDExNngpCiB7Ci0JaWYgKGlzcDExNngtPnBkZSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19maWxlbmFtZSwgTlVMTCk7CisJZGVidWdmc19yZW1vdmUoaXNwMTE2eC0+ZGVudHJ5KTsKIH0KIAotI2VuZGlmCisjZWxzZQorCisjZGVmaW5lCWNyZWF0ZV9kZWJ1Z19maWxlKGQpCTAKKyNkZWZpbmUJcmVtb3ZlX2RlYnVnX2ZpbGUoZCkJZG97fXdoaWxlKDApCisKKyNlbmRpZgkJCQkvKiBDT05GSUdfREVCVUdfRlMgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTE0NjYsNyArMTI3MCw3IEBACiAJc3RydWN0IGlzcDExNnggKmlzcDExNnggPSBoY2RfdG9faXNwMTE2eChoY2QpOwogCXVuc2lnbmVkIGxvbmcgdDsKIAl1MTYgY2xrcmR5ID0gMDsKLQlpbnQgcmV0ID0gMCwgdGltZW91dCA9IDE1IC8qIG1zICovIDsKKwlpbnQgcmV0LCB0aW1lb3V0ID0gMTUgLyogbXMgKi8gOwogCiAJcmV0ID0gaXNwMTE2eF9zd19yZXNldChpc3AxMTZ4KTsKIAlpZiAocmV0KQpAQCAtMTQ4Miw3ICsxMjg2LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoIWNsa3JkeSkgewotCQlFUlIoIkNsb2NrIG5vdCByZWFkeSBhZnRlciAyMG1zXG4iKTsKKwkJRVJSKCJDbG9jayBub3QgcmVhZHkgYWZ0ZXIgJWRtc1xuIiwgdGltZW91dCk7CiAJCS8qIEFmdGVyIHN3X3Jlc2V0IHRoZSBjbG9jayB3b24ndCByZXBvcnQgdG8gYmUgcmVhZHksIGlmCiAJCSAgIEhfV0FLRVVQIHBpbiBpcyBoaWdoLiAqLwogCQlFUlIoIlBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgSF9XQUtFVVAgcGluIGlzIHB1bGxlZCBsb3chXG4iKTsKQEAgLTE1NzIsNyArMTM3Niw4IEBACiAKIAl2YWwgPSAwOwogCWlmIChib2FyZC0+cmVtb3RlX3dha2V1cF9lbmFibGUpIHsKLQkJaGNkLT5jYW5fd2FrZXVwID0gMTsKKwkJaWYgKCFkZXZpY2VfY2FuX3dha2V1cChoY2QtPnNlbGYuY29udHJvbGxlcikpCisJCQlkZXZpY2VfaW5pdF93YWtldXAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIDEpOwogCQl2YWwgfD0gUkhfSFNfRFJXRTsKIAl9CiAJaXNwMTE2eF93cml0ZV9yZWczMihpc3AxMTZ4LCBIQ1JIU1RBVFVTLCB2YWwpOwpAQCAtMTYwMCwxMiArMTQwNSwxMjYgQEAKIAlpc3AxMTZ4X3dyaXRlX3JlZzMyKGlzcDExNngsIEhDUkhQT1JUMSwgUkhfUFNfQ0NTKTsKIAlpc3AxMTZ4X3dyaXRlX3JlZzMyKGlzcDExNngsIEhDUkhQT1JUMiwgUkhfUFNfQ0NTKTsKIAotCWlzcDExNnhfc2hvd19yZWdzKGlzcDExNngpOworCWlzcDExNnhfc2hvd19yZWdzX2xvZyhpc3AxMTZ4KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMTZ4LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgaW50IGlzcDExNnhfYnVzX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eCA9IGhjZF90b19pc3AxMTZ4KGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDExNngtPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IGlzcDExNnhfcmVhZF9yZWczMihpc3AxMTZ4LCBIQ0NPTlRST0wpOworCXN3aXRjaCAodmFsICYgSENDT05UUk9MX0hDRlMpIHsKKwljYXNlIEhDQ09OVFJPTF9VU0JfT1BFUjoKKwkJdmFsICY9ICh+SENDT05UUk9MX0hDRlMgJiB+SENDT05UUk9MX1JXRSk7CisJCXZhbCB8PSBIQ0NPTlRST0xfVVNCX1NVU1BFTkQ7CisJCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYpKQorCQkJdmFsIHw9IEhDQ09OVFJPTF9SV0U7CisJCS8qIFdhaXQgZm9yIHVzYiB0cmFuc2ZlcnMgdG8gZmluaXNoICovCisJCW1kZWxheSgyKTsKKwkJaXNwMTE2eF93cml0ZV9yZWczMihpc3AxMTZ4LCBIQ0NPTlRST0wsIHZhbCk7CisJCS8qIFdhaXQgZm9yIGRldmljZXMgdG8gc3VzcGVuZCAqLworCQltZGVsYXkoNSk7CisJY2FzZSBIQ0NPTlRST0xfVVNCX1NVU1BFTkQ6CisJCWJyZWFrOworCWNhc2UgSENDT05UUk9MX1VTQl9SRVNVTUU6CisJCWlzcDExNnhfd3JpdGVfcmVnMzIoaXNwMTE2eCwgSENDT05UUk9MLAorCQkJCSAgICAodmFsICYgfkhDQ09OVFJPTF9IQ0ZTKSB8CisJCQkJICAgIEhDQ09OVFJPTF9VU0JfUkVTRVQpOworCWNhc2UgSENDT05UUk9MX1VTQl9SRVNFVDoKKwkJcmV0ID0gLUVCVVNZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDExNngtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlzcDExNnhfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4ID0gaGNkX3RvX2lzcDExNngoaGNkKTsKKwl1MzIgdmFsOworCisJbXNsZWVwKDUpOworCXNwaW5fbG9ja19pcnEoJmlzcDExNngtPmxvY2spOworCisJdmFsID0gaXNwMTE2eF9yZWFkX3JlZzMyKGlzcDExNngsIEhDQ09OVFJPTCk7CisJc3dpdGNoICh2YWwgJiBIQ0NPTlRST0xfSENGUykgeworCWNhc2UgSENDT05UUk9MX1VTQl9TVVNQRU5EOgorCQl2YWwgJj0gfkhDQ09OVFJPTF9IQ0ZTOworCQl2YWwgfD0gSENDT05UUk9MX1VTQl9SRVNVTUU7CisJCWlzcDExNnhfd3JpdGVfcmVnMzIoaXNwMTE2eCwgSENDT05UUk9MLCB2YWwpOworCWNhc2UgSENDT05UUk9MX1VTQl9SRVNVTUU6CisJCWJyZWFrOworCWNhc2UgSENDT05UUk9MX1VTQl9PUEVSOgorCQlzcGluX3VubG9ja19pcnEoJmlzcDExNngtPmxvY2spOworCQkvKiBXaXRob3V0IHNldHRpbmcgcG93ZXJfc3RhdGUgaGVyZSB0aGUKKwkJICAgU1VTUEVOREVEIHN0YXRlIHdvbid0IGJlIHJlbW92ZWQgZnJvbQorCQkgICBzeXNmcy91c2JOL3Bvd2VyLnN0YXRlIGFzIGEgcmVzcG9uc2UgdG8gcmVtb3RlCisJCSAgIHdha2V1cC4gTWF5YmUgaW4gdGhlIGZ1dHVyZS4gKi8KKwkJaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQkvKiBIQ0NPTlRST0xfVVNCX1JFU0VUOiB0aGlzIG1heSBoYXBwZW4sIHdoZW4gZHVyaW5nCisJCSAgIHN1c3BlbnNpb24gdGhlIEhDIGxvc3QgcG93ZXIuIFJlaW5pdGlhbGl6ZSBjb21wbGV0ZWx5ICovCisJCXNwaW5fdW5sb2NrX2lycSgmaXNwMTE2eC0+bG9jayk7CisJCURCRygiQ2hpcCBoYXMgYmVlbiByZXNldCB3aGlsZSBzdXNwZW5kZWQuIFJlaW5pdCBmcm9tIHNjcmF0Y2guXG4iKTsKKwkJaXNwMTE2eF9yZXNldChoY2QpOworCQlpc3AxMTZ4X3N0YXJ0KGhjZCk7CisJCWlzcDExNnhfaHViX2NvbnRyb2woaGNkLCBTZXRQb3J0RmVhdHVyZSwKKwkJCQkgICAgVVNCX1BPUlRfRkVBVF9QT1dFUiwgMSwgTlVMTCwgMCk7CisJCWlmICgoaXNwMTE2eC0+cmhkZXNjYSAmIFJIX0FfTkRQKSA9PSAyKQorCQkJaXNwMTE2eF9odWJfY29udHJvbChoY2QsIFNldFBvcnRGZWF0dXJlLAorCQkJCQkgICAgVVNCX1BPUlRfRkVBVF9QT1dFUiwgMiwgTlVMTCwgMCk7CisJCWhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsID0gaXNwMTE2eC0+cmhkZXNjYSAmIFJIX0FfTkRQOworCXdoaWxlICh2YWwtLSkgeworCQl1MzIgc3RhdCA9CisJCSAgICBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgdmFsID8gSENSSFBPUlQyIDogSENSSFBPUlQxKTsKKwkJLyogZm9yY2UgZ2xvYmFsLCBub3Qgc2VsZWN0aXZlLCByZXN1bWUgKi8KKwkJaWYgKCEoc3RhdCAmIFJIX1BTX1BTUykpCisJCQljb250aW51ZTsKKwkJREJHKCIlczogUmVzdW1pbmcgcG9ydCAlZFxuIiwgX19mdW5jX18sIHZhbCk7CisJCWlzcDExNnhfd3JpdGVfcmVnMzIoaXNwMTE2eCwgUkhfUFNfUE9DSSwgdmFsCisJCQkJICAgID8gSENSSFBPUlQyIDogSENSSFBPUlQxKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZpc3AxMTZ4LT5sb2NrKTsKKworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SRVNVTUlORzsKKwltc2xlZXAoMjApOworCisJLyogR28gb3BlcmF0aW9uYWwgKi8KKwlzcGluX2xvY2tfaXJxKCZpc3AxMTZ4LT5sb2NrKTsKKwl2YWwgPSBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgSENDT05UUk9MKTsKKwlpc3AxMTZ4X3dyaXRlX3JlZzMyKGlzcDExNngsIEhDQ09OVFJPTCwKKwkJCSAgICAodmFsICYgfkhDQ09OVFJPTF9IQ0ZTKSB8IEhDQ09OVFJPTF9VU0JfT1BFUik7CisJc3Bpbl91bmxvY2tfaXJxKCZpc3AxMTZ4LT5sb2NrKTsKKwkvKiBzZWUgYW5hbG9nb3VzIGNvbW1lbnQgYWJvdmUgKi8KKwloY2QtPnNlbGYucm9vdF9odWItPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworI2RlZmluZQlpc3AxMTZ4X2J1c19zdXNwZW5kCU5VTEwKKyNkZWZpbmUJaXNwMTE2eF9idXNfcmVzdW1lCU5VTEwKKworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIGlzcDExNnhfaGNfZHJpdmVyID0gewogCS5kZXNjcmlwdGlvbiA9IGhjZF9uYW1lLApAQCAtMTczNSwxMiArMTY1NCwxOSBAQAogCX0KIAogCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBTQV9JTlRFUlJVUFQpOwotCWlmIChyZXQgIT0gMCkKKwlpZiAocmV0KQogCQlnb3RvIGVycjY7CiAKLQljcmVhdGVfZGVidWdfZmlsZShpc3AxMTZ4KTsKKwlyZXQgPSBjcmVhdGVfZGVidWdfZmlsZShpc3AxMTZ4KTsKKwlpZiAocmV0KSB7CisJCUVSUigiQ291bGRuJ3QgY3JlYXRlIGRlYnVnZnMgZW50cnlcbiIpOworCQlnb3RvIGVycjc7CisJfQorCiAJcmV0dXJuIDA7CiAKKyAgICAgIGVycjc6CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKICAgICAgIGVycjY6CiAJdXNiX3B1dF9oY2QoaGNkKTsKICAgICAgIGVycjU6CkBAIC0xNzYyLDEzICsxNjg4LDkgQEAKICovCiBzdGF0aWMgaW50IGlzcDExNnhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlpbnQgcmV0ID0gMDsKLQotCVZEQkcoIiVzOiBzdGF0ZSAleFxuIiwgX19mdW5jX18sIHN0YXRlKTsKLQorCVZEQkcoIiVzOiBzdGF0ZSAleFxuIiwgX19mdW5jX18sIHN0YXRlLmV2ZW50KTsKIAlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE3NzYsMTMgKzE2OTgsOSBAQAogKi8KIHN0YXRpYyBpbnQgaXNwMTE2eF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWludCByZXQgPSAwOwotCi0JVkRCRygiJXM6ICBzdGF0ZSAleFxuIiwgX19mdW5jX18sIGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlKTsKLQorCVZEQkcoIiVzOiAgc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50KTsKIAlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAppbmRleCBjNmZlYzk2Li5hMWI3YzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaApAQCAtMjU5LDcgKzI1OSw3IEBACiAKIAlzdHJ1Y3QgaXNwMTE2eF9wbGF0Zm9ybV9kYXRhICpib2FyZDsKIAotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAl1bnNpZ25lZCBsb25nIHN0YXQxLCBzdGF0Miwgc3RhdDQsIHN0YXQ4LCBzdGF0MTY7CiAKIAkvKiBIQyByZWdpc3RlcnMgKi8KQEAgLTQ1MCw3ICs0NTAsNyBAQAogCWlzcDExNnhfd3JpdGVfZGF0YTMyKGlzcDExNngsICh1MzIpIHZhbCk7CiB9CiAKLSNkZWZpbmUgaXNwMTE2eF9zaG93X3JlZyhkLHIpIHsJCQkJCVwKKyNkZWZpbmUgaXNwMTE2eF9zaG93X3JlZ19sb2coZCxyLHMpIHsJCQkJXAogCWlmICgocikgPCAweDIwKSB7CQkJICAgICAgICAgICAgICAgIFwKIAkJREJHKCIlLTEyc1slMDJ4XTogJTA4eFxuIiwgI3IsCQkJXAogCQkJciwgaXNwMTE2eF9yZWFkX3JlZzMyKGQsIHIpKTsJCVwKQEAgLTQ1OSwzNSArNDU5LDYwIEBACiAJCQlyLCBpc3AxMTZ4X3JlYWRfcmVnMTYoZCwgcikpOwkgICAgCVwKIAl9CQkJCQkJCVwKIH0KKyNkZWZpbmUgaXNwMTE2eF9zaG93X3JlZ19zZXEoZCxyLHMpIHsJCQkJXAorCWlmICgocikgPCAweDIwKSB7CQkJCQlcCisJCXNlcV9wcmludGYocywgIiUtMTJzWyUwMnhdOiAlMDh4XG4iLCAjciwJXAorCQkJciwgaXNwMTE2eF9yZWFkX3JlZzMyKGQsIHIpKTsJCVwKKwl9IGVsc2UgewkJCQkJCVwKKwkJc2VxX3ByaW50ZihzLCAiJS0xMnNbJTAyeF06ICAgICAlMDR4XG4iLCAjciwJXAorCQkJciwgaXNwMTE2eF9yZWFkX3JlZzE2KGQsIHIpKTsJCVwKKwl9CQkJCQkJCVwKK30KIAotc3RhdGljIGlubGluZSB2b2lkIGlzcDExNnhfc2hvd19yZWdzKHN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4KQorI2RlZmluZSBpc3AxMTZ4X3Nob3dfcmVncyhkLHR5cGUscykgewkJCVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ1JFVklTSU9OLCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDQ09OVFJPTCwgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ0NNRFNUQVQsIHMpOwlcCisJaXNwMTE2eF9zaG93X3JlZ18jI3R5cGUoZCwgSENJTlRTVEFULCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDSU5URU5CLCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDRk1JTlRWTCwgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ0ZNUkVNLCBzKTsJCVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ0ZNTlVNLCBzKTsJCVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ0xTVEhSRVNILCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDUkhERVNDQSwgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ1JIREVTQ0IsIHMpOwlcCisJaXNwMTE2eF9zaG93X3JlZ18jI3R5cGUoZCwgSENSSFNUQVRVUywgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ1JIUE9SVDEsIHMpOwlcCisJaXNwMTE2eF9zaG93X3JlZ18jI3R5cGUoZCwgSENSSFBPUlQyLCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDSFdDRkcsIHMpOwkJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDRE1BQ0ZHLCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDWEZFUkNUUiwgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ3VQSU5ULCBzKTsJCVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ3VQSU5URU5CLCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDQ0hJUElELCBzKTsJXAorCWlzcDExNnhfc2hvd19yZWdfIyN0eXBlKGQsIEhDU0NSQVRDSCwgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ0lUTEJVRkxFTiwgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ0FUTEJVRkxFTiwgcyk7CVwKKwlpc3AxMTZ4X3Nob3dfcmVnXyMjdHlwZShkLCBIQ0JVRlNUQVQsIHMpOwlcCisJaXNwMTE2eF9zaG93X3JlZ18jI3R5cGUoZCwgSENSRElUTDBMRU4sIHMpOwlcCisJaXNwMTE2eF9zaG93X3JlZ18jI3R5cGUoZCwgSENSRElUTDFMRU4sIHMpOwlcCit9CisKKy8qCisgICBEdW1wIHJlZ2lzdGVycyBmb3IgZGVidWdmcy4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgaXNwMTE2eF9zaG93X3JlZ3Nfc2VxKHN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4LAorCQkJCQkgIHN0cnVjdCBzZXFfZmlsZSAqcykKIHsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDUkVWSVNJT04pOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENDT05UUk9MKTsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDQ01EU1RBVCk7Ci0JaXNwMTE2eF9zaG93X3JlZyhpc3AxMTZ4LCBIQ0lOVFNUQVQpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENJTlRFTkIpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENGTUlOVFZMKTsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDRk1SRU0pOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENGTU5VTSk7Ci0JaXNwMTE2eF9zaG93X3JlZyhpc3AxMTZ4LCBIQ0xTVEhSRVNIKTsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDUkhERVNDQSk7Ci0JaXNwMTE2eF9zaG93X3JlZyhpc3AxMTZ4LCBIQ1JIREVTQ0IpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENSSFNUQVRVUyk7Ci0JaXNwMTE2eF9zaG93X3JlZyhpc3AxMTZ4LCBIQ1JIUE9SVDEpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENSSFBPUlQyKTsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDSFdDRkcpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENETUFDRkcpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENYRkVSQ1RSKTsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDdVBJTlQpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSEN1UElOVEVOQik7Ci0JaXNwMTE2eF9zaG93X3JlZyhpc3AxMTZ4LCBIQ0NISVBJRCk7Ci0JaXNwMTE2eF9zaG93X3JlZyhpc3AxMTZ4LCBIQ1NDUkFUQ0gpOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENJVExCVUZMRU4pOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENBVExCVUZMRU4pOwotCWlzcDExNnhfc2hvd19yZWcoaXNwMTE2eCwgSENCVUZTVEFUKTsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDUkRJVEwwTEVOKTsKLQlpc3AxMTZ4X3Nob3dfcmVnKGlzcDExNngsIEhDUkRJVEwxTEVOKTsKKwlpc3AxMTZ4X3Nob3dfcmVncyhpc3AxMTZ4LCBzZXEsIHMpOworfQorCisvKgorICAgRHVtcCByZWdpc3RlcnMgdG8gc3lzbG9nLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc3AxMTZ4X3Nob3dfcmVnc19sb2coc3RydWN0IGlzcDExNnggKmlzcDExNngpCit7CisJaXNwMTE2eF9zaG93X3JlZ3MoaXNwMTE2eCwgbG9nLCBOVUxMKTsKIH0KIAogI2lmIGRlZmluZWQoVVJCX1RSQUNFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IGJmMWQ5YWIuLmE0YjEyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTc1LDEzICs3NSw2IEBACiAgKi8KICAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKLSMJZGVmaW5lIERFQlVHCi0jZWxzZQotIwl1bmRlZiBERUJVRwotI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtODAyLDcgKzc5NSw2IEBACiAJaW50IHRlbXA7CiAJaW50IGk7CiAJc3RydWN0IHVyYl9wcml2ICpwcml2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpyb290ID0gb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWI7CiAKIAkvKiBtYXJrIGFueSBkZXZpY2VzIGdvbmUsIHNvIHRoZXkgZG8gbm90aGluZyB0aWxsIGtodWJkIGRpc2Nvbm5lY3RzLgogCSAqIHJlY3ljbGUgYW55ICJsaXZlIiBlZHMvdGRzIChhbmQgdXJicykgcmlnaHQgYXdheS4KQEAgLTgxMSwxMSArODAzLDcgQEAKIAkgKi8gCiAJc3Bpbl9sb2NrX2lycSgmb2hjaS0+bG9jayk7CiAJZGlzYWJsZSAob2hjaSk7Ci0JZm9yIChpID0gMDsgaSA8IHJvb3QtPm1heGNoaWxkOyBpKyspIHsKLQkJaWYgKHJvb3QtPmNoaWxkcmVuIFtpXSkKLQkJCXVzYl9zZXRfZGV2aWNlX3N0YXRlIChyb290LT5jaGlsZHJlbltpXSwKLQkJCQlVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwotCX0KKwl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yik7CiAJaWYgKCFsaXN0X2VtcHR5ICgmb2hjaS0+cGVuZGluZykpCiAJCW9oY2lfZGJnKG9oY2ksICJhYm9ydCBzY2hlZHVsZS4uLlxuIik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSAocHJpdiwgJm9oY2ktPnBlbmRpbmcsIHBlbmRpbmcpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA3MmUzYjEyLi40YjIyMjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAkJCQkJJiBvaGNpLT5oY19jb250cm9sKQogCQkJCT09IE9IQ0lfVVNCX09QRVIKIAkJCSYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpCi0JCQkmJiB1c2JfdHJ5bG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1YikKKwkJCSYmIHVzYl90cnlsb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKSA9PSAwCiAJCQkpIHsKIAkJb2hjaV92ZGJnIChvaGNpLCAiYXV0b3N1c3BlbmRcbiIpOwogCQkodm9pZCkgb2hjaV9idXNfc3VzcGVuZCAoaGNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCA5ZDY1ZWMzLi5hY2RlODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0yNiwxOCArMjYsMTIgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0KLQotI2RlZmluZSBQTU1fTlBTX01PREUgICAgICAgICAgIDEKLSNkZWZpbmUgUE1NX0dMT0JBTF9NT0RFICAgICAgICAyCi0jZGVmaW5lIFBNTV9QRVJQT1JUX01PREUgICAgICAgMworI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KIAogI2RlZmluZSBQWEFfVUhDX01BWF9QT1JUTlVNICAgIDMKIAogI2RlZmluZSBVSENSSFBTKHgpICAgICAgICAgICAgICBfX1JFRzIoIDB4NEMwMDAwNTAsICh4KTw8MiApCiAKLXN0YXRpYyBpbnQgcHhhMjd4X29oY2lfcG1tX3N0YXRlOwotCiAvKgogICBQTU1fTlBTX01PREUgLS0gUE1NIE5vbi1wb3dlciBzd2l0Y2hpbmcgbW9kZQogICAgICAgUG9ydHMgYXJlIHBvd2VyZWQgY29udGludW91c2x5LgpAQCAtNTAsOCArNDQsNiBAQAogICovCiBzdGF0aWMgaW50IHB4YTI3eF9vaGNpX3NlbGVjdF9wbW0oIGludCBtb2RlICkKIHsKLQlweGEyN3hfb2hjaV9wbW1fc3RhdGUgPSBtb2RlOwotCiAJc3dpdGNoICggbW9kZSApIHsKIAljYXNlIFBNTV9OUFNfTU9ERToKIAkJVUhDUkhEQSB8PSBSSF9BX05QUzsKQEAgLTcxLDcgKzYzLDYgQEAKIAkJCSJJbnZhbGlkIG1vZGUgJWQsIHNldCB0byBub24tcG93ZXIgc3dpdGNoIG1vZGUuXG4iLCAKIAkJCW1vZGUgKTsKIAotCQlweGEyN3hfb2hjaV9wbW1fc3RhdGUgPSBQTU1fTlBTX01PREU7CiAJCVVIQ1JIREEgfD0gUkhfQV9OUFM7CiAJfQogCkBAIC04Miw4ICs3MywxMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBweGEyN3hfc3RhcnRfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyN3hfc3RhcnRfaGMoc3RydWN0IGRldmljZSAqZGV2KQogeworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgKmluZjsKKworCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwogCXB4YV9zZXRfY2tlbihDS0VOMTBfVVNCSE9TVCwgMSk7CiAKIAlVSENIUiB8PSBVSENIUl9GSFI7CkBAIC05NCwyMSArOTAsMTEgQEAKIAl3aGlsZSAoVUhDSFIgJiBVSENIUl9GU0JJUikKIAkJY3B1X3JlbGF4KCk7CiAKLQkvKiBUaGlzIGNvdWxkIGJlIHByb3Blcmx5IGFic3RyYWN0ZWQgYXdheSB0aHJvdWdoIHRoZQotCSAgIGRldmljZSBkYXRhIHRoZSBkYXkgbW9yZSBtYWNoaW5lcyBhcmUgc3VwcG9ydGVkIGFuZAotCSAgIHRoZWlyIGRpZmZlcmVuY2VzIGNhbiBiZSBmaWd1cmVkIG91dCBjb3JyZWN0bHkuICovCi0JaWYgKG1hY2hpbmVfaXNfbWFpbnN0b25lKCkpIHsKLQkJLyogc2V0dXAgUG9ydDEgR1BJTyBwaW4uICovCi0JCXB4YV9ncGlvX21vZGUoIDg4IHwgR1BJT19BTFRfRk5fMV9JTik7CS8qIFVTQkhQV1IxICovCi0JCXB4YV9ncGlvX21vZGUoIDg5IHwgR1BJT19BTFRfRk5fMl9PVVQpOwkvKiBVU0JIUEVOMSAqLworCWlmIChpbmYtPmluaXQpCisJCXJldHZhbCA9IGluZi0+aW5pdChkZXYpOwogCi0JCS8qIFNldCB0aGUgUG93ZXIgQ29udHJvbCBQb2xhcml0eSBMb3cgYW5kIFBvd2VyIFNlbnNlCi0JCSAgIFBvbGFyaXR5IExvdyB0byBhY3RpdmUgbG93LiBTdXBwbHkgcG93ZXIgdG8gVVNCIHBvcnRzLiAqLwotCQlVSENIUiA9IChVSENIUiB8IFVIQ0hSX1BDUEwgfCBVSENIUl9QU1BMKSAmCi0JCQl+KFVIQ0hSX1NTRVAxIHwgVUhDSFJfU1NFUDIgfCBVSENIUl9TU0VQMyB8IFVIQ0hSX1NTRSk7Ci0KLQkJcHhhMjd4X29oY2lfcG1tX3N0YXRlID0gUE1NX1BFUlBPUlRfTU9ERTsKLQl9CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CiAKIAlVSENIUiAmPSB+VUhDSFJfU1NFOwogCkBAIC0xMTcsMTAgKzEwMywxOSBAQAogCS8qIENsZWFyIGFueSBPVEcgUGluIEhvbGQgKi8KIAlpZiAoUFNTUiAmIFBTU1JfT1RHUEgpCiAJCVBTU1IgfD0gUFNTUl9PVEdQSDsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBweGEyN3hfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBweGEyN3hfc3RvcF9oYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSAqaW5mOworCisJaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKGluZi0+ZXhpdCkKKwkJaW5mLT5leGl0KGRldik7CisKIAlVSENIUiB8PSBVSENIUl9GSFI7CiAJdWRlbGF5KDExKTsKIAlVSENIUiAmPSB+VUhDSFJfRkhSOwpAQCAtMTQ3LDIyICsxNDIsMjcgQEAKICAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KICAqCiAgKi8KLWludCB1c2JfaGNkX3B4YTI3eF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAotCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitpbnQgdXNiX2hjZF9weGEyN3hfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSAqaW5mOwogCi0JaWYgKGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKKwlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghaW5mKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgewogCQlwcl9kZWJ1ZyAoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmZGV2LT5kZXYsICJweGEyN3giKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmcGRldi0+ZGV2LCAicHhhMjd4Iik7CiAJaWYgKCFoY2QpCiAJCXJldHVybiAtRU5PTUVNOwotCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0JaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisJaGNkLT5yc3JjX3N0YXJ0ID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CiAJCXByX2RlYnVnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIik7CkBAIC0xNzcsMTggKzE3NywyMiBAQAogCQlnb3RvIGVycjI7CiAJfQogCi0JcHhhMjd4X3N0YXJ0X2hjKGRldik7CisJaWYgKChyZXR2YWwgPSBweGEyN3hfc3RhcnRfaGMoJnBkZXYtPmRldikpIDwgMCkgeworCQlwcl9kZWJ1ZygicHhhMjd4X3N0YXJ0X2hjIGZhaWxlZCIpOworCQlnb3RvIGVycjM7CisJfQogCiAJLyogU2VsZWN0IFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAqLwotCXB4YTI3eF9vaGNpX3NlbGVjdF9wbW0ocHhhMjd4X29oY2lfcG1tX3N0YXRlKTsKKwlweGEyN3hfb2hjaV9zZWxlY3RfcG1tKGluZi0+cG9ydF9tb2RlKTsKIAogCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CiAKLQlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKIAlpZiAocmV0dmFsID09IDApCiAJCXJldHVybiByZXR2YWw7CiAKLQlweGEyN3hfc3RvcF9oYyhkZXYpOworCXB4YTI3eF9zdG9wX2hjKCZwZGV2LT5kZXYpOworIGVycjM6CiAJaW91bm1hcChoY2QtPnJlZ3MpOwogIGVycjI6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CkBAIC0yMTEsMTAgKzIxNSwxMCBAQAogICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KICAqCiAgKi8KLXZvaWQgdXNiX2hjZF9weGEyN3hfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit2b2lkIHVzYl9oY2RfcHhhMjd4X3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwotCXB4YTI3eF9zdG9wX2hjKGRldik7CisJcHhhMjd4X3N0b3BfaGMoJnBkZXYtPmRldik7CiAJaW91bm1hcChoY2QtPnJlZ3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCXVzYl9wdXRfaGNkKGhjZCk7CkBAIC0yOTIsMTUgKzI5NiwxMiBAQAogCiBzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgcmV0OwotCiAJcHJfZGVidWcgKCJJbiBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlIik7CiAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gdXNiX2hjZF9weGEyN3hfcHJvYmUoJm9oY2lfcHhhMjd4X2hjX2RyaXZlciwgcGRldik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdXNiX2hjZF9weGEyN3hfcHJvYmUoJm9oY2lfcHhhMjd4X2hjX2RyaXZlciwgcGRldik7CiB9CiAKIHN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTMwOCwzMSArMzA5LDU1IEBACiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJdXNiX2hjZF9weGEyN3hfcmVtb3ZlKGhjZCwgcGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorI2lmZGVmCUNPTkZJR19QTQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotLy8Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Ci0JcHJpbnRrKCIlczogbm90IGltcGxlbWVudGVkIHlldFxuIiwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG9oY2lfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCisJcHhhMjd4X3N0b3BfaGMoJnBkZXYtPmRldik7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKwlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX1NVU1BFTkQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0vLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQlwcmludGsoIiVzOiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iLCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCWludCBzdGF0dXM7CisKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKwlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKKworCWlmICgoc3RhdHVzID0gcHhhMjd4X3N0YXJ0X2hjKCZwZGV2LT5kZXYpKSA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3B4YTI3eF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwgCiAJLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwKKyNlbmRpZgogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyN3gtb2hjaSIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggZTQ2NTI4Yy4uM2VmMmMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTksMTIgKzksNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCi0jZGVmaW5lIERFQlVHCi0jZWxzZQotI3VuZGVmIERFQlVHCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCBhNzcyMmE2Li41MTczNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTMyLDEzICszMiw2IEBACiAjdW5kZWYJUEFDS0VUX1RSQUNFCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKLSMJZGVmaW5lIERFQlVHCi0jZWxzZQotIwl1bmRlZiBERUJVRwotI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTU4MSw3ICsxNTc0LDkgQEAKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKIAogCWlmIChzbDgxMS0+Ym9hcmQpIHsKLQkJaGNkLT5jYW5fd2FrZXVwID0gc2w4MTEtPmJvYXJkLT5jYW5fd2FrZXVwOworCQlpZiAoIWRldmljZV9jYW5fd2FrZXVwKGhjZC0+c2VsZi5jb250cm9sbGVyKSkKKwkJCWRldmljZV9pbml0X3dha2V1cChoY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQlzbDgxMS0+Ym9hcmQtPmNhbl93YWtldXApOwogCQloY2QtPnBvd2VyX2J1ZGdldCA9IHNsODExLT5ib2FyZC0+cG93ZXIgKiAyOwogCX0KIApAQCAtMTgwNSw5ICsxODAwLDEwIEBACiAJICogbGV0J3MgYXNzdW1lIGl0J2Qgb25seSBiZSBwb3dlcmVkIHRvIGVuYWJsZSByZW1vdGUgd2FrZXVwLgogCSAqLwogCWlmIChkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5ECi0JCQl8fCAhaGNkLT5jYW5fd2FrZXVwKSB7CisJCQl8fCAhZGV2aWNlX2Nhbl93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2KSkgewogCQlzbDgxMS0+cG9ydDEgPSAwOwogCQlwb3J0X3Bvd2VyKHNsODExLCAxKTsKKwkJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoaGNkLT5zZWxmLnJvb3RfaHViKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKaW5kZXggZTczZmFmOC4uNTA1NmI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYwpAQCAtMzgsNyArMzgsNyBAQAogLyogTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9ERUJVRykgfHwgZGVmaW5lZChQQ01DSUFfREVCVUcpCisjaWYgZGVmaW5lZChERUJVRykgfHwgZGVmaW5lZChQQ01DSUFfREVCVUcpCiAKIHN0YXRpYyBpbnQgcGNfZGVidWcgPSAwOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOwpAQCAtMTI5LDcgKzEyOSw4IEBACiAJcmVzb3VyY2VzWzJdLmVuZCAgID0gYmFzZV9hZGRyICsgMTsKIAogCS8qIFRoZSBkcml2ZXIgY29yZSB3aWxsIHByb2JlIGZvciB1cy4gIFdlIGtub3cgc2w4MTEtaGNkIGhhcyBiZWVuCi0JICogaW5pdGlhbGl6ZWQgYWxyZWFkeSBiZWNhdXNlIG9mIHRoZSBsaW5rIG9yZGVyIGRlcGVuZGVuY3kuCisJICogaW5pdGlhbGl6ZWQgYWxyZWFkeSBiZWNhdXNlIG9mIHRoZSBsaW5rIG9yZGVyIGRlcGVuZGVuY3kgY3JlYXRlZAorCSAqIGJ5IHJlZmVyZW5jaW5nICJzbDgxMWhfZHJpdmVyIi4KIAkgKi8KIAlwbGF0Zm9ybV9kZXYubmFtZSA9IHNsODExaF9kcml2ZXIubmFtZTsKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbGF0Zm9ybV9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwppbmRleCAxNTExNTRkLi41ODMyOTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwpAQCAtMiw4ICsyLDggQEAKICAqIFVIQ0ktc3BlY2lmaWMgZGVidWdnaW5nIGNvZGUuIEludmFsdWFibGUgd2hlbiBzb21ldGhpbmcKICAqIGdvZXMgd3JvbmcsIGJ1dCBkb24ndCBnZXQgaW4gbXkgZmFjZS4KICAqCi0gKiBLZXJuZWwgdmlzaWJsZSBwb2ludGVycyBhcmUgc3Vycm91bmRlZCBpbiBbXSdzIGFuZCBidXMKLSAqIHZpc2libGUgcG9pbnRlcnMgYXJlIHN1cnJvdW5kZWQgaW4gKCkncworICogS2VybmVsIHZpc2libGUgcG9pbnRlcnMgYXJlIHN1cnJvdW5kZWQgaW4gW11zIGFuZCBidXMKKyAqIHZpc2libGUgcG9pbnRlcnMgYXJlIHN1cnJvdW5kZWQgaW4gKClzCiAgKgogICogKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzCiAgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMSBKb2hhbm5lcyBFcmRmZWx0CkBAIC0xOSw3ICsxOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1aGNpX2RlYnVnZnNfcm9vdCA9IE5VTEw7CiAKLS8qIEhhbmRsZSBSRUFMTFkgbGFyZ2UgcHJpbnRrJ3Mgc28gd2UgZG9uJ3Qgb3ZlcmZsb3cgYnVmZmVycyAqLworLyogSGFuZGxlIFJFQUxMWSBsYXJnZSBwcmludGtzIHNvIHdlIGRvbid0IG92ZXJmbG93IGJ1ZmZlcnMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBscHJpbnRrKGNoYXIgKmJ1ZikKIHsKIAljaGFyICpwOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJCQl9CiAKIAkJCWlmIChhY3RpdmUgJiYgbmkgPiBpKSB7Ci0JCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzW3NraXBwZWQgJWQgYWN0aXZlIFREJ3NdXG4iLCBzcGFjZSwgIiIsIG5pIC0gaSk7CisJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzW3NraXBwZWQgJWQgYWN0aXZlIFREc11cbiIsIHNwYWNlLCAiIiwgbmkgLSBpKTsKIAkJCQl0bXAgPSBudG1wOwogCQkJCXRkID0gbnRkOwogCQkJCWkgPSBuaTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZ1cmJwLT5xdWV1ZV9saXN0KSB8fCB1cmJwLT5xdWV1ZWQpCiAJCWdvdG8gb3V0OwogCi0Jb3V0ICs9IHNwcmludGYob3V0LCAiJSpzUXVldWVkIFFIJ3M6XG4iLCAtc3BhY2UsICItLSIpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiUqc1F1ZXVlZCBRSHM6XG4iLCAtc3BhY2UsICItLSIpOwogCiAJaGVhZCA9ICZ1cmJwLT5xdWV1ZV9saXN0OwogCXRtcCA9IGhlYWQtPm5leHQ7CkBAIC0xOTcsNyArMTk3LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGNvbnN0IGNoYXIgKnFoX25hbWVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHFoX25hbWVzW10gPSB7CiAgICJza2VsX2ludDEyOF9xaCIsICJza2VsX2ludDY0X3FoIiwKICAgInNrZWxfaW50MzJfcWgiLCAic2tlbF9pbnQxNl9xaCIsCiAgICJza2VsX2ludDhfcWgiLCAic2tlbF9pbnQ0X3FoIiwKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCQl9IHdoaWxlICh0bXAgIT0gaGVhZCk7CiAJfQogCi0Jb3V0ICs9IHNwcmludGYob3V0LCAiU2tlbGV0b24gUUgnc1xuIik7CisJb3V0ICs9IHNwcmludGYob3V0LCAiU2tlbGV0b24gUUhzXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7ICsraSkgewogCQlpbnQgc2hvd24gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCmluZGV4IDc5ZWZhZjcuLmRmZTEyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKQEAgLTIzLDExICsyMyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKLSNkZWZpbmUgREVCVUcKLSNlbHNlCi0jdW5kZWYgREVCVUcKLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNjcsMTAgKzYyLDEwIEBACiAKIC8qCiAgKiBkZWJ1ZyA9IDAsIG5vIGRlYnVnZ2luZyBtZXNzYWdlcwotICogZGVidWcgPSAxLCBkdW1wIGZhaWxlZCBVUkIncyBleGNlcHQgZm9yIHN0YWxscwotICogZGVidWcgPSAyLCBkdW1wIGFsbCBmYWlsZWQgVVJCJ3MgKGluY2x1ZGluZyBzdGFsbHMpCisgKiBkZWJ1ZyA9IDEsIGR1bXAgZmFpbGVkIFVSQnMgZXhjZXB0IGZvciBzdGFsbHMKKyAqIGRlYnVnID0gMiwgZHVtcCBhbGwgZmFpbGVkIFVSQnMgKGluY2x1ZGluZyBzdGFsbHMpCiAgKiAgICAgICAgICAgIHNob3cgYWxsIHF1ZXVlcyBpbiAvZGVidWcvdWhjaS9bcGNpX2FkZHJdCi0gKiBkZWJ1ZyA9IDMsIHNob3cgYWxsIFREJ3MgaW4gVVJCJ3Mgd2hlbiBkdW1waW5nCisgKiBkZWJ1ZyA9IDMsIHNob3cgYWxsIFREcyBpbiBVUkJzIHdoZW4gZHVtcGluZwogICovCiAjaWZkZWYgREVCVUcKIHN0YXRpYyBpbnQgZGVidWcgPSAxOwpAQCAtOTMsNyArODgsNyBAQAogI2RlZmluZSBGU0JSX0RFTEFZCW1zZWNzX3RvX2ppZmZpZXMoNTApCiAKIC8qIFdoZW4gd2UgdGltZW91dCBhbiBpZGxlIHRyYW5zZmVyIGZvciBGU0JSLCB3ZSdsbCBzd2l0Y2ggaXQgb3ZlciB0byAqLwotLyogZGVwdGggZmlyc3QgdHJhdmVyc2FsLiBXZSdsbCBkbyBpdCBpbiBncm91cHMgb2YgdGhpcyBudW1iZXIgb2YgVEQncyAqLworLyogZGVwdGggZmlyc3QgdHJhdmVyc2FsLiBXZSdsbCBkbyBpdCBpbiBncm91cHMgb2YgdGhpcyBudW1iZXIgb2YgVERzICovCiAvKiB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBob2cgYWxsIG9mIHRoZSBiYW5kd2lkdGggKi8KICNkZWZpbmUgREVQVEhfSU5URVJWQUwgNQogCkBAIC00NzgsOCArNDczLDYgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAloY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOwotCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLCBQQ0lfQ0FQX0lEX1BNKSkKLQkJaGNkLT5jYW5fd2FrZXVwID0gMTsJCS8qIEFzc3VtZSBpdCBzdXBwb3J0cyBQTUUjICovCiAKIAlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGhjZC0+c2VsZi5idXNfbmFtZSwKIAkJCVNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCB1aGNpX2RlYnVnZnNfcm9vdCwgdWhjaSwKQEAgLTU3Myw3ICs1NjYsNyBAQAogCXVoY2ktPnNrZWxfYnVsa19xaC0+bGluayA9IGNwdV90b19sZTMyKHVoY2ktPnNrZWxfdGVybV9xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKIAogCS8qIFRoaXMgZHVtbXkgVEQgaXMgdG8gd29yayBhcm91bmQgYSBidWcgaW4gSW50ZWwgUElJWCBjb250cm9sbGVycyAqLwotCXVoY2lfZmlsbF90ZCh1aGNpLT50ZXJtX3RkLCAwLCAoVUhDSV9OVUxMX0RBVEFfU0laRSA8PCAyMSkgfAorCXVoY2lfZmlsbF90ZCh1aGNpLT50ZXJtX3RkLCAwLCB1aGNpX2V4cGxlbigwKSB8CiAJCSgweDdmIDw8IFREX1RPS0VOX0RFVkFERFJfU0hJRlQpIHwgVVNCX1BJRF9JTiwgMCk7CiAJdWhjaS0+dGVybV90ZC0+bGluayA9IGNwdV90b19sZTMyKHVoY2ktPnRlcm1fdGQtPmRtYV9oYW5kbGUpOwogCkBAIC03MzUsOCArNzI4LDkgQEAKIAogCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCS8qIFdlIGFyZW4ndCBpbiBEMyBzdGF0ZSBhbnltb3JlLCB3ZSBkbyB0aGF0IGV2ZW4gaWYgZGVhZCBhcyBJCi0JICogcmVhbGx5IGRvbid0IHdhbnQgdG8ga2VlcCBhIHN0YWxlIEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEU9MAorCS8qIFNpbmNlIHdlIGFyZW4ndCBpbiBEMyBhbnkgbW9yZSwgaXQncyBzYWZlIHRvIHNldCB0aGlzIGZsYWcKKwkgKiBldmVuIGlmIHRoZSBjb250cm9sbGVyIHdhcyBkZWFkLiAgSXQgbWlnaHQgbm90IGV2ZW4gYmUgZGVhZAorCSAqIGFueSBtb3JlLCBpZiB0aGUgZmlybXdhcmUgb3IgcXVpcmtzIGNvZGUgaGFzIHJlc2V0IGl0LgogCSAqLwogCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwogCW1iKCk7CkBAIC03NTUsOCArNzQ5LDEyIEBACiAJY2hlY2tfYW5kX3Jlc2V0X2hjKHVoY2kpOwogCWNvbmZpZ3VyZV9oYyh1aGNpKTsKIAotCWlmICh1aGNpLT5yaF9zdGF0ZSA9PSBVSENJX1JIX1JFU0VUKQorCWlmICh1aGNpLT5yaF9zdGF0ZSA9PSBVSENJX1JIX1JFU0VUKSB7CisKKwkJLyogVGhlIGNvbnRyb2xsZXIgaGFkIHRvIGJlIHJlc2V0ICovCisJCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CiAJCXN1c3BlbmRfcmgodWhjaSwgVUhDSV9SSF9TVVNQRU5ERUQpOworCX0KIAogCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CiAKQEAgLTg4Miw3ICs4ODAsNyBAQAogCiBpbml0X2ZhaWxlZDoKIAlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHVoY2lfdXBfY2FjaGVwKSkKLQkJd2Fybigibm90IGFsbCB1cmJfcHJpdidzIHdlcmUgZnJlZWQhIik7CisJCXdhcm4oIm5vdCBhbGwgdXJiX3ByaXZzIHdlcmUgZnJlZWQhIik7CiAKIHVwX2ZhaWxlZDoKIAlkZWJ1Z2ZzX3JlbW92ZSh1aGNpX2RlYnVnZnNfcm9vdCk7CkBAIC05MDAsNyArODk4LDcgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnVoY2lfcGNpX2RyaXZlcik7CiAJCiAJaWYgKGttZW1fY2FjaGVfZGVzdHJveSh1aGNpX3VwX2NhY2hlcCkpCi0JCXdhcm4oIm5vdCBhbGwgdXJiX3ByaXYncyB3ZXJlIGZyZWVkISIpOworCQl3YXJuKCJub3QgYWxsIHVyYl9wcml2cyB3ZXJlIGZyZWVkISIpOwogCiAJZGVidWdmc19yZW1vdmUodWhjaV9kZWJ1Z2ZzX3Jvb3QpOwogCWtmcmVlKGVycmJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKaW5kZXggZTU3NmRiNS4uOGI0Yjg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaApAQCAtNzEsOCArNzEsNiBAQAogI2RlZmluZSAgIFVTQkxFR1NVUF9SV0MJCTB4OGYwMAkvKiB0aGUgUi9XQyBiaXRzICovCiAjZGVmaW5lICAgVVNCTEVHU1VQX1JPCQkweDUwNDAJLyogUi9PIGFuZCByZXNlcnZlZCBiaXRzICovCiAKLSNkZWZpbmUgVUhDSV9OVUxMX0RBVEFfU0laRQkweDdGRgkvKiBmb3IgVUhDSSBjb250cm9sbGVyIFREICovCi0KICNkZWZpbmUgVUhDSV9QVFJfQklUUwkJY3B1X3RvX2xlMzIoMHgwMDBGKQogI2RlZmluZSBVSENJX1BUUl9URVJNCQljcHVfdG9fbGUzMigweDAwMDEpCiAjZGVmaW5lIFVIQ0lfUFRSX1FICQljcHVfdG9fbGUzMigweDAwMDIpCkBAIC0xNjgsOSArMTY2LDExIEBACiAjZGVmaW5lIFREX1RPS0VOX0VYUExFTl9NQVNLCTB4N0ZGCQkvKiBleHBlY3RlZCBsZW5ndGgsIGVuY29kZWQgYXMgbiAtIDEgKi8KICNkZWZpbmUgVERfVE9LRU5fUElEX01BU0sJMHhGRgogCi0jZGVmaW5lIHVoY2lfZXhwbGVuKGxlbikJKChsZW4pIDw8IFREX1RPS0VOX0VYUExFTl9TSElGVCkKKyNkZWZpbmUgdWhjaV9leHBsZW4obGVuKQkoKCgobGVuKSAtIDEpICYgVERfVE9LRU5fRVhQTEVOX01BU0spIDw8IFwKKwkJCQkJVERfVE9LRU5fRVhQTEVOX1NISUZUKQogCi0jZGVmaW5lIHVoY2lfZXhwZWN0ZWRfbGVuZ3RoKHRva2VuKSAoKCgodG9rZW4pID4+IDIxKSArIDEpICYgVERfVE9LRU5fRVhQTEVOX01BU0spCisjZGVmaW5lIHVoY2lfZXhwZWN0ZWRfbGVuZ3RoKHRva2VuKSAoKCgodG9rZW4pID4+IFREX1RPS0VOX0VYUExFTl9TSElGVCkgKyBcCisJCQkJCTEpICYgVERfVE9LRU5fRVhQTEVOX01BU0spCiAjZGVmaW5lIHVoY2lfdG9nZ2xlKHRva2VuKQkoKCh0b2tlbikgPj4gVERfVE9LRU5fVE9HR0xFX1NISUZUKSAmIDEpCiAjZGVmaW5lIHVoY2lfZW5kcG9pbnQodG9rZW4pCSgoKHRva2VuKSA+PiAxNSkgJiAweGYpCiAjZGVmaW5lIHVoY2lfZGV2YWRkcih0b2tlbikJKCgodG9rZW4pID4+IFREX1RPS0VOX0RFVkFERFJfU0hJRlQpICYgMHg3ZikKQEAgLTIyMywxMCArMjIzLDEwIEBACiAgKi8KIAogLyoKLSAqIFRoZSBVSENJIGRyaXZlciBwbGFjZXMgSW50ZXJydXB0LCBDb250cm9sIGFuZCBCdWxrIGludG8gUUgncyBib3RoCi0gKiB0byBncm91cCB0b2dldGhlciBURCdzIGZvciBvbmUgdHJhbnNmZXIsIGFuZCBhbHNvIHRvIGZhY2lsaWF0ZSBxdWV1aW5nCi0gKiBvZiBVUkIncy4gVG8gbWFrZSBpdCBlYXN5IHRvIGluc2VydCBlbnRyaWVzIGludG8gdGhlIHNjaGVkdWxlLCB3ZSBoYXZlCi0gKiBhIHNrZWxldG9uIG9mIFFIJ3MgZm9yIGVhY2ggcHJlZGVmaW5lZCBJbnRlcnJ1cHQgbGF0ZW5jeSwgbG93LXNwZWVkCisgKiBUaGUgVUhDSSBkcml2ZXIgcGxhY2VzIEludGVycnVwdCwgQ29udHJvbCBhbmQgQnVsayBpbnRvIFFIcyBib3RoCisgKiB0byBncm91cCB0b2dldGhlciBURHMgZm9yIG9uZSB0cmFuc2ZlciwgYW5kIGFsc28gdG8gZmFjaWxpdGF0ZSBxdWV1aW5nCisgKiBvZiBVUkJzLiBUbyBtYWtlIGl0IGVhc3kgdG8gaW5zZXJ0IGVudHJpZXMgaW50byB0aGUgc2NoZWR1bGUsIHdlIGhhdmUKKyAqIGEgc2tlbGV0b24gb2YgUUhzIGZvciBlYWNoIHByZWRlZmluZWQgSW50ZXJydXB0IGxhdGVuY3ksIGxvdy1zcGVlZAogICogY29udHJvbCwgZnVsbC1zcGVlZCBjb250cm9sIGFuZCB0ZXJtaW5hdGluZyBRSCAoc2VlIGV4cGxhbmF0aW9uIGZvcgogICogdGhlIHRlcm1pbmF0aW5nIFFIIGJlbG93KS4KICAqCkBAIC0yNTcsOCArMjU3LDggQEAKICAqICAgcmVjbGFtYXRpb24uCiAgKgogICogSXNvY2hyb25vdXMgdHJhbnNmZXJzIGFyZSBzdG9yZWQgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc2tlbGV0b24KLSAqIHNjaGVkdWxlIGFuZCBkb24ndCB1c2UgUUgncy4gV2hpbGUgdGhlIFVIQ0kgc3BlYyBkb2Vzbid0IGZvcmJpZCB0aGUKLSAqIHVzZSBvZiBRSCdzIGZvciBJc29jaHJvbm91cywgaXQgZG9lc24ndCB1c2UgdGhlbSBlaXRoZXIuIEFuZCB0aGUgc3BlYworICogc2NoZWR1bGUgYW5kIGRvbid0IHVzZSBRSHMuIFdoaWxlIHRoZSBVSENJIHNwZWMgZG9lc24ndCBmb3JiaWQgdGhlCisgKiB1c2Ugb2YgUUhzIGZvciBJc29jaHJvbm91cywgaXQgZG9lc24ndCB1c2UgdGhlbSBlaXRoZXIuIEFuZCB0aGUgc3BlYwogICogc2F5cyB0aGF0IHF1ZXVlcyBuZXZlciBhZHZhbmNlIG9uIGFuIGVycm9yIGNvbXBsZXRpb24gc3RhdHVzLCB3aGljaAogICogbWFrZXMgdGhlbSB0b3RhbGx5IHVuc3VpdGFibGUgZm9yIElzb2Nocm9ub3VzIHRyYW5zZmVycy4KICAqLwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJc3RydWN0IGRtYV9wb29sICp0ZF9wb29sOwogCiAJc3RydWN0IHVoY2lfdGQgKnRlcm1fdGQ7CS8qIFRlcm1pbmF0aW5nIFRELCBzZWUgVUhDSSBidWcgKi8KLQlzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoW1VIQ0lfTlVNX1NLRUxRSF07CS8qIFNrZWxldG9uIFFIJ3MgKi8KKwlzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoW1VIQ0lfTlVNX1NLRUxRSF07CS8qIFNrZWxldG9uIFFIcyAqLwogCiAJc3BpbmxvY2tfdCBsb2NrOwogCkBAIC0zODksMjIgKzM4OSwyMiBAQAogCXVuc2lnbmVkIGxvbmcgcmVzdW1pbmdfcG9ydHM7CiAJdW5zaWduZWQgbG9uZyBwb3J0c190aW1lb3V0OwkJLyogVGltZSB0byBzdG9wIHNpZ25hbGxpbmcgKi8KIAotCS8qIE1haW4gbGlzdCBvZiBVUkIncyBjdXJyZW50bHkgY29udHJvbGxlZCBieSB0aGlzIEhDICovCisJLyogTWFpbiBsaXN0IG9mIFVSQnMgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhpcyBIQyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3Q7CiAKLQkvKiBMaXN0IG9mIFFIJ3MgdGhhdCBhcmUgZG9uZSwgYnV0IHdhaXRpbmcgdG8gYmUgdW5saW5rZWQgKHJhY2UpICovCisJLyogTGlzdCBvZiBRSHMgdGhhdCBhcmUgZG9uZSwgYnV0IHdhaXRpbmcgdG8gYmUgdW5saW5rZWQgKHJhY2UpICovCiAJc3RydWN0IGxpc3RfaGVhZCBxaF9yZW1vdmVfbGlzdDsKIAl1bnNpZ25lZCBpbnQgcWhfcmVtb3ZlX2FnZTsJCS8qIEFnZSBpbiBmcmFtZXMgKi8KIAotCS8qIExpc3Qgb2YgVEQncyB0aGF0IGFyZSBkb25lLCBidXQgd2FpdGluZyB0byBiZSBmcmVlZCAocmFjZSkgKi8KKwkvKiBMaXN0IG9mIFREcyB0aGF0IGFyZSBkb25lLCBidXQgd2FpdGluZyB0byBiZSBmcmVlZCAocmFjZSkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHRkX3JlbW92ZV9saXN0OwogCXVuc2lnbmVkIGludCB0ZF9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLwogCi0JLyogTGlzdCBvZiBhc3luY2hyb25vdXNseSB1bmxpbmtlZCBVUkIncyAqLworCS8qIExpc3Qgb2YgYXN5bmNocm9ub3VzbHkgdW5saW5rZWQgVVJCcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdXJiX3JlbW92ZV9saXN0OwogCXVuc2lnbmVkIGludCB1cmJfcmVtb3ZlX2FnZTsJCS8qIEFnZSBpbiBmcmFtZXMgKi8KIAotCS8qIExpc3Qgb2YgVVJCJ3MgYXdhaXRpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCS8qIExpc3Qgb2YgVVJCcyBhd2FpdGluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCiAJc3RydWN0IGxpc3RfaGVhZCBjb21wbGV0ZV9saXN0OwogCiAJaW50IHJoX251bXBvcnRzOwkJCS8qIE51bWJlciBvZiByb290LWh1YiBwb3J0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKaW5kZXggN2U0Njg4Ny4uYjYwNzYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCkBAIC04MCw3ICs4MCw3IEBACiB9CiAKIC8qCi0gKiBXZSBpbnNlcnQgSXNvY2hyb25vdXMgVVJCJ3MgZGlyZWN0bHkgaW50byB0aGUgZnJhbWUgbGlzdCBhdCB0aGUgYmVnaW5uaW5nCisgKiBXZSBpbnNlcnQgSXNvY2hyb25vdXMgVVJCcyBkaXJlY3RseSBpbnRvIHRoZSBmcmFtZSBsaXN0IGF0IHRoZSBiZWdpbm5pbmcKICAqLwogc3RhdGljIHZvaWQgdWhjaV9pbnNlcnRfdGRfZnJhbWVfbGlzdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3RkICp0ZCwgdW5zaWduZWQgZnJhbWVudW0pCiB7CkBAIC0zNjksNyArMzY5LDcgQEAKIAkJCQl1aGNpX2ZpeHVwX3RvZ2dsZSh1cmIsCiAJCQkJCXVoY2lfdG9nZ2xlKHRkX3Rva2VuKGxsdGQpKSBeIDEpKTsKIAotCS8qIEFsbCBxaCdzIGluIHRoZSBxdWV1ZSBuZWVkIHRvIGxpbmsgdG8gdGhlIG5leHQgcXVldWUgKi8KKwkvKiBBbGwgcWhzIGluIHRoZSBxdWV1ZSBuZWVkIHRvIGxpbmsgdG8gdGhlIG5leHQgcXVldWUgKi8KIAl1cmJwLT5xaC0+bGluayA9IGV1cmJwLT5xaC0+bGluazsKIAogCXdtYigpOwkJCS8qIE1ha2Ugc3VyZSB3ZSBmbHVzaCBldmVyeXRoaW5nICovCkBAIC01MDIsNyArNTAyLDcgQEAKIAl9CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJlbW92ZSBsaXN0IGlzIGVtcHR5LiBTZXQgdGhlIElPQyBiaXQgKi8KLQkvKiB0byBmb3JjZSBhbiBpbnRlcnJ1cHQgc28gd2UgY2FuIHJlbW92ZSB0aGUgVEQncyovCisJLyogdG8gZm9yY2UgYW4gaW50ZXJydXB0IHNvIHdlIGNhbiByZW1vdmUgdGhlIFREcyovCiAJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnRkX3JlbW92ZV9saXN0KSkKIAkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CiAKQEAgLTU5Niw3ICs1OTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKLQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbig3KSwKKwl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbig4KSwKIAkJdXJiLT5zZXR1cF9kbWEpOwogCiAJLyoKQEAgLTYxMiw3ICs2MTIsNyBAQAogCX0KIAogCS8qCi0JICogQnVpbGQgdGhlIERBVEEgVEQncworCSAqIEJ1aWxkIHRoZSBEQVRBIFREcwogCSAqLwogCXdoaWxlIChsZW4gPiAwKSB7CiAJCWludCBwa3RzemUgPSBsZW47CkBAIC02MjgsNyArNjI4LDcgQEAKIAkJZGVzdGluYXRpb24gXj0gVERfVE9LRU5fVE9HR0xFOwogCQogCQl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7Ci0JCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHBrdHN6ZSAtIDEpLAorCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUpLAogCQkJZGF0YSk7CiAKIAkJZGF0YSArPSBwa3RzemU7CkBAIC02NTgsNyArNjU4LDcgQEAKIAogCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKIAl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cyB8IFREX0NUUkxfSU9DLAotCQlkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKFVIQ0lfTlVMTF9EQVRBX1NJWkUpLCAwKTsKKwkJZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbigwKSwgMCk7CiAKIAlxaCA9IHVoY2lfYWxsb2NfcWgodWhjaSk7CiAJaWYgKCFxaCkKQEAgLTc0NCw3ICs3NDQsNyBAQAogCiAJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAotCS8qIFRoZSByZXN0IG9mIHRoZSBURCdzIChidXQgdGhlIGxhc3QpIGFyZSBkYXRhICovCisJLyogVGhlIHJlc3Qgb2YgdGhlIFREcyAoYnV0IHRoZSBsYXN0KSBhcmUgZGF0YSAqLwogCXRtcCA9IHRtcC0+bmV4dDsKIAl3aGlsZSAodG1wICE9IGhlYWQgJiYgdG1wLT5uZXh0ICE9IGhlYWQpIHsKIAkJdW5zaWduZWQgaW50IGN0cmxzdGF0OwpAQCAtODQ4LDcgKzg0OCw3IEBACiAJCXN0YXR1cyB8PSBURF9DVFJMX1NQRDsKIAogCS8qCi0JICogQnVpbGQgdGhlIERBVEEgVEQncworCSAqIEJ1aWxkIHRoZSBEQVRBIFREcwogCSAqLwogCWRvIHsJLyogQWxsb3cgemVybyBsZW5ndGggcGFja2V0cyAqLwogCQlpbnQgcGt0c3plID0gbWF4c3plOwpAQCAtODY0LDcgKzg2NCw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7Ci0JCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHBrdHN6ZSAtIDEpIHwKKwkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4ocGt0c3plKSB8CiAJCQkodXNiX2dldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAogCQkJIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIDw8IFREX1RPS0VOX1RPR0dMRV9TSElGVCksCiAJCQlkYXRhKTsKQEAgLTg5MCw3ICs4OTAsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOwotCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihVSENJX05VTExfREFUQV9TSVpFKSB8CisJCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKDApIHwKIAkJCSh1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCiAJCQkgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgPDwgVERfVE9LRU5fVE9HR0xFX1NISUZUKSwKIAkJCWRhdGEpOwpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVwLCAmdWhjaS0+dXJiX2xpc3QsIHVyYl9saXN0KSB7CiAJCXN0cnVjdCB1cmIgKnUgPSB1cC0+dXJiOwogCi0JCS8qIGxvb2sgZm9yIHBlbmRpbmcgVVJCJ3Mgd2l0aCBpZGVudGljYWwgcGlwZSBoYW5kbGUgKi8KKwkJLyogbG9vayBmb3IgcGVuZGluZyBVUkJzIHdpdGggaWRlbnRpY2FsIHBpcGUgaGFuZGxlICovCiAJCWlmICgodXJiLT5waXBlID09IHUtPnBpcGUpICYmICh1cmItPmRldiA9PSB1LT5kZXYpICYmCiAJCSAgICAodS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgJiYgKHUgIT0gdXJiKSkgewogCQkJaWYgKCFsYXN0X3VyYikKQEAgLTEwOTIsNyArMTA5Miw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7Ci0JCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoIC0gMSksCisJCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoKSwKIAkJCXVyYi0+dHJhbnNmZXJfZG1hICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQpOwogCiAJCWlmIChpICsgMSA+PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKQpAQCAtMTM1NSw3ICsxMzU1LDcgQEAKIAogCXVoY2lfZGVsZXRlX3F1ZXVlZF91cmIodWhjaSwgdXJiKTsKIAotCS8qIFRoZSBpbnRlcnJ1cHQgbG9vcCB3aWxsIHJlY2xhaW0gdGhlIFFIJ3MgKi8KKwkvKiBUaGUgaW50ZXJydXB0IGxvb3Agd2lsbCByZWNsYWltIHRoZSBRSHMgKi8KIAl1aGNpX3JlbW92ZV9xaCh1aGNpLCB1cmJwLT5xaCk7CiAJdXJicC0+cWggPSBOVUxMOwogfQpAQCAtMTQxMyw3ICsxNDEzLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCBoZWFkLCBsaXN0KSB7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyB0aGUgbGFzdCBvbmUgKHNpbmNlIGl0J2xsIGhhdmUgdGhlCi0JCSAqIFRFUk0gYml0IHNldCkgYXMgd2VsbCBhcyB3ZSBza2lwIGV2ZXJ5IHNvIG1hbnkgVEQncyB0bworCQkgKiBURVJNIGJpdCBzZXQpIGFzIHdlbGwgYXMgd2Ugc2tpcCBldmVyeSBzbyBtYW55IFREcyB0bwogCQkgKiBtYWtlIHN1cmUgaXQgZG9lc24ndCBob2cgdGhlIGJhbmR3aWR0aAogCQkgKi8KIAkJaWYgKHRkLT5saXN0Lm5leHQgIT0gaGVhZCAmJiAoY291bnQgJSBERVBUSF9JTlRFUlZBTCkgPT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKaW5kZXggMWQ5NzNiYy4uMDQ5ODcxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTk2Miw3ICs5NjIsNiBAQAogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWRjODAwX3VzYl9kcml2ZXIgPQogewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJtZGM4MDAiLAogCS5wcm9iZSA9CW1kYzgwMF91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQltZGM4MDBfdXNiX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwppbmRleCA5NTA1NDNhLi40NThmMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKQEAgLTE2MCw3ICsxNjAsNiBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG10c191c2JfaWRzIFtdOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbXRzX3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJIm1pY3JvdGVrWDYiLAogCS5wcm9iZSA9CW10c191c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQltdHNfdXNiX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZwppbmRleCAxZTUzOTM0Li41MDlkZDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKQEAgLTI3Myw2ICsyNzMsMjAgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGF0aV9yZW1vdGUuCiAKK2NvbmZpZyBVU0JfQVRJX1JFTU9URTIKKwl0cmlzdGF0ZSAiQVRJIC8gUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGNvbnRyb2wiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBBVEkgb3IgUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGNvbnRyb2wuCisJICBUaGVzZSBhcmUgUkYgcmVtb3RlcyB3aXRoIFVTQiByZWNlaXZlcnMuCisJICBBVEkgUmVtb3RlIFdvbmRlciBJSSBjb21lcyB3aXRoIHNvbWUgQVRJJ3MgQWxsLUluLVdvbmRlciB2aWRlbyBjYXJkcworCSAgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgc2VwYXJhdGUgcHJvZHVjdC4KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIG1vdXNlIHBvaW50ZXIsIGxlZnQgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMsCisJICBhbmQgbWFwcyBhbGwgdGhlIG90aGVyIHJlbW90ZSBidXR0b25zIHRvIGtleXByZXNzIGV2ZW50cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgYXRpX3JlbW90ZTIuCisKIGNvbmZpZyBVU0JfS0VZU1BBTl9SRU1PVEUKIAl0cmlzdGF0ZSAiS2V5c3BhbiBETVIgVVNCIHJlbW90ZSBjb250cm9sIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVVNCICYmIElOUFVUICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQppbmRleCAwN2NiMTdkLi5kNTEyZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogCiBvYmotJChDT05GSUdfVVNCX0FJUFRFSykJKz0gYWlwdGVrLm8KIG9iai0kKENPTkZJR19VU0JfQVRJX1JFTU9URSkJKz0gYXRpX3JlbW90ZS5vCitvYmotJChDT05GSUdfVVNCX0FUSV9SRU1PVEUyKQkrPSBhdGlfcmVtb3RlMi5vCiBvYmotJChDT05GSUdfVVNCX0hJRCkJCSs9IHVzYmhpZC5vCiBvYmotJChDT05GSUdfVVNCX0tCRCkJCSs9IHVzYmtiZC5vCiBvYmotJChDT05GSUdfVVNCX0tCVEFCKQkJKz0ga2J0YWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvYWNlY2FkLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9hY2VjYWQuYwppbmRleCBhMzI1NThiLi5kZjI5YjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9hY2VjYWQuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9hY2VjYWQuYwpAQCAtMjYxLDcgKzI2MSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX2FjZWNhZF9pZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfYWNlY2FkX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkidXNiX2FjZWNhZCIsCiAJLnByb2JlID0JdXNiX2FjZWNhZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9hY2VjYWRfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jIGIvZHJpdmVycy91c2IvaW5wdXQvYWlwdGVrLmMKaW5kZXggMGUyNTA1Yy4uYTY2OTNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvYWlwdGVrLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYWlwdGVrLmMKQEAgLTMzOCw3ICszMzgsNyBAQAogICogdGhlIGJpdG1hcCB3aGljaCBjb21lcyBmcm9tIHRoZSB0YWJsZXQuIFRoaXMgaGlkZXMgdGhlCiAgKiBpc3N1ZSB0aGF0IHRoZSBGX2tleXMgYXJlIG5vdCBzZXF1ZW50aWFsbHkgbnVtYmVyZWQuCiAgKi8KLXN0YXRpYyBpbnQgbWFjcm9LZXlFdmVudHNbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWFjcm9LZXlFdmVudHNbXSA9IHsKIAlLRVlfRVNDLCBLRVlfRjEsIEtFWV9GMiwgS0VZX0YzLCBLRVlfRjQsIEtFWV9GNSwKIAlLRVlfRjYsIEtFWV9GNywgS0VZX0Y4LCBLRVlfRjksIEtFWV9GMTAsIEtFWV9GMTEsCiAJS0VZX0YxMiwgS0VZX0YxMywgS0VZX0YxNCwgS0VZX0YxNSwgS0VZX0YxNiwgS0VZX0YxNywKQEAgLTIwOTMsNyArMjA5Myw3IEBACiAJLyogUHJvZ3JhbW1pbmcgdGhlIHRhYmxldCBtYWNybyBrZXlzIG5lZWRzIHRvIGJlIGRvbmUgd2l0aCBhIGZvciBsb29wCiAJICogYXMgdGhlIGtleWNvZGVzIGFyZSBkaXNjb250aWd1b3VzLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobWFjcm9LZXlFdmVudHMpIC8gc2l6ZW9mKG1hY3JvS2V5RXZlbnRzWzBdKTsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1hY3JvS2V5RXZlbnRzKTsgKytpKQogCQlzZXRfYml0KG1hY3JvS2V5RXZlbnRzW2ldLCBpbnB1dGRldi0+a2V5Yml0KTsKIAogCS8qCkBAIC0yMTM1LDcgKzIxMzUsNyBAQAogCSAqIG5vdCBhbiBlcnJvciA6LSkKIAkgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3BlZWRzKSAvIHNpemVvZihzcGVlZHNbMF0pOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGVlZHMpOyArK2kpIHsKIAkJYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5ID0gc3BlZWRzW2ldOwogCQkodm9pZClhaXB0ZWtfcHJvZ3JhbV90YWJsZXQoYWlwdGVrKTsKIAkJaWYgKGFpcHRlay0+aW5wdXRkZXYtPmFic21heFtBQlNfWF0gPiAwKSB7CkBAIC0yMTkwLDcgKzIxOTAsNiBAQAogc3RhdGljIHZvaWQgYWlwdGVrX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWlwdGVrX2RyaXZlciA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJhaXB0ZWsiLAogCS5wcm9iZSA9IGFpcHRla19wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGFpcHRla19kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvYXBwbGV0b3VjaC5jIGIvZHJpdmVycy91c2IvaW5wdXQvYXBwbGV0b3VjaC5jCmluZGV4IDE1ODQwZGIuLjE5NDliNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2FwcGxldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9hcHBsZXRvdWNoLmMKQEAgLTQ1Miw3ICs0NTIsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRwX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFwcGxldG91Y2giLAogCS5wcm9iZQkJPSBhdHBfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBhdHBfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYwppbmRleCA5YTJhNDdkLi5mN2JkYzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCkBAIC05Niw2ICs5Niw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiX2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogLyoKICAqIE1vZHVsZSBhbmQgVmVyc2lvbiBJbmZvcm1hdGlvbiwgTW9kdWxlIFBhcmFtZXRlcnMKQEAgLTE0Niw3ICsxNDcsNyBAQAogc3RhdGljIGNoYXIgaW5pdDJbXSA9IHsgMHgwMSwgMHgwMCwgMHgyMCwgMHgxNCwgMHgyMCwgMHgyMCwgMHgyMCB9OwogCiAvKiBBY2NlbGVyYXRpb24gY3VydmUgZm9yIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkICovCi1zdGF0aWMgY2hhciBhY2NlbFtdID0geyAxLCAyLCA0LCA2LCA5LCAxMywgMjAgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGFjY2VsW10gPSB7IDEsIDIsIDQsIDYsIDksIDEzLCAyMCB9OwogCiAvKiBEdXBsaWNhdGUgZXZlbnQgZmlsdGVyaW5nIHRpbWUuCiAgKiBTZXF1ZW50aWFsLCBpZGVudGljYWwgS0lORF9GSUxURVJFRCBpbnB1dHMgd2l0aCBsZXNzIHRoYW4KQEAgLTE5Nyw3ICsxOTgsNyBAQAogI2RlZmluZSBLSU5EX0FDQ0VMICAgICAgNyAgIC8qIERpcmVjdGlvbmFsIGtleXBhZCAtIGxlZnQsIHJpZ2h0LCB1cCwgZG93bi4qLwogCiAvKiBUcmFuc2xhdGlvbiB0YWJsZSBmcm9tIGhhcmR3YXJlIG1lc3NhZ2VzIHRvIGlucHV0IGV2ZW50cy4gKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJc2hvcnQga2luZDsKIAl1bnNpZ25lZCBjaGFyIGRhdGExLCBkYXRhMjsKIAlpbnQgdHlwZTsKQEAgLTI5NSw3ICsyOTYsNiBAQAogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGlfcmVtb3RlX2RyaXZlciA9IHsKLQkub3duZXIgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgICAgICAgICA9ICJhdGlfcmVtb3RlIiwKIAkucHJvYmUgICAgICAgID0gYXRpX3JlbW90ZV9wcm9iZSwKIAkuZGlzY29ubmVjdCAgID0gYXRpX3JlbW90ZV9kaXNjb25uZWN0LApAQCAtNDcyLDcgKzQ3Miw3IEBACiAJCS8qIEZpbHRlciBkdXBsaWNhdGUgZXZlbnRzIHdoaWNoIGhhcHBlbiAidG9vIGNsb3NlIiB0b2dldGhlci4gKi8KIAkJaWYgKChhdGlfcmVtb3RlLT5vbGRfZGF0YVswXSA9PSBkYXRhWzFdKSAmJgogCQkJKGF0aV9yZW1vdGUtPm9sZF9kYXRhWzFdID09IGRhdGFbMl0pICYmCi0JCQkoKGF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzICsgRklMVEVSX1RJTUUpID4gamlmZmllcykpIHsKKwkJCXRpbWVfYmVmb3JlKGppZmZpZXMsIGF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzICsgRklMVEVSX1RJTUUpKSB7CiAJCQlhdGlfcmVtb3RlLT5yZXBlYXRfY291bnQrKzsKIAkJfSBlbHNlIHsKIAkJCWF0aV9yZW1vdGUtPnJlcGVhdF9jb3VudCA9IDA7CkBAIC01MDcsMTYgKzUwNywxNiBAQAogCSAqIHBhZCBkb3duLCBzbyB3ZSBpbmNyZWFzZSBhY2NlbGVyYXRpb24sIHJhbXBpbmcgdXAgb3ZlciB0d28gc2Vjb25kcyB0bwogCSAqIGEgbWF4aW11bSBzcGVlZC4gIFRoZSBhY2NlbGVyYXRpb24gY3VydmUgaXMgI2RlZmluZWQgYWJvdmUuCiAJICovCi0JaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMpID4gKEhaID4+IDIpKSB7CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMgKyAoSFogPj4gMikpKSB7CiAJCWFjYyA9IDE7CiAJCWF0aV9yZW1vdGUtPmFjY19qaWZmaWVzID0gamlmZmllczsKIAl9Ci0JZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCAoSFogPj4gMykpICBhY2MgPSBhY2NlbFswXTsKLQllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IChIWiA+PiAyKSkgIGFjYyA9IGFjY2VsWzFdOwotCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgKEhaID4+IDEpKSAgYWNjID0gYWNjZWxbMl07Ci0JZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCBIWiApICAgICAgICBhY2MgPSBhY2NlbFszXTsKLQllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IEhaKyhIWj4+MSkpIGFjYyA9IGFjY2VsWzRdOwotCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgKEhaIDw8IDEpKSAgYWNjID0gYWNjZWxbNV07CisJZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPj4gMykpKSAgYWNjID0gYWNjZWxbMF07CisJZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPj4gMikpKSAgYWNjID0gYWNjZWxbMV07CisJZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPj4gMSkpKSAgYWNjID0gYWNjZWxbMl07CisJZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyBIWikpICAgICAgICAgYWNjID0gYWNjZWxbM107CisJZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyBIWisoSFo+PjEpKSkgYWNjID0gYWNjZWxbNF07CisJZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPDwgMSkpKSAgYWNjID0gYWNjZWxbNV07CiAJZWxzZSBhY2MgPSBhY2NlbFs2XTsKIAogCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUyLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMWExYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlMi5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogYXRpX3JlbW90ZTIgLSBBVEkvUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBWaWxsZSBTeXJqYWxhIDxzeXJqYWxhQHNjaS5maT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC91c2JfaW5wdXQuaD4KKworI2RlZmluZSBEUklWRVJfREVTQyAgICAiQVRJL1BoaWxpcHMgVVNCIFJGIHJlbW90ZSBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEiCisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJWaWxsZSBTeXJqYWxhIDxzeXJqYWxhQHNjaS5maT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBtb2RlX21hc2sgPSAweDFGOworbW9kdWxlX3BhcmFtKG1vZGVfbWFzaywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGVfbWFzaywgIkJpdG1hc2sgb2YgbW9kZXMgdG8gYWNjZXB0IDw0OlBDPjwzOkFVWDQ+PDI6QVVYMz48MTpBVVgyPjwwOkFVWDE+Iik7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdGlfcmVtb3RlMl9pZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDYwMikgfSwJLyogQVRJIFJlbW90ZSBXb25kZXIgSUkgKi8KKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRpX3JlbW90ZTJfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgaHdfY29kZTsKKwlpbnQga2V5X2NvZGU7Cit9IGF0aV9yZW1vdGUyX2tleV90YWJsZVtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGMsIEtFWV9QT1dFUiB9LAorCXsgMHgwZCwgS0VZX01VVEUgfSwKKwl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgyOCwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4MjksIEtFWV9SRVdJTkQgfSwKKwl7IDB4MmMsIEtFWV9QTEFZIH0sCisJeyAweDMwLCBLRVlfUEFVU0UgfSwKKwl7IDB4MzEsIEtFWV9TVE9QIH0sCisJeyAweDM3LCBLRVlfUkVDT1JEIH0sCisJeyAweDM4LCBLRVlfRFZEIH0sCisJeyAweDM5LCBLRVlfVFYgfSwKKwl7IDB4NTQsIEtFWV9NRU5VIH0sCisJeyAweDU4LCBLRVlfVVAgfSwKKwl7IDB4NTksIEtFWV9ET1dOIH0sCisJeyAweDVhLCBLRVlfTEVGVCB9LAorCXsgMHg1YiwgS0VZX1JJR0hUIH0sCisJeyAweDVjLCBLRVlfT0sgfSwKKwl7IDB4NzgsIEtFWV9BIH0sCisJeyAweDc5LCBLRVlfQiB9LAorCXsgMHg3YSwgS0VZX0MgfSwKKwl7IDB4N2IsIEtFWV9EIH0sCisJeyAweDdjLCBLRVlfRSB9LAorCXsgMHg3ZCwgS0VZX0YgfSwKKwl7IDB4ODIsIEtFWV9FTlRFUiB9LAorCXsgMHg4ZSwgS0VZX1ZFTkRPUiB9LAorCXsgMHg5NiwgS0VZX0NPRkZFRSB9LAorCXsgMHhhOSwgQlROX0xFRlQgfSwKKwl7IDB4YWEsIEJUTl9SSUdIVCB9LAorCXsgMHhiZSwgS0VZX1FVRVNUSU9OIH0sCisJeyAweGQ1LCBLRVlfRlJPTlQgfSwKKwl7IDB4ZDAsIEtFWV9FRElUIH0sCisJeyAweGY5LCBLRVlfSU5GTyB9LAorCXsgKDB4MDAgPDwgOCkgfCAweDNmLCBLRVlfUFJPRzEgfSwKKwl7ICgweDAxIDw8IDgpIHwgMHgzZiwgS0VZX1BST0cyIH0sCisJeyAoMHgwMiA8PCA4KSB8IDB4M2YsIEtFWV9QUk9HMyB9LAorCXsgKDB4MDMgPDwgOCkgfCAweDNmLCBLRVlfUFJPRzQgfSwKKwl7ICgweDA0IDw8IDgpIHwgMHgzZiwgS0VZX1BDIH0sCisJeyAwLCBLRVlfUkVTRVJWRUQgfQorfTsKKworc3RydWN0IGF0aV9yZW1vdGUyIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGZbMl07CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcFsyXTsKKwlzdHJ1Y3QgdXJiICp1cmJbMl07CisJdm9pZCAqYnVmWzJdOworCWRtYV9hZGRyX3QgYnVmX2RtYVsyXTsKKworCXVuc2lnbmVkIGxvbmcgamlmZmllczsKKwlpbnQgbW9kZTsKKworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwaHlzWzY0XTsKK307CisKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGUyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGlfcmVtb3RlMl9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiYXRpX3JlbW90ZTIiLAorCS5wcm9iZSAgICAgID0gYXRpX3JlbW90ZTJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBhdGlfcmVtb3RlMl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSAgID0gYXRpX3JlbW90ZTJfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX29wZW4oc3RydWN0IGlucHV0X2RldiAqaWRldikKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMiA9IGlkZXYtPnByaXZhdGU7CisJaW50IHI7CisKKwlyID0gdXNiX3N1Ym1pdF91cmIoYXIyLT51cmJbMF0sIEdGUF9LRVJORUwpOworCWlmIChyKSB7CisJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcik7CisJCXJldHVybiByOworCX0KKwlyID0gdXNiX3N1Ym1pdF91cmIoYXIyLT51cmJbMV0sIEdGUF9LRVJORUwpOworCWlmIChyKSB7CisJCXVzYl9raWxsX3VyYihhcjItPnVyYlswXSk7CisJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcik7CisJCXJldHVybiByOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2KQoreworCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyID0gaWRldi0+cHJpdmF0ZTsKKworCXVzYl9raWxsX3VyYihhcjItPnVyYlswXSk7CisJdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzFdKTsKK30KKworc3RhdGljIHZvaWQgYXRpX3JlbW90ZTJfaW5wdXRfbW91c2Uoc3RydWN0IGF0aV9yZW1vdGUyICphcjIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXYgPSBhcjItPmlkZXY7CisJdTggKmRhdGEgPSBhcjItPmJ1ZlswXTsKKworCWlmIChkYXRhWzBdID4gNCkgeworCQlkZXZfZXJyKCZhcjItPmludGZbMF0tPmRldiwKKwkJCSJVbmtub3duIG1vZGUgYnl0ZSAoJTAyeCAlMDJ4ICUwMnggJTAyeClcbiIsCisJCQlkYXRhWzNdLCBkYXRhWzJdLCBkYXRhWzFdLCBkYXRhWzBdKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKCgxIDw8IGRhdGFbMF0pICYgbW9kZV9tYXNrKSkKKwkJcmV0dXJuOworCisJaW5wdXRfcmVncyhpZGV2LCByZWdzKTsKKwlpbnB1dF9ldmVudChpZGV2LCBFVl9SRUwsIFJFTF9YLCAoczgpIGRhdGFbMV0pOworCWlucHV0X2V2ZW50KGlkZXYsIEVWX1JFTCwgUkVMX1ksIChzOCkgZGF0YVsyXSk7CisJaW5wdXRfc3luYyhpZGV2KTsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlMl9sb29rdXAodW5zaWduZWQgaW50IGh3X2NvZGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhdGlfcmVtb3RlMl9rZXlfdGFibGVbaV0ua2V5X2NvZGUgIT0gS0VZX1JFU0VSVkVEOyBpKyspCisJCWlmIChhdGlfcmVtb3RlMl9rZXlfdGFibGVbaV0uaHdfY29kZSA9PSBod19jb2RlKQorCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGUyX2lucHV0X2tleShzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGFyMi0+aWRldjsKKwl1OCAqZGF0YSA9IGFyMi0+YnVmWzFdOworCWludCBod19jb2RlLCBpbmRleDsKKworCWlmIChkYXRhWzBdID4gNCkgeworCQlkZXZfZXJyKCZhcjItPmludGZbMV0tPmRldiwKKwkJCSJVbmtub3duIG1vZGUgYnl0ZSAoJTAyeCAlMDJ4ICUwMnggJTAyeClcbiIsCisJCQlkYXRhWzNdLCBkYXRhWzJdLCBkYXRhWzFdLCBkYXRhWzBdKTsKKwkJcmV0dXJuOworCX0KKworCWh3X2NvZGUgPSBkYXRhWzJdOworCS8qCisJICogTW9kZSBrZXlzIChBVVgxLUFVWDQsIFBDKSBhbGwgZ2VuZXJhdGUgdGhlIHNhbWUgY29kZSBieXRlLgorCSAqIFVzZSB0aGUgbW9kZSBieXRlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIHdhcyBwcmVzc2VkLgorCSAqLworCWlmIChod19jb2RlID09IDB4M2YpIHsKKwkJLyoKKwkJICogRm9yIHNvbWUgaW5jb21wcmVoZW5zaWJsZSByZWFzb24gdGhlIG1vdXNlIHBhZCBnZW5lcmF0ZXMKKwkJICogZXZlbnRzIHdoaWNoIGxvb2sgaWRlbnRpY2FsIHRvIHRoZSBldmVudHMgZnJvbSB0aGUgbGFzdAorCQkgKiBwcmVzc2VkIG1vZGUga2V5LiBOYXR1cmFsbHkgd2UgZG9uJ3Qgd2FudCB0byBnZW5lcmF0ZSBrZXkKKwkJICogZXZlbnRzIGZvciB0aGUgbW91c2UgcGFkIHNvIHdlIGZpbHRlciBvdXQgYW55IHN1YnNlcXVlbnQKKwkJICogZXZlbnRzIGZyb20gdGhlIHNhbWUgbW9kZSBrZXkuCisJCSAqLworCQlpZiAoYXIyLT5tb2RlID09IGRhdGFbMF0pCisJCQlyZXR1cm47CisKKwkJaWYgKGRhdGFbMV0gPT0gMCkKKwkJCWFyMi0+bW9kZSA9IGRhdGFbMF07CisKKwkJaHdfY29kZSB8PSBkYXRhWzBdIDw8IDg7CisJfQorCisJaWYgKCEoKDEgPDwgZGF0YVswXSkgJiBtb2RlX21hc2spKQorCQlyZXR1cm47CisKKwlpbmRleCA9IGF0aV9yZW1vdGUyX2xvb2t1cChod19jb2RlKTsKKwlpZiAoaW5kZXggPCAwKSB7CisJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAorCQkJIlVua25vd24gY29kZSBieXRlICglMDJ4ICUwMnggJTAyeCAlMDJ4KVxuIiwKKwkJCWRhdGFbM10sIGRhdGFbMl0sIGRhdGFbMV0sIGRhdGFbMF0pOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkYXRhWzFdKSB7CisJY2FzZSAwOgkvKiByZWxlYXNlICovCisJCWJyZWFrOworCWNhc2UgMToJLyogcHJlc3MgKi8KKwkJYXIyLT5qaWZmaWVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaWRldi0+cmVwW1JFUF9ERUxBWV0pOworCQlicmVhazsKKwljYXNlIDI6CS8qIHJlcGVhdCAqLworCisJCS8qIE5vIHJlcGVhdCBmb3IgbW91c2UgYnV0dG9ucy4gKi8KKwkJaWYgKGF0aV9yZW1vdGUyX2tleV90YWJsZVtpbmRleF0ua2V5X2NvZGUgPT0gQlROX0xFRlQgfHwKKwkJICAgIGF0aV9yZW1vdGUyX2tleV90YWJsZVtpbmRleF0ua2V5X2NvZGUgPT0gQlROX1JJR0hUKQorCQkJcmV0dXJuOworCisJCWlmICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCBhcjItPmppZmZpZXMpKQorCQkJcmV0dXJuOworCisJCWFyMi0+amlmZmllcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlkZXYtPnJlcFtSRVBfUEVSSU9EXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAorCQkJIlVua25vd24gc3RhdGUgYnl0ZSAoJTAyeCAlMDJ4ICUwMnggJTAyeClcbiIsCisJCQlkYXRhWzNdLCBkYXRhWzJdLCBkYXRhWzFdLCBkYXRhWzBdKTsKKwkJcmV0dXJuOworCX0KKworCWlucHV0X3JlZ3MoaWRldiwgcmVncyk7CisJaW5wdXRfZXZlbnQoaWRldiwgRVZfS0VZLCBhdGlfcmVtb3RlMl9rZXlfdGFibGVbaW5kZXhdLmtleV9jb2RlLCBkYXRhWzFdKTsKKwlpbnB1dF9zeW5jKGlkZXYpOworfQorCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9jb21wbGV0ZV9tb3VzZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyID0gdXJiLT5jb250ZXh0OworCWludCByOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYXRpX3JlbW90ZTJfaW5wdXRfbW91c2UoYXIyLCByZWdzKTsKKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVJTFNFUToKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJZGV2X2RiZygmYXIyLT5pbnRmWzBdLT5kZXYsCisJCQkiJXMoKTogdXJiIHN0YXR1cyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAorCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHIpCisJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAorCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19GVU5DVElPTl9fLCByKTsKK30KKworc3RhdGljIHZvaWQgYXRpX3JlbW90ZTJfY29tcGxldGVfa2V5KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSB1cmItPmNvbnRleHQ7CisJaW50IHI7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlhdGlfcmVtb3RlMl9pbnB1dF9rZXkoYXIyLCByZWdzKTsKKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVJTFNFUToKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJZGV2X2RiZygmYXIyLT5pbnRmWzFdLT5kZXYsCisJCQkiJXMoKTogdXJiIHN0YXR1cyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAorCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHIpCisJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAorCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19GVU5DVElPTl9fLCByKTsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlMl9pbnB1dF9pbml0KHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisJaW50IGk7CisKKwlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFyMi0+aWRldiA9IGlkZXY7CisJaWRldi0+cHJpdmF0ZSA9IGFyMjsKKworCWlkZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKSB8IEJJVChFVl9SRUwpOworCWlkZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpOworCWlkZXYtPnJlbGJpdFswXSA9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCWZvciAoaSA9IDA7IGF0aV9yZW1vdGUyX2tleV90YWJsZVtpXS5rZXlfY29kZSAhPSBLRVlfUkVTRVJWRUQ7IGkrKykKKwkJc2V0X2JpdChhdGlfcmVtb3RlMl9rZXlfdGFibGVbaV0ua2V5X2NvZGUsIGlkZXYtPmtleWJpdCk7CisKKwlpZGV2LT5yZXBbUkVQX0RFTEFZXSAgPSAyNTA7CisJaWRldi0+cmVwW1JFUF9QRVJJT0RdID0gMzM7CisKKwlpZGV2LT5vcGVuID0gYXRpX3JlbW90ZTJfb3BlbjsKKwlpZGV2LT5jbG9zZSA9IGF0aV9yZW1vdGUyX2Nsb3NlOworCisJaWRldi0+bmFtZSA9IGFyMi0+bmFtZTsKKwlpZGV2LT5waHlzID0gYXIyLT5waHlzOworCisJdXNiX3RvX2lucHV0X2lkKGFyMi0+dWRldiwgJmlkZXYtPmlkKTsKKwlpZGV2LT5jZGV2LmRldiA9ICZhcjItPnVkZXYtPmRldjsKKworCWkgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaWRldik7CisJaWYgKGkpCisJCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfdXJiX2luaXQoc3RydWN0IGF0aV9yZW1vdGUyICphcjIpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBhcjItPnVkZXY7CisJaW50IGksIHBpcGUsIG1heHA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWFyMi0+YnVmW2ldID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCA0LCBHRlBfS0VSTkVMLCAmYXIyLT5idWZfZG1hW2ldKTsKKwkJaWYgKCFhcjItPmJ1ZltpXSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWFyMi0+dXJiW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFhcjItPnVyYltpXSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBhcjItPmVwW2ldLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJbWF4cCA9IHVzYl9tYXhwYWNrZXQodWRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCQltYXhwID0gbWF4cCA+IDQgPyA0IDogbWF4cDsKKworCQl1c2JfZmlsbF9pbnRfdXJiKGFyMi0+dXJiW2ldLCB1ZGV2LCBwaXBlLCBhcjItPmJ1ZltpXSwgbWF4cCwKKwkJCQkgaSA/IGF0aV9yZW1vdGUyX2NvbXBsZXRlX2tleSA6IGF0aV9yZW1vdGUyX2NvbXBsZXRlX21vdXNlLAorCQkJCSBhcjIsIGFyMi0+ZXBbaV0tPmJJbnRlcnZhbCk7CisJCWFyMi0+dXJiW2ldLT50cmFuc2Zlcl9kbWEgPSBhcjItPmJ1Zl9kbWFbaV07CisJCWFyMi0+dXJiW2ldLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRpX3JlbW90ZTJfdXJiX2NsZWFudXAoc3RydWN0IGF0aV9yZW1vdGUyICphcjIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChhcjItPnVyYltpXSkKKwkJCXVzYl9mcmVlX3VyYihhcjItPnVyYltpXSk7CisKKwkJaWYgKGFyMi0+YnVmW2ldKQorCQkJdXNiX2J1ZmZlcl9mcmVlKGFyMi0+dWRldiwgNCwgYXIyLT5idWZbaV0sIGFyMi0+YnVmX2RtYVtpXSk7CisJfQorfQorCitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyOworCWludCByOworCisJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWFyMiA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgYXRpX3JlbW90ZTIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFyMikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhcjItPnVkZXYgPSB1ZGV2OworCisJYXIyLT5pbnRmWzBdID0gaW50ZXJmYWNlOworCWFyMi0+ZXBbMF0gPSAmYWx0LT5lbmRwb2ludFswXS5kZXNjOworCisJYXIyLT5pbnRmWzFdID0gdXNiX2lmbnVtX3RvX2lmKHVkZXYsIDEpOworCXIgPSB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmYXRpX3JlbW90ZTJfZHJpdmVyLCBhcjItPmludGZbMV0sIGFyMik7CisJaWYgKHIpCisJCWdvdG8gZmFpbDE7CisJYWx0ID0gYXIyLT5pbnRmWzFdLT5jdXJfYWx0c2V0dGluZzsKKwlhcjItPmVwWzFdID0gJmFsdC0+ZW5kcG9pbnRbMF0uZGVzYzsKKworCXIgPSBhdGlfcmVtb3RlMl91cmJfaW5pdChhcjIpOworCWlmIChyKQorCQlnb3RvIGZhaWwyOworCisJdXNiX21ha2VfcGF0aCh1ZGV2LCBhcjItPnBoeXMsIHNpemVvZihhcjItPnBoeXMpKTsKKwlzdHJsY2F0KGFyMi0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoYXIyLT5waHlzKSk7CisKKwlzdHJsY2F0KGFyMi0+bmFtZSwgIkFUSSBSZW1vdGUgV29uZGVyIElJIiwgc2l6ZW9mKGFyMi0+bmFtZSkpOworCisJciA9IGF0aV9yZW1vdGUyX2lucHV0X2luaXQoYXIyKTsKKwlpZiAocikKKwkJZ290byBmYWlsMjsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBhcjIpOworCisJcmV0dXJuIDA7CisKKyBmYWlsMjoKKwlhdGlfcmVtb3RlMl91cmJfY2xlYW51cChhcjIpOworCisJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSgmYXRpX3JlbW90ZTJfZHJpdmVyLCBhcjItPmludGZbMV0pOworIGZhaWwxOgorCWtmcmVlKGFyMik7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgYXRpX3JlbW90ZTJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpCisJCXJldHVybjsKKworCWFyMiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShhcjItPmlkZXYpOworCisJYXRpX3JlbW90ZTJfdXJiX2NsZWFudXAoYXIyKTsKKworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmF0aV9yZW1vdGUyX2RyaXZlciwgYXIyLT5pbnRmWzFdKTsKKworCWtmcmVlKGFyMik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGF0aV9yZW1vdGUyX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSB1c2JfcmVnaXN0ZXIoJmF0aV9yZW1vdGUyX2RyaXZlcik7CisJaWYgKHIpCisJCXByaW50ayhLRVJOX0VSUiAiYXRpX3JlbW90ZTI6IHVzYl9yZWdpc3RlcigpID0gJWRcbiIsIHIpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXRpX3JlbW90ZTI6ICIgRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdGlfcmVtb3RlMl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmF0aV9yZW1vdGUyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF0aV9yZW1vdGUyX2luaXQpOworbW9kdWxlX2V4aXQoYXRpX3JlbW90ZTJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9maXhwLWFyaXRoLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9maXhwLWFyaXRoLmgKaW5kZXggMjZjYTViOC4uYjQ0ZDM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvZml4cC1hcml0aC5oCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2ZpeHAtYXJpdGguaApAQCAtMzgsNyArMzgsNyBAQAogI2RlZmluZSBGUkFDX01BU0sgKCgxPDxGUkFDX04pLTEpCiAKIC8vIE5vdCB0byBiZSB1c2VkIGRpcmVjdGx5LiBVc2UgZml4cF97Y29zLHNpbn0KLXN0YXRpYyBmaXhwX3QgY29zX3RhYmxlWzQ1XSA9IHsKK3N0YXRpYyBjb25zdCBmaXhwX3QgY29zX3RhYmxlWzQ1XSA9IHsKIAkweDAxMDAsCTB4MDBGRiwJMHgwMEZGLAkweDAwRkUsCTB4MDBGRCwJMHgwMEZDLAkweDAwRkEsCTB4MDBGOCwKIAkweDAwRjYsCTB4MDBGMywJMHgwMEYwLAkweDAwRUQsCTB4MDBFOSwJMHgwMEU2LAkweDAwRTIsCTB4MDBERCwKIAkweDAwRDksCTB4MDBENCwJMHgwMENGLAkweDAwQzksCTB4MDBDNCwJMHgwMEJFLAkweDAwQjgsCTB4MDBCMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCmluZGV4IGEzZTQ0ZWYuLjVmNTI5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwpAQCAtMTQ1NCw3ICsxNDU0LDcgQEAKICAqIEFscGhhYmV0aWNhbGx5IHNvcnRlZCBibGFja2xpc3QgYnkgcXVpcmsgdHlwZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IGhpZF9ibGFja2xpc3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfYmxhY2tsaXN0IHsKIAlfX3UxNiBpZFZlbmRvcjsKIAlfX3UxNiBpZFByb2R1Y3Q7CiAJdW5zaWduZWQgcXVpcmtzOwpAQCAtMTkzMCw3ICsxOTMwLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaGlkX3VzYl9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGlkX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkidXNiaGlkIiwKIAkucHJvYmUgPQloaWRfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQloaWRfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKaW5kZXggMTIyMGE1MC4uMTkyYTAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKQEAgLTM5LDcgKzM5LDcgQEAKIAogI2RlZmluZSB1bmsJS0VZX1VOS05PV04KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgaGlkX2tleWJvYXJkWzI1Nl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoaWRfa2V5Ym9hcmRbMjU2XSA9IHsKIAkgIDAsICAwLCAgMCwgIDAsIDMwLCA0OCwgNDYsIDMyLCAxOCwgMzMsIDM0LCAzNSwgMjMsIDM2LCAzNywgMzgsCiAJIDUwLCA0OSwgMjQsIDI1LCAxNiwgMTksIDMxLCAyMCwgMjIsIDQ3LCAxNywgNDUsIDIxLCA0NCwgIDIsICAzLAogCSAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDI4LCAgMSwgMTQsIDE1LCA1NywgMTIsIDEzLCAyNiwKQEAgLTU4LDcgKzU4LDcgQEAKIAkxNTAsMTU4LDE1OSwxMjgsMTM2LDE3NywxNzgsMTc2LDE0MiwxNTIsMTczLDE0MCx1bmssdW5rLHVuayx1bmsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJX19zMzIgeDsKIAlfX3MzMiB5OwogfSAgaGlkX2hhdF90b19heGlzW10gPSB7eyAwLCAwfSwgeyAwLC0xfSwgeyAxLC0xfSwgeyAxLCAwfSwgeyAxLCAxfSwgeyAwLCAxfSwgey0xLCAxfSwgey0xLCAwfSwgey0xLC0xfX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWRkZXYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCmluZGV4IDQ0MDM3N2MuLjRkZmY4NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCkBAIC04MjYsNyArODI2LDYgQEAKIAogCiBzdGF0aWMgLyogY29uc3QgKi8gc3RydWN0IHVzYl9kcml2ZXIgaGlkZGV2X2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiaGlkZGV2IiwKIAkucHJvYmUgPQloaWRkZXZfdXNiZF9wcm9iZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9pdG10b3VjaC5jIGIvZHJpdmVycy91c2IvaW5wdXQvaXRtdG91Y2guYwppbmRleCA0YTUwYWNiLi43NjE4YWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9pdG10b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2l0bXRvdWNoLmMKQEAgLTI1MCw3ICsyNTAsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGl0bXRvdWNoX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpdG10b3VjaF9kcml2ZXIgPSB7Ci0JLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5uYW1lID0gICAgICAgICAiaXRtdG91Y2giLAogCS5wcm9iZSA9ICAgICAgICBpdG10b3VjaF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9ICAgaXRtdG91Y2hfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2tidGFiLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9rYnRhYi5jCmluZGV4IGZkNDhlNzRlLi5mNmQ1Y2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9rYnRhYi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2tidGFiLmMKQEAgLTE5Nyw3ICsxOTcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2J0YWJfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJrYnRhYiIsCiAJLnByb2JlID0Ja2J0YWJfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlrYnRhYl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2tleXNwYW5fcmVtb3RlLmMKaW5kZXggYTMyY2ZlNS4uYjRhMDUxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jCkBAIC05NSw3ICs5NSw3IEBACiAgKiBDdXJyZW50bHkgdGhlcmUgYXJlIDE1IGFuZCAxNyBidXR0b24gbW9kZWxzIHNvIFJFU0VSVkVEIGNvZGVzCiAgKiBhcmUgYmxhbmsgYXJlYXMgaW4gdGhlIG1hcHBpbmcuCiAgKi8KLXN0YXRpYyBpbnQga2V5c3Bhbl9rZXlfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQga2V5c3Bhbl9rZXlfdGFibGVbXSA9IHsKIAlLRVlfUkVTRVJWRUQsCQkvKiAwIGlzIGp1c3QgYSBwbGFjZSBob2xkZXIuICovCiAJS0VZX1JFU0VSVkVELAogCUtFWV9TVE9QLApAQCAtNTU5LDcgKzU1OSw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrZXlzcGFuX2RyaXZlciA9CiB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImtleXNwYW5fcmVtb3RlIiwKIAkucHJvYmUgPQlrZXlzcGFuX3Byb2JlLAogCS5kaXNjb25uZWN0ID0Ja2V5c3Bhbl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9tdG91Y2h1c2IuYwppbmRleCA1MmNjMThjLi5mMDE4OTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9tdG91Y2h1c2IuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9tdG91Y2h1c2IuYwpAQCAtMzEwLDcgKzMxMCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbXRvdWNodXNiX2RldmljZXMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbXRvdWNodXNiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIm10b3VjaHVzYiIsCiAJLnByb2JlCQk9IG10b3VjaHVzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IG10b3VjaHVzYl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvcG93ZXJtYXRlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYwppbmRleCBiNzQ3NjIzLi5mZGYwZjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYwpAQCAtNDQxLDcgKzQ0MSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHBvd2VybWF0ZV9kZXZpY2VzKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBvd2VybWF0ZV9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAgICAgICAgIC5uYW1lID0gICAgICAgICAicG93ZXJtYXRlIiwKICAgICAgICAgLnByb2JlID0gICAgICAgIHBvd2VybWF0ZV9wcm9iZSwKICAgICAgICAgLmRpc2Nvbm5lY3QgPSAgIHBvd2VybWF0ZV9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3RvdWNoa2l0dXNiLmMKaW5kZXggNzQyMGM2Yi4uM2IzYzdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogdG91Y2hraXR1c2IuYyAgLS0gIERyaXZlciBmb3IgZUdhbGF4IFRvdWNoS2l0IFVTQiBUb3VjaHNjcmVlbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRGFuaWVsIFJpdHoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IERhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+CiAgKiBDb3B5cmlnaHQgKEMpIGJ5IFRvZGQgRS4gSm9obnNvbiAobXRvdWNodXNiLmMpCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDEsMTUgKzQxLDEzIEBACiAjZGVmaW5lIFRPVUNIS0lUX01BWF9ZQwkJCTB4MDdmZgogI2RlZmluZSBUT1VDSEtJVF9ZQ19GVVpaCQkweDAKICNkZWZpbmUgVE9VQ0hLSVRfWUNfRkxBVAkJMHgwCi0jZGVmaW5lIFRPVUNIS0lUX1JFUE9SVF9EQVRBX1NJWkUJOAorI2RlZmluZSBUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFCTE2CiAKICNkZWZpbmUgVE9VQ0hLSVRfRE9XTgkJCTB4MDEKLSNkZWZpbmUgVE9VQ0hLSVRfUE9JTlRfVE9VQ0gJCTB4ODEKLSNkZWZpbmUgVE9VQ0hLSVRfUE9JTlRfTk9UT1VDSAkJMHg4MAogCi0jZGVmaW5lIFRPVUNIS0lUX0dFVF9UT1VDSEVEKGRhdCkJKCgoKGRhdClbMF0pICYgVE9VQ0hLSVRfRE9XTikgPyAxIDogMCkKLSNkZWZpbmUgVE9VQ0hLSVRfR0VUX1goZGF0KQkJKCgoZGF0KVszXSA8PCA3KSB8IChkYXQpWzRdKQotI2RlZmluZSBUT1VDSEtJVF9HRVRfWShkYXQpCQkoKChkYXQpWzFdIDw8IDcpIHwgKGRhdClbMl0pCisjZGVmaW5lIFRPVUNIS0lUX1BLVF9UWVBFX01BU0sJCTB4RkUKKyNkZWZpbmUgVE9VQ0hLSVRfUEtUX1RZUEVfUkVQVAkJMHg4MAorI2RlZmluZSBUT1VDSEtJVF9QS1RfVFlQRV9ESUFHCQkweDBBCiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCQkidjAuMSIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJCSJEYW5pZWwgUml0eiA8ZGFuaWVsLnJpdHpAZ214LmNoPiIKQEAgLTYyLDYgKzYwLDggQEAKIHN0cnVjdCB0b3VjaGtpdF91c2IgewogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwljaGFyIGJ1ZmZlcltUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFXTsKKwlpbnQgYnVmX2xlbjsKIAlzdHJ1Y3QgdXJiICppcnE7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CkBAIC03NywxMSArNzcsMTI4IEBACiAJe30KIH07CiAKKy8qIGhlbHBlcnMgdG8gcmVhZCB0aGUgZGF0YSAqLworc3RhdGljIGlubGluZSBpbnQgdG91Y2hraXRfZ2V0X3RvdWNoZWQoY2hhciAqZGF0YSkKK3sKKwlyZXR1cm4gKGRhdGFbMF0gJiBUT1VDSEtJVF9ET1dOKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0b3VjaGtpdF9nZXRfeChjaGFyICpkYXRhKQoreworCXJldHVybiAoKGRhdGFbM10gJiAweDBGKSA8PCA3KSB8IChkYXRhWzRdICYgMHg3Rik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRvdWNoa2l0X2dldF95KGNoYXIgKmRhdGEpCit7CisJcmV0dXJuICgoZGF0YVsxXSAmIDB4MEYpIDw8IDcpIHwgKGRhdGFbMl0gJiAweDdGKTsKK30KKworCisvKiBwcm9jZXNzZXMgb25lIGlucHV0IHBhY2tldC4gKi8KK3N0YXRpYyB2b2lkIHRvdWNoa2l0X3Byb2Nlc3NfcGt0KHN0cnVjdCB0b3VjaGtpdF91c2IgKnRvdWNoa2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNoYXIgKnBrdCkKK3sKKwlpbnQgeCwgeTsKKworCS8qIG9ubHkgcHJvY2VzcyByZXBvcnQgcGFja2V0cyAqLworCWlmICgocGt0WzBdICYgVE9VQ0hLSVRfUEtUX1RZUEVfTUFTSykgIT0gVE9VQ0hLSVRfUEtUX1RZUEVfUkVQVCkKKwkJcmV0dXJuOworCisJaWYgKHN3YXBfeHkpIHsKKwkJeSA9IHRvdWNoa2l0X2dldF94KHBrdCk7CisJCXggPSB0b3VjaGtpdF9nZXRfeShwa3QpOworCX0gZWxzZSB7CisJCXggPSB0b3VjaGtpdF9nZXRfeChwa3QpOworCQl5ID0gdG91Y2hraXRfZ2V0X3kocGt0KTsKKwl9CisKKwlpbnB1dF9yZWdzKHRvdWNoa2l0LT5pbnB1dCwgcmVncyk7CisJaW5wdXRfcmVwb3J0X2tleSh0b3VjaGtpdC0+aW5wdXQsIEJUTl9UT1VDSCwgdG91Y2hraXRfZ2V0X3RvdWNoZWQocGt0KSk7CisJaW5wdXRfcmVwb3J0X2Ficyh0b3VjaGtpdC0+aW5wdXQsIEFCU19YLCB4KTsKKwlpbnB1dF9yZXBvcnRfYWJzKHRvdWNoa2l0LT5pbnB1dCwgQUJTX1ksIHkpOworCWlucHV0X3N5bmModG91Y2hraXQtPmlucHV0KTsKK30KKworCitzdGF0aWMgaW50IHRvdWNoa2l0X2dldF9wa3RfbGVuKGNoYXIgKmJ1ZikKK3sKKwlzd2l0Y2ggKGJ1ZlswXSAmIFRPVUNIS0lUX1BLVF9UWVBFX01BU0spIHsKKwljYXNlIFRPVUNIS0lUX1BLVF9UWVBFX1JFUFQ6CisJCXJldHVybiA1OworCisJY2FzZSBUT1VDSEtJVF9QS1RfVFlQRV9ESUFHOgorCQlyZXR1cm4gYnVmWzFdICsgMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG91Y2hraXRfcHJvY2VzcyhzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY2hhciAqYnVmZmVyOworCWludCBwa3RfbGVuLCBidWZfbGVuLCBwb3M7CisKKwkvKiBpZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGRhdGEsIGFwcGVuZCAqLworCWlmICh1bmxpa2VseSh0b3VjaGtpdC0+YnVmX2xlbikpIHsKKwkJaW50IHRtcDsKKworCQkvKiBpZiBvbmx5IDEgYnl0ZSBpbiBidWZmZXIsIGFkZCBhbm90aGVyIG9uZSB0byBnZXQgbGVuZ3RoICovCisJCWlmICh0b3VjaGtpdC0+YnVmX2xlbiA9PSAxKQorCQkJdG91Y2hraXQtPmJ1ZmZlclsxXSA9IHRvdWNoa2l0LT5kYXRhWzBdOworCisJCXBrdF9sZW4gPSB0b3VjaGtpdF9nZXRfcGt0X2xlbih0b3VjaGtpdC0+YnVmZmVyKTsKKworCQkvKiB1bmtub3duIHBhY2tldDogZHJvcCBldmVyeXRoaW5nICovCisJCWlmICghcGt0X2xlbikKKwkJCXJldHVybjsKKworCQkvKiBhcHBlbmQsIHByb2Nlc3MgKi8KKwkJdG1wID0gcGt0X2xlbiAtIHRvdWNoa2l0LT5idWZfbGVuOworCQltZW1jcHkodG91Y2hraXQtPmJ1ZmZlciArIHRvdWNoa2l0LT5idWZfbGVuLCB0b3VjaGtpdC0+ZGF0YSwgdG1wKTsKKwkJdG91Y2hraXRfcHJvY2Vzc19wa3QodG91Y2hraXQsIHJlZ3MsIHRvdWNoa2l0LT5idWZmZXIpOworCisJCWJ1ZmZlciA9IHRvdWNoa2l0LT5kYXRhICsgdG1wOworCQlidWZfbGVuID0gbGVuIC0gdG1wOworCX0gZWxzZSB7CisJCWJ1ZmZlciA9IHRvdWNoa2l0LT5kYXRhOworCQlidWZfbGVuID0gbGVuOworCX0KKworCS8qIG9ubHkgb25lIGJ5dGUgbGVmdCBpbiBidWZmZXIgKi8KKwlpZiAodW5saWtlbHkoYnVmX2xlbiA9PSAxKSkgeworCQl0b3VjaGtpdC0+YnVmZmVyWzBdID0gYnVmZmVyWzBdOworCQl0b3VjaGtpdC0+YnVmX2xlbiA9IDE7CisJCXJldHVybjsKKwl9CisKKwkvKiBsb29wIG92ZXIgdGhlIGJ1ZmZlciAqLworCXBvcyA9IDA7CisJd2hpbGUgKHBvcyA8IGJ1Zl9sZW4pIHsKKwkJLyogZ2V0IHBhY2tldCBsZW4gKi8KKwkJcGt0X2xlbiA9IHRvdWNoa2l0X2dldF9wa3RfbGVuKGJ1ZmZlciArIHBvcyk7CisKKwkJLyogdW5rbm93biBwYWNrZXQ6IGRyb3AgZXZlcnl0aGluZyAqLworCQlpZiAodW5saWtlbHkoIXBrdF9sZW4pKQorCQkJcmV0dXJuOworCisJCS8qIGZ1bGwgcGFja2V0OiBwcm9jZXNzICovCisJCWlmIChsaWtlbHkocGt0X2xlbiA8PSBidWZfbGVuKSkgeworCQkJdG91Y2hraXRfcHJvY2Vzc19wa3QodG91Y2hraXQsIHJlZ3MsIGJ1ZmZlciArIHBvcyk7CisJCX0gZWxzZSB7CisJCQkvKiBpbmNvbXBsZXRlIHBhY2tldDogc2F2ZSBpbiBidWZmZXIgKi8KKwkJCW1lbWNweSh0b3VjaGtpdC0+YnVmZmVyLCBidWZmZXIgKyBwb3MsIGJ1Zl9sZW4gLSBwb3MpOworCQkJdG91Y2hraXQtPmJ1Zl9sZW4gPSBidWZfbGVuIC0gcG9zOworCQl9CisJCXBvcyArPSBwa3RfbGVuOworCX0KK30KKworCiBzdGF0aWMgdm9pZCB0b3VjaGtpdF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IHVyYi0+Y29udGV4dDsKIAlpbnQgcmV0dmFsOwotCWludCB4LCB5OwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDoKQEAgLTEwNSwyMCArMjIyLDcgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWlmIChzd2FwX3h5KSB7Ci0JCXkgPSBUT1VDSEtJVF9HRVRfWCh0b3VjaGtpdC0+ZGF0YSk7Ci0JCXggPSBUT1VDSEtJVF9HRVRfWSh0b3VjaGtpdC0+ZGF0YSk7Ci0JfSBlbHNlIHsKLQkJeCA9IFRPVUNIS0lUX0dFVF9YKHRvdWNoa2l0LT5kYXRhKTsKLQkJeSA9IFRPVUNIS0lUX0dFVF9ZKHRvdWNoa2l0LT5kYXRhKTsKLQl9Ci0KLQlpbnB1dF9yZWdzKHRvdWNoa2l0LT5pbnB1dCwgcmVncyk7Ci0JaW5wdXRfcmVwb3J0X2tleSh0b3VjaGtpdC0+aW5wdXQsIEJUTl9UT1VDSCwKLQkgICAgICAgICAgICAgICAgIFRPVUNIS0lUX0dFVF9UT1VDSEVEKHRvdWNoa2l0LT5kYXRhKSk7Ci0JaW5wdXRfcmVwb3J0X2Ficyh0b3VjaGtpdC0+aW5wdXQsIEFCU19YLCB4KTsKLQlpbnB1dF9yZXBvcnRfYWJzKHRvdWNoa2l0LT5pbnB1dCwgQUJTX1ksIHkpOwotCWlucHV0X3N5bmModG91Y2hraXQtPmlucHV0KTsKKwl0b3VjaGtpdF9wcm9jZXNzKHRvdWNoa2l0LCB1cmItPmFjdHVhbF9sZW5ndGgsIHJlZ3MpOwogCiBleGl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CkBAIC0yNjcsNyArMzcxLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB0b3VjaGtpdF9kZXZpY2VzKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHRvdWNoa2l0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInRvdWNoa2l0dXNiIiwKIAkucHJvYmUJCT0gdG91Y2hraXRfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB0b3VjaGtpdF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNia2JkLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2JrYmQuYwppbmRleCAyMjZiNmY5Li4yZjNlZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC91c2JrYmQuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2JrYmQuYwpAQCAtMzQ1LDcgKzM0NSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9rYmRfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2tiZF9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInVzYmtiZCIsCiAJLnByb2JlID0JdXNiX2tiZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9rYmRfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2Jtb3VzZS5jCmluZGV4IDIzMGY2YjEuLmFmNTI2MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdXNibW91c2UuYwpAQCAtMjI2LDcgKzIyNiw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9tb3VzZV9pZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfbW91c2VfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidXNibW91c2UiLAogCS5wcm9iZQkJPSB1c2JfbW91c2VfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2JfbW91c2VfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5jCmluZGV4IGRjMDk5YmIuLjQ4ZGY0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYwpAQCAtOTQ1LDcgKzk0NSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3YWNvbV9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJIndhY29tIiwKIAkucHJvYmUgPQl3YWNvbV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXdhY29tX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC94cGFkLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC94cGFkLmMKaW5kZXggNDMxMTJmMC4uZTI3ODQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQveHBhZC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3hwYWQuYwpAQCAtNzAsNyArNzAsNyBAQAogCiAjZGVmaW5lIFhQQURfUEtUX0xFTiAzMgogCi1zdGF0aWMgc3RydWN0IHhwYWRfZGV2aWNlIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHBhZF9kZXZpY2UgewogCXUxNiBpZFZlbmRvcjsKIAl1MTYgaWRQcm9kdWN0OwogCWNoYXIgKm5hbWU7CkBAIC04MSwxMyArODEsMTMgQEAKIAl7IDB4MDAwMCwgMHgwMDAwLCAiWC1Cb3ggcGFkIiB9CiB9OwogCi1zdGF0aWMgc2lnbmVkIHNob3J0IHhwYWRfYnRuW10gPSB7CitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfYnRuW10gPSB7CiAJQlROX0EsIEJUTl9CLCBCVE5fQywgQlROX1gsIEJUTl9ZLCBCVE5fWiwJLyogImFuYWxvZyIgYnV0dG9ucyAqLwogCUJUTl9TVEFSVCwgQlROX0JBQ0ssIEJUTl9USFVNQkwsIEJUTl9USFVNQlIsCS8qIHN0YXJ0L2JhY2svc3RpY2tzICovCiAJLTEJCQkJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHNpZ25lZCBzaG9ydCB4cGFkX2Fic1tdID0geworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2Fic1tdID0gewogCUFCU19YLCBBQlNfWSwJCS8qIGxlZnQgc3RpY2sgKi8KIAlBQlNfUlgsIEFCU19SWSwJCS8qIHJpZ2h0IHN0aWNrICovCiAJQUJTX1osIEFCU19SWiwJCS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KQEAgLTMxNiw3ICszMTYsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgeHBhZF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJ4cGFkIiwKIAkucHJvYmUJCT0geHBhZF9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHhwYWRfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3llYWxpbmsuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3llYWxpbmsuYwppbmRleCBmNTI2YWViLi4xYmZjMTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC95ZWFsaW5rLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jCkBAIC05ODcsNyArOTg3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHllYWxpbmtfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAieWVhbGluayIsCiAJLnByb2JlCQk9IHVzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHVzYl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYwppbmRleCAyN2IyM2M1Li4xOGQ4ZWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYworKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYwpAQCAtODEyLDcgKzgxMiw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRhYnVzYl9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGFidXNiX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiZGFidXNiIiwKIAkucHJvYmUgPQlkYWJ1c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlkYWJ1c2JfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RzYnIxMDAuYyBiL2RyaXZlcnMvdXNiL21lZGlhL2RzYnIxMDAuYwppbmRleCA3NTAzZjViLi42YTU3MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9kc2JyMTAwLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jCkBAIC0xNTAsNyArMTUwLDYgQEAKIAogLyogVVNCIHN1YnN5c3RlbSBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfZHNicjEwMF9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImRzYnIxMDAiLAogCS5wcm9iZSA9CXVzYl9kc2JyMTAwX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX2RzYnIxMDBfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2libWNhbS5jIGIvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMKaW5kZXggYmE0MWZjNy4uYTQyYzIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMKQEAgLTM0NTcsNyArMzQ1Nyw3IEBACiAJaWYoaW5pdF9tb2RlbDNfaW5wdXQpIHsKIAkJaWYgKGRlYnVnID4gMCkKIAkJCWluZm8oIlNldHRpbmcgaW5wdXQgdG8gUkNBLiIpOwotCQlmb3IgKGk9MDsgaSA8IChzaXplb2YoaW5pdERhdGEpL3NpemVvZihpbml0RGF0YVswXSkpOyBpKyspIHsKKwkJZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKGluaXREYXRhKTsgaSsrKSB7CiAJCQlpYm1jYW1fdmVpbyh1dmQsIGluaXREYXRhW2ldLnJlcSwgaW5pdERhdGFbaV0udmFsdWUsIGluaXREYXRhW2ldLmluZGV4KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2tvbmljYXdjLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9rb25pY2F3Yy5jCmluZGV4IDlmZTJjMjcuLmUyZWRlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL2tvbmljYXdjLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEva29uaWNhd2MuYwpAQCAtNzcsMTQgKzc3LDE0IEBACiBzdGF0aWMgaW50IHNoYXJwbmVzcyA9CU1BWF9TSEFSUE5FU1MvMjsKIHN0YXRpYyBpbnQgd2hpdGViYWwgPQkzKihNQVhfV0hJVEVCQUwvNCk7CiAKLXN0YXRpYyBpbnQgc3BkX3RvX2lmYWNlW10gPSB7IDEsIDAsIDMsIDIsIDQsIDUsIDYgfTsKK3N0YXRpYyBjb25zdCBpbnQgc3BkX3RvX2lmYWNlW10gPSB7IDEsIDAsIDMsIDIsIDQsIDUsIDYgfTsKIAogLyogVGhlc2UgRlBTIHNwZWVkcyBhcmUgZnJvbSB0aGUgd2luZG93cyBjb25maWcgYm94LiBUaGV5IGFyZQogICogaW5kZXhlZCBvbiBzaXplICgwLTIpIGFuZCBzcGVlZCAoMC02KS4gRGl2aWRlIGJ5IDMgdG8gZ2V0IHRoZQogICogcmVhbCBmcHMuCiAgKi8KIAotc3RhdGljIGludCBzcGRfdG9fZnBzW11bN10gPSB7IHsgMjQsIDQwLCA0OCwgNjAsIDcyLCA4MCwgMTAwIH0sCitzdGF0aWMgY29uc3QgaW50IHNwZF90b19mcHNbXVs3XSA9IHsgeyAyNCwgNDAsIDQ4LCA2MCwgNzIsIDgwLCAxMDAgfSwKIAkJCSAgICAgICB7IDI0LCA0MCwgNDgsIDYwLCA3MiwgODAsIDEwMCB9LAogCQkJICAgICAgIHsgMTgsIDMwLCAzNiwgNDUsIDU0LCA2MCwgNzUgIH0sCiAJCQkgICAgICAgeyA2LCAgMTAsIDEyLCAxNSwgMTgsIDIxLCAyNSAgfSB9OwpAQCAtOTUsNyArOTUsNyBAQAogCXU4CWNtZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2FtX3NpemUgY2FtZXJhX3NpemVzW10gPSB7IHsgMTYwLCAxMjAsIDB4NyB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBjYW1fc2l6ZSBjYW1lcmFfc2l6ZXNbXSA9IHsgeyAxNjAsIDEyMCwgMHg3IH0sCiAJCQkJCSAgeyAxNjAsIDEzNiwgMHhhIH0sCiAJCQkJCSAgeyAxNzYsIDE0NCwgMHg0IH0sCiAJCQkJCSAgeyAzMjAsIDI0MCwgMHg1IH0gfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL292NTExLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jCmluZGV4IDAzNmM0ODUuLjNhMGU4Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL292NTExLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAKIC8qIE51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhIGZhaWxlZCBJMkMgdHJhbnNhY3Rpb24uIEluY3JlYXNlIHRoaXMgaWYgeW91CiAgKiBhcmUgZ2V0dGluZyAiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElELi4uIiAqLwotc3RhdGljIGludCBpMmNfZGV0ZWN0X3RyaWVzID0gNTsKK3N0YXRpYyBjb25zdCBpbnQgaTJjX2RldGVjdF90cmllcyA9IDU7CiAKIC8qIE1NWCBzdXBwb3J0IGlzIHByZXNlbnQgaW4ga2VybmVsIGFuZCBDUFUuIENoZWNrZWQgdXBvbiBkZWNvbXAgbW9kdWxlIGxvYWQuICovCiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQpAQCAtNjAwOCw3ICs2MDA4LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG92NTExX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkib3Y1MTEiLAogCS5pZF90YWJsZSA9CWRldmljZV90YWJsZSwKIAkucHJvYmUgPQlvdjUxeF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKaW5kZXggNTMwOTkxOS4uMzU5YzRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogI2RlZmluZSBQVF9SRVNFVF9DT05UUk9MX0ZPUk1BVFRFUgkJMHgwMgogI2RlZmluZSBQVF9TVEFUVVNfRk9STUFUVEVSCQkJMHgwMwogCi1zdGF0aWMgY2hhciAqc2l6ZTJuYW1lW1BTWl9NQVhdID0KK3N0YXRpYyBjb25zdCBjaGFyICpzaXplMm5hbWVbUFNaX01BWF0gPQogewogCSJzdWJRQ0lGIiwKIAkiUVNJRiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMKaW5kZXggNTUyNGZkNy4uMDljYTYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYwpAQCAtMTExLDcgKzExMSw2IEBACiBzdGF0aWMgdm9pZCB1c2JfcHdjX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcHdjX2RyaXZlciA9IHsKLQkub3duZXIgPQkJVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJCSJQaGlsaXBzIHdlYmNhbSIsCS8qIG5hbWUgKi8KIAkuaWRfdGFibGUgPQkJcHdjX2RldmljZV90YWJsZSwKIAkucHJvYmUgPQkJdXNiX3B3Y19wcm9iZSwJCS8qIHByb2JlKCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jCmluZGV4IGY2OWU0NDMuLmIyYWUyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuYwpAQCAtMTQwMSw3ICsxNDAxLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlNDAxX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAgICAgICAgIC5uYW1lCQk9ICJzZTQwMSIsCiAgICAgICAgIC5pZF90YWJsZQk9IGRldmljZV90YWJsZSwKIAkucHJvYmUJCT0gc2U0MDFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCmluZGV4IGIyZTY2ZTMuLjhkMWExYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCkBAIC0xMzE2LDcgKzEzMTYsNyBAQAogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOwogCXN0cnVjdCB2NGwyX3JlY3QqIHJlY3Q7Ci0JdTggaSA9IDAsIG4gPSAwOworCXU4IGkgPSAwOwogCWludCBlcnIgPSAwOwogCiAJaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpIHsKQEAgLTEzNTIsNyArMTM1Miw3IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAocy0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKLQkJREJHKDMsICJDb21wcmVzc2VkIHZpZGVvIGZvcm1hdCBpcyBhY3RpdmUsIHF1YWxpdHkgJWQiLCAKKwkJREJHKDMsICJDb21wcmVzc2VkIHZpZGVvIGZvcm1hdCBpcyBhY3RpdmUsIHF1YWxpdHkgJWQiLAogCQkgICAgY2FtLT5jb21wcmVzc2lvbi5xdWFsaXR5KQogCWVsc2UKIAkJREJHKDMsICJVbmNvbXByZXNzZWQgdmlkZW8gZm9ybWF0IGlzIGFjdGl2ZSIpCkBAIC0xMzY0LDkgKzEzNjQsOCBAQAogCQl9CiAKIAlpZiAocy0+c2V0X2N0cmwpIHsKLQkJbiA9IHNpemVvZihzLT5xY3RybCkgLyBzaXplb2Yocy0+cWN0cmxbMF0pOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQkJaWYgKHMtPnFjdHJsW2ldLmlkICE9IDAgJiYgCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMtPnFjdHJsKTsgaSsrKQorCQkJaWYgKHMtPnFjdHJsW2ldLmlkICE9IDAgJiYKIAkJCSAgICAhKHMtPnFjdHJsW2ldLmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQpKSB7CiAJCQkJY3RybC5pZCA9IHMtPnFjdHJsW2ldLmlkOwogCQkJCWN0cmwudmFsdWUgPSBxY3RybFtpXS5kZWZhdWx0X3ZhbHVlOwpAQCAtMTM4OCw3ICsxMzg3LDcgQEAKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X3N0cmVhbSk7CiAJCWNhbS0+bnJlYWRidWZmZXJzID0gMjsKIAkJbWVtY3B5KHMtPl9xY3RybCwgcy0+cWN0cmwsIHNpemVvZihzLT5xY3RybCkpOwotCQltZW1jcHkoJihzLT5fcmVjdCksICYocy0+Y3JvcGNhcC5kZWZyZWN0KSwgCisJCW1lbWNweSgmKHMtPl9yZWN0KSwgJihzLT5jcm9wY2FwLmRlZnJlY3QpLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3JlY3QpKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfSU5JVElBTElaRUQ7CiAJfQpAQCAtMTgxMCwxMyArMTgwOSwxMiBAQAogCXsKIAkJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxYzsKLQkJdTggaSwgbjsKKwkJdTggaTsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJnFjLCBhcmcsIHNpemVvZihxYykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJbiA9IHNpemVvZihzLT5xY3RybCkgLyBzaXplb2Yocy0+cWN0cmxbMF0pOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzLT5xY3RybCk7IGkrKykKIAkJCWlmIChxYy5pZCAmJiBxYy5pZCA9PSBzLT5xY3RybFtpXS5pZCkgewogCQkJCW1lbWNweSgmcWMsICYocy0+cWN0cmxbaV0pLCBzaXplb2YocWMpKTsKIAkJCQlpZiAoY29weV90b191c2VyKGFyZywgJnFjLCBzaXplb2YocWMpKSkKQEAgLTE4NTIsNyArMTg1MCw3IEBACiAJewogCQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKIAkJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwotCQl1OCBpLCBuOworCQl1OCBpOwogCQlpbnQgZXJyID0gMDsKIAogCQlpZiAoIXMtPnNldF9jdHJsKQpAQCAtMTg2MSw4ICsxODU5LDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZihjdHJsKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQluID0gc2l6ZW9mKHMtPnFjdHJsKSAvIHNpemVvZihzLT5xY3RybFswXSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMtPnFjdHJsKTsgaSsrKQogCQkJaWYgKGN0cmwuaWQgPT0gcy0+cWN0cmxbaV0uaWQpIHsKIAkJCQlpZiAoY3RybC52YWx1ZSA8IHMtPnFjdHJsW2ldLm1pbmltdW0gfHwKIAkJCQkgICAgY3RybC52YWx1ZSA+IHMtPnFjdHJsW2ldLm1heGltdW0pCkBAIC0yNTQ0LDcgKzI1NDEsNyBAQAogCXVuc2lnbmVkIGludCBpLCBuOwogCWludCBlcnIgPSAwLCByOwogCi0JbiA9IHNpemVvZihzbjljMTAyX2lkX3RhYmxlKS9zaXplb2Yoc245YzEwMl9pZF90YWJsZVswXSk7CisJbiA9IEFSUkFZX1NJWkUoc245YzEwMl9pZF90YWJsZSk7CiAJZm9yIChpID0gMDsgaSA8IG4tMTsgaSsrKQogCQlpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gCiAJCSAgICBzbjljMTAyX2lkX3RhYmxlW2ldLmlkVmVuZG9yICYmCkBAIC0yNzExLDcgKzI3MDgsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbjljMTAyX3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyID0gICAgICBUSElTX01PRFVMRSwKIAkubmFtZSA9ICAgICAgICJzbjljMTAyIiwKIAkuaWRfdGFibGUgPSAgIHNuOWMxMDJfaWRfdGFibGUsCiAJLnByb2JlID0gICAgICBzbjljMTAyX3VzYl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5jIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMKaW5kZXggMGZkMGZhOS4uNzc0MDM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMKQEAgLTE0NzcsNyArMTQ3Nyw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdHY2ODBfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJzdHY2ODAiLAogCS5wcm9iZSA9CXN0djY4MF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXN0djY4MF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuaAppbmRleCA0NDU5NDA2Li5iMDU1MWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuaAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuaApAQCAtMTUxLDcgKzE1MSw3IEBACiB9OwogCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJlZFsyNTZdID0geyAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlZFsyNTZdID0gewogCTAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgCiAJMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDI1LCAzMCwgMzUsIDM4LCA0MiwgCiAJNDQsIDQ3LCA1MCwgNTMsIDU0LCA1NywgNTksIDYxLCA2MywgNjUsIDY3LCA2OSwgCkBAIC0xNzYsNyArMTc2LDcgQEAKIAkyMjAsIDIyMCwgMjIxLCAyMjEgCiB9OyAKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3JlZW5bMjU2XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdyZWVuWzI1Nl0gPSB7CiAJMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKIAkyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjgsIDM0LCAzOSwgNDMsIDQ3LCAKIAk1MCwgNTMsIDU2LCA1OSwgNjEsIDY0LCA2NiwgNjgsIDcxLCA3MywgNzUsIDc3LCAKQEAgLTIwMSw3ICsyMDEsNyBAQAogCTI0NSwgMjQ1LCAyNDYsIDI0NiAKIH07IAogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBibHVlWzI1Nl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBibHVlWzI1Nl0gPSB7CiAJMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAKIAkyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMzAsIDM3LCA0MiwgNDcsIDUxLCAKIAk1NSwgNTgsIDYxLCA2NCwgNjcsIDcwLCA3MiwgNzQsIDc4LCA4MCwgODIsIDg0LCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jCmluZGV4IDI0ZWZiMjEuLjRiZDExMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYwpAQCAtNzI1LDcgKzcyNSw3IEBACiAJCS8qIEFsbG9jYXRlIHVzZXJfZGF0YSBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2Yga21hbGxvYydzIGxpbWl0cyAqLwogCQlpZiAobnVtX2V4dHJhID4gMCkgewogCQkJdXAtPnVzZXJfc2l6ZSA9IG51bV9jYW1zICogbnVtX2V4dHJhOwotCQkJdXAtPnVzZXJfZGF0YSA9IChjaGFyICopIGttYWxsb2ModXAtPnVzZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQl1cC0+dXNlcl9kYXRhID0ga21hbGxvYyh1cC0+dXNlcl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJCWlmICh1cC0+dXNlcl9kYXRhID09IE5VTEwpIHsKIAkJCQllcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgdXNlcl9kYXRhICglZC4gYnl0ZXMpIiwKIAkJCQkgICAgX19GVU5DVElPTl9fLCB1cC0+dXNlcl9zaXplKTsKQEAgLTk1NSw3ICs5NTUsNyBAQAogCS5pb2N0bCA9ICB1c2J2aWRlb192NGxfaW9jdGwsCiAJLmxsc2VlayA9IG5vX2xsc2VlaywKIH07Ci1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB1c2J2aWRlb190ZW1wbGF0ZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHVzYnZpZGVvX3RlbXBsYXRlID0gewogCS5vd25lciA9ICAgICAgVEhJU19NT0RVTEUsCiAJLnR5cGUgPSAgICAgICBWSURfVFlQRV9DQVBUVVJFLAogCS5oYXJkd2FyZSA9ICAgVklEX0hBUkRXQVJFX0NQSUEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS92aWNhbS5jIGIvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwppbmRleCAwYmMwYjEyLi4xYzczMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS92aWNhbS5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMKQEAgLTEyNTcsNyArMTI1Nyw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdmljYW1fdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdmljYW1fZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidmljYW0iLAogCS5wcm9iZQkJPSB2aWNhbV9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHZpY2FtX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMKaW5kZXggNjc2MTJjOC4uMDRkNjkzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYwpAQCAtMjk1OCw3ICsyOTU4LDcgQEAKIAl9OwogCiAJI2RlZmluZSBWNEwxX0lPQ1RMKGNtZCkgXAotCSAgICAgICAgKChfSU9DX05SKChjbWQpKSA8IHNpemVvZih2NGwxX2lvY3Rscykvc2l6ZW9mKGNoYXIqKSkgPyBcCisJICAgICAgICAoKF9JT0NfTlIoKGNtZCkpIDwgQVJSQVlfU0laRSh2NGwxX2lvY3RscykpID8gXAogCSAgICAgICAgdjRsMV9pb2N0bHNbX0lPQ19OUigoY21kKSldIDogIj8iKQogCiAJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CkBAIC0zNTU0LDcgKzM1NTQsNyBAQAogCiAKIAkvKiBBbGxvY2F0ZSAyIGJ5dGVzIG9mIG1lbW9yeSBmb3IgY2FtZXJhIGNvbnRyb2wgVVNCIHRyYW5zZmVycyAqLwotCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSAodTE2KilrbWFsbG9jKDIsIEdGUF9LRVJORUwpKSkgeworCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpKSkgewogCQlEQkcoMSwiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjYW1lcmEgY29udHJvbCB0cmFuc2ZlcnMiKQogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0zNTYyLDcgKzM1NjIsNyBAQAogCW1lbXNldChjYW0tPmNvbnRyb2xfYnVmZmVyLCAwLCAyKTsKIAogCS8qIEFsbG9jYXRlIDggYnl0ZXMgb2YgbWVtb3J5IGZvciBVU0IgZGF0YSB0cmFuc2ZlcnMgdG8gdGhlIEZTQiAqLwotCWlmICghKGNhbS0+ZGF0YV9idWZmZXIgPSAodTE2KilrbWFsbG9jKDgsIEdGUF9LRVJORUwpKSkgeworCWlmICghKGNhbS0+ZGF0YV9idWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpKSkgewogCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSAiCiAJCSAgICAgICAidHJhbnNmZXJzIHRvIHRoZSBGU0IiKQogCQllcnIgPSAtRU5PTUVNOwpAQCAtMzY2OCw3ICszNjY4LDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdzk5NjhjZl91c2JfZHJpdmVyID0gewotCS5vd25lciA9ICAgICAgVEhJU19NT0RVTEUsCiAJLm5hbWUgPSAgICAgICAidzk5NjhjZiIsCiAJLmlkX3RhYmxlID0gICB3aW5ib25kX2lkX3RhYmxlLAogCS5wcm9iZSA9ICAgICAgdzk5NjhjZl91c2JfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwppbmRleCBiMjkzZGIzLi40NDliMjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCSAgICAgICAgbWVtc2V0IChiZXAsIDAsIHNpemVvZiAoYXVlcmJ1Zl90KSk7CiAgICAgICAgICAgICAgICAgYmVwLT5saXN0ID0gYmNwOwogICAgICAgICAgICAgICAgIElOSVRfTElTVF9IRUFEICgmYmVwLT5idWZmX2xpc3QpOwotICAgICAgICAgICAgICAgIGJlcC0+YnVmcCA9IChjaGFyICopIGttYWxsb2MgKGJ1ZnNpemUsIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGJlcC0+YnVmcCA9IGttYWxsb2MgKGJ1ZnNpemUsIEdGUF9LRVJORUwpOwogICAgICAgICAgICAgICAgIGlmICghYmVwLT5idWZwKQogCQkJZ290byBibF9mYWlsOwogICAgICAgICAgICAgICAgIGJlcC0+ZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfS0VSTkVMKTsKQEAgLTExMjMsNyArMTEyMyw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghY3AtPmludGJ1ZnApIHsKLSAgICAgICAgICAgICAgICBjcC0+aW50YnVmcCA9IChjaGFyICopIGttYWxsb2MgKGlycXNpemUsIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGNwLT5pbnRidWZwID0ga21hbGxvYyAoaXJxc2l6ZSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjcC0+aW50YnVmcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50b2VuZDsKQEAgLTIxMDMsNyArMjEwMyw2IEBACiAKIC8qIFN0YW5kYXJkIHVzYiBkcml2ZXIgc3RydWN0ICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXVlcnN3YWxkX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiYXVlcnN3YWxkIiwKIAkucHJvYmUgPQlhdWVyc3dhbGRfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlhdWVyc3dhbGRfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jIGIvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKaW5kZXggYjMzMDQ0ZC4uNjY3MTMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN5dGhlcm1fZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJjeXRoZXJtIiwKIAkucHJvYmUgPQljeXRoZXJtX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JY3l0aGVybV9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCmluZGV4IGM4MTU1MjAuLjM4MjRkZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKQEAgLTIyNyw3ICsyMjcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZW1pMjZfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZW1pMjYgLSBmaXJtd2FyZSBsb2FkZXIiLAogCS5wcm9iZQkJPSBlbWkyNl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IGVtaTI2X2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKaW5kZXggMTg5OTg2YS4uNTJmZWEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtMjY2LDcgKzI2Niw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbWk2Ml9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJlbWk2MiAtIGZpcm13YXJlIGxvYWRlciIsCiAJLnByb2JlCQk9IGVtaTYyX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gZW1pNjJfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKaW5kZXggMWRjM2UwZi4uZDhjZGUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKQEAgLTExNCw3ICsxMTQsNiBAQAogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaWRtb3VzZV9kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSBEUklWRVJfU0hPUlQsCiAJLnByb2JlID0gaWRtb3VzZV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGlkbW91c2VfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwppbmRleCA3ZTkzYWM5Li45ODFkOGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCkBAIC03NjMsNyArNzYzLDYgQEAKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxkX3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImxkdXNiIiwKIAkucHJvYmUgPQlsZF91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlsZF91c2JfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCmluZGV4IDI3MDNlMjAuLjEzMzY3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtMjgyLDcgKzI4Miw2IEBACiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB0b3dlcl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImxlZ291c2J0b3dlciIsCiAJLnByb2JlID0JdG93ZXJfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl0b3dlcl9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwppbmRleCAwNjdhODE0Li42MDVhM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpAQCAtNTU1LDcgKzU1NSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpbnRlcmZhY2VraXRfZHJpdmVyID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lID0gInBoaWRnZXRraXQiLAogCS5wcm9iZSA9IGludGVyZmFjZWtpdF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGludGVyZmFjZWtpdF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKaW5kZXggYTMwZDRhNi4uYjM0MThkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCkBAIC0zMDYsNyArMzA2LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlcnZvX2RyaXZlciA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJwaGlkZ2V0c2Vydm8iLAogCS5wcm9iZSA9IHNlcnZvX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gc2Vydm9fZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCmluZGV4IDk1OTBkYmEuLjM4NGZhMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpAQCAtNDY1LDE0ICs0NjUsMTQgQEAKIAogCXJpby0+cmlvX2RldiA9IGRldjsKIAotCWlmICghKHJpby0+b2J1ZiA9IChjaGFyICopIGttYWxsb2MoT0JVRl9TSVpFLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShyaW8tPm9idWYgPSBrbWFsbG9jKE9CVUZfU0laRSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWVycigicHJvYmVfcmlvOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIG91dHB1dCBidWZmZXIiKTsKIAkJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfcmlvX2NsYXNzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRiZygicHJvYmVfcmlvOiBvYnVmIGFkZHJlc3M6JXAiLCByaW8tPm9idWYpOwogCi0JaWYgKCEocmlvLT5pYnVmID0gKGNoYXIgKikga21hbGxvYyhJQlVGX1NJWkUsIEdGUF9LRVJORUwpKSkgeworCWlmICghKHJpby0+aWJ1ZiA9IGttYWxsb2MoSUJVRl9TSVpFLCBHRlBfS0VSTkVMKSkpIHsKIAkJZXJyKCJwcm9iZV9yaW86IE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgaW5wdXQgYnVmZmVyIik7CiAJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CiAJCWtmcmVlKHJpby0+b2J1Zik7CkBAIC01MjIsNyArNTIyLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgcmlvX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJpb19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInJpbzUwMCIsCiAJLnByb2JlID0JcHJvYmVfcmlvLAogCS5kaXNjb25uZWN0ID0JZGlzY29ubmVjdF9yaW8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IDQxZWYyYjYuLjMyNjBkNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC04NjMsOSArODYzLDYgQEAKIAogCSAgICBzd2l0Y2ggKGxlbmd0aCkgewogCi0JCWNhc2UgMDoKLQkJCXJldHVybiByZXQ7Ci0KIAkJY2FzZSAxOgogCQkJaWYgKHVzZXJidWZmZXIpIHsKIAkJCQlpZiAoZ2V0X3VzZXIoc3dhcDgsICh1OCBfX3VzZXIgKil1c2VyYnVmZmVyKSkKQEAgLTEyMjEsOSArMTIxOCw2IEBACiAKIAkgICAgc3dpdGNoIChsZW5ndGgpIHsKIAotCQljYXNlIDA6Ci0JCQlyZXR1cm4gcmV0OwotCiAJCWNhc2UgMToKIAogCQkJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCkBAIC0yNDQzLDggKzI0MzcsOCBAQAogCXU4ICp0ZW1wYnVmOwogCXUxNiAqdGVtcGJ1ZmI7CiAJc2l6ZV90IHdyaXR0ZW47Ci0Jc3RhdGljIGNoYXIgYm9vdHN0cmluZ1tdID0gIlNpU1VTQiBWR0EgdGV4dCBjb25zb2xlLCAoQykgMjAwNSBUaG9tYXMgV2luaXNjaGhvZmVyLiI7Ci0Jc3RhdGljIGNoYXIgYm9vdGxvZ29bXSA9ICIob18gLy9cXCBWXy9fIjsKKwlzdGF0aWMgY29uc3QgY2hhciBib290c3RyaW5nW10gPSAiU2lTVVNCIFZHQSB0ZXh0IGNvbnNvbGUsIChDKSAyMDA1IFRob21hcyBXaW5pc2NoaG9mZXIuIjsKKwlzdGF0aWMgY29uc3QgY2hhciBib290bG9nb1tdID0gIihvXyAvL1xcIFZfL18iOwogCiAJLyogc2lzdXNiLT5sb2NrIGlzIGRvd24gKi8KIApAQCAtMzQ4OSw3ICszNDgzLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc2lzdXNiX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNpc3VzYl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInNpc3VzYiIsCiAJLnByb2JlID0Jc2lzdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0ID0Jc2lzdXNiX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCA4NWYzNzI1Li5jYzNkYWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTM3MSw3ICszNzEsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbGNkX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkidXNibGNkIiwKIAkucHJvYmUgPQlsY2RfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlsY2RfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCmluZGV4IDNjOTM5MjEuLjg3N2IwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwpAQCAtMTQ4LDcgKzE0OCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsZWRfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJ1c2JsZWQiLAogCS5wcm9iZSA9CWxlZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CWxlZF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCA2MDVhMmFmLi44NGZhMTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMjEzNCw3ICsyMTM0LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNidGVzdF9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInVzYnRlc3QiLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5wcm9iZSA9CXVzYnRlc3RfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwppbmRleCAxY2FiZTdlLi40MDgxOTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKQEAgLTc4MCw3ICs3ODAsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c3M3MjBfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJ1c3M3MjAiLAogCS5wcm9iZSA9CXVzczcyMF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzczcyMF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYwppbmRleCAxN2QwMTkwLi42MTE2MTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYwpAQCAtOTcsMTkgKzk3LDEyIEBACiAJaWYgKGxlbiA+PSBEQVRBX01BWCkKIAkJbGVuID0gREFUQV9NQVg7CiAKLQkvKgotCSAqIEJ1bGsgaXMgZWFzeSB0byBzaG9ydGN1dCByZWxpYWJseS4gCi0JICogWFhYIE90aGVyIHBpcGUgdHlwZXMgbmVlZCBjb25zaWRlcmF0aW9uLiBDdXJyZW50bHksIHdlIG92ZXJkbyBpdAotCSAqIGFuZCBjb2xsZWN0IGdhcmJhZ2UgZm9yIHRoZW06IGJldHRlciBtb3JlIHRoYW4gbGVzcy4KLQkgKi8KLQlpZiAodXNiX3BpcGVidWxrKHBpcGUpIHx8IHVzYl9waXBlY29udHJvbChwaXBlKSkgewotCQlpZiAodXNiX3BpcGVpbihwaXBlKSkgewotCQkJaWYgKGV2X3R5cGUgPT0gJ1MnKQotCQkJCXJldHVybiAnPCc7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZXZfdHlwZSA9PSAnQycpCi0JCQkJcmV0dXJuICc+JzsKLQkJfQorCWlmICh1c2JfcGlwZWluKHBpcGUpKSB7CisJCWlmIChldl90eXBlID09ICdTJykKKwkJCXJldHVybiAnPCc7CisJfSBlbHNlIHsKKwkJaWYgKGV2X3R5cGUgPT0gJ0MnKQorCQkJcmV0dXJuICc+JzsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2FzaXguYyBiL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKaW5kZXggNTQyMTIwZS4uNTQxMTgxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L2FzaXguYworKysgYi9kcml2ZXJzL3VzYi9uZXQvYXNpeC5jCkBAIC05MTIsMTMgKzkxMiwxNiBAQAogCS8vIEFTSVggQVg4ODc3MiAxMC8xMDAKICAgICAgICAgVVNCX0RFVklDRSAoMHgwYjk1LCAweDc3MjApLAogICAgICAgICAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODg3NzJfaW5mbywKK30sIHsKKwkvLyBMaW5rc3lzIFVTQjIwME0gUmV2IDIKKwlVU0JfREVWSUNFICgweDEzYjEsIDB4MDAxOCksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZheDg4NzcyX2luZm8sCiB9LAogCXsgfSwJCS8vIEVORAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwcm9kdWN0cyk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhc2l4X2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiYXNpeCIsCiAJLmlkX3RhYmxlID0JcHJvZHVjdHMsCiAJLnByb2JlID0JdXNibmV0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2NhdGMuYyBiL2RyaXZlcnMvdXNiL25ldC9jYXRjLmMKaW5kZXggMzdlZjM2NS4uYmU1ZjVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L2NhdGMuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvY2F0Yy5jCkBAIC05MzQsNyArOTM0LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjYXRjX2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNhdGNfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCWRyaXZlcl9uYW1lLAogCS5wcm9iZSA9CWNhdGNfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQljYXRjX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvY2RjX2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9uZXQvY2RjX2V0aGVyLmMKaW5kZXggYzAwOGM5OC4uNjNmMWYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L2NkY19ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9jZGNfZXRoZXIuYwpAQCAtNDc2LDcgKzQ3Niw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHJvZHVjdHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2RjX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiY2RjX2V0aGVyIiwKIAkuaWRfdGFibGUgPQlwcm9kdWN0cywKIAkucHJvYmUgPQl1c2JuZXRfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvY2RjX3N1YnNldC5jIGIvZHJpdmVycy91c2IvbmV0L2NkY19zdWJzZXQuYwppbmRleCBmMDVjZmI4Li5lYzgwMWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvY2RjX3N1YnNldC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9jZGNfc3Vic2V0LmMKQEAgLTMwNiw3ICszMDYsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNkY19zdWJzZXRfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJjZGNfc3Vic2V0IiwKIAkucHJvYmUgPQl1c2JuZXRfcHJvYmUsCiAJLnN1c3BlbmQgPQl1c2JuZXRfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9nbDYyMGEuYyBiL2RyaXZlcnMvdXNiL25ldC9nbDYyMGEuYwppbmRleCAyNDU1ZTlhLi5mYWYxZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvZ2w2MjBhLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2dsNjIwYS5jCkBAIC0zNzcsNyArMzc3LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwcm9kdWN0cyk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnbDYyMGFfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJnbDYyMGEiLAogCS5pZF90YWJsZSA9CXByb2R1Y3RzLAogCS5wcm9iZSA9CXVzYm5ldF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9rYXdldGguYyBiL2RyaXZlcnMvdXNiL25ldC9rYXdldGguYwppbmRleCBiNTc3NjUxLi5kZWYzYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jCkBAIC0xNzUsNyArMTc1LDYgQEAKICAqICAgICBrYXdldGhfZHJpdmVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrYXdldGhfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCWRyaXZlcl9uYW1lLAogCS5wcm9iZSA9CWthd2V0aF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CWthd2V0aF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L25ldDEwODAuYyBiL2RyaXZlcnMvdXNiL25ldC9uZXQxMDgwLmMKaW5kZXggYjM3OTliMS4uNzhlNmE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L25ldDEwODAuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvbmV0MTA4MC5jCkBAIC01OTMsNyArNTkzLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwcm9kdWN0cyk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBuZXQxMDgwX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkibmV0MTA4MCIsCiAJLmlkX3RhYmxlID0JcHJvZHVjdHMsCiAJLnByb2JlID0JdXNibmV0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKaW5kZXggNjgzZTNkZi4uMTU2YTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCkBAIC00NSw3ICs0NSw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC42LjEyICgyMDA1LzAxLzEzKSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjYuMTMgKDIwMDUvMTEvMTMpIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJQZXRrbyBNYW5vbG92IDxwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlBlZ2FzdXMvUGVnYXN1cyBJSSBVU0IgRXRoZXJuZXQgZHJpdmVyIgogCkBAIC01NywxMiArNTcsMTQgQEAKIAogc3RhdGljIGludCBsb29wYmFjayA9IDA7CiBzdGF0aWMgaW50IG1paV9tb2RlID0gMDsKK3N0YXRpYyBjaGFyICpkZXZpZD1OVUxMOwogCiBzdGF0aWMgc3RydWN0IHVzYl9ldGhfZGV2IHVzYl9kZXZfaWRbXSA9IHsKICNkZWZpbmUJUEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykJXAogCXsubmFtZSA9IHBuLCAudmVuZG9yID0gdmlkLCAuZGV2aWNlID0gcGlkLCAucHJpdmF0ZSA9IGZsYWdzfSwKICNpbmNsdWRlICJwZWdhc3VzLmgiCiAjdW5kZWYJUEVHQVNVU19ERVYKKwl7TlVMTCwgMCwgMCwgMH0sCiAJe05VTEwsIDAsIDAsIDB9CiB9OwogCkBAIC03MSw2ICs3Myw3IEBACiAJey5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAuaWRWZW5kb3IgPSB2aWQsIC5pZFByb2R1Y3QgPSBwaWR9LAogI2luY2x1ZGUgInBlZ2FzdXMuaCIKICN1bmRlZglQRUdBU1VTX0RFVgorCXt9LAogCXt9CiB9OwogCkBAIC03OSw4ICs4MiwxMCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogbW9kdWxlX3BhcmFtKGxvb3BiYWNrLCBib29sLCAwKTsKIG1vZHVsZV9wYXJhbShtaWlfbW9kZSwgYm9vbCwgMCk7Cittb2R1bGVfcGFyYW0oZGV2aWQsIGNoYXJwLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobG9vcGJhY2ssICJFbmFibGUgTUFDIGxvb3BiYWNrIG1vZGUgKGJpdCAwKSIpOwogTU9EVUxFX1BBUk1fREVTQyhtaWlfbW9kZSwgIkVuYWJsZSBIb21lUE5BIG1vZGUgKGJpdCAwKSxkZWZhdWx0PU1JSSBtb2RlID0gMCIpOworTU9EVUxFX1BBUk1fREVTQyhkZXZpZCwgIlRoZSBmb3JtYXQgaXM6ICdERVZfbmFtZTpWZW5kb3JJRDpEZXZpY2VJRDpGbGFncyciKTsKIAogLyogdXNlIGV0aHRvb2wgdG8gY2hhbmdlIHRoZSBsZXZlbCBmb3IgYW55IGdpdmVuIGRldmljZSAqLwogc3RhdGljIGludCBtc2dfbGV2ZWwgPSAtMTsKQEAgLTExMyw3ICsxMTgsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCisJCQlkZXZfZGJnKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcywgc3RhdHVzICVkXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwogCX0KIAlwZWdhc3VzLT5mbGFncyAmPSB+RVRIX1JFR1NfQ0hBTkdFRDsKQEAgLTMwOCw5ICszMTMsOSBAQAogCV9fbGUxNiByZWdkaTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIDApOwotCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgUGh5QWRkciwgc2l6ZW9mIChkYXRhKSwgZGF0YSk7Ci0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1JFQUQpKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgMCk7CisJc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlBZGRyLCBzaXplb2YgKGRhdGEpLCBkYXRhKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgKGluZHggfCBQSFlfUkVBRCkpOwogCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CiAJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgUGh5Q3RybCwgMSwgZGF0YSk7CiAJCWlmIChkYXRhWzBdICYgUEhZX0RPTkUpCkBAIC0zMTksMTIgKzMyNCwxMiBAQAogCWlmIChpIDwgUkVHX1RJTUVPVVQpIHsKIAkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlEYXRhLCAyLCAmcmVnZGkpOwogCQkqcmVnZCA9IGxlMTZfdG9fY3B1KHJlZ2RpKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiByZXQ7CiAJfQogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQogCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2MpCkBAIC0zNDQsMjAgKzM0OSwyMCBAQAogCiAJZGF0YVsxXSA9ICh1OCkgcmVnZDsKIAlkYXRhWzJdID0gKHU4KSAocmVnZCA+PiA4KTsKLQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgMCk7Ci0JcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlBZGRyLCBzaXplb2YoZGF0YSksIGRhdGEpOwotCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBQaHlDdHJsLCAoaW5keCB8IFBIWV9XUklURSkpOworCXNldF9yZWdpc3RlcihwZWdhc3VzLCBQaHlDdHJsLCAwKTsKKwlzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUFkZHIsIHNpemVvZihkYXRhKSwgZGF0YSk7CisJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1dSSVRFKSk7CiAJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKIAkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlDdHJsLCAxLCBkYXRhKTsKIAkJaWYgKGRhdGFbMF0gJiBQSFlfRE9ORSkKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA8IFJFR19USU1FT1VUKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJldDsKIAogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQogCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIAogc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQpAQCAtMzc0LDkgKzM3OSw5IEBACiAJX19sZTE2IHJldGRhdGFpOwogCWludCByZXQ7CiAKLQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCAwKTsKLQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21PZmZzZXQsIGluZGV4KTsKLQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCBFUFJPTV9SRUFEKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCAwKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21PZmZzZXQsIGluZGV4KTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCBFUFJPTV9SRUFEKTsKIAogCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CiAJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21DdHJsLCAxLCAmdG1wKTsKQEAgLTM4NiwxMiArMzkxLDEyIEBACiAJaWYgKGkgPCBSRUdfVElNRU9VVCkgewogCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJnJldGRhdGFpKTsKIAkJKnJldGRhdGEgPSBsZTE2X3RvX2NwdShyZXRkYXRhaSk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQogCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKICNpZmRlZglQRUdBU1VTX1dSSVRFX0VFUFJPTQpAQCAtNDAwLDggKzQwNSw4IEBACiAJX191OCB0bXA7CiAJaW50IHJldDsKIAotCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoQ3RybDIsIDEsICZ0bXApOwotCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFdGhDdHJsMiwgdG1wIHwgRVBST01fV1JfRU5BQkxFKTsKKwlnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwyLCAxLCAmdG1wKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXRoQ3RybDIsIHRtcCB8IEVQUk9NX1dSX0VOQUJMRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2Vwcm9tX3dyaXRlKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCkBAIC00MDksOSArNDE0LDkgQEAKIAlfX3U4IHRtcDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMiwgMSwgJnRtcCk7Ci0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEVwcm9tQ3RybCwgMCk7Ci0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEV0aEN0cmwyLCB0bXAgJiB+RVBST01fV1JfRU5BQkxFKTsKKwlnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwyLCAxLCAmdG1wKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCAwKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXRoQ3RybDIsIHRtcCAmIH5FUFJPTV9XUl9FTkFCTEUpOwogfQogCiBzdGF0aWMgaW50IHdyaXRlX2Vwcm9tX3dvcmQocGVnYXN1c190ICogcGVnYXN1cywgX191OCBpbmRleCwgX191MTYgZGF0YSkKQEAgLTQyMCwxMSArNDI1LDExIEBACiAJX191OCB0bXAsIGRbNF0gPSB7IDB4M2YsIDAsIDAsIEVQUk9NX1dSSVRFIH07CiAJaW50IHJldDsKIAotCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21PZmZzZXQsIDQsIGQpOworCXNldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21PZmZzZXQsIDQsIGQpOwogCWVuYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzKTsKLQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21PZmZzZXQsIGluZGV4KTsKLQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJmRhdGEpOwotCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbUN0cmwsIEVQUk9NX1dSSVRFKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21PZmZzZXQsIGluZGV4KTsKKwlzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJmRhdGEpOworCXNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbUN0cmwsIEVQUk9NX1dSSVRFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CiAJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21DdHJsLCAxLCAmdG1wKTsKQEAgLTQzMywxMCArNDM4LDEwIEBACiAJfQogCWRpc2FibGVfZXByb21fd3JpdGUocGVnYXN1cyk7CiAJaWYgKGkgPCBSRUdfVElNRU9VVCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCiAJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJmYWlsICVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KICNlbmRpZgkJCQkvKiBQRUdBU1VTX1dSSVRFX0VFUFJPTSAqLwogCkBAIC00NTQsMTAgKzQ1OSw5IEBACiBzdGF0aWMgdm9pZCBzZXRfZXRoZXJuZXRfYWRkcihwZWdhc3VzX3QgKiBwZWdhc3VzKQogewogCV9fdTggbm9kZV9pZFs2XTsKLQlpbnQgcmV0OwogCiAJZ2V0X25vZGVfaWQocGVnYXN1cywgbm9kZV9pZCk7Ci0JcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhJRCwgc2l6ZW9mIChub2RlX2lkKSwgbm9kZV9pZCk7CisJc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhJRCwgc2l6ZW9mIChub2RlX2lkKSwgbm9kZV9pZCk7CiAJbWVtY3B5KHBlZ2FzdXMtPm5ldC0+ZGV2X2FkZHIsIG5vZGVfaWQsIHNpemVvZiAobm9kZV9pZCkpOwogfQogCkBAIC00NjUsMzAgKzQ2OSwyOSBAQAogewogCV9fdTggZGF0YSA9IDB4ODsKIAlpbnQgaTsKLQlpbnQgcmV0OwogCi0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEV0aEN0cmwxLCBkYXRhKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXRoQ3RybDEsIGRhdGEpOwogCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7Ci0JCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoQ3RybDEsIDEsICZkYXRhKTsKKwkJZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMSwgMSwgJmRhdGEpOwogCQlpZiAofmRhdGEgJiAweDA4KSB7CiAJCQlpZiAobG9vcGJhY2sgJiAxKQogCQkJCWJyZWFrOwogCQkJaWYgKG1paV9tb2RlICYmIChwZWdhc3VzLT5mZWF0dXJlcyAmIEhBU19IT01FX1BOQSkpCi0JCQkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8xLCAweDM0KTsKKwkJCQlzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzEsIDB4MzQpOwogCQkJZWxzZQotCQkJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMSwgMHgyNik7Ci0JCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIHBlZ2FzdXMtPmZlYXR1cmVzKTsKLQkJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgREVGQVVMVF9HUElPX1NFVCk7CisJCQkJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8xLCAweDI2KTsKKwkJCXNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgcGVnYXN1cy0+ZmVhdHVyZXMpOworCQkJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCBERUZBVUxUX0dQSU9fU0VUKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCWlmIChpID09IFJFR19USU1FT1VUKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CiAKIAlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfTElOS1NZUyB8fAogCSAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtPmRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykgewotCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjQpOwotCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjYpOworCQlzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjQpOworCQlzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjYpOwogCX0KIAlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRUxDT04pIHsKIAkJX191MTYgYXV4bW9kZTsKQEAgLTUyNyw3ICs1MzAsNyBAQAogCQl3cml0ZV9taWlfd29yZChwZWdhc3VzLCAwLCAweDFiLCBhdXhtb2RlIHwgNCk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZmlsbF9za2JfcG9vbChwZWdhc3VzX3QgKiBwZWdhc3VzKQpAQCAtODgxLDkgKzg4NCw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9uZXRfdHJhZmZpYyhwZWdhc3VzX3QgKiBwZWdhc3VzKQogewogCWludCB0bXAgPSAwOwotCWludCByZXQ7CiAKLQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAyLCAmdG1wKTsKKwlzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAyLCAmdG1wKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdldF9pbnRlcnJ1cHRfaW50ZXJ2YWwocGVnYXN1c190ICogcGVnYXN1cykKQEAgLTEyMDYsMTggKzEyMDgsMTcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wZWdhc3VzX0lJKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCiB7CiAJX191OCBkYXRhID0gMHhhNTsKLQlpbnQgcmV0OwogCQotCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWcxZCwgMCk7Ci0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzdiLCAxKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnMWQsIDApOworCXNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc3YiwgMSk7CiAJbWRlbGF5KDEwMCk7CiAJaWYgKChwZWdhc3VzLT5mZWF0dXJlcyAmIEhBU19IT01FX1BOQSkgJiYgbWlpX21vZGUpCi0JCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc3YiwgMCk7CisJCXNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc3YiwgMCk7CiAJZWxzZQotCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnN2IsIDIpOworCQlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnN2IsIDIpOwogCi0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODMsIGRhdGEpOwotCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgMHg4MywgMSwgJmRhdGEpOworCXNldF9yZWdpc3RlcihwZWdhc3VzLCAweDgzLCBkYXRhKTsKKwlnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIDB4ODMsIDEsICZkYXRhKTsKIAogCWlmIChkYXRhID09IDB4YTUpIHsKIAkJcGVnYXN1cy0+Y2hpcCA9IDB4ODUxMzsKQEAgLTEyMjUsMTQgKzEyMjYsMTQgQEAKIAkJcGVnYXN1cy0+Y2hpcCA9IDA7CiAJfQogCi0JcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODAsIDB4YzApOwotCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCAweDgzLCAweGZmKTsKLQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgMHg4NCwgMHgwMSk7CisJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODAsIDB4YzApOworCXNldF9yZWdpc3RlcihwZWdhc3VzLCAweDgzLCAweGZmKTsKKwlzZXRfcmVnaXN0ZXIocGVnYXN1cywgMHg4NCwgMHgwMSk7CiAJCiAJaWYgKHBlZ2FzdXMtPmZlYXR1cmVzICYgSEFTX0hPTUVfUE5BICYmIG1paV9tb2RlKQotCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnODEsIDYpOworCQlzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnODEsIDYpOwogCWVsc2UKLQkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzgxLCAyKTsKKwkJc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzgxLCAyKTsKIH0KIAogCkBAIC0xNDE0LDkgKzE0MTUsNDIgQEAKIAkucmVzdW1lID0gcGVnYXN1c19yZXN1bWUsCiB9OwogCitzdGF0aWMgdm9pZCBwYXJzZV9pZChjaGFyICppZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmVuZG9yX2lkPTAsIGRldmljZV9pZD0wLCBmbGFncz0wLCBpPTA7CisJY2hhciAqdG9rZW4sICpuYW1lPU5VTEw7CisKKwlpZiAoKHRva2VuID0gc3Ryc2VwKCZpZCwgIjoiKSkgIT0gTlVMTCkKKwkJbmFtZSA9IHRva2VuOworCS8qIG5hbWUgbm93IHBvaW50cyB0byBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcqLworCWlmICgodG9rZW4gPSBzdHJzZXAoJmlkLCAiOiIpKSAhPSBOVUxMKQorCQl2ZW5kb3JfaWQgPSBzaW1wbGVfc3RydG91bCh0b2tlbiwgTlVMTCwgMTYpOworCWlmICgodG9rZW4gPSBzdHJzZXAoJmlkLCAiOiIpKSAhPSBOVUxMKQorCQlkZXZpY2VfaWQgPSBzaW1wbGVfc3RydG91bCh0b2tlbiwgTlVMTCwgMTYpOworCWZsYWdzID0gc2ltcGxlX3N0cnRvdWwoaWQsIE5VTEwsIDE2KTsKKwlwcl9pbmZvKCIlczogbmV3IGRldmljZSAlcywgdmVuZG9yIElEIDB4JTA0eCwgZGV2aWNlIElEIDB4JTA0eCwgZmxhZ3M6IDB4JXhcbiIsCisJICAgICAgICBkcml2ZXJfbmFtZSwgbmFtZSwgdmVuZG9yX2lkLCBkZXZpY2VfaWQsIGZsYWdzKTsKKworCWlmICh2ZW5kb3JfaWQgPiAweDEwMDAwIHx8IHZlbmRvcl9pZCA9PSAwKQorCQlyZXR1cm47CisJaWYgKGRldmljZV9pZCA+IDB4MTAwMDAgfHwgZGV2aWNlX2lkID09IDApCisJCXJldHVybjsKKworCWZvciAoaT0wOyB1c2JfZGV2X2lkW2ldLm5hbWU7IGkrKyk7CisJdXNiX2Rldl9pZFtpXS5uYW1lID0gbmFtZTsKKwl1c2JfZGV2X2lkW2ldLnZlbmRvciA9IHZlbmRvcl9pZDsKKwl1c2JfZGV2X2lkW2ldLmRldmljZSA9IGRldmljZV9pZDsKKwl1c2JfZGV2X2lkW2ldLnByaXZhdGUgPSBmbGFnczsKKwlwZWdhc3VzX2lkc1tpXS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFOworCXBlZ2FzdXNfaWRzW2ldLmlkVmVuZG9yID0gdmVuZG9yX2lkOworCXBlZ2FzdXNfaWRzW2ldLmlkUHJvZHVjdCA9IGRldmljZV9pZDsKK30KKwogc3RhdGljIGludCBfX2luaXQgcGVnYXN1c19pbml0KHZvaWQpCiB7CiAJcHJfaW5mbygiJXM6ICVzLCAiIERSSVZFUl9ERVNDICJcbiIsIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJaWYgKGRldmlkKQorCQlwYXJzZV9pZChkZXZpZCk7CiAJcGVnYXN1c193b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicGVnYXN1cyIpOwogCWlmICghcGVnYXN1c193b3JrcXVldWUpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BsdXNiLmMgYi9kcml2ZXJzL3VzYi9uZXQvcGx1c2IuYwppbmRleCA4OTg1NmFhLi40ZmU4NjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcGx1c2IuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcGx1c2IuYwpAQCAtMTI3LDcgKzEyNyw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHJvZHVjdHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcGx1c2JfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJwbHVzYiIsCiAJLmlkX3RhYmxlID0JcHJvZHVjdHMsCiAJLnByb2JlID0JdXNibmV0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMKaW5kZXggYzBlY2JhYi4uNDk5OTFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jCkBAIC01ODYsNyArNTg2LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwcm9kdWN0cyk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBybmRpc19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInJuZGlzX2hvc3QiLAogCS5pZF90YWJsZSA9CXByb2R1Y3RzLAogCS5wcm9iZSA9CXVzYm5ldF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMgYi9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCmluZGV4IDc4N2RkMzUuLjhjYTUyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwpAQCAtMTc3LDcgKzE3Nyw2IEBACiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZSBbXSA9ICJydGw4MTUwIjsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJ0bDgxNTBfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCWRyaXZlcl9uYW1lLAogCS5wcm9iZSA9CXJ0bDgxNTBfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQlydGw4MTUwX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvemF1cnVzLmMgYi9kcml2ZXJzL3VzYi9uZXQvemF1cnVzLmMKaW5kZXggNjgwZDEzOS4uOWM1YWIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3phdXJ1cy5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC96YXVydXMuYwpAQCAtMzU3LDcgKzM1Nyw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHJvZHVjdHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgemF1cnVzX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiemF1cnVzIiwKIAkuaWRfdGFibGUgPQlwcm9kdWN0cywKIAkucHJvYmUgPQl1c2JuZXRfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMgYi9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMKaW5kZXggMmY1MjI2MS4uZjNhOGUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYwpAQCAtMTcyMiw3ICsxNzIyLDcgQEAKIAkgICAgSVdfUFJJVl9UWVBFX05PTkUsICJzZXRob3N0YXV0aCIgfSwKIAl7IFpEMTIwMUdJV0hPU1RBVVRILCBJV19QUklWX1RZUEVfTk9ORSwKIAkgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRob3N0YXV0aCIgfSwKLQl7IFpEMTIwMVNJV0FVVEhTVEEsIElXX1BSSVZfVFlQRV9BRERSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgCisJeyBaRDEyMDFTSVdBVVRIU1RBLCBJV19QUklWX1RZUEVfQUREUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCiAJICAgIElXX1BSSVZfVFlQRV9OT05FLCAiYXV0aHN0YXRpb24iIH0sCiAJeyBaRDEyMDFTSVdNQVhBU1NPQywgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCiAJICAgIElXX1BSSVZfVFlQRV9OT05FLCAic2V0bWF4YXNzb2MiIH0sCkBAIC0xNzMxLDkgKzE3MzEsOSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiB6ZDEyMDFfaXdfaGFuZGxlcnMgPSB7Ci0JLm51bV9zdGFuZGFyZCAJCT0gc2l6ZW9mKHpkMTIwMV9pd19oYW5kbGVyKS9zaXplb2YoaXdfaGFuZGxlciksCi0JLm51bV9wcml2YXRlIAkJPSBzaXplb2YoemQxMjAxX3ByaXZhdGVfaGFuZGxlcikvc2l6ZW9mKGl3X2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZV9hcmdzIAk9IHNpemVvZih6ZDEyMDFfcHJpdmF0ZV9hcmdzKS9zaXplb2Yoc3RydWN0IGl3X3ByaXZfYXJncyksCisJLm51bV9zdGFuZGFyZCAJCT0gQVJSQVlfU0laRSh6ZDEyMDFfaXdfaGFuZGxlciksCisJLm51bV9wcml2YXRlIAkJPSBBUlJBWV9TSVpFKHpkMTIwMV9wcml2YXRlX2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZV9hcmdzIAk9IEFSUkFZX1NJWkUoemQxMjAxX3ByaXZhdGVfYXJncyksCiAJLnN0YW5kYXJkIAkJPSAoaXdfaGFuZGxlciAqKXpkMTIwMV9pd19oYW5kbGVyLAogCS5wcml2YXRlIAkJPSAoaXdfaGFuZGxlciAqKXpkMTIwMV9wcml2YXRlX2hhbmRsZXIsCiAJLnByaXZhdGVfYXJncyAJCT0gKHN0cnVjdCBpd19wcml2X2FyZ3MgKikgemQxMjAxX3ByaXZhdGVfYXJncywKQEAgLTE4MjksNiArMTgyOSw4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfbmV0OwogCisJU0VUX05FVERFVl9ERVYoemQtPmRldiwgJnVzYi0+ZGV2KTsKKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldih6ZC0+ZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9uZXQ7CkBAIC0xOTIzLDcgKzE5MjUsNiBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB6ZDEyMDFfdXNiID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lID0gInpkMTIwMSIsCiAJLnByb2JlID0gemQxMjAxX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gemQxMjAxX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlycHJpbWUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCmluZGV4IDFmMjlkODguLmRiZjFmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jCkBAIC0yMywxMSArMjMsMTEgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhaXJwcmltZV9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImFpcnByaW1lIiwKIAkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGFpcnByaW1lX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hbnlkYXRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYW55ZGF0YS5jCmluZGV4IDE4MDIyYTcuLjM0M2Y2ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hbnlkYXRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FueWRhdGEuYwpAQCAtMjcsMTEgKzI3LDExIEBACiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYW55ZGF0YV9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImFueWRhdGEiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIHN0YXRpYyBpbnQgYW55ZGF0YV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCmluZGV4IDg0YmMwZWUuLjQxNDQ3NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTExMywxMSArMTEzLDExIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJlbGtpbl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImJlbGtpbiIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBzZXJpYWwgY29udmVydGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCmluZGV4IGM5Nzg3MDAuLmRhNDZiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKQEAgLTY3LDExICs2NywxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjcDIxMDFfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiY3AyMTAxIiwKIAkucHJvYmUJCT0gdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUJPSBpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZAk9IAkxLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjcDIxMDFfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCmluZGV4IGU1ODFlNGEuLjZkMThkNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKQEAgLTc2LDExICs3NiwxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeWJlcmphY2tfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJjeWJlcmphY2siLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY3liZXJqYWNrX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCmluZGV4IGFmOTI5MGUuLmFmMTgzNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpAQCAtMTEyLDYgKzExMiw3IEBACiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggZGM3NDY0NC4uOGZjNDE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtNDkzLDExICs0OTMsMTEgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGlnaV9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImRpZ2lfYWNjZWxlcG9ydCIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCmluZGV4IDBiMDU0NmQuLjc5YTc2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCkBAIC0xMDUsMTEgKzEwNSwxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbXBlZ19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImVtcGVnIiwKIAkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGVtcGVnX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggMDZlMDRiNC4uZWI4NjNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTQ3MSwxMiArNDcxLDE1IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDVElWRV9ST0JPVFNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NSEFNX1k2X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTUhBTV9ZOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEVSQVRST05JS19EMlhYX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRVZPTFVUSU9OX1ZJRCwgRVZPTFVUSU9OX0VSMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FSVEVNSVNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BVElLX0FUSzE2X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQVRJS19BVEsxNkhSX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoS09CSUxfVklELCBLT0JJTF9DT05WX0IxX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoS09CSUxfVklELCBLT0JJTF9DT05WX0tBQU5fUElEKSB9LAorCXsgVVNCX0RFVklDRShQT1NJRkxFWF9WSUQsIFBPU0lGTEVYX1BQNzAwMF9QSUQpIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTQ4OCw5ICs0OTEsMTAgQEAKIAkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwogCi1zdGF0aWMgY2hhciAqZnRkaV9jaGlwX25hbWVbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpmdGRpX2NoaXBfbmFtZVtdID0gewogCVtTSU9dID0gIlNJTyIsCS8qIHRoZSBzZXJpYWwgcGFydCBvZiBGVDhVMTAwQVggKi8KIAlbRlQ4VTIzMkFNXSA9ICJGVDhVMjMyQU0iLAogCVtGVDIzMkJNXSA9ICJGVDIzMkJNIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggNzczZWEzZS4uMDBkNDVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTM0Myw2ICszNDMsMTMgQEAKICNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzdfUElECTB4RDM4RgogCiAvKgorICogVGVyYXRyb25payBwcm9kdWN0IGlkcy4KKyAqIFN1Ym1pdHRlZCBieSBPLiBX9mxmZWxzY2huZWlkZXIuCisgKi8KKyNkZWZpbmUgRlRESV9URVJBVFJPTklLX1ZDUF9QSUQJIDB4RUM4OAkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBWQ1AgZHJpdmVyIG9uIHdpbmRvd3MpICovCisjZGVmaW5lIEZURElfVEVSQVRST05JS19EMlhYX1BJRCAweEVDODkJLyogVGVyYXRyb25payBkZXZpY2UgKHByZWZlcnJpbmcgRDJYWCBkcml2ZXIgb24gd2luZG93cykgKi8KKworLyoKICAqIEV2b2x1dGlvbiBSb2JvdGljcyBwcm9kdWN0cyAoaHR0cDovL3d3dy5ldm9sdXRpb24uY29tLykuCiAgKiBTdWJtaXR0ZWQgYnkgU2hhd24gTS4gTGF2ZWxsZS4KICAqLwpAQCAtMzUyLDYgKzM1OSwxMiBAQAogLyogUHlyYW1pZCBDb21wdXRlciBHbWJIICovCiAjZGVmaW5lIEZURElfUFlSQU1JRF9QSUQJMHhFNkM4CS8qIFB5cmFtaWQgQXBwbGlhbmNlIERpc3BsYXkgKi8KIAorLyoKKyAqIFBvc2lmbGV4IGluYyByZXRhaWwgZXF1aXBtZW50IChodHRwOi8vd3d3LnBvc2lmbGV4LmNvbS50dykKKyAqLworI2RlZmluZSBQT1NJRkxFWF9WSUQJCTB4MGQzYSAgLyogVmVuZG9yIElEICovCisjZGVmaW5lIFBPU0lGTEVYX1BQNzAwMF9QSUQJMHgwMzAwICAvKiBQUC03MDAwSUkgdGhlcm1hbCBwcmludGVyICovCisKIC8qIENvbW1hbmRzICovCiAjZGVmaW5lIEZURElfU0lPX1JFU0VUIAkJMCAvKiBSZXNldCB0aGUgcG9ydCAqLwogI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwpAQCAtNzE0LDcgKzcyNyw3IEBACiAgKi8KIAogLyogRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUyAqLwotLyogUmV0cmVpdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1vZGVtIHN0YXR1cyByZWdpc3RlciAqLworLyogUmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1vZGVtIHN0YXR1cyByZWdpc3RlciAqLwogCiAjZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFIDB4YzAKICNkZWZpbmUgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDM1ODIwYmQuLjQ1MmVmY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMjIyLDExICsyMjIsMTEgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZ2FybWluX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiZ2FybWluX2dwcyIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCA1M2E0N2MzLi40ZGRhYzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTY4LDExICs2OCwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZ2VuZXJpY19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInVzYnNlcmlhbF9nZW5lcmljIiwKIAkucHJvYmUgPQlnZW5lcmljX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CWdlbmVyaWNfc2VyaWFsX2lkcywKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwppbmRleCA4ZWFkZmI3Li5lOTcxOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKQEAgLTM3LDExICszNywxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGhwNDlncF9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImhwNFgiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgaHA0OWdwX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggZGM0YzQ5OC4uZmFlZGJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTE4NCw3ICsxODQsNyBAQAogLy8gVGhlc2UgYXNzdW1lIGEgMy42ODY0TUh6IGNyeXN0YWwsIHRoZSBzdGFuZGFyZCAvMTYsIGFuZAogLy8gTUNSLjcgPSAwLgogLy8KLXN0YXRpYyBzdHJ1Y3QgZGl2aXNvcl90YWJsZV9lbnRyeSBkaXZpc29yX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRpdmlzb3JfdGFibGVfZW50cnkgZGl2aXNvcl90YWJsZVtdID0gewogCXsgICA1MCwJCTQ2MDh9LCAgCiAJeyAgIDc1LAkJMzA3Mn0sICAKIAl7ICAgMTEwLAkyMDk1fSwJCS8qIDIwOTQuNTQ1NDU1ID0+IDIzMDQ1MCAgID0+IC4wMjE3ICUgb3ZlciAqLwpAQCAtMjQyLDExICsyNDIsMTEgQEAKICNpbmNsdWRlICJpb190YWJsZXMuaCIJLyogYWxsIG9mIHRoZSBkZXZpY2VzIHRoYXQgdGhpcyBkcml2ZXIgc3VwcG9ydHMgKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlvX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkiaW9fZWRnZXBvcnQiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFsbCBvZiBvdXIgbG9jYWwgZnVuY3Rpb25zICovCkBAIC0yMzUzLDcgKzIzNTMsNyBAQAogCiAJZGJnKCIlcyAtICVkIiwgX19GVU5DVElPTl9fLCBiYXVkcmF0ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0VOVFJJRVMoZGl2aXNvcl90YWJsZSk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpdmlzb3JfdGFibGUpOyBpKyspIHsKIAkJaWYgKCBkaXZpc29yX3RhYmxlW2ldLkJhdWRSYXRlID09IGJhdWRyYXRlICkgewogCQkJKmRpdmlzb3IgPSBkaXZpc29yX3RhYmxlW2ldLkRpdmlzb3I7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmgKaW5kZXggNTExMmQ3YS4uMTIzZmE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmgKQEAgLTMxLDkgKzMxLDYgQEAKICNpZm5kZWYgSElHSDgKIAkjZGVmaW5lIEhJR0g4KGEpCSgodW5zaWduZWQgY2hhcikoKGEgJiAweGZmMDApID4+IDgpKQogI2VuZGlmCi0jaWZuZGVmIE5VTV9FTlRSSUVTCi0JI2RlZmluZSBOVU1fRU5UUklFUyh4KQkoc2l6ZW9mKHgpL3NpemVvZigoeClbMF0pKQotI2VuZGlmCiAKICNpZm5kZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfYm9vdDIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290Mi5oCmluZGV4IGM3YzNhM2MuLmUzNDYzZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290Mi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290Mi5oCkBAIC01MzcsNyArNTM3LDcgQEAKIAogfTsKIAotc3RhdGljIHN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyBJTUFHRV9WRVJTSU9OX05BTUUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIElNQUdFX1ZFUlNJT05fTkFNRSA9IHsKIAkyLCAwLCAzIH07CQkvLyBNYWpvciwgTWlub3IsIEJ1aWxkCiAKICN1bmRlZiBJTUFHRV9WRVJTSU9OX05BTUUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKaW5kZXggODMyYjZkNi4uMmVkZjljYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC0yMTYsMTEgKzIxNiwxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpb19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImlvX3RpIiwKIAkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwogCiAKQEAgLTI4NDMsNyArMjg0Myw3IEBACiAgKiBGcmVlIHRoZSBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KICAqLwogCi12b2lkIGVkZ2VfYnVmX2ZyZWUoc3RydWN0IGVkZ2VfYnVmICplYikKK3N0YXRpYyB2b2lkIGVkZ2VfYnVmX2ZyZWUoc3RydWN0IGVkZ2VfYnVmICplYikKIHsKIAlpZiAoZWIpIHsKIAkJa2ZyZWUoZWItPmJ1Zl9idWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKaW5kZXggZDVkMDY2NC4uMDZkMDdjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCkBAIC01NDIsMTEgKzU0MiwxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpcGFxX2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwYXFfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJpcGFxIiwKIAkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CWlwYXFfaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCmluZGV4IDc3NDRiODEuLjJkZDE5MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKQEAgLTE1MiwxMSArMTUyLDExIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX2lwd19pZHMpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2lwd19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImlwd3R0eSIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQl1c2JfaXB3X2lkcywKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogc3RhdGljIGludCBkZWJ1ZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwppbmRleCAxOWYzMjllLi5hNTkwMTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCkBAIC0xMjUsMTEgKzEyNSwxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpcl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImlyLXVzYiIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAppbmRleCA1Y2ZjMTNiLi43NDcyZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTUyMCwxMSArNTIwLDExIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwga2V5c3Bhbl9pZHNfY29tYmluZWQpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2V5c3Bhbl9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJImtleXNwYW4iLCAgICAgICAgICAgICAgICAKIAkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CWtleXNwYW5faWRzX2NvbWJpbmVkLAorCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwogCiAvKiB1c2JfZGV2aWNlX2lkIHRhYmxlIGZvciB0aGUgcHJlLWZpcm13YXJlIGRvd25sb2FkIGtleXNwYW4gZGV2aWNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCBjZDRmNDhiLi5iMDQ0MWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtMTUwLDExICsxNTAsMTEgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2V5c3Bhbl9wZGFfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJrZXlzcGFuX3BkYSIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZCBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IGE4OTUxYzAuLjRlMmY3ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtMTE2LDExICsxMTYsMTEgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2w1a3VzYjEwNWRfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJrbDVrdXNiMTA1ZCIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBrbDVrdXNiMTA1ZF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggOTQ1NmRkOS4uZDljMjFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtOTcsMTEgKzk3LDExIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGtvYmlsX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkia29iaWwiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCBjYTVkYmFkLi5iNmQ2Y2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtMTI1LDExICsxMjUsMTEgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWN0X3UyMzJfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJtY3RfdTIzMiIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBtY3RfdTIzMl9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwppbmRleCAzY2FmOTcwLi43NjJkOGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKQEAgLTgwLDExICs4MCwxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvbW5pbmV0X2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkib21uaW5ldCIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNzcxNjAwMC4uM2ZkMjQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtOTUsMTEgKzk1LDExIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgb3B0aW9uX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvcHRpb25fZHJpdmVyID0gewotCS5vd25lciAgICAgID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgICAgICAgPSAib3B0aW9uIiwKIAkucHJvYmUgICAgICA9IHVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlICAgPSBvcHRpb25faWRzLAorCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwogCiAvKiBUaGUgY2FyZCBoYXMgdGhyZWUgc2VwYXJhdGUgaW50ZXJmYWNlcywgd2ljaCB0aGUgc2VyaWFsIGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDQxYTQ1YTUuLmYwMzcyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTgyLDExICs4MiwxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwbDIzMDNfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJwbDIzMDMiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKICNkZWZpbmUgU0VUX0xJTkVfUkVRVUVTVF9UWVBFCQkweDIxCkBAIC04MTAsNyArODEwLDcgQEAKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBzdGF0dXNfaWR4ID0gVUFSVF9TVEFURTsKLQl1OCBsZW5ndGggPSBVQVJUX1NUQVRFOworCXU4IGxlbmd0aCA9IFVBUlRfU1RBVEUgKyAxOwogCiAJaWYgKChsZTE2X3RvX2NwdShwb3J0LT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gU0lFTUVOU19WRU5ET1JfSUQpICYmCiAJICAgIChsZTE2X3RvX2NwdShwb3J0LT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IFNJRU1FTlNfUFJPRFVDVF9JRF9YNjUgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKaW5kZXggYzIyYmRjMC4uZjAyMTVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKQEAgLTE2MCwxNCArMTYwLDE0IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNhZmVfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJzYWZlX3NlcmlhbCIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAotc3RhdGljIF9fdTE2IGNyYzEwX3RhYmxlWzI1Nl0gPSB7CitzdGF0aWMgY29uc3QgX191MTYgY3JjMTBfdGFibGVbMjU2XSA9IHsKIAkweDAwMCwgMHgyMzMsIDB4MjU1LCAweDA2NiwgMHgyOTksIDB4MGFhLCAweDBjYywgMHgyZmYsIDB4MzAxLCAweDEzMiwgMHgxNTQsIDB4MzY3LCAweDE5OCwgMHgzYWIsIDB4M2NkLCAweDFmZSwKIAkweDAzMSwgMHgyMDIsIDB4MjY0LCAweDA1NywgMHgyYTgsIDB4MDliLCAweDBmZCwgMHgyY2UsIDB4MzMwLCAweDEwMywgMHgxNjUsIDB4MzU2LCAweDFhOSwgMHgzOWEsIDB4M2ZjLCAweDFjZiwKIAkweDA2MiwgMHgyNTEsIDB4MjM3LCAweDAwNCwgMHgyZmIsIDB4MGM4LCAweDBhZSwgMHgyOWQsIDB4MzYzLCAweDE1MCwgMHgxMzYsIDB4MzA1LCAweDFmYSwgMHgzYzksIDB4M2FmLCAweDE5YywKQEAgLTQyNSw3ICs0MjUsNyBAQAogCWlmICh2ZW5kb3IgfHwgcHJvZHVjdCkgewogCQlpbmZvICgidmVuZG9yOiAleCBwcm9kdWN0OiAleFxuIiwgdmVuZG9yLCBwcm9kdWN0KTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZiAoaWRfdGFibGUpIC8gc2l6ZW9mIChzdHJ1Y3QgdXNiX2RldmljZV9pZCkpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRfdGFibGUpOyBpKyspIHsKIAkJCWlmICghaWRfdGFibGVbaV0uaWRWZW5kb3IgJiYgIWlkX3RhYmxlW2ldLmlkUHJvZHVjdCkgewogCQkJCWlkX3RhYmxlW2ldLmlkVmVuZG9yID0gdmVuZG9yOwogCQkJCWlkX3RhYmxlW2ldLmlkUHJvZHVjdCA9IHByb2R1Y3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCAyMDVkYmY3Li5hYmI4MzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTI0OCwxMSArMjQ4LDExIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdGlfdXNiX2RyaXZlciA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSAidGlfdXNiXzM0MTBfNTA1MiIsCiAJLnByb2JlCQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0CQk9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUJCT0gdGlfaWRfdGFibGVfY29tYmluZWQsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgdGlfMXBvcnRfZGV2aWNlID0gewpAQCAtMzUxLDE3ICszNTEsMTQgQEAKIAlpbnQgaSxqOwogCWludCByZXQ7CiAKLQogCS8qIGluc2VydCBleHRyYSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWRzICovCi0JaiA9IHNpemVvZih0aV9pZF90YWJsZV8zNDEwKS9zaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpCi0JCS0gVElfRVhUUkFfVklEX1BJRF9DT1VOVCAtIDE7CisJaiA9IEFSUkFZX1NJWkUodGlfaWRfdGFibGVfMzQxMCkgLSBUSV9FWFRSQV9WSURfUElEX0NPVU5UIC0gMTsKIAlmb3IgKGk9MDsgaTxtaW4odmVuZG9yXzM0MTBfY291bnQscHJvZHVjdF8zNDEwX2NvdW50KTsgaSsrLGorKykgewogCQl0aV9pZF90YWJsZV8zNDEwW2pdLmlkVmVuZG9yID0gdmVuZG9yXzM0MTBbaV07CiAJCXRpX2lkX3RhYmxlXzM0MTBbal0uaWRQcm9kdWN0ID0gcHJvZHVjdF8zNDEwW2ldOwogCQl0aV9pZF90YWJsZV8zNDEwW2pdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7CiAJfQotCWogPSBzaXplb2YodGlfaWRfdGFibGVfNTA1Mikvc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKQotCQktIFRJX0VYVFJBX1ZJRF9QSURfQ09VTlQgLSAxOworCWogPSBBUlJBWV9TSVpFKHRpX2lkX3RhYmxlXzUwNTIpIC0gVElfRVhUUkFfVklEX1BJRF9DT1VOVCAtIDE7CiAJZm9yIChpPTA7IGk8bWluKHZlbmRvcl81MDUyX2NvdW50LHByb2R1Y3RfNTA1Ml9jb3VudCk7IGkrKyxqKyspIHsKIAkJdGlfaWRfdGFibGVfNTA1MltqXS5pZFZlbmRvciA9IHZlbmRvcl81MDUyW2ldOwogCQl0aV9pZF90YWJsZV81MDUyW2pdLmlkUHJvZHVjdCA9IHByb2R1Y3RfNTA1MltpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDBjNDg4MWQuLjhiYzgzMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKICNpbmNsdWRlICJwbDIzMDMuaCIKQEAgLTQyLDEwICs0MywxMCBAQAogCiAvKiBEcml2ZXIgc3RydWN0dXJlIHdlIHJlZ2lzdGVyIHdpdGggdGhlIFVTQiBjb3JlICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3NlcmlhbF9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInVzYnNlcmlhbCIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkubm9fZHluYW1pY19pZCA9IAkxLAogfTsKIAogLyogVGhlcmUgaXMgbm8gTU9EVUxFX0RFVklDRV9UQUJMRSBmb3IgdXNic2VyaWFsLmMuICBJbnN0ZWFkCkBAIC0xODgsNiArMTg5LDExIEBACiAKIAlwb3J0TnVtYmVyID0gdHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CiAJcG9ydCA9IHNlcmlhbC0+cG9ydFtwb3J0TnVtYmVyXTsKKwlpZiAoIXBvcnQpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmcG9ydC0+c2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAkgCiAJKytwb3J0LT5vcGVuX2NvdW50OwogCkBAIC0yMTMsNiArMjE5LDcgQEAKIAkJCWdvdG8gYmFpbG91dF9tb2R1bGVfcHV0OwogCX0KIAorCXVwKCZwb3J0LT5zZW0pOwogCXJldHVybiAwOwogCiBiYWlsb3V0X21vZHVsZV9wdXQ6CkBAIC0yMjAsNiArMjI3LDcgQEAKIGJhaWxvdXRfa3JlZl9wdXQ6CiAJa3JlZl9wdXQoJnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOwogCXBvcnQtPm9wZW5fY291bnQgPSAwOworCXVwKCZwb3J0LT5zZW0pOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIzMiw4ICsyNDAsMTAgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCisJZG93bigmcG9ydC0+c2VtKTsKKwogCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDApCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAktLXBvcnQtPm9wZW5fY291bnQ7CiAJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkgewpAQCAtMjUxLDYgKzI2MSw5IEBACiAJfQogCiAJa3JlZl9wdXQoJnBvcnQtPnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOworCitvdXQ6CisJdXAoJnBvcnQtPnNlbSk7CiB9CiAKIHN0YXRpYyBpbnQgc2VyaWFsX3dyaXRlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCkBAIC0yNTgsNiArMjcxLDkgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAorCWlmICghcG9ydCkKKwkJZ290byBleGl0OworCiAJZGJnKCIlcyAtIHBvcnQgJWQsICVkIGJ5dGUocykiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOwogCiAJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CkBAIC0yNzcsNiArMjkzLDkgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAorCWlmICghcG9ydCkKKwkJZ290byBleGl0OworCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKIAlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKQEAgLTI5Niw2ICszMTUsOSBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCisJaWYgKCFwb3J0KQorCQlnb3RvIGV4aXQ7CisKIAlkYmcoIiVzID0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIAogCWlmICghcG9ydC0+b3Blbl9jb3VudCkgewpAQCAtMzE0LDYgKzMzNiw5IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKKwlpZiAoIXBvcnQpCisJCXJldHVybjsKKwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCiAJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CkBAIC0zMzAsNiArMzU1LDkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAorCWlmICghcG9ydCkKKwkJcmV0dXJuOworCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKIAlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKQEAgLTM0Nyw2ICszNzUsOSBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXR2YWwgPSAtRU5PREVWOwogCisJaWYgKCFwb3J0KQorCQlnb3RvIGV4aXQ7CisKIAlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOwogCiAJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CkBAIC0zNjgsNiArMzk5LDkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAorCWlmICghcG9ydCkKKwkJcmV0dXJuOworCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKIAlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKQEAgLTM4NCw2ICs0MTgsOSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCisJaWYgKCFwb3J0KQorCQlyZXR1cm47CisKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIAogCWlmICghcG9ydC0+b3Blbl9jb3VudCkgewpAQCAtNDQ1LDYgKzQ4Miw5IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKKwlpZiAoIXBvcnQpCisJCWdvdG8gZXhpdDsKKwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCiAJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CkBAIC00NjQsNiArNTA0LDkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAorCWlmICghcG9ydCkKKwkJZ290byBleGl0OworCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKIAlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKQEAgLTc0Miw2ICs3ODUsNyBAQAogCQlwb3J0LT5udW1iZXIgPSBpICsgc2VyaWFsLT5taW5vcjsKIAkJcG9ydC0+c2VyaWFsID0gc2VyaWFsOwogCQlzcGluX2xvY2tfaW5pdCgmcG9ydC0+bG9jayk7CisJCXNlbWFfaW5pdCgmcG9ydC0+c2VtLCAxKTsKIAkJSU5JVF9XT1JLKCZwb3J0LT53b3JrLCB1c2Jfc2VyaWFsX3BvcnRfc29mdGludCwgcG9ydCk7CiAJCXNlcmlhbC0+cG9ydFtpXSA9IHBvcnQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKaW5kZXggMjM4YTVhOC4uZDdkMjdjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjZGVmaW5lIFNFUklBTF9UVFlfTUFKT1IJMTg4CS8qIE5pY2UgbGVnYWwgbnVtYmVyIG5vdyAqLwogI2RlZmluZSBTRVJJQUxfVFRZX01JTk9SUwkyNTUJLyogbG9hZHMgb2YgZGV2aWNlcyA6KSAqLwpAQCAtMzAsNiArMzEsOCBAQAogICogQHNlcmlhbDogcG9pbnRlciBiYWNrIHRvIHRoZSBzdHJ1Y3QgdXNiX3NlcmlhbCBvd25lciBvZiB0aGlzIHBvcnQuCiAgKiBAdHR5OiBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHR0eSBmb3IgdGhpcyBwb3J0LgogICogQGxvY2s6IHNwaW5sb2NrIHRvIGdyYWIgd2hlbiB1cGRhdGluZyBwb3J0aW9ucyBvZiB0aGlzIHN0cnVjdHVyZS4KKyAqIEBzZW06IHNlbWFwaG9yZSB1c2VkIHRvIHN5bmNocm9uaXplIHNlcmlhbF9vcGVuKCkgYW5kIHNlcmlhbF9jbG9zZSgpCisgKglhY2Nlc3MgZm9yIHRoaXMgcG9ydC4KICAqIEBudW1iZXI6IHRoZSBudW1iZXIgb2YgdGhlIHBvcnQgKHRoZSBtaW5vciBudW1iZXIpLgogICogQGludGVycnVwdF9pbl9idWZmZXI6IHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBpbiBidWZmZXIgZm9yIHRoaXMgcG9ydC4KICAqIEBpbnRlcnJ1cHRfaW5fdXJiOiBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgaW4gc3RydWN0IHVyYiBmb3IgdGhpcyBwb3J0LgpAQCAtNjAsNiArNjMsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsICoJc2VyaWFsOwogCXN0cnVjdCB0dHlfc3RydWN0ICoJdHR5OwogCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgICAgc2VtOwogCXVuc2lnbmVkIGNoYXIJCW51bWJlcjsKIAogCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggYTQ3M2MxYy4uNDliMWZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTE3MywxMSArMTczLDExIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpc29yX2RyaXZlciA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubmFtZSA9CQkidmlzb3IiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIC8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgSGFuZHNwcmluZyBWaXNvciwgYW5kIFBhbG0gNC4wIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwppbmRleCAxOGMzMTgzLi5hN2MzYzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC0xMjcsMTEgKzEyNywxMSBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3aGl0ZWhlYXRfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJ3aGl0ZWhlYXQiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBDb25uZWN0IFRlY2ggV2hpdGVIRUFUIHByZXJlbnVtZXJhdGlvbiBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwppbmRleCBjNDFkNjRkLi45MmJlMTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCkBAIC0xMTIsNiArMTEyLDE1IEBACiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90CiAJICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci4KIAorY29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQQorCWJvb2wgIk9seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMAorCSAgYW5kIEZ1amlmaWxtIERQQy1SMSBVU0IgQ2FyZCByZWFkZXIvd3JpdGVyIGRldmljZXMuCisKKwkgIFRoZXNlIGRldmljZXMgYXJlIGJhc2VkIG9uIHRoZSBBbGF1ZGEgY2hpcCBhbmQgc3VwcG9ydCBzdXBwb3J0IGJvdGgKKwkgIFhEIGFuZCBTbWFydE1lZGlhIGNhcmRzLgogCiBjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0gKIAlib29sICJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXMgKEVYUEVSSU1FTlRBTCkiCkBAIC0xMjQsMyArMTMzLDE3IEBACiAJICBoYXJkIGRyaXZlJ3MgYXMgYW4gaW5wdXQgZGV2aWNlLiBBbiBhY3Rpb24gY2FuIGJlIGFzc29jaWF0ZWQgd2l0aAogCSAgdGhpcyBpbnB1dCBpbiBhbnkga2V5YmluZGluZyBzb2Z0d2FyZS4gKGUuZy4gZ25vbWUncyBrZXlib2FyZCBzaG9ydC0KIAkgIGN1dHMpCisKK2NvbmZpZyBVU0JfTElCVVNVQUwKKwlib29sICJUaGUgc2hhcmVkIHRhYmxlIG9mIGNvbW1vbiAob3IgdXN1YWwpIHN0b3JhZ2UgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGEgdGFibGUgb2YgY29tbW9uIChvciB1c3VhbCkgZGV2aWNlcworCSAgZm9yIHVzYi1zdG9yYWdlIGFuZCB1YiBkcml2ZXJzLCBhbmQgYWxsb3dzIHRvIHN3aXRjaCBiaW5kaW5nCisJICBvZiB0aGVzZSBkZXZpY2VzIHdpdGhvdXQgcmVidWlsZGluZyBtb2R1bGVzLgorCisJICBUeXBpY2FsIHN5bnRheCBvZiAvZXRjL21vZHByb2JlLmNvbmYgaXM6CisKKwkJb3B0aW9ucyBsaWJ1c3VhbCBiaWFzPSJ1YiIKKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCmluZGV4IDQ0YWI4ZjkuLjhjYmJhMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQpAQCAtMTgsNyArMTgsMTIgQEAKIHVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IGlzZDIwMC5vCiB1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gZGF0YWZhYi5vCiB1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpCSs9IGp1bXBzaG90Lm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpCSs9IGFsYXVkYS5vCiB1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpCSs9IG9uZXRvdWNoLm8KIAogdXNiLXN0b3JhZ2Utb2JqcyA6PQlzY3NpZ2x1ZS5vIHByb3RvY29sLm8gdHJhbnNwb3J0Lm8gdXNiLm8gXAogCQkJaW5pdGlhbGl6ZXJzLm8gJCh1c2Itc3RvcmFnZS1vYmoteSkKKworaWZuZXEgKCQoQ09ORklHX1VTQl9MSUJVU1VBTCksKQorCW9iai0kKENPTkZJR19VU0IpCSs9IGxpYnVzdWFsLm8KK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDNjYmIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwpAQCAtMCwwICsxLDExMTkgQEAKKy8qCisgKiBEcml2ZXIgZm9yIEFsYXVkYS1iYXNlZCBjYXJkIHJlYWRlcnMKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDUgRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4KKyAqCisgKiBUaGUgJ0FsYXVkYScgaXMgYSBjaGlwIG1hbnVmYWN0dXJlcmVkIGJ5IFJBVE9DIGZvciBPRU0gdXNlLgorICoKKyAqIEFsYXVkYSBpbXBsZW1lbnRzIGEgdmVuZG9yLXNwZWNpZmljIGNvbW1hbmQgc2V0IHRvIGFjY2VzcyB0d28gbWVkaWEgcmVhZGVyCisgKiBwb3J0cyAoWEQsIFNtYXJ0TWVkaWEpLiBUaGlzIGRyaXZlciBjb252ZXJ0cyBTQ1NJIGNvbW1hbmRzIHRvIHRoZSBjb21tYW5kcworICogd2hpY2ggYXJlIGFjY2VwdGVkIGJ5IHRoZXNlIGRldmljZXMuCisgKgorICogVGhlIGRyaXZlciB3YXMgZGV2ZWxvcGVkIHRocm91Z2ggcmV2ZXJzZS1lbmdpbmVlcmluZywgd2l0aCB0aGUgaGVscCBvZiB0aGUKKyAqIHNkZHIwOSBkcml2ZXIgd2hpY2ggaGFzIG1hbnkgc2ltaWxhcml0aWVzLCBhbmQgd2l0aCBzb21lIGhlbHAgZnJvbSB0aGUKKyAqICh2ZXJ5IG9sZCkgdmVuZG9yLXN1cHBsaWVkIEdQTCBzbWEwMyBkcml2ZXIuCisgKgorICogRm9yIHByb3RvY29sIGluZm8sIHNlZSBodHRwOi8vYWxhdWRhLnNvdXJjZWZvcmdlLm5ldAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJhbGF1ZGEuaCIKKworI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCisjZGVmaW5lIExTQl9vZihzKSAoKHMpJjB4RkYpCisjZGVmaW5lIE1TQl9vZihzKSAoKHMpPj44KQorCisjZGVmaW5lIE1FRElBX1BPUlQodXMpIHVzLT5zcmItPmRldmljZS0+bHVuCisjZGVmaW5lIE1FRElBX0lORk8odXMpICgoc3RydWN0IGFsYXVkYV9pbmZvICopdXMtPmV4dHJhKS0+cG9ydFtNRURJQV9QT1JUKHVzKV0KKworI2RlZmluZSBQQkFfTE8ocGJhKSAoKHBiYSAmIDB4RikgPDwgNSkKKyNkZWZpbmUgUEJBX0hJKHBiYSkgKHBiYSA+PiAzKQorI2RlZmluZSBQQkFfWk9ORShwYmEpIChwYmEgPj4gMTEpCisKKy8qCisgKiBNZWRpYSBoYW5kbGluZworICovCisKK3N0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyIGlkOwkJLyogaWQgYnl0ZSAqLworCXVuc2lnbmVkIGNoYXIgY2hpcHNoaWZ0OwkvKiAxPDxjcyBieXRlcyB0b3RhbCBjYXBhY2l0eSAqLworCXVuc2lnbmVkIGNoYXIgcGFnZXNoaWZ0OwkvKiAxPDxwcyBieXRlcyBpbiBhIHBhZ2UgKi8KKwl1bnNpZ25lZCBjaGFyIGJsb2Nrc2hpZnQ7CS8qIDE8PGJzIHBhZ2VzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGNoYXIgem9uZXNoaWZ0OwkvKiAxPDx6cyBibG9ja3MgcGVyIHpvbmUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgYWxhdWRhX2NhcmRfaW5mbyBhbGF1ZGFfY2FyZF9pZHNbXSA9IHsKKwkvKiBOQU5EIGZsYXNoICovCisJeyAweDZlLCAyMCwgOCwgNCwgOH0sCS8qIDEgTUIgKi8KKwl7IDB4ZTgsIDIwLCA4LCA0LCA4fSwJLyogMSBNQiAqLworCXsgMHhlYywgMjAsIDgsIDQsIDh9LAkvKiAxIE1CICovCisJeyAweDY0LCAyMSwgOCwgNCwgOX0sIAkvKiAyIE1CICovCisJeyAweGVhLCAyMSwgOCwgNCwgOX0sCS8qIDIgTUIgKi8KKwl7IDB4NmIsIDIyLCA5LCA0LCA5fSwJLyogNCBNQiAqLworCXsgMHhlMywgMjIsIDksIDQsIDl9LAkvKiA0IE1CICovCisJeyAweGU1LCAyMiwgOSwgNCwgOX0sCS8qIDQgTUIgKi8KKwl7IDB4ZTYsIDIzLCA5LCA0LCAxMH0sCS8qIDggTUIgKi8KKwl7IDB4NzMsIDI0LCA5LCA1LCAxMH0sCS8qIDE2IE1CICovCisJeyAweDc1LCAyNSwgOSwgNSwgMTB9LAkvKiAzMiBNQiAqLworCXsgMHg3NiwgMjYsIDksIDUsIDEwfSwJLyogNjQgTUIgKi8KKwl7IDB4NzksIDI3LCA5LCA1LCAxMH0sCS8qIDEyOCBNQiAqLworCXsgMHg3MSwgMjgsIDksIDUsIDEwfSwJLyogMjU2IE1CICovCisKKwkvKiBNQVNLIFJPTSAqLworCXsgMHg1ZCwgMjEsIDksIDQsIDh9LAkvKiAyIE1CICovCisJeyAweGQ1LCAyMiwgOSwgNCwgOX0sCS8qIDQgTUIgKi8KKwl7IDB4ZDYsIDIzLCA5LCA0LCAxMH0sCS8qIDggTUIgKi8KKwl7IDB4NTcsIDI0LCA5LCA0LCAxMX0sCS8qIDE2IE1CICovCisJeyAweDU4LCAyNSwgOSwgNCwgMTJ9LAkvKiAzMiBNQiAqLworCXsgMCx9Cit9OworCitzdGF0aWMgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gKmFsYXVkYV9jYXJkX2ZpbmRfaWQodW5zaWduZWQgY2hhciBpZCkgeworCWludCBpOworCisJZm9yIChpID0gMDsgYWxhdWRhX2NhcmRfaWRzW2ldLmlkICE9IDA7IGkrKykKKwkJaWYgKGFsYXVkYV9jYXJkX2lkc1tpXS5pZCA9PSBpZCkKKwkJCXJldHVybiAmKGFsYXVkYV9jYXJkX2lkc1tpXSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFQ0MgY29tcHV0YXRpb24uCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGFyaXR5WzI1Nl07CitzdGF0aWMgdW5zaWduZWQgY2hhciBlY2MyWzI1Nl07CisKK3N0YXRpYyB2b2lkIG5hbmRfaW5pdF9lY2Modm9pZCkgeworCWludCBpLCBqLCBhOworCisJcGFyaXR5WzBdID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgMjU2OyBpKyspCisJCXBhcml0eVtpXSA9IChwYXJpdHlbaSYoaS0xKV0gXiAxKTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlhID0gMDsKKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJaWYgKGkgJiAoMTw8aikpIHsKKwkJCQlpZiAoKGogJiAxKSA9PSAwKQorCQkJCQlhIF49IDB4MDQ7CisJCQkJaWYgKChqICYgMikgPT0gMCkKKwkJCQkJYSBePSAweDEwOworCQkJCWlmICgoaiAmIDQpID09IDApCisJCQkJCWEgXj0gMHg0MDsKKwkJCX0KKwkJfQorCQllY2MyW2ldID0gfihhIF4gKGE8PDEpIF4gKHBhcml0eVtpXSA/IDB4YTggOiAwKSk7CisJfQorfQorCisvKiBjb21wdXRlIDMtYnl0ZSBlY2Mgb24gMjU2IGJ5dGVzICovCitzdGF0aWMgdm9pZCBuYW5kX2NvbXB1dGVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYykgeworCWludCBpLCBqLCBhOworCXVuc2lnbmVkIGNoYXIgcGFyLCBiaXQsIGJpdHNbOF07CisKKwlwYXIgPSAwOworCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCisJCWJpdHNbal0gPSAwOworCisJLyogY29sbGVjdCAxNiBjaGVja3N1bSBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXBhciBePSBkYXRhW2ldOworCQliaXQgPSBwYXJpdHlbZGF0YVtpXV07CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCisJCQlpZiAoKGkgJiAoMTw8aikpID09IDApCisJCQkJYml0c1tqXSBePSBiaXQ7CisJfQorCisJLyogcHV0IDQrNCs0ID0gMTIgYml0cyBpbiB0aGUgZWNjICovCisJYSA9IChiaXRzWzNdIDw8IDYpICsgKGJpdHNbMl0gPDwgNCkgKyAoYml0c1sxXSA8PCAyKSArIGJpdHNbMF07CisJZWNjWzBdID0gfihhIF4gKGE8PDEpIF4gKHBhcml0eVtwYXJdID8gMHhhYSA6IDApKTsKKworCWEgPSAoYml0c1s3XSA8PCA2KSArIChiaXRzWzZdIDw8IDQpICsgKGJpdHNbNV0gPDwgMikgKyBiaXRzWzRdOworCWVjY1sxXSA9IH4oYSBeIChhPDwxKSBeIChwYXJpdHlbcGFyXSA/IDB4YWEgOiAwKSk7CisKKwllY2NbMl0gPSBlY2MyW3Bhcl07Cit9CisKK3N0YXRpYyBpbnQgbmFuZF9jb21wYXJlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpIHsKKwlyZXR1cm4gKGRhdGFbMF0gPT0gZWNjWzBdICYmIGRhdGFbMV0gPT0gZWNjWzFdICYmIGRhdGFbMl0gPT0gZWNjWzJdKTsKK30KKworc3RhdGljIHZvaWQgbmFuZF9zdG9yZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKSB7CisJbWVtY3B5KGRhdGEsIGVjYywgMyk7Cit9CisKKy8qCisgKiBBbGF1ZGEgZHJpdmVyCisgKi8KKworLyoKKyAqIEZvcmdldCBvdXIgUEJBIDwtLS0+IExCQSBtYXBwaW5ncyBmb3IgYSBwYXJ0aWN1bGFyIHBvcnQKKyAqLworc3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKQoreworCXVuc2lnbmVkIGludCBzaGlmdCA9IG1lZGlhX2luZm8tPnpvbmVzaGlmdAorCQkrIG1lZGlhX2luZm8tPmJsb2Nrc2hpZnQgKyBtZWRpYV9pbmZvLT5wYWdlc2hpZnQ7CisJdW5zaWduZWQgaW50IG51bV96b25lcyA9IG1lZGlhX2luZm8tPmNhcGFjaXR5ID4+IHNoaWZ0OworCXVuc2lnbmVkIGludCBpOworCisJaWYgKG1lZGlhX2luZm8tPmxiYV90b19wYmEgIT0gTlVMTCkKKwkJZm9yIChpID0gMDsgaSA8IG51bV96b25lczsgaSsrKSB7CisJCQlrZnJlZShtZWRpYV9pbmZvLT5sYmFfdG9fcGJhW2ldKTsKKwkJCW1lZGlhX2luZm8tPmxiYV90b19wYmFbaV0gPSBOVUxMOworCQl9CisKKwlpZiAobWVkaWFfaW5mby0+cGJhX3RvX2xiYSAhPSBOVUxMKQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3pvbmVzOyBpKyspIHsKKwkJCWtmcmVlKG1lZGlhX2luZm8tPnBiYV90b19sYmFbaV0pOworCQkJbWVkaWFfaW5mby0+cGJhX3RvX2xiYVtpXSA9IE5VTEw7CisJCX0KK30KKworLyoKKyAqIFJldHVybnMgMiBieXRlcyBvZiBzdGF0dXMgZGF0YQorICogVGhlIGZpcnN0IGJ5dGUgZGVzY3JpYmVzIG1lZGlhIHN0YXR1cywgYW5kIHNlY29uZCBieXRlIGRlc2NyaWJlcyBkb29yIHN0YXR1cworICovCitzdGF0aWMgaW50IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBjb21tYW5kOworCisJaWYgKE1FRElBX1BPUlQodXMpID09IEFMQVVEQV9QT1JUX1hEKQorCQljb21tYW5kID0gQUxBVURBX0dFVF9YRF9NRURJQV9TVEFUVVM7CisJZWxzZQorCQljb21tYW5kID0gQUxBVURBX0dFVF9TTV9NRURJQV9TVEFUVVM7CisKKwlyYyA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJY29tbWFuZCwgMHhjMCwgMCwgMSwgZGF0YSwgMik7CisKKwlVU19ERUJVR1AoImFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzOiBNZWRpYSBzdGF0dXMgJTAyWCAlMDJYXG4iLAorCQlkYXRhWzBdLCBkYXRhWzFdKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENsZWFycyB0aGUgIm1lZGlhIHdhcyBjaGFuZ2VkIiBiaXQgc28gdGhhdCB3ZSBrbm93IHdoZW4gaXQgY2hhbmdlcyBhZ2FpbgorICogaW4gdGhlIGZ1dHVyZS4KKyAqLworc3RhdGljIGludCBhbGF1ZGFfYWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CisKKwlpZiAoTUVESUFfUE9SVCh1cykgPT0gQUxBVURBX1BPUlRfWEQpCisJCWNvbW1hbmQgPSBBTEFVREFfQUNLX1hEX01FRElBX0NIQU5HRTsKKwllbHNlCisJCWNvbW1hbmQgPSBBTEFVREFfQUNLX1NNX01FRElBX0NIQU5HRTsKKworCXJldHVybiB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCWNvbW1hbmQsIDB4NDAsIDAsIDEsIE5VTEwsIDApOworfQorCisvKgorICogUmV0cmlldmVzIGEgNC1ieXRlIG1lZGlhIHNpZ25hdHVyZSwgd2hpY2ggaW5kaWNhdGVzIG1hbnVmYWN0dXJlciwgY2FwYWNpdHksCisgKiBhbmQgc29tZSBvdGhlciBkZXRhaWxzLgorICovCitzdGF0aWMgaW50IGFsYXVkYV9nZXRfbWVkaWFfc2lnbmF0dXJlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CisKKwlpZiAoTUVESUFfUE9SVCh1cykgPT0gQUxBVURBX1BPUlRfWEQpCisJCWNvbW1hbmQgPSBBTEFVREFfR0VUX1hEX01FRElBX1NJRzsKKwllbHNlCisJCWNvbW1hbmQgPSBBTEFVREFfR0VUX1NNX01FRElBX1NJRzsKKworCXJldHVybiB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+cmVjdl9jdHJsX3BpcGUsCisJCWNvbW1hbmQsIDB4YzAsIDAsIDAsIGRhdGEsIDQpOworfQorCisvKgorICogUmVzZXRzIHRoZSBtZWRpYSBzdGF0dXMgKGJ1dCBub3QgdGhlIHdob2xlIGRldmljZT8pCisgKi8KK3N0YXRpYyBpbnQgYWxhdWRhX3Jlc2V0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCisJbWVtc2V0KGNvbW1hbmQsIDAsIDkpOworCWNvbW1hbmRbMF0gPSBBTEFVREFfQlVMS19DTUQ7CisJY29tbWFuZFsxXSA9IEFMQVVEQV9CVUxLX1JFU0VUX01FRElBOworCWNvbW1hbmRbOF0gPSBNRURJQV9QT1JUKHVzKTsKKworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQljb21tYW5kLCA5LCBOVUxMKTsKK30KKworLyoKKyAqIEV4YW1pbmVzIHRoZSBtZWRpYSBhbmQgZGVkdWNlcyBjYXBhY2l0eSwgZXRjLgorICovCitzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOworCWludCByZWFkeSA9IDA7CisJc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gKm1lZGlhX2luZm87CisJdW5zaWduZWQgaW50IG51bV96b25lczsKKworCXdoaWxlIChyZWFkeSA9PSAwKSB7CisJCW1zbGVlcCgyMCk7CisKKwkJaWYgKGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHVzLCBkYXRhKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmIChkYXRhWzBdICYgMHgxMCkKKwkJCXJlYWR5ID0gMTsKKwl9CisKKwlVU19ERUJVR1AoImFsYXVkYV9pbml0X21lZGlhOiBXZSBhcmUgcmVhZHkgZm9yIGFjdGlvbiFcbiIpOworCisJaWYgKGFsYXVkYV9hY2tfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCW1zbGVlcCgxMCk7CisKKwlpZiAoYWxhdWRhX2dldF9tZWRpYV9zdGF0dXModXMsIGRhdGEpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWlmIChkYXRhWzBdICE9IDB4MTQpIHsKKwkJVVNfREVCVUdQKCJhbGF1ZGFfaW5pdF9tZWRpYTogTWVkaWEgbm90IHJlYWR5IGFmdGVyIGFja1xuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJaWYgKGFsYXVkYV9nZXRfbWVkaWFfc2lnbmF0dXJlKHVzLCBkYXRhKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoImFsYXVkYV9pbml0X21lZGlhOiBNZWRpYSBzaWduYXR1cmU6ICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisJCWRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworCW1lZGlhX2luZm8gPSBhbGF1ZGFfY2FyZF9maW5kX2lkKGRhdGFbMV0pOworCWlmIChtZWRpYV9pbmZvID09IE5VTEwpIHsKKwkJcHJpbnRrKCJhbGF1ZGFfaW5pdF9tZWRpYTogVW5yZWNvZ25pc2VkIG1lZGlhIHNpZ25hdHVyZTogIgorCQkJIiUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisJCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSA9IDEgPDwgbWVkaWFfaW5mby0+Y2hpcHNoaWZ0OworCVVTX0RFQlVHUCgiRm91bmQgbWVkaWEgd2l0aCBjYXBhY2l0eTogJWxkTUJcbiIsCisJCU1FRElBX0lORk8odXMpLmNhcGFjaXR5ID4+IDIwKTsKKworCU1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCA9IG1lZGlhX2luZm8tPnBhZ2VzaGlmdDsKKwlNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ID0gbWVkaWFfaW5mby0+YmxvY2tzaGlmdDsKKwlNRURJQV9JTkZPKHVzKS56b25lc2hpZnQgPSBtZWRpYV9pbmZvLT56b25lc2hpZnQ7CisKKwlNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSA9IDEgPDwgbWVkaWFfaW5mby0+cGFnZXNoaWZ0OworCU1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZSA9IDEgPDwgbWVkaWFfaW5mby0+YmxvY2tzaGlmdDsKKwlNRURJQV9JTkZPKHVzKS56b25lc2l6ZSA9IDEgPDwgbWVkaWFfaW5mby0+em9uZXNoaWZ0OworCisJTUVESUFfSU5GTyh1cykudXpvbmVzaXplID0gKCgxIDw8IG1lZGlhX2luZm8tPnpvbmVzaGlmdCkgLyAxMjgpICogMTI1OworCU1FRElBX0lORk8odXMpLmJsb2NrbWFzayA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZSAtIDE7CisKKwludW1fem9uZXMgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSA+PiAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0CisJCSsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCArIE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCk7CisJTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTsKKwlNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pOworCisJaWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogRXhhbWluZXMgdGhlIG1lZGlhIHN0YXR1cyBhbmQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgd2hlbiB0aGUgbWVkaWEgaGFzIGdvbmUsCisgKiBhcHBlYXJlZCwgb3IgY2hhbmdlZC4KKyAqLworc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtPmV4dHJhOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzWzJdOworCWludCByYzsKKworCXJjID0gYWxhdWRhX2dldF9tZWRpYV9zdGF0dXModXMsIHN0YXR1cyk7CisKKwkvKiBDaGVjayBmb3Igbm8gbWVkaWEgb3IgZG9vciBvcGVuICovCisJaWYgKChzdGF0dXNbMF0gJiAweDgwKSB8fCAoKHN0YXR1c1swXSAmIDB4MUYpID09IDB4MTApCisJCXx8ICgoc3RhdHVzWzFdICYgMHgwMSkgPT0gMCkpIHsKKwkJVVNfREVCVUdQKCJhbGF1ZGFfY2hlY2tfbWVkaWE6IE5vIG1lZGlhLCBvciBkb29yIG9wZW5cbiIpOworCQlhbGF1ZGFfZnJlZV9tYXBzKCZNRURJQV9JTkZPKHVzKSk7CisJCWluZm8tPnNlbnNlX2tleSA9IDB4MDI7CisJCWluZm8tPnNlbnNlX2FzYyA9IDB4M0E7CisJCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwkvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovCisJaWYgKHN0YXR1c1swXSAmIDB4MDgpIHsKKwkJVVNfREVCVUdQKCJhbGF1ZGFfY2hlY2tfbWVkaWE6IE1lZGlhIGNoYW5nZSBkZXRlY3RlZFxuIik7CisJCWFsYXVkYV9mcmVlX21hcHMoJk1FRElBX0lORk8odXMpKTsKKwkJYWxhdWRhX2luaXRfbWVkaWEodXMpOworCisJCWluZm8tPnNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OOworCQlpbmZvLT5zZW5zZV9hc2MgPSAweDI4OworCQlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogQ2hlY2tzIHRoZSBzdGF0dXMgZnJvbSB0aGUgMm5kIHN0YXR1cyByZWdpc3RlcgorICogUmV0dXJucyAzIGJ5dGVzIG9mIHN0YXR1cyBkYXRhLCBvbmx5IHRoZSBmaXJzdCBpcyBrbm93bgorICovCitzdGF0aWMgaW50IGFsYXVkYV9jaGVja19zdGF0dXMyKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBjb21tYW5kW10gPSB7CisJCUFMQVVEQV9CVUxLX0NNRCwgQUxBVURBX0JVTEtfR0VUX1NUQVRVUzIsCisJCTAsIDAsIDAsIDAsIDMsIDAsIE1FRElBX1BPUlQodXMpCisJfTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbM107CisKKwlyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+c2VuZF9idWxrX3BpcGUsCisJCWNvbW1hbmQsIDksIE5VTEwpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiByYzsKKworCXJjID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJZGF0YSwgMywgTlVMTCk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIHJjOworCisJVVNfREVCVUdQKCJhbGF1ZGFfY2hlY2tfc3RhdHVzMjogJTAyWCAlMDJYICUwMlhcbiIsIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0pOworCWlmIChkYXRhWzBdICYgQUxBVURBX1NUQVRVU19FUlJPUikKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfRVJST1I7CisKKwlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworfQorCisvKgorICogR2V0cyB0aGUgcmVkdW5kYW5jeSBkYXRhIGZvciB0aGUgZmlyc3QgcGFnZSBvZiBhIFBCQQorICogUmV0dXJucyAxNiBieXRlcy4KKyAqLworc3RhdGljIGludCBhbGF1ZGFfZ2V0X3JlZHVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgY29tbWFuZFtdID0geworCQlBTEFVREFfQlVMS19DTUQsIEFMQVVEQV9CVUxLX0dFVF9SRURVX0RBVEEsCisJCVBCQV9ISShwYmEpLCBQQkFfWk9ORShwYmEpLCAwLCBQQkFfTE8ocGJhKSwgMCwgMCwgTUVESUFfUE9SVCh1cykKKwl9OworCisJcmMgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQljb21tYW5kLCA5LCBOVUxMKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJZGF0YSwgMTYsIE5VTEwpOworfQorCisvKgorICogRmluZHMgdGhlIGZpcnN0IHVudXNlZCBQQkEgaW4gYSB6b25lCisgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBQQkEgb2YgYW4gdW51c2VkIFBCQSwgb3IgMCBpZiBub25lIGZvdW5kLgorICovCitzdGF0aWMgdTE2IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICppbmZvLAorCXVuc2lnbmVkIGludCB6b25lKQoreworCXUxNiAqcGJhX3RvX2xiYSA9IGluZm8tPnBiYV90b19sYmFbem9uZV07CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+em9uZXNpemU7IGkrKykKKwkJaWYgKHBiYV90b19sYmFbaV0gPT0gVU5ERUYpCisJCQlyZXR1cm4gKHpvbmUgPDwgaW5mby0+em9uZXNoaWZ0KSArIGk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWRzIHRoZSByZWR1bmRhbmN5IGRhdGEgZm9yIGFsbCBQQkEncyBpbiBhIHpvbmUKKyAqIFByb2R1Y2VzIGxiYSA8LS0+IHBiYSBtYXBwaW5ncworICovCitzdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKQoreworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBpbnQgem9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS56b25lc2l6ZTsKKwl1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplOworCXVuc2lnbmVkIGludCBsYmFfb2Zmc2V0LCBsYmFfcmVhbCwgYmxvY2tudW07CisJdW5zaWduZWQgaW50IHpvbmVfYmFzZV9sYmEgPSB6b25lICogdXpvbmVzaXplOworCXVuc2lnbmVkIGludCB6b25lX2Jhc2VfcGJhID0gem9uZSAqIHpvbmVzaXplOworCXUxNiAqbGJhX3RvX3BiYSA9IGtjYWxsb2Moem9uZXNpemUsIHNpemVvZih1MTYpLCBHRlBfTk9JTyk7CisJdTE2ICpwYmFfdG9fbGJhID0ga2NhbGxvYyh6b25lc2l6ZSwgc2l6ZW9mKHUxNiksIEdGUF9OT0lPKTsKKwlpZiAobGJhX3RvX3BiYSA9PSBOVUxMIHx8IHBiYV90b19sYmEgPT0gTlVMTCkgeworCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gZXJyb3I7CisJfQorCisJVVNfREVCVUdQKCJhbGF1ZGFfcmVhZF9tYXA6IE1hcHBpbmcgYmxvY2tzIGZvciB6b25lICVkXG4iLCB6b25lKTsKKworCS8qIDEwMjQgUEJBJ3MgcGVyIHpvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgem9uZXNpemU7IGkrKykKKwkJbGJhX3RvX3BiYVtpXSA9IHBiYV90b19sYmFbaV0gPSBVTkRFRjsKKworCWZvciAoaSA9IDA7IGkgPCB6b25lc2l6ZTsgaSsrKSB7CisJCWJsb2NrbnVtID0gem9uZV9iYXNlX3BiYSArIGk7CisKKwkJcmVzdWx0ID0gYWxhdWRhX2dldF9yZWR1X2RhdGEodXMsIGJsb2NrbnVtLCBkYXRhKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkvKiBzcGVjaWFsIFBCQXMgaGF2ZSBjb250cm9sIGZpZWxkIDBeMTYgKi8KKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCisJCQlpZiAoZGF0YVtqXSAhPSAwKQorCQkJCWdvdG8gbm9uejsKKwkJcGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQlVU19ERUJVR1AoImFsYXVkYV9yZWFkX21hcDogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmdcbiIsIGJsb2NrbnVtKTsKKwkJY29udGludWU7CisKKwlub256OgorCQkvKiB1bndyaXR0ZW4gUEJBcyBoYXZlIGNvbnRyb2wgZmllbGQgRkZeMTYgKi8KKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCisJCQlpZiAoZGF0YVtqXSAhPSAweGZmKQorCQkJCWdvdG8gbm9uZmY7CisJCWNvbnRpbnVlOworCisJbm9uZmY6CisJCS8qIG5vcm1hbCBQQkFzIHN0YXJ0IHdpdGggc2l4IEZGcyAqLworCQlpZiAoaiA8IDYpIHsKKwkJCVVTX0RFQlVHUCgiYWxhdWRhX3JlYWRfbWFwOiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgorCQkJICAgICAgICJyZXNlcnZlZCBhcmVhID0gJTAyWCUwMlglMDJYJTAyWCAiCisJCQkgICAgICAgImRhdGEgc3RhdHVzICUwMlggYmxvY2sgc3RhdHVzICUwMlhcbiIsCisJCQkgICAgICAgYmxvY2tudW0sIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sCisJCQkgICAgICAgZGF0YVs0XSwgZGF0YVs1XSk7CisJCQlwYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoZGF0YVs2XSA+PiA0KSAhPSAweDAxKSB7CisJCQlVU19ERUJVR1AoImFsYXVkYV9yZWFkX21hcDogUEJBICVkIGhhcyBpbnZhbGlkIGFkZHJlc3MgIgorCQkJICAgICAgICJmaWVsZCAlMDJYJTAyWC8lMDJYJTAyWFxuIiwKKwkJCSAgICAgICBibG9ja251bSwgZGF0YVs2XSwgZGF0YVs3XSwgZGF0YVsxMV0sIGRhdGFbMTJdKTsKKwkJCXBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY2hlY2sgZXZlbiBwYXJpdHkgKi8KKwkJaWYgKHBhcml0eVtkYXRhWzZdIF4gZGF0YVs3XV0pIHsKKwkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCisJCQkgICAgICAgIiAoJTAyWCAlMDJYKVxuIiwgaSwgZGF0YVs2XSwgZGF0YVs3XSk7CisJCQlwYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxiYV9vZmZzZXQgPSBzaG9ydF9wYWNrKGRhdGFbN10sIGRhdGFbNl0pOworCQlsYmFfb2Zmc2V0ID0gKGxiYV9vZmZzZXQgJiAweDA3RkYpID4+IDE7CisJCWxiYV9yZWFsID0gbGJhX29mZnNldCArIHpvbmVfYmFzZV9sYmE7CisKKwkJLyoKKwkJICogRXZlcnkgMTAyNCBwaHlzaWNhbCBibG9ja3MgKCJ6b25lIiksIHRoZSBMQkEgbnVtYmVycworCQkgKiBnbyBiYWNrIHRvIHplcm8sIGJ1dCBhcmUgd2l0aGluIGEgaGlnaGVyIGJsb2NrIG9mIExCQSdzLgorCQkgKiBBbHNvLCB0aGVyZSBpcyBhIG1heGltdW0gb2YgMTAwMCBMQkEncyBwZXIgem9uZS4KKwkJICogSW4gb3RoZXIgd29yZHMsIGluIFBCQSAxMDI0LTIwNDcgeW91IHdpbGwgZmluZCBMQkEgMC05OTkKKwkJICogd2hpY2ggYXJlIHJlYWxseSBMQkEgMTAwMC0xOTk5LiBUaGlzIGFsbG93cyBmb3IgMjQgYmFkCisJCSAqIG9yIHNwZWNpYWwgcGh5c2ljYWwgYmxvY2tzIHBlciB6b25lLgorCQkgKi8KKworCQlpZiAobGJhX29mZnNldCA+PSB1em9uZXNpemUpIHsKKwkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCisJCQkgICAgICAgbGJhX3JlYWwsIGJsb2NrbnVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxiYV90b19wYmFbbGJhX29mZnNldF0gIT0gVU5ERUYpIHsKKwkJCXByaW50aygiYWxhdWRhX3JlYWRfbWFwOiBMQkEgJWQgc2VlbiBmb3IgUEJBICVkIGFuZCAlZFxuIiwKKwkJCSAgICAgICBsYmFfcmVhbCwgbGJhX3RvX3BiYVtsYmFfb2Zmc2V0XSwgYmxvY2tudW0pOworCQkJY29udGludWU7CisJCX0KKworCQlwYmFfdG9fbGJhW2ldID0gbGJhX3JlYWw7CisJCWxiYV90b19wYmFbbGJhX29mZnNldF0gPSBibG9ja251bTsKKwkJY29udGludWU7CisJfQorCisJTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9IGxiYV90b19wYmE7CisJTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9IHBiYV90b19sYmE7CisJcmVzdWx0ID0gMDsKKwlnb3RvIG91dDsKKworZXJyb3I6CisJa2ZyZWUobGJhX3RvX3BiYSk7CisJa2ZyZWUocGJhX3RvX2xiYSk7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrcyB0byBzZWUgd2hldGhlciB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkIGEgY2VydGFpbiB6b25lCisgKiBJZiB3ZSBoYXZlbid0LCB0aGUgbWFwIGlzIGdlbmVyYXRlZAorICovCitzdGF0aWMgdm9pZCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKQoreworCWlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTEwKKwkJfHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKQorCQlhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpOworfQorCisvKgorICogRXJhc2VzIGFuIGVudGlyZSBibG9jaworICovCitzdGF0aWMgaW50IGFsYXVkYV9lcmFzZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgY29tbWFuZFtdID0geworCQlBTEFVREFfQlVMS19DTUQsIEFMQVVEQV9CVUxLX0VSQVNFX0JMT0NLLCBQQkFfSEkocGJhKSwKKwkJUEJBX1pPTkUocGJhKSwgMCwgUEJBX0xPKHBiYSksIDB4MDIsIDAsIE1FRElBX1BPUlQodXMpCisJfTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKworCVVTX0RFQlVHUCgiYWxhdWRhX2VyYXNlX2Jsb2NrOiBFcmFzaW5nIFBCQSAlZFxuIiwgcGJhKTsKKworCXJjID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJY29tbWFuZCwgOSwgTlVMTCk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIHJjOworCisJcmMgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAorCQlidWYsIDIsIE5VTEwpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiByYzsKKworCVVTX0RFQlVHUCgiYWxhdWRhX2VyYXNlX2Jsb2NrOiBFcmFzZSByZXN1bHQ6ICUwMlggJTAyWFxuIiwKKwkJYnVmWzBdLCBidWZbMV0pOworCXJldHVybiByYzsKK30KKworLyoKKyAqIFJlYWRzIGRhdGEgZnJvbSBhIGNlcnRhaW4gb2Zmc2V0IHBhZ2UgaW5zaWRlIGEgUEJBLCBpbmNsdWRpbmcgaW50ZXJsZWF2ZWQKKyAqIHJlZHVuZGFuY3kgZGF0YS4gUmV0dXJucyAocGFnZXNpemUrNjQpKnBhZ2VzIGJ5dGVzIGluIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwKKwkJdW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBjb21tYW5kW10gPSB7CisJCUFMQVVEQV9CVUxLX0NNRCwgQUxBVURBX0JVTEtfUkVBRF9CTE9DSywgUEJBX0hJKHBiYSksCisJCVBCQV9aT05FKHBiYSksIDAsIFBCQV9MTyhwYmEpICsgcGFnZSwgcGFnZXMsIDAsIE1FRElBX1BPUlQodXMpCisJfTsKKworCVVTX0RFQlVHUCgiYWxhdWRhX3JlYWRfYmxvY2s6IHBiYSAlZCBwYWdlICVkIGNvdW50ICVkXG4iLAorCQlwYmEsIHBhZ2UsIHBhZ2VzKTsKKworCXJjID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJY29tbWFuZCwgOSwgTlVMTCk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCWRhdGEsIChNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSArIDY0KSAqIHBhZ2VzLCBOVUxMKTsKK30KKworLyoKKyAqIFJlYWRzIGRhdGEgZnJvbSBhIGNlcnRhaW4gb2Zmc2V0IHBhZ2UgaW5zaWRlIGEgUEJBLCBleGNsdWRpbmcgcmVkdW5kYW5jeQorICogZGF0YS4gUmV0dXJucyBwYWdlc2l6ZSpwYWdlcyBieXRlcyBpbiBkYXRhLiBOb3RlIHRoYXQgZGF0YSBtdXN0IGJlIGJpZyBlbm91Z2gKKyAqIHRvIGhvbGQgKHBhZ2VzaXplKzY0KSpwYWdlcyBieXRlcyBvZiBkYXRhLCBidXQgeW91IGNhbiBpZ25vcmUgdGhvc2UgJ2V4dHJhJworICogdHJhaWxpbmcgYnl0ZXMgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwKKwkJdW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgaSwgcmM7CisJdW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7CisKKwlyYyA9IGFsYXVkYV9yZWFkX2Jsb2NrX3Jhdyh1cywgcGJhLCBwYWdlLCBwYWdlcywgZGF0YSk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIHJjOworCisJLyogQ3V0IG91dCB0aGUgcmVkdW5kYW5jeSBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJaW50IGRlc3Rfb2Zmc2V0ID0gaSAqIHBhZ2VzaXplOworCQlpbnQgc3JjX29mZnNldCA9IGkgKiAocGFnZXNpemUgKyA2NCk7CisJCW1lbW1vdmUoZGF0YSArIGRlc3Rfb2Zmc2V0LCBkYXRhICsgc3JjX29mZnNldCwgcGFnZXNpemUpOworCX0KKworCXJldHVybiByYzsKK30KKworLyoKKyAqIFdyaXRlcyBhbiBlbnRpcmUgYmxvY2sgb2YgZGF0YSBhbmQgY2hlY2tzIHN0YXR1cyBhZnRlciB3cml0ZS4KKyAqIFJlZHVuZGFuY3kgZGF0YSBtdXN0IGJlIGFscmVhZHkgaW5jbHVkZWQgaW4gZGF0YS4gRGF0YSBzaG91bGQgYmUKKyAqIChwYWdlc2l6ZSs2NCkqYmxvY2tzaXplIGJ5dGVzIGluIGxlbmd0aC4KKyAqLworc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhLCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCWludCByYzsKKwlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmRbXSA9IHsKKwkJQUxBVURBX0JVTEtfQ01ELCBBTEFVREFfQlVMS19XUklURV9CTE9DSywgUEJBX0hJKHBiYSksCisJCVBCQV9aT05FKHBiYSksIDAsIFBCQV9MTyhwYmEpLCAzMiwgMCwgTUVESUFfUE9SVCh1cykKKwl9OworCisJVVNfREVCVUdQKCJhbGF1ZGFfd3JpdGVfYmxvY2s6IHBiYSAlZFxuIiwgcGJhKTsKKworCXJjID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJY29tbWFuZCwgOSwgTlVMTCk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIHJjOworCisJcmMgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgaW5mby0+d3JfZXAsIGRhdGEsCisJCShNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSArIDY0KSAqIE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZSwKKwkJTlVMTCk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIGFsYXVkYV9jaGVja19zdGF0dXMyKHVzKTsKK30KKworLyoKKyAqIFdyaXRlIHNvbWUgZGF0YSB0byBhIHNwZWNpZmljIExCQS4KKyAqLworc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSwKKwkJIHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZXMsCisJCSB1bnNpZ25lZCBjaGFyICpwdHIsIHVuc2lnbmVkIGNoYXIgKmJsb2NrYnVmZmVyKQoreworCXUxNiBwYmEsIGxiYXAsIG5ld19wYmE7CisJdW5zaWduZWQgY2hhciAqYnB0ciwgKmNwdHIsICp4cHRyOworCXVuc2lnbmVkIGNoYXIgZWNjWzNdOworCWludCBpLCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHV6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnV6b25lc2l6ZTsKKwl1bnNpZ25lZCBpbnQgem9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS56b25lc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplOworCXVuc2lnbmVkIGludCBsYmFfb2Zmc2V0ID0gbGJhICUgdXpvbmVzaXplOworCXVuc2lnbmVkIGludCBuZXdfcGJhX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKKworCWFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTsKKworCXBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07CisJaWYgKHBiYSA9PSAxKSB7CisJCS8qIE1heWJlIGl0IGlzIGltcG9zc2libGUgdG8gd3JpdGUgdG8gUEJBIDEuCisJCSAgIEZha2Ugc3VjY2VzcywgYnV0IGRvbid0IGRvIGFueXRoaW5nLiAqLworCQlwcmludGsoImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJbmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoJk1FRElBX0lORk8odXMpLCB6b25lKTsKKwlpZiAoIW5ld19wYmEpIHsKKwkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogcmVhZCBvbGQgY29udGVudHMgKi8KKwlpZiAocGJhICE9IFVOREVGKSB7CisJCXJlc3VsdCA9IGFsYXVkYV9yZWFkX2Jsb2NrX3Jhdyh1cywgcGJhLCAwLAorCQkJYmxvY2tzaXplLCBibG9ja2J1ZmZlcik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9IGVsc2UgeworCQltZW1zZXQoYmxvY2tidWZmZXIsIDAsIGJsb2Nrc2l6ZSAqIChwYWdlc2l6ZSArIDY0KSk7CisJfQorCisJbGJhcCA9IChsYmFfb2Zmc2V0IDw8IDEpIHwgMHgxMDAwOworCWlmIChwYXJpdHlbTVNCX29mKGxiYXApIF4gTFNCX29mKGxiYXApXSkKKwkJbGJhcCBePSAxOworCisJLyogY2hlY2sgb2xkIGNvbnRlbnRzIGFuZCBmaWxsIGxiYSAqLworCWZvciAoaSA9IDA7IGkgPCBibG9ja3NpemU7IGkrKykgeworCQlicHRyID0gYmxvY2tidWZmZXIgKyAoaSAqIChwYWdlc2l6ZSArIDY0KSk7CisJCWNwdHIgPSBicHRyICsgcGFnZXNpemU7CisJCW5hbmRfY29tcHV0ZV9lY2MoYnB0ciwgZWNjKTsKKwkJaWYgKCFuYW5kX2NvbXBhcmVfZWNjKGNwdHIrMTMsIGVjYykpIHsKKwkJCVVTX0RFQlVHUCgiV2FybmluZzogYmFkIGVjYyBpbiBwYWdlICVkLSBvZiBwYmEgJWRcbiIsCisJCQkJICBpLCBwYmEpOworCQkJbmFuZF9zdG9yZV9lY2MoY3B0cisxMywgZWNjKTsKKwkJfQorCQluYW5kX2NvbXB1dGVfZWNjKGJwdHIgKyAocGFnZXNpemUgLyAyKSwgZWNjKTsKKwkJaWYgKCFuYW5kX2NvbXBhcmVfZWNjKGNwdHIrOCwgZWNjKSkgeworCQkJVVNfREVCVUdQKCJXYXJuaW5nOiBiYWQgZWNjIGluIHBhZ2UgJWQrIG9mIHBiYSAlZFxuIiwKKwkJCQkgIGksIHBiYSk7CisJCQluYW5kX3N0b3JlX2VjYyhjcHRyKzgsIGVjYyk7CisJCX0KKwkJY3B0cls2XSA9IGNwdHJbMTFdID0gTVNCX29mKGxiYXApOworCQljcHRyWzddID0gY3B0clsxMl0gPSBMU0Jfb2YobGJhcCk7CisJfQorCisJLyogY29weSBpbiBuZXcgc3R1ZmYgYW5kIGNvbXB1dGUgRUNDICovCisJeHB0ciA9IHB0cjsKKwlmb3IgKGkgPSBwYWdlOyBpIDwgcGFnZStwYWdlczsgaSsrKSB7CisJCWJwdHIgPSBibG9ja2J1ZmZlciArIChpICogKHBhZ2VzaXplICsgNjQpKTsKKwkJY3B0ciA9IGJwdHIgKyBwYWdlc2l6ZTsKKwkJbWVtY3B5KGJwdHIsIHhwdHIsIHBhZ2VzaXplKTsKKwkJeHB0ciArPSBwYWdlc2l6ZTsKKwkJbmFuZF9jb21wdXRlX2VjYyhicHRyLCBlY2MpOworCQluYW5kX3N0b3JlX2VjYyhjcHRyKzEzLCBlY2MpOworCQluYW5kX2NvbXB1dGVfZWNjKGJwdHIgKyAocGFnZXNpemUgLyAyKSwgZWNjKTsKKwkJbmFuZF9zdG9yZV9lY2MoY3B0cis4LCBlY2MpOworCX0KKworCXJlc3VsdCA9IGFsYXVkYV93cml0ZV9ibG9jayh1cywgbmV3X3BiYSwgYmxvY2tidWZmZXIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJbmV3X3BiYV9vZmZzZXQgPSBuZXdfcGJhIC0gKHpvbmUgKiB6b25lc2l6ZSk7CisJTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXVtuZXdfcGJhX29mZnNldF0gPSBsYmE7CisJTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XSA9IG5ld19wYmE7CisJVVNfREVCVUdQKCJhbGF1ZGFfd3JpdGVfbGJhOiBSZW1hcHBlZCBMQkEgJWQgdG8gUEJBICVkXG4iLAorCQlsYmEsIG5ld19wYmEpOworCisJaWYgKHBiYSAhPSBVTkRFRikgeworCQl1bnNpZ25lZCBpbnQgcGJhX29mZnNldCA9IHBiYSAtICh6b25lICogem9uZXNpemUpOworCQlyZXN1bHQgPSBhbGF1ZGFfZXJhc2VfYmxvY2sodXMsIHBiYSk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXVtwYmFfb2Zmc2V0XSA9IFVOREVGOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIFJlYWQgZGF0YSBmcm9tIGEgc3BlY2lmaWMgc2VjdG9yIGFkZHJlc3MKKyAqLworc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQl1bnNpZ25lZCBpbnQgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdTE2IGxiYSwgbWF4X2xiYTsKKwl1bnNpZ25lZCBpbnQgcGFnZSwgbGVuLCBpbmRleCwgb2Zmc2V0OworCXVuc2lnbmVkIGludCBibG9ja3NoaWZ0ID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdDsKKwl1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0ID0gTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0OworCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7CisJdW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7CisJdW5zaWduZWQgaW50IHV6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnV6b25lc2l6ZTsKKwlpbnQgcmVzdWx0OworCisJLyoKKwkgKiBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkgKiBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkgKiBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKwkgKiBXZSBtYWtlIHRoaXMgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCB0ZW1wb3JhcnkgcmVkdW5kYW5jeSBkYXRhLAorCSAqIHdoaWNoIHdlIHVzZSB3aGVuIHJlYWRpbmcgdGhlIGRhdGEgYmxvY2tzLgorCSAqLworCisJbGVuID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSkgKiAocGFnZXNpemUgKyA2NCk7CisJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJhbGF1ZGFfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBpbml0aWFsIExCQSBhbmQgcGFnZSAqLworCWxiYSA9IGFkZHJlc3MgPj4gYmxvY2tzaGlmdDsKKwlwYWdlID0gKGFkZHJlc3MgJiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spOworCW1heF9sYmEgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSA+PiAoYmxvY2tzaGlmdCArIHBhZ2VzaGlmdCk7CisKKwlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlpbmRleCA9IG9mZnNldCA9IDA7CisKKwl3aGlsZSAoc2VjdG9ycyA+IDApIHsKKwkJdW5zaWduZWQgaW50IHpvbmUgPSBsYmEgLyB1em9uZXNpemU7IC8qIGludGVnZXIgZGl2aXNpb24gKi8KKwkJdW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgLSAoem9uZSAqIHV6b25lc2l6ZSk7CisJCXVuc2lnbmVkIGludCBwYWdlczsKKwkJdTE2IHBiYTsKKwkJYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOworCisJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KKwkJaWYgKGxiYSA+PSBtYXhfbGJhKSB7CisJCQlVU19ERUJVR1AoIkVycm9yOiBSZXF1ZXN0ZWQgbGJhICV1IGV4Y2VlZHMgIgorCQkJCSAgIm1heGltdW0gJXVcbiIsIGxiYSwgbWF4X2xiYSk7CisJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZpbmQgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiByZWFkIGluIHRoaXMgYmxvY2sgKi8KKwkJcGFnZXMgPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IHBhZ2VzIDw8IHBhZ2VzaGlmdDsKKworCQkvKiBGaW5kIHdoZXJlIHRoaXMgbGJhIGxpdmVzIG9uIGRpc2sgKi8KKwkJcGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTsKKworCQlpZiAocGJhID09IFVOREVGKSB7CS8qIHRoaXMgbGJhIHdhcyBuZXZlciB3cml0dGVuICovCisJCQlVU19ERUJVR1AoIlJlYWQgJWQgemVybyBwYWdlcyAoTEJBICVkKSBwYWdlICVkXG4iLAorCQkJCSAgcGFnZXMsIGxiYSwgcGFnZSk7CisKKwkJCS8qIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvci4gSXQganVzdCBtZWFucworCQkJICAgdGhhdCB0aGUgYmxvY2sgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbi4KKwkJCSAgIEluc3RlYWQgb2YgcmV0dXJuaW5nIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUgorCQkJICAgaXQgaXMgYmV0dGVyIHRvIHJldHVybiBhbGwgemVybyBkYXRhLiAqLworCisJCQltZW1zZXQoYnVmZmVyLCAwLCBsZW4pOworCQl9IGVsc2UgeworCQkJVVNfREVCVUdQKCJSZWFkICVkIHBhZ2VzLCBmcm9tIFBCQSAlZCIKKwkJCQkgICIgKExCQSAlZCkgcGFnZSAlZFxuIiwKKwkJCQkgIHBhZ2VzLCBwYmEsIGxiYSwgcGFnZSk7CisKKwkJCXJlc3VsdCA9IGFsYXVkYV9yZWFkX2Jsb2NrKHVzLCBwYmEsIHBhZ2UsIHBhZ2VzLCBidWZmZXIpOworCQkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIgKi8KKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSZpbmRleCwgJm9mZnNldCwgVE9fWEZFUl9CVUYpOworCisJCXBhZ2UgPSAwOworCQlsYmErKzsKKwkJc2VjdG9ycyAtPSBwYWdlczsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXcml0ZSBkYXRhIHRvIGEgc3BlY2lmaWMgc2VjdG9yIGFkZHJlc3MKKyAqLworc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJdW5zaWduZWQgaW50IHNlY3RvcnMpCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqYmxvY2tidWZmZXI7CisJdW5zaWduZWQgaW50IHBhZ2UsIGxlbiwgaW5kZXgsIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzaGlmdCA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQ7CisJdW5zaWduZWQgaW50IHBhZ2VzaGlmdCA9IE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdDsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplOworCXVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplOworCXUxNiBsYmEsIG1heF9sYmE7CisJaW50IHJlc3VsdDsKKworCS8qCisJICogU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgdGhlIHVzZXIgZGF0YSBkaXJlY3RseSB0byB0aGUgZGV2aWNlLAorCSAqIHdlIGhhdmUgdG8gY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlCisJICogYXQgYSB0aW1lIGJldHdlZW4gdGhlIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCSAqLworCisJbGVuID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSkgKiBwYWdlc2l6ZTsKKwlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlwcmludGsoImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKgorCSAqIFdlIGFsc28gbmVlZCBhIHRlbXBvcmFyeSBibG9jayBidWZmZXIsIHdoZXJlIHdlIHJlYWQgaW4gdGhlIG9sZCBkYXRhLAorCSAqIG92ZXJ3cml0ZSBwYXJ0cyB3aXRoIHRoZSBuZXcgZGF0YSwgYW5kIG1hbmlwdWxhdGUgdGhlIHJlZHVuZGFuY3kgZGF0YQorCSAqLworCWJsb2NrYnVmZmVyID0ga21hbGxvYygocGFnZXNpemUgKyA2NCkgKiBibG9ja3NpemUsIEdGUF9OT0lPKTsKKwlpZiAoYmxvY2tidWZmZXIgPT0gTlVMTCkgeworCQlwcmludGsoImFsYXVkYV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJa2ZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBpbml0aWFsIExCQSBhbmQgcGFnZSAqLworCWxiYSA9IGFkZHJlc3MgPj4gYmxvY2tzaGlmdDsKKwlwYWdlID0gKGFkZHJlc3MgJiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spOworCW1heF9sYmEgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSA+PiAocGFnZXNoaWZ0ICsgYmxvY2tzaGlmdCk7CisKKwlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlpbmRleCA9IG9mZnNldCA9IDA7CisKKwl3aGlsZSAoc2VjdG9ycyA+IDApIHsKKwkJLyogV3JpdGUgYXMgbWFueSBzZWN0b3JzIGFzIHBvc3NpYmxlIGluIHRoaXMgYmxvY2sgKi8KKwkJdW5zaWduZWQgaW50IHBhZ2VzID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSAtIHBhZ2UpOworCQlsZW4gPSBwYWdlcyA8PCBwYWdlc2hpZnQ7CisKKwkJLyogTm90IG92ZXJmbG93aW5nIGNhcGFjaXR5PyAqLworCQlpZiAobGJhID49IG1heF9sYmEpIHsKKwkJCVVTX0RFQlVHUCgiYWxhdWRhX3dyaXRlX2RhdGE6IFJlcXVlc3RlZCBsYmEgJXUgZXhjZWVkcyAiCisJCQkJICAibWF4aW11bSAldVxuIiwgbGJhLCBtYXhfbGJhKTsKKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLworCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJJmluZGV4LCAmb2Zmc2V0LCBGUk9NX1hGRVJfQlVGKTsKKworCQlyZXN1bHQgPSBhbGF1ZGFfd3JpdGVfbGJhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzLCBidWZmZXIsCisJCQlibG9ja2J1ZmZlcik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlicmVhazsKKworCQlwYWdlID0gMDsKKwkJbGJhKys7CisJCXNlY3RvcnMgLT0gcGFnZXM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKwlrZnJlZShibG9ja2J1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE91ciBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgd29ybGQKKyAqLworCitzdGF0aWMgdm9pZCBhbGF1ZGFfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKQoreworCXN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgZXh0cmE7CisJaW50IHBvcnQ7CisKKwlpZiAoIWluZm8pCisJCXJldHVybjsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCAyOyBwb3J0KyspIHsKKwkJc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gJmluZm8tPnBvcnRbcG9ydF07CisKKwkJYWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTsKKwkJa2ZyZWUobWVkaWFfaW5mby0+bGJhX3RvX3BiYSk7CisJCWtmcmVlKG1lZGlhX2luZm8tPnBiYV90b19sYmEpOworCX0KK30KKworLyoKKyAqIEluaXRpYWxpemUgYWxhdWRhX2luZm8gc3RydWN0IGFuZCBmaW5kIHRoZSBkYXRhLXdyaXRlIGVuZHBvaW50CisgKi8KK2ludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGFsYXVkYV9pbmZvICppbmZvOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHNldHRpbmcgPSB1cy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZzsKKwluYW5kX2luaXRfZWNjKCk7CisKKwl1cy0+ZXh0cmEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWxhdWRhX2luZm8pLCBHRlBfTk9JTyk7CisJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJVVNfREVCVUdQKCJpbml0X2FsYXVkYTogR2FoISBDYW4ndCBhbGxvY2F0ZSBzdG9yYWdlIGZvciIKKwkJCSJhbGF1ZGEgaW5mbyBzdHJ1Y3QhXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisJaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtPmV4dHJhOworCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gYWxhdWRhX2luZm9fZGVzdHJ1Y3RvcjsKKworCWluZm8tPndyX2VwID0gdXNiX3NuZGJ1bGtwaXBlKHVzLT5wdXNiX2RldiwKKwkJYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzCisJCSYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJjOworCXN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtPmV4dHJhOworCXVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLT5pb2J1ZjsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBpbnF1aXJ5X3Jlc3BvbnNlWzM2XSA9IHsKKwkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJVVNfREVCVUdQKCJhbGF1ZGFfdHJhbnNwb3J0OiBJTlFVSVJZLiAiCisJCQkiUmV0dXJuaW5nIGJvZ3VzIHJlc3BvbnNlLlxuIik7CisJCW1lbWNweShwdHIsIGlucXVpcnlfcmVzcG9uc2UsIHNpemVvZihpbnF1aXJ5X3Jlc3BvbnNlKSk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFRFU1RfVU5JVF9SRUFEWSkgeworCQlVU19ERUJVR1AoImFsYXVkYV90cmFuc3BvcnQ6IFRFU1RfVU5JVF9SRUFEWS5cbiIpOworCQlyZXR1cm4gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKwkJdW5zaWduZWQgaW50IG51bV96b25lczsKKwkJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsKKworCQlyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQludW1fem9uZXMgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSA+PiAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0CisJCQkrIE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgKyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpOworCisJCWNhcGFjaXR5ID0gbnVtX3pvbmVzICogTUVESUFfSU5GTyh1cykudXpvbmVzaXplCisJCQkqIE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTsKKworCQkvKiBSZXBvcnQgY2FwYWNpdHkgYW5kIHBhZ2Ugc2l6ZSAqLworCQkoKF9fYmUzMiAqKSBwdHIpWzBdID0gY3B1X3RvX2JlMzIoY2FwYWNpdHkgLSAxKTsKKwkJKChfX2JlMzIgKikgcHRyKVsxXSA9IGNwdV90b19iZTMyKDUxMik7CisKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgOCwgc3JiKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMCkgeworCQl1bnNpZ25lZCBpbnQgcGFnZSwgcGFnZXM7CisKKwkJcmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpOworCQlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmM7CisKKwkJcGFnZSA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzNdLCBzcmItPmNtbmRbMl0pOworCQlwYWdlIDw8PSAxNjsKKwkJcGFnZSB8PSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs1XSwgc3JiLT5jbW5kWzRdKTsKKwkJcGFnZXMgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs4XSwgc3JiLT5jbW5kWzddKTsKKworCQlVU19ERUJVR1AoImFsYXVkYV90cmFuc3BvcnQ6IFJFQURfMTA6IHBhZ2UgJWQgcGFnZWN0ICVkXG4iLAorCQkJICBwYWdlLCBwYWdlcyk7CisKKwkJcmV0dXJuIGFsYXVkYV9yZWFkX2RhdGEodXMsIHBhZ2UsIHBhZ2VzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFdSSVRFXzEwKSB7CisJCXVuc2lnbmVkIGludCBwYWdlLCBwYWdlczsKKworCQlyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlwYWdlID0gc2hvcnRfcGFjayhzcmItPmNtbmRbM10sIHNyYi0+Y21uZFsyXSk7CisJCXBhZ2UgPDw9IDE2OworCQlwYWdlIHw9IHNob3J0X3BhY2soc3JiLT5jbW5kWzVdLCBzcmItPmNtbmRbNF0pOworCQlwYWdlcyA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzhdLCBzcmItPmNtbmRbN10pOworCisJCVVTX0RFQlVHUCgiYWxhdWRhX3RyYW5zcG9ydDogV1JJVEVfMTA6IHBhZ2UgJWQgcGFnZWN0ICVkXG4iLAorCQkJICBwYWdlLCBwYWdlcyk7CisKKwkJcmV0dXJuIGFsYXVkYV93cml0ZV9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB7CisJCVVTX0RFQlVHUCgiYWxhdWRhX3RyYW5zcG9ydDogUkVRVUVTVF9TRU5TRS5cbiIpOworCisJCW1lbXNldChwdHIsIDAsIDE4KTsKKwkJcHRyWzBdID0gMHhGMDsKKwkJcHRyWzJdID0gaW5mby0+c2Vuc2Vfa2V5OworCQlwdHJbN10gPSAxMTsKKwkJcHRyWzEyXSA9IGluZm8tPnNlbnNlX2FzYzsKKwkJcHRyWzEzXSA9IGluZm8tPnNlbnNlX2FzY3E7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDE4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IEFMTE9XX01FRElVTV9SRU1PVkFMKSB7CisJCS8qIHN1cmUuICB3aGF0ZXZlci4gIG5vdCBsaWtlIHdlIGNhbiBzdG9wIHRoZSB1c2VyIGZyb20gcG9wcGluZworCQkgICB0aGUgbWVkaWEgb3V0IG9mIHRoZSBkZXZpY2UgKG5vIGxvY2tpbmcgZG9vcnMsIGV0YykgKi8KKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCVVTX0RFQlVHUCgiYWxhdWRhX3RyYW5zcG9ydDogR2FoISBVbmtub3duIGNvbW1hbmQ6ICVkICgweCV4KVxuIiwKKwkJc3JiLT5jbW5kWzBdLCBzcmItPmNtbmRbMF0pOworCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJaW5mby0+c2Vuc2VfYXNjID0gMHgyMDsKKwlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwMGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBEcml2ZXIgZm9yIEFsYXVkYS1iYXNlZCBjYXJkIHJlYWRlcnMKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgIChjKSAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CisgKgorICogU2VlIGFsYXVkYS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9BTEFVREFfSAorI2RlZmluZSBfVVNCX0FMQVVEQV9ICisKKy8qCisgKiBTdGF0dXMgYnl0ZXMKKyAqLworI2RlZmluZSBBTEFVREFfU1RBVFVTX0VSUk9SCQkweDAxCisjZGVmaW5lIEFMQVVEQV9TVEFUVVNfUkVBRFkJCTB4NDAKKworLyoKKyAqIENvbnRyb2wgb3Bjb2RlcyAoZm9yIHJlcXVlc3QgZmllbGQpCisgKi8KKyNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TVEFUVVMJMHgwOAorI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NUQVRVUwkweDk4CisjZGVmaW5lIEFMQVVEQV9BQ0tfWERfTUVESUFfQ0hBTkdFCTB4MGEKKyNkZWZpbmUgQUxBVURBX0FDS19TTV9NRURJQV9DSEFOR0UJMHg5YQorI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NJRwkJMHg4NgorI2RlZmluZSBBTEFVREFfR0VUX1NNX01FRElBX1NJRwkJMHg5NgorCisvKgorICogQnVsayBjb21tYW5kIGlkZW50aXR5IChieXRlIDApCisgKi8KKyNkZWZpbmUgQUxBVURBX0JVTEtfQ01ECQkJMHg0MAorCisvKgorICogQnVsayBvcGNvZGVzIChieXRlIDEpCisgKi8KKyNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1JFRFVfREFUQQkweDg1CisjZGVmaW5lIEFMQVVEQV9CVUxLX1JFQURfQkxPQ0sJCTB4OTQKKyNkZWZpbmUgQUxBVURBX0JVTEtfRVJBU0VfQkxPQ0sJCTB4YTMKKyNkZWZpbmUgQUxBVURBX0JVTEtfV1JJVEVfQkxPQ0sJCTB4YjQKKyNkZWZpbmUgQUxBVURBX0JVTEtfR0VUX1NUQVRVUzIJCTB4YjcKKyNkZWZpbmUgQUxBVURBX0JVTEtfUkVTRVRfTUVESUEJCTB4ZTAKKworLyoKKyAqIFBvcnQgdG8gb3BlcmF0ZSBvbiAoYnl0ZSA4KQorICovCisjZGVmaW5lIEFMQVVEQV9QT1JUX1hECQkJMHgwMAorI2RlZmluZSBBTEFVREFfUE9SVF9TTQkJCTB4MDEKKworLyoKKyAqIExCQSBhbmQgUEJBIGFyZSB1bnNpZ25lZCBpbnRzLiBTcGVjaWFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBVTkRFRiAgICAweGZmZmYKKyNkZWZpbmUgU1BBUkUgICAgMHhmZmZlCisjZGVmaW5lIFVOVVNBQkxFIDB4ZmZmZAorCitpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2ludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OwkJLyogdG90YWwgbWVkaWEgc2l6ZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBwYWdlc2l6ZTsJCS8qIHBhZ2Ugc2l6ZSBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBibG9ja3NpemU7CQkvKiBudW1iZXIgb2YgcGFnZXMgcGVyIGJsb2NrICovCisJdW5zaWduZWQgaW50IHV6b25lc2l6ZTsJCS8qIG51bWJlciBvZiB1c2FibGUgYmxvY2tzIHBlciB6b25lICovCisJdW5zaWduZWQgaW50IHpvbmVzaXplOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgem9uZSAqLworCXVuc2lnbmVkIGludCBibG9ja21hc2s7CQkvKiBtYXNrIHRvIGdldCBwYWdlIGZyb20gYWRkcmVzcyAqLworCisJdW5zaWduZWQgY2hhciBwYWdlc2hpZnQ7CisJdW5zaWduZWQgY2hhciBibG9ja3NoaWZ0OworCXVuc2lnbmVkIGNoYXIgem9uZXNoaWZ0OworCisJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCisJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCit9OworCitzdHJ1Y3QgYWxhdWRhX2luZm8geworCXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdOworCWludCB3cl9lcDsJCQkvKiBlbmRwb2ludCB0byB3cml0ZSBkYXRhIG91dCBvZiAqLworCisJdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7CisJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYwppbmRleCA1YTkzMjE3Li4wMWU0MzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jCkBAIC0xMzIsNiArMTMyLDcgQEAKIAljYXNlIDB4NUM6IHdoYXQgPSAiUkVBRCBCVUZGRVIgQ0FQQUNJVFkiOyBicmVhazsKIAljYXNlIDB4NUQ6IHdoYXQgPSAiU0VORCBDVUUgU0hFRVQiOyBicmVhazsKIAljYXNlIEdQQ01EX0JMQU5LOiB3aGF0ID0gIkJMQU5LIjsgYnJlYWs7CisJY2FzZSBSRVBPUlRfTFVOUzogd2hhdCA9ICJSRVBPUlQgTFVOUyI7IGJyZWFrOwogCWNhc2UgTU9WRV9NRURJVU06IHdoYXQgPSAiTU9WRV9NRURJVU0gb3IgUExBWSBBVURJTyAoMTIpIjsgYnJlYWs7CiAJY2FzZSBSRUFEXzEyOiB3aGF0ID0gIlJFQURfMTIiOyBicmVhazsKIAljYXNlIFdSSVRFXzEyOiB3aGF0ID0gIldSSVRFXzEyIjsgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuaAppbmRleCA3MzcyMzg2Li40YzFiMmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmgKQEAgLTQ1LDEwICs0NSw2IEBACiAgKiBtb2RlICovCiBpbnQgdXNiX3N0b3JfZXVzY3NpX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLWludCBzZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotI2VuZGlmCi0KIC8qIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gYWN0aXZhdGUgYWxsIGZvdXIgc2xvdHMgb24gdGhlIFVDUi02MVMyQgogICogZmxhc2ggcmVhZGVyICovCiBpbnQgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODE1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBsaWJ1c3VhbAorICoKKyAqIFRoZSBsaWJ1c3VhbCBjb250YWlucyB0aGUgdGFibGUgb2YgZGV2aWNlcyBjb21tb24gZm9yIHViIGFuZCB1c2Itc3RvcmFnZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl91c3VhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworLyoKKyAqLworI2RlZmluZSBVU1VfTU9EX0ZMX1RIUkVBRCAgIDEJLyogVGhyZWFkIGlzIHJ1bm5pbmcgKi8KKyNkZWZpbmUgVVNVX01PRF9GTF9QUkVTRU5UICAyCS8qIFRoZSBtb2R1bGUgaXMgbG9hZGVkICovCisKK3N0cnVjdCBtb2Rfc3RhdHVzIHsKKwl1bnNpZ25lZCBsb25nIGZsczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbW9kX3N0YXR1cyBzdGF0WzNdOworc3RhdGljIERFRklORV9TUElOTE9DSyh1c3VfbG9jayk7CisKKy8qCisgKi8KKyNkZWZpbmUgVVNCX1VTX0RFRkFVTFRfQklBUwlVU0JfVVNfVFlQRV9TVE9SCitzdGF0aWMgYXRvbWljX3QgdXN1X2JpYXMgPSBBVE9NSUNfSU5JVChVU0JfVVNfREVGQVVMVF9CSUFTKTsKKworI2RlZmluZSBCSUFTX05BTUVfU0laRSAgKHNpemVvZigidXNiLXN0b3JhZ2UiKSkKK3N0YXRpYyBjb25zdCBjaGFyICpiaWFzX25hbWVzWzNdID0geyAibm9uZSIsICJ1c2Itc3RvcmFnZSIsICJ1YiIgfTsKKworc3RhdGljIERFQ0xBUkVfTVVURVhfTE9DS0VEKHVzdV9pbml0X25vdGlmeSk7CitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKHVzdV9lbmRfbm90aWZ5KTsKK3N0YXRpYyBhdG9taWNfdCB0b3RhbF90aHJlYWRzID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyBpbnQgdXN1X3Byb2JlX3RocmVhZCh2b2lkICphcmcpOworCisvKgorICogVGhlIHRhYmxlLgorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCisjZGVmaW5lIFVTVUFMX0RFVih1c2VQcm90bywgdXNlVHJhbnMsIHVzZVR5cGUpIFwKK3sgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIHVzZVByb3RvLCB1c2VUcmFucyksIFwKKyAgLmRyaXZlcl9pbmZvID0gKCh1c2VUeXBlKTw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RvcmFnZV91c2JfaWRzIFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVU1VBTF9ERVYKKyN1bmRlZiBVTlVTVUFMX0RFVgorCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHN0b3JhZ2VfdXNiX2lkcyk7CisKKy8qCisgKiBAdHlwZTogdGhlIG1vZHVsZSB0eXBlIGFzIGFuIGludGVnZXIKKyAqLwordm9pZCB1c2JfdXN1YWxfc2V0X3ByZXNlbnQoaW50IHR5cGUpCit7CisJc3RydWN0IG1vZF9zdGF0dXMgKnN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHlwZSA8PSAwIHx8IHR5cGUgPj0gMykKKwkJcmV0dXJuOworCXN0ID0gJnN0YXRbdHlwZV07CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzdV9sb2NrLCBmbGFncyk7CisJc3QtPmZscyB8PSBVU1VfTU9EX0ZMX1BSRVNFTlQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXN1X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl91c3VhbF9zZXRfcHJlc2VudCk7CisKK3ZvaWQgdXNiX3VzdWFsX2NsZWFyX3ByZXNlbnQoaW50IHR5cGUpCit7CisJc3RydWN0IG1vZF9zdGF0dXMgKnN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHlwZSA8PSAwIHx8IHR5cGUgPj0gMykKKwkJcmV0dXJuOworCXN0ID0gJnN0YXRbdHlwZV07CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzdV9sb2NrLCBmbGFncyk7CisJc3QtPmZscyAmPSB+VVNVX01PRF9GTF9QUkVTRU5UOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzdV9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdXN1YWxfY2xlYXJfcHJlc2VudCk7CisKKy8qCisgKiBNYXRjaCB0aGUgY2FsbGluZyBkcml2ZXIgdHlwZSBhZ2FpbnN0IHRoZSB0YWJsZS4KKyAqIFJldHVybnM6IDAgaWYgdGhlIGRldmljZSBtYXRjaGVzLgorICovCitpbnQgdXNiX3VzdWFsX2NoZWNrX3R5cGUoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLCBpbnQgY2FsbGVyX3R5cGUpCit7CisJaW50IGlkX3R5cGUgPSBVU0JfVVNfVFlQRShpZC0+ZHJpdmVyX2luZm8pOworCisJaWYgKGNhbGxlcl90eXBlIDw9IDAgfHwgY2FsbGVyX3R5cGUgPj0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBEcml2ZXJzIGdyYWIgZml4ZWQgYXNzaWdubWVudCBkZXZpY2VzICovCisJaWYgKGlkX3R5cGUgPT0gY2FsbGVyX3R5cGUpCisJCXJldHVybiAwOworCS8qIERyaXZlcnMgZ3JhYiBkZXZpY2VzIGJpYXNlZCB0byB0aGVtICovCisJaWYgKGlkX3R5cGUgPT0gVVNCX1VTX1RZUEVfTk9ORSAmJiBjYWxsZXJfdHlwZSA9PSBhdG9taWNfcmVhZCgmdXN1X2JpYXMpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVOT0RFVjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl91c3VhbF9jaGVja190eXBlKTsKKworLyoKKyAqLworc3RhdGljIGludCB1c3VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCB0eXBlOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdHlwZSA9IFVTQl9VU19UWVBFKGlkLT5kcml2ZXJfaW5mbyk7CisJaWYgKHR5cGUgPT0gMCkKKwkJdHlwZSA9IGF0b21pY19yZWFkKCZ1c3VfYmlhcyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXN1X2xvY2ssIGZsYWdzKTsKKwlpZiAoKHN0YXRbdHlwZV0uZmxzICYgKFVTVV9NT0RfRkxfVEhSRUFEfFVTVV9NT0RfRkxfUFJFU0VOVCkpICE9IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXN1X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJc3RhdFt0eXBlXS5mbHMgfD0gVVNVX01PRF9GTF9USFJFQUQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXN1X2xvY2ssIGZsYWdzKTsKKworCXJjID0ga2VybmVsX3RocmVhZCh1c3VfcHJvYmVfdGhyZWFkLCAodm9pZCopdHlwZSwgQ0xPTkVfVk0pOworCWlmIChyYyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibGlidXN1YWw6ICIKKwkJICAgICJVbmFibGUgdG8gc3RhcnQgdGhlIHRocmVhZCBmb3IgJXM6ICVkXG4iLAorCQkgICAgYmlhc19uYW1lc1t0eXBlXSwgcmMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXN1X2xvY2ssIGZsYWdzKTsKKwkJc3RhdFt0eXBlXS5mbHMgJj0gflVTVV9NT0RfRkxfVEhSRUFEOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c3VfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmM7CS8qIE5vdCBiZWluZyAtRU5YSU8gY2F1c2VzIGEgbWVzc2FnZSBwcmludGVkICovCisJfQorCWF0b21pY19pbmMoJnRvdGFsX3RocmVhZHMpOworCisJcmV0dXJuIC1FTlhJTzsKK30KKworc3RhdGljIHZvaWQgdXN1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJOwkvKiBXZSBzaG91bGQgbm90IGJlIGhlcmUuICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c3VfZHJpdmVyID0geworCS5uYW1lID0JCSJsaWJ1c3VhbCIsCisJLnByb2JlID0JdXN1X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXN1X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Jc3RvcmFnZV91c2JfaWRzLAorfTsKKworLyoKKyAqIEEgd2hvbGUgbmV3IHRocmVhZCBmb3IgYSBwdXJwb3NlIG9mIHJlcXVlc3RfbW9kdWxlIHNlZW1zIHF1aXRlIHN0dXBpZC4KKyAqIFRoZSByZXF1ZXN0X21vZHVsZSBmb3JrcyBvbmNlIGluc2lkZSBhZ2Fpbi4gSG93ZXZlciwgaWYgd2UgYXR0ZW1wdAorICogdG8gbG9hZCBhIHN0b3JhZ2UgbW9kdWxlIGZyb20gb3VyIG93biBtb2Rwcm9iZSB0aHJlYWQsIHRoYXQgbW9kdWxlCisgKiByZWZlcmVuY2VzIG91ciBzeW1ib2xzLCB3aGljaCBjYW5ub3QgYmUgcmVzb2x2ZWQgdW50aWwgb3VyIG1vZHVsZSBpcworICogaW5pdGlhbGl6ZWQuIEkgd2lzaCB0aGVyZSB3YXMgYSB3YXkgdG8gd2FpdCBmb3IgdGhlIGVuZCBvZiBpbml0aWFsaXphdGlvbi4KKyAqIFRoZSBtb2R1bGUgbm90aWZpZXIgcmVwb3J0cyBNT0RVTEVfU1RBVEVfQ09NSU5HIG9ubHkuCisgKiBTbywgd2Ugd2FpdCB1bnRpbCBtb2R1bGUtPmluaXQgZW5kcyBhcyB0aGUgbmV4dCBiZXN0IHRoaW5nLgorICovCitzdGF0aWMgaW50IHVzdV9wcm9iZV90aHJlYWQodm9pZCAqYXJnKQoreworCWludCB0eXBlID0gKHVuc2lnbmVkIGxvbmcpIGFyZzsKKwlzdHJ1Y3QgbW9kX3N0YXR1cyAqc3QgPSAmc3RhdFt0eXBlXTsKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRhZW1vbml6ZSgibGlidXN1YWxfJWQiLCB0eXBlKTsJLyogInVzYi1zdG9yYWdlIiBpcyBraW5kYSB0b28gbG9uZyAqLworCisJLyogQSBjb21wbGV0aW9uIGRvZXMgbm90IHdvcmsgaGVyZSBiZWNhdXNlIGl0J3MgY291bnRlZC4gKi8KKwlkb3duKCZ1c3VfaW5pdF9ub3RpZnkpOworCXVwKCZ1c3VfaW5pdF9ub3RpZnkpOworCisJcmMgPSByZXF1ZXN0X21vZHVsZShiaWFzX25hbWVzW3R5cGVdKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXN1X2xvY2ssIGZsYWdzKTsKKwlpZiAocmMgPT0gMCAmJiAoc3QtPmZscyAmIFVTVV9NT0RfRkxfUFJFU0VOVCkgPT0gMCkgeworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgbGV0IHVzIGtlZXAgdGFicyBvbiBpdC4KKwkJICovCisJCXByaW50ayhLRVJOX05PVElDRSAibGlidXN1YWw6ICIKKwkJICAgICJtb2Rwcm9iZSBmb3IgJXMgc3VjY2VlZGVkLCBidXQgbW9kdWxlIGlzIG5vdCBwcmVzZW50XG4iLAorCQkgICAgYmlhc19uYW1lc1t0eXBlXSk7CisJfQorCXN0LT5mbHMgJj0gflVTVV9NT0RfRkxfVEhSRUFEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzdV9sb2NrLCBmbGFncyk7CisKKwljb21wbGV0ZV9hbmRfZXhpdCgmdXN1X2VuZF9ub3RpZnksIDApOworfQorCisvKgorICovCitzdGF0aWMgaW50IF9faW5pdCB1c2JfdXN1YWxfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gdXNiX3JlZ2lzdGVyKCZ1c3VfZHJpdmVyKTsKKwl1cCgmdXN1X2luaXRfbm90aWZ5KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfdXN1YWxfZXhpdCh2b2lkKQoreworCS8qCisJICogV2UgZG8gbm90IGNoZWNrIGZvciBhbnkgZHJpdmVycyBwcmVzZW50LCBiZWNhdXNlCisJICogdGhleSBrZWVwIHVzIHBpbm5lZCB3aXRoIHN5bWJvbCByZWZlcmVuY2VzLgorCSAqLworCisJdXNiX2RlcmVnaXN0ZXIoJnVzdV9kcml2ZXIpOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZ0b3RhbF90aHJlYWRzKSA+IDApIHsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdXN1X2VuZF9ub3RpZnkpOworCQlhdG9taWNfZGVjKCZ0b3RhbF90aHJlYWRzKTsKKwl9Cit9CisKKy8qCisgKiBWYWxpZGF0ZSBhbmQgYWNjZXB0IHRoZSBiaWFzIHBhcmFtZXRlci4KKyAqLworc3RhdGljIGludCB1c3Vfc2V0X2JpYXMoY29uc3QgY2hhciAqYmlhc19zLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgaTsKKwlpbnQgbGVuOworCWludCBiaWFzX24gPSAwOworCisJbGVuID0gc3RybGVuKGJpYXNfcyk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gLUVET007CisJaWYgKGJpYXNfc1tsZW4tMV0gPT0gJ1xuJykKKwkJLS1sZW47CisKKwlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKSB7CisJCWlmIChzdHJuY21wKGJpYXNfcywgYmlhc19uYW1lc1tpXSwgbGVuKSA9PSAwKSB7CisJCQliaWFzX24gPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGJpYXNfbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF0b21pY19zZXQoJnVzdV9iaWFzLCBiaWFzX24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzdV9nZXRfYmlhcyhjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXJldHVybiBzdHJsZW4oc3RyY3B5KGJ1ZmZlciwgYmlhc19uYW1lc1thdG9taWNfcmVhZCgmdXN1X2JpYXMpXSkpOworfQorCittb2R1bGVfaW5pdCh1c2JfdXN1YWxfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfdXN1YWxfZXhpdCk7CisKK21vZHVsZV9wYXJhbV9jYWxsKGJpYXMsIHVzdV9zZXRfYmlhcywgdXN1X2dldF9iaWFzLCBOVUxMLCBTX0lSVUdPfFNfSVdVU1IpOworX19NT0RVTEVfUEFSTV9UWVBFKGJpYXMsICJzdHJpbmciKTsKK01PRFVMRV9QQVJNX0RFU0MoYmlhcywgIkJpYXMgdG8gdXNiLXN0b3JhZ2Ugb3IgdWIiKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCmluZGV4IDg5NDAxYTUuLjU1ZWUyZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAlzdHJ1Y3QgdXJiICppcnE7CS8qIHVyYiBmb3IgaW50ZXJydXB0IGluIHJlcG9ydCAqLwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIGlucHV0IGRhdGEgKi8KIAlkbWFfYWRkcl90IGRhdGFfZG1hOworCXVuc2lnbmVkIGludCBpc19vcGVuOjE7CiB9OwogCiBzdGF0aWMgdm9pZCB1c2Jfb25ldG91Y2hfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC04OSw2ICs5MCw3IEBACiB7CiAJc3RydWN0IHVzYl9vbmV0b3VjaCAqb25ldG91Y2ggPSBkZXYtPnByaXZhdGU7CiAKKwlvbmV0b3VjaC0+aXNfb3BlbiA9IDE7CiAJb25ldG91Y2gtPmlycS0+ZGV2ID0gb25ldG91Y2gtPnVkZXY7CiAJaWYgKHVzYl9zdWJtaXRfdXJiKG9uZXRvdWNoLT5pcnEsIEdGUF9LRVJORUwpKSB7CiAJCWVycigidXNiX3N1Ym1pdF91cmIgZmFpbGVkIik7CkBAIC0xMDMsOCArMTA1LDMwIEBACiAJc3RydWN0IHVzYl9vbmV0b3VjaCAqb25ldG91Y2ggPSBkZXYtPnByaXZhdGU7CiAKIAl1c2Jfa2lsbF91cmIob25ldG91Y2gtPmlycSk7CisJb25ldG91Y2gtPmlzX29wZW4gPSAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgdm9pZCB1c2Jfb25ldG91Y2hfcG1faG9vayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGludCBhY3Rpb24pCit7CisJc3RydWN0IHVzYl9vbmV0b3VjaCAqb25ldG91Y2ggPSAoc3RydWN0IHVzYl9vbmV0b3VjaCAqKSB1cy0+ZXh0cmE7CisKKwlpZiAob25ldG91Y2gtPmlzX29wZW4pIHsKKwkJc3dpdGNoIChhY3Rpb24pIHsKKwkJY2FzZSBVU19TVVNQRU5EOgorCQkJdXNiX2tpbGxfdXJiKG9uZXRvdWNoLT5pcnEpOworCQkJYnJlYWs7CisJCWNhc2UgVVNfUkVTVU1FOgorCQkJaWYgKHVzYl9zdWJtaXRfdXJiKG9uZXRvdWNoLT5pcnEsIEdGUF9LRVJORUwpICE9IDApCisJCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIGludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcykKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNzLT5wdXNiX2RldjsKQEAgLTE4NSw2ICsyMDksOSBAQAogCiAJc3MtPmV4dHJhX2Rlc3RydWN0b3IgPSBvbmV0b3VjaF9yZWxlYXNlX2lucHV0OwogCXNzLT5leHRyYSA9IG9uZXRvdWNoOworI2lmZGVmIENPTkZJR19QTQorCXNzLT5zdXNwZW5kX3Jlc3VtZV9ob29rID0gdXNiX29uZXRvdWNoX3BtX2hvb2s7CisjZW5kaWYKIAogCWlucHV0X3JlZ2lzdGVyX2RldmljZShvbmV0b3VjaC0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5oCmluZGV4IDAyYmZmMDEuLjg0NWJlZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmgKQEAgLTQxLDIwICs0MSw2IEBACiAjaWZuZGVmIF9QUk9UT0NPTF9IXwogI2RlZmluZSBfUFJPVE9DT0xfSF8KIAotLyogU3ViIENsYXNzZXMgKi8KLQotI2RlZmluZSBVU19TQ19SQkMJMHgwMQkJLyogVHlwaWNhbGx5LCBmbGFzaCBkZXZpY2VzICovCi0jZGVmaW5lIFVTX1NDXzgwMjAJMHgwMgkJLyogQ0QtUk9NICovCi0jZGVmaW5lIFVTX1NDX1FJQwkweDAzCQkvKiBRSUMtMTU3IFRhcGVzICovCi0jZGVmaW5lIFVTX1NDX1VGSQkweDA0CQkvKiBGbG9wcHkgKi8KLSNkZWZpbmUgVVNfU0NfODA3MAkweDA1CQkvKiBSZW1vdmFibGUgbWVkaWEgKi8KLSNkZWZpbmUgVVNfU0NfU0NTSQkweDA2CQkvKiBUcmFuc3BhcmVudCAqLwotI2RlZmluZSBVU19TQ19JU0QyMDAgICAgMHgwNwkJLyogSVNEMjAwIEFUQSAqLwotI2RlZmluZSBVU19TQ19NSU4JVVNfU0NfUkJDCi0jZGVmaW5lIFVTX1NDX01BWAlVU19TQ19JU0QyMDAKLQotI2RlZmluZSBVU19TQ19ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCi0KIC8qIFByb3RvY29sIGhhbmRsaW5nIHJvdXRpbmVzICovCiBleHRlcm4gdm9pZCB1c2Jfc3Rvcl9BVEFQSV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwogZXh0ZXJuIHZvaWQgdXNiX3N0b3JfcWljMTU3X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwppbmRleCAwZWEyZjVhLi5mYjhiYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKQEAgLTEzMywxMyArMTMzLDExIEBACiAJeyAwLH0KIH07CiAKLSNkZWZpbmUgU0laRShhKQkoc2l6ZW9mKGEpL3NpemVvZigoYSlbMF0pKQotCiBzdGF0aWMgc3RydWN0IG5hbmRfZmxhc2hfZGV2ICoKIG5hbmRfZmluZF9pZCh1bnNpZ25lZCBjaGFyIGlkKSB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgU0laRShuYW5kX2ZsYXNoX2lkcyk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYW5kX2ZsYXNoX2lkcyk7IGkrKykKIAkJaWYgKG5hbmRfZmxhc2hfaWRzW2ldLm1vZGVsX2lkID09IGlkKQogCQkJcmV0dXJuICYobmFuZF9mbGFzaF9pZHNbaV0pOwogCXJldHVybiBOVUxMOwpAQCAtMjE0LDYgKzIxMiwyMCBAQAogICogVGhlIGFjdHVhbCBkcml2ZXIgc3RhcnRzIGhlcmUuCiAgKi8KIAorc3RydWN0IHNkZHIwOV9jYXJkX2luZm8geworCXVuc2lnbmVkIGxvbmcJY2FwYWNpdHk7CS8qIFNpemUgb2YgY2FyZCBpbiBieXRlcyAqLworCWludAkJcGFnZXNpemU7CS8qIFNpemUgb2YgcGFnZSBpbiBieXRlcyAqLworCWludAkJcGFnZXNoaWZ0OwkvKiBsb2cyIG9mIHBhZ2VzaXplICovCisJaW50CQlibG9ja3NpemU7CS8qIFNpemUgb2YgYmxvY2sgaW4gcGFnZXMgKi8KKwlpbnQJCWJsb2Nrc2hpZnQ7CS8qIGxvZzIgb2YgYmxvY2tzaXplICovCisJaW50CQlibG9ja21hc2s7CS8qIDJeYmxvY2tzaGlmdCAtIDEgKi8KKwlpbnQJCSpsYmFfdG9fcGJhOwkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIG1hcCAqLworCWludAkJKnBiYV90b19sYmE7CS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgbWFwICovCisJaW50CQlsYmFjdDsJCS8qIG51bWJlciBvZiBhdmFpbGFibGUgcGFnZXMgKi8KKwlpbnQJCWZsYWdzOworI2RlZmluZQlTRERSMDlfV1AJMQkJLyogd3JpdGUgcHJvdGVjdGVkICovCit9OworCiAvKgogICogT24gbXkgMTZNQiBjYXJkLCBjb250cm9sIGJsb2NrcyBoYXZlIHNpemUgNjQgKDE2IHJlYWwgY29udHJvbCBieXRlcywKICAqIGFuZCA0OCBqdW5rIGJ5dGVzKS4gSW4gcmVhbGl0eSBvZiBjb3Vyc2UgdGhlIGNhcmQgdXNlcyAxNiBjb250cm9sIGJ5dGVzLApAQCAtMjM3LDcgKzI0OSw3IEBACiAjZGVmaW5lIFNQQVJFICAgIDB4ZmZmZmZmZmUKICNkZWZpbmUgVU5VU0FCTEUgMHhmZmZmZmZmZAogCi1zdGF0aWMgaW50IGVyYXNlX2JhZF9sYmFfZW50cmllcyA9IDA7CitzdGF0aWMgY29uc3QgaW50IGVyYXNlX2JhZF9sYmFfZW50cmllcyA9IDA7CiAKIC8qIHNlbmQgdmVuZG9yIGludGVyZmFjZSBjb21tYW5kICgweDQxKSAqLwogLyogY2FsbGVkIGZvciByZXF1ZXN0cyAwLCAxLCA4ICovCkBAIC0yNjAsOCArMjcyLDExIEBACiAKIAlyYyA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHBpcGUsIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAogCQkJCSAgIDAsIDAsIHhmZXJfZGF0YSwgeGZlcl9sZW4pOwotCXJldHVybiAocmMgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgOgotCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKKwlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgVVNCX1NUT1JfWEZFUl9HT09EOglyZXR1cm4gMDsKKwkJY2FzZSBVU0JfU1RPUl9YRkVSX1NUQUxMRUQ6CXJldHVybiAtRVBJUEU7CisJCWRlZmF1bHQ6CQkJcmV0dXJuIC1FSU87CisJfQogfQogCiBzdGF0aWMgaW50CkBAIC0zMDgsMjAgKzMyMywxMiBAQAogCWNvbW1hbmRbNF0gPSBidWZsZW47CiAKIAlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKLQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7Ci0JCVVTX0RFQlVHUCgicmVxdWVzdCBzZW5zZSBmYWlsZWRcbiIpOworCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7Ci0JfQogCiAJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKIAkJCXNlbnNlYnVmLCBidWZsZW4sIE5VTEwpOwotCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7Ci0JCVVTX0RFQlVHUCgicmVxdWVzdCBzZW5zZSBidWxrIGluIGZhaWxlZFxuIik7Ci0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Ci0JfSBlbHNlIHsKLQkJVVNfREVCVUdQKCJyZXF1ZXN0IHNlbnNlIHdvcmtlZFxuIik7Ci0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKLQl9CisJcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8gMCA6IC1FSU8pOwogfQogCiAvKgpAQCAtMzY5LDcgKzM3Niw3IEBACiAKIAlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKIAotCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwlpZiAocmVzdWx0KSB7CiAJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBzZW5kX2NvbnRyb2wgaW4gc2RkcjA5X3JlYWQyJWQgJWRcbiIsCiAJCQkgIHgsIHJlc3VsdCk7CiAJCXJldHVybiByZXN1bHQ7CkBAIC0zODEsOSArMzg4LDkgQEAKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewogCQlVU19ERUJVR1AoIlJlc3VsdCBmb3IgYnVsa190cmFuc2ZlciBpbiBzZGRyMDlfcmVhZDIlZCAlZFxuIiwKIAkJCSAgeCwgcmVzdWx0KTsKLQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJcmV0dXJuIC1FSU87CiAJfQotCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTQ5Nyw3ICs1MDQsNyBAQAogCiAJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7CiAKLQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCWlmIChyZXN1bHQpCiAJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBzZW5kX2NvbnRyb2wgaW4gc2RkcjA5X2VyYXNlICVkXG4iLAogCQkJICByZXN1bHQpOwogCkBAIC01NTUsNyArNTYyLDcgQEAKIAogCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOwogCi0JaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCWlmIChyZXN1bHQpIHsKIAkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfY29udHJvbCBpbiBzZGRyMDlfd3JpdGVYICVkXG4iLAogCQkJICByZXN1bHQpOwogCQlyZXR1cm4gcmVzdWx0OwpAQCAtNTY3LDkgKzU3NCw5IEBACiAJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKIAkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIGJ1bGtfdHJhbnNmZXIgaW4gc2RkcjA5X3dyaXRlWCAlZFxuIiwKIAkJCSAgcmVzdWx0KTsKLQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJcmV0dXJuIC1FSU87CiAJfQotCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlyZXR1cm4gMDsKIH0KIAogLyogZXJhc2UgYWRkcmVzcywgd3JpdGUgc2FtZSBhZGRyZXNzICovCkBAIC02MzMsNyArNjQwLDcgQEAKIAogCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgNCpuc2crMyk7CiAKLQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJaWYgKHJlc3VsdCkgewogCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV9yZWFkX3NnICVkXG4iLAogCQkJICByZXN1bHQpOwogCQlyZXR1cm4gcmVzdWx0OwpAQCAtNjQxLDcgKzY0OCw3IEBACiAKIAlidWYgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKGJ1bGtsZW4sIEdGUF9OT0lPKTsKIAlpZiAoIWJ1ZikKLQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAogCQkJCSAgICAgICBidWYsIGJ1bGtsZW4sIE5VTEwpOwpAQCAtNjQ5LDEwICs2NTYsMTAgQEAKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewogCQlVU19ERUJVR1AoIlJlc3VsdCBmb3IgYnVsa190cmFuc2ZlciBpbiBzZGRyMDlfcmVhZF9zZyAlZFxuIiwKIAkJCSAgcmVzdWx0KTsKLQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTY4MSwxNCArNjg4LDEzIEBACiAJY29tbWFuZFsxXSA9IExVTkJJVFM7CiAKIAlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKLQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAogCQkJCSAgICAgICBkYXRhLCA2NCwgTlVMTCk7CiAJKnN0YXR1cyA9IGRhdGFbMF07Ci0JcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8KLQkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDogVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKKwlyZXR1cm4gKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0dPT0QgPyAwIDogLUVJTyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTcwMyw2ICs3MDksMTMgQEAKIAl1bnNpZ25lZCBpbnQgbGVuLCBpbmRleCwgb2Zmc2V0OwogCWludCByZXN1bHQ7CiAKKwkvLyBGaWd1cmUgb3V0IHRoZSBpbml0aWFsIExCQSBhbmQgcGFnZQorCWxiYSA9IGFkZHJlc3MgPj4gaW5mby0+YmxvY2tzaGlmdDsKKwlwYWdlID0gKGFkZHJlc3MgJiBpbmZvLT5ibG9ja21hc2spOworCW1heGxiYSA9IGluZm8tPmNhcGFjaXR5ID4+IChpbmZvLT5wYWdlc2hpZnQgKyBpbmZvLT5ibG9ja3NoaWZ0KTsKKwlpZiAobGJhID49IG1heGxiYSkKKwkJcmV0dXJuIC1FSU87CisKIAkvLyBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKIAkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKIAkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KQEAgLTcxMSwxOCArNzI0LDEzIEBACiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJzZGRyMDlfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JLy8gRmlndXJlIG91dCB0aGUgaW5pdGlhbCBMQkEgYW5kIHBhZ2UKLQlsYmEgPSBhZGRyZXNzID4+IGluZm8tPmJsb2Nrc2hpZnQ7Ci0JcGFnZSA9IChhZGRyZXNzICYgaW5mby0+YmxvY2ttYXNrKTsKLQltYXhsYmEgPSBpbmZvLT5jYXBhY2l0eSA+PiAoaW5mby0+cGFnZXNoaWZ0ICsgaW5mby0+YmxvY2tzaGlmdCk7Ci0KIAkvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBieSBjaGVja2luZyBmb3IKIAkvLyBjb250aWd1b3VzIExCQSdzLiBBbm90aGVyIGV4ZXJjaXNlIGxlZnQgdG8gdGhlIHN0dWRlbnQuCiAKLQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlyZXN1bHQgPSAwOwogCWluZGV4ID0gb2Zmc2V0ID0gMDsKIAogCXdoaWxlIChzZWN0b3JzID4gMCkgewpAQCAtNzM1LDcgKzc0Myw3IEBACiAJCWlmIChsYmEgPj0gbWF4bGJhKSB7CiAJCQlVU19ERUJVR1AoIkVycm9yOiBSZXF1ZXN0ZWQgbGJhICV1IGV4Y2VlZHMgIgogCQkJCSAgIm1heGltdW0gJXVcbiIsIGxiYSwgbWF4bGJhKTsKLQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCXJlc3VsdCA9IC1FSU87CiAJCQlicmVhazsKIAkJfQogCkBAIC03NDksNyArNzU3LDcgQEAKIAogCQkJLyogVGhpcyBpcyBub3QgcmVhbGx5IGFuIGVycm9yLiBJdCBqdXN0IG1lYW5zCiAJCQkgICB0aGF0IHRoZSBibG9jayBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuLgotCQkJICAgSW5zdGVhZCBvZiByZXR1cm5pbmcgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SCisJCQkgICBJbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvcgogCQkJICAgaXQgaXMgYmV0dGVyIHRvIHJldHVybiBhbGwgemVybyBkYXRhLiAqLwogCiAJCQltZW1zZXQoYnVmZmVyLCAwLCBsZW4pOwpAQCAtNzY0LDcgKzc3Miw3IEBACiAKIAkJCXJlc3VsdCA9IHNkZHIwOV9yZWFkMjAodXMsIGFkZHJlc3M+PjEsCiAJCQkJCXBhZ2VzLCBpbmZvLT5wYWdlc2hpZnQsIGJ1ZmZlciwgMCk7Ci0JCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJaWYgKHJlc3VsdCkKIAkJCQlicmVhazsKIAkJfQogCkBAIC04MzAsNyArODM4LDcgQEAKIAkJcGJhID0gc2RkcjA5X2ZpbmRfdW51c2VkX3BiYShpbmZvLCBsYmEpOwogCQlpZiAoIXBiYSkgewogCQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7Ci0JCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAkJaW5mby0+cGJhX3RvX2xiYVtwYmFdID0gbGJhOwogCQlpbmZvLT5sYmFfdG9fcGJhW2xiYV0gPSBwYmE7CkBAIC04NDEsNyArODQ5LDcgQEAKIAkJLyogTWF5YmUgaXQgaXMgaW1wb3NzaWJsZSB0byB3cml0ZSB0byBQQkEgMS4KIAkJICAgRmFrZSBzdWNjZXNzLCBidXQgZG9uJ3QgZG8gYW55dGhpbmcuICovCiAJCXByaW50aygic2RkcjA5OiBhdm9pZCB3cml0aW5nIHRvIHBiYSAxXG4iKTsKLQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCQlyZXR1cm4gMDsKIAl9CiAKIAlwYWdlbGVuID0gKDEgPDwgaW5mby0+cGFnZXNoaWZ0KSArICgxIDw8IENPTlRST0xfU0hJRlQpOwpAQCAtODUwLDcgKzg1OCw3IEBACiAJYWRkcmVzcyA9IChwYmEgPDwgKGluZm8tPnBhZ2VzaGlmdCArIGluZm8tPmJsb2Nrc2hpZnQpKTsKIAlyZXN1bHQgPSBzZGRyMDlfcmVhZDIyKHVzLCBhZGRyZXNzPj4xLCBpbmZvLT5ibG9ja3NpemUsCiAJCQkgICAgICAgaW5mby0+cGFnZXNoaWZ0LCBibG9ja2J1ZmZlciwgMCk7Ci0JaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCiAJLyogY2hlY2sgb2xkIGNvbnRlbnRzIGFuZCBmaWxsIGxiYSAqLwpAQCAtODk3LDcgKzkwNSw3IEBACiAJewogCQl1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IDA7CiAJCWludCByZXN1bHQyID0gc2RkcjA5X3JlYWRfc3RhdHVzKHVzLCAmc3RhdHVzKTsKLQkJaWYgKHJlc3VsdDIgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCWlmIChyZXN1bHQyKQogCQkJVVNfREVCVUdQKCJzZGRyMDlfd3JpdGVfaW5wbGFjZTogY2Fubm90IHJlYWQgc3RhdHVzXG4iKTsKIAkJZWxzZSBpZiAoc3RhdHVzICE9IDB4YzApCiAJCQlVU19ERUJVR1AoInNkZHIwOV93cml0ZV9pbnBsYWNlOiBzdGF0dXMgYWZ0ZXIgd3JpdGU6IDB4JXhcbiIsCkBAIC05MjAsMTMgKzkyOCwyMCBAQAogCQkgIHVuc2lnbmVkIGludCBzZWN0b3JzKSB7CiAKIAlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKSB1cy0+ZXh0cmE7Ci0JdW5zaWduZWQgaW50IGxiYSwgcGFnZSwgcGFnZXM7CisJdW5zaWduZWQgaW50IGxiYSwgbWF4bGJhLCBwYWdlLCBwYWdlczsKIAl1bnNpZ25lZCBpbnQgcGFnZWxlbiwgYmxvY2tsZW47CiAJdW5zaWduZWQgY2hhciAqYmxvY2tidWZmZXI7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXVuc2lnbmVkIGludCBsZW4sIGluZGV4LCBvZmZzZXQ7CiAJaW50IHJlc3VsdDsKIAorCS8vIEZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgTEJBIGFuZCBwYWdlCisJbGJhID0gYWRkcmVzcyA+PiBpbmZvLT5ibG9ja3NoaWZ0OworCXBhZ2UgPSAoYWRkcmVzcyAmIGluZm8tPmJsb2NrbWFzayk7CisJbWF4bGJhID0gaW5mby0+Y2FwYWNpdHkgPj4gKGluZm8tPnBhZ2VzaGlmdCArIGluZm8tPmJsb2Nrc2hpZnQpOworCWlmIChsYmEgPj0gbWF4bGJhKQorCQlyZXR1cm4gLUVJTzsKKwogCS8vIGJsb2NrYnVmZmVyIGlzIHVzZWQgZm9yIHJlYWRpbmcgaW4gdGhlIG9sZCBkYXRhLCBvdmVyd3JpdGluZwogCS8vIHdpdGggdGhlIG5ldyBkYXRhLCBhbmQgcGVyZm9ybWluZyBFQ0MgY2FsY3VsYXRpb25zCiAKQEAgLTkzOCw3ICs5NTMsNyBAQAogCWJsb2NrYnVmZmVyID0ga21hbGxvYyhibG9ja2xlbiwgR0ZQX05PSU8pOwogCWlmICghYmxvY2tidWZmZXIpIHsKIAkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8vIFNpbmNlIHdlIGRvbid0IHdyaXRlIHRoZSB1c2VyIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRldmljZSwKQEAgLTk1MCwxNCArOTY1LDEwIEBACiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCXByaW50aygic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlrZnJlZShibG9ja2J1ZmZlcik7Ci0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCS8vIEZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgTEJBIGFuZCBwYWdlCi0JbGJhID0gYWRkcmVzcyA+PiBpbmZvLT5ibG9ja3NoaWZ0OwotCXBhZ2UgPSAoYWRkcmVzcyAmIGluZm8tPmJsb2NrbWFzayk7Ci0KLQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlyZXN1bHQgPSAwOwogCWluZGV4ID0gb2Zmc2V0ID0gMDsKIAogCXdoaWxlIChzZWN0b3JzID4gMCkgewpAQCAtOTY3LDEzICs5NzgsMjEgQEAKIAkJcGFnZXMgPSBtaW4oc2VjdG9ycywgaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CiAJCWxlbiA9IChwYWdlcyA8PCBpbmZvLT5wYWdlc2hpZnQpOwogCisJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KKwkJaWYgKGxiYSA+PSBtYXhsYmEpIHsKKwkJCVVTX0RFQlVHUCgiRXJyb3I6IFJlcXVlc3RlZCBsYmEgJXUgZXhjZWVkcyAiCisJCQkJICAibWF4aW11bSAldVxuIiwgbGJhLCBtYXhsYmEpOworCQkJcmVzdWx0ID0gLUVJTzsKKwkJCWJyZWFrOworCQl9CisKIAkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgogCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCiAJCQkJJmluZGV4LCAmb2Zmc2V0LCBGUk9NX1hGRVJfQlVGKTsKIAogCQlyZXN1bHQgPSBzZGRyMDlfd3JpdGVfbGJhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzLAogCQkJCWJ1ZmZlciwgYmxvY2tidWZmZXIpOwotCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlpZiAocmVzdWx0KQogCQkJYnJlYWs7CiAKIAkJcGFnZSA9IDA7CkBAIC0xMDIyLDcgKzEwNDEsNyBAQAogCWNvbW1hbmRbMV0gPSBMVU5CSVRTOwogCiAJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7Ci0JaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCiAJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKQEAgLTEwMzEsOCArMTA1MCw3IEBACiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJZGV2aWNlSURbaV0gPSBjb250ZW50W2ldOwogCi0JcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8KLQkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDogVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKKwlyZXR1cm4gKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0dPT0QgPyAwIDogLUVJTyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEwNDEsNyArMTA1OSw3IEBACiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CiAKIAlyZXN1bHQgPSBzZGRyMDlfcmVhZF9zdGF0dXModXMsICZzdGF0dXMpOwotCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwlpZiAocmVzdWx0KSB7CiAJCVVTX0RFQlVHUCgic2RkcjA5X2dldF93cDogcmVhZF9zdGF0dXMgZmFpbHNcbiIpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KQEAgLTEwNTcsNyArMTA3NSw3IEBACiAJaWYgKHN0YXR1cyAmIDB4MSkKIAkJVVNfREVCVUdQKCIgRXJyb3IiKTsKIAlVU19ERUJVR1AoIlxuIik7Ci0JcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCXJldHVybiAwOwogfQogCiAjaWYgMApAQCAtMTA4OSw3ICsxMTA3LDcgQEAKIAogCXJlc3VsdCA9IHNkZHIwOV9yZWFkX2RldmljZUlEKHVzLCBkZXZpY2VJRCk7CiAKLQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJaWYgKHJlc3VsdCkgewogCQlVU19ERUJVR1AoIlJlc3VsdCBvZiByZWFkX2RldmljZUlEIGlzICVkXG4iLCByZXN1bHQpOwogCQlwcmludGsoInNkZHIwOTogY291bGQgbm90IHJlYWQgY2FyZCBpbmZvXG4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMjAwLDcgKzEyMTgsNyBAQAogCQkJCXVzLCBhZGRyZXNzPj4xLAogCQkJCW1pbihhbGxvY19ibG9ja3MsIG51bWJsb2NrcyAtIGkpLAogCQkJCWJ1ZmZlciwgMCk7Ci0JCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQlpZiAocmVzdWx0KSB7CiAJCQkJcmVzdWx0ID0gLTE7CiAJCQkJZ290byBkb25lOwogCQkJfQpAQCAtMTM0MiwyOSArMTM2MCw1MyBAQAogCWtmcmVlKGluZm8tPnBiYV90b19sYmEpOwogfQogCi1zdGF0aWMgdm9pZAotc2RkcjA5X2luaXRfY2FyZF9pbmZvKHN0cnVjdCB1c19kYXRhICp1cykgewotCWlmICghdXMtPmV4dHJhKSB7Ci0JCXVzLT5leHRyYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvKSwgR0ZQX05PSU8pOwotCQlpZiAodXMtPmV4dHJhKSB7Ci0JCQltZW1zZXQodXMtPmV4dHJhLCAwLCBzaXplb2Yoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8pKTsKLQkJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gc2RkcjA5X2NhcmRfaW5mb19kZXN0cnVjdG9yOwotCQl9CitzdGF0aWMgaW50CitzZGRyMDlfY29tbW9uX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisJaW50IHJlc3VsdDsKKworCS8qIHNldCB0aGUgY29uZmlndXJhdGlvbiAtLSBTVEFMTCBpcyBhbiBhY2NlcHRhYmxlIHJlc3BvbnNlIGhlcmUgKi8KKwlpZiAodXMtPnB1c2JfZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCVVTX0RFQlVHUCgiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwgdXMtPnB1c2JfZGV2CisJCQkJLT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKworCXJlc3VsdCA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHVzLT5wdXNiX2Rldik7CisJVVNfREVCVUdQKCJSZXN1bHQgb2YgdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gaXMgJWRcbiIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJVVNfREVCVUdQKCItLSBzdGFsbCBvbiBjb250cm9sIGludGVyZmFjZVxuIik7CisJfSBlbHNlIGlmIChyZXN1bHQgIT0gMCkgeworCQkvKiBpdCdzIG5vdCBhIHN0YWxsLCBidXQgYW5vdGhlciBlcnJvciAtLSB0aW1lIHRvIGJhaWwgKi8KKwkJVVNfREVCVUdQKCItLSBVbmtub3duIGVycm9yLiAgUmVqZWN0aW5nIGRldmljZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXVzLT5leHRyYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvKSwgR0ZQX05PSU8pOworCWlmICghdXMtPmV4dHJhKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1cy0+ZXh0cmFfZGVzdHJ1Y3RvciA9IHNkZHIwOV9jYXJkX2luZm9fZGVzdHJ1Y3RvcjsKKworCW5hbmRfaW5pdF9lY2MoKTsKKwlyZXR1cm4gMDsKIH0KIAorCiAvKgogICogVGhpcyBpcyBuZWVkZWQgYXQgYSB2ZXJ5IGVhcmx5IHN0YWdlLiBJZiB0aGlzIGlzIG5vdCBsaXN0ZWQgaW4gdGhlCiAgKiB1bnVzdWFsIGRldmljZXMgbGlzdCBidXQgY2FsbGVkIGZyb20gaGVyZSB0aGVuIExVTiAwIG9mIHRoZSBjb21ibyByZWFkZXIKICAqIGlzIG5vdCByZWNvZ25pemVkLiBCdXQgSSBkbyBub3Qga25vdyB3aGF0IHByZWNpc2VseSB0aGVzZSBjYWxscyBkby4KICAqLwogaW50Ci1zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKK3VzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CiAJaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOwogCisJcmVzdWx0ID0gc2RkcjA5X2NvbW1vbl9pbml0KHVzKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCiAJcmVzdWx0ID0gc2RkcjA5X3NlbmRfY29tbWFuZCh1cywgMHgwMSwgVVNCX0RJUl9JTiwgZGF0YSwgMik7Ci0JaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCWlmIChyZXN1bHQpIHsKIAkJVVNfREVCVUdQKCJzZGRyMDlfaW5pdDogc2VuZF9jb21tYW5kIGZhaWxzXG4iKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC0xMzczLDcgKzE0MTUsNyBAQAogCS8vIGdldCAwNyAwMgogCiAJcmVzdWx0ID0gc2RkcjA5X3NlbmRfY29tbWFuZCh1cywgMHgwOCwgVVNCX0RJUl9JTiwgZGF0YSwgMik7Ci0JaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCWlmIChyZXN1bHQpIHsKIAkJVVNfREVCVUdQKCJzZGRyMDlfaW5pdDogMm5kIHNlbmRfY29tbWFuZCBmYWlsc1xuIik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQpAQCAtMTM4Miw3ICsxNDI0LDcgQEAKIAkvLyBnZXQgMDcgMDAKIAogCXJlc3VsdCA9IHNkZHIwOV9yZXF1ZXN0X3NlbnNlKHVzLCBkYXRhLCAxOCk7Ci0JaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAmJiBkYXRhWzJdICE9IDApIHsKKwlpZiAocmVzdWx0ID09IDAgJiYgZGF0YVsyXSAhPSAwKSB7CiAJCWludCBqOwogCQlmb3IgKGo9MDsgajwxODsgaisrKQogCQkJcHJpbnRrKCIgJTAyWCIsIGRhdGFbal0pOwpAQCAtMTM5OCw3ICsxNDQwLDcgQEAKIAogCS8vIHRlc3QgdW5pdCByZWFkeQogCi0JcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwkJLyogbm90IHJlc3VsdCAqLworCXJldHVybiAwOwkJLyogbm90IHJlc3VsdCAqLwogfQogCiAvKgpAQCAtMTQyNywxMyArMTQ2OSw2IEBACiAJfTsKIAogCWluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7Ci0JaWYgKCFpbmZvKSB7Ci0JCW5hbmRfaW5pdF9lY2MoKTsKLQkJc2RkcjA5X2luaXRfY2FyZF9pbmZvKHVzKTsKLQkJaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKLQkJaWYgKCFpbmZvKQotCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKLQl9CiAKIAlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UgJiYgaGF2ZWZha2VzZW5zZSkgewogCQkvKiBmb3IgYSBmYWtlZCBjb21tYW5kLCB3ZSBoYXZlIHRvIGZvbGxvdyB3aXRoIGEgZmFrZWQgc2Vuc2UgKi8KQEAgLTE1MzYsNyArMTU3MSw5IEBACiAJCVVTX0RFQlVHUCgiUkVBRF8xMDogcmVhZCBwYWdlICVkIHBhZ2VjdCAlZFxuIiwKIAkJCSAgcGFnZSwgcGFnZXMpOwogCi0JCXJldHVybiBzZGRyMDlfcmVhZF9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7CisJCXJlc3VsdCA9IHNkZHIwOV9yZWFkX2RhdGEodXMsIHBhZ2UsIHBhZ2VzKTsKKwkJcmV0dXJuIChyZXN1bHQgPT0gMCA/IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDoKKwkJCQlVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpOwogCX0KIAogCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTApIHsKQEAgLTE1NDksNyArMTU4Niw5IEBACiAJCVVTX0RFQlVHUCgiV1JJVEVfMTA6IHdyaXRlIHBhZ2UgJWQgcGFnZWN0ICVkXG4iLAogCQkJICBwYWdlLCBwYWdlcyk7CiAKLQkJcmV0dXJuIHNkZHIwOV93cml0ZV9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7CisJCXJlc3VsdCA9IHNkZHIwOV93cml0ZV9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7CisJCXJldHVybiAocmVzdWx0ID09IDAgPyBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCA6CisJCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKIAl9CiAKIAkvKiBjYXRjaC1hbGwgZm9yIGFsbCBvdGhlciBjb21tYW5kcywgZXhjZXB0CkBAIC0xNTc1LDEwICsxNjE0LDEwIEBACiAJVVNfREVCVUdQKCJTRERSMDk6IFNlbmQgY29udHJvbCBmb3IgY29tbWFuZCAlc1xuIiwgcHRyKTsKIAogCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgc3JiLT5jbW5kLCAxMik7Ci0JaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCWlmIChyZXN1bHQpIHsKIAkJVVNfREVCVUdQKCJzZGRyMDlfdHJhbnNwb3J0OiBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQgIgogCQkJICAicmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKLQkJcmV0dXJuIHJlc3VsdDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKIAlpZiAoc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPT0gMCkKQEAgLTE2MDYsMyArMTY0NSwxMCBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAorLyoKKyAqIEluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBzZGRyMDkgc3ViZHJpdmVyCisgKi8KK2ludAordXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisJcmV0dXJuIHNkZHIwOV9jb21tb25faW5pdCh1cyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaAppbmRleCBjOWQ3OGQ2Li5jMDMwODlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmgKQEAgLTMxLDE4ICszMSw3IEBACiAKIGV4dGVybiBpbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CiAKLXN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvIHsKLQl1bnNpZ25lZCBsb25nCWNhcGFjaXR5OwkvKiBTaXplIG9mIGNhcmQgaW4gYnl0ZXMgKi8KLQlpbnQJCXBhZ2VzaXplOwkvKiBTaXplIG9mIHBhZ2UgaW4gYnl0ZXMgKi8KLQlpbnQJCXBhZ2VzaGlmdDsJLyogbG9nMiBvZiBwYWdlc2l6ZSAqLwotCWludAkJYmxvY2tzaXplOwkvKiBTaXplIG9mIGJsb2NrIGluIHBhZ2VzICovCi0JaW50CQlibG9ja3NoaWZ0OwkvKiBsb2cyIG9mIGJsb2Nrc2l6ZSAqLwotCWludAkJYmxvY2ttYXNrOwkvKiAyXmJsb2Nrc2hpZnQgLSAxICovCi0JaW50CQkqbGJhX3RvX3BiYTsJLyogbG9naWNhbCB0byBwaHlzaWNhbCBtYXAgKi8KLQlpbnQJCSpwYmFfdG9fbGJhOwkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIG1hcCAqLwotCWludAkJbGJhY3Q7CQkvKiBudW1iZXIgb2YgYXZhaWxhYmxlIHBhZ2VzICovCi0JaW50CQlmbGFnczsKLSNkZWZpbmUJU0REUjA5X1dQCTEJCS8qIHdyaXRlIHByb3RlY3RlZCAqLwotfTsKK2V4dGVybiBpbnQgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5oCmluZGV4IDBhMzYyY2MuLjYzM2E3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuaApAQCAtNDEsMzkgKzQxLDggQEAKICNpZm5kZWYgX1RSQU5TUE9SVF9IXwogI2RlZmluZSBfVFJBTlNQT1JUX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIAotLyogUHJvdG9jb2xzICovCi0KLSNkZWZpbmUgVVNfUFJfQ0JJCTB4MDAJCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVVNfUFJfQ0IJMHgwMQkJLyogQ29udHJvbC9CdWxrIHcvbyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVVNfUFJfQlVMSwkweDUwCQkvKiBidWxrIG9ubHkgKi8KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLSNkZWZpbmUgVVNfUFJfVVNCQVQJMHg4MAkJLyogU0NNLUFUQVBJIGJyaWRnZSAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotI2RlZmluZSBVU19QUl9FVVNCX1NERFIwOQkweDgxCS8qIFNDTS1TQ1NJIGJyaWRnZSBmb3IgU0REUi0wOSAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotI2RlZmluZSBVU19QUl9TRERSNTUJMHg4MgkJLyogU0REUi01NSAobWFkZSB1cCkgKi8KLSNlbmRpZgotI2RlZmluZSBVU19QUl9EUENNX1VTQiAgMHhmMAkJLyogQ29tYmluYXRpb24gQ0IvU0REUjA5ICovCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQotI2RlZmluZSBVU19QUl9GUkVFQ09NICAgMHhmMQkJLyogRnJlZWNvbSAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotI2RlZmluZSBVU19QUl9EQVRBRkFCICAgMHhmMgkJLyogRGF0YWZhYiBjaGlwc2V0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKLSNkZWZpbmUgVVNfUFJfSlVNUFNIT1QgIDB4ZjMJCS8qIExleGFyIEp1bXBzaG90ICovCi0jZW5kaWYKLQotI2RlZmluZSBVU19QUl9ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCi0KIC8qCiAgKiBCdWxrIG9ubHkgZGF0YSBzdHJ1Y3R1cmVzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGY1ZjQ3YTMuLmRjMzAxZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtNzksMTMgKzc5LDYgQEAKIAkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXQsIDApLAogI2VuZGlmCiAKLS8qIFBhdGNoIHN1Ym1pdHRlZCBieSBNaWhuZWEtQ29zdGluIEdyaWdvcmUgPG1paG5lYUB6dWx1LnJvPiAqLwotVU5VU1VBTF9ERVYoICAweDA0MGQsIDB4NjIwNSwgMHgwMDAzLCAweDAwMDMsCi0JCSJWSUEgVGVjaG5vbG9naWVzIEluYy4iLAotCQkiVVNCIDIuMCBDYXJkIFJlYWRlciIsCi0JCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAotCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAotCiAvKiBSZXBvcnRlZCBieSBTZWJhc3RpYW4gS2FwZmVyIDxzZWJhc3RpYW5fa2FwZmVyQGdteC5uZXQ+CiAgKiBhbmQgT2xhZiBIZXJpbmcgPG9saEBzdXNlLmRlPiAoZGlmZmVyZW50IGJjZCdzLCBzYW1lIHZlbmRvci9wcm9kdWN0KQogICogZm9yIFVTQiBmbG9wcGllcyB0aGF0IG5lZWQgdGhlIFNJTkdMRV9MVU4gZW5mb3JjZW1lbnQuCkBAIC05Niw2ICs4OSwxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCisvKiBQYXRjaCBzdWJtaXR0ZWQgYnkgTWlobmVhLUNvc3RpbiBHcmlnb3JlIDxtaWhuZWFAenVsdS5ybz4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNDBkLCAweDYyMDUsIDB4MDAwMywgMHgwMDAzLAorCQkiVklBIFRlY2hub2xvZ2llcyBJbmMuIiwKKwkJIlVTQiAyLjAgQ2FyZCBSZWFkZXIiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKwogLyogRGVkdWNlZCBieSBKb25hdGhhbiBXb2l0aGUgPGp3b2l0aGVAcGh5c2ljcy5hZGVsYWlkZS5lZHUuYXU+CiAgKiBFbnRyeSBuZWVkZWQgZm9yIGZsYWdzOiBVU19GTF9GSVhfSU5RVUlSWSBiZWNhdXNlIGluaXRpYWwgaW5xdWlyeSBtZXNzYWdlCiAgKiBhbHdheXMgZmFpbHMgYW5kIGNvbmZ1c2VzIGRyaXZlLgpAQCAtMTg3LDYgKzE4NywxNCBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0NBUEFDSVRZKSwKIAorLyogUGF0Y2ggZm9yIE5pa29uIGNvb2xwaXggMjAwMAorICogU3VibWl0dGVkIGJ5IEZhYmllbiBDb3NzZSA8ZmFiaWVuLmNvc3NlQHdhbmFkb28uZnI+Ki8KK1VOVVNVQUxfREVWKCAgMHgwNGIwLCAweDAzMDEsIDB4MDAxMCwgMHgwMDEwLAorCQkiTklLT04iLAorCQkiTklLT04gRFNDIEUyMDAwIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsTlVMTCwKKwkJVVNfRkxfTk9UX0xPQ0tBQkxFICksCisKIC8qIEJFTlEgREM1MzMwCiAgKiBSZXBvcnRlZCBieSBNYW51ZWwgRm9tYnVlbmEgPG1mb21idWVuYUB5YS5jb20+IGFuZAogICogRnJhbmsgQ29wZWxhbmQgPGZqY0B0aGluZ3kuYXBhbmEub3JnLmF1PiAqLwpAQCAtMjc2LDE0ICsyODQsMTQgQEAKIFVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LCAKIAkJIlNhbmRpc2siLAogCQkiSW1hZ2VNYXRlIFNERFIwOSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCiAKIC8qIFRoaXMgZW50cnkgaXMgZnJvbSBBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sICovCiBVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKIAkJIlNDTSBNaWNyb3N5c3RlbXMiLAogCQkiZVVTQiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgc2RkcjA5X2luaXQsIAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdCwKIAkJMCksIAogI2VuZGlmCiAKQEAgLTUyNyw2ICs1MzUsMTMgQEAKIAkJIlNpbGljb24gTWVkaWEgUi9XIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDApLAogCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQorVU5VU1VBTF9ERVYoICAweDA1ODQsIDB4MDAwOCwgMHgwMTAyLCAweDAxMDIsCisJCSJGdWppZmlsbSIsCisJCSJEUEMtUjEgKEFsYXVkYSkiLAorIAkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCApLAorI2VuZGlmCisKIC8qIEZhYnJpemlvIEZlbGxpbmkgPGZlbGxvQGxpYmVyby5pdD4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNTk1LCAweDQzNDMsIDB4MDAwMCwgMHgyMjEwLAogCQkiRnVqaWZpbG0iLApAQCAtNjczLDggKzY4OCw4IEBACiBVTlVTVUFMX0RFViggIDB4MDY2YiwgMHgwMTA1LCAweDAxMDAsIDB4MDEwMCwgCiAJCSJPbHltcHVzIiwKIAkJIkNhbWVkaWEgTUFVU0ItMiIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCiAjZW5kaWYKIAogLyogUmVwb3J0ZWQgYnkgRGFyc2VuIEx1IDxkYXJzZW5AbWljcm8uZWUubnRodS5lZHUudHc+ICovCkBAIC03MzksOCArNzU0LDggQEAKIFVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LCAKIAkJIlNhbmRpc2siLAogCQkiSW1hZ2VNYXRlIFNERFItMDkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAorCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCisJCTApLAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQpAQCAtNzc2LDYgKzc5MSwxMyBAQAogIAkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDAgKSwKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQorVU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsCisJCSJPbHltcHVzIiwKKwkJIk1BVVNCLTEwIChBbGF1ZGEpIiwKKyAJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDAgKSwKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKIFVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAogCQkiRGF0YWZhYiIsCkBAIC0xMTM0LDMgKzExNTYsMjcgQEAKIAkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOKSwKICNlbmRpZgorCisvKiBDb250cm9sL0J1bGsgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCitVU1VBTF9ERVYoVVNfU0NfUkJDLCBVU19QUl9DQiwgVVNCX1VTX1RZUEVfU1RPUiksCitVU1VBTF9ERVYoVVNfU0NfODAyMCwgVVNfUFJfQ0IsIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDX1FJQywgVVNfUFJfQ0IsIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDX1VGSSwgVVNfUFJfQ0IsIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDXzgwNzAsIFVTX1BSX0NCLCBVU0JfVVNfVFlQRV9TVE9SKSwKK1VTVUFMX0RFVihVU19TQ19TQ1NJLCBVU19QUl9DQiwgVVNCX1VTX1RZUEVfU1RPUiksCisKKy8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCitVU1VBTF9ERVYoVVNfU0NfUkJDLCBVU19QUl9DQkksIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDXzgwMjAsIFVTX1BSX0NCSSwgVVNCX1VTX1RZUEVfU1RPUiksCitVU1VBTF9ERVYoVVNfU0NfUUlDLCBVU19QUl9DQkksIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDX1VGSSwgVVNfUFJfQ0JJLCBVU0JfVVNfVFlQRV9TVE9SKSwKK1VTVUFMX0RFVihVU19TQ184MDcwLCBVU19QUl9DQkksIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDX1NDU0ksIFVTX1BSX0NCSSwgVVNCX1VTX1RZUEVfU1RPUiksCisKKy8qIEJ1bGstb25seSB0cmFuc3BvcnQgZm9yIGFsbCBTdWJDbGFzcyB2YWx1ZXMgKi8KK1VTVUFMX0RFVihVU19TQ19SQkMsIFVTX1BSX0JVTEssIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDXzgwMjAsIFVTX1BSX0JVTEssIFVTQl9VU19UWVBFX1NUT1IpLAorVVNVQUxfREVWKFVTX1NDX1FJQywgVVNfUFJfQlVMSywgVVNCX1VTX1RZUEVfU1RPUiksCitVU1VBTF9ERVYoVVNfU0NfVUZJLCBVU19QUl9CVUxLLCBVU0JfVVNfVFlQRV9TVE9SKSwKK1VTVUFMX0RFVihVU19TQ184MDcwLCBVU19QUl9CVUxLLCBVU0JfVVNfVFlQRV9TVE9SKSwKK1VTVUFMX0RFVihVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCAwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDM4NDdlYmUuLmRiY2YyMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtOTQsNiArOTQsOSBAQAogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAogI2luY2x1ZGUgIm9uZXRvdWNoLmgiCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCisjaW5jbHVkZSAiYWxhdWRhLmgiCisjZW5kaWYKIAogLyogU29tZSBpbmZvcm1hdGlvbmFsIGRhdGEgKi8KIE1PRFVMRV9BVVRIT1IoIk1hdHRoZXcgRGhhcm0gPG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0PiIpOwpAQCAtMTEyLDQ5ICsxMTUsMzMgQEAKIHN0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04odGhyZWFkc19nb25lKTsKIAogCi0vKiBUaGUgZW50cmllcyBpbiB0aGlzIHRhYmxlLCBleGNlcHQgZm9yIGZpbmFsIG9uZXMgaGVyZQotICogKFVTQl9NQVNTX1NUT1JBR0VfQ0xBU1MgYW5kIHRoZSBlbXB0eSBlbnRyeSksIGNvcnJlc3BvbmQsCi0gKiBsaW5lIGZvciBsaW5lIHdpdGggdGhlIGVudHJpZXMgb2YgdXNfdW5zdWF1bF9kZXZfbGlzdFtdLgorLyoKKyAqIFRoZSBlbnRyaWVzIGluIHRoaXMgdGFibGUgY29ycmVzcG9uZCwgbGluZSBmb3IgbGluZSwKKyAqIHdpdGggdGhlIGVudHJpZXMgb2YgdXNfdW51c3VhbF9kZXZfbGlzdFtdLgogICovCisjaWZuZGVmIENPTkZJR19VU0JfTElCVVNVQUwKIAogI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCiAJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSx1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCiAJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCi17IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLGJjZERldmljZU1heCkgfQoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKKyNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoreyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAorICAuZHJpdmVyX2luZm8gPSAoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkcyBbXSA9IHsKIAogIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIKICN1bmRlZiBVTlVTVUFMX0RFVgotCS8qIENvbnRyb2wvQnVsayB0cmFuc3BvcnQgZm9yIGFsbCBTdWJDbGFzcyB2YWx1ZXMgKi8KLQl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19SQkMsIFVTX1BSX0NCKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwMjAsIFVTX1BSX0NCKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1FJQywgVVNfUFJfQ0IpIH0sCi0JeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfVUZJLCBVU19QUl9DQikgfSwKLQl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDcwLCBVU19QUl9DQikgfSwKLQl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9DQikgfSwKLQotCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCi0JeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUkJDLCBVU19QUl9DQkkpIH0sCi0JeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfODAyMCwgVVNfUFJfQ0JJKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1FJQywgVVNfUFJfQ0JJKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1VGSSwgVVNfUFJfQ0JJKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwNzAsIFVTX1BSX0NCSSkgfSwKLQl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9DQkkpIH0sCi0KLQkvKiBCdWxrLW9ubHkgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCi0JeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUkJDLCBVU19QUl9CVUxLKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwMjAsIFVTX1BSX0JVTEspIH0sCi0JeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUUlDLCBVU19QUl9CVUxLKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1VGSSwgVVNfUFJfQlVMSykgfSwKLQl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDcwLCBVU19QUl9CVUxLKSB9LAotCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1NDU0ksIFVTX1BSX0JVTEspIH0sCi0KKyN1bmRlZiBVU1VBTF9ERVYKIAkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogCXsgfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBzdG9yYWdlX3VzYl9pZHMpOworI2VuZGlmIC8qIENPTkZJR19VU0JfTElCVVNVQUwgKi8KIAogLyogVGhpcyBpcyB0aGUgbGlzdCBvZiBkZXZpY2VzIHdlIHJlY29nbml6ZSwgYWxvbmcgd2l0aCB0aGVpciBmbGFnIGRhdGEgKi8KIApAQCAtMTY3LDcgKzE1NCw2IEBACiAgKiBhcmUgZnJlZSB0byB1c2UgYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHlvdSBsaWtlLgogICovCiAKLSN1bmRlZiBVTlVTVUFMX0RFVgogI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAogCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCiAJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXApAQCAtMTc3LDUzICsxNjMsMTggQEAKIAkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKIAkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAogCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCi0JLmZsYWdzID0gRmxhZ3MsIFwKK30KKworI2RlZmluZSBVU1VBTF9ERVYodXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCB1c2VfdHlwZSkgXAoreyBcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKIH0KIAogc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiB1c191bnVzdWFsX2Rldl9saXN0W10gPSB7CiAjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIiAKICMJdW5kZWYgVU5VU1VBTF9ERVYKLQkvKiBDb250cm9sL0J1bGsgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCi0JeyAudXNlUHJvdG9jb2wgPSBVU19TQ19SQkMsCi0JICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODAyMCwKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQn0sCi0JeyAudXNlUHJvdG9jb2wgPSBVU19TQ19RSUMsCi0JICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfVUZJLAotCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCfSwKLQl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwNzAsCi0JICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfU0NTSSwKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQn0sCi0KLQkvKiBDb250cm9sL0J1bGsvSW50ZXJydXB0IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLwotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUkJDLAotCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCSX0sCi0JeyAudXNlUHJvdG9jb2wgPSBVU19TQ184MDIwLAotCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCSX0sCi0JeyAudXNlUHJvdG9jb2wgPSBVU19TQ19RSUMsCi0JICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0JJfSwKLQl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1VGSSwKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODA3MCwKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfU0NTSSwKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAotCi0JLyogQnVsay1vbmx5IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLwotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUkJDLAotCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0JVTEt9LAotCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODAyMCwKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKLQl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1FJQywKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKLQl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1VGSSwKLQkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKLQl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwNzAsCi0JICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQlVMS30sCi0JeyAudXNlUHJvdG9jb2wgPSBVU19TQ19TQ1NJLAotCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0JVTEt9LAorIwl1bmRlZiBVU1VBTF9ERVYKIAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyBOVUxMIH0KQEAgLTI0MCw2ICsxOTEsOCBAQAogCWRvd24oJnVzLT5kZXZfc2VtYXBob3JlKTsKIAogCVVTX0RFQlVHUCgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHVzLT5zdXNwZW5kX3Jlc3VtZV9ob29rKQorCQkodXMtPnN1c3BlbmRfcmVzdW1lX2hvb2spKHVzLCBVU19TVVNQRU5EKTsKIAlpZmFjZS0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID0gbWVzc2FnZS5ldmVudDsKIAogCS8qIFdoZW4gcnVudGltZSBQTSBpcyB3b3JraW5nLCB3ZSdsbCBzZXQgYSBmbGFnIHRvIGluZGljYXRlCkBAIC0yNTYsNiArMjA5LDggQEAKIAlkb3duKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CiAKIAlVU19ERUJVR1AoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmICh1cy0+c3VzcGVuZF9yZXN1bWVfaG9vaykKKwkJKHVzLT5zdXNwZW5kX3Jlc3VtZV9ob29rKSh1cywgVVNfUkVTVU1FKTsKIAlpZmFjZS0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID0gUE1fRVZFTlRfT047CiAKIAl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOwpAQCAtNDg0LDE0ICs0MzksMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogRmluZCBhbiB1bnVzdWFsX2RldiBkZXNjcmlwdG9yIChhbHdheXMgc3VjY2VlZHMgaW4gdGhlIGN1cnJlbnQgY29kZSkgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKmZpbmRfdW51c3VhbChjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJY29uc3QgaW50IGlkX2luZGV4ID0gaWQgLSBzdG9yYWdlX3VzYl9pZHM7CisJcmV0dXJuICZ1c191bnVzdWFsX2Rldl9saXN0W2lkX2luZGV4XTsKK30KKwogLyogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIHN0cmluZyBkZXNjcmlwdG9ycyAqLwotc3RhdGljIHZvaWQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgaW50IGlkX2luZGV4KQorc3RhdGljIHZvaWQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1cy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2MgPQogCQkmdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0Jc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldiA9ICZ1c191bnVzdWFsX2Rldl9saXN0W2lkX2luZGV4XTsKLQlzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQgPSAmc3RvcmFnZV91c2JfaWRzW2lkX2luZGV4XTsKKwlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2ID0gZmluZF91bnVzdWFsKGlkKTsKIAogCS8qIFN0b3JlIHRoZSBlbnRyaWVzICovCiAJdXMtPnVudXN1YWxfZGV2ID0gdW51c3VhbF9kZXY7CkBAIC01MDEsNyArNDYyLDcgQEAKIAl1cy0+cHJvdG9jb2wgPSAodW51c3VhbF9kZXYtPnVzZVRyYW5zcG9ydCA9PSBVU19QUl9ERVZJQ0UpID8KIAkJCWlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wgOgogCQkJdW51c3VhbF9kZXYtPnVzZVRyYW5zcG9ydDsKLQl1cy0+ZmxhZ3MgPSB1bnVzdWFsX2Rldi0+ZmxhZ3M7CisJdXMtPmZsYWdzID0gVVNCX1VTX09SSUdfRkxBR1MoaWQtPmRyaXZlcl9pbmZvKTsKIAogCS8qCiAJICogVGhpcyBmbGFnIGlzIG9ubHkgbmVlZGVkIHdoZW4gd2UncmUgaW4gaGlnaC1zcGVlZCwgc28gbGV0J3MKQEAgLTUxNiw3ICs0NzcsNyBAQAogCSAqIGZyb20gdGhlIHVudXN1YWxfZGV2cy5oIHRhYmxlLgogCSAqLwogCWlmIChpZC0+aWRWZW5kb3IgfHwgaWQtPmlkUHJvZHVjdCkgewotCQlzdGF0aWMgY2hhciAqbXNnc1szXSA9IHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKm1zZ3NbM10gPSB7CiAJCQkiYW4gdW5uZWVkZWQgU3ViQ2xhc3MgZW50cnkiLAogCQkJImFuIHVubmVlZGVkIFByb3RvY29sIGVudHJ5IiwKIAkJCSJ1bm5lZWRlZCBTdWJDbGFzcyBhbmQgUHJvdG9jb2wgZW50cmllcyJ9OwpAQCAtNTI5LDcgKzQ5MCw3IEBACiAJCWlmICh1bnVzdWFsX2Rldi0+dXNlVHJhbnNwb3J0ICE9IFVTX1BSX0RFVklDRSAmJgogCQkJdXMtPnByb3RvY29sID09IGlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wpCiAJCQltc2cgKz0gMjsKLQkJaWYgKG1zZyA+PSAwICYmICEodW51c3VhbF9kZXYtPmZsYWdzICYgVVNfRkxfTkVFRF9PVkVSUklERSkpCisJCWlmIChtc2cgPj0gMCAmJiAhKHVzLT5mbGFncyAmIFVTX0ZMX05FRURfT1ZFUlJJREUpKQogCQkJcHJpbnRrKEtFUk5fTk9USUNFIFVTQl9TVE9SQUdFICJUaGlzIGRldmljZSAiCiAJCQkJIiglMDR4LCUwNHgsJTA0eCBTICUwMnggUCAlMDJ4KSIKIAkJCQkiIGhhcyAlcyBpbiB1bnVzdWFsX2RldnMuaFxuIgpAQCAtNjg2LDYgKzY0NywxNSBAQAogCQlicmVhazsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQorCWNhc2UgVVNfUFJfQUxBVURBOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOworCQl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMTsKKwkJYnJlYWs7CisjZW5kaWYKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTkyMSwxMCArODkxLDEyIEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXM7Ci0JY29uc3QgaW50IGlkX2luZGV4ID0gaWQgLSBzdG9yYWdlX3VzYl9pZHM7IAogCWludCByZXN1bHQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0aDsKIAorCWlmICh1c2JfdXN1YWxfY2hlY2tfdHlwZShpZCwgVVNCX1VTX1RZUEVfU1RPUikpCisJCXJldHVybiAtRU5YSU87CisKIAlVU19ERUJVR1AoIlVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlIGRldGVjdGVkXG4iKTsKIAogCS8qCkBAIC05NTcsMjkgKzkyOSw3IEBACiAJICogb2YgdGhlIG1hdGNoIGZyb20gdGhlIHVzYl9kZXZpY2VfaWQgdGFibGUsIHNvIHdlIGNhbiBmaW5kIHRoZQogCSAqIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHByaXZhdGUgdGFibGUuCiAJICovCi0JZ2V0X2RldmljZV9pbmZvKHVzLCBpZF9pbmRleCk7Ci0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci0JaWYgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9FVVNCX1NERFIwOSB8fAotCQkJdXMtPnByb3RvY29sID09IFVTX1BSX0RQQ01fVVNCKSB7Ci0JCS8qIHNldCB0aGUgY29uZmlndXJhdGlvbiAtLSBTVEFMTCBpcyBhbiBhY2NlcHRhYmxlIHJlc3BvbnNlIGhlcmUgKi8KLQkJaWYgKHVzLT5wdXNiX2Rldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewotCQkJVVNfREVCVUdQKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLCB1cy0+cHVzYl9kZXYKLQkJCQktPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKLQkJCWdvdG8gQmFkRGV2aWNlOwotCQl9Ci0JCXJlc3VsdCA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHVzLT5wdXNiX2Rldik7Ci0KLQkJVVNfREVCVUdQKCJSZXN1bHQgb2YgdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gaXMgJWRcbiIsIHJlc3VsdCk7Ci0JCWlmIChyZXN1bHQgPT0gLUVQSVBFKSB7Ci0JCQlVU19ERUJVR1AoIi0tIHN0YWxsIG9uIGNvbnRyb2wgaW50ZXJmYWNlXG4iKTsKLQkJfSBlbHNlIGlmIChyZXN1bHQgIT0gMCkgewotCQkJLyogaXQncyBub3QgYSBzdGFsbCwgYnV0IGFub3RoZXIgZXJyb3IgLS0gdGltZSB0byBiYWlsICovCi0JCQlVU19ERUJVR1AoIi0tIFVua25vd24gZXJyb3IuICBSZWplY3RpbmcgZGV2aWNlXG4iKTsKLQkJCWdvdG8gQmFkRGV2aWNlOwotCQl9Ci0JfQotI2VuZGlmCisJZ2V0X2RldmljZV9pbmZvKHVzLCBpZCk7CiAKIAkvKiBHZXQgdGhlIHRyYW5zcG9ydCwgcHJvdG9jb2wsIGFuZCBwaXBlIHNldHRpbmdzICovCiAJcmVzdWx0ID0gZ2V0X3RyYW5zcG9ydCh1cyk7CkBAIC0xMDQ0LDcgKzk5NCw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2Jfc3RvcmFnZV9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInVzYi1zdG9yYWdlIiwKIAkucHJvYmUgPQlzdG9yYWdlX3Byb2JlLAogCS5kaXNjb25uZWN0ID0Jc3RvcmFnZV9kaXNjb25uZWN0LApAQCAtMTA2Miw5ICsxMDExLDEwIEBACiAKIAkvKiByZWdpc3RlciB0aGUgZHJpdmVyLCByZXR1cm4gdXNiX3JlZ2lzdGVyIHJldHVybiBjb2RlIGlmIGVycm9yICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2Jfc3RvcmFnZV9kcml2ZXIpOwotCWlmIChyZXR2YWwgPT0gMCkKKwlpZiAocmV0dmFsID09IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0IHJlZ2lzdGVyZWQuXG4iKTsKLQorCQl1c2JfdXN1YWxfc2V0X3ByZXNlbnQoVVNCX1VTX1RZUEVfU1RPUik7CisJfQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEwODgsNiArMTAzOCw4IEBACiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRocmVhZHNfZ29uZSk7CiAJCWF0b21pY19kZWMoJnRvdGFsX3RocmVhZHMpOwogCX0KKworCXVzYl91c3VhbF9jbGVhcl9wcmVzZW50KFVTQl9VU19UWVBFX1NUT1IpOwogfQogCiBtb2R1bGVfaW5pdCh1c2Jfc3Rvcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCmluZGV4IDk4YjA5NzEuLjcyNTlmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaApAQCAtNDUsNiArNDUsNyBAQAogI2RlZmluZSBfVVNCX0hfCiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfdXN1YWwuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KQEAgLTYzLDM4ICs2NCw4IEBACiAJX191OCAgdXNlUHJvdG9jb2w7CiAJX191OCAgdXNlVHJhbnNwb3J0OwogCWludCAoKmluaXRGdW5jdGlvbikoc3RydWN0IHVzX2RhdGEgKik7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwogfTsKIAotLyoKLSAqIFN0YXRpYyBmbGFnIGRlZmluaXRpb25zLiAgV2UgdXNlIHRoaXMgcm91bmRhYm91dCB0ZWNobmlxdWUgc28gdGhhdCB0aGUKLSAqIHByb2NfaW5mbygpIHJvdXRpbmUgY2FuIGF1dG9tYXRpY2FsbHkgZGlzcGxheSBhIG1lc3NhZ2UgZm9yIGVhY2ggZmxhZy4KLSAqLwotI2RlZmluZSBVU19ET19BTExfRkxBR1MJCQkJCQlcCi0JVVNfRkxBRyhTSU5HTEVfTFVOLAkweDAwMDAwMDAxKQkJCVwKLQkJLyogYWxsb3cgYWNjZXNzIHRvIG9ubHkgTFVOIDAgKi8JCVwKLQlVU19GTEFHKE5FRURfT1ZFUlJJREUsCTB4MDAwMDAwMDIpCQkJXAotCQkvKiB1bnVzdWFsX2RldnMgZW50cnkgaXMgbmVjZXNzYXJ5ICovCQlcCi0JVVNfRkxBRyhTQ01fTVVMVF9UQVJHLAkweDAwMDAwMDA0KQkJCVwKLQkJLyogc3VwcG9ydHMgbXVsdGlwbGUgdGFyZ2V0cyAqLwkJCVwKLQlVU19GTEFHKEZJWF9JTlFVSVJZLAkweDAwMDAwMDA4KQkJCVwKLQkJLyogSU5RVUlSWSByZXNwb25zZSBuZWVkcyBmYWtpbmcgKi8JCVwKLQlVU19GTEFHKEZJWF9DQVBBQ0lUWSwJMHgwMDAwMDAxMCkJCQlcCi0JCS8qIFJFQUQgQ0FQQUNJVFkgcmVzcG9uc2UgdG9vIGJpZyAqLwkJXAotCVVTX0ZMQUcoSUdOT1JFX1JFU0lEVUUsCTB4MDAwMDAwMjApCQkJXAotCQkvKiByZXBvcnRlZCByZXNpZHVlIGlzIHdyb25nICovCQkJXAotCVVTX0ZMQUcoQlVMSzMyLAkJMHgwMDAwMDA0MCkJCQlcCi0JCS8qIFVzZXMgMzItYnl0ZSBDQlcgbGVuZ3RoICovCQkJXAotCVVTX0ZMQUcoTk9UX0xPQ0tBQkxFLAkweDAwMDAwMDgwKQkJCVwKLQkJLyogUFJFVkVOVC9BTExPVyBub3Qgc3VwcG9ydGVkICovCQlcCi0JVVNfRkxBRyhHT19TTE9XLAkweDAwMDAwMTAwKQkJCVwKLQkJLyogTmVlZCBkZWxheSBhZnRlciBDb21tYW5kIHBoYXNlICovCQlcCi0JVVNfRkxBRyhOT19XUF9ERVRFQ1QsCTB4MDAwMDAyMDApCQkJXAotCQkvKiBEb24ndCBjaGVjayBmb3Igd3JpdGUtcHJvdGVjdCAqLwkJXAotCi0jZGVmaW5lIFVTX0ZMQUcobmFtZSwgdmFsdWUpCVVTX0ZMXyMjbmFtZSA9IHZhbHVlICwKLWVudW0geyBVU19ET19BTExfRkxBR1MgfTsKLSN1bmRlZiBVU19GTEFHCiAKIC8qIER5bmFtaWMgZmxhZyBkZWZpbml0aW9uczogdXNlZCBpbiBzZXRfYml0KCkgZXRjLiAqLwogI2RlZmluZSBVU19GTElEWF9VUkJfQUNUSVZFCTE4ICAvKiAweDAwMDQwMDAwICBjdXJyZW50X3VyYiBpcyBpbiB1c2UgICovCkBAIC0xMjIsNyArOTMsMTEgQEAKIHR5cGVkZWYgaW50ICgqdHJhbnNfY21uZCkoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSopOwogdHlwZWRlZiBpbnQgKCp0cmFuc19yZXNldCkoc3RydWN0IHVzX2RhdGEqKTsKIHR5cGVkZWYgdm9pZCAoKnByb3RvX2NtbmQpKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotdHlwZWRlZiB2b2lkICgqZXh0cmFfZGF0YV9kZXN0cnVjdG9yKSh2b2lkICopOwkgLyogZXh0cmEgZGF0YSBkZXN0cnVjdG9yICAgKi8KK3R5cGVkZWYgdm9pZCAoKmV4dHJhX2RhdGFfZGVzdHJ1Y3Rvcikodm9pZCAqKTsJLyogZXh0cmEgZGF0YSBkZXN0cnVjdG9yICovCit0eXBlZGVmIHZvaWQgKCpwbV9ob29rKShzdHJ1Y3QgdXNfZGF0YSAqLCBpbnQpOwkvKiBwb3dlciBtYW5hZ2VtZW50IGhvb2sgKi8KKworI2RlZmluZSBVU19TVVNQRU5ECTAKKyNkZWZpbmUgVVNfUkVTVU1FCTEKIAogLyogd2UgYWxsb2NhdGUgb25lIG9mIHRoZXNlIGZvciBldmVyeSBkZXZpY2UgdGhhdCB3ZSByZW1lbWJlciAqLwogc3RydWN0IHVzX2RhdGEgewpAQCAtMTc4LDYgKzE1Myw5IEBACiAJLyogc3ViZHJpdmVyIGluZm9ybWF0aW9uICovCiAJdm9pZAkJCSpleHRyYTsJCSAvKiBBbnkgZXh0cmEgZGF0YSAgICAgICAgICAqLwogCWV4dHJhX2RhdGFfZGVzdHJ1Y3RvcglleHRyYV9kZXN0cnVjdG9yOy8qIGV4dHJhIGRhdGEgZGVzdHJ1Y3RvciAgICovCisjaWZkZWYgQ09ORklHX1BNCisJcG1faG9vawkJCXN1c3BlbmRfcmVzdW1lX2hvb2s7CisjZW5kaWYKIH07CiAKIC8qIENvbnZlcnQgYmV0d2VlbiB1c19kYXRhIGFuZCB0aGUgY29ycmVzcG9uZGluZyBTY3NpX0hvc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKaW5kZXggNmMzYTUzZi4uNWQwMmYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKKysrIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKQEAgLTM5LDEwICszOSwxNSBAQAogLyogR2V0IGEgbWlub3IgcmFuZ2UgZm9yIHlvdXIgZGV2aWNlcyBmcm9tIHRoZSB1c2IgbWFpbnRhaW5lciAqLwogI2RlZmluZSBVU0JfU0tFTF9NSU5PUl9CQVNFCTE5MgogCisvKiBvdXIgcHJpdmF0ZSBkZWZpbmVzLiBpZiB0aGlzIGdyb3dzIGFueSBsYXJnZXIsIHVzZSB5b3VyIG93biAuaCBmaWxlICovCisjZGVmaW5lIE1BWF9UUkFOU0ZFUgkJKCBQQUdFX1NJWkUgLSA1MTIgKQorI2RlZmluZSBXUklURVNfSU5fRkxJR0hUCTgKKwogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIHN0cnVjdCB1c2Jfc2tlbCB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKgl1ZGV2OwkJCS8qIHRoZSB1c2IgZGV2aWNlIGZvciB0aGlzIGRldmljZSAqLwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICoJaW50ZXJmYWNlOwkJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCWxpbWl0X3NlbTsJCS8qIGxpbWl0aW5nIHRoZSBudW1iZXIgb2Ygd3JpdGVzIGluIHByb2dyZXNzICovCiAJdW5zaWduZWQgY2hhciAqCQlidWxrX2luX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhICovCiAJc2l6ZV90CQkJYnVsa19pbl9zaXplOwkJLyogdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCiAJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLwpAQCAtMTUyLDYgKzE1Nyw3IEBACiAJLyogZnJlZSB1cCBvdXIgYWxsb2NhdGVkIGJ1ZmZlciAqLwogCXVzYl9idWZmZXJfZnJlZSh1cmItPmRldiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCAKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7CisJdXAoJmRldi0+bGltaXRfc2VtKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2tlbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtMTYwLDYgKzE2Niw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKIAljaGFyICpidWYgPSBOVUxMOworCXNpemVfdCB3cml0ZXNpemUgPSBtaW4oY291bnQsIChzaXplX3QpTUFYX1RSQU5TRkVSKTsKIAogCWRldiA9IChzdHJ1Y3QgdXNiX3NrZWwgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAKQEAgLTE2Nyw2ICsxNzQsMTIgQEAKIAlpZiAoY291bnQgPT0gMCkKIAkJZ290byBleGl0OwogCisJLyogbGltaXQgdGhlIG51bWJlciBvZiBVUkJzIGluIGZsaWdodCB0byBzdG9wIGEgdXNlciBmcm9tIHVzaW5nIHVwIGFsbCBSQU0gKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPmxpbWl0X3NlbSkpIHsKKwkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGV4aXQ7CisJfQorCiAJLyogY3JlYXRlIGEgdXJiLCBhbmQgYSBidWZmZXIgZm9yIGl0LCBhbmQgY29weSB0aGUgZGF0YSB0byB0aGUgdXJiICovCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVyYikgewpAQCAtMTc0LDEzICsxODcsMTMgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dWRldiwgY291bnQsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIHdyaXRlc2l6ZSwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKIAlpZiAoIWJ1ZikgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmZmVyLCBjb3VudCkpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZmZlciwgd3JpdGVzaXplKSkgewogCQlyZXR2YWwgPSAtRUZBVUxUOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTE4OCw3ICsyMDEsNyBAQAogCS8qIGluaXRpYWxpemUgdGhlIHVyYiBwcm9wZXJseSAqLwogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LAogCQkJICB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksCi0JCQkgIGJ1ZiwgY291bnQsIHNrZWxfd3JpdGVfYnVsa19jYWxsYmFjaywgZGV2KTsKKwkJCSAgYnVmLCB3cml0ZXNpemUsIHNrZWxfd3JpdGVfYnVsa19jYWxsYmFjaywgZGV2KTsKIAl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCiAJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwpAQCAtMjAyLDExICsyMTUsMTIgQEAKIAl1c2JfZnJlZV91cmIodXJiKTsKIAogZXhpdDoKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIHdyaXRlc2l6ZTsKIAogZXJyb3I6Ci0JdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgY291bnQsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIHdyaXRlc2l6ZSwgYnVmLCB1cmItPnRyYW5zZmVyX2RtYSk7CiAJdXNiX2ZyZWVfdXJiKHVyYik7CisJdXAoJmRldi0+bGltaXRfc2VtKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMzgsMTMgKzI1MiwxMyBAQAogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCi0JZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CiAJCWdvdG8gZXJyb3I7CiAJfQotCW1lbXNldChkZXYsIDB4MDAsIHNpemVvZigqZGV2KSk7CiAJa3JlZl9pbml0KCZkZXYtPmtyZWYpOworCXNlbWFfaW5pdCgmZGV2LT5saW1pdF9zZW0sIFdSSVRFU19JTl9GTElHSFQpOwogCiAJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKIAlkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKQEAgLTMzMCw3ICszNDQsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2tlbF9kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInNrZWxldG9uIiwKIAkucHJvYmUgPQlza2VsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0Jc2tlbF9kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKaW5kZXggNGYwMWNjYy4uMTU2ZGI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCkBAIC01OTQsNyArNTk0LDcgQEAKIH0KIAogLyoKLSAqIFJldHJlaXZlIFBMTCBpbmZvcyBieSBkaWZmZXJlbnQgbWVhbnMgKEJJT1MsIE9wZW4gRmlybXdhcmUsIHJlZ2lzdGVyIHByb2JpbmcuLi4pCisgKiBSZXRyaWV2ZSBQTEwgaW5mb3MgYnkgZGlmZmVyZW50IG1lYW5zIChCSU9TLCBPcGVuIEZpcm13YXJlLCByZWdpc3RlciBwcm9iaW5nLi4uKQogICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcmFkZW9uX2dldF9wbGxpbmZvKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKIHsKQEAgLTY2MCwxNyArNjYwLDE3IEBACiAKICNpZmRlZiBDT05GSUdfUFBDX09GCiAJLyoKLQkgKiBSZXRyZWl2ZSBQTEwgaW5mb3MgZnJvbSBPcGVuIEZpcm13YXJlIGZpcnN0CisJICogUmV0cmlldmUgUExMIGluZm9zIGZyb20gT3BlbiBGaXJtd2FyZSBmaXJzdAogCSAqLwogICAgICAgIAlpZiAoIWZvcmNlX21lYXN1cmVfcGxsICYmIHJhZGVvbl9yZWFkX3h0YWxfT0YocmluZm8pID09IDApIHsKLSAgICAgICAJCXByaW50ayhLRVJOX0lORk8gInJhZGVvbmZiOiBSZXRyZWl2ZWQgUExMIGluZm9zIGZyb20gT3BlbiBGaXJtd2FyZVxuIik7CisgICAgICAgCQlwcmludGsoS0VSTl9JTkZPICJyYWRlb25mYjogUmV0cmlldmVkIFBMTCBpbmZvcyBmcm9tIE9wZW4gRmlybXdhcmVcbiIpOwogCQlnb3RvIGZvdW5kOwogCX0KICNlbmRpZiAvKiBDT05GSUdfUFBDX09GICovCiAKIAkvKgogCSAqIENoZWNrIG91dCBpZiB3ZSBoYXZlIGFuIFg4NiB3aGljaCBnYXZlIHVzIHNvbWUgUExMIGluZm9ybWF0aW9ucwotCSAqIGFuZCBpZiB5ZXMsIHJldHJlaXZlIHRoZW0KKwkgKiBhbmQgaWYgeWVzLCByZXRyaWV2ZSB0aGVtCiAJICovCiAJaWYgKCFmb3JjZV9tZWFzdXJlX3BsbCAmJiByaW5mby0+Ymlvc19zZWcpIHsKIAkJdTE2IHBsbF9pbmZvX2Jsb2NrID0gQklPU19JTjE2KHJpbmZvLT5mcF9iaW9zX3N0YXJ0ICsgMHgzMCk7CkBAIC02ODIsNyArNjgyLDcgQEAKIAkJcmluZm8tPnBsbC5wcGxsX21pbgk9IEJJT1NfSU4zMihwbGxfaW5mb19ibG9jayArIDB4MTIpOwogCQlyaW5mby0+cGxsLnBwbGxfbWF4CT0gQklPU19JTjMyKHBsbF9pbmZvX2Jsb2NrICsgMHgxNik7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uZmI6IFJldHJlaXZlZCBQTEwgaW5mb3MgZnJvbSBCSU9TXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uZmI6IFJldHJpZXZlZCBQTEwgaW5mb3MgZnJvbSBCSU9TXG4iKTsKIAkJZ290byBmb3VuZDsKIAl9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQAogCSAqIHByb2JlIHRoZW0KIAkgKi8KIAlpZiAocmFkZW9uX3Byb2JlX3BsbF9wYXJhbXMocmluZm8pID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uZmI6IFJldHJlaXZlZCBQTEwgaW5mb3MgZnJvbSByZWdpc3RlcnNcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJyYWRlb25mYjogUmV0cmlldmVkIFBMTCBpbmZvcyBmcm9tIHJlZ2lzdGVyc1xuIik7CiAJCWdvdG8gZm91bmQ7CiAJfQogCkBAIC03MDIsNyArNzAyLDcgQEAKIAogZm91bmQ6CiAJLyoKLQkgKiBTb21lIG1ldGhvZHMgZmFpbCB0byByZXRyZWl2ZSBTQ0xLIGFuZCBNQ0xLIHZhbHVlcywgd2UgYXBwbHkgZGVmYXVsdAorCSAqIFNvbWUgbWV0aG9kcyBmYWlsIHRvIHJldHJpZXZlIFNDTEsgYW5kIE1DTEsgdmFsdWVzLCB3ZSBhcHBseSBkZWZhdWx0CiAJICogc2V0dGluZ3MgaW4gdGhpcyBjYXNlICgyMDBNaHopLiBJZiB0aGF0IHJlYWxseSBoYXBwbmUgb2Z0ZW4sIHdlIGNvdWxkCiAJICogZmV0Y2ggZnJvbSByZWdpc3RlcnMgaW5zdGVhZC4uLgogCSAqLwpAQCAtMjM5Myw3ICsyMzkzLDcgQEAKIAkgICAgICAgcmluZm8tPm1hcHBlZF92cmFtLzEwMjQpOwogCiAJLyoKLQkgKiBNYXAgdGhlIEJJT1MgUk9NIGlmIGFueSBhbmQgcmV0cmVpdmUgUExMIHBhcmFtZXRlcnMgZnJvbQorCSAqIE1hcCB0aGUgQklPUyBST00gaWYgYW55IGFuZCByZXRyaWV2ZSBQTEwgcGFyYW1ldGVycyBmcm9tCiAJICogdGhlIEJJT1MuIFdlIHNraXAgdGhhdCBvbiBtb2JpbGl0eSBjaGlwcyBhcyB0aGUgcmVhbCBwYW5lbAogCSAqIHZhbHVlcyB3ZSBuZWVkIGFyZW4ndCBpbiB0aGUgUk9NIGJ1dCBpbiB0aGUgQklPUyBpbWFnZSBpbgogCSAqIG1lbW9yeS4gVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCB0aGUgYmVzdCBtZWFjbmlzbSB0aG91Z2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL2RzY29yZS5jIGIvZHJpdmVycy93MS9kc2NvcmUuYwppbmRleCAxNWZiMjUwLi5iOTE0NjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL2RzY29yZS5jCisrKyBiL2RyaXZlcnMvdzEvZHNjb3JlLmMKQEAgLTUyLDcgKzUyLDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZHNfZHJpdmVyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5uYW1lID0JCSJEUzk0OTBSIiwKIAkucHJvYmUgPQlkc19wcm9iZSwKIAkuZGlzY29ubmVjdCA9CWRzX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9mcy85cC90cmFuc19zb2NrLmMgYi9mcy85cC90cmFuc19zb2NrLmMKaW5kZXggYTkzYzJiZi4uNmE5YTc1ZCAxMDA2NDQKLS0tIGEvZnMvOXAvdHJhbnNfc29jay5jCisrKyBiL2ZzLzlwL3RyYW5zX3NvY2suYwpAQCAtMjYsNiArMjYsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggNDYwNTU0Yi4uMzhkM2U4MCAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTMxMyw3ICszMTMsOCBAQAogfQogCiBzdGF0aWMgaW50IF9fYmlvX2FkZF9wYWdlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcGFnZQotCQkJICAqcGFnZSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnNldCkKKwkJCSAgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIHNob3J0IG1heF9zZWN0b3JzKQogewogCWludCByZXRyaWVkX3NlZ21lbnRzID0gMDsKIAlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKQEAgLTMyNyw3ICszMjgsNyBAQAogCWlmIChiaW8tPmJpX3ZjbnQgPj0gYmlvLT5iaV9tYXhfdmVjcykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKChiaW8tPmJpX3NpemUgKyBsZW4pID4+IDkpID4gcS0+bWF4X3NlY3RvcnMpCisJaWYgKCgoYmlvLT5iaV9zaXplICsgbGVuKSA+PiA5KSA+IG1heF9zZWN0b3JzKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0zODYsNiArMzg3LDI1IEBACiB9CiAKIC8qKgorICoJYmlvX2FkZF9wY19wYWdlCS0JYXR0ZW1wdCB0byBhZGQgcGFnZSB0byBiaW8KKyAqCUBiaW86IGRlc3RpbmF0aW9uIGJpbworICoJQHBhZ2U6IHBhZ2UgdG8gYWRkCisgKglAbGVuOiB2ZWMgZW50cnkgbGVuZ3RoCisgKglAb2Zmc2V0OiB2ZWMgZW50cnkgb2Zmc2V0CisgKgorICoJQXR0ZW1wdCB0byBhZGQgYSBwYWdlIHRvIHRoZSBiaW9fdmVjIG1hcGxpc3QuIFRoaXMgY2FuIGZhaWwgZm9yIGEKKyAqCW51bWJlciBvZiByZWFzb25zLCBzdWNoIGFzIHRoZSBiaW8gYmVpbmcgZnVsbCBvciB0YXJnZXQgYmxvY2sKKyAqCWRldmljZSBsaW1pdGF0aW9ucy4gVGhlIHRhcmdldCBibG9jayBkZXZpY2UgbXVzdCBhbGxvdyBiaW8ncworICogICAgICBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLCBzbyBpdCBpcyBhbHdheXMgcG9zc2libGUgdG8gYWRkIGEgc2luZ2xlCisgKiAgICAgIHBhZ2UgdG8gYW4gZW1wdHkgYmlvLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgUkVRX1BDIGJpb3MuCisgKi8KK2ludCBiaW9fYWRkX3BjX3BhZ2UocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBwYWdlICpwYWdlLAorCQkgICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gX19iaW9fYWRkX3BhZ2UocSwgYmlvLCBwYWdlLCBsZW4sIG9mZnNldCwgcS0+bWF4X2h3X3NlY3RvcnMpOworfQorCisvKioKICAqCWJpb19hZGRfcGFnZQktCWF0dGVtcHQgdG8gYWRkIHBhZ2UgdG8gYmlvCiAgKglAYmlvOiBkZXN0aW5hdGlvbiBiaW8KICAqCUBwYWdlOiBwYWdlIHRvIGFkZApAQCAtNDAxLDggKzQyMSw4IEBACiBpbnQgYmlvX2FkZF9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sCiAJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewotCXJldHVybiBfX2Jpb19hZGRfcGFnZShiZGV2X2dldF9xdWV1ZShiaW8tPmJpX2JkZXYpLCBiaW8sIHBhZ2UsCi0JCQkgICAgICBsZW4sIG9mZnNldCk7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiaW8tPmJpX2JkZXYpOworCXJldHVybiBfX2Jpb19hZGRfcGFnZShxLCBiaW8sIHBhZ2UsIGxlbiwgb2Zmc2V0LCBxLT5tYXhfc2VjdG9ycyk7CiB9CiAKIHN0cnVjdCBiaW9fbWFwX2RhdGEgewpAQCAtNTE0LDcgKzUzNCw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChfX2Jpb19hZGRfcGFnZShxLCBiaW8sIHBhZ2UsIGJ5dGVzLCAwKSA8IGJ5dGVzKSB7CisJCWlmIChiaW9fYWRkX3BjX3BhZ2UocSwgYmlvLCBwYWdlLCBieXRlcywgMCkgPCBieXRlcykgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC02MjgsNyArNjQ4LDggQEAKIAkJCS8qCiAJCQkgKiBzb3JyeS4uLgogCQkJICovCi0JCQlpZiAoX19iaW9fYWRkX3BhZ2UocSwgYmlvLCBwYWdlc1tqXSwgYnl0ZXMsIG9mZnNldCkgPCBieXRlcykKKwkJCWlmIChiaW9fYWRkX3BjX3BhZ2UocSwgYmlvLCBwYWdlc1tqXSwgYnl0ZXMsIG9mZnNldCkgPAorCQkJCQkgICAgYnl0ZXMpCiAJCQkJYnJlYWs7CiAKIAkJCWxlbiAtPSBieXRlczsKQEAgLTgwMSw4ICs4MjIsOCBAQAogCQlpZiAoYnl0ZXMgPiBsZW4pCiAJCQlieXRlcyA9IGxlbjsKIAotCQlpZiAoX19iaW9fYWRkX3BhZ2UocSwgYmlvLCB2aXJ0X3RvX3BhZ2UoZGF0YSksIGJ5dGVzLAotCQkJCSAgIG9mZnNldCkgPCBieXRlcykKKwkJaWYgKGJpb19hZGRfcGNfcGFnZShxLCBiaW8sIHZpcnRfdG9fcGFnZShkYXRhKSwgYnl0ZXMsCisJCQkJICAgIG9mZnNldCkgPCBieXRlcykKIAkJCWJyZWFrOwogCiAJCWRhdGEgKz0gYnl0ZXM7CkBAIC0xMjI4LDYgKzEyNDksNyBAQAogRVhQT1JUX1NZTUJPTChiaW9fcGh5c19zZWdtZW50cyk7CiBFWFBPUlRfU1lNQk9MKGJpb19od19zZWdtZW50cyk7CiBFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGFnZSk7CitFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGNfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGJpb19nZXRfbnJfdmVjcyk7CiBFWFBPUlRfU1lNQk9MKGJpb19tYXBfdXNlcik7CiBFWFBPUlRfU1lNQk9MKGJpb191bm1hcF91c2VyKTsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggODE4NjM0MS4uNTVhYzAzMiAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTExNzAsNyArMTE3MCw3IEBACiAJfQogCiAJcmV0ID0gcndfdmVyaWZ5X2FyZWEodHlwZSwgZmlsZSwgcG9zLCB0b3RfbGVuKTsKLQlpZiAocmV0KQorCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAogCWZudiA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2suYyBiL2ZzL25mcy9jYWxsYmFjay5jCmluZGV4IGYyY2E3ODIuLjMwY2FlMzYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFjay5jCisrKyBiL2ZzL25mcy9jYWxsYmFjay5jCkBAIC0xNCw2ICsxNCw5IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CisKKyNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CisKICNpbmNsdWRlICJuZnM0X2ZzLmgiCiAjaW5jbHVkZSAiY2FsbGJhY2suaCIKIApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9DaGFuZ2VMb2cgYi9mcy9udGZzL0NoYW5nZUxvZwppbmRleCA1MGE3NzQ5Li4wMmY0NDA5IDEwMDY0NAotLS0gYS9mcy9udGZzL0NoYW5nZUxvZworKysgYi9mcy9udGZzL0NoYW5nZUxvZwpAQCAtODg0LDcgKzg4NCw3IEBACiAKIAktIEFkZCBoYW5kbGluZyBmb3IgaW5pdGlhbGl6ZWRfc2l6ZSAhPSBkYXRhX3NpemUgaW4gY29tcHJlc3NlZCBmaWxlcy4KIAktIFJlZHVjZSBmdW5jdGlvbiBsb2NhbCBzdGFjayB1c2FnZSBmcm9tIDB4M2Q0IGJ5dGVzIHRvIGp1c3Qgbm9pc2UgaW4KLQkgIGZzL250ZnMvdXBjYXNlLmMuIChSYW5keSBEdW5sYXAgPHJkZHVubGFwQG9zZGwub3JkPikKKwkgIGZzL250ZnMvdXBjYXNlLmMuIChSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PikKIAktIFJlbW92ZSBjb21waWxlciB3YXJuaW5ncyBmb3IgbmV3ZXIgZ2NjLgogCS0gUGFnZXMgYXJlIG5vIGxvbmdlciBrbWFwcGVkIGJ5IG1tL2ZpbGVtYXAuYzo6Z2VuZXJpY19maWxlX3dyaXRlKCkKIAkgIGFyb3VuZCBjYWxscyB0byAtPntwcmVwYXJlLGNvbW1pdH1fd3JpdGUuICBBZGFwdCBOVEZTIGFwcHJvcHJpYXRlbHkKZGlmZiAtLWdpdCBhL2ZzL3FueDQvYml0bWFwLmMgYi9mcy9xbng0L2JpdG1hcC5jCmluZGV4IDk5MTI1MzkuLjQ2ZWZiZjUgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvYml0bWFwLmMKKysrIGIvZnMvcW54NC9iaXRtYXAuYwpAQCAtMjMsMTAgKzIzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAorI2lmIDAKIGludCBxbng0X25ld19ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiAwOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogc3RhdGljIHZvaWQgY291bnRfYml0cyhyZWdpc3RlciBjb25zdCBjaGFyICpibVBhcnQsIHJlZ2lzdGVyIGludCBzaXplLAogCQkgICAgICAgaW50ICpjb25zdCB0ZikKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCBhMDkxZWU0Li5kZjM0NjhhIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtMTgyLDIyICsxODMsMzMgQEAKIH0KICNlbmRpZgogCisvKgorICogcndfdmVyaWZ5X2FyZWEgZG9lc24ndCBsaWtlIGh1Z2UgY291bnRzLiBXZSBsaW1pdAorICogdGhlbSB0byBzb21ldGhpbmcgdGhhdCBmaXRzIGluICJpbnQiIHNvIHRoYXQgb3RoZXJzCisgKiB3b24ndCBoYXZlIHRvIGRvIHJhbmdlIGNoZWNrcyBhbGwgdGhlIHRpbWUuCisgKi8KKyNkZWZpbmUgTUFYX1JXX0NPVU5UIChJTlRfTUFYICYgUEFHRV9DQUNIRV9NQVNLKQogCiBpbnQgcndfdmVyaWZ5X2FyZWEoaW50IHJlYWRfd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgKnBwb3MsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWxvZmZfdCBwb3M7CiAKLQlpZiAodW5saWtlbHkoY291bnQgPiBJTlRfTUFYKSkKKwlpZiAodW5saWtlbHkoKHNzaXplX3QpIGNvdW50IDwgMCkpCiAJCWdvdG8gRWludmFsOwogCXBvcyA9ICpwcG9zOwogCWlmICh1bmxpa2VseSgocG9zIDwgMCkgfHwgKGxvZmZfdCkgKHBvcyArIGNvdW50KSA8IDApKQogCQlnb3RvIEVpbnZhbDsKIAogCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JaWYgKGlub2RlLT5pX2Zsb2NrICYmIE1BTkRBVE9SWV9MT0NLKGlub2RlKSkKLQkJcmV0dXJuIGxvY2tzX21hbmRhdG9yeV9hcmVhKHJlYWRfd3JpdGUgPT0gUkVBRCA/IEZMT0NLX1ZFUklGWV9SRUFEIDogRkxPQ0tfVkVSSUZZX1dSSVRFLCBpbm9kZSwgZmlsZSwgcG9zLCBjb3VudCk7Ci0JcmV0dXJuIDA7CisJaWYgKGlub2RlLT5pX2Zsb2NrICYmIE1BTkRBVE9SWV9MT0NLKGlub2RlKSkgeworCQlpbnQgcmV0dmFsID0gbG9ja3NfbWFuZGF0b3J5X2FyZWEoCisJCQlyZWFkX3dyaXRlID09IFJFQUQgPyBGTE9DS19WRVJJRllfUkVBRCA6IEZMT0NLX1ZFUklGWV9XUklURSwKKwkJCWlub2RlLCBmaWxlLCBwb3MsIGNvdW50KTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gY291bnQgPiBNQVhfUldfQ09VTlQgPyBNQVhfUldfQ09VTlQgOiBjb3VudDsKIAogRWludmFsOgogCXJldHVybiAtRUlOVkFMOwpAQCAtMjQ0LDcgKzI1Niw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgZmlsZSwgcG9zLCBjb3VudCk7Ci0JaWYgKCFyZXQpIHsKKwlpZiAocmV0ID49IDApIHsKKwkJY291bnQgPSByZXQ7CiAJCXJldCA9IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbiAoZmlsZSwgTUFZX1JFQUQpOwogCQlpZiAoIXJldCkgewogCQkJaWYgKGZpbGUtPmZfb3AtPnJlYWQpCkBAIC0yOTUsNyArMzA4LDggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXQgPSByd192ZXJpZnlfYXJlYShXUklURSwgZmlsZSwgcG9zLCBjb3VudCk7Ci0JaWYgKCFyZXQpIHsKKwlpZiAocmV0ID49IDApIHsKKwkJY291bnQgPSByZXQ7CiAJCXJldCA9IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbiAoZmlsZSwgTUFZX1dSSVRFKTsKIAkJaWYgKCFyZXQpIHsKIAkJCWlmIChmaWxlLT5mX29wLT53cml0ZSkKQEAgLTQ5Nyw3ICs1MTEsNyBAQAogCX0KIAogCXJldCA9IHJ3X3ZlcmlmeV9hcmVhKHR5cGUsIGZpbGUsIHBvcywgdG90X2xlbik7Ci0JaWYgKHJldCkKKwlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJcmV0ID0gc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKGZpbGUsIHR5cGUgPT0gUkVBRCA/IE1BWV9SRUFEIDogTUFZX1dSSVRFKTsKIAlpZiAocmV0KQpAQCAtNjUzLDggKzY2Nyw5IEBACiAJCWlmICghKGluX2ZpbGUtPmZfbW9kZSAmIEZNT0RFX1BSRUFEKSkKIAkJCWdvdG8gZnB1dF9pbjsKIAlyZXR2YWwgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbl9maWxlLCBwcG9zLCBjb3VudCk7Ci0JaWYgKHJldHZhbCkKKwlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBmcHV0X2luOworCWNvdW50ID0gcmV0dmFsOwogCiAJcmV0dmFsID0gc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uIChpbl9maWxlLCBNQVlfUkVBRCk7CiAJaWYgKHJldHZhbCkKQEAgLTY3NCw4ICs2ODksOSBAQAogCQlnb3RvIGZwdXRfb3V0OwogCW91dF9pbm9kZSA9IG91dF9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlyZXR2YWwgPSByd192ZXJpZnlfYXJlYShXUklURSwgb3V0X2ZpbGUsICZvdXRfZmlsZS0+Zl9wb3MsIGNvdW50KTsKLQlpZiAocmV0dmFsKQorCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGZwdXRfb3V0OworCWNvdW50ID0gcmV0dmFsOwogCiAJcmV0dmFsID0gc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uIChvdXRfZmlsZSwgTUFZX1dSSVRFKTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKaW5kZXggNzJlMTIwNy4uMDIwOTFlYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0ci5jCkBAIC0xMTUsOCArMTE1LDggQEAKIH0KIAogLyogUmV0dXJucyB0aGUgZGVudHJ5IChvciBOVUxMKSByZWZlcnJpbmcgdG8gdGhlIHJvb3Qgb2YgdGhlIGV4dGVuZGVkCi0gKiBhdHRyaWJ1dGUgZGlyZWN0b3J5IHRyZWUuIElmIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmV0cmVpdmVkLCBpdCBpcyB1c2VkLgotICogT3RoZXJ3aXNlLCB3ZSBhdHRlbXB0IHRvIHJldHJlaXZlIGl0IGZyb20gZGlzay4gSXQgbWF5IGFsc28gcmV0dXJuCisgKiBhdHRyaWJ1dGUgZGlyZWN0b3J5IHRyZWUuIElmIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmV0cmlldmVkLCBpdCBpcyB1c2VkLgorICogT3RoZXJ3aXNlLCB3ZSBhdHRlbXB0IHRvIHJldHJpZXZlIGl0IGZyb20gZGlzay4gSXQgbWF5IGFsc28gcmV0dXJuCiAgKiBhIHBvaW50ZXItZW5jb2RlZCBlcnJvci4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpnZXRfeGFfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCmRpZmYgLS1naXQgYS9mcy91ZGYvYmFsbG9jLmMgYi9mcy91ZGYvYmFsbG9jLmMKaW5kZXggYjlkZWQyNi4uNjU5OGE1MCAxMDA2NDQKLS0tIGEvZnMvdWRmL2JhbGxvYy5jCisrKyBiL2ZzL3VkZi9iYWxsb2MuYwpAQCAtNCwxMSArNCw2IEBACiAgKiBQVVJQT1NFCiAgKglCbG9jayBhbGxvY2F0aW9uIGhhbmRsaW5nIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uCiAgKgotICogQ09OVEFDVFMKLSAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCi0gKgogICogQ09QWVJJR0hUCiAgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2NyYy5jIGIvZnMvdWRmL2NyYy5jCmluZGV4IGQ5NWM2ZTMuLjFiODJhNGEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9jcmMuYworKysgYi9mcy91ZGYvY3JjLmMKQEAgLTE0LDExICsxNCw2IEBACiAgKgogICoJQVQmVCBnaXZlcyBwZXJtaXNzaW9uIGZvciB0aGUgZnJlZSB1c2Ugb2YgdGhlIENSQyBzb3VyY2UgY29kZS4KICAqCi0gKiBDT05UQUNUUwotICoJRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQotICoJZGlyZWN0ZWQgdG8gdGhlIGRldmVsb3BtZW50IHRlYW0gbWFpbGluZyBsaXN0IChydW4gYnkgbWFqb3Jkb21vKToKLSAqCQlsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KLSAqCiAgKiBDT1BZUklHSFQKICAqCVRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICoJTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmMKaW5kZXggODI0NDBiNy4uZjUyMjI1MiAxMDA2NDQKLS0tIGEvZnMvdWRmL2Rpci5jCisrKyBiL2ZzL3VkZi9kaXIuYwpAQCAtNCwxMSArNCw2IEBACiAgKiBQVVJQT1NFCiAgKiAgRGlyZWN0b3J5IGhhbmRsaW5nIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uCiAgKgotICogQ09OVEFDVFMKLSAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCi0gKgogICogQ09QWVJJR0hUCiAgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2RpcmVjdG9yeS5jIGIvZnMvdWRmL2RpcmVjdG9yeS5jCmluZGV4IDlhNjFlY2MuLmZlNzUxYTIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXJlY3RvcnkuYworKysgYi9mcy91ZGYvZGlyZWN0b3J5LmMKQEAgLTQsMTEgKzQsNiBAQAogICogUFVSUE9TRQogICoJRGlyZWN0b3J5IHJlbGF0ZWQgZnVuY3Rpb25zCiAgKgotICogQ09OVEFDVFMKLSAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCi0gKgogICogQ09QWVJJR0hUCiAgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggMDFmNTIwYy4uOGEzODgyOCAxMDA2NDQKLS0tIGEvZnMvdWRmL2ZpbGUuYworKysgYi9mcy91ZGYvZmlsZS5jCkBAIC00LDExICs0LDYgQEAKICAqIFBVUlBPU0UKICAqICBGaWxlIGhhbmRsaW5nIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uCiAgKgotICogQ09OVEFDVFMKLSAqICBFLW1haWwgcmVnYXJkaW5nIGFueSBwb3J0aW9uIG9mIHRoZSBMaW51eCBVREYgZmlsZSBzeXN0ZW0gc2hvdWxkIGJlCi0gKiAgZGlyZWN0ZWQgdG8gdGhlIGRldmVsb3BtZW50IHRlYW0gbWFpbGluZyBsaXN0IChydW4gYnkgbWFqb3Jkb21vKToKLSAqICAgIGxpbnV4X3VkZkBocGVzanJvLmZjLmhwLmNvbQotICoKICAqIENPUFlSSUdIVAogICogIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZzeW5jLmMgYi9mcy91ZGYvZnN5bmMuYwppbmRleCAyZGRlNmI4Li41ODg3ZDc4IDEwMDY0NAotLS0gYS9mcy91ZGYvZnN5bmMuYworKysgYi9mcy91ZGYvZnN5bmMuYwpAQCAtNCwxMSArNCw2IEBACiAgKiBQVVJQT1NFCiAgKiAgRnN5bmMgaGFuZGxpbmcgcm91dGluZXMgZm9yIHRoZSBPU1RBLVVERih0bSkgZmlsZXN5c3RlbS4KICAqCi0gKiBDT05UQUNUUwotICogIEUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqICBkaXJlY3RlZCB0byB0aGUgZGV2ZWxvcG1lbnQgdGVhbSBtYWlsaW5nIGxpc3QgKHJ1biBieSBtYWpvcmRvbW8pOgotICogICAgICBsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KLSAqCiAgKiBDT1BZUklHSFQKICAqICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlIChHUEwpLiBDb3BpZXMgb2YgdGhlIEdQTCBjYW4gYmUgb2J0YWluZWQgZnJvbToKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pYWxsb2MuYyBiL2ZzL3VkZi9pYWxsb2MuYwppbmRleCBhN2U1ZDQwLi5jOWI3MDdiIDEwMDY0NAotLS0gYS9mcy91ZGYvaWFsbG9jLmMKKysrIGIvZnMvdWRmL2lhbGxvYy5jCkBAIC00LDExICs0LDYgQEAKICAqIFBVUlBPU0UKICAqCUlub2RlIGFsbG9jYXRpb24gaGFuZGxpbmcgcm91dGluZXMgZm9yIHRoZSBPU1RBLVVERih0bSkgZmlsZXN5c3RlbS4KICAqCi0gKiBDT05UQUNUUwotICoJRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQotICoJZGlyZWN0ZWQgdG8gdGhlIGRldmVsb3BtZW50IHRlYW0gbWFpbGluZyBsaXN0IChydW4gYnkgbWFqb3Jkb21vKToKLSAqCQlsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KLSAqCiAgKiBDT1BZUklHSFQKICAqCVRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICoJTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jCmluZGV4IGI4Mzg5MGIuLjQwMTRmMTcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCisrKyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC00LDExICs0LDYgQEAKICAqIFBVUlBPU0UKICAqICBJbm9kZSBoYW5kbGluZyByb3V0aW5lcyBmb3IgdGhlIE9TVEEtVURGKHRtKSBmaWxlc3lzdGVtLgogICoKLSAqIENPTlRBQ1RTCi0gKiAgRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQotICogIGRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKiAgICBsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KLSAqCiAgKiBDT1BZUklHSFQKICAqICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlIChHUEwpLiBDb3BpZXMgb2YgdGhlIEdQTCBjYW4gYmUgb2J0YWluZWQgZnJvbToKZGlmZiAtLWdpdCBhL2ZzL3VkZi9sb3dsZXZlbC5jIGIvZnMvdWRmL2xvd2xldmVsLmMKaW5kZXggMmRhNTA4Ny4uMDg0MjE2MSAxMDA2NDQKLS0tIGEvZnMvdWRmL2xvd2xldmVsLmMKKysrIGIvZnMvdWRmL2xvd2xldmVsLmMKQEAgLTQsMTEgKzQsNiBAQAogICogUFVSUE9TRQogICogIExvdyBMZXZlbCBEZXZpY2UgUm91dGluZXMgZm9yIHRoZSBVREYgZmlsZXN5c3RlbQogICoKLSAqIENPTlRBQ1RTCi0gKglFLW1haWwgcmVnYXJkaW5nIGFueSBwb3J0aW9uIG9mIHRoZSBMaW51eCBVREYgZmlsZSBzeXN0ZW0gc2hvdWxkIGJlCi0gKglkaXJlY3RlZCB0byB0aGUgZGV2ZWxvcG1lbnQgdGVhbSBtYWlsaW5nIGxpc3QgKHJ1biBieSBtYWpvcmRvbW8pOgotICoJCWxpbnV4X3VkZkBocGVzanJvLmZjLmhwLmNvbQotICoKICAqIENPUFlSSUdIVAogICoJVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKglMaWNlbnNlIChHUEwpLiBDb3BpZXMgb2YgdGhlIEdQTCBjYW4gYmUgb2J0YWluZWQgZnJvbToKZGlmZiAtLWdpdCBhL2ZzL3VkZi9taXNjLmMgYi9mcy91ZGYvbWlzYy5jCmluZGV4IGZkMzIxZjkuLmNjOGNhMzIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9taXNjLmMKKysrIGIvZnMvdWRmL21pc2MuYwpAQCAtNCwxMSArNCw2IEBACiAgKiBQVVJQT1NFCiAgKglNaXNjZWxsYW5lb3VzIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uCiAgKgotICogQ09OVEFDVFMKLSAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCi0gKgogICogQ09QWVJJR0hUCiAgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuYwppbmRleCBhYzE5MWVkLi5jYTczMmU3IDEwMDY0NAotLS0gYS9mcy91ZGYvbmFtZWkuYworKysgYi9mcy91ZGYvbmFtZWkuYwpAQCAtNCwxMSArNCw2IEBACiAgKiBQVVJQT1NFCiAgKiAgICAgIElub2RlIG5hbWUgaGFuZGxpbmcgcm91dGluZXMgZm9yIHRoZSBPU1RBLVVERih0bSkgZmlsZXN5c3RlbS4KICAqCi0gKiBDT05UQUNUUwotICogICAgICBFLW1haWwgcmVnYXJkaW5nIGFueSBwb3J0aW9uIG9mIHRoZSBMaW51eCBVREYgZmlsZSBzeXN0ZW0gc2hvdWxkIGJlCi0gKiAgICAgIGRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKiAgICAgICAgICAgICAgbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCi0gKgogICogQ09QWVJJR0hUCiAgKiAgICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogICAgICBMaWNlbnNlIChHUEwpLiBDb3BpZXMgb2YgdGhlIEdQTCBjYW4gYmUgb2J0YWluZWQgZnJvbToKZGlmZiAtLWdpdCBhL2ZzL3VkZi9wYXJ0aXRpb24uYyBiL2ZzL3VkZi9wYXJ0aXRpb24uYwppbmRleCA0ZDM2ZjI2Li5kYWJmMmI4IDEwMDY0NAotLS0gYS9mcy91ZGYvcGFydGl0aW9uLmMKKysrIGIvZnMvdWRmL3BhcnRpdGlvbi5jCkBAIC00LDExICs0LDYgQEAKICAqIFBVUlBPU0UKICAqICAgICAgUGFydGl0aW9uIGhhbmRsaW5nIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uCiAgKgotICogQ09OVEFDVFMKLSAqICAgICAgRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQotICogICAgICBkaXJlY3RlZCB0byB0aGUgZGV2ZWxvcG1lbnQgdGVhbSBtYWlsaW5nIGxpc3QgKHJ1biBieSBtYWpvcmRvbW8pOgotICogICAgICAgICAgICAgIGxpbnV4X3VkZkBocGVzanJvLmZjLmhwLmNvbQotICoKICAqIENPUFlSSUdIVAogICogICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICAgICAgTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jCmluZGV4IDE1YmQ0ZjIuLjRhNmY0OWEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zdXBlci5jCisrKyBiL2ZzL3VkZi9zdXBlci5jCkBAIC0xNCwxMSArMTQsNiBAQAogICogICAgaHR0cDovL3d3dy5lY21hLmNoLwogICogICAgaHR0cDovL3d3dy5pc28ub3JnLwogICoKLSAqIENPTlRBQ1RTCi0gKiAgRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQotICogIGRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKgkgIGxpbnV4X3VkZkBocGVzanJvLmZjLmhwLmNvbQotICoKICAqIENPUFlSSUdIVAogICogIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvZnMvdWRmL3N5bWxpbmsuYyBiL2ZzL3VkZi9zeW1saW5rLmMKaW5kZXggNDNmMzA1MS4uNjc0YmI0MCAxMDA2NDQKLS0tIGEvZnMvdWRmL3N5bWxpbmsuYworKysgYi9mcy91ZGYvc3ltbGluay5jCkBAIC00LDExICs0LDYgQEAKICAqIFBVUlBPU0UKICAqCVN5bWxpbmsgaGFuZGxpbmcgcm91dGluZXMgZm9yIHRoZSBPU1RBLVVERih0bSkgZmlsZXN5c3RlbS4KICAqCi0gKiBDT05UQUNUUwotICoJRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQotICoJZGlyZWN0ZWQgdG8gdGhlIGRldmVsb3BtZW50IHRlYW0gbWFpbGluZyBsaXN0IChydW4gYnkgbWFqb3Jkb21vKToKLSAqCQlsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KLSAqCiAgKiBDT1BZUklHSFQKICAqCVRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICoJTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CmRpZmYgLS1naXQgYS9mcy91ZGYvdHJ1bmNhdGUuYyBiL2ZzL3VkZi90cnVuY2F0ZS5jCmluZGV4IDdkYzhhNTUuLmUxYjBlOGMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi90cnVuY2F0ZS5jCisrKyBiL2ZzL3VkZi90cnVuY2F0ZS5jCkBAIC00LDExICs0LDYgQEAKICAqIFBVUlBPU0UKICAqCVRydW5jYXRlIGhhbmRsaW5nIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uCiAgKgotICogQ09OVEFDVFMKLSAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCi0gKgogICogQ09QWVJJR0hUCiAgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VuaWNvZGUuYyBiL2ZzL3VkZi91bmljb2RlLmMKaW5kZXggNWE4MGVmZC4uNzA2YzkyZSAxMDA2NDQKLS0tIGEvZnMvdWRmL3VuaWNvZGUuYworKysgYi9mcy91ZGYvdW5pY29kZS5jCkBAIC0xMSwxMSArMTEsNiBAQAogICoJVVRGLTggaXMgZXhwbGFpbmVkIGluIHRoZSBJRVRGIFJGQyBYWFhYLgogICoJCWZ0cDovL2Z0cC5pbnRlcm5pYy5uZXQvcmZjL3JmY3h4eHgudHh0CiAgKgotICogQ09OVEFDVFMKLSAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtJ3MgbWFpbGluZyBsaXN0IChydW4gYnkgbWFqb3Jkb21vKToKLSAqCQlsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KLSAqCiAgKiBDT1BZUklHSFQKICAqCVRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICoJTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCmluZGV4IDU3OGVkM2YuLjMwMjIwMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCkBAIC0zMjEsNiArMzIxLDcgQEAKICNlbHNlCiAjZGVmaW5lIGZscwlnZW5lcmljX2ZscwogI2VuZGlmCisjZGVmaW5lIGZsczY0ICAgZ2VuZXJpY19mbHM2NAogCiAvKiBDb21wdXRlIHBvd2VycyBvZiB0d28gZm9yIHRoZSBnaXZlbiBpbnRlZ2VyLiAgKi8KIHN0YXRpYyBpbmxpbmUgbG9uZyBmbG9vcl9sb2cyKHVuc2lnbmVkIGxvbmcgd29yZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9vaGNpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTg5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgQVNNQVJNX0FSQ0hfT0hDSV9ICisjZGVmaW5lIEFTTUFSTV9BUkNIX09IQ0lfSAorCitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgKCppbml0KShzdHJ1Y3QgZGV2aWNlICopOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgZGV2aWNlICopOworCisJaW50IHBvcnRfbW9kZTsKKyNkZWZpbmUgUE1NX05QU19NT0RFICAgICAgICAgICAxCisjZGVmaW5lIFBNTV9HTE9CQUxfTU9ERSAgICAgICAgMgorI2RlZmluZSBQTU1fUEVSUE9SVF9NT0RFICAgICAgIDMKK307CisKK2V4dGVybiB2b2lkIHB4YV9zZXRfb2hjaV9pbmZvKHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgKmluZm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWFybS9iaXRvcHMuaAppbmRleCA3Mzk5ZDQzLi5kMDJkZTcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCkBAIC0zMzIsNiArMzMyLDcgQEAKICAqLwogCiAjZGVmaW5lIGZscyh4KSBnZW5lcmljX2Zscyh4KQorI2RlZmluZSBmbHM2NCh4KSAgIGdlbmVyaWNfZmxzNjQoeCkKIAogLyoKICAqIGZmczogZmluZCBmaXJzdCBiaXQgc2V0LiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzCkBAIC0zNTEsNiArMzUyLDcgQEAKICNkZWZpbmUgZmxzKHgpIFwKIAkoIF9fYnVpbHRpbl9jb25zdGFudF9wKHgpID8gZ2VuZXJpY19mbHMoeCkgOiBcCiAJICAoeyBpbnQgX19yOyBhc20oImNselx0JTAsICUxIiA6ICI9ciIoX19yKSA6ICJyIih4KSA6ICJjYyIpOyAzMi1fX3I7IH0pICkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAjZGVmaW5lIGZmcyh4KSAoeyB1bnNpZ25lZCBsb25nIF9fdCA9ICh4KTsgZmxzKF9fdCAmIC1fX3QpOyB9KQogI2RlZmluZSBfX2Zmcyh4KSAoZmZzKHgpIC0gMSkKICNkZWZpbmUgZmZ6KHgpIF9fZmZzKCB+KHgpICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvYml0b3BzLmgKaW5kZXggN2QwNjJmYi4uMTVjYzZmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvYml0b3BzLmgKQEAgLTI1OSw2ICsyNTksNyBAQAogICovCiAKICNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisjZGVmaW5lIGZsczY0KHgpICAgZ2VuZXJpY19mbHM2NCh4KQogCiAvKgogICogZmZzOiBmaW5kIGZpcnN0IGJpdCBzZXQuIFRoaXMgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1jcmlzL2JpdG9wcy5oCmluZGV4IDFiZGRiM2YuLmQzZWIwZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9iaXRvcHMuaApAQCAtMjQwLDYgKzI0MCw3IEBACiAgKi8KIAogI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKIC8qCiAgKiBod2VpZ2h0TiAtIHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IG9mIGEgTi1iaXQgd29yZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oCmluZGV4IGI2NjRiZDUuLjAyYmU3YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmgKQEAgLTIyOCw2ICsyMjgsNyBAQAogCQkJCQkJCVwKIAliaXQgPyAzMyAtIGJpdCA6IGJpdDsJCQkJXAogfSkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKIC8qCiAgKiBFdmVyeSBhcmNoaXRlY3R1cmUgbXVzdCBkZWZpbmUgdGhpcyBmdW5jdGlvbi4gSXQncyB0aGUgZmFzdGVzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKaW5kZXggY2UzMWI3My4uMGU2ZDk4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oCkBAIC01Niw2ICs1Niw3IEBACiAgKi8KIAogI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKaW5kZXggNTAzNmY1OS4uYzA0MTFlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKQEAgLTQwNiw1ICs0MDYsNiBAQAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKICNlbmRpZiAvKiBfSDgzMDBfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCmluZGV4IGRkZjE3MzkuLjQ4MDdhYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaApAQCAtMzcyLDYgKzM3Miw3IEBACiAgKi8KIAogI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oCmluZGV4IDcyMzI1MjguLjM2ZDBmYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaApAQCAtMzQ1LDYgKzM0NSw3IEBACiAJeCB8PSB4ID4+IDE2OwogCXJldHVybiBpYTY0X3BvcGNudCh4KTsKIH0KKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKIC8qCiAgKiBmZnM6IGZpbmQgZmlyc3QgYml0IHNldC4gVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcyB0aGUgbGliYyBhbmQgY29tcGlsZXIgYnVpbHRpbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmgKaW5kZXggZTc4NDQzOS4uYWJlYTJmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCkBAIC00NjUsNiArNDY1LDcgQEAKICAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCiAgKi8KICNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisjZGVmaW5lIGZsczY0KHgpICAgZ2VuZXJpY19mbHM2NCh4KQogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9iaXRvcHMuaAppbmRleCBiMWJjZjdjNjYuLjEzZjRjMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9iaXRvcHMuaApAQCAtMzEwLDYgKzMxMCw3IEBACiAKIAlyZXR1cm4gMzIgLSBjbnQ7CiB9CisjZGVmaW5lIGZsczY0KHgpICAgZ2VuZXJpY19mbHM2NCh4KQogCiAvKgogICogRXZlcnkgYXJjaGl0ZWN0dXJlIG11c3QgZGVmaW5lIHRoaXMgZnVuY3Rpb24uIEl0J3MgdGhlIGZhc3Rlc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaAppbmRleCBjNDJmODhhLi40MDU4ZGQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2JpdG9wcy5oCkBAIC00OTksNSArNDk5LDYgQEAKICAqIGZsczogZmluZCBsYXN0IGJpdCBzZXQuCiAgKi8KICNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisjZGVmaW5lIGZsczY0KHgpICAgZ2VuZXJpY19mbHM2NCh4KQogCiAjZW5kaWYgLyogX002OEtOT01NVV9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy8uZ2l0aWdub3JlIGIvaW5jbHVkZS9hc20tbWlwcy8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1N2FkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWFzbV9vZmZzZXRzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCmluZGV4IDU0OTZmOTAuLjNiMGM4YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApAQCAtNjk1LDcgKzY5NSw3IEBACiAKIAlyZXR1cm4gZmx6KH53b3JkKSArIDE7CiB9Ci0KKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKIC8qCiAgKiBmaW5kX25leHRfemVyb19iaXQgLSBmaW5kIHRoZSBmaXJzdCB6ZXJvIGJpdCBpbiBhIG1lbW9yeSByZWdpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9iaXRvcHMuaAppbmRleCA1NWI5OGM2Li4xNWQ4YzJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2JpdG9wcy5oCkBAIC0yNjMsNiArMjYzLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CisjZGVmaW5lIGZsczY0KHgpICAgZ2VuZXJpY19mbHM2NCh4KQogCiAvKgogICogaHdlaWdodE46IHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IChpLmUuIHRoZSBudW1iZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCmluZGV4IDU3MjcyMjkuLjE5OTZlYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaApAQCAtMzEwLDYgKzMxMCw3IEBACiAJYXNtICgiY250bHp3ICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoeCkpOwogCXJldHVybiAzMiAtIGx6OwogfQorI2RlZmluZSBmbHM2NCh4KSAgIGdlbmVyaWNfZmxzNjQoeCkKIAogLyoKICAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaAppbmRleCBiMDdjNTc4Li42MTIzMjc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKQEAgLTgzOSw2ICs4MzksNyBAQAogICogZmxzOiBmaW5kIGxhc3QgYml0IHNldC4KICAqLwogI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKIC8qCiAgKiBod2VpZ2h0TjogcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKGkuZS4gdGhlIG51bWJlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaAppbmRleCA1MTYzZDFmLi4xYzUyNjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaApAQCAtNDcwLDYgKzQ3MCw3IEBACiAgKi8KIAogI2RlZmluZSBmbHMoeCkgZ2VuZXJpY19mbHMoeCkKKyNkZWZpbmUgZmxzNjQoeCkgICBnZW5lcmljX2ZsczY0KHgpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zaDY0L2JpdG9wcy5oCmluZGV4IGUxZmY2M2UuLmNlOWMzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9iaXRvcHMuaApAQCAtNTEwLDYgKzUxMCw3IEBACiAKICNkZWZpbmUgZmZzKHgpCWdlbmVyaWNfZmZzKHgpCiAjZGVmaW5lIGZscyh4KQlnZW5lcmljX2Zscyh4KQorI2RlZmluZSBmbHM2NCh4KSAgIGdlbmVyaWNfZmxzNjQoeCkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaAppbmRleCBiZmJkNzk1Li40MTcyMmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9iaXRvcHMuaApAQCAtMjk4LDYgKzI5OCw3IEBACiAgKiBOb3RlIGZscygwKSA9IDAsIGZscygxKSA9IDEsIGZscygweDgwMDAwMDAwKSA9IDMyLgogICovCiAjZGVmaW5lIGZscyh4KSBnZW5lcmljX2Zscyh4KQorI2RlZmluZSBmbHM2NCh4KSAgIGdlbmVyaWNfZmxzNjQoeCkKIAogLyoKICAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaAppbmRleCA2Mzg4YjgzLi42ZWZjMDE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYml0b3BzLmgKQEAgLTExOSw2ICsxMTksNyBAQAogICovCiAKICNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzKHgpCisjZGVmaW5lIGZsczY0KHgpICAgZ2VuZXJpY19mbHM2NCh4KQogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaAppbmRleCBiOTFlNzk5Li44OTU1ZDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYml0b3BzLmgKQEAgLTI3Niw2ICsyNzYsNyBAQAogCiAjZGVmaW5lIGZmcyh4KSBnZW5lcmljX2ZmcyAoeCkKICNkZWZpbmUgZmxzKHgpIGdlbmVyaWNfZmxzICh4KQorI2RlZmluZSBmbHM2NCh4KSBnZW5lcmljX2ZsczY0KHgpCiAjZGVmaW5lIF9fZmZzKHgpIGZmcyh4KQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaAppbmRleCAwNWEwZDM3Li5hNGQ1ZDA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oCkBAIC0zNDAsNiArMzQwLDIwIEBACiAJcmV0dXJuIHdvcmQ7CiB9CiAKKy8qCisgKiBfX2ZsczogZmluZCBsYXN0IGJpdCBzZXQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIHplcm8gZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IH4wVUwgZmlyc3QuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19mbHModW5zaWduZWQgbG9uZyB3b3JkKQoreworCV9fYXNtX18oImJzcnEgJTEsJTAiCisJCToiPXIiICh3b3JkKQorCQk6InJtIiAod29yZCkpOworCXJldHVybiB3b3JkOworfQorCiAjaWZkZWYgX19LRVJORUxfXwogCiBzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICpiKQpAQCAtMzcwLDYgKzM4NCwxOSBAQAogfQogCiAvKioKKyAqIGZsczY0IC0gZmluZCBsYXN0IGJpdCBzZXQgaW4gNjQgYml0IHdvcmQKKyAqIEB4OiB0aGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzIGZscy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGZsczY0KF9fdTY0IHgpCit7CisJaWYgKHggPT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIF9fZmxzKHgpICsgMTsKK30KKworLyoqCiAgKiBod2VpZ2h0TiAtIHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IG9mIGEgTi1iaXQgd29yZAogICogQHg6IHRoZSB3b3JkIHRvIHdlaWdoCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2JpdG9wcy5oCmluZGV4IGU3NmVlODguLjBhMjA2NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvYml0b3BzLmgKQEAgLTI0NSw2ICsyNDUsNyBAQAogewogCXJldHVybiBfX2NudGx6KHgpOwogfQorI2RlZmluZSBmbHM2NCh4KSAgIGdlbmVyaWNfZmxzNjQoeCkKIAogc3RhdGljIF9faW5saW5lX18gaW50CiBmaW5kX25leHRfYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBzaXplLCBpbnQgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggNjg1ZmQzNy4uYjYwZmZlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC0yOTIsNiArMjkyLDggQEAKIGV4dGVybiB2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKik7CiAKIGV4dGVybiBpbnQgYmlvX2FkZF9wYWdlKHN0cnVjdCBiaW8gKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50LHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IGJpb19hZGRfcGNfcGFnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgYmlvICosIHN0cnVjdCBwYWdlICosCisJCQkgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGJpb19nZXRfbnJfdmVjcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19tYXBfdXNlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCiAJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggMzhjMmZiNy4uNmEyYTE5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC03Niw2ICs3NiwxNSBAQAogICovCiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfZmxzNjQoX191NjQgeCkKK3sKKwlfX3UzMiBoID0geCA+PiAzMjsKKwlpZiAoaCkKKwkJcmV0dXJuIGZscyh4KSArIDMyOworCXJldHVybiBmbHMoeCk7Cit9CisKIHN0YXRpYyBfX2lubGluZV9fIGludCBnZXRfYml0bWFza19vcmRlcih1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaW50IG9yZGVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggYTMzYTMxZS4uYTE4NTAwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xODQsNiArMTg0LDcgQEAKIAl2b2lkICpzZW5zZTsKIAogCXVuc2lnbmVkIGludCB0aW1lb3V0OworCWludCByZXRyaWVzOwogCiAJLyoKIAkgKiBGb3IgUG93ZXIgTWFuYWdlbWVudCByZXF1ZXN0cwpAQCAtNTU4LDYgKzU1OSw3IEBACiBleHRlcm4gdm9pZCByZWdpc3Rlcl9kaXNrKHN0cnVjdCBnZW5kaXNrICpkZXYpOwogZXh0ZXJuIHZvaWQgZ2VuZXJpY19tYWtlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKTsKIGV4dGVybiB2b2lkIGJsa19wdXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiB2b2lkIF9fYmxrX3B1dF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIGV4dGVybiB2b2lkIGJsa19lbmRfc3luY19ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogZXh0ZXJuIHZvaWQgYmxrX2F0dGVtcHRfcmVtZXJnZShyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiBleHRlcm4gc3RydWN0IHJlcXVlc3QgKmJsa19nZXRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50LCBnZnBfdCk7CkBAIC01NzksNiArNTgxLDEwIEBACiBleHRlcm4gaW50IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBzZ19pb3ZlYyAqLCBpbnQpOwogZXh0ZXJuIGludCBibGtfZXhlY3V0ZV9ycShyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGdlbmRpc2sgKiwKIAkJCSAgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKK2V4dGVybiB2b2lkIGJsa19leGVjdXRlX3JxX25vd2FpdChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGdlbmRpc2sgKiwKKwkJCQkgIHN0cnVjdCByZXF1ZXN0ICosIGludCwKKwkJCQkgIHZvaWQgKCpkb25lKShzdHJ1Y3QgcmVxdWVzdCAqKSk7CisKIHN0YXRpYyBpbmxpbmUgcmVxdWVzdF9xdWV1ZV90ICpiZGV2X2dldF9xdWV1ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCXJldHVybiBiZGV2LT5iZF9kaXNrLT5xdWV1ZTsKQEAgLTY5Niw3ICs3MDIsOCBAQAogCiAjZGVmaW5lIE1BWF9QSFlTX1NFR01FTlRTIDEyOAogI2RlZmluZSBNQVhfSFdfU0VHTUVOVFMgMTI4Ci0jZGVmaW5lIE1BWF9TRUNUT1JTIDI1NQorI2RlZmluZSBTQUZFX01BWF9TRUNUT1JTIDI1NQorI2RlZmluZSBCTEtfREVGX01BWF9TRUNUT1JTIDEwMjQKIAogI2RlZmluZSBNQVhfU0VHTUVOVF9TSVpFCTY1NTM2CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKaW5kZXggZDA2ODE3Ni4uYzMxNjUwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTI1Niw2ICsyNTYsMTYgQEAKIC8qIHF1ZXJ5IHRoZSBjdXJyZW50IENQVSBmcmVxdWVuY3kgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CiAKKy8qIHF1ZXJ5IHRoZSBsYXN0IGtub3duIENQVSBmcmVxIChpbiBrSHopLiBJZiB6ZXJvLCBjcHVmcmVxIGNvdWxkbid0IGRldGVjdCBpdCAqLworI2lmZGVmIENPTkZJR19DUFVfRlJFUQordW5zaWduZWQgaW50IGNwdWZyZXFfcXVpY2tfZ2V0KHVuc2lnbmVkIGludCBjcHUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWZyZXFfcXVpY2tfZ2V0KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUSBERUZBVUxUIEdPVkVSTk9SICAgICAgICAgICAgICAgICAgICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjY3AuaCBiL2luY2x1ZGUvbGludXgvZGNjcC5oCmluZGV4IDcxZmFiNDMuLjA4ODUyOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNjcC5oCkBAIC0xOTIsMTAgKzE5Miw5IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfdGltZXdhaXRfc29jay5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3RjcF9zdGF0ZXMuaD4KLSNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKIGVudW0gZGNjcF9zdGF0ZSB7CiAJRENDUF9PUEVOCT0gVENQX0VTVEFCTElTSEVELApAQCAtNDA4LDggKzQwNyw2IEBACiAgKiBAZGNjcHNfZ2FyIC0gZ3JlYXRlc3QgdmFsaWQgYWNrIG51bWJlciByZWNlaXZlZCBvbiBhIG5vbi1TeW5jOyBpbml0aWFsaXplZCB0byAlZGNjcHNfaXNzCiAgKiBAZGNjcHNfdGltZXN0YW1wX3RpbWUgLSB0aW1lIG9mIGxhdGVzdCBUSU1FU1RBTVAgb3B0aW9uCiAgKiBAZGNjcHNfdGltZXN0YW1wX2VjaG8gLSBsYXRlc3QgdGltZXN0YW1wIHJlY2VpdmVkIG9uIGEgVElNRVNUQU1QIG9wdGlvbgotICogQGRjY3BzX2V4dF9oZWFkZXJfbGVuIC0gbmV0d29yayBwcm90b2NvbCBvdmVyaGVhZCAoSVAvSVB2NiBvcHRpb25zKQotICogQGRjY3BzX3BtdHVfY29va2llIC0gTGFzdCBwbXR1IHNlZW4gYnkgc29ja2V0CiAgKiBAZGNjcHNfcGFja2V0X3NpemUgLSBTZXQgdGhydSBzZXRzb2Nrb3B0CiAgKiBAZGNjcHNfcm9sZSAtIFJvbGUgb2YgdGhpcyBzb2NrLCBvbmUgb2YgJWRjY3Bfcm9sZQogICogQGRjY3BzX25kcF9jb3VudCAtIG51bWJlciBvZiBOb24gRGF0YSBQYWNrZXRzIHNpbmNlIGxhc3QgZGF0YSBwYWNrZXQKQEAgLTQzNCw4ICs0MzEsNiBAQAogCV9fdTMyCQkJCWRjY3BzX3RpbWVzdGFtcF9lY2hvOwogCV9fdTMyCQkJCWRjY3BzX3BhY2tldF9zaXplOwogCXVuc2lnbmVkIGxvbmcJCQlkY2Nwc19uZHBfY291bnQ7Ci0JX191MTYJCQkJZGNjcHNfZXh0X2hlYWRlcl9sZW47Ci0JX191MzIJCQkJZGNjcHNfcG10dV9jb29raWU7CiAJX191MzIJCQkJZGNjcHNfbXNzX2NhY2hlOwogCXN0cnVjdCBkY2NwX29wdGlvbnMJCWRjY3BzX29wdGlvbnM7CiAJc3RydWN0IGRjY3BfYWNrdmVjCQkqZGNjcHNfaGNfcnhfYWNrdmVjOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oIGIvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCmluZGV4IDVmNDlhMzAuLjc0NWM5ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKQEAgLTYzLDEwICs2MywxMSBAQAogICogQGFkZHI6IFBvaW50ZXIgdG8gYSBzaXgtYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBFdGhlcm5ldCBhZGRyZXNzCiAgKgogICogUmV0dXJuIHRydWUgaWYgdGhlIGFkZHJlc3MgaXMgYSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAqIEJ5IGRlZmluaXRpb24gdGhlIGJyb2FkY2FzdCBhZGRyZXNzIGlzIGFsc28gYSBtdWx0aWNhc3QgYWRkcmVzcy4KICAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoY29uc3QgdTggKmFkZHIpCiB7Ci0JcmV0dXJuICgoYWRkclswXSAhPSAweGZmKSAmJiAoMHgwMSAmIGFkZHJbMF0pKTsKKwlyZXR1cm4gKDB4MDEgJiBhZGRyWzBdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmggYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKaW5kZXggZTY3N2Y3My4uNGZhYjNkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaApAQCAtMTU3LDggKzE1Nyw3IEBACiBleHRlcm4gaW50IHJlZ2lzdGVyX3BwcG94X3Byb3RvKGludCBwcm90b19udW0sIHN0cnVjdCBwcHBveF9wcm90byAqcHApOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9wcHBveF9wcm90byhpbnQgcHJvdG9fbnVtKTsKIGV4dGVybiB2b2lkIHBwcG94X3VuYmluZF9zb2NrKHN0cnVjdCBzb2NrICpzayk7LyogZGVsZXRlIHBwcC1jaGFubmVsIGJpbmRpbmcgKi8KLWV4dGVybiBpbnQgcHBwb3hfY2hhbm5lbF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKnBjLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgcHBwb3hfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiBQUFBvWCBzb2NrZXQgc3RhdGVzICovCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXAuaCBiL2luY2x1ZGUvbGludXgvaXAuaAppbmRleCAzM2U4YTE5Li45ZTJlYjlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcC5oCkBAIC0xNiw2ICsxNiw3IEBACiAgKi8KICNpZm5kZWYgX0xJTlVYX0lQX0gKICNkZWZpbmUgX0xJTlVYX0lQX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2RlZmluZSBJUFRPU19UT1NfTUFTSwkJMHgxRQpAQCAtNzgsMTI2ICs3OSw2IEBACiAjZGVmaW5lCUlQT1BUX1RTX1RTQU5EQUREUgkxCQkvKiB0aW1lc3RhbXBzIGFuZCBhZGRyZXNzZXMgKi8KICNkZWZpbmUJSVBPUFRfVFNfUFJFU1BFQwkzCQkvKiBzcGVjaWZpZWQgbW9kdWxlcyBvbmx5ICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQvcmVxdWVzdF9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pZ21wLmg+Ci0jaW5jbHVkZSA8bmV0L2Zsb3cuaD4KLQotc3RydWN0IGlwX29wdGlvbnMgewotICBfX3UzMgkJZmFkZHI7CQkJCS8qIFNhdmVkIGZpcnN0IGhvcCBhZGRyZXNzICovCi0gIHVuc2lnbmVkIGNoYXIJb3B0bGVuOwotICB1bnNpZ25lZCBjaGFyIHNycjsKLSAgdW5zaWduZWQgY2hhciBycjsKLSAgdW5zaWduZWQgY2hhciB0czsKLSAgdW5zaWduZWQgY2hhciBpc19zZXRieXVzZXI6MSwJCQkvKiBTZXQgYnkgc2V0c29ja29wdD8JCQkqLwotICAgICAgICAgICAgICAgIGlzX2RhdGE6MSwJCQkvKiBPcHRpb25zIGluIF9fZGF0YSwgcmF0aGVyIHRoYW4gc2tiCSovCi0gICAgICAgICAgICAgICAgaXNfc3RyaWN0cm91dGU6MSwJCS8qIFN0cmljdCBzb3VyY2Ugcm91dGUJCQkqLwotICAgICAgICAgICAgICAgIHNycl9pc19oaXQ6MSwJCQkvKiBQYWNrZXQgZGVzdGluYXRpb24gYWRkciB3YXMgb3VyIG9uZQkqLwotICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQ6MSwJCQkvKiBJUCBjaGVja3N1bSBtb3JlIG5vdCB2YWxpZAkJKi8JCi0gICAgICAgICAgICAgICAgcnJfbmVlZGFkZHI6MSwJCQkvKiBOZWVkIHRvIHJlY29yZCBhZGRyIG9mIG91dGdvaW5nIGRldgkqLwotICAgICAgICAgICAgICAgIHRzX25lZWR0aW1lOjEsCQkJLyogTmVlZCB0byByZWNvcmQgdGltZXN0YW1wCQkqLwotICAgICAgICAgICAgICAgIHRzX25lZWRhZGRyOjE7CQkJLyogTmVlZCB0byByZWNvcmQgYWRkciBvZiBvdXRnb2luZyBkZXYgICovCi0gIHVuc2lnbmVkIGNoYXIgcm91dGVyX2FsZXJ0OwotICB1bnNpZ25lZCBjaGFyIF9fcGFkMTsKLSAgdW5zaWduZWQgY2hhciBfX3BhZDI7Ci0gIHVuc2lnbmVkIGNoYXIgX19kYXRhWzBdOwotfTsKLQotI2RlZmluZSBvcHRsZW5ndGgob3B0KSAoc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC0+b3B0bGVuKQotCi1zdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgewotCXN0cnVjdCByZXF1ZXN0X3NvY2sJcmVxOwotCXUzMgkJCWxvY19hZGRyOwotCXUzMgkJCXJtdF9hZGRyOwotCXUxNgkJCXJtdF9wb3J0OwotCXUxNgkJCXNuZF93c2NhbGUgOiA0LCAKLQkJCQlyY3Zfd3NjYWxlIDogNCwgCi0JCQkJdHN0YW1wX29rICA6IDEsCi0JCQkJc2Fja19vawkgICA6IDEsCi0JCQkJd3NjYWxlX29rICA6IDEsCi0JCQkJZWNuX29rCSAgIDogMSwKLQkJCQlhY2tlZAkgICA6IDE7Ci0Jc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppbmV0X3Jzayhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpzaykKLXsKLQlyZXR1cm4gKHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqKXNrOwotfQotCi1zdHJ1Y3QgaXB2Nl9waW5mbzsKLQotc3RydWN0IGluZXRfc29jayB7Ci0JLyogc2sgYW5kIHBpbmV0NiBoYXMgdG8gYmUgdGhlIGZpcnN0IHR3byBtZW1iZXJzIG9mIGluZXRfc29jayAqLwotCXN0cnVjdCBzb2NrCQlzazsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQlzdHJ1Y3QgaXB2Nl9waW5mbwkqcGluZXQ2OwotI2VuZGlmCi0JLyogU29ja2V0IGRlbXVsdGlwbGV4IGNvbXBhcmlzb25zIG9uIGluY29taW5nIHBhY2tldHMuICovCi0JX191MzIJCQlkYWRkcjsJCS8qIEZvcmVpZ24gSVB2NCBhZGRyICovCi0JX191MzIJCQlyY3Zfc2FkZHI7CS8qIEJvdW5kIGxvY2FsIElQdjQgYWRkciAqLwotCV9fdTE2CQkJZHBvcnQ7CQkvKiBEZXN0aW5hdGlvbiBwb3J0ICovCi0JX191MTYJCQludW07CQkvKiBMb2NhbCBwb3J0ICovCi0JX191MzIJCQlzYWRkcjsJCS8qIFNlbmRpbmcgc291cmNlICovCi0JX19zMTYJCQl1Y190dGw7CQkvKiBVbmljYXN0IFRUTCAqLwotCV9fdTE2CQkJY21zZ19mbGFnczsKLQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OwotCV9fdTE2CQkJc3BvcnQ7CQkvKiBTb3VyY2UgcG9ydCAqLwotCV9fdTE2CQkJaWQ7CQkvKiBJRCBjb3VudGVyIGZvciBERiBwa3RzICovCi0JX191OAkJCXRvczsJCS8qIFRPUyAqLwotCV9fdTgJCQltY190dGw7CQkvKiBNdWx0aWNhc3RpbmcgVFRMICovCi0JX191OAkJCXBtdHVkaXNjOwotCXVuc2lnbmVkCQlyZWN2ZXJyIDogMSwKLQkJCQlmcmVlYmluZCA6IDEsCi0JCQkJaGRyaW5jbCA6IDEsCi0JCQkJbWNfbG9vcCA6IDE7Ci0JaW50CQkJbWNfaW5kZXg7CS8qIE11bHRpY2FzdCBkZXZpY2UgaW5kZXggKi8KLQlfX3UzMgkJCW1jX2FkZHI7Ci0Jc3RydWN0IGlwX21jX3NvY2tsaXN0CSptY19saXN0OwkvKiBHcm91cCBhcnJheSAqLwotCS8qCi0JICogRm9sbG93aW5nIG1lbWJlcnMgYXJlIHVzZWQgdG8gcmV0YWluIHRoZSBpbmZvbWF0aW9uIHRvIGJ1aWxkCi0JICogYW4gaXAgaGVhZGVyIG9uIGVhY2ggaXAgZnJhZ21lbnRhdGlvbiB3aGlsZSB0aGUgc29ja2V0IGlzIGNvcmtlZC4KLQkgKi8KLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBpbnQJCWZsYWdzOwotCQl1bnNpZ25lZCBpbnQJCWZyYWdzaXplOwotCQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OwotCQlzdHJ1Y3QgcnRhYmxlCQkqcnQ7Ci0JCWludAkJCWxlbmd0aDsgLyogVG90YWwgbGVuZ3RoIG9mIGFsbCBmcmFtZXMgKi8KLQkJdTMyCQkJYWRkcjsKLQkJc3RydWN0IGZsb3dpCQlmbDsKLQl9IGNvcms7Ci19OwotCi0jZGVmaW5lIElQQ09SS19PUFQJMQkvKiBpcC1vcHRpb25zIGhhcyBiZWVuIGhlbGQgaW4gaXBjb3JrLm9wdCAqLwotI2RlZmluZSBJUENPUktfQUxMRlJBRwkyCS8qIGFsd2F5cyBmcmFnbWVudCAoZm9yIGlwdjYgZm9yIG5vdykgKi8KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQlyZXR1cm4gKHN0cnVjdCBpbmV0X3NvY2sgKilzazsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5ldF9za19jb3B5X2Rlc2NlbmRhbnQoc3RydWN0IHNvY2sgKnNrX3RvLAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19mcm9tLAotCQkJCQkgICAgIGNvbnN0IGludCBhbmNlc3Rvcl9zaXplKQotewotCW1lbWNweShpbmV0X3NrKHNrX3RvKSArIDEsIGluZXRfc2soc2tfZnJvbSkgKyAxLAotCSAgICAgICBza19mcm9tLT5za19wcm90LT5vYmpfc2l6ZSAtIGFuY2VzdG9yX3NpemUpOwotfQotI2lmICEoZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpKQotc3RhdGljIGlubGluZSB2b2lkIGluZXRfc2tfY29weV9kZXNjZW5kYW50KHN0cnVjdCBzb2NrICpza190bywKLQkJCQkJICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2Zyb20pCi17Ci0JX19pbmV0X3NrX2NvcHlfZGVzY2VuZGFudChza190bywgc2tfZnJvbSwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NvY2spKTsKLX0KLSNlbmRpZgotI2VuZGlmCi0KLWV4dGVybiBpbnQgaW5ldF9za19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spOwotCiBzdHJ1Y3QgaXBoZHIgewogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCV9fdTgJaWhsOjQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCmluZGV4IGUwYjkyMjcuLjkzYmJlZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCkBAIC0xNzEsMTIgKzE3MSwxMyBAQAogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9pbjYuaD4gICAgICAgICAgLyogc3RydWN0IHNvY2thZGRyX2luNiAqLwogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgotI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPiAgICAgICAvKiBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqLwogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgogCisjaW5jbHVkZSA8bmV0L2lmX2luZXQ2Lmg+ICAgICAgIC8qIHN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICovCisjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgorCiAvKiAKICAgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHJlc3VsdHMgb2YgZXh0aGRycyBwYXJzaW5nCiAgICBhcyBvZmZzZXRzIGZyb20gc2tiLT5uaC4KQEAgLTE5OSwxOCArMjAwLDE3IEBACiAJcmV0dXJuIElQNkNCKHNrYiktPmlpZjsKIH0KIAotc3RydWN0IHRjcDZfcmVxdWVzdF9zb2NrIHsKLQlzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jawlyZXE7CitzdHJ1Y3QgaW5ldDZfcmVxdWVzdF9zb2NrIHsKIAlzdHJ1Y3QgaW42X2FkZHIJCWxvY19hZGRyOwogCXN0cnVjdCBpbjZfYWRkcgkJcm10X2FkZHI7CiAJc3RydWN0IHNrX2J1ZmYJCSpwa3RvcHRzOwogCWludAkJCWlpZjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRjcDZfcmVxdWVzdF9zb2NrICp0Y3A2X3Jzayhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpzaykKLXsKLQlyZXR1cm4gKHN0cnVjdCB0Y3A2X3JlcXVlc3Rfc29jayAqKXNrOwotfQorc3RydWN0IHRjcDZfcmVxdWVzdF9zb2NrIHsKKwlzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jawkgIHRjcDZyc2tfdGNwOworCXN0cnVjdCBpbmV0Nl9yZXF1ZXN0X3NvY2sgdGNwNnJza19pbmV0NjsKK307CiAKIC8qKgogICogc3RydWN0IGlwdjZfcGluZm8gLSBpcHY2IHByaXZhdGUgYXJlYQpAQCAtMjk4LDEyICsyOTgsMzYgQEAKIAlzdHJ1Y3QgaXB2Nl9waW5mbyBpbmV0NjsKIH07CiAKK2V4dGVybiBpbnQgaW5ldDZfc2tfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXB2Nl9waW5mbyAqIGluZXQ2X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpfX3NrKQogewogCXJldHVybiBpbmV0X3NrKF9fc2spLT5waW5ldDY7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqCisJCQlpbmV0Nl9yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcnNrKQoreworCXJldHVybiAoc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqKSgoKHU4ICopcnNrKSArCisJCQkJCSAgICAgaW5ldF9yc2socnNrKS0+aW5ldDZfcnNrX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGluZXQ2X3Jza19vZmZzZXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcnNrKQoreworCXJldHVybiByc2stPnJza19vcHMtPm9ial9zaXplIC0gc2l6ZW9mKHN0cnVjdCBpbmV0Nl9yZXF1ZXN0X3NvY2spOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXQ2X3JlcXNrX2FsbG9jKHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMpCit7CisJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gcmVxc2tfYWxsb2Mob3BzKTsKKworCWlmIChyZXEgIT0gTlVMTCkKKwkJaW5ldF9yc2socmVxKS0+aW5ldDZfcnNrX29mZnNldCA9IGluZXQ2X3Jza19vZmZzZXQocmVxKTsKKworCXJldHVybiByZXE7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJhdzZfc29jayAqcmF3Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcmF3Nl9zb2NrICopc2s7CkBAIC0zMjMsMjggKzM0NywzNyBAQAogI2RlZmluZSBfX2lwdjZfb25seV9zb2NrKHNrKQkoaW5ldDZfc2soc2spLT5pcHY2b25seSkKICNkZWZpbmUgaXB2Nl9vbmx5X3NvY2soc2spCSgoc2spLT5za19mYW1pbHkgPT0gUEZfSU5FVDYgJiYgX19pcHY2X29ubHlfc29jayhzaykpCiAKLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLQotc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayB7Ci0Jc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrIHR3X3Y2X3NrOwotCXN0cnVjdCBpbjZfYWRkcgkJIHR3X3Y2X2RhZGRyOwotCXN0cnVjdCBpbjZfYWRkcgkJIHR3X3Y2X3Jjdl9zYWRkcjsKK3N0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrIHsKKwlzdHJ1Y3QgaW42X2FkZHIgdHdfdjZfZGFkZHI7CisJc3RydWN0IGluNl9hZGRyCXR3X3Y2X3Jjdl9zYWRkcjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayAqdGNwNl90d3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3N0cnVjdCB0Y3A2X3RpbWV3YWl0X3NvY2sgeworCXN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAgIHRjcDZ0d190Y3A7CisJc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgdGNwNnR3X2luZXQ2OworfTsKKworc3RhdGljIGlubGluZSB1MTYgaW5ldDZfdHdfb2Zmc2V0KGNvbnN0IHN0cnVjdCBwcm90byAqcHJvdCkKIHsKLQlyZXR1cm4gKHN0cnVjdCB0Y3A2X3RpbWV3YWl0X3NvY2sgKilzazsKKwlyZXR1cm4gcHJvdC0+dHdza19wcm90LT50d3NrX29ial9zaXplIC0KKwkJCXNpemVvZihzdHJ1Y3QgaW5ldDZfdGltZXdhaXRfc29jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICpfX3RjcF92Nl9yY3Zfc2FkZHIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfdGltZXdhaXRfc29jayAqaW5ldDZfdHdzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIChzdHJ1Y3QgaW5ldDZfdGltZXdhaXRfc29jayAqKSgoKHU4ICopc2spICsKKwkJCQkJICAgICAgaW5ldF90d3NrKHNrKS0+dHdfaXB2Nl9vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqX19pbmV0Nl9yY3Zfc2FkZHIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiBsaWtlbHkoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpID8KLQkJJmluZXQ2X3NrKHNrKS0+cmN2X3NhZGRyIDogJnRjcDZfdHdzayhzayktPnR3X3Y2X3Jjdl9zYWRkcjsKKwkJJmluZXQ2X3NrKHNrKS0+cmN2X3NhZGRyIDogJmluZXQ2X3R3c2soc2spLT50d192Nl9yY3Zfc2FkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICp0Y3BfdjZfcmN2X3NhZGRyKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluNl9hZGRyICppbmV0Nl9yY3Zfc2FkZHIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiBzay0+c2tfZmFtaWx5ID09IEFGX0lORVQ2ID8gX190Y3BfdjZfcmN2X3NhZGRyKHNrKSA6IE5VTEw7CisJcmV0dXJuIHNrLT5za19mYW1pbHkgPT0gQUZfSU5FVDYgPyBfX2luZXQ2X3Jjdl9zYWRkcihzaykgOiBOVUxMOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpbmV0X3Y2X2lwdjZvbmx5KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKQEAgLTM2MSwxMyArMzk0LDE5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqCisJCQlpbmV0Nl9yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcnNrKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByYXc2X3NvY2sgKnJhdzZfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiBOVUxMOwogfQogCi0jZGVmaW5lIF9fdGNwX3Y2X3Jjdl9zYWRkcihfX3NrKQlOVUxMCi0jZGVmaW5lIHRjcF92Nl9yY3Zfc2FkZHIoX19zaykJCU5VTEwKKyNkZWZpbmUgX19pbmV0Nl9yY3Zfc2FkZHIoX19zaykJTlVMTAorI2RlZmluZSBpbmV0Nl9yY3Zfc2FkZHIoX19zaykJTlVMTAogI2RlZmluZSB0Y3BfdHdza19pcHY2b25seShfX3NrKQkJMAogI2RlZmluZSBpbmV0X3Y2X2lwdjZvbmx5KF9fc2spCQkwCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA0MWVhN2RiLi5lODI4ZTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTEzNiw2ICsxMzYsOCBAQAogCUFUQV9UTU9VVF9CT09UX1FVSUNLCT0gNyAqIEhaLAkvKiBodWVyaXN0aWMgKi8KIAlBVEFfVE1PVVRfQ0RCCQk9IDMwICogSFosCiAJQVRBX1RNT1VUX0NEQl9RVUlDSwk9IDUgKiBIWiwKKwlBVEFfVE1PVVRfSU5URVJOQUwJPSAzMCAqIEhaLAorCUFUQV9UTU9VVF9JTlRFUk5BTF9RVUlDSyA9IDUgKiBIWiwKIAogCS8qIEFUQSBidXMgc3RhdGVzICovCiAJQlVTX1VOS05PV04JCT0gMCwKQEAgLTE5NSw3ICsxOTcsNyBAQAogc3RydWN0IGF0YV9xdWV1ZWRfY21kOwogCiAvKiB0eXBlZGVmcyAqLwotdHlwZWRlZiBpbnQgKCphdGFfcWNfY2JfdCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHVuc2lnbmVkIGludCBlcnJfbWFzayk7Cit0eXBlZGVmIGludCAoKmF0YV9xY19jYl90KSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAKIHN0cnVjdCBhdGFfaW9wb3J0cyB7CiAJdW5zaWduZWQgbG9uZwkJY21kX2FkZHI7CkBAIC0yODAsOSArMjgyLDkgQEAKIAkvKiBETyBOT1QgaXRlcmF0ZSBvdmVyIF9fc2cgbWFudWFsbHksIHVzZSBhdGFfZm9yX2VhY2hfc2coKSAqLwogCXN0cnVjdCBzY2F0dGVybGlzdAkqX19zZzsKIAotCWF0YV9xY19jYl90CQljb21wbGV0ZV9mbjsKKwl1bnNpZ25lZCBpbnQJCWVycl9tYXNrOwogCi0Jc3RydWN0IGNvbXBsZXRpb24JKndhaXRpbmc7CisJYXRhX3FjX2NiX3QJCWNvbXBsZXRlX2ZuOwogCiAJdm9pZAkJCSpwcml2YXRlX2RhdGE7CiB9OwpAQCAtMzMxLDggKzMzMyw2IEBACiAKIAl1OAkJCWN0bDsJLyogY2FjaGUgb2YgQVRBIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAl1OAkJCWxhc3RfY3RsOwkvKiBDYWNoZSBsYXN0IHdyaXR0ZW4gdmFsdWUgKi8KLQl1bnNpZ25lZCBpbnQJCWJ1c19zdGF0ZTsKLQl1bnNpZ25lZCBpbnQJCXBvcnRfc3RhdGU7CiAJdW5zaWduZWQgaW50CQlwaW9fbWFzazsKIAl1bnNpZ25lZCBpbnQJCW13ZG1hX21hc2s7CiAJdW5zaWduZWQgaW50CQl1ZG1hX21hc2s7CkBAIC00NzgsNyArNDc4LDcgQEAKIGV4dGVybiB2b2lkIGF0YV9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHU4ICAgYXRhX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9ibWRtYV9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1leHRlcm4gdm9pZCBhdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdW5zaWduZWQgaW50IGVycl9tYXNrKTsKK2V4dGVybiB2b2lkIGF0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9lbmdfdGltZW91dChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zY3NpX3NpbXVsYXRlKHUxNiAqaWQsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKIAkJCSAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKQEAgLTY3MCw2ICs2NzAsNyBAQAogCXFjLT5jdXJzZWN0ID0gcWMtPmN1cnNnID0gcWMtPmN1cnNnX29mcyA9IDA7CiAJcWMtPm5zZWN0ID0gMDsKIAlxYy0+bmJ5dGVzID0gcWMtPmN1cmJ5dGVzID0gMDsKKwlxYy0+ZXJyX21hc2sgPSAwOwogCiAJYXRhX3RmX2luaXQocWMtPmFwLCAmcWMtPnRmLCBxYy0+ZGV2LT5kZXZubyk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCBkNmE0MWU2Li4yODE5NWEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogc3RydWN0IHNvY2tldCB7CiAJc29ja2V0X3N0YXRlCQlzdGF0ZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CisJY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0CSpmYXN5bmNfbGlzdDsKIAlzdHJ1Y3QgZmlsZQkJKmZpbGU7CiAJc3RydWN0IHNvY2sJCSpzazsKQEAgLTI2MCw3ICsyNjAsNyBAQAogU09DS0NBTExfV1JBUChuYW1lLCBtbWFwLCAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSwgXAogCSAgICAgIChmaWxlLCBzb2NrLCB2bWEpKSBcCiAJICAgICAgXAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgbmFtZSMjX29wcyA9IHsJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBuYW1lIyNfb3BzID0gewkJCVwKIAkuZmFtaWx5CQk9IGZhbSwJCQkJXAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwJCQlcCiAJLnJlbGVhc2UJPSBfX2xvY2tfIyNuYW1lIyNfcmVsZWFzZSwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTM2ZjhiNy4uN2ZkYTAzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC02ODQsNiArNjg0LDcgQEAKIGV4dGVybiBpbnQJCW5ldGlmX3J4X25pKHN0cnVjdCBza19idWZmICpza2IpOwogI2RlZmluZSBIQVZFX05FVElGX1JFQ0VJVkVfU0tCIDEKIGV4dGVybiBpbnQJCW5ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAkJZGV2X3ZhbGlkX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gaW50CQlkZXZfaW9jdGwodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKik7CiBleHRlcm4gaW50CQlkZXZfZXRodG9vbChzdHJ1Y3QgaWZyZXEgKik7CiBleHRlcm4gdW5zaWduZWQJCWRldl9nZXRfZmxhZ3MoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC04MDEsMTIgKzgwMiwxNiBAQAogCXJldHVybiAoMSA8PCBkZWJ1Z192YWx1ZSkgLSAxOwogfQogCi0vKiBTY2hlZHVsZSByeCBpbnRyIG5vdz8gKi8KKy8qIFRlc3QgaWYgcmVjZWl2ZSBuZWVkcyB0byBiZSBzY2hlZHVsZWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKTsKK30KIAorLyogVGVzdCBpZiByZWNlaXZlIG5lZWRzIHRvIGJlIHNjaGVkdWxlZCBidXQgb25seSBpZiB1cCAqLwogc3RhdGljIGlubGluZSBpbnQgbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBuZXRpZl9ydW5uaW5nKGRldikgJiYKLQkJIXRlc3RfYW5kX3NldF9iaXQoX19MSU5LX1NUQVRFX1JYX1NDSEVELCAmZGV2LT5zdGF0ZSk7CisJcmV0dXJuIG5ldGlmX3J1bm5pbmcoZGV2KSAmJiBfX25ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KTsKIH0KIAogLyogQWRkIGludGVyZmFjZSB0byB0YWlsIG9mIHJ4IHBvbGwgbGlzdC4gVGhpcyBhc3N1bWVzIHRoYXQgX3ByZXAgaGFzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDkwOTNmMTEuLjRmMDE3MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX0ZMT1BQWQkweDAxMDIKICNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfSVBJCQkweDAxMDMKICNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfUkFJRAkJMHgwMTA0CisjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX1NBUwkJMHgwMTA3CiAjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX09USEVSCQkweDAxODAKIAogI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19ORVRXT1JLCQkweDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IDcyNDA2NjcuLjYzNTFjNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0yMTYsNiArMjE2LDE2IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfbmF0X3RfcG9ydCkgPT0gOCAqLwogCisvKiBHZW5lcmljIExTTSBzZWN1cml0eSBjb250ZXh0ICovCitzdHJ1Y3Qgc2FkYl94X3NlY19jdHggeworCXVpbnQxNl90CXNhZGJfeF9zZWNfbGVuOworCXVpbnQxNl90CXNhZGJfeF9zZWNfZXh0dHlwZTsKKwl1aW50OF90CQlzYWRiX3hfY3R4X2FsZzsgIC8qIExTTXM6IGUuZy4sIHNlbGludXggPT0gMSAqLworCXVpbnQ4X3QJCXNhZGJfeF9jdHhfZG9pOworCXVpbnQxNl90CXNhZGJfeF9jdHhfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zZWNfY3R4KSA9IDggKi8KKwogLyogTWVzc2FnZSB0eXBlcyAqLwogI2RlZmluZSBTQURCX1JFU0VSVkVECQkwCiAjZGVmaW5lIFNBREJfR0VUU1BJCQkxCkBAIC0zMjUsNyArMzM1LDggQEAKICNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9TUE9SVAkJMjEKICNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9EUE9SVAkJMjIKICNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9PQQkJMjMKLSNkZWZpbmUgU0FEQl9FWFRfTUFYCQkJMjMKKyNkZWZpbmUgU0FEQl9YX0VYVF9TRUNfQ1RYCQkyNAorI2RlZmluZSBTQURCX0VYVF9NQVgJCQkyNAogCiAvKiBJZGVudGl0eSBFeHRlbnNpb24gdmFsdWVzICovCiAjZGVmaW5lIFNBREJfSURFTlRUWVBFX1JFU0VSVkVECTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCmluZGV4IGU4N2IyMzMuLmQxMGYzNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaApAQCAtNDI5LDYgKzQyOSw3IEBACiAJVENBX05FVEVNX0NPUlIsCiAJVENBX05FVEVNX0RFTEFZX0RJU1QsCiAJVENBX05FVEVNX1JFT1JERVIsCisJVENBX05FVEVNX0NPUlJVUFQsCiAJX19UQ0FfTkVURU1fTUFYLAogfTsKIApAQCAtNDU3LDYgKzQ1OCwxMiBAQAogCV9fdTMyCWNvcnJlbGF0aW9uOwogfTsKIAorc3RydWN0IHRjX25ldGVtX2NvcnJ1cHQKK3sKKwlfX3UzMglwcm9iYWJpbGl0eTsKKwlfX3UzMgljb3JyZWxhdGlvbjsKK307CisKICNkZWZpbmUgTkVURU1fRElTVF9TQ0FMRQk4MTkyCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYW5kb20uaCBiL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKaW5kZXggN2IyYWRiMy4uNWQ2NDU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYW5kb20uaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oCkBAIC01Miw5ICs1Miw5IEBACiB2b2lkIGdlbmVyYXRlX3JhbmRvbV91dWlkKHVuc2lnbmVkIGNoYXIgdXVpZF9vdXRbMTZdKTsKIAogZXh0ZXJuIF9fdTMyIHNlY3VyZV9pcF9pZChfX3UzMiBkYWRkcik7Ci1leHRlcm4gdTMyIHNlY3VyZV90Y3BfcG9ydF9lcGhlbWVyYWwoX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBfX3UxNiBkcG9ydCk7Ci1leHRlcm4gdTMyIHNlY3VyZV90Y3B2Nl9wb3J0X2VwaGVtZXJhbChjb25zdCBfX3UzMiAqc2FkZHIsIGNvbnN0IF9fdTMyICpkYWRkciwgCi0JCQkJICAgICAgIF9fdTE2IGRwb3J0KTsKK2V4dGVybiB1MzIgc2VjdXJlX2lwdjRfcG9ydF9lcGhlbWVyYWwoX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBfX3UxNiBkcG9ydCk7CitleHRlcm4gdTMyIHNlY3VyZV9pcHY2X3BvcnRfZXBoZW1lcmFsKGNvbnN0IF9fdTMyICpzYWRkciwgY29uc3QgX191MzIgKmRhZGRyLCAKKwkJCQkgICAgICBfX3UxNiBkcG9ydCk7CiBleHRlcm4gX191MzIgc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIoX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLAogCQkJCQlfX3UxNiBzcG9ydCwgX191MTYgZHBvcnQpOwogZXh0ZXJuIF9fdTMyIHNlY3VyZV90Y3B2Nl9zZXF1ZW5jZV9udW1iZXIoX191MzIgKnNhZGRyLCBfX3UzMiAqZGFkZHIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggZjdlMGFlMC4uZWY3NTM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNTksNiArNTksMTIgQEAKIHN0cnVjdCBzb2NrOwogc3RydWN0IHNvY2thZGRyOwogc3RydWN0IHNvY2tldDsKK3N0cnVjdCBmbG93aTsKK3N0cnVjdCBkc3RfZW50cnk7CitzdHJ1Y3QgeGZybV9zZWxlY3RvcjsKK3N0cnVjdCB4ZnJtX3BvbGljeTsKK3N0cnVjdCB4ZnJtX3N0YXRlOworc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4OwogCiBleHRlcm4gaW50IGNhcF9uZXRsaW5rX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgY2FwX25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTc4OCw2ICs3OTQsNTIgQEAKICAqICAgICAgd2hpY2ggaXMgdXNlZCB0byBjb3B5IHNlY3VyaXR5IGF0dHJpYnV0ZXMgYmV0d2VlbiBsb2NhbCBzdHJlYW0gc29ja2V0cy4KICAqIEBza19mcmVlX3NlY3VyaXR5OgogICoJRGVhbGxvY2F0ZSBzZWN1cml0eSBzdHJ1Y3R1cmUuCisgKiBAc2tfZ2V0c2lkOgorICoJUmV0cmlldmUgdGhlIExTTS1zcGVjaWZpYyBzaWQgZm9yIHRoZSBzb2NrIHRvIGVuYWJsZSBjYWNoaW5nIG9mIG5ldHdvcmsKKyAqCWF1dGhvcml6YXRpb25zLgorICoKKyAqIFNlY3VyaXR5IGhvb2tzIGZvciBYRlJNIG9wZXJhdGlvbnMuCisgKgorICogQHhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5OgorICoJQHhwIGNvbnRhaW5zIHRoZSB4ZnJtX3BvbGljeSBiZWluZyBhZGRlZCB0byBTZWN1cml0eSBQb2xpY3kgRGF0YWJhc2UKKyAqCXVzZWQgYnkgdGhlIFhGUk0gc3lzdGVtLgorICoJQHNlY19jdHggY29udGFpbnMgdGhlIHNlY3VyaXR5IGNvbnRleHQgaW5mb3JtYXRpb24gYmVpbmcgcHJvdmlkZWQgYnkKKyAqCXRoZSB1c2VyLWxldmVsIHBvbGljeSB1cGRhdGUgcHJvZ3JhbSAoZS5nLiwgc2V0a2V5KS4KKyAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSB4cC0+c2VsZWN0b3Iuc2VjdXJpdHkgZmllbGQuCisgKglUaGUgc2VjdXJpdHkgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCB3aGVuIHRoZSB4ZnJtX3BvbGljeSBpcworICoJYWxsb2NhdGVkLgorICoJUmV0dXJuIDAgaWYgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIChtZW1vcnkgdG8gYWxsb2NhdGUsIGxlZ2FsIGNvbnRleHQpCisgKiBAeGZybV9wb2xpY3lfY2xvbmVfc2VjdXJpdHk6CisgKglAb2xkIGNvbnRhaW5zIGFuIGV4aXN0aW5nIHhmcm1fcG9saWN5IGluIHRoZSBTUEQuCisgKglAbmV3IGNvbnRhaW5zIGEgbmV3IHhmcm1fcG9saWN5IGJlaW5nIGNsb25lZCBmcm9tIG9sZC4KKyAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSBuZXctPnNlbGVjdG9yLnNlY3VyaXR5IGZpZWxkCisgKgl0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvbGQtPnNlbGVjdG9yLnNlY3VyaXR5IGZpZWxkLgorICoJUmV0dXJuIDAgaWYgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIChtZW1vcnkgdG8gYWxsb2NhdGUpLgorICogQHhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHk6CisgKglAeHAgY29udGFpbnMgdGhlIHhmcm1fcG9saWN5CisgKglEZWFsbG9jYXRlIHhwLT5zZWxlY3Rvci5zZWN1cml0eS4KKyAqIEB4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5OgorICoJQHggY29udGFpbnMgdGhlIHhmcm1fc3RhdGUgYmVpbmcgYWRkZWQgdG8gdGhlIFNlY3VyaXR5IEFzc29jaWF0aW9uCisgKglEYXRhYmFzZSBieSB0aGUgWEZSTSBzeXN0ZW0uCisgKglAc2VjX2N0eCBjb250YWlucyB0aGUgc2VjdXJpdHkgY29udGV4dCBpbmZvcm1hdGlvbiBiZWluZyBwcm92aWRlZCBieQorICoJdGhlIHVzZXItbGV2ZWwgU0EgZ2VuZXJhdGlvbiBwcm9ncmFtIChlLmcuLCBzZXRrZXkgb3IgcmFjb29uKS4KKyAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSB4LT5zZWwuc2VjdXJpdHkgZmllbGQuICBUaGUKKyAqCXNlY3VyaXR5IGZpZWxkIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgd2hlbiB0aGUgeGZybV9zdGF0ZSBpcworICoJYWxsb2NhdGVkLgorICoJUmV0dXJuIDAgaWYgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIChtZW1vcnkgdG8gYWxsb2NhdGUsIGxlZ2FsIGNvbnRleHQpLgorICogQHhmcm1fc3RhdGVfZnJlZV9zZWN1cml0eToKKyAqCUB4IGNvbnRhaW5zIHRoZSB4ZnJtX3N0YXRlLgorICoJRGVhbGxvY2F0ZSB4PnNlbC5zZWN1cml0eS4KKyAqIEB4ZnJtX3BvbGljeV9sb29rdXA6CisgKglAeHAgY29udGFpbnMgdGhlIHhmcm1fcG9saWN5IGZvciB3aGljaCB0aGUgYWNjZXNzIGNvbnRyb2wgaXMgYmVpbmcKKyAqCWNoZWNrZWQuCisgKglAc2tfc2lkIGNvbnRhaW5zIHRoZSBzb2NrIHNlY3VyaXR5IGxhYmVsIHRoYXQgaXMgdXNlZCB0byBhdXRob3JpemUKKyAqCWFjY2VzcyB0byB0aGUgcG9saWN5IHhwLgorICoJQGRpciBjb250YWlucyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbG93IChpbnB1dCBvciBvdXRwdXQpLgorICoJQ2hlY2sgcGVybWlzc2lvbiB3aGVuIGEgc29jayBzZWxlY3RzIGEgeGZybV9wb2xpY3kgZm9yIHByb2Nlc3NpbmcKKyAqCVhGUk1zIG9uIGEgcGFja2V0LiAgVGhlIGhvb2sgaXMgY2FsbGVkIHdoZW4gc2VsZWN0aW5nIGVpdGhlciBhCisgKglwZXItc29ja2V0IHBvbGljeSBvciBhIGdlbmVyaWMgeGZybSBwb2xpY3kuCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKgogICogU2VjdXJpdHkgaG9va3MgYWZmZWN0aW5nIGFsbCBLZXkgTWFuYWdlbWVudCBvcGVyYXRpb25zCiAgKgpAQCAtMTIzNyw4ICsxMjg5LDE4IEBACiAJaW50ICgqc29ja2V0X2dldHBlZXJzZWMpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGxlbik7CiAJaW50ICgqc2tfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5KTsKIAl2b2lkICgqc2tfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCBzb2NrICpzayk7CisJdW5zaWduZWQgaW50ICgqc2tfZ2V0c2lkKSAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2kgKmZsLCB1OCBkaXIpOwogI2VuZGlmCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLICovCiAKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNCisJaW50ICgqeGZybV9wb2xpY3lfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpOworCWludCAoKnhmcm1fcG9saWN5X2Nsb25lX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fcG9saWN5ICpvbGQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqbmV3KTsKKwl2b2lkICgqeGZybV9wb2xpY3lfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApOworCWludCAoKnhmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKKwl2b2lkICgqeGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fc3RhdGUgKngpOworCWludCAoKnhmcm1fcG9saWN5X2xvb2t1cCkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIHNrX3NpZCwgdTggZGlyKTsKKyNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNICovCisKIAkvKiBrZXkgbWFuYWdlbWVudCBzZWN1cml0eSBob29rcyAqLwogI2lmZGVmIENPTkZJR19LRVlTCiAJaW50ICgqa2V5X2FsbG9jKShzdHJ1Y3Qga2V5ICprZXkpOwpAQCAtMjY3OSw2ICsyNzQxLDExIEBACiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2tfZnJlZV9zZWN1cml0eShzayk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlY3VyaXR5X3NrX3NpZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aSAqZmwsIHU4IGRpcikKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5za19nZXRzaWQoc2ssIGZsLCBkaXIpOworfQogI2Vsc2UJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3VuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqIHNvY2ssCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2V0ICogb3RoZXIsIApAQCAtMjc5NSw4ICsyODYyLDczIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlY3VyaXR5X3NrX3NpZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aSAqZmwsIHU4IGRpcikKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2Moc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KHhwLCBzZWNfY3R4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfY2xvbmUoc3RydWN0IHhmcm1fcG9saWN5ICpvbGQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqbmV3KQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2Nsb25lX3NlY3VyaXR5KG9sZCwgbmV3KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKK3sKKwlzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkoeHApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9zdGF0ZV9hbGxvY19zZWN1cml0eSh4LCBzZWNfY3R4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3hmcm1fc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKK3sKKwlzZWN1cml0eV9vcHMtPnhmcm1fc3RhdGVfZnJlZV9zZWN1cml0eSh4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHUzMiBza19zaWQsIHU4IGRpcikKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT54ZnJtX3BvbGljeV9sb29rdXAoeHAsIHNrX3NpZCwgZGlyKTsKK30KKyNlbHNlCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfY2xvbmUoc3RydWN0IHhmcm1fcG9saWN5ICpvbGQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqbmV3KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV94ZnJtX3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB1MzIgc2tfc2lkLCB1OCBkaXIpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSAqLworCiAjaWZkZWYgQ09ORklHX0tFWVMKICNpZmRlZiBDT05GSUdfU0VDVVJJVFkKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2tleV9hbGxvYyhzdHJ1Y3Qga2V5ICprZXkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA4YzVkNjAwLi40ODNjZmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2RlZmluZSBIQVZFX0FMTE9DX1NLQgkJLyogRm9yIHRoZSBkcml2ZXJzIHRvIGtub3cgKi8KICNkZWZpbmUgSEFWRV9BTElHTkFCTEVfU0tCCS8qIERpdHRvIDgpCQkgICAqLwotI2RlZmluZSBTTEFCX1NLQiAJCS8qIFNsYWJpZmllZCBza2J1ZmZzIAkgICAqLwogCiAjZGVmaW5lIENIRUNLU1VNX05PTkUgMAogI2RlZmluZSBDSEVDS1NVTV9IVyAxCkBAIC0xMzQsNyArMTMzLDcgQEAKICAqLwogc3RydWN0IHNrYl9zaGFyZWRfaW5mbyB7CiAJYXRvbWljX3QJZGF0YXJlZjsKLQl1bnNpZ25lZCBpbnQJbnJfZnJhZ3M7CisJdW5zaWduZWQgc2hvcnQJbnJfZnJhZ3M7CiAJdW5zaWduZWQgc2hvcnQJdHNvX3NpemU7CiAJdW5zaWduZWQgc2hvcnQJdHNvX3NlZ3M7CiAJdW5zaWduZWQgc2hvcnQgIHVmb19zaXplOwpAQCAtMTIzOSw2ICsxMjM4LDggQEAKIAkJCQkJCQlpbnQgaGxlbiwKIAkJCQkJCQlzdHJ1Y3QgaW92ZWMgKmlvdik7CiBleHRlcm4gdm9pZAkgICAgICAgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkCSAgICAgICBza2Jfa2lsbF9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHVuc2lnbmVkIGludCAgICBza2JfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAkJCQkgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IGNzdW0pOwogZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMTczOWMyZC4uOWY0MDE5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JCS8qIF9fdXNlcgkJCSovCiAKIGV4dGVybiBpbnQgc3lzY3RsX3NvbWF4Y29ubjsKLWV4dGVybiB2b2lkIHNvY2tfaW5pdCh2b2lkKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RydWN0IHNlcV9maWxlOwogZXh0ZXJuIHZvaWQgc29ja2V0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAppbmRleCAwZTk2ODJjLi43OTliZTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCkBAIC01OSw4ICs1OSw3IEBACiAvKgogICogTXVzdCBkZWZpbmUgdGhlc2UgYmVmb3JlIGluY2x1ZGluZyBvdGhlciBmaWxlcywgaW5saW5lIGZ1bmN0aW9ucyBuZWVkIHRoZW0KICAqLwotI2RlZmluZSBMT0NLX1NFQ1RJT05fTkFNRSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiLnRleHQubG9jay4iIF9fc3RyaW5naWZ5KEtCVUlMRF9CQVNFTkFNRSkKKyNkZWZpbmUgTE9DS19TRUNUSU9OX05BTUUgIi50ZXh0LmxvY2suIktCVUlMRF9CQVNFTkFNRQogCiAjZGVmaW5lIExPQ0tfU0VDVElPTl9TVEFSVChleHRyYSkgICAgICAgICAgICAgICBcCiAgICAgICAgICIuc3Vic2VjdGlvbiAxXG5cdCIgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCA0YmUzNGVmLi45M2ZhNzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTM5MCw2ICszOTAsNyBAQAogCU5FVF9JUFY0X0lDTVBfRVJST1JTX1VTRV9JTkJPVU5EX0lGQUREUj0xMDksCiAJTkVUX1RDUF9DT05HX0NPTlRST0w9MTEwLAogCU5FVF9UQ1BfQUJDPTExMSwKKwlORVRfSVBWNF9JUEZSQUdfTUFYX0RJU1Q9MTEyLAogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCAwZTFkYTY2Li5mMmJiMjM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTU1LDIyICs1NSw2IEBACiAJX191MTYJdXJnX3B0cjsKIH07CiAKLSNkZWZpbmUgVENQX0FDVElPTl9GSU4JKDEgPDwgNykKLQotZW51bSB7Ci0gIFRDUEZfRVNUQUJMSVNIRUQgPSAoMSA8PCAxKSwKLSAgVENQRl9TWU5fU0VOVCAgPSAoMSA8PCAyKSwKLSAgVENQRl9TWU5fUkVDViAgPSAoMSA8PCAzKSwKLSAgVENQRl9GSU5fV0FJVDEgPSAoMSA8PCA0KSwKLSAgVENQRl9GSU5fV0FJVDIgPSAoMSA8PCA1KSwKLSAgVENQRl9USU1FX1dBSVQgPSAoMSA8PCA2KSwKLSAgVENQRl9DTE9TRSAgICAgPSAoMSA8PCA3KSwKLSAgVENQRl9DTE9TRV9XQUlUID0gKDEgPDwgOCksCi0gIFRDUEZfTEFTVF9BQ0sgID0gKDEgPDwgOSksCi0gIFRDUEZfTElTVEVOICAgID0gKDEgPDwgMTApLAotICBUQ1BGX0NMT1NJTkcgICA9ICgxIDw8IDExKSAKLX07Ci0KIC8qCiAgKglUaGUgdW5pb24gY2FzdCB1c2VzIGEgZ2NjIGV4dGVuc2lvbiB0byBhdm9pZCBhbGlhc2luZyBwcm9ibGVtcwogICogICh1bmlvbiBpcyBjb21wYXRpYmxlIHRvIGFueSBvZiBpdHMgbWVtYmVycykKQEAgLTI1NCwxMCArMjM4LDkgQEAKIAlfX3UzMglzbmRfd2wxOwkvKiBTZXF1ZW5jZSBmb3Igd2luZG93IHVwZGF0ZQkJKi8KIAlfX3UzMglzbmRfd25kOwkvKiBUaGUgd2luZG93IHdlIGV4cGVjdCB0byByZWNlaXZlCSovCiAJX191MzIJbWF4X3dpbmRvdzsJLyogTWF4aW1hbCB3aW5kb3cgZXZlciBzZWVuIGZyb20gcGVlcgkqLwotCV9fdTMyCXBtdHVfY29va2llOwkvKiBMYXN0IHBtdHUgc2VlbiBieSBzb2NrZXQJCSovCiAJX191MzIJbXNzX2NhY2hlOwkvKiBDYWNoZWQgZWZmZWN0aXZlIG1zcywgbm90IGluY2x1ZGluZyBTQUNLUyAqLwogCV9fdTE2CXhtaXRfc2l6ZV9nb2FsOwkvKiBHb2FsIGZvciBzZWdtZW50aW5nIG91dHB1dCBwYWNrZXRzCSovCi0JX191MTYJZXh0X2hlYWRlcl9sZW47CS8qIE5ldHdvcmsgcHJvdG9jb2wgb3ZlcmhlYWQgKElQL0lQdjYgb3B0aW9ucykgKi8KKwkvKiBYWFggVHdvIGJ5dGVzIGhvbGUsIHRyeSB0byBwYWNrICovCiAKIAlfX3UzMgl3aW5kb3dfY2xhbXA7CS8qIE1heGltYWwgd2luZG93IHRvIGFkdmVydGlzZQkJKi8KIAlfX3UzMglyY3Zfc3N0aHJlc2g7CS8qIEN1cnJlbnQgd2luZG93IGNsYW1wCQkJKi8KQEAgLTI5NSw4ICsyNzgsNiBAQAogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlvdXRfb2Zfb3JkZXJfcXVldWU7IC8qIE91dCBvZiBvcmRlciBzZWdtZW50cyBnbyBoZXJlICovCiAKLQlzdHJ1Y3QgdGNwX2Z1bmMJCSphZl9zcGVjaWZpYzsJLyogT3BlcmF0aW9ucyB3aGljaCBhcmUgQUZfSU5FVHs0LDZ9IHNwZWNpZmljCSovCi0KICAJX191MzIJcmN2X3duZDsJLyogQ3VycmVudCByZWNlaXZlciB3aW5kb3cJCSovCiAJX191MzIJcmN2X3d1cDsJLyogcmN2X254dCBvbiBsYXN0IHdpbmRvdyB1cGRhdGUgc2VudAkqLwogCV9fdTMyCXdyaXRlX3NlcTsJLyogVGFpbCgrMSkgb2YgZGF0YSBoZWxkIGluIHRjcCBzZW5kIGJ1ZmZlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZGZfZnMuaCBiL2luY2x1ZGUvbGludXgvdWRmX2ZzLmgKaW5kZXggNDZlMmJiOS4uMzZjNjg0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91ZGZfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VkZl9mcy5oCkBAIC0xMywxMSArMTMsNiBAQAogICogICAgaHR0cDovL3d3dy5vc3RhLm9yZy8gKiAgICBodHRwOi8vd3d3LmVjbWEuY2gvCiAgKiAgICBodHRwOi8vd3d3Lmlzby5vcmcvCiAgKgotICogQ09OVEFDVFMKLSAqCUUtbWFpbCByZWdhcmRpbmcgYW55IHBvcnRpb24gb2YgdGhlIExpbnV4IFVERiBmaWxlIHN5c3RlbSBzaG91bGQgYmUKLSAqCWRpcmVjdGVkIHRvIHRoZSBkZXZlbG9wbWVudCB0ZWFtIG1haWxpbmcgbGlzdCAocnVuIGJ5IG1ham9yZG9tbyk6Ci0gKgkJbGludXhfdWRmQGhwZXNqcm8uZmMuaHAuY29tCi0gKgogICogQ09QWVJJR0hUCiAgKglUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqCUxpY2Vuc2UgKEdQTCkuIENvcGllcyBvZiB0aGUgR1BMIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oIGIvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oCmluZGV4IDYyYjE1YTQuLjFlNzUwODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWRmX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmgKQEAgLTMsMTEgKzMsNiBAQAogICoKICAqIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3IgdGhlIExpbnV4IGtlcm5lbC9tb2R1bGUuIAogICoKLSAqIENPTlRBQ1RTCi0gKglFLW1haWwgcmVnYXJkaW5nIGFueSBwb3J0aW9uIG9mIHRoZSBMaW51eCBVREYgZmlsZSBzeXN0ZW0gc2hvdWxkIGJlCi0gKglkaXJlY3RlZCB0byB0aGUgZGV2ZWxvcG1lbnQgdGVhbSBtYWlsaW5nIGxpc3QgKHJ1biBieSBtYWpvcmRvbW8pOgotICoJCWxpbnV4X3VkZkBocGVzanJvLmZjLmhwLmNvbQotICoKICAqIENPUFlSSUdIVAogICoJVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKglMaWNlbnNlIChHUEwpLiBDb3BpZXMgb2YgdGhlIEdQTCBjYW4gYmUgb2J0YWluZWQgZnJvbToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L3VkZl9mc19zYi5oCmluZGV4IDE5NjZhNmQuLmIxNWZmMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaApAQCAtMywxMSArMyw2IEBACiAgKiAKICAqIFRoaXMgaW5jbHVkZSBmaWxlIGlzIGZvciB0aGUgTGludXgga2VybmVsL21vZHVsZS4KICAqCi0gKiBDT05UQUNUUwotICoJRS1tYWlsIHJlZ2FyZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGludXggVURGIGZpbGUgc3lzdGVtIHNob3VsZCBiZQotICoJZGlyZWN0ZWQgdG8gdGhlIGRldmVsb3BtZW50IHRlYW0gbWFpbGluZyBsaXN0IChydW4gYnkgbWFqb3Jkb21vKToKLSAqCQlsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20KLSAqCiAgKiBDT1BZUklHSFQKICAqCVRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICoJTGljZW5zZSAoR1BMKS4gQ29waWVzIG9mIHRoZSBHUEwgY2FuIGJlIG9idGFpbmVkIGZyb206CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaAppbmRleCBiNjBlMGI0Li44NWE1NTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdWRwLmgKQEAgLTM1LDEwICszNSwxMCBAQAogI2RlZmluZSBVRFBfRU5DQVBfRVNQSU5VRFAJMiAvKiBkcmFmdC1pZXRmLWlwc2VjLXVkcC1lbmNhcHMtMDYgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KLQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgogCiBzdHJ1Y3QgdWRwX3NvY2sgewogCS8qIGluZXRfc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZDgxYjA1MC4uZTU5ZDFiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0zMjksOCArMzI5LDYgQEAKIAlzdHJ1Y3QgdXNiX3R0CSp0dDsgCQkvKiBsb3cvZnVsbCBzcGVlZCBkZXYsIGhpZ2hzcGVlZCBodWIgKi8KIAlpbnQJCXR0cG9ydDsJCS8qIGRldmljZSBwb3J0IG9uIHRoYXQgdHQgaHViICovCiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlcmlhbGl6ZTsKLQogCXVuc2lnbmVkIGludCB0b2dnbGVbMl07CQkvKiBvbmUgYml0IGZvciBlYWNoIGVuZHBvaW50CiAJCQkJCSAqIChbMF0gPSBJTiwgWzFdID0gT1VUKSAqLwogCkBAIC0zNDksNiArMzQ3LDkgQEAKIAogCWNoYXIgKipyYXdkZXNjcmlwdG9yczsJCS8qIFJhdyBkZXNjcmlwdG9ycyBmb3IgZWFjaCBjb25maWcgKi8KIAorCXVuc2lnbmVkIHNob3J0IGJ1c19tQTsJCS8qIEN1cnJlbnQgYXZhaWxhYmxlIGZyb20gdGhlIGJ1cyAqLworCXU4IHBvcnRudW07CQkJLyogUGFyZW50IHBvcnQgbnVtYmVyIChvcmlnaW4gMSkgKi8KKwogCWludCBoYXZlX2xhbmdpZDsJCS8qIHdoZXRoZXIgc3RyaW5nX2xhbmdpZCBpcyB2YWxpZCAqLwogCWludCBzdHJpbmdfbGFuZ2lkOwkJLyogbGFuZ3VhZ2UgSUQgZm9yIHN0cmluZ3MgKi8KIApAQCAtMzc3LDExICszNzgsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2dldF9kZXYoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCB1c2JfcHV0X2RldihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKIAotZXh0ZXJuIHZvaWQgdXNiX2xvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKLWV4dGVybiBpbnQgdXNiX3RyeWxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKKy8qIFVTQiBkZXZpY2UgbG9ja2luZyAqLworI2RlZmluZSB1c2JfbG9ja19kZXZpY2UodWRldikJCWRvd24oJih1ZGV2KS0+ZGV2LnNlbSkKKyNkZWZpbmUgdXNiX3VubG9ja19kZXZpY2UodWRldikJCXVwKCYodWRldiktPmRldi5zZW0pCisjZGVmaW5lIHVzYl90cnlsb2NrX2RldmljZSh1ZGV2KQlkb3duX3RyeWxvY2soJih1ZGV2KS0+ZGV2LnNlbSkKIGV4dGVybiBpbnQgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKLWV4dGVybiB2b2lkIHVzYl91bmxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIAogLyogVVNCIHBvcnQgcmVzZXQgZm9yIGRldmljZSByZWluaXRpYWxpemF0aW9uICovCiBleHRlcm4gaW50IHVzYl9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CkBAIC01MjksMTAgKzUzMSwxMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdHJ1Y3QgdXNiX2R5bmlkcyB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKIC8qKgogICogc3RydWN0IHVzYl9kcml2ZXIgLSBpZGVudGlmaWVzIFVTQiBkcml2ZXIgdG8gdXNiY29yZQotICogQG93bmVyOiBQb2ludGVyIHRvIHRoZSBtb2R1bGUgb3duZXIgb2YgdGhpcyBkcml2ZXI7IGluaXRpYWxpemUKLSAqCWl0IHVzaW5nIFRISVNfTU9EVUxFLgogICogQG5hbWU6IFRoZSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgdW5pcXVlIGFtb25nIFVTQiBkcml2ZXJzLAogICoJYW5kIHNob3VsZCBub3JtYWxseSBiZSB0aGUgc2FtZSBhcyB0aGUgbW9kdWxlIG5hbWUuCiAgKiBAcHJvYmU6IENhbGxlZCB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyB3aWxsaW5nIHRvIG1hbmFnZSBhIHBhcnRpY3VsYXIKQEAgLTU1Myw3ICs1NTgsMTEgQEAKICAqIEBpZF90YWJsZTogVVNCIGRyaXZlcnMgdXNlIElEIHRhYmxlIHRvIHN1cHBvcnQgaG90cGx1Z2dpbmcuCiAgKglFeHBvcnQgdGhpcyB3aXRoIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLC4uLikuICBUaGlzIG11c3QgYmUgc2V0CiAgKglvciB5b3VyIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZC4KKyAqIEBkeW5pZHM6IHVzZWQgaW50ZXJuYWxseSB0byBob2xkIHRoZSBsaXN0IG9mIGR5bmFtaWNhbGx5IGFkZGVkIGRldmljZQorICoJaWRzIGZvciB0aGlzIGRyaXZlci4KICAqIEBkcml2ZXI6IHRoZSBkcml2ZXIgbW9kZWwgY29yZSBkcml2ZXIgc3RydWN0dXJlLgorICogQG5vX2R5bmFtaWNfaWQ6IGlmIHNldCB0byAxLCB0aGUgVVNCIGNvcmUgd2lsbCBub3QgYWxsb3cgZHluYW1pYyBpZHMgdG8gYmUKKyAqCWFkZGVkIHRvIHRoaXMgZHJpdmVyIGJ5IHByZXZlbnRpbmcgdGhlIHN5c2ZzIGZpbGUgZnJvbSBiZWluZyBjcmVhdGVkLgogICoKICAqIFVTQiBkcml2ZXJzIG11c3QgcHJvdmlkZSBhIG5hbWUsIHByb2JlKCkgYW5kIGRpc2Nvbm5lY3QoKSBtZXRob2RzLAogICogYW5kIGFuIGlkX3RhYmxlLiAgT3RoZXIgZHJpdmVyIGZpZWxkcyBhcmUgb3B0aW9uYWwuCkBAIC01NzEsOCArNTgwLDYgQEAKICAqIHRoZW0gYXMgbmVjZXNzYXJ5LCBhbmQgYmxvY2tpbmcgdW50aWwgdGhlIHVubGlua3MgY29tcGxldGUpLgogICovCiBzdHJ1Y3QgdXNiX2RyaXZlciB7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0KIAljb25zdCBjaGFyICpuYW1lOwogCiAJaW50ICgqcHJvYmUpIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKQEAgLTU4OCw3ICs1OTUsOSBAQAogCiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlOwogCisJc3RydWN0IHVzYl9keW5pZHMgZHluaWRzOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwl1bnNpZ25lZCBpbnQgbm9fZHluYW1pY19pZDoxOwogfTsKICNkZWZpbmUJdG9fdXNiX2RyaXZlcihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9kcml2ZXIsIGRyaXZlcikKIApAQCAtNjE0LDcgKzYyMywxMSBAQAogICogdXNlIHRoZXNlIGluIG1vZHVsZV9pbml0KCkvbW9kdWxlX2V4aXQoKQogICogYW5kIGRvbid0IGZvcmdldCBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgLi4uKQogICovCi1leHRlcm4gaW50IHVzYl9yZWdpc3RlcihzdHJ1Y3QgdXNiX2RyaXZlciAqKTsKK2ludCB1c2JfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZHJpdmVyICosIHN0cnVjdCBtb2R1bGUgKik7CitzdGF0aWMgaW5saW5lIGludCB1c2JfcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcikKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIsIFRISVNfTU9EVUxFKTsKK30KIGV4dGVybiB2b2lkIHVzYl9kZXJlZ2lzdGVyKHN0cnVjdCB1c2JfZHJpdmVyICopOwogCiBleHRlcm4gaW50IHVzYl9yZWdpc3Rlcl9kZXYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmQwODk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIEludGVyZmFjZSB0byB0aGUgbGlidXN1YWwuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFBldGUgWmFpdGNldiA8emFpdGNldkByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9VU1VBTF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1VTVUFMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBXZSBzaG91bGQgZG8gdGhpcyBmb3IgY2xlYW5saW5lc3MuLi4gQnV0IG90aGVyIHVzYl9mb28uaCBkbyBub3QgZG8gdGhpcy4gKi8KKy8qICNpbmNsdWRlIDxsaW51eC91c2IuaD4gKi8KKworLyoKKyAqIFRoZSBmbGFncyBmaWVsZCwgd2hpY2ggd2Ugc3RvcmUgaW4gdXNiX2RldmljZV9pZC5kcml2ZXJfaW5mby4KKyAqIEl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHVzYi1zdG9yYWdlIGZsYWdzIGluIGxvd2VyIDI0IGJpdHMuCisgKi8KKworLyoKKyAqIFN0YXRpYyBmbGFnIGRlZmluaXRpb25zLiAgV2UgdXNlIHRoaXMgcm91bmRhYm91dCB0ZWNobmlxdWUgc28gdGhhdCB0aGUKKyAqIHByb2NfaW5mbygpIHJvdXRpbmUgY2FuIGF1dG9tYXRpY2FsbHkgZGlzcGxheSBhIG1lc3NhZ2UgZm9yIGVhY2ggZmxhZy4KKyAqLworI2RlZmluZSBVU19ET19BTExfRkxBR1MJCQkJCQlcCisJVVNfRkxBRyhTSU5HTEVfTFVOLAkweDAwMDAwMDAxKQkJCVwKKwkJLyogYWxsb3cgYWNjZXNzIHRvIG9ubHkgTFVOIDAgKi8JCVwKKwlVU19GTEFHKE5FRURfT1ZFUlJJREUsCTB4MDAwMDAwMDIpCQkJXAorCQkvKiB1bnVzdWFsX2RldnMgZW50cnkgaXMgbmVjZXNzYXJ5ICovCQlcCisJVVNfRkxBRyhTQ01fTVVMVF9UQVJHLAkweDAwMDAwMDA0KQkJCVwKKwkJLyogc3VwcG9ydHMgbXVsdGlwbGUgdGFyZ2V0cyAqLwkJCVwKKwlVU19GTEFHKEZJWF9JTlFVSVJZLAkweDAwMDAwMDA4KQkJCVwKKwkJLyogSU5RVUlSWSByZXNwb25zZSBuZWVkcyBmYWtpbmcgKi8JCVwKKwlVU19GTEFHKEZJWF9DQVBBQ0lUWSwJMHgwMDAwMDAxMCkJCQlcCisJCS8qIFJFQUQgQ0FQQUNJVFkgcmVzcG9uc2UgdG9vIGJpZyAqLwkJXAorCVVTX0ZMQUcoSUdOT1JFX1JFU0lEVUUsCTB4MDAwMDAwMjApCQkJXAorCQkvKiByZXBvcnRlZCByZXNpZHVlIGlzIHdyb25nICovCQkJXAorCVVTX0ZMQUcoQlVMSzMyLAkJMHgwMDAwMDA0MCkJCQlcCisJCS8qIFVzZXMgMzItYnl0ZSBDQlcgbGVuZ3RoICovCQkJXAorCVVTX0ZMQUcoTk9UX0xPQ0tBQkxFLAkweDAwMDAwMDgwKQkJCVwKKwkJLyogUFJFVkVOVC9BTExPVyBub3Qgc3VwcG9ydGVkICovCQlcCisJVVNfRkxBRyhHT19TTE9XLAkweDAwMDAwMTAwKQkJCVwKKwkJLyogTmVlZCBkZWxheSBhZnRlciBDb21tYW5kIHBoYXNlICovCQlcCisJVVNfRkxBRyhOT19XUF9ERVRFQ1QsCTB4MDAwMDAyMDApCQkJXAorCQkvKiBEb24ndCBjaGVjayBmb3Igd3JpdGUtcHJvdGVjdCAqLwkJXAorCisjZGVmaW5lIFVTX0ZMQUcobmFtZSwgdmFsdWUpCVVTX0ZMXyMjbmFtZSA9IHZhbHVlICwKK2VudW0geyBVU19ET19BTExfRkxBR1MgfTsKKyN1bmRlZiBVU19GTEFHCisKKy8qCisgKiBUaGUgYmlhcyBmaWVsZCBmb3IgbGlidXN1YWwgYW5kIGZyaWVuZHMuCisgKi8KKyNkZWZpbmUgVVNCX1VTX1RZUEVfTk9ORSAgIDAKKyNkZWZpbmUgVVNCX1VTX1RZUEVfU1RPUiAgIDEJCS8qIHVzYi1zdG9yYWdlICovCisjZGVmaW5lIFVTQl9VU19UWVBFX1VCICAgICAyCQkvKiB1YiAqLworCisjZGVmaW5lIFVTQl9VU19UWVBFKGZsYWdzKSAJCSgoKGZsYWdzKSA+PiAyNCkgJiAweEZGKQorI2RlZmluZSBVU0JfVVNfT1JJR19GTEFHUyhmbGFncykJKChmbGFncykgJiAweDAwRkZGRkZGKQorCisvKgorICogVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QgcGxhY2UgdG8ga2VlcCB0aGVzZSBjb25zdGFudHMsIGNvbmNlcHR1YWxseS4KKyAqIEJ1dCBpdCdzIHRoZSBvbmx5IGhlYWRlciBpbmNsdWRlZCBpbnRvIGFsbCBwbGFjZXMgd2hpY2ggbmVlZCB0aGVtLgorICovCisKKy8qIFN1YiBDbGFzc2VzICovCisKKyNkZWZpbmUgVVNfU0NfUkJDCTB4MDEJCS8qIFR5cGljYWxseSwgZmxhc2ggZGV2aWNlcyAqLworI2RlZmluZSBVU19TQ184MDIwCTB4MDIJCS8qIENELVJPTSAqLworI2RlZmluZSBVU19TQ19RSUMJMHgwMwkJLyogUUlDLTE1NyBUYXBlcyAqLworI2RlZmluZSBVU19TQ19VRkkJMHgwNAkJLyogRmxvcHB5ICovCisjZGVmaW5lIFVTX1NDXzgwNzAJMHgwNQkJLyogUmVtb3ZhYmxlIG1lZGlhICovCisjZGVmaW5lIFVTX1NDX1NDU0kJMHgwNgkJLyogVHJhbnNwYXJlbnQgKi8KKyNkZWZpbmUgVVNfU0NfSVNEMjAwICAgIDB4MDcJCS8qIElTRDIwMCBBVEEgKi8KKyNkZWZpbmUgVVNfU0NfTUlOCVVTX1NDX1JCQworI2RlZmluZSBVU19TQ19NQVgJVVNfU0NfSVNEMjAwCisKKyNkZWZpbmUgVVNfU0NfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLworCisvKiBQcm90b2NvbHMgKi8KKworI2RlZmluZSBVU19QUl9DQkkJMHgwMAkJLyogQ29udHJvbC9CdWxrL0ludGVycnVwdCAqLworI2RlZmluZSBVU19QUl9DQgkweDAxCQkvKiBDb250cm9sL0J1bGsgdy9vIGludGVycnVwdCAqLworI2RlZmluZSBVU19QUl9CVUxLCTB4NTAJCS8qIGJ1bGsgb25seSAqLworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAorI2RlZmluZSBVU19QUl9VU0JBVAkweDgwCQkvKiBTQ00tQVRBUEkgYnJpZGdlICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CisjZGVmaW5lIFVTX1BSX0VVU0JfU0REUjA5CTB4ODEJLyogU0NNLVNDU0kgYnJpZGdlIGZvciBTRERSLTA5ICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CisjZGVmaW5lIFVTX1BSX1NERFI1NQkweDgyCQkvKiBTRERSLTU1IChtYWRlIHVwKSAqLworI2VuZGlmCisjZGVmaW5lIFVTX1BSX0RQQ01fVVNCICAweGYwCQkvKiBDb21iaW5hdGlvbiBDQi9TRERSMDkgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQorI2RlZmluZSBVU19QUl9GUkVFQ09NICAgMHhmMQkJLyogRnJlZWNvbSAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKyNkZWZpbmUgVVNfUFJfREFUQUZBQiAgIDB4ZjIJCS8qIERhdGFmYWIgY2hpcHNldHMgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAorI2RlZmluZSBVU19QUl9KVU1QU0hPVCAgMHhmMwkJLyogTGV4YXIgSnVtcHNob3QgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEKKyNkZWZpbmUgVVNfUFJfQUxBVURBICAgIDB4ZjQJCS8qIEFsYXVkYSBjaGlwc2V0cyAqLworI2VuZGlmCisKKyNkZWZpbmUgVVNfUFJfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLworCisvKgorICovCisjaWZkZWYgQ09ORklHX1VTQl9MSUJVU1VBTAorCitleHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RvcmFnZV91c2JfaWRzW107CitleHRlcm4gdm9pZCB1c2JfdXN1YWxfc2V0X3ByZXNlbnQoaW50IHR5cGUpOworZXh0ZXJuIHZvaWQgdXNiX3VzdWFsX2NsZWFyX3ByZXNlbnQoaW50IHR5cGUpOworZXh0ZXJuIGludCB1c2JfdXN1YWxfY2hlY2tfdHlwZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqLCBpbnQgdHlwZSk7CisjZWxzZQorCisjZGVmaW5lIHVzYl91c3VhbF9zZXRfcHJlc2VudCh0KQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgdXNiX3VzdWFsX2NsZWFyX3ByZXNlbnQodCkJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHVzYl91c3VhbF9jaGVja190eXBlKGlkLCB0KQkoMCkKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0xJQlVTVUFMICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9VU1VBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IDBmYjA3N2QuLjgyZmJiNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0yNyw2ICsyNywyMiBAQAogCV9fdTgJCXByb3RvOwogfTsKIAorc3RydWN0IHhmcm1fc2VjX2N0eCB7CisJX191OAljdHhfZG9pOworCV9fdTgJY3R4X2FsZzsKKwlfX3UxNgljdHhfbGVuOworCV9fdTMyCWN0eF9zaWQ7CisJY2hhcgljdHhfc3RyWzBdOworfTsKKworLyogU2VjdXJpdHkgQ29udGV4dCBEb21haW5zIG9mIEludGVycHJldGF0aW9uICovCisjZGVmaW5lIFhGUk1fU0NfRE9JX1JFU0VSVkVEIDAKKyNkZWZpbmUgWEZSTV9TQ19ET0lfTFNNIDEKKworLyogU2VjdXJpdHkgQ29udGV4dCBBbGdvcml0aG1zICovCisjZGVmaW5lIFhGUk1fU0NfQUxHX1JFU0VSVkVEIDAKKyNkZWZpbmUgWEZSTV9TQ19BTEdfU0VMSU5VWCAxCisKIC8qIFNlbGVjdG9yLCB1c2VkIGFzIHNlbGVjdG9yIGJvdGggb24gcG9saWN5IHJ1bGVzIChTUEQpIGFuZCBTQXMuICovCiAKIHN0cnVjdCB4ZnJtX3NlbGVjdG9yCkBAIC0xNDYsNiArMTYyLDE4IEBACiAKICNkZWZpbmUgWEZSTV9OUl9NU0dUWVBFUyAoWEZSTV9NU0dfTUFYICsgMSAtIFhGUk1fTVNHX0JBU0UpCiAKKy8qCisgKiBHZW5lcmljIExTTSBzZWN1cml0eSBjb250ZXh0IGZvciBjb211bmljYXRpbmcgdG8gdXNlciBzcGFjZQorICogTk9URTogU2FtZSBmb3JtYXQgYXMgc2FkYl94X3NlY19jdHgKKyAqLworc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4IHsKKwlfX3UxNgkJCWxlbjsKKwlfX3UxNgkJCWV4dHR5cGU7CisJX191OAkJCWN0eF9hbGc7ICAvKiBMU01zOiBlLmcuLCBzZWxpbnV4ID09IDEgKi8KKwlfX3U4CQkJY3R4X2RvaTsKKwlfX3UxNgkJCWN0eF9sZW47Cit9OworCiBzdHJ1Y3QgeGZybV91c2VyX3RtcGwgewogCXN0cnVjdCB4ZnJtX2lkCQlpZDsKIAlfX3UxNgkJCWZhbWlseTsKQEAgLTE3Niw2ICsyMDQsNyBAQAogCVhGUk1BX1RNUEwsCQkvKiAxIG9yIG1vcmUgc3RydWN0IHhmcm1fdXNlcl90bXBsICovCiAJWEZSTUFfU0EsCiAJWEZSTUFfUE9MSUNZLAorCVhGUk1BX1NFQ19DVFgsCQkvKiBzdHJ1Y3QgeGZybV9zZWNfY3R4ICovCiAJX19YRlJNQV9NQVgKIAogI2RlZmluZSBYRlJNQV9NQVggKF9fWEZSTUFfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaCBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaAppbmRleCBiNWQ3ODVhLi5iZmMxNzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl91bml4LmgKKysrIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCkBAIC0xMyw3ICsxMyw3IEBACiAjZGVmaW5lIFVOSVhfSEFTSF9TSVpFCTI1NgogCiBleHRlcm4gc3RydWN0IGhsaXN0X2hlYWQgdW5peF9zb2NrZXRfdGFibGVbVU5JWF9IQVNIX1NJWkUgKyAxXTsKLWV4dGVybiByd2xvY2tfdCB1bml4X3RhYmxlX2xvY2s7CitleHRlcm4gc3BpbmxvY2tfdCB1bml4X3RhYmxlX2xvY2s7CiAKIGV4dGVybiBhdG9taWNfdCB1bml4X3RvdF9pbmZsaWdodDsKIApAQCAtNTgsMTAgKzU4LDEwIEBACiAjZGVmaW5lIFVOSVhDQihza2IpIAkoKihzdHJ1Y3QgdW5peF9za2JfcGFybXMqKSYoKHNrYiktPmNiKSkKICNkZWZpbmUgVU5JWENSRURTKHNrYikJKCZVTklYQ0IoKHNrYikpLmNyZWRzKQogCi0jZGVmaW5lIHVuaXhfc3RhdGVfcmxvY2socykJcmVhZF9sb2NrKCZ1bml4X3NrKHMpLT5sb2NrKQotI2RlZmluZSB1bml4X3N0YXRlX3J1bmxvY2socykJcmVhZF91bmxvY2soJnVuaXhfc2socyktPmxvY2spCi0jZGVmaW5lIHVuaXhfc3RhdGVfd2xvY2socykJd3JpdGVfbG9jaygmdW5peF9zayhzKS0+bG9jaykKLSNkZWZpbmUgdW5peF9zdGF0ZV93dW5sb2NrKHMpCXdyaXRlX3VubG9jaygmdW5peF9zayhzKS0+bG9jaykKKyNkZWZpbmUgdW5peF9zdGF0ZV9ybG9jayhzKQlzcGluX2xvY2soJnVuaXhfc2socyktPmxvY2spCisjZGVmaW5lIHVuaXhfc3RhdGVfcnVubG9jayhzKQlzcGluX3VubG9jaygmdW5peF9zayhzKS0+bG9jaykKKyNkZWZpbmUgdW5peF9zdGF0ZV93bG9jayhzKQlzcGluX2xvY2soJnVuaXhfc2socyktPmxvY2spCisjZGVmaW5lIHVuaXhfc3RhdGVfd3VubG9jayhzKQlzcGluX3VubG9jaygmdW5peF9zayhzKS0+bG9jaykKIAogI2lmZGVmIF9fS0VSTkVMX18KIC8qIFRoZSBBRl9VTklYIHNvY2tldCAqLwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICBzdHJ1Y3Qgc29jawkJKm90aGVyOwogICAgICAgICBzdHJ1Y3Qgc29jawkJKmdjX3RyZWU7CiAgICAgICAgIGF0b21pY190ICAgICAgICAgICAgICAgIGluZmxpZ2h0OwotICAgICAgICByd2xvY2tfdCAgICAgICAgICAgICAgICBsb2NrOworICAgICAgICBzcGlubG9ja190CQlsb2NrOwogICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBwZWVyX3dhaXQ7CiB9OwogI2RlZmluZSB1bml4X3NrKF9fc2spICgoc3RydWN0IHVuaXhfc29jayAqKV9fc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hdG1jbGlwLmggYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKaW5kZXggNDcwNDhiMS4uOTBmY2M5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCisrKyBiL2luY2x1ZGUvbmV0L2F0bWNsaXAuaApAQCAtNyw3ICs3LDYgQEAKICNkZWZpbmUgX0FUTUNMSVBfSAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYXRtYXJwLmg+CkBAIC0xOCw2ICsxNyw3IEBACiAjZGVmaW5lIENMSVBfVkNDKHZjYykgKChzdHJ1Y3QgY2xpcF92Y2MgKikgKCh2Y2MpLT51c2VyX2JhY2spKQogI2RlZmluZSBORUlHSDJFTlRSWShuZWlnaCkgKChzdHJ1Y3QgYXRtYXJwX2VudHJ5ICopIChuZWlnaCktPnByaW1hcnlfa2V5KQogCitzdHJ1Y3Qgc2tfYnVmZjsKIAogc3RydWN0IGNsaXBfdmNjIHsKIAlzdHJ1Y3QgYXRtX3ZjYwkqdmNjOwkJLyogVkNDIGRlc2NyaXB0b3IgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdC5oIGIvaW5jbHVkZS9uZXQvZHN0LmgKaW5kZXggNmMxOTZhNS4uYmVlOGI4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHN0LmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0LmgKQEAgLTksNiArOSw3IEBACiAjZGVmaW5lIF9ORVRfRFNUX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZmxvdy5oIGIvaW5jbHVkZS9uZXQvZmxvdy5oCmluZGV4IDlhNWM5NGIuLmVjN2ViODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Zsb3cuaAorKysgYi9pbmNsdWRlL25ldC9mbG93LmgKQEAgLTg0LDExICs4NCwxMiBAQAogI2RlZmluZSBGTE9XX0RJUl9PVVQJMQogI2RlZmluZSBGTE9XX0RJUl9GV0QJMgogCi10eXBlZGVmIHZvaWQgKCpmbG93X3Jlc29sdmVfdCkoc3RydWN0IGZsb3dpICprZXksIHUxNiBmYW1pbHksIHU4IGRpciwKK3N0cnVjdCBzb2NrOwordHlwZWRlZiB2b2lkICgqZmxvd19yZXNvbHZlX3QpKHN0cnVjdCBmbG93aSAqa2V5LCB1MzIgc2tfc2lkLCB1MTYgZmFtaWx5LCB1OCBkaXIsCiAJCQkgICAgICAgdm9pZCAqKm9ianAsIGF0b21pY190ICoqb2JqX3JlZnApOwogCi1leHRlcm4gdm9pZCAqZmxvd19jYWNoZV9sb29rdXAoc3RydWN0IGZsb3dpICprZXksIHUxNiBmYW1pbHksIHU4IGRpciwKLQkJCSAgICAgICBmbG93X3Jlc29sdmVfdCByZXNvbHZlcik7CitleHRlcm4gdm9pZCAqZmxvd19jYWNoZV9sb29rdXAoc3RydWN0IGZsb3dpICprZXksIHUzMiBza19zaWQsIHUxNiBmYW1pbHksIHU4IGRpciwKKwkgCQkgICAgICAgZmxvd19yZXNvbHZlX3QgcmVzb2x2ZXIpOwogZXh0ZXJuIHZvaWQgZmxvd19jYWNoZV9mbHVzaCh2b2lkKTsKIGV4dGVybiBhdG9taWNfdCBmbG93X2NhY2hlX2dlbmlkOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCmluZGV4IDUyZDhiMWEuLmM1Yjk2YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCkBAIC02MCw3ICs2MCw3IEBACiAgKi8KIHN0cnVjdCBnZW5sX29wcwogewotCXVuc2lnbmVkIGludAkJY21kOworCXU4CQkJY21kOwogCXVuc2lnbmVkIGludAkJZmxhZ3M7CiAJc3RydWN0IG5sYV9wb2xpY3kJKnBvbGljeTsKIAlpbnQJCSAgICAgICAoKmRvaXQpKHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pY21wLmggYi9pbmNsdWRlL25ldC9pY21wLmgKaW5kZXggNmNkZWJlZS4uZTdjM2YyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWNtcC5oCisrKyBiL2luY2x1ZGUvbmV0L2ljbXAuaApAQCAtMjAsMTIgKzIwLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC9zbm1wLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KIAogc3RydWN0IGljbXBfZXJyIHsKICAgaW50CQllcnJubzsKQEAgLTM4LDYgKzM1LDEwIEBACiAjZGVmaW5lIElDTVBfSU5DX1NUQVRTX0JIKGZpZWxkKQlTTk1QX0lOQ19TVEFUU19CSChpY21wX3N0YXRpc3RpY3MsIGZpZWxkKQogI2RlZmluZSBJQ01QX0lOQ19TVEFUU19VU0VSKGZpZWxkKSAJU05NUF9JTkNfU1RBVFNfVVNFUihpY21wX3N0YXRpc3RpY3MsIGZpZWxkKQogCitzdHJ1Y3QgZHN0X2VudHJ5Oworc3RydWN0IG5ldF9wcm90b19mYW1pbHk7CitzdHJ1Y3Qgc2tfYnVmZjsKKwogZXh0ZXJuIHZvaWQJaWNtcF9zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sICBpbnQgdHlwZSwgaW50IGNvZGUsIHUzMiBpbmZvKTsKIGV4dGVybiBpbnQJaWNtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50CWljbXBfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFfY3J5cHQuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oCmluZGV4IDIyNWZjNzUxLi4wM2I3NjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTFfY3J5cHQuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTFfY3J5cHQuaApAQCAtMjMsMTIgKzIzLDE3IEBACiAjaWZuZGVmIElFRUU4MDIxMV9DUllQVF9ICiAjZGVmaW5lIElFRUU4MDIxMV9DUllQVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIGVudW0gewogCUlFRUU4MDIxMV9DUllQVE9fVEtJUF9DT1VOVEVSTUVBU1VSRVMgPSAoMSA8PCAwKSwKIH07CiAKK3N0cnVjdCBza19idWZmOworc3RydWN0IG1vZHVsZTsKKwogc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTg3LDYgKzkyLDggQEAKIAlhdG9taWNfdCByZWZjbnQ7CiB9OwogCitzdHJ1Y3QgaWVlZTgwMjExX2RldmljZTsKKwogaW50IGllZWU4MDIxMV9yZWdpc3Rlcl9jcnlwdG9fb3BzKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzKTsKIGludCBpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzKTsKIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGNvbnN0IGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzNiNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIE5FVAkJR2VuZXJpYyBpbmZyYXN0cnVjdHVyZSBmb3IgSU5FVDYgY29ubmVjdGlvbiBvcmllbnRlZCBwcm90b2NvbHMuCisgKgorICogQXV0aG9yczoJTWFueSBwZW9wbGUsIHNlZSB0aGUgVENQdjYgc291cmNlcworICoKKyAqIAkJRnJvbSBjb2RlIG9yaWdpbmFsbHkgaW4gVENQdjYKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfSU5FVDZfQ09OTkVDVElPTl9TT0NLX0gKKyNkZWZpbmUgX0lORVQ2X0NPTk5FQ1RJT05fU09DS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgaW42X2FkZHI7CitzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldDsKK3N0cnVjdCByZXF1ZXN0X3NvY2s7CitzdHJ1Y3Qgc2tfYnVmZjsKK3N0cnVjdCBzb2NrOworc3RydWN0IHNvY2thZGRyOworCitleHRlcm4gaW50IGluZXQ2X2Nza19iaW5kX2NvbmZsaWN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGIpOworCitleHRlcm4gc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldDZfY3NrX3NlYXJjaF9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJIHN0cnVjdCByZXF1ZXN0X3NvY2sgKioqcHJldnAsCisJCQkJCQkgY29uc3QgX191MTYgcnBvcnQsCisJCQkJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpyYWRkciwKKwkJCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyLAorCQkJCQkJIGNvbnN0IGludCBpaWYpOworCitleHRlcm4gdm9pZCBpbmV0Nl9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisKK2V4dGVybiB2b2lkIGluZXQ2X2Nza19hZGRyMnNvY2thZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkcik7CisKK2V4dGVybiBpbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwZnJhZ29rKTsKKyNlbmRpZiAvKiBfSU5FVDZfQ09OTkVDVElPTl9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaCBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaAppbmRleCA1YTJiZWVkLi4yNWY3MDhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCkBAIC00OCw2ICs0OCwzMiBAQAogCXJldHVybiBpbmV0Nl9laGFzaGZuKGxhZGRyLCBscG9ydCwgZmFkZHIsIGZwb3J0KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9faW5ldDZfaGFzaChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCisJCQkJc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OworCXJ3bG9ja190ICpsb2NrOworCisJQlVHX1RSQVAoc2tfdW5oYXNoZWQoc2spKTsKKworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgeworCQlsaXN0ID0gJmhhc2hpbmZvLT5saXN0ZW5pbmdfaGFzaFtpbmV0X3NrX2xpc3Rlbl9oYXNoZm4oc2spXTsKKwkJbG9jayA9ICZoYXNoaW5mby0+bGhhc2hfbG9jazsKKwkJaW5ldF9saXN0ZW5fd2xvY2soaGFzaGluZm8pOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBoYXNoOworCQlzay0+c2tfaGFzaCA9IGhhc2ggPSBpbmV0Nl9za19laGFzaGZuKHNrKTsKKwkJaGFzaCAmPSAoaGFzaGluZm8tPmVoYXNoX3NpemUgLSAxKTsKKwkJbGlzdCA9ICZoYXNoaW5mby0+ZWhhc2hbaGFzaF0uY2hhaW47CisJCWxvY2sgPSAmaGFzaGluZm8tPmVoYXNoW2hhc2hdLmxvY2s7CisJCXdyaXRlX2xvY2sobG9jayk7CisJfQorCisJX19za19hZGRfbm9kZShzaywgbGlzdCk7CisJc29ja19wcm90X2luY191c2Uoc2stPnNrX3Byb3QpOworCXdyaXRlX3VubG9jayhsb2NrKTsKK30KKwogLyoKICAqIFNvY2tldHMgaW4gVENQX0NMT1NFIHN0YXRlIGFyZSBfYWx3YXlzXyB0YWtlbiBvdXQgb2YgdGhlIGhhc2gsIHNvCiAgKiB3ZSBuZWVkIG5vdCBjaGVjayBpdCBmb3IgVENQIGxvb2t1cHMgYW55bW9yZSwgdGhhbmtzIEFsZXhleS4gLURhdmVNCkBAIC04NCwxMCArMTEwLDEwIEBACiAKIAkJaWYoKigoX191MzIgKikmKHR3LT50d19kcG9ydCkpCT09IHBvcnRzCSYmCiAJCSAgIHNrLT5za19mYW1pbHkJCT09IFBGX0lORVQ2KSB7Ci0JCQljb25zdCBzdHJ1Y3QgdGNwNl90aW1ld2FpdF9zb2NrICp0Y3A2dHcgPSB0Y3A2X3R3c2soc2spOworCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOwogCi0JCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZ0Y3A2dHctPnR3X3Y2X2RhZGRyLCBzYWRkcikJJiYKLQkJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnRjcDZ0dy0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikJJiYKKwkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfZGFkZHIsIHNhZGRyKQkmJgorCQkJICAgIGlwdjZfYWRkcl9lcXVhbCgmdHc2LT50d192Nl9yY3Zfc2FkZHIsIGRhZGRyKQkmJgogCQkJICAgICghc2stPnNrX2JvdW5kX2Rldl9pZiB8fCBzay0+c2tfYm91bmRfZGV2X2lmID09IGRpZikpCiAJCQkJZ290byBoaXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfY29tbW9uLmggYi9pbmNsdWRlL25ldC9pbmV0X2NvbW1vbi5oCmluZGV4IGY5NDMzMDYuLjIyN2FkY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb21tb24uaApAQCAtMSw4ICsxLDggQEAKICNpZm5kZWYgX0lORVRfQ09NTU9OX0gKICNkZWZpbmUgX0lORVRfQ09NTU9OX0gKIAotZXh0ZXJuIHN0cnVjdCBwcm90b19vcHMJCWluZXRfc3RyZWFtX29wczsKLWV4dGVybiBzdHJ1Y3QgcHJvdG9fb3BzCQlpbmV0X2RncmFtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCQlpbmV0X3N0cmVhbV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHByb3RvX29wcwkJaW5ldF9kZ3JhbV9vcHM7CiAKIC8qCiAgKglJTkVUNCBwcm90b3R5cGVzIHVzZWQgYnkgSU5FVDYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCmluZGV4IGIwYzk5MDYuLjUwMjM0ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaApAQCAtMTUsOSArMTUsMTEgQEAKICNpZm5kZWYgX0lORVRfQ09OTkVDVElPTl9TT0NLX0gKICNkZWZpbmUgX0lORVRfQ09OTkVDVElPTl9TT0NLX0gKIAotI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCisjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KIAogI2RlZmluZSBJTkVUX0NTS19ERUJVRyAxCkBAIC0yOSw2ICszMSwyOSBAQAogc3RydWN0IGluZXRfaGFzaGluZm87CiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzOwogCisvKgorICogUG9pbnRlcnMgdG8gYWRkcmVzcyByZWxhdGVkIFRDUCBmdW5jdGlvbnMKKyAqIChpLmUuIHRoaW5ncyB0aGF0IGRlcGVuZCBvbiB0aGUgYWRkcmVzcyBmYW1pbHkpCisgKi8KK3N0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgeworCWludAkgICAgKCpxdWV1ZV94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXBmcmFnb2spOworCXZvaWQJICAgICgqc2VuZF9jaGVjaykoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CSAgICAoKnJlYnVpbGRfaGVhZGVyKShzdHJ1Y3Qgc29jayAqc2spOworCWludAkgICAgKCpjb25uX3JlcXVlc3QpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJc3RydWN0IHNvY2sgKigqc3luX3JlY3Zfc29jaykoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOworCWludAkgICAgKCpyZW1lbWJlcl9zdGFtcCkoc3RydWN0IHNvY2sgKnNrKTsKKwlfX3UxNgkgICAgbmV0X2hlYWRlcl9sZW47CisJaW50CSAgICAoKnNldHNvY2tvcHQpKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgCisJCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKKwlpbnQJICAgICgqZ2V0c29ja29wdCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCAKKwkJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CisJdm9pZAkgICAgKCphZGRyMnNvY2thZGRyKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqKTsKKwlpbnQgc29ja2FkZHJfbGVuOworfTsKKwogLyoqIGluZXRfY29ubmVjdGlvbl9zb2NrIC0gSU5FVCBjb25uZWN0aW9uIG9yaWVudGVkIHNvY2sKICAqCiAgKiBAaWNza19hY2NlcHRfcXVldWU6CSAgIEZJRk8gb2YgZXN0YWJsaXNoZWQgY2hpbGRyZW4gCkBAIC0zNiwxMyArNjEsMTYgQEAKICAqIEBpY3NrX3RpbWVvdXQ6CSAgIFRpbWVvdXQKICAqIEBpY3NrX3JldHJhbnNtaXRfdGltZXI6IFJlc2VuZCAobm8gYWNrKQogICogQGljc2tfcnRvOgkJICAgUmV0cmFuc21pdCB0aW1lb3V0CisgKiBAaWNza19wbXR1X2Nvb2tpZQkgICBMYXN0IHBtdHUgc2VlbiBieSBzb2NrZXQKICAqIEBpY3NrX2NhX29wcwkJICAgUGx1Z2dhYmxlIGNvbmdlc3Rpb24gY29udHJvbCBob29rCisgKiBAaWNza19hZl9vcHMJCSAgIE9wZXJhdGlvbnMgd2hpY2ggYXJlIEFGX0lORVR7NCw2fSBzcGVjaWZpYwogICogQGljc2tfY2Ffc3RhdGU6CSAgIENvbmdlc3Rpb24gY29udHJvbCBzdGF0ZQogICogQGljc2tfcmV0cmFuc21pdHM6CSAgIE51bWJlciBvZiB1bnJlY292ZXJlZCBbUlRPXSB0aW1lb3V0cwogICogQGljc2tfcGVuZGluZzoJICAgU2NoZWR1bGVkIHRpbWVyIGV2ZW50CiAgKiBAaWNza19iYWNrb2ZmOgkgICBCYWNrb2ZmCiAgKiBAaWNza19zeW5fcmV0cmllczogICAgICBOdW1iZXIgb2YgYWxsb3dlZCBTWU4gKG9yIGVxdWl2YWxlbnQpIHJldHJpZXMKICAqIEBpY3NrX3Byb2Jlc19vdXQ6CSAgIHVuYW5zd2VyZWQgMCB3aW5kb3cgcHJvYmVzCisgKiBAaWNza19leHRfaGRyX2xlbjoJICAgTmV0d29yayBwcm90b2NvbCBvdmVyaGVhZCAoSVAvSVB2NiBvcHRpb25zKQogICogQGljc2tfYWNrOgkJICAgRGVsYXllZCBBQ0sgY29udHJvbCBkYXRhCiAgKi8KIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayB7CkBAIC01NCwxNCArODIsMTcgQEAKICAJc3RydWN0IHRpbWVyX2xpc3QJICBpY3NrX3JldHJhbnNtaXRfdGltZXI7CiAgCXN0cnVjdCB0aW1lcl9saXN0CSAgaWNza19kZWxhY2tfdGltZXI7CiAJX191MzIJCQkgIGljc2tfcnRvOworCV9fdTMyCQkJICBpY3NrX3BtdHVfY29va2llOwogCXN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmljc2tfY2Ffb3BzOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgKmljc2tfYWZfb3BzOworCXVuc2lnbmVkIGludAkJICAoKmljc2tfc3luY19tc3MpKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpOwogCV9fdTgJCQkgIGljc2tfY2Ffc3RhdGU7CiAJX191OAkJCSAgaWNza19yZXRyYW5zbWl0czsKIAlfX3U4CQkJICBpY3NrX3BlbmRpbmc7CiAJX191OAkJCSAgaWNza19iYWNrb2ZmOwogCV9fdTgJCQkgIGljc2tfc3luX3JldHJpZXM7CiAJX191OAkJCSAgaWNza19wcm9iZXNfb3V0OwotCS8qIDIgQllURVMgSE9MRSwgVFJZIFRPIFBBQ0shICovCisJX191MTYJCQkgIGljc2tfZXh0X2hkcl9sZW47CiAJc3RydWN0IHsKIAkJX191OAkJICBwZW5kaW5nOwkgLyogQUNLIGlzIHBlbmRpbmcJCQkgICAqLwogCQlfX3U4CQkgIHF1aWNrOwkgLyogU2NoZWR1bGVkIG51bWJlciBvZiBxdWljayBhY2tzCSAgICovCkBAIC0xOTIsOCArMjIzLDEyIEBACiAJCQkJCQljb25zdCBfX3UxNiBycG9ydCwKIAkJCQkJCWNvbnN0IF9fdTMyIHJhZGRyLAogCQkJCQkJY29uc3QgX191MzIgbGFkZHIpOworZXh0ZXJuIGludCBpbmV0X2Nza19iaW5kX2NvbmZsaWN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0Yik7CiBleHRlcm4gaW50IGluZXRfY3NrX2dldF9wb3J0KHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKLQkJCSAgICAgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKTsKKwkJCSAgICAgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAorCQkJICAgICBpbnQgKCpiaW5kX2NvbmZsaWN0KShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YikpOwogCiBleHRlcm4gc3RydWN0IGRzdF9lbnRyeSogaW5ldF9jc2tfcm91dGVfcmVxKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CkBAIC0yMDcsNyArMjQyLDcgQEAKIAogZXh0ZXJuIHZvaWQgaW5ldF9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkJICBjb25zdCB1bnNpZ25lZCB0aW1lb3V0KTsKKwkJCQkJICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9jc2tfcmVxc2tfcXVldWVfcmVtb3ZlZChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCkBAIC0yNzMsNCArMzA4LDYgQEAKIGV4dGVybiBpbnQgIGluZXRfY3NrX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBucl90YWJsZV9lbnRyaWVzKTsKIGV4dGVybiB2b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzayk7CiAKK2V4dGVybiB2b2lkIGluZXRfY3NrX2FkZHIyc29ja2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyKTsKKwogI2VuZGlmIC8qIF9JTkVUX0NPTk5FQ1RJT05fU09DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAppbmRleCBiMGM0N2UyLi5kNTk5YzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKQEAgLTMsNiArMyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC9kc2ZpZWxkLmg+CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAppbmRleCAwNzg0MGJhLi4xMzVkODBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CkBAIC0xMjgsMjYgKzEyOSw2IEBACiAJa21lbV9jYWNoZV90CQkJKmJpbmRfYnVja2V0X2NhY2hlcDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZXRfZWhhc2hmbihjb25zdCBfX3UzMiBsYWRkciwgY29uc3QgX191MTYgbHBvcnQsCi0JCQkgICAgICAgY29uc3QgX191MzIgZmFkZHIsIGNvbnN0IF9fdTE2IGZwb3J0KQotewotCXVuc2lnbmVkIGludCBoID0gKGxhZGRyIF4gbHBvcnQpIF4gKGZhZGRyIF4gZnBvcnQpOwotCWggXj0gaCA+PiAxNjsKLQloIF49IGggPj4gODsKLQlyZXR1cm4gaDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaW5ldF9za19laGFzaGZuKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0JY29uc3QgX191MzIgbGFkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7Ci0JY29uc3QgX191MTYgbHBvcnQgPSBpbmV0LT5udW07Ci0JY29uc3QgX191MzIgZmFkZHIgPSBpbmV0LT5kYWRkcjsKLQljb25zdCBfX3UxNiBmcG9ydCA9IGluZXQtPmRwb3J0OwotCi0JcmV0dXJuIGluZXRfZWhhc2hmbihsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICppbmV0X2VoYXNoX2J1Y2tldCgKIAlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCiAJdW5zaWduZWQgaW50IGhhc2gpCkBAIC00MzQsNCArNDE1LDcgQEAKIAogCXJldHVybiBzazsKIH0KKworZXh0ZXJuIGludCBpbmV0X2hhc2hfY29ubmVjdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9kZWF0aF9yb3cgKmRlYXRoX3JvdywKKwkJCSAgICAgc3RydWN0IHNvY2sgKnNrKTsKICNlbmRpZiAvKiBfSU5FVF9IQVNIVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzZWI1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfc29jay5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCisgKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKgorICoJCURlZmluaXRpb25zIGZvciBpbmV0X3NvY2sKKyAqCisgKiBBdXRob3JzOglNYW55LCByZW9yZ2FuaXNlZCBoZXJlIGJ5CisgKiAJCUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBtYW5kcml2YS5jb20+CisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0lORVRfU09DS19ICisjZGVmaW5lIF9JTkVUX1NPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KKworLyoqIHN0cnVjdCBpcF9vcHRpb25zIC0gSVAgT3B0aW9ucworICoKKyAqIEBmYWRkciAtIFNhdmVkIGZpcnN0IGhvcCBhZGRyZXNzCisgKiBAaXNfc2V0Ynl1c2VyIC0gU2V0IGJ5IHNldHNvY2tvcHQ/CisgKiBAaXNfZGF0YSAtIE9wdGlvbnMgaW4gX19kYXRhLCByYXRoZXIgdGhhbiBza2IKKyAqIEBpc19zdHJpY3Ryb3V0ZSAtIFN0cmljdCBzb3VyY2Ugcm91dGUKKyAqIEBzcnJfaXNfaGl0IC0gUGFja2V0IGRlc3RpbmF0aW9uIGFkZHIgd2FzIG91ciBvbmUKKyAqIEBpc19jaGFuZ2VkIC0gSVAgY2hlY2tzdW0gbW9yZSBub3QgdmFsaWQKKyAqIEBycl9uZWVkYWRkciAtIE5lZWQgdG8gcmVjb3JkIGFkZHIgb2Ygb3V0Z29pbmcgZGV2CisgKiBAdHNfbmVlZHRpbWUgLSBOZWVkIHRvIHJlY29yZCB0aW1lc3RhbXAKKyAqIEB0c19uZWVkYWRkciAtIE5lZWQgdG8gcmVjb3JkIGFkZHIgb2Ygb3V0Z29pbmcgZGV2CisgKi8KK3N0cnVjdCBpcF9vcHRpb25zIHsKKwlfX3UzMgkJZmFkZHI7CisJdW5zaWduZWQgY2hhcglvcHRsZW47CisJdW5zaWduZWQgY2hhcglzcnI7CisJdW5zaWduZWQgY2hhcglycjsKKwl1bnNpZ25lZCBjaGFyCXRzOworCXVuc2lnbmVkIGNoYXIJaXNfc2V0Ynl1c2VyOjEsCisJCQlpc19kYXRhOjEsCisJCQlpc19zdHJpY3Ryb3V0ZToxLAorCQkJc3JyX2lzX2hpdDoxLAorCQkJaXNfY2hhbmdlZDoxLAorCQkJcnJfbmVlZGFkZHI6MSwKKwkJCXRzX25lZWR0aW1lOjEsCisJCQl0c19uZWVkYWRkcjoxOworCXVuc2lnbmVkIGNoYXIJcm91dGVyX2FsZXJ0OworCXVuc2lnbmVkIGNoYXIJX19wYWQxOworCXVuc2lnbmVkIGNoYXIJX19wYWQyOworCXVuc2lnbmVkIGNoYXIJX19kYXRhWzBdOworfTsKKworI2RlZmluZSBvcHRsZW5ndGgob3B0KSAoc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC0+b3B0bGVuKQorCitzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgeworCXN0cnVjdCByZXF1ZXN0X3NvY2sJcmVxOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXUxNgkJCWluZXQ2X3Jza19vZmZzZXQ7CisJLyogMiBieXRlcyBob2xlLCB0cnkgdG8gcGFjayAqLworI2VuZGlmCisJdTMyCQkJbG9jX2FkZHI7CisJdTMyCQkJcm10X2FkZHI7CisJdTE2CQkJcm10X3BvcnQ7CisJdTE2CQkJc25kX3dzY2FsZSA6IDQsIAorCQkJCXJjdl93c2NhbGUgOiA0LCAKKwkJCQl0c3RhbXBfb2sgIDogMSwKKwkJCQlzYWNrX29rCSAgIDogMSwKKwkJCQl3c2NhbGVfb2sgIDogMSwKKwkJCQllY25fb2sJICAgOiAxLAorCQkJCWFja2VkCSAgIDogMTsKKwlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmluZXRfcnNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnNrKQoreworCXJldHVybiAoc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICopc2s7Cit9CisKK3N0cnVjdCBpcF9tY19zb2NrbGlzdDsKK3N0cnVjdCBpcHY2X3BpbmZvOworc3RydWN0IHJ0YWJsZTsKKworLyoqIHN0cnVjdCBpbmV0X3NvY2sgLSByZXByZXNlbnRhdGlvbiBvZiBJTkVUIHNvY2tldHMKKyAqCisgKiBAc2sgLSBhbmNlc3RvciBjbGFzcworICogQHBpbmV0NiAtIHBvaW50ZXIgdG8gSVB2NiBjb250cm9sIGJsb2NrCisgKiBAZGFkZHIgLSBGb3JlaWduIElQdjQgYWRkcgorICogQHJjdl9zYWRkciAtIEJvdW5kIGxvY2FsIElQdjQgYWRkcgorICogQGRwb3J0IC0gRGVzdGluYXRpb24gcG9ydAorICogQG51bSAtIExvY2FsIHBvcnQKKyAqIEBzYWRkciAtIFNlbmRpbmcgc291cmNlCisgKiBAdWNfdHRsIC0gVW5pY2FzdCBUVEwKKyAqIEBzcG9ydCAtIFNvdXJjZSBwb3J0CisgKiBAaWQgLSBJRCBjb3VudGVyIGZvciBERiBwa3RzCisgKiBAdG9zIC0gVE9TCisgKiBAbWNfdHRsIC0gTXVsdGljYXN0aW5nIFRUTAorICogQGlzX2ljc2sgLSBpcyB0aGlzIGFuIGluZXRfY29ubmVjdGlvbl9zb2NrPworICogQG1jX2luZGV4IC0gTXVsdGljYXN0IGRldmljZSBpbmRleAorICogQG1jX2xpc3QgLSBHcm91cCBhcnJheQorICogQGNvcmsgLSBpbmZvIHRvIGJ1aWxkIGlwIGhkciBvbiBlYWNoIGlwIGZyYWcgd2hpbGUgc29ja2V0IGlzIGNvcmtlZAorICovCitzdHJ1Y3QgaW5ldF9zb2NrIHsKKwkvKiBzayBhbmQgcGluZXQ2IGhhcyB0byBiZSB0aGUgZmlyc3QgdHdvIG1lbWJlcnMgb2YgaW5ldF9zb2NrICovCisJc3RydWN0IHNvY2sJCXNrOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXN0cnVjdCBpcHY2X3BpbmZvCSpwaW5ldDY7CisjZW5kaWYKKwkvKiBTb2NrZXQgZGVtdWx0aXBsZXggY29tcGFyaXNvbnMgb24gaW5jb21pbmcgcGFja2V0cy4gKi8KKwlfX3UzMgkJCWRhZGRyOworCV9fdTMyCQkJcmN2X3NhZGRyOworCV9fdTE2CQkJZHBvcnQ7CisJX191MTYJCQludW07CisJX191MzIJCQlzYWRkcjsKKwlfX3MxNgkJCXVjX3R0bDsKKwlfX3UxNgkJCWNtc2dfZmxhZ3M7CisJc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKKwlfX3UxNgkJCXNwb3J0OworCV9fdTE2CQkJaWQ7CisJX191OAkJCXRvczsKKwlfX3U4CQkJbWNfdHRsOworCV9fdTgJCQlwbXR1ZGlzYzsKKwlfX3U4CQkJcmVjdmVycjoxLAorCQkJCWlzX2ljc2s6MSwKKwkJCQlmcmVlYmluZDoxLAorCQkJCWhkcmluY2w6MSwKKwkJCQltY19sb29wOjE7CisJaW50CQkJbWNfaW5kZXg7CisJX191MzIJCQltY19hZGRyOworCXN0cnVjdCBpcF9tY19zb2NrbGlzdAkqbWNfbGlzdDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQJCWZsYWdzOworCQl1bnNpZ25lZCBpbnQJCWZyYWdzaXplOworCQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworCQlzdHJ1Y3QgcnRhYmxlCQkqcnQ7CisJCWludAkJCWxlbmd0aDsgLyogVG90YWwgbGVuZ3RoIG9mIGFsbCBmcmFtZXMgKi8KKwkJdTMyCQkJYWRkcjsKKwkJc3RydWN0IGZsb3dpCQlmbDsKKwl9IGNvcms7Cit9OworCisjZGVmaW5lIElQQ09SS19PUFQJMQkvKiBpcC1vcHRpb25zIGhhcyBiZWVuIGhlbGQgaW4gaXBjb3JrLm9wdCAqLworI2RlZmluZSBJUENPUktfQUxMRlJBRwkyCS8qIGFsd2F5cyBmcmFnbWVudCAoZm9yIGlwdjYgZm9yIG5vdykgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBpbmV0X3NvY2sgKilzazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5ldF9za19jb3B5X2Rlc2NlbmRhbnQoc3RydWN0IHNvY2sgKnNrX3RvLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19mcm9tLAorCQkJCQkgICAgIGNvbnN0IGludCBhbmNlc3Rvcl9zaXplKQoreworCW1lbWNweShpbmV0X3NrKHNrX3RvKSArIDEsIGluZXRfc2soc2tfZnJvbSkgKyAxLAorCSAgICAgICBza19mcm9tLT5za19wcm90LT5vYmpfc2l6ZSAtIGFuY2VzdG9yX3NpemUpOworfQorI2lmICEoZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpKQorc3RhdGljIGlubGluZSB2b2lkIGluZXRfc2tfY29weV9kZXNjZW5kYW50KHN0cnVjdCBzb2NrICpza190bywKKwkJCQkJICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2Zyb20pCit7CisJX19pbmV0X3NrX2NvcHlfZGVzY2VuZGFudChza190bywgc2tfZnJvbSwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NvY2spKTsKK30KKyNlbmRpZgorCitleHRlcm4gaW50IGluZXRfc2tfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW5ldF9laGFzaGZuKGNvbnN0IF9fdTMyIGxhZGRyLCBjb25zdCBfX3UxNiBscG9ydCwKKwkJCQkJY29uc3QgX191MzIgZmFkZHIsIGNvbnN0IF9fdTE2IGZwb3J0KQoreworCXVuc2lnbmVkIGludCBoID0gKGxhZGRyIF4gbHBvcnQpIF4gKGZhZGRyIF4gZnBvcnQpOworCWggXj0gaCA+PiAxNjsKKwloIF49IGggPj4gODsKKwlyZXR1cm4gaDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5ldF9za19laGFzaGZuKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJY29uc3QgX191MzIgbGFkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7CisJY29uc3QgX191MTYgbHBvcnQgPSBpbmV0LT5udW07CisJY29uc3QgX191MzIgZmFkZHIgPSBpbmV0LT5kYWRkcjsKKwljb25zdCBfX3UxNiBmcG9ydCA9IGluZXQtPmRwb3J0OworCisJcmV0dXJuIGluZXRfZWhhc2hmbihsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCk7Cit9CisKKyNlbmRpZgkvKiBfSU5FVF9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKaW5kZXggMjhmN2IyMS4uMWRhMjk0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKQEAgLTE3LDE1ICsxNywxNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKKyNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgorI2luY2x1ZGUgPG5ldC90aW1ld2FpdF9zb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTEyNyw3ICsxMjgsOCBAQAogCV9fdTE2CQkJdHdfbnVtOwogCS8qIEFuZCB0aGVzZSBhcmUgb3Vycy4gKi8KIAlfX3U4CQkJdHdfaXB2Nm9ubHk6MTsKLQkvKiAzMSBiaXRzIGhvbGUsIHRyeSB0byBwYWNrICovCisJLyogMTUgYml0cyBob2xlLCB0cnkgdG8gcGFjayAqLworCV9fdTE2CQkJdHdfaXB2Nl9vZmZzZXQ7CiAJaW50CQkJdHdfdGltZW91dDsKIAl1bnNpZ25lZCBsb25nCQl0d190dGQ7CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQJKnR3X3RiOwpAQCAtMTk5LDcgKzIwMSw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyB0aW1ld2FpdF9zb2NrICVwIHJlbGVhc2VkXG4iLAogCQkgICAgICAgdHctPnR3X3Byb3QtPm5hbWUsIHR3KTsKICNlbmRpZgotCQlrbWVtX2NhY2hlX2ZyZWUodHctPnR3X3Byb3QtPnR3c2tfc2xhYiwgdHcpOworCQlrbWVtX2NhY2hlX2ZyZWUodHctPnR3X3Byb3QtPnR3c2tfcHJvdC0+dHdza19zbGFiLCB0dyk7CiAJCW1vZHVsZV9wdXQob3duZXIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCmluZGV4IDdmZGE0NzEuLjA5NjU1MTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCV9fdTMyCQkJdjRkYWRkcjsJLyogcGVlcidzIGFkZHJlc3MgKi8KIAlfX3UxNgkJCWF2bF9oZWlnaHQ7CiAJX191MTYJCQlpcF9pZF9jb3VudDsJLyogSVAgSUQgZm9yIHRoZSBuZXh0IHBhY2tldCAqLworCWF0b21pY190CQlyaWQ7CQkvKiBGcmFnIHJlY2VwdGlvbiBjb3VudGVyICovCiAJX191MzIJCQl0Y3BfdHM7CiAJdW5zaWduZWQgbG9uZwkJdGNwX3RzX3N0YW1wOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IGU0NTYzYmIuLmY3ZTdmZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtMjQsMTQgKzI0LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5fcm91dGUuaD4KLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLSNpbmNsdWRlIDxuZXQvYXJwLmg+CisKKyNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3NubXAuaD4KIAogc3RydWN0IHNvY2s7CkBAIC00NSw2ICs0MSw3IEBACiAjZGVmaW5lIElQU0tCX1RSQU5TTEFURUQJMgogI2RlZmluZSBJUFNLQl9GT1JXQVJERUQJCTQKICNkZWZpbmUgSVBTS0JfWEZSTV9UVU5ORUxfU0laRQk4CisjZGVmaW5lIElQU0tCX0ZSQUdfQ09NUExFVEUJMTYKIH07CiAKIHN0cnVjdCBpcGNtX2Nvb2tpZQpAQCAtNzQsNiArNzEsMTMgQEAKIAogI2RlZmluZSBJUF9GUkFHX1RJTUUJKDMwICogSFopCQkvKiBmcmFnbWVudCBsaWZldGltZQkqLwogCitzdHJ1Y3QgbXNnaGRyOworc3RydWN0IG5ldF9kZXZpY2U7CitzdHJ1Y3QgcGFja2V0X3R5cGU7CitzdHJ1Y3QgcnRhYmxlOworc3RydWN0IHNrX2J1ZmY7CitzdHJ1Y3Qgc29ja2FkZHI7CisKIGV4dGVybiB2b2lkCQlpcF9tY19kcm9wc29ja2V0KHN0cnVjdCBzb2NrICopOwogZXh0ZXJuIHZvaWQJCWlwX21jX2Ryb3BkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50CQlpZ21wX21jX3Byb2NfaW5pdCh2b2lkKTsKQEAgLTE2OCw2ICsxNzIsNyBAQAogZXh0ZXJuIGludCBzeXNjdGxfaXBmcmFnX2xvd190aHJlc2g7CiBleHRlcm4gaW50IHN5c2N0bF9pcGZyYWdfdGltZTsKIGV4dGVybiBpbnQgc3lzY3RsX2lwZnJhZ19zZWNyZXRfaW50ZXJ2YWw7CitleHRlcm4gaW50IHN5c2N0bF9pcGZyYWdfbWF4X2Rpc3Q7CiAKIC8qIEZyb20gaW5ldHBlZXIuYyAqLwogZXh0ZXJuIGludCBpbmV0X3BlZXJfdGhyZXNob2xkOwpAQCAtMTgyLDYgKzE4Nyw4IEBACiBleHRlcm4gdm9pZCBpcGZyYWdfaW5pdCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19JTkVUCisjaW5jbHVkZSA8bmV0L2RzdC5oPgorCiAvKiBUaGUgZnVuY3Rpb24gaW4gMi4yIHdhcyBpbnZhbGlkLCBwcm9kdWNpbmcgd3JvbmcgcmVzdWx0IGZvcgogICogY2hlY2s9MHhGRUZGLiBJdCB3YXMgbm90aWNlZCBieSBBcnRodXIgU2thd2luYSBfeWVhcl8gYWdvLiAtLUFOSygwMDA2MjUpICovCiBzdGF0aWMgaW5saW5lCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9maWIuaCBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCmluZGV4IDE0ZGU0ZWIuLmUwMDBmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCkBAIC0yMzgsNiArMjM4LDggQEAKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgKnNwZWNfZHN0LCB1MzIgKml0YWcpOwogZXh0ZXJuIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpOwogCitzdHJ1Y3QgcnRlbnRyeTsKKwogLyogRXhwb3J0ZWQgYnkgZmliX3NlbWFudGljcy5jICovCiBleHRlcm4gaW50IGlwX2ZpYl9jaGVja19kZWZhdWx0KHUzMiBndywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGZpYl9zeW5jX2Rvd24odTMyIGxvY2FsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggM2I1NTU5YS4uN2QyNjc0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAorKysgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC0yNTEsMTYgKzI1MSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4gICAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3QgbGlzdF9oZWFkICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gICAgICAgICAgICAgLyogZm9yIHN0cnVjdCByd2xvY2tfdCAqLwotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPiAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3Qgc2tfYnVmZiAqLwotI2luY2x1ZGUgPGxpbnV4L2lwLmg+ICAgICAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3QgaXBoZHIgKi8KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+ICAgICAgICAgICAgICAgICAvKiBmb3Igc3RydWN0IGF0b21pY190ICovCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CQkvKiBmb3Igc3RydWN0IG5laWdoYm91ciAqLwotI2luY2x1ZGUgPG5ldC9kc3QuaD4JCQkvKiBmb3Igc3RydWN0IGRzdF9lbnRyeSAqLwotI2luY2x1ZGUgPG5ldC91ZHAuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KIAogI2lmZGVmIENPTkZJR19JUF9WU19ERUJVRworI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorCiBleHRlcm4gaW50IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCh2b2lkKTsKICNkZWZpbmUgSVBfVlNfREJHKGxldmVsLCBtc2cuLi4pCQkJXAogICAgIGRvIHsJCQkJCQlcCkBAIC00MjksOCArNDI4LDExIEBACiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsgICAgICAgICAgIC8qIHNwaW4gbG9jayAqLwogfTsKIAorc3RydWN0IGRzdF9lbnRyeTsKK3N0cnVjdCBpcGhkcjsKIHN0cnVjdCBpcF92c19jb25uOwogc3RydWN0IGlwX3ZzX2FwcDsKK3N0cnVjdCBza19idWZmOwogCiBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgewogCXN0cnVjdCBpcF92c19wcm90b2NvbAkqbmV4dDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCAwYTJhZDUxLi44NjBiYmFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0yNDAsNiArMjQwLDggQEAKIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqaXB2Nl9maXh1cF9vcHRpb25zKHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0X3NwYWNlLAogCQkJCQkgIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KTsKIAorZXh0ZXJuIGludCBpcHY2X29wdF9hY2NlcHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworCiBleHRlcm4gaW50IGlwNl9mcmFnX25xdWV1ZXM7CiBleHRlcm4gYXRvbWljX3QgaXA2X2ZyYWdfbWVtOwogCkBAIC01MjUsNiArNTI3LDkgQEAKIGV4dGVybiBpbnQgaW5ldDZfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAKK2V4dGVybiBpbnQgaW5ldDZfaGFzaF9jb25uZWN0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyAqZGVhdGhfcm93LAorCQkJICAgICAgc3RydWN0IHNvY2sgKnNrKTsKKwogLyoKICAqIHJlYXNzZW1ibHkuYwogICovCkBAIC01MzMsOCArNTM4LDExIEBACiBleHRlcm4gaW50IHN5c2N0bF9pcDZmcmFnX3RpbWU7CiBleHRlcm4gaW50IHN5c2N0bF9pcDZmcmFnX3NlY3JldF9pbnRlcnZhbDsKIAotZXh0ZXJuIHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc3RyZWFtX29wczsKLWV4dGVybiBzdHJ1Y3QgcHJvdG9fb3BzIGluZXQ2X2RncmFtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXQ2X3N0cmVhbV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9kZ3JhbV9vcHM7CisKK3N0cnVjdCBncm91cF9zb3VyY2VfcmVxOworc3RydWN0IGdyb3VwX2ZpbHRlcjsKIAogZXh0ZXJuIGludCBpcDZfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLAogCQkJIHN0cnVjdCBncm91cF9zb3VyY2VfcmVxICpwZ3NyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25kaXNjLmggYi9pbmNsdWRlL25ldC9uZGlzYy5oCmluZGV4IGY4NWQ2ZTQuLmJiYWM4N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25kaXNjLmgKKysrIGIvaW5jbHVkZS9uZXQvbmRpc2MuaApAQCAtMzUsMTEgKzM1LDIwIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpbmNsdWRlIDxuZXQvbmVpZ2hib3VyLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IGZpbGU7CitzdHJ1Y3QgaW5ldDZfZGV2Oworc3RydWN0IG5ldF9kZXZpY2U7CitzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseTsKK3N0cnVjdCBza19idWZmOwogCiBleHRlcm4gc3RydWN0IG5laWdoX3RhYmxlIG5kX3RibDsKIApAQCAtMTA4LDcgKzExNyw3IEBACiBleHRlcm4gdm9pZAkJCWlnbXA2X2NsZWFudXAodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi1leHRlcm4gaW50IAkJCW5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlKGN0bF90YWJsZSAqY3RsLAorZXh0ZXJuIGludCAJCQluZGlzY19pZmluZm9fc3lzY3RsX2NoYW5nZShzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsCiAJCQkJCQkJICAgaW50IHdyaXRlLAogCQkJCQkJCSAgIHN0cnVjdCBmaWxlICogZmlscCwKIAkJCQkJCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAppbmRleCAzNGMwNzczLi42ZmE5YWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAorKysgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaApAQCAtNDksOCArNDksOCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BrdF9hY3QuaCBiL2luY2x1ZGUvbmV0L3BrdF9hY3QuaAppbmRleCBiZDA4OTY0Li5iMjI1ZDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3RfYWN0LmgKKysrIGIvaW5jbHVkZS9uZXQvcGt0X2FjdC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaCBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKaW5kZXggMzU3NjkxZi4uNjNmN2RiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaAorKysgYi9pbmNsdWRlL25ldC9wcm90b2NvbC5oCkBAIC02NSw3ICs2NSw3IEBACiAJaW50CQkgcHJvdG9jb2w7IC8qIFRoaXMgaXMgdGhlIEw0IHByb3RvY29sIG51bWJlci4gICovCiAKIAlzdHJ1Y3QgcHJvdG8JICpwcm90OwotCXN0cnVjdCBwcm90b19vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7CiAgIAogCWludCAgICAgICAgICAgICAgY2FwYWJpbGl0eTsgLyogV2hpY2ggKGlmIGFueSkgY2FwYWJpbGl0eSBkbwogCQkJCSAgICAgICogd2UgbmVlZCB0byB1c2UgdGhpcyBzb2NrZXQKQEAgLTc2LDYgKzc2LDcgQEAKIH07CiAjZGVmaW5lIElORVRfUFJPVE9TV19SRVVTRSAweDAxCSAgICAgLyogQXJlIHBvcnRzIGF1dG9tYXRpY2FsbHkgcmV1c2FibGU/ICovCiAjZGVmaW5lIElORVRfUFJPVE9TV19QRVJNQU5FTlQgMHgwMiAgLyogUGVybWFuZW50IHByb3RvY29scyBhcmUgdW5yZW1vdmFibGUuICovCisjZGVmaW5lIElORVRfUFJPVE9TV19JQ1NLICAgICAgMHgwNCAgLyogSXMgdGhpcyBhbiBpbmV0X2Nvbm5lY3Rpb25fc29jaz8gKi8KIAogZXh0ZXJuIHN0cnVjdCBuZXRfcHJvdG9jb2wgKmluZXRfcHJvdG9jb2xfYmFzZTsKIGV4dGVybiBzdHJ1Y3QgbmV0X3Byb3RvY29sICppbmV0X3Byb3Rvc1tNQVhfSU5FVF9QUk9UT1NdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmF3LmggYi9pbmNsdWRlL25ldC9yYXcuaAppbmRleCBmNDc5MTc0Li5lNjdiMjhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yYXcuaAorKysgYi9pbmNsdWRlL25ldC9yYXcuaApAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKKyNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KKwogZXh0ZXJuIHN0cnVjdCBwcm90byByYXdfcHJvdDsKIAogZXh0ZXJuIHZvaWQgCXJhd19lcnIoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKiwgdTMyIGluZm8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmggYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAppbmRleCBiNTJjYzUyLi4xMTY0MWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaApAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZXFza19xdWV1ZV9oYXNoX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSwKIAkJCQkJdTMyIGhhc2gsIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkJdW5zaWduZWQgdGltZW91dCkKKwkJCQkJdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewogCXN0cnVjdCBsaXN0ZW5fc29jayAqbG9wdCA9IHF1ZXVlLT5saXN0ZW5fb3B0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDhlNzc5NGUuLmY1YzIyZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0yNzcsNiArMjc3LDI0IEBACiAJX191MzIgZGVmYXVsdF9jb250ZXh0OwogCV9fdTMyIGRlZmF1bHRfdGltZXRvbGl2ZTsKIAorCS8qIEhlYXJ0YmVhdCBpbnRlcnZhbDogVGhlIGVuZHBvaW50IHNlbmRzIG91dCBhIEhlYXJ0YmVhdCBjaHVuayB0bworCSAqIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGV2ZXJ5IGhlYXJ0YmVhdCBpbnRlcnZhbC4gVGhpcyB2YWx1ZQorCSAqIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IGFsbCBuZXcgYXNzb2NpYXRpb25zLgorCSAqLworCV9fdTMyIGhiaW50ZXJ2YWw7CisKKwkvKiBUaGlzIGlzIHRoZSBtYXhfcmV0cmFucyB2YWx1ZSBmb3IgbmV3IGFzc29jaWF0aW9ucy4gKi8KKwlfX3UxNiBwYXRobWF4cnh0OworCisJLyogVGhlIGluaXRpYWwgUGF0aCBNVFUgdG8gdXNlIGZvciBuZXcgYXNzb2NpYXRpb25zLiAqLworCV9fdTMyIHBhdGhtdHU7CisKKwkvKiBUaGUgZGVmYXVsdCBTQUNLIGRlbGF5IHRpbWVvdXQgZm9yIG5ldyBhc3NvY2lhdGlvbnMuICovCisJX191MzIgc2Fja2RlbGF5OworCisJLyogRmxhZ3MgY29udHJvbGluZyBIZWFydGJlYXQsIFNBQ0sgZGVsYXksIGFuZCBQYXRoIE1UVSBEaXNjb3ZlcnkuICovCisJX191MzIgcGFyYW1fZmxhZ3M7CisKIAlzdHJ1Y3Qgc2N0cF9pbml0bXNnIGluaXRtc2c7CiAJc3RydWN0IHNjdHBfcnRvaW5mbyBydG9pbmZvOwogCXN0cnVjdCBzY3RwX3BhZGRycGFyYW1zIHBhZGRycGFyYW07CkBAIC04NDUsOSArODYzLDYgQEAKIAkvKiBEYXRhIHRoYXQgaGFzIGJlZW4gc2VudCwgYnV0IG5vdCBhY2tub3dsZWRnZWQuICovCiAJX191MzIgZmxpZ2h0X3NpemU7CiAKLQkvKiBQTVRVCSAgICAgIDogVGhlIGN1cnJlbnQga25vd24gcGF0aCBNVFUuICAqLwotCV9fdTMyIHBtdHU7Ci0KIAkvKiBEZXN0aW5hdGlvbiAqLwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAkvKiBTb3VyY2UgYWRkcmVzcy4gKi8KQEAgLTg2Miw3ICs4NzcsMjIgQEAKIAkvKiBIZWFydGJlYXQgaW50ZXJ2YWw6IFRoZSBlbmRwb2ludCBzZW5kcyBvdXQgYSBIZWFydGJlYXQgY2h1bmsgdG8KIAkgKiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBldmVyeSBoZWFydGJlYXQgaW50ZXJ2YWwuCiAJICovCi0JaW50IGhiX2ludGVydmFsOworCV9fdTMyIGhiaW50ZXJ2YWw7CisKKwkvKiBUaGlzIGlzIHRoZSBtYXhfcmV0cmFucyB2YWx1ZSBmb3IgdGhlIHRyYW5zcG9ydCBhbmQgd2lsbAorCSAqIGJlIGluaXRpYWxpemVkIGZyb20gdGhlIGFzc29jcyB2YWx1ZS4gIFRoaXMgY2FuIGJlIGNoYW5nZWQKKwkgKiB1c2luZyBTQ1RQX1NFVF9QRUVSX0FERFJfUEFSQU1TIHNvY2tldCBvcHRpb24uCisJICovCisJX191MTYgcGF0aG1heHJ4dDsKKworCS8qIFBNVFUJICAgICAgOiBUaGUgY3VycmVudCBrbm93biBwYXRoIE1UVS4gICovCisJX191MzIgcGF0aG10dTsKKworCS8qIFNBQ0sgZGVsYXkgdGltZW91dCAqLworCV9fdTMyIHNhY2tkZWxheTsKKworCS8qIEZsYWdzIGNvbnRyb2xpbmcgSGVhcnRiZWF0LCBTQUNLIGRlbGF5LCBhbmQgUGF0aCBNVFUgRGlzY292ZXJ5LiAqLworCV9fdTMyIHBhcmFtX2ZsYWdzOwogCiAJLyogV2hlbiB3YXMgdGhlIGxhc3QgdGltZSAoaW4gamlmZmllcykgdGhhdCB3ZSBoZWFyZCBmcm9tIHRoaXMKIAkgKiB0cmFuc3BvcnQ/ICBXZSB1c2UgdGhpcyB0byBwaWNrIG5ldyBhY3RpdmUgYW5kIHJldHJhbiBwYXRocy4KQEAgLTg4MiwyMiArOTEyLDExIEBACiAJICovCiAJaW50IHN0YXRlOwogCi0JLyogaGJfYWxsb3dlZCAgOiBUaGUgY3VycmVudCBoZWFydGJlYXQgc3RhdGUgb2YgdGhpcyBkZXN0aW5hdGlvbiwKLQkgKgkgICAgICAgOiAgaS5lLiBBTExPVy1IQiwgTk8tSEVBUlRCRUFULCBldGMuCi0JICovCi0JaW50IGhiX2FsbG93ZWQ7Ci0KIAkvKiBUaGVzZSBhcmUgdGhlIGVycm9yIHN0YXRzIGZvciB0aGlzIGRlc3RpbmF0aW9uLiAgKi8KIAogCS8qIEVycm9yIGNvdW50IDogVGhlIGN1cnJlbnQgZXJyb3IgY291bnQgZm9yIHRoaXMgZGVzdGluYXRpb24uCSovCiAJdW5zaWduZWQgc2hvcnQgZXJyb3JfY291bnQ7CiAKLQkvKiBUaGlzIGlzIHRoZSBtYXhfcmV0cmFucyB2YWx1ZSBmb3IgdGhlIHRyYW5zcG9ydCBhbmQgd2lsbAotCSAqIGJlIGluaXRpYWxpemVkIHRvIHByb3RvLm1heF9yZXRyYW5zLnBhdGguICBUaGlzIGNhbiBiZSBjaGFuZ2VkCi0JICogdXNpbmcgU0NUUF9TRVRfUEVFUl9BRERSX1BBUkFNUyBzb2NrZXQgb3B0aW9uLgotCSAqLwotCWludCBtYXhfcmV0cmFuczsKLQogCS8qIFBlcgkgICAgICAgOiBBIHRpbWVyIHVzZWQgYnkgZWFjaCBkZXN0aW5hdGlvbi4KIAkgKiBEZXN0aW5hdGlvbiA6CiAJICogVGltZXIgICAgICAgOgpAQCAtMTUwMiw2ICsxNTIxLDI4IEBACiAJLyogVGhlIGxhcmdlc3QgdGltZW91dCBvciBSVE8gdmFsdWUgdG8gdXNlIGluIGF0dGVtcHRpbmcgYW4gSU5JVCAqLwogCV9fdTE2IG1heF9pbml0X3RpbWVvOwogCisJLyogSGVhcnRiZWF0IGludGVydmFsOiBUaGUgZW5kcG9pbnQgc2VuZHMgb3V0IGEgSGVhcnRiZWF0IGNodW5rIHRvCisJICogdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZXZlcnkgaGVhcnRiZWF0IGludGVydmFsLiBUaGlzIHZhbHVlCisJICogd2lsbCBiZSBpbmhlcml0ZWQgYnkgYWxsIG5ldyB0cmFuc3BvcnRzLgorCSAqLworCV9fdTMyIGhiaW50ZXJ2YWw7CisKKwkvKiBUaGlzIGlzIHRoZSBtYXhfcmV0cmFucyB2YWx1ZSBmb3IgbmV3IHRyYW5zcG9ydHMgaW4gdGhlCisJICogYXNzb2NpYXRpb24uCisJICovCisJX191MTYgcGF0aG1heHJ4dDsKKworCS8qIEFzc29jaWF0aW9uIDogVGhlIHNtYWxsZXN0IFBNVFUgZGlzY292ZXJlZCBmb3IgYWxsIG9mIHRoZQorCSAqIFBNVFUJICAgICAgIDogcGVlcidzIHRyYW5zcG9ydCBhZGRyZXNzZXMuCisJICovCisJX191MzIgcGF0aG10dTsKKworCS8qIFNBQ0sgZGVsYXkgdGltZW91dCAqLworCV9fdTMyIHNhY2tkZWxheTsKKworCS8qIEZsYWdzIGNvbnRyb2xpbmcgSGVhcnRiZWF0LCBTQUNLIGRlbGF5LCBhbmQgUGF0aCBNVFUgRGlzY292ZXJ5LiAqLworCV9fdTMyIHBhcmFtX2ZsYWdzOworCiAJaW50IHRpbWVvdXRzW1NDVFBfTlVNX1RJTUVPVVRfVFlQRVNdOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyc1tTQ1RQX05VTV9USU1FT1VUX1RZUEVTXTsKIApAQCAtMTU3MSwxMSArMTYxMiw2IEBACiAJICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKIAotCS8qIEFzc29jaWF0aW9uIDogVGhlIHNtYWxsZXN0IFBNVFUgZGlzY292ZXJlZCBmb3IgYWxsIG9mIHRoZQotCSAqIFBNVFUJICAgICAgIDogcGVlcidzIHRyYW5zcG9ydCBhZGRyZXNzZXMuCi0JICovCi0JX191MzIgcG10dTsKLQogCS8qIFRoZSBtZXNzYWdlIHNpemUgYXQgd2hpY2ggU0NUUCBmcmFnbWVudGF0aW9uIHdpbGwgb2NjdXIuICovCiAJX191MzIgZnJhZ19wb2ludDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmggYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAppbmRleCBmMWMzYmM1Li44YTZiZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaApAQCAtOTMsNiArOTMsOCBAQAogI2RlZmluZSBTQ1RQX1NUQVRVUyBTQ1RQX1NUQVRVUwogCVNDVFBfR0VUX1BFRVJfQUREUl9JTkZPLAogI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTyBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTworCVNDVFBfREVMQVlFRF9BQ0tfVElNRSwKKyNkZWZpbmUgU0NUUF9ERUxBWUVEX0FDS19USU1FIFNDVFBfREVMQVlFRF9BQ0tfVElNRQogCiAJLyogSW50ZXJuYWwgU29ja2V0IE9wdGlvbnMuIFNvbWUgb2YgdGhlIHNjdHAgbGlicmFyeSBmdW5jdGlvbnMgYXJlIAogCSAqIGltcGxlbWVudGVkIHVzaW5nIHRoZXNlIHNvY2tldCBvcHRpb25zLgpAQCAtNTAzLDEzICs1MDUsNDEgQEAKICAqICAgdW5yZWFjaGFibGUuIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gYWNjZXNzIGFuZCBtb2RpZnkgYW4KICAqICAgYWRkcmVzcydzIHBhcmFtZXRlcnM6CiAgKi8KK2VudW0gIHNjdHBfc3BwX2ZsYWdzIHsKKwlTUFBfSEJfRU5BQkxFID0gMSwJCS8qRW5hYmxlIGhlYXJ0YmVhdHMqLworCVNQUF9IQl9ESVNBQkxFID0gMiwJCS8qRGlzYWJsZSBoZWFydGJlYXRzKi8KKwlTUFBfSEIgPSBTUFBfSEJfRU5BQkxFIHwgU1BQX0hCX0RJU0FCTEUsCisJU1BQX0hCX0RFTUFORCA9IDQsCQkvKlNlbmQgaGVhcnRiZWF0IGltbWVkaWF0ZWx5Ki8KKwlTUFBfUE1UVURfRU5BQkxFID0gOCwJCS8qRW5hYmxlIFBNVFUgZGlzY292ZXJ5Ki8KKwlTUFBfUE1UVURfRElTQUJMRSA9IDE2LAkJLypEaXNhYmxlIFBNVFUgZGlzY292ZXJ5Ki8KKwlTUFBfUE1UVUQgPSBTUFBfUE1UVURfRU5BQkxFIHwgU1BQX1BNVFVEX0RJU0FCTEUsCisJU1BQX1NBQ0tERUxBWV9FTkFCTEUgPSAzMiwJLypFbmFibGUgU0FDSyovCisJU1BQX1NBQ0tERUxBWV9ESVNBQkxFID0gNjQsCS8qRGlzYWJsZSBTQUNLKi8KKwlTUFBfU0FDS0RFTEFZID0gU1BQX1NBQ0tERUxBWV9FTkFCTEUgfCBTUFBfU0FDS0RFTEFZX0RJU0FCTEUsCit9OworCiBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyB7CiAJc2N0cF9hc3NvY190CQlzcHBfYXNzb2NfaWQ7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJc3BwX2FkZHJlc3M7CiAJX191MzIJCQlzcHBfaGJpbnRlcnZhbDsKIAlfX3UxNgkJCXNwcF9wYXRobWF4cnh0OworCV9fdTMyCQkJc3BwX3BhdGhtdHU7CisJX191MzIJCQlzcHBfc2Fja2RlbGF5OworCV9fdTMyCQkJc3BwX2ZsYWdzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIAorLyogNy4xLjI0LiBEZWxheWVkIEFjayBUaW1lciAoU0NUUF9ERUxBWUVEX0FDS19USU1FKQorICoKKyAqICAgVGhpcyBvcHRpb25zIHdpbGwgZ2V0IG9yIHNldCB0aGUgZGVsYXllZCBhY2sgdGltZXIuICBUaGUgdGltZSBpcyBzZXQKKyAqICAgaW4gbWlsbGlzZWNvbmRzLiAgSWYgdGhlIGFzc29jX2lkIGlzIDAsIHRoZW4gdGhpcyBzZXRzIG9yIGdldHMgdGhlCisgKiAgIGVuZHBvaW50cyBkZWZhdWx0IGRlbGF5ZWQgYWNrIHRpbWVyIHZhbHVlLiAgSWYgdGhlIGFzc29jX2lkIGZpZWxkIGlzCisgKiAgIG5vbi16ZXJvLCB0aGVuIHRoZSBzZXQgb3IgZ2V0IGVmZmVjdHMgdGhlIHNwZWNpZmllZCBhc3NvY2lhdGlvbi4KKyAqLworc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgeworICAgIHNjdHBfYXNzb2NfdCAgICAgICAgICAgIGFzc29jX2lkOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGFzc29jX3ZhbHVlOworfTsKKwogLyoKICAqIDcuMi4yIFBlZXIgQWRkcmVzcyBJbmZvcm1hdGlvbgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA5ODJiNGVjLi42OTYxNzAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC00OTMsNiArNDkzLDcgQEAKIGV4dGVybiBpbnQgc2tfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW8pOwogCiBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wczsKK3N0cnVjdCB0aW1ld2FpdF9zb2NrX29wczsKIAogLyogTmV0d29ya2luZyBwcm90b2NvbCBibG9ja3Mgd2UgYXR0YWNoIHRvIHNvY2tldHMuCiAgKiBzb2NrZXQgbGF5ZXIgLT4gdHJhbnNwb3J0IGxheWVyIGludGVyZmFjZQpAQCAtNTU3LDExICs1NTgsMTAgQEAKIAlrbWVtX2NhY2hlX3QJCSpzbGFiOwogCXVuc2lnbmVkIGludAkJb2JqX3NpemU7CiAKLQlrbWVtX2NhY2hlX3QJCSp0d3NrX3NsYWI7Ci0JdW5zaWduZWQgaW50CQl0d3NrX29ial9zaXplOwogCWF0b21pY190CQkqb3JwaGFuX2NvdW50OwogCiAJc3RydWN0IHJlcXVlc3Rfc29ja19vcHMJKnJza19wcm90OworCXN0cnVjdCB0aW1ld2FpdF9zb2NrX29wcyAqdHdza19wcm90OwogCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCkBAIC05MjYsNiArOTI2LDI5IEBACiAJCXNrX2ZyZWUoc2spOwogfQogCitzdGF0aWMgaW5saW5lIGludCBza19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHJjID0gTkVUX1JYX1NVQ0NFU1M7CisKKwlpZiAoc2tfZmlsdGVyKHNrLCBza2IsIDApKQorCQlnb3RvIGRpc2NhcmRfYW5kX3JlbHNlOworCisJc2tiLT5kZXYgPSBOVUxMOworCisJYmhfbG9ja19zb2NrKHNrKTsKKwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpCisJCXJjID0gc2stPnNrX2JhY2tsb2dfcmN2KHNrLCBza2IpOworCWVsc2UKKwkJc2tfYWRkX2JhY2tsb2coc2ssIHNrYik7CisJYmhfdW5sb2NrX3NvY2soc2spOworb3V0OgorCXNvY2tfcHV0KHNrKTsKKwlyZXR1cm4gcmM7CitkaXNjYXJkX2FuZF9yZWxzZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlnb3RvIG91dDsKK30KKwogLyogRGV0YWNoIHNvY2tldCBmcm9tIHByb2Nlc3MgY29udGV4dC4KICAqIEFubm91bmNlIHNvY2tldCBkZWFkLCBkZXRhY2ggaXQgZnJvbSB3YWl0IHF1ZXVlIGFuZCBpbm9kZS4KICAqIE5vdGUgdGhhdCBwYXJlbnQgaW5vZGUgaGVsZCByZWZlcmVuY2UgY291bnQgb24gdGhpcyBzdHJ1Y3Qgc29jaywKQEAgLTExNjYsNyArMTE4OSwxMCBAQAogIAogc3RhdGljIGlubGluZSBpbnQgc29ja19lcnJvcihzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JaW50IGVyciA9IHhjaGcoJnNrLT5za19lcnIsIDApOworCWludCBlcnI7CisJaWYgKGxpa2VseSghc2stPnNrX2VycikpCisJCXJldHVybiAwOworCWVyciA9IHhjaGcoJnNrLT5za19lcnIsIDApOwogCXJldHVybiAtZXJyOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IGQ3ODAyNWYuLjc3ZjIxYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0yMjUsNTMgKzIyNSw2IEBACiBleHRlcm4gaW50IHRjcF9tZW1vcnlfcHJlc3N1cmU7CiAKIC8qCi0gKglQb2ludGVycyB0byBhZGRyZXNzIHJlbGF0ZWQgVENQIGZ1bmN0aW9ucwotICoJKGkuZS4gdGhpbmdzIHRoYXQgZGVwZW5kIG9uIHRoZSBhZGRyZXNzIGZhbWlseSkKLSAqLwotCi1zdHJ1Y3QgdGNwX2Z1bmMgewotCWludAkJCSgqcXVldWVfeG1pdCkJCShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJCSBpbnQgaXBmcmFnb2spOwotCi0Jdm9pZAkJCSgqc2VuZF9jaGVjaykJCShzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkJIHN0cnVjdCB0Y3BoZHIgKnRoLAotCQkJCQkJCSBpbnQgbGVuLAotCQkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotCWludAkJCSgqcmVidWlsZF9oZWFkZXIpCShzdHJ1Y3Qgc29jayAqc2spOwotCi0JaW50CQkJKCpjb25uX3JlcXVlc3QpCQkoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotCXN0cnVjdCBzb2NrICoJCSgqc3luX3JlY3Zfc29jaykJKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJCQkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwotICAgIAotCWludAkJCSgqcmVtZW1iZXJfc3RhbXApCShzdHJ1Y3Qgc29jayAqc2spOwotCi0JX191MTYJCQluZXRfaGVhZGVyX2xlbjsKLQotCWludAkJCSgqc2V0c29ja29wdCkJCShzdHJ1Y3Qgc29jayAqc2ssIAotCQkJCQkJCSBpbnQgbGV2ZWwsIAotCQkJCQkJCSBpbnQgb3B0bmFtZSwgCi0JCQkJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIAotCQkJCQkJCSBpbnQgb3B0bGVuKTsKLQotCWludAkJCSgqZ2V0c29ja29wdCkJCShzdHJ1Y3Qgc29jayAqc2ssIAotCQkJCQkJCSBpbnQgbGV2ZWwsIAotCQkJCQkJCSBpbnQgb3B0bmFtZSwgCi0JCQkJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIAotCQkJCQkJCSBpbnQgX191c2VyICpvcHRsZW4pOwotCi0KLQl2b2lkCQkJKCphZGRyMnNvY2thZGRyKQkoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJCSBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLQlpbnQgc29ja2FkZHJfbGVuOwotfTsKLQotLyoKICAqIFRoZSBuZXh0IHJvdXRpbmVzIGRlYWwgd2l0aCBjb21wYXJpbmcgMzIgYml0IHVuc2lnbmVkIGludHMKICAqIGFuZCB3b3JyeSBhYm91dCB3cmFwYXJvdW5kIChhdXRvbWF0aWMgd2l0aCB1bnNpZ25lZCBhcml0aG1ldGljKS4KICAqLwpAQCAtMzM0LDYgKzI4Nyw5IEBACiAKIGV4dGVybiB2b2lkCQkJdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc3RydWN0IHNvY2sgKnNrKTsKIAorZXh0ZXJuIGludAkJCXRjcF90d3NrX3VuaXF1ZShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQlzdHJ1Y3Qgc29jayAqc2t0dywgdm9pZCAqdHdwKTsKKwogc3RhdGljIGlubGluZSB2b2lkIHRjcF9kZWNfcXVpY2thY2tfbW9kZShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgcGt0cykKIHsKQEAgLTQwNSw4ICszNjEsNyBAQAogICoJVENQIHY0IGZ1bmN0aW9ucyBleHBvcnRlZCBmb3IgdGhlIGluZXQ2IEFQSQogICovCiAKLWV4dGVybiB2b2lkCQkgICAgICAgCXRjcF92NF9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgCi0JCQkJCQkgIHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgbGVuLCAKK2V4dGVybiB2b2lkCQkgICAgICAgCXRjcF92NF9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKIAkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIGV4dGVybiBpbnQJCQl0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywKQEAgLTQ5MCwzNCArNDQ1LDE2IEBACiBleHRlcm4gaW50IHRjcF9yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKIAkJCSBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7CiAKLS8qIEluaXRpYWxpemUgUkNWX01TUyB2YWx1ZS4KLSAqIFJDVl9NU1MgaXMgYW4gb3VyIGd1ZXNzIGFib3V0IE1TUyB1c2VkIGJ5IHRoZSBwZWVyLgotICogV2UgaGF2ZW4ndCBhbnkgZGlyZWN0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBNU1MuCi0gKiBJdCdzIGJldHRlciB0byB1bmRlcmVzdGltYXRlIHRoZSBSQ1ZfTVNTIHJhdGhlciB0aGFuIG92ZXJlc3RpbWF0ZS4KLSAqIE92ZXJlc3RpbWF0aW9ucyBtYWtlIHVzIEFDS2luZyBsZXNzIGZyZXF1ZW50bHkgdGhhbiBuZWVkZWQuCi0gKiBVbmRlcmVzdGltYXRpb25zIGFyZSBtb3JlIGVhc3kgdG8gZGV0ZWN0IGFuZCBmaXggYnkgdGNwX21lYXN1cmVfcmN2X21zcygpLgotICovCitleHRlcm4gdm9pZCB0Y3BfaW5pdGlhbGl6ZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzayk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfaW5pdGlhbGl6ZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaykKLXsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQl1bnNpZ25lZCBpbnQgaGludCA9IG1pbl90KHVuc2lnbmVkIGludCwgdHAtPmFkdm1zcywgdHAtPm1zc19jYWNoZSk7Ci0KLQloaW50ID0gbWluKGhpbnQsIHRwLT5yY3Zfd25kLzIpOwotCWhpbnQgPSBtaW4oaGludCwgVENQX01JTl9SQ1ZNU1MpOwotCWhpbnQgPSBtYXgoaGludCwgVENQX01JTl9NU1MpOwotCi0JaW5ldF9jc2soc2spLT5pY3NrX2Fjay5yY3ZfbXNzID0gaGludDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3RjcF9mYXN0X3BhdGhfb24oc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNuZF93bmQpCitzdGF0aWMgaW5saW5lIHZvaWQgX190Y3BfZmFzdF9wYXRoX29uKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzbmRfd25kKQogewogCXRwLT5wcmVkX2ZsYWdzID0gaHRvbmwoKHRwLT50Y3BfaGVhZGVyX2xlbiA8PCAyNikgfAogCQkJICAgICAgIG50b2hsKFRDUF9GTEFHX0FDSykgfAogCQkJICAgICAgIHNuZF93bmQpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9mYXN0X3BhdGhfb24oc3RydWN0IHRjcF9zb2NrICp0cCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZmFzdF9wYXRoX29uKHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7CiAJX190Y3BfZmFzdF9wYXRoX29uKHRwLCB0cC0+c25kX3duZCA+PiB0cC0+cnhfb3B0LnNuZF93c2NhbGUpOwogfQpAQCAtNTM1LDcgKzQ3Miw3IEBACiAgKiBSY3Zfbnh0IGNhbiBiZSBhZnRlciB0aGUgd2luZG93IGlmIG91ciBwZWVyIHB1c2ggbW9yZSBkYXRhCiAgKiB0aGFuIHRoZSBvZmZlcmVkIHdpbmRvdy4KICAqLwotc3RhdGljIF9faW5saW5lX18gdTMyIHRjcF9yZWNlaXZlX3dpbmRvdyhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQorc3RhdGljIGlubGluZSB1MzIgdGNwX3JlY2VpdmVfd2luZG93KGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7CiAJczMyIHdpbiA9IHRwLT5yY3Zfd3VwICsgdHAtPnJjdl93bmQgLSB0cC0+cmN2X254dDsKIApAQCAtNzA3LDYgKzY0NCw3IEBACiBleHRlcm4gaW50IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2woY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCB0Y3BfZ2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKm5hbWUpOwogZXh0ZXJuIGludCB0Y3Bfc2V0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgdGNwX3Nsb3dfc3RhcnQoc3RydWN0IHRjcF9zb2NrICp0cCk7CiAKIGV4dGVybiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9pbml0X2Nvbmdlc3Rpb25fb3BzOwogZXh0ZXJuIHUzMiB0Y3BfcmVub19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spOwpAQCAtNzQ2LDcgKzY4NCw3IEBACiAgKgkiUGFja2V0cyBsZWZ0IG5ldHdvcmssIGJ1dCBub3QgaG9uZXN0bHkgQUNLZWQgeWV0IiBQTFVTCiAgKgkiUGFja2V0cyBmYXN0IHJldHJhbnNtaXR0ZWQiCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCB0Y3BfcGFja2V0c19pbl9mbGlnaHQoY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRjcF9wYWNrZXRzX2luX2ZsaWdodChjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQogewogCXJldHVybiAodHAtPnBhY2tldHNfb3V0IC0gdHAtPmxlZnRfb3V0ICsgdHAtPnJldHJhbnNfb3V0KTsKIH0KQEAgLTc2NiwzMyArNzA0LDYgQEAKIAkJCSAgICAodHAtPnNuZF9jd25kID4+IDIpKSk7CiB9CiAKLS8qCi0gKiBMaW5lYXIgaW5jcmVhc2UgZHVyaW5nIHNsb3cgc3RhcnQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRjcF9zbG93X3N0YXJ0KHN0cnVjdCB0Y3Bfc29jayAqdHApCi17Ci0JaWYgKHN5c2N0bF90Y3BfYWJjKSB7Ci0JCS8qIFJGQzM0NjU6IFNsb3cgU3RhcnQKLQkJICogVENQIHNlbmRlciBTSE9VTEQgaW5jcmVhc2UgY3duZCBieSB0aGUgbnVtYmVyIG9mCi0JCSAqIHByZXZpb3VzbHkgdW5hY2tub3dsZWRnZWQgYnl0ZXMgQUNLZWQgYnkgZWFjaCBpbmNvbWluZwotCQkgKiBhY2tub3dsZWRnbWVudCwgcHJvdmlkZWQgdGhlIGluY3JlYXNlIGlzIG5vdCBtb3JlIHRoYW4gTAotCQkgKi8KLQkJaWYgKHRwLT5ieXRlc19hY2tlZCA8IHRwLT5tc3NfY2FjaGUpCi0JCQlyZXR1cm47Ci0KLQkJLyogV2UgTUFZIGluY3JlYXNlIGJ5IDIgaWYgZGlzY292ZXJlZCBkZWxheWVkIGFjayAqLwotCQlpZiAoc3lzY3RsX3RjcF9hYmMgPiAxICYmIHRwLT5ieXRlc19hY2tlZCA+IDIqdHAtPm1zc19jYWNoZSkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJfQotCX0KLQl0cC0+Ynl0ZXNfYWNrZWQgPSAwOwotCi0JaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJdHAtPnNuZF9jd25kKys7Ci19Ci0KLQogc3RhdGljIGlubGluZSB2b2lkIHRjcF9zeW5jX2xlZnRfb3V0KHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7CiAJaWYgKHRwLT5yeF9vcHQuc2Fja19vayAmJgpAQCAtODAxLDM0ICs3MTIsNyBAQAogCXRwLT5sZWZ0X291dCA9IHRwLT5zYWNrZWRfb3V0ICsgdHAtPmxvc3Rfb3V0OwogfQogCi0vKiBTZXQgc2xvdyBzdGFydCB0aHJlc2hvbGQgYW5kIGN3bmQgbm90IGZhbGxpbmcgdG8gc2xvdyBzdGFydCAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fdGNwX2VudGVyX2N3cihzdHJ1Y3Qgc29jayAqc2spCi17Ci0JY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCi0JdHAtPnVuZG9fbWFya2VyID0gMDsKLQl0cC0+c25kX3NzdGhyZXNoID0gaWNzay0+aWNza19jYV9vcHMtPnNzdGhyZXNoKHNrKTsKLQl0cC0+c25kX2N3bmQgPSBtaW4odHAtPnNuZF9jd25kLAotCQkJICAgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSArIDFVKTsKLQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQl0cC0+aGlnaF9zZXEgPSB0cC0+c25kX254dDsKLQl0cC0+c25kX2N3bmRfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcDsKLQlUQ1BfRUNOX3F1ZXVlX2N3cih0cCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZW50ZXJfY3dyKHN0cnVjdCBzb2NrICpzaykKLXsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQotCXRwLT5wcmlvcl9zc3RocmVzaCA9IDA7Ci0JdHAtPmJ5dGVzX2Fja2VkID0gMDsKLQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2NhX3N0YXRlIDwgVENQX0NBX0NXUikgewotCQlfX3RjcF9lbnRlcl9jd3Ioc2spOwotCQl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfQ1dSKTsKLQl9Ci19Ci0KK2V4dGVybiB2b2lkIHRjcF9lbnRlcl9jd3Ioc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBfX3UzMiB0Y3BfaW5pdF9jd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CiAKIC8qIFNsb3cgc3RhcnQgd2l0aCBkZWxhY2sgcHJvZHVjZXMgMyBwYWNrZXRzIG9mIGJ1cnN0LCBzbyB0aGF0CkBAIC04NjAsMTQgKzc0NCwxNCBAQAogCQlyZXR1cm4gbGVmdCA8PSB0Y3BfbWF4X2J1cnN0KHRwKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfbWluc2hhbGxfdXBkYXRlKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBtc3MsIAotCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9taW5zaGFsbF91cGRhdGUoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IG1zcywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoc2tiLT5sZW4gPCBtc3MpCiAJCXRwLT5zbmRfc21sID0gVENQX1NLQl9DQihza2IpLT5lbmRfc2VxOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9jaGVja19wcm9iZV90aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHApCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NoZWNrX3Byb2JlX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJaWYgKCF0cC0+cGFja2V0c19vdXQgJiYgIWljc2stPmljc2tfcGVuZGluZykKQEAgLTg3NSwxOCArNzU5LDE4IEBACiAJCQkJCSAgaWNzay0+aWNza19ydG8sIFRDUF9SVE9fTUFYKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgICBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB0cCwgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSwgdHAtPm5vbmFnbGUpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9pbml0X3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBhY2ssIHUzMiBzZXEpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2luaXRfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIGFjaywgdTMyIHNlcSkKIHsKIAl0cC0+c25kX3dsMSA9IHNlcTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfdXBkYXRlX3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBhY2ssIHUzMiBzZXEpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3VwZGF0ZV93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrLCB1MzIgc2VxKQogewogCXRwLT5zbmRfd2wxID0gc2VxOwogfQpAQCAtODk0LDE5ICs3NzgsMTkgQEAKIC8qCiAgKiBDYWxjdWxhdGUoL2NoZWNrKSBUQ1AgY2hlY2tzdW0KICAqLwotc3RhdGljIF9faW5saW5lX18gdTE2IHRjcF92NF9jaGVjayhzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCAKLQkJCQkgICB1bnNpZ25lZCBsb25nIGJhc2UpCitzdGF0aWMgaW5saW5lIHUxNiB0Y3BfdjRfY2hlY2soc3RydWN0IHRjcGhkciAqdGgsIGludCBsZW4sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlKQogewogCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYyhzYWRkcixkYWRkcixsZW4sSVBQUk9UT19UQ1AsYmFzZSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBfX3RjcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBpbnQgX190Y3BfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IHRjcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBpbnQgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCiAJCV9fdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CkBAIC05MTQsNyArNzk4LDcgQEAKIAogLyogUHJlcXVldWUgZm9yIFZKIHN0eWxlIGNvcHkgdG8gdXNlciwgY29tYmluZWQgd2l0aCBjaGVja3N1bW1pbmcuICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX3ByZXF1ZXVlX2luaXQoc3RydWN0IHRjcF9zb2NrICp0cCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfcHJlcXVldWVfaW5pdChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQogewogCXRwLT51Y29weS50YXNrID0gTlVMTDsKIAl0cC0+dWNvcHkubGVuID0gMDsKQEAgLTkzMCw3ICs4MTQsNyBAQAogICoKICAqIE5PVEU6IGlzIHRoaXMgbm90IHRvbyBiaWcgdG8gaW5saW5lPwogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX3ByZXF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9wcmVxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKQEAgLTk3MSw3ICs4NTUsNyBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSkKIHsKIAlpbnQgb2xkc3RhdGUgPSBzay0+c2tfc3RhdGU7CiAKQEAgLTEwMDUsNyArODg5LDcgQEAKICNlbmRpZgkKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKQogewogCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7CiAJdGNwX2NsZWFyX3htaXRfdGltZXJzKHNrKTsKQEAgLTEwMTgsODEgKzkwMiwxMyBAQAogCQlpbmV0X2Nza19kZXN0cm95X3NvY2soc2spOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9zYWNrX3Jlc2V0KHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0KQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9zYWNrX3Jlc2V0KHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0KQogewogCXJ4X29wdC0+ZHNhY2sgPSAwOwogCXJ4X29wdC0+ZWZmX3NhY2tzID0gMDsKIAlyeF9vcHQtPm51bV9zYWNrcyA9IDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX2J1aWxkX2FuZF91cGRhdGVfb3B0aW9ucyhfX3UzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBfX3UzMiB0c3RhbXApCi17Ci0JaWYgKHRwLT5yeF9vcHQudHN0YW1wX29rKSB7Ci0JCSpwdHIrKyA9IF9fY29uc3RhbnRfaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKLQkJCQkJICAoVENQT1BUX05PUCA8PCAxNikgfAotCQkJCQkgIChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpIHwKLQkJCQkJICBUQ1BPTEVOX1RJTUVTVEFNUCk7Ci0JCSpwdHIrKyA9IGh0b25sKHRzdGFtcCk7Ci0JCSpwdHIrKyA9IGh0b25sKHRwLT5yeF9vcHQudHNfcmVjZW50KTsKLQl9Ci0JaWYgKHRwLT5yeF9vcHQuZWZmX3NhY2tzKSB7Ci0JCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayAqc3AgPSB0cC0+cnhfb3B0LmRzYWNrID8gdHAtPmR1cGxpY2F0ZV9zYWNrIDogdHAtPnNlbGVjdGl2ZV9hY2tzOwotCQlpbnQgdGhpc19zYWNrOwotCi0JCSpwdHIrKyA9IF9fY29uc3RhbnRfaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKLQkJCQkJICAoVENQT1BUX05PUCA8PCAxNikgfAotCQkJCQkgIChUQ1BPUFRfU0FDSyA8PCA4KSB8Ci0JCQkJCSAgKFRDUE9MRU5fU0FDS19CQVNFICsKLQkJCQkJICAgKHRwLT5yeF9vcHQuZWZmX3NhY2tzICogVENQT0xFTl9TQUNLX1BFUkJMT0NLKSkpOwotCQlmb3IodGhpc19zYWNrID0gMDsgdGhpc19zYWNrIDwgdHAtPnJ4X29wdC5lZmZfc2Fja3M7IHRoaXNfc2FjaysrKSB7Ci0JCQkqcHRyKysgPSBodG9ubChzcFt0aGlzX3NhY2tdLnN0YXJ0X3NlcSk7Ci0JCQkqcHRyKysgPSBodG9ubChzcFt0aGlzX3NhY2tdLmVuZF9zZXEpOwotCQl9Ci0JCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzLS07Ci0JCX0KLQl9Ci19Ci0KLS8qIENvbnN0cnVjdCBhIHRjcCBvcHRpb25zIGhlYWRlciBmb3IgYSBTWU4gb3IgU1lOX0FDSyBwYWNrZXQuCi0gKiBJZiB0aGlzIGlzIGV2ZXJ5IGNoYW5nZWQgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZgotICogTUFYX1NZTl9TSVpFIHRvIG1hdGNoIHRoZSBuZXcgbWF4aW11bSBudW1iZXIgb2Ygb3B0aW9ucyB0aGF0IHlvdQotICogY2FuIGdlbmVyYXRlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3N5bl9idWlsZF9vcHRpb25zKF9fdTMyICpwdHIsIGludCBtc3MsIGludCB0cywgaW50IHNhY2ssCi0JCQkJCSAgICAgaW50IG9mZmVyX3dzY2FsZSwgaW50IHdzY2FsZSwgX191MzIgdHN0YW1wLCBfX3UzMiB0c19yZWNlbnQpCi17Ci0JLyogV2UgYWx3YXlzIGdldCBhbiBNU1Mgb3B0aW9uLgotCSAqIFRoZSBvcHRpb24gYnl0ZXMgd2hpY2ggd2lsbCBiZSBzZWVuIGluIG5vcm1hbCBkYXRhCi0JICogcGFja2V0cyBzaG91bGQgdGltZXN0YW1wcyBiZSB1c2VkLCBtdXN0IGJlIGluIHRoZSBNU1MKLQkgKiBhZHZlcnRpc2VkLiAgQnV0IHdlIHN1YnRyYWN0IHRoZW0gZnJvbSB0cC0+bXNzX2NhY2hlIHNvCi0JICogdGhhdCBjYWxjdWxhdGlvbnMgaW4gdGNwX3NlbmRtc2cgYXJlIHNpbXBsZXIgZXRjLgotCSAqIFNvIGFjY291bnQgZm9yIHRoaXMgZmFjdCBoZXJlIGlmIG5lY2Vzc2FyeS4gIElmIHdlCi0JICogZG9uJ3QgZG8gdGhpcyBjb3JyZWN0bHksIGFzIGEgcmVjZWl2ZXIgd2Ugd29uJ3QKLQkgKiByZWNvZ25pemUgZGF0YSBwYWNrZXRzIGFzIGJlaW5nIGZ1bGwgc2l6ZWQgd2hlbiB3ZQotCSAqIHNob3VsZCwgYW5kIHRodXMgd2Ugd29uJ3QgYWJpZGUgYnkgdGhlIGRlbGF5ZWQgQUNLCi0JICogcnVsZXMgY29ycmVjdGx5LgotCSAqIFNBQ0tzIGRvbid0IG1hdHRlciwgd2UgbmV2ZXIgZGVsYXkgYW4gQUNLIHdoZW4gd2UKLQkgKiBoYXZlIGFueSBvZiB0aG9zZSBnb2luZyBvdXQuCi0JICovCi0JKnB0cisrID0gaHRvbmwoKFRDUE9QVF9NU1MgPDwgMjQpIHwgKFRDUE9MRU5fTVNTIDw8IDE2KSB8IG1zcyk7Ci0JaWYgKHRzKSB7Ci0JCWlmKHNhY2spCi0JCQkqcHRyKysgPSBfX2NvbnN0YW50X2h0b25sKChUQ1BPUFRfU0FDS19QRVJNIDw8IDI0KSB8IChUQ1BPTEVOX1NBQ0tfUEVSTSA8PCAxNikgfAotCQkJCQkJICAoVENQT1BUX1RJTUVTVEFNUCA8PCA4KSB8IFRDUE9MRU5fVElNRVNUQU1QKTsKLQkJZWxzZQotCQkJKnB0cisrID0gX19jb25zdGFudF9odG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfCAoVENQT1BUX05PUCA8PCAxNikgfAotCQkJCQkJICAoVENQT1BUX1RJTUVTVEFNUCA8PCA4KSB8IFRDUE9MRU5fVElNRVNUQU1QKTsKLQkJKnB0cisrID0gaHRvbmwodHN0YW1wKTsJCS8qIFRTVkFMICovCi0JCSpwdHIrKyA9IGh0b25sKHRzX3JlY2VudCk7CS8qIFRTRUNSICovCi0JfSBlbHNlIGlmKHNhY2spCi0JCSpwdHIrKyA9IF9fY29uc3RhbnRfaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwgKFRDUE9QVF9OT1AgPDwgMTYpIHwKLQkJCQkJICAoVENQT1BUX1NBQ0tfUEVSTSA8PCA4KSB8IFRDUE9MRU5fU0FDS19QRVJNKTsKLQlpZiAob2ZmZXJfd3NjYWxlKQotCQkqcHRyKysgPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfCAoVENQT1BUX1dJTkRPVyA8PCAxNikgfCAoVENQT0xFTl9XSU5ET1cgPDwgOCkgfCAod3NjYWxlKSk7Ci19Ci0KIC8qIERldGVybWluZSBhIHdpbmRvdyBzY2FsaW5nIGFuZCBpbml0aWFsIHdpbmRvdyB0byBvZmZlci4gKi8KIGV4dGVybiB2b2lkIHRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3coaW50IF9fc3BhY2UsIF9fdTMyIG1zcywKIAkJCQkgICAgICBfX3UzMiAqcmN2X3duZCwgX191MzIgKndpbmRvd19jbGFtcCwKQEAgLTExMTcsOSArOTMzLDkgQEAKIAlyZXR1cm4gdGNwX3dpbl9mcm9tX3NwYWNlKHNrLT5za19yY3ZidWYpOyAKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3Bfb3BlbnJlcV9pbml0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkJc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsCi0JCQkJCXN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX29wZW5yZXFfaW5pdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcF9zdGF0ZXMuaCBiL2luY2x1ZGUvbmV0L3RjcF9zdGF0ZXMuaAppbmRleCBiOWQ0MTc2Li5iMGI2NDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3Bfc3RhdGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwX3N0YXRlcy5oCkBAIC0zMSw0ICszMSwyMCBAQAogCiAjZGVmaW5lIFRDUF9TVEFURV9NQVNLCTB4RgogCisjZGVmaW5lIFRDUF9BQ1RJT05fRklOCSgxIDw8IDcpCisKK2VudW0geworCVRDUEZfRVNUQUJMSVNIRUQgPSAoMSA8PCAxKSwKKwlUQ1BGX1NZTl9TRU5UCSA9ICgxIDw8IDIpLAorCVRDUEZfU1lOX1JFQ1YJID0gKDEgPDwgMyksCisJVENQRl9GSU5fV0FJVDEJID0gKDEgPDwgNCksCisJVENQRl9GSU5fV0FJVDIJID0gKDEgPDwgNSksCisJVENQRl9USU1FX1dBSVQJID0gKDEgPDwgNiksCisJVENQRl9DTE9TRQkgPSAoMSA8PCA3KSwKKwlUQ1BGX0NMT1NFX1dBSVQJID0gKDEgPDwgOCksCisJVENQRl9MQVNUX0FDSwkgPSAoMSA8PCA5KSwKKwlUQ1BGX0xJU1RFTgkgPSAoMSA8PCAxMCksCisJVENQRl9DTE9TSU5HCSA9ICgxIDw8IDExKSAKK307CisKICNlbmRpZgkvKiBfTElOVVhfVENQX1NUQVRFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90aW1ld2FpdF9zb2NrLmggYi9pbmNsdWRlL25ldC90aW1ld2FpdF9zb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0NDI4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L3RpbWV3YWl0X3NvY2suaApAQCAtMCwwICsxLDMxIEBACisvKgorICogTkVUCQlHZW5lcmljIGluZnJhc3RydWN0dXJlIGZvciBOZXR3b3JrIHByb3RvY29scy4KKyAqCisgKiBBdXRob3JzOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfVElNRVdBSVRfU09DS19ICisjZGVmaW5lIF9USU1FV0FJVF9TT0NLX0gKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCitzdHJ1Y3QgdGltZXdhaXRfc29ja19vcHMgeworCWttZW1fY2FjaGVfdAkqdHdza19zbGFiOworCXVuc2lnbmVkIGludAl0d3NrX29ial9zaXplOworCWludAkJKCp0d3NrX3VuaXF1ZSkoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgICBzdHJ1Y3Qgc29jayAqc2t0dywgdm9pZCAqdHdwKTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHR3c2tfdW5pcXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNrdHcsIHZvaWQgKnR3cCkKK3sKKwlpZiAoc2stPnNrX3Byb3QtPnR3c2tfcHJvdC0+dHdza191bmlxdWUgIT0gTlVMTCkKKwkJcmV0dXJuIHNrLT5za19wcm90LT50d3NrX3Byb3QtPnR3c2tfdW5pcXVlKHNrLCBza3R3LCB0d3ApOworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX1RJTUVXQUlUX1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmggYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAppbmRleCA0ZTg2ZjJkLi42MWY3MjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAorKysgYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaApAQCAtNDQsNyArNDQsNyBAQAogLyoKICAqCWFkZHJlc3MgZmFtaWx5IHNwZWNpZmljIGZ1bmN0aW9ucwogICovCi1leHRlcm4gc3RydWN0IHRjcF9mdW5jCWlwdjRfc3BlY2lmaWM7CitleHRlcm4gc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY0X3NwZWNpZmljOwogCiBleHRlcm4gaW50IGluZXQ2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC91ZHAuaCBiL2luY2x1ZGUvbmV0L3VkcC5oCmluZGV4IDEwN2I5ZDcuLjc2NmZiYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3VkcC5oCisrKyBiL2luY2x1ZGUvbmV0L3VkcC5oCkBAIC0yMiw5ICsyMiw4IEBACiAjaWZuZGVmIF9VRFBfSAogI2RlZmluZSBfVURQX0gKIAotI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9zbm1wLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTYyLDYgKzYxLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBwcm90byB1ZHBfcHJvdDsKIAorc3RydWN0IHNrX2J1ZmY7CiAKIGV4dGVybiB2b2lkCXVkcF9lcnIoc3RydWN0IHNrX2J1ZmYgKiwgdTMyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDFjZGI4NzkuLjA3ZDdiNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTIsMTEgKzIsMTIgQEAKICNkZWZpbmUgX05FVF9YRlJNX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC94ZnJtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvcGZrZXl2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpAQCAtMTQ0LDYgKzE0NSw5IEBACiAJICogdHJhbnNmb3JtZXIuICovCiAJc3RydWN0IHhmcm1fdHlwZQkqdHlwZTsKIAorCS8qIFNlY3VyaXR5IGNvbnRleHQgKi8KKwlzdHJ1Y3QgeGZybV9zZWNfY3R4CSpzZWN1cml0eTsKKwogCS8qIFByaXZhdGUgZGF0YSBvZiB0aGlzIHRyYW5zZm9ybWVyLCBmb3JtYXQgaXMgb3BhcXVlLAogCSAqIGludGVycHJldGVkIGJ5IHhmcm1fdHlwZSBtZXRob2RzLiAqLwogCXZvaWQJCQkqZGF0YTsKQEAgLTI5OCw2ICszMDIsNyBAQAogCV9fdTgJCQlmbGFnczsKIAlfX3U4CQkJZGVhZDsKIAlfX3U4CQkJeGZybV9ucjsKKwlzdHJ1Y3QgeGZybV9zZWNfY3R4CSpzZWN1cml0eTsKIAlzdHJ1Y3QgeGZybV90bXBsICAgICAgIAl4ZnJtX3ZlY1tYRlJNX01BWF9ERVBUSF07CiB9OwogCkBAIC01MTAsNiArNTE1LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNCisvKglJZiBuZWl0aGVyIGhhcyBhIGNvbnRleHQgLS0+IG1hdGNoCisgKiAJT3RoZXJ3aXNlLCBib3RoIG11c3QgaGF2ZSBhIGNvbnRleHQgYW5kIHRoZSBzaWRzLCBkb2ksIGFsZyBtdXN0IG1hdGNoCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHhmcm1fc2VjX2N0eF9tYXRjaChzdHJ1Y3QgeGZybV9zZWNfY3R4ICpzMSwgc3RydWN0IHhmcm1fc2VjX2N0eCAqczIpCit7CisJcmV0dXJuICgoIXMxICYmICFzMikgfHwKKwkJKHMxICYmIHMyICYmCisJCSAoczEtPmN0eF9zaWQgPT0gczItPmN0eF9zaWQpICYmCisJCSAoczEtPmN0eF9kb2kgPT0gczItPmN0eF9kb2kpICYmCisJCSAoczEtPmN0eF9hbGcgPT0gczItPmN0eF9hbGcpKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgeGZybV9zZWNfY3R4X21hdGNoKHN0cnVjdCB4ZnJtX3NlY19jdHggKnMxLCBzdHJ1Y3QgeGZybV9zZWNfY3R4ICpzMikKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCiAvKiBBIHN0cnVjdCBlbmNvZGluZyBidW5kbGUgb2YgdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHNvbWUgc2V0IG9mIGZsb3cuCiAgKgogICogZHN0LT5jaGlsZCBwb2ludHMgdG8gdGhlIG5leHQgZWxlbWVudCBvZiBidW5kbGUuCkBAIC04NzgsOCArOTAyLDggQEAKIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYWxsb2MoZ2ZwX3QgZ2ZwKTsKIGV4dGVybiBpbnQgeGZybV9wb2xpY3lfd2FsayhpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9wb2xpY3kgKiwgaW50LCBpbnQsIHZvaWQqKSwgdm9pZCAqKTsKIGludCB4ZnJtX3BvbGljeV9pbnNlcnQoaW50IGRpciwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksIGludCBleGNsKTsKLXN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlzZWwoaW50IGRpciwgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwKLQkJCQkgICAgICBpbnQgZGVsZXRlKTsKK3N0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlzZWxfY3R4KGludCBkaXIsIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsCisJCQkJCSAgc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4LCBpbnQgZGVsZXRlKTsKIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlpZChpbnQgZGlyLCB1MzIgaWQsIGludCBkZWxldGUpOwogdm9pZCB4ZnJtX3BvbGljeV9mbHVzaCh2b2lkKTsKIHUzMiB4ZnJtX2dldF9hY3FzZXEodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKaW5kZXggMjBkYTI4Mi4uNDFjZmMyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaApAQCAtMTUxLDYgKzE1MSw2IEBACiBleHRlcm4gdm9pZCBzY3NpX3B1dF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKik7CiBleHRlcm4gdm9pZCBzY3NpX2lvX2NvbXBsZXRpb24oc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBzY3NpX2ZpbmlzaF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7Ci1leHRlcm4gdm9pZCBzY3NpX3NldHVwX2Jsa19wY19jbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHJldHJpZXMpOworZXh0ZXJuIHZvaWQgc2NzaV9zZXR1cF9ibGtfcGNfY21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiAjZW5kaWYgLyogX1NDU0lfU0NTSV9DTU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RiZy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKaW5kZXggYjA5MGExMS4uNGQ2OWRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKQEAgLTE2LDcgKzE2LDYgQEAKIGV4dGVybiB2b2lkIHNjc2lfcHJpbnRfZHJpdmVyYnl0ZShpbnQpOwogZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9ob3N0Ynl0ZShpbnQpOwogZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zdGF0dXModW5zaWduZWQgY2hhcik7Ci1leHRlcm4gaW50IHNjc2lfcHJpbnRfbXNnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CiBleHRlcm4gY29uc3QgY2hhciAqc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHVuc2lnbmVkIGNoYXIpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggODVjZmQ4OC4uZTk0Y2E0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTc5LDkgKzc5LDkgQEAKIAljaGFyIGlucV9wZXJpcGhfcXVhbDsJLyogUFEgZnJvbSBJTlFVSVJZIGRhdGEgKi8JCiAJdW5zaWduZWQgY2hhciBpbnF1aXJ5X2xlbjsJLyogdmFsaWQgYnl0ZXMgaW4gJ2lucXVpcnknICovCiAJdW5zaWduZWQgY2hhciAqIGlucXVpcnk7CS8qIElOUVVJUlkgcmVzcG9uc2UgZGF0YSAqLwotCWNoYXIgKiB2ZW5kb3I7CQkvKiBbYmFja19jb21wYXRdIHBvaW50IGludG8gJ2lucXVpcnknIC4uLiAqLwotCWNoYXIgKiBtb2RlbDsJCS8qIC4uLiBhZnRlciBzY2FuOyBwb2ludCB0byBzdGF0aWMgc3RyaW5nICovCi0JY2hhciAqIHJldjsJCS8qIC4uLiAibnVsbG51bGxudWxsbnVsbCIgYmVmb3JlIHNjYW4gKi8KKwljb25zdCBjaGFyICogdmVuZG9yOwkJLyogW2JhY2tfY29tcGF0XSBwb2ludCBpbnRvICdpbnF1aXJ5JyAuLi4gKi8KKwljb25zdCBjaGFyICogbW9kZWw7CQkvKiAuLi4gYWZ0ZXIgc2NhbjsgcG9pbnQgdG8gc3RhdGljIHN0cmluZyAqLworCWNvbnN0IGNoYXIgKiByZXY7CQkvKiAuLi4gIm51bGxudWxsbnVsbG51bGwiIGJlZm9yZSBzY2FuICovCiAJdW5zaWduZWQgY2hhciBjdXJyZW50X3RhZzsJLyogY3VycmVudCB0YWcgKi8KIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgICAgICAqc2Rldl90YXJnZXQ7ICAgLyogdXNlZCBvbmx5IGZvciBzaW5nbGVfbHVuICovCiAKQEAgLTI3NCw2ICsyNzQsMTIgQEAKIGV4dGVybiBpbnQgc2NzaV9leGVjdXRlX3JlcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNtZCwKIAkJCSAgICBpbnQgZGF0YV9kaXJlY3Rpb24sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbiwKIAkJCSAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKiwgaW50IHRpbWVvdXQsIGludCByZXRyaWVzKTsKK2V4dGVybiBpbnQgc2NzaV9leGVjdXRlX2FzeW5jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNtZCwgaW50IGRhdGFfZGlyZWN0aW9uLAorCQkJICAgICAgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBidWZmbGVuLCBpbnQgdXNlX3NnLAorCQkJICAgICAgaW50IHRpbWVvdXQsIGludCByZXRyaWVzLCB2b2lkICpwcml2ZGF0YSwKKwkJCSAgICAgIHZvaWQgKCpkb25lKSh2b2lkICosIGNoYXIgKiwgaW50LCBpbnQpLAorCQkJICAgICAgZ2ZwX3QgZ2ZwKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2Rldl9jaGFubmVsKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaAppbmRleCA2YmRjNGFmLi41NGE4OTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCkBAIC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSA8bGludXgvdHJhbnNwb3J0X2NsYXNzLmg+CiAKIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZTsKK3N0cnVjdCBzY3NpX3RhcmdldDsKK3N0cnVjdCBzY3NpX2RldmljZTsKK3N0cnVjdCBTY3NpX0hvc3Q7CiAKIHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzIHsKIAlpbnQgcGVyaW9kOwkJLyogdmFsdWUgaW4gdGhlIFBQUi9TRFRSIGNvbW1hbmQgKi8KQEAgLTE0Myw1ICsxNDYsNiBAQAogdm9pZCBzcGlfc2NoZWR1bGVfZHZfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIHZvaWQgc3BpX2R2X2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CiB2b2lkIHNwaV9kaXNwbGF5X3hmZXJfYWdyZWVtZW50KHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKK2ludCBzcGlfcHJpbnRfbXNnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CiAKICNlbmRpZiAvKiBTQ1NJX1RSQU5TUE9SVF9TUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDlmYzA3NTkuLmFhMjliNzkgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTQ2MSw4ICs0NjEsOCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIE1PRFZFUlNJT05TCi0JYm9vbCAiTW9kdWxlIHZlcnNpb25pbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE1PRFVMRVMgJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiTW9kdWxlIHZlcnNpb25pbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1PRFVMRVMKIAloZWxwCiAJICBVc3VhbGx5LCB5b3UgaGF2ZSB0byB1c2UgbW9kdWxlcyBjb21waWxlZCB3aXRoIHlvdXIga2VybmVsLgogCSAgU2F5aW5nIFkgaGVyZSBtYWtlcyBpdCBzb21ldGltZXMgcG9zc2libGUgdG8gdXNlIG1vZHVsZXMKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggMjdmOTdmOS4uNTRhYWY1NiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgva2V5Lmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CkBAIC02MTQsOSArNjEzLDYgQEAKIAlzeXNjdGxfaW5pdCgpOwogI2VuZGlmCiAKLQkvKiBOZXR3b3JraW5nIGluaXRpYWxpemF0aW9uIG5lZWRzIGEgcHJvY2VzcyBjb250ZXh0ICovIAotCXNvY2tfaW5pdCgpOwotCiAJZG9faW5pdGNhbGxzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC8uZ2l0aWdub3JlIGIva2VybmVsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhYjcwMAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorIworIyBHZW5lcmF0ZWQgZmlsZXMKKyMKK2NvbmZpZ19kYXRhLmgKK2NvbmZpZ19kYXRhLmd6CmRpZmYgLS1naXQgYS9rZXJuZWwvY29uZmlncy5jIGIva2VybmVsL2NvbmZpZ3MuYwppbmRleCA5ODZmN2FmLi4wMDllMWViIDEwMDY0NAotLS0gYS9rZXJuZWwvY29uZmlncy5jCisrKyBiL2tlcm5lbC9jb25maWdzLmMKQEAgLTMsNyArMyw3IEBACiAgKiBFY2hvIHRoZSBrZXJuZWwgLmNvbmZpZyBmaWxlIHVzZWQgdG8gYnVpbGQgdGhlIGtlcm5lbAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiBLaGFsaWQgQXppeiA8a2hhbGlkX2F6aXpAaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJhbmR5IER1bmxhcCA8cmRkdW5sYXBAb3NkbC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmFuZHkgRHVubGFwIDxyZHVubGFwQHhlbm90aW1lLm5ldD4KICAqIENvcHlyaWdodCAoQykgMjAwMiBBbCBTdG9uZSA8YWhzM0BmYy5ocC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKICAqCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCA3OTgyNjU2Li5hNTE0NGU0IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTYzLDcgKzYzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGFsay5oPgogCiBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKmRkcF9kbCwgKmFhcnBfZGw7Ci1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBhdGFsa19kZ3JhbV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBhdGFsa19kZ3JhbV9vcHM7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTE3NjMsNyArMTc2Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYXRhbGtfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JaW50IHJjID0gLUVJTlZBTDsKKwlpbnQgcmMgPSAtRU5PSU9DVExDTUQ7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKQEAgLTE4MTMsMjMgKzE4MTMsNiBAQAogCQkJcmMgPSBhdGlmX2lvY3RsKGNtZCwgYXJncCk7CiAJCQlydG5sX3VubG9jaygpOwogCQkJYnJlYWs7Ci0JCS8qIFBoeXNpY2FsIGxheWVyIGlvY3RsIGNhbGxzICovCi0JCWNhc2UgU0lPQ1NJRkxJTks6Ci0JCWNhc2UgU0lPQ0dJRkhXQUREUjoKLQkJY2FzZSBTSU9DU0lGSFdBRERSOgotCQljYXNlIFNJT0NHSUZGTEFHUzoKLQkJY2FzZSBTSU9DU0lGRkxBR1M6Ci0JCWNhc2UgU0lPQ0dJRlRYUUxFTjoKLQkJY2FzZSBTSU9DU0lGVFhRTEVOOgotCQljYXNlIFNJT0NHSUZNVFU6Ci0JCWNhc2UgU0lPQ0dJRkNPTkY6Ci0JCWNhc2UgU0lPQ0FERE1VTFRJOgotCQljYXNlIFNJT0NERUxNVUxUSToKLQkJY2FzZSBTSU9DR0lGQ09VTlQ6Ci0JCWNhc2UgU0lPQ0dJRklOREVYOgotCQljYXNlIFNJT0NHSUZOQU1FOgotCQkJcmMgPSBkZXZfaW9jdGwoY21kLCBhcmdwKTsKLQkJCWJyZWFrOwogCX0KIAogCXJldHVybiByYzsKQEAgLTE4NDEsNyArMTgyNCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgU09DS09QU19XUkFQUEVEKGF0YWxrX2RncmFtX29wcykgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoYXRhbGtfZGdyYW1fb3BzKSA9IHsKIAkuZmFtaWx5CQk9IFBGX0FQUExFVEFMSywKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBhdGFsa19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wdmMuYyBiL25ldC9hdG0vcHZjLmMKaW5kZXggMjY4NGE5Mi4uZjJjNTQxNyAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wdmMuYworKysgYi9uZXQvYXRtL3B2Yy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBwdmNfcHJvdG9fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHsKIAkuZmFtaWx5ID0JUEZfQVRNUFZDLAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCmRpZmYgLS1naXQgYS9uZXQvYXRtL3N2Yy5jIGIvbmV0L2F0bS9zdmMuYwppbmRleCBkN2IyNjYxLi4zYTE4MGNmIDEwMDY0NAotLS0gYS9uZXQvYXRtL3N2Yy5jCisrKyBiL25ldC9hdG0vc3ZjLmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgc3ZjX3Byb3RvX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN2Y19wcm90b19vcHMgPSB7CiAJLmZhbWlseSA9CVBGX0FUTVNWQywKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDFiNjgzZjMuLmU4NzUzYzcgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTU0LDcgKzU0LDcgQEAKIEhMSVNUX0hFQUQoYXgyNV9saXN0KTsKIERFRklORV9TUElOTE9DSyhheDI1X2xpc3RfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGF4MjVfcHJvdG9fb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgYXgyNV9wcm90b19vcHM7CiAKIHN0YXRpYyB2b2lkIGF4MjVfZnJlZV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTE4MjcsNyArMTgyNyw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmVzID0gZGV2X2lvY3RsKGNtZCwgYXJncCk7CisJCXJlcyA9IC1FTk9JT0NUTENNRDsKIAkJYnJlYWs7CiAJfQogCXJlbGVhc2Vfc29jayhzayk7CkBAIC0xOTQ0LDcgKzE5NDQsNyBAQAogCS5vd25lcgk9CVRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgYXgyNV9wcm90b19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBheDI1X3Byb3RvX29wcyA9IHsKIAkuZmFtaWx5CQk9IFBGX0FYMjUsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlCT0gYXgyNV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKaW5kZXggZWE2MTZlMy4uZmIwMzFmZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYworKysgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCkBAIC0yODcsMTAgKzI4Nyw5IEBACiAJCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7CiAJCWxvY2tfc29jayhzayk7CiAKLQkJaWYgKHNrLT5za19lcnIpIHsKLQkJCWVyciA9IHNvY2tfZXJyb3Ioc2spOworCQllcnIgPSBzb2NrX2Vycm9yKHNrKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwotCQl9CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoc2stPnNrX3NsZWVwLCAmd2FpdCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jIGIvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYwppbmRleCA5Nzc4YzZhLi5jY2JhZjY5IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBibmVwX3NvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgYm5lcF9zb2NrX29wcyA9IHsKIAkuZmFtaWx5ICAgICA9IFBGX0JMVUVUT09USCwKIAkub3duZXIgICAgICA9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlICAgID0gYm5lcF9zb2NrX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jIGIvbmV0L2JsdWV0b290aC9jbXRwL3NvY2suYwppbmRleCBiZWIwNDViLi41ZTIyMzQzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9zb2NrLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBjbXRwX3NvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgY210cF9zb2NrX29wcyA9IHsKIAkuZmFtaWx5CQk9IFBGX0JMVUVUT09USCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBjbXRwX3NvY2tfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwppbmRleCAxZDZkMGExLi44NGU2YzkzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCkBAIC01NzUsNyArNTc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgaGNpX3NvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaGNpX3NvY2tfb3BzID0gewogCS5mYW1pbHkJCT0gUEZfQkxVRVRPT1RILAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVsZWFzZQk9IGhjaV9zb2NrX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jIGIvbmV0L2JsdWV0b290aC9oaWRwL3NvY2suYwppbmRleCBmODk4NmY4Li44ZjhkZDkzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9zb2NrLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBoaWRwX3NvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaGlkcF9zb2NrX29wcyA9IHsKIAkuZmFtaWx5CQk9IFBGX0JMVUVUT09USCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBoaWRwX3NvY2tfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCBlM2JiMTFjLi43ZjA3ODFlIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKICNkZWZpbmUgVkVSU0lPTiAiMi44IgogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGwyY2FwX3NvY2tfb3BzOwogCiBzdGF0aWMgc3RydWN0IGJ0X3NvY2tfbGlzdCBsMmNhcF9za19saXN0ID0gewogCS5sb2NrID0gUldfTE9DS19VTkxPQ0tFRApAQCAtNzY3LDggKzc2Nyw5IEBACiAKIAlCVF9EQkcoInNvY2sgJXAsIHNrICVwIiwgc29jaywgc2spOwogCi0JaWYgKHNrLT5za19lcnIpCi0JCXJldHVybiBzb2NrX2Vycm9yKHNrKTsKKwllcnIgPSBzb2NrX2Vycm9yKHNrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMjE2MCw3ICsyMTYxLDcgQEAKIAogc3RhdGljIENMQVNTX0FUVFIobDJjYXAsIFNfSVJVR08sIGwyY2FwX3N5c2ZzX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGwyY2FwX3NvY2tfb3BzID0gewogCS5mYW1pbHkJCT0gUEZfQkxVRVRPT1RILAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVsZWFzZQk9IGwyY2FwX3NvY2tfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCA2YzM0MjYxLi43NTdkMmRkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHJmY29tbV9zb2NrX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJmY29tbV9zb2NrX29wczsKIAogc3RhdGljIHN0cnVjdCBidF9zb2NrX2xpc3QgcmZjb21tX3NrX2xpc3QgPSB7CiAJLmxvY2sgPSBSV19MT0NLX1VOTE9DS0VECkBAIC05MDcsNyArOTA3LDcgQEAKIAogc3RhdGljIENMQVNTX0FUVFIocmZjb21tLCBTX0lSVUdPLCByZmNvbW1fc29ja19zeXNmc19zaG93LCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgcmZjb21tX3NvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcmZjb21tX3NvY2tfb3BzID0gewogCS5mYW1pbHkJCT0gUEZfQkxVRVRPT1RILAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVsZWFzZQk9IHJmY29tbV9zb2NrX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3Njby5jIGIvbmV0L2JsdWV0b290aC9zY28uYwppbmRleCA5Y2IwMGRjLi42YjYxMzIzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3Njby5jCisrKyBiL25ldC9ibHVldG9vdGgvc2NvLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogI2RlZmluZSBWRVJTSU9OICIwLjUiCiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHNjb19zb2NrX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNjb19zb2NrX29wczsKIAogc3RhdGljIHN0cnVjdCBidF9zb2NrX2xpc3Qgc2NvX3NrX2xpc3QgPSB7CiAJLmxvY2sgPSBSV19MT0NLX1VOTE9DS0VECkBAIC02MzcsOCArNjM3LDkgQEAKIAogCUJUX0RCRygic29jayAlcCwgc2sgJXAiLCBzb2NrLCBzayk7CiAKLQlpZiAoc2stPnNrX2VycikKLQkJcmV0dXJuIHNvY2tfZXJyb3Ioc2spOworCWVyciA9IHNvY2tfZXJyb3Ioc2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC05MTMsNyArOTE0LDcgQEAKIAogc3RhdGljIENMQVNTX0FUVFIoc2NvLCBTX0lSVUdPLCBzY29fc3lzZnNfc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHNjb19zb2NrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNjb19zb2NrX29wcyA9IHsKIAkuZmFtaWx5CQk9IFBGX0JMVUVUT09USCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBzY29fc29ja19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9ici5jIGIvbmV0L2JyaWRnZS9ici5jCmluZGV4IGY4ZjE4NDkuLjE4OGNjMWEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnIuYworKysgYi9uZXQvYnJpZGdlL2JyLmMKQEAgLTY3LDMgKzY3LDQgQEAKIG1vZHVsZV9pbml0KGJyX2luaXQpCiBtb2R1bGVfZXhpdChicl9kZWluaXQpCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihCUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCmluZGV4IGY1NjRlZTkuLjBiMzNhN2IgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwpAQCAtMTUsNyArMTUsOSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKIApAQCAtODIsNiArODQsODcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogQWxsb3cgc2V0dGluZyBtYWMgYWRkcmVzcyBvZiBwc2V1ZG8tYnJpZGdlIHRvIGJlIHNhbWUgYXMKKyAqIGFueSBvZiB0aGUgYm91bmQgaW50ZXJmYWNlcworICovCitzdGF0aWMgaW50IGJyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0OworCWludCBlcnIgPSAtRUFERFJOT1RBVkFJTDsKKworCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmJyLT5wb3J0X2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocG9ydC0+ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSkpIHsKKwkJCWJyX3N0cF9jaGFuZ2VfYnJpZGdlX2lkKGJyLCBhZGRyLT5zYV9kYXRhKTsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYnJfZ2V0aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cmNweShpbmZvLT5kcml2ZXIsICJicmlkZ2UiKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgQlJfVkVSU0lPTik7CisJc3RyY3B5KGluZm8tPmZ3X3ZlcnNpb24sICJOL0EiKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sICJOL0EiKTsKK30KKworc3RhdGljIGludCBicl9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChkYXRhKQorCQlici0+ZmVhdHVyZV9tYXNrIHw9IE5FVElGX0ZfU0c7CisJZWxzZQorCQlici0+ZmVhdHVyZV9tYXNrICY9IH5ORVRJRl9GX1NHOworCisJYnJfZmVhdHVyZXNfcmVjb21wdXRlKGJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoZGF0YSkKKwkJYnItPmZlYXR1cmVfbWFzayB8PSBORVRJRl9GX1RTTzsKKwllbHNlCisJCWJyLT5mZWF0dXJlX21hc2sgJj0gfk5FVElGX0ZfVFNPOworCisJYnJfZmVhdHVyZXNfcmVjb21wdXRlKGJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicl9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGRhdGEpCisJCWJyLT5mZWF0dXJlX21hc2sgfD0gTkVUSUZfRl9JUF9DU1VNOworCWVsc2UKKwkJYnItPmZlYXR1cmVfbWFzayAmPSB+TkVUSUZfRl9JUF9DU1VNOworCisJYnJfZmVhdHVyZXNfcmVjb21wdXRlKGJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBicl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBicl9nZXRpbmZvLAorCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgPSBicl9zZXRfc2csCisJLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gPSBicl9zZXRfdHhfY3N1bSwKKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IGJyX3NldF90c28sCit9OworCiB2b2lkIGJyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW1lbXNldChkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7CkBAIC05Niw4ICsxNzksMTIgQEAKIAlkZXYtPmNoYW5nZV9tdHUgPSBicl9jaGFuZ2VfbXR1OwogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKKyAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmJyX2V0aHRvb2xfb3BzKTsKIAlkZXYtPnN0b3AgPSBicl9kZXZfc3RvcDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBOVUxMOworCWRldi0+c2V0X21hY19hZGRyZXNzID0gYnJfc2V0X21hY19hZGRyZXNzOwogCWRldi0+cHJpdl9mbGFncyA9IElGRl9FQlJJREdFOworCisgCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVAorIAkJfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSVBfQ1NVTTsKIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCA5NzVhYmUyLi4xMTMyMTE5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zMiw5ICszMiw4IEBACiAgKiBldGh0b29sLCB1c2UgZXRodG9vbF9vcHMuICBBbHNvLCBzaW5jZSBkcml2ZXIgbWlnaHQgc2xlZXAgbmVlZCB0bwogICogbm90IGJlIGhvbGRpbmcgYW55IGxvY2tzLgogICovCi1zdGF0aWMgaW50IGJyX2luaXRpYWxfcG9ydF9jb3N0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCiAJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQgPSB7IEVUSFRPT0xfR1NFVCB9OwogCXN0cnVjdCBpZnJlcSBpZnI7CiAJbW1fc2VnbWVudF90IG9sZF9mczsKQEAgLTU4LDEwICs1Nyw2IEBACiAJCQlyZXR1cm4gMjsKIAkJY2FzZSBTUEVFRF8xMDoKIAkJCXJldHVybiAxMDA7Ci0JCWRlZmF1bHQ6Ci0JCQlwcl9pbmZvKCJicmlkZ2U6IGNhbid0IGRlY29kZSBzcGVlZCBmcm9tICVzOiAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIGVjbWQuc3BlZWQpOwotCQkJcmV0dXJuIDEwMDsKIAkJfQogCX0KIApAQCAtNzUsNiArNzAsMzUgQEAKIAlyZXR1cm4gMTAwOwkvKiBhc3N1bWUgb2xkIDEwTWJwcyAqLwogfQogCisKKy8qCisgKiBDaGVjayBmb3IgcG9ydCBjYXJyaWVyIHRyYW5zaXN0aW9ucy4KKyAqIENhbGxlZCBmcm9tIHdvcmsgcXVldWUgdG8gYWxsb3cgZm9yIGNhbGxpbmcgZnVuY3Rpb25zIHRoYXQKKyAqIG1pZ2h0IHNsZWVwIChzdWNoIGFzIHNwZWVkIGNoZWNrKSwgYW5kIHRvIGRlYm91bmNlLgorICovCitzdGF0aWMgdm9pZCBwb3J0X2NhcnJpZXJfY2hlY2sodm9pZCAqYXJnKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBhcmc7CisKKwlydG5sX2xvY2soKTsKKwlpZiAobmV0aWZfY2Fycmllcl9vayhwLT5kZXYpKSB7CisJCXUzMiBjb3N0ID0gcG9ydF9jb3N0KHAtPmRldik7CisKKwkJc3Bpbl9sb2NrX2JoKCZwLT5ici0+bG9jayk7CisJCWlmIChwLT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkgeworCQkJcC0+cGF0aF9jb3N0ID0gY29zdDsKKwkJCWJyX3N0cF9lbmFibGVfcG9ydChwKTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmcC0+YnItPmxvY2spOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19iaCgmcC0+YnItPmxvY2spOworCQlpZiAocC0+c3RhdGUgIT0gQlJfU1RBVEVfRElTQUJMRUQpCisJCQlicl9zdHBfZGlzYWJsZV9wb3J0KHApOworCQlzcGluX3VubG9ja19iaCgmcC0+YnItPmxvY2spOworCX0KKwlydG5sX3VubG9jaygpOworfQorCiBzdGF0aWMgdm9pZCBkZXN0cm95X25icChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwLT5kZXY7CkBAIC0xMDIsNiArMTI2LDkgQEAKIAlkZXYtPmJyX3BvcnQgPSBOVUxMOwogCWRldl9zZXRfcHJvbWlzY3VpdHkoZGV2LCAtMSk7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwLT5jYXJyaWVyX2NoZWNrKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCiAJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7CiAJYnJfc3RwX2Rpc2FibGVfcG9ydChwKTsKIAlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOwpAQCAtMTU1LDYgKzE4Miw3IEBACiAJYnItPmJyaWRnZV9pZC5wcmlvWzFdID0gMHgwMDsKIAltZW1zZXQoYnItPmJyaWRnZV9pZC5hZGRyLCAwLCBFVEhfQUxFTik7CiAKKwlici0+ZmVhdHVyZV9tYXNrID0gZGV2LT5mZWF0dXJlczsKIAlici0+c3RwX2VuYWJsZWQgPSAwOwogCWJyLT5kZXNpZ25hdGVkX3Jvb3QgPSBici0+YnJpZGdlX2lkOwogCWJyLT5yb290X3BhdGhfY29zdCA9IDA7CkBAIC0xOTUsMTAgKzIyMyw5IEBACiAJcmV0dXJuIChpbmRleCA+PSBCUl9NQVhfUE9SVFMpID8gLUVYRlVMTCA6IGluZGV4OwogfQogCi0vKiBjYWxsZWQgd2l0aCBSVE5MICovCisvKiBjYWxsZWQgd2l0aCBSVE5MIGJ1dCB3aXRob3V0IGJyaWRnZSBsb2NrICovCiBzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbmV3X25icChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIAotCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvc3QpCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGluZGV4OwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CkBAIC0yMTUsMTIgKzI0MiwxMyBAQAogCXAtPmJyID0gYnI7CiAJZGV2X2hvbGQoZGV2KTsKIAlwLT5kZXYgPSBkZXY7Ci0JcC0+cGF0aF9jb3N0ID0gY29zdDsKKwlwLT5wYXRoX2Nvc3QgPSBwb3J0X2Nvc3QoZGV2KTsKICAJcC0+cHJpb3JpdHkgPSAweDgwMDAgPj4gQlJfUE9SVF9CSVRTOwogCWRldi0+YnJfcG9ydCA9IHA7CiAJcC0+cG9ydF9ubyA9IGluZGV4OwogCWJyX2luaXRfcG9ydChwKTsKIAlwLT5zdGF0ZSA9IEJSX1NUQVRFX0RJU0FCTEVEOworCUlOSVRfV09SSygmcC0+Y2Fycmllcl9jaGVjaywgcG9ydF9jYXJyaWVyX2NoZWNrLCBwKTsKIAlrb2JqZWN0X2luaXQoJnAtPmtvYmopOwogCiAJcmV0dXJuIHA7CkBAIC0zMjIsOSArMzUwLDggQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwogCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMsIGNoZWNrc3VtOwogCi0JZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCAKLQkJfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX1RTTzsKLQljaGVja3N1bSA9IE5FVElGX0ZfSVBfQ1NVTTsJLyogbGVhc3QgY29tbW1vbiBzdWJzZXQgKi8KKwlmZWF0dXJlcyA9IGJyLT5mZWF0dXJlX21hc2sgJn4gTkVUSUZfRl9JUF9DU1VNOworCWNoZWNrc3VtID0gYnItPmZlYXR1cmVfbWFzayAmIE5FVElGX0ZfSVBfQ1NVTTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmJyLT5wb3J0X2xpc3QsIGxpc3QpIHsKIAkJaWYgKCEocC0+ZGV2LT5mZWF0dXJlcyAKQEAgLTM1MSw3ICszNzgsNyBAQAogCWlmIChkZXYtPmJyX3BvcnQgIT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChJU19FUlIocCA9IG5ld19uYnAoYnIsIGRldiwgYnJfaW5pdGlhbF9wb3J0X2Nvc3QoZGV2KSkpKQorCWlmIChJU19FUlIocCA9IG5ld19uYnAoYnIsIGRldikpKQogCQlyZXR1cm4gUFRSX0VSUihwKTsKIAogIAlpZiAoKGVyciA9IGJyX2ZkYl9pbnNlcnQoYnIsIHAsIGRldi0+ZGV2X2FkZHIpKSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCBiODgyMjBhLi5jMzg3ODUyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC01Myw2ICs1MywxMSBAQAogCS8qIGluc2VydCBpbnRvIGZvcndhcmRpbmcgZGF0YWJhc2UgYWZ0ZXIgZmlsdGVyaW5nIHRvIGF2b2lkIHNwb29maW5nICovCiAJYnJfZmRiX3VwZGF0ZShwLT5iciwgcCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSk7CiAKKwlpZiAocC0+c3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChici0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IyOwogCkBAIC0xMDcsOSArMTEyLDYgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX3NvdXJjZSkpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHAtPnN0YXRlID09IEJSX1NUQVRFX0xFQVJOSU5HKQotCQlicl9mZGJfdXBkYXRlKHAtPmJyLCBwLCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKLQogCWlmIChwLT5ici0+c3RwX2VuYWJsZWQgJiYKIAkgICAgIW1lbWNtcChkZXN0LCBicmlkZ2VfdWxhLCA1KSAmJgogCSAgICAhKGRlc3RbNV0gJiAweEYwKSkgewpAQCAtMTE4LDkgKzEyMCwxMCBAQAogCQkJCU5VTEwsIGJyX3N0cF9oYW5kbGVfYnBkdSk7CiAJCQlyZXR1cm4gMTsKIAkJfQorCQlnb3RvIGVycjsKIAl9CiAKLQllbHNlIGlmIChwLT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HKSB7CisJaWYgKHAtPnN0YXRlID09IEJSX1NUQVRFX0ZPUldBUkRJTkcgfHwgcC0+c3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHsKIAkJaWYgKGJyX3Nob3VsZF9yb3V0ZV9ob29rKSB7CiAJCQlpZiAoYnJfc2hvdWxkX3JvdXRlX2hvb2socHNrYikpIAogCQkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggMjM0MjJiZC4uMjIzZjgyNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg+CkBAIC0zMyw4ICszNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2luX3JvdXRlLmg+CisKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlICJicl9wcml2YXRlLmgiCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jIGIvbmV0L2JyaWRnZS9icl9ub3RpZnkuYwppbmRleCA5MTczMTFjLi5hNDNhOWMxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCisrKyBiL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKQEAgLTUyLDE3ICs1Miw5IEBACiAJCWJyX3N0cF9yZWNhbGN1bGF0ZV9icmlkZ2VfaWQoYnIpOwogCQlicmVhazsKIAotCWNhc2UgTkVUREVWX0NIQU5HRToJLyogZGV2aWNlIGlzIHVwIGJ1dCBjYXJyaWVyIGNoYW5nZWQgKi8KLQkJaWYgKCEoYnItPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQotCQkJYnJlYWs7Ci0KLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQkJaWYgKHAtPnN0YXRlID09IEJSX1NUQVRFX0RJU0FCTEVEKQotCQkJCWJyX3N0cF9lbmFibGVfcG9ydChwKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwLT5zdGF0ZSAhPSBCUl9TVEFURV9ESVNBQkxFRCkKLQkJCQlicl9zdHBfZGlzYWJsZV9wb3J0KHApOwotCQl9CisJY2FzZSBORVRERVZfQ0hBTkdFOgorCQlpZiAoYnItPmRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnAtPmNhcnJpZXJfY2hlY2ssIEJSX1BPUlRfREVCT1VOQ0UpOwogCQlicmVhazsKIAogCWNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCBiZGY5NWE3Li5jNWJkNjMxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtMjcsNiArMjcsMTAgQEAKICNkZWZpbmUgQlJfUE9SVF9CSVRTCTEwCiAjZGVmaW5lIEJSX01BWF9QT1JUUwkoMTw8QlJfUE9SVF9CSVRTKQogCisjZGVmaW5lIEJSX1BPUlRfREVCT1VOQ0UgKEhaLzEwKQorCisjZGVmaW5lIEJSX1ZFUlNJT04JIjIuMSIKKwogdHlwZWRlZiBzdHJ1Y3QgYnJpZGdlX2lkIGJyaWRnZV9pZDsKIHR5cGVkZWYgc3RydWN0IG1hY19hZGRyIG1hY19hZGRyOwogdHlwZWRlZiBfX3UxNiBwb3J0X2lkOwpAQCAtNzgsNiArODIsNyBAQAogCXN0cnVjdCB0aW1lcl9saXN0CQlob2xkX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0CQltZXNzYWdlX2FnZV90aW1lcjsKIAlzdHJ1Y3Qga29iamVjdAkJCWtvYmo7CisJc3RydWN0IHdvcmtfc3RydWN0CQljYXJyaWVyX2NoZWNrOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKQEAgLTkwLDYgKzk1LDcgQEAKIAlzcGlubG9ja190CQkJaGFzaF9sb2NrOwogCXN0cnVjdCBobGlzdF9oZWFkCQloYXNoW0JSX0hBU0hfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZAkJYWdlX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJCWZlYXR1cmVfbWFzazsKIAogCS8qIFNUUCAqLwogCWJyaWRnZV9pZAkJCWRlc2lnbmF0ZWRfcm9vdDsKQEAgLTIwMSw2ICsyMDcsNyBAQAogZXh0ZXJuIHZvaWQgYnJfc3RwX2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogZXh0ZXJuIHZvaWQgYnJfc3RwX2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTsKIGV4dGVybiB2b2lkIGJyX3N0cF9yZWNhbGN1bGF0ZV9icmlkZ2VfaWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKK2V4dGVybiB2b2lkIGJyX3N0cF9jaGFuZ2VfYnJpZGdlX2lkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgY29uc3QgdW5zaWduZWQgY2hhciAqYSk7CiBleHRlcm4gdm9pZCBicl9zdHBfc2V0X2JyaWRnZV9wcmlvcml0eShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJCQkJICAgICAgIHUxNiBuZXdwcmlvKTsKIGV4dGVybiB2b2lkIGJyX3N0cF9zZXRfcG9ydF9wcmlvcml0eShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKaW5kZXggYWMwOWI2YS4uY2MwNDdmNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCkBAIC0xMjAsOCArMTIwLDcgQEAKIH0KIAogLyogY2FsbGVkIHVuZGVyIGJyaWRnZSBsb2NrICovCi1zdGF0aWMgdm9pZCBicl9zdHBfY2hhbmdlX2JyaWRnZV9pZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIAotCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQordm9pZCBicl9zdHBfY2hhbmdlX2JyaWRnZV9pZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiB7CiAJdW5zaWduZWQgY2hhciBvbGRhZGRyWzZdOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CkBAIC0xNTgsNyArMTU3LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmJyLT5wb3J0X2xpc3QsIGxpc3QpIHsKIAkJaWYgKGFkZHIgPT0gYnJfbWFjX3plcm8gfHwKLQkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwLT5kZXYtPmRldl9hZGRyLCBhZGRyKSA8IDApCisJCSAgICBtZW1jbXAocC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pIDwgMCkKIAkJCWFkZHIgPSBwLT5kZXYtPmRldl9hZGRyOwogCiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggYzcwYjNiZS4uYjg0ZmM2MCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnCkBAIC0xOTYsOSArMTk2LDEzIEBACiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIEJSSURHRV9FQlRfVUxPRwotCXRyaXN0YXRlICJlYnQ6IHVsb2cgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiZWJ0OiB1bG9nIHN1cHBvcnQgKE9CU09MRVRFKSIKIAlkZXBlbmRzIG9uIEJSSURHRV9ORl9FQlRBQkxFUwogCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG9sZCBicmlkZ2Utc3BlY2lmaWMgImVidF91bG9nIiBpbXBsZW1lbnRhdGlvbgorCSAgd2hpY2ggaGFzIGJlZW4gb2Jzb2xldGVkIGJ5IHRoZSBuZXcgIm5mbmV0bGlua19sb2ciIGNvZGUgKHNlZQorCSAgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRykuCisKIAkgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIHVsb2cgd2F0Y2hlciwgdGhhdCB5b3UgY2FuIHVzZSBpbiBhbnkgcnVsZQogCSAgaW4gYW55IGVidGFibGVzIHRhYmxlLiBUaGUgcGFja2V0IGlzIHBhc3NlZCB0byBhIHVzZXJzcGFjZQogCSAgbG9nZ2luZyBkYWVtb24gdXNpbmcgbmV0bGluayBtdWx0aWNhc3Qgc29ja2V0cy4gVGhpcyBkaWZmZXJzCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKaW5kZXggNjYyOTc1Yi4uOWY2ZTAxOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwpAQCAtMywxMyArMywxNiBAQAogICoKICAqCUF1dGhvcnM6CiAgKglCYXJ0IERlIFNjaHV5bWVyIDxiZHNjaHV5bUBwYW5kb3JhLmJlPgorICoJSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CiAgKgogICogIEFwcmlsLCAyMDAyCiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpAQCAtNTUsMjcgKzU4LDMwIEBACiB9CiAKICNkZWZpbmUgbXlOSVBRVUFEKGEpIGFbMF0sIGFbMV0sIGFbMl0sIGFbM10KLXN0YXRpYyB2b2lkIGVidF9sb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tuciwKLSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLSAgIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKQorc3RhdGljIHZvaWQKK2VidF9sb2dfcGFja2V0KHVuc2lnbmVkIGludCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0sCisgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LCBjb25zdCBzdHJ1Y3QgbmZfbG9naW5mbyAqbG9naW5mbywKKyAgIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlzdHJ1Y3QgZWJ0X2xvZ19pbmZvICppbmZvID0gKHN0cnVjdCBlYnRfbG9nX2luZm8gKilkYXRhOwotCWNoYXIgbGV2ZWxfc3RyaW5nWzRdID0gIjwgPiI7CisJdW5zaWduZWQgaW50IGJpdG1hc2s7CiAKLQlsZXZlbF9zdHJpbmdbMV0gPSAnMCcgKyBpbmZvLT5sb2dsZXZlbDsKIAlzcGluX2xvY2tfYmgoJmVidF9sb2dfbG9jayk7Ci0JcHJpbnRrKGxldmVsX3N0cmluZyk7Ci0JcHJpbnRrKCIlcyBJTj0lcyBPVVQ9JXMgIiwgaW5mby0+cHJlZml4LCBpbiA/IGluLT5uYW1lIDogIiIsCi0JICAgb3V0ID8gb3V0LT5uYW1lIDogIiIpOworCXByaW50aygiPCVjPiVzIElOPSVzIE9VVD0lcyBNQUMgc291cmNlID0gIiwgJzAnICsgbG9naW5mby0+dS5sb2cubGV2ZWwsCisJICAgICAgIHByZWZpeCwgaW4gPyBpbi0+bmFtZSA6ICIiLCBvdXQgPyBvdXQtPm5hbWUgOiAiIik7CiAKLQlwcmludGsoIk1BQyBzb3VyY2UgPSAiKTsKIAlwcmludF9NQUMoZXRoX2hkcihza2IpLT5oX3NvdXJjZSk7CiAJcHJpbnRrKCJNQUMgZGVzdCA9ICIpOwogCXByaW50X01BQyhldGhfaGRyKHNrYiktPmhfZGVzdCk7CiAKIAlwcmludGsoInByb3RvID0gMHglMDR4IiwgbnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSk7CiAKLQlpZiAoKGluZm8tPmJpdG1hc2sgJiBFQlRfTE9HX0lQKSAmJiBldGhfaGRyKHNrYiktPmhfcHJvdG8gPT0KKwlpZiAobG9naW5mby0+dHlwZSA9PSBORl9MT0dfVFlQRV9MT0cpCisJCWJpdG1hc2sgPSBsb2dpbmZvLT51LmxvZy5sb2dmbGFnczsKKwllbHNlCisJCWJpdG1hc2sgPSBORl9MT0dfTUFTSzsKKworCWlmICgoYml0bWFzayAmIEVCVF9MT0dfSVApICYmIGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PQogCSAgIGh0b25zKEVUSF9QX0lQKSl7CiAJCXN0cnVjdCBpcGhkciBfaXBoLCAqaWg7CiAKQEAgLTg0LDEwICs5MCw5IEBACiAJCQlwcmludGsoIiBJTkNPTVBMRVRFIElQIGhlYWRlciIpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJcHJpbnRrKCIgSVAgU1JDPSV1LiV1LiV1LiV1IElQIERTVD0ldS4ldS4ldS4ldSwiLAotCQkgICBOSVBRVUFEKGloLT5zYWRkciksIE5JUFFVQUQoaWgtPmRhZGRyKSk7Ci0JCXByaW50aygiIElQIHRvcz0weCUwMlgsIElQIHByb3RvPSVkIiwgaWgtPnRvcywKLQkJICAgICAgIGloLT5wcm90b2NvbCk7CisJCXByaW50aygiIElQIFNSQz0ldS4ldS4ldS4ldSBJUCBEU1Q9JXUuJXUuJXUuJXUsIElQICIKKwkJICAgICAgICJ0b3M9MHglMDJYLCBJUCBwcm90bz0lZCIsIE5JUFFVQUQoaWgtPnNhZGRyKSwKKwkJICAgICAgIE5JUFFVQUQoaWgtPmRhZGRyKSwgaWgtPnRvcywgaWgtPnByb3RvY29sKTsKIAkJaWYgKGloLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fAogCQkgICAgaWgtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7CiAJCQlzdHJ1Y3QgdGNwdWRwaGRyIF9wb3J0cywgKnBwdHI7CkBAIC0xMDQsNyArMTA5LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKChpbmZvLT5iaXRtYXNrICYgRUJUX0xPR19BUlApICYmCisJaWYgKChiaXRtYXNrICYgRUJUX0xPR19BUlApICYmCiAJICAgICgoZXRoX2hkcihza2IpLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX0FSUCkpIHx8CiAJICAgICAoZXRoX2hkcihza2IpLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX1JBUlApKSkpIHsKIAkJc3RydWN0IGFycGhkciBfYXJwaCwgKmFoOwpAQCAtMTQ0LDYgKzE0OSwyMSBAQAogb3V0OgogCXByaW50aygiXG4iKTsKIAlzcGluX3VubG9ja19iaCgmZWJ0X2xvZ19sb2NrKTsKKworfQorCitzdGF0aWMgdm9pZCBlYnRfbG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnIsCisgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgZWJ0X2xvZ19pbmZvICppbmZvID0gKHN0cnVjdCBlYnRfbG9nX2luZm8gKilkYXRhOworCXN0cnVjdCBuZl9sb2dpbmZvIGxpOworCisJbGkudHlwZSA9IE5GX0xPR19UWVBFX0xPRzsKKwlsaS51LmxvZy5sZXZlbCA9IGluZm8tPmxvZ2xldmVsOworCWxpLnUubG9nLmxvZ2ZsYWdzID0gaW5mby0+Yml0bWFzazsKKworCW5mX2xvZ19wYWNrZXQoUEZfQlJJREdFLCBob29rbnIsIHNrYiwgaW4sIG91dCwgJmxpLCBpbmZvLT5wcmVmaXgpOwogfQogCiBzdGF0aWMgc3RydWN0IGVidF93YXRjaGVyIGxvZyA9CkBAIC0xNTQsMTMgKzE3NCwzMiBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF9sb2dfbG9nZ2VyID0geworCS5uYW1lIAkJPSAiZWJ0X2xvZyIsCisJLmxvZ2ZuCQk9ICZlYnRfbG9nX3BhY2tldCwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGVidF9yZWdpc3Rlcl93YXRjaGVyKCZsb2cpOworCWludCByZXQ7CisKKwlyZXQgPSBlYnRfcmVnaXN0ZXJfd2F0Y2hlcigmbG9nKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobmZfbG9nX3JlZ2lzdGVyKFBGX0JSSURHRSwgJmVidF9sb2dfbG9nZ2VyKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZWJ0X2xvZzogbm90IGxvZ2dpbmcgdmlhIHN5c3RlbSBjb25zb2xlICIKKwkJICAgICAgICJzaW5jZSBzb21lYm9keSBlbHNlIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgUEZfSU5FVFxuIik7CisJCS8qIHdlIGNhbm5vdCBtYWtlIG1vZHVsZSBsb2FkIGZhaWwgaGVyZSwgc2luY2Ugb3RoZXJ3aXNlIAorCQkgKiBlYnRhYmxlcyB1c2Vyc3BhY2Ugd291bGQgYWJvcnQgKi8KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKKwluZl9sb2dfdW5yZWdpc3Rlcl9sb2dnZXIoJmVidF9sb2dfbG9nZ2VyKTsKIAllYnRfdW5yZWdpc3Rlcl93YXRjaGVyKCZsb2cpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwppbmRleCBhYWUyNmFlLi5jZTYxN2IzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKQEAgLTMsNiArMyw3IEBACiAgKgogICoJQXV0aG9yczoKICAqCUJhcnQgRGUgU2NodXltZXIgPGJkc2NodXltQHBhbmRvcmEuYmU+CisgKglIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KICAqCiAgKiAgTm92ZW1iZXIsIDIwMDQKICAqCkBAIC0xMTUsMTQgKzExNiwxMyBAQAogCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyB2b2lkIGVidF91bG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnIsCitzdGF0aWMgdm9pZCBlYnRfdWxvZ19wYWNrZXQodW5zaWduZWQgaW50IGhvb2tuciwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLSAgIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKQorICAgY29uc3Qgc3RydWN0IGVidF91bG9nX2luZm8gKnVsb2dpbmZvLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJZWJ0X3Vsb2dfcGFja2V0X21zZ190ICpwbTsKIAlzaXplX3Qgc2l6ZSwgY29weV9sZW47CiAJc3RydWN0IG5sbXNnaGRyICpubGg7Ci0Jc3RydWN0IGVidF91bG9nX2luZm8gKnVsb2dpbmZvID0gKHN0cnVjdCBlYnRfdWxvZ19pbmZvICopZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3JvdXAgPSB1bG9naW5mby0+bmxncm91cDsKIAllYnRfdWxvZ19idWZmX3QgKnViID0gJnVsb2dfYnVmZmVyc1tncm91cF07CiAJc3BpbmxvY2tfdCAqbG9jayA9ICZ1Yi0+bG9jazsKQEAgLTIxNiw2ICsyMTYsMzkgQEAKIAlnb3RvIHVubG9jazsKIH0KIAorLyogdGhpcyBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG5ldGZpbHRlciBjb3JlICovCitzdGF0aWMgdm9pZCBlYnRfbG9nX3BhY2tldCh1bnNpZ25lZCBpbnQgcGYsIHVuc2lnbmVkIGludCBob29rbnVtLAorICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgY29uc3Qgc3RydWN0IG5mX2xvZ2luZm8gKmxpLAorICAgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBlYnRfdWxvZ19pbmZvIGxvZ2luZm87CisKKwlpZiAoIWxpIHx8IGxpLT50eXBlICE9IE5GX0xPR19UWVBFX1VMT0cpIHsKKwkJbG9naW5mby5ubGdyb3VwID0gRUJUX1VMT0dfREVGQVVMVF9OTEdST1VQOworCQlsb2dpbmZvLmNwcmFuZ2UgPSAwOworCQlsb2dpbmZvLnF0aHJlc2hvbGQgPSBFQlRfVUxPR19ERUZBVUxUX1FUSFJFU0hPTEQ7CisJCWxvZ2luZm8ucHJlZml4WzBdID0gJ1wwJzsKKwl9IGVsc2UgeworCQlsb2dpbmZvLm5sZ3JvdXAgPSBsaS0+dS51bG9nLmdyb3VwOworCQlsb2dpbmZvLmNwcmFuZ2UgPSBsaS0+dS51bG9nLmNvcHlfbGVuOworCQlsb2dpbmZvLnF0aHJlc2hvbGQgPSBsaS0+dS51bG9nLnF0aHJlc2hvbGQ7CisJCXN0cmxjcHkobG9naW5mby5wcmVmaXgsIHByZWZpeCwgc2l6ZW9mKGxvZ2luZm8ucHJlZml4KSk7CisJfQorCisJZWJ0X3Vsb2dfcGFja2V0KGhvb2tudW0sIHNrYiwgaW4sIG91dCwgJmxvZ2luZm8sIHByZWZpeCk7Cit9CisKK3N0YXRpYyB2b2lkIGVidF91bG9nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnIsCisgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgZWJ0X3Vsb2dfaW5mbyAqdWxvZ2luZm8gPSAoc3RydWN0IGVidF91bG9nX2luZm8gKilkYXRhOworCisJZWJ0X3Vsb2dfcGFja2V0KGhvb2tuciwgc2tiLCBpbiwgb3V0LCB1bG9naW5mbywgTlVMTCk7Cit9CisKKwogc3RhdGljIGludCBlYnRfdWxvZ19jaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUsIHVuc2lnbmVkIGludCBob29rbWFzaywKICAgIGNvbnN0IHN0cnVjdCBlYnRfZW50cnkgKmUsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKQogewpAQCAtMjQwLDYgKzI3MywxMiBAQAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF91bG9nX2xvZ2dlciA9IHsKKwkubmFtZQkJPSBFQlRfVUxPR19XQVRDSEVSLAorCS5sb2dmbgkJPSAmZWJ0X2xvZ19wYWNrZXQsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewogCWludCBpLCByZXQgPSAwOwpAQCAtMjY1LDYgKzMwNCwxMyBAQAogCWVsc2UgaWYgKChyZXQgPSBlYnRfcmVnaXN0ZXJfd2F0Y2hlcigmdWxvZykpKQogCQlzb2NrX3JlbGVhc2UoZWJ0dWxvZ25sLT5za19zb2NrZXQpOwogCisJaWYgKG5mX2xvZ19yZWdpc3RlcihQRl9CUklER0UsICZlYnRfdWxvZ19sb2dnZXIpIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJlYnRfdWxvZzogbm90IGxvZ2dpbmcgdmlhIHVsb2cgIgorCQkgICAgICAgInNpbmNlIHNvbWVib2R5IGVsc2UgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBQRl9CUklER0VcbiIpOworCQkvKiB3ZSBjYW5ub3QgbWFrZSBtb2R1bGUgbG9hZCBmYWlsIGhlcmUsIHNpbmNlIG90aGVyd2lzZQorCQkgKiBlYnRhYmxlcyB1c2Vyc3BhY2Ugd291bGQgYWJvcnQgKi8KKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzMsNiArMzE5LDcgQEAKIAllYnRfdWxvZ19idWZmX3QgKnViOwogCWludCBpOwogCisJbmZfbG9nX3VucmVnaXN0ZXJfbG9nZ2VyKCZlYnRfdWxvZ19sb2dnZXIpOwogCWVidF91bnJlZ2lzdGVyX3dhdGNoZXIoJnVsb2cpOwogCWZvciAoaSA9IDA7IGkgPCBFQlRfVUxPR19NQVhOTEdST1VQUzsgaSsrKSB7CiAJCXViID0gJnVsb2dfYnVmZmVyc1tpXTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IDFiY2ZlZjUuLmY4ZDMyMmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKKysrIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtMjAwLDYgKzIwMSw0MSBAQAogfQogCiAvKioKKyAqCXNrYl9raWxsX2RhdGFncmFtIC0gRnJlZSBhIGRhdGFncmFtIHNrYnVmZiBmb3JjaWJseQorICoJQHNrOiBzb2NrZXQKKyAqCUBza2I6IGRhdGFncmFtIHNrYnVmZgorICoJQGZsYWdzOiBNU0dfIGZsYWdzCisgKgorICoJVGhpcyBmdW5jdGlvbiBmcmVlcyBhIGRhdGFncmFtIHNrYnVmZiB0aGF0IHdhcyByZWNlaXZlZCBieQorICoJc2tiX3JlY3ZfZGF0YWdyYW0uICBUaGUgZmxhZ3MgYXJndW1lbnQgbXVzdCBtYXRjaCB0aGUgb25lCisgKgl1c2VkIGZvciBza2JfcmVjdl9kYXRhZ3JhbS4KKyAqCisgKglJZiB0aGUgTVNHX1BFRUsgZmxhZyBpcyBzZXQsIGFuZCB0aGUgcGFja2V0IGlzIHN0aWxsIG9uIHRoZQorICoJcmVjZWl2ZSBxdWV1ZSBvZiB0aGUgc29ja2V0LCBpdCB3aWxsIGJlIHRha2VuIG9mZiB0aGUgcXVldWUKKyAqCWJlZm9yZSBpdCBpcyBmcmVlZC4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSBvbmx5IGRpc2FibGVzIEJIIHdoZW4gYWNxdWlyaW5nIHRoZQorICoJc2tfcmVjZWl2ZV9xdWV1ZSBsb2NrLiAgVGhlcmVmb3JlIGl0IG11c3Qgbm90IGJlIHVzZWQgaW4gYQorICoJY29udGV4dCB3aGVyZSB0aGF0IGxvY2sgaXMgYWNxdWlyZWQgaW4gYW4gSVJRIGNvbnRleHQuCisgKi8KKwordm9pZCBza2Jfa2lsbF9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBNU0dfUEVFSykgeworCQlzcGluX2xvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOworCQlpZiAoc2tiID09IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKKwkJCV9fc2tiX3VubGluayhza2IsICZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CisJfQorCisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK0VYUE9SVF9TWU1CT0woc2tiX2tpbGxfZGF0YWdyYW0pOworCisvKioKICAqCXNrYl9jb3B5X2RhdGFncmFtX2lvdmVjIC0gQ29weSBhIGRhdGFncmFtIHRvIGFuIGlvdmVjLgogICoJQHNrYjogYnVmZmVyIHRvIGNvcHkKICAqCUBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgYnVmZmVyIHRvIHN0YXJ0IGNvcHlpbmcgZnJvbQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhNWVmYzlhLi41MDgxMjg3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtNjI2LDcgKzYyNiw3IEBACiAgKglOZXR3b3JrIGRldmljZSBuYW1lcyBuZWVkIHRvIGJlIHZhbGlkIGZpbGUgbmFtZXMgdG8KICAqCXRvIGFsbG93IHN5c2ZzIHRvIHdvcmsKICAqLwotc3RhdGljIGludCBkZXZfdmFsaWRfbmFtZShjb25zdCBjaGFyICpuYW1lKQoraW50IGRldl92YWxpZF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuICEoKm5hbWUgPT0gJ1wwJyAKIAkJIHx8ICFzdHJjbXAobmFtZSwgIi4iKQpAQCAtMzI3MCwxMyArMzI3MCwxMyBAQAogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X3JlbW92ZV9wYWNrKTsKIEVYUE9SVF9TWU1CT0woX19za2JfbGluZWFyaXplKTsKK0VYUE9SVF9TWU1CT0woZGV2X3ZhbGlkX25hbWUpOwogRVhQT1JUX1NZTUJPTChkZXZfYWRkX3BhY2spOwogRVhQT1JUX1NZTUJPTChkZXZfYWxsb2NfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKGRldl9jbG9zZSk7CiBFWFBPUlRfU1lNQk9MKGRldl9nZXRfYnlfZmxhZ3MpOwogRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2J5X2luZGV4KTsKIEVYUE9SVF9TWU1CT0woZGV2X2dldF9ieV9uYW1lKTsKLUVYUE9SVF9TWU1CT0woZGV2X2lvY3RsKTsKIEVYUE9SVF9TWU1CT0woZGV2X29wZW4pOwogRVhQT1JUX1NZTUJPTChkZXZfcXVldWVfeG1pdCk7CiBFWFBPUlRfU1lNQk9MKGRldl9yZW1vdmVfcGFjayk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDNhMTBlMGIuLjg5NjRkMzQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCisrKyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEFuZGkgS2xlZW4gLSBGaXggYSBmZXcgYmFkIGJ1Z3MgYW5kIHJhY2VzLgorICogS3JpcyBLYXR0ZXJqb2huIC0gQWRkZWQgbWFueSBhZGRpdGlvbmFsIGNoZWNrcyBpbiBza19jaGtfZmlsdGVyKCkKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yNTAsNyArMjUxLDcgQEAKIAkJCW1lbVtmZW50cnktPmtdID0gWDsKIAkJCWNvbnRpbnVlOwogCQlkZWZhdWx0OgotCQkJLyogSW52YWxpZCBpbnN0cnVjdGlvbiBjb3VudHMgYXMgUkVUICovCisJCQlXQVJOX09OKDEpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtMjgzLDggKzI4NCw4IEBACiAgKgogICogQ2hlY2sgdGhlIHVzZXIncyBmaWx0ZXIgY29kZS4gSWYgd2UgbGV0IHNvbWUgdWdseQogICogZmlsdGVyIGNvZGUgc2xpcCB0aHJvdWdoIGthYm9vbSEgVGhlIGZpbHRlciBtdXN0IGNvbnRhaW4KLSAqIG5vIHJlZmVyZW5jZXMgb3IganVtcHMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlLCBubyBpbGxlZ2FsIGluc3RydWN0aW9ucwotICogYW5kIG5vIGJhY2t3YXJkIGp1bXBzLiBJdCBtdXN0IGVuZCB3aXRoIGEgUkVUIGluc3RydWN0aW9uCisgKiBubyByZWZlcmVuY2VzIG9yIGp1bXBzIHRoYXQgYXJlIG91dCBvZiByYW5nZSwgbm8gaWxsZWdhbAorICogaW5zdHJ1Y3Rpb25zLCBhbmQgbXVzdCBlbmQgd2l0aCBhIFJFVCBpbnN0cnVjdGlvbi4KICAqCiAgKiBSZXR1cm5zIDAgaWYgdGhlIHJ1bGUgc2V0IGlzIGxlZ2FsIG9yIGEgbmVnYXRpdmUgZXJybm8gY29kZSBpZiBub3QuCiAgKi8KQEAgLTMwMCwzOCArMzAxLDg1IEBACiAJZm9yIChwYyA9IDA7IHBjIDwgZmxlbjsgcGMrKykgewogCQkvKiBhbGwganVtcHMgYXJlIGZvcndhcmQgYXMgdGhleSBhcmUgbm90IHNpZ25lZCAqLwogCQlmdGVzdCA9ICZmaWx0ZXJbcGNdOwotCQlpZiAoQlBGX0NMQVNTKGZ0ZXN0LT5jb2RlKSA9PSBCUEZfSk1QKSB7Ci0JCQkvKiBidXQgdGhleSBtdXN0bid0IGp1bXAgb2ZmIHRoZSBlbmQgKi8KLQkJCWlmIChCUEZfT1AoZnRlc3QtPmNvZGUpID09IEJQRl9KQSkgewotCQkJCS8qCi0JCQkJICogTm90ZSwgdGhlIGxhcmdlIGZ0ZXN0LT5rIG1pZ2h0IGNhdXNlIGxvb3BzLgotCQkJCSAqIENvbXBhcmUgdGhpcyB3aXRoIGNvbmRpdGlvbmFsIGp1bXBzIGJlbG93LAotCQkJCSAqIHdoZXJlIG9mZnNldHMgYXJlIGxpbWl0ZWQuIC0tQU5LICg5ODEwMTYpCi0JCQkJICovCi0JCQkJaWYgKGZ0ZXN0LT5rID49ICh1bnNpZ25lZCkoZmxlbi1wYy0xKSkKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGZvciBjb25kaXRpb25hbHMgYm90aCBtdXN0IGJlIHNhZmUgKi8KLSAJCQkJaWYgKHBjICsgZnRlc3QtPmp0ICsxID49IGZsZW4gfHwKLQkJCQkgICAgcGMgKyBmdGVzdC0+amYgKzEgPj0gZmxlbikKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KIAotCQkvKiBjaGVjayBmb3IgZGl2aXNpb24gYnkgemVybyAgIC1LcmlzIEthdHRlcmpvaG4gMjAwNS0xMC0zMCAqLwotCQlpZiAoZnRlc3QtPmNvZGUgPT0gKEJQRl9BTFV8QlBGX0RJVnxCUEZfSykgJiYgZnRlc3QtPmsgPT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOworCQkvKiBPbmx5IGFsbG93IHZhbGlkIGluc3RydWN0aW9ucyAqLworCQlzd2l0Y2ggKGZ0ZXN0LT5jb2RlKSB7CisJCWNhc2UgQlBGX0FMVXxCUEZfQUREfEJQRl9LOgorCQljYXNlIEJQRl9BTFV8QlBGX0FERHxCUEZfWDoKKwkJY2FzZSBCUEZfQUxVfEJQRl9TVUJ8QlBGX0s6CisJCWNhc2UgQlBGX0FMVXxCUEZfU1VCfEJQRl9YOgorCQljYXNlIEJQRl9BTFV8QlBGX01VTHxCUEZfSzoKKwkJY2FzZSBCUEZfQUxVfEJQRl9NVUx8QlBGX1g6CisJCWNhc2UgQlBGX0FMVXxCUEZfRElWfEJQRl9YOgorCQljYXNlIEJQRl9BTFV8QlBGX0FORHxCUEZfSzoKKwkJY2FzZSBCUEZfQUxVfEJQRl9BTkR8QlBGX1g6CisJCWNhc2UgQlBGX0FMVXxCUEZfT1J8QlBGX0s6CisJCWNhc2UgQlBGX0FMVXxCUEZfT1J8QlBGX1g6CisJCWNhc2UgQlBGX0FMVXxCUEZfTFNIfEJQRl9LOgorCQljYXNlIEJQRl9BTFV8QlBGX0xTSHxCUEZfWDoKKwkJY2FzZSBCUEZfQUxVfEJQRl9SU0h8QlBGX0s6CisJCWNhc2UgQlBGX0FMVXxCUEZfUlNIfEJQRl9YOgorCQljYXNlIEJQRl9BTFV8QlBGX05FRzoKKwkJY2FzZSBCUEZfTER8QlBGX1d8QlBGX0FCUzoKKwkJY2FzZSBCUEZfTER8QlBGX0h8QlBGX0FCUzoKKwkJY2FzZSBCUEZfTER8QlBGX0J8QlBGX0FCUzoKKwkJY2FzZSBCUEZfTER8QlBGX1d8QlBGX0xFTjoKKwkJY2FzZSBCUEZfTER8QlBGX1d8QlBGX0lORDoKKwkJY2FzZSBCUEZfTER8QlBGX0h8QlBGX0lORDoKKwkJY2FzZSBCUEZfTER8QlBGX0J8QlBGX0lORDoKKwkJY2FzZSBCUEZfTER8QlBGX0lNTToKKwkJY2FzZSBCUEZfTERYfEJQRl9XfEJQRl9MRU46CisJCWNhc2UgQlBGX0xEWHxCUEZfQnxCUEZfTVNIOgorCQljYXNlIEJQRl9MRFh8QlBGX0lNTToKKwkJY2FzZSBCUEZfTUlTQ3xCUEZfVEFYOgorCQljYXNlIEJQRl9NSVNDfEJQRl9UWEE6CisJCWNhc2UgQlBGX1JFVHxCUEZfSzoKKwkJY2FzZSBCUEZfUkVUfEJQRl9BOgorCQkJYnJlYWs7CiAKLQkJLyogY2hlY2sgdGhhdCBtZW1vcnkgb3BlcmF0aW9ucyB1c2UgdmFsaWQgYWRkcmVzc2VzLiAqLwotCQlpZiAoZnRlc3QtPmsgPj0gQlBGX01FTVdPUkRTKSB7Ci0JCQkvKiBidXQgaXQgbWlnaHQgbm90IGJlIGEgbWVtb3J5IG9wZXJhdGlvbi4uLiAqLwotCQkJc3dpdGNoIChmdGVzdC0+Y29kZSkgewotCQkJY2FzZSBCUEZfU1Q6CQotCQkJY2FzZSBCUEZfU1RYOgkKLQkJCWNhc2UgQlBGX0xEfEJQRl9NRU06CQotCQkJY2FzZSBCUEZfTERYfEJQRl9NRU06CQorCQkvKiBTb21lIGluc3RydWN0aW9ucyBuZWVkIHNwZWNpYWwgY2hlY2tzICovCisKKwkJY2FzZSBCUEZfQUxVfEJQRl9ESVZ8QlBGX0s6CisJCQkvKiBjaGVjayBmb3IgZGl2aXNpb24gYnkgemVybyAqLworCQkJaWYgKGZ0ZXN0LT5rID09IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9CisJCQlicmVhazsKKworCQljYXNlIEJQRl9MRHxCUEZfTUVNOgorCQljYXNlIEJQRl9MRFh8QlBGX01FTToKKwkJY2FzZSBCUEZfU1Q6CisJCWNhc2UgQlBGX1NUWDoKKwkJCS8qIGNoZWNrIGZvciBpbnZhbGlkIG1lbW9yeSBhZGRyZXNzZXMgKi8KKwkJCWlmIChmdGVzdC0+ayA+PSBCUEZfTUVNV09SRFMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKworCQljYXNlIEJQRl9KTVB8QlBGX0pBOgorCQkJLyoKKwkJCSAqIE5vdGUsIHRoZSBsYXJnZSBmdGVzdC0+ayBtaWdodCBjYXVzZSBsb29wcy4KKwkJCSAqIENvbXBhcmUgdGhpcyB3aXRoIGNvbmRpdGlvbmFsIGp1bXBzIGJlbG93LAorCQkJICogd2hlcmUgb2Zmc2V0cyBhcmUgbGltaXRlZC4gLS1BTksgKDk4MTAxNikKKwkJCSAqLworCQkJaWYgKGZ0ZXN0LT5rID49ICh1bnNpZ25lZCkoZmxlbi1wYy0xKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCisJCWNhc2UgQlBGX0pNUHxCUEZfSkVRfEJQRl9LOgorCQljYXNlIEJQRl9KTVB8QlBGX0pFUXxCUEZfWDoKKwkJY2FzZSBCUEZfSk1QfEJQRl9KR0V8QlBGX0s6CisJCWNhc2UgQlBGX0pNUHxCUEZfSkdFfEJQRl9YOgorCQljYXNlIEJQRl9KTVB8QlBGX0pHVHxCUEZfSzoKKwkJY2FzZSBCUEZfSk1QfEJQRl9KR1R8QlBGX1g6CisJCWNhc2UgQlBGX0pNUHxCUEZfSlNFVHxCUEZfSzoKKwkJY2FzZSBCUEZfSk1QfEJQRl9KU0VUfEJQRl9YOgorCQkJLyogZm9yIGNvbmRpdGlvbmFscyBib3RoIG11c3QgYmUgc2FmZSAqLworIAkJCWlmIChwYyArIGZ0ZXN0LT5qdCArIDEgPj0gZmxlbiB8fAorCQkJICAgIHBjICsgZnRlc3QtPmpmICsgMSA+PSBmbGVuKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9mbG93LmMgYi9uZXQvY29yZS9mbG93LmMKaW5kZXggN2U5NWIzOS4uYzRmMjUzOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmxvdy5jCisrKyBiL25ldC9jb3JlL2Zsb3cuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogCiBzdHJ1Y3QgZmxvd19jYWNoZV9lbnRyeSB7CiAJc3RydWN0IGZsb3dfY2FjaGVfZW50cnkJKm5leHQ7CkBAIC0zMCw2ICszMSw3IEBACiAJdTgJCQlkaXI7CiAJc3RydWN0IGZsb3dpCQlrZXk7CiAJdTMyCQkJZ2VuaWQ7CisJdTMyCQkJc2tfc2lkOwogCXZvaWQJCQkqb2JqZWN0OwogCWF0b21pY190CQkqb2JqZWN0X3JlZjsKIH07CkBAIC0xNjIsNyArMTY0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCAqZmxvd19jYWNoZV9sb29rdXAoc3RydWN0IGZsb3dpICprZXksIHUxNiBmYW1pbHksIHU4IGRpciwKK3ZvaWQgKmZsb3dfY2FjaGVfbG9va3VwKHN0cnVjdCBmbG93aSAqa2V5LCB1MzIgc2tfc2lkLCB1MTYgZmFtaWx5LCB1OCBkaXIsCiAJCQlmbG93X3Jlc29sdmVfdCByZXNvbHZlcikKIHsKIAlzdHJ1Y3QgZmxvd19jYWNoZV9lbnRyeSAqZmxlLCAqKmhlYWQ7CkBAIC0xODYsNiArMTg4LDcgQEAKIAlmb3IgKGZsZSA9ICpoZWFkOyBmbGU7IGZsZSA9IGZsZS0+bmV4dCkgewogCQlpZiAoZmxlLT5mYW1pbHkgPT0gZmFtaWx5ICYmCiAJCSAgICBmbGUtPmRpciA9PSBkaXIgJiYKKwkJICAgIGZsZS0+c2tfc2lkID09IHNrX3NpZCAmJgogCQkgICAgZmxvd19rZXlfY29tcGFyZShrZXksICZmbGUtPmtleSkgPT0gMCkgewogCQkJaWYgKGZsZS0+Z2VuaWQgPT0gYXRvbWljX3JlYWQoJmZsb3dfY2FjaGVfZ2VuaWQpKSB7CiAJCQkJdm9pZCAqcmV0ID0gZmxlLT5vYmplY3Q7CkBAIC0yMTAsNiArMjEzLDcgQEAKIAkJCSpoZWFkID0gZmxlOwogCQkJZmxlLT5mYW1pbHkgPSBmYW1pbHk7CiAJCQlmbGUtPmRpciA9IGRpcjsKKwkJCWZsZS0+c2tfc2lkID0gc2tfc2lkOwogCQkJbWVtY3B5KCZmbGUtPmtleSwga2V5LCBzaXplb2YoKmtleSkpOwogCQkJZmxlLT5vYmplY3QgPSBOVUxMOwogCQkJZmxvd19jb3VudChjcHUpKys7CkBAIC0yMjEsNyArMjI1LDcgQEAKIAkJdm9pZCAqb2JqOwogCQlhdG9taWNfdCAqb2JqX3JlZjsKIAotCQlyZXNvbHZlcihrZXksIGZhbWlseSwgZGlyLCAmb2JqLCAmb2JqX3JlZik7CisJCXJlc29sdmVyKGtleSwgc2tfc2lkLCBmYW1pbHksIGRpciwgJm9iaiwgJm9ial9yZWYpOwogCiAJCWlmIChmbGUpIHsKIAkJCWZsZS0+Z2VuaWQgPSBhdG9taWNfcmVhZCgmZmxvd19jYWNoZV9nZW5pZCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggNDk0MjRhNC4uMjgxYTYzMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggN2ZjM2U5ZS4uMDZjYWQyZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTQ4Nyw5ICs0ODcsOSBAQAogCiAvKiBNb2R1bGUgcGFyYW1ldGVycywgZGVmYXVsdHMuICovCiBzdGF0aWMgaW50IHBnX2NvdW50X2QgPSAxMDAwOyAvKiAxMDAwIHBrdHMgYnkgZGVmYXVsdCAqLwotc3RhdGljIGludCBwZ19kZWxheV9kID0gMDsKLXN0YXRpYyBpbnQgcGdfY2xvbmVfc2tiX2QgPSAwOwotc3RhdGljIGludCBkZWJ1ZyA9IDA7CitzdGF0aWMgaW50IHBnX2RlbGF5X2Q7CitzdGF0aWMgaW50IHBnX2Nsb25lX3NrYl9kOworc3RhdGljIGludCBkZWJ1ZzsKIAogc3RhdGljIERFQ0xBUkVfTVVURVgocGt0Z2VuX3NlbSk7CiBzdGF0aWMgc3RydWN0IHBrdGdlbl90aHJlYWQgKnBrdGdlbl90aHJlYWRzID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggODNmZWUzNy4uMDcwZjkxYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTEzNSwxNyArMTM1LDEzIEBACiBzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLAogCQkJICAgIGludCBmY2xvbmUpCiB7CisJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTggKmRhdGE7CiAKIAkvKiBHZXQgdGhlIEhFQUQgKi8KLQlpZiAoZmNsb25lKQotCQlza2IgPSBrbWVtX2NhY2hlX2FsbG9jKHNrYnVmZl9mY2xvbmVfY2FjaGUsCi0JCQkJICAgICAgIGdmcF9tYXNrICYgfl9fR0ZQX0RNQSk7Ci0JZWxzZQotCQlza2IgPSBrbWVtX2NhY2hlX2FsbG9jKHNrYnVmZl9oZWFkX2NhY2hlLAotCQkJCSAgICAgICBnZnBfbWFzayAmIH5fX0dGUF9ETUEpOwotCisJc2tiID0ga21lbV9jYWNoZV9hbGxvYyhmY2xvbmUgPyBza2J1ZmZfZmNsb25lX2NhY2hlIDogc2tidWZmX2hlYWRfY2FjaGUsCisJCQkJZ2ZwX21hc2sgJiB+X19HRlBfRE1BKTsKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKQEAgLTE2Miw2ICsxNTgsMTYgQEAKIAlza2ItPmRhdGEgPSBkYXRhOwogCXNrYi0+dGFpbCA9IGRhdGE7CiAJc2tiLT5lbmQgID0gZGF0YSArIHNpemU7CisJLyogbWFrZSBzdXJlIHdlIGluaXRpYWxpemUgc2hpbmZvIHNlcXVlbnRpYWxseSAqLworCXNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKKwlhdG9taWNfc2V0KCZzaGluZm8tPmRhdGFyZWYsIDEpOworCXNoaW5mby0+bnJfZnJhZ3MgID0gMDsKKwlzaGluZm8tPnRzb19zaXplID0gMDsKKwlzaGluZm8tPnRzb19zZWdzID0gMDsKKwlzaGluZm8tPnVmb19zaXplID0gMDsKKwlzaGluZm8tPmlwNl9mcmFnX2lkID0gMDsKKwlzaGluZm8tPmZyYWdfbGlzdCA9IE5VTEw7CisKIAlpZiAoZmNsb25lKSB7CiAJCXN0cnVjdCBza19idWZmICpjaGlsZCA9IHNrYiArIDE7CiAJCWF0b21pY190ICpmY2xvbmVfcmVmID0gKGF0b21pY190ICopIChjaGlsZCArIDEpOwpAQCAtMTcxLDEzICsxNzcsNiBAQAogCiAJCWNoaWxkLT5mY2xvbmUgPSBTS0JfRkNMT05FX1VOQVZBSUxBQkxFOwogCX0KLQlhdG9taWNfc2V0KCYoc2tiX3NoaW5mbyhza2IpLT5kYXRhcmVmKSwgMSk7Ci0Jc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAgPSAwOwotCXNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUgPSAwOwotCXNrYl9zaGluZm8oc2tiKS0+dHNvX3NlZ3MgPSAwOwotCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0ID0gTlVMTDsKLQlza2Jfc2hpbmZvKHNrYiktPnVmb19zaXplID0gMDsKLQlza2Jfc2hpbmZvKHNrYiktPmlwNl9mcmFnX2lkID0gMDsKIG91dDoKIAlyZXR1cm4gc2tiOwogbm9kYXRhOgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDEzY2MzYmUuLjY0NjViMGUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJCQl9CiAJCX0KIAotCQlpZiAocHJvdC0+dHdza19vYmpfc2l6ZSkgeworCQlpZiAocHJvdC0+dHdza19wcm90ICE9IE5VTEwpIHsKIAkJCXN0YXRpYyBjb25zdCBjaGFyIG1hc2tbXSA9ICJ0d19zb2NrXyVzIjsKIAogCQkJdGltZXdhaXRfc29ja19zbGFiX25hbWUgPSBrbWFsbG9jKHN0cmxlbihwcm90LT5uYW1lKSArIHNpemVvZihtYXNrKSAtIDEsIEdGUF9LRVJORUwpOwpAQCAtMTQ5NywxMSArMTQ5NywxMiBAQAogCQkJCWdvdG8gb3V0X2ZyZWVfcmVxdWVzdF9zb2NrX3NsYWI7CiAKIAkJCXNwcmludGYodGltZXdhaXRfc29ja19zbGFiX25hbWUsIG1hc2ssIHByb3QtPm5hbWUpOwotCQkJcHJvdC0+dHdza19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUodGltZXdhaXRfc29ja19zbGFiX25hbWUsCi0JCQkJCQkJICAgIHByb3QtPnR3c2tfb2JqX3NpemUsCi0JCQkJCQkJICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwKLQkJCQkJCQkgICAgTlVMTCwgTlVMTCk7Ci0JCQlpZiAocHJvdC0+dHdza19zbGFiID09IE5VTEwpCisJCQlwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYiA9CisJCQkJa21lbV9jYWNoZV9jcmVhdGUodGltZXdhaXRfc29ja19zbGFiX25hbWUsCisJCQkJCQkgIHByb3QtPnR3c2tfcHJvdC0+dHdza19vYmpfc2l6ZSwKKwkJCQkJCSAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCQkJICBOVUxMLCBOVUxMKTsKKwkJCWlmIChwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYiA9PSBOVUxMKQogCQkJCWdvdG8gb3V0X2ZyZWVfdGltZXdhaXRfc29ja19zbGFiX25hbWU7CiAJCX0KIAl9CkBAIC0xNTQ4LDEyICsxNTQ5LDEyIEBACiAJCXByb3QtPnJza19wcm90LT5zbGFiID0gTlVMTDsKIAl9CiAKLQlpZiAocHJvdC0+dHdza19zbGFiICE9IE5VTEwpIHsKLQkJY29uc3QgY2hhciAqbmFtZSA9IGttZW1fY2FjaGVfbmFtZShwcm90LT50d3NrX3NsYWIpOworCWlmIChwcm90LT50d3NrX3Byb3QgIT0gTlVMTCAmJiBwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYiAhPSBOVUxMKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBrbWVtX2NhY2hlX25hbWUocHJvdC0+dHdza19wcm90LT50d3NrX3NsYWIpOwogCi0JCWttZW1fY2FjaGVfZGVzdHJveShwcm90LT50d3NrX3NsYWIpOworCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocHJvdC0+dHdza19wcm90LT50d3NrX3NsYWIpOwogCQlrZnJlZShuYW1lKTsKLQkJcHJvdC0+dHdza19zbGFiID0gTlVMTDsKKwkJcHJvdC0+dHdza19wcm90LT50d3NrX3NsYWIgPSBOVUxMOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3RyZWFtLmMgYi9uZXQvY29yZS9zdHJlYW0uYwppbmRleCAxNWJmZDAzLi4zNWUyNTI1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zdHJlYW0uYworKysgYi9uZXQvY29yZS9zdHJlYW0uYwpAQCAtNTUsOCArNTUsOSBAQAogCWludCBkb25lOwogCiAJZG8gewotCQlpZiAoc2stPnNrX2VycikKLQkJCXJldHVybiBzb2NrX2Vycm9yKHNrKTsKKwkJaW50IGVyciA9IHNvY2tfZXJyb3Ioc2spOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAkJaWYgKCgxIDw8IHNrLT5za19zdGF0ZSkgJiB+KFRDUEZfU1lOX1NFTlQgfCBUQ1BGX1NZTl9SRUNWKSkKIAkJCXJldHVybiAtRVBJUEU7CiAJCWlmICghKnRpbWVvX3ApCkBAIC02Nyw2ICs2OCw3IEBACiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlzay0+c2tfd3JpdGVfcGVuZGluZysrOwogCQlkb25lID0gc2tfd2FpdF9ldmVudChzaywgdGltZW9fcCwKKwkJCQkgICAgICFzay0+c2tfZXJyICYmCiAJCQkJICAgICAhKCgxIDw8IHNrLT5za19zdGF0ZSkgJiAKIAkJCQkgICAgICAgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkpOwogCQlmaW5pc2hfd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0KTsKQEAgLTEzNyw3ICsxMzksOSBAQAogCiAJCXNldF9iaXQoU09DS19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOwogCQlzay0+c2tfd3JpdGVfcGVuZGluZysrOwotCQlza193YWl0X2V2ZW50KHNrLCAmY3VycmVudF90aW1lbywgc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSAmJgorCQlza193YWl0X2V2ZW50KHNrLCAmY3VycmVudF90aW1lbywgIXNrLT5za19lcnIgJiYgCisJCQkJCQkgICEoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikgJiYKKwkJCQkJCSAgc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSAmJgogCQkJCQkJICB2bV93YWl0KTsKIAkJc2stPnNrX3dyaXRlX3BlbmRpbmctLTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvdXRpbHMuYyBiL25ldC9jb3JlL3V0aWxzLmMKaW5kZXggN2I1OTcwZi4uNTg3ZWI3NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvdXRpbHMuYworKysgYi9uZXQvY29yZS91dGlscy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkJaWYgKCpzdHIgIT0gJ1wwJykKIAkJewogCQkJdmFsID0gMDsKLQkJCXdoaWxlICgqc3RyICE9ICdcMCcgJiYgKnN0ciAhPSAnLicpCisJCQl3aGlsZSAoKnN0ciAhPSAnXDAnICYmICpzdHIgIT0gJy4nICYmICpzdHIgIT0gJ1xuJykKIAkJCXsKIAkJCQl2YWwgKj0gMTA7CiAJCQkJdmFsICs9ICpzdHIgLSAnMCc7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9NYWtlZmlsZSBiL25ldC9kY2NwL01ha2VmaWxlCmluZGV4IDM0NGE4ZGEuLjg3YjI3ZmYgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL01ha2VmaWxlCisrKyBiL25ldC9kY2NwL01ha2VmaWxlCkBAIC0xLDMgKzEsNyBAQAorb2JqLSQoQ09ORklHX0lQVjYpICs9IGRjY3BfaXB2Ni5vCisKK2RjY3BfaXB2Ni15IDo9IGlwdjYubworCiBvYmotJChDT05GSUdfSVBfRENDUCkgKz0gZGNjcC5vCiAKIGRjY3AteSA6PSBjY2lkLm8gaW5wdXQubyBpcHY0Lm8gbWluaXNvY2tzLm8gb3B0aW9ucy5vIG91dHB1dC5vIHByb3RvLm8gXApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmMgYi9uZXQvZGNjcC9hY2t2ZWMuYwppbmRleCBjOWE2MmNjLi5jZTljYjc3IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuYworKysgYi9uZXQvZGNjcC9hY2t2ZWMuYwpAQCAtNTUsOCArNTUsOCBAQAogCWZyb20gPSBhdi0+ZGNjcGF2X2J1ZiArIGF2LT5kY2NwYXZfYnVmX2hlYWQ7CiAKIAkvKiBDaGVjayBpZiBidWZfaGVhZCB3cmFwcyAqLwotCWlmIChhdi0+ZGNjcGF2X2J1Zl9oZWFkICsgbGVuID4gYXYtPmRjY3Bhdl92ZWNfbGVuKSB7Ci0JCWNvbnN0IHUzMiB0YWlsc2l6ZSA9IChhdi0+ZGNjcGF2X3ZlY19sZW4gLSBhdi0+ZGNjcGF2X2J1Zl9oZWFkKTsKKwlpZiAoKGludClhdi0+ZGNjcGF2X2J1Zl9oZWFkICsgbGVuID4gYXYtPmRjY3Bhdl92ZWNfbGVuKSB7CisJCWNvbnN0IHUzMiB0YWlsc2l6ZSA9IGF2LT5kY2NwYXZfdmVjX2xlbiAtIGF2LT5kY2NwYXZfYnVmX2hlYWQ7CiAKIAkJbWVtY3B5KHRvLCBmcm9tLCB0YWlsc2l6ZSk7CiAJCXRvICAgKz0gdGFpbHNpemU7CkBAIC05Myw4ICs5MywxNCBAQAogc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyhjb25zdCB1bnNpZ25lZCBpbnQgbGVuLAogCQkJCSAgICAgIGNvbnN0IGdmcF90IHByaW9yaXR5KQogewotCXN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYgPSBrbWFsbG9jKHNpemVvZigqYXYpICsgbGVuLCBwcmlvcml0eSk7CisJc3RydWN0IGRjY3BfYWNrdmVjICphdjsKIAorCUJVR19PTihsZW4gPT0gMCk7CisKKwlpZiAobGVuID4gRENDUF9NQVhfQUNLVkVDX0xFTikKKwkJcmV0dXJuIE5VTEw7CisKKwlhdiA9IGttYWxsb2Moc2l6ZW9mKCphdikgKyBsZW4sIHByaW9yaXR5KTsKIAlpZiAoYXYgIT0gTlVMTCkgewogCQlhdi0+ZGNjcGF2X2J1Zl9sZW4JPSBsZW47CiAJCWF2LT5kY2NwYXZfYnVmX2hlYWQJPQpAQCAtMTE3LDEzICsxMjMsMTMgQEAKIH0KIAogc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19zdGF0ZShjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAotCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKKwkJCQkgICBjb25zdCB1OCBpbmRleCkKIHsKIAlyZXR1cm4gYXYtPmRjY3Bhdl9idWZbaW5kZXhdICYgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19sZW4oY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdiwKLQkJCQkgY29uc3QgdW5zaWduZWQgaW50IGluZGV4KQorCQkJCSBjb25zdCB1OCBpbmRleCkKIHsKIAlyZXR1cm4gYXYtPmRjY3Bhdl9idWZbaW5kZXhdICYgRENDUF9BQ0tWRUNfTEVOX01BU0s7CiB9CkBAIC0xMzUsNyArMTQxLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2t2ZWNfc2V0X2J1Zl9oZWFkX3N0YXRlKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCiAJCQkJCQkgY29uc3QgdW5zaWduZWQgaW50IHBhY2tldHMsCi0JCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RhdGUpCisJCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgZ2FwOwogCXNpZ25lZCBsb25nIG5ld19oZWFkOwpAQCAtMjIzLDcgKzIyOSw3IEBACiAJCSAqCWNvdWxkIHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiB0aGlzIHNjYW4uKQogCQkgKi8KIAkJdTY0IGRlbHRhID0gZGNjcF9kZWx0YV9zZXFubyhhY2tubywgYXYtPmRjY3Bhdl9idWZfYWNrbm8pOwotCQl1bnNpZ25lZCBpbnQgaW5kZXggPSBhdi0+ZGNjcGF2X2J1Zl9oZWFkOworCQl1OCBpbmRleCA9IGF2LT5kY2NwYXZfYnVmX2hlYWQ7CiAKIAkJd2hpbGUgKDEpIHsKIAkJCWNvbnN0IHU4IGxlbiA9IGRjY3BfYWNrdmVjX2xlbihhdiwgaW5kZXgpOwpAQCAtMjkxLDcgKzI5Nyw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfdHJvd19hd2F5X2Fja19yZWNvcmQoc3RydWN0IGRjY3BfYWNrdmVjICphdikKK3N0YXRpYyB2b2lkIGRjY3BfYWNrdmVjX3Rocm93X2F3YXlfYWNrX3JlY29yZChzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQogewogCS8qCiAJICogQXMgd2UncmUga2VlcGluZyB0cmFjayBvZiB0aGUgYWNrIHZlY3RvciBzaXplIChkY2NwYXZfdmVjX2xlbikgYW5kCkBAIC0zMDEsOSArMzA3LDEwIEBACiAJICogZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTEudHh0IEFwcGVuZGl4IEEuIC1hY21lCiAJICovCiAjaWYgMAotCWF2LT5kY2NwYXZfYnVmX3RhaWwgPSBhdi0+ZGNjcGF2X2Fja19wdHIgKyAxOwotCWlmIChhdi0+ZGNjcGF2X2J1Zl90YWlsID49IGF2LT5kY2NwYXZfdmVjX2xlbikKLQkJYXYtPmRjY3Bhdl9idWZfdGFpbCAtPSBhdi0+ZGNjcGF2X3ZlY19sZW47CisJdTMyIG5ld19idWZfdGFpbCA9IGF2LT5kY2NwYXZfYWNrX3B0ciArIDE7CisJaWYgKG5ld19idWZfdGFpbCA+PSBhdi0+ZGNjcGF2X3ZlY19sZW4pCisJCW5ld19idWZfdGFpbCAtPSBhdi0+ZGNjcGF2X3ZlY19sZW47CisJYXYtPmRjY3Bhdl9idWZfdGFpbCA9IG5ld19idWZfdGFpbDsKICNlbmRpZgogCWF2LT5kY2NwYXZfdmVjX2xlbiAtPSBhdi0+ZGNjcGF2X3NlbnRfbGVuOwogfQpAQCAtMzI2LDcgKzMzMyw3IEBACiAJCQkgICAgICBkZWJ1Z19wcmVmaXgsIDEsCiAJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWF2LT5kY2NwYXZfYWNrX3NlcW5vLAogCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdi0+ZGNjcGF2X2Fja19hY2tubyk7Ci0JCWRjY3BfYWNrdmVjX3Ryb3dfYXdheV9hY2tfcmVjb3JkKGF2KTsKKwkJZGNjcF9hY2t2ZWNfdGhyb3dfYXdheV9hY2tfcmVjb3JkKGF2KTsKIAkJYXYtPmRjY3Bhdl9hY2tfc2Vxbm8gPSBEQ0NQX01BWF9TRVFOTyArIDE7CiAJfQogfQpAQCAtMzg5LDcgKzM5Niw3IEBACiAJCQkJCSAgICAgIGF2LT5kY2NwYXZfYWNrX3NlcW5vLAogCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQogCQkJCQkgICAgICBhdi0+ZGNjcGF2X2Fja19hY2tubyk7Ci0JCQkJZGNjcF9hY2t2ZWNfdHJvd19hd2F5X2Fja19yZWNvcmQoYXYpOworCQkJCWRjY3BfYWNrdmVjX3Rocm93X2F3YXlfYWNrX3JlY29yZChhdik7CiAJCQl9CiAJCQkvKgogCQkJICogSWYgZGNjcGF2X2Fja19zZXFubyB3YXMgbm90IHJlY2VpdmVkLCBubyBwcm9ibGVtCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IGQwZmQ2YzYuLmY3ZGZiNWYgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC01NCwxNiArNTQsMTYgQEAKICAqIEBkY2NwYXZfYnVmIC0gY2lyY3VsYXIgYnVmZmVyIG9mIGFja25vd2xlZGdlYWJsZSBwYWNrZXRzCiAgKi8KIHN0cnVjdCBkY2NwX2Fja3ZlYyB7Ci0JdW5zaWduZWQgaW50CWRjY3Bhdl9idWZfaGVhZDsKLQl1bnNpZ25lZCBpbnQJZGNjcGF2X2J1Zl90YWlsOwogCXU2NAkJZGNjcGF2X2J1Zl9hY2tubzsKIAl1NjQJCWRjY3Bhdl9hY2tfc2Vxbm87CiAJdTY0CQlkY2NwYXZfYWNrX2Fja25vOwotCXVuc2lnbmVkIGludAlkY2NwYXZfYWNrX3B0cjsKLQl1bnNpZ25lZCBpbnQJZGNjcGF2X3NlbnRfbGVuOwotCXVuc2lnbmVkIGludAlkY2NwYXZfdmVjX2xlbjsKLQl1bnNpZ25lZCBpbnQJZGNjcGF2X2J1Zl9sZW47CiAJc3RydWN0IHRpbWV2YWwJZGNjcGF2X3RpbWU7CisJdTgJCWRjY3Bhdl9idWZfaGVhZDsKKwl1OAkJZGNjcGF2X2J1Zl90YWlsOworCXU4CQlkY2NwYXZfYWNrX3B0cjsKKwl1OAkJZGNjcGF2X3NlbnRfbGVuOworCXU4CQlkY2NwYXZfdmVjX2xlbjsKKwl1OAkJZGNjcGF2X2J1Zl9sZW47CiAJdTgJCWRjY3Bhdl9idWZfbm9uY2U7CiAJdTgJCWRjY3Bhdl9hY2tfbm9uY2U7CiAJdTgJCWRjY3Bhdl9idWZbMF07CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmggYi9uZXQvZGNjcC9jY2lkLmgKaW5kZXggYzM3ZWVlYS4uZGU2ODFjNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5oCisrKyBiL25ldC9kY2NwL2NjaWQuaApAQCAtMjEsNiArMjEsOCBAQAogCiAjZGVmaW5lIENDSURfTUFYIDI1NQogCitzdHJ1Y3QgdGNwX2luZm87CisKIHN0cnVjdCBjY2lkIHsKIAl1bnNpZ25lZCBjaGFyCWNjaWRfaWQ7CiAJY29uc3QgY2hhcgkqY2NpZF9uYW1lOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGNjcC5oIGIvbmV0L2RjY3AvZGNjcC5oCmluZGV4IGY5N2I4NWQuLjkzZjI2ZGQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2RjY3AuaAorKysgYi9uZXQvZGNjcC9kY2NwLmgKQEAgLTU5LDcgKzU5LDcgQEAKIAogI2RlZmluZSBEQ0NQX1JUT19NQVggKCh1bnNpZ25lZCkoMTIwICogSFopKSAvKiBGSVhNRTogdXNpbmcgVENQIHZhbHVlICovCiAKLWV4dGVybiBzdHJ1Y3QgcHJvdG8gZGNjcF92NF9wcm90OworZXh0ZXJuIHN0cnVjdCBwcm90byBkY2NwX3Byb3Q7CiAKIC8qIGlzIHNlcTEgPCBzZXEyID8gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGJlZm9yZTQ4KGNvbnN0IHU2NCBzZXExLCBjb25zdCB1NjQgc2VxMikKQEAgLTIyOCw2ICsyMjgsOSBAQAogZXh0ZXJuIGludCBkY2NwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwgY29uc3QgdW5zaWduZWQgbGVuKTsKIAorZXh0ZXJuIGludCBkY2NwX3Y0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludCBkY2NwX3Y0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOworCiBleHRlcm4gdm9pZAkJZGNjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYJKmRjY3BfbWFrZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCkBAIC0yMzgsNiArMjQxLDcgQEAKIAogZXh0ZXJuIGludAkgICBkY2NwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQJICAgZGNjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkCSAgIGRjY3BfdW5oYXNoKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gaW50CSAgIGRjY3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKIGV4dGVybiBpbnQJICAgZGNjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKQEAgLTI0OSw2ICsyNTMsMTMgQEAKIAkJCQlzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBub25ibG9jaywKIAkJCQlpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pOwogZXh0ZXJuIHZvaWQJICAgZGNjcF9zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIGludCBob3cpOworZXh0ZXJuIGludAkgICBpbmV0X2RjY3BfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZGNjcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgICBwb2xsX3RhYmxlICp3YWl0KTsKK2V4dGVybiB2b2lkCSAgIGRjY3BfdjRfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CSAgIGRjY3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCQkJICAgaW50IGFkZHJfbGVuKTsKIAogZXh0ZXJuIGludAkgICBkY2NwX3Y0X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgIGNvbnN0IHUzMiBzYWRkciwgY29uc3QgdTMyIGRhZGRyKTsKQEAgLTI1Niw2ICsyNjcsMTcgQEAKIGV4dGVybiBpbnQJICAgZGNjcF92NF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICBlbnVtIGRjY3BfcmVzZXRfY29kZXMgY29kZSk7CiBleHRlcm4gdm9pZAkgICBkY2NwX3NlbmRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgYWN0aXZlKTsKK2V4dGVybiBpbnQJICAgZGNjcF9pbnZhbGlkX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIGlubGluZSBpbnQgZGNjcF9iYWRfc2VydmljZV9jb2RlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJY29uc3QgX191MzIgc2VydmljZSkKK3sKKwljb25zdCBzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCisJaWYgKGRwLT5kY2Nwc19zZXJ2aWNlID09IHNlcnZpY2UpCisJCXJldHVybiAwOworCXJldHVybiAhZGNjcF9saXN0X2hhc19zZXJ2aWNlKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QsIHNlcnZpY2UpOworfQogCiBzdHJ1Y3QgZGNjcF9za2JfY2IgewogCV9fdTggIGRjY3BkX3R5cGU6NDsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RpYWcuYyBiL25ldC9kY2NwL2RpYWcuYwppbmRleCBmNjc1ZDhlNi4uM2Y3OGMwMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGlhZy5jCisrKyBiL25ldC9kY2NwL2RpYWcuYwpAQCAtMjgsNyArMjgsNyBAQAogCWluZm8tPnRjcGlfcmV0cmFuc21pdHMJPSBpY3NrLT5pY3NrX3JldHJhbnNtaXRzOwogCWluZm8tPnRjcGlfcHJvYmVzCT0gaWNzay0+aWNza19wcm9iZXNfb3V0OwogCWluZm8tPnRjcGlfYmFja29mZgk9IGljc2stPmljc2tfYmFja29mZjsKLQlpbmZvLT50Y3BpX3BtdHUJCT0gZHAtPmRjY3BzX3BtdHVfY29va2llOworCWluZm8tPnRjcGlfcG10dQkJPSBpY3NrLT5pY3NrX3BtdHVfY29va2llOwogCiAJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcikKIAkJaW5mby0+dGNwaV9vcHRpb25zIHw9IFRDUElfT1BUX1NBQ0s7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pbnB1dC5jIGIvbmV0L2RjY3AvaW5wdXQuYwppbmRleCAzNDU0ZDU5Li5iNmNiYTcyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pbnB1dC5jCisrKyBiL25ldC9kY2NwL2lucHV0LmMKQEAgLTE1MSwyOSArMTUxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBkY2NwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwgY29uc3QgdW5zaWduZWQgbGVuKQorc3RhdGljIGlubGluZSBpbnQgX19kY2NwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBjb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoLAorCQkJCQkgY29uc3QgdW5zaWduZWQgbGVuKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKLQlpZiAoZGNjcF9jaGVja19zZXFubyhzaywgc2tiKSkKLQkJZ290byBkaXNjYXJkOwotCi0JaWYgKGRjY3BfcGFyc2Vfb3B0aW9ucyhzaywgc2tiKSkKLQkJZ290byBkaXNjYXJkOwotCi0JaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEgIT0gRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKQotCQlkY2NwX2V2ZW50X2Fja19yZWN2KHNrLCBza2IpOwotCi0JaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgotCSAgICBkY2NwX2Fja3ZlY19hZGQoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYywgc2ssCi0JCQkgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxLAotCQkJICAgIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVEKSkKLQkJZ290byBkaXNjYXJkOwotCi0JY2NpZF9oY19yeF9wYWNrZXRfcmVjdihkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgc2ssIHNrYik7Ci0JY2NpZF9oY190eF9wYWNrZXRfcmVjdihkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIHNrYik7Ci0KIAlzd2l0Y2ggKGRjY3BfaGRyKHNrYiktPmRjY3BoX3R5cGUpIHsKIAljYXNlIERDQ1BfUEtUX0RBVEFBQ0s6CiAJY2FzZSBEQ0NQX1BLVF9EQVRBOgpAQCAtMjUwLDYgKzIzMywzNyBAQAogCXJldHVybiAwOwogfQogCitpbnQgZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIGNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGgsIGNvbnN0IHVuc2lnbmVkIGxlbikKK3sKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCisJaWYgKGRjY3BfY2hlY2tfc2Vxbm8oc2ssIHNrYikpCisJCWdvdG8gZGlzY2FyZDsKKworCWlmIChkY2NwX3BhcnNlX29wdGlvbnMoc2ssIHNrYikpCisJCWdvdG8gZGlzY2FyZDsKKworCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxICE9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKKwkJZGNjcF9ldmVudF9hY2tfcmVjdihzaywgc2tiKTsKKworCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKKwkgICAgZGNjcF9hY2t2ZWNfYWRkKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAorCQkJICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKKwkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRCkpCisJCWdvdG8gZGlzY2FyZDsKKworCWNjaWRfaGNfcnhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrLCBza2IpOworCWNjaWRfaGNfdHhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOworCisJcmV0dXJuIF9fZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgZGgsIGxlbik7CitkaXNjYXJkOgorCV9fa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcmN2X2VzdGFibGlzaGVkKTsKKwogc3RhdGljIGludCBkY2NwX3Jjdl9yZXF1ZXN0X3NlbnRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwKQEAgLTI4Niw2ICszMDAsMTIgQEAKIAkJCWdvdG8gb3V0X2ludmFsaWRfcGFja2V0OwogCQl9CiAKKyAgICAgICAgICAgICAgICBpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yICYmCisgICAgICAgICAgICAgICAgICAgIGRjY3BfYWNrdmVjX2FkZChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X2ludmFsaWRfcGFja2V0OyAvKiBGSVhNRTogY2hhbmdlIGVycm9yIGNvZGUgKi8KKwogCQlkcC0+ZGNjcHNfaXNyID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxOwogCQlkY2NwX3VwZGF0ZV9nc3Ioc2ssIGRwLT5kY2Nwc19pc3IpOwogCQkvKgpAQCAtMzA5LDcgKzMyOSw3IEBACiAJCQlnb3RvIG91dF9pbnZhbGlkX3BhY2tldDsKIAkJfQogCi0JCWRjY3Bfc3luY19tc3Moc2ssIGRwLT5kY2Nwc19wbXR1X2Nvb2tpZSk7CisJCWRjY3Bfc3luY19tc3Moc2ssIGljc2stPmljc2tfcG10dV9jb29raWUpOwogCiAJCS8qCiAJCSAqICAgIFN0ZXAgMTA6IFByb2Nlc3MgUkVRVUVTVCBzdGF0ZSAoc2Vjb25kIHBhcnQpCkBAIC0zMjksNyArMzQ5LDcgQEAKIAkJZGNjcF9zZXRfc3RhdGUoc2ssIERDQ1BfUEFSVE9QRU4pOwogCiAJCS8qIE1ha2Ugc3VyZSBzb2NrZXQgaXMgcm91dGVkLCBmb3IgY29ycmVjdCBtZXRyaWNzLiAqLwotCQlpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKHNrKTsKKwkJaWNzay0+aWNza19hZl9vcHMtPnJlYnVpbGRfaGVhZGVyKHNrKTsKIAogCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkgewogCQkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CkBAIC0zOTgsOSArNDE4LDkgQEAKIAogCQlpZiAoZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfREFUQUFDSyB8fAogCQkgICAgZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfREFUQSkgewotCQkJZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgZGgsIGxlbik7CisJCQlfX2RjY3BfcmN2X2VzdGFibGlzaGVkKHNrLCBza2IsIGRoLCBsZW4pOwogCQkJcXVldWVkID0gMTsgLyogcGFja2V0IHdhcyBxdWV1ZWQKLQkJCQkgICAgICAgKGJ5IGRjY3BfcmN2X2VzdGFibGlzaGVkKSAqLworCQkJCSAgICAgICAoYnkgX19kY2NwX3Jjdl9lc3RhYmxpc2hlZCkgKi8KIAkJfQogCQlicmVhazsKIAl9CkBAIC00NDQsNyArNDY0LDggQEAKIAkgKi8KIAlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfTElTVEVOKSB7CiAJCWlmIChkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9SRVFVRVNUKSB7Ci0JCQlpZiAoZGNjcF92NF9jb25uX3JlcXVlc3Qoc2ssIHNrYikgPCAwKQorCQkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPmNvbm5fcmVxdWVzdChzaywKKwkJCQkJCQkJICAgIHNrYikgPCAwKQogCQkJCXJldHVybiAxOwogCiAJCQkvKiBGSVhNRTogZG8gY29uZ2VzdGlvbiBjb250cm9sIGluaXRpYWxpemF0aW9uICovCkBAIC00NzEsMTQgKzQ5MiwxNCBAQAogCQlpZiAoZGNiLT5kY2NwZF9hY2tfc2VxICE9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKIAkJCWRjY3BfZXZlbnRfYWNrX3JlY3Yoc2ssIHNrYik7CiAKLQkJY2NpZF9oY19yeF9wYWNrZXRfcmVjdihkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgc2ssIHNrYik7Ci0JCWNjaWRfaGNfdHhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOwotCiAgCQlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yICYmCiAJCSAgICBkY2NwX2Fja3ZlY19hZGQoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYywgc2ssCiAgCQkJCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCiAgCQkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRCkpCiAgCQkJZ290byBkaXNjYXJkOworCisJCWNjaWRfaGNfcnhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrLCBza2IpOworCQljY2lkX2hjX3R4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY190eF9jY2lkLCBzaywgc2tiKTsKIAl9CiAKIAkvKgpAQCAtNTY2LDMgKzU4Nyw1IEBACiAJfQogCXJldHVybiAwOwogfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Jjdl9zdGF0ZV9wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCA2NTZlMTNlLi4zZjI0NDY3IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC0xOSw3ICsxOSw5IEBACiAKICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2hhc2h0YWJsZXMuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvdGltZXdhaXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIApAQCAtMzcsNyArMzksOCBAQAogCiBzdGF0aWMgaW50IGRjY3BfdjRfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewotCXJldHVybiBpbmV0X2Nza19nZXRfcG9ydCgmZGNjcF9oYXNoaW5mbywgc2ssIHNudW0pOworCXJldHVybiBpbmV0X2Nza19nZXRfcG9ydCgmZGNjcF9oYXNoaW5mbywgc2ssIHNudW0sCisJCQkJIGluZXRfY3NrX2JpbmRfY29uZmxpY3QpOwogfQogCiBzdGF0aWMgdm9pZCBkY2NwX3Y0X2hhc2goc3RydWN0IHNvY2sgKnNrKQpAQCAtNDUsMTcxICs0OCwxNCBAQAogCWluZXRfaGFzaCgmZGNjcF9oYXNoaW5mbywgc2spOwogfQogCi1zdGF0aWMgdm9pZCBkY2NwX3Y0X3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spCit2b2lkIGRjY3BfdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpbmV0X3VuaGFzaCgmZGNjcF9oYXNoaW5mbywgc2spOwogfQogCi0vKiBjYWxsZWQgd2l0aCBsb2NhbCBiaCBkaXNhYmxlZCAqLwotc3RhdGljIGludCBfX2RjY3BfdjRfY2hlY2tfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX3UxNiBscG9ydCwKLQkJCQkgICAgICBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICoqdHdwKQotewotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQljb25zdCB1MzIgZGFkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7Ci0JY29uc3QgdTMyIHNhZGRyID0gaW5ldC0+ZGFkZHI7Ci0JY29uc3QgaW50IGRpZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7Ci0JSU5FVF9BRERSX0NPT0tJRShhY29va2llLCBzYWRkciwgZGFkZHIpCi0JY29uc3QgX191MzIgcG9ydHMgPSBJTkVUX0NPTUJJTkVEX1BPUlRTKGluZXQtPmRwb3J0LCBscG9ydCk7Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0X2VoYXNoZm4oZGFkZHIsIGxwb3J0LCBzYWRkciwgaW5ldC0+ZHBvcnQpOwotCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KCZkY2NwX2hhc2hpbmZvLCBoYXNoKTsKLQljb25zdCBzdHJ1Y3Qgc29jayAqc2syOwotCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3OworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF91bmhhc2gpOwogCi0JcHJlZmV0Y2goaGVhZC0+Y2hhaW4uZmlyc3QpOwotCXdyaXRlX2xvY2soJmhlYWQtPmxvY2spOwotCi0JLyogQ2hlY2sgVElNRS1XQUlUIHNvY2tldHMgZmlyc3QuICovCi0Jc2tfZm9yX2VhY2goc2syLCBub2RlLCAmKGhlYWQgKyBkY2NwX2hhc2hpbmZvLmVoYXNoX3NpemUpLT5jaGFpbikgewotCQl0dyA9IGluZXRfdHdzayhzazIpOwotCi0JCWlmIChJTkVUX1RXX01BVENIKHNrMiwgaGFzaCwgYWNvb2tpZSwgc2FkZHIsIGRhZGRyLCBwb3J0cywgZGlmKSkKLQkJCWdvdG8gbm90X3VuaXF1ZTsKLQl9Ci0JdHcgPSBOVUxMOwotCi0JLyogQW5kIGVzdGFibGlzaGVkIHBhcnQuLi4gKi8KLQlza19mb3JfZWFjaChzazIsIG5vZGUsICZoZWFkLT5jaGFpbikgewotCQlpZiAoSU5FVF9NQVRDSChzazIsIGhhc2gsIGFjb29raWUsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpCi0JCQlnb3RvIG5vdF91bmlxdWU7Ci0JfQotCi0JLyogTXVzdCByZWNvcmQgbnVtIGFuZCBzcG9ydCBub3cuIE90aGVyd2lzZSB3ZSB3aWxsIHNlZQotCSAqIGluIGhhc2ggdGFibGUgc29ja2V0IHdpdGggYSBmdW5ueSBpZGVudGl0eS4gKi8KLQlpbmV0LT5udW0gPSBscG9ydDsKLQlpbmV0LT5zcG9ydCA9IGh0b25zKGxwb3J0KTsKLQlzay0+c2tfaGFzaCA9IGhhc2g7Ci0JQlVHX1RSQVAoc2tfdW5oYXNoZWQoc2spKTsKLQlfX3NrX2FkZF9ub2RlKHNrLCAmaGVhZC0+Y2hhaW4pOwotCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKLQl3cml0ZV91bmxvY2soJmhlYWQtPmxvY2spOwotCi0JaWYgKHR3cCAhPSBOVUxMKSB7Ci0JCSp0d3AgPSB0dzsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7Ci0JfSBlbHNlIGlmICh0dyAhPSBOVUxMKSB7Ci0JCS8qIFNpbGx5LiBTaG91bGQgaGFzaC1kYW5jZSBpbnN0ZWFkLi4uICovCi0JCWluZXRfdHdza19kZXNjaGVkdWxlKHR3LCAmZGNjcF9kZWF0aF9yb3cpOwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9USU1FV0FJVFJFQ1lDTEVEKTsKLQotCQlpbmV0X3R3c2tfcHV0KHR3KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotbm90X3VuaXF1ZToKLQl3cml0ZV91bmxvY2soJmhlYWQtPmxvY2spOwotCXJldHVybiAtRUFERFJOT1RBVkFJTDsKLX0KLQotLyoKLSAqIEJpbmQgYSBwb3J0IGZvciBhIGNvbm5lY3Qgb3BlcmF0aW9uIGFuZCBoYXNoIGl0LgotICovCi1zdGF0aWMgaW50IGRjY3BfdjRfaGFzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCB1bnNpZ25lZCBzaG9ydCBzbnVtID0gaW5ldF9zayhzayktPm51bTsKLSAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpoZWFkOwotIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7Ci0JaW50IHJldDsKLQotIAlpZiAoc251bSA9PSAwKSB7Ci0gCQlpbnQgbG93ID0gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMF07Ci0gCQlpbnQgaGlnaCA9IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzFdOwotIAkJaW50IHJlbWFpbmluZyA9IChoaWdoIC0gbG93KSArIDE7Ci0gCQlpbnQgcm92ZXIgPSBuZXRfcmFuZG9tKCkgJSAoaGlnaCAtIGxvdykgKyBsb3c7Ci0JCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotIAkJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBOVUxMOwotCi0gCQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0gCQlkbyB7Ci0gCQkJaGVhZCA9ICZkY2NwX2hhc2hpbmZvLmJoYXNoW2luZXRfYmhhc2hmbihyb3ZlciwKLQkJCQkJCSAgICBkY2NwX2hhc2hpbmZvLmJoYXNoX3NpemUpXTsKLSAJCQlzcGluX2xvY2soJmhlYWQtPmxvY2spOwotCi0gCQkJLyogRG9lcyBub3QgYm90aGVyIHdpdGggcmN2X3NhZGRyIGNoZWNrcywKLSAJCQkgKiBiZWNhdXNlIHRoZSBlc3RhYmxpc2hlZCBjaGVjayBpcyBhbHJlYWR5Ci0gCQkJICogdW5pcXVlIGVub3VnaC4KLSAJCQkgKi8KLQkJCWluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIsIG5vZGUsICZoZWFkLT5jaGFpbikgewotIAkJCQlpZiAodGItPnBvcnQgPT0gcm92ZXIpIHsKLSAJCQkJCUJVR19UUkFQKCFobGlzdF9lbXB0eSgmdGItPm93bmVycykpOwotIAkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPj0gMCkKLSAJCQkJCQlnb3RvIG5leHRfcG9ydDsKLSAJCQkJCWlmICghX19kY2NwX3Y0X2NoZWNrX2VzdGFibGlzaGVkKHNrLAotCQkJCQkJCQkJIHJvdmVyLAotCQkJCQkJCQkJICZ0dykpCi0gCQkJCQkJZ290byBvazsKLSAJCQkJCWdvdG8gbmV4dF9wb3J0OwotIAkJCQl9Ci0gCQkJfQotCi0gCQkJdGIgPSBpbmV0X2JpbmRfYnVja2V0X2NyZWF0ZShkY2NwX2hhc2hpbmZvLmJpbmRfYnVja2V0X2NhY2hlcCwKLQkJCQkJCSAgICAgaGVhZCwgcm92ZXIpOwotIAkJCWlmICh0YiA9PSBOVUxMKSB7Ci0gCQkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKLSAJCQkJYnJlYWs7Ci0gCQkJfQotIAkJCXRiLT5mYXN0cmV1c2UgPSAtMTsKLSAJCQlnb3RvIG9rOwotCi0gCQluZXh0X3BvcnQ6Ci0gCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwotIAkJCWlmICgrK3JvdmVyID4gaGlnaCkKLSAJCQkJcm92ZXIgPSBsb3c7Ci0gCQl9IHdoaWxlICgtLXJlbWFpbmluZyA+IDApOwotCi0gCQlsb2NhbF9iaF9lbmFibGUoKTsKLQotIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi1vazoKLSAJCS8qIEFsbCBsb2NrcyBzdGlsbCBoZWxkIGFuZCBiaHMgZGlzYWJsZWQgKi8KLSAJCWluZXRfYmluZF9oYXNoKHNrLCB0Yiwgcm92ZXIpOwotCQlpZiAoc2tfdW5oYXNoZWQoc2spKSB7Ci0gCQkJaW5ldF9zayhzayktPnNwb3J0ID0gaHRvbnMocm92ZXIpOwotIAkJCV9faW5ldF9oYXNoKCZkY2NwX2hhc2hpbmZvLCBzaywgMCk7Ci0gCQl9Ci0gCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7Ci0KLSAJCWlmICh0dyAhPSBOVUxMKSB7Ci0gCQkJaW5ldF90d3NrX2Rlc2NoZWR1bGUodHcsICZkY2NwX2RlYXRoX3Jvdyk7Ci0gCQkJaW5ldF90d3NrX3B1dCh0dyk7Ci0gCQl9Ci0KLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7Ci0gCX0KLQotIAloZWFkID0gJmRjY3BfaGFzaGluZm8uYmhhc2hbaW5ldF9iaGFzaGZuKHNudW0sCi0JCQkJCQkgZGNjcF9oYXNoaW5mby5iaGFzaF9zaXplKV07Ci0gCXRiICAgPSBpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoOwotCXNwaW5fbG9ja19iaCgmaGVhZC0+bG9jayk7Ci0JaWYgKHNrX2hlYWQoJnRiLT5vd25lcnMpID09IHNrICYmIHNrLT5za19iaW5kX25vZGUubmV4dCA9PSBOVUxMKSB7Ci0JCV9faW5ldF9oYXNoKCZkY2NwX2hhc2hpbmZvLCBzaywgMCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZoZWFkLT5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwotCQkvKiBObyBkZWZpbml0ZSBhbnN3ZXIuLi4gV2FsayB0byBlc3RhYmxpc2hlZCBoYXNoIHRhYmxlICovCi0JCXJldCA9IF9fZGNjcF92NF9jaGVja19lc3RhYmxpc2hlZChzaywgc251bSwgTlVMTCk7Ci1vdXQ6Ci0JCWxvY2FsX2JoX2VuYWJsZSgpOwotCQlyZXR1cm4gcmV0OwotCX0KLX0KLQotc3RhdGljIGludCBkY2NwX3Y0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAotCQkJICAgaW50IGFkZHJfbGVuKQoraW50IGRjY3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTI1OSw5ICsxMDUsOSBAQAogCWluZXQtPmRwb3J0ID0gdXNpbi0+c2luX3BvcnQ7CiAJaW5ldC0+ZGFkZHIgPSBkYWRkcjsKIAotCWRwLT5kY2Nwc19leHRfaGVhZGVyX2xlbiA9IDA7CisJaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKIAlpZiAoaW5ldC0+b3B0ICE9IE5VTEwpCi0JCWRwLT5kY2Nwc19leHRfaGVhZGVyX2xlbiA9IGluZXQtPm9wdC0+b3B0bGVuOworCQlpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gPSBpbmV0LT5vcHQtPm9wdGxlbjsKIAkvKgogCSAqIFNvY2tldCBpZGVudGl0eSBpcyBzdGlsbCB1bmtub3duIChzcG9ydCBtYXkgYmUgemVybykuCiAJICogSG93ZXZlciB3ZSBzZXQgc3RhdGUgdG8gRENDUF9SRVFVRVNUSU5HIGFuZCBub3QgcmVsZWFzaW5nIHNvY2tldApAQCAtMjY5LDcgKzExNSw3IEBACiAJICogY29tcGxldGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgdGhpcy4KIAkgKi8KIAlkY2NwX3NldF9zdGF0ZShzaywgRENDUF9SRVFVRVNUSU5HKTsKLQllcnIgPSBkY2NwX3Y0X2hhc2hfY29ubmVjdChzayk7CisJZXJyID0gaW5ldF9oYXNoX2Nvbm5lY3QoJmRjY3BfZGVhdGhfcm93LCBzayk7CiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIGZhaWx1cmU7CiAKQEAgLTI4NywxNiArMTMzLDYgQEAKIAkJCQkJCQkgICAgdXNpbi0+c2luX3BvcnQpOwogCWRjY3BfdXBkYXRlX2dzcyhzaywgZHAtPmRjY3BzX2lzcyk7CiAKLQkvKgotCSAqIFNXTCBhbmQgQVdMIGFyZSBpbml0aWFsbHkgYWRqdXN0ZWQgc28gdGhhdCB0aGV5IGFyZSBub3QgbGVzcyB0aGFuCi0JICogdGhlIGluaXRpYWwgU2VxdWVuY2UgTnVtYmVycyByZWNlaXZlZCBhbmQgc2VudCwgcmVzcGVjdGl2ZWx5OgotCSAqCVNXTCA6PSBtYXgoR1NSICsgMSAtIGZsb29yKFcvNCksIElTUiksCi0JICoJQVdMIDo9IG1heChHU1MgLSBXJyArIDEsIElTUykuCi0JICogVGhlc2UgYWRqdXN0bWVudHMgTVVTVCBiZSBhcHBsaWVkIG9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLQkgKiBjb25uZWN0aW9uLgotCSAqLwotCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfYXdsLCBtYXg0OChkcC0+ZGNjcHNfYXdsLCBkcC0+ZGNjcHNfaXNzKSk7Ci0KIAlpbmV0LT5pZCA9IGRwLT5kY2Nwc19pc3MgXiBqaWZmaWVzOwogCiAJZXJyID0gZGNjcF9jb25uZWN0KHNrKTsKQEAgLTMxNiw2ICsxNTIsOCBAQAogCWdvdG8gb3V0OwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X2Nvbm5lY3QpOworCiAvKgogICogVGhpcyByb3V0aW5lIGRvZXMgcGF0aCBtdHUgZGlzY292ZXJ5IGFzIGRlZmluZWQgaW4gUkZDMTE5MS4KICAqLwpAQCAtMzU0LDcgKzE5Miw3IEBACiAJbXR1ID0gZHN0X210dShkc3QpOwogCiAJaWYgKGluZXQtPnBtdHVkaXNjICE9IElQX1BNVFVESVNDX0RPTlQgJiYKLQkgICAgZHAtPmRjY3BzX3BtdHVfY29va2llID4gbXR1KSB7CisJICAgIGluZXRfY3NrKHNrKS0+aWNza19wbXR1X2Nvb2tpZSA+IG10dSkgewogCQlkY2NwX3N5bmNfbXNzKHNrLCBtdHUpOwogCiAJCS8qCkBAIC02MDYsNiArNDQ0LDE3IEBACiAJc29ja19wdXQoc2spOwogfQogCisvKiBUaGlzIHJvdXRpbmUgY29tcHV0ZXMgYW4gSVB2NCBEQ0NQIGNoZWNrc3VtLiAqLwordm9pZCBkY2NwX3Y0X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKKworCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY2hlY2tzdW0oc2tiLCBpbmV0LT5zYWRkciwgaW5ldC0+ZGFkZHIpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X3NlbmRfY2hlY2spOworCiBpbnQgZGNjcF92NF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBkY2NwX3Jlc2V0X2NvZGVzIGNvZGUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTY0MSwxNiArNDkwLDYgQEAKIAkJCQkJICAgZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkY2NwX2JhZF9zZXJ2aWNlX2NvZGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAotCQkJCQljb25zdCBfX3UzMiBzZXJ2aWNlKQotewotCWNvbnN0IHN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0KLQlpZiAoZHAtPmRjY3BzX3NlcnZpY2UgPT0gc2VydmljZSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuICFkY2NwX2xpc3RfaGFzX3NlcnZpY2UoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCwgc2VydmljZSk7Ci19Ci0KIGludCBkY2NwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOwpAQCAtNjYyLDcgKzUwMSw2IEBACiAgCWNvbnN0IF9fdTMyIHNlcnZpY2UgPSBkY2NwX2hkcl9yZXF1ZXN0KHNrYiktPmRjY3BoX3JlcV9zZXJ2aWNlOwogCXN0cnVjdCBkY2NwX3NrYl9jYiAqZGNiID0gRENDUF9TS0JfQ0Ioc2tiKTsKIAlfX3U4IHJlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfVE9PX0JVU1k7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDsKIAogCS8qIE5ldmVyIGFuc3dlciB0byBEQ0NQX1BLVF9SRVFVRVNUcyBzZW5kIHRvIGJyb2FkY2FzdCBvciBtdWx0aWNhc3QgKi8KIAlpZiAoKChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3QpLT5ydF9mbGFncyAmCkBAIC03MDMsNyArNTQxLDYgQEAKIAlpcmVxID0gaW5ldF9yc2socmVxKTsKIAlpcmVxLT5sb2NfYWRkciA9IGRhZGRyOwogCWlyZXEtPnJtdF9hZGRyID0gc2FkZHI7Ci0JLyogRklYTUU6IE1lcmdlIEFyaXN0ZXUncyBvcHRpb24gcGFyc2luZyBjb2RlIHdoZW4gcmVhZHkgKi8KIAlyZXEtPnJjdl93bmQJPSAxMDA7IC8qIEZha2UsIG9wdGlvbiBwYXJzaW5nIHdpbGwgZ2V0IHRoZQogCQkJCSAgcmlnaHQgdmFsdWUgKi8KIAlpcmVxLT5vcHQJPSBOVUxMOwpAQCAtNzIxLDIzICs1NTgsMjIgQEAKIAlkcmVxLT5kcmVxX2lzcwkgICA9IGRjY3BfdjRfaW5pdF9zZXF1ZW5jZShzaywgc2tiKTsKIAlkcmVxLT5kcmVxX3NlcnZpY2UgPSBzZXJ2aWNlOwogCi0JaWYgKGRjY3BfdjRfc2VuZF9yZXNwb25zZShzaywgcmVxLCBkc3QpKQorCWlmIChkY2NwX3Y0X3NlbmRfcmVzcG9uc2Uoc2ssIHJlcSwgTlVMTCkpCiAJCWdvdG8gZHJvcF9hbmRfZnJlZTsKIAogCWluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHNrLCByZXEsIERDQ1BfVElNRU9VVF9JTklUKTsKIAlyZXR1cm4gMDsKIAogZHJvcF9hbmRfZnJlZToKLQkvKgotCSAqIEZJWE1FOiBzaG91bGQgYmUgcmVxc2tfZnJlZSBhZnRlciBpbXBsZW1lbnRpbmcgcmVxLT5yc2tfb3BzCi0JICovCi0JX19yZXFza19mcmVlKHJlcSk7CisJcmVxc2tfZnJlZShyZXEpOwogZHJvcDoKIAlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9BVFRFTVBURkFJTFMpOwogCWRjYi0+ZGNjcGRfcmVzZXRfY29kZSA9IHJlc2V0X2NvZGU7CiAJcmV0dXJuIC0xOwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X2Nvbm5fcmVxdWVzdCk7CisKIC8qCiAgKiBUaGUgdGhyZWUgd2F5IGhhbmRzaGFrZSBoYXMgY29tcGxldGVkIC0gd2UgZ290IGEgdmFsaWQgQUNLIG9yIERBVEFBQ0sgLQogICogbm93IGNyZWF0ZSB0aGUgbmV3IHNvY2tldC4KQEAgLTc5Miw2ICs2MjgsOCBAQAogCXJldHVybiBOVUxMOwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X3JlcXVlc3RfcmVjdl9zb2NrKTsKKwogc3RhdGljIHN0cnVjdCBzb2NrICpkY2NwX3Y0X2huZF9yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwpAQCAtMTAxMSw3ICs4NDksOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkY2NwX2ludmFsaWRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X2RvX3Jjdik7CisKK2ludCBkY2NwX2ludmFsaWRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaDsKIApAQCAtMTA2NSwyOSArOTA1LDMwIEBACiAJCXJldHVybiAxOwogCX0KIAotCS8qIElmIHRoZSBoZWFkZXIgY2hlY2tzdW0gaXMgaW5jb3JyZWN0LCBkcm9wIHBhY2tldCBhbmQgcmV0dXJuICovCi0JaWYgKGRjY3BfdjRfdmVyaWZ5X2NoZWNrc3VtKHNrYiwgc2tiLT5uaC5pcGgtPnNhZGRyLAotCQkJCSAgICBza2ItPm5oLmlwaC0+ZGFkZHIpIDwgMCkgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIkRDQ1A6IGhlYWRlciBjaGVja3N1bSBpcyAiCi0JCQkJCSAgICAiaW5jb3JyZWN0XG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfaW52YWxpZF9wYWNrZXQpOworCiAvKiB0aGlzIGlzIGNhbGxlZCB3aGVuIHJlYWwgZGF0YSBhcnJpdmVzICovCiBpbnQgZGNjcF92NF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoOwogCXN0cnVjdCBzb2NrICpzazsKLQlpbnQgcmM7CiAKIAkvKiBTdGVwIDE6IENoZWNrIGhlYWRlciBiYXNpY3M6ICovCiAKIAlpZiAoZGNjcF9pbnZhbGlkX3BhY2tldChza2IpKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKKwkvKiBJZiB0aGUgaGVhZGVyIGNoZWNrc3VtIGlzIGluY29ycmVjdCwgZHJvcCBwYWNrZXQgYW5kIHJldHVybiAqLworCWlmIChkY2NwX3Y0X3ZlcmlmeV9jaGVja3N1bShza2IsIHNrYi0+bmguaXBoLT5zYWRkciwKKwkJCQkgICAgc2tiLT5uaC5pcGgtPmRhZGRyKSA8IDApIHsKKwkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICIlczogaW5jb3JyZWN0IGhlYWRlciBjaGVja3N1bVxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGRpc2NhcmRfaXQ7CisJfQorCiAJZGggPSBkY2NwX2hkcihza2IpOwogCiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxICA9IGRjY3BfaGRyX3NlcShza2IpOwpAQCAtMTE0MywyOCArOTg0LDEwIEBACiAgICAgICAgICAgICAgICAgZ290byBkb190aW1lX3dhaXQ7CiAJfQogCi0JaWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7Ci0JCWRjY3BfcHJfZGVidWcoInhmcm00X3BvbGljeV9jaGVjayBmYWlsZWRcbiIpOworCWlmICgheGZybTRfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKIAkJZ290byBkaXNjYXJkX2FuZF9yZWxzZTsKLQl9CiAKLSAgICAgICAgaWYgKHNrX2ZpbHRlcihzaywgc2tiLCAwKSkgewotCQlkY2NwX3ByX2RlYnVnKCJza19maWx0ZXIgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGRpc2NhcmRfYW5kX3JlbHNlOwotCX0KLQotCXNrYi0+ZGV2ID0gTlVMTDsKLQotCWJoX2xvY2tfc29jayhzayk7Ci0JcmMgPSAwOwotCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkKLQkJcmMgPSBkY2NwX3Y0X2RvX3Jjdihzaywgc2tiKTsKLQllbHNlCi0JCXNrX2FkZF9iYWNrbG9nKHNrLCBza2IpOwotCWJoX3VubG9ja19zb2NrKHNrKTsKLQotCXNvY2tfcHV0KHNrKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IpOwogCiBub19kY2NwX3NvY2tldDoKIAlpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKQEAgLTExOTQsOSArMTAxNywyMyBAQAogCWdvdG8gbm9fZGNjcF9zb2NrZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGNjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKQorc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjRfYWZfb3BzID0geworCS5xdWV1ZV94bWl0CT0gaXBfcXVldWVfeG1pdCwKKwkuc2VuZF9jaGVjawk9IGRjY3BfdjRfc2VuZF9jaGVjaywKKwkucmVidWlsZF9oZWFkZXIJPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLAorCS5jb25uX3JlcXVlc3QJPSBkY2NwX3Y0X2Nvbm5fcmVxdWVzdCwKKwkuc3luX3JlY3Zfc29jawk9IGRjY3BfdjRfcmVxdWVzdF9yZWN2X3NvY2ssCisJLm5ldF9oZWFkZXJfbGVuCT0gc2l6ZW9mKHN0cnVjdCBpcGhkciksCisJLnNldHNvY2tvcHQJPSBpcF9zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0CT0gaXBfZ2V0c29ja29wdCwKKwkuYWRkcjJzb2NrYWRkcgk9IGluZXRfY3NrX2FkZHIyc29ja2FkZHIsCisJLnNvY2thZGRyX2xlbgk9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAorfTsKKworaW50IGRjY3BfdjRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdGF0aWMgaW50IGRjY3BfY3RsX3NvY2tldF9pbml0ID0gMTsKIAogCWRjY3Bfb3B0aW9uc19pbml0KCZkcC0+ZGNjcHNfb3B0aW9ucyk7CkBAIC0xMjM2LDkgKzEwNzMsMTEgQEAKIAkJZGNjcF9jdGxfc29ja2V0X2luaXQgPSAwOwogCiAJZGNjcF9pbml0X3htaXRfdGltZXJzKHNrKTsKLQlpbmV0X2NzayhzayktPmljc2tfcnRvID0gRENDUF9USU1FT1VUX0lOSVQ7CisJaWNzay0+aWNza19ydG8gPSBEQ0NQX1RJTUVPVVRfSU5JVDsKIAlzay0+c2tfc3RhdGUgPSBEQ0NQX0NMT1NFRDsKIAlzay0+c2tfd3JpdGVfc3BhY2UgPSBkY2NwX3dyaXRlX3NwYWNlOworCWljc2stPmljc2tfYWZfb3BzID0gJmRjY3BfaXB2NF9hZl9vcHM7CisJaWNzay0+aWNza19zeW5jX21zcyA9IGRjY3Bfc3luY19tc3M7CiAJZHAtPmRjY3BzX21zc19jYWNoZSA9IDUzNjsKIAlkcC0+ZGNjcHNfcm9sZSA9IERDQ1BfUk9MRV9VTkRFRklORUQ7CiAJZHAtPmRjY3BzX3NlcnZpY2UgPSBEQ0NQX1NFUlZJQ0VfSU5WQUxJRF9WQUxVRTsKQEAgLTEyNDYsNyArMTA4NSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGNjcF92NF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF92NF9pbml0X3NvY2spOworCitpbnQgZGNjcF92NF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKQEAgLTEyNzksNiArMTEyMCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdjRfZGVzdHJveV9zb2NrKTsKKwogc3RhdGljIHZvaWQgZGNjcF92NF9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKIAlrZnJlZShpbmV0X3JzayhyZXEpLT5vcHQpOwpAQCAtMTI5Myw3ICsxMTM2LDExIEBACiAJLnNlbmRfcmVzZXQJPSBkY2NwX3Y0X2N0bF9zZW5kX3Jlc2V0LAogfTsKIAotc3RydWN0IHByb3RvIGRjY3BfdjRfcHJvdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgdGltZXdhaXRfc29ja19vcHMgZGNjcF90aW1ld2FpdF9zb2NrX29wcyA9IHsKKwkudHdza19vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrKSwKK307CisKK3N0cnVjdCBwcm90byBkY2NwX3Byb3QgPSB7CiAJLm5hbWUJCQk9ICJEQ0NQIiwKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5jbG9zZQkJCT0gZGNjcF9jbG9zZSwKQEAgLTEzMDcsNyArMTE1NCw3IEBACiAJLnJlY3Ztc2cJCT0gZGNjcF9yZWN2bXNnLAogCS5iYWNrbG9nX3JjdgkJPSBkY2NwX3Y0X2RvX3JjdiwKIAkuaGFzaAkJCT0gZGNjcF92NF9oYXNoLAotCS51bmhhc2gJCQk9IGRjY3BfdjRfdW5oYXNoLAorCS51bmhhc2gJCQk9IGRjY3BfdW5oYXNoLAogCS5hY2NlcHQJCQk9IGluZXRfY3NrX2FjY2VwdCwKIAkuZ2V0X3BvcnQJCT0gZGNjcF92NF9nZXRfcG9ydCwKIAkuc2h1dGRvd24JCT0gZGNjcF9zaHV0ZG93biwKQEAgLTEzMTYsNSArMTE2Myw3IEBACiAJLm1heF9oZWFkZXIJCT0gTUFYX0RDQ1BfSEVBREVSLAogCS5vYmpfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGRjY3Bfc29jayksCiAJLnJza19wcm90CQk9ICZkY2NwX3JlcXVlc3Rfc29ja19vcHMsCi0JLnR3c2tfb2JqX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2spLAorCS50d3NrX3Byb3QJCT0gJmRjY3BfdGltZXdhaXRfc29ja19vcHMsCiB9OworCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Byb3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5jIGIvbmV0L2RjY3AvaXB2Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDlkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZGNjcC9pcHY2LmMKQEAgLTAsMCArMSwxMjYxIEBACisvKgorICoJRENDUCBvdmVyIElQdjYKKyAqCUxpbnV4IElORVQ2IGltcGxlbWVudGF0aW9uIAorICoKKyAqCUJhc2VkIG9uIG5ldC9kY2NwNi9pcHY2LmMKKyAqCisgKglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAZ2hvc3Rwcm90b2NvbHMubmV0PgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3hmcm0uaD4KKworI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2hhc2h0YWJsZXMuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5oPgorI2luY2x1ZGUgPG5ldC9pbmV0Nl9oYXNodGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L3RyYW5zcF92Ni5oPgorI2luY2x1ZGUgPG5ldC94ZnJtLmg+CisKKyNpbmNsdWRlICJkY2NwLmgiCisjaW5jbHVkZSAiaXB2Ni5oIgorCitzdGF0aWMgdm9pZCBkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIHZvaWQgZGNjcF92Nl9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CitzdGF0aWMgdm9pZCBkY2NwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIGludCBkY2NwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfbWFwcGVkOworc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X2FmX29wczsKKworc3RhdGljIGludCBkY2NwX3Y2X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSkKK3sKKwlyZXR1cm4gaW5ldF9jc2tfZ2V0X3BvcnQoJmRjY3BfaGFzaGluZm8sIHNrLCBzbnVtLAorCQkJCSBpbmV0Nl9jc2tfYmluZF9jb25mbGljdCk7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfdjZfaGFzaChzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKHNrLT5za19zdGF0ZSAhPSBEQ0NQX0NMT1NFRCkgeworCQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcyA9PSAmZGNjcF9pcHY2X21hcHBlZCkgeworCQkJZGNjcF9wcm90Lmhhc2goc2spOworCQkJcmV0dXJuOworCQl9CisJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwkJX19pbmV0Nl9oYXNoKCZkY2NwX2hhc2hpbmZvLCBzayk7CisJCWxvY2FsX2JoX2VuYWJsZSgpOworCX0KK30KKworc3RhdGljIGlubGluZSB1MTYgZGNjcF92Nl9jaGVjayhzdHJ1Y3QgZGNjcF9oZHIgKmRoLCBpbnQgbGVuLAorCQkJCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIAorCQkJCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIAorCQkJCXVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlyZXR1cm4gY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX0RDQ1AsIGJhc2UpOworfQorCitzdGF0aWMgX191MzIgZGNjcF92Nl9pbml0X3NlcXVlbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKKworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQorCQlyZXR1cm4gc2VjdXJlX3RjcHY2X3NlcXVlbmNlX251bWJlcihza2ItPm5oLmlwdjZoLT5kYWRkci5zNl9hZGRyMzIsCisJCQkJCQkgICAgc2tiLT5uaC5pcHY2aC0+c2FkZHIuczZfYWRkcjMyLAorCQkJCQkJICAgIGRoLT5kY2NwaF9kcG9ydCwKKwkJCQkJCSAgICBkaC0+ZGNjcGhfc3BvcnQpOworCWVsc2UKKwkJcmV0dXJuIHNlY3VyZV9kY2NwX3NlcXVlbmNlX251bWJlcihza2ItPm5oLmlwaC0+ZGFkZHIsCisJCQkJCQkgICBza2ItPm5oLmlwaC0+c2FkZHIsCisJCQkJCQkgICBkaC0+ZGNjcGhfZHBvcnQsCisJCQkJCQkgICBkaC0+ZGNjcGhfc3BvcnQpOworfQorCitzdGF0aWMgaW50IGRjY3BfdjZfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIAorCQkJICAgaW50IGFkZHJfbGVuKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSB1YWRkcjsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSBOVUxMLCAqZmluYWxfcCA9IE5VTEwsIGZpbmFsOworCXN0cnVjdCBmbG93aSBmbDsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CisJaW50IGFkZHJfdHlwZTsKKwlpbnQgZXJyOworCisJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfQ0xJRU5UOworCisJaWYgKGFkZHJfbGVuIDwgU0lONl9MRU5fUkZDMjEzMykgCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVzaW4tPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KSAKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKKworCWlmIChucC0+c25kZmxvdykgeworCQlmbC5mbDZfZmxvd2xhYmVsID0gdXNpbi0+c2luNl9mbG93aW5mbyAmIElQVjZfRkxPV0lORk9fTUFTSzsKKwkJSVA2X0VDTl9mbG93X2luaXQoZmwuZmw2X2Zsb3dsYWJlbCk7CisJCWlmIChmbC5mbDZfZmxvd2xhYmVsICYgSVBWNl9GTE9XTEFCRUxfTUFTSykgeworCQkJc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsb3dsYWJlbDsKKwkJCWZsb3dsYWJlbCA9IGZsNl9zb2NrX2xvb2t1cChzaywgZmwuZmw2X2Zsb3dsYWJlbCk7CisJCQlpZiAoZmxvd2xhYmVsID09IE5VTEwpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpcHY2X2FkZHJfY29weSgmdXNpbi0+c2luNl9hZGRyLCAmZmxvd2xhYmVsLT5kc3QpOworCQkJZmw2X3NvY2tfcmVsZWFzZShmbG93bGFiZWwpOworCQl9CisJfQorCisJLyoKKyAgCSAqCWNvbm5lY3QoKSB0byBJTkFERFJfQU5ZIG1lYW5zIGxvb3BiYWNrIChCU0QnaXNtKS4KKyAgCSAqLworICAJCisgIAlpZiAoaXB2Nl9hZGRyX2FueSgmdXNpbi0+c2luNl9hZGRyKSkKKwkJdXNpbi0+c2luNl9hZGRyLnM2X2FkZHJbMTVdID0gMHgxOyAKKworCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKCZ1c2luLT5zaW42X2FkZHIpOworCisJaWYoYWRkcl90eXBlICYgSVBWNl9BRERSX01VTFRJQ0FTVCkKKwkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKKworCWlmIChhZGRyX3R5cGUgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSB7CisJCWlmIChhZGRyX2xlbiA+PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgJiYKKwkJICAgIHVzaW4tPnNpbjZfc2NvcGVfaWQpIHsKKwkJCS8qIElmIGludGVyZmFjZSBpcyBzZXQgd2hpbGUgYmluZGluZywgaW5kaWNlcworCQkJICogbXVzdCBjb2luY2lkZS4KKwkJCSAqLworCQkJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYgJiYKKwkJCSAgICBzay0+c2tfYm91bmRfZGV2X2lmICE9IHVzaW4tPnNpbjZfc2NvcGVfaWQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCXNrLT5za19ib3VuZF9kZXZfaWYgPSB1c2luLT5zaW42X3Njb3BlX2lkOworCQl9CisKKwkJLyogQ29ubmVjdCB0byBsaW5rLWxvY2FsIGFkZHJlc3MgcmVxdWlyZXMgYW4gaW50ZXJmYWNlICovCisJCWlmICghc2stPnNrX2JvdW5kX2Rldl9pZikKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlwdjZfYWRkcl9jb3B5KCZucC0+ZGFkZHIsICZ1c2luLT5zaW42X2FkZHIpOworCW5wLT5mbG93X2xhYmVsID0gZmwuZmw2X2Zsb3dsYWJlbDsKKworCS8qCisJICoJRENDUCBvdmVyIElQdjQKKwkgKi8KKworCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkgeworCQl1MzIgZXh0aGRybGVuID0gaWNzay0+aWNza19leHRfaGRyX2xlbjsKKwkJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKworCQlTT0NLX0RFQlVHKHNrLCAiY29ubmVjdDogaXB2NCBtYXBwZWRcbiIpOworCisJCWlmIChfX2lwdjZfb25seV9zb2NrKHNrKSkKKwkJCXJldHVybiAtRU5FVFVOUkVBQ0g7CisKKwkJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQlzaW4uc2luX3BvcnQgPSB1c2luLT5zaW42X3BvcnQ7CisJCXNpbi5zaW5fYWRkci5zX2FkZHIgPSB1c2luLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOworCisJCWljc2stPmljc2tfYWZfb3BzID0gJmRjY3BfaXB2Nl9tYXBwZWQ7CisJCXNrLT5za19iYWNrbG9nX3JjdiA9IGRjY3BfdjRfZG9fcmN2OworCisJCWVyciA9IGRjY3BfdjRfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKTsKKworCQlpZiAoZXJyKSB7CisJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gZXh0aGRybGVuOworCQkJaWNzay0+aWNza19hZl9vcHMgPSAmZGNjcF9pcHY2X2FmX29wczsKKwkJCXNrLT5za19iYWNrbG9nX3JjdiA9IGRjY3BfdjZfZG9fcmN2OworCQkJZ290byBmYWlsdXJlOworCQl9IGVsc2UgeworCQkJaXB2Nl9hZGRyX3NldCgmbnAtPnNhZGRyLCAwLCAwLCBodG9ubCgweDAwMDBGRkZGKSwKKwkJCQkgICAgICBpbmV0LT5zYWRkcik7CisJCQlpcHY2X2FkZHJfc2V0KCZucC0+cmN2X3NhZGRyLCAwLCAwLCBodG9ubCgweDAwMDBGRkZGKSwKKwkJCQkgICAgICBpbmV0LT5yY3Zfc2FkZHIpOworCQl9CisKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoIWlwdjZfYWRkcl9hbnkoJm5wLT5yY3Zfc2FkZHIpKQorCQlzYWRkciA9ICZucC0+cmN2X3NhZGRyOworCisJZmwucHJvdG8gPSBJUFBST1RPX0RDQ1A7CisJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZucC0+ZGFkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCBzYWRkciA/IHNhZGRyIDogJm5wLT5zYWRkcik7CisJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKKwlmbC5mbF9pcF9kcG9ydCA9IHVzaW4tPnNpbjZfcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGluZXQtPnNwb3J0OworCisJaWYgKG5wLT5vcHQgJiYgbnAtPm9wdC0+c3JjcnQpIHsKKwkJc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKW5wLT5vcHQtPnNyY3J0OworCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7CisJCWZpbmFsX3AgPSAmZmluYWw7CisJfQorCisJZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsdXJlOworCWlmIChmaW5hbF9wKQorCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CisKKwlpZiAoKGVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDApKSA8IDApCisJCWdvdG8gZmFpbHVyZTsKKworCWlmIChzYWRkciA9PSBOVUxMKSB7CisJCXNhZGRyID0gJmZsLmZsNl9zcmM7CisJCWlwdjZfYWRkcl9jb3B5KCZucC0+cmN2X3NhZGRyLCBzYWRkcik7CisJfQorCisJLyogc2V0IHRoZSBzb3VyY2UgYWRkcmVzcyAqLworCWlwdjZfYWRkcl9jb3B5KCZucC0+c2FkZHIsIHNhZGRyKTsKKwlpbmV0LT5yY3Zfc2FkZHIgPSBMT09QQkFDSzRfSVBWNjsKKworCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7CisKKwlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKKwlpZiAobnAtPm9wdCkKKwkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IChucC0+b3B0LT5vcHRfZmxlbiArCisJCQkJCSAgbnAtPm9wdC0+b3B0X25mbGVuKTsKKworCWluZXQtPmRwb3J0ID0gdXNpbi0+c2luNl9wb3J0OworCisJZGNjcF9zZXRfc3RhdGUoc2ssIERDQ1BfUkVRVUVTVElORyk7CisJZXJyID0gaW5ldDZfaGFzaF9jb25uZWN0KCZkY2NwX2RlYXRoX3Jvdywgc2spOworCWlmIChlcnIpCisJCWdvdG8gbGF0ZV9mYWlsdXJlOworCS8qIEZJWE1FICovCisjaWYgMAorCWRwLT5kY2Nwc19nYXIgPSBzZWN1cmVfZGNjcF92Nl9zZXF1ZW5jZV9udW1iZXIobnAtPnNhZGRyLnM2X2FkZHIzMiwKKwkJCQkJCSAgICAgICBucC0+ZGFkZHIuczZfYWRkcjMyLAorCQkJCQkJICAgICAgIGluZXQtPnNwb3J0LAorCQkJCQkJICAgICAgIGluZXQtPmRwb3J0KTsKKyNlbmRpZgorCWVyciA9IGRjY3BfY29ubmVjdChzayk7CisJaWYgKGVycikKKwkJZ290byBsYXRlX2ZhaWx1cmU7CisKKwlyZXR1cm4gMDsKKworbGF0ZV9mYWlsdXJlOgorCWRjY3Bfc2V0X3N0YXRlKHNrLCBEQ0NQX0NMT1NFRCk7CisJX19za19kc3RfcmVzZXQoc2spOworZmFpbHVyZToKKwlpbmV0LT5kcG9ydCA9IDA7CisJc2stPnNrX3JvdXRlX2NhcHMgPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAorCQkJaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX3UzMiBpbmZvKQoreworCXN0cnVjdCBpcHY2aGRyICpoZHIgPSAoc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCA9IChzdHJ1Y3QgZGNjcF9oZHIgKikoc2tiLT5kYXRhICsgb2Zmc2V0KTsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7CisJc3RydWN0IHNvY2sgKnNrOworCWludCBlcnI7CisJX191NjQgc2VxOworCisJc2sgPSBpbmV0Nl9sb29rdXAoJmRjY3BfaGFzaGluZm8sICZoZHItPmRhZGRyLCBkaC0+ZGNjcGhfZHBvcnQsCisJCQkgICZoZHItPnNhZGRyLCBkaC0+ZGNjcGhfc3BvcnQsIHNrYi0+ZGV2LT5pZmluZGV4KTsKKworCWlmIChzayA9PSBOVUxMKSB7CisJCUlDTVA2X0lOQ19TVEFUU19CSChfX2luNl9kZXZfZ2V0KHNrYi0+ZGV2KSwgSUNNUDZfTUlCX0lORVJST1JTKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9USU1FX1dBSVQpIHsKKwkJaW5ldF90d3NrX3B1dCgoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqKXNrKTsKKwkJcmV0dXJuOworCX0KKworCWJoX2xvY2tfc29jayhzayk7CisJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpCisJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0xPQ0tEUk9QUEVESUNNUFMpOworCisJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0NMT1NFRCkKKwkJZ290byBvdXQ7CisKKwlucCA9IGluZXQ2X3NrKHNrKTsKKworCWlmICh0eXBlID09IElDTVBWNl9QS1RfVE9PQklHKSB7CisJCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CisKKwkJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpCisJCQlnb3RvIG91dDsKKwkJaWYgKCgxIDw8IHNrLT5za19zdGF0ZSkgJiAoRENDUEZfTElTVEVOIHwgRENDUEZfQ0xPU0VEKSkKKwkJCWdvdG8gb3V0OworCisJCS8qIGljbXAgc2hvdWxkIGhhdmUgdXBkYXRlZCB0aGUgZGVzdGluYXRpb24gY2FjaGUgZW50cnkgKi8KKwkJZHN0ID0gX19za19kc3RfY2hlY2soc2ssIG5wLT5kc3RfY29va2llKTsKKworCQlpZiAoZHN0ID09IE5VTEwpIHsKKwkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwkJCXN0cnVjdCBmbG93aSBmbDsKKworCQkJLyogQlVHR0dfRlVUVVJFOiBBZ2FpbiwgaXQgaXMgbm90IGNsZWFyIGhvdworCQkJICAgdG8gaGFuZGxlIHJ0aGRyIGNhc2UuIElnbm9yZSB0aGlzIGNvbXBsZXhpdHkKKwkJCSAgIGZvciBub3cuCisJCQkgKi8KKwkJCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOworCQkJZmwucHJvdG8gPSBJUFBST1RPX0RDQ1A7CisJCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJm5wLT5kYWRkcik7CisJCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X3NyYywgJm5wLT5zYWRkcik7CisJCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCQkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0LT5kcG9ydDsKKwkJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+c3BvcnQ7CisKKwkJCWlmICgoZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpKSB7CisJCQkJc2stPnNrX2Vycl9zb2Z0ID0gLWVycjsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKChlcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKSB7CisJCQkJc2stPnNrX2Vycl9zb2Z0ID0gLWVycjsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQl9IGVsc2UKKwkJCWRzdF9ob2xkKGRzdCk7CisKKwkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19wbXR1X2Nvb2tpZSA+IGRzdF9tdHUoZHN0KSkgeworCQkJZGNjcF9zeW5jX21zcyhzaywgZHN0X210dShkc3QpKTsKKwkJfSAvKiBlbHNlIGxldCB0aGUgdXN1YWwgcmV0cmFuc21pdCB0aW1lciBoYW5kbGUgaXQgKi8KKwkJZHN0X3JlbGVhc2UoZHN0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWNtcHY2X2Vycl9jb252ZXJ0KHR5cGUsIGNvZGUsICZlcnIpOworCisJc2VxID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxOworCS8qIE1pZ2h0IGJlIGZvciBhbiByZXF1ZXN0X3NvY2sgKi8KKwlzd2l0Y2ggKHNrLT5za19zdGF0ZSkgeworCQlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsICoqcHJldjsKKwljYXNlIERDQ1BfTElTVEVOOgorCQlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkKKwkJCWdvdG8gb3V0OworCisJCXJlcSA9IGluZXQ2X2Nza19zZWFyY2hfcmVxKHNrLCAmcHJldiwgZGgtPmRjY3BoX2Rwb3J0LAorCQkJCQkgICAmaGRyLT5kYWRkciwgJmhkci0+c2FkZHIsCisJCQkJCSAgIGluZXQ2X2lpZihza2IpKTsKKwkJaWYgKCFyZXEpCisJCQlnb3RvIG91dDsKKworCQkvKiBJQ01QcyBhcmUgbm90IGJhY2tsb2dnZWQsIGhlbmNlIHdlIGNhbm5vdCBnZXQKKwkJICogYW4gZXN0YWJsaXNoZWQgc29ja2V0IGhlcmUuCisJCSAqLworCQlCVUdfVFJBUChyZXEtPnNrID09IE5VTEwpOworCisJCWlmIChzZXEgIT0gZGNjcF9yc2socmVxKS0+ZHJlcV9pc3MpIHsKKwkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX09VVE9GV0lORE9XSUNNUFMpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHNrLCByZXEsIHByZXYpOworCQlnb3RvIG91dDsKKworCWNhc2UgRENDUF9SRVFVRVNUSU5HOgorCWNhc2UgRENDUF9SRVNQT05EOiAgLyogQ2Fubm90IGhhcHBlbi4KKwkJCSAgICAgICBJdCBjYW4sIGl0IFNZTnMgYXJlIGNyb3NzZWQuIC0tQU5LICovIAorCQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJCURDQ1BfSU5DX1NUQVRTX0JIKERDQ1BfTUlCX0FUVEVNUFRGQUlMUyk7CisJCQlzay0+c2tfZXJyID0gZXJyOworCQkJLyoKKwkJCSAqIFdha2UgcGVvcGxlIHVwIHRvIHNlZSB0aGUgZXJyb3IKKwkJCSAqIChzZWUgY29ubmVjdCBpbiBzb2NrLmMpCisJCQkgKi8KKwkJCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworCisJCQlkY2NwX2RvbmUoc2spOworCQl9IGVsc2UKKwkJCXNrLT5za19lcnJfc29mdCA9IGVycjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spICYmIG5wLT5yZWN2ZXJyKSB7CisJCXNrLT5za19lcnIgPSBlcnI7CisJCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworCX0gZWxzZQorCQlzay0+c2tfZXJyX3NvZnQgPSBlcnI7CisKK291dDoKKwliaF91bmxvY2tfc29jayhzayk7CisJc29ja19wdXQoc2spOworfQorCisKK3N0YXRpYyBpbnQgZGNjcF92Nl9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqaXJlcTYgPSBpbmV0Nl9yc2socmVxKTsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCA9IE5VTEw7CisJc3RydWN0IGluNl9hZGRyICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CisJc3RydWN0IGZsb3dpIGZsOworCWludCBlcnIgPSAtMTsKKworCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOworCWZsLnByb3RvID0gSVBQUk9UT19EQ0NQOworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmaXJlcTYtPnJtdF9hZGRyKTsKKwlpcHY2X2FkZHJfY29weSgmZmwuZmw2X3NyYywgJmlyZXE2LT5sb2NfYWRkcik7CisJZmwuZmw2X2Zsb3dsYWJlbCA9IDA7CisJZmwub2lmID0gaXJlcTYtPmlpZjsKKwlmbC5mbF9pcF9kcG9ydCA9IGluZXRfcnNrKHJlcSktPnJtdF9wb3J0OworCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9zayhzayktPnNwb3J0OworCisJaWYgKGRzdCA9PSBOVUxMKSB7CisJCW9wdCA9IG5wLT5vcHQ7CisJCWlmIChvcHQgPT0gTlVMTCAmJgorCQkgICAgbnAtPnJ4b3B0LmJpdHMub3NyY3J0ID09IDIgJiYKKwkJICAgIGlyZXE2LT5wa3RvcHRzKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqcGt0b3B0cyA9IGlyZXE2LT5wa3RvcHRzOworCQkJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpyeG9wdCA9IElQNkNCKHBrdG9wdHMpOworCQkJaWYgKHJ4b3B0LT5zcmNydCkKKwkJCQlvcHQgPSBpcHY2X2ludmVydF9ydGhkcihzaywKKwkJCQkJKHN0cnVjdCBpcHY2X3J0X2hkciAqKShwa3RvcHRzLT5uaC5yYXcgKworCQkJCQkJCSAgICAgICByeG9wdC0+c3JjcnQpKTsKKwkJfQorCisJCWlmIChvcHQgJiYgb3B0LT5zcmNydCkgeworCQkJc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKW9wdC0+c3JjcnQ7CisJCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKKwkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOworCQkJZmluYWxfcCA9ICZmaW5hbDsKKwkJfQorCisJCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCQlpZiAoZmluYWxfcCkKKwkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBmaW5hbF9wKTsKKwkJaWYgKChlcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKQorCQkJZ290byBkb25lOworCX0KKworCXNrYiA9IGRjY3BfbWFrZV9yZXNwb25zZShzaywgZHN0LCByZXEpOworCWlmIChza2IgIT0gTlVMTCkgeworCQlzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKKwkJZGgtPmRjY3BoX2NoZWNrc3VtID0gZGNjcF92Nl9jaGVjayhkaCwgc2tiLT5sZW4sCisJCQkJCQkgICAmaXJlcTYtPmxvY19hZGRyLAorCQkJCQkJICAgJmlyZXE2LT5ybXRfYWRkciwKKwkJCQkJCSAgIGNzdW1fcGFydGlhbCgoY2hhciAqKWRoLAorCQkJCQkJCQlza2ItPmxlbiwKKwkJCQkJCQkJc2tiLT5jc3VtKSk7CisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmaXJlcTYtPnJtdF9hZGRyKTsKKwkJZXJyID0gaXA2X3htaXQoc2ssIHNrYiwgJmZsLCBvcHQsIDApOworCQlpZiAoZXJyID09IE5FVF9YTUlUX0NOKQorCQkJZXJyID0gMDsKKwl9CisKK2RvbmU6CisgICAgICAgIGlmIChvcHQgJiYgb3B0ICE9IG5wLT5vcHQpCisJCXNvY2tfa2ZyZWVfcyhzaywgb3B0LCBvcHQtPnRvdF9sZW4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfdjZfcmVxc2tfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCit7CisJaWYgKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzICE9IE5VTEwpCisJCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyBkY2NwNl9yZXF1ZXN0X3NvY2tfb3BzID0geworCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm9ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBkY2NwNl9yZXF1ZXN0X3NvY2spLAorCS5ydHhfc3luX2Fjawk9IGRjY3BfdjZfc2VuZF9yZXNwb25zZSwKKwkuc2VuZF9hY2sJPSBkY2NwX3Y2X3JlcXNrX3NlbmRfYWNrLAorCS5kZXN0cnVjdG9yCT0gZGNjcF92Nl9yZXFza19kZXN0cnVjdG9yLAorCS5zZW5kX3Jlc2V0CT0gZGNjcF92Nl9jdGxfc2VuZF9yZXNldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXdhaXRfc29ja19vcHMgZGNjcDZfdGltZXdhaXRfc29ja19vcHMgPSB7CisJLnR3c2tfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGRjY3A2X3RpbWV3YWl0X3NvY2spLAorfTsKKworc3RhdGljIHZvaWQgZGNjcF92Nl9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJc3RydWN0IGRjY3BfaGRyICpkaCA9IGRjY3BfaGRyKHNrYik7CisKKwlkaC0+ZGNjcGhfY2hlY2tzdW0gPSBjc3VtX2lwdjZfbWFnaWMoJm5wLT5zYWRkciwgJm5wLT5kYWRkciwKKwkJCQkJICAgICBsZW4sIElQUFJPVE9fRENDUCwgCisJCQkJCSAgICAgY3N1bV9wYXJ0aWFsKChjaGFyICopZGgsCisJCQkJCQkJICBkaC0+ZGNjcGhfZG9mZiA8PCAyLAorCQkJCQkJCSAgc2tiLT5jc3VtKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfdjZfY3RsX3NlbmRfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnJ4c2tiKQoreworCXN0cnVjdCBkY2NwX2hkciAqcnhkaCA9IGRjY3BfaGRyKHJ4c2tiKSwgKmRoOyAKKwljb25zdCBpbnQgZGNjcF9oZHJfcmVzZXRfbGVuID0gc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkgKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX3Jlc2V0KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBmbG93aSBmbDsKKwl1NjQgc2Vxbm87CisKKwlpZiAocnhkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9SRVNFVCkKKwkJcmV0dXJuOworCisJaWYgKCFpcHY2X3VuaWNhc3RfZGVzdGluYXRpb24ocnhza2IpKQorCQlyZXR1cm47IAorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGdyYWIgc29tZSBtZW1vcnksIGFuZCBwdXQgdG9nZXRoZXIgYW4gUlNULAorCSAqIGFuZCB0aGVuIHB1dCBpdCBpbnRvIHRoZSBxdWV1ZSB0byBiZSBzZW50LgorCSAqLworCisJc2tiID0gYWxsb2Nfc2tiKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKKwkJCWRjY3BfaGRyX3Jlc2V0X2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKSAKKwkgIAlyZXR1cm47CisKKwlza2JfcmVzZXJ2ZShza2IsIE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKKwkJICAgIGRjY3BfaGRyX3Jlc2V0X2xlbik7CisKKwlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hkcl9yZXNldF9sZW4pOworCWRoID0gZGNjcF9oZHIoc2tiKTsKKwltZW1zZXQoZGgsIDAsIGRjY3BfaGRyX3Jlc2V0X2xlbik7CisKKwkvKiBTd2FwIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZS4gKi8KKwlkaC0+ZGNjcGhfdHlwZQk9IERDQ1BfUEtUX1JFU0VUOworCWRoLT5kY2NwaF9zcG9ydAk9IHJ4ZGgtPmRjY3BoX2Rwb3J0OworCWRoLT5kY2NwaF9kcG9ydAk9IHJ4ZGgtPmRjY3BoX3Nwb3J0OworCWRoLT5kY2NwaF9kb2ZmCT0gZGNjcF9oZHJfcmVzZXRfbGVuIC8gNDsKKwlkaC0+ZGNjcGhfeAk9IDE7CisJZGNjcF9oZHJfcmVzZXQoc2tiKS0+ZGNjcGhfcmVzZXRfY29kZSA9CisJCQkJRENDUF9TS0JfQ0Iocnhza2IpLT5kY2NwZF9yZXNldF9jb2RlOworCisJLyogU2VlICI4LjMuMS4gQWJub3JtYWwgVGVybWluYXRpb24iIGluIGRyYWZ0LWlldGYtZGNjcC1zcGVjLTExICovCisJc2Vxbm8gPSAwOworCWlmIChEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX2Fja19zZXEgIT0gRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKQorCQlkY2NwX3NldF9zZXFubygmc2Vxbm8sIERDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfYWNrX3NlcSArIDEpOworCisJZGNjcF9oZHJfc2V0X3NlcShkaCwgc2Vxbm8pOworCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwKKwkJCSBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX3NlcSk7CisKKwltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKKwlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJnJ4c2tiLT5uaC5pcHY2aC0+c2FkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmcnhza2ItPm5oLmlwdjZoLT5kYWRkcik7CisJZGgtPmRjY3BoX2NoZWNrc3VtID0gY3N1bV9pcHY2X21hZ2ljKCZmbC5mbDZfc3JjLCAmZmwuZmw2X2RzdCwKKwkJCQkJICAgICBzaXplb2YoKmRoKSwgSVBQUk9UT19EQ0NQLAorCQkJCQkgICAgIHNrYi0+Y3N1bSk7CisJZmwucHJvdG8gPSBJUFBST1RPX0RDQ1A7CisJZmwub2lmID0gaW5ldDZfaWlmKHJ4c2tiKTsKKwlmbC5mbF9pcF9kcG9ydCA9IGRoLT5kY2NwaF9kcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGRoLT5kY2NwaF9zcG9ydDsKKworCS8qIHNrID0gTlVMTCwgYnV0IGl0IGlzIHNhZmUgZm9yIG5vdy4gUlNUIHNvY2tldCByZXF1aXJlZC4gKi8KKwlpZiAoIWlwNl9kc3RfbG9va3VwKE5VTEwsICZza2ItPmRzdCwgJmZsKSkgeworCQlpZiAoeGZybV9sb29rdXAoJnNrYi0+ZHN0LCAmZmwsIE5VTEwsIDApID49IDApIHsKKwkJCWlwNl94bWl0KE5VTEwsIHNrYiwgJmZsLCBOVUxMLCAwKTsKKwkJCURDQ1BfSU5DX1NUQVRTX0JIKERDQ1BfTUlCX09VVFNFR1MpOworCQkJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfT1VUUlNUUyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlrZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF92Nl9jdGxfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnJ4c2tiKQoreworCXN0cnVjdCBmbG93aSBmbDsKKwlzdHJ1Y3QgZGNjcF9oZHIgKnJ4ZGggPSBkY2NwX2hkcihyeHNrYiksICpkaDsKKwljb25zdCBpbnQgZGNjcF9oZHJfYWNrX2xlbiA9IHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSArCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gYWxsb2Nfc2tiKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKKwkJCWRjY3BfaGRyX2Fja19sZW4sIEdGUF9BVE9NSUMpOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2tiX3Jlc2VydmUoc2tiLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArCisJCQkgZGNjcF9oZHJfYWNrX2xlbik7CisKKwlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hkcl9hY2tfbGVuKTsKKwlkaCA9IGRjY3BfaGRyKHNrYik7CisJbWVtc2V0KGRoLCAwLCBkY2NwX2hkcl9hY2tfbGVuKTsKKworCS8qIEJ1aWxkIERDQ1AgaGVhZGVyIGFuZCBjaGVja3N1bSBpdC4gKi8KKwlkaC0+ZGNjcGhfdHlwZQk9IERDQ1BfUEtUX0FDSzsKKwlkaC0+ZGNjcGhfc3BvcnQgPSByeGRoLT5kY2NwaF9kcG9ydDsKKwlkaC0+ZGNjcGhfZHBvcnQgPSByeGRoLT5kY2NwaF9zcG9ydDsKKwlkaC0+ZGNjcGhfZG9mZgk9IGRjY3BfaGRyX2Fja19sZW4gLyA0OworCWRoLT5kY2NwaF94CT0gMTsKKwkKKwlkY2NwX2hkcl9zZXRfc2VxKGRoLCBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX2Fja19zZXEpOworCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwKKwkJCSBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX3NlcSk7CisKKwltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKKwlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJnJ4c2tiLT5uaC5pcHY2aC0+c2FkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmcnhza2ItPm5oLmlwdjZoLT5kYWRkcik7CisKKwkvKiBGSVhNRTogY2FsY3VsYXRlIGNoZWNrc3VtLCBJUHY0IGFsc28gc2hvdWxkLi4uICovCisKKwlmbC5wcm90byA9IElQUFJPVE9fRENDUDsKKwlmbC5vaWYgPSBpbmV0Nl9paWYocnhza2IpOworCWZsLmZsX2lwX2Rwb3J0ID0gZGgtPmRjY3BoX2Rwb3J0OworCWZsLmZsX2lwX3Nwb3J0ID0gZGgtPmRjY3BoX3Nwb3J0OworCisJaWYgKCFpcDZfZHN0X2xvb2t1cChOVUxMLCAmc2tiLT5kc3QsICZmbCkpIHsKKwkJaWYgKHhmcm1fbG9va3VwKCZza2ItPmRzdCwgJmZsLCBOVUxMLCAwKSA+PSAwKSB7CisJCQlpcDZfeG1pdChOVUxMLCBza2IsICZmbCwgTlVMTCwgMCk7CisJCQlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9PVVRTRUdTKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWtmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBkY2NwX3Y2X3JlcXNrX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCWRjY3BfdjZfY3RsX3NlbmRfYWNrKHNrYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqZGNjcF92Nl9obmRfcmVxKHN0cnVjdCBzb2NrICpzayxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBza2ItPm5oLmlwdjZoOworCXN0cnVjdCBzb2NrICpuc2s7CisJc3RydWN0IHJlcXVlc3Rfc29jayAqKnByZXY7CisJLyogRmluZCBwb3NzaWJsZSBjb25uZWN0aW9uIHJlcXVlc3RzLiAqLworCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IGluZXQ2X2Nza19zZWFyY2hfcmVxKHNrLCAmcHJldiwKKwkJCQkJCQlkaC0+ZGNjcGhfc3BvcnQsCisJCQkJCQkJJmlwaC0+c2FkZHIsCisJCQkJCQkJJmlwaC0+ZGFkZHIsCisJCQkJCQkJaW5ldDZfaWlmKHNrYikpOworCWlmIChyZXEgIT0gTlVMTCkKKwkJcmV0dXJuIGRjY3BfY2hlY2tfcmVxKHNrLCBza2IsIHJlcSwgcHJldik7CisKKwluc2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZCgmZGNjcF9oYXNoaW5mbywKKwkJCQkJICZpcGgtPnNhZGRyLCBkaC0+ZGNjcGhfc3BvcnQsCisJCQkJCSAmaXBoLT5kYWRkciwgbnRvaHMoZGgtPmRjY3BoX2Rwb3J0KSwKKwkJCQkJIGluZXQ2X2lpZihza2IpKTsKKworCWlmIChuc2sgIT0gTlVMTCkgeworCQlpZiAobnNrLT5za19zdGF0ZSAhPSBEQ0NQX1RJTUVfV0FJVCkgeworCQkJYmhfbG9ja19zb2NrKG5zayk7CisJCQlyZXR1cm4gbnNrOworCQl9CisJCWluZXRfdHdza19wdXQoKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKiluc2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyBpbnQgZGNjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTsKKwlzdHJ1Y3QgZGNjcF9zb2NrIGRwOworCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTsKKwlzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKmRyZXE7CisJc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqaXJlcTY7CisJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworIAljb25zdCBfX3UzMiBzZXJ2aWNlID0gZGNjcF9oZHJfcmVxdWVzdChza2IpLT5kY2NwaF9yZXFfc2VydmljZTsKKwlzdHJ1Y3QgZGNjcF9za2JfY2IgKmRjYiA9IERDQ1BfU0tCX0NCKHNrYik7CisJX191OCByZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX1RPT19CVVNZOworCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCQlyZXR1cm4gZGNjcF92NF9jb25uX3JlcXVlc3Qoc2ssIHNrYik7CisKKwlpZiAoIWlwdjZfdW5pY2FzdF9kZXN0aW5hdGlvbihza2IpKQorCQlnb3RvIGRyb3A7IAorCisJaWYgKGRjY3BfYmFkX3NlcnZpY2VfY29kZShzaywgc2VydmljZSkpIHsKKwkJcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9CQURfU0VSVklDRV9DT0RFOworCQlnb3RvIGRyb3A7CisgCX0KKwkvKgorCSAqCVRoZXJlIGFyZSBubyBTWU4gYXR0YWNrcyBvbiBJUHY2LCB5ZXQuLi4JCisJICovCisJaWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2lzX2Z1bGwoc2spKQorCQlnb3RvIGRyb3A7CQkKKworCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spICYmIGluZXRfY3NrX3JlcXNrX3F1ZXVlX3lvdW5nKHNrKSA+IDEpCisJCWdvdG8gZHJvcDsKKworCXJlcSA9IGluZXQ2X3JlcXNrX2FsbG9jKHNrLT5za19wcm90LT5yc2tfcHJvdCk7CisJaWYgKHJlcSA9PSBOVUxMKQorCQlnb3RvIGRyb3A7CisKKwkvKiBGSVhNRTogcHJvY2VzcyBvcHRpb25zICovCisKKwlkY2NwX29wZW5yZXFfaW5pdChyZXEsICZkcCwgc2tiKTsKKworCWlyZXE2ID0gaW5ldDZfcnNrKHJlcSk7CisJaXJlcSA9IGluZXRfcnNrKHJlcSk7CisJaXB2Nl9hZGRyX2NvcHkoJmlyZXE2LT5ybXRfYWRkciwgJnNrYi0+bmguaXB2NmgtPnNhZGRyKTsKKwlpcHY2X2FkZHJfY29weSgmaXJlcTYtPmxvY19hZGRyLCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIpOworCXJlcS0+cmN2X3duZAk9IDEwMDsgLyogRmFrZSwgb3B0aW9uIHBhcnNpbmcgd2lsbCBnZXQgdGhlCisJCQkJICByaWdodCB2YWx1ZSAqLworCWlyZXE2LT5wa3RvcHRzCT0gTlVMTDsKKworCWlmIChpcHY2X29wdF9hY2NlcHRlZChzaywgc2tiKSB8fAorCSAgICBucC0+cnhvcHQuYml0cy5yeGluZm8gfHwgbnAtPnJ4b3B0LmJpdHMucnhvaW5mbyB8fAorCSAgICBucC0+cnhvcHQuYml0cy5yeGhsaW0gfHwgbnAtPnJ4b3B0LmJpdHMucnhvaGxpbSkgeworCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKKwkJaXJlcTYtPnBrdG9wdHMgPSBza2I7CisJfQorCWlyZXE2LT5paWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCisJLyogU28gdGhhdCBsaW5rIGxvY2FscyBoYXZlIG1lYW5pbmcgKi8KKwlpZiAoIXNrLT5za19ib3VuZF9kZXZfaWYgJiYKKwkgICAgaXB2Nl9hZGRyX3R5cGUoJmlyZXE2LT5ybXRfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKQorCQlpcmVxNi0+aWlmID0gaW5ldDZfaWlmKHNrYik7CisKKwkvKiAKKwkgKiBTdGVwIDM6IFByb2Nlc3MgTElTVEVOIHN0YXRlCisJICoKKwkgKiBTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdCBDb29raWUKKwkgKgorCSAqIEluIGZhY3Qgd2UgZGVmZXIgc2V0dGluZyBTLkdTUiwgUy5TV0wsIFMuU1dIIHRvCisJICogZGNjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZC4KKwkgKi8KKwlkcmVxID0gZGNjcF9yc2socmVxKTsKKwlkcmVxLT5kcmVxX2lzcgkgICA9IGRjYi0+ZGNjcGRfc2VxOworCWRyZXEtPmRyZXFfaXNzCSAgID0gZGNjcF92Nl9pbml0X3NlcXVlbmNlKHNrLCBza2IpOworCWRyZXEtPmRyZXFfc2VydmljZSA9IHNlcnZpY2U7CisKKwlpZiAoZGNjcF92Nl9zZW5kX3Jlc3BvbnNlKHNrLCByZXEsIE5VTEwpKQorCQlnb3RvIGRyb3BfYW5kX2ZyZWU7CisKKwlpbmV0Nl9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc2ssIHJlcSwgRENDUF9USU1FT1VUX0lOSVQpOworCXJldHVybiAwOworCitkcm9wX2FuZF9mcmVlOgorCXJlcXNrX2ZyZWUocmVxKTsKK2Ryb3A6CisJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfQVRURU1QVEZBSUxTKTsKKwlkY2ItPmRjY3BkX3Jlc2V0X2NvZGUgPSByZXNldF9jb2RlOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBzb2NrICpkY2NwX3Y2X3JlcXVlc3RfcmVjdl9zb2NrKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCQkgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqaXJlcTYgPSBpbmV0Nl9yc2socmVxKTsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbmV3bnAsICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OworCXN0cnVjdCBkY2NwX3NvY2sgKm5ld2RwOworCXN0cnVjdCBkY2NwNl9zb2NrICpuZXdkcDY7CisJc3RydWN0IHNvY2sgKm5ld3NrOworCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0OworCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisJCS8qCisJCSAqCXY2IG1hcHBlZAorCQkgKi8KKworCQluZXdzayA9IGRjY3BfdjRfcmVxdWVzdF9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBkc3QpOworCQlpZiAobmV3c2sgPT0gTlVMTCkgCisJCQlyZXR1cm4gTlVMTDsKKworCQluZXdkcDYgPSAoc3RydWN0IGRjY3A2X3NvY2sgKiluZXdzazsKKwkJbmV3ZHAgPSBkY2NwX3NrKG5ld3NrKTsKKwkJbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCQluZXdpbmV0LT5waW5ldDYgPSAmbmV3ZHA2LT5pbmV0NjsKKwkJbmV3bnAgPSBpbmV0Nl9zayhuZXdzayk7CisKKwkJbWVtY3B5KG5ld25wLCBucCwgc2l6ZW9mKHN0cnVjdCBpcHY2X3BpbmZvKSk7CisKKwkJaXB2Nl9hZGRyX3NldCgmbmV3bnAtPmRhZGRyLCAwLCAwLCBodG9ubCgweDAwMDBGRkZGKSwKKwkJCSAgICAgIG5ld2luZXQtPmRhZGRyKTsKKworCQlpcHY2X2FkZHJfc2V0KCZuZXducC0+c2FkZHIsIDAsIDAsIGh0b25sKDB4MDAwMEZGRkYpLAorCQkJICAgICAgbmV3aW5ldC0+c2FkZHIpOworCisJCWlwdjZfYWRkcl9jb3B5KCZuZXducC0+cmN2X3NhZGRyLCAmbmV3bnAtPnNhZGRyKTsKKworCQlpbmV0X2NzayhuZXdzayktPmljc2tfYWZfb3BzID0gJmRjY3BfaXB2Nl9tYXBwZWQ7CisJCW5ld3NrLT5za19iYWNrbG9nX3JjdiA9IGRjY3BfdjRfZG9fcmN2OworCQluZXducC0+cGt0b3B0aW9ucyAgPSBOVUxMOworCQluZXducC0+b3B0CSAgID0gTlVMTDsKKwkJbmV3bnAtPm1jYXN0X29pZiAgID0gaW5ldDZfaWlmKHNrYik7CisJCW5ld25wLT5tY2FzdF9ob3BzICA9IHNrYi0+bmguaXB2NmgtPmhvcF9saW1pdDsKKworCQkvKgorCQkgKiBObyBuZWVkIHRvIGNoYXJnZSB0aGlzIHNvY2sgdG8gdGhlIHJlbGV2YW50IElQdjYgcmVmY250IGRlYnVnIHNvY2tzIGNvdW50CisJCSAqIGhlcmUsIGRjY3BfY3JlYXRlX29wZW5yZXFfY2hpbGQgbm93IGRvZXMgdGhpcyBmb3IgdXMsIHNlZSB0aGUgY29tbWVudCBpbgorCQkgKiB0aGF0IGZ1bmN0aW9uIGZvciB0aGUgZ29yeSBkZXRhaWxzLiAtYWNtZQorCQkgKi8KKworCQkvKiBJdCBpcyB0cmlja3kgcGxhY2UuIFVudGlsIHRoaXMgbW9tZW50IElQdjQgdGNwCisJCSAgIHdvcmtlZCB3aXRoIElQdjYgaWNzay5pY3NrX2FmX29wcy4KKwkJICAgU3luYyBpdCBub3cuCisJCSAqLworCQlkY2NwX3N5bmNfbXNzKG5ld3NrLCBpbmV0X2NzayhuZXdzayktPmljc2tfcG10dV9jb29raWUpOworCisJCXJldHVybiBuZXdzazsKKwl9CisKKwlvcHQgPSBucC0+b3B0OworCisJaWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpCisJCWdvdG8gb3V0X292ZXJmbG93OworCisJaWYgKG5wLT5yeG9wdC5iaXRzLm9zcmNydCA9PSAyICYmCisJICAgIG9wdCA9PSBOVUxMICYmIGlyZXE2LT5wa3RvcHRzKSB7CisJCXN0cnVjdCBpbmV0Nl9za2JfcGFybSAqcnhvcHQgPSBJUDZDQihpcmVxNi0+cGt0b3B0cyk7CisJCWlmIChyeG9wdC0+c3JjcnQpCisJCQlvcHQgPSBpcHY2X2ludmVydF9ydGhkcihzaywKKwkJCQkoc3RydWN0IGlwdjZfcnRfaGRyICopKGlyZXE2LT5wa3RvcHRzLT5uaC5yYXcgKworCQkJCQkJICAgICAgIHJ4b3B0LT5zcmNydCkpOworCX0KKworCWlmIChkc3QgPT0gTlVMTCkgeworCQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKKwkJc3RydWN0IGZsb3dpIGZsOworCisJCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOworCQlmbC5wcm90byA9IElQUFJPVE9fRENDUDsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZpcmVxNi0+cm10X2FkZHIpOworCQlpZiAob3B0ICYmIG9wdC0+c3JjcnQpIHsKKwkJCXN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKikgb3B0LT5zcmNydDsKKwkJCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOworCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7CisJCQlmaW5hbF9wID0gJmZpbmFsOworCQl9CisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmaXJlcTYtPmxvY19hZGRyKTsKKwkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKKwkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKKwkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisKKwkJaWYgKGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGZpbmFsX3ApCisJCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CisKKwkJaWYgKCh4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKQorCQkJZ290byBvdXQ7CisJfSAKKworCW5ld3NrID0gZGNjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChzaywgcmVxLCBza2IpOworCWlmIChuZXdzayA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCS8qCisJICogTm8gbmVlZCB0byBjaGFyZ2UgdGhpcyBzb2NrIHRvIHRoZSByZWxldmFudCBJUHY2IHJlZmNudCBkZWJ1ZyBzb2NrcworCSAqIGNvdW50IGhlcmUsIGRjY3BfY3JlYXRlX29wZW5yZXFfY2hpbGQgbm93IGRvZXMgdGhpcyBmb3IgdXMsIHNlZSB0aGUKKwkgKiBjb21tZW50IGluIHRoYXQgZnVuY3Rpb24gZm9yIHRoZSBnb3J5IGRldGFpbHMuIC1hY21lCisJICovCisKKwlpcDZfZHN0X3N0b3JlKG5ld3NrLCBkc3QsIE5VTEwpOworCW5ld3NrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzICYKKwkJfihORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7CisKKwluZXdkcDYgPSAoc3RydWN0IGRjY3A2X3NvY2sgKiluZXdzazsKKwluZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CisJbmV3aW5ldC0+cGluZXQ2ID0gJm5ld2RwNi0+aW5ldDY7CisJbmV3ZHAgPSBkY2NwX3NrKG5ld3NrKTsKKwluZXducCA9IGluZXQ2X3NrKG5ld3NrKTsKKworCW1lbWNweShuZXducCwgbnAsIHNpemVvZihzdHJ1Y3QgaXB2Nl9waW5mbykpOworCisJaXB2Nl9hZGRyX2NvcHkoJm5ld25wLT5kYWRkciwgJmlyZXE2LT5ybXRfYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJm5ld25wLT5zYWRkciwgJmlyZXE2LT5sb2NfYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJm5ld25wLT5yY3Zfc2FkZHIsICZpcmVxNi0+bG9jX2FkZHIpOworCW5ld3NrLT5za19ib3VuZF9kZXZfaWYgPSBpcmVxNi0+aWlmOworCisJLyogTm93IElQdjYgb3B0aW9ucy4uLiAKKworCSAgIEZpcnN0OiBubyBJUHY0IG9wdGlvbnMuCisJICovCisJbmV3aW5ldC0+b3B0ID0gTlVMTDsKKworCS8qIENsb25lIFJYIGJpdHMgKi8KKwluZXducC0+cnhvcHQuYWxsID0gbnAtPnJ4b3B0LmFsbDsKKworCS8qIENsb25lIHBrdG9wdGlvbnMgcmVjZWl2ZWQgd2l0aCBTWU4gKi8KKwluZXducC0+cGt0b3B0aW9ucyA9IE5VTEw7CisJaWYgKGlyZXE2LT5wa3RvcHRzICE9IE5VTEwpIHsKKwkJbmV3bnAtPnBrdG9wdGlvbnMgPSBza2JfY2xvbmUoaXJlcTYtPnBrdG9wdHMsIEdGUF9BVE9NSUMpOworCQlrZnJlZV9za2IoaXJlcTYtPnBrdG9wdHMpOworCQlpcmVxNi0+cGt0b3B0cyA9IE5VTEw7CisJCWlmIChuZXducC0+cGt0b3B0aW9ucykKKwkJCXNrYl9zZXRfb3duZXJfcihuZXducC0+cGt0b3B0aW9ucywgbmV3c2spOworCX0KKwluZXducC0+b3B0CSAgPSBOVUxMOworCW5ld25wLT5tY2FzdF9vaWYgID0gaW5ldDZfaWlmKHNrYik7CisJbmV3bnAtPm1jYXN0X2hvcHMgPSBza2ItPm5oLmlwdjZoLT5ob3BfbGltaXQ7CisKKwkvKiBDbG9uZSBuYXRpdmUgSVB2NiBvcHRpb25zIGZyb20gbGlzdGVuaW5nIHNvY2tldCAoaWYgYW55KQorCisJICAgWWVzLCBrZWVwaW5nIHJlZmVyZW5jZSBjb3VudCB3b3VsZCBiZSBtdWNoIG1vcmUgY2xldmVyLAorCSAgIGJ1dCB3ZSBtYWtlIG9uZSBtb3JlIG9uZSB0aGluZyB0aGVyZTogcmVhdHRhY2ggb3B0bWVtCisJICAgdG8gbmV3c2suCisJICovCisJaWYgKG9wdCkgeworCQluZXducC0+b3B0ID0gaXB2Nl9kdXBfb3B0aW9ucyhuZXdzaywgb3B0KTsKKwkJaWYgKG9wdCAhPSBucC0+b3B0KQorCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CisJfQorCisJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKKwlpZiAobmV3bnAtPm9wdCkKKwkJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gKG5ld25wLT5vcHQtPm9wdF9uZmxlbiArCisJCQkJCQkgICAgIG5ld25wLT5vcHQtPm9wdF9mbGVuKTsKKworCWRjY3Bfc3luY19tc3MobmV3c2ssIGRzdF9tdHUoZHN0KSk7CisKKwluZXdpbmV0LT5kYWRkciA9IG5ld2luZXQtPnNhZGRyID0gbmV3aW5ldC0+cmN2X3NhZGRyID0gTE9PUEJBQ0s0X0lQVjY7CisKKwlfX2luZXQ2X2hhc2goJmRjY3BfaGFzaGluZm8sIG5ld3NrKTsKKwlpbmV0X2luaGVyaXRfcG9ydCgmZGNjcF9oYXNoaW5mbywgc2ssIG5ld3NrKTsKKworCXJldHVybiBuZXdzazsKKworb3V0X292ZXJmbG93OgorCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0xJU1RFTk9WRVJGTE9XUyk7CitvdXQ6CisJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfTElTVEVORFJPUFMpOworCWlmIChvcHQgJiYgb3B0ICE9IG5wLT5vcHQpCisJCXNvY2tfa2ZyZWVfcyhzaywgb3B0LCBvcHQtPnRvdF9sZW4pOworCWRzdF9yZWxlYXNlKGRzdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0J3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldAorICogaGVyZS4KKyAqCisgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuCisgKiBkb2luZyBiYWNrbG9nIHByb2Nlc3Npbmcgd2UgdXNlIHRoZSBCSCBsb2NraW5nIHNjaGVtZS4KKyAqIFRoaXMgaXMgYmVjYXVzZSB3ZSBjYW5ub3Qgc2xlZXAgd2l0aCB0aGUgb3JpZ2luYWwgc3BpbmxvY2sKKyAqIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgZGNjcF92Nl9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqb3B0X3NrYiA9IE5VTEw7CisKKwkvKiBJbWFnaW5lOiBzb2NrZXQgaXMgSVB2Ni4gSVB2NCBwYWNrZXQgYXJyaXZlcywKKwkgICBnb2VzIHRvIElQdjQgcmVjZWl2ZSBoYW5kbGVyIGFuZCBiYWNrbG9nZ2VkLgorCSAgIEZyb20gYmFja2xvZyBpdCBhbHdheXMgZ29lcyBoZXJlLiBLZXJib29tLi4uCisJICAgRm9ydHVuYXRlbHksIGRjY3BfcmN2X2VzdGFibGlzaGVkIGFuZCByY3ZfZXN0YWJsaXNoZWQKKwkgICBoYW5kbGUgdGhlbSBjb3JyZWN0bHksIGJ1dCBpdCBpcyBub3QgY2FzZSB3aXRoCisJICAgZGNjcF92Nl9obmRfcmVxIGFuZCBkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KCkuICAgLS1BTksKKwkgKi8KKworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJcmV0dXJuIGRjY3BfdjRfZG9fcmN2KHNrLCBza2IpOworCisJaWYgKHNrX2ZpbHRlcihzaywgc2tiLCAwKSkKKwkJZ290byBkaXNjYXJkOworCisJLyoKKwkgKglzb2NrZXQgbG9ja2luZyBpcyBoZXJlIGZvciBTTVAgcHVycG9zZXMgYXMgYmFja2xvZyByY3YKKwkgKglpcyBjdXJyZW50bHkgY2FsbGVkIHdpdGggYmggcHJvY2Vzc2luZyBkaXNhYmxlZC4KKwkgKi8KKworCS8qIERvIFN0ZXZlbnMnIElQVjZfUEtUT1BUSU9OUy4KKworCSAgIFllcywgZ3V5cywgaXQgaXMgdGhlIG9ubHkgcGxhY2UgaW4gb3VyIGNvZGUsIHdoZXJlIHdlCisJICAgbWF5IG1ha2UgaXQgbm90IGFmZmVjdGluZyBJUHY0LgorCSAgIFRoZSByZXN0IG9mIGNvZGUgaXMgcHJvdG9jb2wgaW5kZXBlbmRlbnQsCisJICAgYW5kIEkgZG8gbm90IGxpa2UgaWRlYSB0byB1Z2xpZnkgSVB2NC4KKworCSAgIEFjdHVhbGx5LCBhbGwgdGhlIGlkZWEgYmVoaW5kIElQVjZfUEtUT1BUSU9OUworCSAgIGxvb2tzIG5vdCB2ZXJ5IHdlbGwgdGhvdWdodC4gRm9yIG5vdyB3ZSBsYXRjaAorCSAgIG9wdGlvbnMsIHJlY2VpdmVkIGluIHRoZSBsYXN0IHBhY2tldCwgZW5xdWV1ZWQKKwkgICBieSB0Y3AuIEZlZWwgZnJlZSB0byBwcm9wb3NlIGJldHRlciBzb2x1dGlvbi4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLUFOSyAoOTgwNzI4KQorCSAqLworCWlmIChucC0+cnhvcHQuYWxsKQorCQlvcHRfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfT1BFTikgeyAvKiBGYXN0IHBhdGggKi8KKwkJaWYgKGRjY3BfcmN2X2VzdGFibGlzaGVkKHNrLCBza2IsIGRjY3BfaGRyKHNrYiksIHNrYi0+bGVuKSkKKwkJCWdvdG8gcmVzZXQ7CisJCXJldHVybiAwOworCX0KKworCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9MSVNURU4pIHsgCisJCXN0cnVjdCBzb2NrICpuc2sgPSBkY2NwX3Y2X2huZF9yZXEoc2ssIHNrYik7CisJCWlmICghbnNrKQorCQkJZ290byBkaXNjYXJkOworCisJCS8qCisJCSAqIFF1ZXVlIGl0IG9uIHRoZSBuZXcgc29ja2V0IGlmIHRoZSBuZXcgc29ja2V0IGlzIGFjdGl2ZSwKKwkJICogb3RoZXJ3aXNlIHdlIGp1c3Qgc2hvcnRjaXJjdWl0IHRoaXMgYW5kIGNvbnRpbnVlIHdpdGgKKwkJICogdGhlIG5ldyBzb2NrZXQuLgorCQkgKi8KKyAJCWlmKG5zayAhPSBzaykgeworCQkJaWYgKGRjY3BfY2hpbGRfcHJvY2VzcyhzaywgbnNrLCBza2IpKQorCQkJCWdvdG8gcmVzZXQ7CisJCQlpZiAob3B0X3NrYikKKwkJCQlfX2tmcmVlX3NrYihvcHRfc2tiKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGRjY3BfcmN2X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYiwgZGNjcF9oZHIoc2tiKSwgc2tiLT5sZW4pKQorCQlnb3RvIHJlc2V0OworCXJldHVybiAwOworCityZXNldDoKKwlkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KHNrYik7CitkaXNjYXJkOgorCWlmIChvcHRfc2tiKQorCQlfX2tmcmVlX3NrYihvcHRfc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkY2NwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHVuc2lnbmVkIGludCAqbmhvZmZwKQoreworCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGg7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOworCXN0cnVjdCBzb2NrICpzazsKKworCS8qIFN0ZXAgMTogQ2hlY2sgaGVhZGVyIGJhc2ljczogKi8KKworCWlmIChkY2NwX2ludmFsaWRfcGFja2V0KHNrYikpCisJCWdvdG8gZGlzY2FyZF9pdDsKKworCWRoID0gZGNjcF9oZHIoc2tiKTsKKworCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSAgPSBkY2NwX2hkcl9zZXEoc2tiKTsKKwlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID0gZGgtPmRjY3BoX3R5cGU7CisKKwlpZiAoZGNjcF9wYWNrZXRfd2l0aG91dF9hY2soc2tiKSkKKwkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSA9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUTsKKwllbHNlCisJCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEgPSBkY2NwX2hkcl9hY2tfc2VxKHNrYik7CisKKwkvKiBTdGVwIDI6CisJICogCUxvb2sgdXAgZmxvdyBJRCBpbiB0YWJsZSBhbmQgZ2V0IGNvcnJlc3BvbmRpbmcgc29ja2V0ICovCisJc2sgPSBfX2luZXQ2X2xvb2t1cCgmZGNjcF9oYXNoaW5mbywgJnNrYi0+bmguaXB2NmgtPnNhZGRyLAorCQkJICAgIGRoLT5kY2NwaF9zcG9ydCwKKwkJCSAgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsIG50b2hzKGRoLT5kY2NwaF9kcG9ydCksCisJCQkgICAgaW5ldDZfaWlmKHNrYikpOworCS8qIAorCSAqIFN0ZXAgMjoKKwkgKiAJSWYgbm8gc29ja2V0IC4uLgorCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CisJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KKwkgKi8KKwlpZiAoc2sgPT0gTlVMTCkKKwkJZ290byBub19kY2NwX3NvY2tldDsKKworCS8qIAorCSAqIFN0ZXAgMjoKKwkgKiAJLi4uIG9yIFMuc3RhdGUgPT0gVElNRVdBSVQsCisJICoJCUdlbmVyYXRlIFJlc2V0KE5vIENvbm5lY3Rpb24pIHVubGVzcyBQLnR5cGUgPT0gUmVzZXQKKwkgKgkJRHJvcCBwYWNrZXQgYW5kIHJldHVybgorCSAqLworCSAgICAgICAKKwlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfVElNRV9XQUlUKQorICAgICAgICAgICAgICAgIGdvdG8gZG9fdGltZV93YWl0OworCisJaWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKQorCQlnb3RvIGRpc2NhcmRfYW5kX3JlbHNlOworCisJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IpID8gLTEgOiAwOworCitub19kY2NwX3NvY2tldDoKKwlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKKwkJZ290byBkaXNjYXJkX2l0OworCS8qCisJICogU3RlcCAyOgorCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CisJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KKwkgKi8KKwlpZiAoZGgtPmRjY3BoX3R5cGUgIT0gRENDUF9QS1RfUkVTRVQpIHsKKwkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfcmVzZXRfY29kZSA9CisJCQkJCURDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OOworCQlkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KHNrYik7CisJfQorZGlzY2FyZF9pdDoKKworCS8qCisJICoJRGlzY2FyZCBmcmFtZQorCSAqLworCisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7CisKK2Rpc2NhcmRfYW5kX3JlbHNlOgorCXNvY2tfcHV0KHNrKTsKKwlnb3RvIGRpc2NhcmRfaXQ7CisKK2RvX3RpbWVfd2FpdDoKKwlpbmV0X3R3c2tfcHV0KChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICopc2spOworCWdvdG8gbm9fZGNjcF9zb2NrZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2Nl9hZl9vcHMgPSB7CisJLnF1ZXVlX3htaXQJPQlpbmV0Nl9jc2tfeG1pdCwKKwkuc2VuZF9jaGVjawk9CWRjY3BfdjZfc2VuZF9jaGVjaywKKwkucmVidWlsZF9oZWFkZXIJPQlpbmV0Nl9za19yZWJ1aWxkX2hlYWRlciwKKwkuY29ubl9yZXF1ZXN0CT0JZGNjcF92Nl9jb25uX3JlcXVlc3QsCisJLnN5bl9yZWN2X3NvY2sJPQlkY2NwX3Y2X3JlcXVlc3RfcmVjdl9zb2NrLAorCS5uZXRfaGVhZGVyX2xlbgk9CXNpemVvZihzdHJ1Y3QgaXB2NmhkciksCisJLnNldHNvY2tvcHQJPQlpcHY2X3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJPQlpcHY2X2dldHNvY2tvcHQsCisJLmFkZHIyc29ja2FkZHIJPQlpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkciwKKwkuc29ja2FkZHJfbGVuCT0Jc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpCit9OworCisvKgorICoJRENDUCBvdmVyIElQdjQgdmlhIElORVQ2IEFQSQorICovCitzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfbWFwcGVkID0geworCS5xdWV1ZV94bWl0CT0JaXBfcXVldWVfeG1pdCwKKwkuc2VuZF9jaGVjawk9CWRjY3BfdjRfc2VuZF9jaGVjaywKKwkucmVidWlsZF9oZWFkZXIJPQlpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLAorCS5jb25uX3JlcXVlc3QJPQlkY2NwX3Y2X2Nvbm5fcmVxdWVzdCwKKwkuc3luX3JlY3Zfc29jawk9CWRjY3BfdjZfcmVxdWVzdF9yZWN2X3NvY2ssCisJLm5ldF9oZWFkZXJfbGVuCT0Jc2l6ZW9mKHN0cnVjdCBpcGhkciksCisJLnNldHNvY2tvcHQJPQlpcHY2X3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJPQlpcHY2X2dldHNvY2tvcHQsCisJLmFkZHIyc29ja2FkZHIJPQlpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkciwKKwkuc29ja2FkZHJfbGVuCT0Jc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpCit9OworCisvKiBOT1RFOiBBIGxvdCBvZiB0aGluZ3Mgc2V0IHRvIHplcm8gZXhwbGljaXRseSBieSBjYWxsIHRvCisgKiAgICAgICBza19hbGxvYygpIHNvIG5lZWQgbm90IGJlIGRvbmUgaGVyZS4KKyAqLworc3RhdGljIGludCBkY2NwX3Y2X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCit7CisJaW50IGVyciA9IGRjY3BfdjRfaW5pdF9zb2NrKHNrKTsKKworCWlmIChlcnIgPT0gMCkKKwkJaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcyA9ICZkY2NwX2lwdjZfYWZfb3BzOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkY2NwX3Y2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCit7CisJZGNjcF92NF9kZXN0cm95X3NvY2soc2spOworCXJldHVybiBpbmV0Nl9kZXN0cm95X3NvY2soc2spOworfQorCitzdGF0aWMgc3RydWN0IHByb3RvIGRjY3BfdjZfcHJvdCA9IHsKKwkubmFtZQkJCT0gIkRDQ1B2NiIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuY2xvc2UJCQk9IGRjY3BfY2xvc2UsCisJLmNvbm5lY3QJCT0gZGNjcF92Nl9jb25uZWN0LAorCS5kaXNjb25uZWN0CQk9IGRjY3BfZGlzY29ubmVjdCwKKwkuaW9jdGwJCQk9IGRjY3BfaW9jdGwsCisJLmluaXQJCQk9IGRjY3BfdjZfaW5pdF9zb2NrLAorCS5zZXRzb2Nrb3B0CQk9IGRjY3Bfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkJPSBkY2NwX2dldHNvY2tvcHQsCisJLnNlbmRtc2cJCT0gZGNjcF9zZW5kbXNnLAorCS5yZWN2bXNnCQk9IGRjY3BfcmVjdm1zZywKKwkuYmFja2xvZ19yY3YJCT0gZGNjcF92Nl9kb19yY3YsCisJLmhhc2gJCQk9IGRjY3BfdjZfaGFzaCwKKwkudW5oYXNoCQkJPSBkY2NwX3VuaGFzaCwKKwkuYWNjZXB0CQkJPSBpbmV0X2Nza19hY2NlcHQsCisJLmdldF9wb3J0CQk9IGRjY3BfdjZfZ2V0X3BvcnQsCisJLnNodXRkb3duCQk9IGRjY3Bfc2h1dGRvd24sCisJLmRlc3Ryb3kJCT0gZGNjcF92Nl9kZXN0cm95X3NvY2ssCisJLm9ycGhhbl9jb3VudAkJPSAmZGNjcF9vcnBoYW5fY291bnQsCisJLm1heF9oZWFkZXIJCT0gTUFYX0RDQ1BfSEVBREVSLAorCS5vYmpfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGRjY3A2X3NvY2spLAorCS5yc2tfcHJvdAkJPSAmZGNjcDZfcmVxdWVzdF9zb2NrX29wcywKKwkudHdza19wcm90CQk9ICZkY2NwNl90aW1ld2FpdF9zb2NrX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgZGNjcF92Nl9wcm90b2NvbCA9IHsKKwkuaGFuZGxlcgk9CWRjY3BfdjZfcmN2LAorCS5lcnJfaGFuZGxlcgk9CWRjY3BfdjZfZXJyLAorCS5mbGFncwkJPQlJTkVUNl9QUk9UT19OT1BPTElDWSB8IElORVQ2X1BST1RPX0ZJTkFMLAorfTsKKworc3RhdGljIHN0cnVjdCBwcm90b19vcHMgaW5ldDZfZGNjcF9vcHMgPSB7CisJLmZhbWlseQkJPSBQRl9JTkVUNiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlbGVhc2UJPSBpbmV0Nl9yZWxlYXNlLAorCS5iaW5kCQk9IGluZXQ2X2JpbmQsCisJLmNvbm5lY3QJPSBpbmV0X3N0cmVhbV9jb25uZWN0LAorCS5zb2NrZXRwYWlyCT0gc29ja19ub19zb2NrZXRwYWlyLAorCS5hY2NlcHQJCT0gaW5ldF9hY2NlcHQsCisJLmdldG5hbWUJPSBpbmV0Nl9nZXRuYW1lLAorCS5wb2xsCQk9IGRjY3BfcG9sbCwKKwkuaW9jdGwJCT0gaW5ldDZfaW9jdGwsCisJLmxpc3RlbgkJPSBpbmV0X2RjY3BfbGlzdGVuLAorCS5zaHV0ZG93bgk9IGluZXRfc2h1dGRvd24sCisJLnNldHNvY2tvcHQJPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0CT0gc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuc2VuZG1zZwk9IGluZXRfc2VuZG1zZywKKwkucmVjdm1zZwk9IHNvY2tfY29tbW9uX3JlY3Ztc2csCisJLm1tYXAJCT0gc29ja19ub19tbWFwLAorCS5zZW5kcGFnZQk9IHNvY2tfbm9fc2VuZHBhZ2UsCit9OworCitzdGF0aWMgc3RydWN0IGluZXRfcHJvdG9zdyBkY2NwX3Y2X3Byb3Rvc3cgPSB7CisJLnR5cGUJCT0gU09DS19EQ0NQLAorCS5wcm90b2NvbAk9IElQUFJPVE9fRENDUCwKKwkucHJvdAkJPSAmZGNjcF92Nl9wcm90LAorCS5vcHMJCT0gJmluZXQ2X2RjY3Bfb3BzLAorCS5jYXBhYmlsaXR5CT0gLTEsCisJLmZsYWdzCQk9IElORVRfUFJPVE9TV19JQ1NLLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGNjcF92Nl9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Y2X3Byb3QsIDEpOworCisJaWYgKGVyciAhPSAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IGluZXQ2X2FkZF9wcm90b2NvbCgmZGNjcF92Nl9wcm90b2NvbCwgSVBQUk9UT19EQ0NQKTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcHJvdG87CisKKwlpbmV0Nl9yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y2X3Byb3Rvc3cpOworb3V0OgorCXJldHVybiBlcnI7CitvdXRfdW5yZWdpc3Rlcl9wcm90bzoKKwlwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Y2X3Byb3QpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGNjcF92Nl9leGl0KHZvaWQpCit7CisJaW5ldDZfZGVsX3Byb3RvY29sKCZkY2NwX3Y2X3Byb3RvY29sLCBJUFBST1RPX0RDQ1ApOworCWluZXQ2X3VucmVnaXN0ZXJfcHJvdG9zdygmZGNjcF92Nl9wcm90b3N3KTsKKwlwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Y2X3Byb3QpOworfQorCittb2R1bGVfaW5pdChkY2NwX3Y2X2luaXQpOworbW9kdWxlX2V4aXQoZGNjcF92Nl9leGl0KTsKKworLyoKKyAqIF9fc3RyaW5naWZ5IGRvZXNuJ3QgbGlrZXMgZW51bXMsIHNvIHVzZSBTT0NLX0RDQ1AgKDYpIGFuZCBJUFBST1RPX0RDQ1AgKDMzKQorICogdmFsdWVzIGRpcmVjdGx5LCBBbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm90b2NvbCBpcyBub3Qgc3BlY2lmaWVkLAorICogaS5lLiBuZXQtcGYtUEZfSU5FVDYtcHJvdG8tMC10eXBlLVNPQ0tfRENDUAorICovCitNT0RVTEVfQUxJQVMoIm5ldC1wZi0iIF9fc3RyaW5naWZ5KFBGX0lORVQ2KSAiLXByb3RvLTMzLXR5cGUtNiIpOworTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUNikgIi1wcm90by0wLXR5cGUtNiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQG1hbmRyaXZhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRENDUHY2IC0gRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sbGVkIFByb3RvY29sIik7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY2LmggYi9uZXQvZGNjcC9pcHY2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkNGU5MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kY2NwL2lwdjYuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9EQ0NQX0lQVjZfSAorI2RlZmluZSBfRENDUF9JUFY2X0gKKy8qCisgKiAgbmV0L2RjY3AvaXB2Ni5oCisgKgorICogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEQ0NQIHByb3RvY29sCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBnaG9zdHByb3RvY29scy5uZXQ+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZGNjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKworc3RydWN0IGRjY3A2X3NvY2sgeworCXN0cnVjdCBkY2NwX3NvY2sgIGRjY3A7CisJLyoKKwkgKiBpcHY2X3BpbmZvIGhhcyB0byBiZSB0aGUgbGFzdCBtZW1iZXIgb2YgZGNjcDZfc29jaywKKwkgKiBzZWUgaW5ldDZfc2tfZ2VuZXJpYy4KKwkgKi8KKwlzdHJ1Y3QgaXB2Nl9waW5mbyBpbmV0NjsKK307CisKK3N0cnVjdCBkY2NwNl9yZXF1ZXN0X3NvY2sgeworCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAgZGNjcDsKKwlzdHJ1Y3QgaW5ldDZfcmVxdWVzdF9zb2NrIGluZXQ2OworfTsKKworc3RydWN0IGRjY3A2X3RpbWV3YWl0X3NvY2sgeworCXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgICBpbmV0OworCXN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICB0dzY7Cit9OworCisjZW5kaWYgLyogX0RDQ1BfSVBWNl9IICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9taW5pc29ja3MuYyBiL25ldC9kY2NwL21pbmlzb2Nrcy5jCmluZGV4IDEzOTM0NjEuLjI5MjYxZmMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL21pbmlzb2Nrcy5jCisrKyBiL25ldC9kY2NwL21pbmlzb2Nrcy5jCkBAIC00MCw2ICs0MCw4IEBACiAJCQkJCSAgICAodW5zaWduZWQgbG9uZykmZGNjcF9kZWF0aF9yb3cpLAogfTsKIAorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9kZWF0aF9yb3cpOworCiB2b2lkIGRjY3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pCiB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBOVUxMOwpAQCAtNTAsNyArNTIsMTggQEAKIAlpZiAodHcgIT0gTlVMTCkgewogCQljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJCWNvbnN0IGludCBydG8gPSAoaWNzay0+aWNza19ydG8gPDwgMikgLSAoaWNzay0+aWNza19ydG8gPj4gMSk7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJCWlmICh0dy0+dHdfZmFtaWx5ID09IFBGX0lORVQ2KSB7CisJCQljb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJCQlzdHJ1Y3QgaW5ldDZfdGltZXdhaXRfc29jayAqdHc2OwogCisJCQl0dy0+dHdfaXB2Nl9vZmZzZXQgPSBpbmV0Nl90d19vZmZzZXQoc2stPnNrX3Byb3QpOworCQkJdHc2ID0gaW5ldDZfdHdzaygoc3RydWN0IHNvY2sgKil0dyk7CisJCQlpcHY2X2FkZHJfY29weSgmdHc2LT50d192Nl9kYWRkciwgJm5wLT5kYWRkcik7CisJCQlpcHY2X2FkZHJfY29weSgmdHc2LT50d192Nl9yY3Zfc2FkZHIsICZucC0+cmN2X3NhZGRyKTsKKwkJCXR3LT50d19pcHY2b25seSA9IG5wLT5pcHY2b25seTsKKwkJfQorI2VuZGlmCiAJCS8qIExpbmthZ2UgdXBkYXRlcy4gKi8KIAkJX19pbmV0X3R3c2tfaGFzaGRhbmNlKHR3LCBzaywgJmRjY3BfaGFzaGluZm8pOwogCkBAIC0xNzAsNiArMTgzLDggQEAKIAlyZXR1cm4gbmV3c2s7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfY3JlYXRlX29wZW5yZXFfY2hpbGQpOworCiAvKiAKICAqIFByb2Nlc3MgYW4gaW5jb21pbmcgcGFja2V0IGZvciBSRVNQT05EIHNvY2tldHMgcmVwcmVzZW50ZWQKICAqIGFzIGFuIHJlcXVlc3Rfc29jay4KQEAgLTIxNCw3ICsyMjksNyBAQAogCQlnb3RvIGRyb3A7CiAJfQogCi0JY2hpbGQgPSBkY2NwX3Y0X3JlcXVlc3RfcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgTlVMTCk7CisJY2hpbGQgPSBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgTlVMTCk7CiAJaWYgKGNoaWxkID09IE5VTEwpCiAJCWdvdG8gbGlzdGVuX292ZXJmbG93OwogCkBAIC0yMzYsNiArMjUxLDggQEAKIAlnb3RvIG91dDsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9jaGVja19yZXEpOworCiAvKgogICogIFF1ZXVlIHNlZ21lbnQgb24gdGhlIG5ldyBzb2NrZXQgaWYgdGhlIG5ldyBzb2NrZXQgaXMgYWN0aXZlLAogICogIG90aGVyd2lzZSB3ZSBqdXN0IHNob3J0Y2lyY3VpdCB0aGlzIGFuZCBjb250aW51ZSB3aXRoCkBAIC0yNjYsMyArMjgzLDUgQEAKIAlzb2NrX3B1dChjaGlsZCk7CiAJcmV0dXJuIHJldDsKIH0KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9jaGlsZF9wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL291dHB1dC5jIGIvbmV0L2RjY3Avb3V0cHV0LmMKaW5kZXggNzRmZjg3MC4uZWZkN2ZmYiAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3V0cHV0LmMKKysrIGIvbmV0L2RjY3Avb3V0cHV0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAorI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSAiYWNrdmVjLmgiCkBAIC00Myw2ICs0NCw3IEBACiB7CiAJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKIAkJY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCQljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJCXN0cnVjdCBkY2NwX3NrYl9jYiAqZGNiID0gRENDUF9TS0JfQ0Ioc2tiKTsKIAkJc3RydWN0IGRjY3BfaGRyICpkaDsKQEAgLTEwOCw4ICsxMTAsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlkaC0+ZGNjcGhfY2hlY2tzdW0gPSBkY2NwX3Y0X2NoZWNrc3VtKHNrYiwgaW5ldC0+c2FkZHIsCi0JCQkJCQkgICAgICBpbmV0LT5kYWRkcik7CisJCWljc2stPmljc2tfYWZfb3BzLT5zZW5kX2NoZWNrKHNrLCBza2ItPmxlbiwgc2tiKTsKIAogCQlpZiAoc2V0X2FjaykKIAkJCWRjY3BfZXZlbnRfYWNrX3NlbnQoc2spOwpAQCAtMTE3LDcgKzExOCw3IEBACiAJCURDQ1BfSU5DX1NUQVRTKERDQ1BfTUlCX09VVFNFR1MpOwogCiAJCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKElQQ0Ioc2tiKS0+b3B0KSk7Ci0JCWVyciA9IGlwX3F1ZXVlX3htaXQoc2tiLCAwKTsKKwkJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAwKTsKIAkJaWYgKGVyciA8PSAwKQogCQkJcmV0dXJuIGVycjsKIApAQCAtMTM0LDIwICsxMzUsMTMgQEAKIAogdW5zaWduZWQgaW50IGRjY3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSkKIHsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLQlpbnQgbXNzX25vdzsKLQotCS8qCi0JICogRklYTUU6IHdlIHJlYWxseSBzaG91bGQgYmUgdXNpbmcgdGhlIGFmX3NwZWNpZmljIHRoaW5nIHRvIHN1cHBvcnQKLQkgKiAJICBJUHY2LgotCSAqIG1zc19ub3cgPSBwbXR1IC0gdHAtPmFmX3NwZWNpZmljLT5uZXRfaGVhZGVyX2xlbiAtCi0JICogCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgLSBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCk7Ci0JICovCi0JbXNzX25vdyA9IHBtdHUgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSAtIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpIC0KLQkJICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCk7CisJaW50IG1zc19ub3cgPSAocG10dSAtIGljc2stPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiAtCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSAtIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSk7CiAKIAkvKiBOb3cgc3VidHJhY3Qgb3B0aW9uYWwgdHJhbnNwb3J0IG92ZXJoZWFkICovCi0JbXNzX25vdyAtPSBkcC0+ZGNjcHNfZXh0X2hlYWRlcl9sZW47CisJbXNzX25vdyAtPSBpY3NrLT5pY3NrX2V4dF9oZHJfbGVuOwogCiAJLyoKIAkgKiBGSVhNRTogdGhpcyBzaG91bGQgY29tZSBmcm9tIHRoZSBDQ0lEIGluZnJhc3RydWN0dXJlLCB3aGVyZSwgc2F5LApAQCAtMTYwLDEyICsxNTQsMTQgQEAKIAltc3Nfbm93IC09ICgoNSArIDYgKyAxMCArIDYgKyA2ICsgNiArIDMpIC8gNCkgKiA0OwogCiAJLyogQW5kIHN0b3JlIGNhY2hlZCByZXN1bHRzICovCi0JZHAtPmRjY3BzX3BtdHVfY29va2llID0gcG10dTsKKwlpY3NrLT5pY3NrX3BtdHVfY29va2llID0gcG10dTsKIAlkcC0+ZGNjcHNfbXNzX2NhY2hlID0gbXNzX25vdzsKIAogCXJldHVybiBtc3Nfbm93OwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3N5bmNfbXNzKTsKKwogdm9pZCBkY2NwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKQEAgLTI2Niw3ICsyNjIsNyBAQAogCiBpbnQgZGNjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKGluZXRfc2tfcmVidWlsZF9oZWFkZXIoc2spICE9IDApCisJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnJlYnVpbGRfaGVhZGVyKHNrKSAhPSAwKQogCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsgLyogUm91dGluZyBmYWlsdXJlIG9yIHNpbWlsYXIuICovCiAKIAlyZXR1cm4gZGNjcF90cmFuc21pdF9za2Ioc2ssIChza2JfY2xvbmVkKHNrYikgPwpAQCAtMzIxLDYgKzMxNyw4IEBACiAJcmV0dXJuIHNrYjsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9tYWtlX3Jlc3BvbnNlKTsKKwogc3RydWN0IHNrX2J1ZmYgKmRjY3BfbWFrZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCQljb25zdCBlbnVtIGRjY3BfcmVzZXRfY29kZXMgY29kZSkKIAkJCQkgICAKQEAgLTM3Nyw2ICszNzUsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKQogeworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gX19za19kc3RfZ2V0KHNrKTsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKQEAgLTM4NSwxMCArMzg0LDE2IEBACiAJCiAJZGNjcF9zeW5jX21zcyhzaywgZHN0X210dShkc3QpKTsKIAotCS8qCi0JICogRklYTUU6IHNldCBkcC0+e2RjY3BzX3N3aCxkY2Nwc19zd2x9LCB3aXRoCi0JICogc29tZXRoaW5nIGxpa2UgZGNjcF9pbmNfc2VxCi0JICovCisJZGNjcF91cGRhdGVfZ3NzKHNrLCBkcC0+ZGNjcHNfaXNzKTsKKyAJLyoKKwkgKiBTV0wgYW5kIEFXTCBhcmUgaW5pdGlhbGx5IGFkanVzdGVkIHNvIHRoYXQgdGhleSBhcmUgbm90IGxlc3MgdGhhbgorCSAqIHRoZSBpbml0aWFsIFNlcXVlbmNlIE51bWJlcnMgcmVjZWl2ZWQgYW5kIHNlbnQsIHJlc3BlY3RpdmVseToKKwkgKglTV0wgOj0gbWF4KEdTUiArIDEgLSBmbG9vcihXLzQpLCBJU1IpLAorCSAqCUFXTCA6PSBtYXgoR1NTIC0gVycgKyAxLCBJU1MpLgorCSAqIFRoZXNlIGFkanVzdG1lbnRzIE1VU1QgYmUgYXBwbGllZCBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisJICogY29ubmVjdGlvbi4KKyAJICovCisJZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19hd2wsIG1heDQ4KGRwLT5kY2Nwc19hd2wsIGRwLT5kY2Nwc19pc3MpKTsKIAogCWljc2stPmljc2tfcmV0cmFuc21pdHMgPSAwOwogfQpAQCAtNDIwLDYgKzQyNSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfY29ubmVjdCk7CisKIHZvaWQgZGNjcF9zZW5kX2FjayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJLyogSWYgd2UgaGF2ZSBiZWVuIHJlc2V0LCB3ZSBtYXkgbm90IHNlbmQgYWdhaW4uICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm90by5jIGIvbmV0L2RjY3AvcHJvdG8uYwppbmRleCA4YTZiMmE5Li42NWIxMWVhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm90by5jCisrKyBiL25ldC9kY2NwL3Byb3RvLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgotI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CkBAIC0zNCwxNSArMzQsMTggQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RjY3AuaD4KIAogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJkY2NwLmgiCiAKIERFRklORV9TTk1QX1NUQVQoc3RydWN0IGRjY3BfbWliLCBkY2NwX3N0YXRpc3RpY3MpIF9fcmVhZF9tb3N0bHk7CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3Bfc3RhdGlzdGljcyk7CisKIGF0b21pY190IGRjY3Bfb3JwaGFuX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3Bfb3JwaGFuX2NvdW50KTsKKwogc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9jb2wgZGNjcF9wcm90b2NvbCA9IHsKIAkuaGFuZGxlcgk9IGRjY3BfdjRfcmN2LAogCS5lcnJfaGFuZGxlcgk9IGRjY3BfdjRfZXJyLApAQCAtMTQ5LDYgKzE1Miw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9kaXNjb25uZWN0KTsKKwogLyoKICAqCVdhaXQgZm9yIGEgRENDUCBldmVudC4KICAqCkBAIC0xNTYsOCArMTYxLDggQEAKICAqCXRha2UgY2FyZSBvZiBub3JtYWwgcmFjZXMgKGJldHdlZW4gdGhlIHRlc3QgYW5kIHRoZSBldmVudCkgYW5kIHdlIGRvbid0CiAgKglnbyBsb29rIGF0IGFueSBvZiB0aGUgc29ja2V0IGJ1ZmZlcnMgZGlyZWN0bHkuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGNjcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJICAgICAgcG9sbF90YWJsZSAqd2FpdCkKK3Vuc2lnbmVkIGludCBkY2NwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCSAgICAgICBwb2xsX3RhYmxlICp3YWl0KQogewogCXVuc2lnbmVkIGludCBtYXNrOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMjA1LDEyICsyMTAsMTYgQEAKIAlyZXR1cm4gbWFzazsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9wb2xsKTsKKwogaW50IGRjY3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkY2NwX3ByX2RlYnVnKCJlbnRyeVxuIik7CiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9pb2N0bCk7CisKIHN0YXRpYyBpbnQgZGNjcF9zZXRzb2Nrb3B0X3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1MzIgc2VydmljZSwKIAkJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewpAQCAtMjU0LDcgKzI2Myw5IEBACiAJaW50IHZhbDsKIAogCWlmIChsZXZlbCAhPSBTT0xfRENDUCkKLQkJcmV0dXJuIGlwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJCXJldHVybiBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5zZXRzb2Nrb3B0KHNrLCBsZXZlbCwKKwkJCQkJCQkgICAgIG9wdG5hbWUsIG9wdHZhbCwKKwkJCQkJCQkgICAgIG9wdGxlbik7CiAKIAlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjgyLDYgKzI5Myw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9zZXRzb2Nrb3B0KTsKKwogc3RhdGljIGludCBkY2NwX2dldHNvY2tvcHRfc2VydmljZShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCiAJCQkJICAgdTMyIF9fdXNlciAqb3B0dmFsLAogCQkJCSAgIGludCBfX3VzZXIgKm9wdGxlbikKQEAgLTMyMCw4ICszMzMsOSBAQAogCWludCB2YWwsIGxlbjsKIAogCWlmIChsZXZlbCAhPSBTT0xfRENDUCkKLQkJcmV0dXJuIGlwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Ci0KKwkJcmV0dXJuIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPmdldHNvY2tvcHQoc2ssIGxldmVsLAorCQkJCQkJCSAgICAgb3B0bmFtZSwgb3B0dmFsLAorCQkJCQkJCSAgICAgb3B0bGVuKTsKIAlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMzU0LDYgKzM2OCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZ2V0c29ja29wdCk7CisKIGludCBkY2NwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJIHNpemVfdCBsZW4pCiB7CkBAIC00MTAsNiArNDI2LDggQEAKIAlnb3RvIG91dF9yZWxlYXNlOwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3NlbmRtc2cpOworCiBpbnQgZGNjcF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCSBzaXplX3QgbGVuLCBpbnQgbm9uYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbikKIHsKQEAgLTUwNyw3ICs1MjUsOSBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBpbnQgaW5ldF9kY2NwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcmVjdm1zZyk7CisKK2ludCBpbmV0X2RjY3BfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXVuc2lnbmVkIGNoYXIgb2xkX3N0YXRlOwpAQCAtNTQzLDYgKzU2Myw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kY2NwX2xpc3Rlbik7CisKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRjY3BfbmV3X3N0YXRlW10gPSB7CiAJLyogY3VycmVudCBzdGF0ZTogICBuZXcgc3RhdGU6ICAgICAgYWN0aW9uOgkqLwogCVswXQkJICA9IERDQ1BfQ0xPU0VELApAQCAtNjQ4LDEyICs2NzAsMTYgQEAKIAlzb2NrX3B1dChzayk7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfY2xvc2UpOworCiB2b2lkIGRjY3Bfc2h1dGRvd24oc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93KQogewogCWRjY3BfcHJfZGVidWcoImVudHJ5XG4iKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgaW5ldF9kY2NwX29wcyA9IHsKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3Bfc2h1dGRvd24pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X2RjY3Bfb3BzID0gewogCS5mYW1pbHkJCT0gUEZfSU5FVCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBpbmV0X3JlbGVhc2UsCkBAIC02ODEsMTEgKzcwNywxMSBAQAogc3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgZGNjcF92NF9wcm90b3N3ID0gewogCS50eXBlCQk9IFNPQ0tfRENDUCwKIAkucHJvdG9jb2wJPSBJUFBST1RPX0RDQ1AsCi0JLnByb3QJCT0gJmRjY3BfdjRfcHJvdCwKKwkucHJvdAkJPSAmZGNjcF9wcm90LAogCS5vcHMJCT0gJmluZXRfZGNjcF9vcHMsCiAJLmNhcGFiaWxpdHkJPSAtMSwKIAkubm9fY2hlY2sJPSAwLAotCS5mbGFncwkJPSAwLAorCS5mbGFncwkJPSBJTkVUX1BST1RPU1dfSUNTSywKIH07CiAKIC8qCkBAIC03NjAsMTMgKzc4NiwxNSBAQAogaW50IGRjY3BfZGVidWc7CiBtb2R1bGVfcGFyYW0oZGNjcF9kZWJ1ZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGNjcF9kZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2RlYnVnKTsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBkY2NwX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGdvYWw7CiAJaW50IGVoYXNoX29yZGVyLCBiaGFzaF9vcmRlciwgaTsKLQlpbnQgcmMgPSBwcm90b19yZWdpc3RlcigmZGNjcF92NF9wcm90LCAxKTsKKwlpbnQgcmMgPSBwcm90b19yZWdpc3RlcigmZGNjcF9wcm90LCAxKTsKIAogCWlmIChyYykKIAkJZ290byBvdXQ7CkBAIC04NjksNyArODk3LDcgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZGNjcF9oYXNoaW5mby5iaW5kX2J1Y2tldF9jYWNoZXApOwogCWRjY3BfaGFzaGluZm8uYmluZF9idWNrZXRfY2FjaGVwID0gTlVMTDsKIG91dF9wcm90b191bnJlZ2lzdGVyOgotCXByb3RvX3VucmVnaXN0ZXIoJmRjY3BfdjRfcHJvdCk7CisJcHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90KTsKIAlnb3RvIG91dDsKIH0KIApAQCAtODkyLDcgKzkyMCw3IEBACiAJCSAgIGdldF9vcmRlcihkY2NwX2hhc2hpbmZvLmVoYXNoX3NpemUgKgogCQkJICAgICBzaXplb2Yoc3RydWN0IGluZXRfZWhhc2hfYnVja2V0KSkpOwogCWttZW1fY2FjaGVfZGVzdHJveShkY2NwX2hhc2hpbmZvLmJpbmRfYnVja2V0X2NhY2hlcCk7Ci0JcHJvdG9fdW5yZWdpc3RlcigmZGNjcF92NF9wcm90KTsKKwlwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Byb3QpOwogfQogCiBtb2R1bGVfaW5pdChkY2NwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKaW5kZXggZDQwMmU5MC4uNzhlYzUzNCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKICNkZWZpbmUgRE5fU0tfSEFTSF9NQVNLIChETl9TS19IQVNIX1NJWkUgLSAxKQogCiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGRuX3Byb3RvX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGRuX3Byb3RvX29wczsKIHN0YXRpYyBERUZJTkVfUldMT0NLKGRuX2hhc2hfbG9jayk7CiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgZG5fc2tfaGFzaFtETl9TS19IQVNIX1NJWkVdOwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGRuX3dpbGRfc2s7CkBAIC0xMjUyLDcgKzEyNTIsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWVyciA9IGRldl9pb2N0bChjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCWVyciA9IC1FTk9JT0NUTENNRDsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMzQyLDcgKzIzNDIsNyBAQAogCS5vd25lcgk9CVRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgZG5fcHJvdG9fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgZG5fcHJvdG9fb3BzID0gewogCS5mYW1pbHkgPQlBRl9ERUNuZXQsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPQlkbl9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jIGIvbmV0L2RlY25ldC9kbl9uZWlnaC5jCmluZGV4IDhkMGNjM2MuLjMzYWIyNTYgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbmVpZ2guYworKysgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKQEAgLTQwOCwxMSArNDA4LDE0IEBACiAJCQl9CiAJCX0KIAotCQlpZiAoIWRuX2RiLT5yb3V0ZXIpIHsKLQkJCWRuX2RiLT5yb3V0ZXIgPSBuZWlnaF9jbG9uZShuZWlnaCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobXNnLT5wcmlvcml0eSA+ICgoc3RydWN0IGRuX25laWdoICopZG5fZGItPnJvdXRlciktPnByaW9yaXR5KQotCQkJCW5laWdoX3JlbGVhc2UoeGNoZygmZG5fZGItPnJvdXRlciwgbmVpZ2hfY2xvbmUobmVpZ2gpKSk7CisJCS8qIE9ubHkgdXNlIHJvdXRlcnMgaW4gb3VyIGFyZWEgKi8KKwkJaWYgKChkbl9udG9ocyhzcmMpPj4xMCkgPT0gZG5fbnRvaHMoKGRlY25ldF9hZGRyZXNzKT4+MTApKSB7CisJCQlpZiAoIWRuX2RiLT5yb3V0ZXIpIHsKKwkJCQlkbl9kYi0+cm91dGVyID0gbmVpZ2hfY2xvbmUobmVpZ2gpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAobXNnLT5wcmlvcml0eSA+ICgoc3RydWN0IGRuX25laWdoICopZG5fZGItPnJvdXRlciktPnByaW9yaXR5KQorCQkJCQluZWlnaF9yZWxlYXNlKHhjaGcoJmRuX2RiLT5yb3V0ZXIsIG5laWdoX2Nsb25lKG5laWdoKSkpOworCQkJfQogCQl9CiAJCXdyaXRlX3VubG9jaygmbmVpZ2gtPmxvY2spOwogCQluZWlnaF9yZWxlYXNlKG5laWdoKTsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMgYi9uZXQvZGVjbmV0L2RuX25zcF9pbi5jCmluZGV4IDM2OWYyNWIuLjQ0YmRhODUgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMKKysrIGIvbmV0L2RlY25ldC9kbl9uc3BfaW4uYwpAQCAtNzkzLDcgKzc5Myw2IEBACiBnb3RfaXQ6CiAJaWYgKHNrICE9IE5VTEwpIHsKIAkJc3RydWN0IGRuX3NjcCAqc2NwID0gRE5fU0soc2spOwotCQlpbnQgcmV0OwogCiAJCS8qIFJlc2V0IGJhY2tvZmYgKi8KIAkJc2NwLT5uc3Bfcnh0c2hpZnQgPSAwOwpAQCAtODA3LDIxICs4MDYsNyBAQAogCQkJCWdvdG8gZnJlZV9vdXQ7CiAJCX0KIAotCQliaF9sb2NrX3NvY2soc2spOwotCQlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKLQkJaWYgKGRlY25ldF9kZWJ1Z19sZXZlbCAmIDgpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTlNQOiAweCUwMnggMHglMDJ4IDB4JTA0eCAweCUwNHggJWRcbiIsCi0JCQkJKGludCljYi0+cnRfZmxhZ3MsIChpbnQpY2ItPm5zcF9mbGFncywgCi0JCQkJKGludCljYi0+c3JjX3BvcnQsIChpbnQpY2ItPmRzdF9wb3J0LCAKLQkJCQkhIXNvY2tfb3duZWRfYnlfdXNlcihzaykpOwotCQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpCi0JCQlyZXQgPSBkbl9uc3BfYmFja2xvZ19yY3Yoc2ssIHNrYik7Ci0JCWVsc2UKLQkJCXNrX2FkZF9iYWNrbG9nKHNrLCBza2IpOwotCQliaF91bmxvY2tfc29jayhzayk7Ci0JCXNvY2tfcHV0KHNrKTsKLQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gc2tfcmVjZWl2ZV9za2Ioc2ssIHNrYik7CiAJfQogCiAJcmV0dXJuIGRuX25zcF9ub19zb2NrZXQoc2tiLCByZWFzb24pOwpkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggMzRmZGFjNS4uYzc5Mjk5NCAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KQEAgLTQ1LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgZWNvbmV0X29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGVjb25ldF9vcHM7CiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgZWNvbmV0X3NrbGlzdDsKIHN0YXRpYyBERUZJTkVfUldMT0NLKGVjb25ldF9sb2NrKTsKIApAQCAtNTYsNyArNTcsNyBAQAogI2RlZmluZSBFQ19QT1JUX0lQCTB4ZDIKIAogI2lmZGVmIENPTkZJR19FQ09ORVRfQVVOVURQCi1zdGF0aWMgc3BpbmxvY2tfdCBhdW5fcXVldWVfbG9jazsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXVuX3F1ZXVlX2xvY2spOwogc3RhdGljIHN0cnVjdCBzb2NrZXQgKnVkcHNvY2s7CiAjZGVmaW5lIEFVTl9QT1JUCTB4ODAwMAogCkBAIC02ODYsNyArNjg3LDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gZGV2X2lvY3RsKGNtZCwgYXJncCk7CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAkvKk5PVFJFQUNIRUQqLwogCXJldHVybiAwOwpAQCAtNjk4LDcgKzY5OSw3IEBACiAJLm93bmVyCT0JVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoZWNvbmV0X29wcykgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoZWNvbmV0X29wcykgPSB7CiAJLmZhbWlseSA9CVBGX0VDT05FVCwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CWVjb25ldF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggMDNlZmFhYy4uNGNjNmY0MSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC00MTAsOSArNDEwLDggQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSB8fAotCSAgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMikpID8gaWVlZS0+aG9zdF9tY19kZWNyeXB0IDoKLQkgICAgaWVlZS0+aG9zdF9kZWNyeXB0KSB7CisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpCisJICAgID8gaWVlZS0+aG9zdF9tY19kZWNyeXB0IDogaWVlZS0+aG9zdF9kZWNyeXB0KSB7CiAJCWludCBpZHggPSAwOwogCQlpZiAoc2tiLT5sZW4gPj0gaGRybGVuICsgMykKIAkJCWlkeCA9IHNrYi0+ZGF0YVtoZHJsZW4gKyAzXSA+PiA2OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggZTU1MTM2YS4uMDExY2NhNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC00NTYsNiArNDU2LDE0IEBACiAJaW5jcmVhc2UgcHJvdmlkZXMgVENQIGZyaWVuZGxpbmVzcy4KIAlTZWUgaHR0cDovL3d3dy5jc2MubmNzdS5lZHUvZmFjdWx0eS9yaGVlL2V4cG9ydC9iaXRjcC8KIAorY29uZmlnIFRDUF9DT05HX0NVQklDCisJdHJpc3RhdGUgIkNVQklDIFRDUCIKKwlkZWZhdWx0IG0KKwktLS1oZWxwLS0tCisJVGhpcyBpcyB2ZXJzaW9uIDIuMCBvZiBCSUMtVENQIHdoaWNoIHVzZXMgYSBjdWJpYyBncm93dGggZnVuY3Rpb24KKwlhbW9uZyBvdGhlciB0ZWNobmlxdWVzLgorCVNlZSBodHRwOi8vd3d3LmNzYy5uY3N1LmVkdS9mYWN1bHR5L3JoZWUvZXhwb3J0L2JpdGNwL2N1YmljLXBhcGVyLnBkZgorCiBjb25maWcgVENQX0NPTkdfV0VTVFdPT0QKIAl0cmlzdGF0ZSAiVENQIFdlc3R3b29kKyIKIAlkZWZhdWx0IG0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L01ha2VmaWxlIGIvbmV0L2lwdjQvTWFrZWZpbGUKaW5kZXggZjA0MzVkMC4uYzU0ZWRkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvTWFrZWZpbGUKQEAgLTM0LDYgKzM0LDcgQEAKIG9iai0kKENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEKSArPSBtdWx0aXBhdGgubwogb2JqLSQoQ09ORklHX0lORVRfVENQX0RJQUcpICs9IHRjcF9kaWFnLm8KIG9iai0kKENPTkZJR19UQ1BfQ09OR19CSUMpICs9IHRjcF9iaWMubworb2JqLSQoQ09ORklHX1RDUF9DT05HX0NVQklDKSArPSB0Y3BfY3ViaWMubwogb2JqLSQoQ09ORklHX1RDUF9DT05HX1dFU1RXT09EKSArPSB0Y3Bfd2VzdHdvb2Qubwogb2JqLSQoQ09ORklHX1RDUF9DT05HX0hTVENQKSArPSB0Y3BfaGlnaHNwZWVkLm8KIG9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgKz0gdGNwX2h5YmxhLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCBkMzY4Y2YyLi45NjZhMDcxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC05Myw2ICs5Myw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KQEAgLTMwMiw2ICszMDMsNyBAQAogCQlzay0+c2tfcmV1c2UgPSAxOwogCiAJaW5ldCA9IGluZXRfc2soc2spOworCWluZXQtPmlzX2ljc2sgPSBJTkVUX1BST1RPU1dfSUNTSyAmIGFuc3dlcl9mbGFnczsKIAogCWlmIChTT0NLX1JBVyA9PSBzb2NrLT50eXBlKSB7CiAJCWluZXQtPm51bSA9IHByb3RvY29sOwpAQCAtNzc1LDE2ICs3NzcsMTYgQEAKIAkJCWVyciA9IGRldmluZXRfaW9jdGwoY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAoIXNrLT5za19wcm90LT5pb2N0bCB8fAotCQkJICAgIChlcnIgPSBzay0+c2tfcHJvdC0+aW9jdGwoc2ssIGNtZCwgYXJnKSkgPT0KLQkJCSAgICAJCQkJCS1FTk9JT0NUTENNRCkKLQkJCQllcnIgPSBkZXZfaW9jdGwoY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQkJaWYgKHNrLT5za19wcm90LT5pb2N0bCkKKwkJCQllcnIgPSBzay0+c2tfcHJvdC0+aW9jdGwoc2ssIGNtZCwgYXJnKTsKKwkJCWVsc2UKKwkJCQllcnIgPSAtRU5PSU9DVExDTUQ7CiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIGVycjsKIH0KIAotc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHsKIAkuZmFtaWx5ID0JUEZfSU5FVCwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CWluZXRfcmVsZWFzZSwKQEAgLTgwNSw3ICs4MDcsNyBAQAogCS5zZW5kcGFnZSA9CXRjcF9zZW5kcGFnZQogfTsKIAotc3RydWN0IHByb3RvX29wcyBpbmV0X2RncmFtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9kZ3JhbV9vcHMgPSB7CiAJLmZhbWlseSA9CVBGX0lORVQsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPQlpbmV0X3JlbGVhc2UsCkBAIC04MzAsNyArODMyLDcgQEAKICAqIEZvciBTT0NLX1JBVyBzb2NrZXRzOyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgaW5ldF9kZ3JhbV9vcHMgYnV0IHdpdGhvdXQKICAqIHVkcF9wb2xsCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc29ja3Jhd19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3NvY2tyYXdfb3BzID0gewogCS5mYW1pbHkgPQlQRl9JTkVULAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWxlYXNlID0JaW5ldF9yZWxlYXNlLApAQCAtODY5LDcgKzg3MSw4IEBACiAgICAgICAgICAgICAgICAgLm9wcyA9ICAgICAgICAmaW5ldF9zdHJlYW1fb3BzLAogICAgICAgICAgICAgICAgIC5jYXBhYmlsaXR5ID0gLTEsCiAgICAgICAgICAgICAgICAgLm5vX2NoZWNrID0gICAwLAotICAgICAgICAgICAgICAgIC5mbGFncyA9ICAgICAgSU5FVF9QUk9UT1NXX1BFUk1BTkVOVCwKKyAgICAgICAgICAgICAgICAuZmxhZ3MgPSAgICAgIElORVRfUFJPVE9TV19QRVJNQU5FTlQgfAorCQkJICAgICAgSU5FVF9QUk9UT1NXX0lDU0ssCiAgICAgICAgIH0sCiAKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWg0LmMgYi9uZXQvaXB2NC9haDQuYwppbmRleCAwMzVhZDJjLi5hZWQ1MzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9haDQuYworKysgYi9uZXQvaXB2NC9haDQuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9wZmtleXYyLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KKyNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KIAogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IGI0MjU3NDguLjM3NDMyMDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC04Niw2ICs4Niw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mZGRpZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMDRhNmZlMy4uN2I5YmIyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtNTgsNiArNTgsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogCisjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgogI2luY2x1ZGUgPG5ldC9pcF9maWIuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCAxYjE4Y2U2Li43M2JmY2FlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9lc3A0LmMKKysrIGIvbmV0L2lwdjQvZXNwNC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Bma2V5djIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgorI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KIAogLyogZGVjYXBzdWxhdGlvbiBkYXRhIGZvciB1c2Ugd2hlbiBwb3N0LXByb2Nlc3NpbmcgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggMTliMWI5OC4uMThmNWU1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9oYXNoLmMgYi9uZXQvaXB2NC9maWJfaGFzaC5jCmluZGV4IDdlYTAyMDkuLmUyODkwZWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9oYXNoLmMKKysrIGIvbmV0L2lwdjQvZmliX2hhc2guYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9ydWxlcy5jIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKaW5kZXggMGIyOThiYi4uMGRkNGQwNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3J1bGVzLmMKKysrIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggNmQyYTZhYy4uZWY0NzI0ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCisjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3RyaWUuYyBiL25ldC9pcHY0L2ZpYl90cmllLmMKaW5kZXggNzA1ZTNjZS4uZTMyMGIzMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3RyaWUuYworKysgYi9uZXQvaXB2NC9maWJfdHJpZS5jCkBAIC00MSw2ICs0MSwxMyBAQAogICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTdWJzdGFudGlhbCBjb250cmlidXRpb25zIHRvIHRoaXMgd29yayBjb21lcyBmcm9tOgorICoKKyAqCQlEYXZpZCBTLiBNaWxsZXIsIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorICoJCVN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPgorICoJCVBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4KKyAqCQlQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KICAqLwogCiAjZGVmaW5lIFZFUlNJT04gIjAuNDA0IgpAQCAtNTksNiArNjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCA5MmUyM2IyLi5iZTVhNTE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggNGExOTVjNy4uMzQ3NTgxMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtOTEsNiArOTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+CisKKyNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCAzZmUwMjFmLi5hZTIwMjgxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTM3LDcgKzM3LDggQEAKICAqLwogaW50IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzJdID0geyAxMDI0LCA0OTk5IH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGluZXRfY3NrX2JpbmRfY29uZmxpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGIpCitpbnQgaW5ldF9jc2tfYmluZF9jb25mbGljdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICBjb25zdCBzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGIpCiB7CiAJY29uc3QgdTMyIHNrX3Jjdl9zYWRkciA9IGluZXRfcmN2X3NhZGRyKHNrKTsKIAlzdHJ1Y3Qgc29jayAqc2syOwpAQCAtNjIsMTEgKzYzLDE1IEBACiAJcmV0dXJuIG5vZGUgIT0gTlVMTDsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfYmluZF9jb25mbGljdCk7CisKIC8qIE9idGFpbiBhIHJlZmVyZW5jZSB0byBhIGxvY2FsIHBvcnQgZm9yIHRoZSBnaXZlbiBzb2NrLAogICogaWYgc251bSBpcyB6ZXJvIGl0IG1lYW5zIHNlbGVjdCBhbnkgYXZhaWxhYmxlIGxvY2FsIHBvcnQuCiAgKi8KIGludCBpbmV0X2Nza19nZXRfcG9ydChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCSAgICAgIHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSkKKwkJICAgICAgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAorCQkgICAgICBpbnQgKCpiaW5kX2NvbmZsaWN0KShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YikpCiB7CiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpoZWFkOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwpAQCAtMTI1LDcgKzEzMCw3IEBACiAJCQlnb3RvIHN1Y2Nlc3M7CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSAxOwotCQkJaWYgKGluZXRfY3NrX2JpbmRfY29uZmxpY3Qoc2ssIHRiKSkKKwkJCWlmIChiaW5kX2NvbmZsaWN0KHNrLCB0YikpCiAJCQkJZ290byBmYWlsX3VubG9jazsKIAkJfQogCX0KQEAgLTM4MCw3ICszODUsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfc2VhcmNoX3JlcSk7CiAKIHZvaWQgaW5ldF9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkJICAgY29uc3QgdW5zaWduZWQgdGltZW91dCkKKwkJCQkgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBsaXN0ZW5fc29jayAqbG9wdCA9IGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLmxpc3Rlbl9vcHQ7CkBAIC02MzEsMyArNjM2LDE1IEBACiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX2xpc3Rlbl9zdG9wKTsKKwordm9pZCBpbmV0X2Nza19hZGRyMnNvY2thZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKKwljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisKKwlzaW4tPnNpbl9mYW1pbHkJCT0gQUZfSU5FVDsKKwlzaW4tPnNpbl9hZGRyLnNfYWRkcgk9IGluZXQtPmRhZGRyOworCXNpbi0+c2luX3BvcnQJCT0gaW5ldC0+ZHBvcnQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX2FkZHIyc29ja2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCAzOTA2MWVkLi5jNDk5MDgxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYworKysgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtMTEyLDEyICsxMTIsMTIgQEAKIAkJci0+aWRpYWdfaW5vZGUgPSAwOwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKIAkJaWYgKHItPmlkaWFnX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJY29uc3Qgc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayAqdGNwNnR3ID0gdGNwNl90d3NrKHNrKTsKKwkJCWNvbnN0IHN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPSBpbmV0Nl90d3NrKHNrKTsKIAogCQkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXItPmlkLmlkaWFnX3NyYywKLQkJCQkgICAgICAgJnRjcDZ0dy0+dHdfdjZfcmN2X3NhZGRyKTsKKwkJCQkgICAgICAgJnR3Ni0+dHdfdjZfcmN2X3NhZGRyKTsKIAkJCWlwdjZfYWRkcl9jb3B5KChzdHJ1Y3QgaW42X2FkZHIgKilyLT5pZC5pZGlhZ19kc3QsCi0JCQkJICAgICAgICZ0Y3A2dHctPnR3X3Y2X2RhZGRyKTsKKwkJCQkgICAgICAgJnR3Ni0+dHdfdjZfZGFkZHIpOwogCQl9CiAjZW5kaWYKIAkJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwpAQCAtNDg5LDkgKzQ4OSw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQogCWlmIChyLT5pZGlhZ19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKIAkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXItPmlkLmlkaWFnX3NyYywKLQkJCSAgICAgICAmdGNwNl9yc2socmVxKS0+bG9jX2FkZHIpOworCQkJICAgICAgICZpbmV0Nl9yc2socmVxKS0+bG9jX2FkZHIpOwogCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopci0+aWQuaWRpYWdfZHN0LAotCQkJICAgICAgICZ0Y3A2X3JzayhyZXEpLT5ybXRfYWRkcik7CisJCQkgICAgICAgJmluZXQ2X3JzayhyZXEpLT5ybXRfYWRkcik7CiAJfQogI2VuZGlmCiAJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwpAQCAtNTUzLDEzICs1NTMsMTMgQEAKIAkJCQllbnRyeS5zYWRkciA9CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQogCQkJCQkoZW50cnkuZmFtaWx5ID09IEFGX0lORVQ2KSA/Ci0JCQkJCXRjcDZfcnNrKHJlcSktPmxvY19hZGRyLnM2X2FkZHIzMiA6CisJCQkJCWluZXQ2X3JzayhyZXEpLT5sb2NfYWRkci5zNl9hZGRyMzIgOgogI2VuZGlmCiAJCQkJCSZpcmVxLT5sb2NfYWRkcjsKIAkJCQllbnRyeS5kYWRkciA9IAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKIAkJCQkJKGVudHJ5LmZhbWlseSA9PSBBRl9JTkVUNikgPwotCQkJCQl0Y3A2X3JzayhyZXEpLT5ybXRfYWRkci5zNl9hZGRyMzIgOgorCQkJCQlpbmV0Nl9yc2socmVxKS0+cm10X2FkZHIuczZfYWRkcjMyIDoKICNlbmRpZgogCQkJCQkmaXJlcS0+cm10X2FkZHI7CiAJCQkJZW50cnkuZHBvcnQgPSBudG9ocyhpcmVxLT5ybXRfcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IGU4ZDI5ZmUuLjMzMjI4MTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC0xNSwxMiArMTUsMTQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2hhc2h0YWJsZXMuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KIAogLyoKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IGxvY2FsIHBvcnQgYmluZCBidWNrZXQuCkBAIC0xNjMsMyArMTY1LDE3OSBAQAogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChfX2luZXRfbG9va3VwX2xpc3RlbmVyKTsKKworLyogY2FsbGVkIHdpdGggbG9jYWwgYmggZGlzYWJsZWQgKi8KK3N0YXRpYyBpbnQgX19pbmV0X2NoZWNrX2VzdGFibGlzaGVkKHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyAqZGVhdGhfcm93LAorCQkJCSAgICBzdHJ1Y3Qgc29jayAqc2ssIF9fdTE2IGxwb3J0LAorCQkJCSAgICBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICoqdHdwKQoreworCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbyA9IGRlYXRoX3Jvdy0+aGFzaGluZm87CisJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCXUzMiBkYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKKwl1MzIgc2FkZHIgPSBpbmV0LT5kYWRkcjsKKwlpbnQgZGlmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKKwlJTkVUX0FERFJfQ09PS0lFKGFjb29raWUsIHNhZGRyLCBkYWRkcikKKwljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoaW5ldC0+ZHBvcnQsIGxwb3J0KTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGluZXRfZWhhc2hmbihkYWRkciwgbHBvcnQsIHNhZGRyLCBpbmV0LT5kcG9ydCk7CisJc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICpoZWFkID0gaW5ldF9laGFzaF9idWNrZXQoaGluZm8sIGhhc2gpOworCXN0cnVjdCBzb2NrICpzazI7CisJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7CisKKwlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CisJd3JpdGVfbG9jaygmaGVhZC0+bG9jayk7CisKKwkvKiBDaGVjayBUSU1FLVdBSVQgc29ja2V0cyBmaXJzdC4gKi8KKwlza19mb3JfZWFjaChzazIsIG5vZGUsICYoaGVhZCArIGhpbmZvLT5laGFzaF9zaXplKS0+Y2hhaW4pIHsKKwkJdHcgPSBpbmV0X3R3c2soc2syKTsKKworCQlpZiAoSU5FVF9UV19NQVRDSChzazIsIGhhc2gsIGFjb29raWUsIHNhZGRyLCBkYWRkciwgcG9ydHMsIGRpZikpIHsKKwkJCWlmICh0d3NrX3VuaXF1ZShzaywgc2syLCB0d3ApKQorCQkJCWdvdG8gdW5pcXVlOworCQkJZWxzZQorCQkJCWdvdG8gbm90X3VuaXF1ZTsKKwkJfQorCX0KKwl0dyA9IE5VTEw7CisKKwkvKiBBbmQgZXN0YWJsaXNoZWQgcGFydC4uLiAqLworCXNrX2Zvcl9lYWNoKHNrMiwgbm9kZSwgJmhlYWQtPmNoYWluKSB7CisJCWlmIChJTkVUX01BVENIKHNrMiwgaGFzaCwgYWNvb2tpZSwgc2FkZHIsIGRhZGRyLCBwb3J0cywgZGlmKSkKKwkJCWdvdG8gbm90X3VuaXF1ZTsKKwl9CisKK3VuaXF1ZToKKwkvKiBNdXN0IHJlY29yZCBudW0gYW5kIHNwb3J0IG5vdy4gT3RoZXJ3aXNlIHdlIHdpbGwgc2VlCisJICogaW4gaGFzaCB0YWJsZSBzb2NrZXQgd2l0aCBhIGZ1bm55IGlkZW50aXR5LiAqLworCWluZXQtPm51bSA9IGxwb3J0OworCWluZXQtPnNwb3J0ID0gaHRvbnMobHBvcnQpOworCXNrLT5za19oYXNoID0gaGFzaDsKKwlCVUdfVFJBUChza191bmhhc2hlZChzaykpOworCV9fc2tfYWRkX25vZGUoc2ssICZoZWFkLT5jaGFpbik7CisJc29ja19wcm90X2luY191c2Uoc2stPnNrX3Byb3QpOworCXdyaXRlX3VubG9jaygmaGVhZC0+bG9jayk7CisKKwlpZiAodHdwKSB7CisJCSp0d3AgPSB0dzsKKwkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CisJfSBlbHNlIGlmICh0dykgeworCQkvKiBTaWxseS4gU2hvdWxkIGhhc2gtZGFuY2UgaW5zdGVhZC4uLiAqLworCQlpbmV0X3R3c2tfZGVzY2hlZHVsZSh0dywgZGVhdGhfcm93KTsKKwkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CisKKwkJaW5ldF90d3NrX3B1dCh0dyk7CisJfQorCisJcmV0dXJuIDA7CisKK25vdF91bmlxdWU6CisJd3JpdGVfdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGluZXRfc2tfcG9ydF9vZmZzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlyZXR1cm4gc2VjdXJlX2lwdjRfcG9ydF9lcGhlbWVyYWwoaW5ldC0+cmN2X3NhZGRyLCBpbmV0LT5kYWRkciwgCisJCQkJCSAgaW5ldC0+ZHBvcnQpOworfQorCisvKgorICogQmluZCBhIHBvcnQgZm9yIGEgY29ubmVjdCBvcGVyYXRpb24gYW5kIGhhc2ggaXQuCisgKi8KK2ludCBpbmV0X2hhc2hfY29ubmVjdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9kZWF0aF9yb3cgKmRlYXRoX3JvdywKKwkJICAgICAgc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbyA9IGRlYXRoX3Jvdy0+aGFzaGluZm87CisJY29uc3QgdW5zaWduZWQgc2hvcnQgc251bSA9IGluZXRfc2soc2spLT5udW07CisgCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZDsKKyAJc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiOworCWludCByZXQ7CisKKyAJaWYgKCFzbnVtKSB7CisgCQlpbnQgbG93ID0gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMF07CisgCQlpbnQgaGlnaCA9IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzFdOworCQlpbnQgcmFuZ2UgPSBoaWdoIC0gbG93OworIAkJaW50IGk7CisJCWludCBwb3J0OworCQlzdGF0aWMgdTMyIGhpbnQ7CisJCXUzMiBvZmZzZXQgPSBoaW50ICsgaW5ldF9za19wb3J0X29mZnNldChzayk7CisJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworIAkJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBOVUxMOworCisgCQlsb2NhbF9iaF9kaXNhYmxlKCk7CisJCWZvciAoaSA9IDE7IGkgPD0gcmFuZ2U7IGkrKykgeworCQkJcG9ydCA9IGxvdyArIChpICsgb2Zmc2V0KSAlIHJhbmdlOworIAkJCWhlYWQgPSAmaGluZm8tPmJoYXNoW2luZXRfYmhhc2hmbihwb3J0LCBoaW5mby0+Ymhhc2hfc2l6ZSldOworIAkJCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CisKKyAJCQkvKiBEb2VzIG5vdCBib3RoZXIgd2l0aCByY3Zfc2FkZHIgY2hlY2tzLAorIAkJCSAqIGJlY2F1c2UgdGhlIGVzdGFibGlzaGVkIGNoZWNrIGlzIGFscmVhZHkKKyAJCQkgKiB1bmlxdWUgZW5vdWdoLgorIAkJCSAqLworCQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0Yiwgbm9kZSwgJmhlYWQtPmNoYWluKSB7CisgCQkJCWlmICh0Yi0+cG9ydCA9PSBwb3J0KSB7CisgCQkJCQlCVUdfVFJBUCghaGxpc3RfZW1wdHkoJnRiLT5vd25lcnMpKTsKKyAJCQkJCWlmICh0Yi0+ZmFzdHJldXNlID49IDApCisgCQkJCQkJZ290byBuZXh0X3BvcnQ7CisgCQkJCQlpZiAoIV9faW5ldF9jaGVja19lc3RhYmxpc2hlZChkZWF0aF9yb3csCisJCQkJCQkJCSAgICAgIHNrLCBwb3J0LAorCQkJCQkJCQkgICAgICAmdHcpKQorIAkJCQkJCWdvdG8gb2s7CisgCQkJCQlnb3RvIG5leHRfcG9ydDsKKyAJCQkJfQorIAkJCX0KKworIAkJCXRiID0gaW5ldF9iaW5kX2J1Y2tldF9jcmVhdGUoaGluZm8tPmJpbmRfYnVja2V0X2NhY2hlcCwgaGVhZCwgcG9ydCk7CisgCQkJaWYgKCF0YikgeworIAkJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CisgCQkJCWJyZWFrOworIAkJCX0KKyAJCQl0Yi0+ZmFzdHJldXNlID0gLTE7CisgCQkJZ290byBvazsKKworIAkJbmV4dF9wb3J0OgorIAkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKyAJCX0KKyAJCWxvY2FsX2JoX2VuYWJsZSgpOworCisgCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKK29rOgorCQloaW50ICs9IGk7CisKKyAJCS8qIEhlYWQgbG9jayBzdGlsbCBoZWxkIGFuZCBiaCdzIGRpc2FibGVkICovCisgCQlpbmV0X2JpbmRfaGFzaChzaywgdGIsIHBvcnQpOworCQlpZiAoc2tfdW5oYXNoZWQoc2spKSB7CisgCQkJaW5ldF9zayhzayktPnNwb3J0ID0gaHRvbnMocG9ydCk7CisgCQkJX19pbmV0X2hhc2goaGluZm8sIHNrLCAwKTsKKyAJCX0KKyAJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKworIAkJaWYgKHR3KSB7CisgCQkJaW5ldF90d3NrX2Rlc2NoZWR1bGUodHcsIGRlYXRoX3Jvdyk7OworIAkJCWluZXRfdHdza19wdXQodHcpOworIAkJfQorCisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworIAl9CisKKyAJaGVhZCA9ICZoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKHNudW0sIGhpbmZvLT5iaGFzaF9zaXplKV07CisgCXRiICA9IGluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2g7CisJc3Bpbl9sb2NrX2JoKCZoZWFkLT5sb2NrKTsKKwlpZiAoc2tfaGVhZCgmdGItPm93bmVycykgPT0gc2sgJiYgIXNrLT5za19iaW5kX25vZGUubmV4dCkgeworCQlfX2luZXRfaGFzaChoaW5mbywgc2ssIDApOworCQlzcGluX3VubG9ja19iaCgmaGVhZC0+bG9jayk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwkJLyogTm8gZGVmaW5pdGUgYW5zd2VyLi4uIFdhbGsgdG8gZXN0YWJsaXNoZWQgaGFzaCB0YWJsZSAqLworCQlyZXQgPSBfX2luZXRfY2hlY2tfZXN0YWJsaXNoZWQoZGVhdGhfcm93LCBzaywgc251bSwgTlVMTCk7CitvdXQ6CisJCWxvY2FsX2JoX2VuYWJsZSgpOworCQlyZXR1cm4gcmV0OworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9oYXNoX2Nvbm5lY3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwppbmRleCBhMDEwZTlhLi40MTdmMTI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwpAQCAtOTAsOCArOTAsOSBAQAogCiBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICppbmV0X3R3c2tfYWxsb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgc3RhdGUpCiB7Ci0Jc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBrbWVtX2NhY2hlX2FsbG9jKHNrLT5za19wcm90X2NyZWF0b3ItPnR3c2tfc2xhYiwKLQkJCQkJCQkgU0xBQl9BVE9NSUMpOworCXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0KKwkJa21lbV9jYWNoZV9hbGxvYyhzay0+c2tfcHJvdF9jcmVhdG9yLT50d3NrX3Byb3QtPnR3c2tfc2xhYiwKKwkJCQkgU0xBQl9BVE9NSUMpOwogCWlmICh0dyAhPSBOVUxMKSB7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggMmZjM2ZkMy4uY2U1ZmUzZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYworKysgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC00MDEsNiArNDAxLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJbi0+djRkYWRkciA9IGRhZGRyOwogCWF0b21pY19zZXQoJm4tPnJlZmNudCwgMSk7CisJYXRvbWljX3NldCgmbi0+cmlkLCAwKTsKIAluLT5pcF9pZF9jb3VudCA9IHNlY3VyZV9pcF9pZChkYWRkcik7CiAJbi0+dGNwX3RzX3N0YW1wID0gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKaW5kZXggOGNlMGNlMi4uY2UyYjcwYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKgkJUGF0cmljayBNY0hhcmR5IDoJTFJVIHF1ZXVlIG9mIGZyYWcgaGVhZHMgZm9yIGV2aWN0b3IuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9pbmV0cGVlci5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KQEAgLTU2LDYgKzU4LDggQEAKIGludCBzeXNjdGxfaXBmcmFnX2hpZ2hfdGhyZXNoID0gMjU2KjEwMjQ7CiBpbnQgc3lzY3RsX2lwZnJhZ19sb3dfdGhyZXNoID0gMTkyKjEwMjQ7CiAKK2ludCBzeXNjdGxfaXBmcmFnX21heF9kaXN0ID0gNjQ7CisKIC8qIEltcG9ydGFudCBOT1RFISBGcmFnbWVudCBxdWV1ZSBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgTVNMIGV4cGlyZXMuCiAgKiBSRkM3OTEgaXMgd3JvbmcgcHJvcG9zaW5nIHRvIHByb2xvbmdhdGUgdGltZXIgZWFjaCBmcmFnbWVudCBhcnJpdmFsIGJ5IFRUTC4KICAqLwpAQCAtODksOCArOTMsMTAgQEAKIAlzcGlubG9ja190CWxvY2s7CiAJYXRvbWljX3QJcmVmY250OwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiB3aGVuIHdpbGwgdGhpcyBxdWV1ZSBleHBpcmU/CQkqLwotCWludAkJaWlmOwogCXN0cnVjdCB0aW1ldmFsCXN0YW1wOworCWludCAgICAgICAgICAgICBpaWY7CisJdW5zaWduZWQgaW50ICAgIHJpZDsKKwlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyOwogfTsKIAogLyogSGFzaCB0YWJsZS4gKi8KQEAgLTE5NSw2ICsyMDEsOSBAQAogCUJVR19UUkFQKHFwLT5sYXN0X2luJkNPTVBMRVRFKTsKIAlCVUdfVFJBUChkZWxfdGltZXIoJnFwLT50aW1lcikgPT0gMCk7CiAKKwlpZiAocXAtPnBlZXIpCisJCWluZXRfcHV0cGVlcihxcC0+cGVlcik7CisKIAkvKiBSZWxlYXNlIGFsbCBmcmFnbWVudCBkYXRhLiAqLwogCWZwID0gcXAtPmZyYWdtZW50czsKIAl3aGlsZSAoZnApIHsKQEAgLTM1Myw2ICszNjIsNyBAQAogCXFwLT5tZWF0ID0gMDsKIAlxcC0+ZnJhZ21lbnRzID0gTlVMTDsKIAlxcC0+aWlmID0gMDsKKwlxcC0+cGVlciA9IHN5c2N0bF9pcGZyYWdfbWF4X2Rpc3QgPyBpbmV0X2dldHBlZXIoaXBoLT5zYWRkciwgMSkgOiBOVUxMOwogCiAJLyogSW5pdGlhbGl6ZSBhIHRpbWVyIGZvciB0aGlzIGVudHJ5LiAqLwogCWluaXRfdGltZXIoJnFwLT50aW1lcik7CkBAIC0zOTgsNiArNDA4LDU2IEBACiAJcmV0dXJuIGlwX2ZyYWdfY3JlYXRlKGhhc2gsIGlwaCwgdXNlcik7CiB9CiAKKy8qIElzIHRoZSBmcmFnbWVudCB0b28gZmFyIGFoZWFkIHRvIGJlIHBhcnQgb2YgaXBxPyAqLworc3RhdGljIGlubGluZSBpbnQgaXBfZnJhZ190b29fZmFyKHN0cnVjdCBpcHEgKnFwKQoreworCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXIgPSBxcC0+cGVlcjsKKwl1bnNpZ25lZCBpbnQgbWF4ID0gc3lzY3RsX2lwZnJhZ19tYXhfZGlzdDsKKwl1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDsKKworCWludCByYzsKKworCWlmICghcGVlciB8fCAhbWF4KQorCQlyZXR1cm4gMDsKKworCXN0YXJ0ID0gcXAtPnJpZDsKKwllbmQgPSBhdG9taWNfaW5jX3JldHVybigmcGVlci0+cmlkKTsKKwlxcC0+cmlkID0gZW5kOworCisJcmMgPSBxcC0+ZnJhZ21lbnRzICYmIChlbmQgLSBzdGFydCkgPiBtYXg7CisKKwlpZiAocmMpIHsKKwkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBpcF9mcmFnX3JlaW5pdChzdHJ1Y3QgaXBxICpxcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqZnA7CisKKwlpZiAoIW1vZF90aW1lcigmcXAtPnRpbWVyLCBqaWZmaWVzICsgc3lzY3RsX2lwZnJhZ190aW1lKSkgeworCQlhdG9taWNfaW5jKCZxcC0+cmVmY250KTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJZnAgPSBxcC0+ZnJhZ21lbnRzOworCWRvIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnhwID0gZnAtPm5leHQ7CisJCWZyYWdfa2ZyZWVfc2tiKGZwLCBOVUxMKTsKKwkJZnAgPSB4cDsKKwl9IHdoaWxlIChmcCk7CisKKwlxcC0+bGFzdF9pbiA9IDA7CisJcXAtPmxlbiA9IDA7CisJcXAtPm1lYXQgPSAwOworCXFwLT5mcmFnbWVudHMgPSBOVUxMOworCXFwLT5paWYgPSAwOworCisJcmV0dXJuIDA7Cit9CisKIC8qIEFkZCBuZXcgc2VnbWVudCB0byBleGlzdGluZyBxdWV1ZS4gKi8KIHN0YXRpYyB2b2lkIGlwX2ZyYWdfcXVldWUoc3RydWN0IGlwcSAqcXAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC00MDgsNiArNDY4LDEyIEBACiAJaWYgKHFwLT5sYXN0X2luICYgQ09NUExFVEUpCiAJCWdvdG8gZXJyOwogCisJaWYgKCEoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0ZSQUdfQ09NUExFVEUpICYmCisJICAgIHVubGlrZWx5KGlwX2ZyYWdfdG9vX2ZhcihxcCkpICYmIHVubGlrZWx5KGlwX2ZyYWdfcmVpbml0KHFwKSkpIHsKKwkJaXBxX2tpbGwocXApOworCQlnb3RvIGVycjsKKwl9CisKICAJb2Zmc2V0ID0gbnRvaHMoc2tiLT5uaC5pcGgtPmZyYWdfb2ZmKTsKIAlmbGFncyA9IG9mZnNldCAmIH5JUF9PRkZTRVQ7CiAJb2Zmc2V0ICY9IElQX09GRlNFVDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2lucHV0LmMgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCmluZGV4IDQ3M2QwZjIuLmU0NTg0NmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggZGJlMTJkYS4uZDNmNmM0NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KIAogLyogCiAgKiBXcml0ZSBvcHRpb25zIHRvIElQIGhlYWRlciwgcmVjb3JkIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggZWJhNjRlMi4uMmE4MzBkZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTQ0NSw2ICs0NDUsNyBAQAogCiAJaGxlbiA9IGlwaC0+aWhsICogNDsKIAltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpIC0gaGxlbjsJLyogU2l6ZSBvZiBkYXRhIHNwYWNlICovCisJSVBDQihza2IpLT5mbGFncyB8PSBJUFNLQl9GUkFHX0NPTVBMRVRFOwogCiAJLyogV2hlbiBmcmFnX2xpc3QgaXMgZ2l2ZW4sIHVzZSBpdC4gRmlyc3QsIGNoZWNrIGl0cyB2YWxpZGl0eToKIAkgKiBzb21lIHRyYW5zZm9ybWVycyBjb3VsZCBjcmVhdGUgd3JvbmcgZnJhZ19saXN0IG9yIGJyZWFrIGV4aXN0aW5nCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCA0ZjJkODcyLi42OTg2ZTExIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTI1LDEyICsyNSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+Ci0jaW5jbHVkZSA8bmV0L3RjcC5oPgotI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgpAQCAtNDI3LDggKzQyNyw4IEBACiAJCQllcnIgPSBpcF9vcHRpb25zX2dldF9mcm9tX3VzZXIoJm9wdCwgb3B0dmFsLCBvcHRsZW4pOwogCQkJaWYgKGVycikKIAkJCQlicmVhazsKLQkJCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkgewotCQkJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCQkJaWYgKGluZXQtPmlzX2ljc2spIHsKKwkJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAJCQkJaWYgKHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVCB8fAogCQkJCSAgICAoISgoMSA8PCBzay0+c2tfc3RhdGUpICYKQEAgLTQzNiwxMCArNDM2LDEwIEBACiAJCQkJICAgICBpbmV0LT5kYWRkciAhPSBMT09QQkFDSzRfSVBWNikpIHsKICNlbmRpZgogCQkJCQlpZiAoaW5ldC0+b3B0KQotCQkJCQkJdHAtPmV4dF9oZWFkZXJfbGVuIC09IGluZXQtPm9wdC0+b3B0bGVuOworCQkJCQkJaWNzay0+aWNza19leHRfaGRyX2xlbiAtPSBpbmV0LT5vcHQtPm9wdGxlbjsKIAkJCQkJaWYgKG9wdCkKLQkJCQkJCXRwLT5leHRfaGVhZGVyX2xlbiArPSBvcHQtPm9wdGxlbjsKLQkJCQkJdGNwX3N5bmNfbXNzKHNrLCB0cC0+cG10dV9jb29raWUpOworCQkJCQkJaWNzay0+aWNza19leHRfaGRyX2xlbiArPSBvcHQtPm9wdGxlbjsKKwkJCQkJaWNzay0+aWNza19zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAJCQkJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IGZjNzE4ZGYuLmQ2NGUyZWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC9pcGNvbXAuaD4KKyNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KIAogc3RydWN0IGlwY29tcF90Zm1zIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbmZpZy5jIGIvbmV0L2lwdjQvaXBjb25maWcuYwppbmRleCBlODY3NGJhLi5iYjM2MTNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbmZpZy5jCisrKyBiL25ldC9pcHY0L2lwY29uZmlnLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTU4LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2lwY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDMwMmI3ZWIuLmNhYTNiN2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L3VkcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggZDdlYjY4MC4uOWIxNzZhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jCkBAIC0yMjQsMzQgKzIyNCw2IEBACiB9CiAKIAotI2lmIDAwMDAKLS8qCi0gKglHZXQgcmVmZXJlbmNlIHRvIGFwcCBieSBuYW1lIChjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQpCi0gKi8KLXN0cnVjdCBpcF92c19hcHAgKmlwX3ZzX2FwcF9nZXRfYnlfbmFtZShjaGFyICphcHBuYW1lKQotewotCXN0cnVjdCBpcF92c19hcHAgKmFwcCwgKmEgPSBOVUxMOwotCi0JZG93bigmX19pcF92c19hcHBfbXV0ZXgpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsICZpcF92c19hcHBfbGlzdCwgYV9saXN0KSB7Ci0JCWlmIChzdHJjbXAoYXBwLT5uYW1lLCBhcHBuYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHNvZnRpcnEgbWF5IGNhbGwgaXBfdnNfYXBwX2dldCB0b28sIHNvIHRoZSBjYWxsZXIKLQkJICAgbXVzdCBkaXNhYmxlIHNvZnRpcnEgb24gdGhlIGN1cnJlbnQgQ1BVICovCi0JCWlmIChpcF92c19hcHBfZ2V0KGFwcCkpCi0JCQlhID0gYXBwOwotCQlicmVhazsKLQl9Ci0KLQl1cCgmX19pcF92c19hcHBfbXV0ZXgpOwotCi0JcmV0dXJuIGE7Ci19Ci0jZW5kaWYKLQotCiAvKgogICoJQmluZCBpcF92c19jb25uIHRvIGl0cyBpcF92c19hcHAgKGNhbGxlZCBieSBjcCBjb25zdHJ1Y3RvcikKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCAyYTNhOGM1Li44MWQ5MDM1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtMjQsNyArMjQsMTAgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4JCS8qIGZvciBwcm9jX25ldF8qICovCiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTIxOSw3ICsyMjIsNyBAQAogCWlmICghY3AgJiYgYXRvbWljX3JlYWQoJmlwX3ZzX2Nvbm5fbm9fY3BvcnRfY250KSkKIAkJY3AgPSBfX2lwX3ZzX2Nvbm5faW5fZ2V0KHByb3RvY29sLCBzX2FkZHIsIDAsIGRfYWRkciwgZF9wb3J0KTsKIAotCUlQX1ZTX0RCRyg3LCAibG9va3VwL2luICVzICV1LiV1LiV1LiV1OiVkLT4ldS4ldS4ldS4ldTolZCAlc1xuIiwKKwlJUF9WU19EQkcoOSwgImxvb2t1cC9pbiAlcyAldS4ldS4ldS4ldTolZC0+JXUuJXUuJXUuJXU6JWQgJXNcbiIsCiAJCSAgaXBfdnNfcHJvdG9fbmFtZShwcm90b2NvbCksCiAJCSAgTklQUVVBRChzX2FkZHIpLCBudG9ocyhzX3BvcnQpLAogCQkgIE5JUFFVQUQoZF9hZGRyKSwgbnRvaHMoZF9wb3J0KSwKQEAgLTI1NCw3ICsyNTcsNyBAQAogICBvdXQ6CiAJY3RfcmVhZF91bmxvY2soaGFzaCk7CiAKLQlJUF9WU19EQkcoNywgInRlbXBsYXRlIGxvb2t1cC9pbiAlcyAldS4ldS4ldS4ldTolZC0+JXUuJXUuJXUuJXU6JWQgJXNcbiIsCisJSVBfVlNfREJHKDksICJ0ZW1wbGF0ZSBsb29rdXAvaW4gJXMgJXUuJXUuJXUuJXU6JWQtPiV1LiV1LiV1LiV1OiVkICVzXG4iLAogCQkgIGlwX3ZzX3Byb3RvX25hbWUocHJvdG9jb2wpLAogCQkgIE5JUFFVQUQoc19hZGRyKSwgbnRvaHMoc19wb3J0KSwKIAkJICBOSVBRVUFEKGRfYWRkciksIG50b2hzKGRfcG9ydCksCkBAIC0yOTUsNyArMjk4LDcgQEAKIAogCWN0X3JlYWRfdW5sb2NrKGhhc2gpOwogCi0JSVBfVlNfREJHKDcsICJsb29rdXAvb3V0ICVzICV1LiV1LiV1LiV1OiVkLT4ldS4ldS4ldS4ldTolZCAlc1xuIiwKKwlJUF9WU19EQkcoOSwgImxvb2t1cC9vdXQgJXMgJXUuJXUuJXUuJXU6JWQtPiV1LiV1LiV1LiV1OiVkICVzXG4iLAogCQkgIGlwX3ZzX3Byb3RvX25hbWUocHJvdG9jb2wpLAogCQkgIE5JUFFVQUQoc19hZGRyKSwgbnRvaHMoc19wb3J0KSwKIAkJICBOSVBRVUFEKGRfYWRkciksIG50b2hzKGRfcG9ydCksCkBAIC0zOTEsOCArMzk0LDkgQEAKIAljcC0+ZmxhZ3MgfD0gYXRvbWljX3JlYWQoJmRlc3QtPmNvbm5fZmxhZ3MpOwogCWNwLT5kZXN0ID0gZGVzdDsKIAotCUlQX1ZTX0RCRyg5LCAiQmluZC1kZXN0ICVzIGM6JXUuJXUuJXUuJXU6JWQgdjoldS4ldS4ldS4ldTolZCAiCi0JCSAgImQ6JXUuJXUuJXUuJXU6JWQgZndkOiVjIHM6JXUgZmxnOiVYIGNudDolZCBkZXN0Y250OiVkXG4iLAorCUlQX1ZTX0RCRyg3LCAiQmluZC1kZXN0ICVzIGM6JXUuJXUuJXUuJXU6JWQgdjoldS4ldS4ldS4ldTolZCAiCisJCSAgImQ6JXUuJXUuJXUuJXU6JWQgZndkOiVjIHM6JXUgY29ubi0+ZmxhZ3M6JVggY29ubi0+cmVmY250OiVkICIKKwkJICAiZGVzdC0+cmVmY250OiVkXG4iLAogCQkgIGlwX3ZzX3Byb3RvX25hbWUoY3AtPnByb3RvY29sKSwKIAkJICBOSVBRVUFEKGNwLT5jYWRkciksIG50b2hzKGNwLT5jcG9ydCksCiAJCSAgTklQUVVBRChjcC0+dmFkZHIpLCBudG9ocyhjcC0+dnBvcnQpLApAQCAtNDMwLDggKzQzNCw5IEBACiAJaWYgKCFkZXN0KQogCQlyZXR1cm47CiAKLQlJUF9WU19EQkcoOSwgIlVuYmluZC1kZXN0ICVzIGM6JXUuJXUuJXUuJXU6JWQgdjoldS4ldS4ldS4ldTolZCAiCi0JCSAgImQ6JXUuJXUuJXUuJXU6JWQgZndkOiVjIHM6JXUgZmxnOiVYIGNudDolZCBkZXN0Y250OiVkXG4iLAorCUlQX1ZTX0RCRyg3LCAiVW5iaW5kLWRlc3QgJXMgYzoldS4ldS4ldS4ldTolZCB2OiV1LiV1LiV1LiV1OiVkICIKKwkJICAiZDoldS4ldS4ldS4ldTolZCBmd2Q6JWMgczoldSBjb25uLT5mbGFnczolWCBjb25uLT5yZWZjbnQ6JWQgIgorCQkgICJkZXN0LT5yZWZjbnQ6JWRcbiIsCiAJCSAgaXBfdnNfcHJvdG9fbmFtZShjcC0+cHJvdG9jb2wpLAogCQkgIE5JUFFVQUQoY3AtPmNhZGRyKSwgbnRvaHMoY3AtPmNwb3J0KSwKIAkJICBOSVBRVUFEKGNwLT52YWRkciksIG50b2hzKGNwLT52cG9ydCksCkBAIC01NzEsNyArNTc2LDcgQEAKIAlpcF92c19jb25uX2hhc2goY3ApOwogCiAgIGV4cGlyZV9sYXRlcjoKLQlJUF9WU19EQkcoNywgImRlbGF5ZWQ6IHJlZmNudC0xPSVkIGNvbm4ubl9jb250cm9sPSVkXG4iLAorCUlQX1ZTX0RCRyg3LCAiZGVsYXllZDogY29ubi0+cmVmY250LTE9JWQgY29ubi0+bl9jb250cm9sPSVkXG4iLAogCQkgIGF0b21pY19yZWFkKCZjcC0+cmVmY250KS0xLAogCQkgIGF0b21pY19yZWFkKCZjcC0+bl9jb250cm9sKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggMWEwODQzYy4uMWFjYTk0YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCUlQX1ZTX0RCRyg2LCAiU2NoZWR1bGUgZndkOiVjIGM6JXUuJXUuJXUuJXU6JXUgdjoldS4ldS4ldS4ldToldSAiCi0JCSAgImQ6JXUuJXUuJXUuJXU6JXUgZmxnOiVYIGNudDolZFxuIiwKKwkJICAiZDoldS4ldS4ldS4ldToldSBjb25uLT5mbGFnczolWCBjb25uLT5yZWZjbnQ6JWRcbiIsCiAJCSAgaXBfdnNfZndkX3RhZyhjcCksCiAJCSAgTklQUVVBRChjcC0+Y2FkZHIpLCBudG9ocyhjcC0+Y3BvcnQpLAogCQkgIE5JUFFVQUQoY3AtPnZhZGRyKSwgbnRvaHMoY3AtPnZwb3J0KSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IDliZGNmMzEuLmM5MzVjNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY3RsLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jdGwuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQ0Nyw3ICs0NDgsNyBAQAogICBvdXQ6CiAJcmVhZF91bmxvY2soJl9faXBfdnNfc3ZjX2xvY2spOwogCi0JSVBfVlNfREJHKDYsICJsb29rdXAgc2VydmljZTogZndtICV1ICVzICV1LiV1LiV1LiV1OiV1ICVzXG4iLAorCUlQX1ZTX0RCRyg5LCAibG9va3VwIHNlcnZpY2U6IGZ3bSAldSAlcyAldS4ldS4ldS4ldToldSAlc1xuIiwKIAkJICBmd21hcmssIGlwX3ZzX3Byb3RvX25hbWUocHJvdG9jb2wpLAogCQkgIE5JUFFVQUQodmFkZHIpLCBudG9ocyh2cG9ydCksCiAJCSAgc3ZjPyJoaXQiOiJub3QgaGl0Iik7CkBAIC01OTcsNyArNTk4LDcgQEAKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzdCwgbnh0LCAmaXBfdnNfZGVzdF90cmFzaCwgbl9saXN0KSB7CiAJCUlQX1ZTX0RCRygzLCAiRGVzdGluYXRpb24gJXUvJXUuJXUuJXUuJXU6JXUgc3RpbGwgaW4gdHJhc2gsICIKLQkJCSAgInJlZmNudD0lZFxuIiwKKwkJCSAgImRlc3QtPnJlZmNudD0lZFxuIiwKIAkJCSAgZGVzdC0+dmZ3bWFyaywKIAkJCSAgTklQUVVBRChkZXN0LT5hZGRyKSwgbnRvaHMoZGVzdC0+cG9ydCksCiAJCQkgIGF0b21pY19yZWFkKCZkZXN0LT5yZWZjbnQpKTsKQEAgLTgwNCw3ICs4MDUsNyBAQAogCWRlc3QgPSBpcF92c190cmFzaF9nZXRfZGVzdChzdmMsIGRhZGRyLCBkcG9ydCk7CiAJaWYgKGRlc3QgIT0gTlVMTCkgewogCQlJUF9WU19EQkcoMywgIkdldCBkZXN0aW5hdGlvbiAldS4ldS4ldS4ldToldSBmcm9tIHRyYXNoLCAiCi0JCQkgICJyZWZjbnQ9JWQsIHNlcnZpY2UgJXUvJXUuJXUuJXUuJXU6JXVcbiIsCisJCQkgICJkZXN0LT5yZWZjbnQ9JWQsIHNlcnZpY2UgJXUvJXUuJXUuJXUuJXU6JXVcbiIsCiAJCQkgIE5JUFFVQUQoZGFkZHIpLCBudG9ocyhkcG9ydCksCiAJCQkgIGF0b21pY19yZWFkKCZkZXN0LT5yZWZjbnQpLAogCQkJICBkZXN0LT52ZndtYXJrLApAQCAtOTQ5LDcgKzk1MCw4IEBACiAJCWF0b21pY19kZWMoJmRlc3QtPnN2Yy0+cmVmY250KTsKIAkJa2ZyZWUoZGVzdCk7CiAJfSBlbHNlIHsKLQkJSVBfVlNfREJHKDMsICJNb3ZpbmcgZGVzdCAldS4ldS4ldS4ldToldSBpbnRvIHRyYXNoLCByZWZjbnQ9JWRcbiIsCisJCUlQX1ZTX0RCRygzLCAiTW92aW5nIGRlc3QgJXUuJXUuJXUuJXU6JXUgaW50byB0cmFzaCwgIgorCQkJICAiZGVzdC0+cmVmY250PSVkXG4iLAogCQkJICBOSVBRVUFEKGRlc3QtPmFkZHIpLCBudG9ocyhkZXN0LT5wb3J0KSwKIAkJCSAgYXRvbWljX3JlYWQoJmRlc3QtPnJlZmNudCkpOwogCQlsaXN0X2FkZCgmZGVzdC0+bl9saXN0LCAmaXBfdnNfZGVzdF90cmFzaCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2RoLmMKaW5kZXggZjNiYzMyMC4uOWZlZTE5YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19kaC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfZGguYwpAQCAtMzcsOCArMzcsMTAgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKICNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19lc3QuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfZXN0LmMKaW5kZXggNjdiM2UyZi4uZTcwMDQ3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19lc3QuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2VzdC5jCkBAIC0xMyw3ICsxMywxMCBAQAogICogQ2hhbmdlczoKICAqCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfbGJsYy5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjLmMKaW5kZXggNTYxY2RhMy4uNmU1Y2I5MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjLmMKQEAgLTQxLDggKzQxLDEwIEBACiAgKiBtZSB0byB3cml0ZSB0aGlzIG1vZHVsZS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogLyogZm9yIHN5c2N0bCAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0yMjgsMzMgKzIzMCw2IEBACiB9CiAKIAotI2lmIDAwMDAKLS8qCi0gKglVbmhhc2ggaXBfdnNfbGJsY19lbnRyeSBmcm9tIGlwX3ZzX2xibGNfdGFibGUuCi0gKglyZXR1cm5zIGJvb2wgc3VjY2Vzcy4KLSAqLwotc3RhdGljIGludCBpcF92c19sYmxjX3VuaGFzaChzdHJ1Y3QgaXBfdnNfbGJsY190YWJsZSAqdGJsLAotCQkJICAgICBzdHJ1Y3QgaXBfdnNfbGJsY19lbnRyeSAqZW4pCi17Ci0JaWYgKGxpc3RfZW1wdHkoJmVuLT5saXN0KSkgewotCQlJUF9WU19FUlIoImlwX3ZzX2xibGNfdW5oYXNoKCk6IHJlcXVlc3QgZm9yIG5vdCBoYXNoZWQgZW50cnksICIKLQkJCSAgImNhbGxlZCBmcm9tICVwXG4iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIFJlbW92ZSBpdCBmcm9tIHRoZSB0YWJsZQotCSAqLwotCXdyaXRlX2xvY2soJnRibC0+bG9jayk7Ci0JbGlzdF9kZWwoJmVuLT5saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZW4tPmxpc3QpOwotCXdyaXRlX3VubG9jaygmdGJsLT5sb2NrKTsKLQotCXJldHVybiAxOwotfQotI2VuZGlmCi0KLQogLyoKICAqICBHZXQgaXBfdnNfbGJsY19lbnRyeSBhc3NvY2lhdGVkIHdpdGggc3VwcGxpZWQgcGFyYW1ldGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjci5jCmluZGV4IGNlNDU2ZGIuLjMyYmEzN2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfbGJsY3IuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTM5LDggKzM5LDEwIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAvKiBmb3Igc3lzY3RsICovCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTQxNCwzMyArNDE2LDYgQEAKIH0KIAogCi0jaWYgMDAwMAotLyoKLSAqCVVuaGFzaCBpcF92c19sYmxjcl9lbnRyeSBmcm9tIGlwX3ZzX2xibGNyX3RhYmxlLgotICoJcmV0dXJucyBib29sIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgaXBfdnNfbGJsY3JfdW5oYXNoKHN0cnVjdCBpcF92c19sYmxjcl90YWJsZSAqdGJsLAotCQkJICAgICBzdHJ1Y3QgaXBfdnNfbGJsY3JfZW50cnkgKmVuKQotewotCWlmIChsaXN0X2VtcHR5KCZlbi0+bGlzdCkpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19sYmxjcl91bmhhc2goKTogcmVxdWVzdCBmb3Igbm90IGhhc2hlZCBlbnRyeSwgIgotCQkJICAiY2FsbGVkIGZyb20gJXBcbiIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogUmVtb3ZlIGl0IGZyb20gdGhlIHRhYmxlCi0JICovCi0Jd3JpdGVfbG9jaygmdGJsLT5sb2NrKTsKLQlsaXN0X2RlbCgmZW4tPmxpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZlbi0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrKCZ0YmwtPmxvY2spOwotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQotCiAvKgogICogIEdldCBpcF92c19sYmxjcl9lbnRyeSBhc3NvY2lhdGVkIHdpdGggc3VwcGxpZWQgcGFyYW1ldGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b19haC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b19haC5jCmluZGV4IDQ1M2U5NGEuLjhiMDUwNWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fYWguYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX2FoLmMKQEAgLTEyLDYgKzEyLDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fZXNwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX2VzcC5jCmluZGV4IDQ3OGU1YzcuLmMzNmNjZjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fZXNwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b19lc3AuYwpAQCAtMTIsNiArMTIsOCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKaW5kZXggMGU4NzhmZC4uYmMyOGIxMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCkBAIC0yNzUsMjggKzI3NSw2IEBACiAJW0lQX1ZTX1RDUF9TX0xBU1RdCQk9CTIqSFosCiB9OwogCi0KLSNpZiAwCi0KLS8qIEZJWE1FOiBUaGlzIGlzIGdvaW5nIHRvIGRpZSAqLwotCi1zdGF0aWMgaW50IHRjcF90aW1lb3V0c19kb3NbSVBfVlNfVENQX1NfTEFTVCsxXSA9IHsKLQlbSVBfVlNfVENQX1NfTk9ORV0JCT0JMipIWiwKLQlbSVBfVlNfVENQX1NfRVNUQUJMSVNIRURdCT0JOCo2MCpIWiwKLQlbSVBfVlNfVENQX1NfU1lOX1NFTlRdCQk9CTYwKkhaLAotCVtJUF9WU19UQ1BfU19TWU5fUkVDVl0JCT0JMTAqSFosCi0JW0lQX1ZTX1RDUF9TX0ZJTl9XQUlUXQkJPQk2MCpIWiwKLQlbSVBfVlNfVENQX1NfVElNRV9XQUlUXQkJPQk2MCpIWiwKLQlbSVBfVlNfVENQX1NfQ0xPU0VdCQk9CTEwKkhaLAotCVtJUF9WU19UQ1BfU19DTE9TRV9XQUlUXQk9CTYwKkhaLAotCVtJUF9WU19UQ1BfU19MQVNUX0FDS10JCT0JMzAqSFosCi0JW0lQX1ZTX1RDUF9TX0xJU1RFTl0JCT0JMio2MCpIWiwKLQlbSVBfVlNfVENQX1NfU1lOQUNLXQkJPQkxMDAqSFosCi0JW0lQX1ZTX1RDUF9TX0xBU1RdCQk9CTIqSFosCi19OwotCi0jZW5kaWYKLQogc3RhdGljIGNoYXIgKiB0Y3Bfc3RhdGVfbmFtZV90YWJsZVtJUF9WU19UQ1BfU19MQVNUKzFdID0gewogCVtJUF9WU19UQ1BfU19OT05FXQkJPQkiTk9ORSIsCiAJW0lQX1ZTX1RDUF9TX0VTVEFCTElTSEVEXQk9CSJFU1RBQkxJU0hFRCIsCkBAIC00NDgsNyArNDI2LDcgQEAKIAkJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QgPSBjcC0+ZGVzdDsKIAogCQlJUF9WU19EQkcoOCwgIiVzICVzIFslYyVjJWMlY10gJXUuJXUuJXUuJXU6JWQtPiIKLQkJCSAgIiV1LiV1LiV1LiV1OiVkIHN0YXRlOiAlcy0+JXMgY250OiVkXG4iLAorCQkJICAiJXUuJXUuJXUuJXU6JWQgc3RhdGU6ICVzLT4lcyBjb25uLT5yZWZjbnQ6JWRcbiIsCiAJCQkgIHBwLT5uYW1lLAogCQkJICAoc3RhdGVfb2ZmPT1UQ1BfRElSX09VVFBVVCk/Im91dHB1dCAiOiJpbnB1dCAiLAogCQkJICB0aC0+c3luPyAnUycgOiAnLicsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYwppbmRleCA4YWU1ZjJlLi44OWQ5MTc1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKQEAgLTE1LDggKzE1LDExIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KIAogI2luY2x1ZGUgPG5ldC9pcF92cy5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NoLmMKaW5kZXggNmY3YzUwZS4uNzc3NWU2YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19zaC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfc2guYwpAQCAtMzQsOCArMzQsMTAgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKICNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCAyZTVjZWQzLi4xYmNhNzE0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtMjEsMTIgKzIxLDE0IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPiAgICAgICAgICAgICAgICAgLyogZm9yIGlwX21jX2pvaW5fZ3JvdXAgKi8KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KIAogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCAzYzJlOTYzLi5iYmExNTYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTY4LDE5ICs2OCwxNCBAQAogCXVuc2lnbmVkIGludCBpbml0aWFsX2VudHJpZXM7CiAJdW5zaWduZWQgaW50IGhvb2tfZW50cnlbTkZfQVJQX05VTUhPT0tTXTsKIAl1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0FSUF9OVU1IT09LU107Ci0JY2hhciBlbnRyaWVzWzBdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoU01QX0NBQ0hFX0JZVEVTKSkpOworCXZvaWQgKmVudHJpZXNbTlJfQ1BVU107CiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGFycHRfdGFyZ2V0KTsKIHN0YXRpYyBMSVNUX0hFQUQoYXJwdF90YWJsZXMpOworI2RlZmluZSBTRVRfQ09VTlRFUihjLGIscCkgZG8geyAoYykuYmNudCA9IChiKTsgKGMpLnBjbnQgPSAocCk7IH0gd2hpbGUoMCkKICNkZWZpbmUgQUREX0NPVU5URVIoYyxiLHApIGRvIHsgKGMpLmJjbnQgKz0gKGIpOyAoYykucGNudCArPSAocCk7IH0gd2hpbGUoMCkKIAotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgVEFCTEVfT0ZGU0VUKHQscCkgKFNNUF9BTElHTigodCktPnNpemUpKihwKSkKLSNlbHNlCi0jZGVmaW5lIFRBQkxFX09GRlNFVCh0LHApIDAKLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIGludCBhcnBfZGV2YWRkcl9jb21wYXJlKGNvbnN0IHN0cnVjdCBhcnB0X2RldmFkZHJfaW5mbyAqYXAsCiAJCQkJICAgICAgY2hhciAqaGRyX2FkZHIsIGludCBsZW4pCiB7CkBAIC0yNjksOSArMjY0LDcgQEAKIAlvdXRkZXYgPSBvdXQgPyBvdXQtPm5hbWUgOiBudWxsZGV2bmFtZTsKIAogCXJlYWRfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXRhYmxlLT5wcml2YXRlLT5lbnRyaWVzCi0JCSsgVEFCTEVfT0ZGU0VUKHRhYmxlLT5wcml2YXRlLAotCQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJdGFibGVfYmFzZSA9ICh2b2lkICopdGFibGUtPnByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHRhYmxlLT5wcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKIAliYWNrID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHRhYmxlLT5wcml2YXRlLT51bmRlcmZsb3dbaG9va10pOwogCkBAIC00NjIsNyArNDU1LDggQEAKIC8qIEZpZ3VyZXMgb3V0IGZyb20gd2hhdCBob29rIGVhY2ggcnVsZSBjYW4gYmUgY2FsbGVkOiByZXR1cm5zIDAgaWYKICAqIHRoZXJlIGFyZSBsb29wcy4gIFB1dHMgaG9vayBiaXRtYXNrIGluIGNvbWVmcm9tLgogICovCi1zdGF0aWMgaW50IG1hcmtfc291cmNlX2NoYWlucyhzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvICpuZXdpbmZvLCB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MpCitzdGF0aWMgaW50IG1hcmtfc291cmNlX2NoYWlucyhzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvICpuZXdpbmZvLAorCQkJICAgICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLCB2b2lkICplbnRyeTApCiB7CiAJdW5zaWduZWQgaW50IGhvb2s7CiAKQEAgLTQ3Miw3ICs0NjYsNyBAQAogCWZvciAoaG9vayA9IDA7IGhvb2sgPCBORl9BUlBfTlVNSE9PS1M7IGhvb2srKykgewogCQl1bnNpZ25lZCBpbnQgcG9zID0gbmV3aW5mby0+aG9va19lbnRyeVtob29rXTsKIAkJc3RydWN0IGFycHRfZW50cnkgKmUKLQkJCT0gKHN0cnVjdCBhcnB0X2VudHJ5ICopKG5ld2luZm8tPmVudHJpZXMgKyBwb3MpOworCQkJPSAoc3RydWN0IGFycHRfZW50cnkgKikoZW50cnkwICsgcG9zKTsKIAogCQlpZiAoISh2YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKSkKIAkJCWNvbnRpbnVlOwpAQCAtNTE0LDEzICs1MDgsMTMgQEAKIAkJCQkJCWdvdG8gbmV4dDsKIAogCQkJCQllID0gKHN0cnVjdCBhcnB0X2VudHJ5ICopCi0JCQkJCQkobmV3aW5mby0+ZW50cmllcyArIHBvcyk7CisJCQkJCQkoZW50cnkwICsgcG9zKTsKIAkJCQl9IHdoaWxlIChvbGRwb3MgPT0gcG9zICsgZS0+bmV4dF9vZmZzZXQpOwogCiAJCQkJLyogTW92ZSBhbG9uZyBvbmUgKi8KIAkJCQlzaXplID0gZS0+bmV4dF9vZmZzZXQ7CiAJCQkJZSA9IChzdHJ1Y3QgYXJwdF9lbnRyeSAqKQotCQkJCQkobmV3aW5mby0+ZW50cmllcyArIHBvcyArIHNpemUpOworCQkJCQkoZW50cnkwICsgcG9zICsgc2l6ZSk7CiAJCQkJZS0+Y291bnRlcnMucGNudCA9IHBvczsKIAkJCQlwb3MgKz0gc2l6ZTsKIAkJCX0gZWxzZSB7CkBAIC01MzcsNyArNTMxLDcgQEAKIAkJCQkJbmV3cG9zID0gcG9zICsgZS0+bmV4dF9vZmZzZXQ7CiAJCQkJfQogCQkJCWUgPSAoc3RydWN0IGFycHRfZW50cnkgKikKLQkJCQkJKG5ld2luZm8tPmVudHJpZXMgKyBuZXdwb3MpOworCQkJCQkoZW50cnkwICsgbmV3cG9zKTsKIAkJCQllLT5jb3VudGVycy5wY250ID0gcG9zOwogCQkJCXBvcyA9IG5ld3BvczsKIAkJCX0KQEAgLTY4OSw2ICs2ODMsNyBAQAogc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJCSAgIHN0cnVjdCBhcnB0X3RhYmxlX2luZm8gKm5ld2luZm8sCisJCQkgICB2b2lkICplbnRyeTAsCiAJCQkgICB1bnNpZ25lZCBpbnQgc2l6ZSwKIAkJCSAgIHVuc2lnbmVkIGludCBudW1iZXIsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKQEAgLTcxMCwxMSArNzA1LDExIEBACiAJaSA9IDA7CiAKIAkvKiBXYWxrIHRocm91Z2ggZW50cmllcywgY2hlY2tpbmcgb2Zmc2V0cy4gKi8KLQlyZXQgPSBBUlBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+c2l6ZSwKKwlyZXQgPSBBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAogCQkJCSBjaGVja19lbnRyeV9zaXplX2FuZF9ob29rcywKIAkJCQkgbmV3aW5mbywKLQkJCQkgbmV3aW5mby0+ZW50cmllcywKLQkJCQkgbmV3aW5mby0+ZW50cmllcyArIHNpemUsCisJCQkJIGVudHJ5MCwKKwkJCQkgZW50cnkwICsgc2l6ZSwKIAkJCQkgaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCAmaSk7CiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogQVJQVF9FTlRSWV9JVEVSQVRFIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKQEAgLTc0MywyOSArNzM4LDI2IEBACiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcykpIHsKKwlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcywgZW50cnkwKSkgewogCQlkdXByaW50ZigiTG9vcGluZyBob29rXG4iKTsKIAkJcmV0dXJuIC1FTE9PUDsKIAl9CiAKIAkvKiBGaW5hbGx5LCBlYWNoIHNhbml0eSBjaGVjayBtdXN0IHBhc3MgKi8KIAlpID0gMDsKLQlyZXQgPSBBUlBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+c2l6ZSwKKwlyZXQgPSBBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAogCQkJCSBjaGVja19lbnRyeSwgbmFtZSwgc2l6ZSwgJmkpOwogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCUFSUFRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzLCBuZXdpbmZvLT5zaXplLAorCQlBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAogCQkJCSAgIGNsZWFudXBfZW50cnksICZpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwogCWZvcl9lYWNoX2NwdShpKSB7Ci0JCWlmIChpID09IDApCi0JCQljb250aW51ZTsKLQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXMgKyBTTVBfQUxJR04obmV3aW5mby0+c2l6ZSkgKiBpLAotCQkgICAgICAgbmV3aW5mby0+ZW50cmllcywKLQkJICAgICAgIFNNUF9BTElHTihuZXdpbmZvLT5zaXplKSk7CisJCWlmIChuZXdpbmZvLT5lbnRyaWVzW2ldICYmIG5ld2luZm8tPmVudHJpZXNbaV0gIT0gZW50cnkwKQorCQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbaV0sIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTgwNywxNSArNzk5LDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNldF9lbnRyeV90b19jb3VudGVyKGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLAorCQkJCSAgICAgICBzdHJ1Y3QgYXJwdF9jb3VudGVycyB0b3RhbFtdLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJU0VUX0NPVU5URVIodG90YWxbKmldLCBlLT5jb3VudGVycy5iY250LCBlLT5jb3VudGVycy5wY250KTsKKworCSgqaSkrKzsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBhcnB0X3RhYmxlX2luZm8gKnQsCiAJCQkgc3RydWN0IGFycHRfY291bnRlcnMgY291bnRlcnNbXSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjdXJjcHU7CisKKwkvKiBJbnN0ZWFkIG9mIGNsZWFyaW5nIChieSBhIHByZXZpb3VzIGNhbGwgdG8gbWVtc2V0KCkpCisJICogdGhlIGNvdW50ZXJzIGFuZCB1c2luZyBhZGRzLCB3ZSBzZXQgdGhlIGNvdW50ZXJzCisJICogd2l0aCBkYXRhIHVzZWQgYnkgJ2N1cnJlbnQnIENQVQorCSAqIFdlIGRvbnQgY2FyZSBhYm91dCBwcmVlbXB0aW9uIGhlcmUuCisJICovCisJY3VyY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWkgPSAwOworCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2N1cmNwdV0sCisJCQkgICB0LT5zaXplLAorCQkJICAgc2V0X2VudHJ5X3RvX2NvdW50ZXIsCisJCQkgICBjb3VudGVycywKKwkJCSAgICZpKTsKIAogCWZvcl9lYWNoX2NwdShjcHUpIHsKKwkJaWYgKGNwdSA9PSBjdXJjcHUpCisJCQljb250aW51ZTsKIAkJaSA9IDA7Ci0JCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzICsgVEFCTEVfT0ZGU0VUKHQsIGNwdSksCisJCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2NwdV0sCiAJCQkJICAgdC0+c2l6ZSwKIAkJCQkgICBhZGRfZW50cnlfdG9fY291bnRlciwKIAkJCQkgICBjb3VudGVycywKQEAgLTgzMSw2ICs4NTAsNyBAQAogCXN0cnVjdCBhcnB0X2VudHJ5ICplOwogCXN0cnVjdCBhcnB0X2NvdW50ZXJzICpjb3VudGVyczsKIAlpbnQgcmV0ID0gMDsKKwl2b2lkICpsb2NfY3B1X2VudHJ5OwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgKiAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtODQzLDEzICs4NjMsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBGaXJzdCwgc3VtIGNvdW50ZXJzLi4uICovCi0JbWVtc2V0KGNvdW50ZXJzLCAwLCBjb3VudGVyc2l6ZSk7CiAJd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOwogCWdldF9jb3VudGVycyh0YWJsZS0+cHJpdmF0ZSwgY291bnRlcnMpOwogCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOwogCi0JLyogLi4uIHRoZW4gY29weSBlbnRpcmUgdGhpbmcgZnJvbSBDUFUgMC4uLiAqLwotCWlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciwgdGFibGUtPnByaXZhdGUtPmVudHJpZXMsIHRvdGFsX3NpemUpICE9IDApIHsKKwlsb2NfY3B1X2VudHJ5ID0gdGFibGUtPnByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJLyogLi4uIHRoZW4gY29weSBlbnRpcmUgdGhpbmcgLi4uICovCisJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyLCBsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplKSAhPSAwKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZnJlZV9jb3VudGVyczsKIAl9CkBAIC04NTksNyArODc5LDcgQEAKIAlmb3IgKG9mZiA9IDAsIG51bSA9IDA7IG9mZiA8IHRvdGFsX3NpemU7IG9mZiArPSBlLT5uZXh0X29mZnNldCwgbnVtKyspewogCQlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CiAKLQkJZSA9IChzdHJ1Y3QgYXJwdF9lbnRyeSAqKSh0YWJsZS0+cHJpdmF0ZS0+ZW50cmllcyArIG9mZik7CisJCWUgPSAoc3RydWN0IGFycHRfZW50cnkgKikobG9jX2NwdV9lbnRyeSArIG9mZik7CiAJCWlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZgogCQkJCSArIG9mZnNldG9mKHN0cnVjdCBhcnB0X2VudHJ5LCBjb3VudGVycyksCiAJCQkJICZjb3VudGVyc1tudW1dLApAQCAtOTExLDYgKzkzMSw0NyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvICppbmZvKQoreworCWludCBjcHU7CisJZm9yX2VhY2hfY3B1KGNwdSkgeworCQlpZiAoaW5mby0+c2l6ZSA8PSBQQUdFX1NJWkUpCisJCQlrZnJlZShpbmZvLT5lbnRyaWVzW2NwdV0pOworCQllbHNlCisJCQl2ZnJlZShpbmZvLT5lbnRyaWVzW2NwdV0pOworCX0KKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBhcnB0X3RhYmxlX2luZm8gKmFsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IGFycHRfdGFibGVfaW5mbyAqbmV3aW5mbzsKKwlpbnQgY3B1OworCQorCW5ld2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdpbmZvKQorCQlyZXR1cm4gTlVMTDsKKworCW5ld2luZm8tPnNpemUgPSBzaXplOworCisJZm9yX2VhY2hfY3B1KGNwdSkgeworCQlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCisJCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSBrbWFsbG9jX25vZGUoc2l6ZSwKKwkJCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkJCWNwdV90b19ub2RlKGNwdSkpOworCQllbHNlCisJCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSB2bWFsbG9jX25vZGUoc2l6ZSwKKwkJCQkJCQkgICAgIGNwdV90b19ub2RlKGNwdSkpOworCisJCWlmIChuZXdpbmZvLT5lbnRyaWVzW2NwdV0gPT0gTlVMTCkgeworCQkJZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gbmV3aW5mbzsKK30KKwogc3RhdGljIGludCBkb19yZXBsYWNlKHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQ7CkBAIC05MTgsNiArOTc5LDcgQEAKIAlzdHJ1Y3QgYXJwdF90YWJsZSAqdDsKIAlzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvICpuZXdpbmZvLCAqb2xkaW5mbzsKIAlzdHJ1Y3QgYXJwdF9jb3VudGVycyAqY291bnRlcnM7CisJdm9pZCAqbG9jX2NwdV9lbnRyeSwgKmxvY19jcHVfb2xkX2VudHJ5OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTkzMCwxMyArOTkyLDEzIEBACiAJaWYgKChTTVBfQUxJR04odG1wLnNpemUpID4+IFBBR0VfU0hJRlQpICsgMiA+IG51bV9waHlzcGFnZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcnB0X3RhYmxlX2luZm8pCi0JCQkgICsgU01QX0FMSUdOKHRtcC5zaXplKSAqCi0JCQkgIAkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSkpOworCW5ld2luZm8gPSBhbGxvY190YWJsZV9pbmZvKHRtcC5zaXplKTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKG5ld2luZm8tPmVudHJpZXMsIHVzZXIgKyBzaXplb2YodG1wKSwKKwkvKiBjaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZS9jcHUgKi8KKwlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlpZiAoY29weV9mcm9tX3VzZXIobG9jX2NwdV9lbnRyeSwgdXNlciArIHNpemVvZih0bXApLAogCQkJICAgdG1wLnNpemUpICE9IDApIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBmcmVlX25ld2luZm87CkBAIC05NDcsMTAgKzEwMDksOSBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIAl9Ci0JbWVtc2V0KGNvdW50ZXJzLCAwLCB0bXAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBhcnB0X2NvdW50ZXJzKSk7CiAKIAlyZXQgPSB0cmFuc2xhdGVfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIHRtcC5zaXplLCB0bXAubnVtX2VudHJpZXMsCisJCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCB0bXAuc2l6ZSwgdG1wLm51bV9lbnRyaWVzLAogCQkJICAgICAgdG1wLmhvb2tfZW50cnksIHRtcC51bmRlcmZsb3cpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBmcmVlX25ld2luZm9fY291bnRlcnM7CkBAIC05ODksOCArMTA1MCwxMCBAQAogCS8qIEdldCB0aGUgb2xkIGNvdW50ZXJzLiAqLwogCWdldF9jb3VudGVycyhvbGRpbmZvLCBjb3VudGVycyk7CiAJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZSAqLwotCUFSUFRfRU5UUllfSVRFUkFURShvbGRpbmZvLT5lbnRyaWVzLCBvbGRpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LE5VTEwpOwotCXZmcmVlKG9sZGluZm8pOworCWxvY19jcHVfb2xkX2VudHJ5ID0gb2xkaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9vbGRfZW50cnksIG9sZGluZm8tPnNpemUsIGNsZWFudXBfZW50cnksTlVMTCk7CisKKwlmcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcih0bXAuY291bnRlcnMsIGNvdW50ZXJzLAogCQkJIHNpemVvZihzdHJ1Y3QgYXJwdF9jb3VudGVycykgKiB0bXAubnVtX2NvdW50ZXJzKSAhPSAwKQogCQlyZXQgPSAtRUZBVUxUOwpAQCAtMTAwMiwxMSArMTA2NSwxMSBAQAogCW1vZHVsZV9wdXQodC0+bWUpOwogCXVwKCZhcnB0X211dGV4KTsKICBmcmVlX25ld2luZm9fY291bnRlcnNfdW50cmFuczoKLQlBUlBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJQVJQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksIE5VTEwpOwogIGZyZWVfbmV3aW5mb19jb3VudGVyczoKIAl2ZnJlZShjb3VudGVycyk7CiAgZnJlZV9uZXdpbmZvOgotCXZmcmVlKG5ld2luZm8pOworCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDMwLDYgKzEwOTMsNyBAQAogCXN0cnVjdCBhcnB0X2NvdW50ZXJzX2luZm8gdG1wLCAqcGFkZGM7CiAJc3RydWN0IGFycHRfdGFibGUgKnQ7CiAJaW50IHJldCA9IDA7CisJdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMDU5LDcgKzExMjMsOSBAQAogCX0KIAogCWkgPSAwOwotCUFSUFRfRU5UUllfSVRFUkFURSh0LT5wcml2YXRlLT5lbnRyaWVzLAorCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCisJbG9jX2NwdV9lbnRyeSA9IHQtPnByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwKIAkJCSAgIHQtPnByaXZhdGUtPnNpemUsCiAJCQkgICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgIHBhZGRjLT5jb3VudGVycywKQEAgLTEyMjAsMzAgKzEyODYsMzIgQEAKIAlzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXN0YXRpYyBzdHJ1Y3QgYXJwdF90YWJsZV9pbmZvIGJvb3RzdHJhcAogCQk9IHsgMCwgMCwgMCwgeyAwIH0sIHsgMCB9LCB7IH0gfTsKKwl2b2lkICpsb2NfY3B1X2VudHJ5OwogCi0JbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcnB0X3RhYmxlX2luZm8pCi0JCQkgICsgU01QX0FMSUdOKHJlcGwtPnNpemUpICoKLQkJCSAgCQkoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKSk7CisJbmV3aW5mbyA9IGFsbG9jX3RhYmxlX2luZm8ocmVwbC0+c2l6ZSk7CiAJaWYgKCFuZXdpbmZvKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCXJldHVybiByZXQ7CiAJfQotCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzLCByZXBsLT5lbnRyaWVzLCByZXBsLT5zaXplKTsKKworCS8qIGNob29zZSB0aGUgY29weSBvbiBvdXIgbm9kZS9jcHUgKi8KKwlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwltZW1jcHkobG9jX2NwdV9lbnRyeSwgcmVwbC0+ZW50cmllcywgcmVwbC0+c2l6ZSk7CiAKIAlyZXQgPSB0cmFuc2xhdGVfdGFibGUodGFibGUtPm5hbWUsIHRhYmxlLT52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIHJlcGwtPnNpemUsCisJCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsLT5zaXplLAogCQkJICAgICAgcmVwbC0+bnVtX2VudHJpZXMsCiAJCQkgICAgICByZXBsLT5ob29rX2VudHJ5LAogCQkJICAgICAgcmVwbC0+dW5kZXJmbG93KTsKIAlkdXByaW50ZigiYXJwdF9yZWdpc3Rlcl90YWJsZTogdHJhbnNsYXRlIHRhYmxlIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkgewotCQl2ZnJlZShuZXdpbmZvKTsKKwkJZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmYXJwdF9tdXRleCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXZmcmVlKG5ld2luZm8pOworCQlmcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMjcyLDIwICsxMzQwLDIzIEBACiAJcmV0dXJuIHJldDsKIAogIGZyZWVfdW5sb2NrOgotCXZmcmVlKG5ld2luZm8pOworCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlnb3RvIHVubG9jazsKIH0KIAogdm9pZCBhcnB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGFycHRfdGFibGUgKnRhYmxlKQogeworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKIAlkb3duKCZhcnB0X211dGV4KTsKIAlMSVNUX0RFTEVURSgmYXJwdF90YWJsZXMsIHRhYmxlKTsKIAl1cCgmYXJwdF9tdXRleCk7CiAKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlcyAqLwotCUFSUFRfRU5UUllfSVRFUkFURSh0YWJsZS0+cHJpdmF0ZS0+ZW50cmllcywgdGFibGUtPnByaXZhdGUtPnNpemUsCisJbG9jX2NwdV9lbnRyeSA9IHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCUFSUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCB0YWJsZS0+cHJpdmF0ZS0+c2l6ZSwKIAkJCSAgIGNsZWFudXBfZW50cnksIE5VTEwpOwotCXZmcmVlKHRhYmxlLT5wcml2YXRlKTsKKwlmcmVlX3RhYmxlX2luZm8odGFibGUtPnByaXZhdGUpOwogfQogCiAvKiBUaGUgYnVpbHQtaW4gdGFyZ2V0czogc3RhbmRhcmQgKE5VTEwpIGFuZCBlcnJvci4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IGU1Mjg0N2YuLjAzNjZlZWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtMTgsMTEgKzE4LDEzIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCmluZGV4IDc0NGFiYjkuLjU3OTU2ZGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19ncmUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogc3RhdGljIERFRklORV9SV0xPQ0soaXBfY3RfZ3JlX2xvY2spOwogI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCBmMmRjYWM3Li40NmJlY2JlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBkZDQ3NmIxLi5hODhiY2M1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKICNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQogI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYwppbmRleCA4YWNiN2VkLi40Zjk1ZDQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYwpAQCAtNDQsNiArNDQsNyBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUzLDYgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X2hlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L3VkcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNDU4ODZjOC4uMmEyNmQxNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtODMsMTEgKzgzLDYgQEAKICAgIGNvbnRleHQgc3RvcHMgcGFja2V0cyBjb21pbmcgdGhyb3VnaCBhbmQgYWxsb3dzIHVzZXIgY29udGV4dCB0byByZWFkCiAgICB0aGUgY291bnRlcnMgb3IgdXBkYXRlIHRoZSBydWxlcy4KIAotICAgVG8gYmUgY2FjaGUgZnJpZW5kbHkgb24gU01QLCB3ZSBhcnJhbmdlIHRoZW0gbGlrZSBzbzoKLSAgIFsgbi1lbnRyaWVzIF0KLSAgIC4uLiBjYWNoZS1hbGlnbiBwYWRkaW5nIC4uLgotICAgWyBuLWVudHJpZXMgXQotCiAgICBIZW5jZSB0aGUgc3RhcnQgb2YgYW55IHRhYmxlIGlzIGdpdmVuIGJ5IGdldF90YWJsZSgpIGJlbG93LiAgKi8KIAogLyogVGhlIHRhYmxlIGl0c2VsZiAqLwpAQCAtMTA1LDIwICsxMDAsMTUgQEAKIAl1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQX05VTUhPT0tTXTsKIAogCS8qIGlwdF9lbnRyeSB0YWJsZXM6IG9uZSBwZXIgQ1BVICovCi0JY2hhciBlbnRyaWVzWzBdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl2b2lkICplbnRyaWVzW05SX0NQVVNdOwogfTsKIAogc3RhdGljIExJU1RfSEVBRChpcHRfdGFyZ2V0KTsKIHN0YXRpYyBMSVNUX0hFQUQoaXB0X21hdGNoKTsKIHN0YXRpYyBMSVNUX0hFQUQoaXB0X3RhYmxlcyk7CisjZGVmaW5lIFNFVF9DT1VOVEVSKGMsYixwKSBkbyB7IChjKS5iY250ID0gKGIpOyAoYykucGNudCA9IChwKTsgfSB3aGlsZSgwKQogI2RlZmluZSBBRERfQ09VTlRFUihjLGIscCkgZG8geyAoYykuYmNudCArPSAoYik7IChjKS5wY250ICs9IChwKTsgfSB3aGlsZSgwKQogCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBUQUJMRV9PRkZTRVQodCxwKSAoU01QX0FMSUdOKCh0KS0+c2l6ZSkqKHApKQotI2Vsc2UKLSNkZWZpbmUgVEFCTEVfT0ZGU0VUKHQscCkgMAotI2VuZGlmCi0KICNpZiAwCiAjZGVmaW5lIGRvd24oeCkgZG8geyBwcmludGsoIkRPV046JXU6IiAjeCAiXG4iLCBfX0xJTkVfXyk7IGRvd24oeCk7IH0gd2hpbGUoMCkKICNkZWZpbmUgZG93bl9pbnRlcnJ1cHRpYmxlKHgpICh7IGludCBfX3I7IHByaW50aygiRE9XTmk6JXU6IiAjeCAiXG4iLCBfX0xJTkVfXyk7IF9fciA9IGRvd25faW50ZXJydXB0aWJsZSh4KTsgaWYgKF9fciAhPSAwKSBwcmludGsoIkFCT1JULURPV05pOiV1XG4iLCBfX0xJTkVfXyk7IF9fcjsgfSkKQEAgLTI5MCw4ICsyODAsNyBAQAogCiAJcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKil0YWJsZS0+cHJpdmF0ZS0+ZW50cmllcwotCQkrIFRBQkxFX09GRlNFVCh0YWJsZS0+cHJpdmF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0YWJsZV9iYXNlID0gKHZvaWQgKil0YWJsZS0+cHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgdGFibGUtPnByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwpAQCAtNTYzLDcgKzU1Miw4IEBACiAvKiBGaWd1cmVzIG91dCBmcm9tIHdoYXQgaG9vayBlYWNoIHJ1bGUgY2FuIGJlIGNhbGxlZDogcmV0dXJucyAwIGlmCiAgICB0aGVyZSBhcmUgbG9vcHMuICBQdXRzIGhvb2sgYml0bWFzayBpbiBjb21lZnJvbS4gKi8KIHN0YXRpYyBpbnQKLW1hcmtfc291cmNlX2NoYWlucyhzdHJ1Y3QgaXB0X3RhYmxlX2luZm8gKm5ld2luZm8sIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcykKK21hcmtfc291cmNlX2NoYWlucyhzdHJ1Y3QgaXB0X3RhYmxlX2luZm8gKm5ld2luZm8sCisJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywgdm9pZCAqZW50cnkwKQogewogCXVuc2lnbmVkIGludCBob29rOwogCkBAIC01NzIsNyArNTYyLDcgQEAKIAlmb3IgKGhvb2sgPSAwOyBob29rIDwgTkZfSVBfTlVNSE9PS1M7IGhvb2srKykgewogCQl1bnNpZ25lZCBpbnQgcG9zID0gbmV3aW5mby0+aG9va19lbnRyeVtob29rXTsKIAkJc3RydWN0IGlwdF9lbnRyeSAqZQotCQkJPSAoc3RydWN0IGlwdF9lbnRyeSAqKShuZXdpbmZvLT5lbnRyaWVzICsgcG9zKTsKKwkJCT0gKHN0cnVjdCBpcHRfZW50cnkgKikoZW50cnkwICsgcG9zKTsKIAogCQlpZiAoISh2YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKSkKIAkJCWNvbnRpbnVlOwpAQCAtNjIyLDEzICs2MTIsMTMgQEAKIAkJCQkJCWdvdG8gbmV4dDsKIAogCQkJCQllID0gKHN0cnVjdCBpcHRfZW50cnkgKikKLQkJCQkJCShuZXdpbmZvLT5lbnRyaWVzICsgcG9zKTsKKwkJCQkJCShlbnRyeTAgKyBwb3MpOwogCQkJCX0gd2hpbGUgKG9sZHBvcyA9PSBwb3MgKyBlLT5uZXh0X29mZnNldCk7CiAKIAkJCQkvKiBNb3ZlIGFsb25nIG9uZSAqLwogCQkJCXNpemUgPSBlLT5uZXh0X29mZnNldDsKIAkJCQllID0gKHN0cnVjdCBpcHRfZW50cnkgKikKLQkJCQkJKG5ld2luZm8tPmVudHJpZXMgKyBwb3MgKyBzaXplKTsKKwkJCQkJKGVudHJ5MCArIHBvcyArIHNpemUpOwogCQkJCWUtPmNvdW50ZXJzLnBjbnQgPSBwb3M7CiAJCQkJcG9zICs9IHNpemU7CiAJCQl9IGVsc2UgewpAQCAtNjQ1LDcgKzYzNSw3IEBACiAJCQkJCW5ld3BvcyA9IHBvcyArIGUtPm5leHRfb2Zmc2V0OwogCQkJCX0KIAkJCQllID0gKHN0cnVjdCBpcHRfZW50cnkgKikKLQkJCQkJKG5ld2luZm8tPmVudHJpZXMgKyBuZXdwb3MpOworCQkJCQkoZW50cnkwICsgbmV3cG9zKTsKIAkJCQllLT5jb3VudGVycy5wY250ID0gcG9zOwogCQkJCXBvcyA9IG5ld3BvczsKIAkJCX0KQEAgLTg1NSw2ICs4NDUsNyBAQAogdHJhbnNsYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCXVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJc3RydWN0IGlwdF90YWJsZV9pbmZvICpuZXdpbmZvLAorCQl2b2lkICplbnRyeTAsCiAJCXVuc2lnbmVkIGludCBzaXplLAogCQl1bnNpZ25lZCBpbnQgbnVtYmVyLAogCQljb25zdCB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKQEAgLTg3NSwxMSArODY2LDExIEBACiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogc2l6ZSAldVxuIiwgbmV3aW5mby0+c2l6ZSk7CiAJaSA9IDA7CiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+c2l6ZSwKKwlyZXQgPSBJUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCiAJCQkJY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3MsCiAJCQkJbmV3aW5mbywKLQkJCQluZXdpbmZvLT5lbnRyaWVzLAotCQkJCW5ld2luZm8tPmVudHJpZXMgKyBzaXplLAorCQkJCWVudHJ5MCwKKwkJCQllbnRyeTAgKyBzaXplLAogCQkJCWhvb2tfZW50cmllcywgdW5kZXJmbG93cywgJmkpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTkwNywyNyArODk4LDI0IEBACiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcykpCisJaWYgKCFtYXJrX3NvdXJjZV9jaGFpbnMobmV3aW5mbywgdmFsaWRfaG9va3MsIGVudHJ5MCkpCiAJCXJldHVybiAtRUxPT1A7CiAKIAkvKiBGaW5hbGx5LCBlYWNoIHNhbml0eSBjaGVjayBtdXN0IHBhc3MgKi8KIAlpID0gMDsKLQlyZXQgPSBJUFRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzLCBuZXdpbmZvLT5zaXplLAorCXJldCA9IElQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKIAkJCQljaGVja19lbnRyeSwgbmFtZSwgc2l6ZSwgJmkpOwogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCUlQVF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXMsIG5ld2luZm8tPnNpemUsCisJCUlQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKIAkJCQkgIGNsZWFudXBfZW50cnksICZpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBBbmQgb25lIGNvcHkgZm9yIGV2ZXJ5IG90aGVyIENQVSAqLwogCWZvcl9lYWNoX2NwdShpKSB7Ci0JCWlmIChpID09IDApCi0JCQljb250aW51ZTsKLQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXMgKyBTTVBfQUxJR04obmV3aW5mby0+c2l6ZSkgKiBpLAotCQkgICAgICAgbmV3aW5mby0+ZW50cmllcywKLQkJICAgICAgIFNNUF9BTElHTihuZXdpbmZvLT5zaXplKSk7CisJCWlmIChuZXdpbmZvLT5lbnRyaWVzW2ldICYmIG5ld2luZm8tPmVudHJpZXNbaV0gIT0gZW50cnkwKQorCQkJbWVtY3B5KG5ld2luZm8tPmVudHJpZXNbaV0sIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTk0MywxNSArOTMxLDEyIEBACiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCiAJewotCQlzdHJ1Y3QgaXB0X2VudHJ5ICp0YWJsZV9iYXNlOwotCQl1bnNpZ25lZCBpbnQgaTsKKwkJaW50IGNwdTsKIAotCQlmb3JfZWFjaF9jcHUoaSkgewotCQkJdGFibGVfYmFzZSA9Ci0JCQkJKHZvaWQgKiluZXdpbmZvLT5lbnRyaWVzCi0JCQkJKyBUQUJMRV9PRkZTRVQobmV3aW5mbywgaSk7Ci0KLQkJCXRhYmxlX2Jhc2UtPmNvbWVmcm9tID0gMHhkZWFkNTdhYzsKKwkJZm9yX2VhY2hfY3B1KGNwdSkgeworCQkJc3RydWN0IGlwdF9lbnRyeSAqdGFibGVfYmFzZSA9IG5ld2luZm8tPmVudHJpZXNbY3B1XTsKKwkJCWlmICh0YWJsZV9iYXNlKQorCQkJCXRhYmxlX2Jhc2UtPmNvbWVmcm9tID0gMHhkZWFkNTdhYzsKIAkJfQogCX0KICNlbmRpZgpAQCAtOTg2LDE2ICs5NzEsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK3NldF9lbnRyeV90b19jb3VudGVyKGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUsCisJCSAgICAgc3RydWN0IGlwdF9jb3VudGVycyB0b3RhbFtdLAorCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3sKKwlTRVRfQ09VTlRFUih0b3RhbFsqaV0sIGUtPmNvdW50ZXJzLmJjbnQsIGUtPmNvdW50ZXJzLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBpcHRfdGFibGVfaW5mbyAqdCwKIAkgICAgIHN0cnVjdCBpcHRfY291bnRlcnMgY291bnRlcnNbXSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjdXJjcHU7CisKKwkvKiBJbnN0ZWFkIG9mIGNsZWFyaW5nIChieSBhIHByZXZpb3VzIGNhbGwgdG8gbWVtc2V0KCkpCisJICogdGhlIGNvdW50ZXJzIGFuZCB1c2luZyBhZGRzLCB3ZSBzZXQgdGhlIGNvdW50ZXJzCisJICogd2l0aCBkYXRhIHVzZWQgYnkgJ2N1cnJlbnQnIENQVQorCSAqIFdlIGRvbnQgY2FyZSBhYm91dCBwcmVlbXB0aW9uIGhlcmUuCisJICovCisJY3VyY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWkgPSAwOworCUlQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3VyY3B1XSwKKwkJCSAgdC0+c2l6ZSwKKwkJCSAgc2V0X2VudHJ5X3RvX2NvdW50ZXIsCisJCQkgIGNvdW50ZXJzLAorCQkJICAmaSk7CiAKIAlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWlmIChjcHUgPT0gY3VyY3B1KQorCQkJY29udGludWU7CiAJCWkgPSAwOwotCQlJUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzICsgVEFCTEVfT0ZGU0VUKHQsIGNwdSksCisJCUlQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKIAkJCQkgIHQtPnNpemUsCiAJCQkJICBhZGRfZW50cnlfdG9fY291bnRlciwKIAkJCQkgIGNvdW50ZXJzLApAQCAtMTAxMiwyNCArMTAyNSwyOSBAQAogCXN0cnVjdCBpcHRfZW50cnkgKmU7CiAJc3RydWN0IGlwdF9jb3VudGVycyAqY291bnRlcnM7CiAJaW50IHJldCA9IDA7CisJdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICAgKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKIAkgICBhYm91dCkuICovCiAJY291bnRlcnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9jb3VudGVycykgKiB0YWJsZS0+cHJpdmF0ZS0+bnVtYmVyOwotCWNvdW50ZXJzID0gdm1hbGxvYyhjb3VudGVyc2l6ZSk7CisJY291bnRlcnMgPSB2bWFsbG9jX25vZGUoY291bnRlcnNpemUsIG51bWFfbm9kZV9pZCgpKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIEZpcnN0LCBzdW0gY291bnRlcnMuLi4gKi8KLQltZW1zZXQoY291bnRlcnMsIDAsIGNvdW50ZXJzaXplKTsKIAl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJZ2V0X2NvdW50ZXJzKHRhYmxlLT5wcml2YXRlLCBjb3VudGVycyk7CiAJd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAKLQkvKiAuLi4gdGhlbiBjb3B5IGVudGlyZSB0aGluZyBmcm9tIENQVSAwLi4uICovCi0JaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyLCB0YWJsZS0+cHJpdmF0ZS0+ZW50cmllcywgdG90YWxfc2l6ZSkgIT0gMCkgeworCS8qIGNob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlL2NwdSwgLi4uCisJICogVGhpcyBjaG9pY2UgaXMgbGF6eSAoYmVjYXVzZSBjdXJyZW50IHRocmVhZCBpcworCSAqIGFsbG93ZWQgdG8gbWlncmF0ZSB0byBhbm90aGVyIGNwdSkKKwkgKi8KKwlsb2NfY3B1X2VudHJ5ID0gdGFibGUtPnByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJLyogLi4uIHRoZW4gY29weSBlbnRpcmUgdGhpbmcgLi4uICovCisJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyLCBsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplKSAhPSAwKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZnJlZV9jb3VudGVyczsKIAl9CkBAIC0xMDQxLDcgKzEwNTksNyBAQAogCQlzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptOwogCQlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKIAotCQllID0gKHN0cnVjdCBpcHRfZW50cnkgKikodGFibGUtPnByaXZhdGUtPmVudHJpZXMgKyBvZmYpOworCQllID0gKHN0cnVjdCBpcHRfZW50cnkgKikobG9jX2NwdV9lbnRyeSArIG9mZik7CiAJCWlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZgogCQkJCSArIG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGNvdW50ZXJzKSwKIAkJCQkgJmNvdW50ZXJzW251bV0sCkBAIC0xMTEwLDYgKzExMjgsNDUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBmcmVlX3RhYmxlX2luZm8oc3RydWN0IGlwdF90YWJsZV9pbmZvICppbmZvKQoreworCWludCBjcHU7CisJZm9yX2VhY2hfY3B1KGNwdSkgeworCQlpZiAoaW5mby0+c2l6ZSA8PSBQQUdFX1NJWkUpCisJCQlrZnJlZShpbmZvLT5lbnRyaWVzW2NwdV0pOworCQllbHNlCisJCQl2ZnJlZShpbmZvLT5lbnRyaWVzW2NwdV0pOworCX0KKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBpcHRfdGFibGVfaW5mbyAqYWxsb2NfdGFibGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgaXB0X3RhYmxlX2luZm8gKm5ld2luZm87CisJaW50IGNwdTsKKworCW5ld2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXB0X3RhYmxlX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld2luZm8pCisJCXJldHVybiBOVUxMOworCisJbmV3aW5mby0+c2l6ZSA9IHNpemU7CisKKwlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWlmIChzaXplIDw9IFBBR0VfU0laRSkKKwkJCW5ld2luZm8tPmVudHJpZXNbY3B1XSA9IGttYWxsb2Nfbm9kZShzaXplLAorCQkJCUdGUF9LRVJORUwsCisJCQkJY3B1X3RvX25vZGUoY3B1KSk7CisJCWVsc2UKKwkJCW5ld2luZm8tPmVudHJpZXNbY3B1XSA9IHZtYWxsb2Nfbm9kZShzaXplLCBjcHVfdG9fbm9kZShjcHUpKTsKKwkJaWYgKG5ld2luZm8tPmVudHJpZXNbY3B1XSA9PSAwKSB7CisJCQlmcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBuZXdpbmZvOworfQorCiBzdGF0aWMgaW50CiBkb19yZXBsYWNlKHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtMTExOCw2ICsxMTc1LDcgQEAKIAlzdHJ1Y3QgaXB0X3RhYmxlICp0OwogCXN0cnVjdCBpcHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKm9sZGluZm87CiAJc3RydWN0IGlwdF9jb3VudGVycyAqY291bnRlcnM7CisJdm9pZCAqbG9jX2NwdV9lbnRyeSwgKmxvY19jcHVfb2xkX2VudHJ5OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMzAsMTMgKzExODgsMTMgQEAKIAlpZiAoKFNNUF9BTElHTih0bXAuc2l6ZSkgPj4gUEFHRV9TSElGVCkgKyAyID4gbnVtX3BoeXNwYWdlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQluZXdpbmZvID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGlwdF90YWJsZV9pbmZvKQotCQkJICArIFNNUF9BTElHTih0bXAuc2l6ZSkgKiAKLQkJCSAgCShoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpKTsKKwluZXdpbmZvID0gYWxsb2NfdGFibGVfaW5mbyh0bXAuc2l6ZSk7CiAJaWYgKCFuZXdpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihuZXdpbmZvLT5lbnRyaWVzLCB1c2VyICsgc2l6ZW9mKHRtcCksCisJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb3VyIG5vZGUvY3B1ICovCisJbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaWYgKGNvcHlfZnJvbV91c2VyKGxvY19jcHVfZW50cnksIHVzZXIgKyBzaXplb2YodG1wKSwKIAkJCSAgIHRtcC5zaXplKSAhPSAwKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZnJlZV9uZXdpbmZvOwpAQCAtMTE0NywxMCArMTIwNSw5IEBACiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCX0KLQltZW1zZXQoY291bnRlcnMsIDAsIHRtcC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGlwdF9jb3VudGVycykpOwogCiAJcmV0ID0gdHJhbnNsYXRlX3RhYmxlKHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCi0JCQkgICAgICBuZXdpbmZvLCB0bXAuc2l6ZSwgdG1wLm51bV9lbnRyaWVzLAorCQkJICAgICAgbmV3aW5mbywgbG9jX2NwdV9lbnRyeSwgdG1wLnNpemUsIHRtcC5udW1fZW50cmllcywKIAkJCSAgICAgIHRtcC5ob29rX2VudHJ5LCB0bXAudW5kZXJmbG93KTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9uZXdpbmZvX2NvdW50ZXJzOwpAQCAtMTE4OSw4ICsxMjQ2LDkgQEAKIAkvKiBHZXQgdGhlIG9sZCBjb3VudGVycy4gKi8KIAlnZXRfY291bnRlcnMob2xkaW5mbywgY291bnRlcnMpOwogCS8qIERlY3JlYXNlIG1vZHVsZSB1c2FnZSBjb3VudHMgYW5kIGZyZWUgcmVzb3VyY2UgKi8KLQlJUFRfRU5UUllfSVRFUkFURShvbGRpbmZvLT5lbnRyaWVzLCBvbGRpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LE5VTEwpOwotCXZmcmVlKG9sZGluZm8pOworCWxvY19jcHVfb2xkX2VudHJ5ID0gb2xkaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKKwlmcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcih0bXAuY291bnRlcnMsIGNvdW50ZXJzLAogCQkJIHNpemVvZihzdHJ1Y3QgaXB0X2NvdW50ZXJzKSAqIHRtcC5udW1fY291bnRlcnMpICE9IDApCiAJCXJldCA9IC1FRkFVTFQ7CkBAIC0xMjAyLDExICsxMjYwLDExIEBACiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAJdXAoJmlwdF9tdXRleCk7CiAgZnJlZV9uZXdpbmZvX2NvdW50ZXJzX3VudHJhbnM6Ci0JSVBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKKwlJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LE5VTEwpOwogIGZyZWVfbmV3aW5mb19jb3VudGVyczoKIAl2ZnJlZShjb3VudGVycyk7CiAgZnJlZV9uZXdpbmZvOgotCXZmcmVlKG5ld2luZm8pOworCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjM5LDYgKzEyOTcsNyBAQAogCXN0cnVjdCBpcHRfY291bnRlcnNfaW5mbyB0bXAsICpwYWRkYzsKIAlzdHJ1Y3QgaXB0X3RhYmxlICp0OwogCWludCByZXQgPSAwOworCXZvaWQgKmxvY19jcHVfZW50cnk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTI0Niw3ICsxMzA1LDcgQEAKIAlpZiAobGVuICE9IHNpemVvZih0bXApICsgdG1wLm51bV9jb3VudGVycypzaXplb2Yoc3RydWN0IGlwdF9jb3VudGVycykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGFkZGMgPSB2bWFsbG9jKGxlbik7CisJcGFkZGMgPSB2bWFsbG9jX25vZGUobGVuLCBudW1hX25vZGVfaWQoKSk7CiAJaWYgKCFwYWRkYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyNjgsNyArMTMyNyw5IEBACiAJfQogCiAJaSA9IDA7Ci0JSVBUX0VOVFJZX0lURVJBVEUodC0+cHJpdmF0ZS0+ZW50cmllcywKKwkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLworCWxvY19jcHVfZW50cnkgPSB0LT5wcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksCiAJCQkgIHQtPnByaXZhdGUtPnNpemUsCiAJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAogCQkJICBwYWRkYy0+Y291bnRlcnMsCkBAIC0xNDYwLDI4ICsxNTIxLDMxIEBACiAJc3RydWN0IGlwdF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXN0YXRpYyBzdHJ1Y3QgaXB0X3RhYmxlX2luZm8gYm9vdHN0cmFwCiAJCT0geyAwLCAwLCAwLCB7IDAgfSwgeyAwIH0sIHsgfSB9OworCXZvaWQgKmxvY19jcHVfZW50cnk7CiAKLQluZXdpbmZvID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGlwdF90YWJsZV9pbmZvKQotCQkJICArIFNNUF9BTElHTihyZXBsLT5zaXplKSAqIAotCQkJICAJCShoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpKTsKKwluZXdpbmZvID0gYWxsb2NfdGFibGVfaW5mbyhyZXBsLT5zaXplKTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KG5ld2luZm8tPmVudHJpZXMsIHJlcGwtPmVudHJpZXMsIHJlcGwtPnNpemUpOworCS8qIGNob29zZSB0aGUgY29weSBvbiBvdXIgbm9kZS9jcHUKKwkgKiBidXQgZG9udCBjYXJlIG9mIHByZWVtcHRpb24KKwkgKi8KKwlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwltZW1jcHkobG9jX2NwdV9lbnRyeSwgcmVwbC0+ZW50cmllcywgcmVwbC0+c2l6ZSk7CiAKIAlyZXQgPSB0cmFuc2xhdGVfdGFibGUodGFibGUtPm5hbWUsIHRhYmxlLT52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIHJlcGwtPnNpemUsCisJCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsLT5zaXplLAogCQkJICAgICAgcmVwbC0+bnVtX2VudHJpZXMsCiAJCQkgICAgICByZXBsLT5ob29rX2VudHJ5LAogCQkJICAgICAgcmVwbC0+dW5kZXJmbG93KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJdmZyZWUobmV3aW5mbyk7CisJCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJmlwdF9tdXRleCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXZmcmVlKG5ld2luZm8pOworCQlmcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xNTEwLDIwICsxNTc0LDIzIEBACiAJcmV0dXJuIHJldDsKIAogIGZyZWVfdW5sb2NrOgotCXZmcmVlKG5ld2luZm8pOworCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlnb3RvIHVubG9jazsKIH0KIAogdm9pZCBpcHRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgaXB0X3RhYmxlICp0YWJsZSkKIHsKKwl2b2lkICpsb2NfY3B1X2VudHJ5OworCiAJZG93bigmaXB0X211dGV4KTsKIAlMSVNUX0RFTEVURSgmaXB0X3RhYmxlcywgdGFibGUpOwogCXVwKCZpcHRfbXV0ZXgpOwogCiAJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZXMgKi8KLQlJUFRfRU5UUllfSVRFUkFURSh0YWJsZS0+cHJpdmF0ZS0+ZW50cmllcywgdGFibGUtPnByaXZhdGUtPnNpemUsCisJbG9jX2NwdV9lbnRyeSA9IHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIHRhYmxlLT5wcml2YXRlLT5zaXplLAogCQkJICBjbGVhbnVwX2VudHJ5LCBOVUxMKTsKLQl2ZnJlZSh0YWJsZS0+cHJpdmF0ZSk7CisJZnJlZV90YWJsZV9pbmZvKHRhYmxlLT5wcml2YXRlKTsKIH0KIAogLyogUmV0dXJucyAxIGlmIHRoZSBwb3J0IGlzIG1hdGNoZWQgYnkgdGhlIHJhbmdlLCAwIG90aGVyd2lzZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwppbmRleCAyNzVhMTc0Li4yNzg2MDUxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTgsNiArMTksNyBAQAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcGh5c2Rldi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9waHlzZGV2LmMKaW5kZXggMWE1MzkyNC4uMDNmNTU0OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9waHlzZGV2LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9waHlzZGV2LmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9wcm9jLmMgYi9uZXQvaXB2NC9wcm9jLmMKaW5kZXggMGQ3ZGM2Ni4uMzlkNDlkYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvYy5jCisrKyBiL25ldC9pcHY0L3Byb2MuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeW5jb29raWVzLmMgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKaW5kZXggYTM0ZTYwZS4uZTIwYmUzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwpAQCAtMTczLDEwICsxNzMsMTAgQEAKIAkJCQkJICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJCQkgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiB7Ci0Jc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBzb2NrICpjaGlsZDsKIAotCWNoaWxkID0gdHAtPmFmX3NwZWNpZmljLT5zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0KTsKKwljaGlsZCA9IGljc2stPmljc2tfYWZfb3BzLT5zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0KTsKIAlpZiAoY2hpbGQpCiAJCWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBjaGlsZCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAwMTQ0NGEwLi4xNjk4NGQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lnbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L3NubXAuaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgpAQCAtMjIsNiArMjMsNyBAQAogZXh0ZXJuIGludCBzeXNjdGxfaXBfbm9ubG9jYWxfYmluZDsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0YXRpYyBpbnQgemVybzsKIHN0YXRpYyBpbnQgdGNwX3JldHIxX21heCA9IDI1NTsgCiBzdGF0aWMgaW50IGlwX2xvY2FsX3BvcnRfcmFuZ2VfbWluW10gPSB7IDEsIDEgfTsKIHN0YXRpYyBpbnQgaXBfbG9jYWxfcG9ydF9yYW5nZV9tYXhbXSA9IHsgNjU1MzUsIDY1NTM1IH07CkBAIC02MTQsNiArNjE2LDE1IEBACiAJCS5zdHJhdGVneQk9ICZzeXNjdGxfamlmZmllcwogCX0sCiAJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9JUEZSQUdfTUFYX0RJU1QsCisJCS5wcm9jbmFtZQk9ICJpcGZyYWdfbWF4X2Rpc3QiLAorCQkuZGF0YQkJPSAmc3lzY3RsX2lwZnJhZ19tYXhfZGlzdCwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybworCX0sCisJewogCQkuY3RsX25hbWUJPSBORVRfVENQX05PX01FVFJJQ1NfU0FWRSwKIAkJLnByb2NuYW1lCT0gInRjcF9ub19tZXRyaWNzX3NhdmUiLAogCQkuZGF0YQkJPSAmc3lzY3RsX3RjcF9ub21ldHJpY3Nfc2F2ZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggZWY5OGIxNC4uMDBhYTgwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTE2OTYsOCArMTY5Niw4IEBACiAJaW50IGVyciA9IDA7CiAKIAlpZiAobGV2ZWwgIT0gU09MX1RDUCkKLQkJcmV0dXJuIHRwLT5hZl9zcGVjaWZpYy0+c2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCi0JCQkJCQkgICBvcHR2YWwsIG9wdGxlbik7CisJCXJldHVybiBpY3NrLT5pY3NrX2FmX29wcy0+c2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCisJCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuKTsKIAogCS8qIFRoaXMgaXMgYSBzdHJpbmcgdmFsdWUgYWxsIHRoZSBvdGhlcnMgYXJlIGludCdzICovCiAJaWYgKG9wdG5hbWUgPT0gVENQX0NPTkdFU1RJT04pIHsKQEAgLTE5MTQsNyArMTkxNCw3IEBACiAJaW5mby0+dGNwaV9sYXN0X2RhdGFfcmVjdiA9IGppZmZpZXNfdG9fbXNlY3Mobm93IC0gaWNzay0+aWNza19hY2subHJjdnRpbWUpOwogCWluZm8tPnRjcGlfbGFzdF9hY2tfcmVjdiA9IGppZmZpZXNfdG9fbXNlY3Mobm93IC0gdHAtPnJjdl90c3RhbXApOwogCi0JaW5mby0+dGNwaV9wbXR1ID0gdHAtPnBtdHVfY29va2llOworCWluZm8tPnRjcGlfcG10dSA9IGljc2stPmljc2tfcG10dV9jb29raWU7CiAJaW5mby0+dGNwaV9yY3Zfc3N0aHJlc2ggPSB0cC0+cmN2X3NzdGhyZXNoOwogCWluZm8tPnRjcGlfcnR0ID0gamlmZmllc190b191c2Vjcyh0cC0+c3J0dCk+PjM7CiAJaW5mby0+dGNwaV9ydHR2YXIgPSBqaWZmaWVzX3RvX3VzZWNzKHRwLT5tZGV2KT4+MjsKQEAgLTE5MzksOCArMTkzOSw4IEBACiAJaW50IHZhbCwgbGVuOwogCiAJaWYgKGxldmVsICE9IFNPTF9UQ1ApCi0JCXJldHVybiB0cC0+YWZfc3BlY2lmaWMtPmdldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAotCQkJCQkJICAgb3B0dmFsLCBvcHRsZW4pOworCQlyZXR1cm4gaWNzay0+aWNza19hZl9vcHMtPmdldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkJICAgICBvcHR2YWwsIG9wdGxlbik7CiAKIAlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iaWMuYyBiL25ldC9pcHY0L3RjcF9iaWMuYwppbmRleCAxZDBjZDg2Li4wMzVmMjA5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2JpYy5jCkBAIC0zMCw4ICszMCw2IEBACiBzdGF0aWMgaW50IG1heF9pbmNyZW1lbnQgPSAxNjsKIHN0YXRpYyBpbnQgbG93X3dpbmRvdyA9IDE0Owogc3RhdGljIGludCBiZXRhID0gODE5OwkJLyogPSA4MTkvMTAyNCAoQklDVENQX0JFVEFfU0NBTEUpICovCi1zdGF0aWMgaW50IGxvd191dGlsaXphdGlvbl90aHJlc2hvbGQgPSAxNTM7Ci1zdGF0aWMgaW50IGxvd191dGlsaXphdGlvbl9wZXJpb2QgPSAyOwogc3RhdGljIGludCBpbml0aWFsX3NzdGhyZXNoID0gMTAwOwogc3RhdGljIGludCBzbW9vdGhfcGFydCA9IDIwOwogCkBAIC00MywxMCArNDEsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhsb3dfd2luZG93LCAibG93ZXIgYm91bmQgb24gY29uZ2VzdGlvbiB3aW5kb3cgKGZvciBUQ1AgZnJpZW5kbGluZXNzKSIpOwogbW9kdWxlX3BhcmFtKGJldGEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJldGEsICJiZXRhIGZvciBtdWx0aXBsaWNhdGl2ZSBpbmNyZWFzZSIpOwotbW9kdWxlX3BhcmFtKGxvd191dGlsaXphdGlvbl90aHJlc2hvbGQsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxvd191dGlsaXphdGlvbl90aHJlc2hvbGQsICJwZXJjZW50IChzY2FsZWQgYnkgMTAyNCkgZm9yIGxvdyB1dGlsaXphdGlvbiBtb2RlIik7Ci1tb2R1bGVfcGFyYW0obG93X3V0aWxpemF0aW9uX3BlcmlvZCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobG93X3V0aWxpemF0aW9uX3BlcmlvZCwgImlmIGF2ZXJhZ2UgZGVsYXkgZXhjZWVkcyB0aGVuIGdvdG8gdG8gbG93IHV0aWxpemF0aW9uIG1vZGUgKHNlY29uZHMpIik7CiBtb2R1bGVfcGFyYW0oaW5pdGlhbF9zc3RocmVzaCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5pdGlhbF9zc3RocmVzaCwgImluaXRpYWwgdmFsdWUgb2Ygc2xvdyBzdGFydCB0aHJlc2hvbGQiKTsKIG1vZHVsZV9wYXJhbShzbW9vdGhfcGFydCwgaW50LCAwNjQ0KTsKQEAgLTYwLDExICs1NCw2IEBACiAJdTMyCWxvc3NfY3duZDsJLyogY29uZ2VzdGlvbiB3aW5kb3cgYXQgbGFzdCBsb3NzICovCiAJdTMyCWxhc3RfY3duZDsJLyogdGhlIGxhc3Qgc25kX2N3bmQgKi8KIAl1MzIJbGFzdF90aW1lOwkvKiB0aW1lIHdoZW4gdXBkYXRlZCBsYXN0X2N3bmQgKi8KLQl1MzIJZGVsYXlfbWluOwkvKiBtaW4gZGVsYXkgKi8KLQl1MzIJZGVsYXlfbWF4OwkvKiBtYXggZGVsYXkgKi8KLQl1MzIJbGFzdF9kZWxheTsKLQl1OAlsb3dfdXRpbGl6YXRpb247LyogMDogaGlnaDsgMTogbG93ICovCi0JdTMyCWxvd191dGlsaXphdGlvbl9zdGFydDsJLyogc3RhcnRpbmcgdGltZSBvZiBsb3cgdXRpbGl6YXRpb24gZGV0ZWN0aW9uKi8KIAl1MzIJZXBvY2hfc3RhcnQ7CS8qIGJlZ2lubmluZyBvZiBhbiBlcG9jaCAqLwogI2RlZmluZSBBQ0tfUkFUSU9fU0hJRlQJNAogCXUzMglkZWxheWVkX2FjazsJLyogZXN0aW1hdGUgdGhlIHJhdGlvIG9mIFBhY2tldHMvQUNLcyA8PCA0ICovCkBAIC03NywxMSArNjYsNiBAQAogCWNhLT5sb3NzX2N3bmQgPSAwOwogCWNhLT5sYXN0X2N3bmQgPSAwOwogCWNhLT5sYXN0X3RpbWUgPSAwOwotCWNhLT5kZWxheV9taW4gPSAwOwotCWNhLT5kZWxheV9tYXggPSAwOwotCWNhLT5sYXN0X2RlbGF5ID0gMDsKLQljYS0+bG93X3V0aWxpemF0aW9uID0gMDsKLQljYS0+bG93X3V0aWxpemF0aW9uX3N0YXJ0ID0gMDsKIAljYS0+ZXBvY2hfc3RhcnQgPSAwOwogCWNhLT5kZWxheWVkX2FjayA9IDIgPDwgQUNLX1JBVElPX1NISUZUOwogfQpAQCAtMTQzLDggKzEyNyw3IEBACiAJfQogCiAJLyogaWYgaW4gc2xvdyBzdGFydCBvciBsaW5rIHV0aWxpemF0aW9uIGlzIHZlcnkgbG93ICovCi0JaWYgKCBjYS0+bG9zc19jd25kID09IDAgfHwKLQkgICAgIChjd25kID4gY2EtPmxvc3NfY3duZCAmJiBjYS0+bG93X3V0aWxpemF0aW9uKSkgeworCWlmIChjYS0+bG9zc19jd25kID09IDApIHsKIAkJaWYgKGNhLT5jbnQgPiAyMCkgLyogaW5jcmVhc2UgY3duZCA1JSBwZXIgUlRUICovCiAJCQljYS0+Y250ID0gMjA7CiAJfQpAQCAtMTU0LDY5ICsxMzcsMTIgQEAKIAkJY2EtPmNudCA9IDE7CiB9CiAKLQotLyogRGV0ZWN0IGxvdyB1dGlsaXphdGlvbiBpbiBjb25nZXN0aW9uIGF2b2lkYW5jZSAqLwotc3RhdGljIGlubGluZSB2b2lkIGJpY3RjcF9sb3dfdXRpbGl6YXRpb24oc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZykKLXsKLQljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlzdHJ1Y3QgYmljdGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKLQl1MzIgZGlzdCwgZGVsYXk7Ci0KLQkvKiBObyB0aW1lIHN0YW1wICovCi0JaWYgKCEodHAtPnJ4X29wdC5zYXdfdHN0YW1wICYmIHRwLT5yeF9vcHQucmN2X3RzZWNyKSB8fAotCSAgICAgLyogRGlzY2FyZCBkZWxheSBzYW1wbGVzIHJpZ2h0IGFmdGVyIGZhc3QgcmVjb3ZlcnkgKi8KLQkgICAgIHRjcF90aW1lX3N0YW1wIDwgY2EtPmVwb2NoX3N0YXJ0ICsgSFogfHwKLQkgICAgIC8qIHRoaXMgZGVsYXkgc2FtcGxlcyBtYXkgbm90IGJlIGFjY3VyYXRlICovCi0JICAgICBmbGFnID09IDApIHsKLQkJY2EtPmxhc3RfZGVsYXkgPSAwOwotCQlnb3RvIG5vdGxvdzsKLQl9Ci0KLQlkZWxheSA9IGNhLT5sYXN0X2RlbGF5PDwzOwkvKiB1c2UgdGhlIHNhbWUgc2NhbGUgYXMgdHAtPnNydHQqLwotCWNhLT5sYXN0X2RlbGF5ID0gdGNwX3RpbWVfc3RhbXAgLSB0cC0+cnhfb3B0LnJjdl90c2VjcjsKLQlpZiAoZGVsYXkgPT0gMCkgCQkvKiBubyBwcmV2aW91cyBkZWxheSBzYW1wbGUgKi8KLQkJZ290byBub3Rsb3c7Ci0KLQkvKiBmaXJzdCB0aW1lIGNhbGwgb3IgbGluayBkZWxheSBkZWNyZWFzZXMgKi8KLQlpZiAoY2EtPmRlbGF5X21pbiA9PSAwIHx8IGNhLT5kZWxheV9taW4gPiBkZWxheSkgewotCQljYS0+ZGVsYXlfbWluID0gY2EtPmRlbGF5X21heCA9IGRlbGF5OwotCQlnb3RvIG5vdGxvdzsKLQl9Ci0KLQlpZiAoY2EtPmRlbGF5X21heCA8IGRlbGF5KQotCQljYS0+ZGVsYXlfbWF4ID0gZGVsYXk7Ci0KLQkvKiB1dGlsaXphdGlvbiBpcyBsb3csIGlmIGF2ZyBkZWxheSA8IGRpc3QqdGhyZXNob2xkCi0JICAgZm9yIGNoZWNraW5nX3BlcmlvZCB0aW1lICovCi0JZGlzdCA9IGNhLT5kZWxheV9tYXggLSBjYS0+ZGVsYXlfbWluOwotCWlmIChkaXN0IDw9IGNhLT5kZWxheV9taW4+PjYgfHwKLQkgICAgdHAtPnNydHQgLSBjYS0+ZGVsYXlfbWluID49ICAoZGlzdCpsb3dfdXRpbGl6YXRpb25fdGhyZXNob2xkKT4+MTApCi0JCWdvdG8gbm90bG93OwotCi0JaWYgKGNhLT5sb3dfdXRpbGl6YXRpb25fc3RhcnQgPT0gMCkgewotCQljYS0+bG93X3V0aWxpemF0aW9uID0gMDsKLQkJY2EtPmxvd191dGlsaXphdGlvbl9zdGFydCA9IHRjcF90aW1lX3N0YW1wOwotCX0gZWxzZSBpZiAoKHMzMikodGNwX3RpbWVfc3RhbXAgLSBjYS0+bG93X3V0aWxpemF0aW9uX3N0YXJ0KQotCQkJPiBsb3dfdXRpbGl6YXRpb25fcGVyaW9kKkhaKSB7Ci0JCWNhLT5sb3dfdXRpbGl6YXRpb24gPSAxOwotCX0KLQotCXJldHVybjsKLQotIG5vdGxvdzoKLQljYS0+bG93X3V0aWxpemF0aW9uID0gMDsKLQljYS0+bG93X3V0aWxpemF0aW9uX3N0YXJ0ID0gMDsKLQotfQotCiBzdGF0aWMgdm9pZCBiaWN0Y3BfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssCiAJCQkgICAgICB1MzIgc2VxX3J0dCwgdTMyIGluX2ZsaWdodCwgaW50IGRhdGFfYWNrZWQpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGJpY3RjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CiAKLQliaWN0Y3BfbG93X3V0aWxpemF0aW9uKHNrLCBkYXRhX2Fja2VkKTsKLQogCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKIAkJcmV0dXJuOwogCkBAIC0yNDksMTEgKzE3NSw2IEBACiAKIAljYS0+ZXBvY2hfc3RhcnQgPSAwOwkvKiBlbmQgb2YgZXBvY2ggKi8KIAotCS8qIGluIGNhc2Ugb2Ygd3JvbmcgZGVsYXlfbWF4Ki8KLQlpZiAoY2EtPmRlbGF5X21pbiA+IDAgJiYgY2EtPmRlbGF5X21heCA+IGNhLT5kZWxheV9taW4pCi0JCWNhLT5kZWxheV9tYXggPSBjYS0+ZGVsYXlfbWluCi0JCQkrICgoY2EtPmRlbGF5X21heCAtIGNhLT5kZWxheV9taW4pKiA5MCkgLyAxMDA7Ci0KIAkvKiBXbWF4IGFuZCBmYXN0IGNvbnZlcmdlbmNlICovCiAJaWYgKHRwLT5zbmRfY3duZCA8IGNhLT5sYXN0X21heF9jd25kICYmIGZhc3RfY29udmVyZ2VuY2UpCiAJCWNhLT5sYXN0X21heF9jd25kID0gKHRwLT5zbmRfY3duZCAqIChCSUNUQ1BfQkVUQV9TQ0FMRSArIGJldGEpKQpAQCAtMjg5LDE0ICsyMTAsMTQgQEAKIAkJYmljdGNwX3Jlc2V0KGluZXRfY3NrX2NhKHNrKSk7CiB9CiAKLS8qIFRyYWNrIGRlbGF5ZWQgYWNrbm93bGVkZ2VtZW50IHJhdGlvIHVzaW5nIHNsaWRpbmcgd2luZG93CisvKiBUcmFjayBkZWxheWVkIGFja25vd2xlZGdtZW50IHJhdGlvIHVzaW5nIHNsaWRpbmcgd2luZG93CiAgKiByYXRpbyA9ICgxNSpyYXRpbyArIHNhbXBsZSkgLyAxNgogICovCiBzdGF0aWMgdm9pZCBiaWN0Y3BfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgY250KQogewogCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAotCWlmIChjbnQgPiAwICYmIAlpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9PcGVuKSB7CisJaWYgKGNudCA+IDAgJiYgaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfT3BlbikgewogCQlzdHJ1Y3QgYmljdGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKIAkJY250IC09IGNhLT5kZWxheWVkX2FjayA+PiBBQ0tfUkFUSU9fU0hJRlQ7CiAJCWNhLT5kZWxheWVkX2FjayArPSBjbnQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCBjN2NjNjJjLi5lNjg4YzY4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTE3NCw2ICsxNzQsMzQgQEAKIAlyZXR1cm4gZXJyOwogfQogCisKKy8qCisgKiBMaW5lYXIgaW5jcmVhc2UgZHVyaW5nIHNsb3cgc3RhcnQKKyAqLwordm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCWlmIChzeXNjdGxfdGNwX2FiYykgeworCQkvKiBSRkMzNDY1OiBTbG93IFN0YXJ0CisJCSAqIFRDUCBzZW5kZXIgU0hPVUxEIGluY3JlYXNlIGN3bmQgYnkgdGhlIG51bWJlciBvZgorCQkgKiBwcmV2aW91c2x5IHVuYWNrbm93bGVkZ2VkIGJ5dGVzIEFDS2VkIGJ5IGVhY2ggaW5jb21pbmcKKwkJICogYWNrbm93bGVkZ21lbnQsIHByb3ZpZGVkIHRoZSBpbmNyZWFzZSBpcyBub3QgbW9yZSB0aGFuIEwKKwkJICovCisJCWlmICh0cC0+Ynl0ZXNfYWNrZWQgPCB0cC0+bXNzX2NhY2hlKQorCQkJcmV0dXJuOworCisJCS8qIFdlIE1BWSBpbmNyZWFzZSBieSAyIGlmIGRpc2NvdmVyZWQgZGVsYXllZCBhY2sgKi8KKwkJaWYgKHN5c2N0bF90Y3BfYWJjID4gMSAmJiB0cC0+Ynl0ZXNfYWNrZWQgPiAyKnRwLT5tc3NfY2FjaGUpIHsKKwkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJdHAtPnNuZF9jd25kKys7CisJCX0KKwl9CisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKKworCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCXRwLT5zbmRfY3duZCsrOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Nsb3dfc3RhcnQpOworCiAvKgogICogVENQIFJlbm8gY29uZ2VzdGlvbiBjb250cm9sCiAgKiBUaGlzIGlzIHNwZWNpYWwgY2FzZSB1c2VkIGZvciBmYWxsYmFjayBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2N1YmljLmMgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWE0OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTAsMCArMSw0MTEgQEAKKy8qCisgKiBUQ1AgQ1VCSUM6IEJpbmFyeSBJbmNyZWFzZSBDb25nZXN0aW9uIGNvbnRyb2wgZm9yIFRDUCB2Mi4wCisgKgorICogVGhpcyBpcyBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBDVUJJQyBUQ1AgaW4KKyAqIEluam9uZyBSaGVlLCBMaXNvbmcgWHUuCisgKiAgIkNVQklDOiBBIE5ldyBUQ1AtRnJpZW5kbHkgSGlnaC1TcGVlZCBUQ1AgVmFyaWFudAorICogIGluIFBGTERuZXQgMjAwNQorICogQXZhaWxhYmxlIGZyb206CisgKiAgaHR0cDovL3d3dy5jc2MubmNzdS5lZHUvZmFjdWx0eS9yaGVlL2V4cG9ydC9iaXRjcC9jdWJpYy1wYXBlci5wZGYKKyAqCisgKiBVbmxlc3MgQ1VCSUMgaXMgZW5hYmxlZCBhbmQgY29uZ2VzdGlvbiB3aW5kb3cgaXMgbGFyZ2UKKyAqIHRoaXMgYmVoYXZlcyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgUmVuby4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNkZWZpbmUgQklDVENQX0JFVEFfU0NBTEUgICAgMTAyNAkvKiBTY2FsZSBmYWN0b3IgYmV0YSBjYWxjdWxhdGlvbgorCQkJCQkgKiBtYXhfY3duZCA9IHNuZF9jd25kICogYmV0YQorCQkJCQkgKi8KKyNkZWZpbmUgQklDVENQX0IJCTQJIC8qCisJCQkJCSAgKiBJbiBiaW5hcnkgc2VhcmNoLAorCQkJCQkgICogZ28gdG8gcG9pbnQgKG1heCttaW4pL04KKwkJCQkJICAqLworI2RlZmluZQlCSUNUQ1BfSFoJCTEwCS8qIEJJQyBIWiAyXjEwID0gMTAyNCAqLworCitzdGF0aWMgaW50IGZhc3RfY29udmVyZ2VuY2UgPSAxOworc3RhdGljIGludCBtYXhfaW5jcmVtZW50ID0gMTY7CitzdGF0aWMgaW50IGJldGEgPSA4MTk7CQkvKiA9IDgxOS8xMDI0IChCSUNUQ1BfQkVUQV9TQ0FMRSkgKi8KK3N0YXRpYyBpbnQgaW5pdGlhbF9zc3RocmVzaCA9IDEwMDsKK3N0YXRpYyBpbnQgYmljX3NjYWxlID0gNDE7CitzdGF0aWMgaW50IHRjcF9mcmllbmRsaW5lc3MgPSAxOworCitzdGF0aWMgdTMyIGN1YmVfcnR0X3NjYWxlOworc3RhdGljIHUzMiBiZXRhX3NjYWxlOworc3RhdGljIHU2NCBjdWJlX2ZhY3RvcjsKKworLyogTm90ZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHVzZWQgZm9yIHByZWNvbXB1dGluZyBzY2FsZSBmYWN0b3JzIGFyZSByZWFkLW9ubHkgKi8KK21vZHVsZV9wYXJhbShmYXN0X2NvbnZlcmdlbmNlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmYXN0X2NvbnZlcmdlbmNlLCAidHVybiBvbi9vZmYgZmFzdCBjb252ZXJnZW5jZSIpOworbW9kdWxlX3BhcmFtKG1heF9pbmNyZW1lbnQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9pbmNyZW1lbnQsICJMaW1pdCBvbiBpbmNyZW1lbnQgYWxsb3dlZCBkdXJpbmcgYmluYXJ5IHNlYXJjaCIpOworbW9kdWxlX3BhcmFtKGJldGEsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGJldGEsICJiZXRhIGZvciBtdWx0aXBsaWNhdGl2ZSBpbmNyZWFzZSIpOworbW9kdWxlX3BhcmFtKGluaXRpYWxfc3N0aHJlc2gsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRpYWxfc3N0aHJlc2gsICJpbml0aWFsIHZhbHVlIG9mIHNsb3cgc3RhcnQgdGhyZXNob2xkIik7Cittb2R1bGVfcGFyYW0oYmljX3NjYWxlLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhiaWNfc2NhbGUsICJzY2FsZSAoc2NhbGVkIGJ5IDEwMjQpIHZhbHVlIGZvciBiaWMgZnVuY3Rpb24gKGJpY19zY2FsZS8xMDI0KSIpOworbW9kdWxlX3BhcmFtKHRjcF9mcmllbmRsaW5lc3MsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRjcF9mcmllbmRsaW5lc3MsICJ0dXJuIG9uL29mZiB0Y3AgZnJpZW5kbGluZXNzIik7CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworLyogQklDIFRDUCBQYXJhbWV0ZXJzICovCitzdHJ1Y3QgYmljdGNwIHsKKwl1MzIJY250OwkJLyogaW5jcmVhc2UgY3duZCBieSAxIGFmdGVyIEFDS3MgKi8KKwl1MzIgCWxhc3RfbWF4X2N3bmQ7CS8qIGxhc3QgbWF4aW11bSBzbmRfY3duZCAqLworCXUzMglsb3NzX2N3bmQ7CS8qIGNvbmdlc3Rpb24gd2luZG93IGF0IGxhc3QgbG9zcyAqLworCXUzMglsYXN0X2N3bmQ7CS8qIHRoZSBsYXN0IHNuZF9jd25kICovCisJdTMyCWxhc3RfdGltZTsJLyogdGltZSB3aGVuIHVwZGF0ZWQgbGFzdF9jd25kICovCisJdTMyCWJpY19vcmlnaW5fcG9pbnQ7Lyogb3JpZ2luIHBvaW50IG9mIGJpYyBmdW5jdGlvbiAqLworCXUzMgliaWNfSzsJCS8qIHRpbWUgdG8gb3JpZ2luIHBvaW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBlcG9jaCAqLworCXUzMglkZWxheV9taW47CS8qIG1pbiBkZWxheSAqLworCXUzMgllcG9jaF9zdGFydDsJLyogYmVnaW5uaW5nIG9mIGFuIGVwb2NoICovCisJdTMyCWFja19jbnQ7CS8qIG51bWJlciBvZiBhY2tzICovCisJdTMyCXRjcF9jd25kOwkvKiBlc3RpbWF0ZWQgdGNwIGN3bmQgKi8KKyNkZWZpbmUgQUNLX1JBVElPX1NISUZUCTQKKwl1MzIJZGVsYXllZF9hY2s7CS8qIGVzdGltYXRlIHRoZSByYXRpbyBvZiBQYWNrZXRzL0FDS3MgPDwgNCAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGJpY3RjcF9yZXNldChzdHJ1Y3QgYmljdGNwICpjYSkKK3sKKwljYS0+Y250ID0gMDsKKwljYS0+bGFzdF9tYXhfY3duZCA9IDA7CisJY2EtPmxvc3NfY3duZCA9IDA7CisJY2EtPmxhc3RfY3duZCA9IDA7CisJY2EtPmxhc3RfdGltZSA9IDA7CisJY2EtPmJpY19vcmlnaW5fcG9pbnQgPSAwOworCWNhLT5iaWNfSyA9IDA7CisJY2EtPmRlbGF5X21pbiA9IDA7CisJY2EtPmVwb2NoX3N0YXJ0ID0gMDsKKwljYS0+ZGVsYXllZF9hY2sgPSAyIDw8IEFDS19SQVRJT19TSElGVDsKKwljYS0+YWNrX2NudCA9IDA7CisJY2EtPnRjcF9jd25kID0gMDsKK30KKworc3RhdGljIHZvaWQgYmljdGNwX2luaXQoc3RydWN0IHNvY2sgKnNrKQoreworCWJpY3RjcF9yZXNldChpbmV0X2Nza19jYShzaykpOworCWlmIChpbml0aWFsX3NzdGhyZXNoKQorCQl0Y3Bfc2soc2spLT5zbmRfc3N0aHJlc2ggPSBpbml0aWFsX3NzdGhyZXNoOworfQorCisvKiA2NGJpdCBkaXZpc29yLCBkaXZpZGVuZCBhbmQgcmVzdWx0LiBkeW5hbWljIHByZWNpc2lvbiAqLworc3RhdGljIGlubGluZSB1X2ludDY0X3QgZGl2NjRfNjQodV9pbnQ2NF90IGRpdmlkZW5kLCB1X2ludDY0X3QgZGl2aXNvcikKK3sKKwl1X2ludDMyX3QgZCA9IGRpdmlzb3I7CisKKwlpZiAoZGl2aXNvciA+IDB4ZmZmZmZmZmZVTEwpIHsKKwkJdW5zaWduZWQgaW50IHNoaWZ0ID0gZmxzKGRpdmlzb3IgPj4gMzIpOworCisJCWQgPSBkaXZpc29yID4+IHNoaWZ0OworCQlkaXZpZGVuZCA+Pj0gc2hpZnQ7CisJfQorCisJLyogYXZvaWQgNjQgYml0IGRpdmlzaW9uIGlmIHBvc3NpYmxlICovCisJaWYgKGRpdmlkZW5kID4+IDMyKQorCQlkb19kaXYoZGl2aWRlbmQsIGQpOworCWVsc2UKKwkJZGl2aWRlbmQgPSAodWludDMyX3QpIGRpdmlkZW5kIC8gZDsKKworCXJldHVybiBkaXZpZGVuZDsKK30KKworLyoKKyAqIGNhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdCBvZiB4IHVzaW5nIE5ld3Rvbi1SYXBoc29uCisgKi8KK3N0YXRpYyB1MzIgY3ViaWNfcm9vdCh1NjQgYSkKK3sKKwl1MzIgeCwgeDE7CisKKwkvKiBJbml0aWFsIGVzdGltYXRlIGlzIGJhc2VkIG9uOgorCSAqIGNicnQoeCkgPSBleHAobG9nKHgpIC8gMykKKwkgKi8KKwl4ID0gMXUgPDwgKGZsczY0KGEpLzMpOworCisJLyoKKwkgKiBJdGVyYXRpb24gYmFzZWQgb246CisJICogICAgICAgICAgICAgICAgICAgICAgICAgMgorCSAqIHggICAgPSAoIDIgKiB4ICArICBhIC8geCAgKSAvIDMKKwkgKiAgaysxICAgICAgICAgIGsgICAgICAgICBrCisJICovCisJZG8geworCQl4MSA9IHg7CisJCXggPSAoMiAqIHggKyAodWludDMyX3QpIGRpdjY0XzY0KGEsIHgqeCkpIC8gMzsKKwl9IHdoaWxlIChhYnMoeDEgLSB4KSA+IDEpOworCisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBDb21wdXRlIGNvbmdlc3Rpb24gd2luZG93IHRvIHVzZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJpY3RjcF91cGRhdGUoc3RydWN0IGJpY3RjcCAqY2EsIHUzMiBjd25kKQoreworCXU2NCBvZmZzOworCXUzMiBkZWx0YSwgdCwgYmljX3RhcmdldCwgbWluX2NudCwgbWF4X2NudDsKKworCWNhLT5hY2tfY250Kys7CS8qIGNvdW50IHRoZSBudW1iZXIgb2YgQUNLcyAqLworCisJaWYgKGNhLT5sYXN0X2N3bmQgPT0gY3duZCAmJgorCSAgICAoczMyKSh0Y3BfdGltZV9zdGFtcCAtIGNhLT5sYXN0X3RpbWUpIDw9IEhaIC8gMzIpCisJCXJldHVybjsKKworCWNhLT5sYXN0X2N3bmQgPSBjd25kOworCWNhLT5sYXN0X3RpbWUgPSB0Y3BfdGltZV9zdGFtcDsKKworCWlmIChjYS0+ZXBvY2hfc3RhcnQgPT0gMCkgeworCQljYS0+ZXBvY2hfc3RhcnQgPSB0Y3BfdGltZV9zdGFtcDsJLyogcmVjb3JkIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXBvY2ggKi8KKwkJY2EtPmFja19jbnQgPSAxOwkJCS8qIHN0YXJ0IGNvdW50aW5nICovCisJCWNhLT50Y3BfY3duZCA9IGN3bmQ7CQkJLyogc3luIHdpdGggY3ViaWMgKi8KKworCQlpZiAoY2EtPmxhc3RfbWF4X2N3bmQgPD0gY3duZCkgeworCQkJY2EtPmJpY19LID0gMDsKKwkJCWNhLT5iaWNfb3JpZ2luX3BvaW50ID0gY3duZDsKKwkJfSBlbHNlIHsKKwkJCS8qIENvbXB1dGUgbmV3IEsgYmFzZWQgb24KKwkJCSAqICh3bWF4LWN3bmQpICogKHNydHQ+PjMgLyBIWikgLyBjICogMl4oMypiaWN0Y3BfSFopCisJCQkgKi8KKwkJCWNhLT5iaWNfSyA9IGN1YmljX3Jvb3QoY3ViZV9mYWN0b3IKKwkJCQkJICAgICAgICogKGNhLT5sYXN0X21heF9jd25kIC0gY3duZCkpOworCQkJY2EtPmJpY19vcmlnaW5fcG9pbnQgPSBjYS0+bGFzdF9tYXhfY3duZDsKKwkJfQorCX0KKworICAgICAgICAvKiBjdWJpYyBmdW5jdGlvbiAtIGNhbGMqLworICAgICAgICAvKiBjYWxjdWxhdGUgYyAqIHRpbWVeMyAvIHJ0dCwKKyAgICAgICAgICogIHdoaWxlIGNvbnNpZGVyaW5nIG92ZXJmbG93IGluIGNhbGN1bGF0aW9uIG9mIHRpbWVeMworCSAqIChzbyB0aW1lXjMgaXMgZG9uZSBieSB1c2luZyA2NCBiaXQpCisJICogYW5kIHdpdGhvdXQgdGhlIHN1cHBvcnQgb2YgZGl2aXNpb24gb2YgNjRiaXQgbnVtYmVycworCSAqIChzbyBhbGwgZGl2aXNpb25zIGFyZSBkb25lIGJ5IHVzaW5nIDMyIGJpdCkKKyAgICAgICAgICogIGFsc28gTk9URSB0aGUgdW5pdCBvZiB0aG9zZSB2ZXJpYWJsZXMKKyAgICAgICAgICoJICB0aW1lICA9ICh0IC0gSykgLyAyXmJpY3RjcF9IWgorICAgICAgICAgKgkgIGMgPSBiaWNfc2NhbGUgPj4gMTAKKwkgKiBydHQgID0gKHNydHQgPj4gMykgLyBIWgorCSAqICEhISBUaGUgZm9sbG93aW5nIGNvZGUgZG9lcyBub3QgaGF2ZSBvdmVyZmxvdyBwcm9ibGVtcywKKwkgKiBpZiB0aGUgY3duZCA8IDEgbWlsbGlvbiBwYWNrZXRzICEhIQorICAgICAgICAgKi8KKworCS8qIGNoYW5nZSB0aGUgdW5pdCBmcm9tIEhaIHRvIGJpY3RjcF9IWiAqLworICAgICAgICB0ID0gKCh0Y3BfdGltZV9zdGFtcCArIGNhLT5kZWxheV9taW4gLSBjYS0+ZXBvY2hfc3RhcnQpCisJICAgICA8PCBCSUNUQ1BfSFopIC8gSFo7CisKKyAgICAgICAgaWYgKHQgPCBjYS0+YmljX0spCQkvKiB0IC0gSyAqLworCQlvZmZzID0gY2EtPmJpY19LIC0gdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9mZnMgPSB0IC0gY2EtPmJpY19LOworCisJLyogYy9ydHQgKiAodC1LKV4zICovCisJZGVsdGEgPSAoY3ViZV9ydHRfc2NhbGUgKiBvZmZzICogb2ZmcyAqIG9mZnMpID4+ICgxMCszKkJJQ1RDUF9IWik7CisgICAgICAgIGlmICh0IDwgY2EtPmJpY19LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCS8qIGJlbG93IG9yaWdpbiovCisgICAgICAgICAgICAgICAgYmljX3RhcmdldCA9IGNhLT5iaWNfb3JpZ2luX3BvaW50IC0gZGVsdGE7CisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJLyogYWJvdmUgb3JpZ2luKi8KKyAgICAgICAgICAgICAgICBiaWNfdGFyZ2V0ID0gY2EtPmJpY19vcmlnaW5fcG9pbnQgKyBkZWx0YTsKKworICAgICAgICAvKiBjdWJpYyBmdW5jdGlvbiAtIGNhbGMgYmljdGNwX2NudCovCisgICAgICAgIGlmIChiaWNfdGFyZ2V0ID4gY3duZCkgeworCQljYS0+Y250ID0gY3duZCAvIChiaWNfdGFyZ2V0IC0gY3duZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2EtPmNudCA9IDEwMCAqIGN3bmQ7ICAgICAgICAgICAgICAvKiB2ZXJ5IHNtYWxsIGluY3JlbWVudCovCisgICAgICAgIH0KKworCWlmIChjYS0+ZGVsYXlfbWluID4gMCkgeworCQkvKiBtYXggaW5jcmVtZW50ID0gU21heCAqIHJ0dCAvIDAuMSAgKi8KKwkJbWluX2NudCA9IChjd25kICogSFogKiA4KS8oMTAgKiBtYXhfaW5jcmVtZW50ICogY2EtPmRlbGF5X21pbik7CisJCWlmIChjYS0+Y250IDwgbWluX2NudCkKKwkJCWNhLT5jbnQgPSBtaW5fY250OworCX0KKworICAgICAgICAvKiBzbG93IHN0YXJ0IGFuZCBsb3cgdXRpbGl6YXRpb24gICovCisJaWYgKGNhLT5sb3NzX2N3bmQgPT0gMCkJCS8qIGNvdWxkIGJlIGFnZ3Jlc3NpdmUgaW4gc2xvdyBzdGFydCAqLworCQljYS0+Y250ID0gNTA7CisKKwkvKiBUQ1AgRnJpZW5kbHkgKi8KKwlpZiAodGNwX2ZyaWVuZGxpbmVzcykgeworCQl1MzIgc2NhbGUgPSBiZXRhX3NjYWxlOworCQlkZWx0YSA9IChjd25kICogc2NhbGUpID4+IDM7CisJICAgICAgICB3aGlsZSAoY2EtPmFja19jbnQgPiBkZWx0YSkgewkJLyogdXBkYXRlIHRjcCBjd25kICovCisJICAgICAgICAgICAgICAgIGNhLT5hY2tfY250IC09IGRlbHRhOworICAgICAgICAJICAgICAgICBjYS0+dGNwX2N3bmQrKzsKKwkJfQorCisJCWlmIChjYS0+dGNwX2N3bmQgPiBjd25kKXsJLyogaWYgYmljIGlzIHNsb3dlciB0aGFuIHRjcCAqLworCQkJZGVsdGEgPSBjYS0+dGNwX2N3bmQgLSBjd25kOworCQkJbWF4X2NudCA9IGN3bmQgLyBkZWx0YTsKKwkJCWlmIChjYS0+Y250ID4gbWF4X2NudCkKKwkJCQljYS0+Y250ID0gbWF4X2NudDsKKwkJfQorICAgICAgICB9CisKKwljYS0+Y250ID0gKGNhLT5jbnQgPDwgQUNLX1JBVElPX1NISUZUKSAvIGNhLT5kZWxheWVkX2FjazsKKwlpZiAoY2EtPmNudCA9PSAwKQkJCS8qIGNhbm5vdCBiZSB6ZXJvICovCisJCWNhLT5jbnQgPSAxOworfQorCisKKy8qIEtlZXAgdHJhY2sgb2YgbWluaW11bSBydHQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZWFzdXJlX2RlbGF5KHN0cnVjdCBzb2NrICpzaykKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlzdHJ1Y3QgYmljdGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKKwl1MzIgZGVsYXk7CisKKwkvKiBObyB0aW1lIHN0YW1wICovCisJaWYgKCEodHAtPnJ4X29wdC5zYXdfdHN0YW1wICYmIHRwLT5yeF9vcHQucmN2X3RzZWNyKSB8fAorCSAgICAgLyogRGlzY2FyZCBkZWxheSBzYW1wbGVzIHJpZ2h0IGFmdGVyIGZhc3QgcmVjb3ZlcnkgKi8KKwkgICAgKHMzMikodGNwX3RpbWVfc3RhbXAgLSBjYS0+ZXBvY2hfc3RhcnQpIDwgSFopCisJCXJldHVybjsKKworCWRlbGF5ID0gdGNwX3RpbWVfc3RhbXAgLSB0cC0+cnhfb3B0LnJjdl90c2VjcjsKKwlpZiAoZGVsYXkgPT0gMCkKKwkJZGVsYXkgPSAxOworCisJLyogZmlyc3QgdGltZSBjYWxsIG9yIGxpbmsgZGVsYXkgZGVjcmVhc2VzICovCisJaWYgKGNhLT5kZWxheV9taW4gPT0gMCB8fCBjYS0+ZGVsYXlfbWluID4gZGVsYXkpCisJCWNhLT5kZWxheV9taW4gPSBkZWxheTsKK30KKworc3RhdGljIHZvaWQgYmljdGNwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLAorCQkJICAgICAgdTMyIHNlcV9ydHQsIHUzMiBpbl9mbGlnaHQsIGludCBkYXRhX2Fja2VkKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBiaWN0Y3AgKmNhID0gaW5ldF9jc2tfY2Eoc2spOworCisJaWYgKGRhdGFfYWNrZWQpCisJCW1lYXN1cmVfZGVsYXkoc2spOworCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQorCQlyZXR1cm47CisKKwlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKwllbHNlIHsKKwkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKKworCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgorCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZAorCQkgKi8KKwkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gY2EtPmNudCkgeworCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCQl0cC0+c25kX2N3bmQrKzsKKwkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOworCQl9IGVsc2UKKwkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwl9CisKK30KKworc3RhdGljIHUzMiBiaWN0Y3BfcmVjYWxjX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlzdHJ1Y3QgYmljdGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKKworCWNhLT5lcG9jaF9zdGFydCA9IDA7CS8qIGVuZCBvZiBlcG9jaCAqLworCisJLyogV21heCBhbmQgZmFzdCBjb252ZXJnZW5jZSAqLworCWlmICh0cC0+c25kX2N3bmQgPCBjYS0+bGFzdF9tYXhfY3duZCAmJiBmYXN0X2NvbnZlcmdlbmNlKQorCQljYS0+bGFzdF9tYXhfY3duZCA9ICh0cC0+c25kX2N3bmQgKiAoQklDVENQX0JFVEFfU0NBTEUgKyBiZXRhKSkKKwkJCS8gKDIgKiBCSUNUQ1BfQkVUQV9TQ0FMRSk7CisJZWxzZQorCQljYS0+bGFzdF9tYXhfY3duZCA9IHRwLT5zbmRfY3duZDsKKworCWNhLT5sb3NzX2N3bmQgPSB0cC0+c25kX2N3bmQ7CisKKwlyZXR1cm4gbWF4KCh0cC0+c25kX2N3bmQgKiBiZXRhKSAvIEJJQ1RDUF9CRVRBX1NDQUxFLCAyVSk7Cit9CisKK3N0YXRpYyB1MzIgYmljdGNwX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGJpY3RjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CisKKwlyZXR1cm4gbWF4KHRjcF9zayhzayktPnNuZF9jd25kLCBjYS0+bGFzdF9tYXhfY3duZCk7Cit9CisKK3N0YXRpYyB1MzIgYmljdGNwX21pbl9jd25kKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gdGNwX3NrKHNrKS0+c25kX3NzdGhyZXNoOworfQorCitzdGF0aWMgdm9pZCBiaWN0Y3Bfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpCit7CisJaWYgKG5ld19zdGF0ZSA9PSBUQ1BfQ0FfTG9zcykKKwkJYmljdGNwX3Jlc2V0KGluZXRfY3NrX2NhKHNrKSk7Cit9CisKKy8qIFRyYWNrIGRlbGF5ZWQgYWNrbm93bGVkZ21lbnQgcmF0aW8gdXNpbmcgc2xpZGluZyB3aW5kb3cKKyAqIHJhdGlvID0gKDE1KnJhdGlvICsgc2FtcGxlKSAvIDE2CisgKi8KK3N0YXRpYyB2b2lkIGJpY3RjcF9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBjbnQpCit7CisJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOworCisJaWYgKGNudCA+IDAgJiYgaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfT3BlbikgeworCQlzdHJ1Y3QgYmljdGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKKwkJY250IC09IGNhLT5kZWxheWVkX2FjayA+PiBBQ0tfUkFUSU9fU0hJRlQ7CisJCWNhLT5kZWxheWVkX2FjayArPSBjbnQ7CisJfQorfQorCisKK3N0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGN1YmljdGNwID0geworCS5pbml0CQk9IGJpY3RjcF9pbml0LAorCS5zc3RocmVzaAk9IGJpY3RjcF9yZWNhbGNfc3N0aHJlc2gsCisJLmNvbmdfYXZvaWQJPSBiaWN0Y3BfY29uZ19hdm9pZCwKKwkuc2V0X3N0YXRlCT0gYmljdGNwX3N0YXRlLAorCS51bmRvX2N3bmQJPSBiaWN0Y3BfdW5kb19jd25kLAorCS5taW5fY3duZAk9IGJpY3RjcF9taW5fY3duZCwKKwkucGt0c19hY2tlZCAgICAgPSBiaWN0Y3BfYWNrZWQsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJjdWJpYyIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjdWJpY3RjcF9yZWdpc3Rlcih2b2lkKQoreworCUJVR19PTihzaXplb2Yoc3RydWN0IGJpY3RjcCkgPiBJQ1NLX0NBX1BSSVZfU0laRSk7CisKKwkvKiBQcmVjb21wdXRlIGEgYnVuY2ggb2YgdGhlIHNjYWxpbmcgZmFjdG9ycyB0aGF0IGFyZSB1c2VkIHBlci1wYWNrZXQKKwkgKiBiYXNlZCBvbiBTUlRUIG9mIDEwMG1zCisJICovCisKKwliZXRhX3NjYWxlID0gOCooQklDVENQX0JFVEFfU0NBTEUrYmV0YSkvIDMgLyAoQklDVENQX0JFVEFfU0NBTEUgLSBiZXRhKTsKKworCWN1YmVfcnR0X3NjYWxlID0gKGJpY19zY2FsZSA8PCAzKSAvIDEwOwkvKiAxMDI0KmMvcnR0ICovCisKKwkvKiBjYWxjdWxhdGUgdGhlICJLIiBmb3IgKHdtYXgtY3duZCkgPSBjL3J0dCAqIEteMworCSAqICBzbyBLID0gY3ViaWNfcm9vdCggKHdtYXgtY3duZCkqcnR0L2MgKQorCSAqIHRoZSB1bml0IG9mIEsgaXMgYmljdGNwX0haPTJeMTAsIG5vdCBIWgorCSAqCisJICogIGMgPSBiaWNfc2NhbGUgPj4gMTAKKwkgKiAgcnR0ID0gMTAwbXMKKwkgKgorCSAqIHRoZSBmb2xsb3dpbmcgY29kZSBoYXMgYmVlbiBkZXNpZ25lZCBhbmQgdGVzdGVkIGZvcgorCSAqIGN3bmQgPCAxIG1pbGxpb24gcGFja2V0cworCSAqIFJUVCA8IDEwMCBzZWNvbmRzCisJICogSFogPCAxLDAwMCwwMCAgKGNvcnJlc3BvbmRpbmcgdG8gMTAgbmFuby1zZWNvbmQpCisJICovCisKKwkvKiAxL2MgKiAyXjIqYmljdGNwX0haICogc3J0dCAqLworCWN1YmVfZmFjdG9yID0gMXVsbCA8PCAoMTArMypCSUNUQ1BfSFopOyAvKiAyXjQwICovCisKKwkvKiBkaXZpZGUgYnkgYmljX3NjYWxlIGFuZCBieSBjb25zdGFudCBTcnR0ICgxMDBtcykgKi8KKwlkb19kaXYoY3ViZV9mYWN0b3IsIGJpY19zY2FsZSAqIDEwKTsKKworCXJldHVybiB0Y3BfcmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKCZjdWJpY3RjcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjdWJpY3RjcF91bnJlZ2lzdGVyKHZvaWQpCit7CisJdGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKCZjdWJpY3RjcCk7Cit9CisKK21vZHVsZV9pbml0KGN1YmljdGNwX3JlZ2lzdGVyKTsKK21vZHVsZV9leGl0KGN1YmljdGNwX3VucmVnaXN0ZXIpOworCitNT0RVTEVfQVVUSE9SKCJTYW5ndGFlIEhhLCBTdGVwaGVuIEhlbW1pbmdlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDVUJJQyBUQ1AiKTsKK01PRFVMRV9WRVJTSU9OKCIyLjAiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggYmYyZTIzMC4uMGE0NjEyMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTExNSw4ICsxMTUsOCBAQAogLyogQWRhcHQgdGhlIE1TUyB2YWx1ZSB1c2VkIHRvIG1ha2UgZGVsYXllZCBhY2sgZGVjaXNpb24gdG8gdGhlIAogICogcmVhbCB3b3JsZC4KICAqLyAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLAorCQkJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCWNvbnN0IHVuc2lnbmVkIGludCBsc3MgPSBpY3NrLT5pY3NrX2Fjay5sYXN0X3NlZ19zaXplOyAKQEAgLTI0Niw4ICsyNDYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2dyb3dfd2luZG93KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCwKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgdGNwX2dyb3dfd2luZG93KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCwKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIENoZWNrICMxICovCiAJaWYgKHRwLT5yY3Zfc3N0aHJlc2ggPCB0cC0+d2luZG93X2NsYW1wICYmCkBAIC0zNDEsNiArMzQxLDI2IEBACiAJCXRwLT5yY3Zfc3N0aHJlc2ggPSBtaW4odHAtPndpbmRvd19jbGFtcCwgMlUqdHAtPmFkdm1zcyk7CiB9CiAKKworLyogSW5pdGlhbGl6ZSBSQ1ZfTVNTIHZhbHVlLgorICogUkNWX01TUyBpcyBhbiBvdXIgZ3Vlc3MgYWJvdXQgTVNTIHVzZWQgYnkgdGhlIHBlZXIuCisgKiBXZSBoYXZlbid0IGFueSBkaXJlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1TUy4KKyAqIEl0J3MgYmV0dGVyIHRvIHVuZGVyZXN0aW1hdGUgdGhlIFJDVl9NU1MgcmF0aGVyIHRoYW4gb3ZlcmVzdGltYXRlLgorICogT3ZlcmVzdGltYXRpb25zIG1ha2UgdXMgQUNLaW5nIGxlc3MgZnJlcXVlbnRseSB0aGFuIG5lZWRlZC4KKyAqIFVuZGVyZXN0aW1hdGlvbnMgYXJlIG1vcmUgZWFzeSB0byBkZXRlY3QgYW5kIGZpeCBieSB0Y3BfbWVhc3VyZV9yY3ZfbXNzKCkuCisgKi8KK3ZvaWQgdGNwX2luaXRpYWxpemVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdW5zaWduZWQgaW50IGhpbnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRwLT5hZHZtc3MsIHRwLT5tc3NfY2FjaGUpOworCisJaGludCA9IG1pbihoaW50LCB0cC0+cmN2X3duZC8yKTsKKwloaW50ID0gbWluKGhpbnQsIFRDUF9NSU5fUkNWTVNTKTsKKwloaW50ID0gbWF4KGhpbnQsIFRDUF9NSU5fTVNTKTsKKworCWluZXRfY3NrKHNrKS0+aWNza19hY2sucmN2X21zcyA9IGhpbnQ7Cit9CisKIC8qIFJlY2VpdmVyICJhdXRvdHVuaW5nIiBjb2RlLgogICoKICAqIFRoZSBhbGdvcml0aG0gZm9yIFJUVCBlc3RpbWF0aW9uIHcvbyB0aW1lc3RhbXBzIGlzIGJhc2VkIG9uCkBAIC03MzUsNiArNzU1LDI3IEBACiAJcmV0dXJuIG1pbl90KF9fdTMyLCBjd25kLCB0cC0+c25kX2N3bmRfY2xhbXApOwogfQogCisvKiBTZXQgc2xvdyBzdGFydCB0aHJlc2hvbGQgYW5kIGN3bmQgbm90IGZhbGxpbmcgdG8gc2xvdyBzdGFydCAqLwordm9pZCB0Y3BfZW50ZXJfY3dyKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKworCXRwLT5wcmlvcl9zc3RocmVzaCA9IDA7CisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKKwlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2NhX3N0YXRlIDwgVENQX0NBX0NXUikgeworCQl0cC0+dW5kb19tYXJrZXIgPSAwOworCQl0cC0+c25kX3NzdGhyZXNoID0gaW5ldF9jc2soc2spLT5pY3NrX2NhX29wcy0+c3N0aHJlc2goc2spOworCQl0cC0+c25kX2N3bmQgPSBtaW4odHAtPnNuZF9jd25kLAorCQkJCSAgIHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkgKyAxVSk7CisJCXRwLT5zbmRfY3duZF9jbnQgPSAwOworCQl0cC0+aGlnaF9zZXEgPSB0cC0+c25kX254dDsKKwkJdHAtPnNuZF9jd25kX3N0YW1wID0gdGNwX3RpbWVfc3RhbXA7CisJCVRDUF9FQ05fcXVldWVfY3dyKHRwKTsKKworCQl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfQ1dSKTsKKwl9Cit9CisKIC8qIEluaXRpYWxpemUgbWV0cmljcyBvbiBzb2NrZXQuICovCiAKIHN0YXRpYyB2b2lkIHRjcF9pbml0X21ldHJpY3Moc3RydWN0IHNvY2sgKnNrKQpAQCAtMjA3MCw4ICsyMTExLDggQEAKIAkJdGNwX2Fja19ub190c3RhbXAoc2ssIHNlcV9ydHQsIGZsYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgcnR0LAotCQkJCSAgdTMyIGluX2ZsaWdodCwgaW50IGdvb2QpCitzdGF0aWMgdm9pZCB0Y3BfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBydHQsCisJCQkgICB1MzIgaW5fZmxpZ2h0LCBpbnQgZ29vZCkKIHsKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJaWNzay0+aWNza19jYV9vcHMtPmNvbmdfYXZvaWQoc2ssIGFjaywgcnR0LCBpbl9mbGlnaHQsIGdvb2QpOwpAQCAtMjA4Miw3ICsyMTIzLDcgQEAKICAqIFJGQzI5ODggcmVjb21tZW5kcyB0byByZXN0YXJ0IHRpbWVyIHRvIG5vdytydG8uCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9hY2tfcGFja2V0c19vdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQorc3RhdGljIHZvaWQgdGNwX2Fja19wYWNrZXRzX291dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7CiAJaWYgKCF0cC0+cGFja2V0c19vdXQpIHsKIAkJaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMpOwpAQCAtMjE0Nyw3ICsyMTg4LDcgQEAKIAlyZXR1cm4gYWNrZWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHRjcF91c3J0dChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHUzMiB0Y3BfdXNydHQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdGltZXZhbCB0diwgbm93OwogCkBAIC0yMzQyLDcgKzIzODMsNyBAQAogCiAJCQlpZiAobndpbiA+IHRwLT5tYXhfd2luZG93KSB7CiAJCQkJdHAtPm1heF93aW5kb3cgPSBud2luOwotCQkJCXRjcF9zeW5jX21zcyhzaywgdHAtPnBtdHVfY29va2llKTsKKwkJCQl0Y3Bfc3luY19tc3Moc2ssIGluZXRfY3NrKHNrKS0+aWNza19wbXR1X2Nvb2tpZSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0yNTgzLDggKzI2MjQsOCBAQAogLyogRmFzdCBwYXJzZSBvcHRpb25zLiBUaGlzIGhvcGVzIHRvIG9ubHkgc2VlIHRpbWVzdGFtcHMuCiAgKiBJZiBpdCBpcyB3cm9uZyBpdCBmYWxscyBiYWNrIG9uIHRjcF9wYXJzZV9vcHRpb25zKCkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRjcF9mYXN0X3BhcnNlX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjcGhkciAqdGgsCi0JCQkJCSBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQorc3RhdGljIGludCB0Y3BfZmFzdF9wYXJzZV9vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y3BoZHIgKnRoLAorCQkJCSAgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAlpZiAodGgtPmRvZmYgPT0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpPj4yKSB7CiAJCXRwLT5yeF9vcHQuc2F3X3RzdGFtcCA9IDA7CkBAIC0yODA0LDggKzI4NDUsNyBAQAogCX0KIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50Ci10Y3Bfc2Fja19leHRlbmQoc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzcCwgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCitzdGF0aWMgaW5saW5lIGludCB0Y3Bfc2Fja19leHRlbmQoc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzcCwgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCiB7CiAJaWYgKCFhZnRlcihzZXEsIHNwLT5lbmRfc2VxKSAmJiAhYWZ0ZXIoc3AtPnN0YXJ0X3NlcSwgZW5kX3NlcSkpIHsKIAkJaWYgKGJlZm9yZShzZXEsIHNwLT5zdGFydF9zZXEpKQpAQCAtMjgxNyw3ICsyODU3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9kc2Fja19zZXQoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCitzdGF0aWMgdm9pZCB0Y3BfZHNhY2tfc2V0KHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQogewogCWlmICh0cC0+cnhfb3B0LnNhY2tfb2sgJiYgc3lzY3RsX3RjcF9kc2FjaykgewogCQlpZiAoYmVmb3JlKHNlcSwgdHAtPnJjdl9ueHQpKQpAQCAtMjgzMiw3ICsyODcyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZHNhY2tfZXh0ZW5kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQorc3RhdGljIHZvaWQgdGNwX2RzYWNrX2V4dGVuZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgc2VxLCB1MzIgZW5kX3NlcSkKIHsKIAlpZiAoIXRwLT5yeF9vcHQuZHNhY2spCiAJCXRjcF9kc2Fja19zZXQodHAsIHNlcSwgZW5kX3NlcSk7CkBAIC0yODkwLDcgKzI5MzAsNyBAQAogCX0KIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3Bfc2Fja19zd2FwKHN0cnVjdCB0Y3Bfc2Fja19ibG9jayAqc2FjazEsIHN0cnVjdCB0Y3Bfc2Fja19ibG9jayAqc2FjazIpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NhY2tfc3dhcChzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2sxLCBzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2syKQogewogCV9fdTMyIHRtcDsKIApAQCAtMzQ1NSw3ICszNDk1LDcgQEAKIAl0cC0+c25kX2N3bmRfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGNwX3Nob3VsZF9leHBhbmRfc25kYnVmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKK3N0YXRpYyBpbnQgdGNwX3Nob3VsZF9leHBhbmRfc25kYnVmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAkvKiBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBzcGVjaWZpYyBzZW5kIGJ1ZmZlciBzZXR0aW5nLCBkbwogCSAqIG5vdCBtb2RpZnkgaXQuCkBAIC0zNTAyLDcgKzM1NDIsNyBAQAogCXNrLT5za193cml0ZV9zcGFjZShzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfY2hlY2tfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgdGNwX2NoZWNrX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1FVRVVFX1NIUlVOSykpIHsKIAkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1FVRVVFX1NIUlVOSyk7CkBAIC0zNTEyLDcgKzM1NTIsNyBAQAogCX0KIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfZGF0YV9zbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9kYXRhX3NuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7CiAJdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHRwKTsKIAl0Y3BfY2hlY2tfc3BhY2Uoc2spOwpAQCAtMzU0NCw3ICszNTg0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX2Fja19zbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9hY2tfc25kX2NoZWNrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoIWluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7CiAJCS8qIFdlIHNlbnQgYSBkYXRhIHNlZ21lbnQgYWxyZWFkeS4gKi8KQEAgLTM2OTIsOCArMzczMiw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50Ci10Y3BfY2hlY2tzdW1fY29tcGxldGVfdXNlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIGludCB0Y3BfY2hlY2tzdW1fY29tcGxldGVfdXNlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCiAJCV9fdGNwX2NoZWNrc3VtX2NvbXBsZXRlX3VzZXIoc2ssIHNrYik7CkBAIC0zOTY3LDEyICs0MDA2LDEyIEBACiAJCQkJCSBzdHJ1Y3QgdGNwaGRyICp0aCwgdW5zaWduZWQgbGVuKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlpbnQgc2F2ZWRfY2xhbXAgPSB0cC0+cnhfb3B0Lm1zc19jbGFtcDsKIAogCXRjcF9wYXJzZV9vcHRpb25zKHNrYiwgJnRwLT5yeF9vcHQsIDApOwogCiAJaWYgKHRoLT5hY2spIHsKLQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrOwogCQkvKiByZmM3OTM6CiAJCSAqICJJZiB0aGUgc3RhdGUgaXMgU1lOLVNFTlQgdGhlbgogCQkgKiAgICBmaXJzdCBjaGVjayB0aGUgQUNLIGJpdApAQCAtNDA2MSw3ICs0MTAwLDcgQEAKIAkJaWYgKHRwLT5yeF9vcHQuc2Fja19vayAmJiBzeXNjdGxfdGNwX2ZhY2spCiAJCQl0cC0+cnhfb3B0LnNhY2tfb2sgfD0gMjsKIAotCQl0Y3Bfc3luY19tc3Moc2ssIHRwLT5wbXR1X2Nvb2tpZSk7CisJCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CiAJCXRjcF9pbml0aWFsaXplX3Jjdl9tc3Moc2spOwogCiAJCS8qIFJlbWVtYmVyLCB0Y3BfcG9sbCgpIGRvZXMgbm90IGxvY2sgc29ja2V0IQpAQCAtNDA3Miw3ICs0MTExLDcgQEAKIAkJdGNwX3NldF9zdGF0ZShzaywgVENQX0VTVEFCTElTSEVEKTsKIAogCQkvKiBNYWtlIHN1cmUgc29ja2V0IGlzIHJvdXRlZCwgZm9yIGNvcnJlY3QgbWV0cmljcy4gICovCi0JCXRwLT5hZl9zcGVjaWZpYy0+cmVidWlsZF9oZWFkZXIoc2spOworCQlpY3NrLT5pY3NrX2FmX29wcy0+cmVidWlsZF9oZWFkZXIoc2spOwogCiAJCXRjcF9pbml0X21ldHJpY3Moc2spOwogCkBAIC00MDk4LDggKzQxMzcsNiBAQAogCQkJc2tfd2FrZV9hc3luYyhzaywgMCwgUE9MTF9PVVQpOwogCQl9CiAKLQkJaWNzayA9IGluZXRfY3NrKHNrKTsKLQogCQlpZiAoc2stPnNrX3dyaXRlX3BlbmRpbmcgfHwKIAkJICAgIGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0IHx8CiAJCSAgICBpY3NrLT5pY3NrX2Fjay5waW5ncG9uZykgewpAQCAtNDE3Myw3ICs0MjEwLDcgQEAKIAkJaWYgKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9PSykKIAkJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfTk9fTEFSR0VTRU5EKTsKIAotCQl0Y3Bfc3luY19tc3Moc2ssIHRwLT5wbXR1X2Nvb2tpZSk7CisJCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CiAJCXRjcF9pbml0aWFsaXplX3Jjdl9tc3Moc2spOwogCiAKQEAgLTQyMjAsNiArNDI1Nyw3IEBACiAJCQkgIHN0cnVjdCB0Y3BoZHIgKnRoLCB1bnNpZ25lZCBsZW4pCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCWludCBxdWV1ZWQgPSAwOwogCiAJdHAtPnJ4X29wdC5zYXdfdHN0YW1wID0gMDsKQEAgLTQyMzYsNyArNDI3NCw3IEBACiAJCQlnb3RvIGRpc2NhcmQ7CiAKIAkJaWYodGgtPnN5bikgewotCQkJaWYodHAtPmFmX3NwZWNpZmljLT5jb25uX3JlcXVlc3Qoc2ssIHNrYikgPCAwKQorCQkJaWYgKGljc2stPmljc2tfYWZfb3BzLT5jb25uX3JlcXVlc3Qoc2ssIHNrYikgPCAwKQogCQkJCXJldHVybiAxOwogCiAJCQkvKiBOb3cgd2UgaGF2ZSBzZXZlcmFsIG9wdGlvbnM6IEluIHRoZW9yeSB0aGVyZSBpcyAKQEAgLTQzNDksNyArNDM4Nyw3IEBACiAJCQkJLyogTWFrZSBzdXJlIHNvY2tldCBpcyByb3V0ZWQsIGZvcgogCQkJCSAqIGNvcnJlY3QgbWV0cmljcy4KIAkJCQkgKi8KLQkJCQl0cC0+YWZfc3BlY2lmaWMtPnJlYnVpbGRfaGVhZGVyKHNrKTsKKwkJCQlpY3NrLT5pY3NrX2FmX29wcy0+cmVidWlsZF9oZWFkZXIoc2spOwogCiAJCQkJdGNwX2luaXRfbWV0cmljcyhzayk7CiAKQEAgLTQ0NzUsMyArNDUxMyw0IEBACiBFWFBPUlRfU1lNQk9MKHRjcF9wYXJzZV9vcHRpb25zKTsKIEVYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyk7CitFWFBPUlRfU1lNQk9MKHRjcF9pbml0aWFsaXplX3Jjdl9tc3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggNGQ1MDIxZS4uZTlmODNlNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSA8bmV0L3RyYW5zcF92Ni5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CisjaW5jbHVkZSA8bmV0L3RpbWV3YWl0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgpAQCAtODYsOCArODcsNyBAQAogLyogU29ja2V0IHVzZWQgZm9yIHNlbmRpbmcgUlNUcyAqLwogc3RhdGljIHN0cnVjdCBzb2NrZXQgKnRjcF9zb2NrZXQ7CiAKLXZvaWQgdGNwX3Y0X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwKLQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCB0Y3BfdjRfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbyBfX2NhY2hlbGluZV9hbGlnbmVkIHRjcF9oYXNoaW5mbyA9IHsKIAkubGhhc2hfbG9jawk9IFJXX0xPQ0tfVU5MT0NLRUQsCkBAIC05Nyw3ICs5Nyw4IEBACiAKIHN0YXRpYyBpbnQgdGNwX3Y0X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSkKIHsKLQlyZXR1cm4gaW5ldF9jc2tfZ2V0X3BvcnQoJnRjcF9oYXNoaW5mbywgc2ssIHNudW0pOworCXJldHVybiBpbmV0X2Nza19nZXRfcG9ydCgmdGNwX2hhc2hpbmZvLCBzaywgc251bSwKKwkJCQkgaW5ldF9jc2tfYmluZF9jb25mbGljdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRjcF92NF9oYXNoKHN0cnVjdCBzb2NrICpzaykKQEAgLTExOCwyMDIgKzExOSwzOCBAQAogCQkJCQkgIHNrYi0+aC50aC0+c291cmNlKTsKIH0KIAotLyogY2FsbGVkIHdpdGggbG9jYWwgYmggZGlzYWJsZWQgKi8KLXN0YXRpYyBpbnQgX190Y3BfdjRfY2hlY2tfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBfX3UxNiBscG9ydCwKLQkJCQkgICAgICBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICoqdHdwKQoraW50IHRjcF90d3NrX3VuaXF1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpza3R3LCB2b2lkICp0d3ApCiB7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXUzMiBkYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKLQl1MzIgc2FkZHIgPSBpbmV0LT5kYWRkcjsKLQlpbnQgZGlmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKLQlJTkVUX0FERFJfQ09PS0lFKGFjb29raWUsIHNhZGRyLCBkYWRkcikKLQljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoaW5ldC0+ZHBvcnQsIGxwb3J0KTsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGluZXRfZWhhc2hmbihkYWRkciwgbHBvcnQsIHNhZGRyLCBpbmV0LT5kcG9ydCk7Ci0Jc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICpoZWFkID0gaW5ldF9laGFzaF9idWNrZXQoJnRjcF9oYXNoaW5mbywgaGFzaCk7Ci0Jc3RydWN0IHNvY2sgKnNrMjsKLQljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dzsKKwljb25zdCBzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3ID0gdGNwX3R3c2soc2t0dyk7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKLQlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7Ci0Jd3JpdGVfbG9jaygmaGVhZC0+bG9jayk7CisJLyogV2l0aCBQQVdTLCBpdCBpcyBzYWZlIGZyb20gdGhlIHZpZXdwb2ludAorCSAgIG9mIGRhdGEgaW50ZWdyaXR5LiBFdmVuIHdpdGhvdXQgUEFXUyBpdCBpcyBzYWZlIHByb3ZpZGVkIHNlcXVlbmNlCisJICAgc3BhY2VzIGRvIG5vdCBvdmVybGFwIGkuZS4gYXQgZGF0YSByYXRlcyA8PSA4ME1iaXQvc2VjLgogCi0JLyogQ2hlY2sgVElNRS1XQUlUIHNvY2tldHMgZmlyc3QuICovCi0Jc2tfZm9yX2VhY2goc2syLCBub2RlLCAmKGhlYWQgKyB0Y3BfaGFzaGluZm8uZWhhc2hfc2l6ZSktPmNoYWluKSB7Ci0JCXR3ID0gaW5ldF90d3NrKHNrMik7CisJICAgQWN0dWFsbHksIHRoZSBpZGVhIGlzIGNsb3NlIHRvIFZKJ3Mgb25lLCBvbmx5IHRpbWVzdGFtcCBjYWNoZSBpcworCSAgIGhlbGQgbm90IHBlciBob3N0LCBidXQgcGVyIHBvcnQgcGFpciBhbmQgVFcgYnVja2V0IGlzIHVzZWQgYXMgc3RhdGUKKwkgICBob2xkZXIuCiAKLQkJaWYgKElORVRfVFdfTUFUQ0goc2syLCBoYXNoLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKSB7Ci0JCQljb25zdCBzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3ID0gdGNwX3R3c2soc2syKTsKLQkJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCi0JCQkvKiBXaXRoIFBBV1MsIGl0IGlzIHNhZmUgZnJvbSB0aGUgdmlld3BvaW50Ci0JCQkgICBvZiBkYXRhIGludGVncml0eS4gRXZlbiB3aXRob3V0IFBBV1MgaXQKLQkJCSAgIGlzIHNhZmUgcHJvdmlkZWQgc2VxdWVuY2Ugc3BhY2VzIGRvIG5vdAotCQkJICAgb3ZlcmxhcCBpLmUuIGF0IGRhdGEgcmF0ZXMgPD0gODBNYml0L3NlYy4KLQotCQkJICAgQWN0dWFsbHksIHRoZSBpZGVhIGlzIGNsb3NlIHRvIFZKJ3Mgb25lLAotCQkJICAgb25seSB0aW1lc3RhbXAgY2FjaGUgaXMgaGVsZCBub3QgcGVyIGhvc3QsCi0JCQkgICBidXQgcGVyIHBvcnQgcGFpciBhbmQgVFcgYnVja2V0IGlzIHVzZWQKLQkJCSAgIGFzIHN0YXRlIGhvbGRlci4KLQotCQkJICAgSWYgVFcgYnVja2V0IGhhcyBiZWVuIGFscmVhZHkgZGVzdHJveWVkIHdlCi0JCQkgICBmYWxsIGJhY2sgdG8gVkoncyBzY2hlbWUgYW5kIHVzZSBpbml0aWFsCi0JCQkgICB0aW1lc3RhbXAgcmV0cmlldmVkIGZyb20gcGVlciB0YWJsZS4KLQkJCSAqLwotCQkJaWYgKHRjcHR3LT50d190c19yZWNlbnRfc3RhbXAgJiYKLQkJCSAgICAoIXR3cCB8fCAoc3lzY3RsX3RjcF90d19yZXVzZSAmJgotCQkJCSAgICAgIHh0aW1lLnR2X3NlYyAtCi0JCQkJICAgICAgdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcCA+IDEpKSkgewotCQkJCXRwLT53cml0ZV9zZXEgPSB0Y3B0dy0+dHdfc25kX254dCArIDY1NTM1ICsgMjsKLQkJCQlpZiAodHAtPndyaXRlX3NlcSA9PSAwKQotCQkJCQl0cC0+d3JpdGVfc2VxID0gMTsKLQkJCQl0cC0+cnhfb3B0LnRzX3JlY2VudAkgICA9IHRjcHR3LT50d190c19yZWNlbnQ7Ci0JCQkJdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgPSB0Y3B0dy0+dHdfdHNfcmVjZW50X3N0YW1wOwotCQkJCXNvY2tfaG9sZChzazIpOwotCQkJCWdvdG8gdW5pcXVlOwotCQkJfSBlbHNlCi0JCQkJZ290byBub3RfdW5pcXVlOwotCQl9Ci0JfQotCXR3ID0gTlVMTDsKLQotCS8qIEFuZCBlc3RhYmxpc2hlZCBwYXJ0Li4uICovCi0Jc2tfZm9yX2VhY2goc2syLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKLQkJaWYgKElORVRfTUFUQ0goc2syLCBoYXNoLCBhY29va2llLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQotCQkJZ290byBub3RfdW5pcXVlOwotCX0KLQotdW5pcXVlOgotCS8qIE11c3QgcmVjb3JkIG51bSBhbmQgc3BvcnQgbm93LiBPdGhlcndpc2Ugd2Ugd2lsbCBzZWUKLQkgKiBpbiBoYXNoIHRhYmxlIHNvY2tldCB3aXRoIGEgZnVubnkgaWRlbnRpdHkuICovCi0JaW5ldC0+bnVtID0gbHBvcnQ7Ci0JaW5ldC0+c3BvcnQgPSBodG9ucyhscG9ydCk7Ci0Jc2stPnNrX2hhc2ggPSBoYXNoOwotCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7Ci0JX19za19hZGRfbm9kZShzaywgJmhlYWQtPmNoYWluKTsKLQlzb2NrX3Byb3RfaW5jX3VzZShzay0+c2tfcHJvdCk7Ci0Jd3JpdGVfdW5sb2NrKCZoZWFkLT5sb2NrKTsKLQotCWlmICh0d3ApIHsKLQkJKnR3cCA9IHR3OwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9USU1FV0FJVFJFQ1lDTEVEKTsKLQl9IGVsc2UgaWYgKHR3KSB7Ci0JCS8qIFNpbGx5LiBTaG91bGQgaGFzaC1kYW5jZSBpbnN0ZWFkLi4uICovCi0JCWluZXRfdHdza19kZXNjaGVkdWxlKHR3LCAmdGNwX2RlYXRoX3Jvdyk7Ci0JCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RJTUVXQUlUUkVDWUNMRUQpOwotCi0JCWluZXRfdHdza19wdXQodHcpOworCSAgIElmIFRXIGJ1Y2tldCBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCB3ZSBmYWxsIGJhY2sgdG8gVkoncyBzY2hlbWUKKwkgICBhbmQgdXNlIGluaXRpYWwgdGltZXN0YW1wIHJldHJpZXZlZCBmcm9tIHBlZXIgdGFibGUuCisJICovCisJaWYgKHRjcHR3LT50d190c19yZWNlbnRfc3RhbXAgJiYKKwkgICAgKHR3cCA9PSBOVUxMIHx8IChzeXNjdGxfdGNwX3R3X3JldXNlICYmCisJCQkgICAgIHh0aW1lLnR2X3NlYyAtIHRjcHR3LT50d190c19yZWNlbnRfc3RhbXAgPiAxKSkpIHsKKwkJdHAtPndyaXRlX3NlcSA9IHRjcHR3LT50d19zbmRfbnh0ICsgNjU1MzUgKyAyOworCQlpZiAodHAtPndyaXRlX3NlcSA9PSAwKQorCQkJdHAtPndyaXRlX3NlcSA9IDE7CisJCXRwLT5yeF9vcHQudHNfcmVjZW50CSAgID0gdGNwdHctPnR3X3RzX3JlY2VudDsKKwkJdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgPSB0Y3B0dy0+dHdfdHNfcmVjZW50X3N0YW1wOworCQlzb2NrX2hvbGQoc2t0dyk7CisJCXJldHVybiAxOwogCX0KIAogCXJldHVybiAwOwotCi1ub3RfdW5pcXVlOgotCXdyaXRlX3VubG9jaygmaGVhZC0+bG9jayk7Ci0JcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBjb25uZWN0X3BvcnRfb2Zmc2V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KLQlyZXR1cm4gc2VjdXJlX3RjcF9wb3J0X2VwaGVtZXJhbChpbmV0LT5yY3Zfc2FkZHIsIGluZXQtPmRhZGRyLCAKLQkJCQkJIGluZXQtPmRwb3J0KTsKLX0KLQotLyoKLSAqIEJpbmQgYSBwb3J0IGZvciBhIGNvbm5lY3Qgb3BlcmF0aW9uIGFuZCBoYXNoIGl0LgotICovCi1zdGF0aWMgaW5saW5lIGludCB0Y3BfdjRfaGFzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCB1bnNpZ25lZCBzaG9ydCBzbnVtID0gaW5ldF9zayhzayktPm51bTsKLSAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpoZWFkOwotIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7Ci0JaW50IHJldDsKLQotIAlpZiAoIXNudW0pIHsKLSAJCWludCBsb3cgPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXTsKLSAJCWludCBoaWdoID0gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMV07Ci0JCWludCByYW5nZSA9IGhpZ2ggLSBsb3c7Ci0gCQlpbnQgaTsKLQkJaW50IHBvcnQ7Ci0JCXN0YXRpYyB1MzIgaGludDsKLQkJdTMyIG9mZnNldCA9IGhpbnQgKyBjb25uZWN0X3BvcnRfb2Zmc2V0KHNrKTsKLQkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0gCQlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IE5VTEw7Ci0KLSAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJZm9yIChpID0gMTsgaSA8PSByYW5nZTsgaSsrKSB7Ci0JCQlwb3J0ID0gbG93ICsgKGkgKyBvZmZzZXQpICUgcmFuZ2U7Ci0gCQkJaGVhZCA9ICZ0Y3BfaGFzaGluZm8uYmhhc2hbaW5ldF9iaGFzaGZuKHBvcnQsIHRjcF9oYXNoaW5mby5iaGFzaF9zaXplKV07Ci0gCQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKLQotIAkJCS8qIERvZXMgbm90IGJvdGhlciB3aXRoIHJjdl9zYWRkciBjaGVja3MsCi0gCQkJICogYmVjYXVzZSB0aGUgZXN0YWJsaXNoZWQgY2hlY2sgaXMgYWxyZWFkeQotIAkJCSAqIHVuaXF1ZSBlbm91Z2guCi0gCQkJICovCi0JCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKLSAJCQkJaWYgKHRiLT5wb3J0ID09IHBvcnQpIHsKLSAJCQkJCUJVR19UUkFQKCFobGlzdF9lbXB0eSgmdGItPm93bmVycykpOwotIAkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPj0gMCkKLSAJCQkJCQlnb3RvIG5leHRfcG9ydDsKLSAJCQkJCWlmICghX190Y3BfdjRfY2hlY2tfZXN0YWJsaXNoZWQoc2ssCi0JCQkJCQkJCQlwb3J0LAotCQkJCQkJCQkJJnR3KSkKLSAJCQkJCQlnb3RvIG9rOwotIAkJCQkJZ290byBuZXh0X3BvcnQ7Ci0gCQkJCX0KLSAJCQl9Ci0KLSAJCQl0YiA9IGluZXRfYmluZF9idWNrZXRfY3JlYXRlKHRjcF9oYXNoaW5mby5iaW5kX2J1Y2tldF9jYWNoZXAsIGhlYWQsIHBvcnQpOwotIAkJCWlmICghdGIpIHsKLSAJCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwotIAkJCQlicmVhazsKLSAJCQl9Ci0gCQkJdGItPmZhc3RyZXVzZSA9IC0xOwotIAkJCWdvdG8gb2s7Ci0KLSAJCW5leHRfcG9ydDoKLSAJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7Ci0gCQl9Ci0gCQlsb2NhbF9iaF9lbmFibGUoKTsKLQotIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi1vazoKLQkJaGludCArPSBpOwotCi0gCQkvKiBIZWFkIGxvY2sgc3RpbGwgaGVsZCBhbmQgYmgncyBkaXNhYmxlZCAqLwotIAkJaW5ldF9iaW5kX2hhc2goc2ssIHRiLCBwb3J0KTsKLQkJaWYgKHNrX3VuaGFzaGVkKHNrKSkgewotIAkJCWluZXRfc2soc2spLT5zcG9ydCA9IGh0b25zKHBvcnQpOwotIAkJCV9faW5ldF9oYXNoKCZ0Y3BfaGFzaGluZm8sIHNrLCAwKTsKLSAJCX0KLSAJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKLQotIAkJaWYgKHR3KSB7Ci0gCQkJaW5ldF90d3NrX2Rlc2NoZWR1bGUodHcsICZ0Y3BfZGVhdGhfcm93KTs7Ci0gCQkJaW5ldF90d3NrX3B1dCh0dyk7Ci0gCQl9Ci0KLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7Ci0gCX0KLQotIAloZWFkID0gJnRjcF9oYXNoaW5mby5iaGFzaFtpbmV0X2JoYXNoZm4oc251bSwgdGNwX2hhc2hpbmZvLmJoYXNoX3NpemUpXTsKLSAJdGIgID0gaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaDsKLQlzcGluX2xvY2tfYmgoJmhlYWQtPmxvY2spOwotCWlmIChza19oZWFkKCZ0Yi0+b3duZXJzKSA9PSBzayAmJiAhc2stPnNrX2JpbmRfbm9kZS5uZXh0KSB7Ci0JCV9faW5ldF9oYXNoKCZ0Y3BfaGFzaGluZm8sIHNrLCAwKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmhlYWQtPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7Ci0JCS8qIE5vIGRlZmluaXRlIGFuc3dlci4uLiBXYWxrIHRvIGVzdGFibGlzaGVkIGhhc2ggdGFibGUgKi8KLQkJcmV0ID0gX190Y3BfdjRfY2hlY2tfZXN0YWJsaXNoZWQoc2ssIHNudW0sIE5VTEwpOwotb3V0OgotCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci19CitFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfdHdza191bmlxdWUpOwogCiAvKiBUaGlzIHdpbGwgaW5pdGlhdGUgYW4gb3V0Z29pbmcgY29ubmVjdGlvbi4gKi8KIGludCB0Y3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKQEAgLTM4Myw5ICsyMjAsOSBAQAogCWluZXQtPmRwb3J0ID0gdXNpbi0+c2luX3BvcnQ7CiAJaW5ldC0+ZGFkZHIgPSBkYWRkcjsKIAotCXRwLT5leHRfaGVhZGVyX2xlbiA9IDA7CisJaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKIAlpZiAoaW5ldC0+b3B0KQotCQl0cC0+ZXh0X2hlYWRlcl9sZW4gPSBpbmV0LT5vcHQtPm9wdGxlbjsKKwkJaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuID0gaW5ldC0+b3B0LT5vcHRsZW47CiAKIAl0cC0+cnhfb3B0Lm1zc19jbGFtcCA9IDUzNjsKIApAQCAtMzk1LDcgKzIzMiw3IEBACiAJICogY29tcGxldGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgdGhpcy4KIAkgKi8KIAl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfU1lOX1NFTlQpOwotCWVyciA9IHRjcF92NF9oYXNoX2Nvbm5lY3Qoc2spOworCWVyciA9IGluZXRfaGFzaF9jb25uZWN0KCZ0Y3BfZGVhdGhfcm93LCBzayk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsdXJlOwogCkBAIC00MzMsMTIgKzI3MCwxMCBAQAogLyoKICAqIFRoaXMgcm91dGluZSBkb2VzIHBhdGggbXR1IGRpc2NvdmVyeSBhcyBkZWZpbmVkIGluIFJGQzExOTEuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19wbXR1X2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcGhkciAqaXBoLAotCQkJCSAgICAgdTMyIG10dSkKK3N0YXRpYyB2b2lkIGRvX3BtdHVfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsIHUzMiBtdHUpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAogCS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiBUQ1BfTElTVEVOIGFuZCBvcGVuX3JlcXVlc3RzIChTWU4tQUNLcwogCSAqIHNlbmQgb3V0IGJ5IExpbnV4IGFyZSBhbHdheXMgPDU3NmJ5dGVzIHNvIHRoZXkgc2hvdWxkIGdvIHRocm91Z2gKQEAgLTQ2Nyw3ICszMDIsNyBAQAogCW10dSA9IGRzdF9tdHUoZHN0KTsKIAogCWlmIChpbmV0LT5wbXR1ZGlzYyAhPSBJUF9QTVRVRElTQ19ET05UICYmCi0JICAgIHRwLT5wbXR1X2Nvb2tpZSA+IG10dSkgeworCSAgICBpbmV0X2NzayhzayktPmljc2tfcG10dV9jb29raWUgPiBtdHUpIHsKIAkJdGNwX3N5bmNfbXNzKHNrLCBtdHUpOwogCiAJCS8qIFJlc2VuZCB0aGUgVENQIHBhY2tldCBiZWNhdXNlIGl0J3MKQEAgLTY0NCwxMCArNDc5LDEwIEBACiB9CiAKIC8qIFRoaXMgcm91dGluZSBjb21wdXRlcyBhbiBJUHY0IFRDUCBjaGVja3N1bS4gKi8KLXZvaWQgdGNwX3Y0X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwKLQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIHRjcF92NF9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJc3RydWN0IHRjcGhkciAqdGggPSBza2ItPmgudGg7CiAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKIAkJdGgtPmNoZWNrID0gfnRjcF92NF9jaGVjayh0aCwgbGVuLCBpbmV0LT5zYWRkciwgaW5ldC0+ZGFkZHIsIDApOwpAQCAtODI2LDcgKzY2MSw4IEBACiAJa2ZyZWUoaW5ldF9yc2socmVxKS0+b3B0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN5bl9mbG9vZF93YXJuaW5nKHN0cnVjdCBza19idWZmICpza2IpCisjaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTCitzdGF0aWMgdm9pZCBzeW5fZmxvb2Rfd2FybmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHdhcm50aW1lOwogCkBAIC04MzcsMTIgKzY3MywxMyBAQAogCQkgICAgICAgbnRvaHMoc2tiLT5oLnRoLT5kZXN0KSk7CiAJfQogfQorI2VuZGlmCiAKIC8qCiAgKiBTYXZlIGFuZCBjb21waWxlIElQdjQgb3B0aW9ucyBpbnRvIHRoZSByZXF1ZXN0X3NvY2sgaWYgbmVlZGVkLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF9vcHRpb25zICp0Y3BfdjRfc2F2ZV9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBzdHJ1Y3QgaXBfb3B0aW9ucyAqdGNwX3Y0X3NhdmVfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9ICYoSVBDQihza2IpLT5vcHQpOwogCXN0cnVjdCBpcF9vcHRpb25zICpkb3B0ID0gTlVMTDsKQEAgLTg2OSw2ICs3MDYsMTEgQEAKIAkuc2VuZF9yZXNldAk9CXRjcF92NF9zZW5kX3Jlc2V0LAogfTsKIAorc3RhdGljIHN0cnVjdCB0aW1ld2FpdF9zb2NrX29wcyB0Y3BfdGltZXdhaXRfc29ja19vcHMgPSB7CisJLnR3c2tfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrKSwKKwkudHdza191bmlxdWUJPSB0Y3BfdHdza191bmlxdWUsCit9OworCiBpbnQgdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOwpAQCAtMTA1Myw5ICs4OTUsOSBAQAogCWlyZXEtPm9wdAkgICAgICA9IE5VTEw7CiAJbmV3aW5ldC0+bWNfaW5kZXggICAgID0gaW5ldF9paWYoc2tiKTsKIAluZXdpbmV0LT5tY190dGwJICAgICAgPSBza2ItPm5oLmlwaC0+dHRsOwotCW5ld3RwLT5leHRfaGVhZGVyX2xlbiA9IDA7CisJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKIAlpZiAobmV3aW5ldC0+b3B0KQotCQluZXd0cC0+ZXh0X2hlYWRlcl9sZW4gPSBuZXdpbmV0LT5vcHQtPm9wdGxlbjsKKwkJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gbmV3aW5ldC0+b3B0LT5vcHRsZW47CiAJbmV3aW5ldC0+aWQgPSBuZXd0cC0+d3JpdGVfc2VxIF4gamlmZmllczsKIAogCXRjcF9zeW5jX21zcyhuZXdzaywgZHN0X210dShkc3QpKTsKQEAgLTEzMTQsMTYgKzExNTYsNiBAQAogCWdvdG8gZGlzY2FyZF9pdDsKIH0KIAotc3RhdGljIHZvaWQgdjRfYWRkcjJzb2NrYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqIHVhZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSB1YWRkcjsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KLQlzaW4tPnNpbl9mYW1pbHkJCT0gQUZfSU5FVDsKLQlzaW4tPnNpbl9hZGRyLnNfYWRkcgk9IGluZXQtPmRhZGRyOwotCXNpbi0+c2luX3BvcnQJCT0gaW5ldC0+ZHBvcnQ7Ci19Ci0KIC8qIFZKJ3MgaWRlYS4gU2F2ZSBsYXN0IHRpbWVzdGFtcCBzZWVuIGZyb20gdGhpcyBkZXN0aW5hdGlvbgogICogYW5kIGhvbGQgaXQgYXQgbGVhc3QgZm9yIG5vcm1hbCB0aW1ld2FpdCBpbnRlcnZhbCB0byB1c2UgZm9yIGR1cGxpY2F0ZQogICogc2VnbWVudCBkZXRlY3Rpb24gaW4gc3Vic2VxdWVudCBjb25uZWN0aW9ucywgYmVmb3JlIHRoZXkgZW50ZXIgc3luY2hyb25pemVkCkBAIC0xMzgyLDcgKzEyMTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgdGNwX2Z1bmMgaXB2NF9zcGVjaWZpYyA9IHsKK3N0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2NF9zcGVjaWZpYyA9IHsKIAkucXVldWVfeG1pdAk9CWlwX3F1ZXVlX3htaXQsCiAJLnNlbmRfY2hlY2sJPQl0Y3BfdjRfc2VuZF9jaGVjaywKIAkucmVidWlsZF9oZWFkZXIJPQlpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLApAQCAtMTM5Miw3ICsxMjI0LDcgQEAKIAkubmV0X2hlYWRlcl9sZW4JPQlzaXplb2Yoc3RydWN0IGlwaGRyKSwKIAkuc2V0c29ja29wdAk9CWlwX3NldHNvY2tvcHQsCiAJLmdldHNvY2tvcHQJPQlpcF9nZXRzb2Nrb3B0LAotCS5hZGRyMnNvY2thZGRyCT0JdjRfYWRkcjJzb2NrYWRkciwKKwkuYWRkcjJzb2NrYWRkcgk9CWluZXRfY3NrX2FkZHIyc29ja2FkZHIsCiAJLnNvY2thZGRyX2xlbgk9CXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAogfTsKIApAQCAtMTQzMyw3ICsxMjY1LDggQEAKIAlzay0+c2tfd3JpdGVfc3BhY2UgPSBza19zdHJlYW1fd3JpdGVfc3BhY2U7CiAJc29ja19zZXRfZmxhZyhzaywgU09DS19VU0VfV1JJVEVfUVVFVUUpOwogCi0JdHAtPmFmX3NwZWNpZmljID0gJmlwdjRfc3BlY2lmaWM7CisJaWNzay0+aWNza19hZl9vcHMgPSAmaXB2NF9zcGVjaWZpYzsKKwlpY3NrLT5pY3NrX3N5bmNfbXNzID0gdGNwX3N5bmNfbXNzOwogCiAJc2stPnNrX3NuZGJ1ZiA9IHN5c2N0bF90Y3Bfd21lbVsxXTsKIAlzay0+c2tfcmN2YnVmID0gc3lzY3RsX3RjcF9ybWVtWzFdOwpAQCAtMTk4OSw3ICsxODIyLDcgQEAKIAkuc3lzY3RsX3JtZW0JCT0gc3lzY3RsX3RjcF9ybWVtLAogCS5tYXhfaGVhZGVyCQk9IE1BWF9UQ1BfSEVBREVSLAogCS5vYmpfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHRjcF9zb2NrKSwKLQkudHdza19vYmpfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrKSwKKwkudHdza19wcm90CQk9ICZ0Y3BfdGltZXdhaXRfc29ja19vcHMsCiAJLnJza19wcm90CQk9ICZ0Y3BfcmVxdWVzdF9zb2NrX29wcywKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCAxYjY2YTJhLi4yYjliN2Y2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC0yNzQsMTggKzI3NCwxOCBAQAogdm9pZCB0Y3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pCiB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlpbnQgcmVjeWNsZV9vayA9IDA7CiAKIAlpZiAodGNwX2RlYXRoX3Jvdy5zeXNjdGxfdHdfcmVjeWNsZSAmJiB0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCkKLQkJcmVjeWNsZV9vayA9IHRwLT5hZl9zcGVjaWZpYy0+cmVtZW1iZXJfc3RhbXAoc2spOworCQlyZWN5Y2xlX29rID0gaWNzay0+aWNza19hZl9vcHMtPnJlbWVtYmVyX3N0YW1wKHNrKTsKIAogCWlmICh0Y3BfZGVhdGhfcm93LnR3X2NvdW50IDwgdGNwX2RlYXRoX3Jvdy5zeXNjdGxfbWF4X3R3X2J1Y2tldHMpCiAJCXR3ID0gaW5ldF90d3NrX2FsbG9jKHNrLCBzdGF0ZSk7CiAKIAlpZiAodHcgIT0gTlVMTCkgewogCQlzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3ID0gdGNwX3R3c2soKHN0cnVjdCBzb2NrICopdHcpOwotCQljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJCWNvbnN0IGludCBydG8gPSAoaWNzay0+aWNza19ydG8gPDwgMikgLSAoaWNzay0+aWNza19ydG8gPj4gMSk7CiAKIAkJdHctPnR3X3Jjdl93c2NhbGUJPSB0cC0+cnhfb3B0LnJjdl93c2NhbGU7CkBAIC0yOTgsMTAgKzI5OCwxMiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCQlpZiAodHctPnR3X2ZhbWlseSA9PSBQRl9JTkVUNikgewogCQkJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCQkJc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayAqdGNwNnR3ID0gdGNwNl90d3NrKChzdHJ1Y3Qgc29jayAqKXR3KTsKKwkJCXN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzY7CiAKLQkJCWlwdjZfYWRkcl9jb3B5KCZ0Y3A2dHctPnR3X3Y2X2RhZGRyLCAmbnAtPmRhZGRyKTsKLQkJCWlwdjZfYWRkcl9jb3B5KCZ0Y3A2dHctPnR3X3Y2X3Jjdl9zYWRkciwgJm5wLT5yY3Zfc2FkZHIpOworCQkJdHctPnR3X2lwdjZfb2Zmc2V0ID0gaW5ldDZfdHdfb2Zmc2V0KHNrLT5za19wcm90KTsKKwkJCXR3NiA9IGluZXQ2X3R3c2soKHN0cnVjdCBzb2NrICopdHcpOworCQkJaXB2Nl9hZGRyX2NvcHkoJnR3Ni0+dHdfdjZfZGFkZHIsICZucC0+ZGFkZHIpOworCQkJaXB2Nl9hZGRyX2NvcHkoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCAmbnAtPnJjdl9zYWRkcik7CiAJCQl0dy0+dHdfaXB2Nm9ubHkgPSBucC0+aXB2Nm9ubHk7CiAJCX0KICNlbmRpZgpAQCAtNDU2LDcgKzQ1OCw2IEBACiAJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICoqcHJldikKIHsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHNrYi0+aC50aDsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAl1MzIgZmxnID0gdGNwX2ZsYWdfd29yZCh0aCkgJiAoVENQX0ZMQUdfUlNUfFRDUF9GTEFHX1NZTnxUQ1BfRkxBR19BQ0spOwogCWludCBwYXdzX3JlamVjdCA9IDA7CiAJc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7CkBAIC02MTMsNyArNjE0LDggQEAKIAkJICogRVNUQUJMSVNIRUQgU1RBVEUuIElmIGl0IHdpbGwgYmUgZHJvcHBlZCBhZnRlcgogCQkgKiBzb2NrZXQgaXMgY3JlYXRlZCwgd2FpdCBmb3IgdHJvdWJsZXMuCiAJCSAqLwotCQljaGlsZCA9IHRwLT5hZl9zcGVjaWZpYy0+c3luX3JlY3Zfc29jayhzaywgc2tiLCByZXEsIE5VTEwpOworCQljaGlsZCA9IGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnN5bl9yZWN2X3NvY2soc2ssIHNrYiwKKwkJCQkJCQkJIHJlcSwgTlVMTCk7CiAJCWlmIChjaGlsZCA9PSBOVUxMKQogCQkJZ290byBsaXN0ZW5fb3ZlcmZsb3c7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBiNzMyNWUwLi5hNzYyM2VhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC01MSw4ICs1MSw4IEBACiAgKi8KIGludCBzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvciA9IDM7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2VuZF9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCwKLQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zZW5kX2hlYWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrLT5za19zZW5kX2hlYWQgPSBza2ItPm5leHQ7CiAJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gKHN0cnVjdCBza19idWZmICopJnNrLT5za193cml0ZV9xdWV1ZSkKQEAgLTEyNCw4ICsxMjQsOCBAQAogCXRwLT5zbmRfY3duZF91c2VkID0gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9ldmVudF9kYXRhX3NlbnQoc3RydWN0IHRjcF9zb2NrICp0cCwKLQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgdGNwX2V2ZW50X2RhdGFfc2VudChzdHJ1Y3QgdGNwX3NvY2sgKnRwLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJY29uc3QgdTMyIG5vdyA9IHRjcF90aW1lX3N0YW1wOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCWljc2stPmljc2tfYWNrLnBpbmdwb25nID0gMTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCB0Y3BfZXZlbnRfYWNrX3NlbnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgcGt0cykKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZXZlbnRfYWNrX3NlbnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgcGt0cykKIHsKIAl0Y3BfZGVjX3F1aWNrYWNrX21vZGUoc2ssIHBrdHMpOwogCWluZXRfY3NrX2NsZWFyX3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9EQUNLKTsKQEAgLTIxMiw3ICsyMTIsNyBAQAogICogdmFsdWUgY2FuIGJlIHN0dWZmZWQgZGlyZWN0bHkgaW50byB0aC0+d2luZG93IGZvciBhbiBvdXRnb2luZwogICogZnJhbWUuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHUxNiB0Y3Bfc2VsZWN0X3dpbmRvdyhzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdTE2IHRjcF9zZWxlY3Rfd2luZG93KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAl1MzIgY3VyX3dpbiA9IHRjcF9yZWNlaXZlX3dpbmRvdyh0cCk7CkBAIC0yNTAsNiArMjUwLDc1IEBACiAJcmV0dXJuIG5ld193aW47CiB9CiAKK3N0YXRpYyB2b2lkIHRjcF9idWlsZF9hbmRfdXBkYXRlX29wdGlvbnMoX191MzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCwKKwkJCQkJIF9fdTMyIHRzdGFtcCkKK3sKKwlpZiAodHAtPnJ4X29wdC50c3RhbXBfb2spIHsKKwkJKnB0cisrID0gX19jb25zdGFudF9odG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfAorCQkJCQkgIChUQ1BPUFRfTk9QIDw8IDE2KSB8CisJCQkJCSAgKFRDUE9QVF9USU1FU1RBTVAgPDwgOCkgfAorCQkJCQkgIFRDUE9MRU5fVElNRVNUQU1QKTsKKwkJKnB0cisrID0gaHRvbmwodHN0YW1wKTsKKwkJKnB0cisrID0gaHRvbmwodHAtPnJ4X29wdC50c19yZWNlbnQpOworCX0KKwlpZiAodHAtPnJ4X29wdC5lZmZfc2Fja3MpIHsKKwkJc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzcCA9IHRwLT5yeF9vcHQuZHNhY2sgPyB0cC0+ZHVwbGljYXRlX3NhY2sgOiB0cC0+c2VsZWN0aXZlX2Fja3M7CisJCWludCB0aGlzX3NhY2s7CisKKwkJKnB0cisrID0gaHRvbmwoKFRDUE9QVF9OT1AgIDw8IDI0KSB8CisJCQkgICAgICAgKFRDUE9QVF9OT1AgIDw8IDE2KSB8CisJCQkgICAgICAgKFRDUE9QVF9TQUNLIDw8ICA4KSB8CisJCQkgICAgICAgKFRDUE9MRU5fU0FDS19CQVNFICsgKHRwLT5yeF9vcHQuZWZmX3NhY2tzICoKKwkJCQkJCSAgICAgVENQT0xFTl9TQUNLX1BFUkJMT0NLKSkpOworCQlmb3IodGhpc19zYWNrID0gMDsgdGhpc19zYWNrIDwgdHAtPnJ4X29wdC5lZmZfc2Fja3M7IHRoaXNfc2FjaysrKSB7CisJCQkqcHRyKysgPSBodG9ubChzcFt0aGlzX3NhY2tdLnN0YXJ0X3NlcSk7CisJCQkqcHRyKysgPSBodG9ubChzcFt0aGlzX3NhY2tdLmVuZF9zZXEpOworCQl9CisJCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7CisJCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKKwkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzLS07CisJCX0KKwl9Cit9CisKKy8qIENvbnN0cnVjdCBhIHRjcCBvcHRpb25zIGhlYWRlciBmb3IgYSBTWU4gb3IgU1lOX0FDSyBwYWNrZXQuCisgKiBJZiB0aGlzIGlzIGV2ZXJ5IGNoYW5nZWQgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZgorICogTUFYX1NZTl9TSVpFIHRvIG1hdGNoIHRoZSBuZXcgbWF4aW11bSBudW1iZXIgb2Ygb3B0aW9ucyB0aGF0IHlvdQorICogY2FuIGdlbmVyYXRlLgorICovCitzdGF0aWMgdm9pZCB0Y3Bfc3luX2J1aWxkX29wdGlvbnMoX191MzIgKnB0ciwgaW50IG1zcywgaW50IHRzLCBpbnQgc2FjaywKKwkJCQkgIGludCBvZmZlcl93c2NhbGUsIGludCB3c2NhbGUsIF9fdTMyIHRzdGFtcCwKKwkJCQkgIF9fdTMyIHRzX3JlY2VudCkKK3sKKwkvKiBXZSBhbHdheXMgZ2V0IGFuIE1TUyBvcHRpb24uCisJICogVGhlIG9wdGlvbiBieXRlcyB3aGljaCB3aWxsIGJlIHNlZW4gaW4gbm9ybWFsIGRhdGEKKwkgKiBwYWNrZXRzIHNob3VsZCB0aW1lc3RhbXBzIGJlIHVzZWQsIG11c3QgYmUgaW4gdGhlIE1TUworCSAqIGFkdmVydGlzZWQuICBCdXQgd2Ugc3VidHJhY3QgdGhlbSBmcm9tIHRwLT5tc3NfY2FjaGUgc28KKwkgKiB0aGF0IGNhbGN1bGF0aW9ucyBpbiB0Y3Bfc2VuZG1zZyBhcmUgc2ltcGxlciBldGMuCisJICogU28gYWNjb3VudCBmb3IgdGhpcyBmYWN0IGhlcmUgaWYgbmVjZXNzYXJ5LiAgSWYgd2UKKwkgKiBkb24ndCBkbyB0aGlzIGNvcnJlY3RseSwgYXMgYSByZWNlaXZlciB3ZSB3b24ndAorCSAqIHJlY29nbml6ZSBkYXRhIHBhY2tldHMgYXMgYmVpbmcgZnVsbCBzaXplZCB3aGVuIHdlCisJICogc2hvdWxkLCBhbmQgdGh1cyB3ZSB3b24ndCBhYmlkZSBieSB0aGUgZGVsYXllZCBBQ0sKKwkgKiBydWxlcyBjb3JyZWN0bHkuCisJICogU0FDS3MgZG9uJ3QgbWF0dGVyLCB3ZSBuZXZlciBkZWxheSBhbiBBQ0sgd2hlbiB3ZQorCSAqIGhhdmUgYW55IG9mIHRob3NlIGdvaW5nIG91dC4KKwkgKi8KKwkqcHRyKysgPSBodG9ubCgoVENQT1BUX01TUyA8PCAyNCkgfCAoVENQT0xFTl9NU1MgPDwgMTYpIHwgbXNzKTsKKwlpZiAodHMpIHsKKwkJaWYoc2FjaykKKwkJCSpwdHIrKyA9IF9fY29uc3RhbnRfaHRvbmwoKFRDUE9QVF9TQUNLX1BFUk0gPDwgMjQpIHwgKFRDUE9MRU5fU0FDS19QRVJNIDw8IDE2KSB8CisJCQkJCQkgIChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpIHwgVENQT0xFTl9USU1FU1RBTVApOworCQllbHNlCisJCQkqcHRyKysgPSBfX2NvbnN0YW50X2h0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8IChUQ1BPUFRfTk9QIDw8IDE2KSB8CisJCQkJCQkgIChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpIHwgVENQT0xFTl9USU1FU1RBTVApOworCQkqcHRyKysgPSBodG9ubCh0c3RhbXApOwkJLyogVFNWQUwgKi8KKwkJKnB0cisrID0gaHRvbmwodHNfcmVjZW50KTsJLyogVFNFQ1IgKi8KKwl9IGVsc2UgaWYoc2FjaykKKwkJKnB0cisrID0gX19jb25zdGFudF9odG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfCAoVENQT1BUX05PUCA8PCAxNikgfAorCQkJCQkgIChUQ1BPUFRfU0FDS19QRVJNIDw8IDgpIHwgVENQT0xFTl9TQUNLX1BFUk0pOworCWlmIChvZmZlcl93c2NhbGUpCisJCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8IChUQ1BPUFRfV0lORE9XIDw8IDE2KSB8IChUQ1BPTEVOX1dJTkRPVyA8PCA4KSB8ICh3c2NhbGUpKTsKK30KIAogLyogVGhpcyByb3V0aW5lIGFjdHVhbGx5IHRyYW5zbWl0cyBUQ1AgcGFja2V0cyBxdWV1ZWQgaW4gYnkKICAqIHRjcF9kb19zZW5kbXNnKCkuICBUaGlzIGlzIHVzZWQgYnkgYm90aCB0aGUgaW5pdGlhbApAQCAtMzcxLDcgKzQ0MCw3IEBACiAJCVRDUF9FQ05fc2VuZChzaywgdHAsIHNrYiwgdGNwX2hlYWRlcl9zaXplKTsKIAl9CiAKLQl0cC0+YWZfc3BlY2lmaWMtPnNlbmRfY2hlY2soc2ssIHRoLCBza2ItPmxlbiwgc2tiKTsKKwlpY3NrLT5pY3NrX2FmX29wcy0+c2VuZF9jaGVjayhzaywgc2tiLT5sZW4sIHNrYik7CiAKIAlpZiAobGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX0FDSykpCiAJCXRjcF9ldmVudF9hY2tfc2VudChzaywgdGNwX3NrYl9wY291bnQoc2tiKSk7CkBAIC0zODEsNyArNDUwLDcgQEAKIAogCVRDUF9JTkNfU1RBVFMoVENQX01JQl9PVVRTRUdTKTsKIAotCWVyciA9IHRwLT5hZl9zcGVjaWZpYy0+cXVldWVfeG1pdChza2IsIDApOworCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgMCk7CiAJaWYgKHVubGlrZWx5KGVyciA8PSAwKSkKIAkJcmV0dXJuIGVycjsKIApAQCAtNjIxLDcgKzY5MCw3IEBACiAgICBJdCBpcyBtaW5pbXVtIG9mIHVzZXJfbXNzIGFuZCBtc3MgcmVjZWl2ZWQgd2l0aCBTWU4uCiAgICBJdCBhbHNvIGRvZXMgbm90IGluY2x1ZGUgVENQIG9wdGlvbnMuCiAKLSAgIHRwLT5wbXR1X2Nvb2tpZSBpcyBsYXN0IHBtdHUsIHNlZW4gYnkgdGhpcyBmdW5jdGlvbi4KKyAgIGluZXRfY3NrKHNrKS0+aWNza19wbXR1X2Nvb2tpZSBpcyBsYXN0IHBtdHUsIHNlZW4gYnkgdGhpcyBmdW5jdGlvbi4KIAogICAgdHAtPm1zc19jYWNoZSBpcyBjdXJyZW50IGVmZmVjdGl2ZSBzZW5kaW5nIG1zcywgaW5jbHVkaW5nCiAgICBhbGwgdGNwIG9wdGlvbnMgZXhjZXB0IGZvciBTQUNLcy4gSXQgaXMgZXZhbHVhdGVkLApAQCAtNjMxLDI2ICs3MDAsMjYgQEAKICAgIE5PVEUxLiByZmMxMTIyIGNsZWFybHkgc3RhdGVzIHRoYXQgYWR2ZXJ0aXNlZCBNU1MKICAgIERPRVMgTk9UIGluY2x1ZGUgZWl0aGVyIHRjcCBvciBpcCBvcHRpb25zLgogCi0gICBOT1RFMi4gdHAtPnBtdHVfY29va2llIGFuZCB0cC0+bXNzX2NhY2hlIGFyZSBSRUFEIE9OTFkgb3V0c2lkZQotICAgdGhpcyBmdW5jdGlvbi4JCQktLUFOSyAoOTgwNzMxKQorICAgTk9URTIuIGluZXRfY3NrKHNrKS0+aWNza19wbXR1X2Nvb2tpZSBhbmQgdHAtPm1zc19jYWNoZQorICAgYXJlIFJFQUQgT05MWSBvdXRzaWRlIHRoaXMgZnVuY3Rpb24uCQktLUFOSyAoOTgwNzMxKQogICovCiAKIHVuc2lnbmVkIGludCB0Y3Bfc3luY19tc3Moc3RydWN0IHNvY2sgKnNrLCB1MzIgcG10dSkKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlpbnQgbXNzX25vdzsKLQorCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAkvKiBDYWxjdWxhdGUgYmFzZSBtc3Mgd2l0aG91dCBUQ1Agb3B0aW9uczoKIAkgICBJdCBpcyBNTVNfUyAtIHNpemVvZih0Y3BoZHIpIG9mIHJmYzExMjIKIAkgKi8KLQltc3Nfbm93ID0gcG10dSAtIHRwLT5hZl9zcGVjaWZpYy0+bmV0X2hlYWRlcl9sZW4gLSBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisJaW50IG1zc19ub3cgPSAocG10dSAtIGljc2stPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiAtCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHRjcGhkcikpOwogCiAJLyogQ2xhbXAgaXQgKG1zc19jbGFtcCBkb2VzIG5vdCBpbmNsdWRlIHRjcCBvcHRpb25zKSAqLwogCWlmIChtc3Nfbm93ID4gdHAtPnJ4X29wdC5tc3NfY2xhbXApCiAJCW1zc19ub3cgPSB0cC0+cnhfb3B0Lm1zc19jbGFtcDsKIAogCS8qIE5vdyBzdWJ0cmFjdCBvcHRpb25hbCB0cmFuc3BvcnQgb3ZlcmhlYWQgKi8KLQltc3Nfbm93IC09IHRwLT5leHRfaGVhZGVyX2xlbjsKKwltc3Nfbm93IC09IGljc2stPmljc2tfZXh0X2hkcl9sZW47CiAKIAkvKiBUaGVuIHJlc2VydmUgcm9vbSBmb3IgZnVsbCBzZXQgb2YgVENQIG9wdGlvbnMgYW5kIDggYnl0ZXMgb2YgZGF0YSAqLwogCWlmIChtc3Nfbm93IDwgNDgpCkBAIC02NjQsNyArNzMzLDcgQEAKIAkJbXNzX25vdyA9IG1heCgodHAtPm1heF93aW5kb3c+PjEpLCA2OFUgLSB0cC0+dGNwX2hlYWRlcl9sZW4pOwogCiAJLyogQW5kIHN0b3JlIGNhY2hlZCByZXN1bHRzICovCi0JdHAtPnBtdHVfY29va2llID0gcG10dTsKKwlpY3NrLT5pY3NrX3BtdHVfY29va2llID0gcG10dTsKIAl0cC0+bXNzX2NhY2hlID0gbXNzX25vdzsKIAogCXJldHVybiBtc3Nfbm93OwpAQCAtNjk0LDcgKzc2Myw3IEBACiAKIAlpZiAoZHN0KSB7CiAJCXUzMiBtdHUgPSBkc3RfbXR1KGRzdCk7Ci0JCWlmIChtdHUgIT0gdHAtPnBtdHVfY29va2llKQorCQlpZiAobXR1ICE9IGluZXRfY3NrKHNrKS0+aWNza19wbXR1X2Nvb2tpZSkKIAkJCW1zc19ub3cgPSB0Y3Bfc3luY19tc3Moc2ssIG10dSk7CiAJfQogCkBAIC03MDUsOSArNzc0LDEwIEBACiAJeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OwogCiAJaWYgKGRvaW5nX3RzbykgewotCQl4bWl0X3NpemVfZ29hbCA9IDY1NTM1IC0KLQkJCXRwLT5hZl9zcGVjaWZpYy0+bmV0X2hlYWRlcl9sZW4gLQotCQkJdHAtPmV4dF9oZWFkZXJfbGVuIC0gdHAtPnRjcF9oZWFkZXJfbGVuOworCQl4bWl0X3NpemVfZ29hbCA9ICg2NTUzNSAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gLQorCQkJCSAgdHAtPnRjcF9oZWFkZXJfbGVuKTsKIAogCQlpZiAodHAtPm1heF93aW5kb3cgJiYKIAkJICAgICh4bWl0X3NpemVfZ29hbCA+ICh0cC0+bWF4X3dpbmRvdyA+PiAxKSkpCkBAIC03MjMsNyArNzkzLDcgQEAKIAogLyogQ29uZ2VzdGlvbiB3aW5kb3cgdmFsaWRhdGlvbi4gKFJGQzI4NjEpICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfY3duZF92YWxpZGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHApCitzdGF0aWMgdm9pZCB0Y3BfY3duZF92YWxpZGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7CiAJX191MzIgcGFja2V0c19vdXQgPSB0cC0+cGFja2V0c19vdXQ7CiAKQEAgLTc3Miw3ICs4NDIsNyBAQAogLyogVGhpcyBtdXN0IGJlIGludm9rZWQgdGhlIGZpcnN0IHRpbWUgd2UgY29uc2lkZXIgdHJhbnNtaXR0aW5nCiAgKiBTS0Igb250byB0aGUgd2lyZS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgdGNwX2luaXRfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbXNzX25vdykKK3N0YXRpYyBpbnQgdGNwX2luaXRfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbXNzX25vdykKIHsKIAlpbnQgdHNvX3NlZ3MgPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCkBAIC0xNDIyLDcgKzE0OTIsNyBAQAogCSAgIChzeXNjdGxfdGNwX3JldHJhbnNfY29sbGFwc2UgIT0gMCkpCiAJCXRjcF9yZXRyYW5zX3RyeV9jb2xsYXBzZShzaywgc2tiLCBjdXJfbXNzKTsKIAotCWlmKHRwLT5hZl9zcGVjaWZpYy0+cmVidWlsZF9oZWFkZXIoc2spKQorCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5yZWJ1aWxkX2hlYWRlcihzaykpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOyAvKiBSb3V0aW5nIGZhaWx1cmUgb3Igc2ltaWxhci4gKi8KIAogCS8qIFNvbWUgU29sYXJpcyBzdGFja3Mgb3Zlcm9wdGltaXplIGFuZCBpZ25vcmUgdGhlIEZJTiBvbiBhCkBAIC0xNzkzLDcgKzE4NjMsNyBAQAogLyogCiAgKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuCiAgKi8gCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3ZlZ2FzLmMgYi9uZXQvaXB2NC90Y3BfdmVnYXMuYwppbmRleCAxM2U3ZTZlLi4zYjc0MDM0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdmVnYXMuYworKysgYi9uZXQvaXB2NC90Y3BfdmVnYXMuYwpAQCAtMzMwLDYgKzMzMCwxMCBAQAogCQl2ZWdhcy0+Y250UlRUID0gMDsKIAkJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7CiAJfQorCS8qIFVzZSBub3JtYWwgc2xvdyBzdGFydCAqLworCWVsc2UgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSAKKwkJdGNwX3Nsb3dfc3RhcnQodHApOworCQogfQogCiAvKiBFeHRyYWN0IGluZm8gZm9yIFRjcCBzb2NrZXQgaW5mbyBwcm92aWRlZCB2aWEgbmV0bGluay4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggMjQyMmE1Zi4uMjIzYWJhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTg2LDYgKzg2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvaWdtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtODQ2LDIwICs4NDcsNyBAQAogY3N1bV9jb3B5X2VycjoKIAlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMpOwogCi0JLyogQ2xlYXIgcXVldWUuICovCi0JaWYgKGZsYWdzJk1TR19QRUVLKSB7Ci0JCWludCBjbGVhciA9IDA7Ci0JCXNwaW5fbG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7Ci0JCWlmIChza2IgPT0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgewotCQkJX19za2JfdW5saW5rKHNrYiwgJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKLQkJCWNsZWFyID0gMTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7Ci0JCWlmIChjbGVhcikKLQkJCWtmcmVlX3NrYihza2IpOwotCX0KLQotCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOworCXNrYl9raWxsX2RhdGFncmFtKHNrLCBza2IsIGZsYWdzKTsKIAogCWlmIChub2Jsb2NrKQogCQlyZXR1cm4gLUVBR0FJTjsJCkBAIC0xMDk0LDcgKzEwODIsNyBAQAogICogT3RoZXJ3aXNlLCBjc3VtIGNvbXBsZXRpb24gcmVxdWlyZXMgY2hhY2tzdW1taW5nIHBhY2tldCBib2R5LAogICogaW5jbHVkaW5nIHVkcCBoZWFkZXIgYW5kIGZvbGRpbmcgaXQgdG8gc2tiLT5jc3VtLgogICovCi1zdGF0aWMgaW50IHVkcF9jaGVja3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoLAorc3RhdGljIHZvaWQgdWRwX2NoZWNrc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVkcGhkciAqdWgsCiAJCQkgICAgIHVuc2lnbmVkIHNob3J0IHVsZW4sIHUzMiBzYWRkciwgdTMyIGRhZGRyKQogewogCWlmICh1aC0+Y2hlY2sgPT0gMCkgewpAQCAtMTEwOCw3ICsxMDk2LDYgQEAKIAkvKiBQcm9iYWJseSwgd2Ugc2hvdWxkIGNoZWNrc3VtIHVkcCBoZWFkZXIgKGl0IHNob3VsZCBiZSBpbiBjYWNoZQogCSAqIGluIGFueSBjYXNlKSBhbmQgZGF0YSBpbiB0aW55IHBhY2tldHMgKDwgcnggY29weWJyZWFrKS4KIAkgKi8KLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTExNDEsOCArMTEyOCw3IEBACiAJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHVsZW4pKQogCQlnb3RvIHNob3J0X3BhY2tldDsKIAotCWlmICh1ZHBfY2hlY2tzdW1faW5pdChza2IsIHVoLCB1bGVuLCBzYWRkciwgZGFkZHIpIDwgMCkKLQkJZ290byBjc3VtX2Vycm9yOworCXVkcF9jaGVja3N1bV9pbml0KHNrYiwgdWgsIHVsZW4sIHNhZGRyLCBkYWRkcik7CiAKIAlpZihydC0+cnRfZmxhZ3MgJiAoUlRDRl9CUk9BRENBU1R8UlRDRl9NVUxUSUNBU1QpKQogCQlyZXR1cm4gdWRwX3Y0X21jYXN0X2RlbGl2ZXIoc2tiLCB1aCwgc2FkZHIsIGRhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGUKaW5kZXggNjQ2MGVlYy4uOTYwMWZkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjYvTWFrZWZpbGUKQEAgLTgsNyArOCw4IEBACiAJCXJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIHJhdy5vIFwKIAkJcHJvdG9jb2wubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBcCiAJCWV4dGhkcnMubyBzeXNjdGxfbmV0X2lwdjYubyBkYXRhZ3JhbS5vIHByb2MubyBcCi0JCWlwNl9mbG93bGFiZWwubyBpcHY2X3N5bXMubyBuZXRmaWx0ZXIubworCQlpcDZfZmxvd2xhYmVsLm8gaXB2Nl9zeW1zLm8gbmV0ZmlsdGVyLm8gXAorCQlpbmV0Nl9jb25uZWN0aW9uX3NvY2subwogCiBpcHY2LSQoQ09ORklHX1hGUk0pICs9IHhmcm02X3BvbGljeS5vIHhmcm02X3N0YXRlLm8geGZybTZfaW5wdXQubyBcCiAJeGZybTZfb3V0cHV0Lm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGE2MDU4NWYuLjcwNGZiNzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMTE5NSw3ICsxMTk1LDcgQEAKIGludCBpcHY2X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCiB7CiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpza19yY3Zfc2FkZHI2ID0gJmluZXQ2X3NrKHNrKS0+cmN2X3NhZGRyOwotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2syX3Jjdl9zYWRkcjYgPSB0Y3BfdjZfcmN2X3NhZGRyKHNrMik7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOwogCXUzMiBza19yY3Zfc2FkZHIgPSBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOwogCXUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKIAlpbnQgc2tfaXB2Nm9ubHkgPSBpcHY2X29ubHlfc29jayhzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBkOTU0NjM4Li42OGFmYzUzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTE2Nyw2ICsxNjcsNyBAQAogCQlzay0+c2tfcmV1c2UgPSAxOwogCiAJaW5ldCA9IGluZXRfc2soc2spOworCWluZXQtPmlzX2ljc2sgPSBJTkVUX1BST1RPU1dfSUNTSyAmIGFuc3dlcl9mbGFnczsKIAogCWlmIChTT0NLX1JBVyA9PSBzb2NrLT50eXBlKSB7CiAJCWluZXQtPm51bSA9IHByb3RvY29sOwpAQCAtMzg5LDYgKzM5MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXQ2X2Rlc3Ryb3lfc29jayk7CisKIC8qCiAgKglUaGlzIGRvZXMgYm90aCBwZWVybmFtZSBhbmQgc29ja25hbWUuCiAgKi8KQEAgLTQzMSw3ICs0MzQsNiBAQAogaW50IGluZXQ2X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCWludCBlcnIgPSAtRUlOVkFMOwogCiAJc3dpdGNoKGNtZCkgCiAJewpAQCAtNDUwLDE2ICs0NTIsMTUgQEAKIAljYXNlIFNJT0NTSUZEU1RBRERSOgogCQlyZXR1cm4gYWRkcmNvbmZfc2V0X2RzdGFkZHIoKHZvaWQgX191c2VyICopIGFyZyk7CiAJZGVmYXVsdDoKLQkJaWYgKCFzay0+c2tfcHJvdC0+aW9jdGwgfHwKLQkJICAgIChlcnIgPSBzay0+c2tfcHJvdC0+aW9jdGwoc2ssIGNtZCwgYXJnKSkgPT0gLUVOT0lPQ1RMQ01EKQotCQkJcmV0dXJuKGRldl9pb2N0bChjbWQsKHZvaWQgX191c2VyICopIGFyZykpOwkJCi0JCXJldHVybiBlcnI7CisJCWlmICghc2stPnNrX3Byb3QtPmlvY3RsKQorCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJcmV0dXJuIHNrLT5za19wcm90LT5pb2N0bChzaywgY21kLCBhcmcpOwogCX0KIAkvKk5PVFJFQUNIRUQqLwogCXJldHVybigwKTsKIH0KIAotc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zdHJlYW1fb3BzID0geworY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zdHJlYW1fb3BzID0gewogCS5mYW1pbHkgPQlQRl9JTkVUNiwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CWluZXQ2X3JlbGVhc2UsCkBAIC00ODAsNyArNDgxLDcgQEAKIAkuc2VuZHBhZ2UgPQl0Y3Bfc2VuZHBhZ2UKIH07CiAKLXN0cnVjdCBwcm90b19vcHMgaW5ldDZfZGdyYW1fb3BzID0geworY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9kZ3JhbV9vcHMgPSB7CiAJLmZhbWlseSA9CVBGX0lORVQ2LAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWxlYXNlID0JaW5ldDZfcmVsZWFzZSwKQEAgLTUwOCw3ICs1MDksNyBAQAogfTsKIAogLyogU2FtZSBhcyBpbmV0Nl9kZ3JhbV9vcHMsIHNhbnMgdWRwX3BvbGwuICAqLwotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc29ja3Jhd19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zb2NrcmF3X29wcyA9IHsKIAkuZmFtaWx5ID0JUEZfSU5FVDYsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPQlpbmV0Nl9yZWxlYXNlLApAQCAtNjA5LDYgKzYxMCw3OSBAQAogCX0KIH0KIAoraW50IGluZXQ2X3NrX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisKKwlkc3QgPSBfX3NrX2RzdF9jaGVjayhzaywgbnAtPmRzdF9jb29raWUpOworCisJaWYgKGRzdCA9PSBOVUxMKSB7CisJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwkJc3RydWN0IGluNl9hZGRyICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CisJCXN0cnVjdCBmbG93aSBmbDsKKworCQltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKKwkJZmwucHJvdG8gPSBzay0+c2tfcHJvdG9jb2w7CisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmbnAtPmRhZGRyKTsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZucC0+c2FkZHIpOworCQlmbC5mbDZfZmxvd2xhYmVsID0gbnAtPmZsb3dfbGFiZWw7CisJCWZsLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJCWZsLmZsX2lwX2Rwb3J0ID0gaW5ldC0+ZHBvcnQ7CisJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+c3BvcnQ7CisKKwkJaWYgKG5wLT5vcHQgJiYgbnAtPm9wdC0+c3JjcnQpIHsKKwkJCXN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKikgbnAtPm9wdC0+c3JjcnQ7CisJCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKKwkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOworCQkJZmluYWxfcCA9ICZmaW5hbDsKKwkJfQorCisJCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOworCQlpZiAoZXJyKSB7CisJCQlzay0+c2tfcm91dGVfY2FwcyA9IDA7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChmaW5hbF9wKQorCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGZpbmFsX3ApOworCisJCWlmICgoZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMCkpIDwgMCkgeworCQkJc2stPnNrX2Vycl9zb2Z0ID0gLWVycjsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwpOworCQlzay0+c2tfcm91dGVfY2FwcyA9IGRzdC0+ZGV2LT5mZWF0dXJlcyAmCisJCQl+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaW5ldDZfc2tfcmVidWlsZF9oZWFkZXIpOworCitpbnQgaXB2Nl9vcHRfYWNjZXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7CisKKwlpZiAobnAtPnJ4b3B0LmFsbCkgeworCQlpZiAoKG9wdC0+aG9wICYmIChucC0+cnhvcHQuYml0cy5ob3BvcHRzIHx8CisJCQkJICBucC0+cnhvcHQuYml0cy5vaG9wb3B0cykpIHx8CisJCSAgICAoKElQVjZfRkxPV0lORk9fTUFTSyAmICoodTMyKilza2ItPm5oLnJhdykgJiYKKwkJICAgICBucC0+cnhvcHQuYml0cy5yeGZsb3cpIHx8CisJCSAgICAob3B0LT5zcmNydCAmJiAobnAtPnJ4b3B0LmJpdHMuc3JjcnQgfHwKKwkJICAgICBucC0+cnhvcHQuYml0cy5vc3JjcnQpKSB8fAorCQkgICAgKChvcHQtPmRzdDEgfHwgb3B0LT5kc3QwKSAmJgorCQkgICAgIChucC0+cnhvcHQuYml0cy5kc3RvcHRzIHx8IG5wLT5yeG9wdC5iaXRzLm9kc3RvcHRzKSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwdjZfb3B0X2FjY2VwdGVkKTsKKwogaW50CiBzbm1wNl9taWJfaW5pdCh2b2lkICpwdHJbMl0sIHNpemVfdCBtaWJzaXplLCBzaXplX3QgbWliYWxpZ24pCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9haDYuYyBiL25ldC9pcHY2L2FoNi5jCmluZGV4IGYzNjI5NzMuLjEzY2M3ZjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FoNi5jCisrKyBiL25ldC9pcHY2L2FoNi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA4YmZiZTk5Li42ZGU4ZWUxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogCiBzdGF0aWMgaW50IGVzcDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jCmluZGV4IGJlNmZhZjMuLjExMzM3NGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2V4dGhkcnMuYworKysgYi9uZXQvaXB2Ni9leHRoZHJzLmMKQEAgLTQxMyw2ICs0MTMsOCBAQAogCXJldHVybiBvcHQ7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGlwdjZfaW52ZXJ0X3J0aGRyKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgSG9wLWJ5LWhvcCBvcHRpb25zLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NzksNiArNTgxLDggQEAKIAlyZXR1cm4gb3B0MjsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoaXB2Nl9kdXBfb3B0aW9ucyk7CisKIHN0YXRpYyBpbnQgaXB2Nl9yZW5ld19vcHRpb24odm9pZCAqb2hkciwKIAkJCSAgICAgc3RydWN0IGlwdjZfb3B0X2hkciBfX3VzZXIgKm5ld29wdCwgaW50IG5ld29wdGxlbiwKIAkJCSAgICAgaW50IGluaGVyaXQsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MmY5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIElORVQgICAgICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICogICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0CisgKiAgICAgICAgICAgICBpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKiAgICAgICAgICAgICBTdXBwb3J0IGZvciBJTkVUNiBjb25uZWN0aW9uIG9yaWVudGVkIHByb3RvY29scy4KKyAqCisgKiBBdXRob3JzOiAgICBTZWUgdGhlIFRDUHY2IHNvdXJjZXMKKyAqCisgKiAgICAgICAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgICAgICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICAgICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgICAgICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvcihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorCisjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CisjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L2luZXRfaGFzaHRhYmxlcy5oPgorI2luY2x1ZGUgPG5ldC9pcDZfcm91dGUuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCitpbnQgaW5ldDZfY3NrX2JpbmRfY29uZmxpY3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YikKK3sKKwljb25zdCBzdHJ1Y3Qgc29jayAqc2syOworCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCisJLyogV2UgbXVzdCB3YWxrIHRoZSB3aG9sZSBwb3J0IG93bmVyIGxpc3QgaW4gdGhpcyBjYXNlLiAtRGF2ZU0gKi8KKwlza19mb3JfZWFjaF9ib3VuZChzazIsIG5vZGUsICZ0Yi0+b3duZXJzKSB7CisJCWlmIChzayAhPSBzazIgJiYKKwkJICAgICghc2stPnNrX2JvdW5kX2Rldl9pZiB8fAorCQkgICAgICFzazItPnNrX2JvdW5kX2Rldl9pZiB8fAorCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpICYmCisJCSAgICAoIXNrLT5za19yZXVzZSB8fCAhc2syLT5za19yZXVzZSB8fAorCQkgICAgIHNrMi0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgJiYKKwkJICAgICBpcHY2X3Jjdl9zYWRkcl9lcXVhbChzaywgc2syKSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBub2RlICE9IE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXQ2X2Nza19iaW5kX2NvbmZsaWN0KTsKKworLyoKKyAqIHJlcXVlc3Rfc29jayAoZm9ybWVybHkgb3BlbiByZXF1ZXN0KSBoYXNoIHRhYmxlcy4KKyAqLworc3RhdGljIHUzMiBpbmV0Nl9zeW5xX2hhc2goY29uc3Qgc3RydWN0IGluNl9hZGRyICpyYWRkciwgY29uc3QgdTE2IHJwb3J0LAorCQkJICAgY29uc3QgdTMyIHJuZCwgY29uc3QgdTE2IHN5bnFfaHNpemUpCit7CisJdTMyIGEgPSByYWRkci0+czZfYWRkcjMyWzBdOworCXUzMiBiID0gcmFkZHItPnM2X2FkZHIzMlsxXTsKKwl1MzIgYyA9IHJhZGRyLT5zNl9hZGRyMzJbMl07CisKKwlhICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKKwliICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKKwljICs9IHJuZDsKKwlfX2poYXNoX21peChhLCBiLCBjKTsKKworCWEgKz0gcmFkZHItPnM2X2FkZHIzMlszXTsKKwliICs9ICh1MzIpcnBvcnQ7CisJX19qaGFzaF9taXgoYSwgYiwgYyk7CisKKwlyZXR1cm4gYyAmIChzeW5xX2hzaXplIC0gMSk7Cit9CisKK3N0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXQ2X2Nza19zZWFyY2hfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICoqKnByZXZwLAorCQkJCQkgIGNvbnN0IF9fdTE2IHJwb3J0LAorCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmFkZHIsCisJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkciwKKwkJCQkJICBjb25zdCBpbnQgaWlmKQoreworCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwlzdHJ1Y3QgbGlzdGVuX3NvY2sgKmxvcHQgPSBpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5saXN0ZW5fb3B0OworCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgKipwcmV2OworCisJZm9yIChwcmV2ID0gJmxvcHQtPnN5bl90YWJsZVtpbmV0Nl9zeW5xX2hhc2gocmFkZHIsIHJwb3J0LAorCQkJCQkJICAgICBsb3B0LT5oYXNoX3JuZCwKKwkJCQkJCSAgICAgbG9wdC0+bnJfdGFibGVfZW50cmllcyldOworCSAgICAgKHJlcSA9ICpwcmV2KSAhPSBOVUxMOworCSAgICAgcHJldiA9ICZyZXEtPmRsX25leHQpIHsKKwkJY29uc3Qgc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqdHJlcSA9IGluZXQ2X3JzayhyZXEpOworCisJCWlmIChpbmV0X3JzayhyZXEpLT5ybXRfcG9ydCA9PSBycG9ydCAmJgorCQkgICAgcmVxLT5yc2tfb3BzLT5mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmdHJlcS0+cm10X2FkZHIsIHJhZGRyKSAmJgorCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZ0cmVxLT5sb2NfYWRkciwgbGFkZHIpICYmCisJCSAgICAoIXRyZXEtPmlpZiB8fCB0cmVxLT5paWYgPT0gaWlmKSkgeworCQkJQlVHX1RSQVAocmVxLT5zayA9PSBOVUxMKTsKKwkJCSpwcmV2cCA9IHByZXY7CisJCQlyZXR1cm4gcmVxOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXQ2X2Nza19zZWFyY2hfcmVxKTsKKwordm9pZCBpbmV0Nl9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisJc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0ID0gaWNzay0+aWNza19hY2NlcHRfcXVldWUubGlzdGVuX29wdDsKKwljb25zdCB1MzIgaCA9IGluZXQ2X3N5bnFfaGFzaCgmaW5ldDZfcnNrKHJlcSktPnJtdF9hZGRyLAorCQkJCSAgICAgIGluZXRfcnNrKHJlcSktPnJtdF9wb3J0LAorCQkJCSAgICAgIGxvcHQtPmhhc2hfcm5kLCBsb3B0LT5ucl90YWJsZV9lbnRyaWVzKTsKKworCXJlcXNrX3F1ZXVlX2hhc2hfcmVxKCZpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZSwgaCwgcmVxLCB0aW1lb3V0KTsKKwlpbmV0X2Nza19yZXFza19xdWV1ZV9hZGRlZChzaywgdGltZW91dCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXQ2X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZCk7CisKK3ZvaWQgaW5ldDZfY3NrX2FkZHIyc29ja2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKiB1YWRkcikKK3sKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHVhZGRyOworCisJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwlpcHY2X2FkZHJfY29weSgmc2luNi0+c2luNl9hZGRyLCAmbnAtPmRhZGRyKTsKKwlzaW42LT5zaW42X3BvcnQJPSBpbmV0X3NrKHNrKS0+ZHBvcnQ7CisJLyogV2UgZG8gbm90IHN0b3JlIHJlY2VpdmVkIGZsb3dsYWJlbCBmb3IgVENQICovCisJc2luNi0+c2luNl9mbG93aW5mbyA9IDA7CisJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7CisJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYgJiYKKwkgICAgaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKQorCQlzaW42LT5zaW42X3Njb3BlX2lkID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaW5ldDZfY3NrX2FkZHIyc29ja2FkZHIpOworCitpbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwZnJhZ29rKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CisJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3QgZmxvd2kgZmw7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCXN0cnVjdCBpbjZfYWRkciAqZmluYWxfcCA9IE5VTEwsIGZpbmFsOworCisJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7CisJZmwucHJvdG8gPSBzay0+c2tfcHJvdG9jb2w7CisJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZucC0+ZGFkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmbnAtPnNhZGRyKTsKKwlmbC5mbDZfZmxvd2xhYmVsID0gbnAtPmZsb3dfbGFiZWw7CisJSVA2X0VDTl9mbG93X3htaXQoc2ssIGZsLmZsNl9mbG93bGFiZWwpOworCWZsLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJZmwuZmxfaXBfc3BvcnQgPSBpbmV0LT5zcG9ydDsKKwlmbC5mbF9pcF9kcG9ydCA9IGluZXQtPmRwb3J0OworCisJaWYgKG5wLT5vcHQgJiYgbnAtPm9wdC0+c3JjcnQpIHsKKwkJc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKW5wLT5vcHQtPnNyY3J0OworCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7CisJCWZpbmFsX3AgPSAmZmluYWw7CisJfQorCisJZHN0ID0gX19za19kc3RfY2hlY2soc2ssIG5wLT5kc3RfY29va2llKTsKKworCWlmIChkc3QgPT0gTlVMTCkgeworCQlpbnQgZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCk7CisKKwkJaWYgKGVycikgeworCQkJc2stPnNrX2Vycl9zb2Z0ID0gLWVycjsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpZiAoZmluYWxfcCkKKwkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBmaW5hbF9wKTsKKworCQlpZiAoKGVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDApKSA8IDApIHsKKwkJCXNrLT5za19yb3V0ZV9jYXBzID0gMDsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwpOworCQlzay0+c2tfcm91dGVfY2FwcyA9IGRzdC0+ZGV2LT5mZWF0dXJlcyAmCisJCQl+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKKwl9CisKKwlza2ItPmRzdCA9IGRzdF9jbG9uZShkc3QpOworCisJLyogUmVzdG9yZSBmaW5hbCBkZXN0aW5hdGlvbiBiYWNrIGFmdGVyIHJvdXRpbmcgZG9uZSAqLworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmbnAtPmRhZGRyKTsKKworCXJldHVybiBpcDZfeG1pdChzaywgc2tiLCAmZmwsIG5wLT5vcHQsIDApOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpbmV0Nl9jc2tfeG1pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKaW5kZXggMDFkNWY0Ni4uNDE1NGYzYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwpAQCAtNSw3ICs1LDggQEAKICAqCiAgKgkJR2VuZXJpYyBJTkVUNiB0cmFuc3BvcnQgaGFzaHRhYmxlcwogICoKLSAqIEF1dGhvcnM6CUxvdHNhIHBlb3BsZSwgZnJvbSBjb2RlIG9yaWdpbmFsbHkgaW4gdGNwCisgKiBBdXRob3JzOglMb3RzYSBwZW9wbGUsIGZyb20gY29kZSBvcmlnaW5hbGx5IGluIHRjcCwgZ2VuZXJhbGlzZWQgaGVyZQorICogCQlieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAbWFuZHJpdmEuY29tPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE0LDEyICsxNSwxMyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfaGFzaHRhYmxlcy5oPgogI2luY2x1ZGUgPG5ldC9pbmV0Nl9oYXNodGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAKIHN0cnVjdCBzb2NrICppbmV0Nl9sb29rdXBfbGlzdGVuZXIoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCkBAIC03OSwzICs4MSwxODAgQEAKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldDZfbG9va3VwKTsKKworc3RhdGljIGludCBfX2luZXQ2X2NoZWNrX2VzdGFibGlzaGVkKHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyAqZGVhdGhfcm93LAorCQkJCSAgICAgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX3UxNiBscG9ydCwKKwkJCQkgICAgIHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKip0d3ApCit7CisJc3RydWN0IGluZXRfaGFzaGluZm8gKmhpbmZvID0gZGVhdGhfcm93LT5oYXNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJY29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIgPSAmbnAtPnJjdl9zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJm5wLT5kYWRkcjsKKwljb25zdCBpbnQgZGlmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKKwljb25zdCB1MzIgcG9ydHMgPSBJTkVUX0NPTUJJTkVEX1BPUlRTKGluZXQtPmRwb3J0LCBscG9ydCk7CisJY29uc3QgdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBpbmV0LT5udW0sIHNhZGRyLAorCQkJCQkJaW5ldC0+ZHBvcnQpOworCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhpbmZvLCBoYXNoKTsKKwlzdHJ1Y3Qgc29jayAqc2syOworCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3OworCisJcHJlZmV0Y2goaGVhZC0+Y2hhaW4uZmlyc3QpOworCXdyaXRlX2xvY2soJmhlYWQtPmxvY2spOworCisJLyogQ2hlY2sgVElNRS1XQUlUIHNvY2tldHMgZmlyc3QuICovCisJc2tfZm9yX2VhY2goc2syLCBub2RlLCAmKGhlYWQgKyBoaW5mby0+ZWhhc2hfc2l6ZSktPmNoYWluKSB7CisJCWNvbnN0IHN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPSBpbmV0Nl90d3NrKHNrMik7CisKKwkJdHcgPSBpbmV0X3R3c2soc2syKTsKKworCQlpZigqKChfX3UzMiAqKSYodHctPnR3X2Rwb3J0KSkgPT0gcG9ydHMJCSAmJgorCQkgICBzazItPnNrX2ZhbWlseQkgICAgICAgPT0gUEZfSU5FVDYJICYmCisJCSAgIGlwdjZfYWRkcl9lcXVhbCgmdHc2LT50d192Nl9kYWRkciwgc2FkZHIpCSAmJgorCQkgICBpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikgJiYKKwkJICAgc2syLT5za19ib3VuZF9kZXZfaWYgPT0gc2stPnNrX2JvdW5kX2Rldl9pZikgeworCQkJaWYgKHR3c2tfdW5pcXVlKHNrLCBzazIsIHR3cCkpCisJCQkJZ290byB1bmlxdWU7CisJCQllbHNlCisJCQkJZ290byBub3RfdW5pcXVlOworCQl9CisJfQorCXR3ID0gTlVMTDsKKworCS8qIEFuZCBlc3RhYmxpc2hlZCBwYXJ0Li4uICovCisJc2tfZm9yX2VhY2goc2syLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKKwkJaWYgKElORVQ2X01BVENIKHNrMiwgaGFzaCwgc2FkZHIsIGRhZGRyLCBwb3J0cywgZGlmKSkKKwkJCWdvdG8gbm90X3VuaXF1ZTsKKwl9CisKK3VuaXF1ZToKKwlCVUdfVFJBUChza191bmhhc2hlZChzaykpOworCV9fc2tfYWRkX25vZGUoc2ssICZoZWFkLT5jaGFpbik7CisJc2stPnNrX2hhc2ggPSBoYXNoOworCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKKwl3cml0ZV91bmxvY2soJmhlYWQtPmxvY2spOworCisJaWYgKHR3cCAhPSBOVUxMKSB7CisJCSp0d3AgPSB0dzsKKwkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7CisJfSBlbHNlIGlmICh0dyAhPSBOVUxMKSB7CisJCS8qIFNpbGx5LiBTaG91bGQgaGFzaC1kYW5jZSBpbnN0ZWFkLi4uICovCisJCWluZXRfdHdza19kZXNjaGVkdWxlKHR3LCBkZWF0aF9yb3cpOworCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9USU1FV0FJVFJFQ1lDTEVEKTsKKworCQlpbmV0X3R3c2tfcHV0KHR3KTsKKwl9CisJcmV0dXJuIDA7CisKK25vdF91bmlxdWU6CisJd3JpdGVfdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGluZXQ2X3NrX3BvcnRfb2Zmc2V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJY29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXJldHVybiBzZWN1cmVfaXB2Nl9wb3J0X2VwaGVtZXJhbChucC0+cmN2X3NhZGRyLnM2X2FkZHIzMiwKKwkJCQkJICBucC0+ZGFkZHIuczZfYWRkcjMyLAorCQkJCQkgIGluZXQtPmRwb3J0KTsKK30KKworaW50IGluZXQ2X2hhc2hfY29ubmVjdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9kZWF0aF9yb3cgKmRlYXRoX3JvdywKKwkJICAgICAgIHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGluZm8gPSBkZWF0aF9yb3ctPmhhc2hpbmZvOworCWNvbnN0IHVuc2lnbmVkIHNob3J0IHNudW0gPSBpbmV0X3NrKHNrKS0+bnVtOworIAlzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmhlYWQ7CisgCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKKwlpbnQgcmV0OworCisgCWlmIChzbnVtID09IDApIHsKKyAJCWNvbnN0IGludCBsb3cgPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXTsKKyAJCWNvbnN0IGludCBoaWdoID0gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMV07CisJCWNvbnN0IGludCByYW5nZSA9IGhpZ2ggLSBsb3c7CisgCQlpbnQgaSwgcG9ydDsKKwkJc3RhdGljIHUzMiBoaW50OworCQljb25zdCB1MzIgb2Zmc2V0ID0gaGludCArIGluZXQ2X3NrX3BvcnRfb2Zmc2V0KHNrKTsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisgCQlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IE5VTEw7CisKKyAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwkJZm9yIChpID0gMTsgaSA8PSByYW5nZTsgaSsrKSB7CisJCQlwb3J0ID0gbG93ICsgKGkgKyBvZmZzZXQpICUgcmFuZ2U7CisgCQkJaGVhZCA9ICZoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKHBvcnQsIGhpbmZvLT5iaGFzaF9zaXplKV07CisgCQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKKworIAkJCS8qIERvZXMgbm90IGJvdGhlciB3aXRoIHJjdl9zYWRkciBjaGVja3MsCisgCQkJICogYmVjYXVzZSB0aGUgZXN0YWJsaXNoZWQgY2hlY2sgaXMgYWxyZWFkeQorIAkJCSAqIHVuaXF1ZSBlbm91Z2guCisgCQkJICovCisJCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKKyAJCQkJaWYgKHRiLT5wb3J0ID09IHBvcnQpIHsKKyAJCQkJCUJVR19UUkFQKCFobGlzdF9lbXB0eSgmdGItPm93bmVycykpOworIAkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPj0gMCkKKyAJCQkJCQlnb3RvIG5leHRfcG9ydDsKKyAJCQkJCWlmICghX19pbmV0Nl9jaGVja19lc3RhYmxpc2hlZChkZWF0aF9yb3csCisJCQkJCQkJCSAgICAgICBzaywgcG9ydCwKKwkJCQkJCQkJICAgICAgICZ0dykpCisgCQkJCQkJZ290byBvazsKKyAJCQkJCWdvdG8gbmV4dF9wb3J0OworIAkJCQl9CisgCQkJfQorCisgCQkJdGIgPSBpbmV0X2JpbmRfYnVja2V0X2NyZWF0ZShoaW5mby0+YmluZF9idWNrZXRfY2FjaGVwLAorCQkJCQkJICAgICBoZWFkLCBwb3J0KTsKKyAJCQlpZiAoIXRiKSB7CisgCQkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKyAJCQkJYnJlYWs7CisgCQkJfQorIAkJCXRiLT5mYXN0cmV1c2UgPSAtMTsKKyAJCQlnb3RvIG9rOworCisgCQluZXh0X3BvcnQ6CisgCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOworIAkJfQorIAkJbG9jYWxfYmhfZW5hYmxlKCk7CisKKyAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworb2s6CisJCWhpbnQgKz0gaTsKKworIAkJLyogSGVhZCBsb2NrIHN0aWxsIGhlbGQgYW5kIGJoJ3MgZGlzYWJsZWQgKi8KKyAJCWluZXRfYmluZF9oYXNoKHNrLCB0YiwgcG9ydCk7CisJCWlmIChza191bmhhc2hlZChzaykpIHsKKyAJCQlpbmV0X3NrKHNrKS0+c3BvcnQgPSBodG9ucyhwb3J0KTsKKyAJCQlfX2luZXQ2X2hhc2goaGluZm8sIHNrKTsKKyAJCX0KKyAJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKworIAkJaWYgKHR3KSB7CisgCQkJaW5ldF90d3NrX2Rlc2NoZWR1bGUodHcsIGRlYXRoX3Jvdyk7CisgCQkJaW5ldF90d3NrX3B1dCh0dyk7CisgCQl9CisKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisgCX0KKworIAloZWFkID0gJmhpbmZvLT5iaGFzaFtpbmV0X2JoYXNoZm4oc251bSwgaGluZm8tPmJoYXNoX3NpemUpXTsKKyAJdGIgICA9IGluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2g7CisJc3Bpbl9sb2NrX2JoKCZoZWFkLT5sb2NrKTsKKworCWlmIChza19oZWFkKCZ0Yi0+b3duZXJzKSA9PSBzayAmJiBzay0+c2tfYmluZF9ub2RlLm5leHQgPT0gTlVMTCkgeworCQlfX2luZXQ2X2hhc2goaGluZm8sIHNrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmhlYWQtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CisJCS8qIE5vIGRlZmluaXRlIGFuc3dlci4uLiBXYWxrIHRvIGVzdGFibGlzaGVkIGhhc2ggdGFibGUgKi8KKwkJcmV0ID0gX19pbmV0Nl9jaGVja19lc3RhYmxpc2hlZChkZWF0aF9yb3csIHNrLCBzbnVtLCBOVUxMKTsKK291dDoKKwkJbG9jYWxfYmhfZW5hYmxlKCk7CisJCXJldHVybiByZXQ7CisJfQorfQorCitFWFBPUlRfU1lNQk9MX0dQTChpbmV0Nl9oYXNoX2Nvbm5lY3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jIGIvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCmluZGV4IDFjZjAyNzYuLjg5ZDEyYjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYworKysgYi9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKQEAgLTIwMCw2ICsyMDAsOCBAQAogCXJldHVybiBOVUxMOwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChmbDZfc29ja19sb29rdXApOworCiB2b2lkIGZsNl9mcmVlX3NvY2tsaXN0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggODUyM2M3Ni4uYjRjNGJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtNzc1LDYgKzc3NSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoaXA2X2RzdF9sb29rdXApOworCiBzdGF0aWMgaW5saW5lIGludCBpcDZfdWZvX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywKIAkJCWludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLAogCQkJaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggNTU5MTdmYi4uNjI2ZGQzOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCAzNjIwNzE4Li5jNjM4NjhkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0xNjMsMTcgKzE2MywxNyBAQAogCQkJc2tfcmVmY250X2RlYnVnX2RlYyhzayk7CiAKIAkJCWlmIChzay0+c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHsKLQkJCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwkJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKIAkJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJCQkJc29ja19wcm90X2RlY191c2Uoc2stPnNrX3Byb3QpOwogCQkJCXNvY2tfcHJvdF9pbmNfdXNlKCZ0Y3BfcHJvdCk7CiAJCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCQkJc2stPnNrX3Byb3QgPSAmdGNwX3Byb3Q7Ci0JCQkJdHAtPmFmX3NwZWNpZmljID0gJmlwdjRfc3BlY2lmaWM7CisJCQkJaWNzay0+aWNza19hZl9vcHMgPSAmaXB2NF9zcGVjaWZpYzsKIAkJCQlzay0+c2tfc29ja2V0LT5vcHMgPSAmaW5ldF9zdHJlYW1fb3BzOwogCQkJCXNrLT5za19mYW1pbHkgPSBQRl9JTkVUOwotCQkJCXRjcF9zeW5jX21zcyhzaywgdHAtPnBtdHVfY29va2llKTsKKwkJCQl0Y3Bfc3luY19tc3Moc2ssIGljc2stPmljc2tfcG10dV9jb29raWUpOwogCQkJfSBlbHNlIHsKIAkJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJCQkJc29ja19wcm90X2RlY191c2Uoc2stPnNrX3Byb3QpOwpAQCAtMzE3LDE0ICszMTcsMTUgQEAKIAkJfQogCiAJCXJldHYgPSAwOwotCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0pIHsKKwkJaWYgKGluZXRfc2soc2spLT5pc19pY3NrKSB7CiAJCQlpZiAob3B0KSB7Ci0JCQkJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCQkJCWlmICghKCgxIDw8IHNrLT5za19zdGF0ZSkgJgogCQkJCSAgICAgIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKQogCQkJCSAgICAmJiBpbmV0X3NrKHNrKS0+ZGFkZHIgIT0gTE9PUEJBQ0s0X0lQVjYpIHsKLQkJCQkJdHAtPmV4dF9oZWFkZXJfbGVuID0gb3B0LT5vcHRfZmxlbiArIG9wdC0+b3B0X25mbGVuOwotCQkJCQl0Y3Bfc3luY19tc3Moc2ssIHRwLT5wbXR1X2Nvb2tpZSk7CisJCQkJCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPQorCQkJCQkJb3B0LT5vcHRfZmxlbiArIG9wdC0+b3B0X25mbGVuOworCQkJCQlpY3NrLT5pY3NrX3N5bmNfbXNzKHNrLCBpY3NrLT5pY3NrX3BtdHVfY29va2llKTsKIAkJCQl9CiAJCQl9CiAJCQlvcHQgPSB4Y2hnKCZucC0+b3B0LCBvcHQpOwpAQCAtMzgwLDE0ICszODEsMTUgQEAKIAkJCWdvdG8gZG9uZTsKIHVwZGF0ZToKIAkJcmV0diA9IDA7Ci0JCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkgeworCQlpZiAoaW5ldF9zayhzayktPmlzX2ljc2spIHsKIAkJCWlmIChvcHQpIHsKLQkJCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwkJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJCQkJaWYgKCEoKDEgPDwgc2stPnNrX3N0YXRlKSAmCiAJCQkJICAgICAgKFRDUEZfTElTVEVOIHwgVENQRl9DTE9TRSkpCiAJCQkJICAgICYmIGluZXRfc2soc2spLT5kYWRkciAhPSBMT09QQkFDSzRfSVBWNikgewotCQkJCQl0cC0+ZXh0X2hlYWRlcl9sZW4gPSBvcHQtPm9wdF9mbGVuICsgb3B0LT5vcHRfbmZsZW47Ci0JCQkJCXRjcF9zeW5jX21zcyhzaywgdHAtPnBtdHVfY29va2llKTsKKwkJCQkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9CisJCQkJCQlvcHQtPm9wdF9mbGVuICsgb3B0LT5vcHRfbmZsZW47CisJCQkJCWljc2stPmljc2tfc3luY19tc3Moc2ssIGljc2stPmljc2tfcG10dV9jb29raWUpOwogCQkJCX0KIAkJCX0KIAkJCW9wdCA9IHhjaGcoJm5wLT5vcHQsIG9wdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCBmODI5YTRhLi4xY2YzMDVhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiAJbWNfbHN0LT5pZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCW1jX2xzdC0+c2Ztb2RlID0gTUNBU1RfRVhDTFVERTsKLQltY19sc3QtPnNmbG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CisJcndsb2NrX2luaXQoJm1jX2xzdC0+c2Zsb2NrKTsKIAltY19sc3QtPnNmbGlzdCA9IE5VTEw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggOTVkNDY5Mi4uZWE0M2VmMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiAgICAgIC0gbmV3IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2VyIGNvZGUKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTg2LDExICs4Nyw2IEBACiAgICBjb250ZXh0IHN0b3BzIHBhY2tldHMgY29taW5nIHRocm91Z2ggYW5kIGFsbG93cyB1c2VyIGNvbnRleHQgdG8gcmVhZAogICAgdGhlIGNvdW50ZXJzIG9yIHVwZGF0ZSB0aGUgcnVsZXMuCiAKLSAgIFRvIGJlIGNhY2hlIGZyaWVuZGx5IG9uIFNNUCwgd2UgYXJyYW5nZSB0aGVtIGxpa2Ugc286Ci0gICBbIG4tZW50cmllcyBdCi0gICAuLi4gY2FjaGUtYWxpZ24gcGFkZGluZyAuLi4KLSAgIFsgbi1lbnRyaWVzIF0KLQogICAgSGVuY2UgdGhlIHN0YXJ0IG9mIGFueSB0YWJsZSBpcyBnaXZlbiBieSBnZXRfdGFibGUoKSBiZWxvdy4gICovCiAKIC8qIFRoZSB0YWJsZSBpdHNlbGYgKi8KQEAgLTEwOCwyMCArMTA0LDE1IEBACiAJdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9JUDZfTlVNSE9PS1NdOwogCiAJLyogaXA2dF9lbnRyeSB0YWJsZXM6IG9uZSBwZXIgQ1BVICovCi0JY2hhciBlbnRyaWVzWzBdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl2b2lkICplbnRyaWVzW05SX0NQVVNdOwogfTsKIAogc3RhdGljIExJU1RfSEVBRChpcDZ0X3RhcmdldCk7CiBzdGF0aWMgTElTVF9IRUFEKGlwNnRfbWF0Y2gpOwogc3RhdGljIExJU1RfSEVBRChpcDZ0X3RhYmxlcyk7CisjZGVmaW5lIFNFVF9DT1VOVEVSKGMsYixwKSBkbyB7IChjKS5iY250ID0gKGIpOyAoYykucGNudCA9IChwKTsgfSB3aGlsZSgwKQogI2RlZmluZSBBRERfQ09VTlRFUihjLGIscCkgZG8geyAoYykuYmNudCArPSAoYik7IChjKS5wY250ICs9IChwKTsgfSB3aGlsZSgwKQogCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBUQUJMRV9PRkZTRVQodCxwKSAoU01QX0FMSUdOKCh0KS0+c2l6ZSkqKHApKQotI2Vsc2UKLSNkZWZpbmUgVEFCTEVfT0ZGU0VUKHQscCkgMAotI2VuZGlmCi0KICNpZiAwCiAjZGVmaW5lIGRvd24oeCkgZG8geyBwcmludGsoIkRPV046JXU6IiAjeCAiXG4iLCBfX0xJTkVfXyk7IGRvd24oeCk7IH0gd2hpbGUoMCkKICNkZWZpbmUgZG93bl9pbnRlcnJ1cHRpYmxlKHgpICh7IGludCBfX3I7IHByaW50aygiRE9XTmk6JXU6IiAjeCAiXG4iLCBfX0xJTkVfXyk7IF9fciA9IGRvd25faW50ZXJydXB0aWJsZSh4KTsgaWYgKF9fciAhPSAwKSBwcmludGsoIkFCT1JULURPV05pOiV1XG4iLCBfX0xJTkVfXyk7IF9fcjsgfSkKQEAgLTM3Niw4ICszNjcsNyBAQAogCiAJcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKil0YWJsZS0+cHJpdmF0ZS0+ZW50cmllcwotCQkrIFRBQkxFX09GRlNFVCh0YWJsZS0+cHJpdmF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0YWJsZV9iYXNlID0gKHZvaWQgKil0YWJsZS0+cHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgdGFibGUtPnByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwpAQCAtNjQ5LDcgKzYzOSw4IEBACiAvKiBGaWd1cmVzIG91dCBmcm9tIHdoYXQgaG9vayBlYWNoIHJ1bGUgY2FuIGJlIGNhbGxlZDogcmV0dXJucyAwIGlmCiAgICB0aGVyZSBhcmUgbG9vcHMuICBQdXRzIGhvb2sgYml0bWFzayBpbiBjb21lZnJvbS4gKi8KIHN0YXRpYyBpbnQKLW1hcmtfc291cmNlX2NoYWlucyhzdHJ1Y3QgaXA2dF90YWJsZV9pbmZvICpuZXdpbmZvLCB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MpCittYXJrX3NvdXJjZV9jaGFpbnMoc3RydWN0IGlwNnRfdGFibGVfaW5mbyAqbmV3aW5mbywKKwkJICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLCB2b2lkICplbnRyeTApCiB7CiAJdW5zaWduZWQgaW50IGhvb2s7CiAKQEAgLTY1OCw3ICs2NDksNyBAQAogCWZvciAoaG9vayA9IDA7IGhvb2sgPCBORl9JUDZfTlVNSE9PS1M7IGhvb2srKykgewogCQl1bnNpZ25lZCBpbnQgcG9zID0gbmV3aW5mby0+aG9va19lbnRyeVtob29rXTsKIAkJc3RydWN0IGlwNnRfZW50cnkgKmUKLQkJCT0gKHN0cnVjdCBpcDZ0X2VudHJ5ICopKG5ld2luZm8tPmVudHJpZXMgKyBwb3MpOworCQkJPSAoc3RydWN0IGlwNnRfZW50cnkgKikoZW50cnkwICsgcG9zKTsKIAogCQlpZiAoISh2YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKSkKIAkJCWNvbnRpbnVlOwpAQCAtNzA4LDEzICs2OTksMTMgQEAKIAkJCQkJCWdvdG8gbmV4dDsKIAogCQkJCQllID0gKHN0cnVjdCBpcDZ0X2VudHJ5ICopCi0JCQkJCQkobmV3aW5mby0+ZW50cmllcyArIHBvcyk7CisJCQkJCQkoZW50cnkwICsgcG9zKTsKIAkJCQl9IHdoaWxlIChvbGRwb3MgPT0gcG9zICsgZS0+bmV4dF9vZmZzZXQpOwogCiAJCQkJLyogTW92ZSBhbG9uZyBvbmUgKi8KIAkJCQlzaXplID0gZS0+bmV4dF9vZmZzZXQ7CiAJCQkJZSA9IChzdHJ1Y3QgaXA2dF9lbnRyeSAqKQotCQkJCQkobmV3aW5mby0+ZW50cmllcyArIHBvcyArIHNpemUpOworCQkJCQkoZW50cnkwICsgcG9zICsgc2l6ZSk7CiAJCQkJZS0+Y291bnRlcnMucGNudCA9IHBvczsKIAkJCQlwb3MgKz0gc2l6ZTsKIAkJCX0gZWxzZSB7CkBAIC03MzEsNyArNzIyLDcgQEAKIAkJCQkJbmV3cG9zID0gcG9zICsgZS0+bmV4dF9vZmZzZXQ7CiAJCQkJfQogCQkJCWUgPSAoc3RydWN0IGlwNnRfZW50cnkgKikKLQkJCQkJKG5ld2luZm8tPmVudHJpZXMgKyBuZXdwb3MpOworCQkJCQkoZW50cnkwICsgbmV3cG9zKTsKIAkJCQllLT5jb3VudGVycy5wY250ID0gcG9zOwogCQkJCXBvcyA9IG5ld3BvczsKIAkJCX0KQEAgLTk0MSw2ICs5MzIsNyBAQAogdHJhbnNsYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCiAJCXVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJc3RydWN0IGlwNnRfdGFibGVfaW5mbyAqbmV3aW5mbywKKwkJdm9pZCAqZW50cnkwLAogCQl1bnNpZ25lZCBpbnQgc2l6ZSwKIAkJdW5zaWduZWQgaW50IG51bWJlciwKIAkJY29uc3QgdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCkBAIC05NjEsMTEgKzk1MywxMSBAQAogCWR1cHJpbnRmKCJ0cmFuc2xhdGVfdGFibGU6IHNpemUgJXVcbiIsIG5ld2luZm8tPnNpemUpOwogCWkgPSAwOwogCS8qIFdhbGsgdGhyb3VnaCBlbnRyaWVzLCBjaGVja2luZyBvZmZzZXRzLiAqLwotCXJldCA9IElQNlRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzLCBuZXdpbmZvLT5zaXplLAorCXJldCA9IElQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCiAJCQkJY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3MsCiAJCQkJbmV3aW5mbywKLQkJCQluZXdpbmZvLT5lbnRyaWVzLAotCQkJCW5ld2luZm8tPmVudHJpZXMgKyBzaXplLAorCQkJCWVudHJ5MCwKKwkJCQllbnRyeTAgKyBzaXplLAogCQkJCWhvb2tfZW50cmllcywgdW5kZXJmbG93cywgJmkpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTk5MywyNyArOTg1LDI0IEBACiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcykpCisJaWYgKCFtYXJrX3NvdXJjZV9jaGFpbnMobmV3aW5mbywgdmFsaWRfaG9va3MsIGVudHJ5MCkpCiAJCXJldHVybiAtRUxPT1A7CiAKIAkvKiBGaW5hbGx5LCBlYWNoIHNhbml0eSBjaGVjayBtdXN0IHBhc3MgKi8KIAlpID0gMDsKLQlyZXQgPSBJUDZUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+c2l6ZSwKKwlyZXQgPSBJUDZUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAogCQkJCWNoZWNrX2VudHJ5LCBuYW1lLCBzaXplLCAmaSk7CiAKIAlpZiAocmV0ICE9IDApIHsKLQkJSVA2VF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXMsIG5ld2luZm8tPnNpemUsCisJCUlQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCiAJCQkJICBjbGVhbnVwX2VudHJ5LCAmaSk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogQW5kIG9uZSBjb3B5IGZvciBldmVyeSBvdGhlciBDUFUgKi8KIAlmb3JfZWFjaF9jcHUoaSkgewotCQlpZiAoaSA9PSAwKQotCQkJY29udGludWU7Ci0JCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzICsgU01QX0FMSUdOKG5ld2luZm8tPnNpemUpICogaSwKLQkJICAgICAgIG5ld2luZm8tPmVudHJpZXMsCi0JCSAgICAgICBTTVBfQUxJR04obmV3aW5mby0+c2l6ZSkpOworCQlpZiAobmV3aW5mby0+ZW50cmllc1tpXSAmJiBuZXdpbmZvLT5lbnRyaWVzW2ldICE9IGVudHJ5MCkKKwkJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2ldLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMDI5LDE1ICsxMDE4LDEyIEBACiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCiAJewotCQlzdHJ1Y3QgaXA2dF9lbnRyeSAqdGFibGVfYmFzZTsKLQkJdW5zaWduZWQgaW50IGk7CisJCWludCBjcHU7CiAKLQkJZm9yX2VhY2hfY3B1KGkpIHsKLQkJCXRhYmxlX2Jhc2UgPQotCQkJCSh2b2lkICopbmV3aW5mby0+ZW50cmllcwotCQkJCSsgVEFCTEVfT0ZGU0VUKG5ld2luZm8sIGkpOwotCi0JCQl0YWJsZV9iYXNlLT5jb21lZnJvbSA9IDB4ZGVhZDU3YWM7CisJCWZvcl9lYWNoX2NwdShjcHUpIHsKKwkJCXN0cnVjdCBpcDZ0X2VudHJ5ICp0YWJsZV9iYXNlID0gbmV3aW5mby0+ZW50cmllc1tjcHVdOworCQkJaWYgKHRhYmxlX2Jhc2UpCisJCQkJdGFibGVfYmFzZS0+Y29tZWZyb20gPSAweGRlYWQ1N2FjOwogCQl9CiAJfQogI2VuZGlmCkBAIC0xMDcyLDE2ICsxMDU4LDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitzZXRfZW50cnlfdG9fY291bnRlcihjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKKwkJICAgICBzdHJ1Y3QgaXA2dF9jb3VudGVycyB0b3RhbFtdLAorCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3sKKwlTRVRfQ09VTlRFUih0b3RhbFsqaV0sIGUtPmNvdW50ZXJzLmJjbnQsIGUtPmNvdW50ZXJzLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBpcDZ0X3RhYmxlX2luZm8gKnQsCiAJICAgICBzdHJ1Y3QgaXA2dF9jb3VudGVycyBjb3VudGVyc1tdKQogewogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGN1cmNwdTsKKworCS8qIEluc3RlYWQgb2YgY2xlYXJpbmcgKGJ5IGEgcHJldmlvdXMgY2FsbCB0byBtZW1zZXQoKSkKKwkgKiB0aGUgY291bnRlcnMgYW5kIHVzaW5nIGFkZHMsIHdlIHNldCB0aGUgY291bnRlcnMKKwkgKiB3aXRoIGRhdGEgdXNlZCBieSAnY3VycmVudCcgQ1BVCisJICogV2UgZG9udCBjYXJlIGFib3V0IHByZWVtcHRpb24gaGVyZS4KKwkgKi8KKwljdXJjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaSA9IDA7CisJSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3VyY3B1XSwKKwkJCSAgIHQtPnNpemUsCisJCQkgICBzZXRfZW50cnlfdG9fY291bnRlciwKKwkJCSAgIGNvdW50ZXJzLAorCQkJICAgJmkpOwogCiAJZm9yX2VhY2hfY3B1KGNwdSkgeworCQlpZiAoY3B1ID09IGN1cmNwdSkKKwkJCWNvbnRpbnVlOwogCQlpID0gMDsKLQkJSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXMgKyBUQUJMRV9PRkZTRVQodCwgY3B1KSwKKwkJSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKIAkJCQkgIHQtPnNpemUsCiAJCQkJICBhZGRfZW50cnlfdG9fY291bnRlciwKIAkJCQkgIGNvdW50ZXJzLApAQCAtMTA5OCw2ICsxMTEyLDcgQEAKIAlzdHJ1Y3QgaXA2dF9lbnRyeSAqZTsKIAlzdHJ1Y3QgaXA2dF9jb3VudGVycyAqY291bnRlcnM7CiAJaW50IHJldCA9IDA7CisJdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICAgKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKQEAgLTExMDksMTMgKzExMjQsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBGaXJzdCwgc3VtIGNvdW50ZXJzLi4uICovCi0JbWVtc2V0KGNvdW50ZXJzLCAwLCBjb3VudGVyc2l6ZSk7CiAJd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOwogCWdldF9jb3VudGVycyh0YWJsZS0+cHJpdmF0ZSwgY291bnRlcnMpOwogCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOwogCi0JLyogLi4uIHRoZW4gY29weSBlbnRpcmUgdGhpbmcgZnJvbSBDUFUgMC4uLiAqLwotCWlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciwgdGFibGUtPnByaXZhdGUtPmVudHJpZXMsIHRvdGFsX3NpemUpICE9IDApIHsKKwkvKiBjaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXJjIG5vZGUvY3B1ICovCisJbG9jX2NwdV9lbnRyeSA9IHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCWlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciwgbG9jX2NwdV9lbnRyeSwgdG90YWxfc2l6ZSkgIT0gMCkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIGZyZWVfY291bnRlcnM7CiAJfQpAQCAtMTEyNyw3ICsxMTQyLDcgQEAKIAkJc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm07CiAJCXN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKIAotCQllID0gKHN0cnVjdCBpcDZ0X2VudHJ5ICopKHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzICsgb2ZmKTsKKwkJZSA9IChzdHJ1Y3QgaXA2dF9lbnRyeSAqKShsb2NfY3B1X2VudHJ5ICsgb2ZmKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmCiAJCQkJICsgb2Zmc2V0b2Yoc3RydWN0IGlwNnRfZW50cnksIGNvdW50ZXJzKSwKIAkJCQkgJmNvdW50ZXJzW251bV0sCkBAIC0xMTk2LDYgKzEyMTEsNDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBmcmVlX3RhYmxlX2luZm8oc3RydWN0IGlwNnRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwlpbnQgY3B1OworCWZvcl9lYWNoX2NwdShjcHUpIHsKKwkJaWYgKGluZm8tPnNpemUgPD0gUEFHRV9TSVpFKQorCQkJa2ZyZWUoaW5mby0+ZW50cmllc1tjcHVdKTsKKwkJZWxzZQorCQkJdmZyZWUoaW5mby0+ZW50cmllc1tjcHVdKTsKKwl9CisJa2ZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXA2dF90YWJsZV9pbmZvICphbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKQoreworCXN0cnVjdCBpcDZ0X3RhYmxlX2luZm8gKm5ld2luZm87CisJaW50IGNwdTsKKworCW5ld2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXA2dF90YWJsZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdpbmZvKQorCQlyZXR1cm4gTlVMTDsKKworCW5ld2luZm8tPnNpemUgPSBzaXplOworCisJZm9yX2VhY2hfY3B1KGNwdSkgeworCQlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCisJCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSBrbWFsbG9jX25vZGUoc2l6ZSwKKwkJCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkJCWNwdV90b19ub2RlKGNwdSkpOworCQllbHNlCisJCQluZXdpbmZvLT5lbnRyaWVzW2NwdV0gPSB2bWFsbG9jX25vZGUoc2l6ZSwKKwkJCQkJCQkgICAgIGNwdV90b19ub2RlKGNwdSkpOworCQlpZiAobmV3aW5mby0+ZW50cmllc1tjcHVdID09IE5VTEwpIHsKKwkJCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIG5ld2luZm87Cit9CisKIHN0YXRpYyBpbnQKIGRvX3JlcGxhY2Uodm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCiB7CkBAIC0xMjA0LDYgKzEyNTksNyBAQAogCXN0cnVjdCBpcDZ0X3RhYmxlICp0OwogCXN0cnVjdCBpcDZ0X3RhYmxlX2luZm8gKm5ld2luZm8sICpvbGRpbmZvOwogCXN0cnVjdCBpcDZ0X2NvdW50ZXJzICpjb3VudGVyczsKKwl2b2lkICpsb2NfY3B1X2VudHJ5LCAqbG9jX2NwdV9vbGRfZW50cnk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTIxMiwxMyArMTI2OCwxMyBAQAogCWlmICgoU01QX0FMSUdOKHRtcC5zaXplKSA+PiBQQUdFX1NISUZUKSArIDIgPiBudW1fcGh5c3BhZ2VzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW5ld2luZm8gPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaXA2dF90YWJsZV9pbmZvKQotCQkJICArIFNNUF9BTElHTih0bXAuc2l6ZSkgKgotCQkJICAJCShoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpKTsKKwluZXdpbmZvID0gYWxsb2NfdGFibGVfaW5mbyh0bXAuc2l6ZSk7CiAJaWYgKCFuZXdpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihuZXdpbmZvLT5lbnRyaWVzLCB1c2VyICsgc2l6ZW9mKHRtcCksCisJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUvY3B1ICovCisJbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaWYgKGNvcHlfZnJvbV91c2VyKGxvY19jcHVfZW50cnksIHVzZXIgKyBzaXplb2YodG1wKSwKIAkJCSAgIHRtcC5zaXplKSAhPSAwKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZnJlZV9uZXdpbmZvOwpAQCAtMTIyOSwxMCArMTI4NSw5IEBACiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCX0KLQltZW1zZXQoY291bnRlcnMsIDAsIHRtcC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGlwNnRfY291bnRlcnMpKTsKIAogCXJldCA9IHRyYW5zbGF0ZV90YWJsZSh0bXAubmFtZSwgdG1wLnZhbGlkX2hvb2tzLAotCQkJICAgICAgbmV3aW5mbywgdG1wLnNpemUsIHRtcC5udW1fZW50cmllcywKKwkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHRtcC5zaXplLCB0bXAubnVtX2VudHJpZXMsCiAJCQkgICAgICB0bXAuaG9va19lbnRyeSwgdG1wLnVuZGVyZmxvdyk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZyZWVfbmV3aW5mb19jb3VudGVyczsKQEAgLTEyNzEsOCArMTMyNiw5IEBACiAJLyogR2V0IHRoZSBvbGQgY291bnRlcnMuICovCiAJZ2V0X2NvdW50ZXJzKG9sZGluZm8sIGNvdW50ZXJzKTsKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCi0JSVA2VF9FTlRSWV9JVEVSQVRFKG9sZGluZm8tPmVudHJpZXMsIG9sZGluZm8tPnNpemUsIGNsZWFudXBfZW50cnksTlVMTCk7Ci0JdmZyZWUob2xkaW5mbyk7CisJbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCUlQNlRfRU5UUllfSVRFUkFURShsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKKwlmcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcih0bXAuY291bnRlcnMsIGNvdW50ZXJzLAogCQkJIHNpemVvZihzdHJ1Y3QgaXA2dF9jb3VudGVycykgKiB0bXAubnVtX2NvdW50ZXJzKSAhPSAwKQogCQlyZXQgPSAtRUZBVUxUOwpAQCAtMTI4NCwxMSArMTM0MCwxMSBAQAogCW1vZHVsZV9wdXQodC0+bWUpOwogCXVwKCZpcDZ0X211dGV4KTsKICBmcmVlX25ld2luZm9fY291bnRlcnNfdW50cmFuczoKLQlJUDZUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKKwlJUDZUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKICBmcmVlX25ld2luZm9fY291bnRlcnM6CiAJdmZyZWUoY291bnRlcnMpOwogIGZyZWVfbmV3aW5mbzoKLQl2ZnJlZShuZXdpbmZvKTsKKwlmcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTMyMSw2ICsxMzc3LDcgQEAKIAlzdHJ1Y3QgaXA2dF9jb3VudGVyc19pbmZvIHRtcCwgKnBhZGRjOwogCXN0cnVjdCBpcDZ0X3RhYmxlICp0OwogCWludCByZXQgPSAwOworCXZvaWQgKmxvY19jcHVfZW50cnk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTM1MCw3ICsxNDA3LDkgQEAKIAl9CiAKIAlpID0gMDsKLQlJUDZUX0VOVFJZX0lURVJBVEUodC0+cHJpdmF0ZS0+ZW50cmllcywKKwkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLworCWxvY19jcHVfZW50cnkgPSB0LT5wcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksCiAJCQkgIHQtPnByaXZhdGUtPnNpemUsCiAJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAogCQkJICBwYWRkYy0+Y291bnRlcnMsCkBAIC0xNTQzLDI4ICsxNjAyLDI5IEBACiAJc3RydWN0IGlwNnRfdGFibGVfaW5mbyAqbmV3aW5mbzsKIAlzdGF0aWMgc3RydWN0IGlwNnRfdGFibGVfaW5mbyBib290c3RyYXAKIAkJPSB7IDAsIDAsIDAsIHsgMCB9LCB7IDAgfSwgeyB9IH07CisJdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAotCW5ld2luZm8gPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaXA2dF90YWJsZV9pbmZvKQotCQkJICArIFNNUF9BTElHTihyZXBsLT5zaXplKSAqCi0JCQkgIAkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSkpOworCW5ld2luZm8gPSBhbGxvY190YWJsZV9pbmZvKHJlcGwtPnNpemUpOwogCWlmICghbmV3aW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkobmV3aW5mby0+ZW50cmllcywgcmVwbC0+ZW50cmllcywgcmVwbC0+c2l6ZSk7CisJLyogY2hvb3NlIHRoZSBjb3B5IG9uIG91ciBub2RlL2NwdSAqLworCWxvY19jcHVfZW50cnkgPSBuZXdpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCW1lbWNweShsb2NfY3B1X2VudHJ5LCByZXBsLT5lbnRyaWVzLCByZXBsLT5zaXplKTsKIAogCXJldCA9IHRyYW5zbGF0ZV90YWJsZSh0YWJsZS0+bmFtZSwgdGFibGUtPnZhbGlkX2hvb2tzLAotCQkJICAgICAgbmV3aW5mbywgcmVwbC0+c2l6ZSwKKwkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHJlcGwtPnNpemUsCiAJCQkgICAgICByZXBsLT5udW1fZW50cmllcywKIAkJCSAgICAgIHJlcGwtPmhvb2tfZW50cnksCiAJCQkgICAgICByZXBsLT51bmRlcmZsb3cpOwogCWlmIChyZXQgIT0gMCkgewotCQl2ZnJlZShuZXdpbmZvKTsKKwkJZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmaXA2dF9tdXRleCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXZmcmVlKG5ld2luZm8pOworCQlmcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xNTkzLDIwICsxNjUzLDIzIEBACiAJcmV0dXJuIHJldDsKIAogIGZyZWVfdW5sb2NrOgotCXZmcmVlKG5ld2luZm8pOworCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlnb3RvIHVubG9jazsKIH0KIAogdm9pZCBpcDZ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGlwNnRfdGFibGUgKnRhYmxlKQogeworCXZvaWQgKmxvY19jcHVfZW50cnk7CisKIAlkb3duKCZpcDZ0X211dGV4KTsKIAlMSVNUX0RFTEVURSgmaXA2dF90YWJsZXMsIHRhYmxlKTsKIAl1cCgmaXA2dF9tdXRleCk7CiAKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlcyAqLwotCUlQNlRfRU5UUllfSVRFUkFURSh0YWJsZS0+cHJpdmF0ZS0+ZW50cmllcywgdGFibGUtPnByaXZhdGUtPnNpemUsCisJbG9jX2NwdV9lbnRyeSA9IHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCUlQNlRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCB0YWJsZS0+cHJpdmF0ZS0+c2l6ZSwKIAkJCSAgY2xlYW51cF9lbnRyeSwgTlVMTCk7Ci0JdmZyZWUodGFibGUtPnByaXZhdGUpOworCWZyZWVfdGFibGVfaW5mbyh0YWJsZS0+cHJpdmF0ZSk7CiB9CiAKIC8qIFJldHVybnMgMSBpZiB0aGUgcG9ydCBpcyBtYXRjaGVkIGJ5IHRoZSByYW5nZSwgMCBvdGhlcndpc2UgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKaW5kZXggMGNkMWQxYi4uYWU0NjUzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCmluZGV4IGRkZTM3NzkuLjI2ODkxOGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9lc3AuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCmluZGV4IDI0YmMwY2QuLjY1OTM3ZGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCkBAIC05LDYgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwppbmRleCBjMmM1MmFmLi5mM2U1ZmZiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCkBAIC05OCw3ICs5OCw3IEBACiAjZGVmaW5lIEZSQUc2UV9IQVNIU1oJNjQKIAogc3RhdGljIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqbmZfY3RfZnJhZzZfaGFzaFtGUkFHNlFfSEFTSFNaXTsKLXN0YXRpYyByd2xvY2tfdCBuZl9jdF9mcmFnNl9sb2NrID0gUldfTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBERUZJTkVfUldMT0NLKG5mX2N0X2ZyYWc2X2xvY2spOwogc3RhdGljIHUzMiBuZl9jdF9mcmFnNl9oYXNoX3JuZDsKIHN0YXRpYyBMSVNUX0hFQUQobmZfY3RfZnJhZzZfbHJ1X2xpc3QpOwogaW50IG5mX2N0X2ZyYWc2X25xdWV1ZXMgPSAwOwpAQCAtMzcxLDcgKzM3MSw3IEBACiAJaW5pdF90aW1lcigmZnEtPnRpbWVyKTsKIAlmcS0+dGltZXIuZnVuY3Rpb24gPSBuZl9jdF9mcmFnNl9leHBpcmU7CiAJZnEtPnRpbWVyLmRhdGEgPSAobG9uZykgZnE7Ci0JZnEtPmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3Bpbl9sb2NrX2luaXQoJmZxLT5sb2NrKTsKIAlhdG9taWNfc2V0KCZmcS0+cmVmY250LCAxKTsKIAogCXJldHVybiBuZl9jdF9mcmFnNl9pbnRlcm4oaGFzaCwgZnEpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCBhNjY5MDBjLi42NmYxZDEyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgpAQCAtNDMzLDI1ICs0MzQsMTQgQEAKIAlyZXR1cm4gZXJyOwogCiBjc3VtX2NvcHlfZXJyOgotCS8qIENsZWFyIHF1ZXVlLiAqLwotCWlmIChmbGFncyZNU0dfUEVFSykgewotCQlpbnQgY2xlYXIgPSAwOwotCQlzcGluX2xvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwotCQlpZiAoc2tiID09IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKLQkJCV9fc2tiX3VubGluayhza2IsICZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JCQljbGVhciA9IDE7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwotCQlpZiAoY2xlYXIpCi0JCQlrZnJlZV9za2Ioc2tiKTsKLQl9CisJc2tiX2tpbGxfZGF0YWdyYW0oc2ssIHNrYiwgZmxhZ3MpOwogCiAJLyogRXJyb3IgZm9yIGJsb2NraW5nIGNhc2UgaXMgY2hvc2VuIHRvIG1hc3F1ZXJhZGUKIAkgICBhcyBzb21lIG5vcm1hbCBjb25kaXRpb24uCiAJICovCiAJZXJyID0gKGZsYWdzJk1TR19ET05UV0FJVCkgPyAtRUFHQUlOIDogLUVIT1NUVU5SRUFDSDsKIAkvKiBGSVhNRTogaW5jcmVtZW50IGEgcmF3NiBkcm9wcyBjb3VudGVyIGhlcmUgKi8KLQlnb3RvIG91dF9mcmVlOworCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgaW50IHJhd3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2kgKmZsLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggODgyNzM4OS4uMjk0N2JjNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldC9uZGlzYy5oPgogI2luY2x1ZGUgPG5ldC9pbmV0Nl9oYXNodGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L3RyYW5zcF92Ni5oPgogI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgpAQCAtNTksNiArNjAsNyBAQAogI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgogI2luY2x1ZGUgPG5ldC9zbm1wLmg+CiAjaW5jbHVkZSA8bmV0L2RzZmllbGQuaD4KKyNpbmNsdWRlIDxuZXQvdGltZXdhaXRfc29jay5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNjcsMjI0ICs2OSwzMyBAQAogCiBzdGF0aWMgdm9pZAl0Y3BfdjZfc2VuZF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkCXRjcF92Nl9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwotc3RhdGljIHZvaWQJdGNwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwgCitzdGF0aWMgdm9pZAl0Y3BfdjZfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sIAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBpbnQJdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludAl0Y3BfdjZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXBmcmFnb2spOwogCi1zdGF0aWMgc3RydWN0IHRjcF9mdW5jIGlwdjZfbWFwcGVkOwotc3RhdGljIHN0cnVjdCB0Y3BfZnVuYyBpcHY2X3NwZWNpZmljOworc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9tYXBwZWQ7CitzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljOwogCi1zdGF0aWMgaW5saW5lIGludCB0Y3BfdjZfYmluZF9jb25mbGljdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YikKLXsKLQljb25zdCBzdHJ1Y3Qgc29jayAqc2syOwotCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCi0JLyogV2UgbXVzdCB3YWxrIHRoZSB3aG9sZSBwb3J0IG93bmVyIGxpc3QgaW4gdGhpcyBjYXNlLiAtRGF2ZU0gKi8KLQlza19mb3JfZWFjaF9ib3VuZChzazIsIG5vZGUsICZ0Yi0+b3duZXJzKSB7Ci0JCWlmIChzayAhPSBzazIgJiYKLQkJICAgICghc2stPnNrX2JvdW5kX2Rldl9pZiB8fAotCQkgICAgICFzazItPnNrX2JvdW5kX2Rldl9pZiB8fAotCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpICYmCi0JCSAgICAoIXNrLT5za19yZXVzZSB8fCAhc2syLT5za19yZXVzZSB8fAotCQkgICAgIHNrMi0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgJiYKLQkJICAgICBpcHY2X3Jjdl9zYWRkcl9lcXVhbChzaywgc2syKSkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBub2RlICE9IE5VTEw7Ci19Ci0KLS8qIEdycnIsIGFkZHJfdHlwZSBhbHJlYWR5IGNhbGN1bGF0ZWQgYnkgY2FsbGVyLCBidXQgSSBkb24ndCB3YW50Ci0gKiB0byBhZGQgc29tZSBzaWxseSAiY29va2llIiBhcmd1bWVudCB0byB0aGlzIG1ldGhvZCBqdXN0IGZvciB0aGF0LgotICogQnV0IGl0IGRvZXNuJ3QgbWF0dGVyLCB0aGUgcmVjYWxjdWxhdGlvbiBpcyBpbiB0aGUgcmFyZXN0IHBhdGgKLSAqIHRoaXMgZnVuY3Rpb24gZXZlciB0YWtlcy4KLSAqLwogc3RhdGljIGludCB0Y3BfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewotCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZDsKLQlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IHJldDsKLQotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoc251bSA9PSAwKSB7Ci0JCWludCBsb3cgPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXTsKLQkJaW50IGhpZ2ggPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVsxXTsKLQkJaW50IHJlbWFpbmluZyA9IChoaWdoIC0gbG93KSArIDE7Ci0JCWludCByb3ZlciA9IG5ldF9yYW5kb20oKSAlIChoaWdoIC0gbG93KSArIGxvdzsKLQotCQlkbyB7Ci0JCQloZWFkID0gJnRjcF9oYXNoaW5mby5iaGFzaFtpbmV0X2JoYXNoZm4ocm92ZXIsIHRjcF9oYXNoaW5mby5iaGFzaF9zaXplKV07Ci0JCQlzcGluX2xvY2soJmhlYWQtPmxvY2spOwotCQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0Yiwgbm9kZSwgJmhlYWQtPmNoYWluKQotCQkJCWlmICh0Yi0+cG9ydCA9PSByb3ZlcikKLQkJCQkJZ290byBuZXh0OwotCQkJYnJlYWs7Ci0JCW5leHQ6Ci0JCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7Ci0JCQlpZiAoKytyb3ZlciA+IGhpZ2gpCi0JCQkJcm92ZXIgPSBsb3c7Ci0JCX0gd2hpbGUgKC0tcmVtYWluaW5nID4gMCk7Ci0KLQkJLyogRXhoYXVzdGVkIGxvY2FsIHBvcnQgcmFuZ2UgZHVyaW5nIHNlYXJjaD8gIEl0IGlzIG5vdAotCQkgKiBwb3NzaWJsZSBmb3IgdXMgdG8gYmUgaG9sZGluZyBvbmUgb2YgdGhlIGJpbmQgaGFzaAotCQkgKiBsb2NrcyBpZiB0aGlzIHRlc3QgdHJpZ2dlcnMsIGJlY2F1c2UgaWYgJ3JlbWFpbmluZycKLQkJICogZHJvcHMgdG8gemVybywgd2UgYnJva2Ugb3V0IG9mIHRoZSBkby93aGlsZSBsb29wIGF0Ci0JCSAqIHRoZSB0b3AgbGV2ZWwsIG5vdCBmcm9tIHRoZSAnYnJlYWs7JyBzdGF0ZW1lbnQuCi0JCSAqLwotCQlyZXQgPSAxOwotCQlpZiAodW5saWtlbHkocmVtYWluaW5nIDw9IDApKQotCQkJZ290byBmYWlsOwotCi0JCS8qIE9LLCBoZXJlIGlzIHRoZSBvbmUgd2Ugd2lsbCB1c2UuICovCi0JCXNudW0gPSByb3ZlcjsKLQl9IGVsc2UgewotCQloZWFkID0gJnRjcF9oYXNoaW5mby5iaGFzaFtpbmV0X2JoYXNoZm4oc251bSwgdGNwX2hhc2hpbmZvLmJoYXNoX3NpemUpXTsKLQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKLQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0Yiwgbm9kZSwgJmhlYWQtPmNoYWluKQotCQkJaWYgKHRiLT5wb3J0ID09IHNudW0pCi0JCQkJZ290byB0Yl9mb3VuZDsKLQl9Ci0JdGIgPSBOVUxMOwotCWdvdG8gdGJfbm90X2ZvdW5kOwotdGJfZm91bmQ6Ci0JaWYgKHRiICYmICFobGlzdF9lbXB0eSgmdGItPm93bmVycykpIHsKLQkJaWYgKHRiLT5mYXN0cmV1c2UgPiAwICYmIHNrLT5za19yZXVzZSAmJgotCQkgICAgc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4pIHsKLQkJCWdvdG8gc3VjY2VzczsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IDE7Ci0JCQlpZiAodGNwX3Y2X2JpbmRfY29uZmxpY3Qoc2ssIHRiKSkKLQkJCQlnb3RvIGZhaWxfdW5sb2NrOwotCQl9Ci0JfQotdGJfbm90X2ZvdW5kOgotCXJldCA9IDE7Ci0JaWYgKHRiID09IE5VTEwpIHsKLQkgICAgICAgCXRiID0gaW5ldF9iaW5kX2J1Y2tldF9jcmVhdGUodGNwX2hhc2hpbmZvLmJpbmRfYnVja2V0X2NhY2hlcCwgaGVhZCwgc251bSk7Ci0JCWlmICh0YiA9PSBOVUxMKQotCQkJZ290byBmYWlsX3VubG9jazsKLQl9Ci0JaWYgKGhsaXN0X2VtcHR5KCZ0Yi0+b3duZXJzKSkgewotCQlpZiAoc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOKQotCQkJdGItPmZhc3RyZXVzZSA9IDE7Ci0JCWVsc2UKLQkJCXRiLT5mYXN0cmV1c2UgPSAwOwotCX0gZWxzZSBpZiAodGItPmZhc3RyZXVzZSAmJgotCQkgICAoIXNrLT5za19yZXVzZSB8fCBzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikpCi0JCXRiLT5mYXN0cmV1c2UgPSAwOwotCi1zdWNjZXNzOgotCWlmICghaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCkKLQkJaW5ldF9iaW5kX2hhc2goc2ssIHRiLCBzbnVtKTsKLQlCVUdfVFJBUChpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoID09IHRiKTsKLQlyZXQgPSAwOwotCi1mYWlsX3VubG9jazoKLQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7Ci1mYWlsOgotCWxvY2FsX2JoX2VuYWJsZSgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGluZXRfY3NrX2dldF9wb3J0KCZ0Y3BfaGFzaGluZm8sIHNrLCBzbnVtLAorCQkJCSBpbmV0Nl9jc2tfYmluZF9jb25mbGljdCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX190Y3BfdjZfaGFzaChzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmxpc3Q7Ci0Jcndsb2NrX3QgKmxvY2s7Ci0KLQlCVUdfVFJBUChza191bmhhc2hlZChzaykpOwotCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7Ci0JCWxpc3QgPSAmdGNwX2hhc2hpbmZvLmxpc3RlbmluZ19oYXNoW2luZXRfc2tfbGlzdGVuX2hhc2hmbihzayldOwotCQlsb2NrID0gJnRjcF9oYXNoaW5mby5saGFzaF9sb2NrOwotCQlpbmV0X2xpc3Rlbl93bG9jaygmdGNwX2hhc2hpbmZvKTsKLQl9IGVsc2UgewotCQl1bnNpZ25lZCBpbnQgaGFzaDsKLQkJc2stPnNrX2hhc2ggPSBoYXNoID0gaW5ldDZfc2tfZWhhc2hmbihzayk7Ci0JCWhhc2ggJj0gKHRjcF9oYXNoaW5mby5laGFzaF9zaXplIC0gMSk7Ci0JCWxpc3QgPSAmdGNwX2hhc2hpbmZvLmVoYXNoW2hhc2hdLmNoYWluOwotCQlsb2NrID0gJnRjcF9oYXNoaW5mby5laGFzaFtoYXNoXS5sb2NrOwotCQl3cml0ZV9sb2NrKGxvY2spOwotCX0KLQotCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOwotCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKLQl3cml0ZV91bmxvY2sobG9jayk7Ci19Ci0KLQogc3RhdGljIHZvaWQgdGNwX3Y2X2hhc2goc3RydWN0IHNvY2sgKnNrKQogewogCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7Ci0JCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCi0JCWlmICh0cC0+YWZfc3BlY2lmaWMgPT0gJmlwdjZfbWFwcGVkKSB7CisJCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzID09ICZpcHY2X21hcHBlZCkgewogCQkJdGNwX3Byb3QuaGFzaChzayk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQlfX3RjcF92Nl9oYXNoKHNrKTsKKwkJX19pbmV0Nl9oYXNoKCZ0Y3BfaGFzaGluZm8sIHNrKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJfQogfQogCi0vKgotICogT3BlbiByZXF1ZXN0IGhhc2ggdGFibGVzLgotICovCi0KLXN0YXRpYyB1MzIgdGNwX3Y2X3N5bnFfaGFzaChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJhZGRyLCBjb25zdCB1MTYgcnBvcnQsIGNvbnN0IHUzMiBybmQpCi17Ci0JdTMyIGEsIGIsIGM7Ci0KLQlhID0gcmFkZHItPnM2X2FkZHIzMlswXTsKLQliID0gcmFkZHItPnM2X2FkZHIzMlsxXTsKLQljID0gcmFkZHItPnM2X2FkZHIzMlsyXTsKLQotCWEgKz0gSkhBU0hfR09MREVOX1JBVElPOwotCWIgKz0gSkhBU0hfR09MREVOX1JBVElPOwotCWMgKz0gcm5kOwotCV9famhhc2hfbWl4KGEsIGIsIGMpOwotCi0JYSArPSByYWRkci0+czZfYWRkcjMyWzNdOwotCWIgKz0gKHUzMikgcnBvcnQ7Ci0JX19qaGFzaF9taXgoYSwgYiwgYyk7Ci0KLQlyZXR1cm4gYyAmIChUQ1BfU1lOUV9IU0laRSAtIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqdGNwX3Y2X3NlYXJjaF9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICoqKnByZXZwLAotCQkJCQkgICAgICBfX3UxNiBycG9ydCwKLQkJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICpyYWRkciwKLQkJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICpsYWRkciwKLQkJCQkJICAgICAgaW50IGlpZikKLXsKLQljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0Jc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0ID0gaWNzay0+aWNza19hY2NlcHRfcXVldWUubGlzdGVuX29wdDsKLQlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsICoqcHJldjsgIAotCi0JZm9yIChwcmV2ID0gJmxvcHQtPnN5bl90YWJsZVt0Y3BfdjZfc3lucV9oYXNoKHJhZGRyLCBycG9ydCwgbG9wdC0+aGFzaF9ybmQpXTsKLQkgICAgIChyZXEgPSAqcHJldikgIT0gTlVMTDsKLQkgICAgIHByZXYgPSAmcmVxLT5kbF9uZXh0KSB7Ci0JCWNvbnN0IHN0cnVjdCB0Y3A2X3JlcXVlc3Rfc29jayAqdHJlcSA9IHRjcDZfcnNrKHJlcSk7Ci0KLQkJaWYgKGluZXRfcnNrKHJlcSktPnJtdF9wb3J0ID09IHJwb3J0ICYmCi0JCSAgICByZXEtPnJza19vcHMtPmZhbWlseSA9PSBBRl9JTkVUNiAmJgotCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZ0cmVxLT5ybXRfYWRkciwgcmFkZHIpICYmCi0JCSAgICBpcHY2X2FkZHJfZXF1YWwoJnRyZXEtPmxvY19hZGRyLCBsYWRkcikgJiYKLQkJICAgICghdHJlcS0+aWlmIHx8IHRyZXEtPmlpZiA9PSBpaWYpKSB7Ci0JCQlCVUdfVFJBUChyZXEtPnNrID09IE5VTEwpOwotCQkJKnByZXZwID0gcHJldjsKLQkJCXJldHVybiByZXE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIF9faW5saW5lX18gdTE2IHRjcF92Nl9jaGVjayhzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwKIAkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAKIAkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCAKQEAgLTMwOCwxOTUgKzExOSwxMiBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX3RjcF92Nl9jaGVja19lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IF9fdTE2IGxwb3J0LAotCQkJCSAgICAgIHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKip0d3ApCi17Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCWNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyID0gJm5wLT5yY3Zfc2FkZHI7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZucC0+ZGFkZHI7Ci0JY29uc3QgaW50IGRpZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7Ci0JY29uc3QgdTMyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhpbmV0LT5kcG9ydCwgbHBvcnQpOwotCXVuc2lnbmVkIGludCBoYXNoID0gaW5ldDZfZWhhc2hmbihkYWRkciwgaW5ldC0+bnVtLCBzYWRkciwgaW5ldC0+ZHBvcnQpOwotCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KCZ0Y3BfaGFzaGluZm8sIGhhc2gpOwotCXN0cnVjdCBzb2NrICpzazI7Ci0JY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7Ci0KLQlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7Ci0Jd3JpdGVfbG9jaygmaGVhZC0+bG9jayk7Ci0KLQkvKiBDaGVjayBUSU1FLVdBSVQgc29ja2V0cyBmaXJzdC4gKi8KLQlza19mb3JfZWFjaChzazIsIG5vZGUsICYoaGVhZCArIHRjcF9oYXNoaW5mby5laGFzaF9zaXplKS0+Y2hhaW4pIHsKLQkJY29uc3Qgc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayAqdGNwNnR3ID0gdGNwNl90d3NrKHNrMik7Ci0KLQkJdHcgPSBpbmV0X3R3c2soc2syKTsKLQotCQlpZigqKChfX3UzMiAqKSYodHctPnR3X2Rwb3J0KSkJPT0gcG9ydHMJJiYKLQkJICAgc2syLT5za19mYW1pbHkJCT09IFBGX0lORVQ2CSYmCi0JCSAgIGlwdjZfYWRkcl9lcXVhbCgmdGNwNnR3LT50d192Nl9kYWRkciwgc2FkZHIpCSYmCi0JCSAgIGlwdjZfYWRkcl9lcXVhbCgmdGNwNnR3LT50d192Nl9yY3Zfc2FkZHIsIGRhZGRyKQkmJgotCQkgICBzazItPnNrX2JvdW5kX2Rldl9pZiA9PSBzay0+c2tfYm91bmRfZGV2X2lmKSB7Ci0JCQljb25zdCBzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3ID0gdGNwX3R3c2soc2syKTsKLQkJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCi0JCQlpZiAodGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcCAmJgotCQkJICAgICghdHdwIHx8Ci0JCQkgICAgIChzeXNjdGxfdGNwX3R3X3JldXNlICYmCi0JCQkgICAgICB4dGltZS50dl9zZWMgLSB0Y3B0dy0+dHdfdHNfcmVjZW50X3N0YW1wID4gMSkpKSB7Ci0JCQkJLyogU2VlIGNvbW1lbnQgaW4gdGNwX2lwdjQuYyAqLwotCQkJCXRwLT53cml0ZV9zZXEgPSB0Y3B0dy0+dHdfc25kX254dCArIDY1NTM1ICsgMjsKLQkJCQlpZiAoIXRwLT53cml0ZV9zZXEpCi0JCQkJCXRwLT53cml0ZV9zZXEgPSAxOwotCQkJCXRwLT5yeF9vcHQudHNfcmVjZW50CSAgID0gdGNwdHctPnR3X3RzX3JlY2VudDsKLQkJCQl0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCA9IHRjcHR3LT50d190c19yZWNlbnRfc3RhbXA7Ci0JCQkJc29ja19ob2xkKHNrMik7Ci0JCQkJZ290byB1bmlxdWU7Ci0JCQl9IGVsc2UKLQkJCQlnb3RvIG5vdF91bmlxdWU7Ci0JCX0KLQl9Ci0JdHcgPSBOVUxMOwotCi0JLyogQW5kIGVzdGFibGlzaGVkIHBhcnQuLi4gKi8KLQlza19mb3JfZWFjaChzazIsIG5vZGUsICZoZWFkLT5jaGFpbikgewotCQlpZiAoSU5FVDZfTUFUQ0goc2syLCBoYXNoLCBzYWRkciwgZGFkZHIsIHBvcnRzLCBkaWYpKQotCQkJZ290byBub3RfdW5pcXVlOwotCX0KLQotdW5pcXVlOgotCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7Ci0JX19za19hZGRfbm9kZShzaywgJmhlYWQtPmNoYWluKTsKLQlzay0+c2tfaGFzaCA9IGhhc2g7Ci0Jc29ja19wcm90X2luY191c2Uoc2stPnNrX3Byb3QpOwotCXdyaXRlX3VubG9jaygmaGVhZC0+bG9jayk7Ci0KLQlpZiAodHdwKSB7Ci0JCSp0d3AgPSB0dzsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVElNRVdBSVRSRUNZQ0xFRCk7Ci0JfSBlbHNlIGlmICh0dykgewotCQkvKiBTaWxseS4gU2hvdWxkIGhhc2gtZGFuY2UgaW5zdGVhZC4uLiAqLwotCQlpbmV0X3R3c2tfZGVzY2hlZHVsZSh0dywgJnRjcF9kZWF0aF9yb3cpOwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9USU1FV0FJVFJFQ1lDTEVEKTsKLQotCQlpbmV0X3R3c2tfcHV0KHR3KTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLW5vdF91bmlxdWU6Ci0Jd3JpdGVfdW5sb2NrKCZoZWFkLT5sb2NrKTsKLQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHRjcHY2X3BvcnRfb2Zmc2V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0JY29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCi0JcmV0dXJuIHNlY3VyZV90Y3B2Nl9wb3J0X2VwaGVtZXJhbChucC0+cmN2X3NhZGRyLnM2X2FkZHIzMiwKLQkJCQkJICAgbnAtPmRhZGRyLnM2X2FkZHIzMiwKLQkJCQkJICAgaW5ldC0+ZHBvcnQpOwotfQotCi1zdGF0aWMgaW50IHRjcF92Nl9oYXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKQotewotCXVuc2lnbmVkIHNob3J0IHNudW0gPSBpbmV0X3NrKHNrKS0+bnVtOwotIAlzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmhlYWQ7Ci0gCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKLQlpbnQgcmV0OwotCi0gCWlmICghc251bSkgewotIAkJaW50IGxvdyA9IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzBdOwotIAkJaW50IGhpZ2ggPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVsxXTsKLQkJaW50IHJhbmdlID0gaGlnaCAtIGxvdzsKLSAJCWludCBpOwotCQlpbnQgcG9ydDsKLQkJc3RhdGljIHUzMiBoaW50OwotCQl1MzIgb2Zmc2V0ID0gaGludCArIHRjcHY2X3BvcnRfb2Zmc2V0KHNrKTsKLQkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0gCQlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IE5VTEw7Ci0KLSAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJZm9yIChpID0gMTsgaSA8PSByYW5nZTsgaSsrKSB7Ci0JCQlwb3J0ID0gbG93ICsgKGkgKyBvZmZzZXQpICUgcmFuZ2U7Ci0gCQkJaGVhZCA9ICZ0Y3BfaGFzaGluZm8uYmhhc2hbaW5ldF9iaGFzaGZuKHBvcnQsIHRjcF9oYXNoaW5mby5iaGFzaF9zaXplKV07Ci0gCQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKLQotIAkJCS8qIERvZXMgbm90IGJvdGhlciB3aXRoIHJjdl9zYWRkciBjaGVja3MsCi0gCQkJICogYmVjYXVzZSB0aGUgZXN0YWJsaXNoZWQgY2hlY2sgaXMgYWxyZWFkeQotIAkJCSAqIHVuaXF1ZSBlbm91Z2guCi0gCQkJICovCi0JCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiLCBub2RlLCAmaGVhZC0+Y2hhaW4pIHsKLSAJCQkJaWYgKHRiLT5wb3J0ID09IHBvcnQpIHsKLSAJCQkJCUJVR19UUkFQKCFobGlzdF9lbXB0eSgmdGItPm93bmVycykpOwotIAkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPj0gMCkKLSAJCQkJCQlnb3RvIG5leHRfcG9ydDsKLSAJCQkJCWlmICghX190Y3BfdjZfY2hlY2tfZXN0YWJsaXNoZWQoc2ssCi0JCQkJCQkJCQlwb3J0LAotCQkJCQkJCQkJJnR3KSkKLSAJCQkJCQlnb3RvIG9rOwotIAkJCQkJZ290byBuZXh0X3BvcnQ7Ci0gCQkJCX0KLSAJCQl9Ci0KLSAJCQl0YiA9IGluZXRfYmluZF9idWNrZXRfY3JlYXRlKHRjcF9oYXNoaW5mby5iaW5kX2J1Y2tldF9jYWNoZXAsIGhlYWQsIHBvcnQpOwotIAkJCWlmICghdGIpIHsKLSAJCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwotIAkJCQlicmVhazsKLSAJCQl9Ci0gCQkJdGItPmZhc3RyZXVzZSA9IC0xOwotIAkJCWdvdG8gb2s7Ci0KLSAJCW5leHRfcG9ydDoKLSAJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7Ci0gCQl9Ci0gCQlsb2NhbF9iaF9lbmFibGUoKTsKLQotIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi1vazoKLQkJaGludCArPSBpOwotCi0gCQkvKiBIZWFkIGxvY2sgc3RpbGwgaGVsZCBhbmQgYmgncyBkaXNhYmxlZCAqLwotIAkJaW5ldF9iaW5kX2hhc2goc2ssIHRiLCBwb3J0KTsKLQkJaWYgKHNrX3VuaGFzaGVkKHNrKSkgewotIAkJCWluZXRfc2soc2spLT5zcG9ydCA9IGh0b25zKHBvcnQpOwotIAkJCV9fdGNwX3Y2X2hhc2goc2spOwotIAkJfQotIAkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwotCi0gCQlpZiAodHcpIHsKLSAJCQlpbmV0X3R3c2tfZGVzY2hlZHVsZSh0dywgJnRjcF9kZWF0aF9yb3cpOwotIAkJCWluZXRfdHdza19wdXQodHcpOwotIAkJfQotCi0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OwotIAl9Ci0KLSAJaGVhZCA9ICZ0Y3BfaGFzaGluZm8uYmhhc2hbaW5ldF9iaGFzaGZuKHNudW0sIHRjcF9oYXNoaW5mby5iaGFzaF9zaXplKV07Ci0gCXRiICAgPSBpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoOwotCXNwaW5fbG9ja19iaCgmaGVhZC0+bG9jayk7Ci0KLQlpZiAoc2tfaGVhZCgmdGItPm93bmVycykgPT0gc2sgJiYgIXNrLT5za19iaW5kX25vZGUubmV4dCkgewotCQlfX3RjcF92Nl9oYXNoKHNrKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmhlYWQtPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7Ci0JCS8qIE5vIGRlZmluaXRlIGFuc3dlci4uLiBXYWxrIHRvIGVzdGFibGlzaGVkIGhhc2ggdGFibGUgKi8KLQkJcmV0ID0gX190Y3BfdjZfY2hlY2tfZXN0YWJsaXNoZWQoc2ssIHNudW0sIE5VTEwpOwotb3V0OgotCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgdGNwX3Y2X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCAKIAkJCSAgaW50IGFkZHJfbGVuKQogewogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSB1YWRkcjsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisgCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSBOVUxMLCAqZmluYWxfcCA9IE5VTEwsIGZpbmFsOwpAQCAtNTcxLDcgKzE5OSw3IEBACiAJICovCiAKIAlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpIHsKLQkJdTMyIGV4dGhkcmxlbiA9IHRwLT5leHRfaGVhZGVyX2xlbjsKKwkJdTMyIGV4dGhkcmxlbiA9IGljc2stPmljc2tfZXh0X2hkcl9sZW47CiAJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CiAKIAkJU09DS19ERUJVRyhzaywgImNvbm5lY3Q6IGlwdjQgbWFwcGVkXG4iKTsKQEAgLTU4MywxNCArMjExLDE0IEBACiAJCXNpbi5zaW5fcG9ydCA9IHVzaW4tPnNpbjZfcG9ydDsKIAkJc2luLnNpbl9hZGRyLnNfYWRkciA9IHVzaW4tPnNpbjZfYWRkci5zNl9hZGRyMzJbM107CiAKLQkJdHAtPmFmX3NwZWNpZmljID0gJmlwdjZfbWFwcGVkOworCQlpY3NrLT5pY3NrX2FmX29wcyA9ICZpcHY2X21hcHBlZDsKIAkJc2stPnNrX2JhY2tsb2dfcmN2ID0gdGNwX3Y0X2RvX3JjdjsKIAogCQllcnIgPSB0Y3BfdjRfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKTsKIAogCQlpZiAoZXJyKSB7Ci0JCQl0cC0+ZXh0X2hlYWRlcl9sZW4gPSBleHRoZHJsZW47Ci0JCQl0cC0+YWZfc3BlY2lmaWMgPSAmaXB2Nl9zcGVjaWZpYzsKKwkJCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPSBleHRoZHJsZW47CisJCQlpY3NrLT5pY3NrX2FmX29wcyA9ICZpcHY2X3NwZWNpZmljOwogCQkJc2stPnNrX2JhY2tsb2dfcmN2ID0gdGNwX3Y2X2RvX3JjdjsKIAkJCWdvdG8gZmFpbHVyZTsKIAkJfSBlbHNlIHsKQEAgLTY0MywxNiArMjcxLDE3IEBACiAJc2stPnNrX3JvdXRlX2NhcHMgPSBkc3QtPmRldi0+ZmVhdHVyZXMgJgogCQl+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKIAotCXRwLT5leHRfaGVhZGVyX2xlbiA9IDA7CisJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IDA7CiAJaWYgKG5wLT5vcHQpCi0JCXRwLT5leHRfaGVhZGVyX2xlbiA9IG5wLT5vcHQtPm9wdF9mbGVuICsgbnAtPm9wdC0+b3B0X25mbGVuOworCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gKG5wLT5vcHQtPm9wdF9mbGVuICsKKwkJCQkJICBucC0+b3B0LT5vcHRfbmZsZW4pOwogCiAJdHAtPnJ4X29wdC5tc3NfY2xhbXAgPSBJUFY2X01JTl9NVFUgLSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCiAJaW5ldC0+ZHBvcnQgPSB1c2luLT5zaW42X3BvcnQ7CiAKIAl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfU1lOX1NFTlQpOwotCWVyciA9IHRjcF92Nl9oYXNoX2Nvbm5lY3Qoc2spOworCWVyciA9IGluZXQ2X2hhc2hfY29ubmVjdCgmdGNwX2RlYXRoX3Jvdywgc2spOwogCWlmIChlcnIpCiAJCWdvdG8gbGF0ZV9mYWlsdXJlOwogCkBAIC03NTgsNyArMzg3LDcgQEAKIAkJfSBlbHNlCiAJCQlkc3RfaG9sZChkc3QpOwogCi0JCWlmICh0cC0+cG10dV9jb29raWUgPiBkc3RfbXR1KGRzdCkpIHsKKwkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19wbXR1X2Nvb2tpZSA+IGRzdF9tdHUoZHN0KSkgewogCQkJdGNwX3N5bmNfbXNzKHNrLCBkc3RfbXR1KGRzdCkpOwogCQkJdGNwX3NpbXBsZV9yZXRyYW5zbWl0KHNrKTsKIAkJfSAvKiBlbHNlIGxldCB0aGUgdXN1YWwgcmV0cmFuc21pdCB0aW1lciBoYW5kbGUgaXQgKi8KQEAgLTc3NSw4ICs0MDQsOCBAQAogCQlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkKIAkJCWdvdG8gb3V0OwogCi0JCXJlcSA9IHRjcF92Nl9zZWFyY2hfcmVxKHNrLCAmcHJldiwgdGgtPmRlc3QsICZoZHItPmRhZGRyLAotCQkJCQkmaGRyLT5zYWRkciwgaW5ldDZfaWlmKHNrYikpOworCQlyZXEgPSBpbmV0Nl9jc2tfc2VhcmNoX3JlcShzaywgJnByZXYsIHRoLT5kZXN0LCAmaGRyLT5kYWRkciwKKwkJCQkJICAgJmhkci0+c2FkZHIsIGluZXQ2X2lpZihza2IpKTsKIAkJaWYgKCFyZXEpCiAJCQlnb3RvIG91dDsKIApAQCAtODIyLDcgKzQ1MSw3IEBACiBzdGF0aWMgaW50IHRjcF92Nl9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCSAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQlzdHJ1Y3QgdGNwNl9yZXF1ZXN0X3NvY2sgKnRyZXEgPSB0Y3A2X3JzayhyZXEpOworCXN0cnVjdCBpbmV0Nl9yZXF1ZXN0X3NvY2sgKnRyZXEgPSBpbmV0Nl9yc2socmVxKTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKiBza2I7CiAJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQgPSBOVUxMOwpAQCAtODg4LDggKzUxNyw4IEBACiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKLQlpZiAodGNwNl9yc2socmVxKS0+cGt0b3B0cykKLQkJa2ZyZWVfc2tiKHRjcDZfcnNrKHJlcSktPnBrdG9wdHMpOworCWlmIChpbmV0Nl9yc2socmVxKS0+cGt0b3B0cykKKwkJa2ZyZWVfc2tiKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKTsKIH0KIAogc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIHRjcDZfcmVxdWVzdF9zb2NrX29wcyA9IHsKQEAgLTkwMSwyNiArNTMwLDE1IEBACiAJLnNlbmRfcmVzZXQJPQl0Y3BfdjZfc2VuZF9yZXNldAogfTsKIAotc3RhdGljIGludCBpcHY2X29wdF9hY2NlcHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgc3RydWN0IHRpbWV3YWl0X3NvY2tfb3BzIHRjcDZfdGltZXdhaXRfc29ja19vcHMgPSB7CisJLnR3c2tfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayksCisJLnR3c2tfdW5pcXVlCT0gdGNwX3R3c2tfdW5pcXVlLAorfTsKKworc3RhdGljIHZvaWQgdGNwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKLQlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7Ci0KLQlpZiAobnAtPnJ4b3B0LmFsbCkgewotCQlpZiAoKG9wdC0+aG9wICYmIChucC0+cnhvcHQuYml0cy5ob3BvcHRzIHx8IG5wLT5yeG9wdC5iaXRzLm9ob3BvcHRzKSkgfHwKLQkJICAgICgoSVBWNl9GTE9XSU5GT19NQVNLICYgKih1MzIqKXNrYi0+bmgucmF3KSAmJiBucC0+cnhvcHQuYml0cy5yeGZsb3cpIHx8Ci0JCSAgICAob3B0LT5zcmNydCAmJiAobnAtPnJ4b3B0LmJpdHMuc3JjcnQgfHwgbnAtPnJ4b3B0LmJpdHMub3NyY3J0KSkgfHwKLQkJICAgICgob3B0LT5kc3QxIHx8IG9wdC0+ZHN0MCkgJiYgKG5wLT5yeG9wdC5iaXRzLmRzdG9wdHMgfHwgbnAtPnJ4b3B0LmJpdHMub2RzdG9wdHMpKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCB0Y3BfdjZfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgbGVuLCAKLQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCB0Y3BoZHIgKnRoID0gc2tiLT5oLnRoOwogCiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7CiAJCXRoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJm5wLT5zYWRkciwgJm5wLT5kYWRkciwgbGVuLCBJUFBST1RPX1RDUCwgIDApOwpAQCAtMTA5MSw4ICs3MDksOSBAQAogCXN0cnVjdCBzb2NrICpuc2s7CiAKIAkvKiBGaW5kIHBvc3NpYmxlIGNvbm5lY3Rpb24gcmVxdWVzdHMuICovCi0JcmVxID0gdGNwX3Y2X3NlYXJjaF9yZXEoc2ssICZwcmV2LCB0aC0+c291cmNlLCAmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCi0JCQkJJnNrYi0+bmguaXB2NmgtPmRhZGRyLCBpbmV0Nl9paWYoc2tiKSk7CisJcmVxID0gaW5ldDZfY3NrX3NlYXJjaF9yZXEoc2ssICZwcmV2LCB0aC0+c291cmNlLAorCQkJCSAgICZza2ItPm5oLmlwdjZoLT5zYWRkciwKKwkJCQkgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsIGluZXQ2X2lpZihza2IpKTsKIAlpZiAocmVxKQogCQlyZXR1cm4gdGNwX2NoZWNrX3JlcShzaywgc2tiLCByZXEsIHByZXYpOwogCkBAIC0xMTE2LDIzICs3MzUsMTIgQEAKIAlyZXR1cm4gc2s7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF92Nl9zeW5xX2FkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKLXsKLQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0Jc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0ID0gaWNzay0+aWNza19hY2NlcHRfcXVldWUubGlzdGVuX29wdDsKLQljb25zdCB1MzIgaCA9IHRjcF92Nl9zeW5xX2hhc2goJnRjcDZfcnNrKHJlcSktPnJtdF9hZGRyLCBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydCwgbG9wdC0+aGFzaF9ybmQpOwotCi0JcmVxc2tfcXVldWVfaGFzaF9yZXEoJmljc2stPmljc2tfYWNjZXB0X3F1ZXVlLCBoLCByZXEsIFRDUF9USU1FT1VUX0lOSVQpOwotCWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZGVkKHNrLCBUQ1BfVElNRU9VVF9JTklUKTsKLX0KLQotCiAvKiBGSVhNRTogdGhpcyBpcyBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlIGlwdjQgY29kZS4KICAqIENhbiBzb21lIGtpbmQgb2YgbWVyZ2UgYmUgZG9uZT8gLS0gZXJpY3MKICAqLwogc3RhdGljIGludCB0Y3BfdjZfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgdGNwNl9yZXF1ZXN0X3NvY2sgKnRyZXE7CisJc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqdHJlcTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC0xMTU3LDcgKzc2NSw3IEBACiAJaWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykgJiYgaW5ldF9jc2tfcmVxc2tfcXVldWVfeW91bmcoc2spID4gMSkKIAkJZ290byBkcm9wOwogCi0JcmVxID0gcmVxc2tfYWxsb2MoJnRjcDZfcmVxdWVzdF9zb2NrX29wcyk7CisJcmVxID0gaW5ldDZfcmVxc2tfYWxsb2MoJnRjcDZfcmVxdWVzdF9zb2NrX29wcyk7CiAJaWYgKHJlcSA9PSBOVUxMKQogCQlnb3RvIGRyb3A7CiAKQEAgLTExNzAsNyArNzc4LDcgQEAKIAl0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDsKIAl0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgJnRtcF9vcHQsIHNrYik7CiAKLQl0cmVxID0gdGNwNl9yc2socmVxKTsKKwl0cmVxID0gaW5ldDZfcnNrKHJlcSk7CiAJaXB2Nl9hZGRyX2NvcHkoJnRyZXEtPnJtdF9hZGRyLCAmc2tiLT5uaC5pcHY2aC0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZ0cmVxLT5sb2NfYWRkciwgJnNrYi0+bmguaXB2NmgtPmRhZGRyKTsKIAlUQ1BfRUNOX2NyZWF0ZV9yZXF1ZXN0KHJlcSwgc2tiLT5oLnRoKTsKQEAgLTExOTYsOCArODA0LDcgQEAKIAlpZiAodGNwX3Y2X3NlbmRfc3luYWNrKHNrLCByZXEsIE5VTEwpKQogCQlnb3RvIGRyb3A7CiAKLQl0Y3BfdjZfc3lucV9hZGQoc2ssIHJlcSk7Ci0KKwlpbmV0Nl9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc2ssIHJlcSwgVENQX1RJTUVPVVRfSU5JVCk7CiAJcmV0dXJuIDA7CiAKIGRyb3A6CkBAIC0xMjEyLDcgKzgxOSw3IEBACiAJCQkJCSAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJCQkgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQlzdHJ1Y3QgdGNwNl9yZXF1ZXN0X3NvY2sgKnRyZXEgPSB0Y3A2X3JzayhyZXEpOworCXN0cnVjdCBpbmV0Nl9yZXF1ZXN0X3NvY2sgKnRyZXEgPSBpbmV0Nl9yc2socmVxKTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbmV3bnAsICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgdGNwNl9zb2NrICpuZXd0Y3A2c2s7CiAJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKQEAgLTEyNDcsNyArODU0LDcgQEAKIAogCQlpcHY2X2FkZHJfY29weSgmbmV3bnAtPnJjdl9zYWRkciwgJm5ld25wLT5zYWRkcik7CiAKLQkJbmV3dHAtPmFmX3NwZWNpZmljID0gJmlwdjZfbWFwcGVkOworCQlpbmV0X2NzayhuZXdzayktPmljc2tfYWZfb3BzID0gJmlwdjZfbWFwcGVkOwogCQluZXdzay0+c2tfYmFja2xvZ19yY3YgPSB0Y3BfdjRfZG9fcmN2OwogCQluZXducC0+cGt0b3B0aW9ucyAgPSBOVUxMOwogCQluZXducC0+b3B0CSAgID0gTlVMTDsKQEAgLTEyNjEsMTAgKzg2OCwxMCBAQAogCQkgKi8KIAogCQkvKiBJdCBpcyB0cmlja3kgcGxhY2UuIFVudGlsIHRoaXMgbW9tZW50IElQdjQgdGNwCi0JCSAgIHdvcmtlZCB3aXRoIElQdjYgYWZfdGNwLmFmX3NwZWNpZmljLgorCQkgICB3b3JrZWQgd2l0aCBJUHY2IGljc2suaWNza19hZl9vcHMuCiAJCSAgIFN5bmMgaXQgbm93LgogCQkgKi8KLQkJdGNwX3N5bmNfbXNzKG5ld3NrLCBuZXd0cC0+cG10dV9jb29raWUpOworCQl0Y3Bfc3luY19tc3MobmV3c2ssIGluZXRfY3NrKG5ld3NrKS0+aWNza19wbXR1X2Nvb2tpZSk7CiAKIAkJcmV0dXJuIG5ld3NrOwogCX0KQEAgLTEzNzEsMTAgKzk3OCwxMCBAQAogCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CiAJfQogCi0JbmV3dHAtPmV4dF9oZWFkZXJfbGVuID0gMDsKKwlpbmV0X2NzayhuZXdzayktPmljc2tfZXh0X2hkcl9sZW4gPSAwOwogCWlmIChuZXducC0+b3B0KQotCQluZXd0cC0+ZXh0X2hlYWRlcl9sZW4gPSBuZXducC0+b3B0LT5vcHRfbmZsZW4gKwotCQkJCQluZXducC0+b3B0LT5vcHRfZmxlbjsKKwkJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gKG5ld25wLT5vcHQtPm9wdF9uZmxlbiArCisJCQkJCQkgICAgIG5ld25wLT5vcHQtPm9wdF9mbGVuKTsKIAogCXRjcF9zeW5jX21zcyhuZXdzaywgZHN0X210dShkc3QpKTsKIAluZXd0cC0+YWR2bXNzID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfQURWTVNTKTsKQEAgLTEzODIsNyArOTg5LDcgQEAKIAogCW5ld2luZXQtPmRhZGRyID0gbmV3aW5ldC0+c2FkZHIgPSBuZXdpbmV0LT5yY3Zfc2FkZHIgPSBMT09QQkFDSzRfSVBWNjsKIAotCV9fdGNwX3Y2X2hhc2gobmV3c2spOworCV9faW5ldDZfaGFzaCgmdGNwX2hhc2hpbmZvLCBuZXdzayk7CiAJaW5ldF9pbmhlcml0X3BvcnQoJnRjcF9oYXNoaW5mbywgc2ssIG5ld3NrKTsKIAogCXJldHVybiBuZXdzazsKQEAgLTE2NzksMTM5ICsxMjg2LDE2IEBACiAJZ290byBkaXNjYXJkX2l0OwogfQogCi1zdGF0aWMgaW50IHRjcF92Nl9yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7Ci0Jc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCi0JZHN0ID0gX19za19kc3RfY2hlY2soc2ssIG5wLT5kc3RfY29va2llKTsKLQotCWlmIChkc3QgPT0gTlVMTCkgewotCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0JCXN0cnVjdCBpbjZfYWRkciAqZmluYWxfcCA9IE5VTEwsIGZpbmFsOwotCQlzdHJ1Y3QgZmxvd2kgZmw7Ci0KLQkJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7Ci0JCWZsLnByb3RvID0gSVBQUk9UT19UQ1A7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmbnAtPmRhZGRyKTsKLQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZucC0+c2FkZHIpOwotCQlmbC5mbDZfZmxvd2xhYmVsID0gbnAtPmZsb3dfbGFiZWw7Ci0JCWZsLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7Ci0JCWZsLmZsX2lwX2Rwb3J0ID0gaW5ldC0+ZHBvcnQ7Ci0JCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+c3BvcnQ7Ci0KLQkJaWYgKG5wLT5vcHQgJiYgbnAtPm9wdC0+c3JjcnQpIHsKLQkJCXN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKikgbnAtPm9wdC0+c3JjcnQ7Ci0JCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOwotCQkJZmluYWxfcCA9ICZmaW5hbDsKLQkJfQotCi0JCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOwotCQlpZiAoZXJyKSB7Ci0JCQlzay0+c2tfcm91dGVfY2FwcyA9IDA7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWlmIChmaW5hbF9wKQotCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGZpbmFsX3ApOwotCi0JCWlmICgoZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMCkpIDwgMCkgewotCQkJc2stPnNrX2Vycl9zb2Z0ID0gLWVycjsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlpcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwpOwotCQlzay0+c2tfcm91dGVfY2FwcyA9IGRzdC0+ZGV2LT5mZWF0dXJlcyAmCi0JCQl+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0Y3BfdjZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXBmcmFnb2spCi17Ci0Jc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCXN0cnVjdCBmbG93aSBmbDsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7Ci0Jc3RydWN0IGluNl9hZGRyICpmaW5hbF9wID0gTlVMTCwgZmluYWw7Ci0KLQltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKLQlmbC5wcm90byA9IElQUFJPVE9fVENQOwotCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmbnAtPmRhZGRyKTsKLQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X3NyYywgJm5wLT5zYWRkcik7Ci0JZmwuZmw2X2Zsb3dsYWJlbCA9IG5wLT5mbG93X2xhYmVsOwotCUlQNl9FQ05fZmxvd194bWl0KHNrLCBmbC5mbDZfZmxvd2xhYmVsKTsKLQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwotCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+c3BvcnQ7Ci0JZmwuZmxfaXBfZHBvcnQgPSBpbmV0LT5kcG9ydDsKLQotCWlmIChucC0+b3B0ICYmIG5wLT5vcHQtPnNyY3J0KSB7Ci0JCXN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKikgbnAtPm9wdC0+c3JjcnQ7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKLQl9Ci0KLQlkc3QgPSBfX3NrX2RzdF9jaGVjayhzaywgbnAtPmRzdF9jb29raWUpOwotCi0JaWYgKGRzdCA9PSBOVUxMKSB7Ci0JCWludCBlcnIgPSBpcDZfZHN0X2xvb2t1cChzaywgJmRzdCwgJmZsKTsKLQotCQlpZiAoZXJyKSB7Ci0JCQlzay0+c2tfZXJyX3NvZnQgPSAtZXJyOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWlmIChmaW5hbF9wKQotCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGZpbmFsX3ApOwotCi0JCWlmICgoZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMCkpIDwgMCkgewotCQkJc2stPnNrX3JvdXRlX2NhcHMgPSAwOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7Ci0JCXNrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzICYKLQkJCX4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOwotCX0KLQotCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKGRzdCk7Ci0KLQkvKiBSZXN0b3JlIGZpbmFsIGRlc3RpbmF0aW9uIGJhY2sgYWZ0ZXIgcm91dGluZyBkb25lICovCi0JaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZucC0+ZGFkZHIpOwotCi0JcmV0dXJuIGlwNl94bWl0KHNrLCBza2IsICZmbCwgbnAtPm9wdCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHY2X2FkZHIyc29ja2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKiB1YWRkcikKLXsKLQlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHVhZGRyOwotCi0Jc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQlpcHY2X2FkZHJfY29weSgmc2luNi0+c2luNl9hZGRyLCAmbnAtPmRhZGRyKTsKLQlzaW42LT5zaW42X3BvcnQJPSBpbmV0X3NrKHNrKS0+ZHBvcnQ7Ci0JLyogV2UgZG8gbm90IHN0b3JlIHJlY2VpdmVkIGZsb3dsYWJlbCBmb3IgVENQICovCi0Jc2luNi0+c2luNl9mbG93aW5mbyA9IDA7Ci0Jc2luNi0+c2luNl9zY29wZV9pZCA9IDA7Ci0JaWYgKHNrLT5za19ib3VuZF9kZXZfaWYgJiYKLQkgICAgaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKQotCQlzaW42LT5zaW42X3Njb3BlX2lkID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKLX0KLQogc3RhdGljIGludCB0Y3BfdjZfcmVtZW1iZXJfc3RhbXAoc3RydWN0IHNvY2sgKnNrKQogewogCS8qIEFsYXMsIG5vdCB5ZXQuLi4gKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB0Y3BfZnVuYyBpcHY2X3NwZWNpZmljID0gewotCS5xdWV1ZV94bWl0CT0JdGNwX3Y2X3htaXQsCitzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljID0geworCS5xdWV1ZV94bWl0CT0JaW5ldDZfY3NrX3htaXQsCiAJLnNlbmRfY2hlY2sJPQl0Y3BfdjZfc2VuZF9jaGVjaywKLQkucmVidWlsZF9oZWFkZXIJPQl0Y3BfdjZfcmVidWlsZF9oZWFkZXIsCisJLnJlYnVpbGRfaGVhZGVyCT0JaW5ldDZfc2tfcmVidWlsZF9oZWFkZXIsCiAJLmNvbm5fcmVxdWVzdAk9CXRjcF92Nl9jb25uX3JlcXVlc3QsCiAJLnN5bl9yZWN2X3NvY2sJPQl0Y3BfdjZfc3luX3JlY3Zfc29jaywKIAkucmVtZW1iZXJfc3RhbXAJPQl0Y3BfdjZfcmVtZW1iZXJfc3RhbXAsCkBAIC0xODE5LDcgKzEzMDMsNyBAQAogCiAJLnNldHNvY2tvcHQJPQlpcHY2X3NldHNvY2tvcHQsCiAJLmdldHNvY2tvcHQJPQlpcHY2X2dldHNvY2tvcHQsCi0JLmFkZHIyc29ja2FkZHIJPQl2Nl9hZGRyMnNvY2thZGRyLAorCS5hZGRyMnNvY2thZGRyCT0JaW5ldDZfY3NrX2FkZHIyc29ja2FkZHIsCiAJLnNvY2thZGRyX2xlbgk9CXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KQogfTsKIApAQCAtMTgyNyw3ICsxMzExLDcgQEAKICAqCVRDUCBvdmVyIElQdjQgdmlhIElORVQ2IEFQSQogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdGNwX2Z1bmMgaXB2Nl9tYXBwZWQgPSB7CitzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHsKIAkucXVldWVfeG1pdAk9CWlwX3F1ZXVlX3htaXQsCiAJLnNlbmRfY2hlY2sJPQl0Y3BfdjRfc2VuZF9jaGVjaywKIAkucmVidWlsZF9oZWFkZXIJPQlpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLApAQCAtMTgzOCw3ICsxMzIyLDcgQEAKIAogCS5zZXRzb2Nrb3B0CT0JaXB2Nl9zZXRzb2Nrb3B0LAogCS5nZXRzb2Nrb3B0CT0JaXB2Nl9nZXRzb2Nrb3B0LAotCS5hZGRyMnNvY2thZGRyCT0JdjZfYWRkcjJzb2NrYWRkciwKKwkuYWRkcjJzb2NrYWRkcgk9CWluZXQ2X2Nza19hZGRyMnNvY2thZGRyLAogCS5zb2NrYWRkcl9sZW4JPQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikKIH07CiAKQEAgLTE4NzcsOCArMTM2MSw5IEBACiAKIAlzay0+c2tfc3RhdGUgPSBUQ1BfQ0xPU0U7CiAKLQl0cC0+YWZfc3BlY2lmaWMgPSAmaXB2Nl9zcGVjaWZpYzsKKwlpY3NrLT5pY3NrX2FmX29wcyA9ICZpcHY2X3NwZWNpZmljOwogCWljc2stPmljc2tfY2Ffb3BzID0gJnRjcF9pbml0X2Nvbmdlc3Rpb25fb3BzOworCWljc2stPmljc2tfc3luY19tc3MgPSB0Y3Bfc3luY19tc3M7CiAJc2stPnNrX3dyaXRlX3NwYWNlID0gc2tfc3RyZWFtX3dyaXRlX3NwYWNlOwogCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfVVNFX1dSSVRFX1FVRVVFKTsKIApAQCAtMTkwMCwxNCArMTM4NSwxMyBAQAogc3RhdGljIHZvaWQgZ2V0X29wZW5yZXE2KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCAKIAkJCSBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgaW50IGksIGludCB1aWQpCiB7Ci0Jc3RydWN0IGluNl9hZGRyICpkZXN0LCAqc3JjOwogCWludCB0dGQgPSByZXEtPmV4cGlyZXMgLSBqaWZmaWVzOworCXN0cnVjdCBpbjZfYWRkciAqc3JjID0gJmluZXQ2X3JzayhyZXEpLT5sb2NfYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgKmRlc3QgPSAmaW5ldDZfcnNrKHJlcSktPnJtdF9hZGRyOwogCiAJaWYgKHR0ZCA8IDApCiAJCXR0ZCA9IDA7CiAKLQlzcmMgPSAmdGNwNl9yc2socmVxKS0+bG9jX2FkZHI7Ci0JZGVzdCA9ICZ0Y3A2X3JzayhyZXEpLT5ybXRfYWRkcjsKIAlzZXFfcHJpbnRmKHNlcSwKIAkJICAgIiU0ZDogJTA4WCUwOFglMDhYJTA4WDolMDRYICUwOFglMDhYJTA4WCUwOFg6JTA0WCAiCiAJCSAgICIlMDJYICUwOFg6JTA4WCAlMDJYOiUwOGxYICUwOFggJTVkICU4ZCAlZCAlZCAlcFxuIiwKQEAgLTE5ODgsMTQgKzE0NzIsMTQgQEAKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CiAJX191MTYgZGVzdHAsIHNyY3A7Ci0Jc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayAqdGNwNnR3ID0gdGNwNl90d3NrKChzdHJ1Y3Qgc29jayAqKXR3KTsKKwlzdHJ1Y3QgaW5ldDZfdGltZXdhaXRfc29jayAqdHc2ID0gaW5ldDZfdHdzaygoc3RydWN0IHNvY2sgKil0dyk7CiAJaW50IHR0ZCA9IHR3LT50d190dGQgLSBqaWZmaWVzOwogCiAJaWYgKHR0ZCA8IDApCiAJCXR0ZCA9IDA7CiAKLQlkZXN0ID0gJnRjcDZ0dy0+dHdfdjZfZGFkZHI7Ci0Jc3JjICA9ICZ0Y3A2dHctPnR3X3Y2X3Jjdl9zYWRkcjsKKwlkZXN0ID0gJnR3Ni0+dHdfdjZfZGFkZHI7CisJc3JjICA9ICZ0dzYtPnR3X3Y2X3Jjdl9zYWRkcjsKIAlkZXN0cCA9IG50b2hzKHR3LT50d19kcG9ydCk7CiAJc3JjcCAgPSBudG9ocyh0dy0+dHdfc3BvcnQpOwogCkBAIC0yMDkzLDcgKzE1NzcsNyBAQAogCS5zeXNjdGxfcm1lbQkJPSBzeXNjdGxfdGNwX3JtZW0sCiAJLm1heF9oZWFkZXIJCT0gTUFYX1RDUF9IRUFERVIsCiAJLm9ial9zaXplCQk9IHNpemVvZihzdHJ1Y3QgdGNwNl9zb2NrKSwKLQkudHdza19vYmpfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayksCisJLnR3c2tfcHJvdAkJPSAmdGNwNl90aW1ld2FpdF9zb2NrX29wcywKIAkucnNrX3Byb3QJCT0gJnRjcDZfcmVxdWVzdF9zb2NrX29wcywKIH07CiAKQEAgLTIxMTAsNyArMTU5NCw4IEBACiAJLm9wcwkJPQkmaW5ldDZfc3RyZWFtX29wcywKIAkuY2FwYWJpbGl0eQk9CS0xLAogCS5ub19jaGVjawk9CTAsCi0JLmZsYWdzCQk9CUlORVRfUFJPVE9TV19QRVJNQU5FTlQsCisJLmZsYWdzCQk9CUlORVRfUFJPVE9TV19QRVJNQU5FTlQgfAorCQkJCUlORVRfUFJPVE9TV19JQ1NLLAogfTsKIAogdm9pZCBfX2luaXQgdGNwdjZfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA1Y2M4NzMxLi5kODUzOGRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC0zMDAsMjAgKzMwMSw3IEBACiAJcmV0dXJuIGVycjsKIAogY3N1bV9jb3B5X2VycjoKLQkvKiBDbGVhciBxdWV1ZS4gKi8KLQlpZiAoZmxhZ3MmTVNHX1BFRUspIHsKLQkJaW50IGNsZWFyID0gMDsKLQkJc3Bpbl9sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKLQkJaWYgKHNrYiA9PSBza2JfcGVlaygmc2stPnNrX3JlY2VpdmVfcXVldWUpKSB7Ci0JCQlfX3NrYl91bmxpbmsoc2tiLCAmc2stPnNrX3JlY2VpdmVfcXVldWUpOwotCQkJY2xlYXIgPSAxOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKLQkJaWYgKGNsZWFyKQotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JfQotCi0Jc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CisJc2tiX2tpbGxfZGF0YWdyYW0oc2ssIHNrYiwgZmxhZ3MpOwogCiAJaWYgKGZsYWdzICYgTVNHX0RPTlRXQUlUKSB7CiAJCVVEUDZfSU5DX1NUQVRTX1VTRVIoVURQX01JQl9JTkVSUk9SUyk7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCAzNGIzYmI4Li4wZGM1MTliIDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTc1LDcgKzc1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnA4MDIzX2RhdGFsaW5rOwogc3RhdGljIHN0cnVjdCBkYXRhbGlua19wcm90byAqcFNOQVBfZGF0YWxpbms7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGlweF9kZ3JhbV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpcHhfZGdyYW1fb3BzOwogCiBMSVNUX0hFQUQoaXB4X2ludGVyZmFjZXMpOwogREVGSU5FX1NQSU5MT0NLKGlweF9pbnRlcmZhY2VzX2xvY2spOwpAQCAtMTg4NCw3ICsxODg0LDcgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyYyA9IGRldl9pb2N0bChjbWQsIGFyZ3ApOworCQlyYyA9IC1FTk9JT0NUTENNRDsKIAkJYnJlYWs7CiAJfQogCkBAIC0xOTAxLDcgKzE5MDEsNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIFNPQ0tPUFNfV1JBUFBFRChpcHhfZGdyYW1fb3BzKSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIFNPQ0tPUFNfV1JBUFBFRChpcHhfZGdyYW1fb3BzKSA9IHsKIAkuZmFtaWx5CQk9IFBGX0lQWCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBpcHhfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2FmX2lyZGEuYyBiL25ldC9pcmRhL2FmX2lyZGEuYwppbmRleCA2ZjkyZjljLi5mYmZhOTY3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9hZl9pcmRhLmMKKysrIGIvbmV0L2lyZGEvYWZfaXJkYS5jCkBAIC02MiwxMiArNjIsMTIgQEAKIAogc3RhdGljIGludCBpcmRhX2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpOwogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBpcmRhX3N0cmVhbV9vcHM7Ci1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBpcmRhX3NlcXBhY2tldF9vcHM7Ci1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBpcmRhX2RncmFtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGlyZGFfc3RyZWFtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGlyZGFfc2VxcGFja2V0X29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGlyZGFfZGdyYW1fb3BzOwogCiAjaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGlyZGFfdWx0cmFfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXJkYV91bHRyYV9vcHM7CiAjZGVmaW5lIFVMVFJBX01BWF9EQVRBIDM4MgogI2VuZGlmIC8qIENPTkZJR19JUkRBX1VMVFJBICovCiAKQEAgLTE0MzgsOCArMTQzOCw5IEBACiAJCQkvKgogCQkJICoJUE9TSVggMTAwMy4xZyBtYW5kYXRlcyB0aGlzIG9yZGVyLgogCQkJICovCi0JCQlpZiAoc2stPnNrX2VycikKLQkJCQlyZXQgPSBzb2NrX2Vycm9yKHNrKTsKKwkJCXJldCA9IHNvY2tfZXJyb3Ioc2spOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKIAkJCWVsc2UgaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikKIAkJCQk7CiAJCQllbHNlIGlmIChub2Jsb2NrKQpAQCAtMTgyMSw3ICsxODIyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGVmYXVsdDoKIAkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZG9pbmcgZGV2aWNlIGlvY3RsIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIGRldl9pb2N0bChjbWQsICh2b2lkIF9fdXNlciAqKSBhcmcpOworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAogCS8qTk9UUkVBQ0hFRCovCkBAIC0yNDYzLDcgKzI0NjQsNyBAQAogCS5vd25lcgk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgU09DS09QU19XUkFQUEVEKGlyZGFfc3RyZWFtX29wcykgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoaXJkYV9zdHJlYW1fb3BzKSA9IHsKIAkuZmFtaWx5ID0JUEZfSVJEQSwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CWlyZGFfcmVsZWFzZSwKQEAgLTI0ODQsNyArMjQ4NSw3IEBACiAJLnNlbmRwYWdlID0Jc29ja19ub19zZW5kcGFnZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIFNPQ0tPUFNfV1JBUFBFRChpcmRhX3NlcXBhY2tldF9vcHMpID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgU09DS09QU19XUkFQUEVEKGlyZGFfc2VxcGFja2V0X29wcykgPSB7CiAJLmZhbWlseSA9CVBGX0lSREEsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPQlpcmRhX3JlbGVhc2UsCkBAIC0yNTA1LDcgKzI1MDYsNyBAQAogCS5zZW5kcGFnZSA9CXNvY2tfbm9fc2VuZHBhZ2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoaXJkYV9kZ3JhbV9vcHMpID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgU09DS09QU19XUkFQUEVEKGlyZGFfZGdyYW1fb3BzKSA9IHsKIAkuZmFtaWx5ID0JUEZfSVJEQSwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CWlyZGFfcmVsZWFzZSwKQEAgLTI1MjcsNyArMjUyOCw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIFNPQ0tPUFNfV1JBUFBFRChpcmRhX3VsdHJhX29wcykgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoaXJkYV91bHRyYV9vcHMpID0gewogCS5mYW1pbHkgPQlQRl9JUkRBLAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWxlYXNlID0JaXJkYV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJpYXAuYyBiL25ldC9pcmRhL2lyaWFwLmMKaW5kZXggYjhiYjc4YS4uMjU0ZjkwNyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXAuYworKysgYi9uZXQvaXJkYS9pcmlhcC5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmlhcF9nZXR2YWx1ZWJ5Y2xhc3MgKGFkZHIsIG5hbWUsIGF0dHIpCiAgKgotICogICAgUmV0cmVpdmUgYWxsIHZhbHVlcyBmcm9tIGF0dHJpYnV0ZSBpbiBhbGwgb2JqZWN0cyB3aXRoIGdpdmVuIGNsYXNzCisgKiAgICBSZXRyaWV2ZSBhbGwgdmFsdWVzIGZyb20gYXR0cmlidXRlIGluIGFsbCBvYmplY3RzIHdpdGggZ2l2ZW4gY2xhc3MKICAqICAgIG5hbWUKICAqLwogaW50IGlyaWFwX2dldHZhbHVlYnljbGFzc19yZXF1ZXN0KHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IDM5MDMxNjguLjUyZWZkMDQgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMTEzLDcgKzExMyw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgcGZrZXlfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGZrZXlfb3BzOwogCiBzdGF0aWMgdm9pZCBwZmtleV9pbnNlcnQoc3RydWN0IHNvY2sgKnNrKQogewpAQCAtMzM2LDYgKzMzNiw3IEBACiAJW1NBREJfWF9FWFRfTkFUX1RfU1BPUlRdCT0gKHU4KSBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0KSwKIAlbU0FEQl9YX0VYVF9OQVRfVF9EUE9SVF0JPSAodTgpIHNpemVvZihzdHJ1Y3Qgc2FkYl94X25hdF90X3BvcnQpLAogCVtTQURCX1hfRVhUX05BVF9UX09BXQkJPSAodTgpIHNpemVvZihzdHJ1Y3Qgc2FkYl9hZGRyZXNzKSwKKwlbU0FEQl9YX0VYVF9TRUNfQ1RYXQkJPSAodTgpIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3NlY19jdHgpLAogfTsKIAogLyogVmVyaWZ5IHNhZGJfYWRkcmVzc197bGVuLHByZWZpeGxlbn0gYWdhaW5zdCBzYV9mYW1pbHkuICAqLwpAQCAtMzgzLDYgKzM4NCw1NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwZmtleV9zZWNfY3R4X2xlbihzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKnNlY19jdHgpCit7CisJaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzYWRiX3hfc2VjX2N0eCk7CisJbGVuICs9IHNlY19jdHgtPnNhZGJfeF9jdHhfbGVuOworCWxlbiArPSBzaXplb2YodWludDY0X3QpIC0gMTsKKwlsZW4gLz0gc2l6ZW9mKHVpbnQ2NF90KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9zZWNfY3R4X2xlbih2b2lkICpwKQoreworCXN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqc2VjX2N0eCA9IChzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKilwOworCWludCBsZW47CisKKwlpZiAoc2VjX2N0eC0+c2FkYl94X2N0eF9sZW4gPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJbGVuID0gcGZrZXlfc2VjX2N0eF9sZW4oc2VjX2N0eCk7CisKKwlpZiAoc2VjX2N0eC0+c2FkYl94X3NlY19sZW4gIT0gbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqcGZrZXlfc2FkYjJ4ZnJtX3VzZXJfc2VjX2N0eChzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKnNlY19jdHgpCit7CisJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4ID0gTlVMTDsKKwlpbnQgY3R4X3NpemUgPSBzZWNfY3R4LT5zYWRiX3hfY3R4X2xlbjsKKworCXVjdHggPSBrbWFsbG9jKChzaXplb2YoKnVjdHgpK2N0eF9zaXplKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXVjdHgpCisJCXJldHVybiBOVUxMOworCisJdWN0eC0+bGVuID0gcGZrZXlfc2VjX2N0eF9sZW4oc2VjX2N0eCk7CisJdWN0eC0+ZXh0dHlwZSA9IHNlY19jdHgtPnNhZGJfeF9zZWNfZXh0dHlwZTsKKwl1Y3R4LT5jdHhfZG9pID0gc2VjX2N0eC0+c2FkYl94X2N0eF9kb2k7CisJdWN0eC0+Y3R4X2FsZyA9IHNlY19jdHgtPnNhZGJfeF9jdHhfYWxnOworCXVjdHgtPmN0eF9sZW4gPSBzZWNfY3R4LT5zYWRiX3hfY3R4X2xlbjsKKwltZW1jcHkodWN0eCArIDEsIHNlY19jdHggKyAxLAorCSAgICAgICB1Y3R4LT5jdHhfbGVuKTsKKworCXJldHVybiB1Y3R4OworfQorCiBzdGF0aWMgaW50IHByZXNlbnRfYW5kX3NhbWVfZmFtaWx5KHN0cnVjdCBzYWRiX2FkZHJlc3MgKnNyYywKIAkJCQkgICBzdHJ1Y3Qgc2FkYl9hZGRyZXNzICpkc3QpCiB7CkBAIC00MzgsNiArNDg4LDEwIEBACiAJCQkJaWYgKHZlcmlmeV9hZGRyZXNzX2xlbihwKSkKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CQkJCQorCQkJaWYgKGV4dF90eXBlID09IFNBREJfWF9FWFRfU0VDX0NUWCkgeworCQkJCWlmICh2ZXJpZnlfc2VjX2N0eF9sZW4ocCkpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCQkJZXh0X2hkcnNbZXh0X3R5cGUtMV0gPSBwOwogCQl9CiAJCXAgICArPSBleHRfbGVuOwpAQCAtNTg2LDYgKzY0MCw5IEBACiAJc3RydWN0IHNhZGJfa2V5ICprZXk7CiAJc3RydWN0IHNhZGJfeF9zYTIgKnNhMjsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKnNlY19jdHg7CisJc3RydWN0IHhmcm1fc2VjX2N0eCAqeGZybV9jdHg7CisJaW50IGN0eF9zaXplID0gMDsKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwogI2VuZGlmCkBAIC02MDksNiArNjY2LDEyIEBACiAJCQlzaXplb2Yoc3RydWN0IHNhZGJfYWRkcmVzcykqMiArIAogCQkJCXNvY2thZGRyX3NpemUqMiArCiAJCQkJCXNpemVvZihzdHJ1Y3Qgc2FkYl94X3NhMik7CisKKwlpZiAoKHhmcm1fY3R4ID0geC0+c2VjdXJpdHkpKSB7CisJCWN0eF9zaXplID0gUEZLRVlfQUxJR044KHhmcm1fY3R4LT5jdHhfbGVuKTsKKwkJc2l6ZSArPSBzaXplb2Yoc3RydWN0IHNhZGJfeF9zZWNfY3R4KSArIGN0eF9zaXplOworCX0KKwogCS8qIGlkZW50aXR5ICYgc2Vuc2l0aXZpdHkgKi8KIAogCWlmICgoeC0+cHJvcHMuZmFtaWx5ID09IEFGX0lORVQgJiYKQEAgLTg5OSw2ICs5NjIsMjAgQEAKIAkJbl9wb3J0LT5zYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZCA9IDA7CiAJfQogCisJLyogc2VjdXJpdHkgY29udGV4dCAqLworCWlmICh4ZnJtX2N0eCkgeworCQlzZWNfY3R4ID0gKHN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqKSBza2JfcHV0KHNrYiwKKwkJCQlzaXplb2Yoc3RydWN0IHNhZGJfeF9zZWNfY3R4KSArIGN0eF9zaXplKTsKKwkJc2VjX2N0eC0+c2FkYl94X3NlY19sZW4gPQorCQkgIChzaXplb2Yoc3RydWN0IHNhZGJfeF9zZWNfY3R4KSArIGN0eF9zaXplKSAvIHNpemVvZih1aW50NjRfdCk7CisJCXNlY19jdHgtPnNhZGJfeF9zZWNfZXh0dHlwZSA9IFNBREJfWF9FWFRfU0VDX0NUWDsKKwkJc2VjX2N0eC0+c2FkYl94X2N0eF9kb2kgPSB4ZnJtX2N0eC0+Y3R4X2RvaTsKKwkJc2VjX2N0eC0+c2FkYl94X2N0eF9hbGcgPSB4ZnJtX2N0eC0+Y3R4X2FsZzsKKwkJc2VjX2N0eC0+c2FkYl94X2N0eF9sZW4gPSB4ZnJtX2N0eC0+Y3R4X2xlbjsKKwkJbWVtY3B5KHNlY19jdHggKyAxLCB4ZnJtX2N0eC0+Y3R4X3N0ciwKKwkJICAgICAgIHhmcm1fY3R4LT5jdHhfbGVuKTsKKwl9CisKIAlyZXR1cm4gc2tiOwogfQogCkBAIC05MDksNiArOTg2LDcgQEAKIAlzdHJ1Y3Qgc2FkYl9saWZldGltZSAqbGlmZXRpbWU7CiAJc3RydWN0IHNhZGJfc2EgKnNhOwogCXN0cnVjdCBzYWRiX2tleSAqa2V5OworCXN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqc2VjX2N0eDsKIAl1aW50MTZfdCBwcm90bzsKIAlpbnQgZXJyOwogCQpAQCAtOTkzLDYgKzEwNzEsMjEgQEAKIAkJeC0+bGZ0LnNvZnRfYWRkX2V4cGlyZXNfc2Vjb25kcyA9IGxpZmV0aW1lLT5zYWRiX2xpZmV0aW1lX2FkZHRpbWU7CiAJCXgtPmxmdC5zb2Z0X3VzZV9leHBpcmVzX3NlY29uZHMgPSBsaWZldGltZS0+c2FkYl9saWZldGltZV91c2V0aW1lOwogCX0KKworCXNlY19jdHggPSAoc3RydWN0IHNhZGJfeF9zZWNfY3R4ICopIGV4dF9oZHJzW1NBREJfWF9FWFRfU0VDX0NUWC0xXTsKKwlpZiAoc2VjX2N0eCAhPSBOVUxMKSB7CisJCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqdWN0eCA9IHBma2V5X3NhZGIyeGZybV91c2VyX3NlY19jdHgoc2VjX2N0eCk7CisKKwkJaWYgKCF1Y3R4KQorCQkJZ290byBvdXQ7CisKKwkJZXJyID0gc2VjdXJpdHlfeGZybV9zdGF0ZV9hbGxvYyh4LCB1Y3R4KTsKKwkJa2ZyZWUodWN0eCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKwogCWtleSA9IChzdHJ1Y3Qgc2FkYl9rZXkqKSBleHRfaGRyc1tTQURCX0VYVF9LRVlfQVVUSC0xXTsKIAlpZiAoc2EtPnNhZGJfc2FfYXV0aCkgewogCQlpbnQga2V5c2l6ZSA9IDA7CkBAIC0xNzIwLDYgKzE4MTMsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcGZrZXlfeGZybV9wb2xpY3kyc2VjX2N0eF9zaXplKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCit7CisgIHN0cnVjdCB4ZnJtX3NlY19jdHggKnhmcm1fY3R4ID0geHAtPnNlY3VyaXR5OworCisJaWYgKHhmcm1fY3R4KSB7CisJCWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHNhZGJfeF9zZWNfY3R4KTsKKwkJbGVuICs9IHhmcm1fY3R4LT5jdHhfbGVuOworCQlyZXR1cm4gUEZLRVlfQUxJR044KGxlbik7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBma2V5X3hmcm1fcG9saWN5Mm1zZ19zaXplKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCiB7CiAJaW50IHNvY2thZGRyX3NpemUgPSBwZmtleV9zb2NrYWRkcl9zaXplKHhwLT5mYW1pbHkpOwpAQCAtMTczMyw3ICsxODM4LDggQEAKIAkJKHNvY2thZGRyX3NpemUgKiAyKSArCiAJCXNpemVvZihzdHJ1Y3Qgc2FkYl94X3BvbGljeSkgKwogCQkoeHAtPnhmcm1fbnIgKiAoc2l6ZW9mKHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0KSArCi0JCQkJKHNvY2tsZW4gKiAyKSkpOworCQkJCShzb2NrbGVuICogMikpKSArCisJCXBma2V5X3hmcm1fcG9saWN5MnNlY19jdHhfc2l6ZSh4cCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqIHBma2V5X3hmcm1fcG9saWN5Mm1zZ19wcmVwKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCkBAIC0xNzU3LDYgKzE4NjMsOCBAQAogCXN0cnVjdCBzYWRiX2xpZmV0aW1lICpsaWZldGltZTsKIAlzdHJ1Y3Qgc2FkYl94X3BvbGljeSAqcG9sOwogCXN0cnVjdCBzb2NrYWRkcl9pbiAgICpzaW47CisJc3RydWN0IHNhZGJfeF9zZWNfY3R4ICpzZWNfY3R4OworCXN0cnVjdCB4ZnJtX3NlY19jdHggKnhmcm1fY3R4OwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCXN0cnVjdCBzb2NrYWRkcl9pbjYgICpzaW42OwogI2VuZGlmCkBAIC0xOTQxLDYgKzIwNDksMjEgQEAKIAkJCX0KIAkJfQogCX0KKworCS8qIHNlY3VyaXR5IGNvbnRleHQgKi8KKwlpZiAoKHhmcm1fY3R4ID0geHAtPnNlY3VyaXR5KSkgeworCQlpbnQgY3R4X3NpemUgPSBwZmtleV94ZnJtX3BvbGljeTJzZWNfY3R4X3NpemUoeHApOworCisJCXNlY19jdHggPSAoc3RydWN0IHNhZGJfeF9zZWNfY3R4ICopIHNrYl9wdXQoc2tiLCBjdHhfc2l6ZSk7CisJCXNlY19jdHgtPnNhZGJfeF9zZWNfbGVuID0gY3R4X3NpemUgLyBzaXplb2YodWludDY0X3QpOworCQlzZWNfY3R4LT5zYWRiX3hfc2VjX2V4dHR5cGUgPSBTQURCX1hfRVhUX1NFQ19DVFg7CisJCXNlY19jdHgtPnNhZGJfeF9jdHhfZG9pID0geGZybV9jdHgtPmN0eF9kb2k7CisJCXNlY19jdHgtPnNhZGJfeF9jdHhfYWxnID0geGZybV9jdHgtPmN0eF9hbGc7CisJCXNlY19jdHgtPnNhZGJfeF9jdHhfbGVuID0geGZybV9jdHgtPmN0eF9sZW47CisJCW1lbWNweShzZWNfY3R4ICsgMSwgeGZybV9jdHgtPmN0eF9zdHIsCisJCSAgICAgICB4ZnJtX2N0eC0+Y3R4X2xlbik7CisJfQorCiAJaGRyLT5zYWRiX21zZ19sZW4gPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsKIAloZHItPnNhZGJfbXNnX3Jlc2VydmVkID0gYXRvbWljX3JlYWQoJnhwLT5yZWZjbnQpOwogfQpAQCAtMTk3NiwxMiArMjA5OSwxMyBAQAogCiBzdGF0aWMgaW50IHBma2V5X3NwZGFkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzYWRiX21zZyAqaGRyLCB2b2lkICoqZXh0X2hkcnMpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc2FkYl9saWZldGltZSAqbGlmZXRpbWU7CiAJc3RydWN0IHNhZGJfYWRkcmVzcyAqc2E7CiAJc3RydWN0IHNhZGJfeF9wb2xpY3kgKnBvbDsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwOwogCXN0cnVjdCBrbV9ldmVudCBjOworCXN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqc2VjX2N0eDsKIAogCWlmICghcHJlc2VudF9hbmRfc2FtZV9mYW1pbHkoZXh0X2hkcnNbU0FEQl9FWFRfQUREUkVTU19TUkMtMV0sCiAJCQkJICAgICBleHRfaGRyc1tTQURCX0VYVF9BRERSRVNTX0RTVC0xXSkgfHwKQEAgLTIwMjgsNiArMjE1MiwyMiBAQAogCWlmICh4cC0+c2VsZWN0b3IuZHBvcnQpCiAJCXhwLT5zZWxlY3Rvci5kcG9ydF9tYXNrID0gfjA7CiAKKwlzZWNfY3R4ID0gKHN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqKSBleHRfaGRyc1tTQURCX1hfRVhUX1NFQ19DVFgtMV07CisJaWYgKHNlY19jdHggIT0gTlVMTCkgeworCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHggPSBwZmtleV9zYWRiMnhmcm1fdXNlcl9zZWNfY3R4KHNlY19jdHgpOworCisJCWlmICghdWN0eCkgeworCQkJZXJyID0gLUVOT0JVRlM7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHhwLCB1Y3R4KTsKKwkJa2ZyZWUodWN0eCk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKwogCXhwLT5sZnQuc29mdF9ieXRlX2xpbWl0ID0gWEZSTV9JTkY7CiAJeHAtPmxmdC5oYXJkX2J5dGVfbGltaXQgPSBYRlJNX0lORjsKIAl4cC0+bGZ0LnNvZnRfcGFja2V0X2xpbWl0ID0gWEZSTV9JTkY7CkBAIC0yMDUxLDEwICsyMTkxLDkgQEAKIAogCWVyciA9IHhmcm1fcG9saWN5X2luc2VydChwb2wtPnNhZGJfeF9wb2xpY3lfZGlyLTEsIHhwLAogCQkJCSBoZHItPnNhZGJfbXNnX3R5cGUgIT0gU0FEQl9YX1NQRFVQREFURSk7Ci0JaWYgKGVycikgewotCQlrZnJlZSh4cCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCisJaWYgKGVycikKKwkJZ290byBvdXQ7CiAKIAlpZiAoaGRyLT5zYWRiX21zZ190eXBlID09IFNBREJfWF9TUERVUERBVEUpCiAJCWMuZXZlbnQgPSBYRlJNX01TR19VUERQT0xJQ1k7CkBAIC0yMDY5LDYgKzIyMDgsNyBAQAogCXJldHVybiAwOwogCiBvdXQ6CisJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZSh4cCk7CiAJa2ZyZWUoeHApOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMDc4LDkgKzIyMTgsMTAgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBzYWRiX2FkZHJlc3MgKnNhOwogCXN0cnVjdCBzYWRiX3hfcG9saWN5ICpwb2w7Ci0Jc3RydWN0IHhmcm1fcG9saWN5ICp4cDsKKwlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB0bXA7CiAJc3RydWN0IHhmcm1fc2VsZWN0b3Igc2VsOwogCXN0cnVjdCBrbV9ldmVudCBjOworCXN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqc2VjX2N0eDsKIAogCWlmICghcHJlc2VudF9hbmRfc2FtZV9mYW1pbHkoZXh0X2hkcnNbU0FEQl9FWFRfQUREUkVTU19TUkMtMV0sCiAJCQkJICAgICBleHRfaGRyc1tTQURCX0VYVF9BRERSRVNTX0RTVC0xXSkgfHwKQEAgLTIxMDksNyArMjI1MCwyNCBAQAogCWlmIChzZWwuZHBvcnQpCiAJCXNlbC5kcG9ydF9tYXNrID0gfjA7CiAKLQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsKHBvbC0+c2FkYl94X3BvbGljeV9kaXItMSwgJnNlbCwgMSk7CisJc2VjX2N0eCA9IChzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKikgZXh0X2hkcnNbU0FEQl9YX0VYVF9TRUNfQ1RYLTFdOworCW1lbXNldCgmdG1wLCAwLCBzaXplb2Yoc3RydWN0IHhmcm1fcG9saWN5KSk7CisKKwlpZiAoc2VjX2N0eCAhPSBOVUxMKSB7CisJCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqdWN0eCA9IHBma2V5X3NhZGIyeGZybV91c2VyX3NlY19jdHgoc2VjX2N0eCk7CisKKwkJaWYgKCF1Y3R4KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MoJnRtcCwgdWN0eCk7CisJCWtmcmVlKHVjdHgpOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KHBvbC0+c2FkYl94X3BvbGljeV9kaXItMSwgJnNlbCwgdG1wLnNlY3VyaXR5LCAxKTsKKwlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKCZ0bXApOwogCWlmICh4cCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtMjY2MCw2ICsyODE4LDcgQEAKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwOwogCXN0cnVjdCBzYWRiX3hfcG9saWN5ICpwb2wgPSAoc3RydWN0IHNhZGJfeF9wb2xpY3kqKWRhdGE7CisJc3RydWN0IHNhZGJfeF9zZWNfY3R4ICpzZWNfY3R4OwogCiAJc3dpdGNoIChmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6CkBAIC0yNzA5LDEwICsyODY4LDMyIEBACiAJICAgICgqZGlyID0gcGFyc2VfaXBzZWNyZXF1ZXN0cyh4cCwgcG9sKSkgPCAwKQogCQlnb3RvIG91dDsKIAorCS8qIHNlY3VyaXR5IGNvbnRleHQgdG9vICovCisJaWYgKGxlbiA+PSAocG9sLT5zYWRiX3hfcG9saWN5X2xlbio4ICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzYWRiX3hfc2VjX2N0eCkpKSB7CisJCWNoYXIgKnAgPSAoY2hhciAqKXBvbDsKKwkJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4OworCisJCXAgKz0gcG9sLT5zYWRiX3hfcG9saWN5X2xlbio4OworCQlzZWNfY3R4ID0gKHN0cnVjdCBzYWRiX3hfc2VjX2N0eCAqKXA7CisJCWlmIChsZW4gPCBwb2wtPnNhZGJfeF9wb2xpY3lfbGVuKjggKworCQkgICAgc2VjX2N0eC0+c2FkYl94X3NlY19sZW4pCisJCQlnb3RvIG91dDsKKwkJaWYgKCgqZGlyID0gdmVyaWZ5X3NlY19jdHhfbGVuKHApKSkKKwkJCWdvdG8gb3V0OworCQl1Y3R4ID0gcGZrZXlfc2FkYjJ4ZnJtX3VzZXJfc2VjX2N0eChzZWNfY3R4KTsKKwkJKmRpciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHhwLCB1Y3R4KTsKKwkJa2ZyZWUodWN0eCk7CisKKwkJaWYgKCpkaXIpCisJCQlnb3RvIG91dDsKKwl9CisKIAkqZGlyID0gcG9sLT5zYWRiX3hfcG9saWN5X2Rpci0xOwogCXJldHVybiB4cDsKIAogb3V0OgorCXNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoeHApOwogCWtmcmVlKHhwKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI5NDYsNyArMzEyNyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgcGZrZXlfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGZrZXlfb3BzID0gewogCS5mYW1pbHkJCT0JUEZfS0VZLAogCS5vd25lcgkJPQlUSElTX01PRFVMRSwKIAkvKiBPcGVyYXRpb25zIHRoYXQgbWFrZSBubyBzZW5zZSBvbiBwZmtleSBzb2NrZXRzLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggYzNmMGIwNy4uODE3MWM1MyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC0zNiw3ICszNiw3IEBACiBzdGF0aWMgdTE2IGxsY191aV9zYXBfbGFzdF9hdXRvcG9ydCA9IExMQ19TQVBfRFlOX1NUQVJUOwogc3RhdGljIHUxNiBsbGNfdWlfc2FwX2xpbmtfbm9fbWF4WzI1Nl07CiBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2xsYyBsbGNfdWlfYWRkcm51bGw7Ci1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBsbGNfdWlfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wczsKIAogc3RhdGljIGludCBsbGNfdWlfd2FpdF9mb3JfY29ubihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCk7CiBzdGF0aWMgaW50IGxsY191aV93YWl0X2Zvcl9kaXNjKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KTsKQEAgLTU2NiwxMCArNTY2LDkgQEAKIAkJLyoKIAkJICogUE9TSVggMTAwMy4xZyBtYW5kYXRlcyB0aGlzIG9yZGVyLgogCQkgKi8KLQkJaWYgKHNrLT5za19lcnIpIHsKLQkJCXJjID0gc29ja19lcnJvcihzayk7CisJCXJjID0gc29ja19lcnJvcihzayk7CisJCWlmIChyYykKIAkJCWJyZWFrOwotCQl9CiAJCXJjID0gMDsKIAkJaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikKIAkJCWJyZWFrOwpAQCAtOTYwLDcgKzk1OSw3IEBACiBzdGF0aWMgaW50IGxsY191aV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIGRldl9pb2N0bChjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAogLyoqCkBAIC0xMDk5LDcgKzEwOTgsNyBAQAogCS5vd25lcgk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY191aV9vcHMgPSB7CiAJLmZhbWlseQkgICAgID0gUEZfTExDLAogCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlICAgICA9IGxsY191aV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCBjYmE2MzcyLi5lMTA1MTJlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCUlOSVRfSExJU1RfTk9ERSgmaW5zdC0+aGxpc3QpOwotCWluc3QtPmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3Bpbl9sb2NrX2luaXQoJmluc3QtPmxvY2spOwogCS8qIG5lZWRzIHRvIGJlIHR3bywgc2luY2Ugd2UgX3B1dCgpIGFmdGVyIGNyZWF0aW9uICovCiAJYXRvbWljX3NldCgmaW5zdC0+dXNlLCAyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKaW5kZXggZjI4NDYwYi4uNTVhZmRkYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAlhdG9taWNfc2V0KCZpbnN0LT5pZF9zZXF1ZW5jZSwgMCk7CiAJLyogbmVlZHMgdG8gYmUgdHdvLCBzaW5jZSB3ZSBfcHV0KCkgYWZ0ZXIgY3JlYXRpb24gKi8KIAlhdG9taWNfc2V0KCZpbnN0LT51c2UsIDIpOwotCWluc3QtPmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3Bpbl9sb2NrX2luaXQoJmluc3QtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZpbnN0LT5xdWV1ZV9saXN0KTsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDk2MDIwZDcuLjc4NDljYWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBuZXRsaW5rX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG5ldGxpbmtfb3BzOwogCiBzdGF0aWMgaW50IG5ldGxpbmtfaW5zZXJ0KHN0cnVjdCBzb2NrICpzaywgdTMyIHBpZCkKIHsKQEAgLTE2NTYsNyArMTY1Niw3IEBACiAJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5ldGxpbmtfY2hhaW4sIG5iKTsKIH0KICAgICAgICAgICAgICAgICAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIG5ldGxpbmtfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbmV0bGlua19vcHMgPSB7CiAJLmZhbWlseSA9CVBGX05FVExJTkssCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPQluZXRsaW5rX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCmluZGV4IDI4N2NmY2MuLjNiMTM3ODQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCkBAIC00NDEsNyArNDQxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICpjdHJsX2J1aWxkX21zZyhzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwgdTMyIHBpZCwKLQkJCQkgICAgICBpbnQgc2VxLCBpbnQgY21kKQorCQkJCSAgICAgIGludCBzZXEsIHU4IGNtZCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwppbmRleCBlNWQ4MmQ3Li42M2IwZTRhIDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTYzLDcgKzYzLDcgQEAKIHN0YXRpYyBITElTVF9IRUFEKG5yX2xpc3QpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhucl9saXN0X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBucl9wcm90b19vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBucl9wcm90b19vcHM7CiAKIC8qCiAgKglTb2NrZXQgcmVtb3ZhbCBkdXJpbmcgYW4gaW50ZXJydXB0IGlzIG5vdyBzYWZlLgpAQCAtMTE2NiwxMCArMTE2NiwxMSBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByZXQ7CiAKLQlsb2NrX3NvY2soc2spOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBUSU9DT1VUUTogewogCQlsb25nIGFtb3VudDsKKworCQlsb2NrX3NvY2soc2spOwogCQlhbW91bnQgPSBzay0+c2tfc25kYnVmIC0gYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKTsKIAkJaWYgKGFtb3VudCA8IDApCiAJCQlhbW91bnQgPSAwOwpAQCAtMTE4MCw2ICsxMTgxLDggQEAKIAljYXNlIFRJT0NJTlE6IHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJbG9uZyBhbW91bnQgPSAwTDsKKworCQlsb2NrX3NvY2soc2spOwogCQkvKiBUaGVzZSB0d28gYXJlIHNhZmUgb24gYSBzaW5nbGUgQ1BVIHN5c3RlbSBhcyBvbmx5IHVzZXIgdGFza3MgZmlkZGxlIGhlcmUgKi8KIAkJaWYgKChza2IgPSBza2JfcGVlaygmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKQogCQkJYW1vdW50ID0gc2tiLT5sZW47CkBAIC0xMTg4LDYgKzExOTEsNyBAQAogCX0KIAogCWNhc2UgU0lPQ0dTVEFNUDoKKwkJbG9ja19zb2NrKHNrKTsKIAkJcmV0ID0gc29ja19nZXRfdGltZXN0YW1wKHNrLCBhcmdwKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJcmV0dXJuIHJldDsKQEAgLTEyMDIsMjEgKzEyMDYsMTcgQEAKIAljYXNlIFNJT0NTSUZORVRNQVNLOgogCWNhc2UgU0lPQ0dJRk1FVFJJQzoKIAljYXNlIFNJT0NTSUZNRVRSSUM6Ci0JCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2FzZSBTSU9DQUREUlQ6CiAJY2FzZSBTSU9DREVMUlQ6CiAJY2FzZSBTSU9DTlJERUNPQlM6Ci0JCXJlbGVhc2Vfc29jayhzayk7CiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgcmV0dXJuIC1FUEVSTTsKIAkJcmV0dXJuIG5yX3J0X2lvY3RsKGNtZCwgYXJncCk7CiAKIAlkZWZhdWx0OgotCQlyZWxlYXNlX3NvY2soc2spOwotCQlyZXR1cm4gZGV2X2lvY3RsKGNtZCwgYXJncCk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQotCXJlbGVhc2Vfc29jayhzayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMzcsNyArMTMzNyw3IEBACiAJLm93bmVyCQk9CVRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgbnJfcHJvdG9fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbnJfcHJvdG9fb3BzID0gewogCS5mYW1pbHkJCT0JUEZfTkVUUk9NLAogCS5vd25lcgkJPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZQk9CW5yX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvbm9uZXQuYyBiL25ldC9ub25ldC5jCmluZGV4IGU1MjQxZGMuLjEyMzBmMGEgMTAwNjQ0Ci0tLSBhL25ldC9ub25ldC5jCisrKyBiL25ldC9ub25ldC5jCkBAIC0xNCwxMSArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotdm9pZCBfX2luaXQgc29ja19pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTGludXggTm9ORVQxLjAgZm9yIExpbnV4IDIuNlxuIik7Ci19Ci0KIHN0YXRpYyBpbnQgc29ja19ub19vcGVuKHN0cnVjdCBpbm9kZSAqaXJyZWxldmFudCwgc3RydWN0IGZpbGUgKmRvbnRjYXJlKQogewogCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAzZTI0NjI3Li5mNjllNWVkIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTI1MSwxMCArMjUxLDEwIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7CiAKICNpZmRlZiBDT05GSUdfU09DS19QQUNLRVQKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdDsKIAogc3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKQEAgLTE1MjEsNyArMTUyMSw3IEBACiAjZW5kaWYKIAogCQlkZWZhdWx0OgotCQkJcmV0dXJuIGRldl9pb2N0bChjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE3ODQsNyArMTc4NCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19TT0NLX1BBQ0tFVAotc3RhdGljIHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wc19zcGt0ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wc19zcGt0ID0gewogCS5mYW1pbHkgPQlQRl9QQUNLRVQsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPQlwYWNrZXRfcmVsZWFzZSwKQEAgLTE4MDYsNyArMTgwNiw3IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0gewogCS5mYW1pbHkgPQlQRl9QQUNLRVQsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPQlwYWNrZXRfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL25ldC9yb3NlL2FmX3Jvc2UuYyBiL25ldC9yb3NlL2FmX3Jvc2UuYwppbmRleCA4MjlmZGJjLi42MzA5MGJlIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9hZl9yb3NlLmMKKysrIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCkBAIC0xMzIwLDcgKzEzMjAsNyBAQAogCQlyZXR1cm4gMDsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiBkZXZfaW9jdGwoY21kLCBhcmdwKTsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwppbmRleCA4MmZiMDdhLi5iYTUyODMyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMS4xIgorI2RlZmluZSBWRVJTSU9OICIxLjIiCiAKIC8qCU5ldHdvcmsgRW11bGF0aW9uIFF1ZXVpbmcgYWxnb3JpdGhtLgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNjUsMTEgKzY1LDEyIEBACiAJdTMyIGppdHRlcjsKIAl1MzIgZHVwbGljYXRlOwogCXUzMiByZW9yZGVyOworCXUzMiBjb3JydXB0OwogCiAJc3RydWN0IGNybmRzdGF0ZSB7CiAJCXVuc2lnbmVkIGxvbmcgbGFzdDsKIAkJdW5zaWduZWQgbG9uZyByaG87Ci0JfSBkZWxheV9jb3IsIGxvc3NfY29yLCBkdXBfY29yLCByZW9yZGVyX2NvcjsKKwl9IGRlbGF5X2NvciwgbG9zc19jb3IsIGR1cF9jb3IsIHJlb3JkZXJfY29yLCBjb3JydXB0X2NvcjsKIAogCXN0cnVjdCBkaXN0dGFibGUgewogCQl1MzIgIHNpemU7CkBAIC0xODMsNiArMTg0LDIzIEBACiAJCXEtPmR1cGxpY2F0ZSA9IGR1cHNhdmU7CiAJfQogCisJLyoKKwkgKiBSYW5kb21pemVkIHBhY2tldCBjb3JydXB0aW9uLgorCSAqIE1ha2UgY29weSBpZiBuZWVkZWQgc2luY2Ugd2UgYXJlIG1vZGlmeWluZworCSAqIElmIHBhY2tldCBpcyBnb2luZyB0byBiZSBoYXJkd2FyZSBjaGVja3N1bW1lZCwgdGhlbgorCSAqIGRvIGl0IG5vdyBpbiBzb2Z0d2FyZSBiZWZvcmUgd2UgbWFuZ2xlIGl0LgorCSAqLworCWlmIChxLT5jb3JydXB0ICYmIHEtPmNvcnJ1cHQgPj0gZ2V0X2NyYW5kb20oJnEtPmNvcnJ1cHRfY29yKSkgeworCQlpZiAoIShza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpKQorCQkgICAgfHwgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXCisJCQkmJiBza2JfY2hlY2tzdW1faGVscChza2IsIDApKSkgeworCQkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKKwkJCXJldHVybiBORVRfWE1JVF9EUk9QOworCQl9CisKKwkJc2tiLT5kYXRhW25ldF9yYW5kb20oKSAlIHNrYl9oZWFkbGVuKHNrYildIF49IDE8PChuZXRfcmFuZG9tKCkgJSA4KTsKKwl9CisKIAlpZiAocS0+Z2FwID09IDAgCQkvKiBub3QgZG9pbmcgcmVvcmRlcmluZyAqLwogCSAgICB8fCBxLT5jb3VudGVyIDwgcS0+Z2FwIAkvKiBpbnNpZGUgbGFzdCByZW9yZGVyaW5nIGdhcCAqLwogCSAgICB8fCBxLT5yZW9yZGVyIDwgZ2V0X2NyYW5kb20oJnEtPnJlb3JkZXJfY29yKSkgewpAQCAtMzgyLDYgKzQwMCwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGdldF9jb3JydXB0KHN0cnVjdCBRZGlzYyAqc2NoLCBjb25zdCBzdHJ1Y3QgcnRhdHRyICphdHRyKQoreworCXN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOworCWNvbnN0IHN0cnVjdCB0Y19uZXRlbV9jb3JydXB0ICpyID0gUlRBX0RBVEEoYXR0cik7CisKKwlpZiAoUlRBX1BBWUxPQUQoYXR0cikgIT0gc2l6ZW9mKCpyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlxLT5jb3JydXB0ID0gci0+cHJvYmFiaWxpdHk7CisJaW5pdF9jcmFuZG9tKCZxLT5jb3JydXB0X2Nvciwgci0+Y29ycmVsYXRpb24pOworCXJldHVybiAwOworfQorCisvKiBQYXJzZSBuZXRsaW5rIG1lc3NhZ2UgdG8gc2V0IG9wdGlvbnMgKi8KIHN0YXRpYyBpbnQgbmV0ZW1fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcnRhdHRyICpvcHQpCiB7CiAJc3RydWN0IG5ldGVtX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CkBAIC00MzIsMTMgKzQ2NCwxOSBAQAogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9CisKIAkJaWYgKHRiW1RDQV9ORVRFTV9SRU9SREVSLTFdKSB7CiAJCQlyZXQgPSBnZXRfcmVvcmRlcihzY2gsIHRiW1RDQV9ORVRFTV9SRU9SREVSLTFdKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQotCX0KIAorCQlpZiAodGJbVENBX05FVEVNX0NPUlJVUFQtMV0pIHsKKwkJCXJldCA9IGdldF9jb3JydXB0KHNjaCwgdGJbVENBX05FVEVNX0NPUlJVUFQtMV0pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC01NjQsNiArNjAyLDcgQEAKIAlzdHJ1Y3QgdGNfbmV0ZW1fcW9wdCBxb3B0OwogCXN0cnVjdCB0Y19uZXRlbV9jb3JyIGNvcjsKIAlzdHJ1Y3QgdGNfbmV0ZW1fcmVvcmRlciByZW9yZGVyOworCXN0cnVjdCB0Y19uZXRlbV9jb3JydXB0IGNvcnJ1cHQ7CiAKIAlxb3B0LmxhdGVuY3kgPSBxLT5sYXRlbmN5OwogCXFvcHQuaml0dGVyID0gcS0+aml0dGVyOwpAQCAtNTgyLDYgKzYyMSwxMCBAQAogCXJlb3JkZXIuY29ycmVsYXRpb24gPSBxLT5yZW9yZGVyX2Nvci5yaG87CiAJUlRBX1BVVChza2IsIFRDQV9ORVRFTV9SRU9SREVSLCBzaXplb2YocmVvcmRlciksICZyZW9yZGVyKTsKIAorCWNvcnJ1cHQucHJvYmFiaWxpdHkgPSBxLT5jb3JydXB0OworCWNvcnJ1cHQuY29ycmVsYXRpb24gPSBxLT5jb3JydXB0X2Nvci5yaG87CisJUlRBX1BVVChza2IsIFRDQV9ORVRFTV9DT1JSVVBULCBzaXplb2YoY29ycnVwdCksICZjb3JydXB0KTsKKwogCXJ0YS0+cnRhX2xlbiA9IHNrYi0+dGFpbCAtIGI7CiAKIAlyZXR1cm4gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RlcWwuYyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCmluZGV4IDZjZjAzNDIuLmM0YTJhOGMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGVxbC5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCBkZWM2OGE2Li45ZDA1ZTEzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYworKysgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtMTEwLDcgKzExMCw2IEBACiAJYXNvYy0+Y29va2llX2xpZmUudHZfc2VjID0gc3AtPmFzc29jcGFyYW1zLnNhc29jX2Nvb2tpZV9saWZlIC8gMTAwMDsKIAlhc29jLT5jb29raWVfbGlmZS50dl91c2VjID0gKHNwLT5hc3NvY3BhcmFtcy5zYXNvY19jb29raWVfbGlmZSAlIDEwMDApCiAJCQkJCSogMTAwMDsKLQlhc29jLT5wbXR1ID0gMDsKIAlhc29jLT5mcmFnX3BvaW50ID0gMDsKIAogCS8qIFNldCB0aGUgYXNzb2NpYXRpb24gbWF4X3JldHJhbnMgYW5kIFJUTyB2YWx1ZXMgZnJvbSB0aGUKQEAgLTEyMyw2ICsxMjIsMjUgQEAKIAogCWFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgYXNzb2NpYXRpb24ncyBoZWFydGJlYXQgaW50ZXJ2YWwgYmFzZWQgb24gdGhlCisJICogc29jayBjb25maWd1cmVkIHZhbHVlLgorCSAqLworCWFzb2MtPmhiaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKHNwLT5oYmludGVydmFsKTsKKworCS8qIEluaXRpYWxpemUgcGF0aCBtYXggcmV0cmFucyB2YWx1ZS4gKi8KKwlhc29jLT5wYXRobWF4cnh0ID0gc3AtPnBhdGhtYXhyeHQ7CisKKwkvKiBJbml0aWFsaXplIGRlZmF1bHQgcGF0aCBNVFUuICovCisJYXNvYy0+cGF0aG10dSA9IHNwLT5wYXRobXR1OworCisJLyogU2V0IGFzc29jaWF0aW9uIGRlZmF1bHQgU0FDSyBkZWxheSAqLworCWFzb2MtPnNhY2tkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoc3AtPnNhY2tkZWxheSk7CisKKwkvKiBTZXQgdGhlIGFzc29jaWF0aW9uIGRlZmF1bHQgZmxhZ3MgY29udHJvbGxpbmcKKwkgKiBIZWFydGJlYXQsIFNBQ0sgZGVsYXksIGFuZCBQYXRoIE1UVSBEaXNjb3ZlcnkuCisJICovCisJYXNvYy0+cGFyYW1fZmxhZ3MgPSBzcC0+cGFyYW1fZmxhZ3M7CisKIAkvKiBJbml0aWFsaXplIHRoZSBtYXhpbXVtIG11bWJlciBvZiBuZXcgZGF0YSBwYWNrZXRzIHRoYXQgY2FuIGJlIHNlbnQKIAkgKiBpbiBhIGJ1cnN0LgogCSAqLwpAQCAtMTQ0LDggKzE2Miw3IEBACiAJCT0gNSAqIGFzb2MtPnJ0b19tYXg7CiAKIAlhc29jLT50aW1lb3V0c1tTQ1RQX0VWRU5UX1RJTUVPVVRfSEVBUlRCRUFUXSA9IDA7Ci0JYXNvYy0+dGltZW91dHNbU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0tdID0KLQkJU0NUUF9ERUZBVUxUX1RJTUVPVVRfU0FDSzsKKwlhc29jLT50aW1lb3V0c1tTQ1RQX0VWRU5UX1RJTUVPVVRfU0FDS10gPSBhc29jLT5zYWNrZGVsYXk7CiAJYXNvYy0+dGltZW91dHNbU0NUUF9FVkVOVF9USU1FT1VUX0FVVE9DTE9TRV0gPQogCQlzcC0+YXV0b2Nsb3NlICogSFo7CiAJCkBAIC01NDAsMjMgKzU1Nyw0NiBAQAogCiAJc2N0cF90cmFuc3BvcnRfc2V0X293bmVyKHBlZXIsIGFzb2MpOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgcGVlcidzIGhlYXJ0YmVhdCBpbnRlcnZhbCBiYXNlZCBvbiB0aGUKKwkgKiBhc3NvY2lhdGlvbiBjb25maWd1cmVkIHZhbHVlLgorCSAqLworCXBlZXItPmhiaW50ZXJ2YWwgPSBhc29jLT5oYmludGVydmFsOworCisJLyogU2V0IHRoZSBwYXRoIG1heF9yZXRyYW5zLiAgKi8KKwlwZWVyLT5wYXRobWF4cnh0ID0gYXNvYy0+cGF0aG1heHJ4dDsKKworCS8qIEluaXRpYWxpemUgdGhlIHBlZXIncyBTQUNLIGRlbGF5IHRpbWVvdXQgYmFzZWQgb24gdGhlCisJICogYXNzb2NpYXRpb24gY29uZmlndXJlZCB2YWx1ZS4KKwkgKi8KKwlwZWVyLT5zYWNrZGVsYXkgPSBhc29jLT5zYWNrZGVsYXk7CisKKwkvKiBFbmFibGUvZGlzYWJsZSBoZWFydGJlYXQsIFNBQ0sgZGVsYXksIGFuZCBwYXRoIE1UVSBkaXNjb3ZlcnkKKwkgKiBiYXNlZCBvbiBhc3NvY2lhdGlvbiBzZXR0aW5nLgorCSAqLworCXBlZXItPnBhcmFtX2ZsYWdzID0gYXNvYy0+cGFyYW1fZmxhZ3M7CisKIAkvKiBJbml0aWFsaXplIHRoZSBwbXR1IG9mIHRoZSB0cmFuc3BvcnQuICovCi0Jc2N0cF90cmFuc3BvcnRfcG10dShwZWVyKTsKKwlpZiAocGVlci0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKQorCQlzY3RwX3RyYW5zcG9ydF9wbXR1KHBlZXIpOworCWVsc2UgaWYgKGFzb2MtPnBhdGhtdHUpCisJCXBlZXItPnBhdGhtdHUgPSBhc29jLT5wYXRobXR1OworCWVsc2UKKwkJcGVlci0+cGF0aG10dSA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOwogCiAJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdHJhbnNwb3J0IGFkZHIgb24gdGhpcyBhc3NvY2lhdGlvbiwKIAkgKiBpbml0aWFsaXplIHRoZSBhc3NvY2lhdGlvbiBQTVRVIHRvIHRoZSBwZWVyJ3MgUE1UVS4KIAkgKiBJZiBub3QgYW5kIHRoZSBjdXJyZW50IGFzc29jaWF0aW9uIFBNVFUgaXMgaGlnaGVyIHRoYW4gdGhlIG5ldwogCSAqIHBlZXIncyBQTVRVLCByZXNldCB0aGUgYXNzb2NpYXRpb24gUE1UVSB0byB0aGUgbmV3IHBlZXIncyBQTVRVLgogCSAqLwotCWlmIChhc29jLT5wbXR1KQotCQlhc29jLT5wbXR1ID0gbWluX3QoaW50LCBwZWVyLT5wbXR1LCBhc29jLT5wbXR1KTsKKwlpZiAoYXNvYy0+cGF0aG10dSkKKwkJYXNvYy0+cGF0aG10dSA9IG1pbl90KGludCwgcGVlci0+cGF0aG10dSwgYXNvYy0+cGF0aG10dSk7CiAJZWxzZQotCQlhc29jLT5wbXR1ID0gcGVlci0+cG10dTsKKwkJYXNvYy0+cGF0aG10dSA9IHBlZXItPnBhdGhtdHU7CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygic2N0cF9hc3NvY19hZGRfcGVlcjphc3NvY2lhdGlvbiAlcCBQTVRVIHNldCB0byAiCi0JCQkgICIlZFxuIiwgYXNvYywgYXNvYy0+cG10dSk7CisJCQkgICIlZFxuIiwgYXNvYywgYXNvYy0+cGF0aG10dSk7CiAKLQlhc29jLT5mcmFnX3BvaW50ID0gc2N0cF9mcmFnX3BvaW50KHNwLCBhc29jLT5wbXR1KTsKKwlhc29jLT5mcmFnX3BvaW50ID0gc2N0cF9mcmFnX3BvaW50KHNwLCBhc29jLT5wYXRobXR1KTsKIAogCS8qIFRoZSBhc29jLT5wZWVyLnBvcnQgbWlnaHQgbm90IGJlIG1lYW5pbmdmdWwgeWV0LCBidXQKIAkgKiBpbml0aWFsaXplIHRoZSBwYWNrZXQgc3RydWN0dXJlIGFueXdheS4KQEAgLTU3NCw3ICs2MTQsNyBAQAogCSAqICAgKGZvciBleGFtcGxlLCBpbXBsZW1lbnRhdGlvbnMgTUFZIHVzZSB0aGUgc2l6ZSBvZiB0aGUKIAkgKiAgIHJlY2VpdmVyIGFkdmVydGlzZWQgd2luZG93KS4KIAkgKi8KLQlwZWVyLT5jd25kID0gbWluKDQqYXNvYy0+cG10dSwgbWF4X3QoX191MzIsIDIqYXNvYy0+cG10dSwgNDM4MCkpOworCXBlZXItPmN3bmQgPSBtaW4oNCphc29jLT5wYXRobXR1LCBtYXhfdChfX3UzMiwgMiphc29jLT5wYXRobXR1LCA0MzgwKSk7CiAKIAkvKiBBdCB0aGlzIHBvaW50LCB3ZSBtYXkgbm90IGhhdmUgdGhlIHJlY2VpdmVyJ3MgYWR2ZXJ0aXNlZCB3aW5kb3csCiAJICogc28gaW5pdGlhbGl6ZSBzc3RocmVzaCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgaXQgd2lsbCBiZSBzZXQKQEAgLTU4NSwxNyArNjI1LDYgQEAKIAlwZWVyLT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKIAlwZWVyLT5mbGlnaHRfc2l6ZSA9IDA7CiAKLQkvKiBCeSBkZWZhdWx0LCBlbmFibGUgaGVhcnRiZWF0IGZvciBwZWVyIGFkZHJlc3MuICovCi0JcGVlci0+aGJfYWxsb3dlZCA9IDE7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBwZWVyJ3MgaGVhcnRiZWF0IGludGVydmFsIGJhc2VkIG9uIHRoZQotCSAqIHNvY2sgY29uZmlndXJlZCB2YWx1ZS4KLQkgKi8KLQlwZWVyLT5oYl9pbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoc3AtPnBhZGRycGFyYW0uc3BwX2hiaW50ZXJ2YWwpOwotCi0JLyogU2V0IHRoZSBwYXRoIG1heF9yZXRyYW5zLiAgKi8KLQlwZWVyLT5tYXhfcmV0cmFucyA9IHNwLT5wYWRkcnBhcmFtLnNwcF9wYXRobWF4cnh0OwotCiAJLyogU2V0IHRoZSB0cmFuc3BvcnQncyBSVE8uaW5pdGlhbCB2YWx1ZSAqLwogCXBlZXItPnJ0byA9IGFzb2MtPnJ0b19pbml0aWFsOwogCkBAIC0xMTU1LDE4ICsxMTg0LDE4IEBACiAJLyogR2V0IHRoZSBsb3dlc3QgcG10dSBvZiBhbGwgdGhlIHRyYW5zcG9ydHMuICovCiAJbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKIAkJdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsIHRyYW5zcG9ydHMpOwotCQlpZiAoIXBtdHUgfHwgKHQtPnBtdHUgPCBwbXR1KSkKLQkJCXBtdHUgPSB0LT5wbXR1OworCQlpZiAoIXBtdHUgfHwgKHQtPnBhdGhtdHUgPCBwbXR1KSkKKwkJCXBtdHUgPSB0LT5wYXRobXR1OwogCX0KIAogCWlmIChwbXR1KSB7CiAJCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhhc29jLT5iYXNlLnNrKTsKLQkJYXNvYy0+cG10dSA9IHBtdHU7CisJCWFzb2MtPnBhdGhtdHUgPSBwbXR1OwogCQlhc29jLT5mcmFnX3BvaW50ID0gc2N0cF9mcmFnX3BvaW50KHNwLCBwbXR1KTsKIAl9CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGFzb2M6JXAsIHBtdHU6JWQsIGZyYWdfcG9pbnQ6JWRcbiIsCi0JCQkgIF9fRlVOQ1RJT05fXywgYXNvYywgYXNvYy0+cG10dSwgYXNvYy0+ZnJhZ19wb2ludCk7CisJCQkgIF9fRlVOQ1RJT05fXywgYXNvYywgYXNvYy0+cGF0aG10dSwgYXNvYy0+ZnJhZ19wb2ludCk7CiB9CiAKIC8qIFNob3VsZCB3ZSBzZW5kIGEgU0FDSyB0byB1cGRhdGUgb3VyIHBlZXI/ICovCkBAIC0xMTc5LDcgKzEyMDgsNyBAQAogCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UOgogCQlpZiAoKGFzb2MtPnJ3bmQgPiBhc29jLT5hX3J3bmQpICYmCiAJCSAgICAoKGFzb2MtPnJ3bmQgLSBhc29jLT5hX3J3bmQpID49Ci0JCSAgICAgbWluX3QoX191MzIsIChhc29jLT5iYXNlLnNrLT5za19yY3ZidWYgPj4gMSksIGFzb2MtPnBtdHUpKSkKKwkJICAgICBtaW5fdChfX3UzMiwgKGFzb2MtPmJhc2Uuc2stPnNrX3JjdmJ1ZiA+PiAxKSwgYXNvYy0+cGF0aG10dSkpKQogCQkJcmV0dXJuIDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCBiMjRmZjJjLi4yMzhmMWJmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTMwNSwxOCArMzA1LDM2IEBACiB2b2lkIHNjdHBfaWNtcF9mcmFnX25lZWRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0LCBfX3UzMiBwbXR1KQogewotCWlmICh1bmxpa2VseShwbXR1IDwgU0NUUF9ERUZBVUxUX01JTlNFR01FTlQpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXBvcnRlZCBwbXR1ICVkIHRvbyBsb3csICIKLQkJICAgICAgICJ1c2luZyBkZWZhdWx0IG1pbmltdW0gb2YgJWRcbiIsIF9fRlVOQ1RJT05fXywgcG10dSwKLQkJICAgICAgIFNDVFBfREVGQVVMVF9NSU5TRUdNRU5UKTsKLQkJcG10dSA9IFNDVFBfREVGQVVMVF9NSU5TRUdNRU5UOworCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spIHx8ICF0IHx8ICh0LT5wYXRobXR1ID09IHBtdHUpKQorCQlyZXR1cm47CisKKwlpZiAodC0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKSB7CisJCWlmICh1bmxpa2VseShwbXR1IDwgU0NUUF9ERUZBVUxUX01JTlNFR01FTlQpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVwb3J0ZWQgcG10dSAlZCB0b28gbG93LCAiCisJCQkgICAgICAgInVzaW5nIGRlZmF1bHQgbWluaW11bSBvZiAlZFxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHBtdHUsCisJCQkgICAgICAgU0NUUF9ERUZBVUxUX01JTlNFR01FTlQpOworCQkJLyogVXNlIGRlZmF1bHQgbWluaW11bSBzZWdtZW50IHNpemUgYW5kIGRpc2FibGUKKwkJCSAqIHBtdHUgZGlzY292ZXJ5IG9uIHRoaXMgdHJhbnNwb3J0LgorCQkJICovCisJCQl0LT5wYXRobXR1ID0gU0NUUF9ERUZBVUxUX01JTlNFR01FTlQ7CisJCQl0LT5wYXJhbV9mbGFncyA9ICh0LT5wYXJhbV9mbGFncyAmIH5TUFBfSEIpIHwKKwkJCQlTUFBfUE1UVURfRElTQUJMRTsKKwkJfSBlbHNlIHsKKwkJCXQtPnBhdGhtdHUgPSBwbXR1OworCQl9CisKKwkJLyogVXBkYXRlIGFzc29jaWF0aW9uIHBtdHUuICovCisJCXNjdHBfYXNzb2Nfc3luY19wbXR1KGFzb2MpOwogCX0KIAotCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSAmJiB0ICYmICh0LT5wbXR1ICE9IHBtdHUpKSB7Ci0JCXQtPnBtdHUgPSBwbXR1OwotCQlzY3RwX2Fzc29jX3N5bmNfcG10dShhc29jKTsKLQkJc2N0cF9yZXRyYW5zbWl0KCZhc29jLT5vdXRxdWV1ZSwgdCwgU0NUUF9SVFhSX1BNVFVEKTsKLQl9CisJLyogUmV0cmFuc21pdCB3aXRoIHRoZSBuZXcgcG10dSBzZXR0aW5nLgorCSAqIE5vcm1hbGx5LCBpZiBQTVRVIGRpc2NvdmVyeSBpcyBkaXNhYmxlZCwgYW4gSUNNUCBGcmFnbWVudGF0aW9uCisJICogTmVlZGVkIHdpbGwgbmV2ZXIgYmUgc2VudCwgYnV0IGlmIGEgbWVzc2FnZSB3YXMgc2VudCBiZWZvcmUKKwkgKiBQTVRVIGRpc2NvdmVyeSB3YXMgZGlzYWJsZWQgdGhhdCB3YXMgbGFyZ2VyIHRoYW4gdGhlIFBNVFUsIGl0CisJICogd291bGQgbm90IGJlIGZyYWdtZW50ZWQsIHNvIGl0IG11c3QgYmUgcmUtdHJhbnNtaXR0ZWQgZnJhZ21lbnRlZC4JIAorCSAqLworCXNjdHBfcmV0cmFuc21pdCgmYXNvYy0+b3V0cXVldWUsIHQsIFNDVFBfUlRYUl9QTVRVRCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggZmEzYmUyYi4uMTVjMDUxNiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtODY2LDcgKzg2Niw3IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGluZXQ2X3NlcXBhY2tldF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zZXFwYWNrZXRfb3BzID0gewogCS5mYW1pbHkgICAgID0gUEZfSU5FVDYsCiAJLm93bmVyICAgICAgPSBUSElTX01PRFVMRSwKIAkucmVsZWFzZSAgICA9IGluZXQ2X3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jCmluZGV4IDkzMTM3MTYuLmE0MDk5MWUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHB1dC5jCisrKyBiL25ldC9zY3RwL291dHB1dC5jCkBAIC0yMzQsOCArMjM0LDggQEAKIAkJZ290byBmaW5pc2g7CiAKIAlwbXR1ICA9ICgocGFja2V0LT50cmFuc3BvcnQtPmFzb2MpID8KLQkJIChwYWNrZXQtPnRyYW5zcG9ydC0+YXNvYy0+cG10dSkgOgotCQkgKHBhY2tldC0+dHJhbnNwb3J0LT5wbXR1KSk7CisJCSAocGFja2V0LT50cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpIDoKKwkJIChwYWNrZXQtPnRyYW5zcG9ydC0+cGF0aG10dSkpOwogCiAJdG9vX2JpZyA9IChwc2l6ZSArIGNodW5rX2xlbiA+IHBtdHUpOwogCkBAIC00ODIsNyArNDgyLDkgQEAKIAlpZiAoIWRzdCB8fCAoZHN0LT5vYnNvbGV0ZSA+IDEpKSB7CiAJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCXNjdHBfdHJhbnNwb3J0X3JvdXRlKHRwLCBOVUxMLCBzY3RwX3NrKHNrKSk7Ci0JCXNjdHBfYXNzb2Nfc3luY19wbXR1KGFzb2MpOworCQlpZiAoYXNvYy0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKSB7CisJCQlzY3RwX2Fzc29jX3N5bmNfcG10dShhc29jKTsKKwkJfQogCX0KIAogCW5za2ItPmRzdCA9IGRzdF9jbG9uZSh0cC0+ZHN0KTsKQEAgLTQ5Miw3ICs0OTQsMTAgQEAKIAlTQ1RQX0RFQlVHX1BSSU5USygiKioqc2N0cF90cmFuc21pdF9wYWNrZXQqKiogc2tiIGxlbiAlZFxuIiwKIAkJCSAgbnNrYi0+bGVuKTsKIAotCSgqdHAtPmFmX3NwZWNpZmljLT5zY3RwX3htaXQpKG5za2IsIHRwLCBwYWNrZXQtPmlwZnJhZ29rKTsKKwlpZiAodHAtPnBhcmFtX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkKKwkJKCp0cC0+YWZfc3BlY2lmaWMtPnNjdHBfeG1pdCkobnNrYiwgdHAsIHBhY2tldC0+aXBmcmFnb2spOworCWVsc2UKKwkJKCp0cC0+YWZfc3BlY2lmaWMtPnNjdHBfeG1pdCkobnNrYiwgdHAsIDEpOwogCiBvdXQ6CiAJcGFja2V0LT5zaXplID0gcGFja2V0LT5vdmVyaGVhZDsKQEAgLTU3Nyw3ICs1ODIsNyBAQAogCSAqIAlpZiAoKGZsaWdodHNpemUgKyBNYXguQnVyc3QgKiBNVFUpIDwgY3duZCkKIAkgKgkJY3duZCA9IGZsaWdodHNpemUgKyBNYXguQnVyc3QgKiBNVFUKIAkgKi8KLQltYXhfYnVyc3RfYnl0ZXMgPSBhc29jLT5tYXhfYnVyc3QgKiBhc29jLT5wbXR1OworCW1heF9idXJzdF9ieXRlcyA9IGFzb2MtPm1heF9idXJzdCAqIGFzb2MtPnBhdGhtdHU7CiAJaWYgKCh0cmFuc3BvcnQtPmZsaWdodF9zaXplICsgbWF4X2J1cnN0X2J5dGVzKSA8IHRyYW5zcG9ydC0+Y3duZCkgewogCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPmZsaWdodF9zaXplICsgbWF4X2J1cnN0X2J5dGVzOwogCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGN3bmQgbGltaXRlZCBieSBtYXhfYnVyc3Q6ICIKQEAgLTYyMiw3ICs2MjcsNyBAQAogCQkgKiBkYXRhIHdpbGwgZml0IG9yIGRlbGF5IGluIGhvcGVzIG9mIGJ1bmRsaW5nIGEgZnVsbAogCQkgKiBzaXplZCBwYWNrZXQuCiAJCSAqLwotCQlpZiAobGVuIDwgYXNvYy0+cG10dSAtIHBhY2tldC0+b3ZlcmhlYWQpIHsKKwkJaWYgKGxlbiA8IGFzb2MtPnBhdGhtdHUgLSBwYWNrZXQtPm92ZXJoZWFkKSB7CiAJCQlyZXR2YWwgPSBTQ1RQX1hNSVRfTkFHTEVfREVMQVk7CiAJCQlnb3RvIGZpbmlzaDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggZjc3NWQ3OC4uZGU2OTNiNCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KICNpbmNsdWRlIDxuZXQvc2N0cC9zY3RwLmg+CiAjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CkBAIC04MjksNyArODMwLDcgQEAKIH07CiAKIC8qIFNvY2tldCBvcGVyYXRpb25zLiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc2VxcGFja2V0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc2VxcGFja2V0X29wcyA9IHsKIAkuZmFtaWx5ICAgICAgPSBQRl9JTkVULAogCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlICAgICA9IGluZXRfcmVsZWFzZSwgICAgICAgLyogTmVlZHMgdG8gYmUgd3JhcHBlZC4uLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDgyMzk0NzEuLjJkN2Q4YTUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTE1Nyw5ICsxNTcsMTIgQEAKIHsKIAlfX3UzMiBjdHNuLCBtYXhfdHNuX3NlZW47CiAJc3RydWN0IHNjdHBfY2h1bmsgKnNhY2s7CisJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFucyA9IGFzb2MtPnBlZXIubGFzdF9kYXRhX2Zyb207CiAJaW50IGVycm9yID0gMDsKIAotCWlmIChmb3JjZSkKKwlpZiAoZm9yY2UgfHwgCisJICAgICghdHJhbnMgJiYgKGFzb2MtPnBhcmFtX2ZsYWdzICYgU1BQX1NBQ0tERUxBWV9ESVNBQkxFKSkgfHwKKwkgICAgKHRyYW5zICYmICh0cmFucy0+cGFyYW1fZmxhZ3MgJiBTUFBfU0FDS0RFTEFZX0RJU0FCTEUpKSkKIAkJYXNvYy0+cGVlci5zYWNrX25lZWRlZCA9IDE7CiAKIAljdHNuID0gc2N0cF90c25tYXBfZ2V0X2N0c24oJmFzb2MtPnBlZXIudHNuX21hcCk7CkBAIC0xODksNyArMTkyLDIyIEBACiAJaWYgKCFhc29jLT5wZWVyLnNhY2tfbmVlZGVkKSB7CiAJCS8qIFdlIHdpbGwgbmVlZCBhIFNBQ0sgZm9yIHRoZSBuZXh0IHBhY2tldC4gICovCiAJCWFzb2MtPnBlZXIuc2Fja19uZWVkZWQgPSAxOwotCQlnb3RvIG91dDsKKworCQkvKiBTZXQgdGhlIFNBQ0sgZGVsYXkgdGltZW91dCBiYXNlZCBvbiB0aGUKKwkJICogU0FDSyBkZWxheSBmb3IgdGhlIGxhc3QgdHJhbnNwb3J0CisJCSAqIGRhdGEgd2FzIHJlY2VpdmVkIGZyb20sIG9yIHRoZSBkZWZhdWx0CisJCSAqIGZvciB0aGUgYXNzb2NpYXRpb24uCisJCSAqLworCQlpZiAodHJhbnMpCisJCQlhc29jLT50aW1lb3V0c1tTQ1RQX0VWRU5UX1RJTUVPVVRfU0FDS10gPSAKKwkJCQl0cmFucy0+c2Fja2RlbGF5OworCQllbHNlCisJCQlhc29jLT50aW1lb3V0c1tTQ1RQX0VWRU5UX1RJTUVPVVRfU0FDS10gPSAKKwkJCQlhc29jLT5zYWNrZGVsYXk7CisKKwkJLyogUmVzdGFydCB0aGUgU0FDSyB0aW1lci4gKi8KKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9SRVNUQVJULAorCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0spKTsKIAl9IGVsc2UgewogCQlpZiAoYXNvYy0+YV9yd25kID4gYXNvYy0+cnduZCkKIAkJCWFzb2MtPmFfcnduZCA9IGFzb2MtPnJ3bmQ7CkBAIC0yMDUsNyArMjIzLDcgQEAKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVE9QLAogCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0spKTsKIAl9Ci1vdXQ6CisKIAlyZXR1cm4gZXJyb3I7CiBub21lbToKIAllcnJvciA9IC1FTk9NRU07CkBAIC00MTUsNyArNDMzLDcgQEAKIAlhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50Kys7CiAKIAlpZiAodHJhbnNwb3J0LT5zdGF0ZSAhPSBTQ1RQX0lOQUNUSVZFICYmCi0JICAgICh0cmFuc3BvcnQtPmVycm9yX2NvdW50KysgPj0gdHJhbnNwb3J0LT5tYXhfcmV0cmFucykpIHsKKwkgICAgKHRyYW5zcG9ydC0+ZXJyb3JfY291bnQrKyA+PSB0cmFuc3BvcnQtPnBhdGhtYXhyeHQpKSB7CiAJCVNDVFBfREVCVUdfUFJJTlRLX0lQQUREUigidHJhbnNwb3J0X3N0cmlrZTphc3NvY2lhdGlvbiAlcCIsCiAJCQkJCSAiIHRyYW5zcG9ydCBJUDogcG9ydDolZCBmYWlsZWQuXG4iLAogCQkJCQkgYXNvYywKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggNDc1YmZiNC4uNTU3YTdkOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTkwMCw3ICs5MDAsNyBAQAogCSAqIEhFQVJUQkVBVCBpcyBzZW50IChzZWUgU2VjdGlvbiA4LjMpLgogCSAqLwogCi0JaWYgKHRyYW5zcG9ydC0+aGJfYWxsb3dlZCkgeworCWlmICh0cmFuc3BvcnQtPnBhcmFtX2ZsYWdzICYgU1BQX0hCX0VOQUJMRSkgewogCQlpZiAoU0NUUF9ESVNQT1NJVElPTl9OT01FTSA9PQogCQkJCXNjdHBfc2ZfaGVhcnRiZWF0KGVwLCBhc29jLCB0eXBlLCBhcmcsCiAJCQkJCQkgIGNvbW1hbmRzKSkKQEAgLTEwNTEsNyArMTA1MSw3IEBACiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CiAJfQogCi0JbWF4X2ludGVydmFsID0gbGluay0+aGJfaW50ZXJ2YWwgKyBsaW5rLT5ydG87CisJbWF4X2ludGVydmFsID0gbGluay0+aGJpbnRlcnZhbCArIGxpbmstPnJ0bzsKIAogCS8qIENoZWNrIGlmIHRoZSB0aW1lc3RhbXAgbG9va3MgdmFsaWQuICAqLwogCWlmICh0aW1lX2FmdGVyKGhiaW5mby0+c2VudF9hdCwgamlmZmllcykgfHwKQEAgLTI2OTEsMTQgKzI2OTEsOSBAQAogCSAqIGRvY3VtZW50IGFsbG93LiBIb3dldmVyLCBhbiBTQ1RQIHRyYW5zbWl0dGVyIE1VU1QgTk9UIGJlCiAJICogbW9yZSBhZ2dyZXNzaXZlIHRoYW4gdGhlIGZvbGxvd2luZyBhbGdvcml0aG1zIGFsbG93LgogCSAqLwotCWlmIChjaHVuay0+ZW5kX29mX3BhY2tldCkgeworCWlmIChjaHVuay0+ZW5kX29mX3BhY2tldCkKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9HRU5fU0FDSywgU0NUUF9OT0ZPUkNFKCkpOwogCi0JCS8qIFN0YXJ0IHRoZSBTQUNLIHRpbWVyLiAgKi8KLQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9SRVNUQVJULAotCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0spKTsKLQl9Ci0KIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogCiBkaXNjYXJkX2ZvcmNlOgpAQCAtMjcyMSwxMyArMjcxNiw5IEBACiAJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDsKIAogZGlzY2FyZF9ub2ZvcmNlOgotCWlmIChjaHVuay0+ZW5kX29mX3BhY2tldCkgeworCWlmIChjaHVuay0+ZW5kX29mX3BhY2tldCkKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9HRU5fU0FDSywgU0NUUF9OT0ZPUkNFKCkpOwogCi0JCS8qIFN0YXJ0IHRoZSBTQUNLIHRpbWVyLiAgKi8KLQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9SRVNUQVJULAotCQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0spKTsKLQl9CiAJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDsKIGNvbnN1bWU6CiAJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTsKQEAgLTM0NDIsOSArMzQzMyw2IEBACiAJICogc2VuZCBhbm90aGVyLiAKIAkgKi8KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0dFTl9TQUNLLCBTQ1RQX05PRk9SQ0UoKSk7Ci0JLyogU3RhcnQgdGhlIFNBQ0sgdGltZXIuICAqLwotCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVElNRVJfUkVTVEFSVCwKLQkJCVNDVFBfVE8oU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0spKTsKIAogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggOWRmODg4ZS4uZmMwNGQxOCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTE5NDEsMTA3ICsxOTQxLDM3OSBAQAogICogYWRkcmVzcydzIHBhcmFtZXRlcnM6CiAgKgogICogIHN0cnVjdCBzY3RwX3BhZGRycGFyYW1zIHsKLSAqICAgICAgc2N0cF9hc3NvY190ICAgICAgICAgICAgc3BwX2Fzc29jX2lkOwotICogICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHBfYWRkcmVzczsKLSAqICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc3BwX2hiaW50ZXJ2YWw7Ci0gKiAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgIHNwcF9wYXRobWF4cnh0OwotICogIH07CisgKiAgICAgc2N0cF9hc3NvY190ICAgICAgICAgICAgc3BwX2Fzc29jX2lkOworICogICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwcF9hZGRyZXNzOworICogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNwcF9oYmludGVydmFsOworICogICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgIHNwcF9wYXRobWF4cnh0OworICogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNwcF9wYXRobXR1OworICogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNwcF9zYWNrZGVsYXk7CisgKiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc3BwX2ZsYWdzOworICogfTsKICAqCi0gKiAgIHNwcF9hc3NvY19pZCAgICAtIChVRFAgc3R5bGUgc29ja2V0KSBUaGlzIGlzIGZpbGxlZCBpbiB0aGUgYXBwbGljYXRpb24sCi0gKiAgICAgICAgICAgICAgICAgICAgIGFuZCBpZGVudGlmaWVzIHRoZSBhc3NvY2lhdGlvbiBmb3IgdGhpcyBxdWVyeS4KKyAqICAgc3BwX2Fzc29jX2lkICAgIC0gKG9uZS10by1tYW55IHN0eWxlIHNvY2tldCkgVGhpcyBpcyBmaWxsZWQgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLCBhbmQgaWRlbnRpZmllcyB0aGUgYXNzb2NpYXRpb24gZm9yCisgKiAgICAgICAgICAgICAgICAgICAgIHRoaXMgcXVlcnkuCiAgKiAgIHNwcF9hZGRyZXNzICAgICAtIFRoaXMgc3BlY2lmaWVzIHdoaWNoIGFkZHJlc3MgaXMgb2YgaW50ZXJlc3QuCiAgKiAgIHNwcF9oYmludGVydmFsICAtIFRoaXMgY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBoZWFydGJlYXQgaW50ZXJ2YWwsCi0gKiAgICAgICAgICAgICAgICAgICAgIGluIG1pbGxpc2Vjb25kcy4gIEEgdmFsdWUgb2YgMCwgd2hlbiBtb2RpZnlpbmcgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciwgc3BlY2lmaWVzIHRoYXQgdGhlIGhlYXJ0YmVhdCBvbiB0aGlzCi0gKiAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Mgc2hvdWxkIGJlIGRpc2FibGVkLiBBIHZhbHVlIG9mIFVJTlQzMl9NQVgKLSAqICAgICAgICAgICAgICAgICAgICAgKDQyOTQ5NjcyOTUpLCB3aGVuIG1vZGlmeWluZyB0aGUgcGFyYW1ldGVyLAotICogICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhhdCBhIGhlYXJ0YmVhdCBzaG91bGQgYmUgc2VudAotICogICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseSB0byB0aGUgcGVlciBhZGRyZXNzLCBhbmQgdGhlIGN1cnJlbnQKLSAqICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQuCisgKiAgICAgICAgICAgICAgICAgICAgIGluIG1pbGxpc2Vjb25kcy4gIElmIGEgIHZhbHVlIG9mIHplcm8KKyAqICAgICAgICAgICAgICAgICAgICAgaXMgcHJlc2VudCBpbiB0aGlzIGZpZWxkIHRoZW4gbm8gY2hhbmdlcyBhcmUgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSB0byB0aGlzIHBhcmFtZXRlci4KICAqICAgc3BwX3BhdGhtYXhyeHQgIC0gVGhpcyBjb250YWlucyB0aGUgbWF4aW11bSBudW1iZXIgb2YKICAqICAgICAgICAgICAgICAgICAgICAgcmV0cmFuc21pc3Npb25zIGJlZm9yZSB0aGlzIGFkZHJlc3Mgc2hhbGwgYmUKLSAqICAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJlZCB1bnJlYWNoYWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJlZCB1bnJlYWNoYWJsZS4gSWYgYSAgdmFsdWUgb2YgemVybworICogICAgICAgICAgICAgICAgICAgICBpcyBwcmVzZW50IGluIHRoaXMgZmllbGQgdGhlbiBubyBjaGFuZ2VzIGFyZSB0bworICogICAgICAgICAgICAgICAgICAgICBiZSBtYWRlIHRvIHRoaXMgcGFyYW1ldGVyLgorICogICBzcHBfcGF0aG10dSAgICAgLSBXaGVuIFBhdGggTVRVIGRpc2NvdmVyeSBpcyBkaXNhYmxlZCB0aGUgdmFsdWUKKyAqICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGhlcmUgd2lsbCBiZSB0aGUgImZpeGVkIiBwYXRoIG10dS4KKyAqICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGlmIHRoZSBzcHBfYWRkcmVzcyBmaWVsZCBpcyBlbXB0eQorICogICAgICAgICAgICAgICAgICAgICB0aGVuIGFsbCBhc3NvY2lhdGlvbnMgb24gdGhpcyBhZGRyZXNzIHdpbGwKKyAqICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0aGlzIGZpeGVkIHBhdGggbXR1IHNldCB1cG9uIHRoZW0uCisgKgorICogICBzcHBfc2Fja2RlbGF5ICAgLSBXaGVuIGRlbGF5ZWQgc2FjayBpcyBlbmFibGVkLCB0aGlzIHZhbHVlIHNwZWNpZmllcworICogICAgICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IHNhY2tzIHdpbGwgYmUgZGVsYXllZAorICogICAgICAgICAgICAgICAgICAgICBmb3IuIFRoaXMgdmFsdWUgd2lsbCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIG9mIGFuCisgKiAgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uIGlmIHRoZSBzcHBfYWRkcmVzcyBmaWVsZCBpcyBlbXB0eS4gTm90ZQorICogICAgICAgICAgICAgICAgICAgICBhbHNvLCB0aGF0IGlmIGRlbGF5ZWQgc2FjayBpcyBlbmFibGVkIGFuZCB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIHNldCB0byAwLCBubyBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgbGFzdAorICogICAgICAgICAgICAgICAgICAgICByZWNvcmRlZCBkZWxheWVkIHNhY2sgdGltZXIgdmFsdWUuCisgKgorICogICBzcHBfZmxhZ3MgICAgICAgLSBUaGVzZSBmbGFncyBhcmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgZmVhdHVyZXMKKyAqICAgICAgICAgICAgICAgICAgICAgb24gYW4gYXNzb2NpYXRpb24uIFRoZSBmbGFnIGZpZWxkIG1heSBjb250YWluCisgKiAgICAgICAgICAgICAgICAgICAgIHplcm8gb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMuCisgKgorICogICAgICAgICAgICAgICAgICAgICBTUFBfSEJfRU5BQkxFICAtIEVuYWJsZSBoZWFydGJlYXRzIG9uIHRoZQorICogICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYWRkcmVzcy4gTm90ZSB0aGF0IGlmIHRoZSBhZGRyZXNzCisgKiAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIGVtcHR5IGFsbCBhZGRyZXNzZXMgZm9yIHRoZSBhc3NvY2lhdGlvbgorICogICAgICAgICAgICAgICAgICAgICBoYXZlIGhlYXJ0YmVhdHMgZW5hYmxlZCB1cG9uIHRoZW0uCisgKgorICogICAgICAgICAgICAgICAgICAgICBTUFBfSEJfRElTQUJMRSAtIERpc2FibGUgaGVhcnRiZWF0cyBvbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgc3BlaWNpZmVkIGFkZHJlc3MuIE5vdGUgdGhhdCBpZiB0aGUgYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyBlbXB0eSBhbGwgYWRkcmVzc2VzIGZvciB0aGUgYXNzb2NpYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgd2lsbCBoYXZlIHRoZWlyIGhlYXJ0YmVhdHMgZGlzYWJsZWQuIE5vdGUgYWxzbworICogICAgICAgICAgICAgICAgICAgICB0aGF0IFNQUF9IQl9FTkFCTEUgYW5kIFNQUF9IQl9ESVNBQkxFIGFyZQorICogICAgICAgICAgICAgICAgICAgICBtdXR1YWxseSBleGNsdXNpdmUsIG9ubHkgb25lIG9mIHRoZXNlIHR3byBzaG91bGQKKyAqICAgICAgICAgICAgICAgICAgICAgYmUgc3BlY2lmaWVkLiBFbmFibGluZyBib3RoIGZpZWxkcyB3aWxsIGhhdmUKKyAqICAgICAgICAgICAgICAgICAgICAgdW5kZXRlcm1pbmVkIHJlc3VsdHMuCisgKgorICogICAgICAgICAgICAgICAgICAgICBTUFBfSEJfREVNQU5EIC0gUmVxdWVzdCBhIHVzZXIgaW5pdGlhdGVkIGhlYXJ0YmVhdAorICogICAgICAgICAgICAgICAgICAgICB0byBiZSBtYWRlIGltbWVkaWF0ZWx5LgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgU1BQX1BNVFVEX0VOQUJMRSAtIFRoaXMgZmllbGQgd2lsbCBlbmFibGUgUE1UVQorICogICAgICAgICAgICAgICAgICAgICBkaXNjb3ZlcnkgdXBvbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuIE5vdGUgdGhhdAorICogICAgICAgICAgICAgICAgICAgICBpZiB0aGUgYWRkcmVzcyBmZWlsZCBpcyBlbXB0eSB0aGVuIGFsbCBhZGRyZXNzZXMKKyAqICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGFzc29jaWF0aW9uIGFyZSBlZmZlY3RlZC4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgIFNQUF9QTVRVRF9ESVNBQkxFIC0gVGhpcyBmaWVsZCB3aWxsIGRpc2FibGUgUE1UVQorICogICAgICAgICAgICAgICAgICAgICBkaXNjb3ZlcnkgdXBvbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuIE5vdGUgdGhhdAorICogICAgICAgICAgICAgICAgICAgICBpZiB0aGUgYWRkcmVzcyBmZWlsZCBpcyBlbXB0eSB0aGVuIGFsbCBhZGRyZXNzZXMKKyAqICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGFzc29jaWF0aW9uIGFyZSBlZmZlY3RlZC4gTm90IGFsc28gdGhhdAorICogICAgICAgICAgICAgICAgICAgICBTUFBfUE1UVURfRU5BQkxFIGFuZCBTUFBfUE1UVURfRElTQUJMRSBhcmUgbXV0dWFsbHkKKyAqICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaXZlLiBFbmFibGluZyBib3RoIHdpbGwgaGF2ZSB1bmRldGVybWluZWQKKyAqICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgIFNQUF9TQUNLREVMQVlfRU5BQkxFIC0gU2V0dGluZyB0aGlzIGZsYWcgdHVybnMKKyAqICAgICAgICAgICAgICAgICAgICAgb24gZGVsYXllZCBzYWNrLiBUaGUgdGltZSBzcGVjaWZpZWQgaW4gc3BwX3NhY2tkZWxheQorICogICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHNhY2sgZGVsYXkgZm9yIHRoaXMgYWRkcmVzcy4gTm90ZQorICogICAgICAgICAgICAgICAgICAgICB0aGF0IGlmIHNwcF9hZGRyZXNzIGlzIGVtcHR5IHRoZW4gYWxsIGFkZHJlc3NlcyB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgIGVuYWJsZSBkZWxheWVkIHNhY2sgYW5kIHRha2Ugb24gdGhlIHNhY2sgZGVsYXkKKyAqICAgICAgICAgICAgICAgICAgICAgdmFsdWUgc3BlY2lmaWVkIGluIHNwcF9zYWNrZGVsYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFNQUF9TQUNLREVMQVlfRElTQUJMRSAtIFNldHRpbmcgdGhpcyBmbGFnIHR1cm5zCisgKiAgICAgICAgICAgICAgICAgICAgIG9mZiBkZWxheWVkIHNhY2suIElmIHRoZSBzcHBfYWRkcmVzcyBmaWVsZCBpcyBibGFuayB0aGVuCisgKiAgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWQgc2FjayBpcyBkaXNhYmxlZCBmb3IgdGhlIGVudGlyZSBhc3NvY2lhdGlvbi4gTm90ZQorICogICAgICAgICAgICAgICAgICAgICBhbHNvIHRoYXQgdGhpcyBmaWVsZCBpcyBtdXR1YWxseSBleGNsdXNpdmUgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgU1BQX1NBQ0tERUxBWV9FTkFCTEUsIHNldHRpbmcgYm90aCB3aWxsIGhhdmUgdW5kZWZpbmVkCisgKiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuCiAgKi8KLXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3BlZXJfYWRkcl9wYXJhbXMoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK2ludCBzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgKnBhcmFtcywKKwkJCQlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgICAqdHJhbnMsCisJCQkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCQkJc3RydWN0IHNjdHBfc29jayAgICAgICAgKnNwLAorCQkJCWludCAgICAgICAgICAgICAgICAgICAgICBoYl9jaGFuZ2UsCisJCQkJaW50ICAgICAgICAgICAgICAgICAgICAgIHBtdHVkX2NoYW5nZSwKKwkJCQlpbnQgICAgICAgICAgICAgICAgICAgICAgc2Fja2RlbGF5X2NoYW5nZSkKIHsKLQlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyBwYXJhbXM7Ci0Jc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuczsKIAlpbnQgZXJyb3I7CiAKLQlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyoKLQkgKiBBUEkgNy4gU29ja2V0IE9wdGlvbnMgKHNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBlbmRwb2ludCkKLQkgKiBBbGwgb3B0aW9ucyB0aGF0IHN1cHBvcnQgc3BlY2lmaWMgc2V0dGluZ3Mgb24gYW4gYXNzb2NpYXRpb24gYnkKLQkgKiBmaWxsaW5nIGluIGVpdGhlciBhbiBhc3NvY2lhdGlvbiBpZCB2YXJpYWJsZSBvciBhIHNvY2thZGRyX3N0b3JhZ2UKLQkgKiBTSE9VTEQgYWxzbyBzdXBwb3J0IHNldHRpbmcgb2YgdGhlIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRpcmUgZW5kcG9pbnQKLQkgKiAoaS5lLiBmdXR1cmUgYXNzb2NpYXRpb25zKS4gVG8gYWNjb21wbGlzaCB0aGlzIHRoZSBmb2xsb3dpbmcgbG9naWMgaXMKLQkgKiB1c2VkIHdoZW4gc2V0dGluZyBvbmUgb2YgdGhlc2Ugb3B0aW9uczoKLQotCSAqIGMpIElmIG5laXRoZXIgdGhlIHNvY2thZGRyX3N0b3JhZ2Ugb3IgYXNzb2NpYXRpb24gaWRlbnRpZmljYXRpb24gaXMKLQkgKiAgICBzZXQgaS5lLiB0aGUgc29ja2FkZHJfc3RvcmFnZSBpcyBzZXQgdG8gYWxsIDAncyAoSU5BRERSX0FOWSkgYW5kCi0JICogICAgdGhlIGFzc29jaWF0aW9uIGlkZW50aWZpY2F0aW9uIGlzIDAsIHRoZSBzZXR0aW5ncyBhcmUgYSBkZWZhdWx0Ci0JICogICAgYW5kIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGVuZHBvaW50IChhbGwgZnV0dXJlIGFzc29jaWF0aW9ucykuCi0JICovCi0KLQkvKiB1cGRhdGUgZGVmYXVsdCB2YWx1ZSBmb3IgZW5kcG9pbnQgKGFsbCBmdXR1cmUgYXNzb2NpYXRpb25zKSAqLwotCWlmICghcGFyYW1zLnNwcF9hc3NvY19pZCAmJiAKLQkgICAgc2N0cF9pc19hbnkoKCB1bmlvbiBzY3RwX2FkZHIgKikmcGFyYW1zLnNwcF9hZGRyZXNzKSkgewotCQkvKiBNYW51YWwgaGVhcnRiZWF0IG9uIGFuIGVuZHBvaW50IGlzIGludmFsaWQuICovCi0JCWlmICgweGZmZmZmZmZmID09IHBhcmFtcy5zcHBfaGJpbnRlcnZhbCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQllbHNlIGlmIChwYXJhbXMuc3BwX2hiaW50ZXJ2YWwpCi0JCQlzY3RwX3NrKHNrKS0+cGFkZHJwYXJhbS5zcHBfaGJpbnRlcnZhbCA9Ci0JCQkJCQlwYXJhbXMuc3BwX2hiaW50ZXJ2YWw7Ci0JCWlmIChwYXJhbXMuc3BwX3BhdGhtYXhyeHQpCi0JCQlzY3RwX3NrKHNrKS0+cGFkZHJwYXJhbS5zcHBfcGF0aG1heHJ4dCA9Ci0JCQkJCQlwYXJhbXMuc3BwX3BhdGhtYXhyeHQ7Ci0JCXJldHVybiAwOwotCX0KLQotCXRyYW5zID0gc2N0cF9hZGRyX2lkMnRyYW5zcG9ydChzaywgJnBhcmFtcy5zcHBfYWRkcmVzcywKLQkJCQkgICAgICAgcGFyYW1zLnNwcF9hc3NvY19pZCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBBcHBsaWNhdGlvbnMgY2FuIGVuYWJsZSBvciBkaXNhYmxlIGhlYXJ0YmVhdHMgZm9yIGFueSBwZWVyIGFkZHJlc3MKLQkgKiBvZiBhbiBhc3NvY2lhdGlvbiwgbW9kaWZ5IGFuIGFkZHJlc3MncyBoZWFydGJlYXQgaW50ZXJ2YWwsIGZvcmNlIGEKLQkgKiBoZWFydGJlYXQgdG8gYmUgc2VudCBpbW1lZGlhdGVseSwgYW5kIGFkanVzdCB0aGUgYWRkcmVzcydzIG1heGltdW0KLQkgKiBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIHNlbnQgYmVmb3JlIGFuIGFkZHJlc3MgaXMgY29uc2lkZXJlZAotCSAqIHVucmVhY2hhYmxlLgotCSAqCi0JICogVGhlIHZhbHVlIG9mIHRoZSBoZWFydGJlYXQgaW50ZXJ2YWwsIGluIG1pbGxpc2Vjb25kcy4gQSB2YWx1ZSBvZgotCSAqIFVJTlQzMl9NQVggKDQyOTQ5NjcyOTUpLCB3aGVuIG1vZGlmeWluZyB0aGUgcGFyYW1ldGVyLCBzcGVjaWZpZXMKLQkgKiB0aGF0IGEgaGVhcnRiZWF0IHNob3VsZCBiZSBzZW50IGltbWVkaWF0ZWx5IHRvIHRoZSBwZWVyIGFkZHJlc3MsCi0JICogYW5kIHRoZSBjdXJyZW50IGludGVydmFsIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLgotCSAqLwotCWlmICgweGZmZmZmZmZmID09IHBhcmFtcy5zcHBfaGJpbnRlcnZhbCkgeworCWlmIChwYXJhbXMtPnNwcF9mbGFncyAmIFNQUF9IQl9ERU1BTkQgJiYgdHJhbnMpIHsKIAkJZXJyb3IgPSBzY3RwX3ByaW1pdGl2ZV9SRVFVRVNUSEVBUlRCRUFUICh0cmFucy0+YXNvYywgdHJhbnMpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7Ci0JfSBlbHNlIHsKLQkvKiBUaGUgdmFsdWUgb2YgdGhlIGhlYXJ0YmVhdCBpbnRlcnZhbCwgaW4gbWlsbGlzZWNvbmRzLiBBIHZhbHVlIG9mIDAsCi0JICogd2hlbiBtb2RpZnlpbmcgdGhlIHBhcmFtZXRlciwgc3BlY2lmaWVzIHRoYXQgdGhlIGhlYXJ0YmVhdCBvbiB0aGlzCi0JICogYWRkcmVzcyBzaG91bGQgYmUgZGlzYWJsZWQuCi0JICovCi0JCWlmIChwYXJhbXMuc3BwX2hiaW50ZXJ2YWwpIHsKLQkJCXRyYW5zLT5oYl9hbGxvd2VkID0gMTsKLQkJCXRyYW5zLT5oYl9pbnRlcnZhbCA9IAotCQkJCW1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLnNwcF9oYmludGVydmFsKTsKLQkJfSBlbHNlCi0JCQl0cmFucy0+aGJfYWxsb3dlZCA9IDA7CiAJfQogCi0JLyogc3BwX3BhdGhtYXhyeHQgY29udGFpbnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucwotCSAqIGJlZm9yZSB0aGlzIGFkZHJlc3Mgc2hhbGwgYmUgY29uc2lkZXJlZCB1bnJlYWNoYWJsZS4KLQkgKi8KLQlpZiAocGFyYW1zLnNwcF9wYXRobWF4cnh0KQotCQl0cmFucy0+bWF4X3JldHJhbnMgPSBwYXJhbXMuc3BwX3BhdGhtYXhyeHQ7CisJaWYgKHBhcmFtcy0+c3BwX2hiaW50ZXJ2YWwpIHsKKwkJaWYgKHRyYW5zKSB7CisJCQl0cmFucy0+aGJpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLT5zcHBfaGJpbnRlcnZhbCk7CisJCX0gZWxzZSBpZiAoYXNvYykgeworCQkJYXNvYy0+aGJpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLT5zcHBfaGJpbnRlcnZhbCk7CisJCX0gZWxzZSB7CisJCQlzcC0+aGJpbnRlcnZhbCA9IHBhcmFtcy0+c3BwX2hiaW50ZXJ2YWw7CisJCX0KKwl9CiAKKwlpZiAoaGJfY2hhbmdlKSB7CisJCWlmICh0cmFucykgeworCQkJdHJhbnMtPnBhcmFtX2ZsYWdzID0KKwkJCQkodHJhbnMtPnBhcmFtX2ZsYWdzICYgflNQUF9IQikgfCBoYl9jaGFuZ2U7CisJCX0gZWxzZSBpZiAoYXNvYykgeworCQkJYXNvYy0+cGFyYW1fZmxhZ3MgPQorCQkJCShhc29jLT5wYXJhbV9mbGFncyAmIH5TUFBfSEIpIHwgaGJfY2hhbmdlOworCQl9IGVsc2UgeworCQkJc3AtPnBhcmFtX2ZsYWdzID0KKwkJCQkoc3AtPnBhcmFtX2ZsYWdzICYgflNQUF9IQikgfCBoYl9jaGFuZ2U7CisJCX0KKwl9CisKKwlpZiAocGFyYW1zLT5zcHBfcGF0aG10dSkgeworCQlpZiAodHJhbnMpIHsKKwkJCXRyYW5zLT5wYXRobXR1ID0gcGFyYW1zLT5zcHBfcGF0aG10dTsKKwkJCXNjdHBfYXNzb2Nfc3luY19wbXR1KGFzb2MpOworCQl9IGVsc2UgaWYgKGFzb2MpIHsKKwkJCWFzb2MtPnBhdGhtdHUgPSBwYXJhbXMtPnNwcF9wYXRobXR1OworCQkJc2N0cF9mcmFnX3BvaW50KHNwLCBwYXJhbXMtPnNwcF9wYXRobXR1KTsKKwkJfSBlbHNlIHsKKwkJCXNwLT5wYXRobXR1ID0gcGFyYW1zLT5zcHBfcGF0aG10dTsKKwkJfQorCX0KKworCWlmIChwbXR1ZF9jaGFuZ2UpIHsKKwkJaWYgKHRyYW5zKSB7CisJCQlpbnQgdXBkYXRlID0gKHRyYW5zLT5wYXJhbV9mbGFncyAmIFNQUF9QTVRVRF9ESVNBQkxFKSAmJgorCQkJCShwYXJhbXMtPnNwcF9mbGFncyAmIFNQUF9QTVRVRF9FTkFCTEUpOworCQkJdHJhbnMtPnBhcmFtX2ZsYWdzID0KKwkJCQkodHJhbnMtPnBhcmFtX2ZsYWdzICYgflNQUF9QTVRVRCkgfCBwbXR1ZF9jaGFuZ2U7CisJCQlpZiAodXBkYXRlKSB7CisJCQkJc2N0cF90cmFuc3BvcnRfcG10dSh0cmFucyk7CisJCQkJc2N0cF9hc3NvY19zeW5jX3BtdHUoYXNvYyk7CisJCQl9CisJCX0gZWxzZSBpZiAoYXNvYykgeworCQkJYXNvYy0+cGFyYW1fZmxhZ3MgPQorCQkJCShhc29jLT5wYXJhbV9mbGFncyAmIH5TUFBfUE1UVUQpIHwgcG10dWRfY2hhbmdlOworCQl9IGVsc2UgeworCQkJc3AtPnBhcmFtX2ZsYWdzID0KKwkJCQkoc3AtPnBhcmFtX2ZsYWdzICYgflNQUF9QTVRVRCkgfCBwbXR1ZF9jaGFuZ2U7CisJCX0KKwl9CisKKwlpZiAocGFyYW1zLT5zcHBfc2Fja2RlbGF5KSB7CisJCWlmICh0cmFucykgeworCQkJdHJhbnMtPnNhY2tkZWxheSA9CisJCQkJbXNlY3NfdG9famlmZmllcyhwYXJhbXMtPnNwcF9zYWNrZGVsYXkpOworCQl9IGVsc2UgaWYgKGFzb2MpIHsKKwkJCWFzb2MtPnNhY2tkZWxheSA9CisJCQkJbXNlY3NfdG9famlmZmllcyhwYXJhbXMtPnNwcF9zYWNrZGVsYXkpOworCQl9IGVsc2UgeworCQkJc3AtPnNhY2tkZWxheSA9IHBhcmFtcy0+c3BwX3NhY2tkZWxheTsKKwkJfQorCX0KKworCWlmIChzYWNrZGVsYXlfY2hhbmdlKSB7CisJCWlmICh0cmFucykgeworCQkJdHJhbnMtPnBhcmFtX2ZsYWdzID0KKwkJCQkodHJhbnMtPnBhcmFtX2ZsYWdzICYgflNQUF9TQUNLREVMQVkpIHwKKwkJCQlzYWNrZGVsYXlfY2hhbmdlOworCQl9IGVsc2UgaWYgKGFzb2MpIHsKKwkJCWFzb2MtPnBhcmFtX2ZsYWdzID0KKwkJCQkoYXNvYy0+cGFyYW1fZmxhZ3MgJiB+U1BQX1NBQ0tERUxBWSkgfAorCQkJCXNhY2tkZWxheV9jaGFuZ2U7CisJCX0gZWxzZSB7CisJCQlzcC0+cGFyYW1fZmxhZ3MgPQorCQkJCShzcC0+cGFyYW1fZmxhZ3MgJiB+U1BQX1NBQ0tERUxBWSkgfAorCQkJCXNhY2tkZWxheV9jaGFuZ2U7CisJCX0KKwl9CisKKwlpZiAocGFyYW1zLT5zcHBfcGF0aG1heHJ4dCkgeworCQlpZiAodHJhbnMpIHsKKwkJCXRyYW5zLT5wYXRobWF4cnh0ID0gcGFyYW1zLT5zcHBfcGF0aG1heHJ4dDsKKwkJfSBlbHNlIGlmIChhc29jKSB7CisJCQlhc29jLT5wYXRobWF4cnh0ID0gcGFyYW1zLT5zcHBfcGF0aG1heHJ4dDsKKwkJfSBlbHNlIHsKKwkJCXNwLT5wYXRobWF4cnh0ID0gcGFyYW1zLT5zcHBfcGF0aG1heHJ4dDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgIHBhcmFtczsKKwlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgICAqdHJhbnMgPSBOVUxMOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICAgICAgICAqc3AgPSBzY3RwX3NrKHNrKTsKKwlpbnQgZXJyb3I7CisJaW50IGhiX2NoYW5nZSwgcG10dWRfY2hhbmdlLCBzYWNrZGVsYXlfY2hhbmdlOworCisJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMpKQorCQlyZXR1cm4gLSBFSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnBhcmFtcywgb3B0dmFsLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIFZhbGlkYXRlIGZsYWdzIGFuZCB2YWx1ZSBwYXJhbWV0ZXJzLiAqLworCWhiX2NoYW5nZSAgICAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX0hCOworCXBtdHVkX2NoYW5nZSAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1BNVFVEOworCXNhY2tkZWxheV9jaGFuZ2UgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1NBQ0tERUxBWTsKKworCWlmIChoYl9jaGFuZ2UgICAgICAgID09IFNQUF9IQiB8fAorCSAgICBwbXR1ZF9jaGFuZ2UgICAgID09IFNQUF9QTVRVRCB8fAorCSAgICBzYWNrZGVsYXlfY2hhbmdlID09IFNQUF9TQUNLREVMQVkgfHwKKwkgICAgcGFyYW1zLnNwcF9zYWNrZGVsYXkgPiA1MDAgfHwKKwkgICAgKHBhcmFtcy5zcHBfcGF0aG10dQorCSAgICAmJiBwYXJhbXMuc3BwX3BhdGhtdHUgPCBTQ1RQX0RFRkFVTFRfTUlOU0VHTUVOVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSWYgYW4gYWRkcmVzcyBvdGhlciB0aGFuIElOQUREUl9BTlkgaXMgc3BlY2lmaWVkLCBhbmQKKwkgKiBubyB0cmFuc3BvcnQgaXMgZm91bmQsIHRoZW4gdGhlIHJlcXVlc3QgaXMgaW52YWxpZC4KKwkgKi8KKwlpZiAoIXNjdHBfaXNfYW55KCggdW5pb24gc2N0cF9hZGRyICopJnBhcmFtcy5zcHBfYWRkcmVzcykpIHsKKwkJdHJhbnMgPSBzY3RwX2FkZHJfaWQydHJhbnNwb3J0KHNrLCAmcGFyYW1zLnNwcF9hZGRyZXNzLAorCQkJCQkgICAgICAgcGFyYW1zLnNwcF9hc3NvY19pZCk7CisJCWlmICghdHJhbnMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBHZXQgYXNzb2NpYXRpb24sIGlmIGFzc29jX2lkICE9IDAgYW5kIHRoZSBzb2NrZXQgaXMgYSBvbmUKKwkgKiB0byBtYW55IHN0eWxlIHNvY2tldCwgYW5kIGFuIGFzc29jaWF0aW9uIHdhcyBub3QgZm91bmQsIHRoZW4KKwkgKiB0aGUgaWQgd2FzIGludmFsaWQuCisJICovCisJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5zcHBfYXNzb2NfaWQpOworCWlmICghYXNvYyAmJiBwYXJhbXMuc3BwX2Fzc29jX2lkICYmIHNjdHBfc3R5bGUoc2ssIFVEUCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSGVhcnRiZWF0IGRlbWFuZCBjYW4gb25seSBiZSBzZW50IG9uIGEgdHJhbnNwb3J0IG9yCisJICogYXNzb2NpYXRpb24sIGJ1dCBub3QgYSBzb2NrZXQuCisJICovCisJaWYgKHBhcmFtcy5zcHBfZmxhZ3MgJiBTUFBfSEJfREVNQU5EICYmICF0cmFucyAmJiAhYXNvYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBQcm9jZXNzIHBhcmFtZXRlcnMuICovCisJZXJyb3IgPSBzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoJnBhcmFtcywgdHJhbnMsIGFzb2MsIHNwLAorCQkJCQkgICAgaGJfY2hhbmdlLCBwbXR1ZF9jaGFuZ2UsCisJCQkJCSAgICBzYWNrZGVsYXlfY2hhbmdlKTsKKworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogSWYgY2hhbmdlcyBhcmUgZm9yIGFzc29jaWF0aW9uLCBhbHNvIGFwcGx5IHBhcmFtZXRlcnMgdG8gZWFjaAorCSAqIHRyYW5zcG9ydC4KKwkgKi8KKwlpZiAoIXRyYW5zICYmIGFzb2MpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCisJCWxpc3RfZm9yX2VhY2gocG9zLCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KSB7CisJCQl0cmFucyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsCisJCQkJCSAgIHRyYW5zcG9ydHMpOworCQkJc2N0cF9hcHBseV9wZWVyX2FkZHJfcGFyYW1zKCZwYXJhbXMsIHRyYW5zLCBhc29jLCBzcCwKKwkJCQkJCSAgICBoYl9jaGFuZ2UsIHBtdHVkX2NoYW5nZSwKKwkJCQkJCSAgICBzYWNrZGVsYXlfY2hhbmdlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiA3LjEuMjQuIERlbGF5ZWQgQWNrIFRpbWVyIChTQ1RQX0RFTEFZRURfQUNLX1RJTUUpCisgKgorICogICBUaGlzIG9wdGlvbnMgd2lsbCBnZXQgb3Igc2V0IHRoZSBkZWxheWVkIGFjayB0aW1lci4gIFRoZSB0aW1lIGlzIHNldAorICogICBpbiBtaWxsaXNlY29uZHMuICBJZiB0aGUgYXNzb2NfaWQgaXMgMCwgdGhlbiB0aGlzIHNldHMgb3IgZ2V0cyB0aGUKKyAqICAgZW5kcG9pbnRzIGRlZmF1bHQgZGVsYXllZCBhY2sgdGltZXIgdmFsdWUuICBJZiB0aGUgYXNzb2NfaWQgZmllbGQgaXMKKyAqICAgbm9uLXplcm8sIHRoZW4gdGhlIHNldCBvciBnZXQgZWZmZWN0cyB0aGUgc3BlY2lmaWVkIGFzc29jaWF0aW9uLgorICoKKyAqICAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgeworICogICAgICAgc2N0cF9hc3NvY190ICAgICAgICAgICAgYXNzb2NfaWQ7CisgKiAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBhc3NvY192YWx1ZTsKKyAqICAgfTsKKyAqCisgKiAgICAgYXNzb2NfaWQgICAgLSBUaGlzIHBhcmFtZXRlciwgaW5kaWNhdGVzIHdoaWNoIGFzc29jaWF0aW9uIHRoZQorICogICAgICAgICAgICAgICAgICAgdXNlciBpcyBwcmVmb3JtaW5nIGFuIGFjdGlvbiB1cG9uLiBOb3RlIHRoYXQgaWYKKyAqICAgICAgICAgICAgICAgICAgIHRoaXMgZmllbGQncyB2YWx1ZSBpcyB6ZXJvIHRoZW4gdGhlIGVuZHBvaW50cworICogICAgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyBjaGFuZ2VkIChlZmZlY3RpbmcgZnV0dXJlCisgKiAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMgb25seSkuCisgKgorICogICAgIGFzc29jX3ZhbHVlIC0gVGhpcyBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMKKyAqICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIHVzZXIgaXMgcmVxdWVzdGluZyB0aGUgZGVsYXllZCBBQ0sgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgIGJlIHNldCB0by4gTm90ZSB0aGF0IHRoaXMgdmFsdWUgaXMgZGVmaW5lZCBpbgorICogICAgICAgICAgICAgICAgICAgdGhlIHN0YW5kYXJkIHRvIGJlIGJldHdlZW4gMjAwIGFuZCA1MDAgbWlsbGlzZWNvbmRzLgorICoKKyAqICAgICAgICAgICAgICAgICAgIE5vdGU6IGEgdmFsdWUgb2YgemVybyB3aWxsIGxlYXZlIHRoZSB2YWx1ZSBhbG9uZSwKKyAqICAgICAgICAgICAgICAgICAgIGJ1dCBkaXNhYmxlIFNBQ0sgZGVsYXkuIEEgbm9uLXplcm8gdmFsdWUgd2lsbCBhbHNvCisgKiAgICAgICAgICAgICAgICAgICBlbmFibGUgU0FDSyBkZWxheS4KKyAqLworCitzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2Fja190aW1lKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgIHBhcmFtczsKKwlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgICAqdHJhbnMgPSBOVUxMOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICAgICAgICAqc3AgPSBzY3RwX3NrKHNrKTsKKworCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkKKwkJcmV0dXJuIC0gRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBWYWxpZGF0ZSB2YWx1ZSBwYXJhbWV0ZXIuICovCisJaWYgKHBhcmFtcy5hc3NvY192YWx1ZSA+IDUwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBHZXQgYXNzb2NpYXRpb24sIGlmIGFzc29jX2lkICE9IDAgYW5kIHRoZSBzb2NrZXQgaXMgYSBvbmUKKwkgKiB0byBtYW55IHN0eWxlIHNvY2tldCwgYW5kIGFuIGFzc29jaWF0aW9uIHdhcyBub3QgZm91bmQsIHRoZW4KKwkgKiB0aGUgaWQgd2FzIGludmFsaWQuCisgCSAqLworCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNzb2NfaWQpOworCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgJiYgc2N0cF9zdHlsZShzaywgVURQKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGFyYW1zLmFzc29jX3ZhbHVlKSB7CisJCWlmIChhc29jKSB7CisJCQlhc29jLT5zYWNrZGVsYXkgPQorCQkJCW1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLmFzc29jX3ZhbHVlKTsKKwkJCWFzb2MtPnBhcmFtX2ZsYWdzID0gCisJCQkJKGFzb2MtPnBhcmFtX2ZsYWdzICYgflNQUF9TQUNLREVMQVkpIHwKKwkJCQlTUFBfU0FDS0RFTEFZX0VOQUJMRTsKKwkJfSBlbHNlIHsKKwkJCXNwLT5zYWNrZGVsYXkgPSBwYXJhbXMuYXNzb2NfdmFsdWU7CisJCQlzcC0+cGFyYW1fZmxhZ3MgPSAKKwkJCQkoc3AtPnBhcmFtX2ZsYWdzICYgflNQUF9TQUNLREVMQVkpIHwKKwkJCQlTUFBfU0FDS0RFTEFZX0VOQUJMRTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhc29jKSB7CisJCQlhc29jLT5wYXJhbV9mbGFncyA9IAorCQkJCShhc29jLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CisJCQkJU1BQX1NBQ0tERUxBWV9ESVNBQkxFOworCQl9IGVsc2UgeworCQkJc3AtPnBhcmFtX2ZsYWdzID0gCisJCQkJKHNwLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CisJCQkJU1BQX1NBQ0tERUxBWV9ESVNBQkxFOworCQl9CisJfQorCisJLyogSWYgY2hhbmdlIGlzIGZvciBhc3NvY2lhdGlvbiwgYWxzbyBhcHBseSB0byBlYWNoIHRyYW5zcG9ydC4gKi8KKwlpZiAoYXNvYykgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisKKwkJbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKKwkJCXRyYW5zID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwKKwkJCQkJICAgdHJhbnNwb3J0cyk7CisJCQlpZiAocGFyYW1zLmFzc29jX3ZhbHVlKSB7CisJCQkJdHJhbnMtPnNhY2tkZWxheSA9CisJCQkJCW1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLmFzc29jX3ZhbHVlKTsKKwkJCQl0cmFucy0+cGFyYW1fZmxhZ3MgPSAKKwkJCQkJKHRyYW5zLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CisJCQkJCVNQUF9TQUNLREVMQVlfRU5BQkxFOworCQkJfSBlbHNlIHsKKwkJCQl0cmFucy0+cGFyYW1fZmxhZ3MgPSAKKwkJCQkJKHRyYW5zLT5wYXJhbV9mbGFncyAmIH5TUFBfU0FDS0RFTEFZKSB8CisJCQkJCVNQUF9TQUNLREVMQVlfRElTQUJMRTsKKwkJCX0KKwkJfQorCX0KKyAKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMzNCw3ICsyNjA2LDcgQEAKIAkvKiBVcGRhdGUgdGhlIGZyYWdfcG9pbnQgb2YgdGhlIGV4aXN0aW5nIGFzc29jaWF0aW9ucy4gKi8KIAlsaXN0X2Zvcl9lYWNoKHBvcywgJihzcC0+ZXAtPmFzb2NzKSkgewogCQlhc29jID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uLCBhc29jcyk7Ci0JCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoc3AsIGFzb2MtPnBtdHUpOyAKKwkJYXNvYy0+ZnJhZ19wb2ludCA9IHNjdHBfZnJhZ19wb2ludChzcCwgYXNvYy0+cGF0aG10dSk7IAogCX0KIAogCXJldHVybiAwOwpAQCAtMjQ5MSw2ICsyNzYzLDEwIEBACiAJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHNrLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwogCisJY2FzZSBTQ1RQX0RFTEFZRURfQUNLX1RJTUU6CisJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2Fja190aW1lKHNrLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCiAJY2FzZSBTQ1RQX0lOSVRNU0c6CiAJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9pbml0bXNnKHNrLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwpAQCAtMjcxNSw4ICsyOTkxLDEzIEBACiAJLyogRGVmYXVsdCBQZWVyIEFkZHJlc3MgUGFyYW1ldGVycy4gIFRoZXNlIGRlZmF1bHRzIGNhbgogCSAqIGJlIG1vZGlmaWVkIHZpYSBTQ1RQX1BFRVJfQUREUl9QQVJBTVMKIAkgKi8KLQlzcC0+cGFkZHJwYXJhbS5zcHBfaGJpbnRlcnZhbCA9IGppZmZpZXNfdG9fbXNlY3Moc2N0cF9oYl9pbnRlcnZhbCk7Ci0Jc3AtPnBhZGRycGFyYW0uc3BwX3BhdGhtYXhyeHQgPSBzY3RwX21heF9yZXRyYW5zX3BhdGg7CisJc3AtPmhiaW50ZXJ2YWwgID0gamlmZmllc190b19tc2VjcyhzY3RwX2hiX2ludGVydmFsKTsKKwlzcC0+cGF0aG1heHJ4dCAgPSBzY3RwX21heF9yZXRyYW5zX3BhdGg7CisJc3AtPnBhdGhtdHUgICAgID0gMDsgLy8gYWxsb3cgZGVmYXVsdCBkaXNjb3ZlcnkKKwlzcC0+c2Fja2RlbGF5ICAgPSBzY3RwX3NhY2tfdGltZW91dDsKKwlzcC0+cGFyYW1fZmxhZ3MgPSBTUFBfSEJfRU5BQkxFIHwKKwkgICAgICAgICAgICAgICAgICBTUFBfUE1UVURfRU5BQkxFIHwKKwkgICAgICAgICAgICAgICAgICBTUFBfU0FDS0RFTEFZX0VOQUJMRTsKIAogCS8qIElmIGVuYWJsZWQgbm8gU0NUUCBtZXNzYWdlIGZyYWdtZW50YXRpb24gd2lsbCBiZSBwZXJmb3JtZWQuCiAJICogQ29uZmlndXJlIHRocm91Z2ggU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUyBzb2NrZXQgb3B0aW9uLgpAQCAtMjg2NSw3ICszMTQ2LDcgQEAKIAlzdGF0dXMuc3N0YXRfcHJpbWFyeS5zcGluZm9fY3duZCA9IHRyYW5zcG9ydC0+Y3duZDsKIAlzdGF0dXMuc3N0YXRfcHJpbWFyeS5zcGluZm9fc3J0dCA9IHRyYW5zcG9ydC0+c3J0dDsKIAlzdGF0dXMuc3N0YXRfcHJpbWFyeS5zcGluZm9fcnRvID0gamlmZmllc190b19tc2Vjcyh0cmFuc3BvcnQtPnJ0byk7Ci0Jc3RhdHVzLnNzdGF0X3ByaW1hcnkuc3BpbmZvX210dSA9IHRyYW5zcG9ydC0+cG10dTsKKwlzdGF0dXMuc3N0YXRfcHJpbWFyeS5zcGluZm9fbXR1ID0gdHJhbnNwb3J0LT5wYXRobXR1OwogCiAJaWYgKHN0YXR1cy5zc3RhdF9wcmltYXJ5LnNwaW5mb19zdGF0ZSA9PSBTQ1RQX1VOS05PV04pCiAJCXN0YXR1cy5zc3RhdF9wcmltYXJ5LnNwaW5mb19zdGF0ZSA9IFNDVFBfQUNUSVZFOwpAQCAtMjkyNCw3ICszMjA1LDcgQEAKIAlwaW5mby5zcGluZm9fY3duZCA9IHRyYW5zcG9ydC0+Y3duZDsKIAlwaW5mby5zcGluZm9fc3J0dCA9IHRyYW5zcG9ydC0+c3J0dDsKIAlwaW5mby5zcGluZm9fcnRvID0gamlmZmllc190b19tc2Vjcyh0cmFuc3BvcnQtPnJ0byk7Ci0JcGluZm8uc3BpbmZvX210dSA9IHRyYW5zcG9ydC0+cG10dTsKKwlwaW5mby5zcGluZm9fbXR1ID0gdHJhbnNwb3J0LT5wYXRobXR1OwogCiAJaWYgKHBpbmZvLnNwaW5mb19zdGF0ZSA9PSBTQ1RQX1VOS05PV04pCiAJCXBpbmZvLnNwaW5mb19zdGF0ZSA9IFNDVFBfQUNUSVZFOwpAQCAtMzA4Niw2OSArMzM2NywyMjcgQEAKICAqIGFkZHJlc3MncyBwYXJhbWV0ZXJzOgogICoKICAqICBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyB7Ci0gKiAgICAgIHNjdHBfYXNzb2NfdCAgICAgICAgICAgIHNwcF9hc3NvY19pZDsKLSAqICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3BwX2FkZHJlc3M7Ci0gKiAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNwcF9oYmludGVydmFsOwotICogICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICBzcHBfcGF0aG1heHJ4dDsKLSAqICB9OworICogICAgIHNjdHBfYXNzb2NfdCAgICAgICAgICAgIHNwcF9hc3NvY19pZDsKKyAqICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHBfYWRkcmVzczsKKyAqICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzcHBfaGJpbnRlcnZhbDsKKyAqICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICBzcHBfcGF0aG1heHJ4dDsKKyAqICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzcHBfcGF0aG10dTsKKyAqICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzcHBfc2Fja2RlbGF5OworICogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHNwcF9mbGFnczsKKyAqIH07CiAgKgotICogICBzcHBfYXNzb2NfaWQgICAgLSAoVURQIHN0eWxlIHNvY2tldCkgVGhpcyBpcyBmaWxsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLAotICogICAgICAgICAgICAgICAgICAgICBhbmQgaWRlbnRpZmllcyB0aGUgYXNzb2NpYXRpb24gZm9yIHRoaXMgcXVlcnkuCisgKiAgIHNwcF9hc3NvY19pZCAgICAtIChvbmUtdG8tbWFueSBzdHlsZSBzb2NrZXQpIFRoaXMgaXMgZmlsbGVkIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiwgYW5kIGlkZW50aWZpZXMgdGhlIGFzc29jaWF0aW9uIGZvcgorICogICAgICAgICAgICAgICAgICAgICB0aGlzIHF1ZXJ5LgogICogICBzcHBfYWRkcmVzcyAgICAgLSBUaGlzIHNwZWNpZmllcyB3aGljaCBhZGRyZXNzIGlzIG9mIGludGVyZXN0LgogICogICBzcHBfaGJpbnRlcnZhbCAgLSBUaGlzIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgaGVhcnRiZWF0IGludGVydmFsLAotICogICAgICAgICAgICAgICAgICAgICBpbiBtaWxsaXNlY29uZHMuICBBIHZhbHVlIG9mIDAsIHdoZW4gbW9kaWZ5aW5nIHRoZQotICogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIsIHNwZWNpZmllcyB0aGF0IHRoZSBoZWFydGJlYXQgb24gdGhpcwotICogICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIHNob3VsZCBiZSBkaXNhYmxlZC4gQSB2YWx1ZSBvZiBVSU5UMzJfTUFYCi0gKiAgICAgICAgICAgICAgICAgICAgICg0Mjk0OTY3Mjk1KSwgd2hlbiBtb2RpZnlpbmcgdGhlIHBhcmFtZXRlciwKLSAqICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoYXQgYSBoZWFydGJlYXQgc2hvdWxkIGJlIHNlbnQKLSAqICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkgdG8gdGhlIHBlZXIgYWRkcmVzcywgYW5kIHRoZSBjdXJyZW50Ci0gKiAgICAgICAgICAgICAgICAgICAgIGludGVydmFsIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkLgorICogICAgICAgICAgICAgICAgICAgICBpbiBtaWxsaXNlY29uZHMuICBJZiBhICB2YWx1ZSBvZiB6ZXJvCisgKiAgICAgICAgICAgICAgICAgICAgIGlzIHByZXNlbnQgaW4gdGhpcyBmaWVsZCB0aGVuIG5vIGNoYW5nZXMgYXJlIHRvCisgKiAgICAgICAgICAgICAgICAgICAgIGJlIG1hZGUgdG8gdGhpcyBwYXJhbWV0ZXIuCiAgKiAgIHNwcF9wYXRobWF4cnh0ICAtIFRoaXMgY29udGFpbnMgdGhlIG1heGltdW0gbnVtYmVyIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgIHJldHJhbnNtaXNzaW9ucyBiZWZvcmUgdGhpcyBhZGRyZXNzIHNoYWxsIGJlCi0gKiAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgdW5yZWFjaGFibGUuCisgKiAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgdW5yZWFjaGFibGUuIElmIGEgIHZhbHVlIG9mIHplcm8KKyAqICAgICAgICAgICAgICAgICAgICAgaXMgcHJlc2VudCBpbiB0aGlzIGZpZWxkIHRoZW4gbm8gY2hhbmdlcyBhcmUgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSB0byB0aGlzIHBhcmFtZXRlci4KKyAqICAgc3BwX3BhdGhtdHUgICAgIC0gV2hlbiBQYXRoIE1UVSBkaXNjb3ZlcnkgaXMgZGlzYWJsZWQgdGhlIHZhbHVlCisgKiAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBoZXJlIHdpbGwgYmUgdGhlICJmaXhlZCIgcGF0aCBtdHUuCisgKiAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpZiB0aGUgc3BwX2FkZHJlc3MgZmllbGQgaXMgZW1wdHkKKyAqICAgICAgICAgICAgICAgICAgICAgdGhlbiBhbGwgYXNzb2NpYXRpb25zIG9uIHRoaXMgYWRkcmVzcyB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgIGhhdmUgdGhpcyBmaXhlZCBwYXRoIG10dSBzZXQgdXBvbiB0aGVtLgorICoKKyAqICAgc3BwX3NhY2tkZWxheSAgIC0gV2hlbiBkZWxheWVkIHNhY2sgaXMgZW5hYmxlZCwgdGhpcyB2YWx1ZSBzcGVjaWZpZXMKKyAqICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBzYWNrcyB3aWxsIGJlIGRlbGF5ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgZm9yLiBUaGlzIHZhbHVlIHdpbGwgYXBwbHkgdG8gYWxsIGFkZHJlc3NlcyBvZiBhbgorICogICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbiBpZiB0aGUgc3BwX2FkZHJlc3MgZmllbGQgaXMgZW1wdHkuIE5vdGUKKyAqICAgICAgICAgICAgICAgICAgICAgYWxzbywgdGhhdCBpZiBkZWxheWVkIHNhY2sgaXMgZW5hYmxlZCBhbmQgdGhpcworICogICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyBzZXQgdG8gMCwgbm8gY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGxhc3QKKyAqICAgICAgICAgICAgICAgICAgICAgcmVjb3JkZWQgZGVsYXllZCBzYWNrIHRpbWVyIHZhbHVlLgorICoKKyAqICAgc3BwX2ZsYWdzICAgICAgIC0gVGhlc2UgZmxhZ3MgYXJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIGZlYXR1cmVzCisgKiAgICAgICAgICAgICAgICAgICAgIG9uIGFuIGFzc29jaWF0aW9uLiBUaGUgZmxhZyBmaWVsZCBtYXkgY29udGFpbgorICogICAgICAgICAgICAgICAgICAgICB6ZXJvIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgU1BQX0hCX0VOQUJMRSAgLSBFbmFibGUgaGVhcnRiZWF0cyBvbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGFkZHJlc3MuIE5vdGUgdGhhdCBpZiB0aGUgYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyBlbXB0eSBhbGwgYWRkcmVzc2VzIGZvciB0aGUgYXNzb2NpYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgaGF2ZSBoZWFydGJlYXRzIGVuYWJsZWQgdXBvbiB0aGVtLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgU1BQX0hCX0RJU0FCTEUgLSBEaXNhYmxlIGhlYXJ0YmVhdHMgb24gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgIHNwZWljaWZlZCBhZGRyZXNzLiBOb3RlIHRoYXQgaWYgdGhlIGFkZHJlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgZmllbGQgaXMgZW1wdHkgYWxsIGFkZHJlc3NlcyBmb3IgdGhlIGFzc29jaWF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgIHdpbGwgaGF2ZSB0aGVpciBoZWFydGJlYXRzIGRpc2FibGVkLiBOb3RlIGFsc28KKyAqICAgICAgICAgICAgICAgICAgICAgdGhhdCBTUFBfSEJfRU5BQkxFIGFuZCBTUFBfSEJfRElTQUJMRSBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgbXV0dWFsbHkgZXhjbHVzaXZlLCBvbmx5IG9uZSBvZiB0aGVzZSB0d28gc2hvdWxkCisgKiAgICAgICAgICAgICAgICAgICAgIGJlIHNwZWNpZmllZC4gRW5hYmxpbmcgYm90aCBmaWVsZHMgd2lsbCBoYXZlCisgKiAgICAgICAgICAgICAgICAgICAgIHVuZGV0ZXJtaW5lZCByZXN1bHRzLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgU1BQX0hCX0RFTUFORCAtIFJlcXVlc3QgYSB1c2VyIGluaXRpYXRlZCBoZWFydGJlYXQKKyAqICAgICAgICAgICAgICAgICAgICAgdG8gYmUgbWFkZSBpbW1lZGlhdGVseS4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgIFNQUF9QTVRVRF9FTkFCTEUgLSBUaGlzIGZpZWxkIHdpbGwgZW5hYmxlIFBNVFUKKyAqICAgICAgICAgICAgICAgICAgICAgZGlzY292ZXJ5IHVwb24gdGhlIHNwZWNpZmllZCBhZGRyZXNzLiBOb3RlIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGFkZHJlc3MgZmVpbGQgaXMgZW1wdHkgdGhlbiBhbGwgYWRkcmVzc2VzCisgKiAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBhc3NvY2lhdGlvbiBhcmUgZWZmZWN0ZWQuCisgKgorICogICAgICAgICAgICAgICAgICAgICBTUFBfUE1UVURfRElTQUJMRSAtIFRoaXMgZmllbGQgd2lsbCBkaXNhYmxlIFBNVFUKKyAqICAgICAgICAgICAgICAgICAgICAgZGlzY292ZXJ5IHVwb24gdGhlIHNwZWNpZmllZCBhZGRyZXNzLiBOb3RlIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGFkZHJlc3MgZmVpbGQgaXMgZW1wdHkgdGhlbiBhbGwgYWRkcmVzc2VzCisgKiAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBhc3NvY2lhdGlvbiBhcmUgZWZmZWN0ZWQuIE5vdCBhbHNvIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgICAgU1BQX1BNVFVEX0VOQUJMRSBhbmQgU1BQX1BNVFVEX0RJU0FCTEUgYXJlIG11dHVhbGx5CisgKiAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZS4gRW5hYmxpbmcgYm90aCB3aWxsIGhhdmUgdW5kZXRlcm1pbmVkCisgKiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuCisgKgorICogICAgICAgICAgICAgICAgICAgICBTUFBfU0FDS0RFTEFZX0VOQUJMRSAtIFNldHRpbmcgdGhpcyBmbGFnIHR1cm5zCisgKiAgICAgICAgICAgICAgICAgICAgIG9uIGRlbGF5ZWQgc2Fjay4gVGhlIHRpbWUgc3BlY2lmaWVkIGluIHNwcF9zYWNrZGVsYXkKKyAqICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBzYWNrIGRlbGF5IGZvciB0aGlzIGFkZHJlc3MuIE5vdGUKKyAqICAgICAgICAgICAgICAgICAgICAgdGhhdCBpZiBzcHBfYWRkcmVzcyBpcyBlbXB0eSB0aGVuIGFsbCBhZGRyZXNzZXMgd2lsbAorICogICAgICAgICAgICAgICAgICAgICBlbmFibGUgZGVsYXllZCBzYWNrIGFuZCB0YWtlIG9uIHRoZSBzYWNrIGRlbGF5CisgKiAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHNwZWNpZmllZCBpbiBzcHBfc2Fja2RlbGF5LgorICogICAgICAgICAgICAgICAgICAgICBTUFBfU0FDS0RFTEFZX0RJU0FCTEUgLSBTZXR0aW5nIHRoaXMgZmxhZyB0dXJucworICogICAgICAgICAgICAgICAgICAgICBvZmYgZGVsYXllZCBzYWNrLiBJZiB0aGUgc3BwX2FkZHJlc3MgZmllbGQgaXMgYmxhbmsgdGhlbgorICogICAgICAgICAgICAgICAgICAgICBkZWxheWVkIHNhY2sgaXMgZGlzYWJsZWQgZm9yIHRoZSBlbnRpcmUgYXNzb2NpYXRpb24uIE5vdGUKKyAqICAgICAgICAgICAgICAgICAgICAgYWxzbyB0aGF0IHRoaXMgZmllbGQgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHRvCisgKiAgICAgICAgICAgICAgICAgICAgIFNQUF9TQUNLREVMQVlfRU5BQkxFLCBzZXR0aW5nIGJvdGggd2lsbCBoYXZlIHVuZGVmaW5lZAorICogICAgICAgICAgICAgICAgICAgICByZXN1bHRzLgogICovCiBzdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKLQkJCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKKwkJCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKLQlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyBwYXJhbXM7Ci0Jc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuczsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAgcGFyYW1zOworCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAgICp0cmFucyA9IE5VTEw7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSBOVUxMOworCXN0cnVjdCBzY3RwX3NvY2sgICAgICAgICpzcCA9IHNjdHBfc2soc2spOwogCiAJaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JLyogSWYgbm8gYXNzb2NpYXRpb24gaWQgaXMgc3BlY2lmaWVkIHJldHJpZXZlIHRoZSBkZWZhdWx0IHZhbHVlCi0JICogZm9yIHRoZSBlbmRwb2ludCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYWxsIGZ1dHVyZSBhc3NvY2lhdGlvbnMKKwkvKiBJZiBhbiBhZGRyZXNzIG90aGVyIHRoYW4gSU5BRERSX0FOWSBpcyBzcGVjaWZpZWQsIGFuZAorCSAqIG5vIHRyYW5zcG9ydCBpcyBmb3VuZCwgdGhlbiB0aGUgcmVxdWVzdCBpcyBpbnZhbGlkLgogCSAqLwotCWlmICghcGFyYW1zLnNwcF9hc3NvY19pZCAmJgotCSAgICBzY3RwX2lzX2FueSgoIHVuaW9uIHNjdHBfYWRkciAqKSZwYXJhbXMuc3BwX2FkZHJlc3MpKSB7Ci0JCXBhcmFtcy5zcHBfaGJpbnRlcnZhbCA9IHNjdHBfc2soc2spLT5wYWRkcnBhcmFtLnNwcF9oYmludGVydmFsOwotCQlwYXJhbXMuc3BwX3BhdGhtYXhyeHQgPSBzY3RwX3NrKHNrKS0+cGFkZHJwYXJhbS5zcHBfcGF0aG1heHJ4dDsKLQotCQlnb3RvIGRvbmU7CisJaWYgKCFzY3RwX2lzX2FueSgoIHVuaW9uIHNjdHBfYWRkciAqKSZwYXJhbXMuc3BwX2FkZHJlc3MpKSB7CisJCXRyYW5zID0gc2N0cF9hZGRyX2lkMnRyYW5zcG9ydChzaywgJnBhcmFtcy5zcHBfYWRkcmVzcywKKwkJCQkJICAgICAgIHBhcmFtcy5zcHBfYXNzb2NfaWQpOworCQlpZiAoIXRyYW5zKSB7CisJCQlTQ1RQX0RFQlVHX1BSSU5USygiRmFpbGVkIG5vIHRyYW5zcG9ydFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAotCXRyYW5zID0gc2N0cF9hZGRyX2lkMnRyYW5zcG9ydChzaywgJnBhcmFtcy5zcHBfYWRkcmVzcywKLQkJCQkgICAgICAgcGFyYW1zLnNwcF9hc3NvY19pZCk7Ci0JaWYgKCF0cmFucykKKwkvKiBHZXQgYXNzb2NpYXRpb24sIGlmIGFzc29jX2lkICE9IDAgYW5kIHRoZSBzb2NrZXQgaXMgYSBvbmUKKwkgKiB0byBtYW55IHN0eWxlIHNvY2tldCwgYW5kIGFuIGFzc29jaWF0aW9uIHdhcyBub3QgZm91bmQsIHRoZW4KKwkgKiB0aGUgaWQgd2FzIGludmFsaWQuCisJICovCisJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5zcHBfYXNzb2NfaWQpOworCWlmICghYXNvYyAmJiBwYXJhbXMuc3BwX2Fzc29jX2lkICYmIHNjdHBfc3R5bGUoc2ssIFVEUCkpIHsKKwkJU0NUUF9ERUJVR19QUklOVEsoIkZhaWxlZCBubyBhc3NvY2lhdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0cmFucykgeworCQkvKiBGZXRjaCB0cmFuc3BvcnQgdmFsdWVzLiAqLworCQlwYXJhbXMuc3BwX2hiaW50ZXJ2YWwgPSBqaWZmaWVzX3RvX21zZWNzKHRyYW5zLT5oYmludGVydmFsKTsKKwkJcGFyYW1zLnNwcF9wYXRobXR1ICAgID0gdHJhbnMtPnBhdGhtdHU7CisJCXBhcmFtcy5zcHBfcGF0aG1heHJ4dCA9IHRyYW5zLT5wYXRobWF4cnh0OworCQlwYXJhbXMuc3BwX3NhY2tkZWxheSAgPSBqaWZmaWVzX3RvX21zZWNzKHRyYW5zLT5zYWNrZGVsYXkpOworCisJCS8qZHJhZnQtMTEgZG9lc24ndCBzYXkgd2hhdCB0byByZXR1cm4gaW4gc3BwX2ZsYWdzKi8KKwkJcGFyYW1zLnNwcF9mbGFncyAgICAgID0gdHJhbnMtPnBhcmFtX2ZsYWdzOworCX0gZWxzZSBpZiAoYXNvYykgeworCQkvKiBGZXRjaCBhc3NvY2lhdGlvbiB2YWx1ZXMuICovCisJCXBhcmFtcy5zcHBfaGJpbnRlcnZhbCA9IGppZmZpZXNfdG9fbXNlY3MoYXNvYy0+aGJpbnRlcnZhbCk7CisJCXBhcmFtcy5zcHBfcGF0aG10dSAgICA9IGFzb2MtPnBhdGhtdHU7CisJCXBhcmFtcy5zcHBfcGF0aG1heHJ4dCA9IGFzb2MtPnBhdGhtYXhyeHQ7CisJCXBhcmFtcy5zcHBfc2Fja2RlbGF5ICA9IGppZmZpZXNfdG9fbXNlY3MoYXNvYy0+c2Fja2RlbGF5KTsKKworCQkvKmRyYWZ0LTExIGRvZXNuJ3Qgc2F5IHdoYXQgdG8gcmV0dXJuIGluIHNwcF9mbGFncyovCisJCXBhcmFtcy5zcHBfZmxhZ3MgICAgICA9IGFzb2MtPnBhcmFtX2ZsYWdzOworCX0gZWxzZSB7CisJCS8qIEZldGNoIHNvY2tldCB2YWx1ZXMuICovCisJCXBhcmFtcy5zcHBfaGJpbnRlcnZhbCA9IHNwLT5oYmludGVydmFsOworCQlwYXJhbXMuc3BwX3BhdGhtdHUgICAgPSBzcC0+cGF0aG10dTsKKwkJcGFyYW1zLnNwcF9zYWNrZGVsYXkgID0gc3AtPnNhY2tkZWxheTsKKwkJcGFyYW1zLnNwcF9wYXRobWF4cnh0ID0gc3AtPnBhdGhtYXhyeHQ7CisKKwkJLypkcmFmdC0xMSBkb2Vzbid0IHNheSB3aGF0IHRvIHJldHVybiBpbiBzcHBfZmxhZ3MqLworCQlwYXJhbXMuc3BwX2ZsYWdzICAgICAgPSBzcC0+cGFyYW1fZmxhZ3M7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZwYXJhbXMsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogNy4xLjI0LiBEZWxheWVkIEFjayBUaW1lciAoU0NUUF9ERUxBWUVEX0FDS19USU1FKQorICoKKyAqICAgVGhpcyBvcHRpb25zIHdpbGwgZ2V0IG9yIHNldCB0aGUgZGVsYXllZCBhY2sgdGltZXIuICBUaGUgdGltZSBpcyBzZXQKKyAqICAgaW4gbWlsbGlzZWNvbmRzLiAgSWYgdGhlIGFzc29jX2lkIGlzIDAsIHRoZW4gdGhpcyBzZXRzIG9yIGdldHMgdGhlCisgKiAgIGVuZHBvaW50cyBkZWZhdWx0IGRlbGF5ZWQgYWNrIHRpbWVyIHZhbHVlLiAgSWYgdGhlIGFzc29jX2lkIGZpZWxkIGlzCisgKiAgIG5vbi16ZXJvLCB0aGVuIHRoZSBzZXQgb3IgZ2V0IGVmZmVjdHMgdGhlIHNwZWNpZmllZCBhc3NvY2lhdGlvbi4KKyAqCisgKiAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHsKKyAqICAgICAgIHNjdHBfYXNzb2NfdCAgICAgICAgICAgIGFzc29jX2lkOworICogICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgYXNzb2NfdmFsdWU7CisgKiAgIH07CisgKgorICogICAgIGFzc29jX2lkICAgIC0gVGhpcyBwYXJhbWV0ZXIsIGluZGljYXRlcyB3aGljaCBhc3NvY2lhdGlvbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgIHVzZXIgaXMgcHJlZm9ybWluZyBhbiBhY3Rpb24gdXBvbi4gTm90ZSB0aGF0IGlmCisgKiAgICAgICAgICAgICAgICAgICB0aGlzIGZpZWxkJ3MgdmFsdWUgaXMgemVybyB0aGVuIHRoZSBlbmRwb2ludHMKKyAqICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgaXMgY2hhbmdlZCAoZWZmZWN0aW5nIGZ1dHVyZQorICogICAgICAgICAgICAgICAgICAgYXNzb2NpYXRpb25zIG9ubHkpLgorICoKKyAqICAgICBhc3NvY192YWx1ZSAtIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzCisgKiAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgdGhlIGRlbGF5ZWQgQUNLIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICBiZSBzZXQgdG8uIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGlzIGRlZmluZWQgaW4KKyAqICAgICAgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCB0byBiZSBiZXR3ZWVuIDIwMCBhbmQgNTAwIG1pbGxpc2Vjb25kcy4KKyAqCisgKiAgICAgICAgICAgICAgICAgICBOb3RlOiBhIHZhbHVlIG9mIHplcm8gd2lsbCBsZWF2ZSB0aGUgdmFsdWUgYWxvbmUsCisgKiAgICAgICAgICAgICAgICAgICBidXQgZGlzYWJsZSBTQUNLIGRlbGF5LiBBIG5vbi16ZXJvIHZhbHVlIHdpbGwgYWxzbworICogICAgICAgICAgICAgICAgICAgZW5hYmxlIFNBQ0sgZGVsYXkuCisgKi8KK3N0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrX3RpbWUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLAorCQkJCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAgcGFyYW1zOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICAgICAgICAqc3AgPSBzY3RwX3NrKHNrKTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkKKwkJcmV0dXJuIC0gRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBHZXQgYXNzb2NpYXRpb24sIGlmIGFzc29jX2lkICE9IDAgYW5kIHRoZSBzb2NrZXQgaXMgYSBvbmUKKwkgKiB0byBtYW55IHN0eWxlIHNvY2tldCwgYW5kIGFuIGFzc29jaWF0aW9uIHdhcyBub3QgZm91bmQsIHRoZW4KKwkgKiB0aGUgaWQgd2FzIGludmFsaWQuCisgCSAqLworCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNzb2NfaWQpOworCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgJiYgc2N0cF9zdHlsZShzaywgVURQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBUaGUgdmFsdWUgb2YgdGhlIGhlYXJ0YmVhdCBpbnRlcnZhbCwgaW4gbWlsbGlzZWNvbmRzLiBBIHZhbHVlIG9mIDAsCi0JICogd2hlbiBtb2RpZnlpbmcgdGhlIHBhcmFtZXRlciwgc3BlY2lmaWVzIHRoYXQgdGhlIGhlYXJ0YmVhdCBvbiB0aGlzCi0JICogYWRkcmVzcyBzaG91bGQgYmUgZGlzYWJsZWQuCi0JICovCi0JaWYgKCF0cmFucy0+aGJfYWxsb3dlZCkKLQkJcGFyYW1zLnNwcF9oYmludGVydmFsID0gMDsKLQllbHNlCi0JCXBhcmFtcy5zcHBfaGJpbnRlcnZhbCA9IGppZmZpZXNfdG9fbXNlY3ModHJhbnMtPmhiX2ludGVydmFsKTsKKwlpZiAoYXNvYykgeworCQkvKiBGZXRjaCBhc3NvY2lhdGlvbiB2YWx1ZXMuICovCisJCWlmIChhc29jLT5wYXJhbV9mbGFncyAmIFNQUF9TQUNLREVMQVlfRU5BQkxFKQorCQkJcGFyYW1zLmFzc29jX3ZhbHVlID0gamlmZmllc190b19tc2VjcygKKwkJCQlhc29jLT5zYWNrZGVsYXkpOworCQllbHNlCisJCQlwYXJhbXMuYXNzb2NfdmFsdWUgPSAwOworCX0gZWxzZSB7CisJCS8qIEZldGNoIHNvY2tldCB2YWx1ZXMuICovCisJCWlmIChzcC0+cGFyYW1fZmxhZ3MgJiBTUFBfU0FDS0RFTEFZX0VOQUJMRSkKKwkJCXBhcmFtcy5hc3NvY192YWx1ZSAgPSBzcC0+c2Fja2RlbGF5OworCQllbHNlCisJCQlwYXJhbXMuYXNzb2NfdmFsdWUgID0gMDsKKwl9CiAKLQkvKiBzcHBfcGF0aG1heHJ4dCBjb250YWlucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zCi0JICogYmVmb3JlIHRoaXMgYWRkcmVzcyBzaGFsbCBiZSBjb25zaWRlcmVkIHVucmVhY2hhYmxlLgotCSAqLwotCXBhcmFtcy5zcHBfcGF0aG1heHJ4dCA9IHRyYW5zLT5tYXhfcmV0cmFuczsKLQotZG9uZToKIAlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnBhcmFtcywgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTQwMTUsNiArNDQ1NCwxMCBAQAogCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfcGVlcl9hZGRyX3BhcmFtcyhzaywgbGVuLCBvcHR2YWwsCiAJCQkJCQkJICBvcHRsZW4pOwogCQlicmVhazsKKwljYXNlIFNDVFBfREVMQVlFRF9BQ0tfVElNRToKKwkJcmV0dmFsID0gc2N0cF9nZXRzb2Nrb3B0X2RlbGF5ZWRfYWNrX3RpbWUoc2ssIGxlbiwgb3B0dmFsLAorCQkJCQkJCSAgb3B0bGVuKTsKKwkJYnJlYWs7CiAJY2FzZSBTQ1RQX0lOSVRNU0c6CiAJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9pbml0bXNnKHNrLCBsZW4sIG9wdHZhbCwgb3B0bGVuKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC90cmFuc3BvcnQuYyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCmluZGV4IDI2OGRkYWYuLjY4ZDczZTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCkBAIC04NiwxMCArODYsMTMgQEAKIAlwZWVyLT5pbml0X3NlbnRfY291bnQgPSAwOwogCiAJcGVlci0+c3RhdGUgPSBTQ1RQX0FDVElWRTsKLQlwZWVyLT5oYl9hbGxvd2VkID0gMDsKKwlwZWVyLT5wYXJhbV9mbGFncyA9IFNQUF9IQl9ESVNBQkxFIHwKKwkJCSAgICBTUFBfUE1UVURfRU5BQkxFIHwKKwkJCSAgICBTUFBfU0FDS0RFTEFZX0VOQUJMRTsKKwlwZWVyLT5oYmludGVydmFsICA9IDA7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IHBhdGggbWF4X3JldHJhbnMuICAqLwotCXBlZXItPm1heF9yZXRyYW5zID0gc2N0cF9tYXhfcmV0cmFuc19wYXRoOworCXBlZXItPnBhdGhtYXhyeHQgID0gc2N0cF9tYXhfcmV0cmFuc19wYXRoOwogCXBlZXItPmVycm9yX2NvdW50ID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZwZWVyLT50cmFuc21pdHRlZCk7CkBAIC0yMjksMTAgKzIzMiwxMCBAQAogCWRzdCA9IHRyYW5zcG9ydC0+YWZfc3BlY2lmaWMtPmdldF9kc3QoTlVMTCwgJnRyYW5zcG9ydC0+aXBhZGRyLCBOVUxMKTsKIAogCWlmIChkc3QpIHsKLQkJdHJhbnNwb3J0LT5wbXR1ID0gZHN0X210dShkc3QpOworCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBkc3RfbXR1KGRzdCk7CiAJCWRzdF9yZWxlYXNlKGRzdCk7CiAJfSBlbHNlCi0JCXRyYW5zcG9ydC0+cG10dSA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOworCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVDsKIH0KIAogLyogQ2FjaGVzIHRoZSBkc3QgZW50cnkgYW5kIHNvdXJjZSBhZGRyZXNzIGZvciBhIHRyYW5zcG9ydCdzIGRlc3RpbmF0aW9uCkBAIC0yNTQsOCArMjU3LDExIEBACiAJCWFmLT5nZXRfc2FkZHIoYXNvYywgZHN0LCBkYWRkciwgJnRyYW5zcG9ydC0+c2FkZHIpOwogCiAJdHJhbnNwb3J0LT5kc3QgPSBkc3Q7CisJaWYgKCh0cmFuc3BvcnQtPnBhcmFtX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUpICYmIHRyYW5zcG9ydC0+cGF0aG10dSkgeworCQlyZXR1cm47CisJfQogCWlmIChkc3QpIHsKLQkJdHJhbnNwb3J0LT5wbXR1ID0gZHN0X210dShkc3QpOworCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBkc3RfbXR1KGRzdCk7CiAKIAkJLyogSW5pdGlhbGl6ZSBzay0+c2tfcmN2X3NhZGRyLCBpZiB0aGUgdHJhbnNwb3J0IGlzIHRoZQogCQkgKiBhc3NvY2lhdGlvbidzIGFjdGl2ZSBwYXRoIGZvciBnZXRzb2NrbmFtZSgpLgpAQCAtMjY0LDcgKzI3MCw3IEBACiAJCQlvcHQtPnBmLT5hZi0+dG9fc2tfc2FkZHIoJnRyYW5zcG9ydC0+c2FkZHIsCiAJCQkJCQkgYXNvYy0+YmFzZS5zayk7CiAJfSBlbHNlCi0JCXRyYW5zcG9ydC0+cG10dSA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOworCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVDsKIH0KIAogLyogSG9sZCBhIHJlZmVyZW5jZSB0byBhIHRyYW5zcG9ydC4gICovCkBAIC0zNjksNyArMzc1LDcgQEAKIAogCXNzdGhyZXNoID0gdHJhbnNwb3J0LT5zc3RocmVzaDsKIAlwYmEgPSB0cmFuc3BvcnQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQ7Ci0JcG10dSA9IHRyYW5zcG9ydC0+YXNvYy0+cG10dTsKKwlwbXR1ID0gdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1OwogCiAJaWYgKGN3bmQgPD0gc3N0aHJlc2gpIHsKIAkJLyogUkZDIDI5NjAgNy4yLjEsIHNjdHBpbXBndWlkZS0wNSAyLjE0LjIgV2hlbiBjd25kIGlzIGxlc3MKQEAgLTQ0MSw4ICs0NDcsOCBAQAogCQkgKiAgICAgIHBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwCiAJCSAqLwogCQl0cmFuc3BvcnQtPnNzdGhyZXNoID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAotCQkJCQkgIDQqdHJhbnNwb3J0LT5hc29jLT5wbXR1KTsKLQkJdHJhbnNwb3J0LT5jd25kID0gdHJhbnNwb3J0LT5hc29jLT5wbXR1OworCQkJCQkgIDQqdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1KTsKKwkJdHJhbnNwb3J0LT5jd25kID0gdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1OwogCQlicmVhazsKIAogCWNhc2UgU0NUUF9MT1dFUl9DV05EX0ZBU1RfUlRYOgpAQCAtNDU5LDcgKzQ2NSw3IEBACiAJCSAqICAgICAgcGFydGlhbF9ieXRlc19hY2tlZCA9IDAKIAkJICovCiAJCXRyYW5zcG9ydC0+c3N0aHJlc2ggPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCi0JCQkJCSAgNCp0cmFuc3BvcnQtPmFzb2MtPnBtdHUpOworCQkJCQkgIDQqdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1KTsKIAkJdHJhbnNwb3J0LT5jd25kID0gdHJhbnNwb3J0LT5zc3RocmVzaDsKIAkJYnJlYWs7CiAKQEAgLTQ3OSw3ICs0ODUsNyBAQAogCQlpZiAoKGppZmZpZXMgLSB0cmFuc3BvcnQtPmxhc3RfdGltZV9lY25lX3JlZHVjZWQpID4KIAkJICAgIHRyYW5zcG9ydC0+cnR0KSB7CiAJCQl0cmFuc3BvcnQtPnNzdGhyZXNoID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAotCQkJCQkgIAkgIDQqdHJhbnNwb3J0LT5hc29jLT5wbXR1KTsKKwkJCQkJICAJICA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPnNzdGhyZXNoOwogCQkJdHJhbnNwb3J0LT5sYXN0X3RpbWVfZWNuZV9yZWR1Y2VkID0gamlmZmllczsKIAkJfQpAQCAtNDk2LDcgKzUwMiw3IEBACiAJCSAqLwogCQlpZiAoKGppZmZpZXMgLSB0cmFuc3BvcnQtPmxhc3RfdGltZV91c2VkKSA+IHRyYW5zcG9ydC0+cnRvKQogCQkJdHJhbnNwb3J0LT5jd25kID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAotCQkJCQkJIDQqdHJhbnNwb3J0LT5hc29jLT5wbXR1KTsKKwkJCQkJCSA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCWJyZWFrOwogCX07CiAKQEAgLTUxMSw3ICs1MTcsNyBAQAogdW5zaWduZWQgbG9uZyBzY3RwX3RyYW5zcG9ydF90aW1lb3V0KHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdGltZW91dCA9IHQtPmhiX2ludGVydmFsICsgdC0+cnRvICsgc2N0cF9qaXR0ZXIodC0+cnRvKTsKKwl0aW1lb3V0ID0gdC0+aGJpbnRlcnZhbCArIHQtPnJ0byArIHNjdHBfaml0dGVyKHQtPnJ0byk7CiAJdGltZW91dCArPSBqaWZmaWVzOwogCXJldHVybiB0aW1lb3V0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDMxNDUxMDMuLjA2ZmEyMTcgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTY0MCw5MiArNjQwLDYgQEAKIAlrZnJlZShpb2NiLT5wcml2YXRlKTsKIH0KIAotLyoKLSAqCVJlYWQgZGF0YSBmcm9tIGEgc29ja2V0LiB1YnVmIGlzIGEgdXNlciBtb2RlIHBvaW50ZXIuIFdlIG1ha2Ugc3VyZSB0aGUgdXNlcgotICoJYXJlYSB1YnVmLi4udWJ1ZitzaXplLTEgaXMgd3JpdGFibGUgYmVmb3JlIGFza2luZyB0aGUgcHJvdG9jb2wuCi0gKi8KLQotc3RhdGljIHNzaXplX3Qgc29ja19haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNoYXIgX191c2VyICp1YnVmLAotCQkJIHNpemVfdCBzaXplLCBsb2ZmX3QgcG9zKQotewotCXN0cnVjdCBzb2NrX2lvY2IgKngsIHNpb2NiOwotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JaW50IGZsYWdzOwotCi0JaWYgKHBvcyAhPSAwKQotCQlyZXR1cm4gLUVTUElQRTsKLQlpZiAoc2l6ZT09MCkJCS8qIE1hdGNoIFNZUzUgYmVoYXZpb3VyICovCi0JCXJldHVybiAwOwotCi0JaWYgKGlzX3N5bmNfa2lvY2IoaW9jYikpCi0JCXggPSAmc2lvY2I7Ci0JZWxzZSB7Ci0JCXggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja19pb2NiKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICgheCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpb2NiLT5raV9kdG9yID0gc29ja19haW9fZHRvcjsKLQl9Ci0JaW9jYi0+cHJpdmF0ZSA9IHg7Ci0JeC0+a2lvY2IgPSBpb2NiOwotCXNvY2sgPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7IAotCi0JeC0+YXN5bmNfbXNnLm1zZ19uYW1lID0gTlVMTDsKLQl4LT5hc3luY19tc2cubXNnX25hbWVsZW4gPSAwOwotCXgtPmFzeW5jX21zZy5tc2dfaW92ID0gJngtPmFzeW5jX2lvdjsKLQl4LT5hc3luY19tc2cubXNnX2lvdmxlbiA9IDE7Ci0JeC0+YXN5bmNfbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQl4LT5hc3luY19tc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCXgtPmFzeW5jX2lvdi5pb3ZfYmFzZSA9IHVidWY7Ci0JeC0+YXN5bmNfaW92Lmlvdl9sZW4gPSBzaXplOwotCWZsYWdzID0gIShpb2NiLT5raV9maWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyAwIDogTVNHX0RPTlRXQUlUOwotCi0JcmV0dXJuIF9fc29ja19yZWN2bXNnKGlvY2IsIHNvY2ssICZ4LT5hc3luY19tc2csIHNpemUsIGZsYWdzKTsKLX0KLQotCi0vKgotICoJV3JpdGUgZGF0YSB0byBhIHNvY2tldC4gV2UgdmVyaWZ5IHRoYXQgdGhlIHVzZXIgYXJlYSB1YnVmLi51YnVmK3NpemUtMQotICoJaXMgcmVhZGFibGUgYnkgdGhlIHVzZXIgcHJvY2Vzcy4KLSAqLwotCi1zdGF0aWMgc3NpemVfdCBzb2NrX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAotCQkJICBzaXplX3Qgc2l6ZSwgbG9mZl90IHBvcykKLXsKLQlzdHJ1Y3Qgc29ja19pb2NiICp4LCBzaW9jYjsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCQotCWlmIChwb3MgIT0gMCkKLQkJcmV0dXJuIC1FU1BJUEU7Ci0JaWYoc2l6ZT09MCkJCS8qIE1hdGNoIFNZUzUgYmVoYXZpb3VyICovCi0JCXJldHVybiAwOwotCi0JaWYgKGlzX3N5bmNfa2lvY2IoaW9jYikpCi0JCXggPSAmc2lvY2I7Ci0JZWxzZSB7Ci0JCXggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja19pb2NiKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICgheCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpb2NiLT5raV9kdG9yID0gc29ja19haW9fZHRvcjsKLQl9Ci0JaW9jYi0+cHJpdmF0ZSA9IHg7Ci0JeC0+a2lvY2IgPSBpb2NiOwotCXNvY2sgPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7IAotCi0JeC0+YXN5bmNfbXNnLm1zZ19uYW1lID0gTlVMTDsKLQl4LT5hc3luY19tc2cubXNnX25hbWVsZW4gPSAwOwotCXgtPmFzeW5jX21zZy5tc2dfaW92ID0gJngtPmFzeW5jX2lvdjsKLQl4LT5hc3luY19tc2cubXNnX2lvdmxlbiA9IDE7Ci0JeC0+YXN5bmNfbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQl4LT5hc3luY19tc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCXgtPmFzeW5jX21zZy5tc2dfZmxhZ3MgPSAhKGlvY2ItPmtpX2ZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IDAgOiBNU0dfRE9OVFdBSVQ7Ci0JaWYgKHNvY2stPnR5cGUgPT0gU09DS19TRVFQQUNLRVQpCi0JCXgtPmFzeW5jX21zZy5tc2dfZmxhZ3MgfD0gTVNHX0VPUjsKLQl4LT5hc3luY19pb3YuaW92X2Jhc2UgPSAodm9pZCBfX3VzZXIgKil1YnVmOwotCXgtPmFzeW5jX2lvdi5pb3ZfbGVuID0gc2l6ZTsKLQkKLQlyZXR1cm4gX19zb2NrX3NlbmRtc2coaW9jYiwgc29jaywgJngtPmFzeW5jX21zZywgc2l6ZSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNvY2tfc2VuZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJICAgICBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwcG9zLCBpbnQgbW9yZSkKIHsKQEAgLTc0MSw1MyArNjU1LDEzNSBAQAogCXJldHVybiBzb2NrLT5vcHMtPnNlbmRwYWdlKHNvY2ssIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHNvY2tfcmVhZHZfd3JpdGV2KGludCB0eXBlLAotCQkJICAgICBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqIGlvdiwKLQkJCSAgICAgbG9uZyBjb3VudCwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3RydWN0IHNvY2tfaW9jYiAqYWxsb2Nfc29ja19pb2NiKHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3Qgc29ja19pb2NiICpzaW9jYikKK3sKKwlpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpIHsKKwkJc2lvY2IgPSBrbWFsbG9jKHNpemVvZigqc2lvY2IpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzaW9jYikKKwkJCXJldHVybiBOVUxMOworCQlpb2NiLT5raV9kdG9yID0gc29ja19haW9fZHRvcjsKKwl9CisKKwlzaW9jYi0+a2lvY2IgPSBpb2NiOworCXNpb2NiLT5hc3luY19pb3YuaW92X2Jhc2UgPSB1YnVmOworCXNpb2NiLT5hc3luY19pb3YuaW92X2xlbiA9IHNpemU7CisKKwlpb2NiLT5wcml2YXRlID0gc2lvY2I7CisJcmV0dXJuIHNpb2NiOworfQorCitzdGF0aWMgc3NpemVfdCBkb19zb2NrX3JlYWQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbG9uZyBucl9zZWdzKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc2l6ZV90IHNpemUgPSAwOworCWludCBpOworCisgICAgICAgIGZvciAoaSA9IDAgOyBpIDwgbnJfc2VncyA7IGkrKykKKyAgICAgICAgICAgICAgICBzaXplICs9IGlvdltpXS5pb3ZfbGVuOworCisJbXNnLT5tc2dfbmFtZSA9IE5VTEw7CisJbXNnLT5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLT5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNnLT5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnLT5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSBpb3Y7CisJbXNnLT5tc2dfaW92bGVuID0gbnJfc2VnczsKKwltc2ctPm1zZ19mbGFncyA9IChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyBNU0dfRE9OVFdBSVQgOiAwOworCisJcmV0dXJuIF9fc29ja19yZWN2bXNnKGlvY2IsIHNvY2ssIG1zZywgc2l6ZSwgbXNnLT5tc2dfZmxhZ3MpOworfQorCitzdGF0aWMgc3NpemVfdCBzb2NrX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGtpb2NiIGlvY2I7CisJc3RydWN0IHNvY2tfaW9jYiBzaW9jYjsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlpbnQgcmV0OworCisgICAgICAgIGluaXRfc3luY19raW9jYigmaW9jYiwgTlVMTCk7CisJaW9jYi5wcml2YXRlID0gJnNpb2NiOworCisJcmV0ID0gZG9fc29ja19yZWFkKCZtc2csICZpb2NiLCBmaWxlLCAoc3RydWN0IGlvdmVjICopaW92LCBucl9zZWdzKTsKKwlpZiAoLUVJT0NCUVVFVUVEID09IHJldCkKKwkJcmV0ID0gd2FpdF9vbl9zeW5jX2tpb2NiKCZpb2NiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzb2NrX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBzb2NrX2lvY2Igc2lvY2IsICp4OworCisJaWYgKHBvcyAhPSAwKQorCQlyZXR1cm4gLUVTUElQRTsKKwlpZiAoY291bnQgPT0gMCkJCS8qIE1hdGNoIFNZUzUgYmVoYXZpb3VyICovCisJCXJldHVybiAwOworCisJeCA9IGFsbG9jX3NvY2tfaW9jYihpb2NiLCB1YnVmLCBjb3VudCwgJnNpb2NiKTsKKwlpZiAoIXgpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiBkb19zb2NrX3JlYWQoJngtPmFzeW5jX21zZywgaW9jYiwgaW9jYi0+a2lfZmlscCwKKwkJCSZ4LT5hc3luY19pb3YsIDEpOworfQorCitzdGF0aWMgc3NpemVfdCBkb19zb2NrX3dyaXRlKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IGtpb2NiICppb2NiLAorCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNpemVfdCBzaXplID0gMDsKKwlpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IG5yX3NlZ3MgOyBpKyspCisgICAgICAgICAgICAgICAgc2l6ZSArPSBpb3ZbaV0uaW92X2xlbjsKKworCW1zZy0+bXNnX25hbWUgPSBOVUxMOworCW1zZy0+bXNnX25hbWVsZW4gPSAwOworCW1zZy0+bXNnX2NvbnRyb2wgPSBOVUxMOworCW1zZy0+bXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy0+bXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikgaW92OworCW1zZy0+bXNnX2lvdmxlbiA9IG5yX3NlZ3M7CisJbXNnLT5tc2dfZmxhZ3MgPSAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gTVNHX0RPTlRXQUlUIDogMDsKKwlpZiAoc29jay0+dHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkKKwkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX0VPUjsKKworCXJldHVybiBfX3NvY2tfc2VuZG1zZyhpb2NiLCBzb2NrLCBtc2csIHNpemUpOworfQorCitzdGF0aWMgc3NpemVfdCBzb2NrX3dyaXRldihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBraW9jYiBpb2NiOworCXN0cnVjdCBzb2NrX2lvY2Igc2lvY2I7CisJaW50IHJldDsKIAotCXNvY2sgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW5pdF9zeW5jX2tpb2NiKCZpb2NiLCBOVUxMKTsKKwlpb2NiLnByaXZhdGUgPSAmc2lvY2I7CiAKLQltc2cubXNnX25hbWUgPSBOVUxMOwotCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSBpb3Y7Ci0JbXNnLm1zZ19pb3ZsZW4gPSBjb3VudDsKLQltc2cubXNnX2ZsYWdzID0gKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IE1TR19ET05UV0FJVCA6IDA7Ci0KLQkvKiByZWFkKCkgZG9lcyBhIFZFUklGWV9XUklURSAqLwotCWlmICh0eXBlID09IFZFUklGWV9XUklURSkKLQkJcmV0dXJuIHNvY2tfcmVjdm1zZyhzb2NrLCAmbXNnLCBzaXplLCBtc2cubXNnX2ZsYWdzKTsKLQotCWlmIChzb2NrLT50eXBlID09IFNPQ0tfU0VRUEFDS0VUKQotCQltc2cubXNnX2ZsYWdzIHw9IE1TR19FT1I7Ci0KLQlyZXR1cm4gc29ja19zZW5kbXNnKHNvY2ssICZtc2csIHNpemUpOworCXJldCA9IGRvX3NvY2tfd3JpdGUoJm1zZywgJmlvY2IsIGZpbGUsIChzdHJ1Y3QgaW92ZWMgKilpb3YsIG5yX3NlZ3MpOworCWlmICgtRUlPQ0JRVUVVRUQgPT0gcmV0KQorCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmlvY2IpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNvY2tfcmVhZHYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqdmVjdG9yLAotCQkJICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBzb2NrX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpCiB7Ci0Jc2l6ZV90IHRvdF9sZW4gPSAwOwotCWludCBpOwotICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKQotICAgICAgICAgICAgICAgIHRvdF9sZW4gKz0gdmVjdG9yW2ldLmlvdl9sZW47Ci0JcmV0dXJuIHNvY2tfcmVhZHZfd3JpdGV2KFZFUklGWV9XUklURSwKLQkJCQkgZmlsZSwgdmVjdG9yLCBjb3VudCwgdG90X2xlbik7Ci19Ci0JCi1zdGF0aWMgc3NpemVfdCBzb2NrX3dyaXRldihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICp2ZWN0b3IsCi0JCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc2l6ZV90IHRvdF9sZW4gPSAwOwotCWludCBpOwotICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKQotICAgICAgICAgICAgICAgIHRvdF9sZW4gKz0gdmVjdG9yW2ldLmlvdl9sZW47Ci0JcmV0dXJuIHNvY2tfcmVhZHZfd3JpdGV2KFZFUklGWV9SRUFELAotCQkJCSBmaWxlLCB2ZWN0b3IsIGNvdW50LCB0b3RfbGVuKTsKKwlzdHJ1Y3Qgc29ja19pb2NiIHNpb2NiLCAqeDsKKworCWlmIChwb3MgIT0gMCkKKwkJcmV0dXJuIC1FU1BJUEU7CisJaWYgKGNvdW50ID09IDApCQkvKiBNYXRjaCBTWVM1IGJlaGF2aW91ciAqLworCQlyZXR1cm4gMDsKKworCXggPSBhbGxvY19zb2NrX2lvY2IoaW9jYiwgKHZvaWQgX191c2VyICopdWJ1ZiwgY291bnQsICZzaW9jYik7CisJaWYgKCF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiBkb19zb2NrX3dyaXRlKCZ4LT5hc3luY19tc2csIGlvY2IsIGlvY2ItPmtpX2ZpbHAsCisJCQkmeC0+YXN5bmNfaW92LCAxKTsKIH0KIAogCkBAIC05MDQsNiArOTAwLDEzIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVyciA9IHNvY2stPm9wcy0+aW9jdGwoc29jaywgY21kLCBhcmcpOworCisJCQkvKgorCQkJICogSWYgdGhpcyBpb2N0bCBpcyB1bmtub3duIHRyeSB0byBoYW5kIGl0IGRvd24KKwkJCSAqIHRvIHRoZSBOSUMgZHJpdmVyLgorCQkJICovCisJCQlpZiAoZXJyID09IC1FTk9JT0NUTENNRCkKKwkJCQllcnIgPSBkZXZfaW9jdGwoY21kLCBhcmdwKTsKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gZXJyOwpAQCAtMjAzNiw3ICsyMDM5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2luaXQgc29ja19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzb2NrX2luaXQodm9pZCkKIHsKIAkvKgogCSAqCUluaXRpYWxpemUgc29jayBTTEFCIGNhY2hlLgpAQCAtMjA0NCwxMiArMjA0NywxMCBAQAogCSAKIAlza19pbml0KCk7CiAKLSNpZmRlZiBTTEFCX1NLQgogCS8qCiAJICoJSW5pdGlhbGl6ZSBza2J1ZmYgU0xBQiBjYWNoZSAKIAkgKi8KIAlza2JfaW5pdCgpOwotI2VuZGlmCiAKIAkvKgogCSAqCUluaXRpYWxpemUgdGhlIHByb3RvY29scyBtb2R1bGUuIApAQCAtMjA1OCwxNSArMjA1OSwxOSBAQAogCWluaXRfaW5vZGVjYWNoZSgpOwogCXJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnNvY2tfZnNfdHlwZSk7CiAJc29ja19tbnQgPSBrZXJuX21vdW50KCZzb2NrX2ZzX3R5cGUpOwotCS8qIFRoZSByZWFsIHByb3RvY29sIGluaXRpYWxpemF0aW9uIGlzIHBlcmZvcm1lZCB3aGVuCi0JICogIGRvX2luaXRjYWxscyBpcyBydW4uICAKKworCS8qIFRoZSByZWFsIHByb3RvY29sIGluaXRpYWxpemF0aW9uIGlzIHBlcmZvcm1lZCBpbiBsYXRlciBpbml0Y2FsbHMuCiAJICovCiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAJbmV0ZmlsdGVyX2luaXQoKTsKICNlbmRpZgorCisJcmV0dXJuIDA7CiB9CiAKK2NvcmVfaW5pdGNhbGwoc29ja19pbml0KTsJLyogZWFybHkgaW5pdGNhbGwgKi8KKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiB2b2lkIHNvY2tldF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggYzZhNTE5MS4uZDY4ZWJhNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTc1OCw3ICs3NTgsNyBAQAogCXN0cnVjdCBzdmNfc2Vydgkqc2VydiA9IHN2c2stPnNrX3NlcnZlcjsKIAlzdHJ1Y3Qgc29ja2V0CSpzb2NrID0gc3Zzay0+c2tfc29jazsKIAlzdHJ1Y3Qgc29ja2V0CSpuZXdzb2NrOwotCXN0cnVjdCBwcm90b19vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7CiAJc3RydWN0IHN2Y19zb2NrCSpuZXdzdnNrOwogCWludAkJZXJyLCBzbGVuOwogCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggYWNjNzNiYS4uNWY2YWU3OSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMTIxLDcgKzEyMSw3IEBACiBpbnQgc3lzY3RsX3VuaXhfbWF4X2RncmFtX3FsZW4gPSAxMDsKIAogc3RydWN0IGhsaXN0X2hlYWQgdW5peF9zb2NrZXRfdGFibGVbVU5JWF9IQVNIX1NJWkUgKyAxXTsKLURFRklORV9SV0xPQ0sodW5peF90YWJsZV9sb2NrKTsKK0RFRklORV9TUElOTE9DSyh1bml4X3RhYmxlX2xvY2spOwogc3RhdGljIGF0b21pY190IHVuaXhfbnJfc29ja3MgPSBBVE9NSUNfSU5JVCgwKTsKIAogI2RlZmluZSB1bml4X3NvY2tldHNfdW5ib3VuZAkoJnVuaXhfc29ja2V0X3RhYmxlW1VOSVhfSEFTSF9TSVpFXSkKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAvKgogICogIFNNUCBsb2NraW5nIHN0cmF0ZWd5OgotICogICAgaGFzaCB0YWJsZSBpcyBwcm90ZWN0ZWQgd2l0aCByd2xvY2sgdW5peF90YWJsZV9sb2NrCisgKiAgICBoYXNoIHRhYmxlIGlzIHByb3RlY3RlZCB3aXRoIHNwaW5sb2NrIHVuaXhfdGFibGVfbG9jawogICogICAgZWFjaCBzb2NrZXQgc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHNlcGFyYXRlIHJ3bG9jay4KICAqLwogCkBAIC0yMTQsMTYgKzIxNCwxNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5peF9yZW1vdmVfc29ja2V0KHN0cnVjdCBzb2NrICpzaykKIHsKLQl3cml0ZV9sb2NrKCZ1bml4X3RhYmxlX2xvY2spOworCXNwaW5fbG9jaygmdW5peF90YWJsZV9sb2NrKTsKIAlfX3VuaXhfcmVtb3ZlX3NvY2tldChzayk7Ci0Jd3JpdGVfdW5sb2NrKCZ1bml4X3RhYmxlX2xvY2spOworCXNwaW5fdW5sb2NrKCZ1bml4X3RhYmxlX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5peF9pbnNlcnRfc29ja2V0KHN0cnVjdCBobGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jd3JpdGVfbG9jaygmdW5peF90YWJsZV9sb2NrKTsKKwlzcGluX2xvY2soJnVuaXhfdGFibGVfbG9jayk7CiAJX191bml4X2luc2VydF9zb2NrZXQobGlzdCwgc2spOwotCXdyaXRlX3VubG9jaygmdW5peF90YWJsZV9sb2NrKTsKKwlzcGluX3VubG9jaygmdW5peF90YWJsZV9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NrICpfX3VuaXhfZmluZF9zb2NrZXRfYnluYW1lKHN0cnVjdCBzb2NrYWRkcl91biAqc3VubmFtZSwKQEAgLTI1MCwxMSArMjUwLDExIEBACiB7CiAJc3RydWN0IHNvY2sgKnM7CiAKLQlyZWFkX2xvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl9sb2NrKCZ1bml4X3RhYmxlX2xvY2spOwogCXMgPSBfX3VuaXhfZmluZF9zb2NrZXRfYnluYW1lKHN1bm5hbWUsIGxlbiwgdHlwZSwgaGFzaCk7CiAJaWYgKHMpCiAJCXNvY2tfaG9sZChzKTsKLQlyZWFkX3VubG9jaygmdW5peF90YWJsZV9sb2NrKTsKKwlzcGluX3VubG9jaygmdW5peF90YWJsZV9sb2NrKTsKIAlyZXR1cm4gczsKIH0KIApAQCAtMjYzLDcgKzI2Myw3IEBACiAJc3RydWN0IHNvY2sgKnM7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKLQlyZWFkX2xvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl9sb2NrKCZ1bml4X3RhYmxlX2xvY2spOwogCXNrX2Zvcl9lYWNoKHMsIG5vZGUsCiAJCSAgICAmdW5peF9zb2NrZXRfdGFibGVbaS0+aV9pbm8gJiAoVU5JWF9IQVNIX1NJWkUgLSAxKV0pIHsKIAkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gdW5peF9zayhzKS0+ZGVudHJ5OwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJfQogCXMgPSBOVUxMOwogZm91bmQ6Ci0JcmVhZF91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiAJcmV0dXJuIHM7CiB9CiAKQEAgLTQ3Myw3ICs0NzMsNyBAQAogc3RhdGljIGludCB1bml4X3NlcXBhY2tldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqLCBzdHJ1Y3Qgc29ja2V0ICosCiAJCQkJICBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc3RyZWFtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc3RyZWFtX29wcyA9IHsKIAkuZmFtaWx5ID0JUEZfVU5JWCwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CXVuaXhfcmVsZWFzZSwKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCS5zZW5kcGFnZSA9CXNvY2tfbm9fc2VuZHBhZ2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyB1bml4X2RncmFtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfZGdyYW1fb3BzID0gewogCS5mYW1pbHkgPQlQRl9VTklYLAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWxlYXNlID0JdW5peF9yZWxlYXNlLApAQCAtNTE1LDcgKzUxNSw3IEBACiAJLnNlbmRwYWdlID0Jc29ja19ub19zZW5kcGFnZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHVuaXhfc2VxcGFja2V0X29wcyA9IHsKIAkuZmFtaWx5ID0JUEZfVU5JWCwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CXVuaXhfcmVsZWFzZSwKQEAgLTU2NCw3ICs1NjQsNyBAQAogCXUJICA9IHVuaXhfc2soc2spOwogCXUtPmRlbnRyeSA9IE5VTEw7CiAJdS0+bW50CSAgPSBOVUxMOwotCXJ3bG9ja19pbml0KCZ1LT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmdS0+bG9jayk7CiAJYXRvbWljX3NldCgmdS0+aW5mbGlnaHQsIHNvY2sgPyAwIDogLTEpOwogCWluaXRfTVVURVgoJnUtPnJlYWRzZW0pOyAvKiBzaW5nbGUgdGFzayByZWFkaW5nIGxvY2sgKi8KIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1LT5wZWVyX3dhaXQpOwpAQCAtNjQyLDEyICs2NDIsMTIgQEAKIAlhZGRyLT5sZW4gPSBzcHJpbnRmKGFkZHItPm5hbWUtPnN1bl9wYXRoKzEsICIlMDV4Iiwgb3JkZXJudW0pICsgMSArIHNpemVvZihzaG9ydCk7CiAJYWRkci0+aGFzaCA9IHVuaXhfaGFzaF9mb2xkKGNzdW1fcGFydGlhbCgodm9pZCopYWRkci0+bmFtZSwgYWRkci0+bGVuLCAwKSk7CiAKLQl3cml0ZV9sb2NrKCZ1bml4X3RhYmxlX2xvY2spOworCXNwaW5fbG9jaygmdW5peF90YWJsZV9sb2NrKTsKIAlvcmRlcm51bSA9IChvcmRlcm51bSsxKSYweEZGRkZGOwogCiAJaWYgKF9fdW5peF9maW5kX3NvY2tldF9ieW5hbWUoYWRkci0+bmFtZSwgYWRkci0+bGVuLCBzb2NrLT50eXBlLAogCQkJCSAgICAgIGFkZHItPmhhc2gpKSB7Ci0JCXdyaXRlX3VubG9jaygmdW5peF90YWJsZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiAJCS8qIFNhbml0eSB5aWVsZC4gSXQgaXMgdW51c3VhbCBjYXNlLCBidXQgeWV0Li4uICovCiAJCWlmICghKG9yZGVybnVtJjB4RkYpKQogCQkJeWllbGQoKTsKQEAgLTY1OCw3ICs2NTgsNyBAQAogCV9fdW5peF9yZW1vdmVfc29ja2V0KHNrKTsKIAl1LT5hZGRyID0gYWRkcjsKIAlfX3VuaXhfaW5zZXJ0X3NvY2tldCgmdW5peF9zb2NrZXRfdGFibGVbYWRkci0+aGFzaF0sIHNrKTsKLQl3cml0ZV91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiAJZXJyID0gMDsKIAogb3V0Ogl1cCgmdS0+cmVhZHNlbSk7CkBAIC03OTEsNyArNzkxLDcgQEAKIAkJYWRkci0+aGFzaCA9IFVOSVhfSEFTSF9TSVpFOwogCX0KIAotCXdyaXRlX2xvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl9sb2NrKCZ1bml4X3RhYmxlX2xvY2spOwogCiAJaWYgKCFzdW5hZGRyLT5zdW5fcGF0aFswXSkgewogCQllcnIgPSAtRUFERFJJTlVTRTsKQEAgLTgxNCw3ICs4MTQsNyBAQAogCV9fdW5peF9pbnNlcnRfc29ja2V0KGxpc3QsIHNrKTsKIAogb3V0X3VubG9jazoKLQl3cml0ZV91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiBvdXRfdXA6CiAJdXAoJnUtPnJlYWRzZW0pOwogb3V0OgpAQCAtMTA2MywxMCArMTA2MywxMiBAQAogCS8qIFNldCBjcmVkZW50aWFscyAqLwogCXNrLT5za19wZWVyY3JlZCA9IG90aGVyLT5za19wZWVyY3JlZDsKIAotCXNvY2tfaG9sZChuZXdzayk7Ci0JdW5peF9wZWVyKHNrKQk9IG5ld3NrOwogCXNvY2stPnN0YXRlCT0gU1NfQ09OTkVDVEVEOwogCXNrLT5za19zdGF0ZQk9IFRDUF9FU1RBQkxJU0hFRDsKKwlzb2NrX2hvbGQobmV3c2spOworCisJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CS8qIHNvY2tfaG9sZCgpIGRvZXMgYW4gYXRvbWljX2luYygpICovCisJdW5peF9wZWVyKHNrKQk9IG5ld3NrOwogCiAJdW5peF9zdGF0ZV93dW5sb2NrKHNrKTsKIApAQCAtMTQxNCw3ICsxNDE2LDcgQEAKIAl9IGVsc2UgewogCQlzdW5hZGRyID0gTlVMTDsKIAkJZXJyID0gLUVOT1RDT05OOwotCQlvdGhlciA9IHVuaXhfcGVlcl9nZXQoc2spOworCQlvdGhlciA9IHVuaXhfcGVlcihzayk7CiAJCWlmICghb3RoZXIpCiAJCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMTQ3Niw3ICsxNDc4LDYgQEAKIAkJb3RoZXItPnNrX2RhdGFfcmVhZHkob3RoZXIsIHNpemUpOwogCQlzZW50Kz1zaXplOwogCX0KLQlzb2NrX3B1dChvdGhlcik7CiAKIAlzY21fZGVzdHJveShzaW9jYi0+c2NtKTsKIAlzaW9jYi0+c2NtID0gTlVMTDsKQEAgLTE0OTEsOCArMTQ5Miw2IEBACiAJCXNlbmRfc2lnKFNJR1BJUEUsY3VycmVudCwwKTsKIAllcnIgPSAtRVBJUEU7CiBvdXRfZXJyOgotICAgICAgICBpZiAob3RoZXIpCi0JCXNvY2tfcHV0KG90aGVyKTsKIAlzY21fZGVzdHJveShzaW9jYi0+c2NtKTsKIAlzaW9jYi0+c2NtID0gTlVMTDsKIAlyZXR1cm4gc2VudCA/IDogZXJyOwpAQCAtMTg2MCw3ICsxODU5LDcgQEAKIAkJfQogCiAJCWRlZmF1bHQ6Ci0JCQllcnIgPSBkZXZfaW9jdGwoY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQkJZXJyID0gLUVOT0lPQ1RMQ01EOwogCQkJYnJlYWs7CiAJfQogCXJldHVybiBlcnI7CkBAIC0xOTE3LDcgKzE5MTYsNyBAQAogCiBzdGF0aWMgdm9pZCAqdW5peF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCXJlYWRfbG9jaygmdW5peF90YWJsZV9sb2NrKTsKKwlzcGluX2xvY2soJnVuaXhfdGFibGVfbG9jayk7CiAJcmV0dXJuICpwb3MgPyB1bml4X3NlcV9pZHgoc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkgOiAoKHZvaWQgKikgMSk7CiB9CiAKQEAgLTE5MzIsNyArMTkzMSw3IEBACiAKIHN0YXRpYyB2b2lkIHVuaXhfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0JcmVhZF91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdW5peF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKZGlmZiAtLWdpdCBhL25ldC91bml4L2dhcmJhZ2UuYyBiL25ldC91bml4L2dhcmJhZ2UuYwppbmRleCA2ZmZjNjRlLi40MTE4MDJiIDEwMDY0NAotLS0gYS9uZXQvdW5peC9nYXJiYWdlLmMKKysrIGIvbmV0L3VuaXgvZ2FyYmFnZS5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAlpZiAoZG93bl90cnlsb2NrKCZ1bml4X2djX3NlbSkpCiAJCXJldHVybjsKIAotCXJlYWRfbG9jaygmdW5peF90YWJsZV9sb2NrKTsKKwlzcGluX2xvY2soJnVuaXhfdGFibGVfbG9jayk7CiAKIAlmb3JhbGxfdW5peF9zb2NrZXRzKGksIHMpCiAJewpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCX0KIAkJdS0+Z2NfdHJlZSA9IEdDX09SUEhBTjsKIAl9Ci0JcmVhZF91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiAKIAkvKgogCSAqCUhlcmUgd2UgYXJlLiBIaXRsaXN0IGlzIGZpbGxlZC4gRGllLgpkaWZmIC0tZ2l0IGEvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMgYi9uZXQvd2Fucm91dGVyL2FmX3dhbnBpcGUuYwppbmRleCA1OWZlYzU5Li43YTQzYWU0IDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL2FmX3dhbnBpcGUuYworKysgYi9uZXQvd2Fucm91dGVyL2FmX3dhbnBpcGUuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAjZW5kaWYKIAogc3RhdGljIGludCBza19jb3VudDsKLWV4dGVybiBzdHJ1Y3QgcHJvdG9fb3BzIHdhbnBpcGVfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgd2FucGlwZV9vcHM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2ZyZWVfY3JpdGljYWw7CiAKIHN0YXRpYyB2b2lkIHdhbnBpcGVfdW5saW5rX2RyaXZlcihzdHJ1Y3Qgc29jayAqc2spOwpAQCAtMTgzOSw3ICsxODM5LDcgQEAKICNlbmRpZgogCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gZGV2X2lvY3RsKGNtZCwodm9pZCBfX3VzZXIgKikgYXJnKTsKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQogCS8qTk9UUkVBQ0hFRCovCiB9CkBAIC0yNTQ2LDcgKzI1NDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcHJvdG9fb3BzIHdhbnBpcGVfb3BzID0geworY29uc3Qgc3RydWN0IHByb3RvX29wcyB3YW5waXBlX29wcyA9IHsKIAkuZmFtaWx5ID0gCVBGX1dBTlBJUEUsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPSAJd2FucGlwZV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L3gyNS9hZl94MjUuYyBiL25ldC94MjUvYWZfeDI1LmMKaW5kZXggMDIwZDczYy4uMTY0NTljNyAxMDA2NDQKLS0tIGEvbmV0L3gyNS9hZl94MjUuYworKysgYi9uZXQveDI1L2FmX3gyNS5jCkBAIC02NCw3ICs2NCw3IEBACiBITElTVF9IRUFEKHgyNV9saXN0KTsKIERFRklORV9SV0xPQ0soeDI1X2xpc3RfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHgyNV9wcm90b19vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4MjVfcHJvdG9fb3BzOwogCiBzdGF0aWMgc3RydWN0IHgyNV9hZGRyZXNzIG51bGxfeDI1X2FkZHJlc3MgPSB7IiAgICAgICAgICAgICAgICJ9OwogCkBAIC0xMzc4LDcgKzEzNzgsNyBAQAogCQl9CiAKICAJCWRlZmF1bHQ6Ci0JCQlyYyA9IGRldl9pb2N0bChjbWQsIGFyZ3ApOworCQkJcmMgPSAtRU5PSU9DVExDTUQ7CiAJCQlicmVhazsKIAl9CiAKQEAgLTEzOTEsNyArMTM5MSw3IEBACiAJLm93bmVyCT0JVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoeDI1X3Byb3RvX29wcykgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBTT0NLT1BTX1dSQVBQRUQoeDI1X3Byb3RvX29wcykgPSB7CiAJLmZhbWlseSA9CUFGX1gyNSwKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVsZWFzZSA9CXgyNV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggZDE5ZTI3NC4uNjRhNDQ3MyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiAJWU9TSElGVUpJIEhpZGVha2kKICAqIAkJU3BsaXQgdXAgYWYtc3BlY2lmaWMgcG9ydGlvbgogICoJRGVyZWsgQXRraW5zIDxkZXJla0BpaHRmcC5jb20+CQlBZGQgdGhlIHBvc3RfaW5wdXQgcHJvY2Vzc29yCi0gKiAJCisgKgogICovCiAKICNpbmNsdWRlIDxhc20vYnVnLmg+CkBAIC0yNTYsNiArMjU2LDcgQEAKIAlpZiAoZGVsX3RpbWVyKCZwb2xpY3ktPnRpbWVyKSkKIAkJQlVHKCk7CiAKKwlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKHBvbGljeSk7CiAJa2ZyZWUocG9saWN5KTsKIH0KIEVYUE9SVF9TWU1CT0woX194ZnJtX3BvbGljeV9kZXN0cm95KTsKQEAgLTM1MCw3ICszNTEsOCBAQAogCiAJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CiAJZm9yIChwID0gJnhmcm1fcG9saWN5X2xpc3RbZGlyXTsgKHBvbD0qcCkhPU5VTEw7KSB7Ci0JCWlmICghZGVscG9sICYmIG1lbWNtcCgmcG9saWN5LT5zZWxlY3RvciwgJnBvbC0+c2VsZWN0b3IsIHNpemVvZihwb2wtPnNlbGVjdG9yKSkgPT0gMCkgeworCQlpZiAoIWRlbHBvbCAmJiBtZW1jbXAoJnBvbGljeS0+c2VsZWN0b3IsICZwb2wtPnNlbGVjdG9yLCBzaXplb2YocG9sLT5zZWxlY3RvcikpID09IDAgJiYKKwkJICAgIHhmcm1fc2VjX2N0eF9tYXRjaChwb2wtPnNlY3VyaXR5LCBwb2xpY3ktPnNlY3VyaXR5KSkgewogCQkJaWYgKGV4Y2wpIHsKIAkJCQl3cml0ZV91bmxvY2tfYmgoJnhmcm1fcG9saWN5X2xvY2spOwogCQkJCXJldHVybiAtRUVYSVNUOwpAQCAtNDE2LDE0ICs0MTgsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfaW5zZXJ0KTsKIAotc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9ieXNlbChpbnQgZGlyLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLAotCQkJCSAgICAgIGludCBkZWxldGUpCitzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5c2VsX2N0eChpbnQgZGlyLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLAorCQkJCQkgIHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCwgaW50IGRlbGV0ZSkKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKipwOwogCiAJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CiAJZm9yIChwID0gJnhmcm1fcG9saWN5X2xpc3RbZGlyXTsgKHBvbD0qcCkhPU5VTEw7IHAgPSAmcG9sLT5uZXh0KSB7Ci0JCWlmIChtZW1jbXAoc2VsLCAmcG9sLT5zZWxlY3Rvciwgc2l6ZW9mKCpzZWwpKSA9PSAwKSB7CisJCWlmICgobWVtY21wKHNlbCwgJnBvbC0+c2VsZWN0b3IsIHNpemVvZigqc2VsKSkgPT0gMCkgJiYKKwkJICAgICh4ZnJtX3NlY19jdHhfbWF0Y2goY3R4LCBwb2wtPnNlY3VyaXR5KSkpIHsKIAkJCXhmcm1fcG9sX2hvbGQocG9sKTsKIAkJCWlmIChkZWxldGUpCiAJCQkJKnAgPSBwb2wtPm5leHQ7CkBAIC00MzgsNyArNDQxLDcgQEAKIAl9CiAJcmV0dXJuIHBvbDsKIH0KLUVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYnlzZWwpOworRVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9ieXNlbF9jdHgpOwogCiBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5aWQoaW50IGRpciwgdTMyIGlkLCBpbnQgZGVsZXRlKQogewpAQCAtNTE5LDcgKzUyMiw3IEBACiAKIC8qIEZpbmQgcG9saWN5IHRvIGFwcGx5IHRvIHRoaXMgZmxvdy4gKi8KIAotc3RhdGljIHZvaWQgeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBmbG93aSAqZmwsIHUxNiBmYW1pbHksIHU4IGRpciwKK3N0YXRpYyB2b2lkIHhmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgZmxvd2kgKmZsLCB1MzIgc2tfc2lkLCB1MTYgZmFtaWx5LCB1OCBkaXIsCiAJCQkgICAgICAgdm9pZCAqKm9ianAsIGF0b21pY190ICoqb2JqX3JlZnApCiB7CiAJc3RydWN0IHhmcm1fcG9saWN5ICpwb2w7CkBAIC01MzMsOSArNTM2LDEyIEBACiAJCQljb250aW51ZTsKIAogCQltYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCwgZmFtaWx5KTsKKwogCQlpZiAobWF0Y2gpIHsKLQkJCXhmcm1fcG9sX2hvbGQocG9sKTsKLQkJCWJyZWFrOworIAkJCWlmICghc2VjdXJpdHlfeGZybV9wb2xpY3lfbG9va3VwKHBvbCwgc2tfc2lkLCBkaXIpKSB7CisJCQkJeGZybV9wb2xfaG9sZChwb2wpOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCXJlYWRfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKQEAgLTU0MywxNSArNTQ5LDM3IEBACiAJCSpvYmpfcmVmcCA9ICZwb2wtPnJlZmNudDsKIH0KIAotc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9za19wb2xpY3lfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgaW50IGRpciwgc3RydWN0IGZsb3dpICpmbCkKK3N0YXRpYyBpbmxpbmUgaW50IHBvbGljeV90b19mbG93X2RpcihpbnQgZGlyKQoreworCWlmIChYRlJNX1BPTElDWV9JTiA9PSBGTE9XX0RJUl9JTiAmJgorIAkgICAgWEZSTV9QT0xJQ1lfT1VUID09IEZMT1dfRElSX09VVCAmJgorIAkgICAgWEZSTV9QT0xJQ1lfRldEID09IEZMT1dfRElSX0ZXRCkKKyAJCXJldHVybiBkaXI7CisgCXN3aXRjaCAoZGlyKSB7CisgCWRlZmF1bHQ6CisgCWNhc2UgWEZSTV9QT0xJQ1lfSU46CisgCQlyZXR1cm4gRkxPV19ESVJfSU47CisgCWNhc2UgWEZSTV9QT0xJQ1lfT1VUOgorIAkJcmV0dXJuIEZMT1dfRElSX09VVDsKKyAJY2FzZSBYRlJNX1BPTElDWV9GV0Q6CisgCQlyZXR1cm4gRkxPV19ESVJfRldEOworCX07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fc2tfcG9saWN5X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBmbG93aSAqZmwsIHUzMiBza19zaWQpCiB7CiAJc3RydWN0IHhmcm1fcG9saWN5ICpwb2w7CiAKIAlyZWFkX2xvY2tfYmgoJnhmcm1fcG9saWN5X2xvY2spOwogCWlmICgocG9sID0gc2stPnNrX3BvbGljeVtkaXJdKSAhPSBOVUxMKSB7Ci0JCWludCBtYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goJnBvbC0+c2VsZWN0b3IsIGZsLAorIAkJaW50IG1hdGNoID0geGZybV9zZWxlY3Rvcl9tYXRjaCgmcG9sLT5zZWxlY3RvciwgZmwsCiAJCQkJCQlzay0+c2tfZmFtaWx5KTsKKyAJCWludCBlcnIgPSAwOworCiAJCWlmIChtYXRjaCkKKwkJICBlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLCBza19zaWQsIHBvbGljeV90b19mbG93X2RpcihkaXIpKTsKKworIAkJaWYgKG1hdGNoICYmICFlcnIpCiAJCQl4ZnJtX3BvbF9ob2xkKHBvbCk7CiAJCWVsc2UKIAkJCXBvbCA9IE5VTEw7CkBAIC02MjQsNiArNjUyLDEwIEBACiAKIAlpZiAobmV3cCkgewogCQluZXdwLT5zZWxlY3RvciA9IG9sZC0+c2VsZWN0b3I7CisJCWlmIChzZWN1cml0eV94ZnJtX3BvbGljeV9jbG9uZShvbGQsIG5ld3ApKSB7CisJCQlrZnJlZShuZXdwKTsKKwkJCXJldHVybiBOVUxMOyAgLyogRU5PTUVNICovCisJCX0KIAkJbmV3cC0+bGZ0ID0gb2xkLT5sZnQ7CiAJCW5ld3AtPmN1cmxmdCA9IG9sZC0+Y3VybGZ0OwogCQluZXdwLT5hY3Rpb24gPSBvbGQtPmFjdGlvbjsKQEAgLTczNSwyMiArNzY3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwb2xpY3lfdG9fZmxvd19kaXIoaW50IGRpcikKLXsKLQlpZiAoWEZSTV9QT0xJQ1lfSU4gPT0gRkxPV19ESVJfSU4gJiYKLQkgICAgWEZSTV9QT0xJQ1lfT1VUID09IEZMT1dfRElSX09VVCAmJgotCSAgICBYRlJNX1BPTElDWV9GV0QgPT0gRkxPV19ESVJfRldEKQotCQlyZXR1cm4gZGlyOwotCXN3aXRjaCAoZGlyKSB7Ci0JZGVmYXVsdDoKLQljYXNlIFhGUk1fUE9MSUNZX0lOOgotCQlyZXR1cm4gRkxPV19ESVJfSU47Ci0JY2FzZSBYRlJNX1BPTElDWV9PVVQ6Ci0JCXJldHVybiBGTE9XX0RJUl9PVVQ7Ci0JY2FzZSBYRlJNX1BPTElDWV9GV0Q6Ci0JCXJldHVybiBGTE9XX0RJUl9GV0Q7Ci0JfTsKLX0KIAogc3RhdGljIGludCBzdGFsZV9idW5kbGUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIApAQCAtNzY5LDE5ICs3ODUsMjAgQEAKIAlpbnQgZXJyOwogCXUzMiBnZW5pZDsKIAl1MTYgZmFtaWx5ID0gZHN0X29yaWctPm9wcy0+ZmFtaWx5OworCXU4IGRpciA9IHBvbGljeV90b19mbG93X2RpcihYRlJNX1BPTElDWV9PVVQpOworCXUzMiBza19zaWQgPSBzZWN1cml0eV9za19zaWQoc2ssIGZsLCBkaXIpOwogcmVzdGFydDoKIAlnZW5pZCA9IGF0b21pY19yZWFkKCZmbG93X2NhY2hlX2dlbmlkKTsKIAlwb2xpY3kgPSBOVUxMOwogCWlmIChzayAmJiBzay0+c2tfcG9saWN5WzFdKQotCQlwb2xpY3kgPSB4ZnJtX3NrX3BvbGljeV9sb29rdXAoc2ssIFhGUk1fUE9MSUNZX09VVCwgZmwpOworCQlwb2xpY3kgPSB4ZnJtX3NrX3BvbGljeV9sb29rdXAoc2ssIFhGUk1fUE9MSUNZX09VVCwgZmwsIHNrX3NpZCk7CiAKIAlpZiAoIXBvbGljeSkgewogCQkvKiBUbyBhY2NlbGVyYXRlIGEgYml0Li4uICAqLwogCQlpZiAoKGRzdF9vcmlnLT5mbGFncyAmIERTVF9OT1hGUk0pIHx8ICF4ZnJtX3BvbGljeV9saXN0W1hGUk1fUE9MSUNZX09VVF0pCiAJCQlyZXR1cm4gMDsKIAotCQlwb2xpY3kgPSBmbG93X2NhY2hlX2xvb2t1cChmbCwgZmFtaWx5LAotCQkJCQkgICBwb2xpY3lfdG9fZmxvd19kaXIoWEZSTV9QT0xJQ1lfT1VUKSwKKwkJcG9saWN5ID0gZmxvd19jYWNoZV9sb29rdXAoZmwsIHNrX3NpZCwgZmFtaWx5LCBkaXIsCiAJCQkJCSAgIHhmcm1fcG9saWN5X2xvb2t1cCk7CiAJfQogCkBAIC05NjIsMTYgKzk3OSwyMCBAQAogewogCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sOwogCXN0cnVjdCBmbG93aSBmbDsKKwl1OCBmbF9kaXIgPSBwb2xpY3lfdG9fZmxvd19kaXIoZGlyKTsKKwl1MzIgc2tfc2lkOwogCiAJaWYgKF9kZWNvZGVfc2Vzc2lvbihza2IsICZmbCwgZmFtaWx5KSA8IDApCiAJCXJldHVybiAwOwogCisJc2tfc2lkID0gc2VjdXJpdHlfc2tfc2lkKHNrLCAmZmwsIGZsX2Rpcik7CisKIAkvKiBGaXJzdCwgY2hlY2sgdXNlZCBTQSBhZ2FpbnN0IHRoZWlyIHNlbGVjdG9ycy4gKi8KIAlpZiAoc2tiLT5zcCkgewogCQlpbnQgaTsKIAogCQlmb3IgKGk9c2tiLT5zcC0+bGVuLTE7IGk+PTA7IGktLSkgewotCQkgIHN0cnVjdCBzZWNfZGVjYXBfc3RhdGUgKnh2ZWMgPSAmKHNrYi0+c3AtPnhbaV0pOworCQkJc3RydWN0IHNlY19kZWNhcF9zdGF0ZSAqeHZlYyA9ICYoc2tiLT5zcC0+eFtpXSk7CiAJCQlpZiAoIXhmcm1fc2VsZWN0b3JfbWF0Y2goJnh2ZWMtPnh2ZWMtPnNlbCwgJmZsLCBmYW1pbHkpKQogCQkJCXJldHVybiAwOwogCkBAIC05ODYsMTEgKzEwMDcsMTAgQEAKIAogCXBvbCA9IE5VTEw7CiAJaWYgKHNrICYmIHNrLT5za19wb2xpY3lbZGlyXSkKLQkJcG9sID0geGZybV9za19wb2xpY3lfbG9va3VwKHNrLCBkaXIsICZmbCk7CisJCXBvbCA9IHhmcm1fc2tfcG9saWN5X2xvb2t1cChzaywgZGlyLCAmZmwsIHNrX3NpZCk7CiAKIAlpZiAoIXBvbCkKLQkJcG9sID0gZmxvd19jYWNoZV9sb29rdXAoJmZsLCBmYW1pbHksCi0JCQkJCXBvbGljeV90b19mbG93X2RpcihkaXIpLAorCQlwb2wgPSBmbG93X2NhY2hlX2xvb2t1cCgmZmwsIHNrX3NpZCwgZmFtaWx5LCBmbF9kaXIsCiAJCQkJCXhmcm1fcG9saWN5X2xvb2t1cCk7CiAKIAlpZiAoIXBvbCkKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCA0NzllZmZjLi5lMTJkMGJlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiAJCVNwbGl0IHVwIGFmLXNwZWNpZmljIGZ1bmN0aW9ucwogICoJRGVyZWsgQXRraW5zIDxkZXJla0BpaHRmcC5jb20+CiAgKgkJQWRkIFVEUCBFbmNhcHN1bGF0aW9uCi0gKiAJCisgKgogICovCiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTcwLDYgKzcwLDcgQEAKIAkJeC0+dHlwZS0+ZGVzdHJ1Y3Rvcih4KTsKIAkJeGZybV9wdXRfdHlwZSh4LT50eXBlKTsKIAl9CisJc2VjdXJpdHlfeGZybV9zdGF0ZV9mcmVlKHgpOwogCWtmcmVlKHgpOwogfQogCkBAIC0zNDMsNyArMzQ0LDggQEAKIAkJCSAgICAgIHNlbGVjdG9yLgogCQkJICovCiAJCQlpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkgewotCQkJCWlmICgheGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgZmFtaWx5KSkKKwkJCQlpZiAoIXhmcm1fc2VsZWN0b3JfbWF0Y2goJngtPnNlbCwgZmwsIGZhbWlseSkgfHwKKwkJCQkgICAgIXhmcm1fc2VjX2N0eF9tYXRjaChwb2wtPnNlY3VyaXR5LCB4LT5zZWN1cml0eSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmICghYmVzdCB8fAogCQkJCSAgICBiZXN0LT5rbS5keWluZyA+IHgtPmttLmR5aW5nIHx8CkBAIC0zNTQsNyArMzU2LDggQEAKIAkJCQlhY3F1aXJlX2luX3Byb2dyZXNzID0gMTsKIAkJCX0gZWxzZSBpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9FUlJPUiB8fAogCQkJCSAgIHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfRVhQSVJFRCkgewotCQkJCWlmICh4ZnJtX3NlbGVjdG9yX21hdGNoKCZ4LT5zZWwsIGZsLCBmYW1pbHkpKQorIAkJCQlpZiAoeGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgZmFtaWx5KSAmJgorCQkJCSAgICB4ZnJtX3NlY19jdHhfbWF0Y2gocG9sLT5zZWN1cml0eSwgeC0+c2VjdXJpdHkpKQogCQkJCQllcnJvciA9IC1FU1JDSDsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCAwY2RkOWEwLi45MmUyYjgwIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtNyw3ICs3LDcgQEAKICAqIAlLYXp1bm9yaSBNSVlBWkFXQSBAVVNBR0kKICAqIAlLdW5paGlybyBJc2hpZ3VybyA8a3VuaWhpcm9AaXBpbmZ1c2lvbi5jb20+CiAgKiAJCUlQdjYgc3VwcG9ydAotICogCQorICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC04OCw2ICs4OCwzNCBAQAogCXJldHVybiAwOwogfQogCisKK3N0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9zZWNfY3R4X2xlbihzdHJ1Y3QgcnRhdHRyICoqeGZybWEpCit7CisJc3RydWN0IHJ0YXR0ciAqcnQgPSB4ZnJtYVtYRlJNQV9TRUNfQ1RYIC0gMV07CisJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4OworCWludCBsZW4gPSAwOworCisJaWYgKCFydCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocnQtPnJ0YV9sZW4gPCBzaXplb2YoKnVjdHgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVjdHggPSBSVEFfREFUQShydCk7CisKKwlpZiAodWN0eC0+Y3R4X2xlbiA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsZW4gKz0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCk7CisJbGVuICs9IHVjdHgtPmN0eF9sZW47CisKKwlpZiAodWN0eC0+bGVuICE9IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworCiBzdGF0aWMgaW50IHZlcmlmeV9uZXdzYV9pbmZvKHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwLAogCQkJICAgICBzdHJ1Y3QgcnRhdHRyICoqeGZybWEpCiB7CkBAIC0xNDUsNiArMTczLDggQEAKIAkJZ290byBvdXQ7CiAJaWYgKChlcnIgPSB2ZXJpZnlfZW5jYXBfdG1wbCh4ZnJtYSkpKQogCQlnb3RvIG91dDsKKwlpZiAoKGVyciA9IHZlcmlmeV9zZWNfY3R4X2xlbih4ZnJtYSkpKQorCQlnb3RvIG91dDsKIAogCWVyciA9IC1FSU5WQUw7CiAJc3dpdGNoIChwLT5tb2RlKSB7CkBAIC0yMDksNiArMjM5LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIGlubGluZSBpbnQgeGZybV91c2VyX3NlY19jdHhfc2l6ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQoreworCXN0cnVjdCB4ZnJtX3NlY19jdHggKnhmcm1fY3R4ID0geHAtPnNlY3VyaXR5OworCWludCBsZW4gPSAwOworCisJaWYgKHhmcm1fY3R4KSB7CisJCWxlbiArPSBzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4KTsKKwkJbGVuICs9IHhmcm1fY3R4LT5jdHhfbGVuOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGF0dGFjaF9zZWNfY3R4KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgcnRhdHRyICp1X2FyZykKK3sKKwlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHg7CisKKwlpZiAoIXVfYXJnKQorCQlyZXR1cm4gMDsKKworCXVjdHggPSBSVEFfREFUQSh1X2FyZyk7CisJcmV0dXJuIHNlY3VyaXR5X3hmcm1fc3RhdGVfYWxsb2MoeCwgdWN0eCk7Cit9CisKIHN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCkKIHsKIAltZW1jcHkoJngtPmlkLCAmcC0+aWQsIHNpemVvZih4LT5pZCkpOwpAQCAtMjUzLDYgKzMwNyw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAorCWlmICgoZXJyID0gYXR0YWNoX3NlY19jdHgoeCwgeGZybWFbWEZSTUFfU0VDX0NUWC0xXSkpKQorCQlnb3RvIGVycm9yOworCiAJeC0+a20uc2VxID0gcC0+c2VxOwogCiAJcmV0dXJuIHg7CkBAIC0yNzIsMTEgKzMyOSwxMSBAQAogCWludCBlcnI7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAKLQllcnIgPSB2ZXJpZnlfbmV3c2FfaW5mbyhwLCAoc3RydWN0IHJ0YXR0ciAqKikgeGZybWEpOworCWVyciA9IHZlcmlmeV9uZXdzYV9pbmZvKHAsIChzdHJ1Y3QgcnRhdHRyICoqKXhmcm1hKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JeCA9IHhmcm1fc3RhdGVfY29uc3RydWN0KHAsIChzdHJ1Y3QgcnRhdHRyICoqKSB4ZnJtYSwgJmVycik7CisJeCA9IHhmcm1fc3RhdGVfY29uc3RydWN0KHAsIChzdHJ1Y3QgcnRhdHRyICoqKXhmcm1hLCAmZXJyKTsKIAlpZiAoIXgpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM5MCw2ICs0NDcsMTkgQEAKIAlpZiAoeC0+ZW5jYXApCiAJCVJUQV9QVVQoc2tiLCBYRlJNQV9FTkNBUCwgc2l6ZW9mKCp4LT5lbmNhcCksIHgtPmVuY2FwKTsKIAorCWlmICh4LT5zZWN1cml0eSkgeworCQlpbnQgY3R4X3NpemUgPSBzaXplb2Yoc3RydWN0IHhmcm1fc2VjX2N0eCkgKworCQkJCXgtPnNlY3VyaXR5LT5jdHhfbGVuOworCQlzdHJ1Y3QgcnRhdHRyICpydCA9IF9fUlRBX1BVVChza2IsIFhGUk1BX1NFQ19DVFgsIGN0eF9zaXplKTsKKwkJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4ID0gUlRBX0RBVEEocnQpOworCisJCXVjdHgtPmV4dHR5cGUgPSBYRlJNQV9TRUNfQ1RYOworCQl1Y3R4LT5sZW4gPSBjdHhfc2l6ZTsKKwkJdWN0eC0+Y3R4X2RvaSA9IHgtPnNlY3VyaXR5LT5jdHhfZG9pOworCQl1Y3R4LT5jdHhfYWxnID0geC0+c2VjdXJpdHktPmN0eF9hbGc7CisJCXVjdHgtPmN0eF9sZW4gPSB4LT5zZWN1cml0eS0+Y3R4X2xlbjsKKwkJbWVtY3B5KHVjdHggKyAxLCB4LT5zZWN1cml0eS0+Y3R4X3N0ciwgeC0+c2VjdXJpdHktPmN0eF9sZW4pOworCX0KIAlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIGI7CiBvdXQ6CiAJc3AtPnRoaXNfaWR4Kys7CkBAIC02MDMsNiArNjczLDE4IEBACiAJcmV0dXJuIHZlcmlmeV9wb2xpY3lfZGlyKHAtPmRpcik7CiB9CiAKK3N0YXRpYyBpbnQgY29weV9mcm9tX3VzZXJfc2VjX2N0eChzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgc3RydWN0IHJ0YXR0ciAqKnhmcm1hKQoreworCXN0cnVjdCBydGF0dHIgKnJ0ID0geGZybWFbWEZSTUFfU0VDX0NUWC0xXTsKKwlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHg7CisKKwlpZiAoIXJ0KQorCQlyZXR1cm4gMDsKKworCXVjdHggPSBSVEFfREFUQShydCk7CisJcmV0dXJuIHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHBvbCwgdWN0eCk7Cit9CisKIHN0YXRpYyB2b2lkIGNvcHlfdGVtcGxhdGVzKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHN0cnVjdCB4ZnJtX3VzZXJfdG1wbCAqdXQsCiAJCQkgICBpbnQgbnIpCiB7CkBAIC02ODEsNyArNzYzLDEwIEBACiAJfQogCiAJY29weV9mcm9tX3VzZXJfcG9saWN5KHhwLCBwKTsKLQllcnIgPSBjb3B5X2Zyb21fdXNlcl90bXBsKHhwLCB4ZnJtYSk7CisKKwlpZiAoIShlcnIgPSBjb3B5X2Zyb21fdXNlcl90bXBsKHhwLCB4ZnJtYSkpKQorCQllcnIgPSBjb3B5X2Zyb21fdXNlcl9zZWNfY3R4KHhwLCB4ZnJtYSk7CisKIAlpZiAoZXJyKSB7CiAJCSplcnJwID0gZXJyOwogCQlrZnJlZSh4cCk7CkBAIC03MDIsOCArNzg3LDExIEBACiAJZXJyID0gdmVyaWZ5X25ld3BvbGljeV9pbmZvKHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisJZXJyID0gdmVyaWZ5X3NlY19jdHhfbGVuKChzdHJ1Y3QgcnRhdHRyICoqKXhmcm1hKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JeHAgPSB4ZnJtX3BvbGljeV9jb25zdHJ1Y3QocCwgKHN0cnVjdCBydGF0dHIgKiopIHhmcm1hLCAmZXJyKTsKKwl4cCA9IHhmcm1fcG9saWN5X2NvbnN0cnVjdChwLCAoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYSwgJmVycik7CiAJaWYgKCF4cCkKIAkJcmV0dXJuIGVycjsKIApAQCAtNzYxLDYgKzg0OSwyNyBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGludCBjb3B5X3RvX3VzZXJfc2VjX2N0eChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICh4cC0+c2VjdXJpdHkpIHsKKwkJaW50IGN0eF9zaXplID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3NlY19jdHgpICsKKwkJCQl4cC0+c2VjdXJpdHktPmN0eF9sZW47CisJCXN0cnVjdCBydGF0dHIgKnJ0ID0gX19SVEFfUFVUKHNrYiwgWEZSTUFfU0VDX0NUWCwgY3R4X3NpemUpOworCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHggPSBSVEFfREFUQShydCk7CisKKwkJdWN0eC0+ZXh0dHlwZSA9IFhGUk1BX1NFQ19DVFg7CisJCXVjdHgtPmxlbiA9IGN0eF9zaXplOworCQl1Y3R4LT5jdHhfZG9pID0geHAtPnNlY3VyaXR5LT5jdHhfZG9pOworCQl1Y3R4LT5jdHhfYWxnID0geHAtPnNlY3VyaXR5LT5jdHhfYWxnOworCQl1Y3R4LT5jdHhfbGVuID0geHAtPnNlY3VyaXR5LT5jdHhfbGVuOworCQltZW1jcHkodWN0eCArIDEsIHhwLT5zZWN1cml0eS0+Y3R4X3N0ciwgeHAtPnNlY3VyaXR5LT5jdHhfbGVuKTsKKwl9CisJcmV0dXJuIDA7CisKKyBydGF0dHJfZmFpbHVyZToKKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBpbnQgZHVtcF9vbmVfcG9saWN5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGludCBjb3VudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCB4ZnJtX2R1bXBfaW5mbyAqc3AgPSBwdHI7CkBAIC03ODIsNiArODkxLDggQEAKIAljb3B5X3RvX3VzZXJfcG9saWN5KHhwLCBwLCBkaXIpOwogCWlmIChjb3B5X3RvX3VzZXJfdG1wbCh4cCwgc2tiKSA8IDApCiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKKwlpZiAoY29weV90b191c2VyX3NlY19jdHgoeHAsIHNrYikpCisJCWdvdG8gbmxtc2dfZmFpbHVyZTsKIAogCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKIG91dDoKQEAgLTg1Miw4ICs5NjMsMjUgQEAKIAogCWlmIChwLT5pbmRleCkKIAkJeHAgPSB4ZnJtX3BvbGljeV9ieWlkKHAtPmRpciwgcC0+aW5kZXgsIGRlbGV0ZSk7Ci0JZWxzZQotCQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsKHAtPmRpciwgJnAtPnNlbCwgZGVsZXRlKTsKKwllbHNlIHsKKwkJc3RydWN0IHJ0YXR0ciAqKnJ0YXR0cnMgPSAoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYTsKKwkJc3RydWN0IHJ0YXR0ciAqcnQgPSBydGF0dHJzW1hGUk1BX1NFQ19DVFgtMV07CisJCXN0cnVjdCB4ZnJtX3BvbGljeSB0bXA7CisKKwkJZXJyID0gdmVyaWZ5X3NlY19jdHhfbGVuKHJ0YXR0cnMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHN0cnVjdCB4ZnJtX3BvbGljeSkpOworCQlpZiAocnQpIHsKKwkJCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqdWN0eCA9IFJUQV9EQVRBKHJ0KTsKKworCQkJaWYgKChlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9hbGxvYygmdG1wLCB1Y3R4KSkpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eChwLT5kaXIsICZwLT5zZWwsIHRtcC5zZWN1cml0eSwgZGVsZXRlKTsKKwkJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZSgmdG1wKTsKKwl9CiAJaWYgKHhwID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0xMjI0LDYgKzEzNTIsOCBAQAogCiAJaWYgKGNvcHlfdG9fdXNlcl90bXBsKHhwLCBza2IpIDwgMCkKIAkJZ290byBubG1zZ19mYWlsdXJlOworCWlmIChjb3B5X3RvX3VzZXJfc2VjX2N0eCh4cCwgc2tiKSkKKwkJZ290byBubG1zZ19mYWlsdXJlOwogCiAJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwogCXJldHVybiBza2ItPmxlbjsKQEAgLTEyNDEsNiArMTM3MSw3IEBACiAKIAlsZW4gPSBSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfdG1wbCkgKiB4cC0+eGZybV9ucik7CiAJbGVuICs9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2FjcXVpcmUpKTsKKwlsZW4gKz0gUlRBX1NQQUNFKHhmcm1fdXNlcl9zZWNfY3R4X3NpemUoeHApKTsKIAlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTMyNCw2ICsxNDU1LDggQEAKIAljb3B5X3RvX3VzZXJfcG9saWN5KHhwLCAmdXBlLT5wb2wsIGRpcik7CiAJaWYgKGNvcHlfdG9fdXNlcl90bXBsKHhwLCBza2IpIDwgMCkKIAkJZ290byBubG1zZ19mYWlsdXJlOworCWlmIChjb3B5X3RvX3VzZXJfc2VjX2N0eCh4cCwgc2tiKSkKKwkJZ290byBubG1zZ19mYWlsdXJlOwogCXVwZS0+aGFyZCA9ICEhaGFyZDsKIAogCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKQEAgLTEzNDEsNiArMTQ3NCw3IEBACiAKIAlsZW4gPSBSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfdG1wbCkgKiB4cC0+eGZybV9ucik7CiAJbGVuICs9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3BvbGV4cGlyZSkpOworCWxlbiArPSBSVEFfU1BBQ0UoeGZybV91c2VyX3NlY19jdHhfc2l6ZSh4cCkpOwogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zY3JpcHRzLy5naXRpZ25vcmUgYi9zY3JpcHRzLy5naXRpZ25vcmUKaW5kZXggYjQ2ZDY4Yi4uYTIzNGU1MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy8uZ2l0aWdub3JlCisrKyBiL3NjcmlwdHMvLmdpdGlnbm9yZQpAQCAtMSw0ICsxLDcgQEAKKyMKKyMgR2VuZXJhdGVkIGZpbGVzCisjCiBjb25tYWtlaGFzaAoga2FsbHN5bXMKIHBubXRvbG9nbwotCitiaW4yYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZSBiL3NjcmlwdHMvTWFrZWZpbGUKaW5kZXggNjc3NjNlZS4uNmY2YjQ4ZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL01ha2VmaWxlCkBAIC0xOSw0ICsxOSw0IEBACiBzdWJkaXItJChDT05GSUdfTU9EVUxFUykgICAgICs9IG1vZAogCiAjIExldCBjbGVhbiBkZXNjZW5kIGludG8gc3ViZGlycwotc3ViZGlyLQkrPSBiYXNpYyBseGRpYWxvZyBrY29uZmlnIHBhY2thZ2UKK3N1YmRpci0JKz0gYmFzaWMga2NvbmZpZyBwYWNrYWdlCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IDBmODFkY2YuLjU1MDc5OGYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC04MSw4ICs4MSwxMCBAQAogIyBOb3RlOiBJdCdzIHBvc3NpYmxlIHRoYXQgb25lIG9iamVjdCBnZXRzIHBvdGVudGlhbGx5IGxpbmtlZCBpbnRvIG1vcmUKICMgICAgICAgdGhhbiBvbmUgbW9kdWxlLiBJbiB0aGF0IGNhc2UgS0JVSUxEX01PRE5BTUUgd2lsbCBiZSBzZXQgdG8gZm9vX2JhciwKICMgICAgICAgd2hlcmUgZm9vIGFuZCBiYXIgYXJlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGVzLgotYmFzZW5hbWVfZmxhZ3MgPSAtREtCVUlMRF9CQVNFTkFNRT0kKHN1YnN0ICQoY29tbWEpLF8sJChzdWJzdCAtLF8sJCgqRikpKQotbW9kbmFtZV9mbGFncyAgPSAkKGlmICQoZmlsdGVyIDEsJCh3b3JkcyAkKG1vZG5hbWUpKSksLURLQlVJTERfTU9ETkFNRT0kKHN1YnN0ICQoY29tbWEpLF8sJChzdWJzdCAtLF8sJChtb2RuYW1lKSkpKQorbmFtZS1maXggPSAkKHN1YnN0ICQoY29tbWEpLF8sJChzdWJzdCAtLF8sJDEpKQorYmFzZW5hbWVfZmxhZ3MgPSAtRCJLQlVJTERfQkFTRU5BTUU9S0JVSUxEX1NUUigkKGNhbGwgbmFtZS1maXgsJCgqRikpKSIKK21vZG5hbWVfZmxhZ3MgID0gJChpZiAkKGZpbHRlciAxLCQod29yZHMgJChtb2RuYW1lKSkpLFwKKyAgICAgICAgICAgICAgICAgLUQiS0JVSUxEX01PRE5BTUU9S0JVSUxEX1NUUigkKGNhbGwgbmFtZS1maXgsJChtb2RuYW1lKSkpIikKIAogX2NfZmxhZ3MgICAgICAgPSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQoQ0ZMQUdTXyQoKkYpLm8pCiBfYV9mbGFncyAgICAgICA9ICQoQUZMQUdTKSAkKEVYVFJBX0FGTEFHUykgJChBRkxBR1NfJCgqRikubykKQEAgLTExMyw3ICsxMTUsNyBAQAogCiBjX2ZsYWdzICAgICAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKE5PU1RESU5DX0ZMQUdTKSAkKENQUEZMQUdTKSBcCiAJCSAkKF9fY19mbGFncykgJChtb2RrZXJuX2NmbGFncykgXAotCQkgJChiYXNlbmFtZV9mbGFncykgJChtb2RuYW1lX2ZsYWdzKQorCQkgLUQiS0JVSUxEX1NUUihzKT1cI3MiICQoYmFzZW5hbWVfZmxhZ3MpICQobW9kbmFtZV9mbGFncykKIAogYV9mbGFncyAgICAgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChOT1NURElOQ19GTEFHUykgJChDUFBGTEFHUykgXAogCQkgJChfX2FfZmxhZ3MpICQobW9ka2Vybl9hZmxhZ3MpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jIGIvc2NyaXB0cy9iYXNpYy9maXhkZXAuYwppbmRleCAwYjYxYmVhLi42NzkxMjRiIDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCisrKyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKQEAgLTEzMCw5ICsxMzAsMjIgQEAKIAlleGl0KDEpOwogfQogCisvKgorICogUHJpbnQgb3V0IHRoZSBjb21tYW5kbGluZSBwcmVmaXhlZCB3aXRoIGNtZF88dGFyZ2V0IGZpbGVuYW1lPiA6PQorICogSWYgY29tbWFuZGxpbmUgY29udGFpbnMgJyMnIGVzY2FwZSB3aXRoICdcJyBzbyBtYWtlIHRvIG5vdCBzZWUKKyAqIHRoZSAnIycgYXMgYSBzdGFydC1vZi1jb21tZW50IHN5bWJvbAorICoqLwogdm9pZCBwcmludF9jbWRsaW5lKHZvaWQpCiB7Ci0JcHJpbnRmKCJjbWRfJXMgOj0gJXNcblxuIiwgdGFyZ2V0LCBjbWRsaW5lKTsKKwljaGFyICpwID0gY21kbGluZTsKKworCXByaW50ZigiY21kXyVzIDo9ICIsIHRhcmdldCk7CisJZm9yICg7ICpwOyBwKyspIHsKKwkJaWYgKCpwID09ICcjJykKKwkJCXByaW50ZigiXFwiKTsKKwkJcHJpbnRmKCIlYyIsICpwKTsKKwl9CisJcHJpbnRmKCJcblxuIik7CiB9CiAKIGNoYXIgKiBzdHJfY29uZmlnICA9IE5VTEw7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jpbm9mZnNldC5jIGIvc2NyaXB0cy9iaW5vZmZzZXQuYwppbmRleCA1OTEzMDlkLi4xYTJlMzliIDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jpbm9mZnNldC5jCisrKyBiL3NjcmlwdHMvYmlub2Zmc2V0LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBiaW5vZmZzZXQuYwotICogKEMpIDIwMDIgUmFuZHkgRHVubGFwIDxyZGR1bmxhcEBvc2RsLm9yZz4KKyAqIChDKSAyMDAyIFJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+CiAKICMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrdmVyc2lvbi5wbCBiL3NjcmlwdHMvY2hlY2t2ZXJzaW9uLnBsCmluZGV4IGRmMTBkYjYuLjlmODRlNTYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2t2ZXJzaW9uLnBsCisrKyBiL3NjcmlwdHMvY2hlY2t2ZXJzaW9uLnBsCkBAIC0zLDcgKzMsNyBAQAogIyBjaGVja3ZlcnNpb24gZmluZCB1c2VzIG9mIExJTlVYX1ZFUlNJT05fQ09ERSwgS0VSTkVMX1ZFUlNJT04sIG9yCiAjIFVUU19SRUxFQVNFIHdpdGhvdXQgaW5jbHVkaW5nIDxsaW51eC92ZXJzaW9uLmg+LCBvciBjYXNlcyBvZgogIyBpbmNsdWRpbmcgPGxpbnV4L3ZlcnNpb24uaD4gdGhhdCBkb24ndCBuZWVkIGl0LgotIyBDb3B5cmlnaHQgKEMpIDIwMDMsIFJhbmR5IER1bmxhcCA8cmRkdW5sYXBAb3NkbC5vcmc+CisjIENvcHlyaWdodCAoQykgMjAwMywgUmFuZHkgRHVubGFwIDxyZHVubGFwQHhlbm90aW1lLm5ldD4KIAogJHwgPSAxOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zLy5naXRpZ25vcmUgYi9zY3JpcHRzL2dlbmtzeW1zLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1Y2FkYgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKK2tleXdvcmRzLmMKK2xleC5jCitwYXJzZS5bY2hdCitnZW5rc3ltcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZAppbmRleCBlYWJhZjc0Li5lZTQ2NDc4IDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZApAQCAtMSw3ICsxLDM4IEBACi0vKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDIuNy4yICovCisvKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4xICovCiAvKiBDb21tYW5kLWxpbmU6IGdwZXJmIC1MIEFOU0ktQyAtYSAtQyAtRSAtZyAtSCBpc19yZXNlcnZlZF9oYXNoIC1rICcxLDMsJCcgLU4gaXNfcmVzZXJ2ZWRfd29yZCAtcCAtdCBzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmICAqLworCisjaWYgISgoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCisgICAgICAmJiAoJyUnID09IDM3KSAmJiAoJyYnID09IDM4KSAmJiAoJ1wnJyA9PSAzOSkgJiYgKCcoJyA9PSA0MCkgXAorICAgICAgJiYgKCcpJyA9PSA0MSkgJiYgKCcqJyA9PSA0MikgJiYgKCcrJyA9PSA0MykgJiYgKCcsJyA9PSA0NCkgXAorICAgICAgJiYgKCctJyA9PSA0NSkgJiYgKCcuJyA9PSA0NikgJiYgKCcvJyA9PSA0NykgJiYgKCcwJyA9PSA0OCkgXAorICAgICAgJiYgKCcxJyA9PSA0OSkgJiYgKCcyJyA9PSA1MCkgJiYgKCczJyA9PSA1MSkgJiYgKCc0JyA9PSA1MikgXAorICAgICAgJiYgKCc1JyA9PSA1MykgJiYgKCc2JyA9PSA1NCkgJiYgKCc3JyA9PSA1NSkgJiYgKCc4JyA9PSA1NikgXAorICAgICAgJiYgKCc5JyA9PSA1NykgJiYgKCc6JyA9PSA1OCkgJiYgKCc7JyA9PSA1OSkgJiYgKCc8JyA9PSA2MCkgXAorICAgICAgJiYgKCc9JyA9PSA2MSkgJiYgKCc+JyA9PSA2MikgJiYgKCc/JyA9PSA2MykgJiYgKCdBJyA9PSA2NSkgXAorICAgICAgJiYgKCdCJyA9PSA2NikgJiYgKCdDJyA9PSA2NykgJiYgKCdEJyA9PSA2OCkgJiYgKCdFJyA9PSA2OSkgXAorICAgICAgJiYgKCdGJyA9PSA3MCkgJiYgKCdHJyA9PSA3MSkgJiYgKCdIJyA9PSA3MikgJiYgKCdJJyA9PSA3MykgXAorICAgICAgJiYgKCdKJyA9PSA3NCkgJiYgKCdLJyA9PSA3NSkgJiYgKCdMJyA9PSA3NikgJiYgKCdNJyA9PSA3NykgXAorICAgICAgJiYgKCdOJyA9PSA3OCkgJiYgKCdPJyA9PSA3OSkgJiYgKCdQJyA9PSA4MCkgJiYgKCdRJyA9PSA4MSkgXAorICAgICAgJiYgKCdSJyA9PSA4MikgJiYgKCdTJyA9PSA4MykgJiYgKCdUJyA9PSA4NCkgJiYgKCdVJyA9PSA4NSkgXAorICAgICAgJiYgKCdWJyA9PSA4NikgJiYgKCdXJyA9PSA4NykgJiYgKCdYJyA9PSA4OCkgJiYgKCdZJyA9PSA4OSkgXAorICAgICAgJiYgKCdaJyA9PSA5MCkgJiYgKCdbJyA9PSA5MSkgJiYgKCdcXCcgPT0gOTIpICYmICgnXScgPT0gOTMpIFwKKyAgICAgICYmICgnXicgPT0gOTQpICYmICgnXycgPT0gOTUpICYmICgnYScgPT0gOTcpICYmICgnYicgPT0gOTgpIFwKKyAgICAgICYmICgnYycgPT0gOTkpICYmICgnZCcgPT0gMTAwKSAmJiAoJ2UnID09IDEwMSkgJiYgKCdmJyA9PSAxMDIpIFwKKyAgICAgICYmICgnZycgPT0gMTAzKSAmJiAoJ2gnID09IDEwNCkgJiYgKCdpJyA9PSAxMDUpICYmICgnaicgPT0gMTA2KSBcCisgICAgICAmJiAoJ2snID09IDEwNykgJiYgKCdsJyA9PSAxMDgpICYmICgnbScgPT0gMTA5KSAmJiAoJ24nID09IDExMCkgXAorICAgICAgJiYgKCdvJyA9PSAxMTEpICYmICgncCcgPT0gMTEyKSAmJiAoJ3EnID09IDExMykgJiYgKCdyJyA9PSAxMTQpIFwKKyAgICAgICYmICgncycgPT0gMTE1KSAmJiAoJ3QnID09IDExNikgJiYgKCd1JyA9PSAxMTcpICYmICgndicgPT0gMTE4KSBcCisgICAgICAmJiAoJ3cnID09IDExOSkgJiYgKCd4JyA9PSAxMjApICYmICgneScgPT0gMTIxKSAmJiAoJ3onID09IDEyMikgXAorICAgICAgJiYgKCd7JyA9PSAxMjMpICYmICgnfCcgPT0gMTI0KSAmJiAoJ30nID09IDEyNSkgJiYgKCd+JyA9PSAxMjYpKQorLyogVGhlIGNoYXJhY3RlciBzZXQgaXMgbm90IGJhc2VkIG9uIElTTy02NDYuICAqLworI2Vycm9yICJncGVyZiBnZW5lcmF0ZWQgdGFibGVzIGRvbid0IHdvcmsgd2l0aCB0aGlzIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LiBQbGVhc2UgcmVwb3J0IGEgYnVnIHRvIDxidWctZ251LWdwZXJmQGdudS5vcmc+LiIKKyNlbmRpZgorCisjbGluZSAxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorCisjbGluZSAzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogc3RydWN0IHJlc3dvcmQgeyBjb25zdCBjaGFyICpuYW1lOyBpbnQgdG9rZW47IH07Ci0vKiBtYXhpbXVtIGtleSByYW5nZSA9IDEwOSwgZHVwbGljYXRlcyA9IDAgKi8KKy8qIG1heGltdW0ga2V5IHJhbmdlID0gNjgsIGR1cGxpY2F0ZXMgPSAwICovCiAKICNpZmRlZiBfX0dOVUNfXwogX19pbmxpbmUKQEAgLTE1LDMyICs0NiwzMiBAQAogewogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhc3NvX3ZhbHVlc1tdID0KICAgICB7Ci0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAgIDUsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAgIDAsIDExMywgMTEzLCAxMTMsCi0gICAgICAgIDAsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgICAwLCAxMTMsICAgMCwgMTEzLCAgMjAsCi0gICAgICAgMjUsICAgMCwgIDM1LCAgMzAsIDExMywgIDIwLCAxMTMsIDExMywgIDQwLCAgMzAsCi0gICAgICAgMzAsICAgMCwgICAwLCAxMTMsICAgMCwgIDUxLCAgIDAsICAxNSwgICA1LCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsCi0gICAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAxNSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDE1LCA3MSwgNzEsIDcxLAorICAgICAgMTAsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsICAwLCA3MSwgIDAsIDcxLCAgNSwKKyAgICAgICA1LCAgMCwgMTAsIDIwLCA3MSwgMjUsIDcxLCA3MSwgMjAsICAwLAorICAgICAgMjAsIDMwLCAyNSwgNzEsIDEwLCAgNSwgIDAsIDIwLCAxNSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKKyAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEKICAgICB9OwogICByZXR1cm4gbGVuICsgYXNzb192YWx1ZXNbKHVuc2lnbmVkIGNoYXIpc3RyWzJdXSArIGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFyKXN0clswXV0gKyBhc3NvX3ZhbHVlc1sodW5zaWduZWQgY2hhcilzdHJbbGVuIC0gMV1dOwogfQpAQCAtNTYsNzcgKzg3LDExMiBAQAogICAgICAgVE9UQUxfS0VZV09SRFMgPSA0MSwKICAgICAgIE1JTl9XT1JEX0xFTkdUSCA9IDMsCiAgICAgICBNQVhfV09SRF9MRU5HVEggPSAxNywKLSAgICAgIE1JTl9IQVNIX1ZBTFVFID0gNCwKLSAgICAgIE1BWF9IQVNIX1ZBTFVFID0gMTEyCisgICAgICBNSU5fSEFTSF9WQUxVRSA9IDMsCisgICAgICBNQVhfSEFTSF9WQUxVRSA9IDcwCiAgICAgfTsKIAogICBzdGF0aWMgY29uc3Qgc3RydWN0IHJlc3dvcmQgd29yZGxpc3RbXSA9CiAgICAgewotICAgICAgeyIifSwgeyIifSwgeyIifSwgeyIifSwKLSAgICAgIHsiYXV0byIsIEFVVE9fS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LAorICAgICAgeyIifSwgeyIifSwgeyIifSwKKyNsaW5lIDI0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJhc20iLCBBU01fS0VZV30sCisgICAgICB7IiJ9LAorI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19hc20iLCBBU01fS0VZV30sCisgICAgICB7IiJ9LAorI2xpbmUgOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19hc21fXyIsIEFTTV9LRVlXfSwKICAgICAgIHsiIn0sCisjbGluZSAyMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX3Jlc3RyaWN0IiwgUkVTVFJJQ1RfS0VZV30sCisjbGluZSA1MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX190eXBlb2ZfXyIsIFRZUEVPRl9LRVlXfSwKKyNsaW5lIDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fYXR0cmlidXRlIiwgQVRUUklCVVRFX0tFWVd9LAotICAgICAgeyJfX3Jlc3RyaWN0X18iLCBSRVNUUklDVF9LRVlXfSwKLSAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKLSAgICAgIHsiIn0sCi0gICAgICB7Il9fdm9sYXRpbGUiLCBWT0xBVElMRV9LRVlXfSwKLSAgICAgIHsiIn0sCi0gICAgICB7Il9fdm9sYXRpbGVfXyIsIFZPTEFUSUxFX0tFWVd9LAotICAgICAgeyJFWFBPUlRfU1lNQk9MIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sIHsiIn0sCi0gICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSAgICAgIHsiaW50IiwgSU5UX0tFWVd9LAotICAgICAgeyJjaGFyIiwgQ0hBUl9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sCisjbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19jb25zdCIsIENPTlNUX0tFWVd9LAotICAgICAgeyJfX2lubGluZSIsIElOTElORV9LRVlXfSwKKyNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2F0dHJpYnV0ZV9fIiwgQVRUUklCVVRFX0tFWVd9LAorI2xpbmUgMTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fY29uc3RfXyIsIENPTlNUX0tFWVd9LAotICAgICAgeyJfX2lubGluZV9fIiwgSU5MSU5FX0tFWVd9LAotICAgICAgeyIifSwgeyIifSwgeyIifSwgeyIifSwKLSAgICAgIHsiX19hc20iLCBBU01fS0VZV30sCi0gICAgICB7ImV4dGVybiIsIEVYVEVSTl9LRVlXfSwKLSAgICAgIHsiIn0sCi0gICAgICB7InJlZ2lzdGVyIiwgUkVHSVNURVJfS0VZV30sCi0gICAgICB7IiJ9LAotICAgICAgeyJmbG9hdCIsIEZMT0FUX0tFWVd9LAotICAgICAgeyJ0eXBlb2YiLCBUWVBFT0ZfS0VZV30sCi0gICAgICB7InR5cGVkZWYiLCBUWVBFREVGX0tFWVd9LAotICAgICAgeyIifSwgeyIifSwKLSAgICAgIHsiX0Jvb2wiLCBCT09MX0tFWVd9LAotICAgICAgeyJkb3VibGUiLCBET1VCTEVfS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LAotICAgICAgeyJlbnVtIiwgRU5VTV9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sIHsiIn0sCi0gICAgICB7InZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCi0gICAgICB7InZvaWQiLCBWT0lEX0tFWVd9LAotICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAotICAgICAgeyJzaG9ydCIsIFNIT1JUX0tFWVd9LAotICAgICAgeyJzdHJ1Y3QiLCBTVFJVQ1RfS0VZV30sCi0gICAgICB7IiJ9LAotICAgICAgeyJyZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotICAgICAgeyIifSwKKyNsaW5lIDE2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX3NpZ25lZF9fIiwgU0lHTkVEX0tFWVd9LAotICAgICAgeyIifSwKLSAgICAgIHsiYXNtIiwgQVNNX0tFWVd9LAotICAgICAgeyIifSwgeyIifSwKLSAgICAgIHsiaW5saW5lIiwgSU5MSU5FX0tFWVd9LAotICAgICAgeyIifSwgeyIifSwgeyIifSwKLSAgICAgIHsidW5pb24iLCBVTklPTl9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sCisjbGluZSA0MiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAotICAgICAgeyIifSwgeyIifSwgeyIifSwgeyIifSwgeyIifSwgeyIifSwKKyAgICAgIHsiIn0sCisjbGluZSAxNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19zaWduZWQiLCBTSUdORURfS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LAotICAgICAgeyIifSwgeyIifSwgeyIifSwgeyIifSwgeyIifSwKKyNsaW5lIDMwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJjaGFyIiwgQ0hBUl9LRVlXfSwKKyAgICAgIHsiIn0sCisjbGluZSA0MyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsic3RydWN0IiwgU1RSVUNUX0tFWVd9LAorI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9fcmVzdHJpY3RfXyIsIFJFU1RSSUNUX0tFWVd9LAorI2xpbmUgMjMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InJlc3RyaWN0IiwgUkVTVFJJQ1RfS0VZV30sCisjbGluZSAzMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiZW51bSIsIEVOVU1fS0VZV30sCisjbGluZSAxNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX192b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAorI2xpbmUgMzQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImV4dGVybiIsIEVYVEVSTl9LRVlXfSwKKyNsaW5lIDE4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX3ZvbGF0aWxlX18iLCBWT0xBVElMRV9LRVlXfSwKKyNsaW5lIDM3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJpbnQiLCBJTlRfS0VZV30sCisgICAgICB7IiJ9LAorI2xpbmUgMzEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImNvbnN0IiwgQ09OU1RfS0VZV30sCisjbGluZSAzMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiZG91YmxlIiwgRE9VQkxFX0tFWVd9LAorICAgICAgeyIifSwKKyNsaW5lIDEzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2lubGluZSIsIElOTElORV9LRVlXfSwKKyNsaW5lIDI5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJhdXRvIiwgQVVUT19LRVlXfSwKKyNsaW5lIDE0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2lubGluZV9fIiwgSU5MSU5FX0tFWVd9LAorI2xpbmUgNDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InNpZ25lZCIsIFNJR05FRF9LRVlXfSwKKyAgICAgIHsiIn0sCisjbGluZSA0NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidW5zaWduZWQiLCBVTlNJR05FRF9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sCisgICAgICB7IiJ9LAorI2xpbmUgNDAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InNob3J0IiwgU0hPUlRfS0VZV30sCisjbGluZSA0OSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsidHlwZW9mIiwgVFlQRU9GX0tFWVd9LAorI2xpbmUgNDQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InR5cGVkZWYiLCBUWVBFREVGX0tFWVd9LAorI2xpbmUgNDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCisgICAgICB7IiJ9LAorI2xpbmUgMzUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImZsb2F0IiwgRkxPQVRfS0VZV30sCisgICAgICB7IiJ9LCB7IiJ9LAorI2xpbmUgMzkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InJlZ2lzdGVyIiwgUkVHSVNURVJfS0VZV30sCisjbGluZSA0NyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsidm9pZCIsIFZPSURfS0VZV30sCisgICAgICB7IiJ9LAorI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImlubGluZSIsIElOTElORV9LRVlXfSwKKyAgICAgIHsiIn0sCisjbGluZSA1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJFWFBPUlRfU1lNQk9MIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKKyAgICAgIHsiIn0sCisjbGluZSAyMCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX0Jvb2wiLCBCT09MX0tFWVd9LAorICAgICAgeyIifSwKKyNsaW5lIDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKKyAgICAgIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sCisjbGluZSAzOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsibG9uZyIsIExPTkdfS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LAotICAgICAgeyJzaWduZWQiLCBTSUdORURfS0VZV30KKyAgICAgIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sCisjbGluZSA0NSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsidW5pb24iLCBVTklPTl9LRVlXfQogICAgIH07CiAKICAgaWYgKGxlbiA8PSBNQVhfV09SRF9MRU5HVEggJiYgbGVuID49IE1JTl9XT1JEX0xFTkdUSCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMvbGV4LmNfc2hpcHBlZCBiL3NjcmlwdHMvZ2Vua3N5bXMvbGV4LmNfc2hpcHBlZAppbmRleCBkOWJmYmI1Li4xMjE4MDUzIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL2xleC5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9sZXguY19zaGlwcGVkCkBAIC0yMDM2LDQ5ICsyMDM2LDEzMSBAQAogCiAgIHJldHVybiB0b2tlbjsKIH0KLSNpZm5kZWYgWVlTVFlQRQotI2RlZmluZSBZWVNUWVBFIGludAotI2VuZGlmCi0jZGVmaW5lCUFTTV9LRVlXCTI1NwotI2RlZmluZQlBVFRSSUJVVEVfS0VZVwkyNTgKLSNkZWZpbmUJQVVUT19LRVlXCTI1OQotI2RlZmluZQlCT09MX0tFWVcJMjYwCi0jZGVmaW5lCUNIQVJfS0VZVwkyNjEKLSNkZWZpbmUJQ09OU1RfS0VZVwkyNjIKLSNkZWZpbmUJRE9VQkxFX0tFWVcJMjYzCi0jZGVmaW5lCUVOVU1fS0VZVwkyNjQKLSNkZWZpbmUJRVhURVJOX0tFWVcJMjY1Ci0jZGVmaW5lCUZMT0FUX0tFWVcJMjY2Ci0jZGVmaW5lCUlOTElORV9LRVlXCTI2NwotI2RlZmluZQlJTlRfS0VZVwkyNjgKLSNkZWZpbmUJTE9OR19LRVlXCTI2OQotI2RlZmluZQlSRUdJU1RFUl9LRVlXCTI3MAotI2RlZmluZQlSRVNUUklDVF9LRVlXCTI3MQotI2RlZmluZQlTSE9SVF9LRVlXCTI3MgotI2RlZmluZQlTSUdORURfS0VZVwkyNzMKLSNkZWZpbmUJU1RBVElDX0tFWVcJMjc0Ci0jZGVmaW5lCVNUUlVDVF9LRVlXCTI3NQotI2RlZmluZQlUWVBFREVGX0tFWVcJMjc2Ci0jZGVmaW5lCVVOSU9OX0tFWVcJMjc3Ci0jZGVmaW5lCVVOU0lHTkVEX0tFWVcJMjc4Ci0jZGVmaW5lCVZPSURfS0VZVwkyNzkKLSNkZWZpbmUJVk9MQVRJTEVfS0VZVwkyODAKLSNkZWZpbmUJVFlQRU9GX0tFWVcJMjgxCi0jZGVmaW5lCUVYUE9SVF9TWU1CT0xfS0VZVwkyODIKLSNkZWZpbmUJQVNNX1BIUkFTRQkyODMKLSNkZWZpbmUJQVRUUklCVVRFX1BIUkFTRQkyODQKLSNkZWZpbmUJQlJBQ0VfUEhSQVNFCTI4NQotI2RlZmluZQlCUkFDS0VUX1BIUkFTRQkyODYKLSNkZWZpbmUJRVhQUkVTU0lPTl9QSFJBU0UJMjg3Ci0jZGVmaW5lCUNIQVIJMjg4Ci0jZGVmaW5lCURPVFMJMjg5Ci0jZGVmaW5lCUlERU5UCTI5MAotI2RlZmluZQlJTlQJMjkxCi0jZGVmaW5lCVJFQUwJMjkyCi0jZGVmaW5lCVNUUklORwkyOTMKLSNkZWZpbmUJVFlQRQkyOTQKLSNkZWZpbmUJT1RIRVIJMjk1Ci0jZGVmaW5lCUZJTEVOQU1FCTI5NgorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMC4gICovCiAKKy8qIFNrZWxldG9uIHBhcnNlciBmb3IgWWFjYy1saWtlIHBhcnNpbmcgd2l0aCBCaXNvbiwKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKyAgIEJpc29uIG91dHB1dCBmaWxlLCB5b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxlIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBBU01fS0VZVyA9IDI1OCwKKyAgICAgQVRUUklCVVRFX0tFWVcgPSAyNTksCisgICAgIEFVVE9fS0VZVyA9IDI2MCwKKyAgICAgQk9PTF9LRVlXID0gMjYxLAorICAgICBDSEFSX0tFWVcgPSAyNjIsCisgICAgIENPTlNUX0tFWVcgPSAyNjMsCisgICAgIERPVUJMRV9LRVlXID0gMjY0LAorICAgICBFTlVNX0tFWVcgPSAyNjUsCisgICAgIEVYVEVSTl9LRVlXID0gMjY2LAorICAgICBGTE9BVF9LRVlXID0gMjY3LAorICAgICBJTkxJTkVfS0VZVyA9IDI2OCwKKyAgICAgSU5UX0tFWVcgPSAyNjksCisgICAgIExPTkdfS0VZVyA9IDI3MCwKKyAgICAgUkVHSVNURVJfS0VZVyA9IDI3MSwKKyAgICAgUkVTVFJJQ1RfS0VZVyA9IDI3MiwKKyAgICAgU0hPUlRfS0VZVyA9IDI3MywKKyAgICAgU0lHTkVEX0tFWVcgPSAyNzQsCisgICAgIFNUQVRJQ19LRVlXID0gMjc1LAorICAgICBTVFJVQ1RfS0VZVyA9IDI3NiwKKyAgICAgVFlQRURFRl9LRVlXID0gMjc3LAorICAgICBVTklPTl9LRVlXID0gMjc4LAorICAgICBVTlNJR05FRF9LRVlXID0gMjc5LAorICAgICBWT0lEX0tFWVcgPSAyODAsCisgICAgIFZPTEFUSUxFX0tFWVcgPSAyODEsCisgICAgIFRZUEVPRl9LRVlXID0gMjgyLAorICAgICBFWFBPUlRfU1lNQk9MX0tFWVcgPSAyODMsCisgICAgIEFTTV9QSFJBU0UgPSAyODQsCisgICAgIEFUVFJJQlVURV9QSFJBU0UgPSAyODUsCisgICAgIEJSQUNFX1BIUkFTRSA9IDI4NiwKKyAgICAgQlJBQ0tFVF9QSFJBU0UgPSAyODcsCisgICAgIEVYUFJFU1NJT05fUEhSQVNFID0gMjg4LAorICAgICBDSEFSID0gMjg5LAorICAgICBET1RTID0gMjkwLAorICAgICBJREVOVCA9IDI5MSwKKyAgICAgSU5UID0gMjkyLAorICAgICBSRUFMID0gMjkzLAorICAgICBTVFJJTkcgPSAyOTQsCisgICAgIFRZUEUgPSAyOTUsCisgICAgIE9USEVSID0gMjk2LAorICAgICBGSUxFTkFNRSA9IDI5NworICAgfTsKKyNlbmRpZgorI2RlZmluZSBBU01fS0VZVyAyNTgKKyNkZWZpbmUgQVRUUklCVVRFX0tFWVcgMjU5CisjZGVmaW5lIEFVVE9fS0VZVyAyNjAKKyNkZWZpbmUgQk9PTF9LRVlXIDI2MQorI2RlZmluZSBDSEFSX0tFWVcgMjYyCisjZGVmaW5lIENPTlNUX0tFWVcgMjYzCisjZGVmaW5lIERPVUJMRV9LRVlXIDI2NAorI2RlZmluZSBFTlVNX0tFWVcgMjY1CisjZGVmaW5lIEVYVEVSTl9LRVlXIDI2NgorI2RlZmluZSBGTE9BVF9LRVlXIDI2NworI2RlZmluZSBJTkxJTkVfS0VZVyAyNjgKKyNkZWZpbmUgSU5UX0tFWVcgMjY5CisjZGVmaW5lIExPTkdfS0VZVyAyNzAKKyNkZWZpbmUgUkVHSVNURVJfS0VZVyAyNzEKKyNkZWZpbmUgUkVTVFJJQ1RfS0VZVyAyNzIKKyNkZWZpbmUgU0hPUlRfS0VZVyAyNzMKKyNkZWZpbmUgU0lHTkVEX0tFWVcgMjc0CisjZGVmaW5lIFNUQVRJQ19LRVlXIDI3NQorI2RlZmluZSBTVFJVQ1RfS0VZVyAyNzYKKyNkZWZpbmUgVFlQRURFRl9LRVlXIDI3NworI2RlZmluZSBVTklPTl9LRVlXIDI3OAorI2RlZmluZSBVTlNJR05FRF9LRVlXIDI3OQorI2RlZmluZSBWT0lEX0tFWVcgMjgwCisjZGVmaW5lIFZPTEFUSUxFX0tFWVcgMjgxCisjZGVmaW5lIFRZUEVPRl9LRVlXIDI4MgorI2RlZmluZSBFWFBPUlRfU1lNQk9MX0tFWVcgMjgzCisjZGVmaW5lIEFTTV9QSFJBU0UgMjg0CisjZGVmaW5lIEFUVFJJQlVURV9QSFJBU0UgMjg1CisjZGVmaW5lIEJSQUNFX1BIUkFTRSAyODYKKyNkZWZpbmUgQlJBQ0tFVF9QSFJBU0UgMjg3CisjZGVmaW5lIEVYUFJFU1NJT05fUEhSQVNFIDI4OAorI2RlZmluZSBDSEFSIDI4OQorI2RlZmluZSBET1RTIDI5MAorI2RlZmluZSBJREVOVCAyOTEKKyNkZWZpbmUgSU5UIDI5MgorI2RlZmluZSBSRUFMIDI5MworI2RlZmluZSBTVFJJTkcgMjk0CisjZGVmaW5lIFRZUEUgMjk1CisjZGVmaW5lIE9USEVSIDI5NgorI2RlZmluZSBGSUxFTkFNRSAyOTcKKworCisKKworI2lmICEgZGVmaW5lZCAoWVlTVFlQRSkgJiYgISBkZWZpbmVkIChZWVNUWVBFX0lTX0RFQ0xBUkVEKQordHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgogCiBleHRlcm4gWVlTVFlQRSB5eWx2YWw7CisKKworCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmNfc2hpcHBlZCBiL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuY19zaGlwcGVkCmluZGV4IDJjNmIxMjguLjk5ZDdjMjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuY19zaGlwcGVkCkBAIC0xLDUwICsxLDE0NSBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMC4gICovCiAKLS8qICBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueQotICAgIGJ5IEdOVSBCaXNvbiB2ZXJzaW9uIDEuMjggICovCisvKiBTa2VsZXRvbiBwYXJzZXIgZm9yIFlhY2MtbGlrZSBwYXJzaW5nIHdpdGggQmlzb24sCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLSNkZWZpbmUgWVlCSVNPTiAxICAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotI2RlZmluZQlBU01fS0VZVwkyNTcKLSNkZWZpbmUJQVRUUklCVVRFX0tFWVcJMjU4Ci0jZGVmaW5lCUFVVE9fS0VZVwkyNTkKLSNkZWZpbmUJQk9PTF9LRVlXCTI2MAotI2RlZmluZQlDSEFSX0tFWVcJMjYxCi0jZGVmaW5lCUNPTlNUX0tFWVcJMjYyCi0jZGVmaW5lCURPVUJMRV9LRVlXCTI2MwotI2RlZmluZQlFTlVNX0tFWVcJMjY0Ci0jZGVmaW5lCUVYVEVSTl9LRVlXCTI2NQotI2RlZmluZQlGTE9BVF9LRVlXCTI2NgotI2RlZmluZQlJTkxJTkVfS0VZVwkyNjcKLSNkZWZpbmUJSU5UX0tFWVcJMjY4Ci0jZGVmaW5lCUxPTkdfS0VZVwkyNjkKLSNkZWZpbmUJUkVHSVNURVJfS0VZVwkyNzAKLSNkZWZpbmUJUkVTVFJJQ1RfS0VZVwkyNzEKLSNkZWZpbmUJU0hPUlRfS0VZVwkyNzIKLSNkZWZpbmUJU0lHTkVEX0tFWVcJMjczCi0jZGVmaW5lCVNUQVRJQ19LRVlXCTI3NAotI2RlZmluZQlTVFJVQ1RfS0VZVwkyNzUKLSNkZWZpbmUJVFlQRURFRl9LRVlXCTI3NgotI2RlZmluZQlVTklPTl9LRVlXCTI3NwotI2RlZmluZQlVTlNJR05FRF9LRVlXCTI3OAotI2RlZmluZQlWT0lEX0tFWVcJMjc5Ci0jZGVmaW5lCVZPTEFUSUxFX0tFWVcJMjgwCi0jZGVmaW5lCVRZUEVPRl9LRVlXCTI4MQotI2RlZmluZQlFWFBPUlRfU1lNQk9MX0tFWVcJMjgyCi0jZGVmaW5lCUFTTV9QSFJBU0UJMjgzCi0jZGVmaW5lCUFUVFJJQlVURV9QSFJBU0UJMjg0Ci0jZGVmaW5lCUJSQUNFX1BIUkFTRQkyODUKLSNkZWZpbmUJQlJBQ0tFVF9QSFJBU0UJMjg2Ci0jZGVmaW5lCUVYUFJFU1NJT05fUEhSQVNFCTI4NwotI2RlZmluZQlDSEFSCTI4OAotI2RlZmluZQlET1RTCTI4OQotI2RlZmluZQlJREVOVAkyOTAKLSNkZWZpbmUJSU5UCTI5MQotI2RlZmluZQlSRUFMCTI5MgotI2RlZmluZQlTVFJJTkcJMjkzCi0jZGVmaW5lCVRZUEUJMjk0Ci0jZGVmaW5lCU9USEVSCTI5NQotI2RlZmluZQlGSUxFTkFNRQkyOTYKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyBjb3BpZWQgYnkgQmlzb24gaW50byBhCisgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICAgaW4gdmVyc2lvbiAxLjI0IG9mIEJpc29uLiAgKi8KKworLyogV3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzbyBjYWxsZWQKKyAgIGBgc2VtYW50aWMnJyBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKworLyogU2tlbGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQdXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMAorCisvKiBVc2luZyBsb2NhdGlvbnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgQVNNX0tFWVcgPSAyNTgsCisgICAgIEFUVFJJQlVURV9LRVlXID0gMjU5LAorICAgICBBVVRPX0tFWVcgPSAyNjAsCisgICAgIEJPT0xfS0VZVyA9IDI2MSwKKyAgICAgQ0hBUl9LRVlXID0gMjYyLAorICAgICBDT05TVF9LRVlXID0gMjYzLAorICAgICBET1VCTEVfS0VZVyA9IDI2NCwKKyAgICAgRU5VTV9LRVlXID0gMjY1LAorICAgICBFWFRFUk5fS0VZVyA9IDI2NiwKKyAgICAgRkxPQVRfS0VZVyA9IDI2NywKKyAgICAgSU5MSU5FX0tFWVcgPSAyNjgsCisgICAgIElOVF9LRVlXID0gMjY5LAorICAgICBMT05HX0tFWVcgPSAyNzAsCisgICAgIFJFR0lTVEVSX0tFWVcgPSAyNzEsCisgICAgIFJFU1RSSUNUX0tFWVcgPSAyNzIsCisgICAgIFNIT1JUX0tFWVcgPSAyNzMsCisgICAgIFNJR05FRF9LRVlXID0gMjc0LAorICAgICBTVEFUSUNfS0VZVyA9IDI3NSwKKyAgICAgU1RSVUNUX0tFWVcgPSAyNzYsCisgICAgIFRZUEVERUZfS0VZVyA9IDI3NywKKyAgICAgVU5JT05fS0VZVyA9IDI3OCwKKyAgICAgVU5TSUdORURfS0VZVyA9IDI3OSwKKyAgICAgVk9JRF9LRVlXID0gMjgwLAorICAgICBWT0xBVElMRV9LRVlXID0gMjgxLAorICAgICBUWVBFT0ZfS0VZVyA9IDI4MiwKKyAgICAgRVhQT1JUX1NZTUJPTF9LRVlXID0gMjgzLAorICAgICBBU01fUEhSQVNFID0gMjg0LAorICAgICBBVFRSSUJVVEVfUEhSQVNFID0gMjg1LAorICAgICBCUkFDRV9QSFJBU0UgPSAyODYsCisgICAgIEJSQUNLRVRfUEhSQVNFID0gMjg3LAorICAgICBFWFBSRVNTSU9OX1BIUkFTRSA9IDI4OCwKKyAgICAgQ0hBUiA9IDI4OSwKKyAgICAgRE9UUyA9IDI5MCwKKyAgICAgSURFTlQgPSAyOTEsCisgICAgIElOVCA9IDI5MiwKKyAgICAgUkVBTCA9IDI5MywKKyAgICAgU1RSSU5HID0gMjk0LAorICAgICBUWVBFID0gMjk1LAorICAgICBPVEhFUiA9IDI5NiwKKyAgICAgRklMRU5BTUUgPSAyOTcKKyAgIH07CisjZW5kaWYKKyNkZWZpbmUgQVNNX0tFWVcgMjU4CisjZGVmaW5lIEFUVFJJQlVURV9LRVlXIDI1OQorI2RlZmluZSBBVVRPX0tFWVcgMjYwCisjZGVmaW5lIEJPT0xfS0VZVyAyNjEKKyNkZWZpbmUgQ0hBUl9LRVlXIDI2MgorI2RlZmluZSBDT05TVF9LRVlXIDI2MworI2RlZmluZSBET1VCTEVfS0VZVyAyNjQKKyNkZWZpbmUgRU5VTV9LRVlXIDI2NQorI2RlZmluZSBFWFRFUk5fS0VZVyAyNjYKKyNkZWZpbmUgRkxPQVRfS0VZVyAyNjcKKyNkZWZpbmUgSU5MSU5FX0tFWVcgMjY4CisjZGVmaW5lIElOVF9LRVlXIDI2OQorI2RlZmluZSBMT05HX0tFWVcgMjcwCisjZGVmaW5lIFJFR0lTVEVSX0tFWVcgMjcxCisjZGVmaW5lIFJFU1RSSUNUX0tFWVcgMjcyCisjZGVmaW5lIFNIT1JUX0tFWVcgMjczCisjZGVmaW5lIFNJR05FRF9LRVlXIDI3NAorI2RlZmluZSBTVEFUSUNfS0VZVyAyNzUKKyNkZWZpbmUgU1RSVUNUX0tFWVcgMjc2CisjZGVmaW5lIFRZUEVERUZfS0VZVyAyNzcKKyNkZWZpbmUgVU5JT05fS0VZVyAyNzgKKyNkZWZpbmUgVU5TSUdORURfS0VZVyAyNzkKKyNkZWZpbmUgVk9JRF9LRVlXIDI4MAorI2RlZmluZSBWT0xBVElMRV9LRVlXIDI4MQorI2RlZmluZSBUWVBFT0ZfS0VZVyAyODIKKyNkZWZpbmUgRVhQT1JUX1NZTUJPTF9LRVlXIDI4MworI2RlZmluZSBBU01fUEhSQVNFIDI4NAorI2RlZmluZSBBVFRSSUJVVEVfUEhSQVNFIDI4NQorI2RlZmluZSBCUkFDRV9QSFJBU0UgMjg2CisjZGVmaW5lIEJSQUNLRVRfUEhSQVNFIDI4NworI2RlZmluZSBFWFBSRVNTSU9OX1BIUkFTRSAyODgKKyNkZWZpbmUgQ0hBUiAyODkKKyNkZWZpbmUgRE9UUyAyOTAKKyNkZWZpbmUgSURFTlQgMjkxCisjZGVmaW5lIElOVCAyOTIKKyNkZWZpbmUgUkVBTCAyOTMKKyNkZWZpbmUgU1RSSU5HIDI5NAorI2RlZmluZSBUWVBFIDI5NQorI2RlZmluZSBPVEhFUiAyOTYKKyNkZWZpbmUgRklMRU5BTUUgMjk3CisKKworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwogI2xpbmUgMjQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKIAogCkBAIC03NSw2NjEgKzE3MCwxMDAwIEBACiAgIGZyZWVfbGlzdChiLCBlKTsKIH0KIAotI2lmbmRlZiBZWVNUWVBFCi0jZGVmaW5lIFlZU1RZUEUgaW50Ci0jZW5kaWYKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLwogI2lmbmRlZiBZWURFQlVHCi0jZGVmaW5lIFlZREVCVUcgMQorIyBkZWZpbmUgWVlERUJVRyAxCiAjZW5kaWYKIAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZm5kZWYgX19jcGx1c3BsdXMKLSNpZm5kZWYgX19TVERDX18KLSNkZWZpbmUgY29uc3QKLSNlbmRpZgotI2VuZGlmCi0KLQotCi0jZGVmaW5lCVlZRklOQUwJCTE3MgotI2RlZmluZQlZWUZMQUcJCS0zMjc2OAotI2RlZmluZQlZWU5UQkFTRQk1MgotCi0jZGVmaW5lIFlZVFJBTlNMQVRFKHgpICgodW5zaWduZWQpKHgpIDw9IDI5NiA/IHl5dHJhbnNsYXRlW3hdIDogOTYpCi0KLXN0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPSB7ICAgICAwLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQ2LAotICAgIDQ3LCAgICA0OCwgICAgIDIsICAgIDQ1LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA1MSwgICAgNDMsICAgICAyLAotICAgIDQ5LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgNTAsICAgICAyLCAgICA0NCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIKLX07Ci0KLSNpZiBZWURFQlVHICE9IDAKLXN0YXRpYyBjb25zdCBzaG9ydCB5eXByaHNbXSA9IHsgICAgIDAsCi0gICAgIDAsICAgICAyLCAgICAgNSwgICAgIDYsICAgICA5LCAgICAxMCwgICAgMTQsICAgIDE2LCAgICAxOCwgICAgMjAsCi0gICAgMjIsICAgIDI1LCAgICAyOCwgICAgMzIsICAgIDMzLCAgICAzNSwgICAgMzcsICAgIDQxLCAgICA0NiwgICAgNDcsCi0gICAgNDksICAgIDUxLCAgICA1NCwgICAgNTYsICAgIDU4LCAgICA2MCwgICAgNjIsICAgIDY0LCAgICA2NiwgICAgNjgsCi0gICAgNzAsICAgIDcyLCAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgOTAsICAgIDk0LCAgICA5OCwgICAxMDEsCi0gICAxMDQsICAgMTA3LCAgIDEwOSwgICAxMTEsICAgMTEzLCAgIDExNSwgICAxMTcsICAgMTE5LCAgIDEyMSwgICAxMjMsCi0gICAxMjUsICAgMTI3LCAgIDEyOSwgICAxMzIsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTQwLCAgIDE0MiwgICAxNDQsCi0gICAxNDYsICAgMTQ4LCAgIDE1MSwgICAxNTMsICAgMTU1LCAgIDE2MCwgICAxNjUsICAgMTY4LCAgIDE3MiwgICAxNzYsCi0gICAxNzksICAgMTgxLCAgIDE4MywgICAxODUsICAgMTkwLCAgIDE5NSwgICAxOTgsICAgMjAyLCAgIDIwNiwgICAyMDksCi0gICAyMTEsICAgMjE1LCAgIDIxNiwgICAyMTgsICAgMjIwLCAgIDIyNCwgICAyMjcsICAgMjMwLCAgIDIzMiwgICAyMzMsCi0gICAyMzUsICAgMjM3LCAgIDI0MiwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYyLCAgIDI2MywgICAyNjUsCi0gICAyNjgsICAgMjcyLCAgIDI3NiwgICAyNzcsICAgMjc5LCAgIDI4MSwgICAyODQsICAgMjg4LCAgIDI5MSwgICAyOTIsCi0gICAyOTQsICAgMjk2LCAgIDMwMCwgICAzMDMsICAgMzA2LCAgIDMwOCwgICAzMTEsICAgMzEyLCAgIDMxNCwgICAzMTcsCi0gICAzMTgsICAgMzIwCi19OwotCi1zdGF0aWMgY29uc3Qgc2hvcnQgeXlyaHNbXSA9IHsgICAgNTMsCi0gICAgIDAsICAgIDUyLCAgICA1MywgICAgIDAsICAgICAwLCAgICA1NCwgICAgNTUsICAgICAwLCAgICAgMCwgICAgMjIsCi0gICAgNTYsICAgIDU3LCAgICAgMCwgICAgNTcsICAgICAwLCAgICA4MSwgICAgIDAsICAgIDkzLCAgICAgMCwgICAgOTUsCi0gICAgIDAsICAgICAxLCAgICA0MywgICAgIDAsICAgICAxLCAgICA0NCwgICAgIDAsICAgIDYxLCAgICA1OCwgICAgNDMsCi0gICAgIDAsICAgICAwLCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMCwgICAgNTksICAgIDQ1LCAgICA2MCwgICAgIDAsCi0gICAgNzEsICAgIDk0LCAgICA5MiwgICAgODIsICAgICAwLCAgICAgMCwgICAgNjIsICAgICAwLCAgICA2MywgICAgIDAsCi0gICAgNjIsICAgIDYzLCAgICAgMCwgICAgNjQsICAgICAwLCAgICA2NSwgICAgIDAsICAgICA1LCAgICAgMCwgICAgMTYsCi0gICAgIDAsICAgIDIwLCAgICAgMCwgICAgMTEsICAgICAwLCAgICAxMywgICAgIDAsICAgIDY2LCAgICAgMCwgICAgNzAsCi0gICAgIDAsICAgIDI3LCAgICA0NiwgICAgNjIsICAgIDQ3LCAgICAgMCwgICAgMjEsICAgIDM2LCAgICAgMCwgICAgMjMsCi0gICAgMzYsICAgICAwLCAgICAxMCwgICAgMzYsICAgICAwLCAgICAyMSwgICAgMzYsICAgIDg0LCAgICAgMCwgICAgMjMsCi0gICAgMzYsICAgIDg0LCAgICAgMCwgICAgMTAsICAgIDM2LCAgICAzMSwgICAgIDAsICAgIDEwLCAgICAzMSwgICAgIDAsCi0gICAgMjEsICAgIDg0LCAgICAgMCwgICAgMjMsICAgIDg0LCAgICAgMCwgICAgIDcsICAgICAwLCAgICAxOCwgICAgIDAsCi0gICAgMTQsICAgICAwLCAgICAxNSwgICAgIDAsICAgIDE5LCAgICAgMCwgICAgMjQsICAgICAwLCAgICAxMiwgICAgIDAsCi0gICAgIDksICAgICAwLCAgICAyNSwgICAgIDAsICAgICA2LCAgICAgMCwgICAgNDAsICAgICAwLCAgICA0OCwgICAgNjgsCi0gICAgIDAsICAgICAwLCAgICA2OSwgICAgIDAsICAgIDcwLCAgICAgMCwgICAgNjksICAgIDcwLCAgICAgMCwgICAgIDgsCi0gICAgIDAsICAgIDI2LCAgICAgMCwgICAgMzAsICAgICAwLCAgICAxNywgICAgIDAsICAgIDY3LCAgICA3MSwgICAgIDAsCi0gICAgNzIsICAgICAwLCAgICAzNiwgICAgIDAsICAgIDcyLCAgICA0NiwgICAgNzUsICAgIDQ3LCAgICAgMCwgICAgNzIsCi0gICAgNDYsICAgICAxLCAgICA0NywgICAgIDAsICAgIDcyLCAgICAzMiwgICAgIDAsICAgIDQ2LCAgICA3MSwgICAgNDcsCi0gICAgIDAsICAgIDQ2LCAgICAgMSwgICAgNDcsICAgICAwLCAgICA2NywgICAgNzMsICAgICAwLCAgICA3NCwgICAgIDAsCi0gICAgMzYsICAgICAwLCAgICA0MCwgICAgIDAsICAgIDc0LCAgICA0NiwgICAgNzUsICAgIDQ3LCAgICAgMCwgICAgNzQsCi0gICAgNDYsICAgICAxLCAgICA0NywgICAgIDAsICAgIDc0LCAgICAzMiwgICAgIDAsICAgIDQ2LCAgICA3MywgICAgNDcsCi0gICAgIDAsICAgIDQ2LCAgICAgMSwgICAgNDcsICAgICAwLCAgICA3NiwgICAgMzUsICAgICAwLCAgICA3NiwgICAgIDAsCi0gICAgNzcsICAgIDQ1LCAgICAzNSwgICAgIDAsICAgICAwLCAgICA3NywgICAgIDAsICAgIDc4LCAgICAgMCwgICAgNzcsCi0gICAgNDUsICAgIDc4LCAgICAgMCwgICAgNjIsICAgIDc5LCAgICAgMCwgICAgNjcsICAgIDc5LCAgICAgMCwgICAgODAsCi0gICAgIDAsICAgICAwLCAgICAzNiwgICAgIDAsICAgIDQwLCAgICAgMCwgICAgODAsICAgIDQ2LCAgICA3NSwgICAgNDcsCi0gICAgIDAsICAgIDgwLCAgICA0NiwgICAgIDEsICAgIDQ3LCAgICAgMCwgICAgODAsICAgIDMyLCAgICAgMCwgICAgNDYsCi0gICAgNzksICAgIDQ3LCAgICAgMCwgICAgNDYsICAgICAxLCAgICA0NywgICAgIDAsICAgIDYxLCAgICA3MSwgICAgMzEsCi0gICAgIDAsICAgICAwLCAgICA4MywgICAgIDAsICAgIDQ5LCAgICAzMywgICAgIDAsICAgIDUwLCAgICA4NSwgICAgNDQsCi0gICAgIDAsICAgIDUwLCAgICAgMSwgICAgNDQsICAgICAwLCAgICAgMCwgICAgODYsICAgICAwLCAgICA4NywgICAgIDAsCi0gICAgODYsICAgIDg3LCAgICAgMCwgICAgNjEsICAgIDg4LCAgICA0MywgICAgIDAsICAgICAxLCAgICA0MywgICAgIDAsCi0gICAgIDAsICAgIDg5LCAgICAgMCwgICAgOTAsICAgICAwLCAgICA4OSwgICAgNDUsICAgIDkwLCAgICAgMCwgICAgNzMsCi0gICAgOTIsICAgICAwLCAgICAzNiwgICAgOTEsICAgICAwLCAgICA5MSwgICAgIDAsICAgIDUxLCAgICAzMywgICAgIDAsCi0gICAgIDAsICAgIDMwLCAgICAgMCwgICAgMjksICAgIDQzLCAgICAgMCwgICAgIDAsICAgIDI5LCAgICAgMCwgICAgMjgsCi0gICAgNDYsICAgIDM2LCAgICA0NywgICAgNDMsICAgICAwCi19OwotCi0jZW5kaWYKLQotI2lmIFlZREVCVUcgIT0gMAotc3RhdGljIGNvbnN0IHNob3J0IHl5cmxpbmVbXSA9IHsgMCwKLSAgIDEwMSwgICAxMDMsICAgMTA2LCAgIDEwOSwgICAxMTIsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwKLSAgIDExOSwgICAxMjAsICAgMTIzLCAgIDEzNywgICAxMzksICAgMTQyLCAgIDE1MSwgICAxNjMsICAgMTY5LCAgIDE3MSwKLSAgIDE3NCwgICAxNzYsICAgMTc5LCAgIDE4NiwgICAxODksICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDE5NywKLSAgIDE5OSwgICAyMDAsICAgMjA0LCAgIDIwNiwgICAyMDgsICAgMjEyLCAgIDIxOSwgICAyMjYsICAgMjM1LCAgIDIzNiwKLSAgIDIzNywgICAyNDAsICAgMjQyLCAgIDI0MywgICAyNDQsICAgMjQ1LCAgIDI0NiwgICAyNDcsICAgMjQ4LCAgIDI0OSwKLSAgIDI1MCwgICAyNTEsICAgMjU0LCAgIDI1OSwgICAyNjEsICAgMjY0LCAgIDI2NiwgICAyNjksICAgMjcwLCAgIDI3MCwKLSAgIDI3MSwgICAyNzgsICAgMjgwLCAgIDI4MywgICAyOTMsICAgMjk1LCAgIDI5NywgICAyOTksICAgMzAxLCAgIDMwNywKLSAgIDMwOSwgICAzMTIsICAgMzE0LCAgIDMxNSwgICAzMTcsICAgMzE5LCAgIDMyMSwgICAzMjMsICAgMzI3LCAgIDMyOSwKLSAgIDMzMCwgICAzMzMsICAgMzM1LCAgIDMzOCwgICAzNDAsICAgMzQ0LCAgIDM0OSwgICAzNTIsICAgMzU1LCAgIDM1NywKLSAgIDM2NSwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc3LCAgIDM4MSwgICAzOTAsICAgMzkyLCAgIDM5NiwKLSAgIDQwMSwgICA0MDMsICAgNDA2LCAgIDQwOCwgICA0MTEsICAgNDEzLCAgIDQxNiwgICA0MTksICAgNDIzLCAgIDQyNSwKLSAgIDQyOCwgICA0MzAsICAgNDMzLCAgIDQzNSwgICA0MzYsICAgNDM5LCAgIDQ0MywgICA0NDUsICAgNDQ4LCAgIDQ1MiwKLSAgIDQ1NCwgICA0NTcKLX07Ci0jZW5kaWYKLQotCi0jaWYgWVlERUJVRyAhPSAwIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB5eXRuYW1lW10gPSB7ICAgIiQiLCJlcnJvciIsIiR1bmRlZmluZWQuIiwiQVNNX0tFWVciLAotIkFUVFJJQlVURV9LRVlXIiwiQVVUT19LRVlXIiwiQk9PTF9LRVlXIiwiQ0hBUl9LRVlXIiwiQ09OU1RfS0VZVyIsIkRPVUJMRV9LRVlXIiwKLSJFTlVNX0tFWVciLCJFWFRFUk5fS0VZVyIsIkZMT0FUX0tFWVciLCJJTkxJTkVfS0VZVyIsIklOVF9LRVlXIiwiTE9OR19LRVlXIiwKLSJSRUdJU1RFUl9LRVlXIiwiUkVTVFJJQ1RfS0VZVyIsIlNIT1JUX0tFWVciLCJTSUdORURfS0VZVyIsIlNUQVRJQ19LRVlXIiwiU1RSVUNUX0tFWVciLAotIlRZUEVERUZfS0VZVyIsIlVOSU9OX0tFWVciLCJVTlNJR05FRF9LRVlXIiwiVk9JRF9LRVlXIiwiVk9MQVRJTEVfS0VZVyIsIlRZUEVPRl9LRVlXIiwKLSJFWFBPUlRfU1lNQk9MX0tFWVciLCJBU01fUEhSQVNFIiwiQVRUUklCVVRFX1BIUkFTRSIsIkJSQUNFX1BIUkFTRSIsIkJSQUNLRVRfUEhSQVNFIiwKLSJFWFBSRVNTSU9OX1BIUkFTRSIsIkNIQVIiLCJET1RTIiwiSURFTlQiLCJJTlQiLCJSRUFMIiwiU1RSSU5HIiwiVFlQRSIsIk9USEVSIiwKLSJGSUxFTkFNRSIsIic7JyIsIid9JyIsIicsJyIsIicoJyIsIicpJyIsIicqJyIsIic9JyIsIid7JyIsIic6JyIsImRlY2xhcmF0aW9uX3NlcSIsCi0iZGVjbGFyYXRpb24iLCJAMSIsImRlY2xhcmF0aW9uMSIsIkAyIiwic2ltcGxlX2RlY2xhcmF0aW9uIiwiaW5pdF9kZWNsYXJhdG9yX2xpc3Rfb3B0IiwKLSJpbml0X2RlY2xhcmF0b3JfbGlzdCIsImluaXRfZGVjbGFyYXRvciIsImRlY2xfc3BlY2lmaWVyX3NlcV9vcHQiLCJkZWNsX3NwZWNpZmllcl9zZXEiLAotImRlY2xfc3BlY2lmaWVyIiwic3RvcmFnZV9jbGFzc19zcGVjaWZpZXIiLCJ0eXBlX3NwZWNpZmllciIsInNpbXBsZV90eXBlX3NwZWNpZmllciIsCi0icHRyX29wZXJhdG9yIiwiY3Zhcl9xdWFsaWZpZXJfc2VxX29wdCIsImN2YXJfcXVhbGlmaWVyX3NlcSIsImN2YXJfcXVhbGlmaWVyIiwKLSJkZWNsYXJhdG9yIiwiZGlyZWN0X2RlY2xhcmF0b3IiLCJuZXN0ZWRfZGVjbGFyYXRvciIsImRpcmVjdF9uZXN0ZWRfZGVjbGFyYXRvciIsCi0icGFyYW1ldGVyX2RlY2xhcmF0aW9uX2NsYXVzZSIsInBhcmFtZXRlcl9kZWNsYXJhdGlvbl9saXN0X29wdCIsInBhcmFtZXRlcl9kZWNsYXJhdGlvbl9saXN0IiwKLSJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLCJtX2Fic3RyYWN0X2RlY2xhcmF0b3IiLCJkaXJlY3RfbV9hYnN0cmFjdF9kZWNsYXJhdG9yIiwKLSJmdW5jdGlvbl9kZWZpbml0aW9uIiwiaW5pdGlhbGl6ZXJfb3B0IiwiaW5pdGlhbGl6ZXIiLCJjbGFzc19ib2R5IiwibWVtYmVyX3NwZWNpZmljYXRpb25fb3B0IiwKLSJtZW1iZXJfc3BlY2lmaWNhdGlvbiIsIm1lbWJlcl9kZWNsYXJhdGlvbiIsIm1lbWJlcl9kZWNsYXJhdG9yX2xpc3Rfb3B0IiwibWVtYmVyX2RlY2xhcmF0b3JfbGlzdCIsCi0ibWVtYmVyX2RlY2xhcmF0b3IiLCJtZW1iZXJfYml0ZmllbGRfZGVjbGFyYXRvciIsImF0dHJpYnV0ZV9vcHQiLCJhc21fZGVmaW5pdGlvbiIsCi0iYXNtX3BocmFzZV9vcHQiLCJleHBvcnRfZGVmaW5pdGlvbiIsIE5VTEwKLX07Ci0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9IHsgICAgIDAsCi0gICAgNTIsICAgIDUyLCAgICA1NCwgICAgNTMsICAgIDU2LCAgICA1NSwgICAgNTUsICAgIDU1LCAgICA1NSwgICAgNTUsCi0gICAgNTUsICAgIDU1LCAgICA1NywgICAgNTgsICAgIDU4LCAgICA1OSwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjEsCi0gICAgNjIsICAgIDYyLCAgICA2MywgICAgNjMsICAgIDY0LCAgICA2NCwgICAgNjQsICAgIDY0LCAgICA2NCwgICAgNjUsCi0gICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjUsCi0gICAgNjUsICAgIDY2LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjYsCi0gICAgNjYsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY4LCAgICA2OSwgICAgNjksICAgIDcwLCAgICA3MCwgICAgNzAsCi0gICAgNzAsICAgIDcxLCAgICA3MSwgICAgNzIsICAgIDcyLCAgICA3MiwgICAgNzIsICAgIDcyLCAgICA3MiwgICAgNzMsCi0gICAgNzMsICAgIDc0LCAgICA3NCwgICAgNzQsICAgIDc0LCAgICA3NCwgICAgNzQsICAgIDc0LCAgICA3NSwgICAgNzUsCi0gICAgNzUsICAgIDc2LCAgICA3NiwgICAgNzcsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDc5LCAgICA4MCwgICAgODAsCi0gICAgODAsICAgIDgwLCAgICA4MCwgICAgODAsICAgIDgwLCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MiwgICAgODMsCi0gICAgODQsICAgIDg0LCAgICA4NSwgICAgODUsICAgIDg2LCAgICA4NiwgICAgODcsICAgIDg3LCAgICA4OCwgICAgODgsCi0gICAgODksICAgIDg5LCAgICA5MCwgICAgOTAsICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkyLCAgICA5MywgICAgOTQsCi0gICAgOTQsICAgIDk1Ci19OwotCi1zdGF0aWMgY29uc3Qgc2hvcnQgeXlyMltdID0geyAgICAgMCwKLSAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMSwKLSAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgMSwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwKLSAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDQsICAgICA0LCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwKLSAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDQsICAgICAyLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMSwKLSAgICAgMywgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAwLCAgICAgMSwKLSAgICAgMSwgICAgIDQsICAgICA0LCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDAsICAgICAxLCAgICAgMiwKLSAgICAgMywgICAgIDMsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMSwKLSAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMCwKLSAgICAgMSwgICAgIDUKLX07Ci0KLXN0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmFjdFtdID0geyAgICAgMywKLSAgICAgMywgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAsICAgIDI1LCAgICA1MSwgICAgNDIsICAgIDU4LCAgICA0OSwKLSAgICAgMCwgICAgMjgsICAgIDQ4LCAgICAyOSwgICAgNDQsICAgIDQ1LCAgICAyNiwgICAgNjEsICAgIDQzLCAgICA0NiwKLSAgICAyNywgICAgIDAsICAgICA1LCAgICAgMCwgICAgNDcsICAgIDUwLCAgICA1OSwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICA2MCwgICAgNTIsICAgICA0LCAgICAgNywgICAgMTQsICAgIDIwLCAgICAyMSwgICAgMjMsICAgIDI0LCAgICAzMCwKLSAgICAzMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAzOSwgICAgMzUsICAgIDMzLCAgICAgMCwKLSAgICA0MCwgICAgMTksICAgIDM0LCAgICA0MSwgICAgIDAsICAgICAwLCAgIDExOSwgICAgNjQsICAgICAwLCAgICA1NCwKLSAgICAgMCwgICAgMTUsICAgIDE2LCAgICAgMCwgICAxMjAsICAgIDYzLCAgICAyMiwgICAgMzgsICAgIDM2LCAgICAgMCwKLSAgIDEwOSwgICAgIDAsICAgICAwLCAgIDEwNSwgICAgIDYsICAgIDE0LCAgICAzNywgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMCwgICAgNTMsICAgIDU1LCAgICA1NiwgICAgMTMsICAgICAwLCAgICA2MiwgICAxMjEsICAgIDk3LCAgIDExNywKLSAgICA2NywgICAgIDAsICAgMTA4LCAgIDEwMiwgICAgNzIsICAgIDczLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNywKLSAgICA3MSwgICAgIDAsICAgMTEwLCAgIDExMSwgICAxMTUsICAgMTAxLCAgICAgMCwgICAxMDYsICAgMTIwLCAgICAzMiwKLSAgICAgMCwgICAgNjksICAgIDY4LCAgICA1NywgICAgMTcsICAgMTE4LCAgICA5OCwgICAgIDAsICAgIDg5LCAgICAgMCwKLSAgICA4MCwgICAgODMsICAgIDg0LCAgIDExNCwgICAgIDAsICAgIDcyLCAgICAgMCwgICAxMTYsICAgIDcwLCAgIDExMywKLSAgICA3NiwgICAgIDAsICAgMTA3LCAgICAgMCwgICAxMjIsICAgICAwLCAgICAxOCwgICAgOTksICAgIDY2LCAgICA5MCwKLSAgICA1MiwgICAgIDAsICAgIDg5LCAgICA4NiwgICAgODgsICAgIDY1LCAgICA3OSwgICAgIDAsICAgIDc4LCAgICA3NywKLSAgICAgMCwgICAgIDAsICAgMTEyLCAgIDEwMCwgICAgIDAsICAgIDkxLCAgICAgMCwgICAgODcsICAgIDk0LCAgICAgMCwKLSAgICA4MSwgICAgODUsICAgIDc1LCAgICA3NCwgICAgOTYsICAgIDk1LCAgICAgMCwgICAgIDAsICAgIDkzLCAgICA5MiwKLSAgICAgMCwgICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmdvdG9bXSA9IHsgICAgIDEsCi0gICAgIDIsICAgICAzLCAgICAzMywgICAgNTIsICAgIDM0LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA3MSwgICAgMzYsCi0gICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDY0LCAgICA4MiwgICAgODMsICAgIDQxLCAgIDEwOSwgICAgNjYsCi0gICAxMDAsICAgMTAxLCAgIDEyMCwgICAxMjEsICAgMTIyLCAgIDEyMywgICAxNDQsICAgMTQ1LCAgICA0MiwgICAxMzcsCi0gICAxMzgsICAgIDUxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMTcsCi0gICAgNDMsICAgIDkwLCAgICA0NAotfTsKLQotc3RhdGljIGNvbnN0IHNob3J0IHl5cGFjdFtdID0gey0zMjc2OCwKLSAgICAxNSwtMzI3NjgsICAgMTk3LC0zMjc2OCwgICAgMjMsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKLSAgIC0xOCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKLS0zMjc2OCwgICAtMjgsLTMyNzY4LCAgIC0yNSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAtMjYsICAgLTIyLCAgIC0xMiwKLS0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAgNDksICAgNDkzLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKLS0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwgICAgMjcsICAgIC04LCAgIDEwMSwKLS0zMjc2OCwgICA0OTMsICAgIC04LC0zMjc2OCwgICA0OTMsICAgIDEwLC0zMjc2OCwtMzI3NjgsICAgIDExLCAgICAgOSwKLSAgICAxOCwgICAgMjYsLTMyNzY4LCAgICA0OSwgICAtMTUsICAgLTEzLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICAyNSwKLSAgICAyNCwgICAgNDgsICAgMTQ5LC0zMjc2OCwtMzI3NjgsICAgIDQ5LC0zMjc2OCwgICA0MTQsICAgIDM5LCAgICA0MCwKLSAgICA0NywtMzI3NjgsICAgICA5LC0zMjc2OCwtMzI3NjgsICAgIDQ5LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICA2NiwKLS0zMjc2OCwgICAyNDEsLTMyNzY4LC0zMjc2OCwgICAgNTAsLTMyNzY4LCAgICAgNSwgICAgNjUsICAgIDQyLCAgICA2NiwKLSAgICAxNywgICAgNTYsICAgIDU1LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICA2MCwtMzI3NjgsICAgIDc1LC0zMjc2OCwKLSAgICA4MCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICA4MSwgICAgODIsICAgMzcwLCAgICA4NSwKLSAgICA5OCwgICAgODksLTMyNzY4LC0zMjc2OCwgICAgODgsLTMyNzY4LCAgICA5MSwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKLS0zMjc2OCwgICAyODQsLTMyNzY4LCAgICAyNCwtMzI3NjgsICAgMTAzLC0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwKLS0zMjc2OCwgICAgIDgsICAgIDQzLC0zMjc2OCwgICAgMzAsLTMyNzY4LC0zMjc2OCwgICA0NTcsLTMyNzY4LC0zMjc2OCwKLSAgICA5MiwgICAgOTMsLTMyNzY4LC0zMjc2OCwgICAgOTUsLTMyNzY4LCAgICA5NiwtMzI3NjgsLTMyNzY4LCAgIDMyNywKLS0zMjc2OCwtMzI3NjgsLTMyNzY4LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgICA5OSwgICAxMDQsLTMyNzY4LC0zMjc2OCwKLSAgIDE0OCwtMzI3NjgKLX07Ci0KLXN0YXRpYyBjb25zdCBzaG9ydCB5eXBnb3RvW10gPSB7LTMyNzY4LAotICAgMTUyLC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIDExOSwtMzI3NjgsLTMyNzY4LCAgICA5NCwgICAgIDAsICAgLTU1LAotICAgLTM1LC0zMjc2OCwtMzI3NjgsLTMyNzY4LCAgIC02OSwtMzI3NjgsLTMyNzY4LCAgIC01NiwgICAtMzAsLTMyNzY4LAotICAgLTc2LC0zMjc2OCwgIC0xMjIsLTMyNzY4LC0zMjc2OCwgICAgMjksICAgLTYyLC0zMjc2OCwtMzI3NjgsLTMyNzY4LAotLTMyNzY4LCAgIC0xNywtMzI3NjgsLTMyNzY4LCAgIDEwNSwtMzI3NjgsLTMyNzY4LCAgICA1MiwgICAgODYsICAgIDgzLAotLTMyNzY4LC0zMjc2OCwtMzI3NjgKLX07Ci0KLQotI2RlZmluZQlZWUxBU1QJCTUzMwotCi0KLXN0YXRpYyBjb25zdCBzaG9ydCB5eXRhYmxlW10gPSB7ICAgIDc4LAotICAgIDY3LCAgICA5OSwgICAgMzUsICAgIDg0LCAgICA2NSwgICAxMjUsICAgIDU0LCAgICA0OSwgICAxNTUsICAgMTUyLAotICAgIDUzLCAgICA4MCwgICAgNDcsICAgIDg4LCAgIDE3MSwgICAgODksICAgICA5LCAgICA0OCwgICAgOTEsICAgIDU1LAotICAgMTI3LCAgICA1MCwgICAxMjksICAgIDU2LCAgICA1MCwgICAgMTgsICAgMTE0LCAgICA5OSwgICAgODEsICAgIDk5LAotICAgIDU3LCAgICA2OSwgICAgOTIsICAgIDg3LCAgICAyNywgICAgNzcsICAgMTE5LCAgIDE2OCwgICAgMzEsICAgLTg5LAotICAgMTI2LCAgICA1MCwgICAgNjcsICAgMTQwLCAgICA5NiwgICAgNzksICAgIDU4LCAgIDE1NiwgICAxMzEsICAgMTQzLAotICAgIDk3LCAgICA3NiwgICAgNjAsICAgMTQyLCAgIC04OSwgICAgNjAsICAgIDU5LCAgICA2OCwgICAgNjAsICAgIDk1LAotICAgIDg1LCAgIDE1OSwgICAxMzIsICAgIDk2LCAgICA5OSwgICAgNDUsICAgIDQ2LCAgICA5MywgICAgOTQsICAgIDk3LAotICAgIDg2LCAgICA2MCwgICAxNDMsICAgMTQzLCAgICA5OCwgICAxNjAsICAgMTE5LCAgIDEyNiwgICAxNDAsICAgMTU3LAotICAgMTU4LCAgICA5NiwgICAxNTYsICAgIDY3LCAgICA1OCwgICAxMTEsICAgMTEyLCAgICA5NywgICAxNDIsICAgIDYwLAotICAgIDYwLCAgIDEwNiwgICAxMTksICAgMTEzLCAgICA1OSwgICAxMTYsICAgIDYwLCAgIDEyOCwgICAxMzMsICAgMTM0LAotICAgIDk4LCAgICA3MCwgICAgOTMsICAgIDg4LCAgIDExOSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAotICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgIDIxLCAgICAyMiwgICAxMzUsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAxMzksICAgMTM2LAotICAgIDMxLCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNTQsICAgLTE5LCAgIDE1MCwgICAxNjMsICAgMTY0LAotICAgIDMyLCAgIDE2NSwgICAxNjYsICAgLTE5LCAgLTEwMywgICAxNjksICAgLTE5LCAgIDE3MiwgICAtMTksICAgMTA3LAotICAgMTcwLCAgIC0xOSwgICAgIDQsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgIDc1LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgMTYyLCAgIDEwOCwgICAgMzEsICAgMTE1LAotICAgMTI0LCAgICAgMCwgICAxMzAsICAgICAwLCAgIC0xOSwgICAxNTMsICAgICAwLCAgICAgMCwgICAgMzIsICAgICAwLAotICAgICAwLCAgIC0xOSwgIC0xMDQsICAgICAwLCAgIC0xOSwgICAgIDAsICAgLTE5LCAgICAgNSwgICAgIDAsICAgLTE5LAotICAgICAwLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAwLCAgICAgMCwgICAtMTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsICAgLTE5LAotICAgICAwLCAgIDExOCwgICAtMTksICAgICAwLCAgIC0xOSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAotICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgICAwLAotICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAtODIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE1MSwgICAgIDAsICAgICAwLCAgIC04MiwgICAgIDYsICAgICA3LAotICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAotICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgIDI4LCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAtODIsICAgICAwLAotICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2NywgICAgIDAsICAgICAwLAotICAgLTgyLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAwLCAgIC04MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAwLCAgICAgMCwgICAgIDAsICAgLTgyLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAotICAgIDIyLCAgICAgMCwgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgIDMxLAotICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLAotICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDIsICAgICAwLCAgICA2MCwgICAgIDYsICAgICA3LAotICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAotICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgIDI4LCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgMTEwLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAwLCAgIDE2MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgNiwgICAgIDcsICAgICA4LAotICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAwLCAgICAgMCwgICAgMzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAwLCAgICAgMCwgICAgMzIKLX07Ci0KLXN0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPSB7ICAgIDU1LAotICAgIDM2LCAgICA3MSwgICAgIDMsICAgIDYwLCAgICAzNSwgICAgIDEsICAgIDI0LCAgICAzNiwgICAgIDEsICAgMTMyLAotICAgIDM2LCAgICAgMSwgICAgMzEsICAgIDI5LCAgICAgMCwgICAgMzEsICAgICA4LCAgICAzNiwgICAgMzIsICAgIDQ2LAotICAgIDk3LCAgICA1MCwgICAgOTksICAgIDQ2LCAgICA1MCwgICAgMTcsICAgIDgzLCAgICA5NywgICAgNTksICAgIDk5LAotICAgIDQzLCAgICA0OSwgICAgNDYsICAgIDY0LCAgICAyNiwgICAgNTMsICAgIDkyLCAgIDE2MCwgICAgMzAsICAgIDMyLAotICAgIDM2LCAgICA1MCwgICAgNzgsICAgIDM2LCAgICA0MCwgICAgMzYsICAgIDM2LCAgICA0MCwgICAgMzIsICAgMTE5LAotICAgIDQ2LCAgICA1MiwgICAgNDgsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ2LCAgICAzMSwgICAgNDgsICAgIDM2LAotICAgIDQzLCAgICAzMiwgICAgNDYsICAgIDQwLCAgIDEzNCwgICAgNDMsICAgIDQ0LCAgICA0MywgICAgNDQsICAgIDQ2LAotICAgIDQ1LCAgICA0OCwgICAxNDIsICAgMTQzLCAgICA1MSwgICAgNDYsICAgMTMyLCAgICAzNiwgICAgMzYsICAgMTQyLAotICAgMTQzLCAgICA0MCwgICAgNDAsICAgMTE5LCAgICAzNiwgICAgNDcsICAgIDQ3LCAgICA0NiwgICAgNDYsICAgIDQ4LAotICAgIDQ4LCAgICA0NCwgICAxNDgsICAgIDQ3LCAgICA0NiwgICAgMzAsICAgIDQ4LCAgICAzMywgICAgNDMsICAgIDQ1LAotICAgIDUxLCAgICAgMSwgICAgNDMsICAgIDI5LCAgIDE2MCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAotICAgIDIwLCAgICAyMSwgICAgNDMsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgNDcsICAgIDQ5LAotICAgIDMwLCAgICA0NywgICAgMzUsICAgIDQ1LCAgICA0NywgICAgMzMsICAgIDM2LCAgICA0NywgICAgNDcsICAgIDQ3LAotICAgIDQwLCAgICA0NywgICAgNDcsICAgIDQzLCAgICA0NCwgICAgNDcsICAgIDQ2LCAgICAgMCwgICAgNDgsICAgICAxLAotICAgIDQ3LCAgICA1MSwgICAgIDEsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAotICAgIDUyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgMTQ4LCAgICA3MywgICAgMzAsICAgIDg2LAotICAgIDk1LCAgICAtMSwgICAxMDAsICAgIC0xLCAgICAzNiwgICAxMzQsICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLAotICAgIC0xLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ4LCAgICAgMSwgICAgLTEsICAgIDUxLAotICAgIC0xLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIC0xLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLAotICAgIC0xLCAgICAgMSwgICAgNDYsICAgIC0xLCAgICA0OCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAotICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsICAgIC0xLAotICAgIDMwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIDQwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMSwgICAgLTEsICAgIC0xLCAgICA0NywgICAgIDUsICAgICA2LAotICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgIDI3LCAgICAtMSwgICAgLTEsICAgIDMwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzUsICAgIC0xLAotICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMSwgICAgLTEsICAgIC0xLAotICAgIDQ3LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLAotICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAtMSwgICAgLTEsICAgIDMwLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIC0xLCAgICAzNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ3LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAotICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAtMSwgICAgLTEsICAgIDMwLAotICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLAotICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDYsICAgIC0xLCAgICA0OCwgICAgIDUsICAgICA2LAotICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgIDI3LCAgICAtMSwgICAgLTEsICAgIDMwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIDQ3LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLAotICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAtMSwgICAgLTEsICAgIDMwLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIC0xLCAgICAzNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAgNSwgICAgIDYsICAgICA3LAotICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAotICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgIC0xLCAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgIC0xLCAgICAtMSwgICAgNDAKLX07Ci0vKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuICAqLwotI2xpbmUgMyAiL3Vzci9saWIvYmlzb24uc2ltcGxlIgotLyogVGhpcyBmaWxlIGNvbWVzIGZyb20gYmlzb24tMS4yOC4gICovCi0KLS8qIFNrZWxldG9uIG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGludG8gYQotICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUgd2l0aG91dCByZXN0cmljdGlvbi4KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAgIGluIHZlcnNpb24gMS4yNCBvZiBCaXNvbi4gICovCi0KLS8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyCi0gIHdoZW4gdGhlICVzZW1hbnRpY19wYXJzZXIgZGVjbGFyYXRpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hci4KLSAgSXQgd2FzIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiBieSBzaW1wbGlmeWluZyB0aGUgaGFpcnkgcGFyc2VyCi0gIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCi0KLSNpZm5kZWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jaWZkZWYgYWxsb2NhCi0jZGVmaW5lIFlZU1RBQ0tfVVNFX0FMTE9DQQotI2Vsc2UgLyogYWxsb2NhIG5vdCBkZWZpbmVkICovCi0jaWZkZWYgX19HTlVDX18KLSNkZWZpbmUgWVlTVEFDS19VU0VfQUxMT0NBCi0jZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCi0jZWxzZSAvKiBub3QgR05VIEMuICAqLwotI2lmICghZGVmaW5lZCAoX19TVERDX18pICYmIGRlZmluZWQgKHNwYXJjKSkgfHwgZGVmaW5lZCAoX19zcGFyY19fKSB8fCBkZWZpbmVkIChfX3NwYXJjKSB8fCBkZWZpbmVkIChfX3NnaSkgfHwgKGRlZmluZWQgKF9fc3VuKSAmJiBkZWZpbmVkIChfX2kzODYpKQotI2RlZmluZSBZWVNUQUNLX1VTRV9BTExPQ0EKLSNpbmNsdWRlIDxhbGxvY2EuaD4KLSNlbHNlIC8qIG5vdCBzcGFyYyAqLwotLyogV2UgdGhpbmsgdGhpcyB0ZXN0IGRldGVjdHMgV2F0Y29tIGFuZCBNaWNyb3NvZnQgQy4gICovCi0vKiBUaGlzIHVzZWQgdG8gdGVzdCBNU0RPUywgYnV0IHRoYXQgaXMgYSBiYWQgaWRlYQotICAgc2luY2UgdGhhdCBzeW1ib2wgaXMgaW4gdGhlIHVzZXIgbmFtZXNwYWNlLiAgKi8KLSNpZiAoZGVmaW5lZCAoX01TRE9TKSB8fCBkZWZpbmVkIChfTVNET1NfKSkgJiYgIWRlZmluZWQgKF9fVFVSQk9DX18pCi0jaWYgMCAvKiBObyBuZWVkIGZvciBtYWxsb2MuaCwgd2hpY2ggcG9sbHV0ZXMgdGhlIG5hbWVzcGFjZTsKLQkgaW5zdGVhZCwganVzdCBkb24ndCB1c2UgYWxsb2NhLiAgKi8KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNlbmRpZgotI2Vsc2UgLyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCi0jaWYgZGVmaW5lZChfQUlYKQotLyogSSBkb24ndCBrbm93IHdoYXQgdGhpcyB3YXMgbmVlZGVkIGZvciwgYnV0IGl0IHBvbGx1dGVzIHRoZSBuYW1lc3BhY2UuCi0gICBTbyBJIHR1cm5lZCBpdCBvZmYuICAgcm1zLCAyIE1heSAxOTk3LiAgKi8KLS8qICNpbmNsdWRlIDxtYWxsb2MuaD4gICovCi0gI3ByYWdtYSBhbGxvY2EKLSNkZWZpbmUgWVlTVEFDS19VU0VfQUxMT0NBCi0jZWxzZSAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18sIG9yIF9BSVggKi8KLSNpZiAwCi0jaWZkZWYgX19ocHV4IC8qIGhhaWJsZUBpbG9nLmZyIHNheXMgdGhpcyB3b3JrcyBmb3IgSFBVWCA5LjA1IGFuZCB1cCwKLQkJIGFuZCBvbiBIUFVYIDEwLiAgRXZlbnR1YWxseSB3ZSBjYW4gdHVybiB0aGlzIG9uLiAgKi8KLSNkZWZpbmUgWVlTVEFDS19VU0VfQUxMT0NBCi0jZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCi0jZW5kaWYgLyogX19ocHV4ICovCi0jZW5kaWYKLSNlbmRpZiAvKiBub3QgX0FJWCAqLwotI2VuZGlmIC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0NfXyAqLwotI2VuZGlmIC8qIG5vdCBzcGFyYyAqLwotI2VuZGlmIC8qIG5vdCBHTlUgQyAqLwotI2VuZGlmIC8qIGFsbG9jYSBub3QgZGVmaW5lZCAqLwotI2VuZGlmIC8qIFlZU1RBQ0tfVVNFX0FMTE9DQSBub3QgZGVmaW5lZCAqLwotCi0jaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQogI2Vsc2UKLSNkZWZpbmUgWVlTVEFDS19BTExPQyBtYWxsb2MKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCiAjZW5kaWYKIAotLyogTm90ZTogdGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBkb2xsYXIgc2lnbiBpbiB0aGlzIGZpbGUuCi0gICBJdCBpcyByZXBsYWNlZCBieSB0aGUgbGlzdCBvZiBhY3Rpb25zLCBlYWNoIGFjdGlvbgotICAgYXMgb25lIGNhc2Ugb2YgdGhlIHN3aXRjaC4gICovCisjaWYgISBkZWZpbmVkIChZWVNUWVBFKSAmJiAhIGRlZmluZWQgKFlZU1RZUEVfSVNfREVDTEFSRUQpCit0eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyogTGluZSAyMTMgb2YgeWFjYy5jLiAgKi8KKyNsaW5lIDIwMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS5jIgorCisjaWYgISBkZWZpbmVkICh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgWVlGUkVFCisjICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgZW5kaWYKKyMgaWZuZGVmIFlZTUFMTE9DCisjICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjIGVuZGlmCisKKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlICgwKQorIyBlbHNlCisjICBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjICBlbmRpZgorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkICh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCAoeXlvdmVyZmxvdykgXAorICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAorCSB8fCAoZGVmaW5lZCAoWVlTVFlQRV9JU19UUklWSUFMKSAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7CisgIHNob3J0IGludCB5eXNzOworICBZWVNUWVBFIHl5dnM7CisgIH07CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQgaW50KSArIHNpemVvZiAoWVlTVFlQRSkpCQkJXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCAoX19HTlVDX18pICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIHJlZ2lzdGVyIFlZU0laRV9UIHl5aTsJCVwKKwkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCisJfQkJCQkJXAorICAgICAgd2hpbGUgKDApCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisgICB0eXBlZGVmIHNpZ25lZCBjaGFyIHl5c2lnbmVkX2NoYXI7CisjZWxzZQorICAgdHlwZWRlZiBzaG9ydCBpbnQgeXlzaWduZWRfY2hhcjsKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICovCisjZGVmaW5lIFlZRklOQUwgIDQKKy8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICA1MzUKKworLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICovCisjZGVmaW5lIFlZTlRPS0VOUyAgNTIKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAqLworI2RlZmluZSBZWU5OVFMgIDQ1CisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICovCisjZGVmaW5lIFlZTlJVTEVTICAxMjQKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICovCisjZGVmaW5lIFlZTlNUQVRFUyAgMTc0CisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDI5NworCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgCQkJCQkJXAorICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgIDQ2LCAgICA0OCwgICAgNDcsICAgICAyLCAgICA0NSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA1MSwgICAgNDMsCisgICAgICAgMiwgICAgNDksICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICA1MCwgICAgIDIsICAgIDQ0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyCit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IHl5cHJoc1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgOCwgICAgIDksICAgIDEyLCAgICAxMywgICAgMTcsICAgIDE5LAorICAgICAgMjEsICAgIDIzLCAgICAyNSwgICAgMjgsICAgIDMxLCAgICAzNSwgICAgMzYsICAgIDM4LCAgICA0MCwgICAgNDQsCisgICAgICA0OSwgICAgNTAsICAgIDUyLCAgICA1NCwgICAgNTcsICAgIDU5LCAgICA2MSwgICAgNjMsICAgIDY1LCAgICA2NywKKyAgICAgIDY5LCAgICA3MSwgICAgNzMsICAgIDc1LCAgICA4MSwgICAgODYsICAgIDg5LCAgICA5MiwgICAgOTUsICAgIDk5LAorICAgICAxMDMsICAgMTA3LCAgIDExMCwgICAxMTMsICAgMTE2LCAgIDExOCwgICAxMjAsICAgMTIyLCAgIDEyNCwgICAxMjYsCisgICAgIDEyOCwgICAxMzAsICAgMTMyLCAgIDEzNCwgICAxMzYsICAgMTM4LCAgIDE0MSwgICAxNDIsICAgMTQ0LCAgIDE0NiwKKyAgICAgMTQ5LCAgIDE1MSwgICAxNTMsICAgMTU1LCAgIDE1NywgICAxNjAsICAgMTYyLCAgIDE2NCwgICAxNjksICAgMTc0LAorICAgICAxNzcsICAgMTgxLCAgIDE4NSwgICAxODgsICAgMTkwLCAgIDE5MiwgICAxOTQsICAgMTk5LCAgIDIwNCwgICAyMDcsCisgICAgIDIxMSwgICAyMTUsICAgMjE4LCAgIDIyMCwgICAyMjQsICAgMjI1LCAgIDIyNywgICAyMjksICAgMjMzLCAgIDIzNiwKKyAgICAgMjM5LCAgIDI0MSwgICAyNDIsICAgMjQ0LCAgIDI0NiwgICAyNTEsICAgMjU2LCAgIDI1OSwgICAyNjMsICAgMjY3LAorICAgICAyNzEsICAgMjcyLCAgIDI3NCwgICAyNzcsICAgMjgxLCAgIDI4NSwgICAyODYsICAgMjg4LCAgIDI5MCwgICAyOTMsCisgICAgIDI5NywgICAzMDAsICAgMzAxLCAgIDMwMywgICAzMDUsICAgMzA5LCAgIDMxMiwgICAzMTUsICAgMzE3LCAgIDMyMCwKKyAgICAgMzIxLCAgIDMyMywgICAzMjYsICAgMzI3LCAgIDMyOQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAqLworc3RhdGljIGNvbnN0IHl5c2lnbmVkX2NoYXIgeXlyaHNbXSA9Cit7CisgICAgICA1MywgICAgIDAsICAgIC0xLCAgICA1NCwgICAgLTEsICAgIDUzLCAgICA1NCwgICAgLTEsICAgIC0xLCAgICA1NSwKKyAgICAgIDU2LCAgICAtMSwgICAgLTEsICAgIDIyLCAgICA1NywgICAgNTgsICAgIC0xLCAgICA1OCwgICAgLTEsICAgIDgyLAorICAgICAgLTEsICAgIDk0LCAgICAtMSwgICAgOTYsICAgIC0xLCAgICAgMSwgICAgNDMsICAgIC0xLCAgICAgMSwgICAgNDQsCisgICAgICAtMSwgICAgNjIsICAgIDU5LCAgICA0MywgICAgLTEsICAgIC0xLCAgICA2MCwgICAgLTEsICAgIDYxLCAgICAtMSwKKyAgICAgIDYwLCAgICA0NSwgICAgNjEsICAgIC0xLCAgICA3MiwgICAgOTUsICAgIDkzLCAgICA4MywgICAgLTEsICAgIC0xLAorICAgICAgNjMsICAgIC0xLCAgICA2NCwgICAgLTEsICAgIDYzLCAgICA2NCwgICAgLTEsICAgIDY1LCAgICAtMSwgICAgNjYsCisgICAgICAtMSwgICAgIDUsICAgIC0xLCAgICAxNiwgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMywKKyAgICAgIC0xLCAgICA2NywgICAgLTEsICAgIDcxLCAgICAtMSwgICAgMjcsICAgIDQ2LCAgICA2MywgICAgNDcsICAgIDQ4LAorICAgICAgLTEsICAgIDI3LCAgICA0NiwgICAgNjMsICAgIDQ4LCAgICAtMSwgICAgMjEsICAgIDM2LCAgICAtMSwgICAgMjMsCisgICAgICAzNiwgICAgLTEsICAgIDEwLCAgICAzNiwgICAgLTEsICAgIDIxLCAgICAzNiwgICAgODUsICAgIC0xLCAgICAyMywKKyAgICAgIDM2LCAgICA4NSwgICAgLTEsICAgIDEwLCAgICAzNiwgICAgMzEsICAgIC0xLCAgICAxMCwgICAgMzEsICAgIC0xLAorICAgICAgMjEsICAgIDg1LCAgICAtMSwgICAgMjMsICAgIDg1LCAgICAtMSwgICAgIDcsICAgIC0xLCAgICAxOCwgICAgLTEsCisgICAgICAxNCwgICAgLTEsICAgIDE1LCAgICAtMSwgICAgMTksICAgIC0xLCAgICAyNCwgICAgLTEsICAgIDEyLCAgICAtMSwKKyAgICAgICA5LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICAgNiwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDcsICAgIDY5LAorICAgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgNzAsICAgIDcxLCAgICAtMSwgICAgIDgsCisgICAgICAtMSwgICAgMjYsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDE3LCAgICAtMSwgICAgNjgsICAgIDcyLCAgICAtMSwKKyAgICAgIDczLCAgICAtMSwgICAgMzYsICAgIC0xLCAgICA3MywgICAgNDYsICAgIDc2LCAgICA0OCwgICAgLTEsICAgIDczLAorICAgICAgNDYsICAgICAxLCAgICA0OCwgICAgLTEsICAgIDczLCAgICAzMiwgICAgLTEsICAgIDQ2LCAgICA3MiwgICAgNDgsCisgICAgICAtMSwgICAgNDYsICAgICAxLCAgICA0OCwgICAgLTEsICAgIDY4LCAgICA3NCwgICAgLTEsICAgIDc1LCAgICAtMSwKKyAgICAgIDM2LCAgICAtMSwgICAgNDAsICAgIC0xLCAgICA3NSwgICAgNDYsICAgIDc2LCAgICA0OCwgICAgLTEsICAgIDc1LAorICAgICAgNDYsICAgICAxLCAgICA0OCwgICAgLTEsICAgIDc1LCAgICAzMiwgICAgLTEsICAgIDQ2LCAgICA3NCwgICAgNDgsCisgICAgICAtMSwgICAgNDYsICAgICAxLCAgICA0OCwgICAgLTEsICAgIDc3LCAgICAzNSwgICAgLTEsICAgIDc3LCAgICAtMSwKKyAgICAgIDc4LCAgICA0NSwgICAgMzUsICAgIC0xLCAgICAtMSwgICAgNzgsICAgIC0xLCAgICA3OSwgICAgLTEsICAgIDc4LAorICAgICAgNDUsICAgIDc5LCAgICAtMSwgICAgNjMsICAgIDgwLCAgICAtMSwgICAgNjgsICAgIDgwLCAgICAtMSwgICAgODEsCisgICAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgNDAsICAgIC0xLCAgICA4MSwgICAgNDYsICAgIDc2LCAgICA0OCwKKyAgICAgIC0xLCAgICA4MSwgICAgNDYsICAgICAxLCAgICA0OCwgICAgLTEsICAgIDgxLCAgICAzMiwgICAgLTEsICAgIDQ2LAorICAgICAgODAsICAgIDQ4LCAgICAtMSwgICAgNDYsICAgICAxLCAgICA0OCwgICAgLTEsICAgIDYyLCAgICA3MiwgICAgMzEsCisgICAgICAtMSwgICAgLTEsICAgIDg0LCAgICAtMSwgICAgNDksICAgIDMzLCAgICAtMSwgICAgNTAsICAgIDg2LCAgICA0NCwKKyAgICAgIC0xLCAgICA1MCwgICAgIDEsICAgIDQ0LCAgICAtMSwgICAgLTEsICAgIDg3LCAgICAtMSwgICAgODgsICAgIC0xLAorICAgICAgODcsICAgIDg4LCAgICAtMSwgICAgNjIsICAgIDg5LCAgICA0MywgICAgLTEsICAgICAxLCAgICA0MywgICAgLTEsCisgICAgICAtMSwgICAgOTAsICAgIC0xLCAgICA5MSwgICAgLTEsICAgIDkwLCAgICA0NSwgICAgOTEsICAgIC0xLCAgICA3NCwKKyAgICAgIDkzLCAgICAtMSwgICAgMzYsICAgIDkyLCAgICAtMSwgICAgOTIsICAgIC0xLCAgICA1MSwgICAgMzMsICAgIC0xLAorICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMjksICAgIDQzLCAgICAtMSwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMjgsCisgICAgICA0NiwgICAgMzYsICAgIDQ4LCAgICA0MywgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgMTAyLCAgIDEwMiwgICAxMDMsICAgMTA3LCAgIDEwNywgICAxMTMsICAgMTEzLCAgIDExNSwgICAxMTYsCisgICAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjQsICAgMTM4LCAgIDEzOSwgICAxNDMsICAgMTUxLCAgIDE2NCwKKyAgICAgMTcwLCAgIDE3MSwgICAxNzUsICAgMTc2LCAgIDE4MCwgICAxODYsICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLAorICAgICAxOTQsICAgMTk4LCAgIDE5OSwgICAyMDAsICAgMjAxLCAgIDIwNSwgICAyMDcsICAgMjA5LCAgIDIxMywgICAyMjAsCisgICAgIDIyNywgICAyMzYsICAgMjM3LCAgIDIzOCwgICAyNDIsICAgMjQzLCAgIDI0NCwgICAyNDUsICAgMjQ2LCAgIDI0NywKKyAgICAgMjQ4LCAgIDI0OSwgICAyNTAsICAgMjUxLCAgIDI1MiwgICAyNTYsICAgMjYxLCAgIDI2MiwgICAyNjYsICAgMjY3LAorICAgICAyNzEsICAgMjcxLCAgIDI3MSwgICAyNzIsICAgMjgwLCAgIDI4MSwgICAyODUsICAgMjk0LCAgIDI5NiwgICAyOTgsCisgICAgIDMwMCwgICAzMDIsICAgMzA5LCAgIDMxMCwgICAzMTQsICAgMzE1LCAgIDMxNiwgICAzMTgsICAgMzIwLCAgIDMyMiwKKyAgICAgMzI0LCAgIDMyOSwgICAzMzAsICAgMzMxLCAgIDMzNSwgICAzMzYsICAgMzQwLCAgIDM0MSwgICAzNDYsICAgMzUxLAorICAgICAzNTMsICAgMzU3LCAgIDM1OCwgICAzNjYsICAgMzcwLCAgIDM3MiwgICAzNzQsICAgMzc2LCAgIDM3OCwgICAzODMsCisgICAgIDM5MiwgICAzOTMsICAgMzk4LCAgIDQwMywgICA0MDQsICAgNDA4LCAgIDQwOSwgICA0MTMsICAgNDE0LCAgIDQxOCwKKyAgICAgNDIwLCAgIDQyNSwgICA0MjYsICAgNDMwLCAgIDQzMSwgICA0MzUsICAgNDM2LCAgIDQzNywgICA0NDEsICAgNDQ1LAorICAgICA0NDYsICAgNDUwLCAgIDQ1NCwgICA0NTUsICAgNDU5Cit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRQorLyogWVlUTk1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIkFTTV9LRVlXIiwgIkFUVFJJQlVURV9LRVlXIiwKKyAgIkFVVE9fS0VZVyIsICJCT09MX0tFWVciLCAiQ0hBUl9LRVlXIiwgIkNPTlNUX0tFWVciLCAiRE9VQkxFX0tFWVciLAorICAiRU5VTV9LRVlXIiwgIkVYVEVSTl9LRVlXIiwgIkZMT0FUX0tFWVciLCAiSU5MSU5FX0tFWVciLCAiSU5UX0tFWVciLAorICAiTE9OR19LRVlXIiwgIlJFR0lTVEVSX0tFWVciLCAiUkVTVFJJQ1RfS0VZVyIsICJTSE9SVF9LRVlXIiwKKyAgIlNJR05FRF9LRVlXIiwgIlNUQVRJQ19LRVlXIiwgIlNUUlVDVF9LRVlXIiwgIlRZUEVERUZfS0VZVyIsCisgICJVTklPTl9LRVlXIiwgIlVOU0lHTkVEX0tFWVciLCAiVk9JRF9LRVlXIiwgIlZPTEFUSUxFX0tFWVciLAorICAiVFlQRU9GX0tFWVciLCAiRVhQT1JUX1NZTUJPTF9LRVlXIiwgIkFTTV9QSFJBU0UiLCAiQVRUUklCVVRFX1BIUkFTRSIsCisgICJCUkFDRV9QSFJBU0UiLCAiQlJBQ0tFVF9QSFJBU0UiLCAiRVhQUkVTU0lPTl9QSFJBU0UiLCAiQ0hBUiIsICJET1RTIiwKKyAgIklERU5UIiwgIklOVCIsICJSRUFMIiwgIlNUUklORyIsICJUWVBFIiwgIk9USEVSIiwgIkZJTEVOQU1FIiwgIic7JyIsCisgICInfSciLCAiJywnIiwgIicoJyIsICInKiciLCAiJyknIiwgIic9JyIsICIneyciLCAiJzonIiwgIiRhY2NlcHQiLAorICAiZGVjbGFyYXRpb25fc2VxIiwgImRlY2xhcmF0aW9uIiwgIkAxIiwgImRlY2xhcmF0aW9uMSIsICJAMiIsCisgICJzaW1wbGVfZGVjbGFyYXRpb24iLCAiaW5pdF9kZWNsYXJhdG9yX2xpc3Rfb3B0IiwgImluaXRfZGVjbGFyYXRvcl9saXN0IiwKKyAgImluaXRfZGVjbGFyYXRvciIsICJkZWNsX3NwZWNpZmllcl9zZXFfb3B0IiwgImRlY2xfc3BlY2lmaWVyX3NlcSIsCisgICJkZWNsX3NwZWNpZmllciIsICJzdG9yYWdlX2NsYXNzX3NwZWNpZmllciIsICJ0eXBlX3NwZWNpZmllciIsCisgICJzaW1wbGVfdHlwZV9zcGVjaWZpZXIiLCAicHRyX29wZXJhdG9yIiwgImN2YXJfcXVhbGlmaWVyX3NlcV9vcHQiLAorICAiY3Zhcl9xdWFsaWZpZXJfc2VxIiwgImN2YXJfcXVhbGlmaWVyIiwgImRlY2xhcmF0b3IiLAorICAiZGlyZWN0X2RlY2xhcmF0b3IiLCAibmVzdGVkX2RlY2xhcmF0b3IiLCAiZGlyZWN0X25lc3RlZF9kZWNsYXJhdG9yIiwKKyAgInBhcmFtZXRlcl9kZWNsYXJhdGlvbl9jbGF1c2UiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uX2xpc3Rfb3B0IiwKKyAgInBhcmFtZXRlcl9kZWNsYXJhdGlvbl9saXN0IiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsCisgICJtX2Fic3RyYWN0X2RlY2xhcmF0b3IiLCAiZGlyZWN0X21fYWJzdHJhY3RfZGVjbGFyYXRvciIsCisgICJmdW5jdGlvbl9kZWZpbml0aW9uIiwgImluaXRpYWxpemVyX29wdCIsICJpbml0aWFsaXplciIsICJjbGFzc19ib2R5IiwKKyAgIm1lbWJlcl9zcGVjaWZpY2F0aW9uX29wdCIsICJtZW1iZXJfc3BlY2lmaWNhdGlvbiIsICJtZW1iZXJfZGVjbGFyYXRpb24iLAorICAibWVtYmVyX2RlY2xhcmF0b3JfbGlzdF9vcHQiLCAibWVtYmVyX2RlY2xhcmF0b3JfbGlzdCIsCisgICJtZW1iZXJfZGVjbGFyYXRvciIsICJtZW1iZXJfYml0ZmllbGRfZGVjbGFyYXRvciIsICJhdHRyaWJ1dGVfb3B0IiwKKyAgImFzbV9kZWZpbml0aW9uIiwgImFzbV9waHJhc2Vfb3B0IiwgImV4cG9ydF9kZWZpbml0aW9uIiwgMAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IHl5dG9rbnVtW10gPQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCisgICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKKyAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAorICAgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAyOTQsCisgICAgIDI5NSwgICAyOTYsICAgMjk3LCAgICA1OSwgICAxMjUsICAgIDQ0LCAgICA0MCwgICAgNDIsICAgIDQxLCAgICA2MSwKKyAgICAgMTIzLCAgICA1OAorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXIxW10gPQoreworICAgICAgIDAsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDU1LCAgICA1NCwgICAgNTcsICAgIDU2LCAgICA1NiwgICAgNTYsCisgICAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTgsICAgIDU5LCAgICA1OSwgICAgNjAsICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MiwgICAgNjMsICAgIDYzLCAgICA2NCwgICAgNjQsICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LAorICAgICAgNjUsICAgIDY2LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjYsCisgICAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjcsICAgIDY3LCAgICA2NywgICAgNjcsICAgIDY3LCAgICA2NywKKyAgICAgIDY3LCAgICA2NywgICAgNjcsICAgIDY3LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA2OSwgICAgNzAsICAgIDcwLAorICAgICAgNzEsICAgIDcxLCAgICA3MSwgICAgNzEsICAgIDcyLCAgICA3MiwgICAgNzMsICAgIDczLCAgICA3MywgICAgNzMsCisgICAgICA3MywgICAgNzMsICAgIDc0LCAgICA3NCwgICAgNzUsICAgIDc1LCAgICA3NSwgICAgNzUsICAgIDc1LCAgICA3NSwKKyAgICAgIDc1LCAgICA3NiwgICAgNzYsICAgIDc2LCAgICA3NywgICAgNzcsICAgIDc4LCAgICA3OCwgICAgNzksICAgIDgwLAorICAgICAgODAsICAgIDgxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgODIsCisgICAgICA4MywgICAgODMsICAgIDg0LCAgICA4NSwgICAgODUsICAgIDg2LCAgICA4NiwgICAgODcsICAgIDg3LCAgICA4OCwKKyAgICAgIDg4LCAgICA4OSwgICAgODksICAgIDkwLCAgICA5MCwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTIsICAgIDkzLAorICAgICAgOTMsICAgIDk0LCAgICA5NSwgICAgOTUsICAgIDk2Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAzLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNCwKKyAgICAgICAwLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDUsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgNCwgICAgIDIsCisgICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDQsICAgICAyLCAgICAgMywKKyAgICAgICAzLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLAorICAgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgNCwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDMsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywKKyAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAwLAorICAgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDEsICAgICA1Cit9OworCisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeXlkZWZhY3RbXSA9Cit7CisgICAgICAgNCwgICAgIDQsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMCwgICAgMjYsICAgIDUzLCAgICA0NCwKKyAgICAgIDYwLCAgICA1MSwgICAgIDAsICAgIDI5LCAgICA1MCwgICAgMzAsICAgIDQ2LCAgICA0NywgICAgMjcsICAgIDYzLAorICAgICAgNDUsICAgIDQ4LCAgICAyOCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgNDksICAgIDUyLCAgICA2MSwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDYyLCAgICA1NCwgICAgIDUsICAgICA4LCAgICAxNSwgICAgMjEsICAgIDIyLCAgICAyNCwKKyAgICAgIDI1LCAgICAzMSwgICAgMzIsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgNDEsICAgIDM3LAorICAgICAgMzUsICAgICAwLCAgICA0MiwgICAgMjAsICAgIDM2LCAgICA0MywgICAgIDAsICAgICAwLCAgIDEyMSwgICAgNjYsCisgICAgICAgMCwgICAgNTYsICAgICAwLCAgICAxNiwgICAgMTcsICAgICAwLCAgIDEyMiwgICAgNjUsICAgIDIzLCAgICA0MCwKKyAgICAgIDM4LCAgICAgMCwgICAxMTEsICAgICAwLCAgICAgMCwgICAxMDcsICAgICA3LCAgICAxNSwgICAgMzksICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNTUsICAgIDU3LCAgICA1OCwgICAgMTQsICAgICAwLCAgICA2NCwgICAxMjMsCisgICAgICA5OSwgICAxMTksICAgIDY5LCAgICAgMCwgICAxMTAsICAgMTA0LCAgICA3NCwgICAgNzUsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDExOSwgICAgNzMsICAgICAwLCAgIDExMiwgICAxMTMsICAgMTE3LCAgIDEwMywgICAgIDAsICAgMTA4LAorICAgICAxMjIsICAgICAwLCAgICAzNCwgICAgIDAsICAgIDcxLCAgICA3MCwgICAgNTksICAgIDE4LCAgIDEyMCwgICAxMDAsCisgICAgICAgMCwgICAgOTEsICAgICAwLCAgICA4MiwgICAgODUsICAgIDg2LCAgIDExNiwgICAgIDAsICAgIDc0LCAgICAgMCwKKyAgICAgMTE4LCAgICA3MiwgICAxMTUsICAgIDc4LCAgICAgMCwgICAxMDksICAgICAwLCAgICAzMywgICAxMjQsICAgICAwLAorICAgICAgMTksICAgMTAxLCAgICA2OCwgICAgOTIsICAgIDU0LCAgICAgMCwgICAgOTEsICAgIDg4LCAgICA5MCwgICAgNjcsCisgICAgICA4MSwgICAgIDAsICAgIDgwLCAgICA3OSwgICAgIDAsICAgICAwLCAgIDExNCwgICAxMDIsICAgICAwLCAgICA5MywKKyAgICAgICAwLCAgICA4OSwgICAgOTYsICAgICAwLCAgICA4MywgICAgODcsICAgIDc3LCAgICA3NiwgICAgOTgsICAgIDk3LAorICAgICAgIDAsICAgICAwLCAgICA5NSwgICAgOTQKK307CisKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAqLworc3RhdGljIGNvbnN0IHNob3J0IGludCB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAgIDEsICAgICAyLCAgICAgMywgICAgMzQsICAgIDUzLCAgICAzNSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDcyLCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDY1LCAgICA4MywgICAgODQsICAgIDQyLAorICAgICAxMTAsICAgIDY3LCAgIDEwMSwgICAxMDIsICAgMTIyLCAgIDEyMywgICAxMjQsICAgMTI1LCAgIDE0NywgICAxNDgsCisgICAgICA0MywgICAxNDAsICAgMTQxLCAgICA1MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAxMDMsICAgMTA0LCAgIDEwNSwKKyAgICAgMTA2LCAgIDExOSwgICAgNDQsICAgIDkxLCAgICA0NQorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMTI4CitzdGF0aWMgY29uc3Qgc2hvcnQgaW50IHl5cGFjdFtdID0KK3sKKyAgICAtMTI4LCAgICAxMywgIC0xMjgsICAgMzI5LCAgLTEyOCwgIC0xMjgsICAgIDM2LCAgLTEyOCwgIC0xMjgsICAtMTI4LAorICAgIC0xMjgsICAtMTI4LCAgIC0xNiwgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsCisgICAgLTEyOCwgIC0xMjgsICAtMTI4LCAgIC0yNSwgIC0xMjgsICAgLTI0LCAgLTEyOCwgIC0xMjgsICAtMTI4LCAgIC0yOSwKKyAgICAgIC00LCAgIC0yMiwgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAgLTI4LCAgIDQ5NSwgIC0xMjgsICAtMTI4LAorICAgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAtMTI4LCAgLTEyOCwgICAgMTYsCisgICAgIC0yMywgICAxMDMsICAtMTI4LCAgIDQ5NSwgICAtMjMsICAtMTI4LCAgIDQ5NSwgICAgMzUsICAtMTI4LCAgLTEyOCwKKyAgICAgICAzLCAgICAxNSwgICAgIDksICAgIDE3LCAgLTEyOCwgICAtMjgsICAgLTE1LCAgICAtOCwgIC0xMjgsICAtMTI4LAorICAgIC0xMjgsICAgIDQ3LCAgICAyMywgICAgNDQsICAgMTUwLCAgLTEyOCwgIC0xMjgsICAgLTI4LCAgLTEyOCwgICAzNzIsCisgICAgICAzMywgICAgNDgsICAgIDQ5LCAgLTEyOCwgICAgMTUsICAtMTI4LCAgLTEyOCwgICAtMjgsICAtMTI4LCAgLTEyOCwKKyAgICAtMTI4LCAgICA2NCwgIC0xMjgsICAgMTk3LCAgLTEyOCwgIC0xMjgsICAgIDUwLCAgLTEyOCwgICAgMjEsICAgIDY1LAorICAgICAgMzcsICAgIDY0LCAgICAxNCwgICAgNTYsICAgIDU1LCAgLTEyOCwgIC0xMjgsICAtMTI4LCAgICA1OSwgIC0xMjgsCisgICAgICA3NCwgICAgNTcsICAtMTI4LCAgICA2MywgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAtMTI4LCAgICA3NiwKKyAgICAgIDgzLCAgIDQxNiwgICAgODQsICAgIDk5LCAgICA5MCwgIC0xMjgsICAtMTI4LCAgICA4OCwgIC0xMjgsICAgIDg5LAorICAgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAgMjQxLCAgLTEyOCwgICAgMjMsICAtMTI4LCAgLTEyOCwgICAxMDUsCisgICAgLTEyOCwgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAgICA4LCAgICA0NiwgIC0xMjgsICAgIDI2LCAgLTEyOCwKKyAgICAtMTI4LCAgIDQ1OSwgIC0xMjgsICAtMTI4LCAgICA5MiwgICAgOTMsICAtMTI4LCAgLTEyOCwgICAgOTQsICAtMTI4LAorICAgICAgOTYsICAtMTI4LCAgLTEyOCwgICAyODUsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAtMTI4LCAgLTEyOCwgIC0xMjgsCisgICAgICA5NywgICAxMDAsICAtMTI4LCAgLTEyOAorfTsKKworLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCBzaG9ydCBpbnQgeXlwZ290b1tdID0KK3sKKyAgICAtMTI4LCAgLTEyOCwgICAxNTEsICAtMTI4LCAgLTEyOCwgIC0xMjgsICAgMTE5LCAgLTEyOCwgIC0xMjgsICAgIDY2LAorICAgICAgIDAsICAgLTU2LCAgIC0zNiwgIC0xMjgsICAtMTI4LCAgLTEyOCwgICAtNzAsICAtMTI4LCAgLTEyOCwgICAtNTEsCisgICAgIC0zMSwgIC0xMjgsICAgLTExLCAgLTEyOCwgIC0xMjcsICAtMTI4LCAgLTEyOCwgICAgMjcsICAgLTgxLCAgLTEyOCwKKyAgICAtMTI4LCAgLTEyOCwgIC0xMjgsICAgLTE5LCAgLTEyOCwgIC0xMjgsICAgMTA3LCAgLTEyOCwgIC0xMjgsICAgIDQzLAorICAgICAgODYsICAgIDgyLCAgLTEyOCwgIC0xMjgsICAtMTI4Cit9OworCisvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKKyAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xMDcKK3N0YXRpYyBjb25zdCBzaG9ydCBpbnQgeXl0YWJsZVtdID0KK3sKKyAgICAgIDc5LCAgICA2OCwgICAxMDAsICAgIDM2LCAgICA4MSwgICAgNjYsICAgIDU1LCAgIDE1NSwgICAgNTksICAgMTU4LAorICAgICAgODUsICAgIDUwLCAgICA1NCwgICAgIDQsICAgIDg5LCAgICA0OCwgICAgOTAsICAgIDU2LCAgICA2MCwgICAgNjEsCisgICAgICA0OSwgICAgNTgsICAgMTI3LCAgICAxMCwgICAgOTIsICAgIDUxLCAgICA1MSwgICAgNTEsICAgMTAwLCAgICA4MiwKKyAgICAgMTAwLCAgICA3MCwgICAgMTksICAgMTE2LCAgICA4OCwgICAgNzgsICAgMTcxLCAgIDEyMSwgICAgOTMsICAgIDU5LAorICAgICAtOTEsICAgIDI4LCAgICA1NywgICAgNjgsICAgMTQzLCAgICAzMiwgICAxMzMsICAgIDY5LCAgIDE1OSwgICAgNjAsCisgICAgICA2MSwgICAxNDYsICAgIDg2LCAgICA3NywgICAxNDUsICAgIDYxLCAgIC05MSwgICAxMjgsICAgMTYyLCAgICA5NiwKKyAgICAgMTM0LCAgICA5NywgICAgODcsICAgIDk3LCAgIDE2MCwgICAxNjEsICAgMTAwLCAgICA5OCwgICAgNjEsICAgIDk4LAorICAgICAgNjEsICAgIDgwLCAgIDE2MywgICAxMjgsICAgIDk5LCAgIDE0NiwgICAxNDYsICAgIDk3LCAgIDEyMSwgICAgNDYsCisgICAgICA0NywgICAxMTMsICAgMTQzLCAgICA5OCwgICAgNjEsICAgIDY4LCAgIDE1OSwgICAxMjksICAgMTA3LCAgIDEzMSwKKyAgICAgIDk0LCAgICA5NSwgICAxNDUsICAgIDYxLCAgIDExOCwgICAxMjEsICAgMTE0LCAgIDExNSwgICAxMzAsICAgMTM1LAorICAgICAxMzYsICAgIDk5LCAgICA5NCwgICAgODksICAgIDcxLCAgIDEzNywgICAxMzgsICAgMTIxLCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAxMzksICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgMTQyLCAgIDE0OSwgICAgMzIsICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NywgICAtMjAsCisgICAgIDE2NiwgICAxNjcsICAgMTY4LCAgICAzMywgICAxNjksICAgMTcyLCAgIC0yMCwgIC0xMDUsICAgMTczLCAgIC0yMCwKKyAgICAgLTIwLCAgIDEwOCwgICAgIDUsICAgMTE3LCAgIC0yMCwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAgMjMsICAgIDc2LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgMTY1LCAgIDE1NiwKKyAgICAgIDMyLCAgIDEwOSwgICAxMjYsICAgMTMyLCAgICAgMCwgICAgIDAsICAgLTIwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgMzMsICAgICAwLCAgICAgMCwgICAtMjAsICAtMTA2LCAgICAgMCwgICAtMjAsICAgLTIwLCAgIDEyMCwgICAgIDAsCisgICAgICAgMCwgICAtMjAsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgICAwLAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAgMCwgICAgIDAsICAgIDMyLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgLTg0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxNTQsICAgICAwLCAgICAgMCwgICAtODQsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAgMCwKKyAgICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgLTg0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNzAsICAgICAwLCAgICAgMCwgICAtODQsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIC04NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICA2LCAgICAgMCwgICAgIDAsICAgLTg0LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAtMjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMzLAorICAgICAgIDAsICAgICAwLCAgIC0yMCwgICAgIDAsICAgICAwLCAgIC0yMCwgICAtMjAsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMSwKKyAgICAgMTEyLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE0NSwgICAgNjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAgMCwgICAgIDAsICAgIDMyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTY0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzMsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgIDAsICAgICAwLCAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMzCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgaW50IHl5Y2hlY2tbXSA9Cit7CisgICAgICA1NiwgICAgMzcsICAgIDcyLCAgICAgMywgICAgIDEsICAgIDM2LCAgICAyNSwgICAxMzQsICAgIDM2LCAgICAgMSwKKyAgICAgIDYxLCAgICAzNiwgICAgMzYsICAgICAwLCAgICAyOSwgICAgMzEsICAgIDMxLCAgICA0NiwgICAgNDYsICAgIDQ3LAorICAgICAgMzYsICAgIDQzLCAgICAgMSwgICAgIDgsICAgIDMyLCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA5OCwgICAgNjAsCisgICAgIDEwMCwgICAgNTAsICAgIDE3LCAgICA4NCwgICAgNjUsICAgIDU0LCAgIDE2MywgICAgOTMsICAgIDQ2LCAgICAzNiwKKyAgICAgIDMyLCAgICAyNiwgICAgNDYsICAgIDc5LCAgICAzNiwgICAgMzAsICAgIDMyLCAgICAzMSwgICAgNDAsICAgIDQ2LAorICAgICAgNDcsICAgMTIxLCAgICA0MywgICAgNTMsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDM2LCAgICAzMiwgICAgMzYsCisgICAgICA0NiwgICAgNDAsICAgIDQ1LCAgICA0MCwgICAxNDUsICAgMTQ2LCAgIDEzNiwgICAgNDYsICAgIDQ3LCAgICA0NiwKKyAgICAgIDQ3LCAgICAzNiwgICAgNDYsICAgIDM2LCAgICA1MSwgICAxNDUsICAgMTQ2LCAgICA0MCwgICAxMzQsICAgIDQzLAorICAgICAgNDQsICAgIDQ4LCAgICAzNiwgICAgNDYsICAgIDQ3LCAgIDEyMSwgICAgNDAsICAgIDk4LCAgICA0NCwgICAxMDAsCisgICAgICA0MywgICAgNDQsICAgIDQ2LCAgICA0NywgICAgMzAsICAgMTUxLCAgICA0OCwgICAgNDgsICAgIDMzLCAgICA0MywKKyAgICAgIDQ1LCAgICA1MSwgICAgNDMsICAgIDI5LCAgICAgMSwgICAgNDgsICAgIDQzLCAgIDE2MywgICAgIDUsICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDQ5LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICA0OCwgICAgNDgsICAgIDMwLCAgICAzNSwgICAgNDUsICAgIDQ4LCAgICA0OCwgICAgMzMsICAgIDM2LAorICAgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDAsICAgIDQ4LCAgICA0OCwgICAgNDMsICAgIDQ0LCAgICA0OCwgICAgNDYsCisgICAgICA0NywgICAgIDEsICAgICAxLCAgICA4NywgICAgNTEsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICA1MywgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgIDE1MSwgICAxMzYsCisgICAgICAzMCwgICAgNzQsICAgIDk2LCAgIDEwMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDQwLCAgICAtMSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICA0NywgICAgIDEsICAgIC0xLAorICAgICAgLTEsICAgIDUxLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAzNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsCisgICAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAxLCAgICAtMSwgICAgLTEsICAgIDQ4LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIC0xLCAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgMzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAgMSwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwKKyAgICAgIC0xLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICAtMSwgICAgNDYsICAgIDQ3LCAgICAgNSwgICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIC0xLCAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDcsCisgICAgICA0OCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIC0xLCAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNDYsICAgIDQ3LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgLTEsICAgIC0xLCAgICAzMCwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQwLAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIC0xLCAgICAtMSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0MAorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeXlzdG9zW10gPQoreworICAgICAgIDAsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NCwgICAgIDEsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKKyAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgNDAsICAgIDU2LCAgICA1OCwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsCisgICAgICA2NiwgICAgNjcsICAgIDcxLCAgICA4MiwgICAgOTQsICAgIDk2LCAgICA0MywgICAgNDQsICAgIDMxLCAgICAzNiwKKyAgICAgIDM2LCAgICA1MCwgICAgODUsICAgIDU3LCAgICAzNiwgICAgODUsICAgIDQ2LCAgICA0NiwgICAgNDMsICAgIDM2LAorICAgICAgNDYsICAgIDQ3LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2OCwgICAgNzIsICAgIDczLCAgICA2NCwgICAgMzEsCisgICAgICA4NSwgICAgIDEsICAgIDYyLCAgICA4NiwgICAgODcsICAgIDg4LCAgICA1OCwgICAgNjIsICAgIDg1LCAgICA2MywKKyAgICAgIDM2LCAgICAgMSwgICAgNzIsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDQzLCAgICA0NSwgICAgNzIsICAgIDI5LAorICAgICAgMzEsICAgIDk1LCAgICAzMiwgICAgNDYsICAgIDQzLCAgICA0NCwgICAgMzYsICAgIDQwLCAgICA0NiwgICAgNTEsCisgICAgICA2OCwgICAgNzQsICAgIDc1LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgNDQsICAgICAxLCAgICA4OCwKKyAgICAgIDcyLCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDgsICAgIDcxLCAgICA2MSwgICAgMzAsICAgIDkzLAorICAgICAgIDEsICAgIDYzLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgOTIsICAgICAxLCAgICAzNiwgICAgNzQsCisgICAgICAzMywgICAgNzQsICAgIDkzLCAgICAzMiwgICAgNDYsICAgIDQzLCAgICA0NSwgICAgNDgsICAgIDQzLCAgICA0OSwKKyAgICAgIDgzLCAgICA4NCwgICAgNDgsICAgIDM2LCAgICA0MCwgICAgNDYsICAgIDY4LCAgICA4MCwgICAgODEsICAgIDQ4LAorICAgICAgMzUsICAgIDQ1LCAgICA0OCwgICAgNDgsICAgICAxLCAgICA3NiwgICAgOTEsICAgIDMzLCAgICAgMSwgICAgNDAsCisgICAgICA4MCwgICAgODAsICAgIDMyLCAgICA0NiwgICAgMzUsICAgIDc5LCAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OCwKKyAgICAgICAxLCAgICA3NiwgICAgNDgsICAgIDQ4Cit9OworCisjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkgJiYgZGVmaW5lZCAoX19TSVpFX1RZUEVfXykKKyMgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyNlbmRpZgorI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKHNpemVfdCkKKyMgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorI2VuZGlmCisjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkKKyMgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZW5kaWYKKyNlbmRpZgorI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisjIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKyNlbmRpZgogCiAjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCiAjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWQkJLTIKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQogI2RlZmluZSBZWUVPRgkJMAorCiAjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9SVCAJZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCi0vKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4KLSAgIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5IHRvIGVhc2UgdGhlCi0gICB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KICAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKwogI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKwogI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0jZGVmaW5lIFlZQkFDS1VQKHRva2VuLCB2YWx1ZSkgXAorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKIGRvCQkJCQkJCQlcCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCi0gICAgeyB5eWNoYXIgPSAodG9rZW4pLCB5eWx2YWwgPSAodmFsdWUpOwkJCVwKLSAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKICAgICAgIFlZUE9QU1RBQ0s7CQkJCQkJXAogICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCiAgICAgfQkJCQkJCQkJXAogICBlbHNlCQkJCQkJCQlcCi0gICAgeyB5eWVycm9yICgic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpOyBZWUVSUk9SOyB9CVwKKyAgICB7IAkJCQkJCQkJXAorICAgICAgeXllcnJvciAoInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKTtcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAogd2hpbGUgKDApCiAKKwogI2RlZmluZSBZWVRFUlJPUgkxCiAjZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAotI2lmbmRlZiBZWVBVUkUKLSNkZWZpbmUgWVlMRVgJCXl5bGV4KCkKKworLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKE4pCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47CVwKKwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZmRlZiBZWVBVUkUKLSNpZmRlZiBZWUxTUF9ORUVERUQKKworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLworCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAorICAgICAgICAgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKyAgICAgICAgICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCisjIGVsc2UKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworCiAjaWZkZWYgWVlMRVhfUEFSQU0KLSNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQorIyBkZWZpbmUgWVlMRVggeXlsZXggKFlZTEVYX1BBUkFNKQogI2Vsc2UKLSNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MpCisjIGRlZmluZSBZWUxFWCB5eWxleCAoKQogI2VuZGlmCi0jZWxzZSAvKiBub3QgWVlMU1BfTkVFREVEICovCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorCisvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoMCkKKworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCVwKKyAgICAgIHl5c3ltcHJpbnQgKHN0ZGVyciwgCQkJCQlcCisgICAgICAgICAgICAgICAgICBUeXBlLCBWYWx1ZSk7CVwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoc2hvcnQgaW50ICpib3R0b20sIHNob3J0IGludCAqdG9wKQogI2Vsc2UKLSNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwpCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQorICAgIHNob3J0IGludCAqYm90dG9tOworICAgIHNob3J0IGludCAqdG9wOwogI2VuZGlmCi0jZW5kaWYgLyogbm90IFlZTFNQX05FRURFRCAqLworeworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKC8qIE5vdGhpbmcuICovOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKKyAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKDApCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoaW50IHl5cnVsZSkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXJ1bGUpCisgICAgaW50IHl5cnVsZTsKICNlbmRpZgoreworICBpbnQgeXlpOworICB1bnNpZ25lZCBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAldSksICIsCisgICAgICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBQcmludCB0aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLCBhbmQgdGhlaXIgcmVzdWx0LiAgKi8KKyAgZm9yICh5eWkgPSB5eXByaHNbeXlydWxlXTsgMCA8PSB5eXJoc1t5eWldOyB5eWkrKykKKyAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIHl5dG5hbWUgW3l5cmhzW3l5aV1dKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICItPiAlc1xuIiwgeXl0bmFtZSBbeXlyMVt5eXJ1bGVdXSk7Cit9CiAKLS8qIElmIG5vbnJlZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlICovCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKFJ1bGUpOwkJXAorfSB3aGlsZSAoMCkKIAotI2lmbmRlZiBZWVBVUkUKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLwogCi1pbnQJeXljaGFyOwkJCS8qICB0aGUgbG9va2FoZWFkIHN5bWJvbAkJKi8KLVlZU1RZUEUJeXlsdmFsOwkJCS8qICB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlCQkqLwotCQkJCS8qICBsb29rYWhlYWQgc3ltYm9sCQkJKi8KIAotI2lmZGVmIFlZTFNQX05FRURFRAotWVlMVFlQRSB5eWxsb2M7CQkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJKi8KLQkJCQkvKiAgc3ltYm9sCQkJCSovCi0jZW5kaWYKLQotaW50IHl5bmVycnM7CQkJLyogIG51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyICAgICAgICovCi0jZW5kaWYgIC8qIG5vdCBZWVBVUkUgKi8KLQotI2lmIFlZREVCVUcgIT0gMAotaW50IHl5ZGVidWc7CQkJLyogIG5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UJKi8KLS8qIFNpbmNlIHRoaXMgaXMgdW5pbml0aWFsaXplZCwgaXQgZG9lcyBub3Qgc3RvcCBtdWx0aXBsZSBwYXJzZXJzCi0gICBmcm9tIGNvZXhpc3RpbmcuICAqLwotI2VuZGlmCi0KLS8qICBZWUlOSVRERVBUSCBpbmRpY2F0ZXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzCSovCi0KKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KICNpZm5kZWYJWVlJTklUREVQVEgKLSNkZWZpbmUgWVlJTklUREVQVEggMjAwCisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKICNlbmRpZgogCi0vKiAgWVlNQVhERVBUSCBpcyB0aGUgbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8KLSAgICAoZWZmZWN0aXZlIG9ubHkgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuICAqLworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgogCi0jaWYgWVlNQVhERVBUSCA9PSAwCi0jdW5kZWYgWVlNQVhERVBUSAotI2VuZGlmCisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgU0laRV9NQVggPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCiAKICNpZm5kZWYgWVlNQVhERVBUSAotI2RlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCiAjZW5kaWYKKwogDAotLyogRGVmaW5lIF9feXlfbWVtY3B5LiAgTm90ZSB0aGF0IHRoZSBzaXplIGFyZ3VtZW50Ci0gICBzaG91bGQgYmUgcGFzc2VkIHdpdGggdHlwZSB1bnNpZ25lZCBpbnQsIGJlY2F1c2UgdGhhdCBpcyB3aGF0IHRoZSBub24tR0NDCi0gICBkZWZpbml0aW9ucyByZXF1aXJlLiAgV2l0aCBHQ0MsIF9fYnVpbHRpbl9tZW1jcHkgdGFrZXMgYW4gYXJnCi0gICBvZiB0eXBlIHNpemVfdCwgYnV0IGl0IGNhbiBoYW5kbGUgdW5zaWduZWQgaW50LiAgKi8KIAotI2lmIF9fR05VQ19fID4gMQkJLyogR05VIEMgYW5kIEdOVSBDKysgZGVmaW5lIHRoaXMuICAqLwotI2RlZmluZSBfX3l5X21lbWNweShUTyxGUk9NLENPVU5UKQlfX2J1aWx0aW5fbWVtY3B5KFRPLEZST00sQ09VTlQpCi0jZWxzZQkJCQkvKiBub3QgR05VIEMgb3IgQysrICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCisjaWYgWVlFUlJPUl9WRVJCT1NFCiAKLS8qIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCi0gICBpbiBhdmFpbGFibGUgYnVpbHQtaW4gZnVuY3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCi1zdGF0aWMgdm9pZAotX195eV9tZW1jcHkgKHRvLCBmcm9tLCBjb3VudCkKLSAgICAgY2hhciAqdG87Ci0gICAgIGNoYXIgKmZyb207Ci0gICAgIHVuc2lnbmVkIGludCBjb3VudDsKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIChfX0dMSUJDX18pICYmIGRlZmluZWQgKF9TVFJJTkdfSCkKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCitzdGF0aWMgWVlTSVpFX1QKKyMgICBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisjICAgZWxzZQoreXlzdHJsZW4gKHl5c3RyKQorICAgICBjb25zdCBjaGFyICp5eXN0cjsKKyMgICBlbmRpZgogewotICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKLSAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOwotICByZWdpc3RlciBpbnQgaSA9IGNvdW50OworICByZWdpc3RlciBjb25zdCBjaGFyICp5eXMgPSB5eXN0cjsKIAotICB3aGlsZSAoaS0tID4gMCkKLSAgICAqdCsrID0gKmYrKzsKKyAgd2hpbGUgKCp5eXMrKyAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eXMgLSB5eXN0ciAtIDE7CiB9CisjICBlbmRpZgorIyBlbmRpZgogCi0jZWxzZSAvKiBfX2NwbHVzcGx1cyAqLwotCi0vKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNvbXBhdGliaWxpdGllcwotICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJpb3VzIHN5c3RlbXMuICAqLwotc3RhdGljIHZvaWQKLV9feXlfbWVtY3B5IChjaGFyICp0bywgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IGNvdW50KQorIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKSAmJiBkZWZpbmVkIChfR05VX1NPVVJDRSkKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLworc3RhdGljIGNoYXIgKgorIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorIyAgIGVsc2UKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgICBjaGFyICp5eWRlc3Q7CisgICAgIGNvbnN0IGNoYXIgKnl5c3JjOworIyAgIGVuZGlmCiB7Ci0gIHJlZ2lzdGVyIGNoYXIgKnQgPSB0bzsKLSAgcmVnaXN0ZXIgY2hhciAqZiA9IGZyb207Ci0gIHJlZ2lzdGVyIGludCBpID0gY291bnQ7CisgIHJlZ2lzdGVyIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CiAKLSAgd2hpbGUgKGktLSA+IDApCi0gICAgKnQrKyA9ICpmKys7CisgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOwogfQorIyAgZW5kaWYKKyMgZW5kaWYKIAotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvKiAhWVlFUlJPUl9WRVJCT1NFICovCisKIAwKLSNsaW5lIDIxNyAiL3Vzci9saWIvYmlzb24uc2ltcGxlIgogCi0vKiBUaGUgdXNlciBjYW4gZGVmaW5lIFlZUEFSU0VfUEFSQU0gYXMgdGhlIG5hbWUgb2YgYW4gYXJndW1lbnQgdG8gYmUgcGFzc2VkCi0gICBpbnRvIHl5cGFyc2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIGhhdmUgdHlwZSB2b2lkICouCi0gICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4gb2JqZWN0LgotICAgR3JhbW1hciBhY3Rpb25zIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGJ5IGNhc3RpbmcgaXQKLSAgIHRvIHRoZSBwcm9wZXIgcG9pbnRlciB0eXBlLiAgKi8KKyNpZiBZWURFQlVHCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcgdm9pZCAqWVlQQVJTRV9QQVJBTQotI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKLSNlbHNlIC8qIG5vdCBfX2NwbHVzcGx1cyAqLwotI2RlZmluZSBZWVBBUlNFX1BBUkFNX0FSRyBZWVBBUlNFX1BBUkFNCi0jZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTCB2b2lkICpZWVBBUlNFX1BBUkFNOwotI2VuZGlmIC8qIG5vdCBfX2NwbHVzcGx1cyAqLwotI2Vsc2UgLyogbm90IFlZUEFSU0VfUEFSQU0gKi8KLSNkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcKLSNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCi0jZW5kaWYgLyogbm90IFlZUEFSU0VfUEFSQU0gKi8KLQotLyogUHJldmVudCB3YXJuaW5nIGlmIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLwotI2lmZGVmIF9fR05VQ19fCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotaW50IHl5cGFyc2UgKHZvaWQgKik7CisjaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorc3RhdGljIHZvaWQKK3l5c3ltcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkKICNlbHNlCi1pbnQgeXlwYXJzZSAodm9pZCk7CitzdGF0aWMgdm9pZAoreXlzeW1wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKICNlbmRpZgotI2VuZGlmCi0KLWludAoteXlwYXJzZShZWVBBUlNFX1BBUkFNX0FSRykKLSAgICAgWVlQQVJTRV9QQVJBTV9ERUNMCiB7CisgIC8qIFBhY2lmeSBgYHVudXNlZCB2YXJpYWJsZScnIHdhcm5pbmdzLiAgKi8KKyAgKHZvaWQpIHl5dmFsdWVwOworCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKyNlbmRpZiAvKiAhIFlZREVCVUcgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwKQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisjZW5kaWYKK3sKKyAgLyogUGFjaWZ5IGBgdW51c2VkIHZhcmlhYmxlJycgd2FybmluZ3MuICAqLworICAodm9pZCkgeXl2YWx1ZXA7CisKKyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwwKKworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyMgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQoraW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworIyBlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyMgZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK2ludCB5eXBhcnNlICh2b2lkKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLworCisKKworLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisKKy8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCitpbnQgeXluZXJyczsKKworCisKKy8qLS0tLS0tLS0tLS4KK3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyMgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQoraW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjIGVsc2UKK2ludCB5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICB2b2lkICpZWVBBUlNFX1BBUkFNOworIyBlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQoraW50Cit5eXBhcnNlICh2b2lkKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoKQorCisjZW5kaWYKKyNlbmRpZgoreworICAKICAgcmVnaXN0ZXIgaW50IHl5c3RhdGU7CiAgIHJlZ2lzdGVyIGludCB5eW47Ci0gIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKyAgaW50IHl5cmVzdWx0OworICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgaW50IHl5ZXJyc3RhdHVzOworICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbiA9IDA7CisKKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKKyAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKKyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKworICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgc2hvcnQgaW50IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgc2hvcnQgaW50ICp5eXNzID0geXlzc2E7CisgIHJlZ2lzdGVyIHNob3J0IGludCAqeXlzc3A7CisKKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKICAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7Ci0gIGludCB5eWVycnN0YXR1czsJLyogIG51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQgKi8KLSAgaW50IHl5Y2hhcjEgPSAwOwkJLyogIGxvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyICovCiAKLSAgc2hvcnQJeXlzc2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIHN0YXRlIHN0YWNrCQkJKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgc2VtYW50aWMgdmFsdWUgc3RhY2sJCSovCiAKLSAgc2hvcnQgKnl5c3MgPSB5eXNzYTsJCS8qICByZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMgKi8KLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwkvKiAgdG8gYWxsb3cgeXlvdmVyZmxvdyB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlICovCiAKLSNpZmRlZiBZWUxTUF9ORUVERUQKLSAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgbG9jYXRpb24gc3RhY2sJCQkqLwotICBZWUxUWVBFICp5eWxzID0geXlsc2E7Ci0gIFlZTFRZUEUgKnl5bHNwOwotCi0jZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKLSNlbHNlCiAjZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSkKLSNlbmRpZgogCi0gIGludCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotICBpbnQgeXlmcmVlX3N0YWNrcyA9IDA7CisgIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CiAKLSNpZmRlZiBZWVBVUkUKLSAgaW50IHl5Y2hhcjsKLSAgWVlTVFlQRSB5eWx2YWw7Ci0gIGludCB5eW5lcnJzOwotI2lmZGVmIFlZTFNQX05FRURFRAotICBZWUxUWVBFIHl5bGxvYzsKLSNlbmRpZgotI2VuZGlmCisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CiAKLSAgWVlTVFlQRSB5eXZhbDsJCS8qICB0aGUgdmFyaWFibGUgdXNlZCB0byByZXR1cm4JCSovCi0JCQkJLyogIHNlbWFudGljIHZhbHVlcyBmcm9tIHRoZSBhY3Rpb24JKi8KLQkJCQkvKiAgcm91dGluZXMJCQkJKi8KIAorICAvKiBXaGVuIHJlZHVjaW5nLCB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZAorICAgICBydWxlLiAgKi8KICAgaW50IHl5bGVuOwogCi0jaWYgWVlERUJVRyAhPSAwCi0gIGlmICh5eWRlYnVnKQotICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpOwotI2VuZGlmCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3RhdHVzID0gMDsKQEAgLTc0MSw4MzMgKzExNzUsODcyIEBACiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwogCi0gIHl5c3NwID0geXlzcyAtIDE7CisgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwotI2lmZGVmIFlZTFNQX05FRURFRAotICB5eWxzcCA9IHl5bHM7Ci0jZW5kaWYKIAotLyogUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4gIHl5c3RhdGUgIC4gICovCi0vKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwotICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KLXl5bmV3c3RhdGU6CiAKLSAgKisreXlzc3AgPSB5eXN0YXRlOworICB5eXZzcFswXSA9IHl5bHZhbDsKIAotICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKyAgZ290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLgorICAgICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKICAgICB7Ci0gICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2sgKi8KLSAgICAgIC8qIFVzZSBjb3BpZXMgb2YgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50byBtZW1vcnkuICovCi0gICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAgICBzaG9ydCAqeXlzczEgPSB5eXNzOwotI2lmZGVmIFlZTFNQX05FRURFRAotICAgICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwotI2VuZGlmCi0KICAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgaW50IHNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKIAogI2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mCi0JIHRoZSBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gICovCi0jaWZkZWYgWVlMU1BfTkVFREVECi0gICAgICAvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCi0JIGJ1dCB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotICAgICAgeXlvdmVyZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKLQkJICZ5eXNzMSwgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLQkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQkJICZ5eWxzMSwgc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLQkJICZ5eXN0YWNrc2l6ZSk7Ci0jZWxzZQotICAgICAgeXlvdmVyZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKLQkJICZ5eXNzMSwgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLQkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQkJICZ5eXN0YWNrc2l6ZSk7Ci0jZW5kaWYKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJc2hvcnQgaW50ICp5eXNzMSA9IHl5c3M7CiAKLSAgICAgIHl5c3MgPSB5eXNzMTsgeXl2cyA9IHl5dnMxOwotI2lmZGVmIFlZTFNQX05FRURFRAotICAgICAgeXlscyA9IHl5bHMxOwotI2VuZGlmCisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKworCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisjIGVsc2UKICAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwotICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCi0JewotCSAgeXllcnJvcigicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7Ci0JICBpZiAoeXlmcmVlX3N0YWNrcykKLQkgICAgewotCSAgICAgIGZyZWUgKHl5c3MpOwotCSAgICAgIGZyZWUgKHl5dnMpOwotI2lmZGVmIFlZTFNQX05FRURFRAotCSAgICAgIGZyZWUgKHl5bHMpOwotI2VuZGlmCi0JICAgIH0KLQkgIHJldHVybiAyOwotCX0KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlvdmVyZmxvd2xhYjsKICAgICAgIHl5c3RhY2tzaXplICo9IDI7Ci0gICAgICBpZiAoeXlzdGFja3NpemUgPiBZWU1BWERFUFRIKQorICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKIAl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7Ci0jaWZuZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQotICAgICAgeXlmcmVlX3N0YWNrcyA9IDE7Ci0jZW5kaWYKLSAgICAgIHl5c3MgPSAoc2hvcnQgKikgWVlTVEFDS19BTExPQyAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXNzcCkpOwotICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXlzcywgKGNoYXIgKil5eXNzMSwKLQkJICAgc2l6ZSAqICh1bnNpZ25lZCBpbnQpIHNpemVvZiAoKnl5c3NwKSk7Ci0gICAgICB5eXZzID0gKFlZU1RZUEUgKikgWVlTVEFDS19BTExPQyAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXZzcCkpOwotICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXl2cywgKGNoYXIgKil5eXZzMSwKLQkJICAgc2l6ZSAqICh1bnNpZ25lZCBpbnQpIHNpemVvZiAoKnl5dnNwKSk7Ci0jaWZkZWYgWVlMU1BfTkVFREVECi0gICAgICB5eWxzID0gKFlZTFRZUEUgKikgWVlTVEFDS19BTExPQyAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eWxzcCkpOwotICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXlscywgKGNoYXIgKil5eWxzMSwKLQkJICAgc2l6ZSAqICh1bnNpZ25lZCBpbnQpIHNpemVvZiAoKnl5bHNwKSk7Ci0jZW5kaWYKKworICAgICAgeworCXNob3J0IGludCAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7CisKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKICNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCiAKLSAgICAgIHl5c3NwID0geXlzcyArIHNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZzICsgc2l6ZSAtIDE7Ci0jaWZkZWYgWVlMU1BfTkVFREVECi0gICAgICB5eWxzcCA9IHl5bHMgKyBzaXplIC0gMTsKLSNlbmRpZgorICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKLSNpZiBZWURFQlVHICE9IDAKLSAgICAgIGlmICh5eWRlYnVnKQotCWZwcmludGYoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWRcbiIsIHl5c3RhY2tzaXplKTsKLSNlbmRpZgogCi0gICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQogCVlZQUJPUlQ7CiAgICAgfQogCi0jaWYgWVlERUJVRyAhPSAwCi0gIGlmICh5eWRlYnVnKQotICAgIGZwcmludGYoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpOwotI2VuZGlmCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CiAKICAgZ290byB5eWJhY2t1cDsKLSB5eWJhY2t1cDoKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CiAKIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLwotLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisvKiBSZWFkIGEgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAvKiB5eXJlc3VtZTogKi8KIAotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLwogCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWUZMQUcpCisgIGlmICh5eW4gPT0gWVlQQUNUX05JTkYpCiAgICAgZ290byB5eWRlZmF1bHQ7CiAKLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GCi0gICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICovCi0KKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZRU1QVFkpCiAgICAgewotI2lmIFlZREVCVUcgIT0gMAotICAgICAgaWYgKHl5ZGVidWcpCi0JZnByaW50ZihzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpOwotI2VuZGlmCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKICAgICAgIHl5Y2hhciA9IFlZTEVYOwogICAgIH0KIAotICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLwotCi0gIGlmICh5eWNoYXIgPD0gMCkJCS8qIFRoaXMgbWVhbnMgZW5kIG9mIGlucHV0LiAqLworICBpZiAoeXljaGFyIDw9IFlZRU9GKQogICAgIHsKLSAgICAgIHl5Y2hhcjEgPSAwOwotICAgICAgeXljaGFyID0gWVlFT0Y7CQkvKiBEb24ndCBjYWxsIFlZTEVYIGFueSBtb3JlICovCi0KLSNpZiBZWURFQlVHICE9IDAKLSAgICAgIGlmICh5eWRlYnVnKQotCWZwcmludGYoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpOwotI2VuZGlmCisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOwogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSh5eWNoYXIpOwotCi0jaWYgWVlERUJVRyAhPSAwCi0gICAgICBpZiAoeXlkZWJ1ZykKLQl7Ci0JICBmcHJpbnRmIChzdGRlcnIsICJOZXh0IHRva2VuIGlzICVkICglcyIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7Ci0JICAvKiBHaXZlIHRoZSBpbmRpdmlkdWFsIHBhcnNlciBhIHdheSB0byBwcmludCB0aGUgcHJlY2lzZSBtZWFuaW5nCi0JICAgICBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCi0jaWZkZWYgWVlQUklOVAotCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7Ci0jZW5kaWYKLQkgIGZwcmludGYgKHN0ZGVyciwgIilcbiIpOwotCX0KLSNlbmRpZgorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogICAgIH0KIAotICB5eW4gKz0geXljaGFyMTsKLSAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIxKQorICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKICAgICBnb3RvIHl5ZGVmYXVsdDsKLQogICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0KLSAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgotICAgICBOZWdhdGl2ZSA9PiByZWR1Y2UsIC15eW4gaXMgcnVsZSBudW1iZXIuCi0gICAgIFBvc2l0aXZlID0+IHNoaWZ0LCB5eW4gaXMgbmV3IHN0YXRlLgotICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCi0gICAgICAganVzdCByZXR1cm4gc3VjY2Vzcy4KLSAgICAgMCwgb3IgbW9zdCBuZWdhdGl2ZSBudW1iZXIgPT4gZXJyb3IuICAqLwotCi0gIGlmICh5eW4gPCAwKQorICBpZiAoeXluIDw9IDApCiAgICAgewotICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKIAlnb3RvIHl5ZXJybGFiOwogICAgICAgeXluID0gLXl5bjsKICAgICAgIGdvdG8geXlyZWR1Y2U7CiAgICAgfQotICBlbHNlIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwogCiAgIGlmICh5eW4gPT0gWVlGSU5BTCkKICAgICBZWUFDQ0VQVDsKIAotICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KLQotI2lmIFlZREVCVUcgIT0gMAotICBpZiAoeXlkZWJ1ZykKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7Ci0jZW5kaWYKKyAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogCiAgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCiAgIGlmICh5eWNoYXIgIT0gWVlFT0YpCiAgICAgeXljaGFyID0gWVlFTVBUWTsKIAogICAqKyt5eXZzcCA9IHl5bHZhbDsKLSNpZmRlZiBZWUxTUF9ORUVERUQKLSAgKisreXlsc3AgPSB5eWxsb2M7Ci0jZW5kaWYKIAotICAvKiBjb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yIHN0YXR1cy4gICovCi0gIGlmICh5eWVycnN0YXR1cykgeXllcnJzdGF0dXMtLTsKKworICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0tOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgIGdvdG8geXluZXdzdGF0ZTsKIAotLyogRG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gICovCi15eWRlZmF1bHQ6CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKICAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CiAgIGlmICh5eW4gPT0gMCkKICAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOwogCi0vKiBEbyBhIHJlZHVjdGlvbi4gIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwogICB5eWxlbiA9IHl5cjJbeXluXTsKLSAgaWYgKHl5bGVuID4gMCkKLSAgICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOyAvKiBpbXBsZW1lbnQgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uICovCiAKLSNpZiBZWURFQlVHICE9IDAKLSAgaWYgKHl5ZGVidWcpCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQogICAgIHsKLSAgICAgIGludCBpOwotCi0gICAgICBmcHJpbnRmIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCi0JICAgICAgIHl5biwgeXlybGluZVt5eW5dKTsKLQotICAgICAgLyogUHJpbnQgdGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZCwgYW5kIHRoZWlyIHJlc3VsdC4gICovCi0gICAgICBmb3IgKGkgPSB5eXByaHNbeXluXTsgeXlyaHNbaV0gPiAwOyBpKyspCi0JZnByaW50ZiAoc3RkZXJyLCAiJXMgIiwgeXl0bmFtZVt5eXJoc1tpXV0pOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiIC0+ICVzXG4iLCB5eXRuYW1lW3l5cjFbeXluXV0pOwotICAgIH0KLSNlbmRpZgotCi0KLSAgc3dpdGNoICh5eW4pIHsKLQotY2FzZSAzOgorICAgICAgICBjYXNlIDQ6CiAjbGluZSAxMDcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgaXNfdHlwZWRlZiA9IDA7IGlzX2V4dGVybiA9IDA7IGN1cnJlbnRfbmFtZSA9IE5VTEw7IGRlY2xfc3BlYyA9IE5VTEw7IDsKLSAgICBicmVhazt9Ci1jYXNlIDQ6CisgICAgeyBpc190eXBlZGVmID0gMDsgaXNfZXh0ZXJuID0gMDsgY3VycmVudF9uYW1lID0gTlVMTDsgZGVjbF9zcGVjID0gTlVMTDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDU6CiAjbGluZSAxMDkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgZnJlZV9saXN0KCp5eXZzcFswXSwgTlVMTCk7ICp5eXZzcFswXSA9IE5VTEw7IDsKLSAgICBicmVhazt9Ci1jYXNlIDU6CisgICAgeyBmcmVlX2xpc3QoKih5eXZzcFswXSksIE5VTEwpOyAqKHl5dnNwWzBdKSA9IE5VTEw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgogI2xpbmUgMTEzICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IGlzX3R5cGVkZWYgPSAxOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA2OgorICAgIHsgaXNfdHlwZWRlZiA9IDE7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgogI2xpbmUgMTE0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDExOgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKICNsaW5lIDExOSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMjoKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CiAjbGluZSAxMjAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMTM6CisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0OgogI2xpbmUgMTI1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IGlmIChjdXJyZW50X25hbWUpIHsKLQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVjbCA9ICgqeXl2c3BbMF0pLT5uZXh0OwotCQkgICAgKCp5eXZzcFswXSktPm5leHQgPSBOVUxMOworICAgIHsgaWYgKGN1cnJlbnRfbmFtZSkgeworCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpkZWNsID0gKCooeXl2c3BbMF0pKS0+bmV4dDsKKwkJICAgICgqKHl5dnNwWzBdKSktPm5leHQgPSBOVUxMOwogCQkgICAgYWRkX3N5bWJvbChjdXJyZW50X25hbWUsCiAJCQkgICAgICAgaXNfdHlwZWRlZiA/IFNZTV9UWVBFREVGIDogU1lNX05PUk1BTCwKIAkJCSAgICAgICBkZWNsLCBpc19leHRlcm4pOwogCQkgICAgY3VycmVudF9uYW1lID0gTlVMTDsKIAkJICB9Ci0JCSAgeXl2YWwgPSB5eXZzcFswXTsKLQkJOwotICAgIGJyZWFrO30KLWNhc2UgMTQ6CisJCSAgKHl5dmFsKSA9ICh5eXZzcFswXSk7CisJCTt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNToKICNsaW5lIDEzOCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IE5VTEw7IDsKLSAgICBicmVhazt9Ci1jYXNlIDE2OgorICAgIHsgKHl5dmFsKSA9IE5VTEw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzoKICNsaW5lIDE0NCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlY2wgPSAqeXl2c3BbMF07Ci0JCSAgKnl5dnNwWzBdID0gTlVMTDsKKyAgICB7IHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVjbCA9ICooeXl2c3BbMF0pOworCQkgICooeXl2c3BbMF0pID0gTlVMTDsKIAkJICBhZGRfc3ltYm9sKGN1cnJlbnRfbmFtZSwKIAkJCSAgICAgaXNfdHlwZWRlZiA/IFNZTV9UWVBFREVGIDogU1lNX05PUk1BTCwgZGVjbCwgaXNfZXh0ZXJuKTsKIAkJICBjdXJyZW50X25hbWUgPSBOVUxMOwotCQkgIHl5dmFsID0geXl2c3BbMF07Ci0JCTsKLSAgICBicmVhazt9Ci1jYXNlIDE3OgorCQkgICh5eXZhbCkgPSAoeXl2c3BbMF0pOworCQk7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg6CiAjbGluZSAxNTIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgc3RydWN0IHN0cmluZ19saXN0ICpkZWNsID0gKnl5dnNwWzBdOwotCQkgICp5eXZzcFswXSA9IE5VTEw7Ci0JCSAgZnJlZV9saXN0KCp5eXZzcFstMV0sIE5VTEwpOwotCQkgICp5eXZzcFstMV0gPSBkZWNsX3NwZWM7CisgICAgeyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlY2wgPSAqKHl5dnNwWzBdKTsKKwkJICAqKHl5dnNwWzBdKSA9IE5VTEw7CisJCSAgZnJlZV9saXN0KCooeXl2c3BbLTFdKSwgTlVMTCk7CisJCSAgKih5eXZzcFstMV0pID0gZGVjbF9zcGVjOwogCQkgIGFkZF9zeW1ib2woY3VycmVudF9uYW1lLAogCQkJICAgICBpc190eXBlZGVmID8gU1lNX1RZUEVERUYgOiBTWU1fTk9STUFMLCBkZWNsLCBpc19leHRlcm4pOwogCQkgIGN1cnJlbnRfbmFtZSA9IE5VTEw7Ci0JCSAgeXl2YWwgPSB5eXZzcFswXTsKLQkJOwotICAgIGJyZWFrO30KLWNhc2UgMTg6CisJCSAgKHl5dmFsKSA9ICh5eXZzcFswXSk7CisJCTt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOToKICNsaW5lIDE2NSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdID8geXl2c3BbMF0gOiB5eXZzcFstMV0gPyB5eXZzcFstMV0gOiB5eXZzcFstMl0gPyB5eXZzcFstMl0gOiB5eXZzcFstM107IDsKLSAgICBicmVhazt9Ci1jYXNlIDE5OgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSkgPyAoeXl2c3BbMF0pIDogKHl5dnNwWy0xXSkgPyAoeXl2c3BbLTFdKSA6ICh5eXZzcFstMl0pID8gKHl5dnNwWy0yXSkgOiAoeXl2c3BbLTNdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDIwOgogI2xpbmUgMTcwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IGRlY2xfc3BlYyA9IE5VTEw7IDsKLSAgICBicmVhazt9Ci1jYXNlIDIxOgorICAgIHsgZGVjbF9zcGVjID0gTlVMTDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDIyOgogI2xpbmUgMTc1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IGRlY2xfc3BlYyA9ICp5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMjI6CisgICAgeyBkZWNsX3NwZWMgPSAqKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDIzOgogI2xpbmUgMTc2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IGRlY2xfc3BlYyA9ICp5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMjM6CisgICAgeyBkZWNsX3NwZWMgPSAqKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDI0OgogI2xpbmUgMTgxICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IC8qIFZlcnNpb24gMiBjaGVja3N1bW1pbmcgaWdub3JlcyBzdG9yYWdlIGNsYXNzLCBhcyB0aGF0CisgICAgeyAvKiBWZXJzaW9uIDIgY2hlY2tzdW1taW5nIGlnbm9yZXMgc3RvcmFnZSBjbGFzcywgYXMgdGhhdAogCQkgICAgIGlzIHJlYWxseSBpcnJlbGV2YW50IHRvIHRoZSBsaW5rYWdlLiAgKi8KLQkJICByZW1vdmVfbm9kZSh5eXZzcFswXSk7Ci0JCSAgeXl2YWwgPSB5eXZzcFswXTsKLQkJOwotICAgIGJyZWFrO30KLWNhc2UgMjg6CisJCSAgcmVtb3ZlX25vZGUoKHl5dnNwWzBdKSk7CisJCSAgKHl5dmFsKSA9ICh5eXZzcFswXSk7CisJCTt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyOToKICNsaW5lIDE5MyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyBpc19leHRlcm4gPSAxOyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAyOToKKyAgICB7IGlzX2V4dGVybiA9IDE7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzA6CiAjbGluZSAxOTQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgaXNfZXh0ZXJuID0gMDsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMzM6Ci0jbGluZSAyMDUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgcmVtb3ZlX25vZGUoeXl2c3BbLTFdKTsgKCp5eXZzcFswXSktPnRhZyA9IFNZTV9TVFJVQ1Q7IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDM0OgotI2xpbmUgMjA3ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHJlbW92ZV9ub2RlKHl5dnNwWy0xXSk7ICgqeXl2c3BbMF0pLT50YWcgPSBTWU1fVU5JT047IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDM1OgotI2xpbmUgMjA5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHJlbW92ZV9ub2RlKHl5dnNwWy0xXSk7ICgqeXl2c3BbMF0pLT50YWcgPSBTWU1fRU5VTTsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMzY6Ci0jbGluZSAyMTMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgc3RydWN0IHN0cmluZ19saXN0ICpzID0gKnl5dnNwWzBdLCAqaSA9ICp5eXZzcFstMV0sICpyOworICAgIHsgaXNfZXh0ZXJuID0gMDsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNToKKyNsaW5lIDIwNiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgcmVtb3ZlX25vZGUoKHl5dnNwWy0xXSkpOyAoKih5eXZzcFswXSkpLT50YWcgPSBTWU1fU1RSVUNUOyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDM2OgorI2xpbmUgMjA4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyByZW1vdmVfbm9kZSgoeXl2c3BbLTFdKSk7ICgqKHl5dnNwWzBdKSktPnRhZyA9IFNZTV9VTklPTjsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNzoKKyNsaW5lIDIxMCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgcmVtb3ZlX25vZGUoKHl5dnNwWy0xXSkpOyAoKih5eXZzcFswXSkpLT50YWcgPSBTWU1fRU5VTTsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzODoKKyNsaW5lIDIxNCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgc3RydWN0IHN0cmluZ19saXN0ICpzID0gKih5eXZzcFswXSksICppID0gKih5eXZzcFstMV0pLCAqcjsKIAkJICByID0gY29weV9ub2RlKGkpOyByLT50YWcgPSBTWU1fU1RSVUNUOwotCQkgIHItPm5leHQgPSAoKnl5dnNwWy0yXSktPm5leHQ7ICp5eXZzcFswXSA9IHI7ICgqeXl2c3BbLTJdKS0+bmV4dCA9IE5VTEw7CisJCSAgci0+bmV4dCA9ICgqKHl5dnNwWy0yXSkpLT5uZXh0OyAqKHl5dnNwWzBdKSA9IHI7ICgqKHl5dnNwWy0yXSkpLT5uZXh0ID0gTlVMTDsKIAkJICBhZGRfc3ltYm9sKGktPnN0cmluZywgU1lNX1NUUlVDVCwgcywgaXNfZXh0ZXJuKTsKLQkJICB5eXZhbCA9IHl5dnNwWzBdOwotCQk7Ci0gICAgYnJlYWs7fQotY2FzZSAzNzoKLSNsaW5lIDIyMCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnMgPSAqeXl2c3BbMF0sICppID0gKnl5dnNwWy0xXSwgKnI7CisJCSAgKHl5dmFsKSA9ICh5eXZzcFswXSk7CisJCTt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzOToKKyNsaW5lIDIyMSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgc3RydWN0IHN0cmluZ19saXN0ICpzID0gKih5eXZzcFswXSksICppID0gKih5eXZzcFstMV0pLCAqcjsKIAkJICByID0gY29weV9ub2RlKGkpOyByLT50YWcgPSBTWU1fVU5JT047Ci0JCSAgci0+bmV4dCA9ICgqeXl2c3BbLTJdKS0+bmV4dDsgKnl5dnNwWzBdID0gcjsgKCp5eXZzcFstMl0pLT5uZXh0ID0gTlVMTDsKKwkJICByLT5uZXh0ID0gKCooeXl2c3BbLTJdKSktPm5leHQ7ICooeXl2c3BbMF0pID0gcjsgKCooeXl2c3BbLTJdKSktPm5leHQgPSBOVUxMOwogCQkgIGFkZF9zeW1ib2woaS0+c3RyaW5nLCBTWU1fVU5JT04sIHMsIGlzX2V4dGVybik7Ci0JCSAgeXl2YWwgPSB5eXZzcFswXTsKLQkJOwotICAgIGJyZWFrO30KLWNhc2UgMzg6Ci0jbGluZSAyMjcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgc3RydWN0IHN0cmluZ19saXN0ICpzID0gKnl5dnNwWzBdLCAqaSA9ICp5eXZzcFstMV0sICpyOworCQkgICh5eXZhbCkgPSAoeXl2c3BbMF0pOworCQk7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDA6CisjbGluZSAyMjggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7IHN0cnVjdCBzdHJpbmdfbGlzdCAqcyA9ICooeXl2c3BbMF0pLCAqaSA9ICooeXl2c3BbLTFdKSwgKnI7CiAJCSAgciA9IGNvcHlfbm9kZShpKTsgci0+dGFnID0gU1lNX0VOVU07Ci0JCSAgci0+bmV4dCA9ICgqeXl2c3BbLTJdKS0+bmV4dDsgKnl5dnNwWzBdID0gcjsgKCp5eXZzcFstMl0pLT5uZXh0ID0gTlVMTDsKKwkJICByLT5uZXh0ID0gKCooeXl2c3BbLTJdKSktPm5leHQ7ICooeXl2c3BbMF0pID0gcjsgKCooeXl2c3BbLTJdKSktPm5leHQgPSBOVUxMOwogCQkgIGFkZF9zeW1ib2woaS0+c3RyaW5nLCBTWU1fRU5VTSwgcywgaXNfZXh0ZXJuKTsKLQkJICB5eXZhbCA9IHl5dnNwWzBdOwotCQk7Ci0gICAgYnJlYWs7fQotY2FzZSAzOToKLSNsaW5lIDIzNSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA0MDoKKwkJICAoeXl2YWwpID0gKHl5dnNwWzBdKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDQxOgogI2xpbmUgMjM2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDQxOgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MjoKICNsaW5lIDIzNyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA1MjoKLSNsaW5lIDI1MSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyAoKnl5dnNwWzBdKS0+dGFnID0gU1lNX1RZUEVERUY7IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDUzOgotI2xpbmUgMjU2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF0gPyB5eXZzcFswXSA6IHl5dnNwWy0xXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNTQ6Ci0jbGluZSAyNjAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSBOVUxMOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA1NzoKLSNsaW5lIDI2NiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA2MToKLSNsaW5lIDI3MiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyAvKiByZXN0cmljdCBoYXMgbm8gZWZmZWN0IGluIHByb3RvdHlwZXMgc28gaWdub3JlIGl0ICovCi0JCSAgcmVtb3ZlX25vZGUoeXl2c3BbMF0pOwotCQkgIHl5dmFsID0geXl2c3BbMF07Ci0JCTsKLSAgICBicmVhazt9Ci1jYXNlIDYyOgotI2xpbmUgMjc5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDY0OgotI2xpbmUgMjg1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IGlmIChjdXJyZW50X25hbWUgIT0gTlVMTCkgeworICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MzoKKyNsaW5lIDIzOCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NDoKKyNsaW5lIDI1MiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgKCooeXl2c3BbMF0pKS0+dGFnID0gU1lNX1RZUEVERUY7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTU6CisjbGluZSAyNTcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pID8gKHl5dnNwWzBdKSA6ICh5eXZzcFstMV0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTY6CisjbGluZSAyNjEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTk6CisjbGluZSAyNjcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjM6CisjbGluZSAyNzMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7IC8qIHJlc3RyaWN0IGhhcyBubyBlZmZlY3QgaW4gcHJvdG90eXBlcyBzbyBpZ25vcmUgaXQgKi8KKwkJICByZW1vdmVfbm9kZSgoeXl2c3BbMF0pKTsKKwkJICAoeXl2YWwpID0gKHl5dnNwWzBdKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDY0OgorI2xpbmUgMjgwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDY2OgorI2xpbmUgMjg2ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyBpZiAoY3VycmVudF9uYW1lICE9IE5VTEwpIHsKIAkJICAgIGVycm9yX3dpdGhfcG9zKCJ1bmV4cGVjdGVkIHNlY29uZCBkZWNsYXJhdGlvbiBuYW1lIik7CiAJCSAgICBZWUVSUk9SOwogCQkgIH0gZWxzZSB7Ci0JCSAgICBjdXJyZW50X25hbWUgPSAoKnl5dnNwWzBdKS0+c3RyaW5nOwotCQkgICAgeXl2YWwgPSB5eXZzcFswXTsKKwkJICAgIGN1cnJlbnRfbmFtZSA9ICgqKHl5dnNwWzBdKSktPnN0cmluZzsKKwkJICAgICh5eXZhbCkgPSAoeXl2c3BbMF0pOwogCQkgIH0KLQkJOwotICAgIGJyZWFrO30KLWNhc2UgNjU6Ci0jbGluZSAyOTQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNjY6Ci0jbGluZSAyOTYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNjc6Ci0jbGluZSAyOTggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNjg6Ci0jbGluZSAzMDAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNjk6Ci0jbGluZSAzMDIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNzA6Ci0jbGluZSAzMDggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNzQ6Ci0jbGluZSAzMTYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNzU6Ci0jbGluZSAzMTggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNzY6Ci0jbGluZSAzMjAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNzc6Ci0jbGluZSAzMjIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNzg6Ci0jbGluZSAzMjQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgNzk6Ci0jbGluZSAzMjggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgODE6Ci0jbGluZSAzMzAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgODI6Ci0jbGluZSAzMzQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSBOVUxMOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA4NToKLSNsaW5lIDM0MSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA4NjoKLSNsaW5lIDM0NiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdID8geXl2c3BbMF0gOiB5eXZzcFstMV07IDsKLSAgICBicmVhazt9Ci1jYXNlIDg3OgotI2xpbmUgMzUxICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF0gPyB5eXZzcFswXSA6IHl5dnNwWy0xXTsgOwotICAgIGJyZWFrO30KLWNhc2UgODk6Ci0jbGluZSAzNTYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSBOVUxMOyA7Ci0gICAgYnJlYWs7fQotY2FzZSA5MDoKLSNsaW5lIDM1OCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyAvKiBGb3IgdmVyc2lvbiAyIGNoZWNrc3Vtcywgd2UgZG9uJ3Qgd2FudCB0byByZW1lbWJlcgorCQk7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjc6CisjbGluZSAyOTUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjg6CisjbGluZSAyOTcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjk6CisjbGluZSAyOTkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzA6CisjbGluZSAzMDEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzE6CisjbGluZSAzMDMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzI6CisjbGluZSAzMDkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzY6CisjbGluZSAzMTcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzc6CisjbGluZSAzMTkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6CisjbGluZSAzMjEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzk6CisjbGluZSAzMjMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODA6CisjbGluZSAzMjUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODE6CisjbGluZSAzMjkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODM6CisjbGluZSAzMzEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODQ6CisjbGluZSAzMzUgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODc6CisjbGluZSAzNDIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODg6CisjbGluZSAzNDcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pID8gKHl5dnNwWzBdKSA6ICh5eXZzcFstMV0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODk6CisjbGluZSAzNTIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pID8gKHl5dnNwWzBdKSA6ICh5eXZzcFstMV0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTE6CisjbGluZSAzNTcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTI6CisjbGluZSAzNTkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7IC8qIEZvciB2ZXJzaW9uIDIgY2hlY2tzdW1zLCB3ZSBkb24ndCB3YW50IHRvIHJlbWVtYmVyCiAJCSAgICAgcHJpdmF0ZSBwYXJhbWV0ZXIgbmFtZXMuICAqLwotCQkgIHJlbW92ZV9ub2RlKHl5dnNwWzBdKTsKLQkJICB5eXZhbCA9IHl5dnNwWzBdOwotCQk7Ci0gICAgYnJlYWs7fQotY2FzZSA5MToKLSNsaW5lIDM2NiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyByZW1vdmVfbm9kZSh5eXZzcFswXSk7Ci0JCSAgeXl2YWwgPSB5eXZzcFswXTsKLQkJOwotICAgIGJyZWFrO30KLWNhc2UgOTI6Ci0jbGluZSAzNzAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgOTM6Ci0jbGluZSAzNzIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgOTQ6Ci0jbGluZSAzNzQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgOTU6Ci0jbGluZSAzNzYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgOTY6Ci0jbGluZSAzNzggInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgOTc6Ci0jbGluZSAzODMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgc3RydWN0IHN0cmluZ19saXN0ICpkZWNsID0gKnl5dnNwWy0xXTsKLQkJICAqeXl2c3BbLTFdID0gTlVMTDsKKwkJICByZW1vdmVfbm9kZSgoeXl2c3BbMF0pKTsKKwkJICAoeXl2YWwpID0gKHl5dnNwWzBdKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDkzOgorI2xpbmUgMzY3ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyByZW1vdmVfbm9kZSgoeXl2c3BbMF0pKTsKKwkJICAoeXl2YWwpID0gKHl5dnNwWzBdKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDk0OgorI2xpbmUgMzcxICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDk1OgorI2xpbmUgMzczICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDk2OgorI2xpbmUgMzc1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDk3OgorI2xpbmUgMzc3ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDk4OgorI2xpbmUgMzc5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDk5OgorI2xpbmUgMzg0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlY2wgPSAqKHl5dnNwWy0xXSk7CisJCSAgKih5eXZzcFstMV0pID0gTlVMTDsKIAkJICBhZGRfc3ltYm9sKGN1cnJlbnRfbmFtZSwgU1lNX05PUk1BTCwgZGVjbCwgaXNfZXh0ZXJuKTsKLQkJICB5eXZhbCA9IHl5dnNwWzBdOwotCQk7Ci0gICAgYnJlYWs7fQotY2FzZSA5ODoKLSNsaW5lIDM5MSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IE5VTEw7IDsKLSAgICBicmVhazt9Ci1jYXNlIDEwMDoKLSNsaW5lIDM5OCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyByZW1vdmVfbGlzdCh5eXZzcFswXSwgJigqeXl2c3BbLTFdKS0+bmV4dCk7IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDEwMToKLSNsaW5lIDQwMiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMDI6CisJCSAgKHl5dmFsKSA9ICh5eXZzcFswXSk7CisJCTt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDA6CisjbGluZSAzOTIgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAyOgorI2xpbmUgMzk5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyByZW1vdmVfbGlzdCgoeXl2c3BbMF0pLCAmKCooeXl2c3BbLTFdKSktPm5leHQpOyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwMzoKICNsaW5lIDQwMyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMDM6Ci0jbGluZSA0MDcgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSBOVUxMOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMDY6Ci0jbGluZSA0MTMgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMTA3OgotI2xpbmUgNDE4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDEwODoKLSNsaW5lIDQyMCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMDk6Ci0jbGluZSA0MjQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSBOVUxMOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMTI6Ci0jbGluZSA0MzAgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMTEzOgotI2xpbmUgNDM0ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF0gPyB5eXZzcFswXSA6IHl5dnNwWy0xXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMTE0OgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDQ6CisjbGluZSA0MDQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA1OgorI2xpbmUgNDA4ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gTlVMTDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwODoKKyNsaW5lIDQxNCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDk6CisjbGluZSA0MTkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTEwOgorI2xpbmUgNDIxICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDExMToKKyNsaW5lIDQyNSAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgKHl5dmFsKSA9IE5VTEw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTQ6CisjbGluZSA0MzEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1OgogI2xpbmUgNDM1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0geXl2c3BbMF07IDsKLSAgICBicmVhazt9Ci1jYXNlIDExNjoKLSNsaW5lIDQ0MCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgoteyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMTc6Ci0jbGluZSA0NDQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSBOVUxMOyA7Ci0gICAgYnJlYWs7fQotY2FzZSAxMTk6Ci0jbGluZSA0NDkgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKLXsgeXl2YWwgPSB5eXZzcFswXTsgOwotICAgIGJyZWFrO30KLWNhc2UgMTIwOgotI2xpbmUgNDUzICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IHl5dmFsID0gTlVMTDsgOwotICAgIGJyZWFrO30KLWNhc2UgMTIyOgotI2xpbmUgNDU5ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCi17IGV4cG9ydF9zeW1ib2woKCp5eXZzcFstMl0pLT5zdHJpbmcpOyB5eXZhbCA9IHl5dnNwWzBdOyA7Ci0gICAgYnJlYWs7fQotfQotICAgLyogdGhlIGFjdGlvbiBmaWxlIGdldHMgY29waWVkIGluIGluIHBsYWNlIG9mIHRoaXMgZG9sbGFyc2lnbiAqLwotI2xpbmUgNTQzICIvdXNyL2xpYi9iaXNvbi5zaW1wbGUiCisgICAgeyAoeXl2YWwpID0gKHl5dnNwWzBdKSA/ICh5eXZzcFswXSkgOiAoeXl2c3BbLTFdKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDExNjoKKyNsaW5lIDQzNiAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisjbGluZSA0NDEgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSAoeXl2c3BbMF0pOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE5OgorI2xpbmUgNDQ1ICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyAoeXl2YWwpID0gTlVMTDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyMToKKyNsaW5lIDQ1MCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorICAgIHsgKHl5dmFsKSA9ICh5eXZzcFswXSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjI6CisjbGluZSA0NTQgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueSIKKyAgICB7ICh5eXZhbCkgPSBOVUxMOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI0OgorI2xpbmUgNDYwICJzY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkiCisgICAgeyBleHBvcnRfc3ltYm9sKCgqKHl5dnNwWy0yXSkpLT5zdHJpbmcpOyAoeXl2YWwpID0gKHl5dnNwWzBdKTsgO30KKyAgICBicmVhazsKKworCisgICAgfQorCisvKiBMaW5lIDEwMzcgb2YgeWFjYy5jLiAgKi8KKyNsaW5lIDE4MTYgInNjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuYyIKIAwKICAgeXl2c3AgLT0geXlsZW47CiAgIHl5c3NwIC09IHl5bGVuOwotI2lmZGVmIFlZTFNQX05FRURFRAotICB5eWxzcCAtPSB5eWxlbjsKLSNlbmRpZgogCi0jaWYgWVlERUJVRyAhPSAwCi0gIGlmICh5eWRlYnVnKQotICAgIHsKLSAgICAgIHNob3J0ICpzc3AxID0geXlzcyAtIDE7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsKLSAgICAgIHdoaWxlIChzc3AxICE9IHl5c3NwKQotCWZwcmludGYgKHN0ZGVyciwgIiAlZCIsICorK3NzcDEpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci0jZW5kaWYKKworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwogCiAgICorK3l5dnNwID0geXl2YWw7CiAKLSNpZmRlZiBZWUxTUF9ORUVERUQKLSAgeXlsc3ArKzsKLSAgaWYgKHl5bGVuID09IDApCi0gICAgewotICAgICAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eWxsb2MuZmlyc3RfbGluZTsKLSAgICAgIHl5bHNwLT5maXJzdF9jb2x1bW4gPSB5eWxsb2MuZmlyc3RfY29sdW1uOwotICAgICAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcC0xKS0+bGFzdF9saW5lOwotICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwLTEpLT5sYXN0X2NvbHVtbjsKLSAgICAgIHl5bHNwLT50ZXh0ID0gMDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2xpbmU7Ci0gICAgICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfY29sdW1uOwotICAgIH0KLSNlbmRpZgogCi0gIC8qIE5vdyAic2hpZnQiIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4KLSAgICAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUgdGhhdCBnb2VzIHRvLAotICAgICBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8KLSAgICAgYW5kIHRoZSBydWxlIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KIAogICB5eW4gPSB5eXIxW3l5bl07CiAKLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOwotICBpZiAoeXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQogICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOwogICBlbHNlCi0gICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOwogCiAgIGdvdG8geXluZXdzdGF0ZTsKIAoteXllcnJsYWI6ICAgLyogaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgKi8KIAotICBpZiAoISB5eWVycnN0YXR1cykKLSAgICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKICAgICB7CiAgICAgICArK3l5bmVycnM7Ci0KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKIAotICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisgICAgICBpZiAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDwgWVlMQVNUKQogCXsKLQkgIGludCBzaXplID0gMDsKLQkgIGNoYXIgKm1zZzsKLQkgIGludCB4LCBjb3VudDsKKwkgIFlZU0laRV9UIHl5c2l6ZSA9IDA7CisJICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisJICBjb25zdCBjaGFyKiB5eXByZWZpeDsKKwkgIGNoYXIgKnl5bXNnOworCSAgaW50IHl5eDsKIAotCSAgY291bnQgPSAwOwotCSAgLyogU3RhcnQgWCBhdCAteXluIGlmIG5lYyB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluIHl5Y2hlY2suICAqLwotCSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7Ci0JICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCi0JICAgIGlmICh5eWNoZWNrW3ggKyB5eW5dID09IHgpCi0JICAgICAgc2l6ZSArPSBzdHJsZW4oeXl0bmFtZVt4XSkgKyAxNSwgY291bnQrKzsKLQkgIG1zZyA9IChjaGFyICopIG1hbGxvYyhzaXplICsgMTUpOwotCSAgaWYgKG1zZyAhPSAwKQorCSAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorCSAgICAgWVlDSEVDSy4gICovCisJICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKwkgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworCSAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW47CisJICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisJICBpbnQgeXljb3VudCA9IDA7CisKKwkgIHl5cHJlZml4ID0gIiwgZXhwZWN0aW5nICI7CisJICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJICAgICAgeworCQl5eXNpemUgKz0geXlzdHJsZW4gKHl5cHJlZml4KSArIHl5c3RybGVuICh5eXRuYW1lIFt5eXhdKTsKKwkJeXljb3VudCArPSAxOworCQlpZiAoeXljb3VudCA9PSA1KQorCQkgIHsKKwkJICAgIHl5c2l6ZSA9IDA7CisJCSAgICBicmVhazsKKwkJICB9CisJICAgICAgfQorCSAgeXlzaXplICs9IChzaXplb2YgKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgIikKKwkJICAgICArIHl5c3RybGVuICh5eXRuYW1lW3l5dHlwZV0pKTsKKwkgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlzaXplKTsKKwkgIGlmICh5eW1zZyAhPSAwKQogCSAgICB7Ci0JICAgICAgc3RyY3B5KG1zZywgInBhcnNlIGVycm9yIik7CisJICAgICAgY2hhciAqeXlwID0geXlzdHBjcHkgKHl5bXNnLCAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICIpOworCSAgICAgIHl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbeXl0eXBlXSk7CiAKLQkgICAgICBpZiAoY291bnQgPCA1KQorCSAgICAgIGlmICh5eWNvdW50IDwgNSkKIAkJewotCQkgIGNvdW50ID0gMDsKLQkJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4gOiAwKTsKLQkJICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCi0JCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCQkgIHl5cHJlZml4ID0gIiwgZXhwZWN0aW5nICI7CisJCSAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwkJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKIAkJICAgICAgewotCQkJc3RyY2F0KG1zZywgY291bnQgPT0gMCA/ICIsIGV4cGVjdGluZyBgIiA6ICIgb3IgYCIpOwotCQkJc3RyY2F0KG1zZywgeXl0bmFtZVt4XSk7Ci0JCQlzdHJjYXQobXNnLCAiJyIpOwotCQkJY291bnQrKzsKKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5cHJlZml4KTsKKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbeXl4XSk7CisJCQl5eXByZWZpeCA9ICIgb3IgIjsKIAkJICAgICAgfQogCQl9Ci0JICAgICAgeXllcnJvcihtc2cpOwotCSAgICAgIGZyZWUobXNnKTsKKwkgICAgICB5eWVycm9yICh5eW1zZyk7CisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CiAJICAgIH0KIAkgIGVsc2UKLQkgICAgeXllcnJvciAoInBhcnNlIGVycm9yOyBhbHNvIHZpcnR1YWwgbWVtb3J5IGV4Y2VlZGVkIik7CisJICAgIHl5ZXJyb3IgKCJzeW50YXggZXJyb3I7IGFsc28gdmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkIik7CiAJfQogICAgICAgZWxzZQogI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwotCXl5ZXJyb3IoInBhcnNlIGVycm9yIik7CisJeXllcnJvciAoInN5bnRheCBlcnJvciIpOwogICAgIH0KIAotICBnb3RvIHl5ZXJybGFiMTsKLXl5ZXJybGFiMTogICAvKiBoZXJlIG9uIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IGFuIGFjdGlvbiAqLworCiAKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewotICAgICAgLyogaWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbiBlcnJvciwgZGlzY2FyZCBpdC4gICovCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCiAKLSAgICAgIC8qIHJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dCAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBJZiBhdCBlbmQgb2YgaW5wdXQsIHBvcCB0aGUgZXJyb3IgdG9rZW4sCisJICAgICB0aGVuIHRoZSByZXN0IG9mIHRoZSBzdGFjaywgdGhlbiByZXR1cm4gZmFpbHVyZS4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICAgZm9yICg7OykKKwkgICAgICAgeworCisJCSBZWVBPUFNUQUNLOworCQkgaWYgKHl5c3NwID09IHl5c3MpCisJCSAgIFlZQUJPUlQ7CisJCSB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3ApOworCSAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLCB5eXRva2VuLCAmeXlsdmFsKTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworI2lmZGVmIF9fR05VQ19fCisgIC8qIFBhY2lmeSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMgWVlFUlJPUiBhbmQgdGhlIGxhYmVsCisgICAgIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlciBjb2RlLiAgKi8KKyAgaWYgKDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKyNlbmRpZgorCit5eXZzcCAtPSB5eWxlbjsKKyAgeXlzc3AgLT0geXlsZW47CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKIAlZWUFCT1JUOwogCi0jaWYgWVlERUJVRyAhPSAwCi0gICAgICBpZiAoeXlkZWJ1ZykKLQlmcHJpbnRmKHN0ZGVyciwgIkRpc2NhcmRpbmcgdG9rZW4gJWQgKCVzKS5cbiIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7Ci0jZW5kaWYKIAotICAgICAgeXljaGFyID0gWVlFTVBUWTsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3ApOworICAgICAgWVlQT1BTVEFDSzsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbgotICAgICBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4uICAqLwotCi0gIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLwotCi0gIGdvdG8geXllcnJoYW5kbGU7Ci0KLXl5ZXJyZGVmYXVsdDogIC8qIGN1cnJlbnQgc3RhdGUgZG9lcyBub3QgZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgdGhlIGVycm9yIHRva2VuLiAqLwotCi0jaWYgMAotICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKLSAgICAgc2hvdWxkIHNoaWZ0IHRoZW0uICAqLwotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4qLwotICBpZiAoeXluKSBnb3RvIHl5ZGVmYXVsdDsKLSNlbmRpZgotCi15eWVycnBvcDogICAvKiBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbiAqLwotCi0gIGlmICh5eXNzcCA9PSB5eXNzKSBZWUFCT1JUOwotICB5eXZzcC0tOwotICB5eXN0YXRlID0gKi0teXlzc3A7Ci0jaWZkZWYgWVlMU1BfTkVFREVECi0gIHl5bHNwLS07Ci0jZW5kaWYKLQotI2lmIFlZREVCVUcgIT0gMAotICBpZiAoeXlkZWJ1ZykKLSAgICB7Ci0gICAgICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOwotICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3ApCi0JZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwotICAgIH0KLSNlbmRpZgotCi15eWVycmhhbmRsZToKLQotICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gWVlGTEFHKQotICAgIGdvdG8geXllcnJkZWZhdWx0OwotCi0gIHl5biArPSBZWVRFUlJPUjsKLSAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSBZWVRFUlJPUikKLSAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKLQotICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4gPCAwKQotICAgIHsKLSAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQotCWdvdG8geXllcnJwb3A7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5eXJlZHVjZTsKLSAgICB9Ci0gIGVsc2UgaWYgKHl5biA9PSAwKQotICAgIGdvdG8geXllcnJwb3A7Ci0KICAgaWYgKHl5biA9PSBZWUZJTkFMKQogICAgIFlZQUNDRVBUOwogCi0jaWYgWVlERUJVRyAhPSAwCi0gIGlmICh5eWRlYnVnKQotICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgZXJyb3IgdG9rZW4sICIpOwotI2VuZGlmCi0KICAgKisreXl2c3AgPSB5eWx2YWw7Ci0jaWZkZWYgWVlMU1BfTkVFREVECi0gICorK3l5bHNwID0geXlsbG9jOwotI2VuZGlmCisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7CiAKICAgeXlzdGF0ZSA9IHl5bjsKICAgZ290byB5eW5ld3N0YXRlOwogCi0geXlhY2NlcHRsYWI6Ci0gIC8qIFlZQUNDRVBUIGNvbWVzIGhlcmUuICAqLwotICBpZiAoeXlmcmVlX3N0YWNrcykKLSAgICB7Ci0gICAgICBmcmVlICh5eXNzKTsKLSAgICAgIGZyZWUgKHl5dnMpOwotI2lmZGVmIFlZTFNQX05FRURFRAotICAgICAgZnJlZSAoeXlscyk7Ci0jZW5kaWYKLSAgICB9Ci0gIHJldHVybiAwOwogCi0geXlhYm9ydGxhYjoKLSAgLyogWVlBQk9SVCBjb21lcyBoZXJlLiAgKi8KLSAgaWYgKHl5ZnJlZV9zdGFja3MpCi0gICAgewotICAgICAgZnJlZSAoeXlzcyk7Ci0gICAgICBmcmVlICh5eXZzKTsKLSNpZmRlZiBZWUxTUF9ORUVERUQKLSAgICAgIGZyZWUgKHl5bHMpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoKKyAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCisgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwpOworICB5eWNoYXIgPSBZWUVNUFRZOworICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW92ZXJmbG93bGFiIC0tIHBhcnNlciBvdmVyZmxvdyBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlvdmVyZmxvd2xhYjoKKyAgeXllcnJvciAoInBhcnNlciBzdGFjayBvdmVyZmxvdyIpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZhbGwgdGhyb3VnaC4gICovCiAjZW5kaWYKLSAgICB9Ci0gIHJldHVybiAxOworCit5eXJldHVybjoKKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisgIHJldHVybiB5eXJlc3VsdDsKIH0KLSNsaW5lIDQ2MyAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgorCisKKyNsaW5lIDQ2NCAic2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55IgogCiAKIHN0YXRpYyB2b2lkCkBAIC0xNTc1LDMgKzIwNDgsNCBAQAogewogICBlcnJvcl93aXRoX3BvcygiJXMiLCBlKTsKIH0KKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9wYXJzZS5oX3NoaXBwZWQgYi9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmhfc2hpcHBlZAppbmRleCBkNWIyN2UzLi5mM2ZiMmJiIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmhfc2hpcHBlZAorKysgYi9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLmhfc2hpcHBlZApAQCAtMSw0NiArMSwxMjggQEAKLSNpZm5kZWYgWVlTVFlQRQotI2RlZmluZSBZWVNUWVBFIGludAotI2VuZGlmCi0jZGVmaW5lCUFTTV9LRVlXCTI1NwotI2RlZmluZQlBVFRSSUJVVEVfS0VZVwkyNTgKLSNkZWZpbmUJQVVUT19LRVlXCTI1OQotI2RlZmluZQlCT09MX0tFWVcJMjYwCi0jZGVmaW5lCUNIQVJfS0VZVwkyNjEKLSNkZWZpbmUJQ09OU1RfS0VZVwkyNjIKLSNkZWZpbmUJRE9VQkxFX0tFWVcJMjYzCi0jZGVmaW5lCUVOVU1fS0VZVwkyNjQKLSNkZWZpbmUJRVhURVJOX0tFWVcJMjY1Ci0jZGVmaW5lCUZMT0FUX0tFWVcJMjY2Ci0jZGVmaW5lCUlOTElORV9LRVlXCTI2NwotI2RlZmluZQlJTlRfS0VZVwkyNjgKLSNkZWZpbmUJTE9OR19LRVlXCTI2OQotI2RlZmluZQlSRUdJU1RFUl9LRVlXCTI3MAotI2RlZmluZQlSRVNUUklDVF9LRVlXCTI3MQotI2RlZmluZQlTSE9SVF9LRVlXCTI3MgotI2RlZmluZQlTSUdORURfS0VZVwkyNzMKLSNkZWZpbmUJU1RBVElDX0tFWVcJMjc0Ci0jZGVmaW5lCVNUUlVDVF9LRVlXCTI3NQotI2RlZmluZQlUWVBFREVGX0tFWVcJMjc2Ci0jZGVmaW5lCVVOSU9OX0tFWVcJMjc3Ci0jZGVmaW5lCVVOU0lHTkVEX0tFWVcJMjc4Ci0jZGVmaW5lCVZPSURfS0VZVwkyNzkKLSNkZWZpbmUJVk9MQVRJTEVfS0VZVwkyODAKLSNkZWZpbmUJVFlQRU9GX0tFWVcJMjgxCi0jZGVmaW5lCUVYUE9SVF9TWU1CT0xfS0VZVwkyODIKLSNkZWZpbmUJQVNNX1BIUkFTRQkyODMKLSNkZWZpbmUJQVRUUklCVVRFX1BIUkFTRQkyODQKLSNkZWZpbmUJQlJBQ0VfUEhSQVNFCTI4NQotI2RlZmluZQlCUkFDS0VUX1BIUkFTRQkyODYKLSNkZWZpbmUJRVhQUkVTU0lPTl9QSFJBU0UJMjg3Ci0jZGVmaW5lCUNIQVIJMjg4Ci0jZGVmaW5lCURPVFMJMjg5Ci0jZGVmaW5lCUlERU5UCTI5MAotI2RlZmluZQlJTlQJMjkxCi0jZGVmaW5lCVJFQUwJMjkyCi0jZGVmaW5lCVNUUklORwkyOTMKLSNkZWZpbmUJVFlQRQkyOTQKLSNkZWZpbmUJT1RIRVIJMjk1Ci0jZGVmaW5lCUZJTEVOQU1FCTI5NgorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMC4gICovCiAKKy8qIFNrZWxldG9uIHBhcnNlciBmb3IgWWFjYy1saWtlIHBhcnNpbmcgd2l0aCBCaXNvbiwKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKyAgIEJpc29uIG91dHB1dCBmaWxlLCB5b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxlIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBBU01fS0VZVyA9IDI1OCwKKyAgICAgQVRUUklCVVRFX0tFWVcgPSAyNTksCisgICAgIEFVVE9fS0VZVyA9IDI2MCwKKyAgICAgQk9PTF9LRVlXID0gMjYxLAorICAgICBDSEFSX0tFWVcgPSAyNjIsCisgICAgIENPTlNUX0tFWVcgPSAyNjMsCisgICAgIERPVUJMRV9LRVlXID0gMjY0LAorICAgICBFTlVNX0tFWVcgPSAyNjUsCisgICAgIEVYVEVSTl9LRVlXID0gMjY2LAorICAgICBGTE9BVF9LRVlXID0gMjY3LAorICAgICBJTkxJTkVfS0VZVyA9IDI2OCwKKyAgICAgSU5UX0tFWVcgPSAyNjksCisgICAgIExPTkdfS0VZVyA9IDI3MCwKKyAgICAgUkVHSVNURVJfS0VZVyA9IDI3MSwKKyAgICAgUkVTVFJJQ1RfS0VZVyA9IDI3MiwKKyAgICAgU0hPUlRfS0VZVyA9IDI3MywKKyAgICAgU0lHTkVEX0tFWVcgPSAyNzQsCisgICAgIFNUQVRJQ19LRVlXID0gMjc1LAorICAgICBTVFJVQ1RfS0VZVyA9IDI3NiwKKyAgICAgVFlQRURFRl9LRVlXID0gMjc3LAorICAgICBVTklPTl9LRVlXID0gMjc4LAorICAgICBVTlNJR05FRF9LRVlXID0gMjc5LAorICAgICBWT0lEX0tFWVcgPSAyODAsCisgICAgIFZPTEFUSUxFX0tFWVcgPSAyODEsCisgICAgIFRZUEVPRl9LRVlXID0gMjgyLAorICAgICBFWFBPUlRfU1lNQk9MX0tFWVcgPSAyODMsCisgICAgIEFTTV9QSFJBU0UgPSAyODQsCisgICAgIEFUVFJJQlVURV9QSFJBU0UgPSAyODUsCisgICAgIEJSQUNFX1BIUkFTRSA9IDI4NiwKKyAgICAgQlJBQ0tFVF9QSFJBU0UgPSAyODcsCisgICAgIEVYUFJFU1NJT05fUEhSQVNFID0gMjg4LAorICAgICBDSEFSID0gMjg5LAorICAgICBET1RTID0gMjkwLAorICAgICBJREVOVCA9IDI5MSwKKyAgICAgSU5UID0gMjkyLAorICAgICBSRUFMID0gMjkzLAorICAgICBTVFJJTkcgPSAyOTQsCisgICAgIFRZUEUgPSAyOTUsCisgICAgIE9USEVSID0gMjk2LAorICAgICBGSUxFTkFNRSA9IDI5NworICAgfTsKKyNlbmRpZgorI2RlZmluZSBBU01fS0VZVyAyNTgKKyNkZWZpbmUgQVRUUklCVVRFX0tFWVcgMjU5CisjZGVmaW5lIEFVVE9fS0VZVyAyNjAKKyNkZWZpbmUgQk9PTF9LRVlXIDI2MQorI2RlZmluZSBDSEFSX0tFWVcgMjYyCisjZGVmaW5lIENPTlNUX0tFWVcgMjYzCisjZGVmaW5lIERPVUJMRV9LRVlXIDI2NAorI2RlZmluZSBFTlVNX0tFWVcgMjY1CisjZGVmaW5lIEVYVEVSTl9LRVlXIDI2NgorI2RlZmluZSBGTE9BVF9LRVlXIDI2NworI2RlZmluZSBJTkxJTkVfS0VZVyAyNjgKKyNkZWZpbmUgSU5UX0tFWVcgMjY5CisjZGVmaW5lIExPTkdfS0VZVyAyNzAKKyNkZWZpbmUgUkVHSVNURVJfS0VZVyAyNzEKKyNkZWZpbmUgUkVTVFJJQ1RfS0VZVyAyNzIKKyNkZWZpbmUgU0hPUlRfS0VZVyAyNzMKKyNkZWZpbmUgU0lHTkVEX0tFWVcgMjc0CisjZGVmaW5lIFNUQVRJQ19LRVlXIDI3NQorI2RlZmluZSBTVFJVQ1RfS0VZVyAyNzYKKyNkZWZpbmUgVFlQRURFRl9LRVlXIDI3NworI2RlZmluZSBVTklPTl9LRVlXIDI3OAorI2RlZmluZSBVTlNJR05FRF9LRVlXIDI3OQorI2RlZmluZSBWT0lEX0tFWVcgMjgwCisjZGVmaW5lIFZPTEFUSUxFX0tFWVcgMjgxCisjZGVmaW5lIFRZUEVPRl9LRVlXIDI4MgorI2RlZmluZSBFWFBPUlRfU1lNQk9MX0tFWVcgMjgzCisjZGVmaW5lIEFTTV9QSFJBU0UgMjg0CisjZGVmaW5lIEFUVFJJQlVURV9QSFJBU0UgMjg1CisjZGVmaW5lIEJSQUNFX1BIUkFTRSAyODYKKyNkZWZpbmUgQlJBQ0tFVF9QSFJBU0UgMjg3CisjZGVmaW5lIEVYUFJFU1NJT05fUEhSQVNFIDI4OAorI2RlZmluZSBDSEFSIDI4OQorI2RlZmluZSBET1RTIDI5MAorI2RlZmluZSBJREVOVCAyOTEKKyNkZWZpbmUgSU5UIDI5MgorI2RlZmluZSBSRUFMIDI5MworI2RlZmluZSBTVFJJTkcgMjk0CisjZGVmaW5lIFRZUEUgMjk1CisjZGVmaW5lIE9USEVSIDI5NgorI2RlZmluZSBGSUxFTkFNRSAyOTcKKworCisKKworI2lmICEgZGVmaW5lZCAoWVlTVFlQRSkgJiYgISBkZWZpbmVkIChZWVNUWVBFX0lTX0RFQ0xBUkVEKQordHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgogCiBleHRlcm4gWVlTVFlQRSB5eWx2YWw7CisKKworCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkgYi9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkKaW5kZXggMDk5MDQzNy4uY2EwNGM5NDQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueQorKysgYi9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkKQEAgLTE5Nyw2ICsxOTcsNyBAQAogdHlwZV9zcGVjaWZpZXI6CiAJc2ltcGxlX3R5cGVfc3BlY2lmaWVyCiAJfCBjdmFyX3F1YWxpZmllcgorCXwgVFlQRU9GX0tFWVcgJygnIGRlY2xfc3BlY2lmaWVyX3NlcSAnKicgJyknCiAJfCBUWVBFT0ZfS0VZVyAnKCcgZGVjbF9zcGVjaWZpZXJfc2VxICcpJwogCiAJLyogUmVmZXJlbmNlcyB0byBzL3UvZSdzIGRlZmluZWQgZWxzZXdoZXJlLiAgUmVhcnJhbmdlIHRoaW5ncwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnLy5naXRpZ25vcmUgYi9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQppbmRleCAyZGFjMzQ0Li5lOGFkMWY2IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQpAQCAtNSw2ICs1LDcgQEAKIGxleC4qLmMKICoudGFiLmMKICoudGFiLmgKK3pjb25mLmhhc2guYwogCiAjCiAjIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZSBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQppbmRleCBhOTYxNTNmLi4zZDdmMWFjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBACiAJJDwgYXJjaC8kKEFSQ0gpL0tjb25maWcKIAogbWVudWNvbmZpZzogJChvYmopL21jb25mCi0JJChRKSQoTUFLRSkgJChidWlsZCk9c2NyaXB0cy9seGRpYWxvZworCSQoUSkkKE1BS0UpICQoYnVpbGQpPXNjcmlwdHMva2NvbmZpZy9seGRpYWxvZwogCSQ8IGFyY2gvJChBUkNIKS9LY29uZmlnCiAKIGNvbmZpZzogJChvYmopL2NvbmYKQEAgLTExNSw2ICsxMTUsNyBAQAogCiBjbGVhbi1maWxlcwk6PSBsa2NfZGVmcy5oIHFjb25mLm1vYyAudG1wX3F0Y2hlY2sgXAogCQkgICAudG1wX2d0a2NoZWNrIHpjb25mLnRhYi5jIGxleC56Y29uZi5jIHpjb25mLmhhc2guYworc3ViZGlyLSArPSBseGRpYWxvZwogCiAjIE5lZWRlZCBmb3Igc3lzdGVtcyB3aXRob3V0IGdldHRleHQKIEtCVUlMRF9IQVZFX05MUyA6PSAkKHNoZWxsIFwKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy8uZ2l0aWdub3JlIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiMDhmZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorIworIyBHZW5lcmF0ZWQgZmlsZXMKKyMKK2x4ZGlhbG9nCmRpZmYgLS1naXQgYS9zY3JpcHRzL2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNjcmlwdHMvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HCnJlbmFtZSB0byBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HCmRpZmYgLS1naXQgYS9zY3JpcHRzL2x4ZGlhbG9nL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzY3JpcHRzL2x4ZGlhbG9nL01ha2VmaWxlCnJlbmFtZSB0byBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjA3YWU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogIGNoZWNrbGlzdC5jIC0tIGltcGxlbWVudHMgdGhlIGNoZWNrbGlzdCBib3gKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogICAgIFN0dWFydCBIZXJiZXJ0IC0gUy5IZXJiZXJ0QHNoZWZmaWVsZC5hYy51azogcmFkaW9saXN0IGV4dGVuc2lvbgorICogICAgIEFsZXNzYW5kcm8gUnViaW5pIC0gcnViaW5pQGlwdnZpcy51bmlwdi5pdDogbWVyZ2VkIHRoZSB0d28KKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKK3N0YXRpYyBpbnQgbGlzdF93aWR0aCwgY2hlY2tfeCwgaXRlbV94OworCisvKgorICogUHJpbnQgbGlzdCBpdGVtCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2l0ZW0oV0lORE9XICogd2luLCBjb25zdCBjaGFyICppdGVtLCBpbnQgc3RhdHVzLCBpbnQgY2hvaWNlLAorCQkgICAgICAgaW50IHNlbGVjdGVkKQoreworCWludCBpOworCisJLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIGxhc3QgaXRlbSAqLworCXdhdHRyc2V0KHdpbiwgbWVudWJveF9hdHRyKTsKKwl3bW92ZSh3aW4sIGNob2ljZSwgMCk7CisJZm9yIChpID0gMDsgaSA8IGxpc3Rfd2lkdGg7IGkrKykKKwkJd2FkZGNoKHdpbiwgJyAnKTsKKworCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194KTsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gY2hlY2tfc2VsZWN0ZWRfYXR0ciA6IGNoZWNrX2F0dHIpOworCXdwcmludHcod2luLCAiKCVjKSIsIHN0YXR1cyA/ICdYJyA6ICcgJyk7CisKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gdGFnX3NlbGVjdGVkX2F0dHIgOiB0YWdfYXR0cik7CisJbXZ3YWRkY2god2luLCBjaG9pY2UsIGl0ZW1feCwgaXRlbVswXSk7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGl0ZW1fc2VsZWN0ZWRfYXR0ciA6IGl0ZW1fYXR0cik7CisJd2FkZHN0cih3aW4sIChjaGFyICopaXRlbSArIDEpOworCWlmIChzZWxlY3RlZCkgeworCQl3bW92ZSh3aW4sIGNob2ljZSwgY2hlY2tfeCArIDEpOworCQl3cmVmcmVzaCh3aW4pOworCX0KK30KKworLyoKKyAqIFByaW50IHRoZSBzY3JvbGwgaW5kaWNhdG9ycy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYXJyb3dzKFdJTkRPVyAqIHdpbiwgaW50IGNob2ljZSwgaW50IGl0ZW1fbm8sIGludCBzY3JvbGwsCisJICAgICBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQpCit7CisJd21vdmUod2luLCB5LCB4KTsKKworCWlmIChzY3JvbGwgPiAwKSB7CisJCXdhdHRyc2V0KHdpbiwgdWFycm93X2F0dHIpOworCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsKKwkJd2FkZHN0cih3aW4sICIoLSkiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIG1lbnVib3hfYXR0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQorCisJeSA9IHkgKyBoZWlnaHQgKyAxOworCXdtb3ZlKHdpbiwgeSwgeCk7CisKKwlpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYmIChzY3JvbGwgKyBjaG9pY2UgPCBpdGVtX25vIC0gMSkpIHsKKwkJd2F0dHJzZXQod2luLCBkYXJyb3dfYXR0cik7CisJCXdhZGRjaCh3aW4sIEFDU19EQVJST1cpOworCQl3YWRkc3RyKHdpbiwgIigrKSIpOworCX0gZWxzZSB7CisJCXdhdHRyc2V0KHdpbiwgbWVudWJveF9ib3JkZXJfYXR0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQorfQorCisvKgorICogIERpc3BsYXkgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQoreworCWludCB4ID0gd2lkdGggLyAyIC0gMTE7CisJaW50IHkgPSBoZWlnaHQgLSAyOworCisJcHJpbnRfYnV0dG9uKGRpYWxvZywgIlNlbGVjdCIsIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbihkaWFsb2csICIgSGVscCAiLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOworCisJd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDE0ICogc2VsZWN0ZWQpOworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgZGlhbG9nIGJveCB3aXRoIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYKKyAqIGluIHRoZSBzdHlsZSBvZiByYWRpb2xpc3QgKG9ubHkgb25lIG9wdGlvbiB0dXJuZWQgb24gYXQgYSB0aW1lKS4KKyAqLworaW50IGRpYWxvZ19jaGVja2xpc3QoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwKKwkJICAgICBpbnQgd2lkdGgsIGludCBsaXN0X2hlaWdodCwgaW50IGl0ZW1fbm8sCisJCSAgICAgY29uc3QgY2hhciAqY29uc3QgKml0ZW1zKQoreworCWludCBpLCB4LCB5LCBib3hfeCwgYm94X3k7CisJaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAsIGNob2ljZSA9IDAsIHNjcm9sbCA9IDAsIG1heF9jaG9pY2UsICpzdGF0dXM7CisJV0lORE9XICpkaWFsb2csICpsaXN0OworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHN0b3JpbmcgaXRlbSBvbi9vZmYgc3RhdHVzICovCisJaWYgKChzdGF0dXMgPSBtYWxsb2Moc2l6ZW9mKGludCkgKiBpdGVtX25vKSkgPT0gTlVMTCkgeworCQllbmR3aW4oKTsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiXG5DYW4ndCBhbGxvY2F0ZSBtZW1vcnkgaW4gZGlhbG9nX2NoZWNrbGlzdCgpLlxuIik7CisJCWV4aXQoLTEpOworCX0KKworCS8qIEluaXRpYWxpemVzIHN0YXR1cyAqLworCWZvciAoaSA9IDA7IGkgPCBpdGVtX25vOyBpKyspIHsKKwkJc3RhdHVzW2ldID0gIXN0cmNhc2VjbXAoaXRlbXNbaSAqIDMgKyAyXSwgIm9uIik7CisJCWlmICgoIWNob2ljZSAmJiBzdGF0dXNbaV0pCisJCSAgICB8fCAhc3RyY2FzZWNtcChpdGVtc1tpICogMyArIDJdLCAic2VsZWN0ZWQiKSkKKwkJCWNob2ljZSA9IGkgKyAxOworCX0KKwlpZiAoY2hvaWNlKQorCQljaG9pY2UtLTsKKworCW1heF9jaG9pY2UgPSBNSU4obGlzdF9oZWlnaHQsIGl0ZW1fbm8pOworCisJLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9IChDT0xTIC0gd2lkdGgpIC8gMjsKKwl5ID0gKExJTkVTIC0gaGVpZ2h0KSAvIDI7CisKKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOworCisJZGlhbG9nID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFsb2csIFRSVUUpOworCisJZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLCBkaWFsb2dfYXR0ciwgYm9yZGVyX2F0dHIpOworCXdhdHRyc2V0KGRpYWxvZywgYm9yZGVyX2F0dHIpOworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRpYWxvZ19hdHRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRpYWxvZ19hdHRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsKKworCWxpc3Rfd2lkdGggPSB3aWR0aCAtIDY7CisJYm94X3kgPSBoZWlnaHQgLSBsaXN0X2hlaWdodCAtIDU7CisJYm94X3ggPSAod2lkdGggLSBsaXN0X3dpZHRoKSAvIDIgLSAxOworCisJLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBsaXN0ICovCisJbGlzdCA9IHN1YndpbihkaWFsb2csIGxpc3RfaGVpZ2h0LCBsaXN0X3dpZHRoLCB5ICsgYm94X3kgKyAxLAorCSAgICAgICAgICAgICAgeCArIGJveF94ICsgMSk7CisKKwlrZXlwYWQobGlzdCwgVFJVRSk7CisKKwkvKiBkcmF3IGEgYm94IGFyb3VuZCB0aGUgbGlzdCBpdGVtcyAqLworCWRyYXdfYm94KGRpYWxvZywgYm94X3ksIGJveF94LCBsaXN0X2hlaWdodCArIDIsIGxpc3Rfd2lkdGggKyAyLAorCSAgICAgICAgIG1lbnVib3hfYm9yZGVyX2F0dHIsIG1lbnVib3hfYXR0cik7CisKKwkvKiBGaW5kIGxlbmd0aCBvZiBsb25nZXN0IGl0ZW0gaW4gb3JkZXIgdG8gY2VudGVyIGNoZWNrbGlzdCAqLworCWNoZWNrX3ggPSAwOworCWZvciAoaSA9IDA7IGkgPCBpdGVtX25vOyBpKyspCisJCWNoZWNrX3ggPSBNQVgoY2hlY2tfeCwgK3N0cmxlbihpdGVtc1tpICogMyArIDFdKSArIDQpOworCisJY2hlY2tfeCA9IChsaXN0X3dpZHRoIC0gY2hlY2tfeCkgLyAyOworCWl0ZW1feCA9IGNoZWNrX3ggKyA0OworCisJaWYgKGNob2ljZSA+PSBsaXN0X2hlaWdodCkgeworCQlzY3JvbGwgPSBjaG9pY2UgLSBsaXN0X2hlaWdodCArIDE7CisJCWNob2ljZSAtPSBzY3JvbGw7CisJfQorCisJLyogUHJpbnQgdGhlIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7CisJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIGkpICogMyArIDFdLAorCQkJICAgc3RhdHVzW2kgKyBzY3JvbGxdLCBpLCBpID09IGNob2ljZSk7CisJfQorCisJcHJpbnRfYXJyb3dzKGRpYWxvZywgY2hvaWNlLCBpdGVtX25vLCBzY3JvbGwsCisJCSAgICAgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKKworCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKworCXdub3V0cmVmcmVzaChsaXN0KTsKKwl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwlkb3VwZGF0ZSgpOworCisJd2hpbGUgKGtleSAhPSBFU0MpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7CisKKwkJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykKKwkJCWlmICh0b3VwcGVyKGtleSkgPT0KKwkJCSAgICB0b3VwcGVyKGl0ZW1zWyhzY3JvbGwgKyBpKSAqIDMgKyAxXVswXSkpCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPCBtYXhfY2hvaWNlIHx8IGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dOIHx8CisJCSAgICBrZXkgPT0gJysnIHx8IGtleSA9PSAnLScpIHsKKwkJCWlmIChrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSAnLScpIHsKKwkJCQlpZiAoIWNob2ljZSkgeworCQkJCQlpZiAoIXNjcm9sbCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBTY3JvbGwgbGlzdCBkb3duICovCisJCQkJCWlmIChsaXN0X2hlaWdodCA+IDEpIHsKKwkJCQkJCS8qIERlLWhpZ2hsaWdodCBjdXJyZW50IGZpcnN0IGl0ZW0gKi8KKwkJCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbc2Nyb2xsICogMyArIDFdLAorCQkJCQkJCSAgIHN0YXR1c1tzY3JvbGxdLCAwLCBGQUxTRSk7CisJCQkJCQlzY3JvbGxvayhsaXN0LCBUUlVFKTsKKwkJCQkJCXdzY3JsKGxpc3QsIC0xKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNFKTsKKwkJCQkJfQorCQkJCQlzY3JvbGwtLTsKKwkJCQkJcHJpbnRfaXRlbShsaXN0LCBpdGVtc1tzY3JvbGwgKiAzICsgMV0sIHN0YXR1c1tzY3JvbGxdLCAwLCBUUlVFKTsKKwkJCQkJd25vdXRyZWZyZXNoKGxpc3QpOworCisJCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9ubywKKwkJCQkJCSAgICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOworCisJCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisKKwkJCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCisJCQkJfSBlbHNlCisJCQkJCWkgPSBjaG9pY2UgLSAxOworCQkJfSBlbHNlIGlmIChrZXkgPT0gS0VZX0RPV04gfHwga2V5ID09ICcrJykgeworCQkJCWlmIChjaG9pY2UgPT0gbWF4X2Nob2ljZSAtIDEpIHsKKwkJCQkJaWYgKHNjcm9sbCArIGNob2ljZSA+PSBpdGVtX25vIC0gMSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBTY3JvbGwgbGlzdCB1cCAqLworCQkJCQlpZiAobGlzdF9oZWlnaHQgPiAxKSB7CisJCQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBsYXN0IGl0ZW0gYmVmb3JlIHNjcm9sbGluZyB1cCAqLworCQkJCQkJcHJpbnRfaXRlbShsaXN0LCBpdGVtc1soc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpICogMyArIDFdLAorCQkJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBtYXhfY2hvaWNlIC0gMV0sCisJCQkJCQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIFRSVUUpOworCQkJCQkJd3NjcmwobGlzdCwgMSk7CisJCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7CisJCQkJCX0KKwkJCQkJc2Nyb2xsKys7CisJCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIG1heF9jaG9pY2UgLSAxKSAqIDMgKyAxXSwKKwkJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBtYXhfY2hvaWNlIC0gMV0sIG1heF9jaG9pY2UgLSAxLCBUUlVFKTsKKwkJCQkJd25vdXRyZWZyZXNoKGxpc3QpOworCisJCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9ubywKKwkJCQkJCSAgICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOworCisJCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisKKwkJCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCisJCQkJfSBlbHNlCisJCQkJCWkgPSBjaG9pY2UgKyAxOworCQkJfQorCQkJaWYgKGkgIT0gY2hvaWNlKSB7CisJCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgaXRlbSAqLworCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAzICsgMV0sCisJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdLCBjaG9pY2UsIEZBTFNFKTsKKwkJCQkvKiBIaWdobGlnaHQgbmV3IGl0ZW0gKi8KKwkJCQljaG9pY2UgPSBpOworCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAzICsgMV0sCisJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdLCBjaG9pY2UsIFRSVUUpOworCQkJCXdub3V0cmVmcmVzaChsaXN0KTsKKwkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJfQorCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCisJCX0KKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAnSCc6CisJCWNhc2UgJ2gnOgorCQljYXNlICc/JzoKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDNdKTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJZnJlZShzdGF0dXMpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgVEFCOgorCQljYXNlIEtFWV9MRUZUOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKQorCQkJICAgID8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRvbik7CisKKwkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOworCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlICdTJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJyAnOgorCQljYXNlICdcbic6CisJCQlpZiAoIWJ1dHRvbikgeworCQkJCWlmICghc3RhdHVzW3Njcm9sbCArIGNob2ljZV0pIHsKKwkJCQkJZm9yIChpID0gMDsgaSA8IGl0ZW1fbm87IGkrKykKKwkJCQkJCXN0YXR1c1tpXSA9IDA7CisJCQkJCXN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdID0gMTsKKwkJCQkJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykKKwkJCQkJCXByaW50X2l0ZW0obGlzdCwgaXRlbXNbKHNjcm9sbCArIGkpICogMyArIDFdLAorCQkJCQkJCSAgIHN0YXR1c1tzY3JvbGwgKyBpXSwgaSwgaSA9PSBjaG9pY2UpOworCQkJCX0KKwkJCQl3bm91dHJlZnJlc2gobGlzdCk7CisJCQkJd3JlZnJlc2goZGlhbG9nKTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBpdGVtX25vOyBpKyspCisJCQkJCWlmIChzdGF0dXNbaV0pCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgaXRlbXNbaSAqIDNdKTsKKwkJCX0gZWxzZQorCQkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDNdKTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJZnJlZShzdGF0dXMpOworCQkJcmV0dXJuIGJ1dHRvbjsKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gRVNDOworCQljYXNlIEVTQzoKKwkJCWJyZWFrOworCQl9CisKKwkJLyogTm93LCB1cGRhdGUgZXZlcnl0aGluZy4uLiAqLworCQlkb3VwZGF0ZSgpOworCX0KKworCWRlbHdpbihkaWFsb2cpOworCWZyZWUoc3RhdHVzKTsKKwlyZXR1cm4gLTE7CQkvKiBFU0MgcHJlc3NlZCAqLworfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9seGRpYWxvZy9jb2xvcnMuaCBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jb2xvcnMuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzY3JpcHRzL2x4ZGlhbG9nL2NvbG9ycy5oCnJlbmFtZSB0byBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY29sb3JzLmgKaW5kZXggMjVjNTk1Mi4uZGIwNzFkZjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbHhkaWFsb2cvY29sb3JzLmgKKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NvbG9ycy5oCkBAIC0xOCw3ICsxOCw2IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotCiAvKgogICogICBEZWZhdWx0IGNvbG9yIGRlZmluaXRpb25zCiAgKgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9seGRpYWxvZy9kaWFsb2cuaCBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9kaWFsb2cuaApzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBzY3JpcHRzL2x4ZGlhbG9nL2RpYWxvZy5oCnJlbmFtZSB0byBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmgKaW5kZXggZWI2M2UxYi4uYWYzY2Y3MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9seGRpYWxvZy9kaWFsb2cuaAorKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmgKQEAgLTEsNCArMSwzIEBACi0KIC8qCiAgKiAgZGlhbG9nLmggLS0gY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGRpYWxvZyBtb2R1bGVzCiAgKgpAQCAtNDIsNyArNDEsNyBAQAogI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKF9ORUVEX1dSQVApICYmICFkZWZpbmVkKEdDQ19QUklOVEZMSUtFKQogI2RlZmluZSBPTERfTkNVUlNFUyAxCiAjdW5kZWYgIHdia2dkc2V0Ci0jZGVmaW5lIHdia2dkc2V0KHcscCkgLypub3RoaW5nKi8KKyNkZWZpbmUgd2JrZ2RzZXQodyxwKQkJLypub3RoaW5nICovCiAjZWxzZQogI2RlZmluZSBPTERfTkNVUlNFUyAwCiAjZW5kaWYKQEAgLTU2LDcgKzU1LDYgQEAKICNkZWZpbmUgTUlOKHgseSkgKHggPCB5ID8geCA6IHkpCiAjZGVmaW5lIE1BWCh4LHkpICh4ID4geSA/IHggOiB5KQogCi0KICNpZm5kZWYgQUNTX1VMQ09STkVSCiAjZGVmaW5lIEFDU19VTENPUk5FUiAnKycKICNlbmRpZgpAQCAtODgsNyArODYsNyBAQAogI2RlZmluZSBBQ1NfREFSUk9XICd2JwogI2VuZGlmCiAKLS8qIAorLyoKICAqIEF0dHJpYnV0ZSBuYW1lcwogICovCiAjZGVmaW5lIHNjcmVlbl9hdHRyICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbMF0KQEAgLTEzNywzNSArMTM1LDM1IEBACiAvKgogICogRnVuY3Rpb24gcHJvdG90eXBlcwogICovCi1leHRlcm4gdm9pZCBjcmVhdGVfcmMgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLWV4dGVybiBpbnQgcGFyc2VfcmMgKHZvaWQpOworZXh0ZXJuIHZvaWQgY3JlYXRlX3JjKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK2V4dGVybiBpbnQgcGFyc2VfcmModm9pZCk7CiAKK3ZvaWQgaW5pdF9kaWFsb2codm9pZCk7Cit2b2lkIGVuZF9kaWFsb2codm9pZCk7Cit2b2lkIGF0dHJfY2xlYXIoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGNodHlwZSBhdHRyKTsKK3ZvaWQgZGlhbG9nX2NsZWFyKHZvaWQpOwordm9pZCBjb2xvcl9zZXR1cCh2b2lkKTsKK3ZvaWQgcHJpbnRfYXV0b3dyYXAoV0lORE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0aCwgaW50IHksIGludCB4KTsKK3ZvaWQgcHJpbnRfYnV0dG9uKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5LCBpbnQgeCwgaW50IHNlbGVjdGVkKTsKK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2csIGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpOwordm9pZCBkcmF3X2JveChXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYm94LAorCSAgICAgIGNodHlwZSBib3JkZXIpOwordm9pZCBkcmF3X3NoYWRvdyhXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKIAotdm9pZCBpbml0X2RpYWxvZyAodm9pZCk7Ci12b2lkIGVuZF9kaWFsb2cgKHZvaWQpOwotdm9pZCBhdHRyX2NsZWFyIChXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpOwotdm9pZCBkaWFsb2dfY2xlYXIgKHZvaWQpOwotdm9pZCBjb2xvcl9zZXR1cCAodm9pZCk7Ci12b2lkIHByaW50X2F1dG93cmFwIChXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IHdpZHRoLCBpbnQgeSwgaW50IHgpOwotdm9pZCBwcmludF9idXR0b24gKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5LCBpbnQgeCwgaW50IHNlbGVjdGVkKTsKLXZvaWQgZHJhd19ib3ggKFdJTkRPVyAqIHdpbiwgaW50IHksIGludCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGNodHlwZSBib3gsCi0JCWNodHlwZSBib3JkZXIpOwotdm9pZCBkcmF3X3NoYWRvdyAoV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCk7Ci0KLWludCBmaXJzdF9hbHBoYSAoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpleGVtcHQpOwotaW50IGRpYWxvZ195ZXNubyAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKLWludCBkaWFsb2dfbXNnYm94IChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAotCQlpbnQgd2lkdGgsIGludCBwYXVzZSk7Ci1pbnQgZGlhbG9nX3RleHRib3ggKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwotaW50IGRpYWxvZ19tZW51IChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsCi0JCWludCBtZW51X2hlaWdodCwgY29uc3QgY2hhciAqY2hvaWNlLCBpbnQgaXRlbV9ubywgCi0JCWNvbnN0IGNoYXIgKiBjb25zdCAqIGl0ZW1zKTsKLWludCBkaWFsb2dfY2hlY2tsaXN0IChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAotCQlpbnQgd2lkdGgsIGludCBsaXN0X2hlaWdodCwgaW50IGl0ZW1fbm8sCi0JCWNvbnN0IGNoYXIgKiBjb25zdCAqIGl0ZW1zLCBpbnQgZmxhZyk7CitpbnQgZmlyc3RfYWxwaGEoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpleGVtcHQpOworaW50IGRpYWxvZ195ZXNubyhjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOworaW50IGRpYWxvZ19tc2dib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwKKwkJICBpbnQgd2lkdGgsIGludCBwYXVzZSk7CitpbnQgZGlhbG9nX3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBoZWlnaHQsIGludCB3aWR0aCk7CitpbnQgZGlhbG9nX21lbnUoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLAorCQlpbnQgbWVudV9oZWlnaHQsIGNvbnN0IGNoYXIgKmNob2ljZSwgaW50IGl0ZW1fbm8sCisJCWNvbnN0IGNoYXIgKmNvbnN0ICppdGVtcyk7CitpbnQgZGlhbG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0LCBpbnQgaXRlbV9ubywKKwkJICAgICBjb25zdCBjaGFyICpjb25zdCAqaXRlbXMpOwogZXh0ZXJuIGNoYXIgZGlhbG9nX2lucHV0X3Jlc3VsdFtdOwotaW50IGRpYWxvZ19pbnB1dGJveCAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwKLQkJaW50IHdpZHRoLCBjb25zdCBjaGFyICppbml0KTsKK2ludCBkaWFsb2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwKKwkJICAgIGludCB3aWR0aCwgY29uc3QgY2hhciAqaW5pdCk7CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBiYXNlIGZvciBmaWN0aXRpb3VzIGtleXMsIHdoaWNoIGFjdGl2YXRlCkBAIC0xNzcsMTEgKzE3NSwzIEBACiAgKiAgIC0tIHVwcGVyY2FzZSBjaGFycyBhcmUgdXNlZCB0byBpbnZva2UgdGhlIGJ1dHRvbiAoTV9FVkVOVCArICdPJykKICAqLwogI2RlZmluZSBNX0VWRU5UIChLRVlfTUFYKzEpCi0KLQotLyoKLSAqIFRoZSBgZmxhZycgcGFyYW1ldGVyIGluIGNoZWNrbGlzdCBpcyB1c2VkIHRvIHNlbGVjdCBiZXR3ZWVuCi0gKiByYWRpb2xpc3QgYW5kIGNoZWNrbGlzdAotICovCi0jZGVmaW5lIEZMQUdfQ0hFQ0sgMQotI2RlZmluZSBGTEFHX1JBRElPIDAKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9pbnB1dGJveC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5NTAzNwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9pbnB1dGJveC5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogIGlucHV0Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgaW5wdXQgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKK2NoYXIgZGlhbG9nX2lucHV0X3Jlc3VsdFtNQVhfTEVOICsgMV07CisKKy8qCisgKiAgUHJpbnQgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQoreworCWludCB4ID0gd2lkdGggLyAyIC0gMTE7CisJaW50IHkgPSBoZWlnaHQgLSAyOworCisJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiAgT2sgICIsIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbihkaWFsb2csICIgSGVscCAiLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOworCisJd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDE0ICogc2VsZWN0ZWQpOworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgZGlhbG9nIGJveCBmb3IgaW5wdXRpbmcgYSBzdHJpbmcKKyAqLworaW50IGRpYWxvZ19pbnB1dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXQpCit7CisJaW50IGksIHgsIHksIGJveF95LCBib3hfeCwgYm94X3dpZHRoOworCWludCBpbnB1dF94ID0gMCwgc2Nyb2xsID0gMCwga2V5ID0gMCwgYnV0dG9uID0gLTE7CisJY2hhciAqaW5zdHIgPSBkaWFsb2dfaW5wdXRfcmVzdWx0OworCVdJTkRPVyAqZGlhbG9nOworCisJLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9IChDT0xTIC0gd2lkdGgpIC8gMjsKKwl5ID0gKExJTkVTIC0gaGVpZ2h0KSAvIDI7CisKKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOworCisJZGlhbG9nID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFsb2csIFRSVUUpOworCisJZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLCBkaWFsb2dfYXR0ciwgYm9yZGVyX2F0dHIpOworCXdhdHRyc2V0KGRpYWxvZywgYm9yZGVyX2F0dHIpOworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRpYWxvZ19hdHRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRpYWxvZ19hdHRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsKKworCS8qIERyYXcgdGhlIGlucHV0IGZpZWxkIGJveCAqLworCWJveF93aWR0aCA9IHdpZHRoIC0gNjsKKwlnZXR5eChkaWFsb2csIHksIHgpOworCWJveF95ID0geSArIDI7CisJYm94X3ggPSAod2lkdGggLSBib3hfd2lkdGgpIC8gMjsKKwlkcmF3X2JveChkaWFsb2csIHkgKyAxLCBib3hfeCAtIDEsIDMsIGJveF93aWR0aCArIDIsIGJvcmRlcl9hdHRyLCBkaWFsb2dfYXR0cik7CisKKwlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisKKwkvKiBTZXQgdXAgdGhlIGluaXRpYWwgdmFsdWUgKi8KKwl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJd2F0dHJzZXQoZGlhbG9nLCBpbnB1dGJveF9hdHRyKTsKKworCWlmICghaW5pdCkKKwkJaW5zdHJbMF0gPSAnXDAnOworCWVsc2UKKwkJc3RyY3B5KGluc3RyLCBpbml0KTsKKworCWlucHV0X3ggPSBzdHJsZW4oaW5zdHIpOworCisJaWYgKGlucHV0X3ggPj0gYm94X3dpZHRoKSB7CisJCXNjcm9sbCA9IGlucHV0X3ggLSBib3hfd2lkdGggKyAxOworCQlpbnB1dF94ID0gYm94X3dpZHRoIC0gMTsKKwkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aCAtIDE7IGkrKykKKwkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Njcm9sbCArIGldKTsKKwl9IGVsc2UgeworCQl3YWRkc3RyKGRpYWxvZywgaW5zdHIpOworCX0KKworCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94ICsgaW5wdXRfeCk7CisKKwl3cmVmcmVzaChkaWFsb2cpOworCisJd2hpbGUgKGtleSAhPSBFU0MpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7CisKKwkJaWYgKGJ1dHRvbiA9PSAtMSkgewkvKiBJbnB1dCBib3ggc2VsZWN0ZWQgKi8KKwkJCXN3aXRjaCAoa2V5KSB7CisJCQljYXNlIFRBQjoKKwkJCWNhc2UgS0VZX1VQOgorCQkJY2FzZSBLRVlfRE9XTjoKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX0xFRlQ6CisJCQkJY29udGludWU7CisJCQljYXNlIEtFWV9SSUdIVDoKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgS0VZX0JBQ0tTUEFDRToKKwkJCWNhc2UgMTI3OgorCQkJCWlmIChpbnB1dF94IHx8IHNjcm9sbCkgeworCQkJCQl3YXR0cnNldChkaWFsb2csIGlucHV0Ym94X2F0dHIpOworCQkJCQlpZiAoIWlucHV0X3gpIHsKKwkJCQkJCXNjcm9sbCA9IHNjcm9sbCA8IGJveF93aWR0aCAtIDEgPyAwIDogc2Nyb2xsIC0gKGJveF93aWR0aCAtIDEpOworCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aDsgaSsrKQorCQkJCQkJCXdhZGRjaChkaWFsb2csCisJCQkJCQkJICAgICAgIGluc3RyW3Njcm9sbCArIGlucHV0X3ggKyBpXSA/CisJCQkJCQkJICAgICAgIGluc3RyW3Njcm9sbCArIGlucHV0X3ggKyBpXSA6ICcgJyk7CisJCQkJCQlpbnB1dF94ID0gc3RybGVuKGluc3RyKSAtIHNjcm9sbDsKKwkJCQkJfSBlbHNlCisJCQkJCQlpbnB1dF94LS07CisJCQkJCWluc3RyW3Njcm9sbCArIGlucHV0X3hdID0gJ1wwJzsKKwkJCQkJbXZ3YWRkY2goZGlhbG9nLCBib3hfeSwgaW5wdXRfeCArIGJveF94LCAnICcpOworCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBpbnB1dF94ICsgYm94X3gpOworCQkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGtleSA8IDB4MTAwICYmIGlzcHJpbnQoa2V5KSkgeworCQkJCQlpZiAoc2Nyb2xsICsgaW5wdXRfeCA8IE1BWF9MRU4pIHsKKwkJCQkJCXdhdHRyc2V0KGRpYWxvZywgaW5wdXRib3hfYXR0cik7CisJCQkJCQlpbnN0cltzY3JvbGwgKyBpbnB1dF94XSA9IGtleTsKKwkJCQkJCWluc3RyW3Njcm9sbCArIGlucHV0X3ggKyAxXSA9ICdcMCc7CisJCQkJCQlpZiAoaW5wdXRfeCA9PSBib3hfd2lkdGggLSAxKSB7CisJCQkJCQkJc2Nyb2xsKys7CisJCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOworCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGggLSAxOyBpKyspCisJCQkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyIFtzY3JvbGwgKyBpXSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3grKyArIGJveF94KTsKKwkJCQkJCQl3YWRkY2goZGlhbG9nLCBrZXkpOworCQkJCQkJfQorCQkJCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQkJfSBlbHNlCisJCQkJCQlmbGFzaCgpOwkvKiBBbGFybSB1c2VyIGFib3V0IG92ZXJmbG93ICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlzd2l0Y2ggKGtleSkgeworCQljYXNlICdPJzoKKwkJY2FzZSAnbyc6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiAwOworCQljYXNlICdIJzoKKwkJY2FzZSAnaCc6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiAxOworCQljYXNlIEtFWV9VUDoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJCXN3aXRjaCAoYnV0dG9uKSB7CisJCQljYXNlIC0xOgorCQkJCWJ1dHRvbiA9IDE7CS8qIEluZGljYXRlcyAiQ2FuY2VsIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJYnV0dG9uID0gLTE7CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsKKwkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWJ1dHRvbiA9IDA7CS8qIEluZGljYXRlcyAiT0siIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRBQjoKKwkJY2FzZSBLRVlfRE9XTjoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlzd2l0Y2ggKGJ1dHRvbikgeworCQkJY2FzZSAtMToKKwkJCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJYnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJDYW5jZWwiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlidXR0b24gPSAtMTsJLyogSW5kaWNhdGVzIGlucHV0IGJveCBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOworCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCWNhc2UgJ1xuJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIChidXR0b24gPT0gLTEgPyAwIDogYnV0dG9uKTsKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gRVNDOworCQljYXNlIEVTQzoKKwkJCWJyZWFrOworCQl9CisJfQorCisJZGVsd2luKGRpYWxvZyk7CisJcmV0dXJuIC0xOwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9seGRpYWxvZy5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2x4ZGlhbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmNmM1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9seGRpYWxvZy5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogIGRpYWxvZyAtIERpc3BsYXkgc2ltcGxlIGRpYWxvZyBib3hlcyBmcm9tIHNoZWxsIHNjcmlwdHMKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworc3RhdGljIHZvaWQgVXNhZ2UoY29uc3QgY2hhciAqbmFtZSk7CisKK3R5cGVkZWYgaW50IChqdW1wZXJGbikgKGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgYXJnYywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YpOworCitzdHJ1Y3QgTW9kZSB7CisJY2hhciAqbmFtZTsKKwlpbnQgYXJnbWluLCBhcmdtYXgsIGFyZ21vZDsKKwlqdW1wZXJGbiAqanVtcGVyOworfTsKKworanVtcGVyRm4gal9tZW51LCBqX3JhZGlvbGlzdCwgal95ZXNubywgal90ZXh0Ym94LCBqX2lucHV0Ym94OworanVtcGVyRm4gal9tc2dib3gsIGpfaW5mb2JveDsKKworc3RhdGljIHN0cnVjdCBNb2RlIG1vZGVzW10gPSB7CisJeyItLW1lbnUiLCA5LCAwLCAzLCBqX21lbnV9LAorCXsiLS1yYWRpb2xpc3QiLCA5LCAwLCAzLCBqX3JhZGlvbGlzdH0sCisJeyItLXllc25vIiwgNSwgNSwgMSwgal95ZXNub30sCisJeyItLXRleHRib3giLCA1LCA1LCAxLCBqX3RleHRib3h9LAorCXsiLS1pbnB1dGJveCIsIDUsIDYsIDEsIGpfaW5wdXRib3h9LAorCXsiLS1tc2dib3giLCA1LCA1LCAxLCBqX21zZ2JveH0sCisJeyItLWluZm9ib3giLCA1LCA1LCAxLCBqX2luZm9ib3h9LAorCXtOVUxMLCAwLCAwLCAwLCBOVUxMfQorfTsKKworc3RhdGljIHN0cnVjdCBNb2RlICptb2RlUHRyOworCisjaWZkZWYgTE9DQUxFCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQoreworCWludCBvZmZzZXQgPSAwLCBvcHRfY2xlYXIgPSAwLCBlbmRfY29tbW9uX29wdHMgPSAwLCByZXR2YWw7CisJY29uc3QgY2hhciAqdGl0bGUgPSBOVUxMOworCisjaWZkZWYgTE9DQUxFCisJKHZvaWQpc2V0bG9jYWxlKExDX0FMTCwgIiIpOworI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorCXRyYWNlKFRSQUNFX0NBTExTIHwgVFJBQ0VfVVBEQVRFKTsKKyNlbmRpZgorCWlmIChhcmdjIDwgMikgeworCQlVc2FnZShhcmd2WzBdKTsKKwkJZXhpdCgtMSk7CisJfQorCisJd2hpbGUgKG9mZnNldCA8IGFyZ2MgLSAxICYmICFlbmRfY29tbW9uX29wdHMpIHsJLyogQ29tbW9uIG9wdGlvbnMgKi8KKwkJaWYgKCFzdHJjbXAoYXJndltvZmZzZXQgKyAxXSwgIi0tdGl0bGUiKSkgeworCQkJaWYgKGFyZ2MgLSBvZmZzZXQgPCAzIHx8IHRpdGxlICE9IE5VTEwpIHsKKwkJCQlVc2FnZShhcmd2WzBdKTsKKwkJCQlleGl0KC0xKTsKKwkJCX0gZWxzZSB7CisJCQkJdGl0bGUgPSBhcmd2W29mZnNldCArIDJdOworCQkJCW9mZnNldCArPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltvZmZzZXQgKyAxXSwgIi0tYmFja3RpdGxlIikpIHsKKwkJCWlmIChiYWNrdGl0bGUgIT0gTlVMTCkgeworCQkJCVVzYWdlKGFyZ3ZbMF0pOworCQkJCWV4aXQoLTEpOworCQkJfSBlbHNlIHsKKwkJCQliYWNrdGl0bGUgPSBhcmd2W29mZnNldCArIDJdOworCQkJCW9mZnNldCArPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltvZmZzZXQgKyAxXSwgIi0tY2xlYXIiKSkgeworCQkJaWYgKG9wdF9jbGVhcikgewkvKiBIZXksICItLWNsZWFyIiBjYW4ndCBhcHBlYXIgdHdpY2UhICovCisJCQkJVXNhZ2UoYXJndlswXSk7CisJCQkJZXhpdCgtMSk7CisJCQl9IGVsc2UgaWYgKGFyZ2MgPT0gMikgewkvKiB3ZSBvbmx5IHdhbnQgdG8gY2xlYXIgdGhlIHNjcmVlbiAqLworCQkJCWluaXRfZGlhbG9nKCk7CisJCQkJcmVmcmVzaCgpOwkvKiBpbml0X2RpYWxvZygpIHdpbGwgY2xlYXIgdGhlIHNjcmVlbiBmb3IgdXMgKi8KKwkJCQllbmRfZGlhbG9nKCk7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCW9wdF9jbGVhciA9IDE7CisJCQkJb2Zmc2V0Kys7CisJCQl9CisJCX0gZWxzZQkJLyogbm8gbW9yZSBjb21tb24gb3B0aW9ucyAqLworCQkJZW5kX2NvbW1vbl9vcHRzID0gMTsKKwl9CisKKwlpZiAoYXJnYyAtIDEgPT0gb2Zmc2V0KSB7CS8qIG5vIG1vcmUgb3B0aW9ucyAqLworCQlVc2FnZShhcmd2WzBdKTsKKwkJZXhpdCgtMSk7CisJfQorCS8qIHVzZSBhIHRhYmxlIHRvIGxvb2sgZm9yIHRoZSByZXF1ZXN0ZWQgbW9kZSwgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbiAqLworCisJZm9yIChtb2RlUHRyID0gbW9kZXM7IG1vZGVQdHItPm5hbWU7IG1vZGVQdHIrKykJLyogbG9vayBmb3IgdGhlIG1vZGUgKi8KKwkJaWYgKCFzdHJjbXAoYXJndltvZmZzZXQgKyAxXSwgbW9kZVB0ci0+bmFtZSkpCisJCQlicmVhazsKKworCWlmICghbW9kZVB0ci0+bmFtZSkKKwkJVXNhZ2UoYXJndlswXSk7CisJaWYgKGFyZ2MgLSBvZmZzZXQgPCBtb2RlUHRyLT5hcmdtaW4pCisJCVVzYWdlKGFyZ3ZbMF0pOworCWlmIChtb2RlUHRyLT5hcmdtYXggJiYgYXJnYyAtIG9mZnNldCA+IG1vZGVQdHItPmFyZ21heCkKKwkJVXNhZ2UoYXJndlswXSk7CisKKwlpbml0X2RpYWxvZygpOworCXJldHZhbCA9ICgqKG1vZGVQdHItPmp1bXBlcikpICh0aXRsZSwgYXJnYyAtIG9mZnNldCwgYXJndiArIG9mZnNldCk7CisKKwlpZiAob3B0X2NsZWFyKSB7CS8qIGNsZWFyIHNjcmVlbiBiZWZvcmUgZXhpdCAqLworCQlhdHRyX2NsZWFyKHN0ZHNjciwgTElORVMsIENPTFMsIHNjcmVlbl9hdHRyKTsKKwkJcmVmcmVzaCgpOworCX0KKwllbmRfZGlhbG9nKCk7CisKKwlleGl0KHJldHZhbCk7Cit9CisKKy8qCisgKiBQcmludCBwcm9ncmFtIHVzYWdlCisgKi8KK3N0YXRpYyB2b2lkIFVzYWdlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJZnByaW50ZihzdGRlcnIsICJcCitcbmRpYWxvZywgYnkgU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykuXAorXG4gIHBhdGNoZWQgYnkgU3R1YXJ0IEhlcmJlcnQgKFMuSGVyYmVydEBzaGVmLmFjLnVrKVwKK1xuICBtb2RpZmllZC9ndXR0ZWQgZm9yIHVzZSBhcyBhIExpbnV4IGtlcm5lbCBjb25maWcgdG9vbCBieSBcCitcbiAgV2lsbGlhbSBSb2FkY2FwIChyb2FkY2Fwd0BjZncuY29tKVwKK1xuXAorXG4qIERpc3BsYXkgZGlhbG9nIGJveGVzIGZyb20gc2hlbGwgc2NyaXB0cyAqXAorXG5cCitcblVzYWdlOiAlcyAtLWNsZWFyXAorXG4gICAgICAgJXMgWy0tdGl0bGUgPHRpdGxlPl0gWy0tYmFja3RpdGxlIDxiYWNrdGl0bGU+XSAtLWNsZWFyIDxCb3ggb3B0aW9ucz5cCitcblwKK1xuQm94IG9wdGlvbnM6XAorXG5cCitcbiAgLS1tZW51ICAgICAgPHRleHQ+IDxoZWlnaHQ+IDx3aWR0aD4gPG1lbnUgaGVpZ2h0PiA8dGFnMT4gPGl0ZW0xPi4uLlwKK1xuICAtLXJhZGlvbGlzdCA8dGV4dD4gPGhlaWdodD4gPHdpZHRoPiA8bGlzdCBoZWlnaHQ+IDx0YWcxPiA8aXRlbTE+IDxzdGF0dXMxPi4uLlwKK1xuICAtLXRleHRib3ggICA8ZmlsZT4gPGhlaWdodD4gPHdpZHRoPlwKK1xuICAtLWlucHV0Ym94ICA8dGV4dD4gPGhlaWdodD4gPHdpZHRoPiBbPGluaXQ+XVwKK1xuICAtLXllc25vICAgICA8dGV4dD4gPGhlaWdodD4gPHdpZHRoPlwKK1xuIiwgbmFtZSwgbmFtZSk7CisJZXhpdCgtMSk7Cit9CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHByb2dyYW0ganVtcGVycworICovCisKK2ludCBqX21lbnUoY29uc3QgY2hhciAqdCwgaW50IGFjLCBjb25zdCBjaGFyICpjb25zdCAqYXYpCit7CisJcmV0dXJuIGRpYWxvZ19tZW51KHQsIGF2WzJdLCBhdG9pKGF2WzNdKSwgYXRvaShhdls0XSksCisJCQkgICBhdG9pKGF2WzVdKSwgYXZbNl0sIChhYyAtIDYpIC8gMiwgYXYgKyA3KTsKK30KKworaW50IGpfcmFkaW9saXN0KGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqY29uc3QgKmF2KQoreworCXJldHVybiBkaWFsb2dfY2hlY2tsaXN0KHQsIGF2WzJdLCBhdG9pKGF2WzNdKSwgYXRvaShhdls0XSksCisJCQkJYXRvaShhdls1XSksIChhYyAtIDYpIC8gMywgYXYgKyA2KTsKK30KKworaW50IGpfdGV4dGJveChjb25zdCBjaGFyICp0LCBpbnQgYWMsIGNvbnN0IGNoYXIgKmNvbnN0ICphdikKK3sKKwlyZXR1cm4gZGlhbG9nX3RleHRib3godCwgYXZbMl0sIGF0b2koYXZbM10pLCBhdG9pKGF2WzRdKSk7Cit9CisKK2ludCBqX3llc25vKGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqY29uc3QgKmF2KQoreworCXJldHVybiBkaWFsb2dfeWVzbm8odCwgYXZbMl0sIGF0b2koYXZbM10pLCBhdG9pKGF2WzRdKSk7Cit9CisKK2ludCBqX2lucHV0Ym94KGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqY29uc3QgKmF2KQoreworCWludCByZXQgPSBkaWFsb2dfaW5wdXRib3godCwgYXZbMl0sIGF0b2koYXZbM10pLCBhdG9pKGF2WzRdKSwKKwkJCQkgIGFjID09IDYgPyBhdls1XSA6IChjaGFyICopTlVMTCk7CisJaWYgKHJldCA9PSAwKQorCQlmcHJpbnRmKHN0ZGVyciwgZGlhbG9nX2lucHV0X3Jlc3VsdCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGpfbXNnYm94KGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqY29uc3QgKmF2KQoreworCXJldHVybiBkaWFsb2dfbXNnYm94KHQsIGF2WzJdLCBhdG9pKGF2WzNdKSwgYXRvaShhdls0XSksIDEpOworfQorCitpbnQgal9pbmZvYm94KGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqY29uc3QgKmF2KQoreworCXJldHVybiBkaWFsb2dfbXNnYm94KHQsIGF2WzJdLCBhdG9pKGF2WzNdKSwgYXRvaShhdls0XSksIDApOworfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1MTJiNQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMKQEAgLTAsMCArMSw0MjUgQEAKKy8qCisgKiAgbWVudWJveC5jIC0tIGltcGxlbWVudHMgdGhlIG1lbnUgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2Fwd0BjZncuY29tKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqICBDaGFuZ2VzIGJ5IENsaWZmb3JkIFdvbGYgKGdvZEBjbGlmZm9yZC5hdCkKKyAqCisgKiAgWyAxOTk4LTA2LTEzIF0KKyAqCisgKiAgICAqKSAgQSBidWdmaXggZm9yIHRoZSBQYWdlLURvd24gcHJvYmxlbQorICoKKyAqICAgICopICBGb3JtZXJseSB3aGVuIEkgdXNlZCBQYWdlIERvd24gYW5kIFBhZ2UgVXAsIHRoZSBjdXJzb3Igd291bGQgYmUgc2V0IAorICogICAgICAgIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgbWVudSBib3guICBOb3cgbHhkaWFsb2cgaXMgYSBiaXQKKyAqICAgICAgICBzbWFydGVyIGFuZCB3b3JrcyBtb3JlIGxpa2Ugb3RoZXIgbWVudSBzeXN0ZW1zIChqdXN0IGhhdmUgYSBsb29rIGF0CisgKiAgICAgICAgaXQpLgorICoKKyAqICAgICopICBGb3JtZXJseSBpZiBJIHNlbGVjdGVkIHNvbWV0aGluZyBteSBzY3JvbGxpbmcgd291bGQgYmUgYnJva2VuIGJlY2F1c2UKKyAqICAgICAgICBseGRpYWxvZyBpcyByZS1pbnZva2VkIGJ5IHRoZSBNZW51Y29uZmlnIHNoZWxsIHNjcmlwdCwgY2FuJ3QKKyAqICAgICAgICByZW1lbWJlciB0aGUgbGFzdCBzY3JvbGxpbmcgcG9zaXRpb24sIGFuZCBqdXN0IHNldHMgaXQgc28gdGhhdCB0aGUKKyAqICAgICAgICBjdXJzb3IgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYm94LiAgTm93IGl0IHdyaXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUKKyAqICAgICAgICBseGRpYWxvZy5zY3JsdG1wIHdoaWNoIGNvbnRhaW5zIHRoaXMgaW5mb3JtYXRpb24uIFRoZSBmaWxlIGlzCisgKiAgICAgICAgZGVsZXRlZCBieSBseGRpYWxvZyBpZiB0aGUgdXNlciBsZWF2ZXMgYSBzdWJtZW51IG9yIGVudGVycyBhIG5ldworICogICAgICAgIG9uZSwgYnV0IGl0IHdvdWxkIGJlIG5pY2UgaWYgTWVudWNvbmZpZyBjb3VsZCBtYWtlIGFub3RoZXIgInJtIC1mIgorICogICAgICAgIGp1c3QgdG8gYmUgc3VyZS4gIEp1c3QgdHJ5IGl0IG91dCAtIHlvdSB3aWxsIHJlY29nbmlzZSBhIGRpZmZlcmVuY2UhCisgKgorICogIFsgMTk5OC0wNi0xNCBdCisgKgorICogICAgKikgIE5vdyBseGRpYWxvZyBpcyBjcmFzaC1zYWZlIGFnYWluc3QgYnJva2VuICJseGRpYWxvZy5zY3JsdG1wIiBmaWxlcworICogICAgICAgIGFuZCBtZW51cyBjaGFuZ2UgdGhlaXIgc2l6ZSBvbiB0aGUgZmx5LgorICoKKyAqICAgICopICBJZiBmb3Igc29tZSByZWFzb24gdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9uIGlzIG5vdCBzYXZlZCBieQorICogICAgICAgIGx4ZGlhbG9nLCBpdCBzZXRzIHRoZSBzY3JvbGxpbmcgc28gdGhhdCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBpbiB0aGUKKyAqICAgICAgICBtaWRkbGUgb2YgdGhlIG1lbnUgYm94LCBub3QgYXQgdGhlIGJvdHRvbS4KKyAqCisgKiAwMiBKYW51YXJ5IDE5OTksIE1pY2hhZWwgRWxpemFiZXRoIENoYXN0YWluIChtZWNAc2hvdXQubmV0KQorICogUmVzZXQgJ3Njcm9sbCcgdG8gMCBpZiB0aGUgdmFsdWUgZnJvbSBseGRpYWxvZy5zY3JsdG1wIGlzIGJvZ3VzLgorICogVGhpcyBmaXhlcyBhIGJ1ZyBpbiBNZW51Y29uZmlnIHdoZXJlIHVzaW5nICcgJyB0byBkZXNjZW5kIGludG8gbWVudXMKKyAqIHdvdWxkIGxlYXZlIG1pcy1zeW5jaHJvbml6ZWQgbHhkaWFsb2cuc2NybHRtcCBmaWxlcyBseWluZyBhcm91bmQsCisgKiBmc2NhbmYgd291bGQgcmVhZCBpbiAnc2Nyb2xsJywgYW5kIGV2ZW50dWFsbHkgdGhhdCB2YWx1ZSB3b3VsZCBnZXQgdXNlZC4KKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKKyNkZWZpbmUgSVRFTV9JREVOVCAxICAgLyogSW5kZW50IG9mIG1lbnUgZW50cmllcy4gRml4ZWQgZm9yIGFsbCBtZW51cyAqLworc3RhdGljIGludCBtZW51X3dpZHRoOworCisvKgorICogUHJpbnQgbWVudSBpdGVtCisgKi8KK3N0YXRpYyB2b2lkIGRvX3ByaW50X2l0ZW0oV0lORE9XICogd2luLCBjb25zdCBjaGFyICppdGVtLCBpbnQgY2hvaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VsZWN0ZWQsIGludCBob3RrZXkpCit7CisJaW50IGo7CisJY2hhciAqbWVudV9pdGVtID0gbWFsbG9jKG1lbnVfd2lkdGggKyAxKTsKKworCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0gSVRFTV9JREVOVCk7CisJbWVudV9pdGVtW21lbnVfd2lkdGhdID0gMDsKKwlqID0gZmlyc3RfYWxwaGEobWVudV9pdGVtLCAiWXlObk1tSGgiKTsKKworCS8qIENsZWFyICdyZXNpZHVlJyBvZiBsYXN0IGl0ZW0gKi8KKwl3YXR0cnNldCh3aW4sIG1lbnVib3hfYXR0cik7CisJd21vdmUod2luLCBjaG9pY2UsIDApOworI2lmIE9MRF9OQ1VSU0VTCisJeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IG1lbnVfd2lkdGg7IGkrKykKKwkJCXdhZGRjaCh3aW4sICcgJyk7CisJfQorI2Vsc2UKKwl3Y2xydG9lb2wod2luKTsKKyNlbmRpZgorCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBpdGVtX3NlbGVjdGVkX2F0dHIgOiBpdGVtX2F0dHIpOworCW12d2FkZHN0cih3aW4sIGNob2ljZSwgSVRFTV9JREVOVCwgbWVudV9pdGVtKTsKKwlpZiAoaG90a2V5KSB7CisJCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyB0YWdfa2V5X3NlbGVjdGVkX2F0dHIgOiB0YWdfa2V5X2F0dHIpOworCQltdndhZGRjaCh3aW4sIGNob2ljZSwgSVRFTV9JREVOVCArIGosIG1lbnVfaXRlbVtqXSk7CisJfQorCWlmIChzZWxlY3RlZCkgeworCQl3bW92ZSh3aW4sIGNob2ljZSwgSVRFTV9JREVOVCArIDEpOworCX0KKwlmcmVlKG1lbnVfaXRlbSk7CisJd3JlZnJlc2god2luKTsKK30KKworI2RlZmluZSBwcmludF9pdGVtKGluZGV4LCBjaG9pY2UsIHNlbGVjdGVkKSBcCitkbyB7XAorCWludCBob3RrZXkgPSAoaXRlbXNbKGluZGV4KSAqIDJdWzBdICE9ICc6Jyk7IFwKKwlkb19wcmludF9pdGVtKG1lbnUsIGl0ZW1zWyhpbmRleCkgKiAyICsgMV0sIGNob2ljZSwgc2VsZWN0ZWQsIGhvdGtleSk7IFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBQcmludCB0aGUgc2Nyb2xsIGluZGljYXRvcnMuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2Fycm93cyhXSU5ET1cgKiB3aW4sIGludCBpdGVtX25vLCBpbnQgc2Nyb2xsLCBpbnQgeSwgaW50IHgsCisJCQkgaW50IGhlaWdodCkKK3sKKwlpbnQgY3VyX3ksIGN1cl94OworCisJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOworCisJd21vdmUod2luLCB5LCB4KTsKKworCWlmIChzY3JvbGwgPiAwKSB7CisJCXdhdHRyc2V0KHdpbiwgdWFycm93X2F0dHIpOworCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsKKwkJd2FkZHN0cih3aW4sICIoLSkiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIG1lbnVib3hfYXR0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQorCisJeSA9IHkgKyBoZWlnaHQgKyAxOworCXdtb3ZlKHdpbiwgeSwgeCk7CisJd3JlZnJlc2god2luKTsKKworCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGhlaWdodCA8IGl0ZW1fbm8pKSB7CisJCXdhdHRyc2V0KHdpbiwgZGFycm93X2F0dHIpOworCQl3YWRkY2god2luLCBBQ1NfREFSUk9XKTsKKwkJd2FkZHN0cih3aW4sICIoKykiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIG1lbnVib3hfYm9yZGVyX2F0dHIpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCX0KKworCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsKKwl3cmVmcmVzaCh3aW4pOworfQorCisvKgorICogRGlzcGxheSB0aGUgdGVybWluYXRpb24gYnV0dG9ucy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQoreworCWludCB4ID0gd2lkdGggLyAyIC0gMTY7CisJaW50IHkgPSBoZWlnaHQgLSAyOworCisJcHJpbnRfYnV0dG9uKHdpbiwgIlNlbGVjdCIsIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbih3aW4sICIgRXhpdCAiLCB5LCB4ICsgMTIsIHNlbGVjdGVkID09IDEpOworCXByaW50X2J1dHRvbih3aW4sICIgSGVscCAiLCB5LCB4ICsgMjQsIHNlbGVjdGVkID09IDIpOworCisJd21vdmUod2luLCB5LCB4ICsgMSArIDEyICogc2VsZWN0ZWQpOworCXdyZWZyZXNoKHdpbik7Cit9CisKKy8qIHNjcm9sbCB1cCBuIGxpbmVzIChuIG1heSBiZSBuZWdhdGl2ZSkgKi8KK3N0YXRpYyB2b2lkIGRvX3Njcm9sbChXSU5ET1cgKndpbiwgaW50ICpzY3JvbGwsIGludCBuKQoreworCS8qIFNjcm9sbCBtZW51IHVwICovCisJc2Nyb2xsb2sod2luLCBUUlVFKTsKKwl3c2NybCh3aW4sIG4pOworCXNjcm9sbG9rKHdpbiwgRkFMU0UpOworCSpzY3JvbGwgPSAqc2Nyb2xsICsgbjsKKwl3cmVmcmVzaCh3aW4pOworfQorCisvKgorICogRGlzcGxheSBhIG1lbnUgZm9yIGNob29zaW5nIGFtb25nIGEgbnVtYmVyIG9mIG9wdGlvbnMKKyAqLworaW50IGRpYWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICBpbnQgbWVudV9oZWlnaHQsIGNvbnN0IGNoYXIgKmN1cnJlbnQsIGludCBpdGVtX25vLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICppdGVtcykKK3sKKwlpbnQgaSwgaiwgeCwgeSwgYm94X3gsIGJveF95OworCWludCBrZXkgPSAwLCBidXR0b24gPSAwLCBzY3JvbGwgPSAwLCBjaG9pY2UgPSAwOworCWludCBmaXJzdF9pdGVtID0gIDAsIG1heF9jaG9pY2U7CisJV0lORE9XICpkaWFsb2csICptZW51OworCUZJTEUgKmY7CisKKwltYXhfY2hvaWNlID0gTUlOKG1lbnVfaGVpZ2h0LCBpdGVtX25vKTsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLworCXggPSAoQ09MUyAtIHdpZHRoKSAvIDI7CisJeSA9IChMSU5FUyAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsKKwlrZXlwYWQoZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwgZGlhbG9nX2F0dHIsIGJvcmRlcl9hdHRyKTsKKwl3YXR0cnNldChkaWFsb2csIGJvcmRlcl9hdHRyKTsKKwltdndhZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsKKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBpKyspCisJCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7CisJd2F0dHJzZXQoZGlhbG9nLCBkaWFsb2dfYXR0cik7CisJd2JrZ2RzZXQoZGlhbG9nLCBkaWFsb2dfYXR0ciAmIEFfQ09MT1IpOworCXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsKKworCXdhdHRyc2V0KGRpYWxvZywgZGlhbG9nX2F0dHIpOworCXByaW50X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOworCisJbWVudV93aWR0aCA9IHdpZHRoIC0gNjsKKwlib3hfeSA9IGhlaWdodCAtIG1lbnVfaGVpZ2h0IC0gNTsKKwlib3hfeCA9ICh3aWR0aCAtIG1lbnVfd2lkdGgpIC8gMiAtIDE7CisKKwkvKiBjcmVhdGUgbmV3IHdpbmRvdyBmb3IgdGhlIG1lbnUgKi8KKwltZW51ID0gc3Vid2luKGRpYWxvZywgbWVudV9oZWlnaHQsIG1lbnVfd2lkdGgsCisJCSAgICAgIHkgKyBib3hfeSArIDEsIHggKyBib3hfeCArIDEpOworCWtleXBhZChtZW51LCBUUlVFKTsKKworCS8qIGRyYXcgYSBib3ggYXJvdW5kIHRoZSBtZW51IGl0ZW1zICovCisJZHJhd19ib3goZGlhbG9nLCBib3hfeSwgYm94X3gsIG1lbnVfaGVpZ2h0ICsgMiwgbWVudV93aWR0aCArIDIsCisJCSBtZW51Ym94X2JvcmRlcl9hdHRyLCBtZW51Ym94X2F0dHIpOworCisJLyogU2V0IGNob2ljZSB0byBkZWZhdWx0IGl0ZW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKQorCQlpZiAoc3RyY21wKGN1cnJlbnQsIGl0ZW1zW2kgKiAyXSkgPT0gMCkKKwkJCWNob2ljZSA9IGk7CisKKwkvKiBnZXQgdGhlIHNjcm9sbCBpbmZvIGZyb20gdGhlIHRlbXAgZmlsZSAqLworCWlmICgoZiA9IGZvcGVuKCJseGRpYWxvZy5zY3JsdG1wIiwgInIiKSkgIT0gTlVMTCkgeworCQlpZiAoKGZzY2FuZihmLCAiJWRcbiIsICZzY3JvbGwpID09IDEpICYmIChzY3JvbGwgPD0gY2hvaWNlKSAmJgorCQkgICAgKHNjcm9sbCArIG1heF9jaG9pY2UgPiBjaG9pY2UpICYmIChzY3JvbGwgPj0gMCkgJiYKKwkJICAgIChzY3JvbGwgKyBtYXhfY2hvaWNlIDw9IGl0ZW1fbm8pKSB7CisJCQlmaXJzdF9pdGVtID0gc2Nyb2xsOworCQkJY2hvaWNlID0gY2hvaWNlIC0gc2Nyb2xsOworCQkJZmNsb3NlKGYpOworCQl9IGVsc2UgeworCQkJc2Nyb2xsID0gMDsKKwkJCXJlbW92ZSgibHhkaWFsb2cuc2NybHRtcCIpOworCQkJZmNsb3NlKGYpOworCQkJZiA9IE5VTEw7CisJCX0KKwl9CisJaWYgKChjaG9pY2UgPj0gbWF4X2Nob2ljZSkgfHwgKGYgPT0gTlVMTCAmJiBjaG9pY2UgPj0gbWF4X2Nob2ljZSAvIDIpKSB7CisJCWlmIChjaG9pY2UgPj0gaXRlbV9ubyAtIG1heF9jaG9pY2UgLyAyKQorCQkJc2Nyb2xsID0gZmlyc3RfaXRlbSA9IGl0ZW1fbm8gLSBtYXhfY2hvaWNlOworCQllbHNlCisJCQlzY3JvbGwgPSBmaXJzdF9pdGVtID0gY2hvaWNlIC0gbWF4X2Nob2ljZSAvIDI7CisJCWNob2ljZSA9IGNob2ljZSAtIHNjcm9sbDsKKwl9CisKKwkvKiBQcmludCB0aGUgbWVudSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsKKwkJcHJpbnRfaXRlbShmaXJzdF9pdGVtICsgaSwgaSwgaSA9PSBjaG9pY2UpOworCX0KKworCXdub3V0cmVmcmVzaChtZW51KTsKKworCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fbm8sIHNjcm9sbCwKKwkJICAgICBib3hfeSwgYm94X3ggKyBJVEVNX0lERU5UICsgMSwgbWVudV9oZWlnaHQpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCXdtb3ZlKG1lbnUsIGNob2ljZSwgSVRFTV9JREVOVCArIDEpOworCXdyZWZyZXNoKG1lbnUpOworCisJd2hpbGUgKGtleSAhPSBFU0MpIHsKKwkJa2V5ID0gd2dldGNoKG1lbnUpOworCisJCWlmIChrZXkgPCAyNTYgJiYgaXNhbHBoYShrZXkpKQorCQkJa2V5ID0gdG9sb3dlcihrZXkpOworCisJCWlmIChzdHJjaHIoInlubWgiLCBrZXkpKQorCQkJaSA9IG1heF9jaG9pY2U7CisJCWVsc2UgeworCQkJZm9yIChpID0gY2hvaWNlICsgMTsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQkJCWogPSBmaXJzdF9hbHBoYShpdGVtc1soc2Nyb2xsICsgaSkgKiAyICsgMV0sICJZeU5uTW1IaCIpOworCQkJCWlmIChrZXkgPT0gdG9sb3dlcihpdGVtc1soc2Nyb2xsICsgaSkgKiAyICsgMV1bal0pKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpID09IG1heF9jaG9pY2UpCisJCQkJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQkJCQlqID0gZmlyc3RfYWxwaGEoaXRlbXMgWyhzY3JvbGwgKyBpKSAqIDIgKyAxXSwgIll5Tm5NbUhoIik7CisJCQkJCWlmIChrZXkgPT0gdG9sb3dlcihpdGVtc1soc2Nyb2xsICsgaSkgKiAyICsgMV1bal0pKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQl9CisKKwkJaWYgKGkgPCBtYXhfY2hvaWNlIHx8CisJCSAgICBrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSBLRVlfRE9XTiB8fAorCQkgICAga2V5ID09ICctJyB8fCBrZXkgPT0gJysnIHx8CisJCSAgICBrZXkgPT0gS0VZX1BQQUdFIHx8IGtleSA9PSBLRVlfTlBBR0UpIHsKKwkJCS8qIFJlbW92ZSBoaWdobGlndCBvZiBjdXJyZW50IGl0ZW0gKi8KKwkJCXByaW50X2l0ZW0oc2Nyb2xsICsgY2hvaWNlLCBjaG9pY2UsIEZBTFNFKTsKKworCQkJaWYgKGtleSA9PSBLRVlfVVAgfHwga2V5ID09ICctJykgeworCQkJCWlmIChjaG9pY2UgPCAyICYmIHNjcm9sbCkgeworCQkJCQkvKiBTY3JvbGwgbWVudSBkb3duICovCisJCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAtMSk7CisKKwkJCQkJcHJpbnRfaXRlbShzY3JvbGwsIDAsIEZBTFNFKTsKKwkJCQl9IGVsc2UKKwkJCQkJY2hvaWNlID0gTUFYKGNob2ljZSAtIDEsIDApOworCisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBrZXkgPT0gJysnKSB7CisJCQkJcHJpbnRfaXRlbShzY3JvbGwrY2hvaWNlLCBjaG9pY2UsIEZBTFNFKTsKKworCQkJCWlmICgoY2hvaWNlID4gbWF4X2Nob2ljZSAtIDMpICYmCisJCQkJICAgIChzY3JvbGwgKyBtYXhfY2hvaWNlIDwgaXRlbV9ubykpIHsKKwkJCQkJLyogU2Nyb2xsIG1lbnUgdXAgKi8KKwkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIDEpOworCisJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UgLSAxLAorCQkJCQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsKKwkJCQl9IGVsc2UKKwkJCQkJY2hvaWNlID0gTUlOKGNob2ljZSArIDEsIG1heF9jaG9pY2UgLSAxKTsKKworCQkJfSBlbHNlIGlmIChrZXkgPT0gS0VZX1BQQUdFKSB7CisJCQkJc2Nyb2xsb2sobWVudSwgVFJVRSk7CisJCQkJZm9yIChpID0gMDsgKGkgPCBtYXhfY2hvaWNlKTsgaSsrKSB7CisJCQkJCWlmIChzY3JvbGwgPiAwKSB7CisJCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgLTEpOworCQkJCQkJcHJpbnRfaXRlbShzY3JvbGwsIDAsIEZBTFNFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmIChjaG9pY2UgPiAwKQorCQkJCQkJCWNob2ljZS0tOworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfTlBBR0UpIHsKKwkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsKKwkJCQkJaWYgKHNjcm9sbCArIG1heF9jaG9pY2UgPCBpdGVtX25vKSB7CisJCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgMSk7CisJCQkJCQlwcmludF9pdGVtKHNjcm9sbCttYXhfY2hvaWNlLTEsCisJCQkJCQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmIChjaG9pY2UgKyAxIDwgbWF4X2Nob2ljZSkKKwkJCQkJCQljaG9pY2UrKzsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZQorCQkJCWNob2ljZSA9IGk7CisKKwkJCXByaW50X2l0ZW0oc2Nyb2xsICsgY2hvaWNlLCBjaG9pY2UsIFRSVUUpOworCisJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX25vLCBzY3JvbGwsCisJCQkJICAgICBib3hfeSwgYm94X3ggKyBJVEVNX0lERU5UICsgMSwgbWVudV9oZWlnaHQpOworCisJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCXdyZWZyZXNoKG1lbnUpOworCisJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJfQorCisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgS0VZX0xFRlQ6CisJCWNhc2UgVEFCOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKQorCQkJICAgID8gMiA6IChidXR0b24gPiAyID8gMCA6IGJ1dHRvbik7CisKKwkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOworCQkJd3JlZnJlc2gobWVudSk7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCWNhc2UgJ3MnOgorCQljYXNlICd5JzoKKwkJY2FzZSAnbic6CisJCWNhc2UgJ20nOgorCQljYXNlICcvJzoKKwkJCS8qIHNhdmUgc2Nyb2xsIGluZm8gKi8KKwkJCWlmICgoZiA9IGZvcGVuKCJseGRpYWxvZy5zY3JsdG1wIiwgInciKSkgIT0gTlVMTCkgeworCQkJCWZwcmludGYoZiwgIiVkXG4iLCBzY3JvbGwpOworCQkJCWZjbG9zZShmKTsKKwkJCX0KKwkJCWRlbHdpbihkaWFsb2cpOworCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAyXSk7CisJCQlzd2l0Y2ggKGtleSkgeworCQkJY2FzZSAncyc6CisJCQkJcmV0dXJuIDM7CisJCQljYXNlICd5JzoKKwkJCQlyZXR1cm4gMzsKKwkJCWNhc2UgJ24nOgorCQkJCXJldHVybiA0OworCQkJY2FzZSAnbSc6CisJCQkJcmV0dXJuIDU7CisJCQljYXNlICcgJzoKKwkJCQlyZXR1cm4gNjsKKwkJCWNhc2UgJy8nOgorCQkJCXJldHVybiA3OworCQkJfQorCQkJcmV0dXJuIDA7CisJCWNhc2UgJ2gnOgorCQljYXNlICc/JzoKKwkJCWJ1dHRvbiA9IDI7CisJCWNhc2UgJ1xuJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJaWYgKGJ1dHRvbiA9PSAyKQorCQkJCWZwcmludGYoc3RkZXJyLCAiJXMgXCIlc1wiXG4iLAorCQkJCQlpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDJdLAorCQkJCQlpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDIgKyAxXSArCisJCQkJCWZpcnN0X2FscGhhKGl0ZW1zIFsoc2Nyb2xsICsgY2hvaWNlKSAqIDIgKyAxXSwgIiIpKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorCQkJCQlpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDJdKTsKKworCQkJcmVtb3ZlKCJseGRpYWxvZy5zY3JsdG1wIik7CisJCQlyZXR1cm4gYnV0dG9uOworCQljYXNlICdlJzoKKwkJY2FzZSAneCc6CisJCQlrZXkgPSBFU0M7CisJCWNhc2UgRVNDOgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlkZWx3aW4oZGlhbG9nKTsKKwlyZW1vdmUoImx4ZGlhbG9nLnNjcmx0bXAiKTsKKwlyZXR1cm4gLTE7CQkvKiBFU0MgcHJlc3NlZCAqLworfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21zZ2JveC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL21zZ2JveC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMjNmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvbXNnYm94LmMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBtc2dib3guYyAtLSBpbXBsZW1lbnRzIHRoZSBtZXNzYWdlIGJveCBhbmQgaW5mbyBib3gKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXB3QGNmdy5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKKy8qCisgKiBEaXNwbGF5IGEgbWVzc2FnZSBib3guIFByb2dyYW0gd2lsbCBwYXVzZSBhbmQgZGlzcGxheSBhbiAiT0siIGJ1dHRvbgorICogaWYgdGhlIHBhcmFtZXRlciAncGF1c2UnIGlzIG5vbi16ZXJvLgorICovCitpbnQgZGlhbG9nX21zZ2JveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICBpbnQgcGF1c2UpCit7CisJaW50IGksIHgsIHksIGtleSA9IDA7CisJV0lORE9XICpkaWFsb2c7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKENPTFMgLSB3aWR0aCkgLyAyOworCXkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsIGRpYWxvZ19hdHRyLCBib3JkZXJfYXR0cik7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRpYWxvZ19hdHRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAyKTsKKworCWlmIChwYXVzZSkgeworCQl3YXR0cnNldChkaWFsb2csIGJvcmRlcl9hdHRyKTsKKwkJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7CisJCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7CisJCXdhdHRyc2V0KGRpYWxvZywgZGlhbG9nX2F0dHIpOworCQl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwkJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiAgT2sgICIsIGhlaWdodCAtIDIsIHdpZHRoIC8gMiAtIDQsIFRSVUUpOworCisJCXdyZWZyZXNoKGRpYWxvZyk7CisJCXdoaWxlIChrZXkgIT0gRVNDICYmIGtleSAhPSAnXG4nICYmIGtleSAhPSAnICcgJiYKKwkJICAgICAgIGtleSAhPSAnTycgJiYga2V5ICE9ICdvJyAmJiBrZXkgIT0gJ1gnICYmIGtleSAhPSAneCcpCisJCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKwl9IGVsc2UgeworCQlrZXkgPSAnXG4nOworCQl3cmVmcmVzaChkaWFsb2cpOworCX0KKworCWRlbHdpbihkaWFsb2cpOworCXJldHVybiBrZXkgPT0gRVNDID8gLTEgOiAwOworfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3guYyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy90ZXh0Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4NDhiYgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy90ZXh0Ym94LmMKQEAgLTAsMCArMSw1MzMgQEAKKy8qCisgKiAgdGV4dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIHRleHQgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKK3N0YXRpYyB2b2lkIGJhY2tfbGluZXMoaW50IG4pOworc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCk7CitzdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqIHdpbiwgaW50IHJvdywgaW50IHdpZHRoKTsKK3N0YXRpYyBjaGFyICpnZXRfbGluZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHByaW50X3Bvc2l0aW9uKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKKworc3RhdGljIGludCBoc2Nyb2xsLCBmZCwgZmlsZV9zaXplLCBieXRlc19yZWFkOworc3RhdGljIGludCBiZWdpbl9yZWFjaGVkID0gMSwgZW5kX3JlYWNoZWQsIHBhZ2VfbGVuZ3RoOworc3RhdGljIGNoYXIgKmJ1ZiwgKnBhZ2U7CisKKy8qCisgKiBEaXNwbGF5IHRleHQgZnJvbSBhIGZpbGUgaW4gYSBkaWFsb2cgYm94LgorICovCitpbnQgZGlhbG9nX3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKKwlpbnQgaSwgeCwgeSwgY3VyX3gsIGN1cl95LCBmcG9zLCBrZXkgPSAwOworCWludCBwYXNzZWRfZW5kOworCWNoYXIgc2VhcmNoX3Rlcm1bTUFYX0xFTiArIDFdOworCVdJTkRPVyAqZGlhbG9nLCAqdGV4dDsKKworCXNlYXJjaF90ZXJtWzBdID0gJ1wwJzsJLyogbm8gc2VhcmNoIHRlcm0gZW50ZXJlZCB5ZXQgKi8KKworCS8qIE9wZW4gaW5wdXQgZmlsZSBmb3IgcmVhZGluZyAqLworCWlmICgoZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKSkgPT0gLTEpIHsKKwkJZW5kd2luKCk7CisJCWZwcmludGYoc3RkZXJyLCAiXG5DYW4ndCBvcGVuIGlucHV0IGZpbGUgaW4gZGlhbG9nX3RleHRib3goKS5cbiIpOworCQlleGl0KC0xKTsKKwl9CisJLyogR2V0IGZpbGUgc2l6ZS4gQWN0dWFsbHksICdmaWxlX3NpemUnIGlzIHRoZSByZWFsIGZpbGUgc2l6ZSAtIDEsCisJICAgc2luY2UgaXQncyBvbmx5IHRoZSBsYXN0IGJ5dGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyAqLworCWlmICgoZmlsZV9zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKSkgPT0gLTEpIHsKKwkJZW5kd2luKCk7CisJCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciBnZXR0aW5nIGZpbGUgc2l6ZSBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7CisJCWV4aXQoLTEpOworCX0KKwkvKiBSZXN0b3JlIGZpbGUgcG9pbnRlciB0byBiZWdpbm5pbmcgb2YgZmlsZSBhZnRlciBnZXR0aW5nIGZpbGUgc2l6ZSAqLworCWlmIChsc2VlayhmZCwgMCwgU0VFS19TRVQpID09IC0xKSB7CisJCWVuZHdpbigpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7CisJCWV4aXQoLTEpOworCX0KKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcmVhZCBidWZmZXIgKi8KKwlpZiAoKGJ1ZiA9IG1hbGxvYyhCVUZfU0laRSArIDEpKSA9PSBOVUxMKSB7CisJCWVuZHdpbigpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGluIGRpYWxvZ190ZXh0Ym94KCkuXG4iKTsKKwkJZXhpdCgtMSk7CisJfQorCWlmICgoYnl0ZXNfcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgQlVGX1NJWkUpKSA9PSAtMSkgeworCQllbmR3aW4oKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIHJlYWRpbmcgZmlsZSBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7CisJCWV4aXQoLTEpOworCX0KKwlidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOwkvKiBtYXJrIGVuZCBvZiB2YWxpZCBkYXRhICovCisJcGFnZSA9IGJ1ZjsJCS8qIHBhZ2UgaXMgcG9pbnRlciB0byBzdGFydCBvZiBwYWdlIHRvIGJlIGRpc3BsYXllZCAqLworCisJLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9IChDT0xTIC0gd2lkdGgpIC8gMjsKKwl5ID0gKExJTkVTIC0gaGVpZ2h0KSAvIDI7CisKKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOworCisJZGlhbG9nID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFsb2csIFRSVUUpOworCisJLyogQ3JlYXRlIHdpbmRvdyBmb3IgdGV4dCByZWdpb24sIHVzZWQgZm9yIHNjcm9sbGluZyB0ZXh0ICovCisJdGV4dCA9IHN1YndpbihkaWFsb2csIGhlaWdodCAtIDQsIHdpZHRoIC0gMiwgeSArIDEsIHggKyAxKTsKKwl3YXR0cnNldCh0ZXh0LCBkaWFsb2dfYXR0cik7CisJd2JrZ2RzZXQodGV4dCwgZGlhbG9nX2F0dHIgJiBBX0NPTE9SKTsKKworCWtleXBhZCh0ZXh0LCBUUlVFKTsKKworCS8qIHJlZ2lzdGVyIHRoZSBuZXcgd2luZG93LCBhbG9uZyB3aXRoIGl0cyBib3JkZXJzICovCisJZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLCBkaWFsb2dfYXR0ciwgYm9yZGVyX2F0dHIpOworCisJd2F0dHJzZXQoZGlhbG9nLCBib3JkZXJfYXR0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGlhbG9nX2F0dHIpOworCXdia2dkc2V0KGRpYWxvZywgZGlhbG9nX2F0dHIgJiBBX0NPTE9SKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwlwcmludF9idXR0b24oZGlhbG9nLCAiIEV4aXQgIiwgaGVpZ2h0IC0gMiwgd2lkdGggLyAyIC0gNCwgVFJVRSk7CisJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJZ2V0eXgoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBTYXZlIGN1cnNvciBwb3NpdGlvbiAqLworCisJLyogUHJpbnQgZmlyc3QgcGFnZSBvZiB0ZXh0ICovCisJYXR0cl9jbGVhcih0ZXh0LCBoZWlnaHQgLSA0LCB3aWR0aCAtIDIsIGRpYWxvZ19hdHRyKTsKKwlwcmludF9wYWdlKHRleHQsIGhlaWdodCAtIDQsIHdpZHRoIC0gMik7CisJcHJpbnRfcG9zaXRpb24oZGlhbG9nLCBoZWlnaHQsIHdpZHRoKTsKKwl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCisJd3JlZnJlc2goZGlhbG9nKTsKKworCXdoaWxlICgoa2V5ICE9IEVTQykgJiYgKGtleSAhPSAnXG4nKSkgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAnRSc6CS8qIEV4aXQgKi8KKwkJY2FzZSAnZSc6CisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJZnJlZShidWYpOworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ2cnOgkvKiBGaXJzdCBwYWdlICovCisJCWNhc2UgS0VZX0hPTUU6CisJCQlpZiAoIWJlZ2luX3JlYWNoZWQpIHsKKwkJCQliZWdpbl9yZWFjaGVkID0gMTsKKwkJCQkvKiBGaXJzdCBwYWdlIG5vdCBpbiBidWZmZXI/ICovCisJCQkJaWYgKChmcG9zID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSkgPT0gLTEpIHsKKwkJCQkJZW5kd2luKCk7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciBtb3ZpbmcgZmlsZSBwb2ludGVyIGluIGRpYWxvZ190ZXh0Ym94KCkuXG4iKTsKKwkJCQkJZXhpdCgtMSk7CisJCQkJfQorCQkJCWlmIChmcG9zID4gYnl0ZXNfcmVhZCkgewkvKiBZZXMsIHdlIGhhdmUgdG8gcmVhZCBpdCBpbiAqLworCQkJCQlpZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VUKSA9PSAtMSkgeworCQkJCQkJZW5kd2luKCk7CisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiAiCisJCQkJCQkJICAgICAgICAiZGlhbG9nX3RleHRib3goKS5cbiIpOworCQkJCQkJZXhpdCgtMSk7CisJCQkJCX0KKwkJCQkJaWYgKChieXRlc19yZWFkID0KKwkJCQkJICAgICByZWFkKGZkLCBidWYsIEJVRl9TSVpFKSkgPT0gLTEpIHsKKwkJCQkJCWVuZHdpbigpOworCQkJCQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIHJlYWRpbmcgZmlsZSBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7CisJCQkJCQlleGl0KC0xKTsKKwkJCQkJfQorCQkJCQlidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOworCQkJCX0KKwkJCQlwYWdlID0gYnVmOworCQkJCXByaW50X3BhZ2UodGV4dCwgaGVpZ2h0IC0gNCwgd2lkdGggLSAyKTsKKwkJCQlwcmludF9wb3NpdGlvbihkaWFsb2csIGhlaWdodCwgd2lkdGgpOworCQkJCXdtb3ZlKGRpYWxvZywgY3VyX3ksIGN1cl94KTsJLyogUmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gKi8KKwkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0cnOgkvKiBMYXN0IHBhZ2UgKi8KKwkJY2FzZSBLRVlfRU5EOgorCisJCQllbmRfcmVhY2hlZCA9IDE7CisJCQkvKiBMYXN0IHBhZ2Ugbm90IGluIGJ1ZmZlcj8gKi8KKwkJCWlmICgoZnBvcyA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikpID09IC0xKSB7CisJCQkJZW5kd2luKCk7CisJCQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gZGlhbG9nX3RleHRib3goKS5cbiIpOworCQkJCWV4aXQoLTEpOworCQkJfQorCQkJaWYgKGZwb3MgPCBmaWxlX3NpemUpIHsJLyogWWVzLCB3ZSBoYXZlIHRvIHJlYWQgaXQgaW4gKi8KKwkJCQlpZiAobHNlZWsoZmQsIC1CVUZfU0laRSwgU0VFS19FTkQpID09IC0xKSB7CisJCQkJCWVuZHdpbigpOworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7CisJCQkJCWV4aXQoLTEpOworCQkJCX0KKwkJCQlpZiAoKGJ5dGVzX3JlYWQgPQorCQkJCSAgICAgcmVhZChmZCwgYnVmLCBCVUZfU0laRSkpID09IC0xKSB7CisJCQkJCWVuZHdpbigpOworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgcmVhZGluZyBmaWxlIGluIGRpYWxvZ190ZXh0Ym94KCkuXG4iKTsKKwkJCQkJZXhpdCgtMSk7CisJCQkJfQorCQkJCWJ1ZltieXRlc19yZWFkXSA9ICdcMCc7CisJCQl9CisJCQlwYWdlID0gYnVmICsgYnl0ZXNfcmVhZDsKKwkJCWJhY2tfbGluZXMoaGVpZ2h0IC0gNCk7CisJCQlwcmludF9wYWdlKHRleHQsIGhlaWdodCAtIDQsIHdpZHRoIC0gMik7CisJCQlwcmludF9wb3NpdGlvbihkaWFsb2csIGhlaWdodCwgd2lkdGgpOworCQkJd21vdmUoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlICdLJzoJLyogUHJldmlvdXMgbGluZSAqLworCQljYXNlICdrJzoKKwkJY2FzZSBLRVlfVVA6CisJCQlpZiAoIWJlZ2luX3JlYWNoZWQpIHsKKwkJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoICsgMSk7CisKKwkJCQkvKiBXZSBkb24ndCBjYWxsIHByaW50X3BhZ2UoKSBoZXJlIGJ1dCB1c2Ugc2Nyb2xsaW5nIHRvIGVuc3VyZQorCQkJCSAgIGZhc3RlciBzY3JlZW4gdXBkYXRlLiBIb3dldmVyLCAnZW5kX3JlYWNoZWQnIGFuZAorCQkJCSAgICdwYWdlX2xlbmd0aCcgc2hvdWxkIHN0aWxsIGJlIHVwZGF0ZWQsIGFuZCAncGFnZScgc2hvdWxkCisJCQkJICAgcG9pbnQgdG8gc3RhcnQgb2YgbmV4dCBwYWdlLiBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZworCQkJCSAgIGdldF9saW5lKCkgaW4gdGhlIGZvbGxvd2luZyAnZm9yJyBsb29wLiAqLworCQkJCXNjcm9sbG9rKHRleHQsIFRSVUUpOworCQkJCXdzY3JsKHRleHQsIC0xKTsJLyogU2Nyb2xsIHRleHQgcmVnaW9uIGRvd24gb25lIGxpbmUgKi8KKwkJCQlzY3JvbGxvayh0ZXh0LCBGQUxTRSk7CisJCQkJcGFnZV9sZW5ndGggPSAwOworCQkJCXBhc3NlZF9lbmQgPSAwOworCQkJCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQgLSA0OyBpKyspIHsKKwkJCQkJaWYgKCFpKSB7CisJCQkJCQkvKiBwcmludCBmaXJzdCBsaW5lIG9mIHBhZ2UgKi8KKwkJCQkJCXByaW50X2xpbmUodGV4dCwgMCwgd2lkdGggLSAyKTsKKwkJCQkJCXdub3V0cmVmcmVzaCh0ZXh0KTsKKwkJCQkJfSBlbHNlCisJCQkJCQkvKiBDYWxsZWQgdG8gdXBkYXRlICdlbmRfcmVhY2hlZCcgYW5kICdwYWdlJyAqLworCQkJCQkJZ2V0X2xpbmUoKTsKKwkJCQkJaWYgKCFwYXNzZWRfZW5kKQorCQkJCQkJcGFnZV9sZW5ndGgrKzsKKwkJCQkJaWYgKGVuZF9yZWFjaGVkICYmICFwYXNzZWRfZW5kKQorCQkJCQkJcGFzc2VkX2VuZCA9IDE7CisJCQkJfQorCisJCQkJcHJpbnRfcG9zaXRpb24oZGlhbG9nLCBoZWlnaHQsIHdpZHRoKTsKKwkJCQl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCisJCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdCJzoJLyogUHJldmlvdXMgcGFnZSAqLworCQljYXNlICdiJzoKKwkJY2FzZSBLRVlfUFBBR0U6CisJCQlpZiAoYmVnaW5fcmVhY2hlZCkKKwkJCQlicmVhazsKKwkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGggKyBoZWlnaHQgLSA0KTsKKwkJCXByaW50X3BhZ2UodGV4dCwgaGVpZ2h0IC0gNCwgd2lkdGggLSAyKTsKKwkJCXByaW50X3Bvc2l0aW9uKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCk7CisJCQl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CisJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgJ0onOgkvKiBOZXh0IGxpbmUgKi8KKwkJY2FzZSAnaic6CisJCWNhc2UgS0VZX0RPV046CisJCQlpZiAoIWVuZF9yZWFjaGVkKSB7CisJCQkJYmVnaW5fcmVhY2hlZCA9IDA7CisJCQkJc2Nyb2xsb2sodGV4dCwgVFJVRSk7CisJCQkJc2Nyb2xsKHRleHQpOwkvKiBTY3JvbGwgdGV4dCByZWdpb24gdXAgb25lIGxpbmUgKi8KKwkJCQlzY3JvbGxvayh0ZXh0LCBGQUxTRSk7CisJCQkJcHJpbnRfbGluZSh0ZXh0LCBoZWlnaHQgLSA1LCB3aWR0aCAtIDIpOworCQkJCXdub3V0cmVmcmVzaCh0ZXh0KTsKKwkJCQlwcmludF9wb3NpdGlvbihkaWFsb2csIGhlaWdodCwgd2lkdGgpOworCQkJCXdtb3ZlKGRpYWxvZywgY3VyX3ksIGN1cl94KTsJLyogUmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gKi8KKwkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgS0VZX05QQUdFOgkvKiBOZXh0IHBhZ2UgKi8KKwkJY2FzZSAnICc6CisJCQlpZiAoZW5kX3JlYWNoZWQpCisJCQkJYnJlYWs7CisKKwkJCWJlZ2luX3JlYWNoZWQgPSAwOworCQkJcHJpbnRfcGFnZSh0ZXh0LCBoZWlnaHQgLSA0LCB3aWR0aCAtIDIpOworCQkJcHJpbnRfcG9zaXRpb24oZGlhbG9nLCBoZWlnaHQsIHdpZHRoKTsKKwkJCXdtb3ZlKGRpYWxvZywgY3VyX3ksIGN1cl94KTsKKwkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSAnMCc6CS8qIEJlZ2lubmluZyBvZiBsaW5lICovCisJCWNhc2UgJ0gnOgkvKiBTY3JvbGwgbGVmdCAqLworCQljYXNlICdoJzoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJCWlmIChoc2Nyb2xsIDw9IDApCisJCQkJYnJlYWs7CisKKwkJCWlmIChrZXkgPT0gJzAnKQorCQkJCWhzY3JvbGwgPSAwOworCQkJZWxzZQorCQkJCWhzY3JvbGwtLTsKKwkJCS8qIFJlcHJpbnQgY3VycmVudCBwYWdlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkgKi8KKwkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGgpOworCQkJcHJpbnRfcGFnZSh0ZXh0LCBoZWlnaHQgLSA0LCB3aWR0aCAtIDIpOworCQkJd21vdmUoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOworCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlICdMJzoJLyogU2Nyb2xsIHJpZ2h0ICovCisJCWNhc2UgJ2wnOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCWlmIChoc2Nyb2xsID49IE1BWF9MRU4pCisJCQkJYnJlYWs7CisJCQloc2Nyb2xsKys7CisJCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovCisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsKKwkJCXByaW50X3BhZ2UodGV4dCwgaGVpZ2h0IC0gNCwgd2lkdGggLSAyKTsKKwkJCXdtb3ZlKGRpYWxvZywgY3VyX3ksIGN1cl94KTsKKwkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSBFU0M6CisJCQlicmVhazsKKwkJfQorCX0KKworCWRlbHdpbihkaWFsb2cpOworCWZyZWUoYnVmKTsKKwljbG9zZShmZCk7CisJcmV0dXJuIC0xOwkJLyogRVNDIHByZXNzZWQgKi8KK30KKworLyoKKyAqIEdvIGJhY2sgJ24nIGxpbmVzIGluIHRleHQgZmlsZS4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkuCisgKiAncGFnZScgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBkZXNpcmVkIGxpbmUgaW4gJ2J1ZicuCisgKi8KK3N0YXRpYyB2b2lkIGJhY2tfbGluZXMoaW50IG4pCit7CisJaW50IGksIGZwb3M7CisKKwliZWdpbl9yZWFjaGVkID0gMDsKKwkvKiBXZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZW5kX3JlYWNoZWQgYW5kICFlbmRfcmVhY2hlZAorCSAgIHNpbmNlIGF0IGVuZCBvZiBmaWxlLCB0aGUgbGluZSBpcyBub3QgZW5kZWQgYnkgYSAnXG4nLgorCSAgIFRoZSBjb2RlIGluc2lkZSAnaWYnIGJhc2ljYWxseSBkb2VzIGEgJy0tcGFnZScgdG8gbW92ZSBvbmUKKwkgICBjaGFyYWN0ZXIgYmFja3dhcmQgc28gYXMgdG8gc2tpcCAnXG4nIG9mIHRoZSBwcmV2aW91cyBsaW5lICovCisJaWYgKCFlbmRfcmVhY2hlZCkgeworCQkvKiBFaXRoZXIgYmVnaW5uaW5nIG9mIGJ1ZmZlciBvciBiZWdpbm5pbmcgb2YgZmlsZSByZWFjaGVkPyAqLworCQlpZiAocGFnZSA9PSBidWYpIHsKKwkJCWlmICgoZnBvcyA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikpID09IC0xKSB7CisJCQkJZW5kd2luKCk7CisJCQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gIgorCQkJCQkgICAgICAgICJiYWNrX2xpbmVzKCkuXG4iKTsKKwkJCQlleGl0KC0xKTsKKwkJCX0KKwkJCWlmIChmcG9zID4gYnl0ZXNfcmVhZCkgewkvKiBOb3QgYmVnaW5uaW5nIG9mIGZpbGUgeWV0ICovCisJCQkJLyogV2UndmUgcmVhY2hlZCBiZWdpbm5pbmcgb2YgYnVmZmVyLCBidXQgbm90IGJlZ2lubmluZyBvZgorCQkJCSAgIGZpbGUgeWV0LCBzbyByZWFkIHByZXZpb3VzIHBhcnQgb2YgZmlsZSBpbnRvIGJ1ZmZlci4KKwkJCQkgICBOb3RlIHRoYXQgd2Ugb25seSBtb3ZlIGJhY2t3YXJkIGZvciBCVUZfU0laRS8yIGJ5dGVzLAorCQkJCSAgIGJ1dCBub3QgQlVGX1NJWkUgYnl0ZXMgdG8gYXZvaWQgcmUtcmVhZGluZyBhZ2FpbiBpbgorCQkJCSAgIHByaW50X3BhZ2UoKSBsYXRlciAqLworCQkJCS8qIFJlYWxseSBwb3NzaWJsZSB0byBtb3ZlIGJhY2t3YXJkIEJVRl9TSVpFLzIgYnl0ZXM/ICovCisJCQkJaWYgKGZwb3MgPCBCVUZfU0laRSAvIDIgKyBieXRlc19yZWFkKSB7CisJCQkJCS8qIE5vLCBtb3ZlIGxlc3MgdGhlbiAqLworCQkJCQlpZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VUKSA9PSAtMSkgeworCQkJCQkJZW5kd2luKCk7CisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiAiCisJCQkJCQkgICAgICAgICAgICAgICAgImJhY2tfbGluZXMoKS5cbiIpOworCQkJCQkJZXhpdCgtMSk7CisJCQkJCX0KKwkJCQkJcGFnZSA9IGJ1ZiArIGZwb3MgLSBieXRlc19yZWFkOworCQkJCX0gZWxzZSB7CS8qIE1vdmUgYmFja3dhcmQgQlVGX1NJWkUvMiBieXRlcyAqLworCQkJCQlpZiAobHNlZWsgKGZkLCAtKEJVRl9TSVpFIC8gMiArIGJ5dGVzX3JlYWQpLCBTRUVLX0NVUikgPT0gLTEpIHsKKwkJCQkJCWVuZHdpbigpOworCQkJCQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgIgorCQkJCQkJICAgICAgICAgICAgICAgICJpbiBiYWNrX2xpbmVzKCkuXG4iKTsKKwkJCQkJCWV4aXQoLTEpOworCQkJCQl9CisJCQkJCXBhZ2UgPSBidWYgKyBCVUZfU0laRSAvIDI7CisJCQkJfQorCQkJCWlmICgoYnl0ZXNfcmVhZCA9CisJCQkJICAgICByZWFkKGZkLCBidWYsIEJVRl9TSVpFKSkgPT0gLTEpIHsKKwkJCQkJZW5kd2luKCk7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciByZWFkaW5nIGZpbGUgaW4gYmFja19saW5lcygpLlxuIik7CisJCQkJCWV4aXQoLTEpOworCQkJCX0KKwkJCQlidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOworCQkJfSBlbHNlIHsJLyogQmVnaW5uaW5nIG9mIGZpbGUgcmVhY2hlZCAqLworCQkJCWJlZ2luX3JlYWNoZWQgPSAxOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlpZiAoKigtLXBhZ2UpICE9ICdcbicpIHsJLyogJy0tcGFnZScgaGVyZSAqLworCQkJLyogU29tZXRoaW5nJ3Mgd3JvbmcuLi4gKi8KKwkJCWVuZHdpbigpOworCQkJZnByaW50ZihzdGRlcnIsICJcbkludGVybmFsIGVycm9yIGluIGJhY2tfbGluZXMoKS5cbiIpOworCQkJZXhpdCgtMSk7CisJCX0KKwl9CisJLyogR28gYmFjayAnbicgbGluZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlkbyB7CisJCQlpZiAocGFnZSA9PSBidWYpIHsKKwkJCQlpZiAoKGZwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpKSA9PSAtMSkgeworCQkJCQllbmR3aW4oKTsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gYmFja19saW5lcygpLlxuIik7CisJCQkJCWV4aXQoLTEpOworCQkJCX0KKwkJCQlpZiAoZnBvcyA+IGJ5dGVzX3JlYWQpIHsKKwkJCQkJLyogUmVhbGx5IHBvc3NpYmxlIHRvIG1vdmUgYmFja3dhcmQgQlVGX1NJWkUvMiBieXRlcz8gKi8KKwkJCQkJaWYgKGZwb3MgPCBCVUZfU0laRSAvIDIgKyBieXRlc19yZWFkKSB7CisJCQkJCQkvKiBObywgbW92ZSBsZXNzIHRoZW4gKi8KKwkJCQkJCWlmIChsc2VlayhmZCwgMCwgU0VFS19TRVQpID09IC0xKSB7CisJCQkJCQkJZW5kd2luKCk7CisJCQkJCQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgIgorCQkJCQkJCSAgICAgICAgICAgICAgICAiaW4gYmFja19saW5lcygpLlxuIik7CisJCQkJCQkJZXhpdCgtMSk7CisJCQkJCQl9CisJCQkJCQlwYWdlID0gYnVmICsgZnBvcyAtIGJ5dGVzX3JlYWQ7CisJCQkJCX0gZWxzZSB7CS8qIE1vdmUgYmFja3dhcmQgQlVGX1NJWkUvMiBieXRlcyAqLworCQkJCQkJaWYgKGxzZWVrIChmZCwgLShCVUZfU0laRSAvIDIgKyBieXRlc19yZWFkKSwgU0VFS19DVVIpID09IC0xKSB7CisJCQkJCQkJZW5kd2luKCk7CisJCQkJCQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIiCisJCQkJCQkJICAgICAgICAgICAgICAgICIgaW4gYmFja19saW5lcygpLlxuIik7CisJCQkJCQkJZXhpdCgtMSk7CisJCQkJCQl9CisJCQkJCQlwYWdlID0gYnVmICsgQlVGX1NJWkUgLyAyOworCQkJCQl9CisJCQkJCWlmICgoYnl0ZXNfcmVhZCA9CisJCQkJCSAgICAgcmVhZChmZCwgYnVmLCBCVUZfU0laRSkpID09IC0xKSB7CisJCQkJCQllbmR3aW4oKTsKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciByZWFkaW5nIGZpbGUgaW4gIgorCQkJCQkJICAgICAgICAgICAgICAgICJiYWNrX2xpbmVzKCkuXG4iKTsKKwkJCQkJCWV4aXQoLTEpOworCQkJCQl9CisJCQkJCWJ1ZltieXRlc19yZWFkXSA9ICdcMCc7CisJCQkJfSBlbHNlIHsJLyogQmVnaW5uaW5nIG9mIGZpbGUgcmVhY2hlZCAqLworCQkJCQliZWdpbl9yZWFjaGVkID0gMTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAoKigtLXBhZ2UpICE9ICdcbicpOworCXBhZ2UrKzsKK30KKworLyoKKyAqIFByaW50IGEgbmV3IHBhZ2Ugb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X3BhZ2UoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGksIHBhc3NlZF9lbmQgPSAwOworCisJcGFnZV9sZW5ndGggPSAwOworCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworCQlwcmludF9saW5lKHdpbiwgaSwgd2lkdGgpOworCQlpZiAoIXBhc3NlZF9lbmQpCisJCQlwYWdlX2xlbmd0aCsrOworCQlpZiAoZW5kX3JlYWNoZWQgJiYgIXBhc3NlZF9lbmQpCisJCQlwYXNzZWRfZW5kID0gMTsKKwl9CisJd25vdXRyZWZyZXNoKHdpbik7Cit9CisKKy8qCisgKiBQcmludCBhIG5ldyBsaW5lIG9mIHRleHQuIENhbGxlZCBieSBkaWFsb2dfdGV4dGJveCgpIGFuZCBwcmludF9wYWdlKCkuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoV0lORE9XICogd2luLCBpbnQgcm93LCBpbnQgd2lkdGgpCit7CisJaW50IHksIHg7CisJY2hhciAqbGluZTsKKworCWxpbmUgPSBnZXRfbGluZSgpOworCWxpbmUgKz0gTUlOKHN0cmxlbihsaW5lKSwgaHNjcm9sbCk7CS8qIFNjcm9sbCBob3Jpem9udGFsbHkgKi8KKwl3bW92ZSh3aW4sIHJvdywgMCk7CS8qIG1vdmUgY3Vyc29yIHRvIGNvcnJlY3QgbGluZSAqLworCXdhZGRjaCh3aW4sICcgJyk7CisJd2FkZG5zdHIod2luLCBsaW5lLCBNSU4oc3RybGVuKGxpbmUpLCB3aWR0aCAtIDIpKTsKKworCWdldHl4KHdpbiwgeSwgeCk7CisJLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIHByZXZpb3VzIGxpbmUgKi8KKyNpZiBPTERfTkNVUlNFUworCXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIHg7IGkrKykKKwkJCXdhZGRjaCh3aW4sICcgJyk7CisJfQorI2Vsc2UKKwl3Y2xydG9lb2wod2luKTsKKyNlbmRpZgorfQorCisvKgorICogUmV0dXJuIGN1cnJlbnQgbGluZSBvZiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKSBhbmQgcHJpbnRfbGluZSgpLgorICogJ3BhZ2UnIHNob3VsZCBwb2ludCB0byBzdGFydCBvZiBjdXJyZW50IGxpbmUgYmVmb3JlIGNhbGxpbmcsIGFuZCB3aWxsIGJlCisgKiB1cGRhdGVkIHRvIHBvaW50IHRvIHN0YXJ0IG9mIG5leHQgbGluZS4KKyAqLworc3RhdGljIGNoYXIgKmdldF9saW5lKHZvaWQpCit7CisJaW50IGkgPSAwLCBmcG9zOworCXN0YXRpYyBjaGFyIGxpbmVbTUFYX0xFTiArIDFdOworCisJZW5kX3JlYWNoZWQgPSAwOworCXdoaWxlICgqcGFnZSAhPSAnXG4nKSB7CisJCWlmICgqcGFnZSA9PSAnXDAnKSB7CisJCQkvKiBFaXRoZXIgZW5kIG9mIGZpbGUgb3IgZW5kIG9mIGJ1ZmZlciByZWFjaGVkICovCisJCQlpZiAoKGZwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpKSA9PSAtMSkgeworCQkJCWVuZHdpbigpOworCQkJCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciBtb3ZpbmcgZmlsZSBwb2ludGVyIGluICIKKwkJCQkgICAgICAgICAgICAgICAgImdldF9saW5lKCkuXG4iKTsKKwkJCQlleGl0KC0xKTsKKwkJCX0KKwkJCWlmIChmcG9zIDwgZmlsZV9zaXplKSB7CS8qIE5vdCBlbmQgb2YgZmlsZSB5ZXQgKi8KKwkJCQkvKiBXZSd2ZSByZWFjaGVkIGVuZCBvZiBidWZmZXIsIGJ1dCBub3QgZW5kIG9mIGZpbGUgeWV0LAorCQkJCSAgIHNvIHJlYWQgbmV4dCBwYXJ0IG9mIGZpbGUgaW50byBidWZmZXIgKi8KKwkJCQlpZiAoKGJ5dGVzX3JlYWQgPQorCQkJCSAgICAgcmVhZChmZCwgYnVmLCBCVUZfU0laRSkpID09IC0xKSB7CisJCQkJCWVuZHdpbigpOworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgcmVhZGluZyBmaWxlIGluIGdldF9saW5lKCkuXG4iKTsKKwkJCQkJZXhpdCgtMSk7CisJCQkJfQorCQkJCWJ1ZltieXRlc19yZWFkXSA9ICdcMCc7CisJCQkJcGFnZSA9IGJ1ZjsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFlbmRfcmVhY2hlZCkKKwkJCQkJZW5kX3JlYWNoZWQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKGkgPCBNQVhfTEVOKQorCQkJbGluZVtpKytdID0gKihwYWdlKyspOworCQllbHNlIHsKKwkJCS8qIFRydW5jYXRlIGxpbmVzIGxvbmdlciB0aGFuIE1BWF9MRU4gY2hhcmFjdGVycyAqLworCQkJaWYgKGkgPT0gTUFYX0xFTikKKwkJCQlsaW5lW2krK10gPSAnXDAnOworCQkJcGFnZSsrOworCQl9CisJfQorCWlmIChpIDw9IE1BWF9MRU4pCisJCWxpbmVbaV0gPSAnXDAnOworCWlmICghZW5kX3JlYWNoZWQpCisJCXBhZ2UrKzsJCS8qIG1vdmUgcGFzcyAnXG4nICovCisKKwlyZXR1cm4gbGluZTsKK30KKworLyoKKyAqIFByaW50IGN1cnJlbnQgcG9zaXRpb24KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfcG9zaXRpb24oV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGZwb3MsIHBlcmNlbnQ7CisKKwlpZiAoKGZwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpKSA9PSAtMSkgeworCQllbmR3aW4oKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gcHJpbnRfcG9zaXRpb24oKS5cbiIpOworCQlleGl0KC0xKTsKKwl9CisJd2F0dHJzZXQod2luLCBwb3NpdGlvbl9pbmRpY2F0b3JfYXR0cik7CisJd2JrZ2RzZXQod2luLCBwb3NpdGlvbl9pbmRpY2F0b3JfYXR0ciAmIEFfQ09MT1IpOworCXBlcmNlbnQgPSAhZmlsZV9zaXplID8KKwkgICAgMTAwIDogKChmcG9zIC0gYnl0ZXNfcmVhZCArIHBhZ2UgLSBidWYpICogMTAwKSAvIGZpbGVfc2l6ZTsKKwl3bW92ZSh3aW4sIGhlaWdodCAtIDMsIHdpZHRoIC0gOSk7CisJd3ByaW50dyh3aW4sICIoJTNkJSUpIiwgcGVyY2VudCk7Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvdXRpbC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODJjZWJiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqICB1dGlsLmMKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworLyogdXNlIGNvbG9ycyBieSBkZWZhdWx0PyAqLworYm9vbCB1c2VfY29sb3JzID0gMTsKKworY29uc3QgY2hhciAqYmFja3RpdGxlID0gTlVMTDsKKworLyoKKyAqIEF0dHJpYnV0ZSB2YWx1ZXMsIGRlZmF1bHQgaXMgZm9yIG1vbm8gZGlzcGxheQorICovCitjaHR5cGUgYXR0cmlidXRlc1tdID0geworCUFfTk9STUFMLAkJLyogc2NyZWVuX2F0dHIgKi8KKwlBX05PUk1BTCwJCS8qIHNoYWRvd19hdHRyICovCisJQV9OT1JNQUwsCQkvKiBkaWFsb2dfYXR0ciAqLworCUFfQk9MRCwJCQkvKiB0aXRsZV9hdHRyICovCisJQV9OT1JNQUwsCQkvKiBib3JkZXJfYXR0ciAqLworCUFfUkVWRVJTRSwJCS8qIGJ1dHRvbl9hY3RpdmVfYXR0ciAqLworCUFfRElNLAkJCS8qIGJ1dHRvbl9pbmFjdGl2ZV9hdHRyICovCisJQV9SRVZFUlNFLAkJLyogYnV0dG9uX2tleV9hY3RpdmVfYXR0ciAqLworCUFfQk9MRCwJCQkvKiBidXR0b25fa2V5X2luYWN0aXZlX2F0dHIgKi8KKwlBX1JFVkVSU0UsCQkvKiBidXR0b25fbGFiZWxfYWN0aXZlX2F0dHIgKi8KKwlBX05PUk1BTCwJCS8qIGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZV9hdHRyICovCisJQV9OT1JNQUwsCQkvKiBpbnB1dGJveF9hdHRyICovCisJQV9OT1JNQUwsCQkvKiBpbnB1dGJveF9ib3JkZXJfYXR0ciAqLworCUFfTk9STUFMLAkJLyogc2VhcmNoYm94X2F0dHIgKi8KKwlBX0JPTEQsCQkJLyogc2VhcmNoYm94X3RpdGxlX2F0dHIgKi8KKwlBX05PUk1BTCwJCS8qIHNlYXJjaGJveF9ib3JkZXJfYXR0ciAqLworCUFfQk9MRCwJCQkvKiBwb3NpdGlvbl9pbmRpY2F0b3JfYXR0ciAqLworCUFfTk9STUFMLAkJLyogbWVudWJveF9hdHRyICovCisJQV9OT1JNQUwsCQkvKiBtZW51Ym94X2JvcmRlcl9hdHRyICovCisJQV9OT1JNQUwsCQkvKiBpdGVtX2F0dHIgKi8KKwlBX1JFVkVSU0UsCQkvKiBpdGVtX3NlbGVjdGVkX2F0dHIgKi8KKwlBX0JPTEQsCQkJLyogdGFnX2F0dHIgKi8KKwlBX1JFVkVSU0UsCQkvKiB0YWdfc2VsZWN0ZWRfYXR0ciAqLworCUFfQk9MRCwJCQkvKiB0YWdfa2V5X2F0dHIgKi8KKwlBX1JFVkVSU0UsCQkvKiB0YWdfa2V5X3NlbGVjdGVkX2F0dHIgKi8KKwlBX0JPTEQsCQkJLyogY2hlY2tfYXR0ciAqLworCUFfUkVWRVJTRSwJCS8qIGNoZWNrX3NlbGVjdGVkX2F0dHIgKi8KKwlBX0JPTEQsCQkJLyogdWFycm93X2F0dHIgKi8KKwlBX0JPTEQJCQkvKiBkYXJyb3dfYXR0ciAqLworfTsKKworI2luY2x1ZGUgImNvbG9ycy5oIgorCisvKgorICogVGFibGUgb2YgY29sb3IgdmFsdWVzCisgKi8KK2ludCBjb2xvcl90YWJsZVtdWzNdID0geworCXtTQ1JFRU5fRkcsIFNDUkVFTl9CRywgU0NSRUVOX0hMfSwKKwl7U0hBRE9XX0ZHLCBTSEFET1dfQkcsIFNIQURPV19ITH0sCisJe0RJQUxPR19GRywgRElBTE9HX0JHLCBESUFMT0dfSEx9LAorCXtUSVRMRV9GRywgVElUTEVfQkcsIFRJVExFX0hMfSwKKwl7Qk9SREVSX0ZHLCBCT1JERVJfQkcsIEJPUkRFUl9ITH0sCisJe0JVVFRPTl9BQ1RJVkVfRkcsIEJVVFRPTl9BQ1RJVkVfQkcsIEJVVFRPTl9BQ1RJVkVfSEx9LAorCXtCVVRUT05fSU5BQ1RJVkVfRkcsIEJVVFRPTl9JTkFDVElWRV9CRywgQlVUVE9OX0lOQUNUSVZFX0hMfSwKKwl7QlVUVE9OX0tFWV9BQ1RJVkVfRkcsIEJVVFRPTl9LRVlfQUNUSVZFX0JHLCBCVVRUT05fS0VZX0FDVElWRV9ITH0sCisJe0JVVFRPTl9LRVlfSU5BQ1RJVkVfRkcsIEJVVFRPTl9LRVlfSU5BQ1RJVkVfQkcsCisJIEJVVFRPTl9LRVlfSU5BQ1RJVkVfSEx9LAorCXtCVVRUT05fTEFCRUxfQUNUSVZFX0ZHLCBCVVRUT05fTEFCRUxfQUNUSVZFX0JHLAorCSBCVVRUT05fTEFCRUxfQUNUSVZFX0hMfSwKKwl7QlVUVE9OX0xBQkVMX0lOQUNUSVZFX0ZHLCBCVVRUT05fTEFCRUxfSU5BQ1RJVkVfQkcsCisJIEJVVFRPTl9MQUJFTF9JTkFDVElWRV9ITH0sCisJe0lOUFVUQk9YX0ZHLCBJTlBVVEJPWF9CRywgSU5QVVRCT1hfSEx9LAorCXtJTlBVVEJPWF9CT1JERVJfRkcsIElOUFVUQk9YX0JPUkRFUl9CRywgSU5QVVRCT1hfQk9SREVSX0hMfSwKKwl7U0VBUkNIQk9YX0ZHLCBTRUFSQ0hCT1hfQkcsIFNFQVJDSEJPWF9ITH0sCisJe1NFQVJDSEJPWF9USVRMRV9GRywgU0VBUkNIQk9YX1RJVExFX0JHLCBTRUFSQ0hCT1hfVElUTEVfSEx9LAorCXtTRUFSQ0hCT1hfQk9SREVSX0ZHLCBTRUFSQ0hCT1hfQk9SREVSX0JHLCBTRUFSQ0hCT1hfQk9SREVSX0hMfSwKKwl7UE9TSVRJT05fSU5ESUNBVE9SX0ZHLCBQT1NJVElPTl9JTkRJQ0FUT1JfQkcsIFBPU0lUSU9OX0lORElDQVRPUl9ITH0sCisJe01FTlVCT1hfRkcsIE1FTlVCT1hfQkcsIE1FTlVCT1hfSEx9LAorCXtNRU5VQk9YX0JPUkRFUl9GRywgTUVOVUJPWF9CT1JERVJfQkcsIE1FTlVCT1hfQk9SREVSX0hMfSwKKwl7SVRFTV9GRywgSVRFTV9CRywgSVRFTV9ITH0sCisJe0lURU1fU0VMRUNURURfRkcsIElURU1fU0VMRUNURURfQkcsIElURU1fU0VMRUNURURfSEx9LAorCXtUQUdfRkcsIFRBR19CRywgVEFHX0hMfSwKKwl7VEFHX1NFTEVDVEVEX0ZHLCBUQUdfU0VMRUNURURfQkcsIFRBR19TRUxFQ1RFRF9ITH0sCisJe1RBR19LRVlfRkcsIFRBR19LRVlfQkcsIFRBR19LRVlfSEx9LAorCXtUQUdfS0VZX1NFTEVDVEVEX0ZHLCBUQUdfS0VZX1NFTEVDVEVEX0JHLCBUQUdfS0VZX1NFTEVDVEVEX0hMfSwKKwl7Q0hFQ0tfRkcsIENIRUNLX0JHLCBDSEVDS19ITH0sCisJe0NIRUNLX1NFTEVDVEVEX0ZHLCBDSEVDS19TRUxFQ1RFRF9CRywgQ0hFQ0tfU0VMRUNURURfSEx9LAorCXtVQVJST1dfRkcsIFVBUlJPV19CRywgVUFSUk9XX0hMfSwKKwl7REFSUk9XX0ZHLCBEQVJST1dfQkcsIERBUlJPV19ITH0sCit9OwkJCQkvKiBjb2xvcl90YWJsZSAqLworCisvKgorICogU2V0IHdpbmRvdyB0byBhdHRyaWJ1dGUgJ2F0dHInCisgKi8KK3ZvaWQgYXR0cl9jbGVhcihXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpCit7CisJaW50IGksIGo7CisKKwl3YXR0cnNldCh3aW4sIGF0dHIpOworCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworCQl3bW92ZSh3aW4sIGksIDApOworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKKwkJCXdhZGRjaCh3aW4sICcgJyk7CisJfQorCXRvdWNod2luKHdpbik7Cit9CisKK3ZvaWQgZGlhbG9nX2NsZWFyKHZvaWQpCit7CisJYXR0cl9jbGVhcihzdGRzY3IsIExJTkVTLCBDT0xTLCBzY3JlZW5fYXR0cik7CisJLyogRGlzcGxheSBiYWNrZ3JvdW5kIHRpdGxlIGlmIGl0IGV4aXN0cyAuLi4gLSBTTEggKi8KKwlpZiAoYmFja3RpdGxlICE9IE5VTEwpIHsKKwkJaW50IGk7CisKKwkJd2F0dHJzZXQoc3Rkc2NyLCBzY3JlZW5fYXR0cik7CisJCW12d2FkZHN0cihzdGRzY3IsIDAsIDEsIChjaGFyICopYmFja3RpdGxlKTsKKwkJd21vdmUoc3Rkc2NyLCAxLCAxKTsKKwkJZm9yIChpID0gMTsgaSA8IENPTFMgLSAxOyBpKyspCisJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfSExJTkUpOworCX0KKwl3bm91dHJlZnJlc2goc3Rkc2NyKTsKK30KKworLyoKKyAqIERvIHNvbWUgaW5pdGlhbGl6YXRpb24gZm9yIGRpYWxvZworICovCit2b2lkIGluaXRfZGlhbG9nKHZvaWQpCit7CisJaW5pdHNjcigpOwkJLyogSW5pdCBjdXJzZXMgKi8KKwlrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKwljYnJlYWsoKTsKKwlub2VjaG8oKTsKKworCWlmICh1c2VfY29sb3JzKQkJLyogU2V0IHVwIGNvbG9ycyAqLworCQljb2xvcl9zZXR1cCgpOworCisJZGlhbG9nX2NsZWFyKCk7Cit9CisKKy8qCisgKiBTZXR1cCBmb3IgY29sb3IgZGlzcGxheQorICovCit2b2lkIGNvbG9yX3NldHVwKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoaGFzX2NvbG9ycygpKSB7CS8qIFRlcm1pbmFsIHN1cHBvcnRzIGNvbG9yPyAqLworCQlzdGFydF9jb2xvcigpOworCisJCS8qIEluaXRpYWxpemUgY29sb3IgcGFpcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFUVFJJQlVURV9DT1VOVDsgaSsrKQorCQkJaW5pdF9wYWlyKGkgKyAxLCBjb2xvcl90YWJsZVtpXVswXSwgY29sb3JfdGFibGVbaV1bMV0pOworCisJCS8qIFNldHVwIGNvbG9yIGF0dHJpYnV0ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFUVFJJQlVURV9DT1VOVDsgaSsrKQorCQkJYXR0cmlidXRlc1tpXSA9IENfQVRUUihjb2xvcl90YWJsZVtpXVsyXSwgaSArIDEpOworCX0KK30KKworLyoKKyAqIEVuZCB1c2luZyBkaWFsb2cgZnVuY3Rpb25zLgorICovCit2b2lkIGVuZF9kaWFsb2codm9pZCkKK3sKKwllbmR3aW4oKTsKK30KKworLyogUHJpbnQgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuIENlbnRlciB0aGUgdGl0bGUgYW5kIHRydW5jYXRlCisgKiB0aWxlIGlmIHdpZGVyIHRoYW4gZGlhbG9nICgtIDIgY2hhcnMpLgorICoqLwordm9pZCBwcmludF90aXRsZShXSU5ET1cgKmRpYWxvZywgY29uc3QgY2hhciAqdGl0bGUsIGludCB3aWR0aCkKK3sKKwlpZiAodGl0bGUpIHsKKwkJaW50IHRsZW4gPSBNSU4od2lkdGggLSAyLCBzdHJsZW4odGl0bGUpKTsKKwkJd2F0dHJzZXQoZGlhbG9nLCB0aXRsZV9hdHRyKTsKKwkJbXZ3YWRkY2goZGlhbG9nLCAwLCAod2lkdGggLSB0bGVuKSAvIDIgLSAxLCAnICcpOworCQltdndhZGRuc3RyKGRpYWxvZywgMCwgKHdpZHRoIC0gdGxlbikvMiwgdGl0bGUsIHRsZW4pOworCQl3YWRkY2goZGlhbG9nLCAnICcpOworCX0KK30KKworLyoKKyAqIFByaW50IGEgc3RyaW5nIG9mIHRleHQgaW4gYSB3aW5kb3csIGF1dG9tYXRpY2FsbHkgd3JhcCBhcm91bmQgdG8gdGhlCisgKiBuZXh0IGxpbmUgaWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZyB0byBmaXQgb24gb25lIGxpbmUuIE5ld2xpbmUKKyAqIGNoYXJhY3RlcnMgJ1xuJyBhcmUgcmVwbGFjZWQgYnkgc3BhY2VzLiAgV2Ugc3RhcnQgb24gYSBuZXcgbGluZQorICogaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYXQgbGVhc3QgNCBub25ibGFua3MgZm9sbG93aW5nIGEgZG91YmxlLXNwYWNlLgorICovCit2b2lkIHByaW50X2F1dG93cmFwKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgd2lkdGgsIGludCB5LCBpbnQgeCkKK3sKKwlpbnQgbmV3bCwgY3VyX3gsIGN1cl95OworCWludCBpLCBwcm9tcHRfbGVuLCByb29tLCB3bGVuOworCWNoYXIgdGVtcHN0cltNQVhfTEVOICsgMV0sICp3b3JkLCAqc3AsICpzcDI7CisKKwlzdHJjcHkodGVtcHN0ciwgcHJvbXB0KTsKKworCXByb21wdF9sZW4gPSBzdHJsZW4odGVtcHN0cik7CisKKwkvKgorCSAqIFJlbW92ZSBuZXdsaW5lcworCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9tcHRfbGVuOyBpKyspIHsKKwkJaWYgKHRlbXBzdHJbaV0gPT0gJ1xuJykKKwkJCXRlbXBzdHJbaV0gPSAnICc7CisJfQorCisJaWYgKHByb21wdF9sZW4gPD0gd2lkdGggLSB4ICogMikgewkvKiBJZiBwcm9tcHQgaXMgc2hvcnQgKi8KKwkJd21vdmUod2luLCB5LCAod2lkdGggLSBwcm9tcHRfbGVuKSAvIDIpOworCQl3YWRkc3RyKHdpbiwgdGVtcHN0cik7CisJfSBlbHNlIHsKKwkJY3VyX3ggPSB4OworCQljdXJfeSA9IHk7CisJCW5ld2wgPSAxOworCQl3b3JkID0gdGVtcHN0cjsKKwkJd2hpbGUgKHdvcmQgJiYgKndvcmQpIHsKKwkJCXNwID0gaW5kZXgod29yZCwgJyAnKTsKKwkJCWlmIChzcCkKKwkJCQkqc3ArKyA9IDA7CisKKwkJCS8qIFdyYXAgdG8gbmV4dCBsaW5lIGlmIGVpdGhlciB0aGUgd29yZCBkb2VzIG5vdCBmaXQsCisJCQkgICBvciBpdCBpcyB0aGUgZmlyc3Qgd29yZCBvZiBhIG5ldyBzZW50ZW5jZSwgYW5kIGl0IGlzCisJCQkgICBzaG9ydCwgYW5kIHRoZSBuZXh0IHdvcmQgZG9lcyBub3QgZml0LiAqLworCQkJcm9vbSA9IHdpZHRoIC0gY3VyX3g7CisJCQl3bGVuID0gc3RybGVuKHdvcmQpOworCQkJaWYgKHdsZW4gPiByb29tIHx8CisJCQkgICAgKG5ld2wgJiYgd2xlbiA8IDQgJiYgc3AKKwkJCSAgICAgJiYgd2xlbiArIDEgKyBzdHJsZW4oc3ApID4gcm9vbQorCQkJICAgICAmJiAoIShzcDIgPSBpbmRleChzcCwgJyAnKSkKKwkJCQkgfHwgd2xlbiArIDEgKyAoc3AyIC0gc3ApID4gcm9vbSkpKSB7CisJCQkJY3VyX3krKzsKKwkJCQljdXJfeCA9IHg7CisJCQl9CisJCQl3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7CisJCQl3YWRkc3RyKHdpbiwgd29yZCk7CisJCQlnZXR5eCh3aW4sIGN1cl95LCBjdXJfeCk7CisJCQljdXJfeCsrOworCQkJaWYgKHNwICYmICpzcCA9PSAnICcpIHsKKwkJCQljdXJfeCsrOwkvKiBkb3VibGUgc3BhY2UgKi8KKwkJCQl3aGlsZSAoKisrc3AgPT0gJyAnKSA7CisJCQkJbmV3bCA9IDE7CisJCQl9IGVsc2UKKwkJCQluZXdsID0gMDsKKwkJCXdvcmQgPSBzcDsKKwkJfQorCX0KK30KKworLyoKKyAqIFByaW50IGEgYnV0dG9uCisgKi8KK3ZvaWQgcHJpbnRfYnV0dG9uKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5LCBpbnQgeCwgaW50IHNlbGVjdGVkKQoreworCWludCBpLCB0ZW1wOworCisJd21vdmUod2luLCB5LCB4KTsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gYnV0dG9uX2FjdGl2ZV9hdHRyIDogYnV0dG9uX2luYWN0aXZlX2F0dHIpOworCXdhZGRzdHIod2luLCAiPCIpOworCXRlbXAgPSBzdHJzcG4obGFiZWwsICIgIik7CisJbGFiZWwgKz0gdGVtcDsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gYnV0dG9uX2xhYmVsX2FjdGl2ZV9hdHRyCisJCSA6IGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZV9hdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGVtcDsgaSsrKQorCQl3YWRkY2god2luLCAnICcpOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBidXR0b25fa2V5X2FjdGl2ZV9hdHRyCisJCSA6IGJ1dHRvbl9rZXlfaW5hY3RpdmVfYXR0cik7CisJd2FkZGNoKHdpbiwgbGFiZWxbMF0pOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBidXR0b25fbGFiZWxfYWN0aXZlX2F0dHIKKwkJIDogYnV0dG9uX2xhYmVsX2luYWN0aXZlX2F0dHIpOworCXdhZGRzdHIod2luLCAoY2hhciAqKWxhYmVsICsgMSk7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGJ1dHRvbl9hY3RpdmVfYXR0ciA6IGJ1dHRvbl9pbmFjdGl2ZV9hdHRyKTsKKwl3YWRkc3RyKHdpbiwgIj4iKTsKKwl3bW92ZSh3aW4sIHksIHggKyB0ZW1wICsgMSk7Cit9CisKKy8qCisgKiBEcmF3IGEgcmVjdGFuZ3VsYXIgYm94IHdpdGggbGluZSBkcmF3aW5nIGNoYXJhY3RlcnMKKyAqLwordm9pZAorZHJhd19ib3goV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCwKKwkgY2h0eXBlIGJveCwgY2h0eXBlIGJvcmRlcikKK3sKKwlpbnQgaSwgajsKKworCXdhdHRyc2V0KHdpbiwgMCk7CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXdtb3ZlKHdpbiwgeSArIGksIHgpOworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKKwkJCWlmICghaSAmJiAhaikKKwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfVUxDT1JORVIpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmICFqKQorCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19MTENPUk5FUik7CisJCQllbHNlIGlmICghaSAmJiBqID09IHdpZHRoIC0gMSkKKwkJCQl3YWRkY2god2luLCBib3ggfCBBQ1NfVVJDT1JORVIpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmIGogPT0gd2lkdGggLSAxKQorCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19MUkNPUk5FUik7CisJCQllbHNlIGlmICghaSkKKwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfSExJTkUpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxKQorCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19ITElORSk7CisJCQllbHNlIGlmICghaikKKwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfVkxJTkUpOworCQkJZWxzZSBpZiAoaiA9PSB3aWR0aCAtIDEpCisJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1ZMSU5FKTsKKwkJCWVsc2UKKwkJCQl3YWRkY2god2luLCBib3ggfCAnICcpOworCX0KK30KKworLyoKKyAqIERyYXcgc2hhZG93cyBhbG9uZyB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlIHRvIGdpdmUgYSBtb3JlIDNEIGxvb2sKKyAqIHRvIHRoZSBib3hlcworICovCit2b2lkIGRyYXdfc2hhZG93KFdJTkRPVyAqIHdpbiwgaW50IHksIGludCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGk7CisKKwlpZiAoaGFzX2NvbG9ycygpKSB7CS8qIFdoZXRoZXIgdGVybWluYWwgc3VwcG9ydHMgY29sb3I/ICovCisJCXdhdHRyc2V0KHdpbiwgc2hhZG93X2F0dHIpOworCQl3bW92ZSh3aW4sIHkgKyBoZWlnaHQsIHggKyAyKTsKKwkJZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCisJCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7CisJCWZvciAoaSA9IHkgKyAxOyBpIDwgeSArIGhlaWdodCArIDE7IGkrKykgeworCQkJd21vdmUod2luLCBpLCB4ICsgd2lkdGgpOworCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQpOworCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQpOworCQl9CisJCXdub3V0cmVmcmVzaCh3aW4pOworCX0KK30KKworLyoKKyAqICBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBhbHBoYWJldGljIGNoYXJhY3RlciBpbiBhIHN0cmluZy4KKyAqLworaW50IGZpcnN0X2FscGhhKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZXhlbXB0KQoreworCWludCBpLCBpbl9wYXJlbiA9IDAsIGM7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKHN0cmluZyk7IGkrKykgeworCQljID0gdG9sb3dlcihzdHJpbmdbaV0pOworCisJCWlmIChzdHJjaHIoIjxbKCIsIGMpKQorCQkJKytpbl9wYXJlbjsKKwkJaWYgKHN0cmNocigiPl0pIiwgYykgJiYgaW5fcGFyZW4gPiAwKQorCQkJLS1pbl9wYXJlbjsKKworCQlpZiAoKCFpbl9wYXJlbikgJiYgaXNhbHBoYShjKSAmJiBzdHJjaHIoZXhlbXB0LCBjKSA9PSAwKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cveWVzbm8uYyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjU2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cveWVzbm8uYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICB5ZXNuby5jIC0tIGltcGxlbWVudHMgdGhlIHllcy9ubyBib3gKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworLyoKKyAqIERpc3BsYXkgdGVybWluYXRpb24gYnV0dG9ucworICovCitzdGF0aWMgdm9pZCBwcmludF9idXR0b25zKFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0ZWQpCit7CisJaW50IHggPSB3aWR0aCAvIDIgLSAxMDsKKwlpbnQgeSA9IGhlaWdodCAtIDI7CisKKwlwcmludF9idXR0b24oZGlhbG9nLCAiIFllcyAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsKKwlwcmludF9idXR0b24oZGlhbG9nLCAiICBObyAgIiwgeSwgeCArIDEzLCBzZWxlY3RlZCA9PSAxKTsKKworCXdtb3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxMyAqIHNlbGVjdGVkKTsKKwl3cmVmcmVzaChkaWFsb2cpOworfQorCisvKgorICogRGlzcGxheSBhIGRpYWxvZyBib3ggd2l0aCB0d28gYnV0dG9ucyAtIFllcyBhbmQgTm8KKyAqLworaW50IGRpYWxvZ195ZXNubyhjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGksIHgsIHksIGtleSA9IDAsIGJ1dHRvbiA9IDA7CisJV0lORE9XICpkaWFsb2c7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKENPTFMgLSB3aWR0aCkgLyAyOworCXkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsIGRpYWxvZ19hdHRyLCBib3JkZXJfYXR0cik7CisJd2F0dHJzZXQoZGlhbG9nLCBib3JkZXJfYXR0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGlhbG9nX2F0dHIpOworCXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsKKworCXdhdHRyc2V0KGRpYWxvZywgZGlhbG9nX2F0dHIpOworCXByaW50X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCisJd2hpbGUgKGtleSAhPSBFU0MpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7CisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgJ1knOgorCQljYXNlICd5JzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ04nOgorCQljYXNlICduJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBUQUI6CisJCWNhc2UgS0VZX0xFRlQ6CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApID8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRvbik7CisKKwkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOworCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlICcgJzoKKwkJY2FzZSAnXG4nOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gYnV0dG9uOworCQljYXNlIEVTQzoKKwkJCWJyZWFrOworCQl9CisJfQorCisJZGVsd2luKGRpYWxvZyk7CisJcmV0dXJuIC0xOwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKaW5kZXggZDFhZDQwNS4uZDYzZDdmYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCW1lbXNldChhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCWluZGVudCA9IDA7CiAJY2hpbGRfY291bnQgPSAwOwotCWNwcmludCgiLi9zY3JpcHRzL2x4ZGlhbG9nL2x4ZGlhbG9nIik7CisJY3ByaW50KCIuL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9seGRpYWxvZyIpOwogCWNwcmludCgiLS1iYWNrdGl0bGUiKTsKIAljcHJpbnQobWVudV9iYWNrdGl0bGUpOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3V0aWwuYyBiL3NjcmlwdHMva2NvbmZpZy91dGlsLmMKaW5kZXggMWZhNGMwYi4uNjU2ZDJjOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3V0aWwuYworKysgYi9zY3JpcHRzL2tjb25maWcvdXRpbC5jCkBAIC0zMyw3ICszMyw3IEBACiAJRklMRSAqb3V0OwogCiAJaWYgKCFuYW1lKQotCQluYW1lID0gIi5jb25maWcuY21kIjsKKwkJbmFtZSA9ICIua2NvbmZpZy5kIjsKIAlvdXQgPSBmb3BlbigiLi5jb25maWcudG1wIiwgInciKTsKIAlpZiAoIW91dCkKIAkJcmV0dXJuIDE7CkBAIC0xMDEsNyArMTAxLDcgQEAKIAl2YV9lbmQoYXApOwogfQogCi0vKiBSZXRyZWl2ZSB2YWx1ZSBvZiBncm93YWJsZSBzdHJpbmcgKi8KKy8qIFJldHJpZXZlIHZhbHVlIG9mIGdyb3dhYmxlIHN0cmluZyAqLwogY29uc3QgY2hhciAqc3RyX2dldChzdHJ1Y3QgZ3N0ciAqZ3MpCiB7CiAJcmV0dXJuIGdzLT5zOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9seGRpYWxvZy9jaGVja2xpc3QuYyBiL3NjcmlwdHMvbHhkaWFsb2cvY2hlY2tsaXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYmExN2MuLjAwMDAwMDAKLS0tIGEvc2NyaXB0cy9seGRpYWxvZy9jaGVja2xpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKgotICogIGNoZWNrbGlzdC5jIC0tIGltcGxlbWVudHMgdGhlIGNoZWNrbGlzdCBib3gKLSAqCi0gKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQotICogICAgIFN0dWFydCBIZXJiZXJ0IC0gUy5IZXJiZXJ0QHNoZWZmaWVsZC5hYy51azogcmFkaW9saXN0IGV4dGVuc2lvbgotICogICAgIEFsZXNzYW5kcm8gUnViaW5pIC0gcnViaW5pQGlwdnZpcy51bmlwdi5pdDogbWVyZ2VkIHRoZSB0d28KLSAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiZGlhbG9nLmgiCi0KLXN0YXRpYyBpbnQgbGlzdF93aWR0aCwgY2hlY2tfeCwgaXRlbV94LCBjaGVja2ZsYWc7Ci0KLS8qCi0gKiBQcmludCBsaXN0IGl0ZW0KLSAqLwotc3RhdGljIHZvaWQKLXByaW50X2l0ZW0gKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqaXRlbSwgaW50IHN0YXR1cywKLQkgICAgaW50IGNob2ljZSwgaW50IHNlbGVjdGVkKQotewotICAgIGludCBpOwotCi0gICAgLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIGxhc3QgaXRlbSAqLwotICAgIHdhdHRyc2V0ICh3aW4sIG1lbnVib3hfYXR0cik7Ci0gICAgd21vdmUgKHdpbiwgY2hvaWNlLCAwKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdF93aWR0aDsgaSsrKQotCXdhZGRjaCAod2luLCAnICcpOwotCi0gICAgd21vdmUgKHdpbiwgY2hvaWNlLCBjaGVja194KTsKLSAgICB3YXR0cnNldCAod2luLCBzZWxlY3RlZCA/IGNoZWNrX3NlbGVjdGVkX2F0dHIgOiBjaGVja19hdHRyKTsKLSAgICBpZiAoY2hlY2tmbGFnID09IEZMQUdfQ0hFQ0spCi0Jd3ByaW50dyAod2luLCAiWyVjXSIsIHN0YXR1cyA/ICdYJyA6ICcgJyk7Ci0gICAgZWxzZQotCXdwcmludHcgKHdpbiwgIiglYykiLCBzdGF0dXMgPyAnWCcgOiAnICcpOwotCi0gICAgd2F0dHJzZXQgKHdpbiwgc2VsZWN0ZWQgPyB0YWdfc2VsZWN0ZWRfYXR0ciA6IHRhZ19hdHRyKTsKLSAgICBtdndhZGRjaCh3aW4sIGNob2ljZSwgaXRlbV94LCBpdGVtWzBdKTsKLSAgICB3YXR0cnNldCAod2luLCBzZWxlY3RlZCA/IGl0ZW1fc2VsZWN0ZWRfYXR0ciA6IGl0ZW1fYXR0cik7Ci0gICAgd2FkZHN0ciAod2luLCAoY2hhciAqKWl0ZW0rMSk7Ci0gICAgaWYgKHNlbGVjdGVkKSB7Ci0gICAgCXdtb3ZlICh3aW4sIGNob2ljZSwgY2hlY2tfeCsxKTsKLSAgICAJd3JlZnJlc2ggKHdpbik7Ci0gICAgfQotfQotCi0vKgotICogUHJpbnQgdGhlIHNjcm9sbCBpbmRpY2F0b3JzLgotICovCi1zdGF0aWMgdm9pZAotcHJpbnRfYXJyb3dzIChXSU5ET1cgKiB3aW4sIGludCBjaG9pY2UsIGludCBpdGVtX25vLCBpbnQgc2Nyb2xsLAotCQlpbnQgeSwgaW50IHgsIGludCBoZWlnaHQpCi17Ci0gICAgd21vdmUod2luLCB5LCB4KTsKLQotICAgIGlmIChzY3JvbGwgPiAwKSB7Ci0Jd2F0dHJzZXQgKHdpbiwgdWFycm93X2F0dHIpOwotCXdhZGRjaCAod2luLCBBQ1NfVUFSUk9XKTsKLQl3YWRkc3RyICh3aW4sICIoLSkiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0Jd2F0dHJzZXQgKHdpbiwgbWVudWJveF9hdHRyKTsKLQl3YWRkY2ggKHdpbiwgQUNTX0hMSU5FKTsKLQl3YWRkY2ggKHdpbiwgQUNTX0hMSU5FKTsKLQl3YWRkY2ggKHdpbiwgQUNTX0hMSU5FKTsKLQl3YWRkY2ggKHdpbiwgQUNTX0hMSU5FKTsKLSAgICB9Ci0KLSAgIHkgPSB5ICsgaGVpZ2h0ICsgMTsKLSAgIHdtb3ZlKHdpbiwgeSwgeCk7Ci0KLSAgIGlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGNob2ljZSA8IGl0ZW1fbm8gLSAxKSkgewotCXdhdHRyc2V0ICh3aW4sIGRhcnJvd19hdHRyKTsKLQl3YWRkY2ggKHdpbiwgQUNTX0RBUlJPVyk7Ci0Jd2FkZHN0ciAod2luLCAiKCspIik7Ci0gICAgfQotICAgIGVsc2UgewotCXdhdHRyc2V0ICh3aW4sIG1lbnVib3hfYm9yZGVyX2F0dHIpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotICAgfQotfQotCi0vKgotICogIERpc3BsYXkgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMKLSAqLwotc3RhdGljIHZvaWQKLXByaW50X2J1dHRvbnMoIFdJTkRPVyAqZGlhbG9nLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKLXsKLSAgICBpbnQgeCA9IHdpZHRoIC8gMiAtIDExOwotICAgIGludCB5ID0gaGVpZ2h0IC0gMjsKLQotICAgIHByaW50X2J1dHRvbiAoZGlhbG9nLCAiU2VsZWN0IiwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7Ci0gICAgcHJpbnRfYnV0dG9uIChkaWFsb2csICIgSGVscCAiLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOwotCi0gICAgd21vdmUoZGlhbG9nLCB5LCB4KzEgKyAxNCpzZWxlY3RlZCk7Ci0gICAgd3JlZnJlc2ggKGRpYWxvZyk7Ci19Ci0KLS8qCi0gKiBEaXNwbGF5IGEgZGlhbG9nIGJveCB3aXRoIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYKLSAqIFRoZSBgZmxhZycgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gcmFkaW9saXN0IGFuZCBjaGVja2xpc3QuCi0gKi8KLWludAotZGlhbG9nX2NoZWNrbGlzdCAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLAotCWludCBsaXN0X2hlaWdodCwgaW50IGl0ZW1fbm8sIGNvbnN0IGNoYXIgKiBjb25zdCAqIGl0ZW1zLCBpbnQgZmxhZykKLQkKLXsKLSAgICBpbnQgaSwgeCwgeSwgYm94X3gsIGJveF95OwotICAgIGludCBrZXkgPSAwLCBidXR0b24gPSAwLCBjaG9pY2UgPSAwLCBzY3JvbGwgPSAwLCBtYXhfY2hvaWNlLCAqc3RhdHVzOwotICAgIFdJTkRPVyAqZGlhbG9nLCAqbGlzdDsKLQotICAgIGNoZWNrZmxhZyA9IGZsYWc7Ci0KLSAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3Igc3RvcmluZyBpdGVtIG9uL29mZiBzdGF0dXMgKi8KLSAgICBpZiAoKHN0YXR1cyA9IG1hbGxvYyAoc2l6ZW9mIChpbnQpICogaXRlbV9ubykpID09IE5VTEwpIHsKLQllbmR3aW4gKCk7Ci0JZnByaW50ZiAoc3RkZXJyLAotCQkgIlxuQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGluIGRpYWxvZ19jaGVja2xpc3QoKS5cbiIpOwotCWV4aXQgKC0xKTsKLSAgICB9Ci0KLSAgICAvKiBJbml0aWFsaXplcyBzdGF0dXMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKSB7Ci0Jc3RhdHVzW2ldID0gIXN0cmNhc2VjbXAgKGl0ZW1zW2kgKiAzICsgMl0sICJvbiIpOwotCWlmICgoIWNob2ljZSAmJiBzdGF0dXNbaV0pIHx8ICFzdHJjYXNlY21wIChpdGVtc1tpICogMyArIDJdLCAic2VsZWN0ZWQiKSkKLSAgICAgICAgICAgIGNob2ljZSA9IGkgKyAxOwotICAgIH0KLSAgICBpZiAoY2hvaWNlKQotCSAgICBjaG9pY2UtLTsKLQotICAgIG1heF9jaG9pY2UgPSBNSU4gKGxpc3RfaGVpZ2h0LCBpdGVtX25vKTsKLQotICAgIC8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLwotICAgIHggPSAoQ09MUyAtIHdpZHRoKSAvIDI7Ci0gICAgeSA9IChMSU5FUyAtIGhlaWdodCkgLyAyOwotCi0gICAgZHJhd19zaGFkb3cgKHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7Ci0KLSAgICBkaWFsb2cgPSBuZXd3aW4gKGhlaWdodCwgd2lkdGgsIHksIHgpOwotICAgIGtleXBhZCAoZGlhbG9nLCBUUlVFKTsKLQotICAgIGRyYXdfYm94IChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsIGRpYWxvZ19hdHRyLCBib3JkZXJfYXR0cik7Ci0gICAgd2F0dHJzZXQgKGRpYWxvZywgYm9yZGVyX2F0dHIpOwotICAgIG12d2FkZGNoIChkaWFsb2csIGhlaWdodC0zLCAwLCBBQ1NfTFRFRSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQotCXdhZGRjaCAoZGlhbG9nLCBBQ1NfSExJTkUpOwotICAgIHdhdHRyc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyKTsKLSAgICB3YWRkY2ggKGRpYWxvZywgQUNTX1JURUUpOwotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwgJiYgc3RybGVuKHRpdGxlKSA+PSB3aWR0aC0yICkgewotCS8qIHRydW5jYXRlIGxvbmcgdGl0bGUgLS0gbWVjICovCi0JY2hhciAqIHRpdGxlMiA9IG1hbGxvYyh3aWR0aC0yKzEpOwotCW1lbWNweSggdGl0bGUyLCB0aXRsZSwgd2lkdGgtMiApOwotCXRpdGxlMlt3aWR0aC0yXSA9ICdcMCc7Ci0JdGl0bGUgPSB0aXRsZTI7Ci0gICAgfQotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwpIHsKLQl3YXR0cnNldCAoZGlhbG9nLCB0aXRsZV9hdHRyKTsKLQltdndhZGRjaCAoZGlhbG9nLCAwLCAod2lkdGggLSBzdHJsZW4odGl0bGUpKS8yIC0gMSwgJyAnKTsKLQl3YWRkc3RyIChkaWFsb2csIChjaGFyICopdGl0bGUpOwotCXdhZGRjaCAoZGlhbG9nLCAnICcpOwotICAgIH0KLQotICAgIHdhdHRyc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyKTsKLSAgICBwcmludF9hdXRvd3JhcCAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwgMyk7Ci0KLSAgICBsaXN0X3dpZHRoID0gd2lkdGggLSA2OwotICAgIGJveF95ID0gaGVpZ2h0IC0gbGlzdF9oZWlnaHQgLSA1OwotICAgIGJveF94ID0gKHdpZHRoIC0gbGlzdF93aWR0aCkgLyAyIC0gMTsKLQotICAgIC8qIGNyZWF0ZSBuZXcgd2luZG93IGZvciB0aGUgbGlzdCAqLwotICAgIGxpc3QgPSBzdWJ3aW4gKGRpYWxvZywgbGlzdF9oZWlnaHQsIGxpc3Rfd2lkdGgsIHkrYm94X3krMSwgeCtib3hfeCsxKTsKLQotICAgIGtleXBhZCAobGlzdCwgVFJVRSk7Ci0KLSAgICAvKiBkcmF3IGEgYm94IGFyb3VuZCB0aGUgbGlzdCBpdGVtcyAqLwotICAgIGRyYXdfYm94IChkaWFsb2csIGJveF95LCBib3hfeCwgbGlzdF9oZWlnaHQgKyAyLCBsaXN0X3dpZHRoICsgMiwKLQkgICAgICBtZW51Ym94X2JvcmRlcl9hdHRyLCBtZW51Ym94X2F0dHIpOwotCi0gICAgLyogRmluZCBsZW5ndGggb2YgbG9uZ2VzdCBpdGVtIGluIG9yZGVyIHRvIGNlbnRlciBjaGVja2xpc3QgKi8KLSAgICBjaGVja194ID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKSAKLQljaGVja194ID0gTUFYIChjaGVja194LCArIHN0cmxlbiAoaXRlbXNbaSAqIDMgKyAxXSkgKyA0KTsKLQotICAgIGNoZWNrX3ggPSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8gMjsKLSAgICBpdGVtX3ggPSBjaGVja194ICsgNDsKLQotICAgIGlmIChjaG9pY2UgPj0gbGlzdF9oZWlnaHQpIHsKLQlzY3JvbGwgPSBjaG9pY2UgLSBsaXN0X2hlaWdodCArIDE7Ci0JY2hvaWNlIC09IHNjcm9sbDsKLSAgICB9Ci0KLSAgICAvKiBQcmludCB0aGUgbGlzdCAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsKLQlwcmludF9pdGVtIChsaXN0LCBpdGVtc1soc2Nyb2xsK2kpICogMyArIDFdLAotCQkgICAgc3RhdHVzW2krc2Nyb2xsXSwgaSwgaSA9PSBjaG9pY2UpOwotICAgIH0KLQotICAgIHByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9ubywgc2Nyb2xsLAotCQkJYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKLQotICAgIHByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKLQotICAgIHdub3V0cmVmcmVzaCAobGlzdCk7Ci0gICAgd25vdXRyZWZyZXNoIChkaWFsb2cpOwotICAgIGRvdXBkYXRlICgpOwotCi0gICAgd2hpbGUgKGtleSAhPSBFU0MpIHsKLQlrZXkgPSB3Z2V0Y2ggKGRpYWxvZyk7Ci0KLSAgICAJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykKLSAgICAgICAgICAgIGlmICh0b3VwcGVyKGtleSkgPT0gdG91cHBlcihpdGVtc1soc2Nyb2xsK2kpKjMrMV1bMF0pKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0KLQlpZiAoIGkgPCBtYXhfY2hvaWNlIHx8IGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dOIHx8IAotCSAgICBrZXkgPT0gJysnIHx8IGtleSA9PSAnLScgKSB7Ci0JICAgIGlmIChrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSAnLScpIHsKLQkJaWYgKCFjaG9pY2UpIHsKLQkJICAgIGlmICghc2Nyb2xsKQotCQkJY29udGludWU7Ci0JCSAgICAvKiBTY3JvbGwgbGlzdCBkb3duICovCi0JCSAgICBpZiAobGlzdF9oZWlnaHQgPiAxKSB7Ci0JCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBmaXJzdCBpdGVtICovCi0JCQlwcmludF9pdGVtIChsaXN0LCBpdGVtc1tzY3JvbGwgKiAzICsgMV0sCi0JCQkJCXN0YXR1c1tzY3JvbGxdLCAwLCBGQUxTRSk7Ci0JCQlzY3JvbGxvayAobGlzdCwgVFJVRSk7Ci0JCQl3c2NybCAobGlzdCwgLTEpOwotCQkJc2Nyb2xsb2sgKGxpc3QsIEZBTFNFKTsKLQkJICAgIH0KLQkJICAgIHNjcm9sbC0tOwotCQkgICAgcHJpbnRfaXRlbSAobGlzdCwgaXRlbXNbc2Nyb2xsICogMyArIDFdLAotCQkJCXN0YXR1c1tzY3JvbGxdLCAwLCBUUlVFKTsKLQkJICAgIHdub3V0cmVmcmVzaCAobGlzdCk7Ci0KLSAgICAJCSAgICBwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fbm8sIHNjcm9sbCwKLQkJCQlib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOwotCi0JCSAgICB3cmVmcmVzaCAoZGlhbG9nKTsKLQotCQkgICAgY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCi0JCX0gZWxzZQotCQkgICAgaSA9IGNob2ljZSAtIDE7Ci0JICAgIH0gZWxzZSBpZiAoa2V5ID09IEtFWV9ET1dOIHx8IGtleSA9PSAnKycpIHsKLQkJaWYgKGNob2ljZSA9PSBtYXhfY2hvaWNlIC0gMSkgewotCQkgICAgaWYgKHNjcm9sbCArIGNob2ljZSA+PSBpdGVtX25vIC0gMSkKLQkJCWNvbnRpbnVlOwotCQkgICAgLyogU2Nyb2xsIGxpc3QgdXAgKi8KLQkJICAgIGlmIChsaXN0X2hlaWdodCA+IDEpIHsKLQkJCS8qIERlLWhpZ2hsaWdodCBjdXJyZW50IGxhc3QgaXRlbSBiZWZvcmUgc2Nyb2xsaW5nIHVwICovCi0JCQlwcmludF9pdGVtIChsaXN0LCBpdGVtc1soc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpICogMyArIDFdLAotCQkJCSAgICBzdGF0dXNbc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDFdLAotCQkJCSAgICBtYXhfY2hvaWNlIC0gMSwgRkFMU0UpOwotCQkJc2Nyb2xsb2sgKGxpc3QsIFRSVUUpOwotCQkJd3NjcmwgKGxpc3QsIDEpOwotCQkJc2Nyb2xsb2sgKGxpc3QsIEZBTFNFKTsKLQkJICAgIH0KLQkJICAgIHNjcm9sbCsrOwotCQkgICAgcHJpbnRfaXRlbSAobGlzdCwgaXRlbXNbKHNjcm9sbCArIG1heF9jaG9pY2UgLSAxKSAqIDMgKyAxXSwKLQkJCQlzdGF0dXNbc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDFdLAotCQkJCW1heF9jaG9pY2UgLSAxLCBUUlVFKTsKLQkJICAgIHdub3V0cmVmcmVzaCAobGlzdCk7Ci0KLSAgICAJCSAgICBwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fbm8sIHNjcm9sbCwKLQkJCQlib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOwotCi0JCSAgICB3cmVmcmVzaCAoZGlhbG9nKTsKLQotCQkgICAgY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCi0JCX0gZWxzZQotCQkgICAgaSA9IGNob2ljZSArIDE7Ci0JICAgIH0KLQkgICAgaWYgKGkgIT0gY2hvaWNlKSB7Ci0JCS8qIERlLWhpZ2hsaWdodCBjdXJyZW50IGl0ZW0gKi8KLQkJcHJpbnRfaXRlbSAobGlzdCwgaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAzICsgMV0sCi0JCQkgICAgc3RhdHVzW3Njcm9sbCArIGNob2ljZV0sIGNob2ljZSwgRkFMU0UpOwotCQkvKiBIaWdobGlnaHQgbmV3IGl0ZW0gKi8KLQkJY2hvaWNlID0gaTsKLQkJcHJpbnRfaXRlbSAobGlzdCwgaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAzICsgMV0sCi0JCQkgICAgc3RhdHVzW3Njcm9sbCArIGNob2ljZV0sIGNob2ljZSwgVFJVRSk7Ci0JCXdub3V0cmVmcmVzaCAobGlzdCk7Ci0JCXdyZWZyZXNoIChkaWFsb2cpOwotCSAgICB9Ci0JICAgIGNvbnRpbnVlOwkJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KLQl9Ci0Jc3dpdGNoIChrZXkpIHsKLQljYXNlICdIJzoKLQljYXNlICdoJzoKLQljYXNlICc/JzoKLQkgICAgZnByaW50ZiAoc3RkZXJyLCAiJXMiLCBpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDNdKTsKLQkgICAgZGVsd2luIChkaWFsb2cpOwotCSAgICBmcmVlIChzdGF0dXMpOwotCSAgICByZXR1cm4gMTsKLQljYXNlIFRBQjoKLQljYXNlIEtFWV9MRUZUOgotCWNhc2UgS0VZX1JJR0hUOgotCSAgICBidXR0b24gPSAoKGtleSA9PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDogKytidXR0b24pIDwgMCkKLQkJCT8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRvbik7Ci0KLQkgICAgcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIGJ1dHRvbik7Ci0JICAgIHdyZWZyZXNoIChkaWFsb2cpOwotCSAgICBicmVhazsKLQljYXNlICdTJzoKLQljYXNlICdzJzoKLQljYXNlICcgJzoKLQljYXNlICdcbic6Ci0JICAgIGlmICghYnV0dG9uKSB7Ci0JCWlmIChmbGFnID09IEZMQUdfQ0hFQ0spIHsKLQkJICAgIHN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdID0gIXN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdOwotCQkgICAgd21vdmUgKGxpc3QsIGNob2ljZSwgY2hlY2tfeCk7Ci0JCSAgICB3YXR0cnNldCAobGlzdCwgY2hlY2tfc2VsZWN0ZWRfYXR0cik7Ci0JCSAgICB3cHJpbnR3IChsaXN0LCAiWyVjXSIsIHN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdID8gJ1gnIDogJyAnKTsKLQkJfSBlbHNlIHsKLQkJICAgIGlmICghc3RhdHVzW3Njcm9sbCArIGNob2ljZV0pIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBpdGVtX25vOyBpKyspCi0JCQkgICAgc3RhdHVzW2ldID0gMDsKLQkJCXN0YXR1c1tzY3JvbGwgKyBjaG9pY2VdID0gMTsKLQkJCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspCi0JCQkgICAgcHJpbnRfaXRlbSAobGlzdCwgaXRlbXNbKHNjcm9sbCArIGkpICogMyArIDFdLAotCQkJCQlzdGF0dXNbc2Nyb2xsICsgaV0sIGksIGkgPT0gY2hvaWNlKTsKLQkJICAgIH0KLQkJfQotCQl3bm91dHJlZnJlc2ggKGxpc3QpOwotCQl3cmVmcmVzaCAoZGlhbG9nKTsKLSAgICAgICAgICAgIAotCQlmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKSB7Ci0JCSAgICBpZiAoc3RhdHVzW2ldKSB7Ci0JCQlpZiAoZmxhZyA9PSBGTEFHX0NIRUNLKSB7Ci0JCQkgICAgZnByaW50ZiAoc3RkZXJyLCAiXCIlc1wiICIsIGl0ZW1zW2kgKiAzXSk7Ci0JCQl9IGVsc2UgewotCQkJICAgIGZwcmludGYgKHN0ZGVyciwgIiVzIiwgaXRlbXNbaSAqIDNdKTsKLQkJCX0KLQotCQkgICAgfQotCQl9Ci0gICAgICAgICAgICB9IGVsc2UKLQkJZnByaW50ZiAoc3RkZXJyLCAiJXMiLCBpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDNdKTsKLQkgICAgZGVsd2luIChkaWFsb2cpOwotCSAgICBmcmVlIChzdGF0dXMpOwotCSAgICByZXR1cm4gYnV0dG9uOwotCWNhc2UgJ1gnOgotCWNhc2UgJ3gnOgotCSAgICBrZXkgPSBFU0M7Ci0JY2FzZSBFU0M6Ci0JICAgIGJyZWFrOwotCX0KLQotCS8qIE5vdywgdXBkYXRlIGV2ZXJ5dGhpbmcuLi4gKi8KLQlkb3VwZGF0ZSAoKTsKLSAgICB9Ci0gICAgCi0KLSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0gICAgZnJlZSAoc3RhdHVzKTsKLSAgICByZXR1cm4gLTE7CQkJLyogRVNDIHByZXNzZWQgKi8KLX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbHhkaWFsb2cvaW5wdXRib3guYyBiL3NjcmlwdHMvbHhkaWFsb2cvaW5wdXRib3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc0ZDJkNi4uMDAwMDAwMAotLS0gYS9zY3JpcHRzL2x4ZGlhbG9nL2lucHV0Ym94LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSAqICBpbnB1dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIGlucHV0IGJveAotICoKLSAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCi0gKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImRpYWxvZy5oIgotCi1jaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbTUFYX0xFTiArIDFdOwotCi0vKgotICogIFByaW50IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zCi0gKi8KLXN0YXRpYyB2b2lkCi1wcmludF9idXR0b25zKFdJTkRPVyAqZGlhbG9nLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKLXsKLSAgICBpbnQgeCA9IHdpZHRoIC8gMiAtIDExOwotICAgIGludCB5ID0gaGVpZ2h0IC0gMjsKLQotICAgIHByaW50X2J1dHRvbiAoZGlhbG9nLCAiICBPayAgIiwgeSwgeCwgc2VsZWN0ZWQ9PTApOwotICAgIHByaW50X2J1dHRvbiAoZGlhbG9nLCAiIEhlbHAgIiwgeSwgeCArIDE0LCBzZWxlY3RlZD09MSk7Ci0KLSAgICB3bW92ZShkaWFsb2csIHksIHgrMSsxNCpzZWxlY3RlZCk7Ci0gICAgd3JlZnJlc2goZGlhbG9nKTsKLX0KLQotLyoKLSAqIERpc3BsYXkgYSBkaWFsb2cgYm94IGZvciBpbnB1dGluZyBhIHN0cmluZwotICovCi1pbnQKLWRpYWxvZ19pbnB1dGJveCAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLAotCQkgY29uc3QgY2hhciAqaW5pdCkKLXsKLSAgICBpbnQgaSwgeCwgeSwgYm94X3ksIGJveF94LCBib3hfd2lkdGg7Ci0gICAgaW50IGlucHV0X3ggPSAwLCBzY3JvbGwgPSAwLCBrZXkgPSAwLCBidXR0b24gPSAtMTsKLSAgICBjaGFyICppbnN0ciA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7Ci0gICAgV0lORE9XICpkaWFsb2c7Ci0KLSAgICAvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KLSAgICB4ID0gKENPTFMgLSB3aWR0aCkgLyAyOwotICAgIHkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsKLQotCi0gICAgZHJhd19zaGFkb3cgKHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7Ci0KLSAgICBkaWFsb2cgPSBuZXd3aW4gKGhlaWdodCwgd2lkdGgsIHksIHgpOwotICAgIGtleXBhZCAoZGlhbG9nLCBUUlVFKTsKLQotICAgIGRyYXdfYm94IChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsIGRpYWxvZ19hdHRyLCBib3JkZXJfYXR0cik7Ci0gICAgd2F0dHJzZXQgKGRpYWxvZywgYm9yZGVyX2F0dHIpOwotICAgIG12d2FkZGNoIChkaWFsb2csIGhlaWdodC0zLCAwLCBBQ1NfTFRFRSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQotCXdhZGRjaCAoZGlhbG9nLCBBQ1NfSExJTkUpOwotICAgIHdhdHRyc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyKTsKLSAgICB3YWRkY2ggKGRpYWxvZywgQUNTX1JURUUpOwotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwgJiYgc3RybGVuKHRpdGxlKSA+PSB3aWR0aC0yICkgewotCS8qIHRydW5jYXRlIGxvbmcgdGl0bGUgLS0gbWVjICovCi0JY2hhciAqIHRpdGxlMiA9IG1hbGxvYyh3aWR0aC0yKzEpOwotCW1lbWNweSggdGl0bGUyLCB0aXRsZSwgd2lkdGgtMiApOwotCXRpdGxlMlt3aWR0aC0yXSA9ICdcMCc7Ci0JdGl0bGUgPSB0aXRsZTI7Ci0gICAgfQotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwpIHsKLQl3YXR0cnNldCAoZGlhbG9nLCB0aXRsZV9hdHRyKTsKLQltdndhZGRjaCAoZGlhbG9nLCAwLCAod2lkdGggLSBzdHJsZW4odGl0bGUpKS8yIC0gMSwgJyAnKTsKLQl3YWRkc3RyIChkaWFsb2csIChjaGFyICopdGl0bGUpOwotCXdhZGRjaCAoZGlhbG9nLCAnICcpOwotICAgIH0KLQotICAgIHdhdHRyc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyKTsKLSAgICBwcmludF9hdXRvd3JhcCAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwgMyk7Ci0KLSAgICAvKiBEcmF3IHRoZSBpbnB1dCBmaWVsZCBib3ggKi8KLSAgICBib3hfd2lkdGggPSB3aWR0aCAtIDY7Ci0gICAgZ2V0eXggKGRpYWxvZywgeSwgeCk7Ci0gICAgYm94X3kgPSB5ICsgMjsKLSAgICBib3hfeCA9ICh3aWR0aCAtIGJveF93aWR0aCkgLyAyOwotICAgIGRyYXdfYm94IChkaWFsb2csIHkgKyAxLCBib3hfeCAtIDEsIDMsIGJveF93aWR0aCArIDIsCi0JICAgICAgYm9yZGVyX2F0dHIsIGRpYWxvZ19hdHRyKTsKLQotICAgIHByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKLQotICAgIC8qIFNldCB1cCB0aGUgaW5pdGlhbCB2YWx1ZSAqLwotICAgIHdtb3ZlIChkaWFsb2csIGJveF95LCBib3hfeCk7Ci0gICAgd2F0dHJzZXQgKGRpYWxvZywgaW5wdXRib3hfYXR0cik7Ci0KLSAgICBpZiAoIWluaXQpCi0JaW5zdHJbMF0gPSAnXDAnOwotICAgIGVsc2UKLQlzdHJjcHkgKGluc3RyLCBpbml0KTsKLQotICAgIGlucHV0X3ggPSBzdHJsZW4gKGluc3RyKTsKLQotICAgIGlmIChpbnB1dF94ID49IGJveF93aWR0aCkgewotCXNjcm9sbCA9IGlucHV0X3ggLSBib3hfd2lkdGggKyAxOwotCWlucHV0X3ggPSBib3hfd2lkdGggLSAxOwotCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGggLSAxOyBpKyspCi0JICAgIHdhZGRjaCAoZGlhbG9nLCBpbnN0cltzY3JvbGwgKyBpXSk7Ci0gICAgfSBlbHNlCi0Jd2FkZHN0ciAoZGlhbG9nLCBpbnN0cik7Ci0KLSAgICB3bW92ZSAoZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsKLQotICAgIHdyZWZyZXNoIChkaWFsb2cpOwotCi0gICAgd2hpbGUgKGtleSAhPSBFU0MpIHsKLQlrZXkgPSB3Z2V0Y2ggKGRpYWxvZyk7Ci0KLQlpZiAoYnV0dG9uID09IC0xKSB7CS8qIElucHV0IGJveCBzZWxlY3RlZCAqLwotCSAgICBzd2l0Y2ggKGtleSkgewotCSAgICBjYXNlIFRBQjoKLQkgICAgY2FzZSBLRVlfVVA6Ci0JICAgIGNhc2UgS0VZX0RPV046Ci0JCWJyZWFrOwotCSAgICBjYXNlIEtFWV9MRUZUOgotCQljb250aW51ZTsKLQkgICAgY2FzZSBLRVlfUklHSFQ6Ci0JCWNvbnRpbnVlOwotCSAgICBjYXNlIEtFWV9CQUNLU1BBQ0U6Ci0JICAgIGNhc2UgMTI3OgotCQlpZiAoaW5wdXRfeCB8fCBzY3JvbGwpIHsKLQkJICAgIHdhdHRyc2V0IChkaWFsb2csIGlucHV0Ym94X2F0dHIpOwotCQkgICAgaWYgKCFpbnB1dF94KSB7Ci0JCQlzY3JvbGwgPSBzY3JvbGwgPCBib3hfd2lkdGggLSAxID8KLQkJCSAgICAwIDogc2Nyb2xsIC0gKGJveF93aWR0aCAtIDEpOwotCQkJd21vdmUgKGRpYWxvZywgYm94X3ksIGJveF94KTsKLQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykKLQkJCSAgICB3YWRkY2ggKGRpYWxvZywgaW5zdHJbc2Nyb2xsICsgaW5wdXRfeCArIGldID8KLQkJCQkgICAgaW5zdHJbc2Nyb2xsICsgaW5wdXRfeCArIGldIDogJyAnKTsKLQkJCWlucHV0X3ggPSBzdHJsZW4gKGluc3RyKSAtIHNjcm9sbDsKLQkJICAgIH0gZWxzZQotCQkJaW5wdXRfeC0tOwotCQkgICAgaW5zdHJbc2Nyb2xsICsgaW5wdXRfeF0gPSAnXDAnOwotCQkgICAgbXZ3YWRkY2ggKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCwgJyAnKTsKLQkJICAgIHdtb3ZlIChkaWFsb2csIGJveF95LCBpbnB1dF94ICsgYm94X3gpOwotCQkgICAgd3JlZnJlc2ggKGRpYWxvZyk7Ci0JCX0KLQkJY29udGludWU7Ci0JICAgIGRlZmF1bHQ6Ci0JCWlmIChrZXkgPCAweDEwMCAmJiBpc3ByaW50IChrZXkpKSB7Ci0JCSAgICBpZiAoc2Nyb2xsICsgaW5wdXRfeCA8IE1BWF9MRU4pIHsKLQkJCXdhdHRyc2V0IChkaWFsb2csIGlucHV0Ym94X2F0dHIpOwotCQkJaW5zdHJbc2Nyb2xsICsgaW5wdXRfeF0gPSBrZXk7Ci0JCQlpbnN0cltzY3JvbGwgKyBpbnB1dF94ICsgMV0gPSAnXDAnOwotCQkJaWYgKGlucHV0X3ggPT0gYm94X3dpZHRoIC0gMSkgewotCQkJICAgIHNjcm9sbCsrOwotCQkJICAgIHdtb3ZlIChkaWFsb2csIGJveF95LCBib3hfeCk7Ci0JCQkgICAgZm9yIChpID0gMDsgaSA8IGJveF93aWR0aCAtIDE7IGkrKykKLQkJCQl3YWRkY2ggKGRpYWxvZywgaW5zdHJbc2Nyb2xsICsgaV0pOwotCQkJfSBlbHNlIHsKLQkJCSAgICB3bW92ZSAoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCsrICsgYm94X3gpOwotCQkJICAgIHdhZGRjaCAoZGlhbG9nLCBrZXkpOwotCQkJfQotCQkJd3JlZnJlc2ggKGRpYWxvZyk7Ci0JCSAgICB9IGVsc2UKLQkJCWZsYXNoICgpOwkvKiBBbGFybSB1c2VyIGFib3V0IG92ZXJmbG93ICovCi0JCSAgICBjb250aW51ZTsKLQkJfQotCSAgICB9Ci0JfQotCXN3aXRjaCAoa2V5KSB7Ci0JY2FzZSAnTyc6Ci0JY2FzZSAnbyc6Ci0JICAgIGRlbHdpbiAoZGlhbG9nKTsKLQkgICAgcmV0dXJuIDA7Ci0JY2FzZSAnSCc6Ci0JY2FzZSAnaCc6Ci0JICAgIGRlbHdpbiAoZGlhbG9nKTsKLQkgICAgcmV0dXJuIDE7Ci0JY2FzZSBLRVlfVVA6Ci0JY2FzZSBLRVlfTEVGVDoKLQkgICAgc3dpdGNoIChidXR0b24pIHsKLQkgICAgY2FzZSAtMToKLQkJYnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJDYW5jZWwiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLwotCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMSk7Ci0JCWJyZWFrOwotCSAgICBjYXNlIDA6Ci0JCWJ1dHRvbiA9IC0xOwkvKiBJbmRpY2F0ZXMgaW5wdXQgYm94IGlzIHNlbGVjdGVkICovCi0JCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKLQkJd21vdmUgKGRpYWxvZywgYm94X3ksIGJveF94ICsgaW5wdXRfeCk7Ci0JCXdyZWZyZXNoIChkaWFsb2cpOwotCQlicmVhazsKLQkgICAgY2FzZSAxOgotCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KLQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwotCQlicmVhazsKLQkgICAgfQotCSAgICBicmVhazsKLQljYXNlIFRBQjoKLQljYXNlIEtFWV9ET1dOOgotCWNhc2UgS0VZX1JJR0hUOgotCSAgICBzd2l0Y2ggKGJ1dHRvbikgewotCSAgICBjYXNlIC0xOgotCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KLQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwotCQlicmVhazsKLQkgICAgY2FzZSAwOgotCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkNhbmNlbCIgYnV0dG9uIGlzIHNlbGVjdGVkICovCi0JCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAxKTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgMToKLQkJYnV0dG9uID0gLTE7CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8KLQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwotCQl3bW92ZSAoZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsKLQkJd3JlZnJlc2ggKGRpYWxvZyk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCWNhc2UgJyAnOgotCWNhc2UgJ1xuJzoKLQkgICAgZGVsd2luIChkaWFsb2cpOwotCSAgICByZXR1cm4gKGJ1dHRvbiA9PSAtMSA/IDAgOiBidXR0b24pOwotCWNhc2UgJ1gnOgotCWNhc2UgJ3gnOgotCSAgICBrZXkgPSBFU0M7Ci0JY2FzZSBFU0M6Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0KLSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0gICAgcmV0dXJuIC0xOwkJCS8qIEVTQyBwcmVzc2VkICovCi19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2x4ZGlhbG9nL2x4ZGlhbG9nLmMgYi9zY3JpcHRzL2x4ZGlhbG9nL2x4ZGlhbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyODNhODUuLjAwMDAwMDAKLS0tIGEvc2NyaXB0cy9seGRpYWxvZy9seGRpYWxvZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qCi0gKiAgZGlhbG9nIC0gRGlzcGxheSBzaW1wbGUgZGlhbG9nIGJveGVzIGZyb20gc2hlbGwgc2NyaXB0cwotICoKLSAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCi0gKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImRpYWxvZy5oIgotCi1zdGF0aWMgdm9pZCBVc2FnZSAoY29uc3QgY2hhciAqbmFtZSk7Ci0KLXR5cGVkZWYgaW50IChqdW1wZXJGbikgKGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICogYXJndik7Ci0KLXN0cnVjdCBNb2RlIHsKLSAgICBjaGFyICpuYW1lOwotICAgIGludCBhcmdtaW4sIGFyZ21heCwgYXJnbW9kOwotICAgIGp1bXBlckZuICpqdW1wZXI7Ci19OwotCi1qdW1wZXJGbiBqX21lbnUsIGpfY2hlY2tsaXN0LCBqX3JhZGlvbGlzdCwgal95ZXNubywgal90ZXh0Ym94LCBqX2lucHV0Ym94OwotanVtcGVyRm4gal9tc2dib3gsIGpfaW5mb2JveDsKLQotc3RhdGljIHN0cnVjdCBNb2RlIG1vZGVzW10gPQotewotICAgIHsiLS1tZW51IiwgOSwgMCwgMywgal9tZW51fSwKLSAgICB7Ii0tY2hlY2tsaXN0IiwgOSwgMCwgMywgal9jaGVja2xpc3R9LAotICAgIHsiLS1yYWRpb2xpc3QiLCA5LCAwLCAzLCBqX3JhZGlvbGlzdH0sCi0gICAgeyItLXllc25vIiwgICAgNSw1LDEsIGpfeWVzbm99LAotICAgIHsiLS10ZXh0Ym94IiwgIDUsNSwxLCBqX3RleHRib3h9LAotICAgIHsiLS1pbnB1dGJveCIsIDUsIDYsIDEsIGpfaW5wdXRib3h9LAotICAgIHsiLS1tc2dib3giLCA1LCA1LCAxLCBqX21zZ2JveH0sCi0gICAgeyItLWluZm9ib3giLCA1LCA1LCAxLCBqX2luZm9ib3h9LAotICAgIHtOVUxMLCAwLCAwLCAwLCBOVUxMfQotfTsKLQotc3RhdGljIHN0cnVjdCBNb2RlICptb2RlUHRyOwotCi0jaWZkZWYgTE9DQUxFCi0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jZW5kaWYKLQotaW50Ci1tYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICogYXJndikKLXsKLSAgICBpbnQgb2Zmc2V0ID0gMCwgb3B0X2NsZWFyID0gMCwgZW5kX2NvbW1vbl9vcHRzID0gMCwgcmV0dmFsOwotICAgIGNvbnN0IGNoYXIgKnRpdGxlID0gTlVMTDsKLQotI2lmZGVmIExPQ0FMRQotICAgICh2b2lkKSBzZXRsb2NhbGUgKExDX0FMTCwgIiIpOwotI2VuZGlmCi0KLSNpZmRlZiBUUkFDRQotICAgIHRyYWNlKFRSQUNFX0NBTExTfFRSQUNFX1VQREFURSk7Ci0jZW5kaWYKLSAgICBpZiAoYXJnYyA8IDIpIHsKLQlVc2FnZSAoYXJndlswXSk7Ci0JZXhpdCAoLTEpOwotICAgIH0KLQotICAgIHdoaWxlIChvZmZzZXQgPCBhcmdjIC0gMSAmJiAhZW5kX2NvbW1vbl9vcHRzKSB7CS8qIENvbW1vbiBvcHRpb25zICovCi0JaWYgKCFzdHJjbXAgKGFyZ3Zbb2Zmc2V0ICsgMV0sICItLXRpdGxlIikpIHsKLQkgICAgaWYgKGFyZ2MgLSBvZmZzZXQgPCAzIHx8IHRpdGxlICE9IE5VTEwpIHsKLQkJVXNhZ2UgKGFyZ3ZbMF0pOwotCQlleGl0ICgtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCXRpdGxlID0gYXJndltvZmZzZXQgKyAyXTsKLQkJb2Zmc2V0ICs9IDI7Ci0JICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghc3RyY21wIChhcmd2W29mZnNldCArIDFdLCAiLS1iYWNrdGl0bGUiKSkgewotICAgICAgICAgICAgaWYgKGJhY2t0aXRsZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgVXNhZ2UgKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGV4aXQgKC0xKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYmFja3RpdGxlID0gYXJndltvZmZzZXQgKyAyXTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjsKLSAgICAgICAgICAgIH0KLQl9IGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3Zbb2Zmc2V0ICsgMV0sICItLWNsZWFyIikpIHsKLQkgICAgaWYgKG9wdF9jbGVhcikgewkJLyogSGV5LCAiLS1jbGVhciIgY2FuJ3QgYXBwZWFyIHR3aWNlISAqLwotCQlVc2FnZSAoYXJndlswXSk7Ci0JCWV4aXQgKC0xKTsKLQkgICAgfSBlbHNlIGlmIChhcmdjID09IDIpIHsJLyogd2Ugb25seSB3YW50IHRvIGNsZWFyIHRoZSBzY3JlZW4gKi8KLQkJaW5pdF9kaWFsb2cgKCk7Ci0JCXJlZnJlc2ggKCk7CS8qIGluaXRfZGlhbG9nKCkgd2lsbCBjbGVhciB0aGUgc2NyZWVuIGZvciB1cyAqLwotCQllbmRfZGlhbG9nICgpOwotCQlyZXR1cm4gMDsKLQkgICAgfSBlbHNlIHsKLQkJb3B0X2NsZWFyID0gMTsKLQkJb2Zmc2V0Kys7Ci0JICAgIH0KLQl9IGVsc2UJCQkvKiBubyBtb3JlIGNvbW1vbiBvcHRpb25zICovCi0JICAgIGVuZF9jb21tb25fb3B0cyA9IDE7Ci0gICAgfQotCi0gICAgaWYgKGFyZ2MgLSAxID09IG9mZnNldCkgewkvKiBubyBtb3JlIG9wdGlvbnMgKi8KLQlVc2FnZSAoYXJndlswXSk7Ci0JZXhpdCAoLTEpOwotICAgIH0KLSAgICAvKiB1c2UgYSB0YWJsZSB0byBsb29rIGZvciB0aGUgcmVxdWVzdGVkIG1vZGUsIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24gKi8KLQotICAgIGZvciAobW9kZVB0ciA9IG1vZGVzOyBtb2RlUHRyLT5uYW1lOyBtb2RlUHRyKyspCS8qIGxvb2sgZm9yIHRoZSBtb2RlICovCi0JaWYgKCFzdHJjbXAgKGFyZ3Zbb2Zmc2V0ICsgMV0sIG1vZGVQdHItPm5hbWUpKQotCSAgICBicmVhazsKLQotICAgIGlmICghbW9kZVB0ci0+bmFtZSkKLQlVc2FnZSAoYXJndlswXSk7Ci0gICAgaWYgKGFyZ2MgLSBvZmZzZXQgPCBtb2RlUHRyLT5hcmdtaW4pCi0JVXNhZ2UgKGFyZ3ZbMF0pOwotICAgIGlmIChtb2RlUHRyLT5hcmdtYXggJiYgYXJnYyAtIG9mZnNldCA+IG1vZGVQdHItPmFyZ21heCkKLQlVc2FnZSAoYXJndlswXSk7Ci0KLQotCi0gICAgaW5pdF9kaWFsb2cgKCk7Ci0gICAgcmV0dmFsID0gKCoobW9kZVB0ci0+anVtcGVyKSkgKHRpdGxlLCBhcmdjIC0gb2Zmc2V0LCBhcmd2ICsgb2Zmc2V0KTsKLQotICAgIGlmIChvcHRfY2xlYXIpIHsJCS8qIGNsZWFyIHNjcmVlbiBiZWZvcmUgZXhpdCAqLwotCWF0dHJfY2xlYXIgKHN0ZHNjciwgTElORVMsIENPTFMsIHNjcmVlbl9hdHRyKTsKLQlyZWZyZXNoICgpOwotICAgIH0KLSAgICBlbmRfZGlhbG9nKCk7Ci0KLSAgICBleGl0IChyZXR2YWwpOwotfQotCi0vKgotICogUHJpbnQgcHJvZ3JhbSB1c2FnZQotICovCi1zdGF0aWMgdm9pZAotVXNhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAiXAotXG5kaWFsb2csIGJ5IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspLlwKLVxuICBwYXRjaGVkIGJ5IFN0dWFydCBIZXJiZXJ0IChTLkhlcmJlcnRAc2hlZi5hYy51aylcCi1cbiAgbW9kaWZpZWQvZ3V0dGVkIGZvciB1c2UgYXMgYSBMaW51eCBrZXJuZWwgY29uZmlnIHRvb2wgYnkgXAotXG4gIFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcHdAY2Z3LmNvbSlcCi1cblwKLVxuKiBEaXNwbGF5IGRpYWxvZyBib3hlcyBmcm9tIHNoZWxsIHNjcmlwdHMgKlwKLVxuXAotXG5Vc2FnZTogJXMgLS1jbGVhclwKLVxuICAgICAgICVzIFstLXRpdGxlIDx0aXRsZT5dIFstLWJhY2t0aXRsZSA8YmFja3RpdGxlPl0gLS1jbGVhciA8Qm94IG9wdGlvbnM+XAotXG5cCi1cbkJveCBvcHRpb25zOlwKLVxuXAotXG4gIC0tbWVudSAgICAgIDx0ZXh0PiA8aGVpZ2h0PiA8d2lkdGg+IDxtZW51IGhlaWdodD4gPHRhZzE+IDxpdGVtMT4uLi5cCi1cbiAgLS1jaGVja2xpc3QgPHRleHQ+IDxoZWlnaHQ+IDx3aWR0aD4gPGxpc3QgaGVpZ2h0PiA8dGFnMT4gPGl0ZW0xPiA8c3RhdHVzMT4uLi5cCi1cbiAgLS1yYWRpb2xpc3QgPHRleHQ+IDxoZWlnaHQ+IDx3aWR0aD4gPGxpc3QgaGVpZ2h0PiA8dGFnMT4gPGl0ZW0xPiA8c3RhdHVzMT4uLi5cCi1cbiAgLS10ZXh0Ym94ICAgPGZpbGU+IDxoZWlnaHQ+IDx3aWR0aD5cCi1cbiAgLS1pbnB1dGJveCAgPHRleHQ+IDxoZWlnaHQ+IDx3aWR0aD4gWzxpbml0Pl1cCi1cbiAgLS15ZXNubyAgICAgPHRleHQ+IDxoZWlnaHQ+IDx3aWR0aD5cCi1cbiIsIG5hbWUsIG5hbWUpOwotICAgIGV4aXQgKC0xKTsKLX0KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgcHJvZ3JhbSBqdW1wZXJzCi0gKi8KLQotaW50Ci1qX21lbnUgKGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqIGNvbnN0ICogYXYpCi17Ci0gICAgcmV0dXJuIGRpYWxvZ19tZW51ICh0LCBhdlsyXSwgYXRvaSAoYXZbM10pLCBhdG9pIChhdls0XSksCi0JCQlhdG9pIChhdls1XSksIGF2WzZdLCAoYWMgLSA2KSAvIDIsIGF2ICsgNyk7Ci19Ci0KLWludAotal9jaGVja2xpc3QgKGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqIGNvbnN0ICogYXYpCi17Ci0gICAgcmV0dXJuIGRpYWxvZ19jaGVja2xpc3QgKHQsIGF2WzJdLCBhdG9pIChhdlszXSksIGF0b2kgKGF2WzRdKSwKLQlhdG9pIChhdls1XSksIChhYyAtIDYpIC8gMywgYXYgKyA2LCBGTEFHX0NIRUNLKTsKLX0KLQotaW50Ci1qX3JhZGlvbGlzdCAoY29uc3QgY2hhciAqdCwgaW50IGFjLCBjb25zdCBjaGFyICogY29uc3QgKiBhdikKLXsKLSAgICByZXR1cm4gZGlhbG9nX2NoZWNrbGlzdCAodCwgYXZbMl0sIGF0b2kgKGF2WzNdKSwgYXRvaSAoYXZbNF0pLAotCWF0b2kgKGF2WzVdKSwgKGFjIC0gNikgLyAzLCBhdiArIDYsIEZMQUdfUkFESU8pOwotfQotCi1pbnQKLWpfdGV4dGJveCAoY29uc3QgY2hhciAqdCwgaW50IGFjLCBjb25zdCBjaGFyICogY29uc3QgKiBhdikKLXsKLSAgICByZXR1cm4gZGlhbG9nX3RleHRib3ggKHQsIGF2WzJdLCBhdG9pIChhdlszXSksIGF0b2kgKGF2WzRdKSk7Ci19Ci0KLWludAotal95ZXNubyAoY29uc3QgY2hhciAqdCwgaW50IGFjLCBjb25zdCBjaGFyICogY29uc3QgKiBhdikKLXsKLSAgICByZXR1cm4gZGlhbG9nX3llc25vICh0LCBhdlsyXSwgYXRvaSAoYXZbM10pLCBhdG9pIChhdls0XSkpOwotfQotCi1pbnQKLWpfaW5wdXRib3ggKGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqIGNvbnN0ICogYXYpCi17Ci0gICAgaW50IHJldCA9IGRpYWxvZ19pbnB1dGJveCAodCwgYXZbMl0sIGF0b2kgKGF2WzNdKSwgYXRvaSAoYXZbNF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjID09IDYgPyBhdls1XSA6IChjaGFyICopIE5VTEwpOwotICAgIGlmIChyZXQgPT0gMCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIGRpYWxvZ19pbnB1dF9yZXN1bHQpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLWludAotal9tc2dib3ggKGNvbnN0IGNoYXIgKnQsIGludCBhYywgY29uc3QgY2hhciAqIGNvbnN0ICogYXYpCi17Ci0gICAgcmV0dXJuIGRpYWxvZ19tc2dib3ggKHQsIGF2WzJdLCBhdG9pIChhdlszXSksIGF0b2kgKGF2WzRdKSwgMSk7Ci19Ci0KLWludAotal9pbmZvYm94IChjb25zdCBjaGFyICp0LCBpbnQgYWMsIGNvbnN0IGNoYXIgKiBjb25zdCAqIGF2KQotewotICAgIHJldHVybiBkaWFsb2dfbXNnYm94ICh0LCBhdlsyXSwgYXRvaSAoYXZbM10pLCBhdG9pIChhdls0XSksIDApOwotfQotCmRpZmYgLS1naXQgYS9zY3JpcHRzL2x4ZGlhbG9nL21lbnVib3guYyBiL3NjcmlwdHMvbHhkaWFsb2cvbWVudWJveC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWQ4MmJhLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvbHhkaWFsb2cvbWVudWJveC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ1ICswLDAgQEAKLS8qCi0gKiAgbWVudWJveC5jIC0tIGltcGxlbWVudHMgdGhlIG1lbnUgYm94Ci0gKgotICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKLSAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2Fwd0BjZncuY29tKQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotLyoKLSAqICBDaGFuZ2VzIGJ5IENsaWZmb3JkIFdvbGYgKGdvZEBjbGlmZm9yZC5hdCkKLSAqCi0gKiAgWyAxOTk4LTA2LTEzIF0KLSAqCi0gKiAgICAqKSAgQSBidWdmaXggZm9yIHRoZSBQYWdlLURvd24gcHJvYmxlbQotICoKLSAqICAgICopICBGb3JtZXJseSB3aGVuIEkgdXNlZCBQYWdlIERvd24gYW5kIFBhZ2UgVXAsIHRoZSBjdXJzb3Igd291bGQgYmUgc2V0IAotICogICAgICAgIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgbWVudSBib3guICBOb3cgbHhkaWFsb2cgaXMgYSBiaXQKLSAqICAgICAgICBzbWFydGVyIGFuZCB3b3JrcyBtb3JlIGxpa2Ugb3RoZXIgbWVudSBzeXN0ZW1zIChqdXN0IGhhdmUgYSBsb29rIGF0Ci0gKiAgICAgICAgaXQpLgotICoKLSAqICAgICopICBGb3JtZXJseSBpZiBJIHNlbGVjdGVkIHNvbWV0aGluZyBteSBzY3JvbGxpbmcgd291bGQgYmUgYnJva2VuIGJlY2F1c2UKLSAqICAgICAgICBseGRpYWxvZyBpcyByZS1pbnZva2VkIGJ5IHRoZSBNZW51Y29uZmlnIHNoZWxsIHNjcmlwdCwgY2FuJ3QKLSAqICAgICAgICByZW1lbWJlciB0aGUgbGFzdCBzY3JvbGxpbmcgcG9zaXRpb24sIGFuZCBqdXN0IHNldHMgaXQgc28gdGhhdCB0aGUKLSAqICAgICAgICBjdXJzb3IgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYm94LiAgTm93IGl0IHdyaXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUKLSAqICAgICAgICBseGRpYWxvZy5zY3JsdG1wIHdoaWNoIGNvbnRhaW5zIHRoaXMgaW5mb3JtYXRpb24uIFRoZSBmaWxlIGlzCi0gKiAgICAgICAgZGVsZXRlZCBieSBseGRpYWxvZyBpZiB0aGUgdXNlciBsZWF2ZXMgYSBzdWJtZW51IG9yIGVudGVycyBhIG5ldwotICogICAgICAgIG9uZSwgYnV0IGl0IHdvdWxkIGJlIG5pY2UgaWYgTWVudWNvbmZpZyBjb3VsZCBtYWtlIGFub3RoZXIgInJtIC1mIgotICogICAgICAgIGp1c3QgdG8gYmUgc3VyZS4gIEp1c3QgdHJ5IGl0IG91dCAtIHlvdSB3aWxsIHJlY29nbmlzZSBhIGRpZmZlcmVuY2UhCi0gKgotICogIFsgMTk5OC0wNi0xNCBdCi0gKgotICogICAgKikgIE5vdyBseGRpYWxvZyBpcyBjcmFzaC1zYWZlIGFnYWluc3QgYnJva2VuICJseGRpYWxvZy5zY3JsdG1wIiBmaWxlcwotICogICAgICAgIGFuZCBtZW51cyBjaGFuZ2UgdGhlaXIgc2l6ZSBvbiB0aGUgZmx5LgotICoKLSAqICAgICopICBJZiBmb3Igc29tZSByZWFzb24gdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9uIGlzIG5vdCBzYXZlZCBieQotICogICAgICAgIGx4ZGlhbG9nLCBpdCBzZXRzIHRoZSBzY3JvbGxpbmcgc28gdGhhdCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBpbiB0aGUKLSAqICAgICAgICBtaWRkbGUgb2YgdGhlIG1lbnUgYm94LCBub3QgYXQgdGhlIGJvdHRvbS4KLSAqCi0gKiAwMiBKYW51YXJ5IDE5OTksIE1pY2hhZWwgRWxpemFiZXRoIENoYXN0YWluIChtZWNAc2hvdXQubmV0KQotICogUmVzZXQgJ3Njcm9sbCcgdG8gMCBpZiB0aGUgdmFsdWUgZnJvbSBseGRpYWxvZy5zY3JsdG1wIGlzIGJvZ3VzLgotICogVGhpcyBmaXhlcyBhIGJ1ZyBpbiBNZW51Y29uZmlnIHdoZXJlIHVzaW5nICcgJyB0byBkZXNjZW5kIGludG8gbWVudXMKLSAqIHdvdWxkIGxlYXZlIG1pcy1zeW5jaHJvbml6ZWQgbHhkaWFsb2cuc2NybHRtcCBmaWxlcyBseWluZyBhcm91bmQsCi0gKiBmc2NhbmYgd291bGQgcmVhZCBpbiAnc2Nyb2xsJywgYW5kIGV2ZW50dWFsbHkgdGhhdCB2YWx1ZSB3b3VsZCBnZXQgdXNlZC4KLSAqLwotCi0jaW5jbHVkZSAiZGlhbG9nLmgiCi0KLXN0YXRpYyBpbnQgbWVudV93aWR0aCwgaXRlbV94OwotCi0vKgotICogUHJpbnQgbWVudSBpdGVtCi0gKi8KLXN0YXRpYyB2b2lkCi1wcmludF9pdGVtIChXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKml0ZW0sIGludCBjaG9pY2UsIGludCBzZWxlY3RlZCwgaW50IGhvdGtleSkKLXsKLSAgICBpbnQgajsKLSAgICBjaGFyIG1lbnVfaXRlbVttZW51X3dpZHRoKzFdOwotCi0gICAgc3RybmNweShtZW51X2l0ZW0sIGl0ZW0sIG1lbnVfd2lkdGgpOwotICAgIG1lbnVfaXRlbVttZW51X3dpZHRoXSA9IDA7Ci0gICAgaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5Tm5NbUhoIik7Ci0KLSAgICAvKiBDbGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovCi0gICAgd2F0dHJzZXQgKHdpbiwgbWVudWJveF9hdHRyKTsKLSAgICB3bW92ZSAod2luLCBjaG9pY2UsIDApOwotI2lmIE9MRF9OQ1VSU0VTCi0gICAgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG1lbnVfd2lkdGg7IGkrKykKLQkgICAgd2FkZGNoICh3aW4sICcgJyk7Ci0gICAgfQotI2Vsc2UKLSAgICB3Y2xydG9lb2wod2luKTsKLSNlbmRpZgotICAgIHdhdHRyc2V0ICh3aW4sIHNlbGVjdGVkID8gaXRlbV9zZWxlY3RlZF9hdHRyIDogaXRlbV9hdHRyKTsKLSAgICBtdndhZGRzdHIgKHdpbiwgY2hvaWNlLCBpdGVtX3gsIG1lbnVfaXRlbSk7Ci0gICAgaWYgKGhvdGtleSkgewotICAgIAl3YXR0cnNldCAod2luLCBzZWxlY3RlZCA/IHRhZ19rZXlfc2VsZWN0ZWRfYXR0ciA6IHRhZ19rZXlfYXR0cik7Ci0gICAgCW12d2FkZGNoKHdpbiwgY2hvaWNlLCBpdGVtX3graiwgbWVudV9pdGVtW2pdKTsKLSAgICB9Ci0gICAgaWYgKHNlbGVjdGVkKSB7Ci0Jd21vdmUgKHdpbiwgY2hvaWNlLCBpdGVtX3grMSk7Ci0Jd3JlZnJlc2ggKHdpbik7Ci0gICAgfQotfQotCi0vKgotICogUHJpbnQgdGhlIHNjcm9sbCBpbmRpY2F0b3JzLgotICovCi1zdGF0aWMgdm9pZAotcHJpbnRfYXJyb3dzIChXSU5ET1cgKiB3aW4sIGludCBpdGVtX25vLCBpbnQgc2Nyb2xsLAotCQlpbnQgeSwgaW50IHgsIGludCBoZWlnaHQpCi17Ci0gICAgaW50IGN1cl95LCBjdXJfeDsKLQotICAgIGdldHl4KHdpbiwgY3VyX3ksIGN1cl94KTsKLQotICAgIHdtb3ZlKHdpbiwgeSwgeCk7Ci0KLSAgICBpZiAoc2Nyb2xsID4gMCkgewotCXdhdHRyc2V0ICh3aW4sIHVhcnJvd19hdHRyKTsKLQl3YWRkY2ggKHdpbiwgQUNTX1VBUlJPVyk7Ci0Jd2FkZHN0ciAod2luLCAiKC0pIik7Ci0gICAgfQotICAgIGVsc2UgewotCXdhdHRyc2V0ICh3aW4sIG1lbnVib3hfYXR0cik7Ci0Jd2FkZGNoICh3aW4sIEFDU19ITElORSk7Ci0Jd2FkZGNoICh3aW4sIEFDU19ITElORSk7Ci0Jd2FkZGNoICh3aW4sIEFDU19ITElORSk7Ci0Jd2FkZGNoICh3aW4sIEFDU19ITElORSk7Ci0gICAgfQotCi0gICB5ID0geSArIGhlaWdodCArIDE7Ci0gICB3bW92ZSh3aW4sIHksIHgpOwotCi0gICBpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYmIChzY3JvbGwgKyBoZWlnaHQgPCBpdGVtX25vKSkgewotCXdhdHRyc2V0ICh3aW4sIGRhcnJvd19hdHRyKTsKLQl3YWRkY2ggKHdpbiwgQUNTX0RBUlJPVyk7Ci0Jd2FkZHN0ciAod2luLCAiKCspIik7Ci0gICAgfQotICAgIGVsc2UgewotCXdhdHRyc2V0ICh3aW4sIG1lbnVib3hfYm9yZGVyX2F0dHIpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotCXdhZGRjaCAod2luLCBBQ1NfSExJTkUpOwotICAgfQotCi0gICB3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7Ci19Ci0KLS8qCi0gKiBEaXNwbGF5IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zLgotICovCi1zdGF0aWMgdm9pZAotcHJpbnRfYnV0dG9ucyAoV0lORE9XICp3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQotewotICAgIGludCB4ID0gd2lkdGggLyAyIC0gMTY7Ci0gICAgaW50IHkgPSBoZWlnaHQgLSAyOwotCi0gICAgcHJpbnRfYnV0dG9uICh3aW4sICJTZWxlY3QiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsKLSAgICBwcmludF9idXR0b24gKHdpbiwgIiBFeGl0ICIsIHksIHggKyAxMiwgc2VsZWN0ZWQgPT0gMSk7Ci0gICAgcHJpbnRfYnV0dG9uICh3aW4sICIgSGVscCAiLCB5LCB4ICsgMjQsIHNlbGVjdGVkID09IDIpOwotCi0gICAgd21vdmUod2luLCB5LCB4KzErMTIqc2VsZWN0ZWQpOwotICAgIHdyZWZyZXNoICh3aW4pOwotfQotCi0vKgotICogRGlzcGxheSBhIG1lbnUgZm9yIGNob29zaW5nIGFtb25nIGEgbnVtYmVyIG9mIG9wdGlvbnMKLSAqLwotaW50Ci1kaWFsb2dfbWVudSAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLAotCQlpbnQgbWVudV9oZWlnaHQsIGNvbnN0IGNoYXIgKmN1cnJlbnQsIGludCBpdGVtX25vLAotCQljb25zdCBjaGFyICogY29uc3QgKiBpdGVtcykKLQotewotICAgIGludCBpLCBqLCB4LCB5LCBib3hfeCwgYm94X3k7Ci0gICAgaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAsIHNjcm9sbCA9IDAsIGNob2ljZSA9IDAsIGZpcnN0X2l0ZW0gPSAwLCBtYXhfY2hvaWNlOwotICAgIFdJTkRPVyAqZGlhbG9nLCAqbWVudTsKLSAgICBGSUxFICpmOwotCi0gICAgbWF4X2Nob2ljZSA9IE1JTiAobWVudV9oZWlnaHQsIGl0ZW1fbm8pOwotCi0gICAgLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCi0gICAgeCA9IChDT0xTIC0gd2lkdGgpIC8gMjsKLSAgICB5ID0gKExJTkVTIC0gaGVpZ2h0KSAvIDI7Ci0KLSAgICBkcmF3X3NoYWRvdyAoc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsKLQotICAgIGRpYWxvZyA9IG5ld3dpbiAoaGVpZ2h0LCB3aWR0aCwgeSwgeCk7Ci0gICAga2V5cGFkIChkaWFsb2csIFRSVUUpOwotCi0gICAgZHJhd19ib3ggKGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwgZGlhbG9nX2F0dHIsIGJvcmRlcl9hdHRyKTsKLSAgICB3YXR0cnNldCAoZGlhbG9nLCBib3JkZXJfYXR0cik7Ci0gICAgbXZ3YWRkY2ggKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOwotICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKLQl3YWRkY2ggKGRpYWxvZywgQUNTX0hMSU5FKTsKLSAgICB3YXR0cnNldCAoZGlhbG9nLCBkaWFsb2dfYXR0cik7Ci0gICAgd2JrZ2RzZXQgKGRpYWxvZywgZGlhbG9nX2F0dHIgJiBBX0NPTE9SKTsKLSAgICB3YWRkY2ggKGRpYWxvZywgQUNTX1JURUUpOwotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwgJiYgc3RybGVuKHRpdGxlKSA+PSB3aWR0aC0yICkgewotCS8qIHRydW5jYXRlIGxvbmcgdGl0bGUgLS0gbWVjICovCi0JY2hhciAqIHRpdGxlMiA9IG1hbGxvYyh3aWR0aC0yKzEpOwotCW1lbWNweSggdGl0bGUyLCB0aXRsZSwgd2lkdGgtMiApOwotCXRpdGxlMlt3aWR0aC0yXSA9ICdcMCc7Ci0JdGl0bGUgPSB0aXRsZTI7Ci0gICAgfQotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwpIHsKLQl3YXR0cnNldCAoZGlhbG9nLCB0aXRsZV9hdHRyKTsKLQltdndhZGRjaCAoZGlhbG9nLCAwLCAod2lkdGggLSBzdHJsZW4odGl0bGUpKS8yIC0gMSwgJyAnKTsKLQl3YWRkc3RyIChkaWFsb2csIChjaGFyICopdGl0bGUpOwotCXdhZGRjaCAoZGlhbG9nLCAnICcpOwotICAgIH0KLQotICAgIHdhdHRyc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyKTsKLSAgICBwcmludF9hdXRvd3JhcCAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwgMyk7Ci0KLSAgICBtZW51X3dpZHRoID0gd2lkdGggLSA2OwotICAgIGJveF95ID0gaGVpZ2h0IC0gbWVudV9oZWlnaHQgLSA1OwotICAgIGJveF94ID0gKHdpZHRoIC0gbWVudV93aWR0aCkgLyAyIC0gMTsKLQotICAgIC8qIGNyZWF0ZSBuZXcgd2luZG93IGZvciB0aGUgbWVudSAqLwotICAgIG1lbnUgPSBzdWJ3aW4gKGRpYWxvZywgbWVudV9oZWlnaHQsIG1lbnVfd2lkdGgsCi0JCXkgKyBib3hfeSArIDEsIHggKyBib3hfeCArIDEpOwotICAgIGtleXBhZCAobWVudSwgVFJVRSk7Ci0KLSAgICAvKiBkcmF3IGEgYm94IGFyb3VuZCB0aGUgbWVudSBpdGVtcyAqLwotICAgIGRyYXdfYm94IChkaWFsb2csIGJveF95LCBib3hfeCwgbWVudV9oZWlnaHQgKyAyLCBtZW51X3dpZHRoICsgMiwKLQkgICAgICBtZW51Ym94X2JvcmRlcl9hdHRyLCBtZW51Ym94X2F0dHIpOwotCi0gICAgLyoKLSAgICAgKiBGaW5kIGxlbmd0aCBvZiBsb25nZXN0IGl0ZW0gaW4gb3JkZXIgdG8gY2VudGVyIG1lbnUuCi0gICAgICogU2V0ICdjaG9pY2UnIHRvIGRlZmF1bHQgaXRlbS4gCi0gICAgICovCi0gICAgaXRlbV94ID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbV9ubzsgaSsrKSB7Ci0JaXRlbV94ID0gTUFYIChpdGVtX3gsIE1JTihtZW51X3dpZHRoLCBzdHJsZW4gKGl0ZW1zW2kgKiAyICsgMV0pICsgMikpOwotCWlmIChzdHJjbXAoY3VycmVudCwgaXRlbXNbaSoyXSkgPT0gMCkgY2hvaWNlID0gaTsKLSAgICB9Ci0KLSAgICBpdGVtX3ggPSAobWVudV93aWR0aCAtIGl0ZW1feCkgLyAyOwotCi0gICAgLyogZ2V0IHRoZSBzY3JvbGwgaW5mbyBmcm9tIHRoZSB0ZW1wIGZpbGUgKi8KLSAgICBpZiAoIChmPWZvcGVuKCJseGRpYWxvZy5zY3JsdG1wIiwiciIpKSAhPSBOVUxMICkgewotCWlmICggKGZzY2FuZihmLCIlZFxuIiwmc2Nyb2xsKSA9PSAxKSAmJiAoc2Nyb2xsIDw9IGNob2ljZSkgJiYKLQkgICAgIChzY3JvbGwrbWF4X2Nob2ljZSA+IGNob2ljZSkgJiYgKHNjcm9sbCA+PSAwKSAmJgotCSAgICAgKHNjcm9sbCttYXhfY2hvaWNlIDw9IGl0ZW1fbm8pICkgewotCSAgICBmaXJzdF9pdGVtID0gc2Nyb2xsOwotCSAgICBjaG9pY2UgPSBjaG9pY2UgLSBzY3JvbGw7Ci0JICAgIGZjbG9zZShmKTsKLQl9IGVsc2UgewotCSAgICBzY3JvbGw9MDsKLQkgICAgcmVtb3ZlKCJseGRpYWxvZy5zY3JsdG1wIik7Ci0JICAgIGZjbG9zZShmKTsKLQkgICAgZj1OVUxMOwotCX0KLSAgICB9Ci0gICAgaWYgKCAoY2hvaWNlID49IG1heF9jaG9pY2UpIHx8IChmPT1OVUxMICYmIGNob2ljZSA+PSBtYXhfY2hvaWNlLzIpICkgewotCWlmIChjaG9pY2UgPj0gaXRlbV9uby1tYXhfY2hvaWNlLzIpCi0JICAgIHNjcm9sbCA9IGZpcnN0X2l0ZW0gPSBpdGVtX25vLW1heF9jaG9pY2U7Ci0JZWxzZQotCSAgICBzY3JvbGwgPSBmaXJzdF9pdGVtID0gY2hvaWNlIC0gbWF4X2Nob2ljZS8yOwotCWNob2ljZSA9IGNob2ljZSAtIHNjcm9sbDsKLSAgICB9Ci0KLSAgICAvKiBQcmludCB0aGUgbWVudSAqLwotICAgIGZvciAoaT0wOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7Ci0JcHJpbnRfaXRlbSAobWVudSwgaXRlbXNbKGZpcnN0X2l0ZW0gKyBpKSAqIDIgKyAxXSwgaSwgaSA9PSBjaG9pY2UsCi0gICAgICAgICAgICAgICAgICAgIChpdGVtc1soZmlyc3RfaXRlbSArIGkpKjJdWzBdICE9ICc6JykpOwotICAgIH0KLQotICAgIHdub3V0cmVmcmVzaCAobWVudSk7Ci0KLSAgICBwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX25vLCBzY3JvbGwsCi0JCSBib3hfeSwgYm94X3graXRlbV94KzEsIG1lbnVfaGVpZ2h0KTsKLQotICAgIHByaW50X2J1dHRvbnMgKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7Ci0gICAgd21vdmUgKG1lbnUsIGNob2ljZSwgaXRlbV94KzEpOwotICAgIHdyZWZyZXNoIChtZW51KTsKLQotICAgIHdoaWxlIChrZXkgIT0gRVNDKSB7Ci0Ja2V5ID0gd2dldGNoKG1lbnUpOwotCi0JaWYgKGtleSA8IDI1NiAmJiBpc2FscGhhKGtleSkpIGtleSA9IHRvbG93ZXIoa2V5KTsKLQotCWlmIChzdHJjaHIoInlubWgiLCBrZXkpKQotCQlpID0gbWF4X2Nob2ljZTsKLQllbHNlIHsKLSAgICAgICAgZm9yIChpID0gY2hvaWNlKzE7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsKLQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1zWyhzY3JvbGwraSkqMisxXSwgIll5Tm5NbUhoIik7Ci0JCWlmIChrZXkgPT0gdG9sb3dlcihpdGVtc1soc2Nyb2xsK2kpKjIrMV1bal0pKQotICAgICAgICAgICAgICAgIAlicmVhazsKLQl9Ci0JaWYgKGkgPT0gbWF4X2Nob2ljZSkKLSAgICAgICAJCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsKLQkJCWogPSBmaXJzdF9hbHBoYShpdGVtc1soc2Nyb2xsK2kpKjIrMV0sICJZeU5uTW1IaCIpOwotCQkJaWYgKGtleSA9PSB0b2xvd2VyKGl0ZW1zWyhzY3JvbGwraSkqMisxXVtqXSkpCi0gICAgICAgICAgICAgICAgCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChpIDwgbWF4X2Nob2ljZSB8fCAKLSAgICAgICAgICAgIGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dOIHx8Ci0gICAgICAgICAgICBrZXkgPT0gJy0nIHx8IGtleSA9PSAnKycgfHwKLSAgICAgICAgICAgIGtleSA9PSBLRVlfUFBBR0UgfHwga2V5ID09IEtFWV9OUEFHRSkgewotCi0gICAgICAgICAgICBwcmludF9pdGVtIChtZW51LCBpdGVtc1soc2Nyb2xsK2Nob2ljZSkqMisxXSwgY2hvaWNlLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1zWyhzY3JvbGwrY2hvaWNlKSoyXVswXSAhPSAnOicpKTsKLQotCSAgICBpZiAoa2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNob2ljZSA8IDIgJiYgc2Nyb2xsKSB7Ci0JICAgICAgICAgICAgLyogU2Nyb2xsIG1lbnUgZG93biAqLwotICAgICAgICAgICAgICAgICAgICBzY3JvbGxvayAobWVudSwgVFJVRSk7Ci0gICAgICAgICAgICAgICAgICAgIHdzY3JsIChtZW51LCAtMSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcm9sbG9rIChtZW51LCBGQUxTRSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsLS07Ci0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRfaXRlbSAobWVudSwgaXRlbXNbc2Nyb2xsICogMiArIDFdLCAwLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbXNbc2Nyb2xsKjJdWzBdICE9ICc6JykpOwotCQl9IGVsc2UKLQkJICAgIGNob2ljZSA9IE1BWChjaG9pY2UgLSAxLCAwKTsKLQotCSAgICB9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBrZXkgPT0gJysnKSAgewotCi0JCXByaW50X2l0ZW0gKG1lbnUsIGl0ZW1zWyhzY3JvbGwrY2hvaWNlKSoyKzFdLCBjaG9pY2UsIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbXNbKHNjcm9sbCtjaG9pY2UpKjJdWzBdICE9ICc6JykpOwotCi0gICAgICAgICAgICAgICAgaWYgKChjaG9pY2UgPiBtYXhfY2hvaWNlLTMpICYmCi0gICAgICAgICAgICAgICAgICAgIChzY3JvbGwgKyBtYXhfY2hvaWNlIDwgaXRlbV9ubykKLSAgICAgICAgICAgICAgICAgICApIHsKLQkJICAgIC8qIFNjcm9sbCBtZW51IHVwICovCi0JCSAgICBzY3JvbGxvayAobWVudSwgVFJVRSk7Ci0JCSAgICB3c2NybCAobWVudSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcm9sbG9rIChtZW51LCBGQUxTRSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsKys7Ci0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRfaXRlbSAobWVudSwgaXRlbXNbKHNjcm9sbCttYXhfY2hvaWNlLTEpKjIrMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Nob2ljZS0xLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbXNbKHNjcm9sbCttYXhfY2hvaWNlLTEpKjJdWzBdICE9ICc6JykpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSBNSU4oY2hvaWNlKzEsIG1heF9jaG9pY2UtMSk7Ci0KLQkgICAgfSBlbHNlIGlmIChrZXkgPT0gS0VZX1BQQUdFKSB7Ci0JICAgICAgICBzY3JvbGxvayAobWVudSwgVFJVRSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpPTA7IChpIDwgbWF4X2Nob2ljZSk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsID4gMCkgewotICAgICAgICAgICAgICAgIAl3c2NybCAobWVudSwgLTEpOwotICAgICAgICAgICAgICAgIAlzY3JvbGwtLTsKLSAgICAgICAgICAgICAgICAJcHJpbnRfaXRlbSAobWVudSwgaXRlbXNbc2Nyb2xsICogMiArIDFdLCAwLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAJKGl0ZW1zW3Njcm9sbCoyXVswXSAhPSAnOicpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaG9pY2UgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZS0tOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNjcm9sbG9rIChtZW51LCBGQUxTRSk7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09IEtFWV9OUEFHRSkgewotICAgICAgICAgICAgICAgIGZvciAoaT0wOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbCttYXhfY2hvaWNlIDwgaXRlbV9ubykgewotCQkJc2Nyb2xsb2sgKG1lbnUsIFRSVUUpOwotCQkJd3NjcmwgKG1lbnUsIDEpOwotCQkJc2Nyb2xsb2sgKG1lbnUsIEZBTFNFKTsKLSAgICAgICAgICAgICAgICAJc2Nyb2xsKys7Ci0gICAgICAgICAgICAgICAgCXByaW50X2l0ZW0gKG1lbnUsIGl0ZW1zWyhzY3JvbGwrbWF4X2Nob2ljZS0xKSoyKzFdLAotCQkJICAgICAgICAgICAgbWF4X2Nob2ljZS0xLCBGQUxTRSwKLQkJCSAgICAgICAgICAgIChpdGVtc1soc2Nyb2xsK21heF9jaG9pY2UtMSkqMl1bMF0gIT0gJzonKSk7Ci0JCSAgICB9IGVsc2UgewotCQkJaWYgKGNob2ljZSsxIDwgbWF4X2Nob2ljZSkKLQkJCSAgICBjaG9pY2UrKzsKLQkJICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNob2ljZSA9IGk7Ci0KLSAgICAgICAgICAgIHByaW50X2l0ZW0gKG1lbnUsIGl0ZW1zWyhzY3JvbGwrY2hvaWNlKSoyKzFdLCBjaG9pY2UsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgIChpdGVtc1soc2Nyb2xsK2Nob2ljZSkqMl1bMF0gIT0gJzonKSk7Ci0KLSAgICAgICAgICAgIHByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fbm8sIHNjcm9sbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBib3hfeSwgYm94X3graXRlbV94KzEsIG1lbnVfaGVpZ2h0KTsKLQotICAgICAgICAgICAgd25vdXRyZWZyZXNoIChkaWFsb2cpOwotICAgICAgICAgICAgd3JlZnJlc2ggKG1lbnUpOwotCi0JICAgIGNvbnRpbnVlOwkJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KLSAgICAgICAgfQotCi0Jc3dpdGNoIChrZXkpIHsKLQljYXNlIEtFWV9MRUZUOgotCWNhc2UgVEFCOgotCWNhc2UgS0VZX1JJR0hUOgotCSAgICBidXR0b24gPSAoKGtleSA9PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDogKytidXR0b24pIDwgMCkKLQkJCT8gMiA6IChidXR0b24gPiAyID8gMCA6IGJ1dHRvbik7Ci0KLQkgICAgcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIGJ1dHRvbik7Ci0JICAgIHdyZWZyZXNoIChtZW51KTsKLQkgICAgYnJlYWs7Ci0JY2FzZSAnICc6Ci0JY2FzZSAncyc6Ci0JY2FzZSAneSc6Ci0JY2FzZSAnbic6Ci0JY2FzZSAnbSc6Ci0JY2FzZSAnLyc6Ci0JICAgIC8qIHNhdmUgc2Nyb2xsIGluZm8gKi8KLQkgICAgaWYgKCAoZj1mb3BlbigibHhkaWFsb2cuc2NybHRtcCIsInciKSkgIT0gTlVMTCApIHsKLQkJZnByaW50ZihmLCIlZFxuIixzY3JvbGwpOwotCQlmY2xvc2UoZik7Ci0JICAgIH0KLQkgICAgZGVsd2luIChkaWFsb2cpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAyXSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtleSkgewotICAgICAgICAgICAgY2FzZSAncyc6IHJldHVybiAzOwotICAgICAgICAgICAgY2FzZSAneSc6IHJldHVybiAzOwotICAgICAgICAgICAgY2FzZSAnbic6IHJldHVybiA0OwotICAgICAgICAgICAgY2FzZSAnbSc6IHJldHVybiA1OwotICAgICAgICAgICAgY2FzZSAnICc6IHJldHVybiA2OwotICAgICAgICAgICAgY2FzZSAnLyc6IHJldHVybiA3OwotICAgICAgICAgICAgfQotCSAgICByZXR1cm4gMDsKLQljYXNlICdoJzoKLQljYXNlICc/JzoKLQkgICAgYnV0dG9uID0gMjsKLQljYXNlICdcbic6Ci0JICAgIGRlbHdpbiAoZGlhbG9nKTsKLQkgICAgaWYgKGJ1dHRvbiA9PSAyKSAKLSAgICAgICAgICAgIAlmcHJpbnRmKHN0ZGVyciwgIiVzIFwiJXNcIlxuIiwgCi0JCQlpdGVtc1soc2Nyb2xsICsgY2hvaWNlKSAqIDJdLAotCQkJaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAyICsgMV0gKwotCQkJZmlyc3RfYWxwaGEoaXRlbXNbKHNjcm9sbCArIGNob2ljZSkgKiAyICsgMV0sIiIpKTsKLQkgICAgZWxzZQotICAgICAgICAgICAgCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGl0ZW1zWyhzY3JvbGwgKyBjaG9pY2UpICogMl0pOwotCi0JICAgIHJlbW92ZSgibHhkaWFsb2cuc2NybHRtcCIpOwotCSAgICByZXR1cm4gYnV0dG9uOwotCWNhc2UgJ2UnOgotCWNhc2UgJ3gnOgotCSAgICBrZXkgPSBFU0M7Ci0JY2FzZSBFU0M6Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0KLSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0gICAgcmVtb3ZlKCJseGRpYWxvZy5zY3JsdG1wIik7Ci0gICAgcmV0dXJuIC0xOwkJCS8qIEVTQyBwcmVzc2VkICovCi19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2x4ZGlhbG9nL21zZ2JveC5jIGIvc2NyaXB0cy9seGRpYWxvZy9tc2dib3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2OTJlMS4uMDAwMDAwMAotLS0gYS9zY3JpcHRzL2x4ZGlhbG9nL21zZ2JveC5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqICBtc2dib3guYyAtLSBpbXBsZW1lbnRzIHRoZSBtZXNzYWdlIGJveCBhbmQgaW5mbyBib3gKLSAqCi0gKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQotICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXB3QGNmdy5jb20pCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiZGlhbG9nLmgiCi0KLS8qCi0gKiBEaXNwbGF5IGEgbWVzc2FnZSBib3guIFByb2dyYW0gd2lsbCBwYXVzZSBhbmQgZGlzcGxheSBhbiAiT0siIGJ1dHRvbgotICogaWYgdGhlIHBhcmFtZXRlciAncGF1c2UnIGlzIG5vbi16ZXJvLgotICovCi1pbnQKLWRpYWxvZ19tc2dib3ggKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCwKLQkJaW50IHBhdXNlKQotewotICAgIGludCBpLCB4LCB5LCBrZXkgPSAwOwotICAgIFdJTkRPVyAqZGlhbG9nOwotCi0gICAgLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCi0gICAgeCA9IChDT0xTIC0gd2lkdGgpIC8gMjsKLSAgICB5ID0gKExJTkVTIC0gaGVpZ2h0KSAvIDI7Ci0KLSAgICBkcmF3X3NoYWRvdyAoc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsKLQotICAgIGRpYWxvZyA9IG5ld3dpbiAoaGVpZ2h0LCB3aWR0aCwgeSwgeCk7Ci0gICAga2V5cGFkIChkaWFsb2csIFRSVUUpOwotCi0gICAgZHJhd19ib3ggKGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwgZGlhbG9nX2F0dHIsIGJvcmRlcl9hdHRyKTsKLQotICAgIGlmICh0aXRsZSAhPSBOVUxMICYmIHN0cmxlbih0aXRsZSkgPj0gd2lkdGgtMiApIHsKLQkvKiB0cnVuY2F0ZSBsb25nIHRpdGxlIC0tIG1lYyAqLwotCWNoYXIgKiB0aXRsZTIgPSBtYWxsb2Mod2lkdGgtMisxKTsKLQltZW1jcHkoIHRpdGxlMiwgdGl0bGUsIHdpZHRoLTIgKTsKLQl0aXRsZTJbd2lkdGgtMl0gPSAnXDAnOwotCXRpdGxlID0gdGl0bGUyOwotICAgIH0KLQotICAgIGlmICh0aXRsZSAhPSBOVUxMKSB7Ci0Jd2F0dHJzZXQgKGRpYWxvZywgdGl0bGVfYXR0cik7Ci0JbXZ3YWRkY2ggKGRpYWxvZywgMCwgKHdpZHRoIC0gc3RybGVuKHRpdGxlKSkvMiAtIDEsICcgJyk7Ci0Jd2FkZHN0ciAoZGlhbG9nLCAoY2hhciAqKXRpdGxlKTsKLQl3YWRkY2ggKGRpYWxvZywgJyAnKTsKLSAgICB9Ci0gICAgd2F0dHJzZXQgKGRpYWxvZywgZGlhbG9nX2F0dHIpOwotICAgIHByaW50X2F1dG93cmFwIChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAyKTsKLQotICAgIGlmIChwYXVzZSkgewotCXdhdHRyc2V0IChkaWFsb2csIGJvcmRlcl9hdHRyKTsKLQltdndhZGRjaCAoZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7Ci0JZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQotCSAgICB3YWRkY2ggKGRpYWxvZywgQUNTX0hMSU5FKTsKLQl3YXR0cnNldCAoZGlhbG9nLCBkaWFsb2dfYXR0cik7Ci0Jd2FkZGNoIChkaWFsb2csIEFDU19SVEVFKTsKLQotCXByaW50X2J1dHRvbiAoZGlhbG9nLCAiICBPayAgIiwKLQkJICAgICAgaGVpZ2h0IC0gMiwgd2lkdGggLyAyIC0gNCwgVFJVRSk7Ci0KLQl3cmVmcmVzaCAoZGlhbG9nKTsKLQl3aGlsZSAoa2V5ICE9IEVTQyAmJiBrZXkgIT0gJ1xuJyAmJiBrZXkgIT0gJyAnICYmCi0gICAgICAgICAgICAgICBrZXkgIT0gJ08nICYmIGtleSAhPSAnbycgJiYga2V5ICE9ICdYJyAmJiBrZXkgIT0gJ3gnKQotCSAgICBrZXkgPSB3Z2V0Y2ggKGRpYWxvZyk7Ci0gICAgfSBlbHNlIHsKLQlrZXkgPSAnXG4nOwotCXdyZWZyZXNoIChkaWFsb2cpOwotICAgIH0KLQotICAgIGRlbHdpbiAoZGlhbG9nKTsKLSAgICByZXR1cm4ga2V5ID09IEVTQyA/IC0xIDogMDsKLX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbHhkaWFsb2cvdGV4dGJveC5jIGIvc2NyaXB0cy9seGRpYWxvZy90ZXh0Ym94LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMjNkZjIuLjAwMDAwMDAKLS0tIGEvc2NyaXB0cy9seGRpYWxvZy90ZXh0Ym94LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTYgKzAsMCBAQAotLyoKLSAqICB0ZXh0Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgdGV4dCBib3gKLSAqCi0gKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQotICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJkaWFsb2cuaCIKLQotc3RhdGljIHZvaWQgYmFja19saW5lcyAoaW50IG4pOwotc3RhdGljIHZvaWQgcHJpbnRfcGFnZSAoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwotc3RhdGljIHZvaWQgcHJpbnRfbGluZSAoV0lORE9XICogd2luLCBpbnQgcm93LCBpbnQgd2lkdGgpOwotc3RhdGljIGNoYXIgKmdldF9saW5lICh2b2lkKTsKLXN0YXRpYyB2b2lkIHByaW50X3Bvc2l0aW9uIChXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCk7Ci0KLXN0YXRpYyBpbnQgaHNjcm9sbCwgZmQsIGZpbGVfc2l6ZSwgYnl0ZXNfcmVhZDsKLXN0YXRpYyBpbnQgYmVnaW5fcmVhY2hlZCA9IDEsIGVuZF9yZWFjaGVkLCBwYWdlX2xlbmd0aDsKLXN0YXRpYyBjaGFyICpidWYsICpwYWdlOwotCi0vKgotICogRGlzcGxheSB0ZXh0IGZyb20gYSBmaWxlIGluIGEgZGlhbG9nIGJveC4KLSAqLwotaW50Ci1kaWFsb2dfdGV4dGJveCAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLSAgICBpbnQgaSwgeCwgeSwgY3VyX3gsIGN1cl95LCBmcG9zLCBrZXkgPSAwOwotICAgIGludCBwYXNzZWRfZW5kOwotICAgIGNoYXIgc2VhcmNoX3Rlcm1bTUFYX0xFTiArIDFdOwotICAgIFdJTkRPVyAqZGlhbG9nLCAqdGV4dDsKLQotICAgIHNlYXJjaF90ZXJtWzBdID0gJ1wwJzsJLyogbm8gc2VhcmNoIHRlcm0gZW50ZXJlZCB5ZXQgKi8KLQotICAgIC8qIE9wZW4gaW5wdXQgZmlsZSBmb3IgcmVhZGluZyAqLwotICAgIGlmICgoZmQgPSBvcGVuIChmaWxlLCBPX1JET05MWSkpID09IC0xKSB7Ci0JZW5kd2luICgpOwotCWZwcmludGYgKHN0ZGVyciwKLQkJICJcbkNhbid0IG9wZW4gaW5wdXQgZmlsZSBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7Ci0JZXhpdCAoLTEpOwotICAgIH0KLSAgICAvKiBHZXQgZmlsZSBzaXplLiBBY3R1YWxseSwgJ2ZpbGVfc2l6ZScgaXMgdGhlIHJlYWwgZmlsZSBzaXplIC0gMSwKLSAgICAgICBzaW5jZSBpdCdzIG9ubHkgdGhlIGxhc3QgYnl0ZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nICovCi0gICAgaWYgKChmaWxlX3NpemUgPSBsc2VlayAoZmQsIDAsIFNFRUtfRU5EKSkgPT0gLTEpIHsKLQllbmR3aW4gKCk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiXG5FcnJvciBnZXR0aW5nIGZpbGUgc2l6ZSBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7Ci0JZXhpdCAoLTEpOwotICAgIH0KLSAgICAvKiBSZXN0b3JlIGZpbGUgcG9pbnRlciB0byBiZWdpbm5pbmcgb2YgZmlsZSBhZnRlciBnZXR0aW5nIGZpbGUgc2l6ZSAqLwotICAgIGlmIChsc2VlayAoZmQsIDAsIFNFRUtfU0VUKSA9PSAtMSkgewotCWVuZHdpbiAoKTsKLQlmcHJpbnRmIChzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gZGlhbG9nX3RleHRib3goKS5cbiIpOwotCWV4aXQgKC0xKTsKLSAgICB9Ci0gICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHJlYWQgYnVmZmVyICovCi0gICAgaWYgKChidWYgPSBtYWxsb2MgKEJVRl9TSVpFICsgMSkpID09IE5VTEwpIHsKLQllbmR3aW4gKCk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiXG5DYW4ndCBhbGxvY2F0ZSBtZW1vcnkgaW4gZGlhbG9nX3RleHRib3goKS5cbiIpOwotCWV4aXQgKC0xKTsKLSAgICB9Ci0gICAgaWYgKChieXRlc19yZWFkID0gcmVhZCAoZmQsIGJ1ZiwgQlVGX1NJWkUpKSA9PSAtMSkgewotCWVuZHdpbiAoKTsKLQlmcHJpbnRmIChzdGRlcnIsICJcbkVycm9yIHJlYWRpbmcgZmlsZSBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7Ci0JZXhpdCAoLTEpOwotICAgIH0KLSAgICBidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOwkvKiBtYXJrIGVuZCBvZiB2YWxpZCBkYXRhICovCi0gICAgcGFnZSA9IGJ1ZjsJCQkvKiBwYWdlIGlzIHBvaW50ZXIgdG8gc3RhcnQgb2YgcGFnZSB0byBiZSBkaXNwbGF5ZWQgKi8KLQotICAgIC8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLwotICAgIHggPSAoQ09MUyAtIHdpZHRoKSAvIDI7Ci0gICAgeSA9IChMSU5FUyAtIGhlaWdodCkgLyAyOwotCi0KLSAgICBkcmF3X3NoYWRvdyAoc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsKLQotICAgIGRpYWxvZyA9IG5ld3dpbiAoaGVpZ2h0LCB3aWR0aCwgeSwgeCk7Ci0gICAga2V5cGFkIChkaWFsb2csIFRSVUUpOwotCi0gICAgLyogQ3JlYXRlIHdpbmRvdyBmb3IgdGV4dCByZWdpb24sIHVzZWQgZm9yIHNjcm9sbGluZyB0ZXh0ICovCi0gICAgdGV4dCA9IHN1YndpbiAoZGlhbG9nLCBoZWlnaHQgLSA0LCB3aWR0aCAtIDIsIHkgKyAxLCB4ICsgMSk7Ci0gICAgd2F0dHJzZXQgKHRleHQsIGRpYWxvZ19hdHRyKTsKLSAgICB3YmtnZHNldCAodGV4dCwgZGlhbG9nX2F0dHIgJiBBX0NPTE9SKTsKLQotICAgIGtleXBhZCAodGV4dCwgVFJVRSk7Ci0KLSAgICAvKiByZWdpc3RlciB0aGUgbmV3IHdpbmRvdywgYWxvbmcgd2l0aCBpdHMgYm9yZGVycyAqLwotICAgIGRyYXdfYm94IChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsIGRpYWxvZ19hdHRyLCBib3JkZXJfYXR0cik7Ci0KLSAgICB3YXR0cnNldCAoZGlhbG9nLCBib3JkZXJfYXR0cik7Ci0gICAgbXZ3YWRkY2ggKGRpYWxvZywgaGVpZ2h0LTMsIDAsIEFDU19MVEVFKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBpKyspCi0Jd2FkZGNoIChkaWFsb2csIEFDU19ITElORSk7Ci0gICAgd2F0dHJzZXQgKGRpYWxvZywgZGlhbG9nX2F0dHIpOwotICAgIHdia2dkc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyICYgQV9DT0xPUik7Ci0gICAgd2FkZGNoIChkaWFsb2csIEFDU19SVEVFKTsKLQotICAgIGlmICh0aXRsZSAhPSBOVUxMICYmIHN0cmxlbih0aXRsZSkgPj0gd2lkdGgtMiApIHsKLQkvKiB0cnVuY2F0ZSBsb25nIHRpdGxlIC0tIG1lYyAqLwotCWNoYXIgKiB0aXRsZTIgPSBtYWxsb2Mod2lkdGgtMisxKTsKLQltZW1jcHkoIHRpdGxlMiwgdGl0bGUsIHdpZHRoLTIgKTsKLQl0aXRsZTJbd2lkdGgtMl0gPSAnXDAnOwotCXRpdGxlID0gdGl0bGUyOwotICAgIH0KLQotICAgIGlmICh0aXRsZSAhPSBOVUxMKSB7Ci0Jd2F0dHJzZXQgKGRpYWxvZywgdGl0bGVfYXR0cik7Ci0JbXZ3YWRkY2ggKGRpYWxvZywgMCwgKHdpZHRoIC0gc3RybGVuKHRpdGxlKSkvMiAtIDEsICcgJyk7Ci0Jd2FkZHN0ciAoZGlhbG9nLCAoY2hhciAqKXRpdGxlKTsKLQl3YWRkY2ggKGRpYWxvZywgJyAnKTsKLSAgICB9Ci0gICAgcHJpbnRfYnV0dG9uIChkaWFsb2csICIgRXhpdCAiLCBoZWlnaHQgLSAyLCB3aWR0aCAvIDIgLSA0LCBUUlVFKTsKLSAgICB3bm91dHJlZnJlc2ggKGRpYWxvZyk7Ci0gICAgZ2V0eXggKGRpYWxvZywgY3VyX3ksIGN1cl94KTsJLyogU2F2ZSBjdXJzb3IgcG9zaXRpb24gKi8KLQotICAgIC8qIFByaW50IGZpcnN0IHBhZ2Ugb2YgdGV4dCAqLwotICAgIGF0dHJfY2xlYXIgKHRleHQsIGhlaWdodCAtIDQsIHdpZHRoIC0gMiwgZGlhbG9nX2F0dHIpOwotICAgIHByaW50X3BhZ2UgKHRleHQsIGhlaWdodCAtIDQsIHdpZHRoIC0gMik7Ci0gICAgcHJpbnRfcG9zaXRpb24gKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCk7Ci0gICAgd21vdmUgKGRpYWxvZywgY3VyX3ksIGN1cl94KTsJLyogUmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gKi8KLSAgICB3cmVmcmVzaCAoZGlhbG9nKTsKLQotICAgIHdoaWxlICgoa2V5ICE9IEVTQykgJiYgKGtleSAhPSAnXG4nKSkgewotCWtleSA9IHdnZXRjaCAoZGlhbG9nKTsKLQlzd2l0Y2ggKGtleSkgewotCWNhc2UgJ0UnOgkJLyogRXhpdCAqLwotCWNhc2UgJ2UnOgotCWNhc2UgJ1gnOgotCWNhc2UgJ3gnOgotCSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0JICAgIGZyZWUgKGJ1Zik7Ci0JICAgIGNsb3NlIChmZCk7Ci0JICAgIHJldHVybiAwOwotCWNhc2UgJ2cnOgkJLyogRmlyc3QgcGFnZSAqLwotCWNhc2UgS0VZX0hPTUU6Ci0JICAgIGlmICghYmVnaW5fcmVhY2hlZCkgewotCQliZWdpbl9yZWFjaGVkID0gMTsKLQkJLyogRmlyc3QgcGFnZSBub3QgaW4gYnVmZmVyPyAqLwotCQlpZiAoKGZwb3MgPSBsc2VlayAoZmQsIDAsIFNFRUtfQ1VSKSkgPT0gLTEpIHsKLQkJICAgIGVuZHdpbiAoKTsKLQkJICAgIGZwcmludGYgKHN0ZGVyciwKLQkJICAgICAgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7Ci0JCSAgICBleGl0ICgtMSk7Ci0JCX0KLQkJaWYgKGZwb3MgPiBieXRlc19yZWFkKSB7CS8qIFllcywgd2UgaGF2ZSB0byByZWFkIGl0IGluICovCi0JCSAgICBpZiAobHNlZWsgKGZkLCAwLCBTRUVLX1NFVCkgPT0gLTEpIHsKLQkJCWVuZHdpbiAoKTsKLQkJCWZwcmludGYgKHN0ZGVyciwgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiAiCi0JCQkJICJkaWFsb2dfdGV4dGJveCgpLlxuIik7Ci0JCQlleGl0ICgtMSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoKGJ5dGVzX3JlYWQgPSByZWFkIChmZCwgYnVmLCBCVUZfU0laRSkpID09IC0xKSB7Ci0JCQllbmR3aW4gKCk7Ci0JCQlmcHJpbnRmIChzdGRlcnIsCi0JCQkgICAgICJcbkVycm9yIHJlYWRpbmcgZmlsZSBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7Ci0JCQlleGl0ICgtMSk7Ci0JCSAgICB9Ci0JCSAgICBidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOwotCQl9Ci0JCXBhZ2UgPSBidWY7Ci0JCXByaW50X3BhZ2UgKHRleHQsIGhlaWdodCAtIDQsIHdpZHRoIC0gMik7Ci0JCXByaW50X3Bvc2l0aW9uIChkaWFsb2csIGhlaWdodCwgd2lkdGgpOwotCQl3bW92ZSAoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLwotCQl3cmVmcmVzaCAoZGlhbG9nKTsKLQkgICAgfQotCSAgICBicmVhazsKLQljYXNlICdHJzoJCS8qIExhc3QgcGFnZSAqLwotCWNhc2UgS0VZX0VORDoKLQotCSAgICBlbmRfcmVhY2hlZCA9IDE7Ci0JICAgIC8qIExhc3QgcGFnZSBub3QgaW4gYnVmZmVyPyAqLwotCSAgICBpZiAoKGZwb3MgPSBsc2VlayAoZmQsIDAsIFNFRUtfQ1VSKSkgPT0gLTEpIHsKLQkJZW5kd2luICgpOwotCQlmcHJpbnRmIChzdGRlcnIsCi0JCSAgICAgICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gZGlhbG9nX3RleHRib3goKS5cbiIpOwotCQlleGl0ICgtMSk7Ci0JICAgIH0KLQkgICAgaWYgKGZwb3MgPCBmaWxlX3NpemUpIHsJLyogWWVzLCB3ZSBoYXZlIHRvIHJlYWQgaXQgaW4gKi8KLQkJaWYgKGxzZWVrIChmZCwgLUJVRl9TSVpFLCBTRUVLX0VORCkgPT0gLTEpIHsKLQkJICAgIGVuZHdpbiAoKTsKLQkJICAgIGZwcmludGYgKHN0ZGVyciwKLQkJICAgICAgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiBkaWFsb2dfdGV4dGJveCgpLlxuIik7Ci0JCSAgICBleGl0ICgtMSk7Ci0JCX0KLQkJaWYgKChieXRlc19yZWFkID0gcmVhZCAoZmQsIGJ1ZiwgQlVGX1NJWkUpKSA9PSAtMSkgewotCQkgICAgZW5kd2luICgpOwotCQkgICAgZnByaW50ZiAoc3RkZXJyLAotCQkJICAgICAiXG5FcnJvciByZWFkaW5nIGZpbGUgaW4gZGlhbG9nX3RleHRib3goKS5cbiIpOwotCQkgICAgZXhpdCAoLTEpOwotCQl9Ci0JCWJ1ZltieXRlc19yZWFkXSA9ICdcMCc7Ci0JICAgIH0KLQkgICAgcGFnZSA9IGJ1ZiArIGJ5dGVzX3JlYWQ7Ci0JICAgIGJhY2tfbGluZXMgKGhlaWdodCAtIDQpOwotCSAgICBwcmludF9wYWdlICh0ZXh0LCBoZWlnaHQgLSA0LCB3aWR0aCAtIDIpOwotCSAgICBwcmludF9wb3NpdGlvbiAoZGlhbG9nLCBoZWlnaHQsIHdpZHRoKTsKLQkgICAgd21vdmUgKGRpYWxvZywgY3VyX3ksIGN1cl94KTsJLyogUmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gKi8KLQkgICAgd3JlZnJlc2ggKGRpYWxvZyk7Ci0JICAgIGJyZWFrOwotCWNhc2UgJ0snOgkJLyogUHJldmlvdXMgbGluZSAqLwotCWNhc2UgJ2snOgotCWNhc2UgS0VZX1VQOgotCSAgICBpZiAoIWJlZ2luX3JlYWNoZWQpIHsKLQkJYmFja19saW5lcyAocGFnZV9sZW5ndGggKyAxKTsKLQotCQkvKiBXZSBkb24ndCBjYWxsIHByaW50X3BhZ2UoKSBoZXJlIGJ1dCB1c2Ugc2Nyb2xsaW5nIHRvIGVuc3VyZQotCQkgICBmYXN0ZXIgc2NyZWVuIHVwZGF0ZS4gSG93ZXZlciwgJ2VuZF9yZWFjaGVkJyBhbmQKLQkJICAgJ3BhZ2VfbGVuZ3RoJyBzaG91bGQgc3RpbGwgYmUgdXBkYXRlZCwgYW5kICdwYWdlJyBzaG91bGQKLQkJICAgcG9pbnQgdG8gc3RhcnQgb2YgbmV4dCBwYWdlLiBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZwotCQkgICBnZXRfbGluZSgpIGluIHRoZSBmb2xsb3dpbmcgJ2ZvcicgbG9vcC4gKi8KLQkJc2Nyb2xsb2sgKHRleHQsIFRSVUUpOwotCQl3c2NybCAodGV4dCwgLTEpOwkvKiBTY3JvbGwgdGV4dCByZWdpb24gZG93biBvbmUgbGluZSAqLwotCQlzY3JvbGxvayAodGV4dCwgRkFMU0UpOwotCQlwYWdlX2xlbmd0aCA9IDA7Ci0JCXBhc3NlZF9lbmQgPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0IC0gNDsgaSsrKSB7Ci0JCSAgICBpZiAoIWkpIHsKLQkJCS8qIHByaW50IGZpcnN0IGxpbmUgb2YgcGFnZSAqLwotCQkJcHJpbnRfbGluZSAodGV4dCwgMCwgd2lkdGggLSAyKTsKLQkJCXdub3V0cmVmcmVzaCAodGV4dCk7Ci0JCSAgICB9IGVsc2UKLQkJCS8qIENhbGxlZCB0byB1cGRhdGUgJ2VuZF9yZWFjaGVkJyBhbmQgJ3BhZ2UnICovCi0JCQlnZXRfbGluZSAoKTsKLQkJICAgIGlmICghcGFzc2VkX2VuZCkKLQkJCXBhZ2VfbGVuZ3RoKys7Ci0JCSAgICBpZiAoZW5kX3JlYWNoZWQgJiYgIXBhc3NlZF9lbmQpCi0JCQlwYXNzZWRfZW5kID0gMTsKLQkJfQotCi0JCXByaW50X3Bvc2l0aW9uIChkaWFsb2csIGhlaWdodCwgd2lkdGgpOwotCQl3bW92ZSAoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLwotCQl3cmVmcmVzaCAoZGlhbG9nKTsKLQkgICAgfQotCSAgICBicmVhazsKLQljYXNlICdCJzoJCS8qIFByZXZpb3VzIHBhZ2UgKi8KLQljYXNlICdiJzoKLQljYXNlIEtFWV9QUEFHRToKLQkgICAgaWYgKGJlZ2luX3JlYWNoZWQpCi0JCWJyZWFrOwotCSAgICBiYWNrX2xpbmVzIChwYWdlX2xlbmd0aCArIGhlaWdodCAtIDQpOwotCSAgICBwcmludF9wYWdlICh0ZXh0LCBoZWlnaHQgLSA0LCB3aWR0aCAtIDIpOwotCSAgICBwcmludF9wb3NpdGlvbiAoZGlhbG9nLCBoZWlnaHQsIHdpZHRoKTsKLQkgICAgd21vdmUgKGRpYWxvZywgY3VyX3ksIGN1cl94KTsKLQkgICAgd3JlZnJlc2ggKGRpYWxvZyk7Ci0JICAgIGJyZWFrOwotCWNhc2UgJ0onOgkJLyogTmV4dCBsaW5lICovCi0JY2FzZSAnaic6Ci0JY2FzZSBLRVlfRE9XTjoKLQkgICAgaWYgKCFlbmRfcmVhY2hlZCkgewotCQliZWdpbl9yZWFjaGVkID0gMDsKLQkJc2Nyb2xsb2sgKHRleHQsIFRSVUUpOwotCQlzY3JvbGwgKHRleHQpOwkvKiBTY3JvbGwgdGV4dCByZWdpb24gdXAgb25lIGxpbmUgKi8KLQkJc2Nyb2xsb2sgKHRleHQsIEZBTFNFKTsKLQkJcHJpbnRfbGluZSAodGV4dCwgaGVpZ2h0IC0gNSwgd2lkdGggLSAyKTsKLQkJd25vdXRyZWZyZXNoICh0ZXh0KTsKLQkJcHJpbnRfcG9zaXRpb24gKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCk7Ci0JCXdtb3ZlIChkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCi0JCXdyZWZyZXNoIChkaWFsb2cpOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCWNhc2UgS0VZX05QQUdFOgkJLyogTmV4dCBwYWdlICovCi0JY2FzZSAnICc6Ci0JICAgIGlmIChlbmRfcmVhY2hlZCkKLQkJYnJlYWs7Ci0KLQkgICAgYmVnaW5fcmVhY2hlZCA9IDA7Ci0JICAgIHByaW50X3BhZ2UgKHRleHQsIGhlaWdodCAtIDQsIHdpZHRoIC0gMik7Ci0JICAgIHByaW50X3Bvc2l0aW9uIChkaWFsb2csIGhlaWdodCwgd2lkdGgpOwotCSAgICB3bW92ZSAoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwotCSAgICB3cmVmcmVzaCAoZGlhbG9nKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSAnMCc6CQkvKiBCZWdpbm5pbmcgb2YgbGluZSAqLwotCWNhc2UgJ0gnOgkJLyogU2Nyb2xsIGxlZnQgKi8KLQljYXNlICdoJzoKLQljYXNlIEtFWV9MRUZUOgotCSAgICBpZiAoaHNjcm9sbCA8PSAwKQotCQlicmVhazsKLQotCSAgICBpZiAoa2V5ID09ICcwJykKLQkJaHNjcm9sbCA9IDA7Ci0JICAgIGVsc2UKLQkJaHNjcm9sbC0tOwotCSAgICAvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovCi0JICAgIGJhY2tfbGluZXMgKHBhZ2VfbGVuZ3RoKTsKLQkgICAgcHJpbnRfcGFnZSAodGV4dCwgaGVpZ2h0IC0gNCwgd2lkdGggLSAyKTsKLQkgICAgd21vdmUgKGRpYWxvZywgY3VyX3ksIGN1cl94KTsKLQkgICAgd3JlZnJlc2ggKGRpYWxvZyk7Ci0JICAgIGJyZWFrOwotCWNhc2UgJ0wnOgkJLyogU2Nyb2xsIHJpZ2h0ICovCi0JY2FzZSAnbCc6Ci0JY2FzZSBLRVlfUklHSFQ6Ci0JICAgIGlmIChoc2Nyb2xsID49IE1BWF9MRU4pCi0JCWJyZWFrOwotCSAgICBoc2Nyb2xsKys7Ci0JICAgIC8qIFJlcHJpbnQgY3VycmVudCBwYWdlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkgKi8KLQkgICAgYmFja19saW5lcyAocGFnZV9sZW5ndGgpOwotCSAgICBwcmludF9wYWdlICh0ZXh0LCBoZWlnaHQgLSA0LCB3aWR0aCAtIDIpOwotCSAgICB3bW92ZSAoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwotCSAgICB3cmVmcmVzaCAoZGlhbG9nKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBFU0M6Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0KLSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0gICAgZnJlZSAoYnVmKTsKLSAgICBjbG9zZSAoZmQpOwotICAgIHJldHVybiAtMTsJCQkvKiBFU0MgcHJlc3NlZCAqLwotfQotCi0vKgotICogR28gYmFjayAnbicgbGluZXMgaW4gdGV4dCBmaWxlLiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKS4KLSAqICdwYWdlJyB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGRlc2lyZWQgbGluZSBpbiAnYnVmJy4KLSAqLwotc3RhdGljIHZvaWQKLWJhY2tfbGluZXMgKGludCBuKQotewotICAgIGludCBpLCBmcG9zOwotCi0gICAgYmVnaW5fcmVhY2hlZCA9IDA7Ci0gICAgLyogV2UgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVuZF9yZWFjaGVkIGFuZCAhZW5kX3JlYWNoZWQKLSAgICAgICBzaW5jZSBhdCBlbmQgb2YgZmlsZSwgdGhlIGxpbmUgaXMgbm90IGVuZGVkIGJ5IGEgJ1xuJy4KLSAgICAgICBUaGUgY29kZSBpbnNpZGUgJ2lmJyBiYXNpY2FsbHkgZG9lcyBhICctLXBhZ2UnIHRvIG1vdmUgb25lCi0gICAgICAgY2hhcmFjdGVyIGJhY2t3YXJkIHNvIGFzIHRvIHNraXAgJ1xuJyBvZiB0aGUgcHJldmlvdXMgbGluZSAqLwotICAgIGlmICghZW5kX3JlYWNoZWQpIHsKLQkvKiBFaXRoZXIgYmVnaW5uaW5nIG9mIGJ1ZmZlciBvciBiZWdpbm5pbmcgb2YgZmlsZSByZWFjaGVkPyAqLwotCWlmIChwYWdlID09IGJ1ZikgewotCSAgICBpZiAoKGZwb3MgPSBsc2VlayAoZmQsIDAsIFNFRUtfQ1VSKSkgPT0gLTEpIHsKLQkJZW5kd2luICgpOwotCQlmcHJpbnRmIChzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gIgotCQkJICJiYWNrX2xpbmVzKCkuXG4iKTsKLQkJZXhpdCAoLTEpOwotCSAgICB9Ci0JICAgIGlmIChmcG9zID4gYnl0ZXNfcmVhZCkgewkvKiBOb3QgYmVnaW5uaW5nIG9mIGZpbGUgeWV0ICovCi0JCS8qIFdlJ3ZlIHJlYWNoZWQgYmVnaW5uaW5nIG9mIGJ1ZmZlciwgYnV0IG5vdCBiZWdpbm5pbmcgb2YKLQkJICAgZmlsZSB5ZXQsIHNvIHJlYWQgcHJldmlvdXMgcGFydCBvZiBmaWxlIGludG8gYnVmZmVyLgotCQkgICBOb3RlIHRoYXQgd2Ugb25seSBtb3ZlIGJhY2t3YXJkIGZvciBCVUZfU0laRS8yIGJ5dGVzLAotCQkgICBidXQgbm90IEJVRl9TSVpFIGJ5dGVzIHRvIGF2b2lkIHJlLXJlYWRpbmcgYWdhaW4gaW4KLQkJICAgcHJpbnRfcGFnZSgpIGxhdGVyICovCi0JCS8qIFJlYWxseSBwb3NzaWJsZSB0byBtb3ZlIGJhY2t3YXJkIEJVRl9TSVpFLzIgYnl0ZXM/ICovCi0JCWlmIChmcG9zIDwgQlVGX1NJWkUgLyAyICsgYnl0ZXNfcmVhZCkgewotCQkgICAgLyogTm8sIG1vdmUgbGVzcyB0aGVuICovCi0JCSAgICBpZiAobHNlZWsgKGZkLCAwLCBTRUVLX1NFVCkgPT0gLTEpIHsKLQkJCWVuZHdpbiAoKTsKLQkJCWZwcmludGYgKHN0ZGVyciwgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiAiCi0JCQkJICJiYWNrX2xpbmVzKCkuXG4iKTsKLQkJCWV4aXQgKC0xKTsKLQkJICAgIH0KLQkJICAgIHBhZ2UgPSBidWYgKyBmcG9zIC0gYnl0ZXNfcmVhZDsKLQkJfSBlbHNlIHsJLyogTW92ZSBiYWNrd2FyZCBCVUZfU0laRS8yIGJ5dGVzICovCi0JCSAgICBpZiAobHNlZWsgKGZkLCAtKEJVRl9TSVpFIC8gMiArIGJ5dGVzX3JlYWQpLCBTRUVLX0NVUikKLQkJCT09IC0xKSB7Ci0JCQllbmR3aW4gKCk7Ci0JCQlmcHJpbnRmIChzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgIgotCQkJCSAiaW4gYmFja19saW5lcygpLlxuIik7Ci0JCQlleGl0ICgtMSk7Ci0JCSAgICB9Ci0JCSAgICBwYWdlID0gYnVmICsgQlVGX1NJWkUgLyAyOwotCQl9Ci0JCWlmICgoYnl0ZXNfcmVhZCA9IHJlYWQgKGZkLCBidWYsIEJVRl9TSVpFKSkgPT0gLTEpIHsKLQkJICAgIGVuZHdpbiAoKTsKLQkJICAgIGZwcmludGYgKHN0ZGVyciwgIlxuRXJyb3IgcmVhZGluZyBmaWxlIGluIGJhY2tfbGluZXMoKS5cbiIpOwotCQkgICAgZXhpdCAoLTEpOwotCQl9Ci0JCWJ1ZltieXRlc19yZWFkXSA9ICdcMCc7Ci0JICAgIH0gZWxzZSB7CQkvKiBCZWdpbm5pbmcgb2YgZmlsZSByZWFjaGVkICovCi0JCWJlZ2luX3JlYWNoZWQgPSAxOwotCQlyZXR1cm47Ci0JICAgIH0KLQl9Ci0JaWYgKCooLS1wYWdlKSAhPSAnXG4nKSB7CS8qICctLXBhZ2UnIGhlcmUgKi8KLQkgICAgLyogU29tZXRoaW5nJ3Mgd3JvbmcuLi4gKi8KLQkgICAgZW5kd2luICgpOwotCSAgICBmcHJpbnRmIChzdGRlcnIsICJcbkludGVybmFsIGVycm9yIGluIGJhY2tfbGluZXMoKS5cbiIpOwotCSAgICBleGl0ICgtMSk7Ci0JfQotICAgIH0KLSAgICAvKiBHbyBiYWNrICduJyBsaW5lcyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JZG8gewotCSAgICBpZiAocGFnZSA9PSBidWYpIHsKLQkJaWYgKChmcG9zID0gbHNlZWsgKGZkLCAwLCBTRUVLX0NVUikpID09IC0xKSB7Ci0JCSAgICBlbmR3aW4gKCk7Ci0JCSAgICBmcHJpbnRmIChzdGRlcnIsCi0JCQkgICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgaW4gYmFja19saW5lcygpLlxuIik7Ci0JCSAgICBleGl0ICgtMSk7Ci0JCX0KLQkJaWYgKGZwb3MgPiBieXRlc19yZWFkKSB7Ci0JCSAgICAvKiBSZWFsbHkgcG9zc2libGUgdG8gbW92ZSBiYWNrd2FyZCBCVUZfU0laRS8yIGJ5dGVzPyAqLwotCQkgICAgaWYgKGZwb3MgPCBCVUZfU0laRSAvIDIgKyBieXRlc19yZWFkKSB7Ci0JCQkvKiBObywgbW92ZSBsZXNzIHRoZW4gKi8KLQkJCWlmIChsc2VlayAoZmQsIDAsIFNFRUtfU0VUKSA9PSAtMSkgewotCQkJICAgIGVuZHdpbiAoKTsKLQkJCSAgICBmcHJpbnRmIChzdGRlcnIsICJcbkVycm9yIG1vdmluZyBmaWxlIHBvaW50ZXIgIgotCQkJCSAgICAgImluIGJhY2tfbGluZXMoKS5cbiIpOwotCQkJICAgIGV4aXQgKC0xKTsKLQkJCX0KLQkJCXBhZ2UgPSBidWYgKyBmcG9zIC0gYnl0ZXNfcmVhZDsKLQkJICAgIH0gZWxzZSB7CS8qIE1vdmUgYmFja3dhcmQgQlVGX1NJWkUvMiBieXRlcyAqLwotCQkJaWYgKGxzZWVrIChmZCwgLShCVUZfU0laRSAvIDIgKyBieXRlc19yZWFkKSwKLQkJCQkgICBTRUVLX0NVUikgPT0gLTEpIHsKLQkJCSAgICBlbmR3aW4gKCk7Ci0JCQkgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5FcnJvciBtb3ZpbmcgZmlsZSBwb2ludGVyIgotCQkJCSAgICAgIiBpbiBiYWNrX2xpbmVzKCkuXG4iKTsKLQkJCSAgICBleGl0ICgtMSk7Ci0JCQl9Ci0JCQlwYWdlID0gYnVmICsgQlVGX1NJWkUgLyAyOwotCQkgICAgfQotCQkgICAgaWYgKChieXRlc19yZWFkID0gcmVhZCAoZmQsIGJ1ZiwgQlVGX1NJWkUpKSA9PSAtMSkgewotCQkJZW5kd2luICgpOwotCQkJZnByaW50ZiAoc3RkZXJyLCAiXG5FcnJvciByZWFkaW5nIGZpbGUgaW4gIgotCQkJCSAiYmFja19saW5lcygpLlxuIik7Ci0JCQlleGl0ICgtMSk7Ci0JCSAgICB9Ci0JCSAgICBidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOwotCQl9IGVsc2UgewkvKiBCZWdpbm5pbmcgb2YgZmlsZSByZWFjaGVkICovCi0JCSAgICBiZWdpbl9yZWFjaGVkID0gMTsKLQkJICAgIHJldHVybjsKLQkJfQotCSAgICB9Ci0JfSB3aGlsZSAoKigtLXBhZ2UpICE9ICdcbicpOwotICAgIHBhZ2UrKzsKLX0KLQotLyoKLSAqIFByaW50IGEgbmV3IHBhZ2Ugb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkuCi0gKi8KLXN0YXRpYyB2b2lkCi1wcmludF9wYWdlIChXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLSAgICBpbnQgaSwgcGFzc2VkX2VuZCA9IDA7Ci0KLSAgICBwYWdlX2xlbmd0aCA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0JcHJpbnRfbGluZSAod2luLCBpLCB3aWR0aCk7Ci0JaWYgKCFwYXNzZWRfZW5kKQotCSAgICBwYWdlX2xlbmd0aCsrOwotCWlmIChlbmRfcmVhY2hlZCAmJiAhcGFzc2VkX2VuZCkKLQkgICAgcGFzc2VkX2VuZCA9IDE7Ci0gICAgfQotICAgIHdub3V0cmVmcmVzaCAod2luKTsKLX0KLQotLyoKLSAqIFByaW50IGEgbmV3IGxpbmUgb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkgYW5kIHByaW50X3BhZ2UoKS4KLSAqLwotc3RhdGljIHZvaWQKLXByaW50X2xpbmUgKFdJTkRPVyAqIHdpbiwgaW50IHJvdywgaW50IHdpZHRoKQotewotICAgIGludCB5LCB4OwotICAgIGNoYXIgKmxpbmU7Ci0KLSAgICBsaW5lID0gZ2V0X2xpbmUgKCk7Ci0gICAgbGluZSArPSBNSU4gKHN0cmxlbiAobGluZSksIGhzY3JvbGwpOwkvKiBTY3JvbGwgaG9yaXpvbnRhbGx5ICovCi0gICAgd21vdmUgKHdpbiwgcm93LCAwKTsJLyogbW92ZSBjdXJzb3IgdG8gY29ycmVjdCBsaW5lICovCi0gICAgd2FkZGNoICh3aW4sICcgJyk7Ci0gICAgd2FkZG5zdHIgKHdpbiwgbGluZSwgTUlOIChzdHJsZW4gKGxpbmUpLCB3aWR0aCAtIDIpKTsKLQotICAgIGdldHl4ICh3aW4sIHksIHgpOwotICAgIC8qIENsZWFyICdyZXNpZHVlJyBvZiBwcmV2aW91cyBsaW5lICovCi0jaWYgT0xEX05DVVJTRVMKLSAgICB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSB4OyBpKyspCi0JICAgIHdhZGRjaCAod2luLCAnICcpOwotICAgIH0KLSNlbHNlCi0gICAgd2NscnRvZW9sKHdpbik7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFJldHVybiBjdXJyZW50IGxpbmUgb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkgYW5kIHByaW50X2xpbmUoKS4KLSAqICdwYWdlJyBzaG91bGQgcG9pbnQgdG8gc3RhcnQgb2YgY3VycmVudCBsaW5lIGJlZm9yZSBjYWxsaW5nLCBhbmQgd2lsbCBiZQotICogdXBkYXRlZCB0byBwb2ludCB0byBzdGFydCBvZiBuZXh0IGxpbmUuCi0gKi8KLXN0YXRpYyBjaGFyICoKLWdldF9saW5lICh2b2lkKQotewotICAgIGludCBpID0gMCwgZnBvczsKLSAgICBzdGF0aWMgY2hhciBsaW5lW01BWF9MRU4gKyAxXTsKLQotICAgIGVuZF9yZWFjaGVkID0gMDsKLSAgICB3aGlsZSAoKnBhZ2UgIT0gJ1xuJykgewotCWlmICgqcGFnZSA9PSAnXDAnKSB7Ci0JICAgIC8qIEVpdGhlciBlbmQgb2YgZmlsZSBvciBlbmQgb2YgYnVmZmVyIHJlYWNoZWQgKi8KLQkgICAgaWYgKChmcG9zID0gbHNlZWsgKGZkLCAwLCBTRUVLX0NVUikpID09IC0xKSB7Ci0JCWVuZHdpbiAoKTsKLQkJZnByaW50ZiAoc3RkZXJyLCAiXG5FcnJvciBtb3ZpbmcgZmlsZSBwb2ludGVyIGluICIKLQkJCSAiZ2V0X2xpbmUoKS5cbiIpOwotCQlleGl0ICgtMSk7Ci0JICAgIH0KLQkgICAgaWYgKGZwb3MgPCBmaWxlX3NpemUpIHsJLyogTm90IGVuZCBvZiBmaWxlIHlldCAqLwotCQkvKiBXZSd2ZSByZWFjaGVkIGVuZCBvZiBidWZmZXIsIGJ1dCBub3QgZW5kIG9mIGZpbGUgeWV0LAotCQkgICBzbyByZWFkIG5leHQgcGFydCBvZiBmaWxlIGludG8gYnVmZmVyICovCi0JCWlmICgoYnl0ZXNfcmVhZCA9IHJlYWQgKGZkLCBidWYsIEJVRl9TSVpFKSkgPT0gLTEpIHsKLQkJICAgIGVuZHdpbiAoKTsKLQkJICAgIGZwcmludGYgKHN0ZGVyciwgIlxuRXJyb3IgcmVhZGluZyBmaWxlIGluIGdldF9saW5lKCkuXG4iKTsKLQkJICAgIGV4aXQgKC0xKTsKLQkJfQotCQlidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOwotCQlwYWdlID0gYnVmOwotCSAgICB9IGVsc2UgewotCQlpZiAoIWVuZF9yZWFjaGVkKQotCQkgICAgZW5kX3JlYWNoZWQgPSAxOwotCQlicmVhazsKLQkgICAgfQotCX0gZWxzZSBpZiAoaSA8IE1BWF9MRU4pCi0JICAgIGxpbmVbaSsrXSA9ICoocGFnZSsrKTsKLQllbHNlIHsKLQkgICAgLyogVHJ1bmNhdGUgbGluZXMgbG9uZ2VyIHRoYW4gTUFYX0xFTiBjaGFyYWN0ZXJzICovCi0JICAgIGlmIChpID09IE1BWF9MRU4pCi0JCWxpbmVbaSsrXSA9ICdcMCc7Ci0JICAgIHBhZ2UrKzsKLQl9Ci0gICAgfQotICAgIGlmIChpIDw9IE1BWF9MRU4pCi0JbGluZVtpXSA9ICdcMCc7Ci0gICAgaWYgKCFlbmRfcmVhY2hlZCkKLQlwYWdlKys7CQkJLyogbW92ZSBwYXNzICdcbicgKi8KLQotICAgIHJldHVybiBsaW5lOwotfQotCi0vKgotICogUHJpbnQgY3VycmVudCBwb3NpdGlvbgotICovCi1zdGF0aWMgdm9pZAotcHJpbnRfcG9zaXRpb24gKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRoKQotewotICAgIGludCBmcG9zLCBwZXJjZW50OwotCi0gICAgaWYgKChmcG9zID0gbHNlZWsgKGZkLCAwLCBTRUVLX0NVUikpID09IC0xKSB7Ci0JZW5kd2luICgpOwotCWZwcmludGYgKHN0ZGVyciwgIlxuRXJyb3IgbW92aW5nIGZpbGUgcG9pbnRlciBpbiBwcmludF9wb3NpdGlvbigpLlxuIik7Ci0JZXhpdCAoLTEpOwotICAgIH0KLSAgICB3YXR0cnNldCAod2luLCBwb3NpdGlvbl9pbmRpY2F0b3JfYXR0cik7Ci0gICAgd2JrZ2RzZXQgKHdpbiwgcG9zaXRpb25faW5kaWNhdG9yX2F0dHIgJiBBX0NPTE9SKTsKLSAgICBwZXJjZW50ID0gIWZpbGVfc2l6ZSA/Ci0JMTAwIDogKChmcG9zIC0gYnl0ZXNfcmVhZCArIHBhZ2UgLSBidWYpICogMTAwKSAvIGZpbGVfc2l6ZTsKLSAgICB3bW92ZSAod2luLCBoZWlnaHQgLSAzLCB3aWR0aCAtIDkpOwotICAgIHdwcmludHcgKHdpbiwgIiglM2QlJSkiLCBwZXJjZW50KTsKLX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbHhkaWFsb2cvdXRpbC5jIGIvc2NyaXB0cy9seGRpYWxvZy91dGlsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YmNlOWIuLjAwMDAwMDAKLS0tIGEvc2NyaXB0cy9seGRpYWxvZy91dGlsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTkgKzAsMCBAQAotLyoKLSAqICB1dGlsLmMKLSAqCi0gKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQotICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJkaWFsb2cuaCIKLQotCi0vKiB1c2UgY29sb3JzIGJ5IGRlZmF1bHQ/ICovCi1ib29sIHVzZV9jb2xvcnMgPSAxOwotCi1jb25zdCBjaGFyICpiYWNrdGl0bGUgPSBOVUxMOwotCi1jb25zdCBjaGFyICpkaWFsb2dfcmVzdWx0OwotCi0vKiAKLSAqIEF0dHJpYnV0ZSB2YWx1ZXMsIGRlZmF1bHQgaXMgZm9yIG1vbm8gZGlzcGxheQotICovCi1jaHR5cGUgYXR0cmlidXRlc1tdID0KLXsKLSAgICBBX05PUk1BTCwJCQkvKiBzY3JlZW5fYXR0ciAqLwotICAgIEFfTk9STUFMLAkJCS8qIHNoYWRvd19hdHRyICovCi0gICAgQV9OT1JNQUwsCQkJLyogZGlhbG9nX2F0dHIgKi8KLSAgICBBX0JPTEQsCQkJLyogdGl0bGVfYXR0ciAqLwotICAgIEFfTk9STUFMLAkJCS8qIGJvcmRlcl9hdHRyICovCi0gICAgQV9SRVZFUlNFLAkJCS8qIGJ1dHRvbl9hY3RpdmVfYXR0ciAqLwotICAgIEFfRElNLAkJCS8qIGJ1dHRvbl9pbmFjdGl2ZV9hdHRyICovCi0gICAgQV9SRVZFUlNFLAkJCS8qIGJ1dHRvbl9rZXlfYWN0aXZlX2F0dHIgKi8KLSAgICBBX0JPTEQsCQkJLyogYnV0dG9uX2tleV9pbmFjdGl2ZV9hdHRyICovCi0gICAgQV9SRVZFUlNFLAkJCS8qIGJ1dHRvbl9sYWJlbF9hY3RpdmVfYXR0ciAqLwotICAgIEFfTk9STUFMLAkJCS8qIGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZV9hdHRyICovCi0gICAgQV9OT1JNQUwsCQkJLyogaW5wdXRib3hfYXR0ciAqLwotICAgIEFfTk9STUFMLAkJCS8qIGlucHV0Ym94X2JvcmRlcl9hdHRyICovCi0gICAgQV9OT1JNQUwsCQkJLyogc2VhcmNoYm94X2F0dHIgKi8KLSAgICBBX0JPTEQsCQkJLyogc2VhcmNoYm94X3RpdGxlX2F0dHIgKi8KLSAgICBBX05PUk1BTCwJCQkvKiBzZWFyY2hib3hfYm9yZGVyX2F0dHIgKi8KLSAgICBBX0JPTEQsCQkJLyogcG9zaXRpb25faW5kaWNhdG9yX2F0dHIgKi8KLSAgICBBX05PUk1BTCwJCQkvKiBtZW51Ym94X2F0dHIgKi8KLSAgICBBX05PUk1BTCwJCQkvKiBtZW51Ym94X2JvcmRlcl9hdHRyICovCi0gICAgQV9OT1JNQUwsCQkJLyogaXRlbV9hdHRyICovCi0gICAgQV9SRVZFUlNFLAkJCS8qIGl0ZW1fc2VsZWN0ZWRfYXR0ciAqLwotICAgIEFfQk9MRCwJCQkvKiB0YWdfYXR0ciAqLwotICAgIEFfUkVWRVJTRSwJCQkvKiB0YWdfc2VsZWN0ZWRfYXR0ciAqLwotICAgIEFfQk9MRCwJCQkvKiB0YWdfa2V5X2F0dHIgKi8KLSAgICBBX1JFVkVSU0UsCQkJLyogdGFnX2tleV9zZWxlY3RlZF9hdHRyICovCi0gICAgQV9CT0xELAkJCS8qIGNoZWNrX2F0dHIgKi8KLSAgICBBX1JFVkVSU0UsCQkJLyogY2hlY2tfc2VsZWN0ZWRfYXR0ciAqLwotICAgIEFfQk9MRCwJCQkvKiB1YXJyb3dfYXR0ciAqLwotICAgIEFfQk9MRAkJCS8qIGRhcnJvd19hdHRyICovCi19OwotCi0KLSNpbmNsdWRlICJjb2xvcnMuaCIKLQotLyoKLSAqIFRhYmxlIG9mIGNvbG9yIHZhbHVlcwotICovCi1pbnQgY29sb3JfdGFibGVbXVszXSA9Ci17Ci0gICAge1NDUkVFTl9GRywgU0NSRUVOX0JHLCBTQ1JFRU5fSEx9LAotICAgIHtTSEFET1dfRkcsIFNIQURPV19CRywgU0hBRE9XX0hMfSwKLSAgICB7RElBTE9HX0ZHLCBESUFMT0dfQkcsIERJQUxPR19ITH0sCi0gICAge1RJVExFX0ZHLCBUSVRMRV9CRywgVElUTEVfSEx9LAotICAgIHtCT1JERVJfRkcsIEJPUkRFUl9CRywgQk9SREVSX0hMfSwKLSAgICB7QlVUVE9OX0FDVElWRV9GRywgQlVUVE9OX0FDVElWRV9CRywgQlVUVE9OX0FDVElWRV9ITH0sCi0gICAge0JVVFRPTl9JTkFDVElWRV9GRywgQlVUVE9OX0lOQUNUSVZFX0JHLCBCVVRUT05fSU5BQ1RJVkVfSEx9LAotICAgIHtCVVRUT05fS0VZX0FDVElWRV9GRywgQlVUVE9OX0tFWV9BQ1RJVkVfQkcsIEJVVFRPTl9LRVlfQUNUSVZFX0hMfSwKLSAgICB7QlVUVE9OX0tFWV9JTkFDVElWRV9GRywgQlVUVE9OX0tFWV9JTkFDVElWRV9CRywgQlVUVE9OX0tFWV9JTkFDVElWRV9ITH0sCi0gICAge0JVVFRPTl9MQUJFTF9BQ1RJVkVfRkcsIEJVVFRPTl9MQUJFTF9BQ1RJVkVfQkcsIEJVVFRPTl9MQUJFTF9BQ1RJVkVfSEx9LAotICAgIHtCVVRUT05fTEFCRUxfSU5BQ1RJVkVfRkcsIEJVVFRPTl9MQUJFTF9JTkFDVElWRV9CRywKLSAgICAgQlVUVE9OX0xBQkVMX0lOQUNUSVZFX0hMfSwKLSAgICB7SU5QVVRCT1hfRkcsIElOUFVUQk9YX0JHLCBJTlBVVEJPWF9ITH0sCi0gICAge0lOUFVUQk9YX0JPUkRFUl9GRywgSU5QVVRCT1hfQk9SREVSX0JHLCBJTlBVVEJPWF9CT1JERVJfSEx9LAotICAgIHtTRUFSQ0hCT1hfRkcsIFNFQVJDSEJPWF9CRywgU0VBUkNIQk9YX0hMfSwKLSAgICB7U0VBUkNIQk9YX1RJVExFX0ZHLCBTRUFSQ0hCT1hfVElUTEVfQkcsIFNFQVJDSEJPWF9USVRMRV9ITH0sCi0gICAge1NFQVJDSEJPWF9CT1JERVJfRkcsIFNFQVJDSEJPWF9CT1JERVJfQkcsIFNFQVJDSEJPWF9CT1JERVJfSEx9LAotICAgIHtQT1NJVElPTl9JTkRJQ0FUT1JfRkcsIFBPU0lUSU9OX0lORElDQVRPUl9CRywgUE9TSVRJT05fSU5ESUNBVE9SX0hMfSwKLSAgICB7TUVOVUJPWF9GRywgTUVOVUJPWF9CRywgTUVOVUJPWF9ITH0sCi0gICAge01FTlVCT1hfQk9SREVSX0ZHLCBNRU5VQk9YX0JPUkRFUl9CRywgTUVOVUJPWF9CT1JERVJfSEx9LAotICAgIHtJVEVNX0ZHLCBJVEVNX0JHLCBJVEVNX0hMfSwKLSAgICB7SVRFTV9TRUxFQ1RFRF9GRywgSVRFTV9TRUxFQ1RFRF9CRywgSVRFTV9TRUxFQ1RFRF9ITH0sCi0gICAge1RBR19GRywgVEFHX0JHLCBUQUdfSEx9LAotICAgIHtUQUdfU0VMRUNURURfRkcsIFRBR19TRUxFQ1RFRF9CRywgVEFHX1NFTEVDVEVEX0hMfSwKLSAgICB7VEFHX0tFWV9GRywgVEFHX0tFWV9CRywgVEFHX0tFWV9ITH0sCi0gICAge1RBR19LRVlfU0VMRUNURURfRkcsIFRBR19LRVlfU0VMRUNURURfQkcsIFRBR19LRVlfU0VMRUNURURfSEx9LAotICAgIHtDSEVDS19GRywgQ0hFQ0tfQkcsIENIRUNLX0hMfSwKLSAgICB7Q0hFQ0tfU0VMRUNURURfRkcsIENIRUNLX1NFTEVDVEVEX0JHLCBDSEVDS19TRUxFQ1RFRF9ITH0sCi0gICAge1VBUlJPV19GRywgVUFSUk9XX0JHLCBVQVJST1dfSEx9LAotICAgIHtEQVJST1dfRkcsIERBUlJPV19CRywgREFSUk9XX0hMfSwKLX07CQkJCS8qIGNvbG9yX3RhYmxlICovCi0KLS8qCi0gKiBTZXQgd2luZG93IHRvIGF0dHJpYnV0ZSAnYXR0cicKLSAqLwotdm9pZAotYXR0cl9jbGVhciAoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGNodHlwZSBhdHRyKQotewotICAgIGludCBpLCBqOwotCi0gICAgd2F0dHJzZXQgKHdpbiwgYXR0cik7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0Jd21vdmUgKHdpbiwgaSwgMCk7Ci0JZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspCi0JICAgIHdhZGRjaCAod2luLCAnICcpOwotICAgIH0KLSAgICB0b3VjaHdpbiAod2luKTsKLX0KLQotdm9pZCBkaWFsb2dfY2xlYXIgKHZvaWQpCi17Ci0gICAgYXR0cl9jbGVhciAoc3Rkc2NyLCBMSU5FUywgQ09MUywgc2NyZWVuX2F0dHIpOwotICAgIC8qIERpc3BsYXkgYmFja2dyb3VuZCB0aXRsZSBpZiBpdCBleGlzdHMgLi4uIC0gU0xIICovCi0gICAgaWYgKGJhY2t0aXRsZSAhPSBOVUxMKSB7Ci0gICAgICAgIGludCBpOwotCi0gICAgICAgIHdhdHRyc2V0IChzdGRzY3IsIHNjcmVlbl9hdHRyKTsKLSAgICAgICAgbXZ3YWRkc3RyIChzdGRzY3IsIDAsIDEsIChjaGFyICopYmFja3RpdGxlKTsKLSAgICAgICAgd21vdmUgKHN0ZHNjciwgMSwgMSk7Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPCBDT0xTIC0gMTsgaSsrKQotICAgICAgICAgICAgd2FkZGNoIChzdGRzY3IsIEFDU19ITElORSk7Ci0gICAgfQotICAgIHdub3V0cmVmcmVzaCAoc3Rkc2NyKTsKLX0KLQotLyoKLSAqIERvIHNvbWUgaW5pdGlhbGl6YXRpb24gZm9yIGRpYWxvZwotICovCi12b2lkCi1pbml0X2RpYWxvZyAodm9pZCkKLXsKLSAgICBpbml0c2NyICgpOwkJCS8qIEluaXQgY3Vyc2VzICovCi0gICAga2V5cGFkIChzdGRzY3IsIFRSVUUpOwotICAgIGNicmVhayAoKTsKLSAgICBub2VjaG8gKCk7Ci0KLQotICAgIGlmICh1c2VfY29sb3JzKQkvKiBTZXQgdXAgY29sb3JzICovCi0JY29sb3Jfc2V0dXAgKCk7Ci0KLQotICAgIGRpYWxvZ19jbGVhciAoKTsKLX0KLQotLyoKLSAqIFNldHVwIGZvciBjb2xvciBkaXNwbGF5Ci0gKi8KLXZvaWQKLWNvbG9yX3NldHVwICh2b2lkKQotewotICAgIGludCBpOwotCi0gICAgaWYgKGhhc19jb2xvcnMgKCkpIHsJLyogVGVybWluYWwgc3VwcG9ydHMgY29sb3I/ICovCi0Jc3RhcnRfY29sb3IgKCk7Ci0KLQkvKiBJbml0aWFsaXplIGNvbG9yIHBhaXJzICovCi0JZm9yIChpID0gMDsgaSA8IEFUVFJJQlVURV9DT1VOVDsgaSsrKQotCSAgICBpbml0X3BhaXIgKGkgKyAxLCBjb2xvcl90YWJsZVtpXVswXSwgY29sb3JfdGFibGVbaV1bMV0pOwotCi0JLyogU2V0dXAgY29sb3IgYXR0cmlidXRlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBVFRSSUJVVEVfQ09VTlQ7IGkrKykKLQkgICAgYXR0cmlidXRlc1tpXSA9IENfQVRUUiAoY29sb3JfdGFibGVbaV1bMl0sIGkgKyAxKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBFbmQgdXNpbmcgZGlhbG9nIGZ1bmN0aW9ucy4KLSAqLwotdm9pZAotZW5kX2RpYWxvZyAodm9pZCkKLXsKLSAgICBlbmR3aW4gKCk7Ci19Ci0KLQotLyoKLSAqIFByaW50IGEgc3RyaW5nIG9mIHRleHQgaW4gYSB3aW5kb3csIGF1dG9tYXRpY2FsbHkgd3JhcCBhcm91bmQgdG8gdGhlCi0gKiBuZXh0IGxpbmUgaWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZyB0byBmaXQgb24gb25lIGxpbmUuIE5ld2xpbmUKLSAqIGNoYXJhY3RlcnMgJ1xuJyBhcmUgcmVwbGFjZWQgYnkgc3BhY2VzLiAgV2Ugc3RhcnQgb24gYSBuZXcgbGluZQotICogaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYXQgbGVhc3QgNCBub25ibGFua3MgZm9sbG93aW5nIGEgZG91YmxlLXNwYWNlLgotICovCi12b2lkCi1wcmludF9hdXRvd3JhcCAoV0lORE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0aCwgaW50IHksIGludCB4KQotewotICAgIGludCBuZXdsLCBjdXJfeCwgY3VyX3k7Ci0gICAgaW50IGksIHByb21wdF9sZW4sIHJvb20sIHdsZW47Ci0gICAgY2hhciB0ZW1wc3RyW01BWF9MRU4gKyAxXSwgKndvcmQsICpzcCwgKnNwMjsKLQotICAgIHN0cmNweSAodGVtcHN0ciwgcHJvbXB0KTsKLQotICAgIHByb21wdF9sZW4gPSBzdHJsZW4odGVtcHN0cik7Ci0JCi0gICAgLyoKLSAgICAgKiBSZW1vdmUgbmV3bGluZXMKLSAgICAgKi8KLSAgICBmb3IoaT0wOyBpPHByb21wdF9sZW47IGkrKykgewotCWlmKHRlbXBzdHJbaV0gPT0gJ1xuJykgdGVtcHN0cltpXSA9ICcgJzsKLSAgICB9Ci0KLSAgICBpZiAocHJvbXB0X2xlbiA8PSB3aWR0aCAtIHggKiAyKSB7CS8qIElmIHByb21wdCBpcyBzaG9ydCAqLwotCXdtb3ZlICh3aW4sIHksICh3aWR0aCAtIHByb21wdF9sZW4pIC8gMik7Ci0Jd2FkZHN0ciAod2luLCB0ZW1wc3RyKTsKLSAgICB9IGVsc2UgewotCWN1cl94ID0geDsKLQljdXJfeSA9IHk7Ci0JbmV3bCA9IDE7Ci0Jd29yZCA9IHRlbXBzdHI7Ci0Jd2hpbGUgKHdvcmQgJiYgKndvcmQpIHsKLQkgICAgc3AgPSBpbmRleCh3b3JkLCAnICcpOwotCSAgICBpZiAoc3ApCi0JICAgICAgICAqc3ArKyA9IDA7Ci0KLQkgICAgLyogV3JhcCB0byBuZXh0IGxpbmUgaWYgZWl0aGVyIHRoZSB3b3JkIGRvZXMgbm90IGZpdCwKLQkgICAgICAgb3IgaXQgaXMgdGhlIGZpcnN0IHdvcmQgb2YgYSBuZXcgc2VudGVuY2UsIGFuZCBpdCBpcwotCSAgICAgICBzaG9ydCwgYW5kIHRoZSBuZXh0IHdvcmQgZG9lcyBub3QgZml0LiAqLwotCSAgICByb29tID0gd2lkdGggLSBjdXJfeDsKLQkgICAgd2xlbiA9IHN0cmxlbih3b3JkKTsKLQkgICAgaWYgKHdsZW4gPiByb29tIHx8Ci0JICAgICAgIChuZXdsICYmIHdsZW4gPCA0ICYmIHNwICYmIHdsZW4rMStzdHJsZW4oc3ApID4gcm9vbQotCQkgICAgICYmICghKHNwMiA9IGluZGV4KHNwLCAnICcpKSB8fCB3bGVuKzErKHNwMi1zcCkgPiByb29tKSkpIHsKLQkJY3VyX3krKzsKLQkJY3VyX3ggPSB4OwotCSAgICB9Ci0JICAgIHdtb3ZlICh3aW4sIGN1cl95LCBjdXJfeCk7Ci0JICAgIHdhZGRzdHIgKHdpbiwgd29yZCk7Ci0JICAgIGdldHl4ICh3aW4sIGN1cl95LCBjdXJfeCk7Ci0JICAgIGN1cl94Kys7Ci0JICAgIGlmIChzcCAmJiAqc3AgPT0gJyAnKSB7Ci0JICAgICAgICBjdXJfeCsrOwkvKiBkb3VibGUgc3BhY2UgKi8KLQkJd2hpbGUgKCorK3NwID09ICcgJyk7Ci0JCW5ld2wgPSAxOwotCSAgICB9IGVsc2UKLQkgICAgICAgIG5ld2wgPSAwOwotCSAgICB3b3JkID0gc3A7Ci0JfQotICAgIH0KLX0KLQotLyoKLSAqIFByaW50IGEgYnV0dG9uCi0gKi8KLXZvaWQKLXByaW50X2J1dHRvbiAoV0lORE9XICogd2luLCBjb25zdCBjaGFyICpsYWJlbCwgaW50IHksIGludCB4LCBpbnQgc2VsZWN0ZWQpCi17Ci0gICAgaW50IGksIHRlbXA7Ci0KLSAgICB3bW92ZSAod2luLCB5LCB4KTsKLSAgICB3YXR0cnNldCAod2luLCBzZWxlY3RlZCA/IGJ1dHRvbl9hY3RpdmVfYXR0ciA6IGJ1dHRvbl9pbmFjdGl2ZV9hdHRyKTsKLSAgICB3YWRkc3RyICh3aW4sICI8Iik7Ci0gICAgdGVtcCA9IHN0cnNwbiAobGFiZWwsICIgIik7Ci0gICAgbGFiZWwgKz0gdGVtcDsKLSAgICB3YXR0cnNldCAod2luLCBzZWxlY3RlZCA/IGJ1dHRvbl9sYWJlbF9hY3RpdmVfYXR0cgotCSAgICAgIDogYnV0dG9uX2xhYmVsX2luYWN0aXZlX2F0dHIpOwotICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wOyBpKyspCi0Jd2FkZGNoICh3aW4sICcgJyk7Ci0gICAgd2F0dHJzZXQgKHdpbiwgc2VsZWN0ZWQgPyBidXR0b25fa2V5X2FjdGl2ZV9hdHRyCi0JICAgICAgOiBidXR0b25fa2V5X2luYWN0aXZlX2F0dHIpOwotICAgIHdhZGRjaCAod2luLCBsYWJlbFswXSk7Ci0gICAgd2F0dHJzZXQgKHdpbiwgc2VsZWN0ZWQgPyBidXR0b25fbGFiZWxfYWN0aXZlX2F0dHIKLQkgICAgICA6IGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZV9hdHRyKTsKLSAgICB3YWRkc3RyICh3aW4sIChjaGFyICopbGFiZWwgKyAxKTsKLSAgICB3YXR0cnNldCAod2luLCBzZWxlY3RlZCA/IGJ1dHRvbl9hY3RpdmVfYXR0ciA6IGJ1dHRvbl9pbmFjdGl2ZV9hdHRyKTsKLSAgICB3YWRkc3RyICh3aW4sICI+Iik7Ci0gICAgd21vdmUgKHdpbiwgeSwgeCArIHRlbXAgKyAxKTsKLX0KLQotLyoKLSAqIERyYXcgYSByZWN0YW5ndWxhciBib3ggd2l0aCBsaW5lIGRyYXdpbmcgY2hhcmFjdGVycwotICovCi12b2lkCi1kcmF3X2JveCAoV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCwKLQkgIGNodHlwZSBib3gsIGNodHlwZSBib3JkZXIpCi17Ci0gICAgaW50IGksIGo7Ci0KLSAgICB3YXR0cnNldCAod2luLCAwKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLQl3bW92ZSAod2luLCB5ICsgaSwgeCk7Ci0JZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspCi0JICAgIGlmICghaSAmJiAhaikKLQkJd2FkZGNoICh3aW4sIGJvcmRlciB8IEFDU19VTENPUk5FUik7Ci0JICAgIGVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSAmJiAhaikKLQkJd2FkZGNoICh3aW4sIGJvcmRlciB8IEFDU19MTENPUk5FUik7Ci0JICAgIGVsc2UgaWYgKCFpICYmIGogPT0gd2lkdGggLSAxKQotCQl3YWRkY2ggKHdpbiwgYm94IHwgQUNTX1VSQ09STkVSKTsKLQkgICAgZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmIGogPT0gd2lkdGggLSAxKQotCQl3YWRkY2ggKHdpbiwgYm94IHwgQUNTX0xSQ09STkVSKTsKLQkgICAgZWxzZSBpZiAoIWkpCi0JCXdhZGRjaCAod2luLCBib3JkZXIgfCBBQ1NfSExJTkUpOwotCSAgICBlbHNlIGlmIChpID09IGhlaWdodCAtIDEpCi0JCXdhZGRjaCAod2luLCBib3ggfCBBQ1NfSExJTkUpOwotCSAgICBlbHNlIGlmICghaikKLQkJd2FkZGNoICh3aW4sIGJvcmRlciB8IEFDU19WTElORSk7Ci0JICAgIGVsc2UgaWYgKGogPT0gd2lkdGggLSAxKQotCQl3YWRkY2ggKHdpbiwgYm94IHwgQUNTX1ZMSU5FKTsKLQkgICAgZWxzZQotCQl3YWRkY2ggKHdpbiwgYm94IHwgJyAnKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBEcmF3IHNoYWRvd3MgYWxvbmcgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZSB0byBnaXZlIGEgbW9yZSAzRCBsb29rCi0gKiB0byB0aGUgYm94ZXMKLSAqLwotdm9pZAotZHJhd19zaGFkb3cgKFdJTkRPVyAqIHdpbiwgaW50IHksIGludCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCi17Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoaGFzX2NvbG9ycyAoKSkgewkvKiBXaGV0aGVyIHRlcm1pbmFsIHN1cHBvcnRzIGNvbG9yPyAqLwotCXdhdHRyc2V0ICh3aW4sIHNoYWRvd19hdHRyKTsKLQl3bW92ZSAod2luLCB5ICsgaGVpZ2h0LCB4ICsgMik7Ci0JZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCi0JICAgIHdhZGRjaCAod2luLCB3aW5jaCAod2luKSAmIEFfQ0hBUlRFWFQpOwotCWZvciAoaSA9IHkgKyAxOyBpIDwgeSArIGhlaWdodCArIDE7IGkrKykgewotCSAgICB3bW92ZSAod2luLCBpLCB4ICsgd2lkdGgpOwotCSAgICB3YWRkY2ggKHdpbiwgd2luY2ggKHdpbikgJiBBX0NIQVJURVhUKTsKLQkgICAgd2FkZGNoICh3aW4sIHdpbmNoICh3aW4pICYgQV9DSEFSVEVYVCk7Ci0JfQotCXdub3V0cmVmcmVzaCAod2luKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiAgUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYWxwaGFiZXRpYyBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcuCi0gKi8KLWludAotZmlyc3RfYWxwaGEoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpleGVtcHQpCi17Ci0JaW50IGksIGluX3BhcmVuPTAsIGM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKHN0cmluZyk7IGkrKykgewotCQljID0gdG9sb3dlcihzdHJpbmdbaV0pOwotCi0JCWlmIChzdHJjaHIoIjxbKCIsIGMpKSArK2luX3BhcmVuOwotCQlpZiAoc3RyY2hyKCI+XSkiLCBjKSAmJiBpbl9wYXJlbiA+IDApIC0taW5fcGFyZW47Ci0KLQkJaWYgKCghIGluX3BhcmVuKSAmJiBpc2FscGhhKGMpICYmIAotCQkgICAgIHN0cmNocihleGVtcHQsIGMpID09IDApCi0JCQlyZXR1cm4gaTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbHhkaWFsb2cveWVzbm8uYyBiL3NjcmlwdHMvbHhkaWFsb2cveWVzbm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFmY2MyNS4uMDAwMDAwMAotLS0gYS9zY3JpcHRzL2x4ZGlhbG9nL3llc25vLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqICB5ZXNuby5jIC0tIGltcGxlbWVudHMgdGhlIHllcy9ubyBib3gKLSAqCi0gKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQotICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJkaWFsb2cuaCIKLQotLyoKLSAqIERpc3BsYXkgdGVybWluYXRpb24gYnV0dG9ucwotICovCi1zdGF0aWMgdm9pZAotcHJpbnRfYnV0dG9ucyhXSU5ET1cgKmRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0ZWQpCi17Ci0gICAgaW50IHggPSB3aWR0aCAvIDIgLSAxMDsKLSAgICBpbnQgeSA9IGhlaWdodCAtIDI7Ci0KLSAgICBwcmludF9idXR0b24gKGRpYWxvZywgIiBZZXMgIiwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7Ci0gICAgcHJpbnRfYnV0dG9uIChkaWFsb2csICIgIE5vICAiLCB5LCB4ICsgMTMsIHNlbGVjdGVkID09IDEpOwotCi0gICAgd21vdmUoZGlhbG9nLCB5LCB4KzEgKyAxMypzZWxlY3RlZCApOwotICAgIHdyZWZyZXNoIChkaWFsb2cpOwotfQotCi0vKgotICogRGlzcGxheSBhIGRpYWxvZyBib3ggd2l0aCB0d28gYnV0dG9ucyAtIFllcyBhbmQgTm8KLSAqLwotaW50Ci1kaWFsb2dfeWVzbm8gKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLSAgICBpbnQgaSwgeCwgeSwga2V5ID0gMCwgYnV0dG9uID0gMDsKLSAgICBXSU5ET1cgKmRpYWxvZzsKLQotICAgIC8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLwotICAgIHggPSAoQ09MUyAtIHdpZHRoKSAvIDI7Ci0gICAgeSA9IChMSU5FUyAtIGhlaWdodCkgLyAyOwotCi0gICAgZHJhd19zaGFkb3cgKHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7Ci0KLSAgICBkaWFsb2cgPSBuZXd3aW4gKGhlaWdodCwgd2lkdGgsIHksIHgpOwotICAgIGtleXBhZCAoZGlhbG9nLCBUUlVFKTsKLQotICAgIGRyYXdfYm94IChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsIGRpYWxvZ19hdHRyLCBib3JkZXJfYXR0cik7Ci0gICAgd2F0dHJzZXQgKGRpYWxvZywgYm9yZGVyX2F0dHIpOwotICAgIG12d2FkZGNoIChkaWFsb2csIGhlaWdodC0zLCAwLCBBQ1NfTFRFRSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQotCXdhZGRjaCAoZGlhbG9nLCBBQ1NfSExJTkUpOwotICAgIHdhdHRyc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyKTsKLSAgICB3YWRkY2ggKGRpYWxvZywgQUNTX1JURUUpOwotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwgJiYgc3RybGVuKHRpdGxlKSA+PSB3aWR0aC0yICkgewotCS8qIHRydW5jYXRlIGxvbmcgdGl0bGUgLS0gbWVjICovCi0JY2hhciAqIHRpdGxlMiA9IG1hbGxvYyh3aWR0aC0yKzEpOwotCW1lbWNweSggdGl0bGUyLCB0aXRsZSwgd2lkdGgtMiApOwotCXRpdGxlMlt3aWR0aC0yXSA9ICdcMCc7Ci0JdGl0bGUgPSB0aXRsZTI7Ci0gICAgfQotCi0gICAgaWYgKHRpdGxlICE9IE5VTEwpIHsKLQl3YXR0cnNldCAoZGlhbG9nLCB0aXRsZV9hdHRyKTsKLQltdndhZGRjaCAoZGlhbG9nLCAwLCAod2lkdGggLSBzdHJsZW4odGl0bGUpKS8yIC0gMSwgJyAnKTsKLQl3YWRkc3RyIChkaWFsb2csIChjaGFyICopdGl0bGUpOwotCXdhZGRjaCAoZGlhbG9nLCAnICcpOwotICAgIH0KLQotICAgIHdhdHRyc2V0IChkaWFsb2csIGRpYWxvZ19hdHRyKTsKLSAgICBwcmludF9hdXRvd3JhcCAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwgMyk7Ci0KLSAgICBwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7Ci0KLSAgICB3aGlsZSAoa2V5ICE9IEVTQykgewotCWtleSA9IHdnZXRjaCAoZGlhbG9nKTsKLQlzd2l0Y2ggKGtleSkgewotCWNhc2UgJ1knOgotCWNhc2UgJ3knOgotCSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0JICAgIHJldHVybiAwOwotCWNhc2UgJ04nOgotCWNhc2UgJ24nOgotCSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0JICAgIHJldHVybiAxOwotCi0JY2FzZSBUQUI6Ci0JY2FzZSBLRVlfTEVGVDoKLQljYXNlIEtFWV9SSUdIVDoKLQkgICAgYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApCi0JCQk/IDEgOiAoYnV0dG9uID4gMSA/IDAgOiBidXR0b24pOwotCi0JICAgIHByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOwotCSAgICB3cmVmcmVzaCAoZGlhbG9nKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSAnICc6Ci0JY2FzZSAnXG4nOgotCSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0JICAgIHJldHVybiBidXR0b247Ci0JY2FzZSBFU0M6Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0KLSAgICBkZWx3aW4gKGRpYWxvZyk7Ci0gICAgcmV0dXJuIC0xOwkJCS8qIEVTQyBwcmVzc2VkICovCi19CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggM2JlZDA5ZS4uZjcwZmYxMyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMzI2LDggKzMyNiw4IEBACiAJcmVsZWFzZV9maWxlKGluZm8tPmhkciwgaW5mby0+c2l6ZSk7CiB9CiAKLSNkZWZpbmUgQ1JDX1BGWCAgICAgTU9EVUxFX1NZTUJPTF9QUkVGSVggIl9fY3JjXyIKLSNkZWZpbmUgS1NZTVRBQl9QRlggTU9EVUxFX1NZTUJPTF9QUkVGSVggIl9fa3N5bXRhYl8iCisjZGVmaW5lIENSQ19QRlggICAgICJfX2NyY18iCisjZGVmaW5lIEtTWU1UQUJfUEZYICJfX2tzeW10YWJfIgogCiB2b2lkCiBoYW5kbGVfbW9kdmVyc2lvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZWxmX2luZm8gKmluZm8sCkBAIC01MzksMTAgKzUzOSw5IEBACiAJYnVmX3ByaW50ZihiLCAiXG4iKTsKIAlidWZfcHJpbnRmKGIsICJNT0RVTEVfSU5GTyh2ZXJtYWdpYywgVkVSTUFHSUNfU1RSSU5HKTtcbiIpOwogCWJ1Zl9wcmludGYoYiwgIlxuIik7Ci0JYnVmX3ByaW50ZihiLCAiI3VuZGVmIHVuaXhcbiIpOyAvKiBXZSBoYXZlIGEgbW9kdWxlIGNhbGxlZCAidW5peCIgKi8KIAlidWZfcHJpbnRmKGIsICJzdHJ1Y3QgbW9kdWxlIF9fdGhpc19tb2R1bGVcbiIpOwogCWJ1Zl9wcmludGYoYiwgIl9fYXR0cmlidXRlX18oKHNlY3Rpb24oXCIuZ251LmxpbmtvbmNlLnRoaXNfbW9kdWxlXCIpKSkgPSB7XG4iKTsKLQlidWZfcHJpbnRmKGIsICIgLm5hbWUgPSBfX3N0cmluZ2lmeShLQlVJTERfTU9ETkFNRSksXG4iKTsKKwlidWZfcHJpbnRmKGIsICIgLm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbiIpOwogCWlmIChtb2QtPmhhc19pbml0KQogCQlidWZfcHJpbnRmKGIsICIgLmluaXQgPSBpbml0X21vZHVsZSxcbiIpOwogCWlmIChtb2QtPmhhc19jbGVhbnVwKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCmluZGV4IGYzZTdlOGUuLmMyMDFlZjAwIDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCkBAIC04NCw3ICs4NCw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLlBIT05ZOiB0YXIlcGtnCiB0YXIlcGtnOgotCSQoTUFLRSkKKwkkKE1BS0UpIEtCVUlMRF9TUkM9CiAJJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyICRACiAKIGNsZWFuLWRpcnMgKz0gJChvYmp0cmVlKS90YXItaW5zdGFsbC8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhciBiL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgppbmRleCBkOGZmZmU2Li44OGI1MjgxIDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKKysrIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCkBAIC0xLDkgKzEsOSBAQAogIyEvYmluL3NoCiAKICMKLSMgYnVpbGR0YXIgMC4wLjMKKyMgYnVpbGR0YXIgMC4wLjQKICMKLSMgKEMpIDIwMDQtMjAwNSBieSBKYW4tQmVuZWRpY3QgR2xhdyA8amJnbGF3QGx1Zy1vd2wuZGU+CisjIChDKSAyMDA0LTIwMDYgYnkgSmFuLUJlbmVkaWN0IEdsYXcgPGpiZ2xhd0BsdWctb3dsLmRlPgogIwogIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGNvbXBpbGUgYSB0YXJiYWxsIGZyb20gdGhlIGN1cnJlbnRseQogIyBwcmVwYXJlZCBrZXJuZWwuIEJhc2VkIHVwb24gdGhlIGJ1aWxkZGViIHNjcmlwdCBmcm9tCkBAIC0xNSw5ICsxNSw4IEBACiAjCiAjIFNvbWUgdmFyaWFibGVzIGFuZCBzZXR0aW5ncyB1c2VkIHRocm91Z2hvdXQgdGhlIHNjcmlwdAogIwotdmVyc2lvbj0iJHtWRVJTSU9OfS4ke1BBVENITEVWRUx9LiR7U1VCTEVWRUx9JHtFWFRSQVZFUlNJT059JHtFWFRSQU5BTUV9IgogdG1wZGlyPSIke29ianRyZWV9L3Rhci1pbnN0YWxsIgotdGFyYmFsbD0iJHtvYmp0cmVlfS9saW51eC0ke3ZlcnNpb259LnRhciIKK3RhcmJhbGw9IiR7b2JqdHJlZX0vbGludXgtJHtLRVJORUxSRUxFQVNFfS50YXIiCiAKIAogIwpAQCAtNTMsMjEgKzUyLDE3IEBACiAjCiAjIFRyeSB0byBpbnN0YWxsIG1vZHVsZXMKICMKLWlmICEgbWFrZSBJTlNUQUxMX01PRF9QQVRIPSIke3RtcGRpcn0iIG1vZHVsZXNfaW5zdGFsbDsgdGhlbgotCWVjaG8gIiIgPiYyCi0JZWNobyAiSWdub3JpbmcgZXJyb3IgYXQgbW9kdWxlX2luc3RhbGwgdGltZSwgc2luY2UgdGhhdCBjb3VsZCBiZSIgPiYyCi0JZWNobyAiYSByZXN1bHQgb2YgbWlzc2luZyBsb2NhbCBtb2R1dGlscy9tb2R1bGUtaW5pdC10b29scywiID4mMgotCWVjaG8gIm9yIHlvdSBqdXN0IGRpZG4ndCBjb21waWxlIGluIG1vZHVsZSBzdXBwb3J0IGF0IGFsbC4uLiIgPiYyCi0JZWNobyAiIiA+JjIKK2lmIGdyZXAgLXEgJ15DT05GSUdfTU9EVUxFUz15JyAiJHtvYmp0cmVlfS8uY29uZmlnIjsgdGhlbgorCW1ha2UgQVJDSD0iJHtBUkNIfSIgTz0iJHtvYmp0cmVlfSIgS0JVSUxEX1NSQz0gSU5TVEFMTF9NT0RfUEFUSD0iJHt0bXBkaXJ9IiBtb2R1bGVzX2luc3RhbGwKIGZpCiAKIAogIwogIyBJbnN0YWxsIGJhc2ljIGtlcm5lbCBmaWxlcwogIwotY3AgLXYgLS0gU3lzdGVtLm1hcCAiJHt0bXBkaXJ9L2Jvb3QvU3lzdGVtLm1hcC0ke3ZlcnNpb259IgotY3AgLXYgLS0gLmNvbmZpZyAiJHt0bXBkaXJ9L2Jvb3QvY29uZmlnLSR7dmVyc2lvbn0iCi1jcCAtdiAtLSB2bWxpbnV4ICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7dmVyc2lvbn0iCitjcCAtdiAtLSAiJHtvYmp0cmVlfS9TeXN0ZW0ubWFwIiAiJHt0bXBkaXJ9L2Jvb3QvU3lzdGVtLm1hcC0ke0tFUk5FTFJFTEVBU0V9IgorY3AgLXYgLS0gIiR7b2JqdHJlZX0vLmNvbmZpZyIgIiR7dG1wZGlyfS9ib290L2NvbmZpZy0ke0tFUk5FTFJFTEVBU0V9IgorY3AgLXYgLS0gIiR7b2JqdHJlZX0vdm1saW51eCIgIiR7dG1wZGlyfS9ib290L3ZtbGludXgtJHtLRVJORUxSRUxFQVNFfSIKIAogCiAjCkBAIC03NSwxNyArNzAsMTcgQEAKICMKIGNhc2UgIiR7QVJDSH0iIGluCiAJaTM4NikKLQkJWyAtZiBhcmNoL2kzODYvYm9vdC9iekltYWdlIF0gJiYgY3AgLXYgLS0gYXJjaC9pMzg2L2Jvb3QvYnpJbWFnZSAiJHt0bXBkaXJ9L2Jvb3Qvdm1saW51ei0ke3ZlcnNpb259IgorCQlbIC1mICIke29ianRyZWV9L2FyY2gvaTM4Ni9ib290L2J6SW1hZ2UiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vYXJjaC9pMzg2L2Jvb3QvYnpJbWFnZSIgIiR7dG1wZGlyfS9ib290L3ZtbGludXotJHtLRVJORUxSRUxFQVNFfSIKIAkJOzsKIAlhbHBoYSkKLQkJWyAtZiBhcmNoL2FscGhhL2Jvb3Qvdm1saW51eC5neiBdICYmIGNwIC12IC0tIGFyY2gvYWxwaGEvYm9vdC92bWxpbnV4Lmd6ICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7dmVyc2lvbn0iCisJCVsgLWYgIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7S0VSTkVMUkVMRUFTRX0iCiAJCTs7CiAJdmF4KQotCQlbIC1mIHZtbGludXguU1lTIF0gJiYgY3AgLXYgLS0gdm1saW51eC5TWVMgIiR7dG1wZGlyfS9ib290L3ZtbGludXgtJHt2ZXJzaW9ufS5TWVMiCi0JCVsgLWYgdm1saW51eC5kc2sgXSAmJiBjcCAtdiAtLSB2bWxpbnV4LmRzayAiJHt0bXBkaXJ9L2Jvb3Qvdm1saW51eC0ke3ZlcnNpb259LmRzayIKKwkJWyAtZiAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgXSAmJiBjcCAtdiAtLSAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgIiR7dG1wZGlyfS9ib290L3ZtbGludXgtJHtLRVJORUxSRUxFQVNFfS5TWVMiCisJCVsgLWYgIiR7b2JqdHJlZX0vdm1saW51eC5kc2siIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vdm1saW51eC5kc2siICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7S0VSTkVMUkVMRUFTRX0uZHNrIgogCQk7OwogCSopCi0JCVsgLWYgIiR7S0JVSUxEX0lNQUdFfSIgXSAmJiBjcCAtdiAtLSAiJHtLQlVJTERfSU1BR0V9IiAiJHt0bXBkaXJ9L2Jvb3Qvdm1saW51eC1rYnVpbGQtJHt2ZXJzaW9ufSIKKwkJWyAtZiAiJHtLQlVJTERfSU1BR0V9IiBdICYmIGNwIC12IC0tICIke0tCVUlMRF9JTUFHRX0iICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LWtidWlsZC0ke0tFUk5FTFJFTEVBU0V9IgogCQllY2hvICIiID4mMgogCQllY2hvICcqKiAqKiAqKiAgV0FSTklORyAgKiogKiogKionID4mMgogCQllY2hvICIiID4mMgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYXRjaC1rZXJuZWwgYi9zY3JpcHRzL3BhdGNoLWtlcm5lbAppbmRleCBmMmQ0N2NhLi42N2U0YjE4IDEwMDc1NQotLS0gYS9zY3JpcHRzL3BhdGNoLWtlcm5lbAorKysgYi9zY3JpcHRzL3BhdGNoLWtlcm5lbApAQCAtNDUsNyArNDUsNyBAQAogIyB1cGRhdGUgdXNhZ2UgbWVzc2FnZTsKICMgZml4IHNvbWUgd2hpdGVzcGFjZSBkYW1hZ2U7CiAjIGJlIHNtYXJ0ZXIgYWJvdXQgc3RvcHBpbmcgd2hlbiBjdXJyZW50IHZlcnNpb24gaXMgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkOwotIwlSYW5keSBEdW5sYXAgPHJkZHVubGFwQG9zZGwub3JnPiwgMjAwNC1BVUctMTguCisjCVJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+LCAyMDA0LUFVRy0xOC4KICMKICMgQWRkIGJldHRlciBzdXBwb3J0IGZvciAobm9uLWluY3JlbWVudGFsKSAyLjYueC55IHBhdGNoZXM7CiAjIElmIGFuIGVuZGluZyB2ZXJzaW9uIG51bWJlciBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IGF1dG9tYXRpY2FsbHkKQEAgLTU2LDcgKzU2LDcgQEAKICMgcGF0Y2gta2VybmVsIGRvZXMgbm90IG5vcm1hbGx5IHN1cHBvcnQgcmV2ZXJzZSBwYXRjaGluZywgYnV0IGRvZXMgc28gd2hlbgogIyBhcHBseWluZyBFWFRSQVZFUlNJT04gKHgueSkgcGF0Y2hlcywgc28gdGhhdCBtb3ZpbmcgZnJvbSAyLjYuMTEueSB0byAyLjYuMTEuegogIyBpcyBlYXN5IGFuZCBoYW5kbGVkIGJ5IHRoZSBzY3JpcHQgKHJldmVyc2UgMi42LjExLnkgYW5kIGFwcGx5IDIuNi4xMS56KS4KLSMJUmFuZHkgRHVubGFwIDxyZGR1bmxhcEBvc2RsLm9yZz4sIDIwMDUtQVBSLTA4LgorIwlSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PiwgMjAwNS1BUFItMDguCiAKIFBOQU1FPXBhdGNoLWtlcm5lbAogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9LY29uZmlnIGIvc2VjdXJpdHkvS2NvbmZpZwppbmRleCA2NGQzZjFlLi4zNGY1OTM0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9LY29uZmlnCisrKyBiL3NlY3VyaXR5L0tjb25maWcKQEAgLTU0LDYgKzU0LDE5IEBACiAJICBpbXBsZW1lbnQgc29ja2V0IGFuZCBuZXR3b3JraW5nIGFjY2VzcyBjb250cm9scy4KIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKK2NvbmZpZyBTRUNVUklUWV9ORVRXT1JLX1hGUk0KKwlib29sICJYRlJNIChJUFNlYykgTmV0d29ya2luZyBTZWN1cml0eSBIb29rcyIKKwlkZXBlbmRzIG9uIFhGUk0gJiYgU0VDVVJJVFlfTkVUV09SSworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgWEZSTSAoSVBTZWMpIG5ldHdvcmtpbmcgc2VjdXJpdHkgaG9va3MuCisJICBJZiBlbmFibGVkLCBhIHNlY3VyaXR5IG1vZHVsZSBjYW4gdXNlIHRoZXNlIGhvb2tzIHRvCisJICBpbXBsZW1lbnQgcGVyLXBhY2tldCBhY2Nlc3MgY29udHJvbHMgYmFzZWQgb24gbGFiZWxzCisJICBkZXJpdmVkIGZyb20gSVBTZWMgcG9saWN5LiAgTm9uLUlQU2VjIGNvbW11bmljYXRpb25zIGFyZQorCSAgZGVzaWduYXRlZCBhcyB1bmxhYmVsbGVkLCBhbmQgb25seSBzb2NrZXRzIGF1dGhvcml6ZWQKKwkgIHRvIGNvbW11bmljYXRlIHVubGFiZWxsZWQgZGF0YSBjYW4gc2VuZCB3aXRob3V0IHVzaW5nCisJICBJUFNlYy4KKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCisKIGNvbmZpZyBTRUNVUklUWV9DQVBBQklMSVRJRVMKIAl0cmlzdGF0ZSAiRGVmYXVsdCBMaW51eCBDYXBhYmlsaXRpZXMiCiAJZGVwZW5kcyBvbiBTRUNVUklUWQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvZHVtbXkuYyBiL3NlY3VyaXR5L2R1bW15LmMKaW5kZXggM2NhNWYyYi4uYTE1YzU0NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvZHVtbXkuYworKysgYi9zZWN1cml0eS9kdW1teS5jCkBAIC03NzYsOCArNzc2LDQyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtbXlfc2tfZnJlZV9zZWN1cml0eSAoc3RydWN0IHNvY2sgKnNrKQogewogfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGR1bW15X3NrX2dldHNpZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aSAqZmwsIHU4IGRpcikKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQorc3RhdGljIGludCBkdW1teV94ZnJtX3BvbGljeV9hbGxvY19zZWN1cml0eShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGR1bW15X3hmcm1fcG9saWN5X2Nsb25lX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfeGZybV9wb2xpY3lfZnJlZV9zZWN1cml0eShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQoreworfQorCitzdGF0aWMgaW50IGR1bW15X3hmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfeGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3N0YXRlICp4KQoreworfQorCitzdGF0aWMgaW50IGR1bW15X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB1MzIgc2tfc2lkLCB1OCBkaXIpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSAqLwogc3RhdGljIGludCBkdW1teV9yZWdpc3Rlcl9zZWN1cml0eSAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTk3MCw3ICsxMDA0LDE2IEBACiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBzb2NrZXRfZ2V0cGVlcnNlYyk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBza19hbGxvY19zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBza19mcmVlX3NlY3VyaXR5KTsKLSNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc2tfZ2V0c2lkKTsKKyAjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KKyNpZmRlZiAgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQorCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfYWxsb2Nfc2VjdXJpdHkpOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfY2xvbmVfc2VjdXJpdHkpOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfZnJlZV9zZWN1cml0eSk7CisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5KTsKKwlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHhmcm1fc3RhdGVfZnJlZV9zZWN1cml0eSk7CisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3BvbGljeV9sb29rdXApOworI2VuZGlmCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gKi8KICNpZmRlZiBDT05GSUdfS0VZUwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywga2V5X2FsbG9jKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIGtleV9mcmVlKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUgYi9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlCmluZGV4IGIwMzhjZDAuLjA2ZDU0ZDkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZQpAQCAtOCw1ICs4LDcgQEAKIAogc2VsaW51eC0kKENPTkZJR19TRUNVUklUWV9ORVRXT1JLKSArPSBuZXRpZi5vCiAKK3NlbGludXgtJChDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNKSArPSB4ZnJtLm8KKwogRVhUUkFfQ0ZMQUdTICs9IC1Jc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlCiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBmYzc3NDQzLi4zZDQ5NmVhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAiYXZjLmgiCiAjaW5jbHVkZSAib2Jqc2VjLmgiCiAjaW5jbHVkZSAibmV0aWYuaCIKKyNpbmNsdWRlICJ4ZnJtLmgiCiAKICNkZWZpbmUgWEFUVFJfU0VMSU5VWF9TVUZGSVggInNlbGludXgiCiAjZGVmaW5lIFhBVFRSX05BTUVfU0VMSU5VWCBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU0VMSU5VWF9TVUZGSVgKQEAgLTMzNDksNiArMzM1MCwxMCBAQAogCQllcnIgPSBhdmNfaGFzX3Blcm0oc29ja19zaWQsIHBvcnRfc2lkLAogCQkJCSAgIHNvY2tfY2xhc3MsIHJlY3ZfcGVybSwgJmFkKTsKIAl9CisKKwlpZiAoIWVycikKKwkJZXJyID0gc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYihzb2NrX3NpZCwgc2tiKTsKKwogb3V0OgkKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzQwMSw2ICszNDA2LDI0IEBACiAJc2tfZnJlZV9zZWN1cml0eShzayk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VsaW51eF9za19nZXRzaWRfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2kgKmZsLCB1OCBkaXIpCit7CisJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKKwl1MzIgc29ja19zaWQgPSBTRUNJTklUU0lEX0FOWV9TT0NLRVQ7CisKKwlpZiAoIXNrKQorCQlyZXR1cm4gc2VsaW51eF9ub19za19zaWQoZmwpOworCisJcmVhZF9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJaXNlYyA9IGdldF9zb2NrX2lzZWMoc2spOworCisJaWYgKGlzZWMpCisJCXNvY2tfc2lkID0gaXNlYy0+c2lkOworCisJcmVhZF91bmxvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKKwlyZXR1cm4gc29ja19zaWQ7Cit9CisKIHN0YXRpYyBpbnQgc2VsaW51eF9ubG1zZ19wZXJtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTM1MzYsNiArMzU1OSwxMSBAQAogCQkgICAgICAgICAgICAgICAgICAgc2VuZF9wZXJtLCAmYWQpID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKIAl9CiAKKwlpZiAoZXJyICE9IE5GX0FDQ0VQVCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3QoaXNlYy0+c2lkLCBza2IpOworCiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQzODAsNiArNDQwOCwxNiBAQAogCS5zb2NrZXRfZ2V0cGVlcnNlYyA9CQlzZWxpbnV4X3NvY2tldF9nZXRwZWVyc2VjLAogCS5za19hbGxvY19zZWN1cml0eSA9CQlzZWxpbnV4X3NrX2FsbG9jX3NlY3VyaXR5LAogCS5za19mcmVlX3NlY3VyaXR5ID0JCXNlbGludXhfc2tfZnJlZV9zZWN1cml0eSwKKwkuc2tfZ2V0c2lkID0gCQkJc2VsaW51eF9za19nZXRzaWRfc2VjdXJpdHksCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0KKwkueGZybV9wb2xpY3lfYWxsb2Nfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jLAorCS54ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSA9CXNlbGludXhfeGZybV9wb2xpY3lfY2xvbmUsCisJLnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fcG9saWN5X2ZyZWUsCisJLnhmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fc3RhdGVfYWxsb2MsCisJLnhmcm1fc3RhdGVfZnJlZV9zZWN1cml0eSA9CXNlbGludXhfeGZybV9zdGF0ZV9mcmVlLAorCS54ZnJtX3BvbGljeV9sb29rdXAgPSAJCXNlbGludXhfeGZybV9wb2xpY3lfbG9va3VwLAogI2VuZGlmCiB9OwogCkBAIC00NDkxLDYgKzQ1MjksNyBAQAogCQlwYW5pYygiU0VMaW51eDogbmZfcmVnaXN0ZXJfaG9vayBmb3IgSVB2NjogZXJyb3IgJWRcbiIsIGVycik7CiAKICNlbmRpZgkvKiBJUFY2ICovCisKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAppbmRleCAxZGViNTllLi43MWFlYjEyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaApAQCAtMjM4LDMgKzIzOCw1IEBACiAgICBTXyhTRUNDTEFTU19OU0NELCBOU0NEX19TSE1FTUhPU1QsICJzaG1lbWhvc3QiKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRU5EVE8sICJzZW5kdG8iKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19SRUNWRlJPTSwgInJlY3Zmcm9tIikKKyAgIFNfKFNFQ0NMQVNTX0FTU09DSUFUSU9OLCBBU1NPQ0lBVElPTl9fUkVMQUJFTEZST00sICJyZWxhYmVsZnJvbSIpCisgICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1JFTEFCRUxUTywgInJlbGFiZWx0byIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCmluZGV4IGE3OGI1ZDUuLmQxZDA5OTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCkBAIC05MDgsNiArOTA4LDggQEAKIAogI2RlZmluZSBBU1NPQ0lBVElPTl9fU0VORFRPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgQVNTT0NJQVRJT05fX1JFQ1ZGUk9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCisjZGVmaW5lIEFTU09DSUFUSU9OX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAorI2RlZmluZSBBU1NPQ0lBVElPTl9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKIAogI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fSU9DVEwgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX1JFQUQgICAgICAgMHgwMDAwMDAwMlVMCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTg3OTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogU0VMaW51eCBzdXBwb3J0IGZvciB0aGUgWEZSTSBMU00gaG9va3MKKyAqCisgKiBBdXRob3IgOiBUcmVudCBKYWVnZXIsIDxqYWVnZXJ0QHVzLmlibS5jb20+CisgKi8KKyNpZm5kZWYgX1NFTElOVVhfWEZSTV9IXworI2RlZmluZSBfU0VMSU5VWF9YRlJNX0hfCisKK2ludCBzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCk7CitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9jbG9uZShzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgc3RydWN0IHhmcm1fcG9saWN5ICpuZXcpOwordm9pZCBzZWxpbnV4X3hmcm1fcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7CitpbnQgc2VsaW51eF94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpOwordm9pZCBzZWxpbnV4X3hmcm1fc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIHNrX3NpZCwgdTggZGlyKTsKKworLyoKKyAqIEV4dHJhY3QgdGhlIHNlY3VyaXR5IGJsb2IgZnJvbSB0aGUgc29jayAoaXQncyBhY3R1YWxseSBvbiB0aGUgc29ja2V0KQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmdldF9zb2NrX2lzZWMoc3RydWN0IHNvY2sgKnNrKQoreworCWlmICghc2stPnNrX3NvY2tldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gU09DS19JTk9ERShzay0+c2tfc29ja2V0KS0+aV9zZWN1cml0eTsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMiBzZWxpbnV4X25vX3NrX3NpZChzdHJ1Y3QgZmxvd2kgKmZsKQoreworCS8qIE5PVEU6IG5vIHNvY2sgb2NjdXJzIG9uIElDTVAgcmVwbHksIGZvcndhcmRzLCAuLi4gKi8KKwkvKiBpY21wX3JlcGx5OiBhdXRob3JpemUgYXMga2VybmVsIHBhY2tldCAqLworCWlmIChmbCAmJiBmbC0+cHJvdG8gPT0gSVBQUk9UT19JQ01QKSB7CisJCXJldHVybiBTRUNJTklUU0lEX0tFUk5FTDsKKwl9CisKKwlyZXR1cm4gU0VDSU5JVFNJRF9BTllfU09DS0VUOworfQorCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQoraW50IHNlbGludXhfeGZybV9zb2NrX3Jjdl9za2IodTMyIHNpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHUzMiBpc2VjX3NpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYih1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdCh1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1NFTElOVVhfWEZSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMgYi9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQ4N2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiAgTlNBIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTRUxpbnV4KSBzZWN1cml0eSBtb2R1bGUKKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBTRUxpbnV4IFhGUk0gaG9vayBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogIEF1dGhvcnM6ICBTZXJnZSBIYWxseW4gPHNlcmdlaEB1cy5pYm0uY29tPgorICoJICAgICAgVHJlbnQgSmFlZ2VyIDxqYWVnZXJ0QHVzLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFVTQUdFOgorICogTk9URVM6CisgKiAgIDEuIE1ha2Ugc3VyZSB0byBlbmFibGUgdGhlIGZvbGxvd2luZyBvcHRpb25zIGluIHlvdXIga2VybmVsIGNvbmZpZzoKKyAqCUNPTkZJR19TRUNVUklUWT15CisgKglDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CisgKglDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNPXkKKyAqCUNPTkZJR19TRUNVUklUWV9TRUxJTlVYPW0veQorICogSVNTVUVTOgorICogICAxLiBDYWNoaW5nIHBhY2tldHMsIHNvIHRoZXkgYXJlIG5vdCBkcm9wcGVkIGR1cmluZyBuZWdvdGlhdGlvbgorICogICAyLiBFbXVsYXRpbmcgYSByZWFzb25hYmxlIFNPX1BFRVJTRUMgYWNyb3NzIG1hY2hpbmVzCisgKiAgIDMuIFRlc3RpbmcgYWRkaXRpb24gb2Ygc2tfcG9saWN5J3Mgd2l0aCBzZWN1cml0eSBjb250ZXh0IHZpYSBzZXRzb2Nrb3B0CisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3hmcm0uaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC91ZHAuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKyNpbmNsdWRlICJhdmMuaCIKKyNpbmNsdWRlICJvYmpzZWMuaCIKKyNpbmNsdWRlICJ4ZnJtLmgiCisKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhbiBMU00vU0VMaW51eCBjb250ZXh0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfYXV0aG9yaXphYmxlX2N0eChzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgpCit7CisJcmV0dXJuIChjdHggJiYKKwkJKGN0eC0+Y3R4X2RvaSA9PSBYRlJNX1NDX0RPSV9MU00pICYmCisJCShjdHgtPmN0eF9hbGcgPT0gWEZSTV9TQ19BTEdfU0VMSU5VWCkpOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB4ZnJtIGNvbnRhaW5zIGEgc2VjdXJpdHkgYmxvYiBmb3IgU0VMaW51eAorICovCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X2F1dGhvcml6YWJsZV94ZnJtKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQoreworCXJldHVybiBzZWxpbnV4X2F1dGhvcml6YWJsZV9jdHgoeC0+c2VjdXJpdHkpOworfQorCisvKgorICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBhdXRob3JpemVzIHRoYXQgYSBzb2NrZXQgY2FuIGJlIHVzZWQKKyAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgeGZybV9zZWNfY3R4IGFuZCBkaXJlY3Rpb24uCisgKi8KK2ludCBzZWxpbnV4X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB1MzIgc2tfc2lkLCB1OCBkaXIpCit7CisJaW50IHJjID0gMDsKKwl1MzIgc2VsX3NpZCA9IFNFQ0lOSVRTSURfVU5MQUJFTEVEOworCXN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eDsKKworCS8qIENvbnRleHQgc2lkIGlzIGVpdGhlciBzZXQgdG8gbGFiZWwgb3IgQU5ZX0FTU09DICovCisJaWYgKChjdHggPSB4cC0+c2VjdXJpdHkpKSB7CisJCWlmICghc2VsaW51eF9hdXRob3JpemFibGVfY3R4KGN0eCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzZWxfc2lkID0gY3R4LT5jdHhfc2lkOworCX0KKworCXJjID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgc2VsX3NpZCwgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCisJCQkgICgoZGlyID09IEZMT1dfRElSX0lOKSA/IEFTU09DSUFUSU9OX19SRUNWRlJPTSA6CisJCQkgICAoKGRpciA9PSBGTE9XX0RJUl9PVVQpID8gIEFTU09DSUFUSU9OX19TRU5EVE8gOgorCQkJICAgIChBU1NPQ0lBVElPTl9fU0VORFRPIHwgQVNTT0NJQVRJT05fX1JFQ1ZGUk9NKSkpLAorCQkJICBOVUxMKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIFNlY3VyaXR5IGJsb2IgYWxsb2NhdGlvbiBmb3IgeGZybV9wb2xpY3kgYW5kIHhmcm1fc3RhdGUKKyAqIENUWCBkb2VzIG5vdCBoYXZlIGEgbWVhbmluZ2Z1bCB2YWx1ZSBvbiBpbnB1dAorICovCitzdGF0aWMgaW50IHNlbGludXhfeGZybV9zZWNfY3R4X2FsbG9jKHN0cnVjdCB4ZnJtX3NlY19jdHggKipjdHhwLCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHgpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjdXJyZW50LT5zZWN1cml0eTsKKwlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHg7CisKKwlCVUdfT04oIXVjdHgpOworCUJVR19PTih1Y3R4LT5jdHhfZG9pICE9IFhGUk1fU0NfQUxHX1NFTElOVVgpOworCisJaWYgKHVjdHgtPmN0eF9sZW4gPj0gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSpjdHhwID0gY3R4ID0ga21hbGxvYyhzaXplb2YoKmN0eCkgKworCQkJICAgICAgdWN0eC0+Y3R4X2xlbiwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJY3R4LT5jdHhfZG9pID0gdWN0eC0+Y3R4X2RvaTsKKwljdHgtPmN0eF9sZW4gPSB1Y3R4LT5jdHhfbGVuOworCWN0eC0+Y3R4X2FsZyA9IHVjdHgtPmN0eF9hbGc7CisKKwltZW1jcHkoY3R4LT5jdHhfc3RyLAorCSAgICAgICB1Y3R4KzEsCisJICAgICAgIGN0eC0+Y3R4X2xlbik7CisJcmMgPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZChjdHgtPmN0eF9zdHIsCisJCQkJICAgICBjdHgtPmN0eF9sZW4sCisJCQkJICAgICAmY3R4LT5jdHhfc2lkKTsKKworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIERvZXMgdGhlIHN1YmplY3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHNldCBzZWN1cml0eSBvciBwZXJtaXNzaW9uIHRvCisJICogZG8gdGhlIHJlbGFiZWw/CisJICogTXVzdCBiZSBwZXJtaXR0ZWQgdG8gcmVsYWJlbCBmcm9tIGRlZmF1bHQgc29ja2V0IHR5cGUgKHByb2Nlc3MgdHlwZSkKKwkgKiB0byBzcGVjaWZpZWQgY29udGV4dAorCSAqLworCXJjID0gYXZjX2hhc19wZXJtKHRzZWMtPnNpZCwgdHNlYy0+c2lkLAorCQkJICBTRUNDTEFTU19BU1NPQ0lBVElPTiwKKwkJCSAgQVNTT0NJQVRJT05fX1JFTEFCRUxGUk9NLCBOVUxMKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJcmMgPSBhdmNfaGFzX3Blcm0odHNlYy0+c2lkLCBjdHgtPmN0eF9zaWQsCisJCQkgIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAorCQkJICBBU1NPQ0lBVElPTl9fUkVMQUJFTFRPLCBOVUxMKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJcmV0dXJuIHJjOworCitvdXQ6CisJKmN0eHAgPSAwOworCWtmcmVlKGN0eCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBhbGxvY3MgYW5kIHRyYW5zZmVycyB1Y3R4IHNwZWMgdG8KKyAqIHhmcm1fcG9saWN5LgorICovCitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9hbGxvYyhzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHgpCit7CisJaW50IGVycjsKKworCUJVR19PTigheHApOworCisJZXJyID0gc2VsaW51eF94ZnJtX3NlY19jdHhfYWxsb2MoJnhwLT5zZWN1cml0eSwgdWN0eCk7CisJcmV0dXJuIGVycjsKK30KKworCisvKgorICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBjb3BpZXMgc2VjdXJpdHkgZGF0YSBzdHJ1Y3R1cmUgZnJvbSBvbGQgdG8KKyAqIG5ldyBmb3IgcG9saWN5IGNsb25pbmcuCisgKi8KK2ludCBzZWxpbnV4X3hmcm1fcG9saWN5X2Nsb25lKHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldykKK3sKKwlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpvbGRfY3R4LCAqbmV3X2N0eDsKKworCW9sZF9jdHggPSBvbGQtPnNlY3VyaXR5OworCisJaWYgKG9sZF9jdHgpIHsKKwkJbmV3X2N0eCA9IG5ldy0+c2VjdXJpdHkgPSBrbWFsbG9jKHNpemVvZigqbmV3X2N0eCkgKworCQkJCQkJICBvbGRfY3R4LT5jdHhfbGVuLAorCQkJCQkJICBHRlBfS0VSTkVMKTsKKworCQlpZiAoIW5ld19jdHgpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkobmV3X2N0eCwgb2xkX2N0eCwgc2l6ZW9mKCpuZXdfY3R4KSk7CisJCW1lbWNweShuZXdfY3R4LT5jdHhfc3RyLCBvbGRfY3R4LT5jdHhfc3RyLCBuZXdfY3R4LT5jdHhfbGVuKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMU00gaG9vayBpbXBsZW1lbnRhdGlvbiB0aGF0IGZyZWVzIHhmcm1fcG9saWN5IHNlY3VyaXR5IGluZm9ybWF0aW9uLgorICovCit2b2lkIHNlbGludXhfeGZybV9wb2xpY3lfZnJlZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQoreworCXN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCA9IHhwLT5zZWN1cml0eTsKKwlpZiAoY3R4KQorCQlrZnJlZShjdHgpOworfQorCisvKgorICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBhbGxvY3MgYW5kIHRyYW5zZmVycyBzZWNfY3R4IHNwZWMgdG8KKyAqIHhmcm1fc3RhdGUuCisgKi8KK2ludCBzZWxpbnV4X3hmcm1fc3RhdGVfYWxsb2Moc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqdWN0eCkKK3sKKwlpbnQgZXJyOworCisJQlVHX09OKCF4KTsKKworCWVyciA9IHNlbGludXhfeGZybV9zZWNfY3R4X2FsbG9jKCZ4LT5zZWN1cml0eSwgdWN0eCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIExTTSBob29rIGltcGxlbWVudGF0aW9uIHRoYXQgZnJlZXMgeGZybV9zdGF0ZSBzZWN1cml0eSBpbmZvcm1hdGlvbi4KKyAqLwordm9pZCBzZWxpbnV4X3hmcm1fc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKK3sKKwlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHggPSB4LT5zZWN1cml0eTsKKwlpZiAoY3R4KQorCQlrZnJlZShjdHgpOworfQorCisvKgorICogTFNNIGhvb2sgdGhhdCBjb250cm9scyBhY2Nlc3MgdG8gdW5sYWJlbGxlZCBwYWNrZXRzLiAgSWYKKyAqIGEgeGZybV9zdGF0ZSBpcyBhdXRob3JpemFibGUgKGRlZmluZWQgYnkgbWFjcm8pIHRoZW4gaXQgd2FzCisgKiBhbHJlYWR5IGF1dGhvcml6ZWQgYnkgdGhlIElQU2VjIHByb2Nlc3MuICBJZiBub3QsIHRoZW4KKyAqIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHVubGFiZWxsZWQgYWNjZXNzIHNpbmNlIHRoaXMgbWF5IG5vdCBoYXZlCisgKiBnb25lIHRocnUgdGhlIElQU2VjIHByb2Nlc3MuCisgKi8KK2ludCBzZWxpbnV4X3hmcm1fc29ja19yY3Zfc2tiKHUzMiBpc2VjX3NpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaSwgcmMgPSAwOworCXN0cnVjdCBzZWNfcGF0aCAqc3A7CisKKwlzcCA9IHNrYi0+c3A7CisKKwlpZiAoc3ApIHsKKwkJLyoKKwkJICogX194ZnJtX3BvbGljeV9jaGVjayBkb2VzIG5vdCBhcHByb3ZlIHVubGVzcyB4ZnJtX3BvbGljeV9vaworCQkgKiBzYXlzIHRoYXQgc3BpJ3MgbWF0Y2ggZm9yIHBvbGljeSBhbmQgdGhlIHNvY2tldC4KKwkJICoKKwkJICogIE9ubHkgbmVlZCB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiBhbiBhdXRob3JpemFibGUgc3AuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmxlbjsgaSsrKSB7CisJCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHNwLT54W2ldLnh2ZWM7CisKKwkJCWlmICh4ICYmIHNlbGludXhfYXV0aG9yaXphYmxlX3hmcm0oeCkpCisJCQkJZ290byBhY2NlcHQ7CisJCX0KKwl9CisKKwkvKiBjaGVjayBTRUxpbnV4IHNvY2sgZm9yIHVubGFiZWxsZWQgYWNjZXNzICovCisJcmMgPSBhdmNfaGFzX3Blcm0oaXNlY19zaWQsIFNFQ0lOSVRTSURfVU5MQUJFTEVELCBTRUNDTEFTU19BU1NPQ0lBVElPTiwKKwkJCSAgQVNTT0NJQVRJT05fX1JFQ1ZGUk9NLCBOVUxMKTsKKwlpZiAocmMpCisJCWdvdG8gZHJvcDsKKworYWNjZXB0OgorCXJldHVybiAwOworCitkcm9wOgorCXJldHVybiByYzsKK30KKworLyoKKyAqIFBPU1RST1VURV9MQVNUIGhvb2sncyBYRlJNIHByb2Nlc3Npbmc6CisgKiBJZiB3ZSBoYXZlIG5vIHNlY3VyaXR5IGFzc29jaWF0aW9uLCB0aGVuIHdlIG5lZWQgdG8gZGV0ZXJtaW5lCisgKiB3aGV0aGVyIHRoZSBzb2NrZXQgaXMgYWxsb3dlZCB0byBzZW5kIHRvIGFuIHVubGFiZWxsZWQgZGVzdGluYXRpb24uCisgKiBJZiB3ZSBkbyBoYXZlIGEgYXV0aG9yaXphYmxlIHNlY3VyaXR5IGFzc29jaWF0aW9uLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4KKyAqIGNoZWNrZWQgaW4geGZybV9wb2xpY3lfbG9va3VwIGhvb2suCisgKi8KK2ludCBzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3QodTMyIGlzZWNfc2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKwlpbnQgcmMgPSAwOworCisJZHN0ID0gc2tiLT5kc3Q7CisKKwlpZiAoZHN0KSB7CisJCXN0cnVjdCBkc3RfZW50cnkgKmRzdF90ZXN0OworCisJCWZvciAoZHN0X3Rlc3QgPSBkc3Q7IGRzdF90ZXN0ICE9IDA7CisJCSAgICAgZHN0X3Rlc3QgPSBkc3RfdGVzdC0+Y2hpbGQpIHsKKwkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0X3Rlc3QtPnhmcm07CisKKwkJCWlmICh4ICYmIHNlbGludXhfYXV0aG9yaXphYmxlX3hmcm0oeCkpCisJCQkJZ290byBhY2NlcHQ7CisJCX0KKwl9CisKKwlyYyA9IGF2Y19oYXNfcGVybShpc2VjX3NpZCwgU0VDSU5JVFNJRF9VTkxBQkVMRUQsIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAorCQkJICBBU1NPQ0lBVElPTl9fU0VORFRPLCBOVUxMKTsKKwlpZiAocmMpCisJCWdvdG8gZHJvcDsKKworYWNjZXB0OgorCXJldHVybiBORl9BQ0NFUFQ7CisKK2Ryb3A6CisJcmV0dXJuIE5GX0RST1A7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IGUxMzI2NzAuLmExYmQ4MDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC0xOTk0LDcgKzE5OTQsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfYXVkaW9faWRzKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9hdWRpb19kcml2ZXIgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInNuZC11c2ItYXVkaW8iLAogCS5wcm9iZSA9CXVzYl9hdWRpb19wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzYl9hdWRpb19kaXNjb25uZWN0LApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwppbmRleCA5ODA3YzNkLi5lMGFiYjU2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwpAQCAtNDA3LDcgKzQwNyw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzbmRfdXNYMllfdXNiX2lkX3RhYmxlKTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbmRfdXNYMllfdXNiX2RyaXZlciA9IHsKLSAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJInNuZC11c2ItdXN4MnkiLAogCS5wcm9iZSA9CXNuZF91c1gyWV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXNuZF91c1gyWV9kaXNjb25uZWN0LAo=