ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgppbmRleCBkZWI2YjQ4Li5hMDdjMGYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCkBAIC0yMSwyNSArMjEsMjcgQEAKIERlc2NyaXB0aW9uOgogCQlFYWNoIFVTQiBkZXZpY2UgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpbGUgbmFtZWQKIAkJcG93ZXIvbGV2ZWwuICBUaGlzIGZpbGUgaG9sZHMgYSBwb3dlci1sZXZlbCBzZXR0aW5nIGZvcgotCQl0aGUgZGV2aWNlLCBvbmUgb2YgIm9uIiwgImF1dG8iLCBvciAic3VzcGVuZCIuCisJCXRoZSBkZXZpY2UsIGVpdGhlciAib24iIG9yICJhdXRvIi4KIAogCQkib24iIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYWxsb3dlZCB0byBhdXRvc3VzcGVuZCwKIAkJYWx0aG91Z2ggbm9ybWFsIHN1c3BlbmRzIGZvciBzeXN0ZW0gc2xlZXAgd2lsbCBzdGlsbAogCQliZSBob25vcmVkLiAgImF1dG8iIG1lYW5zIHRoZSBkZXZpY2Ugd2lsbCBhdXRvc3VzcGVuZAogCQlhbmQgYXV0b3Jlc3VtZSBpbiB0aGUgdXN1YWwgbWFubmVyLCBhY2NvcmRpbmcgdG8gdGhlCi0JCWNhcGFiaWxpdGllcyBvZiBpdHMgZHJpdmVyLiAgInN1c3BlbmQiIG1lYW5zIHRoZSBkZXZpY2UKLQkJaXMgZm9yY2VkIGludG8gYSBzdXNwZW5kZWQgc3RhdGUgYW5kIGl0IHdpbGwgbm90IGF1dG9yZXN1bWUKLQkJaW4gcmVzcG9uc2UgdG8gSS9PIHJlcXVlc3RzLiAgSG93ZXZlciByZW1vdGUtd2FrZXVwIHJlcXVlc3RzCi0JCWZyb20gdGhlIGRldmljZSBtYXkgc3RpbGwgYmUgZW5hYmxlZCAodGhlIHJlbW90ZS13YWtldXAKLQkJc2V0dGluZyBpcyBjb250cm9sbGVkIHNlcGFyYXRlbHkgYnkgdGhlIHBvd2VyL3dha2V1cAotCQlhdHRyaWJ1dGUpLgorCQljYXBhYmlsaXRpZXMgb2YgaXRzIGRyaXZlci4KIAogCQlEdXJpbmcgbm9ybWFsIHVzZSwgZGV2aWNlcyBzaG91bGQgYmUgbGVmdCBpbiB0aGUgImF1dG8iCi0JCWxldmVsLiAgVGhlIG90aGVyIGxldmVscyBhcmUgbWVhbnQgZm9yIGFkbWluaXN0cmF0aXZlIHVzZXMuCisJCWxldmVsLiAgVGhlICJvbiIgbGV2ZWwgaXMgbWVhbnQgZm9yIGFkbWluaXN0cmF0aXZlIHVzZXMuCiAJCUlmIHlvdSB3YW50IHRvIHN1c3BlbmQgYSBkZXZpY2UgaW1tZWRpYXRlbHkgYnV0IGxlYXZlIGl0CiAJCWZyZWUgdG8gd2FrZSB1cCBpbiByZXNwb25zZSB0byBJL08gcmVxdWVzdHMsIHlvdSBzaG91bGQKIAkJd3JpdGUgIjAiIHRvIHBvd2VyL2F1dG9zdXNwZW5kLgogCisJCURldmljZSBub3QgY2FwYWJsZSBvZiBwcm9wZXIgc3VzcGVuZCBhbmQgcmVzdW1lIHNob3VsZCBiZQorCQlsZWZ0IGluIHRoZSAib24iIGxldmVsLiAgQWx0aG91Z2ggdGhlIFVTQiBzcGVjIHJlcXVpcmVzCisJCWRldmljZXMgdG8gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZSwgbWFueSBvZiB0aGVtIGRvIG5vdC4KKwkJSW4gZmFjdCBzbyBtYW55IGRvbid0IHRoYXQgYnkgZGVmYXVsdCwgdGhlIFVTQiBjb3JlCisJCWluaXRpYWxpemVzIGFsbCBub24taHViIGRldmljZXMgaW4gdGhlICJvbiIgbGV2ZWwuICBTb21lCisJCWRyaXZlcnMgbWF5IGNoYW5nZSB0aGlzIHNldHRpbmcgd2hlbiB0aGV5IGFyZSBib3VuZC4KKwogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLy4uLi9wb3dlci9wZXJzaXN0CiBEYXRlOgkJTWF5IDIwMDcKIEtlcm5lbFZlcnNpb246CTIuNi4yMwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKaW5kZXggNjAxMjBmYi4uZDJjZDZmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0CkBAIC0yMjYsNSArMjI2LDUgQEAKIFRoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBhZGQgYW5kIHJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20gdGhlCiBkcml2ZXIncyBkaXJlY3RvcnkgdXNpbmc6CiAKLWludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Ci12b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK2ludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Cit2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKaW5kZXggYjI0NWQ1Mi4uOTMxYzgwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKQEAgLTkxLDggKzkxLDggQEAKIAkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKik7Ci12b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOworaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOwordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqLCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKTsKIAogSXQgYWxzbyBkZWZpbmVzIHRoaXMgaGVscGVyIGZvciBkZWZpbmluZyBkZXZpY2UgYXR0cmlidXRlczogCiAKQEAgLTMxNiw4ICszMTYsOCBAQAogCiBDcmVhdGlvbi9SZW1vdmFsOgogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKLXZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7CitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKIAogCiAtIGJ1cyBkcml2ZXJzIChpbmNsdWRlL2xpbnV4L2RldmljZS5oKQpAQCAtMzU4LDcgKzM1OCw3IEBACiAKIENyZWF0aW9uL1JlbW92YWw6CiAKLWludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Ci12b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK2ludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Cit2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGU5M2FmZmYuLmU3MmNlZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC00MDMsNCArNDAzLDUgQEAKIENpcnJ1cyBMb2dpYyBDUzQyMDYvNDIwNwogPT09PT09PT09PT09PT09PT09PT09PT09CiAgIG1icDU1CQlNYWNCb29rIFBybyA1LDUKKyAgaW1hYzI3CUlNYWMgMjcgSW5jaAogICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQKaW5kZXggYTQ1MjIyNy4uNWVmZmE1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0CkBAIC0yNiwxMyArMjYsMzMgQEAKIAogIC0gU2VuZCB0aGUgcGF0Y2gsIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGZvbGxvd3MgdGhlIGFib3ZlIHJ1bGVzLCB0bwogICAgc3RhYmxlQGtlcm5lbC5vcmcuCisgLSBUbyBoYXZlIHRoZSBwYXRjaCBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIHRoZSBzdGFibGUgdHJlZSwgYWRkIHRoZQorICAgdGhlIHRhZworICAgICBDYzogc3RhYmxlQGtlcm5lbC5vcmcKKyAgIGluIHRoZSBzaWduLW9mZiBhcmVhLiBPbmNlIHRoZSBwYXRjaCBpcyBtZXJnZWQgaXQgd2lsbCBiZSBhcHBsaWVkIHRvCisgICB0aGUgc3RhYmxlIHRyZWUgd2l0aG91dCBhbnl0aGluZyBlbHNlIG5lZWRpbmcgdG8gYmUgZG9uZSBieSB0aGUgYXV0aG9yCisgICBvciBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KKyAtIElmIHRoZSBwYXRjaCByZXF1aXJlcyBvdGhlciBwYXRjaGVzIGFzIHByZXJlcXVpc2l0ZXMgd2hpY2ggY2FuIGJlCisgICBjaGVycnktcGlja2VkIHRoYW4gdGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGluCisgICB0aGUgc2lnbi1vZmYgYXJlYToKKworICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBhMWY4NGEzOiBzY2hlZDogQ2hlY2sgZm9yIGlkbGUKKyAgICAgQ2M6IDxzdGFibGVAa2VybmVsLm9yZz4gIyAuMzIueDogMWI5NTA4Zjogc2NoZWQ6IFJhdGUtbGltaXQgbmV3aWRsZQorICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBmZDIxMDczOiBzY2hlZDogRml4IGFmZmluaXR5IGxvZ2ljCisgICAgIENjOiA8c3RhYmxlQGtlcm5lbC5vcmc+ICMgLjMyLngKKyAgICBTaWduZWQtb2ZmLWJ5OiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KKworICAgVGhlIHRhZyBzZXF1ZW5jZSBoYXMgdGhlIG1lYW5pbmcgb2Y6CisgICAgIGdpdCBjaGVycnktcGljayBhMWY4NGEzCisgICAgIGdpdCBjaGVycnktcGljayAxYjk1MDhmCisgICAgIGdpdCBjaGVycnktcGljayBmZDIxMDczCisgICAgIGdpdCBjaGVycnktcGljayA8dGhpcyBjb21taXQ+CisKICAtIFRoZSBzZW5kZXIgd2lsbCByZWNlaXZlIGFuIEFDSyB3aGVuIHRoZSBwYXRjaCBoYXMgYmVlbiBhY2NlcHRlZCBpbnRvIHRoZQogICAgcXVldWUsIG9yIGEgTkFLIGlmIHRoZSBwYXRjaCBpcyByZWplY3RlZC4gIFRoaXMgcmVzcG9uc2UgbWlnaHQgdGFrZSBhIGZldwogICAgZGF5cywgYWNjb3JkaW5nIHRvIHRoZSBkZXZlbG9wZXIncyBzY2hlZHVsZXMuCiAgLSBJZiBhY2NlcHRlZCwgdGhlIHBhdGNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIC1zdGFibGUgcXVldWUsIGZvciByZXZpZXcgYnkKICAgIG90aGVyIGRldmVsb3BlcnMgYW5kIGJ5IHRoZSByZWxldmFudCBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KLSAtIElmIHRoZSBzdGFibGVAa2VybmVsLm9yZyBhZGRyZXNzIGlzIGFkZGVkIHRvIGEgcGF0Y2gsIHdoZW4gaXQgZ29lcyBpbnRvCi0gICBMaW51cydzIHRyZWUgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGVtYWlsZWQgdG8gdGhlIHN0YWJsZSB0ZWFtLgogIC0gU2VjdXJpdHkgcGF0Y2hlcyBzaG91bGQgbm90IGJlIHNlbnQgdG8gdGhpcyBhbGlhcywgYnV0IGluc3RlYWQgdG8gdGhlCiAgICBkb2N1bWVudGVkIHNlY3VyaXR5QGtlcm5lbC5vcmcgYWRkcmVzcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAppbmRleCBjN2MxZGMyLi4zYmY2ODE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dApAQCAtNzEsMTIgKzcxLDEwIEBACiAJRm9ybXMgb2YgZHluYW1pYyBQTQogCS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRHluYW1pYyBzdXNwZW5kcyBjYW4gb2NjdXIgaW4gdHdvIHdheXM6IG1hbnVhbCBhbmQgYXV0b21hdGljLgotIk1hbnVhbCIgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgdG9sZCB0aGUga2VybmVsIHRvIHN1c3BlbmQgYSBkZXZpY2UsCi13aGVyZWFzICJhdXRvbWF0aWMiIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBoYXMgZGVjaWRlZCBhbGwgYnkgaXRzZWxmIHRvCi1zdXNwZW5kIGEgZGV2aWNlLiAgQXV0b21hdGljIHN1c3BlbmQgaXMgY2FsbGVkICJhdXRvc3VzcGVuZCIgZm9yCi1zaG9ydC4gIEluIGdlbmVyYWwsIGEgZGV2aWNlIHdvbid0IGJlIGF1dG9zdXNwZW5kZWQgdW5sZXNzIGl0IGhhcyBiZWVuCi1pZGxlIGZvciBzb21lIG1pbmltdW0gcGVyaW9kIG9mIHRpbWUsIHRoZSBzby1jYWxsZWQgaWRsZS1kZWxheSB0aW1lLgorRHluYW1pYyBzdXNwZW5kcyBvY2N1ciB3aGVuIHRoZSBrZXJuZWwgZGVjaWRlcyB0byBzdXNwZW5kIGFuIGlkbGUKK2RldmljZS4gIFRoaXMgaXMgY2FsbGVkICJhdXRvc3VzcGVuZCIgZm9yIHNob3J0LiAgSW4gZ2VuZXJhbCwgYSBkZXZpY2UKK3dvbid0IGJlIGF1dG9zdXNwZW5kZWQgdW5sZXNzIGl0IGhhcyBiZWVuIGlkbGUgZm9yIHNvbWUgbWluaW11bSBwZXJpb2QKK29mIHRpbWUsIHRoZSBzby1jYWxsZWQgaWRsZS1kZWxheSB0aW1lLgogCiBPZiBjb3Vyc2UsIG5vdGhpbmcgdGhlIGtlcm5lbCBkb2VzIG9uIGl0cyBvd24gaW5pdGlhdGl2ZSBzaG91bGQKIHByZXZlbnQgdGhlIGNvbXB1dGVyIG9yIGl0cyBkZXZpY2VzIGZyb20gd29ya2luZyBwcm9wZXJseS4gIElmIGEKQEAgLTk2LDEwICs5NCwxMSBAQAogV2UgY2FuIGNhdGVnb3JpemUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgaW4gdHdvIGJyb2FkIGNsYXNzZXM6CiBleHRlcm5hbCBhbmQgaW50ZXJuYWwuICBFeHRlcm5hbCBldmVudHMgYXJlIHRob3NlIHRyaWdnZXJlZCBieSBzb21lCiBhZ2VudCBvdXRzaWRlIHRoZSBVU0Igc3RhY2s6IHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSAodHJpZ2dlcmVkIGJ5Ci11c2Vyc3BhY2UpLCBtYW51YWwgZHluYW1pYyBzdXNwZW5kL3Jlc3VtZSAoYWxzbyB0cmlnZ2VyZWQgYnkKLXVzZXJzcGFjZSksIGFuZCByZW1vdGUgd2FrZXVwICh0cmlnZ2VyZWQgYnkgdGhlIGRldmljZSkuICBJbnRlcm5hbAotZXZlbnRzIGFyZSB0aG9zZSB0cmlnZ2VyZWQgd2l0aGluIHRoZSBVU0Igc3RhY2s6IGF1dG9zdXNwZW5kIGFuZAotYXV0b3Jlc3VtZS4KK3VzZXJzcGFjZSksIG1hbnVhbCBkeW5hbWljIHJlc3VtZSAoYWxzbyB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlKSwgYW5kCityZW1vdGUgd2FrZXVwICh0cmlnZ2VyZWQgYnkgdGhlIGRldmljZSkuICBJbnRlcm5hbCBldmVudHMgYXJlIHRob3NlCit0cmlnZ2VyZWQgd2l0aGluIHRoZSBVU0Igc3RhY2s6IGF1dG9zdXNwZW5kIGFuZCBhdXRvcmVzdW1lLiAgTm90ZSB0aGF0CithbGwgZHluYW1pYyBzdXNwZW5kIGV2ZW50cyBhcmUgaW50ZXJuYWw7IGV4dGVybmFsIGFnZW50cyBhcmUgbm90CithbGxvd2VkIHRvIGlzc3VlIGR5bmFtaWMgc3VzcGVuZHMuCiAKIAogCVRoZSB1c2VyIGludGVyZmFjZSBmb3IgZHluYW1pYyBQTQpAQCAtMTQ1LDkgKzE0NCw5IEBACiAJCW51bWJlciBvZiBzZWNvbmRzIHRoZSBkZXZpY2Ugc2hvdWxkIHJlbWFpbiBpZGxlIGJlZm9yZQogCQl0aGUga2VybmVsIHdpbGwgYXV0b3N1c3BlbmQgaXQgKHRoZSBpZGxlLWRlbGF5IHRpbWUpLgogCQlUaGUgZGVmYXVsdCBpcyAyLiAgMCBtZWFucyB0byBhdXRvc3VzcGVuZCBhcyBzb29uIGFzCi0JCXRoZSBkZXZpY2UgYmVjb21lcyBpZGxlLCBhbmQgLTEgbWVhbnMgbmV2ZXIgdG8KLQkJYXV0b3N1c3BlbmQuICBZb3UgY2FuIHdyaXRlIGEgbnVtYmVyIHRvIHRoZSBmaWxlIHRvCi0JCWNoYW5nZSB0aGUgYXV0b3N1c3BlbmQgaWRsZS1kZWxheSB0aW1lLgorCQl0aGUgZGV2aWNlIGJlY29tZXMgaWRsZSwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtZWFuCisJCW5ldmVyIHRvIGF1dG9zdXNwZW5kLiAgWW91IGNhbiB3cml0ZSBhIG51bWJlciB0byB0aGUKKwkJZmlsZSB0byBjaGFuZ2UgdGhlIGF1dG9zdXNwZW5kIGlkbGUtZGVsYXkgdGltZS4KIAogV3JpdGluZyAiLTEiIHRvIHBvd2VyL2F1dG9zdXNwZW5kIGFuZCB3cml0aW5nICJvbiIgdG8gcG93ZXIvbGV2ZWwgZG8KIGVzc2VudGlhbGx5IHRoZSBzYW1lIHRoaW5nIC0tIHRoZXkgYm90aCBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZwpAQCAtMzc3LDkgKzM3Niw5IEBACiByb3V0aW5lIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwIHRvIGNhcnJ5IG91dCB0aGUgb3BlcmF0aW9uIHdoZW4gdGhlCiBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IGhhcyBleHBpcmVkLgogCi1BdXRvcmVzdW1lIGF0dGVtcHRzIGFsc28gY2FuIGZhaWwuICBUaGlzIHdpbGwgaGFwcGVuIGlmIHBvd2VyL2xldmVsIGlzCi1zZXQgdG8gInN1c3BlbmQiIG9yIGlmIHRoZSBkZXZpY2UgZG9lc24ndCBtYW5hZ2UgdG8gcmVzdW1lIHByb3Blcmx5LgotVW5saWtlIGF1dG9zdXNwZW5kLCB0aGVyZSdzIG5vIGRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgorQXV0b3Jlc3VtZSBhdHRlbXB0cyBhbHNvIGNhbiBmYWlsLCBhbHRob3VnaCBmYWlsdXJlIHdvdWxkIG1lYW4gdGhhdAordGhlIGRldmljZSBpcyBubyBsb25nZXIgcHJlc2VudCBvciBvcGVyYXRpbmcgcHJvcGVybHkuICBVbmxpa2UKK2F1dG9zdXNwZW5kLCB0aGVyZSdzIG5vIGRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgogCiAKIAlPdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIGludGVyZmFjZQpAQCAtNTI3LDEzICs1MjYsMyBAQAogcmVzdW1lIGFzIHNvb24gYXMgdGhlIHN5c3RlbSBzdXNwZW5kIGlzIGNvbXBsZXRlLiAgT3IgdGhlIHJlbW90ZQogd2FrZXVwIG1heSBmYWlsIGFuZCBnZXQgbG9zdC4gIFdoaWNoIG91dGNvbWUgb2NjdXJzIGRlcGVuZHMgb24gdGltaW5nCiBhbmQgb24gdGhlIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBkZXNpZ24uCi0KLU1vcmUgaW50ZXJlc3RpbmdseSwgYSBkZXZpY2UgbWlnaHQgdW5kZXJnbyBhIG1hbnVhbCByZXN1bWUgb3IKLWF1dG9yZXN1bWUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLiAgV2l0aCBjdXJyZW50IGtlcm5lbHMgdGhpcyBzaG91bGRuJ3QKLWhhcHBlbiwgYmVjYXVzZSBtYW51YWwgcmVzdW1lcyBtdXN0IGJlIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgYW5kCi1hdXRvcmVzdW1lcyBoYXBwZW4gaW4gcmVzcG9uc2UgdG8gSS9PIHJlcXVlc3RzLCBidXQgYWxsIHVzZXIgcHJvY2Vzc2VzCi1hbmQgSS9PIHNob3VsZCBiZSBxdWllc2NlbnQgZHVyaW5nIGEgc3lzdGVtIHN1c3BlbmQgLS0gdGhhbmtzIHRvIHRoZQotZnJlZXplci4gIEhvd2V2ZXIgdGhlcmUgYXJlIHBsYW5zIHRvIGRvIGF3YXkgd2l0aCB0aGUgZnJlZXplciwgd2hpY2gKLXdvdWxkIG1lYW4gdGhlc2UgdGhpbmdzIHdvdWxkIGJlY29tZSBwb3NzaWJsZS4gIElmIGFuZCB3aGVuIHRoaXMgY29tZXMKLWFib3V0LCB0aGUgVVNCIGNvcmUgd2lsbCBjYXJlZnVsbHkgYXJyYW5nZSBtYXR0ZXJzIHNvIHRoYXQgZWl0aGVyIHR5cGUKLW9mIHJlc3VtZSB3aWxsIGJsb2NrIHVudGlsIHRoZSBlbnRpcmUgc3lzdGVtIGhhcyByZXN1bWVkLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBkNTI0NGYxLi42NmY1ZjdkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTQ3Miw2ICsxNDcyLDEyIEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvc2NzaS9mbmljLwogCitDTVBDIEFDUEkgRFJJVkVSCitNOglUaGFkZXUgTGltYSBkZSBTb3V6YSBDYXNjYXJkbyA8Y2FzY2FyZG9AaG9sb3Njb3Bpby5jb20+CitNOglEYW5pZWwgT2xpdmVpcmEgTmFzY2ltZW50byA8ZG9uQHN5c3QuY29tLmJyPgorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKKwogQ09EQSBGSUxFIFNZU1RFTQogTToJSmFuIEhhcmtlcyA8amFoYXJrZXNAY3MuY211LmVkdT4KIE06CWNvZGFAY3MuY211LmVkdQpAQCAtMzY0Niw2ICszNjUyLDExIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktbGFwdG9wLmMKIAorTVNJIFdNSSBTVVBQT1JUCitNOglBbmlzc2UgQXN0aWVyIDxhbmlzc2VAYXN0aWVyLmV1PgorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKKwogTVVMVElGVU5DVElPTiBERVZJQ0VTIChNRkQpCiBNOglTYW11ZWwgT3J0aXogPHNhbWVvQGxpbnV4LmludGVsLmNvbT4KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc2FtZW8vbWZkLTIuNi5naXQKQEAgLTM2NzksNyArMzY5MCw3IEBACiBNVVNCIE1VTFRJUE9JTlQgSElHSCBTUEVFRCBEVUFMLVJPTEUgQ09OVFJPTExFUgogTToJRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbm9raWEuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwotVDoJZ2l0IGdpdDovL2dpdG9yaW91cy5vcmcvbXVzYi9tYWlubGluZS5naXQKK1Q6CWdpdCBnaXQ6Ly9naXRvcmlvdXMub3JnL3VzYi91c2IuZ2l0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3VzYi9tdXNiLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggYmM5MDM2NC4uY2MzMmMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJCQkgKiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgY29oZXJlbnQKIAkJCSAqIHdpdGggdXNlciBtYXBwaW5ncy4KIAkJCSAqLwotCQkJX19jcHVjX2ZsdXNoX2tlcm5lbF9kY2FjaGVfYXJlYShwdHIsIHNpemUpOworCQkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHB0ciwgc2l6ZSk7CiAJCX0KIAkJZnJlZV9zYWZlX2J1ZmZlcihkZXYtPmFyY2hkYXRhLmRtYWJvdW5jZSwgYnVmKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCmluZGV4IDFjYWI0ZTcuLjZlMzJhODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCkBAIC0xODcsNyArMTg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfdGlueV9kZWZjb25maWcKaW5kZXggOGUzZDA4NC4uYjM0YjFlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnCkBAIC0xODYsNyArMTg2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hZmViOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwppbmRleCBmN2EyNzJjLi42NGZlN2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwpAQCAtMjI3LDcgKzIyNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0yMDBlcGRraXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKaW5kZXggNWU2ODQyMC4uMzA5MjdjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKQEAgLTE4OSw3ICsxODksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcKaW5kZXggYWQ1NGU5Mi4uYWJlOTk2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnCkBAIC0yMzMsNyArMjMzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKaW5kZXggZThmNzM4MGIuLjNiM2EzNzc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC0yMTAsNyArMjEwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKaW5kZXggYzY2ZGQzOS4uZGFhNzViYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCkBAIC0xMDEsNyArMTAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxY2FwOWFka19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZwppbmRleCBiYzZiZDlmLi5iMWFiNTBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZwpAQCAtMTgxLDcgKzE4MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZwppbmRleCBjOTdlMTAyLi4xZmZmZWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCkBAIC0xMzAsNyArMTMwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKaW5kZXggOWY3YTk5YS4uYzg0NmE3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZwpAQCAtMTI5LDcgKzEyOSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcKaW5kZXggOThlMmYzZC4uNDcyZWExMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwZWtfZGVmY29uZmlnCkBAIC0xODgsNyArMTg4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcKaW5kZXggMTQ5NDU2MS4uNGVjZGU0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnCkBAIC0xODEsNyArMTgxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcKaW5kZXggMjE1OTlmMy4uOWI3OTJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnCkBAIC0xODEsNyArMTgxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWcyMGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnMjBla19kZWZjb25maWcKaW5kZXggN2UwMThhMC4uNjRjZTEwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWcyMGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05ZzIwZWtfZGVmY29uZmlnCkBAIC0xODcsNyArMTg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnCmluZGV4IGUyZGY4MWEuLjkwZTQ4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxla19kZWZjb25maWcKQEAgLTE3OSw3ICsxNzksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0ZWI5MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCmluZGV4IGExOWU4MjQuLjYzMTU1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCkBAIC0xMzIsNyArMTMyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKaW5kZXggZjI2NDg0Ni4uYjE3NWI2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwpAQCAtMTAzLDcgKzEwMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCmluZGV4IGJjYzBiYWMuLjFlMTIxNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iY21yaW5nX2RlZmNvbmZpZwpAQCAtMTgxLDcgKzE4MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jYW02MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwppbmRleCA4NDQ4MTA4Li5lZWYzM2RlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwpAQCAtMTk2LDcgKzE5Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Nhcm1ldmFfZGVmY29uZmlnCmluZGV4IGQzOTI4MzMuLmI2YTcwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jYXJtZXZhX2RlZmNvbmZpZwpAQCAtOTcsNyArOTcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKaW5kZXggMmI0YzA2Ni4uZDY2MmNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKQEAgLTEwNSw3ICsxMDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NtX3QzNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3QzNV9kZWZjb25maWcKaW5kZXggZTQyYzVjOC4uODkzY2QyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21fdDM1X2RlZmNvbmZpZwpAQCAtMjM2LDcgKzIzNiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcKaW5kZXggNzk3Yjc5MC4uNDdkMjJkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCkBAIC0yMDUsNyArMjA1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3gzMDBfZGVmY29uZmlnCmluZGV4IGEwMTcwODYuLmEzMzQwNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jbV94MzAwX2RlZmNvbmZpZwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwppbmRleCA0Y2YzYmRlLi5jOTYyODcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwpAQCAtMjA0LDcgKzIwNCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCmluZGV4IDQ3NzRhMzYuLjExZmRiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCkBAIC0yMTIsNyArMjEyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0MzPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKaW5kZXggMWFhNjIyNC4uMjZlNDU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwpAQCAtMTI1LDcgKzEyNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKaW5kZXggZDZjZDE2NS4uNWU0MDY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKQEAgLTIxNCw3ICsyMTQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKaW5kZXggNjAxZTdmMy4uYzkxMzdhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTkyNjBfZGVmY29uZmlnCkBAIC0yMjksNyArMjI5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5ZzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OWcyMF9kZWZjb25maWcKaW5kZXggYjViOWNiYi4uZDIzNDQ3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHU5ZzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCkBAIC0yMTksNyArMjE5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKaW5kZXggNDkwMTgyNy4uMWY4ZGRhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdWF0OTFfZGVmY29uZmlnCkBAIC0yMzAsNyArMjMwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCmluZGV4IDI5ZjY4YzIuLmYwOTUwNDBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCkBAIC0xOTMsNyArMTkzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCmluZGV4IGY3YjYwY2UuLjUwNzE1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKQEAgLTIxNSw3ICsyMTUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2RhOHh4X29tYXBsX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGE4eHhfb21hcGxfZGVmY29uZmlnCmluZGV4IDUwYmQyNWExLi5lMTRjOTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2RhOHh4X29tYXBsX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2RhOHh4X29tYXBsX2RlZmNvbmZpZwpAQCAtMjI1LDcgKzIyNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKaW5kZXggYmQ2NTZlOC4uNjI1MDM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKQEAgLTIyMyw3ICsyMjMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kb3ZlX2RlZmNvbmZpZwppbmRleCBiM2E0OTE2Li5iN2IyYWIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcKQEAgLTE4Niw3ICsxODYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnCmluZGV4IGFmY2ZmZjYuLmQ1ZTgyNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZwpAQCAtODMsNyArODMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZWNiYXQ5MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VjYmF0OTFfZGVmY29uZmlnCmluZGV4IGNhNTIwNzMuLjI1ZGQ1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWNiYXQ5MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lY2JhdDkxX2RlZmNvbmZpZwpAQCAtMTg2LDcgKzE4Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnCmluZGV4IDZiYTczNTUuLmUzYTZjZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZwpAQCAtOTAsNyArOTAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9MVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCmluZGV4IGU5OTU1YjcuLjJiZWU5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZwpAQCAtMjAyLDcgKzIwMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKaW5kZXggM2ZiMDgzYi4uMzVkNzM1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZwpAQCAtMTk4LDcgKzE5OCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKaW5kZXggYjZjNWNiYi4uNzRiYWY1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcKQEAgLTIwMyw3ICsyMDMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnCmluZGV4IDQ5MmYyOWEuLjllOTA1N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXp4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcKQEAgLTI0MCw3ICsyNDAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKaW5kZXggNmFjZTUxMi4uMDRkOTc5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCkBAIC05NSw3ICs5NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZwppbmRleCA2NWRjNzNhLi5kNTgxNDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZwpAQCAtODgsNyArODgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9MVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcKaW5kZXggZWZhNzhlMS4uYThhZDhmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcKQEAgLTIwNSw3ICsyMDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDUwMDBfZGVmY29uZmlnCmluZGV4IDY0OWJhYTMuLjViYjczNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDUwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDUwMDBfZGVmY29uZmlnCkBAIC0yMDYsNyArMjA2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcKaW5kZXggMTE2OTIwYS4uMDlhNmM2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcKQEAgLTg3LDcgKzg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk03MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfTFY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnCmluZGV4IDBlNzM5YWYuLmZlZGM1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnCkBAIC05MSw3ICs5MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNNzIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKaW5kZXggZGIwNzA4ZC4uMmRhMWFjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCkBAIC0xMDMsNyArMTAzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9odGNoZXJhbGRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9odGNoZXJhbGRfZGVmY29uZmlnCmluZGV4IDFiMzk2OTEuLmUwZWYwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcKQEAgLTI0MSw3ICsyNDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNVQ9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lnZXAwMDIwX2RlZmNvbmZpZwppbmRleCBjOTdmOGQwLi5hMTkyMjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lnZXAwMDIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lnZXAwMDIwX2RlZmNvbmZpZwpAQCAtMjM4LDcgKzIzOCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKaW5kZXggM2NlOTZlNjAuLjZiMGQwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwpAQCAtOTIsNyArOTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKICMgQ09ORklHX0NQVV9BUk05MjJUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDEzeHhfZGVmY29uZmlnCmluZGV4IDg5YzE3NzYuLjNjMDQwY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMTN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pb3AxM3h4X2RlZmNvbmZpZwpAQCAtMTYzLDcgKzE2Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnCmluZGV4IGQ3MDE3N2IuLjYyYTg1NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcKQEAgLTE2OCw3ICsxNjgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCmluZGV4IGVkMmQ1OWQuLjBiYzIzZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKQEAgLTE5OCw3ICsxOTgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKaW5kZXggNTc1MjZjMS4uOGI1YjU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCkBAIC0xNTEsNyArMTUxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCmluZGV4IGVmOTc1NjEuLjU5YzExYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwpAQCAtMTQ1LDcgKzE0NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCmluZGV4IDk1Y2Q4ZGYuLmE5MDdhZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKQEAgLTE4OSw3ICsxODksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKaW5kZXggZGY5YmZiZS4uZDFmMTY0NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwpAQCAtMjAyLDcgKzIwMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCmluZGV4IDlmOTJmYzUuLmY2NjFlNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZwpAQCAtMTMyLDcgKzEzMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnCmluZGV4IDYwNWE4NDYuLjY2OGJhNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2I5MjAyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tiOTIwMl9kZWZjb25maWcKQEAgLTIzMCw3ICsyMzAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCmluZGV4IGJjZmFkZTMuLjVmYzQ0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCkBAIC0yMDEsNyArMjAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9GRVJPQ0VPTj15CiAjIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2NT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcKaW5kZXggZDI1YzQxYi4uZTZmMjI3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rczg2OTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZwpAQCAtMTg2LDcgKzE4Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIyVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCmluZGV4IDU2YWU1NjguLmFmNzU5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZwpAQCAtOTksNyArOTksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sb2tpX2RlZmNvbmZpZwppbmRleCBiNzIwZmNmLi42ZGY3YjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbG9raV9kZWZjb25maWcKQEAgLTE3NCw3ICsxNzQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0ZFUk9DRU9OPXkKICMgQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY1PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZwppbmRleCAxYTM4ZDhlLi5hZWI3Njg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDI3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQyNzBfZGVmY29uZmlnCkBAIC0xNDMsNyArMTQzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKaW5kZXggZjhhYzI5ZC4uNjExNmZlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKQEAgLTk1LDcgKzk1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCmluZGV4IDdhMmU5MzIuLjE0MmNjY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCkBAIC0xMTcsNyArMTE3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZwppbmRleCBlNTQ0YmZiLi43NWM2MjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcKQEAgLTkyLDcgKzkyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHVzbDcyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKaW5kZXggNDJmNmE3Ny4uYzFhMWZiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKQEAgLTgyLDcgKzgyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk03MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfTFY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCmluZGV4IDk1N2ZkNWYuLjhlOWE3MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCkBAIC0yMDQsNyArMjA0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZwppbmRleCBjYzhjOTViLi4xY2RkYjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnCkBAIC05Myw3ICs5Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnCmluZGV4IGU0OWVkNDAuLmQyYTkwZWI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZwpAQCAtMjU2LDcgKzI1Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZwppbmRleCBjYzNiMDZlLi5mZTI1ZTNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21zbV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnCkBAIC0xNTUsNyArMTU1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCmluZGV4IDM5ODI3NGIuLjZhZmEyYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZwpAQCAtMTgxLDcgKzE4MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfRkVST0NFT049eQogQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQ9eQogQ09ORklHX0NQVV8zMnY1PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxX2RlZmNvbmZpZwppbmRleCAwMjAwZDY3Li5mNTc1MDcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDFfZGVmY29uZmlnCkBAIC0xOTAsNyArMTkwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDFhZHNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDFhZHNfZGVmY29uZmlnCmluZGV4IDU3N2Q3ZTEuLjNjYWJiYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcKQEAgLTg4LDcgKzg4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MjFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDIxX2RlZmNvbmZpZwppbmRleCA0YjA0MjkwLi4xZWNkNjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgyMV9kZWZjb25maWcKQEAgLTE4NSw3ICsxODUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDI3X2RlZmNvbmZpZwppbmRleCA3NTI2M2E4Li5lZGZkZDZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcKQEAgLTIwNyw3ICsyMDcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MzFwZGtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDMxcGRrX2RlZmNvbmZpZwppbmRleCA5NWZmYzBkLi5kNDA5NTM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MzFwZGtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgzMXBka19kZWZjb25maWcKQEAgLTE3Myw3ICsxNzMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDNfZGVmY29uZmlnCmluZGV4IDc3MzRjY2EuLjhhMDZiYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214M19kZWZjb25maWcKQEAgLTIxOCw3ICsyMTgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcKaW5kZXggYTE2NTdiNy4uNzVjYWUxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnCkBAIC0yMTAsNyArMjEwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKaW5kZXggMjY0ZjUyYi4uZTZmNjY3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCkBAIC0yMzIsNyArMjMyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVvY29yZTkyNl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25lb2NvcmU5MjZfZGVmY29uZmlnCmluZGV4IGUwZTRlOTguLmQxNjVjNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVvY29yZTkyNl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZW9jb3JlOTI2X2RlZmNvbmZpZwpAQCAtMjE4LDcgKzIxOCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKaW5kZXggMzZjZDYyZS4uMTcxMjY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKQEAgLTEwMyw3ICsxMDMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcKaW5kZXggYzFhNjNhMy4uNzhmNThhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZwpAQCAtODksNyArODksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnCmluZGV4IDYxZDBmYzUuLjJhOTdlMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZwpAQCAtMTIyLDcgKzEyMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCmluZGV4IDYwMGNiMjcuLjkyZDkwODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZwpAQCAtMTkxLDcgKzE5MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTEwX2RlZmNvbmZpZwppbmRleCA1MjQ1NjU1Li5mODA4NDhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL251YzkxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9udWM5MTBfZGVmY29uZmlnCkBAIC0xODAsNyArMTgwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9udWM5NTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9udWM5NTBfZGVmY29uZmlnCmluZGV4IGRmMWRlOWIuLjk3MzAwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTUwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL251Yzk2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL251Yzk2MF9kZWZjb25maWcKaW5kZXggNGIyY2Q5ZS4uYWE3ZTEyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9udWM5NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTYwX2RlZmNvbmZpZwpAQCAtMjAxLDcgKzIwMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwppbmRleCA5Y2ZhZTM3Li5jNzk5OWY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCkBAIC0yMTMsNyArMjEzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCmluZGV4IDJhZjI4ZWEuLjM2N2JlOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCkBAIC0yNDUsNyArMjQ1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2V2bV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2V2bV9kZWZjb25maWcKaW5kZXggZTE5MGZjOC4uODZjYzRiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZwpAQCAtMjIwLDcgKzIyMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKaW5kZXggYjdhOGQ5Zi4uZjc0ZWI5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCkBAIC0yMTEsNyArMjExLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3RvdWNoYm9va19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3RvdWNoYm9va19kZWZjb25maWcKaW5kZXggN2M4NTE1ZS4uNzRmZTZiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfdG91Y2hib29rX2RlZmNvbmZpZwpAQCAtMjQ2LDcgKzI0Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnCmluZGV4IDY0MGU5YWYuLjQ1YjRlYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8yNDMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMjQzMHNkcF9kZWZjb25maWcKQEAgLTE5Nyw3ICsxOTcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCmluZGV4IDU5MjQ1N2MuLmJiMjkxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKQEAgLTIzMiw3ICsyMzIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZwppbmRleCBlODM2YzhhLi5kMjVjM2Q0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzYzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM2MzBzZHBfZGVmY29uZmlnCkBAIC0yMzYsNyArMjM2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKaW5kZXggMjMxOTExMy4uM2RlNjQwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZwpAQCAtMjIwLDcgKzIyMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2Fwb2xsb25fMjQyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfYXBvbGxvbl8yNDIwX2RlZmNvbmZpZwppbmRleCBhYzdhZGYzLi5jYzg2MzQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfYXBvbGxvbl8yNDIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfYXBvbGxvbl8yNDIwX2RlZmNvbmZpZwpAQCAtMTk2LDcgKzE5Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE1MTBfZGVmY29uZmlnCmluZGV4IGNjZGM2NjEuLjYxNzQ0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE1MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE1MTBfZGVmY29uZmlnCkBAIC0yMDUsNyArMjA1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZwppbmRleCAwYzQyYzg5Li5kNzczODU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZwpAQCAtMjA3LDcgKzIwNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE3MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTcxMF9kZWZjb25maWcKaW5kZXggMGEwMGE3MC4uNmVjNDg3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTcxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTcxMF9kZWZjb25maWcKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18yNDIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzI0MjBfZGVmY29uZmlnCmluZGV4IGNmNDA3M2IuLjcyMThiOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzI0MjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzI0MjBfZGVmY29uZmlnCkBAIC0xOTEsNyArMTkxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwppbmRleCA3NGRiZGM2Li41MjMxODk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCkBAIC0yMzEsNyArMjMxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2g0XzI0MjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2g0XzI0MjBfZGVmY29uZmlnCmluZGV4IGE0YWFiOGUuLmIxMmI0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oNF8yNDIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDRfMjQyMF9kZWZjb25maWcKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTUxMF9kZWZjb25maWcKaW5kZXggMGNmZTM2My4uZTljMTQwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE1MTBfZGVmY29uZmlnCkBAIC0yMDUsNyArMjA1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTYxMF9kZWZjb25maWcKaW5kZXggOTVkOWYyYi4uZmVhOTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE2MTBfZGVmY29uZmlnCkBAIC0yMDYsNyArMjA2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZwppbmRleCA5MTM5NTMyLi4wZWZiNGIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZwpAQCAtMjE0LDcgKzIxNCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9vc2tfNTkxMl9kZWZjb25maWcKaW5kZXggNmIzYjVjNi4uNTU2ZmNjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnCkBAIC0yMTIsNyArMjEyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfcGVyc2V1czJfNzMwX2RlZmNvbmZpZwppbmRleCBiOTQ4MDBjLi45YTE1ZDVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfcGVyc2V1czJfNzMwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfcGVyc2V1czJfNzMwX2RlZmNvbmZpZwpAQCAtMTk5LDcgKzE5OSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTJfZGVmY29uZmlnCmluZGV4IDRiMDBhNDMuLmE4MmU4MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tMl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZwpAQCAtMjIyLDcgKzIyMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcKaW5kZXggMGQ3ZTM3YS4uYTNlM2M4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCkBAIC0yMzYsNyArMjM2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcKaW5kZXggZjg3MDFmYS4uMTliOTFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZwpAQCAtMTYxLDcgKzE2MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IDUzODNjZDAuLjg1YjA1ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtMjEwLDcgKzIxMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfRkVST0NFT049eQogQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQ9eQogQ09ORklHX0NQVV8zMnY1PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcKaW5kZXggYjNlYTJjNC4uYmYwNmQzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcKQEAgLTIxNyw3ICsyMTcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXRlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXRlX2RlZmNvbmZpZwppbmRleCA0MGZjNmE3Li5mZWZmYWEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BhbG10ZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtdGVfZGVmY29uZmlnCkBAIC0xOTYsNyArMTk2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtdHRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtdHRfZGVmY29uZmlnCmluZGV4IGU1NGNlZDQuLjU1ZDViN2RmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BhbG10dF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtdHRfZGVmY29uZmlnCkBAIC0xNzYsNyArMTc2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3MV9kZWZjb25maWcKaW5kZXggMDhlMTQwNi4uNmVmYzc0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BhbG16NzFfZGVmY29uZmlnCkBAIC0yMDAsNyArMjAwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3Ml9kZWZjb25maWcKaW5kZXggYTBkYzM3Yy4uNmQxNjJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BhbG16NzJfZGVmY29uZmlnCkBAIC0yMDksNyArMjA5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZwppbmRleCAwNWFkOTZhLi5mYTE1M2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wY20wMjdfZGVmY29uZmlnCkBAIC0xNjgsNyArMTY4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnCmluZGV4IDkwMThmMGYuLjZlNzE1NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9waWNvdHV4MjAwX2RlZmNvbmZpZwpAQCAtMTY4LDcgKzE2OCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCmluZGV4IGYyZDJkZGEuLmRiZmFiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwpAQCAtMTAwLDcgKzEwMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnCmluZGV4IDY3YjVmMWUuLjJmN2I5Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZwpAQCAtMTIxLDcgKzEyMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZwppbmRleCBkYjVmYWVhLi43OTFiOGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGExNjhfZGVmY29uZmlnCkBAIC0xODQsNyArMTg0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9NT0hBV0s9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnCmluZGV4IDQ2ZTUwODkuLjMzNjVjNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZwpAQCAtOTIsNyArOTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCmluZGV4IDczM2I4NTEuLjgyY2E2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKQEAgLTI0MCw3ICsyNDAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQzM9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhOTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhOTEwX2RlZmNvbmZpZwppbmRleCA4YzdlMjk5Li45NGUyMGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnCkBAIC0xODQsNyArMTg0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9NT0hBV0s9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZwppbmRleCA5YjMyZDBlLi4xMmQwZDY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3FpbC1hOTI2MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9xaWwtYTkyNjBfZGVmY29uZmlnCkBAIC0xOTUsNyArMTk1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCmluZGV4IDIxZGI0YjMuLjEyMzcwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKQEAgLTE4Niw3ICsxODYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiAjIENPTkZJR19DUFVfQVJNOTI2VCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1Y2PXkKIENPTkZJR19DUFVfMzJ2Nks9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwppbmRleCA5YTc1YzMwLi5hNTA5YTVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwpAQCAtMTg0LDcgKzE4NCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKICMgQ09ORklHX0NQVV9BUk05MjZUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZwppbmRleCBhMjlkNjFmLi5lOTEyNGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCkBAIC0xNTAsNyArMTUwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk02MTA9eQogQ09ORklHX0NQVV9BUk03MTA9eQogQ09ORklHX0NQVV9TQTExMD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZwppbmRleCAxNTU5NzM0Li5iNmVlZWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKQEAgLTIxMiw3ICsyMTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCmluZGV4IGI0OTgxMDQuLjJmMTBkYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwpAQCAtMjc3LDcgKzI3Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZwppbmRleCAzMjg2MDYwLi5mNTZlNTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcKQEAgLTE5Miw3ICsxOTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3M1cGMxMDBfZGVmY29uZmlnCmluZGV4IGIwZDdkM2QuLmRjMTA4YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zNXBjMTAwX2RlZmNvbmZpZwpAQCAtMjAyLDcgKzIwMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zYW05X2w5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtOV9sOTI2MF9kZWZjb25maWcKaW5kZXggMTE3NGUyNy4uODFiMjkwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zYW05X2w5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NhbTlfbDkyNjBfZGVmY29uZmlnCkBAIC0xNzUsNyArMTc1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKaW5kZXggOTg0ZjcwOTYuLjdjNDliYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZwpAQCAtOTksNyArOTksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCmluZGV4IDkwMjM1YmYuLjQ2ZGUxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCkBAIC0xNzMsNyArMTczLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKaW5kZXggNjg1ZDJiNS4uZWUyNWU2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwpAQCAtMTAxLDcgKzEwMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKaW5kZXggNzQ1YzY4Zi4uN2Q4OTQ4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKQEAgLTIxMiw3ICsyMTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZwppbmRleCA0NDQ2MWYxLi5iMWEzYTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZwpAQCAtMTkzLDcgKzE5Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3RtcDM3eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcKaW5kZXggNDAxMjc5ZC4uYTM3NTFjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcKQEAgLTE4Miw3ICsxODIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3N4MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N4MV9kZWZjb25maWcKaW5kZXggMjViMDA3Zi4uOGE5ZTdlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zeDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3gxX2RlZmNvbmZpZwpAQCAtMjEwLDcgKzIxMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnCmluZGV4IDlkMzJmYWUuLmRjY2YxNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy90Y3RfaGFtbWVyX2RlZmNvbmZpZwpAQCAtMjE1LDcgKzIxNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKaW5kZXggYjZmODM4MS4uMWU4ZjVhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKQEAgLTE1Niw3ICsxNTYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKaW5kZXggOTUzYmEwMi4uNjEwYWMzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCkBAIC0yMDcsNyArMjA3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91ODUwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3U4NTAwX2RlZmNvbmZpZwppbmRleCAxNWZkZTIyLi43MjdhZmY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3U4NTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3U4NTAwX2RlZmNvbmZpZwpAQCAtMjAxLDcgKzIwMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjBfZGVmY29uZmlnCmluZGV4IGZkNzc3NDAuLjg3YjcwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2MF9kZWZjb25maWcKQEAgLTE5NSw3ICsxOTUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2M19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2M19kZWZjb25maWcKaW5kZXggZTdjMTlkZC4uN2YwMThlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYzX2RlZmNvbmZpZwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwppbmRleCBiMTFjNWRhLi5hMWFmMGI5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwpAQCAtMTE3LDcgKzExNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKaW5kZXggNmFiNWRkNS4uOTA5ODg3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKQEAgLTIwNCw3ICsyMDQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKaW5kZXggMzNiYjcyNS4uODRhNzJhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCkBAIC0yMDgsNyArMjA4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MveWw5MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveWw5MjAwX2RlZmNvbmZpZwppbmRleCA5MTkyZTU5Li4zYjYyN2FhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3lsOTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy95bDkyMDBfZGVmY29uZmlnCkBAIC0xODMsNyArMTgzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKaW5kZXggODIzYjExZS4uZmNhNWZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3pldXNfZGVmY29uZmlnCkBAIC0yNzEsNyArMjcxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCmluZGV4IDM5NzY0MTIuLjhmZGFlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaApAQCAtMjQsMjA2ICsyNCwyMjggQEAKICAqIENQVV9OQU1FIC0gdGhlIHByZWZpeCBmb3IgQ1BVIHJlbGF0ZWQgZnVuY3Rpb25zCiAgKi8KIAotI2lmZGVmIENPTkZJR19DUFVfMzIKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTYKLSMgIGVuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm02CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNN1RETUkKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTd0ZG1pCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTdURE1JCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk03MTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNNzEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNwogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTcyMFQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcyMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk03MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNNzQwVAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzQwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTc0MFQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03NDAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk05VERNSQotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOXRkbWkKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOVRETUkKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05dGRtaQogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMFQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNOTIyVAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIyCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9GQTUyNgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmE1MjYKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfRkE1MjYKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9mYTUyNgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNVQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNQotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjVUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI1CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNOTI2VAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI2Ci0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjYKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk05NDBUCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05NDAKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTQwVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0MAogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTk0NkUKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0NgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05NDZFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQ2CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfU0ExMTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfc2ExMTAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMDAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNMTAyMEUKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTEwMjBlCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMGUKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjIKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNMTAyNgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyNgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk0xMDI2CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyNgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjYWxlCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzY2FsZQogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1hTQzMKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfWFNDMworIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X21vaGF3awotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmVyb2Nlb24KLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfRkVST0NFT04KKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9mZXJvY2VvbgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1Y2Ci0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV92NgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9WNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y2CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfVjcKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y3Ci0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1Y3CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfdjcKICMgZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmgKaW5kZXggZjI3Mzc5ZC4uYzQzOTFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX25vdGlmeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9ub3RpZnkuaApAQCAtNDEsNyArNDEsNyBAQAogICogVGhlc2UgYXJlIHRoZSByZWFzb24gY29kZXMgZm9yIHRoZSB0aHJlYWQgbm90aWZpZXIuCiAgKi8KICNkZWZpbmUgVEhSRUFEX05PVElGWV9GTFVTSAkwCi0jZGVmaW5lIFRIUkVBRF9OT1RJRllfUkVMRUFTRQkxCisjZGVmaW5lIFRIUkVBRF9OT1RJRllfRVhJVAkxCiAjZGVmaW5lIFRIUkVBRF9OT1RJRllfU1dJVENICTIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMgYi9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMKaW5kZXggNzY5YWJlMS4uMjVlZjIyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYwpAQCAtNTEsNyArNTEsNyBAQAogCQkgKiBpbml0aWFsaXNlZCBzdGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgZmF1bHQuCiAJCSAqLwogCi0JY2FzZSBUSFJFQURfTk9USUZZX1JFTEVBU0U6CisJY2FzZSBUSFJFQURfTk9USUZZX0VYSVQ6CiAJCWNydW5jaF90YXNrX3JlbGVhc2UodGhyZWFkKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMgYi9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCmluZGV4IDBlODhlNDYuLjM2MGJiNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYwpAQCAtMjA3LDggKzIwNyw2IEBACiAJCW91dGIoMHgzMiwgMHg0ZDYpOwogCQlvdXRiKDB4MzMsIDB4NGQ2KTsKIAotCQlyZXF1ZXN0X2RtYShETUFfSVNBX0NBU0NBREUsICJjYXNjYWRlIik7Ci0KIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1hX3Jlc291cmNlcyk7IGkrKykKIAkJCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgZG1hX3Jlc291cmNlcyArIGkpOwogCkBAIC0yMTgsNSArMjE2LDcgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgIklTQURNQSV1OiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLAogCQkJCQljaGFuLCByZXQpOwogCQl9CisKKwkJcmVxdWVzdF9kbWEoRE1BX0lTQV9DQVNDQURFLCAiY2FzY2FkZSIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDBkOTZkMDEuLjY3MzA0MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMjc0LDE3ICsyNzQsMTggQEAKIAlfX2JhY2t0cmFjZSgpOwogfQogCitBVE9NSUNfTk9USUZJRVJfSEVBRCh0aHJlYWRfbm90aWZ5X2hlYWQpOworCitFWFBPUlRfU1lNQk9MX0dQTCh0aHJlYWRfbm90aWZ5X2hlYWQpOworCiAvKgogICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KICAqLwogdm9pZCBleGl0X3RocmVhZCh2b2lkKQogeworCXRocmVhZF9ub3RpZnkoVEhSRUFEX05PVElGWV9FWElULCBjdXJyZW50X3RocmVhZF9pbmZvKCkpOwogfQogCi1BVE9NSUNfTk9USUZJRVJfSEVBRCh0aHJlYWRfbm90aWZ5X2hlYWQpOwotCi1FWFBPUlRfU1lNQk9MX0dQTCh0aHJlYWRfbm90aWZ5X2hlYWQpOwotCiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOwpAQCAtMjk5LDkgKzMwMCw2IEBACiAKIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCiB7Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0YXNrX3RocmVhZF9pbmZvKGRlYWRfdGFzayk7Ci0KLQl0aHJlYWRfbm90aWZ5KFRIUkVBRF9OT1RJRllfUkVMRUFTRSwgdGhyZWFkKTsKIH0KIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgX19hc21fXygicmV0X2Zyb21fZm9yayIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3hzY2FsZS1jcDAuYyBiL2FyY2gvYXJtL2tlcm5lbC94c2NhbGUtY3AwLmMKaW5kZXggMTcxMjdkYi4uMTc5NjE1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3hzY2FsZS1jcDAuYworKysgYi9hcmNoL2FybS9rZXJuZWwveHNjYWxlLWNwMC5jCkBAIC03MCw3ICs3MCw3IEBACiAJCSAqIGluaXRpYWxpc2VkIHN0YXRlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCBmYXVsdC4KIAkJICovCiAKLQljYXNlIFRIUkVBRF9OT1RJRllfUkVMRUFTRToKKwljYXNlIFRIUkVBRF9OT1RJRllfRVhJVDoKIAkJaXdtbXh0X3Rhc2tfcmVsZWFzZSh0aHJlYWQpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL01ha2VmaWxlCmluZGV4IDMyZjg2MDkuLjNhZmIxYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKLW9iai15CQkJOj0gY29tbW9uLm8gZGMyMTI4NS5vIGRtYS5vIGlzYS1pcnEubyB0aW1lLm8KK29iai15CQkJOj0gY29tbW9uLm8gZGMyMTI4NS5vIGRtYS5vIGlzYS1pcnEubwogb2JqLW0JCQk6PQogb2JqLW4JCQk6PQogb2JqLQkJCTo9CkBAIC0yNSw0ICsyNSw0IEBACiBvYmotJChDT05GSUdfUENJKQkrPSQocGNpLXkpCiBvYmotJChDT05GSUdfTEVEUykJKz0kKGxlZHMteSkKIAotb2JqLSQoQ09ORklHX0lTQSkJKz0gaXNhLm8KK29iai0kKENPTkZJR19JU0EpCSs9IGlzYS5vIGlzYS1ydGMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKaW5kZXggZGEzNWJjNS4uYmM1ZTgzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCkBAIC01Niw4ICs1Niw2IEBACiAJKkNTUl9USU1FUjFfQ05UTCA9IFRJTUVSX0NOVExfRU5BQkxFIHwgVElNRVJfQ05UTF9BVVRPUkVMT0FEIHwgVElNRVJfQ05UTF9ESVYxNjsKIAogCXNldHVwX2lycShJUlFfVElNRVIxLCAmZm9vdGJyaWRnZV90aW1lcl9pcnEpOwotCi0JaXNhX3J0Y19pbml0KCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgZm9vdGJyaWRnZV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtcnRjLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXJ0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZmRlNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXJ0Yy5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS1ydGMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUnVzc2VsbCBLaW5nLgorICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsIEJsdW5kZWxsCisgKgorICogQ0FUUyBoYXMgYSByZWFsLXRpbWUgY2xvY2ssIHRob3VnaCB0aGUgZXZhbHVhdGlvbiBib2FyZCBkb2Vzbid0LgorICoKKyAqIENoYW5nZWxvZzoKKyAqICAyMS1NYXItMTk5OAlSTUsJQ3JlYXRlZAorICogIDI3LUF1Zy0xOTk4CVBKQglDQVRTIHN1cHBvcnQKKyAqICAyOC1EZWMtMTk5OAlBUEgJTWFkZSBsZWRzIG9wdGlvbmFsCisgKiAgMjAtSmFuLTE5OTkJUk1LCVN0YXJ0ZWQgbWVyZ2Ugb2YgRUJTQTI4NSwgQ0FUUyBhbmQgTmV0V2luZGVyCisgKiAgMTYtTWFyLTE5OTkJUk1LCU1vcmUgc3VwcG9ydCBmb3IgRUJTQTI4NS1saWtlIG1hY2hpbmVzIHdpdGggUlRDcyBpbgorICovCisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJCSgweDcwKyh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJCTAKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKwordm9pZCBfX2luaXQgaXNhX3J0Y19pbml0KHZvaWQpCit7CisJaW50IHJlZ19kLCByZWdfYjsKKworCS8qCisJICogUHJvYmUgZm9yIHRoZSBSVEMuCisJICovCisJcmVnX2QgPSBDTU9TX1JFQUQoUlRDX1JFR19EKTsKKworCS8qCisJICogbWFrZSBzdXJlIHRoZSBkaXZpZGVyIGlzIHNldAorCSAqLworCUNNT1NfV1JJVEUoUlRDX1JFRl9DTENLXzMyS0haLCBSVENfUkVHX0EpOworCisJLyoKKwkgKiBTZXQgY29udHJvbCByZWcgQgorCSAqICAgKDI0IGhvdXIgbW9kZSwgdXBkYXRlIGVuYWJsZWQpCisJICovCisJcmVnX2IgPSBDTU9TX1JFQUQoUlRDX1JFR19CKSAmIDB4N2Y7CisJcmVnX2IgfD0gMjsKKwlDTU9TX1dSSVRFKHJlZ19iLCBSVENfUkVHX0IpOworCisJaWYgKChDTU9TX1JFQUQoUlRDX1JFR19BKSAmIDB4N2YpID09IFJUQ19SRUZfQ0xDS18zMktIWiAmJgorCSAgICBDTU9TX1JFQUQoUlRDX1JFR19CKSA9PSByZWdfYikgeworCQkvKgorCQkgKiBXZSBoYXZlIGEgUlRDLiAgQ2hlY2sgdGhlIGJhdHRlcnkKKwkJICovCisJCWlmICgocmVnX2QgJiAweDgwKSA9PSAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUlRDOiAqKiogd2FybmluZzogQ01PUyBiYXR0ZXJ5IGJhZFxuIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCmluZGV4IDBjODM5MDAuLmY0ODhmYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKQEAgLTc2LDggKzc2LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGlzYV90aW1lcl9pbml0KHZvaWQpCiB7Ci0JaXNhX3J0Y19pbml0KCk7Ci0KIAkvKiBlbmFibGUgUElUIHRpbWVyICovCiAJLyogc2V0IGZvciBwZXJpb2RpYyAoNCkgYW5kIExTQi9NU0Igd3JpdGUgKDB4MzApICovCiAJb3V0YigweDM0LCAweDQzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EuYwppbmRleCA3MjVhMjE5Li40ZDkyNzZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS5jCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC03NywxMSArODAsMTggQEAKIAogc3RhdGljIGludCBfX2luaXQgZm9vdGJyaWRnZV9pc2FfaW5pdCh2b2lkKQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKLQllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIFJUQyBkZXZpY2U6ICVkXG4iLCBlcnIpOworCWlmICghZm9vdGJyaWRnZV9jZm5fbW9kZSgpKQorCQlyZXR1cm4gMDsKKworCS8qIFBlcnNvbmFsIHNlcnZlciBkb2Vzbid0IGhhdmUgUlRDICovCisJaWYgKCFtYWNoaW5lX2lzX3BlcnNvbmFsX3NlcnZlcigpKSB7CisJCWlzYV9ydGNfaW5pdCgpOworCQllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOworCQlpZiAoZXJyKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgUlRDIGRldmljZTogJWRcbiIsIGVycik7CisJfQogCWVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgc2VyaWFsIGRldmljZTogJWRcbiIsIGVycik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3RpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QxYjU0Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC90aW1lLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZy4KLSAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAotICoKLSAqIENBVFMgaGFzIGEgcmVhbC10aW1lIGNsb2NrLCB0aG91Z2ggdGhlIGV2YWx1YXRpb24gYm9hcmQgZG9lc24ndC4KLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiAgMjEtTWFyLTE5OTgJUk1LCUNyZWF0ZWQKLSAqICAyNy1BdWctMTk5OAlQSkIJQ0FUUyBzdXBwb3J0Ci0gKiAgMjgtRGVjLTE5OTgJQVBICU1hZGUgbGVkcyBvcHRpb25hbAotICogIDIwLUphbi0xOTk5CVJNSwlTdGFydGVkIG1lcmdlIG9mIEVCU0EyODUsIENBVFMgYW5kIE5ldFdpbmRlcgotICogIDE2LU1hci0xOTk5CVJNSwlNb3JlIHN1cHBvcnQgZm9yIEVCU0EyODUtbGlrZSBtYWNoaW5lcyB3aXRoIFJUQ3MgaW4KLSAqLwotCi0jZGVmaW5lIFJUQ19QT1JUKHgpCQkocnRjX2Jhc2UrKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRAkJMAotCi0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLXN0YXRpYyBpbnQgcnRjX2Jhc2U7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBnZXRfaXNhX2Ntb3NfdGltZSh2b2lkKQotewotCXVuc2lnbmVkIGludCB5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWM7Ci0KLQkvLyBjaGVjayB0byBzZWUgaWYgdGhlIFJUQyBtYWtlcyBzZW5zZS4uLi4uCi0JaWYgKChDTU9TX1JFQUQoUlRDX1ZBTElEKSAmIFJUQ19WUlQpID09IDApCi0JCXJldHVybiBta3RpbWUoMTk3MCwgMSwgMSwgMCwgMCwgMCk7Ci0KLQlkbyB7Ci0JCXNlYyAgPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpOwotCQltaW4gID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKLQkJaG91ciA9IENNT1NfUkVBRChSVENfSE9VUlMpOwotCQlkYXkgID0gQ01PU19SRUFEKFJUQ19EQVlfT0ZfTU9OVEgpOwotCQltb24gID0gQ01PU19SRUFEKFJUQ19NT05USCk7Ci0JCXllYXIgPSBDTU9TX1JFQUQoUlRDX1lFQVIpOwotCX0gd2hpbGUgKHNlYyAhPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpKTsKLQotCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlzZWMgPSBiY2QyYmluKHNlYyk7Ci0JCW1pbiA9IGJjZDJiaW4obWluKTsKLQkJaG91ciA9IGJjZDJiaW4oaG91cik7Ci0JCWRheSA9IGJjZDJiaW4oZGF5KTsKLQkJbW9uID0gYmNkMmJpbihtb24pOwotCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKLQl9Ci0JaWYgKCh5ZWFyICs9IDE5MDApIDwgMTk3MCkKLQkJeWVhciArPSAxMDA7Ci0JcmV0dXJuIG1rdGltZSh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpOwotfQotCi1zdGF0aWMgaW50IHNldF9pc2FfY21vc190aW1lKHZvaWQpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0JaW50IHJlYWxfc2Vjb25kcywgcmVhbF9taW51dGVzLCBjbW9zX21pbnV0ZXM7Ci0JdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7Ci0JdW5zaWduZWQgbG9uZyBub3d0aW1lID0geHRpbWUudHZfc2VjOwotCi0Jc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsgLyogdGVsbCB0aGUgY2xvY2sgaXQncyBiZWluZyBzZXQgKi8KLQlDTU9TX1dSSVRFKChzYXZlX2NvbnRyb2x8UlRDX1NFVCksIFJUQ19DT05UUk9MKTsKLQotCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsgLyogc3RvcCBhbmQgcmVzZXQgcHJlc2NhbGVyICovCi0JQ01PU19XUklURSgoc2F2ZV9mcmVxX3NlbGVjdHxSVENfRElWX1JFU0VUMiksIFJUQ19GUkVRX1NFTEVDVCk7Ci0KLQljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwotCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7Ci0KLQkvKgotCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCi0JICogZG9uJ3QgaW50ZXJmZXJlIHdpdGggaG91ciBvdmVyZmxvdy4gVGhpcyBhdm9pZHMKLQkgKiBtZXNzaW5nIHdpdGggdW5rbm93biB0aW1lIHpvbmVzIGJ1dCByZXF1aXJlcyB5b3VyCi0JICogUlRDIG5vdCB0byBiZSBvZmYgYnkgbW9yZSB0aGFuIDE1IG1pbnV0ZXMKLQkgKi8KLQlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7Ci0JcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwotCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCi0JCXJlYWxfbWludXRlcyArPSAzMDsJCS8qIGNvcnJlY3QgZm9yIGhhbGYgaG91ciB0aW1lIHpvbmUgKi8KLQlyZWFsX21pbnV0ZXMgJT0gNjA7Ci0KLQlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewotCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOwotCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwotCQl9Ci0JCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKLQkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwotCX0gZWxzZQotCQlyZXR2YWwgPSAtMTsKLQotCS8qIFRoZSBmb2xsb3dpbmcgZmxhZ3MgaGF2ZSB0byBiZSByZWxlYXNlZCBleGFjdGx5IGluIHRoaXMgb3JkZXIsCi0JICogb3RoZXJ3aXNlIHRoZSBEUzEyODg3IChwb3B1bGFyIE1DMTQ2ODE4QSBjbG9uZSB3aXRoIGludGVncmF0ZWQKLQkgKiBiYXR0ZXJ5IGFuZCBxdWFydHopIHdpbGwgbm90IHJlc2V0IHRoZSBvc2NpbGxhdG9yIGFuZCB3aWxsIG5vdAotCSAqIHVwZGF0ZSBwcmVjaXNlbHkgNTAwIG1zIGxhdGVyLiBZb3Ugd29uJ3QgZmluZCB0aGlzIG1lbnRpb25lZCBpbgotCSAqIHRoZSBEYWxsYXMgU2VtaWNvbmR1Y3RvciBkYXRhIHNoZWV0cywgYnV0IHdobyBiZWxpZXZlcyBkYXRhCi0JICogc2hlZXRzIGFueXdheSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBNYXJrdXMgS3VobgotCSAqLwotCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7Ci0JQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBfX2luaXQgaXNhX3J0Y19pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfcGVyc29uYWxfc2VydmVyKCkpCi0JCS8qCi0JCSAqIEFkZC1pbiAyMTI4NXMgc2hvdWxkbid0IGFjY2VzcyB0aGUgUlRDCi0JCSAqLwotCQlydGNfYmFzZSA9IDA7Ci0JZWxzZQotCQlydGNfYmFzZSA9IDB4NzA7Ci0KLQlpZiAocnRjX2Jhc2UpIHsKLQkJaW50IHJlZ19kLCByZWdfYjsKLQotCQkvKgotCQkgKiBQcm9iZSBmb3IgdGhlIFJUQy4KLQkJICovCi0JCXJlZ19kID0gQ01PU19SRUFEKFJUQ19SRUdfRCk7Ci0KLQkJLyoKLQkJICogbWFrZSBzdXJlIHRoZSBkaXZpZGVyIGlzIHNldAotCQkgKi8KLQkJQ01PU19XUklURShSVENfUkVGX0NMQ0tfMzJLSFosIFJUQ19SRUdfQSk7Ci0KLQkJLyoKLQkJICogU2V0IGNvbnRyb2wgcmVnIEIKLQkJICogICAoMjQgaG91ciBtb2RlLCB1cGRhdGUgZW5hYmxlZCkKLQkJICovCi0JCXJlZ19iID0gQ01PU19SRUFEKFJUQ19SRUdfQikgJiAweDdmOwotCQlyZWdfYiB8PSAyOwotCQlDTU9TX1dSSVRFKHJlZ19iLCBSVENfUkVHX0IpOwotCi0JCWlmICgoQ01PU19SRUFEKFJUQ19SRUdfQSkgJiAweDdmKSA9PSBSVENfUkVGX0NMQ0tfMzJLSFogJiYKLQkJICAgIENNT1NfUkVBRChSVENfUkVHX0IpID09IHJlZ19iKSB7Ci0JCQlzdHJ1Y3QgdGltZXNwZWMgdHY7Ci0KLQkJCS8qCi0JCQkgKiBXZSBoYXZlIGEgUlRDLiAgQ2hlY2sgdGhlIGJhdHRlcnkKLQkJCSAqLwotCQkJaWYgKChyZWdfZCAmIDB4ODApID09IDApCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUlRDOiAqKiogd2FybmluZzogQ01PUyBiYXR0ZXJ5IGJhZFxuIik7Ci0KLQkJCXR2LnR2X25zZWMgPSAwOwotCQkJdHYudHZfc2VjID0gZ2V0X2lzYV9jbW9zX3RpbWUoKTsKLQkJCWRvX3NldHRpbWVvZmRheSgmdHYpOwotCQkJc2V0X3J0YyA9IHNldF9pc2FfY21vc190aW1lOwotCQl9IGVsc2UKLQkJCXJ0Y19iYXNlID0gMDsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKaW5kZXggOTIxY2VmOS4uMjBkYzBjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYwpAQCAtOTYsNiArOTYsNyBAQAogCiBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbnVjOTAwX3VhcnRfZGF0YVtdID0gewogCU5VQzkwMF84MjUwUE9SVChVQVJUMCksCisJe30sCiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9zZXJpYWxfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jCmluZGV4IDUxZjE3YjcuLmVjNzExZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiAvKiBTUEkgZGV2aWNlICovCiAKLXN0YXRpYyBzdHJ1Y3QgdzkwcDkxMF9zcGlfaW5mbyBudWM5MDBfc3BpZmxhc2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbnVjOTAwX3NwaV9pbmZvIG51YzkwMF9zcGlmbGFzaF9kYXRhID0gewogCS5udW1fY3MJCT0gMSwKIAkubHNiCQk9IDAsCiAJLnR4bmVnCQk9IDEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDA1MGQ5ZmUuLjU2ZjFhNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0yMiwxMSArMjIsMjEgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KIAogI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKIAorI2RlZmluZSBUWF9ET05FCShVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKK3N0YXRpYyB2b2xhdGlsZSB1MzIgKiB1YXJ0X2Jhc2UgPSAodTMyICopVUFSVDBfUEE7CisKIHN0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQogeworCS8qIENoZWNrIFRIUkUgYW5kIFRFTVQgYml0cyBiZWZvcmUgd2UgdHJhbnNtaXQgdGhlIGNoYXJhY3Rlci4KKwkgKi8KKwl3aGlsZSAoKHVhcnRfYmFzZVtVQVJUX0xTUl0gJiBUWF9ET05FKSAhPSBUWF9ET05FKQorCQliYXJyaWVyKCk7CisKKwkqdWFydF9iYXNlID0gY2g7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZGQ0Njk4Yy4uYmFmNjM4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xLDkgKzEsNSBAQAogY29tbWVudCAiUHJvY2Vzc29yIFR5cGUiCiAKLWNvbmZpZyBDUFVfMzIKLQlib29sCi0JZGVmYXVsdCB5Ci0KICMgU2VsZWN0IENQVSB0eXBlcyBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3RlZC4gIFRoaXMgc2VsZWN0cwogIyB3aGljaCBDUFVzIHdlIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBpbWFnZSwgYW5kIHRoZSBjb21waWxlciBpbnN0cnVjdGlvbgogIyBvcHRpbWlzZXIgYmVoYXZpb3VyLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKaW5kZXggODQxZjM1NS4uMGZhMTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCkBAIC00OCw3ICs0OCw3IEBACiAJICovCiAJaWYgKHBhZ2VfYWRkcmVzcyh0bykgIT0gTlVMTCkKICNlbmRpZgotCQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2Uoa3RvKTsKKwkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGt0bywgUEFHRV9TSVpFKTsKIAlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjEpOwogCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwppbmRleCA3Mjk2MDIyLi41NmVlMTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCkBAIC0yMDcsOSArMjA3LDggQEAKIAlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAocGFnZSkgewogCQl1bnNpZ25lZCBsb25nICpwMSwgKnAyOwotCQlwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoTF9QVEVfUFJFU0VOVHxMX1BURV9ZT1VOR3wKLQkJCQkJIExfUFRFX0RJUlRZfExfUFRFX1dSSVRFfAotCQkJCQkgTF9QVEVfTVRfQlVGRkVSQUJMRSk7CisJCXBncHJvdF90IHByb3QgPSBfX3BncHJvdF9tb2RpZnkoUEFHRV9LRVJORUwsCisJCQkJCUxfUFRFX01UX01BU0ssIExfUFRFX01UX0JVRkZFUkFCTEUpOwogCiAJCXAxID0gdm1hcCgmcGFnZSwgMSwgVk1fSU9SRU1BUCwgcHJvdCk7CiAJCXAyID0gdm1hcCgmcGFnZSwgMSwgVk1fSU9SRU1BUCwgcHJvdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDhjN2ZiZDEuLjE3MDhkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC00NTMsOCArNDUzLDcgQEAKIAogCXBncHJvdF91c2VyICAgPSBfX3BncHJvdChMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCB1c2VyX3BncHJvdCk7CiAJcGdwcm90X2tlcm5lbCA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8Ci0JCQkJIExfUFRFX0RJUlRZIHwgTF9QVEVfV1JJVEUgfAotCQkJCSBMX1BURV9FWEVDIHwga2Vybl9wZ3Byb3QpOworCQkJCSBMX1BURV9ESVJUWSB8IExfUFRFX1dSSVRFIHwga2Vybl9wZ3Byb3QpOwogCiAJbWVtX3R5cGVzW01UX0xPV19WRUNUT1JTXS5wcm90X2wxIHw9IGVjY19tYXNrOwogCW1lbV90eXBlc1tNVF9ISUdIX1ZFQ1RPUlNdLnByb3RfbDEgfD0gZWNjX21hc2s7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9NYWtlZmlsZSBiL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCmluZGV4IGIyOTE3OGMuLmRlYjNhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBud2ZwZS15CQkJCSs9IGZwYTExLm8gZnBhMTFfY3Bkby5vIGZwYTExX2NwZHQubyBcCiAJCQkJICAgZnBhMTFfY3BydC5vIGZwbW9kdWxlLm8gZnBvcGNvZGUubyBcCi0JCQkJICAgc29mdGZsb2F0Lm8gc2luZ2xlX2NwZG8ubyBkb3VibGVfY3Bkby5vCisJCQkJICAgc29mdGZsb2F0Lm8gc2luZ2xlX2NwZG8ubyBkb3VibGVfY3Bkby5vIFwKKwkJCQkgICBlbnRyeS5vCiAKIG53ZnBlLSQoQ09ORklHX0ZQRV9OV0ZQRV9YUCkJKz0gZXh0ZW5kZWRfY3Bkby5vCi1ud2ZwZS0kKENPTkZJR19DUFVfMzIpCQkrPSBlbnRyeS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuYwppbmRleCBmMjAyOTVmLi4yMDg4YTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMKQEAgLTE5MSwxMiArMTkxLDggQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQkvKgotCSAqIEluaXRpYWxpemUgJiBSZXNldCBQTU5DOiBDIGJpdCwgRCBiaXQgYW5kIFAgYml0LgotCSAqICBOb3RlOiBVc2luZyBhIHNsb3dlciBjb3VudCBmb3IgQ0NOVCAoRCBiaXQ6IGRpdmlkZSBieSA2NCkgcmVzdWx0cwotCSAqICAgaW4gYSBtb3JlIHN0YWJsZSBzeXN0ZW0KLQkgKi8KLQlhcm12N19wbW5jX3dyaXRlKFBNTkNfUCB8IFBNTkNfQyB8IFBNTkNfRCk7CisJLyogSW5pdGlhbGl6ZSAmIFJlc2V0IFBNTkM6IEMgYml0IGFuZCBQIGJpdCAqLworCWFybXY3X3BtbmNfd3JpdGUoUE1OQ19QIHwgUE1OQ19DKTsKIAogCiAJZm9yIChjbnQgPSBDQ05UOyBjbnQgPCBDTlRNQVg7IGNudCsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggYWVkMDViYy4uZjYwYTU0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtNjMsMTQgKzYzLDE1IEBACiAJcHV0X2NwdSgpOwogfQogCi1zdGF0aWMgdm9pZCB2ZnBfdGhyZWFkX3JlbGVhc2Uoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCitzdGF0aWMgdm9pZCB2ZnBfdGhyZWFkX2V4aXQoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCiB7CiAJLyogcmVsZWFzZSBjYXNlOiBQZXItdGhyZWFkIFZGUCBjbGVhbnVwLiAqLwogCXVuaW9uIHZmcF9zdGF0ZSAqdmZwID0gJnRocmVhZC0+dmZwc3RhdGU7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHRocmVhZC0+Y3B1OworCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CiAKIAlpZiAobGFzdF9WRlBfY29udGV4dFtjcHVdID09IHZmcCkKIAkJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKKwlwdXRfY3B1KCk7CiB9CiAKIC8qCkBAIC04OCwxMSArODksMTMgQEAKICAqCWJ1dCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLgogICogICAtIHdlIGNvdWxkIGJlIHByZWVtcHRlZCBpZiB0cmVlIHByZWVtcHQgcmN1IGlzIGVuYWJsZWQsIHNvCiAgKglpdCBpcyB1bnNhZmUgdG8gdXNlIHRocmVhZC0+Y3B1LgotICogIFRIUkVBRF9OT1RJRllfUkVMRUFTRToKLSAqICAgLSB0aGUgdGhyZWFkICh2KSB3aWxsIG5vdCBiZSBydW5uaW5nIG9uIGFueSBDUFU7IGl0IGlzIGEgZGVhZCB0aHJlYWQuCi0gKiAgIC0gdGhyZWFkLT5jcHUgd2lsbCBiZSB0aGUgbGFzdCBDUFUgdGhlIHRocmVhZCByYW4gb24sIHdoaWNoIG1heSBub3QKLSAqCWJlIHRoZSBjdXJyZW50IENQVS4KLSAqICAgLSB3ZSBjb3VsZCBiZSBwcmVlbXB0ZWQgaWYgdHJlZSBwcmVlbXB0IHJjdSBpcyBlbmFibGVkLgorICogIFRIUkVBRF9OT1RJRllfRVhJVAorICogICAtIHRoZSB0aHJlYWQgKHYpIHdpbGwgYmUgcnVubmluZyBvbiB0aGUgbG9jYWwgQ1BVLCBzbworICoJdiA9PT0gY3VycmVudF90aHJlYWRfaW5mbygpCisgKiAgIC0gdGhyZWFkLT5jcHUgaXMgdGhlIGxvY2FsIENQVSBudW1iZXIgYXQgdGhlIHRpbWUgaXQgaXMgYWNjZXNzZWQsCisgKglidXQgbWF5IGNoYW5nZSBhdCBhbnkgdGltZS4KKyAqICAgLSB3ZSBjb3VsZCBiZSBwcmVlbXB0ZWQgaWYgdHJlZSBwcmVlbXB0IHJjdSBpcyBlbmFibGVkLCBzbworICoJaXQgaXMgdW5zYWZlIHRvIHVzZSB0aHJlYWQtPmNwdS4KICAqLwogc3RhdGljIGludCB2ZnBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdikKIHsKQEAgLTEzMyw3ICsxMzYsNyBAQAogCWlmIChjbWQgPT0gVEhSRUFEX05PVElGWV9GTFVTSCkKIAkJdmZwX3RocmVhZF9mbHVzaCh0aHJlYWQpOwogCWVsc2UKLQkJdmZwX3RocmVhZF9yZWxlYXNlKHRocmVhZCk7CisJCXZmcF90aHJlYWRfZXhpdCh0aHJlYWQpOwogCiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKaW5kZXggOTFkZjk2OC4uN2FlNTg4OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC0xMzIsNiArMTMyLDEyIEBACiBleHRlcm4gaW50IF9faW5pdGRhdGEgbmlkX3RvX3B4bV9tYXBbTUFYX05VTU5PREVTXTsKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfYWNwaV9wZGModm9pZCkgeyByZXR1cm4gdHJ1ZTsgfQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfYWNwaV9zZXRfcGRjX2JpdHModTMyICpidWYpCit7CisJYnVmWzJdIHw9IEFDUElfUERDX0VTVF9DQVBBQklMSVRZX1NNUDsKK30KKwogI2RlZmluZSBhY3BpX3VubGF6eV90bGIoeCkKIAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDJhNzVlOTMuLmUxMjM2MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTgsMTAgKzE4LDYgQEAKIG9iai0kKENPTkZJR19JQTY0X0hQX1pYMSkJKz0gYWNwaS1leHQubwogb2JqLSQoQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIpICs9IGFjcGktZXh0Lm8KIAotaWZuZXEgKCQoQ09ORklHX0FDUElfUFJPQ0VTU09SKSwpCi1vYmoteQkJCQkrPSBhY3BpLXByb2Nlc3Nvci5vCi1lbmRpZgotCiBvYmotJChDT05GSUdfSUE2NF9QQUxJTkZPKQkrPSBwYWxpbmZvLm8KIG9iai0kKENPTkZJR19JT1NBUElDKQkJKz0gaW9zYXBpYy5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGktcHJvY2Vzc29yLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktcHJvY2Vzc29yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZGE3YmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLXByb2Nlc3Nvci5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIGFyY2gvaWE2NC9rZXJuZWwvYWNwaS1wcm9jZXNzb3IuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgotICogCVZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgotICogCS0gQWRkZWQgX1BEQyBmb3IgcGxhdGZvcm1zIHdpdGggSW50ZWwgQ1BVcwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotCi0jaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotCi1zdGF0aWMgdm9pZCBpbml0X2ludGVsX3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQotewotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpvYmpfbGlzdDsKLQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwotCXUzMiAqYnVmOwotCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcGRjLiBJdCB3aWxsIGJlIHVzZWQgbGF0ZXIuICovCi0Jb2JqX2xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCksIEdGUF9LRVJORUwpOwotCWlmICghb2JqX2xpc3QpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvYmogPSBrbWFsbG9jKHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksIEdGUF9LRVJORUwpOwotCWlmICghb2JqKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQlrZnJlZShvYmpfbGlzdCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlidWYgPSBrbWFsbG9jKDEyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJa2ZyZWUob2JqKTsKLQkJa2ZyZWUob2JqX2xpc3QpOwotCQlyZXR1cm47Ci0JfQotCi0JYnVmWzBdID0gQUNQSV9QRENfUkVWSVNJT05fSUQ7Ci0JYnVmWzFdID0gMTsKLQlidWZbMl0gPSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TTVA7Ci0JLyoKLQkgKiBUaGUgZGVmYXVsdCBvZiBQRENfU01QX1RfU1dDT09SRCBiaXQgaXMgc2V0IGZvciBJQTY0IGNwdSBzbwotCSAqIHRoYXQgT1NQTSBpcyBjYXBhYmxlIG9mIG5hdGl2ZSBBQ1BJIHRocm90dGxpbmcgc29mdHdhcmUKLQkgKiBjb29yZGluYXRpb24gdXNpbmcgQklPUyBzdXBwbGllZCBfVFNEIGluZm8uCi0JICovCi0JYnVmWzJdIHw9IEFDUElfUERDX1NNUF9UX1NXQ09PUkQ7Ci0KLQlvYmotPnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCW9iai0+YnVmZmVyLmxlbmd0aCA9IDEyOwotCW9iai0+YnVmZmVyLnBvaW50ZXIgPSAodTggKikgYnVmOwotCW9ial9saXN0LT5jb3VudCA9IDE7Ci0Jb2JqX2xpc3QtPnBvaW50ZXIgPSBvYmo7Ci0JcHItPnBkYyA9IG9ial9saXN0OwotCi0JcmV0dXJuOwotfQotCi0vKiBJbml0aWFsaXplIF9QREMgZGF0YSBiYXNlZCBvbiB0aGUgQ1BVIHZlbmRvciAqLwotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0JcHItPnBkYyA9IE5VTEw7Ci0JaW5pdF9pbnRlbF9wZGMocHIpOwotCXJldHVybjsKLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKTsKLQotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0JaWYgKHByLT5wZGMpIHsKLQkJa2ZyZWUocHItPnBkYy0+cG9pbnRlci0+YnVmZmVyLnBvaW50ZXIpOwotCQlrZnJlZShwci0+cGRjLT5wb2ludGVyKTsKLQkJa2ZyZWUocHItPnBkYyk7Ci0JCXByLT5wZGMgPSBOVUxMOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwppbmRleCAxOTRhYWNhLi42YTg4NjFiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCkBAIC0xMjgsOCArMTI4LDYgQEAKIAogLyogU0ggRXRoICovCiAjZGVmaW5lIFNIX0VUSF9BRERSCSgweEE0NjAwMDAwKQotI2RlZmluZSBTSF9FVEhfTUFIUgkoU0hfRVRIX0FERFIgKyAweDFDMCkKLSNkZWZpbmUgU0hfRVRIX01BTFIJKFNIX0VUSF9BRERSICsgMHgxQzgpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoX2V0aF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFNIX0VUSF9BRERSLApAQCAtNTA5LDYgKzUwNyw3IEBACiAKICNlbHNlCiAKKy8qIE1NQyBTUEkgKi8KIHN0YXRpYyBpbnQgbW1jX3NwaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX1BUWTYpOwpAQCAtNTQyLDYgKzU0MSw3IEBACiAJfSwKIH07CiAKKy8qIE1TSU9GMCAqLwogc3RhdGljIHN0cnVjdCBzaF9tc2lvZl9zcGlfaW5mbyBtc2lvZjBfZGF0YSA9IHsKIAkubnVtX2NoaXBzZWxlY3QgPSAxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IDA0YWQwZTEuLjA3MzczYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMTksOSArMTksMTEgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEuaD4KIAogI2lmZGVmIENPTkZJR19OUl9ETUFfQ0hBTk5FTFMKLSMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTICAgKENPTkZJR19OUl9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKKyNlbGlmIGRlZmluZWQoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCiAjZWxzZQotIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkwCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKaW5kZXggZjA4ODZiYy4uYzRlZDY2MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKQEAgLTE5LDEwICsxOSwxMCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCiAjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLwotI2RlZmluZSBETVRFNF9JUlEJNDAJLyogRE1BQzBCICovCi0jZGVmaW5lIERNVEU2X0lSUQk0MgotI2RlZmluZSBETVRFOF9JUlEJNzYJLyogRE1BQzFBICovCi0jZGVmaW5lIERNVEU5X0lSUQk3NworI2RlZmluZSBETVRFNF9JUlEJNzYJLyogRE1BQzBCICovCisjZGVmaW5lIERNVEU2X0lSUQk0MAorI2RlZmluZSBETVRFOF9JUlEJNDIJLyogRE1BQzFBICovCisjZGVmaW5lIERNVEU5X0lSUQk0MwogI2RlZmluZSBETVRFMTBfSVJRCTcyCS8qIERNQUMxQiAqLwogI2RlZmluZSBETVRFMTFfSVJRCTczCiAjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKaW5kZXggYTUyZjM1MS4uZDMyZjk2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKQEAgLTIzLDkgKzIzLDIzIEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyNC5oPgogCisvKiBETUEgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZSA9IFNIRE1BX0RNQU9SMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiAvKiBTZXJpYWwgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMDAwMDAsCkBAIC02NDksNiArNjYzLDcgQEAKIAkmdG11M19kZXZpY2UsCiAJJnRtdTRfZGV2aWNlLAogCSZ0bXU1X2RldmljZSwKKwkmZG1hX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljMF9kZXZpY2UsCiAJJmlpYzFfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCBlZjI2ZWJkLi5mNjg1YjliIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewpAQCAtMjk0LDYgKzI5NSwxOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU1X3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGUgPSAoU0hETUFfTUlYX0lSUSB8IFNIRE1BX0RNQU9SMSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4NV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCkBAIC0zMDcsNiArMzIwLDcgQEAKIAkmdG11M19kZXZpY2UsCiAJJnRtdTRfZGV2aWNlLAogCSZ0bXU1X2RldmljZSwKKwkmZG1hX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc4NV9kZXZpY2VzX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMgYi9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKaW5kZXggYWFmZjAwMy4uNmIzZDcwNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwpAQCAtNjIsNiArNjIsNyBAQAogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCisJCXNldF9ibF9iaXQoKTsKIAkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQkJY3B1X3NsZWVwKCk7CkBAIC02OSw2ICs3MCw3IEBACiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCWNsZWFyX2JsX2JpdCgpOwogCX0gZWxzZQogCQlwb2xsX2lkbGUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUuYyBiL2FyY2gvc2gvbW0vY2FjaGUuYwppbmRleCBlOTQxNWQzLi5iODYwN2ZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS5jCkBAIC0xMzMsMTIgKzEzMyw4IEBACiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJaWYgKHBmbl92YWxpZChwZm4pKSB7CiAJCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7Ci0JCWlmIChkaXJ0eSkgewotCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwotCi0JCQlpZiAocGFnZXNfZG9fYWxpYXMoYWRkciwgYWRkcmVzcyAmIFBBR0VfTUFTSykpCi0JCQkJX19mbHVzaF9wdXJnZV9yZWdpb24oKHZvaWQgKilhZGRyLCBQQUdFX1NJWkUpOwotCQl9CisJCWlmIChkaXJ0eSkKKwkJCV9fZmx1c2hfcHVyZ2VfcmVnaW9uKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCA2MGQyYjJkLi41NmY0NjJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC0xNDIsNiArMTQyLDMyIEBACiAJCXJldHVybiBtYXhfY3N0YXRlOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfYWNwaV9wZGModm9pZCkKK3sKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CisJcmV0dXJuIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgfHwKKwkJYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0NFTlRBVVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY3BpX3NldF9wZGNfYml0cyh1MzIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CisKKwlidWZbMl0gfD0gQUNQSV9QRENfQ19DQVBBQklMSVRZX1NNUDsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCisJCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TV1NNUDsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FDUEkpKQorCQlidWZbMl0gfD0gQUNQSV9QRENfVF9GRkg7CisKKwkvKgorCSAqIElmIG13YWl0L21vbml0b3IgaXMgdW5zdXBwb3J0ZWQsIEMyL0MzX0ZGSCB3aWxsIGJlIGRpc2FibGVkCisJICovCisJaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSkKKwkJYnVmWzJdICY9IH4oQUNQSV9QRENfQ19DMkMzX0ZGSCk7Cit9CisKICNlbHNlIC8qICFDT05GSUdfQUNQSSAqLwogCiAjZGVmaW5lIGFjcGlfbGFwaWMgMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZQppbmRleCBmZDVjYTk3Li42ZjM1MjYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIG9iai0kKENPTkZJR19BQ1BJX1NMRUVQKQkrPSBzbGVlcC5vIHdha2V1cF9ybS5vIHdha2V1cF8kKEJJVFMpLm8KIAogaWZuZXEgKCQoQ09ORklHX0FDUElfUFJPQ0VTU09SKSwpCi1vYmoteQkJCQkrPSBjc3RhdGUubyBwcm9jZXNzb3Iubworb2JqLXkJCQkJKz0gY3N0YXRlLm8KIGVuZGlmCiAKICQob2JqKS93YWtldXBfcm0ubzogICAgJChvYmopL3JlYWxtb2RlL3dha2V1cC5iaW4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcHJvY2Vzc29yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NWQxYjIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvcHJvY2Vzc29yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgotICogCVZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgotICogCS0gQWRkZWQgX1BEQyBmb3IgcGxhdGZvcm1zIHdpdGggSW50ZWwgQ1BVcwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotCi0jaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotCi1zdGF0aWMgdm9pZCBpbml0X2ludGVsX3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKm9ial9saXN0OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7Ci0JdTMyICpidWY7Ci0KLQkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwZGMuIEl0IHdpbGwgYmUgdXNlZCBsYXRlci4gKi8KLQlvYmpfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX29iamVjdF9saXN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvYmpfbGlzdCkgewotCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW9iaiA9IGttYWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvYmopIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCWtmcmVlKG9ial9saXN0KTsKLQkJcmV0dXJuOwotCX0KLQotCWJ1ZiA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQlrZnJlZShvYmopOwotCQlrZnJlZShvYmpfbGlzdCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlidWZbMF0gPSBBQ1BJX1BEQ19SRVZJU0lPTl9JRDsKLQlidWZbMV0gPSAxOwotCWJ1ZlsyXSA9IEFDUElfUERDX0NfQ0FQQUJJTElUWV9TTVA7Ci0KLQkvKgotCSAqIFRoZSBkZWZhdWx0IG9mIFBEQ19TTVBfVF9TV0NPT1JEIGJpdCBpcyBzZXQgZm9yIGludGVsIHg4NiBjcHUgc28KLQkgKiB0aGF0IE9TUE0gaXMgY2FwYWJsZSBvZiBuYXRpdmUgQUNQSSB0aHJvdHRsaW5nIHNvZnR3YXJlCi0JICogY29vcmRpbmF0aW9uIHVzaW5nIEJJT1Mgc3VwcGxpZWQgX1RTRCBpbmZvLgotCSAqLwotCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19TTVBfVF9TV0NPT1JEOwotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCi0JCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TV1NNUDsKLQotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FDUEkpKQotCQlidWZbMl0gfD0gQUNQSV9QRENfVF9GRkg7Ci0KLQkvKgotCSAqIElmIG13YWl0L21vbml0b3IgaXMgdW5zdXBwb3J0ZWQsIEMyL0MzX0ZGSCB3aWxsIGJlIGRpc2FibGVkCi0JICovCi0JaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSkKLQkJYnVmWzJdICY9IH4oQUNQSV9QRENfQ19DMkMzX0ZGSCk7Ci0KLQlvYmotPnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCW9iai0+YnVmZmVyLmxlbmd0aCA9IDEyOwotCW9iai0+YnVmZmVyLnBvaW50ZXIgPSAodTggKikgYnVmOwotCW9ial9saXN0LT5jb3VudCA9IDE7Ci0Jb2JqX2xpc3QtPnBvaW50ZXIgPSBvYmo7Ci0JcHItPnBkYyA9IG9ial9saXN0OwotCi0JcmV0dXJuOwotfQotCi0KLS8qIEluaXRpYWxpemUgX1BEQyBkYXRhIGJhc2VkIG9uIHRoZSBDUFUgdmVuZG9yICovCi12b2lkIGFyY2hfYWNwaV9wcm9jZXNzb3JfaW5pdF9wZGMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKLXsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEocHItPmlkKTsKLQotCXByLT5wZGMgPSBOVUxMOwotCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgfHwKLQkgICAgYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0NFTlRBVVIpCi0JCWluaXRfaW50ZWxfcGRjKHByLCBjKTsKLQotCXJldHVybjsKLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKTsKLQotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0JaWYgKHByLT5wZGMpIHsKLQkJa2ZyZWUocHItPnBkYy0+cG9pbnRlci0+YnVmZmVyLnBvaW50ZXIpOwotCQlrZnJlZShwci0+cGRjLT5wb2ludGVyKTsKLQkJa2ZyZWUocHItPnBkYyk7Ci0JCXByLT5wZGMgPSBOVUxMOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCBmMjhkZWNmLi4xYjE5MjBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC0xOTAsOSArMTkwLDExIEBACiAKIHN0YXRpYyB2b2lkIGRydl9yZWFkKHN0cnVjdCBkcnZfY21kICpjbWQpCiB7CisJaW50IGVycjsKIAljbWQtPnZhbCA9IDA7CiAKLQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1bWFza19hbnkoY21kLT5tYXNrKSwgZG9fZHJ2X3JlYWQsIGNtZCwgMSk7CisJZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fYW55KGNtZC0+bWFzaywgZG9fZHJ2X3JlYWQsIGNtZCwgMSk7CisJV0FSTl9PTl9PTkNFKGVycik7CS8qIHNtcF9jYWxsX2Z1bmN0aW9uX2FueSgpIHdhcyBidWdneT8gKi8KIH0KIAogc3RhdGljIHZvaWQgZHJ2X3dyaXRlKHN0cnVjdCBkcnZfY21kICpjbWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCmluZGV4IDg0NGMwMmMuLjBjODYzMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCkBAIC0zOTQsNyArMzk0LDcgQEAKIAlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OwogCWVudW0gdWNvZGVfc3RhdGUgdXN0YXRlOwogCi0JaWYgKHVjaS0+dmFsaWQgJiYgdWNpLT5tYykKKwlpZiAodWNpLT52YWxpZCkKIAkJdXN0YXRlID0gbWljcm9jb2RlX3Jlc3VtZV9jcHUoY3B1KTsKIAllbHNlCiAJCXVzdGF0ZSA9IG1pY3JvY29kZV9pbml0X2NwdShjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IGM3YjEwYjQuLjY2Y2MzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTMyLDYgKzMyLDcgQEAKICMKIGFjcGkteQkJCQkrPSBidXMubyBnbHVlLm8KIGFjcGkteQkJCQkrPSBzY2FuLm8KK2FjcGkteQkJCQkrPSBwcm9jZXNzb3JfcGRjLm8KIGFjcGkteQkJCQkrPSBlYy5vCiBhY3BpLSQoQ09ORklHX0FDUElfRE9DSykJKz0gZG9jay5vCiBhY3BpLXkJCQkJKz0gcGNpX3Jvb3QubyBwY2lfbGluay5vIHBjaV9pcnEubyBwY2lfYmluZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMgYi9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKaW5kZXggMjNlNWEwNS4uMjgxNWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYwpAQCAtMTg1LDYgKzE4NSwxMiBAQAogCWFjcGlfb3NpX3NldHVwKCIhV2luZG93cyAyMDA2Iik7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW50IF9faW5pdCBkbWlfZGlzYWJsZV9vc2lfd2luNyhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICJETUkgZGV0ZWN0ZWQ6ICVzXG4iLCBkLT5pZGVudCk7CisJYWNwaV9vc2lfc2V0dXAoIiFXaW5kb3dzIDIwMDkiKTsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGFjcGlfb3NpX2RtaV90YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewpAQCAtMjExLDYgKzIxNywxNCBAQAogCQkgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiU29ueSBWR04tU1IyOTBKIiksCiAJCX0sCiAJfSwKKwl7CisJLmNhbGxiYWNrID0gZG1pX2Rpc2FibGVfb3NpX3dpbjcsCisJLmlkZW50ID0gIkFTVVMgSzUwSUoiLAorCS5tYXRjaGVzID0geworCQkgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCQkgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSzUwSUoiKSwKKwkJfSwKKwl9LAogCiAJLyoKIAkgKiBCSU9TIGludm9jYXRpb24gb2YgX09TSShMaW51eCkgaXMgYWxtb3N0IGFsd2F5cyBhIEJJT1MgYnVnLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDY1ZjdlMzMuLmNmNzYxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTM5Nyw2ICszOTcsNyBAQAogCXVuaW9uIGFjcGlfb2JqZWN0ICpvdXRfb2JqOwogCXU4IHV1aWRbMTZdOwogCXUzMiBlcnJvcnM7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CiAKIAlpZiAoIWNvbnRleHQpCiAJCXJldHVybiBBRV9FUlJPUjsKQEAgLTQxOSwxNiArNDIwLDE2IEBACiAJaW5fcGFyYW1zWzNdLmJ1ZmZlci5sZW5ndGggCT0gY29udGV4dC0+Y2FwLmxlbmd0aDsKIAlpbl9wYXJhbXNbM10uYnVmZmVyLnBvaW50ZXIgCT0gY29udGV4dC0+Y2FwLnBvaW50ZXI7CiAKLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmY29udGV4dC0+cmV0KTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiBzdGF0dXM7CiAKLQkvKiByZXR1cm4gYnVmZmVyIHNob3VsZCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBjYXAgYnVmZmVyICovCi0JaWYgKGNvbnRleHQtPnJldC5sZW5ndGggIT0gY29udGV4dC0+Y2FwLmxlbmd0aCkKKwlpZiAoIW91dHB1dC5sZW5ndGgpCiAJCXJldHVybiBBRV9OVUxMX09CSkVDVDsKIAotCW91dF9vYmogPSBjb250ZXh0LT5yZXQucG9pbnRlcjsKLQlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJb3V0X29iaiA9IG91dHB1dC5wb2ludGVyOworCWlmIChvdXRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIKKwkJfHwgb3V0X29iai0+YnVmZmVyLmxlbmd0aCAhPSBjb250ZXh0LT5jYXAubGVuZ3RoKSB7CiAJCWFjcGlfcHJpbnRfb3NjX2Vycm9yKGhhbmRsZSwgY29udGV4dCwKIAkJCSJfT1NDIGV2YWx1YXRpb24gcmV0dXJuZWQgd3JvbmcgdHlwZSIpOwogCQlzdGF0dXMgPSBBRV9UWVBFOwpAQCAtNDU3LDExICs0NTgsMjAgQEAKIAkJZ290byBvdXRfa2ZyZWU7CiAJfQogb3V0X3N1Y2Nlc3M6Ci0JcmV0dXJuIEFFX09LOworCWNvbnRleHQtPnJldC5sZW5ndGggPSBvdXRfb2JqLT5idWZmZXIubGVuZ3RoOworCWNvbnRleHQtPnJldC5wb2ludGVyID0ga21hbGxvYyhjb250ZXh0LT5yZXQubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbnRleHQtPnJldC5wb2ludGVyKSB7CisJCXN0YXR1cyA9ICBBRV9OT19NRU1PUlk7CisJCWdvdG8gb3V0X2tmcmVlOworCX0KKwltZW1jcHkoY29udGV4dC0+cmV0LnBvaW50ZXIsIG91dF9vYmotPmJ1ZmZlci5wb2ludGVyLAorCQljb250ZXh0LT5yZXQubGVuZ3RoKTsKKwlzdGF0dXMgPSAgQUVfT0s7CiAKIG91dF9rZnJlZToKLQlrZnJlZShjb250ZXh0LT5yZXQucG9pbnRlcik7Ci0JY29udGV4dC0+cmV0LnBvaW50ZXIgPSBOVUxMOworCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKQorCQljb250ZXh0LT5yZXQucG9pbnRlciA9IE5VTEw7CiAJcmV0dXJuIHN0YXR1czsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9ydW5fb3NjKTsKQEAgLTg4OCw2ICs4OTgsOCBAQAogCQlnb3RvIGVycm9yMTsKIAl9CiAKKwlhY3BpX2Vhcmx5X3Byb2Nlc3Nvcl9zZXRfcGRjKCk7CisKIAkvKgogCSAqIE1heWJlIEVDIHJlZ2lvbiBpcyByZXF1aXJlZCBhdCBidXNfc2Nhbi9hY3BpX2dldF9kZXZpY2VzLiBTbyBpdAogCSAqIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgaXQgYXMgZWFybHkgYXMgcG9zc2libGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IDc1YjE0N2YuLmZkMTgwMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC05MTYsNiArOTE2LDcgQEAKIC8qIE1TSSBFQyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudCwgZW5hYmxlIGl0ICovCiBzdGF0aWMgaW50IGVjX2ZsYWdfbXNpKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKKwlwcmludGsoS0VSTl9ERUJVRyBQUkVGSVggIkRldGVjdGVkIE1TSSBoYXJkd2FyZSwgZW5hYmxpbmcgd29ya2Fyb3VuZHMuXG4iKTsKIAlFQ19GTEFHU19NU0kgPSAxOwogCUVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQgPSAxOwogCXJldHVybiAwOwpAQCAtOTI4LDggKzkyOSwxMyBAQAogCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkpGTDkyIikgfSwgTlVMTH0sCiAJewogCWVjX2ZsYWdfbXNpLCAiTVNJIGhhcmR3YXJlIiwgewotCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJNaWNyby1TdGFyIiksCi0JRE1JX01BVENIKERNSV9DSEFTU0lTX1ZFTkRPUiwgIk1JQ1JPLVN0YXIiKSB9LCBOVUxMfSwKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiTWljcm8tU3RhciIpfSwgTlVMTH0sCisJeworCWVjX2ZsYWdfbXNpLCAiTVNJIGhhcmR3YXJlIiwgeworCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIiKX0sIE5VTEx9LAorCXsKKwllY19mbGFnX21zaSwgIk1TSSBoYXJkd2FyZSIsIHsKKwlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVkVORE9SLCAiTUlDUk8tU3RhciIpfSwgTlVMTH0sCiAJewogCWVjX3ZhbGlkYXRlX2VjZHQsICJBU1VTIGhhcmR3YXJlIiwgewogCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJBU1VTIikgfSwgTlVMTH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCmluZGV4IDA3NGNmODYuLmNiMjhlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCkBAIC00Myw2ICs0Myw3IEBACiBleHRlcm4gaW50IGFjcGlfcG93ZXJfbm9jaGVjazsKIAogaW50IGFjcGlfd2FrZXVwX2RldmljZV9pbml0KHZvaWQpOwordm9pZCBhY3BpX2Vhcmx5X3Byb2Nlc3Nvcl9zZXRfcGRjKHZvaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVkZGVkIENvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggNDE3MzEyMy4uOTg2M2M5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTEyNCwyOSArMTI0LDYgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGFjcGlfcHJvY2Vzc29yICosIHByb2Nlc3NvcnMpOwogc3RydWN0IGFjcGlfcHJvY2Vzc29yX2VycmF0YSBlcnJhdGEgX19yZWFkX21vc3RseTsKLXN0YXRpYyBpbnQgc2V0X25vX213YWl0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICIlcyBkZXRlY3RlZCAtICIKLQkJImRpc2FibGluZyBtd2FpdCBmb3IgQ1BVIEMtc3RhdGVzXG4iLCBpZC0+aWRlbnQpOwotCWlkbGVfbm9td2FpdCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2NwdWluaXRkYXRhIHByb2Nlc3Nvcl9pZGxlX2RtaV90YWJsZVtdID0gewotCXsKLQlzZXRfbm9fbXdhaXQsICJJRkw5MSBib2FyZCIsIHsKLQlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiQ09NUEFMIiksCi0JRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiWkVQVE8iKSwKLQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIjMyMTVXIiksCi0JRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiSUZMOTEiKSB9LCBOVUxMfSwKLQl7Ci0Jc2V0X25vX213YWl0LCAiRXh0ZW5zYSA1MjIwIiwgewotCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJQaG9lbml4IFRlY2hub2xvZ2llcyBMVEQiKSwKLQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCi0JRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIwMTAwIiksCi0JRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiQ29sdW1iaWEiKSB9LCBOVUxMfSwKLQl7fSwKLX07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycmF0YSBIYW5kbGluZwpAQCAtMjc3LDQ1ICsyNTQsNiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uIEFDUEkgcHJvY2Vzc29yIGZ1bmN0aW9ucwotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIF9QREMgaXMgcmVxdWlyZWQgZm9yIGEgQklPUy1PUyBoYW5kc2hha2UgZm9yIG1vc3Qgb2YgdGhlIG5ld2VyCi0gKiBBQ1BJIHByb2Nlc3NvciBmZWF0dXJlcy4KLSAqLwotc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKnBkY19pbiA9IHByLT5wZGM7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0KLQotCWlmICghcGRjX2luKQotCQlyZXR1cm4gc3RhdHVzOwotCWlmIChpZGxlX25vbXdhaXQpIHsKLQkJLyoKLQkJICogSWYgbXdhaXQgaXMgZGlzYWJsZWQgZm9yIENQVSBDLXN0YXRlcywgdGhlIEMyQzNfRkZIIGFjY2VzcwotCQkgKiBtb2RlIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIHBhcmFtZXRlciBvZiBfUERDIG9iamVjdC4KLQkJICogT2YgY291cnNlIEMxX0ZGSCBhY2Nlc3MgbW9kZSB3aWxsIGFsc28gYmUgZGlzYWJsZWQuCi0JCSAqLwotCQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwotCQl1MzIgKmJ1ZmZlciA9IE5VTEw7Ci0KLQkJb2JqID0gcGRjX2luLT5wb2ludGVyOwotCQlidWZmZXIgPSAodTMyICopKG9iai0+YnVmZmVyLnBvaW50ZXIpOwotCQlidWZmZXJbMl0gJj0gfihBQ1BJX1BEQ19DX0MyQzNfRkZIIHwgQUNQSV9QRENfQ19DMV9GRkgpOwotCi0JfQotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHByLT5oYW5kbGUsICJfUERDIiwgcGRjX2luLCBOVUxMKTsKLQotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkgICAgIkNvdWxkIG5vdCBldmFsdWF0ZSBfUERDLCB1c2luZyBsZWdhY3kgcGVyZi4gY29udHJvbC4uLlxuIikpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTIEludGVyZmFjZSAoL3Byb2MpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC04MjUsOSArNzYzLDcgQEAKIAl9CiAKIAkvKiBfUERDIGNhbGwgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UgKGlmIHJlcWQuKS4gKi8KLQlhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHByKTsKLQlhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHByKTsKLQlhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHByKTsKKwlhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHByLT5oYW5kbGUpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAJYWNwaV9wcm9jZXNzb3JfcHBjX2hhc19jaGFuZ2VkKHByLCAwKTsKQEAgLTExNDUsMTEgKzEwODEsNiBAQAogCWlmICghYWNwaV9wcm9jZXNzb3JfZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGUgc3lzdGVtIGlzIERNSSB0YWJsZS4gSWYgeWVzLCBPU1BNCi0JICogc2hvdWxkIG5vdCB1c2UgbXdhaXQgZm9yIENQVS1zdGF0ZXMuCi0JICovCi0JZG1pX2NoZWNrX3N5c3RlbShwcm9jZXNzb3JfaWRsZV9kbWlfdGFibGUpOwogCXJlc3VsdCA9IGNwdWlkbGVfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2lkbGVfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBvdXRfcHJvYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGRjLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTRkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCisgKglBbGV4IENoaWFuZyA8YWNoaWFuZ0BocC5jb20+CisgKgktIFVuaWZpZWQgeDg2L2lhNjQgaW1wbGVtZW50YXRpb25zCisgKglWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KKyAqCS0gQWRkZWQgX1BEQyBmb3IgcGxhdGZvcm1zIHdpdGggSW50ZWwgQ1BVcworICovCisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisKKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjZGVmaW5lIFBSRUZJWAkJCSJBQ1BJOiAiCisjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVAorQUNQSV9NT0RVTEVfTkFNRSgicHJvY2Vzc29yX3BkYyIpOworCitzdGF0aWMgaW50IHNldF9ub19td2FpdChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJXMgZGV0ZWN0ZWQgLSAiCisJCSJkaXNhYmxpbmcgbXdhaXQgZm9yIENQVSBDLXN0YXRlc1xuIiwgaWQtPmlkZW50KTsKKwlpZGxlX25vbXdhaXQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19jcHVpbml0ZGF0YSBwcm9jZXNzb3JfaWRsZV9kbWlfdGFibGVbXSA9IHsKKwl7CisJc2V0X25vX213YWl0LCAiSUZMOTEgYm9hcmQiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkNPTVBBTCIpLAorCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlpFUFRPIiksCisJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIzMjE1VyIpLAorCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIklGTDkxIikgfSwgTlVMTH0sCisJeworCXNldF9ub19td2FpdCwgIkV4dGVuc2EgNTIyMCIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiUGhvZW5peCBUZWNobm9sb2dpZXMgTFREIiksCisJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAorCURNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiMDEwMCIpLAorCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkNvbHVtYmlhIikgfSwgTlVMTH0sCisJe30sCit9OworCitzdGF0aWMgdm9pZCBhY3BpX3NldF9wZGNfYml0cyh1MzIgKmJ1ZikKK3sKKwlidWZbMF0gPSBBQ1BJX1BEQ19SRVZJU0lPTl9JRDsKKwlidWZbMV0gPSAxOworCisJLyogRW5hYmxlIGNvb3JkaW5hdGlvbiB3aXRoIGZpcm13YXJlJ3MgX1RTRCBpbmZvICovCisJYnVmWzJdID0gQUNQSV9QRENfU01QX1RfU1dDT09SRDsKKworCS8qIFR3aWRkbGUgYXJjaC1zcGVjaWZpYyBiaXRzIG5lZWRlZCBmb3IgX1BEQyAqLworCWFyY2hfYWNwaV9zZXRfcGRjX2JpdHMoYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBhY3BpX29iamVjdF9saXN0ICphY3BpX3Byb2Nlc3Nvcl9hbGxvY19wZGModm9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqb2JqX2xpc3Q7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwl1MzIgKmJ1ZjsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHBkYy4gSXQgd2lsbCBiZSB1c2VkIGxhdGVyLiAqLworCW9ial9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9ial9saXN0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlvYmogPSBrbWFsbG9jKHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmICghb2JqKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlrZnJlZShvYmpfbGlzdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWJ1ZiA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlrZnJlZShvYmopOworCQlrZnJlZShvYmpfbGlzdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWFjcGlfc2V0X3BkY19iaXRzKGJ1Zik7CisKKwlvYmotPnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOworCW9iai0+YnVmZmVyLmxlbmd0aCA9IDEyOworCW9iai0+YnVmZmVyLnBvaW50ZXIgPSAodTggKikgYnVmOworCW9ial9saXN0LT5jb3VudCA9IDE7CisJb2JqX2xpc3QtPnBvaW50ZXIgPSBvYmo7CisKKwlyZXR1cm4gb2JqX2xpc3Q7Cit9CisKKy8qCisgKiBfUERDIGlzIHJlcXVpcmVkIGZvciBhIEJJT1MtT1MgaGFuZHNoYWtlIGZvciBtb3N0IG9mIHRoZSBuZXdlcgorICogQUNQSSBwcm9jZXNzb3IgZmVhdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQKK2FjcGlfcHJvY2Vzc29yX2V2YWxfcGRjKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKnBkY19pbikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKworCWlmIChpZGxlX25vbXdhaXQpIHsKKwkJLyoKKwkJICogSWYgbXdhaXQgaXMgZGlzYWJsZWQgZm9yIENQVSBDLXN0YXRlcywgdGhlIEMyQzNfRkZIIGFjY2VzcworCQkgKiBtb2RlIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIHBhcmFtZXRlciBvZiBfUERDIG9iamVjdC4KKwkJICogT2YgY291cnNlIEMxX0ZGSCBhY2Nlc3MgbW9kZSB3aWxsIGFsc28gYmUgZGlzYWJsZWQuCisJCSAqLworCQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCQl1MzIgKmJ1ZmZlciA9IE5VTEw7CisKKwkJb2JqID0gcGRjX2luLT5wb2ludGVyOworCQlidWZmZXIgPSAodTMyICopKG9iai0+YnVmZmVyLnBvaW50ZXIpOworCQlidWZmZXJbMl0gJj0gfihBQ1BJX1BEQ19DX0MyQzNfRkZIIHwgQUNQSV9QRENfQ19DMV9GRkgpOworCisJfQorCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9QREMiLCBwZGNfaW4sIE5VTEwpOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCSAgICAiQ291bGQgbm90IGV2YWx1YXRlIF9QREMsIHVzaW5nIGxlZ2FjeSBwZXJmLiBjb250cm9sLlxuIikpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqb2JqX2xpc3Q7CisKKwlpZiAoYXJjaF9oYXNfYWNwaV9wZGMoKSA9PSBmYWxzZSkKKwkJcmV0dXJuOworCisJb2JqX2xpc3QgPSBhY3BpX3Byb2Nlc3Nvcl9hbGxvY19wZGMoKTsKKwlpZiAoIW9ial9saXN0KQorCQlyZXR1cm47CisKKwlhY3BpX3Byb2Nlc3Nvcl9ldmFsX3BkYyhoYW5kbGUsIG9ial9saXN0KTsKKworCWtmcmVlKG9ial9saXN0LT5wb2ludGVyLT5idWZmZXIucG9pbnRlcik7CisJa2ZyZWUob2JqX2xpc3QtPnBvaW50ZXIpOworCWtmcmVlKG9ial9saXN0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfcHJvY2Vzc29yX3NldF9wZGMpOworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2Vhcmx5X2luaXRfcGRjKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQoreworCWFjcGlfcHJvY2Vzc29yX3NldF9wZGMoaGFuZGxlKTsKKwlyZXR1cm4gQUVfT0s7Cit9CisKK3ZvaWQgYWNwaV9lYXJseV9wcm9jZXNzb3Jfc2V0X3BkYyh2b2lkKQoreworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgc3lzdGVtIGlzIERNSSB0YWJsZS4gSWYgeWVzLCBPU1BNCisJICogc2hvdWxkIG5vdCB1c2UgbXdhaXQgZm9yIENQVS1zdGF0ZXMuCisJICovCisJZG1pX2NoZWNrX3N5c3RlbShwcm9jZXNzb3JfaWRsZV9kbWlfdGFibGUpOworCisJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfUFJPQ0VTU09SLCBBQ1BJX1JPT1RfT0JKRUNULAorCQkJICAgIEFDUElfVUlOVDMyX01BWCwKKwkJCSAgICBlYXJseV9pbml0X3BkYywgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCA4NTg0NGQwLi41NmM2Mzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYXRhL0tjb25maWcKQEAgLTQwLDcgKzQwLDYgQEAKIGNvbmZpZyBBVEFfQUNQSQogCWJvb2wgIkFUQSBBQ1BJIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBQ1BJICYmIFBDSQotCXNlbGVjdCBBQ1BJX0RPQ0sKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFUQS1yZWxhdGVkIEFDUEkgb2JqZWN0cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA2M2MxNDNlLi5jMGM1YTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC03MDMsOSArNzAzLDkgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3VucmVnaXN0ZXI6CisJa29iamVjdF9wdXQoJnByaXYtPmtvYmopOwogCWtmcmVlKGRydi0+cCk7CiAJZHJ2LT5wID0gTlVMTDsKLQlrb2JqZWN0X3B1dCgmcHJpdi0+a29iaik7CiBvdXRfcHV0X2J1czoKIAlidXNfcHV0KGJ1cyk7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggZjEyOTBjYi4uMjgyMDI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC00NDYsNyArNDQ2LDggQEAKICAqIEBkZXY6IGRldmljZS4KICAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KLWludCBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKK2ludCBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaW50IGVycm9yID0gMDsKIAlpZiAoZGV2KQpAQCAtNDU5LDcgKzQ2MCw4IEBACiAgKiBAZGV2OiBkZXZpY2UuCiAgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCi12b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaWYgKGRldikKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmRldi0+a29iaiwgJmF0dHItPmF0dHIpOwpAQCAtNDcwLDcgKzQ3Miw4IEBACiAgKiBAZGV2OiBkZXZpY2UuCiAgKiBAYXR0cjogZGV2aWNlIGJpbmFyeSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwotaW50IGRldmljZV9jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKK2ludCBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCWludCBlcnJvciA9IC1FSU5WQUw7CiAJaWYgKGRldikKQEAgLTQ4NCw3ICs0ODcsOCBAQAogICogQGRldjogZGV2aWNlLgogICogQGF0dHI6IGRldmljZSBiaW5hcnkgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KLXZvaWQgZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQordm9pZCBkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpZiAoZGV2KQogCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmRldi0+a29iaiwgYXR0cik7CkBAIC05MDUsOCArOTA5LDEwIEBACiAJCWRldi0+aW5pdF9uYW1lID0gTlVMTDsKIAl9CiAKLQlpZiAoIWRldl9uYW1lKGRldikpCisJaWYgKCFkZXZfbmFtZShkZXYpKSB7CisJCWVycm9yID0gLUVJTlZBTDsKIAkJZ290byBuYW1lX2Vycm9yOworCX0KIAogCXByX2RlYnVnKCJkZXZpY2U6ICclcyc6ICVzXG4iLCBkZXZfbmFtZShkZXYpLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKaW5kZXggNTAzNzViYi4uMDkwZGQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKKysrIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKQEAgLTMyLDcgKzMyLDcgQEAKIHN0YXRpYyBpbnQgZGV2X21vdW50OwogI2VuZGlmCiAKLXN0YXRpYyByd2xvY2tfdCBkaXJsb2NrOworc3RhdGljIERFRklORV9NVVRFWChkaXJsb2NrKTsKIAogc3RhdGljIGludCBfX2luaXQgbW91bnRfcGFyYW0oY2hhciAqc3RyKQogewpAQCAtOTMsNyArOTMsNyBAQAogewogCWludCBlcnI7CiAKLQlyZWFkX2xvY2soJmRpcmxvY2spOworCW11dGV4X2xvY2soJmRpcmxvY2spOwogCWVyciA9IGRldl9ta2Rpcihub2RlcGF0aCwgMDc1NSk7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7CiAJCWNoYXIgKnBhdGg7CkBAIC0xMDEsOCArMTAxLDEwIEBACiAKIAkJLyogcGFyZW50IGRpcmVjdG9yaWVzIGRvIG5vdCBleGlzdCwgY3JlYXRlIHRoZW0gKi8KIAkJcGF0aCA9IGtzdHJkdXAobm9kZXBhdGgsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBhdGgpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKCFwYXRoKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KIAkJcyA9IHBhdGg7CiAJCWZvciAoOzspIHsKIAkJCXMgPSBzdHJjaHIocywgJy8nKTsKQEAgLTExNyw3ICsxMTksOCBAQAogCQl9CiAJCWtmcmVlKHBhdGgpOwogCX0KLQlyZWFkX3VubG9jaygmZGlybG9jayk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkaXJsb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMjksNyArMjMyLDcgQEAKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jd3JpdGVfbG9jaygmZGlybG9jayk7CisJbXV0ZXhfbG9jaygmZGlybG9jayk7CiAJZm9yICg7OykgewogCQljaGFyICpiYXNlOwogCkBAIC0yNDEsNyArMjQ0LDcgQEAKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KLQl3cml0ZV91bmxvY2soJmRpcmxvY2spOworCW11dGV4X3VubG9jaygmZGlybG9jayk7CiAKIAlrZnJlZShwYXRoKTsKIAlyZXR1cm4gZXJyOwpAQCAtMzUyLDggKzM1NSw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAotCXJ3bG9ja19pbml0KCZkaXJsb2NrKTsKLQogCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRldl9mc190eXBlKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGV2dG1wZnM6IHVuYWJsZSB0byByZWdpc3RlciBkZXZ0bXBmcyAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggZjM2Nzg4NS4uOTBjOWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtOTgsNyArOTgsNyBAQAogICogQGF0dHI6IGRyaXZlciBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogaW50IGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAotCQkgICAgICAgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpbnQgZXJyb3I7CiAJaWYgKGRydikKQEAgLTExNSw3ICsxMTUsNyBAQAogICogQGF0dHI6IGRyaXZlciBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKLQkJCXN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKQorCQkJY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaWYgKGRydikKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmRydi0+cC0+a29iaiwgJmF0dHItPmF0dHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCA5ZDJlZTI1Li41OGVmYWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtNDQxLDYgKzQ0MSw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEpOwogCiBzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL253Zmxhc2guYyBiL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMKaW5kZXggOGM3ZGY1Yi4uZjgwODEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL253Zmxhc2guYworKysgYi9kcml2ZXJzL2NoYXIvbndmbGFzaC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IGRmNWI2ODQuLmM1ZmFjZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMTcwMCwxMSArMTcwMCwxNCBAQAogICovCiBzdGF0aWMgdm9pZCBhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoaW50IGN0cmwsIHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKIHsKLQlpbnQgZGltbSwgc2l6ZTAsIHNpemUxOworCWludCBkaW1tLCBzaXplMCwgc2l6ZTEsIGZhY3RvciA9IDA7CiAJdTMyIGRiYW07CiAJdTMyICpkY3NiOwogCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikgeworCQlpZiAocHZ0LT5kY2xyMCAmIEYxMF9XSURUSF8xMjgpCisJCQlmYWN0b3IgPSAxOworCiAJCS8qIEs4IGZhbWlsaWVzIDwgcmV2RiBub3Qgc3VwcG9ydGVkIHlldCAqLwogCSAgICAgICBpZiAocHZ0LT5leHRfbW9kZWwgPCBLOF9SRVZfRikKIAkJCXJldHVybjsKQEAgLTE3MzIsNyArMTczNSw4IEBACiAJCQlzaXplMSA9IHB2dC0+b3BzLT5kYmFtX3RvX2NzKHB2dCwgREJBTV9ESU1NKGRpbW0sIGRiYW0pKTsKIAogCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiICVkOiAlNWRNQiAlZDogJTVkTUJcbiIsCi0JCQkgICAgZGltbSAqIDIsIHNpemUwLCBkaW1tICogMiArIDEsIHNpemUxKTsKKwkJCSAgICBkaW1tICogMiwgICAgIHNpemUwIDw8IGZhY3RvciwKKwkJCSAgICBkaW1tICogMiArIDEsIHNpemUxIDw8IGZhY3Rvcik7CiAJfQogfQogCkBAIC0yMzQ1LDcgKzIzNDksNyBAQAogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBGMTBfRENMUl8wLCAmcHZ0LT5kY2xyMCk7CiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0hSXzAsICZwdnQtPmRjaHIwKTsKIAotCWlmICghZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpKSB7CisJaWYgKCFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkgJiYgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgxMCkgewogCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDTFJfMSwgJnB2dC0+ZGNscjEpOwogCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDSFJfMSwgJnB2dC0+ZGNocjEpOwogCX0KQEAgLTI2ODYsOSArMjY5MCw4IEBACiAJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiJXMiLCBlY2Nfd2FybmluZyk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCX0gZWxzZQotCQkvKiBDTEVBUiB0aGUgb3ZlcnJpZGUsIHNpbmNlIEJJT1MgY29udHJvbGxlZCBpdCAqLwogCQllY2NfZW5hYmxlX292ZXJyaWRlID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MjUsMTYgKzI5MjgsMTUgQEAKIAogCWFtZDY0X2ZyZWVfbWNfc2libGluZ19kZXZpY2VzKHB2dCk7CiAKLQlrZnJlZShwdnQpOwotCW1jaS0+cHZ0X2luZm8gPSBOVUxMOwotCi0JbWNpX2xvb2t1cFtwdnQtPm1jX25vZGVfaWRdID0gTlVMTDsKLQogCS8qIHVucmVnaXN0ZXIgZnJvbSBFREFDIE1DRSAqLwogCWFtZF9yZXBvcnRfZ2FydF9lcnJvcnMoZmFsc2UpOwogCWFtZF91bnJlZ2lzdGVyX2VjY19kZWNvZGVyKGFtZDY0X2RlY29kZV9idXNfZXJyb3IpOwogCiAJLyogRnJlZSB0aGUgRURBQyBDT1JFIHJlc291cmNlcyAqLworCW1jaS0+cHZ0X2luZm8gPSBOVUxMOworCW1jaV9sb29rdXBbcHZ0LT5tY19ub2RlX2lkXSA9IE5VTEw7CisKKwlrZnJlZShwdnQpOwogCWVkYWNfbWNfZnJlZShtY2kpOwogfQogCkBAIC0zMDExLDI1ICszMDEzLDI5IEBACiBzdGF0aWMgaW50IF9faW5pdCBhbWQ2NF9lZGFjX2luaXQodm9pZCkKIHsKIAlpbnQgbmIsIGVyciA9IC1FTk9ERVY7CisJYm9vbCBsb2FkX29rID0gZmFsc2U7CiAKIAllZGFjX3ByaW50ayhLRVJOX0lORk8sIEVEQUNfTU9EX1NUUiwgRURBQ19BTUQ2NF9WRVJTSU9OICJcbiIpOwogCiAJb3BzdGF0ZV9pbml0KCk7CiAKIAlpZiAoY2FjaGVfazhfbm9ydGhicmlkZ2VzKCkgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9yZXQ7CiAKIAltc3JzID0gbXNyc19hbGxvYygpOworCWlmICghbXNycykKKwkJZ290byBlcnJfcmV0OwogCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfcGNpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50LCB0aGUgYXJyYXkgJ3B2dF9sb29rdXBbXScgY29udGFpbnMgcG9pbnRlcnMgdG8gYWxsb2MnZAogCSAqIGFtZDY0X3B2dCBzdHJ1Y3RzLiBUaGVzZSB3aWxsIGJlIHVzZWQgaW4gdGhlIDJuZCBzdGFnZSBpbml0IGZ1bmN0aW9uCiAJICogdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNQyBpbnN0YW5jZXMuCiAJICovCisJZXJyID0gLUVOT0RFVjsKIAlmb3IgKG5iID0gMDsgbmIgPCBudW1fazhfbm9ydGhicmlkZ2VzOyBuYisrKSB7CiAJCWlmICghcHZ0X2xvb2t1cFtuYl0pCiAJCQljb250aW51ZTsKQEAgLTMwMzcsMTYgKzMwNDMsMjEgQEAKIAkJZXJyID0gYW1kNjRfaW5pdF8ybmRfc3RhZ2UocHZ0X2xvb2t1cFtuYl0pOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfMm5kX3N0YWdlOworCisJCWxvYWRfb2sgPSB0cnVlOwogCX0KIAotCWFtZDY0X3NldHVwX3BjaV9kZXZpY2UoKTsKLQotCXJldHVybiAwOworCWlmIChsb2FkX29rKSB7CisJCWFtZDY0X3NldHVwX3BjaV9kZXZpY2UoKTsKKwkJcmV0dXJuIDA7CisJfQogCiBlcnJfMm5kX3N0YWdlOgotCWRlYnVnZjAoIjJuZCBzdGFnZSBmYWlsZWRcbiIpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7Ci0KK2Vycl9wY2k6CisJbXNyc19mcmVlKG1zcnMpOworCW1zcnMgPSBOVUxMOworZXJyX3JldDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCmluZGV4IDQyMjcyOGMuLmZiNjBhODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jCkBAIC01MzQsOCArNTM0LDYgQEAKIHsKIAl1OCBoZWFkZXJfdHlwZTsKIAotCWRlYnVnZjAoIiVzKClcbiIsIF9fZnVuY19fKTsKLQogCWdldF9wY2lfcGFyaXR5X3N0YXR1cyhkZXYsIDApOwogCiAJLyogcmVhZCB0aGUgZGV2aWNlIFRZUEUsIGxvb2tpbmcgZm9yIGJyaWRnZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYmZpbi10d2kuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYmZpbi10d2kuYwppbmRleCBiMzA5YWMyLi5mZTNmYjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWJmaW4tdHdpLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1iZmluLXR3aS5jCkBAIC02OTMsMTMgKzY5MywxMyBAQAogCX0KIAogCS8qIFNldCBUV0kgaW50ZXJuYWwgY2xvY2sgYXMgMTBNSHogKi8KLQl3cml0ZV9DT05UUk9MKGlmYWNlLCAoKGdldF9zY2xrKCkgLyAxMDI0IC8gMTAyNCArIDUpIC8gMTApICYgMHg3Rik7CisJd3JpdGVfQ09OVFJPTChpZmFjZSwgKChnZXRfc2NsaygpIC8gMTAwMCAvIDEwMDAgKyA1KSAvIDEwKSAmIDB4N0YpOwogCiAJLyoKIAkgKiBXZSB3aWxsIG5vdCBlbmQgdXAgd2l0aCBhIENMS0RJVj0wIGJlY2F1c2Ugbm8gb25lIHdpbGwgc3BlY2lmeQotCSAqIDIwa0h6IFNDTCBvciBsZXNzIGluIEtjb25maWcgbm93LiAoNSAqIDEwMjQgLyAyMCA9IDB4MTAwKQorCSAqIDIwa0h6IFNDTCBvciBsZXNzIGluIEtjb25maWcgbm93LiAoNSAqIDEwMDAgLyAyMCA9IDI1MCkKIAkgKi8KLQljbGtoaWxvdyA9IDUgKiAxMDI0IC8gQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWjsKKwljbGtoaWxvdyA9ICgoMTAgKiAxMDAwIC8gQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWikgKyAxKSAvIDI7CiAKIAkvKiBTZXQgVHdpIGludGVyZmFjZSBjbG9jayBhcyBzcGVjaWZpZWQgKi8KIAl3cml0ZV9DTEtESVYoaWZhY2UsIChjbGtoaWxvdyA8PCA4KSB8IGNsa2hpbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggNzViZjNhZC4uMDAzN2UzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTI0Nyw3ICsyNDcsMTMgQEAKIAkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgT01BUF9JMkNfQ09OX0VOKTsKIAl9CiAJZGV2LT5pZGxlID0gMDsKLQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19JRV9SRUcsIGRldi0+aWVzdGF0ZSk7CisKKwkvKgorCSAqIERvbid0IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgaWYgdGhlIElFIHN0YXRlIGlzIDAgYXMgaXQgY2FuCisJICogY2F1c2UgZGVhZGxvY2suCisJICovCisJaWYgKGRldi0+aWVzdGF0ZSkKKwkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfSUVfUkVHLCBkZXYtPmllc3RhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX2kyY19pZGxlKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKQEAgLTI4MCw2ICsyODYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGludGVybmFsX2NsayA9IDA7CiAKIAlpZiAoZGV2LT5yZXYgPj0gT01BUF9JMkNfUkVWXzIpIHsKKwkJLyogRGlzYWJsZSBJMkMgY29udHJvbGxlciBiZWZvcmUgc29mdCByZXNldCAqLworCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLAorCQkJb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHKSAmCisJCQkJfihPTUFQX0kyQ19DT05fRU4pKTsKKwogCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19TWVNDX1JFRywgU1lTQ19TT0ZUUkVTRVRfTUFTSyk7CiAJCS8qIEZvciBzb21lIHJlYXNvbiB3ZSBuZWVkIHRvIHNldCB0aGUgRU4gYml0IGJlZm9yZSB0aGUKIAkJICogcmVzZXQgZG9uZSBiaXQgZ2V0cyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCBmYzViZjlkLi5lYzRmYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTQ2NCw0ICs0NjQsMTYgQEAKIAogCSAgSWYgeW91IGhhdmUgYSBtb2Rlcm4gVG9zaGliYSBsYXB0b3Agd2l0aCBhIEJsdWV0b290aCBhbmQgYW4KIAkgIFJGS2lsbCBzd2l0Y2ggKHN1Y2ggYXMgdGhlIFBvcnRlZ2UgUjUwMCksIHNheSBZLgorCitjb25maWcgQUNQSV9DTVBDCisJdHJpc3RhdGUgIkNNUEMgTGFwdG9wIEV4dHJhcyIKKwlkZXBlbmRzIG9uIFg4NiAmJiBBQ1BJCisJc2VsZWN0IElOUFVUCisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTdXBwb3J0IGZvciBJbnRlbCBDbGFzc21hdGUgUEMgQUNQSSBkZXZpY2VzLCBpbmNsdWRpbmcgc29tZQorCSAga2V5cyBhcyBpbnB1dCBkZXZpY2UsIGJhY2tsaWdodCBkZXZpY2UsIHRhYmxldCBhbmQgYWNjZWxlcm9tZXRlcgorCSAgZGV2aWNlcy4KKwogZW5kaWYgIyBYODZfUExBVEZPUk1fREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQppbmRleCBiNzQ3NGI2Li45Y2Q5ZmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIG9iai0kKENPTkZJR19BU1VTX0xBUFRPUCkJKz0gYXN1cy1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0VFRVBDX0xBUFRPUCkJKz0gZWVlcGMtbGFwdG9wLm8KIG9iai0kKENPTkZJR19NU0lfTEFQVE9QKQkrPSBtc2ktbGFwdG9wLm8KK29iai0kKENPTkZJR19BQ1BJX0NNUEMpCQkrPSBjbGFzc21hdGUtbGFwdG9wLm8KIG9iai0kKENPTkZJR19DT01QQUxfTEFQVE9QKQkrPSBjb21wYWwtbGFwdG9wLm8KIG9iai0kKENPTkZJR19ERUxMX0xBUFRPUCkJKz0gZGVsbC1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0RFTExfV01JKQkJKz0gZGVsbC13bWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKaW5kZXggNDU0OTcwZC4uMDdkMTRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC05Niw5ICs5Niw2IEBACiBNT0RVTEVfQUxJQVMoIndtaTo2N0MzMzcxRC05NUEzLTRDMzctQkI2MS1ERDQ3QjQ5MURBQUIiKTsKIE1PRFVMRV9BTElBUygid21pOjZBRjRGMjU4LUI0MDEtNDJmZC1CRTkxLTNENEFDMkQ3QzBEMyIpOwogCi0vKiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCB0aGUgV01JIHN5c2ZzIGludGVyZmFjZSBnb2VzIGluICovCi1NT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjoqOiIpOwotCiAvKgogICogSW50ZXJmYWNlIGNhcGFiaWxpdHkgZmxhZ3MKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCmluZGV4IDc5YjE1YjkuLjdiMjM4NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCkBAIC01Miw3ICs1Miw3IEBACiAgKi8KICN1bmRlZiBTVEFSVF9JTl9LRVJORUxfTU9ERQogCi0jZGVmaW5lIERSVl9WRVIgIjAuNS4yMCIKKyNkZWZpbmUgRFJWX1ZFUiAiMC41LjIyIgogCiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBBdG9tIE4yNzAgZGF0YXNoZWV0LApAQCAtMTU2LDE5ICsxNTYsMjUgQEAKIAl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKIAkvKiBBY2VyIDE0MTAgKi8KIAl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAotCS8qIHNwZWNpYWwgQklPUyAvIG90aGVyICovCisJeyJBY2VyIiwgIkFzcGlyZSAxNDEwIiwgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwkvKiBBY2VyIDE4MTB4eCAqLworCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYwLjMxMjAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgInYwLjMxMjAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUWiIsICJ2MS4zMzAzIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCisJLyogR2F0ZXdheSAqLwogCXsiR2F0ZXdheSIsICJBT0ExMTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDIxLCAweDAwfSB9LAogCXsiR2F0ZXdheSIsICJBT0ExNTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDIwLCAweDAwfSB9LAotCXsiR2F0ZXdheSAgICAgICAgICIsICJMVDMxICAgICAgICAgICAgIiwgInYxLjMxMDMgIiwgMHg1NSwgMHg1OCwKLQkJezB4MTAsIDB4MGYsIDB4MDB9IH0sCi0JeyJHYXRld2F5ICAgICAgICAgIiwgIkxUMzEgICAgICAgICAgICAiLCAidjEuMzIwMSAiLCAweDU1LCAweDU4LAotCQl7MHgxMCwgMHgwZiwgMHgwMH0gfSwKLQl7IkdhdGV3YXkgICAgICAgICAiLCAiTFQzMSAgICAgICAgICAgICIsICJ2MS4zMzAyICIsIDB4NTUsIDB4NTgsCi0JCXsweDEwLCAweDBmLCAweDAwfSB9LAorCXsiR2F0ZXdheSIsICJMVDMxIiwgInYxLjMxMDMiLCAweDU1LCAweDU4LCB7MHgxMCwgMHgwZiwgMHgwMH0gfSwKKwl7IkdhdGV3YXkiLCAiTFQzMSIsICJ2MS4zMjAxIiwgMHg1NSwgMHg1OCwgezB4MTAsIDB4MGYsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkxUMzEiLCAidjEuMzMwMiIsIDB4NTUsIDB4NTgsIHsweDEwLCAweDBmLCAweDAwfSB9LAorCS8qIFBhY2thcmQgQmVsbCAqLwogCXsiUGFja2FyZCBCZWxsIiwgIkRPQTE1MCIsICJ2MC4zMTA0IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCiAJeyJQYWNrYXJkIEJlbGwiLCAiRE9BMTUwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKIAl7IlBhY2thcmQgQmVsbCIsICJBT0ExMTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDIxLCAweDAwfSB9LAogCXsiUGFja2FyZCBCZWxsIiwgIkFPQTE1MCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9UTVUiLCAidjEuMzMwMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPVE1VIiwgInYwLjMxMjAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKIAkvKiBwZXdwZXctdGVybWluYXRvciAqLwogCXsiIiwgIiIsICIiLCAwLCAwLCB7MCwgMCwgMH0gfQogfTsKQEAgLTQ4NiwxMyArNDkyLDI2IEBACiAJLnJlbW92ZSA9IGFjZXJoZGZfcmVtb3ZlLAogfTsKIAorLyogY2hlY2tzIGlmIHN0ciBiZWdpbnMgd2l0aCBzdGFydCAqLworc3RhdGljIGludCBzdHJfc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpzdGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0cl9sZW4gPSAwLCBzdGFydF9sZW4gPSAwOworCisJc3RyX2xlbiA9IHN0cmxlbihzdHIpOworCXN0YXJ0X2xlbiA9IHN0cmxlbihzdGFydCk7CisKKwlpZiAoc3RyX2xlbiA+PSBzdGFydF9sZW4gJiYKKwkJCSFzdHJuY21wKHN0ciwgc3RhcnQsIHN0YXJ0X2xlbikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CiAKIC8qIGNoZWNrIGhhcmR3YXJlICovCiBzdGF0aWMgaW50IGFjZXJoZGZfY2hlY2tfaGFyZHdhcmUodm9pZCkKIHsKIAljaGFyIGNvbnN0ICp2ZW5kb3IsICp2ZXJzaW9uLCAqcHJvZHVjdDsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIHByb2RfbGVuID0gMDsKKwljb25zdCBzdHJ1Y3QgYmlvc19zZXR0aW5nc190ICpidCA9IE5VTEw7CiAKIAkvKiBnZXQgQklPUyBkYXRhICovCiAJdmVuZG9yICA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1NZU19WRU5ET1IpOwpAQCAtNTE0LDIwICs1MzMsMjAgQEAKIAkJa2VybmVsbW9kZSA9IDA7CiAJfQogCi0JcHJvZF9sZW4gPSBzdHJsZW4ocHJvZHVjdCk7Ci0KIAlpZiAodmVyYm9zZSkKIAkJcHJfaW5mbygiQklPUyBpbmZvOiAlcyAlcywgcHJvZHVjdDogJXNcbiIsCiAJCQl2ZW5kb3IsIHZlcnNpb24sIHByb2R1Y3QpOwogCiAJLyogc2VhcmNoIEJJT1MgdmVyc2lvbiBhbmQgdmVuZG9yIGluIEJJT1Mgc2V0dGluZ3MgdGFibGUgKi8KLQlmb3IgKGkgPSAwOyBiaW9zX3RibFtpXS52ZXJzaW9uWzBdOyBpKyspIHsKLQkJaWYgKHN0cmxlbihiaW9zX3RibFtpXS5wcm9kdWN0KSA+PSBwcm9kX2xlbiAmJgotCQkgICAgIXN0cm5jbXAoYmlvc190YmxbaV0ucHJvZHVjdCwgcHJvZHVjdCwKLQkJCSAgIHN0cmxlbihiaW9zX3RibFtpXS5wcm9kdWN0KSkgJiYKLQkJICAgICFzdHJjbXAoYmlvc190YmxbaV0udmVuZG9yLCB2ZW5kb3IpICYmCi0JCSAgICAhc3RyY21wKGJpb3NfdGJsW2ldLnZlcnNpb24sIHZlcnNpb24pKSB7Ci0JCQliaW9zX2NmZyA9ICZiaW9zX3RibFtpXTsKKwlmb3IgKGJ0ID0gYmlvc190Ymw7IGJ0LT52ZW5kb3JbMF07IGJ0KyspIHsKKwkJLyoKKwkJICogY2hlY2sgaWYgYWN0dWFsIGhhcmR3YXJlIEJJT1MgdmVuZG9yLCBwcm9kdWN0IGFuZCB2ZXJzaW9uCisJCSAqIElEcyBzdGFydCB3aXRoIHRoZSBzdHJpbmdzIG9mIEJJT1MgdGFibGUgZW50cnkKKwkJICovCisJCWlmIChzdHJfc3RhcnRzX3dpdGgodmVuZG9yLCBidC0+dmVuZG9yKSAmJgorCQkJCXN0cl9zdGFydHNfd2l0aChwcm9kdWN0LCBidC0+cHJvZHVjdCkgJiYKKwkJCQlzdHJfc3RhcnRzX3dpdGgodmVyc2lvbiwgYnQtPnZlcnNpb24pKSB7CisJCQliaW9zX2NmZyA9IGJ0OwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC02NDAsOSArNjU5LDE0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJQZXRlciBGZXVlcmVyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFzcGlyZSBPbmUgdGVtcGVyYXR1cmUgYW5kIGZhbiBkcml2ZXIiKTsKLU1PRFVMRV9BTElBUygiZG1pOio6KkFjZXIqOio6Iik7Ci1NT0RVTEVfQUxJQVMoImRtaToqOipHYXRld2F5KjoqOiIpOwotTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCBCZWxsKjoqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5BT0EqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5Bc3BpcmUgMTQxMCo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFzcGlyZSAxODEwKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KkdhdGV3YXkqOnBuQU9BKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KkdhdGV3YXkqOnBuTFQzMSo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkIEJlbGwqOnBuQU9BKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQgQmVsbCo6cG5ET0EqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCBCZWxsKjpwbkRPVE1VKjoiKTsKIAogbW9kdWxlX2luaXQoYWNlcmhkZl9pbml0KTsKIG1vZHVsZV9leGl0KGFjZXJoZGZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCmluZGV4IDBjOWM1MzEuLmMxZDJhZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CkBAIC01MTMsMjYgKzUxNCwxMiBAQAogCXJldHVybiAoc3RhdHVzID09IEFFX09LKSAmJiAob3V0X29iai50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKTsKIH0KIAotLyoKLSAqIFdlIHdyaXRlIG91ciBpbmZvIGluIHBhZ2UsIHdlIGJlZ2luIGF0IG9mZnNldCBvZmYgYW5kIGNhbm5vdCB3cml0ZSBtb3JlCi0gKiB0aGFuIGNvdW50IGJ5dGVzLiBXZSBzZXQgZW9mIHRvIDEgaWYgd2UgaGFuZGxlIHRob3NlIDIgdmFsdWVzLiBXZSByZXR1cm4gdGhlCi0gKiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbiBwYWdlCi0gKi8KLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9pbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBhc3VzX2luZm9fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMDsKIAlpbnQgdGVtcDsKLQljaGFyIGJ1ZlsxNl07CQkvKiBlbm91Z2ggZm9yIGFsbCBpbmZvICovCi0JLyoKLQkgKiBXZSB1c2UgdGhlIGVhc3kgd2F5LCB3ZSBkb24ndCBjYXJlIG9mIG9mZiBhbmQgY291bnQsCi0JICogc28gd2UgZG9uJ3Qgc2V0IGVvZiB0byAxCi0JICovCiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlLCBBQ1BJX0hPVEtfTkFNRSAiICIgQVNVU19BQ1BJX1ZFUlNJT04gIlxuIik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1vZGVsIHJlZmVyZW5jZSAgICA6ICVzXG4iLAotCQkgICAgICAgaG90ay0+bWV0aG9kcy0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCBBQ1BJX0hPVEtfTkFNRSAiICIgQVNVU19BQ1BJX1ZFUlNJT04gIlxuIik7CisJc2VxX3ByaW50ZihtLCAiTW9kZWwgcmVmZXJlbmNlICAgIDogJXNcbiIsIGhvdGstPm1ldGhvZHMtPm5hbWUpOwogCS8qCiAJICogVGhlIFNGVU4gbWV0aG9kIHByb2JhYmx5IGFsbG93cyB0aGUgb3JpZ2luYWwgZHJpdmVyIHRvIGdldCB0aGUgbGlzdAogCSAqIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGdpdmVuIG1vZGVsLiBGb3Igbm93LCAweDAxMDAgb3IgMHgwODAwCkBAIC01NDAsOCArNTI3LDcgQEAKIAkgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIG90aGVycyBpcyB5ZXQgdG8gYmUgZm91bmQuCiAJICovCiAJaWYgKHJlYWRfYWNwaV9pbnQoaG90ay0+aGFuZGxlLCAiU0ZVTiIsICZ0ZW1wKSkKLQkJbGVuICs9Ci0JCSAgICBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTRlVOIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsIHRlbXApOworCQlzZXFfcHJpbnRmKG0sICJTRlVOIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsIHRlbXApOwogCS8qCiAJICogQW5vdGhlciB2YWx1ZSBmb3IgdXNlcnNwYWNlOiB0aGUgQVNZTSBtZXRob2QgcmV0dXJucyAweDAyIGZvcgogCSAqIGJhdHRlcnkgbG93IGFuZCAweDA0IGZvciBiYXR0ZXJ5IGNyaXRpY2FsLCBpdHMgcmVhZGluZ3MgdGVuZCB0byBiZQpAQCAtNTUwLDMwICs1MzYsMzQgQEAKIAkgKiBzaWxlbnRseSBpZ25vcmVkLgogCSAqLwogCWlmIChyZWFkX2FjcGlfaW50KGhvdGstPmhhbmRsZSwgIkFTWU0iLCAmdGVtcCkpCi0JCWxlbiArPQotCQkgICAgc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogMHglMDR4XG4iLCB0ZW1wKTsKKwkJc2VxX3ByaW50ZihtLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogMHglMDR4XG4iLCB0ZW1wKTsKIAlpZiAoYXN1c19pbmZvKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+bGVuZ3RoKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgbGVuZ3RoICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJWQiLCBhc3VzX2luZm8tPmNoZWNrc3VtKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgY2hlY2tzdW0gICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJWQiLCBhc3VzX2luZm8tPnJldmlzaW9uKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgcmV2aXNpb24gICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDcsICIlcyIsIGFzdXNfaW5mby0+b2VtX2lkKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk9FTSBpZCAgICAgICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDksICIlcyIsIGFzdXNfaW5mby0+b2VtX3RhYmxlX2lkKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk9FTSB0YWJsZSBpZCAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzX2luZm8tPm9lbV9yZXZpc2lvbik7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJPRU0gcmV2aXNpb24gICAgICAgOiAweCVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDUsICIlcyIsIGFzdXNfaW5mby0+YXNsX2NvbXBpbGVyX2lkKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkFTTCBjb21wIHZlbmRvciBpZCA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzX2luZm8tPmFzbF9jb21waWxlcl9yZXZpc2lvbik7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJBU0wgY29tcCByZXZpc2lvbiAgOiAweCVzXG4iLCBidWYpOworCQlzZXFfcHJpbnRmKG0sICJEU0RUIGxlbmd0aCAgICAgICAgOiAlZFxuIiwgYXN1c19pbmZvLT5sZW5ndGgpOworCQlzZXFfcHJpbnRmKG0sICJEU0RUIGNoZWNrc3VtICAgICAgOiAlZFxuIiwgYXN1c19pbmZvLT5jaGVja3N1bSk7CisJCXNlcV9wcmludGYobSwgIkRTRFQgcmV2aXNpb24gICAgICA6ICVkXG4iLCBhc3VzX2luZm8tPnJldmlzaW9uKTsKKwkJc2VxX3ByaW50ZihtLCAiT0VNIGlkICAgICAgICAgICAgIDogJS4qc1xuIiwgQUNQSV9PRU1fSURfU0laRSwgYXN1c19pbmZvLT5vZW1faWQpOworCQlzZXFfcHJpbnRmKG0sICJPRU0gdGFibGUgaWQgICAgICAgOiAlLipzXG4iLCBBQ1BJX09FTV9UQUJMRV9JRF9TSVpFLCBhc3VzX2luZm8tPm9lbV90YWJsZV9pZCk7CisJCXNlcV9wcmludGYobSwgIk9FTSByZXZpc2lvbiAgICAgICA6IDB4JXhcbiIsIGFzdXNfaW5mby0+b2VtX3JldmlzaW9uKTsKKwkJc2VxX3ByaW50ZihtLCAiQVNMIGNvbXAgdmVuZG9yIGlkIDogJS4qc1xuIiwgQUNQSV9OQU1FX1NJWkUsIGFzdXNfaW5mby0+YXNsX2NvbXBpbGVyX2lkKTsKKwkJc2VxX3ByaW50ZihtLCAiQVNMIGNvbXAgcmV2aXNpb24gIDogMHgleFxuIiwgYXN1c19pbmZvLT5hc2xfY29tcGlsZXJfcmV2aXNpb24pOwogCX0KIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXN1c19pbmZvX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYXN1c19pbmZvX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzdXNfaW5mb19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGFzdXNfaW5mb19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qCiAgKiAvcHJvYyBoYW5kbGVycwogICogV2Ugd3JpdGUgb3VyIGluZm8gaW4gcGFnZSwgd2UgYmVnaW4gYXQgb2Zmc2V0IG9mZiBhbmQgY2Fubm90IHdyaXRlIG1vcmUKQEAgLTYzOSwzNCArNjI5LDQ4IEBACiAvKgogICogUHJvYyBoYW5kbGVycyBmb3IgTUxFRAogICovCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWRfbWxlZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWxlZF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwKLQkJICAgICAgIHJlYWRfbGVkKGhvdGstPm1ldGhvZHMtPm1sZWRfc3RhdHVzLCBNTEVEX09OKSk7CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHJlYWRfbGVkKGhvdGstPm1ldGhvZHMtPm1sZWRfc3RhdHVzLCBNTEVEX09OKSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfbWxlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWxlZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1sZWRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbWxlZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCXJldHVybiB3cml0ZV9sZWQoYnVmZmVyLCBjb3VudCwgaG90ay0+bWV0aG9kcy0+bXRfbWxlZCwgTUxFRF9PTiwgMSk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1sZWRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtbGVkX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBtbGVkX3Byb2Nfd3JpdGUsCit9OworCiAvKgogICogUHJvYyBoYW5kbGVycyBmb3IgTEVEIGRpc3BsYXkKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX2xlZGQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGxlZGRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiMHglMDh4XG4iLCBob3RrLT5sZWRkX3N0YXR1cyk7CisJc2VxX3ByaW50ZihtLCAiMHglMDh4XG4iLCBob3RrLT5sZWRkX3N0YXR1cyk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfbGVkZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGVkZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGxlZGRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbGVkZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCBydiwgdmFsdWU7CiAKQEAgLTY4Miw2MSArNjg2LDEwNCBAQAogCXJldHVybiBydjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGVkZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGxlZGRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGxlZGRfcHJvY193cml0ZSwKK307CisKIC8qCiAgKiBQcm9jIGhhbmRsZXJzIGZvciBXTEVECiAgKi8KLXN0YXRpYyBpbnQKLXByb2NfcmVhZF93bGVkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCB3bGVkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLAotCQkgICAgICAgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+d2xlZF9zdGF0dXMsIFdMRURfT04pKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+d2xlZF9zdGF0dXMsIFdMRURfT04pKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY193cml0ZV93bGVkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCB3bGVkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgd2xlZF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCB3bGVkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJcmV0dXJuIHdyaXRlX2xlZChidWZmZXIsIGNvdW50LCBob3RrLT5tZXRob2RzLT5tdF93bGVkLCBXTEVEX09OLCAwKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2xlZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHdsZWRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHdsZWRfcHJvY193cml0ZSwKK307CisKIC8qCiAgKiBQcm9jIGhhbmRsZXJzIGZvciBCbHVldG9vdGgKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX2JsdWV0b290aChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkJICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJsdWV0b290aF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+YnRfc3RhdHVzLCBCVF9PTikpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCByZWFkX2xlZChob3RrLT5tZXRob2RzLT5idF9zdGF0dXMsIEJUX09OKSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfYmx1ZXRvb3RoKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJsdWV0b290aF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGJsdWV0b290aF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBibHVldG9vdGhfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAkvKiBOb3RlOiBtdF9idF9zd2l0Y2ggY29udHJvbHMgYm90aCBpbnRlcm5hbCBCbHVldG9vdGggYWRhcHRlcidzCiAJICAgcHJlc2VuY2UgYW5kIGl0cyBMRUQgKi8KIAlyZXR1cm4gd3JpdGVfbGVkKGJ1ZmZlciwgY291bnQsIGhvdGstPm1ldGhvZHMtPm10X2J0X3N3aXRjaCwgQlRfT04sIDApOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibHVldG9vdGhfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBibHVldG9vdGhfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGJsdWV0b290aF9wcm9jX3dyaXRlLAorfTsKKwogLyoKICAqIFByb2MgaGFuZGxlcnMgZm9yIFRMRUQKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX3RsZWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHRsZWRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsCi0JCSAgICAgICByZWFkX2xlZChob3RrLT5tZXRob2RzLT50bGVkX3N0YXR1cywgVExFRF9PTikpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCByZWFkX2xlZChob3RrLT5tZXRob2RzLT50bGVkX3N0YXR1cywgVExFRF9PTikpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX3RsZWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHRsZWRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB0bGVkX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRsZWRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlyZXR1cm4gd3JpdGVfbGVkKGJ1ZmZlciwgY291bnQsIGhvdGstPm1ldGhvZHMtPm10X3RsZWQsIFRMRURfT04sIDApOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0bGVkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdGxlZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gdGxlZF9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIGludCBnZXRfbGNkX3N0YXRlKHZvaWQpCiB7CiAJaW50IGxjZCA9IDA7CkBAIC04MjksMTYgKzg3NiwxOSBAQAogCiB9CiAKLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9sY2QoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGNkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCBnZXRfbGNkX3N0YXRlKCkpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCBnZXRfbGNkX3N0YXRlKCkpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX2xjZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGNkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbGNkX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxjZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCBydiwgdmFsdWU7CiAKQEAgLTg0OCw2ICs4OTgsMTUgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxjZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGxjZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbGNkX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJaW50IHZhbHVlOwpAQCAtOTA3LDE2ICs5NjYsMTkgQEAKIAlyZXR1cm4gc2V0X2JyaWdodG5lc3MoYmQtPnByb3BzLmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWRfYnJuKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJybl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgcmVhZF9icmlnaHRuZXNzKE5VTEwpKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgcmVhZF9icmlnaHRuZXNzKE5VTEwpKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY193cml0ZV9icm4oc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJybl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGJybl9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBicm5fcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlpbnQgcnYsIHZhbHVlOwogCkBAIC05MjksNiArOTkxLDE1IEBACiAJcmV0dXJuIHJ2OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicm5fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBicm5fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGJybl9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIHZvaWQgc2V0X2Rpc3BsYXkoaW50IHZhbHVlKQogewogCS8qIG5vIHNhbml0eSBjaGVjayBuZWVkZWQgZm9yIG5vdyAqLwpAQCAtOTQyLDkgKzEwMTMsNyBAQAogICogTm93LCAqdGhpcyogb25lIGNvdWxkIGJlIG1vcmUgdXNlci1mcmllbmRseSwgYnV0IHNvIGZhciwgbm8tb25lIGhhcwogICogY29tcGxhaW5lZC4gVGhlIHNpZ25pZmljYW5jZSBvZiBiaXRzIGlzIHRoZSBzYW1lIGFzIGluIHByb2Nfd3JpdGVfZGlzcCgpCiAgKi8KLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9kaXNwKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBkaXNwX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJaW50IHZhbHVlID0gMDsKIApAQCAtOTUyLDcgKzEwMjEsMTMgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIkFzdXMgQUNQSTogRXJyb3IgcmVhZGluZyBkaXNwbGF5IHN0YXR1c1xuIik7CiAJdmFsdWUgJj0gMHgwNzsJLyogbmVlZGVkIGZvciBzb21lIG1vZGVscywgc2hvdWxkbid0IGh1cnQgb3RoZXJzICovCi0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCB2YWx1ZSk7CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGlzcF9wcm9jX3Nob3csIE5VTEwpOwogfQogCiAvKgpAQCAtOTYxLDkgKzEwMzYsOCBAQAogICogKGJpdHdpc2UpIG9mIHRoZXNlIHdpbGwgc3VmZmljZS4gSSBuZXZlciBhY3R1YWxseSB0ZXN0ZWQgMyBkaXNwbGF5cyBob29rZWQKICAqIHVwIHNpbXVsdGFuZW91c2x5LCBzbyBiZSB3YXJuZWQuIFNlZSB0aGUgYWNwaTRhc3VzIFJFQURNRSBmb3IgbW9yZSBpbmZvLgogICovCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX2Rpc3Aoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3NpemVfdCBkaXNwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IHJ2LCB2YWx1ZTsKIApAQCAtOTczLDI1ICsxMDQ3LDI3IEBACiAJcmV0dXJuIHJ2OwogfQogCi10eXBlZGVmIGludCAocHJvY19yZWFkZnVuYykgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXR5cGVkZWYgaW50IChwcm9jX3dyaXRlZnVuYykgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaXNwX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGlzcF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZGlzcF9wcm9jX3dyaXRlLAorfTsKIAogc3RhdGljIGludAotYXN1c19wcm9jX2FkZChjaGFyICpuYW1lLCBwcm9jX3dyaXRlZnVuYyAqd3JpdGVmdW5jLAotCQkgICAgIHByb2NfcmVhZGZ1bmMgKnJlYWRmdW5jLCBtb2RlX3QgbW9kZSwKK2FzdXNfcHJvY19hZGQoY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqcHJvY19mb3BzLCBtb2RlX3QgbW9kZSwKIAkJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MgPQotCSAgICBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBtb2RlLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOworCisJcHJvYyA9IHByb2NfY3JlYXRlX2RhdGEobmFtZSwgbW9kZSwgYWNwaV9kZXZpY2VfZGlyKGRldmljZSksCisJCQkJcHJvY19mb3BzLCBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpOwogCWlmICghcHJvYykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIFVuYWJsZSB0byBjcmVhdGUgJXMgZnMgZW50cnlcbiIsIG5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQotCXByb2MtPndyaXRlX3Byb2MgPSB3cml0ZWZ1bmM7Ci0JcHJvYy0+cmVhZF9wcm9jID0gcmVhZGZ1bmM7Ci0JcHJvYy0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlwcm9jLT51aWQgPSBhc3VzX3VpZDsKIAlwcm9jLT5naWQgPSBhc3VzX2dpZDsKIAlyZXR1cm4gMDsKQEAgLTEwMjAsMTAgKzEwOTYsOSBAQAogCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfSU5GTywgbW9kZSwgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOworCXByb2MgPSBwcm9jX2NyZWF0ZShQUk9DX0lORk8sIG1vZGUsIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLAorCQkJICAgJmFzdXNfaW5mb19wcm9jX2ZvcHMpOwogCWlmIChwcm9jKSB7Ci0JCXByb2MtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9pbmZvOwotCQlwcm9jLT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCQlwcm9jLT51aWQgPSBhc3VzX3VpZDsKIAkJcHJvYy0+Z2lkID0gYXN1c19naWQ7CiAJfSBlbHNlIHsKQEAgLTEwMzIsMjggKzExMDcsMjMgQEAKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfd2xlZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfV0xFRCwgJnByb2Nfd3JpdGVfd2xlZCwgJnByb2NfcmVhZF93bGVkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX1dMRUQsICZ3bGVkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfbGVkZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfTEVERCwgJnByb2Nfd3JpdGVfbGVkZCwgJnByb2NfcmVhZF9sZWRkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX0xFREQsICZsZWRkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfbWxlZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfTUxFRCwgJnByb2Nfd3JpdGVfbWxlZCwgJnByb2NfcmVhZF9tbGVkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX01MRUQsICZtbGVkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfdGxlZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfVExFRCwgJnByb2Nfd3JpdGVfdGxlZCwgJnByb2NfcmVhZF90bGVkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX1RMRUQsICZ0bGVkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfYnRfc3dpdGNoKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19CVCwgJnByb2Nfd3JpdGVfYmx1ZXRvb3RoLAotCQkJICAgICAgJnByb2NfcmVhZF9ibHVldG9vdGgsIG1vZGUsIGRldmljZSk7CisJCWFzdXNfcHJvY19hZGQoUFJPQ19CVCwgJmJsdWV0b290aF9wcm9jX2ZvcHMsIG1vZGUsIGRldmljZSk7CiAJfQogCiAJLyoKQEAgLTEwNjEsMTkgKzExMzEsMTYgQEAKIAkgKiBhY2Nlc3NpYmxlIGZyb20gdGhlIGtleWJvYXJkCiAJICovCiAJaWYgKGhvdGstPm1ldGhvZHMtPm10X2xjZF9zd2l0Y2ggJiYgaG90ay0+bWV0aG9kcy0+bGNkX3N0YXR1cykgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfTENELCAmcHJvY193cml0ZV9sY2QsICZwcm9jX3JlYWRfbGNkLCBtb2RlLAotCQkJICAgICAgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX0xDRCwgJmxjZF9wcm9jX2ZvcHMsIG1vZGUsIGRldmljZSk7CiAJfQogCiAJaWYgKChob3RrLT5tZXRob2RzLT5icmlnaHRuZXNzX3VwICYmIGhvdGstPm1ldGhvZHMtPmJyaWdodG5lc3NfZG93bikgfHwKIAkgICAgKGhvdGstPm1ldGhvZHMtPmJyaWdodG5lc3NfZ2V0ICYmIGhvdGstPm1ldGhvZHMtPmJyaWdodG5lc3Nfc2V0KSkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfQlJOLCAmcHJvY193cml0ZV9icm4sICZwcm9jX3JlYWRfYnJuLCBtb2RlLAotCQkJICAgICAgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX0JSTiwgJmJybl9wcm9jX2ZvcHMsIG1vZGUsIGRldmljZSk7CiAJfQogCiAJaWYgKGhvdGstPm1ldGhvZHMtPmRpc3BsYXlfc2V0KSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19ESVNQLCAmcHJvY193cml0ZV9kaXNwLCAmcHJvY19yZWFkX2Rpc3AsCi0JCQkgICAgICBtb2RlLCBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfRElTUCwgJmRpc3BfcHJvY19mb3BzLCBtb2RlLCBkZXZpY2UpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTAwODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBUaGFkZXUgTGltYSBkZSBTb3V6YSBDYXNjYXJkbyA8Y2FzY2FyZG9AaG9sb3Njb3Bpby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworCitzdHJ1Y3QgY21wY19hY2NlbCB7CisJaW50IHNlbnNpdGl2aXR5OworfTsKKworI2RlZmluZSBDTVBDX0FDQ0VMX1NFTlNJVElWSVRZX0RFRkFVTFQJCTUKKworCisvKgorICogR2VuZXJpYyBpbnB1dCBkZXZpY2UgY29kZS4KKyAqLworCit0eXBlZGVmIHZvaWQgKCppbnB1dF9kZXZpY2VfaW5pdCkoc3RydWN0IGlucHV0X2RldiAqZGV2KTsKKworc3RhdGljIGludCBjbXBjX2FkZF9hY3BpX25vdGlmeV9kZXZpY2Uoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpLCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBpbnB1dF9kZXZpY2VfaW5pdCBpZGV2X2luaXQpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJaW50IGVycm9yOworCisJaW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlpbnB1dGRldi0+bmFtZSA9IG5hbWU7CisJaW5wdXRkZXYtPmRldi5wYXJlbnQgPSAmYWNwaS0+ZGV2OworCWlkZXZfaW5pdChpbnB1dGRldik7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRkZXYpOworCWlmIChlcnJvcikgeworCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dGRldik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZhY3BpLT5kZXYsIGlucHV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbXBjX3JlbW92ZV9hY3BpX25vdGlmeV9kZXZpY2Uoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZhY3BpLT5kZXYpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFjY2VsZXJvbWV0ZXIgY29kZS4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfc3RhcnRfYWNjZWwoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtWzJdOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHgzOworCXBhcmFtWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFDTUQiLCAmaW5wdXQsIE5VTEwpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX3N0b3BfYWNjZWwoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtWzJdOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHg0OworCXBhcmFtWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFDTUQiLCAmaW5wdXQsIE5VTEwpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX2FjY2VsX3NldF9zZW5zaXRpdml0eShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB2YWwpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisKKwlwYXJhbVswXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJcGFyYW1bMF0uaW50ZWdlci52YWx1ZSA9IDB4MDI7CisJcGFyYW1bMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtWzFdLmludGVnZXIudmFsdWUgPSB2YWw7CisJaW5wdXQuY291bnQgPSAyOworCWlucHV0LnBvaW50ZXIgPSBwYXJhbTsKKwlyZXR1cm4gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiQUNNRCIsICZpbnB1dCwgTlVMTCk7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX2dldF9hY2NlbChhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJICB1bnNpZ25lZCBjaGFyICp4LAorCQkJCSAgdW5zaWduZWQgY2hhciAqeSwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKnopCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIDAgfTsKKwl1bnNpZ25lZCBjaGFyICpsb2NzOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHgwMTsKKwlwYXJhbVsxXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5wdXQuY291bnQgPSAyOworCWlucHV0LnBvaW50ZXIgPSBwYXJhbTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJBQ01EIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwkJb2JqID0gb3V0cHV0LnBvaW50ZXI7CisJCWxvY3MgPSBvYmotPmJ1ZmZlci5wb2ludGVyOworCQkqeCA9IGxvY3NbMF07CisJCSp5ID0gbG9jc1sxXTsKKwkJKnogPSBsb2NzWzJdOworCQlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGNtcGNfYWNjZWxfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgdTMyIGV2ZW50KQoreworCWlmIChldmVudCA9PSAweDgxKSB7CisJCXVuc2lnbmVkIGNoYXIgeCwgeSwgejsKKwkJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJCXN0YXR1cyA9IGNtcGNfZ2V0X2FjY2VsKGRldi0+aGFuZGxlLCAmeCwgJnksICZ6KTsKKwkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWCwgeCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWSwgeSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWiwgeik7CisJCQlpbnB1dF9zeW5jKGlucHV0ZGV2KTsKKwkJfQorCX0KK30KKworc3RhdGljIHNzaXplX3QgY21wY19hY2NlbF9zZW5zaXRpdml0eV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJc3RydWN0IGNtcGNfYWNjZWwgKmFjY2VsOworCisJYWNwaSA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJYWNjZWwgPSBkZXZfZ2V0X2RydmRhdGEoJmlucHV0ZGV2LT5kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFjY2VsLT5zZW5zaXRpdml0eSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJc3RydWN0IGNtcGNfYWNjZWwgKmFjY2VsOworCXVuc2lnbmVkIGxvbmcgc2Vuc2l0aXZpdHk7CisJaW50IHI7CisKKwlhY3BpID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlpbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2KTsKKwlhY2NlbCA9IGRldl9nZXRfZHJ2ZGF0YSgmaW5wdXRkZXYtPmRldik7CisKKwlyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmc2Vuc2l0aXZpdHkpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWFjY2VsLT5zZW5zaXRpdml0eSA9IHNlbnNpdGl2aXR5OworCWNtcGNfYWNjZWxfc2V0X3NlbnNpdGl2aXR5KGFjcGktPmhhbmRsZSwgc2Vuc2l0aXZpdHkpOworCisJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7Cit9CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfYXR0ciA9IHsKKwkuYXR0ciA9IHsgLm5hbWUgPSAic2Vuc2l0aXZpdHkiLCAubW9kZSA9IDA2NjAgfSwKKwkuc2hvdyA9IGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfc2hvdywKKwkuc3RvcmUgPSBjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X3N0b3JlCit9OworCitzdGF0aWMgaW50IGNtcGNfYWNjZWxfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGk7CisKKwlhY3BpID0gdG9fYWNwaV9kZXZpY2UoaW5wdXQtPmRldi5wYXJlbnQpOworCWlmIChBQ1BJX1NVQ0NFU1MoY21wY19zdGFydF9hY2NlbChhY3BpLT5oYW5kbGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGNtcGNfYWNjZWxfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpOworCisJYWNwaSA9IHRvX2FjcGlfZGV2aWNlKGlucHV0LT5kZXYucGFyZW50KTsKKwljbXBjX3N0b3BfYWNjZWwoYWNwaS0+aGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQgY21wY19hY2NlbF9pZGV2X2luaXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc2V0X2JpdChFVl9BQlMsIGlucHV0ZGV2LT5ldmJpdCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRkZXYsIEFCU19YLCAwLCAyNTUsIDgsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0ZGV2LCBBQlNfWSwgMCwgMjU1LCA4LCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dGRldiwgQUJTX1osIDAsIDI1NSwgOCwgMCk7CisJaW5wdXRkZXYtPm9wZW4gPSBjbXBjX2FjY2VsX29wZW47CisJaW5wdXRkZXYtPmNsb3NlID0gY21wY19hY2NlbF9jbG9zZTsKK30KKworc3RhdGljIGludCBjbXBjX2FjY2VsX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXN0cnVjdCBjbXBjX2FjY2VsICphY2NlbDsKKworCWFjY2VsID0ga21hbGxvYyhzaXplb2YoKmFjY2VsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY2NlbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhY2NlbC0+c2Vuc2l0aXZpdHkgPSBDTVBDX0FDQ0VMX1NFTlNJVElWSVRZX0RFRkFVTFQ7CisJY21wY19hY2NlbF9zZXRfc2Vuc2l0aXZpdHkoYWNwaS0+aGFuZGxlLCBhY2NlbC0+c2Vuc2l0aXZpdHkpOworCisJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFjcGktPmRldiwgJmNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfYXR0cik7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxlZF9maWxlOworCisJZXJyb3IgPSBjbXBjX2FkZF9hY3BpX25vdGlmeV9kZXZpY2UoYWNwaSwgImNtcGNfYWNjZWwiLAorCQkJCQkgICAgY21wY19hY2NlbF9pZGV2X2luaXQpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsZWRfaW5wdXQ7CisKKwlpbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoJmlucHV0ZGV2LT5kZXYsIGFjY2VsKTsKKworCXJldHVybiAwOworCitmYWlsZWRfaW5wdXQ6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZhY3BpLT5kZXYsICZjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X2F0dHIpOworZmFpbGVkX2ZpbGU6CisJa2ZyZWUoYWNjZWwpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjbXBjX2FjY2VsX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGksIGludCB0eXBlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXN0cnVjdCBjbXBjX2FjY2VsICphY2NlbDsKKworCWlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZhY3BpLT5kZXYpOworCWFjY2VsID0gZGV2X2dldF9kcnZkYXRhKCZpbnB1dGRldi0+ZGV2KTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmYWNwaS0+ZGV2LCAmY21wY19hY2NlbF9zZW5zaXRpdml0eV9hdHRyKTsKKwlyZXR1cm4gY21wY19yZW1vdmVfYWNwaV9ub3RpZnlfZGV2aWNlKGFjcGkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfYWNjZWxfZGV2aWNlX2lkc1tdID0geworCXsiQUNDRTAwMDAiLCAwfSwKKwl7IiIsIDB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2FjY2VsX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYWNjZWxfYWNwaV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiY21wY19hY2NlbCIsCisJLmNsYXNzID0gImNtcGNfYWNjZWwiLAorCS5pZHMgPSBjbXBjX2FjY2VsX2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGNtcGNfYWNjZWxfYWRkLAorCQkucmVtb3ZlID0gY21wY19hY2NlbF9yZW1vdmUsCisJCS5ub3RpZnkgPSBjbXBjX2FjY2VsX2hhbmRsZXIsCisJfQorfTsKKworCisvKgorICogVGFibGV0IG1vZGUgY29kZS4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfZ2V0X3RhYmxldChhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nICp2YWx1ZSkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgb3V0cHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbS5pbnRlZ2VyLnZhbHVlID0gMHgwMTsKKwlpbnB1dC5jb3VudCA9IDE7CisJaW5wdXQucG9pbnRlciA9ICZwYXJhbTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiVENNRCIsICZpbnB1dCwgJm91dHB1dCk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQkqdmFsdWUgPSBvdXRwdXQ7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgY21wY190YWJsZXRfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgdTMyIGV2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwgPSAwOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwlpZiAoZXZlbnQgPT0gMHg4MSkgeworCQlpZiAoQUNQSV9TVUNDRVNTKGNtcGNfZ2V0X3RhYmxldChkZXYtPmhhbmRsZSwgJnZhbCkpKQorCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChpbnB1dGRldiwgU1dfVEFCTEVUX01PREUsICF2YWwpOworCX0KK30KKworc3RhdGljIHZvaWQgY21wY190YWJsZXRfaWRldl9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwgPSAwOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaTsKKworCXNldF9iaXQoRVZfU1csIGlucHV0ZGV2LT5ldmJpdCk7CisJc2V0X2JpdChTV19UQUJMRVRfTU9ERSwgaW5wdXRkZXYtPnN3Yml0KTsKKworCWFjcGkgPSB0b19hY3BpX2RldmljZShpbnB1dGRldi0+ZGV2LnBhcmVudCk7CisJaWYgKEFDUElfU1VDQ0VTUyhjbXBjX2dldF90YWJsZXQoYWNwaS0+aGFuZGxlLCAmdmFsKSkpCisJCWlucHV0X3JlcG9ydF9zd2l0Y2goaW5wdXRkZXYsIFNXX1RBQkxFVF9NT0RFLCAhdmFsKTsKK30KKworc3RhdGljIGludCBjbXBjX3RhYmxldF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpKQoreworCXJldHVybiBjbXBjX2FkZF9hY3BpX25vdGlmeV9kZXZpY2UoYWNwaSwgImNtcGNfdGFibGV0IiwKKwkJCQkJICAgY21wY190YWJsZXRfaWRldl9pbml0KTsKK30KKworc3RhdGljIGludCBjbXBjX3RhYmxldF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gY21wY19yZW1vdmVfYWNwaV9ub3RpZnlfZGV2aWNlKGFjcGkpOworfQorCitzdGF0aWMgaW50IGNtcGNfdGFibGV0X3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IDA7CisJaWYgKEFDUElfU1VDQ0VTUyhjbXBjX2dldF90YWJsZXQoYWNwaS0+aGFuZGxlLCAmdmFsKSkpCisJCWlucHV0X3JlcG9ydF9zd2l0Y2goaW5wdXRkZXYsIFNXX1RBQkxFVF9NT0RFLCAhdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX3RhYmxldF9kZXZpY2VfaWRzW10gPSB7CisJeyJUQkxUMDAwMCIsIDB9LAorCXsiIiwgMH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfdGFibGV0X2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfdGFibGV0X2FjcGlfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImNtcGNfdGFibGV0IiwKKwkuY2xhc3MgPSAiY21wY190YWJsZXQiLAorCS5pZHMgPSBjbXBjX3RhYmxldF9kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBjbXBjX3RhYmxldF9hZGQsCisJCS5yZW1vdmUgPSBjbXBjX3RhYmxldF9yZW1vdmUsCisJCS5yZXN1bWUgPSBjbXBjX3RhYmxldF9yZXN1bWUsCisJCS5ub3RpZnkgPSBjbXBjX3RhYmxldF9oYW5kbGVyLAorCX0KK307CisKKworLyoKKyAqIEJhY2tsaWdodCBjb2RlLgorICovCisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX2dldF9icmlnaHRuZXNzKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICp2YWx1ZSkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgb3V0cHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbS5pbnRlZ2VyLnZhbHVlID0gMHhDMDsKKwlpbnB1dC5jb3VudCA9IDE7CisJaW5wdXQucG9pbnRlciA9ICZwYXJhbTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiR1JESSIsICZpbnB1dCwgJm91dHB1dCk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQkqdmFsdWUgPSBvdXRwdXQ7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfc2V0X2JyaWdodG5lc3MoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBvdXRwdXQ7CisKKwlwYXJhbVswXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJcGFyYW1bMF0uaW50ZWdlci52YWx1ZSA9IDB4QzA7CisJcGFyYW1bMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtWzFdLmludGVnZXIudmFsdWUgPSB2YWx1ZTsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJHV1JJIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGNtcGNfYmxfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJdW5zaWduZWQgbG9uZyBsb25nIGJyaWdodG5lc3M7CisKKwloYW5kbGUgPSBibF9nZXRfZGF0YShiZCk7CisJc3RhdHVzID0gY21wY19nZXRfYnJpZ2h0bmVzcyhoYW5kbGUsICZicmlnaHRuZXNzKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiBicmlnaHRuZXNzOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGNtcGNfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKworCWhhbmRsZSA9IGJsX2dldF9kYXRhKGJkKTsKKwlzdGF0dXMgPSBjbXBjX3NldF9icmlnaHRuZXNzKGhhbmRsZSwgYmQtPnByb3BzLmJyaWdodG5lc3MpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBjbXBjX2JsX29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBjbXBjX2JsX2dldF9icmlnaHRuZXNzLAorCS51cGRhdGVfc3RhdHVzID0gY21wY19ibF91cGRhdGVfc3RhdHVzCit9OworCitzdGF0aWMgaW50IGNtcGNfYmxfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSkKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7CisKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImNtcGNfYmwiLCAmYWNwaS0+ZGV2LAorCQkJCSAgICAgICBhY3BpLT5oYW5kbGUsICZjbXBjX2JsX29wcyk7CisJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gNzsKKwlkZXZfc2V0X2RydmRhdGEoJmFjcGktPmRldiwgYmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtcGNfYmxfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSwgaW50IHR5cGUpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOworCisJYmQgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2RldmljZV9pZHNbXSA9IHsKKwl7IklQTUwyMDAiLCAwfSwKKwl7IiIsIDB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYmxfYWNwaV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiY21wYyIsCisJLmNsYXNzID0gImNtcGMiLAorCS5pZHMgPSBjbXBjX2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGNtcGNfYmxfYWRkLAorCQkucmVtb3ZlID0gY21wY19ibF9yZW1vdmUKKwl9Cit9OworCisKKy8qCisgKiBFeHRyYSBrZXlzIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgY21wY19rZXlzX2NvZGVzW10gPSB7CisJS0VZX1VOS05PV04sCisJS0VZX1dMQU4sCisJS0VZX1NXSVRDSFZJREVPTU9ERSwKKwlLRVlfQlJJR0hUTkVTU0RPV04sCisJS0VZX0JSSUdIVE5FU1NVUCwKKwlLRVlfVkVORE9SLAorCUtFWV9NQVgKK307CisKK3N0YXRpYyB2b2lkIGNtcGNfa2V5c19oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCB1MzIgZXZlbnQpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJaW50IGNvZGUgPSBLRVlfTUFYOworCisJaWYgKChldmVudCAmIDB4MEYpIDwgQVJSQVlfU0laRShjbXBjX2tleXNfY29kZXMpKQorCQljb2RlID0gY21wY19rZXlzX2NvZGVzW2V2ZW50ICYgMHgwRl07CisJaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTs7CisJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgY29kZSwgIShldmVudCAmIDB4MTApKTsKK30KKworc3RhdGljIHZvaWQgY21wY19rZXlzX2lkZXZfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlpbnQgaTsKKworCXNldF9iaXQoRVZfS0VZLCBpbnB1dGRldi0+ZXZiaXQpOworCWZvciAoaSA9IDA7IGNtcGNfa2V5c19jb2Rlc1tpXSAhPSBLRVlfTUFYOyBpKyspCisJCXNldF9iaXQoY21wY19rZXlzX2NvZGVzW2ldLCBpbnB1dGRldi0+a2V5Yml0KTsKK30KKworc3RhdGljIGludCBjbXBjX2tleXNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSkKK3sKKwlyZXR1cm4gY21wY19hZGRfYWNwaV9ub3RpZnlfZGV2aWNlKGFjcGksICJjbXBjX2tleXMiLAorCQkJCQkgICBjbXBjX2tleXNfaWRldl9pbml0KTsKK30KKworc3RhdGljIGludCBjbXBjX2tleXNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSwgaW50IHR5cGUpCit7CisJcmV0dXJuIGNtcGNfcmVtb3ZlX2FjcGlfbm90aWZ5X2RldmljZShhY3BpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2tleXNfZGV2aWNlX2lkc1tdID0geworCXsiRm5CVDAwMDAiLCAwfSwKKwl7IiIsIDB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2tleXNfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19rZXlzX2FjcGlfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImNtcGNfa2V5cyIsCisJLmNsYXNzID0gImNtcGNfa2V5cyIsCisJLmlkcyA9IGNtcGNfa2V5c19kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBjbXBjX2tleXNfYWRkLAorCQkucmVtb3ZlID0gY21wY19rZXlzX3JlbW92ZSwKKwkJLm5vdGlmeSA9IGNtcGNfa2V5c19oYW5kbGVyLAorCX0KK307CisKKworLyoKKyAqIEdlbmVyYWwgaW5pdC9leGl0IGNvZGUuCisgKi8KKworc3RhdGljIGludCBjbXBjX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfa2V5c19hY3BpX2RyaXZlcik7CisJaWYgKHIpCisJCWdvdG8gZmFpbGVkX2tleXM7CisKKwlyID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2JsX2FjcGlfZHJpdmVyKTsKKwlpZiAocikKKwkJZ290byBmYWlsZWRfYmw7CisKKwlyID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZjbXBjX3RhYmxldF9hY3BpX2RyaXZlcik7CisJaWYgKHIpCisJCWdvdG8gZmFpbGVkX3RhYmxldDsKKworCXIgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfYWNjZWxfYWNwaV9kcml2ZXIpOworCWlmIChyKQorCQlnb3RvIGZhaWxlZF9hY2NlbDsKKworCXJldHVybiByOworCitmYWlsZWRfYWNjZWw6CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfdGFibGV0X2FjcGlfZHJpdmVyKTsKKworZmFpbGVkX3RhYmxldDoKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY19ibF9hY3BpX2RyaXZlcik7CisKK2ZhaWxlZF9ibDoKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY19rZXlzX2FjcGlfZHJpdmVyKTsKKworZmFpbGVkX2tleXM6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIGNtcGNfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2FjY2VsX2FjcGlfZHJpdmVyKTsKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY190YWJsZXRfYWNwaV9kcml2ZXIpOworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2JsX2FjcGlfZHJpdmVyKTsKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY19rZXlzX2FjcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY21wY19pbml0KTsKK21vZHVsZV9leGl0KGNtcGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwppbmRleCA2N2YzZmU3Li45MTZjY2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMKQEAgLTIzOCw2ICsyMzgsNyBAQAogCQkJaW5wdXRfc3luYyhkZWxsX3dtaV9pbnB1dF9kZXYpOwogCQl9CiAJfQorCWtmcmVlKG9iaik7CiB9CiAKIApAQCAtMzI0LDM3ICszMjUsMzQgQEAKIAlpbnQgZXJyOwogCiAJaWYgKHdtaV9oYXNfZ3VpZChERUxMX0VWRU5UX0dVSUQpKSB7Ci0KLQkJZG1pX3dhbGsoZmluZF9oa190eXBlLCBOVUxMKTsKLQotCQllcnIgPSBkZWxsX3dtaV9pbnB1dF9zZXR1cCgpOwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWVyciA9IHdtaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCwKLQkJCQkJCSBkZWxsX3dtaV9ub3RpZnksIE5VTEwpOwotCQlpZiAoZXJyKSB7Ci0JCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJkZWxsLXdtaTogVW5hYmxlIHRvIHJlZ2lzdGVyIgotCQkJICAgICAgICIgbm90aWZ5IGhhbmRsZXIgLSAlZFxuIiwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlhY3BpX3ZpZGVvID0gYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpOwotCi0JfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImRlbGwtd21pOiBObyBrbm93biBXTUkgR1VJRCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRtaV93YWxrKGZpbmRfaGtfdHlwZSwgTlVMTCk7CisJYWNwaV92aWRlbyA9IGFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKTsKKworCWVyciA9IGRlbGxfd21pX2lucHV0X3NldHVwKCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHdtaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCwKKwkJCQkJIGRlbGxfd21pX25vdGlmeSwgTlVMTCk7CisJaWYgKGVycikgeworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJkZWxsLXdtaTogVW5hYmxlIHRvIHJlZ2lzdGVyIG5vdGlmeSBoYW5kbGVyIC0gJWRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVsbF93bWlfZXhpdCh2b2lkKQogewotCWlmICh3bWlfaGFzX2d1aWQoREVMTF9FVkVOVF9HVUlEKSkgewotCQl3bWlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCk7Ci0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7Ci0JfQorCXdtaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoREVMTF9FVkVOVF9HVUlEKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOwogfQogCiBtb2R1bGVfaW5pdChkZWxsX3dtaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IGI2NjAyOWIuLjVmMzMyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtMzc2LDggKzM3Niw4IEBACiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZnVqaXRzdS0+YWNwaV9oYW5kbGUsICJHQkxMIiwgTlVMTCwgJnN0YXRlKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIHN0YXR1czsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAwOwogCiAJZnVqaXRzdS0+YnJpZ2h0bmVzc19sZXZlbCA9IHN0YXRlICYgMHgwZmZmZmZmZjsKIApAQCAtMzk4LDggKzM5OCw4IEBACiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZnVqaXRzdS0+YWNwaV9oYW5kbGUsICJSQkxMIiwgTlVMTCwgJnN0YXRlKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIHN0YXR1czsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtMTsKIAogCWZ1aml0c3UtPm1heF9icmlnaHRuZXNzID0gc3RhdGU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggNjNjM2U2NS4uODc4MWQ4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCkBAIC0xMzQsMTAgKzEzNCwxNSBAQAogCiAJb2JqID0gb3V0cHV0LnBvaW50ZXI7CiAKLQlpZiAoIW9iaiB8fCBvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikKKwlpZiAoIW9iaikKIAkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAob2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJYmlvc19yZXR1cm4gPSAqKChzdHJ1Y3QgYmlvc19yZXR1cm4gKilvYmotPmJ1ZmZlci5wb2ludGVyKTsKKwlrZnJlZShvYmopOwogCWlmIChiaW9zX3JldHVybi5yZXR1cm5fY29kZSA+IDApCiAJCXJldHVybiBiaW9zX3JldHVybi5yZXR1cm5fY29kZSAqIC0xOwogCWVsc2UKQEAgLTM0MCwxMCArMzQ1LDEyIEBACiAKIAlpZiAoIW9iaiB8fCBvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUiB8fCBvYmotPmJ1ZmZlci5sZW5ndGggIT0gOCkgewogCQlwcmludGsoS0VSTl9JTkZPICJIUCBXTUk6IFVua25vd24gcmVzcG9uc2UgcmVjZWl2ZWRcbiIpOworCQlrZnJlZShvYmopOwogCQlyZXR1cm47CiAJfQogCiAJZXZlbnRjb2RlID0gKigodTggKikgb2JqLT5idWZmZXIucG9pbnRlcik7CisJa2ZyZWUob2JqKTsKIAlpZiAoZXZlbnRjb2RlID09IDB4NCkKIAkJZXZlbnRjb2RlID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSE9US0VZX1FVRVJZLCAwLAogCQkJCQkJMCk7CkBAIC0zODEsNiArMzg4LDggQEAKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiSFAgV01JOiBVbmtub3duIGtleSBwcmVzc2VkIC0gJXhcbiIsCiAJCQlldmVudGNvZGUpOworCisJa2ZyZWUob2JqKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaHBfd21pX2lucHV0X3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKaW5kZXggMGM4ZmUxNC4uN2Y3N2Y5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwpAQCAtMzQsMTYgKzM0LDYgQEAKIE1PRFVMRV9BTElBUygid21pOjU1MUExRjg0LUZCREQtNDEyNS05MURCLTNFQThGNDRGMUQ0NSIpOwogTU9EVUxFX0FMSUFTKCJ3bWk6QjZGM0VFRjItM0QyRi00OURDLTlERTMtODVCQ0UxOEM2MkYyIik7CiAKLS8qIFRlbXBvcmFyeSB3b3JrYXJvdW5kIHVudGlsIHRoZSBXTUkgc3lzZnMgaW50ZXJmYWNlIGdvZXMgaW4KLQkJeyAic3ZuIiwgRE1JX1NZU19WRU5ET1IgfSwKLQkJeyAicG4iLCAgRE1JX1BST0RVQ1RfTkFNRSB9LAotCQl7ICJwdnIiLCBETUlfUFJPRFVDVF9WRVJTSU9OIH0sCi0JCXsgInJ2biIsIERNSV9CT0FSRF9WRU5ET1IgfSwKLQkJeyAicm4iLCAgRE1JX0JPQVJEX05BTUUgfSwKLSovCi0KLU1PRFVMRV9BTElBUygiZG1pOio6c3ZuTUlDUk8tU1RBUklOVEVSTkFUSU9OQUwqOnBuTVMtNjYzODoqIik7Ci0KICNkZWZpbmUgRFJWX05BTUUgIm1zaS13bWkiCiAjZGVmaW5lIERSVl9QRlggRFJWX05BTUUgIjogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCAyODk2Y2E0Li41YWY1MzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTEzMSw2ICsxMzEsNyBAQAogCU5fU09OWV9SRktJTEwsCiB9OwogCitzdGF0aWMgaW50IHNvbnlfcmZraWxsX2hhbmRsZTsKIHN0YXRpYyBzdHJ1Y3QgcmZraWxsICpzb255X3Jma2lsbF9kZXZpY2VzW05fU09OWV9SRktJTExdOwogc3RhdGljIGludCBzb255X3Jma2lsbF9hZGRyZXNzW05fU09OWV9SRktJTExdID0gezB4MzAwLCAweDUwMCwgMHg3MDAsIDB4OTAwfTsKIHN0YXRpYyB2b2lkIHNvbnlfbmNfcmZraWxsX3VwZGF0ZSh2b2lkKTsKQEAgLTIzMiw2ICsyMzMsNyBAQAogCTU2LAkvKiA2OSBTT05ZUElfRVZFTlRfVk9MVU1FX0lOQ19QUkVTU0VEICovCiAJNTcsCS8qIDcwIFNPTllQSV9FVkVOVF9WT0xVTUVfREVDX1BSRVNTRUQgKi8KIAktMSwJLyogNzEgU09OWVBJX0VWRU5UX0JSSUdIVE5FU1NfUFJFU1NFRCAqLworCTU4LAkvKiA3MiBTT05ZUElfRVZFTlRfTUVESUFfUFJFU1NFRCAqLwogfTsKIAogc3RhdGljIGludCBzb255X2xhcHRvcF9pbnB1dF9rZXljb2RlX21hcFtdID0gewpAQCAtMjkzLDYgKzI5NSw3IEBACiAJS0VZX0YxNSwJLyogNTUgU09OWVBJX0VWRU5UX1NFVFRJTkdLRVlfUFJFU1NFRCAqLwogCUtFWV9WT0xVTUVVUCwJLyogNTYgU09OWVBJX0VWRU5UX1ZPTFVNRV9JTkNfUFJFU1NFRCAqLwogCUtFWV9WT0xVTUVET1dOLAkvKiA1NyBTT05ZUElfRVZFTlRfVk9MVU1FX0RFQ19QUkVTU0VEICovCisJS0VZX01FRElBLAkvKiA1OCBTT05ZUElfRVZFTlRfTUVESUFfUFJFU1NFRCAqLwogfTsKIAogLyogcmVsZWFzZSBidXR0b25zIGFmdGVyIGEgc2hvcnQgZGVsYXkgaWYgcHJlc3NlZCAqLwpAQCAtODkwLDYgKzg5Myw4IEBACiAJeyAweDBDLCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKIAl7IDB4OWYsIFNPTllQSV9FVkVOVF9DRF9FSkVDVF9QUkVTU0VEIH0sCiAJeyAweDFmLCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAweGExLCBTT05ZUElfRVZFTlRfTUVESUFfUFJFU1NFRCB9LAorCXsgMHgyMSwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAogCXsgMCwgMCB9LAogfTsKIApAQCAtOTYxLDcgKzk2Niw3IEBACiAJCQkJZWxzZQogCQkJCQlzb255X2xhcHRvcF9yZXBvcnRfaW5wdXRfZXZlbnQoZXYpOwogCQkJfQotCQl9IGVsc2UgaWYgKHNvbnlfZmluZF9zbmNfaGFuZGxlKDB4MTI0KSA9PSBldikgeworCQl9IGVsc2UgaWYgKHNvbnlfZmluZF9zbmNfaGFuZGxlKHNvbnlfcmZraWxsX2hhbmRsZSkgPT0gZXYpIHsKIAkJCXNvbnlfbmNfcmZraWxsX3VwZGF0ZSgpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xMDY3LDcgKzEwNzIsNyBAQAogCWlmICghYmxvY2tlZCkKIAkJYXJndW1lbnQgfD0gMHhmZjAwMDA7CiAKLQlyZXR1cm4gc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMjQsIGFyZ3VtZW50LCAmcmVzdWx0KTsKKwlyZXR1cm4gc29ueV9jYWxsX3NuY19oYW5kbGUoc29ueV9yZmtpbGxfaGFuZGxlLCBhcmd1bWVudCwgJnJlc3VsdCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmZraWxsX29wcyBzb255X3Jma2lsbF9vcHMgPSB7CkBAIC0xMTEwLDcgKzExMTUsNyBAQAogCWlmICghcmZrKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCAweDIwMCwgJnJlc3VsdCk7CisJc29ueV9jYWxsX3NuY19oYW5kbGUoc29ueV9yZmtpbGxfaGFuZGxlLCAweDIwMCwgJnJlc3VsdCk7CiAJaHdibG9jayA9ICEocmVzdWx0ICYgMHgxKTsKIAlyZmtpbGxfc2V0X2h3X3N0YXRlKHJmaywgaHdibG9jayk7CiAKQEAgLTExMjksNyArMTEzNCw3IEBACiAJaW50IHJlc3VsdDsKIAlib29sIGh3YmxvY2s7CiAKLQlzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgMHgyMDAsICZyZXN1bHQpOworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKHNvbnlfcmZraWxsX2hhbmRsZSwgMHgyMDAsICZyZXN1bHQpOwogCWh3YmxvY2sgPSAhKHJlc3VsdCAmIDB4MSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTl9TT05ZX1JGS0lMTDsgaSsrKSB7CkBAIC0xMTQ1LDM2ICsxMTUwLDc5IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCBhcmd1bWVudCwgJnJlc3VsdCk7CisJCXNvbnlfY2FsbF9zbmNfaGFuZGxlKHNvbnlfcmZraWxsX2hhbmRsZSwgYXJndW1lbnQsICZyZXN1bHQpOwogCQlyZmtpbGxfc2V0X3N0YXRlcyhzb255X3Jma2lsbF9kZXZpY2VzW2ldLAogCQkJCSAgIShyZXN1bHQgJiAweGYpLCBmYWxzZSk7CiAJfQogfQogCi1zdGF0aWMgaW50IHNvbnlfbmNfcmZraWxsX3NldHVwKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHZvaWQgc29ueV9uY19yZmtpbGxfc2V0dXAoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdCwgcmV0OworCWludCBvZmZzZXQ7CisJdTggZGV2X2NvZGUsIGk7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CisJdW5pb24gYWNwaV9vYmplY3QgKmRldmljZV9lbnVtOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAKLQlpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMjQpID09IC0xKQotCQlyZXR1cm4gLTE7CisJb2Zmc2V0ID0gc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMjQpOworCWlmIChvZmZzZXQgPT0gLTEpIHsKKwkJb2Zmc2V0ID0gc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMzUpOworCQlpZiAob2Zmc2V0ID09IC0xKQorCQkJcmV0dXJuOworCQllbHNlCisJCQlzb255X3Jma2lsbF9oYW5kbGUgPSAweDEzNTsKKwl9IGVsc2UKKwkJc29ueV9yZmtpbGxfaGFuZGxlID0gMHgxMjQ7CisJZHByaW50aygiRm91bmQgcmtmaWxsIGhhbmRsZTogMHglLjR4XG4iLCBzb255X3Jma2lsbF9oYW5kbGUpOwogCi0JcmV0ID0gc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMjQsIDB4YjAwLCAmcmVzdWx0KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gRFJWX1BGWAotCQkgICAgICAgIlVuYWJsZSB0byBlbnVtZXJhdGUgcmZraWxsIGRldmljZXM6ICV4XG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCS8qIG5lZWQgdG8gcmVhZCB0aGUgd2hvbGUgYnVmZmVyIHJldHVybmVkIGJ5IHRoZSBhY3BpIGNhbGwgdG8gU04wNgorCSAqIGhlcmUgb3RoZXJ3aXNlIHdlIG1heSBtaXNzIHNvbWUgZmVhdHVyZXMKKwkgKi8KKwlwYXJhbXMuY291bnQgPSAxOworCXBhcmFtcy5wb2ludGVyID0gJmluX29iajsKKwlpbl9vYmoudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX29iai5pbnRlZ2VyLnZhbHVlID0gb2Zmc2V0OworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjA2IiwgJnBhcmFtcywKKwkJCSZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlkcHJpbnRrKCJSYWRpbyBkZXZpY2UgZW51bWVyYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuOwogCX0KIAotCWlmIChyZXN1bHQgJiAweDEpCi0JCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9XSUZJKTsKLQlpZiAocmVzdWx0ICYgMHgyKQotCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfQkxVRVRPT1RIKTsKLQlpZiAocmVzdWx0ICYgMHgxYykKLQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX1dXQU4pOwotCWlmIChyZXN1bHQgJiAweDIwKQotCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfV0lNQVgpOworCWRldmljZV9lbnVtID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopIGJ1ZmZlci5wb2ludGVyOworCWlmICghZGV2aWNlX2VudW0gfHwgZGV2aWNlX2VudW0tPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgU04wNiByZXR1cm4gb2JqZWN0IDB4JS4yeFxuIiwKKwkJCQlkZXZpY2VfZW51bS0+dHlwZSk7CisJCWdvdG8gb3V0X25vX2VudW07CisJfQogCi0JcmV0dXJuIDA7CisJLyogdGhlIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aCBtYWdpYyBudW1iZXJzIGRlc2NyaWJpbmcgdGhlIGRldmljZXMKKwkgKiBhdmFpbGFibGUsIDB4ZmYgdGVybWluYXRlcyB0aGUgZW51bWVyYXRpb24KKwkgKi8KKwl3aGlsZSAoKGRldl9jb2RlID0gKihkZXZpY2VfZW51bS0+YnVmZmVyLnBvaW50ZXIgKyBpKSkgIT0gMHhmZiAmJgorCQkJaSA8IGRldmljZV9lbnVtLT5idWZmZXIubGVuZ3RoKSB7CisJCWkrKzsKKwkJZHByaW50aygiUmFkaW8gZGV2aWNlcywgbG9va2luZyBhdCAweCUuMnhcbiIsIGRldl9jb2RlKTsKKworCQlpZiAoZGV2X2NvZGUgPT0gMCAmJiAhc29ueV9yZmtpbGxfZGV2aWNlc1tTT05ZX1dJRkldKQorCQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX1dJRkkpOworCisJCWlmIChkZXZfY29kZSA9PSAweDEwICYmICFzb255X3Jma2lsbF9kZXZpY2VzW1NPTllfQkxVRVRPT1RIXSkKKwkJCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9CTFVFVE9PVEgpOworCisJCWlmICgoMHhmMCAmIGRldl9jb2RlKSA9PSAweDIwICYmCisJCQkJIXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9XV0FOXSkKKwkJCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9XV0FOKTsKKworCQlpZiAoZGV2X2NvZGUgPT0gMHgzMCAmJiAhc29ueV9yZmtpbGxfZGV2aWNlc1tTT05ZX1dJTUFYXSkKKwkJCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9XSU1BWCk7CisJfQorCitvdXRfbm9fZW51bToKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IHNvbnlfbmNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCmluZGV4IDQ0MTY2MDAuLmRkMzNiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKQEAgLTQ3LDIyICs0Nyw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoIndtaTpDMzY0QUM3MS0zNkRCLTQ5NUEtODQ5NC1CNDM5RDQ3MkE1MDUiKTsKIAotc3RhdGljIGludCB0YzExMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgdGMxMTAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCB0YzExMDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1zdGF0aWMgaW50IHRjMTEwMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGMxMTAwX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ0YzExMDAtd21pIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSB0YzExMDBfcHJvYmUsCi0JLnJlbW92ZSA9IHRjMTEwMF9yZW1vdmUsCi0JLnN1c3BlbmQgPSB0YzExMDBfc3VzcGVuZCwKLQkucmVzdW1lID0gdGMxMTAwX3Jlc3VtZSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0YzExMDBfZGV2aWNlOwogCiBzdHJ1Y3QgdGMxMTAwX2RhdGEgewpAQCAtMTgzLDUxICsxNjcsMzUgQEAKIHNob3dfc2V0X2Jvb2wod2lyZWxlc3MsIFRDMTEwMF9JTlNUQU5DRV9XSVJFTEVTUyk7CiBzaG93X3NldF9ib29sKGpvZ2RpYWwsIFRDMTEwMF9JTlNUQU5DRV9KT0dESUFMKTsKIAotc3RhdGljIHZvaWQgcmVtb3ZlX2ZzKHZvaWQpCi17Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ0YzExMDBfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl93aXJlbGVzcyk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ0YzExMDBfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9qb2dkaWFsKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0YzExMDBfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl93aXJlbGVzcy5hdHRyLAorCSZkZXZfYXR0cl9qb2dkaWFsLmF0dHIsCisJTlVMTAorfTsKIAotc3RhdGljIGludCBhZGRfZnModm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ0YzExMDBfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl93aXJlbGVzcyk7Ci0JaWYgKHJldCkKLQkJZ290byBhZGRfc3lzZnNfZXJyb3I7Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnRjMTEwMF9kZXZpY2UtPmRldiwgJmRldl9hdHRyX2pvZ2RpYWwpOwotCWlmIChyZXQpCi0JCWdvdG8gYWRkX3N5c2ZzX2Vycm9yOwotCi0JcmV0dXJuIHJldDsKLQotYWRkX3N5c2ZzX2Vycm9yOgotCXJlbW92ZV9mcygpOwotCXJldHVybiByZXQ7Ci19CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0YzExMDBfYXR0cmlidXRlX2dyb3VwID0geworCS5hdHRycwk9IHRjMTEwMF9hdHRyaWJ1dGVzLAorfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJCQlEcml2ZXIgTW9kZWwKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgdGMxMTAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IHRjMTEwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlyZXN1bHQgPSBhZGRfZnMoKTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldmljZS0+ZGV2LmtvYmosICZ0YzExMDBfYXR0cmlidXRlX2dyb3VwKTsKIH0KIAogCi1zdGF0aWMgaW50IHRjMTEwMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmV4aXQgdGMxMTAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0JcmVtb3ZlX2ZzKCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXZpY2UtPmRldi5rb2JqLCAmdGMxMTAwX2F0dHJpYnV0ZV9ncm91cCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YzExMDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdGMxMTAwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTIzOSwxMCArMjA3LDEwIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGMxMTAwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRjMTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTI1NCwzNCArMjIyLDYxIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0YzExMDBfcG1fb3BzID0geworCS5zdXNwZW5kCT0gdGMxMTAwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0YzExMDBfcmVzdW1lLAorCS5mcmVlemUJCT0gdGMxMTAwX3N1c3BlbmQsCisJLnJlc3RvcmUJPSB0YzExMDBfcmVzdW1lLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YzExMDBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRjMTEwMC13bWkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtID0gJnRjMTEwMF9wbV9vcHMsCisjZW5kaWYKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0YzExMDBfcmVtb3ZlKSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHRjMTEwMF9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdCA9IDA7CisJaW50IGVycm9yOwogCiAJaWYgKCF3bWlfaGFzX2d1aWQoR1VJRCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmVzdWx0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0YzExMDBfZHJpdmVyKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwotCiAJdGMxMTAwX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidGMxMTAwLXdtaSIsIC0xKTsKLQlwbGF0Zm9ybV9kZXZpY2VfYWRkKHRjMTEwMF9kZXZpY2UpOworCWlmICghdGMxMTAwX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnJvciA9IHBsYXRmb3JtX2RldmljZV9hZGQodGMxMTAwX2RldmljZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9kZXZpY2VfcHV0OworCisJZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnRjMTEwMF9kcml2ZXIsIHRjMTEwMF9wcm9iZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9kZXZpY2VfZGVsOwogCiAJcHJpbnRrKFRDMTEwMF9JTkZPICJIUCBDb21wYXEgVEMxMTAwIFRhYmxldCBXTUkgRXh0cmFzIGxvYWRlZFxuIik7CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmVzdWx0OworIGVycl9kZXZpY2VfZGVsOgorCXBsYXRmb3JtX2RldmljZV9kZWwodGMxMTAwX2RldmljZSk7CisgZXJyX2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dCh0YzExMDBfZGV2aWNlKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0YzExMDBfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RldmljZV9kZWwodGMxMTAwX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodGMxMTAwX2RldmljZSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRjMTEwMF9kcml2ZXIpOwotCi0JcHJpbnRrKFRDMTEwMF9JTkZPICJIUCBDb21wYXEgVEMxMTAwIFRhYmxldCBXTUkgRXh0cmFzIHVubG9hZGVkXG4iKTsKIH0KIAogbW9kdWxlX2luaXQodGMxMTAwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCA1MWMwYThiLi43N2JmNWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgpAQCAtMzU3LDYzICszNTgsNiBAQAogc3RhdGljIGludCBsYXN0X2tleV9ldmVudDsKIHN0YXRpYyBpbnQga2V5X2V2ZW50X3ZhbGlkOwogCi10eXBlZGVmIHN0cnVjdCBfUHJvY0l0ZW0gewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY2hhciAqKCpyZWFkX2Z1bmMpIChjaGFyICopOwotCXVuc2lnbmVkIGxvbmcgKCp3cml0ZV9mdW5jKSAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKLX0gUHJvY0l0ZW07Ci0KLS8qIHByb2MgZmlsZSBoYW5kbGVycwotICovCi0KLXN0YXRpYyBpbnQKLWRpc3BhdGNoX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgUHJvY0l0ZW0gKiBpdGVtKQotewotCWNoYXIgKnAgPSBwYWdlOwotCWludCBsZW47Ci0KLQlpZiAob2ZmID09IDApCi0JCXAgPSBpdGVtLT5yZWFkX2Z1bmMocCk7Ci0KLQkvKiBJU1NVRTogSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgY29kZSAqLwotCWxlbiA9IChwIC0gcGFnZSk7Ci0JaWYgKGxlbiA8PSBvZmYgKyBjb3VudCkKLQkJKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlsZW4gLT0gb2ZmOwotCWlmIChsZW4gPiBjb3VudCkKLQkJbGVuID0gY291bnQ7Ci0JaWYgKGxlbiA8IDApCi0JCWxlbiA9IDA7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludAotZGlzcGF0Y2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBQcm9jSXRlbSAqIGl0ZW0pCi17Ci0JaW50IHJlc3VsdDsKLQljaGFyICp0bXBfYnVmZmVyOwotCi0JLyogQXJnIGJ1ZmZlciBwb2ludHMgdG8gdXNlcnNwYWNlIG1lbW9yeSwgd2hpY2ggY2FuJ3QgYmUgYWNjZXNzZWQKLQkgKiBkaXJlY3RseS4gIFNpbmNlIHdlJ3JlIG1ha2luZyBhIGNvcHksIHplcm8tdGVybWluYXRlIHRoZQotCSAqIGRlc3RpbmF0aW9uIHNvIHRoYXQgc3NjYW5mIGNhbiBiZSB1c2VkIG9uIGl0IHNhZmVseS4KLQkgKi8KLQl0bXBfYnVmZmVyID0ga21hbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCWlmICghdG1wX2J1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIodG1wX2J1ZmZlciwgYnVmZmVyLCBjb3VudCkpIHsKLQkJcmVzdWx0ID0gLUVGQVVMVDsKLQl9IGVsc2UgewotCQl0bXBfYnVmZmVyW2NvdW50XSA9IDA7Ci0JCXJlc3VsdCA9IGl0ZW0tPndyaXRlX2Z1bmModG1wX2J1ZmZlciwgY291bnQpOwotCX0KLQlrZnJlZSh0bXBfYnVmZmVyKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgaW50IGdldF9sY2Qoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewogCXUzMiBoY2lfcmVzdWx0OwpAQCAtNDI2LDE5ICszNzAsMjQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKLXN0YXRpYyBjaGFyICpyZWFkX2xjZChjaGFyICpwKQorc3RhdGljIGludCBsY2RfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlpbnQgdmFsdWUgPSBnZXRfbGNkKE5VTEwpOwogCiAJaWYgKHZhbHVlID49IDApIHsKLQkJcCArPSBzcHJpbnRmKHAsICJicmlnaHRuZXNzOiAgICAgICAgICAgICAgJWRcbiIsIHZhbHVlKTsKLQkJcCArPSBzcHJpbnRmKHAsICJicmlnaHRuZXNzX2xldmVsczogICAgICAgJWRcbiIsCisJCXNlcV9wcmludGYobSwgImJyaWdodG5lc3M6ICAgICAgICAgICAgICAlZFxuIiwgdmFsdWUpOworCQlzZXFfcHJpbnRmKG0sICJicmlnaHRuZXNzX2xldmVsczogICAgICAgJWRcbiIsCiAJCQkgICAgIEhDSV9MQ0RfQlJJR0hUTkVTU19MRVZFTFMpOwogCX0gZWxzZSB7CiAJCXByaW50ayhNWV9FUlIgIkVycm9yIHJlYWRpbmcgTENEIGJyaWdodG5lc3NcbiIpOwogCX0KIAotCXJldHVybiBwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxjZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGxjZF9wcm9jX3Nob3csIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHNldF9sY2QoaW50IHZhbHVlKQpAQCAtNDU4LDEyICs0MDcsMjAgQEAKIAlyZXR1cm4gc2V0X2xjZChiZC0+cHJvcHMuYnJpZ2h0bmVzcyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX2xjZChjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCitzdGF0aWMgc3NpemVfdCBsY2RfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CisJY2hhciBjbWRbNDJdOworCXNpemVfdCBsZW47CiAJaW50IHZhbHVlOwogCWludCByZXQ7CiAKLQlpZiAoc3NjYW5mKGJ1ZmZlciwgIiBicmlnaHRuZXNzIDogJWkiLCAmdmFsdWUpID09IDEgJiYKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihjbWQpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGNtZCwgYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljbWRbbGVuXSA9ICdcMCc7CisKKwlpZiAoc3NjYW5mKGNtZCwgIiBicmlnaHRuZXNzIDogJWkiLCAmdmFsdWUpID09IDEgJiYKIAkgICAgdmFsdWUgPj0gMCAmJiB2YWx1ZSA8IEhDSV9MQ0RfQlJJR0hUTkVTU19MRVZFTFMpIHsKIAkJcmV0ID0gc2V0X2xjZCh2YWx1ZSk7CiAJCWlmIChyZXQgPT0gMCkKQEAgLTQ3NCw3ICs0MzEsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY2hhciAqcmVhZF92aWRlbyhjaGFyICpwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbGNkX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBsY2RfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAl1MzIgaGNpX3Jlc3VsdDsKIAl1MzIgdmFsdWU7CkBAIC00ODQsMTggKzQ1MCwyNSBAQAogCQlpbnQgaXNfbGNkID0gKHZhbHVlICYgSENJX1ZJREVPX09VVF9MQ0QpID8gMSA6IDA7CiAJCWludCBpc19jcnQgPSAodmFsdWUgJiBIQ0lfVklERU9fT1VUX0NSVCkgPyAxIDogMDsKIAkJaW50IGlzX3R2ID0gKHZhbHVlICYgSENJX1ZJREVPX09VVF9UVikgPyAxIDogMDsKLQkJcCArPSBzcHJpbnRmKHAsICJsY2Rfb3V0OiAgICAgICAgICAgICAgICAgJWRcbiIsIGlzX2xjZCk7Ci0JCXAgKz0gc3ByaW50ZihwLCAiY3J0X291dDogICAgICAgICAgICAgICAgICVkXG4iLCBpc19jcnQpOwotCQlwICs9IHNwcmludGYocCwgInR2X291dDogICAgICAgICAgICAgICAgICAlZFxuIiwgaXNfdHYpOworCQlzZXFfcHJpbnRmKG0sICJsY2Rfb3V0OiAgICAgICAgICAgICAgICAgJWRcbiIsIGlzX2xjZCk7CisJCXNlcV9wcmludGYobSwgImNydF9vdXQ6ICAgICAgICAgICAgICAgICAlZFxuIiwgaXNfY3J0KTsKKwkJc2VxX3ByaW50ZihtLCAidHZfb3V0OiAgICAgICAgICAgICAgICAgICVkXG4iLCBpc190dik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKE1ZX0VSUiAiRXJyb3IgcmVhZGluZyB2aWRlbyBvdXQgc3RhdHVzXG4iKTsKIAl9CiAKLQlyZXR1cm4gcDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfdmlkZW8oY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KQorc3RhdGljIGludCB2aWRlb19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZpZGVvX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwljaGFyICpjbWQsICpidWZmZXI7CiAJaW50IHZhbHVlOwogCWludCByZW1haW4gPSBjb3VudDsKIAlpbnQgbGNkX291dCA9IC0xOwpAQCAtNTA0LDYgKzQ3NywxNyBAQAogCXUzMiBoY2lfcmVzdWx0OwogCXUzMiB2aWRlb19vdXQ7CiAKKwljbWQgPSBrbWFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChjb3B5X2Zyb21fdXNlcihjbWQsIGJ1ZiwgY291bnQpKSB7CisJCWtmcmVlKGNtZCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwljbWRbY291bnRdID0gJ1wwJzsKKworCWJ1ZmZlciA9IGNtZDsKKwogCS8qIHNjYW4gZXhwcmVzc2lvbi4gIE11bHRpcGxlIGV4cHJlc3Npb25zIG1heSBiZSBkZWxpbWl0ZWQgd2l0aCA7CiAJICoKIAkgKiAgTk9URTogdG8ga2VlcCBzY2FubmluZyBzaW1wbGUsIGludmFsaWQgZmllbGRzIGFyZSBpZ25vcmVkCkBAIC01MjMsNiArNTA3LDggQEAKIAkJd2hpbGUgKHJlbWFpbiAmJiAqKGJ1ZmZlciAtIDEpICE9ICc7Jyk7CiAJfQogCisJa2ZyZWUoY21kKTsKKwogCWhjaV9yZWFkMShIQ0lfVklERU9fT1VULCAmdmlkZW9fb3V0LCAmaGNpX3Jlc3VsdCk7CiAJaWYgKGhjaV9yZXN1bHQgPT0gSENJX1NVQ0NFU1MpIHsKIAkJdW5zaWduZWQgaW50IG5ld192aWRlb19vdXQgPSB2aWRlb19vdXQ7CkBAIC01NDMsMjggKzUyOSw1MCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGNoYXIgKnJlYWRfZmFuKGNoYXIgKnApCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aWRlb19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZpZGVvX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSB2aWRlb19wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIGludCBmYW5fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAl1MzIgaGNpX3Jlc3VsdDsKIAl1MzIgdmFsdWU7CiAKIAloY2lfcmVhZDEoSENJX0ZBTiwgJnZhbHVlLCAmaGNpX3Jlc3VsdCk7CiAJaWYgKGhjaV9yZXN1bHQgPT0gSENJX1NVQ0NFU1MpIHsKLQkJcCArPSBzcHJpbnRmKHAsICJydW5uaW5nOiAgICAgICAgICAgICAgICAgJWRcbiIsICh2YWx1ZSA+IDApKTsKLQkJcCArPSBzcHJpbnRmKHAsICJmb3JjZV9vbjogICAgICAgICAgICAgICAgJWRcbiIsIGZvcmNlX2Zhbik7CisJCXNlcV9wcmludGYobSwgInJ1bm5pbmc6ICAgICAgICAgICAgICAgICAlZFxuIiwgKHZhbHVlID4gMCkpOworCQlzZXFfcHJpbnRmKG0sICJmb3JjZV9vbjogICAgICAgICAgICAgICAgJWRcbiIsIGZvcmNlX2Zhbik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKE1ZX0VSUiAiRXJyb3IgcmVhZGluZyBmYW4gc3RhdHVzXG4iKTsKIAl9CiAKLQlyZXR1cm4gcDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfZmFuKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyBpbnQgZmFuX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZmFuX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZhbl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwljaGFyIGNtZFs0Ml07CisJc2l6ZV90IGxlbjsKIAlpbnQgdmFsdWU7CiAJdTMyIGhjaV9yZXN1bHQ7CiAKLQlpZiAoc3NjYW5mKGJ1ZmZlciwgIiBmb3JjZV9vbiA6ICVpIiwgJnZhbHVlKSA9PSAxICYmCisJbGVuID0gbWluKGNvdW50LCBzaXplb2YoY21kKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihjbWQsIGJ1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJY21kW2xlbl0gPSAnXDAnOworCisJaWYgKHNzY2FuZihjbWQsICIgZm9yY2Vfb24gOiAlaSIsICZ2YWx1ZSkgPT0gMSAmJgogCSAgICB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDEpIHsKIAkJaGNpX3dyaXRlMShIQ0lfRkFOLCB2YWx1ZSwgJmhjaV9yZXN1bHQpOwogCQlpZiAoaGNpX3Jlc3VsdCAhPSBIQ0lfU1VDQ0VTUykKQEAgLTU3OCw3ICs1ODYsMTYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBjaGFyICpyZWFkX2tleXMoY2hhciAqcCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZhbl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGZhbl9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZmFuX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgaW50IGtleXNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAl1MzIgaGNpX3Jlc3VsdDsKIAl1MzIgdmFsdWU7CkBAIC02MDIsMTggKzYxOSwzMCBAQAogCQl9CiAJfQogCi0JcCArPSBzcHJpbnRmKHAsICJob3RrZXlfcmVhZHk6ICAgICAgICAgICAgJWRcbiIsIGtleV9ldmVudF92YWxpZCk7Ci0JcCArPSBzcHJpbnRmKHAsICJob3RrZXk6ICAgICAgICAgICAgICAgICAgMHglMDR4XG4iLCBsYXN0X2tleV9ldmVudCk7Ci0KLSAgICAgIGVuZDoKLQlyZXR1cm4gcDsKKwlzZXFfcHJpbnRmKG0sICJob3RrZXlfcmVhZHk6ICAgICAgICAgICAgJWRcbiIsIGtleV9ldmVudF92YWxpZCk7CisJc2VxX3ByaW50ZihtLCAiaG90a2V5OiAgICAgICAgICAgICAgICAgIDB4JTA0eFxuIiwgbGFzdF9rZXlfZXZlbnQpOworZW5kOgorCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9rZXlzKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyBpbnQga2V5c19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGtleXNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3Qga2V5c19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJY2hhciBjbWRbNDJdOworCXNpemVfdCBsZW47CiAJaW50IHZhbHVlOwogCi0JaWYgKHNzY2FuZihidWZmZXIsICIgaG90a2V5X3JlYWR5IDogJWkiLCAmdmFsdWUpID09IDEgJiYgdmFsdWUgPT0gMCkgeworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGNtZCkgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoY21kLCBidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWNtZFtsZW5dID0gJ1wwJzsKKworCWlmIChzc2NhbmYoY21kLCAiIGhvdGtleV9yZWFkeSA6ICVpIiwgJnZhbHVlKSA9PSAxICYmIHZhbHVlID09IDApIHsKIAkJa2V5X2V2ZW50X3ZhbGlkID0gMDsKIAl9IGVsc2UgewogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYyMiw1MiArNjUxLDU4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgY2hhciAqcmVhZF92ZXJzaW9uKGNoYXIgKnApCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrZXlzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0ga2V5c19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0ga2V5c19wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIGludCB2ZXJzaW9uX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcCArPSBzcHJpbnRmKHAsICJkcml2ZXI6ICAgICAgICAgICAgICAgICAgJXNcbiIsIFRPU0hJQkFfQUNQSV9WRVJTSU9OKTsKLQlwICs9IHNwcmludGYocCwgInByb2NfaW50ZXJmYWNlOiAgICAgICAgICAlZFxuIiwKLQkJICAgICBQUk9DX0lOVEVSRkFDRV9WRVJTSU9OKTsKLQlyZXR1cm4gcDsKKwlzZXFfcHJpbnRmKG0sICJkcml2ZXI6ICAgICAgICAgICAgICAgICAgJXNcbiIsIFRPU0hJQkFfQUNQSV9WRVJTSU9OKTsKKwlzZXFfcHJpbnRmKG0sICJwcm9jX2ludGVyZmFjZTogICAgICAgICAgJWRcbiIsIFBST0NfSU5URVJGQUNFX1ZFUlNJT04pOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZlcnNpb25fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB2ZXJzaW9uX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB2ZXJzaW9uX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyogcHJvYyBhbmQgbW9kdWxlIGluaXQKICAqLwogCiAjZGVmaW5lIFBST0NfVE9TSElCQQkJInRvc2hpYmEiCiAKLXN0YXRpYyBQcm9jSXRlbSBwcm9jX2l0ZW1zW10gPSB7Ci0JeyJsY2QiLCByZWFkX2xjZCwgd3JpdGVfbGNkfSwKLQl7InZpZGVvIiwgcmVhZF92aWRlbywgd3JpdGVfdmlkZW99LAotCXsiZmFuIiwgcmVhZF9mYW4sIHdyaXRlX2Zhbn0sCi0JeyJrZXlzIiwgcmVhZF9rZXlzLCB3cml0ZV9rZXlzfSwKLQl7InZlcnNpb24iLCByZWFkX3ZlcnNpb24sIE5VTEx9LAotCXtOVUxMfQotfTsKLQogc3RhdGljIGFjcGlfc3RhdHVzIF9faW5pdCBhZGRfZGV2aWNlKHZvaWQpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwotCVByb2NJdGVtICppdGVtOwotCi0JZm9yIChpdGVtID0gcHJvY19pdGVtczsgaXRlbS0+bmFtZTsgKytpdGVtKSB7Ci0JCXByb2MgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KGl0ZW0tPm5hbWUsCi0JCQkJCSAgICAgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCQkJICAgICAgdG9zaGliYV9wcm9jX2RpciwKLQkJCQkJICAgICAgKHJlYWRfcHJvY190ICopIGRpc3BhdGNoX3JlYWQsCi0JCQkJCSAgICAgIGl0ZW0pOwotCQlpZiAocHJvYyAmJiBpdGVtLT53cml0ZV9mdW5jKQotCQkJcHJvYy0+d3JpdGVfcHJvYyA9ICh3cml0ZV9wcm9jX3QgKikgZGlzcGF0Y2hfd3JpdGU7Ci0JfQorCXByb2NfY3JlYXRlKCJsY2QiLCBTX0lSVUdPIHwgU19JV1VTUiwgdG9zaGliYV9wcm9jX2RpciwgJmxjZF9wcm9jX2ZvcHMpOworCXByb2NfY3JlYXRlKCJ2aWRlbyIsIFNfSVJVR08gfCBTX0lXVVNSLCB0b3NoaWJhX3Byb2NfZGlyLCAmdmlkZW9fcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgiZmFuIiwgU19JUlVHTyB8IFNfSVdVU1IsIHRvc2hpYmFfcHJvY19kaXIsICZmYW5fcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgia2V5cyIsIFNfSVJVR08gfCBTX0lXVVNSLCB0b3NoaWJhX3Byb2NfZGlyLCAma2V5c19wcm9jX2ZvcHMpOworCXByb2NfY3JlYXRlKCJ2ZXJzaW9uIiwgU19JUlVHTywgdG9zaGliYV9wcm9jX2RpciwgJnZlcnNpb25fcHJvY19mb3BzKTsKIAogCXJldHVybiBBRV9PSzsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzIHJlbW92ZV9kZXZpY2Uodm9pZCkKIHsKLQlQcm9jSXRlbSAqaXRlbTsKLQotCWZvciAoaXRlbSA9IHByb2NfaXRlbXM7IGl0ZW0tPm5hbWU7ICsraXRlbSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoaXRlbS0+bmFtZSwgdG9zaGliYV9wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoImxjZCIsIHRvc2hpYmFfcHJvY19kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJ2aWRlbyIsIHRvc2hpYmFfcHJvY19kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJmYW4iLCB0b3NoaWJhX3Byb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgia2V5cyIsIHRvc2hpYmFfcHJvY19kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJ2ZXJzaW9uIiwgdG9zaGliYV9wcm9jX2Rpcik7CiAJcmV0dXJuIEFFX09LOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCmluZGV4IGU0MjVhODYuLjlmOTNkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCkBAIC01NDAsOCArNTQwLDggQEAKIC8qKgogICogd21pX2dldF9ldmVudF9kYXRhIC0gR2V0IFdNSSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiBldmVudAogICoKLSAqIEBldmVudCAtIEV2ZW50IHRvIGZpbmQKLSAqICZvdXQgLSBCdWZmZXIgdG8gaG9sZCBldmVudCBkYXRhCisgKiBAZXZlbnQ6IEV2ZW50IHRvIGZpbmQKKyAqIEBvdXQ6IEJ1ZmZlciB0byBob2xkIGV2ZW50IGRhdGEuIG91dC0+cG9pbnRlciBzaG91bGQgYmUgZnJlZWQgd2l0aCBrZnJlZSgpCiAgKgogICogUmV0dXJucyBleHRyYSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiBldmVudCBpbiBXTUkuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggNjhjN2Y2Yy4uMzdmMGRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTIyMiw5ICsyMjIsOSBAQAogCQkgICBTZXQgU0NQNk1EMSwwID0gezAxfSAob3V0cHV0KSAgKi8KIAkJX19yYXdfd3JpdGV3KChkYXRhICYgMHgwZmNmKSB8IDB4MTAwMCwgU0NQQ1IpOwogCi0JCWRhdGEgPSBjdHJsX2luYihTQ1BEUik7CisJCWRhdGEgPSBfX3Jhd19yZWFkYihTQ1BEUik7CiAJCS8qIFNldCAvUlRTMiAoYml0NikgPSAwICovCi0JCWN0cmxfb3V0YihkYXRhICYgMHhiZiwgU0NQRFIpOworCQlfX3Jhd193cml0ZWIoZGF0YSAmIDB4YmYsIFNDUERSKTsKIAl9CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCkBAIC04OTcsMTEgKzg5NywyMSBAQAogc3RhdGljIHZvaWQgc2NpX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKIAkJCSAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzLCBiYXVkLCBzbXJfdmFsOworCXVuc2lnbmVkIGludCBzdGF0dXMsIGJhdWQsIHNtcl92YWwsIG1heF9iYXVkOwogCWludCB0ID0gLTE7CiAKLQliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsay8xNik7Ci0JaWYgKGxpa2VseShiYXVkKSkKKwkvKgorCSAqIGVhcmx5cHJpbnRrIGNvbWVzIGhlcmUgZWFybHkgb24gd2l0aCBwb3J0LT51YXJ0Y2xrIHNldCB0byB6ZXJvLgorCSAqIHRoZSBjbG9jayBmcmFtZXdvcmsgaXMgbm90IHVwIGFuZCBydW5uaW5nIGF0IHRoaXMgcG9pbnQgc28gaGVyZQorCSAqIHdlIGFzc3VtZSB0aGF0IDExNTIwMCBpcyB0aGUgbWF4aW11bSBiYXVkIHJhdGUuIHBsZWFzZSBub3RlIHRoYXQKKwkgKiB0aGUgYmF1ZCByYXRlIGlzIG5vdCBwcm9ncmFtbWVkIGR1cmluZyBlYXJseXByaW50ayAtIGl0IGlzIGFzc3VtZWQKKwkgKiB0aGF0IHRoZSBwcmV2aW91cyBib290IGxvYWRlciBoYXMgZW5hYmxlZCByZXF1aXJlZCBjbG9ja3MgYW5kCisJICogc2V0dXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IgaGFyZHdhcmUgZm9yIHVzIGFscmVhZHkuCisJICovCisJbWF4X2JhdWQgPSBwb3J0LT51YXJ0Y2xrID8gcG9ydC0+dWFydGNsayAvIDE2IDogMTE1MjAwOworCisJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIG1heF9iYXVkKTsKKwlpZiAobGlrZWx5KGJhdWQgJiYgcG9ydC0+dWFydGNsaykpCiAJCXQgPSBTQ0JSUl9WQUxVRShiYXVkLCBwb3J0LT51YXJ0Y2xrKTsKIAogCWRvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggYTMyMDk0ZWUuLjBlZmNkZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtNTE3LDIwICs1MTcsMjAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmZmZTgwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0MDAwMTUwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQwMDAxNDApCi0JCXJldHVybiBjdHJsX2luYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gU0NJRjApCi0JCXJldHVybiBjdHJsX2luYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gU0NJRjIpCi0JCXJldHVybiBjdHJsX2luYihTQ1BEUikmMHgxMCA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgxMCA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMikKQEAgLTU1Nyw2OCArNTU3LDY4IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjEpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFIxKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlODAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmU4MDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpJjB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU0YjAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGMwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTRkMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYxMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMzAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDUERSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjAgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjAgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gY3RybF9pbmIoUFNEUikgJiAweDAyID8gMSA6IDA7IC8qIFNDSUYwICovCisJCXJldHVybiBfX3Jhd19yZWFkYihQU0RSKSAmIDB4MDIgPyAxIDogMDsgLyogU0NJRjAgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gY3RybF9pbmIoUEFEUikgJiAweDQwID8gMSA6IDA7IC8qIFNDSUYxICovCisJCXJldHVybiBfX3Jhd19yZWFkYihQQURSKSAmIDB4NDAgPyAxIDogMDsgLyogU0NJRjEgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTIwMDAwKQotCQlyZXR1cm4gY3RybF9pbmIoUFdEUikgJiAweDA0ID8gMSA6IDA7IC8qIFNDSUYyICovCisJCXJldHVybiBfX3Jhd19yZWFkYihQV0RSKSAmIDB4MDQgPyAxIDogMDsgLyogU0NJRjIgKi8KIAogCXJldHVybiAxOwogfQpAQCAtNjI2LDE3ICs2MjYsMTcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKICAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIoU0NTUFRSMCkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjAgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMCkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjAgKi8KICAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIoU0NTUFRSMSkgJiAweDAwMjAgPyAxIDogMDsgLyogU0NJRjEgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMSkgJiAweDAwMjAgPyAxIDogMDsgLyogU0NJRjEgKi8KICAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjIgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjIgKi8KICAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGUzMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjMgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjMgKi8KICAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGU0MDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjQgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjQgKi8KICAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGU1MDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIoU0NTUFRSNSkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSNSkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjUgKi8KICAgICAgICAgcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCkBAIC02NDUsOSArNjQ1LDkgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYpCi0JCXJldHVybiBjdHJsX2ludygocG9ydC0+bWFwYmFzZSArIFNDRlNSKSkgICYgU0NJRl9CUksgPyAxIDogMDsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KChwb3J0LT5tYXBiYXNlICsgU0NGU1IpKSAgJiBTQ0lGX0JSSyA/IDEgOiAwOwogCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEpCi0JCXJldHVybiBjdHJsX2ludygocG9ydC0+bWFwYmFzZSArIFNDQVNTUikpICYgU0NJRl9CUksgPyAxIDogMDsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KChwb3J0LT5tYXBiYXNlICsgU0NBU1NSKSkgJiBTQ0lGX0JSSyA/IDEgOiAwOwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMykKQEAgLTY2NSwxMSArNjY1LDExIEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTA4MDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGL0lSREEgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYvSVJEQSAqLwogCiAJcmV0dXJuIDE7CiB9CkBAIC02NzcsMjAgKzY3NywyMCBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjMwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyNDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTI1MDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXApAQCAtNjk4LDE3ICs2OTgsMTcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWEwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYjAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVjMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWQwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFI0KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFI0KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVmMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjUpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjUpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkgfHwgXApAQCAtNzE4LDIyICs3MTgsMjIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU4MDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTg4MDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlOTAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU5ODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVBMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUE4MDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQjAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVCODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogI2VuZGlmCiAJcmV0dXJuIDE7CiB9CkBAIC03NDEsMjQgKzc0MSwyNCBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQxMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzMwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM1MDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzYwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCmluZGV4IDA5M2Y1N2EuLjk0ZWI4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC04Nyw4ICs4Nyw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2RyZWFtL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIgpAQCAtMTQ1LDUgKzE0Myw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL25ldHdhdmUvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZyIKKwogZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCAwNjk4NjRmLi5iNWU2N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0yNiw3ICsyNiw2IEBACiBvYmotJChDT05GSUdfSU5QVVRfTUlNSU8pCSs9IG1pbWlvLwogb2JqLSQoQ09ORklHX1RSQU5aUE9SVCkJCSs9IGZyb250aWVyLwogb2JqLSQoQ09ORklHX0RSRUFNKQkJKz0gZHJlYW0vCi1vYmotJChDT05GSUdfRFNUKQkJKz0gZHN0Lwogb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkJKz0gcG9obWVsZnMvCiBvYmotJChDT05GSUdfQjNERkcpCQkrPSBiM2RmZy8KIG9iai0kKENPTkZJR19JREVfUEhJU09OKQkrPSBwaGlzb24vCkBAIC01MywzICs1Miw0IEBACiBvYmotJChDT05GSUdfV0FWRUxBTikJCSs9IHdhdmVsYW4vCiBvYmotJChDT05GSUdfUENNQ0lBX1dBVkVMQU4pCSs9IHdhdmVsYW4vCiBvYmotJChDT05GSUdfUENNQ0lBX05FVFdBVkUpCSs9IG5ldHdhdmUvCitvYmotJChDT05GSUdfRkJfU003WFgpCQkrPSBzbTd4eC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCmluZGV4IDc2MzJmNTcuLjFkNzRkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogY29uZmlnIEJBVE1BTl9BRFYKIAl0cmlzdGF0ZSAiQi5BLlQuTS5BLk4uIEFkdmFuY2VkIE1lc2hpbmcgUHJvdG9jb2wiCisJZGVwZW5kcyBvbiBQUk9DX0ZTICYmIFBBQ0tFVAogICAgICAgICBkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYwppbmRleCBkNzI0Nzk4Li5lYjYxNzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCkBAIC0zNjMsOCArMzYzLDEwIEBACiAJCXJldHVybjsKIAogCWZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiA9IGttYWxsb2MocGFja2V0X2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYpCisJaWYgKCFmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYpIHsKKwkJa2ZyZWUoZm9yd19wYWNrZXQpOwogCQlyZXR1cm47CisJfQogCiAJZm9yd19wYWNrZXQtPnBhY2tldF9sZW4gPSBwYWNrZXRfbGVuOwogCW1lbWNweShmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYsIHBhY2tldF9idWZmLCBmb3J3X3BhY2tldC0+cGFja2V0X2xlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaAppbmRleCBjY2M1Y2RjLi5iNTU5YTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAjZGVmaW5lIENPTUVESV9DQl9FT1MJCTEJLyogZW5kIG9mIHNjYW4gKi8KICNkZWZpbmUgQ09NRURJX0NCX0VPQQkJMgkvKiBlbmQgb2YgYWNxdWlzaXRpb24gKi8KLSNkZWZpbmUgQ09NRURJX0NCX0JMT0NLCQk0CS8qIERFUFJFQ0FURUQ6IGNvbnZlbmllbnQgYmxvY2sgc2l6ZSAqLworI2RlZmluZSBDT01FRElfQ0JfQkxPQ0sJCTQJLyogZGF0YSBoYXMgYXJyaXZlZDogd2FrZXMgdXAgcmVhZCgpIC8gd3JpdGUoKSAqLwogI2RlZmluZSBDT01FRElfQ0JfRU9CVUYJCTgJLyogREVQUkVDQVRFRDogZW5kIG9mIGJ1ZmZlciAqLwogI2RlZmluZSBDT01FRElfQ0JfRVJST1IJCTE2CS8qIGNhcmQgZXJyb3IgZHVyaW5nIGFjcXVpc2l0aW9uICovCiAjZGVmaW5lIENPTUVESV9DQl9PVkVSRkxPVwkzMgkvKiBidWZmZXIgb3ZlcmZsb3cvdW5kZXJmbG93ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwppbmRleCAwZDJjMmViMjMuLmJkMzk3ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwpAQCAtODQ5LDggKzg0OSwxMSBAQAogCX0KIAogCWRldnByaXYtPnBjaV9lbmFibGVkID0gMTsKLQlkZXZwcml2LT5pb2Jhc2UgPQotCSAgICBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwgc2l6ZW9mKHN0cnVjdCBqcjNfdCkpOworCWRldnByaXYtPmlvYmFzZSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGNhcmQsIDApLAorCQkJb2Zmc2V0b2Yoc3RydWN0IGpyM190LCBjaGFubmVsW2RldnByaXYtPm5fY2hhbm5lbHNdKSk7CisJaWYgKCFkZXZwcml2LT5pb2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmVzdWx0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGRldnByaXYtPm5fY2hhbm5lbHMpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCAwNmMwMjA0Ni4uOWExYjU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwpAQCAtMSw0ICsxLDQgQEAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi40IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlN0aXJsaW5nL0lUTCBVU0ItRFVYIC0tIEJlcm5kLlBvcnJAZjJzLmNvbSIKIC8qCkBAIC04MSw2ICs4MSw4IEBACiAgKiAyLjE6ICBjaGFuZ2VkIFBXTSBBUEkKICAqIDIuMjogIGFkZGVkIGZpcm13YXJlIGtlcm5lbCByZXF1ZXN0IHRvIGZpeCBhbiB1ZGV2IHByb2JsZW0KICAqIDIuMzogIGNvcnJlY3RlZCBhIGJ1ZyBpbiBidWxrIHRpbWVvdXRzIHdoaWNoIHdlcmUgZmFyIHRvbyBzaG9ydAorICogMi40OiAgZml4ZWQgYSBidWcgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8gaGFuZyB3aGVuIGl0IHJhbiBvdXQgb2YgZGF0YS4KKyAqICAgICAgIFRoYW5rcyB0byBKYW4tTWF0dGhpYXMgQnJhdW4gYW5kIElhbiB0byBzcG90IHRoZSBidWcgYW5kIGZpeCBpdC4KICAqCiAgKi8KIApAQCAtNTMyLDYgKzUzNCw3IEBACiAJCX0KIAl9CiAJLyogdGVsbCBjb21lZGkgdGhhdCBkYXRhIGlzIHRoZXJlICovCisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOwogCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eHN1Yi0+Y29tZWRpZGV2LCBzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDhkMzQyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLWNvbmZpZyBEU1QKLQl0cmlzdGF0ZSAiRGlzdHJpYnV0ZWQgc3RvcmFnZSIKLQlkZXBlbmRzIG9uIE5FVCAmJiBDUllQVE8gJiYgU1lTRlMgJiYgQkxLX0RFVgotCXNlbGVjdCBDT05ORUNUT1IKLQktLS1oZWxwLS0tCi0JRFNUIGlzIGEgbmV0d29yayBibG9jayBkZXZpY2Ugc3RvcmFnZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb3JnYW5pemUKLQlleHBvcnRlZCBzdG9yYWdlIG9uIHRoZSByZW1vdGUgbm9kZXMgaW50byB0aGUgbG9jYWwgYmxvY2sgZGV2aWNlLgotCi0JRFNUIHdvcmtzIG9uIHRvcCBvZiBhbnkgbmV0d29yayBtZWRpYSBhbmQgcHJvdG9jb2w7IGl0IGlzIGp1c3QgYSBtYXR0ZXIKLQlvZiBjb25maWd1cmF0aW9uIHV0aWxpdHkgdG8gdW5kZXJzdGFuZCB0aGUgY29ycmVjdCBhZGRyZXNzZXMuIFRoZSBtb3N0Ci0JY29tbW9uIGV4YW1wbGUgaXMgVENQIG92ZXIgSVAsIHdoaWNoIGFsbG93cyB0byBwYXNzIHRocm91Z2ggZmlyZXdhbGxzIGFuZAotCWNyZWF0ZSByZW1vdGUgYmFja3VwIHN0b3JhZ2UgaW4gYSBkaWZmZXJlbnQgZGF0YWNlbnRlci4gRFNUIHJlcXVpcmVzCi0Jc2luZ2xlIHBvcnQgdG8gYmUgZW5hYmxlZCBvbiB0aGUgZXhwb3J0aW5nIG5vZGUgYW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zCi0Jb24gdGhlIGxvY2FsIG5vZGUuCi0KLQlEU1Qgd29ya3Mgd2l0aCBpbi1rZXJuZWwgY2xpZW50IGFuZCBzZXJ2ZXIsIHdoaWNoIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5Ci0JZWxpbWluYXRpbmcgdW5uZWRlZCBkYXRhIGNvcGllcyBhbmQgYnkgbm90IGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbgotCW9mIHRoZSBleHRlcm5hbCBJTyBjb21wb25lbnRzLiBJdCByZXF1aXJlcyB1c2Vyc3BhY2UgY29uZmlndXJhdGlvbiB1dGlsaXR5Ci0JdGhvdWdoLgotCi0JRFNUIHVzZXMgdHJhbnNhY3Rpb24gbW9kZWwsIHdoZW4gZWFjaCBzdG9yZSBoYXMgdG8gYmUgZXhwbGljaXRseSBhY2tlZAotCWZyb20gdGhlIHJlbW90ZSBub2RlIHRvIGJlIGNvbnNpZGVyZWQgYXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uIFRoZXJlCi0JbWF5IGJlIGxvdHMgb2YgaW4tZmxpZ2h0IHRyYW5zYWN0aW9ucy4gV2hlbiByZW1vdGUgaG9zdCBkb2VzIG5vdCBhY2sKLQl0aGUgdHJhbnNhY3Rpb24gaXQgd2lsbCBiZSByZXNlbnQgcHJlZGVmaW5lZCBudW1iZXIgb2YgdGltZXMgd2l0aCBzcGVjaWZpZWQKLQl0aW1lb3V0cyBiZXR3ZWVuIHRoZW0uIEFsbCB0aG9zZSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmFibGUuIFRyYW5zYWN0aW9ucwotCWFyZSBtYXJrZWQgYXMgZmFpbGVkIGFmdGVyIGFsbCByZXNlbmRzIGNvbXBsZXRlIHVuc3VjY2Vzc2Z1bGx5OyBoYXZpbmcKLQlsb25nIGVub3VnaCByZXNlbmQgdGltZW91dCBhbmQvb3IgbGFyZ2UgbnVtYmVyIG9mIHJlc2VuZHMgYWxsb3dzIG5vdCB0bwotCXJldHVybiBlcnJvciB0byB0aGUgaGlnaGVyIChGUyB1c3VhbGx5KSBsYXllciBpbiBjYXNlIG9mIHNob3J0IG5ldHdvcmsKLQlwcm9ibGVtcyBvciByZW1vdGUgbm9kZSBvdXRhZ2VzLiBJbiBjYXNlIG9mIG5ldHdvcmsgUkFJRCBzZXR1cCB0aGlzIG1lYW5zCi0JdGhhdCBzdG9yYWdlIHdpbGwgbm90IGRlZ3JhZGUgdW50aWwgdHJhbnNhY3Rpb25zIGFyZSBtYXJrZWQgYXMgZmFpbGVkLCBhbmQKLQl0aHVzIHdpbGwgbm90IGZvcmNlIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gYW5kIGRhdGEgcmVidWlsZC4gSW4gY2FzZSBvZgotCWNvbm5lY3Rpb24gZmFpbHVyZSBEU1Qgd2lsbCB0cnkgdG8gcmVjb25uZWN0IHRvIHRoZSByZW1vdGUgbm9kZSBhdXRvbWF0aWNhbGx5LgotCURTVCBzZW5kcyBwaW5nIGNvbW1hbmRzIGF0IGlkbGUgdGltZSB0byBkZXRlY3QgaWYgcmVtb3RlIG5vZGUgaXMgYWxpdmUuCi0KLQlCZWNhdXNlIG9mIHRyYW5zYWN0aW9uYWwgbW9kZWwgaXQgaXMgcG9zc2libGUgdG8gdXNlIHplcm8tY29weSBzZW5kaW5nCi0Jd2l0aG91dCB3b3JyeSBvZiBkYXRhIGNvcnJ1cHRpb24gKHdoaWNoIGluIHR1cm4gY291bGQgYmUgZGV0ZWN0ZWQgYnkgdGhlCi0Jc3Ryb25nIGNoZWNrc3VtcyB0aG91Z2gpLgotCi0JRFNUIG1heSBmdWxseSBlbmNyeXB0IHRoZSBkYXRhIGNoYW5uZWwgaW4gY2FzZSBvZiB1bnRydXN0ZWQgY2hhbm5lbCBhbmQgaW1wbGVtZW50Ci0Jc3Ryb25nIGNoZWNrc3VtIG9mIHRoZSB0cmFuc2ZlcnJlZCBkYXRhLiBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgYWxnb3JpdGhtcwotCWFuZCBjcnlwdG8ga2V5czsgdGhleSBzaG91bGQgbWF0Y2ggb24gYm90aCBzaWRlcyBvZiB0aGUgbmV0d29yayBjaGFubmVsLgotCUNyeXB0byBwcm9jZXNzaW5nIGRvZXMgbm90IGludHJvZHVjZSBub3RpY2VibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIHNpbmNlIERTVAotCXVzZXMgY29uZmlndXJhYmxlIHBvb2wgb2YgdGhyZWFkcyB0byBwZXJmb3JtIGNyeXB0byBwcm9jZXNzaW5nLgotCi0JRFNUIHV0aWxpemVzIG1lbW9yeSBwb29sIG1vZGVsIG9mIGFsbCBpdHMgdHJhbnNhY3Rpb24gYWxsb2NhdGlvbnMgKGl0IGlzIHRoZQotCW9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIG9uIHRoZSBjbGllbnQpIGFuZCBzZXJ2ZXIgYWxsb2NhdGlvbnMgKGJpbyBwb29scywKLQl3aGlsZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIHNsYWIpLgotCi0JQXQgc3RhcnR1cCBEU1QgcGVyZm9ybXMgYSBzaW1wbGUgbmVnb3RpYXRpb24gd2l0aCB0aGUgZXhwb3J0IG5vZGUgdG8gZGV0ZXJtaW5lCi0JYWNjZXNzIHBlcm1pc3Npb25zIGFuZCBzaXplIG9mIHRoZSBleHBvcnRlZCBzdG9yYWdlLiBJdCBjYW4gYmUgZXh0ZW5kZWQgaWYKLQluZXcgcGFyYW1ldGVycyBzaG91bGQgYmUgYXV0b25lZ290aWF0ZWQuCi0KLQlEU1QgY2FycmllcyBibG9jayBJTyBmbGFncyBpbiB0aGUgcHJvdG9jb2wsIHdoaWNoIGFsbG93cyB0byB0cmFuc3BhcmVudGx5IGltcGxlbWVudAotCWJhcnJpZXJzIGFuZCBzeW5jL2ZsdXNoIG9wZXJhdGlvbnMuIFRob3NlIGZsYWdzIGFyZSB1c2VkIGluIHRoZSBleHBvcnQgbm9kZSB3aGVyZQotCUlPIGFnYWluc3QgdGhlIGxvY2FsIHN0b3JhZ2UgaXMgcGVyZm9ybWVkLCB3aGljaCBtZWFucyB0aGF0IHN5bmMgd3JpdGUgd2lsbCBiZSBzeW5jCi0Jb24gdGhlIHJlbW90ZSBub2RlIHRvbywgd2hpY2ggaW4gdHVybiBpbXByb3ZlcyBkYXRhIGludGVncml0eSBhbmQgaW1wcm92ZWQgcmVzaXN0YW5jZQotCXRvIGVycm9ycyBhbmQgZGF0YSBjb3JydXB0aW9uIGR1cmluZyBwb3dlciBvdXRhZ2VzIG9yIHN0b3JhZ2UgZGFtYWdlcy4KLQotCUhvbWVwYWdlOiBodHRwOi8vd3d3LmlvcmVtYXAubmV0L3Byb2plY3RzL2RzdAotCVVzZXJzcGFjZSBjb25maWd1cmF0aW9uIHV0aWxpdHkgYW5kIHRoZSBsYXRlc3QgcmVsZWFzZXM6IGh0dHA6Ly93d3cuaW9yZW1hcC5uZXQvYXJjaGl2ZS9kc3QvCi0KLWNvbmZpZyBEU1RfREVCVUcKLQlib29sICJEU1QgZGVidWciCi0JZGVwZW5kcyBvbiBEU1QKLQktLS1oZWxwLS0tCi0JVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgSEVBVlkgZGVidWdnaW5nIG9mIHRoZSBEU1QuCi0JVHVybiBpdCBvbiBPTkxZIGlmIHlvdSBoYXZlIHRvIGRlYnVnIHNvbWUgcmVhbGx5IG9ic2N1cmUgcHJvYmxlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYThiMGNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19EU1QpICs9IG5zdC5vCi0KLW5zdC15IDo9IGRjb3JlLm8gc3RhdGUubyBleHBvcnQubyB0aHJlYWRfcG9vbC5vIGNyeXB0by5vIHRyYW5zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTEyOTVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzMgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0vKgotICogVHJpY2t5IGJhc3RhcmQsIGJ1dCBJViBjYW4gYmUgbW9yZSBjb21wbGV4IHdpdGggdGltZS4uLgotICovCi1zdGF0aWMgaW5saW5lIHU2NCBkc3RfZ2VuX2l2KHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JcmV0dXJuIHQtPmdlbjsKLX0KLQotLyoKLSAqIENyeXB0byBtYWNoaW5lcnk6IGhhc2gvY2lwaGVyIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBjcnlwdG8gY29udHJvbHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2hhc2ggKmRzdF9pbml0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsIHU4ICprZXkpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7Ci0KLQloYXNoID0gY3J5cHRvX2FsbG9jX2hhc2goY3RsLT5oYXNoX2FsZ28sIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmIChJU19FUlIoaGFzaCkpIHsKLQkJZXJyID0gUFRSX0VSUihoYXNoKTsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBoYXNoICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmhhc2hfYWxnbywgZXJyKTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JY3RsLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoaGFzaCk7Ci0KLQlpZiAoIWN0bC0+aGFzaF9rZXlzaXplKQotCQlyZXR1cm4gaGFzaDsKLQotCWVyciA9IGNyeXB0b19oYXNoX3NldGtleShoYXNoLCBrZXksIGN0bC0+aGFzaF9rZXlzaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgaGFzaCAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgY3RsLT5oYXNoX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCXJldHVybiBoYXNoOwotCi1lcnJfb3V0X2ZyZWU6Ci0JY3J5cHRvX2ZyZWVfaGFzaChoYXNoKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpkc3RfaW5pdF9jaXBoZXIoc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsCi0JCXU4ICprZXkpCi17Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0Jc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXI7Ci0KLQlpZiAoIWN0bC0+Y2lwaGVyX2tleXNpemUpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JY2lwaGVyID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIoY3RsLT5jaXBoZXJfYWxnbywgMCwgMCk7Ci0JaWYgKElTX0VSUihjaXBoZXIpKSB7Ci0JCWVyciA9IFBUUl9FUlIoY2lwaGVyKTsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGN0bC0+Y2lwaGVyX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWNyeXB0b19hYmxrY2lwaGVyX2NsZWFyX2ZsYWdzKGNpcGhlciwgfjApOwotCi0JZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KGNpcGhlciwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgY2lwaGVyICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmNpcGhlcl9hbGdvLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQl9Ci0KLQlyZXR1cm4gY2lwaGVyOwotCi1lcnJfb3V0X2ZyZWU6Ci0JY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjaXBoZXIpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLS8qCi0gKiBDcnlwdG8gZW5naW5lIGhhcyBhIHBvb2wgb2YgcGFnZXMgdG8gZW5jcnlwdCBkYXRhIGludG8gYmVmb3JlIHNlbmRpbmcKLSAqIGl0IG92ZXIgdGhlIG5ldHdvcmsuIFRoaXMgcG9vbCBpcyBmcmVlZC9hbGxvY2F0ZWQgaGVyZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X2NyeXB0b19wYWdlc19mcmVlKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBlLT5wYWdlX251bTsgKytpKQotCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7Ci0Ja2ZyZWUoZS0+cGFnZXMpOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2Moc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBpbnQgbnVtKQotewotCWludCBpOwotCi0JZS0+cGFnZXMgPSBrbWFsbG9jKG51bSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKiksIEdGUF9LRVJORUwpOwotCWlmICghZS0+cGFnZXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0JCWUtPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFlLT5wYWdlc1tpXSkKLQkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOwotCX0KLQotCWUtPnBhZ2VfbnVtID0gbnVtOwotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfcGFnZXM6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7Ci0KLQlrZnJlZShlLT5wYWdlcyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGUuCi0gKiBTZXR1cCBjaXBoZXIvaGFzaCwga2V5cywgcG9vbCBvZiB0aHJlYWRzIGFuZCBwcml2YXRlIGRhdGEuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19lbmdpbmVfaW5pdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCXN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsID0gJm4tPmNyeXB0bzsKLQotCWVyciA9IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2MoZSwgbi0+bWF4X3BhZ2VzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWUtPnNpemUgPSBQQUdFX1NJWkU7Ci0JZS0+ZGF0YSA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlLT5kYXRhKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOwotCX0KLQotCWlmIChjdGwtPmhhc2hfYWxnb1swXSkgewotCQllLT5oYXNoID0gZHN0X2luaXRfaGFzaChjdGwsIG4tPmhhc2hfa2V5KTsKLQkJaWYgKElTX0VSUihlLT5oYXNoKSkgewotCQkJZXJyID0gUFRSX0VSUihlLT5oYXNoKTsKLQkJCWUtPmhhc2ggPSBOVUxMOwotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JCX0KLQl9Ci0KLQlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSkgewotCQllLT5jaXBoZXIgPSBkc3RfaW5pdF9jaXBoZXIoY3RsLCBuLT5jaXBoZXJfa2V5KTsKLQkJaWYgKElTX0VSUihlLT5jaXBoZXIpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGUtPmNpcGhlcik7Ci0JCQllLT5jaXBoZXIgPSBOVUxMOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfaGFzaDoKLQljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKGUtPmRhdGEpOwotZXJyX291dF9mcmVlX3BhZ2VzOgotCWRzdF9jcnlwdG9fcGFnZXNfZnJlZShlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfY3J5cHRvX2VuZ2luZV9leGl0KHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKLXsKLQlpZiAoZS0+aGFzaCkKLQkJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKLQlpZiAoZS0+Y2lwaGVyKQotCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGUtPmNpcGhlcik7Ci0JZHN0X2NyeXB0b19wYWdlc19mcmVlKGUpOwotCWtmcmVlKGUtPmRhdGEpOwotfQotCi0vKgotICogV2FpdGluZyBmb3IgY2lwaGVyIHByb2Nlc3NpbmcgdG8gYmUgY29tcGxldGVkLgotICovCi1zdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uIHsKLQlzdHJ1Y3QgY29tcGxldGlvbgkJY29tcGxldGU7Ci0JaW50CQkJCWVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgZHN0X2NyeXB0b19jb21wbGV0ZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgaW50IGVycikKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uICpjID0gcmVxLT5kYXRhOwotCi0JaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpCi0JCXJldHVybjsKLQotCWRwcmludGsoIiVzOiByZXE6ICVwLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHJlcSwgZXJyKTsKLQljLT5lcnJvciA9IGVycjsKLQljb21wbGV0ZSgmYy0+Y29tcGxldGUpOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcHJvY2VzcyhzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYywKLQkJdm9pZCAqaXYsIGludCBlbmMsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uIGM7Ci0JaW50IGVycjsKLQotCWluaXRfY29tcGxldGlvbigmYy5jb21wbGV0ZSk7Ci0JYy5lcnJvciA9IC1FSU5QUk9HUkVTUzsKLQotCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKLQkJCQkJZHN0X2NyeXB0b19jb21wbGV0ZSwgJmMpOwotCi0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnX3NyYywgc2dfZHN0LCBzZ19zcmMtPmxlbmd0aCwgaXYpOwotCi0JaWYgKGVuYykKLQkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChyZXEpOwotCWVsc2UKLQkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChyZXEpOwotCi0Jc3dpdGNoIChlcnIpIHsKLQljYXNlIC1FSU5QUk9HUkVTUzoKLQljYXNlIC1FQlVTWToKLQkJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmMuY29tcGxldGUsCi0JCQkJdGltZW91dCk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gLUVUSU1FRE9VVDsKLQkJZWxzZQotCQkJZXJyID0gYy5lcnJvcjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIERTVCB1c2VzIGdlbmVyaWMgaXRlcmF0aW9uIGFwcHJvYWNoIGZvciBkYXRhIGNyeXB0byBwcm9jZXNzaW5nLgotICogU2luZ2xlIGJsb2NrIElPIHJlcXVlc3QgaXMgc3dpdGNoZWQgaW50byBhcnJheSBvZiBzY2F0dGVybGlzdHMsCi0gKiB3aGljaCBhcmUgc3VibWl0dGVkIHRvIHRoZSBjcnlwdG8gcHJvY2Vzc2luZyBpdGVyYXRvci4KLSAqCi0gKiBJbnB1dCBhbmQgb3V0cHV0IGl0ZXJhdG9yIGluaXRpYWxpemF0aW9uIGFyZSBkaWZmZXJlbnQsIHNpbmNlCi0gKiBpbiBvdXRwdXQgY2FzZSB3ZSBjYW4gbm90IGVuY3J5cHQgZGF0YSBpbi1wbGFjZSBhbmQgbmVlZCBhCi0gKiB0ZW1wb3Jhcnkgc3RvcmFnZSwgd2hpY2ggaXMgdGhlbiBiZWluZyBzZW50IHRvIHRoZSByZW1vdGUgcGVlci4KLSAqLwotc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9vdXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCWludCAoKml0ZXJhdG9yKSAoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYykpCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCWludCBlcnIsIGk7Ci0KLQlzZ19pbml0X3RhYmxlKGUtPnNyYywgYmlvLT5iaV92Y250KTsKLQlzZ19pbml0X3RhYmxlKGUtPmRzdCwgYmlvLT5iaV92Y250KTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJc2dfc2V0X3BhZ2UoJmUtPnNyY1tpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCQlzZ19zZXRfcGFnZSgmZS0+ZHN0W2ldLCBlLT5wYWdlc1tpXSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7Ci0KLQkJZXJyID0gaXRlcmF0b3IoZSwgJmUtPmRzdFtpXSwgJmUtPnNyY1tpXSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF90cmFuc19pdGVyX2luKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlpbnQgKCppdGVyYXRvcikgKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgZXJyLCBpOwotCi0Jc2dfaW5pdF90YWJsZShlLT5zcmMsIGJpby0+YmlfdmNudCk7Ci0Jc2dfaW5pdF90YWJsZShlLT5kc3QsIGJpby0+YmlfdmNudCk7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCXNnX3NldF9wYWdlKCZlLT5zcmNbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKLQkJc2dfc2V0X3BhZ2UoJmUtPmRzdFtpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCi0JCWVyciA9IGl0ZXJhdG9yKGUsICZlLT5kc3RbaV0sICZlLT5zcmNbaV0pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHRfaXRlcmF0b3Ioc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCi17Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKLQl1OCBpdlszMl07Ci0KLQltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOwotCi0JbWVtY3B5KGl2LCAmZS0+aXYsIHNpemVvZihlLT5pdikpOwotCi0JcmV0dXJuIGRzdF9jcnlwdG9fcHJvY2VzcyhyZXEsIHNnX2RzdCwgc2dfc3JjLCBpdiwgZS0+ZW5jLCBlLT50aW1lb3V0KTsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHQoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKLQotCW1lbXNldChyZXEsIDAsIHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSk7Ci0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBlLT5jaXBoZXIpOwotCi0JaWYgKGUtPmVuYykKLQkJcmV0dXJuIGRzdF90cmFuc19pdGVyX291dChiaW8sIGUsIGRzdF9jcnlwdF9pdGVyYXRvcik7Ci0JZWxzZQotCQlyZXR1cm4gZHN0X3RyYW5zX2l0ZXJfaW4oYmlvLCBlLCBkc3RfY3J5cHRfaXRlcmF0b3IpOwotfQotCi1zdGF0aWMgaW50IGRzdF9oYXNoX2l0ZXJhdG9yKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjKQotewotCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoZS0+ZGF0YSwgc2dfc3JjLCBzZ19zcmMtPmxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRzdCkKLXsKLQlzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjID0gZS0+ZGF0YTsKLQlpbnQgZXJyOwotCi0JZGVzYy0+dGZtID0gZS0+aGFzaDsKLQlkZXNjLT5mbGFncyA9IDA7Ci0KLQllcnIgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBkc3RfdHJhbnNfaXRlcl9pbihiaW8sIGUsIGRzdF9oYXNoX2l0ZXJhdG9yKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgZHN0KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplL2NsZWFudXAgYSBjcnlwdG8gdGhyZWFkLiBUaGUgb25seSB0aGluZyBpdCBzaG91bGQKLSAqIGRvIGlzIHRvIGFsbG9jYXRlIGEgcG9vbCBvZiBwYWdlcyBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4KLSAqIEFuZCB0byBzZXR1cCBjaXBoZXIgYW5kL29yIGhhc2guCi0gKi8KLXN0YXRpYyB2b2lkICpkc3RfY3J5cHRvX3RocmVhZF9pbml0KHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gZGF0YTsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmU7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQllID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQllLT5zcmMgPSBrY2FsbG9jKDIgKiBuLT5tYXhfcGFnZXMsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlLT5zcmMpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZS0+ZHN0ID0gZS0+c3JjICsgbi0+bWF4X3BhZ2VzOwotCi0JZXJyID0gZHN0X2NyeXB0b19lbmdpbmVfaW5pdChlLCBuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7Ci0KLQlyZXR1cm4gZTsKLQotZXJyX291dF9mcmVlX2FsbDoKLQlrZnJlZShlLT5zcmMpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKGUpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9jcnlwdG9fdGhyZWFkX2NsZWFudXAodm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBwcml2YXRlOwotCi0JZHN0X2NyeXB0b19lbmdpbmVfZXhpdChlKTsKLQlrZnJlZShlLT5zcmMpOwotCWtmcmVlKGUpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjcnlwdG8gZW5naW5lIGZvciBnaXZlbiBub2RlOiBzdG9yZSBrZXlzLCBjcmVhdGUgcG9vbAotICogb2YgdGhyZWFkcywgaW5pdGlhbGl6ZSBlYWNoIG9uZS4KLSAqCi0gKiBFYWNoIHRocmVhZCBoYXMgdW5pcXVlIElELCBidXQgMCBhbmQgMSBhcmUgcmVzZXJ2ZWQgZm9yIHJlY2VpdmluZyBhbmQKLSAqIGFjY2VwdGluZyB0aHJlYWRzIChpZiBleHBvcnQgbm9kZSksIHNvIElEcyBjb3VsZCBzdGFydCBmcm9tIDIsIGJ1dCBzdGFydGluZwotICogdGhlbSBmcm9tIDEwIGFsbG93cyBlYXNpbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGhyZWFkIGlzIGZvci4KLSAqLwotaW50IGRzdF9ub2RlX2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwpCi17Ci0Jdm9pZCAqa2V5ID0gKGN0bCArIDEpOwotCWludCBlcnIgPSAtRU5PTUVNLCBpOwotCWNoYXIgbmFtZVszMl07Ci0KLQlpZiAoY3RsLT5oYXNoX2tleXNpemUpIHsKLQkJbi0+aGFzaF9rZXkgPSBrbWFsbG9jKGN0bC0+aGFzaF9rZXlzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuLT5oYXNoX2tleSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCQltZW1jcHkobi0+aGFzaF9rZXksIGtleSwgY3RsLT5oYXNoX2tleXNpemUpOwotCX0KLQotCWlmIChjdGwtPmNpcGhlcl9rZXlzaXplKSB7Ci0JCW4tPmNpcGhlcl9rZXkgPSBrbWFsbG9jKGN0bC0+Y2lwaGVyX2tleXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW4tPmNpcGhlcl9rZXkpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoOwotCQltZW1jcHkobi0+Y2lwaGVyX2tleSwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKLQl9Ci0JbWVtY3B5KCZuLT5jcnlwdG8sIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkpOwotCi0JZm9yIChpID0gMDsgaSA8IGN0bC0+dGhyZWFkX251bTsgKytpKSB7Ci0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLWNyeXB0by0lZCIsIG4tPm5hbWUsIGkpOwotCQkvKiBVbmlxdWUgaWRzLi4uICovCi0JCWVyciA9IHRocmVhZF9wb29sX2FkZF93b3JrZXIobi0+cG9vbCwgbmFtZSwgaSArIDEwLAotCQkJZHN0X2NyeXB0b190aHJlYWRfaW5pdCwgZHN0X2NyeXB0b190aHJlYWRfY2xlYW51cCwgbik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV90aHJlYWRzOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfdGhyZWFkczoKLQl3aGlsZSAoLS1pID49IDApCi0JCXRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQobi0+cG9vbCwgaSsxMCk7Ci0KLQlpZiAoY3RsLT5jaXBoZXJfa2V5c2l6ZSkKLQkJa2ZyZWUobi0+Y2lwaGVyX2tleSk7Ci0JY3RsLT5jaXBoZXJfa2V5c2l6ZSA9IDA7Ci1lcnJfb3V0X2ZyZWVfaGFzaDoKLQlpZiAoY3RsLT5oYXNoX2tleXNpemUpCi0JCWtmcmVlKG4tPmhhc2hfa2V5KTsKLQljdGwtPmhhc2hfa2V5c2l6ZSA9IDA7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBkc3Rfbm9kZV9jcnlwdG9fZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwgPSAmbi0+Y3J5cHRvOwotCi0JaWYgKGN0bC0+Y2lwaGVyX2FsZ29bMF0gfHwgY3RsLT5oYXNoX2FsZ29bMF0pIHsKLQkJa2ZyZWUobi0+aGFzaF9rZXkpOwotCQlrZnJlZShuLT5jaXBoZXJfa2V5KTsKLQl9Ci19Ci0KLS8qCi0gKiBUaHJhZCBwb29sIHNldHVwIGNhbGxiYWNrLiBKdXN0IHN0b3JlcyBhIHRyYW5zYWN0aW9uIGluIHByaXZhdGUgZGF0YS4KLSAqLwotc3RhdGljIGludCBkc3RfdHJhbnNfY3J5cHRvX3NldHVwKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnRyYW5zKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0KLQllLT5wcml2YXRlID0gdHJhbnM7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBkc3RfZHVtcF9iaW8oc3RydWN0IGJpbyAqYmlvKQotewotCXU4ICpwOwotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgaTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJZHByaW50aygiJXM6ICVsbHUvJXU6IHNpemU6ICV1LCBvZmZzZXQ6ICV1LCBkYXRhOiAiLAotCQkJCV9fZnVuY19fLCBiaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJCWJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCi0JCXAgPSBrbWFwKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBidi0+YnZfbGVuOyArK2kpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAiLCBwW2ldKTsKLQkJa3VubWFwKGJ2LT5idl9wYWdlKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLSNlbmRpZgotCi0vKgotICogRW5jcnlwdC9oYXNoIGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3QgYmlvICpiaW8sIHU4ICpoYXNoKQotewotCWludCBlcnI7Ci0KLQlpZiAoZS0+Y2lwaGVyKSB7Ci0JCWVyciA9IGRzdF9jcnlwdChlLCBiaW8pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JaWYgKGUtPmhhc2gpIHsKLQkJZXJyID0gZHN0X2hhc2goZSwgYmlvLCBoYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0jaWZkZWYgQ09ORklHX0RTVF9ERUJVRwotCQl7Ci0JCQl1bnNpZ25lZCBpbnQgaTsKLQotCQkJLyogZHN0X2R1bXBfYmlvKGJpbyk7ICovCi0KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBoYXNoOiAiLAotCQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJCWJpby0+Ymlfc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOwotCQkJZm9yIChpID0gMDsgaSA8IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7ICsraSkKLQkJCQkJcHJpbnRrKCIlMDJ4ICIsIGhhc2hbaV0pOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiByZWNlaXZlZCBkYXRhIGlzIHZhbGlkLiBEZWNpcGhlciBpZiBpdCBpcy4KLSAqLwotc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IGJpbyAqYmlvLCB1OCAqaGFzaCwgdTggKnJlY3ZfaGFzaCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKGUtPmhhc2gpIHsKLQkJaW50IG1pc21hdGNoOwotCi0JCWVyciA9IGRzdF9oYXNoKGUsIGJpbywgaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQltaXNtYXRjaCA9ICEhbWVtY21wKHJlY3ZfaGFzaCwgaGFzaCwKLQkJCQljcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpKTsKLSNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCi0JCS8qIGRzdF9kdW1wX2JpbyhiaW8pOyAqLwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBoYXNoIG1pc21hdGNoOiAlZCIsCi0JCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJYmlvX2RhdGFfZGlyKGJpbyksIG1pc21hdGNoKTsKLQkJaWYgKG1pc21hdGNoKSB7Ci0JCQl1bnNpZ25lZCBpbnQgaTsKLQotCQkJcHJpbnRrKCIsIHJlY3YvY2FsYzogIik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKQotCQkJCXByaW50aygiJTAyeC8lMDJ4ICIsIHJlY3ZfaGFzaFtpXSwgaGFzaFtpXSk7Ci0KLQkJfQotCQlwcmludGsoIlxuIik7Ci0jZW5kaWYKLQkJZXJyID0gLTE7Ci0JCWlmIChtaXNtYXRjaCkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWlmIChlLT5jaXBoZXIpIHsKLQkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgcG9vbCBjYWxsYmFjayB0byBlbmNyeXB0IGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldG93b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fYWN0aW9uKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0ID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87Ci0JaW50IGVycjsKLQotCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBjaXBoZXI6ICVwLCBoYXNoOiAlcC5cbiIsCi0JCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBlLT5jaXBoZXIsIGUtPmhhc2gpOwotCi0JZS0+ZW5jID0gdC0+ZW5jOwotCWUtPml2ID0gZHN0X2dlbl9pdih0KTsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHQtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChlLT5oYXNoKSB7Ci0JCQl0LT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOwotCQkJdC0+Y21kLnNpemUgKz0gdC0+Y21kLmNzaXplOwotCQl9Ci0KLQkJcmV0dXJuIGRzdF90cmFuc19zZW5kKHQpOwotCX0gZWxzZSB7Ci0JCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKLQotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgdC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJZHN0X3RyYW5zX3JlbW92ZSh0KTsKLQkJZHN0X3RyYW5zX3B1dCh0KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXQtPmVycm9yID0gZXJyOwotCWRzdF90cmFuc19wdXQodCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNjaGVkdWxlIGNyeXB0byBwcm9jZXNzaW5nIGZvciBnaXZlbiB0cmFuc2FjdGlvbi4KLSAqLwotaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOwotCWludCBlcnI7Ci0KLQllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLAotCQlkc3RfdHJhbnNfY3J5cHRvX3NldHVwLCBkc3RfdHJhbnNfY3J5cHRvX2FjdGlvbiwKLQkJdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlkc3RfdHJhbnNfcHV0KHQpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDcnlwdG8gbWFjaGluZXJ5IGZvciB0aGUgZXhwb3J0IG5vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqYmlvKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0KLQllLT5wcml2YXRlID0gYmlvOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbih2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpzY2hlZHVsZV9kYXRhKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0Jc3RydWN0IGJpbyAqYmlvID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOwotCWludCBlcnI7Ci0KLQlkcHJpbnRrKCIlczogZTogJXAsIGRhdGE6ICVwLCBiaW86ICVsbHUvJXUsIGRpcjogJWx1LlxuIiwKLQkJCV9fZnVuY19fLCBlLCBlLT5kYXRhLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJYmlvLT5iaV9zaXplLCBiaW9fZGF0YV9kaXIoYmlvKSk7Ci0KLQllLT5lbmMgPSAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCk7Ci0JZS0+aXYgPSBwLT5jbWQuaWQ7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJdTggKmhhc2ggPSBlLT5kYXRhICsgZS0+c2l6ZS8yOwotCi0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19yZWNlaXZpbmcoZSwgYmlvLCBoYXNoLCBwLT5jbWQuaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19zZW5kaW5nKGUsIGJpbywgcC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJaWYgKGUtPmhhc2gpIHsKLQkJCXAtPmNtZC5jc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7Ci0JCQlwLT5jbWQuc2l6ZSArPSBwLT5jbWQuY3NpemU7Ci0JCX0KLQotCQllcnIgPSBkc3RfZXhwb3J0X3NlbmRfYmlvKGJpbyk7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JYmlvX3B1dChiaW8pOwotCXJldHVybiBlcnI7Ci19Ci0KLWludCBkc3RfZXhwb3J0X2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gdGhyZWFkX3Bvb2xfc2NoZWR1bGUobi0+cG9vbCwKLQkJZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAsIGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbiwKLQkJYmlvLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODNjYTdlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDk2OCArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi1zdGF0aWMgaW50IGRzdF9tYWpvcjsKLQotc3RhdGljIERFRklORV9NVVRFWChkc3RfaGFzaF9sb2NrKTsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfaGFzaHRhYmxlOwotc3RhdGljIHVuc2lnbmVkIGludCBkc3RfaGFzaHRhYmxlX3NpemUgPSAxMjg7Ci1tb2R1bGVfcGFyYW0oZHN0X2hhc2h0YWJsZV9zaXplLCB1aW50LCAwNjQ0KTsKLQotc3RhdGljIGNoYXIgZHN0X25hbWVbXSA9ICJEZW1lbnRpYW50aW5nIGdvbGRmaXNoIjsKLQotc3RhdGljIERFRklORV9JRFIoZHN0X2luZGV4X2lkcik7Ci1zdGF0aWMgc3RydWN0IGNiX2lkIGNuX2RzdF9pZCA9IHsgQ05fRFNUX0lEWCwgQ05fRFNUX1ZBTCB9OwotCi0vKgotICogRFNUIHN5c2ZzIHRyZWUgZm9yIGRldmljZSBjYWxsZWQgJ3N0b3JhZ2UnOgotICoKLSAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2UvCi0gKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL3R5cGUgOiAxOTIuMTY4LjQuODA6MTAyNQotICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS9zaXplIDogODAwCi0gKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL25hbWUgOiBzdG9yYWdlCi0gKi8KLQotc3RhdGljIGludCBkc3RfZGV2X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBidXNfdHlwZSBkc3RfZGV2X2J1c190eXBlID0gewotCS5uYW1lIAkJPSAiZHN0IiwKLQkubWF0Y2ggCQk9ICZkc3RfZGV2X21hdGNoLAotfTsKLQotc3RhdGljIHZvaWQgZHN0X25vZGVfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOwotCi0Ja2ZyZWUoaW5mbyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlIGRzdF9ub2RlX2RldiA9IHsKLQkuYnVzIAkJPSAmZHN0X2Rldl9idXNfdHlwZSwKLQkucmVsZWFzZSAJPSAmZHN0X25vZGVfcmVsZWFzZQotfTsKLQotLyoKLSAqIFNldHRpbmcgc2l6ZSBvZiB0aGUgbm9kZSBhZnRlciBpdCB3YXMgY2hhbmdlZC4KLSAqLwotc3RhdGljIHZvaWQgZHN0X25vZGVfc2V0X3NpemUoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7Ci0KLQlzZXRfY2FwYWNpdHkobi0+ZGlzaywgbi0+c2l6ZSA+PiA5KTsKLQotCWJkZXYgPSBiZGdldF9kaXNrKG4tPmRpc2ssIDApOwotCWlmIChiZGV2KSB7Ci0JCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCBuLT5zaXplKTsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7Ci0JCWJkcHV0KGJkZXYpOwotCX0KLX0KLQotLyoKLSAqIERpc3RyaWJ1dGVkIHN0b3JhZ2UgcmVxdWVzdCBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IGRzdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gcS0+cXVldWVkYXRhOwotCWludCBlcnIgPSAtRUlPOwotCi0JaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykgJiYgIWJsa19xdWV1ZV9kaXNjYXJkKHEpKSB7Ci0JCS8qCi0JCSAqIFRoaXMgaXMgYSBkaXJ0eV5XbmljZSBoYWNrLCBidXQgaWYgd2UgY29tcGxldGUgdGhpcwotCQkgKiBvcGVyYXRpb24gd2l0aCAtRU9QTk9UU1VQUCBsaWtlIGludGVuZGVkLCBYRlMKLQkJICogd2lsbCBzdHVjayBhbmQgZnJlZXplIHRoZSBtYWNoaW5lLiBUaGlzIG1heSBiZQotCQkgKiBub3QgcGFydGljdWxhcnkgWEZTIHByb2JsZW0gdGhvdWdoLCBidXQgaXQgaXMgdGhlCi0JCSAqIG9ubHkgRlMgd2hpY2ggc2VuZHMgZW1wdHkgYmFycmllciBhdCB1bW91bnQgdGltZQotCQkgKiBJIHdvcmtlZCB3aXRoLgotCQkgKgotCQkgKiBFbXB0eSBiYXJyaWVycyBhcmUgbm90IGFsbG93ZWQgYW55d2F5LCBzZWUgNTFmZDc3YmQ5ZjUxMgotCQkgKiBmb3IgZXhhbXBsZSwgYWx0aG91Z2ggbGF0ZXIgaXQgd2FzIGNoYW5nZWQgdG8KLQkJICogYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgb25seSwgd2hpY2ggZG9lcyBub3QKLQkJICogd29yayBpbiB0aGlzIGNhc2UuCi0JCSAqLwotCQkvKiBlcnIgPSAtRU9QTk9UU1VQUDsgKi8KLQkJZXJyID0gMDsKLQkJZ290byBlbmRfaW87Ci0JfQotCi0JYmlvX2dldChiaW8pOwotCi0JcmV0dXJuIGRzdF9wcm9jZXNzX2JpbyhuLCBiaW8pOwotCi1lbmRfaW86Ci0JYmlvX2VuZGlvKGJpbywgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogT3Blbi9jbG9zZSBjYWxsYmFja3MgZm9yIGFwcHJvcHJpYXRlIGJsb2NrIGRldmljZS4KLSAqLwotc3RhdGljIGludCBkc3RfYmRldl9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQlkc3Rfbm9kZV9nZXQobik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2JkZXZfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQotCWRzdF9ub2RlX3B1dChuKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkc3RfYmxrX29wcyA9IHsKLQkub3BlbgkJPSBkc3RfYmRldl9vcGVuLAotCS5yZWxlYXNlCT0gZHN0X2JkZXZfcmVsZWFzZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi19OwotCi0vKgotICogQmxvY2sgbGF5ZXIgYmluZGluZyAtIGRpc2sgaXMgY3JlYXRlZCB3aGVuIGFycmF5IGlzIGZ1bGx5IGNvbmZpZ3VyZWQKLSAqIGJ5IHVzZXJzcGFjZSByZXF1ZXN0LgotICovCi1zdGF0aWMgaW50IGRzdF9ub2RlX2NyZWF0ZV9kaXNrKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQl1MzIgaW5kZXggPSAwOwotCi0Jbi0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShOVUxMLCBOVUxMKTsKLQlpZiAoIW4tPnF1ZXVlKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCW4tPnF1ZXVlLT5xdWV1ZWRhdGEgPSBuOwotCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3Qobi0+cXVldWUsIGRzdF9yZXF1ZXN0KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMobi0+cXVldWUsIG4tPm1heF9wYWdlcyk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhuLT5xdWV1ZSwgbi0+bWF4X3BhZ2VzKTsKLQotCWVyciA9IC1FTk9NRU07Ci0Jbi0+ZGlzayA9IGFsbG9jX2Rpc2soMSk7Ci0JaWYgKCFuLT5kaXNrKQotCQlnb3RvIGVycl9vdXRfZnJlZV9xdWV1ZTsKLQotCWlmICghKG4tPnN0YXRlLT5wZXJtaXNzaW9ucyAmIERTVF9QRVJNX1dSSVRFKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJEU1Qgbm9kZSAlcyBhdHRhY2hlZCByZWFkLW9ubHkuXG4iLCBuLT5uYW1lKTsKLQkJc2V0X2Rpc2tfcm8obi0+ZGlzaywgMSk7Ci0JfQotCi0JaWYgKCFpZHJfcHJlX2dldCgmZHN0X2luZGV4X2lkciwgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQllcnIgPSBpZHJfZ2V0X25ldygmZHN0X2luZGV4X2lkciwgTlVMTCwgJmluZGV4KTsKLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQluLT5kaXNrLT5tYWpvciA9IGRzdF9tYWpvcjsKLQluLT5kaXNrLT5maXJzdF9taW5vciA9IGluZGV4OwotCW4tPmRpc2stPmZvcHMgPSAmZHN0X2Jsa19vcHM7Ci0Jbi0+ZGlzay0+cXVldWUgPSBuLT5xdWV1ZTsKLQluLT5kaXNrLT5wcml2YXRlX2RhdGEgPSBuOwotCXNucHJpbnRmKG4tPmRpc2stPmRpc2tfbmFtZSwgc2l6ZW9mKG4tPmRpc2stPmRpc2tfbmFtZSksCi0JCQkiZHN0LSVzIiwgbi0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9wdXQ6Ci0JcHV0X2Rpc2sobi0+ZGlzayk7Ci1lcnJfb3V0X2ZyZWVfcXVldWU6Ci0JYmxrX2NsZWFudXBfcXVldWUobi0+cXVldWUpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTeXNmcyBtYWNoaW5lcnk6IHNob3cgZGV2aWNlJ3Mgc2l6ZS4KLSAqLwotc3RhdGljIHNzaXplX3QgZHN0X3Nob3dfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgaW5mby0+c2l6ZSk7Ci19Ci0KLS8qCi0gKiBTaG93IGxvY2FsIGV4cG9ydGVkIGRldmljZS4KLSAqLwotc3RhdGljIHNzaXplX3QgZHN0X3Nob3dfbG9jYWwoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbmZvLT5sb2NhbCk7Ci19Ci0KLS8qCi0gKiBTaG93cyB0eXBlIG9mIHRoZSByZW1vdGUgbm9kZSAtIGRldmljZSBtYWpvci9taW5vciBudW1iZXIKLSAqIGZvciBsb2NhbCBub2RlcyBhbmQgYWRkcmVzcyAoYWZfaW5ldCBpcHY0L2lwdjYgb25seSkgZm9yIHJlbW90ZSBub2Rlcy4KLSAqLwotc3RhdGljIHNzaXplX3QgZHN0X3Nob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOwotCWludCBmYW1pbHkgPSBpbmZvLT5uZXQuYWRkci5zYV9mYW1pbHk7Ci0KLQlpZiAoZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmluZm8tPm5ldC5hZGRyOwotCQlyZXR1cm4gc3ByaW50ZihidWYsICIldS4ldS4ldS4ldTolZFxuIiwKLQkJCU5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7Ci0JfSBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikKLQkJCQkmaW5mby0+bmV0LmFkZHI7Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJCSIlcGk2OiVkXG4iLAotCQkJJnNpbi0+c2luNl9hZGRyLCBudG9ocyhzaW4tPnNpbjZfcG9ydCkpOwotCX0gZWxzZSB7Ci0JCWludCBpLCBzeiA9IFBBR0VfU0laRSAtIDI7IC8qIDAgc3ltYm9sIGFuZCAnXG4nIGJlbG93ICovCi0JCWludCBzaXplLCBhZGRybGVuID0gaW5mby0+bmV0LmFkZHIuc2FfZGF0YV9sZW47Ci0JCXVuc2lnbmVkIGNoYXIgKmEgPSAodW5zaWduZWQgY2hhciAqKSZpbmZvLT5uZXQuYWRkci5zYV9kYXRhOwotCQljaGFyICpidWZfb3JpZyA9IGJ1ZjsKLQotCQlzaXplID0gc25wcmludGYoYnVmLCBzeiwgImZhbWlseTogJWQsIGFkZHJsZW46ICV1LCBhZGRyOiAiLAotCQkJCWZhbWlseSwgYWRkcmxlbik7Ci0JCXN6IC09IHNpemU7Ci0JCWJ1ZiArPSBzaXplOwotCi0JCWZvciAoaSA9IDA7IGkgPCBhZGRybGVuOyArK2kpIHsKLQkJCWlmIChzeiA8IDMpCi0JCQkJYnJlYWs7Ci0KLQkJCXNpemUgPSBzbnByaW50ZihidWYsIHN6LCAiJTAyeCAiLCBhW2ldKTsKLQkJCXN6IC09IHNpemU7Ci0JCQlidWYgKz0gc2l6ZTsKLQkJfQotCQlidWYgKz0gc3ByaW50ZihidWYsICJcbiIpOwotCi0JCXJldHVybiBidWYgLSBidWZfb3JpZzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkc3Rfbm9kZV9hdHRyc1tdID0gewotCV9fQVRUUihzaXplLCAwNDQ0LCBkc3Rfc2hvd19zaXplLCBOVUxMKSwKLQlfX0FUVFIodHlwZSwgMDQ0NCwgZHN0X3Nob3dfdHlwZSwgTlVMTCksCi0JX19BVFRSKGxvY2FsLCAwNDQ0LCBkc3Rfc2hvd19sb2NhbCwgTlVMTCksCi19OwotCi1zdGF0aWMgaW50IGRzdF9jcmVhdGVfbm9kZV9hdHRyaWJ1dGVzKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHN0X25vZGVfYXR0cnMpOyArK2kpIHsKLQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCi0JCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9yZW1vdmVfYWxsOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9yZW1vdmVfYWxsOgotCXdoaWxlICgtLWkgPj0gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCi0JCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVzKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzdF9ub2RlX2F0dHJzKTsgKytpKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKLQkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOwotfQotCi0vKgotICogU3lzZnMgY2xlYW51cCBhbmQgaW5pdGlhbGl6YXRpb24uCi0gKiBTaG93cyBudW1iZXIgb2YgdXNlZnVsIHBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3N5c2ZzX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWlmIChuLT5pbmZvKSB7Ci0JCWRzdF9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVzKG4pOwotCQlkZXZpY2VfdW5yZWdpc3Rlcigmbi0+aW5mby0+ZGV2aWNlKTsKLQkJbi0+aW5mbyA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRzdF9ub2RlX3N5c2ZzX2luaXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBlcnI7Ci0KLQluLT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuLT5pbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweSgmbi0+aW5mby0+ZGV2aWNlLCAmZHN0X25vZGVfZGV2LCBzaXplb2Yoc3RydWN0IGRldmljZSkpOwotCW4tPmluZm8tPnNpemUgPSBuLT5zaXplOwotCi0JZGV2X3NldF9uYW1lKCZuLT5pbmZvLT5kZXZpY2UsICJkc3QtJXMiLCBuLT5uYW1lKTsKLQllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJm4tPmluZm8tPmRldmljZSk7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgbm9kZSAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQluLT5uYW1lLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlkc3RfY3JlYXRlX25vZGVfYXR0cmlidXRlcyhuKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0Ja2ZyZWUobi0+aW5mbyk7Ci0Jbi0+aW5mbyA9IE5VTEw7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIERTVCBub2RlIGhhc2ggdGFibGVzIG1hY2hpbmVyeS4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZHN0X2hhc2goY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlyZXR1cm4gamhhc2goc3RyLCBzaXplLCAwKSAlIGRzdF9oYXNodGFibGVfc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X25vZGVfcmVtb3ZlKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQlsaXN0X2RlbF9pbml0KCZuLT5ub2RlX2VudHJ5KTsKLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9hZGQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXVuc2lnbmVkIGhhc2ggPSBkc3RfaGFzaChuLT5uYW1lLCBzaXplb2Yobi0+bmFtZSkpOwotCi0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmbi0+bm9kZV9lbnRyeSwgJmRzdF9oYXNodGFibGVbaGFzaF0pOwotCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci19Ci0KLS8qCi0gKiBDbGVhbmluZyBub2RlIHdoZW4gaXQgaXMgYWJvdXQgdG8gYmUgZnJlZWQuCi0gKiBUaGVyZSBhcmUgc3RpbGwgdXNlcnMgb2YgdGhlIHNvY2tldCB0aG91Z2gsCi0gKiBzbyBjb25uZWN0aW9uIGNsZWFudXAgc2hvdWxkIGJlIHByb3RlY3RlZC4KLSAqLwotc3RhdGljIHZvaWQgZHN0X25vZGVfY2xlYW51cChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBuLT5zdGF0ZTsKLQotCWlmICghc3QpCi0JCXJldHVybjsKLQotCWlmIChuLT5xdWV1ZSkgewotCQlibGtfY2xlYW51cF9xdWV1ZShuLT5xdWV1ZSk7Ci0KLQkJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JCWlkcl9yZW1vdmUoJmRzdF9pbmRleF9pZHIsIG4tPmRpc2stPmZpcnN0X21pbm9yKTsKLQkJbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQotCQlwdXRfZGlzayhuLT5kaXNrKTsKLQl9Ci0KLQlpZiAobi0+YmRldikgewotCQlzeW5jX2Jsb2NrZGV2KG4tPmJkZXYpOwotCQljbG9zZV9iZGV2X2V4Y2x1c2l2ZShuLT5iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKLQl9Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0Jc3QtPm5lZWRfZXhpdCA9IDE7Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0KLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLQluLT5zdGF0ZSA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBGcmVlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gZ2l2ZW4gbm9kZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3NlY3VyaXR5X2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3Rfc2VjdXJlICpzLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHRtcCwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgewotCQlsaXN0X2RlbCgmcy0+c2VjX2VudHJ5KTsKLQkJa2ZyZWUocyk7Ci0JfQotfQotCi0vKgotICogRnJlZSBub2RlIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgdXNlcnMuCi0gKiBBY3R1YWxseSBub2RlIGhhcyB0byBiZSBmcmVlZCBvbiBiZWhhbGYgb2QgdXNlcnNwYWNlIHByb2Nlc3MsCi0gKiBzaW5jZSB0aGVyZSBhcmUgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGFyZSBlbWJlZGRlZCBpbiB0aGUKLSAqIG5vZGUsIHNvIHRoZXkgY2FuIG5vdCBleGl0IGFuZCBmcmVlIG5vZGUgZnJvbSB0aGVyZSwgdGhhdCBpcwotICogd2h5IHRoZXJlIGlzIGEgd2FrZXVwIGlmIHJlZmVyZW5jZSBjb3VudGVyIGlzIG5vdCBlcXVhbCB0byB6ZXJvLgotICovCi12b2lkIGRzdF9ub2RlX3B1dChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaWYgKHVubGlrZWx5KCFuKSkKLQkJcmV0dXJuOwotCi0JZHByaW50aygiJXM6IG46ICVwLCByZWZjbnQ6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCBuLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbi0+cmVmY250KSkgewotCQlkc3Rfbm9kZV9yZW1vdmUobik7Ci0JCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IDA7Ci0JCWRzdF9ub2RlX2NsZWFudXAobik7Ci0JCXRocmVhZF9wb29sX2Rlc3Ryb3kobi0+cG9vbCk7Ci0JCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7Ci0JCWRzdF9ub2RlX2NyeXB0b19leGl0KG4pOwotCQlkc3Rfc2VjdXJpdHlfZXhpdChuKTsKLQkJZHN0X25vZGVfdHJhbnNfZXhpdChuKTsKLQotCQlrZnJlZShuKTsKLQotCQlkcHJpbnRrKCIlczogZnJlZWQgbjogJXAuXG4iLCBfX2Z1bmNfXywgbik7Ci0JfSBlbHNlIHsKLQkJd2FrZV91cCgmbi0+d2FpdCk7Ci0JfQotfQotCi0vKgotICogU2V0dGluZyB1cCBleHBvcnQgZGV2aWNlOiBsb29rdXAgYnkgdGhlIG5hbWUsIGdldCBpdHMgc2l6ZQotICogYW5kIHNldHVwIGxpc3RlbmluZyBzb2NrZXQsIHdoaWNoIHdpbGwgYWNjZXB0IGNsaWVudHMsIHdoaWNoCi0gKiB3aWxsIHN1Ym1pdCBJTyBmb3IgZ2l2ZW4gc3RvcmFnZS4KLSAqLwotc3RhdGljIGludCBkc3Rfc2V0dXBfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSkKLXsKLQlpbnQgZXJyOwotCi0Jc25wcmludGYobi0+aW5mby0+bG9jYWwsIHNpemVvZihuLT5pbmZvLT5sb2NhbCksICIlcyIsIGxlLT5kZXZpY2UpOwotCi0Jbi0+YmRldiA9IG9wZW5fYmRldl9leGNsdXNpdmUobGUtPmRldmljZSwgRk1PREVfUkVBRHxGTU9ERV9XUklURSwgTlVMTCk7Ci0JaWYgKElTX0VSUihuLT5iZGV2KSkKLQkJcmV0dXJuIFBUUl9FUlIobi0+YmRldik7Ci0KLQlpZiAobi0+c2l6ZSAhPSAwKQotCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplLCBuLT5zaXplKTsKLQllbHNlCi0JCW4tPnNpemUgPSBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplOwotCi0Jbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7Ci0JZXJyID0gZHN0X25vZGVfaW5pdF9saXN0ZW5lZChuLCBsZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2NsZWFudXA7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9jbGVhbnVwOgotCWNsb3NlX2JkZXZfZXhjbHVzaXZlKG4tPmJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOwotCW4tPmJkZXYgPSBOVUxMOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogRW1wdHkgdGhyZWFkIHBvb2wgY2FsbGJhY2tzIGZvciB0aGUgbmV0d29yayBwcm9jZXNzaW5nIHRocmVhZHMuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRzdF90aHJlYWRfbmV0d29ya19pbml0KHZvaWQgKmRhdGEpCi17Ci0JZHByaW50aygiJXM6IGRhdGE6ICVwLlxuIiwgX19mdW5jX18sIGRhdGEpOwotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3RocmVhZF9uZXR3b3JrX2NsZWFudXAodm9pZCAqZGF0YSkKLXsKLQlkcHJpbnRrKCIlczogZGF0YTogJXAuXG4iLCBfX2Z1bmNfXywgZGF0YSk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBEU1Qgbm9kZSBhbmQgaW5pdGlhbGl6ZSBzb21lIG9mIGl0cyBwYXJhbWV0ZXJzLgotICovCi1zdGF0aWMgc3RydWN0IGRzdF9ub2RlICpkc3RfYWxsb2Nfbm9kZShzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQlpbnQgKCpzdGFydCkoc3RydWN0IGRzdF9ub2RlICopLAotCQlpbnQgbnVtKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbjsKLQlpbnQgZXJyOwotCi0JbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfbm9kZSksIEdGUF9LRVJORUwpOwotCWlmICghbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbi0+bm9kZV9lbnRyeSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbi0+c2VjdXJpdHlfbGlzdCk7Ci0JbXV0ZXhfaW5pdCgmbi0+c2VjdXJpdHlfbG9jayk7Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuLT53YWl0KTsKLQotCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoY3RsLT50cmFuc19zY2FuX3RpbWVvdXQpOwotCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0KQotCQluLT50cmFuc19zY2FuX3RpbWVvdXQgPSBIWjsKLQotCW4tPnRyYW5zX21heF9yZXRyaWVzID0gY3RsLT50cmFuc19tYXhfcmV0cmllczsKLQlpZiAoIW4tPnRyYW5zX21heF9yZXRyaWVzKQotCQluLT50cmFuc19tYXhfcmV0cmllcyA9IDEwOwotCi0JLyoKLQkgKiBQcmV0dHkgbXVjaCBhcmJpdHJhcnkgZGVmYXVsdCBudW1iZXJzLgotCSAqIDMyIG1hdGNoZXMgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgaW4gYmlvIG9yaWdpbmF0ZWQgZnJvbSBleHQzICgzMSkuCi0JICovCi0Jbi0+bWF4X3BhZ2VzID0gY3RsLT5tYXhfcGFnZXM7Ci0JaWYgKCFuLT5tYXhfcGFnZXMpCi0JCW4tPm1heF9wYWdlcyA9IDMyOwotCi0JaWYgKG4tPm1heF9wYWdlcyA+IDEwMjQpCi0JCW4tPm1heF9wYWdlcyA9IDEwMjQ7Ci0KLQluLT5zdGFydCA9IHN0YXJ0OwotCW4tPnNpemUgPSBjdGwtPnNpemU7Ci0KLQlhdG9taWNfc2V0KCZuLT5yZWZjbnQsIDEpOwotCWF0b21pY19sb25nX3NldCgmbi0+Z2VuLCAwKTsKLQlzbnByaW50ZihuLT5uYW1lLCBzaXplb2Yobi0+bmFtZSksICIlcyIsIGN0bC0+bmFtZSk7Ci0KLQllcnIgPSBkc3Rfbm9kZV9zeXNmc19pbml0KG4pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0Jbi0+cG9vbCA9IHRocmVhZF9wb29sX2NyZWF0ZShudW0sIG4tPm5hbWUsIGRzdF90aHJlYWRfbmV0d29ya19pbml0LAotCQkJZHN0X3RocmVhZF9uZXR3b3JrX2NsZWFudXAsIG4pOwotCWlmIChJU19FUlIobi0+cG9vbCkpIHsKLQkJZXJyID0gUFRSX0VSUihuLT5wb29sKTsKLQkJZ290byBlcnJfb3V0X3N5c2ZzX2V4aXQ7Ci0JfQotCi0JZHByaW50aygiJXM6IG46ICVwLCBuYW1lOiAlcy5cbiIsIF9fZnVuY19fLCBuLCBuLT5uYW1lKTsKLQotCXJldHVybiBuOwotCi1lcnJfb3V0X3N5c2ZzX2V4aXQ6Ci0JZHN0X25vZGVfc3lzZnNfZXhpdChuKTsKLWVycl9vdXRfZnJlZToKLQlrZnJlZShuKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIFN0YXJ0aW5nIGEgbm9kZSwgY29ubmVjdGVkIHRvIHRoZSByZW1vdGUgc2VydmVyOgotICogcmVnaXN0ZXIgYmxvY2sgZGV2aWNlIGFuZCBpbml0aWFsaXplIHRyYW5zYWN0aW9uIG1lY2hhbmlzbS4KLSAqIEluIHJldmVycyBvcmRlciB0aG91Z2guCi0gKgotICogSXQgd2lsbCBhdXRvbmVnb3RpYXRlIHNvbWUgcGFyYW1ldGVycyB3aXRoIHRoZSByZW1vdGUgbm9kZQotICogYW5kIHVwZGF0ZSBsb2NhbCBpZiBuZWVkZWQuCi0gKgotICogVHJhbnNhY3Rpb24gaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIHRoZSBsYXN0IHRoaW5nIGJlZm9yZQotICogc3RhcnRpbmcgdGhlIG5vZGUsIHNpbmNlIHRyYW5zYWN0aW9uIHNob3VsZCBpbmNsdWRlIG5vdCBvbmx5Ci0gKiBibG9jayBJTywgYnV0IGFsc28gY3J5cHRvIHJlbGF0ZWQgZGF0YSAoaWYgYW55KSwgd2hpY2ggYXJlCi0gKiBpbml0aWFsaXplZCBzZXBhcmF0ZWx5LgotICovCi1zdGF0aWMgaW50IGRzdF9zdGFydF9yZW1vdGUoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBkc3Rfbm9kZV90cmFuc19pbml0KG4sIHNpemVvZihzdHJ1Y3QgZHN0X3RyYW5zKSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGRzdF9ub2RlX2NyZWF0ZV9kaXNrKG4pOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlkc3Rfbm9kZV9zZXRfc2l6ZShuKTsKLQlhZGRfZGlzayhuLT5kaXNrKTsKLQotCWRwcmludGsoIkRTVDogc3RhcnRlZCByZW1vdGUgbm9kZSAnJXMnLCBtaW5vcjogJWQuXG4iLAotCQkJbi0+bmFtZSwgbi0+ZGlzay0+Zmlyc3RfbWlub3IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBBZGRpbmcgcmVtb3RlIG5vZGUgYW5kIGluaXRpYWxpemUgY29ubmVjdGlvbi4KLSAqLwotc3RhdGljIGludCBkc3RfYWRkX3JlbW90ZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcmN0bCA9IGRhdGE7Ci0KLQlpZiAobikKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbiA9IGRzdF9hbGxvY19ub2RlKGN0bCwgZHN0X3N0YXJ0X3JlbW90ZSwgMSk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweSgmbi0+aW5mby0+bmV0LCByY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOwotCWVyciA9IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKG4sIHJjdGwpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZHN0X25vZGVfYWRkKG4pOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZToKLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIEFkZGluZyBleHBvcnQgbm9kZTogaW5pdGlhbGl6aW5nIGJsb2NrIGRldmljZSBhbmQgbGlzdGVuaW5nIHNvY2tldC4KLSAqLwotc3RhdGljIGludCBkc3RfYWRkX2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSA9IGRhdGE7Ci0KLQlpZiAobikKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfY3RsKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQluID0gZHN0X2FsbG9jX25vZGUoY3RsLCBkc3Rfc3RhcnRfZXhwb3J0LCAyKTsKLQlpZiAoIW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXJyID0gZHN0X3NldHVwX2V4cG9ydChuLCBjdGwsIGxlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWRzdF9ub2RlX2FkZChuKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JZHN0X25vZGVfcHV0KG4pOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X25vZGVfcmVtb3ZlX3VubG9hZChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU1RPUFBFRCBuYW1lOiAnJXMnLCBzaXplOiAlbGx1LlxuIiwKLQkJCW4tPm5hbWUsIG4tPnNpemUpOwotCi0JaWYgKG4tPmRpc2spCi0JCWRlbF9nZW5kaXNrKG4tPmRpc2spOwotCi0JZHN0X25vZGVfcmVtb3ZlKG4pOwotCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7Ci0KLQkvKgotCSAqIFRoaXMgaXMgbm90IGEgaGFjay4gUmVhbGx5LgotCSAqIE5vZGUncyByZWZlcmVuY2UgY291bnRlciBhbGxvd3MgdG8gaW1wbGVtZW50IGZpbmUgZ3JhaW5lZAotCSAqIG5vZGUgZnJlZWluZywgYnV0IHNpbmNlIGFsbCB0cmFuc2FjdGlvbnMgKHdoaWNoIGhvbGQgbm9kZSdzCi0JICogcmVmZXJlbmNlIGNvdW50ZXIpIGFyZSBwcm9jZXNzZWQgaW4gdGhlIGRlZGljYXRlZCB0aHJlYWQsCi0JICogaXQgaXMgcG9zc2libGUgdGhhdCByZWZlcmVuY2Ugd2lsbCBoaXQgemVybyBpbiB0aGF0IHRocmVhZCwKLQkgKiBzbyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGV4aXQgdGhyZWFkIGFuZCBjbGVhbnVwIHRoZSBub2RlLgotCSAqCi0JICogU28sIHdlIHJlbW92ZSBkaXNrLCBzbyBubyBuZXcgYWN0aXZpdHkgaXMgcG9zc2libGUsIGFuZAotCSAqIHdhaXQgdW50aWwgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb24gYXJlIGNvbXBsZXRlZCAoZWl0aGVyCi0JICogaW4gcmVjZWl2aW5nIHRocmVhZCBvciBieSB0aW1lb3V0IGluIHdvcmtxdWV1ZSksIGluIHRoaXMKLQkgKiBjYXNlIHJlZmVyZW5jZSBjb3VudGVyIHdpbGwgYmUgbGVzcyBvciBlcXVhbCB0byAyIChvbmNlIHNldCBpbgotCSAqIGRzdF9hbGxvY19ub2RlKCkgYW5kIHRoZW4gaW4gY29ubmVjdG9yIG1lc3NhZ2UgcGFyc2VyOwotCSAqIG9yIHdoZW4gd2UgZm9yY2UgbW9kdWxlIHVubG9hZGluZywgYW5kIGNvbm5lY3RvciBtZXNzYWdlCi0JICogcGFyc2VyIGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UsIGluIHRoaXMgY2FzZSByZWZlcmVuY2UKLQkgKiBjb3VudGVyIHdpbGwgYmUgZXF1YWwgdG8gMSksCi0JICogYW5kIHN1YnNlcXVlbnQgZHN0X25vZGVfcHV0KCkgY2FsbHMgd2lsbCBmcmVlIHRoZSBub2RlLgotCSAqLwotCWRwcmludGsoIiVzOiBnb2luZyB0byBzbGVlcCB3aXRoICVkIHJlZmNudC5cbiIsCi0JCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJm4tPnJlZmNudCkpOwotCXdhaXRfZXZlbnQobi0+d2FpdCwgYXRvbWljX3JlYWQoJm4tPnJlZmNudCkgPD0gMik7Ci0KLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgbm9kZSBmcm9tIHRoZSBoYXNoIHRhYmxlLgotICovCi1zdGF0aWMgaW50IGRzdF9kZWxfbm9kZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWlmICghbikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gZHN0X25vZGVfcmVtb3ZlX3VubG9hZChuKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgY3J5cHRvIHByb2Nlc3NpbmcgZm9yIGdpdmVuIG5vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjcnlwdG8gPSBkYXRhOwotCi0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X2NyeXB0b19jdGwpICsgY3J5cHRvLT5oYXNoX2tleXNpemUgKwotCQkJY3J5cHRvLT5jaXBoZXJfa2V5c2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobi0+dHJhbnNfY2FjaGUpCi0JCXJldHVybiAtRUVYSVNUOwotCi0JcmV0dXJuIGRzdF9ub2RlX2NyeXB0b19pbml0KG4sIGNyeXB0byk7Ci19Ci0KLS8qCi0gKiBTZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBnaXZlbiBub2RlLgotICovCi1zdGF0aWMgaW50IGRzdF9zZWN1cml0eV9pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jc3RydWN0IGRzdF9zZWN1cmUgKnM7Ci0KLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X3NlY3VyZSksIEdGUF9LRVJORUwpOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoJnMtPnNlYywgZGF0YSwgc2l6ZSk7Ci0KLQltdXRleF9sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZzLT5zZWNfZW50cnksICZuLT5zZWN1cml0eV9saXN0KTsKLQltdXRleF91bmxvY2soJm4tPnNlY3VyaXR5X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBLaWxsJ2VtIGFsbCEKLSAqLwotc3RhdGljIGludCBkc3Rfc3RhcnRfbm9kZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWludCBlcnI7Ci0KLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKG4tPnRyYW5zX2NhY2hlKQotCQlyZXR1cm4gMDsKLQotCWVyciA9IG4tPnN0YXJ0KG4pOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTVEFSVEVEIG5hbWU6ICclcycsIHNpemU6ICVsbHUuXG4iLCBuLT5uYW1lLCBuLT5zaXplKTsKLQlyZXR1cm4gMDsKLX0KLQotdHlwZWRlZiBpbnQgKCpkc3RfY29tbWFuZF9mdW5jKShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKTsKLQotLyoKLSAqIExpc3Qgb2YgdXNlcnNwYWNlIGNvbW1hbmRzLgotICovCi1zdGF0aWMgZHN0X2NvbW1hbmRfZnVuYyBkc3RfY29tbWFuZHNbXSA9IHsKLQlbRFNUX0FERF9SRU1PVEVdID0gJmRzdF9hZGRfcmVtb3RlLAotCVtEU1RfQUREX0VYUE9SVF0gPSAmZHN0X2FkZF9leHBvcnQsCi0JW0RTVF9ERUxfTk9ERV0gPSAmZHN0X2RlbF9ub2RlLAotCVtEU1RfQ1JZUFRPXSA9ICZkc3RfY3J5cHRvX2luaXQsCi0JW0RTVF9TRUNVUklUWV0gPSAmZHN0X3NlY3VyaXR5X2luaXQsCi0JW0RTVF9TVEFSVF0gPSAmZHN0X3N0YXJ0X25vZGUsCi19OwotCi0vKgotICogQ29uZmlndXJhdGlvbiBwYXJzZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGNuX2RzdF9jYWxsYmFjayhzdHJ1Y3QgY25fbXNnICptc2csIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqbnNwKQotewotCXN0cnVjdCBkc3RfY3RsICpjdGw7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X2N0bF9hY2sgYWNrOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IE5VTEwsICp0bXA7Ci0JdW5zaWduZWQgaW50IGhhc2g7Ci0KLQlpZiAoIWNhcF9yYWlzZWQobnNwLT5lZmZfY2FwLCBDQVBfU1lTX0FETUlOKSkgewotCQllcnIgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChtc2ctPmxlbiA8IHNpemVvZihzdHJ1Y3QgZHN0X2N0bCkpIHsKLQkJZXJyID0gLUVCQURNU0c7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWN0bCA9IChzdHJ1Y3QgZHN0X2N0bCAqKW1zZy0+ZGF0YTsKLQotCWlmIChjdGwtPmNtZCA+PSBEU1RfQ01EX01BWCkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaGFzaCA9IGRzdF9oYXNoKGN0bC0+bmFtZSwgc2l6ZW9mKGN0bC0+bmFtZSkpOwotCi0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZkc3RfaGFzaHRhYmxlW2hhc2hdLCBub2RlX2VudHJ5KSB7Ci0JCWlmICghbWVtY21wKHRtcC0+bmFtZSwgY3RsLT5uYW1lLCBzaXplb2YodG1wLT5uYW1lKSkpIHsKLQkJCW4gPSB0bXA7Ci0JCQlkc3Rfbm9kZV9nZXQobik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotCi0JZXJyID0gZHN0X2NvbW1hbmRzW2N0bC0+Y21kXShuLCBjdGwsIG1zZy0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgZHN0X2N0bCksCi0JCQltc2ctPmxlbiAtIHNpemVvZihzdHJ1Y3QgZHN0X2N0bCkpOwotCi0JZHN0X25vZGVfcHV0KG4pOwotb3V0OgotCW1lbWNweSgmYWNrLm1zZywgbXNnLCBzaXplb2Yoc3RydWN0IGNuX21zZykpOwotCi0JYWNrLm1zZy5hY2sgPSBtc2ctPmFjayArIDE7Ci0JYWNrLm1zZy5sZW4gPSBzaXplb2Yoc3RydWN0IGRzdF9jdGxfYWNrKSAtIHNpemVvZihzdHJ1Y3QgY25fbXNnKTsKLQotCWFjay5lcnJvciA9IGVycjsKLQotCWNuX25ldGxpbmtfc2VuZCgmYWNrLm1zZywgMCwgR0ZQX0tFUk5FTCk7Ci19Ci0KLS8qCi0gKiBHbG9iYWwgaW5pdGlhbGl6YXRpb246IHN5c2ZzLCBoYXNoIHRhYmxlLCBibG9jayBkZXZpY2UgcmVnaXN0cmF0aW9uLAotICogY29ubmVjdG9yIGFuZCB2YXJpb3VzIGNhY2hlcy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgZHN0X3N5c2ZzX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gYnVzX3JlZ2lzdGVyKCZkc3RfZGV2X2J1c190eXBlKTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X3N5c2ZzX2V4aXQodm9pZCkKLXsKLQlidXNfdW5yZWdpc3RlcigmZHN0X2Rldl9idXNfdHlwZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRzdF9oYXNodGFibGVfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZHN0X2hhc2h0YWJsZSA9IGtjYWxsb2MoZHN0X2hhc2h0YWJsZV9zaXplLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWRzdF9oYXNodGFibGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IGRzdF9oYXNodGFibGVfc2l6ZTsgKytpKQotCQlJTklUX0xJU1RfSEVBRCgmZHN0X2hhc2h0YWJsZVtpXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHN0X2hhc2h0YWJsZV9leGl0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IGRzdF9ub2RlICpuLCAqdG1wOwotCi0JZm9yIChpID0gMDsgaSA8IGRzdF9oYXNodGFibGVfc2l6ZTsgKytpKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuLCB0bXAsICZkc3RfaGFzaHRhYmxlW2ldLCBub2RlX2VudHJ5KSB7Ci0JCQlkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOwotCQl9Ci0JfQotCi0Ja2ZyZWUoZHN0X2hhc2h0YWJsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRzdF9zeXNfaW5pdCh2b2lkKQotewotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JZXJyID0gZHN0X2hhc2h0YWJsZV9pbml0KCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQllcnIgPSBkc3RfZXhwb3J0X2luaXQoKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfaGFzaHRhYmxlX2V4aXQ7Ci0KLQllcnIgPSByZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyX291dF9leHBvcnRfZXhpdDsKLQlpZiAoZXJyKQotCQlkc3RfbWFqb3IgPSBlcnI7Ci0KLQllcnIgPSBkc3Rfc3lzZnNfaW5pdCgpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyOwotCi0JZXJyID0gY25fYWRkX2NhbGxiYWNrKCZjbl9kc3RfaWQsICJEU1QiLCBjbl9kc3RfY2FsbGJhY2spOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9zeXNmc19leGl0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRGlzdHJpYnV0ZWQgc3RvcmFnZSwgJyVzJyByZWxlYXNlLlxuIiwgZHN0X25hbWUpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfc3lzZnNfZXhpdDoKLQlkc3Rfc3lzZnNfZXhpdCgpOwotZXJyX291dF91bnJlZ2lzdGVyOgotCXVucmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOwotZXJyX291dF9leHBvcnRfZXhpdDoKLQlkc3RfZXhwb3J0X2V4aXQoKTsKLWVycl9vdXRfaGFzaHRhYmxlX2V4aXQ6Ci0JZHN0X2hhc2h0YWJsZV9leGl0KCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRzdF9zeXNfZXhpdCh2b2lkKQotewotCWNuX2RlbF9jYWxsYmFjaygmY25fZHN0X2lkKTsKLQl1bnJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKLQlkc3RfaGFzaHRhYmxlX2V4aXQoKTsKLQlkc3Rfc3lzZnNfZXhpdCgpOwotCWRzdF9leHBvcnRfZXhpdCgpOwotfQotCi1tb2R1bGVfaW5pdChkc3Rfc3lzX2luaXQpOwotbW9kdWxlX2V4aXQoZHN0X3N5c19leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJEaXN0cmlidXRlZCBzdG9yYWdlIik7Ci1NT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMyNDIzMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYwICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi0vKgotICogRXhwb3J0IGJpb3NldCBpcyB1c2VkIGZvciBzZXJ2ZXIgYmxvY2sgSU8gcmVxdWVzdHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYmlvX3NldCAqZHN0X2Jpb19zZXQ7Ci0KLWludCBfX2luaXQgZHN0X2V4cG9ydF9pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlkc3RfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoMzIsIHNpemVvZihzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7Ci0JaWYgKCFkc3RfYmlvX3NldCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgZHN0X2V4cG9ydF9leGl0KHZvaWQpCi17Ci0JYmlvc2V0X2ZyZWUoZHN0X2Jpb19zZXQpOwotfQotCi0vKgotICogV2hlbiBjbGllbnQgY29ubmVjdHMgYW5kIGF1dG9uZWdvdGlhdGVzIHdpdGggdGhlIHNlcnZlciBub2RlLAotICogaXRzIHBlcm1pc3Npb25zIGFyZSBjaGVja2VkIGluIGEgc2VjdXJpdHkgYXR0cmlidXRlcyBhbmQgc2VudAotICogYmFjay4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkc3RfY2hlY2tfcGVybWlzc2lvbnMoc3RydWN0IGRzdF9zdGF0ZSAqbWFpbiwKLQkJc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gbWFpbi0+bm9kZTsKLQlzdHJ1Y3QgZHN0X3NlY3VyZSAqc2VudHJ5OwotCXN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIgKnM7Ci0Jc3RydWN0IHNhZGRyICpzYSA9ICZzdC0+Y3RsLmFkZHI7Ci0JdW5zaWduZWQgaW50IHBlcm0gPSAwOwotCi0JbXV0ZXhfbG9jaygmbi0+c2VjdXJpdHlfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZW50cnksICZuLT5zZWN1cml0eV9saXN0LCBzZWNfZW50cnkpIHsKLQkJcyA9ICZzZW50cnktPnNlYzsKLQotCQlpZiAocy0+YWRkci5zYV9mYW1pbHkgIT0gc2EtPnNhX2ZhbWlseSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzLT5hZGRyLnNhX2RhdGFfbGVuICE9IHNhLT5zYV9kYXRhX2xlbikKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIFRoaXMgJzInIGJlbG93IGlzIGEgcG9ydCBmaWVsZC4gVGhpcyBtYXkgYmUgdmVyeSB3cm9uZyB0byBkbwotCQkgKiBpbiBhdGFsayBmb3IgZXhhbXBsZSB0aG91Z2guIElmIHRoZXJlIHdpbGwgYmUgYW55IG5lZWQKLQkJICogdG8gZXh0ZW50IHByb3RvY29sIHRvIHNvbWV0aGluZyBlbHNlLCBJIGNhbiBjcmVhdGUKLQkJICogcGVyLWZhbWlseSBoZWxwZXJzIGFuZCB1c2UgdGhlbSBpbnN0ZWFkIG9mIHRoaXMgbWVtY21wLgotCQkgKi8KLQkJaWYgKG1lbWNtcChzLT5hZGRyLnNhX2RhdGEgKyAyLCBzYS0+c2FfZGF0YSArIDIsCi0JCQkJCXNhLT5zYV9kYXRhX2xlbiAtIDIpKQotCQkJY29udGludWU7Ci0KLQkJcGVybSA9IHMtPnBlcm1pc3Npb25zOwotCX0KLQltdXRleF91bmxvY2soJm4tPnNlY3VyaXR5X2xvY2spOwotCi0JcmV0dXJuIHBlcm07Ci19Ci0KLS8qCi0gKiBBY2NlcHQgbmV3IGNsaWVudDogYWxsb2NhdGUgYXBwcm9wcmlhdGUgbmV0d29yayBzdGF0ZSBhbmQgY2hlY2sgcGVybWlzc2lvbnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHN0X3N0YXRlICpkc3RfYWNjZXB0X2NsaWVudChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IDA7Ci0JdW5zaWduZWQgaW50IGVycl9tYXNrID0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSBlcnJfbWFzayB8IFBPTExJTjsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpuZXc7Ci0KLQl3aGlsZSAoIWVyciAmJiAhc29jaykgewotCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOwotCi0JCWlmICghKHJldmVudHMgJiBtYXNrKSkgewotCQkJREVGSU5FX1dBSVQod2FpdCk7Ci0KLQkJCWZvciAoOzspIHsKLQkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwKLQkJCQkJCSZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJCWJyZWFrOwotCi0JCQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKLQotCQkJCWlmIChyZXZlbnRzICYgbWFzaykKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJCWJyZWFrOwotCi0JCQkJLyoKLQkJCQkgKiBNYWdpYyBIWj8gUG9sbGluZyBjaGVjayBhYm92ZSBpcyBub3Qgc2FmZSBpbgotCQkJCSAqIGFsbCBjYXNlcyAobGlrZSBzb2NrZXQgcmVzZXQgaW4gQkggY29udGV4dCksCi0JCQkJICogc28gaXQgaXMgc2ltcGxlciBqdXN0IHRvIHBvc3Rwb25lIGl0IHRvIHRoZQotCQkJCSAqIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIGltcGxlbWVudGluZwotCQkJCSAqIHNwZWNpYWwgbG9ja2luZyB0aGVyZS4KLQkJCQkgKi8KLQkJCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQkJCX0KLQkJCWZpbmlzaF93YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0KTsKLQkJfQotCi0JCWVyciA9IC1FQ09OTlJFU0VUOwotCQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0KLQkJZHByaW50aygiJXM6IHN0OiAlcCwgcmV2ZW50czogJXggW2VycjogJWQsIGluOiAlZF0uXG4iLAotCQkJX19mdW5jX18sIHN0LCByZXZlbnRzLCByZXZlbnRzICYgZXJyX21hc2ssCi0JCQlyZXZlbnRzICYgUE9MTElOKTsKLQotCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrKSB7Ci0JCQlkcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIGVycjogJWQuXG4iLAotCQkJCQlfX2Z1bmNfXywgcmV2ZW50cywgc3QtPnNvY2tldCwgZXJyKTsKLQkJCWVyciA9IC1FQ09OTlJFU0VUOwotCQl9Ci0KLQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCWVyciA9IC1FTk9ERVY7Ci0KLQkJaWYgKHN0LT5zb2NrZXQgJiYgKHJldmVudHMgJiBQT0xMSU4pKQotCQkJZXJyID0ga2VybmVsX2FjY2VwdChzdC0+c29ja2V0LCAmc29jaywgMCk7Ci0KLQkJZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0JfQotCi0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQluZXcgPSBkc3Rfc3RhdGVfYWxsb2Moc3QtPm5vZGUpOwotCWlmIChJU19FUlIobmV3KSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQl9Ci0JbmV3LT5zb2NrZXQgPSBzb2NrOwotCi0JbmV3LT5jdGwuYWRkci5zYV9kYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpOwotCWVyciA9IGtlcm5lbF9nZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCi0JCQkoaW50ICopJm5ldy0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQluZXctPnBlcm1pc3Npb25zID0gZHN0X2NoZWNrX3Blcm1pc3Npb25zKHN0LCBuZXcpOwotCWlmIChuZXctPnBlcm1pc3Npb25zID09IDApIHsKLQkJZXJyID0gLUVQRVJNOwotCQlkc3RfZHVtcF9hZGRyKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKLQkJCQkiQ2xpZW50IGlzIG5vdCBhbGxvd2VkIHRvIGNvbm5lY3QiKTsKLQkJZ290byBlcnJfb3V0X3B1dDsKLQl9Ci0KLQllcnIgPSBkc3RfcG9sbF9pbml0KG5ldyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCWRzdF9kdW1wX2FkZHIoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAotCQkJIkNvbm5lY3RlZCBjbGllbnQiKTsKLQotCXJldHVybiBuZXc7Ci0KLWVycl9vdXRfcHV0OgotCWRzdF9zdGF0ZV9wdXQobmV3KTsKLWVycl9vdXRfcmVsZWFzZToKLQlzb2NrX3JlbGVhc2Uoc29jayk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotLyoKLSAqIEVhY2ggc2VydmVyJ3MgYmxvY2sgcmVxdWVzdCBzb21ldGltZSBmaW5pc2hlcy4KLSAqIFVzdWFsbHkgaXQgaGFwcGVucyBpbiBoYXJkIGlycSBjb250ZXh0IG9mIHRoZSBhcHByb3ByaWF0ZSBjb250cm9sbGVyLAotICogc28gdG8gcGxheSBnb29kIHdpdGggYWxsIGNhc2VzIHdlIGp1c3QgcXVldWUgQklPIGludG8gdGhlIHF1ZXVlCi0gKiBhbmQgd2FrZSB1cCBwcm9jZXNzaW5nIHRocmVhZCwgd2hpY2ggZ2V0cyBjb21wbGV0ZWQgcmVxdWVzdCBhbmQKLSAqIHNlbmQgKGVuY3J5cHRpbmcgaWYgbmVlZGVkKSBpdCBiYWNrIHRvIHRoZSBjbGllbnQgKGlmIGl0IHdhcyBhIHJlYWQKLSAqIHJlcXVlc3QpLCBvciBzZW5kcyBiYWNrIHJlcGx5IHRoYXQgd3JpdGluZyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLgotICovCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IE5VTEw7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCWludCBlcnIgPSAwOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCQlpZiAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCQlwID0gbGlzdF9maXJzdF9lbnRyeSgmc3QtPnJlcXVlc3RfbGlzdCwKLQkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKLQkJCWxpc3RfZGVsKCZwLT5yZXF1ZXN0X2VudHJ5KTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKCFwKQotCQkJYnJlYWs7Ci0KLQkJYmlvID0gcC0+YmlvOwotCi0JCWlmIChkc3RfbmVlZF9jcnlwdG8oc3QtPm5vZGUpICYmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSkKLQkJCWVyciA9IGRzdF9leHBvcnRfY3J5cHRvKHN0LT5ub2RlLCBiaW8pOwotCQllbHNlCi0JCQllcnIgPSBkc3RfZXhwb3J0X3NlbmRfYmlvKGJpbyk7Ci0KLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDbGVhbnVwIGV4cG9ydCBzdGF0ZS4KLSAqIEl0IGhhcyB0byB3YWl0IHVudGlsIGFsbCByZXF1ZXN0cyBhcmUgZmluaXNoZWQsCi0gKiBhbmQgdGhlbiBmcmVlIHRoZW0gYWxsLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfc3RhdGVfY2xlYW51cF9leHBvcnQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBUaGlzIGxvb3Agd2FpdHMgZm9yIGFsbCBwZW5kaW5nIGJpb3MgdG8gYmUgY29tcGxldGVkIGFuZCBmcmVlZC4KLQkgKi8KLQl3aGlsZSAoYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID4gMSkgewotCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLCBsaXN0X2VtcHR5OiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCksCi0JCQkJbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpOwotCQl3YWl0X2V2ZW50X3RpbWVvdXQoc3QtPnRocmVhZF93YWl0LAotCQkJCShhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPT0gMSkgfHwKLQkJCQkhbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCksCi0JCQkJSFovMik7Ci0KLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgewotCQkJcCA9IE5VTEw7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCQkJaWYgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgewotCQkJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdC0+cmVxdWVzdF9saXN0LAotCQkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKLQkJCQlsaXN0X2RlbCgmcC0+cmVxdWVzdF9lbnRyeSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0KLQkJCWlmIChwKQotCQkJCWJpb19wdXQocC0+YmlvKTsKLQotCQkJZHByaW50aygiJXM6IHN0OiAlcCwgcmVmY250OiAlZCwgbGlzdF9lbXB0eTogJWQsIHA6ICIKLQkJCQkiJXAuXG4iLCBfX2Z1bmNfXywgc3QsIGF0b21pY19yZWFkKCZzdC0+cmVmY250KSwKLQkJCQlsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSwgcCk7Ci0JCX0KLQl9Ci0KLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLX0KLQotLyoKLSAqIENsaWVudCBhY2NlcHRpbmcgdGhyZWFkLgotICogTm90IG9ubHkgYWNjZXB0cyBuZXcgY29ubmVjdGlvbiwgYnV0IGFsc28gc2NoZWR1bGVzIHJlY2VpdmluZyB0aHJlYWQKLSAqIGFuZCBwZXJmb3JtcyByZXF1ZXN0IGNvbXBsZXRpb24gZGVzY3JpYmVkIGFib3ZlLgotICovCi1zdGF0aWMgaW50IGRzdF9hY2NlcHQodm9pZCAqaW5pdF9kYXRhLCB2b2lkICpzY2hlZHVsZV9kYXRhKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKm1haW5fc3QgPSBzY2hlZHVsZV9kYXRhOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGluaXRfZGF0YTsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKLQlpbnQgZXJyOwotCi0Jd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCAmJiAhbWFpbl9zdC0+bmVlZF9leGl0KSB7Ci0JCWRwcmludGsoIiVzOiBtYWluX3N0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCwgbik7Ci0JCXN0ID0gZHN0X2FjY2VwdF9jbGllbnQobWFpbl9zdCk7Ci0JCWlmIChJU19FUlIoc3QpKQotCQkJY29udGludWU7Ci0KLQkJZXJyID0gZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0KTsKLQkJaWYgKCFlcnIpIHsKLQkJCXdoaWxlIChuLT50cmFuc19zY2FuX3RpbWVvdXQpIHsKLQkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzdC0+dGhyZWFkX3dhaXQsCi0JCQkJCSFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSB8fAotCQkJCQkhbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8Ci0JCQkJCXN0LT5uZWVkX2V4aXQsCi0JCQkJCUhaKTsKLQotCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKGxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKQotCQkJCQljb250aW51ZTsKLQotCQkJCWVyciA9IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0KTsKLQkJCQlpZiAoZXJyKQotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJc3QtPm5lZWRfZXhpdCA9IDE7Ci0JCQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOwotCQl9Ci0KLQkJZHN0X3N0YXRlX2NsZWFudXBfZXhwb3J0KHN0KTsKLQl9Ci0KLQlkcHJpbnRrKCIlczogZnJlZWluZyBsaXN0ZW5pbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0KTsKLQotCWRzdF9zdGF0ZV9sb2NrKG1haW5fc3QpOwotCWRzdF9wb2xsX2V4aXQobWFpbl9zdCk7Ci0JZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKG1haW5fc3QpOwotCWRzdF9zdGF0ZV91bmxvY2sobWFpbl9zdCk7Ci0JZHN0X3N0YXRlX3B1dChtYWluX3N0KTsKLQlkcHJpbnRrKCIlczogZnJlZWQgbGlzdGVuaW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzdF9zdGFydF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWlmIChsaXN0X2VtcHR5KCZuLT5zZWN1cml0eV9saXN0KSkgewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBhcmUgdHJ5aW5nIHRvIGV4cG9ydCBub2RlICclcycgIgotCQkJCSJ3aXRob3V0IHNlY3VyaXR5IGF0dHJpYnV0ZXMuXG5ObyBjbGllbnRzIHdpbGwgIgotCQkJCSJiZSBhbGxvd2VkIHRvIGNvbm5lY3QuIEV4aXRpbmcuXG4iLCBuLT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiBkc3Rfbm9kZV90cmFuc19pbml0KG4sIHNpemVvZihzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGxpc3RlbmluZyBzdGF0ZSBhbmQgc2NoZWR1bGUgYWNjZXB0aW5nIHRocmVhZC4KLSAqLwotaW50IGRzdF9ub2RlX2luaXRfbGlzdGVuZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OwotCWludCBlcnIgPSAtRU5PTUVNOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKmN0bCA9ICZsZS0+Y3RsOwotCi0JbWVtY3B5KCZuLT5pbmZvLT5uZXQsIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKLQotCXN0ID0gZHN0X3N0YXRlX2FsbG9jKG4pOwotCWlmIChJU19FUlIoc3QpKSB7Ci0JCWVyciA9IFBUUl9FUlIoc3QpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0JbWVtY3B5KCZzdC0+Y3RsLCBjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7Ci0KLQllcnIgPSBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCXN0LT5zb2NrZXQtPnNrLT5za19yZXVzZSA9IDE7Ci0KLQllcnIgPSBrZXJuZWxfYmluZChzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJmN0bC0+YWRkciwKLQkJCWN0bC0+YWRkci5zYV9kYXRhX2xlbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOwotCi0JZXJyID0ga2VybmVsX2xpc3RlbihzdC0+c29ja2V0LCAxMDI0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7Ci0Jbi0+c3RhdGUgPSBzdDsKLQotCWVyciA9IGRzdF9wb2xsX2luaXQoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKLQotCWRzdF9zdGF0ZV9nZXQoc3QpOwotCi0JZXJyID0gdGhyZWFkX3Bvb2xfc2NoZWR1bGUobi0+cG9vbCwgZHN0X3RocmVhZF9zZXR1cCwKLQkJCWRzdF9hY2NlcHQsIHN0LCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3BvbGxfZXhpdDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3BvbGxfZXhpdDoKLQlkc3RfcG9sbF9leGl0KHN0KTsKLWVycl9vdXRfc29ja2V0X3JlbGVhc2U6Ci0JZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0KTsKLWVycl9vdXRfcHV0OgotCWRzdF9zdGF0ZV9wdXQoc3QpOwotZXJyX291dF9leGl0OgotCW4tPnN0YXRlID0gTlVMTDsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogRnJlZSBiaW8gYW5kIHJlbGF0ZWQgcHJpdmF0ZSBkYXRhLgotICogQWxzbyBkcm9wIGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIGFwcHJvcHJpYXRlIHN0YXRlLAotICogd2hpY2ggd2FpdHMgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBibG9jayBJT3MgaW4tZmxpZ2h0LgotICovCi1zdGF0aWMgdm9pZCBkc3RfYmlvX2Rlc3RydWN0b3Ioc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwcml2ID0gYmlvLT5iaV9wcml2YXRlOwotCWludCBpOwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlpZiAoIWJ2LT5idl9wYWdlKQotCQkJYnJlYWs7Ci0KLQkJX19mcmVlX3BhZ2UoYnYtPmJ2X3BhZ2UpOwotCX0KLQotCWlmIChwcml2KQotCQlkc3Rfc3RhdGVfcHV0KHByaXYtPnN0YXRlKTsKLQliaW9fZnJlZShiaW8sIGRzdF9iaW9fc2V0KTsKLX0KLQotLyoKLSAqIEJsb2NrIElPIGNvbXBsZXRpb24uIFF1ZXVlIHJlcXVlc3QgdG8gYmUgc2VudCBiYWNrIHRvCi0gKiB0aGUgY2xpZW50IChvciBqdXN0IGNvbmZpcm1hdGlvbikuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKLXsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gcC0+c3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcC0+cmVxdWVzdF9lbnRyeSwgJnN0LT5yZXF1ZXN0X2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSByZWFkIHJlcXVlc3QgZm9yIHRoZSBzZXJ2ZXIuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9yZWFkX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgZXJyOwotCi0Jd2hpbGUgKHRvdGFsX3NpemUpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGFnZSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSwgdG90YWxfc2l6ZSk7Ci0KLQkJZXJyID0gYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgc2l6ZSwgMCk7Ci0JCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJCXNpemUsIGVycik7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2U7Ci0KLQkJdG90YWxfc2l6ZSAtPSBzaXplOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfcGFnZToKLQlfX2ZyZWVfcGFnZShwYWdlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQWxsb2NhdGUgd3JpdGUgcmVxdWVzdCBmb3IgdGhlIHNlcnZlci4KLSAqIFNob3VsZCBub3Qgb25seSBnZXQgcGFnZXMsIGJ1dCBhbHNvIHJlYWQgZGF0YSBmcm9tIHRoZSBuZXR3b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCwKLQkJc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl2b2lkICpkYXRhOwotCWludCBlcnI7Ci0KLQl3aGlsZSAodG90YWxfc2l6ZSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFwYWdlKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJZGF0YSA9IGttYXAocGFnZSk7Ci0JCWlmICghZGF0YSkKLQkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2U7Ci0KLQkJc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFLCB0b3RhbF9zaXplKTsKLQotCQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBkYXRhLCBzaXplKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF91bm1hcF9wYWdlOwotCi0JCWVyciA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHNpemUsIDApOwotCQlpZiAoZXJyIDw9IDApCi0JCQlnb3RvIGVycl9vdXRfdW5tYXBfcGFnZTsKLQotCQlrdW5tYXAocGFnZSk7Ci0KLQkJdG90YWxfc2l6ZSAtPSBzaXplOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3VubWFwX3BhZ2U6Ci0Ja3VubWFwKHBhZ2UpOwotZXJyX291dF9mcmVlX3BhZ2U6Ci0JX19mcmVlX3BhZ2UocGFnZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIEdyb292eSwgd2UndmUgZ290dGVuIGFuIElPIHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LgotICogQWxsb2NhdGUgQklPIGZyb20gdGhlIGJpb3NldCwgcHJpdmF0ZSBkYXRhIGZyb20gdGhlIG1lbXBvb2wKLSAqIGFuZCBsb3RzIG9mIHBhZ2VzIGZvciBJTy4KLSAqLwotaW50IGRzdF9wcm9jZXNzX2lvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcHJpdjsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmICh1bmxpa2VseSghbi0+YmRldikpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JYmlvID0gYmlvX2FsbG9jX2Jpb3NldChHRlBfS0VSTkVMLAotCQkJUEFHRV9BTElHTihjbWQtPnNpemUpID4+IFBBR0VfU0hJRlQsCi0JCQlkc3RfYmlvX3NldCk7Ci0JaWYgKCFiaW8pCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JcHJpdiA9IChzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICopKCgodm9pZCAqKWJpbykgLQotCQkJc2l6ZW9mIChzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7Ci0KLQlwcml2LT5zdGF0ZSA9IGRzdF9zdGF0ZV9nZXQoc3QpOwotCXByaXYtPmJpbyA9IGJpbzsKLQotCWJpby0+YmlfcHJpdmF0ZSA9IHByaXY7Ci0JYmlvLT5iaV9lbmRfaW8gPSBkc3RfYmlvX2VuZF9pbzsKLQliaW8tPmJpX2Rlc3RydWN0b3IgPSBkc3RfYmlvX2Rlc3RydWN0b3I7Ci0JYmlvLT5iaV9iZGV2ID0gbi0+YmRldjsKLQotCS8qCi0JICogU2VydmVyIHNpZGUgaXMgb25seSBpbnRlcmVzdGVkIGluIHR3byBsb3cgYml0czoKLQkgKiB1cHRvZGF0ZSAoc2V0IGJ5IGl0c2VsZiBhY3R1YWxseSkgYW5kIHJ3IGJsb2NrCi0JICovCi0JYmlvLT5iaV9mbGFncyB8PSBjbWQtPmZsYWdzICYgMzsKLQotCWJpby0+YmlfcncgPSBjbWQtPnJ3OwotCWJpby0+Ymlfc2l6ZSA9IDA7Ci0JYmlvLT5iaV9zZWN0b3IgPSBjbWQtPnNlY3RvcjsKLQotCWRzdF9iaW9fdG9fY21kKGJpbywgJnByaXYtPmNtZCwgRFNUX0lPX1JFU1BPTlNFLCBjbWQtPmlkKTsKLQotCXByaXYtPmNtZC5mbGFncyA9IDA7Ci0JcHJpdi0+Y21kLnNpemUgPSBjbWQtPnNpemU7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHByaXYtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlOwotCi0JCWVyciA9IGRzdF9leHBvcnRfd3JpdGVfcmVxdWVzdChzdCwgYmlvLCBjbWQtPnNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkKLQkJCXJldHVybiBkc3RfZXhwb3J0X2NyeXB0byhuLCBiaW8pOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9leHBvcnRfcmVhZF9yZXF1ZXN0KGJpbywgY21kLT5zaXplKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGRpcjogJWx1LCBmbGFnczogJWx4LCBwaHlzOiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJYmlvLT5iaV9ydywgYmlvX2RhdGFfZGlyKGJpbyksCi0JCQliaW8tPmJpX2ZsYWdzLCBiaW8tPmJpX3BoeXNfc2VnbWVudHMpOwotCi0JZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JYmlvX3B1dChiaW8pOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBPaywgYmxvY2sgSU8gaXMgcmVhZHksIGxldCdzIHNlbmQgaXQgYmFjayB0byB0aGUgY2xpZW50Li4uCi0gKi8KLWludCBkc3RfZXhwb3J0X3NlbmRfYmlvKHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gcC0+c3RhdGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9ICZwLT5jbWQ7Ci0JaW50IGVycjsKLQotCWRwcmludGsoIiVzOiBpZDogJWxsdSwgYmlvOiAlbGx1LyV1LCBjc2l6ZTogJXUsIGZsYWdzOiAlbHUsIHJ3OiAlbHUuXG4iLAotCQkJX19mdW5jX18sIGNtZC0+aWQsICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKLQkJCWNtZC0+Y3NpemUsIGJpby0+YmlfZmxhZ3MsIGJpby0+YmlfcncpOwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JaWYgKCFzdC0+c29ja2V0KSB7Ci0JCWVyciA9IC1FQ09OTlJFU0VUOwotCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0KLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQkvKiAuLi4gb3IganVzdCBjb25maXJtYXRpb24gdGhhdCB3cml0aW5nIGhhcyBjb21wbGV0ZWQuICovCi0JCWNtZC0+c2l6ZSA9IGNtZC0+Y3NpemUgPSAwOwotCQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCi0JCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9zZW5kX2JpbyhzdCwgY21kLCBiaW8pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQl9Ci0KLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gMDsKLQotZXJyX291dF91bmxvY2s6Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhMDVlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3N0YXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NDQgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbjYuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi0vKgotICogUG9sbGluZyBtYWNoaW5lcnkuCi0gKi8KLQotc3RydWN0IGRzdF9wb2xsX2hlbHBlciB7Ci0JcG9sbF90YWJsZQkJcHQ7Ci0Jc3RydWN0IGRzdF9zdGF0ZQkqc3Q7Ci19OwotCi1zdGF0aWMgaW50IGRzdF9xdWV1ZV93YWtlKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwKLQkJaW50IHN5bmMsIHZvaWQgKmtleSkKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3QgZHN0X3N0YXRlLCB3YWl0KTsKLQotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9xdWV1ZV9mdW5jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQsCi0JCQkJIHBvbGxfdGFibGUgKnB0KQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHB0LCBzdHJ1Y3QgZHN0X3BvbGxfaGVscGVyLCBwdCktPnN0OwotCi0Jc3QtPndoZWFkID0gd2hlYWQ7Ci0JaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmc3QtPndhaXQsIGRzdF9xdWV1ZV93YWtlKTsKLQlhZGRfd2FpdF9xdWV1ZSh3aGVhZCwgJnN0LT53YWl0KTsKLX0KLQotdm9pZCBkc3RfcG9sbF9leGl0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWlmIChzdC0+d2hlYWQpIHsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoc3QtPndoZWFkLCAmc3QtPndhaXQpOwotCQlzdC0+d2hlYWQgPSBOVUxMOwotCX0KLX0KLQotaW50IGRzdF9wb2xsX2luaXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9wb2xsX2hlbHBlciBwaDsKLQotCXBoLnN0ID0gc3Q7Ci0JaW5pdF9wb2xsX2Z1bmNwdHIoJnBoLnB0LCAmZHN0X3F1ZXVlX2Z1bmMpOwotCi0Jc3QtPnNvY2tldC0+b3BzLT5wb2xsKE5VTEwsIHN0LT5zb2NrZXQsICZwaC5wdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBIZWFkZXIgcmVjZWl2aW5nIGZ1bmN0aW9uIC0gbWF5IGJsb2NrLgotICovCi1zdGF0aWMgaW50IGRzdF9kYXRhX3JlY3ZfaGVhZGVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgYmxvY2spCi17Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGt2ZWMgaW92OwotCWludCBlcnI7Ci0KLQlpb3YuaW92X2Jhc2UgPSBkYXRhOwotCWlvdi5pb3ZfbGVuID0gc2l6ZTsKLQotCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7Ci0JbXNnLm1zZ19pb3ZsZW4gPSAxOwotCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLm1zZ19uYW1lbGVuID0gMDsKLQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7Ci0JbXNnLm1zZ19mbGFncyA9IChibG9jaykgPyBNU0dfV0FJVEFMTCA6IE1TR19ET05UV0FJVDsKLQotCWVyciA9IGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAotCQkJbXNnLm1zZ19mbGFncyk7Ci0JaWYgKGVyciAhPSBzaXplKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEhlYWRlciBzZW5kaW5nIGZ1bmN0aW9uIC0gbWF5IGJsb2NrLgotICovCi1pbnQgZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBtb3JlKQotewotCXN0cnVjdCBtc2doZHIgbXNnOwotCXN0cnVjdCBrdmVjIGlvdjsKLQlpbnQgZXJyOwotCi0JaW92Lmlvdl9iYXNlID0gZGF0YTsKLQlpb3YuaW92X2xlbiA9IHNpemU7Ci0KLQltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OwotCW1zZy5tc2dfaW92bGVuID0gMTsKLQltc2cubXNnX25hbWUgPSBOVUxMOwotCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTCB8IChtb3JlID8gTVNHX01PUkUgOiAwKTsKLQotCWVyciA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuKTsKLQlpZiAoZXJyICE9IHNpemUpIHsKLQkJZHByaW50aygiJXM6IHNpemU6ICV1LCBtb3JlOiAlZCwgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIHNpemUsIG1vcmUsIGVycik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEJsb2NrIGF1dG9jb25maWd1cmF0aW9uOiByZXF1ZXN0IHNpemUgb2YgdGhlIHN0b3JhZ2UgYW5kIHBlcm1pc3Npb25zLgotICovCi1zdGF0aWMgaW50IGRzdF9yZXF1ZXN0X3JlbW90ZV9jb25maWcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCi0JbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSk7Ci0JY21kLT5jbWQgPSBEU1RfQ0ZHOwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gZHN0X2RhdGFfcmVjdl9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWRzdF9jb252ZXJ0X2NtZChjbWQpOwotCi0JaWYgKGNtZC0+Y21kICE9IERTVF9DRkcpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZHByaW50aygiJXM6IGNoZWNraW5nIHJlc3VsdDogY21kOiAlZCwgc2l6ZSByZXBvcnRlZDogJWxsdS5cbiIsCi0JCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2VjdG9yKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKG4tPnNpemUgIT0gMCkKLQkJbi0+c2l6ZSA9IG1pbl90KGxvZmZfdCwgbi0+c2l6ZSwgY21kLT5zZWN0b3IpOwotCWVsc2UKLQkJbi0+c2l6ZSA9IGNtZC0+c2VjdG9yOwotCi0Jbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7Ci0Jc3QtPnBlcm1pc3Npb25zID0gY21kLT5ydzsKLQotb3V0OgotCWRwcmludGsoIiVzOiBuOiAlcCwgZXJyOiAlZCwgc2l6ZTogJWxsdSwgcGVybWlzc2lvbjogJXguXG4iLAotCQkJX19mdW5jX18sIG4sIGVyciwgbi0+c2l6ZSwgc3QtPnBlcm1pc3Npb25zKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU29ja2V0IG1hY2hpbmVyeS4KLSAqLwotCi0jZGVmaW5lIERTVF9ERUZBVUxUX1RJTUVPCTIwMDAwCi0KLWludCBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqY3RsID0gJnN0LT5jdGw7Ci0KLQllcnIgPSBzb2NrX2NyZWF0ZShjdGwtPmFkZHIuc2FfZmFtaWx5LCBjdGwtPnR5cGUsIGN0bC0+cHJvdG8sICZzb2NrKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXNvY2stPnNrLT5za19zbmR0aW1lbyA9IHNvY2stPnNrLT5za19yY3Z0aW1lbyA9Ci0JCW1zZWNzX3RvX2ppZmZpZXMoRFNUX0RFRkFVTFRfVElNRU8pOwotCXNvY2stPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87Ci0KLQlzdC0+c29ja2V0ID0gc3QtPnJlYWRfc29ja2V0ID0gc29jazsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHByaW50aygiJXM6IHN0OiAlcCwgc29ja2V0OiAlcCwgbjogJXAuXG4iLAotCQkJX19mdW5jX18sIHN0LCBzdC0+c29ja2V0LCBzdC0+bm9kZSk7Ci0JaWYgKHN0LT5zb2NrZXQpIHsKLQkJc29ja19yZWxlYXNlKHN0LT5zb2NrZXQpOwotCQlzdC0+c29ja2V0ID0gTlVMTDsKLQkJc3QtPnJlYWRfc29ja2V0ID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQgZHN0X2R1bXBfYWRkcihzdHJ1Y3Qgc29ja2V0ICpzaywgc3RydWN0IHNvY2thZGRyICpzYSwgY2hhciAqc3RyKQotewotCWlmIChzay0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXUuJXUuJXUuJXU6JWQuXG4iLCBzdHIsCi0JCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOwotCX0gZWxzZSBpZiAoc2stPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzICVwaTY6JWQiLAotCQkJc3RyLCAmc2luLT5zaW42X2FkZHIsIG50b2hzKHNpbi0+c2luNl9wb3J0KSk7Ci0JfQotfQotCi12b2lkIGRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpZiAoc3QtPnNvY2tldCkgewotCQlkc3RfcG9sbF9leGl0KHN0KTsKLQkJc3QtPnNvY2tldC0+b3BzLT5zaHV0ZG93bihzdC0+c29ja2V0LCAyKTsKLQotCQlkc3RfZHVtcF9hZGRyKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3QtPmN0bC5hZGRyLAotCQkJCSJEaXNjb25uZWN0ZWQgcGVlciIpOwotCQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOwotCX0KLX0KLQotc3RhdGljIGludCBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmc3QtPmN0bDsKLQotCWVyciA9IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWVyciA9IGtlcm5lbF9jb25uZWN0KHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3QtPmN0bC5hZGRyLAotCQkJc3QtPmN0bC5hZGRyLnNhX2RhdGFfbGVuLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQotCWVyciA9IGRzdF9wb2xsX2luaXQoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCi0JZHN0X2R1bXBfYWRkcihzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJmN0bC0+YWRkciwKLQkJCSJDb25uZWN0ZWQgdG8gcGVlciIpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcmVsZWFzZToKLQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTdGF0ZSByZXNldCBpcyB1c2VkIHRvIHJlY29ubmVjdCB0byB0aGUgcmVtb3RlIHBlZXIuCi0gKiBNYXkgZmFpbCwgYnV0IHdobyBjYXJlcywgd2Ugd2lsbCB0cnkgYWdhaW4gbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci0JZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV9yZXNldChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci19Ci0KLS8qCi0gKiBCYXNpYyBuZXR3b3JrIHNlbmRpbmcvcmVjZWl2aW5nIGZ1bmN0aW9ucy4KLSAqIEJsb2NrZWQgbW9kZSBpcyB1c2VkLgotICovCi1zdGF0aWMgaW50IGRzdF9kYXRhX3JlY3ZfcmF3KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpidWYsIHU2NCBzaXplKQotewotCXN0cnVjdCBtc2doZHIgbXNnOwotCXN0cnVjdCBrdmVjIGlvdjsKLQlpbnQgZXJyOwotCi0JQlVHX09OKCFzaXplKTsKLQotCWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKLQlpb3YuaW92X2xlbiA9IHNpemU7Ci0KLQltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OwotCW1zZy5tc2dfaW92bGVuID0gMTsKLQltc2cubXNnX25hbWUgPSBOVUxMOwotCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZy5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7Ci0KLQllcnIgPSBrZXJuZWxfcmVjdm1zZyhzdC0+c29ja2V0LCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbiwKLQkJCW1zZy5tc2dfZmxhZ3MpOwotCWlmIChlcnIgPD0gMCkgewotCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIHJlY3YgZGF0YTogc2l6ZTogJWxsdSwgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIHNpemUsIGVycik7Ci0JCWlmIChlcnIgPT0gMCkKLQkJCWVyciA9IC1FQ09OTlJFU0VUOwotCi0JCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFBpbmcgY29tbWFuZCB0byBlYXJseSBkZXRlY3QgZmFpbGVkIG5vZGVzLgotICovCi1zdGF0aWMgaW50IGRzdF9zZW5kX3Bpbmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCWludCBlcnIgPSAtRUNPTk5SRVNFVDsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlpZiAoc3QtPnNvY2tldCkgewotCQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKLQotCQljbWQtPmNtZCA9IF9fY3B1X3RvX2JlMzIoRFNUX1BJTkcpOwotCi0JCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwKLQkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQl9Ci0JZHByaW50aygiJXM6IHN0OiAlcCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLAotCQkJc3QsIHN0LT5zb2NrZXQsIGVycik7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2aW5nIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgZWl0aGVyIHJldHVybiBlcnJvciBvciByZWFkCi0gKiB3aG9sZSBibG9jayByZXF1ZXN0LiBJZiB0aGVyZSB3YXMgbm8gdHJhZmZpYyBmb3IgYSBvbmUgc2Vjb25kLAotICogc2VuZCBhIHBpbmcsIHNpbmNlIHJlbW90ZSBub2RlIG1heSBkaWUuCi0gKi8KLWludCBkc3RfZGF0YV9yZWN2KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IDA7Ci0JdW5zaWduZWQgaW50IGVycl9tYXNrID0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSBlcnJfbWFzayB8IFBPTExJTjsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlpbnQgZXJyID0gMDsKLQotCXdoaWxlIChzaXplICYmICFlcnIpIHsKLQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKLQotCQlpZiAoIShyZXZlbnRzICYgbWFzaykpIHsKLQkJCURFRklORV9XQUlUKHdhaXQpOwotCi0JCQlmb3IgKDs7KSB7Ci0JCQkJcHJlcGFyZV90b193YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0LAotCQkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJCQlicmVhazsKLQotCQkJCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7Ci0KLQkJCQlpZiAocmV2ZW50cyAmIG1hc2spCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJCQlicmVhazsKLQotCQkJCWlmICghc2NoZWR1bGVfdGltZW91dChIWikpIHsKLQkJCQkJZXJyID0gZHN0X3NlbmRfcGluZyhzdCk7Ci0JCQkJCWlmIChlcnIpCi0JCQkJCQlyZXR1cm4gZXJyOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOwotCQl9Ci0KLQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQotCQlpZiAoc3QtPnNvY2tldCAmJiAoc3QtPnJlYWRfc29ja2V0ID09IHN0LT5zb2NrZXQpICYmCi0JCQkJKHJldmVudHMgJiBQT0xMSU4pKSB7Ci0JCQllcnIgPSBkc3RfZGF0YV9yZWN2X3JhdyhzdCwgZGF0YSwgc2l6ZSk7Ci0JCQlpZiAoZXJyID4gMCkgewotCQkJCWRhdGEgKz0gZXJyOwotCQkJCXNpemUgLT0gZXJyOwotCQkJCWVyciA9IDA7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrIHx8ICFzdC0+c29ja2V0KSB7Ci0JCQlkcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIHNpemU6ICV1LCAiCi0JCQkJCSJlcnI6ICVkLlxuIiwgX19mdW5jX18sIHJldmVudHMsCi0JCQkJCXN0LT5zb2NrZXQsIHNpemUsIGVycik7Ci0JCQllcnIgPSAtRUNPTk5SRVNFVDsKLQkJfQotCi0JCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0KQotCQkJZXJyID0gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2VuZCBibG9jayBhdXRvY29uZiByZXBseS4KLSAqLwotc3RhdGljIGludCBkc3RfcHJvY2Vzc19jZmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCWludCBlcnI7Ci0KLQljbWQtPnNlY3RvciA9IG4tPnNpemU7Ci0JY21kLT5ydyA9IHN0LT5wZXJtaXNzaW9uczsKLQotCWRzdF9jb252ZXJ0X2NtZChjbWQpOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2ZSBibG9jayBJTyBmcm9tIHRoZSBuZXR3b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF9yZWN2X2JpbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgc3RydWN0IGJpbyAqYmlvLAotCQl1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0JaW50IGksIGVycjsKLQl2b2lkICpkYXRhOwotCXVuc2lnbmVkIGludCBzejsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJc3ogPSBtaW4odG90YWxfc2l6ZSwgYnYtPmJ2X2xlbik7Ci0KLQkJZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgdG90YWw6ICV1LCBsZW46ICV1LCBzejogJXUsICIKLQkJCQkib2ZmOiAldS5cbiIsIF9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJCWJpby0+Ymlfc2l6ZSwgdG90YWxfc2l6ZSwgYnYtPmJ2X2xlbiwgc3osCi0JCQkJYnYtPmJ2X29mZnNldCk7Ci0KLQkJZGF0YSA9IGttYXAoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKLQkJZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgZGF0YSwgc3opOwotCQlrdW5tYXAoYnYtPmJ2X3BhZ2UpOwotCi0JCWJ2LT5idl9sZW4gPSBzejsKLQotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQl0b3RhbF9zaXplIC09IHN6OwotCQlpZiAodG90YWxfc2l6ZSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBPdXIgYmxvY2sgSU8gaGFzIGp1c3QgY29tcGxldGVkIGFuZCBhcnJpdmVkOiBnZXQgaXQuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3Byb2Nlc3NfaW9fcmVzcG9uc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCXN0cnVjdCBkc3RfdHJhbnMgKnQ7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JdCA9IGRzdF90cmFuc19zZWFyY2gobiwgY21kLT5pZCk7Ci0JbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKLQotCWlmICghdCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQliaW8gPSB0LT5iaW87Ci0KLQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBjbWRfc2l6ZTogJXUsIGNzaXplOiAldSwgZGlyOiAlbHUuXG4iLAotCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLCBjbWQtPnNpemUsCi0JCWNtZC0+Y3NpemUsIGJpb19kYXRhX2RpcihiaW8pKTsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSB7Ci0JCWlmIChiaW8tPmJpX3NpemUgIT0gY21kLT5zaXplIC0gY21kLT5jc2l6ZSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChkc3RfbmVlZF9jcnlwdG8obikpIHsKLQkJCWVyciA9IGRzdF9yZWN2X2NkYXRhKHN0LCB0LT5jbWQuaGFzaCk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyX291dF9leGl0OwotCQl9Ci0KLQkJZXJyID0gZHN0X3JlY3ZfYmlvKHN0LCB0LT5iaW8sIGJpby0+Ymlfc2l6ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlpZiAoZHN0X25lZWRfY3J5cHRvKG4pKQotCQkJcmV0dXJuIGRzdF90cmFuc19jcnlwdG8odCk7Ci0JfSBlbHNlIHsKLQkJZXJyID0gLUVCQURNU0c7Ci0JCWlmIChjbWQtPnNpemUgfHwgY21kLT5jc2l6ZSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWRzdF90cmFuc19yZW1vdmUodCk7Ci0JZHN0X3RyYW5zX3B1dCh0KTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFJlY2VpdmUgY3J5cHRvIGRhdGEuCi0gKi8KLWludCBkc3RfcmVjdl9jZGF0YShzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqY2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZuLT5jcnlwdG87Ci0JaW50IGVycjsKLQotCWlmIChjbWQtPmNzaXplICE9IGMtPmNyeXB0b19hdHRhY2hlZF9zaXplKSB7Ci0JCWRwcmludGsoIiVzOiBjbWQ6IGNtZDogJXUsIHNlY3RvcjogJWxsdSwgc2l6ZTogJXUsICIKLQkJCQkiY3NpemU6ICV1ICE9IGRpZ2VzdCBzaXplICV1LlxuIiwKLQkJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2VjdG9yLCBjbWQtPnNpemUsCi0JCQkJY21kLT5jc2l6ZSwgYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBjZGF0YSwgY21kLT5jc2l6ZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQljbWQtPnNpemUgLT0gY21kLT5jc2l6ZTsKLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZlIHRoZSBjb21tYW5kIGFuZCBzdGFydCBpdHMgcHJvY2Vzc2luZy4KLSAqLwotc3RhdGljIGludCBkc3RfcmVjdl9wcm9jZXNzaW5nKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWludCBlcnIgPSAtRUlOVFI7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCi0JLyoKLQkgKiBJZiBzb2NrZXQgd2lsbCBiZSByZXNldCBhZnRlciB0aGlzIHN0YXRlbWVudCwgdGhlbgotCSAqIGRzdF9kYXRhX3JlY3YoKSB3aWxsIGp1c3QgZmFpbCBhbmQgbG9vcCB3aWxsCi0JICogc3RhcnQgYWdhaW4sIHNvIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQgYW55IGxvY2tzLgotCSAqCi0JICogc3QtPnJlYWRfc29ja2V0IGlzIG5lZWRlZCB0byBwcmV2ZW50cyBzdGF0ZSBtYWNoaW5lCi0JICogYnJlYWtpbmcgYmV0d2VlbiB0aGlzIGRhdGEgcmVhZGluZyBhbmQgc3Vic2VxdWVudCBvbmUKLQkgKiBpbiBwcm90b2NvbCBzcGVjaWZpYyBmdW5jdGlvbnMgZHVyaW5nIGNvbm5lY3Rpb24gcmVzZXQuCi0JICogSW4gY2FzZSBvZiByZXNldCB3ZSBoYXZlIHRvIHJlYWQgbmV4dCBjb21tYW5kIGFuZCBkbwotCSAqIG5vdCBleHBlY3QgZGF0YSBmb3Igb2xkIGNvbW1hbmQgdG8gbWFnaWNhbGx5IGFwcGVhciBpbgotCSAqIG5ldyBjb25uZWN0aW9uLgotCSAqLwotCXN0LT5yZWFkX3NvY2tldCA9IHN0LT5zb2NrZXQ7Ci0JZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9leGl0OwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlkcHJpbnRrKCIlczogY21kOiAldSwgc2l6ZTogJXUsIGNzaXplOiAldSwgaWQ6ICVsbHUsICIKLQkJCSJzZWN0b3I6ICVsbHUsIGZsYWdzOiAlbGx4LCBydzogJWxseC5cbiIsCi0JCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2l6ZSwKLQkJCWNtZC0+Y3NpemUsIGNtZC0+aWQsIGNtZC0+c2VjdG9yLAotCQkJY21kLT5mbGFncywgY21kLT5ydyk7Ci0KLQkvKgotCSAqIFRoaXMgc2hvdWxkIGNhdGNoIHByb3RvY29sIGJyZWFrYWdlIGFuZCByYW5kb20gZ2FyYmFnZQotCSAqIGluc3RlYWQgb2YgY29tbWFuZHMuCi0JICovCi0JaWYgKHVubGlrZWx5KGNtZC0+Y3NpemUgPiBzdC0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpKSB7Ci0JCWVyciA9IC1FQkFETVNHOwotCQlnb3RvIG91dF9leGl0OwotCX0KLQotCWVyciA9IC1FUFJPVE87Ci0Jc3dpdGNoIChjbWQtPmNtZCkgewotCWNhc2UgRFNUX0lPX1JFU1BPTlNFOgotCQllcnIgPSBkc3RfcHJvY2Vzc19pb19yZXNwb25zZShzdCk7Ci0JCWJyZWFrOwotCWNhc2UgRFNUX0lPOgotCQllcnIgPSBkc3RfcHJvY2Vzc19pbyhzdCk7Ci0JCWJyZWFrOwotCWNhc2UgRFNUX0NGRzoKLQkJZXJyID0gZHN0X3Byb2Nlc3NfY2ZnKHN0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1RfUElORzoKLQkJZXJyID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi1vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2aW5nIHRocmVhZC4gRm9yIHRoZSBjbGllbnQgbm9kZSB3ZSBzaG91bGQgdHJ5IHRvIHJlY29ubmVjdCwKLSAqIGZvciBhY2NlcHRlZCBjbGllbnQgd2UganVzdCBkcm9wIHRoZSBzdGF0ZSBhbmQgZXhwZWN0IGl0IHRvIHJlY29ubmVjdC4KLSAqLwotc3RhdGljIGludCBkc3RfcmVjdih2b2lkICppbml0X2RhdGEsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBzY2hlZHVsZV9kYXRhOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGluaXRfZGF0YTsKLQlpbnQgZXJyID0gMDsKLQotCWRwcmludGsoIiVzOiBzdGFydCBzdDogJXAsIG46ICVwLCBzY2FuOiAlbHUsIG5lZWRfZXhpdDogJWQuXG4iLAotCQkJX19mdW5jX18sIHN0LCBuLCBuLT50cmFuc19zY2FuX3RpbWVvdXQsIHN0LT5uZWVkX2V4aXQpOwotCi0Jd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCAmJiAhc3QtPm5lZWRfZXhpdCkgewotCQllcnIgPSBkc3RfcmVjdl9wcm9jZXNzaW5nKHN0KTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWlmICghc3QtPmN0bC50eXBlKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJCWJyZWFrOwotCi0JCQlkc3Rfc3RhdGVfcmVzZXQoc3QpOwotCQkJbXNsZWVwKDEwMDApOwotCQl9Ci0JfQotCi0Jc3QtPm5lZWRfZXhpdCA9IDE7Ci0Jd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLQotCWRwcmludGsoIiVzOiBmcmVlaW5nIHJlY2VpdmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLQotCWRwcmludGsoIiVzOiBmcmVlZCByZWNlaXZpbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogTmV0d29yayBzdGF0ZSBkaWVzIGhlcmUgYW5kIGJvcm5zIGNvdXBsZSBvZiBsaW5lcyBiZWxvdy4KLSAqIFRoaXMgb2JqZWN0IGlzIHRoZSBtYWluIG5ldHdvcmsgc3RhdGUgcHJvY2Vzc2luZyBlbmdpbmU6Ci0gKiBzZW5kaW5nLCByZWNlaXZpbmcsIHJlY29ubmVjdGlvbnMsIGFsbCBuZXR3b3JrIHJlbGF0ZWQKLSAqIHRhc2tzIGFyZSBoYW5kbGVkIG9uIGJlaGFsZiBvZiB0aGUgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9zdGF0ZV9mcmVlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRwcmludGsoIiVzOiBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOwotCWlmIChzdC0+Y2xlYW51cCkKLQkJc3QtPmNsZWFudXAoc3QpOwotCWtmcmVlKHN0LT5kYXRhKTsKLQlrZnJlZShzdCk7Ci19Ci0KLXN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9hbGxvYyhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3Q7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXN0LT5ub2RlID0gbjsKLQlzdC0+bmVlZF9leGl0ID0gMDsKLQotCXN0LT5zaXplID0gUEFHRV9TSVpFOwotCXN0LT5kYXRhID0ga21hbGxvYyhzdC0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdC0+ZGF0YSkKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlzcGluX2xvY2tfaW5pdCgmc3QtPnJlcXVlc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0LT5yZXF1ZXN0X2xpc3QpOwotCi0JbXV0ZXhfaW5pdCgmc3QtPnN0YXRlX2xvY2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0LT50aHJlYWRfd2FpdCk7Ci0KLQkvKgotCSAqIE9uZSBmb3IgcHJvY2Vzc2luZyB0aHJlYWQsIGFub3RoZXIgb25lIGZvciBub2RlIGl0c2VsZi4KLQkgKi8KLQlhdG9taWNfc2V0KCZzdC0+cmVmY250LCAyKTsKLQotCWRwcmludGsoIiVzOiBzdDogJXAsIG46ICVwLlxuIiwgX19mdW5jX18sIHN0LCBzdC0+bm9kZSk7Ci0KLQlyZXR1cm4gc3Q7Ci0KLWVycl9vdXRfZnJlZToKLQlrZnJlZShzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotaW50IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlyZXR1cm4gdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdC0+bm9kZS0+cG9vbCwgZHN0X3RocmVhZF9zZXR1cCwKLQkJCWRzdF9yZWN2LCBzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIHN0LT5ub2RlKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgY2xpZW50J3MgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIHBlZXI6IGFsbG9jYXRlIHN0YXRlLAotICogY29ubmVjdCBhbmQgcGVyZm9ybSBibG9jayBJTyBhdXRvY29uZmlndXJhdGlvbi4KLSAqLwotaW50IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcikKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXN0ID0gZHN0X3N0YXRlX2FsbG9jKG4pOwotCWlmIChJU19FUlIoc3QpKSB7Ci0JCWVyciA9IFBUUl9FUlIoc3QpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0JbWVtY3B5KCZzdC0+Y3RsLCByLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOwotCi0JZXJyID0gZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9kYXRhOwotCi0JZXJyID0gZHN0X3JlcXVlc3RfcmVtb3RlX2NvbmZpZyhzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXRfY29ubmVjdGVkOwotCW4tPnN0YXRlID0gc3Q7Ci0KLQllcnIgPSBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0X2Nvbm5lY3RlZDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXRfY29ubmVjdGVkOgotCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci1lcnJfb3V0X2ZyZWVfZGF0YToKLQlkc3Rfc3RhdGVfZnJlZShzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0Jbi0+c3RhdGUgPSBOVUxMOwotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgZHN0X3N0YXRlX3B1dChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCBzdCwgYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc3QtPnJlZmNudCkpCi0JCWRzdF9zdGF0ZV9mcmVlKHN0KTsKLX0KLQotLyoKLSAqIFNlbmQgYmxvY2sgSU8gdG8gdGhlIG5ldHdvcmsgb25lIGJ5IG9uZSB1c2luZyB6ZXJvLWNvcHkgLT5zZW5kcGFnZSgpLgotICovCi1pbnQgZHN0X3NlbmRfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgZHN0X2NtZCAqY21kLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZzdC0+bm9kZS0+Y3J5cHRvOwotCWludCBlcnIsIGkgPSAwOwotCWludCBmbGFncyA9IE1TR19XQUlUQUxMOwotCi0JZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLAotCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpICsgYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUsIGJpby0+YmlfdmNudCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCWlmIChpIDwgYmlvLT5iaV92Y250IC0gMSkKLQkJCWZsYWdzIHw9IE1TR19NT1JFOwotCi0JCWVyciA9IGtlcm5lbF9zZW5kcGFnZShzdC0+c29ja2V0LCBidi0+YnZfcGFnZSwgYnYtPmJ2X29mZnNldCwKLQkJCQlidi0+YnZfbGVuLCBmbGFncyk7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JZHByaW50aygiJXM6ICVkLyVkLCBmbGFnczogJXgsIGVycjogJWQuXG4iLAotCQkJX19mdW5jX18sIGksIGJpby0+YmlfdmNudCwgZmxhZ3MsIGVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNlbmQgdHJhbnNhY3Rpb24gdG8gdGhlIHJlbW90ZSBwZWVyLgotICovCi1pbnQgZHN0X3RyYW5zX3NlbmQoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gdC0+bi0+c3RhdGU7Ci0Jc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOwotCi0JZHN0X2NvbnZlcnRfY21kKCZ0LT5jbWQpOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWlmICghc3QtPnNvY2tldCkgewotCQllcnIgPSBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJZXJyID0gZHN0X3NlbmRfYmlvKHN0LCAmdC0+Y21kLCB0LT5iaW8pOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsICZ0LT5jbWQsCi0JCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JfQotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9yZXNldDsKLQotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCXJldHVybiAwOwotCi1lcnJfb3V0X3Jlc2V0OgotCWRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3QpOwotZXJyX291dF91bmxvY2s6Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWE4MmIyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdGhyZWFkX3Bvb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDM0OCArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotLyoKLSAqIFRocmVhZCBwb29sIGFic3RyYWN0aW9uIGFsbG93cyB0byBzY2hlZHVsZSBhIHdvcmsgdG8gYmUgcGVyZm9ybWVkCi0gKiBvbiBiZWhhbGYgb2Yga2VybmVsIHRocmVhZC4gT25lIGRvZXMgbm90IG9wZXJhdGUgd2l0aCB0aHJlYWRzIGl0c2VsZiwKLSAqIGluc3RlYWQgdXNlciBwcm92aWRlcyBzZXR1cCBhbmQgY2xlYW51cCBjYWxsYmFja3MgZm9yIHRocmVhZCBwb29sIGl0c2VsZiwKLSAqIGFuZCBhY3Rpb24gYW5kIGNsZWFudXAgY2FsbGJhY2tzIGZvciBlYWNoIHN1Ym1pdHRlZCB3b3JrLgotICoKLSAqIEVhY2ggd29ya2VyIGhhcyBwcml2YXRlIGRhdGEgaW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24gdGltZSBhbmQgZGF0YSwKLSAqIHByb3ZpZGVkIGJ5IHVzZXIgYXQgc2NoZWR1bGluZyB0aW1lLgotICoKLSAqIFdoZW4gYWN0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCwgdGhyZWFkIGNhbiBub3QgYmUgdXNlZCBieSBvdGhlciB1c2VycywKLSAqIGluc3RlYWQgdGhleSB3aWxsIHNsZWVwIHVudGlsIHRoZXJlIGlzIGZyZWUgdGhyZWFkIHRvIHBpY2sgdGhlaXIgd29yay4KLSAqLwotc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZAl3b3JrZXJfZW50cnk7Ci0KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsKLQotCXN0cnVjdCB0aHJlYWRfcG9vbAkqcG9vbDsKLQotCWludAkJCWVycm9yOwotCWludAkJCWhhc19kYXRhOwotCWludAkJCW5lZWRfZXhpdDsKLQl1bnNpZ25lZCBpbnQJCWlkOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKLQotCXZvaWQJCQkqcHJpdmF0ZTsKLQl2b2lkCQkJKnNjaGVkdWxlX2RhdGE7Ci0KLQlpbnQJCQkoKmFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqc2NoZWR1bGVfZGF0YSk7Ci0Jdm9pZAkJCSgqY2xlYW51cCkodm9pZCAqcHJpdmF0ZSk7Ci19OwotCi1zdGF0aWMgdm9pZCB0aHJlYWRfcG9vbF9leGl0X3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3KQotewotCWt0aHJlYWRfc3RvcCh3LT50aHJlYWQpOwotCi0Jdy0+Y2xlYW51cCh3LT5wcml2YXRlKTsKLQlrZnJlZSh3KTsKLX0KLQotLyoKLSAqIENhbGxlZCB0byBtYXJrIHRocmVhZCBhcyByZWFkeSBhbmQgYWxsb3cgdXNlcnMgdG8gc2NoZWR1bGUgbmV3IHdvcmsuCi0gKi8KLXN0YXRpYyB2b2lkIHRocmVhZF9wb29sX3dvcmtlcl9tYWtlX3JlYWR5KHN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sICpwID0gdy0+cG9vbDsKLQotCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCWlmICghdy0+bmVlZF9leGl0KSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5yZWFkeV9saXN0KTsKLQkJdy0+aGFzX2RhdGEgPSAwOwotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCQl3YWtlX3VwKCZwLT53YWl0KTsKLQl9IGVsc2UgewotCQlwLT50aHJlYWRfbnVtLS07Ci0JCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOwotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKLQl9Ci19Ci0KLS8qCi0gKiBUaHJlYWQgYWN0aW9uIGxvb3A6IHdhaXRzIHVudGlsIHRoZXJlIGlzIG5ldyB3b3JrLgotICovCi1zdGF0aWMgaW50IHRocmVhZF9wb29sX3dvcmtlcl9mdW5jKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdyA9IGRhdGE7Ci0KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUody0+d2FpdCwKLQkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB3LT5oYXNfZGF0YSk7Ci0KLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCWJyZWFrOwotCi0JCWlmICghdy0+aGFzX2RhdGEpCi0JCQljb250aW51ZTsKLQotCQl3LT5hY3Rpb24ody0+cHJpdmF0ZSwgdy0+c2NoZWR1bGVfZGF0YSk7Ci0JCXRocmVhZF9wb29sX3dvcmtlcl9tYWtlX3JlYWR5KHcpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlIHNpbmdsZSB3b3JrZXIgd2l0aG91dCBzcGVjaWZ5aW5nIHdoaWNoIG9uZS4KLSAqLwotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3ID0gTlVMTDsKLQotCXdoaWxlICghdyAmJiBwLT50aHJlYWRfbnVtKSB7Ci0JCXdhaXRfZXZlbnQocC0+d2FpdCwgIWxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpIHx8Ci0JCQkJIXAtPnRocmVhZF9udW0pOwotCi0JCWRwcmludGsoIiVzOiBsb2NraW5nIGxpc3RfZW1wdHk6ICVkLCB0aHJlYWRfbnVtOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpLAotCQkJCXAtPnRocmVhZF9udW0pOwotCi0JCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSkgewotCQkJdyA9IGxpc3RfZmlyc3RfZW50cnkoJnAtPnJlYWR5X2xpc3QsCi0JCQkJCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIsCi0JCQkJCXdvcmtlcl9lbnRyeSk7Ci0KLQkJCWRwcmludGsoIiVzOiBkZWxldGluZyB3OiAlcCwgdGhyZWFkX251bTogJWQsICIKLQkJCQkJImxpc3Q6ICVwIFslcC4lcF0uXG4iLCBfX2Z1bmNfXywKLQkJCQkJdywgcC0+dGhyZWFkX251bSwgJnAtPnJlYWR5X2xpc3QsCi0JCQkJCXAtPnJlYWR5X2xpc3QucHJldiwgcC0+cmVhZHlfbGlzdC5uZXh0KTsKLQotCQkJcC0+dGhyZWFkX251bS0tOwotCQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JfQotCi0JaWYgKHcpCi0JCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOwotCWRwcmludGsoIiVzOiBkZWxldGVkIHc6ICVwLCB0aHJlYWRfbnVtOiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgdywgcC0+dGhyZWFkX251bSk7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSB3b3JrZXIgd2l0aCBnaXZlbiBJRC4KLSAqLwotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyX2lkKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwgdW5zaWduZWQgaW50IGlkKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKnc7Ci0JaW50IGZvdW5kID0gMDsKLQotCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKLQkJaWYgKHctPmlkID09IGlkKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlwLT50aHJlYWRfbnVtLS07Ci0JCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5hY3RpdmVfbGlzdCwgd29ya2VyX2VudHJ5KSB7Ci0JCQlpZiAody0+aWQgPT0gaWQpIHsKLQkJCQl3LT5uZWVkX2V4aXQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JaWYgKGZvdW5kKQotCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKLX0KLQotLyoKLSAqIEFkZCBuZXcgd29ya2VyIHRocmVhZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuCi0gKiBJZiBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmYWlscywgcmV0dXJuIGVycm9yLgotICovCi1pbnQgdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWNoYXIgKm5hbWUsCi0JCXVuc2lnbmVkIGludCBpZCwKLQkJdm9pZCAqKCppbml0KSh2b2lkICpwcml2YXRlKSwKLQkJdm9pZCAoKmNsZWFudXApKHZvaWQgKnByaXZhdGUpLAotCQl2b2lkICpwcml2YXRlKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKnc7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQl3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciksIEdGUF9LRVJORUwpOwotCWlmICghdykKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQl3LT5wb29sID0gcDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3LT53YWl0KTsKLQl3LT5jbGVhbnVwID0gY2xlYW51cDsKLQl3LT5pZCA9IGlkOwotCi0Jdy0+dGhyZWFkID0ga3RocmVhZF9ydW4odGhyZWFkX3Bvb2xfd29ya2VyX2Z1bmMsIHcsICIlcyIsIG5hbWUpOwotCWlmIChJU19FUlIody0+dGhyZWFkKSkgewotCQllcnIgPSBQVFJfRVJSKHctPnRocmVhZCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCXctPnByaXZhdGUgPSBpbml0KHByaXZhdGUpOwotCWlmIChJU19FUlIody0+cHJpdmF0ZSkpIHsKLQkJZXJyID0gUFRSX0VSUih3LT5wcml2YXRlKTsKLQkJZ290byBlcnJfb3V0X3N0b3BfdGhyZWFkOwotCX0KLQotCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5yZWFkeV9saXN0KTsKLQlwLT50aHJlYWRfbnVtKys7Ci0JbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9zdG9wX3RocmVhZDoKLQlrdGhyZWFkX3N0b3Aody0+dGhyZWFkKTsKLWVycl9vdXRfZnJlZToKLQlrZnJlZSh3KTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogRGVzdHJveSB0aGUgd2hvbGUgcG9vbC4KLSAqLwotdm9pZCB0aHJlYWRfcG9vbF9kZXN0cm95KHN0cnVjdCB0aHJlYWRfcG9vbCAqcCkKLXsKLQl3aGlsZSAocC0+dGhyZWFkX251bSkgewotCQlkcHJpbnRrKCIlczogbnVtOiAlZC5cbiIsIF9fZnVuY19fLCBwLT50aHJlYWRfbnVtKTsKLQkJdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihwKTsKLQl9Ci0KLQlrZnJlZShwKTsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIHBvb2wgd2l0aCBnaXZlbiBudW1iZXIgb2YgdGhyZWFkcy4KLSAqIFRoZXkgd2lsbCBoYXZlIHNlcXVlbnRpYWwgSURzIHN0YXJ0ZWQgZnJvbSB6ZXJvLgotICovCi1zdHJ1Y3QgdGhyZWFkX3Bvb2wgKnRocmVhZF9wb29sX2NyZWF0ZShpbnQgbnVtLCBjaGFyICpuYW1lLAotCQl2b2lkICooKmluaXQpKHZvaWQgKnByaXZhdGUpLAotCQl2b2lkICgqY2xlYW51cCkodm9pZCAqcHJpdmF0ZSksCi0JCXZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdywgKnRtcDsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnA7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JaW50IGk7Ci0KLQlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRocmVhZF9wb29sKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnAtPndhaXQpOwotCW11dGV4X2luaXQoJnAtPnRocmVhZF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmcC0+cmVhZHlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPmFjdGl2ZV9saXN0KTsKLQlwLT50aHJlYWRfbnVtID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotCQllcnIgPSB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHAsIG5hbWUsIGksIGluaXQsCi0JCQkJY2xlYW51cCwgcHJpdmF0ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7Ci0JfQotCi0JcmV0dXJuIHA7Ci0KLWVycl9vdXRfZnJlZV9hbGw6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgewotCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKLQkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7Ci0JfQotCWtmcmVlKHApOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLS8qCi0gKiBTY2hlZHVsZSBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiBvbiBhIGdpdmVuIHRocmVhZCwKLSAqIHByb3ZpZGVkIElEIHBvaW50ZXIgaGFzIHRvIG1hdGNoIHByZXZpb3VzbHkgc3RvcmVkCi0gKiBwcml2YXRlIGRhdGEuCi0gKi8KLWludCB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJaW50ICgqc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQlpbnQgKCphY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQsIHZvaWQgKmlkKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncsICp0bXAsICp3b3JrZXIgPSBOVUxMOwotCWludCBlcnIgPSAwOwotCi0Jd2hpbGUgKCF3b3JrZXIgJiYgIWVycikgewotCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocC0+d2FpdCwKLQkJCQkhbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCksCi0JCQkJdGltZW91dCk7Ci0KLQkJaWYgKCF0aW1lb3V0KSB7Ci0JCQllcnIgPSAtRVRJTUVET1VUOwotCQkJYnJlYWs7Ci0JCX0KLQotCQl3b3JrZXIgPSBOVUxMOwotCQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCB0bXAsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKLQkJCWlmIChpZCAmJiBpZCAhPSB3LT5wcml2YXRlKQotCQkJCWNvbnRpbnVlOwotCi0JCQl3b3JrZXIgPSB3OwotCi0JCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+YWN0aXZlX2xpc3QpOwotCi0JCQllcnIgPSBzZXR1cCh3LT5wcml2YXRlLCBkYXRhKTsKLQkJCWlmICghZXJyKSB7Ci0JCQkJdy0+c2NoZWR1bGVfZGF0YSA9IGRhdGE7Ci0JCQkJdy0+YWN0aW9uID0gYWN0aW9uOwotCQkJCXctPmhhc19kYXRhID0gMTsKLQkJCQl3YWtlX3VwKCZ3LT53YWl0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJnctPndvcmtlcl9lbnRyeSwKLQkJCQkJCSZwLT5yZWFkeV9saXN0KTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNjaGVkdWxlIGV4ZWN1dGlvbiBvbiBhcmJpdHJhcnkgdGhyZWFkIGZyb20gdGhlIHBvb2wuCi0gKi8KLWludCB0aHJlYWRfcG9vbF9zY2hlZHVsZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWludCAoKnNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJaW50ICgqYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSwgbG9uZyB0aW1lb3V0KQotewotCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHAsIHNldHVwLAotCQkJYWN0aW9uLCBkYXRhLCB0aW1lb3V0LCBOVUxMKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzNmE2Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RyYW5zLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+Ci0KLS8qCi0gKiBUcmFuc2FjdGlvbiBtZW1vcnkgcG9vbCBzaXplLgotICovCi1zdGF0aWMgaW50IGRzdF9tZW1wb29sX251bSA9IDMyOwotbW9kdWxlX3BhcmFtKGRzdF9tZW1wb29sX251bSwgaW50LCAwNjQ0KTsKLQotLyoKLSAqIFRyYW5zYWN0aW9uIHRyZWUgbWFuYWdlbWVudC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZHN0X3RyYW5zX2NtcChkc3RfZ2VuX3QgZ2VuLCBkc3RfZ2VuX3QgbmV3KQotewotCWlmIChnZW4gPCBuZXcpCi0JCXJldHVybiAxOwotCWlmIChnZW4gPiBuZXcpCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGRzdF90cmFucyAqZHN0X3RyYW5zX3NlYXJjaChzdHJ1Y3QgZHN0X25vZGUgKm5vZGUsIGRzdF9nZW5fdCBnZW4pCi17Ci0Jc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmbm9kZS0+dHJhbnNfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJvb3QtPnJiX25vZGU7Ci0Jc3RydWN0IGRzdF90cmFucyAqdCwgKnJldCA9IE5VTEw7Ci0JaW50IGNtcDsKLQotCXdoaWxlIChuKSB7Ci0JCXQgPSByYl9lbnRyeShuLCBzdHJ1Y3QgZHN0X3RyYW5zLCB0cmFuc19lbnRyeSk7Ci0KLQkJY21wID0gZHN0X3RyYW5zX2NtcCh0LT5nZW4sIGdlbik7Ci0JCWlmIChjbXAgPCAwKQotCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGNtcCA+IDApCi0JCQluID0gbi0+cmJfcmlnaHQ7Ci0JCWVsc2UgewotCQkJcmV0ID0gdDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZHByaW50aygiJXM6ICVzIHRyYW5zYWN0aW9uOiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLAotCQkJKHJldCkgPyAiZm91bmQiIDogIm5vdCBmb3VuZCIsIGdlbik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRzdF90cmFuc19pbnNlcnQoc3RydWN0IGRzdF90cmFucyAqbmV3KQotewotCXN0cnVjdCByYl9yb290ICpyb290ID0gJm5ldy0+bi0+dHJhbnNfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqKm4gPSAmcm9vdC0+cmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGRzdF90cmFucyAqcmV0ID0gTlVMTCwgKnQ7Ci0JaW50IGNtcDsKLQotCXdoaWxlICgqbikgewotCQlwYXJlbnQgPSAqbjsKLQotCQl0ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZHN0X3RyYW5zLCB0cmFuc19lbnRyeSk7Ci0KLQkJY21wID0gZHN0X3RyYW5zX2NtcCh0LT5nZW4sIG5ldy0+Z2VuKTsKLQkJaWYgKGNtcCA8IDApCi0JCQluID0gJnBhcmVudC0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY21wID4gMCkKLQkJCW4gPSAmcGFyZW50LT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQlyZXQgPSB0OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQluZXctPnNlbmRfdGltZSA9IGppZmZpZXM7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXN0OiBvbGQ6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCAiCi0JCQkic2VuZF90aW1lOiAlbHUsIG5ldzogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsICIKLQkJCSJzZW5kX3RpbWU6ICVsdS5cbiIsIF9fZnVuY19fLAotCQkJcmV0LT5nZW4sICh1NjQpcmV0LT5iaW8tPmJpX3NlY3RvciwKLQkJCXJldC0+YmlvLT5iaV9zaXplLCByZXQtPnNlbmRfdGltZSwKLQkJCW5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCi0JCQluZXctPmJpby0+Ymlfc2l6ZSwgbmV3LT5zZW5kX3RpbWUpOwotCQlyZXR1cm4gLUVFWElTVDsKLQl9Ci0KLQlyYl9saW5rX25vZGUoJm5ldy0+dHJhbnNfZW50cnksIHBhcmVudCwgbik7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZuZXctPnRyYW5zX2VudHJ5LCByb290KTsKLQotCWRwcmludGsoIiVzOiBpbnNlcnRlZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LlxuIiwKLQkJX19mdW5jX18sIG5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCi0JCW5ldy0+YmlvLT5iaV9zaXplLCBuZXctPnNlbmRfdGltZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKLQotCWlmICh0LT50cmFuc19lbnRyeS5yYl9wYXJlbnRfY29sb3IpIHsKLQkJcmJfZXJhc2UoJnQtPnRyYW5zX2VudHJ5LCAmbi0+dHJhbnNfcm9vdCk7Ci0JCXQtPnRyYW5zX2VudHJ5LnJiX3BhcmVudF9jb2xvciA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgZHN0X3RyYW5zX3JlbW92ZShzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKLQotCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOwotCXJldCA9IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOwotCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogV2hlbiB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQgYW5kIHRoZXJlIGFyZSBubyBtb3JlIHVzZXJzLAotICogd2UgY29tcGxldGUgYXBwcmlhdGUgYmxvY2sgSU8gcmVxdWVzdCB3aXRoIGdpdmVuIGVycm9yIHN0YXR1cy4KLSAqLwotdm9pZCBkc3RfdHJhbnNfcHV0KHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnQtPnJlZmNudCkpIHsKLQkJc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOwotCi0JCWRwcmludGsoIiVzOiBjb21wbGV0ZWQgdDogJXAsIGdlbjogJWxsdSwgYmlvOiAlcC5cbiIsCi0JCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgYmlvKTsKLQotCQliaW9fZW5kaW8oYmlvLCB0LT5lcnJvcik7Ci0JCWJpb19wdXQoYmlvKTsKLQotCQlkc3Rfbm9kZV9wdXQodC0+bik7Ci0JCW1lbXBvb2xfZnJlZSh0LCB0LT5uLT50cmFuc19wb29sKTsKLQl9Ci19Ci0KLS8qCi0gKiBQcm9jZXNzIGdpdmVuIGJsb2NrIElPIHJlcXVlc3Q6IGFsbG9jYXRlIHRyYW5zYWN0aW9uLCBpbnNlcnQgaXQgaW50byB0aGUgdHJlZQotICogYW5kIHNlbmQvc2NoZWR1bGUgY3J5cHRvIHByb2Nlc3NpbmcuCi0gKi8KLWludCBkc3RfcHJvY2Vzc19iaW8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGRzdF90cmFucyAqdDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXQgPSBtZW1wb29sX2FsbG9jKG4tPnRyYW5zX3Bvb2wsIEdGUF9OT0ZTKTsKLQlpZiAoIXQpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JdC0+biA9IGRzdF9ub2RlX2dldChuKTsKLQl0LT5iaW8gPSBiaW87Ci0JdC0+ZXJyb3IgPSAwOwotCXQtPnJldHJpZXMgPSAwOwotCWF0b21pY19zZXQoJnQtPnJlZmNudCwgMSk7Ci0JdC0+Z2VuID0gYXRvbWljX2xvbmdfaW5jX3JldHVybigmbi0+Z2VuKTsKLQotCXQtPmVuYyA9IGJpb19kYXRhX2RpcihiaW8pOwotCWRzdF9iaW9fdG9fY21kKGJpbywgJnQtPmNtZCwgRFNUX0lPLCB0LT5nZW4pOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JZXJyID0gZHN0X3RyYW5zX2luc2VydCh0KTsKLQltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZHByaW50aygiJXM6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBkaXIvZW5jOiAlZCwgbmVlZF9jcnlwdG86ICVkLlxuIiwKLQkJCV9fZnVuY19fLCB0LT5nZW4sICh1NjQpYmlvLT5iaV9zZWN0b3IsCi0JCQliaW8tPmJpX3NpemUsIHQtPmVuYywgZHN0X25lZWRfY3J5cHRvKG4pKTsKLQotCWlmIChkc3RfbmVlZF9jcnlwdG8obikgJiYgdC0+ZW5jKQotCQlkc3RfdHJhbnNfY3J5cHRvKHQpOwotCWVsc2UKLQkJZHN0X3RyYW5zX3NlbmQodCk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlOgotCWRzdF9ub2RlX3B1dChuKTsKLQltZW1wb29sX2ZyZWUodCwgbi0+dHJhbnNfcG9vbCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JYmlvX2VuZGlvKGJpbywgZXJyKTsKLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNjYW4gZm9yIHRpbWVvdXQvc3RhbGUgdHJhbnNhY3Rpb25zLgotICogRWFjaCB0cmFuc2FjdGlvbiBpcyBiZWluZyByZXNlbnQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGVycm9yIGNvbXBsZXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF90cmFuc19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRzdF9ub2RlLAotCQkJdHJhbnNfd29yay53b3JrKTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG4tPnRyYW5zX3NjYW5fdGltZW91dDsKLQlpbnQgbnVtID0gMTAgKiBuLT50cmFuc19tYXhfcmV0cmllczsKLQotCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOwotCi0JZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJm4tPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKLQkJdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQlpZiAodGltZW91dCAmJiB0aW1lX2FmdGVyKHQtPnNlbmRfdGltZSArIHRpbWVvdXQsIGppZmZpZXMpCi0JCQkJJiYgdC0+cmV0cmllcyA9PSAwKQotCQkJYnJlYWs7Ci0jaWYgMAotCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgbjogJXMsIHJldHJpZXM6ICV1LCBtYXg6ICV1LlxuIiwKLQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIG4tPm5hbWUsCi0JCQl0LT5yZXRyaWVzLCBuLT50cmFuc19tYXhfcmV0cmllcyk7Ci0jZW5kaWYKLQkJaWYgKC0tbnVtID09IDApCi0JCQlicmVhazsKLQotCQlkc3RfdHJhbnNfZ2V0KHQpOwotCi0JCXJiX25vZGUgPSByYl9uZXh0KHJiX25vZGUpOwotCi0JCWlmICh0aW1lb3V0ICYmICgrK3QtPnJldHJpZXMgPCBuLT50cmFuc19tYXhfcmV0cmllcykpIHsKLQkJCWRzdF90cmFuc19zZW5kKHQpOwotCQl9IGVsc2UgewotCQkJdC0+ZXJyb3IgPSAtRVRJTUVET1VUOwotCQkJZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2sodCk7Ci0JCQlkc3RfdHJhbnNfcHV0KHQpOwotCQl9Ci0KLQkJZHN0X3RyYW5zX3B1dCh0KTsKLQl9Ci0KLQltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOwotCi0JLyoKLQkgKiBJZiBubyB0aW1lb3V0IHNwZWNpZmllZCB0aGVuIHN5c3RlbSBpcyBpbiB0aGUgbWlkZGxlIG9mIGV4aXRpbmcKLQkgKiBwcm9jZXNzLCBzbyBubyBuZWVkIHRvIHJlc2NoZWR1bGUgc2Nhbm5pbmcgcHJvY2VzcyBhZ2Fpbi4KLQkgKi8KLQlpZiAodGltZW91dCkgewotCQlpZiAoIW51bSkKLQkJCXRpbWVvdXQgPSBIWjsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZuLT50cmFuc193b3JrLCB0aW1lb3V0KTsKLQl9Ci19Ci0KLS8qCi0gKiBGbHVzaCBhbGwgdHJhbnNhY3Rpb25zIGFuZCBtYXJrIHRoZW0gYXMgdGltZWQgb3V0LgotICogRGVzdHJveSB0cmFuc2FjdGlvbiBwb29scy4KLSAqLwotdm9pZCBkc3Rfbm9kZV90cmFuc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0OwotCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOwotCi0JaWYgKCFuLT50cmFuc19jYWNoZSkKLQkJcmV0dXJuOwotCi0JZHByaW50aygiJXM6IG46ICVwLCBjYW5jZWxsaW5nIHRoZSB3b3JrLlxuIiwgX19mdW5jX18sIG4pOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbi0+dHJhbnNfd29yayk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQlkcHJpbnRrKCIlczogbjogJXAsIHdvcmsgaGFzIGJlZW4gY2FuY2VsbGVkLlxuIiwgX19mdW5jX18sIG4pOwotCi0JZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJm4tPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKLQkJdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgbjogJXMuXG4iLAotCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgbi0+bmFtZSk7Ci0KLQkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7Ci0KLQkJdC0+ZXJyb3IgPSAtRVRJTUVET1VUOwotCQlkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKLQkJZHN0X3RyYW5zX3B1dCh0KTsKLQl9Ci0KLQltZW1wb29sX2Rlc3Ryb3kobi0+dHJhbnNfcG9vbCk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KG4tPnRyYW5zX2NhY2hlKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgdHJhbnNhY3Rpb24gc3RvcmFnZSBmb3IgZ2l2ZW4gbm9kZS4KLSAqIFRyYW5zYWN0aW9uIHN0b3JlcyBub3Qgb25seSBjb250cm9sIGluZm9ybWF0aW9uLAotICogYnV0IGFsc28gbmV0d29yayBjb21tYW5kIGFuZCBjcnlwdG8gZGF0YSAoaWYgbmVlZGVkKQotICogdG8gcmVkdWNlIG51bWJlciBvZiBhbGxvY2F0aW9ucy4gVGh1cyB0cmFuc2FjdGlvbiBzaXplCi0gKiBkaWZmZXJzIGZyb20gbm9kZSB0byBub2RlLgotICovCi1pbnQgZHN0X25vZGVfdHJhbnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHVuc2lnbmVkIGludCBzaXplKQotewotCS8qCi0JICogV2UgbmVlZCB0aGlzLCBzaW5jZSBub2RlIHdpdGggZ2l2ZW4gbmFtZSBjYW4gYmUgZHJvcHBlZCBmcm9tIHRoZQotCSAqIGhhc2ggdGFibGUsIGJ1dCBiZSBzdGlsbCBhbGl2ZSwgc28gc3Vic2VxdWVudCBjcmVhdGlvbiBvZiB0aGUgbm9kZQotCSAqIHdpdGggdGhlIHNhbWUgbmFtZSBtYXkgY29sbGlkZSB3aXRoIGV4aXN0aW5nIGNhY2hlIG5hbWUuCi0JICovCi0KLQlzbnByaW50ZihuLT5jYWNoZV9uYW1lLCBzaXplb2Yobi0+Y2FjaGVfbmFtZSksICIlcy0lcCIsIG4tPm5hbWUsIG4pOwotCi0Jbi0+dHJhbnNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShuLT5jYWNoZV9uYW1lLAotCQkJc2l6ZSArIG4tPmNyeXB0by5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwKLQkJCTAsIDAsIE5VTEwpOwotCWlmICghbi0+dHJhbnNfY2FjaGUpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0Jbi0+dHJhbnNfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChkc3RfbWVtcG9vbF9udW0sCi0JCQluLT50cmFuc19jYWNoZSk7Ci0JaWYgKCFuLT50cmFuc19wb29sKQotCQlnb3RvIGVycl9vdXRfY2FjaGVfZGVzdHJveTsKLQotCW11dGV4X2luaXQoJm4tPnRyYW5zX2xvY2spOwotCW4tPnRyYW5zX3Jvb3QgPSBSQl9ST09UOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJm4tPnRyYW5zX3dvcmssIGRzdF90cmFuc19zY2FuKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm4tPnRyYW5zX3dvcmssIG4tPnRyYW5zX3NjYW5fdGltZW91dCk7Ci0KLQlkcHJpbnRrKCIlczogbjogJXAsIHNpemU6ICV1LCBjcnlwdG86ICV1LlxuIiwKLQkJX19mdW5jX18sIG4sIHNpemUsIG4tPmNyeXB0by5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9jYWNoZV9kZXN0cm95OgotCWttZW1fY2FjaGVfZGVzdHJveShuLT50cmFuc19jYWNoZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIC1FTk9NRU07Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCmluZGV4IDNhYmU3YzkuLjNkZWZhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCkBAIC00Nyw3ICs0Nyw3IEBACiBjb25maWcgUEFORUxfS0VZUEFECiAJZGVwZW5kcyBvbiBQQU5FTCAmJiBQQU5FTF9QUk9GSUxFPSIwIgogCWludCAiS2V5cGFkIHR5cGUgKDA9bm9uZSwgMT1vbGQgNiBrZXlzLCAyPW5ldyA2IGtleXMsIDM9TmV4Y29tIDQga2V5cykiCi0JcmFuZ2UgMCA0CisJcmFuZ2UgMCAzCiAJZGVmYXVsdCAwCiAJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGFuZCBjb25maWd1cmVzIGEga2V5cGFkIGNvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKaW5kZXggZjk4YTUyNC4uOTVjOTNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BBTkVMX0xDRF9DSEFSU0VUCiAjdW5kZWYgREVGQVVMVF9MQ0RfQ0hBUlNFVAotI2RlZmluZSBERUZBVUxUX0xDRF9DSEFSU0VUCisjZGVmaW5lIERFRkFVTFRfTENEX0NIQVJTRVQgQ09ORklHX1BBTkVMX0xDRF9DSEFSU0VUCiAjZW5kaWYKIAogI2VuZGlmIC8qIERFRkFVTFRfUFJPRklMRSA9PSAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCmluZGV4IGJhYzQwZDYuLjhkNjRlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCkBAIC0xLDYgKzEsNSBAQAogVE9ETzoKIAktIEFkZCBzdXBwb3J0IGZvciBzd2FwIG5vdGlmaWVycwotCS0gUmVtb3ZlIENPTkZJR19BUk0gaGFjawogCiBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAogTml0aW4gR3VwdGEgPG5ndXB0YUB2ZmxhcmUub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCmluZGV4IGI4MzlmMDUuLjk4OWZhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMKQEAgLTIyMiwyOCArMjIyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCByYW16c3dhcF9mbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLSNpZmRlZiBDT05GSUdfQVJNCi0JaW50IGZsYWcgPSAwOwotCS8qCi0JICogVWdseSBoYWNrIHRvIGdldCBmbHVzaF9kY2FjaGVfcGFnZSgpIHdvcmsgb24gQVJNLgotCSAqIHBhZ2VfbWFwcGluZyhwYWdlKSA9PSBOVUxMIGFmdGVyIGNsZWFyaW5nIHRoaXMgc3dhcCBjYWNoZSBmbGFnLgotCSAqIFdpdGhvdXQgY2xlYXJpbmcgdGhpcyBmbGFnLCBmbHVzaF9kY2FjaGVfcGFnZSgpIHdpbGwgc2ltcGx5IHNldAotCSAqICJQR19kY2FjaGVfZGlydHkiIGJpdCBhbmQgcmV0dXJuLgotCSAqLwotCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKSB7Ci0JCWZsYWcgPSAxOwotCQlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0JfQotI2VuZGlmCi0JZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0jaWZkZWYgQ09ORklHX0FSTQotCWlmIChmbGFnKQotCQlTZXRQYWdlU3dhcENhY2hlKHBhZ2UpOwotI2VuZGlmCi19Ci0KIHZvaWQgcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCByYW16c3dhcCAqcnpzLAogCQkJc3RydWN0IHJhbXpzd2FwX2lvY3RsX3N0YXRzICpzKQogewpAQCAtNjU1LDcgKzYzMyw3IEBACiAJbWVtc2V0KHVzZXJfbWVtLCAwLCBQQUdFX1NJWkUpOwogCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKIAotCXJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCiAJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAliaW9fZW5kaW8oYmlvLCAwKTsKQEAgLTY3OSw3ICs2NTcsNyBAQAogCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKIAlrdW5tYXBfYXRvbWljKGNtZW0sIEtNX1VTRVIxKTsKIAotCXJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCiAJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAliaW9fZW5kaW8oYmlvLCAwKTsKQEAgLTc3OSw3ICs3NTcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyYW16c3dhcF9mbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAogCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CiAJYmlvX2VuZGlvKGJpbywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDMyMjJjMjIuLjBkNDkwYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0xMzE4LDEzICsxMzE4LDEzIEBACiAJc3RydWN0IHNrX2J1ZmYgKmZyYWcsCiAJaW50IGhkcl9sZW4pOwogCi1leHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV90eGJfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqKTsKIAogCiAvKiBpZWVlODAyMTFfcnguYyAqLwotZXh0ZXJuIGludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cyk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLApAQCAtMTM3Niw4ICsxMzc2LDggQEAKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfZ2V0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CkBAIC0xMzg1LDcgKzEzODUsNyBAQAogZXh0ZXJuIHZvaWQgbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9wc190eF9hY2soc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHNob3J0IHN1Y2Nlc3MpOwogZXh0ZXJuIHZvaWQgU2VuZERpc2Fzc29jaWF0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLHU4KiBhc1N0YSx1OCBhc1Jzbik7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogCiAvL0FkZCBmb3IgUkYgcG93ZXIgb24gcG93ZXIgb2ZmIGJ5IGxpemhhb21pbmcgMDgwNTEyCiBleHRlcm4gdm9pZCBTZW5kRGlzYXNzb2NpYXRpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGY4ODJkZDguLjkxMjhjMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC00NjksNyArNDY5LDcgQEAKIC8qIEFsbCByZWNlaXZlZCBmcmFtZXMgYXJlIHNlbnQgdG8gdGhpcyBmdW5jdGlvbi4gQHNrYiBjb250YWlucyB0aGUgZnJhbWUgaW4KICAqIElFRUUgODAyLjExIGZvcm1hdCwgaS5lLiwgaW4gdGhlIGZvcm1hdCBpdCB3YXMgc2VudCBvdmVyIGFpci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiAqLwotaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDFmZTE5YzMuLmM3YzY0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNjg5LDcgKzY4OSw3IEBACiB9CiAKIC8qIGNhbGxlZCB3aXRoIGllZWUtPmxvY2sgaGVsZCAqLwotdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCWlmKElTX0RPVDExRF9FTkFCTEUoaWVlZSkgKQogCXsKQEAgLTExOTYsNyArMTE5Niw3IEBACiAJfQogfQogCi12b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQordm9pZCBpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCiB7CiAJdTggKmM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE4OTgsNyArMTg5OCw3IEBACiAKIAkJCQkJCQkJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMihpZWVlKTsKIAkJCQkJCQl9ZWxzZXsKLQkJCQkJCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOworCQkJCQkJCQlpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOwogCQkJCQkJCX0KIAkJCQkJCX1lbHNlewogCQkJCQkJCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfYXV0aF9yc19lcnIrKzsKQEAgLTIwNDcsNyArMjA0Nyw3IEBACiAKIH0KIAotdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwODksNyArMjA4OSw3IEBACiB9CiAKIAotdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvL3NwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLGZsYWdzKTsKQEAgLTIzMDEsNyArMjMwMSw3IEBACiAvLyNlbHNlCiAJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogLy8jZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CkBAIC0yMzU3LDcgKzIzNTcsNyBAQAogCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5iZWlucmV0cnkgPSBmYWxzZTsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAkvL1lKLGFkZCwwODA4MjgsIG5vdGlmeSBvcyBoZXJlCiAJaWYoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggZGRlMWYyZS4uNjliZDAyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTMwNCw3ICszMDQsNyBAQAogfQogCiAvKiBTS0JzIGFyZSBhZGRlZCB0byB0aGUgaWVlZS0+dHhfcXVldWUuICovCi1pbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCmluZGV4IDU3YzYyYjAuLmUwZjEzZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCkBAIC0xODExLDcgKzE4MTEsNyBAQAogCQkJaWYocHJpdi0+cnhfc2tiLT5sZW4gPiA0KQogCQkJCXNrYl90cmltKHByaXYtPnJ4X3NrYixwcml2LT5yeF9za2ItPmxlbi00KTsKICNpZm5kZWYgUlhfRE9OVF9QQVNTX1VMCi0JCQlpZighaWVlZTgwMjExX3J4KHByaXYtPmllZWU4MDIxMSwKKwkJCWlmKCFpZWVlODAyMTFfcnRsX3J4KHByaXYtPmllZWU4MDIxMSwKIAkJCQkJIHByaXYtPnJ4X3NrYiwgJnN0YXRzKSl7CiAjZW5kaWYgLy8gUlhfRE9OVF9QQVNTX1VMCiAKQEAgLTE5MTcsMTEgKzE5MTcsMTEgQEAKIAlpZiAoIWNoZWNrX25pY19lbm91Z2h0X2Rlc2MoZGV2LCBwcmlvcml0eSkpewogCQlETUVTR1coIkVycm9yOiBubyBkZXNjcmlwdG9yIGxlZnQgYnkgcHJldmlvdXMgVFggKGF2YWlsICVkKSAiLAogCQkJZ2V0X2N1cnJfdHhfZnJlZV9kZXNjKGRldiwgcHJpb3JpdHkpKTsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiAJfQogCXJ0bDgxODBfdHgoZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBwcmlvcml0eSwgbW9yZWZyYWcsMCxyYXRlKTsKIAlpZiAoIWNoZWNrX25pY19lbm91Z2h0X2Rlc2MoZGV2LCBwcmlvcml0eSkpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiB9CkBAIC0zNjgwLDcgKzM2ODAsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcjgxODBfc2V0X21hY19hZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAotCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3J0bF94bWl0LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcnRsODE4MF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0zOTAwLDcgKzM5MDAsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCiAJaWYoZW5vdWdoX2Rlc2MpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogfQogCiB2b2lkIHJ0bDgxODBfdHhfaXNyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmksc2hvcnQgZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMKaW5kZXggNTM2Y2I2ZS4uMTI0Y2RlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJLy8JcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAmcHJpdi0+aWVlZTgwMjExLT53eF9zeW5jX3NjYW5fd3EpOwogCQkvL3ByaW50aygic3RhcnQgc2Nhbj09PT09PT09PT09PT09PT09PT09PT09PT09PT0+XG4iKTsKIAkJaWVlZTgwMjExX3NvZnRtYWNfaXBzX3NjYW5fc3luY3JvKHByaXYtPmllZWU4MDIxMSk7Ci0vL2llZWU4MDIxMV9zdGFydF9zY2FuKHByaXYtPmllZWU4MDIxMSk7CisvL2llZWU4MDIxMV9ydGxfc3RhcnRfc2Nhbihwcml2LT5pZWVlODAyMTEpOwogCQkvKiBpbnRlbnRpb25hbGx5IGZvcmdldCB0byB1cCBzZW0gKi8KIC8vCQkJdXAoJnByaXYtPmllZWU4MDIxMS0+d3hfc2VtKTsKIAkJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmgKaW5kZXggOTcxMzdkZC4uM2JhOWU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaApAQCAtMzAzLDggKzMwMyw4IEBACiAjZGVmaW5lIGllZWU4MDIxMV9yeF9tZ3QJCWllZWU4MDIxMV9yeF9tZ3RfcnNsCiAKICNkZWZpbmUgaWVlZTgwMjExX2dldF9iZWFjb24JCWllZWU4MDIxMV9nZXRfYmVhY29uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2FrZV9xdWV1ZQkJaWVlZTgwMjExX3dha2VfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWVfcnNsCisjZGVmaW5lIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZQkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfcmVzZXRfcXVldWUJCWllZWU4MDIxMV9yZXNldF9xdWV1ZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbAlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbF9yc2wKQEAgLTI0MzUsMTMgKzI0MzUsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0yNTAyLDggKzI1MDIsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDgzYzg0NTIuLmFhNzYzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMzMzLDggKzMzMyw4IEBACiAjZGVmaW5lIGllZWU4MDIxMV9yeF9tZ3QJCWllZWU4MDIxMV9yeF9tZ3RfcnNsCiAKICNkZWZpbmUgaWVlZTgwMjExX2dldF9iZWFjb24JCWllZWU4MDIxMV9nZXRfYmVhY29uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2FrZV9xdWV1ZQkJaWVlZTgwMjExX3dha2VfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWVfcnNsCisjZGVmaW5lIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZQkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfcmVzZXRfcXVldWUJCWllZWU4MDIxMV9yZXNldF9xdWV1ZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbAlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbF9yc2wKQEAgLTI1NDYsMTMgKzI1NDYsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0yNjEzLDggKzI2MTMsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggMjY0NDE1NS4uZjQzYTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCWllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilkZXYtPnByaXY7CiAjZW5kaWYKICNpZiAwCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfeG1pdDsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9ydGxfeG1pdDsKICNlbmRpZgogCiAJbWVtc2V0KGllZWUsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSkrc2l6ZW9mX3ByaXYpOwpAQCAtMzMzLDcgKzMzMyw3IEBACiBleHRlcm4gaW50IGllZWU4MDIxMV9jcnlwdG9fd2VwX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfY3J5cHRvX3dlcF9leGl0KHZvaWQpOwogCi1pbnQgX19pbml0IGllZWU4MDIxMV9pbml0KHZvaWQpCitpbnQgX19pbml0IGllZWU4MDIxMV9ydGxfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAlpbnQgcmV0dmFsOwpAQCAtMzg5LDcgKzM4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCit2b2lkIF9fZXhpdCBpZWVlODAyMTFfcnRsX2V4aXQodm9pZCkKIHsKIAlpZiAoaWVlZTgwMjExX3Byb2MpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgaWVlZTgwMjExX3Byb2MpOwpAQCAtNDEyLDggKzQxMiw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKIAogCi0vL21vZHVsZV9leGl0KGllZWU4MDIxMV9leGl0KTsKLS8vbW9kdWxlX2luaXQoaWVlZTgwMjExX2luaXQpOworLy9tb2R1bGVfZXhpdChpZWVlODAyMTFfcnRsX2V4aXQpOworLy9tb2R1bGVfaW5pdChpZWVlODAyMTFfcnRsX2luaXQpOwogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggNWRjNDc4Yi4uMDZkOTE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC05MjMsNyArOTIzLDcgQEAKIC8qIEFsbCByZWNlaXZlZCBmcmFtZXMgYXJlIHNlbnQgdG8gdGhpcyBmdW5jdGlvbi4gQHNrYiBjb250YWlucyB0aGUgZnJhbWUgaW4KICAqIElFRUUgODAyLjExIGZvcm1hdCwgaS5lLiwgaW4gdGhlIGZvcm1hdCBpdCB3YXMgc2VudCBvdmVyIGFpci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiAqLwotaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCA1OTNkMjI4Li42ZDFkZGVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNjg0LDcgKzY4NCw3IEBACiB9CiAKIC8qIGNhbGxlZCB3aXRoIGllZWUtPmxvY2sgaGVsZCAqLwotdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogI2lmZGVmIEVOQUJMRV9ET1QxMUQKIAlpZihJU19ET1QxMURfRU5BQkxFKGllZWUpICkKQEAgLTE0MzAsNyArMTQzMCw3IEBACiAJfQogfQogCi12b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQordm9pZCBpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCiB7CiAJdTggKmM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTIyNjIsNyArMjI2Miw3IEBACiAKIAkJCQkJCQkJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMihpZWVlKTsKIAkJCQkJCQl9ZWxzZXsKLQkJCQkJCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOworCQkJCQkJCQlpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOwogCQkJCQkJCX0KIAkJCQkJCX1lbHNlewogCQkJCQkJCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfYXV0aF9yc19lcnIrKzsKQEAgLTIzNzYsNyArMjM3Niw3IEBACiAJCQkgKiB0byBjaGVjayBpdCBhbnkgbW9yZS4KIAkJCSAqICovCiAJCQkvL3ByaW50aygiZXJyb3I6bm8gZGVzY3JpcHRvciBsZWZ0QHF1ZXVlX2luZGV4ICVkXG4iLCBxdWV1ZV9pbmRleCk7Ci0JCQkvL2llZWU4MDIxMV9zdG9wX3F1ZXVlKGllZWUpOworCQkJLy9pZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoaWVlZSk7CiAjaWZkZWYgVVNCX1RYX0RSSVZFUl9BR0dSRUdBVElPTl9FTkFCTEUKIAkJCXNrYl9xdWV1ZV90YWlsKCZpZWVlLT5za2JfZHJ2X2FnZ1FbcXVldWVfaW5kZXhdLCB0eGItPmZyYWdtZW50c1tpXSk7CiAjZWxzZQpAQCAtMjQ0MCw3ICsyNDQwLDcgQEAKIAogfQogCi12b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjQ4MSw3ICsyNDgxLDcgQEAKIH0KIAogCi12b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJLy91bnNpZ25lZCBsb25nIGZsYWdzOwogCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssZmxhZ3MpOwpAQCAtMjcwNiw3ICsyNzA2LDcgQEAKIAogCWlmIChpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTk9MSU5LKXsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0yNzc1LDcgKzI3NzUsNyBAQAogCXsKIAkJaWVlZS0+aXNfcm9hbWluZz0gZmFsc2U7CiAJCWllZWUtPmFjdHNjYW5uaW5nID0gdHJ1ZTsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oaWVlZSk7CisJCWllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihpZWVlKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogCkBAIC0zNDk3LDggKzM0OTcsOCBAQAogCiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIC8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2JlYWNvbik7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3dha2VfcXVldWUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3F1ZXVlKTsKKy8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnRsX3dha2VfcXVldWUpOworLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZSk7CiAvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKTsKIC8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKTsKIC8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCk7CkBAIC0zNTE4LDggKzM1MTgsOCBAQAogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNybyk7CiAjZWxzZQogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX2dldF9iZWFjb24pOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3dha2VfcXVldWUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3N0b3BfcXVldWUpOworRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKTsKK0VYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZSk7CiBFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcmVzZXRfcXVldWUpOwogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbCk7CiBFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCAxMDNiMzNjLi43OThmYjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogCX0KIH0KIAotaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggNGUzNGExZjQuLjM0NDFiNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtOTc2LDcgKzk3Niw3IEBACiAJewogCQlpZiAobGVuICE9IGllWzFdKzIpCiAJCXsKLQkJCXByaW50aygibGVuOiVkLCBpZTolZFxuIiwgbGVuLCBpZVsxXSk7CisJCQlwcmludGsoImxlbjolenUsIGllOiVkXG4iLCBsZW4sIGllWzFdKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwppbmRleCA5OGIzYmI2Li5lNDFlOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0zODIsNyArMzgyLDcgQEAKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJFUSglZCAvICVkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJFUSglZCAvICV6dSlcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC00ODEsNyArNDgxLDcgQEAKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJTUCglZCAvICVkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJTUCglZCAvICV6dSlcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJzcCA9ICggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIqKXNrYi0+ZGF0YTsKQEAgLTYxMSw3ICs2MTEsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIERFTEJBKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIERFTEJBKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KSk7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMKaW5kZXggZmY4ZmU3ZS4uMGNhNWQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMKQEAgLTU3OTUsNyArNTc5NSw3IEBACiAgICAgICAgICAgICAgICAgc3RhdHMuZnJhZ29mZnNldCA9IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMubnRvdGFsZnJhZyA9IDE7CiAKLSAgICAgICAgICAgICAgICBpZighaWVlZTgwMjExX3J4KHByaXYtPmllZWU4MDIxMSwgc2tiLCAmc3RhdHMpKXsKKyAgICAgICAgICAgICAgICBpZighaWVlZTgwMjExX3J0bF9yeChwcml2LT5pZWVlODAyMTEsIHNrYiwgJnN0YXRzKSl7CiAgICAgICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHJpdi0+c3RhdHMucnhvaysrOwpAQCAtNTgzNyw3ICs1ODM3LDcgQEAKIAkubmRvX2RvX2lvY3RsID0JCQlydGw4MTkyX2lvY3RsLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0JcjgxOTJfc2V0X211bHRpY2FzdCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyA9CQlyODE5Ml9zZXRfbWFjX2FkciwKLQkubmRvX3N0YXJ0X3htaXQgPSAJCWllZWU4MDIxMV94bWl0LAorCS5uZG9fc3RhcnRfeG1pdCA9IAkJaWVlZTgwMjExX3J0bF94bWl0LAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYxMjEsMTQgKzYxMjEsMTQgQEAKIAlSVF9UUkFDRShDT01QX0RPV04sICJ3bGFuIGRyaXZlciByZW1vdmVkXG4iKTsKIH0KIAotZXh0ZXJuIGludCBpZWVlODAyMTFfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9leGl0KHZvaWQpOworZXh0ZXJuIGludCBpZWVlODAyMTFfcnRsX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX2V4aXQodm9pZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0bDgxOTJfcGNpX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGllZWU4MDIxMV9pbml0KCk7CisJcmV0dmFsID0gaWVlZTgwMjExX3J0bF9pbml0KCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtNjE1Myw3ICs2MTUzLDcgQEAKIAogCVJUX1RSQUNFKENPTVBfRE9XTiwgIkV4aXRpbmciKTsKIAlydGw4MTkyX3Byb2NfbW9kdWxlX3JlbW92ZSgpOwotCWllZWU4MDIxMV9leGl0KCk7CisJaWVlZTgwMjExX3J0bF9leGl0KCk7CiB9CiAKIC8vd2FybmluZyBtZXNzYWdlIFdCCkBAIC02MzEzLDcgKzYzMTMsNyBAQAogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLGZsYWdzKTsKIAogCWlmKGVub3VnaF9kZXNjKQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOworCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IGYyMmQwMjQuLjlhNGM4NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0xNzIxLDEzICsxNzIxLDEzIEBACiAJc3RydWN0IHNrX2J1ZmYgKmZyYWcsCiAJaW50IGhkcl9sZW4pOwogCi1leHRlcm4gaW50IHJ0bDgxOTJfaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgcnRsODE5Ml9pZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7CiAKIAogLyogaWVlZTgwMjExX3J4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKQEAgLTE3ODMsOCArMTc4Myw4IEBACiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yZXNldF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2dldF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwppbmRleCBhYzIyM2NlLi5mZWNmYTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAgKgogICogUmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIG1hbmFnZW1lbnQgY29udHJvbCBmcmFtZXMKICAqCi0gKiBDYWxsZWQgYnkgaWVlZTgwMjExX3J4ICovCisgKiBDYWxsZWQgYnkgaWVlZTgwMjExX3J0bF9yeCAqLwogc3RhdGljIGlubGluZSBpbnQKIGllZWU4MDIxMV9yeF9mcmFtZV9tZ210KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMsIHUxNiB0eXBlLApAQCAtMjg5LDcgKzI4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSwgYnkgaWVlZTgwMjExX3J4ICovCisvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSksIGJ5IGllZWU4MDIxMV9ydGxfcnggKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBpZWVlODAyMTFfcnhfZnJhbWVfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQpCkBAIC04NTgsNyArODU4LDcgQEAKIC8qIEFsbCByZWNlaXZlZCBmcmFtZXMgYXJlIHNlbnQgdG8gdGhpcyBmdW5jdGlvbi4gQHNrYiBjb250YWlucyB0aGUgZnJhbWUgaW4KICAqIElFRUUgODAyLjExIGZvcm1hdCwgaS5lLiwgaW4gdGhlIGZvcm1hdCBpdCB3YXMgc2VudCBvdmVyIGFpci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiAqLwotaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDIwM2MwYTUuLjk1ZDRmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNjEwLDcgKzYxMCw3IEBACiB9CiAKIC8qIGNhbGxlZCB3aXRoIGllZWUtPmxvY2sgaGVsZCAqLwotdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCWlmKElTX0RPVDExRF9FTkFCTEUoaWVlZSkgKQogCXsKQEAgLTEyODEsNyArMTI4MSw3IEBACiAJfQogfQogCi12b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQordm9pZCBpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCiB7CiAJdTggKmM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTIwNTQsNyArMjA1NCw3IEBACiAKIAkJCQkJCQkJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMihpZWVlKTsKIAkJCQkJCQl9ZWxzZXsKLQkJCQkJCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOworCQkJCQkJCQlpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOwogCQkJCQkJCX0KIAkJCQkJCX1lbHNlewogCQkJCQkJCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfYXV0aF9yc19lcnIrKzsKQEAgLTIxNjIsNyArMjE2Miw3IEBACiAJCQkgKiB0byBjaGVjayBpdCBhbnkgbW9yZS4KIAkJCSAqICovCiAJCQkvL3ByaW50aygiZXJyb3I6bm8gZGVzY3JpcHRvciBsZWZ0QHF1ZXVlX2luZGV4ICVkLCAlZCwgJWRcbiIsIHF1ZXVlX2luZGV4LCBza2JfcXVldWVfbGVuKCZpZWVlLT5za2Jfd2FpdFFbcXVldWVfaW5kZXhdKSwgaWVlZS0+Y2hlY2tfbmljX2Vub3VnaF9kZXNjKGllZWUtPmRldixxdWV1ZV9pbmRleCkpOwotCQkJLy9pZWVlODAyMTFfc3RvcF9xdWV1ZShpZWVlKTsKKwkJCS8vaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKGllZWUpOwogCQkJc2tiX3F1ZXVlX3RhaWwoJmllZWUtPnNrYl93YWl0UVtxdWV1ZV9pbmRleF0sIHR4Yi0+ZnJhZ21lbnRzW2ldKTsKIAkJfWVsc2V7CiAJCQlpZWVlLT5zb2Z0bWFjX2RhdGFfaGFyZF9zdGFydF94bWl0KApAQCAtMjIyMiw3ICsyMjIyLDcgQEAKIAogfQogCi12b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjI2Myw3ICsyMjYzLDcgQEAKIH0KIAogCi12b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJLy91bnNpZ25lZCBsb25nIGZsYWdzOwogCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssZmxhZ3MpOwpAQCAtMjQ3OSw3ICsyNDc5LDcgQEAKIAogCWlmIChpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTk9MSU5LKXsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0yNTUyLDcgKzI1NTIsNyBAQAogCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspCiAJewogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCA2MDYyMWQ2Li40ZDU0ZTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJfQogfQogCi1pbnQgcnRsODE5Ml9pZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IHJ0bDgxOTJfaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCmluZGV4IDY2Mjc0ZDcuLmNjYjlkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKQEAgLTEyNiw2ICsxMjYsOCBAQAogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzMzAxKX0sCiAJLyogWmlud2VsbCAqLwogCXtVU0JfREVWSUNFKDB4NWE1NywgMHgwMjkwKX0sCisJLyogR3VpbGxlbW90ICovCisJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMzEpfSwKIAkvLzkyU1UKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE3Mil9LAogCXt9CkBAIC0xNTAxLDcgKzE1MDMsNyBAQAogICAgICAgICB1cmItPmNvbnRleHQgPSBza2I7CiAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKICAgICAgICAgZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZihlcnIgJiYgZXJyICE9IEVQRVJNKQorCWlmKGVyciAmJiBlcnIgIT0gLUVQRVJNKQogCQlwcmludGsoImNhbiBub3Qgc3VibWl0IHJ4dXJiLCBlcnIgaXMgJXgsVVJCIHN0YXR1cyBpcyAleFxuIixlcnIsdXJiLT5zdGF0dXMpOwogfQogCkBAIC03MTU1LDcgKzcxNTcsNyBAQAogCQkJdW5pY2FzdF9wYWNrZXQgPSB0cnVlOwogCQl9CiAKLQkJaWYoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlODAyMTEsc2tiLCAmc3RhdHMpKSB7CisJCWlmKCFpZWVlODAyMTFfcnRsX3J4KHByaXYtPmllZWU4MDIxMSxza2IsICZzdGF0cykpIHsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCX0gZWxzZSB7CiAJCS8vCXByaXYtPnN0YXRzLnJ4b2t0b3RhbCsrOyAgLy9ZSix0ZXN0LDA5MDEwOApAQCAtNzQyNiw3ICs3NDI4LDcgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHI4MTkyX3NldF9tYWNfYWRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKLQkubmRvX3N0YXJ0X3htaXQJCT0gcnRsODE5Ml9pZWVlODAyMTFfeG1pdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcnRsODE5Ml9pZWVlODAyMTFfcnRsX3htaXQsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBydGw4MTkyX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKQEAgLTc2MTksNyArNzYyMSw3IEBACiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCiAJaWYoZW5vdWdoX2Rlc2MpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogfQogCiB2b2lkIEVuYWJsZUhXU2VjdXJpdHlDb25maWc4MTkyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCBkMzk3ZjFkLi41ZjEyZDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTg0NSw3ICs4NDUsNyBAQAogCXsKIAkJaWYgKGxlbiAhPSBpZVsxXSsyKQogCQl7Ci0JCQlwcmludGsoImxlbjolZCwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOworCQkJcHJpbnRrKCJsZW46JXp1LCBpZTolZFxuIiwgbGVuLCBpZVsxXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKaW5kZXggMjZhZjQzYi4uNTEyYTU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDM5LDcgKzQzOSw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyc3AgPSAoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKilza2ItPmRhdGE7CkBAIC01NjksNyArNTY5LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBERUxCQSglZCAvICVkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBERUxCQSglZCAvICV6dSlcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNGRiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZwpAQCAtMCwwICsxLDE1IEBACitjb25maWcgRkJfU003WFgKKwl0cmlzdGF0ZSAiU2lsaWNvbiBNb3Rpb24gU003WFggRnJhbWUgQnVmZmVyIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQgorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwloZWxwCisJICBGcmFtZSBCdWZmZXIgZHJpdmVyIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24gU003WFggc2VyaWFsIGdyYXBoaWMgY2FyZC4KKworY29uZmlnIEZCX1NNN1hYX0FDQ0VMCisJYm9vbCAiU2lsaWNvbm1vdGlvbiBBY2NlbGVyYXRpb24gZnVuY3Rpb25zIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRkJfU003WFggJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgVGhpcyB3aWxsIGNvbXBpbGUgdGhlIFRyaWRlbnQgZnJhbWUgYnVmZmVyIGRldmljZSB3aXRoCisJICBhY2NlbGVyYXRpb24gZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0M2NiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfRkJfU003WFgpICs9IHNtN3h4Lm8KKworc203eHgteSA6PSBzbXRjZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjYxZjVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L1RPRE8KQEAgLTAsMCArMSwxMCBAQAorVE9ETzoKKy0gRHVhbCBoZWFkIHN1cHBvcnQKKy0gdXNlIGtlcm5lbCBjb2Rpbmcgc3R5bGUKKy0gY2hlY2twYXRjaC5wbCBjbGVhbgorLSByZWZpbmUgdGhlIGNvZGUgYW5kIHJlbW92ZSB1bnVzZWQgY29kZQorLSB1c2Uga2VybmVsIGZyYW1lYnVmZmVyIG1vZGUgc2V0dGluZyBpbnN0ZWFkIG9mIGhhcmQgY29kZQorLSBtb3ZlIGl0IHRvIGRyaXZlcnMvdmlkZW8vc203eHgvIG9yIG1ha2UgaXQgYmUgZHJpdmVycy92aWRlby9zbTd4eGZiLmMKKworUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kCitUZWRkeSBXYW5nIDx0ZWRkeS53YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNiODZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCkBAIC0wLDAgKzEsOTc5IEBACisvKgorICogU2lsaWNvbiBNb3Rpb24gU003WFggMkQgZHJhd2luZyBlbmdpbmUgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaWxpY29uIE1vdGlvbiBUZWNobm9sb2d5IENvcnAuCisgKiBBdXRob3I6IEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiBWZXJzaW9uIDAuMTAuMjYxOTIuMjEuMDEKKyAqIAktIEFkZCBQb3dlclBDIHN1cHBvcnQKKyAqIAktIEFkZCAyRCBzdXBwb3J0IGZvciBMeW54IC0KKyAqIFZlcmlmaWVkIG9uIDIuNi4xOS4yCisgKiAJQm95b2QueWFuZyAgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CisgKi8KKwordW5zaWduZWQgY2hhciBzbXRjX2RlX2J1c3k7CisKK3ZvaWQgU01UQ193cml0ZTJEcmVnKHVuc2lnbmVkIGxvbmcgbk9mZnNldCwgdW5zaWduZWQgbG9uZyBuRGF0YSkKK3sKKwl3cml0ZWwobkRhdGEsIHNtdGNfMkRCYXNlQWRkcmVzcyArIG5PZmZzZXQpOworfQorCit1bnNpZ25lZCBsb25nIFNNVENfcmVhZDJEcmVnKHVuc2lnbmVkIGxvbmcgbk9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoc210Y18yREJhc2VBZGRyZXNzICsgbk9mZnNldCk7Cit9CisKK3ZvaWQgU01UQ193cml0ZTJEZGF0YXBvcnQodW5zaWduZWQgbG9uZyBuT2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5EYXRhKQoreworCXdyaXRlbChuRGF0YSwgc210Y18yRGRhdGFwb3J0ICsgbk9mZnNldCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZGVJbml0CisgKgorICogUHVycG9zZQorICogICAgRHJhd2luZyBlbmdpbmUgaW5pdGlhbGl6YXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgZGVJbml0KHVuc2lnbmVkIGludCBuTW9kZVdpZHRoLCB1bnNpZ25lZCBpbnQgbk1vZGVIZWlnaHQsCisJCXVuc2lnbmVkIGludCBicHApCit7CisJLyogR2V0IGN1cnJlbnQgcG93ZXIgY29uZmlndXJhdGlvbi4gKi8KKwl1bnNpZ25lZCBjaGFyIGNsb2NrOworCWNsb2NrID0gc210Y19zZXFyKDB4MjEpOworCisJLyogaW5pdGlhbGl6ZSBnbG9iYWwgJ211dGV4IGxvY2snIHZhcmlhYmxlICovCisJc210Y19kZV9idXN5ID0gMDsKKworCS8qIEVuYWJsZSAyRCBEcmF3aW5nIEVuZ2luZSAqLworCXNtdGNfc2VxdygweDIxLCBjbG9jayAmIDB4RjgpOworCisJU01UQ193cml0ZTJEcmVnKERFX0NMSVBfVEwsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9DTElQX1RMLCBUT1AsIDApIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DTElQX1RMLCBTVEFUVVMsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DTElQX1RMLCBJTkhJQklULCBPVVRTSURFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9DTElQX1RMLCBMRUZULCAwKSk7CisKKwlpZiAoYnBwID49IDI0KSB7CisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBuTW9kZVdpZHRoICogMykgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCQkgIERFX1BJVENILAorCQkJCQkJCQkgIFNPVVJDRSwKKwkJCQkJCQkJICBuTW9kZVdpZHRoCisJCQkJCQkJCSAgKiAzKSk7CisJfSBlbHNlIHsKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIG5Nb2RlV2lkdGgpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgICBERV9QSVRDSCwKKwkJCQkJCQkgICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICAgbk1vZGVXaWR0aCkpOworCX0KKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJCSAgICBuTW9kZVdpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJCSAgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgICBuTW9kZVdpZHRoKSk7CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgODoKKwkJU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULAorCQkJCUZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YWSwKKwkJCQkJICBOT1JNQUwpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQlERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQlQQVRURVJOX1ksCisJCQkJCQkJMCkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1gsCisJCQkJICAgIDApIHwgRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJICAgUElYRUxfRk9STUFULAorCQkJCQkJICAgOCkgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCSAgQUREUkVTU0lORywKKwkJCQkJCQkgIFhZKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCVNPVVJDRV9IRUlHSFQsIDMpKTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULAorCQkJCUZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YWSwKKwkJCQkJICBOT1JNQUwpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQlERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQlQQVRURVJOX1ksCisJCQkJCQkJMCkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1gsCisJCQkJICAgIDApIHwgRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCSAgIFBJWEVMX0ZPUk1BVCwKKwkJCQkJCQkgICAyNCkgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgICBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgICBBRERSRVNTSU5HLAorCQkJCQkJCSAgIFhZKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCVNPVVJDRV9IRUlHSFQsIDMpKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwlkZWZhdWx0OgorCQlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1hZLAorCQkJCQkgIE5PUk1BTCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCURFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCVBBVFRFUk5fWSwKKwkJCQkJCQkwKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWCwKKwkJCQkgICAgMCkgfCBGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJICAgUElYRUxfRk9STUFULAorCQkJCQkJCSAgIDE2KSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSAgIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCSAgIEFERFJFU1NJTkcsCisJCQkJCQkJICAgWFkpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJU09VUkNFX0hFSUdIVCwgMykpOworCQlicmVhazsKKwl9CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfTUFTS1MsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9NQVNLUywgQllURV9NQVNLLCAweEZGRkYpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX01BU0tTLCBCSVRfTUFTSywgMHhGRkZGKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0NPTE9SX0NPTVBBUkVfTUFTSywKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTE9SX0NPTVBBUkVfTUFTSywgTUFTS1MsIFwKKwkJCQkweEZGRkZGRikpOworCVNNVENfd3JpdGUyRHJlZyhERV9DT0xPUl9DT01QQVJFLAorCQkJRklFTERfVkFMVUUoMCwgREVfQ09MT1JfQ09NUEFSRSwgQ09MT1IsIDB4RkZGRkZGKSk7Cit9CisKK3ZvaWQgZGVWZXJ0aWNhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCQkgICAgdW5zaWduZWQgbG9uZyBuWCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgblksCisJCSAgICB1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQoreworCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBkc3RfYmFzZSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLCBkc3RfcGl0Y2gpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBTT1VSQ0UsIGRzdF9waXRjaCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAorCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgblgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBuWSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgMSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBkc3RfaGVpZ2h0KSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLCBMRUZUX1RPX1JJR0hUKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTUFKT1IsIFkpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1gsIE5FR0FUSVZFKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9ZLCBQT1NJVElWRSkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIExBU1RfUElYRUwsIE9GRikgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIFNIT1JUX1NUUk9LRSkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgMHgwQykpOworCisJc210Y19kZV9idXN5ID0gMTsKK30KKwordm9pZCBkZUhvcml6b250YWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCQkgICAgICB1bnNpZ25lZCBsb25nIG5YLAorCQkgICAgICB1bnNpZ25lZCBsb25nIG5ZLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCit7CisJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCisJCQkJICAgIGRzdF9iYXNlKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sIGRzdF9waXRjaCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIFNPVVJDRSwgZHN0X3BpdGNoKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILAorCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAorCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOworCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwKKwkJCSAgRElTQUJMRSkgfCBGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwKKwkJCQkJCSBuWCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgIERFX0RFU1RJTkFUSU9OLAorCQkJCQkJCSAgIFksCisJCQkJCQkJICAgblkpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLAorCQkJICAgIGRzdF93aWR0aCkgfCBGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sCisJCQkJCQkgICAgIFlfRVQsIDEpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKKwkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJICAgIERFX0NPTlRST0wsCisJCQkJCQkJICAgIERJUkVDVElPTiwKKwkJCQkJCQkgICAgUklHSFRfVE9fTEVGVCkKKwkJfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTUFKT1IsIFgpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJIERFX0NPTlRST0wsCisJCQkJCQkJIFNURVBfWCwKKwkJCQkJCQkgUE9TSVRJVkUpCisJCXwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWSwKKwkJCSAgICBORUdBVElWRSkgfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwKKwkJCQkJCSAgTEFTVF9QSVhFTCwKKwkJCQkJCSAgT0ZGKSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSAgIERFX0NPTlRST0wsCisJCQkJCQkJICAgQ09NTUFORCwKKwkJCQkJCQkgICBTSE9SVF9TVFJPS0UpCisJCXwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsCisJCQkgICAgUk9QMikgfCBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsCisJCQkJCQkweDBDKSk7CisKKwlzbXRjX2RlX2J1c3kgPSAxOworfQorCit2b2lkIGRlTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkgICAgdW5zaWduZWQgbG9uZyBuWDEsCisJICAgIHVuc2lnbmVkIGxvbmcgblkxLAorCSAgICB1bnNpZ25lZCBsb25nIG5YMiwgdW5zaWduZWQgbG9uZyBuWTIsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQoreworCXVuc2lnbmVkIGxvbmcgbkNvbW1hbmQgPQorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLCBMRUZUX1RPX1JJR0hUKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBNQUpPUiwgWCkgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9YLCBQT1NJVElWRSkgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9ZLCBQT1NJVElWRSkgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTEFTVF9QSVhFTCwgT0ZGKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8CisJICAgIEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgMHgwQyk7CisJdW5zaWduZWQgbG9uZyBEZWx0YVg7CisJdW5zaWduZWQgbG9uZyBEZWx0YVk7CisKKwkvKiBDYWxjdWxhdGUgZGVsdGEgWCAqLworCWlmIChuWDEgPD0gblgyKQorCQlEZWx0YVggPSBuWDIgLSBuWDE7CisJZWxzZSB7CisJCURlbHRhWCA9IG5YMSAtIG5YMjsKKwkJbkNvbW1hbmQgPSBGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIFNURVBfWCwgTkVHQVRJVkUpOworCX0KKworCS8qIENhbGN1bGF0ZSBkZWx0YSBZICovCisJaWYgKG5ZMSA8PSBuWTIpCisJCURlbHRhWSA9IG5ZMiAtIG5ZMTsKKwllbHNlIHsKKwkJRGVsdGFZID0gblkxIC0gblkyOworCQluQ29tbWFuZCA9IEZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgU1RFUF9ZLCBORUdBVElWRSk7CisJfQorCisJLyogRGV0ZXJtaW5lIHRoZSBtYWpvciBheGlzICovCisJaWYgKERlbHRhWCA8IERlbHRhWSkKKwkJbkNvbW1hbmQgPSBGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIE1BSk9SLCBZKTsKKworCS8qIFZlcnRpY2FsIGxpbmU/ICovCisJaWYgKG5YMSA9PSBuWDIpCisJCWRlVmVydGljYWxMaW5lKGRzdF9iYXNlLCBkc3RfcGl0Y2gsIG5YMSwgblkxLCBEZWx0YVksIG5Db2xvcik7CisKKwkvKiBIb3Jpem9udGFsIGxpbmU/ICovCisJZWxzZSBpZiAoblkxID09IG5ZMikKKwkJZGVIb3Jpem9udGFsTGluZShkc3RfYmFzZSwgZHN0X3BpdGNoLCBuWDEsIG5ZMSwgXAorCQkJCURlbHRhWCwgbkNvbG9yKTsKKworCS8qIERpYWdvbmFsIGxpbmU/ICovCisJZWxzZSBpZiAoRGVsdGFYID09IERlbHRhWSkgeworCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJCQkgICAgQUREUkVTUywgZHN0X2Jhc2UpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICBERV9QSVRDSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCisJCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgMSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBuWTEpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgMSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgRGVsdGFYKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCQkJRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBDT01NQU5ELAorCQkJCQkgIFNIT1JUX1NUUk9LRSkpOworCX0KKworCS8qIEdlbmVyaWMgbGluZSAqLworCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgazEsIGsyLCBldCwgdzsKKwkJaWYgKERlbHRhWCA8IERlbHRhWSkgeworCQkJazEgPSAyICogRGVsdGFYOworCQkJZXQgPSBrMSAtIERlbHRhWTsKKwkJCWsyID0gZXQgLSBEZWx0YVk7CisJCQl3ID0gRGVsdGFZICsgMTsKKwkJfSBlbHNlIHsKKwkJCWsxID0gMiAqIERlbHRhWTsKKwkJCWV0ID0gazEgLSBEZWx0YVg7CisJCQlrMiA9IGV0IC0gRGVsdGFYOworCQkJdyA9IERlbHRhWCArIDE7CisJCX0KKworCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJCQkgICAgQUREUkVTUywgZHN0X2Jhc2UpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICBERV9QSVRDSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCisJCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCisJCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgazEpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIGsyKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBuWDEpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgblkxKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIHcpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGV0KSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCQkJRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBDT01NQU5ELAorCQkJCQkgIExJTkVfRFJBVykpOworCX0KKworCXNtdGNfZGVfYnVzeSA9IDE7Cit9CisKK3ZvaWQgZGVGaWxsUmVjdCh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCQl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkJdW5zaWduZWQgbG9uZyBkc3RfWCwKKwkJdW5zaWduZWQgbG9uZyBkc3RfWSwKKwkJdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCisJCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCit7CisJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCisJCQkJICAgIGRzdF9iYXNlKSk7CisKKwlpZiAoZHN0X3BpdGNoKSB7CisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1BJVENILAorCQkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKwl9CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIGRzdF9YKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgZHN0X1kpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIGRzdF93aWR0aCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBkc3RfaGVpZ2h0KSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLCBMRUZUX1RPX1JJR0hUKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTEFTVF9QSVhFTCwgT0ZGKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgUkVDVEFOR0xFX0ZJTEwpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIDB4MEMpKTsKKworCXNtdGNfZGVfYnVzeSA9IDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZGVSb3RhdGVQYXR0ZXJuCisgKgorICogUHVycG9zZQorICogICAgUm90YXRlIHRoZSBnaXZlbiBwYXR0ZXJuIGlmIG5lY2Vzc2FyeQorICoKKyAqIFBhcmFtZXRlcnMKKyAqICAgIFtpbl0KKyAqCSAgIHBQYXR0ZXJuICAtIFBvaW50ZXIgdG8gREVfU1VSRkFDRSBzdHJ1Y3R1cmUgY29udGFpbmluZworICoJCSAgICAgICBwYXR0ZXJuIGF0dHJpYnV0ZXMKKyAqCSAgIHBhdHRlcm5YICAtIFggcG9zaXRpb24gKDAtNykgb2YgcGF0dGVybiBvcmlnaW4KKyAqCSAgIHBhdHRlcm5ZICAtIFkgcG9zaXRpb24gKDAtNykgb2YgcGF0dGVybiBvcmlnaW4KKyAqCisgKiAgICBbb3V0XQorICoJICAgcGF0dGVybl9kc3RhZGRyIC0gUG9pbnRlciB0byBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nCisgKgkgICByb3RhdGVkIHBhdHRlcm4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZGVSb3RhdGVQYXR0ZXJuKHVuc2lnbmVkIGNoYXIgKnBhdHRlcm5fZHN0YWRkciwKKwkJICAgICB1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3JjX2FkZHIsCisJCSAgICAgdW5zaWduZWQgbG9uZyBwYXR0ZXJuX0JQUCwKKwkJICAgICB1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3RyaWRlLCBpbnQgcGF0dGVyblgsIGludCBwYXR0ZXJuWSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHBhdHRlcm5bUEFUVEVSTl9XSURUSCAqIFBBVFRFUk5fSEVJR0hUXTsKKwl1bnNpZ25lZCBpbnQgeCwgeTsKKwl1bnNpZ25lZCBjaGFyICpwalBhdEJ5dGU7CisKKwlpZiAocGF0dGVybl9kc3RhZGRyICE9IE5VTEwpIHsKKwkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJCWlmIChwYXR0ZXJuWCB8fCBwYXR0ZXJuWSkgeworCQkJLyogUm90YXRlIHBhdHRlcm4gKi8KKwkJCXBqUGF0Qnl0ZSA9ICh1bnNpZ25lZCBjaGFyICopcGF0dGVybjsKKworCQkJc3dpdGNoIChwYXR0ZXJuX0JQUCkgeworCQkJY2FzZSA4OgorCQkJCXsKKwkJCQkJZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworCQkJCQkJdW5zaWduZWQgY2hhciAqcGpCdWZmZXIgPQorCQkJCQkJICAgIHBhdHRlcm5fZHN0YWRkciArCisJCQkJCQkgICAgKChwYXR0ZXJuWSArIHkpICYgNykgKiA4OworCQkJCQkJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworCQkJCQkJCXBqQnVmZmVyWyhwYXR0ZXJuWCArCisJCQkJCQkJCSAgeCkgJiA3XSA9CisJCQkJCQkJICAgIHBqUGF0Qnl0ZVt4XTsKKwkJCQkJCX0KKwkJCQkJCXBqUGF0Qnl0ZSArPSBwYXR0ZXJuX3N0cmlkZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgMTY6CisJCQkJeworCQkJCQlmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7CisJCQkJCQl1bnNpZ25lZCBzaG9ydCAqcGpCdWZmZXIgPQorCQkJCQkJICAgICh1bnNpZ25lZCBzaG9ydCAqKQorCQkJCQkJICAgIHBhdHRlcm5fZHN0YWRkciArCisJCQkJCQkgICAgKChwYXR0ZXJuWSArIHkpICYgNykgKiA4OworCQkJCQkJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworCQkJCQkJCXBqQnVmZmVyWyhwYXR0ZXJuWCArCisJCQkJCQkJCSAgeCkgJiA3XSA9CisJCQkJCQkJICAgICgodW5zaWduZWQgc2hvcnQgKikKKwkJCQkJCQkgICAgIHBqUGF0Qnl0ZSlbeF07CisJCQkJCQl9CisJCQkJCQlwalBhdEJ5dGUgKz0gcGF0dGVybl9zdHJpZGU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIDMyOgorCQkJCXsKKwkJCQkJZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworCQkJCQkJdW5zaWduZWQgbG9uZyAqcGpCdWZmZXIgPQorCQkJCQkJICAgICh1bnNpZ25lZCBsb25nICopCisJCQkJCQkgICAgcGF0dGVybl9kc3RhZGRyICsKKwkJCQkJCSAgICAoKHBhdHRlcm5ZICsgeSkgJiA3KSAqIDg7CisJCQkJCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisJCQkJCQkJcGpCdWZmZXJbKHBhdHRlcm5YICsKKwkJCQkJCQkJICB4KSAmIDddID0KKwkJCQkJCQkgICAgKCh1bnNpZ25lZCBsb25nICopCisJCQkJCQkJICAgICBwalBhdEJ5dGUpW3hdOworCQkJCQkJfQorCQkJCQkJcGpQYXRCeXRlICs9IHBhdHRlcm5fc3RyaWRlOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qRG9uJ3Qgcm90YXRlLGp1c3QgY29weSBwYXR0ZXJuIGludG8gcGF0dGVybl9kc3RhZGRyKi8KKwkJCWZvciAoaSA9IDA7IGkgPCAocGF0dGVybl9CUFAgKiAyKTsgaSsrKSB7CisJCQkJKCh1bnNpZ25lZCBsb25nICopcGF0dGVybl9kc3RhZGRyKVtpXSA9CisJCQkJICAgIHBhdHRlcm5baV07CisJCQl9CisJCX0KKworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBkZUNvcHkKKyAqCisgKiBQdXJwb3NlCisgKiAgICBDb3B5IGEgcmVjdGFuZ3VsYXIgYXJlYSBvZiB0aGUgc291cmNlIHN1cmZhY2UgdG8gYSBkZXN0aW5hdGlvbiBzdXJmYWNlCisgKgorICogUmVtYXJrcworICogICAgU291cmNlIGJpdG1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgY29sb3IgZGVwdGggKEJQUCkgYXMgdGhlIGRlc3RpbmF0aW9uCisgKiAgICBiaXRtYXAuCisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZGVDb3B5KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9CUFAsCisJICAgIHVuc2lnbmVkIGxvbmcgZHN0X1gsCisJICAgIHVuc2lnbmVkIGxvbmcgZHN0X1ksCisJICAgIHVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCisJICAgIHVuc2lnbmVkIGxvbmcgc3JjX2Jhc2UsCisJICAgIHVuc2lnbmVkIGxvbmcgc3JjX3BpdGNoLAorCSAgICB1bnNpZ25lZCBsb25nIHNyY19YLAorCSAgICB1bnNpZ25lZCBsb25nIHNyY19ZLCBwVHJhbnNwYXJlbnQgcFRyYW5zcCwgdW5zaWduZWQgY2hhciBuUk9QMikKK3sKKwl1bnNpZ25lZCBsb25nIG5EaXJlY3Rpb24gPSAwOworCXVuc2lnbmVkIGxvbmcgblRyYW5zcGFyZW50ID0gMDsKKwkvKiBEaXJlY3Rpb24gb2YgUk9QMiBvcGVyYXRpb246CisJICogMSA9IExlZnQgdG8gUmlnaHQsCisJICogKC0xKSA9IFJpZ2h0IHRvIExlZnQKKwkgKi8KKwl1bnNpZ25lZCBsb25nIG9wU2lnbiA9IDE7CisJLyogeFdpZHRoIGlzIGluIHBpeGVscyAqLworCXVuc2lnbmVkIGxvbmcgeFdpZHRoID0gMTkyIC8gKGRzdF9CUFAgLyA4KTsKKwl1bnNpZ25lZCBsb25nIGRlX2N0cmwgPSAwOworCisJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCisJCQkJICAgIGRzdF9iYXNlKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1NPVVJDRV9CQVNFLAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1NPVVJDRV9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBzcmNfYmFzZSkpOworCisJaWYgKGRzdF9waXRjaCAmJiBzcmNfcGl0Y2gpIHsKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCSAgICAgREVfUElUQ0gsCisJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCSAgICAgc3JjX3BpdGNoKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCSAgICAgc3JjX3BpdGNoKSk7CisJfQorCisJLyogU2V0IHRyYW5zcGFyZW50IGJpdHMgaWYgbmVjZXNzYXJ5ICovCisJaWYgKHBUcmFuc3AgIT0gTlVMTCkgeworCQluVHJhbnNwYXJlbnQgPQorCQkgICAgcFRyYW5zcC0+bWF0Y2ggfCBwVHJhbnNwLT5zZWxlY3QgfCBwVHJhbnNwLT5jb250cm9sOworCisJCS8qIFNldCBjb2xvciBjb21wYXJlIHJlZ2lzdGVyICovCisJCVNNVENfd3JpdGUyRHJlZyhERV9DT0xPUl9DT01QQVJFLAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTE9SX0NPTVBBUkUsIENPTE9SLAorCQkJCQkgICAgcFRyYW5zcC0+Y29sb3IpKTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgZGlyZWN0aW9uIG9mIG9wZXJhdGlvbiAqLworCWlmIChzcmNfWSA8IGRzdF9ZKSB7CisJCS8qICstLS0tLS0tLS0tKworCQkgICB8UyAgICAgICAgIHwKKwkJICAgfCAgICAgICAgICArLS0tLS0tLS0tLSsKKwkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKKwkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKKwkJICAgKy0tLXwtLS0tLS0rICAgICAgfAorCQkgICB8ICAgICAgICAgICAgICAgRCB8CisJCSAgICstLS0tLS0tLS0tKyAqLworCisJCW5EaXJlY3Rpb24gPSBCT1RUT01fVE9fVE9QOworCX0gZWxzZSBpZiAoc3JjX1kgPiBkc3RfWSkgeworCQkvKiArLS0tLS0tLS0tLSsKKwkJICAgfEQgICAgICAgICB8CisJCSAgIHwgICAgICAgICAgKy0tLS0tLS0tLS0rCisJCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8CisJCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8CisJCSAgICstLS18LS0tLS0tKyAgICAgIHwKKwkJICAgfCAgICAgICAgICAgICAgIFMgfAorCQkgICArLS0tLS0tLS0tLSsgKi8KKworCQluRGlyZWN0aW9uID0gVE9QX1RPX0JPVFRPTTsKKwl9IGVsc2UgeworCQkvKiBzcmNfWSA9PSBkc3RfWSAqLworCisJCWlmIChzcmNfWCA8PSBkc3RfWCkgeworCQkJLyogKy0tLS0tLSstLS0rLS0tLS0tKworCQkJICAgfFMgICAgIHwgICB8ICAgICBEfAorCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAorCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAorCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAorCQkJICAgKy0tLS0tLSstLS0rLS0tLS0tKyAqLworCisJCQluRGlyZWN0aW9uID0gUklHSFRfVE9fTEVGVDsKKwkJfSBlbHNlIHsKKwkJCS8qIHNyY19YID4gZHN0X1ggKi8KKworCQkJLyogKy0tLS0tLSstLS0rLS0tLS0tKworCQkJICAgfEQgICAgIHwgICB8ICAgICBTfAorCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAorCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAorCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAorCQkJICAgKy0tLS0tLSstLS0rLS0tLS0tKyAqLworCisJCQluRGlyZWN0aW9uID0gTEVGVF9UT19SSUdIVDsKKwkJfQorCX0KKworCWlmICgobkRpcmVjdGlvbiA9PSBCT1RUT01fVE9fVE9QKSB8fCAobkRpcmVjdGlvbiA9PSBSSUdIVF9UT19MRUZUKSkgeworCQlzcmNfWCArPSBkc3Rfd2lkdGggLSAxOworCQlzcmNfWSArPSBkc3RfaGVpZ2h0IC0gMTsKKwkJZHN0X1ggKz0gZHN0X3dpZHRoIC0gMTsKKwkJZHN0X1kgKz0gZHN0X2hlaWdodCAtIDE7CisJCW9wU2lnbiA9ICgtMSk7CisJfQorCisJaWYgKGRzdF9CUFAgPj0gMjQpIHsKKwkJc3JjX1ggKj0gMzsKKwkJc3JjX1kgKj0gMzsKKwkJZHN0X1ggKj0gMzsKKwkJZHN0X1kgKj0gMzsKKwkJZHN0X3dpZHRoICo9IDM7CisJCWlmICgobkRpcmVjdGlvbiA9PSBCT1RUT01fVE9fVE9QKQorCQkgICAgfHwgKG5EaXJlY3Rpb24gPT0gUklHSFRfVE9fTEVGVCkpIHsKKwkJCXNyY19YICs9IDI7CisJCQlkc3RfWCArPSAyOworCQl9CisJfQorCisJLyogV29ya2Fyb3VuZCBmb3IgMTkyIGJ5dGUgaHcgYnVnICovCisJaWYgKChuUk9QMiAhPSAweDBDKSAmJiAoKGRzdF93aWR0aCAqIChkc3RfQlBQIC8gOCkpID49IDE5MikpIHsKKwkJLyoKKwkJICogUGVyZm9ybSB0aGUgUk9QMiBvcGVyYXRpb24gaW4gY2h1bmtzIG9mICh4V2lkdGggKgorCQkgKiBkc3RfaGVpZ2h0KQorCQkgKi8KKwkJd2hpbGUgKDEpIHsKKwkJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCQkJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKKwkJCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBzcmNfWCkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgc3JjX1kpKTsKKworCQkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwKKwkJCQkgIERJU0FCTEUpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgREVfREVTVElOQVRJT04sCisJCQkJCQkJIFgsCisJCQkJCQkJIGRzdF9YKQorCQkJfCBGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwKKwkJCQkJCSAgICAgIGRzdF9ZKSk7CisKKwkJCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLAorCQkJCSAgICB4V2lkdGgpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgIERFX0RJTUVOU0lPTiwKKwkJCQkJCQkgIFlfRVQsCisJCQkJCQkJICBkc3RfaGVpZ2h0KSk7CisKKwkJCWRlX2N0cmwgPQorCQkJICAgIEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwKKwkJCQluUk9QMikgfCBuVHJhbnNwYXJlbnQgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgIERFX0NPTlRST0wsCisJCQkJCQkJICBST1BfU0VMRUNULAorCQkJCQkJCSAgUk9QMikKKwkJCSAgICB8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELAorCQkJCUJJVEJMVCkgfCAoKG5EaXJlY3Rpb24gPT0KKwkJCQkJICAgIDEpID8gRklFTERfU0VUKDAsCisJCQkJCQkgICBERV9DT05UUk9MLAorCQkJCQkJICAgRElSRUNUSU9OLAorCQkJCQkJICAgUklHSFRfVE9fTEVGVCkKKwkJCQkJICAgOiBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwKKwkJCQkJICAgICAgIERJUkVDVElPTiwKKwkJCQkJICAgICAgIExFRlRfVE9fUklHSFQpKSB8CisJCQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpOworCisJCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwgZGVfY3RybCk7CisKKwkJCXNyY19YICs9IChvcFNpZ24gKiB4V2lkdGgpOworCQkJZHN0X1ggKz0gKG9wU2lnbiAqIHhXaWR0aCk7CisJCQlkc3Rfd2lkdGggLT0geFdpZHRoOworCisJCQlpZiAoZHN0X3dpZHRoIDw9IDApIHsKKwkJCQkvKiBST1AyIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAqLworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoeFdpZHRoID4gZHN0X3dpZHRoKQorCQkJCXhXaWR0aCA9IGRzdF93aWR0aDsKKwkJfQorCX0gZWxzZSB7CisJCWRlV2FpdEZvck5vdEJ1c3koKTsKKwkJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKKwkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgc3JjX1gpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgc3JjX1kpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBkc3RfWCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIGRzdF9ZKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgZHN0X3dpZHRoKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGRzdF9oZWlnaHQpKTsKKworCQlkZV9jdHJsID0gRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCBuUk9QMikgfAorCQkgICAgblRyYW5zcGFyZW50IHwKKwkJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8CisJCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgQklUQkxUKSB8CisJCSAgICAoKG5EaXJlY3Rpb24gPT0gMSkgPyBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLAorCQkJCQkJICAgUklHSFRfVE9fTEVGVCkKKwkJICAgICA6IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sCisJCQkJIExFRlRfVE9fUklHSFQpKSB8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLAorCQkJCQkJCSAgICAgU1RBVFVTLCBTVEFSVCk7CisJCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLCBkZV9jdHJsKTsKKwl9CisKKwlzbXRjX2RlX2J1c3kgPSAxOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBwaXhlbCBmb3JtYXQgdGhhdCB3aWxsIGFwcGx5IHRvIHRoZSAyRCBFbmdpbmUuCisgKi8KK3ZvaWQgZGVTZXRQaXhlbEZvcm1hdCh1bnNpZ25lZCBsb25nIGJwcCkKK3sKKwl1bnNpZ25lZCBsb25nIGRlX2Zvcm1hdDsKKworCWRlX2Zvcm1hdCA9IFNNVENfcmVhZDJEcmVnKERFX1NUUkVUQ0hfRk9STUFUKTsKKworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSA4OgorCQlkZV9mb3JtYXQgPQorCQkgICAgRklFTERfU0VUKGRlX2Zvcm1hdCwgREVfU1RSRVRDSF9GT1JNQVQsIFBJWEVMX0ZPUk1BVCwgOCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSAxNjoKKwkJZGVfZm9ybWF0ID0KKwkJICAgIEZJRUxEX1NFVChkZV9mb3JtYXQsIERFX1NUUkVUQ0hfRk9STUFULCBQSVhFTF9GT1JNQVQsIDE2KTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJZGVfZm9ybWF0ID0KKwkJICAgIEZJRUxEX1NFVChkZV9mb3JtYXQsIERFX1NUUkVUQ0hfRk9STUFULCBQSVhFTF9GT1JNQVQsIDMyKTsKKwkJYnJlYWs7CisJfQorCisJU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULCBkZV9mb3JtYXQpOworfQorCisvKgorICogU3lzdGVtIG1lbW9yeSB0byBWaWRlbyBtZW1vcnkgbW9ub2Nocm9tZSBleHBhbnNpb24uCisgKgorICogU291cmNlIGlzIG1vbm9jaHJvbWUgaW1hZ2UgaW4gc3lzdGVtIG1lbW9yeS4gIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyB0aGUKKyAqIG1vbm9jaHJvbWUgZGF0YSB0byBjb2xvciBpbWFnZSBpbiB2aWRlbyBtZW1vcnkuCisgKi8KKworbG9uZyBkZVN5c3RlbU1lbTJWaWRlb01lbU1vbm9CbHQoY29uc3QgY2hhciAqcFNyY2J1ZiwKKwkJCQkgbG9uZyBzcmNEZWx0YSwKKwkJCQkgdW5zaWduZWQgbG9uZyBzdGFydEJpdCwKKwkJCQkgdW5zaWduZWQgbG9uZyBkQmFzZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBkUGl0Y2gsCisJCQkJIHVuc2lnbmVkIGxvbmcgYnBwLAorCQkJCSB1bnNpZ25lZCBsb25nIGR4LCB1bnNpZ25lZCBsb25nIGR5LAorCQkJCSB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwKKwkJCQkgdW5zaWduZWQgbG9uZyBmQ29sb3IsCisJCQkJIHVuc2lnbmVkIGxvbmcgYkNvbG9yLAorCQkJCSB1bnNpZ25lZCBsb25nIHJvcDIpIHsKKwl1bnNpZ25lZCBsb25nIGJ5dGVQZXJQaXhlbDsKKwl1bnNpZ25lZCBsb25nIHVsQnl0ZXNQZXJTY2FuOworCXVuc2lnbmVkIGxvbmcgdWw0Qnl0ZXNQZXJTY2FuOworCXVuc2lnbmVkIGxvbmcgdWxCeXRlc1JlbWFpbjsKKwl1bnNpZ25lZCBsb25nIGRlX2N0cmwgPSAwOworCXVuc2lnbmVkIGNoYXIgYWpSZW1haW5bNF07CisJbG9uZyBpLCBqOworCisJYnl0ZVBlclBpeGVsID0gYnBwIC8gODsKKworCS8qIEp1c3QgbWFrZSBzdXJlIHRoZSBzdGFydCBiaXQgaXMgd2l0aGluIGxlZ2FsIHJhbmdlICovCisJc3RhcnRCaXQgJj0gNzsKKworCXVsQnl0ZXNQZXJTY2FuID0gKHdpZHRoICsgc3RhcnRCaXQgKyA3KSAvIDg7CisJdWw0Qnl0ZXNQZXJTY2FuID0gdWxCeXRlc1BlclNjYW4gJiB+MzsKKwl1bEJ5dGVzUmVtYWluID0gdWxCeXRlc1BlclNjYW4gJiAzOworCisJaWYgKHNtdGNfZGVfYnVzeSkKKwkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJLyoKKwkgKiAyRCBTb3VyY2UgQmFzZS4gIFVzZSAwIGZvciBIT1NUIEJsdC4KKwkgKi8KKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfU09VUkNFX0JBU0UsIDApOworCisJLyoKKwkgKiAyRCBEZXN0aW5hdGlvbiBCYXNlLgorCSAqCisJICogSXQgaXMgYW4gYWRkcmVzcyBvZmZzZXQgKDEyOCBiaXQgYWxpZ25lZCkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisJICogZnJhbWUgYnVmZmVyLgorCSAqLworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBkQmFzZSk7CisKKwlpZiAoZFBpdGNoKSB7CisKKwkJLyoKKwkJICogUHJvZ3JhbSBwaXRjaCAoZGlzdGFuY2UgYmV0d2VlbiB0aGUgMXN0IHBvaW50cyBvZiB0d28KKwkJICogYWRqYWNlbnQgbGluZXMpLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgaW5wdXQgcGl0Y2ggaXMgQllURSB2YWx1ZSwgYnV0IHRoZSAyRCBQaXRjaAorCQkgKiByZWdpc3RlciB1c2VzIHBpeGVsIHZhbHVlcy4gTmVlZCBCeXRlIHRvIHBpeGVsIGNvbnZlcnRpb24uCisJCSAqLworCisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCSAgICBkUGl0Y2ggLworCQkJICAgIGJ5dGVQZXJQaXhlbCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCURFX1BJVENILAorCQkJCQkJCVNPVVJDRSwKKwkJCQkJCQlkUGl0Y2ggLworCQkJCQkJCWJ5dGVQZXJQaXhlbCkpOworCisJCS8qIFNjcmVlbiBXaW5kb3cgd2lkdGggaW4gUGl4ZWxzLgorCQkgKgorCQkgKiAyRCBlbmdpbmUgdXNlcyB0aGlzIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUgbGluZWFyIGFkZHJlc3MgaW4KKwkJICogZnJhbWUgYnVmZmVyIGZvciBhIGdpdmVuIHBvaW50LgorCQkgKi8KKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCSAgICAoZFBpdGNoIC8KKwkJCSAgICAgYnl0ZVBlclBpeGVsKSkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJCSAgU09VUkNFLAorCQkJCQkJCSAgKGRQaXRjaAorCQkJCQkJCSAgIC8KKwkJCQkJCQkgICBieXRlUGVyUGl4ZWwpKSk7CisJfQorCS8qIE5vdGU6IEZvciAyRCBTb3VyY2UgaW4gSG9zdCBXcml0ZSwgb25seSBYX0sxIGZpZWxkIGlzIG5lZWRlZCwgYW5kCisJICogWV9LMiBmaWVsZCBpcyBub3QgdXNlZC4gRm9yIG1vbm8gYml0bWFwLCB1c2Ugc3RhcnRCaXQgZm9yIFhfSzEuCisJICovCisKKwlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAorCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBzdGFydEJpdCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCAwKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBkeCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIGR5KSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCB3aWR0aCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBoZWlnaHQpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELCBmQ29sb3IpOworCVNNVENfd3JpdGUyRHJlZyhERV9CQUNLR1JPVU5ELCBiQ29sb3IpOworCisJaWYgKGJwcCkKKwkJZGVTZXRQaXhlbEZvcm1hdChicHApOworCS8qIFNldCB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZXN0aW5hdGlvbiAqLworCisJZGVfY3RybCA9IEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgcm9wMikgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgSE9TVF9XUklURSkgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgSE9TVCwgTU9OTykgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwgZGVfY3RybCB8IGRlR2V0VHJhbnNwYXJlbmN5KCkpOworCisJLyogV3JpdGUgTU9OTyBkYXRhIChsaW5lIGJ5IGxpbmUpIHRvIDJEIEVuZ2luZSBkYXRhIHBvcnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKwkJLyogRm9yIGVhY2ggbGluZSwgc2VuZCB0aGUgZGF0YSBpbiBjaHVua3Mgb2YgNCBieXRlcyAqLworCQlmb3IgKGogPSAwOyBqIDwgKHVsNEJ5dGVzUGVyU2NhbiAvIDQpOyBqKyspCisJCQlTTVRDX3dyaXRlMkRkYXRhcG9ydCgwLAorCQkJCQkgICAgICoodW5zaWduZWQgbG9uZyAqKShwU3JjYnVmICsKKwkJCQkJCQkJKGogKiA0KSkpOworCisJCWlmICh1bEJ5dGVzUmVtYWluKSB7CisJCQltZW1jcHkoYWpSZW1haW4sIHBTcmNidWYgKyB1bDRCeXRlc1BlclNjYW4sCisJCQkgICAgICAgdWxCeXRlc1JlbWFpbik7CisJCQlTTVRDX3dyaXRlMkRkYXRhcG9ydCgwLCAqKHVuc2lnbmVkIGxvbmcgKilhalJlbWFpbik7CisJCX0KKworCQlwU3JjYnVmICs9IHNyY0RlbHRhOworCX0KKwlzbXRjX2RlX2J1c3kgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHRyYW5zcGFyZW5jeSBzdGF0dXMgZnJvbSBERV9DT05UUk9MIHJlZ2lzdGVyLgorICogSXQgcmV0dXJucyBhIGRvdWJsZSB3b3JkIHdpdGggdGhlIHRyYW5zcGFyZW50IGZpZWxkcyBwcm9wZXJseSBzZXQsCisgKiB3aGlsZSBvdGhlciBmaWVsZHMgYXJlIDAuCisgKi8KK3Vuc2lnbmVkIGxvbmcgZGVHZXRUcmFuc3BhcmVuY3kodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGRlX2N0cmw7CisKKwlkZV9jdHJsID0gU01UQ19yZWFkMkRyZWcoREVfQ09OVFJPTCk7CisKKwlkZV9jdHJsICY9CisJICAgIEZJRUxEX01BU0soREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0gpIHwKKwkgICAgRklFTERfTUFTSyhERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1QpIHwKKwkgICAgRklFTERfTUFTSyhERV9DT05UUk9MX1RSQU5TUEFSRU5DWSk7CisKKwlyZXR1cm4gZGVfY3RybDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQwYzMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCkBAIC0wLDAgKzEsNTMwIEBACisvKgorICogU2lsaWNvbiBNb3Rpb24gU003MTIgMkQgZHJhd2luZyBlbmdpbmUgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaWxpY29uIE1vdGlvbiBUZWNobm9sb2d5IENvcnAuCisgKiBBdXRob3I6IEdlIFdhbmcsIGdld2FuZ0BzaWxpY29ubW90aW9uLmNvbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTlVMTAorI2RlZmluZSBOVUxMCSAwCisjZW5kaWYKKworLyogSW50ZXJuYWwgbWFjcm9zICovCisKKyNkZWZpbmUgX0ZfU1RBUlQoZikJCSgwID8gZikKKyNkZWZpbmUgX0ZfRU5EKGYpCQkoMSA/IGYpCisjZGVmaW5lIF9GX1NJWkUoZikJCSgxICsgX0ZfRU5EKGYpIC0gX0ZfU1RBUlQoZikpCisjZGVmaW5lIF9GX01BU0soZikJCSgoKDFVTEwgPDwgX0ZfU0laRShmKSkgLSAxKSA8PCBfRl9TVEFSVChmKSkKKyNkZWZpbmUgX0ZfTk9STUFMSVpFKHYsIGYpCSgoKHYpICYgX0ZfTUFTSyhmKSkgPj4gX0ZfU1RBUlQoZikpCisjZGVmaW5lIF9GX0RFTk9STUFMSVpFKHYsIGYpCSgoKHYpIDw8IF9GX1NUQVJUKGYpKSAmIF9GX01BU0soZikpCisKKy8qIEdsb2JhbCBtYWNyb3MgKi8KKworI2RlZmluZSBGSUVMRF9HRVQoeCwgcmVnLCBmaWVsZCkgXAorKCBcCisgICAgX0ZfTk9STUFMSVpFKCh4KSwgcmVnICMjIF8gIyMgZmllbGQpIFwKKykKKworI2RlZmluZSBGSUVMRF9TRVQoeCwgcmVnLCBmaWVsZCwgdmFsdWUpIFwKKyggXAorICAgICh4ICYgfl9GX01BU0socmVnICMjIF8gIyMgZmllbGQpKSBcCisgICAgfCBfRl9ERU5PUk1BTElaRShyZWcgIyMgXyAjIyBmaWVsZCAjIyBfICMjIHZhbHVlLCByZWcgIyMgXyAjIyBmaWVsZCkgXAorKQorCisjZGVmaW5lIEZJRUxEX1ZBTFVFKHgsIHJlZywgZmllbGQsIHZhbHVlKSBcCisoIFwKKyAgICAoeCAmIH5fRl9NQVNLKHJlZyAjIyBfICMjIGZpZWxkKSkgXAorICAgIHwgX0ZfREVOT1JNQUxJWkUodmFsdWUsIHJlZyAjIyBfICMjIGZpZWxkKSBcCispCisKKyNkZWZpbmUgRklFTERfQ0xFQVIocmVnLCBmaWVsZCkgXAorKCBcCisgICAgfl9GX01BU0socmVnICMjIF8gIyMgZmllbGQpIFwKKykKKworLyogRmllbGQgTWFjcm9zICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGSUVMRF9TVEFSVChmaWVsZCkJKDAgPyBmaWVsZCkKKyNkZWZpbmUgRklFTERfRU5EKGZpZWxkKQkoMSA/IGZpZWxkKQorI2RlZmluZSBGSUVMRF9TSVpFKGZpZWxkKSBcCisJKDEgKyBGSUVMRF9FTkQoZmllbGQpIC0gRklFTERfU1RBUlQoZmllbGQpKQorCisjZGVmaW5lIEZJRUxEX01BU0soZmllbGQpIFwKKwkoKCgxIDw8IChGSUVMRF9TSVpFKGZpZWxkKS0xKSkgXAorCXwgKCgxIDw8IChGSUVMRF9TSVpFKGZpZWxkKS0xKSkgLSAxKSkgXAorCTw8IEZJRUxEX1NUQVJUKGZpZWxkKSkKKworI2RlZmluZSBGSUVMRF9OT1JNQUxJWkUocmVnLCBmaWVsZCkgXAorCSgoKHJlZykgJiBGSUVMRF9NQVNLKGZpZWxkKSkgPj4gRklFTERfU1RBUlQoZmllbGQpKQorCisjZGVmaW5lIEZJRUxEX0RFTk9STUFMSVpFKGZpZWxkLCB2YWx1ZSkgXAorCSgoKHZhbHVlKSA8PCBGSUVMRF9TVEFSVChmaWVsZCkpICYgRklFTERfTUFTSyhmaWVsZCkpCisKKyNkZWZpbmUgRklFTERfSU5JVChyZWcsIGZpZWxkLCB2YWx1ZSkgXAorCUZJRUxEX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkLCBcCisJCXJlZyAjIyBfICMjIGZpZWxkICMjIF8gIyMgdmFsdWUpCisKKyNkZWZpbmUgRklFTERfSU5JVF9WQUwocmVnLCBmaWVsZCwgdmFsdWUpIFwKKwkoRklFTERfREVOT1JNQUxJWkUocmVnICMjIF8gIyMgZmllbGQsIHZhbHVlKSkKKworI2RlZmluZSBGSUVMRF9WQUxfU0VUKHgsIHIsIGYsIHYpICh7IFwKKwl4ID0gKHggJiB+RklFTERfTUFTSyhyICMjIF8gIyMgZikpIFwKKwl8IEZJRUxEX0RFTk9STUFMSVpFKHIgIyMgXyAjIyBmLCByICMjIF8gIyMgZiAjIyBfICMjIHYpIFwKK30pCisKKyNkZWZpbmUgUkdCKHIsIGcsIGIpCSgodW5zaWduZWQgbG9uZykoKChyKSA8PCAxNikgfCAoKGcpIDw8IDgpIHwgKGIpKSkKKworLyogVHJhbnNwYXJlbnQgaW5mbyBkZWZpbml0aW9uICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBtYXRjaDsJLyogTWF0Y2hpbmcgcGl4ZWwgaXMgT1BBUVVFL1RSQU5TUEFSRU5UICovCisJdW5zaWduZWQgbG9uZyBzZWxlY3Q7CS8qIFRyYW5zcGFyZW5jeSBjb250cm9sbGVkIGJ5IFNSQy9EU1QgKi8KKwl1bnNpZ25lZCBsb25nIGNvbnRyb2w7CS8qIEVOQUJMRS9ESVNBQkxFIHRyYW5zcGFyZW5jeSAqLworCXVuc2lnbmVkIGxvbmcgY29sb3I7CS8qIFRyYW5zcGFyZW50IGNvbG9yICovCit9IFRyYW5zcGFyZW50LCAqcFRyYW5zcGFyZW50OworCisjZGVmaW5lIFBJWEVMX0RFUFRIXzFfQlAJMAkvKiAxIGJpdCBwZXIgcGl4ZWwgKi8KKyNkZWZpbmUgUElYRUxfREVQVEhfOF9CUFAJMQkvKiA4IGJpdHMgcGVyIHBpeGVsICovCisjZGVmaW5lIFBJWEVMX0RFUFRIXzE2X0JQUAkyCS8qIDE2IGJpdHMgcGVyIHBpeGVsICovCisjZGVmaW5lIFBJWEVMX0RFUFRIXzMyX0JQUAkzCS8qIDMyIGJpdHMgcGVyIHBpeGVsICovCisjZGVmaW5lIFBJWEVMX0RFUFRIX1lVVjQyMgk4CS8qIDE2IGJpdHMgcGVyIHBpeGVsIFlVVjQyMiAqLworI2RlZmluZSBQSVhFTF9ERVBUSF9ZVVY0MjAJOQkvKiAxNiBiaXRzIHBlciBwaXhlbCBZVVY0MjAgKi8KKworI2RlZmluZSBQQVRURVJOX1dJRFRICQk4CisjZGVmaW5lIFBBVFRFUk5fSEVJR0hUCQk4CisKKyNkZWZpbmUJVE9QX1RPX0JPVFRPTQkJMAorI2RlZmluZQlCT1RUT01fVE9fVE9QCQkxCisjZGVmaW5lIFJJR0hUX1RPX0xFRlQJCUJPVFRPTV9UT19UT1AKKyNkZWZpbmUgTEVGVF9UT19SSUdIVAkJVE9QX1RPX0JPVFRPTQorCisvKiBDb25zdGFudHMgdXNlZCBpbiBUcmFuc3BhcmVudCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgTUFUQ0hfT1BBUVVFCQkweDAwMDAwMDAwCisjZGVmaW5lIE1BVENIX1RSQU5TUEFSRU5UCTB4MDAwMDA0MDAKKyNkZWZpbmUgU09VUkNFCQkJMHgwMDAwMDAwMAorI2RlZmluZSBERVNUSU5BVElPTgkJMHgwMDAwMDIwMAorCisvKiAyRCByZWdpc3RlcnMuICovCisKKyNkZWZpbmUJREVfU09VUkNFCQkJMHgwMDAwMDAKKyNkZWZpbmUJREVfU09VUkNFX1dSQVAJCQkzMSA6IDMxCisjZGVmaW5lCURFX1NPVVJDRV9XUkFQX0RJU0FCTEUJCTAKKyNkZWZpbmUJREVfU09VUkNFX1dSQVBfRU5BQkxFCQkxCisjZGVmaW5lCURFX1NPVVJDRV9YX0sxCQkJMjkgOiAxNgorI2RlZmluZQlERV9TT1VSQ0VfWV9LMgkJCTE1IDogMAorCisjZGVmaW5lCURFX0RFU1RJTkFUSU9OCQkJMHgwMDAwMDQKKyNkZWZpbmUJREVfREVTVElOQVRJT05fV1JBUAkJMzEgOiAzMQorI2RlZmluZQlERV9ERVNUSU5BVElPTl9XUkFQX0RJU0FCTEUJMAorI2RlZmluZQlERV9ERVNUSU5BVElPTl9XUkFQX0VOQUJMRQkxCisjZGVmaW5lCURFX0RFU1RJTkFUSU9OX1gJCTI4IDogMTYKKyNkZWZpbmUJREVfREVTVElOQVRJT05fWQkJMTUgOiAwCisKKyNkZWZpbmUJREVfRElNRU5TSU9OCQkJMHgwMDAwMDgKKyNkZWZpbmUJREVfRElNRU5TSU9OX1gJCQkyOCA6IDE2CisjZGVmaW5lCURFX0RJTUVOU0lPTl9ZX0VUCQkxNSA6IDAKKworI2RlZmluZQlERV9DT05UUk9MCQkJMHgwMDAwMEMKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEFUVVMJCTMxIDogMzEKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEFUVVNfU1RPUAkJMAorI2RlZmluZQlERV9DT05UUk9MX1NUQVRVU19TVEFSVAkJMQorI2RlZmluZQlERV9DT05UUk9MX1BBVFRFUk4JCTMwIDogMzAKKyNkZWZpbmUJREVfQ09OVFJPTF9QQVRURVJOX01PTk8JCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9QQVRURVJOX0NPTE9SCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9VUERBVEVfREVTVElOQVRJT05fWAkJMjkgOiAyOQorI2RlZmluZQlERV9DT05UUk9MX1VQREFURV9ERVNUSU5BVElPTl9YX0RJU0FCTEUJMAorI2RlZmluZQlERV9DT05UUk9MX1VQREFURV9ERVNUSU5BVElPTl9YX0VOQUJMRQkxCisjZGVmaW5lCURFX0NPTlRST0xfUVVJQ0tfU1RBUlQJCQkyOCA6IDI4CisjZGVmaW5lCURFX0NPTlRST0xfUVVJQ0tfU1RBUlRfRElTQUJMRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1FVSUNLX1NUQVJUX0VOQUJMRQkJMQorI2RlZmluZQlERV9DT05UUk9MX0RJUkVDVElPTgkJCTI3IDogMjcKKyNkZWZpbmUJREVfQ09OVFJPTF9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVAkwCisjZGVmaW5lCURFX0NPTlRST0xfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQJMQorI2RlZmluZQlERV9DT05UUk9MX01BSk9SCQkJMjYgOiAyNgorI2RlZmluZQlERV9DT05UUk9MX01BSk9SX1gJCQkwCisjZGVmaW5lCURFX0NPTlRST0xfTUFKT1JfWQkJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1gJCQkyNSA6IDI1CisjZGVmaW5lCURFX0NPTlRST0xfU1RFUF9YX1BPU0lUSVZFCQkxCisjZGVmaW5lCURFX0NPTlRST0xfU1RFUF9YX05FR0FUSVZFCQkwCisjZGVmaW5lCURFX0NPTlRST0xfU1RFUF9ZCQkJMjQgOiAyNAorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWV9QT1NJVElWRQkJMQorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWV9ORUdBVElWRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1NUUkVUQ0gJCQkyMyA6IDIzCisjZGVmaW5lCURFX0NPTlRST0xfU1RSRVRDSF9ESVNBQkxFCQkwCisjZGVmaW5lCURFX0NPTlRST0xfU1RSRVRDSF9FTkFCTEUJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9IT1NUCQkJCTIyIDogMjIKKyNkZWZpbmUJREVfQ09OVFJPTF9IT1NUX0NPTE9SCQkJMAorI2RlZmluZQlERV9DT05UUk9MX0hPU1RfTU9OTwkJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9MQVNUX1BJWEVMCQkJMjEgOiAyMQorI2RlZmluZQlERV9DT05UUk9MX0xBU1RfUElYRUxfT0ZGCQkwCisjZGVmaW5lCURFX0NPTlRST0xfTEFTVF9QSVhFTF9PTgkJMQorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkQJCQkyMCA6IDE2CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9CSVRCTFQJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1JFQ1RBTkdMRV9GSUxMCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0RFX1RJTEUJCTIKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1RSQVBFWk9JRF9GSUxMCTMKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0FMUEhBX0JMRU5ECQk0CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9STEVfU1RSSVAJCTUKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1NIT1JUX1NUUk9LRQkJNgorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfTElORV9EUkFXCQk3CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9IT1NUX1dSSVRFCQk4CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9IT1NUX1JFQUQJCTkKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0hPU1RfV1JJVEVfQk9UVE9NX1VQCTEwCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9ST1RBVEUJCTExCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9GT05UCQkJMTIKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1RFWFRVUkVfTE9BRAkJMTUKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1BfU0VMRUNUCQkJMTUgOiAxNQorI2RlZmluZQlERV9DT05UUk9MX1JPUF9TRUxFQ1RfUk9QMwkJMAorI2RlZmluZQlERV9DT05UUk9MX1JPUF9TRUxFQ1RfUk9QMgkJMQorI2RlZmluZQlERV9DT05UUk9MX1JPUDJfU09VUkNFCQkJMTQgOiAxNAorI2RlZmluZQlERV9DT05UUk9MX1JPUDJfU09VUkNFX0JJVE1BUAkJMAorI2RlZmluZQlERV9DT05UUk9MX1JPUDJfU09VUkNFX1BBVFRFUk4JCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEEJCQkxMyA6IDEyCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBX05PVF9QQUNLRUQJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfOF9QQUNLRUQJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfMTZfUEFDS0VECQkyCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBXzMyX1BBQ0tFRAkJMworI2RlZmluZQlERV9DT05UUk9MX1JFUEVBVF9ST1RBVEUJCTExIDogMTEKKyNkZWZpbmUJREVfQ09OVFJPTF9SRVBFQVRfUk9UQVRFX0RJU0FCTEUJMAorI2RlZmluZQlERV9DT05UUk9MX1JFUEVBVF9ST1RBVEVfRU5BQkxFCQkxCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENICQkxMCA6IDEwCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENIX09QQVFVRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSF9UUkFOU1BBUkVOVAkxCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVAkJCTkgOiA5CisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVF9TT1VSQ0UJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUX0RFU1RJTkFUSU9OCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1kJCQkJOCA6IDgKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfRElTQUJMRQkJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfRU5BQkxFCQkJMQorI2RlZmluZQlERV9DT05UUk9MX1JPUAkJCQkJNyA6IDAKKworLyogUHNldWRvIGZpZWxkcy4gKi8KKworI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVIJCQkyNyA6IDI0CisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8yMjUJCQkwCisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8xMzUJCQkxCisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8zMTUJCQkyCisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl80NQkJCTMKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzI3MAkJCTQKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzkwCQkJNQorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMTgwCQkJOAorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMAkJCTEwCisjZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT04JCQkJMjUgOiAyNAorI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzAJCQkJMAorI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzI3MAkJCQkxCisjZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fOTAJCQkJMgorI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzE4MAkJCQkzCisKKyNkZWZpbmUJREVfUElUQ0gJCQkJCTB4MDAwMDEwCisjZGVmaW5lCURFX1BJVENIX0RFU1RJTkFUSU9OCQkJCTI4IDogMTYKKyNkZWZpbmUJREVfUElUQ0hfU09VUkNFCQkJCQkxMiA6IDAKKworI2RlZmluZQlERV9GT1JFR1JPVU5ECQkJCQkweDAwMDAxNAorI2RlZmluZQlERV9GT1JFR1JPVU5EX0NPTE9SCQkJCTMxIDogMAorCisjZGVmaW5lCURFX0JBQ0tHUk9VTkQJCQkJCTB4MDAwMDE4CisjZGVmaW5lCURFX0JBQ0tHUk9VTkRfQ09MT1IJCQkJMzEgOiAwCisKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVQJCQkJMHgwMDAwMUMKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YWQkJCTMwIDogMzAKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YWV9OT1JNQUwJCTAKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YWV9PVkVSV1JJVEUJCTEKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9ZCQkJMjkgOiAyNworI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1gJCQkyNSA6IDIzCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVAkJCTIxIDogMjAKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzgJCTAKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzE2CQkxCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF8yNAkJMworI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfMzIJCTIKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfQUREUkVTU0lORwkJCTE5IDogMTYKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfQUREUkVTU0lOR19YWQkJCTAKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfQUREUkVTU0lOR19MSU5FQVIJCTE1CisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1NPVVJDRV9IRUlHSFQJCQkxMSA6IDAKKworI2RlZmluZQlERV9DT0xPUl9DT01QQVJFCQkJCTB4MDAwMDIwCisjZGVmaW5lCURFX0NPTE9SX0NPTVBBUkVfQ09MT1IJCQkJMjMgOiAwCisKKyNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRV9NQVNLCQkJCTB4MDAwMDI0CisjZGVmaW5lCURFX0NPTE9SX0NPTVBBUkVfTUFTS19NQVNLUwkJCTIzIDogMAorCisjZGVmaW5lCURFX01BU0tTCQkJCQkweDAwMDAyOAorI2RlZmluZQlERV9NQVNLU19CWVRFX01BU0sJCQkJMzEgOiAxNgorI2RlZmluZQlERV9NQVNLU19CSVRfTUFTSwkJCQkxNSA6IDAKKworI2RlZmluZQlERV9DTElQX1RMCQkJCQkweDAwMDAyQworI2RlZmluZQlERV9DTElQX1RMX1RPUAkJCQkJMzEgOiAxNgorI2RlZmluZQlERV9DTElQX1RMX1NUQVRVUwkJCQkxMyA6IDEzCisjZGVmaW5lCURFX0NMSVBfVExfU1RBVFVTX0RJU0FCTEUJCQkwCisjZGVmaW5lCURFX0NMSVBfVExfU1RBVFVTX0VOQUJMRQkJCTEKKyNkZWZpbmUJREVfQ0xJUF9UTF9JTkhJQklUCQkJCTEyIDogMTIKKyNkZWZpbmUJREVfQ0xJUF9UTF9JTkhJQklUX09VVFNJREUJCQkwCisjZGVmaW5lCURFX0NMSVBfVExfSU5ISUJJVF9JTlNJREUJCQkxCisjZGVmaW5lCURFX0NMSVBfVExfTEVGVAkJCQkJMTEgOiAwCisKKyNkZWZpbmUJREVfQ0xJUF9CUgkJCQkJMHgwMDAwMzAKKyNkZWZpbmUJREVfQ0xJUF9CUl9CT1RUT00JCQkJMzEgOiAxNgorI2RlZmluZQlERV9DTElQX0JSX1JJR0hUCQkJCTEyIDogMAorCisjZGVmaW5lCURFX01PTk9fUEFUVEVSTl9MT1cJCQkJMHgwMDAwMzQKKyNkZWZpbmUJREVfTU9OT19QQVRURVJOX0xPV19QQVRURVJOCQkJMzEgOiAwCisKKyNkZWZpbmUJREVfTU9OT19QQVRURVJOX0hJR0gJCQkJMHgwMDAwMzgKKyNkZWZpbmUJREVfTU9OT19QQVRURVJOX0hJR0hfUEFUVEVSTgkJCTMxIDogMAorCisjZGVmaW5lCURFX1dJTkRPV19XSURUSAkJCQkJMHgwMDAwM0MKKyNkZWZpbmUJREVfV0lORE9XX1dJRFRIX0RFU1RJTkFUSU9OCQkJMjggOiAxNgorI2RlZmluZQlERV9XSU5ET1dfV0lEVEhfU09VUkNFCQkJCTEyIDogMAorCisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRQkJCQkweDAwMDA0MAorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfRVhUCQkJMjcgOiAyNworI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkxCisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9DUwkJCTI2IDogMjYKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0NTXzAJCQkwCisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9DU18xCQkJMQorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAorCisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFCQkJMHgwMDAwNDQKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfRVhUCQkJMjcgOiAyNworI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9FWFRfTE9DQUwJCTAKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0VYVEVSTkFMCQkxCisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0NTCQkJMjYgOiAyNgorI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9DU18wCQkJMAorI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9DU18xCQkJMQorI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9BRERSRVNTCQkyNSA6IDAKKworI2RlZmluZQlERV9BTFBIQQkJCQkJMHgwMDAwNDgKKyNkZWZpbmUJREVfQUxQSEFfVkFMVUUJCQkJCTcgOiAwCisKKyNkZWZpbmUJREVfV1JBUAkJCQkJCTB4MDAwMDRDCisjZGVmaW5lCURFX1dSQVBfWAkJCQkJMzEgOiAxNgorI2RlZmluZQlERV9XUkFQX1kJCQkJCTE1IDogMAorCisjZGVmaW5lCURFX1NUQVRVUwkJCQkJMHgwMDAwNTAKKyNkZWZpbmUJREVfU1RBVFVTX0NTQwkJCQkJMSA6IDEKKyNkZWZpbmUJREVfU1RBVFVTX0NTQ19DTEVBUgkJCQkwCisjZGVmaW5lCURFX1NUQVRVU19DU0NfTk9UX0FDVElWRQkJCTAKKyNkZWZpbmUJREVfU1RBVFVTX0NTQ19BQ1RJVkUJCQkJMQorI2RlZmluZQlERV9TVEFUVVNfMkQJCQkJCTAgOiAwCisjZGVmaW5lCURFX1NUQVRVU18yRF9DTEVBUgkJCQkwCisjZGVmaW5lCURFX1NUQVRVU18yRF9OT1RfQUNUSVZFCQkJCTAKKyNkZWZpbmUJREVfU1RBVFVTXzJEX0FDVElWRQkJCQkxCisKKy8qIENvbG9yIFNwYWNlIENvbnZlcnNpb24gcmVnaXN0ZXJzLiAqLworCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFCQkJCTB4MDAwMEM4CisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0VYVAkJCQkyNyA6IDI3CisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkJMQorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9DUwkJCQkyNiA6IDI2CisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0NTXzAJCQkJMAorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9DU18xCQkJCTEKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAorCisjZGVmaW5lCUNTQ19DT05TVEFOVFMJCQkJCTB4MDAwMENDCisjZGVmaW5lCUNTQ19DT05TVEFOVFNfWQkJCQkJMzEgOiAyNAorI2RlZmluZQlDU0NfQ09OU1RBTlRTX1IJCQkJCTIzIDogMTYKKyNkZWZpbmUJQ1NDX0NPTlNUQU5UU19HCQkJCQkxNSA6IDgKKyNkZWZpbmUJQ1NDX0NPTlNUQU5UU19CCQkJCQk3IDogMAorCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9YCQkJCQkweDAwMDBEMAorI2RlZmluZQlDU0NfWV9TT1VSQ0VfWF9JTlRFR0VSCQkJCTI2IDogMTYKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1hfRlJBQ1RJT04JCQkJMTUgOiAzCisKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1kJCQkJCTB4MDAwMEQ0CisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9ZX0lOVEVHRVIJCQkJMjcgOiAxNgorI2RlZmluZQlDU0NfWV9TT1VSQ0VfWV9GUkFDVElPTgkJCQkxNSA6IDMKKworI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRQkJCQkweDAwMDBEOAorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9FWFQJCQkJMjcgOiAyNworI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJCTEKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQ1MJCQkJMjYgOiAyNgorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9DU18wCQkJCTAKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQ1NfMQkJCQkxCisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKKworI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRQkJCQkweDAwMDBEQworI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9FWFQJCQkJMjcgOiAyNworI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJCTEKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQ1MJCQkJMjYgOiAyNgorI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9DU18wCQkJCTAKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQ1NfMQkJCQkxCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKKworI2RlZmluZQlDU0NfU09VUkNFX0RJTUVOU0lPTgkJCQkweDAwMDBFMAorI2RlZmluZQlDU0NfU09VUkNFX0RJTUVOU0lPTl9YCQkJCTMxIDogMTYKKyNkZWZpbmUJQ1NDX1NPVVJDRV9ESU1FTlNJT05fWQkJCQkxNSA6IDAKKworI2RlZmluZQlDU0NfU09VUkNFX1BJVENICQkJCTB4MDAwMEU0CisjZGVmaW5lCUNTQ19TT1VSQ0VfUElUQ0hfWQkJCQkzMSA6IDE2CisjZGVmaW5lCUNTQ19TT1VSQ0VfUElUQ0hfVVYJCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OCQkJCQkweDAwMDBFOAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fV1JBUAkJCQkzMSA6IDMxCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9XUkFQX0RJU0FCTEUJCQkwCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9XUkFQX0VOQUJMRQkJCTEKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1gJCQkJMjcgOiAxNgorI2RlZmluZQlDU0NfREVTVElOQVRJT05fWQkJCQkxMSA6IDAKKworI2RlZmluZQlDU0NfREVTVElOQVRJT05fRElNRU5TSU9OCQkJMHgwMDAwRUMKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0RJTUVOU0lPTl9YCQkJMzEgOiAxNgorI2RlZmluZQlDU0NfREVTVElOQVRJT05fRElNRU5TSU9OX1kJCQkxNSA6IDAKKworI2RlZmluZQlDU0NfREVTVElOQVRJT05fUElUQ0gJCQkJMHgwMDAwRjAKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1BJVENIX1gJCQkJMzEgOiAxNgorI2RlZmluZQlDU0NfREVTVElOQVRJT05fUElUQ0hfWQkJCQkxNSA6IDAKKworI2RlZmluZQlDU0NfU0NBTEVfRkFDVE9SCQkJCTB4MDAwMEY0CisjZGVmaW5lCUNTQ19TQ0FMRV9GQUNUT1JfSE9SSVpPTlRBTAkJCTMxIDogMTYKKyNkZWZpbmUJQ1NDX1NDQUxFX0ZBQ1RPUl9WRVJUSUNBTAkJCTE1IDogMAorCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFCQkJCTB4MDAwMEY4CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0VYVAkJCTI3IDogMjcKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0xPQ0FMCQkJMAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9FWFRfRVhURVJOQUwJCTEKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQ1MJCQkJMjYgOiAyNgorI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9DU18wCQkJMAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9DU18xCQkJMQorI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9BRERSRVNTCQkJMjUgOiAwCisKKyNkZWZpbmUJQ1NDX0NPTlRST0wJCQkJCTB4MDAwMEZDCisjZGVmaW5lCUNTQ19DT05UUk9MX1NUQVRVUwkJCQkzMSA6IDMxCisjZGVmaW5lCUNTQ19DT05UUk9MX1NUQVRVU19TVE9QCQkJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU1RBVFVTX1NUQVJUCQkJMQorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUCQkJMzAgOiAyOAorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lVVjQyMgkJMAorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lVVjQyMEkJCTEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVVY0MjAJCTIKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVlU5CQkJMworI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX0lZVTEJCQk0CisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfSVlVMgkJCTUKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9SR0I1NjUJCTYKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9SR0I4ODg4CQk3CisjZGVmaW5lCUNTQ19DT05UUk9MX0RFU1RJTkFUSU9OX0ZPUk1BVAkJCTI3IDogMjYKKyNkZWZpbmUJQ1NDX0NPTlRST0xfREVTVElOQVRJT05fRk9STUFUX1JHQjU2NQkJMAorI2RlZmluZQlDU0NfQ09OVFJPTF9ERVNUSU5BVElPTl9GT1JNQVRfUkdCODg4OAkJMQorI2RlZmluZQlDU0NfQ09OVFJPTF9IT1JJWk9OVEFMX0ZJTFRFUgkJCTI1IDogMjUKKyNkZWZpbmUJQ1NDX0NPTlRST0xfSE9SSVpPTlRBTF9GSUxURVJfRElTQUJMRQkJMAorI2RlZmluZQlDU0NfQ09OVFJPTF9IT1JJWk9OVEFMX0ZJTFRFUl9FTkFCTEUJCTEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfVkVSVElDQUxfRklMVEVSCQkJMjQgOiAyNAorI2RlZmluZQlDU0NfQ09OVFJPTF9WRVJUSUNBTF9GSUxURVJfRElTQUJMRQkJMAorI2RlZmluZQlDU0NfQ09OVFJPTF9WRVJUSUNBTF9GSUxURVJfRU5BQkxFCQkxCisjZGVmaW5lCUNTQ19DT05UUk9MX0JZVEVfT1JERVIJCQkJMjMgOiAyMworI2RlZmluZQlDU0NfQ09OVFJPTF9CWVRFX09SREVSX1lVWVYJCQkwCisjZGVmaW5lCUNTQ19DT05UUk9MX0JZVEVfT1JERVJfVVlWWQkJCTEKKworI2RlZmluZQlERV9EQVRBX1BPUlRfNTAxCQkJCTB4MTEwMDAwCisjZGVmaW5lCURFX0RBVEFfUE9SVF83MTIJCQkJMHg0MDAwMDAKKyNkZWZpbmUJREVfREFUQV9QT1JUXzcyMgkJCQkweDYwMDAKKworLyogcG9pbnQgdG8gdmlydHVhbCBNZW1vcnkgTWFwIElPIHN0YXJ0aW5nIGFkZHJlc3MgKi8KK2V4dGVybiBjaGFyICpzbXRjX1JlZ0Jhc2VBZGRyZXNzOworLyogcG9pbnQgdG8gdmlydHVhbCB2aWRlbyBtZW1vcnkgc3RhcnRpbmcgYWRkcmVzcyAqLworZXh0ZXJuIGNoYXIgKnNtdGNfVlJBTUJhc2VBZGRyZXNzOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc210Y19kZV9idXN5OworCitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1SZWFkMzIodW5zaWduZWQgbG9uZyBuT2Zmc2V0KTsKK2V4dGVybiB2b2lkIG1lbVdyaXRlMzIodW5zaWduZWQgbG9uZyBuT2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5EYXRhKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIFNNVENfcmVhZDJEcmVnKHVuc2lnbmVkIGxvbmcgbk9mZnNldCk7CisKKy8qIDJEIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgZGVJbml0KHVuc2lnbmVkIGludCBuTW9kZVdpZHRoLCB1bnNpZ25lZCBpbnQgbk1vZGVIZWlnaHQsCisJCSAgIHVuc2lnbmVkIGludCBicHApOworCitleHRlcm4gdm9pZCBkZVdhaXRGb3JOb3RCdXN5KHZvaWQpOworCitleHRlcm4gdm9pZCBkZVZlcnRpY2FsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgblgsCisJdW5zaWduZWQgbG9uZyBuWSwKKwl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCisJdW5zaWduZWQgbG9uZyBuQ29sb3IpOworCitleHRlcm4gdm9pZCBkZUhvcml6b250YWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJdW5zaWduZWQgbG9uZyBuWCwKKwl1bnNpZ25lZCBsb25nIG5ZLAorCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAorCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKKworZXh0ZXJuIHZvaWQgZGVMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJdW5zaWduZWQgbG9uZyBuWDEsCisJdW5zaWduZWQgbG9uZyBuWTEsCisJdW5zaWduZWQgbG9uZyBuWDIsCisJdW5zaWduZWQgbG9uZyBuWTIsCisJdW5zaWduZWQgbG9uZyBuQ29sb3IpOworCitleHRlcm4gdm9pZCBkZUZpbGxSZWN0KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJdW5zaWduZWQgbG9uZyBkc3RfWCwKKwl1bnNpZ25lZCBsb25nIGRzdF9ZLAorCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAorCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKKwl1bnNpZ25lZCBsb25nIG5Db2xvcik7CisKK2V4dGVybiB2b2lkIGRlUm90YXRlUGF0dGVybih1bnNpZ25lZCBjaGFyICpwYXR0ZXJuX2RzdGFkZHIsCisJdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3NyY19hZGRyLAorCXVuc2lnbmVkIGxvbmcgcGF0dGVybl9CUFAsCisJdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3N0cmlkZSwKKwlpbnQJcGF0dGVyblgsCisJaW50CXBhdHRlcm5ZKTsKKworZXh0ZXJuIHZvaWQgZGVDb3B5KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJdW5zaWduZWQgbG9uZyBkc3RfQlBQLAorCXVuc2lnbmVkIGxvbmcgZHN0X1gsCisJdW5zaWduZWQgbG9uZyBkc3RfWSwKKwl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCisJdW5zaWduZWQgbG9uZyBzcmNfYmFzZSwKKwl1bnNpZ25lZCBsb25nIHNyY19waXRjaCwKKwl1bnNpZ25lZCBsb25nIHNyY19YLAorCXVuc2lnbmVkIGxvbmcgc3JjX1ksCisJcFRyYW5zcGFyZW50CXBUcmFuc3AsCisJdW5zaWduZWQgY2hhciBuUk9QMik7CisKKy8qCisgKiBTeXN0ZW0gbWVtb3J5IHRvIFZpZGVvIG1lbW9yeSBtb25vY2hyb21lIGV4cGFuc2lvbi4KKyAqCisgKiBTb3VyY2UgaXMgbW9ub2Nocm9tZSBpbWFnZSBpbiBzeXN0ZW0gbWVtb3J5LiAgVGhpcyBmdW5jdGlvbiBleHBhbmRzIHRoZQorICogbW9ub2Nocm9tZSBkYXRhIHRvIGNvbG9yIGltYWdlIGluIHZpZGVvIG1lbW9yeS4KKyAqCisgKiBAcFNyY2J1ZjogcG9pbnRlciB0byBzdGFydCBvZiBzb3VyY2UgYnVmZmVyIGluIHN5c3RlbSBtZW1vcnkKKyAqIEBzcmNEZWx0YTogUGl0Y2ggdmFsdWUgKGluIGJ5dGVzKSBvZiB0aGUgc291cmNlIGJ1ZmZlciwgK2l2ZSBtZWFucyB0b3AKKyAqIAkJZG93biBhbmQgLWl2ZSBtZWFuIGJ1dHRvbiB1cAorICogQHN0YXJ0Qml0OiBNb25vIGRhdGEgY2FuIHN0YXJ0IGF0IGFueSBiaXQgaW4gYSBieXRlLCB0aGlzIHZhbHVlIHNob3VsZAorICogCQliZSAwIHRvIDcKKyAqIEBkQmFzZTogQWRkcmVzcyBvZiBkZXN0aW5hdGlvbiA6ICBvZmZzZXQgaW4gZnJhbWUgYnVmZmVyCisgKiBAZFBpdGNoOiBQaXRjaCB2YWx1ZSBvZiBkZXN0aW5hdGlvbiBzdXJmYWNlIGluIEJZVEUKKyAqIEBicHA6IENvbG9yIGRlcHRoIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UKKyAqIEBkeCwgZHk6IFN0YXJ0aW5nIGNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gc3VyZmFjZQorICogQHdpZHRoLCBoZWlnaHQ6IHdpZHRoIGFuZCBoZWlnaHQgb2YgcmVjdGFuZ2UgaW4gcGl4ZWwgdmFsdWUKKyAqIEBmQ29sb3IsYkNvbG9yOiBGb3JlZ3JvdW5kLCBCYWNrZ3JvdW5kIGNvbG9yIChjb3JyZXNwb25kaW5nIHRvIGEgMSwgMCBpbgorICogCXRoZSBtb25vY2hyb21lIGRhdGEpCisgKiBAcm9wMjogUk9QIHZhbHVlCisgKi8KKworZXh0ZXJuIGxvbmcgZGVTeXN0ZW1NZW0yVmlkZW9NZW1Nb25vQmx0KAorCWNvbnN0IGNoYXIgKnBTcmNidWYsCisJbG9uZyBzcmNEZWx0YSwKKwl1bnNpZ25lZCBsb25nIHN0YXJ0Qml0LAorCXVuc2lnbmVkIGxvbmcgZEJhc2UsCisJdW5zaWduZWQgbG9uZyBkUGl0Y2gsCisJdW5zaWduZWQgbG9uZyBicHAsCisJdW5zaWduZWQgbG9uZyBkeCwgdW5zaWduZWQgbG9uZyBkeSwKKwl1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwKKwl1bnNpZ25lZCBsb25nIGZDb2xvciwKKwl1bnNpZ25lZCBsb25nIGJDb2xvciwKKwl1bnNpZ25lZCBsb25nIHJvcDIpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBkZUdldFRyYW5zcGFyZW5jeSh2b2lkKTsKK2V4dGVybiB2b2lkIGRlU2V0UGl4ZWxGb3JtYXQodW5zaWduZWQgbG9uZyBicHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWRiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKQEAgLTAsMCArMSwxMjUzIEBACisvKgorICogU2lsaWNvbiBNb3Rpb24gU003WFggZnJhbWUgYnVmZmVyIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaWxpY29uIE1vdGlvbiBUZWNobm9sb2d5IENvcnAuCisgKiBBdXRob3JzOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KKyAqIAkgICAgQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICoKKyAqIFZlcnNpb24gMC4xMC4yNjE5Mi4yMS4wMQorICogCS0gQWRkIFBvd2VyUEMvQmlnIGVuZGlhbiBzdXBwb3J0CisgKiAJLSBBZGQgMkQgc3VwcG9ydCBmb3IgTHlueAorICogCS0gVmVyaWZpZWQgb24yLjYuMTkuMiAgQm95b2QueWFuZyA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KKyAqCisgKiBWZXJzaW9uIDAuMDkuMjYyMS4wMC4wMQorICogCS0gT25seSBzdXBwb3J0IExpbnV4IEtlcm5lbCdzIHZlcnNpb24gMi42LjIxLgorICoJQm95b2QueWFuZyAgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CisgKgorICogVmVyc2lvbiAwLjA5CisgKiAJLSBPbmx5IHN1cHBvcnQgTGludXggS2VybmVsJ3MgdmVyc2lvbiAyLjYuMTIuCisgKiAJQm95b2QueWFuZyA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KKyAqLworCisjaWZuZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19LRVJORUxfXworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KKworI2lmZGVmIENPTkZJR19QTQorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjZW5kaWYKKworc3RydWN0IHNjcmVlbl9pbmZvIHNtdGNfc2NyZWVuX2luZm87CisKKyNpbmNsdWRlICJzbXRjZmIuaCIKKyNpbmNsdWRlICJzbXRjMmQuaCIKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIHNtZGJnKGZvcm1hdCwgYXJnLi4uKQlwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBzbWRiZyhmb3JtYXQsIGFyZy4uLikKKyNlbmRpZgorCisvKgorKiBQcml2YXRlIHN0cnVjdHVyZQorKi8KK3N0cnVjdCBzbXRjZmJfaW5mbyB7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGlzIGEgcG9pbnRlciB0byBiZSBwYXNzZWQgaW50byB0aGUKKwkgKiBmdW5jdGlvbnMgYmVsb3cuICBUaGUgbW9kdWxlcyBvdXRzaWRlIHRoZSBtYWluCisJICogdm95YWdlci5jIGRyaXZlciBoYXZlIG5vIGtub3dsZWRnZSBhcyB0byB3aGF0CisJICogaXMgd2l0aGluIHRoaXMgc3RydWN0dXJlLgorCSAqLworCXN0cnVjdCBmYl9pbmZvIGZiOworCXN0cnVjdCBkaXNwbGF5X3N3aXRjaCAqZGlzcHN3OworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc2lnbmVkIGludCBjdXJyY29uOworCisJc3RydWN0IHsKKwkJdTggcmVkLCBncmVlbiwgYmx1ZTsKKwl9IHBhbGV0dGVbTlJfUkdCXTsKKworCXVfaW50IHBhbGV0dGVfc2l6ZTsKK307CisKK3N0cnVjdCBwYXJfaW5mbyB7CisJLyoKKwkgKiBIYXJkd2FyZQorCSAqLworCXUxNiBjaGlwSUQ7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICptX3BNTUlPOworCWNoYXIgX19pb21lbSAqbV9wTEZCOworCWNoYXIgKm1fcERQUjsKKwljaGFyICptX3BWUFI7CisJY2hhciAqbV9wQ1BSOworCisJdV9pbnQgd2lkdGg7CisJdV9pbnQgaGVpZ2h0OworCXVfaW50IGh6OworCXVfbG9uZyBCYXNlQWRkcmVzc0luVlJBTTsKKwl1OCBjaGlwUmV2SUQ7Cit9OworCitzdHJ1Y3QgdmVzYV9tb2RlX3RhYmxlCXsKKwljaGFyIG1vZGVfaW5kZXhbNl07CisJdTE2IGxmYl93aWR0aDsKKwl1MTYgbGZiX2hlaWdodDsKKwl1MTYgbGZiX2RlcHRoOworfTsKKworc3RhdGljIHN0cnVjdCB2ZXNhX21vZGVfdGFibGUgdmVzYV9tb2RlW10gPSB7CisJeyIweDMwMSIsIDY0MCwgIDQ4MCwgIDh9LAorCXsiMHgzMDMiLCA4MDAsICA2MDAsICA4fSwKKwl7IjB4MzA1IiwgMTAyNCwgNzY4LAk4fSwKKwl7IjB4MzA3IiwgMTI4MCwgMTAyNCwgOH0sCisKKwl7IjB4MzExIiwgNjQwLCAgNDgwLCAgMTZ9LAorCXsiMHgzMTQiLCA4MDAsICA2MDAsICAxNn0sCisJeyIweDMxNyIsIDEwMjQsIDc2OCwJMTZ9LAorCXsiMHgzMUEiLCAxMjgwLCAxMDI0LCAxNn0sCisKKwl7IjB4MzEyIiwgNjQwLCAgNDgwLCAgMjR9LAorCXsiMHgzMTUiLCA4MDAsICA2MDAsICAyNH0sCisJeyIweDMxOCIsIDEwMjQsIDc2OCwJMjR9LAorCXsiMHgzMUIiLCAxMjgwLCAxMDI0LCAyNH0sCit9OworCitjaGFyIF9faW9tZW0gKnNtdGNfUmVnQmFzZUFkZHJlc3M7CS8qIE1lbW9yeSBNYXAgSU8gc3RhcnRpbmcgYWRkcmVzcyAqLworY2hhciBfX2lvbWVtICpzbXRjX1ZSQU1CYXNlQWRkcmVzczsJLyogdmlkZW8gbWVtb3J5IHN0YXJ0aW5nIGFkZHJlc3MgKi8KKworY2hhciAqc210Y18yREJhc2VBZGRyZXNzOwkvKiAyRCBlbmdpbmUgc3RhcnRpbmcgYWRkcmVzcyAqLworY2hhciAqc210Y18yRGRhdGFwb3J0OwkJLyogMkQgZGF0YSBwb3J0IG9mZnNldCAqLworc2hvcnQgc210Y18yRGFjY2VsZXJhdGlvbjsKKworc3RhdGljIHUzMiBjb2xyZWdbMTddOworc3RhdGljIHN0cnVjdCBwYXJfaW5mbyBodzsJLyogaGFyZHdhcmUgaW5mb3JtYXRpb24gKi8KKwordTE2IHNtdGNfQ2hpcElEc1tdID0geworCTB4NzEwLAorCTB4NzEyLAorCTB4NzIwCit9OworCisjZGVmaW5lIG51bVNNVENjaGlwSURzIChzaXplb2Yoc210Y19DaGlwSURzKSAvIHNpemVvZih1MTYpKQorCit2b2lkIGRlV2FpdEZvck5vdEJ1c3kodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGkgPSAweDEwMDAwMDA7CisJd2hpbGUgKGktLSkgeworCQlpZiAoKHNtdGNfc2VxcigweDE2KSAmIDB4MTgpID09IDB4MTApCisJCQlicmVhazsKKwl9CisJc210Y19kZV9idXN5ID0gMDsKK30KKworc3RhdGljIHZvaWQgc203MTJfc2V0X3RpbWluZyhzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiwKKwkJCSAgICAgc3RydWN0IHBhcl9pbmZvICpwcGFyX2luZm8pCit7CisJaW50IGkgPSAwLCBqID0gMDsKKwl1MzIgbV9uU2NyZWVuU3RyaWRlOworCisJc21kYmcoIlxucHBhcl9pbmZvLT53aWR0aCA9ICVkIHBwYXJfaW5mby0+aGVpZ2h0ID0gJWQiCisJCQkic2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPSAlZCBwcGFyX2luZm8tPmh6ID0gJWRcbiIsCisJCQlwcGFyX2luZm8tPndpZHRoLCBwcGFyX2luZm8tPmhlaWdodCwKKwkJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsLCBwcGFyX2luZm8tPmh6KTsKKworCWZvciAoaiA9IDA7IGogPCBudW1WR0FNb2RlczsgaisrKSB7CisJCWlmIChWR0FNb2RlW2pdLm1tU2l6ZVggPT0gcHBhcl9pbmZvLT53aWR0aCAmJgorCQkgICAgVkdBTW9kZVtqXS5tbVNpemVZID09IHBwYXJfaW5mby0+aGVpZ2h0ICYmCisJCSAgICBWR0FNb2RlW2pdLmJwcCA9PSBzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCAmJgorCQkgICAgVkdBTW9kZVtqXS5oeiA9PSBwcGFyX2luZm8tPmh6KSB7CisKKwkJCXNtZGJnKCJcblZHQU1vZGVbal0ubW1TaXplWCAgPSAlZCBWR0FNb2RlW2pdLm1tU2l6ZVkgPSIKKwkJCQkJIiVkIFZHQU1vZGVbal0uYnBwID0gJWQiCisJCQkJCSJWR0FNb2RlW2pdLmh6PSVkXG4iLAorCQkJCQlWR0FNb2RlW2pdLm1tU2l6ZVgsIFZHQU1vZGVbal0ubW1TaXplWSwKKwkJCQkJVkdBTW9kZVtqXS5icHAsIFZHQU1vZGVbal0uaHopOworCisJCQlzbWRiZygiVkdBTW9kZSBpbmRleD0lZFxuIiwgaik7CisKKwkJCXNtdGNfbW1pb3diKDB4MCwgMHgzYzYpOworCisJCQlzbXRjX3NlcXcoMCwgMHgxKTsKKworCQkJc210Y19tbWlvd2IoVkdBTW9kZVtqXS5Jbml0X01JU0MsIDB4M2MyKTsKKworCQkJLyogaW5pdCBTRVEgcmVnaXN0ZXIgU1IwMCAtIFNSMDQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX1NSMDBfU1IwNDsgaSsrKQorCQkJCXNtdGNfc2VxdyhpLCBWR0FNb2RlW2pdLkluaXRfU1IwMF9TUjA0W2ldKTsKKworCQkJLyogaW5pdCBTRVEgcmVnaXN0ZXIgU1IxMCAtIFNSMjQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX1NSMTBfU1IyNDsgaSsrKQorCQkJCXNtdGNfc2VxdyhpICsgMHgxMCwKKwkJCQkJICBWR0FNb2RlW2pdLkluaXRfU1IxMF9TUjI0W2ldKTsKKworCQkJLyogaW5pdCBTRVEgcmVnaXN0ZXIgU1IzMCAtIFNSNzUgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX1NSMzBfU1I3NTsgaSsrKQorCQkJCWlmICgoKGkgKyAweDMwKSAhPSAweDYyKSBcCisJCQkJCSYmICgoaSArIDB4MzApICE9IDB4NmEpIFwKKwkJCQkJJiYgKChpICsgMHgzMCkgIT0gMHg2YikpCisJCQkJCXNtdGNfc2VxdyhpICsgMHgzMCwKKwkJCQkJCVZHQU1vZGVbal0uSW5pdF9TUjMwX1NSNzVbaV0pOworCisJCQkvKiBpbml0IFNFUSByZWdpc3RlciBTUjgwIC0gU1I5MyAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfU1I4MF9TUjkzOyBpKyspCisJCQkJc210Y19zZXF3KGkgKyAweDgwLAorCQkJCQkgIFZHQU1vZGVbal0uSW5pdF9TUjgwX1NSOTNbaV0pOworCisJCQkvKiBpbml0IFNFUSByZWdpc3RlciBTUkEwIC0gU1JBRiAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfU1JBMF9TUkFGOyBpKyspCisJCQkJc210Y19zZXF3KGkgKyAweGEwLAorCQkJCQkgIFZHQU1vZGVbal0uSW5pdF9TUkEwX1NSQUZbaV0pOworCisJCQkvKiBpbml0IEdyYXBoaWMgcmVnaXN0ZXIgR1IwMCAtIEdSMDggKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX0dSMDBfR1IwODsgaSsrKQorCQkJCXNtdGNfZ3JwaHcoaSwgVkdBTW9kZVtqXS5Jbml0X0dSMDBfR1IwOFtpXSk7CisKKwkJCS8qIGluaXQgQXR0cmlidXRlIHJlZ2lzdGVyIEFSMDAgLSBBUjE0ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9BUjAwX0FSMTQ7IGkrKykKKwkJCQlzbXRjX2F0dHJ3KGksIFZHQU1vZGVbal0uSW5pdF9BUjAwX0FSMTRbaV0pOworCisJCQkvKiBpbml0IENSVEMgcmVnaXN0ZXIgQ1IwMCAtIENSMTggKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX0NSMDBfQ1IxODsgaSsrKQorCQkJCXNtdGNfY3J0Y3coaSwgVkdBTW9kZVtqXS5Jbml0X0NSMDBfQ1IxOFtpXSk7CisKKwkJCS8qIGluaXQgQ1JUQyByZWdpc3RlciBDUjMwIC0gQ1I0RCAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfQ1IzMF9DUjREOyBpKyspCisJCQkJc210Y19jcnRjdyhpICsgMHgzMCwKKwkJCQkJICAgVkdBTW9kZVtqXS5Jbml0X0NSMzBfQ1I0RFtpXSk7CisKKwkJCS8qIGluaXQgQ1JUQyByZWdpc3RlciBDUjkwIC0gQ1JBNyAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfQ1I5MF9DUkE3OyBpKyspCisJCQkJc210Y19jcnRjdyhpICsgMHg5MCwKKwkJCQkJICAgVkdBTW9kZVtqXS5Jbml0X0NSOTBfQ1JBN1tpXSk7CisJCX0KKwl9CisJc210Y19tbWlvd2IoMHg2NywgMHgzYzIpOworCisJLyogc2V0IFZQUiByZWdpc3RlcnMgKi8KKwl3cml0ZWwoMHgwLCBwcGFyX2luZm8tPm1fcFZQUiArIDB4MEMpOworCXdyaXRlbCgweDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHg0MCk7CisKKwkvKiBzZXQgZGF0YSB3aWR0aCAqLworCW1fblNjcmVlblN0cmlkZSA9CisJCShwcGFyX2luZm8tPndpZHRoICogc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpIC8gNjQ7CisJc3dpdGNoIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJd3JpdGVsKDB4MCwgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDApOworCQlicmVhazsKKwljYXNlIDE2OgorCQl3cml0ZWwoMHgwMDAyMDAwMCwgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDApOworCQlicmVhazsKKwljYXNlIDI0OgorCQl3cml0ZWwoMHgwMDA0MDAwMCwgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDApOworCQlicmVhazsKKwljYXNlIDMyOgorCQl3cml0ZWwoMHgwMDAzMDAwMCwgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDApOworCQlicmVhazsKKwl9CisJd3JpdGVsKCh1MzIpICgoKG1fblNjcmVlblN0cmlkZSArIDIpIDw8IDE2KSB8IG1fblNjcmVlblN0cmlkZSksCisJICAgICAgIHBwYXJfaW5mby0+bV9wVlBSICsgMHgxMCk7CisKK30KKworc3RhdGljIHZvaWQgc203MTJfc2V0cGFsZXR0ZShpbnQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisJCQkgICAgIHVuc2lnbmVkIGJsdWUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBwYXJfaW5mbyAqY3VyX3BhciA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7CisKKwlpZiAoY3VyX3Bhci0+QmFzZUFkZHJlc3NJblZSQU0pCisJCS8qCisJCSAqIHNlY29uZCBkaXNwbGF5IHBhbGV0dGUgZm9yIGR1YWwgaGVhZC4gRW5hYmxlIENSVCBSQU0sIDYtYml0CisJCSAqIFJBTQorCQkgKi8KKwkJc210Y19zZXF3KDB4NjYsIChzbXRjX3NlcXIoMHg2NikgJiAweEMzKSB8IDB4MjApOworCWVsc2UKKwkJLyogcHJpbWFyeSBkaXNwbGF5IHBhbGV0dGUuIEVuYWJsZSBMQ0QgUkFNIG9ubHksIDYtYml0IFJBTSAqLworCQlzbXRjX3NlcXcoMHg2NiwgKHNtdGNfc2VxcigweDY2KSAmIDB4QzMpIHwgMHgxMCk7CisJc210Y19tbWlvd2IocmVnbm8sIGRhY19yZWcpOworCXNtdGNfbW1pb3diKHJlZCA+PiAxMCwgZGFjX3ZhbCk7CisJc210Y19tbWlvd2IoZ3JlZW4gPj4gMTAsIGRhY192YWwpOworCXNtdGNfbW1pb3diKGJsdWUgPj4gMTAsIGRhY192YWwpOworfQorCitzdGF0aWMgdm9pZCBzbXRjX3NldF90aW1pbmcoc3RydWN0IHNtdGNmYl9pbmZvICpzZmIsIHN0cnVjdCBwYXJfaW5mbworCQkqcHBhcl9pbmZvKQoreworCXN3aXRjaCAocHBhcl9pbmZvLT5jaGlwSUQpIHsKKwljYXNlIDB4NzEwOgorCWNhc2UgMHg3MTI6CisJY2FzZSAweDcyMDoKKwkJc203MTJfc2V0X3RpbWluZyhzZmIsIHBwYXJfaW5mbyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBzbXRjZmJfdmFyID0geworCS54cmVzID0gMTAyNCwKKwkueXJlcyA9IDYwMCwKKwkueHJlc192aXJ0dWFsID0gMTAyNCwKKwkueXJlc192aXJ0dWFsID0gNjAwLAorCS5iaXRzX3Blcl9waXhlbCA9IDE2LAorCS5yZWQgPSB7MTYsIDgsIDB9LAorCS5ncmVlbiA9IHs4LCA4LCAwfSwKKwkuYmx1ZSA9IHswLCA4LCAwfSwKKwkuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1csCisJLmhlaWdodCA9IC0xLAorCS53aWR0aCA9IC0xLAorCS52bW9kZSA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCit9OworCitzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIHNtdGNmYl9maXggPSB7CisJLmlkID0gInNtNzEyZmIiLAorCS50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTLAorCS52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SLAorCS5saW5lX2xlbmd0aCA9IDgwMCAqIDMsCisJLmFjY2VsID0gRkJfQUNDRUxfU01JX0xZTlgsCit9OworCisvKiBjaGFuX3RvX2ZpZWxkCisgKgorICogY29udmVydCBhIGNvbG91ciB2YWx1ZSBpbnRvIGEgZmllbGQgcG9zaXRpb24KKyAqCisgKiBmcm9tIHB4YWZiLmMKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjaGFuX3RvX2ZpZWxkKHVuc2lnbmVkIGludCBjaGFuLAorCQkJCQkgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKK3sKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKK30KKworc3RhdGljIGludCBzbXRjZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCS8qIGNsZWFyIERQTVMgc2V0dGluZyAqLworCXN3aXRjaCAoYmxhbmtfbW9kZSkgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJLyogU2NyZWVuIE9uOiBIU3luYzogT24sIFZTeW5jIDogT24gKi8KKwkJc210Y19zZXF3KDB4MDEsIChzbXRjX3NlcXIoMHgwMSkgJiAofjB4MjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDE2KTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMSwgKHNtdGNfc2VxcigweDIxKSAmIDB4NzcpKTsKKwkJc210Y19zZXF3KDB4MjIsIChzbXRjX3NlcXIoMHgyMikgJiAofjB4MzApKSk7CisJCXNtdGNfc2VxdygweDIzLCAoc210Y19zZXFyKDB4MjMpICYgKH4weGMwKSkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSB8IDB4MDEpKTsKKwkJc210Y19zZXF3KDB4MzEsIChzbXRjX3NlcXIoMHgzMSkgfCAweDAzKSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCQkvKiBTY3JlZW4gT2ZmOiBIU3luYzogT24sIFZTeW5jIDogT24gICBTb2Z0IGJsYW5rICovCisJCXNtdGNfc2VxdygweDAxLCAoc210Y19zZXFyKDB4MDEpICYgKH4weDIwKSkpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgxNik7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4MjIsIChzbXRjX3NlcXIoMHgyMikgJiAofjB4MzApKSk7CisJCXNtdGNfc2VxdygweDIzLCAoc210Y19zZXFyKDB4MjMpICYgKH4weGMwKSkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSB8IDB4MDEpKTsKKwkJc210Y19zZXF3KDB4MzEsICgoc210Y19zZXFyKDB4MzEpICYgKH4weDA3KSkgfCAweDAwKSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwkJLyogU2NyZWVuIE9uOiBIU3luYzogT24sIFZTeW5jIDogT2ZmICovCisJCXNtdGNfc2VxdygweDAxLCAoc210Y19zZXFyKDB4MDEpIHwgMHgyMCkpOworCQlzbXRjX3NlcXcoMHgyMCwgKHNtdGNfc2VxcigweDIwKSAmICh+MHhCMCkpKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MGMpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDIxLCAoc210Y19zZXFyKDB4MjEpIHwgMHg4OCkpOworCQlzbXRjX3NlcXcoMHgyMiwgKChzbXRjX3NlcXIoMHgyMikgJiAofjB4MzApKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjMsICgoc210Y19zZXFyKDB4MjMpICYgKH4weGMwKSkgfCAweDIwKSk7CisJCXNtdGNfc2VxdygweDI0LCAoc210Y19zZXFyKDB4MjQpICYgKH4weDAxKSkpOworCQlzbXRjX3NlcXcoMHgzMSwgKChzbXRjX3NlcXIoMHgzMSkgJiAofjB4MDcpKSB8IDB4MDApKTsKKwkJc210Y19zZXF3KDB4MzQsIChzbXRjX3NlcXIoMHgzNCkgfCAweDgwKSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwkJLyogU2NyZWVuIE9uOiBIU3luYzogT2ZmLCBWU3luYyA6IE9uICovCisJCXNtdGNfc2VxdygweDAxLCAoc210Y19zZXFyKDB4MDEpIHwgMHgyMCkpOworCQlzbXRjX3NlcXcoMHgyMCwgKHNtdGNfc2VxcigweDIwKSAmICh+MHhCMCkpKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MGMpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDIxLCAoc210Y19zZXFyKDB4MjEpIHwgMHg4OCkpOworCQlzbXRjX3NlcXcoMHgyMiwgKChzbXRjX3NlcXIoMHgyMikgJiAofjB4MzApKSB8IDB4MTApKTsKKwkJc210Y19zZXF3KDB4MjMsICgoc210Y19zZXFyKDB4MjMpICYgKH4weGMwKSkgfCAweEQ4KSk7CisJCXNtdGNfc2VxdygweDI0LCAoc210Y19zZXFyKDB4MjQpICYgKH4weDAxKSkpOworCQlzbXRjX3NlcXcoMHgzMSwgKChzbXRjX3NlcXIoMHgzMSkgJiAofjB4MDcpKSB8IDB4MDApKTsKKwkJc210Y19zZXF3KDB4MzQsIChzbXRjX3NlcXIoMHgzNCkgfCAweDgwKSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCQkvKiBTY3JlZW4gT246IEhTeW5jOiBPZmYsIFZTeW5jIDogT2ZmICovCisJCXNtdGNfc2VxdygweDAxLCAoc210Y19zZXFyKDB4MDEpIHwgMHgyMCkpOworCQlzbXRjX3NlcXcoMHgyMCwgKHNtdGNfc2VxcigweDIwKSAmICh+MHhCMCkpKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MGMpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDIxLCAoc210Y19zZXFyKDB4MjEpIHwgMHg4OCkpOworCQlzbXRjX3NlcXcoMHgyMiwgKChzbXRjX3NlcXIoMHgyMikgJiAofjB4MzApKSB8IDB4MzApKTsKKwkJc210Y19zZXF3KDB4MjMsICgoc210Y19zZXFyKDB4MjMpICYgKH4weGMwKSkgfCAweEQ4KSk7CisJCXNtdGNfc2VxdygweDI0LCAoc210Y19zZXFyKDB4MjQpICYgKH4weDAxKSkpOworCQlzbXRjX3NlcXcoMHgzMSwgKChzbXRjX3NlcXIoMHgzMSkgJiAofjB4MDcpKSB8IDB4MDApKTsKKwkJc210Y19zZXF3KDB4MzQsIChzbXRjX3NlcXIoMHgzNCkgfCAweDgwKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtdGNfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFucywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmIgPSAoc3RydWN0IHNtdGNmYl9pbmZvICopaW5mbzsKKwl1MzIgdmFsOworCisJaWYgKHJlZ25vID4gMjU1KQorCQlyZXR1cm4gMTsKKworCXN3aXRjaCAoc2ZiLT5mYi5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfRElSRUNUQ09MT1I6CisJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCQkvKgorCQkgKiAxNi8zMiBiaXQgdHJ1ZS1jb2xvdXIsIHVzZSBwc2V1by1wYWxldHRlIGZvciAxNiBiYXNlIGNvbG9yCisJCSAqLworCQlpZiAocmVnbm8gPCAxNikgeworCQkJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDE2KSB7CisJCQkJdTMyICpwYWwgPSBzZmItPmZiLnBzZXVkb19wYWxldHRlOworCQkJCXZhbCA9IGNoYW5fdG9fZmllbGQocmVkLCAmc2ZiLT5mYi52YXIucmVkKTsKKwkJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgXAorCQkJCQkJJnNmYi0+ZmIudmFyLmdyZWVuKTsKKwkJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmc2ZiLT5mYi52YXIuYmx1ZSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkJcGFsW3JlZ25vXSA9CisJCQkJICAgICgocmVkICYgMHhmODAwKSA+PiA4KSB8CisJCQkJICAgICgoZ3JlZW4gJiAweGUwMDApID4+IDEzKSB8CisJCQkJICAgICgoZ3JlZW4gJiAweDFjMDApIDw8IDMpIHwKKwkJCQkgICAgKChibHVlICYgMHhmODAwKSA+PiAzKTsKKyNlbHNlCisJCQkJcGFsW3JlZ25vXSA9IHZhbDsKKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQl1MzIgKnBhbCA9IHNmYi0+ZmIucHNldWRvX3BhbGV0dGU7CisJCQkJdmFsID0gY2hhbl90b19maWVsZChyZWQsICZzZmItPmZiLnZhci5yZWQpOworCQkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGdyZWVuLCBcCisJCQkJCQkmc2ZiLT5mYi52YXIuZ3JlZW4pOworCQkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJsdWUsICZzZmItPmZiLnZhci5ibHVlKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCQl2YWwgPQorCQkJCSAgICAodmFsICYgMHhmZjAwZmYwMCA+PiA4KSB8CisJCQkJICAgICh2YWwgJiAweDAwZmYwMGZmIDw8IDgpOworI2VuZGlmCisJCQkJcGFsW3JlZ25vXSA9IHZhbDsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgRkJfVklTVUFMX1BTRVVET0NPTE9SOgorCQkvKiBjb2xvciBkZXB0aCA4IGJpdCAqLworCQlzbTcxMl9zZXRwYWxldHRlKHJlZ25vLCByZWQsIGdyZWVuLCBibHVlLCBpbmZvKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsJLyogdW5rbm93biB0eXBlICovCisJfQorCisJcmV0dXJuIDA7CisKK30KKworI2lmZGVmIF9fQklHX0VORElBTgorc3RhdGljIHNzaXplX3Qgc210Y2ZiX3JlYWQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QKKwkJCQljb3VudCwgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOworCisJdTMyICpidWZmZXIsICpkc3Q7CisJdTMyIF9faW9tZW0gKnNyYzsKKwlpbnQgYywgaSwgY250ID0gMCwgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemU7CisKKwlpZiAoIWluZm8gfHwgIWluZm8tPnNjcmVlbl9iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKKwkJcmV0dXJuIC1FUEVSTTsKKworCXRvdGFsX3NpemUgPSBpbmZvLT5zY3JlZW5fc2l6ZTsKKworCWlmICh0b3RhbF9zaXplID09IDApCisJCXRvdGFsX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW47CisKKwlpZiAocCA+PSB0b3RhbF9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChjb3VudCA+PSB0b3RhbF9zaXplKQorCQljb3VudCA9IHRvdGFsX3NpemU7CisKKwlpZiAoY291bnQgKyBwID4gdG90YWxfc2l6ZSkKKwkJY291bnQgPSB0b3RhbF9zaXplIC0gcDsKKworCWJ1ZmZlciA9IGttYWxsb2MoKGNvdW50ID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6IGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcmMgPSAodTMyIF9faW9tZW0gKikgKGluZm8tPnNjcmVlbl9iYXNlICsgcCk7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCisJCWluZm8tPmZib3BzLT5mYl9zeW5jKGluZm8pOworCisJd2hpbGUgKGNvdW50KSB7CisJCWMgPSAoY291bnQgPiBQQUdFX1NJWkUpID8gUEFHRV9TSVpFIDogY291bnQ7CisJCWRzdCA9IGJ1ZmZlcjsKKwkJZm9yIChpID0gYyA+PiAyOyBpLS07KSB7CisJCQkqZHN0ID0gZmJfcmVhZGwoc3JjKyspOworCQkJKmRzdCA9CisJCQkgICAgKCpkc3QgJiAweGZmMDBmZjAwID4+IDgpIHwKKwkJCSAgICAoKmRzdCAmIDB4MDBmZjAwZmYgPDwgOCk7CisJCQlkc3QrKzsKKwkJfQorCQlpZiAoYyAmIDMpIHsKKwkJCXU4ICpkc3Q4ID0gKHU4ICopIGRzdDsKKwkJCXU4IF9faW9tZW0gKnNyYzggPSAodTggX19pb21lbSAqKSBzcmM7CisKKwkJCWZvciAoaSA9IGMgJiAzOyBpLS07KSB7CisJCQkJaWYgKGkgJiAxKSB7CisJCQkJCSpkc3Q4KysgPSBmYl9yZWFkYigrK3NyYzgpOworCQkJCX0gZWxzZSB7CisJCQkJCSpkc3Q4KysgPSBmYl9yZWFkYigtLXNyYzgpOworCQkJCQlzcmM4ICs9IDI7CisJCQkJfQorCQkJfQorCQkJc3JjID0gKHUzMiBfX2lvbWVtICopIHNyYzg7CisJCX0KKworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgYnVmZmVyLCBjKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCSpwcG9zICs9IGM7CisJCWJ1ZiArPSBjOworCQljbnQgKz0gYzsKKwkJY291bnQgLT0gYzsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIChlcnIpID8gZXJyIDogY250OworfQorCitzdGF0aWMgc3NpemVfdAorc210Y2ZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJICAgICBsb2ZmX3QgKnBwb3MpCit7CisJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CisKKwl1MzIgKmJ1ZmZlciwgKnNyYzsKKwl1MzIgX19pb21lbSAqZHN0OworCWludCBjLCBpLCBjbnQgPSAwLCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZTsKKworCWlmICghaW5mbyB8fCAhaW5mby0+c2NyZWVuX2Jhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gLUVQRVJNOworCisJdG90YWxfc2l6ZSA9IGluZm8tPnNjcmVlbl9zaXplOworCisJaWYgKHRvdGFsX3NpemUgPT0gMCkKKwkJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCWlmIChwID4gdG90YWxfc2l6ZSkKKwkJcmV0dXJuIC1FRkJJRzsKKworCWlmIChjb3VudCA+IHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVGQklHOworCQljb3VudCA9IHRvdGFsX3NpemU7CisJfQorCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpIHsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSAtRU5PU1BDOworCisJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisJfQorCisJYnVmZmVyID0ga21hbGxvYygoY291bnQgPiBQQUdFX1NJWkUpID8gUEFHRV9TSVpFIDogY291bnQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRzdCA9ICh1MzIgX19pb21lbSAqKSAoaW5mby0+c2NyZWVuX2Jhc2UgKyBwKTsKKworCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKKwkJaW5mby0+ZmJvcHMtPmZiX3N5bmMoaW5mbyk7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJYyA9IChjb3VudCA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOiBjb3VudDsKKwkJc3JjID0gYnVmZmVyOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihzcmMsIGJ1ZiwgYykpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWZvciAoaSA9IGMgPj4gMjsgaS0tOykgeworCQkJZmJfd3JpdGVsKCgqc3JjICYgMHhmZjAwZmYwMCA+PiA4KSB8CisJCQkJICAoKnNyYyAmIDB4MDBmZjAwZmYgPDwgOCksIGRzdCsrKTsKKwkJCXNyYysrOworCQl9CisJCWlmIChjICYgMykgeworCQkJdTggKnNyYzggPSAodTggKikgc3JjOworCQkJdTggX19pb21lbSAqZHN0OCA9ICh1OCBfX2lvbWVtICopIGRzdDsKKworCQkJZm9yIChpID0gYyAmIDM7IGktLTspIHsKKwkJCQlpZiAoaSAmIDEpIHsKKwkJCQkJZmJfd3JpdGViKCpzcmM4KyssICsrZHN0OCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZmJfd3JpdGViKCpzcmM4KyssIC0tZHN0OCk7CisJCQkJCWRzdDggKz0gMjsKKwkJCQl9CisJCQl9CisJCQlkc3QgPSAodTMyIF9faW9tZW0gKikgZHN0ODsKKwkJfQorCisJCSpwcG9zICs9IGM7CisJCWJ1ZiArPSBjOworCQljbnQgKz0gYzsKKwkJY291bnQgLT0gYzsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIChjbnQpID8gY250IDogZXJyOworfQorI2VuZGlmCS8qICEgX19CSUdfRU5ESUFOICovCisKKyNpbmNsdWRlICJzbXRjMmQuYyIKKwordm9pZCBzbXRjZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3QgcGFyX2luZm8gKnAgPSAoc3RydWN0IHBhcl9pbmZvICopaW5mby0+cGFyOworCisJaWYgKHNtdGNfMkRhY2NlbGVyYXRpb24pIHsKKwkJaWYgKCFhcmVhLT53aWR0aCB8fCAhYXJlYS0+aGVpZ2h0KQorCQkJcmV0dXJuOworCisJCWRlQ29weShwLT5CYXNlQWRkcmVzc0luVlJBTSwgMCwgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLAorCQkgICAgICAgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0LAorCQkgICAgICAgcC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIGFyZWEtPnN4LCBhcmVhLT5zeSwgMCwgMHhDKTsKKworCX0gZWxzZQorCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7Cit9CisKK3ZvaWQgc210Y2ZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJc3RydWN0IHBhcl9pbmZvICpwID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKKworCWlmIChzbXRjXzJEYWNjZWxlcmF0aW9uKSB7CisJCWlmICghcmVjdC0+d2lkdGggfHwgIXJlY3QtPmhlaWdodCkKKwkJCXJldHVybjsKKwkJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PSAyNCkKKwkJCWRlRmlsbFJlY3QocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIHJlY3QtPmR4ICogMywKKwkJCQkgICByZWN0LT5keSAqIDMsIHJlY3QtPndpZHRoICogMywgcmVjdC0+aGVpZ2h0LAorCQkJCSAgIHJlY3QtPmNvbG9yKTsKKwkJZWxzZQorCQkJZGVGaWxsUmVjdChwLT5CYXNlQWRkcmVzc0luVlJBTSwgMCwgcmVjdC0+ZHgsIHJlY3QtPmR5LAorCQkJCSAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmNvbG9yKTsKKwl9IGVsc2UKKwkJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworfQorCit2b2lkIHNtdGNmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJc3RydWN0IHBhcl9pbmZvICpwID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKKwl1MzIgYmdfY29sID0gMCwgZmdfY29sID0gMDsKKworCWlmICgoc210Y18yRGFjY2VsZXJhdGlvbikgJiYgKGltYWdlLT5kZXB0aCA9PSAxKSkgeworCQlpZiAoc210Y19kZV9idXN5KQorCQkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJCWNhc2UgODoKKwkJCWJnX2NvbCA9IGltYWdlLT5iZ19jb2xvcjsKKwkJCWZnX2NvbCA9IGltYWdlLT5mZ19jb2xvcjsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJYmdfY29sID0KKwkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCQkJZmdfY29sID0KKwkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQkJYnJlYWs7CisJCWNhc2UgMzI6CisJCQliZ19jb2wgPQorCQkJICAgICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5iZ19jb2xvcl07CisJCQlmZ19jb2wgPQorCQkJICAgICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5mZ19jb2xvcl07CisJCQlicmVhazsKKwkJfQorCisJCWRlU3lzdGVtTWVtMlZpZGVvTWVtTW9ub0JsdCgKKwkJCWltYWdlLT5kYXRhLAorCQkJaW1hZ2UtPndpZHRoIC8gOCwKKwkJCTAsCisJCQlwLT5CYXNlQWRkcmVzc0luVlJBTSwKKwkJCTAsCisJCQkwLAorCQkJaW1hZ2UtPmR4LCBpbWFnZS0+ZHksCisJCQlpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQsCisJCQlmZ19jb2wsIGJnX2NvbCwKKwkJCTB4MEMpOworCisJfSBlbHNlCisJCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBzbXRjZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9zZXRjb2xyZWcgPSBzbXRjX3NldGNvbHJlZywKKwkuZmJfYmxhbmsgPSBzbXRjZmJfYmxhbmssCisJLmZiX2ZpbGxyZWN0ID0gc210Y2ZiX2ZpbGxyZWN0LAorCS5mYl9pbWFnZWJsaXQgPSBzbXRjZmJfaW1hZ2VibGl0LAorCS5mYl9jb3B5YXJlYSA9IHNtdGNmYl9jb3B5YXJlYSwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkuZmJfcmVhZCA9IHNtdGNmYl9yZWFkLAorCS5mYl93cml0ZSA9IHNtdGNmYl93cml0ZSwKKyNlbmRpZgorCit9OworCit2b2lkIHNtdGNmYl9zZXRtb2RlKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiKQoreworCXN3aXRjaCAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDMyOgorCQlzZmItPmZiLmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlzZmItPmZiLmZpeC5saW5lX2xlbmd0aCA9IHNmYi0+ZmIudmFyLnhyZXMgKiA0OworCQlzZmItPmZiLnZhci5yZWQubGVuZ3RoID0gODsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ubGVuZ3RoID0gODsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5sZW5ndGggPSA4OworCQlzZmItPmZiLnZhci5yZWQub2Zmc2V0ID0gMTY7CisJCXNmYi0+ZmIudmFyLmdyZWVuLm9mZnNldCA9IDg7CisJCXNmYi0+ZmIudmFyLmJsdWUub2Zmc2V0ID0gMDsKKworCQlicmVhazsKKwljYXNlIDg6CisJCXNmYi0+ZmIuZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKKwkJc2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSBzZmItPmZiLnZhci54cmVzOworCQlzZmItPmZiLnZhci5yZWQub2Zmc2V0ID0gNTsKKwkJc2ZiLT5mYi52YXIucmVkLmxlbmd0aCA9IDM7CisJCXNmYi0+ZmIudmFyLmdyZWVuLm9mZnNldCA9IDI7CisJCXNmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDM7CisJCXNmYi0+ZmIudmFyLmJsdWUub2Zmc2V0ID0gMDsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5sZW5ndGggPSAyOworCQlicmVhazsKKwljYXNlIDI0OgorCQlzZmItPmZiLmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlzZmItPmZiLmZpeC5saW5lX2xlbmd0aCA9IHNmYi0+ZmIudmFyLnhyZXMgKiAzOworCQlzZmItPmZiLnZhci5yZWQubGVuZ3RoID0gODsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ubGVuZ3RoID0gODsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5sZW5ndGggPSA4OworCisJCXNmYi0+ZmIudmFyLnJlZC5vZmZzZXQgPSAxNjsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5vZmZzZXQgPSAwOworCisJCWJyZWFrOworCWNhc2UgMTY6CisJZGVmYXVsdDoKKwkJc2ZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJc2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSBzZmItPmZiLnZhci54cmVzICogMjsKKworCQlzZmItPmZiLnZhci5yZWQubGVuZ3RoID0gNTsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ubGVuZ3RoID0gNjsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5sZW5ndGggPSA1OworCisJCXNmYi0+ZmIudmFyLnJlZC5vZmZzZXQgPSAxMTsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5vZmZzZXQgPSAwOworCisJCWJyZWFrOworCX0KKworCWh3LndpZHRoID0gc2ZiLT5mYi52YXIueHJlczsKKwlody5oZWlnaHQgPSBzZmItPmZiLnZhci55cmVzOworCWh3Lmh6ID0gNjA7CisJc210Y19zZXRfdGltaW5nKHNmYiwgJmh3KTsKKwlpZiAoc210Y18yRGFjY2VsZXJhdGlvbikgeworCQlwcmludGsoIjJEIGFjY2VsZXJhdGlvbiBlbmFibGVkIVxuIik7CisJCS8qIEluaXQgc210YyBkcmF3aW5nIGVuZ2luZSAqLworCQlkZUluaXQoc2ZiLT5mYi52YXIueHJlcywgc2ZiLT5mYi52YXIueXJlcywKKwkJCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCk7CisJfQorfQorCisvKgorICogQWxsb2Mgc3RydWN0IHNtdGNmYl9pbmZvIGFuZCBhc3NpZ24gdGhlIGRlZmF1bHQgdmFsdWUKKyAqLworc3RhdGljIHN0cnVjdCBzbXRjZmJfaW5mbyAqc210Y19hbGxvY19mYl9pbmZvKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkJY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKKworCXNmYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXRjZmJfaW5mbyksIEdGUF9LRVJORUwpOworCisJaWYgKCFzZmIpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KHNmYiwgMCwgc2l6ZW9mKHN0cnVjdCBzbXRjZmJfaW5mbykpOworCisJc2ZiLT5jdXJyY29uID0gLTE7CisJc2ZiLT5kZXYgPSBkZXY7CisKKwkvKioqIEluaXQgc2ZiLT5mYiB3aXRoIGRlZmF1bHQgdmFsdWUgKioqLworCXNmYi0+ZmIuZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOworCXNmYi0+ZmIuZmJvcHMgPSAmc210Y2ZiX29wczsKKwlzZmItPmZiLnZhciA9IHNtdGNmYl92YXI7CisJc2ZiLT5mYi5maXggPSBzbXRjZmJfZml4OworCisJc3RyY3B5KHNmYi0+ZmIuZml4LmlkLCBuYW1lKTsKKworCXNmYi0+ZmIuZml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJc2ZiLT5mYi5maXgudHlwZV9hdXggPSAwOworCXNmYi0+ZmIuZml4LnhwYW5zdGVwID0gMDsKKwlzZmItPmZiLmZpeC55cGFuc3RlcCA9IDA7CisJc2ZiLT5mYi5maXgueXdyYXBzdGVwID0gMDsKKwlzZmItPmZiLmZpeC5hY2NlbCA9IEZCX0FDQ0VMX1NNSV9MWU5YOworCisJc2ZiLT5mYi52YXIubm9uc3RkID0gMDsKKwlzZmItPmZiLnZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKwlzZmItPmZiLnZhci5oZWlnaHQgPSAtMTsKKwlzZmItPmZiLnZhci53aWR0aCA9IC0xOworCS8qIHRleHQgbW9kZSBhY2NlbGVyYXRpb24gKi8KKwlzZmItPmZiLnZhci5hY2NlbF9mbGFncyA9IEZCX0FDQ0VMRl9URVhUOworCXNmYi0+ZmIudmFyLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKwlzZmItPmZiLnBhciA9ICZodzsKKwlzZmItPmZiLnBzZXVkb19wYWxldHRlID0gY29scmVnOworCisJcmV0dXJuIHNmYjsKK30KKworLyoKKyAqIFVubWFwIGluIHRoZSBtZW1vcnkgbWFwcGVkIElPIHJlZ2lzdGVycworICovCisKK3N0YXRpYyB2b2lkIHNtdGNfdW5tYXBfbW1pbyhzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYikKK3sKKwlpZiAoc2ZiICYmIHNtdGNfUmVnQmFzZUFkZHJlc3MpCisJCXNtdGNfUmVnQmFzZUFkZHJlc3MgPSBOVUxMOworfQorCisvKgorICogTWFwIGluIHRoZSBzY3JlZW4gbWVtb3J5CisgKi8KKworc3RhdGljIGludCBzbXRjX21hcF9zbWVtKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiLAorCQlzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1X2xvbmcgc21lbV9sZW4pCit7CisJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKSB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCXNmYi0+ZmIuZml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKQorCQkJKyAweDgwMDAwMDsKKyNlbHNlCisJCXNmYi0+ZmIuZml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXNmYi0+ZmIuZml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwl9CisKKwlzZmItPmZiLmZpeC5zbWVtX2xlbiA9IHNtZW1fbGVuOworCisJc2ZiLT5mYi5zY3JlZW5fYmFzZSA9IHNtdGNfVlJBTUJhc2VBZGRyZXNzOworCisJaWYgKCFzZmItPmZiLnNjcmVlbl9iYXNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmFibGUgdG8gbWFwIHNjcmVlbiBtZW1vcnlcbiIsCisJCQkJc2ZiLT5mYi5maXguaWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVubWFwIGluIHRoZSBzY3JlZW4gbWVtb3J5CisgKgorICovCitzdGF0aWMgdm9pZCBzbXRjX3VubWFwX3NtZW0oc3RydWN0IHNtdGNmYl9pbmZvICpzZmIpCit7CisJaWYgKHNmYiAmJiBzZmItPmZiLnNjcmVlbl9iYXNlKSB7CisJCWlvdW5tYXAoc2ZiLT5mYi5zY3JlZW5fYmFzZSk7CisJCXNmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBOVUxMOworCX0KK30KKworLyoKKyAqIFdlIG5lZWQgdG8gd2FrZSB1cCB0aGUgTHlueEVNKywgYW5kIG1ha2Ugc3VyZSBpdHMgaW4gbGluZWFyIG1lbW9yeSBtb2RlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc203eHhfaW5pdF9odyh2b2lkKQoreworCW91dGJfcCgweDE4LCAweDNjNCk7CisJb3V0Yl9wKDB4MTEsIDB4M2M1KTsKK30KKworc3RhdGljIHZvaWQgc210Y19mcmVlX2ZiX2luZm8oc3RydWN0IHNtdGNmYl9pbmZvICpzZmIpCit7CisJaWYgKHNmYikgeworCQlmYl9hbGxvY19jbWFwKCZzZmItPmZiLmNtYXAsIDAsIDApOworCQlrZnJlZShzZmIpOworCX0KK30KKworLyoKKyAqCXNtNzEydmdhX3NldHVwIC0gcHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucywgZ2V0IHZnYSBwYXJhbWV0ZXIKKyAqCUBvcHRpb25zOiBzdHJpbmcgb2Ygb3B0aW9ucworICoJUmV0dXJucyB6ZXJvLgorICoKKyAqLworc3RhdGljIGludCBfX2luaXQgX19tYXliZV91bnVzZWQgc203MTJ2Z2Ffc2V0dXAoY2hhciAqb3B0aW9ucykKK3sKKwlpbnQgaW5kZXg7CisKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKSB7CisJCXNtZGJnKCJcbiBObyB2Z2EgcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc210Y19zY3JlZW5faW5mby5sZmJfd2lkdGggPSAwOworCXNtdGNfc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IDA7CisJc210Y19zY3JlZW5faW5mby5sZmJfZGVwdGggPSAwOworCisJc21kYmcoIlxuc203MTJ2Z2Ffc2V0dXAgPSAlc1xuIiwgb3B0aW9ucyk7CisKKwlmb3IgKGluZGV4ID0gMDsKKwkgICAgIGluZGV4IDwgKHNpemVvZih2ZXNhX21vZGUpIC8gc2l6ZW9mKHN0cnVjdCB2ZXNhX21vZGVfdGFibGUpKTsKKwkgICAgIGluZGV4KyspIHsKKwkJaWYgKHN0cnN0cihvcHRpb25zLCB2ZXNhX21vZGVbaW5kZXhdLm1vZGVfaW5kZXgpKSB7CisJCQlzbXRjX3NjcmVlbl9pbmZvLmxmYl93aWR0aCA9IHZlc2FfbW9kZVtpbmRleF0ubGZiX3dpZHRoOworCQkJc210Y19zY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0KKwkJCQkJdmVzYV9tb2RlW2luZGV4XS5sZmJfaGVpZ2h0OworCQkJc210Y19zY3JlZW5faW5mby5sZmJfZGVwdGggPSB2ZXNhX21vZGVbaW5kZXhdLmxmYl9kZXB0aDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorX19zZXR1cCgidmdhPSIsIHNtNzEydmdhX3NldHVwKTsKKworLyogSmFzb24gKDA4LzEzLzIwMDkpCisgKiBPcmlnaW5hbCBpbml0IGZ1bmN0aW9uIGNoYW5nZWQgdG8gcHJvYmUgbWV0aG9kIHRvIGJlIHVzZWQgYnkgcGNpX2RydgorICogcHJvY2VzcyB1c2VkIHRvIGRldGVjdCBjaGlwcyByZXBsYWNlZCB3aXRoIGtlcm5lbCBwcm9jZXNzIGluIHBjaV9kcnYKKyAqLworc3RhdGljIGludCBfX2luaXQgc210Y2ZiX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiOworCXVfbG9uZyBzbWVtX3NpemUgPSAweDAwODAwMDAwOwkvKiBkZWZhdWx0IDhNQiAqLworCWNoYXIgbmFtZVsxNl07CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIHBGcmFtZWJ1ZmZlclBoeXNpY2FsOworCisJcHJpbnRrKEtFUk5fSU5GTworCQkiU2lsaWNvbiBNb3Rpb24gZGlzcGxheSBkcml2ZXIgIiBTTVRDX0xJTlVYX0ZCX1ZFUlNJT04gIlxuIik7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsJLyogZW5hYmxlIFNNVEMgY2hpcCAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSAtRU5PTUVNOworCisJaHcuY2hpcElEID0gZW50LT5kZXZpY2U7CisJc3ByaW50ZihuYW1lLCAic20lWGZiIiwgaHcuY2hpcElEKTsKKworCXNmYiA9IHNtdGNfYWxsb2NfZmJfaW5mbyhwZGV2LCBuYW1lKTsKKworCWlmICghc2ZiKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBKYXNvbiAoMDgvMTMvMjAwOSkKKwkgKiBTdG9yZSBmYl9pbmZvIHRvIGJlIGZ1cnRoZXIgdXNlZCB3aGVuIHN1c3BlbmRpbmcgYW5kIHJlc3VtaW5nCisJICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHNmYik7CisKKwlzbTd4eF9pbml0X2h3KCk7CisKKwkvKmdldCBtb2RlIHBhcmFtZXRlciBmcm9tIHNtdGNfc2NyZWVuX2luZm8gKi8KKwlpZiAoc210Y19zY3JlZW5faW5mby5sZmJfd2lkdGggIT0gMCkgeworCQlzZmItPmZiLnZhci54cmVzID0gc210Y19zY3JlZW5faW5mby5sZmJfd2lkdGg7CisJCXNmYi0+ZmIudmFyLnlyZXMgPSBzbXRjX3NjcmVlbl9pbmZvLmxmYl9oZWlnaHQ7CisJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gc210Y19zY3JlZW5faW5mby5sZmJfZGVwdGg7CisJfSBlbHNlIHsKKwkJLyogZGVmYXVsdCByZXNvbHV0aW9uIDEwMjR4NjAwIDE2Yml0IG1vZGUgKi8KKwkJc2ZiLT5mYi52YXIueHJlcyA9IFNDUkVFTl9YX1JFUzsKKwkJc2ZiLT5mYi52YXIueXJlcyA9IFNDUkVFTl9ZX1JFUzsKKwkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPSBTQ1JFRU5fQlBQOworCX0KKworI2lmZGVmIF9fQklHX0VORElBTgorCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAyNCkKKwkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPSAoc210Y19zY3JlZW5faW5mby5sZmJfZGVwdGggPSAzMik7CisjZW5kaWYKKwkvKiBNYXAgYWRkcmVzcyBhbmQgbWVtb3J5IGRldGVjdGlvbiAqLworCXBGcmFtZWJ1ZmZlclBoeXNpY2FsID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJmh3LmNoaXBSZXZJRCk7CisKKwlzd2l0Y2ggKGh3LmNoaXBJRCkgeworCWNhc2UgMHg3MTA6CisJY2FzZSAweDcxMjoKKwkJc2ZiLT5mYi5maXgubW1pb19zdGFydCA9IHBGcmFtZWJ1ZmZlclBoeXNpY2FsICsgMHgwMDQwMDAwMDsKKwkJc2ZiLT5mYi5maXgubW1pb19sZW4gPSAweDAwNDAwMDAwOworCQlzbWVtX3NpemUgPSBTTTcxMl9WSURFT01FTU9SWVNJWkU7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWh3Lm1fcExGQiA9IChzbXRjX1ZSQU1CYXNlQWRkcmVzcyA9CisJCSAgICBpb3JlbWFwKHBGcmFtZWJ1ZmZlclBoeXNpY2FsLCAweDAwYzAwMDAwKSk7CisjZWxzZQorCQlody5tX3BMRkIgPSAoc210Y19WUkFNQmFzZUFkZHJlc3MgPQorCQkgICAgaW9yZW1hcChwRnJhbWVidWZmZXJQaHlzaWNhbCwgMHgwMDgwMDAwMCkpOworI2VuZGlmCisJCWh3Lm1fcE1NSU8gPSAoc210Y19SZWdCYXNlQWRkcmVzcyA9CisJCSAgICBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIDB4MDA3MDAwMDApOworCQlzbXRjXzJEQmFzZUFkZHJlc3MgPSAoaHcubV9wRFBSID0KKwkJICAgIHNtdGNfVlJBTUJhc2VBZGRyZXNzICsgMHgwMDQwODAwMCk7CisJCXNtdGNfMkRkYXRhcG9ydCA9IHNtdGNfVlJBTUJhc2VBZGRyZXNzICsgREVfREFUQV9QT1JUXzcxMjsKKwkJaHcubV9wVlBSID0gaHcubV9wTEZCICsgMHgwMDQwYzAwMDsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKSB7CisJCQlzbXRjX1ZSQU1CYXNlQWRkcmVzcyArPSAweDgwMDAwMDsKKwkJCWh3Lm1fcExGQiArPSAweDgwMDAwMDsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkiXG5zbXRjX1ZSQU1CYXNlQWRkcmVzcz0lcCBody5tX3BMRkI9JXBcbiIsCisJCQkJCXNtdGNfVlJBTUJhc2VBZGRyZXNzLCBody5tX3BMRkIpOworCQl9CisjZW5kaWYKKwkJaWYgKCFzbXRjX1JlZ0Jhc2VBZGRyZXNzKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJIiVzOiB1bmFibGUgdG8gbWFwIG1lbW9yeSBtYXBwZWQgSU9cbiIsCisJCQkJc2ZiLT5mYi5maXguaWQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQkvKiBzZXQgTUNMSyA9IDE0LjMxODE4ICogKDB4MTYgLyAweDIpICovCisJCXNtdGNfc2VxdygweDZhLCAweDE2KTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHg2MiwgMHgzZSk7CisJCS8qIGVuYWJsZSBQQ0kgYnVyc3QgKi8KKwkJc210Y19zZXF3KDB4MTcsIDB4MjApOworCQkvKiBlbmFibGUgd29yZCBzd2FwICovCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAzMikKKwkJCXNtdGNfc2VxdygweDE3LCAweDMwKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19GQl9TTTdYWF9BQ0NFTAorCQlzbXRjXzJEYWNjZWxlcmF0aW9uID0gMTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIDB4NzIwOgorCQlzZmItPmZiLmZpeC5tbWlvX3N0YXJ0ID0gcEZyYW1lYnVmZmVyUGh5c2ljYWw7CisJCXNmYi0+ZmIuZml4Lm1taW9fbGVuID0gMHgwMDIwMDAwMDsKKwkJc21lbV9zaXplID0gU003MjJfVklERU9NRU1PUllTSVpFOworCQlzbXRjXzJEQmFzZUFkZHJlc3MgPSAoaHcubV9wRFBSID0KKwkJICAgIGlvcmVtYXAocEZyYW1lYnVmZmVyUGh5c2ljYWwsIDB4MDBhMDAwMDApKTsKKwkJaHcubV9wTEZCID0gKHNtdGNfVlJBTUJhc2VBZGRyZXNzID0KKwkJICAgIHNtdGNfMkRCYXNlQWRkcmVzcyArIDB4MDAyMDAwMDApOworCQlody5tX3BNTUlPID0gKHNtdGNfUmVnQmFzZUFkZHJlc3MgPQorCQkgICAgc210Y18yREJhc2VBZGRyZXNzICsgMHgwMDBjMDAwMCk7CisJCXNtdGNfMkRkYXRhcG9ydCA9IHNtdGNfMkRCYXNlQWRkcmVzcyArIERFX0RBVEFfUE9SVF83MjI7CisJCWh3Lm1fcFZQUiA9IHNtdGNfMkRCYXNlQWRkcmVzcyArIDB4ODAwOworCisJCXNtdGNfc2VxdygweDYyLCAweGZmKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MGQpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfMkRhY2NlbGVyYXRpb24gPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPCisJCSJObyB2YWxpZCBTaWxpY29uIE1vdGlvbiBkaXNwbGF5IGNoaXAgd2FzIGRldGVjdGVkIVxuIik7CisKKwkJc210Y19mcmVlX2ZiX2luZm8oc2ZiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBjYW4gc3VwcG9ydCAzMiBicHAgKi8KKwlpZiAoMTUgPT0gc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpCisJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gMTY7CisKKwlzZmItPmZiLnZhci54cmVzX3ZpcnR1YWwgPSBzZmItPmZiLnZhci54cmVzOworCXNmYi0+ZmIudmFyLnlyZXNfdmlydHVhbCA9IHNmYi0+ZmIudmFyLnlyZXM7CisJZXJyID0gc210Y19tYXBfc21lbShzZmIsIHBkZXYsIHNtZW1fc2l6ZSk7CisJaWYgKGVycikKKwkJZ290byBmYWlsZWQ7CisKKwlzbXRjZmJfc2V0bW9kZShzZmIpOworCS8qIFByaW1hcnkgZGlzcGxheSBzdGFydGluZyBmcm9tIDAgcG9zdGlvbiAqLworCWh3LkJhc2VBZGRyZXNzSW5WUkFNID0gMDsKKwlzZmItPmZiLnBhciA9ICZodzsKKworCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZzZmItPmZiKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJTaWxpY29uIE1vdGlvbiBTTSVYIFJldiVYIHByaW1hcnkgZGlzcGxheSBtb2RlIgorCQkJIiVkeCVkLSVkIEluaXQgQ29tcGxldGUuXG4iLCBody5jaGlwSUQsIGh3LmNoaXBSZXZJRCwKKwkJCXNmYi0+ZmIudmFyLnhyZXMsIHNmYi0+ZmIudmFyLnlyZXMsCisJCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCk7CisKKwlyZXR1cm4gMDsKKworIGZhaWxlZDoKKwlwcmludGsoS0VSTl9JTkZPICJTaWxpY29uIE1vdGlvbiwgSW5jLiAgcHJpbWFyeSBkaXNwbGF5IGluaXQgZmFpbFxuIik7CisKKwlzbXRjX3VubWFwX3NtZW0oc2ZiKTsKKwlzbXRjX3VubWFwX21taW8oc2ZiKTsKKwlzbXRjX2ZyZWVfZmJfaW5mbyhzZmIpOworCisJcmV0dXJuIGVycjsKK30KKworCisvKiBKYXNvbiAoMDgvMTEvMjAwOSkgUENJX0RSViB3cmFwcGVyIGVzc2VudGlhbCBzdHJ1Y3RzICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc210Y2ZiX3BjaV90YWJsZVtdID0geworCXsweDEyNmYsIDB4NzEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxMjZmLCAweDcxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTI2ZiwgMHg3MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswLH0KK307CisKKworLyogSmFzb24gKDA4LzE0LzIwMDkpCisgKiBkbyBzb21lIGNsZWFuIHVwIHdoZW4gdGhlIGRyaXZlciBtb2R1bGUgaXMgcmVtb3ZlZAorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc210Y2ZiX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CisKKwlzZmIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXNtdGNfdW5tYXBfc21lbShzZmIpOworCXNtdGNfdW5tYXBfbW1pbyhzZmIpOworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJnNmYi0+ZmIpOworCXNtdGNfZnJlZV9mYl9pbmZvKHNmYik7Cit9CisKKy8qIEphc29uICgwOC8xNC8yMDA5KQorICogc3VzcGVuZCBmdW5jdGlvbiwgY2FsbGVkIHdoZW4gdGhlIHN1c3BlbmQgZXZlbnQgaXMgdHJpZ2dlcmVkCisgKi8KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc210Y2ZiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CisJaW50IHJldHY7CisKKwlzZmIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBzZXQgdGhlIGh3IGluIHNsZWVwIG1vZGUgdXNlIGV4dGVybmVsIGNsb2NrIGFuZCBzZWxmIG1lbW9yeSByZWZyZXNoCisJICogc28gdGhhdCB3ZSBjYW4gdHVybiBvZmYgaW50ZXJuYWwgUExMcyBsYXRlciBvbgorCSAqLworCXNtdGNfc2VxdygweDIwLCAoc210Y19zZXFyKDB4MjApIHwgMHhjMCkpOworCXNtdGNfc2VxdygweDY5LCAoc210Y19zZXFyKDB4NjkpICYgMHhmNykpOworCisJc3dpdGNoIChtc2cuZXZlbnQpIHsKKwljYXNlIFBNX0VWRU5UX0ZSRUVaRToKKwljYXNlIFBNX0VWRU5UX1BSRVRIQVc6CisJCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1zZzsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogd2hlbiBkb2luZyBzdXNwZW5kLCBjYWxsIGZiIGFwaXMgYW5kIHBjaSBhcGlzICovCisJaWYgKG1zZy5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7CisJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJZmJfc2V0X3N1c3BlbmQoJnNmYi0+ZmIsIDEpOworCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCXJldHYgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlyZXR2ID0gcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBtc2cpOworCQlyZXR2ID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCByZXR2KTsKKwl9CisKKwlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtc2c7CisKKwkvKiBhZGRpdGlvbmFseSB0dXJuIG9mZiBhbGwgZnVuY3Rpb24gYmxvY2tzIGluY2x1ZGluZyBpbnRlcm5hbCBQTExzICovCisJc210Y19zZXF3KDB4MjEsIDB4ZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgc210Y2ZiX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKKwlpbnQgcmV0djsKKworCXNmYiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIHdoZW4gcmVzdW1pbmcsIHJlc3RvcmUgcGNpIGRhdGEgYW5kIGZiIGN1cnNvciAqLworCWlmIChwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCXJldHYgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJCXJldHYgPSBwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQorCQkJcmV0dXJuIC0xOworCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwl9CisKKwkvKiByZWluaXQgaGFyZHdhcmUgKi8KKwlzbTd4eF9pbml0X2h3KCk7CisJc3dpdGNoIChody5jaGlwSUQpIHsKKwljYXNlIDB4NzEwOgorCWNhc2UgMHg3MTI6CisJCS8qIHNldCBNQ0xLID0gMTQuMzE4MTggKiAgKDB4MTYgLyAweDIpICovCisJCXNtdGNfc2VxdygweDZhLCAweDE2KTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHg2MiwgMHgzZSk7CisJCS8qIGVuYWJsZSBQQ0kgYnVyc3QgKi8KKwkJc210Y19zZXF3KDB4MTcsIDB4MjApOworI2lmZGVmIF9fQklHX0VORElBTgorCQlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpCisJCQlzbXRjX3NlcXcoMHgxNywgMHgzMCk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAweDcyMDoKKwkJc210Y19zZXF3KDB4NjIsIDB4ZmYpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgwZCk7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJYnJlYWs7CisJfQorCisJc210Y19zZXF3KDB4MzQsIChzbXRjX3NlcXIoMHgzNCkgfCAweGMwKSk7CisJc210Y19zZXF3KDB4MzMsICgoc210Y19zZXFyKDB4MzMpIHwgMHgwOCkgJiAweGZiKSk7CisKKwlzbXRjZmJfc2V0bW9kZShzZmIpOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWZiX3NldF9zdXNwZW5kKCZzZmItPmZiLCAwKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogSmFzb24gKDA4LzEzLzIwMDkpCisgKiBwY2lfZHJpdmVyIHN0cnVjdCB1c2VkIHRvIHdyYXAgdGhlIG9yaWdpbmFsIGRyaXZlcgorICogc28gdGhhdCBpdCBjYW4gYmUgcmVnaXN0ZXJlZCBpbnRvIHRoZSBrZXJuZWwgYW5kCisgKiB0aGUgcHJvcGVyIG1ldGhvZCB3b3VsZCBiZSBjYWxsZWQgd2hlbiBzdXNwZW5kaW5nIGFuZCByZXN1bWluZworICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc210Y2ZiX2RyaXZlciA9IHsKKwkubmFtZSA9ICJzbXRjZmIiLAorCS5pZF90YWJsZSA9IHNtdGNmYl9wY2lfdGFibGUsCisJLnByb2JlID0gc210Y2ZiX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc210Y2ZiX3BjaV9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc210Y2ZiX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNtdGNmYl9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNtdGNmYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNtdGNmYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc210Y2ZiX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNtdGNmYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzbXRjZmJfaW5pdCk7Cittb2R1bGVfZXhpdChzbXRjZmJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNpbGljb25tb3Rpb24gIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyYW1lYnVmZmVyIGRyaXZlciBmb3IgU01JIEdyYXBoaWMgQ2FyZHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJjMzQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCkBAIC0wLDAgKzEsNzkzIEBACisvKgorICogU2lsaWNvbiBNb3Rpb24gU003MTIgZnJhbWUgYnVmZmVyIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaWxpY29uIE1vdGlvbiBUZWNobm9sb2d5IENvcnAuCisgKiBBdXRob3JzOglHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KKyAqCSAJQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgU01UQ19MSU5VWF9GQl9WRVJTSU9OCSJ2ZXJzaW9uIDAuMTEuMjYxOS4yMS4wMSBKdWx5IDI3LCAyMDA4IgorCisjZGVmaW5lIE5SX1BBTEVUVEUgICAgICAgIDI1NgorI2RlZmluZSBOUl9SR0IgICAgICAgICAgICAyCisKKyNkZWZpbmUgRkJfQUNDRUxfU01JX0xZTlggODgKKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBQQ19WR0EgICAgICAgICAgICAwCisjZWxzZQorI2RlZmluZSBQQ19WR0EgICAgICAgICAgICAxCisjZW5kaWYKKworI2RlZmluZSBTQ1JFRU5fWF9SRVMgICAgICAxMDI0CisjZGVmaW5lIFNDUkVFTl9ZX1JFUyAgICAgIDYwMAorI2RlZmluZSBTQ1JFRU5fQlBQICAgICAgICAxNgorCisjaWZuZGVmIEZJRUxEX09GRlNFVAorI2RlZmluZSBGSUVMRF9PRlNGRVQodHlwZSwgZmllbGQpIFwKKwkoKHVuc2lnbmVkIGxvbmcpIChQVUNIQVIpICYgKCgodHlwZSAqKTApLT5maWVsZCkpCisjZW5kaWYKKworLypBc3N1bWUgU003MTIgZ3JhcGhpY3MgY2hpcCBoYXMgNE1CIFZSQU0gKi8KKyNkZWZpbmUgU003MTJfVklERU9NRU1PUllTSVpFCSAgMHgwMDQwMDAwMAorLypBc3N1bWUgU003MjIgZ3JhcGhpY3MgY2hpcCBoYXMgOE1CIFZSQU0gKi8KKyNkZWZpbmUgU003MjJfVklERU9NRU1PUllTSVpFCSAgMHgwMDgwMDAwMAorCisjZGVmaW5lIGRhY19yZWcJKDB4M2M4KQorI2RlZmluZSBkYWNfdmFsCSgweDNjOSkKKworZXh0ZXJuIGNoYXIgKnNtdGNfUmVnQmFzZUFkZHJlc3M7CisjZGVmaW5lIHNtdGNfbW1pb3diKGRhdCwgcmVnKQl3cml0ZWIoZGF0LCBzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorI2RlZmluZSBzbXRjX21taW93dyhkYXQsIHJlZykJd3JpdGV3KGRhdCwgc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKyNkZWZpbmUgc210Y19tbWlvd2woZGF0LCByZWcpCXdyaXRlbChkYXQsIHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisKKyNkZWZpbmUgc210Y19tbWlvcmIocmVnKQlyZWFkYihzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorI2RlZmluZSBzbXRjX21taW9ydyhyZWcpCXJlYWR3KHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisjZGVmaW5lIHNtdGNfbW1pb3JsKHJlZykJcmVhZGwoc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKworI2RlZmluZSBTSVpFX1NSMDBfU1IwNCAgICAgICgweDA0IC0gMHgwMCArIDEpCisjZGVmaW5lIFNJWkVfU1IxMF9TUjI0ICAgICAgKDB4MjQgLSAweDEwICsgMSkKKyNkZWZpbmUgU0laRV9TUjMwX1NSNzUgICAgICAoMHg3NSAtIDB4MzAgKyAxKQorI2RlZmluZSBTSVpFX1NSODBfU1I5MyAgICAgICgweDkzIC0gMHg4MCArIDEpCisjZGVmaW5lIFNJWkVfU1JBMF9TUkFGICAgICAgKDB4QUYgLSAweEEwICsgMSkKKyNkZWZpbmUgU0laRV9HUjAwX0dSMDggICAgICAoMHgwOCAtIDB4MDAgKyAxKQorI2RlZmluZSBTSVpFX0FSMDBfQVIxNCAgICAgICgweDE0IC0gMHgwMCArIDEpCisjZGVmaW5lIFNJWkVfQ1IwMF9DUjE4ICAgICAgKDB4MTggLSAweDAwICsgMSkKKyNkZWZpbmUgU0laRV9DUjMwX0NSNEQgICAgICAoMHg0RCAtIDB4MzAgKyAxKQorI2RlZmluZSBTSVpFX0NSOTBfQ1JBNyAgICAgICgweEE3IC0gMHg5MCArIDEpCisjZGVmaW5lIFNJWkVfVlBSCQkoMHg2QyArIDEpCisjZGVmaW5lIFNJWkVfRFBSCQkoMHg0NCArIDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2NydGN3KGludCByZWcsIGludCB2YWwpCit7CisJc210Y19tbWlvd2IocmVnLCAweDNkNCk7CisJc210Y19tbWlvd2IodmFsLCAweDNkNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNtdGNfY3J0Y3IoaW50IHJlZykKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2Q0KTsKKwlyZXR1cm4gc210Y19tbWlvcmIoMHgzZDUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc210Y19ncnBodyhpbnQgcmVnLCBpbnQgdmFsKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzY2UpOworCXNtdGNfbW1pb3diKHZhbCwgMHgzY2YpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbXRjX2dycGhyKGludCByZWcpCit7CisJc210Y19tbWlvd2IocmVnLCAweDNjZSk7CisJcmV0dXJuIHNtdGNfbW1pb3JiKDB4M2NmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfYXR0cncoaW50IHJlZywgaW50IHZhbCkKK3sKKwlzbXRjX21taW9yYigweDNkYSk7CisJc210Y19tbWlvd2IocmVnLCAweDNjMCk7CisJc210Y19tbWlvcmIoMHgzYzEpOworCXNtdGNfbW1pb3diKHZhbCwgMHgzYzApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc210Y19zZXF3KGludCByZWcsIGludCB2YWwpCit7CisJc210Y19tbWlvd2IocmVnLCAweDNjNCk7CisJc210Y19tbWlvd2IodmFsLCAweDNjNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNtdGNfc2VxcihpbnQgcmVnKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzYzQpOworCXJldHVybiBzbXRjX21taW9yYigweDNjNSk7Cit9CisKKy8qIFRoZSBuZXh0IHN0cnVjdHVyZSBob2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsZXZhbnQgZm9yIGEgc3BlY2lmaWMgdmlkZW8gbW9kZS4KKyAqLworCitzdHJ1Y3QgTW9kZUluaXQgeworCWludCBtbVNpemVYOworCWludCBtbVNpemVZOworCWludCBicHA7CisJaW50IGh6OworCXVuc2lnbmVkIGNoYXIgSW5pdF9NSVNDOworCXVuc2lnbmVkIGNoYXIgSW5pdF9TUjAwX1NSMDRbU0laRV9TUjAwX1NSMDRdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9TUjEwX1NSMjRbU0laRV9TUjEwX1NSMjRdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9TUjMwX1NSNzVbU0laRV9TUjMwX1NSNzVdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9TUjgwX1NSOTNbU0laRV9TUjgwX1NSOTNdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9TUkEwX1NSQUZbU0laRV9TUkEwX1NSQUZdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9HUjAwX0dSMDhbU0laRV9HUjAwX0dSMDhdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9BUjAwX0FSMTRbU0laRV9BUjAwX0FSMTRdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9DUjAwX0NSMThbU0laRV9DUjAwX0NSMThdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9DUjMwX0NSNERbU0laRV9DUjMwX0NSNERdOworCXVuc2lnbmVkIGNoYXIgSW5pdF9DUjkwX0NSQTdbU0laRV9DUjkwX0NSQTddOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCSBTTTcxMiBNb2RlIHRhYmxlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgTW9kZUluaXQgVkdBTW9kZVtdID0geworCXsKKwkgLyogIG1vZGUjMDogNjQwIHggNDgwICAxNkJwcCAgNjBIeiAqLworCSA2NDAsIDQ4MCwgMTYsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RTMsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAwLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRiwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzMiwgMHgwMywgMHhBMCwgMHgwOSwgMHhDMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MDQsIDB4MjQsIDB4NjMsIDB4NEYsIDB4NTIsIDB4MEIsIDB4REYsIDB4RUEsCisJICAweDA0LCAweDUwLCAweDE5LCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDMyLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MDcsIDB4ODIsIDB4MDcsIDB4MDQsCisJICAweDAwLCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDMwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgzMiwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RUYsIDB4RkYsIDB4MzIsIDB4MzIsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4RkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4NUYsIDB4NEYsIDB4NEYsIDB4MDAsIDB4NTMsIDB4MUYsIDB4MEIsIDB4M0UsCisJICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHhERiwgMHg1MCwgMHg0MCwgMHhERiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhGRiwgMHhGRCwKKwkgIDB4NUYsIDB4NEYsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MEIsIDB4REYsIDB4MDAsCisJICAweEVBLCAweDBDLCAweDJFLCAweDAwLCAweDRGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHhERCwgMHg1RSwgMHhFQSwgMHg4NywgMHg0NCwgMHg4RiwgMHg1NSwKKwkgIDB4MEEsIDB4OEYsIDB4NTUsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDExLCAweDEwLCAweDBCLCAweDBBLCAweDBBLCAweDBBLCAweDBBLCAweDAwLAorCSAgfSwKKwkgfSwKKwl7CisJIC8qICBtb2RlIzE6IDY0MCB4IDQ4MCAgMjRCcHAgIDYwSHogKi8KKwkgNjQwLCA0ODAsIDI0LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEUzLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMCwgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RkYsIDB4QkUsIDB4RUYsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzIsIDB4MDMsIDB4QTAsIDB4MDksIDB4QzAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDA0LCAweDI0LCAweDYzLCAweDRGLCAweDUyLCAweDBCLCAweERGLCAweEVBLAorCSAgMHgwNCwgMHg1MCwgMHgxOSwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDA3LCAweDgyLCAweDA3LCAweDA0LAorCSAgMHgwMCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgzMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4NkYsIDB4N0YsIDB4N0YsIDB4RkYsIDB4MzIsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEVGLCAweEZGLCAweDMyLCAweDMyLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEVGLCAweEZGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweDVGLCAweDRGLCAweDRGLCAweDAwLCAweDUzLCAweDFGLCAweDBCLCAweDNFLAorCSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4REYsIDB4NTAsIDB4NDAsIDB4REYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMywgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RTcsIDB4RkYsIDB4RkQsCisJICAweDVGLCAweDRGLCAweDAwLCAweDU0LCAweDAwLCAweDBCLCAweERGLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHgyRSwgMHgwMCwgMHg0RiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTYsIDB4REQsIDB4NUUsIDB4RUEsIDB4ODcsIDB4NDQsIDB4OEYsIDB4NTUsCisJICAweDBBLCAweDhGLCAweDU1LCAweDBBLCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgxMSwgMHgxMCwgMHgwQiwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwMCwKKwkgIH0sCisJIH0sCisJeworCSAvKiAgbW9kZSMwOiA2NDAgeCA0ODAgIDMyQnBwICA2MEh6ICovCisJIDY0MCwgNDgwLCAzMiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFMywKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVGLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDMyLCAweDAzLCAweEEwLCAweDA5LCAweEMwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgwNCwgMHgyNCwgMHg2MywgMHg0RiwgMHg1MiwgMHgwQiwgMHhERiwgMHhFQSwKKwkgIDB4MDQsIDB4NTAsIDB4MTksIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzIsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgwNywgMHg4MiwgMHgwNywgMHgwNCwKKwkgIDB4MDAsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MzAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDMyLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhFRiwgMHhGRiwgMHgzMiwgMHgzMiwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhGRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg1RiwgMHg0RiwgMHg0RiwgMHgwMCwgMHg1MywgMHgxRiwgMHgwQiwgMHgzRSwKKwkgIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEVBLCAweDBDLCAweERGLCAweDUwLCAweDQwLCAweERGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEZGLCAweEZELAorCSAgMHg1RiwgMHg0RiwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwQiwgMHhERiwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4MkUsIDB4MDAsIDB4NEYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweERELCAweDVFLCAweEVBLCAweDg3LCAweDQ0LCAweDhGLCAweDU1LAorCSAgMHgwQSwgMHg4RiwgMHg1NSwgMHgwQSwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MTEsIDB4MTAsIDB4MEIsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MDAsCisJICB9LAorCSB9LAorCisJewkJCS8qICBtb2RlIzI6IDgwMCB4IDYwMCAgMTZCcHAgIDYwSHogKi8KKwkgODAwLCA2MDAsIDE2LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweDJCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RkYsIDB4QkUsIDB4RUUsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzQsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MjQsIDB4MjQsCisJICAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgzOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MjQsIDB4MjQsIDB4MjQsCisJICAweDA0LCAweDQ4LCAweDgzLCAweDYzLCAweDY4LCAweDcyLCAweDU3LCAweDU4LAorCSAgMHgwNCwgMHg1NSwgMHg1OSwgMHgyNCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgyNCwKKwkgIDB4MDEsIDB4ODAsIDB4N0EsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDFDLCAweDg1LCAweDM1LCAweDEzLAorCSAgMHgwMiwgMHg0NSwgMHgzMCwgMHgzNSwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NkYsIDB4N0YsIDB4N0YsIDB4RkYsIDB4MjQsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDI0LCAweDI0LAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweDdGLCAweDYzLCAweDYzLCAweDAwLCAweDY4LCAweDE4LCAweDcyLCAweEYwLAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTgsIDB4MEMsIDB4NTcsIDB4NjQsIDB4NDAsIDB4NTcsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMywgMHgwMywgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RTcsIDB4QkYsIDB4RkQsCisJICAweDdGLCAweDYzLCAweDAwLCAweDY5LCAweDE4LCAweDcyLCAweDU3LCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHhFMCwgMHgyMCwgMHg2MywgMHg1NywKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTYsIDB4NEIsIDB4NUUsIDB4NTUsIDB4ODYsIDB4OUQsIDB4OEUsIDB4QUEsCisJICAweERCLCAweDJBLCAweERGLCAweDMzLCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgyMCwgMHgxRiwgMHgxQSwgMHgxOSwgMHgwRiwgMHgwRiwgMHgwRiwgMHgwMCwKKwkgIH0sCisJIH0sCisJewkJCS8qICBtb2RlIzM6IDgwMCB4IDYwMCAgMjRCcHAgIDYwSHogKi8KKwkgODAwLCA2MDAsIDI0LCA2MCwKKwkgMHgyQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVFLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM2LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDM2LCAweDM2LCAweDM2LAorCSAgMHgzNiwgMHgzNiwgMHgzNiwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDM2LCAweDM2LCAweDM2LAorCSAgMHgwNCwgMHg0OCwgMHg4MywgMHg2MywgMHg2OCwgMHg3MiwgMHg1NywgMHg1OCwKKwkgIDB4MDQsIDB4NTUsIDB4NTksIDB4MzYsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MzYsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgxQywgMHg4NSwgMHgzNSwgMHgxMywKKwkgIDB4MDIsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDM2LAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhFRiwgMHhGRiwgMHgzNiwgMHgzNiwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg3RiwgMHg2MywgMHg2MywgMHgwMCwgMHg2OCwgMHgxOCwgMHg3MiwgMHhGMCwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDU4LCAweDBDLCAweDU3LCAweDY0LCAweDQwLCAweDU3LCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEJGLCAweEZELAorCSAgMHg3RiwgMHg2MywgMHgwMCwgMHg2OSwgMHgxOCwgMHg3MiwgMHg1NywgMHgwMCwKKwkgIDB4NTgsIDB4MEMsIDB4RTAsIDB4MjAsIDB4NjMsIDB4NTcsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweDRCLCAweDVFLCAweDU1LCAweDg2LCAweDlELCAweDhFLCAweEFBLAorCSAgMHhEQiwgMHgyQSwgMHhERiwgMHgzMywgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MjAsIDB4MUYsIDB4MUEsIDB4MTksIDB4MEYsIDB4MEYsIDB4MEYsIDB4MDAsCisJICB9LAorCSB9LAorCXsJCQkvKiAgbW9kZSM3OiA4MDAgeCA2MDAgIDMyQnBwICA2MEh6ICovCisJIDgwMCwgNjAwLCAzMiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHgyQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVFLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM0LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDI0LCAweDI0LCAweDI0LAorCSAgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MzgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDI0LCAweDI0LCAweDI0LAorCSAgMHgwNCwgMHg0OCwgMHg4MywgMHg2MywgMHg2OCwgMHg3MiwgMHg1NywgMHg1OCwKKwkgIDB4MDQsIDB4NTUsIDB4NTksIDB4MjQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjQsCisJICAweDAxLCAweDgwLCAweDdBLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgxQywgMHg4NSwgMHgzNSwgMHgxMywKKwkgIDB4MDIsIDB4NDUsIDB4MzAsIDB4MzUsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDI0LAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgyNCwgMHgyNCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg3RiwgMHg2MywgMHg2MywgMHgwMCwgMHg2OCwgMHgxOCwgMHg3MiwgMHhGMCwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDU4LCAweDBDLCAweDU3LCAweDY0LCAweDQwLCAweDU3LCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEJGLCAweEZELAorCSAgMHg3RiwgMHg2MywgMHgwMCwgMHg2OSwgMHgxOCwgMHg3MiwgMHg1NywgMHgwMCwKKwkgIDB4NTgsIDB4MEMsIDB4RTAsIDB4MjAsIDB4NjMsIDB4NTcsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweDRCLCAweDVFLCAweDU1LCAweDg2LCAweDlELCAweDhFLCAweEFBLAorCSAgMHhEQiwgMHgyQSwgMHhERiwgMHgzMywgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MjAsIDB4MUYsIDB4MUEsIDB4MTksIDB4MEYsIDB4MEYsIDB4MEYsIDB4MDAsCisJICB9LAorCSB9LAorCS8qIFdlIHVzZSAxMDI0eDc2OCB0YWJsZSB0byBsaWdodCAxMDI0eDYwMCBwYW5lbCBmb3IgbGVtb3RlICovCisJewkJCS8qICBtb2RlIzQ6IDEwMjQgeCA2MDAgIDE2QnBwICA2MEh6ICAqLworCSAxMDI0LCA2MDAsIDE2LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEVCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMCwgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4QzgsIDB4NDAsIDB4MTQsIDB4NjAsIDB4MDAsIDB4MEEsIDB4MTcsIDB4MjAsCisJICAweDUxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMCwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MjIsIDB4MDMsIDB4MjQsIDB4MDksIDB4QzAsIDB4MjIsIDB4MjIsIDB4MjIsCisJICAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MjIsCisJICAweDA2LCAweDY4LCAweEE3LCAweDdGLCAweDgzLCAweDI0LCAweEZGLCAweDAzLAorCSAgMHgwMCwgMHg2MCwgMHg1OSwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgyMiwKKwkgIDB4MDEsIDB4ODAsIDB4N0EsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDE2LCAweDAyLCAweDBELCAweDgyLCAweDA5LCAweDAyLAorCSAgMHgwNCwgMHg0NSwgMHgzRiwgMHgzMCwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0EsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDNBLCAweDNBLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkIsIDB4OUYsIDB4MDEsIDB4MDAsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZCLCAweEZGLCAweEZGLCAweDk3LCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweEEzLCAweDdGLCAweDdGLCAweDAwLCAweDg1LCAweDE2LCAweDI0LCAweEY1LAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4MDMsIDB4MDksIDB4RkYsIDB4ODAsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsCisJICAweEEzLCAweDdGLCAweDAwLCAweDgyLCAweDBiLCAweDZmLCAweDU3LCAweDAwLAorCSAgMHg1YywgMHgwZiwgMHhFMCwgMHhlMCwgMHg3RiwgMHg1NywKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTUsIDB4RDksIDB4NUQsIDB4RTEsIDB4ODYsIDB4MUIsIDB4OEUsIDB4MjYsCisJICAweERBLCAweDhELCAweERFLCAweDk0LCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgxNSwgMHgwMywKKwkgIH0sCisJIH0sCisJewkJCS8qICBtb2RlIzU6IDEwMjQgeCA3NjggIDI0QnBwICA2MEh6ICovCisJIDEwMjQsIDc2OCwgMjQsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RUIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGMywgMHhCNiwgMHhDMCwgMHhERCwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzOCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzQSwgMHgzQSwgMHgzQSwKKwkgIDB4M0EsIDB4M0EsIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDYsIDB4NjgsIDB4QTcsIDB4N0YsIDB4ODMsIDB4MjQsIDB4RkYsIDB4MDMsCisJICAweDAwLCAweDYwLCAweDU5LCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4M0IsIDB4MEQsIDB4MDksIDB4MDIsCisJICAweDA0LCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgzQSwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4M0EsIDB4M0EsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGQiwgMHg5RiwgMHgwMSwgMHgwMCwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkIsIDB4RkYsIDB4RkYsIDB4OTcsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4QTMsIDB4N0YsIDB4N0YsIDB4MDAsIDB4ODUsIDB4MTYsIDB4MjQsIDB4RjUsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHgwMywgMHgwOSwgMHhGRiwgMHg4MCwgMHg0MCwgMHhGRiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwKKwkgIDB4QTMsIDB4N0YsIDB4MDAsIDB4ODYsIDB4MTUsIDB4MjQsIDB4RkYsIDB4MDAsCisJICAweDAxLCAweDA3LCAweEU1LCAweDIwLCAweDdGLCAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NSwgMHhEOSwgMHg1RCwgMHhFMSwgMHg4NiwgMHgxQiwgMHg4RSwgMHgyNiwKKwkgIDB4REEsIDB4OEQsIDB4REUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDE1LCAweDAzLAorCSAgfSwKKwkgfSwKKwl7CQkJLyogIG1vZGUjNDogMTAyNCB4IDc2OCAgMzJCcHAgIDYwSHogKi8KKwkgMTAyNCwgNzY4LCAzMiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEYzLCAweEI2LCAweEMwLCAweERELCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzIsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM4LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDNBLCAweDNBLCAweDNBLAorCSAgMHgzQSwgMHgzQSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwNiwgMHg2OCwgMHhBNywgMHg3RiwgMHg4MywgMHgyNCwgMHhGRiwgMHgwMywKKwkgIDB4MDAsIDB4NjAsIDB4NTksIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgzQiwgMHgwRCwgMHgwOSwgMHgwMiwKKwkgIDB4MDQsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNBLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgzQSwgMHgzQSwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZCLCAweDlGLCAweDAxLCAweDAwLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGQiwgMHhGRiwgMHhGRiwgMHg5NywgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHhBMywgMHg3RiwgMHg3RiwgMHgwMCwgMHg4NSwgMHgxNiwgMHgyNCwgMHhGNSwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDAzLCAweDA5LCAweEZGLCAweDgwLCAweDQwLCAweEZGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEZGLCAweEJGLCAweEZGLAorCSAgMHhBMywgMHg3RiwgMHgwMCwgMHg4NiwgMHgxNSwgMHgyNCwgMHhGRiwgMHgwMCwKKwkgIDB4MDEsIDB4MDcsIDB4RTUsIDB4MjAsIDB4N0YsIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU1LCAweEQ5LCAweDVELCAweEUxLCAweDg2LCAweDFCLCAweDhFLCAweDI2LAorCSAgMHhEQSwgMHg4RCwgMHhERSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MTUsIDB4MDMsCisJICB9LAorCSB9LAorCXsJCQkvKiAgbW9kZSM2OiAzMjAgeCAyNDAgIDE2QnBwICA2MEh6ICovCisJIDMyMCwgMjQwLCAxNiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEYzLCAweEI2LCAweEMwLCAweERELCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzIsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM4LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDNBLCAweDNBLCAweDNBLAorCSAgMHgzQSwgMHgzQSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwNiwgMHg2OCwgMHhBNywgMHg3RiwgMHg4MywgMHgyNCwgMHhGRiwgMHgwMywKKwkgIDB4MDAsIDB4NjAsIDB4NTksIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgwOCwgMHg0MywgMHgwOCwgMHg0MywKKwkgIDB4MDQsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNBLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgzQSwgMHgzQSwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZCLCAweDlGLCAweDAxLCAweDAwLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGQiwgMHhGRiwgMHhGRiwgMHg5NywgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHhBMywgMHg3RiwgMHg3RiwgMHgwMCwgMHg4NSwgMHgxNiwgMHgyNCwgMHhGNSwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDAzLCAweDA5LCAweEZGLCAweDgwLCAweDQwLCAweEZGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDMwLCAweDQwLCAweDAwLCAweEZGLCAweEJGLCAweEZGLAorCSAgMHgyRSwgMHgyNywgMHgwMCwgMHgyYiwgMHgwYywgMHgwRiwgMHhFRiwgMHgwMCwKKwkgIDB4RmUsIDB4MGYsIDB4MDEsIDB4QzAsIDB4MjcsIDB4RUYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU1LCAweEQ5LCAweDVELCAweEUxLCAweDg2LCAweDFCLCAweDhFLCAweDI2LAorCSAgMHhEQSwgMHg4RCwgMHhERSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MTUsIDB4MDMsCisJICB9LAorCSB9LAorCisJewkJCS8qICBtb2RlIzg6IDMyMCB4IDI0MCAgMzJCcHAgIDYwSHogKi8KKwkgMzIwLCAyNDAsIDMyLCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEVCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RjMsIDB4QjYsIDB4QzAsIDB4REQsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMiwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4M0EsIDB4M0EsIDB4M0EsCisJICAweDNBLCAweDNBLCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDA2LCAweDY4LCAweEE3LCAweDdGLCAweDgzLCAweDI0LCAweEZGLCAweDAzLAorCSAgMHgwMCwgMHg2MCwgMHg1OSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDA4LCAweDQzLCAweDA4LCAweDQzLAorCSAgMHgwNCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0EsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDNBLCAweDNBLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkIsIDB4OUYsIDB4MDEsIDB4MDAsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZCLCAweEZGLCAweEZGLCAweDk3LCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweEEzLCAweDdGLCAweDdGLCAweDAwLCAweDg1LCAweDE2LCAweDI0LCAweEY1LAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4MDMsIDB4MDksIDB4RkYsIDB4ODAsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MzAsIDB4NDAsIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsCisJICAweDJFLCAweDI3LCAweDAwLCAweDJiLCAweDBjLCAweDBGLCAweEVGLCAweDAwLAorCSAgMHhGZSwgMHgwZiwgMHgwMSwgMHhDMCwgMHgyNywgMHhFRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTUsIDB4RDksIDB4NUQsIDB4RTEsIDB4ODYsIDB4MUIsIDB4OEUsIDB4MjYsCisJICAweERBLCAweDhELCAweERFLCAweDk0LCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgxNSwgMHgwMywKKwkgIH0sCisJIH0sCit9OworCisjZGVmaW5lIG51bVZHQU1vZGVzCQkoc2l6ZW9mKFZHQU1vZGUpIC8gc2l6ZW9mKHN0cnVjdCBNb2RlSW5pdCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcKaW5kZXggODI1YmJjNC4uMDYxZTczMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWVDY2NTUKICAgIHRyaXN0YXRlICJWSUEgVGVjaG5vbG9naWVzIFZUNjY1NSBzdXBwb3J0IgotICAgZGVwZW5kcyBvbiBQQ0kKKyAgIGRlcGVuZHMgb24gUENJICYmIFdMQU4KICAgIHNlbGVjdCBXSVJFTEVTU19FWFQKICAgIHNlbGVjdCBXRVhUX1BSSVYKICAgIC0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvS2NvbmZpZwppbmRleCA4N2JjZDI2Li4xMDU1YjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZUNjY1NgogCXRyaXN0YXRlICJWSUEgVGVjaG5vbG9naWVzIFZUNjY1NiBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCCisJZGVwZW5kcyBvbiBVU0IgJiYgV0xBTgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKaW5kZXggN2Q3NmE3Zi4uYWFhNzBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCkBAIC00MzksNyArNDM5LDcgQEAKIAkJfQogCX0KIAkqbmZjaHVua3MgPSAwOwotCW1lbXNldChmY2h1bmssIDAsIHNpemVvZihmY2h1bmspKTsKKwltZW1zZXQoZmNodW5rLCAwLCBzaXplb2YoKmZjaHVuaykpOwogCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggNDczYWExYS4uYmUzYzliOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTQ0LDUgKzQ0LDMgQEAKIAogb2JqLSQoQ09ORklHX1VTQl9BVE0pCQkrPSBhdG0vCiBvYmotJChDT05GSUdfVVNCX1NQRUVEVE9VQ0gpCSs9IGF0bS8KLQotb2JqLSQoQ09ORklHX1VTQl9VTFBJKQkJKz0gb3RnLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggNmRhYzNiOC4uMDQ5NWZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0xNTk3LDcgKzE1OTcsOSBAQAogfQogCiAvKioKLSAqIENoZWNrIHdoZXRoZXIgYSBuZXcgYmFuZHdpZHRoIHNldHRpbmcgZXhjZWVkcyB0aGUgYnVzIGJhbmR3aWR0aC4KKyAqIHVzYl9oY2RfYWxsb2NfYmFuZHdpZHRoIC0gY2hlY2sgd2hldGhlciBhIG5ldyBiYW5kd2lkdGggc2V0dGluZyBleGNlZWRzCisgKgkJCQl0aGUgYnVzIGJhbmR3aWR0aAorICogQHVkZXY6IHRhcmdldCAmdXNiX2RldmljZQogICogQG5ld19jb25maWc6IG5ldyBjb25maWd1cmF0aW9uIHRvIGluc3RhbGwKICAqIEBjdXJfYWx0OiB0aGUgY3VycmVudCBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmcKICAqIEBuZXdfYWx0OiBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmcgdGhhdCBpcyBiZWluZyBpbnN0YWxsZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDA2YWY5NzAuLjBjZWM2Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMTY1OCwxMiArMTY1OCwxMiBAQAogI2VuZGlmCiAKIC8qKgotICogdXNiX2NvbmZpZ3VyZV9kZXZpY2Vfb3RnIC0gRklYTUUgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiB1c2JfZW51bWVyYXRlX2RldmljZV9vdGcgLSBGSVhNRSAodXNiY29yZS1pbnRlcm5hbCkKICAqIEB1ZGV2OiBuZXdseSBhZGRyZXNzZWQgZGV2aWNlIChpbiBBRERSRVNTIHN0YXRlKQogICoKLSAqIERvIGNvbmZpZ3VyYXRpb24gZm9yIE9uLVRoZS1HbyBkZXZpY2VzCisgKiBGaW5pc2ggZW51bWVyYXRpb24gZm9yIE9uLVRoZS1HbyBkZXZpY2VzCiAgKi8KLXN0YXRpYyBpbnQgdXNiX2NvbmZpZ3VyZV9kZXZpY2Vfb3RnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQorc3RhdGljIGludCB1c2JfZW51bWVyYXRlX2RldmljZV9vdGcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50IGVyciA9IDA7CiAKQEAgLTE3MzQsNyArMTczNCw3IEBACiAKIAogLyoqCi0gKiB1c2JfY29uZmlndXJlX2RldmljZSAtIERldGVjdCBhbmQgcHJvYmUgZGV2aWNlIGludGZzL290ZyAodXNiY29yZS1pbnRlcm5hbCkKKyAqIHVzYl9lbnVtZXJhdGVfZGV2aWNlIC0gUmVhZCBkZXZpY2UgY29uZmlncy9pbnRmcy9vdGcgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAdWRldjogbmV3bHkgYWRkcmVzc2VkIGRldmljZSAoaW4gQUREUkVTUyBzdGF0ZSkKICAqCiAgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IHVzYl9uZXdfZGV2aWNlKCkgYW5kIHVzYl9hdXRob3JpemVfZGV2aWNlKCkKQEAgLTE3NDUsNyArMTc0NSw3IEBACiAgKiB0aGUgc3RyaW5nIGRlc2NyaXB0b3JzLCBhcyB0aGV5IHdpbGwgYmUgZXJyb3JlZCBvdXQgYnkgdGhlIGRldmljZQogICogdW50aWwgaXQgaGFzIGJlZW4gYXV0aG9yaXplZC4KICAqLwotc3RhdGljIGludCB1c2JfY29uZmlndXJlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3N0YXRpYyBpbnQgdXNiX2VudW1lcmF0ZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50IGVycjsKIApAQCAtMTc2OSw3ICsxNzY5LDcgQEAKIAkJCQkJCSAgICAgIHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcik7CiAJCXVkZXYtPnNlcmlhbCA9IHVzYl9jYWNoZV9zdHJpbmcodWRldiwgdWRldi0+ZGVzY3JpcHRvci5pU2VyaWFsTnVtYmVyKTsKIAl9Ci0JZXJyID0gdXNiX2NvbmZpZ3VyZV9kZXZpY2Vfb3RnKHVkZXYpOworCWVyciA9IHVzYl9lbnVtZXJhdGVfZGV2aWNlX290Zyh1ZGV2KTsKIGZhaWw6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE3NzksOCArMTc3OSw4IEBACiAgKiB1c2JfbmV3X2RldmljZSAtIHBlcmZvcm0gaW5pdGlhbCBkZXZpY2Ugc2V0dXAgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAdWRldjogbmV3bHkgYWRkcmVzc2VkIGRldmljZSAoaW4gQUREUkVTUyBzdGF0ZSkKICAqCi0gKiBUaGlzIGlzIGNhbGxlZCB3aXRoIGRldmljZXMgd2hpY2ggaGF2ZSBiZWVuIGVudW1lcmF0ZWQsIGJ1dCBub3QgeWV0Ci0gKiBjb25maWd1cmVkLiAgVGhlIGRldmljZSBkZXNjcmlwdG9yIGlzIGF2YWlsYWJsZSwgYnV0IG5vdCBkZXNjcmlwdG9ycworICogVGhpcyBpcyBjYWxsZWQgd2l0aCBkZXZpY2VzIHdoaWNoIGhhdmUgYmVlbiBkZXRlY3RlZCBidXQgbm90IGZ1bGx5CisgKiBlbnVtZXJhdGVkLiAgVGhlIGRldmljZSBkZXNjcmlwdG9yIGlzIGF2YWlsYWJsZSwgYnV0IG5vdCBkZXNjcmlwdG9ycwogICogZm9yIGFueSBkZXZpY2UgY29uZmlndXJhdGlvbi4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGxvY2tlZCBlaXRoZXIKICAqIHRoZSBwYXJlbnQgaHViIChpZiB1ZGV2IGlzIGEgbm9ybWFsIGRldmljZSkgb3IgZWxzZSB0aGUKICAqIHVzYl9idXNfbGlzdF9sb2NrIChpZiB1ZGV2IGlzIGEgcm9vdCBodWIpLiAgVGhlIHBhcmVudCdzIHBvaW50ZXIgdG8KQEAgLTE4MDMsOCArMTgwMyw4IEBACiAJaWYgKHVkZXYtPnBhcmVudCkKIAkJdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYtPnBhcmVudCk7CiAKLQl1c2JfZGV0ZWN0X3F1aXJrcyh1ZGV2KTsJCS8qIERldGVybWluZSBxdWlya3MgKi8KLQllcnIgPSB1c2JfY29uZmlndXJlX2RldmljZSh1ZGV2KTsJLyogZGV0ZWN0ICYgcHJvYmUgZGV2L2ludGZzICovCisJdXNiX2RldGVjdF9xdWlya3ModWRldik7CisJZXJyID0gdXNiX2VudW1lcmF0ZV9kZXZpY2UodWRldik7CS8qIFJlYWQgZGVzY3JpcHRvcnMgKi8KIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsOwogCWRldl9kYmcoJnVkZXYtPmRldiwgInVkZXYgJWQsIGJ1c251bSAlZCwgbWlub3IgPSAlZFxuIiwKQEAgLTE4NDksMjEgKzE4NDksMjMgQEAKICAqLwogaW50IHVzYl9kZWF1dGhvcml6ZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpCiB7Ci0JdW5zaWduZWQgY250OwogCXVzYl9sb2NrX2RldmljZSh1c2JfZGV2KTsKIAlpZiAodXNiX2Rldi0+YXV0aG9yaXplZCA9PSAwKQogCQlnb3RvIG91dF91bmF1dGhvcml6ZWQ7CisKIAl1c2JfZGV2LT5hdXRob3JpemVkID0gMDsKIAl1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odXNiX2RldiwgLTEpOworCisJa2ZyZWUodXNiX2Rldi0+cHJvZHVjdCk7CiAJdXNiX2Rldi0+cHJvZHVjdCA9IGtzdHJkdXAoIm4vYSAodW5hdXRob3JpemVkKSIsIEdGUF9LRVJORUwpOworCWtmcmVlKHVzYl9kZXYtPm1hbnVmYWN0dXJlcik7CiAJdXNiX2Rldi0+bWFudWZhY3R1cmVyID0ga3N0cmR1cCgibi9hICh1bmF1dGhvcml6ZWQpIiwgR0ZQX0tFUk5FTCk7CisJa2ZyZWUodXNiX2Rldi0+c2VyaWFsKTsKIAl1c2JfZGV2LT5zZXJpYWwgPSBrc3RyZHVwKCJuL2EgKHVuYXV0aG9yaXplZCkiLCBHRlBfS0VSTkVMKTsKLQlrZnJlZSh1c2JfZGV2LT5jb25maWcpOwotCXVzYl9kZXYtPmNvbmZpZyA9IE5VTEw7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCB1c2JfZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgY250KyspCi0JCWtmcmVlKHVzYl9kZXYtPnJhd2Rlc2NyaXB0b3JzW2NudF0pOworCisJdXNiX2Rlc3Ryb3lfY29uZmlndXJhdGlvbih1c2JfZGV2KTsKIAl1c2JfZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyA9IDA7Ci0Ja2ZyZWUodXNiX2Rldi0+cmF3ZGVzY3JpcHRvcnMpOworCiBvdXRfdW5hdXRob3JpemVkOgogCXVzYl91bmxvY2tfZGV2aWNlKHVzYl9kZXYpOwogCXJldHVybiAwOwpAQCAtMTg3MywxNSArMTg3NSwxMSBAQAogaW50IHVzYl9hdXRob3JpemVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQogewogCWludCByZXN1bHQgPSAwLCBjOworCiAJdXNiX2xvY2tfZGV2aWNlKHVzYl9kZXYpOwogCWlmICh1c2JfZGV2LT5hdXRob3JpemVkID09IDEpCiAJCWdvdG8gb3V0X2F1dGhvcml6ZWQ7Ci0Ja2ZyZWUodXNiX2Rldi0+cHJvZHVjdCk7Ci0JdXNiX2Rldi0+cHJvZHVjdCA9IE5VTEw7Ci0Ja2ZyZWUodXNiX2Rldi0+bWFudWZhY3R1cmVyKTsKLQl1c2JfZGV2LT5tYW51ZmFjdHVyZXIgPSBOVUxMOwotCWtmcmVlKHVzYl9kZXYtPnNlcmlhbCk7Ci0JdXNiX2Rldi0+c2VyaWFsID0gTlVMTDsKKwogCXJlc3VsdCA9IHVzYl9hdXRvcmVzdW1lX2RldmljZSh1c2JfZGV2KTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlkZXZfZXJyKCZ1c2JfZGV2LT5kZXYsCkBAIC0xODk0LDEwICsxODkyLDE4IEBACiAJCQkiYXV0aG9yaXphdGlvbjogJWRcbiIsIHJlc3VsdCk7CiAJCWdvdG8gZXJyb3JfZGV2aWNlX2Rlc2NyaXB0b3I7CiAJfQorCisJa2ZyZWUodXNiX2Rldi0+cHJvZHVjdCk7CisJdXNiX2Rldi0+cHJvZHVjdCA9IE5VTEw7CisJa2ZyZWUodXNiX2Rldi0+bWFudWZhY3R1cmVyKTsKKwl1c2JfZGV2LT5tYW51ZmFjdHVyZXIgPSBOVUxMOworCWtmcmVlKHVzYl9kZXYtPnNlcmlhbCk7CisJdXNiX2Rldi0+c2VyaWFsID0gTlVMTDsKKwogCXVzYl9kZXYtPmF1dGhvcml6ZWQgPSAxOwotCXJlc3VsdCA9IHVzYl9jb25maWd1cmVfZGV2aWNlKHVzYl9kZXYpOworCXJlc3VsdCA9IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHVzYl9kZXYpOwogCWlmIChyZXN1bHQgPCAwKQotCQlnb3RvIGVycm9yX2NvbmZpZ3VyZTsKKwkJZ290byBlcnJvcl9lbnVtZXJhdGU7CiAJLyogQ2hvb3NlIGFuZCBzZXQgdGhlIGNvbmZpZ3VyYXRpb24uICBUaGlzIHJlZ2lzdGVycyB0aGUgaW50ZXJmYWNlcwogCSAqIHdpdGggdGhlIGRyaXZlciBjb3JlIGFuZCBsZXRzIGludGVyZmFjZSBkcml2ZXJzIGJpbmQgdG8gdGhlbS4KIAkgKi8KQEAgLTE5MTIsOCArMTkxOCwxMCBAQAogCQl9CiAJfQogCWRldl9pbmZvKCZ1c2JfZGV2LT5kZXYsICJhdXRob3JpemVkIHRvIGNvbm5lY3RcbiIpOwotZXJyb3JfY29uZmlndXJlOgorCitlcnJvcl9lbnVtZXJhdGU6CiBlcnJvcl9kZXZpY2VfZGVzY3JpcHRvcjoKKwl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVzYl9kZXYpOwogZXJyb3JfYXV0b3Jlc3VtZToKIG91dF9hdXRob3JpemVkOgogCXVzYl91bmxvY2tfZGV2aWNlKHVzYl9kZXYpOwkvLyBjb21wbGVtZW50cyBsb2NrdHJlZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDE1NDc3MDAuLjQ4NWVkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTgyLDkgKzgyLDEzIEBACiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkJCQkJXAorCWludCByZXR2YWw7CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB1ZGV2LT5uYW1lKTsJCQlcCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwkJCQkJCVwKKwlyZXR2YWwgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB1ZGV2LT5uYW1lKTsJCQlcCisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CQkJCQlcCisJcmV0dXJuIHJldHZhbDsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93XyMjbmFtZSwgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IDJmYjQyMDQuLjBkYWZmMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtNjYsOSArNjYsOSBAQAogLyoqCiAgKiB1c2JfZmluZF9hbHRfc2V0dGluZygpIC0gR2l2ZW4gYSBjb25maWd1cmF0aW9uLCBmaW5kIHRoZSBhbHRlcm5hdGUgc2V0dGluZwogICogZm9yIHRoZSBnaXZlbiBpbnRlcmZhY2UuCi0gKiBAY29uZmlnIC0gdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VhcmNoIChub3QgbmVjZXNzYXJpbHkgdGhlIGN1cnJlbnQgY29uZmlnKS4KLSAqIEBpZmFjZV9udW0gLSBpbnRlcmZhY2UgbnVtYmVyIHRvIHNlYXJjaCBpbgotICogQGFsdF9udW0gLSBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmcgbnVtYmVyIHRvIHNlYXJjaCBmb3IuCisgKiBAY29uZmlnOiB0aGUgY29uZmlndXJhdGlvbiB0byBzZWFyY2ggKG5vdCBuZWNlc3NhcmlseSB0aGUgY3VycmVudCBjb25maWcpLgorICogQGlmYWNlX251bTogaW50ZXJmYWNlIG51bWJlciB0byBzZWFyY2ggaW4KKyAqIEBhbHRfbnVtOiBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmcgbnVtYmVyIHRvIHNlYXJjaCBmb3IuCiAgKgogICogU2VhcmNoIHRoZSBjb25maWd1cmF0aW9uJ3MgaW50ZXJmYWNlIGNhY2hlIGZvciB0aGUgZ2l2ZW4gYWx0IHNldHRpbmcuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jIGIvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKaW5kZXggMTIwNmEyNi4uMjk1OGExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKKysrIGIvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGJncF9leHRlcm5hbF9zdGFydHVwKTsKIAotc3RhdGljIGludCBfX2luaXQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQorc3RhdGljIGludCBlaGNpX3Jlc2V0X3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIHBvcnRzYzsKIAl1MzIgZGVsYXlfdGltZSwgZGVsYXk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCmluZGV4IDU4ZjIyMDMuLmE2MmFmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCkBAIC0xNTgsNiArMTU4LDcgQEAKIAogc3RhdGljIGludCBfX2V4aXQgYXVkaW9fdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKKwlnYXVkaW9fY2xlYW51cCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwppbmRleCBjNDNjODlmLi5kZjc3ZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKQEAgLTU2LDEzICs1NiwxNiBAQAogREVDTEFSRV9VQUNfQUNfSEVBREVSX0RFU0NSSVBUT1IoMik7CiAKICNkZWZpbmUgVUFDX0RUX0FDX0hFQURFUl9MRU5HVEgJVUFDX0RUX0FDX0hFQURFUl9TSVpFKEZfQVVESU9fTlVNX0lOVEVSRkFDRVMpCisvKiAxIGlucHV0IHRlcm1pbmFsLCAxIG91dHB1dCB0ZXJtaW5hbCBhbmQgMSBmZWF0dXJlIHVuaXQgKi8KKyNkZWZpbmUgVUFDX0RUX1RPVEFMX0xFTkdUSCAoVUFDX0RUX0FDX0hFQURFUl9MRU5HVEggKyBVQUNfRFRfSU5QVVRfVEVSTUlOQUxfU0laRSBcCisJKyBVQUNfRFRfT1VUUFVUX1RFUk1JTkFMX1NJWkUgKyBVQUNfRFRfRkVBVFVSRV9VTklUX1NJWkUoMCkpCiAvKiBCLjMuMiAgQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KIHN0YXRpYyBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yXzIgYWNfaGVhZGVyX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVUFDX0RUX0FDX0hFQURFUl9MRU5HVEgsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19IRUFERVIsCiAJLmJjZEFEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVBQ19EVF9BQ19IRUFERVJfTEVOR1RIKSwKKwkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVUFDX0RUX1RPVEFMX0xFTkdUSCksCiAJLmJJbkNvbGxlY3Rpb24gPQlGX0FVRElPX05VTV9JTlRFUkZBQ0VTLAogCS5iYUludGVyZmFjZU5yID0gewogCQlbMF0gPQkJRl9BVURJT19BQ19JTlRFUkZBQ0UsCkBAIC0yNTIsMTIgKzI1NSwxMiBAQAogCiAJY29weV9idWYgPSBremFsbG9jKHNpemVvZiAqY29weV9idWYsIEdGUF9BVE9NSUMpOwogCWlmICghY29weV9idWYpCi0JCXJldHVybiAoc3RydWN0IGZfYXVkaW9fYnVmICopLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljb3B5X2J1Zi0+YnVmID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFjb3B5X2J1Zi0+YnVmKSB7CiAJCWtmcmVlKGNvcHlfYnVmKTsKLQkJcmV0dXJuIChzdHJ1Y3QgZl9hdWRpb19idWYgKiktRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKIAlyZXR1cm4gY29weV9idWY7CkBAIC0zMzIsNyArMzM1LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmY29weV9idWYtPmxpc3QsICZhdWRpby0+cGxheV9xdWV1ZSk7CiAJCXNjaGVkdWxlX3dvcmsoJmF1ZGlvLT5wbGF5YmFja193b3JrKTsKIAkJY29weV9idWYgPSBmX2F1ZGlvX2J1ZmZlcl9hbGxvYyhhdWRpb19idWZfc2l6ZSk7Ci0JCWlmIChjb3B5X2J1ZiA8IDApCisJCWlmIChJU19FUlIoY29weV9idWYpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01NzYsNiArNTc5LDggQEAKIAkJCXVzYl9lcF9lbmFibGUob3V0X2VwLCBhdWRpby0+b3V0X2Rlc2MpOwogCQkJb3V0X2VwLT5kcml2ZXJfZGF0YSA9IGF1ZGlvOwogCQkJYXVkaW8tPmNvcHlfYnVmID0gZl9hdWRpb19idWZmZXJfYWxsb2MoYXVkaW9fYnVmX3NpemUpOworCQkJaWYgKElTX0VSUihhdWRpby0+Y29weV9idWYpKQorCQkJCXJldHVybiAtRU5PTUVNOwogCiAJCQkvKgogCQkJICogYWxsb2NhdGUgYSBidW5jaCBvZiByZWFkIGJ1ZmZlcnMKQEAgLTc4Nyw3ICs3OTIsNyBAQAogCXJldHVybiBzdGF0dXM7CiAKIGFkZF9mYWlsOgotCWdhdWRpb19jbGVhbnVwKCZhdWRpby0+Y2FyZCk7CisJZ2F1ZGlvX2NsZWFudXAoKTsKIHNldHVwX2ZhaWw6CiAJa2ZyZWUoYXVkaW8pOwogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYwppbmRleCA4MjUyNTk1ZC4uMzVlMDkzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBnYXVkaW8gKnRoZV9jYXJkOwogLyoqCiAgKiBnYXVkaW9fc2V0dXAgLSBzZXR1cCBBTFNBIGludGVyZmFjZSBhbmQgcHJlcGFyaW5nIGZvciBVU0IgdHJhbnNmZXIKICAqCkBAIC0zMDMsNiArMzA0LDkgQEAKIAlpZiAocmV0KQogCQlFUlJPUihjYXJkLCAid2UgbmVlZCBhdCBsZWFzdCBvbmUgY29udHJvbCBkZXZpY2VcbiIpOwogCisJaWYgKCF0aGVfY2FyZCkKKwkJdGhlX2NhcmQgPSBjYXJkOworCiAJcmV0dXJuIHJldDsKIAogfQpAQCAtMzEyLDkgKzMxNiwxMSBAQAogICoKICAqIFRoaXMgaXMgY2FsbGVkIHRvIGZyZWUgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGdhdWRpb19zZXR1cCgpLgogICovCi12b2lkIGdhdWRpb19jbGVhbnVwKHN0cnVjdCBnYXVkaW8gKmNhcmQpCit2b2lkIGdhdWRpb19jbGVhbnVwKHZvaWQpCiB7Ci0JaWYgKGNhcmQpCi0JCWdhdWRpb19jbG9zZV9zbmRfZGV2KGNhcmQpOworCWlmICh0aGVfY2FyZCkgeworCQlnYXVkaW9fY2xvc2Vfc25kX2Rldih0aGVfY2FyZCk7CisJCXRoZV9jYXJkID0gTlVMTDsKKwl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5oCmluZGV4IGNjOGQxNTkuLjA4ZmZjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uaApAQCAtNTEsNiArNTEsNiBAQAogfTsKIAogaW50IGdhdWRpb19zZXR1cChzdHJ1Y3QgZ2F1ZGlvICpjYXJkKTsKLXZvaWQgZ2F1ZGlvX2NsZWFudXAoc3RydWN0IGdhdWRpbyAqY2FyZCk7Cit2b2lkIGdhdWRpb19jbGVhbnVwKHZvaWQpOwogCiAjZW5kaWYgLyogX19VX0FVRElPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCmluZGV4IDFkOGUzOWEuLjFlYjllNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwpAQCAtNjAsNiArNjAsNyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFwcGxlZGlzcGxheV90YWJsZSBbXSA9IHsKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjE4KSB9LAogCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMTkpIH0sCisJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxYykgfSwKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjFkKSB9LAogCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTcyLDggKzczLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLwogCXN0cnVjdCB1cmIgKnVyYjsJCS8qIHVzYiByZXF1ZXN0IGJsb2NrICovCiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwkvKiBiYWNrbGlnaHQgZGV2aWNlICovCi0JY2hhciAqdXJiZGF0YTsJCQkvKiBpbnRlcnJ1cHQgVVJCIGRhdGEgYnVmZmVyICovCi0JY2hhciAqbXNnZGF0YTsJCQkvKiBjb250cm9sIG1lc3NhZ2UgZGF0YSBidWZmZXIgKi8KKwl1OCAqdXJiZGF0YTsJCQkvKiBpbnRlcnJ1cHQgVVJCIGRhdGEgYnVmZmVyICovCisJdTggKm1zZ2RhdGE7CQkJLyogY29udHJvbCBtZXNzYWdlIGRhdGEgYnVmZmVyICovCiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJaW50IGJ1dHRvbl9wcmVzc2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCmluZGV4IDYwMmVlMDUuLjU5ODYwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX2Z1bmNfXywgZXJyKTsKIAkJCWdvdG8gd3JhcGVycjsKIAkJfQotCX0gd2hpbGUgKGkgPiAwKTsKKwl9IHdoaWxlIChyZWMpOwogCiAJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KIAllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCmluZGV4IGZlNDkzNGQuLmFkMjZlNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKQEAgLTI5LDYgKzI5LDggQEAKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKIAl2b2lkIF9faW9tZW0gKmVwaW8gPSBod19lcC0+cmVnczsKKwl1OCBlcG51bSA9IGh3X2VwLT5lcG51bTsKKwl1MTYgZG1hX3JlZyA9IDA7CiAKIAlwcmVmZXRjaCgodTggKilzcmMpOwogCkBAIC0zOSw2NyArNDEsMTEzIEBACiAKIAlkdW1wX2ZpZm9fZGF0YShzcmMsIGxlbik7CiAKLQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpc3JjICYgMHgwMSkpCi0JCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotCWVsc2UKLQkJb3V0c3coKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotfQorCWlmICghQU5PTUFMWV8wNTAwMDM4MCAmJiBlcG51bSAhPSAwKSB7CisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgaW50KXNyYywKKwkJCSh1bnNpZ25lZCBpbnQpKHNyYyArIGxlbikpOwogCisJCS8qIFNldHVwIERNQSBhZGRyZXNzIHJlZ2lzdGVyICovCisJCWRtYV9yZWcgPSAodTE2KSAoKHUzMikgc3JjICYgMHhGRkZGKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0xPVyksIGRtYV9yZWcpOworCQlTU1lOQygpOworCisJCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIHNyYyA+PiAxNikgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfSElHSCksIGRtYV9yZWcpOworCQlTU1lOQygpOworCisJCS8qIFNldHVwIERNQSBjb3VudCByZWdpc3RlciAqLworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0xPVyksIGxlbik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfSElHSCksIDApOworCQlTU1lOQygpOworCisJCS8qIEVuYWJsZSB0aGUgRE1BICovCisJCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQSB8IERJUkVDVElPTjsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CisKKwkJLyogV2FpdCBmb3IgY29tcGVsZXRlICovCisJCXdoaWxlICghKGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpICYgKDEgPDwgZXBudW0pKSkKKwkJCWNwdV9yZWxheCgpOworCisJCS8qIGFja25vd2xlZGdlIGRtYSBpbnRlcnJ1cHQgKi8KKwkJYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCgxIDw8IGVwbnVtKTsKKwkJU1NZTkMoKTsKKworCQkvKiBSZXNldCBETUEgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgMCk7CisJCVNTWU5DKCk7CisJfSBlbHNlIHsKKwkJU1NZTkMoKTsKKworCQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpc3JjICYgMHgwMSkpCisJCQlvdXRzd184KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKKwkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7CisJCWVsc2UKKwkJCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKKwkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7CisKKwl9Cit9CiAvKgogICogVW5sb2FkIGFuIGVuZHBvaW50J3MgRklGTwogICovCiB2b2lkIG11c2JfcmVhZF9maWZvKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgdTggKmRzdCkKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKLQotI2lmZGVmIENPTkZJR19CRjUyeAogCXU4IGVwbnVtID0gaHdfZXAtPmVwbnVtOwogCXUxNiBkbWFfcmVnID0gMDsKIAotCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpZHN0LAotCQkodW5zaWduZWQgaW50KShkc3QgKyBsZW4pKTsKKwlpZiAoQU5PTUFMWV8wNTAwMDQ2NyAmJiBlcG51bSAhPSAwKSB7CiAKLQkvKiBTZXR1cCBETUEgYWRkcmVzcyByZWdpc3RlciAqLwotCWRtYV9yZWcgPSAodTE2KSAoKHUzMikgZHN0ICYgMHhGRkZGKTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfTE9XKSwgZG1hX3JlZyk7Ci0JU1NZTkMoKTsKKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGludClkc3QsCisJCQkodW5zaWduZWQgaW50KShkc3QgKyBsZW4pKTsKIAotCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIGRzdCA+PiAxNikgJiAweEZGRkYpOwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7Ci0JU1NZTkMoKTsKKwkJLyogU2V0dXAgRE1BIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwkJZG1hX3JlZyA9ICh1MTYpICgodTMyKSBkc3QgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfTE9XKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBTZXR1cCBETUEgY291bnQgcmVnaXN0ZXIgKi8KLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0xPVyksIGxlbik7Ci0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9ISUdIKSwgMCk7Ci0JU1NZTkMoKTsKKwkJZG1hX3JlZyA9ICh1MTYpICgoKHUzMikgZHN0ID4+IDE2KSAmIDB4RkZGRik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBFbmFibGUgdGhlIERNQSAqLwotCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCBkbWFfcmVnKTsKLQlTU1lOQygpOworCQkvKiBTZXR1cCBETUEgY291bnQgcmVnaXN0ZXIgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9MT1cpLCBsZW4pOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0hJR0gpLCAwKTsKKwkJU1NZTkMoKTsKIAotCS8qIFdhaXQgZm9yIGNvbXBlbGV0ZSAqLwotCXdoaWxlICghKGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpICYgKDEgPDwgZXBudW0pKSkKLQkJY3B1X3JlbGF4KCk7CisJCS8qIEVuYWJsZSB0aGUgRE1BICovCisJCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBhY2tub3dsZWRnZSBkbWEgaW50ZXJydXB0ICovCi0JYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCgxIDw8IGVwbnVtKTsKLQlTU1lOQygpOworCQkvKiBXYWl0IGZvciBjb21wZWxldGUgKi8KKwkJd2hpbGUgKCEoYmZpbl9yZWFkX1VTQl9ETUFfSU5URVJSVVBUKCkgJiAoMSA8PCBlcG51bSkpKQorCQkJY3B1X3JlbGF4KCk7CiAKLQkvKiBSZXNldCBETUEgKi8KLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCAwKTsKLQlTU1lOQygpOwotI2Vsc2UKLQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMHgwMSkpCi0JCWluc3dfOCgodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsCi0JCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci0JZWxzZQotCQlpbnN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIGRzdCwKLQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKLSNlbmRpZgorCQkvKiBhY2tub3dsZWRnZSBkbWEgaW50ZXJydXB0ICovCisJCWJmaW5fd3JpdGVfVVNCX0RNQV9JTlRFUlJVUFQoMSA8PCBlcG51bSk7CisJCVNTWU5DKCk7CiAKKwkJLyogUmVzZXQgRE1BICovCisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIDApOworCQlTU1lOQygpOworCX0gZWxzZSB7CisJCVNTWU5DKCk7CisJCS8qIFJlYWQgdGhlIGxhc3QgYnl0ZSBvZiBwYWNrZXQgd2l0aCBvZGQgc2l6ZSBmcm9tIGFkZHJlc3MgZmlmbyArIDQKKwkJICogdG8gdHJpZ2dlciAxIGJ5dGUgYWNjZXNzIHRvIEVQMCBGSUZPLgorCQkgKi8KKwkJaWYgKGxlbiA9PSAxKQorCQkJKmRzdCA9ICh1OClpbncoKHVuc2lnbmVkIGxvbmcpZmlmbyArIDQpOworCQllbHNlIHsKKwkJCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylkc3QgJiAweDAxKSkKKwkJCQlpbnN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgZHN0LCBsZW4gPj4gMSk7CisJCQllbHNlCisJCQkJaW5zdygodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsIGxlbiA+PiAxKTsKKworCQkJaWYgKGxlbiAmIDB4MDEpCisJCQkJKihkc3QgKyBsZW4gLSAxKSA9ICh1OClpbncoKHVuc2lnbmVkIGxvbmcpZmlmbyArIDQpOworCQl9CisJfQogCURCRyg0LCAiJWNYIGVwJWQgZmlmbyAlcCBjb3VudCAlZCBidWYgJXBcbiIsCiAJCQknUicsIGh3X2VwLT5lcG51bSwgZmlmbywgbGVuLCBkc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmggYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmgKaW5kZXggMTBiN2Q3NS4uYmQ5MzUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uaApAQCAtNjksNyArNjksNiBAQAogI2RlZmluZSBkdW1wX2ZpZm9fZGF0YShidWYsIGxlbikJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CRjUyeAogCiAjZGVmaW5lIFVTQl9ETUFfQkFTRQkJVVNCX0RNQV9JTlRFUlJVUFQKICNkZWZpbmUgVVNCX0RNQXhfQ1RSTAkJMHgwNApAQCAtNzksNyArNzgsNiBAQAogI2RlZmluZSBVU0JfRE1BeF9DT1VOVF9ISUdICTB4MTQKIAogI2RlZmluZSBVU0JfRE1BX1JFRyhlcCwgcmVnKQkoVVNCX0RNQV9CQVNFICsgMHgyMCAqIGVwICsgcmVnKQotI2VuZGlmCiAKIC8qIEFsbW9zdCAxIHNlY29uZCAqLwogI2RlZmluZSBUSU1FUl9ERUxBWQkoMSAqIEhaKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCmluZGV4IGVmMjMzMmEuLmE0NGE0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKQEAgLTExNTQsOCArMTE1NCwxMSBAQAogCXN0cnVjdCBtdXNiX2h3X2VwCSpod19lcCA9IE5VTEw7CiAJdTMyCQkJcngsIHR4OwogCWludAkJCWksIGluZGV4OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJY3BwaSA9IGNvbnRhaW5lcl9vZihtdXNiLT5kbWFfY29udHJvbGxlciwgc3RydWN0IGNwcGksIGNvbnRyb2xsZXIpOworCWlmIChjcHBpLT5pcnEpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAl0aWJhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAKQEAgLTEyODUsNiArMTI4OCw5IEBACiAJLyogd3JpdGUgdG8gQ1BQSSBFT0kgcmVnaXN0ZXIgdG8gcmUtZW5hYmxlIGludGVycnVwdHMgKi8KIAltdXNiX3dyaXRlbCh0aWJhc2UsIERBVklOQ0lfQ1BQSV9FT0lfUkVHLCAwKTsKIAorCWlmIChjcHBpLT5pcnEpCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwppbmRleCBlMTZmZjYwLi42NjkxMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIm11c2JfY29yZS5oIgogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KLSNkZWZpbmUgR1BJT19uVkJVU19EUlYJCTE0NAorI2RlZmluZSBHUElPX25WQlVTX0RSVgkJMTYwCiAjZW5kaWYKIAogI2luY2x1ZGUgImRhdmluY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IGJmZTA4ZjQuLjVlYjkzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAKICNlbmRpZgogCXU4IHJlZzsKIAljaGFyICp0eXBlOwotCWNoYXIgYUluZm9bNzhdLCBhUmV2aXNpb25bMzJdLCBhRGF0ZVsxMl07CisJY2hhciBhSW5mb1s5MF0sIGFSZXZpc2lvblszMl0sIGFEYXRlWzEyXTsKIAl2b2lkIF9faW9tZW0JKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJaW50CQlzdGF0dXMgPSAwOwogCWludAkJaTsKQEAgLTE1MjEsNiArMTUyMSwxNCBAQAogCQkoZGV2Y3RsICYgTVVTQl9ERVZDVExfSE0pID8gImhvc3QiIDogInBlcmlwaGVyYWwiLAogCQltdXNiLT5pbnRfdXNiLCBtdXNiLT5pbnRfdHgsIG11c2ItPmludF9yeCk7CiAKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKKwlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikgfHwgaXNfcGVyaXBoZXJhbF9lbmFibGVkKG11c2IpKQorCQlpZiAoIW11c2ItPmdhZGdldF9kcml2ZXIpIHsKKwkJCURCRyg1LCAiTm8gZ2FkZ2V0IGRyaXZlciBsb2FkZWRcbiIpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisjZW5kaWYKKwogCS8qIHRoZSBjb3JlIGNhbiBpbnRlcnJ1cHQgdXMgZm9yIG11bHRpcGxlIHJlYXNvbnM7IGRvY3MgaGF2ZQogCSAqIGEgZ2VuZXJpYyBpbnRlcnJ1cHQgZmxvd2NoYXJ0IHRvIGZvbGxvdwogCSAqLwpAQCAtMjEzOSw3ICsyMTQ3LDcgQEAKIAlyZXR1cm4gbXVzYl9pbml0X2NvbnRyb2xsZXIoZGV2LCBpcnEsIGJhc2UpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBtdXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2V4aXQgbXVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbXVzYgkqbXVzYiA9IGRldl90b19tdXNiKCZwZGV2LT5kZXYpOwogCXZvaWQgX19pb21lbQkqY3RybF9iYXNlID0gbXVzYi0+Y3RybF9iYXNlOwpAQCAtMjIzMSw3ICsyMjM5LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucG0JCT0gTVVTQl9ERVZfUE1fT1BTLAogCX0sCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtdXNiX3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2V4aXRfcChtdXNiX3JlbW92ZSksCiAJLnNodXRkb3duCT0gbXVzYl9zaHV0ZG93biwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwppbmRleCBjNDliOWJhLi5jYmNmMTRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQlzaXplX3QgcmVxdWVzdF9zaXplOwogCiAJCQkvKiBzZXR1cCBETUEsIHRoZW4gcHJvZ3JhbSBlbmRwb2ludCBDU1IgKi8KLQkJCXJlcXVlc3Rfc2l6ZSA9IG1pbihyZXF1ZXN0LT5sZW5ndGgsCisJCQlyZXF1ZXN0X3NpemUgPSBtaW5fdChzaXplX3QsIHJlcXVlc3QtPmxlbmd0aCwKIAkJCQkJCW11c2JfZXAtPmRtYS0+bWF4X2xlbik7CiAJCQlpZiAocmVxdWVzdF9zaXplIDwgbXVzYl9lcC0+cGFja2V0X3N6KQogCQkJCW11c2JfZXAtPmRtYS0+ZGVzaXJlZF9tb2RlID0gMDsKQEAgLTMxOSw3ICszMTksNyBAQAogCQkJdXNlX2RtYSA9IHVzZV9kbWEgJiYgYy0+Y2hhbm5lbF9wcm9ncmFtKAogCQkJCQltdXNiX2VwLT5kbWEsIG11c2JfZXAtPnBhY2tldF9zeiwKIAkJCQkJbXVzYl9lcC0+ZG1hLT5kZXNpcmVkX21vZGUsCi0JCQkJCXJlcXVlc3QtPmRtYSwgcmVxdWVzdF9zaXplKTsKKwkJCQkJcmVxdWVzdC0+ZG1hICsgcmVxdWVzdC0+YWN0dWFsLCByZXF1ZXN0X3NpemUpOwogCQkJaWYgKHVzZV9kbWEpIHsKIAkJCQlpZiAobXVzYl9lcC0+ZG1hLT5kZXNpcmVkX21vZGUgPT0gMCkgewogCQkJCQkvKgpAQCAtNTE1LDEyICs1MTUsMTIgQEAKIAkJCWlmIChjc3IgJiBNVVNCX1RYQ1NSX0ZJRk9OT1RFTVBUWSkKIAkJCQlyZXR1cm47CiAKLQkJCWlmICghbXVzYl9lcC0+ZGVzYykgeworCQkJcmVxdWVzdCA9IG11c2JfZXAtPmRlc2MgPyBuZXh0X3JlcXVlc3QobXVzYl9lcCkgOiBOVUxMOworCQkJaWYgKCFyZXF1ZXN0KSB7CiAJCQkJREJHKDQsICIlcyBpZGxlIG5vd1xuIiwKIAkJCQkJbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUpOwogCQkJCXJldHVybjsKLQkJCX0gZWxzZQotCQkJCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3QobXVzYl9lcCk7CisJCQl9CiAJCX0KIAogCQl0eHN0YXRlKG11c2IsIHRvX211c2JfcmVxdWVzdChyZXF1ZXN0KSk7CkBAIC03NDYsNiArNzQ2LDggQEAKIAltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXBudW0pOwogCiAJcmVxdWVzdCA9IG5leHRfcmVxdWVzdChtdXNiX2VwKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybjsKIAogCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENTUik7CiAJZG1hID0gaXNfZG1hX2NhcGFibGUoKSA/IG11c2JfZXAtPmRtYSA6IE5VTEw7CkBAIC0xNzMxLDYgKzE3MzMsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCiAJCW90Z19zZXRfcGVyaXBoZXJhbChtdXNiLT54Y2VpdiwgJm11c2ItPmcpOworCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOwogCQltdXNiLT5pc19hY3RpdmUgPSAxOwogCiAJCS8qIEZJWE1FIHRoaXMgaWdub3JlcyB0aGUgc29mdGNvbm5lY3QgZmxhZy4gIERyaXZlcnMgYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYwppbmRleCA4ZmJhM2YxLi41M2QwNjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCQkJbXVzYi0+ZXAwX3N0YXRlID0gTVVTQl9FUDBfU1RBR0VfU1RBVFVTSU47CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCUVSUigiU2V0dXBFbmQgY2FtZSBpbiBhIHdyb25nIGVwMHN0YWdlICVzIiwKKwkJCUVSUigiU2V0dXBFbmQgY2FtZSBpbiBhIHdyb25nIGVwMHN0YWdlICVzXG4iLAogCQkJICAgIGRlY29kZV9lcDBzdGFnZShtdXNiLT5lcDBfc3RhdGUpKTsKIAkJfQogCQljc3IgPSBtdXNiX3JlYWR3KHJlZ3MsIE1VU0JfQ1NSMCk7CkBAIC03ODcsMTIgKzc4NywxOCBAQAogCQkJCWhhbmRsZWQgPSBzZXJ2aWNlX3plcm9fZGF0YV9yZXF1ZXN0KAogCQkJCQkJbXVzYiwgJnNldHVwKTsKIAorCQkJCS8qCisJCQkJICogV2UncmUgZXhwZWN0aW5nIG5vIGRhdGEgaW4gYW55IGNhc2UsIHNvCisJCQkJICogYWx3YXlzIHNldCB0aGUgREFUQUVORCBiaXQgLS0gZG9pbmcgdGhpcworCQkJCSAqIGhlcmUgaGVscHMgYXZvaWQgU2V0dXBFbmQgaW50ZXJydXB0IGNvbWluZworCQkJCSAqIGluIHRoZSBpZGxlIHN0YWdlIHdoZW4gd2UncmUgc3RhbGxpbmcuLi4KKwkJCQkgKi8KKwkJCQltdXNiLT5hY2twZW5kIHw9IE1VU0JfQ1NSMF9QX0RBVEFFTkQ7CisKIAkJCQkvKiBzdGF0dXMgc3RhZ2UgbWlnaHQgYmUgaW1tZWRpYXRlICovCi0JCQkJaWYgKGhhbmRsZWQgPiAwKSB7Ci0JCQkJCW11c2ItPmFja3BlbmQgfD0gTVVTQl9DU1IwX1BfREFUQUVORDsKKwkJCQlpZiAoaGFuZGxlZCA+IDApCiAJCQkJCW11c2ItPmVwMF9zdGF0ZSA9CiAJCQkJCQlNVVNCX0VQMF9TVEFHRV9TVEFUVVNJTjsKLQkJCQl9CiAJCQkJYnJlYWs7CiAKIAkJCS8qIHNlcXVlbmNlICMxIChJTiB0byBob3N0KSwgaW5jbHVkZXMgR0VUX1NUQVRVUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCmluZGV4IGQ1NDQ2MGEuLjc4YTIwOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKQEAgLTg0Myw3ICs4NDMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3RnX2RldjsKIAotc3RhdGljIGludCBvdGdfaW5pdChzdHJ1Y3QgaXNwMTMwMSAqaXNwKQorc3RhdGljIGludCBpc3AxMzAxX290Z19pbml0KHN0cnVjdCBpc3AxMzAxICppc3ApCiB7CiAJdTMyIGw7CiAKQEAgLTEyNzUsNyArMTI3NSw3IEBACiBzdGF0aWMgaW50IGlzcDEzMDFfb3RnX2VuYWJsZShzdHJ1Y3QgaXNwMTMwMSAqaXNwKQogewogCXBvd2VyX3VwKGlzcCk7Ci0Jb3RnX2luaXQoaXNwKTsKKwlpc3AxMzAxX290Z19pbml0KGlzcCk7CiAKIAkvKiBOT1RFOiAgc2luY2Ugd2UgZG9uJ3QgY2hhbmdlIHRoaXMsIHRoaXMgcHJvdmlkZXMKIAkgKiBhIGZldyBtb3JlIGludGVycnVwdHMgdGhhbiBhcmUgc3RyaWN0bHkgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBmOTk0OThmLi4yMTZmMTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlICJmdGRpX3Npby5oIgorI2luY2x1ZGUgImZ0ZGlfc2lvX2lkcy5oIgogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCA0NTg2YTI0Li5iMGUwZDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMSw3ICsxLDEwIEBACiAvKgotICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0KKyAqIERyaXZlciBkZWZpbml0aW9ucyBmb3IgdGhlIEZUREkgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBDb252ZXJ0ZXIgLQogICoga25vd24gYXMgRlRESV9TSU8gKFNlcmlhbCBJbnB1dC9PdXRwdXQgYXBwbGljYXRpb24gb2YgdGhlIGNoaXBzZXQpCiAgKgorICogRm9yIFVTQiB2ZW5kb3IvcHJvZHVjdCBJRHMgKFZJRC9QSUQpLCBwbGVhc2Ugc2VlIGZ0ZGlfc2lvX2lkcy5oCisgKgorICoKICAqIFRoZSBleGFtcGxlIEkgaGF2ZSBpcyBrbm93biBhcyB0aGUgVVNDLTEwMDAgd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20KICAqIGh0dHA6Ly93d3cuZHNlLmNvLm56IC0gY2F0IG5vIFhINDIxNCBJdCBsb29rcyBzaW1pbGFyIHRvIHRoaXM6CiAgKiBodHRwOi8vd3d3LmRhbnNkYXRhLmNvbS91c2JzZXIuaHRtIGJ1dCBJIGNhbid0IGJlIHN1cmUgVGhlcmUgYXJlIG90aGVyCkBAIC0xNyw4ODEgKzIwLDggQEAKICAqIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSBmb3JtZXJseSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLSB3cm90ZSB0aGUKICAqIEZURElfU0lPIGltcGxlbWVudGF0aW9uLgogICoKLSAqIFBoaWxpcHAgR8O8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcwotICogZnJvbSBSdWRvbGYgR3VnbGVyCi0gKgogICovCiAKLSNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBGVERJX1NJT19QSUQJMHg4MzcyCS8qIFByb2R1Y3QgSWQgU0lPIGFwcGxpY2F0aW9uIG9mIDhVMTAwQVggICovCi0jZGVmaW5lIEZURElfOFUyMzJBTV9QSUQgMHg2MDAxIC8qIFNpbWlsYXIgZGV2aWNlIHRvIFNJTyBhYm92ZSAqLwotI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCi0jZGVmaW5lIEZURElfOFUyMjMyQ19QSUQgMHg2MDEwIC8qIER1YWwgY2hhbm5lbCBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV8yMzJSTF9QSUQgIDB4RkJGQSAgLyogUHJvZHVjdCBJRCBmb3IgRlQyMzJSTCAqLwotI2RlZmluZSBGVERJXzQyMzJIX1BJRCAweDYwMTEgLyogUXVhZCBjaGFubmVsIGhpLXNwZWVkIGRldmljZSAqLwotI2RlZmluZSBGVERJX1JFTEFJU19QSUQJMHhGQTEwICAvKiBSZWxhaXMgZGV2aWNlIGZyb20gUnVkb2xmIEd1Z2xlciAqLwotI2RlZmluZSBGVERJX05GX1JJQ19WSUQJMHgwRENECS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9VU0JYXzcwN19QSUQgMHhGODU3CS8qIEFEU1RlY2ggSVIgQmxhc3RlciBVU0JYLTcwNyAqLwotCi0vKiBMYXJzZW4gYW5kIEJydXNnYWFyZCBBbHRpVHJhY2svVVNCdHJhY2sgICovCi0jZGVmaW5lIExBUlNFTkJSVVNHQUFSRF9WSUQJCTB4MEZEOAotI2RlZmluZSBMQl9BTFRJVFJBQ0tfUElECQkweDAwMDEKLQotLyogd3d3LmNhbnVzYi5jb20gTGF3aWNlbCBDQU5VU0IgZGV2aWNlICovCi0jZGVmaW5lIEZURElfQ0FOVVNCX1BJRCAweEZGQTggLyogUHJvZHVjdCBJZCAqLwotCi0vKiBBbHBoYU1pY3JvIENvbXBvbmVudHMgQU1DLTIzMlVTQjAxIGRldmljZSAqLwotI2RlZmluZSBGVERJX0FNQzIzMl9QSUQgMHhGRjAwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogd3d3LmNhbmRhcHRlci5jb20gRXdlcnQgRW5lcmd5IFN5c3RlbXMgQ0FOZGFwdGVyIGRldmljZSAqLwotI2RlZmluZSBGVERJX0NBTkRBUFRFUl9QSUQgMHg5RjgwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogU0NTIEhGIFJhZGlvIE1vZGVtcyBQSUQncyAoaHR0cDovL3d3dy5zY3MtcHRjLmNvbSkgKi8KLS8qIHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzBfUElEIDB4RDAxMCAgICAvKiBTQ1MgUFRDLUlJdXNiICovCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8xX1BJRCAweEQwMTEgICAgLyogU0NTIFRyYWNrZXIgLyBEU1AgVE5DICovCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8yX1BJRCAweEQwMTIKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzNfUElEIDB4RDAxMwotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNF9QSUQgMHhEMDE0Ci0jZGVmaW5lIEZURElfU0NTX0RFVklDRV81X1BJRCAweEQwMTUKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzZfUElEIDB4RDAxNgotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfN19QSUQgMHhEMDE3Ci0KLS8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UgKGh0dHA6Ly93d3cuYWN0LXNvbHV0aW9ucy5jb20vSG9tZVByby5odG0pICovCi0jZGVmaW5lIEZURElfQUNUWldBVkVfUElECTB4RjJEMAotCi0KLS8qIHd3dy5zdGFydGluZy1wb2ludC1zeXN0ZW1zLmNvbSDCtUNoYW1lbGVvbiBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9NSUNST19DSEFNRUxFT05fUElECTB4Q0FBMAkvKiBQcm9kdWN0IElkICovCi0KLS8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLwotI2RlZmluZSBGVERJX0lSVFJBTlNfUElEIDB4RkM2MCAvKiBQcm9kdWN0IElkICovCi0KLQotLyogd3d3LnRob3VnaHR0ZWNobm9sb2d5LmNvbS8gVFQtVVNCIHByb3ZpZGUgd2l0aCBwcm9jb21wIHVzZSBmdGRpX3NpbyAqLwotI2RlZmluZSBGVERJX1RUVVNCX1BJRCAweEZGMjAgLyogUHJvZHVjdCBJZCAqLwotCi0vKiBpUGx1cyBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9JUExVU19QSUQgMHhEMDcwIC8qIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9JUExVUzJfUElEIDB4RDA3MSAvKiBQcm9kdWN0IElkICovCi0KLS8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KLSNkZWZpbmUgRlRESV9ETVg0QUxMIDB4Qzg1MAotCi0vKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLwotI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAotI2RlZmluZSBGVERJX09QRU5EQ0NfU05JRkZFUl9QSUQJMHhCRkQ5Ci0jZGVmaW5lIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQJMHhCRkRBCi0jZGVmaW5lIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRAkweEJGREIKLQotLyogU3Byb2cgSUkgKEFuZHJldyBDcm9zbGFuZCdzIFNwcm9nSUkgRENDIGludGVyZmFjZSkgKi8KLSNkZWZpbmUgRlRESV9TUFJPR19JSQkJMHhGMEM4Ci0KLS8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCi0vKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZSBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZSAqLwotI2RlZmluZSBGVERJX1hGXzYzMl9QSUQgMHhGQzA4CS8qIDYzMjogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzYzNF9QSUQgMHhGQzA5CS8qIDYzNDogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzU0N19QSUQgMHhGQzBBCS8qIDU0NzogVHdvIGxpbmUgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzYzM19QSUQgMHhGQzBCCS8qIDYzMzogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSB3aXRoIEtleXMgKi8KLSNkZWZpbmUgRlRESV9YRl82MzFfUElEIDB4RkMwQwkvKiA2MzE6IDIweDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82MzVfUElEIDB4RkMwRAkvKiA2MzU6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82NDBfUElEIDB4RkMwRQkvKiA2NDA6IFR3byBsaW5lIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82NDJfUElEIDB4RkMwRgkvKiA2NDI6IFR3byBsaW5lIERpc3BsYXkgKi8KLQotLyogVmlkZW8gTmV0d29ya3MgTGltaXRlZCAvIEhvbWVjaG9pY2UgaW4gdGhlIFVLIHVzZSBhbiBmdGRpLWJhc2VkIGRldmljZSBmb3IgdGhlaXIgMU1iICovCi0vKiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZCBieSB0aGUgdXNiIGRldmljZSBzdXBwbGllZCAqLwotLyogKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KLSNkZWZpbmUgRlRESV9WTkhDUENVU0JfRF9QSUQgMHhmZTM4IC8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFBDREogdXNlIGZ0ZGkgYmFzZWQgZGotY29udHJvbGxlcnMuICBUaGUgZm9sbG93aW5nIFBJRCBpcyBmb3IgdGhlaXIgREFDLTIgZGV2aWNlCi0gKiBodHRwOi8vd3d3LnBjZGpoYXJkd2FyZS5jb20vREFDMi5hc3AgKFBJRCBzZW50IGJ5IFdvdXRlciBQYWVzZW4pCi0gKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwotI2RlZmluZSBGVERJX1BDREpfREFDMl9QSUQgMHhGQTg4Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAotICogd2hpY2ggYXJlIHRoZSBGVDIzMkJNICggc2ltaWxhciB0byB0aGUgOFUyMzJBTSApCi0gKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMV9QSUQgICAgICAweEZBMDEgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNF9QSUQgICAgICAweEZBMDQgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLQotLyogT09DRGxpbmsgYnkgSm9lcm4gS2FpcGYgPGpvZXJua0B3ZWIuZGU+Ci0gKiAoaHR0cDovL3d3dy5qb2Vybm9ubGluZS5kZS9kdy9kb2t1LnBocD9pZD1zdGFydCZpZHg9cHJvamVjdHM6b29jZGxpbmspICovCi0jZGVmaW5lIEZURElfT09DRExJTktfUElECTB4YmFmOAkvKiBBbW9udGVjIEpUQUdrZXkgKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBGVERJIFJhbmdlCi0gKiBBbnl0aGluZyBpbiB0aGlzIHJhbmdlIHdpbGwgdXNlIGFuIEZUMjMyUkwuCi0gKi8KLSNkZWZpbmUgTVRYT1JCX1ZJRAkJCTB4MUIzRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAwX1BJRAkweDAxMDAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMV9QSUQJMHgwMTAxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDJfUElECTB4MDEwMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAzX1BJRAkweDAxMDMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNF9QSUQJMHgwMTA0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDVfUElECTB4MDEwNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA2X1BJRAkweDAxMDYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwN19QSUQJMHgwMTA3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDhfUElECTB4MDEwOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA5X1BJRAkweDAxMDkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQV9QSUQJMHgwMTBBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEJfUElECTB4MDEwQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBDX1BJRAkweDAxMEMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRF9QSUQJMHgwMTBECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEVfUElECTB4MDEwRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBGX1BJRAkweDAxMEYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMF9QSUQJMHgwMTEwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTFfUElECTB4MDExMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEyX1BJRAkweDAxMTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExM19QSUQJMHgwMTEzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTRfUElECTB4MDExNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE1X1BJRAkweDAxMTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNl9QSUQJMHgwMTE2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTdfUElECTB4MDExNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE4X1BJRAkweDAxMTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOV9QSUQJMHgwMTE5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUFfUElECTB4MDExQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFCX1BJRAkweDAxMUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQ19QSUQJMHgwMTFDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMURfUElECTB4MDExRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFFX1BJRAkweDAxMUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRl9QSUQJMHgwMTFGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjBfUElECTB4MDEyMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIxX1BJRAkweDAxMjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMl9QSUQJMHgwMTIyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjNfUElECTB4MDEyMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI0X1BJRAkweDAxMjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNV9QSUQJMHgwMTI1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjZfUElECTB4MDEyNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI3X1BJRAkweDAxMjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyOF9QSUQJMHgwMTI4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjlfUElECTB4MDEyOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJBX1BJRAkweDAxMkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQl9QSUQJMHgwMTJCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkNfUElECTB4MDEyQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJEX1BJRAkweDAxMkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRV9QSUQJMHgwMTJFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkZfUElECTB4MDEyRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMwX1BJRAkweDAxMzAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMV9QSUQJMHgwMTMxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzJfUElECTB4MDEzMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMzX1BJRAkweDAxMzMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNF9QSUQJMHgwMTM0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzVfUElECTB4MDEzNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM2X1BJRAkweDAxMzYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzN19QSUQJMHgwMTM3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzhfUElECTB4MDEzOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM5X1BJRAkweDAxMzkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQV9QSUQJMHgwMTNBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0JfUElECTB4MDEzQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNDX1BJRAkweDAxM0MKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRF9QSUQJMHgwMTNECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0VfUElECTB4MDEzRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNGX1BJRAkweDAxM0YKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0MF9QSUQJMHgwMTQwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDFfUElECTB4MDE0MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQyX1BJRAkweDAxNDIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0M19QSUQJMHgwMTQzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDRfUElECTB4MDE0NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ1X1BJRAkweDAxNDUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Nl9QSUQJMHgwMTQ2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDdfUElECTB4MDE0NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ4X1BJRAkweDAxNDgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OV9QSUQJMHgwMTQ5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEFfUElECTB4MDE0QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRCX1BJRAkweDAxNEIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Q19QSUQJMHgwMTRDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNERfUElECTB4MDE0RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRFX1BJRAkweDAxNEUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Rl9QSUQJMHgwMTRGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTBfUElECTB4MDE1MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUxX1BJRAkweDAxNTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ml9QSUQJMHgwMTUyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTNfUElECTB4MDE1MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU0X1BJRAkweDAxNTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NV9QSUQJMHgwMTU1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTZfUElECTB4MDE1NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU3X1BJRAkweDAxNTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1OF9QSUQJMHgwMTU4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTlfUElECTB4MDE1OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVBX1BJRAkweDAxNUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ql9QSUQJMHgwMTVCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUNfUElECTB4MDE1QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVEX1BJRAkweDAxNUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RV9QSUQJMHgwMTVFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUZfUElECTB4MDE1RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYwX1BJRAkweDAxNjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MV9QSUQJMHgwMTYxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjJfUElECTB4MDE2MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYzX1BJRAkweDAxNjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2NF9QSUQJMHgwMTY0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjVfUElECTB4MDE2NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY2X1BJRAkweDAxNjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2N19QSUQJMHgwMTY3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjhfUElECTB4MDE2OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY5X1BJRAkweDAxNjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2QV9QSUQJMHgwMTZBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkJfUElECTB4MDE2QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZDX1BJRAkweDAxNkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2RF9QSUQJMHgwMTZECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkVfUElECTB4MDE2RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZGX1BJRAkweDAxNkYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3MF9QSUQJMHgwMTcwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzFfUElECTB4MDE3MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcyX1BJRAkweDAxNzIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3M19QSUQJMHgwMTczCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzRfUElECTB4MDE3NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc1X1BJRAkweDAxNzUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Nl9QSUQJMHgwMTc2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzdfUElECTB4MDE3NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc4X1BJRAkweDAxNzgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OV9QSUQJMHgwMTc5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0FfUElECTB4MDE3QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdCX1BJRAkweDAxN0IKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Q19QSUQJMHgwMTdDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0RfUElECTB4MDE3RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdFX1BJRAkweDAxN0UKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Rl9QSUQJMHgwMTdGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODBfUElECTB4MDE4MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgxX1BJRAkweDAxODEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ml9QSUQJMHgwMTgyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODNfUElECTB4MDE4MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg0X1BJRAkweDAxODQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NV9QSUQJMHgwMTg1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODZfUElECTB4MDE4NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg3X1BJRAkweDAxODcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4OF9QSUQJMHgwMTg4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODlfUElECTB4MDE4OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThBX1BJRAkweDAxOEEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ql9QSUQJMHgwMThCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOENfUElECTB4MDE4QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThEX1BJRAkweDAxOEQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RV9QSUQJMHgwMThFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEZfUElECTB4MDE4RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkwX1BJRAkweDAxOTAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MV9QSUQJMHgwMTkxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTJfUElECTB4MDE5MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkzX1BJRAkweDAxOTMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5NF9QSUQJMHgwMTk0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTVfUElECTB4MDE5NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk2X1BJRAkweDAxOTYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5N19QSUQJMHgwMTk3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOThfUElECTB4MDE5OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk5X1BJRAkweDAxOTkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5QV9QSUQJMHgwMTlBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUJfUElECTB4MDE5QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlDX1BJRAkweDAxOUMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5RF9QSUQJMHgwMTlECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUVfUElECTB4MDE5RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlGX1BJRAkweDAxOUYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMF9QSUQJMHgwMUEwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTFfUElECTB4MDFBMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEyX1BJRAkweDAxQTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBM19QSUQJMHgwMUEzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTRfUElECTB4MDFBNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE1X1BJRAkweDAxQTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNl9QSUQJMHgwMUE2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTdfUElECTB4MDFBNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE4X1BJRAkweDAxQTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOV9QSUQJMHgwMUE5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUFfUElECTB4MDFBQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFCX1BJRAkweDAxQUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQ19QSUQJMHgwMUFDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQURfUElECTB4MDFBRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFFX1BJRAkweDAxQUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRl9QSUQJMHgwMUFGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjBfUElECTB4MDFCMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIxX1BJRAkweDAxQjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMl9QSUQJMHgwMUIyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjNfUElECTB4MDFCMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI0X1BJRAkweDAxQjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNV9QSUQJMHgwMUI1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjZfUElECTB4MDFCNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI3X1BJRAkweDAxQjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCOF9QSUQJMHgwMUI4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjlfUElECTB4MDFCOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJBX1BJRAkweDAxQkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQl9QSUQJMHgwMUJCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkNfUElECTB4MDFCQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJEX1BJRAkweDAxQkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRV9QSUQJMHgwMUJFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkZfUElECTB4MDFCRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMwX1BJRAkweDAxQzAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMV9QSUQJMHgwMUMxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzJfUElECTB4MDFDMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMzX1BJRAkweDAxQzMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNF9QSUQJMHgwMUM0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzVfUElECTB4MDFDNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM2X1BJRAkweDAxQzYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDN19QSUQJMHgwMUM3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzhfUElECTB4MDFDOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM5X1BJRAkweDAxQzkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQV9QSUQJMHgwMUNBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0JfUElECTB4MDFDQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNDX1BJRAkweDAxQ0MKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRF9QSUQJMHgwMUNECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0VfUElECTB4MDFDRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNGX1BJRAkweDAxQ0YKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMF9QSUQJMHgwMUQwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDFfUElECTB4MDFEMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQyX1BJRAkweDAxRDIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEM19QSUQJMHgwMUQzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDRfUElECTB4MDFENAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ1X1BJRAkweDAxRDUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENl9QSUQJMHgwMUQ2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDdfUElECTB4MDFENwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ4X1BJRAkweDAxRDgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOV9QSUQJMHgwMUQ5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREFfUElECTB4MDFEQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURCX1BJRAkweDAxREIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQ19QSUQJMHgwMURDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRERfUElECTB4MDFERAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURFX1BJRAkweDAxREUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERl9QSUQJMHgwMURGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTBfUElECTB4MDFFMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUxX1BJRAkweDAxRTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMl9QSUQJMHgwMUUyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTNfUElECTB4MDFFMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU0X1BJRAkweDAxRTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNV9QSUQJMHgwMUU1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTZfUElECTB4MDFFNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU3X1BJRAkweDAxRTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFOF9QSUQJMHgwMUU4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTlfUElECTB4MDFFOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVBX1BJRAkweDAxRUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQl9QSUQJMHgwMUVCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUNfUElECTB4MDFFQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVEX1BJRAkweDAxRUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRV9QSUQJMHgwMUVFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUZfUElECTB4MDFFRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYwX1BJRAkweDAxRjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMV9QSUQJMHgwMUYxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjJfUElECTB4MDFGMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYzX1BJRAkweDAxRjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNF9QSUQJMHgwMUY0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjVfUElECTB4MDFGNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY2X1BJRAkweDAxRjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGN19QSUQJMHgwMUY3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjhfUElECTB4MDFGOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY5X1BJRAkweDAxRjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQV9QSUQJMHgwMUZBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkJfUElECTB4MDFGQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZDX1BJRAkweDAxRkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRF9QSUQJMHgwMUZECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkVfUElECTB4MDFGRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZGX1BJRAkweDAxRkYKLQotCi0KLS8qIEludGVyYmlvbWV0cmljcyBVU0IgSS9PIEJvYXJkICovCi0vKiBEZXZlbG9wZWQgZm9yIEludGVyYmlvbWV0cmljcyBieSBSdWRvbGYgR3VnbGVyICovCi0jZGVmaW5lIElOVEVSQklPTUVUUklDU19WSUQgICAgICAgICAgICAgIDB4MTIwOQotI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQgICAgICAweDEwMDIKLSNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQgMHgxMDA2Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgUGVybGUgU3lzdGVtcwotICogVWx0cmFQb3J0IFVTQiBzZXJpYWwgY29udmVydGVycwotICovCi0jZGVmaW5lIEZURElfUEVSTEVfVUxUUkFQT1JUX1BJRCAweEYwQzAJLyogUGVybGUgVWx0cmFQb3J0IFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBTZWFsZXZlbCBTZWFMSU5LKyBhZGFwdGVycy4KLSAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAotICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCi0gKi8KLSNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMTAyX1BJRAkweDIxMDIJLyogU2VhTElOSys0ODUgKDIxMDIpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDZfUElECTB4OTAyMAkvKiBTZWFMSU5LKzQyMiAoMjEwNikgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDFfMl9QSUQJMHgyMjIxCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAyXzFfUElECTB4MjIxMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDNfMV9QSUQJMHgyMjEzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDNfMl9QSUQJMHgyMjIzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAxXzJfUElECTB4MjQyMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMV8zX1BJRAkweDI0MzEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzFfUElECTB4MjQxMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMl8yX1BJRAkweDI0MjIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzRfUElECTB4MjQ0MgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18xX1BJRAkweDI0MTMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18zX1BJRAkweDI0MzMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM180X1BJRAkweDI0NDMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfMl9QSUQJMFgyODIxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzNfUElECTBYMjgzMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfNV9QSUQJMFgyODUxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzZfUElECTBYMjg2MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDYgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfOF9QSUQJMFgyODgxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgOCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzFfUElECTBYMjgxMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfM19QSUQJMFgyODMyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzRfUElECTBYMjg0MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfNl9QSUQJMFgyODYyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzdfUElECTBYMjg3MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDcgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfMV9QSUQJMFgyODEzCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfMl9QSUQJMFgyODIzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM180X1BJRAkwWDI4NDMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfNV9QSUQJMFgyODUzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM183X1BJRAkwWDI4NzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA3ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfOF9QSUQJMFgyODgzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgOCAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdHdvIEtPQklMIGNoaXBjYXJkIHRlcm1pbmFscy4KLSAqLwotI2RlZmluZSBLT0JJTF9WSUQJCTB4MGQ0NgkvKiBLT0JJTCBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgS09CSUxfQ09OVl9CMV9QSUQJMHgyMDIwCS8qIEtPQklMIEtvbnZlcnRlciBmb3IgQjEgKi8KLSNkZWZpbmUgS09CSUxfQ09OVl9LQUFOX1BJRAkweDIwMjEJLyogS09CSUxfS29udmVydGVyIGZvciBLQUFOICovCi0KLS8qCi0gKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgotICovCi0KLSNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2Ci0jZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAotCi0vKgotICogQVNLLmZyIGRldmljZXMKLSAqLwotI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KLQotLyoKLSAqIEZUREkgVVNCIFVBUlQgY2hpcHMgdXNlZCBpbiBjb25zdHJ1Y3Rpb24gcHJvamVjdHMgZnJvbSB0aGUKLSAqIEVsZWt0b3IgRWxlY3Ryb25pY3MgbWFnYXppbmUgKGh0dHA6Ly9lbGVrdG9yLWVsZWN0cm9uaWNzLmNvLnVrKQotICovCi0jZGVmaW5lIEVMRUtUT1JfVklECQkweDBDN0QKLSNkZWZpbmUgRUxFS1RPUl9GVDMyM1JfUElECTB4MDAwNQkvKiBSRklELVJlYWRlciwgaXNzdWUgMDktMjAwNiAqLwotCi0vKgotICogRFNTLTIwIFN5bmMgU3RhdGlvbiBmb3IgU29ueSBFcmljc3NvbiBQODAwCi0gKi8KLSNkZWZpbmUgRlRESV9EU1MyMF9QSUQgICAgICAgICAgMHhGQzgyCi0KLS8qCi0gKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKLSAqLwotI2RlZmluZSBGVERJX0hFX1RJUkExX1BJRAkweEZBNzgJLyogVGlyYS0xIElSIHRyYW5zY2VpdmVyICovCi0KLS8qIFVTQi1VSVJUIC0gQW4gaW5mcmFyZWQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIHVzaW5nIHRoZSA4VTIzMkFNIGNoaXAgKi8KLS8qIGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bSAqLwotI2RlZmluZSBGVERJX1VTQl9VSVJUX1BJRAkweEY4NTAJLyogUHJvZHVjdCBJZCAqLwotCi0vKiBUTkMtWCBVU0ItdG8tcGFja2V0LXJhZGlvIGFkYXB0ZXIsIHZlcnNpb25zIHByaW9yIHRvIDMuMCAoRExQIG1vZHVsZSkgKi8KLQotI2RlZmluZSBGVERJX1ROQ19YX1BJRAkJMHhFQkUwCi0KLS8qCi0gKiBFTFYgVVNCIGRldmljZXMgc3VibWl0dGVkIGJ5IENocmlzdGlhbiBBYnQgb2YgRUxWICh3d3cuZWx2LmRlKS4KLSAqIEFsbCBvZiB0aGVzZSBkZXZpY2VzIHVzZSBGVERJJ3MgdmVuZG9yIElEICgweDA0MDMpLgotICoKLSAqIFRoZSBwcmV2aW91c2x5IGluY2x1ZGVkIFBJRCBmb3IgdGhlIFVPIDEwMCBtb2R1bGUgd2FzIGluY29ycmVjdC4KLSAqIEluIGZhY3QsIHRoYXQgUElEIHdhcyBmb3IgRUxWJ3MgVVIgMTAwIFVTQi1SUzIzMiBjb252ZXJ0ZXIgKDB4RkI1OCkuCi0gKgotICogQXJtaW4gTGFldWdlciBvcmlnaW5hbGx5IHNlbnQgdGhlIFBJRCBmb3IgdGhlIFVNIDEwMCBtb2R1bGUuCi0gKi8KLSNkZWZpbmUgRlRESV9SMjAwMEtVX1RSVUVfUk5HCTB4RkI4MCAgLyogUjIwMDBLVSBUUlVFIFJORyAqLwotI2RlZmluZSBGVERJX0VMVl9VUjEwMF9QSUQJMHhGQjU4CS8qIFVTQi1SUzIzMi1VbXNldHplciAoVVIgMTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VTTEwMF9QSUQJMHhGQjVBCS8qIFVTQi1Nb2R1bCBVTSAxMDAgKi8KLSNkZWZpbmUgRlRESV9FTFZfVU8xMDBfUElECTB4RkI1QgkvKiBVU0ItTW9kdWwgVU8gMTAwICovCi0jZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KLS8qIEFkZGl0aW9uYWwgRUxWIFBJRHMgdGhhdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSBGVERJIEQyWFggZHJpdmVycyBvbgotICogTVMgV2luZG93cywgcmF0aGVyIHRoYW4gdGhlIEZUREkgVmlydHVhbCBDb20gUG9ydCBkcml2ZXJzLgotICogTWF5YmUgdGhlc2Ugd2lsbCBiZSBlYXNpZXIgdG8gdXNlIHdpdGggdGhlIGxpYmZ0ZGkvbGlidXNiIHVzZXItc3BhY2UKLSAqIGRyaXZlcnMsIG9yIHBvc3NpYmx5IHRoZSBDb21lZGkgZHJpdmVycyBpbiBzb21lIGNhc2VzLiAqLwotI2RlZmluZSBGVERJX0VMVl9DTEk3MDAwX1BJRAkweEZCNTkJLyogQ29tcHV0ZXItTGlnaHQtSW50ZXJmYWNlIChDTEkgNzAwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUFBTNzMzMF9QSUQJMHhGQjVDCS8qIFByb2Nlc3Nvci1Qb3dlci1TdXBwbHkgKFBQUyA3MzMwKSAqLwotI2RlZmluZSBGVERJX0VMVl9URk0xMDBfUElECTB4RkI1RAkvKiBUZW1wZXJhcnR1ci1GZXVjaHRlIE1lc3NnZXJhZXQgKFRGTSAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1VERjc3X1BJRAkweEZCNUUJLyogVVNCIERDRiBGdW5rdXJoIChVREYgNzcpICovCi0jZGVmaW5lIEZURElfRUxWX1VJTzg4X1BJRAkweEZCNUYJLyogVVNCLUkvTyBJbnRlcmZhY2UgKFVJTyA4OCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVUFEOF9QSUQJMHhGMDY4CS8qIFVTQi1BRC1XYW5kbGVyIChVQUQgOCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVURBN19QSUQJMHhGMDY5CS8qIFVTQi1EQS1XYW5kbGVyIChVREEgNykgKi8KLSNkZWZpbmUgRlRESV9FTFZfVVNJMl9QSUQJMHhGMDZBCS8qIFVTQi1TY2hyaXR0bW90b3Jlbi1JbnRlcmZhY2UgKFVTSSAyKSAqLwotI2RlZmluZSBGVERJX0VMVl9UMTEwMF9QSUQJMHhGMDZCCS8qIFRoZXJtb21ldGVyIChUIDExMDApICovCi0jZGVmaW5lIEZURElfRUxWX1BDRDIwMF9QSUQJMHhGMDZDCS8qIFBDLURhdGVubG9nZ2VyIChQQ0QgMjAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VTEEyMDBfUElECTB4RjA2RAkvKiBVU0ItTENELUFuc3RldWVydW5nIChVTEEgMjAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9GSFoxMDAwUENfUElECTB4RjA2RgkvKiBGSFogMTAwMCBQQyAqLwotI2RlZmluZSBGVERJX0VMVl9DU0k4X1BJRAkweEUwRjAJLyogQ29tcHV0ZXItU2NoYWx0LUludGVyZmFjZSAoQ1NJIDgpICovCi0jZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUENLMTAwX1BJRAkweEUwRjIJLyogUEMtS2FiZWx0ZXN0ZXIgKFBDSyAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1JGUDUwMF9QSUQJMHhFMEYzCS8qIEhGLUxlaXN0dW5nc21lc3NlciAoUkZQIDUwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfRlMyMFNJR19QSUQJMHhFMEY0CS8qIFNpZ25hbGdlYmVyIChGUyAyMCBTSUcpICovCi0jZGVmaW5lIEZURElfRUxWX1dTMzAwUENfUElECTB4RTBGNgkvKiBQQy1XZXR0ZXJzdGF0aW9uIChXUyAzMDAgUEMpICovCi0jZGVmaW5lIEZURElfRUxWX0ZIWjEzMDBQQ19QSUQJMHhFMEU4CS8qIEZIWiAxMzAwIFBDICovCi0jZGVmaW5lIEZURElfRUxWX1dTNTAwX1BJRAkweEUwRTkJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgNTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9IUzQ4NV9QSUQJMHhFMEVBCS8qIFVTQiB0byBSUy00ODUgYWRhcHRlciAqLwotI2RlZmluZSBGVERJX0VMVl9FTTEwMTBQQ19QSUQJMHhFMEVGCS8qIEVuZ2VyeSBtb25pdG9yIEVNIDEwMTAgUEMgKi8KLSNkZWZpbmUgRlRESV9QSElfRklTQ09fUElEICAgICAgMHhFNDBCICAvKiBQSEkgRmlzY28gVVNCIHRvIFNlcmlhbCBjYWJsZSAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcwotICovCi0jZGVmaW5lIElEVEVDSF9WSUQJCTB4MEFDRAkvKiBJRCBURUNIIFZlbmRvciBJRCAqLwotI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKLSAqLwotI2RlZmluZSBPQ1RfVklECQkJMHgwQjM5CS8qIE9DVCB2ZW5kb3IgSUQgKi8KLS8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KLS8qIEFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoQXVzKSBYSDY0NTEgKi8KLS8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCBoYXJkd2FyZSB2ZXJzaW9uIDEgKi8KLSNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCi0KLS8qIGFuIGluZnJhcmVkIHJlY2VpdmVyIGZvciB1c2VyIGFjY2VzcyBjb250cm9sIHdpdGggSVIgdGFncyAqLwotI2RlZmluZSBGVERJX1BJRUdST1VQX1BJRAkweEYyMDgJLyogUHJvZHVjdCBJZCAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIEFydGVtaXMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCi0gKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmFydGVtaXNjY2QuY28udWsvCi0gKi8KLSNkZWZpbmUgRlRESV9BUlRFTUlTX1BJRAkweERGMjgJLyogQWxsIEFydGVtaXMgQ2FtZXJhcyAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIEFUSUsgSW5zdHJ1bWVudHMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCi0gKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmF0aWstaW5zdHJ1bWVudHMuY29tLwotICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNl9QSUQJMHhERjMwCS8qIEFUSUsgQVRLLTE2IEdyYXlzY2FsZSBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2Q19QSUQJMHhERjMyCS8qIEFUSUsgQVRLLTE2QyBDb2xvdXIgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNkhSX1BJRAkweERGMzEJLyogQVRJSyBBVEstMTZIUiBHcmF5c2NhbGUgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNkhSQ19QSUQJMHhERjMzCS8qIEFUSUsgQVRLLTE2SFJDIENvbG91ciBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2SUNfUElEICAgMHhERjM1ICAvKiBBVElLIEFUSy0xNklDIEdyYXlzY2FsZSBDYW1lcmEgKi8KLQotLyoKLSAqIFByb3RlZ28gcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMQkweEZDNzAJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotI2RlZmluZSBQUk9URUdPX1IyWDAJCTB4RkM3MQkvKiBSMjAwLVVTQiBUUk5HIHVuaXQgKFIyMTAsIFIyMjAsIGFuZCBSMjMwKSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMwkweEZDNzIJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfNAkweEZDNzMJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotCi0vKgotICogR3VkZSBBbmFsb2ctIHVuZCBEaWdpdGFsc3lzdGVtZSBHbWJICi0gKi8KLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MDhfUElEICAgIDB4RTgwOAotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOV9QSUQgICAgMHhFODA5Ci0jZGVmaW5lIEZURElfR1VERUFEU19FODBBX1BJRCAgICAweEU4MEEKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEJfUElEICAgIDB4RTgwQgotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQ19QSUQgICAgMHhFODBDCi0jZGVmaW5lIEZURElfR1VERUFEU19FODBEX1BJRCAgICAweEU4MEQKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEVfUElEICAgIDB4RTgwRQotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRl9QSUQgICAgMHhFODBGCi0jZGVmaW5lIEZURElfR1VERUFEU19FODg4X1BJRCAgICAweEU4ODggIC8qIEV4cGVydCBJU0ROIENvbnRyb2wgVVNCICovCi0jZGVmaW5lIEZURElfR1VERUFEU19FODg5X1BJRCAgICAweEU4ODkgIC8qIFVTQiBSUy0yMzIgT3B0b0JyaWRnZSAqLwotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4QV9QSUQgICAgMHhFODhBCi0jZGVmaW5lIEZURElfR1VERUFEU19FODhCX1BJRCAgICAweEU4OEIKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OENfUElEICAgIDB4RTg4QwotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RF9QSUQgICAgMHhFODhECi0jZGVmaW5lIEZURElfR1VERUFEU19FODhFX1BJRCAgICAweEU4OEUKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OEZfUElEICAgIDB4RTg4RgotCi0vKgotICogTGlueCBUZWNobm9sb2dpZXMgcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCi0jZGVmaW5lIExJTlhfTUFTVEVSREVWRUwyX1BJRCAgIDB4RjQ0OSAgIC8qIExpbnggTWFzdGVyIERldmVsb3BtZW50IDIuMCAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QSAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8yX1BJRCAgIDB4RjQ0QyAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotCi0vKiBDQ1MgSW5jLiBJQ0RVL0lDRFU0MCBwcm9kdWN0IElEIC0gdGhlIEZUMjMyQk0gaXMgdXNlZCBpbiBhbiBpbi1jaXJjdWl0LWRlYnVnZ2VyICovCi0vKiB1bml0IGZvciBQSUMxNidzL1BJQzE4J3MgKi8KLSNkZWZpbmUgRlRESV9DQ1NJQ0RVMjBfMF9QSUQgICAgMHhGOUQwCi0jZGVmaW5lIEZURElfQ0NTSUNEVTQwXzFfUElEICAgIDB4RjlEMQotI2RlZmluZSBGVERJX0NDU01BQ0hYXzJfUElEICAgICAweEY5RDIKLSNkZWZpbmUgRlRESV9DQ1NMT0FEX05fR09fM19QSUQgMHhGOUQzCi0jZGVmaW5lIEZURElfQ0NTSUNEVTY0XzRfUElEICAgIDB4RjlENAotI2RlZmluZSBGVERJX0NDU1BSSU1FOF81X1BJRCAgICAweEY5RDUKLQotLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KLSNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAotCi0vKgotICogSW50cmVwaWQgQ29udHJvbCBTeXN0ZW1zIChodHRwOi8vd3d3LmludHJlcGlkY3MuY29tLykgVmFsdWVDQU4gYW5kIE5lb1ZJCi0gKi8KLSNkZWZpbmUgSU5UUkVQSURfVklECQkweDA5M0MKLSNkZWZpbmUgSU5UUkVQSURfVkFMVUVDQU5fUElECTB4MDYwMQotI2RlZmluZSBJTlRSRVBJRF9ORU9WSV9QSUQJMHgwNzAxCi0KLS8qCi0gKiBGYWxjb20gV2lyZWxlc3MgQ29tbXVuaWNhdGlvbnMgR21iSAotICovCi0jZGVmaW5lIEZBTENPTV9WSUQJCTB4MEY5NAkvKiBWZW5kb3IgSWQgKi8KLSNkZWZpbmUgRkFMQ09NX1RXSVNUX1BJRAkweDAwMDEJLyogRmFsY29tIFR3aXN0IFVTQiBHUFJTIG1vZGVtICovCi0jZGVmaW5lIEZBTENPTV9TQU1CQV9QSUQJMHgwMDA1CS8qIEZhbGNvbSBTYW1iYSBVU0IgR1BSUyBtb2RlbSAqLwotCi0vKgotICogU1VVTlRPIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgRlRESV9TVVVOVE9fU1BPUlRTX1BJRAkweEY2ODAJLyogU3V1bnRvIFNwb3J0cyBpbnN0cnVtZW50ICovCi0KLS8qCi0gKiBPY2VhbmljIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgRlRESV9PQ0VBTklDX1BJRAkweEY0NjAgIC8qIE9jZWFuaWMgZGl2ZSBpbnN0cnVtZW50ICovCi0KLS8qCi0gKiBUVGkgKFRodXJsYnkgVGhhbmRhciBJbnN0cnVtZW50cykKLSAqLwotI2RlZmluZSBUVElfVklECQkJMHgxMDNFCS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBUVElfUUwzNTVQX1BJRAkJMHgwM0U4CS8qIFRUaSBRTDM1NVAgcG93ZXIgc3VwcGx5ICovCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgQiZCIEVsZWN0cm9uaWNzIHByb2R1Y3RzLgotICovCi0jZGVmaW5lIEJBTkRCX1ZJRAkJMHgwODU2CS8qIEImQiBFbGVjdHJvbmljcyBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgQkFOREJfVVNPVEw0X1BJRAkweEFDMDEJLyogVVNPVEw0IElzb2xhdGVkIFJTLTQ4NSBDb252ZXJ0ZXIgKi8KLSNkZWZpbmUgQkFOREJfVVNUTDRfUElECQkweEFDMDIJLyogVVNUTDQgUlMtNDg1IENvbnZlcnRlciAqLwotI2RlZmluZSBCQU5EQl9VU085TUwyX1BJRAkweEFDMDMJLyogVVNPOU1MMiBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTT1BUTDRfUElECTB4QUMxMQotI2RlZmluZSBCQU5EQl9VU1BUTDRfUElECTB4QUMxMgotI2RlZmluZSBCQU5EQl9VU085TUwyRFJfMl9QSUQJMHhBQzE2Ci0jZGVmaW5lIEJBTkRCX1VTTzlNTDJEUl9QSUQJMHhBQzE3Ci0jZGVmaW5lIEJBTkRCX1VTT1BUTDREUjJfUElECTB4QUMxOAkvKiBVU09QVEw0Ui0yIDItcG9ydCBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTT1BUTDREUl9QSUQJMHhBQzE5Ci0jZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzJXX1BJRAkweEFDMjUKLSNkZWZpbmUgQkFOREJfNDg1VVNCOUZfNFdfUElECTB4QUMyNgotI2RlZmluZSBCQU5EQl8yMzJVU0I5TV9QSUQJMHhBQzI3Ci0jZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzJXX1BJRAkweEFDMzMKLSNkZWZpbmUgQkFOREJfNDg1VVNCVEJfNFdfUElECTB4QUMzNAotI2RlZmluZSBCQU5EQl9UVEw1VVNCOU1fUElECTB4QUM0OQotI2RlZmluZSBCQU5EQl9UVEwzVVNCOU1fUElECTB4QUM1MAotI2RlZmluZSBCQU5EQl9aWl9QUk9HMV9VU0JfUElECTB4QkEwMgotCi0vKgotICogUk0gTWljaGFlbGlkZXMgQ0FOdmlldyBVU0IgKGh0dHA6Ly93d3cucm1jYW4uY29tKQotICogQ0FOIGZpZWxkYnVzIGludGVyZmFjZSBhZGFwdGVyLCBhZGRlZCBieSBwb3J0IEdtYkggd3d3LnBvcnQuZGUpCi0gKiBJYW4gQWJib3R0IGNoYW5nZWQgdGhlIG1hY3JvIG5hbWVzIGZvciBjb25zaXN0ZW5jeS4KLSAqLwotI2RlZmluZSBGVERJX1JNX0NBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCi0KLS8qCi0gKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKLSAqLwotCi0jZGVmaW5lCUVWRVJfRUNPX1BST19DRFMJMHhlNTIwCS8qIFJTLTIzMiBjb252ZXJ0ZXIgKi8KLQotLyoKLSAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAotICogVVNCLVRUWSBhY3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCi0gKiBhbmQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoaWNoIGFyZSB1c2VkIGJ5IHdoaWNoLgotICovCi0jZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAotI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKLQotLyoKLSAqIE1vYmlsaXR5IEVsZWN0cm9uaWNzIHByb2R1Y3RzLgotICovCi0jZGVmaW5lIE1PQklMSVRZX1ZJRAkJCTB4MTM0MgotI2RlZmluZSBNT0JJTElUWV9VU0JfU0VSSUFMX1BJRAkJMHgwMjAyCS8qIEVhc2lEb2NrIFVTQiAyMDAgc2VyaWFsICovCi0KLS8qCi0gKiBtaWNyb0hBTSBwcm9kdWN0IElEcyAoaHR0cDovL3d3dy5taWNyb2hhbS5jb20pLgotICogU3VibWl0dGVkIGJ5IEp1c3RpbiBCdXJrZXQgKEtMMVJMKSA8em9ydG9uQGp0YW4uY29tPgotICogYW5kIE1pa2UgU3R1ZGVyIChLNkVFUCkgPGs2ZWVwQGhhbXNvZnR3YXJlLm9yZz4uCi0gKiBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4gYWRkZWQgYSBmZXcgbW9yZSBmcm9tIHRoZSBkcml2ZXIgSU5GIGZpbGUuCi0gKi8KLSNkZWZpbmUgRlRESV9NSEFNX0tXX1BJRCAweEVFRTgJCS8qIFVTQi1LVyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1lTX1BJRCAweEVFRTkJCS8qIFVTQi1ZUyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k2X1BJRCAweEVFRUEJCS8qIFVTQi1ZNiBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k4X1BJRCAweEVFRUIJCS8qIFVTQi1ZOCBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX0lDX1BJRCAweEVFRUMJCS8qIFVTQi1JQyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX0RCOV9QSUQgMHhFRUVECS8qIFVTQi1EQjkgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9SUzIzMl9QSUQgMHhFRUVFCS8qIFVTQi1SUzIzMiBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k5X1BJRCAweEVFRUYJCS8qIFVTQi1ZOSBpbnRlcmZhY2UgKi8KLQotLyoKLSAqIEFjdGl2ZSBSb2JvdHMgcHJvZHVjdCBpZHMuCi0gKi8KLSNkZWZpbmUgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRAkweEU1NDgJLyogVVNCIGNvbW1zIGJvYXJkICovCi0KLS8qCi0gKiBYc2VucyBUZWNobm9sb2dpZXMgQlYgcHJvZHVjdHMgKGh0dHA6Ly93d3cueHNlbnMuY29tKS4KLSAqLwotI2RlZmluZSBYU0VOU19DT05WRVJURVJfMF9QSUQJMHhEMzg4Ci0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8xX1BJRAkweEQzODkKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzJfUElECTB4RDM4QQotI2RlZmluZSBYU0VOU19DT05WRVJURVJfM19QSUQJMHhEMzhCCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl80X1BJRAkweEQzOEMKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzVfUElECTB4RDM4RAotI2RlZmluZSBYU0VOU19DT05WRVJURVJfNl9QSUQJMHhEMzhFCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl83X1BJRAkweEQzOEYKLQotLyoKLSAqIFRlcmF0cm9uaWsgcHJvZHVjdCBpZHMuCi0gKiBTdWJtaXR0ZWQgYnkgTy4gV8O2bGZlbHNjaG5laWRlci4KLSAqLwotI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRAkgMHhFQzg4CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIFZDUCBkcml2ZXIgb24gd2luZG93cykgKi8KLSNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLwotCi0vKgotICogRXZvbHV0aW9uIFJvYm90aWNzIHByb2R1Y3RzIChodHRwOi8vd3d3LmV2b2x1dGlvbi5jb20vKS4KLSAqIFN1Ym1pdHRlZCBieSBTaGF3biBNLiBMYXZlbGxlLgotICovCi0jZGVmaW5lIEVWT0xVVElPTl9WSUQJCTB4REVFRQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgRVZPTFVUSU9OX0VSMV9QSUQJMHgwMzAwCS8qIEVSMSBDb250cm9sIE1vZHVsZSAqLwotI2RlZmluZSBFVk9fOFUyMzJBTV9QSUQJMHgwMkZGCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ00yIChGVDIzMkFNKSovCi0jZGVmaW5lIEVWT19IWUJSSURfUElECQkweDAzMDIJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEIChGVDIzMkJNKSovCi0jZGVmaW5lIEVWT19SQ000X1BJRAkJMHgwMzAzCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ000IFBJRCAqLwotCi0vKiBQeXJhbWlkIENvbXB1dGVyIEdtYkggKi8KLSNkZWZpbmUgRlRESV9QWVJBTUlEX1BJRAkweEU2QzgJLyogUHlyYW1pZCBBcHBsaWFuY2UgRGlzcGxheSAqLwotCi0vKgotICogTkRJICh3d3cubmRpZ2l0YWwuY29tKSBwcm9kdWN0IGlkcwotICovCi0jZGVmaW5lIEZURElfTkRJX0hVQ19QSUQJCTB4REE3MAkvKiBOREkgSG9zdCBVU0IgQ29udmVydGVyICovCi0jZGVmaW5lIEZURElfTkRJX1NQRUNUUkFfU0NVX1BJRAkweERBNzEJLyogTkRJIFNwZWN0cmEgU0NVICovCi0jZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8yX1BJRAkJMHhEQTcyCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMyICovCi0jZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8zX1BJRAkJMHhEQTczCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMzICovCi0jZGVmaW5lIEZURElfTkRJX0FVUk9SQV9TQ1VfUElECQkweERBNzQJLyogTkRJIEF1cm9yYSBTQ1UgKi8KLQotLyoKLSAqIFBvc2lmbGV4IGluYyByZXRhaWwgZXF1aXBtZW50IChodHRwOi8vd3d3LnBvc2lmbGV4LmNvbS50dykKLSAqLwotI2RlZmluZSBQT1NJRkxFWF9WSUQJCTB4MGQzYSAgLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFBPU0lGTEVYX1BQNzAwMF9QSUQJMHgwMzAwICAvKiBQUC03MDAwSUkgdGhlcm1hbCBwcmludGVyICovCi0KLS8qCi0gKiBXZXN0cmV4IEludGVybmF0aW9uYWwgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ29yeSBMZWUKLSAqLwotI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRAkweERDMDAJLyogTW9kZWwgNzc3ICovCi0jZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQJMHhEQzAxCS8qIE1vZGVsIDg5MDBGICovCi0KLS8qCi0gKiBSUi1DaXJLaXRzIExvY29CdWZmZXIgVVNCIChodHRwOi8vd3d3LnJyLWNpcmtpdHMuY29tKQotICovCi0jZGVmaW5lIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElECTB4YzdkMAkvKiBMb2NvQnVmZmVyIFVTQiAqLwotCi0vKgotICogRWNsbyAoaHR0cDovL3d3dy5lY2xvLnB0LykgcHJvZHVjdCBJRHMuCi0gKiBQSUQgMHhFQTkwIHN1Ym1pdHRlZCBieSBNYXJ0aW4gR3JpbGwuCi0gKi8KLSNkZWZpbmUgRlRESV9FQ0xPX0NPTV8xV0lSRV9QSUQJMHhFQTkwCS8qIENPTSB0byAxLVdpcmUgVVNCIGFkYXB0b3IgKi8KLQotLyoKLSAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQotICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KLSAqLwotCi0jZGVmaW5lIFBBUE9VQ0hfVklECQkJMHg1MDUwCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBQQVBPVUNIX1RNVV9QSUQJCQkweDA0MDAJLyogVE1VIFVTQiBUaGVybW9tZXRlciAqLwotI2RlZmluZSBQQVBPVUNIX1FVSURPNHg0X1BJRAkJMHgwOTAwCS8qIFF1aWRvIDQvNCBNb2R1bGUgKi8KLQotLyoKLSAqIEFDRyBJZGVudGlmaWNhdGlvbiBUZWNobm9sb2dpZXMgR21iSCBwcm9kdWN0cyAoaHR0cDovL3d3dy5hY2cuZGUvKS4KLSAqIFN1Ym1pdHRlZCBieSBhbnRvbiAtYXQtIGdvdG8xMCAtZG90LSBvcmcuCi0gKi8KLSNkZWZpbmUgRlRESV9BQ0dfSEZEVUFMX1BJRAkJMHhERDIwCS8qIEhGIER1YWwgSVNPIFJlYWRlciAoUkZJRCkgKi8KLQotLyoKLSAqIFlvc3QgRW5naW5lZXJpbmcsIEluYy4gcHJvZHVjdHMgKHd3dy55b3N0ZW5naW5lZXJpbmcuY29tKS4KLSAqIFBJRCAweEUwNTAgc3VibWl0dGVkIGJ5IEFhcm9uIFByb3NlLgotICovCi0jZGVmaW5lIEZURElfWUVJX1NFUlZPQ0VOVEVSMzFfUElECTB4RTA1MAkvKiBZRUkgU2Vydm9DZW50ZXIzLjEgVVNCICovCi0KLS8qCi0gKiBUaG9yTGFicyBVU0IgbW90b3IgZHJpdmVycwotICovCi0jZGVmaW5lIEZURElfVEhPUkxBQlNfUElECQkweGZhZjAgLyogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMgKi8KLQotLyoKLSAqIFRlc3RvIHByb2R1Y3RzIChodHRwOi8vd3d3LnRlc3RvLmNvbS8pCi0gKiBTdWJtaXR0ZWQgYnkgQ29saW4gTGVyb3kKLSAqLwotI2RlZmluZSBURVNUT19WSUQJCQkweDEyOEQKLSNkZWZpbmUgVEVTVE9fVVNCX0lOVEVSRkFDRV9QSUQJCTB4MDAwMQotCi0vKgotICogR2FtbWEgU2NvdXQgKGh0dHA6Ly9nYW1tYS1zY291dC5jb20vKS4gU3VibWl0dGVkIGJ5IHJzY0BydW50dXguY29tLgotICovCi0jZGVmaW5lIEZURElfR0FNTUFfU0NPVVRfUElECQkweEQ2NzgJLyogR2FtbWEgU2NvdXQgb25saW5lICovCi0KLS8qCi0gKiBUYWN0cml4IE9wZW5Qb3J0IChFQ1UpIGRldmljZXMuCi0gKiBPcGVuUG9ydCAxLjNNIHN1Ym1pdHRlZCBieSBEb25vdXIgU2l6ZW1vcmUuCi0gKiBPcGVuUG9ydCAxLjNTIGFuZCAxLjNVIHN1Ym1pdHRlZCBieSBJYW4gQWJib3R0LgotICovCi0jZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM01fUElECTB4Q0M0OAkvKiBPcGVuUG9ydCAxLjMgTWl0c3ViaXNoaSAqLwotI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNTX1BJRAkweENDNDkJLyogT3BlblBvcnQgMS4zIFN1YmFydSAqLwotI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNVX1BJRAkweENDNEEJLyogT3BlblBvcnQgMS4zIFVuaXZlcnNhbCAqLwotCi0vKgotICogVGVsbGR1cyBUZWNobm9sb2dpZXMKLSAqLwotI2RlZmluZSBURUxMRFVTX1ZJRAkJCTB4MTc4MQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgVEVMTERVU19URUxMU1RJQ0tfUElECQkweDBDMzAJLyogUkYgY29udHJvbCBkb25nbGUgNDMzIE1IeiB1c2luZyBGVDIzMlJMICovCi0KLS8qCi0gKiBJQlMgZWxla3Ryb25payBwcm9kdWN0IGlkcwotICogU3VibWl0dGVkIGJ5IFRob21hcyBTY2hsZXVzZW5lcgotICovCi0jZGVmaW5lIEZURElfSUJTX1VTNDg1X1BJRAkweGZmMzggIC8qIElCUyBVUzQ4NSAoVVNCPC0tPlJTNDIyLzQ4NSBpbnRlcmZhY2UpICovCi0jZGVmaW5lIEZURElfSUJTX1BJQ1BST19QSUQJMHhmZjM5ICAvKiBJQlMgUElDLVByb2dyYW1tZXIgKi8KLSNkZWZpbmUgRlRESV9JQlNfUENNQ0lBX1BJRAkweGZmM2EgIC8qIElCUyBDYXJkIHJlYWRlciBmb3IgUENNQ0lBIFNSQU0tY2FyZHMgKi8KLSNkZWZpbmUgRlRESV9JQlNfUEsxX1BJRAkweGZmM2IgIC8qIElCUyBQSzEgLSBQYXJ0aWNlbCBjb3VudGVyICovCi0jZGVmaW5lIEZURElfSUJTX1JTMjMyTU9OX1BJRAkweGZmM2MgIC8qIElCUyBSUzIzMiAtIE1vbml0b3IgKi8KLSNkZWZpbmUgRlRESV9JQlNfQVBQNzBfUElECTB4ZmYzZCAgLyogQVBQIDcwIChkdXN0IG1vbml0b3Jpbmcgc3lzdGVtKSAqLwotI2RlZmluZSBGVERJX0lCU19QRURPX1BJRAkweGZmM2UgIC8qIElCUyBQRURPLU1vZGVtIChSRiBtb2RlbSA4NjguMzUgTUh6KSAqLwotI2RlZmluZSBGVERJX0lCU19QUk9EX1BJRAkweGZmM2YgIC8qIGZ1dHVyZSBkZXZpY2UgKi8KLQotLyoKLSAqICBNYXhTdHJlYW0gZGV2aWNlcwl3d3cubWF4c3RyZWFtLm5ldAotICovCi0jZGVmaW5lIEZURElfTUFYU1RSRUFNX1BJRAkweEVFMTgJLyogWGJlZSBQS0ctVSBNb2R1bGUgKi8KLQotLyogT2xpbWV4ICovCi0jZGVmaW5lIE9MSU1FWF9WSUQJCQkweDE1QkEKLSNkZWZpbmUgT0xJTUVYX0FSTV9VU0JfT0NEX1BJRAkJMHgwMDAzCi0KLS8qIEx1bWluYXJ5IE1pY3JvIFN0ZWxsYXJpcyBCb2FyZHMsIFZJRCA9IEZURElfVklEICovCi0vKiBGVERJIDIzMzJDIER1YWwgY2hhbm5lbCBkZXZpY2UsIHNpZGUgQT0yNDUgRklGTyAoSlRBRyksIFNpZGUgQj1SUzIzMiBVQVJUICovCi0jZGVmaW5lIExNSV9MTTNTX0RFVkVMX0JPQVJEX1BJRAkweGJjZDgKLSNkZWZpbmUgTE1JX0xNM1NfRVZBTF9CT0FSRF9QSUQJCTB4YmNkOQotCi0vKiB3d3cuZWxzdGVyZWxlY3RyaWNpdHkuY29tIEVsc3RlciBVbmljb20gSUlJIE9wdGljYWwgUHJvYmUgKi8KLSNkZWZpbmUgRlRESV9FTFNURVJfVU5JQ09NX1BJRAkJMHhFNzAwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFRoZSBNb2JpbGl0eSBMYWIgKFRNTCkKLSAqIFN1Ym1pdHRlZCBieSBQaWVycmUgQ2FzdGVsbGEKLSAqLwotI2RlZmluZSBUTUxfVklECQkJMHgxQjkxCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBUTUxfVVNCX1NFUklBTF9QSUQJMHgwMDY0CS8qIFVTQiAtIFNlcmlhbCBDb252ZXJ0ZXIgKi8KLQotLyogUHJvcG94IGRldmljZXMgKi8KLSNkZWZpbmUgRlRESV9QUk9QT1hfSlRBR0NBQkxFSUlfUElECTB4RDczOAotCi0vKiBSaWcgRXhwZXJ0IFVrcmFpbmUgZGV2aWNlcyAqLwotI2RlZmluZSBGVERJX1JFVV9USU5ZX1BJRAkJMHhFRDIyCS8qIFJpZ0V4cGVydCBUaW55ICovCi0KLS8qIERvbWludGVsbCBwcm9kdWN0cyAgaHR0cDovL3d3dy5kb21pbnRlbGwuY29tICovCi0jZGVmaW5lIEZURElfRE9NSU5URUxMX0RHUUdfUElECTB4RUY1MAkvKiBNYXN0ZXIgKi8KLSNkZWZpbmUgRlRESV9ET01JTlRFTExfRFVTQl9QSUQJMHhFRjUxCS8qIERVU0IwMSBtb2R1bGUgKi8KLQotLyogQWx0aS0yIHByb2R1Y3RzICBodHRwOi8vd3d3LmFsdGktMi5jb20gKi8KLSNkZWZpbmUgQUxUSTJfVklECTB4MUJDOQotI2RlZmluZSBBTFRJMl9OM19QSUQJMHg2MDAxCS8qIE5lcHR1bmUgMyAqLwotCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTkxMCw4NiArNDAsNiBAQAogI2RlZmluZSBJTlRFUkZBQ0VfQwkJMwogI2RlZmluZSBJTlRFUkZBQ0VfRAkJNAogCi0vKgotICogRklDIC8gT3Blbk1va28sIEluYy4gaHR0cDovL3dpa2kub3Blbm1va28ub3JnL3dpa2kvTmVvMTk3M19EZWJ1Z19Cb2FyZF92MwotICogU3VibWl0dGVkIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+Ci0gKi8KLSNkZWZpbmUJRklDX1ZJRAkJCTB4MTQ1NwotI2RlZmluZQlGSUNfTkVPMTk3M19ERUJVR19QSUQJMHg1MTE4Ci0KLS8qCi0gKiBSQVRPQyBSRVgtVVNCNjBGCi0gKi8KLSNkZWZpbmUgUkFUT0NfVkVORE9SX0lECQkweDA1ODQKLSNkZWZpbmUgUkFUT0NfUFJPRFVDVF9JRF9VU0I2MEYJMHhiMDIwCi0KLS8qCi0gKiBESUVCT0xEIEJDUyBTRTkyMwotICovCi0jZGVmaW5lIERJRUJPTERfQkNTX1NFOTIzX1BJRAkweGZiOTkKLQotLyoKLSAqIEF0bWVsIFNUSzU0MQotICovCi0jZGVmaW5lIEFUTUVMX1ZJRAkJMHgwM2ViIC8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBTVEs1NDFfUElECQkweDIxMDkgLyogWmlnYmVlIENvbnRyb2xsZXIgKi8KLQotLyoKLSAqIERyZXNkZW4gRWxla3Ryb25pYyBTZW5zb3IgVGVybWluYWwgQm9hcmQKLSAqLwotI2RlZmluZSBERV9WSUQJCQkweDFjZjEgLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFNUQl9QSUQJCQkweDAwMDEgLyogU2Vuc29yIFRlcm1pbmFsIEJvYXJkICovCi0jZGVmaW5lIFdIVF9QSUQJCQkweDAwMDQgLyogV2lyZWxlc3MgSGFuZGhlbGQgVGVybWluYWwgKi8KLQotLyoKLSAqIEJsYWNrZmluIGduSUNFIEpUQUcKLSAqIGh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWh3Omp0YWc6Z25pY2UKLSAqLwotI2RlZmluZSBBRElfVklEIAkJMHgwNDU2Ci0jZGVmaW5lIEFESV9HTklDRV9QSUQgCQkweEYwMDAKLSNkZWZpbmUgQURJX0dOSUNFUExVU19QSUQgCTB4RjAwMQotCi0vKgotICogSkVUSSBTUEVDVFJPTUVURVIgU1BFQ0JPUyAxMjAxCi0gKiBodHRwOi8vd3d3LmpldGkuY29tL3Byb2R1Y3RzL3N5cy9zY2Ivc2NiMTIwMS5waHAKLSAqLwotI2RlZmluZSBKRVRJX1ZJRAkJMHgwYzZjCi0jZGVmaW5lIEpFVElfU1BDMTIwMV9QSUQJMHgwNGIyCi0KLS8qCi0gKiBNYXJ2ZWxsIFNoZWV2YVBsdWcKLSAqLwotI2RlZmluZSBNQVJWRUxMX1ZJRAkJMHg5ZTg4Ci0jZGVmaW5lIE1BUlZFTExfU0hFRVZBUExVR19QSUQJMHg5ZThmCi0KLSNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21CSCAqLwotCi0vKgotICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKLSAqIFN1Ym1pdHRlZCBieSBWaWxsZSBTdW5kYmVyZy4KLSAqLwotI2RlZmluZSBHTl9PVE9NRVRSSUNTX1ZJRAkweDBjMzMJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIEFVUklDQUxfVVNCX1BJRAkJMHgwMDEwCS8qIEF1cmljYWwgVVNCIEF1ZGlvbWV0ZXIgKi8KLQotLyoKLSAqIEJheWVyIEFzY2Vuc2lhIENvbnRvdXIgYmxvb2QgZ2x1Y29zZSBtZXRlciBVU0ItY29udmVydGVyIGNhYmxlLgotICogaHR0cDovL3dpbmdsdWNvZmFjdHMuY29tL2NhYmxlcy8KLSAqLwotI2RlZmluZSBCQVlFUl9WSUQgICAgICAgICAgICAgICAgICAgICAgMHgxQTc5Ci0jZGVmaW5lIEJBWUVSX0NPTlRPVVJfQ0FCTEVfUElEICAgICAgICAweDYwMDEKLQotLyoKLSAqIE1hcnZlbGwgT3BlblJEIEJhc2UsIENsaWVudAotICogaHR0cDovL3d3dy5vcGVuLXJkLm9yZwotICogT3BlblJEIEJhc2UsIENsaWVudCB1c2UgVklEIDB4MDQwMwotICovCi0jZGVmaW5lIE1BUlZFTExfT1BFTlJEX1BJRAkweDllOTAKLQotLyoKLSAqIEhhbWVnIEhPODIwIGFuZCBITzg3MCBpbnRlcmZhY2UgKHVzaW5nIFZJRCAweDA0MDMpCi0gKi8KLSNkZWZpbmUgICAgICAgIEhBTUVHX0hPODIwX1BJRCAgICAgICAgIDB4ZWQ3NAotI2RlZmluZSAgICAgICAgSEFNRUdfSE84NzBfUElEICAgICAgICAgMHhlZDcxCiAKIC8qCiAgKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCkBAIC0xNTA0LDQgKzU1NCwzIEBACiAgKiBCMi4uNwlMZW5ndGggb2YgbWVzc2FnZSAtIChub3QgaW5jbHVkaW5nIEJ5dGUgMCkKICAqCiAgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTJiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTAsMCArMSw5ODYgQEAKKy8qCisgKiB2ZW5kb3IvcHJvZHVjdCBJRHMgKFZJRC9QSUQpIG9mIGRldmljZXMgdXNpbmcgRlRESSBVU0Igc2VyaWFsIGNvbnZlcnRlcnMuCisgKiBQbGVhc2Uga2VlcCBudW1lcmljYWxseSBzb3J0ZWQgd2l0aGluIGluZGl2aWR1YWwgYXJlYXMsIHRoYW5rcyEKKyAqCisgKiBQaGlsaXBwIEf8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcworICogZnJvbSBSdWRvbGYgR3VnbGVyCisgKgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogZGV2aWNlcyB1c2luZyBGVERJIFZJRCAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLworCisKKy8qKiogIm9yaWdpbmFsIiBGVERJIGRldmljZSBQSURzICoqKi8KKworI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KKyNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9QSUQgMHg2MDA2IC8qIEZUREkncyBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLworI2RlZmluZSBGVERJXzhVMjIzMkNfUElEIDB4NjAxMCAvKiBEdWFsIGNoYW5uZWwgZGV2aWNlICovCisjZGVmaW5lIEZURElfNDIzMkhfUElEIDB4NjAxMSAvKiBRdWFkIGNoYW5uZWwgaGktc3BlZWQgZGV2aWNlICovCisjZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KKyNkZWZpbmUgRlRESV8yMzJSTF9QSUQgIDB4RkJGQSAgLyogUHJvZHVjdCBJRCBmb3IgRlQyMzJSTCAqLworCisKKy8qKiogdGhpcmQtcGFydHkgUElEcyAodXNpbmcgRlRESV9WSUQpICoqKi8KKworLyoKKyAqIE1hcnZlbGwgT3BlblJEIEJhc2UsIENsaWVudAorICogaHR0cDovL3d3dy5vcGVuLXJkLm9yZworICogT3BlblJEIEJhc2UsIENsaWVudCB1c2UgVklEIDB4MDQwMworICovCisjZGVmaW5lIE1BUlZFTExfT1BFTlJEX1BJRAkweDllOTAKKworLyogd3d3LmNhbmRhcHRlci5jb20gRXdlcnQgRW5lcmd5IFN5c3RlbXMgQ0FOZGFwdGVyIGRldmljZSAqLworI2RlZmluZSBGVERJX0NBTkRBUFRFUl9QSUQgMHg5RjgwIC8qIFByb2R1Y3QgSWQgKi8KKworLyogT09DRGxpbmsgYnkgSm9lcm4gS2FpcGYgPGpvZXJua0B3ZWIuZGU+CisgKiAoaHR0cDovL3d3dy5qb2Vybm9ubGluZS5kZS9kdy9kb2t1LnBocD9pZD1zdGFydCZpZHg9cHJvamVjdHM6b29jZGxpbmspICovCisjZGVmaW5lIEZURElfT09DRExJTktfUElECTB4YmFmOAkvKiBBbW9udGVjIEpUQUdrZXkgKi8KKworLyogTHVtaW5hcnkgTWljcm8gU3RlbGxhcmlzIEJvYXJkcywgVklEID0gRlRESV9WSUQgKi8KKy8qIEZUREkgMjMzMkMgRHVhbCBjaGFubmVsIGRldmljZSwgc2lkZSBBPTI0NSBGSUZPIChKVEFHKSwgU2lkZSBCPVJTMjMyIFVBUlQgKi8KKyNkZWZpbmUgTE1JX0xNM1NfREVWRUxfQk9BUkRfUElECTB4YmNkOAorI2RlZmluZSBMTUlfTE0zU19FVkFMX0JPQVJEX1BJRAkJMHhiY2Q5CisKKyNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21CSCAqLworCisvKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLworI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAorI2RlZmluZSBGVERJX09QRU5EQ0NfU05JRkZFUl9QSUQJMHhCRkQ5CisjZGVmaW5lIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQJMHhCRkRBCisjZGVmaW5lIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRAkweEJGREIKKworLyoKKyAqIFJSLUNpcktpdHMgTG9jb0J1ZmZlciBVU0IgKGh0dHA6Ly93d3cucnItY2lya2l0cy5jb20pCisgKi8KKyNkZWZpbmUgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQJMHhjN2QwCS8qIExvY29CdWZmZXIgVVNCICovCisKKy8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KKyNkZWZpbmUgRlRESV9ETVg0QUxMIDB4Qzg1MAorCisvKgorICogQVNLLmZyIGRldmljZXMKKyAqLworI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KKworLyogd3d3LnN0YXJ0aW5nLXBvaW50LXN5c3RlbXMuY29tILVDaGFtZWxlb24gZGV2aWNlICovCisjZGVmaW5lIEZURElfTUlDUk9fQ0hBTUVMRU9OX1BJRAkweENBQTAJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogVGFjdHJpeCBPcGVuUG9ydCAoRUNVKSBkZXZpY2VzLgorICogT3BlblBvcnQgMS4zTSBzdWJtaXR0ZWQgYnkgRG9ub3VyIFNpemVtb3JlLgorICogT3BlblBvcnQgMS4zUyBhbmQgMS4zVSBzdWJtaXR0ZWQgYnkgSWFuIEFiYm90dC4KKyAqLworI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNNX1BJRAkweENDNDgJLyogT3BlblBvcnQgMS4zIE1pdHN1YmlzaGkgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzU19QSUQJMHhDQzQ5CS8qIE9wZW5Qb3J0IDEuMyBTdWJhcnUgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzVV9QSUQJMHhDQzRBCS8qIE9wZW5Qb3J0IDEuMyBVbml2ZXJzYWwgKi8KKworLyogU0NTIEhGIFJhZGlvIE1vZGVtcyBQSUQncyAoaHR0cDovL3d3dy5zY3MtcHRjLmNvbSkgKi8KKy8qIHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzBfUElEIDB4RDAxMCAgICAvKiBTQ1MgUFRDLUlJdXNiICovCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8xX1BJRCAweEQwMTEgICAgLyogU0NTIFRyYWNrZXIgLyBEU1AgVE5DICovCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8yX1BJRCAweEQwMTIKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzNfUElEIDB4RDAxMworI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNF9QSUQgMHhEMDE0CisjZGVmaW5lIEZURElfU0NTX0RFVklDRV81X1BJRCAweEQwMTUKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzZfUElEIDB4RDAxNgorI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfN19QSUQgMHhEMDE3CisKKy8qIGlQbHVzIGRldmljZSAqLworI2RlZmluZSBGVERJX0lQTFVTX1BJRCAweEQwNzAgLyogUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX0lQTFVTMl9QSUQgMHhEMDcxIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEdhbW1hIFNjb3V0IChodHRwOi8vZ2FtbWEtc2NvdXQuY29tLykuIFN1Ym1pdHRlZCBieSByc2NAcnVudHV4LmNvbS4KKyAqLworI2RlZmluZSBGVERJX0dBTU1BX1NDT1VUX1BJRAkJMHhENjc4CS8qIEdhbW1hIFNjb3V0IG9ubGluZSAqLworCisvKiBQcm9wb3ggZGV2aWNlcyAqLworI2RlZmluZSBGVERJX1BST1BPWF9KVEFHQ0FCTEVJSV9QSUQJMHhENzM4CisKKy8qCisgKiBYc2VucyBUZWNobm9sb2dpZXMgQlYgcHJvZHVjdHMgKGh0dHA6Ly93d3cueHNlbnMuY29tKS4KKyAqLworI2RlZmluZSBYU0VOU19DT05WRVJURVJfMF9QSUQJMHhEMzg4CisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8xX1BJRAkweEQzODkKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzJfUElECTB4RDM4QQorI2RlZmluZSBYU0VOU19DT05WRVJURVJfM19QSUQJMHhEMzhCCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl80X1BJRAkweEQzOEMKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzVfUElECTB4RDM4RAorI2RlZmluZSBYU0VOU19DT05WRVJURVJfNl9QSUQJMHhEMzhFCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl83X1BJRAkweEQzOEYKKworLyoKKyAqIE5ESSAod3d3Lm5kaWdpdGFsLmNvbSkgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX05ESV9IVUNfUElECQkweERBNzAJLyogTkRJIEhvc3QgVVNCIENvbnZlcnRlciAqLworI2RlZmluZSBGVERJX05ESV9TUEVDVFJBX1NDVV9QSUQJMHhEQTcxCS8qIE5ESSBTcGVjdHJhIFNDVSAqLworI2RlZmluZSBGVERJX05ESV9GVVRVUkVfMl9QSUQJCTB4REE3MgkvKiBOREkgZnV0dXJlIGRldmljZSAjMiAqLworI2RlZmluZSBGVERJX05ESV9GVVRVUkVfM19QSUQJCTB4REE3MwkvKiBOREkgZnV0dXJlIGRldmljZSAjMyAqLworI2RlZmluZSBGVERJX05ESV9BVVJPUkFfU0NVX1BJRAkJMHhEQTc0CS8qIE5ESSBBdXJvcmEgU0NVICovCisKKy8qCisgKiBXZXN0cmV4IEludGVybmF0aW9uYWwgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ29yeSBMZWUKKyAqLworI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRAkweERDMDAJLyogTW9kZWwgNzc3ICovCisjZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQJMHhEQzAxCS8qIE1vZGVsIDg5MDBGICovCisKKy8qCisgKiBBQ0cgSWRlbnRpZmljYXRpb24gVGVjaG5vbG9naWVzIEdtYkggcHJvZHVjdHMgKGh0dHA6Ly93d3cuYWNnLmRlLykuCisgKiBTdWJtaXR0ZWQgYnkgYW50b24gLWF0LSBnb3RvMTAgLWRvdC0gb3JnLgorICovCisjZGVmaW5lIEZURElfQUNHX0hGRFVBTF9QSUQJCTB4REQyMAkvKiBIRiBEdWFsIElTTyBSZWFkZXIgKFJGSUQpICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQXJ0ZW1pcyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKKyAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXJ0ZW1pc2NjZC5jby51ay8KKyAqLworI2RlZmluZSBGVERJX0FSVEVNSVNfUElECTB4REYyOAkvKiBBbGwgQXJ0ZW1pcyBDYW1lcmFzICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQVRJSyBJbnN0cnVtZW50cyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKKyAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXRpay1pbnN0cnVtZW50cy5jb20vCisgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2X1BJRAkweERGMzAJLyogQVRJSyBBVEstMTYgR3JheXNjYWxlIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZDX1BJRAkweERGMzIJLyogQVRJSyBBVEstMTZDIENvbG91ciBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJfUElECTB4REYzMQkvKiBBVElLIEFUSy0xNkhSIEdyYXlzY2FsZSBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJDX1BJRAkweERGMzMJLyogQVRJSyBBVEstMTZIUkMgQ29sb3VyIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZJQ19QSUQgICAweERGMzUgIC8qIEFUSUsgQVRLLTE2SUMgR3JheXNjYWxlIENhbWVyYSAqLworCisvKgorICogWW9zdCBFbmdpbmVlcmluZywgSW5jLiBwcm9kdWN0cyAod3d3Lnlvc3RlbmdpbmVlcmluZy5jb20pLgorICogUElEIDB4RTA1MCBzdWJtaXR0ZWQgYnkgQWFyb24gUHJvc2UuCisgKi8KKyNkZWZpbmUgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQJMHhFMDUwCS8qIFlFSSBTZXJ2b0NlbnRlcjMuMSBVU0IgKi8KKworLyoKKyAqIEVMViBVU0IgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ2hyaXN0aWFuIEFidCBvZiBFTFYgKHd3dy5lbHYuZGUpLgorICogQWxsIG9mIHRoZXNlIGRldmljZXMgdXNlIEZUREkncyB2ZW5kb3IgSUQgKDB4MDQwMykuCisgKgorICogVGhlIHByZXZpb3VzbHkgaW5jbHVkZWQgUElEIGZvciB0aGUgVU8gMTAwIG1vZHVsZSB3YXMgaW5jb3JyZWN0LgorICogSW4gZmFjdCwgdGhhdCBQSUQgd2FzIGZvciBFTFYncyBVUiAxMDAgVVNCLVJTMjMyIGNvbnZlcnRlciAoMHhGQjU4KS4KKyAqCisgKiBBcm1pbiBMYWV1Z2VyIG9yaWdpbmFsbHkgc2VudCB0aGUgUElEIGZvciB0aGUgVU0gMTAwIG1vZHVsZS4KKyAqLworI2RlZmluZSBGVERJX0VMVl9GSFoxMzAwUENfUElECTB4RTBFOAkvKiBGSFogMTMwMCBQQyAqLworI2RlZmluZSBGVERJX0VMVl9XUzUwMF9QSUQJMHhFMEU5CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDUwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfSFM0ODVfUElECTB4RTBFQQkvKiBVU0IgdG8gUlMtNDg1IGFkYXB0ZXIgKi8KKyNkZWZpbmUgRlRESV9FTFZfRU0xMDEwUENfUElECTB4RTBFRgkvKiBFbmdlcnkgbW9uaXRvciBFTSAxMDEwIFBDICovCisjZGVmaW5lIEZURElfRUxWX0NTSThfUElECTB4RTBGMAkvKiBDb21wdXRlci1TY2hhbHQtSW50ZXJmYWNlIChDU0kgOCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfRU0xMDAwRExfUElECTB4RTBGMQkvKiBQQy1EYXRlbmxvZ2dlciBmdWVyIEVuZXJnaWVtb25pdG9yIChFTSAxMDAwIERMKSAqLworI2RlZmluZSBGVERJX0VMVl9QQ0sxMDBfUElECTB4RTBGMgkvKiBQQy1LYWJlbHRlc3RlciAoUENLIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUkZQNTAwX1BJRAkweEUwRjMJLyogSEYtTGVpc3R1bmdzbWVzc2VyIChSRlAgNTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9GUzIwU0lHX1BJRAkweEUwRjQJLyogU2lnbmFsZ2ViZXIgKEZTIDIwIFNJRykgKi8KKyNkZWZpbmUgRlRESV9FTFZfV1MzMDBQQ19QSUQJMHhFMEY2CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDMwMCBQQykgKi8KKyNkZWZpbmUgRlRESV9QSElfRklTQ09fUElEICAgICAgMHhFNDBCICAvKiBQSEkgRmlzY28gVVNCIHRvIFNlcmlhbCBjYWJsZSAqLworI2RlZmluZSBGVERJX0VMVl9VQUQ4X1BJRAkweEYwNjgJLyogVVNCLUFELVdhbmRsZXIgKFVBRCA4KSAqLworI2RlZmluZSBGVERJX0VMVl9VREE3X1BJRAkweEYwNjkJLyogVVNCLURBLVdhbmRsZXIgKFVEQSA3KSAqLworI2RlZmluZSBGVERJX0VMVl9VU0kyX1BJRAkweEYwNkEJLyogVVNCLVNjaHJpdHRtb3RvcmVuLUludGVyZmFjZSAoVVNJIDIpICovCisjZGVmaW5lIEZURElfRUxWX1QxMTAwX1BJRAkweEYwNkIJLyogVGhlcm1vbWV0ZXIgKFQgMTEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUENEMjAwX1BJRAkweEYwNkMJLyogUEMtRGF0ZW5sb2dnZXIgKFBDRCAyMDApICovCisjZGVmaW5lIEZURElfRUxWX1VMQTIwMF9QSUQJMHhGMDZECS8qIFVTQi1MQ0QtQW5zdGV1ZXJ1bmcgKFVMQSAyMDApICovCisjZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KKyNkZWZpbmUgRlRESV9FTFZfRkhaMTAwMFBDX1BJRAkweEYwNkYJLyogRkhaIDEwMDAgUEMgKi8KKyNkZWZpbmUgRlRESV9FTFZfVVIxMDBfUElECTB4RkI1OAkvKiBVU0ItUlMyMzItVW1zZXR6ZXIgKFVSIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVU0xMDBfUElECTB4RkI1QQkvKiBVU0ItTW9kdWwgVU0gMTAwICovCisjZGVmaW5lIEZURElfRUxWX1VPMTAwX1BJRAkweEZCNUIJLyogVVNCLU1vZHVsIFVPIDEwMCAqLworLyogQWRkaXRpb25hbCBFTFYgUElEcyB0aGF0IGRlZmF1bHQgdG8gdXNpbmcgdGhlIEZUREkgRDJYWCBkcml2ZXJzIG9uCisgKiBNUyBXaW5kb3dzLCByYXRoZXIgdGhhbiB0aGUgRlRESSBWaXJ0dWFsIENvbSBQb3J0IGRyaXZlcnMuCisgKiBNYXliZSB0aGVzZSB3aWxsIGJlIGVhc2llciB0byB1c2Ugd2l0aCB0aGUgbGliZnRkaS9saWJ1c2IgdXNlci1zcGFjZQorICogZHJpdmVycywgb3IgcG9zc2libHkgdGhlIENvbWVkaSBkcml2ZXJzIGluIHNvbWUgY2FzZXMuICovCisjZGVmaW5lIEZURElfRUxWX0NMSTcwMDBfUElECTB4RkI1OQkvKiBDb21wdXRlci1MaWdodC1JbnRlcmZhY2UgKENMSSA3MDAwKSAqLworI2RlZmluZSBGVERJX0VMVl9QUFM3MzMwX1BJRAkweEZCNUMJLyogUHJvY2Vzc29yLVBvd2VyLVN1cHBseSAoUFBTIDczMzApICovCisjZGVmaW5lIEZURElfRUxWX1RGTTEwMF9QSUQJMHhGQjVECS8qIFRlbXBlcmFydHVyLUZldWNodGUgTWVzc2dlcmFldCAoVEZNIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVURGNzdfUElECTB4RkI1RQkvKiBVU0IgRENGIEZ1bmt1cmggKFVERiA3NykgKi8KKyNkZWZpbmUgRlRESV9FTFZfVUlPODhfUElECTB4RkI1RgkvKiBVU0ItSS9PIEludGVyZmFjZSAoVUlPIDg4KSAqLworCisvKgorICogRVZFUiBFY28gUHJvIFVQUyAoaHR0cDovL3d3dy5ldmVyLmNvbS5wbC8pCisgKi8KKworI2RlZmluZQlFVkVSX0VDT19QUk9fQ0RTCTB4ZTUyMAkvKiBSUy0yMzIgY29udmVydGVyICovCisKKy8qCisgKiBBY3RpdmUgUm9ib3RzIHByb2R1Y3QgaWRzLgorICovCisjZGVmaW5lIEZURElfQUNUSVZFX1JPQk9UU19QSUQJMHhFNTQ4CS8qIFVTQiBjb21tcyBib2FyZCAqLworCisvKiBQeXJhbWlkIENvbXB1dGVyIEdtYkggKi8KKyNkZWZpbmUgRlRESV9QWVJBTUlEX1BJRAkweEU2QzgJLyogUHlyYW1pZCBBcHBsaWFuY2UgRGlzcGxheSAqLworCisvKiB3d3cuZWxzdGVyZWxlY3RyaWNpdHkuY29tIEVsc3RlciBVbmljb20gSUlJIE9wdGljYWwgUHJvYmUgKi8KKyNkZWZpbmUgRlRESV9FTFNURVJfVU5JQ09NX1BJRAkJMHhFNzAwIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEd1ZGUgQW5hbG9nLSB1bmQgRGlnaXRhbHN5c3RlbWUgR21iSAorICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODA4X1BJRCAgICAweEU4MDgKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MDlfUElEICAgIDB4RTgwOQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQV9QSUQgICAgMHhFODBBCisjZGVmaW5lIEZURElfR1VERUFEU19FODBCX1BJRCAgICAweEU4MEIKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MENfUElEICAgIDB4RTgwQworI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRF9QSUQgICAgMHhFODBECisjZGVmaW5lIEZURElfR1VERUFEU19FODBFX1BJRCAgICAweEU4MEUKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEZfUElEICAgIDB4RTgwRgorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OF9QSUQgICAgMHhFODg4ICAvKiBFeHBlcnQgSVNETiBDb250cm9sIFVTQiAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OV9QSUQgICAgMHhFODg5ICAvKiBVU0IgUlMtMjMyIE9wdG9CcmlkZ2UgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEFfUElEICAgIDB4RTg4QQorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Ql9QSUQgICAgMHhFODhCCisjZGVmaW5lIEZURElfR1VERUFEU19FODhDX1BJRCAgICAweEU4OEMKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OERfUElEICAgIDB4RTg4RAorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RV9QSUQgICAgMHhFODhFCisjZGVmaW5lIEZURElfR1VERUFEU19FODhGX1BJRCAgICAweEU4OEYKKworLyoKKyAqIEVjbG8gKGh0dHA6Ly93d3cuZWNsby5wdC8pIHByb2R1Y3QgSURzLgorICogUElEIDB4RUE5MCBzdWJtaXR0ZWQgYnkgTWFydGluIEdyaWxsLgorICovCisjZGVmaW5lIEZURElfRUNMT19DT01fMVdJUkVfUElECTB4RUE5MAkvKiBDT00gdG8gMS1XaXJlIFVTQiBhZGFwdG9yICovCisKKy8qIFROQy1YIFVTQi10by1wYWNrZXQtcmFkaW8gYWRhcHRlciwgdmVyc2lvbnMgcHJpb3IgdG8gMy4wIChETFAgbW9kdWxlKSAqLworI2RlZmluZSBGVERJX1ROQ19YX1BJRAkJMHhFQkUwCisKKy8qCisgKiBUZXJhdHJvbmlrIHByb2R1Y3QgaWRzLgorICogU3VibWl0dGVkIGJ5IE8uIFf2bGZlbHNjaG5laWRlci4KKyAqLworI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRAkgMHhFQzg4CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIFZDUCBkcml2ZXIgb24gd2luZG93cykgKi8KKyNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLworCisvKiBSaWcgRXhwZXJ0IFVrcmFpbmUgZGV2aWNlcyAqLworI2RlZmluZSBGVERJX1JFVV9USU5ZX1BJRAkJMHhFRDIyCS8qIFJpZ0V4cGVydCBUaW55ICovCisKKy8qCisgKiBIYW1lZyBITzgyMCBhbmQgSE84NzAgaW50ZXJmYWNlICh1c2luZyBWSUQgMHgwNDAzKQorICovCisjZGVmaW5lICAgICAgICBIQU1FR19ITzgyMF9QSUQgICAgICAgICAweGVkNzQKKyNkZWZpbmUgICAgICAgIEhBTUVHX0hPODcwX1BJRCAgICAgICAgIDB4ZWQ3MQorCisvKgorICogIE1heFN0cmVhbSBkZXZpY2VzCXd3dy5tYXhzdHJlYW0ubmV0CisgKi8KKyNkZWZpbmUgRlRESV9NQVhTVFJFQU1fUElECTB4RUUxOAkvKiBYYmVlIFBLRy1VIE1vZHVsZSAqLworCisvKgorICogbWljcm9IQU0gcHJvZHVjdCBJRHMgKGh0dHA6Ly93d3cubWljcm9oYW0uY29tKS4KKyAqIFN1Ym1pdHRlZCBieSBKdXN0aW4gQnVya2V0IChLTDFSTCkgPHpvcnRvbkBqdGFuLmNvbT4KKyAqIGFuZCBNaWtlIFN0dWRlciAoSzZFRVApIDxrNmVlcEBoYW1zb2Z0d2FyZS5vcmc+LgorICogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+IGFkZGVkIGEgZmV3IG1vcmUgZnJvbSB0aGUgZHJpdmVyIElORiBmaWxlLgorICovCisjZGVmaW5lIEZURElfTUhBTV9LV19QSUQgMHhFRUU4CQkvKiBVU0ItS1cgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZU19QSUQgMHhFRUU5CQkvKiBVU0ItWVMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZNl9QSUQgMHhFRUVBCQkvKiBVU0ItWTYgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZOF9QSUQgMHhFRUVCCQkvKiBVU0ItWTggaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9JQ19QSUQgMHhFRUVDCQkvKiBVU0ItSUMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9EQjlfUElEIDB4RUVFRAkvKiBVU0ItREI5IGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fUlMyMzJfUElEIDB4RUVFRQkvKiBVU0ItUlMyMzIgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZOV9QSUQgMHhFRUVGCQkvKiBVU0ItWTkgaW50ZXJmYWNlICovCisKKy8qIERvbWludGVsbCBwcm9kdWN0cyAgaHR0cDovL3d3dy5kb21pbnRlbGwuY29tICovCisjZGVmaW5lIEZURElfRE9NSU5URUxMX0RHUUdfUElECTB4RUY1MAkvKiBNYXN0ZXIgKi8KKyNkZWZpbmUgRlRESV9ET01JTlRFTExfRFVTQl9QSUQJMHhFRjUxCS8qIERVU0IwMSBtb2R1bGUgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBQZXJsZSBTeXN0ZW1zCisgKiBVbHRyYVBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzCisgKi8KKyNkZWZpbmUgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEIDB4RjBDMAkvKiBQZXJsZSBVbHRyYVBvcnQgUHJvZHVjdCBJZCAqLworCisvKiBTcHJvZyBJSSAoQW5kcmV3IENyb3NsYW5kJ3MgU3Byb2dJSSBEQ0MgaW50ZXJmYWNlKSAqLworI2RlZmluZSBGVERJX1NQUk9HX0lJCQkweEYwQzgKKworLyogYW4gaW5mcmFyZWQgcmVjZWl2ZXIgZm9yIHVzZXIgYWNjZXNzIGNvbnRyb2wgd2l0aCBJUiB0YWdzICovCisjZGVmaW5lIEZURElfUElFR1JPVVBfUElECTB4RjIwOAkvKiBQcm9kdWN0IElkICovCisKKy8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UKKyAgIChodHRwOi8vd3d3LmFjdC1zb2x1dGlvbnMuY29tL0hvbWVQcm8uaHRtKSAqLworI2RlZmluZSBGVERJX0FDVFpXQVZFX1BJRAkweEYyRDAKKworLyoKKyAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAorICogVVNCLVRUWSBhY3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCisgKiBhbmQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoaWNoIGFyZSB1c2VkIGJ5IHdoaWNoLgorICovCisjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAorI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKKworLyoKKyAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgTElOWF9TRE1VU0JRU1NfUElECTB4RjQ0OAkvKiBMaW54IFNETS1VU0ItUVMtUyAqLworI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkgICAvKiBMaW54IE1hc3RlciBEZXZlbG9wbWVudCAyLjAgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMV9QSUQgICAweEY0NEIgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKworLyoKKyAqIE9jZWFuaWMgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX09DRUFOSUNfUElECTB4RjQ2MCAgLyogT2NlYW5pYyBkaXZlIGluc3RydW1lbnQgKi8KKworLyoKKyAqIFNVVU5UTyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLworCisvKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCisvKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KKyNkZWZpbmUgRlRESV9VU0JfVUlSVF9QSUQJMHhGODUwCS8qIFByb2R1Y3QgSWQgKi8KKworLyogQ0NTIEluYy4gSUNEVS9JQ0RVNDAgcHJvZHVjdCBJRCAtCisgKiB0aGUgRlQyMzJCTSBpcyB1c2VkIGluIGFuIGluLWNpcmN1aXQtZGVidWdnZXIgdW5pdCBmb3IgUElDMTYncy9QSUMxOCdzICovCisjZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMAorI2RlZmluZSBGVERJX0NDU0lDRFU0MF8xX1BJRCAgICAweEY5RDEKKyNkZWZpbmUgRlRESV9DQ1NNQUNIWF8yX1BJRCAgICAgMHhGOUQyCisjZGVmaW5lIEZURElfQ0NTTE9BRF9OX0dPXzNfUElEIDB4RjlEMworI2RlZmluZSBGVERJX0NDU0lDRFU2NF80X1BJRCAgICAweEY5RDQKKyNkZWZpbmUgRlRESV9DQ1NQUklNRThfNV9QSUQgICAgMHhGOUQ1CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAorICogd2hpY2ggYXJlIHRoZSBGVDIzMkJNICggc2ltaWxhciB0byB0aGUgOFUyMzJBTSApCisgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMV9QSUQgICAgICAweEZBMDEgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNF9QSUQgICAgICAweEZBMDQgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEhvbWUgRWxlY3Ryb25pY3MgKHd3dy5ob21lLWVsZWN0cm8uY29tKSBVU0IgZ2FkZ2V0cworICovCisjZGVmaW5lIEZURElfSEVfVElSQTFfUElECTB4RkE3OAkvKiBUaXJhLTEgSVIgdHJhbnNjZWl2ZXIgKi8KKworLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KKyNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAorCisvKgorICogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMKKyAqLworI2RlZmluZSBGVERJX1RIT1JMQUJTX1BJRAkJMHhmYWYwIC8qIFRob3JMYWJzIFVTQiBtb3RvciBkcml2ZXJzICovCisKKy8qCisgKiBQcm90ZWdvIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzEJMHhGQzcwCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19SMlgwCQkweEZDNzEJLyogUjIwMC1VU0IgVFJORyB1bml0IChSMjEwLCBSMjIwLCBhbmQgUjIzMCkgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzMJMHhGQzcyCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzQJMHhGQzczCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKworLyoKKyAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAorICovCisjZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MgorCisvKiB3d3cuaXJ0cmFucy5kZSBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9JUlRSQU5TX1BJRCAweEZDNjAgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogUk0gTWljaGFlbGlkZXMgQ0FOdmlldyBVU0IgKGh0dHA6Ly93d3cucm1jYW4uY29tKSAoRlRESV9WSUQpCisgKiBDQU4gZmllbGRidXMgaW50ZXJmYWNlIGFkYXB0ZXIsIGFkZGVkIGJ5IHBvcnQgR21iSCB3d3cucG9ydC5kZSkKKyAqIElhbiBBYmJvdHQgY2hhbmdlZCB0aGUgbWFjcm8gbmFtZXMgZm9yIGNvbnNpc3RlbmN5LgorICovCisjZGVmaW5lIEZURElfUk1fQ0FOVklFV19QSUQJMHhmZDYwCS8qIFByb2R1Y3QgSWQgKi8KKy8qIHd3dy50aG91Z2h0dGVjaG5vbG9neS5jb20vIFRULVVTQiBwcm92aWRlIHdpdGggcHJvY29tcCB1c2UgZnRkaV9zaW8gKi8KKyNkZWZpbmUgRlRESV9UVFVTQl9QSUQgMHhGRjIwIC8qIFByb2R1Y3QgSWQgKi8KKworI2RlZmluZSBGVERJX1VTQlhfNzA3X1BJRCAweEY4NTcJLyogQURTVGVjaCBJUiBCbGFzdGVyIFVTQlgtNzA3IChGVERJX1ZJRCkgKi8KKworI2RlZmluZSBGVERJX1JFTEFJU19QSUQJMHhGQTEwICAvKiBSZWxhaXMgZGV2aWNlIGZyb20gUnVkb2xmIEd1Z2xlciAqLworCisvKgorICogUENESiB1c2UgZnRkaSBiYXNlZCBkai1jb250cm9sbGVycy4gVGhlIGZvbGxvd2luZyBQSUQgaXMKKyAqIGZvciB0aGVpciBEQUMtMiBkZXZpY2UgaHR0cDovL3d3dy5wY2RqaGFyZHdhcmUuY29tL0RBQzIuYXNwCisgKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSwgUElEIHNlbnQgYnkgV291dGVyIFBhZXNlbikKKyAqLworI2RlZmluZSBGVERJX1BDREpfREFDMl9QSUQgMHhGQTg4CisKKyNkZWZpbmUgRlRESV9SMjAwMEtVX1RSVUVfUk5HCTB4RkI4MCAgLyogUjIwMDBLVSBUUlVFIFJORyAoRlRESV9WSUQpICovCisKKy8qCisgKiBESUVCT0xEIEJDUyBTRTkyMyAoRlRESV9WSUQpCisgKi8KKyNkZWZpbmUgRElFQk9MRF9CQ1NfU0U5MjNfUElECTB4ZmI5OQorCisvKiB3d3cuY3J5c3RhbGZvbnR6LmNvbSBkZXZpY2VzCisgKiAtIHRoYW54IGZvciBwcm92aWRpbmcgZnJlZSBkZXZpY2VzIGZvciBldmFsdWF0aW9uICEKKyAqIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlCisgKiBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZQorICovCisjZGVmaW5lIEZURElfWEZfNjMyX1BJRCAweEZDMDgJLyogNjMyOiAxNngyIENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjM0X1BJRCAweEZDMDkJLyogNjM0OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNTQ3X1BJRCAweEZDMEEJLyogNTQ3OiBUd28gbGluZSBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjMzX1BJRCAweEZDMEIJLyogNjMzOiAxNngyIENoYXJhY3RlciBEaXNwbGF5IHdpdGggS2V5cyAqLworI2RlZmluZSBGVERJX1hGXzYzMV9QSUQgMHhGQzBDCS8qIDYzMTogMjB4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzNV9QSUQgMHhGQzBECS8qIDYzNTogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0MF9QSUQgMHhGQzBFCS8qIDY0MDogVHdvIGxpbmUgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0Ml9QSUQgMHhGQzBGCS8qIDY0MjogVHdvIGxpbmUgRGlzcGxheSAqLworCisvKgorICogVmlkZW8gTmV0d29ya3MgTGltaXRlZCAvIEhvbWVjaG9pY2UgaW4gdGhlIFVLIHVzZSBhbiBmdGRpLWJhc2VkIGRldmljZQorICogZm9yIHRoZWlyIDFNYiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZAorICogYnkgdGhlIHVzYiBkZXZpY2Ugc3VwcGxpZWQgKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkKKyAqLworI2RlZmluZSBGVERJX1ZOSENQQ1VTQl9EX1BJRCAweGZlMzggLyogUHJvZHVjdCBJZCAqLworCisvKiBBbHBoYU1pY3JvIENvbXBvbmVudHMgQU1DLTIzMlVTQjAxIGRldmljZSAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfQU1DMjMyX1BJRCAweEZGMDAgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogSUJTIGVsZWt0cm9uaWsgcHJvZHVjdCBpZHMgKEZURElfVklEKQorICogU3VibWl0dGVkIGJ5IFRob21hcyBTY2hsZXVzZW5lcgorICovCisjZGVmaW5lIEZURElfSUJTX1VTNDg1X1BJRAkweGZmMzggIC8qIElCUyBVUzQ4NSAoVVNCPC0tPlJTNDIyLzQ4NSBpbnRlcmZhY2UpICovCisjZGVmaW5lIEZURElfSUJTX1BJQ1BST19QSUQJMHhmZjM5ICAvKiBJQlMgUElDLVByb2dyYW1tZXIgKi8KKyNkZWZpbmUgRlRESV9JQlNfUENNQ0lBX1BJRAkweGZmM2EgIC8qIElCUyBDYXJkIHJlYWRlciBmb3IgUENNQ0lBIFNSQU0tY2FyZHMgKi8KKyNkZWZpbmUgRlRESV9JQlNfUEsxX1BJRAkweGZmM2IgIC8qIElCUyBQSzEgLSBQYXJ0aWNlbCBjb3VudGVyICovCisjZGVmaW5lIEZURElfSUJTX1JTMjMyTU9OX1BJRAkweGZmM2MgIC8qIElCUyBSUzIzMiAtIE1vbml0b3IgKi8KKyNkZWZpbmUgRlRESV9JQlNfQVBQNzBfUElECTB4ZmYzZCAgLyogQVBQIDcwIChkdXN0IG1vbml0b3Jpbmcgc3lzdGVtKSAqLworI2RlZmluZSBGVERJX0lCU19QRURPX1BJRAkweGZmM2UgIC8qIElCUyBQRURPLU1vZGVtIChSRiBtb2RlbSA4NjguMzUgTUh6KSAqLworI2RlZmluZSBGVERJX0lCU19QUk9EX1BJRAkweGZmM2YgIC8qIGZ1dHVyZSBkZXZpY2UgKi8KKy8qIHd3dy5jYW51c2IuY29tIExhd2ljZWwgQ0FOVVNCIGRldmljZSAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfQ0FOVVNCX1BJRCAweEZGQTggLyogUHJvZHVjdCBJZCAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIHRoaXJkLXBhcnR5IFZJRC9QSUQgY29tYm9zICoqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworLyoKKyAqIEF0bWVsIFNUSzU0MQorICovCisjZGVmaW5lIEFUTUVMX1ZJRAkJMHgwM2ViIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBTVEs1NDFfUElECQkweDIxMDkgLyogWmlnYmVlIENvbnRyb2xsZXIgKi8KKworLyoKKyAqIEJsYWNrZmluIGduSUNFIEpUQUcKKyAqIGh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWh3Omp0YWc6Z25pY2UKKyAqLworI2RlZmluZSBBRElfVklEIAkJMHgwNDU2CisjZGVmaW5lIEFESV9HTklDRV9QSUQgCQkweEYwMDAKKyNkZWZpbmUgQURJX0dOSUNFUExVU19QSUQgCTB4RjAwMQorCisvKgorICogUkFUT0MgUkVYLVVTQjYwRgorICovCisjZGVmaW5lIFJBVE9DX1ZFTkRPUl9JRAkJMHgwNTg0CisjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIEImQiBFbGVjdHJvbmljcyBwcm9kdWN0cy4KKyAqLworI2RlZmluZSBCQU5EQl9WSUQJCTB4MDg1NgkvKiBCJkIgRWxlY3Ryb25pY3MgVmVuZG9yIElEICovCisjZGVmaW5lIEJBTkRCX1VTT1RMNF9QSUQJMHhBQzAxCS8qIFVTT1RMNCBJc29sYXRlZCBSUy00ODUgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTVEw0X1BJRAkJMHhBQzAyCS8qIFVTVEw0IFJTLTQ4NSBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNPOU1MMl9QSUQJMHhBQzAzCS8qIFVTTzlNTDIgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU09QVEw0X1BJRAkweEFDMTEKKyNkZWZpbmUgQkFOREJfVVNQVEw0X1BJRAkweEFDMTIKKyNkZWZpbmUgQkFOREJfVVNPOU1MMkRSXzJfUElECTB4QUMxNgorI2RlZmluZSBCQU5EQl9VU085TUwyRFJfUElECTB4QUMxNworI2RlZmluZSBCQU5EQl9VU09QVEw0RFIyX1BJRAkweEFDMTgJLyogVVNPUFRMNFItMiAyLXBvcnQgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU09QVEw0RFJfUElECTB4QUMxOQorI2RlZmluZSBCQU5EQl80ODVVU0I5Rl8yV19QSUQJMHhBQzI1CisjZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzRXX1BJRAkweEFDMjYKKyNkZWZpbmUgQkFOREJfMjMyVVNCOU1fUElECTB4QUMyNworI2RlZmluZSBCQU5EQl80ODVVU0JUQl8yV19QSUQJMHhBQzMzCisjZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzRXX1BJRAkweEFDMzQKKyNkZWZpbmUgQkFOREJfVFRMNVVTQjlNX1BJRAkweEFDNDkKKyNkZWZpbmUgQkFOREJfVFRMM1VTQjlNX1BJRAkweEFDNTAKKyNkZWZpbmUgQkFOREJfWlpfUFJPRzFfVVNCX1BJRAkweEJBMDIKKworLyoKKyAqIEludHJlcGlkIENvbnRyb2wgU3lzdGVtcyAoaHR0cDovL3d3dy5pbnRyZXBpZGNzLmNvbS8pIFZhbHVlQ0FOIGFuZCBOZW9WSQorICovCisjZGVmaW5lIElOVFJFUElEX1ZJRAkJMHgwOTNDCisjZGVmaW5lIElOVFJFUElEX1ZBTFVFQ0FOX1BJRAkweDA2MDEKKyNkZWZpbmUgSU5UUkVQSURfTkVPVklfUElECTB4MDcwMQorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcworICovCisjZGVmaW5lIElEVEVDSF9WSUQJCTB4MEFDRAkvKiBJRCBURUNIIFZlbmRvciBJRCAqLworI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKKyAqLworI2RlZmluZSBPQ1RfVklECQkJMHgwQjM5CS8qIE9DVCB2ZW5kb3IgSUQgKi8KKy8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KKy8qIEFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoQXVzKSBYSDY0NTEgKi8KKy8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCBoYXJkd2FyZSB2ZXJzaW9uIDEgKi8KKyNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCisKKy8qCisgKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgorICovCisKKyNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2CisjZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorCisvKgorICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKKyAqIFN1Ym1pdHRlZCBieSBWaWxsZSBTdW5kYmVyZy4KKyAqLworI2RlZmluZSBHTl9PVE9NRVRSSUNTX1ZJRAkweDBjMzMJLyogVmVuZG9yIElEICovCisjZGVmaW5lIEFVUklDQUxfVVNCX1BJRAkJMHgwMDEwCS8qIEF1cmljYWwgVVNCIEF1ZGlvbWV0ZXIgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBTZWFsZXZlbCBTZWFMSU5LKyBhZGFwdGVycy4KKyAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAorICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCisgKi8KKyNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAyX1BJRAkweDIxMDIJLyogU2VhTElOSys0ODUgKDIxMDIpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDZfUElECTB4OTAyMAkvKiBTZWFMSU5LKzQyMiAoMjEwNikgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDFfMl9QSUQJMHgyMjIxCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAyXzFfUElECTB4MjIxMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMV9QSUQJMHgyMjEzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMl9QSUQJMHgyMjIzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzJfUElECTB4MjQyMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8zX1BJRAkweDI0MzEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzFfUElECTB4MjQxMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8yX1BJRAkweDI0MjIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzRfUElECTB4MjQ0MgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18xX1BJRAkweDI0MTMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18zX1BJRAkweDI0MzMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM180X1BJRAkweDI0NDMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfMl9QSUQJMFgyODIxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzNfUElECTBYMjgzMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNV9QSUQJMFgyODUxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzZfUElECTBYMjg2MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfOF9QSUQJMFgyODgxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgOCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzFfUElECTBYMjgxMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfM19QSUQJMFgyODMyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzRfUElECTBYMjg0MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNl9QSUQJMFgyODYyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzdfUElECTBYMjg3MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMV9QSUQJMFgyODEzCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMl9QSUQJMFgyODIzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM180X1BJRAkwWDI4NDMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNV9QSUQJMFgyODUzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM183X1BJRAkwWDI4NzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfOF9QSUQJMFgyODgzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgOCAqLworCisvKgorICogSkVUSSBTUEVDVFJPTUVURVIgU1BFQ0JPUyAxMjAxCisgKiBodHRwOi8vd3d3LmpldGkuY29tL3Byb2R1Y3RzL3N5cy9zY2Ivc2NiMTIwMS5waHAKKyAqLworI2RlZmluZSBKRVRJX1ZJRAkJMHgwYzZjCisjZGVmaW5lIEpFVElfU1BDMTIwMV9QSUQJMHgwNGIyCisKKy8qCisgKiBGVERJIFVTQiBVQVJUIGNoaXBzIHVzZWQgaW4gY29uc3RydWN0aW9uIHByb2plY3RzIGZyb20gdGhlCisgKiBFbGVrdG9yIEVsZWN0cm9uaWNzIG1hZ2F6aW5lIChodHRwOi8vZWxla3Rvci1lbGVjdHJvbmljcy5jby51aykKKyAqLworI2RlZmluZSBFTEVLVE9SX1ZJRAkJMHgwQzdECisjZGVmaW5lIEVMRUtUT1JfRlQzMjNSX1BJRAkweDAwMDUJLyogUkZJRC1SZWFkZXIsIGlzc3VlIDA5LTIwMDYgKi8KKworLyoKKyAqIFBvc2lmbGV4IGluYyByZXRhaWwgZXF1aXBtZW50IChodHRwOi8vd3d3LnBvc2lmbGV4LmNvbS50dykKKyAqLworI2RlZmluZSBQT1NJRkxFWF9WSUQJCTB4MGQzYSAgLyogVmVuZG9yIElEICovCisjZGVmaW5lIFBPU0lGTEVYX1BQNzAwMF9QSUQJMHgwMzAwICAvKiBQUC03MDAwSUkgdGhlcm1hbCBwcmludGVyICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0d28gS09CSUwgY2hpcGNhcmQgdGVybWluYWxzLgorICovCisjZGVmaW5lIEtPQklMX1ZJRAkJMHgwZDQ2CS8qIEtPQklMIFZlbmRvciBJRCAqLworI2RlZmluZSBLT0JJTF9DT05WX0IxX1BJRAkweDIwMjAJLyogS09CSUwgS29udmVydGVyIGZvciBCMSAqLworI2RlZmluZSBLT0JJTF9DT05WX0tBQU5fUElECTB4MjAyMQkvKiBLT0JJTF9Lb252ZXJ0ZXIgZm9yIEtBQU4gKi8KKworI2RlZmluZSBGVERJX05GX1JJQ19WSUQJMHgwRENECS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEZhbGNvbSBXaXJlbGVzcyBDb21tdW5pY2F0aW9ucyBHbWJICisgKi8KKyNkZWZpbmUgRkFMQ09NX1ZJRAkJMHgwRjk0CS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGQUxDT01fVFdJU1RfUElECTB4MDAwMQkvKiBGYWxjb20gVHdpc3QgVVNCIEdQUlMgbW9kZW0gKi8KKyNkZWZpbmUgRkFMQ09NX1NBTUJBX1BJRAkweDAwMDUJLyogRmFsY29tIFNhbWJhIFVTQiBHUFJTIG1vZGVtICovCisKKy8qIExhcnNlbiBhbmQgQnJ1c2dhYXJkIEFsdGlUcmFjay9VU0J0cmFjayAgKi8KKyNkZWZpbmUgTEFSU0VOQlJVU0dBQVJEX1ZJRAkJMHgwRkQ4CisjZGVmaW5lIExCX0FMVElUUkFDS19QSUQJCTB4MDAwMQorCisvKgorICogVFRpIChUaHVybGJ5IFRoYW5kYXIgSW5zdHJ1bWVudHMpCisgKi8KKyNkZWZpbmUgVFRJX1ZJRAkJCTB4MTAzRQkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgVFRJX1FMMzU1UF9QSUQJCTB4MDNFOAkvKiBUVGkgUUwzNTVQIHBvd2VyIHN1cHBseSAqLworCisvKiBJbnRlcmJpb21ldHJpY3MgVVNCIEkvTyBCb2FyZCAqLworLyogRGV2ZWxvcGVkIGZvciBJbnRlcmJpb21ldHJpY3MgYnkgUnVkb2xmIEd1Z2xlciAqLworI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEICAgICAgMHgxMDAyCisjZGVmaW5lIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEIDB4MTAwNgorCisvKgorICogVGVzdG8gcHJvZHVjdHMgKGh0dHA6Ly93d3cudGVzdG8uY29tLykKKyAqIFN1Ym1pdHRlZCBieSBDb2xpbiBMZXJveQorICovCisjZGVmaW5lIFRFU1RPX1ZJRAkJCTB4MTI4RAorI2RlZmluZSBURVNUT19VU0JfSU5URVJGQUNFX1BJRAkJMHgwMDAxCisKKy8qCisgKiBNb2JpbGl0eSBFbGVjdHJvbmljcyBwcm9kdWN0cy4KKyAqLworI2RlZmluZSBNT0JJTElUWV9WSUQJCQkweDEzNDIKKyNkZWZpbmUgTU9CSUxJVFlfVVNCX1NFUklBTF9QSUQJCTB4MDIwMgkvKiBFYXNpRG9jayBVU0IgMjAwIHNlcmlhbCAqLworCisvKgorICogRklDIC8gT3Blbk1va28sIEluYy4gaHR0cDovL3dpa2kub3Blbm1va28ub3JnL3dpa2kvTmVvMTk3M19EZWJ1Z19Cb2FyZF92MworICogU3VibWl0dGVkIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+CisgKi8KKyNkZWZpbmUJRklDX1ZJRAkJCTB4MTQ1NworI2RlZmluZQlGSUNfTkVPMTk3M19ERUJVR19QSUQJMHg1MTE4CisKKy8qIE9saW1leCAqLworI2RlZmluZSBPTElNRVhfVklECQkJMHgxNUJBCisjZGVmaW5lIE9MSU1FWF9BUk1fVVNCX09DRF9QSUQJCTB4MDAwMworCisvKgorICogVGVsbGR1cyBUZWNobm9sb2dpZXMKKyAqLworI2RlZmluZSBURUxMRFVTX1ZJRAkJCTB4MTc4MQkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgVEVMTERVU19URUxMU1RJQ0tfUElECQkweDBDMzAJLyogUkYgY29udHJvbCBkb25nbGUgNDMzIE1IeiB1c2luZyBGVDIzMlJMICovCisKKy8qCisgKiBCYXllciBBc2NlbnNpYSBDb250b3VyIGJsb29kIGdsdWNvc2UgbWV0ZXIgVVNCLWNvbnZlcnRlciBjYWJsZS4KKyAqIGh0dHA6Ly93aW5nbHVjb2ZhY3RzLmNvbS9jYWJsZXMvCisgKi8KKyNkZWZpbmUgQkFZRVJfVklEICAgICAgICAgICAgICAgICAgICAgIDB4MUE3OQorI2RlZmluZSBCQVlFUl9DT05UT1VSX0NBQkxFX1BJRCAgICAgICAgMHg2MDAxCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgRlRESSBSYW5nZQorICogQW55dGhpbmcgaW4gdGhpcyByYW5nZSB3aWxsIHVzZSBhbiBGVDIzMlJMLgorICovCisjZGVmaW5lIE1UWE9SQl9WSUQJCQkweDFCM0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMF9QSUQJMHgwMTAwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDFfUElECTB4MDEwMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAyX1BJRAkweDAxMDIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwM19QSUQJMHgwMTAzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDRfUElECTB4MDEwNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA1X1BJRAkweDAxMDUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNl9QSUQJMHgwMTA2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDdfUElECTB4MDEwNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA4X1BJRAkweDAxMDgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwOV9QSUQJMHgwMTA5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEFfUElECTB4MDEwQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBCX1BJRAkweDAxMEIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQ19QSUQJMHgwMTBDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMERfUElECTB4MDEwRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBFX1BJRAkweDAxMEUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRl9QSUQJMHgwMTBGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTBfUElECTB4MDExMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTExX1BJRAkweDAxMTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMl9QSUQJMHgwMTEyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTNfUElECTB4MDExMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE0X1BJRAkweDAxMTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNV9QSUQJMHgwMTE1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTZfUElECTB4MDExNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE3X1BJRAkweDAxMTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOF9QSUQJMHgwMTE4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTlfUElECTB4MDExOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFBX1BJRAkweDAxMUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQl9QSUQJMHgwMTFCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUNfUElECTB4MDExQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFEX1BJRAkweDAxMUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRV9QSUQJMHgwMTFFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUZfUElECTB4MDExRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIwX1BJRAkweDAxMjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMV9QSUQJMHgwMTIxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjJfUElECTB4MDEyMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIzX1BJRAkweDAxMjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNF9QSUQJMHgwMTI0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjVfUElECTB4MDEyNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI2X1BJRAkweDAxMjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyN19QSUQJMHgwMTI3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjhfUElECTB4MDEyOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI5X1BJRAkweDAxMjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQV9QSUQJMHgwMTJBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkJfUElECTB4MDEyQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJDX1BJRAkweDAxMkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRF9QSUQJMHgwMTJECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkVfUElECTB4MDEyRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJGX1BJRAkweDAxMkYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMF9QSUQJMHgwMTMwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzFfUElECTB4MDEzMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMyX1BJRAkweDAxMzIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzM19QSUQJMHgwMTMzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzRfUElECTB4MDEzNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM1X1BJRAkweDAxMzUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNl9QSUQJMHgwMTM2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzdfUElECTB4MDEzNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM4X1BJRAkweDAxMzgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzOV9QSUQJMHgwMTM5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0FfUElECTB4MDEzQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNCX1BJRAkweDAxM0IKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQ19QSUQJMHgwMTNDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0RfUElECTB4MDEzRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNFX1BJRAkweDAxM0UKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRl9QSUQJMHgwMTNGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDBfUElECTB4MDE0MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQxX1BJRAkweDAxNDEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ml9QSUQJMHgwMTQyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDNfUElECTB4MDE0MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ0X1BJRAkweDAxNDQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0NV9QSUQJMHgwMTQ1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDZfUElECTB4MDE0NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ3X1BJRAkweDAxNDcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OF9QSUQJMHgwMTQ4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDlfUElECTB4MDE0OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRBX1BJRAkweDAxNEEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ql9QSUQJMHgwMTRCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNENfUElECTB4MDE0QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTREX1BJRAkweDAxNEQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0RV9QSUQJMHgwMTRFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEZfUElECTB4MDE0RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUwX1BJRAkweDAxNTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1MV9QSUQJMHgwMTUxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTJfUElECTB4MDE1MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUzX1BJRAkweDAxNTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NF9QSUQJMHgwMTU0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTVfUElECTB4MDE1NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU2X1BJRAkweDAxNTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1N19QSUQJMHgwMTU3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNThfUElECTB4MDE1OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU5X1BJRAkweDAxNTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1QV9QSUQJMHgwMTVBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUJfUElECTB4MDE1QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVDX1BJRAkweDAxNUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RF9QSUQJMHgwMTVECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUVfUElECTB4MDE1RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVGX1BJRAkweDAxNUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MF9QSUQJMHgwMTYwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjFfUElECTB4MDE2MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYyX1BJRAkweDAxNjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2M19QSUQJMHgwMTYzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjRfUElECTB4MDE2NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY1X1BJRAkweDAxNjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Nl9QSUQJMHgwMTY2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjdfUElECTB4MDE2NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY4X1BJRAkweDAxNjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2OV9QSUQJMHgwMTY5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkFfUElECTB4MDE2QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZCX1BJRAkweDAxNkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Q19QSUQJMHgwMTZDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkRfUElECTB4MDE2RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZFX1BJRAkweDAxNkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Rl9QSUQJMHgwMTZGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzBfUElECTB4MDE3MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcxX1BJRAkweDAxNzEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ml9QSUQJMHgwMTcyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzNfUElECTB4MDE3MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc0X1BJRAkweDAxNzQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3NV9QSUQJMHgwMTc1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzZfUElECTB4MDE3NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc3X1BJRAkweDAxNzcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OF9QSUQJMHgwMTc4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzlfUElECTB4MDE3OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdBX1BJRAkweDAxN0EKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ql9QSUQJMHgwMTdCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0NfUElECTB4MDE3QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdEX1BJRAkweDAxN0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3RV9QSUQJMHgwMTdFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0ZfUElECTB4MDE3RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgwX1BJRAkweDAxODAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4MV9QSUQJMHgwMTgxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODJfUElECTB4MDE4MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgzX1BJRAkweDAxODMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NF9QSUQJMHgwMTg0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODVfUElECTB4MDE4NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg2X1BJRAkweDAxODYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4N19QSUQJMHgwMTg3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODhfUElECTB4MDE4OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg5X1BJRAkweDAxODkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4QV9QSUQJMHgwMThBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEJfUElECTB4MDE4QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThDX1BJRAkweDAxOEMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RF9QSUQJMHgwMThECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEVfUElECTB4MDE4RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThGX1BJRAkweDAxOEYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MF9QSUQJMHgwMTkwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTFfUElECTB4MDE5MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkyX1BJRAkweDAxOTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5M19QSUQJMHgwMTkzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTRfUElECTB4MDE5NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk1X1BJRAkweDAxOTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Nl9QSUQJMHgwMTk2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTdfUElECTB4MDE5NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk4X1BJRAkweDAxOTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5OV9QSUQJMHgwMTk5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUFfUElECTB4MDE5QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlCX1BJRAkweDAxOUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Q19QSUQJMHgwMTlDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOURfUElECTB4MDE5RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlFX1BJRAkweDAxOUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Rl9QSUQJMHgwMTlGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTBfUElECTB4MDFBMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUExX1BJRAkweDAxQTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMl9QSUQJMHgwMUEyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTNfUElECTB4MDFBMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE0X1BJRAkweDAxQTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNV9QSUQJMHgwMUE1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTZfUElECTB4MDFBNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE3X1BJRAkweDAxQTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOF9QSUQJMHgwMUE4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTlfUElECTB4MDFBOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFBX1BJRAkweDAxQUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQl9QSUQJMHgwMUFCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUNfUElECTB4MDFBQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFEX1BJRAkweDAxQUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRV9QSUQJMHgwMUFFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUZfUElECTB4MDFBRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIwX1BJRAkweDAxQjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMV9QSUQJMHgwMUIxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjJfUElECTB4MDFCMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIzX1BJRAkweDAxQjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNF9QSUQJMHgwMUI0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjVfUElECTB4MDFCNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI2X1BJRAkweDAxQjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCN19QSUQJMHgwMUI3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjhfUElECTB4MDFCOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI5X1BJRAkweDAxQjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQV9QSUQJMHgwMUJBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkJfUElECTB4MDFCQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJDX1BJRAkweDAxQkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRF9QSUQJMHgwMUJECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkVfUElECTB4MDFCRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJGX1BJRAkweDAxQkYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMF9QSUQJMHgwMUMwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzFfUElECTB4MDFDMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMyX1BJRAkweDAxQzIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDM19QSUQJMHgwMUMzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzRfUElECTB4MDFDNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM1X1BJRAkweDAxQzUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNl9QSUQJMHgwMUM2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzdfUElECTB4MDFDNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM4X1BJRAkweDAxQzgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDOV9QSUQJMHgwMUM5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0FfUElECTB4MDFDQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNCX1BJRAkweDAxQ0IKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQ19QSUQJMHgwMUNDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0RfUElECTB4MDFDRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNFX1BJRAkweDAxQ0UKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRl9QSUQJMHgwMUNGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDBfUElECTB4MDFEMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQxX1BJRAkweDAxRDEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMl9QSUQJMHgwMUQyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDNfUElECTB4MDFEMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ0X1BJRAkweDAxRDQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENV9QSUQJMHgwMUQ1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDZfUElECTB4MDFENgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ3X1BJRAkweDAxRDcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOF9QSUQJMHgwMUQ4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDlfUElECTB4MDFEOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURBX1BJRAkweDAxREEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQl9QSUQJMHgwMURCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRENfUElECTB4MDFEQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUREX1BJRAkweDAxREQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERV9QSUQJMHgwMURFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREZfUElECTB4MDFERgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUwX1BJRAkweDAxRTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMV9QSUQJMHgwMUUxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTJfUElECTB4MDFFMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUzX1BJRAkweDAxRTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNF9QSUQJMHgwMUU0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTVfUElECTB4MDFFNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU2X1BJRAkweDAxRTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFN19QSUQJMHgwMUU3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRThfUElECTB4MDFFOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU5X1BJRAkweDAxRTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQV9QSUQJMHgwMUVBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUJfUElECTB4MDFFQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVDX1BJRAkweDAxRUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRF9QSUQJMHgwMUVECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUVfUElECTB4MDFFRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVGX1BJRAkweDAxRUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMF9QSUQJMHgwMUYwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjFfUElECTB4MDFGMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYyX1BJRAkweDAxRjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGM19QSUQJMHgwMUYzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjRfUElECTB4MDFGNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY1X1BJRAkweDAxRjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNl9QSUQJMHgwMUY2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjdfUElECTB4MDFGNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY4X1BJRAkweDAxRjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGOV9QSUQJMHgwMUY5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkFfUElECTB4MDFGQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZCX1BJRAkweDAxRkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQ19QSUQJMHgwMUZDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkRfUElECTB4MDFGRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZFX1BJRAkweDAxRkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRl9QSUQJMHgwMUZGCisKKworCisvKgorICogVGhlIE1vYmlsaXR5IExhYiAoVE1MKQorICogU3VibWl0dGVkIGJ5IFBpZXJyZSBDYXN0ZWxsYQorICovCisjZGVmaW5lIFRNTF9WSUQJCQkweDFCOTEJLyogVmVuZG9yIElEICovCisjZGVmaW5lIFRNTF9VU0JfU0VSSUFMX1BJRAkweDAwNjQJLyogVVNCIC0gU2VyaWFsIENvbnZlcnRlciAqLworCisvKiBBbHRpLTIgcHJvZHVjdHMgIGh0dHA6Ly93d3cuYWx0aS0yLmNvbSAqLworI2RlZmluZSBBTFRJMl9WSUQJMHgxQkM5CisjZGVmaW5lIEFMVEkyX04zX1BJRAkweDYwMDEJLyogTmVwdHVuZSAzICovCisKKy8qCisgKiBEcmVzZGVuIEVsZWt0cm9uaWMgU2Vuc29yIFRlcm1pbmFsIEJvYXJkCisgKi8KKyNkZWZpbmUgREVfVklECQkJMHgxY2YxIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBTVEJfUElECQkJMHgwMDAxIC8qIFNlbnNvciBUZXJtaW5hbCBCb2FyZCAqLworI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCisKKy8qCisgKiBQYXBvdWNoIHByb2R1Y3RzIChodHRwOi8vd3d3LnBhcG91Y2guY29tLykKKyAqIFN1Ym1pdHRlZCBieSBGb2xrZXJ0IHZhbiBIZXVzZGVuCisgKi8KKworI2RlZmluZSBQQVBPVUNIX1ZJRAkJCTB4NTA1MAkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgUEFQT1VDSF9UTVVfUElECQkJMHgwNDAwCS8qIFRNVSBVU0IgVGhlcm1vbWV0ZXIgKi8KKyNkZWZpbmUgUEFQT1VDSF9RVUlETzR4NF9QSUQJCTB4MDkwMAkvKiBRdWlkbyA0LzQgTW9kdWxlICovCisKKy8qCisgKiBNYXJ2ZWxsIFNoZWV2YVBsdWcKKyAqLworI2RlZmluZSBNQVJWRUxMX1ZJRAkJMHg5ZTg4CisjZGVmaW5lIE1BUlZFTExfU0hFRVZBUExVR19QSUQJMHg5ZThmCisKKy8qCisgKiBFdm9sdXRpb24gUm9ib3RpY3MgcHJvZHVjdHMgKGh0dHA6Ly93d3cuZXZvbHV0aW9uLmNvbS8pLgorICogU3VibWl0dGVkIGJ5IFNoYXduIE0uIExhdmVsbGUuCisgKi8KKyNkZWZpbmUgRVZPTFVUSU9OX1ZJRAkJMHhERUVFCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBFVk9MVVRJT05fRVIxX1BJRAkweDAzMDAJLyogRVIxIENvbnRyb2wgTW9kdWxlICovCisjZGVmaW5lIEVWT184VTIzMkFNX1BJRAkweDAyRkYJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTIgKEZUMjMyQU0pKi8KKyNkZWZpbmUgRVZPX0hZQlJJRF9QSUQJCTB4MDMwMgkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNNCBQSUQgKEZUMjMyQk0pKi8KKyNkZWZpbmUgRVZPX1JDTTRfUElECQkweDAzMDMJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwppbmRleCA0ODVmYTljLi4yY2ZlMjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKQEAgLTEyNyw4ICsxMjcsOSBAQAogI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVM5TUwyXzQJMHhBQzMwCiAjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfMgkweEFDMzEKICNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTUFRMNF80CTB4QUMzMgotI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yICAgICAgIDB4QUM0MgotI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80ICAgICAgIDB4QUM0NAorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yCTB4QUM0MgorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80CTB4QUM0NAorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMMl80CTB4QUMyNAogCiAvKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzCiAgKiBBVEVOIFVDMjMyNCBkZXZpY2UgdXNpbmcgTW9zY2hpcCBNQ1M3ODQwCkBAIC0xOTEsNiArMTkyLDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNQVEw0XzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfNCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEwyXzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzI0KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEX1VDMjMyMil9LAogCXt9CQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTIwNyw2ICsyMDksNyBAQAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzIpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80KX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDJfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVRFTklOVEwsIEFURU5JTlRMX0RFVklDRV9JRF9VQzIzMjQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzIyKX0sCiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDlhMmI5MDMuLjZlOTRhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTM0MCw2ICszNDAsMTAgQEAKICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfVkVORE9SX0lECQkweDFjOWUKICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQJCTB4OTYwMwogCisvKiBIYWllciBwcm9kdWN0cyAqLworI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCisjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfUklDT0xBKSB9LApAQCAtNjQxLDYgKzY0NSw3IEBACiAJeyBVU0JfREVWSUNFKEFJUlBMVVNfVkVORE9SX0lELCBBSVJQTFVTX1BST0RVQ1RfTUNENjUwKSB9LAogCXsgVVNCX0RFVklDRShUTEFZVEVDSF9WRU5ET1JfSUQsIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwKSB9LAogCXsgVVNCX0RFVklDRShGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSB9LAorCXsgVVNCX0RFVklDRShIQUlFUl9WRU5ET1JfSUQsIEhBSUVSX1BST0RVQ1RfQ0UxMDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jIGIvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCmluZGV4IGRhN2MwMWIuLjNhNTYxZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCkBAIC0xNTczLDE1ICsxNTczLDE1IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBuYW1lKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJZXJyID0gLUVOT01FTTsKIAljZmIgPSBjeWJlcnByb19hbGxvY19mYl9pbmZvKGlkLT5kcml2ZXJfZGF0YSwgbmFtZSk7CiAJaWYgKCFjZmIpCiAJCWdvdG8gZmFpbGVkX3JlbGVhc2U7CiAKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgY2ZiLT5mYi5maXguaWQpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbGVkX3JlZ2lvbnM7CisKIAljZmItPmRldiA9IGRldjsKIAljZmItPnJlZ2lvbiA9IHBjaV9pb3JlbWFwX2JhcihkZXYsIDApOwogCWlmICghY2ZiLT5yZWdpb24pCkBAIC0xNjMzLDEwICsxNjMzLDEwIEBACiBmYWlsZWQ6CiAJaW91bm1hcChjZmItPnJlZ2lvbik7CiBmYWlsZWRfaW9yZW1hcDoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CitmYWlsZWRfcmVnaW9uczoKIAljeWJlcnByb19mcmVlX2ZiX2luZm8oY2ZiKTsKIGZhaWxlZF9yZWxlYXNlOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKLQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKaW5kZXggOWM2NTk0NC4uOWQ3ZDE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKQEAgLTI0MiwxNCArMjQyLDE0IEBACiAJfQogCiAJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKLQkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsIHJlcy0+bmFtZSk7CisJCQlyZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CiAJaWYgKCFyZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSByZWdpb25cbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCXdkdC0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwkJCXJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF3ZHQtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYwppbmRleCBlOGFlNjM4Li4wMzc4NDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jd2R0LT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKKwl3ZHQtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlZ3MpKTsKIAlpZiAoIXdkdC0+cmVncykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgbWFwIEkvTyBtZW1vcnlcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCmluZGV4IDlkNzUyMGZhLi44ODcxMzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAl3ZHRfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPm5hbWUpOwogCiAJaWYgKHdkdF9tZW0gPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCmluZGV4IGU0NGZiYjMuLmM4YTNiZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqCWRvY3VtZW50IG51bWJlciAzMTY5NzItMDA0LCAzMTY5NzMtMDEyOiA4MjgwMUkgKElDSDkpCiAgKglkb2N1bWVudCBudW1iZXIgMzE5OTczLTAwMiwgMzE5OTc0LTAwMjogODI4MDFKIChJQ0gxMCkKICAqCWRvY3VtZW50IG51bWJlciAzMjIxNjktMDAxLCAzMjIxNzAtMDAxOiA1IFNlcmllcywgMzQwMCBTZXJpZXMgKFBDSCkKKyAqCWRvY3VtZW50IG51bWJlciAzMjAwNjYtMDAzLCAzMjAyNTctMDA4OiBFUDgwNTk3IChJSUNIKQogICovCiAKIC8qCkBAIC0xMDAsNiArMTAxLDcgQEAKIAlUQ09fUENILAkvKiBQQ0ggRGVza3RvcCBGdWxsIEZlYXR1cmVkICovCiAJVENPX1BDSE0sCS8qIFBDSCBNb2JpbGUgRnVsbCBGZWF0dXJlZCAqLwogCVRDT19QQ0hNU0ZGLAkvKiBQQ0ggTW9iaWxlIFNGRiBGdWxsIEZlYXR1cmVkICovCisJVENPX0VQODA1NzksCS8qIEVQODA1NzkgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewpAQCAtMTQzLDYgKzE0NSw3IEBACiAJeyJQQ0ggRGVza3RvcCBGdWxsIEZlYXR1cmVkIiwgMn0sCiAJeyJQQ0ggTW9iaWxlIEZ1bGwgRmVhdHVyZWQiLCAyfSwKIAl7IlBDSCBNb2JpbGUgU0ZGIEZ1bGwgRmVhdHVyZWQiLCAyfSwKKwl7IkVQODA1NzkiLCAyfSwKIAl7TlVMTCwgMH0KIH07CiAKQEAgLTIxNCw2ICsyMTcsNyBAQAogCXsgSVRDT19QQ0lfREVWSUNFKDB4M2IwMCwJCQkJVENPX1BDSCl9LAogCXsgSVRDT19QQ0lfREVWSUNFKDB4M2IwMSwJCQkJVENPX1BDSE0pfSwKIAl7IElUQ09fUENJX0RFVklDRSgweDNiMGQsCQkJCVRDT19QQ0hNU0ZGKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHg1MDMxLAkJCQlUQ09fRVA4MDU3OSl9LAogCXsgMCwgfSwJCQkvKiBFbmQgb2YgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpVENPX3dkdF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKaW5kZXggODNmYTM0Yi4uYTJkYzA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQotCXdkdC0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJd2R0LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghd2R0LT5iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKaW5kZXggYWNmNTg5ZC4uYTUxZGJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJaWYgKCFyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW12NjR4NjBfd2R0X3JlZ3MgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCW12NjR4NjBfd2R0X3JlZ3MgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAobXY2NHg2MF93ZHRfcmVncyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCmluZGV4IDQyOWVhOTkuLmM2YWFmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKQEAgLTI3Nyw4ICsyNzcsNyBAQAogCQlnb3RvIGVycl9idXN5OwogCX0KIAotCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAotCQkJCSBwZGV2LT5uYW1lKTsKKwltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKIAlpZiAoIW1lbSkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2J1c3k7CkBAIC0zMDYsNyArMzA1LDcgQEAKIAkJZ290byBlcnJfY2xrOwogCX0KIAotCXdkZXYtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXdkZXYtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF3ZGV2LT5iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CkBAIC0zNTgsNyArMzU3LDcgQEAKIAlrZnJlZSh3ZGV2KTsKIAogZXJyX2t6YWxsb2M6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCiBlcnJfYnVzeToKIGVycl9nZXRfcmVzb3VyY2U6CkBAIC0zODMsNyArMzgyLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltaXNjX2RlcmVnaXN0ZXIoJih3ZGV2LT5vbWFwX3dkdF9taXNjZGV2KSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJY2xrX3B1dCh3ZGV2LT5pY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IDRkMjI3YjE1Li40MzBhNTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAl3ZHRfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPm5hbWUpOwogCiAJaWYgKHdkdF9tZW0gPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCmluZGV4IDg1YjkzZTEuLjg3NjBhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlzaXplID0gKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxOworCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJd2R0X21lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKIAlpZiAod2R0X21lbSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy90eHg5d2R0LmMKaW5kZXggNmFkYWI3Ny4uZDYzNTU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy90eHg5d2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy90eHg5d2R0LmMKQEAgLTIxNCwxMiArMjE0LDEwIEBACiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKQogCQlnb3RvIGV4aXRfYnVzeTsKLQlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZkZXYtPmRldiwKLQkJCQkgICAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQkgICAgICJ0eHg5d2R0IikpCiAJCWdvdG8gZXhpdF9idXN5OwotCXR4eDl3ZHRfcmVnID0gZGV2bV9pb3JlbWFwKCZkZXYtPmRldiwKLQkJCQkgICByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwl0eHg5d2R0X3JlZyA9IGRldm1faW9yZW1hcCgmZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF0eHg5d2R0X3JlZykKIAkJZ290byBleGl0X2J1c3k7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBhZDE0MjI3Li40NTVlNmU2IDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAkJaWYgKG1heF9ibG9ja3MgPiBESU9fTUFYX0JMT0NLUykKIAkJCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCBESU9fQ1JFRElUUyArCi0JCQkJMiAqIEVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKSk7CisJCQkJRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKSk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwogCQkJZ290byBvdXQ7CkBAIC0zMTQ2LDggKzMxNDYsOCBAQAogCiAJCS8qICh1c2VyK2dyb3VwKSoob2xkK25ldykgc3RydWN0dXJlLCBpbm9kZSB3cml0ZSAoc2IsCiAJCSAqIGlub2RlIGJsb2NrLCA/IC0gYnV0IHRydW5jYXRlIGlub2RlIHVwZGF0ZSBoYXMgaXQpICovCi0JCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgMiooRVhUM19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikrCi0JCQkJCUVYVDNfUVVPVEFfREVMX0JMT0NLUyhpbm9kZS0+aV9zYikpKzMpOworCQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGlub2RlLT5pX3NiKSsKKwkJCQkJRVhUM19NQVhRVU9UQVNfREVMX0JMT0NLUyhpbm9kZS0+aV9zYikrMyk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJZXJyb3IgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0zMjM5LDcgKzMyMzksNyBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCS8qIFdlIGtub3cgdGhhdCBzdHJ1Y3R1cmUgd2FzIGFscmVhZHkgYWxsb2NhdGVkIGR1cmluZyB2ZnNfZHFfaW5pdCBzbwogCSAqIHdlIHdpbGwgYmUgdXBkYXRpbmcgb25seSB0aGUgZGF0YSBibG9ja3MgKyBpbm9kZXMgKi8KLQlyZXQgKz0gMipFWFQzX1FVT1RBX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYik7CisJcmV0ICs9IEVYVDNfTUFYUVVPVEFTX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYik7CiAjZW5kaWYKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9leHQzL25hbWVpLmMgYi9mcy9leHQzL25hbWVpLmMKaW5kZXggYWFkNjQwMC4uN2IwZTQ0ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTE2OTksNyArMTY5OSw3IEBACiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDMgKwotCQkJCQkyKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CisJCQkJCUVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIApAQCAtMTczMyw3ICsxNzMzLDcgQEAKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCi0JCQkJCTIqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKKwkJCQkJRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwogCkBAIC0xNzY5LDcgKzE3NjksNyBAQAogcmV0cnk6CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJCQkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyAzICsKLQkJCQkJMipFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOworCQkJCQlFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKQEAgLTE5MjAsNyArMTkyMCw3IEBACiAJc3RydWN0IGV4dDNfaWxvYyBpbG9jOwogCWludCBlcnIgPSAwLCByYzsKIAotCWxvY2tfc3VwZXIoc2IpOworCW11dGV4X2xvY2soJkVYVDNfU0Ioc2IpLT5zX29ycGhhbl9sb2NrKTsKIAlpZiAoIWxpc3RfZW1wdHkoJkVYVDNfSShpbm9kZSktPmlfb3JwaGFuKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCkBAIC0xOTI5LDkgKzE5MjksMTMgQEAKIAogCS8qIEBAQCBGSVhNRTogT2JzZXJ2YXRpb24gZnJvbSBhdmlybzoKIAkgKiBJIHRoaW5rIEkgY2FuIHRyaWdnZXIgSl9BU1NFUlQgaW4gZXh0M19vcnBoYW5fYWRkKCkuICBXZSBibG9jawotCSAqIGhlcmUgKG9uIGxvY2tfc3VwZXIoKSksIHNvIHJhY2Ugd2l0aCBleHQzX2xpbmsoKSB3aGljaCBtaWdodCBidW1wCisJICogaGVyZSAob24gc19vcnBoYW5fbG9jayksIHNvIHJhY2Ugd2l0aCBleHQzX2xpbmsoKSB3aGljaCBtaWdodCBidW1wCiAJICogLT5pX25saW5rLiBGb3IsIHNheSBpdCwgY2hhcmFjdGVyIGRldmljZS4gTm90IGEgcmVndWxhciBmaWxlLAogCSAqIG5vdCBhIGRpcmVjdG9yeSwgbm90IGEgc3ltbGluayBhbmQgLT5pX25saW5rID4gMC4KKwkgKgorCSAqIHR5dHNvLCA0LzI1LzIwMDk6IEknbSBub3Qgc3VyZSBob3cgdGhhdCBjb3VsZCBoYXBwZW47CisJICogc2hvdWxkbid0IHRoZSBmcyBjb3JlIHByb3RlY3QgdXMgZnJvbSB0aGVzZSBzb3J0IG9mCisJICogdW5saW5rKCkvbGluaygpIHJhY2VzPwogCSAqLwogCUpfQVNTRVJUICgoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8CiAJCVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHx8IGlub2RlLT5pX25saW5rID09IDApOwpAQCAtMTk2OCw3ICsxOTcyLDcgQEAKIAlqYmRfZGVidWcoNCwgIm9ycGhhbiBpbm9kZSAlbHUgd2lsbCBwb2ludCB0byAlZFxuIiwKIAkJCWlub2RlLT5pX2lubywgTkVYVF9PUlBIQU4oaW5vZGUpKTsKIG91dF91bmxvY2s6Ci0JdW5sb2NrX3N1cGVyKHNiKTsKKwltdXRleF91bmxvY2soJkVYVDNfU0Ioc2IpLT5zX29ycGhhbl9sb2NrKTsKIAlleHQzX3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgZXJyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTk4NiwxMSArMTk5MCw5IEBACiAJc3RydWN0IGV4dDNfaWxvYyBpbG9jOwogCWludCBlcnIgPSAwOwogCi0JbG9ja19zdXBlcihpbm9kZS0+aV9zYik7Ci0JaWYgKGxpc3RfZW1wdHkoJmVpLT5pX29ycGhhbikpIHsKLQkJdW5sb2NrX3N1cGVyKGlub2RlLT5pX3NiKTsKLQkJcmV0dXJuIDA7Ci0JfQorCW11dGV4X2xvY2soJkVYVDNfU0IoaW5vZGUtPmlfc2IpLT5zX29ycGhhbl9sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmZWktPmlfb3JwaGFuKSkKKwkJZ290byBvdXQ7CiAKIAlpbm9fbmV4dCA9IE5FWFRfT1JQSEFOKGlub2RlKTsKIAlwcmV2ID0gZWktPmlfb3JwaGFuLnByZXY7CkBAIC0yMDQwLDcgKzIwNDIsNyBAQAogb3V0X2VycjoKIAlleHQzX3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgZXJyKTsKIG91dDoKLQl1bmxvY2tfc3VwZXIoaW5vZGUtPmlfc2IpOworCW11dGV4X3VubG9jaygmRVhUM19TQihpbm9kZS0+aV9zYiktPnNfb3JwaGFuX2xvY2spOwogCXJldHVybiBlcnI7CiAKIG91dF9icmVsc2U6CkBAIC0yMTc1LDcgKzIxNzcsNyBAQAogcmV0cnk6CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJCQkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyA1ICsKLQkJCQkJMipFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOworCQkJCQlFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDVmODNiNjEuLjU0MzUxYWMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwogCi0JbG9ja19zdXBlcihzYik7CisJbXV0ZXhfbG9jaygmc2JpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoaW5wdXQtPmdyb3VwICE9IHNiaS0+c19ncm91cHNfY291bnQpIHsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfam91cm5hbDsKQEAgLTMyNCw3ICszMjQsNyBAQAogCWJyZWxzZShiaCk7CiAKIGV4aXRfam91cm5hbDoKLQl1bmxvY2tfc3VwZXIoc2IpOworCW11dGV4X3VubG9jaygmc2JpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoKGVycjIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpKSAmJiAhZXJyKQogCQllcnIgPSBlcnIyOwogCkBAIC02NjIsMTEgKzY2MiwxMiBAQAogICogaW1wb3J0YW50IHBhcnQgaXMgdGhhdCB0aGUgbmV3IGJsb2NrIGFuZCBpbm9kZSBjb3VudHMgYXJlIGluIHRoZSBiYWNrdXAKICAqIHN1cGVyYmxvY2tzLCBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXcgZ3JvdXAgbWV0YWRhdGEgaW4gdGhlIEdEVCBiYWNrdXBzLgogICoKLSAqIFdlIGRvIG5vdCBuZWVkIGxvY2tfc3VwZXIoKSBmb3IgdGhpcywgYmVjYXVzZSB0aGVzZSBibG9ja3MgYXJlIG5vdAotICogb3RoZXJ3aXNlIHRvdWNoZWQgYnkgdGhlIGZpbGVzeXN0ZW0gY29kZSB3aGVuIGl0IGlzIG1vdW50ZWQuICBXZSBkb24ndAotICogbmVlZCB0byB3b3JyeSBhYm91dCBsYXN0IGNoYW5naW5nIGZyb20gc2JpLT5zX2dyb3Vwc19jb3VudCwgYmVjYXVzZSB0aGUKLSAqIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGF0IHdlIGRvIG5vdCBjb3B5IHRoZSBmdWxsIG51bWJlciBvZiBiYWNrdXBzCi0gKiBhdCB0aGlzIHRpbWUuICBUaGUgcmVzaXplIHdoaWNoIGNoYW5nZWQgc19ncm91cHNfY291bnQgd2lsbCBiYWNrdXAgYWdhaW4uCisgKiBXZSBkbyBub3QgbmVlZCB0YWtlIHRoZSBzX3Jlc2l6ZV9sb2NrIGZvciB0aGlzLCBiZWNhdXNlIHRoZXNlCisgKiBibG9ja3MgYXJlIG5vdCBvdGhlcndpc2UgdG91Y2hlZCBieSB0aGUgZmlsZXN5c3RlbSBjb2RlIHdoZW4gaXQgaXMKKyAqIG1vdW50ZWQuICBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGxhc3QgY2hhbmdpbmcgZnJvbQorICogc2JpLT5zX2dyb3Vwc19jb3VudCwgYmVjYXVzZSB0aGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuIGlzIHRoYXQgd2UKKyAqIGRvIG5vdCBjb3B5IHRoZSBmdWxsIG51bWJlciBvZiBiYWNrdXBzIGF0IHRoaXMgdGltZS4gIFRoZSByZXNpemUKKyAqIHdoaWNoIGNoYW5nZWQgc19ncm91cHNfY291bnQgd2lsbCBiYWNrdXAgYWdhaW4uCiAgKi8KIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYWNrdXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgICBpbnQgYmxrX29mZiwgY2hhciAqZGF0YSwgaW50IHNpemUpCkBAIC04MjUsNyArODI2LDcgQEAKIAkJZ290byBleGl0X3B1dDsKIAl9CiAKLQlsb2NrX3N1cGVyKHNiKTsKKwltdXRleF9sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwogCWlmIChpbnB1dC0+Z3JvdXAgIT0gc2JpLT5zX2dyb3Vwc19jb3VudCkgewogCQlleHQzX3dhcm5pbmcoc2IsIF9fZnVuY19fLAogCQkJICAgICAibXVsdGlwbGUgcmVzaXplcnMgcnVuIG9uIGZpbGVzeXN0ZW0hIik7CkBAIC04NTYsNyArODU3LDcgQEAKIAkvKgogCSAqIE9LLCBub3cgd2UndmUgc2V0IHVwIHRoZSBuZXcgZ3JvdXAuICBUaW1lIHRvIG1ha2UgaXQgYWN0aXZlLgogCSAqCi0JICogQ3VycmVudCBrZXJuZWxzIGRvbid0IGxvY2sgYWxsIGFsbG9jYXRpb25zIHZpYSBsb2NrX3N1cGVyKCksCisJICogV2UgZG8gbm90IGxvY2sgYWxsIGFsbG9jYXRpb25zIHZpYSBzX3Jlc2l6ZV9sb2NrCiAJICogc28gd2UgaGF2ZSB0byBiZSBzYWZlIHdydC4gY29uY3VycmVudCBhY2Nlc3NlcyB0aGUgZ3JvdXAKIAkgKiBkYXRhLiAgU28gd2UgbmVlZCB0byBiZSBjYXJlZnVsIHRvIHNldCBhbGwgb2YgdGhlIHJlbGV2YW50CiAJICogZ3JvdXAgZGVzY3JpcHRvciBkYXRhIGV0Yy4gKmJlZm9yZSogd2UgZW5hYmxlIHRoZSBncm91cC4KQEAgLTkwMCwxMiArOTAxLDEyIEBACiAJICoKIAkgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOgogCSAqCi0JICogKiBXcml0ZXJzIG9mIHNfZ3JvdXBzX2NvdW50ICptdXN0KiBob2xkIGxvY2tfc3VwZXIKKwkgKiAqIFdyaXRlcnMgb2Ygc19ncm91cHNfY291bnQgKm11c3QqIGhvbGQgc19yZXNpemVfbG9jawogCSAqIEFORAogCSAqICogV3JpdGVycyBtdXN0IHBlcmZvcm0gYSBzbXBfd21iKCkgYWZ0ZXIgdXBkYXRpbmcgYWxsIGRlcGVuZGVudAogCSAqICAgZGF0YSBhbmQgYmVmb3JlIG1vZGlmeWluZyB0aGUgZ3JvdXBzIGNvdW50CiAJICoKLQkgKiAqIFJlYWRlcnMgbXVzdCBob2xkIGxvY2tfc3VwZXIoKSBvdmVyIHRoZSBhY2Nlc3MKKwkgKiAqIFJlYWRlcnMgbXVzdCBob2xkIHNfcmVzaXplX2xvY2sgb3ZlciB0aGUgYWNjZXNzCiAJICogT1IKIAkgKiAqIFJlYWRlcnMgbXVzdCBwZXJmb3JtIGFuIHNtcF9ybWIoKSBhZnRlciByZWFkaW5nIHRoZSBncm91cHMgY291bnQKIAkgKiAgIGFuZCBiZWZvcmUgcmVhZGluZyBhbnkgZGVwZW5kZW50IGRhdGEuCkBAIC05MzYsNyArOTM3LDcgQEAKIAlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBzYmktPnNfc2JoKTsKIAogZXhpdF9qb3VybmFsOgotCXVubG9ja19zdXBlcihzYik7CisJbXV0ZXhfdW5sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwogCWlmICgoZXJyMiA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSkpICYmICFlcnIpCiAJCWVyciA9IGVycjI7CiAJaWYgKCFlcnIpIHsKQEAgLTk3Myw3ICs5NzQsNyBAQAogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBsb2NraW5nIHdydCBvdGhlciByZXNpemVycyBqdXN0CiAJICogeWV0OiB3ZSdyZSBnb2luZyB0byByZXZhbGlkYXRlIGVzLT5zX2Jsb2Nrc19jb3VudCBhZnRlcgotCSAqIHRha2luZyBsb2NrX3N1cGVyKCkgYmVsb3cuICovCisJICogdGFraW5nIHRoZSBzX3Jlc2l6ZV9sb2NrIGJlbG93LiAqLwogCW9fYmxvY2tzX2NvdW50ID0gbGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50KTsKIAlvX2dyb3Vwc19jb3VudCA9IEVYVDNfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsKIApAQCAtMTA0NSwxMSArMTA0NiwxMSBAQAogCQlnb3RvIGV4aXRfcHV0OwogCX0KIAotCWxvY2tfc3VwZXIoc2IpOworCW11dGV4X2xvY2soJkVYVDNfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlpZiAob19ibG9ja3NfY291bnQgIT0gbGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50KSkgewogCQlleHQzX3dhcm5pbmcoc2IsIF9fZnVuY19fLAogCQkJICAgICAibXVsdGlwbGUgcmVzaXplcnMgcnVuIG9uIGZpbGVzeXN0ZW0hIik7Ci0JCXVubG9ja19zdXBlcihzYik7CisJCW11dGV4X3VubG9jaygmRVhUM19TQihzYiktPnNfcmVzaXplX2xvY2spOwogCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXhpdF9wdXQ7CkBAIC0xMDU5LDEzICsxMDYwLDEzIEBACiAJCQkJCQkgRVhUM19TQihzYiktPnNfc2JoKSkpIHsKIAkJZXh0M193YXJuaW5nKHNiLCBfX2Z1bmNfXywKIAkJCSAgICAgImVycm9yICVkIG9uIGpvdXJuYWwgd3JpdGUgYWNjZXNzIiwgZXJyKTsKLQkJdW5sb2NrX3N1cGVyKHNiKTsKKwkJbXV0ZXhfdW5sb2NrKCZFWFQzX1NCKHNiKS0+c19yZXNpemVfbG9jayk7CiAJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCWdvdG8gZXhpdF9wdXQ7CiAJfQogCWVzLT5zX2Jsb2Nrc19jb3VudCA9IGNwdV90b19sZTMyKG9fYmxvY2tzX2NvdW50ICsgYWRkKTsKIAlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBFWFQzX1NCKHNiKS0+c19zYmgpOwotCXVubG9ja19zdXBlcihzYik7CisJbXV0ZXhfdW5sb2NrKCZFWFQzX1NCKHNiKS0+c19yZXNpemVfbG9jayk7CiAJZXh0M19kZWJ1ZygiZnJlZWluZyBibG9ja3MgJWx1IHRocm91Z2ggIkUzRlNCTEsiXG4iLCBvX2Jsb2Nrc19jb3VudCwKIAkJICAgb19ibG9ja3NfY291bnQgKyBhZGQpOwogCWV4dDNfZnJlZV9ibG9ja3Nfc2IoaGFuZGxlLCBzYiwgb19ibG9ja3NfY291bnQsIGFkZCwgJmZyZWVkX2Jsb2Nrcyk7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggN2FkMWU4Yy4uYWZhMmI1NiAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtMTkyOCw2ICsxOTI4LDggQEAKIAlzYi0+ZHFfb3AgPSAmZXh0M19xdW90YV9vcGVyYXRpb25zOwogI2VuZGlmCiAJSU5JVF9MSVNUX0hFQUQoJnNiaS0+c19vcnBoYW4pOyAvKiB1bmxpbmtlZCBidXQgb3BlbiBmaWxlcyAqLworCW11dGV4X2luaXQoJnNiaS0+c19vcnBoYW5fbG9jayk7CisJbXV0ZXhfaW5pdCgmc2JpLT5zX3Jlc2l6ZV9sb2NrKTsKIAogCXNiLT5zX3Jvb3QgPSBOVUxMOwogCkBAIC0yMDE0LDE0ICsyMDE2LDcgQEAKIAl9CiAKIAlleHQzX3NldHVwX3N1cGVyIChzYiwgZXMsIHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKTsKLQkvKgotCSAqIGFrcG06IGNvcmUgcmVhZF9zdXBlcigpIGNhbGxzIGluIGhlcmUgd2l0aCB0aGUgc3VwZXJibG9jayBsb2NrZWQuCi0JICogVGhhdCBkZWFkbG9ja3MsIGJlY2F1c2Ugb3JwaGFuIGNsZWFudXAgbmVlZHMgdG8gbG9jayB0aGUgc3VwZXJibG9jawotCSAqIGluIG51bWVyb3VzIHBsYWNlcy4gIEhlcmUgd2UganVzdCBwb3AgdGhlIGxvY2sgLSBpdCdzIHJlbGF0aXZlbHkKLQkgKiBoYXJtbGVzcywgYmVjYXVzZSB3ZSBhcmUgbm93IHJlYWR5IHRvIGFjY2VwdCB3cml0ZV9zdXBlcigpIHJlcXVlc3RzLAotCSAqIGFuZCBhdmlybyBzYXlzIHRoYXQncyB0aGUgb25seSByZWFzb24gZm9yIGhhbmdpbmcgb250byB0aGUKLQkgKiBzdXBlcmJsb2NrIGxvY2suCi0JICovCisKIAlFWFQzX1NCKHNiKS0+c19tb3VudF9zdGF0ZSB8PSBFWFQzX09SUEhBTl9GUzsKIAlleHQzX29ycGhhbl9jbGVhbnVwKHNiLCBlcyk7CiAJRVhUM19TQihzYiktPnNfbW91bnRfc3RhdGUgJj0gfkVYVDNfT1JQSEFOX0ZTOwpAQCAtMjQwMywxMyArMjM5OCwxMSBAQAogCWlmIChqb3VybmFsX2ZsdXNoKGpvdXJuYWwpIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlsb2NrX3N1cGVyKHNiKTsKIAlpZiAoRVhUM19IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpICYmCiAJICAgIHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSB7CiAJCUVYVDNfQ0xFQVJfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpOwogCQlleHQzX2NvbW1pdF9zdXBlcihzYiwgZXMsIDEpOwogCX0KLQl1bmxvY2tfc3VwZXIoc2IpOwogCiBvdXQ6CiAJam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsKTsKQEAgLTI2MDEsMTMgKzI1OTQsNyBAQAogCQkJICAgIChzYmktPnNfbW91bnRfc3RhdGUgJiBFWFQzX1ZBTElEX0ZTKSkKIAkJCQllcy0+c19zdGF0ZSA9IGNwdV90b19sZTE2KHNiaS0+c19tb3VudF9zdGF0ZSk7CiAKLQkJCS8qCi0JCQkgKiBXZSBoYXZlIHRvIHVubG9jayBzdXBlciBzbyB0aGF0IHdlIGNhbiB3YWl0IGZvcgotCQkJICogdHJhbnNhY3Rpb25zLgotCQkJICovCi0JCQl1bmxvY2tfc3VwZXIoc2IpOwogCQkJZXh0M19tYXJrX3JlY292ZXJ5X2NvbXBsZXRlKHNiLCBlcyk7Ci0JCQlsb2NrX3N1cGVyKHNiKTsKIAkJfSBlbHNlIHsKIAkJCV9fbGUzMiByZXQ7CiAJCQlpZiAoKHJldCA9IEVYVDNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCBhYjMxZTY1Li41NmY5MjcxIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAorKysgYi9mcy9leHQ0L2V4dDQuaApAQCAtNzA0LDYgKzcwNCwxMCBAQAogCV9fdTE2IGlfZXh0cmFfaXNpemU7CiAKIAlzcGlubG9ja190IGlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jazsKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwkvKiBxdW90YSBzcGFjZSByZXNlcnZhdGlvbiwgbWFuYWdlZCBpbnRlcm5hbGx5IGJ5IHF1b3RhIGNvZGUgKi8KKwlxc2l6ZV90IGlfcmVzZXJ2ZWRfcXVvdGE7CisjZW5kaWYKIAogCS8qIGNvbXBsZXRlZCBhc3luYyBESU9zIHRoYXQgbWlnaHQgbmVlZCB1bndyaXR0ZW4gZXh0ZW50cyBoYW5kbGluZyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgaV9haW9fZGlvX2NvbXBsZXRlX2xpc3Q7CkBAIC0xNDM1LDcgKzE0MzksNyBAQAogZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3RydW5jYXRlX3BhZ2UoaGFuZGxlX3QgKmhhbmRsZSwKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBmcm9tKTsKIGV4dGVybiBpbnQgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKLWV4dGVybiBxc2l6ZV90IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHFzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBmbHVzaF9haW9fZGlvX2NvbXBsZXRlZF9JTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIC8qIGlvY3RsLmMgKi8KIGV4dGVybiBsb25nIGV4dDRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCA1MzUyZGIxLi5hYjgwNzk2IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xMDAzLDE3ICsxMDAzLDEyIEBACiAJcmV0dXJuIGVycjsKIH0KIAotcXNpemVfdCBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorI2lmZGVmIENPTkZJR19RVU9UQQorcXNpemVfdCAqZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWw7Ci0KLQlzcGluX2xvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7Ci0JdG90YWwgPSBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzICsKLQkJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKLQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKLQotCXJldHVybiAodG90YWwgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJcmV0dXJuICZFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX3F1b3RhOwogfQorI2VuZGlmCiAvKgogICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQogICogdG8gYWxsb2NhdGUgQGJsb2NrcyBmb3Igbm9uIGV4dGVudCBmaWxlIGJhc2VkIGZpbGUKQEAgLTEwNTEsNyArMTA0Niw3IEBACiBzdGF0aWMgdm9pZCBleHQ0X2RhX3VwZGF0ZV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB1c2VkKQogewogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpOwotCWludCB0b3RhbCwgbWRiLCBtZGJfZnJlZTsKKwlpbnQgdG90YWwsIG1kYiwgbWRiX2ZyZWUsIG1kYl9jbGFpbSA9IDA7CiAKIAlzcGluX2xvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAJLyogcmVjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBtZXRhYmxvY2tzIHN0aWxsIG5lZWQgdG8gYmUgcmVzZXJ2ZWQgKi8KQEAgLTEwNjQsNyArMTA1OSw5IEBACiAKIAlpZiAobWRiX2ZyZWUpIHsKIAkJLyogQWNjb3VudCBmb3IgYWxsb2NhdGVkIG1ldGFfYmxvY2tzICovCi0JCW1kYl9mcmVlIC09IEVYVDRfSShpbm9kZSktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzOworCQltZGJfY2xhaW0gPSBFWFQ0X0koaW5vZGUpLT5pX2FsbG9jYXRlZF9tZXRhX2Jsb2NrczsKKwkJQlVHX09OKG1kYl9mcmVlIDwgbWRiX2NsYWltKTsKKwkJbWRiX2ZyZWUgLT0gbWRiX2NsYWltOwogCiAJCS8qIHVwZGF0ZSBmcyBkaXJ0eSBibG9ja3MgY291bnRlciAqLwogCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCBtZGJfZnJlZSk7CkBAIC0xMDc1LDggKzEwNzIsMTEgQEAKIAkvKiB1cGRhdGUgcGVyLWlub2RlIHJlc2VydmF0aW9ucyAqLwogCUJVR19PTih1c2VkICA+IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOwogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgLT0gdXNlZDsKKwlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCB1c2VkICsgbWRiX2NsYWltKTsKIAlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAorCXZmc19kcV9jbGFpbV9ibG9jayhpbm9kZSwgdXNlZCArIG1kYl9jbGFpbSk7CisKIAkvKgogCSAqIGZyZWUgdGhvc2Ugb3Zlci1ib29raW5nIHF1b3RhIGZvciBtZXRhZGF0YSBibG9ja3MKIAkgKi8KQEAgLTE4MTYsMTkgKzE4MTYsMTcgQEAKIAogCW1kX25lZWRlZCA9IG1kYmxvY2tzIC0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKIAl0b3RhbCA9IG1kX25lZWRlZCArIG5yYmxvY2tzOworCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCiAJLyoKIAkgKiBNYWtlIHF1b3RhIHJlc2VydmF0aW9uIGhlcmUgdG8gcHJldmVudCBxdW90YSBvdmVyZmxvdwogCSAqIGxhdGVyLiBSZWFsIHF1b3RhIGFjY291bnRpbmcgaXMgZG9uZSBhdCBwYWdlcyB3cml0ZW91dAogCSAqIHRpbWUuCiAJICovCi0JaWYgKHZmc19kcV9yZXNlcnZlX2Jsb2NrKGlub2RlLCB0b3RhbCkpIHsKLQkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJaWYgKHZmc19kcV9yZXNlcnZlX2Jsb2NrKGlub2RlLCB0b3RhbCkpCiAJCXJldHVybiAtRURRVU9UOwotCX0KIAogCWlmIChleHQ0X2NsYWltX2ZyZWVfYmxvY2tzKHNiaSwgdG90YWwpKSB7Ci0JCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgdG90YWwpOwogCQlpZiAoZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkgewogCQkJeWllbGQoKTsKQEAgLTE4MzYsMTAgKzE4MzQsMTEgQEAKIAkJfQogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CisJc3Bpbl9sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKz0gbnJibG9ja3M7Ci0JRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyA9IG1kYmxvY2tzOwotCisJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyArPSBtZF9uZWVkZWQ7CiAJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisKIAlyZXR1cm4gMDsgICAgICAgLyogc3VjY2VzcyAqLwogfQogCkBAIC00Nzk0LDYgKzQ3OTMsOSBAQAogCQkJKChfX3U2NClsZTE2X3RvX2NwdShyYXdfaW5vZGUtPmlfZmlsZV9hY2xfaGlnaCkpIDw8IDMyOwogCWlub2RlLT5pX3NpemUgPSBleHQ0X2lzaXplKHJhd19pbm9kZSk7CiAJZWktPmlfZGlza3NpemUgPSBpbm9kZS0+aV9zaXplOworI2lmZGVmIENPTkZJR19RVU9UQQorCWVpLT5pX3Jlc2VydmVkX3F1b3RhID0gMDsKKyNlbmRpZgogCWlub2RlLT5pX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAJZWktPmlfYmxvY2tfZ3JvdXAgPSBpbG9jLmJsb2NrX2dyb3VwOwogCWVpLT5pX2xhc3RfYWxsb2NfZ3JvdXAgPSB+MDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggYjFmZDNkYS4uZDM0YWZhZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTI3NTUsMTIgKzI3NTUsNiBAQAogCWlmICghKGFjLT5hY19mbGFncyAmIEVYVDRfTUJfREVMQUxMT0NfUkVTRVJWRUQpKQogCQkvKiByZWxlYXNlIGFsbCB0aGUgcmVzZXJ2ZWQgYmxvY2tzIGlmIG5vbiBkZWxhbGxvYyAqLwogCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCByZXNlcnZfYmxrcyk7Ci0JZWxzZSB7Ci0JCXBlcmNwdV9jb3VudGVyX3N1Yigmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIsCi0JCQkJCQlhYy0+YWNfYl9leC5mZV9sZW4pOwotCQkvKiBjb252ZXJ0IHJlc2VydmVkIHF1b3RhIGJsb2NrcyB0byByZWFsIHF1b3RhIGJsb2NrcyAqLwotCQl2ZnNfZHFfY2xhaW1fYmxvY2soYWMtPmFjX2lub2RlLCBhYy0+YWNfYl9leC5mZV9sZW4pOwotCX0KIAogCWlmIChzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgewogCQlleHQ0X2dyb3VwX3QgZmxleF9ncm91cCA9IGV4dDRfZmxleF9ncm91cChzYmksCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggODI3YmRlMS4uNmVkOWFhOSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNzA0LDYgKzcwNCw5IEBACiAJZWktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzID0gMDsKIAllaS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmKGVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spKTsKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwllaS0+aV9yZXNlcnZlZF9xdW90YSA9IDA7CisjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KTsKIAllaS0+Y3VyX2Fpb19kaW8gPSBOVUxMOwogCWVpLT5pX3N5bmNfdGlkID0gMDsKQEAgLTEwMTQsNyArMTAxNyw5IEBACiAJLnJlc2VydmVfc3BhY2UJPSBkcXVvdF9yZXNlcnZlX3NwYWNlLAogCS5jbGFpbV9zcGFjZQk9IGRxdW90X2NsYWltX3NwYWNlLAogCS5yZWxlYXNlX3Jzdgk9IGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UsCisjaWZkZWYgQ09ORklHX1FVT1RBCiAJLmdldF9yZXNlcnZlZF9zcGFjZSA9IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlLAorI2VuZGlmCiAJLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCiAJLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAogCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IDQxNjBhZmEuLmJkMjI0ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtMTkxMyw3ICsxOTEzLDcgQEAKIHsKIAlqYmRfZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImpiZCIsIE5VTEwpOwogCWlmIChqYmRfZGVidWdmc19kaXIpCi0JCWpiZF9kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX3U4KCJqYmQtZGVidWciLCBTX0lSVUdPLAorCQlqYmRfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OCgiamJkLWRlYnVnIiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCSAgICAgICBqYmRfZGVidWdmc19kaXIsCiAJCQkJCSAgICAgICAmam91cm5hbF9lbmFibGVfZGVidWcpOwogfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBiN2NhM2E5Li4xN2FmODc5IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtMjExNSw3ICsyMTE1LDggQEAKIHsKIAlqYmQyX2RlYnVnZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJqYmQyIiwgTlVMTCk7CiAJaWYgKGpiZDJfZGVidWdmc19kaXIpCi0JCWpiZDJfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OChKQkQyX0RFQlVHX05BTUUsIFNfSVJVR08sCisJCWpiZDJfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OChKQkQyX0RFQlVHX05BTUUsCisJCQkJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJICAgICAgIGpiZDJfZGVidWdmc19kaXIsCiAJCQkJCSAgICAgICAmamJkMl9qb3VybmFsX2VuYWJsZV9kZWJ1Zyk7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9LY29uZmlnIGIvZnMvb2NmczIvS2NvbmZpZwppbmRleCA3MDFiN2EzLi4wZDg0MDY2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9LY29uZmlnCisrKyBiL2ZzL29jZnMyL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IFFVT1RBCiAJc2VsZWN0IFFVT1RBX1RSRUUKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJaGVscAogCSAgT0NGUzIgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZXh0ZW50IGJhc2VkIHNoYXJlZCBkaXNrIGNsdXN0ZXIgZmlsZQogCSAgc3lzdGVtIHdpdGggbWFueSBzaW1pbGFyaXRpZXMgdG8gZXh0My4gSXQgc3VwcG9ydHMgNjQgYml0IGlub2RlCkBAIC03NCwxMiArNzUsMyBAQAogCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgZXhwZW5zaXZlIGNvbnNpc3RlbmN5IGNoZWNrcy4gRW5hYmxlCiAJICB0aGlzIG9wdGlvbiBmb3IgZGVidWdnaW5nIG9ubHkgYXMgaXQgaXMgbGlrZWx5IHRvIGRlY3JlYXNlCiAJICBwZXJmb3JtYW5jZSBvZiB0aGUgZmlsZXN5c3RlbS4KLQotY29uZmlnIE9DRlMyX0ZTX1BPU0lYX0FDTAotCWJvb2wgIk9DRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgotCWRlcGVuZHMgb24gT0NGUzJfRlMKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvTWFrZWZpbGUgYi9mcy9vY2ZzMi9NYWtlZmlsZQppbmRleCAzMWYyNWNlLi42MDBkMmQyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtMzksMTEgKzM5LDggQEAKIAl2ZXIubwkJCVwKIAlxdW90YV9sb2NhbC5vCQlcCiAJcXVvdGFfZ2xvYmFsLm8JCVwKLQl4YXR0ci5vCi0KLWlmZXEgKCQoQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTCkseSkKLW9jZnMyLW9ianMgKz0gYWNsLm8KLWVuZGlmCisJeGF0dHIubwkJCVwKKwlhY2wubwogCiBvY2ZzMl9zdGFja2dsdWUtb2JqcyA6PSBzdGFja2dsdWUubwogb2NmczJfc3RhY2tfbzJjYi1vYmpzIDo9IHN0YWNrX28yY2IubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuYwppbmRleCBlM2U0NzQxNS4uMDUwMTk3NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKKysrIGIvZnMvb2NmczIvYWNsLmMKQEAgLTk4LDE1ICs5OCwxMSBAQAogCQkJCQkgICAgICBpbnQgdHlwZSwKIAkJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKIHsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKIAlpbnQgbmFtZV9pbmRleDsKIAljaGFyICp2YWx1ZSA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByZXR2YWw7CiAKLQlpZiAoIShvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSkKLQkJcmV0dXJuIE5VTEw7Ci0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKIAkJbmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDhmNjM4OWUuLjVjNWQzMWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCisrKyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yNiw4ICsyNiw2IEBACiAJX19sZTMyIGVfaWQ7CiB9OwogCi0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTAotCiBleHRlcm4gaW50IG9jZnMyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLApAQCAtMzUsMjQgKzMzLDQgQEAKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7CiAKLSNlbHNlIC8qIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wqLwotCi0jZGVmaW5lIG9jZnMyX2NoZWNrX2FjbCBOVUxMCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKLQkJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTCovCi0KICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuYyBiL2ZzL29jZnMyL2FsbG9jLmMKaW5kZXggZmI0ZTY3Mi4uZDE3YmRjNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuYworKysgYi9mcy9vY2ZzMi9hbGxvYy5jCkBAIC0xNzY1LDkgKzE3NjUsOSBAQAogICoKICAqIFRoZSBhcnJheSBpbmRleCBvZiB0aGUgc3VidHJlZSByb290IGlzIHBhc3NlZCBiYWNrLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJICAgc3RydWN0IG9jZnMyX3BhdGggKmxlZnQsCi0JCQkJICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0KQoraW50IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKmxlZnQsCisJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0KQogewogCWludCBpID0gMDsKIApAQCAtMjg3Miw4ICsyODcyLDggQEAKICAqIFRoaXMgbG9va3Mgc2ltaWxhciwgYnV0IGlzIHN1YnRseSBkaWZmZXJlbnQgdG8KICAqIG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKCkuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJCSAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIHUzMiAqY3BvcykKK2ludCBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgdTMyICpjcG9zKQogewogCWludCBpLCBqLCByZXQgPSAwOwogCXU2NCBibGtubzsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmggYi9mcy9vY2ZzMi9hbGxvYy5oCmluZGV4IDljMTIyZDU3Li4xZGI0MzU5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5oCisrKyBiL2ZzL29jZnMyL2FsbG9jLmgKQEAgLTMxNyw0ICszMTcsOSBAQAogaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpOworaW50IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCB1MzIgKmNwb3MpOworaW50IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKmxlZnQsCisJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0KTsKICNlbmRpZiAvKiBPQ0ZTMl9BTExPQ19IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwppbmRleCBjNDUyZDExLi5lZGE1YjhiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKQEAgLTE3Niw3ICsxNzYsOCBAQAogCiBzdGF0aWMgdm9pZCBvMmhiX2FybV93cml0ZV90aW1lb3V0KHN0cnVjdCBvMmhiX3JlZ2lvbiAqcmVnKQogewotCW1sb2coMCwgIlF1ZXVlIHdyaXRlIHRpbWVvdXQgZm9yICV1IG1zXG4iLCBPMkhCX01BWF9XUklURV9USU1FT1VUX01TKTsKKwltbG9nKE1MX0hFQVJUQkVBVCwgIlF1ZXVlIHdyaXRlIHRpbWVvdXQgZm9yICV1IG1zXG4iLAorCSAgICAgTzJIQl9NQVhfV1JJVEVfVElNRU9VVF9NUyk7CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZyZWctPmhyX3dyaXRlX3RpbWVvdXRfd29yayk7CiAJcmVnLT5ocl9sYXN0X3RpbWVvdXRfc3RhcnQgPSBqaWZmaWVzOwpAQCAtODc0LDcgKzg3NSw4IEBACiAJCWRvX2dldHRpbWVvZmRheSgmYWZ0ZXJfaGIpOwogCQllbGFwc2VkX21zZWMgPSBvMmhiX2VsYXBzZWRfbXNlY3MoJmJlZm9yZV9oYiwgJmFmdGVyX2hiKTsKIAotCQltbG9nKDAsICJzdGFydCA9ICVsdS4lbHUsIGVuZCA9ICVsdS4lbHUsIG1zZWMgPSAldVxuIiwKKwkJbWxvZyhNTF9IRUFSVEJFQVQsCisJCSAgICAgInN0YXJ0ID0gJWx1LiVsdSwgZW5kID0gJWx1LiVsdSwgbXNlYyA9ICV1XG4iLAogCQkgICAgIGJlZm9yZV9oYi50dl9zZWMsICh1bnNpZ25lZCBsb25nKSBiZWZvcmVfaGIudHZfdXNlYywKIAkJICAgICBhZnRlcl9oYi50dl9zZWMsICh1bnNpZ25lZCBsb25nKSBhZnRlcl9oYi50dl91c2VjLAogCQkgICAgIGVsYXBzZWRfbXNlYyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKaW5kZXggN2VlNjE4OC4uYzgxMTQyZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYwpAQCAtMzUsNiArMzUsMTAgQEAKICAqIGNsdXN0ZXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHdoZXJlIG5vZGVzIGFyZSBsb29rZWQgdXAgKi8KIHN0cnVjdCBvMm5tX2NsdXN0ZXIgKm8ybm1fc2luZ2xlX2NsdXN0ZXIgPSBOVUxMOwogCitjaGFyICpvMm5tX2ZlbmNlX21ldGhvZF9kZXNjW08yTk1fRkVOQ0VfTUVUSE9EU10gPSB7CisJCSJyZXNldCIsCS8qIE8yTk1fRkVOQ0VfUkVTRVQgKi8KKwkJInBhbmljIiwJLyogTzJOTV9GRU5DRV9QQU5JQyAqLworfTsKIAogc3RydWN0IG8ybm1fbm9kZSAqbzJubV9nZXRfbm9kZV9ieV9udW0odTggbm9kZV9udW0pCiB7CkBAIC01NzksNiArNTgzLDQzIEBACiAJcmV0dXJuIG8ybm1fY2x1c3Rlcl9hdHRyX3dyaXRlKHBhZ2UsIGNvdW50LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2x1c3Rlci0+Y2xfcmVjb25uZWN0X2RlbGF5X21zKTsKIH0KKworc3RhdGljIHNzaXplX3QgbzJubV9jbHVzdGVyX2F0dHJfZmVuY2VfbWV0aG9kX3JlYWQoCisJc3RydWN0IG8ybm1fY2x1c3RlciAqY2x1c3RlciwgY2hhciAqcGFnZSkKK3sKKwlzc2l6ZV90IHJldCA9IDA7CisKKwlpZiAoY2x1c3RlcikKKwkJcmV0ID0gc3ByaW50ZihwYWdlLCAiJXNcbiIsCisJCQkgICAgICBvMm5tX2ZlbmNlX21ldGhvZF9kZXNjW2NsdXN0ZXItPmNsX2ZlbmNlX21ldGhvZF0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZF93cml0ZSgKKwlzdHJ1Y3QgbzJubV9jbHVzdGVyICpjbHVzdGVyLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAocGFnZVtjb3VudCAtIDFdICE9ICdcbicpCisJCWdvdG8gYmFpbDsKKworCWZvciAoaSA9IDA7IGkgPCBPMk5NX0ZFTkNFX01FVEhPRFM7ICsraSkgeworCQlpZiAoY291bnQgIT0gc3RybGVuKG8ybm1fZmVuY2VfbWV0aG9kX2Rlc2NbaV0pICsgMSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RybmNhc2VjbXAocGFnZSwgbzJubV9mZW5jZV9tZXRob2RfZGVzY1tpXSwgY291bnQgLSAxKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2x1c3Rlci0+Y2xfZmVuY2VfbWV0aG9kICE9IGkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIm9jZnMyOiBDaGFuZ2luZyBmZW5jZSBtZXRob2QgdG8gJXNcbiIsCisJCQkgICAgICAgbzJubV9mZW5jZV9tZXRob2RfZGVzY1tpXSk7CisJCQljbHVzdGVyLT5jbF9mZW5jZV9tZXRob2QgPSBpOworCQl9CisJCXJldHVybiBjb3VudDsKKwl9CisKK2JhaWw6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbzJubV9jbHVzdGVyX2F0dHJpYnV0ZSBvMm5tX2NsdXN0ZXJfYXR0cl9pZGxlX3RpbWVvdXRfbXMgPSB7CiAJLmF0dHIJPSB7IC5jYV9vd25lciA9IFRISVNfTU9EVUxFLAogCQkgICAgLmNhX25hbWUgPSAiaWRsZV90aW1lb3V0X21zIiwKQEAgLTYwMywxMCArNjQ0LDE5IEBACiAJLnN0b3JlCT0gbzJubV9jbHVzdGVyX2F0dHJfcmVjb25uZWN0X2RlbGF5X21zX3dyaXRlLAogfTsKIAorc3RhdGljIHN0cnVjdCBvMm5tX2NsdXN0ZXJfYXR0cmlidXRlIG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZCA9IHsKKwkuYXR0cgk9IHsgLmNhX293bmVyID0gVEhJU19NT0RVTEUsCisJCSAgICAuY2FfbmFtZSA9ICJmZW5jZV9tZXRob2QiLAorCQkgICAgLmNhX21vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAorCS5zaG93CT0gbzJubV9jbHVzdGVyX2F0dHJfZmVuY2VfbWV0aG9kX3JlYWQsCisJLnN0b3JlCT0gbzJubV9jbHVzdGVyX2F0dHJfZmVuY2VfbWV0aG9kX3dyaXRlLAorfTsKKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm8ybm1fY2x1c3Rlcl9hdHRyc1tdID0gewogCSZvMm5tX2NsdXN0ZXJfYXR0cl9pZGxlX3RpbWVvdXRfbXMuYXR0ciwKIAkmbzJubV9jbHVzdGVyX2F0dHJfa2VlcGFsaXZlX2RlbGF5X21zLmF0dHIsCiAJJm8ybm1fY2x1c3Rlcl9hdHRyX3JlY29ubmVjdF9kZWxheV9tcy5hdHRyLAorCSZvMm5tX2NsdXN0ZXJfYXR0cl9mZW5jZV9tZXRob2QuYXR0ciwKIAlOVUxMLAogfTsKIHN0YXRpYyBzc2l6ZV90IG8ybm1fY2x1c3Rlcl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKQEAgLTc3OCw2ICs4MjgsNyBAQAogCWNsdXN0ZXItPmNsX3JlY29ubmVjdF9kZWxheV9tcyA9IE8yTkVUX1JFQ09OTkVDVF9ERUxBWV9NU19ERUZBVUxUOwogCWNsdXN0ZXItPmNsX2lkbGVfdGltZW91dF9tcyAgICA9IE8yTkVUX0lETEVfVElNRU9VVF9NU19ERUZBVUxUOwogCWNsdXN0ZXItPmNsX2tlZXBhbGl2ZV9kZWxheV9tcyA9IE8yTkVUX0tFRVBBTElWRV9ERUxBWV9NU19ERUZBVUxUOworCWNsdXN0ZXItPmNsX2ZlbmNlX21ldGhvZCAgICAgICA9IE8yTk1fRkVOQ0VfUkVTRVQ7CiAKIAlyZXQgPSAmY2x1c3Rlci0+Y2xfZ3JvdXA7CiAJbzJubV9zaW5nbGVfY2x1c3RlciA9IGNsdXN0ZXI7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmggYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmgKaW5kZXggYzk5MmVhMC4uMDllYTJkMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuaApAQCAtMzMsNiArMzMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogCitlbnVtIG8ybm1fZmVuY2VfbWV0aG9kIHsKKwlPMk5NX0ZFTkNFX1JFU0VUCT0gMCwKKwlPMk5NX0ZFTkNFX1BBTklDLAorCU8yTk1fRkVOQ0VfTUVUSE9EUywJLyogTnVtYmVyIG9mIGZlbmNlIG1ldGhvZHMgKi8KK307CisKIHN0cnVjdCBvMm5tX25vZGUgewogCXNwaW5sb2NrX3QJCW5kX2xvY2s7CiAJc3RydWN0IGNvbmZpZ19pdGVtCW5kX2l0ZW07CkBAIC01OCw2ICs2NCw3IEBACiAJdW5zaWduZWQgaW50CQljbF9pZGxlX3RpbWVvdXRfbXM7CiAJdW5zaWduZWQgaW50CQljbF9rZWVwYWxpdmVfZGVsYXlfbXM7CiAJdW5zaWduZWQgaW50CQljbF9yZWNvbm5lY3RfZGVsYXlfbXM7CisJZW51bSBvMm5tX2ZlbmNlX21ldGhvZAljbF9mZW5jZV9tZXRob2Q7CiAKIAkvKiB0aGlzIGJpdG1hcCBpcyBwYXJ0IG9mIGEgaGFjayBmb3IgZGlzayBiaXRtYXAuLiB3aWxsIGdvIGV2ZW50dWFsbHkuIC0gemFiICovCiAJdW5zaWduZWQgbG9uZwljbF9ub2Rlc19iaXRtYXBbQklUU19UT19MT05HUyhPMk5NX01BWF9OT0RFUyldOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9xdW9ydW0uYyBiL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMKaW5kZXggYmJhY2Y3ZC4uNjM5MDI0MCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9xdW9ydW0uYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3F1b3J1bS5jCkBAIC03NCw4ICs3NCwyMCBAQAogCSAqIHRocmVhZHMgY2FuIHN0aWxsIHNjaGVkdWxlLCBldGMsIGV0YyAqLwogCW8yaGJfc3RvcF9hbGxfcmVnaW9ucygpOwogCi0JcHJpbnRrKCJvY2ZzMiBpcyB2ZXJ5IHNvcnJ5IHRvIGJlIGZlbmNpbmcgdGhpcyBzeXN0ZW0gYnkgcmVzdGFydGluZ1xuIik7Ci0JZW1lcmdlbmN5X3Jlc3RhcnQoKTsKKwlzd2l0Y2ggKG8ybm1fc2luZ2xlX2NsdXN0ZXItPmNsX2ZlbmNlX21ldGhvZCkgeworCWNhc2UgTzJOTV9GRU5DRV9QQU5JQzoKKwkJcGFuaWMoIioqKiBvY2ZzMiBpcyB2ZXJ5IHNvcnJ5IHRvIGJlIGZlbmNpbmcgdGhpcyBzeXN0ZW0gYnkgIgorCQkgICAgICAicGFuaWNpbmcgKioqXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTihvMm5tX3NpbmdsZV9jbHVzdGVyLT5jbF9mZW5jZV9tZXRob2QgPj0KKwkJCU8yTk1fRkVOQ0VfTUVUSE9EUyk7CisJY2FzZSBPMk5NX0ZFTkNFX1JFU0VUOgorCQlwcmludGsoS0VSTl9FUlIgIioqKiBvY2ZzMiBpcyB2ZXJ5IHNvcnJ5IHRvIGJlIGZlbmNpbmcgdGhpcyAiCisJCSAgICAgICAic3lzdGVtIGJ5IHJlc3RhcnRpbmcgKioqXG4iKTsKKwkJZW1lcmdlbmN5X3Jlc3RhcnQoKTsKKwkJYnJlYWs7CisJfTsKIH0KIAogLyogSW5kaWNhdGUgdGhhdCBhIHRpbWVvdXQgb2NjdXJlZCBvbiBhIGhlYXJiZWF0IHJlZ2lvbiB3cml0ZS4gVGhlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCmluZGV4IGQ5ZmEzZDIuLjJmOWU0ZTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCkBAIC0yNTg5LDYgKzI1ODksMTQgQEAKIAkJCSAgICAgImJlZ2luIHJlY28gbXNnICglZClcbiIsIGRsbS0+bmFtZSwgbm9kZW51bSwgcmV0KTsKIAkJCXJldCA9IDA7CiAJCX0KKwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQltbG9nKDAsICIlczogdHJ5aW5nIHRvIHN0YXJ0IHJlY292ZXJ5IG9mIG5vZGUgIgorCQkJICAgICAiJXUsIGJ1dCBub2RlICV1IGlzIHdhaXRpbmcgZm9yIGxhc3QgcmVjb3ZlcnkgIgorCQkJICAgICAidG8gY29tcGxldGUsIGJhY2tvZmYgZm9yIGEgYml0XG4iLCBkbG0tPm5hbWUsCisJCQkgICAgIGRlYWRfbm9kZSwgbm9kZW51bSk7CisJCQltc2xlZXAoMTAwKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KIAkJaWYgKHJldCA8IDApIHsKIAkJCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwogCQkJLyogdGhpcyBpcyBub3cgYSBzZXJpb3VzIHByb2JsZW0sIHBvc3NpYmx5IEVOT01FTSAKQEAgLTI2MDgsMTQgKzI2MTYsNiBAQAogCQkJICogYW5vdGhlciBFTk9NRU0gKi8KIAkJCW1zbGVlcCgxMDApOwogCQkJZ290byByZXRyeTsKLQkJfSBlbHNlIGlmIChyZXQgPT0gRUFHQUlOKSB7Ci0JCQltbG9nKDAsICIlczogdHJ5aW5nIHRvIHN0YXJ0IHJlY292ZXJ5IG9mIG5vZGUgIgotCQkJICAgICAiJXUsIGJ1dCBub2RlICV1IGlzIHdhaXRpbmcgZm9yIGxhc3QgcmVjb3ZlcnkgIgotCQkJICAgICAidG8gY29tcGxldGUsIGJhY2tvZmYgZm9yIGEgYml0XG4iLCBkbG0tPm5hbWUsCi0JCQkgICAgIGRlYWRfbm9kZSwgbm9kZW51bSk7Ci0JCQkvKiBUT0RPIExvb2sgaW50byByZXBsYWNpbmcgbXNsZWVwIHdpdGggY29uZF9yZXNjaGVkKCkgKi8KLQkJCW1zbGVlcCgxMDApOwotCQkJZ290byByZXRyeTsKIAkJfQogCX0KIApAQCAtMjYzOSw3ICsyNjM5LDcgQEAKIAkJICAgICBkbG0tPm5hbWUsIGJyLT5ub2RlX2lkeCwgYnItPmRlYWRfbm9kZSwKIAkJICAgICBkbG0tPnJlY28uZGVhZF9ub2RlLCBkbG0tPnJlY28ubmV3X21hc3Rlcik7CiAJCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKLQkJcmV0dXJuIEVBR0FJTjsKKwkJcmV0dXJuIC1FQUdBSU47CiAJfQogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXh0ZW50X21hcC5jIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCmluZGV4IDg0M2RiNjQuLmQzNWEyN2YgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYworKysgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJleHRlbnRfbWFwLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJzdXBlci5oIgorI2luY2x1ZGUgInN5bWxpbmsuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTcwMyw2ICs3MDQsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogVGhlIG9jZnMyX2ZpZW1hcF9pbmxpbmUoKSBtYXkgYmUgYSBsaXR0bGUgYml0IG1pc2xlYWRpbmcsIHNpbmNlCisgKiBpdCBub3Qgb25seSBoYW5kbGVzIHRoZSBmaWVtYXAgZm9yIGlubGluZWQgZmlsZXMsIGJ1dCBhbHNvIGRlYWxzCisgKiB3aXRoIHRoZSBmYXN0IHN5bWxpbmssIGNhdXNlIHRoZXkgaGF2ZSBubyBkaWZmZXJlbmNlIGZvciBleHRlbnQKKyAqIG1hcHBpbmcgcGVyIHNlLgorICovCiBzdGF0aWMgaW50IG9jZnMyX2ZpZW1hcF9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKIAkJCSAgICAgICBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLAogCQkJICAgICAgIHU2NCBtYXBfc3RhcnQpCkBAIC03MTUsMTEgKzcyMiwxOCBAQAogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwogCiAJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7Ci0JaWRfY291bnQgPSBsZTE2X3RvX2NwdShkaS0+aWQyLmlfZGF0YS5pZF9jb3VudCk7CisJaWYgKG9jZnMyX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpCisJCWlkX2NvdW50ID0gb2NmczJfZmFzdF9zeW1saW5rX2NoYXJzKGlub2RlLT5pX3NiKTsKKwllbHNlCisJCWlkX2NvdW50ID0gbGUxNl90b19jcHUoZGktPmlkMi5pX2RhdGEuaWRfY291bnQpOwogCiAJaWYgKG1hcF9zdGFydCA8IGlkX2NvdW50KSB7CiAJCXBoeXMgPSBvaS0+aXBfYmxrbm8gPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0JCXBoeXMgKz0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2Rpbm9kZSwgaWQyLmlfZGF0YS5pZF9kYXRhKTsKKwkJaWYgKG9jZnMyX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpCisJCQlwaHlzICs9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX3N5bWxpbmspOworCQllbHNlCisJCQlwaHlzICs9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsCisJCQkJCSBpZDIuaV9kYXRhLmlkX2RhdGEpOwogCiAJCXJldCA9IGZpZW1hcF9maWxsX25leHRfZXh0ZW50KGZpZWluZm8sIDAsIHBoeXMsIGlkX2NvdW50LAogCQkJCQkgICAgICBmbGFncyk7CkBAIC03NTYsOSArNzcwLDEwIEBACiAJZG93bl9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKIAogCS8qCi0JICogSGFuZGxlIGlubGluZS1kYXRhIHNlcGFyYXRlbHkuCisJICogSGFuZGxlIGlubGluZS1kYXRhIGFuZCBmYXN0IHN5bWxpbmsgc2VwYXJhdGVseS4KIAkgKi8KLQlpZiAoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB7CisJaWYgKChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHx8CisJICAgIG9jZnMyX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpIHsKIAkJcmV0ID0gb2NmczJfZmllbWFwX2lubGluZShpbm9kZSwgZGlfYmgsIGZpZWluZm8sIG1hcF9zdGFydCk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC03ODYsNiArODAxLDggQEAKIAkJZmVfZmxhZ3MgPSAwOwogCQlpZiAocmVjLmVfZmxhZ3MgJiBPQ0ZTMl9FWFRfVU5XUklUVEVOKQogCQkJZmVfZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9VTldSSVRURU47CisJCWlmIChyZWMuZV9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKQorCQkJZmVfZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9TSEFSRUQ7CiAJCWlmIChpc19sYXN0KQogCQkJZmVfZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9MQVNUOwogCQlsZW5fYnl0ZXMgPSAodTY0KWxlMTZfdG9fY3B1KHJlYy5lX2xlYWZfY2x1c3RlcnMpIDw8IG9zYi0+c19jbHVzdGVyc2l6ZV9iaXRzOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggZjAxMGIyMi4uNTBmYjI2YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yMTA4LDYgKzIxMDgsNyBAQAogCX0KIAlkaWRfcXVvdGFfaW5vZGUgPSAxOwogCisJaW5vZGUtPmlfbmxpbmsgPSAwOwogCS8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqLwogCXN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsCiAJCQkJICAgIDAsICZuZXdfZGlfYmgsIHBhcmVudF9kaV9iaCwgaGFuZGxlLApAQCAtMjEzNiw2ICsyMTM3LDcgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCisJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOwogbGVhdmU6CiAJaWYgKHN0YXR1cyA8IDAgJiYgZGlkX3F1b3RhX2lub2RlKQogCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CkBAIC0yMjY3LDYgKzIyNjksOCBAQAogCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwogCWxlMzJfYWRkX2NwdSgmZGktPmlfZmxhZ3MsIC1PQ0ZTMl9PUlBIQU5FRF9GTCk7CiAJZGktPmlfb3JwaGFuZWRfc2xvdCA9IDA7CisJaW5vZGUtPmlfbmxpbmsgPSAxOworCW9jZnMyX3NldF9saW5rc19jb3VudChkaSwgaW5vZGUtPmlfbmxpbmspOwogCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CiAKIAlzdGF0dXMgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnksIGlub2RlLApAQCAtMjI4NCw3ICsyMjg4LDYgQEAKIAkJZ290byBvdXRfY29tbWl0OwogCX0KIAotCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIAlkZW50cnktPmRfb3AgPSAmb2NmczJfZGVudHJ5X29wczsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXN0YXR1cyA9IDA7CkBAIC0yMzI2LDQgKzIzMjksNSBAQAogCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IG9jZnMyX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAorCS5maWVtYXAgICAgICAgICA9IG9jZnMyX2ZpZW1hcCwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMi5oIGIvZnMvb2NmczIvb2NmczIuaAppbmRleCBkOTYzZDg2Li45MzYyZWVhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMi5oCisrKyBiL2ZzL29jZnMyL29jZnMyLmgKQEAgLTI0NSw5ICsyNDUsMTEgQEAKIAlPQ0ZTMl9NT1VOVF9MT0NBTEZMT0NLUyA9IDEgPDwgNSwgLyogTm8gY2x1c3RlciBhd2FyZSB1c2VyIGZpbGUgbG9ja3MgKi8KIAlPQ0ZTMl9NT1VOVF9OT1VTRVJYQVRUUiA9IDEgPDwgNiwgLyogTm8gdXNlciB4YXR0ciAqLwogCU9DRlMyX01PVU5UX0lOT0RFNjQgPSAxIDw8IDcsCS8qIEFsbG93IGlub2RlIG51bWJlcnMgPiAyXjMyICovCi0JT0NGUzJfTU9VTlRfUE9TSVhfQUNMID0gMSA8PCA4LAkvKiBQT1NJWCBhY2Nlc3MgY29udHJvbCBsaXN0cyAqLwotCU9DRlMyX01PVU5UX1VTUlFVT1RBID0gMSA8PCA5LCAvKiBXZSBzdXBwb3J0IHVzZXIgcXVvdGFzICovCi0JT0NGUzJfTU9VTlRfR1JQUVVPVEEgPSAxIDw8IDEwLCAvKiBXZSBzdXBwb3J0IGdyb3VwIHF1b3RhcyAqLworCU9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgPDwgOCwJLyogRm9yY2UgUE9TSVggYWNjZXNzIGNvbnRyb2wgbGlzdHMgKi8KKwlPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wgPSAxIDw8IDksCS8qIERpc2FibGUgUE9TSVggYWNjZXNzCisJCQkJCQkgICBjb250cm9sIGxpc3RzICovCisJT0NGUzJfTU9VTlRfVVNSUVVPVEEgPSAxIDw8IDEwLCAvKiBXZSBzdXBwb3J0IHVzZXIgcXVvdGFzICovCisJT0NGUzJfTU9VTlRfR1JQUVVPVEEgPSAxIDw8IDExLCAvKiBXZSBzdXBwb3J0IGdyb3VwIHF1b3RhcyAqLwogfTsKIAogI2RlZmluZSBPQ0ZTMl9PU0JfU09GVF9STwkJCTB4MDAwMQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggZTk0MzFlNC4uMWExYTY3OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC0xMjAyLDcgKzEyMDIsNyBAQAogLyogSGVhZGVyIG9mIG9uZSBjaHVuayBvZiBhIHF1b3RhIGZpbGUgKi8KIHN0cnVjdCBvY2ZzMl9sb2NhbF9kaXNrX2NodW5rIHsKIAlfX2xlMzIgZHFjX2ZyZWU7CS8qIE51bWJlciBvZiBmcmVlIGVudHJpZXMgaW4gdGhlIGJpdG1hcCAqLwotCXU4IGRxY19iaXRtYXBbMF07CS8qIEJpdG1hcCBvZiBlbnRyaWVzIGluIHRoZSBjb3JyZXNwb25kaW5nCisJX191OCBkcWNfYml0bWFwWzBdOwkvKiBCaXRtYXAgb2YgZW50cmllcyBpbiB0aGUgY29ycmVzcG9uZGluZwogCQkJCSAqIGNodW5rIG9mIHF1b3RhIGZpbGUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKaW5kZXggMzA5NjdlMy4uNzRkYjJiZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKKysrIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIH0KIAotdm9pZCBvY2ZzMl9rcmVmX3JlbW92ZV9yZWZjb3VudF90cmVlKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgb2NmczJfa3JlZl9yZW1vdmVfcmVmY291bnRfdHJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSA9CiAJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSwgcmZfZ2V0Y250KTsKQEAgLTUyNCwyMyArNTI0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgb2NmczJfbG9ja19yZWZjb3VudF90cmVlX2J5X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBydywKLQkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqKnJldF90cmVlLAotCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJlZl9iaCkKLXsKLQlpbnQgcmV0OwotCXU2NCByZWZfYmxrbm87Ci0KLQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfYmxvY2soaW5vZGUsICZyZWZfYmxrbm8pOwotCWlmIChyZXQpIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCByZWZfYmxrbm8sCi0JCQkJCXJ3LCByZXRfdHJlZSwgcmVmX2JoKTsKLX0KLQogdm9pZCBvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSwgaW50IHJ3KQogewpAQCAtOTY5LDYgKzk1MiwxMDMgQEAKIH0KIAogLyoKKyAqIEZpbmQgdGhlIGVuZCByYW5nZSBmb3IgYSBsZWFmIHJlZmNvdW50IGJsb2NrIGluZGljYXRlZCBieQorICogZWwtPmxfcmVjc1tpbmRleF0uZV9ibGtuby4KKyAqLworc3RhdGljIGludCBvY2ZzMl9nZXRfcmVmY291bnRfY3Bvc19lbmQoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAorCQkJCSAgICAgICBpbnQgaW5kZXgsICB1MzIgKmNwb3NfZW5kKQoreworCWludCByZXQsIGksIHN1YnRyZWVfcm9vdDsKKwl1MzIgY3BvczsKKwl1NjQgYmxrbm87CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSk7CisJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEwsICpyaWdodF9wYXRoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICp0bXBfZWw7CisKKwlpZiAoaW5kZXggPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDEpIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBhIGV4dGVudCByZWMgYWZ0ZXIgaW5kZXgsIHNvIGp1c3QgdXNlIHRoZSBlX2Nwb3MKKwkJICogb2YgdGhlIG5leHQgZXh0ZW50IHJlYy4KKwkJICovCisJCSpjcG9zX2VuZCA9IGxlMzJfdG9fY3B1KGVsLT5sX3JlY3NbaW5kZXgrMV0uZV9jcG9zKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFlYiB8fCAoZWIgJiYgIWViLT5oX25leHRfbGVhZl9ibGspKSB7CisJCS8qCisJCSAqIFdlIGFyZSB0aGUgbGFzdCBleHRlbnQgcmVjLCBzbyBhbnkgaGlnaCBjcG9zIHNob3VsZAorCQkgKiBiZSBzdG9yZWQgaW4gdGhpcyBsZWFmIHJlZmNvdW50IGJsb2NrLgorCQkgKi8KKwkJKmNwb3NfZW5kID0gVUlOVF9NQVg7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgdGhlIGV4dGVudCBibG9jayBpc24ndCB0aGUgbGFzdCBvbmUsIHdlIGhhdmUgdG8gZmluZAorCSAqIHRoZSBzdWJ0cmVlIHJvb3QgYmV0d2VlbiB0aGlzIGV4dGVudCBibG9jayBhbmQgdGhlIG5leHQKKwkgKiBsZWFmIGV4dGVudCBibG9jayBhbmQgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIGVfY3BvcyBmcm9tCisJICogdGhlIHN1YnJvb3QuIE90aGVyd2lzZSB3ZSBtYXkgY29ycnVwdCB0aGUgYi10cmVlLgorCSAqLworCW9jZnMyX2luaXRfcmVmY291bnRfZXh0ZW50X3RyZWUoJmV0LCBjaSwgcmVmX3Jvb3RfYmgpOworCisJbGVmdF9wYXRoID0gb2NmczJfbmV3X3BhdGhfZnJvbV9ldCgmZXQpOworCWlmICghbGVmdF9wYXRoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJY3BvcyA9IGxlMzJfdG9fY3B1KGViLT5oX2xpc3QubF9yZWNzW2luZGV4XS5lX2Nwb3MpOworCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChjaSwgbGVmdF9wYXRoLCBjcG9zKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmlnaHRfcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fcGF0aChsZWZ0X3BhdGgpOworCWlmICghcmlnaHRfcGF0aCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzYiwgbGVmdF9wYXRoLCAmY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChjaSwgcmlnaHRfcGF0aCwgY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXN1YnRyZWVfcm9vdCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KCZldCwgbGVmdF9wYXRoLAorCQkJCQkgICAgICAgcmlnaHRfcGF0aCk7CisKKwl0bXBfZWwgPSBsZWZ0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX3Jvb3RdLmVsOworCWJsa25vID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9yb290KzFdLmJoLT5iX2Jsb2NrbnI7CisJZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KHRtcF9lbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKSB7CisJCWlmIChsZTY0X3RvX2NwdSh0bXBfZWwtPmxfcmVjc1tpXS5lX2Jsa25vKSA9PSBibGtubykgeworCQkJKmNwb3NfZW5kID0gbGUzMl90b19jcHUodG1wX2VsLT5sX3JlY3NbaSsxXS5lX2Nwb3MpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlCVUdfT04oaSA9PSBsZTMyX3RvX2NwdSh0bXBfZWwtPmxfbmV4dF9mcmVlX3JlYykpOworCitvdXQ6CisJb2NmczJfZnJlZV9wYXRoKGxlZnRfcGF0aCk7CisJb2NmczJfZnJlZV9wYXRoKHJpZ2h0X3BhdGgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBHaXZlbiBhIGNwb3MgYW5kIGxlbiwgdHJ5IHRvIGZpbmQgdGhlIHJlZmNvdW50IHJlY29yZCB3aGljaCBjb250YWlucyBjcG9zLgogICogMS4gSWYgY3BvcyBjYW4gYmUgZm91bmQgaW4gb25lIHJlZmNvdW50IHJlY29yZCwgcmV0dXJuIHRoZSByZWNvcmQuCiAgKiAyLiBJZiBjcG9zIGNhbid0IGJlIGZvdW5kLCByZXR1cm4gYSBmYWtlIHJlY29yZCB3aGljaCBzdGFydCBmcm9tIGNwb3MKQEAgLTk4MywxMCArMTA2MywxMCBAQAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoKQogewogCWludCByZXQgPSAwLCBpLCBmb3VuZDsKLQl1MzIgbG93X2Nwb3M7CisJdTMyIGxvd19jcG9zLCB1bmluaXRpYWxpemVkX3ZhcihjcG9zX2VuZCk7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqdG1wLCAqcmVjID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYiA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCA9IE5VTEwsICpyZWZfbGVhZl9iaCA9IE5VTEw7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSk7CiAJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CkBAIC0xMDM0LDEyICsxMTE0LDE2IEBACiAJCX0KIAl9CiAKLQkvKiBhZGp1c3QgbGVuIHdoZW4gd2UgaGF2ZSBvY2ZzMl9leHRlbnRfcmVjIGFmdGVyIGl0LiAqLwotCWlmIChmb3VuZCAmJiBpIDwgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxKSB7Ci0JCXRtcCA9ICZlbC0+bF9yZWNzW2krMV07CisJaWYgKGZvdW5kKSB7CisJCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9jcG9zX2VuZChjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCQkgIGViLCBlbCwgaSwgJmNwb3NfZW5kKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KIAotCQlpZiAobGUzMl90b19jcHUodG1wLT5lX2Nwb3MpIDwgY3BvcyArIGxlbikKLQkJCWxlbiA9IGxlMzJfdG9fY3B1KHRtcC0+ZV9jcG9zKSAtIGNwb3M7CisJCWlmIChjcG9zX2VuZCA8IGxvd19jcG9zICsgbGVuKQorCQkJbGVuID0gY3Bvc19lbmQgLSBsb3dfY3BvczsKIAl9CiAKIAlyZXQgPSBvY2ZzMl9yZWFkX3JlZmNvdW50X2Jsb2NrKGNpLCBsZTY0X3RvX2NwdShyZWMtPmVfYmxrbm8pLApAQCAtMTQxOCw3ICsxNTAyLDcgQEAKIAogCS8qIGNoYW5nZSBvbGQgYW5kIG5ldyBybF91c2VkIGFjY29yZGluZ2x5LiAqLwogCWxlMTZfYWRkX2NwdSgmcmwtPnJsX3VzZWQsIC1udW1fbW92ZWQpOwotCW5ld19ybC0+cmxfdXNlZCA9IGNwdV90b19sZTMyKG51bV9tb3ZlZCk7CisJbmV3X3JsLT5ybF91c2VkID0gY3B1X3RvX2xlMTYobnVtX21vdmVkKTsKIAogCXNvcnQoJnJsLT5ybF9yZWNzLCBsZTE2X3RvX2NwdShybC0+cmxfdXNlZCksCiAJICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyksCkBAIC0xNzk3LDcgKzE4ODEsOCBAQAogCQlyZWNzX25lZWQrKzsKIAogCS8qIElmIHRoZSBsZWFmIGJsb2NrIGRvbid0IGhhdmUgZW5vdWdoIHJlY29yZCwgZXhwYW5kIGl0LiAqLwotCWlmIChsZTE2X3RvX2NwdShyZl9saXN0LT5ybF91c2VkKSArIHJlY3NfbmVlZCA+IHJmX2xpc3QtPnJsX2NvdW50KSB7CisJaWYgKGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpICsgcmVjc19uZWVkID4KKwkJCQkJIGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX2NvdW50KSkgewogCQlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjIHRtcF9yZWM7CiAJCXU2NCBjcG9zID0gbGU2NF90b19jcHUob3JpZ19yZWMtPnJfY3Bvcyk7CiAJCWxlbiA9IGxlMzJfdG9fY3B1KG9yaWdfcmVjLT5yX2NsdXN0ZXJzKTsKQEAgLTE4NTksNyArMTk0NCw3IEBACiAJCW1lbWNweSh0YWlsX3JlYywgb3JpZ19yZWMsIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CiAJCWxlNjRfYWRkX2NwdSgmdGFpbF9yZWMtPnJfY3BvcywKIAkJCSAgICAgbGUzMl90b19jcHUodGFpbF9yZWMtPnJfY2x1c3RlcnMpIC0gbGVuKTsKLQkJdGFpbF9yZWMtPnJfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShsZW4pOworCQl0YWlsX3JlYy0+cl9jbHVzdGVycyA9IGNwdV90b19sZTMyKGxlbik7CiAJfQogCiAJLyoKQEAgLTM4NDAsOCArMzkyNSw3IEBACiAJfQogCiAJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCBjcG9zLAotCQkJY3B1X3RvX2xlNjQob2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLAotCQkJCQkJCSAgICAgcF9jbHVzdGVyKSksCisJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3RlciksCiAJCQludW1fY2x1c3RlcnMsIGV4dF9mbGFncywgbWV0YV9hYyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC00MjUzLDggKzQzMzcsOCBAQAogICogQG5ld19kZW50cnk6ICAgICAgICB0YXJnZXQgZGVudHJ5CiAgKiBAcHJlc2VydmU6ICBpZiB0cnVlLCBwcmVzZXJ2ZSBhbGwgZmlsZSBhdHRyaWJ1dGVzCiAgKi8KLWludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSkKK3N0YXRpYyBpbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCisJCQkgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGJvb2wgcHJlc2VydmUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tfdXNlci5jIGIvZnMvb2NmczIvc3RhY2tfdXNlci5jCmluZGV4IGZmNGM3OTguLmRhNzhhMmEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N0YWNrX3VzZXIuYworKysgYi9mcy9vY2ZzMi9zdGFja191c2VyLmMKQEAgLTgxNCw3ICs4MTQsNyBAQAogc3RhdGljIGludCB1c2VyX2NsdXN0ZXJfY29ubmVjdChzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uKQogewogCWRsbV9sb2Nrc3BhY2VfdCAqZnNkbG07Ci0Jc3RydWN0IG9jZnMyX2xpdmVfY29ubmVjdGlvbiAqY29udHJvbDsKKwlzdHJ1Y3Qgb2NmczJfbGl2ZV9jb25uZWN0aW9uICp1bmluaXRpYWxpemVkX3Zhcihjb250cm9sKTsKIAlpbnQgcmMgPSAwOwogCiAJQlVHX09OKGNvbm4gPT0gTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCAxNGY0N2QyLi4yNjA2OTkxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTEwMCw2ICsxMDAsOCBAQAogc3RhdGljIGludCBvY2ZzMl9wYXJzZV9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKm9wdGlvbnMsCiAJCQkgICAgICAgc3RydWN0IG1vdW50X29wdGlvbnMgKm1vcHQsCiAJCQkgICAgICAgaW50IGlzX3JlbW91bnQpOworc3RhdGljIGludCBvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBtb3VudF9vcHRpb25zICpvcHRpb25zKTsKIHN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHZmc21vdW50ICptbnQpOwogc3RhdGljIHZvaWQgb2NmczJfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIGludCBvY2ZzMl9tb3VudF92b2x1bWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CkBAIC02MDAsNyArNjAyLDggQEAKIAogCWxvY2tfa2VybmVsKCk7CiAKLQlpZiAoIW9jZnMyX3BhcnNlX29wdGlvbnMoc2IsIGRhdGEsICZwYXJzZWRfb3B0aW9ucywgMSkpIHsKKwlpZiAoIW9jZnMyX3BhcnNlX29wdGlvbnMoc2IsIGRhdGEsICZwYXJzZWRfb3B0aW9ucywgMSkgfHwKKwkgICAgIW9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHNiLCAmcGFyc2VkX29wdGlvbnMpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY5MSw4ICs2OTQsNiBAQAogCWlmICghcmV0KSB7CiAJCS8qIE9ubHkgc2F2ZSBvZmYgdGhlIG5ldyBtb3VudCBvcHRpb25zIGluIGNhc2Ugb2YgYSBzdWNjZXNzZnVsCiAJCSAqIHJlbW91bnQuICovCi0JCWlmICghKG9zYi0+c19mZWF0dXJlX2luY29tcGF0ICYgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUikpCi0JCQlwYXJzZWRfb3B0aW9ucy5tb3VudF9vcHQgJj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDsKIAkJb3NiLT5zX21vdW50X29wdCA9IHBhcnNlZF9vcHRpb25zLm1vdW50X29wdDsKIAkJb3NiLT5zX2F0aW1lX3F1YW50dW0gPSBwYXJzZWRfb3B0aW9ucy5hdGltZV9xdWFudHVtOwogCQlvc2ItPnByZWZlcnJlZF9zbG90ID0gcGFyc2VkX29wdGlvbnMuc2xvdDsKQEAgLTcwMSw2ICs3MDIsMTAgQEAKIAogCQlpZiAoIW9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSkKIAkJCW9jZnMyX3NldF9qb3VybmFsX3BhcmFtcyhvc2IpOworCisJCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKSB8CisJCQkoKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID8KKwkJCQkJCQlNU19QT1NJWEFDTCA6IDApOwogCX0KIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC0xMDExLDMxICsxMDE2LDE2IEBACiAJYnJlbHNlKGJoKTsKIAliaCA9IE5VTEw7CiAKLQlpZiAoIShvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKQotCQlwYXJzZWRfb3B0aW9ucy5tb3VudF9vcHQgJj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDsKLQorCWlmICghb2NmczJfY2hlY2tfc2V0X29wdGlvbnMoc2IsICZwYXJzZWRfb3B0aW9ucykpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byByZWFkX3N1cGVyX2Vycm9yOworCX0KIAlvc2ItPnNfbW91bnRfb3B0ID0gcGFyc2VkX29wdGlvbnMubW91bnRfb3B0OwogCW9zYi0+c19hdGltZV9xdWFudHVtID0gcGFyc2VkX29wdGlvbnMuYXRpbWVfcXVhbnR1bTsKIAlvc2ItPnByZWZlcnJlZF9zbG90ID0gcGFyc2VkX29wdGlvbnMuc2xvdDsKIAlvc2ItPm9zYl9jb21taXRfaW50ZXJ2YWwgPSBwYXJzZWRfb3B0aW9ucy5jb21taXRfaW50ZXJ2YWw7CiAJb3NiLT5sb2NhbF9hbGxvY19kZWZhdWx0X2JpdHMgPSBvY2ZzMl9tZWdhYnl0ZXNfdG9fY2x1c3RlcnMoc2IsIHBhcnNlZF9vcHRpb25zLmxvY2FsYWxsb2Nfb3B0KTsKIAlvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPSBvc2ItPmxvY2FsX2FsbG9jX2RlZmF1bHRfYml0czsKLQlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX1VTUlFVT1RBICYmCi0JICAgICFPQ0ZTMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCi0JCQkJCSBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9VU1JRVU9UQSkpIHsKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJbWxvZyhNTF9FUlJPUiwgIlVzZXIgcXVvdGFzIHdlcmUgcmVxdWVzdGVkLCBidXQgdGhpcyAiCi0JCSAgICAgImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGUgZmVhdHVyZSBlbmFibGVkLlxuIik7Ci0JCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKLQl9Ci0JaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9HUlBRVU9UQSAmJgotCSAgICAhT0NGUzJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLAotCQkJCQkgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfR1JQUVVPVEEpKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCW1sb2coTUxfRVJST1IsICJHcm91cCBxdW90YXMgd2VyZSByZXF1ZXN0ZWQsIGJ1dCB0aGlzICIKLQkJICAgICAiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZSBmZWF0dXJlIGVuYWJsZWQuXG4iKTsKLQkJZ290byByZWFkX3N1cGVyX2Vycm9yOwotCX0KIAogCXN0YXR1cyA9IG9jZnMyX3ZlcmlmeV91c2Vyc3BhY2Vfc3RhY2sob3NiLCAmcGFyc2VkX29wdGlvbnMpOwogCWlmIChzdGF0dXMpCkBAIC0xMjQ1LDYgKzEyMzUsNDAgQEAKIAkubmV4dCAgICAgICAgICAgPSBOVUxMCiB9OwogCitzdGF0aWMgaW50IG9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgc3RydWN0IG1vdW50X29wdGlvbnMgKm9wdGlvbnMpCit7CisJaWYgKG9wdGlvbnMtPm1vdW50X29wdCAmIE9DRlMyX01PVU5UX1VTUlFVT1RBICYmCisJICAgICFPQ0ZTMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCisJCQkJCSBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9VU1JRVU9UQSkpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIlVzZXIgcXVvdGFzIHdlcmUgcmVxdWVzdGVkLCBidXQgdGhpcyAiCisJCSAgICAgImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGUgZmVhdHVyZSBlbmFibGVkLlxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAob3B0aW9ucy0+bW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfR1JQUVVPVEEgJiYKKwkgICAgIU9DRlMyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKKwkJCQkJIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX0dSUFFVT1RBKSkgeworCQltbG9nKE1MX0VSUk9SLCAiR3JvdXAgcXVvdGFzIHdlcmUgcmVxdWVzdGVkLCBidXQgdGhpcyAiCisJCSAgICAgImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGUgZmVhdHVyZSBlbmFibGVkLlxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAob3B0aW9ucy0+bW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICYmCisJICAgICFPQ0ZTMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUikpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIkFDTCBzdXBwb3J0IHJlcXVlc3RlZCBidXQgZXh0ZW5kZWQgYXR0cmlidXRlcyAiCisJCSAgICAgImZlYXR1cmUgaXMgbm90IGVuYWJsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyogTm8gQUNMIHNldHRpbmcgc3BlY2lmaWVkPyBVc2UgWEFUVFIgZmVhdHVyZS4uLiAqLworCWlmICghKG9wdGlvbnMtPm1vdW50X29wdCAmIChPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgfAorCQkJCSAgICBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wpKSkgeworCQlpZiAoT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKQorCQkJb3B0aW9ucy0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDsKKwkJZWxzZQorCQkJb3B0aW9ucy0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICAgIGNoYXIgKm9wdGlvbnMsCiAJCQkgICAgICAgc3RydWN0IG1vdW50X29wdGlvbnMgKm1vcHQsCkBAIC0xMzkyLDQwICsxNDE2LDE5IEBACiAJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfSU5PREU2NDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF91c3JxdW90YToKLQkJCS8qIFdlIGNoZWNrIG9ubHkgb24gcmVtb3VudCwgb3RoZXJ3aXNlIGZlYXR1cmVzCi0JCQkgKiBhcmVuJ3QgeWV0IGluaXRpYWxpemVkLiAqLwotCQkJaWYgKGlzX3JlbW91bnQgJiYgIU9DRlMyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKLQkJCSAgICBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9VU1JRVU9UQSkpIHsKLQkJCQltbG9nKE1MX0VSUk9SLCAiVXNlciBxdW90YSByZXF1ZXN0ZWQgYnV0ICIKLQkJCQkgICAgICJmaWxlc3lzdGVtIGZlYXR1cmUgaXMgbm90IHNldFxuIik7Ci0JCQkJc3RhdHVzID0gMDsKLQkJCQlnb3RvIGJhaWw7Ci0JCQl9CiAJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfVVNSUVVPVEE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZ3JwcXVvdGE6Ci0JCQlpZiAoaXNfcmVtb3VudCAmJiAhT0NGUzJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLAotCQkJICAgIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX0dSUFFVT1RBKSkgewotCQkJCW1sb2coTUxfRVJST1IsICJHcm91cCBxdW90YSByZXF1ZXN0ZWQgYnV0ICIKLQkJCQkgICAgICJmaWxlc3lzdGVtIGZlYXR1cmUgaXMgbm90IHNldFxuIik7Ci0JCQkJc3RhdHVzID0gMDsKLQkJCQlnb3RvIGJhaWw7Ci0JCQl9CiAJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfR1JQUVVPVEE7CiAJCQlicmVhazsKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMCiAJCWNhc2UgT3B0X2FjbDoKIAkJCW1vcHQtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7CisJCQltb3B0LT5tb3VudF9vcHQgJj0gfk9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2FjbDoKKwkJCW1vcHQtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7CiAJCQltb3B0LT5tb3VudF9vcHQgJj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDsKIAkJCWJyZWFrOwotI2Vsc2UKLQkJY2FzZSBPcHRfYWNsOgotCQljYXNlIE9wdF9ub2FjbDoKLQkJCXByaW50ayhLRVJOX0lORk8gIm9jZnMyIChubylhY2wgb3B0aW9ucyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCWJyZWFrOwotI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQltbG9nKE1MX0VSUk9SLAogCQkJICAgICAiVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgpAQCAtMTUwMiwxMiArMTUwNSwxMCBAQAogCWlmIChvcHRzICYgT0NGUzJfTU9VTlRfSU5PREU2NCkKIAkJc2VxX3ByaW50ZihzLCAiLGlub2RlNjQiKTsKIAotI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wKIAlpZiAob3B0cyAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCkKIAkJc2VxX3ByaW50ZihzLCAiLGFjbCIpOwogCWVsc2UKIAkJc2VxX3ByaW50ZihzLCAiLG5vYWNsIik7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ltbGluay5jIGIvZnMvb2NmczIvc3ltbGluay5jCmluZGV4IGUzNDIxMDMuLjQ5YjEzM2MgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N5bWxpbmsuYworKysgYi9mcy9vY2ZzMi9zeW1saW5rLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IG9jZnMyX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAorCS5maWVtYXAJCT0gb2NmczJfZmllbWFwLAogfTsKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5yZWFkbGluawk9IG9jZnMyX3JlYWRsaW5rLApAQCAtMTc0LDQgKzE3NSw1IEBACiAJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKIAkubGlzdHhhdHRyCT0gb2NmczJfbGlzdHhhdHRyLAogCS5yZW1vdmV4YXR0cgk9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCisJLmZpZW1hcAkJPSBvY2ZzMl9maWVtYXAsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggNDNjMTE0OC4uOGZjNmZiMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYworKysgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC05OCwxMCArOTgsOCBAQAogCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqb2NmczJfeGF0dHJfaGFuZGxlcnNbXSA9IHsKIAkmb2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyLAotI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wKIAkmb2NmczJfeGF0dHJfYWNsX2FjY2Vzc19oYW5kbGVyLAogCSZvY2ZzMl94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyLAotI2VuZGlmCiAJJm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlciwKIAkmb2NmczJfeGF0dHJfc2VjdXJpdHlfaGFuZGxlciwKIAlOVUxMCkBAIC0xMDksMTIgKzEwNywxMCBAQAogCiBzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgKm9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW09DRlMyX1hBVFRSX01BWF0gPSB7CiAJW09DRlMyX1hBVFRSX0lOREVYX1VTRVJdCT0gJm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlciwKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMCiAJW09DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdCiAJCQkJCT0gJm9jZnMyX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciwKIAlbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdCiAJCQkJCT0gJm9jZnMyX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIsCi0jZW5kaWYKIAlbT0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRF0JPSAmb2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLAogCVtPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWV0JPSAmb2NmczJfeGF0dHJfc2VjdXJpdHlfaGFuZGxlciwKIH07CkBAIC02MDY0LDcgKzYwNjAsNyBAQAogCQkgKiB0byB0aGUgZXh0ZW50IGJsb2NrLCBzbyBqdXN0IGNhbGN1bGF0ZSBhIG1heGltdW0gcmVjb3JkIG51bS4KIAkJICovCiAJCWlmICgheHYtPnhyX2xpc3QubF90cmVlX2RlcHRoKQotCQkJKm51bV9yZWNzICs9IHh2LT54cl9saXN0LmxfbmV4dF9mcmVlX3JlYzsKKwkJCSpudW1fcmVjcyArPSBsZTE2X3RvX2NwdSh4di0+eHJfbGlzdC5sX25leHRfZnJlZV9yZWMpOwogCQllbHNlCiAJCQkqbnVtX3JlY3MgKz0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKHNiLAogCQkJCQkJCSAgICAgIFhBVFRSX1NJWkVfTUFYKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oCmluZGV4IDA4ZTM2MzguLmFiZDcyYTQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmgKKysrIGIvZnMvb2NmczIveGF0dHIuaApAQCAtNDAsMTAgKzQwLDggQEAKIGV4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyOwogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7Ci0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTAogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlcjsKIGV4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyOwotI2VuZGlmCiBleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgKm9jZnMyX3hhdHRyX2hhbmRsZXJzW107CiAKIHNzaXplX3Qgb2NmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBzaXplX3QpOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggY2Q2YmI5YS4uZGVhODZhYiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC0zMjMsNiArMzIzLDMwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X21hcmtfZHF1b3RfZGlydHkpOwogCisvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLworc3RhdGljIGlubGluZSBpbnQgbWFya19hbGxfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICogY29uc3QgKmRxdW90KQoreworCWludCByZXQsIGVyciwgY250OworCisJcmV0ID0gZXJyID0gMDsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKGRxdW90W2NudF0pCisJCQkvKiBFdmVuIGluIGNhc2Ugb2YgZXJyb3Igd2UgaGF2ZSB0byBjb250aW51ZSAqLworCQkJcmV0ID0gbWFya19kcXVvdF9kaXJ0eShkcXVvdFtjbnRdKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSByZXQ7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXB1dF9hbGwoc3RydWN0IGRxdW90ICoqZHF1b3QpCit7CisJdW5zaWduZWQgaW50IGNudDsKKworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJZHFwdXQoZHF1b3RbY250XSk7Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgZHFfbGlzdF9sb2NrICovCiBzdGF0aWMgaW5saW5lIGludCBjbGVhcl9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQogewpAQCAtMTI2OCw4ICsxMjkyLDcgQEAKIG91dF9lcnI6CiAJdXBfd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKIAkvKiBEcm9wIHVudXNlZCByZWZlcmVuY2VzICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlkcXB1dChnb3RbY250XSk7CisJZHFwdXRfYWxsKGdvdCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfaW5pdGlhbGl6ZSk7CkBAIC0xMjg4LDkgKzEzMTEsNyBAQAogCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gTlVMTDsKIAl9CiAJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJZHFwdXQocHV0W2NudF0pOworCWRxcHV0X2FsbChwdXQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9kcm9wKTsKQEAgLTEzMTksNiArMTM0MCw2NyBAQAogRVhQT1JUX1NZTUJPTCh2ZnNfZHFfZHJvcCk7CiAKIC8qCisgKiBpbm9kZV9yZXNlcnZlZF9zcGFjZSBpcyBtYW5hZ2VkIGludGVybmFsbHkgYnkgcXVvdGEsIGFuZCBwcm90ZWN0ZWQgYnkKKyAqIGlfbG9jayBzaW1pbGFyIHRvIGlfYmxvY2tzK2lfYnl0ZXMuCisgKi8KK3N0YXRpYyBxc2l6ZV90ICppbm9kZV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKK3sKKwkvKiBGaWxlc3lzdGVtIG11c3QgZXhwbGljaXRseSBkZWZpbmUgaXQncyBvd24gbWV0aG9kIGluIG9yZGVyIHRvIHVzZQorCSAqIHF1b3RhIHJlc2VydmF0aW9uIGludGVyZmFjZSAqLworCUJVR19PTighaW5vZGUtPmlfc2ItPmRxX29wLT5nZXRfcmVzZXJ2ZWRfc3BhY2UpOworCXJldHVybiBpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZShpbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2FkZF9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpICs9IG51bWJlcjsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKKworc3RhdGljIHZvaWQgaW5vZGVfY2xhaW1fcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJKmlub2RlX3Jlc2VydmVkX3NwYWNlKGlub2RlKSAtPSBudW1iZXI7CisJX19pbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBpbm9kZV9zdWJfcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJKmlub2RlX3Jlc2VydmVkX3NwYWNlKGlub2RlKSAtPSBudW1iZXI7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworfQorCitzdGF0aWMgcXNpemVfdCBpbm9kZV9nZXRfcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcXNpemVfdCByZXQ7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlyZXQgPSAqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpbm9kZV9pbmNyX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLAorCQkJCWludCByZXNlcnZlKQoreworCWlmIChyZXNlcnZlKQorCQlpbm9kZV9hZGRfcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOworCWVsc2UKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworfQorCitzdGF0aWMgdm9pZCBpbm9kZV9kZWNyX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgcmVzZXJ2ZSkKK3sKKwlpZiAocmVzZXJ2ZSkKKwkJaW5vZGVfc3ViX3Jzdl9zcGFjZShpbm9kZSwgbnVtYmVyKTsKKwllbHNlCisJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKK30KKworLyoKICAqIEZvbGxvd2luZyBmb3VyIGZ1bmN0aW9ucyB1cGRhdGUgaV9ibG9ja3MraV9ieXRlcyBmaWVsZHMgYW5kCiAgKiBxdW90YSBpbmZvcm1hdGlvbiAodG9nZXRoZXIgd2l0aCBhcHByb3ByaWF0ZSBjaGVja3MpCiAgKiBOT1RFOiBXZSBhYnNvbHV0ZWx5IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBjYWxsZXIgZGlydGllcwpAQCAtMTMzNiw2ICsxNDE4LDIxIEBACiAJaW50IGNudCwgcmV0ID0gUVVPVEFfT0s7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwogCisJLyoKKwkgKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKKwkgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXgKKwkgKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKKwkJZ290byBvdXQ7CisJfQorCisJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CisJCWlub2RlX2luY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCiAJCXdhcm50eXBlW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47CiAKQEAgLTEzNDYsNyArMTQ0Myw4IEBACiAJCWlmIChjaGVja19iZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCB3YXJuLCB3YXJudHlwZStjbnQpCiAJCSAgICA9PSBOT19RVU9UQSkgewogCQkJcmV0ID0gTk9fUVVPVEE7Ci0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwkJCWdvdG8gb3V0X2ZsdXNoX3dhcm47CiAJCX0KIAl9CiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CkBAIC0xMzU3LDY0ICsxNDU1LDI5IEBACiAJCWVsc2UKIAkJCWRxdW90X2luY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKIAl9Ci0JaWYgKCFyZXNlcnZlKQotCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Ci1vdXRfdW5sb2NrOgorCWlub2RlX2luY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisKKwlpZiAocmVzZXJ2ZSkKKwkJZ290byBvdXRfZmx1c2hfd2FybjsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CitvdXRfZmx1c2hfd2FybjoKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOworb3V0X3VubG9jazoKKwl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogaW50IGRxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgd2FybikKIHsKLQlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKLQotCS8qCi0JICogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCi0JICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4Ci0JICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCXJldCA9IF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMCk7Ci0JaWYgKHJldCA9PSBOT19RVU9UQSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X2FsbG9jX3NwYWNlKTsKIAogaW50IGRxdW90X3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQogewotCWludCByZXQgPSBRVU9UQV9PSzsKLQotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXQ7Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXJldCA9IF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMSk7Ci1vdXRfdW5sb2NrOgotCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLW91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiBfX2RxdW90X2FsbG9jX3NwYWNlKGlub2RlLCBudW1iZXIsIHdhcm4sIDEpOwogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9yZXNlcnZlX3NwYWNlKTsKIApAQCAtMTQ1NSwxMCArMTUxOCw3IEBACiB3YXJuX3B1dF9hbGw6CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CiAJaWYgKHJldCA9PSBRVU9UQV9PSykKLQkJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwkJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOwogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCXJldHVybiByZXQ7CkBAIC0xNDcxLDE0ICsxNTMxLDE0IEBACiAJaW50IHJldCA9IFFVT1RBX09LOwogCiAJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJaW5vZGVfY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCXsKIAkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWlub2RlX2NsYWltX3Jzdl9zcGFjZShpbm9kZSwgbnVtYmVyKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNDkwLDEyICsxNTUwLDkgQEAKIAkJCQkJCQludW1iZXIpOwogCX0KIAkvKiBVcGRhdGUgaW5vZGUgYnl0ZXMgKi8KLQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJaW5vZGVfY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMTUwMywzOCArMTU2MCw5IEBACiBFWFBPUlRfU1lNQk9MKGRxdW90X2NsYWltX3NwYWNlKTsKIAogLyoKLSAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKLSAqLwotdm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQotewotCWludCBjbnQ7Ci0KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCWdvdG8gb3V0OwotCi0JZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogUmVsZWFzZSByZXNlcnZlZCBkcXVvdHMgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQlkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JfQotCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCi1vdXRfdW5sb2NrOgotCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLW91dDoKLQlyZXR1cm47Ci19Ci1FWFBPUlRfU1lNQk9MKGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UpOwotCi0vKgogICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKICAqLwotaW50IGRxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCitpbnQgX19kcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgcmVzZXJ2ZSkKIHsKIAl1bnNpZ25lZCBpbnQgY250OwogCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKQEAgLTE1NDMsNyArMTU3MSw3IEBACiAgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewogb3V0X3N1YjoKLQkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlpbm9kZV9kZWNyX3NwYWNlKGlub2RlLCBudW1iZXIsIHJlc2VydmUpOwogCQlyZXR1cm4gUVVPVEFfT0s7CiAJfQogCkBAIC0xNTU4LDIxICsxNTg2LDQwIEBACiAJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkKIAkJCWNvbnRpbnVlOwogCQl3YXJudHlwZVtjbnRdID0gaW5mb19iZHFfZnJlZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwotCQlkcXVvdF9kZWNyX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJCWlmIChyZXNlcnZlKQorCQkJZHF1b3RfZnJlZV9yZXNlcnZlZF9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOworCQllbHNlCisJCQlkcXVvdF9kZWNyX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CiAJfQotCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlpbm9kZV9kZWNyX3NwYWNlKGlub2RlLCBudW1iZXIsIHJlc2VydmUpOwogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisKKwlpZiAocmVzZXJ2ZSkKKwkJZ290byBvdXRfdW5sb2NrOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKK291dF91bmxvY2s6CiAJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJcmV0dXJuIFFVT1RBX09LOwogfQorCitpbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwlyZXR1cm4gIF9fZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwgbnVtYmVyLCAwKTsKK30KIEVYUE9SVF9TWU1CT0woZHF1b3RfZnJlZV9zcGFjZSk7CiAKIC8qCisgKiBSZWxlYXNlIHJlc2VydmVkIHF1b3RhIHNwYWNlCisgKi8KK3ZvaWQgZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwlfX2RxdW90X2ZyZWVfc3BhY2UoaW5vZGUsIG51bWJlciwgMSk7CisKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZSk7CisKKy8qCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAogICovCiBpbnQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKQEAgLTE1OTksMTAgKzE2NDYsNyBAQAogCQlkcXVvdF9kZWNyX2lub2Rlcyhpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwogCX0KIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlyZXR1cm4gUVVPVEFfT0s7CkBAIC0xNjEwLDE5ICsxNjU0LDYgQEAKIEVYUE9SVF9TWU1CT0woZHF1b3RfZnJlZV9pbm9kZSk7CiAKIC8qCi0gKiBjYWxsIGJhY2sgZnVuY3Rpb24sIGdldCByZXNlcnZlZCBxdW90YSBzcGFjZSBmcm9tIHVuZGVybHlpbmcgZnMKLSAqLwotcXNpemVfdCBkcXVvdF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlxc2l6ZV90IHJlc2VydmVkX3NwYWNlID0gMDsKLQotCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSAmJgotCSAgICBpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZSkKLQkJcmVzZXJ2ZWRfc3BhY2UgPSBpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZShpbm9kZSk7Ci0JcmV0dXJuIHJlc2VydmVkX3NwYWNlOwotfQotCi0vKgogICogVHJhbnNmZXIgdGhlIG51bWJlciBvZiBpbm9kZSBhbmQgYmxvY2tzIGZyb20gb25lIGRpc2txdW90YSB0byBhbiBvdGhlci4KICAqCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZApAQCAtMTY2NSw3ICsxNjk2LDcgQEAKIAl9CiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwogCWN1cl9zcGFjZSA9IGlub2RlX2dldF9ieXRlcyhpbm9kZSk7Ci0JcnN2X3NwYWNlID0gZHF1b3RfZ2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKKwlyc3Zfc3BhY2UgPSBpbm9kZV9nZXRfcnN2X3NwYWNlKGlub2RlKTsKIAlzcGFjZSA9IGN1cl9zcGFjZSArIHJzdl9zcGFjZTsKIAkvKiBCdWlsZCB0aGUgdHJhbnNmZXJfZnJvbSBsaXN0IGFuZCBjaGVjayB0aGUgbGltaXRzICovCiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CkBAIC0xNzA5LDI1ICsxNzQwLDE4IEBACiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CiAJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmICh0cmFuc2Zlcl9mcm9tW2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KHRyYW5zZmVyX2Zyb21bY250XSk7Ci0JCWlmICh0cmFuc2Zlcl90b1tjbnRdKSB7Ci0JCQltYXJrX2RxdW90X2RpcnR5KHRyYW5zZmVyX3RvW2NudF0pOwotCQkJLyogVGhlIHJlZmVyZW5jZSB3ZSBnb3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGlub2RlICovCi0JCQl0cmFuc2Zlcl90b1tjbnRdID0gTlVMTDsKLQkJfQotCX0KKwltYXJrX2FsbF9kcXVvdF9kaXJ0eSh0cmFuc2Zlcl9mcm9tKTsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eSh0cmFuc2Zlcl90byk7CisJLyogVGhlIHJlZmVyZW5jZSB3ZSBnb3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGlub2RlICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQl0cmFuc2Zlcl90b1tjbnRdID0gTlVMTDsKIHdhcm5fcHV0X2FsbDoKIAlmbHVzaF93YXJuaW5ncyh0cmFuc2Zlcl90bywgd2FybnR5cGVfdG8pOwogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX2Zyb20sIHdhcm50eXBlX2Zyb21faW5vZGVzKTsKIAlmbHVzaF93YXJuaW5ncyh0cmFuc2Zlcl9mcm9tLCB3YXJudHlwZV9mcm9tX3NwYWNlKTsKIHB1dF9hbGw6Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWRxcHV0KHRyYW5zZmVyX2Zyb21bY250XSk7Ci0JCWRxcHV0KHRyYW5zZmVyX3RvW2NudF0pOwotCX0KKwlkcXB1dF9hbGwodHJhbnNmZXJfZnJvbSk7CisJZHFwdXRfYWxsKHRyYW5zZmVyX3RvKTsKIAlyZXR1cm4gcmV0Owogb3Zlcl9xdW90YToKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhX3YyLmMgYi9mcy9xdW90YS9xdW90YV92Mi5jCmluZGV4IDNkZmMyM2UuLmUzZGEwMmY0IDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV92Mi5jCisrKyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKQEAgLTk3LDggKzk3LDExIEBACiAJdW5zaWduZWQgaW50IHZlcnNpb247CiAKIAlpZiAoIXYyX3JlYWRfaGVhZGVyKHNiLCB0eXBlLCAmZHFoZWFkKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtMTsKIAl2ZXJzaW9uID0gbGUzMl90b19jcHUoZHFoZWFkLmRxaF92ZXJzaW9uKTsKKwlpZiAoKGluZm8tPmRxaV9mbXRfaWQgPT0gUUZNVF9WRlNfVjAgJiYgdmVyc2lvbiAhPSAwKSB8fAorCSAgICAoaW5mby0+ZHFpX2ZtdF9pZCA9PSBRRk1UX1ZGU19WMSAmJiB2ZXJzaW9uICE9IDEpKQorCQlyZXR1cm4gLTE7CiAKIAlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRpbmZvLAogCSAgICAgICBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSwgVjJfRFFJTkZPT0ZGKTsKQEAgLTEyMCw4ICsxMjMsOCBAQAogCQlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZjsKIAl9IGVsc2UgewogCQkvKiB1c2VkIHNwYWNlIGlzIHN0b3JlZCBhcyB1bnNpZ25lZCA2NC1iaXQgdmFsdWUgKi8KLQkJaW5mby0+ZHFpX21heGJsaW1pdCA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsJLyogMl42NC0xICovCi0JCWluZm8tPmRxaV9tYXhpbGltaXQgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisJCWluZm8tPmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmZmZmZmZmZmZVTEw7CS8qIDJeNjQtMSAqLworCQlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOwogCX0KIAlpbmZvLT5kcWlfYmdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2JncmFjZSk7CiAJaW5mby0+ZHFpX2lncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9pZ3JhY2UpOwpkaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jCmluZGV4IDA3NTY5NGUuLmM0ZWNkNTIgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTQwMSw5ICs0MDEsOSBAQAogfQogI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1NUQVQ2NCAqLwogCi12b2lkIGlub2RlX2FkZF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpCisvKiBDYWxsZXIgaXMgaGVyZSByZXNwb25zaWJsZSBmb3Igc3VmZmljaWVudCBsb2NraW5nIChpZS4gaW5vZGUtPmlfbG9jaykgKi8KK3ZvaWQgX19pbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQogewotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJaW5vZGUtPmlfYmxvY2tzICs9IGJ5dGVzID4+IDk7CiAJYnl0ZXMgJj0gNTExOwogCWlub2RlLT5pX2J5dGVzICs9IGJ5dGVzOwpAQCAtNDExLDYgKzQxMSwxMiBAQAogCQlpbm9kZS0+aV9ibG9ja3MrKzsKIAkJaW5vZGUtPmlfYnl0ZXMgLT0gNTEyOwogCX0KK30KKwordm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJX19pbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGJ5dGVzKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDE5ZWI3MGIuLmFmZjA0NmIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtOTAxLDggKzkwMSw5IEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAkJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7CisJfSBlbHNlIHsKKwkJZG9fcmVtb3VudF9zYihzLCBmbGFncywgZGF0YSwgMCk7CiAJfQotCWRvX3JlbW91bnRfc2IocywgZmxhZ3MsIGRhdGEsIDApOwogCXNpbXBsZV9zZXRfbW50KG1udCwgcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9iaW4uYyBiL2ZzL3N5c2ZzL2Jpbi5jCmluZGV4IDYwYzcwMmIuLmEwYTUwMGEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Jpbi5jCisrKyBiL2ZzL3N5c2ZzL2Jpbi5jCkBAIC00ODMsNyArNDgzLDggQEAKICAqCUBhdHRyOglhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogCi1pbnQgc3lzZnNfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyKQoraW50IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJQlVHX09OKCFrb2JqIHx8ICFrb2JqLT5zZCB8fCAhYXR0cik7CiAKQEAgLTQ5Nyw3ICs0OTgsOCBAQAogICoJQGF0dHI6CWF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCiAKLXZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyKQordm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlzeXNmc19oYXNoX2FuZF9yZW1vdmUoa29iai0+c2QsIGF0dHItPmF0dHIubmFtZSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKaW5kZXggMjkyNDVjNi4uMGVhNWVmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtMjI0LDggKzIyNCw2IEBACiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmcgdGhyb3R0bGluZzsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfbGltaXQgbGltaXQ7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXY7Ci0JLyogdGhlIF9QREMgb2JqZWN0cyBmb3IgdGhpcyBwcm9jZXNzb3IsIGlmIGFueSAqLwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpwZGM7CiB9OwogCiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfZXJyYXRhIHsKQEAgLTI1Nyw5ICsyNTUsNiBAQAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqLCBwcm9jZXNzb3JzKTsKIGV4dGVybiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfZXJyYXRhIGVycmF0YTsKIAotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwotCiAjaWZkZWYgQVJDSF9IQVNfUE9XRVJfSU5JVAogdm9pZCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0X2JtX2NoZWNrKHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9mbGFncyAqZmxhZ3MsCiAJCQkJCXVuc2lnbmVkIGludCBjcHUpOwpAQCAtMzI1LDYgKzMyMCw5IEBACiAKICNlbmRpZgkJCQkvKiBDT05GSUdfQ1BVX0ZSRVEgKi8KIAorLyogaW4gcHJvY2Vzc29yX3BkYy5jICovCit2b2lkIGFjcGlfcHJvY2Vzc29yX3NldF9wZGMoYWNwaV9oYW5kbGUgaGFuZGxlKTsKKwogLyogaW4gcHJvY2Vzc29yX3Rocm90dGxpbmcuYyAqLwogaW50IGFjcGlfcHJvY2Vzc29yX3RzdGF0ZV9oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZ19pbmZvKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggMmE3M2Q5Yi4uYTYyNzk5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xNjYsOSArMTY2LDkgQEAKIAlfX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQogCiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKLQkJCQkJICAgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJCQljb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CiBleHRlcm4gdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKLQkJCSAgICAgICBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkgICAgICAgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpOwogCiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYWRkX2tvYmooc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKIAkJCQkJc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0zMTksMTMgKzMxOSwxMyBAQAogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCiAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICplbnRyeSk7CisJCQkJCWNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICplbnRyeSk7CiBleHRlcm4gdm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKTsKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cik7CiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKKwkJCQkJY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJCSAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKIGV4dGVybiBpbnQgZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrX293bmVyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdm9pZCAoKmZ1bmMpKHN0cnVjdCBkZXZpY2UgKmRldiksIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kc3QuaCBiL2luY2x1ZGUvbGludXgvZHN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNmZlZDguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9kc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4NyArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfX0RTVF9ICi0jZGVmaW5lIF9fRFNUX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+Ci0KLSNkZWZpbmUgRFNUX05BTUVMRU4JCTMyCi0jZGVmaW5lIERTVF9OQU1FCQkiZHN0IgotCi1lbnVtIHsKLQkvKiBSZW1vdmUgbm9kZSB3aXRoIGdpdmVuIGlkIGZyb20gc3RvcmFnZSAqLwotCURTVF9ERUxfTk9ERQk9IDAsCi0JLyogQWRkIHJlbW90ZSBub2RlIHdpdGggZ2l2ZW4gaWQgdG8gdGhlIHN0b3JhZ2UgKi8KLQlEU1RfQUREX1JFTU9URSwKLQkvKiBBZGQgbG9jYWwgbm9kZSB3aXRoIGdpdmVuIGlkIHRvIHRoZSBzdG9yYWdlIHRvIGJlIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHJlbW90ZSBwZWVycyAqLwotCURTVF9BRERfRVhQT1JULAotCS8qIENyeXB0byBpbml0aWFsaXphdGlvbiBjb21tYW5kIChoYXNoL2NpcGhlciB1c2VkIHRvIHByb3RlY3QgdGhlIGNvbm5lY3Rpb24pICovCi0JRFNUX0NSWVBUTywKLQkvKiBTZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBnaXZlbiBjb25uZWN0aW9uIChwZXJtaXNzaW9ucyBmb3IgZXhhbXBsZSkgKi8KLQlEU1RfU0VDVVJJVFksCi0JLyogUmVnaXN0ZXIgZ2l2ZW4gbm9kZSBpbiB0aGUgYmxvY2sgbGF5ZXIgc3Vic3lzdGVtICovCi0JRFNUX1NUQVJULAotCURTVF9DTURfTUFYCi19OwotCi1zdHJ1Y3QgZHN0X2N0bAotewotCS8qIFN0b3JhZ2UgbmFtZSAqLwotCWNoYXIJCQluYW1lW0RTVF9OQU1FTEVOXTsKLQkvKiBDb21tYW5kIGZsYWdzICovCi0JX191MzIJCQlmbGFnczsKLQkvKiBDb21tYW5kIGl0c2VsZiAoc2VlIGFib3ZlKSAqLwotCV9fdTMyCQkJY21kOwotCS8qIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHBlciBzaW5nbGUgcmVxdWVzdCBpbiB0aGlzIGRldmljZSAqLwotCV9fdTMyCQkJbWF4X3BhZ2VzOwotCS8qIFN0YWxlL2Vycm9yIHRyYW5zYWN0aW9uIHNjYW5uaW5nIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCi0JX191MzIJCQl0cmFuc19zY2FuX3RpbWVvdXQ7Ci0JLyogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgc2VuZHMgYmVmb3JlIGNvbXBsZXRpbmcgdHJhbnNhY3Rpb24gYXMgYnJva2VuICovCi0JX191MzIJCQl0cmFuc19tYXhfcmV0cmllczsKLQkvKiBTdG9yYWdlIHNpemUgKi8KLQlfX3U2NAkJCXNpemU7Ci19OwotCi0vKiBSZXBseSBjb21tYW5kIGNhcnJpZXMgY29tcGxldGlvbiBzdGF0dXMgKi8KLXN0cnVjdCBkc3RfY3RsX2FjawotewotCXN0cnVjdCBjbl9tc2cJCW1zZzsKLQlpbnQJCQllcnJvcjsKLQlpbnQJCQl1bnVzZWRbM107Ci19OwotCi0vKgotICogVW5mb3J0dW5hbHRlbHkgc29ja2V0IGFkZHJlc3Mgc3RydWN0dXJlIGlzIG5vdCBleHBvcnRlZCB0byB1c2Vyc3BhY2UKLSAqIGFuZCBpcyByZWRlZmluZWQgdGhlcmUuCi0gKi8KLSNkZWZpbmUgU0FERFJfTUFYX0RBVEEJMTI4Ci0KLXN0cnVjdCBzYWRkciB7Ci0JLyogYWRkcmVzcyBmYW1pbHksIEFGX3h4eAkqLwotCXVuc2lnbmVkIHNob3J0CQlzYV9mYW1pbHk7Ci0JLyogMTQgYnl0ZXMgb2YgcHJvdG9jb2wgYWRkcmVzcwkqLwotCWNoYXIJCQlzYV9kYXRhW1NBRERSX01BWF9EQVRBXTsKLQkvKiBOdW1iZXIgb2YgYnl0ZXMgdXNlZCBpbiBzYV9kYXRhICovCi0JdW5zaWduZWQgc2hvcnQJCXNhX2RhdGFfbGVuOwotfTsKLQotLyogQWRkcmVzcyBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBkc3RfbmV0d29ya19jdGwKLXsKLQkvKiBTb2NrZXQgdHlwZTogZGF0YWdyYW0sIHN0cmVhbS4uLiovCi0JdW5zaWduZWQgaW50CQl0eXBlOwotCS8qIExldCBtZSBndWVzcywgaXMgaXQgYSBKdXBpdGVyIGRpYW1ldGVyPyAqLwotCXVuc2lnbmVkIGludAkJcHJvdG87Ci0JLyogUGVlcidzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc2FkZHIJCWFkZHI7Ci19OwotCi1zdHJ1Y3QgZHN0X2NyeXB0b19jdGwKLXsKLQkvKiBDaXBoZXIgYW5kIGhhc2ggbmFtZXMgKi8KLQljaGFyCQkJY2lwaGVyX2FsZ29bRFNUX05BTUVMRU5dOwotCWNoYXIJCQloYXNoX2FsZ29bRFNUX05BTUVMRU5dOwotCi0JLyogS2V5IHNpemVzLiBDYW4gYmUgemVybyBmb3IgZGlnZXN0IGZvciBleGFtcGxlICovCi0JdW5zaWduZWQgaW50CQljaXBoZXJfa2V5c2l6ZSwgaGFzaF9rZXlzaXplOwotCS8qIEFsaWdubWVudC4gQ2FsY3VsYXRlZCBieSB0aGUgRFNUIGl0c2VsZi4gKi8KLQl1bnNpZ25lZCBpbnQJCWNyeXB0b19hdHRhY2hlZF9zaXplOwotCS8qIE51bWJlciBvZiB0aHJlYWRzIHRvIHBlcmZvcm0gY3J5cHRvIG9wZXJhdGlvbnMgKi8KLQlpbnQJCQl0aHJlYWRfbnVtOwotfTsKLQotLyogRXhwb3J0IHNlY3VyaXR5IGF0dHJpYnV0ZXMgaGF2ZSB0aGlzIGJpdHMgY2hlY2tlZCBpbiB3aGVuIGNsaWVudCBjb25uZWN0cyAqLwotI2RlZmluZSBEU1RfUEVSTV9SRUFECQkoMTw8MCkKLSNkZWZpbmUgRFNUX1BFUk1fV1JJVEUJCSgxPDwxKQotCi0vKgotICogUmlnaHQgbm93IGl0IGlzIHNpbXBsZSBtb2RlbCwgd2hlcmUgZWFjaCByZW1vdGUgYWRkcmVzcwotICogaXMgYXNzaWduZWQgdG8gc2V0IG9mIHBlcm1pc3Npb25zIGl0IGlzIGFsbG93ZWQgdG8gcGVyZm9ybS4KLSAqIEluIHJlYWwgd29ybGQgYmxvY2sgZGV2aWNlIGRvZXMgbm90IGtub3cgYW55dGhpbmcgYnV0Ci0gKiByZWFkaW5nIGFuZCB3cml0aW5nLCBzbyBpdCBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaC4KLSAqLwotc3RydWN0IGRzdF9zZWN1cmVfdXNlcgotewotCXVuc2lnbmVkIGludAkJcGVybWlzc2lvbnM7Ci0Jc3RydWN0IHNhZGRyCQlhZGRyOwotfTsKLQotLyoKLSAqIEV4cG9ydCBjb250cm9sIGNvbW1hbmQ6IGRldmljZSB0byBleHBvcnQgYW5kIG5ldHdvcmsgYWRkcmVzcyB0byBhY2NlcHQKLSAqIGNsaWVudHMgdG8gd29yayB3aXRoIGdpdmVuIGRldmljZQotICovCi1zdHJ1Y3QgZHN0X2V4cG9ydF9jdGwKLXsKLQljaGFyCQkJZGV2aWNlW0RTVF9OQU1FTEVOXTsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCWN0bDsKLX07Ci0KLWVudW0gewotCURTVF9DRkcJPSAxLCAJCS8qIFJlcXVlc3QgcmVtb3RlIGNvbmZpZ3VyYXRpb24gKi8KLQlEU1RfSU8sCQkJLyogSU8gY29tbWFuZCAqLwotCURTVF9JT19SRVNQT05TRSwJLyogSU8gcmVzcG9uc2UgKi8KLQlEU1RfUElORywJCS8qIEtlZXBhbGl2ZSBtZXNzYWdlICovCi0JRFNUX05DTURfTUFYLAotfTsKLQotc3RydWN0IGRzdF9jbWQKLXsKLQkvKiBOZXR3b3JrIGNvbW1hbmQgaXRzZWxmLCBzZWUgYWJvdmUgKi8KLQlfX3UzMgkJCWNtZDsKLQkvKgotCSAqIFNpemUgb2YgdGhlIGF0dGFjaGVkIGRhdGEKLQkgKiAoaW4gbW9zdCBjYXNlcywgZm9yIFJFQUQgY29tbWFuZCBpdCBtZWFucyBob3cgbWFueSBieXRlcyB3ZXJlIHJlcXVlc3RlZCkKLQkgKi8KLQlfX3UzMgkJCXNpemU7Ci0JLyogQ3J5cHRvIHNpemU6IG51bWJlciBvZiBhdHRhY2hlZCBieXRlcyB3aXRoIGRpZ2VzdC9obWFjICovCi0JX191MzIJCQljc2l6ZTsKLQkvKiBIZXJlIHdlIGNhbiBjYXJyeSBzZWNyZXQgZGF0YSAqLwotCV9fdTMyCQkJcmVzZXJ2ZWQ7Ci0JLyogUmVhZC93cml0ZSBiaXRzLCBzZWUgaG93IHRoZXkgYXJlIGVuY29kZWQgaW4gYmlvIHN0cnVjdHVyZSAqLwotCV9fdTY0CQkJcnc7Ci0JLyogQklPIGZsYWdzICovCi0JX191NjQJCQlmbGFnczsKLQkvKiBVbmlxdWUgY29tbWFuZCBpZCAobGlrZSB0cmFuc2FjdGlvbiBJRCkgKi8KLQlfX3U2NAkJCWlkOwotCS8qIFNlY3RvciB0byBzdGFydCBJTyBmcm9tICovCi0JX191NjQJCQlzZWN0b3I7Ci0JLyogSGFzaCBkYXRhIGlzIHBsYWNlZCBhZnRlciB0aGlzIGhlYWRlciAqLwotCV9fdTgJCQloYXNoWzBdOwotfTsKLQotLyoKLSAqIENvbnZlcnQgY29tbWFuZCB0by9mcm9tIG5ldHdvcmsgYnl0ZSBvcmRlci4KLSAqIFdlIGRvIG5vdCB1c2UgaHRvbiooKSBmdW5jdGlvbnMsIHNpbmNlIHRoZXJlIGlzCi0gKiBubyA2NC1iaXQgaW1wbGVtZW50YXRpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfY29udmVydF9jbWQoc3RydWN0IGRzdF9jbWQgKmMpCi17Ci0JYy0+Y21kID0gX19jcHVfdG9fYmUzMihjLT5jbWQpOwotCWMtPmNzaXplID0gX19jcHVfdG9fYmUzMihjLT5jc2l6ZSk7Ci0JYy0+c2l6ZSA9IF9fY3B1X3RvX2JlMzIoYy0+c2l6ZSk7Ci0JYy0+c2VjdG9yID0gX19jcHVfdG9fYmU2NChjLT5zZWN0b3IpOwotCWMtPmlkID0gX19jcHVfdG9fYmU2NChjLT5pZCk7Ci0JYy0+ZmxhZ3MgPSBfX2NwdV90b19iZTY0KGMtPmZsYWdzKTsKLQljLT5ydyA9IF9fY3B1X3RvX2JlNjQoYy0+cncpOwotfQotCi0vKiBUcmFuc2FjdGlvbiBpZCAqLwotdHlwZWRlZiBfX3U2NCBkc3RfZ2VuX3Q7Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotCi0jaWZkZWYgQ09ORklHX0RTVF9ERUJVRwotI2RlZmluZSBkcHJpbnRrKGYsIGEuLi4pIHByaW50ayhLRVJOX05PVElDRSBmLCAjI2EpCi0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQotCWRwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pIHt9Ci0jZW5kaWYKLQotc3RydWN0IGRzdF9ub2RlOwotCi1zdHJ1Y3QgZHN0X3RyYW5zCi17Ci0JLyogRFNUIG5vZGUgd2UgYXJlIHdvcmtpbmcgd2l0aCAqLwotCXN0cnVjdCBkc3Rfbm9kZQkJKm47Ci0KLQkvKiBFbnRyeSBpbnNpZGUgdHJhbnNhY3Rpb24gdHJlZSAqLwotCXN0cnVjdCByYl9ub2RlCQl0cmFuc19lbnRyeTsKLQotCS8qIE1lcmxpbiBraWxscyB0aGlzIHRyYW5zYWN0aW9uIHdoZW4gdGhpcyBtZW1vcnkgY2VsbCBlcXVhbHMgemVybyAqLwotCWF0b21pY190CQlyZWZjbnQ7Ci0KLQkvKiBIb3cgdGhpcyB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IGNyeXB0byBlbmdpbmUgKi8KLQlzaG9ydAkJCWVuYzsKLQkvKiBIb3cgbWFueSB0aW1lcyB0aGlzIHRyYW5zYWN0aW9uIHdhcyByZXNlbnQgKi8KLQlzaG9ydAkJCXJldHJpZXM7Ci0JLyogQ29tcGxldGlvbiBzdGF0dXMgKi8KLQlpbnQJCQllcnJvcjsKLQotCS8qIFdoZW4gZGlkIHdlIHNlbmQgaXQgdG8gdGhlIHJlbW90ZSBwZWVyICovCi0JbG9uZwkJCXNlbmRfdGltZTsKLQotCS8qIE15IG5hbWUgaXMuLi4KLQkgKiBXZWxsLCBjb21wdXRlcnMgZG9lcyBub3Qgc3BlYWssIHRoZXkgaGF2ZSB1bmlxdWUgaWQgaW5zdGVhZCAqLwotCWRzdF9nZW5fdAkJZ2VuOwotCi0JLyogQmxvY2sgSU8gd2UgYXJlIHdvcmtpbmcgd2l0aCAqLwotCXN0cnVjdCBiaW8JCSpiaW87Ci0KLQkvKiBOZXR3b3JrIGNvbW1hbmQgZm9yIGFib3ZlIGJsb2NrIElPIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgZHN0X2NtZAkJY21kOwotfTsKLQotc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lCi17Ci0JLyogV2hhdCBzaG91bGQgd2UgZG8gd2l0aCBhbGwgYmxvY2sgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgY3J5cHRvX2hhc2gJKmhhc2g7Ci0Jc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyCSpjaXBoZXI7Ci0KLQkvKiBQb29sIG9mIHBhZ2VzIHVzZWQgdG8gZW5jcnlwdCBkYXRhIGludG8gYmVmb3JlIHNlbmRpbmcgKi8KLQlpbnQJCQlwYWdlX251bTsKLQlzdHJ1Y3QgcGFnZQkJKipwYWdlczsKLQotCS8qIFdoYXQgdG8gZG8gd2l0aCBjdXJyZW50IHJlcXVlc3QgKi8KLQlpbnQJCQllbmM7Ci0JLyogV2hvIHdlIGFyZSBhbmQgd2hlcmUgZG8gd2UgZ28gKi8KLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNyYywgKmRzdDsKLQotCS8qIE1heGltdW0gdGltZW91dCB3YWl0aW5nIGZvciBlbmNyeXB0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLwotCWxvbmcJCQl0aW1lb3V0OwotCS8qIElWIGlzIGEgNjQtYml0IHNlcXVlbnRpYWwgY291bnRlciAqLwotCXU2NAkJCWl2OwotCi0JLyogU2VjcmV0IGRhdGEgKi8KLQl2b2lkCQkJKnByaXZhdGU7Ci0KLQkvKiBDYWNoZWQgdGVtcG9yYXJ5IGRhdGEgbGl2ZXMgaGVyZSAqLwotCWludAkJCXNpemU7Ci0Jdm9pZAkJCSpkYXRhOwotfTsKLQotc3RydWN0IGRzdF9zdGF0ZQotewotCS8qIFRoZSBtYWluIHN0YXRlIHByb3RlY3Rpb24gKi8KLQlzdHJ1Y3QgbXV0ZXgJCXN0YXRlX2xvY2s7Ci0KLQkvKiBQb2xsaW5nIG1hY2hpbmVyeSBmb3Igc29ja2V0cyAqLwotCXdhaXRfcXVldWVfdCAJCXdhaXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgCSp3aGVhZDsKLQkvKiBNb3N0IG9mIGV2ZW50cyBhcmUgYmVpbmcgd2FpdGVkIGhlcmUgKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCAJdGhyZWFkX3dhaXQ7Ci0KLQkvKiBXaG8gb3ducyB0aGlzPyAqLwotCXN0cnVjdCBkc3Rfbm9kZQkJKm5vZGU7Ci0KLQkvKiBOZXR3b3JrIGFkZHJlc3MgZm9yIHRoaXMgc3RhdGUgKi8KLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCWN0bDsKLQotCS8qIFBlcm1pc3Npb25zIHRvIHdvcmsgd2l0aDogcmVhZC1vbmx5IG9yIHJ3IGNvbm5lY3Rpb24gKi8KLQl1MzIJCQlwZXJtaXNzaW9uczsKLQotCS8qIENhbGxlZCB3aGVuIHdlIG5lZWQgdG8gY2xlYW4gcHJpdmF0ZSBkYXRhICovCi0Jdm9pZAkJCSgqIGNsZWFudXApKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotCS8qIFVzZWQgYnkgdGhlIHNlcnZlcjogQklPIGNvbXBsZXRpb24gcXVldWVzIEJJT3MgaGVyZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQJcmVxdWVzdF9saXN0OwotCXNwaW5sb2NrX3QJCXJlcXVlc3RfbG9jazsKLQotCS8qIEd1ZXNzIHdoYXQ/IE5vLCBpdCBpcyBub3QgbnVtYmVyIG9mIHBsYW5ldHMgKi8KLQlhdG9taWNfdAkJcmVmY250OwotCi0JLyogVGhpcyBmbGFncyBpcyBzZXQgd2hlbiBjb25uZWN0aW9uIHNob3VsZCBiZSBkcm9wcGVkICovCi0JaW50CQkJbmVlZF9leGl0OwotCi0JLyoKLQkgKiBTb2NrZXQgdG8gd29yayB3aXRoLiBTZWNvbmQgcG9pbnRlciBpcyB1c2VkIGZvcgotCSAqIGxvY2tsZXNzIGNoZWNrIGlmIHNvY2tldCB3YXMgY2hhbmdlZCBiZWZvcmUgcGVyZm9ybWluZwotCSAqIG5leHQgYWN0aW9uIChsaWtlIHdvcmtpbmcgd2l0aCBjYWNoZWQgcG9sbGluZyByZXN1bHQpCi0JICovCi0Jc3RydWN0IHNvY2tldAkJKnNvY2tldCwgKnJlYWRfc29ja2V0OwotCi0JLyogQ2FjaGVkIHByZWFsbG9jYXRlZCBkYXRhICovCi0Jdm9pZAkJCSpkYXRhOwotCXVuc2lnbmVkIGludAkJc2l6ZTsKLQotCS8qIEN1cnJlbnRseSBwcm9jZXNzZWQgY29tbWFuZCAqLwotCXN0cnVjdCBkc3RfY21kCQljbWQ7Ci19OwotCi1zdHJ1Y3QgZHN0X2luZm8KLXsKLQkvKiBEZXZpY2Ugc2l6ZSAqLwotCXU2NAkJCXNpemU7Ci0KLQkvKiBMb2NhbCBkZXZpY2UgbmFtZSBmb3IgZXhwb3J0IGRldmljZXMgKi8KLQljaGFyCQkJbG9jYWxbRFNUX05BTUVMRU5dOwotCi0JLyogTmV0d29yayBzZXR1cCAqLwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwJbmV0OwotCi0JLyogU3lzZnMgYml0cyB1c2UgdGhpcyAqLwotCXN0cnVjdCBkZXZpY2UJCWRldmljZTsKLX07Ci0KLXN0cnVjdCBkc3Rfbm9kZQotewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZV9lbnRyeTsKLQotCS8qIEhpLCBteSBuYW1lIGlzIHN0b3JlZCBoZXJlICovCi0JY2hhcgkJCW5hbWVbRFNUX05BTUVMRU5dOwotCS8qIE15IGNhY2hlIG5hbWUgaXMgc3RvcmVkIGhlcmUgKi8KLQljaGFyCQkJY2FjaGVfbmFtZVtEU1RfTkFNRUxFTl07Ci0KLQkvKiBCbG9jayBkZXZpY2UgYXR0YWNoZWQgdG8gZ2l2ZW4gbm9kZS4KLQkgKiBPbmx5IHZhbGlkIGZvciBleHBvcnRpbmcgbm9kZXMgKi8KLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlIAkqYmRldjsKLQkvKiBOZXR3b3JrIHN0YXRlIG1hY2hpbmUgZm9yIGdpdmVuIHBlZXIgKi8KLQlzdHJ1Y3QgZHN0X3N0YXRlCSpzdGF0ZTsKLQotCS8qIEJsb2NrIElPIG1hY2hpbmVyeSAqLwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpxdWV1ZTsKLQlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7Ci0KLQkvKiBOdW1iZXIgb2YgdGhyZWFkcyBpbiBwcm9jZXNzaW5nIHBvb2wgKi8KLQlpbnQJCQl0aHJlYWRfbnVtOwotCS8qIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGluIHNpbmdsZSBJTyAqLwotCWludAkJCW1heF9wYWdlczsKLQotCS8qIEknbSB0aGF0IGJpZyBpbiBieXRlcyAqLwotCWxvZmZfdAkJCXNpemU7Ci0KLQkvKiBFeHBvcnRlZCB0byB1c2Vyc3BhY2Ugbm9kZSBpbmZvcm1hdGlvbiAqLwotCXN0cnVjdCBkc3RfaW5mbwkJKmluZm87Ci0KLQkvKgotCSAqIFNlY3VyaXR5IGF0dHJpYnV0ZSBsaXN0LgotCSAqIFVzZWQgb25seSBieSBleHBvcnRpbmcgbm9kZSBjdXJyZW50bHkuCi0JICovCi0Jc3RydWN0IGxpc3RfaGVhZAlzZWN1cml0eV9saXN0OwotCXN0cnVjdCBtdXRleAkJc2VjdXJpdHlfbG9jazsKLQotCS8qCi0JICogV2hlbiB0aGlzIHVuZXJmbG93cyBiZWxvdyB6ZXJvLCB1bml2ZXJzaXR5IGNvbGxhcHNlcy4KLQkgKiBCdXQgdGhpcyB3aWxsIG5vdCBoYXBwZW4sIHNpbmNlIG5vZGUgd2lsbCBiZSBmcmVlZCwKLQkgKiB3aGVuIHJlZmVyZW5jZSBjb3VudGVyIHJlYWNoZXMgemVyby4KLQkgKi8KLQlhdG9taWNfdAkJcmVmY250OwotCi0JLyogSG93IHByZWNpc2VseSBzaG91bGQgSSBiZSBzdGFydGVkPyAqLwotCWludCAJCQkoKnN0YXJ0KShzdHJ1Y3QgZHN0X25vZGUgKik7Ci0KLQkvKiBDcnlwdG8gY2FwYWJpbGl0aWVzICovCi0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsCWNyeXB0bzsKLQl1OAkJCSpoYXNoX2tleTsKLQl1OAkJCSpjaXBoZXJfa2V5OwotCi0JLyogUG9vbCBvZiBwcm9jZXNzaW5nIHRocmVhZCAqLwotCXN0cnVjdCB0aHJlYWRfcG9vbAkqcG9vbDsKLQotCS8qIFRyYW5zYWN0aW9uIElEcyBsaXZlIGhlcmUgKi8KLQlhdG9taWNfbG9uZ190CQlnZW47Ci0KLQkvKgotCSAqIEhvdyBmcmVxdWVudGx5IGFuZCBob3cgbWFueSB0aW1lcyB0cmFuc2FjdGlvbgotCSAqIHRyZWUgc2hvdWxkIGJlIHNjYW5uZWQgdG8gZHJvcCBzdGFsZSBvYmplY3RzLgotCSAqLwotCWxvbmcJCQl0cmFuc19zY2FuX3RpbWVvdXQ7Ci0JaW50CQkJdHJhbnNfbWF4X3JldHJpZXM7Ci0KLQkvKiBTbWFsbCBnbm9tZXMgbGl2ZSBoZXJlICovCi0Jc3RydWN0IHJiX3Jvb3QJCXRyYW5zX3Jvb3Q7Ci0Jc3RydWN0IG11dGV4CQl0cmFuc19sb2NrOwotCi0JLyoKLQkgKiBUcmFuc2FjdGlvbiBjYWNoZS9tZW1vcnkgcG9vbC4KLQkgKiBJdCBpcyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gbm90IG9ubHkgdHJhbnNhY3Rpb24KLQkgKiBpdHNlbGYsIGJ1dCBhZGRpdGlvbmFsIGNyeXB0byBkYXRhIChkaWdlc3QvaG1hYykuCi0JICovCi0Jc3RydWN0IGttZW1fY2FjaGUJKnRyYW5zX2NhY2hlOwotCW1lbXBvb2xfdAkJKnRyYW5zX3Bvb2w7Ci0KLQkvKiBUaGlzIGVudGl0eSBzY2FucyB0cmFuc2FjdGlvbiB0cmVlICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayAJdHJhbnNfd29yazsKLQotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Ci19OwotCi0vKiBLZXJuZWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZSAqLwotc3RydWN0IGRzdF9zZWN1cmUKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXNlY19lbnRyeTsKLQlzdHJ1Y3QgZHN0X3NlY3VyZV91c2VyCXNlYzsKLX07Ci0KLWludCBkc3RfcHJvY2Vzc19iaW8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pOwotCi1pbnQgZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyKTsKLWludCBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2dldChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlCVUdfT04oYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID09IDApOwotCWF0b21pY19pbmMoJnN0LT5yZWZjbnQpOwotCXJldHVybiBzdDsKLX0KLQotdm9pZCBkc3Rfc3RhdGVfcHV0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2FsbG9jKHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci1pbnQgZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotdm9pZCBkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi12b2lkIGRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLWludCBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi12b2lkIGRzdF9kdW1wX2FkZHIoc3RydWN0IHNvY2tldCAqc2ssIHN0cnVjdCBzb2NrYWRkciAqc2EsIGNoYXIgKnN0cik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfbG9jayhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQltdXRleF9sb2NrKCZzdC0+c3RhdGVfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfdW5sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCW11dGV4X3VubG9jaygmc3QtPnN0YXRlX2xvY2spOwotfQotCi12b2lkIGRzdF9wb2xsX2V4aXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotaW50IGRzdF9wb2xsX2luaXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkc3Rfc3RhdGVfcG9sbChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IFBPTExIVVAgfCBQT0xMRVJSOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWlmIChzdC0+c29ja2V0KQotCQlyZXZlbnRzID0gc3QtPnNvY2tldC0+b3BzLT5wb2xsKE5VTEwsIHN0LT5zb2NrZXQsIE5VTEwpOwotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JcmV0dXJuIHJldmVudHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRzdF90aHJlYWRfc2V0dXAodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkc3Rfbm9kZV9wdXQoc3RydWN0IGRzdF9ub2RlICpuKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X25vZGUgKmRzdF9ub2RlX2dldChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JYXRvbWljX2luYygmbi0+cmVmY250KTsKLQlyZXR1cm4gbjsKLX0KLQotaW50IGRzdF9kYXRhX3JlY3Yoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKTsKLWludCBkc3RfcmVjdl9jZGF0YShzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqY2RhdGEpOwotaW50IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgbW9yZSk7Ci0KLWludCBkc3Rfc2VuZF9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBkc3RfY21kICpjbWQsIHN0cnVjdCBiaW8gKmJpbyk7Ci0KLWludCBkc3RfcHJvY2Vzc19pbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci1pbnQgZHN0X2V4cG9ydF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pOwotaW50IGRzdF9leHBvcnRfc2VuZF9iaW8oc3RydWN0IGJpbyAqYmlvKTsKLWludCBkc3Rfc3RhcnRfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci0KLWludCBfX2luaXQgZHN0X2V4cG9ydF9pbml0KHZvaWQpOwotdm9pZCBkc3RfZXhwb3J0X2V4aXQodm9pZCk7Ci0KLS8qIFByaXZhdGUgc3RydWN0dXJlIGZvciBleHBvcnQgYmxvY2sgSU8gcmVxdWVzdHMgKi8KLXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlyZXF1ZXN0X2VudHJ5OwotCXN0cnVjdCBkc3Rfc3RhdGUJCSpzdGF0ZTsKLQlzdHJ1Y3QgYmlvCQkJKmJpbzsKLQlzdHJ1Y3QgZHN0X2NtZAkJCWNtZDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfdHJhbnNfZ2V0KHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JYXRvbWljX2luYygmdC0+cmVmY250KTsKLX0KLQotc3RydWN0IGRzdF90cmFucyAqZHN0X3RyYW5zX3NlYXJjaChzdHJ1Y3QgZHN0X25vZGUgKm5vZGUsIGRzdF9nZW5fdCBnZW4pOwotaW50IGRzdF90cmFuc19yZW1vdmUoc3RydWN0IGRzdF90cmFucyAqdCk7Ci1pbnQgZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2soc3RydWN0IGRzdF90cmFucyAqdCk7Ci12b2lkIGRzdF90cmFuc19wdXQoc3RydWN0IGRzdF90cmFucyAqdCk7Ci0KLS8qCi0gKiBDb252ZXJ0IGJpbyBpbnRvIG5ldHdvcmsgY29tbWFuZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRzdF9iaW9fdG9fY21kKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jbWQgKmNtZCwKLQkJdTMyIGNvbW1hbmQsIHU2NCBpZCkKLXsKLQljbWQtPmNtZCA9IGNvbW1hbmQ7Ci0JY21kLT5mbGFncyA9IChiaW8tPmJpX2ZsYWdzIDw8IEJJT19QT09MX0JJVFMpID4+IEJJT19QT09MX0JJVFM7Ci0JY21kLT5ydyA9IGJpby0+Ymlfcnc7Ci0JY21kLT5zaXplID0gYmlvLT5iaV9zaXplOwotCWNtZC0+Y3NpemUgPSAwOwotCWNtZC0+aWQgPSBpZDsKLQljbWQtPnNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwotfTsKLQotaW50IGRzdF90cmFuc19zZW5kKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCk7Ci0KLWludCBkc3Rfbm9kZV9jcnlwdG9faW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsKTsKLXZvaWQgZHN0X25vZGVfY3J5cHRvX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKTsKLQotc3RhdGljIGlubGluZSBpbnQgZHN0X25lZWRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmMgPSAmbi0+Y3J5cHRvOwotCS8qCi0JICogTG9naWNhbCBPUiBpcyBhcHByb3ByaWF0ZSBoZXJlLCBidXQgYm9vbGVhbiBvbmUgcHJvZHVjZXMKLQkgKiBtb3JlIG9wdGltYWwgY29kZSwgc28gaXQgaXMgdXNlZCBpbnN0ZWFkLgotCSAqLwotCXJldHVybiAoYy0+aGFzaF9hbGdvWzBdIHwgYy0+Y2lwaGVyX2FsZ29bMF0pOwotfQotCi1pbnQgZHN0X25vZGVfdHJhbnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHVuc2lnbmVkIGludCBzaXplKTsKLXZvaWQgZHN0X25vZGVfdHJhbnNfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pOwotCi0vKgotICogUG9vbCBvZiB0aHJlYWRzLgotICogUmVhZHkgbGlzdCBjb250YWlucyB0aHJlYWRzIGN1cnJlbnRseSBmcmVlIHRvIGJlIHVzZWQsCi0gKiBhY3RpdmUgb25lIGNvbnRhaW5zIHRocmVhZHMgd2l0aCBzb21lIHdvcmsgc2NoZWR1bGVkIGZvciB0aGVtLgotICogQ2FsbGVyIGNhbiB3YWl0IGluIGdpdmVuIHF1ZXVlIHdoZW4gdGhyZWFkIGlzIHJlYWR5LgotICovCi1zdHJ1Y3QgdGhyZWFkX3Bvb2wKLXsKLQlpbnQJCQl0aHJlYWRfbnVtOwotCXN0cnVjdCBtdXRleAkJdGhyZWFkX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyZWFkeV9saXN0LCBhY3RpdmVfbGlzdDsKLQotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Ci19OwotCi12b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwKTsKLXZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsIHVuc2lnbmVkIGludCBpZCk7Ci1pbnQgdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWNoYXIgKm5hbWUsCi0JCXVuc2lnbmVkIGludCBpZCwKLQkJdm9pZCAqKCogaW5pdCkodm9pZCAqZGF0YSksCi0JCXZvaWQgKCogY2xlYW51cCkodm9pZCAqZGF0YSksCi0JCXZvaWQgKmRhdGEpOwotCi12b2lkIHRocmVhZF9wb29sX2Rlc3Ryb3koc3RydWN0IHRocmVhZF9wb29sICpwKTsKLXN0cnVjdCB0aHJlYWRfcG9vbCAqdGhyZWFkX3Bvb2xfY3JlYXRlKGludCBudW0sIGNoYXIgKm5hbWUsCi0JCXZvaWQgKigqIGluaXQpKHZvaWQgKmRhdGEpLAotCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhKTsKLQotaW50IHRocmVhZF9wb29sX3NjaGVkdWxlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJaW50ICgqIHNldHVwKSh2b2lkICpzdG9yZWRfcHJpdmF0ZSwgdm9pZCAqc2V0dXBfZGF0YSksCi0JCWludCAoKiBhY3Rpb24pKHZvaWQgKnN0b3JlZF9wcml2YXRlLCB2b2lkICpzZXR1cF9kYXRhKSwKLQkJdm9pZCAqc2V0dXBfZGF0YSwgbG9uZyB0aW1lb3V0KTsKLWludCB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJaW50ICgqIHNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJaW50ICgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCwgdm9pZCAqaWQpOwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9fRFNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKaW5kZXggZjA3ZjM0ZC4uMjU4MDg4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKQEAgLTcyLDYgKzcyLDggQEAKIAlzdHJ1Y3QgaW5vZGUgKiBzX2pvdXJuYWxfaW5vZGU7CiAJc3RydWN0IGpvdXJuYWxfcyAqIHNfam91cm5hbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOworCXN0cnVjdCBtdXRleCBzX29ycGhhbl9sb2NrOworCXN0cnVjdCBtdXRleCBzX3Jlc2l6ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqam91cm5hbF9iZGV2OwogI2lmZGVmIENPTkZJR19KQkRfREVCVUcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaCBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaAppbmRleCBjZjgyZDUxLi5kN2I1ZGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCkBAIC00NCwxMyArNDQsMTMgQEAKIAogI2RlZmluZSBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKHNiKQkoRVhUM19TSU5HTEVEQVRBX1RSQU5TX0JMT0NLUyArIFwKIAkJCQkJIEVYVDNfWEFUVFJfVFJBTlNfQkxPQ0tTIC0gMiArIFwKLQkJCQkJIDIqRVhUM19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKQorCQkJCQkgRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKHNiKSkKIAogLyogRGVsZXRlIG9wZXJhdGlvbnMgcG90ZW50aWFsbHkgaGl0IG9uZSBkaXJlY3RvcnkncyBuYW1lc3BhY2UgcGx1cyBhbgogICogZW50aXJlIGlub2RlLCBwbHVzIGFyYml0cmFyeSBhbW91bnRzIG9mIGJpdG1hcC9pbmRpcmVjdGlvbiBkYXRhLiAgQmUKICAqIGdlbmVyb3VzLiAgV2UgY2FuIGdyb3cgdGhlIGRlbGV0ZSB0cmFuc2FjdGlvbiBsYXRlciBpZiBuZWNlc3NhcnkuICovCiAKLSNkZWZpbmUgRVhUM19ERUxFVEVfVFJBTlNfQkxPQ0tTKHNiKQkoMiAqIEVYVDNfREFUQV9UUkFOU19CTE9DS1Moc2IpICsgNjQpCisjZGVmaW5lIEVYVDNfREVMRVRFX1RSQU5TX0JMT0NLUyhzYikgICAoRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKHNiKSArIDY0KQogCiAvKiBEZWZpbmUgYW4gYXJiaXRyYXJ5IGxpbWl0IGZvciB0aGUgYW1vdW50IG9mIGRhdGEgd2Ugd2lsbCBhbnRpY2lwYXRlCiAgKiB3cml0aW5nIHRvIGFueSBnaXZlbiB0cmFuc2FjdGlvbi4gIEZvciB1bmJvdW5kZWQgdHJhbnNhY3Rpb25zIHN1Y2ggYXMKQEAgLTg2LDYgKzg2LDkgQEAKICNkZWZpbmUgRVhUM19RVU9UQV9JTklUX0JMT0NLUyhzYikgMAogI2RlZmluZSBFWFQzX1FVT1RBX0RFTF9CTE9DS1Moc2IpIDAKICNlbmRpZgorI2RlZmluZSBFWFQzX01BWFFVT1RBU19UUkFOU19CTE9DS1Moc2IpIChNQVhRVU9UQVMqRVhUM19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKQorI2RlZmluZSBFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhzYikgKE1BWFFVT1RBUypFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKHNiKSkKKyNkZWZpbmUgRVhUM19NQVhRVU9UQVNfREVMX0JMT0NLUyhzYikgKE1BWFFVT1RBUypFWFQzX1FVT1RBX0RFTF9CTE9DS1Moc2IpKQogCiBpbnQKIGV4dDNfbWFya19pbG9jX2RpcnR5KGhhbmRsZV90ICpoYW5kbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpZW1hcC5oIGIvaW5jbHVkZS9saW51eC9maWVtYXAuaAppbmRleCA5MzRlMjJkLi5kODMwNzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpZW1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZmllbWFwLmgKQEAgLTYyLDUgKzYyLDcgQEAKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9NRVJHRUQJCTB4MDAwMDEwMDAgLyogRmlsZSBkb2VzIG5vdCBuYXRpdmVseQogCQkJCQkJICAgICogc3VwcG9ydCBleHRlbnRzLiBSZXN1bHQKIAkJCQkJCSAgICAqIG1lcmdlZCBmb3IgZWZmaWNpZW5jeS4gKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9TSEFSRUQJCTB4MDAwMDIwMDAgLyogU3BhY2Ugc2hhcmVkIHdpdGggb3RoZXIKKwkJCQkJCSAgICAqIGZpbGVzLiAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0ZJRU1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggN2UzMDEyZS4uOTE0N2NhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjI5Nyw2ICsyMjk3LDcgQEAKIGV4dGVybiBpbnQgZ2VuZXJpY19yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgX191c2VyICosIGludCk7CiBleHRlcm4gdm9pZCBnZW5lcmljX2ZpbGxhdHRyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qga3N0YXQgKik7CiBleHRlcm4gaW50IHZmc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdCAqKTsKK3ZvaWQgX19pbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKTsKIHZvaWQgaW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcyk7CiB2b2lkIGlub2RlX3N1Yl9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpOwogbG9mZl90IGlub2RlX2dldF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZpZm8uaCBiL2luY2x1ZGUvbGludXgva2ZpZm8uaAppbmRleCA0ODZlOGFkLi4zZDQ0ZTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZmlmby5oCkBAIC02OSw4ICs2OSw4IEBACiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKICAqIEBzaXplOiBzaXplIG9mIHRoZSBmaWZvIGJ1ZmZlcgogICoKLSAqIE5vdGU6IHRoZSBtYWNybyBjYW4gYmUgdXNlZCBpbnNpZGUgc3RydWN0IG9yIHVuaW9uIGRlY2xhcmF0aW9uCi0gKiBOb3RlOiB0aGUgbWFjcm8gY3JlYXRlcyB0d28gb2JqZWN0czoKKyAqIE5vdGUxOiB0aGUgbWFjcm8gY2FuIGJlIHVzZWQgaW5zaWRlIHN0cnVjdCBvciB1bmlvbiBkZWNsYXJhdGlvbgorICogTm90ZTI6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgogICogIEEga2ZpZm8gb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGEgYnVmZmVyIGZvciB0aGUga2ZpZm8KICAqICBvYmplY3QgbmFtZWQgbmFtZSMja2ZpZm9fYnVmZmVyCiAgKi8KQEAgLTgzLDcgKzgzLDYgQEAKIC8qKgogICogSU5JVF9LRklGTyAtIEluaXRpYWxpemUgYSBrZmlmbyBkZWNsYXJlZCBieSBERUNMQVJFRF9LRklGTwogICogQG5hbWU6IG5hbWUgb2YgdGhlIGRlY2xhcmVkIGtmaWZvIGRhdGF0eXBlCi0gKiBAc2l6ZTogc2l6ZSBvZiB0aGUgZmlmbyBidWZmZXIKICAqLwogI2RlZmluZSBJTklUX0tGSUZPKG5hbWUpIFwKIAluYW1lID0gX19rZmlmb19pbml0aWFsaXplcihzaXplb2YobmFtZSMja2ZpZm9fYnVmZmVyKSAtIFwKQEAgLTk0LDggKzkzLDggQEAKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZWNsYXJlZCBrZmlmbyBkYXRhdHlwZQogICogQHNpemU6IHNpemUgb2YgdGhlIGZpZm8gYnVmZmVyCiAgKgotICogTm90ZTogdGhlIG1hY3JvIGNhbiBiZSB1c2VkIGZvciBnbG9iYWwgYW5kIGxvY2FsIGtmaWZvIGRhdGEgdHlwZSB2YXJpYWJsZXMKLSAqIE5vdGU6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgorICogTm90ZTE6IHRoZSBtYWNybyBjYW4gYmUgdXNlZCBmb3IgZ2xvYmFsIGFuZCBsb2NhbCBrZmlmbyBkYXRhIHR5cGUgdmFyaWFibGVzCisgKiBOb3RlMjogdGhlIG1hY3JvIGNyZWF0ZXMgdHdvIG9iamVjdHM6CiAgKiAgQSBrZmlmbyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgYSBidWZmZXIgZm9yIHRoZSBrZmlmbwogICogIG9iamVjdCBuYW1lZCBuYW1lIyNrZmlmb19idWZmZXIKICAqLwpAQCAtMjQ5LDcgKzI0OCw3IEBACiBleHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb190b191c2VyKHN0cnVjdCBrZmlmbyAqZmlmbywKIAl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuKTsKIAotLyoqCisvKgogICogX19rZmlmb19hZGRfb3V0IGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIG91dCBvZmZzZXQKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fYWRkX291dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCkBAIC0yNTksNyArMjU4LDcgQEAKIAlmaWZvLT5vdXQgKz0gb2ZmOwogfQogCi0vKioKKy8qCiAgKiBfX2tmaWZvX2FkZF9pbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSBpbiBvZmZzZXQKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fYWRkX2luKHN0cnVjdCBrZmlmbyAqZmlmbywKQEAgLTI2OSw3ICsyNjgsNyBAQAogCWZpZm8tPmluICs9IG9mZjsKIH0KIAotLyoqCisvKgogICogX19rZmlmb19vZmYgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBjYWxjdWxhdGluZyB0aGUgaW5kZXggb2YgYQogICogZ2l2ZW4gb2ZmZXNldAogICovCkBAIC0yNzgsNyArMjc3LDcgQEAKIAlyZXR1cm4gb2ZmICYgKGZpZm8tPnNpemUgLSAxKTsKIH0KIAotLyoqCisvKgogICogX19rZmlmb19wZWVrX24gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBkZXRlcm1pbmF0ZSB0aGUgbGVuZ3RoIG9mCiAgKiB0aGUgbmV4dCByZWNvcmQgaW4gdGhlIGZpZm8KICAqLwpAQCAtMjk5LDcgKzI5OCw3IEBACiAjdW5kZWYJX19LRklGT19HRVQKIH0KIAotLyoqCisvKgogICogX19rZmlmb19wb2tlX24gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBzdG9yaW5nIHRoZSBsZW5ndGggb2YKICAqIHRoZSBuZXh0IHJlY29yZCBpbnRvIHRoZSBmaWZvCiAgKi8KQEAgLTMxOSw3ICszMTgsNyBAQAogI3VuZGVmCV9fS0ZJRk9fUFVUCiB9CiAKLS8qKgorLyoKICAqIF9fa2ZpZm9faW5fLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgcHV0IGRhdGUgaW50byB0aGUgZmlmbwogICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19pbl9yZWMoKSBpbnN0ZWFkCiAgKi8KQEAgLTM2Nyw3ICszNjYsNyBAQAogCXJldHVybiBfX2tmaWZvX2luX3JlYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKIH0KIAotLyoqCisvKgogICogX19rZmlmb19vdXRfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgZ2V0IGRhdGUgZnJvbSB0aGUgZmlmbwogICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19vdXRfcmVjKCkgaW5zdGVhZAogICovCkBAIC00MjUsNyArNDI0LDcgQEAKIAlyZXR1cm4gX19rZmlmb19vdXRfcmVjKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7CiB9CiAKLS8qKgorLyoKICAqIF9fa2ZpZm9fZnJvbV91c2VyXy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHRyYW5zZmVyIGZyb20gdXNlciBzcGFjZSBpbnRvCiAgKiB0aGUgZmlmby4gZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19mcm9tX3VzZXJfcmVjKCkgaW5zdGVhZAogICovCkBAIC00NzQsNyArNDczLDcgQEAKIAlyZXR1cm4gX19rZmlmb19mcm9tX3VzZXJfcmVjKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOwogfQogCi0vKioKKy8qCiAgKiBfX2tmaWZvX3RvX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZmlmbyBkYXRhIGludG8gdXNlciBzcGFjZQogICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb190b191c2VyX3JlYygpIGluc3RlYWQKICAqLwpAQCAtNTMzLDcgKzUzMiw3IEBACiAJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9yZWMoZmlmbywgdG8sIG4sIHJlY3NpemUsIHRvdGFsKTsKIH0KIAotLyoqCisvKgogICogX19rZmlmb19wZWVrXy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHBlZWsgaW50byB0aGUgbmV4dCBmaWZvIHJlY29yZAogICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19wZWVrX3JlYygpIGluc3RlYWQKICAqLwpAQCAtNTU3LDcgKzU1Niw3IEBACiAJcmV0dXJuIF9fa2ZpZm9fcGVla19uKGZpZm8sIHJlY3NpemUpOwogfQogCi0vKioKKy8qCiAgKiBfX2tmaWZvX3NraXBfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3Igc2tpcCB0aGUgbmV4dCBmaWZvIHJlY29yZAogICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19za2lwX3JlYygpIGluc3RlYWQKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IGU3MGU2MjEuLmE2ODYxZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTMxNSw4ICszMTUsOSBAQAogCWludCAoKmNsYWltX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwogCS8qIHJlbGVhc2UgcnN2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KIAl2b2lkICgqcmVsZWFzZV9yc3YpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7Ci0JLyogZ2V0IHJlc2VydmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCi0JcXNpemVfdCAoKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwkvKiBnZXQgcmVzZXJ2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MsIHZhbHVlIHJldHVybmVkIGlzIG1hbmFnZWQgYnkKKwkgKiBxdW90YSBjb2RlIG9ubHkgKi8KKwlxc2l6ZV90ICooKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKIH07CiAKIC8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ueXBpLmggYi9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oCmluZGV4IDM0YzQ0NzUuLjRmOTVjMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ueXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zb255cGkuaApAQCAtMTExLDYgKzExMSw3IEBACiAjZGVmaW5lIFNPTllQSV9FVkVOVF9WT0xVTUVfSU5DX1BSRVNTRUQJCTY5CiAjZGVmaW5lIFNPTllQSV9FVkVOVF9WT0xVTUVfREVDX1BSRVNTRUQJCTcwCiAjZGVmaW5lIFNPTllQSV9FVkVOVF9CUklHSFRORVNTX1BSRVNTRUQJCTcxCisjZGVmaW5lIFNPTllQSV9FVkVOVF9NRURJQV9QUkVTU0VECQk3MgogCiAvKiBnZXQvc2V0IGJyaWdodG5lc3MgKi8KICNkZWZpbmUgU09OWVBJX0lPQ0dCUlQJCV9JT1IoJ3YnLCAwLCBfX3U4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDlkNjhmZWQuLmNmYTgzMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTk5LDggKzk5LDkgQEAKIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIpOwogCiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwotdm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwordm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CiAKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2xpbmsoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqZWN0ICp0YXJnZXQsCiAJCQkJICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xNzUsMTMgKzE3NiwxMyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQorCQkJCQljb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkJIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQorCQkJCQkgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggODdmMWY0Ny4uYzUzNWNjNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTIwNDUsMTEgKzIwNDUsMTAgQEAKIAogCXRyYWNlX3NjaGVkX21pZ3JhdGVfdGFzayhwLCBuZXdfY3B1KTsKIAotCWlmICh0YXNrX2NwdShwKSA9PSBuZXdfY3B1KQotCQlyZXR1cm47Ci0KLQlwLT5zZS5ucl9taWdyYXRpb25zKys7Ci0JcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TLCAxLCAxLCBOVUxMLCAwKTsKKwlpZiAodGFza19jcHUocCkgIT0gbmV3X2NwdSkgeworCQlwLT5zZS5ucl9taWdyYXRpb25zKys7CisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUywgMSwgMSwgTlVMTCwgMCk7CisJfQogCiAJX19zZXRfdGFza19jcHUocCwgbmV3X2NwdSk7CiB9CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBlZTlmM2UwLi4xN2I4OTQ3IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTI1Myw3ICsyNTMsNyBAQAogCiBjb25maWcgSFdQT0lTT05fSU5KRUNUCiAJdHJpc3RhdGUgIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yIgotCWRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgJiYgREVCVUdfS0VSTkVMCisJZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSAmJiBERUJVR19LRVJORUwgJiYgUFJPQ19GUwogCXNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUgogCiBjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNmEwNDY2ZS4uMTcyOTlmZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01Miw2ICs1Miw4IEBACiAKIGF0b21pY19sb25nX3QgbWNlX2JhZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgfHwgZGVmaW5lZChDT05GSUdfSFdQT0lTT05fSU5KRUNUX01PRFVMRSkKKwogdTMyIGh3cG9pc29uX2ZpbHRlcl9lbmFibGUgPSAwOwogdTMyIGh3cG9pc29uX2ZpbHRlcl9kZXZfbWFqb3IgPSB+MFU7CiB1MzIgaHdwb2lzb25fZmlsdGVyX2Rldl9taW5vciA9IH4wVTsKQEAgLTE2NCw2ICsxNjYsMTMgQEAKIAogCXJldHVybiAwOwogfQorI2Vsc2UKK2ludCBod3BvaXNvbl9maWx0ZXIoc3RydWN0IHBhZ2UgKnApCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogRVhQT1JUX1NZTUJPTF9HUEwoaHdwb2lzb25fZmlsdGVyKTsKIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvS2NvbmZpZyBiL3NvdW5kL2NvcmUvS2NvbmZpZwppbmRleCBjMTU2ODJhLi40NzU0NTVjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL0tjb25maWcKKysrIGIvc291bmQvY29yZS9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogY29uZmlnIFNORF9QQ00KIAl0cmlzdGF0ZQogCXNlbGVjdCBTTkRfVElNRVIKKwlzZWxlY3QgR0NECiAKIGNvbmZpZyBTTkRfSFdERVAKIAl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fdGltZXIuYyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKaW5kZXggY2E4MDY4Yi4uYjAxZDk0OCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9nY2QuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvdGltZXIuaD4KQEAgLTI4LDIyICsyOSw2IEBACiAgKiAgVGltZXIgZnVuY3Rpb25zCiAgKi8KIAotLyogR3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdjZCh1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYikKLXsKLQl1bnNpZ25lZCBsb25nIHI7Ci0JaWYgKGEgPCBiKSB7Ci0JCXIgPSBhOwotCQlhID0gYjsKLQkJYiA9IHI7Ci0JfQotCXdoaWxlICgociA9IGEgJSBiKSAhPSAwKSB7Ci0JCWEgPSBiOwotCQliID0gcjsKLQl9Ci0JcmV0dXJuIGI7Ci19Ci0KIHZvaWQgc25kX3BjbV90aW1lcl9yZXNvbHV0aW9uX2NoYW5nZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAl1bnNpZ25lZCBsb25nIHJhdGUsIG11bHQsIGZzaXplLCBsLCBwb3N0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggOWNmZGI3Ny4uOTUwZWU1Y2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtMTA4NiwxMSArMTA4Niw2IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JLyogYXVkaW8gY29kZWMgc2hvdWxkIG92ZXJyaWRlIHRoZSBtaXhlciBuYW1lICovCi0JaWYgKGNvZGVjLT5hZmcgfHwgISpjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpCi0JCXNucHJpbnRmKGNvZGVjLT5idXMtPmNhcmQtPm1peGVybmFtZSwKLQkJCSBzaXplb2YoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSwKLQkJCSAiJXMgJXMiLCBjb2RlYy0+dmVuZG9yX25hbWUsIGNvZGVjLT5jaGlwX25hbWUpOwogCiAJaWYgKGlzX2dlbmVyaWNfY29uZmlnKGNvZGVjKSkgewogCQllcnIgPSBzbmRfaGRhX3BhcnNlX2dlbmVyaWNfY29kZWMoY29kZWMpOwpAQCAtMTEwOSw2ICsxMTA0LDExIEBACiAgcGF0Y2hlZDoKIAlpZiAoIWVyciAmJiBjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KQogCQllcnIgPSBpbml0X3Vuc29sX3F1ZXVlKGNvZGVjLT5idXMpOworCS8qIGF1ZGlvIGNvZGVjIHNob3VsZCBvdmVycmlkZSB0aGUgbWl4ZXIgbmFtZSAqLworCWlmICghZXJyICYmIChjb2RlYy0+YWZnIHx8ICEqY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSkKKwkJc25wcmludGYoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lLAorCQkJIHNpemVvZihjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpLAorCQkJICIlcyAlcyIsIGNvZGVjLT52ZW5kb3JfbmFtZSwgY29kZWMtPmNoaXBfbmFtZSk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfY29uZmlndXJlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDliNTZmOTMuLmZmOGFkNDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMjMyMiw2ICsyMzIyLDcgQEAKICAqIHdoaXRlL2JsYWNrLWxpc3QgZm9yIGVuYWJsZV9tc2kKICAqLwogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIG1zaV9ibGFja19saXN0W10gX19kZXZpbml0ZGF0YSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWYyLCAiQVNVUyIsIDApLCAvKiBBdGhsb242NCBYMiArIG52aWRpYSAqLwogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCA0YjIwMGRhLi5mZTA0MjNjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKQEAgLTY2LDYgKzY2LDcgQEAKIC8qIGF2YWlsYWJsZSBtb2RlbHMgKi8KIGVudW0gewogCUNTNDIwWF9NQlA1NSwKKwlDUzQyMFhfSU1BQzI3LAogCUNTNDIwWF9BVVRPLAogCUNTNDIwWF9NT0RFTFMKIH07CkBAIC04MjcsNyArODI4LDggQEAKIAkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJCSAgICBocF9wcmVzZW50ID8gMCA6IFBJTl9PVVQpOwogCX0KLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IENTNDIwWF9NQlA1NSkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gQ1M0MjBYX01CUDU1IHx8CisJICAgIHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBDUzQyMFhfSU1BQzI3KSB7CiAJCXVuc2lnbmVkIGludCBncGlvID0gaHBfcHJlc2VudCA/IDB4MDIgOiAweDA4OwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAxLCAwLAogCQkJCSAgICBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIGdwaW8pOwpAQCAtMTA2OSwxMiArMTA3MSwxNCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqY3M0MjB4X21vZGVsc1tDUzQyMFhfTU9ERUxTXSA9IHsKIAlbQ1M0MjBYX01CUDU1XSA9ICJtYnA1NSIsCisJW0NTNDIwWF9JTUFDMjddID0gImltYWMyNyIsCiAJW0NTNDIwWF9BVVRPXSA9ICJhdXRvIiwKIH07CiAKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGNzNDIweF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwZGUsIDB4Y2I3OSwgIk1hY0Jvb2tQcm8gNSw1IiwgQ1M0MjBYX01CUDU1KSwKKwlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHg3MjcwLCAiSU1hYyAyNyBJbmNoIiwgQ1M0MjBYX0lNQUMyNyksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMTA5Nyw4ICsxMTAxLDIzIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBjc19waW5jZmcgaW1hYzI3X3BpbmNmZ3NbXSA9IHsKKwl7IDB4MDksIDB4MDEyYjQwNTAgfSwKKwl7IDB4MGEsIDB4OTAxMDAxNDAgfSwKKwl7IDB4MGIsIDB4OTAxMDAxNDIgfSwKKwl7IDB4MGMsIDB4MDE4YjMwMjAgfSwKKwl7IDB4MGQsIDB4OTBhMDAxMTAgfSwKKwl7IDB4MGUsIDB4NDAwMDAwZjAgfSwKKwl7IDB4MGYsIDB4MDFjYmUwMzAgfSwKKwl7IDB4MTAsIDB4MDE0YmUwNjAgfSwKKwl7IDB4MTIsIDB4MDFhYjkwNzAgfSwKKwl7IDB4MTUsIDB4NDAwMDAwZjAgfSwKKwl7fSAvKiB0ZXJtaW5hdG9yICovCit9OworCiBzdGF0aWMgc3RydWN0IGNzX3BpbmNmZyAqY3NfcGluY2Znc1tDUzQyMFhfTU9ERUxTXSA9IHsKIAlbQ1M0MjBYX01CUDU1XSA9IG1icDU1X3BpbmNmZ3MsCisJW0NTNDIwWF9JTUFDMjddID0gaW1hYzI3X3BpbmNmZ3MsCiB9OwogCiBzdGF0aWMgdm9pZCBmaXhfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbW9kZWwpCkBAIC0xMTI4LDYgKzExNDcsNyBAQAogCQlmaXhfcGluY2ZnKGNvZGVjLCBzcGVjLT5ib2FyZF9jb25maWcpOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKKwljYXNlIENTNDIwWF9JTUFDMjc6CiAJY2FzZSBDUzQyMFhfTUJQNTU6CiAJCS8qIEdQSU8xID0gaGVhZHBob25lcyAqLwogCQkvKiBHUElPMyA9IHNwZWFrZXJzICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggM2Q1OWY4My4uZWVkYTdiZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMjEwNCw2ICsyMTA0LDcgQEAKICAgICAxMDI4MDIwNAogICAgIDEwMjgwMjFGCiAgICAgMTAyODAyMjggKERlbGwgVm9zdHJvIDE1MDApCisgICAgMTAyODAyMjkgKERlbGwgVm9zdHJvIDE3MDApCiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBkZWxsXzkyMDVfbTQyX3Bpbl9jb25maWdzWzEyXSA9IHsKIAkweDAzMjExMDFGLCAweDAzQTExMDIwLCAweDQwMDAwM0ZBLCAweDkwMTcwMzEwLApAQCAtMjE4OSw2ICsyMTkwLDggQEAKIAkJICAgICAgIkRlbGwgSW5zcGlyb24iLCBTVEFDXzkyMDVfREVMTF9NNDQpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMjgsCiAJCSAgICAgICJEZWxsIFZvc3RybyAxNTAwIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjI5LAorCQkgICAgICAiRGVsbCBWb3N0cm8gMTcwMCIsIFNUQUNfOTIwNV9ERUxMX000MiksCiAJLyogR2F0ZXdheSAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDA1NjAsICJHYXRld2F5IFQ2ODM0YyIsIFNUQUNfOTIwNV9FQVBEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgwNTY1LCAiR2F0ZXdheSBUMTYxNiIsIFNUQUNfOTIwNV9FQVBEKSwKQEAgLTM3NzksMTUgKzM3ODIsMTYgQEAKIAkJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIG5pZCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJLyogSURUL1NUQUMgY29kZWNzIGhhdmUgbGluZWFyIGJlZXAgdG9uZSBwYXJhbWV0ZXIgKi8KLQkJY29kZWMtPmJlZXAtPmxpbmVhcl90b25lID0gMTsKLQkJLyogaWYgbm8gYmVlcCBzd2l0Y2ggaXMgYXZhaWxhYmxlLCBtYWtlIGl0cyBvd24gb25lICovCi0JCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgbmlkLCBIREFfT1VUUFVUKTsKLQkJaWYgKGNvZGVjLT5iZWVwICYmCi0JCSAgICAhKChjYXBzICYgQUNfQU1QQ0FQX01VVEUpID4+IEFDX0FNUENBUF9NVVRFX1NISUZUKSkgewotCQkJZXJyID0gc3RhYzkyeHhfYmVlcF9zd2l0Y2hfY3RsKGNvZGVjKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7CisJCWlmIChjb2RlYy0+YmVlcCkgeworCQkJLyogSURUL1NUQUMgY29kZWNzIGhhdmUgbGluZWFyIGJlZXAgdG9uZSBwYXJhbWV0ZXIgKi8KKwkJCWNvZGVjLT5iZWVwLT5saW5lYXJfdG9uZSA9IDE7CisJCQkvKiBpZiBubyBiZWVwIHN3aXRjaCBpcyBhdmFpbGFibGUsIG1ha2UgaXRzIG93biBvbmUgKi8KKwkJCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgbmlkLCBIREFfT1VUUFVUKTsKKwkJCWlmICghKGNhcHMgJiBBQ19BTVBDQVBfTVVURSkpIHsKKwkJCQllcnIgPSBzdGFjOTJ4eF9iZWVwX3N3aXRjaF9jdGwoY29kZWMpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQogCQl9CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCAwYWMxMjE1Li5lMjM3YmY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKQEAgLTQ2Myw3ICs0NjMsOCBAQAogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCi0Jc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CisJaWYgKHJlZyA8IDB4N2MpCisJCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwogCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMgYi9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKaW5kZXggMDI2N2QyZC4uMDdkMmEyNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jCisrKyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYwpAQCAtMTgwLDcgKzE4MCw4IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCiAJLyogZGlzYWJsZSB0aGUgUExMICovCi0JcmV0dXJuIGNvZGVjX2RhaS0+b3BzLT5zZXRfcGxsKGNvZGVjX2RhaSwgSUdOT1JFRF9BUkcsIDAsIDApOworCXJldHVybiBjb2RlY19kYWktPm9wcy0+c2V0X3BsbChjb2RlY19kYWksIElHTk9SRURfQVJHLCBJR05PUkVEX0FSRywKKwkJCQkgICAgICAgMCwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKaW5kZXggOWM0OWMxMS4uNDI4MTNiOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2kuYwpAQCAtODc2LDcgKzg3Niw3IEBACiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFyZXMgfHwgIWlycSkgeworCWlmICghcmVzIHx8IChpbnQpaXJxIDw9IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm90IGVub3VnaCBGU0kgcGxhdGZvcm0gcmVzb3VyY2VzLlxuIik7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXhpdDsK